From 10416dd5ca64f20022ee8bd780598695f3b7c8a1 Mon Sep 17 00:00:00 2001 From: cskh Date: Tue, 31 May 2022 18:20:10 +0000 Subject: [PATCH] backport of commit 6e7a8f1c28c960298f320024b10fd5fc14e45aaa --- .changelog/10996.txt | 3 - .changelog/12695.txt | 3 - .changelog/12787.txt | 3 - .changelog/12807.txt | 3 - .changelog/12819.txt | 3 - .changelog/12825.txt | 3 - .changelog/12844.txt | 3 - .changelog/12865.txt | 3 - .changelog/12881.txt | 4 - .changelog/12885.txt | 3 - .changelog/12914.txt | 3 - .changelog/12935.txt | 3 - .changelog/13001.txt | 3 - .changelog/13012.txt | 3 - .changelog/13062.txt | 3 - .changelog/13143.txt | 3 - .changelog/_1679.txt | 3 - .circleci/config.yml | 156 +- .circleci/terraform/load-test/main.tf | 9 +- .circleci/terraform/load-test/variables.tf | 6 - .github/CONTRIBUTING.md | 17 +- .github/pull_request_template.md | 18 - .github/scripts/docker_smoke.sh | 23 - .github/workflows/backport-reminder.yml | 2 - .github/workflows/build.yml | 135 +- .github/workflows/changelog-checker.yml | 2 - .github/workflows/embedded-asset-checker.yml | 37 - .github/workflows/load-test.yml | 3 - .github/workflows/nightly-test-1.10.x.yaml | 230 - .github/workflows/nightly-test-1.11.x.yaml | 230 - .github/workflows/nightly-test-1.12.x.yaml | 230 - .github/workflows/nightly-test-main.yaml | 230 - .github/workflows/oss-merge-trigger.yml | 2 +- .github/workflows/website-checker.yml | 2 - .golangci.yml | 10 - .release/ci.hcl | 1 + CHANGELOG.md | 69 +- GNUmakefile | 107 +- INTERNALS.md | 1 + acl/acl_oss.go | 4 +- acl/enterprisemeta_oss.go | 8 - acl/validation.go | 56 - agent/acl.go | 15 +- agent/acl_endpoint.go | 48 +- agent/acl_endpoint_test.go | 95 +- agent/agent.go | 81 +- agent/agent_endpoint.go | 77 +- agent/agent_endpoint_test.go | 13 +- agent/agent_oss.go | 3 - agent/auto-config/config.go | 2 +- agent/auto-config/mock_test.go | 6 +- agent/auto-config/tls.go | 4 +- .../cache-types/catalog_list_services_test.go | 7 +- agent/cache-types/config_entry.go | 10 +- agent/cache-types/config_entry_test.go | 4 +- agent/cache-types/mock_Agent.go | 92 - agent/cache-types/mock_RPC.go | 18 +- .../mock_TrustBundleReader_test.go | 60 - agent/cache-types/rpc.go | 2 +- agent/cache-types/trust_bundle.go | 51 - agent/cache-types/trust_bundle_test.go | 104 - agent/cache/cache.go | 16 +- agent/cache/cache_test.go | 6 +- agent/cache/mock_Request.go | 17 +- agent/cache/mock_Type.go | 17 +- agent/cache/request.go | 12 +- agent/cache/watch.go | 43 +- agent/catalog_endpoint.go | 16 +- agent/catalog_endpoint_test.go | 244 - agent/config/builder.go | 1 - agent/config/config.go | 1 - .../TestRuntimeConfig_Sanitize.golden | 2 +- agent/config_endpoint.go | 12 +- agent/config_endpoint_test.go | 10 +- agent/connect/ca/common.go | 13 + agent/connect/ca/mock_Provider.go | 15 +- agent/connect/ca/provider.go | 2 +- agent/connect/ca/provider_aws.go | 13 +- agent/connect/ca/provider_vault.go | 15 +- agent/connect/csr.go | 22 - agent/connect/sni.go | 17 - agent/connect/sni_test.go | 8 +- agent/connect/testing_ca.go | 1 - agent/connect_auth.go | 11 +- agent/connect_ca_endpoint.go | 9 +- agent/consul/acl.go | 124 +- agent/consul/acl_authmethod.go | 100 + agent/consul/acl_authmethod_test.go | 46 + agent/consul/acl_endpoint.go | 609 +- agent/consul/acl_endpoint_oss.go | 11 + agent/consul/acl_endpoint_test.go | 178 +- agent/consul/acl_server.go | 44 - agent/consul/acl_server_oss.go | 4 - agent/consul/acl_test.go | 124 +- agent/consul/acl_token_exp.go | 2 +- agent/consul/auth/binder.go | 189 - agent/consul/auth/binder_oss.go | 14 - agent/consul/auth/binder_test.go | 372 - agent/consul/auth/login.go | 77 - agent/consul/auth/mock_ACLCache.go | 29 - agent/consul/auth/token_writer.go | 449 - agent/consul/auth/token_writer_oss.go | 10 - agent/consul/auth/token_writer_test.go | 703 - agent/consul/auto_config_endpoint_test.go | 3 +- agent/consul/autopilot.go | 19 +- agent/consul/autopilot_test.go | 99 - .../autopilotevents/mock_Publisher_test.go | 29 - .../autopilotevents/mock_StateStore_test.go | 58 - .../autopilotevents/mock_timeProvider_test.go | 39 - .../autopilotevents/ready_servers_events.go | 311 - .../ready_servers_events_test.go | 647 - agent/consul/catalog_endpoint.go | 81 +- agent/consul/catalog_endpoint_test.go | 5 - agent/consul/client_test.go | 2 +- agent/consul/config.go | 2 - agent/consul/config_endpoint.go | 214 +- agent/consul/config_endpoint_test.go | 52 +- agent/consul/connect_ca_endpoint.go | 2 +- agent/consul/connect_ca_endpoint_test.go | 12 +- agent/consul/discovery_chain_endpoint_test.go | 5 +- agent/consul/fsm/commands_oss.go | 86 +- agent/consul/fsm/commands_oss_test.go | 34 +- agent/consul/fsm/snapshot_oss.go | 83 +- agent/consul/fsm/snapshot_oss_test.go | 42 +- agent/consul/grpc_integration_test.go | 215 - agent/consul/health_endpoint.go | 66 +- agent/consul/health_endpoint_test.go | 209 +- agent/consul/intention_endpoint_test.go | 4 +- agent/consul/internal_endpoint.go | 8 +- agent/consul/internal_endpoint_test.go | 7 +- agent/consul/issue_test.go | 4 +- agent/consul/leader.go | 22 +- agent/consul/leader_connect_ca.go | 13 +- agent/consul/leader_connect_ca_test.go | 29 +- agent/consul/leader_connect_test.go | 10 +- agent/consul/leader_federation_state_ae.go | 2 +- agent/consul/leader_peering.go | 251 - agent/consul/leader_peering_test.go | 197 - agent/consul/leader_test.go | 52 +- agent/consul/merge_service_config.go | 408 - agent/consul/merge_service_config_test.go | 458 - agent/consul/peering_backend.go | 169 - agent/consul/peering_backend_oss.go | 15 - agent/consul/peering_backend_oss_test.go | 51 - agent/consul/peering_backend_test.go | 116 - agent/consul/prepared_query/walk_test.go | 5 +- agent/consul/prepared_query_endpoint.go | 4 +- agent/consul/rpc_test.go | 10 +- agent/consul/server.go | 113 +- agent/consul/server_connect.go | 4 +- agent/consul/server_register.go | 2 +- agent/consul/server_test.go | 86 +- agent/consul/state/acl_schema.go | 20 - agent/consul/state/catalog.go | 1052 +- agent/consul/state/catalog_events.go | 74 +- agent/consul/state/catalog_events_oss.go | 17 - agent/consul/state/catalog_events_oss_test.go | 45 - agent/consul/state/catalog_events_test.go | 175 +- agent/consul/state/catalog_oss.go | 148 +- agent/consul/state/catalog_oss_test.go | 363 +- agent/consul/state/catalog_schema.go | 153 +- agent/consul/state/catalog_test.go | 1349 +- agent/consul/state/config_entry.go | 136 - agent/consul/state/config_entry_oss.go | 12 - agent/consul/state/config_entry_oss_test.go | 121 - agent/consul/state/config_entry_test.go | 493 +- agent/consul/state/connect_ca_events.go | 13 +- agent/consul/state/coordinate_test.go | 5 +- agent/consul/state/intention.go | 7 +- agent/consul/state/peering.go | 647 - agent/consul/state/peering_oss.go | 66 - agent/consul/state/peering_test.go | 1096 -- agent/consul/state/query.go | 16 +- agent/consul/state/query_oss.go | 24 - agent/consul/state/schema.go | 6 +- agent/consul/state/schema_oss.go | 15 +- agent/consul/state/session_test.go | 10 +- agent/consul/state/state_store.go | 9 +- agent/consul/state/store_integration_test.go | 25 +- agent/consul/state/txn.go | 28 +- agent/consul/state/txn_test.go | 6 +- agent/consul/state/usage_test.go | 4 +- agent/consul/stream/event.go | 55 +- agent/consul/stream/event_publisher.go | 2 +- agent/consul/stream/event_publisher_test.go | 55 +- agent/consul/stream/string_types.go | 11 - agent/consul/stream/subscription.go | 18 - agent/consul/stream/subscription_test.go | 4 +- agent/consul/txn_endpoint_test.go | 6 +- agent/coordinate_endpoint.go | 4 +- agent/coordinate_endpoint_test.go | 10 +- agent/discovery_chain_endpoint.go | 8 +- agent/discovery_chain_endpoint_test.go | 3 +- agent/event_endpoint.go | 4 +- agent/event_endpoint_test.go | 8 +- agent/federation_state_endpoint.go | 2 +- .../private/internal/testservice/simple.proto | 12 +- .../private/services/subscribe/subscribe.go | 65 +- .../services/subscribe/subscribe_test.go | 46 +- agent/grpc/public/forward.go | 16 - agent/grpc/public/services/acl/login.go | 92 - agent/grpc/public/services/acl/login_test.go | 256 - agent/grpc/public/services/acl/logout.go | 68 - agent/grpc/public/services/acl/logout_test.go | 224 - agent/grpc/public/services/acl/mock_Login.go | 50 - .../public/services/acl/mock_TokenWriter.go | 38 - .../public/services/acl/mock_Validator.go | 51 - agent/grpc/public/services/acl/server.go | 88 - agent/grpc/public/services/acl/server_test.go | 37 - .../public/services/connectca/acl_test.go | 27 + .../services/connectca/mock_ACLResolver.go | 24 +- .../services/connectca/mock_CAManager.go | 51 - .../grpc/public/services/connectca/server.go | 31 +- .../public/services/connectca/server_test.go | 86 +- agent/grpc/public/services/connectca/sign.go | 96 - .../public/services/connectca/sign_test.go | 253 - .../public/services/connectca/watch_roots.go | 19 +- .../services/connectca/watch_roots_test.go | 68 +- .../get_envoy_boostrap_params_test.go | 260 - .../dataplane/get_envoy_bootstrap_params.go | 88 - .../dataplane/get_supported_features.go | 49 - .../dataplane/get_supported_features_test.go | 82 - .../services/dataplane/mock_ACLResolver.go | 47 - .../grpc/public/services/dataplane/server.go | 42 - .../public/services/dataplane/server_test.go | 25 - .../serverdiscovery/mock_ACLResolver.go | 36 - .../public/services/serverdiscovery/server.go | 38 - .../services/serverdiscovery/server_test.go | 89 - .../services/serverdiscovery/watch_servers.go | 146 - .../serverdiscovery/watch_servers_test.go | 302 - agent/grpc/public/testutils/acl.go | 44 - agent/grpc/public/testutils/fsm.go | 81 - agent/grpc/public/testutils/server.go | 30 - agent/grpc/public/utils.go | 13 - agent/health_endpoint.go | 16 +- agent/health_endpoint_test.go | 462 +- agent/http.go | 106 +- agent/http_oss.go | 35 +- agent/http_register.go | 4 - agent/http_test.go | 12 +- agent/intentions_endpoint.go | 26 +- agent/intentions_endpoint_test.go | 5 +- agent/kvs_endpoint.go | 9 +- agent/operator_endpoint.go | 21 +- agent/peering_endpoint.go | 160 - agent/peering_endpoint_oss_test.go | 76 - agent/peering_endpoint_test.go | 415 - agent/prepared_query_endpoint.go | 10 +- agent/prepared_query_endpoint_test.go | 24 +- agent/proxycfg-glue/glue.go | 158 - .../proxycfg-sources/catalog/config_source.go | 259 - .../catalog/config_source_test.go | 266 - .../catalog/mock_ConfigManager.go | 71 - .../proxycfg-sources/catalog/mock_Watcher.go | 59 - agent/proxycfg-sources/local/config_source.go | 31 - agent/proxycfg-sources/local/local.go | 2 - .../local/mock_ConfigManager.go | 87 - agent/proxycfg-sources/local/sync.go | 125 - agent/proxycfg-sources/local/sync_test.go | 111 - agent/proxycfg/connect_proxy.go | 74 +- agent/proxycfg/data_sources.go | 187 - agent/proxycfg/data_sources_oss.go | 6 - agent/proxycfg/ingress_gateway.go | 14 +- agent/proxycfg/manager.go | 258 +- agent/proxycfg/manager_test.go | 311 +- agent/proxycfg/mesh_gateway.go | 20 +- agent/proxycfg/mesh_gateway_oss.go | 4 +- agent/proxycfg/naming.go | 32 +- agent/proxycfg/naming_oss.go | 6 +- agent/proxycfg/naming_test.go | 22 +- agent/proxycfg/proxycfg.go | 98 +- agent/proxycfg/snapshot.go | 23 +- agent/proxycfg/state.go | 59 +- agent/proxycfg/state_oss_test.go | 6 - agent/proxycfg/state_test.go | 562 +- agent/proxycfg/terminating_gateway.go | 28 +- agent/proxycfg/testing.go | 292 +- agent/proxycfg/testing_connect_proxy.go | 13 +- agent/proxycfg/testing_ingress_gateway.go | 35 +- agent/proxycfg/testing_mesh_gateway.go | 27 +- agent/proxycfg/testing_oss.go | 12 - agent/proxycfg/testing_peering.go | 86 - agent/proxycfg/testing_terminating_gateway.go | 235 +- agent/proxycfg/testing_tproxy.go | 11 +- agent/proxycfg/testing_upstreams.go | 41 +- agent/proxycfg/upstreams.go | 21 +- agent/rpc/peering/health_snapshot.go | 82 - agent/rpc/peering/health_snapshot_test.go | 152 - agent/rpc/peering/replication.go | 353 - agent/rpc/peering/service.go | 809 -- agent/rpc/peering/service_oss_test.go | 39 - agent/rpc/peering/service_test.go | 1235 -- agent/rpc/peering/stream_test.go | 1223 -- agent/rpc/peering/stream_tracker.go | 212 - agent/rpc/peering/stream_tracker_test.go | 163 - agent/rpc/peering/subscription_blocking.go | 108 - agent/rpc/peering/subscription_manager.go | 783 -- .../rpc/peering/subscription_manager_test.go | 909 -- agent/rpc/peering/subscription_state.go | 183 - agent/rpc/peering/subscription_state_test.go | 200 - agent/rpc/peering/subscription_view.go | 161 - agent/rpc/peering/subscription_view_test.go | 293 - agent/rpc/peering/testing.go | 191 - agent/rpc/peering/testutil_oss_test.go | 16 - agent/rpc/peering/validate.go | 56 - agent/rpc/peering/validate_test.go | 108 - agent/rpcclient/health/health.go | 23 +- agent/rpcclient/health/health_test.go | 14 +- agent/rpcclient/health/view.go | 1 - agent/rpcclient/health/view_test.go | 179 +- agent/service_manager.go | 118 +- agent/service_manager_test.go | 451 + agent/session_endpoint.go | 12 +- agent/structs/acl.go | 65 +- agent/structs/acl_cache.go | 26 - agent/structs/acl_cache_test.go | 8 - agent/structs/acl_test.go | 30 - agent/structs/config_entry.go | 66 +- agent/structs/config_entry_export_oss_test.go | 62 - agent/structs/config_entry_exports.go | 42 +- agent/structs/config_entry_exports_test.go | 94 - agent/structs/config_entry_gateways.go | 27 +- agent/structs/config_entry_oss.go | 7 +- agent/structs/config_entry_test.go | 152 - agent/structs/connect_proxy_config.go | 21 +- agent/structs/peering.go | 45 - agent/structs/prepared_query.go | 4 - agent/structs/service_definition.go | 2 +- agent/structs/structs.go | 192 +- agent/structs/structs_filtering_test.go | 34 +- agent/structs/structs_oss.go | 10 - agent/structs/structs_test.go | 141 +- agent/submatview/local_materializer.go | 109 - agent/submatview/materializer.go | 289 +- agent/submatview/rpc_materializer.go | 125 - agent/submatview/store.go | 42 +- agent/submatview/store_integration_test.go | 8 +- agent/submatview/store_test.go | 60 +- agent/testagent.go | 2 + agent/txn_endpoint.go | 18 +- agent/txn_endpoint_test.go | 51 +- agent/ui_endpoint.go | 20 +- agent/uiserver/README.md | 7 - agent/uiserver/bindata_assetfs.go | 986 ++ agent/uiserver/buf_index_fs.go | 16 +- agent/uiserver/buffered_file.go | 52 +- ...-icon-01cd4680782fbb5bc02301347df9903d.png | Bin 7243 -> 0 bytes ...script-77218cd1268ea6df75775114ae086566.js | 138 - .../ruby-ea43ca3a3bdd63a52811e8464d66134b.js | 38 - .../xml-10ec8b8cc61ef0fbd25b27a599fdcd60.js | 37 - .../yaml-3f129a000349e3075be0f65719884b61.js | 276 - ...routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js | 1 - ...rvices-8b6b2b2bea3add7709b8075a5ed5652b.js | 1 - ...routes-f2c5ce353830c89f540358e7f174e0bf.js | 1 - ...rvices-8b6b2b2bea3add7709b8075a5ed5652b.js | 1 - ...routes-f939ed42e9b83f9d1bbc5256be68e77c.js | 1 - ...rvices-8b6b2b2bea3add7709b8075a5ed5652b.js | 1 - ...routes-cba490481425519435d142c743bbc3d3.js | 1 - ...rvices-85621f245f195fe1ce177064bfb04504.js | 1 - ...ul-ui-20fef69ea9b73df740a420526b12c7fb.css | 1 - ...sul-ui-e58b85f0a8e1fb15ded242e5b25b171c.js | 3507 ----- ...-debug-8f884a3e3f7105d43b7b4024db9b4c99.js | 1 - ...routes-e55bc65732ba7c0352d43313fd9563e6.js | 1 - ...rvices-a17470cdfbd4a4096117ac0103802226.js | 1 - ...-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js | 1 - ...escape-851839b3ea1d0b4eb4c7089446df5e9f.js | 6 - ...coding-cdb50fbdab6d4d3fdf574dd784f77d27.js | 204 - ...ndexes-75eea16b259716db4fd162ee283d2ae5.js | 2 - agent/uiserver/dist/assets/favicon.ico | Bin 6518 -> 0 bytes agent/uiserver/dist/assets/favicon.svg | 7 - .../init-21ea65714d133467454b601efc15e2dd.js | 5 - .../dist/assets/loading-cylon-pink.svg | 11 - ...consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js | 4 - ...etheus-5f31ba3b7ffd850fa916a0a76933e968.js | 43 - ...endor-69ef69e98b7d14d1513f8056b6c6b48d.css | 1 - ...vendor-c7887d0a48fe1497d1843edc3d5bfbc8.js | 11488 ---------------- agent/uiserver/dist/index.html | 85 - agent/uiserver/dist/oidc/callback | 19 - agent/uiserver/dist/robots.txt | 3 - agent/uiserver/dist/torii/redirect.html | 19 - agent/uiserver/redirect_fs.go | 12 +- agent/uiserver/ui_template_data.go | 1 - agent/uiserver/uiserver.go | 59 +- agent/uiserver/uiserver_test.go | 7 - agent/xds/clusters.go | 114 +- agent/xds/clusters_test.go | 27 +- agent/xds/config.go | 8 +- agent/xds/delta.go | 13 +- agent/xds/delta_test.go | 33 +- agent/xds/endpoints.go | 6 - agent/xds/listeners.go | 60 +- agent/xds/listeners_ingress.go | 2 +- agent/xds/listeners_test.go | 27 +- agent/xds/routes.go | 8 +- agent/xds/routes_test.go | 8 +- agent/xds/server.go | 19 +- ...-proxy-with-peered-upstreams.latest.golden | 148 - ...stom-max-inbound-connections.latest.golden | 152 - ...gress-grpc-multiple-services.latest.golden | 8 +- ...ener-max-inbound-connections.latest.golden | 126 - agent/xds/xds_protocol_helpers_test.go | 47 +- agent/xds/z_xds_packages.go | 126 +- api/agent.go | 2 - api/agent_test.go | 18 +- api/api.go | 28 +- api/api_test.go | 73 - api/catalog_test.go | 18 +- api/config_entry.go | 17 +- api/config_entry_discoverychain_test.go | 36 +- api/config_entry_exports.go | 13 +- api/config_entry_exports_test.go | 103 - api/config_entry_test.go | 55 +- api/coordinate_test.go | 2 +- api/health_test.go | 4 +- api/oss.go | 10 - api/oss_test.go | 7 + api/peering.go | 244 - api/peering_test.go | 221 - api/txn_test.go | 22 +- build-support/docker/Build-Go.dockerfile | 3 + build-support/functions/00-vars.sh | 6 +- build-support/functions/20-build.sh | 49 +- build-support/functions/30-release.sh | 16 +- build-support/scripts/build-docker.sh | 16 +- build-support/scripts/devtools.sh | 222 - .../scripts/envoy-library-references.sh | 2 +- build-support/scripts/protobuf.sh | 277 +- build-support/scripts/release.sh | 4 +- codecov.yml | 44 + command/commands_oss.go | 222 + command/config/write/config_write_test.go | 129 +- command/logout/logout_test.go | 4 +- command/registry.go | 261 +- command/registry_oss.go | 12 - docs/debug/pprof.md | 128 - docs/debug/pprof_cpu_nodes.png | Bin 226490 -> 0 bytes go.mod | 124 +- go.sum | 32 +- .../tools/proto-gen-rpc-glue/e2e/source.pb.go | 22 - .../e2e/source.rpcglue.pb.go.golden | 141 - internal/tools/proto-gen-rpc-glue/main.go | 122 - lib/maps/maps.go | 12 - lib/maps/maps_test.go | 41 - lib/retry/retry.go | 5 + lib/strings.go | 18 - lib/ttlcache/eviction_test.go | 22 +- logging/names.go | 2 - main.go | 2 +- main_test.go | 1 + package-lock.json | 6 + proto-public/buf.gen.yaml | 22 - proto-public/buf.yaml | 16 - proto-public/pbacl/acl.pb.binary.go | 58 - proto-public/pbacl/acl.pb.go | 495 - proto-public/pbacl/acl.proto | 60 - proto-public/pbacl/acl_grpc.pb.go | 145 - proto-public/pbconnectca/ca.pb.binary.go | 30 - proto-public/pbconnectca/ca.pb.go | 437 +- proto-public/pbconnectca/ca.proto | 95 +- proto-public/pbconnectca/ca_grpc.pb.go | 177 - .../pbdataplane/dataplane.pb.binary.go | 58 - proto-public/pbdataplane/dataplane.pb.go | 727 - proto-public/pbdataplane/dataplane.proto | 83 - proto-public/pbdataplane/dataplane_grpc.pb.go | 139 - .../serverdiscovery.pb.binary.go | 38 - .../pbserverdiscovery/serverdiscovery.pb.go | 322 - .../pbserverdiscovery/serverdiscovery.proto | 34 - .../serverdiscovery_grpc.pb.go | 138 - proto/buf.gen.yaml | 23 - proto/buf.yaml | 23 - proto/pbacl/acl.pb.go | 21 +- proto/pbacl/acl.proto | 8 +- proto/pbautoconf/auto_config.pb.go | 21 +- proto/pbautoconf/auto_config.proto | 60 +- proto/pbcommon/common.pb.go | 22 +- proto/pbcommon/common.proto | 212 +- proto/pbconfig/config.pb.go | 22 +- proto/pbconfig/config.proto | 94 +- proto/pbconnect/connect.pb.go | 24 +- proto/pbconnect/connect.proto | 280 +- proto/pbpeering/generate.go | 9 - proto/pbpeering/peering.gen.go | 100 - proto/pbpeering/peering.go | 221 - proto/pbpeering/peering.pb.binary.go | 288 - proto/pbpeering/peering.pb.go | 2665 ---- proto/pbpeering/peering.proto | 365 - proto/pbpeering/peering.rpcglue.pb.go | 319 - proto/pbpeering/peering_grpc.pb.go | 440 - proto/pbpeering/peering_oss.go | 16 - proto/pbpeering/types.go | 10 - proto/pbservice/convert.go | 3 - proto/pbservice/healthcheck.gen.go | 2 - proto/pbservice/healthcheck.pb.go | 422 +- proto/pbservice/healthcheck.proto | 215 +- proto/pbservice/ids.go | 2 - proto/pbservice/ids_test.go | 107 +- proto/pbservice/node.gen.go | 4 - proto/pbservice/node.pb.binary.go | 10 - proto/pbservice/node.pb.go | 400 +- proto/pbservice/node.proto | 13 +- proto/pbservice/service.gen.go | 28 - proto/pbservice/service.pb.binary.go | 10 - proto/pbservice/service.pb.go | 624 +- proto/pbservice/service.proto | 380 +- proto/pbstatus/status.pb.binary.go | 18 - proto/pbstatus/status.pb.go | 201 - proto/pbstatus/status.proto | 40 - proto/pbsubscribe/subscribe.pb.go | 271 +- proto/pbsubscribe/subscribe.proto | 205 +- proto/pbsubscribe/subscribe_grpc.pb.go | 170 - proto/prototest/testing.go | 4 +- sdk/testutil/assertions.go | 9 - terraform/README.md | 14 + .../integration/connect/envoy/Dockerfile-bats | 2 +- test/integration/consul-container/go.mod | 30 - test/integration/consul-container/go.sum | 1110 -- .../consul-container/libs/cluster/cluster.go | 124 - .../libs/node/consul-container.go | 238 - .../libs/node/consul-container_oss.go | 6 - .../consul-container/libs/node/node.go | 24 - .../consul-container/libs/utils/utils.go | 13 - .../consul-container/upgrade/README.md | 6 - .../upgrade/healthcheck_test.go | 277 - .../consul-container/upgrade/util_test.go | 47 - .../consul-container/upgrade/version_oss.go | 9 - test/load/terraform/consul.tf | 8 +- test/load/terraform/test-servers.tf | 6 +- test/load/terraform/variables.tf | 3 +- testrpc/wait.go | 3 - ui/packages/consul-ui/README.md | 6 +- .../routes/dc/overview/serverstatus.scss | 9 +- version/version.go | 2 +- website/content/docs/agent/telemetry.mdx | 22 - website/content/docs/connect/ca/vault.mdx | 4 +- .../content/docs/ecs/terraform/install.mdx | 2 - .../gossip-encryption-key-rotation.mdx | 52 +- 536 files changed, 9534 insertions(+), 59283 deletions(-) delete mode 100644 .changelog/10996.txt delete mode 100644 .changelog/12695.txt delete mode 100644 .changelog/12787.txt delete mode 100644 .changelog/12807.txt delete mode 100644 .changelog/12819.txt delete mode 100644 .changelog/12825.txt delete mode 100644 .changelog/12844.txt delete mode 100644 .changelog/12865.txt delete mode 100644 .changelog/12881.txt delete mode 100644 .changelog/12885.txt delete mode 100644 .changelog/12914.txt delete mode 100644 .changelog/12935.txt delete mode 100644 .changelog/13001.txt delete mode 100644 .changelog/13012.txt delete mode 100644 .changelog/13062.txt delete mode 100644 .changelog/13143.txt delete mode 100644 .changelog/_1679.txt delete mode 100644 .github/pull_request_template.md delete mode 100755 .github/scripts/docker_smoke.sh delete mode 100644 .github/workflows/embedded-asset-checker.yml delete mode 100644 .github/workflows/nightly-test-1.10.x.yaml delete mode 100644 .github/workflows/nightly-test-1.11.x.yaml delete mode 100644 .github/workflows/nightly-test-1.12.x.yaml delete mode 100644 .github/workflows/nightly-test-main.yaml create mode 100644 INTERNALS.md delete mode 100644 acl/validation.go delete mode 100644 agent/cache-types/mock_Agent.go delete mode 100644 agent/cache-types/mock_TrustBundleReader_test.go delete mode 100644 agent/cache-types/trust_bundle.go delete mode 100644 agent/cache-types/trust_bundle_test.go create mode 100644 agent/consul/acl_authmethod_test.go delete mode 100644 agent/consul/auth/binder.go delete mode 100644 agent/consul/auth/binder_oss.go delete mode 100644 agent/consul/auth/binder_test.go delete mode 100644 agent/consul/auth/login.go delete mode 100644 agent/consul/auth/mock_ACLCache.go delete mode 100644 agent/consul/auth/token_writer.go delete mode 100644 agent/consul/auth/token_writer_oss.go delete mode 100644 agent/consul/auth/token_writer_test.go delete mode 100644 agent/consul/autopilotevents/mock_Publisher_test.go delete mode 100644 agent/consul/autopilotevents/mock_StateStore_test.go delete mode 100644 agent/consul/autopilotevents/mock_timeProvider_test.go delete mode 100644 agent/consul/autopilotevents/ready_servers_events.go delete mode 100644 agent/consul/autopilotevents/ready_servers_events_test.go delete mode 100644 agent/consul/grpc_integration_test.go delete mode 100644 agent/consul/leader_peering.go delete mode 100644 agent/consul/leader_peering_test.go delete mode 100644 agent/consul/merge_service_config.go delete mode 100644 agent/consul/merge_service_config_test.go delete mode 100644 agent/consul/peering_backend.go delete mode 100644 agent/consul/peering_backend_oss.go delete mode 100644 agent/consul/peering_backend_oss_test.go delete mode 100644 agent/consul/peering_backend_test.go delete mode 100644 agent/consul/state/catalog_events_oss_test.go delete mode 100644 agent/consul/state/peering.go delete mode 100644 agent/consul/state/peering_oss.go delete mode 100644 agent/consul/state/peering_test.go delete mode 100644 agent/consul/stream/string_types.go delete mode 100644 agent/grpc/public/forward.go delete mode 100644 agent/grpc/public/services/acl/login.go delete mode 100644 agent/grpc/public/services/acl/login_test.go delete mode 100644 agent/grpc/public/services/acl/logout.go delete mode 100644 agent/grpc/public/services/acl/logout_test.go delete mode 100644 agent/grpc/public/services/acl/mock_Login.go delete mode 100644 agent/grpc/public/services/acl/mock_TokenWriter.go delete mode 100644 agent/grpc/public/services/acl/mock_Validator.go delete mode 100644 agent/grpc/public/services/acl/server.go delete mode 100644 agent/grpc/public/services/acl/server_test.go create mode 100644 agent/grpc/public/services/connectca/acl_test.go delete mode 100644 agent/grpc/public/services/connectca/mock_CAManager.go delete mode 100644 agent/grpc/public/services/connectca/sign.go delete mode 100644 agent/grpc/public/services/connectca/sign_test.go delete mode 100644 agent/grpc/public/services/dataplane/get_envoy_boostrap_params_test.go delete mode 100644 agent/grpc/public/services/dataplane/get_envoy_bootstrap_params.go delete mode 100644 agent/grpc/public/services/dataplane/get_supported_features.go delete mode 100644 agent/grpc/public/services/dataplane/get_supported_features_test.go delete mode 100644 agent/grpc/public/services/dataplane/mock_ACLResolver.go delete mode 100644 agent/grpc/public/services/dataplane/server.go delete mode 100644 agent/grpc/public/services/dataplane/server_test.go delete mode 100644 agent/grpc/public/services/serverdiscovery/mock_ACLResolver.go delete mode 100644 agent/grpc/public/services/serverdiscovery/server.go delete mode 100644 agent/grpc/public/services/serverdiscovery/server_test.go delete mode 100644 agent/grpc/public/services/serverdiscovery/watch_servers.go delete mode 100644 agent/grpc/public/services/serverdiscovery/watch_servers_test.go delete mode 100644 agent/grpc/public/testutils/acl.go delete mode 100644 agent/grpc/public/testutils/fsm.go delete mode 100644 agent/grpc/public/testutils/server.go delete mode 100644 agent/grpc/public/utils.go delete mode 100644 agent/peering_endpoint.go delete mode 100644 agent/peering_endpoint_oss_test.go delete mode 100644 agent/peering_endpoint_test.go delete mode 100644 agent/proxycfg-glue/glue.go delete mode 100644 agent/proxycfg-sources/catalog/config_source.go delete mode 100644 agent/proxycfg-sources/catalog/config_source_test.go delete mode 100644 agent/proxycfg-sources/catalog/mock_ConfigManager.go delete mode 100644 agent/proxycfg-sources/catalog/mock_Watcher.go delete mode 100644 agent/proxycfg-sources/local/config_source.go delete mode 100644 agent/proxycfg-sources/local/local.go delete mode 100644 agent/proxycfg-sources/local/mock_ConfigManager.go delete mode 100644 agent/proxycfg-sources/local/sync.go delete mode 100644 agent/proxycfg-sources/local/sync_test.go delete mode 100644 agent/proxycfg/data_sources.go delete mode 100644 agent/proxycfg/data_sources_oss.go delete mode 100644 agent/proxycfg/state_oss_test.go delete mode 100644 agent/proxycfg/testing_oss.go delete mode 100644 agent/proxycfg/testing_peering.go delete mode 100644 agent/rpc/peering/health_snapshot.go delete mode 100644 agent/rpc/peering/health_snapshot_test.go delete mode 100644 agent/rpc/peering/replication.go delete mode 100644 agent/rpc/peering/service.go delete mode 100644 agent/rpc/peering/service_oss_test.go delete mode 100644 agent/rpc/peering/service_test.go delete mode 100644 agent/rpc/peering/stream_test.go delete mode 100644 agent/rpc/peering/stream_tracker.go delete mode 100644 agent/rpc/peering/stream_tracker_test.go delete mode 100644 agent/rpc/peering/subscription_blocking.go delete mode 100644 agent/rpc/peering/subscription_manager.go delete mode 100644 agent/rpc/peering/subscription_manager_test.go delete mode 100644 agent/rpc/peering/subscription_state.go delete mode 100644 agent/rpc/peering/subscription_state_test.go delete mode 100644 agent/rpc/peering/subscription_view.go delete mode 100644 agent/rpc/peering/subscription_view_test.go delete mode 100644 agent/rpc/peering/testing.go delete mode 100644 agent/rpc/peering/testutil_oss_test.go delete mode 100644 agent/rpc/peering/validate.go delete mode 100644 agent/rpc/peering/validate_test.go delete mode 100644 agent/structs/config_entry_export_oss_test.go delete mode 100644 agent/structs/config_entry_exports_test.go delete mode 100644 agent/structs/peering.go delete mode 100644 agent/submatview/local_materializer.go delete mode 100644 agent/submatview/rpc_materializer.go delete mode 100644 agent/uiserver/README.md create mode 100644 agent/uiserver/bindata_assetfs.go delete mode 100644 agent/uiserver/dist/assets/apple-touch-icon-01cd4680782fbb5bc02301347df9903d.png delete mode 100644 agent/uiserver/dist/assets/codemirror/mode/javascript/javascript-77218cd1268ea6df75775114ae086566.js delete mode 100644 agent/uiserver/dist/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js delete mode 100644 agent/uiserver/dist/assets/codemirror/mode/xml/xml-10ec8b8cc61ef0fbd25b27a599fdcd60.js delete mode 100644 agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-3f129a000349e3075be0f65719884b61.js delete mode 100644 agent/uiserver/dist/assets/consul-acls/routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js delete mode 100644 agent/uiserver/dist/assets/consul-acls/services-8b6b2b2bea3add7709b8075a5ed5652b.js delete mode 100644 agent/uiserver/dist/assets/consul-lock-sessions/routes-f2c5ce353830c89f540358e7f174e0bf.js delete mode 100644 agent/uiserver/dist/assets/consul-lock-sessions/services-8b6b2b2bea3add7709b8075a5ed5652b.js delete mode 100644 agent/uiserver/dist/assets/consul-nspaces/routes-f939ed42e9b83f9d1bbc5256be68e77c.js delete mode 100644 agent/uiserver/dist/assets/consul-nspaces/services-8b6b2b2bea3add7709b8075a5ed5652b.js delete mode 100644 agent/uiserver/dist/assets/consul-partitions/routes-cba490481425519435d142c743bbc3d3.js delete mode 100644 agent/uiserver/dist/assets/consul-partitions/services-85621f245f195fe1ce177064bfb04504.js delete mode 100644 agent/uiserver/dist/assets/consul-ui-20fef69ea9b73df740a420526b12c7fb.css delete mode 100644 agent/uiserver/dist/assets/consul-ui-e58b85f0a8e1fb15ded242e5b25b171c.js delete mode 100644 agent/uiserver/dist/assets/consul-ui/routes-debug-8f884a3e3f7105d43b7b4024db9b4c99.js delete mode 100644 agent/uiserver/dist/assets/consul-ui/routes-e55bc65732ba7c0352d43313fd9563e6.js delete mode 100644 agent/uiserver/dist/assets/consul-ui/services-a17470cdfbd4a4096117ac0103802226.js delete mode 100644 agent/uiserver/dist/assets/consul-ui/services-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js delete mode 100644 agent/uiserver/dist/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js delete mode 100644 agent/uiserver/dist/assets/encoding-cdb50fbdab6d4d3fdf574dd784f77d27.js delete mode 100644 agent/uiserver/dist/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js delete mode 100644 agent/uiserver/dist/assets/favicon.ico delete mode 100644 agent/uiserver/dist/assets/favicon.svg delete mode 100644 agent/uiserver/dist/assets/init-21ea65714d133467454b601efc15e2dd.js delete mode 100644 agent/uiserver/dist/assets/loading-cylon-pink.svg delete mode 100644 agent/uiserver/dist/assets/metrics-providers/consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js delete mode 100644 agent/uiserver/dist/assets/metrics-providers/prometheus-5f31ba3b7ffd850fa916a0a76933e968.js delete mode 100644 agent/uiserver/dist/assets/vendor-69ef69e98b7d14d1513f8056b6c6b48d.css delete mode 100644 agent/uiserver/dist/assets/vendor-c7887d0a48fe1497d1843edc3d5bfbc8.js delete mode 100644 agent/uiserver/dist/index.html delete mode 100644 agent/uiserver/dist/oidc/callback delete mode 100644 agent/uiserver/dist/robots.txt delete mode 100644 agent/uiserver/dist/torii/redirect.html delete mode 100644 agent/xds/testdata/clusters/connect-proxy-with-peered-upstreams.latest.golden delete mode 100644 agent/xds/testdata/clusters/custom-max-inbound-connections.latest.golden delete mode 100644 agent/xds/testdata/listeners/listener-max-inbound-connections.latest.golden delete mode 100644 api/config_entry_exports_test.go delete mode 100644 api/oss.go create mode 100644 api/oss_test.go delete mode 100644 api/peering.go delete mode 100644 api/peering_test.go delete mode 100755 build-support/scripts/devtools.sh create mode 100644 codecov.yml create mode 100644 command/commands_oss.go delete mode 100644 command/registry_oss.go delete mode 100644 docs/debug/pprof.md delete mode 100644 docs/debug/pprof_cpu_nodes.png delete mode 100644 lib/maps/maps.go delete mode 100644 lib/maps/maps_test.go delete mode 100644 lib/strings.go create mode 100644 main_test.go create mode 100644 package-lock.json delete mode 100644 proto-public/buf.gen.yaml delete mode 100644 proto-public/buf.yaml delete mode 100644 proto-public/pbacl/acl.pb.binary.go delete mode 100644 proto-public/pbacl/acl.pb.go delete mode 100644 proto-public/pbacl/acl.proto delete mode 100644 proto-public/pbacl/acl_grpc.pb.go delete mode 100644 proto-public/pbconnectca/ca_grpc.pb.go delete mode 100644 proto-public/pbdataplane/dataplane.pb.binary.go delete mode 100644 proto-public/pbdataplane/dataplane.pb.go delete mode 100644 proto-public/pbdataplane/dataplane.proto delete mode 100644 proto-public/pbdataplane/dataplane_grpc.pb.go delete mode 100644 proto-public/pbserverdiscovery/serverdiscovery.pb.binary.go delete mode 100644 proto-public/pbserverdiscovery/serverdiscovery.pb.go delete mode 100644 proto-public/pbserverdiscovery/serverdiscovery.proto delete mode 100644 proto-public/pbserverdiscovery/serverdiscovery_grpc.pb.go delete mode 100644 proto/buf.gen.yaml delete mode 100644 proto/buf.yaml delete mode 100644 proto/pbpeering/generate.go delete mode 100644 proto/pbpeering/peering.gen.go delete mode 100644 proto/pbpeering/peering.go delete mode 100644 proto/pbpeering/peering.pb.binary.go delete mode 100644 proto/pbpeering/peering.pb.go delete mode 100644 proto/pbpeering/peering.proto delete mode 100644 proto/pbpeering/peering.rpcglue.pb.go delete mode 100644 proto/pbpeering/peering_grpc.pb.go delete mode 100644 proto/pbpeering/peering_oss.go delete mode 100644 proto/pbpeering/types.go delete mode 100644 proto/pbstatus/status.pb.binary.go delete mode 100644 proto/pbstatus/status.pb.go delete mode 100644 proto/pbstatus/status.proto delete mode 100644 proto/pbsubscribe/subscribe_grpc.pb.go create mode 100644 terraform/README.md delete mode 100644 test/integration/consul-container/go.mod delete mode 100644 test/integration/consul-container/go.sum delete mode 100644 test/integration/consul-container/libs/cluster/cluster.go delete mode 100644 test/integration/consul-container/libs/node/consul-container.go delete mode 100644 test/integration/consul-container/libs/node/consul-container_oss.go delete mode 100644 test/integration/consul-container/libs/node/node.go delete mode 100644 test/integration/consul-container/libs/utils/utils.go delete mode 100644 test/integration/consul-container/upgrade/README.md delete mode 100644 test/integration/consul-container/upgrade/healthcheck_test.go delete mode 100644 test/integration/consul-container/upgrade/util_test.go delete mode 100644 test/integration/consul-container/upgrade/version_oss.go diff --git a/.changelog/10996.txt b/.changelog/10996.txt deleted file mode 100644 index 78a3c3c15cf6f..0000000000000 --- a/.changelog/10996.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:improvement -ui: removed external dependencies for serving UI assets in favor of Go's native embed capabilities -``` diff --git a/.changelog/12695.txt b/.changelog/12695.txt deleted file mode 100644 index 9baaa3dcb3c7c..0000000000000 --- a/.changelog/12695.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:feature -grpc: New gRPC service and endpoint to return the list of supported consul dataplane features -``` \ No newline at end of file diff --git a/.changelog/12787.txt b/.changelog/12787.txt deleted file mode 100644 index 0e6d7fc6cc093..0000000000000 --- a/.changelog/12787.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:feature -ca: Leaf certificates can now be obtained via the gRPC API: `Sign` -``` diff --git a/.changelog/12807.txt b/.changelog/12807.txt deleted file mode 100644 index 9d2005a0365be..0000000000000 --- a/.changelog/12807.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:improvement -acl: Clarify node/service identities must be lowercase -``` diff --git a/.changelog/12819.txt b/.changelog/12819.txt deleted file mode 100644 index c98b59c3cd849..0000000000000 --- a/.changelog/12819.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:improvement -grpc: Add a new ServerDiscovery.WatchServers gRPC endpoint for being notified when the set of ready servers has changed. -``` \ No newline at end of file diff --git a/.changelog/12825.txt b/.changelog/12825.txt deleted file mode 100644 index 95a0184fa21d6..0000000000000 --- a/.changelog/12825.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:feature -grpc: New gRPC endpoint to return envoy bootstrap parameters. -``` \ No newline at end of file diff --git a/.changelog/12844.txt b/.changelog/12844.txt deleted file mode 100644 index 477193881afef..0000000000000 --- a/.changelog/12844.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:bug -raft: upgrade to v1.3.8 which fixes a bug where non cluster member can still be able to participate in an election. -``` diff --git a/.changelog/12865.txt b/.changelog/12865.txt deleted file mode 100644 index 73a4bb9c3bcc5..0000000000000 --- a/.changelog/12865.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:improvement -telemetry: Added `consul.raft.thread.main.saturation` and `consul.raft.thread.fsm.saturation` metrics to measure approximate saturation of the Raft goroutines -``` diff --git a/.changelog/12881.txt b/.changelog/12881.txt deleted file mode 100644 index a2c5d90a57607..0000000000000 --- a/.changelog/12881.txt +++ /dev/null @@ -1,4 +0,0 @@ -```release-note:enhancement -connect: add validation to ensure connect native services have a port or socketpath specified on catalog registration. -This was the only missing piece to ensure all mesh services are validated for a port (or socketpath) specification on catalog registration. -``` \ No newline at end of file diff --git a/.changelog/12885.txt b/.changelog/12885.txt deleted file mode 100644 index cfc9b3982d0b1..0000000000000 --- a/.changelog/12885.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:bug -acl: Fixed a bug where the ACL down policy wasn't being applied on remote errors from the primary datacenter. -``` diff --git a/.changelog/12914.txt b/.changelog/12914.txt deleted file mode 100644 index f19bf013ce484..0000000000000 --- a/.changelog/12914.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:enhancement -api: add the ability to specify a path prefix for when consul is behind a reverse proxy or API gateway -``` diff --git a/.changelog/12935.txt b/.changelog/12935.txt deleted file mode 100644 index ae892d891ca70..0000000000000 --- a/.changelog/12935.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:feature -acl: It is now possible to login and logout using the gRPC API -``` diff --git a/.changelog/13001.txt b/.changelog/13001.txt deleted file mode 100644 index 0d47397a191be..0000000000000 --- a/.changelog/13001.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:enhancement -api: `merge-central-config` query parameter support added to some catalog and health endpoints to view a fully resolved service definition (especially when not written into the catalog that way). -``` diff --git a/.changelog/13012.txt b/.changelog/13012.txt deleted file mode 100644 index 7fc66b49dad93..0000000000000 --- a/.changelog/13012.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:bug -proxycfg: Fixed a minor bug that would cause configuring a terminating gateway to watch too many service resolvers and waste resources doing filtering. -``` \ No newline at end of file diff --git a/.changelog/13062.txt b/.changelog/13062.txt deleted file mode 100644 index 5bc01d66620ed..0000000000000 --- a/.changelog/13062.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:bug -serf: upgrade serf to v0.9.8 which fixes a bug that crashes Consul when serf keyrings are listed -``` diff --git a/.changelog/13143.txt b/.changelog/13143.txt deleted file mode 100644 index 4b0bf2388aaf7..0000000000000 --- a/.changelog/13143.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:improvement -connect: Added a `max_inbound_connections` setting to service-defaults for limiting the number of concurrent inbound connections to each service instance. -``` \ No newline at end of file diff --git a/.changelog/_1679.txt b/.changelog/_1679.txt deleted file mode 100644 index d7f5241273212..0000000000000 --- a/.changelog/_1679.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:breaking-change -config-entry: Exporting a specific service name across all namespace is invalid. -``` \ No newline at end of file diff --git a/.circleci/config.yml b/.circleci/config.yml index a59d4855a38b5..571e4ea74f411 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -12,8 +12,18 @@ parameters: description: "Boolean whether to run the load test workflow" references: + images: + # When updating the Go version, remember to also update the versions in the + # workflows section for go-test-lib jobs. + go: &GOLANG_IMAGE docker.mirror.hashicorp.services/cimg/go:1.18.1 + ember: &EMBER_IMAGE docker.mirror.hashicorp.services/circleci/node:14-browsers + paths: test-results: &TEST_RESULTS_DIR /tmp/test-results + + cache: + yarn: &YARN_CACHE_KEY consul-ui-v7-{{ checksum "ui/yarn.lock" }} + environment: &ENVIRONMENT TEST_RESULTS_DIR: *TEST_RESULTS_DIR EMAIL: noreply@hashicorp.com @@ -22,15 +32,6 @@ references: S3_ARTIFACT_BUCKET: consul-dev-artifacts-v2 BASH_ENV: .circleci/bash_env.sh VAULT_BINARY_VERSION: 1.9.4 - GO_VERSION: 1.18.1 - images: - # When updating the Go version, remember to also update the versions in the - # workflows section for go-test-lib jobs. - go: &GOLANG_IMAGE docker.mirror.hashicorp.services/cimg/go:1.18.1 - ember: &EMBER_IMAGE docker.mirror.hashicorp.services/circleci/node:14-browsers - ubuntu: &UBUNTU_CI_IMAGE ubuntu-2004:202201-02 - cache: - yarn: &YARN_CACHE_KEY consul-ui-v7-{{ checksum "ui/yarn.lock" }} steps: install-gotestsum: &install-gotestsum @@ -168,14 +169,6 @@ jobs: - run: go install github.com/hashicorp/lint-consul-retry@master && lint-consul-retry - run: *notify-slack-failure - lint-enums: - docker: - - image: *GOLANG_IMAGE - steps: - - checkout - - run: go install github.com/reillywatson/enumcover/cmd/enumcover@master && enumcover ./... - - run: *notify-slack-failure - lint: description: "Run golangci-lint" parameters: @@ -184,7 +177,7 @@ jobs: default: "" docker: - image: *GOLANG_IMAGE - resource_class: xlarge + resource_class: large environment: GOTAGS: "" # No tags for OSS but there are for enterprise GOARCH: "<>" @@ -193,12 +186,14 @@ jobs: - run: go env - run: name: Install golangci-lint - command: make lint-tools + command: | + download=https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh + wget -O- -q $download | sh -x -s -- -d -b /home/circleci/go/bin v1.45.2 - run: go mod download - run: name: lint command: &lintcmd | - golangci-lint run --build-tags="$GOTAGS" -v + golangci-lint run --build-tags="$GOTAGS" -v --concurrency 2 - run: name: lint api working_directory: api @@ -245,13 +240,10 @@ jobs: echo "Generated code was not updated correctly" exit 1 fi - - run: - name: "Protobuf Lint" - command: make proto-lint go-test-arm64: machine: - image: *UBUNTU_CI_IMAGE + image: ubuntu-2004:202101-01 resource_class: arm.large parallelism: 4 environment: @@ -263,10 +255,10 @@ jobs: steps: - checkout - run: - command: | + command: | sudo rm -rf /usr/local/go - wget https://dl.google.com/go/go${GO_VERSION}.linux-arm64.tar.gz - sudo tar -C /usr/local -xzvf go${GO_VERSION}.linux-arm64.tar.gz + wget https://golang.org/dl/go1.17.5.linux-arm64.tar.gz + sudo tar -C /usr/local -xzvf go1.17.5.linux-arm64.tar.gz - run: *install-gotestsum - run: go mod download - run: @@ -424,7 +416,7 @@ jobs: command: | for os in $XC_OS; do target="./pkg/bin/${GOOS}_${GOARCH}/" - GOOS="$os" CGO_ENABLED=0 go build -o "${target}" -ldflags "${GOLDFLAGS}" -tags "${GOTAGS}" + GOOS="$os" CGO_ENABLED=0 go build -o "$target" -ldflags "$(GOLDFLAGS)" -tags "$(GOTAGS)" done # save dev build to CircleCI @@ -672,6 +664,23 @@ jobs: - packages/consul-ui/dist - run: *notify-slack-failure + # build static-assets file + build-static-assets: + docker: + - image: *GOLANG_IMAGE + steps: + - checkout + - attach_workspace: + at: ./pkg + - run: mv pkg/packages/consul-ui/dist pkg/web_ui # 'make static-assets' looks for the 'pkg/web_ui' path + - run: make tools + - run: make static-assets + - persist_to_workspace: + root: . + paths: + - ./agent/uiserver/bindata_assetfs.go + - run: *notify-slack-failure + # commits static assets to git publish-static-assets: docker: @@ -684,12 +693,7 @@ jobs: - attach_workspace: at: . - run: - name: move compiled ui files to agent/uiserver - command: | - rm -rf agent/uiserver/dist - mv packages/consul-ui/dist agent/uiserver - - run: - name: commit agent/uiserver/dist/ if there are UI changes + name: commit agent/uiserver/bindata_assetfs.go if there are UI changes command: | # check if there are any changes in ui/ # if there are, we commit the ui static asset file @@ -703,8 +707,8 @@ jobs: git checkout -B ci/main-assetfs-build main short_sha=$(git rev-parse --short HEAD) - git add agent/uiserver/dist/ - git commit -m "auto-updated agent/uiserver/dist/ from commit ${short_sha}" + git add agent/uiserver/bindata_assetfs.go + git commit -m "auto-updated agent/uiserver/bindata_assetfs.go from commit ${short_sha}" git push --force origin ci/main-assetfs-build else echo "no UI changes so no static assets to publish" @@ -799,57 +803,9 @@ jobs: command: make test-coverage-ci - run: *notify-slack-failure - compatibility-integration-test: - machine: - image: *UBUNTU_CI_IMAGE - docker_layer_caching: true - parallelism: 1 - steps: - - checkout - # Get go binary from workspace - - attach_workspace: - at: . - # Build the consul-dev image from the already built binary - - run: - command: | - sudo rm -rf /usr/local/go - wget https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz - sudo tar -C /usr/local -xzvf go${GO_VERSION}.linux-amd64.tar.gz - environment: - <<: *ENVIRONMENT - - run: *install-gotestsum - - run: docker build -t consul:local -f ./build-support/docker/Consul-Dev.dockerfile . - - run: - name: Compatibility Integration Tests - command: | - subtests=$(ls -d test/integration/consul-container/*/ | grep -v libs | xargs -n 1 basename | circleci tests split) - echo "Running $(echo $subtests | wc -w) subtests" - echo "$subtests" - subtests_pipe_sepr=$(echo "$subtests" | xargs | sed 's/ /|/g') - mkdir -p /tmp/test-results/ - docker run consul:local consul version - cd ./test/integration/consul-container - gotestsum -- -timeout=30m ./$subtests_pipe_sepr --target-version local --latest-version latest - ls -lrt - environment: - # this is needed because of incompatibility between RYUK container and circleci - GOTESTSUM_JUNITFILE: /tmp/test-results/results.xml - GOTESTSUM_FORMAT: standard-verbose - COMPOSE_INTERACTIVE_NO_CLI: 1 - # tput complains if this isn't set to something. - TERM: ansi - - store_artifacts: - path: ./test/integration/consul-container/upgrade/workdir/logs - destination: container-logs - - store_test_results: - path: *TEST_RESULTS_DIR - - store_artifacts: - path: *TEST_RESULTS_DIR - - run: *notify-slack-failure - envoy-integration-test-1_19_3: &ENVOY_TESTS machine: - image: *UBUNTU_CI_IMAGE + image: ubuntu-2004:202201-02 parallelism: 4 resource_class: medium environment: @@ -972,7 +928,6 @@ jobs: LOCAL_COMMIT_SHA="<< pipeline.parameters.commit >>" fi echo "export LOCAL_COMMIT_SHA=${LOCAL_COMMIT_SHA}" >> $BASH_ENV - git checkout ${LOCAL_COMMIT_SHA} short_ref=$(git rev-parse --short ${LOCAL_COMMIT_SHA}) echo "export TF_VAR_ami_owners=$LOAD_TEST_AMI_OWNERS" >> $BASH_ENV @@ -992,8 +947,7 @@ jobs: working_directory: .circleci/terraform/load-test name: terraform init command: | - short_ref=$(git rev-parse --short HEAD) - echo "Testing commit id: $short_ref" + echo "commit is ${LOCAL_COMMIT_SHA}" terraform init \ -backend-config="bucket=${BUCKET}" \ -backend-config="key=${LOCAL_COMMIT_SHA}" \ @@ -1009,7 +963,7 @@ jobs: when: always name: terraform destroy command: | - for i in $(seq 1 5); do terraform destroy -auto-approve && s=0 && break || s=$? && sleep 20; done; (exit $s) + terraform destroy -auto-approve - run: *notify-slack-failure # The noop job is a used as a very fast job in the verify-ci workflow because every workflow @@ -1025,7 +979,7 @@ workflows: # verify-ci is a no-op workflow that must run on every PR. It is used in a # branch protection rule to detect when CI workflows are not running. verify-ci: - jobs: [noop] + jobs: [ noop ] go-tests: unless: << pipeline.parameters.trigger-load-test >> @@ -1038,7 +992,6 @@ workflows: - /^docs\/.*/ - /^ui\/.*/ - check-generated-protobuf: *filter-ignore-non-go-branches - - lint-enums: *filter-ignore-non-go-branches - lint-consul-retry: *filter-ignore-non-go-branches - lint: *filter-ignore-non-go-branches - lint: @@ -1049,17 +1002,17 @@ workflows: - go-test-arm64: *filter-ignore-non-go-branches - dev-build: *filter-ignore-non-go-branches - go-test: - requires: [dev-build] + requires: [ dev-build ] - go-test-lib: name: "go-test-api go1.17" path: api go-version: "1.17" - requires: [dev-build] + requires: [ dev-build ] - go-test-lib: name: "go-test-api go1.18" path: api go-version: "1.18" - requires: [dev-build] + requires: [ dev-build ] - go-test-lib: name: "go-test-sdk go1.17" path: sdk @@ -1091,12 +1044,20 @@ workflows: - ember-build-prod: requires: - frontend-cache - - publish-static-assets: + - build-static-assets: requires: - ember-build-prod + - publish-static-assets: + filters: + branches: + only: + - main + - /release\/\d+\.\d+\.x$/ + requires: + - build-static-assets - dev-build: requires: - - ember-build-prod + - build-static-assets - dev-upload-s3: requires: - dev-build @@ -1138,9 +1099,6 @@ workflows: - envoy-integration-test-1_22_0: requires: - dev-build - - compatibility-integration-test: - requires: - - dev-build - noop frontend: unless: << pipeline.parameters.trigger-load-test >> diff --git a/.circleci/terraform/load-test/main.tf b/.circleci/terraform/load-test/main.tf index b46645ef24105..774e19c6020f7 100644 --- a/.circleci/terraform/load-test/main.tf +++ b/.circleci/terraform/load-test/main.tf @@ -7,16 +7,10 @@ provider "aws" { assume_role { role_arn = var.role_arn } - - default_tags { - tags = { - Environment = "ConsulLoadTest" - } - } } module "load-test" { - source = "../../../test/load/terraform" + source = "github.com/hashicorp/consul/test/load/terraform" vpc_az = ["us-east-2a", "us-east-2b"] vpc_name = var.vpc_name @@ -27,5 +21,4 @@ module "load-test" { ami_owners = var.ami_owners consul_download_url = var.consul_download_url cluster_name = var.cluster_name - cluster_tag_key = var.cluster_tag_key } diff --git a/.circleci/terraform/load-test/variables.tf b/.circleci/terraform/load-test/variables.tf index 414cfa84e7fe0..9b3849e4ea87f 100644 --- a/.circleci/terraform/load-test/variables.tf +++ b/.circleci/terraform/load-test/variables.tf @@ -22,9 +22,3 @@ variable "cluster_name" { type = string default = "consul-example" } - -variable "cluster_tag_key" { - description = "The tag the EC2 Instances will look for to automatically discover each other and form a cluster." - type = string - default = "consul-ci-load-test" -} diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 131d9057d2ccb..c2b2b9b0524fa 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -156,25 +156,12 @@ When you're ready to submit a pull request: if your changes aren't finalized but would benefit from in-process feedback. 5. If there's any reason Consul users might need to know about this change, [add a changelog entry](../docs/contributing/add-a-changelog-entry.md). -6. Add labels to your pull request. A table of commonly use labels is below. - If you have any questions about which to apply, feel free to call it out in the PR or comments. - | Label | When to Use | - | --- | --- | - | `pr/no-changelog` | This PR does not have an intended changelog entry | - | `pr/no-metrics-test` | This PR does not require any testing for metrics | - | `backport/stable-website` | This PR contains documentation changes that are ready to be deployed immediately. Changes will also automatically get backported to the latest release branch | - | `backport/1.12.x` | Backport the changes in this PR to the targeted release branch. Consult the [Consul Release Notes](https://www.consul.io/docs/release-notes) page to view active releases. | - Other labels may automatically be added by the Github Action CI. -7. After you submit, the Consul maintainers team needs time to carefully review your +6. After you submit, the Consul maintainers team needs time to carefully review your contribution and ensure it is production-ready, considering factors such as: security, backwards-compatibility, potential regressions, etc. -8. After you address Consul maintainer feedback and the PR is approved, a Consul maintainer +7. After you address Consul maintainer feedback and the PR is approved, a Consul maintainer will merge it. Your contribution will be available from the next major release (e.g., 1.x) unless explicitly backported to an existing or previous major release by the maintainer. -9. Any backport labels will generate an additional PR to the targeted release branch. - These will be linked in the original PR. - Assuming the tests pass, the PR will be merged automatically. - If the tests fail, it is you responsibility to resolve the issues with backports and request another reviewer. #### Checklists diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 43b3ac71337bf..0000000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,18 +0,0 @@ -### Description -Describe why you're making this change, in plain English. - -### Testing & Reproduction steps -* In the case of bugs, describe how to replicate -* If any manual tests were done, document the steps and the conditions to replicate -* Call out any important/ relevant unit tests, e2e tests or integration tests you have added or are adding - -### Links -Include any links here that might be helpful for people reviewing your PR (Tickets, GH issues, API docs, external benchmarks, tools docs, etc). If there are none, feel free to delete this section. - -Please be mindful not to leak any customer or confidential information. HashiCorp employees may want to use our internal URL shortener to obfuscate links. - -### PR Checklist - -* [ ] updated test coverage -* [ ] external facing docs updated -* [ ] not a security concern diff --git a/.github/scripts/docker_smoke.sh b/.github/scripts/docker_smoke.sh deleted file mode 100755 index 0ab4126516276..0000000000000 --- a/.github/scripts/docker_smoke.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -function main { - local image_name="${1:-${IMAGE_NAME:-}}" - local test_version - - if [[ -z "${image_name}" ]]; then - echo "ERROR: IMAGE_NAME environment var or argument is required" - exit 1 - fi - - test_version="$(docker run "${image_name}" version | head -n1 | awk '{print $2}')" - if [ "${test_version}" != "v${version}" ]; then - echo "Test FAILED" - echo "Got: ${test_version}, Want: ${version}" - exit 1 - fi - echo "Test PASSED" -} - -main "$@" diff --git a/.github/workflows/backport-reminder.yml b/.github/workflows/backport-reminder.yml index 359451269d7a5..ab51e4d4f7ae9 100644 --- a/.github/workflows/backport-reminder.yml +++ b/.github/workflows/backport-reminder.yml @@ -1,8 +1,6 @@ # This workflow sends a reminder comment to PRs that have labels starting with # `backport/` to check that the backport has run successfully. -name: Backport Assistant Reminder - on: pull_request: types: [ labeled ] diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e7bee83041f61..346d5221bc723 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,6 +6,7 @@ on: branches: # Push events on the main branch - main + - release/1.12.x env: PKG_NAME: consul @@ -85,6 +86,11 @@ jobs: with: go-version: ${{ matrix.go }} + - name: Install project dependencies + run: | + go install github.com/elazarl/go-bindata-assetfs/go-bindata-assetfs@38087fe + go install github.com/hashicorp/go-bindata/go-bindata@bf7910a + - name: Setup with node and yarn uses: actions/setup-node@v2 with: @@ -101,8 +107,12 @@ jobs: echo "consul binary type is ${CONSUL_BINARY_TYPE}" echo "consul copyright year is ${CONSUL_COPYRIGHT_YEAR}" cd ui && make && cd .. - rm -rf agent/uiserver/dist - mv ui/packages/consul-ui/dist agent/uiserver/ + mkdir pkg + mv ui/packages/consul-ui/dist pkg/web_ui + + - name: Build static-assets + run: make static-assets + - name: Build env: GOOS: ${{ matrix.goos }} @@ -176,6 +186,11 @@ jobs: with: go-version: ${{ matrix.go }} + - name: Install project dependencies + run: | + go install github.com/elazarl/go-bindata-assetfs/go-bindata-assetfs@38087fe + go install github.com/hashicorp/go-bindata/go-bindata@bf7910a + - name: Setup with node and yarn uses: actions/setup-node@v2 with: @@ -192,8 +207,11 @@ jobs: echo "consul binary type is ${CONSUL_BINARY_TYPE}" echo "consul copyright year is ${CONSUL_COPYRIGHT_YEAR}" cd ui && make && cd .. - rm -rf agent/uiserver/dist - mv ui/packages/consul-ui/dist agent/uiserver/ + mkdir pkg + mv ui/packages/consul-ui/dist pkg/web_ui + + - name: Build static-assets + run: make static-assets - name: Build env: @@ -225,15 +243,6 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Download artifact for arm verification - uses: actions/download-artifact@v2 - if: ${{ matrix.arch == 'arm64' || matrix.arch == 'arm' }} - with: - name: ${{ env.PKG_NAME }}_${{env.version}}_linux_${{ matrix.arch }}.zip - - name: Unzip for ${{ matrix.arch }} linux zip - if: ${{ matrix.arch == 'arm64' || matrix.arch == 'arm' }} - run: | - unzip ${{ env.PKG_NAME }}_${{ env.version }}_linux_${{ matrix.arch }}.zip - name: Docker Build (Action) uses: hashicorp/actions-docker-build@v1 with: @@ -246,17 +255,6 @@ jobs: dev_tags: | docker.io/hashicorppreview/${{ env.repo }}:${{ env.version }} docker.io/hashicorppreview/${{ env.repo }}:${{ env.version }}-${{ github.sha }} - smoke_test: .github/scripts/docker_smoke.sh - - name: Run verification in qemu docker for ${{ matrix.arch }} linux zip - if: ${{ matrix.arch == 'arm64' }} - run: | - docker run --platform=linux/arm64 -v $(pwd):/workdir -w /workdir \ - arm64v8/debian ./consul version - - name: Run verification in qemu docker for ${{ matrix.arch }} linux zip - if: ${{ matrix.arch == 'arm' }} - run: | - docker run --platform=linux/arm/v7 -v $(pwd):/workdir -w /workdir \ - arm32v7/debian ./consul version build-docker-redhat: name: Docker Build UBI Image for RedHat @@ -275,91 +273,4 @@ jobs: version: ${{env.version}} target: ubi arch: amd64 - redhat_tag: scan.connect.redhat.com/ospid-612d01d49f14588c41ebf67c/${{env.repo}}:${{env.version}}-ubi - smoke_test: .github/scripts/docker_smoke.sh - verify: - needs: - - get-product-version - - build - runs-on: ubuntu-latest - strategy: - matrix: - arch: ["386", "amd64"] - fail-fast: true - env: - version: ${{needs.get-product-version.outputs.product-version}} - name: Verify ${{ matrix.arch }} linux zip - steps: - - uses: actions/checkout@v2 - - name: Download artifact - uses: actions/download-artifact@v2 - with: - name: ${{ env.PKG_NAME }}_${{ env.version }}_linux_${{ matrix.arch }}.zip - - name: Run verification for ${{ matrix.arch }} linux zip - run: | - unzip ${{ env.PKG_NAME }}_${{env.version}}_linux_${{ matrix.arch }}.zip - ./consul version - - verify-darwin: - needs: - - get-product-version - - build-darwin - runs-on: macos-latest - strategy: - matrix: - arch: ["amd64", "arm64"] - fail-fast: true - env: - version: ${{needs.get-product-version.outputs.product-version}} - name: Verify ${{ matrix.arch }} darwin zip - steps: - - uses: actions/checkout@v2 - - name: Download artifact - uses: actions/download-artifact@v2 - with: - name: ${{ env.PKG_NAME }}_${{env.version}}_darwin_${{ matrix.arch }}.zip - - name: Run verification for ${{ matrix.arch }} linux zip - if: ${{ matrix.arch == 'amd64' }} - run: | - unzip ${{ env.PKG_NAME }}_${{env.version}}_darwin_${{ matrix.arch }}.zip - ./consul version - - verify-linux-packages-deb: - needs: build - runs-on: ubuntu-latest - strategy: - matrix: - arch: [ "amd64", "arm", "arm64", "i386" ] - fail-fast: true - - name: Verify ${{ matrix.arch }} debian package - steps: - - uses: actions/checkout@v2 - - - name: Download ${{ matrix.arch }} debian package - run: | - echo "TODO: download ${{ matrix.arch }} debian package" - - - name: Verify ${{ matrix.arch }} debian package - run: | - echo "TODO: run verification for ${{ matrix.arch }} debian package" - - verify-linux-packages-rpm: - needs: build - runs-on: ubuntu-latest - strategy: - matrix: - arch: [ "aarch64", "arm", "i386", "x86_64" ] - fail-fast: true - - name: Verify ${{ matrix.arch }} rpm package - steps: - - uses: actions/checkout@v2 - - - name: Download ${{ matrix.arch }} rpm package - run: | - echo "TODO: download ${{ matrix.arch }} rpm package" - - - name: Verify ${{ matrix.arch }} rpm package - run: | - echo "TODO: run verification for ${{ matrix.arch }} rpm package" + redhat_tag: scan.connect.redhat.com/ospid-612d01d49f14588c41ebf67c/${{env.repo}}:${{env.version}}-ubi \ No newline at end of file diff --git a/.github/workflows/changelog-checker.yml b/.github/workflows/changelog-checker.yml index 9ee065e101260..c487cf759eb26 100644 --- a/.github/workflows/changelog-checker.yml +++ b/.github/workflows/changelog-checker.yml @@ -1,8 +1,6 @@ # This workflow checks that there is either a 'pr/no-changelog' label applied to a PR # or there is a .changelog/.txt file associated with a PR for a changelog entry -name: Changelog Checker - on: pull_request: types: [opened, synchronize, labeled] diff --git a/.github/workflows/embedded-asset-checker.yml b/.github/workflows/embedded-asset-checker.yml deleted file mode 100644 index 8eb60d70d08db..0000000000000 --- a/.github/workflows/embedded-asset-checker.yml +++ /dev/null @@ -1,37 +0,0 @@ -# This workflow detects if there is a diff in the `agent/uiserver/dist` directory -# which is used by Consul to serve its embedded UI. -# `agent/uiserver/dist` should not be manually updated. - -name: Embedded Asset Checker - -on: - pull_request: - types: [opened, synchronize, labeled, unlabeled, reopened] - # Runs on PRs to main and all release branches - branches: - - main - - release/* - -jobs: - dist-check: - if: "! ( contains(github.event.pull_request.labels.*.name, 'pr/update-ui-assets') || github.event.pull_request.user.login == 'hc-github-team-consul-core' )" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.event.pull_request.head.sha }} - fetch-depth: 0 # by default the checkout action doesn't checkout all branches - - name: Check for agent/uiserver/dist dir change in diff - run: | - dist_files=$(git --no-pager diff --name-only HEAD "$(git merge-base HEAD "origin/${{ github.event.pull_request.base.ref }}")" -- agent/uiserver/dist) - if [[ -z "${dist_files}" ]]; then - exit 0 - fi - - echo "Found diffs in dir agent/uiserver/dist" - github_message="This PR has diffs in \`agent/uiserver/dist\`. If the changes are intentional, add the label \`pr/update-ui-assets\`. Otherwise, revert changes to \`agent/uiserver/dist\`." - curl -s -H "Authorization: token ${{ secrets.PR_COMMENT_TOKEN }}" \ - -X POST \ - -d "{ \"body\": \"${github_message}\"}" \ - "https://api.github.com/repos/${GITHUB_REPOSITORY}/issues/${{ github.event.pull_request.number }}/comments" - exit 1 diff --git a/.github/workflows/load-test.yml b/.github/workflows/load-test.yml index ab7d793e79454..b603bf7e6cb6e 100644 --- a/.github/workflows/load-test.yml +++ b/.github/workflows/load-test.yml @@ -1,11 +1,8 @@ -name: Load Test - on: pull_request: branches: - main types: [labeled] - workflow_dispatch: {} jobs: trigger-load-test: diff --git a/.github/workflows/nightly-test-1.10.x.yaml b/.github/workflows/nightly-test-1.10.x.yaml deleted file mode 100644 index 75f9d039e4714..0000000000000 --- a/.github/workflows/nightly-test-1.10.x.yaml +++ /dev/null @@ -1,230 +0,0 @@ -name: Nightly 1.10.x Test -on: - schedule: - - cron: '0 4 * * *' - workflow_dispatch: {} - -env: - EMBER_PARTITION_TOTAL: 4 # Has to be changed in tandem with the matrix.partition - BRANCH: "release/1.10.x" - BRANCH_NAME: "release-1.10.x" # Used for naming artifacts - -jobs: - frontend-test-workspace-node: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: yarn install - - - name: Workspace Tests - id: workspace-test - working-directory: ./ui - run: make test-workspace - - - name: Node Tests - id: node-test - working-directory: ./ui/packages/consul-ui - run: make test-node - - frontend-build-oss: - runs-on: ubuntu-latest - env: - JOBS: 2 - CONSUL_NSPACES_ENABLED: 0 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: yarn install - - - name: Ember Build OSS - id: build-oss - working-directory: ./ui/packages/consul-ui - run: make build-ci - - - name: Upload OSS Frontend - uses: actions/upload-artifact@v3 - with: - name: frontend-oss-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - if-no-files-found: error - - frontend-test-oss: - runs-on: ubuntu-latest - needs: [frontend-build-oss] - strategy: - matrix: - partition: [ 1, 2, 3, 4 ] - env: - CONSUL_NSPACES_ENABLED: 0 - EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary - EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: yarn install - - - name: Download OSS Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-oss-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Ember Test OSS - id: cache - working-directory: ./ui/packages/consul-ui - run: node_modules/.bin/ember exam --split=$EMBER_PARTITION_TOTAL --partition=${{ matrix.partition }} --path dist --silent -r xunit - - frontend-build-ent: - runs-on: ubuntu-latest - env: - JOBS: 2 - CONSUL_NSPACES_ENABLED: 1 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: yarn install - - - name: Ember Build ENT - id: build-oss - working-directory: ./ui/packages/consul-ui - run: make build-ci - - - name: Upload ENT Frontend - uses: actions/upload-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - if-no-files-found: error - - frontend-test-ent: - runs-on: ubuntu-latest - needs: [frontend-build-ent] - strategy: - matrix: - partition: [ 1, 2, 3, 4 ] - env: - CONSUL_NSPACES_ENABLED: 1 - EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary - EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: yarn install - - - name: Download ENT Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Ember Test ENT - id: cache - working-directory: ./ui/packages/consul-ui - run: node_modules/.bin/ember exam --split=$EMBER_PARTITION_TOTAL --partition=${{ matrix.partition }} --path dist --silent -r xunit - - frontend-test-coverage-ent: - runs-on: ubuntu-latest - needs: [frontend-build-ent] - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: yarn install - - - name: Download ENT Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Run ENT Code Coverage - working-directory: ./ui/packages/consul-ui - run: make test-coverage-ci - - slack-failure-notification: - runs-on: ubuntu-latest - needs: [frontend-test-oss, frontend-test-ent] - if: ${{ failure() }} - steps: - - name: Slack Notification - id: slack - uses: slackapi/slack-github-action@v1.19 - with: - payload: | - { - "message": "One or more nightly UI tests have failed on branch ${{ env.BRANCH }} for Consul. ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.CONSUL_UI_SLACK_WEBHOOK }} diff --git a/.github/workflows/nightly-test-1.11.x.yaml b/.github/workflows/nightly-test-1.11.x.yaml deleted file mode 100644 index cd913d4eca492..0000000000000 --- a/.github/workflows/nightly-test-1.11.x.yaml +++ /dev/null @@ -1,230 +0,0 @@ -name: Nightly Test 1.11.x -on: - schedule: - - cron: '0 4 * * *' - workflow_dispatch: {} - -env: - EMBER_PARTITION_TOTAL: 4 # Has to be changed in tandem with the matrix.partition - BRANCH: "release/1.11.x" - BRANCH_NAME: "release-1.11.x" # Used for naming artifacts - -jobs: - frontend-test-workspace-node: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Workspace Tests - id: workspace-test - working-directory: ./ui - run: make test-workspace - - - name: Node Tests - id: node-test - working-directory: ./ui/packages/consul-ui - run: make test-node - - frontend-build-oss: - runs-on: ubuntu-latest - env: - JOBS: 2 - CONSUL_NSPACES_ENABLED: 0 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Ember Build OSS - id: build-oss - working-directory: ./ui/packages/consul-ui - run: make build-ci - - - name: Upload OSS Frontend - uses: actions/upload-artifact@v3 - with: - name: frontend-oss-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - if-no-files-found: error - - frontend-test-oss: - runs-on: ubuntu-latest - needs: [frontend-build-oss] - strategy: - matrix: - partition: [ 1, 2, 3, 4 ] - env: - CONSUL_NSPACES_ENABLED: 0 - EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary - EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Download OSS Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-oss-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Ember Test OSS - id: cache - working-directory: ./ui/packages/consul-ui - run: node_modules/.bin/ember exam --split=$EMBER_PARTITION_TOTAL --partition=${{ matrix.partition }} --path dist --silent -r xunit - - frontend-build-ent: - runs-on: ubuntu-latest - env: - JOBS: 2 - CONSUL_NSPACES_ENABLED: 1 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Ember Build ENT - id: build-oss - working-directory: ./ui/packages/consul-ui - run: make build-ci - - - name: Upload ENT Frontend - uses: actions/upload-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - if-no-files-found: error - - frontend-test-ent: - runs-on: ubuntu-latest - needs: [frontend-build-ent] - strategy: - matrix: - partition: [ 1, 2, 3, 4 ] - env: - CONSUL_NSPACES_ENABLED: 1 - EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary - EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Download ENT Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Ember Test ENT - id: cache - working-directory: ./ui/packages/consul-ui - run: node_modules/.bin/ember exam --split=$EMBER_PARTITION_TOTAL --partition=${{ matrix.partition }} --path dist --silent -r xunit - - frontend-test-coverage-ent: - runs-on: ubuntu-latest - needs: [frontend-build-ent] - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Download ENT Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Run ENT Code Coverage - working-directory: ./ui/packages/consul-ui - run: make test-coverage-ci - - slack-failure-notification: - runs-on: ubuntu-latest - needs: [frontend-test-oss, frontend-test-ent] - if: ${{ failure() }} - steps: - - name: Slack Notification - id: slack - uses: slackapi/slack-github-action@v1.19 - with: - payload: | - { - "message": "One or more nightly UI tests have failed on branch ${{ env.BRANCH }} for Consul. ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.CONSUL_UI_SLACK_WEBHOOK }} diff --git a/.github/workflows/nightly-test-1.12.x.yaml b/.github/workflows/nightly-test-1.12.x.yaml deleted file mode 100644 index 906f2ba8fb355..0000000000000 --- a/.github/workflows/nightly-test-1.12.x.yaml +++ /dev/null @@ -1,230 +0,0 @@ -name: Nightly Test 1.12.x -on: - schedule: - - cron: '0 4 * * *' - workflow_dispatch: {} - -env: - EMBER_PARTITION_TOTAL: 4 # Has to be changed in tandem with the matrix.partition - BRANCH: "release/1.12.x" - BRANCH_NAME: "release-1.12.x" # Used for naming artifacts - -jobs: - frontend-test-workspace-node: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Workspace Tests - id: workspace-test - working-directory: ./ui - run: make test-workspace - - - name: Node Tests - id: node-test - working-directory: ./ui/packages/consul-ui - run: make test-node - - frontend-build-oss: - runs-on: ubuntu-latest - env: - JOBS: 2 - CONSUL_NSPACES_ENABLED: 0 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Ember Build OSS - id: build-oss - working-directory: ./ui/packages/consul-ui - run: make build-ci - - - name: Upload OSS Frontend - uses: actions/upload-artifact@v3 - with: - name: frontend-oss-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - if-no-files-found: error - - frontend-test-oss: - runs-on: ubuntu-latest - needs: [frontend-build-oss] - strategy: - matrix: - partition: [ 1, 2, 3, 4 ] - env: - CONSUL_NSPACES_ENABLED: 0 - EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary - EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Download OSS Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-oss-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Ember Test OSS - id: cache - working-directory: ./ui/packages/consul-ui - run: node_modules/.bin/ember exam --split=$EMBER_PARTITION_TOTAL --partition=${{ matrix.partition }} --path dist --silent -r xunit - - frontend-build-ent: - runs-on: ubuntu-latest - env: - JOBS: 2 - CONSUL_NSPACES_ENABLED: 1 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Ember Build ENT - id: build-oss - working-directory: ./ui/packages/consul-ui - run: make build-ci - - - name: Upload ENT Frontend - uses: actions/upload-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - if-no-files-found: error - - frontend-test-ent: - runs-on: ubuntu-latest - needs: [frontend-build-ent] - strategy: - matrix: - partition: [ 1, 2, 3, 4 ] - env: - CONSUL_NSPACES_ENABLED: 1 - EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary - EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Download ENT Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Ember Test ENT - id: cache - working-directory: ./ui/packages/consul-ui - run: node_modules/.bin/ember exam --split=$EMBER_PARTITION_TOTAL --partition=${{ matrix.partition }} --path dist --silent -r xunit - - frontend-test-coverage-ent: - runs-on: ubuntu-latest - needs: [frontend-build-ent] - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Download ENT Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Run ENT Code Coverage - working-directory: ./ui/packages/consul-ui - run: make test-coverage-ci - - slack-failure-notification: - runs-on: ubuntu-latest - needs: [frontend-test-oss, frontend-test-ent] - if: ${{ failure() }} - steps: - - name: Slack Notification - id: slack - uses: slackapi/slack-github-action@v1.19 - with: - payload: | - { - "message": "One or more nightly UI tests have failed on branch ${{ env.BRANCH }} for Consul. ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.CONSUL_UI_SLACK_WEBHOOK }} diff --git a/.github/workflows/nightly-test-main.yaml b/.github/workflows/nightly-test-main.yaml deleted file mode 100644 index e823bac7b5628..0000000000000 --- a/.github/workflows/nightly-test-main.yaml +++ /dev/null @@ -1,230 +0,0 @@ -name: Nightly Test Main -on: - schedule: - - cron: '0 4 * * *' - workflow_dispatch: {} - -env: - EMBER_PARTITION_TOTAL: 4 # Has to be changed in tandem with the matrix.partition - BRANCH: "main" - BRANCH_NAME: "main" # Used for naming artifacts - -jobs: - frontend-test-workspace-node: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Workspace Tests - id: workspace-test - working-directory: ./ui - run: make test-workspace - - - name: Node Tests - id: node-test - working-directory: ./ui/packages/consul-ui - run: make test-node - - frontend-build-oss: - runs-on: ubuntu-latest - env: - JOBS: 2 - CONSUL_NSPACES_ENABLED: 0 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Ember Build OSS - id: build-oss - working-directory: ./ui/packages/consul-ui - run: make build-ci - - - name: Upload OSS Frontend - uses: actions/upload-artifact@v3 - with: - name: frontend-oss-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - if-no-files-found: error - - frontend-test-oss: - runs-on: ubuntu-latest - needs: [frontend-build-oss] - strategy: - matrix: - partition: [ 1, 2, 3, 4 ] - env: - CONSUL_NSPACES_ENABLED: 0 - EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary - EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Download OSS Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-oss-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Ember Test OSS - id: cache - working-directory: ./ui/packages/consul-ui - run: node_modules/.bin/ember exam --split=$EMBER_PARTITION_TOTAL --partition=${{ matrix.partition }} --path dist --silent -r xunit - - frontend-build-ent: - runs-on: ubuntu-latest - env: - JOBS: 2 - CONSUL_NSPACES_ENABLED: 1 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Ember Build ENT - id: build-oss - working-directory: ./ui/packages/consul-ui - run: make build-ci - - - name: Upload ENT Frontend - uses: actions/upload-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - if-no-files-found: error - - frontend-test-ent: - runs-on: ubuntu-latest - needs: [frontend-build-ent] - strategy: - matrix: - partition: [ 1, 2, 3, 4 ] - env: - CONSUL_NSPACES_ENABLED: 1 - EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary - EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Download ENT Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Ember Test ENT - id: cache - working-directory: ./ui/packages/consul-ui - run: node_modules/.bin/ember exam --split=$EMBER_PARTITION_TOTAL --partition=${{ matrix.partition }} --path dist --silent -r xunit - - frontend-test-coverage-ent: - runs-on: ubuntu-latest - needs: [frontend-build-ent] - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ env.BRANCH }} - - # Not necessary to use yarn, but enables caching - - uses: actions/setup-node@v3 - with: - node-version: 14 - cache: 'yarn' - cache-dependency-path: ./ui/yarn.lock - - - name: Install - id: install - working-directory: ./ui - run: make deps - - - name: Download ENT Frontend - uses: actions/download-artifact@v3 - with: - name: frontend-ent-${{ env.BRANCH_NAME }} - path: ./ui/packages/consul-ui/dist - - - name: Run ENT Code Coverage - working-directory: ./ui/packages/consul-ui - run: make test-coverage-ci - - slack-failure-notification: - runs-on: ubuntu-latest - needs: [frontend-test-oss, frontend-test-ent] - if: ${{ failure() }} - steps: - - name: Slack Notification - id: slack - uses: slackapi/slack-github-action@v1.19 - with: - payload: | - { - "message": "One or more nightly UI tests have failed on branch ${{ env.BRANCH }} for Consul. ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.CONSUL_UI_SLACK_WEBHOOK }} diff --git a/.github/workflows/oss-merge-trigger.yml b/.github/workflows/oss-merge-trigger.yml index 4d08442d90fba..e0812f227e17c 100644 --- a/.github/workflows/oss-merge-trigger.yml +++ b/.github/workflows/oss-merge-trigger.yml @@ -23,4 +23,4 @@ jobs: curl -H "Authorization: token $GH_PAT" \ -H 'Accept: application/json' \ -d "{\"event_type\": \"oss-merge\", \"client_payload\": {\"git-ref\": \"${GIT_REF}\", \"git-sha\": \"${GIT_SHA}\", \"git-actor\": \"${GIT_ACTOR}\" }}" \ - "https://api.github.com/repos/hashicorp/consul-enterprise/dispatches" \ No newline at end of file + "https://api.github.com/repos/hashicorp/consul-enterprise/dispatches" diff --git a/.github/workflows/website-checker.yml b/.github/workflows/website-checker.yml index e5d628235dd9e..17d69dc8ca4c2 100644 --- a/.github/workflows/website-checker.yml +++ b/.github/workflows/website-checker.yml @@ -10,8 +10,6 @@ # in the PR and if they need to be cherry-picked to the stable-website branch, the # 'type/docs-cherrypick' label needs to be applied. -name: Website Checker - on: pull_request_target: types: [opened] diff --git a/.golangci.yml b/.golangci.yml index 5dd9235837c18..1663c96707183 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -26,15 +26,6 @@ issues: - linters: [staticcheck] text: 'SA1019: Package github.com/golang/protobuf/proto is deprecated' - - linters: [staticcheck] - text: 'SA1019: ptypes.MarshalAny is deprecated' - - - linters: [staticcheck] - text: 'SA1019: ptypes.UnmarshalAny is deprecated' - - - linters: [staticcheck] - text: 'SA1019: package github.com/golang/protobuf/ptypes is deprecated' - # An argument that always receives the same value is often not a problem. - linters: [unparam] text: 'always receives' @@ -78,4 +69,3 @@ linters-settings: run: timeout: 10m - concurrency: 4 diff --git a/.release/ci.hcl b/.release/ci.hcl index e422a9ce292b2..e508bac4aa7f1 100644 --- a/.release/ci.hcl +++ b/.release/ci.hcl @@ -11,6 +11,7 @@ project "consul" { repository = "consul" release_branches = [ "main", + "release/1.8.x", "release/1.9.x", "release/1.10.x", "release/1.11.x", diff --git a/CHANGELOG.md b/CHANGELOG.md index d306b2e112f3b..67e0c79de805b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.12.2 (June 3, 2022) + +BUG FIXES: + +* kvs: Fixed a bug where query options were not being applied to KVS.Get RPC operations. [[GH-13344](https://github.com/hashicorp/consul/issues/13344)] + ## 1.12.1 (May 25, 2022) FEATURES: @@ -62,6 +68,7 @@ IMPROVEMENTS: * agent: add support for specifying TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 and TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 cipher suites [[GH-12522](https://github.com/hashicorp/consul/issues/12522)] * agent: bump default min version for connections to TLS 1.2 [[GH-12522](https://github.com/hashicorp/consul/issues/12522)] * api: add QueryBackend to QueryMeta so an api user can determine if a query was served using which backend (streaming or blocking query). [[GH-12791](https://github.com/hashicorp/consul/issues/12791)] +* api: URL-encode/decode resource names for all HTTP API endpoints [[GH-11258](https://github.com/hashicorp/consul/issues/11258)] * ci: include 'enhancement' entry type in IMPROVEMENTS section of changelog. [[GH-12376](https://github.com/hashicorp/consul/issues/12376)] * ui: Exclude Service Instance Health from Health Check reporting on the Node listing page. The health icons on each individual row now only reflect Node health. [[GH-12248](https://github.com/hashicorp/consul/issues/12248)] * ui: Improve usability of Topology warning/information panels [[GH-12305](https://github.com/hashicorp/consul/issues/12305)] @@ -110,24 +117,6 @@ NOTES: * Forked net/rpc to add middleware support: https://github.com/hashicorp/consul-net-rpc/ . [[GH-12311](https://github.com/hashicorp/consul/issues/12311)] * dependency: Upgrade to use Go 1.18.1 [[GH-12808](https://github.com/hashicorp/consul/issues/12808)] -## 1.11.6 (May 25, 2022) - -IMPROVEMENTS: - -* sentinel: **(Enterprise Only)** Sentinel now uses SHA256 to generate policy ids - -BUG FIXES: - -* Fix a bug when configuring an `add_headers` directive named `Host` the header is not set for `v1/internal/ui/metrics-proxy/` endpoint. [[GH-13071](https://github.com/hashicorp/consul/issues/13071)] -* areas: **(Enterprise Only)** Fixes a bug when using Yamux pool ( for servers version 1.7.3 and later), the entire pool was locked while connecting to a remote location, which could potentially take a long time. [[GH-1368](https://github.com/hashicorp/consul/issues/1368)] -* ca: fix a bug that caused a non blocking leaf cert query after a blocking leaf cert query to block [[GH-12820](https://github.com/hashicorp/consul/issues/12820)] -* health: ensure /v1/health/service/:service endpoint returns the most recent results when a filter is used with streaming #12640 [[GH-12640](https://github.com/hashicorp/consul/issues/12640)] -* snapshot-agent: **(Enterprise only)** Fix a bug where providing the ACL token to the snapshot agent via a CLI or ENV variable without a license configured results in an error during license auto-retrieval. - -NOTES: - -* ci: change action to pull v1 instead of main [[GH-12846](https://github.com/hashicorp/consul/issues/12846)] - ## 1.11.5 (April 13, 2022) SECURITY: @@ -392,50 +381,6 @@ NOTES: * Renamed the `agent_master` field to `agent_recovery` in the `acl-tokens.json` file in which tokens are persisted on-disk (when `acl.enable_token_persistence` is enabled) [[GH-11744](https://github.com/hashicorp/consul/issues/11744)] -## 1.10.11 (May 25, 2022) - -SECURITY: - -* agent: Use SHA256 instead of MD5 to generate persistence file names. - -IMPROVEMENTS: - -* sentinel: **(Enterprise Only)** Sentinel now uses SHA256 to generate policy ids - -BUG FIXES: - -* Fix a bug when configuring an `add_headers` directive named `Host` the header is not set for `v1/internal/ui/metrics-proxy/` endpoint. [[GH-13071](https://github.com/hashicorp/consul/issues/13071)] -* areas: **(Enterprise Only)** Fixes a bug when using Yamux pool ( for servers version 1.7.3 and later), the entire pool was locked while connecting to a remote location, which could potentially take a long time. [[GH-1368](https://github.com/hashicorp/consul/issues/1368)] -* ca: fix a bug that caused a non blocking leaf cert query after a locking leaf cert query to block [[GH-12820](https://github.com/hashicorp/consul/issues/12820)] -* health: ensure /v1/health/service/:service endpoint returns the most recent results when a filter is used with streaming #12640 [[GH-12640](https://github.com/hashicorp/consul/issues/12640)] -* snapshot-agent: **(Enterprise only)** Fix a bug where providing the ACL token to the snapshot agent via a CLI or ENV variable without a license configured results in an error during license auto-retrieval. - -NOTES: - -* ci: change action to pull v1 instead of main [[GH-12846](https://github.com/hashicorp/consul/issues/12846)] - -## 1.10.10 (April 13, 2022) - -SECURITY: - -* agent: Added a new check field, `disable_redirects`, that allows for disabling the following of redirects for HTTP checks. The intention is to default this to true in a future release so that redirects must explicitly be enabled. [[GH-12685](https://github.com/hashicorp/consul/issues/12685)] -* connect: Properly set SNI when configured for services behind a terminating gateway. [[GH-12672](https://github.com/hashicorp/consul/issues/12672)] - -IMPROVEMENTS: - -* xds: ensure that all connect timeout configs can apply equally to tproxy direct dial connections [[GH-12711](https://github.com/hashicorp/consul/issues/12711)] - -DEPRECATIONS: - -* tls: With the upgrade to Go 1.17, the ordering of `tls_cipher_suites` will no longer be honored, and `tls_prefer_server_cipher_suites` is now ignored. [[GH-12766](https://github.com/hashicorp/consul/issues/12766)] - -BUG FIXES: - -* connect/ca: cancel old Vault renewal on CA configuration. Provide a 1 - 6 second backoff on repeated token renewal requests to prevent overwhelming Vault. [[GH-12607](https://github.com/hashicorp/consul/issues/12607)] -* raft: upgrade to v1.3.6 which fixes a bug where a read replica node could attempt bootstrapping raft and prevent other nodes from bootstrapping at all [[GH-12496](https://github.com/hashicorp/consul/issues/12496)] -* replication: Fixed a bug which could prevent ACL replication from continuing successfully after a leader election. [[GH-12565](https://github.com/hashicorp/consul/issues/12565)] -* server: fix spurious blocking query suppression for discovery chains [[GH-12512](https://github.com/hashicorp/consul/issues/12512)] - ## 1.10.9 (February 28, 2022) SECURITY: diff --git a/GNUmakefile b/GNUmakefile index 353948076b08d..42991a90b3faf 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -2,16 +2,24 @@ # https://www.consul.io/docs/install#compiling-from-source SHELL = bash +GOTOOLS = \ + github.com/elazarl/go-bindata-assetfs/go-bindata-assetfs@master \ + github.com/hashicorp/go-bindata/go-bindata@master \ + github.com/vektra/mockery/cmd/mockery@master \ + github.com/golangci/golangci-lint/cmd/golangci-lint@v1.45.2 \ + github.com/hashicorp/lint-consul-retry@master + +PROTOC_VERSION=3.15.8 ### -# These version variables can either be a valid string for "go install @" -# or the string @DEV to imply use what is currently installed locally. +# MOG_VERSION can be either a valid string for "go install @" +# or the string @DEV to imply use whatever is currently installed locally. ### -GOLANGCI_LINT_VERSION='v1.46.2' -MOCKERY_VERSION='v2.12.2' -BUF_VERSION='v1.4.0' -PROTOC_GEN_GO_GRPC_VERSION="v1.2.0" MOG_VERSION='v0.3.0' +### +# PROTOC_GO_INJECT_TAG_VERSION can be either a valid string for "go install @" +# or the string @DEV to imply use whatever is currently installed locally. +### PROTOC_GO_INJECT_TAG_VERSION='v1.3.0' GOTAGS ?= @@ -20,6 +28,7 @@ MAIN_GOPATH=$(shell go env GOPATH | cut -d: -f1) export PATH := $(PWD)/bin:$(GOPATH)/bin:$(PATH) +ASSETFS_PATH?=agent/uiserver/bindata_assetfs.go # Get the git commit GIT_COMMIT?=$(shell git rev-parse --short HEAD) GIT_COMMIT_YEAR?=$(shell git show -s --format=%cd --date=format:%Y HEAD) @@ -149,8 +158,7 @@ dev-docker: linux @echo "Pulling consul container image - $(CONSUL_IMAGE_VERSION)" @docker pull consul:$(CONSUL_IMAGE_VERSION) >/dev/null @echo "Building Consul Development container - $(CONSUL_DEV_IMAGE)" - # 'consul:local' tag is needed to run the integration tests - @DOCKER_DEFAULT_PLATFORM=linux/amd64 docker build $(NOCACHE) $(QUIET) -t '$(CONSUL_DEV_IMAGE)' -t 'consul:local' --build-arg CONSUL_IMAGE_VERSION=$(CONSUL_IMAGE_VERSION) $(CURDIR)/pkg/bin/linux_amd64 -f $(CURDIR)/build-support/docker/Consul-Dev.dockerfile + @docker build $(NOCACHE) $(QUIET) -t '$(CONSUL_DEV_IMAGE)' --build-arg CONSUL_IMAGE_VERSION=$(CONSUL_IMAGE_VERSION) $(CURDIR)/pkg/bin/linux_amd64 -f $(CURDIR)/build-support/docker/Consul-Dev.dockerfile # In CircleCI, the linux binary will be attached from a previous step at bin/. This make target # should only run in CI and not locally. @@ -264,36 +272,34 @@ other-consul: exit 1 ; \ fi -lint: lint-tools - @echo "--> Running golangci-lint" +lint: + @echo "--> Running go golangci-lint" @golangci-lint run --build-tags '$(GOTAGS)' && \ (cd api && golangci-lint run --build-tags '$(GOTAGS)') && \ (cd sdk && golangci-lint run --build-tags '$(GOTAGS)') - @echo "--> Running lint-consul-retry" - @lint-consul-retry - @echo "--> Running enumcover" - @enumcover ./... -# Build the static web ui inside a Docker container. For local testing only; do not commit these assets. -ui: ui-docker +# If you've run "make ui" manually then this will get called for you. This is +# also run as part of the release build script when it verifies that there are no +# changes to the UI assets that aren't checked in. +static-assets: + @go-bindata-assetfs -pkg uiserver -prefix pkg -o $(ASSETFS_PATH) ./pkg/web_ui/... + @go fmt $(ASSETFS_PATH) -# Build the static web ui with yarn. This is the version to commit. -.PHONY: ui-regen -ui-regen: - cd $(CURDIR)/ui && make && cd .. - rm -rf $(CURDIR)/agent/uiserver/dist - mv $(CURDIR)/ui/packages/consul-ui/dist $(CURDIR)/agent/uiserver/ -tools: - @$(SHELL) $(CURDIR)/build-support/scripts/devtools.sh +# Build the static web ui and build static assets inside a Docker container +ui: ui-docker static-assets-docker -.PHONY: lint-tools -lint-tools: - @$(SHELL) $(CURDIR)/build-support/scripts/devtools.sh -lint +tools: proto-tools + @if [[ -d .gotools ]]; then rm -rf .gotools ; fi + @for TOOL in $(GOTOOLS); do \ + echo "=== TOOL: $$TOOL" ; \ + go install -v $$TOOL ; \ + done -.PHONY: proto-tools proto-tools: - @$(SHELL) $(CURDIR)/build-support/scripts/devtools.sh -protobuf + @$(SHELL) $(CURDIR)/build-support/scripts/protobuf.sh \ + --protoc-version "$(PROTOC_VERSION)" \ + --tools-only version: @echo -n "Version: " @@ -310,12 +316,15 @@ docker-images: go-build-image ui-build-image go-build-image: @echo "Building Golang build container" - @docker build $(NOCACHE) $(QUIET) -t $(GO_BUILD_TAG) - < build-support/docker/Build-Go.dockerfile + @docker build $(NOCACHE) $(QUIET) --build-arg 'GOTOOLS=$(GOTOOLS)' -t $(GO_BUILD_TAG) - < build-support/docker/Build-Go.dockerfile ui-build-image: @echo "Building UI build container" @docker build $(NOCACHE) $(QUIET) -t $(UI_BUILD_TAG) - < build-support/docker/Build-UI.dockerfile +static-assets-docker: go-build-image + @$(SHELL) $(CURDIR)/build-support/scripts/build-docker.sh static-assets + consul-docker: go-build-image @$(SHELL) $(CURDIR)/build-support/scripts/build-docker.sh consul @@ -325,20 +334,6 @@ ui-docker: ui-build-image test-envoy-integ: $(ENVOY_INTEG_DEPS) @go test -v -timeout=30m -tags integration ./test/integration/connect/envoy -.PHONY: test-compat-integ -test-compat-integ: dev-docker -ifeq ("$(GOTAGS)","") - @docker tag consul-dev:latest consul:local - @docker run --rm -t consul:local consul version - @cd ./test/integration/consul-container && \ - go test -v -timeout=30m ./upgrade --target-version local --latest-version latest -else - @docker tag consul-dev:latest hashicorp/consul-enterprise:local - @docker run --rm -t hashicorp/consul-enterprise:local consul version - @cd ./test/integration/consul-container && \ - go test -v -timeout=30m ./upgrade --tags $(GOTAGS) --target-version local --latest-version latest -endif - test-connect-ca-providers: ifeq ("$(CIRCLECI)","true") # Run in CI @@ -356,17 +351,9 @@ else endif .PHONY: proto -proto: proto-tools - @$(SHELL) $(CURDIR)/build-support/scripts/protobuf.sh - -.PHONY: proto-format -proto-format: proto-tools - @buf format -w - -.PHONY: proto-lint -proto-lint: proto-tools - @buf lint --config proto/buf.yaml --path proto - @buf lint --config proto-public/buf.yaml --path proto-public +proto: + @$(SHELL) $(CURDIR)/build-support/scripts/protobuf.sh \ + --protoc-version "$(PROTOC_VERSION)" # utility to echo a makefile variable (i.e. 'make print-PROTOC_VERSION') print-% : ; @echo $($*) @@ -393,12 +380,6 @@ envoy-regen: @find "command/connect/envoy/testdata" -name '*.golden' -delete @go test -tags '$(GOTAGS)' ./command/connect/envoy -update -.PHONY: help -help: - $(info available make targets) - $(info ----------------------) - @grep "^[a-z0-9-][a-z0-9.-]*:" GNUmakefile | cut -d':' -f1 | sort - -.PHONY: all bin dev dist cov test test-internal cover lint ui tools -.PHONY: docker-images go-build-image ui-build-image consul-docker ui-docker +.PHONY: all bin dev dist cov test test-internal cover lint ui static-assets tools proto-tools +.PHONY: docker-images go-build-image ui-build-image static-assets-docker consul-docker ui-docker .PHONY: version test-envoy-integ diff --git a/INTERNALS.md b/INTERNALS.md new file mode 100644 index 0000000000000..efa95dab3991f --- /dev/null +++ b/INTERNALS.md @@ -0,0 +1 @@ +Moved to [docs/README.md](./docs/README.md). diff --git a/acl/acl_oss.go b/acl/acl_oss.go index 69328088313f8..ca2974e4e18dd 100644 --- a/acl/acl_oss.go +++ b/acl/acl_oss.go @@ -3,9 +3,7 @@ package acl -const ( - DefaultPartitionName = "" -) +const DefaultPartitionName = "" // Reviewer Note: This is a little bit strange; one might want it to be "" like partition name // However in consul/structs/intention.go we define IntentionDefaultNamespace as 'default' and so diff --git a/acl/enterprisemeta_oss.go b/acl/enterprisemeta_oss.go index 44075a44f7282..2296fdd43ecd2 100644 --- a/acl/enterprisemeta_oss.go +++ b/acl/enterprisemeta_oss.go @@ -100,17 +100,9 @@ func (m *EnterpriseMeta) UnsetPartition() { // do nothing } -func (m *EnterpriseMeta) OverridePartition(_ string) { - // do nothing -} - func NewEnterpriseMetaWithPartition(_, _ string) EnterpriseMeta { return emptyEnterpriseMeta } // FillAuthzContext stub func (_ *EnterpriseMeta) FillAuthzContext(_ *AuthorizerContext) {} - -func NormalizeNamespace(_ string) string { - return "" -} diff --git a/acl/validation.go b/acl/validation.go deleted file mode 100644 index 816ec0cae1fba..0000000000000 --- a/acl/validation.go +++ /dev/null @@ -1,56 +0,0 @@ -package acl - -import "regexp" - -const ( - ServiceIdentityNameMaxLength = 256 - NodeIdentityNameMaxLength = 256 -) - -var ( - validServiceIdentityName = regexp.MustCompile(`^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$`) - validNodeIdentityName = regexp.MustCompile(`^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$`) - validPolicyName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,128}$`) - validRoleName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,256}$`) - validAuthMethodName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,128}$`) -) - -// IsValidServiceIdentityName returns true if the provided name can be used as -// an ACLServiceIdentity ServiceName. This is more restrictive than standard -// catalog registration, which basically takes the view that "everything is -// valid". -func IsValidServiceIdentityName(name string) bool { - if len(name) < 1 || len(name) > ServiceIdentityNameMaxLength { - return false - } - return validServiceIdentityName.MatchString(name) -} - -// IsValidNodeIdentityName returns true if the provided name can be used as -// an ACLNodeIdentity NodeName. This is more restrictive than standard -// catalog registration, which basically takes the view that "everything is -// valid". -func IsValidNodeIdentityName(name string) bool { - if len(name) < 1 || len(name) > NodeIdentityNameMaxLength { - return false - } - return validNodeIdentityName.MatchString(name) -} - -// IsValidPolicyName returns true if the provided name can be used as an -// ACLPolicy Name. -func IsValidPolicyName(name string) bool { - return validPolicyName.MatchString(name) -} - -// IsValidRoleName returns true if the provided name can be used as an -// ACLRole Name. -func IsValidRoleName(name string) bool { - return validRoleName.MatchString(name) -} - -// IsValidRoleName returns true if the provided name can be used as an -// ACLAuthMethod Name. -func IsValidAuthMethodName(name string) bool { - return validAuthMethodName.MatchString(name) -} diff --git a/agent/acl.go b/agent/acl.go index 50e913a4d9e64..b4108b48487cb 100644 --- a/agent/acl.go +++ b/agent/acl.go @@ -2,7 +2,6 @@ package agent import ( "fmt" - "net/http" "github.com/hashicorp/serf/serf" @@ -83,10 +82,9 @@ func (a *Agent) vetServiceUpdateWithAuthorizer(authz acl.Authorizer, serviceID s // agent/local/state.go's deleteService assumes the Catalog.Deregister RPC call // will include "Unknown service"in the error if deregistration fails due to a // service with that ID not existing. - return HTTPError{ - StatusCode: http.StatusNotFound, - Reason: fmt.Sprintf("Unknown service ID %q. Ensure that the service ID is passed, not the service name.", serviceID), - } + return NotFoundError{Reason: fmt.Sprintf( + "Unknown service ID %q. Ensure that the service ID is passed, not the service name.", + serviceID)} } return nil @@ -142,10 +140,9 @@ func (a *Agent) vetCheckUpdateWithAuthorizer(authz acl.Authorizer, checkID struc } } } else { - return HTTPError{ - StatusCode: http.StatusNotFound, - Reason: fmt.Sprintf("Unknown check ID %q. Ensure that the check ID is passed, not the check name.", checkID.String()), - } + return NotFoundError{Reason: fmt.Sprintf( + "Unknown check ID %q. Ensure that the check ID is passed, not the check name.", + checkID.String())} } return nil diff --git a/agent/acl_endpoint.go b/agent/acl_endpoint.go index 23e43ba5c4aa7..402ac5a475efb 100644 --- a/agent/acl_endpoint.go +++ b/agent/acl_endpoint.go @@ -16,7 +16,7 @@ type aclBootstrapResponse struct { structs.ACLToken } -var aclDisabled = HTTPError{StatusCode: http.StatusUnauthorized, Reason: "ACL support disabled"} +var aclDisabled = UnauthorizedError{Reason: "ACL support disabled"} // checkACLDisabled will return a standard response if ACLs are disabled. This // returns true if they are disabled and we should not continue. @@ -124,7 +124,7 @@ func (s *HTTPHandlers) ACLPolicyCRUD(resp http.ResponseWriter, req *http.Request policyID := strings.TrimPrefix(req.URL.Path, "/v1/acl/policy/") if policyID == "" && req.Method != "PUT" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing policy ID"} + return nil, BadRequestError{Reason: "Missing policy ID"} } return fn(resp, req, policyID) @@ -169,7 +169,7 @@ func (s *HTTPHandlers) ACLPolicyReadByName(resp http.ResponseWriter, req *http.R policyName := strings.TrimPrefix(req.URL.Path, "/v1/acl/policy/name/") if policyName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing policy Name"} + return nil, BadRequestError{Reason: "Missing policy Name"} } return s.ACLPolicyRead(resp, req, "", policyName) @@ -201,18 +201,18 @@ func (s *HTTPHandlers) aclPolicyWriteInternal(_resp http.ResponseWriter, req *ht } if err := s.rewordUnknownEnterpriseFieldError(lib.DecodeJSON(req.Body, &args.Policy)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Policy decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Policy decoding failed: %v", err)} } args.Policy.Syntax = acl.SyntaxCurrent if create { if args.Policy.ID != "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Cannot specify the ID when creating a new policy"} + return nil, BadRequestError{Reason: "Cannot specify the ID when creating a new policy"} } } else { if args.Policy.ID != "" && args.Policy.ID != policyID { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Policy ID in URL and payload do not match"} + return nil, BadRequestError{Reason: "Policy ID in URL and payload do not match"} } else if args.Policy.ID == "" { args.Policy.ID = policyID } @@ -308,7 +308,7 @@ func (s *HTTPHandlers) ACLTokenCRUD(resp http.ResponseWriter, req *http.Request) fn = s.ACLTokenClone } if tokenID == "" && req.Method != "PUT" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing token ID"} + return nil, BadRequestError{Reason: "Missing token ID"} } return fn(resp, req, tokenID) @@ -413,12 +413,12 @@ func (s *HTTPHandlers) aclTokenSetInternal(req *http.Request, tokenID string, cr } if err := s.rewordUnknownEnterpriseFieldError(lib.DecodeJSON(req.Body, &args.ACLToken)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Token decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Token decoding failed: %v", err)} } if !create { if args.ACLToken.AccessorID != "" && args.ACLToken.AccessorID != tokenID { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Token Accessor ID in URL and payload do not match"} + return nil, BadRequestError{Reason: "Token Accessor ID in URL and payload do not match"} } else if args.ACLToken.AccessorID == "" { args.ACLToken.AccessorID = tokenID } @@ -463,7 +463,7 @@ func (s *HTTPHandlers) ACLTokenClone(resp http.ResponseWriter, req *http.Request return nil, err } if err := s.rewordUnknownEnterpriseFieldError(lib.DecodeJSON(req.Body, &args.ACLToken)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Token decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Token decoding failed: %v", err)} } s.parseToken(req, &args.Token) @@ -534,7 +534,7 @@ func (s *HTTPHandlers) ACLRoleCRUD(resp http.ResponseWriter, req *http.Request) roleID := strings.TrimPrefix(req.URL.Path, "/v1/acl/role/") if roleID == "" && req.Method != "PUT" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing role ID"} + return nil, BadRequestError{Reason: "Missing role ID"} } return fn(resp, req, roleID) @@ -547,7 +547,7 @@ func (s *HTTPHandlers) ACLRoleReadByName(resp http.ResponseWriter, req *http.Req roleName := strings.TrimPrefix(req.URL.Path, "/v1/acl/role/name/") if roleName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing role Name"} + return nil, BadRequestError{Reason: "Missing role Name"} } return s.ACLRoleRead(resp, req, "", roleName) @@ -606,11 +606,11 @@ func (s *HTTPHandlers) ACLRoleWrite(resp http.ResponseWriter, req *http.Request, } if err := s.rewordUnknownEnterpriseFieldError(lib.DecodeJSON(req.Body, &args.Role)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Role decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Role decoding failed: %v", err)} } if args.Role.ID != "" && args.Role.ID != roleID { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Role ID in URL and payload do not match"} + return nil, BadRequestError{Reason: "Role ID in URL and payload do not match"} } else if args.Role.ID == "" { args.Role.ID = roleID } @@ -698,7 +698,7 @@ func (s *HTTPHandlers) ACLBindingRuleCRUD(resp http.ResponseWriter, req *http.Re bindingRuleID := strings.TrimPrefix(req.URL.Path, "/v1/acl/binding-rule/") if bindingRuleID == "" && req.Method != "PUT" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing binding rule ID"} + return nil, BadRequestError{Reason: "Missing binding rule ID"} } return fn(resp, req, bindingRuleID) @@ -752,11 +752,11 @@ func (s *HTTPHandlers) ACLBindingRuleWrite(resp http.ResponseWriter, req *http.R } if err := s.rewordUnknownEnterpriseFieldError(lib.DecodeJSON(req.Body, &args.BindingRule)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("BindingRule decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("BindingRule decoding failed: %v", err)} } if args.BindingRule.ID != "" && args.BindingRule.ID != bindingRuleID { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "BindingRule ID in URL and payload do not match"} + return nil, BadRequestError{Reason: "BindingRule ID in URL and payload do not match"} } else if args.BindingRule.ID == "" { args.BindingRule.ID = bindingRuleID } @@ -841,7 +841,7 @@ func (s *HTTPHandlers) ACLAuthMethodCRUD(resp http.ResponseWriter, req *http.Req methodName := strings.TrimPrefix(req.URL.Path, "/v1/acl/auth-method/") if methodName == "" && req.Method != "PUT" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing auth method name"} + return nil, BadRequestError{Reason: "Missing auth method name"} } return fn(resp, req, methodName) @@ -895,12 +895,12 @@ func (s *HTTPHandlers) ACLAuthMethodWrite(resp http.ResponseWriter, req *http.Re } if err := s.rewordUnknownEnterpriseFieldError(lib.DecodeJSON(req.Body, &args.AuthMethod)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("AuthMethod decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("AuthMethod decoding failed: %v", err)} } if methodName != "" { if args.AuthMethod.Name != "" && args.AuthMethod.Name != methodName { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "AuthMethod Name in URL and payload do not match"} + return nil, BadRequestError{Reason: "AuthMethod Name in URL and payload do not match"} } else if args.AuthMethod.Name == "" { args.AuthMethod.Name = methodName } @@ -948,7 +948,7 @@ func (s *HTTPHandlers) ACLLogin(resp http.ResponseWriter, req *http.Request) (in } if err := s.rewordUnknownEnterpriseFieldError(lib.DecodeJSON(req.Body, &args.Auth)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Failed to decode request body: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Failed to decode request body: %v", err)} } var out structs.ACLToken @@ -1037,11 +1037,11 @@ func (s *HTTPHandlers) ACLAuthorize(resp http.ResponseWriter, req *http.Request) s.parseDC(req, &request.Datacenter) if err := decodeBody(req.Body, &request.Requests); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Failed to decode request body: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Failed to decode request body: %v", err)} } if len(request.Requests) > maxRequests { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Refusing to process more than %d authorizations at once", maxRequests)} + return nil, BadRequestError{Reason: fmt.Sprintf("Refusing to process more than %d authorizations at once", maxRequests)} } if len(request.Requests) == 0 { @@ -1062,7 +1062,7 @@ func (s *HTTPHandlers) ACLAuthorize(resp http.ResponseWriter, req *http.Request) responses, err = structs.CreateACLAuthorizationResponses(authz, request.Requests) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: err.Error()} + return nil, BadRequestError{Reason: err.Error()} } } diff --git a/agent/acl_endpoint_test.go b/agent/acl_endpoint_test.go index 60a512ef4118d..2c6aad450e7c3 100644 --- a/agent/acl_endpoint_test.go +++ b/agent/acl_endpoint_test.go @@ -26,16 +26,6 @@ import ( // They are not intended to thoroughly test the backing RPC // functionality as that will be done with other tests. -func isHTTPBadRequest(err error) bool { - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 400 { - return false - } - return true - } - return false -} - func TestACL_Disabled_Response(t *testing.T) { if testing.Short() { t.Skip("too slow for testing.Short") @@ -81,7 +71,7 @@ func TestACL_Disabled_Response(t *testing.T) { resp := httptest.NewRecorder() obj, err := tt.fn(resp, req) require.Nil(t, obj) - require.ErrorIs(t, err, HTTPError{StatusCode: http.StatusUnauthorized, Reason: "ACL support disabled"}) + require.ErrorIs(t, err, UnauthorizedError{Reason: "ACL support disabled"}) }) } } @@ -280,7 +270,8 @@ func TestACL_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLPolicyCRUD(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Policy CRUD Missing ID in URL", func(t *testing.T) { @@ -288,7 +279,8 @@ func TestACL_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLPolicyCRUD(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Update", func(t *testing.T) { @@ -335,7 +327,8 @@ func TestACL_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLPolicyCreate(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Invalid payload", func(t *testing.T) { @@ -346,7 +339,8 @@ func TestACL_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLPolicyCreate(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Delete", func(t *testing.T) { @@ -503,7 +497,8 @@ func TestACL_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLRoleCRUD(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Role CRUD Missing ID in URL", func(t *testing.T) { @@ -511,7 +506,8 @@ func TestACL_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLRoleCRUD(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Update", func(t *testing.T) { @@ -571,7 +567,8 @@ func TestACL_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLRoleCreate(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Invalid payload", func(t *testing.T) { @@ -582,7 +579,8 @@ func TestACL_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLRoleCreate(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Delete", func(t *testing.T) { @@ -820,7 +818,8 @@ func TestACL_HTTP(t *testing.T) { obj, err := a.srv.ACLTokenCRUD(resp, req) require.Error(t, err) require.Nil(t, obj) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Update Accessor Mismatch", func(t *testing.T) { originalToken := tokenMap[idMap["token-cloned"]] @@ -842,7 +841,8 @@ func TestACL_HTTP(t *testing.T) { obj, err := a.srv.ACLTokenCRUD(resp, req) require.Error(t, err) require.Nil(t, obj) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Delete", func(t *testing.T) { req, _ := http.NewRequest("DELETE", "/v1/acl/token/"+idMap["token-cloned"]+"?token=root", nil) @@ -1142,41 +1142,6 @@ func TestACL_HTTP(t *testing.T) { _, err := a.srv.ACLTokenCreate(resp, req) require.Error(t, err) }) - - t.Run("Create with uppercase node identity", func(t *testing.T) { - tokenInput := &structs.ACLToken{ - Description: "agent token for foo node", - NodeIdentities: []*structs.ACLNodeIdentity{ - { - NodeName: "FOO", - Datacenter: "bar", - }, - }, - } - - req, _ := http.NewRequest("PUT", "/v1/acl/token?token=root", jsonBody(tokenInput)) - resp := httptest.NewRecorder() - _, err := a.srv.ACLTokenCreate(resp, req) - require.Error(t, err) - testutil.RequireErrorContains(t, err, "Only lowercase alphanumeric") - }) - - t.Run("Create with uppercase service identity", func(t *testing.T) { - tokenInput := &structs.ACLToken{ - Description: "token for service identity foo", - ServiceIdentities: []*structs.ACLServiceIdentity{ - { - ServiceName: "FOO", - }, - }, - } - - req, _ := http.NewRequest("PUT", "/v1/acl/token?token=root", jsonBody(tokenInput)) - resp := httptest.NewRecorder() - _, err := a.srv.ACLTokenCreate(resp, req) - require.Error(t, err) - testutil.RequireErrorContains(t, err, "Only lowercase alphanumeric") - }) }) } @@ -1284,7 +1249,8 @@ func TestACL_LoginProcedure_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLAuthMethodCRUD(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Update Name URL Mismatch", func(t *testing.T) { @@ -1301,7 +1267,8 @@ func TestACL_LoginProcedure_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLAuthMethodCRUD(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Update", func(t *testing.T) { @@ -1340,7 +1307,8 @@ func TestACL_LoginProcedure_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLAuthMethodCreate(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("List", func(t *testing.T) { @@ -1477,7 +1445,8 @@ func TestACL_LoginProcedure_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLBindingRuleCRUD(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Update", func(t *testing.T) { @@ -1525,7 +1494,8 @@ func TestACL_LoginProcedure_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLBindingRuleCreate(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("Invalid payload", func(t *testing.T) { @@ -1536,7 +1506,8 @@ func TestACL_LoginProcedure_HTTP(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.ACLBindingRuleCreate(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) }) t.Run("List", func(t *testing.T) { diff --git a/agent/agent.go b/agent/agent.go index cb6ba1a940c44..a0405c32cc073 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -40,9 +40,6 @@ import ( publicgrpc "github.com/hashicorp/consul/agent/grpc/public" "github.com/hashicorp/consul/agent/local" "github.com/hashicorp/consul/agent/proxycfg" - proxycfgglue "github.com/hashicorp/consul/agent/proxycfg-glue" - catalogproxycfg "github.com/hashicorp/consul/agent/proxycfg-sources/catalog" - localproxycfg "github.com/hashicorp/consul/agent/proxycfg-sources/local" "github.com/hashicorp/consul/agent/rpcclient/health" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/systemd" @@ -56,7 +53,6 @@ import ( "github.com/hashicorp/consul/lib/mutex" "github.com/hashicorp/consul/lib/routine" "github.com/hashicorp/consul/logging" - "github.com/hashicorp/consul/proto/pbpeering" "github.com/hashicorp/consul/tlsutil" "github.com/hashicorp/consul/types" ) @@ -361,8 +357,6 @@ type Agent struct { // into Agent, which will allow us to remove this field. rpcClientHealth *health.Client - rpcClientPeering pbpeering.PeeringServiceClient - // routineManager is responsible for managing longer running go routines // run by the Agent routineManager *routine.Manager @@ -440,8 +434,6 @@ func New(bd BaseDeps) (*Agent, error) { QueryOptionDefaults: config.ApplyDefaultQueryOptions(a.config), } - a.rpcClientPeering = pbpeering.NewPeeringServiceClient(conn) - a.serviceManager = NewServiceManager(&a) // We used to do this in the Start method. However it doesn't need to go @@ -628,29 +620,12 @@ func (a *Agent) Start(ctx context.Context) error { go a.baseDeps.ViewStore.Run(&lib.StopChannelContext{StopCh: a.shutdownCh}) // Start the proxy config manager. - proxyDataSources := proxycfg.DataSources{ - CARoots: proxycfgglue.CacheCARoots(a.cache), - CompiledDiscoveryChain: proxycfgglue.CacheCompiledDiscoveryChain(a.cache), - ConfigEntry: proxycfgglue.CacheConfigEntry(a.cache), - ConfigEntryList: proxycfgglue.CacheConfigEntryList(a.cache), - Datacenters: proxycfgglue.CacheDatacenters(a.cache), - FederationStateListMeshGateways: proxycfgglue.CacheFederationStateListMeshGateways(a.cache), - GatewayServices: proxycfgglue.CacheGatewayServices(a.cache), - Health: proxycfgglue.Health(a.rpcClientHealth), - HTTPChecks: proxycfgglue.CacheHTTPChecks(a.cache), - Intentions: proxycfgglue.CacheIntentions(a.cache), - IntentionUpstreams: proxycfgglue.CacheIntentionUpstreams(a.cache), - InternalServiceDump: proxycfgglue.CacheInternalServiceDump(a.cache), - LeafCertificate: proxycfgglue.CacheLeafCertificate(a.cache), - PreparedQuery: proxycfgglue.CachePrepraredQuery(a.cache), - ResolvedServiceConfig: proxycfgglue.CacheResolvedServiceConfig(a.cache), - ServiceList: proxycfgglue.CacheServiceList(a.cache), - TrustBundle: proxycfgglue.CacheTrustBundle(a.cache), - } - a.fillEnterpriseProxyDataSources(&proxyDataSources) a.proxyConfig, err = proxycfg.NewManager(proxycfg.ManagerConfig{ - DataSources: proxyDataSources, - Logger: a.logger.Named(logging.ProxyConfig), + Cache: a.cache, + Health: a.rpcClientHealth, + Logger: a.logger.Named(logging.ProxyConfig), + State: a.State, + Tokens: a.baseDeps.Tokens, Source: &structs.QuerySource{ Datacenter: a.config.Datacenter, Segment: a.config.SegmentName, @@ -666,17 +641,11 @@ func (a *Agent) Start(ctx context.Context) error { if err != nil { return err } - - go localproxycfg.Sync( - &lib.StopChannelContext{StopCh: a.shutdownCh}, - localproxycfg.SyncConfig{ - Manager: a.proxyConfig, - State: a.State, - Logger: a.proxyConfig.Logger.Named("agent-state"), - Tokens: a.baseDeps.Tokens, - NodeName: a.config.NodeName, - }, - ) + go func() { + if err := a.proxyConfig.Run(); err != nil { + a.logger.Error("proxy config manager exited with error", "error", err) + } + }() // Start watching for critical services to deregister, based on their // checks. @@ -795,30 +764,10 @@ func (a *Agent) listenAndServeGRPC() error { return nil } - // TODO(agentless): rather than asserting the concrete type of delegate, we - // should add a method to the Delegate interface to build a ConfigSource. - var cfg xds.ProxyConfigSource = localproxycfg.NewConfigSource(a.proxyConfig) - if server, ok := a.delegate.(*consul.Server); ok { - catalogCfg := catalogproxycfg.NewConfigSource(catalogproxycfg.Config{ - NodeName: a.config.NodeName, - LocalState: a.State, - LocalConfigSource: cfg, - Manager: a.proxyConfig, - GetStore: func() catalogproxycfg.Store { return server.FSM().State() }, - Logger: a.proxyConfig.Logger.Named("server-catalog"), - }) - go func() { - <-a.shutdownCh - catalogCfg.Shutdown() - }() - cfg = catalogCfg - } - a.xdsServer = xds.NewServer( - a.config.NodeName, a.logger.Named(logging.Envoy), a.config.ConnectServerlessPluginEnabled, - cfg, + a.proxyConfig, func(id string) (acl.Authorizer, error) { return a.delegate.ResolveTokenAndDefaultMeta(id, nil, nil) }, @@ -3820,7 +3769,7 @@ func (a *Agent) reloadConfig(autoReload bool) error { // breaking some existing behavior. newCfg.NodeID = a.config.NodeID - // if auto reload is enabled, make sure we have the right certs file watched. + //if auto reload is enabled, make sure we have the right certs file watched. if autoReload { for _, f := range []struct { oldCfg tlsutil.ProtocolConfig @@ -3954,8 +3903,6 @@ func (a *Agent) reloadConfigInternal(newCfg *config.RuntimeConfig) error { ConfigEntryBootstrap: newCfg.ConfigEntryBootstrap, RaftSnapshotThreshold: newCfg.RaftSnapshotThreshold, RaftSnapshotInterval: newCfg.RaftSnapshotInterval, - HeartbeatTimeout: newCfg.ConsulRaftHeartbeatTimeout, - ElectionTimeout: newCfg.ConsulRaftElectionTimeout, RaftTrailingLogs: newCfg.RaftTrailingLogs, } if err := a.delegate.ReloadConfig(cc); err != nil { @@ -4092,14 +4039,12 @@ func (a *Agent) registerCache() { a.cache.RegisterType(cachetype.GatewayServicesName, &cachetype.GatewayServices{RPC: a}) - a.cache.RegisterType(cachetype.ConfigEntryListName, &cachetype.ConfigEntryList{RPC: a}) + a.cache.RegisterType(cachetype.ConfigEntriesName, &cachetype.ConfigEntries{RPC: a}) a.cache.RegisterType(cachetype.ConfigEntryName, &cachetype.ConfigEntry{RPC: a}) a.cache.RegisterType(cachetype.ServiceHTTPChecksName, &cachetype.ServiceHTTPChecks{Agent: a}) - a.cache.RegisterType(cachetype.TrustBundleReadName, &cachetype.TrustBundle{Client: a.rpcClientPeering}) - a.cache.RegisterType(cachetype.FederationStateListMeshGatewaysName, &cachetype.FederationStateListMeshGateways{RPC: a}) diff --git a/agent/agent_endpoint.go b/agent/agent_endpoint.go index 86197f462faa3..b5c94da759b68 100644 --- a/agent/agent_endpoint.go +++ b/agent/agent_endpoint.go @@ -423,7 +423,7 @@ func (s *HTTPHandlers) AgentService(resp http.ResponseWriter, req *http.Request) svcState := s.agent.State.ServiceState(sid) if svcState == nil { - return "", nil, HTTPError{StatusCode: http.StatusNotFound, Reason: fmt.Sprintf("unknown service ID: %s", sid.String())} + return "", nil, NotFoundError{Reason: fmt.Sprintf("unknown service ID: %s", sid.String())} } svc := svcState.Service @@ -553,7 +553,7 @@ func (s *HTTPHandlers) AgentMembers(resp http.ResponseWriter, req *http.Request) // key are ok, otherwise the argument doesn't apply to // the WAN. default: - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Cannot provide a segment with wan=true"} + return nil, BadRequestError{Reason: "Cannot provide a segment with wan=true"} } } @@ -724,16 +724,16 @@ func (s *HTTPHandlers) AgentRegisterCheck(resp http.ResponseWriter, req *http.Re } if err := decodeBody(req.Body, &args); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } // Verify the check has a name. if args.Name == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing check name"} + return nil, BadRequestError{Reason: "Missing check name"} } if args.Status != "" && !structs.ValidStatus(args.Status) { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Bad check status"} + return nil, BadRequestError{Reason: "Bad check status"} } authz, err := s.agent.delegate.ResolveTokenAndDefaultMeta(token, &args.EnterpriseMeta, nil) @@ -752,7 +752,7 @@ func (s *HTTPHandlers) AgentRegisterCheck(resp http.ResponseWriter, req *http.Re chkType := args.CheckType() err = chkType.Validate() if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid check: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Invalid check: %v", err)} } // Store the type of check based on the definition @@ -765,7 +765,7 @@ func (s *HTTPHandlers) AgentRegisterCheck(resp http.ResponseWriter, req *http.Re if service != nil { health.ServiceName = service.Service } else { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: fmt.Sprintf("ServiceID %q does not exist", cid.String())} + return nil, NotFoundError{fmt.Sprintf("ServiceID %q does not exist", cid.String())} } } @@ -858,7 +858,7 @@ type checkUpdate struct { func (s *HTTPHandlers) AgentCheckUpdate(resp http.ResponseWriter, req *http.Request) (interface{}, error) { var update checkUpdate if err := decodeBody(req.Body, &update); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } switch update.Status { @@ -866,7 +866,7 @@ func (s *HTTPHandlers) AgentCheckUpdate(resp http.ResponseWriter, req *http.Requ case api.HealthWarning: case api.HealthCritical: default: - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid check status: '%s'", update.Status)} + return nil, BadRequestError{Reason: fmt.Sprintf("Invalid check status: '%s'", update.Status)} } id := strings.TrimPrefix(req.URL.Path, "/v1/agent/check/update/") @@ -954,7 +954,7 @@ func (s *HTTPHandlers) AgentHealthServiceByID(resp http.ResponseWriter, req *htt // Pull out the service id (service id since there may be several instance of the same service on this host) serviceID := strings.TrimPrefix(req.URL.Path, "/v1/agent/health/service/id/") if serviceID == "" { - return nil, &HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing serviceID"} + return nil, &BadRequestError{Reason: "Missing serviceID"} } var entMeta acl.EnterpriseMeta @@ -1012,7 +1012,7 @@ func (s *HTTPHandlers) AgentHealthServiceByName(resp http.ResponseWriter, req *h // Pull out the service name serviceName := strings.TrimPrefix(req.URL.Path, "/v1/agent/health/service/name/") if serviceName == "" { - return nil, &HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing service Name"} + return nil, &BadRequestError{Reason: "Missing service Name"} } var entMeta acl.EnterpriseMeta @@ -1083,18 +1083,18 @@ func (s *HTTPHandlers) AgentRegisterService(resp http.ResponseWriter, req *http. } if err := decodeBody(req.Body, &args); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } // Verify the service has a name. if args.Name == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing service name"} + return nil, BadRequestError{Reason: "Missing service name"} } // Check the service address here and in the catalog RPC endpoint // since service registration isn't synchronous. if ipaddr.IsAny(args.Address) { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Invalid service address"} + return nil, BadRequestError{Reason: "Invalid service address"} } var token string @@ -1113,27 +1113,27 @@ func (s *HTTPHandlers) AgentRegisterService(resp http.ResponseWriter, req *http. ns := args.NodeService() if ns.Weights != nil { if err := structs.ValidateWeights(ns.Weights); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid Weights: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Invalid Weights: %v", err)} } } if err := structs.ValidateServiceMetadata(ns.Kind, ns.Meta, false); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid Service Meta: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Invalid Service Meta: %v", err)} } // Run validation. This is the same validation that would happen on // the catalog endpoint so it helps ensure the sync will work properly. if err := ns.Validate(); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Validation failed: %v", err.Error())} + return nil, BadRequestError{Reason: fmt.Sprintf("Validation failed: %v", err.Error())} } // Verify the check type. chkTypes, err := args.CheckTypes() if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid check: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Invalid check: %v", err)} } for _, check := range chkTypes { if check.Status != "" && !structs.ValidStatus(check.Status) { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Status for checks must 'passing', 'warning', 'critical'"} + return nil, BadRequestError{Reason: "Status for checks must 'passing', 'warning', 'critical'"} } } @@ -1141,11 +1141,15 @@ func (s *HTTPHandlers) AgentRegisterService(resp http.ResponseWriter, req *http. if args.Connect != nil && args.Connect.SidecarService != nil { chkTypes, err := args.Connect.SidecarService.CheckTypes() if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid check in sidecar_service: %v", err)} + return nil, &BadRequestError{ + Reason: fmt.Sprintf("Invalid check in sidecar_service: %v", err), + } } for _, check := range chkTypes { if check.Status != "" && !structs.ValidStatus(check.Status) { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Status for checks must 'passing', 'warning', 'critical'"} + return nil, &BadRequestError{ + Reason: "Status for checks must 'passing', 'warning', 'critical'", + } } } } @@ -1158,11 +1162,12 @@ func (s *HTTPHandlers) AgentRegisterService(resp http.ResponseWriter, req *http. // See if we have a sidecar to register too sidecar, sidecarChecks, sidecarToken, err := s.agent.sidecarServiceFromNodeService(ns, token) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid SidecarService: %s", err)} + return nil, &BadRequestError{ + Reason: fmt.Sprintf("Invalid SidecarService: %s", err)} } if sidecar != nil { if err := sidecar.Validate(); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Failed Validation: %v", err.Error())} + return nil, BadRequestError{Reason: fmt.Sprintf("Failed Validation: %v", err.Error())} } // Make sure we are allowed to register the sidecar using the token // specified (might be specific to sidecar or the same one as the overall @@ -1255,19 +1260,19 @@ func (s *HTTPHandlers) AgentServiceMaintenance(resp http.ResponseWriter, req *ht sid := structs.NewServiceID(serviceID, nil) if sid.ID == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing service ID"} + return nil, BadRequestError{Reason: "Missing service ID"} } // Ensure we have some action params := req.URL.Query() if _, ok := params["enable"]; !ok { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing value for enable"} + return nil, BadRequestError{Reason: "Missing value for enable"} } raw := params.Get("enable") enable, err := strconv.ParseBool(raw) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid value for enable: %q", raw)} + return nil, BadRequestError{Reason: fmt.Sprintf("Invalid value for enable: %q", raw)} } // Get the provided token, if any, and vet against any ACL policies. @@ -1296,11 +1301,11 @@ func (s *HTTPHandlers) AgentServiceMaintenance(resp http.ResponseWriter, req *ht if enable { reason := params.Get("reason") if err = s.agent.EnableServiceMaintenance(sid, reason, token); err != nil { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: err.Error()} + return nil, NotFoundError{Reason: err.Error()} } } else { if err = s.agent.DisableServiceMaintenance(sid); err != nil { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: err.Error()} + return nil, NotFoundError{Reason: err.Error()} } } s.syncChanges() @@ -1311,13 +1316,13 @@ func (s *HTTPHandlers) AgentNodeMaintenance(resp http.ResponseWriter, req *http. // Ensure we have some action params := req.URL.Query() if _, ok := params["enable"]; !ok { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing value for enable"} + return nil, BadRequestError{Reason: "Missing value for enable"} } raw := params.Get("enable") enable, err := strconv.ParseBool(raw) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid value for enable: %q", raw)} + return nil, BadRequestError{Reason: fmt.Sprintf("Invalid value for enable: %q", raw)} } // Get the provided token, if any, and vet against any ACL policies. @@ -1372,7 +1377,9 @@ func (s *HTTPHandlers) AgentMonitor(resp http.ResponseWriter, req *http.Request) } if !logging.ValidateLogLevel(logLevel) { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Unknown log level: %s", logLevel)} + return nil, BadRequestError{ + Reason: fmt.Sprintf("Unknown log level: %s", logLevel), + } } flusher, ok := resp.(http.Flusher) @@ -1423,7 +1430,7 @@ func (s *HTTPHandlers) AgentMonitor(resp http.ResponseWriter, req *http.Request) func (s *HTTPHandlers) AgentToken(resp http.ResponseWriter, req *http.Request) (interface{}, error) { if s.checkACLDisabled() { - return nil, HTTPError{StatusCode: http.StatusUnauthorized, Reason: "ACL support disabled"} + return nil, UnauthorizedError{Reason: "ACL support disabled"} } // Fetch the ACL token, if any, and enforce agent policy. @@ -1445,7 +1452,7 @@ func (s *HTTPHandlers) AgentToken(resp http.ResponseWriter, req *http.Request) ( // fields to this later if needed. var args api.AgentToken if err := decodeBody(req.Body, &args); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } // Figure out the target token. @@ -1473,7 +1480,7 @@ func (s *HTTPHandlers) AgentToken(resp http.ResponseWriter, req *http.Request) ( s.agent.tokens.UpdateReplicationToken(args.Token, token_store.TokenSourceAPI) default: - return HTTPError{StatusCode: http.StatusNotFound, Reason: fmt.Sprintf("Token %q is unknown", target)} + return NotFoundError{Reason: fmt.Sprintf("Token %q is unknown", target)} } // TODO: is it safe to move this out of WithPersistenceLock? @@ -1589,7 +1596,7 @@ func (s *HTTPHandlers) AgentConnectAuthorize(resp http.ResponseWriter, req *http } if err := decodeBody(req.Body, &authReq); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{fmt.Sprintf("Request decode failed: %v", err)} } if !s.validateRequestPartition(resp, &authReq.EnterpriseMeta) { diff --git a/agent/agent_endpoint_test.go b/agent/agent_endpoint_test.go index cfb7d0aa985d3..df496432386c6 100644 --- a/agent/agent_endpoint_test.go +++ b/agent/agent_endpoint_test.go @@ -5479,7 +5479,7 @@ func TestAgent_Token(t *testing.T) { url: "acl_token?token=root", body: badJSON(), code: http.StatusBadRequest, - expectedErr: `Request decode failed: json: cannot unmarshal bool into Go value of type api.AgentToken`, + expectedErr: `Bad request: Request decode failed: json: cannot unmarshal bool into Go value of type api.AgentToken`, }, { name: "set user legacy", @@ -6211,6 +6211,13 @@ func TestAgentConnectCALeafCert_goodNotLocal(t *testing.T) { func TestAgentConnectCALeafCert_nonBlockingQuery_after_blockingQuery_shouldNotBlock(t *testing.T) { // see: https://github.com/hashicorp/consul/issues/12048 + runStep := func(t *testing.T, name string, fn func(t *testing.T)) { + t.Helper() + if !t.Run(name, fn) { + t.FailNow() + } + } + if testing.Short() { t.Skip("too slow for testing.Short") } @@ -6245,7 +6252,7 @@ func TestAgentConnectCALeafCert_nonBlockingQuery_after_blockingQuery_shouldNotBl index string issued structs.IssuedCert ) - testutil.RunStep(t, "do initial non-blocking query", func(t *testing.T) { + runStep(t, "do initial non-blocking query", func(t *testing.T) { req := httptest.NewRequest("GET", "/v1/agent/connect/ca/leaf/test", nil) resp := httptest.NewRecorder() a.srv.h.ServeHTTP(resp, req) @@ -6277,7 +6284,7 @@ func TestAgentConnectCALeafCert_nonBlockingQuery_after_blockingQuery_shouldNotBl // in between both of these steps the data should still be there, causing // this to be a HIT that completes in less than 10m (the default inner leaf // cert blocking query timeout). - testutil.RunStep(t, "do a non-blocking query that should not block", func(t *testing.T) { + runStep(t, "do a non-blocking query that should not block", func(t *testing.T) { req := httptest.NewRequest("GET", "/v1/agent/connect/ca/leaf/test", nil) resp := httptest.NewRecorder() a.srv.h.ServeHTTP(resp, req) diff --git a/agent/agent_oss.go b/agent/agent_oss.go index 39adbef81e647..43de920a51a92 100644 --- a/agent/agent_oss.go +++ b/agent/agent_oss.go @@ -9,7 +9,6 @@ import ( "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/config" "github.com/hashicorp/consul/agent/consul" - "github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" ) @@ -59,5 +58,3 @@ func (a *Agent) AgentEnterpriseMeta() *acl.EnterpriseMeta { } func (a *Agent) registerEntCache() {} - -func (*Agent) fillEnterpriseProxyDataSources(*proxycfg.DataSources) {} diff --git a/agent/auto-config/config.go b/agent/auto-config/config.go index 94f45d1fc64f7..a20121fb9aab3 100644 --- a/agent/auto-config/config.go +++ b/agent/auto-config/config.go @@ -27,7 +27,7 @@ type DirectRPC interface { // agent/cache.Cache struct that we care about type Cache interface { Notify(ctx context.Context, t string, r cache.Request, correlationID string, ch chan<- cache.UpdateEvent) error - Prepopulate(t string, result cache.FetchResult, dc string, peerName string, token string, key string) error + Prepopulate(t string, result cache.FetchResult, dc string, token string, key string) error } // ServerProvider is an interface that can be used to find one server in the local DC known to diff --git a/agent/auto-config/mock_test.go b/agent/auto-config/mock_test.go index 1ff53bc629113..45fd42ef40217 100644 --- a/agent/auto-config/mock_test.go +++ b/agent/auto-config/mock_test.go @@ -137,7 +137,7 @@ func (m *mockCache) Notify(ctx context.Context, t string, r cache.Request, corre return err } -func (m *mockCache) Prepopulate(t string, result cache.FetchResult, dc string, peerName string, token string, key string) error { +func (m *mockCache) Prepopulate(t string, result cache.FetchResult, dc string, token string, key string) error { var restore string cert, ok := result.Value.(*structs.IssuedCert) if ok { @@ -147,7 +147,7 @@ func (m *mockCache) Prepopulate(t string, result cache.FetchResult, dc string, p cert.PrivateKeyPEM = "redacted" } - ret := m.Called(t, result, dc, peerName, token, key) + ret := m.Called(t, result, dc, token, key) if ok && restore != "" { cert.PrivateKeyPEM = restore @@ -304,7 +304,6 @@ func (m *mockedConfig) expectInitialTLS(t *testing.T, agentName, datacenter, tok rootRes, datacenter, "", - "", rootsReq.CacheInfo().Key, ).Return(nil).Once() @@ -331,7 +330,6 @@ func (m *mockedConfig) expectInitialTLS(t *testing.T, agentName, datacenter, tok cachetype.ConnectCALeafName, leafRes, datacenter, - "", token, leafReq.Key(), ).Return(nil).Once() diff --git a/agent/auto-config/tls.go b/agent/auto-config/tls.go index e8a59d19f99a9..0683e94ba40ba 100644 --- a/agent/auto-config/tls.go +++ b/agent/auto-config/tls.go @@ -96,7 +96,7 @@ func (ac *AutoConfig) populateCertificateCache(certs *structs.SignedResponse) er rootRes := cache.FetchResult{Value: &certs.ConnectCARoots, Index: certs.ConnectCARoots.QueryMeta.Index} rootsReq := ac.caRootsRequest() // getting the roots doesn't require a token so in order to potentially share the cache with another - if err := ac.acConfig.Cache.Prepopulate(cachetype.ConnectCARootName, rootRes, ac.config.Datacenter, structs.DefaultPeerKeyword, "", rootsReq.CacheInfo().Key); err != nil { + if err := ac.acConfig.Cache.Prepopulate(cachetype.ConnectCARootName, rootRes, ac.config.Datacenter, "", rootsReq.CacheInfo().Key); err != nil { return err } @@ -108,7 +108,7 @@ func (ac *AutoConfig) populateCertificateCache(certs *structs.SignedResponse) er Index: certs.IssuedCert.RaftIndex.ModifyIndex, State: cachetype.ConnectCALeafSuccess(connect.EncodeSigningKeyID(cert.AuthorityKeyId)), } - if err := ac.acConfig.Cache.Prepopulate(cachetype.ConnectCALeafName, certRes, leafReq.Datacenter, structs.DefaultPeerKeyword, leafReq.Token, leafReq.Key()); err != nil { + if err := ac.acConfig.Cache.Prepopulate(cachetype.ConnectCALeafName, certRes, leafReq.Datacenter, leafReq.Token, leafReq.Key()); err != nil { return err } diff --git a/agent/cache-types/catalog_list_services_test.go b/agent/cache-types/catalog_list_services_test.go index 60aa4ed81f604..a630daaf35cd6 100644 --- a/agent/cache-types/catalog_list_services_test.go +++ b/agent/cache-types/catalog_list_services_test.go @@ -5,11 +5,10 @@ import ( "testing" "time" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/structs" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" ) func TestCatalogListServices(t *testing.T) { @@ -105,7 +104,7 @@ func TestCatalogListServices_IntegrationWithCache_NotModifiedResponse(t *testing }, } - err := c.Prepopulate(CatalogListServicesName, last, "dc1", "", "token", req.CacheInfo().Key) + err := c.Prepopulate(CatalogListServicesName, last, "dc1", "token", req.CacheInfo().Key) require.NoError(t, err) ctx, cancel := context.WithCancel(context.Background()) diff --git a/agent/cache-types/config_entry.go b/agent/cache-types/config_entry.go index d48572d7fb7b3..a50c5c38216c2 100644 --- a/agent/cache-types/config_entry.go +++ b/agent/cache-types/config_entry.go @@ -9,17 +9,17 @@ import ( // Recommended name for registration. const ( - ConfigEntryListName = "config-entries" - ConfigEntryName = "config-entry" + ConfigEntriesName = "config-entries" + ConfigEntryName = "config-entry" ) -// ConfigEntryList supports fetching discovering configuration entries -type ConfigEntryList struct { +// ConfigEntries supports fetching discovering configuration entries +type ConfigEntries struct { RegisterOptionsBlockingRefresh RPC RPC } -func (c *ConfigEntryList) Fetch(opts cache.FetchOptions, req cache.Request) (cache.FetchResult, error) { +func (c *ConfigEntries) Fetch(opts cache.FetchOptions, req cache.Request) (cache.FetchResult, error) { var result cache.FetchResult // The request should be a ConfigEntryQuery. diff --git a/agent/cache-types/config_entry_test.go b/agent/cache-types/config_entry_test.go index 19522b796fe15..169022965adb9 100644 --- a/agent/cache-types/config_entry_test.go +++ b/agent/cache-types/config_entry_test.go @@ -12,7 +12,7 @@ import ( func TestConfigEntries(t *testing.T) { rpc := TestRPC(t) - typ := &ConfigEntryList{RPC: rpc} + typ := &ConfigEntries{RPC: rpc} // Expect the proper RPC call. This also sets the expected value // since that is return-by-pointer in the arguments. @@ -99,7 +99,7 @@ func TestConfigEntry(t *testing.T) { func TestConfigEntries_badReqType(t *testing.T) { rpc := TestRPC(t) - typ := &ConfigEntryList{RPC: rpc} + typ := &ConfigEntries{RPC: rpc} // Fetch _, err := typ.Fetch(cache.FetchOptions{}, cache.TestRequest( diff --git a/agent/cache-types/mock_Agent.go b/agent/cache-types/mock_Agent.go deleted file mode 100644 index ec3ba4031bf25..0000000000000 --- a/agent/cache-types/mock_Agent.go +++ /dev/null @@ -1,92 +0,0 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. - -package cachetype - -import ( - local "github.com/hashicorp/consul/agent/local" - memdb "github.com/hashicorp/go-memdb" - - mock "github.com/stretchr/testify/mock" - - structs "github.com/hashicorp/consul/agent/structs" - - testing "testing" - - time "time" -) - -// MockAgent is an autogenerated mock type for the Agent type -type MockAgent struct { - mock.Mock -} - -// LocalBlockingQuery provides a mock function with given fields: alwaysBlock, hash, wait, fn -func (_m *MockAgent) LocalBlockingQuery(alwaysBlock bool, hash string, wait time.Duration, fn func(memdb.WatchSet) (string, interface{}, error)) (string, interface{}, error) { - ret := _m.Called(alwaysBlock, hash, wait, fn) - - var r0 string - if rf, ok := ret.Get(0).(func(bool, string, time.Duration, func(memdb.WatchSet) (string, interface{}, error)) string); ok { - r0 = rf(alwaysBlock, hash, wait, fn) - } else { - r0 = ret.Get(0).(string) - } - - var r1 interface{} - if rf, ok := ret.Get(1).(func(bool, string, time.Duration, func(memdb.WatchSet) (string, interface{}, error)) interface{}); ok { - r1 = rf(alwaysBlock, hash, wait, fn) - } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(interface{}) - } - } - - var r2 error - if rf, ok := ret.Get(2).(func(bool, string, time.Duration, func(memdb.WatchSet) (string, interface{}, error)) error); ok { - r2 = rf(alwaysBlock, hash, wait, fn) - } else { - r2 = ret.Error(2) - } - - return r0, r1, r2 -} - -// LocalState provides a mock function with given fields: -func (_m *MockAgent) LocalState() *local.State { - ret := _m.Called() - - var r0 *local.State - if rf, ok := ret.Get(0).(func() *local.State); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*local.State) - } - } - - return r0 -} - -// ServiceHTTPBasedChecks provides a mock function with given fields: id -func (_m *MockAgent) ServiceHTTPBasedChecks(id structs.ServiceID) []structs.CheckType { - ret := _m.Called(id) - - var r0 []structs.CheckType - if rf, ok := ret.Get(0).(func(structs.ServiceID) []structs.CheckType); ok { - r0 = rf(id) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]structs.CheckType) - } - } - - return r0 -} - -// NewMockAgent creates a new instance of MockAgent. It also registers a cleanup function to assert the mocks expectations. -func NewMockAgent(t testing.TB) *MockAgent { - mock := &MockAgent{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/cache-types/mock_RPC.go b/agent/cache-types/mock_RPC.go index 67052f35494bc..6f642c66b8851 100644 --- a/agent/cache-types/mock_RPC.go +++ b/agent/cache-types/mock_RPC.go @@ -1,12 +1,7 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. - +// Code generated by mockery v1.0.0 package cachetype -import ( - testing "testing" - - mock "github.com/stretchr/testify/mock" -) +import mock "github.com/stretchr/testify/mock" // MockRPC is an autogenerated mock type for the RPC type type MockRPC struct { @@ -26,12 +21,3 @@ func (_m *MockRPC) RPC(method string, args interface{}, reply interface{}) error return r0 } - -// NewMockRPC creates a new instance of MockRPC. It also registers a cleanup function to assert the mocks expectations. -func NewMockRPC(t testing.TB) *MockRPC { - mock := &MockRPC{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/cache-types/mock_TrustBundleReader_test.go b/agent/cache-types/mock_TrustBundleReader_test.go deleted file mode 100644 index 7ea636b3d7242..0000000000000 --- a/agent/cache-types/mock_TrustBundleReader_test.go +++ /dev/null @@ -1,60 +0,0 @@ -// Code generated by mockery v2.12.2. DO NOT EDIT. - -package cachetype - -import ( - context "context" - - grpc "google.golang.org/grpc" - - mock "github.com/stretchr/testify/mock" - - pbpeering "github.com/hashicorp/consul/proto/pbpeering" - - testing "testing" -) - -// MockTrustBundleReader is an autogenerated mock type for the TrustBundleReader type -type MockTrustBundleReader struct { - mock.Mock -} - -// TrustBundleRead provides a mock function with given fields: ctx, in, opts -func (_m *MockTrustBundleReader) TrustBundleRead(ctx context.Context, in *pbpeering.TrustBundleReadRequest, opts ...grpc.CallOption) (*pbpeering.TrustBundleReadResponse, error) { - _va := make([]interface{}, len(opts)) - for _i := range opts { - _va[_i] = opts[_i] - } - var _ca []interface{} - _ca = append(_ca, ctx, in) - _ca = append(_ca, _va...) - ret := _m.Called(_ca...) - - var r0 *pbpeering.TrustBundleReadResponse - if rf, ok := ret.Get(0).(func(context.Context, *pbpeering.TrustBundleReadRequest, ...grpc.CallOption) *pbpeering.TrustBundleReadResponse); ok { - r0 = rf(ctx, in, opts...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*pbpeering.TrustBundleReadResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *pbpeering.TrustBundleReadRequest, ...grpc.CallOption) error); ok { - r1 = rf(ctx, in, opts...) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// NewMockTrustBundleReader creates a new instance of MockTrustBundleReader. It also registers the testing.TB interface on the mock and a cleanup function to assert the mocks expectations. -func NewMockTrustBundleReader(t testing.TB) *MockTrustBundleReader { - mock := &MockTrustBundleReader{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/cache-types/rpc.go b/agent/cache-types/rpc.go index ebf0925afff7d..0aaf040f3d75e 100644 --- a/agent/cache-types/rpc.go +++ b/agent/cache-types/rpc.go @@ -1,6 +1,6 @@ package cachetype -//go:generate mockery --all --inpackage +//go:generate mockery -all -inpkg // RPC is an interface that an RPC client must implement. This is a helper // interface that is implemented by the agent delegate so that Type diff --git a/agent/cache-types/trust_bundle.go b/agent/cache-types/trust_bundle.go deleted file mode 100644 index 6539a1ae87e3b..0000000000000 --- a/agent/cache-types/trust_bundle.go +++ /dev/null @@ -1,51 +0,0 @@ -package cachetype - -import ( - "context" - "fmt" - - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/proto/pbpeering" - "google.golang.org/grpc" -) - -// Recommended name for registration. -const TrustBundleReadName = "peer-trust-bundle" - -// TrustBundle supports fetching discovering service instances via prepared -// queries. -type TrustBundle struct { - RegisterOptionsNoRefresh - Client TrustBundleReader -} - -//go:generate mockery --name TrustBundleReader --inpackage --testonly -type TrustBundleReader interface { - TrustBundleRead( - ctx context.Context, in *pbpeering.TrustBundleReadRequest, opts ...grpc.CallOption, - ) (*pbpeering.TrustBundleReadResponse, error) -} - -func (t *TrustBundle) Fetch(_ cache.FetchOptions, req cache.Request) (cache.FetchResult, error) { - var result cache.FetchResult - - // The request should be a TrustBundleReadRequest. - // We do not need to make a copy of this request type like in other cache types - // because the RequestInfo is synthetic. - reqReal, ok := req.(*pbpeering.TrustBundleReadRequest) - if !ok { - return result, fmt.Errorf( - "Internal cache failure: request wrong type: %T", req) - } - - // Fetch - reply, err := t.Client.TrustBundleRead(context.Background(), reqReal) - if err != nil { - return result, err - } - - result.Value = reply - result.Index = reply.Index - - return result, nil -} diff --git a/agent/cache-types/trust_bundle_test.go b/agent/cache-types/trust_bundle_test.go deleted file mode 100644 index 8e18e69fe7eee..0000000000000 --- a/agent/cache-types/trust_bundle_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package cachetype - -import ( - "context" - "testing" - "time" - - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" -) - -func TestTrustBundles(t *testing.T) { - client := NewMockTrustBundleReader(t) - typ := &TrustBundle{Client: client} - - resp := &pbpeering.TrustBundleReadResponse{ - Index: 48, - Bundle: &pbpeering.PeeringTrustBundle{ - PeerName: "peer1", - RootPEMs: []string{"peer1-roots"}, - }, - } - - // Expect the proper call. - // This also returns the canned response above. - client.On("TrustBundleRead", mock.Anything, mock.Anything). - Run(func(args mock.Arguments) { - req := args.Get(1).(*pbpeering.TrustBundleReadRequest) - require.Equal(t, "foo", req.Name) - }). - Return(resp, nil) - - // Fetch and assert against the result. - result, err := typ.Fetch(cache.FetchOptions{}, &pbpeering.TrustBundleReadRequest{ - Name: "foo", - }) - require.NoError(t, err) - require.Equal(t, cache.FetchResult{ - Value: resp, - Index: 48, - }, result) -} - -func TestTrustBundles_badReqType(t *testing.T) { - client := pbpeering.NewPeeringServiceClient(nil) - typ := &TrustBundle{Client: client} - - // Fetch - _, err := typ.Fetch(cache.FetchOptions{}, cache.TestRequest( - t, cache.RequestInfo{Key: "foo", MinIndex: 64})) - require.Error(t, err) - require.Contains(t, err.Error(), "wrong type") -} - -// This test asserts that we can continuously poll this cache type, given that it doesn't support blocking. -func TestTrustBundles_MultipleUpdates(t *testing.T) { - c := cache.New(cache.Options{}) - - client := NewMockTrustBundleReader(t) - - // On each mock client call to TrustBundleList by service we will increment the index by 1 - // to simulate new data arriving. - resp := &pbpeering.TrustBundleReadResponse{ - Index: uint64(0), - } - - client.On("TrustBundleRead", mock.Anything, mock.Anything). - Run(func(args mock.Arguments) { - req := args.Get(1).(*pbpeering.TrustBundleReadRequest) - require.Equal(t, "foo", req.Name) - - // Increment on each call. - resp.Index++ - }). - Return(resp, nil) - - c.RegisterType(TrustBundleReadName, &TrustBundle{Client: client}) - - ch := make(chan cache.UpdateEvent) - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - t.Cleanup(cancel) - - err := c.Notify(ctx, TrustBundleReadName, &pbpeering.TrustBundleReadRequest{Name: "foo"}, "updates", ch) - require.NoError(t, err) - - i := uint64(1) - for { - select { - case <-ctx.Done(): - return - case update := <-ch: - // Expect to receive updates for increasing indexes serially. - resp := update.Result.(*pbpeering.TrustBundleReadResponse) - require.Equal(t, i, resp.Index) - i++ - - if i > 3 { - return - } - } - } -} diff --git a/agent/cache/cache.go b/agent/cache/cache.go index de6d001e32a91..e012b68683e61 100644 --- a/agent/cache/cache.go +++ b/agent/cache/cache.go @@ -33,7 +33,7 @@ import ( "github.com/hashicorp/consul/lib/ttlcache" ) -//go:generate mockery --all --inpackage +//go:generate mockery -all -inpkg // TODO(kit): remove the namespace from these once the metrics themselves change var Gauges = []prometheus.GaugeDefinition{ @@ -91,7 +91,7 @@ const ( // struct in agent/structs. This API makes cache usage a mostly drop-in // replacement for non-cached RPC calls. // -// The cache is partitioned by ACL and datacenter/peer. This allows the cache +// The cache is partitioned by ACL and datacenter. This allows the cache // to be safe for multi-DC queries and for queries where the data is modified // due to ACLs all without the cache having to have any clever logic, at // the slight expense of a less perfect cache. @@ -406,7 +406,7 @@ func (c *Cache) getWithIndex(ctx context.Context, r getOptions) (interface{}, Re return result.Value, ResultMeta{}, err } - key := makeEntryKey(r.TypeEntry.Name, r.Info.Datacenter, r.Info.PeerName, r.Info.Token, r.Info.Key) + key := makeEntryKey(r.TypeEntry.Name, r.Info.Datacenter, r.Info.Token, r.Info.Key) // First time through first := true @@ -526,11 +526,7 @@ RETRY_GET: } } -func makeEntryKey(t, dc, peerName, token, key string) string { - // TODO(peering): figure out if this is the desired format - if peerName != "" { - return fmt.Sprintf("%s/%s/%s/%s", t, "peer:"+peerName, token, key) - } +func makeEntryKey(t, dc, token, key string) string { return fmt.Sprintf("%s/%s/%s/%s", t, dc, token, key) } @@ -888,8 +884,8 @@ func (c *Cache) Close() error { // on startup. It is used to set the ConnectRootCA and AgentLeafCert when // AutoEncrypt.TLS is turned on. The cache itself cannot fetch that the first // time because it requires a special RPCType. Subsequent runs are fine though. -func (c *Cache) Prepopulate(t string, res FetchResult, dc, peerName, token, k string) error { - key := makeEntryKey(t, dc, peerName, token, k) +func (c *Cache) Prepopulate(t string, res FetchResult, dc, token, k string) error { + key := makeEntryKey(t, dc, token, k) newEntry := cacheEntry{ Valid: true, Value: res.Value, diff --git a/agent/cache/cache_test.go b/agent/cache/cache_test.go index a93969c2c65b5..5c2b3d2035f33 100644 --- a/agent/cache/cache_test.go +++ b/agent/cache/cache_test.go @@ -1545,7 +1545,7 @@ func TestCacheReload(t *testing.T) { c.entriesLock.Lock() tEntry, ok := c.types["t1"] require.True(t, ok) - keyName := makeEntryKey("t1", "", "", "", "hello1") + keyName := makeEntryKey("t1", "", "", "hello1") ok, entryValid, entry := c.getEntryLocked(tEntry, keyName, RequestInfo{}) require.True(t, ok) require.True(t, entryValid) @@ -1687,7 +1687,7 @@ func TestCache_Prepopulate(t *testing.T) { c := New(Options{}) c.RegisterType("t", typ) - c.Prepopulate("t", FetchResult{Value: 17, Index: 1}, "dc1", "", "token", "v1") + c.Prepopulate("t", FetchResult{Value: 17, Index: 1}, "dc1", "token", "v1") ctx := context.Background() req := fakeRequest{ @@ -1740,7 +1740,7 @@ func TestCache_RefreshLifeCycle(t *testing.T) { c := New(Options{}) c.RegisterType("t", typ) - key := makeEntryKey("t", "dc1", "", "token", "v1") + key := makeEntryKey("t", "dc1", "token", "v1") ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/agent/cache/mock_Request.go b/agent/cache/mock_Request.go index 7cd7343f8f892..c5af589241841 100644 --- a/agent/cache/mock_Request.go +++ b/agent/cache/mock_Request.go @@ -1,12 +1,8 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. +// Code generated by mockery v1.0.0. DO NOT EDIT. package cache -import ( - testing "testing" - - mock "github.com/stretchr/testify/mock" -) +import mock "github.com/stretchr/testify/mock" // MockRequest is an autogenerated mock type for the Request type type MockRequest struct { @@ -26,12 +22,3 @@ func (_m *MockRequest) CacheInfo() RequestInfo { return r0 } - -// NewMockRequest creates a new instance of MockRequest. It also registers a cleanup function to assert the mocks expectations. -func NewMockRequest(t testing.TB) *MockRequest { - mock := &MockRequest{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/cache/mock_Type.go b/agent/cache/mock_Type.go index 628e7a018454c..7c39fca329a7e 100644 --- a/agent/cache/mock_Type.go +++ b/agent/cache/mock_Type.go @@ -1,12 +1,8 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. +// Code generated by mockery v1.0.0. DO NOT EDIT. package cache -import ( - testing "testing" - - mock "github.com/stretchr/testify/mock" -) +import mock "github.com/stretchr/testify/mock" // MockType is an autogenerated mock type for the Type type type MockType struct { @@ -47,12 +43,3 @@ func (_m *MockType) RegisterOptions() RegisterOptions { return r0 } - -// NewMockType creates a new instance of MockType. It also registers a cleanup function to assert the mocks expectations. -func NewMockType(t testing.TB) *MockType { - mock := &MockType{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/cache/request.go b/agent/cache/request.go index fbce6f89171c2..b2d3ab854a31b 100644 --- a/agent/cache/request.go +++ b/agent/cache/request.go @@ -16,9 +16,6 @@ type Request interface { // RequestInfo represents cache information for a request. The caching // framework uses this to control the behavior of caching and to determine // cacheability. -// -// TODO(peering): finish ensuring everything that sets a Datacenter sets or doesn't set PeerName. -// TODO(peering): also make sure the peer name is present in the cache key likely in lieu of the datacenter somehow. type RequestInfo struct { // Key is a unique cache key for this request. This key should // be globally unique to identify this request, since any conflicting @@ -31,17 +28,14 @@ type RequestInfo struct { // // Datacenter is the datacenter that the request is targeting. // - // PeerName is the peer that the request is targeting. - // - // All of these values are used to partition the cache. The cache framework + // Both of these values are used to partition the cache. The cache framework // today partitions data on these values to simplify behavior: by // partitioning ACL tokens, the cache doesn't need to be smart about - // filtering results. By filtering datacenter/peer results, the cache can - // service the multi-DC/multi-peer nature of Consul. This comes at the expense of + // filtering results. By filtering datacenter results, the cache can + // service the multi-DC nature of Consul. This comes at the expense of // working set size, but in general the effect is minimal. Token string Datacenter string - PeerName string // MinIndex is the minimum index being queried. This is used to // determine if we already have data satisfying the query or if we need diff --git a/agent/cache/watch.go b/agent/cache/watch.go index f99f85c04ba4c..f50e280783508 100644 --- a/agent/cache/watch.go +++ b/agent/cache/watch.go @@ -23,9 +23,6 @@ type UpdateEvent struct { Err error } -// Callback is the function type accepted by NotifyCallback. -type Callback func(ctx context.Context, event UpdateEvent) - // Notify registers a desire to be updated about changes to a cache result. // // It is a helper that abstracts code from performing their own "blocking" query @@ -59,24 +56,6 @@ func (c *Cache) Notify( r Request, correlationID string, ch chan<- UpdateEvent, -) error { - return c.NotifyCallback(ctx, t, r, correlationID, func(ctx context.Context, event UpdateEvent) { - select { - case ch <- event: - case <-ctx.Done(): - } - }) -} - -// NotifyCallback allows you to receive notifications about changes to a cache -// result in the same way as Notify, but accepts a callback function instead of -// a channel. -func (c *Cache) NotifyCallback( - ctx context.Context, - t string, - r Request, - correlationID string, - cb Callback, ) error { c.typesLock.RLock() tEntry, ok := c.types[t] @@ -86,7 +65,7 @@ func (c *Cache) NotifyCallback( } if tEntry.Opts.SupportsBlocking { - go c.notifyBlockingQuery(ctx, newGetOptions(tEntry, r), correlationID, cb) + go c.notifyBlockingQuery(ctx, newGetOptions(tEntry, r), correlationID, ch) return nil } @@ -94,11 +73,11 @@ func (c *Cache) NotifyCallback( if info.MaxAge == 0 { return fmt.Errorf("Cannot use Notify for polling cache types without specifying the MaxAge") } - go c.notifyPollingQuery(ctx, newGetOptions(tEntry, r), correlationID, cb) + go c.notifyPollingQuery(ctx, newGetOptions(tEntry, r), correlationID, ch) return nil } -func (c *Cache) notifyBlockingQuery(ctx context.Context, r getOptions, correlationID string, cb Callback) { +func (c *Cache) notifyBlockingQuery(ctx context.Context, r getOptions, correlationID string, ch chan<- UpdateEvent) { // Always start at 0 index to deliver the initial (possibly currently cached // value). index := uint64(0) @@ -122,7 +101,12 @@ func (c *Cache) notifyBlockingQuery(ctx context.Context, r getOptions, correlati // Check the index of the value returned in the cache entry to be sure it // changed if index == 0 || index < meta.Index { - cb(ctx, UpdateEvent{correlationID, res, meta, err}) + u := UpdateEvent{correlationID, res, meta, err} + select { + case ch <- u: + case <-ctx.Done(): + return + } // Update index for next request index = meta.Index @@ -159,7 +143,7 @@ func (c *Cache) notifyBlockingQuery(ctx context.Context, r getOptions, correlati } } -func (c *Cache) notifyPollingQuery(ctx context.Context, r getOptions, correlationID string, cb Callback) { +func (c *Cache) notifyPollingQuery(ctx context.Context, r getOptions, correlationID string, ch chan<- UpdateEvent) { index := uint64(0) failures := uint(0) @@ -182,7 +166,12 @@ func (c *Cache) notifyPollingQuery(ctx context.Context, r getOptions, correlatio // Check for a change in the value or an index change if index < meta.Index || !reflect.DeepEqual(lastValue, res) { - cb(ctx, UpdateEvent{correlationID, res, meta, err}) + u := UpdateEvent{correlationID, res, meta, err} + select { + case ch <- u: + case <-ctx.Done(): + return + } // Update index and lastValue lastValue = res diff --git a/agent/catalog_endpoint.go b/agent/catalog_endpoint.go index fbee9cbfc1d74..8ad605781f052 100644 --- a/agent/catalog_endpoint.go +++ b/agent/catalog_endpoint.go @@ -137,7 +137,7 @@ func (s *HTTPHandlers) CatalogRegister(resp http.ResponseWriter, req *http.Reque } if err := s.rewordUnknownEnterpriseFieldError(decodeBody(req.Body, &args)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } // Setup the default DC if not provided @@ -167,7 +167,7 @@ func (s *HTTPHandlers) CatalogDeregister(resp http.ResponseWriter, req *http.Req return nil, err } if err := s.rewordUnknownEnterpriseFieldError(decodeBody(req.Body, &args)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } // Setup the default DC if not provided @@ -357,14 +357,10 @@ func (s *HTTPHandlers) catalogServiceNodes(resp http.ResponseWriter, req *http.R args.TagFilter = true } - if _, ok := params["merge-central-config"]; ok { - args.MergeCentralConfig = true - } - // Pull out the service name args.ServiceName = strings.TrimPrefix(req.URL.Path, pathPrefix) if args.ServiceName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing service name"} + return nil, BadRequestError{Reason: "Missing service name"} } // Make the RPC request @@ -435,7 +431,7 @@ func (s *HTTPHandlers) CatalogNodeServices(resp http.ResponseWriter, req *http.R // Pull out the node name args.Node = strings.TrimPrefix(req.URL.Path, "/v1/catalog/node/") if args.Node == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing node name"} + return nil, BadRequestError{Reason: "Missing node name"} } // Make the RPC request @@ -496,7 +492,7 @@ func (s *HTTPHandlers) CatalogNodeServiceList(resp http.ResponseWriter, req *htt // Pull out the node name args.Node = strings.TrimPrefix(req.URL.Path, "/v1/catalog/node-services/") if args.Node == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing node name"} + return nil, BadRequestError{Reason: "Missing node name"} } // Make the RPC request @@ -543,7 +539,7 @@ func (s *HTTPHandlers) CatalogGatewayServices(resp http.ResponseWriter, req *htt // Pull out the gateway's service name args.ServiceName = strings.TrimPrefix(req.URL.Path, "/v1/catalog/gateway-services/") if args.ServiceName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing gateway name"} + return nil, BadRequestError{Reason: "Missing gateway name"} } // Make the RPC request diff --git a/agent/catalog_endpoint_test.go b/agent/catalog_endpoint_test.go index ff45a10cbd40d..f1e08c076153d 100644 --- a/agent/catalog_endpoint_test.go +++ b/agent/catalog_endpoint_test.go @@ -8,7 +8,6 @@ import ( "testing" "time" - "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/api" "github.com/hashicorp/serf/coordinate" @@ -1053,249 +1052,6 @@ func TestCatalogServiceNodes_ConnectProxy(t *testing.T) { assert.Equal(t, args.Service.Proxy, nodes[0].ServiceProxy) } -func registerService(t *testing.T, a *TestAgent) (registerServiceReq *structs.RegisterRequest) { - t.Helper() - entMeta := acl.DefaultEnterpriseMeta() - registerServiceReq = structs.TestRegisterRequestProxy(t) - registerServiceReq.EnterpriseMeta = *entMeta - registerServiceReq.Service.EnterpriseMeta = *entMeta - registerServiceReq.Service.Proxy.Upstreams = structs.TestAddDefaultsToUpstreams(t, registerServiceReq.Service.Proxy.Upstreams, *entMeta) - registerServiceReq.Check = &structs.HealthCheck{ - Node: registerServiceReq.Node, - Name: "check1", - } - - var out struct{} - require.NoError(t, a.RPC("Catalog.Register", registerServiceReq, &out)) - - return -} - -func registerProxyDefaults(t *testing.T, a *TestAgent) (proxyGlobalEntry structs.ProxyConfigEntry) { - t.Helper() - // Register proxy-defaults - proxyGlobalEntry = structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, - Mode: structs.ProxyModeDirect, - Config: map[string]interface{}{ - "local_connect_timeout_ms": uint64(1000), - "handshake_timeout_ms": uint64(1000), - }, - EnterpriseMeta: *acl.DefaultEnterpriseMeta(), - } - proxyDefaultsConfigEntryReq := &structs.ConfigEntryRequest{ - Op: structs.ConfigEntryUpsert, - Datacenter: "dc1", - Entry: &proxyGlobalEntry, - } - var proxyDefaultsConfigEntryResp bool - require.NoError(t, a.RPC("ConfigEntry.Apply", &proxyDefaultsConfigEntryReq, &proxyDefaultsConfigEntryResp)) - return -} - -func registerServiceDefaults(t *testing.T, a *TestAgent, serviceName string) (serviceDefaultsConfigEntry structs.ServiceConfigEntry) { - t.Helper() - limits := 512 - serviceDefaultsConfigEntry = structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: serviceName, - Mode: structs.ProxyModeTransparent, - UpstreamConfig: &structs.UpstreamConfiguration{ - Defaults: &structs.UpstreamConfig{ - MeshGateway: structs.MeshGatewayConfig{ - Mode: structs.MeshGatewayModeLocal, - }, - Limits: &structs.UpstreamLimits{ - MaxConnections: &limits, - }, - }, - }, - EnterpriseMeta: *acl.DefaultEnterpriseMeta(), - } - serviceDefaultsConfigEntryReq := &structs.ConfigEntryRequest{ - Op: structs.ConfigEntryUpsert, - Datacenter: "dc1", - Entry: &serviceDefaultsConfigEntry, - } - var serviceDefaultsConfigEntryResp bool - require.NoError(t, a.RPC("ConfigEntry.Apply", &serviceDefaultsConfigEntryReq, &serviceDefaultsConfigEntryResp)) - return -} - -func validateMergeCentralConfigResponse(t *testing.T, v *structs.ServiceNode, - registerServiceReq *structs.RegisterRequest, - proxyGlobalEntry structs.ProxyConfigEntry, - serviceDefaultsConfigEntry structs.ServiceConfigEntry) { - - t.Helper() - require.Equal(t, registerServiceReq.Service.Service, v.ServiceName) - // validate proxy global defaults are resolved in the merged service config - require.Equal(t, proxyGlobalEntry.Config, v.ServiceProxy.Config) - // validate service defaults override proxy-defaults/global - require.NotEqual(t, proxyGlobalEntry.Mode, v.ServiceProxy.Mode) - require.Equal(t, serviceDefaultsConfigEntry.Mode, v.ServiceProxy.Mode) - // validate service defaults are resolved in the merged service config - // expected number of upstreams = (number of upstreams defined in the register request proxy config + - // 1 centrally configured default from service defaults) - require.Equal(t, len(registerServiceReq.Service.Proxy.Upstreams)+1, len(v.ServiceProxy.Upstreams)) - for _, up := range v.ServiceProxy.Upstreams { - if up.DestinationType != "" && up.DestinationType != structs.UpstreamDestTypeService { - continue - } - require.Contains(t, up.Config, "limits") - upstreamLimits := up.Config["limits"].(*structs.UpstreamLimits) - require.Equal(t, serviceDefaultsConfigEntry.UpstreamConfig.Defaults.Limits.MaxConnections, upstreamLimits.MaxConnections) - require.Equal(t, serviceDefaultsConfigEntry.UpstreamConfig.Defaults.MeshGateway.Mode, up.MeshGateway.Mode) - } -} - -func TestListServiceNodes_MergeCentralConfig(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - - a := NewTestAgent(t, "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") - - // Register the service - registerServiceReq := registerService(t, a) - // Register proxy-defaults - proxyGlobalEntry := registerProxyDefaults(t, a) - // Register service-defaults - serviceDefaultsConfigEntry := registerServiceDefaults(t, a, registerServiceReq.Service.Proxy.DestinationServiceName) - - type testCase struct { - testCaseName string - serviceName string - connect bool - } - - run := func(t *testing.T, tc testCase) { - url := fmt.Sprintf("/v1/catalog/service/%s?merge-central-config", tc.serviceName) - if tc.connect { - url = fmt.Sprintf("/v1/catalog/connect/%s?merge-central-config", tc.serviceName) - } - req, _ := http.NewRequest("GET", url, nil) - resp := httptest.NewRecorder() - var obj interface{} - var err error - if tc.connect { - obj, err = a.srv.CatalogConnectServiceNodes(resp, req) - } else { - obj, err = a.srv.CatalogServiceNodes(resp, req) - } - - require.NoError(t, err) - assertIndex(t, resp) - - serviceNodes := obj.(structs.ServiceNodes) - - // validate response - require.Len(t, serviceNodes, 1) - v := serviceNodes[0] - - validateMergeCentralConfigResponse(t, v, registerServiceReq, proxyGlobalEntry, serviceDefaultsConfigEntry) - } - testCases := []testCase{ - { - testCaseName: "List service instances with merge-central-config", - serviceName: registerServiceReq.Service.Service, - }, - { - testCaseName: "List connect capable service instances with merge-central-config", - serviceName: registerServiceReq.Service.Proxy.DestinationServiceName, - connect: true, - }, - } - for _, tc := range testCases { - t.Run(tc.testCaseName, func(t *testing.T) { - run(t, tc) - }) - } -} - -func TestCatalogServiceNodes_MergeCentralConfigBlocking(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - a := NewTestAgent(t, "") - defer a.Shutdown() - - testrpc.WaitForLeader(t, a.RPC, "dc1") - - // Register the service - registerServiceReq := registerService(t, a) - // Register proxy-defaults - proxyGlobalEntry := registerProxyDefaults(t, a) - - // Run the query - rpcReq := structs.ServiceSpecificRequest{ - Datacenter: "dc1", - ServiceName: registerServiceReq.Service.Service, - MergeCentralConfig: true, - } - var rpcResp structs.IndexedServiceNodes - require.NoError(t, a.RPC("Catalog.ServiceNodes", &rpcReq, &rpcResp)) - - require.Len(t, rpcResp.ServiceNodes, 1) - serviceNode := rpcResp.ServiceNodes[0] - require.Equal(t, registerServiceReq.Service.Service, serviceNode.ServiceName) - // validate proxy global defaults are resolved in the merged service config - require.Equal(t, proxyGlobalEntry.Config, serviceNode.ServiceProxy.Config) - require.Equal(t, proxyGlobalEntry.Mode, serviceNode.ServiceProxy.Mode) - - // Async cause a change - register service defaults - waitIndex := rpcResp.Index - start := time.Now() - var serviceDefaultsConfigEntry structs.ServiceConfigEntry - go func() { - time.Sleep(100 * time.Millisecond) - // Register service-defaults - serviceDefaultsConfigEntry = registerServiceDefaults(t, a, registerServiceReq.Service.Proxy.DestinationServiceName) - }() - - const waitDuration = 3 * time.Second -RUN_BLOCKING_QUERY: - url := fmt.Sprintf("/v1/catalog/service/%s?merge-central-config&wait=%s&index=%d", - registerServiceReq.Service.Service, waitDuration.String(), waitIndex) - req, _ := http.NewRequest("GET", url, nil) - resp := httptest.NewRecorder() - obj, err := a.srv.CatalogServiceNodes(resp, req) - - require.NoError(t, err) - assertIndex(t, resp) - - elapsed := time.Since(start) - idx := getIndex(t, resp) - if idx < waitIndex { - t.Fatalf("bad index returned: %v", idx) - } else if idx == waitIndex { - if elapsed > waitDuration { - // This should prevent the loop from running longer than the waitDuration - t.Fatalf("too slow: %v", elapsed) - } - goto RUN_BLOCKING_QUERY - } - // Should block at least 100ms before getting the changed results - if elapsed < 100*time.Millisecond { - t.Fatalf("too fast: %v", elapsed) - } - - serviceNodes := obj.(structs.ServiceNodes) - - // validate response - require.Len(t, serviceNodes, 1) - v := serviceNodes[0] - - validateMergeCentralConfigResponse(t, v, registerServiceReq, proxyGlobalEntry, serviceDefaultsConfigEntry) -} - // Test that the Connect-compatible endpoints can be queried for a // service via /v1/catalog/connect/:service. func TestCatalogConnectServiceNodes_good(t *testing.T) { diff --git a/agent/config/builder.go b/agent/config/builder.go index 741aa06b124de..902a8c2616895 100644 --- a/agent/config/builder.go +++ b/agent/config/builder.go @@ -1701,7 +1701,6 @@ func (b *builder) upstreamsVal(v []Upstream) structs.Upstreams { DestinationType: stringVal(u.DestinationType), DestinationNamespace: stringVal(u.DestinationNamespace), DestinationPartition: stringVal(u.DestinationPartition), - DestinationPeer: stringVal(u.DestinationPeer), DestinationName: stringVal(u.DestinationName), Datacenter: stringVal(u.Datacenter), LocalBindAddress: stringVal(u.LocalBindAddress), diff --git a/agent/config/config.go b/agent/config/config.go index 0bb16cda551ae..b579e378ee153 100644 --- a/agent/config/config.go +++ b/agent/config/config.go @@ -506,7 +506,6 @@ type Upstream struct { DestinationType *string `mapstructure:"destination_type"` DestinationNamespace *string `mapstructure:"destination_namespace"` DestinationPartition *string `mapstructure:"destination_partition"` - DestinationPeer *string `mapstructure:"destination_peer"` DestinationName *string `mapstructure:"destination_name"` // Datacenter that the service discovery request should be run against. Note diff --git a/agent/config/testdata/TestRuntimeConfig_Sanitize.golden b/agent/config/testdata/TestRuntimeConfig_Sanitize.golden index e49398b8dd78f..159f600d298a3 100644 --- a/agent/config/testdata/TestRuntimeConfig_Sanitize.golden +++ b/agent/config/testdata/TestRuntimeConfig_Sanitize.golden @@ -418,6 +418,7 @@ "DisableHostname": false, "DogstatsdAddr": "", "DogstatsdTags": [], + "RetryFailedConfiguration": false, "FilterDefault": false, "MetricsPrefix": "", "PrometheusOpts": { @@ -428,7 +429,6 @@ "Registerer": null, "SummaryDefinitions": [] }, - "RetryFailedConfiguration": false, "StatsdAddr": "", "StatsiteAddr": "" }, diff --git a/agent/config_endpoint.go b/agent/config_endpoint.go index 7e67d851ae8ce..a82deb4ce9bdd 100644 --- a/agent/config_endpoint.go +++ b/agent/config_endpoint.go @@ -53,7 +53,7 @@ func (s *HTTPHandlers) configGet(resp http.ResponseWriter, req *http.Request) (i setMeta(resp, &reply.QueryMeta) if reply.Entry == nil { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: fmt.Sprintf("%s for %q / %q", ConfigEntryNotFoundErr, pathArgs[0], pathArgs[1])} + return nil, NotFoundError{Reason: fmt.Sprintf("%s for %q / %q", ConfigEntryNotFoundErr, pathArgs[0], pathArgs[1])} } return reply.Entry, nil @@ -72,7 +72,7 @@ func (s *HTTPHandlers) configGet(resp http.ResponseWriter, req *http.Request) (i return reply.Entries, nil default: - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: "Must provide either a kind or both kind and name"} + return nil, NotFoundError{Reason: "Must provide either a kind or both kind and name"} } } @@ -85,12 +85,12 @@ func (s *HTTPHandlers) configDelete(resp http.ResponseWriter, req *http.Request) pathArgs := strings.SplitN(kindAndName, "/", 2) if len(pathArgs) != 2 { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: "Must provide both a kind and name to delete"} + return nil, NotFoundError{Reason: "Must provide both a kind and name to delete"} } entry, err := structs.MakeConfigEntry(pathArgs[0], pathArgs[1]) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: err.Error()} + return nil, BadRequestError{Reason: err.Error()} } args.Entry = entry // Parse enterprise meta. @@ -133,13 +133,13 @@ func (s *HTTPHandlers) ConfigApply(resp http.ResponseWriter, req *http.Request) var raw map[string]interface{} if err := decodeBodyDeprecated(req, &raw, nil); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decoding failed: %v", err)} } if entry, err := structs.DecodeConfigEntry(raw); err == nil { args.Entry = entry } else { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decoding failed: %v", err)} } // Parse enterprise meta. diff --git a/agent/config_endpoint_test.go b/agent/config_endpoint_test.go index b8ed9d55070ac..949b6be11875a 100644 --- a/agent/config_endpoint_test.go +++ b/agent/config_endpoint_test.go @@ -601,8 +601,9 @@ func TestConfig_Apply_Decoding(t *testing.T) { _, err := a.srv.ConfigApply(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) - require.Equal(t, "Request decoding failed: Payload does not contain a kind/Kind key at the top level", err.Error()) + badReq, ok := err.(BadRequestError) + require.True(t, ok) + require.Equal(t, "Request decoding failed: Payload does not contain a kind/Kind key at the top level", badReq.Reason) }) t.Run("Kind Not String", func(t *testing.T) { @@ -618,8 +619,9 @@ func TestConfig_Apply_Decoding(t *testing.T) { _, err := a.srv.ConfigApply(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) - require.Equal(t, "Request decoding failed: Kind value in payload is not a string", err.Error()) + badReq, ok := err.(BadRequestError) + require.True(t, ok) + require.Equal(t, "Request decoding failed: Kind value in payload is not a string", badReq.Reason) }) t.Run("Lowercase kind", func(t *testing.T) { diff --git a/agent/connect/ca/common.go b/agent/connect/ca/common.go index 848a4fa7b1736..cef412bd3e3c4 100644 --- a/agent/connect/ca/common.go +++ b/agent/connect/ca/common.go @@ -4,6 +4,7 @@ import ( "bytes" "crypto/x509" "fmt" + "strings" "github.com/hashicorp/consul/agent/connect" ) @@ -91,3 +92,15 @@ func validateSignIntermediate(csr *x509.CertificateRequest, spiffeID *connect.Sp } return nil } + +// EnsureTrailingNewline this is used to fix a case where the provider do not return a new line after +// the certificate as per the specification see GH-8178 for more context +func EnsureTrailingNewline(cert string) string { + if cert == "" { + return cert + } + if strings.HasSuffix(cert, "\n") { + return cert + } + return fmt.Sprintf("%s\n", cert) +} diff --git a/agent/connect/ca/mock_Provider.go b/agent/connect/ca/mock_Provider.go index bdc5d9c8e609f..ec79ea5c70296 100644 --- a/agent/connect/ca/mock_Provider.go +++ b/agent/connect/ca/mock_Provider.go @@ -1,13 +1,11 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. +// Code generated by mockery v1.0.0. DO NOT EDIT. package ca import ( - testing "testing" + x509 "crypto/x509" mock "github.com/stretchr/testify/mock" - - x509 "crypto/x509" ) // MockProvider is an autogenerated mock type for the Provider type @@ -247,12 +245,3 @@ func (_m *MockProvider) SupportsCrossSigning() (bool, error) { return r0, r1 } - -// NewMockProvider creates a new instance of MockProvider. It also registers a cleanup function to assert the mocks expectations. -func NewMockProvider(t testing.TB) *MockProvider { - mock := &MockProvider{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/connect/ca/provider.go b/agent/connect/ca/provider.go index 6d585490fad6a..b4b4c3d257422 100644 --- a/agent/connect/ca/provider.go +++ b/agent/connect/ca/provider.go @@ -5,7 +5,7 @@ import ( "errors" ) -//go:generate mockery --name Provider --inpackage +//go:generate mockery -name Provider -inpkg // ErrRateLimited is a sentinel error value Providers may return from any method // to indicate that the operation can't complete due to a temporary rate limit. diff --git a/agent/connect/ca/provider_aws.go b/agent/connect/ca/provider_aws.go index cef0c7ddbea1d..25786ab409ac4 100644 --- a/agent/connect/ca/provider_aws.go +++ b/agent/connect/ca/provider_aws.go @@ -18,7 +18,6 @@ import ( "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib" ) const ( @@ -364,15 +363,15 @@ func (a *AWSProvider) loadCACerts() error { if a.isPrimary { // Just use the cert as a root - a.rootPEM = lib.EnsureTrailingNewline(*output.Certificate) + a.rootPEM = EnsureTrailingNewline(*output.Certificate) } else { - a.intermediatePEM = lib.EnsureTrailingNewline(*output.Certificate) + a.intermediatePEM = EnsureTrailingNewline(*output.Certificate) // TODO(banks) support user-supplied CA being a Subordinate even in the // primary DC. For now this assumes there is only one cert in the chain if output.CertificateChain == nil { return fmt.Errorf("Subordinate CA %s returned no chain", a.arn) } - a.rootPEM = lib.EnsureTrailingNewline(*output.CertificateChain) + a.rootPEM = EnsureTrailingNewline(*output.CertificateChain) } return nil } @@ -490,7 +489,7 @@ func (a *AWSProvider) signCSR(csrPEM string, templateARN string, ttl time.Durati } if certOutput.Certificate != nil { - return true, lib.EnsureTrailingNewline(*certOutput.Certificate), nil + return true, EnsureTrailingNewline(*certOutput.Certificate), nil } return false, "", nil @@ -533,8 +532,8 @@ func (a *AWSProvider) SetIntermediate(intermediatePEM string, rootPEM string) er } // We successfully initialized, keep track of the root and intermediate certs. - a.rootPEM = lib.EnsureTrailingNewline(rootPEM) - a.intermediatePEM = lib.EnsureTrailingNewline(intermediatePEM) + a.rootPEM = EnsureTrailingNewline(rootPEM) + a.intermediatePEM = EnsureTrailingNewline(intermediatePEM) return nil } diff --git a/agent/connect/ca/provider_vault.go b/agent/connect/ca/provider_vault.go index 270d53a019fc1..5c0c76608e312 100644 --- a/agent/connect/ca/provider_vault.go +++ b/agent/connect/ca/provider_vault.go @@ -13,15 +13,14 @@ import ( "sync" "time" + "github.com/hashicorp/consul/lib/decode" + "github.com/hashicorp/consul/lib/retry" "github.com/hashicorp/go-hclog" vaultapi "github.com/hashicorp/vault/api" "github.com/mitchellh/mapstructure" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib" - "github.com/hashicorp/consul/lib/decode" - "github.com/hashicorp/consul/lib/retry" ) const ( @@ -507,7 +506,7 @@ func (v *VaultProvider) getCA(namespace, path string) (string, error) { return "", err } - root := lib.EnsureTrailingNewline(string(bytes)) + root := EnsureTrailingNewline(string(bytes)) if root == "" { return "", ErrBackendNotInitialized } @@ -536,7 +535,7 @@ func (v *VaultProvider) getCAChain(namespace, path string) (string, error) { return "", err } - root := lib.EnsureTrailingNewline(string(raw)) + root := EnsureTrailingNewline(string(raw)) return root, nil } @@ -601,7 +600,7 @@ func (v *VaultProvider) Sign(csr *x509.CertificateRequest) (string, error) { if !ok { return "", fmt.Errorf("certificate was not a string") } - return lib.EnsureTrailingNewline(cert), nil + return EnsureTrailingNewline(cert), nil } // SignIntermediate returns a signed CA certificate with a path length constraint @@ -638,7 +637,7 @@ func (v *VaultProvider) SignIntermediate(csr *x509.CertificateRequest) (string, return "", fmt.Errorf("signed intermediate result is not a string") } - return lib.EnsureTrailingNewline(intermediate), nil + return EnsureTrailingNewline(intermediate), nil } // CrossSignCA takes a CA certificate and cross-signs it to form a trust chain @@ -678,7 +677,7 @@ func (v *VaultProvider) CrossSignCA(cert *x509.Certificate) (string, error) { return "", fmt.Errorf("certificate was not a string") } - return lib.EnsureTrailingNewline(xcCert), nil + return EnsureTrailingNewline(xcCert), nil } // SupportsCrossSigning implements Provider diff --git a/agent/connect/csr.go b/agent/connect/csr.go index f699a58792989..cc01f991e9b7f 100644 --- a/agent/connect/csr.go +++ b/agent/connect/csr.go @@ -9,7 +9,6 @@ import ( "crypto/x509/pkix" "encoding/asn1" "encoding/pem" - "fmt" "net" "net/url" ) @@ -101,24 +100,3 @@ func CreateCAExtension() (pkix.Extension, error) { Value: bitstr, }, nil } - -// InvalidCSRError returns an error with the given fmt.Sprintf-formatted message -// indicating certificate signing failed because the user supplied an invalid CSR. -// -// See: IsInvalidCSRError. -func InvalidCSRError(format string, args ...interface{}) error { - return invalidCSRError{fmt.Sprintf(format, args...)} -} - -// IsInvalidCSRError returns whether the given error indicates that certificate -// signing failed because the user supplied an invalid CSR. -func IsInvalidCSRError(err error) bool { - _, ok := err.(invalidCSRError) - return ok -} - -type invalidCSRError struct { - s string -} - -func (e invalidCSRError) Error() string { return e.s } diff --git a/agent/connect/sni.go b/agent/connect/sni.go index 17fce7e27c45c..2df3e0d11f5ca 100644 --- a/agent/connect/sni.go +++ b/agent/connect/sni.go @@ -11,7 +11,6 @@ const ( internal = "internal" version = "v1" internalVersion = internal + "-" + version - external = "external" ) func UpstreamSNI(u *structs.Upstream, subset string, dc string, trustDomain string) string { @@ -22,7 +21,6 @@ func UpstreamSNI(u *structs.Upstream, subset string, dc string, trustDomain stri if u.DestinationType == structs.UpstreamDestTypePreparedQuery { return QuerySNI(u.DestinationName, dc, trustDomain) } - // TODO(peering): account for peer here? return ServiceSNI(u.DestinationName, subset, u.DestinationNamespace, u.DestinationPartition, dc, trustDomain) } @@ -65,21 +63,6 @@ func ServiceSNI(service string, subset string, namespace string, partition strin } } -func PeeredServiceSNI(service, namespace, partition, peerName, trustDomain string) string { - if peerName == "" { - panic("peer name is a requirement for this function and does not make sense without it") - } - if namespace == "" { - namespace = structs.IntentionDefaultNamespace - } - if partition == "" { - // TODO(partitions) Make default available in OSS as a constant for uses like this one - partition = "default" - } - - return dotJoin(service, namespace, partition, peerName, external, trustDomain) -} - func dotJoin(parts ...string) string { return strings.Join(parts, ".") } diff --git a/agent/connect/sni_test.go b/agent/connect/sni_test.go index 26fae1da723cb..0ead8b485a8bb 100644 --- a/agent/connect/sni_test.go +++ b/agent/connect/sni_test.go @@ -3,9 +3,8 @@ package connect import ( "testing" - "github.com/stretchr/testify/require" - "github.com/hashicorp/consul/agent/structs" + "github.com/stretchr/testify/require" ) const ( @@ -165,11 +164,6 @@ func TestServiceSNI(t *testing.T) { ServiceSNI("api", "canary", "neighbor", "part1", "foo", testTrustDomain2)) } -func TestPeeredServiceSNI(t *testing.T) { - require.Equal(t, "api.billing.default.webstuff.external."+testTrustDomainSuffix1, - PeeredServiceSNI("api", "billing", "", "webstuff", testTrustDomainSuffix1)) -} - func TestQuerySNI(t *testing.T) { require.Equal(t, "magicquery.default.foo.query."+testTrustDomain1, QuerySNI("magicquery", "foo", testTrustDomain1)) diff --git a/agent/connect/testing_ca.go b/agent/connect/testing_ca.go index 4fb47cdb91934..16ffb65361da8 100644 --- a/agent/connect/testing_ca.go +++ b/agent/connect/testing_ca.go @@ -23,7 +23,6 @@ import ( // // NOTE: this is duplicated in the api package as testClusterID const TestClusterID = "11111111-2222-3333-4444-555555555555" -const TestTrustDomain = TestClusterID + ".consul" // testCACounter is just an atomically incremented counter for creating // unique names for the CA certs. diff --git a/agent/connect_auth.go b/agent/connect_auth.go index 80fa6d42ea724..9bd8a46ebbdd0 100644 --- a/agent/connect_auth.go +++ b/agent/connect_auth.go @@ -3,7 +3,6 @@ package agent import ( "context" "fmt" - "net/http" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/cache" @@ -24,7 +23,7 @@ import ( // The ACL token and the auth request are provided and the auth decision (true // means authorized) and reason string are returned. // -// If the request input is invalid the error returned will be a BadRequest HTTPError, +// If the request input is invalid the error returned will be a BadRequestError, // if the token doesn't grant necessary access then an acl.ErrPermissionDenied // error is returned, otherwise error indicates an unexpected server failure. If // access is denied, no error is returned but the first return value is false. @@ -38,23 +37,23 @@ func (a *Agent) ConnectAuthorize(token string, } if req == nil { - return returnErr(HTTPError{StatusCode: http.StatusBadRequest, Reason: "Invalid request"}) + return returnErr(BadRequestError{"Invalid request"}) } // We need to have a target to check intentions if req.Target == "" { - return returnErr(HTTPError{StatusCode: http.StatusBadRequest, Reason: "Target service must be specified"}) + return returnErr(BadRequestError{"Target service must be specified"}) } // Parse the certificate URI from the client ID uri, err := connect.ParseCertURIFromString(req.ClientCertURI) if err != nil { - return returnErr(HTTPError{StatusCode: http.StatusBadRequest, Reason: "ClientCertURI not a valid Connect identifier"}) + return returnErr(BadRequestError{"ClientCertURI not a valid Connect identifier"}) } uriService, ok := uri.(*connect.SpiffeIDService) if !ok { - return returnErr(HTTPError{StatusCode: http.StatusBadRequest, Reason: "ClientCertURI not a valid Service identifier"}) + return returnErr(BadRequestError{"ClientCertURI not a valid Service identifier"}) } // We need to verify service:write permissions for the given token. diff --git a/agent/connect_ca_endpoint.go b/agent/connect_ca_endpoint.go index 2e78bc7d8948c..2c6a1dfabcb9d 100644 --- a/agent/connect_ca_endpoint.go +++ b/agent/connect_ca_endpoint.go @@ -20,7 +20,7 @@ func (s *HTTPHandlers) ConnectCARoots(resp http.ResponseWriter, req *http.Reques if pemParam := req.URL.Query().Get("pem"); pemParam != "" { val, err := strconv.ParseBool(pemParam) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "The 'pem' query parameter must be a boolean value"} + return nil, BadRequestError{Reason: "The 'pem' query parameter must be a boolean value"} } pemResponse = val } @@ -90,14 +90,15 @@ func (s *HTTPHandlers) ConnectCAConfigurationSet(req *http.Request) (interface{} s.parseDC(req, &args.Datacenter) s.parseToken(req, &args.Token) if err := decodeBody(req.Body, &args.Config); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{ + Reason: fmt.Sprintf("Request decode failed: %v", err), + } } var reply interface{} err := s.agent.RPC("ConnectCA.ConfigurationSet", &args, &reply) if err != nil && err.Error() == consul.ErrStateReadOnly.Error() { - return nil, HTTPError{ - StatusCode: http.StatusBadRequest, + return nil, BadRequestError{ Reason: "Provider State is read-only. It must be omitted" + " or identical to the current value", } diff --git a/agent/consul/acl.go b/agent/consul/acl.go index 8543b7f516347..2c42642238cd8 100644 --- a/agent/consul/acl.go +++ b/agent/consul/acl.go @@ -344,6 +344,8 @@ func (r *ACLResolver) Close() { } func (r *ACLResolver) fetchAndCacheIdentityFromToken(token string, cached *structs.IdentityCacheEntry) (structs.ACLIdentity, error) { + cacheID := tokenSecretCacheID(token) + req := structs.ACLTokenGetRequest{ Datacenter: r.backend.ACLDatacenter(), TokenID: token, @@ -358,20 +360,20 @@ func (r *ACLResolver) fetchAndCacheIdentityFromToken(token string, cached *struc err := r.backend.RPC("ACL.TokenRead", &req, &resp) if err == nil { if resp.Token == nil { - r.cache.RemoveIdentityWithSecretToken(token) + r.cache.PutIdentity(cacheID, nil) return nil, acl.ErrNotFound } else if resp.Token.Local && r.config.Datacenter != resp.SourceDatacenter { - r.cache.RemoveIdentityWithSecretToken(token) + r.cache.PutIdentity(cacheID, nil) return nil, acl.PermissionDeniedError{Cause: fmt.Sprintf("This is a local token in datacenter %q", resp.SourceDatacenter)} } else { - r.cache.PutIdentityWithSecretToken(token, resp.Token) + r.cache.PutIdentity(cacheID, resp.Token) return resp.Token, nil } } if acl.IsErrNotFound(err) { // Make sure to remove from the cache if it was deleted - r.cache.RemoveIdentityWithSecretToken(token) + r.cache.PutIdentity(cacheID, nil) return nil, acl.ErrNotFound } @@ -379,11 +381,11 @@ func (r *ACLResolver) fetchAndCacheIdentityFromToken(token string, cached *struc // some other RPC error if cached != nil && (r.config.ACLDownPolicy == "extend-cache" || r.config.ACLDownPolicy == "async-cache") { // extend the cache - r.cache.PutIdentityWithSecretToken(token, cached.Identity) + r.cache.PutIdentity(cacheID, cached.Identity) return cached.Identity, nil } - r.cache.RemoveIdentityWithSecretToken(token) + r.cache.PutIdentity(cacheID, nil) return nil, err } @@ -397,7 +399,7 @@ func (r *ACLResolver) resolveIdentityFromToken(token string) (structs.ACLIdentit } // Check the cache before making any RPC requests - cacheEntry := r.cache.GetIdentityWithSecretToken(token) + cacheEntry := r.cache.GetIdentity(tokenSecretCacheID(token)) if cacheEntry != nil && cacheEntry.Age() <= r.config.ACLTokenTTL { metrics.IncrCounter([]string{"acl", "token", "cache_hit"}, 1) return cacheEntry.Identity, nil @@ -547,7 +549,7 @@ func (r *ACLResolver) maybeHandleIdentityErrorDuringFetch(identity structs.ACLId if acl.IsErrNotFound(err) { // make sure to indicate that this identity is no longer valid within // the cache - r.cache.RemoveIdentityWithSecretToken(identity.SecretToken()) + r.cache.PutIdentity(tokenSecretCacheID(identity.SecretToken()), nil) // Do not touch the cache. Getting a top level ACL not found error // only indicates that the secret token used in the request @@ -558,7 +560,7 @@ func (r *ACLResolver) maybeHandleIdentityErrorDuringFetch(identity structs.ACLId if acl.IsErrPermissionDenied(err) { // invalidate our ID cache so that identity resolution will take place // again in the future - r.cache.RemoveIdentityWithSecretToken(identity.SecretToken()) + r.cache.RemoveIdentity(tokenSecretCacheID(identity.SecretToken())) // Do not remove from the cache for permission denied // what this does indicate is that our view of the token is out of date @@ -591,8 +593,8 @@ func (r *ACLResolver) resolvePoliciesForIdentity(identity structs.ACLIdentity) ( var ( policyIDs = identity.PolicyIDs() roleIDs = identity.RoleIDs() - serviceIdentities = structs.ACLServiceIdentities(identity.ServiceIdentityList()) - nodeIdentities = structs.ACLNodeIdentities(identity.NodeIdentityList()) + serviceIdentities = identity.ServiceIdentityList() + nodeIdentities = identity.NodeIdentityList() ) if len(policyIDs) == 0 && len(serviceIdentities) == 0 && len(roleIDs) == 0 && len(nodeIdentities) == 0 { @@ -617,8 +619,8 @@ func (r *ACLResolver) resolvePoliciesForIdentity(identity structs.ACLIdentity) ( // Now deduplicate any policies or service identities that occur more than once. policyIDs = dedupeStringSlice(policyIDs) - serviceIdentities = serviceIdentities.Deduplicate() - nodeIdentities = nodeIdentities.Deduplicate() + serviceIdentities = dedupeServiceIdentities(serviceIdentities) + nodeIdentities = dedupeNodeIdentities(nodeIdentities) // Generate synthetic policies for all service identities in effect. syntheticPolicies := r.synthesizePoliciesForServiceIdentities(serviceIdentities, identity.EnterpriseMetadata()) @@ -682,6 +684,72 @@ func (r plainACLResolver) ResolveTokenAndDefaultMeta( return r.resolver.ResolveTokenAndDefaultMeta(token, entMeta, authzContext) } +func dedupeServiceIdentities(in []*structs.ACLServiceIdentity) []*structs.ACLServiceIdentity { + // From: https://github.com/golang/go/wiki/SliceTricks#in-place-deduplicate-comparable + + if len(in) <= 1 { + return in + } + + sort.Slice(in, func(i, j int) bool { + return in[i].ServiceName < in[j].ServiceName + }) + + j := 0 + for i := 1; i < len(in); i++ { + if in[j].ServiceName == in[i].ServiceName { + // Prefer increasing scope. + if len(in[j].Datacenters) == 0 || len(in[i].Datacenters) == 0 { + in[j].Datacenters = nil + } else { + in[j].Datacenters = mergeStringSlice(in[j].Datacenters, in[i].Datacenters) + } + continue + } + j++ + in[j] = in[i] + } + + // Discard the skipped items. + for i := j + 1; i < len(in); i++ { + in[i] = nil + } + + return in[:j+1] +} + +func dedupeNodeIdentities(in []*structs.ACLNodeIdentity) []*structs.ACLNodeIdentity { + // From: https://github.com/golang/go/wiki/SliceTricks#in-place-deduplicate-comparable + + if len(in) <= 1 { + return in + } + + sort.Slice(in, func(i, j int) bool { + if in[i].NodeName < in[j].NodeName { + return true + } + + return in[i].Datacenter < in[j].Datacenter + }) + + j := 0 + for i := 1; i < len(in); i++ { + if in[j].NodeName == in[i].NodeName && in[j].Datacenter == in[i].Datacenter { + continue + } + j++ + in[j] = in[i] + } + + // Discard the skipped items. + for i := j + 1; i < len(in); i++ { + in[i] = nil + } + + return in[:j+1] +} + func mergeStringSlice(a, b []string) []string { out := make([]string, 0, len(a)+len(b)) out = append(out, a...) @@ -1106,21 +1174,7 @@ func (r *ACLResolver) ACLsEnabled() bool { return true } -// TODO(peering): fix all calls to use the new signature and rename it back -func (r *ACLResolver) ResolveTokenAndDefaultMeta( - token string, - entMeta *acl.EnterpriseMeta, - authzContext *acl.AuthorizerContext, -) (ACLResolveResult, error) { - return r.ResolveTokenAndDefaultMetaWithPeerName(token, entMeta, structs.DefaultPeerKeyword, authzContext) -} - -func (r *ACLResolver) ResolveTokenAndDefaultMetaWithPeerName( - token string, - entMeta *acl.EnterpriseMeta, - peerName string, - authzContext *acl.AuthorizerContext, -) (ACLResolveResult, error) { +func (r *ACLResolver) ResolveTokenAndDefaultMeta(token string, entMeta *acl.EnterpriseMeta, authzContext *acl.AuthorizerContext) (ACLResolveResult, error) { result, err := r.ResolveToken(token) if err != nil { return ACLResolveResult{}, err @@ -1132,19 +1186,9 @@ func (r *ACLResolver) ResolveTokenAndDefaultMetaWithPeerName( // Default the EnterpriseMeta based on the Tokens meta or actual defaults // in the case of unknown identity - switch { - case peerName == "" && result.ACLIdentity != nil: + if result.ACLIdentity != nil { entMeta.Merge(result.ACLIdentity.EnterpriseMetadata()) - case result.ACLIdentity != nil: - // We _do not_ normalize the enterprise meta from the token when a peer - // name was specified because namespaces across clusters are not - // equivalent. A local namespace is _never_ correct for a remote query. - entMeta.Merge( - structs.DefaultEnterpriseMetaInPartition( - result.ACLIdentity.EnterpriseMetadata().PartitionOrDefault(), - ), - ) - default: + } else { entMeta.Merge(structs.DefaultEnterpriseMetaInDefaultPartition()) } diff --git a/agent/consul/acl_authmethod.go b/agent/consul/acl_authmethod.go index f7826c7bd3387..34035e159ddbc 100644 --- a/agent/consul/acl_authmethod.go +++ b/agent/consul/acl_authmethod.go @@ -3,6 +3,9 @@ package consul import ( "fmt" + "github.com/hashicorp/go-bexpr" + + "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/authmethod" "github.com/hashicorp/consul/agent/structs" @@ -35,3 +38,100 @@ func (s *Server) loadAuthMethodValidator(idx uint64, method *structs.ACLAuthMeth return v, nil } + +type aclBindings struct { + roles []structs.ACLTokenRoleLink + serviceIdentities []*structs.ACLServiceIdentity + nodeIdentities []*structs.ACLNodeIdentity +} + +// evaluateRoleBindings evaluates all current binding rules associated with the +// given auth method against the verified data returned from the authentication +// process. +// +// A list of role links and service identities are returned. +func (s *Server) evaluateRoleBindings( + validator authmethod.Validator, + verifiedIdentity *authmethod.Identity, + methodMeta *acl.EnterpriseMeta, + targetMeta *acl.EnterpriseMeta, +) (*aclBindings, error) { + // Only fetch rules that are relevant for this method. + _, rules, err := s.fsm.State().ACLBindingRuleList(nil, validator.Name(), methodMeta) + if err != nil { + return nil, err + } else if len(rules) == 0 { + return nil, nil + } + + // Find all binding rules that match the provided fields. + var matchingRules []*structs.ACLBindingRule + for _, rule := range rules { + if doesSelectorMatch(rule.Selector, verifiedIdentity.SelectableFields) { + matchingRules = append(matchingRules, rule) + } + } + if len(matchingRules) == 0 { + return nil, nil + } + + // For all matching rules compute the attributes of a token. + var bindings aclBindings + for _, rule := range matchingRules { + bindName, valid, err := computeBindingRuleBindName(rule.BindType, rule.BindName, verifiedIdentity.ProjectedVars) + if err != nil { + return nil, fmt.Errorf("cannot compute %q bind name for bind target: %v", rule.BindType, err) + } else if !valid { + return nil, fmt.Errorf("computed %q bind name for bind target is invalid: %q", rule.BindType, bindName) + } + + switch rule.BindType { + case structs.BindingRuleBindTypeService: + bindings.serviceIdentities = append(bindings.serviceIdentities, &structs.ACLServiceIdentity{ + ServiceName: bindName, + }) + + case structs.BindingRuleBindTypeNode: + bindings.nodeIdentities = append(bindings.nodeIdentities, &structs.ACLNodeIdentity{ + NodeName: bindName, + Datacenter: s.config.Datacenter, + }) + + case structs.BindingRuleBindTypeRole: + _, role, err := s.fsm.State().ACLRoleGetByName(nil, bindName, targetMeta) + if err != nil { + return nil, err + } + + if role != nil { + bindings.roles = append(bindings.roles, structs.ACLTokenRoleLink{ + ID: role.ID, + }) + } + + default: + // skip unknown bind type; don't grant privileges + } + } + + return &bindings, nil +} + +// doesSelectorMatch checks that a single selector matches the provided vars. +func doesSelectorMatch(selector string, selectableVars interface{}) bool { + if selector == "" { + return true // catch-all + } + + eval, err := bexpr.CreateEvaluatorForType(selector, nil, selectableVars) + if err != nil { + return false // fails to match if selector is invalid + } + + result, err := eval.Evaluate(selectableVars) + if err != nil { + return false // fails to match if evaluation fails + } + + return result +} diff --git a/agent/consul/acl_authmethod_test.go b/agent/consul/acl_authmethod_test.go new file mode 100644 index 0000000000000..61fedf33eb239 --- /dev/null +++ b/agent/consul/acl_authmethod_test.go @@ -0,0 +1,46 @@ +package consul + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDoesSelectorMatch(t *testing.T) { + type matchable struct { + A string `bexpr:"a"` + C string `bexpr:"c"` + } + + for _, test := range []struct { + name string + selector string + details interface{} + ok bool + }{ + {"no fields", + "a==b", nil, false}, + {"1 term ok", + "a==b", &matchable{A: "b"}, true}, + {"1 term no field", + "a==b", &matchable{C: "d"}, false}, + {"1 term wrong value", + "a==b", &matchable{A: "z"}, false}, + {"2 terms ok", + "a==b and c==d", &matchable{A: "b", C: "d"}, true}, + {"2 terms one missing field", + "a==b and c==d", &matchable{A: "b"}, false}, + {"2 terms one wrong value", + "a==b and c==d", &matchable{A: "z", C: "d"}, false}, + /////////////////////////////// + {"no fields (no selectors)", + "", nil, true}, + {"1 term ok (no selectors)", + "", &matchable{A: "b"}, true}, + } { + t.Run(test.name, func(t *testing.T) { + ok := doesSelectorMatch(test.selector, test.details) + require.Equal(t, test.ok, ok) + }) + } +} diff --git a/agent/consul/acl_endpoint.go b/agent/consul/acl_endpoint.go index 69908c055e332..658f72a42638c 100644 --- a/agent/consul/acl_endpoint.go +++ b/agent/consul/acl_endpoint.go @@ -2,11 +2,13 @@ package consul import ( "context" + "encoding/json" "errors" "fmt" "io/ioutil" "os" "path/filepath" + "regexp" "time" "github.com/armon/go-metrics" @@ -17,11 +19,11 @@ import ( uuid "github.com/hashicorp/go-uuid" "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/auth" "github.com/hashicorp/consul/agent/consul/authmethod" "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/lib" + "github.com/hashicorp/consul/lib/template" ) const ( @@ -97,6 +99,17 @@ var ACLEndpointSummaries = []prometheus.SummaryDefinition{ }, } +// Regex for matching +var ( + validPolicyName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,128}$`) + validServiceIdentityName = regexp.MustCompile(`^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$`) + serviceIdentityNameMaxLength = 256 + validNodeIdentityName = regexp.MustCompile(`^[a-z0-9]([a-z0-9\-_]*[a-z0-9])?$`) + nodeIdentityNameMaxLength = 256 + validRoleName = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,256}$`) + validAuthMethod = regexp.MustCompile(`^[A-Za-z0-9\-_]{1,128}$`) +) + // ACL endpoint is used to manipulate ACLs type ACL struct { srv *Server @@ -459,26 +472,26 @@ func (a *ACL) TokenClone(args *structs.ACLTokenSetRequest, reply *structs.ACLTok return fmt.Errorf("Cannot clone a legacy ACL with this endpoint") } - clone := &structs.ACLToken{ - Policies: token.Policies, - Roles: token.Roles, - ServiceIdentities: token.ServiceIdentities, - NodeIdentities: token.NodeIdentities, - Local: token.Local, - Description: token.Description, - ExpirationTime: token.ExpirationTime, - EnterpriseMeta: args.ACLToken.EnterpriseMeta, + cloneReq := structs.ACLTokenSetRequest{ + Datacenter: args.Datacenter, + ACLToken: structs.ACLToken{ + Policies: token.Policies, + Roles: token.Roles, + ServiceIdentities: token.ServiceIdentities, + NodeIdentities: token.NodeIdentities, + Local: token.Local, + Description: token.Description, + ExpirationTime: token.ExpirationTime, + EnterpriseMeta: args.ACLToken.EnterpriseMeta, + }, + WriteRequest: args.WriteRequest, } if args.ACLToken.Description != "" { - clone.Description = args.ACLToken.Description + cloneReq.ACLToken.Description = args.ACLToken.Description } - updated, err := a.srv.aclTokenWriter().Create(clone, false) - if err == nil { - *reply = *updated - } - return err + return a.tokenSetInternal(&cloneReq, reply, false) } func (a *ACL) TokenSet(args *structs.ACLTokenSetRequest, reply *structs.ACLToken) error { @@ -511,21 +524,382 @@ func (a *ACL) TokenSet(args *structs.ACLTokenSetRequest, reply *structs.ACLToken return err } - var ( - updated *structs.ACLToken - err error - ) - writer := a.srv.aclTokenWriter() - if args.ACLToken.AccessorID == "" || args.Create { - updated, err = writer.Create(&args.ACLToken, false) + return a.tokenSetInternal(args, reply, false) +} + +func (a *ACL) tokenSetInternal(args *structs.ACLTokenSetRequest, reply *structs.ACLToken, fromLogin bool) error { + token := &args.ACLToken + + if !a.srv.LocalTokensEnabled() { + // local token operations + return fmt.Errorf("Cannot upsert tokens within this datacenter") + } else if !a.srv.InPrimaryDatacenter() && !token.Local { + return fmt.Errorf("Cannot upsert global tokens within this datacenter") + } + + state := a.srv.fsm.State() + + var accessorMatch *structs.ACLToken + var secretMatch *structs.ACLToken + var err error + + if token.AccessorID != "" { + _, accessorMatch, err = state.ACLTokenGetByAccessor(nil, token.AccessorID, nil) + if err != nil { + return fmt.Errorf("Failed acl token lookup by accessor: %v", err) + } + } + if token.SecretID != "" { + _, secretMatch, err = state.ACLTokenGetBySecret(nil, token.SecretID, nil) + if err != nil { + return fmt.Errorf("Failed acl token lookup by secret: %v", err) + } + } + + if token.AccessorID == "" || args.Create { + // Token Create + + // Generate the AccessorID if not specified + if token.AccessorID == "" { + token.AccessorID, err = lib.GenerateUUID(a.srv.checkTokenUUID) + if err != nil { + return err + } + } else if _, err := uuid.ParseUUID(token.AccessorID); err != nil { + return fmt.Errorf("Invalid Token: AccessorID is not a valid UUID") + } else if accessorMatch != nil { + return fmt.Errorf("Invalid Token: AccessorID is already in use") + } else if _, match, err := state.ACLTokenGetBySecret(nil, token.AccessorID, nil); err != nil || match != nil { + if err != nil { + return fmt.Errorf("Failed to lookup the acl token: %v", err) + } + return fmt.Errorf("Invalid Token: AccessorID is already in use") + } else if structs.ACLIDReserved(token.AccessorID) { + return fmt.Errorf("Invalid Token: UUIDs with the prefix %q are reserved", structs.ACLReservedPrefix) + } + + // Generate the SecretID if not specified + if token.SecretID == "" { + token.SecretID, err = lib.GenerateUUID(a.srv.checkTokenUUID) + if err != nil { + return err + } + } else if _, err := uuid.ParseUUID(token.SecretID); err != nil { + return fmt.Errorf("Invalid Token: SecretID is not a valid UUID") + } else if secretMatch != nil { + return fmt.Errorf("Invalid Token: SecretID is already in use") + } else if _, match, err := state.ACLTokenGetByAccessor(nil, token.SecretID, nil); err != nil || match != nil { + if err != nil { + return fmt.Errorf("Failed to lookup the acl token: %v", err) + } + return fmt.Errorf("Invalid Token: SecretID is already in use") + } else if structs.ACLIDReserved(token.SecretID) { + return fmt.Errorf("Invalid Token: UUIDs with the prefix %q are reserved", structs.ACLReservedPrefix) + } + + token.CreateTime = time.Now() + + if fromLogin { + if token.AuthMethod == "" { + return fmt.Errorf("AuthMethod field is required during Login") + } + } else { + if token.AuthMethod != "" { + return fmt.Errorf("AuthMethod field is disallowed outside of Login") + } + } + + // Ensure an ExpirationTTL is valid if provided. + if token.ExpirationTTL != 0 { + if token.ExpirationTTL < 0 { + return fmt.Errorf("Token Expiration TTL '%s' should be > 0", token.ExpirationTTL) + } + if token.HasExpirationTime() { + return fmt.Errorf("Token Expiration TTL and Expiration Time cannot both be set") + } + + token.ExpirationTime = timePointer(token.CreateTime.Add(token.ExpirationTTL)) + token.ExpirationTTL = 0 + } + + if token.HasExpirationTime() { + if token.CreateTime.After(*token.ExpirationTime) { + return fmt.Errorf("ExpirationTime cannot be before CreateTime") + } + + expiresIn := token.ExpirationTime.Sub(token.CreateTime) + if expiresIn > a.srv.config.ACLTokenMaxExpirationTTL { + return fmt.Errorf("ExpirationTime cannot be more than %s in the future (was %s)", + a.srv.config.ACLTokenMaxExpirationTTL, expiresIn) + } else if expiresIn < a.srv.config.ACLTokenMinExpirationTTL { + return fmt.Errorf("ExpirationTime cannot be less than %s in the future (was %s)", + a.srv.config.ACLTokenMinExpirationTTL, expiresIn) + } + } } else { - updated, err = writer.Update(&args.ACLToken) + // Token Update + if _, err := uuid.ParseUUID(token.AccessorID); err != nil { + return fmt.Errorf("AccessorID is not a valid UUID") + } + + // DEPRECATED (ACL-Legacy-Compat) - maybe get rid of this in the future + // and instead do a ParseUUID check. New tokens will not have + // secrets generated by users but rather they will always be UUIDs. + // However if users just continue the upgrade cycle they may still + // have tokens using secrets that are not UUIDS + // The RootAuthorizer checks that the SecretID is not "allow", "deny" + // or "manage" as a precaution against something accidentally using + // one of these root policies by setting the secret to it. + if acl.RootAuthorizer(token.SecretID) != nil { + return acl.PermissionDeniedError{Cause: "Cannot modify root ACL"} + } + + // Verify the token exists + if accessorMatch == nil || accessorMatch.IsExpired(time.Now()) { + return fmt.Errorf("Cannot find token %q", token.AccessorID) + } + if token.SecretID == "" { + token.SecretID = accessorMatch.SecretID + } else if accessorMatch.SecretID != token.SecretID { + return fmt.Errorf("Changing a tokens SecretID is not permitted") + } + + // Cannot toggle the "Global" mode + if token.Local != accessorMatch.Local { + return fmt.Errorf("cannot toggle local mode of %s", token.AccessorID) + } + + if token.AuthMethod == "" { + token.AuthMethod = accessorMatch.AuthMethod + } else if token.AuthMethod != accessorMatch.AuthMethod { + return fmt.Errorf("Cannot change AuthMethod of %s", token.AccessorID) + } + + if token.ExpirationTTL != 0 { + return fmt.Errorf("Cannot change expiration time of %s", token.AccessorID) + } + + if !token.HasExpirationTime() { + token.ExpirationTime = accessorMatch.ExpirationTime + } else if !accessorMatch.HasExpirationTime() { + return fmt.Errorf("Cannot change expiration time of %s", token.AccessorID) + } else if !token.ExpirationTime.Equal(*accessorMatch.ExpirationTime) { + return fmt.Errorf("Cannot change expiration time of %s", token.AccessorID) + } + + token.CreateTime = accessorMatch.CreateTime + } + + policyIDs := make(map[string]struct{}) + var policies []structs.ACLTokenPolicyLink + + // Validate all the policy names and convert them to policy IDs + for _, link := range token.Policies { + if link.ID == "" { + _, policy, err := state.ACLPolicyGetByName(nil, link.Name, &token.EnterpriseMeta) + if err != nil { + return fmt.Errorf("Error looking up policy for name %q: %v", link.Name, err) + } + if policy == nil { + return fmt.Errorf("No such ACL policy with name %q", link.Name) + } + link.ID = policy.ID + } else { + _, policy, err := state.ACLPolicyGetByID(nil, link.ID, &token.EnterpriseMeta) + if err != nil { + return fmt.Errorf("Error looking up policy for id %q: %v", link.ID, err) + } + + if policy == nil { + return fmt.Errorf("No such ACL policy with ID %q", link.ID) + } + } + + // Do not store the policy name within raft/memdb as the policy could be renamed in the future. + link.Name = "" + + // dedup policy links by id + if _, ok := policyIDs[link.ID]; !ok { + policies = append(policies, link) + policyIDs[link.ID] = struct{}{} + } } + token.Policies = policies + + roleIDs := make(map[string]struct{}) + var roles []structs.ACLTokenRoleLink + + // Validate all the role names and convert them to role IDs. + for _, link := range token.Roles { + if link.ID == "" { + _, role, err := state.ACLRoleGetByName(nil, link.Name, &token.EnterpriseMeta) + if err != nil { + return fmt.Errorf("Error looking up role for name %q: %v", link.Name, err) + } + if role == nil { + return fmt.Errorf("No such ACL role with name %q", link.Name) + } + link.ID = role.ID + } else { + _, role, err := state.ACLRoleGetByID(nil, link.ID, &token.EnterpriseMeta) + if err != nil { + return fmt.Errorf("Error looking up role for id %q: %v", link.ID, err) + } - if err == nil { - *reply = *updated + if role == nil { + return fmt.Errorf("No such ACL role with ID %q", link.ID) + } + } + + // Do not store the role name within raft/memdb as the role could be renamed in the future. + link.Name = "" + + // dedup role links by id + if _, ok := roleIDs[link.ID]; !ok { + roles = append(roles, link) + roleIDs[link.ID] = struct{}{} + } } - return err + token.Roles = roles + + for _, svcid := range token.ServiceIdentities { + if svcid.ServiceName == "" { + return fmt.Errorf("Service identity is missing the service name field on this token") + } + if token.Local && len(svcid.Datacenters) > 0 { + return fmt.Errorf("Service identity %q cannot specify a list of datacenters on a local token", svcid.ServiceName) + } + if !isValidServiceIdentityName(svcid.ServiceName) { + return fmt.Errorf("Service identity %q has an invalid name. Only alphanumeric characters, '-' and '_' are allowed", svcid.ServiceName) + } + } + token.ServiceIdentities = dedupeServiceIdentities(token.ServiceIdentities) + + for _, nodeid := range token.NodeIdentities { + if nodeid.NodeName == "" { + return fmt.Errorf("Node identity is missing the node name field on this token") + } + if nodeid.Datacenter == "" { + return fmt.Errorf("Node identity is missing the datacenter field on this token") + } + if !isValidNodeIdentityName(nodeid.NodeName) { + return fmt.Errorf("Node identity has an invalid name. Only alphanumeric characters, '-' and '_' are allowed") + } + } + token.NodeIdentities = dedupeNodeIdentities(token.NodeIdentities) + + if token.Rules != "" { + return fmt.Errorf("Rules cannot be specified for this token") + } + + if token.Type != "" { + return fmt.Errorf("Type cannot be specified for this token") + } + + token.SetHash(true) + + // validate the enterprise specific fields + if err = a.tokenUpsertValidateEnterprise(token, accessorMatch); err != nil { + return err + } + + req := &structs.ACLTokenBatchSetRequest{ + Tokens: structs.ACLTokens{token}, + CAS: false, + } + + if fromLogin { + // Logins may attempt to link to roles that do not exist. These + // may be persisted, but don't allow tokens to be created that + // have no privileges (i.e. role links that point nowhere). + req.AllowMissingLinks = true + req.ProhibitUnprivileged = true + } + + _, err = a.srv.raftApply(structs.ACLTokenSetRequestType, req) + if err != nil { + return fmt.Errorf("Failed to apply token write request: %v", err) + } + + // Purge the identity from the cache to prevent using the previous definition of the identity + a.srv.ACLResolver.cache.RemoveIdentity(tokenSecretCacheID(token.SecretID)) + + // Don't check expiration times here as it doesn't really matter. + if _, updatedToken, err := a.srv.fsm.State().ACLTokenGetByAccessor(nil, token.AccessorID, nil); err == nil && updatedToken != nil { + *reply = *updatedToken + } else { + return fmt.Errorf("Failed to retrieve the token after insertion") + } + + return nil +} + +func validateBindingRuleBindName(bindType, bindName string, availableFields []string) (bool, error) { + if bindType == "" || bindName == "" { + return false, nil + } + + fakeVarMap := make(map[string]string) + for _, v := range availableFields { + fakeVarMap[v] = "fake" + } + + _, valid, err := computeBindingRuleBindName(bindType, bindName, fakeVarMap) + if err != nil { + return false, err + } + return valid, nil +} + +// computeBindingRuleBindName processes the HIL for the provided bind type+name +// using the projected variables. +// +// - If the HIL is invalid ("", false, AN_ERROR) is returned. +// - If the computed name is not valid for the type ("INVALID_NAME", false, nil) is returned. +// - If the computed name is valid for the type ("VALID_NAME", true, nil) is returned. +func computeBindingRuleBindName(bindType, bindName string, projectedVars map[string]string) (string, bool, error) { + bindName, err := template.InterpolateHIL(bindName, projectedVars, true) + if err != nil { + return "", false, err + } + + valid := false + + switch bindType { + case structs.BindingRuleBindTypeService: + valid = isValidServiceIdentityName(bindName) + case structs.BindingRuleBindTypeNode: + valid = isValidNodeIdentityName(bindName) + case structs.BindingRuleBindTypeRole: + valid = validRoleName.MatchString(bindName) + + default: + return "", false, fmt.Errorf("unknown binding rule bind type: %s", bindType) + } + + return bindName, valid, nil +} + +// isValidServiceIdentityName returns true if the provided name can be used as +// an ACLServiceIdentity ServiceName. This is more restrictive than standard +// catalog registration, which basically takes the view that "everything is +// valid". +func isValidServiceIdentityName(name string) bool { + if len(name) < 1 || len(name) > serviceIdentityNameMaxLength { + return false + } + return validServiceIdentityName.MatchString(name) +} + +// isValidNodeIdentityName returns true if the provided name can be used as +// an ACLNodeIdentity NodeName. This is more restrictive than standard +// catalog registration, which basically takes the view that "everything is +// valid". +func isValidNodeIdentityName(name string) bool { + if len(name) < 1 || len(name) > nodeIdentityNameMaxLength { + return false + } + return validNodeIdentityName.MatchString(name) } func (a *ACL) TokenDelete(args *structs.ACLTokenDeleteRequest, reply *string) error { @@ -600,7 +974,7 @@ func (a *ACL) TokenDelete(args *structs.ACLTokenDeleteRequest, reply *string) er } // Purge the identity from the cache to prevent using the previous definition of the identity - a.srv.ACLResolver.cache.RemoveIdentityWithSecretToken(token.SecretID) + a.srv.ACLResolver.cache.RemoveIdentity(tokenSecretCacheID(token.SecretID)) if reply != nil { *reply = token.AccessorID @@ -844,7 +1218,7 @@ func (a *ACL) PolicySet(args *structs.ACLPolicySetRequest, reply *structs.ACLPol return fmt.Errorf("Invalid Policy: no Name is set") } - if !acl.IsValidPolicyName(policy.Name) { + if !validPolicyName.MatchString(policy.Name) { return fmt.Errorf("Invalid Policy: invalid Name. Only alphanumeric characters, '-' and '_' are allowed") } @@ -1230,7 +1604,7 @@ func (a *ACL) RoleSet(args *structs.ACLRoleSetRequest, reply *structs.ACLRole) e return fmt.Errorf("Invalid Role: no Name is set") } - if !acl.IsValidRoleName(role.Name) { + if !validRoleName.MatchString(role.Name) { return fmt.Errorf("Invalid Role: invalid Name. Only alphanumeric characters, '-' and '_' are allowed") } @@ -1307,11 +1681,11 @@ func (a *ACL) RoleSet(args *structs.ACLRoleSetRequest, reply *structs.ACLRole) e if svcid.ServiceName == "" { return fmt.Errorf("Service identity is missing the service name field on this role") } - if !acl.IsValidServiceIdentityName(svcid.ServiceName) { - return fmt.Errorf("Service identity %q has an invalid name. Only lowercase alphanumeric characters, '-' and '_' are allowed", svcid.ServiceName) + if !isValidServiceIdentityName(svcid.ServiceName) { + return fmt.Errorf("Service identity %q has an invalid name. Only alphanumeric characters, '-' and '_' are allowed", svcid.ServiceName) } } - role.ServiceIdentities = role.ServiceIdentities.Deduplicate() + role.ServiceIdentities = dedupeServiceIdentities(role.ServiceIdentities) for _, nodeid := range role.NodeIdentities { if nodeid.NodeName == "" { @@ -1320,11 +1694,11 @@ func (a *ACL) RoleSet(args *structs.ACLRoleSetRequest, reply *structs.ACLRole) e if nodeid.Datacenter == "" { return fmt.Errorf("Node identity is missing the datacenter field on this role") } - if !acl.IsValidNodeIdentityName(nodeid.NodeName) { - return fmt.Errorf("Node identity has an invalid name. Only lowercase alphanumeric characters, '-' and '_' are allowed") + if !isValidNodeIdentityName(nodeid.NodeName) { + return fmt.Errorf("Node identity has an invalid name. Only alphanumeric characters, '-' and '_' are allowed") } } - role.NodeIdentities = role.NodeIdentities.Deduplicate() + role.NodeIdentities = dedupeNodeIdentities(role.NodeIdentities) // calculate the hash for this role role.SetHash(true) @@ -1644,7 +2018,7 @@ func (a *ACL) BindingRuleSet(args *structs.ACLBindingRuleSetRequest, reply *stru return fmt.Errorf("Invalid Binding Rule: unknown BindType %q", rule.BindType) } - if valid, err := auth.IsValidBindName(rule.BindType, rule.BindName, blankID.ProjectedVarNames()); err != nil { + if valid, err := validateBindingRuleBindName(rule.BindType, rule.BindName, blankID.ProjectedVarNames()); err != nil { return fmt.Errorf("Invalid Binding Rule: invalid BindName: %v", err) } else if !valid { return fmt.Errorf("Invalid Binding Rule: invalid BindName") @@ -1793,7 +2167,7 @@ func (a *ACL) AuthMethodRead(args *structs.ACLAuthMethodGetRequest, reply *struc return errNotFound } - _ = a.srv.enterpriseAuthMethodTypeValidation(method.Type) + _ = a.enterpriseAuthMethodTypeValidation(method.Type) return nil }) } @@ -1833,11 +2207,11 @@ func (a *ACL) AuthMethodSet(args *structs.ACLAuthMethodSetRequest, reply *struct if method.Name == "" { return fmt.Errorf("Invalid Auth Method: no Name is set") } - if !acl.IsValidAuthMethodName(method.Name) { + if !validAuthMethod.MatchString(method.Name) { return fmt.Errorf("Invalid Auth Method: invalid Name. Only alphanumeric characters, '-' and '_' are allowed") } - if err := a.srv.enterpriseAuthMethodTypeValidation(method.Type); err != nil { + if err := a.enterpriseAuthMethodTypeValidation(method.Type); err != nil { return err } @@ -1947,7 +2321,7 @@ func (a *ACL) AuthMethodDelete(args *structs.ACLAuthMethodDeleteRequest, reply * return nil } - if err := a.srv.enterpriseAuthMethodTypeValidation(method.Type); err != nil { + if err := a.enterpriseAuthMethodTypeValidation(method.Type); err != nil { return err } @@ -2003,7 +2377,7 @@ func (a *ACL) AuthMethodList(args *structs.ACLAuthMethodListRequest, reply *stru var stubs structs.ACLAuthMethodListStubs for _, method := range methods { - _ = a.srv.enterpriseAuthMethodTypeValidation(method.Type) + _ = a.enterpriseAuthMethodTypeValidation(method.Type) stubs = append(stubs, method.Stub()) } @@ -2039,28 +2413,132 @@ func (a *ACL) Login(args *structs.ACLLoginRequest, reply *structs.ACLToken) erro defer metrics.MeasureSince([]string{"acl", "login"}, time.Now()) - authMethod, validator, err := a.srv.loadAuthMethod(args.Auth.AuthMethod, &args.Auth.EnterpriseMeta) + auth := args.Auth + + // 1. take args.Data.AuthMethod to get an AuthMethod Validator + idx, method, err := a.srv.fsm.State().ACLAuthMethodGetByName(nil, auth.AuthMethod, &auth.EnterpriseMeta) + if err != nil { + return err + } else if method == nil { + return fmt.Errorf("%w: auth method %q not found", acl.ErrNotFound, auth.AuthMethod) + } + + if err := a.enterpriseAuthMethodTypeValidation(method.Type); err != nil { + return err + } + + validator, err := a.srv.loadAuthMethodValidator(idx, method) + if err != nil { + return err + } + + // 2. Send args.Data.BearerToken to method validator and get back a fields map + verifiedIdentity, err := validator.ValidateLogin(context.Background(), auth.BearerToken) if err != nil { return err } - verifiedIdentity, err := validator.ValidateLogin(context.Background(), args.Auth.BearerToken) + return a.tokenSetFromAuthMethod( + method, + &auth.EnterpriseMeta, + "token created via login", + auth.Meta, + validator, + verifiedIdentity, + &structs.ACLTokenSetRequest{ + Datacenter: args.Datacenter, + WriteRequest: args.WriteRequest, + }, + reply, + ) +} + +func (a *ACL) tokenSetFromAuthMethod( + method *structs.ACLAuthMethod, + entMeta *acl.EnterpriseMeta, + tokenDescriptionPrefix string, + tokenMetadata map[string]string, + validator authmethod.Validator, + verifiedIdentity *authmethod.Identity, + createReq *structs.ACLTokenSetRequest, // this should be prepopulated with datacenter+writerequest + reply *structs.ACLToken, +) error { + // This always will return a valid pointer + targetMeta, err := computeTargetEnterpriseMeta(method, verifiedIdentity) if err != nil { return err } - description, err := auth.BuildTokenDescription("token created via login", args.Auth.Meta) + // 3. send map through role bindings + bindings, err := a.srv.evaluateRoleBindings(validator, verifiedIdentity, entMeta, targetMeta) if err != nil { return err } - token, err := a.srv.aclLogin().TokenForVerifiedIdentity(verifiedIdentity, authMethod, description) - if err == nil { - *reply = *token + // We try to prevent the creation of a useless token without taking a trip + // through the state store if we can. + if bindings == nil || (len(bindings.serviceIdentities) == 0 && len(bindings.nodeIdentities) == 0 && len(bindings.roles) == 0) { + return acl.ErrPermissionDenied } + + // TODO(sso): add a CapturedField to ACLAuthMethod that would pluck fields from the returned identity and stuff into `auth.Meta`. + + description := tokenDescriptionPrefix + loginMeta, err := encodeLoginMeta(tokenMetadata) + if err != nil { + return err + } + if loginMeta != "" { + description += ": " + loginMeta + } + + // 4. create token + createReq.ACLToken = structs.ACLToken{ + Description: description, + Local: true, + AuthMethod: method.Name, + ServiceIdentities: bindings.serviceIdentities, + NodeIdentities: bindings.nodeIdentities, + Roles: bindings.roles, + ExpirationTTL: method.MaxTokenTTL, + EnterpriseMeta: *targetMeta, + } + + if method.TokenLocality == "global" { + if !a.srv.InPrimaryDatacenter() { + return errors.New("creating global tokens via auth methods is only permitted in the primary datacenter") + } + createReq.ACLToken.Local = false + } + + createReq.ACLToken.ACLAuthMethodEnterpriseMeta.FillWithEnterpriseMeta(entMeta) + + // 5. return token information like a TokenCreate would + err = a.tokenSetInternal(createReq, reply, true) + + // If we were in a slight race with a role delete operation then we may + // still end up failing to insert an unprivileged token in the state + // machine instead. Return the same error as earlier so it doesn't + // actually matter which one prevents the insertion. + if err != nil && err.Error() == state.ErrTokenHasNoPrivileges.Error() { + return acl.ErrPermissionDenied + } + return err } +func encodeLoginMeta(meta map[string]string) (string, error) { + if len(meta) == 0 { + return "", nil + } + + d, err := json.Marshal(meta) + if err != nil { + return "", err + } + return string(d), nil +} + func (a *ACL) Logout(args *structs.ACLLogoutRequest, reply *bool) error { if err := a.aclPreCheck(); err != nil { return err @@ -2080,18 +2558,39 @@ func (a *ACL) Logout(args *structs.ACLLogoutRequest, reply *bool) error { defer metrics.MeasureSince([]string{"acl", "logout"}, time.Now()) - // No need to check expiration time because it's being deleted. - err := a.srv.aclTokenWriter().Delete(args.Token, true) - switch { - case errors.Is(err, auth.ErrCannotWriteGlobalToken): - // Writes to global tokens must be forwarded to the primary DC. + _, token, err := a.srv.fsm.State().ACLTokenGetBySecret(nil, args.Token, nil) + if err != nil { + return err + + } else if token == nil { + return acl.ErrNotFound + + } else if token.AuthMethod == "" { + // Can't "logout" of a token that wasn't a result of login. + return acl.ErrPermissionDenied + + } else if !a.srv.InPrimaryDatacenter() && !token.Local { + // global token writes must be forwarded to the primary DC args.Datacenter = a.srv.config.PrimaryDatacenter return a.srv.forwardDC("ACL.Logout", a.srv.config.PrimaryDatacenter, args, reply) - case err != nil: - return err } + // No need to check expiration time because it's being deleted. + + req := &structs.ACLTokenBatchDeleteRequest{ + TokenIDs: []string{token.AccessorID}, + } + + _, err = a.srv.raftApply(structs.ACLTokenDeleteRequestType, req) + if err != nil { + return fmt.Errorf("Failed to apply token delete request: %v", err) + } + + // Purge the identity from the cache to prevent using the previous definition of the identity + a.srv.ACLResolver.cache.RemoveIdentity(tokenSecretCacheID(token.SecretID)) + *reply = true + return nil } diff --git a/agent/consul/acl_endpoint_oss.go b/agent/consul/acl_endpoint_oss.go index da2890fde0d2b..e218826a6d38d 100644 --- a/agent/consul/acl_endpoint_oss.go +++ b/agent/consul/acl_endpoint_oss.go @@ -27,10 +27,21 @@ func (a *ACL) roleUpsertValidateEnterprise(role *structs.ACLRole, existing *stru return state.ACLRoleUpsertValidateEnterprise(role, existing) } +func (a *ACL) enterpriseAuthMethodTypeValidation(authMethodType string) error { + return nil +} + func enterpriseAuthMethodValidation(method *structs.ACLAuthMethod, validator authmethod.Validator) error { return nil } +func computeTargetEnterpriseMeta( + method *structs.ACLAuthMethod, + verifiedIdentity *authmethod.Identity, +) (*acl.EnterpriseMeta, error) { + return &acl.EnterpriseMeta{}, nil +} + func getTokenNamespaceDefaults(ws memdb.WatchSet, state *state.Store, entMeta *acl.EnterpriseMeta) ([]string, []string, error) { return nil, nil, nil } diff --git a/agent/consul/acl_endpoint_test.go b/agent/consul/acl_endpoint_test.go index 09a752f434867..1ceb3a0a2d221 100644 --- a/agent/consul/acl_endpoint_test.go +++ b/agent/consul/acl_endpoint_test.go @@ -478,7 +478,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { }, false) waitForLeaderEstablishment(t, srv) - a := ACL{srv: srv} + acl := ACL{srv: srv} var tokenID string @@ -501,7 +501,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) require.NoError(t, err) // Get the token directly to validate that it exists @@ -532,7 +532,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) require.NoError(t, err) // Get the token directly to validate that it exists @@ -572,7 +572,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err = a.TokenSet(&req, &resp) + err = acl.TokenSet(&req, &resp) require.NoError(t, err) // Delete both policies to ensure that we skip resolving ID->Name @@ -618,7 +618,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err = a.TokenSet(&req, &resp) + err = acl.TokenSet(&req, &resp) require.NoError(t, err) // Delete both roles to ensure that we skip resolving ID->Name @@ -651,8 +651,8 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) - testutil.RequireErrorContains(t, err, "AuthMethod field is disallowed outside of login") + err := acl.TokenSet(&req, &resp) + testutil.RequireErrorContains(t, err, "AuthMethod field is disallowed outside of Login") }) t.Run("Update auth method linked token and try to change auth method", func(t *testing.T) { @@ -767,12 +767,12 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) testutil.RequireErrorContains(t, err, "Service identity is missing the service name field") }) t.Run("Create it with invalid service identity (too large)", func(t *testing.T) { - long := strings.Repeat("x", acl.ServiceIdentityNameMaxLength+1) + long := strings.Repeat("x", serviceIdentityNameMaxLength+1) req := structs.ACLTokenSetRequest{ Datacenter: "dc1", ACLToken: structs.ACLToken{ @@ -788,7 +788,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) require.NotNil(t, err) }) @@ -834,7 +834,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) if test.ok { require.NoError(t, err) @@ -867,7 +867,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) require.NoError(t, err) // Get the token directly to validate that it exists @@ -901,7 +901,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) require.NoError(t, err) // Get the token directly to validate that it exists @@ -931,7 +931,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) testutil.RequireErrorContains(t, err, "cannot specify a list of datacenters on a local token") }) @@ -959,7 +959,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) if test.errString != "" { testutil.RequireErrorContains(t, err, test.errString) } else { @@ -981,7 +981,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) if test.errString != "" { testutil.RequireErrorContains(t, err, test.errStringTTL) } else { @@ -1005,7 +1005,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) testutil.RequireErrorContains(t, err, "Expiration TTL and Expiration Time cannot both be set") }) @@ -1023,7 +1023,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) require.NoError(t, err) // Get the token directly to validate that it exists @@ -1058,7 +1058,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) require.NoError(t, err) // Get the token directly to validate that it exists @@ -1090,7 +1090,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) testutil.RequireErrorContains(t, err, "Cannot change expiration time") }) @@ -1108,7 +1108,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) require.NoError(t, err) // Get the token directly to validate that it exists @@ -1136,7 +1136,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) require.NoError(t, err) // Get the token directly to validate that it exists @@ -1172,7 +1172,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err = a.TokenSet(&req, &resp) + err = acl.TokenSet(&req, &resp) testutil.RequireErrorContains(t, err, "Cannot find token") }) @@ -1191,7 +1191,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) testutil.RequireErrorContains(t, err, "Node identity is missing the node name field on this token") }) @@ -1211,7 +1211,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) testutil.RequireErrorContains(t, err, "Node identity has an invalid name.") }) t.Run("invalid node identity - no datacenter", func(t *testing.T) { @@ -1229,7 +1229,7 @@ func TestACLEndpoint_TokenSet(t *testing.T) { resp := structs.ACLToken{} - err := a.TokenSet(&req, &resp) + err := acl.TokenSet(&req, &resp) testutil.RequireErrorContains(t, err, "Node identity is missing the datacenter field on this token") }) } @@ -2389,7 +2389,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { _, srv, codec := testACLServerWithConfig(t, nil, false) waitForLeaderEstablishment(t, srv) - a := ACL{srv: srv} + acl := ACL{srv: srv} var roleID string testPolicy1, err := upsertTestPolicy(codec, TestDefaultInitialManagementToken, "dc1") @@ -2419,7 +2419,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { } resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) require.NoError(t, err) require.NotNil(t, resp.ID) @@ -2457,7 +2457,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { } resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) require.NoError(t, err) require.NotNil(t, resp.ID) @@ -2498,7 +2498,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { } resp := structs.ACLRole{} - err = a.RoleSet(&req, &resp) + err = acl.RoleSet(&req, &resp) require.NoError(t, err) require.NotNil(t, resp.ID) @@ -2540,12 +2540,12 @@ func TestACLEndpoint_RoleSet(t *testing.T) { } resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) testutil.RequireErrorContains(t, err, "Service identity is missing the service name field") }) t.Run("Create it with invalid service identity (too large)", func(t *testing.T) { - long := strings.Repeat("x", acl.ServiceIdentityNameMaxLength+1) + long := strings.Repeat("x", serviceIdentityNameMaxLength+1) req := structs.ACLRoleSetRequest{ Datacenter: "dc1", Role: structs.ACLRole{ @@ -2559,7 +2559,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { } resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) require.NotNil(t, err) }) @@ -2604,7 +2604,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) if test.ok { require.NoError(t, err) @@ -2635,7 +2635,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) require.NoError(t, err) // Get the role directly to validate that it exists @@ -2667,7 +2667,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) require.NoError(t, err) // Get the role directly to validate that it exists @@ -2696,7 +2696,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) testutil.RequireErrorContains(t, err, "Node identity is missing the node name field on this role") }) @@ -2717,7 +2717,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) testutil.RequireErrorContains(t, err, "Node identity has an invalid name.") }) t.Run("invalid node identity - no datacenter", func(t *testing.T) { @@ -2736,7 +2736,7 @@ func TestACLEndpoint_RoleSet(t *testing.T) { resp := structs.ACLRole{} - err := a.RoleSet(&req, &resp) + err := acl.RoleSet(&req, &resp) testutil.RequireErrorContains(t, err, "Node identity is missing the datacenter field on this role") }) } @@ -5314,6 +5314,106 @@ func gatherIDs(t *testing.T, v interface{}) []string { return out } +func TestValidateBindingRuleBindName(t *testing.T) { + t.Parallel() + + type testcase struct { + name string + bindType string + bindName string + fields string + valid bool // valid HIL, invalid contents + err bool // invalid HIL + } + + for _, test := range []testcase{ + {"no bind type", + "", "", "", false, false}, + {"bad bind type", + "invalid", "blah", "", false, true}, + // valid HIL, invalid name + {"empty", + "both", "", "", false, false}, + {"just end", + "both", "}", "", false, false}, + {"var without start", + "both", " item }", "item", false, false}, + {"two vars missing second start", + "both", "before-${ item }after--more }", "item,more", false, false}, + // names for the two types are validated differently + {"@ is disallowed", + "both", "bad@name", "", false, false}, + {"leading dash", + "role", "-name", "", true, false}, + {"leading dash", + "service", "-name", "", false, false}, + {"trailing dash", + "role", "name-", "", true, false}, + {"trailing dash", + "service", "name-", "", false, false}, + {"inner dash", + "both", "name-end", "", true, false}, + {"upper case", + "role", "NAME", "", true, false}, + {"upper case", + "service", "NAME", "", false, false}, + // valid HIL, valid name + {"no vars", + "both", "nothing", "", true, false}, + {"just var", + "both", "${item}", "item", true, false}, + {"var in middle", + "both", "before-${item}after", "item", true, false}, + {"two vars", + "both", "before-${item}after-${more}", "item,more", true, false}, + // bad + {"no bind name", + "both", "", "", false, false}, + {"just start", + "both", "${", "", false, true}, + {"backwards", + "both", "}${", "", false, true}, + {"no varname", + "both", "${}", "", false, true}, + {"missing map key", + "both", "${item}", "", false, true}, + {"var without end", + "both", "${ item ", "item", false, true}, + {"two vars missing first end", + "both", "before-${ item after-${ more }", "item,more", false, true}, + } { + var cases []testcase + if test.bindType == "both" { + test1 := test + test1.bindType = "role" + test2 := test + test2.bindType = "service" + cases = []testcase{test1, test2} + } else { + cases = []testcase{test} + } + + for _, test := range cases { + test := test + t.Run(test.bindType+"--"+test.name, func(t *testing.T) { + t.Parallel() + valid, err := validateBindingRuleBindName( + test.bindType, + test.bindName, + strings.Split(test.fields, ","), + ) + if test.err { + require.NotNil(t, err) + require.False(t, valid) + } else { + require.NoError(t, err) + require.Equal(t, test.valid, valid) + } + }) + } + } +} + // upsertTestToken creates a token for testing purposes func upsertTestTokenInEntMeta(codec rpc.ClientCodec, initialManagementToken string, datacenter string, tokenModificationFn func(token *structs.ACLToken), entMeta *acl.EnterpriseMeta) (*structs.ACLToken, error) { diff --git a/agent/consul/acl_server.go b/agent/consul/acl_server.go index b6047752f8d2d..ba44b5606cf1f 100644 --- a/agent/consul/acl_server.go +++ b/agent/consul/acl_server.go @@ -1,12 +1,9 @@ package consul import ( - "fmt" "time" "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/auth" - "github.com/hashicorp/consul/agent/consul/authmethod" "github.com/hashicorp/consul/agent/structs" ) @@ -175,44 +172,3 @@ func (s *Server) filterACL(token string, subj interface{}) error { func (s *Server) filterACLWithAuthorizer(authorizer acl.Authorizer, subj interface{}) { filterACLWithAuthorizer(s.ACLResolver.logger, authorizer, subj) } - -func (s *Server) aclLogin() *auth.Login { - return auth.NewLogin(s.aclBinder(), s.aclTokenWriter()) -} - -func (s *Server) aclBinder() *auth.Binder { - return auth.NewBinder(s.fsm.State(), s.config.Datacenter) -} - -func (s *Server) aclTokenWriter() *auth.TokenWriter { - return auth.NewTokenWriter(auth.TokenWriterConfig{ - RaftApply: s.raftApply, - ACLCache: s.ACLResolver.cache, - Store: s.fsm.State(), - CheckUUID: s.checkTokenUUID, - MaxExpirationTTL: s.config.ACLTokenMaxExpirationTTL, - MinExpirationTTL: s.config.ACLTokenMinExpirationTTL, - PrimaryDatacenter: s.config.PrimaryDatacenter, - InPrimaryDatacenter: s.InPrimaryDatacenter(), - LocalTokensEnabled: s.LocalTokensEnabled(), - }) -} - -func (s *Server) loadAuthMethod(methodName string, entMeta *acl.EnterpriseMeta) (*structs.ACLAuthMethod, authmethod.Validator, error) { - idx, method, err := s.fsm.State().ACLAuthMethodGetByName(nil, methodName, entMeta) - if err != nil { - return nil, nil, err - } else if method == nil { - return nil, nil, fmt.Errorf("%w: auth method %q not found", acl.ErrNotFound, methodName) - } - - if err := s.enterpriseAuthMethodTypeValidation(method.Type); err != nil { - return nil, nil, err - } - - validator, err := s.loadAuthMethodValidator(idx, method) - if err != nil { - return nil, nil, err - } - return method, validator, nil -} diff --git a/agent/consul/acl_server_oss.go b/agent/consul/acl_server_oss.go index 6d281c225510b..a3ed18aea117e 100644 --- a/agent/consul/acl_server_oss.go +++ b/agent/consul/acl_server_oss.go @@ -19,7 +19,3 @@ func (s *Server) validateEnterpriseToken(identity structs.ACLIdentity) error { func (s *Server) aclBootstrapAllowed() error { return nil } - -func (*Server) enterpriseAuthMethodTypeValidation(authMethodType string) error { - return nil -} diff --git a/agent/consul/acl_test.go b/agent/consul/acl_test.go index 92c9bbc1a3a3d..49036ae4fc61b 100644 --- a/agent/consul/acl_test.go +++ b/agent/consul/acl_test.go @@ -768,15 +768,15 @@ func TestACLResolver_ResolveRootACL(t *testing.T) { } func TestACLResolver_DownPolicy(t *testing.T) { - requireIdentityCached := func(t *testing.T, r *ACLResolver, secretID string, present bool, msg string) { + requireIdentityCached := func(t *testing.T, r *ACLResolver, id string, present bool, msg string) { t.Helper() - cacheVal := r.cache.GetIdentityWithSecretToken(secretID) + cacheVal := r.cache.GetIdentity(id) + require.NotNil(t, cacheVal) if present { - require.NotNil(t, cacheVal, msg) require.NotNil(t, cacheVal.Identity, msg) } else { - require.Nil(t, cacheVal, msg) + require.Nil(t, cacheVal.Identity, msg) } } requirePolicyCached := func(t *testing.T, r *ACLResolver, policyID string, present bool, msg string) { @@ -816,7 +816,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { } require.Equal(t, expected, authz) - requireIdentityCached(t, r, "foo", false, "not present") + requireIdentityCached(t, r, tokenSecretCacheID("foo"), false, "not present") }) t.Run("Allow", func(t *testing.T) { @@ -844,7 +844,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { } require.Equal(t, expected, authz) - requireIdentityCached(t, r, "foo", false, "not present") + requireIdentityCached(t, r, tokenSecretCacheID("foo"), false, "not present") }) t.Run("Expired-Policy", func(t *testing.T) { @@ -935,7 +935,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { require.NotNil(t, authz) require.Equal(t, acl.Allow, authz.NodeWrite("foo", nil)) - requireIdentityCached(t, r, "found", true, "cached") + requireIdentityCached(t, r, tokenSecretCacheID("found"), true, "cached") authz2, err := r.ResolveToken("found") require.NoError(t, err) @@ -986,7 +986,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { require.NotNil(t, authz) require.Equal(t, acl.Allow, authz.NodeWrite("foo", nil)) - requireIdentityCached(t, r, "found-role", true, "still cached") + requireIdentityCached(t, r, tokenSecretCacheID("found-role"), true, "still cached") authz2, err := r.ResolveToken("found-role") require.NoError(t, err) @@ -1245,7 +1245,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { require.NotNil(t, authz) require.Equal(t, acl.Allow, authz.NodeWrite("foo", nil)) - requireIdentityCached(t, r, "found", true, "cached") + requireIdentityCached(t, r, tokenSecretCacheID("found"), true, "cached") // The identity should have been cached so this should still be valid authz2, err := r.ResolveToken("found") @@ -1261,7 +1261,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { assert.True(t, acl.IsErrNotFound(err)) }) - requireIdentityCached(t, r, "found", false, "no longer cached") + requireIdentityCached(t, r, tokenSecretCacheID("found"), false, "no longer cached") }) t.Run("PolicyResolve-TokenNotFound", func(t *testing.T) { @@ -1313,7 +1313,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { require.Equal(t, acl.Allow, authz.NodeWrite("foo", nil)) // Verify that the caches are setup properly. - requireIdentityCached(t, r, secretID, true, "cached") + requireIdentityCached(t, r, tokenSecretCacheID(secretID), true, "cached") requirePolicyCached(t, r, "node-wr", true, "cached") // from "found" token requirePolicyCached(t, r, "dc2-key-wr", true, "cached") // from "found" token @@ -1324,7 +1324,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { _, err = r.ResolveToken(secretID) require.True(t, acl.IsErrNotFound(err)) - requireIdentityCached(t, r, secretID, false, "identity not found cached") + requireIdentityCached(t, r, tokenSecretCacheID(secretID), false, "identity not found cached") requirePolicyCached(t, r, "node-wr", true, "still cached") require.Nil(t, r.cache.GetPolicy("dc2-key-wr"), "not stored at all") }) @@ -1373,7 +1373,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { require.Equal(t, acl.Allow, authz.NodeWrite("foo", nil)) // Verify that the caches are setup properly. - requireIdentityCached(t, r, secretID, true, "cached") + requireIdentityCached(t, r, tokenSecretCacheID(secretID), true, "cached") requirePolicyCached(t, r, "node-wr", true, "cached") // from "found" token requirePolicyCached(t, r, "dc2-key-wr", true, "cached") // from "found" token @@ -1384,7 +1384,7 @@ func TestACLResolver_DownPolicy(t *testing.T) { _, err = r.ResolveToken(secretID) require.True(t, acl.IsErrPermissionDenied(err)) - require.Nil(t, r.cache.GetIdentityWithSecretToken(secretID), "identity not stored at all") + require.Nil(t, r.cache.GetIdentity(tokenSecretCacheID(secretID)), "identity not stored at all") requirePolicyCached(t, r, "node-wr", true, "still cached") require.Nil(t, r.cache.GetPolicy("dc2-key-wr"), "not stored at all") }) @@ -1524,7 +1524,7 @@ func TestACLResolver_Client(t *testing.T) { // then the policy will be resolved but resolution will return ACL not found // resolution will stop with the not found error (even though we still have the // policies within the cache) - _, err = r.ResolveToken("a1a54629-5050-4d17-8a4e-560d2423f835") + authz, err = r.ResolveToken("a1a54629-5050-4d17-8a4e-560d2423f835") require.EqualError(t, err, acl.ErrNotFound.Error()) require.True(t, modified) @@ -3777,6 +3777,94 @@ func TestACL_unhandledFilterType(t *testing.T) { srv.filterACL(token, &structs.HealthCheck{}) } +func TestDedupeServiceIdentities(t *testing.T) { + srvid := func(name string, datacenters ...string) *structs.ACLServiceIdentity { + return &structs.ACLServiceIdentity{ + ServiceName: name, + Datacenters: datacenters, + } + } + + tests := []struct { + name string + in []*structs.ACLServiceIdentity + expect []*structs.ACLServiceIdentity + }{ + { + name: "empty", + in: nil, + expect: nil, + }, + { + name: "one", + in: []*structs.ACLServiceIdentity{ + srvid("foo"), + }, + expect: []*structs.ACLServiceIdentity{ + srvid("foo"), + }, + }, + { + name: "just names", + in: []*structs.ACLServiceIdentity{ + srvid("fooZ"), + srvid("fooA"), + srvid("fooY"), + srvid("fooB"), + }, + expect: []*structs.ACLServiceIdentity{ + srvid("fooA"), + srvid("fooB"), + srvid("fooY"), + srvid("fooZ"), + }, + }, + { + name: "just names with dupes", + in: []*structs.ACLServiceIdentity{ + srvid("fooZ"), + srvid("fooA"), + srvid("fooY"), + srvid("fooB"), + srvid("fooA"), + srvid("fooB"), + srvid("fooY"), + srvid("fooZ"), + }, + expect: []*structs.ACLServiceIdentity{ + srvid("fooA"), + srvid("fooB"), + srvid("fooY"), + srvid("fooZ"), + }, + }, + { + name: "names with dupes and datacenters", + in: []*structs.ACLServiceIdentity{ + srvid("fooZ", "dc2", "dc4"), + srvid("fooA"), + srvid("fooY", "dc1"), + srvid("fooB"), + srvid("fooA", "dc9", "dc8"), + srvid("fooB"), + srvid("fooY", "dc1"), + srvid("fooZ", "dc3", "dc4"), + }, + expect: []*structs.ACLServiceIdentity{ + srvid("fooA"), + srvid("fooB"), + srvid("fooY", "dc1"), + srvid("fooZ", "dc2", "dc3", "dc4"), + }, + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + got := dedupeServiceIdentities(test.in) + require.ElementsMatch(t, test.expect, got) + }) + } +} func TestACL_LocalToken(t *testing.T) { t.Run("local token in same dc", func(t *testing.T) { d := &ACLResolverTestDelegate{ @@ -3944,14 +4032,14 @@ func TestACLResolver_ResolveToken_UpdatesPurgeTheCache(t *testing.T) { err = msgpackrpc.CallWithCodec(codec, "ACL.TokenSet", &reqToken, &respToken) require.NoError(t, err) - testutil.RunStep(t, "first resolve", func(t *testing.T) { + runStep(t, "first resolve", func(t *testing.T) { authz, err := srv.ACLResolver.ResolveToken(token) require.NoError(t, err) require.NotNil(t, authz) require.Equal(t, acl.Allow, authz.KeyRead("foo", nil)) }) - testutil.RunStep(t, "update the policy and resolve again", func(t *testing.T) { + runStep(t, "update the policy and resolve again", func(t *testing.T) { reqPolicy := structs.ACLPolicySetRequest{ Datacenter: "dc1", Policy: structs.ACLPolicy{ @@ -3970,7 +4058,7 @@ func TestACLResolver_ResolveToken_UpdatesPurgeTheCache(t *testing.T) { require.Equal(t, acl.Deny, authz.KeyRead("foo", nil)) }) - testutil.RunStep(t, "delete the token", func(t *testing.T) { + runStep(t, "delete the token", func(t *testing.T) { req := structs.ACLTokenDeleteRequest{ Datacenter: "dc1", TokenID: respToken.AccessorID, diff --git a/agent/consul/acl_token_exp.go b/agent/consul/acl_token_exp.go index e373e0cdd6dce..fac2017e7ebe8 100644 --- a/agent/consul/acl_token_exp.go +++ b/agent/consul/acl_token_exp.go @@ -108,7 +108,7 @@ func (s *Server) reapExpiredACLTokens(local, global bool) (int, error) { // Purge the identities from the cache for _, secretID := range secretIDs { - s.ACLResolver.cache.RemoveIdentityWithSecretToken(secretID) + s.ACLResolver.cache.RemoveIdentity(tokenSecretCacheID(secretID)) } return len(req.TokenIDs), nil diff --git a/agent/consul/auth/binder.go b/agent/consul/auth/binder.go deleted file mode 100644 index f1eec01410a75..0000000000000 --- a/agent/consul/auth/binder.go +++ /dev/null @@ -1,189 +0,0 @@ -package auth - -import ( - "fmt" - - "github.com/hashicorp/go-bexpr" - "github.com/hashicorp/go-memdb" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/authmethod" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib/template" -) - -// Binder is responsible for collecting the ACL roles, service identities, node -// identities, and enterprise metadata to be assigned to a token generated as a -// result of "logging in" via an auth method. -// -// It does so by applying the auth method's configured binding rules and in the -// case of enterprise, namespace rules. -type Binder struct { - store BinderStateStore - datacenter string -} - -// NewBinder creates a Binder with the given state store and datacenter. -func NewBinder(store BinderStateStore, datacenter string) *Binder { - return &Binder{store, datacenter} -} - -// BinderStateStore is the subset of state store methods used by the binder. -type BinderStateStore interface { - ACLBindingRuleList(ws memdb.WatchSet, methodName string, entMeta *acl.EnterpriseMeta) (uint64, structs.ACLBindingRules, error) - ACLRoleGetByName(ws memdb.WatchSet, roleName string, entMeta *acl.EnterpriseMeta) (uint64, *structs.ACLRole, error) -} - -// Bindings contains the ACL roles, service identities, node identities and -// enterprise meta to be assigned to the created token. -type Bindings struct { - Roles []structs.ACLTokenRoleLink - ServiceIdentities []*structs.ACLServiceIdentity - NodeIdentities []*structs.ACLNodeIdentity - EnterpriseMeta acl.EnterpriseMeta -} - -// None indicates that the resulting bindings would not give the created token -// access to any resources. -func (b *Bindings) None() bool { - if b == nil { - return true - } - - return len(b.ServiceIdentities) == 0 && - len(b.NodeIdentities) == 0 && - len(b.Roles) == 0 -} - -// Bind collects the ACL roles, service identities, etc. to be assigned to the -// created token. -func (b *Binder) Bind(authMethod *structs.ACLAuthMethod, verifiedIdentity *authmethod.Identity) (*Bindings, error) { - var ( - bindings Bindings - err error - ) - if bindings.EnterpriseMeta, err = bindEnterpriseMeta(authMethod, verifiedIdentity); err != nil { - return nil, err - } - - // Load the auth method's binding rules. - _, rules, err := b.store.ACLBindingRuleList(nil, authMethod.Name, &authMethod.EnterpriseMeta) - if err != nil { - return nil, err - } - - // Find the rules with selectors that match the identity's fields. - matchingRules := make(structs.ACLBindingRules, 0, len(rules)) - for _, rule := range rules { - if doesSelectorMatch(rule.Selector, verifiedIdentity.SelectableFields) { - matchingRules = append(matchingRules, rule) - } - } - if len(matchingRules) == 0 { - return &bindings, nil - } - - // Compute role, service identity, or node identity names by interpolating - // the identity's projected variables into the rule BindName templates. - for _, rule := range matchingRules { - bindName, valid, err := computeBindName(rule.BindType, rule.BindName, verifiedIdentity.ProjectedVars) - switch { - case err != nil: - return nil, fmt.Errorf("cannot compute %q bind name for bind target: %w", rule.BindType, err) - case !valid: - return nil, fmt.Errorf("computed %q bind name for bind target is invalid: %q", rule.BindType, bindName) - } - - switch rule.BindType { - case structs.BindingRuleBindTypeService: - bindings.ServiceIdentities = append(bindings.ServiceIdentities, &structs.ACLServiceIdentity{ - ServiceName: bindName, - }) - - case structs.BindingRuleBindTypeNode: - bindings.NodeIdentities = append(bindings.NodeIdentities, &structs.ACLNodeIdentity{ - NodeName: bindName, - Datacenter: b.datacenter, - }) - - case structs.BindingRuleBindTypeRole: - _, role, err := b.store.ACLRoleGetByName(nil, bindName, &bindings.EnterpriseMeta) - if err != nil { - return nil, err - } - - if role != nil { - bindings.Roles = append(bindings.Roles, structs.ACLTokenRoleLink{ - ID: role.ID, - }) - } - } - } - - return &bindings, nil -} - -// IsValidBindName returns whether the given BindName template produces valid -// results when interpolating the auth method's available variables. -func IsValidBindName(bindType, bindName string, availableVariables []string) (bool, error) { - if bindType == "" || bindName == "" { - return false, nil - } - - fakeVarMap := make(map[string]string) - for _, v := range availableVariables { - fakeVarMap[v] = "fake" - } - - _, valid, err := computeBindName(bindType, bindName, fakeVarMap) - if err != nil { - return false, err - } - return valid, nil -} - -// computeBindName processes the HIL for the provided bind type+name using the -// projected variables. -// -// - If the HIL is invalid ("", false, AN_ERROR) is returned. -// - If the computed name is not valid for the type ("INVALID_NAME", false, nil) is returned. -// - If the computed name is valid for the type ("VALID_NAME", true, nil) is returned. -func computeBindName(bindType, bindName string, projectedVars map[string]string) (string, bool, error) { - bindName, err := template.InterpolateHIL(bindName, projectedVars, true) - if err != nil { - return "", false, err - } - - var valid bool - switch bindType { - case structs.BindingRuleBindTypeService: - valid = acl.IsValidServiceIdentityName(bindName) - case structs.BindingRuleBindTypeNode: - valid = acl.IsValidNodeIdentityName(bindName) - case structs.BindingRuleBindTypeRole: - valid = acl.IsValidRoleName(bindName) - default: - return "", false, fmt.Errorf("unknown binding rule bind type: %s", bindType) - } - - return bindName, valid, nil -} - -// doesSelectorMatch checks that a single selector matches the provided vars. -func doesSelectorMatch(selector string, selectableVars interface{}) bool { - if selector == "" { - return true // catch-all - } - - eval, err := bexpr.CreateEvaluatorForType(selector, nil, selectableVars) - if err != nil { - return false // fails to match if selector is invalid - } - - result, err := eval.Evaluate(selectableVars) - if err != nil { - return false // fails to match if evaluation fails - } - - return result -} diff --git a/agent/consul/auth/binder_oss.go b/agent/consul/auth/binder_oss.go deleted file mode 100644 index bbd34090ee5f9..0000000000000 --- a/agent/consul/auth/binder_oss.go +++ /dev/null @@ -1,14 +0,0 @@ -//go:build !consulent -// +build !consulent - -package auth - -import ( - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/authmethod" - "github.com/hashicorp/consul/agent/structs" -) - -func bindEnterpriseMeta(authMethod *structs.ACLAuthMethod, verifiedIdentity *authmethod.Identity) (acl.EnterpriseMeta, error) { - return acl.EnterpriseMeta{}, nil -} diff --git a/agent/consul/auth/binder_test.go b/agent/consul/auth/binder_test.go deleted file mode 100644 index 240131dfdb540..0000000000000 --- a/agent/consul/auth/binder_test.go +++ /dev/null @@ -1,372 +0,0 @@ -package auth - -import ( - "strings" - "testing" - "time" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/go-uuid" - - "github.com/hashicorp/consul/agent/consul/authmethod" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/structs" -) - -func TestBindings_None(t *testing.T) { - var b *Bindings - require.True(t, b.None()) - - b = &Bindings{} - require.True(t, b.None()) - - b = &Bindings{Roles: []structs.ACLTokenRoleLink{{ID: generateID(t)}}} - require.False(t, b.None()) - - b = &Bindings{ServiceIdentities: []*structs.ACLServiceIdentity{{ServiceName: "web"}}} - require.False(t, b.None()) - - b = &Bindings{NodeIdentities: []*structs.ACLNodeIdentity{{NodeName: "node-123"}}} - require.False(t, b.None()) -} - -func TestBinder_Roles_Success(t *testing.T) { - store := testStateStore(t) - binder := &Binder{store: store} - - authMethod := &structs.ACLAuthMethod{ - Name: "test-auth-method", - Type: "testing", - } - require.NoError(t, store.ACLAuthMethodSet(0, authMethod)) - - targetRole := &structs.ACLRole{ - ID: generateID(t), - Name: "vim-role", - } - require.NoError(t, store.ACLRoleSet(0, targetRole)) - - otherRole := &structs.ACLRole{ - ID: generateID(t), - Name: "frontend-engineers", - } - require.NoError(t, store.ACLRoleSet(0, otherRole)) - - bindingRules := structs.ACLBindingRules{ - { - ID: generateID(t), - Selector: "role==engineer", - BindType: structs.BindingRuleBindTypeRole, - BindName: "${editor}-role", - AuthMethod: authMethod.Name, - }, - { - ID: generateID(t), - Selector: "role==engineer", - BindType: structs.BindingRuleBindTypeRole, - BindName: "this-role-does-not-exist", - AuthMethod: authMethod.Name, - }, - { - ID: generateID(t), - Selector: "language==js", - BindType: structs.BindingRuleBindTypeRole, - BindName: otherRole.Name, - AuthMethod: authMethod.Name, - }, - } - require.NoError(t, store.ACLBindingRuleBatchSet(0, bindingRules)) - - result, err := binder.Bind(&structs.ACLAuthMethod{}, &authmethod.Identity{ - SelectableFields: map[string]string{ - "role": "engineer", - "language": "go", - }, - ProjectedVars: map[string]string{ - "editor": "vim", - }, - }) - require.NoError(t, err) - require.Equal(t, []structs.ACLTokenRoleLink{ - {ID: targetRole.ID}, - }, result.Roles) -} - -func TestBinder_Roles_NameValidation(t *testing.T) { - store := testStateStore(t) - binder := &Binder{store: store} - - authMethod := &structs.ACLAuthMethod{ - Name: "test-auth-method", - Type: "testing", - } - require.NoError(t, store.ACLAuthMethodSet(0, authMethod)) - - bindingRules := structs.ACLBindingRules{ - { - ID: generateID(t), - Selector: "", - BindType: structs.BindingRuleBindTypeRole, - BindName: "INVALID!", - AuthMethod: authMethod.Name, - }, - } - require.NoError(t, store.ACLBindingRuleBatchSet(0, bindingRules)) - - _, err := binder.Bind(&structs.ACLAuthMethod{}, &authmethod.Identity{}) - require.Error(t, err) - require.Contains(t, err.Error(), "bind name for bind target is invalid") -} - -func TestBinder_ServiceIdentities_Success(t *testing.T) { - store := testStateStore(t) - binder := &Binder{store: store} - - authMethod := &structs.ACLAuthMethod{ - Name: "test-auth-method", - Type: "testing", - } - require.NoError(t, store.ACLAuthMethodSet(0, authMethod)) - - bindingRules := structs.ACLBindingRules{ - { - ID: generateID(t), - Selector: "tier==web", - BindType: structs.BindingRuleBindTypeService, - BindName: "web-service-${name}", - AuthMethod: authMethod.Name, - }, - { - ID: generateID(t), - Selector: "tier==db", - BindType: structs.BindingRuleBindTypeService, - BindName: "database-${name}", - AuthMethod: authMethod.Name, - }, - } - require.NoError(t, store.ACLBindingRuleBatchSet(0, bindingRules)) - - result, err := binder.Bind(&structs.ACLAuthMethod{}, &authmethod.Identity{ - SelectableFields: map[string]string{ - "tier": "web", - }, - ProjectedVars: map[string]string{ - "name": "billing", - }, - }) - require.NoError(t, err) - require.Equal(t, []*structs.ACLServiceIdentity{ - {ServiceName: "web-service-billing"}, - }, result.ServiceIdentities) -} - -func TestBinder_ServiceIdentities_NameValidation(t *testing.T) { - store := testStateStore(t) - binder := &Binder{store: store} - - authMethod := &structs.ACLAuthMethod{ - Name: "test-auth-method", - Type: "testing", - } - require.NoError(t, store.ACLAuthMethodSet(0, authMethod)) - - bindingRules := structs.ACLBindingRules{ - { - ID: generateID(t), - Selector: "", - BindType: structs.BindingRuleBindTypeService, - BindName: "INVALID!", - AuthMethod: authMethod.Name, - }, - } - require.NoError(t, store.ACLBindingRuleBatchSet(0, bindingRules)) - - _, err := binder.Bind(&structs.ACLAuthMethod{}, &authmethod.Identity{}) - require.Error(t, err) - require.Contains(t, err.Error(), "bind name for bind target is invalid") -} - -func TestBinder_NodeIdentities_Success(t *testing.T) { - store := testStateStore(t) - binder := &Binder{store: store, datacenter: "dc1"} - - authMethod := &structs.ACLAuthMethod{ - Name: "test-auth-method", - Type: "testing", - } - require.NoError(t, store.ACLAuthMethodSet(0, authMethod)) - - bindingRules := structs.ACLBindingRules{ - { - ID: generateID(t), - Selector: "provider==gcp", - BindType: structs.BindingRuleBindTypeNode, - BindName: "gcp-${os}", - AuthMethod: authMethod.Name, - }, - { - ID: generateID(t), - Selector: "provider==aws", - BindType: structs.BindingRuleBindTypeNode, - BindName: "aws-${os}", - AuthMethod: authMethod.Name, - }, - } - require.NoError(t, store.ACLBindingRuleBatchSet(0, bindingRules)) - - result, err := binder.Bind(&structs.ACLAuthMethod{}, &authmethod.Identity{ - SelectableFields: map[string]string{ - "provider": "gcp", - }, - ProjectedVars: map[string]string{ - "os": "linux", - }, - }) - require.NoError(t, err) - require.Equal(t, []*structs.ACLNodeIdentity{ - {NodeName: "gcp-linux", Datacenter: "dc1"}, - }, result.NodeIdentities) -} - -func TestBinder_NodeIdentities_NameValidation(t *testing.T) { - store := testStateStore(t) - binder := &Binder{store: store} - - authMethod := &structs.ACLAuthMethod{ - Name: "test-auth-method", - Type: "testing", - } - require.NoError(t, store.ACLAuthMethodSet(0, authMethod)) - - bindingRules := structs.ACLBindingRules{ - { - ID: generateID(t), - Selector: "", - BindType: structs.BindingRuleBindTypeNode, - BindName: "INVALID!", - AuthMethod: authMethod.Name, - }, - } - require.NoError(t, store.ACLBindingRuleBatchSet(0, bindingRules)) - - _, err := binder.Bind(&structs.ACLAuthMethod{}, &authmethod.Identity{}) - require.Error(t, err) - require.Contains(t, err.Error(), "bind name for bind target is invalid") -} - -func Test_IsValidBindName(t *testing.T) { - type testcase struct { - name string - bindType string - bindName string - fields string - valid bool // valid HIL, invalid contents - err bool // invalid HIL - } - - for _, test := range []testcase{ - {"no bind type", - "", "", "", false, false}, - {"bad bind type", - "invalid", "blah", "", false, true}, - // valid HIL, invalid name - {"empty", - "both", "", "", false, false}, - {"just end", - "both", "}", "", false, false}, - {"var without start", - "both", " item }", "item", false, false}, - {"two vars missing second start", - "both", "before-${ item }after--more }", "item,more", false, false}, - // names for the two types are validated differently - {"@ is disallowed", - "both", "bad@name", "", false, false}, - {"leading dash", - "role", "-name", "", true, false}, - {"leading dash", - "service", "-name", "", false, false}, - {"trailing dash", - "role", "name-", "", true, false}, - {"trailing dash", - "service", "name-", "", false, false}, - {"inner dash", - "both", "name-end", "", true, false}, - {"upper case", - "role", "NAME", "", true, false}, - {"upper case", - "service", "NAME", "", false, false}, - // valid HIL, valid name - {"no vars", - "both", "nothing", "", true, false}, - {"just var", - "both", "${item}", "item", true, false}, - {"var in middle", - "both", "before-${item}after", "item", true, false}, - {"two vars", - "both", "before-${item}after-${more}", "item,more", true, false}, - // bad - {"no bind name", - "both", "", "", false, false}, - {"just start", - "both", "${", "", false, true}, - {"backwards", - "both", "}${", "", false, true}, - {"no varname", - "both", "${}", "", false, true}, - {"missing map key", - "both", "${item}", "", false, true}, - {"var without end", - "both", "${ item ", "item", false, true}, - {"two vars missing first end", - "both", "before-${ item after-${ more }", "item,more", false, true}, - } { - var cases []testcase - if test.bindType == "both" { - test1 := test - test1.bindType = "role" - test2 := test - test2.bindType = "service" - cases = []testcase{test1, test2} - } else { - cases = []testcase{test} - } - - for _, test := range cases { - test := test - t.Run(test.bindType+"--"+test.name, func(t *testing.T) { - t.Parallel() - valid, err := IsValidBindName( - test.bindType, - test.bindName, - strings.Split(test.fields, ","), - ) - if test.err { - require.NotNil(t, err) - require.False(t, valid) - } else { - require.NoError(t, err) - require.Equal(t, test.valid, valid) - } - }) - } - } -} - -func generateID(t *testing.T) string { - t.Helper() - - id, err := uuid.GenerateUUID() - require.NoError(t, err) - - return id -} - -func testStateStore(t *testing.T) *state.Store { - t.Helper() - - gc, err := state.NewTombstoneGC(time.Second, time.Millisecond) - require.NoError(t, err) - - return state.NewStateStore(gc) -} diff --git a/agent/consul/auth/login.go b/agent/consul/auth/login.go deleted file mode 100644 index 3848fb8c8c49a..0000000000000 --- a/agent/consul/auth/login.go +++ /dev/null @@ -1,77 +0,0 @@ -package auth - -import ( - "encoding/json" - "fmt" - "strings" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/authmethod" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/structs" -) - -// Login wraps the process of creating an ACLToken from the identity verified -// by an auth method. -type Login struct { - binder *Binder - writer *TokenWriter -} - -// NewLogin returns a new Login with the given binder and writer. -func NewLogin(binder *Binder, writer *TokenWriter) *Login { - return &Login{binder, writer} -} - -// TokenForVerifiedIdentity creates an ACLToken for the given identity verified -// by an auth method. -func (l *Login) TokenForVerifiedIdentity(identity *authmethod.Identity, authMethod *structs.ACLAuthMethod, description string) (*structs.ACLToken, error) { - bindings, err := l.binder.Bind(authMethod, identity) - switch { - case err != nil: - return nil, err - case bindings.None(): - // We try to prevent the creation of a useless token without taking a trip - // through Raft and the state store if we can. - return nil, acl.ErrPermissionDenied - } - - token := &structs.ACLToken{ - Description: description, - Local: authMethod.TokenLocality != "global", // TokenWriter prevents the creation of global tokens in secondary datacenters. - AuthMethod: authMethod.Name, - ExpirationTTL: authMethod.MaxTokenTTL, - ServiceIdentities: bindings.ServiceIdentities, - NodeIdentities: bindings.NodeIdentities, - Roles: bindings.Roles, - EnterpriseMeta: bindings.EnterpriseMeta, - } - token.ACLAuthMethodEnterpriseMeta.FillWithEnterpriseMeta(&authMethod.EnterpriseMeta) - - updated, err := l.writer.Create(token, true) - switch { - case err != nil && strings.Contains(err.Error(), state.ErrTokenHasNoPrivileges.Error()): - // If we were in a slight race with a role delete operation then we may - // still end up failing to insert an unprivileged token in the state - // machine instead. Return the same error as earlier so it doesn't - // actually matter which one prevents the insertion. - return nil, acl.ErrPermissionDenied - case err != nil: - return nil, err - } - return updated, nil -} - -// BuildTokenDescription builds a description for an ACLToken by encoding the -// given meta as JSON and applying the prefix. -func BuildTokenDescription(prefix string, meta map[string]string) (string, error) { - if len(meta) == 0 { - return prefix, nil - } - - d, err := json.Marshal(meta) - if err != nil { - return "", err - } - return fmt.Sprintf("%s: %s", prefix, d), nil -} diff --git a/agent/consul/auth/mock_ACLCache.go b/agent/consul/auth/mock_ACLCache.go deleted file mode 100644 index e8e5c68283b7f..0000000000000 --- a/agent/consul/auth/mock_ACLCache.go +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by mockery v2.12.0. DO NOT EDIT. - -package auth - -import ( - testing "testing" - - mock "github.com/stretchr/testify/mock" -) - -// MockACLCache is an autogenerated mock type for the ACLCache type -type MockACLCache struct { - mock.Mock -} - -// RemoveIdentityWithSecretToken provides a mock function with given fields: secretToken -func (_m *MockACLCache) RemoveIdentityWithSecretToken(secretToken string) { - _m.Called(secretToken) -} - -// NewMockACLCache creates a new instance of MockACLCache. It also registers the testing.TB interface on the mock and a cleanup function to assert the mocks expectations. -func NewMockACLCache(t testing.TB) *MockACLCache { - mock := &MockACLCache{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/consul/auth/token_writer.go b/agent/consul/auth/token_writer.go deleted file mode 100644 index ae59570454a02..0000000000000 --- a/agent/consul/auth/token_writer.go +++ /dev/null @@ -1,449 +0,0 @@ -package auth - -import ( - "errors" - "fmt" - "time" - - "github.com/hashicorp/go-memdb" - "github.com/hashicorp/go-uuid" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib" -) - -// ErrCannotWriteGlobalToken indicates that writing a token failed because -// the token is global and this is a non-primary datacenter. -var ErrCannotWriteGlobalToken = errors.New("Cannot upsert global tokens within this datacenter") - -// NewTokenWriter creates a new token writer. -func NewTokenWriter(cfg TokenWriterConfig) *TokenWriter { - return &TokenWriter{cfg} -} - -// TokenWriter encapsulates the logic of writing ACL tokens to the state store -// including validation, cache purging, etc. -type TokenWriter struct { - TokenWriterConfig -} - -type TokenWriterConfig struct { - RaftApply RaftApplyFn - ACLCache ACLCache - Store TokenWriterStore - CheckUUID lib.UUIDCheckFunc - - MaxExpirationTTL time.Duration - MinExpirationTTL time.Duration - - PrimaryDatacenter string - InPrimaryDatacenter bool - LocalTokensEnabled bool -} - -type RaftApplyFn func(structs.MessageType, interface{}) (interface{}, error) - -//go:generate mockery --name ACLCache --inpackage -type ACLCache interface { - RemoveIdentityWithSecretToken(secretToken string) -} - -type TokenWriterStore interface { - ACLTokenGetByAccessor(ws memdb.WatchSet, accessorID string, entMeta *acl.EnterpriseMeta) (uint64, *structs.ACLToken, error) - ACLTokenGetBySecret(ws memdb.WatchSet, secretID string, entMeta *acl.EnterpriseMeta) (uint64, *structs.ACLToken, error) - ACLRoleGetByID(ws memdb.WatchSet, id string, entMeta *acl.EnterpriseMeta) (uint64, *structs.ACLRole, error) - ACLRoleGetByName(ws memdb.WatchSet, name string, entMeta *acl.EnterpriseMeta) (uint64, *structs.ACLRole, error) - ACLPolicyGetByID(ws memdb.WatchSet, id string, entMeta *acl.EnterpriseMeta) (uint64, *structs.ACLPolicy, error) - ACLPolicyGetByName(ws memdb.WatchSet, name string, entMeta *acl.EnterpriseMeta) (uint64, *structs.ACLPolicy, error) - ACLTokenUpsertValidateEnterprise(token *structs.ACLToken, existing *structs.ACLToken) error -} - -// Create a new token. Setting fromLogin to true changes behavior slightly for -// tokens created by login (as opposed to set manually via the API). -func (w *TokenWriter) Create(token *structs.ACLToken, fromLogin bool) (*structs.ACLToken, error) { - if err := w.checkCanWriteToken(token); err != nil { - return nil, err - } - - if token.AccessorID == "" { - // Caller didn't provide an AccessorID, so generate one. - id, err := lib.GenerateUUID(w.CheckUUID) - if err != nil { - return nil, fmt.Errorf("Failed to generate AccessorID: %w", err) - } - token.AccessorID = id - } else { - // Check the AccessorID is valid and not already in-use. - if err := validateTokenID(token.AccessorID); err != nil { - return nil, fmt.Errorf("Invalid Token: AccessorID - %w", err) - } - if inUse, err := w.tokenIDInUse(token.AccessorID); err != nil { - return nil, fmt.Errorf("Failed to lookup ACL token: %w", err) - } else if inUse { - return nil, errors.New("Invalid Token: AccessorID is already in use") - } - } - - if token.SecretID == "" { - // Caller didn't provide a SecretID, so generate one. - id, err := lib.GenerateUUID(w.CheckUUID) - if err != nil { - return nil, fmt.Errorf("Failed to generate SecretID: %w", err) - } - token.SecretID = id - } else { - // Check the SecretID is valid and not already in-use. - if err := validateTokenID(token.SecretID); err != nil { - return nil, fmt.Errorf("Invalid Token: SecretID - %w", err) - } - if inUse, err := w.tokenIDInUse(token.SecretID); err != nil { - return nil, fmt.Errorf("Failed to lookup ACL token: %w", err) - } else if inUse { - return nil, errors.New("Invalid Token: SecretID is already in use") - } - } - - token.CreateTime = time.Now() - - // Ensure ExpirationTTL is valid if provided. - if token.ExpirationTTL < 0 { - return nil, fmt.Errorf("Token Expiration TTL '%s' should be > 0", token.ExpirationTTL) - } else if token.ExpirationTTL > 0 { - if token.HasExpirationTime() { - return nil, errors.New("Token Expiration TTL and Expiration Time cannot both be set") - } - - expirationTime := token.CreateTime.Add(token.ExpirationTTL) - token.ExpirationTime = &expirationTime - token.ExpirationTTL = 0 - } - - if token.HasExpirationTime() { - if token.ExpirationTime.Before(token.CreateTime) { - return nil, errors.New("ExpirationTime cannot be before CreateTime") - } - - expiresIn := token.ExpirationTime.Sub(token.CreateTime) - - if expiresIn > w.MaxExpirationTTL { - return nil, fmt.Errorf("ExpirationTime cannot be more than %s in the future (was %s)", - w.MaxExpirationTTL, expiresIn) - } - - if expiresIn < w.MinExpirationTTL { - return nil, fmt.Errorf("ExpirationTime cannot be less than %s in the future (was %s)", - w.MinExpirationTTL, expiresIn) - } - } - - if fromLogin { - if token.AuthMethod == "" { - return nil, errors.New("AuthMethod field is required during login") - } - } else { - if token.AuthMethod != "" { - return nil, errors.New("AuthMethod field is disallowed outside of login") - } - } - - return w.write(token, nil, fromLogin) -} - -// Update an existing token. -func (w *TokenWriter) Update(token *structs.ACLToken) (*structs.ACLToken, error) { - if err := w.checkCanWriteToken(token); err != nil { - return nil, err - } - - if _, err := uuid.ParseUUID(token.AccessorID); err != nil { - return nil, errors.New("AccessorID is not a valid UUID") - } - - // DEPRECATED (ACL-Legacy-Compat) - maybe get rid of this in the future - // and instead do a ParseUUID check. New tokens will not have - // secrets generated by users but rather they will always be UUIDs. - // However if users just continue the upgrade cycle they may still - // have tokens using secrets that are not UUIDS - // The RootAuthorizer checks that the SecretID is not "allow", "deny" - // or "manage" as a precaution against something accidentally using - // one of these root policies by setting the secret to it. - if acl.RootAuthorizer(token.SecretID) != nil { - return nil, acl.PermissionDeniedError{Cause: "Cannot modify root ACL"} - } - - _, match, err := w.Store.ACLTokenGetByAccessor(nil, token.AccessorID, nil) - switch { - case err != nil: - return nil, fmt.Errorf("Failed acl token lookup by accessor: %w", err) - case match == nil || match.IsExpired(time.Now()): - return nil, fmt.Errorf("Cannot find token %q", token.AccessorID) - } - - if token.SecretID == "" { - token.SecretID = match.SecretID - } else if match.SecretID != token.SecretID { - return nil, errors.New("Changing a token's SecretID is not permitted") - } - - if token.Local != match.Local { - return nil, fmt.Errorf("Cannot toggle local mode of %s", token.AccessorID) - } - - if token.AuthMethod == "" { - token.AuthMethod = match.AuthMethod - } else if match.AuthMethod != token.AuthMethod { - return nil, fmt.Errorf("Cannot change AuthMethod of %s", token.AccessorID) - } - - if token.ExpirationTTL != 0 { - return nil, fmt.Errorf("Cannot change expiration time of %s", token.AccessorID) - } - - if token.HasExpirationTime() { - if !match.HasExpirationTime() || !match.ExpirationTime.Equal(*token.ExpirationTime) { - return nil, fmt.Errorf("Cannot change expiration time of %s", token.AccessorID) - } - } else { - token.ExpirationTime = match.ExpirationTime - } - - token.CreateTime = match.CreateTime - - return w.write(token, match, false) -} - -// Delete the ACL token with the given SecretID from the state store. -func (w *TokenWriter) Delete(secretID string, fromLogout bool) error { - _, token, err := w.Store.ACLTokenGetBySecret(nil, secretID, nil) - switch { - case err != nil: - return err - case token == nil: - return acl.ErrNotFound - case token.AuthMethod == "" && fromLogout: - return fmt.Errorf("%w: token wasn't created via login", acl.ErrPermissionDenied) - } - - if err := w.checkCanWriteToken(token); err != nil { - return err - } - - if _, err := w.RaftApply(structs.ACLTokenDeleteRequestType, &structs.ACLTokenBatchDeleteRequest{ - TokenIDs: []string{token.AccessorID}, - }); err != nil { - return fmt.Errorf("Failed to apply token delete request: %w", err) - } - - w.ACLCache.RemoveIdentityWithSecretToken(token.SecretID) - return nil -} - -func validateTokenID(id string) error { - if structs.ACLIDReserved(id) { - return fmt.Errorf("UUIDs with the prefix %q are reserved", structs.ACLReservedPrefix) - } - if _, err := uuid.ParseUUID(id); err != nil { - return errors.New("not a valid UUID") - } - return nil -} - -func (w *TokenWriter) checkCanWriteToken(token *structs.ACLToken) error { - if !w.LocalTokensEnabled { - return fmt.Errorf("Cannot upsert tokens within this datacenter") - } - - if !w.InPrimaryDatacenter && !token.Local { - return ErrCannotWriteGlobalToken - } - - return nil -} - -func (w *TokenWriter) tokenIDInUse(id string) (bool, error) { - _, accessorMatch, err := w.Store.ACLTokenGetByAccessor(nil, id, nil) - switch { - case err != nil: - return false, err - case accessorMatch != nil: - return true, nil - } - - _, secretMatch, err := w.Store.ACLTokenGetBySecret(nil, id, nil) - switch { - case err != nil: - return false, err - case secretMatch != nil: - return true, nil - } - - return false, nil -} - -func (w *TokenWriter) write(token, existing *structs.ACLToken, fromLogin bool) (*structs.ACLToken, error) { - roles, err := w.normalizeRoleLinks(token.Roles, &token.EnterpriseMeta) - if err != nil { - return nil, err - } - token.Roles = roles - - policies, err := w.normalizePolicyLinks(token.Policies, &token.EnterpriseMeta) - if err != nil { - return nil, err - } - token.Policies = policies - - serviceIdentities, err := w.normalizeServiceIdentities(token.ServiceIdentities, token.Local) - if err != nil { - return nil, err - } - token.ServiceIdentities = serviceIdentities - - nodeIdentities, err := w.normalizeNodeIdentities(token.NodeIdentities) - if err != nil { - return nil, err - } - token.NodeIdentities = nodeIdentities - - if token.Rules != "" { - return nil, errors.New("Rules cannot be specified for this token") - } - - if token.Type != "" { - return nil, errors.New("Type cannot be specified for this token") - } - - if err := w.enterpriseValidation(token, existing); err != nil { - return nil, err - } - - token.SetHash(true) - - // Persist the token by writing to Raft. - _, err = w.RaftApply(structs.ACLTokenSetRequestType, &structs.ACLTokenBatchSetRequest{ - Tokens: structs.ACLTokens{token}, - // Logins may attempt to link to roles that do not exist. These may be - // persisted, but don't allow tokens to be created that have no privileges - // (i.e. role links that point nowhere). - AllowMissingLinks: fromLogin, - ProhibitUnprivileged: fromLogin, - }) - if err != nil { - return nil, fmt.Errorf("Failed to apply token write request: %w", err) - } - - // Purge the token from the ACL cache. - w.ACLCache.RemoveIdentityWithSecretToken(token.SecretID) - - // Refresh the token from the state store. - _, updatedToken, err := w.Store.ACLTokenGetByAccessor(nil, token.AccessorID, nil) - if err != nil || updatedToken == nil { - return nil, errors.New("Failed to retrieve token after insertion") - } - return updatedToken, nil -} - -func (w *TokenWriter) normalizeRoleLinks(links []structs.ACLTokenRoleLink, entMeta *acl.EnterpriseMeta) ([]structs.ACLTokenRoleLink, error) { - var normalized []structs.ACLTokenRoleLink - uniqueIDs := make(map[string]struct{}) - - for _, link := range links { - if link.ID == "" { - _, role, err := w.Store.ACLRoleGetByName(nil, link.Name, entMeta) - switch { - case err != nil: - return nil, fmt.Errorf("Error looking up role for name: %q: %w", link.Name, err) - case role == nil: - return nil, fmt.Errorf("No such ACL role with name %q", link.Name) - } - link.ID = role.ID - } else { - _, role, err := w.Store.ACLRoleGetByID(nil, link.ID, entMeta) - switch { - case err != nil: - return nil, fmt.Errorf("Error looking up role for ID: %q: %w", link.ID, err) - case role == nil: - return nil, fmt.Errorf("No such ACL role with ID %q", link.ID) - } - } - - // Do not persist the role name as the role could be renamed in the future. - link.Name = "" - - // De-duplicate role links by ID. - if _, ok := uniqueIDs[link.ID]; !ok { - normalized = append(normalized, link) - uniqueIDs[link.ID] = struct{}{} - } - } - - return normalized, nil -} - -func (w *TokenWriter) normalizePolicyLinks(links []structs.ACLTokenPolicyLink, entMeta *acl.EnterpriseMeta) ([]structs.ACLTokenPolicyLink, error) { - var normalized []structs.ACLTokenPolicyLink - uniqueIDs := make(map[string]struct{}) - - for _, link := range links { - if link.ID == "" { - _, role, err := w.Store.ACLPolicyGetByName(nil, link.Name, entMeta) - switch { - case err != nil: - return nil, fmt.Errorf("Error looking up policy for name: %q: %w", link.Name, err) - case role == nil: - return nil, fmt.Errorf("No such ACL policy with name %q", link.Name) - } - link.ID = role.ID - } else { - _, role, err := w.Store.ACLPolicyGetByID(nil, link.ID, entMeta) - switch { - case err != nil: - return nil, fmt.Errorf("Error looking up policy for ID: %q: %w", link.ID, err) - case role == nil: - return nil, fmt.Errorf("No such ACL policy with ID %q", link.ID) - } - } - - // Do not persist the role name as the role could be renamed in the future. - link.Name = "" - - // De-duplicate role links by ID. - if _, ok := uniqueIDs[link.ID]; !ok { - normalized = append(normalized, link) - uniqueIDs[link.ID] = struct{}{} - } - } - - return normalized, nil -} - -func (w *TokenWriter) normalizeServiceIdentities(svcIDs structs.ACLServiceIdentities, tokenLocal bool) (structs.ACLServiceIdentities, error) { - for _, id := range svcIDs { - if id.ServiceName == "" { - return nil, errors.New("Service identity is missing the service name field on this token") - } - if tokenLocal && len(id.Datacenters) > 0 { - return nil, fmt.Errorf("Service identity %q cannot specify a list of datacenters on a local token", id.ServiceName) - } - if !acl.IsValidServiceIdentityName(id.ServiceName) { - return nil, fmt.Errorf("Service identity %q has an invalid name. Only lowercase alphanumeric characters, '-' and '_' are allowed", id.ServiceName) - } - } - return svcIDs.Deduplicate(), nil -} - -func (w *TokenWriter) normalizeNodeIdentities(nodeIDs structs.ACLNodeIdentities) (structs.ACLNodeIdentities, error) { - for _, id := range nodeIDs { - if id.NodeName == "" { - return nil, errors.New("Node identity is missing the node name field on this token") - } - if id.Datacenter == "" { - return nil, errors.New("Node identity is missing the datacenter field on this token") - } - if !acl.IsValidNodeIdentityName(id.NodeName) { - return nil, fmt.Errorf("Node identity has an invalid name. Only lowercase alphanumeric characters, '-' and '_' are allowed") - } - } - return nodeIDs.Deduplicate(), nil -} diff --git a/agent/consul/auth/token_writer_oss.go b/agent/consul/auth/token_writer_oss.go deleted file mode 100644 index 57365610efd75..0000000000000 --- a/agent/consul/auth/token_writer_oss.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !consulent -// +build !consulent - -package auth - -import "github.com/hashicorp/consul/agent/structs" - -func (w *TokenWriter) enterpriseValidation(token, existing *structs.ACLToken) error { - return nil -} diff --git a/agent/consul/auth/token_writer_test.go b/agent/consul/auth/token_writer_test.go deleted file mode 100644 index b04edef8a90bf..0000000000000 --- a/agent/consul/auth/token_writer_test.go +++ /dev/null @@ -1,703 +0,0 @@ -package auth - -import ( - "errors" - "fmt" - "testing" - "time" - - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/structs" -) - -func TestTokenWriter_Create_Validation(t *testing.T) { - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", mock.Anything) - - store := testStateStore(t) - - existingToken := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - } - require.NoError(t, store.ACLTokenSet(0, existingToken)) - - writer := buildTokenWriter(store, aclCache) - - testCases := map[string]struct { - token structs.ACLToken - fromLogin bool - errorContains string - }{ - "AccessorID not a UUID": { - token: structs.ACLToken{AccessorID: "not-a-uuid"}, - errorContains: "not a valid UUID", - }, - "AccessorID is reserved": { - token: structs.ACLToken{AccessorID: structs.ACLReservedPrefix + generateID(t)}, - errorContains: "reserved", - }, - "AccessorID already in use (as AccessorID)": { - token: structs.ACLToken{AccessorID: existingToken.AccessorID}, - errorContains: "already in use", - }, - "AccessorID already in use (as SecretID)": { - token: structs.ACLToken{AccessorID: existingToken.SecretID}, - errorContains: "already in use", - }, - "SecretID not a UUID": { - token: structs.ACLToken{SecretID: "not-a-uuid"}, - errorContains: "not a valid UUID", - }, - "SecretID is reserved": { - token: structs.ACLToken{SecretID: structs.ACLReservedPrefix + generateID(t)}, - errorContains: "reserved", - }, - "SecretID already in use (as AccessorID)": { - token: structs.ACLToken{SecretID: existingToken.AccessorID}, - errorContains: "already in use", - }, - "SecretID already in use (as SecretID)": { - token: structs.ACLToken{SecretID: existingToken.SecretID}, - errorContains: "already in use", - }, - "ExpirationTTL is negative": { - token: structs.ACLToken{ExpirationTTL: -1}, - errorContains: "should be > 0", - }, - "ExpirationTTL and ExpirationTime both set": { - token: structs.ACLToken{ - ExpirationTTL: 2 * time.Hour, - ExpirationTime: timePointer(time.Now().Add(1 * time.Hour)), - }, - errorContains: "cannot both be set", - }, - "ExpirationTTL > MaxExpirationTTL": { - token: structs.ACLToken{ExpirationTTL: 48 * time.Hour}, - errorContains: "cannot be more than 24h0m0s in the future", - }, - "ExpirationTTL < MinExpirationTTL": { - token: structs.ACLToken{ExpirationTTL: 30 * time.Second}, - errorContains: "cannot be less than 1m0s in the future", - }, - "ExpirationTime before CreateTime": { - token: structs.ACLToken{ExpirationTime: timePointer(time.Now().Add(-5 * time.Minute))}, - errorContains: "ExpirationTime cannot be before CreateTime", - }, - "AuthMethod not set for login": { - token: structs.ACLToken{}, - fromLogin: true, - errorContains: "AuthMethod field is required during login", - }, - "AuthMethod set outside of login": { - token: structs.ACLToken{AuthMethod: "some-auth-method"}, - fromLogin: false, - errorContains: "AuthMethod field is disallowed outside of login", - }, - "Rules set": { - token: structs.ACLToken{Rules: "some rules"}, - errorContains: "Rules cannot be specified for this token", - }, - "Type set": { - token: structs.ACLToken{Type: "some-type"}, - errorContains: "Type cannot be specified for this token", - }, - } - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - _, err := writer.Create(&tc.token, tc.fromLogin) - require.Error(t, err) - require.Contains(t, err.Error(), tc.errorContains) - }) - } -} - -func TestTokenWriter_Create_IDGeneration(t *testing.T) { - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", mock.Anything) - - store := testStateStore(t) - - writer := buildTokenWriter(store, aclCache) - - t.Run("AccessorID", func(t *testing.T) { - token := &structs.ACLToken{ - SecretID: generateID(t), - ServiceIdentities: []*structs.ACLServiceIdentity{ - {ServiceName: "some-service"}, - }, - } - - updated, err := writer.Create(token, false) - require.NoError(t, err) - require.NotEmpty(t, updated.AccessorID) - }) - - t.Run("SecretID", func(t *testing.T) { - token := &structs.ACLToken{ - AccessorID: generateID(t), - ServiceIdentities: []*structs.ACLServiceIdentity{ - {ServiceName: "some-service"}, - }, - } - - updated, err := writer.Create(token, false) - require.NoError(t, err) - require.NotEmpty(t, updated.SecretID) - }) -} - -func TestTokenWriter_Roles(t *testing.T) { - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", mock.Anything) - - store := testStateStore(t) - - role := &structs.ACLRole{ - ID: generateID(t), - Name: generateID(t), - } - require.NoError(t, store.ACLRoleSet(0, role)) - - writer := buildTokenWriter(store, aclCache) - - testCases := map[string]struct { - input []structs.ACLTokenRoleLink - output []structs.ACLTokenRoleLink - errorContains string - }{ - "valid role ID": { - input: []structs.ACLTokenRoleLink{{ID: role.ID}}, - output: []structs.ACLTokenRoleLink{{ID: role.ID, Name: role.Name}}, - }, - "valid role name": { - input: []structs.ACLTokenRoleLink{{Name: role.Name}}, - output: []structs.ACLTokenRoleLink{{ID: role.ID, Name: role.Name}}, - }, - "invalid role ID": { - input: []structs.ACLTokenRoleLink{{ID: generateID(t)}}, - errorContains: "No such ACL role with ID", - }, - "invalid role name": { - input: []structs.ACLTokenRoleLink{{Name: "invalid-role-name"}}, - errorContains: "No such ACL role with name", - }, - "links are de-duplicated": { - input: []structs.ACLTokenRoleLink{{ID: role.ID}, {ID: role.ID}}, - output: []structs.ACLTokenRoleLink{{ID: role.ID, Name: role.Name}}, - }, - } - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - updated, err := writer.Create(&structs.ACLToken{Roles: tc.input}, false) - if tc.errorContains == "" { - require.NoError(t, err) - require.ElementsMatch(t, tc.output, updated.Roles) - } else { - require.Error(t, err) - require.Contains(t, err.Error(), tc.errorContains) - } - }) - } -} - -func TestTokenWriter_Policies(t *testing.T) { - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", mock.Anything) - - store := testStateStore(t) - - policy := &structs.ACLPolicy{ - ID: generateID(t), - Name: generateID(t), - } - require.NoError(t, store.ACLPolicySet(0, policy)) - - writer := buildTokenWriter(store, aclCache) - - testCases := map[string]struct { - input []structs.ACLTokenPolicyLink - output []structs.ACLTokenPolicyLink - errorContains string - }{ - "valid policy ID": { - input: []structs.ACLTokenPolicyLink{{ID: policy.ID}}, - output: []structs.ACLTokenPolicyLink{{ID: policy.ID, Name: policy.Name}}, - }, - "valid policy name": { - input: []structs.ACLTokenPolicyLink{{Name: policy.Name}}, - output: []structs.ACLTokenPolicyLink{{ID: policy.ID, Name: policy.Name}}, - }, - "invalid policy ID": { - input: []structs.ACLTokenPolicyLink{{ID: generateID(t)}}, - errorContains: "No such ACL policy with ID", - }, - "invalid policy name": { - input: []structs.ACLTokenPolicyLink{{Name: "invalid-policy-name"}}, - errorContains: "No such ACL policy with name", - }, - "links are de-duplicated": { - input: []structs.ACLTokenPolicyLink{{ID: policy.ID}, {ID: policy.ID}}, - output: []structs.ACLTokenPolicyLink{{ID: policy.ID, Name: policy.Name}}, - }, - } - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - updated, err := writer.Create(&structs.ACLToken{Policies: tc.input}, false) - if tc.errorContains == "" { - require.NoError(t, err) - require.ElementsMatch(t, tc.output, updated.Policies) - } else { - require.Error(t, err) - require.Contains(t, err.Error(), tc.errorContains) - } - }) - } -} - -func TestTokenWriter_ServiceIdentities(t *testing.T) { - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", mock.Anything) - - store := testStateStore(t) - - writer := buildTokenWriter(store, aclCache) - - testCases := map[string]struct { - input []*structs.ACLServiceIdentity - tokenLocal bool - output []*structs.ACLServiceIdentity - errorContains string - }{ - "empty service name": { - input: []*structs.ACLServiceIdentity{{ServiceName: ""}}, - errorContains: "missing the service name", - }, - "datacenters given on local token": { - input: []*structs.ACLServiceIdentity{{ServiceName: "web", Datacenters: []string{"dc1", "dc2"}}}, - tokenLocal: true, - errorContains: "cannot specify a list of datacenters on a local token", - }, - "invalid service name": { - input: []*structs.ACLServiceIdentity{{ServiceName: "INVALID!"}}, - errorContains: "has an invalid name", - }, - "duplicate identities are merged": { - input: []*structs.ACLServiceIdentity{ - {ServiceName: "web", Datacenters: []string{"dc1"}}, - {ServiceName: "web", Datacenters: []string{"dc2"}}, - }, - output: []*structs.ACLServiceIdentity{{ServiceName: "web", Datacenters: []string{"dc1", "dc2"}}}, - }, - } - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - updated, err := writer.Create(&structs.ACLToken{ - ServiceIdentities: tc.input, - Local: tc.tokenLocal, - }, false) - if tc.errorContains == "" { - require.NoError(t, err) - require.ElementsMatch(t, tc.output, updated.ServiceIdentities) - } else { - require.Error(t, err) - require.Contains(t, err.Error(), tc.errorContains) - } - }) - } -} - -func TestTokenWriter_NodeIdentities(t *testing.T) { - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", mock.Anything) - - store := testStateStore(t) - - writer := buildTokenWriter(store, aclCache) - - testCases := map[string]struct { - input []*structs.ACLNodeIdentity - output []*structs.ACLNodeIdentity - errorContains string - }{ - "empty service name": { - input: []*structs.ACLNodeIdentity{{NodeName: "", Datacenter: "dc1"}}, - errorContains: "missing the node name", - }, - "empty datacenter": { - input: []*structs.ACLNodeIdentity{{NodeName: "web"}}, - errorContains: "missing the datacenter field", - }, - "invalid node name": { - input: []*structs.ACLNodeIdentity{{NodeName: "INVALID!", Datacenter: "dc1"}}, - errorContains: "has an invalid name", - }, - "duplicate identities are removed": { - input: []*structs.ACLNodeIdentity{ - {NodeName: "web", Datacenter: "dc1"}, - {NodeName: "web", Datacenter: "dc2"}, - {NodeName: "web", Datacenter: "dc1"}, - }, - output: []*structs.ACLNodeIdentity{ - {NodeName: "web", Datacenter: "dc1"}, - {NodeName: "web", Datacenter: "dc2"}, - }, - }, - } - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - updated, err := writer.Create(&structs.ACLToken{NodeIdentities: tc.input}, false) - if tc.errorContains == "" { - require.NoError(t, err) - require.ElementsMatch(t, tc.output, updated.NodeIdentities) - } else { - require.Error(t, err) - require.Contains(t, err.Error(), tc.errorContains) - } - }) - } -} - -func TestTokenWriter_Create_Expiration(t *testing.T) { - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", mock.Anything) - - store := testStateStore(t) - - role := &structs.ACLRole{ - ID: generateID(t), - Name: generateID(t), - } - require.NoError(t, store.ACLRoleSet(0, role)) - - writer := buildTokenWriter(store, aclCache) - - t.Run("ExpirationTTL", func(t *testing.T) { - token := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - Roles: []structs.ACLTokenRoleLink{ - {ID: role.ID}, - }, - ExpirationTTL: 10 * time.Minute, - } - - updated, err := writer.Create(token, false) - require.NoError(t, err) - require.InEpsilon(t, 10*time.Minute, updated.ExpirationTime.Sub(time.Now()), 0.1) - require.Zero(t, updated.ExpirationTTL) - }) - - t.Run("ExpirationTime", func(t *testing.T) { - expirationTime := time.Now().Add(10 * time.Minute) - - token := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - Roles: []structs.ACLTokenRoleLink{ - {ID: role.ID}, - }, - ExpirationTime: &expirationTime, - } - - updated, err := writer.Create(token, false) - require.NoError(t, err) - require.Equal(t, expirationTime, *updated.ExpirationTime) - }) -} - -func TestTokenWriter_Create_Success(t *testing.T) { - store := testStateStore(t) - - role := &structs.ACLRole{ - ID: generateID(t), - Name: "cluster-operators", - } - require.NoError(t, store.ACLRoleSet(0, role)) - - token := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - Roles: []structs.ACLTokenRoleLink{ - {ID: role.ID}, - }, - } - - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", token.SecretID) - defer aclCache.AssertExpectations(t) - - writer := buildTokenWriter(store, aclCache) - - updated, err := writer.Create(token, false) - require.NoError(t, err) - require.NotNil(t, updated) -} - -func TestTokenWriter_Update_Validation(t *testing.T) { - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", mock.Anything) - - store := testStateStore(t) - - token := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - ExpirationTime: timePointer(time.Now().Add(1 * time.Hour)), - } - expiredToken := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - ExpirationTime: timePointer(time.Now().Add(-1 * time.Hour)), - } - require.NoError(t, store.ACLTokenBatchSet(0, []*structs.ACLToken{token, expiredToken}, state.ACLTokenSetOptions{})) - - writer := buildTokenWriter(store, aclCache) - - testCases := map[string]struct { - token structs.ACLToken - errorContains string - }{ - "AccessorID not a UUID": { - token: structs.ACLToken{AccessorID: "not-a-uuid"}, - errorContains: "not a valid UUID", - }, - "SecretID is a legacy root policy name": { - token: structs.ACLToken{AccessorID: token.AccessorID, SecretID: "allow"}, - errorContains: "Cannot modify root ACL", - }, - "AccessorID does not match any token": { - token: structs.ACLToken{AccessorID: generateID(t)}, - errorContains: "Cannot find token", - }, - "AccessorID matches expired token": { - token: structs.ACLToken{AccessorID: expiredToken.AccessorID}, - errorContains: "Cannot find token", - }, - "SecretID changed": { - token: structs.ACLToken{AccessorID: token.AccessorID, SecretID: generateID(t)}, - errorContains: "Changing a token's SecretID is not permitted", - }, - "Local changed": { - token: structs.ACLToken{AccessorID: token.AccessorID, Local: !token.Local}, - errorContains: "Cannot toggle local mode", - }, - "AuthMethod changed": { - token: structs.ACLToken{AccessorID: token.AccessorID, AuthMethod: "some-other-auth-method"}, - errorContains: "Cannot change AuthMethod", - }, - "ExpirationTTL is set": { - token: structs.ACLToken{AccessorID: token.AccessorID, ExpirationTTL: 5 * time.Minute}, - errorContains: "Cannot change expiration time", - }, - "ExpirationTime changed": { - token: structs.ACLToken{AccessorID: token.AccessorID, ExpirationTime: timePointer(token.ExpirationTime.Add(1 * time.Minute))}, - errorContains: "Cannot change expiration time", - }, - "Rules set": { - token: structs.ACLToken{AccessorID: token.AccessorID, Rules: "some rules"}, - errorContains: "Rules cannot be specified for this token", - }, - "Type set": { - token: structs.ACLToken{AccessorID: token.AccessorID, Type: "some-type"}, - errorContains: "Type cannot be specified for this token", - }, - } - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - _, err := writer.Update(&tc.token) - require.Error(t, err) - require.Contains(t, err.Error(), tc.errorContains) - }) - } -} - -func TestTokenWriter_Update_Success(t *testing.T) { - store := testStateStore(t) - - authMethod := &structs.ACLAuthMethod{ - Name: generateID(t), - Type: "jwt", - } - require.NoError(t, store.ACLAuthMethodSet(0, authMethod)) - - token := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - ExpirationTime: timePointer(time.Now().Add(1 * time.Hour)), - AuthMethod: authMethod.Name, - } - token.SetHash(true) - require.NoError(t, store.ACLTokenSet(0, token)) - - aclCache := &MockACLCache{} - aclCache.On("RemoveIdentityWithSecretToken", token.SecretID) - defer aclCache.AssertExpectations(t) - - writer := buildTokenWriter(store, aclCache) - updated, err := writer.Update(&structs.ACLToken{ - AccessorID: token.AccessorID, - Description: "New Description", - }) - require.NoError(t, err) - require.Equal(t, "New Description", updated.Description) - - // These should've been left as-is. - require.Equal(t, token.SecretID, updated.SecretID) - require.Equal(t, token.Local, updated.Local) - require.Equal(t, token.AuthMethod, updated.AuthMethod) - require.Equal(t, token.ExpirationTime, updated.ExpirationTime) - require.Equal(t, token.CreateTime, updated.CreateTime) - require.NotEqual(t, token.Hash, updated.Hash) -} - -func TestTokenWriter_Delete(t *testing.T) { - t.Run("success", func(t *testing.T) { - store := testStateStore(t) - - token := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - Local: true, - } - require.NoError(t, store.ACLTokenSet(0, token)) - - aclCache := NewMockACLCache(t) - aclCache.On("RemoveIdentityWithSecretToken", token.SecretID).Return() - - var deletedIDs []string - writer := NewTokenWriter(TokenWriterConfig{ - LocalTokensEnabled: true, - ACLCache: aclCache, - Store: store, - RaftApply: func(msgType structs.MessageType, msg interface{}) (interface{}, error) { - if msgType != structs.ACLTokenDeleteRequestType { - return nil, fmt.Errorf("unexpected message type: %v", msgType) - } - - req, ok := msg.(*structs.ACLTokenBatchDeleteRequest) - if !ok { - return nil, fmt.Errorf("unexpected message: %T", msg) - } - deletedIDs = req.TokenIDs - - return nil, nil - }, - }) - err := writer.Delete(token.SecretID, false) - require.NoError(t, err) - require.Equal(t, []string{token.AccessorID}, deletedIDs) - }) - - t.Run("local tokens disabled", func(t *testing.T) { - store := testStateStore(t) - - token := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - Local: true, - } - - require.NoError(t, store.ACLTokenSet(0, token)) - writer := NewTokenWriter(TokenWriterConfig{ - LocalTokensEnabled: false, - Store: store, - }) - - err := writer.Delete(token.SecretID, false) - require.Error(t, err) - require.Contains(t, err.Error(), "Cannot upsert tokens within this datacenter") - }) - - t.Run("global token in non-primary datacenter", func(t *testing.T) { - store := testStateStore(t) - - token := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - Local: false, - } - require.NoError(t, store.ACLTokenSet(0, token)) - - writer := NewTokenWriter(TokenWriterConfig{ - LocalTokensEnabled: true, - InPrimaryDatacenter: false, - Store: store, - }) - - err := writer.Delete(token.SecretID, false) - require.Error(t, err) - require.Equal(t, ErrCannotWriteGlobalToken, err) - }) - - t.Run("token not found", func(t *testing.T) { - store := testStateStore(t) - - writer := NewTokenWriter(TokenWriterConfig{ - LocalTokensEnabled: true, - Store: store, - }) - err := writer.Delete(generateID(t), false) - require.Error(t, err) - require.True(t, errors.Is(err, acl.ErrNotFound)) - }) - - t.Run("logout requires token to be created by login", func(t *testing.T) { - store := testStateStore(t) - - token := &structs.ACLToken{ - AccessorID: generateID(t), - SecretID: generateID(t), - Local: true, - } - require.NoError(t, store.ACLTokenSet(0, token)) - - writer := NewTokenWriter(TokenWriterConfig{ - LocalTokensEnabled: true, - Store: store, - }) - err := writer.Delete(token.SecretID, true) - require.Error(t, err) - require.True(t, errors.Is(err, acl.ErrPermissionDenied)) - require.Contains(t, err.Error(), "wasn't created via login") - }) -} - -func raftApplyACLTokenSet(store *state.Store) RaftApplyFn { - return func(msgType structs.MessageType, msg interface{}) (interface{}, error) { - if msgType != structs.ACLTokenSetRequestType { - return nil, fmt.Errorf("unexpected message type: %v", msgType) - } - - req, ok := msg.(*structs.ACLTokenBatchSetRequest) - if !ok { - return nil, fmt.Errorf("unexpected message: %T", msg) - } - - err := store.ACLTokenBatchSet(0, req.Tokens, state.ACLTokenSetOptions{ - CAS: req.CAS, - AllowMissingPolicyAndRoleIDs: req.AllowMissingLinks, - ProhibitUnprivileged: req.ProhibitUnprivileged, - }) - return nil, err - } -} - -func timePointer(t time.Time) *time.Time { return &t } - -func buildTokenWriter(store *state.Store, aclCache ACLCache) *TokenWriter { - return NewTokenWriter(TokenWriterConfig{ - RaftApply: raftApplyACLTokenSet(store), - ACLCache: aclCache, - Store: store, - MinExpirationTTL: 1 * time.Minute, - MaxExpirationTTL: 24 * time.Hour, - PrimaryDatacenter: "dc1", - InPrimaryDatacenter: true, - LocalTokensEnabled: true, - }) -} diff --git a/agent/consul/auto_config_endpoint_test.go b/agent/consul/auto_config_endpoint_test.go index 43df5fdabc2a5..676b126fdbda6 100644 --- a/agent/consul/auto_config_endpoint_test.go +++ b/agent/consul/auto_config_endpoint_test.go @@ -11,11 +11,12 @@ import ( "testing" "time" - msgpackrpc "github.com/hashicorp/consul-net-rpc/net-rpc-msgpackrpc" "github.com/hashicorp/memberlist" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + msgpackrpc "github.com/hashicorp/consul-net-rpc/net-rpc-msgpackrpc" + "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/internal/go-sso/oidcauth/oidcauthtest" diff --git a/agent/consul/autopilot.go b/agent/consul/autopilot.go index 4d934053a3e5f..27471b533d3ed 100644 --- a/agent/consul/autopilot.go +++ b/agent/consul/autopilot.go @@ -10,7 +10,6 @@ import ( autopilot "github.com/hashicorp/raft-autopilot" "github.com/hashicorp/serf/serf" - "github.com/hashicorp/consul/agent/consul/autopilotevents" "github.com/hashicorp/consul/agent/metadata" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/logging" @@ -30,8 +29,7 @@ var AutopilotGauges = []prometheus.GaugeDefinition{ // AutopilotDelegate is a Consul delegate for autopilot operations. type AutopilotDelegate struct { - server *Server - readyServersPublisher *autopilotevents.ReadyServersEventPublisher + server *Server } func (d *AutopilotDelegate) AutopilotConfig() *autopilot.Config { @@ -53,8 +51,6 @@ func (d *AutopilotDelegate) NotifyState(state *autopilot.State) { } else { metrics.SetGauge([]string{"autopilot", "healthy"}, 0) } - - d.readyServersPublisher.PublishReadyServersEvents(state) } func (d *AutopilotDelegate) RemoveFailedServer(srv *autopilot.Server) { @@ -67,13 +63,7 @@ func (d *AutopilotDelegate) RemoveFailedServer(srv *autopilot.Server) { } func (s *Server) initAutopilot(config *Config) { - apDelegate := &AutopilotDelegate{ - server: s, - readyServersPublisher: autopilotevents.NewReadyServersEventPublisher(autopilotevents.Config{ - Publisher: s.publisher, - GetStore: func() autopilotevents.StateStore { return s.fsm.State() }, - }), - } + apDelegate := &AutopilotDelegate{s} s.autopilot = autopilot.New( s.raft, @@ -84,9 +74,6 @@ func (s *Server) initAutopilot(config *Config) { autopilot.WithPromoter(s.autopilotPromoter()), autopilot.WithReconciliationDisabled(), ) - - // registers a snapshot handler for the event publisher to send as the first event for a new stream - s.publisher.RegisterHandler(autopilotevents.EventTopicReadyServers, apDelegate.readyServersPublisher.HandleSnapshot) } func (s *Server) autopilotServers() map[raft.ServerID]*autopilot.Server { @@ -142,7 +129,7 @@ func (s *Server) autopilotServerFromMetadata(srv *metadata.Server) (*autopilot.S // populate the node meta if there is any. When a node first joins or if // there are ACL issues then this could be empty if the server has not // yet been able to register itself in the catalog - _, node, err := s.fsm.State().GetNodeID(types.NodeID(srv.ID), structs.NodeEnterpriseMetaInDefaultPartition(), structs.DefaultPeerKeyword) + _, node, err := s.fsm.State().GetNodeID(types.NodeID(srv.ID), structs.NodeEnterpriseMetaInDefaultPartition()) if err != nil { return nil, fmt.Errorf("error retrieving node from state store: %w", err) } diff --git a/agent/consul/autopilot_test.go b/agent/consul/autopilot_test.go index 2ebd5806b4787..faf1facc448c6 100644 --- a/agent/consul/autopilot_test.go +++ b/agent/consul/autopilot_test.go @@ -2,7 +2,6 @@ package consul import ( "context" - "fmt" "os" "testing" "time" @@ -11,8 +10,6 @@ import ( "github.com/hashicorp/serf/serf" "github.com/stretchr/testify/require" - "github.com/hashicorp/consul/agent/consul/autopilotevents" - "github.com/hashicorp/consul/agent/consul/stream" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" @@ -525,99 +522,3 @@ func TestAutopilot_MinQuorum(t *testing.T) { } }) } - -func TestAutopilot_EventPublishing(t *testing.T) { - // This is really an integration level test. The general flow this test will follow is: - // - // 1. Start a 3 server cluster - // 2. Subscribe to the ready server events - // 3. Observe the first event which will be pretty immediately ready as it is the - // snapshot event. - // 4. Wait for multiple iterations of the autopilot state updater and ensure no - // other events are seen. The state update interval is 50ms for tests unless - // overridden. - // 5. Add a fouth server. - // 6. Wait for an event to be emitted containing 4 ready servers. - - // 1. create the test cluster - cluster := newTestCluster(t, &testClusterConfig{ - Servers: 3, - ServerConf: testServerACLConfig, - // We want to wait until each server has registered itself in the Catalog. Otherwise - // the first snapshot even we see might have no servers in it while things are being - // initialized. Doing this wait ensure that things are in the right state to start - // the subscription. - }) - - // 2. subscribe to ready server events - req := stream.SubscribeRequest{ - Topic: autopilotevents.EventTopicReadyServers, - Subject: stream.SubjectNone, - Token: TestDefaultInitialManagementToken, - } - sub, err := cluster.Servers[0].publisher.Subscribe(&req) - require.NoError(t, err) - t.Cleanup(sub.Unsubscribe) - - // 3. Observe that an event was generated which should be the snapshot event. - // As we have just bootstrapped the cluster with 3 servers we expect to - // see those 3 here. - validatePayload(t, 3, mustGetEventWithTimeout(t, sub, 50*time.Millisecond)) - - // TODO - its kind of annoying that the EventPublisher doesn't have a mode where - // it knows each event is a full state of the world. The ramifications are that - // we have to expect/ignore the framing events for EndOfSnapshot. - event := mustGetEventWithTimeout(t, sub, 10*time.Millisecond) - require.True(t, event.IsFramingEvent()) - - // 4. Wait for 3 iterations of the ServerHealthInterval to ensure no events - // are being published when the autopilot state is not changing. - eventNotEmitted(t, sub, 150*time.Millisecond) - - // 5. Add a fourth server - _, srv := testServerWithConfig(t, testServerACLConfig, func(c *Config) { - c.Bootstrap = false - c.BootstrapExpect = 0 - }) - joinLAN(t, srv, cluster.Servers[0]) - - // 6. Now wait for the event for the fourth server being added. This may take a little - // while as the joinLAN operation above doesn't wait for the server to actually get - // added to Raft. - validatePayload(t, 4, mustGetEventWithTimeout(t, sub, time.Second)) -} - -// mustGetEventWithTimeout is a helper function for validating that a Subscription.Next call will return -// an event within the given time. It also validates that no error is returned. -func mustGetEventWithTimeout(t *testing.T, subscription *stream.Subscription, timeout time.Duration) stream.Event { - t.Helper() - event, err := getEventWithTimeout(t, subscription, timeout) - require.NoError(t, err) - return event -} - -// getEventWithTimeout is a helper function for retrieving a Event from a Subscription within the specified timeout. -func getEventWithTimeout(t *testing.T, subscription *stream.Subscription, timeout time.Duration) (stream.Event, error) { - t.Helper() - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - event, err := subscription.Next(ctx) - return event, err -} - -// eventNotEmitted is a helper to validate that no Event is emitted for the given Subscription -func eventNotEmitted(t *testing.T, subscription *stream.Subscription, timeout time.Duration) { - t.Helper() - var event stream.Event - var err error - event, err = getEventWithTimeout(t, subscription, timeout) - require.Equal(t, context.DeadlineExceeded, err, fmt.Sprintf("event:%v", event)) -} - -func validatePayload(t *testing.T, expectedNumServers int, event stream.Event) { - t.Helper() - require.Equal(t, autopilotevents.EventTopicReadyServers, event.Topic) - readyServers, ok := event.Payload.(autopilotevents.EventPayloadReadyServers) - require.True(t, ok) - require.Len(t, readyServers, expectedNumServers) -} diff --git a/agent/consul/autopilotevents/mock_Publisher_test.go b/agent/consul/autopilotevents/mock_Publisher_test.go deleted file mode 100644 index 98f6e4065cec2..0000000000000 --- a/agent/consul/autopilotevents/mock_Publisher_test.go +++ /dev/null @@ -1,29 +0,0 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. - -package autopilotevents - -import ( - testing "testing" - - stream "github.com/hashicorp/consul/agent/consul/stream" - mock "github.com/stretchr/testify/mock" -) - -// MockPublisher is an autogenerated mock type for the Publisher type -type MockPublisher struct { - mock.Mock -} - -// Publish provides a mock function with given fields: _a0 -func (_m *MockPublisher) Publish(_a0 []stream.Event) { - _m.Called(_a0) -} - -// NewMockPublisher creates a new instance of MockPublisher. It also registers a cleanup function to assert the mocks expectations. -func NewMockPublisher(t testing.TB) *MockPublisher { - mock := &MockPublisher{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/consul/autopilotevents/mock_StateStore_test.go b/agent/consul/autopilotevents/mock_StateStore_test.go deleted file mode 100644 index 200e68be71e08..0000000000000 --- a/agent/consul/autopilotevents/mock_StateStore_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. - -package autopilotevents - -import ( - acl "github.com/hashicorp/consul/acl" - mock "github.com/stretchr/testify/mock" - - structs "github.com/hashicorp/consul/agent/structs" - - testing "testing" - - types "github.com/hashicorp/consul/types" -) - -// MockStateStore is an autogenerated mock type for the StateStore type -type MockStateStore struct { - mock.Mock -} - -// GetNodeID provides a mock function with given fields: _a0, _a1, _a2 -func (_m *MockStateStore) GetNodeID(_a0 types.NodeID, _a1 *acl.EnterpriseMeta, _a2 string) (uint64, *structs.Node, error) { - ret := _m.Called(_a0, _a1, _a2) - - var r0 uint64 - if rf, ok := ret.Get(0).(func(types.NodeID, *acl.EnterpriseMeta, string) uint64); ok { - r0 = rf(_a0, _a1, _a2) - } else { - r0 = ret.Get(0).(uint64) - } - - var r1 *structs.Node - if rf, ok := ret.Get(1).(func(types.NodeID, *acl.EnterpriseMeta, string) *structs.Node); ok { - r1 = rf(_a0, _a1, _a2) - } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(*structs.Node) - } - } - - var r2 error - if rf, ok := ret.Get(2).(func(types.NodeID, *acl.EnterpriseMeta, string) error); ok { - r2 = rf(_a0, _a1, _a2) - } else { - r2 = ret.Error(2) - } - - return r0, r1, r2 -} - -// NewMockStateStore creates a new instance of MockStateStore. It also registers a cleanup function to assert the mocks expectations. -func NewMockStateStore(t testing.TB) *MockStateStore { - mock := &MockStateStore{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/consul/autopilotevents/mock_timeProvider_test.go b/agent/consul/autopilotevents/mock_timeProvider_test.go deleted file mode 100644 index 147424101dc0c..0000000000000 --- a/agent/consul/autopilotevents/mock_timeProvider_test.go +++ /dev/null @@ -1,39 +0,0 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. - -package autopilotevents - -import ( - testing "testing" - - mock "github.com/stretchr/testify/mock" - - time "time" -) - -// mockTimeProvider is an autogenerated mock type for the timeProvider type -type mockTimeProvider struct { - mock.Mock -} - -// Now provides a mock function with given fields: -func (_m *mockTimeProvider) Now() time.Time { - ret := _m.Called() - - var r0 time.Time - if rf, ok := ret.Get(0).(func() time.Time); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(time.Time) - } - - return r0 -} - -// newMockTimeProvider creates a new instance of mockTimeProvider. It also registers a cleanup function to assert the mocks expectations. -func newMockTimeProvider(t testing.TB) *mockTimeProvider { - mock := &mockTimeProvider{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/consul/autopilotevents/ready_servers_events.go b/agent/consul/autopilotevents/ready_servers_events.go deleted file mode 100644 index 7943ccacc8560..0000000000000 --- a/agent/consul/autopilotevents/ready_servers_events.go +++ /dev/null @@ -1,311 +0,0 @@ -package autopilotevents - -import ( - "fmt" - "net" - "sort" - "sync" - "time" - - autopilot "github.com/hashicorp/raft-autopilot" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbsubscribe" - "github.com/hashicorp/consul/types" -) - -const ( - EventTopicReadyServers stream.StringTopic = "ready-servers" -) - -// ReadyServerInfo includes information about a server that is ready -// to handle incoming requests. -type ReadyServerInfo struct { - ID string - Address string - TaggedAddresses map[string]string - Version string -} - -func (info *ReadyServerInfo) Equal(other *ReadyServerInfo) bool { - if info.ID != other.ID { - return false - } - - if info.Version != other.Version { - return false - } - - if info.Address != other.Address { - return false - } - - if len(info.TaggedAddresses) != len(other.TaggedAddresses) { - return false - } - - for tag, infoAddr := range info.TaggedAddresses { - if otherAddr, ok := other.TaggedAddresses[tag]; !ok || infoAddr != otherAddr { - return false - } - } - - return true -} - -// EventPayloadReadyServers -type EventPayloadReadyServers []ReadyServerInfo - -func (e EventPayloadReadyServers) Subject() stream.Subject { return stream.SubjectNone } - -func (e EventPayloadReadyServers) HasReadPermission(authz acl.Authorizer) bool { - // Any service in the mesh will need access to where the servers live. Therefore - // we check if the authorizer grants permissions on any service and if so then - // we allow seeing where the servers are. - var authzContext acl.AuthorizerContext - structs.WildcardEnterpriseMetaInPartition(structs.WildcardSpecifier). - FillAuthzContext(&authzContext) - - return authz.ServiceWriteAny(&authzContext) == acl.Allow -} - -func (e EventPayloadReadyServers) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - // TODO(peering) is this right? - // TODO(agentless) is this right? - panic("EventPayloadReadyServers does not implement ToSubscriptionEvent") -} - -func ExtractEventPayload(event stream.Event) (EventPayloadReadyServers, error) { - if event.Topic != EventTopicReadyServers { - return nil, fmt.Errorf("unexpected topic (%q) for a %q event", event.Topic, EventTopicReadyServers) - } - - if payload, ok := event.Payload.(EventPayloadReadyServers); ok { - return payload, nil - } - - return nil, fmt.Errorf("unexpected payload type %T for %q event", event.Payload, EventTopicReadyServers) -} - -type Config struct { - GetStore func() StateStore - Publisher Publisher - timeProvider timeProvider -} - -// ReadyServersEventPublisher is capable to tracking changes to ready servers -// between consecutive calls to PublishReadyServersEvents. It will then publish -// "ready-servers" events as necessary. -type ReadyServersEventPublisher struct { - Config - previous EventPayloadReadyServers - - snapshotLock sync.RWMutex - snapshot []stream.Event -} - -func NewReadyServersEventPublisher(config Config) *ReadyServersEventPublisher { - return &ReadyServersEventPublisher{ - Config: config, - snapshot: []stream.Event{ - { - Topic: EventTopicReadyServers, - Index: 0, - Payload: EventPayloadReadyServers{}, - }, - }, - } -} - -//go:generate mockery --name StateStore --inpackage --testonly -type StateStore interface { - GetNodeID(types.NodeID, *acl.EnterpriseMeta, string) (uint64, *structs.Node, error) -} - -//go:generate mockery --name Publisher --inpackage --testonly -type Publisher interface { - Publish([]stream.Event) -} - -//go:generate mockery --name timeProvider --inpackage --testonly -type timeProvider interface { - Now() time.Time -} - -// PublishReadyServersEvents will publish a "ready-servers" event if the list of -// ready servers has changed since the last time events were published. -func (r *ReadyServersEventPublisher) PublishReadyServersEvents(state *autopilot.State) { - if events, ok := r.readyServersEvents(state); ok { - // update the latest snapshot so that any new event subscription will see - // use the latest state. - r.snapshotLock.Lock() - r.snapshot = events - r.snapshotLock.Unlock() - - // if the event publisher were to not be able to keep up with procesing events - // then its possible this blocks. It could cause autopilot to not update its - // state as often as it should. However if this blocks for over 10s then - // not updating the autopilot state as quickly is likely the least of our - // concerns. If we need to make this async then we probably need to single - // flight these to ensure proper event ordering. - r.Publisher.Publish(events) - } -} - -func (r *ReadyServersEventPublisher) readyServersEvents(state *autopilot.State) ([]stream.Event, bool) { - // First, we need to pull all the ready servers out from the autopilot state. - servers := r.autopilotStateToReadyServers(state) - - // Next we, sort the servers list to make comparison easier later on. We do - // this outside of the next length check conditional block to ensure that all - // values of previousReadyServers we store will be sorted and the future - // comparison's will remain valid. - sort.Slice(servers, func(i, j int) bool { - // no two servers can have the same id so this is sufficient - return servers[i].ID < servers[j].ID - }) - - // If the number of ready servers hasn't changed then we need to inspect individual - // servers to see if there are differences. If the number of servers has changed - // we know that an event should be generated and sent. - if len(r.previous) == len(servers) { - diff := false - // We are relying on the fact that both of the slices will be sorted and that - // we don't care what the actual differences are but instead just that they - // have differences. - for i := 0; i < len(servers); i++ { - if !r.previous[i].Equal(&servers[i]) { - diff = true - break - } - } - - // The list of ready servers is identical to the previous ones. Therefore - // we will not send any event. - if !diff { - return nil, false - } - } - - r.previous = servers - - return []stream.Event{r.newReadyServersEvent(servers)}, true -} - -// autopilotStateToReadyServers will iterate through all servers in the autopilot -// state and compile a list of servers which are "ready". Readiness means that -// they would be an acceptable target for stale queries. -func (r *ReadyServersEventPublisher) autopilotStateToReadyServers(state *autopilot.State) EventPayloadReadyServers { - var servers EventPayloadReadyServers - for _, srv := range state.Servers { - // All healthy servers are caught up enough to be included in a ready servers. - // Servers with voting rights that are still healthy according to Serf are - // also included as they have likely just fallen behind the leader a little - // after initially replicating state. They are still acceptable targets - // for most stale queries and clients can bound the staleness if necessary. - // Including them is a means to prevent flapping the list of servers we - // advertise as ready and flooding the network with notifications to all - // dataplanes of server updates. - // - // TODO (agentless) for a non-voting server that is still alive but fell - // behind, should we cause it to be removed. For voters we know they were caught - // up at some point but for non-voters we cannot know the same thing. - if srv.Health.Healthy || (srv.HasVotingRights() && srv.Server.NodeStatus == autopilot.NodeAlive) { - // autopilot information contains addresses in the : form. We only care about the - // the host so we parse it out here and discard the port. - host, err := extractHost(string(srv.Server.Address)) - if err != nil || host == "" { - - continue - } - - servers = append(servers, ReadyServerInfo{ - ID: string(srv.Server.ID), - Address: host, - Version: srv.Server.Version, - TaggedAddresses: r.getTaggedAddresses(srv), - }) - } - } - - return servers -} - -// getTaggedAddresses will get the tagged addresses for the given server or return nil -// if it encounters an error or unregistered server. -func (r *ReadyServersEventPublisher) getTaggedAddresses(srv *autopilot.ServerState) map[string]string { - // we have no callback to lookup the tagged addresses so we can return early - if r.GetStore == nil { - return nil - } - - // Assuming we have been provided a callback to get a state store implementation, then - // we will attempt to lookup the node for the autopilot server. We use this to get the - // tagged addresses so that consumers of these events will be able to distinguish LAN - // vs WAN addresses as well as IP protocol differentiation. At first I thought we may - // need to hook into catalog events so that if the tagged addresses change then - // we can synthesize new events. That would be pretty complex so this code does not - // deal with that. The reasoning why that is probably okay is that autopilot will - // send us the state at least once every 30s. That means that we will grab the nodes - // from the catalog at that often and publish the events. So while its not quite - // as responsive as actually watching for the Catalog changes, its MUCH simpler to - // code and reason about and having those addresses be updated within 30s is good enough. - _, node, err := r.GetStore().GetNodeID(types.NodeID(srv.Server.ID), structs.NodeEnterpriseMetaInDefaultPartition(), structs.DefaultPeerKeyword) - if err != nil || node == nil { - // no catalog information means we should return a nil addres map - return nil - } - - if len(node.TaggedAddresses) == 0 { - return nil - } - - addrs := make(map[string]string) - for tag, address := range node.TaggedAddresses { - // just like for the Nodes main Address, we only care about the IPs and not the - // port so we parse the host out and discard the port. - host, err := extractHost(address) - if err != nil || host == "" { - continue - } - addrs[tag] = host - } - - return addrs -} - -// newReadyServersEvent will create a stream.Event with the provided ready server info. -func (r *ReadyServersEventPublisher) newReadyServersEvent(servers EventPayloadReadyServers) stream.Event { - now := time.Now() - if r.timeProvider != nil { - now = r.timeProvider.Now() - } - return stream.Event{ - Topic: EventTopicReadyServers, - Index: uint64(now.UnixMicro()), - Payload: servers, - } -} - -// HandleSnapshot is the EventPublisher callback to generate a snapshot for the "ready-servers" event streams. -func (r *ReadyServersEventPublisher) HandleSnapshot(_ stream.SubscribeRequest, buf stream.SnapshotAppender) (uint64, error) { - r.snapshotLock.RLock() - defer r.snapshotLock.RUnlock() - buf.Append(r.snapshot) - return r.snapshot[0].Index, nil -} - -// extractHost is a small convenience function to catch errors regarding -// missing ports from the net.SplitHostPort function. -func extractHost(addr string) (string, error) { - host, _, err := net.SplitHostPort(addr) - if err == nil { - return host, nil - } - if ae, ok := err.(*net.AddrError); ok && ae.Err == "missing port in address" { - return addr, nil - } - return "", err -} diff --git a/agent/consul/autopilotevents/ready_servers_events_test.go b/agent/consul/autopilotevents/ready_servers_events_test.go deleted file mode 100644 index 223292404a90d..0000000000000 --- a/agent/consul/autopilotevents/ready_servers_events_test.go +++ /dev/null @@ -1,647 +0,0 @@ -package autopilotevents - -import ( - "testing" - time "time" - - "github.com/hashicorp/raft" - autopilot "github.com/hashicorp/raft-autopilot" - mock "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/stream" - structs "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbsubscribe" - types "github.com/hashicorp/consul/types" -) - -var testTime = time.Date(2022, 4, 14, 10, 56, 00, 0, time.UTC) - -var exampleState = &autopilot.State{ - Servers: map[raft.ServerID]*autopilot.ServerState{ - "792ae13c-d765-470b-852c-e073fdb6e849": { - Health: autopilot.ServerHealth{ - Healthy: true, - }, - State: autopilot.RaftLeader, - Server: autopilot.Server{ - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2:8300", - Version: "v1.12.0", - NodeStatus: autopilot.NodeAlive, - }, - }, - "65e79ff4-bbce-467b-a9d6-725c709fa985": { - Health: autopilot.ServerHealth{ - Healthy: true, - }, - State: autopilot.RaftVoter, - Server: autopilot.Server{ - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3:8300", - Version: "v1.12.0", - NodeStatus: autopilot.NodeAlive, - }, - }, - // this server is up according to Serf but is unhealthy - // due to having an index that is behind - "db11f0ac-0cbe-4215-80cc-b4e843f4df1e": { - Health: autopilot.ServerHealth{ - Healthy: false, - }, - State: autopilot.RaftVoter, - Server: autopilot.Server{ - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4:8300", - Version: "v1.12.0", - NodeStatus: autopilot.NodeAlive, - }, - }, - // this server is up according to Serf but is unhealthy - // due to having an index that is behind. It is a non-voter - // and thus will be filtered out - "4c48a154-8176-4e14-ba5d-20bf1f784a7e": { - Health: autopilot.ServerHealth{ - Healthy: false, - }, - State: autopilot.RaftNonVoter, - Server: autopilot.Server{ - ID: "4c48a154-8176-4e14-ba5d-20bf1f784a7e", - Address: "198.18.0.5:8300", - Version: "v1.12.0", - NodeStatus: autopilot.NodeAlive, - }, - }, - // this is a voter that has died - "7a22eec8-de85-43a6-a76e-00b427ef6627": { - Health: autopilot.ServerHealth{ - Healthy: false, - }, - State: autopilot.RaftVoter, - Server: autopilot.Server{ - ID: "7a22eec8-de85-43a6-a76e-00b427ef6627", - Address: "198.18.0.6", - Version: "v1.12.0", - NodeStatus: autopilot.NodeFailed, - }, - }, - }, -} - -func TestEventPayloadReadyServers_HasReadPermission(t *testing.T) { - t.Run("no service:write", func(t *testing.T) { - hasRead := EventPayloadReadyServers{}.HasReadPermission(acl.DenyAll()) - require.False(t, hasRead) - }) - - t.Run("has service:write", func(t *testing.T) { - policy, err := acl.NewPolicyFromSource(` - service "foo" { - policy = "write" - } - `, acl.SyntaxCurrent, nil, nil) - require.NoError(t, err) - - authz, err := acl.NewPolicyAuthorizerWithDefaults(acl.DenyAll(), []*acl.Policy{policy}, nil) - require.NoError(t, err) - - hasRead := EventPayloadReadyServers{}.HasReadPermission(authz) - require.True(t, hasRead) - }) -} - -func TestAutopilotStateToReadyServers(t *testing.T) { - expected := EventPayloadReadyServers{ - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - Version: "v1.12.0", - }, - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - Version: "v1.12.0", - }, - } - - r := ReadyServersEventPublisher{} - - actual := r.autopilotStateToReadyServers(exampleState) - require.ElementsMatch(t, expected, actual) -} - -func TestAutopilotStateToReadyServersWithTaggedAddresses(t *testing.T) { - expected := EventPayloadReadyServers{ - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - TaggedAddresses: map[string]string{"wan": "5.4.3.2"}, - Version: "v1.12.0", - }, - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - TaggedAddresses: map[string]string{"wan": "1.2.3.4"}, - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - TaggedAddresses: map[string]string{"wan": "9.8.7.6"}, - Version: "v1.12.0", - }, - } - - store := &MockStateStore{} - t.Cleanup(func() { store.AssertExpectations(t) }) - store.On("GetNodeID", - types.NodeID("792ae13c-d765-470b-852c-e073fdb6e849"), - structs.NodeEnterpriseMetaInDefaultPartition(), - structs.DefaultPeerKeyword, - ).Once().Return( - uint64(0), - &structs.Node{TaggedAddresses: map[string]string{"wan": "5.4.3.2"}}, - nil, - ) - - store.On("GetNodeID", - types.NodeID("65e79ff4-bbce-467b-a9d6-725c709fa985"), - structs.NodeEnterpriseMetaInDefaultPartition(), - structs.DefaultPeerKeyword, - ).Once().Return( - uint64(0), - &structs.Node{TaggedAddresses: map[string]string{"wan": "1.2.3.4"}}, - nil, - ) - - store.On("GetNodeID", - types.NodeID("db11f0ac-0cbe-4215-80cc-b4e843f4df1e"), - structs.NodeEnterpriseMetaInDefaultPartition(), - structs.DefaultPeerKeyword, - ).Once().Return( - uint64(0), - &structs.Node{TaggedAddresses: map[string]string{"wan": "9.8.7.6"}}, - nil, - ) - - r := NewReadyServersEventPublisher(Config{ - GetStore: func() StateStore { return store }, - }) - - actual := r.autopilotStateToReadyServers(exampleState) - require.ElementsMatch(t, expected, actual) -} - -func TestAutopilotReadyServersEvents(t *testing.T) { - // we have already tested the ReadyServerInfo extraction within the - // TestAutopilotStateToReadyServers test. Therefore this test is going - // to focus only on the change detection. - // - // * - added server - // * - removed server - // * - server with address changed - // * - upgraded server with version change - - expectedServers := EventPayloadReadyServers{ - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - Version: "v1.12.0", - }, - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - Version: "v1.12.0", - }, - } - - type testCase struct { - // The elements of this slice must already be sorted - previous EventPayloadReadyServers - changeDetected bool - } - - cases := map[string]testCase{ - "no-change": { - previous: EventPayloadReadyServers{ - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - Version: "v1.12.0", - }, - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - Version: "v1.12.0", - }, - }, - changeDetected: false, - }, - "server-added": { - previous: EventPayloadReadyServers{ - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - Version: "v1.12.0", - }, - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - Version: "v1.12.0", - }, - // server with id db11f0ac-0cbe-4215-80cc-b4e843f4df1e will be added. - }, - changeDetected: true, - }, - "server-removed": { - previous: EventPayloadReadyServers{ - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - Version: "v1.12.0", - }, - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - Version: "v1.12.0", - }, - // this server isn't present in the state and will be removed - { - ID: "7e3235de-8a75-4c8d-9ec3-847ca87d07e8", - Address: "198.18.0.5", - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - Version: "v1.12.0", - }, - }, - changeDetected: true, - }, - "address-change": { - previous: EventPayloadReadyServers{ - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - // this value is different from the state and should - // cause an event to be generated - Address: "198.18.0.9", - Version: "v1.12.0", - }, - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - Version: "v1.12.0", - }, - }, - changeDetected: true, - }, - "upgraded-version": { - previous: EventPayloadReadyServers{ - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - // This is v1.12.0 in the state and therefore an - // event should be generated - Version: "v1.11.4", - }, - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - Version: "v1.12.0", - }, - }, - changeDetected: true, - }, - } - - for name, tcase := range cases { - t.Run(name, func(t *testing.T) { - r := ReadyServersEventPublisher{ - previous: tcase.previous, - } - events, changeDetected := r.readyServersEvents(exampleState) - require.Equal(t, tcase.changeDetected, changeDetected, "servers: %+v", events) - if tcase.changeDetected { - require.Len(t, events, 1) - require.Equal(t, EventTopicReadyServers, events[0].Topic) - payload, ok := events[0].Payload.(EventPayloadReadyServers) - require.True(t, ok) - require.ElementsMatch(t, expectedServers, payload) - } else { - require.Empty(t, events) - } - }) - } -} - -func TestAutopilotPublishReadyServersEvents(t *testing.T) { - t.Run("publish", func(t *testing.T) { - pub := &MockPublisher{} - pub.On("Publish", []stream.Event{ - { - Topic: EventTopicReadyServers, - Index: uint64(testTime.UnixMicro()), - Payload: EventPayloadReadyServers{ - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - Version: "v1.12.0", - }, - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - Version: "v1.12.0", - }, - }, - }, - }) - - mtime := &mockTimeProvider{} - mtime.On("Now").Return(testTime).Once() - - t.Cleanup(func() { - mtime.AssertExpectations(t) - pub.AssertExpectations(t) - }) - - r := NewReadyServersEventPublisher(Config{ - Publisher: pub, - timeProvider: mtime, - }) - - r.PublishReadyServersEvents(exampleState) - }) - - t.Run("suppress", func(t *testing.T) { - pub := &MockPublisher{} - mtime := &mockTimeProvider{} - - t.Cleanup(func() { - mtime.AssertExpectations(t) - pub.AssertExpectations(t) - }) - - r := NewReadyServersEventPublisher(Config{ - Publisher: pub, - timeProvider: mtime, - }) - - r.previous = EventPayloadReadyServers{ - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - Version: "v1.12.0", - }, - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - Version: "v1.12.0", - }, - } - - r.PublishReadyServersEvents(exampleState) - }) -} - -type MockAppender struct { - mock.Mock -} - -func (m *MockAppender) Append(events []stream.Event) { - m.Called(events) -} - -func TestReadyServerEventsSnapshotHandler(t *testing.T) { - buf := MockAppender{} - buf.On("Append", []stream.Event{ - { - Topic: EventTopicReadyServers, - Index: 0, - Payload: EventPayloadReadyServers{}, - }, - }) - buf.On("Append", []stream.Event{ - { - Topic: EventTopicReadyServers, - Index: 1649933760000000, - Payload: EventPayloadReadyServers{ - { - ID: "65e79ff4-bbce-467b-a9d6-725c709fa985", - Address: "198.18.0.3", - TaggedAddresses: map[string]string{"wan": "1.2.3.4"}, - Version: "v1.12.0", - }, - { - ID: "792ae13c-d765-470b-852c-e073fdb6e849", - Address: "198.18.0.2", - TaggedAddresses: map[string]string{"wan": "5.4.3.2"}, - Version: "v1.12.0", - }, - { - ID: "db11f0ac-0cbe-4215-80cc-b4e843f4df1e", - Address: "198.18.0.4", - TaggedAddresses: map[string]string{"wan": "9.8.7.6"}, - Version: "v1.12.0", - }, - }, - }, - }).Once() - - mtime := mockTimeProvider{} - mtime.On("Now").Return(testTime).Once() - - store := &MockStateStore{} - t.Cleanup(func() { store.AssertExpectations(t) }) - store.On("GetNodeID", - types.NodeID("792ae13c-d765-470b-852c-e073fdb6e849"), - structs.NodeEnterpriseMetaInDefaultPartition(), - structs.DefaultPeerKeyword, - ).Once().Return( - uint64(0), - &structs.Node{TaggedAddresses: map[string]string{"wan": "5.4.3.2"}}, - nil, - ) - - store.On("GetNodeID", - types.NodeID("65e79ff4-bbce-467b-a9d6-725c709fa985"), - structs.NodeEnterpriseMetaInDefaultPartition(), - structs.DefaultPeerKeyword, - ).Once().Return( - uint64(0), - &structs.Node{TaggedAddresses: map[string]string{"wan": "1.2.3.4"}}, - nil, - ) - - store.On("GetNodeID", - types.NodeID("db11f0ac-0cbe-4215-80cc-b4e843f4df1e"), - structs.NodeEnterpriseMetaInDefaultPartition(), - structs.DefaultPeerKeyword, - ).Once().Return( - uint64(0), - &structs.Node{TaggedAddresses: map[string]string{"wan": "9.8.7.6"}}, - nil, - ) - - t.Cleanup(func() { - buf.AssertExpectations(t) - store.AssertExpectations(t) - mtime.AssertExpectations(t) - }) - - r := NewReadyServersEventPublisher(Config{ - GetStore: func() StateStore { return store }, - timeProvider: &mtime, - }) - - req := stream.SubscribeRequest{ - Topic: EventTopicReadyServers, - Subject: stream.SubjectNone, - } - - // get the first snapshot that should have the zero value event - _, err := r.HandleSnapshot(req, &buf) - require.NoError(t, err) - - // setup the value to be returned by the snapshot handler - r.snapshot, _ = r.readyServersEvents(exampleState) - - // now get the second snapshot which has actual servers - _, err = r.HandleSnapshot(req, &buf) - require.NoError(t, err) -} - -type fakePayload struct{} - -func (e fakePayload) Subject() stream.Subject { return stream.SubjectNone } - -func (e fakePayload) HasReadPermission(authz acl.Authorizer) bool { - return false -} - -func (e fakePayload) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - panic("fakePayload does not implement ToSubscriptionEvent") -} - -func TestExtractEventPayload(t *testing.T) { - t.Run("wrong-topic", func(t *testing.T) { - payload, err := ExtractEventPayload(stream.NewCloseSubscriptionEvent([]string{"foo"})) - require.Nil(t, payload) - require.Error(t, err) - require.Contains(t, err.Error(), "unexpected topic") - }) - - t.Run("unexpected-payload", func(t *testing.T) { - payload, err := ExtractEventPayload(stream.Event{ - Topic: EventTopicReadyServers, - Payload: fakePayload{}, - }) - require.Nil(t, payload) - require.Error(t, err) - require.Contains(t, err.Error(), "unexpected payload type") - }) - - t.Run("success", func(t *testing.T) { - expected := EventPayloadReadyServers{ - { - ID: "a7c340ae-ce17-47da-895c-af2509767b3d", - Address: "198.18.0.1", - Version: "1.2.3", - }, - } - actual, err := ExtractEventPayload(stream.Event{ - Topic: EventTopicReadyServers, - Payload: expected, - }) - - require.NoError(t, err) - require.Equal(t, expected, actual) - }) -} - -func TestReadyServerInfo_Equal(t *testing.T) { - base := func() *ReadyServerInfo { - return &ReadyServerInfo{ - ID: "0356e5ae-ed6b-4024-b953-e1b6a8f0f81b", - Version: "1.12.0", - Address: "198.18.0.1", - TaggedAddresses: map[string]string{ - "wan": "1.2.3.4", - }, - } - } - type testCase struct { - modify func(i *ReadyServerInfo) - equal bool - } - - cases := map[string]testCase{ - "unmodified": { - equal: true, - }, - "id-mod": { - modify: func(i *ReadyServerInfo) { i.ID = "30f8f451-e54b-4c7e-a533-b55dddb51be6" }, - }, - "version-mod": { - modify: func(i *ReadyServerInfo) { i.Version = "1.12.1" }, - }, - "address-mod": { - modify: func(i *ReadyServerInfo) { i.Address = "198.18.0.2" }, - }, - "tagged-addresses-added": { - modify: func(i *ReadyServerInfo) { i.TaggedAddresses["wan_ipv4"] = "1.2.3.4" }, - }, - "tagged-addresses-mod": { - modify: func(i *ReadyServerInfo) { i.TaggedAddresses["wan"] = "4.3.2.1" }, - }, - } - - for name, tcase := range cases { - t.Run(name, func(t *testing.T) { - original := base() - modified := base() - if tcase.modify != nil { - tcase.modify(modified) - } - - require.Equal(t, tcase.equal, original.Equal(modified)) - - }) - } -} diff --git a/agent/consul/catalog_endpoint.go b/agent/consul/catalog_endpoint.go index 5805d555568ff..77ac97e77edeb 100644 --- a/agent/consul/catalog_endpoint.go +++ b/agent/consul/catalog_endpoint.go @@ -12,7 +12,6 @@ import ( "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" "github.com/hashicorp/go-uuid" - hashstructure_v2 "github.com/mitchellh/hashstructure/v2" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/state" @@ -134,7 +133,7 @@ func (c *Catalog) Register(args *structs.RegisterRequest, reply *struct{}) error } // Check the complete register request against the given ACL policy. - _, ns, err := state.NodeServices(nil, args.Node, entMeta, args.PeerName) + _, ns, err := state.NodeServices(nil, args.Node, entMeta) if err != nil { return fmt.Errorf("Node lookup failed: %v", err) } @@ -368,7 +367,7 @@ func (c *Catalog) Deregister(args *structs.DeregisterRequest, reply *struct{}) e var ns *structs.NodeService if args.ServiceID != "" { - _, ns, err = state.NodeService(nil, args.Node, args.ServiceID, &args.EnterpriseMeta, args.PeerName) + _, ns, err = state.NodeService(args.Node, args.ServiceID, &args.EnterpriseMeta) if err != nil { return fmt.Errorf("Service lookup failed: %v", err) } @@ -376,7 +375,7 @@ func (c *Catalog) Deregister(args *structs.DeregisterRequest, reply *struct{}) e var nc *structs.HealthCheck if args.CheckID != "" { - _, nc, err = state.NodeCheck(args.Node, args.CheckID, &args.EnterpriseMeta, args.PeerName) + _, nc, err = state.NodeCheck(args.Node, args.CheckID, &args.EnterpriseMeta) if err != nil { return fmt.Errorf("Check lookup failed: %v", err) } @@ -487,9 +486,9 @@ func (c *Catalog) ListNodes(args *structs.DCSpecificRequest, reply *structs.Inde func(ws memdb.WatchSet, state *state.Store) error { var err error if len(args.NodeMetaFilters) > 0 { - reply.Index, reply.Nodes, err = state.NodesByMeta(ws, args.NodeMetaFilters, &args.EnterpriseMeta, args.PeerName) + reply.Index, reply.Nodes, err = state.NodesByMeta(ws, args.NodeMetaFilters, &args.EnterpriseMeta) } else { - reply.Index, reply.Nodes, err = state.Nodes(ws, &args.EnterpriseMeta, args.PeerName) + reply.Index, reply.Nodes, err = state.Nodes(ws, &args.EnterpriseMeta) } if err != nil { return err @@ -547,9 +546,9 @@ func (c *Catalog) ListServices(args *structs.DCSpecificRequest, reply *structs.I func(ws memdb.WatchSet, state *state.Store) error { var err error if len(args.NodeMetaFilters) > 0 { - reply.Index, reply.Services, err = state.ServicesByNodeMeta(ws, args.NodeMetaFilters, &args.EnterpriseMeta, args.PeerName) + reply.Index, reply.Services, err = state.ServicesByNodeMeta(ws, args.NodeMetaFilters, &args.EnterpriseMeta) } else { - reply.Index, reply.Services, err = state.Services(ws, &args.EnterpriseMeta, args.PeerName) + reply.Index, reply.Services, err = state.Services(ws, &args.EnterpriseMeta) } if err != nil { return err @@ -585,7 +584,7 @@ func (c *Catalog) ServiceList(args *structs.DCSpecificRequest, reply *structs.In &args.QueryOptions, &reply.QueryMeta, func(ws memdb.WatchSet, state *state.Store) error { - index, services, err := state.ServiceList(ws, &args.EnterpriseMeta, args.PeerName) + index, services, err := state.ServiceList(ws, &args.EnterpriseMeta) if err != nil { return err } @@ -612,13 +611,13 @@ func (c *Catalog) ServiceNodes(args *structs.ServiceSpecificRequest, reply *stru switch { case args.Connect: f = func(ws memdb.WatchSet, s *state.Store) (uint64, structs.ServiceNodes, error) { - return s.ConnectServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta, args.PeerName) + return s.ConnectServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta) } default: f = func(ws memdb.WatchSet, s *state.Store) (uint64, structs.ServiceNodes, error) { if args.ServiceAddress != "" { - return s.ServiceAddressNodes(ws, args.ServiceAddress, &args.EnterpriseMeta, args.PeerName) + return s.ServiceAddressNodes(ws, args.ServiceAddress, &args.EnterpriseMeta) } if args.TagFilter { @@ -631,10 +630,10 @@ func (c *Catalog) ServiceNodes(args *structs.ServiceSpecificRequest, reply *stru tags = []string{args.ServiceTag} } - return s.ServiceTagNodes(ws, args.ServiceName, tags, &args.EnterpriseMeta, args.PeerName) + return s.ServiceTagNodes(ws, args.ServiceName, tags, &args.EnterpriseMeta) } - return s.ServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta, args.PeerName) + return s.ServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta) } } @@ -664,11 +663,6 @@ func (c *Catalog) ServiceNodes(args *structs.ServiceSpecificRequest, reply *stru return err } - var ( - priorMergeHash uint64 - ranMergeOnce bool - ) - err = c.srv.blockingQuery( &args.QueryOptions, &reply.QueryMeta, @@ -678,53 +672,10 @@ func (c *Catalog) ServiceNodes(args *structs.ServiceSpecificRequest, reply *stru return err } - mergedServices := services - - if args.MergeCentralConfig { - var mergedServiceNodes structs.ServiceNodes - for _, sn := range services { - mergedsn := sn - ns := sn.ToNodeService() - if ns.IsSidecarProxy() || ns.IsGateway() { - cfgIndex, mergedns, err := mergeNodeServiceWithCentralConfig(ws, state, args, ns, c.logger) - if err != nil { - return err - } - if cfgIndex > index { - index = cfgIndex - } - mergedsn = mergedns.ToServiceNode(sn.Node) - } - mergedServiceNodes = append(mergedServiceNodes, mergedsn) - } - if len(mergedServiceNodes) > 0 { - mergedServices = mergedServiceNodes - } - - // Generate a hash of the mergedServices driving this response. - // Use it to determine if the response is identical to a prior wakeup. - newMergeHash, err := hashstructure_v2.Hash(mergedServices, hashstructure_v2.FormatV2, nil) - if err != nil { - return fmt.Errorf("error hashing reply for spurious wakeup suppression: %w", err) - } - if ranMergeOnce && priorMergeHash == newMergeHash { - // the below assignment is not required as the if condition already validates equality, - // but makes it more clear that prior value is being reset to the new hash on each run. - priorMergeHash = newMergeHash - reply.Index = index - // NOTE: the prior response is still alive inside of *reply, which is desirable - return errNotChanged - } else { - priorMergeHash = newMergeHash - ranMergeOnce = true - } - - } - - reply.Index, reply.ServiceNodes = index, mergedServices + reply.Index, reply.ServiceNodes = index, services if len(args.NodeMetaFilters) > 0 { var filtered structs.ServiceNodes - for _, service := range mergedServices { + for _, service := range services { if structs.SatisfiesMetaFilters(service.NodeMeta, args.NodeMetaFilters) { filtered = append(filtered, service) } @@ -817,7 +768,7 @@ func (c *Catalog) NodeServices(args *structs.NodeSpecificRequest, reply *structs &args.QueryOptions, &reply.QueryMeta, func(ws memdb.WatchSet, state *state.Store) error { - index, services, err := state.NodeServices(ws, args.Node, &args.EnterpriseMeta, args.PeerName) + index, services, err := state.NodeServices(ws, args.Node, &args.EnterpriseMeta) if err != nil { return err } @@ -873,7 +824,7 @@ func (c *Catalog) NodeServiceList(args *structs.NodeSpecificRequest, reply *stru &args.QueryOptions, &reply.QueryMeta, func(ws memdb.WatchSet, state *state.Store) error { - index, services, err := state.NodeServiceList(ws, args.Node, &args.EnterpriseMeta, args.PeerName) + index, services, err := state.NodeServiceList(ws, args.Node, &args.EnterpriseMeta) if err != nil { return err } diff --git a/agent/consul/catalog_endpoint_test.go b/agent/consul/catalog_endpoint_test.go index 67929575a702f..78ac4c36bde3b 100644 --- a/agent/consul/catalog_endpoint_test.go +++ b/agent/consul/catalog_endpoint_test.go @@ -3054,7 +3054,6 @@ func TestCatalog_GatewayServices_TerminatingGateway(t *testing.T) { CertFile: "api/client.crt", KeyFile: "api/client.key", SNI: "my-domain", - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -3063,7 +3062,6 @@ func TestCatalog_GatewayServices_TerminatingGateway(t *testing.T) { CAFile: "", CertFile: "", KeyFile: "", - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("redis", nil), @@ -3208,7 +3206,6 @@ func TestCatalog_GatewayServices_BothGateways(t *testing.T) { Service: structs.NewServiceName("api", nil), Gateway: structs.NewServiceName("gateway", nil), GatewayKind: structs.ServiceKindTerminatingGateway, - ServiceKind: structs.GatewayServiceKindService, }, } @@ -3431,13 +3428,11 @@ service "gateway" { Service: structs.NewServiceName("db", nil), Gateway: structs.NewServiceName("gateway", nil), GatewayKind: structs.ServiceKindTerminatingGateway, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db_replica", nil), Gateway: structs.NewServiceName("gateway", nil), GatewayKind: structs.ServiceKindTerminatingGateway, - ServiceKind: structs.GatewayServiceKindUnknown, }, } diff --git a/agent/consul/client_test.go b/agent/consul/client_test.go index d8f0fbd4df760..5c35e3f338781 100644 --- a/agent/consul/client_test.go +++ b/agent/consul/client_test.go @@ -510,7 +510,7 @@ func newDefaultDeps(t *testing.T, c *Config) Deps { logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ Name: c.NodeName, - Level: hclog.Trace, + Level: testutil.TestLogLevel, Output: testutil.NewLogBuffer(t), }) diff --git a/agent/consul/config.go b/agent/consul/config.go index 40d627bedef17..4b017da6bc5cc 100644 --- a/agent/consul/config.go +++ b/agent/consul/config.go @@ -604,8 +604,6 @@ type ReloadableConfig struct { RaftSnapshotThreshold int RaftSnapshotInterval time.Duration RaftTrailingLogs int - HeartbeatTimeout time.Duration - ElectionTimeout time.Duration } type RaftBoltDBConfig struct { diff --git a/agent/consul/config_endpoint.go b/agent/consul/config_endpoint.go index 0926fe9f58f8d..2e72f992ee0d4 100644 --- a/agent/consul/config_endpoint.go +++ b/agent/consul/config_endpoint.go @@ -9,9 +9,11 @@ import ( "github.com/armon/go-metrics/prometheus" "github.com/hashicorp/go-hclog" memdb "github.com/hashicorp/go-memdb" + "github.com/mitchellh/copystructure" hashstructure_v2 "github.com/mitchellh/hashstructure/v2" "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/agent/configentry" "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" ) @@ -480,6 +482,7 @@ func (c *ConfigEntry) ResolveServiceConfig(args *structs.ServiceConfigRequest, r } // Fetch all relevant config entries. + index, entries, err := state.ReadResolvedServiceConfigEntries( ws, args.Name, @@ -510,12 +513,11 @@ func (c *ConfigEntry) ResolveServiceConfig(args *structs.ServiceConfigRequest, r ranOnce = true } - thisReply, err := computeResolvedServiceConfig( + thisReply, err := c.computeResolvedServiceConfig( args, upstreamIDs, legacyUpstreams, entries, - c.logger, ) if err != nil { return err @@ -532,6 +534,214 @@ func (c *ConfigEntry) ResolveServiceConfig(args *structs.ServiceConfigRequest, r }) } +func (c *ConfigEntry) computeResolvedServiceConfig( + args *structs.ServiceConfigRequest, + upstreamIDs []structs.ServiceID, + legacyUpstreams bool, + entries *configentry.ResolvedServiceConfigSet, +) (*structs.ServiceConfigResponse, error) { + var thisReply structs.ServiceConfigResponse + + thisReply.MeshGateway.Mode = structs.MeshGatewayModeDefault + + // TODO(freddy) Refactor this into smaller set of state store functions + // Pass the WatchSet to both the service and proxy config lookups. If either is updated during the + // blocking query, this function will be rerun and these state store lookups will both be current. + // We use the default enterprise meta to look up the global proxy defaults because they are not namespaced. + var proxyConfGlobalProtocol string + proxyConf := entries.GetProxyDefaults(args.PartitionOrDefault()) + if proxyConf != nil { + // Apply the proxy defaults to the sidecar's proxy config + mapCopy, err := copystructure.Copy(proxyConf.Config) + if err != nil { + return nil, fmt.Errorf("failed to copy global proxy-defaults: %v", err) + } + thisReply.ProxyConfig = mapCopy.(map[string]interface{}) + thisReply.Mode = proxyConf.Mode + thisReply.TransparentProxy = proxyConf.TransparentProxy + thisReply.MeshGateway = proxyConf.MeshGateway + thisReply.Expose = proxyConf.Expose + + // Extract the global protocol from proxyConf for upstream configs. + rawProtocol := proxyConf.Config["protocol"] + if rawProtocol != nil { + var ok bool + proxyConfGlobalProtocol, ok = rawProtocol.(string) + if !ok { + return nil, fmt.Errorf("invalid protocol type %T", rawProtocol) + } + } + } + + serviceConf := entries.GetServiceDefaults( + structs.NewServiceID(args.Name, &args.EnterpriseMeta), + ) + if serviceConf != nil { + if serviceConf.Expose.Checks { + thisReply.Expose.Checks = true + } + if len(serviceConf.Expose.Paths) >= 1 { + thisReply.Expose.Paths = serviceConf.Expose.Paths + } + if serviceConf.MeshGateway.Mode != structs.MeshGatewayModeDefault { + thisReply.MeshGateway.Mode = serviceConf.MeshGateway.Mode + } + if serviceConf.Protocol != "" { + if thisReply.ProxyConfig == nil { + thisReply.ProxyConfig = make(map[string]interface{}) + } + thisReply.ProxyConfig["protocol"] = serviceConf.Protocol + } + if serviceConf.TransparentProxy.OutboundListenerPort != 0 { + thisReply.TransparentProxy.OutboundListenerPort = serviceConf.TransparentProxy.OutboundListenerPort + } + if serviceConf.TransparentProxy.DialedDirectly { + thisReply.TransparentProxy.DialedDirectly = serviceConf.TransparentProxy.DialedDirectly + } + if serviceConf.Mode != structs.ProxyModeDefault { + thisReply.Mode = serviceConf.Mode + } + + thisReply.Meta = serviceConf.Meta + } + + // First collect all upstreams into a set of seen upstreams. + // Upstreams can come from: + // - Explicitly from proxy registrations, and therefore as an argument to this RPC endpoint + // - Implicitly from centralized upstream config in service-defaults + seenUpstreams := map[structs.ServiceID]struct{}{} + + var ( + noUpstreamArgs = len(upstreamIDs) == 0 && len(args.Upstreams) == 0 + + // Check the args and the resolved value. If it was exclusively set via a config entry, then args.Mode + // will never be transparent because the service config request does not use the resolved value. + tproxy = args.Mode == structs.ProxyModeTransparent || thisReply.Mode == structs.ProxyModeTransparent + ) + + // The upstreams passed as arguments to this endpoint are the upstreams explicitly defined in a proxy registration. + // If no upstreams were passed, then we should only return the resolved config if the proxy is in transparent mode. + // Otherwise we would return a resolved upstream config to a proxy with no configured upstreams. + if noUpstreamArgs && !tproxy { + return &thisReply, nil + } + + // First store all upstreams that were provided in the request + for _, sid := range upstreamIDs { + if _, ok := seenUpstreams[sid]; !ok { + seenUpstreams[sid] = struct{}{} + } + } + + // Then store upstreams inferred from service-defaults and mapify the overrides. + var ( + upstreamConfigs = make(map[structs.ServiceID]*structs.UpstreamConfig) + upstreamDefaults *structs.UpstreamConfig + // usConfigs stores the opaque config map for each upstream and is keyed on the upstream's ID. + usConfigs = make(map[structs.ServiceID]map[string]interface{}) + ) + if serviceConf != nil && serviceConf.UpstreamConfig != nil { + for i, override := range serviceConf.UpstreamConfig.Overrides { + if override.Name == "" { + c.logger.Warn( + "Skipping UpstreamConfig.Overrides entry without a required name field", + "entryIndex", i, + "kind", serviceConf.GetKind(), + "name", serviceConf.GetName(), + "namespace", serviceConf.GetEnterpriseMeta().NamespaceOrEmpty(), + ) + continue // skip this impossible condition + } + seenUpstreams[override.ServiceID()] = struct{}{} + upstreamConfigs[override.ServiceID()] = override + } + if serviceConf.UpstreamConfig.Defaults != nil { + upstreamDefaults = serviceConf.UpstreamConfig.Defaults + + // Store the upstream defaults under a wildcard key so that they can be applied to + // upstreams that are inferred from intentions and do not have explicit upstream configuration. + cfgMap := make(map[string]interface{}) + upstreamDefaults.MergeInto(cfgMap) + + wildcard := structs.NewServiceID(structs.WildcardSpecifier, args.WithWildcardNamespace()) + usConfigs[wildcard] = cfgMap + } + } + + for upstream := range seenUpstreams { + resolvedCfg := make(map[string]interface{}) + + // The protocol of an upstream is resolved in this order: + // 1. Default protocol from proxy-defaults (how all services should be addressed) + // 2. Protocol for upstream service defined in its service-defaults (how the upstream wants to be addressed) + // 3. Protocol defined for the upstream in the service-defaults.(upstream_config.defaults|upstream_config.overrides) of the downstream + // (how the downstream wants to address it) + protocol := proxyConfGlobalProtocol + + upstreamSvcDefaults := entries.GetServiceDefaults( + structs.NewServiceID(upstream.ID, &upstream.EnterpriseMeta), + ) + if upstreamSvcDefaults != nil { + if upstreamSvcDefaults.Protocol != "" { + protocol = upstreamSvcDefaults.Protocol + } + } + + if protocol != "" { + resolvedCfg["protocol"] = protocol + } + + // Merge centralized defaults for all upstreams before configuration for specific upstreams + if upstreamDefaults != nil { + upstreamDefaults.MergeInto(resolvedCfg) + } + + // The MeshGateway value from the proxy registration overrides the one from upstream_defaults + // because it is specific to the proxy instance. + // + // The goal is to flatten the mesh gateway mode in this order: + // 0. Value from centralized upstream_defaults + // 1. Value from local proxy registration + // 2. Value from centralized upstream_config + // 3. Value from local upstream definition. This last step is done in the client's service manager. + if !args.MeshGateway.IsZero() { + resolvedCfg["mesh_gateway"] = args.MeshGateway + } + + if upstreamConfigs[upstream] != nil { + upstreamConfigs[upstream].MergeInto(resolvedCfg) + } + + if len(resolvedCfg) > 0 { + usConfigs[upstream] = resolvedCfg + } + } + + // don't allocate the slices just to not fill them + if len(usConfigs) == 0 { + return &thisReply, nil + } + + if legacyUpstreams { + // For legacy upstreams we return a map that is only keyed on the string ID, since they precede namespaces + thisReply.UpstreamConfigs = make(map[string]map[string]interface{}) + + for us, conf := range usConfigs { + thisReply.UpstreamConfigs[us.ID] = conf + } + + } else { + thisReply.UpstreamIDConfigs = make(structs.OpaqueUpstreamConfigs, 0, len(usConfigs)) + + for us, conf := range usConfigs { + thisReply.UpstreamIDConfigs = append(thisReply.UpstreamIDConfigs, + structs.OpaqueUpstreamConfig{Upstream: us, Config: conf}) + } + } + + return &thisReply, nil +} + func gateWriteToSecondary(targetDC, localDC, primaryDC, kind string) error { // ExportedServices entries are gated from interactions from secondary DCs // because non-default partitions cannot be created in secondaries diff --git a/agent/consul/config_endpoint_test.go b/agent/consul/config_endpoint_test.go index 0df54f9a46fe7..3c60818e4ba66 100644 --- a/agent/consul/config_endpoint_test.go +++ b/agent/consul/config_endpoint_test.go @@ -15,7 +15,6 @@ import ( "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/configentry" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" ) @@ -49,7 +48,7 @@ func TestConfigEntry_Apply(t *testing.T) { // wait for cross-dc queries to work testrpc.WaitForLeader(t, s2.RPC, "dc1") - testutil.RunStep(t, "send the apply request to dc2 - it should get forwarded to dc1", func(t *testing.T) { + runStep(t, "send the apply request to dc2 - it should get forwarded to dc1", func(t *testing.T) { updated := &structs.ServiceConfigEntry{ Name: "foo", } @@ -63,7 +62,7 @@ func TestConfigEntry_Apply(t *testing.T) { }) var originalModifyIndex uint64 - testutil.RunStep(t, "verify the entry was updated in the primary and secondary", func(t *testing.T) { + runStep(t, "verify the entry was updated in the primary and secondary", func(t *testing.T) { // the previous RPC should not return until the primary has been updated but will return // before the secondary has the data. _, entry, err := s1.fsm.State().ConfigEntry(nil, structs.ServiceDefaults, "foo", nil) @@ -84,7 +83,7 @@ func TestConfigEntry_Apply(t *testing.T) { originalModifyIndex = serviceConf.ModifyIndex }) - testutil.RunStep(t, "update the entry again in the primary", func(t *testing.T) { + runStep(t, "update the entry again in the primary", func(t *testing.T) { updated := &structs.ServiceConfigEntry{ Name: "foo", MeshGateway: structs.MeshGatewayConfig{ @@ -98,12 +97,12 @@ func TestConfigEntry_Apply(t *testing.T) { Entry: updated, } - testutil.RunStep(t, "with the wrong CAS", func(t *testing.T) { + runStep(t, "with the wrong CAS", func(t *testing.T) { var out bool require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &args, &out)) require.False(t, out) }) - testutil.RunStep(t, "with the correct CAS", func(t *testing.T) { + runStep(t, "with the correct CAS", func(t *testing.T) { var out bool args.Entry.GetRaftIndex().ModifyIndex = originalModifyIndex require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.Apply", &args, &out)) @@ -111,7 +110,7 @@ func TestConfigEntry_Apply(t *testing.T) { }) }) - testutil.RunStep(t, "verify the entry was updated in the state store", func(t *testing.T) { + runStep(t, "verify the entry was updated in the state store", func(t *testing.T) { _, entry, err := s1.fsm.State().ConfigEntry(nil, structs.ServiceDefaults, "foo", nil) require.NoError(t, err) @@ -123,10 +122,10 @@ func TestConfigEntry_Apply(t *testing.T) { require.Equal(t, structs.ServiceDefaults, serviceConf.Kind) }) - testutil.RunStep(t, "verify no-op updates do not advance the raft indexes", func(t *testing.T) { + runStep(t, "verify no-op updates do not advance the raft indexes", func(t *testing.T) { var modifyIndex uint64 for i := 0; i < 3; i++ { - testutil.RunStep(t, fmt.Sprintf("iteration %d", i), func(t *testing.T) { + runStep(t, fmt.Sprintf("iteration %d", i), func(t *testing.T) { args := structs.ConfigEntryRequest{ Datacenter: "dc1", Op: structs.ConfigEntryUpsert, @@ -330,7 +329,7 @@ func TestConfigEntry_Get_BlockOnNonExistent(t *testing.T) { require.True(t, out) } - testutil.RunStep(t, "test the errNotFound path", func(t *testing.T) { + runStep(t, "test the errNotFound path", func(t *testing.T) { rpcBlockingQueryTestHarness(t, func(minQueryIndex uint64) (*structs.QueryMeta, <-chan error) { args := structs.ConfigEntryQuery{ @@ -509,7 +508,7 @@ func TestConfigEntry_List_BlockOnNoChange(t *testing.T) { ) } - testutil.RunStep(t, "test the errNotFound path", func(t *testing.T) { + runStep(t, "test the errNotFound path", func(t *testing.T) { run(t, "other") }) @@ -532,7 +531,7 @@ func TestConfigEntry_List_BlockOnNoChange(t *testing.T) { } } - testutil.RunStep(t, "test the errNotChanged path", func(t *testing.T) { + runStep(t, "test the errNotChanged path", func(t *testing.T) { run(t, "completely-different-other") }) } @@ -802,7 +801,7 @@ func TestConfigEntry_Delete(t *testing.T) { // wait for cross-dc queries to work testrpc.WaitForLeader(t, s2.RPC, "dc1") - testutil.RunStep(t, "create a dummy service in the state store to look up", func(t *testing.T) { + runStep(t, "create a dummy service in the state store to look up", func(t *testing.T) { entry := &structs.ServiceConfigEntry{ Kind: structs.ServiceDefaults, Name: "foo", @@ -810,7 +809,7 @@ func TestConfigEntry_Delete(t *testing.T) { require.NoError(t, s1.fsm.State().EnsureConfigEntry(1, entry)) }) - testutil.RunStep(t, "verify it exists in the primary and is replicated to the secondary", func(t *testing.T) { + runStep(t, "verify it exists in the primary and is replicated to the secondary", func(t *testing.T) { // Verify it's there. _, existing, err := s1.fsm.State().ConfigEntry(nil, structs.ServiceDefaults, "foo", nil) require.NoError(t, err) @@ -828,7 +827,7 @@ func TestConfigEntry_Delete(t *testing.T) { }) }) - testutil.RunStep(t, "send the delete request to dc2 - it should get forwarded to dc1", func(t *testing.T) { + runStep(t, "send the delete request to dc2 - it should get forwarded to dc1", func(t *testing.T) { args := structs.ConfigEntryRequest{ Datacenter: "dc2", Entry: &structs.ServiceConfigEntry{ @@ -841,7 +840,7 @@ func TestConfigEntry_Delete(t *testing.T) { require.True(t, out.Deleted) }) - testutil.RunStep(t, "verify the entry was deleted in the primary and secondary", func(t *testing.T) { + runStep(t, "verify the entry was deleted in the primary and secondary", func(t *testing.T) { // Verify the entry was deleted. _, existing, err := s1.fsm.State().ConfigEntry(nil, structs.ServiceDefaults, "foo", nil) require.NoError(t, err) @@ -855,7 +854,7 @@ func TestConfigEntry_Delete(t *testing.T) { }) }) - testutil.RunStep(t, "delete in dc1 again - should be fine", func(t *testing.T) { + runStep(t, "delete in dc1 again - should be fine", func(t *testing.T) { args := structs.ConfigEntryRequest{ Datacenter: "dc1", Entry: &structs.ServiceConfigEntry{ @@ -1810,7 +1809,7 @@ func TestConfigEntry_ResolveServiceConfig_Upstreams_Blocking(t *testing.T) { var index uint64 - testutil.RunStep(t, "foo and bar should be both http", func(t *testing.T) { + runStep(t, "foo and bar should be both http", func(t *testing.T) { // Verify that we get the results of service-defaults for 'foo' and 'bar'. var out structs.ServiceConfigResponse require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.ResolveServiceConfig", @@ -1844,7 +1843,7 @@ func TestConfigEntry_ResolveServiceConfig_Upstreams_Blocking(t *testing.T) { index = out.Index }) - testutil.RunStep(t, "blocking query for foo wakes on bar entry delete", func(t *testing.T) { + runStep(t, "blocking query for foo wakes on bar entry delete", func(t *testing.T) { // Now setup a blocking query for 'foo' while we erase the // service-defaults for bar. @@ -1897,7 +1896,7 @@ func TestConfigEntry_ResolveServiceConfig_Upstreams_Blocking(t *testing.T) { index = out.Index }) - testutil.RunStep(t, "foo should be http and bar should be unset", func(t *testing.T) { + runStep(t, "foo should be http and bar should be unset", func(t *testing.T) { // Verify that we get the results of service-defaults for just 'foo'. var out structs.ServiceConfigResponse require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConfigEntry.ResolveServiceConfig", @@ -1923,7 +1922,7 @@ func TestConfigEntry_ResolveServiceConfig_Upstreams_Blocking(t *testing.T) { index = out.Index }) - testutil.RunStep(t, "blocking query for foo wakes on foo entry delete", func(t *testing.T) { + runStep(t, "blocking query for foo wakes on foo entry delete", func(t *testing.T) { // Now setup a blocking query for 'foo' while we erase the // service-defaults for foo. @@ -2184,7 +2183,7 @@ func TestConfigEntry_ResolveServiceConfig_BlockOnNoChange(t *testing.T) { require.True(t, out) } - testutil.RunStep(t, "test the errNotFound path", func(t *testing.T) { + runStep(t, "test the errNotFound path", func(t *testing.T) { run(t, "other") }) @@ -2200,7 +2199,7 @@ func TestConfigEntry_ResolveServiceConfig_BlockOnNoChange(t *testing.T) { require.True(t, out) } - testutil.RunStep(t, "test the errNotChanged path", func(t *testing.T) { + runStep(t, "test the errNotChanged path", func(t *testing.T) { run(t, "completely-different-other") }) } @@ -2344,6 +2343,13 @@ func TestConfigEntry_ProxyDefaultsExposeConfig(t *testing.T) { require.Equal(t, expose, proxyConf.Expose) } +func runStep(t *testing.T, name string, fn func(t *testing.T)) { + t.Helper() + if !t.Run(name, fn) { + t.FailNow() + } +} + func Test_gateWriteToSecondary(t *testing.T) { type args struct { targetDC string diff --git a/agent/consul/connect_ca_endpoint.go b/agent/consul/connect_ca_endpoint.go index 29cfc38bec0be..c325ff1237906 100644 --- a/agent/consul/connect_ca_endpoint.go +++ b/agent/consul/connect_ca_endpoint.go @@ -24,7 +24,7 @@ var ( // consul.ErrRateLimited.Error()` which is very sad. Short of replacing our // RPC mechanism it's hard to know how to make that much better though. ErrConnectNotEnabled = errors.New("Connect must be enabled in order to use this endpoint") - ErrRateLimited = errors.New("Rate limit reached, try again later") // Note: we depend on this error message in the gRPC ConnectCA.Sign endpoint (see: isRateLimitError). + ErrRateLimited = errors.New("Rate limit reached, try again later") ErrNotPrimaryDatacenter = errors.New("not the primary datacenter") ErrStateReadOnly = errors.New("CA Provider State is read-only") ) diff --git a/agent/consul/connect_ca_endpoint_test.go b/agent/consul/connect_ca_endpoint_test.go index ee7d34d4dfc36..f69960f5f5c92 100644 --- a/agent/consul/connect_ca_endpoint_test.go +++ b/agent/consul/connect_ca_endpoint_test.go @@ -442,7 +442,7 @@ func TestConnectCAConfig_TriggerRotation(t *testing.T) { // Make sure the new root has been added along with an intermediate // cross-signed by the old root. var newRootPEM string - testutil.RunStep(t, "ensure roots look correct", func(t *testing.T) { + runStep(t, "ensure roots look correct", func(t *testing.T) { args := &structs.DCSpecificRequest{ Datacenter: "dc1", } @@ -483,7 +483,7 @@ func TestConnectCAConfig_TriggerRotation(t *testing.T) { } }) - testutil.RunStep(t, "verify the new config was set", func(t *testing.T) { + runStep(t, "verify the new config was set", func(t *testing.T) { args := &structs.DCSpecificRequest{ Datacenter: "dc1", } @@ -498,7 +498,7 @@ func TestConnectCAConfig_TriggerRotation(t *testing.T) { assert.Equal(t, actual, expected) }) - testutil.RunStep(t, "verify that new leaf certs get the cross-signed intermediate bundled", func(t *testing.T) { + runStep(t, "verify that new leaf certs get the cross-signed intermediate bundled", func(t *testing.T) { // Generate a CSR and request signing spiffeId := connect.TestSpiffeIDService(t, "web") csr, _ := connect.TestCSR(t, spiffeId) @@ -509,7 +509,7 @@ func TestConnectCAConfig_TriggerRotation(t *testing.T) { var reply structs.IssuedCert require.NoError(t, msgpackrpc.CallWithCodec(codec, "ConnectCA.Sign", args, &reply)) - testutil.RunStep(t, "verify that the cert is signed by the new CA", func(t *testing.T) { + runStep(t, "verify that the cert is signed by the new CA", func(t *testing.T) { roots := x509.NewCertPool() require.True(t, roots.AppendCertsFromPEM([]byte(newRootPEM))) leaf, err := connect.ParseCert(reply.CertPEM) @@ -520,7 +520,7 @@ func TestConnectCAConfig_TriggerRotation(t *testing.T) { require.NoError(t, err) }) - testutil.RunStep(t, "and that it validates via the intermediate", func(t *testing.T) { + runStep(t, "and that it validates via the intermediate", func(t *testing.T) { roots := x509.NewCertPool() assert.True(t, roots.AppendCertsFromPEM([]byte(oldRoot.RootCert))) leaf, err := connect.ParseCert(reply.CertPEM) @@ -540,7 +540,7 @@ func TestConnectCAConfig_TriggerRotation(t *testing.T) { require.NoError(t, err) }) - testutil.RunStep(t, "verify other fields", func(t *testing.T) { + runStep(t, "verify other fields", func(t *testing.T) { assert.Equal(t, "web", reply.Service) assert.Equal(t, spiffeId.URI().String(), reply.ServiceURI) }) diff --git a/agent/consul/discovery_chain_endpoint_test.go b/agent/consul/discovery_chain_endpoint_test.go index 21c34aa86449a..97ae5b1243404 100644 --- a/agent/consul/discovery_chain_endpoint_test.go +++ b/agent/consul/discovery_chain_endpoint_test.go @@ -13,7 +13,6 @@ import ( "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/testrpc" ) @@ -314,7 +313,7 @@ func TestDiscoveryChainEndpoint_Get_BlockOnNoChange(t *testing.T) { ) } - testutil.RunStep(t, "test the errNotFound path", func(t *testing.T) { + runStep(t, "test the errNotFound path", func(t *testing.T) { run(t, "other") }) @@ -330,7 +329,7 @@ func TestDiscoveryChainEndpoint_Get_BlockOnNoChange(t *testing.T) { require.True(t, out) } - testutil.RunStep(t, "test the errNotChanged path", func(t *testing.T) { + runStep(t, "test the errNotChanged path", func(t *testing.T) { run(t, "completely-different-other") }) } diff --git a/agent/consul/fsm/commands_oss.go b/agent/consul/fsm/commands_oss.go index 861bffdfd6404..b07d12c14f197 100644 --- a/agent/consul/fsm/commands_oss.go +++ b/agent/consul/fsm/commands_oss.go @@ -10,7 +10,6 @@ import ( "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/proto/pbpeering" ) var CommandsSummaries = []prometheus.SummaryDefinition{ @@ -94,10 +93,6 @@ var CommandsSummaries = []prometheus.SummaryDefinition{ Name: []string{"fsm", "system_metadata"}, Help: "Measures the time it takes to apply a system metadata operation to the FSM.", }, - { - Name: []string{"fsm", "peering"}, - Help: "Measures the time it takes to apply a peering operation to the FSM.", - }, // TODO(kit): We generate the config-entry fsm summaries by reading off of the request. It is // possible to statically declare these when we know all of the names, but I didn't get to it // in this patch. Config-entries are known though and we should add these in the future. @@ -136,11 +131,6 @@ func init() { registerCommand(structs.ACLAuthMethodDeleteRequestType, (*FSM).applyACLAuthMethodDeleteOperation) registerCommand(structs.FederationStateRequestType, (*FSM).applyFederationStateOperation) registerCommand(structs.SystemMetadataRequestType, (*FSM).applySystemMetadataOperation) - registerCommand(structs.PeeringWriteType, (*FSM).applyPeeringWrite) - registerCommand(structs.PeeringDeleteType, (*FSM).applyPeeringDelete) - registerCommand(structs.PeeringTerminateByIDType, (*FSM).applyPeeringTerminate) - registerCommand(structs.PeeringTrustBundleWriteType, (*FSM).applyPeeringTrustBundleWrite) - registerCommand(structs.PeeringTrustBundleDeleteType, (*FSM).applyPeeringTrustBundleDelete) } func (c *FSM) applyRegister(buf []byte, index uint64) interface{} { @@ -169,17 +159,17 @@ func (c *FSM) applyDeregister(buf []byte, index uint64) interface{} { // here is also baked into vetDeregisterWithACL() in acl.go, so if you // make changes here, be sure to also adjust the code over there. if req.ServiceID != "" { - if err := c.state.DeleteService(index, req.Node, req.ServiceID, &req.EnterpriseMeta, req.PeerName); err != nil { + if err := c.state.DeleteService(index, req.Node, req.ServiceID, &req.EnterpriseMeta); err != nil { c.logger.Warn("DeleteNodeService failed", "error", err) return err } } else if req.CheckID != "" { - if err := c.state.DeleteCheck(index, req.Node, req.CheckID, &req.EnterpriseMeta, req.PeerName); err != nil { + if err := c.state.DeleteCheck(index, req.Node, req.CheckID, &req.EnterpriseMeta); err != nil { c.logger.Warn("DeleteNodeCheck failed", "error", err) return err } } else { - if err := c.state.DeleteNode(index, req.Node, &req.EnterpriseMeta, req.PeerName); err != nil { + if err := c.state.DeleteNode(index, req.Node, &req.EnterpriseMeta); err != nil { c.logger.Warn("DeleteNode failed", "error", err) return err } @@ -689,73 +679,3 @@ func (c *FSM) applySystemMetadataOperation(buf []byte, index uint64) interface{} return fmt.Errorf("invalid system metadata operation type: %v", req.Op) } } - -func (c *FSM) applyPeeringWrite(buf []byte, index uint64) interface{} { - var req pbpeering.PeeringWriteRequest - if err := structs.DecodeProto(buf, &req); err != nil { - panic(fmt.Errorf("failed to decode peering write request: %v", err)) - } - - defer metrics.MeasureSinceWithLabels([]string{"fsm", "peering"}, time.Now(), - []metrics.Label{{Name: "op", Value: "write"}}) - - return c.state.PeeringWrite(index, req.Peering) -} - -// TODO(peering): replace with deferred deletion since this operation -// should involve cleanup of data associated with the peering. -func (c *FSM) applyPeeringDelete(buf []byte, index uint64) interface{} { - var req pbpeering.PeeringDeleteRequest - if err := structs.DecodeProto(buf, &req); err != nil { - panic(fmt.Errorf("failed to decode peering delete request: %v", err)) - } - - defer metrics.MeasureSinceWithLabels([]string{"fsm", "peering"}, time.Now(), - []metrics.Label{{Name: "op", Value: "delete"}}) - - q := state.Query{ - Value: req.Name, - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(req.Partition), - } - return c.state.PeeringDelete(index, q) -} - -func (c *FSM) applyPeeringTerminate(buf []byte, index uint64) interface{} { - var req pbpeering.PeeringTerminateByIDRequest - if err := structs.DecodeProto(buf, &req); err != nil { - panic(fmt.Errorf("failed to decode peering delete request: %v", err)) - } - - defer metrics.MeasureSinceWithLabels([]string{"fsm", "peering"}, time.Now(), - []metrics.Label{{Name: "op", Value: "terminate"}}) - - return c.state.PeeringTerminateByID(index, req.ID) -} - -func (c *FSM) applyPeeringTrustBundleWrite(buf []byte, index uint64) interface{} { - var req pbpeering.PeeringTrustBundleWriteRequest - if err := structs.DecodeProto(buf, &req); err != nil { - panic(fmt.Errorf("failed to decode peering trust bundle write request: %v", err)) - } - - defer metrics.MeasureSinceWithLabels([]string{"fsm", "peering_trust_bundle"}, time.Now(), - []metrics.Label{{Name: "op", Value: "write"}}) - - return c.state.PeeringTrustBundleWrite(index, req.PeeringTrustBundle) -} - -func (c *FSM) applyPeeringTrustBundleDelete(buf []byte, index uint64) interface{} { - var req pbpeering.PeeringTrustBundleDeleteRequest - if err := structs.DecodeProto(buf, &req); err != nil { - panic(fmt.Errorf("failed to decode peering trust bundle delete request: %v", err)) - } - - defer metrics.MeasureSinceWithLabels([]string{"fsm", "peering_trust_bundle"}, time.Now(), - []metrics.Label{{Name: "op", Value: "delete"}}) - - q := state.Query{ - Value: req.Name, - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(req.Partition), - } - return c.state.PeeringTrustBundleDelete(index, q) -} diff --git a/agent/consul/fsm/commands_oss_test.go b/agent/consul/fsm/commands_oss_test.go index 061c4a9cc6189..27a21c871dedd 100644 --- a/agent/consul/fsm/commands_oss_test.go +++ b/agent/consul/fsm/commands_oss_test.go @@ -69,7 +69,7 @@ func TestFSM_RegisterNode(t *testing.T) { } // Verify we are registered - _, node, err := fsm.state.GetNode("foo", nil, "") + _, node, err := fsm.state.GetNode("foo", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -81,7 +81,7 @@ func TestFSM_RegisterNode(t *testing.T) { } // Verify service registered - _, services, err := fsm.state.NodeServices(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition(), "") + _, services, err := fsm.state.NodeServices(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition()) if err != nil { t.Fatalf("err: %s", err) } @@ -128,7 +128,7 @@ func TestFSM_RegisterNode_Service(t *testing.T) { } // Verify we are registered - _, node, err := fsm.state.GetNode("foo", nil, "") + _, node, err := fsm.state.GetNode("foo", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -137,7 +137,7 @@ func TestFSM_RegisterNode_Service(t *testing.T) { } // Verify service registered - _, services, err := fsm.state.NodeServices(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition(), "") + _, services, err := fsm.state.NodeServices(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition()) if err != nil { t.Fatalf("err: %s", err) } @@ -146,7 +146,7 @@ func TestFSM_RegisterNode_Service(t *testing.T) { } // Verify check - _, checks, err := fsm.state.NodeChecks(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition(), "") + _, checks, err := fsm.state.NodeChecks(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition()) if err != nil { t.Fatalf("err: %s", err) } @@ -200,7 +200,7 @@ func TestFSM_DeregisterService(t *testing.T) { } // Verify we are registered - _, node, err := fsm.state.GetNode("foo", nil, "") + _, node, err := fsm.state.GetNode("foo", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -209,7 +209,7 @@ func TestFSM_DeregisterService(t *testing.T) { } // Verify service not registered - _, services, err := fsm.state.NodeServices(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition(), "") + _, services, err := fsm.state.NodeServices(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition()) if err != nil { t.Fatalf("err: %s", err) } @@ -263,7 +263,7 @@ func TestFSM_DeregisterCheck(t *testing.T) { } // Verify we are registered - _, node, err := fsm.state.GetNode("foo", nil, "") + _, node, err := fsm.state.GetNode("foo", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -272,7 +272,7 @@ func TestFSM_DeregisterCheck(t *testing.T) { } // Verify check not registered - _, checks, err := fsm.state.NodeChecks(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition(), "") + _, checks, err := fsm.state.NodeChecks(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition()) if err != nil { t.Fatalf("err: %s", err) } @@ -332,7 +332,7 @@ func TestFSM_DeregisterNode(t *testing.T) { } // Verify we are not registered - _, node, err := fsm.state.GetNode("foo", nil, "") + _, node, err := fsm.state.GetNode("foo", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -341,7 +341,7 @@ func TestFSM_DeregisterNode(t *testing.T) { } // Verify service not registered - _, services, err := fsm.state.NodeServices(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition(), "") + _, services, err := fsm.state.NodeServices(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition()) if err != nil { t.Fatalf("err: %s", err) } @@ -350,7 +350,7 @@ func TestFSM_DeregisterNode(t *testing.T) { } // Verify checks not registered - _, checks, err := fsm.state.NodeChecks(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition(), "") + _, checks, err := fsm.state.NodeChecks(nil, "foo", structs.DefaultEnterpriseMetaInDefaultPartition()) if err != nil { t.Fatalf("err: %s", err) } @@ -1468,7 +1468,7 @@ func TestFSM_Chunking_Lifecycle(t *testing.T) { // Verify we are not registered for i := 0; i < 10; i++ { - _, node, err := fsm.state.GetNode(fmt.Sprintf("foo%d", i), nil, "") + _, node, err := fsm.state.GetNode(fmt.Sprintf("foo%d", i), nil) require.NoError(t, err) assert.Nil(t, node) } @@ -1491,7 +1491,7 @@ func TestFSM_Chunking_Lifecycle(t *testing.T) { // Verify we are still not registered for i := 0; i < 10; i++ { - _, node, err := fsm2.state.GetNode(fmt.Sprintf("foo%d", i), nil, "") + _, node, err := fsm2.state.GetNode(fmt.Sprintf("foo%d", i), nil) require.NoError(t, err) assert.Nil(t, node) } @@ -1515,19 +1515,19 @@ func TestFSM_Chunking_Lifecycle(t *testing.T) { // Verify we are registered for i := 0; i < 10; i++ { - _, node, err := fsm2.state.GetNode(fmt.Sprintf("foo%d", i), nil, "") + _, node, err := fsm2.state.GetNode(fmt.Sprintf("foo%d", i), nil) require.NoError(t, err) assert.NotNil(t, node) // Verify service registered - _, services, err := fsm2.state.NodeServices(nil, fmt.Sprintf("foo%d", i), structs.DefaultEnterpriseMetaInDefaultPartition(), "") + _, services, err := fsm2.state.NodeServices(nil, fmt.Sprintf("foo%d", i), structs.DefaultEnterpriseMetaInDefaultPartition()) require.NoError(t, err) require.NotNil(t, services) _, ok := services.Services["db"] assert.True(t, ok) // Verify check - _, checks, err := fsm2.state.NodeChecks(nil, fmt.Sprintf("foo%d", i), nil, "") + _, checks, err := fsm2.state.NodeChecks(nil, fmt.Sprintf("foo%d", i), nil) require.NoError(t, err) require.NotNil(t, checks) assert.Equal(t, string(checks[0].CheckID), "db") diff --git a/agent/consul/fsm/snapshot_oss.go b/agent/consul/fsm/snapshot_oss.go index a58f0cf1dbf00..48dea223e1e44 100644 --- a/agent/consul/fsm/snapshot_oss.go +++ b/agent/consul/fsm/snapshot_oss.go @@ -6,7 +6,6 @@ import ( "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" ) func init() { @@ -36,8 +35,6 @@ func init() { registerRestorer(structs.SystemMetadataRequestType, restoreSystemMetadata) registerRestorer(structs.ServiceVirtualIPRequestType, restoreServiceVirtualIP) registerRestorer(structs.FreeVirtualIPRequestType, restoreFreeVirtualIP) - registerRestorer(structs.PeeringWriteType, restorePeering) - registerRestorer(structs.PeeringTrustBundleWriteType, restorePeeringTrustBundle) } func persistOSS(s *snapshot, sink raft.SnapshotSink, encoder *codec.Encoder) error { @@ -89,12 +86,6 @@ func persistOSS(s *snapshot, sink raft.SnapshotSink, encoder *codec.Encoder) err if err := s.persistIndex(sink, encoder); err != nil { return err } - if err := s.persistPeerings(sink, encoder); err != nil { - return err - } - if err := s.persistPeeringTrustBundles(sink, encoder); err != nil { - return err - } return nil } @@ -112,7 +103,16 @@ func (s *snapshot) persistNodes(sink raft.SnapshotSink, n := node.(*structs.Node) nodeEntMeta := n.GetEnterpriseMeta() - req := n.ToRegisterRequest() + req := structs.RegisterRequest{ + ID: n.ID, + Node: n.Node, + Datacenter: n.Datacenter, + Address: n.Address, + TaggedAddresses: n.TaggedAddresses, + NodeMeta: n.Meta, + RaftIndex: n.RaftIndex, + EnterpriseMeta: *nodeEntMeta, + } // Register the node itself if _, err := sink.Write([]byte{byte(structs.RegisterRequestType)}); err != nil { @@ -123,7 +123,7 @@ func (s *snapshot) persistNodes(sink raft.SnapshotSink, } // Register each service this node has - services, err := s.state.Services(n.Node, nodeEntMeta, n.PeerName) + services, err := s.state.Services(n.Node, nodeEntMeta) if err != nil { return err } @@ -139,7 +139,7 @@ func (s *snapshot) persistNodes(sink raft.SnapshotSink, // Register each check this node has req.Service = nil - checks, err := s.state.Checks(n.Node, nodeEntMeta, n.PeerName) + checks, err := s.state.Checks(n.Node, nodeEntMeta) if err != nil { return err } @@ -161,6 +161,7 @@ func (s *snapshot) persistNodes(sink raft.SnapshotSink, if err != nil { return err } + // TODO(partitions) for coord := coords.Next(); coord != nil; coord = coords.Next() { if _, err := sink.Write([]byte{byte(structs.CoordinateBatchUpdateType)}); err != nil { return err @@ -546,42 +547,6 @@ func (s *snapshot) persistVirtualIPs(sink raft.SnapshotSink, encoder *codec.Enco return nil } -func (s *snapshot) persistPeerings(sink raft.SnapshotSink, encoder *codec.Encoder) error { - peerings, err := s.state.Peerings() - if err != nil { - return err - } - - for entry := peerings.Next(); entry != nil; entry = peerings.Next() { - if _, err := sink.Write([]byte{byte(structs.PeeringWriteType)}); err != nil { - return err - } - if err := encoder.Encode(entry.(*pbpeering.Peering)); err != nil { - return err - } - } - - return nil -} - -func (s *snapshot) persistPeeringTrustBundles(sink raft.SnapshotSink, encoder *codec.Encoder) error { - ptbs, err := s.state.PeeringTrustBundles() - if err != nil { - return err - } - - for entry := ptbs.Next(); entry != nil; entry = ptbs.Next() { - if _, err := sink.Write([]byte{byte(structs.PeeringTrustBundleWriteType)}); err != nil { - return err - } - if err := encoder.Encode(entry.(*pbpeering.PeeringTrustBundle)); err != nil { - return err - } - } - - return nil -} - func restoreRegistration(header *SnapshotHeader, restore *state.Restore, decoder *codec.Decoder) error { var req structs.RegisterRequest if err := decoder.Decode(&req); err != nil { @@ -884,25 +849,3 @@ func restoreFreeVirtualIP(header *SnapshotHeader, restore *state.Restore, decode } return nil } - -func restorePeering(header *SnapshotHeader, restore *state.Restore, decoder *codec.Decoder) error { - var req pbpeering.Peering - if err := decoder.Decode(&req); err != nil { - return err - } - if err := restore.Peering(&req); err != nil { - return err - } - return nil -} - -func restorePeeringTrustBundle(header *SnapshotHeader, restore *state.Restore, decoder *codec.Decoder) error { - var req pbpeering.PeeringTrustBundle - if err := decoder.Decode(&req); err != nil { - return err - } - if err := restore.PeeringTrustBundle(&req); err != nil { - return err - } - return nil -} diff --git a/agent/consul/fsm/snapshot_oss_test.go b/agent/consul/fsm/snapshot_oss_test.go index 558abf4beb48f..c75bbc19730f6 100644 --- a/agent/consul/fsm/snapshot_oss_test.go +++ b/agent/consul/fsm/snapshot_oss_test.go @@ -17,7 +17,6 @@ import ( "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/lib/stringslice" - "github.com/hashicorp/consul/proto/pbpeering" "github.com/hashicorp/consul/sdk/testutil" ) @@ -474,18 +473,6 @@ func TestFSM_SnapshotRestore_OSS(t *testing.T) { require.Equal(t, expect[i], sn.Service.Name) } - // Peerings - require.NoError(t, fsm.state.PeeringWrite(31, &pbpeering.Peering{ - Name: "baz", - })) - - // Peering Trust Bundles - require.NoError(t, fsm.state.PeeringTrustBundleWrite(32, &pbpeering.PeeringTrustBundle{ - TrustDomain: "qux.com", - PeerName: "qux", - RootPEMs: []string{"qux certificate bundle"}, - })) - // Snapshot snap, err := fsm.Snapshot() require.NoError(t, err) @@ -541,7 +528,7 @@ func TestFSM_SnapshotRestore_OSS(t *testing.T) { require.NoError(t, fsm2.Restore(sink)) // Verify the contents - _, nodes, err := fsm2.state.Nodes(nil, nil, "") + _, nodes, err := fsm2.state.Nodes(nil, nil) require.NoError(t, err) require.Len(t, nodes, 2, "incorect number of nodes: %v", nodes) @@ -569,7 +556,7 @@ func TestFSM_SnapshotRestore_OSS(t *testing.T) { require.Equal(t, uint64(1), nodes[1].CreateIndex) require.Equal(t, uint64(23), nodes[1].ModifyIndex) - _, fooSrv, err := fsm2.state.NodeServices(nil, "foo", nil, "") + _, fooSrv, err := fsm2.state.NodeServices(nil, "foo", nil) require.NoError(t, err) require.Len(t, fooSrv.Services, 4) require.Contains(t, fooSrv.Services["db"].Tags, "primary") @@ -582,7 +569,7 @@ func TestFSM_SnapshotRestore_OSS(t *testing.T) { require.Equal(t, uint64(3), fooSrv.Services["web"].CreateIndex) require.Equal(t, uint64(3), fooSrv.Services["web"].ModifyIndex) - _, checks, err := fsm2.state.NodeChecks(nil, "foo", nil, "") + _, checks, err := fsm2.state.NodeChecks(nil, "foo", nil) require.NoError(t, err) require.Len(t, checks, 1) require.Equal(t, "foo", checks[0].Node) @@ -781,27 +768,6 @@ func TestFSM_SnapshotRestore_OSS(t *testing.T) { require.Equal(t, expect[i], sn.Service.Name) } - // Verify peering is restored - idx, prngRestored, err := fsm2.state.PeeringRead(nil, state.Query{ - Value: "baz", - }) - require.NoError(t, err) - require.Equal(t, uint64(31), idx) - require.NotNil(t, prngRestored) - require.Equal(t, "baz", prngRestored.Name) - - // Verify peering trust bundle is restored - idx, ptbRestored, err := fsm2.state.PeeringTrustBundleRead(nil, state.Query{ - Value: "qux", - }) - require.NoError(t, err) - require.Equal(t, uint64(32), idx) - require.NotNil(t, ptbRestored) - require.Equal(t, "qux.com", ptbRestored.TrustDomain) - require.Equal(t, "qux", ptbRestored.PeerName) - require.Len(t, ptbRestored.RootPEMs, 1) - require.Equal(t, "qux certificate bundle", ptbRestored.RootPEMs[0]) - // Snapshot snap, err = fsm2.Snapshot() require.NoError(t, err) @@ -855,7 +821,7 @@ func TestFSM_BadRestore_OSS(t *testing.T) { require.Error(t, fsm.Restore(sink)) // Verify the contents didn't get corrupted. - _, nodes, err := fsm.state.Nodes(nil, nil, "") + _, nodes, err := fsm.state.Nodes(nil, nil) require.NoError(t, err) require.Len(t, nodes, 1) require.Equal(t, "foo", nodes[0].Node) diff --git a/agent/consul/grpc_integration_test.go b/agent/consul/grpc_integration_test.go deleted file mode 100644 index a963832851a97..0000000000000 --- a/agent/consul/grpc_integration_test.go +++ /dev/null @@ -1,215 +0,0 @@ -package consul - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/consul/authmethod/testauth" - "github.com/hashicorp/consul/agent/grpc/public" - "github.com/hashicorp/consul/agent/structs" - tokenStore "github.com/hashicorp/consul/agent/token" - "github.com/hashicorp/consul/proto-public/pbacl" - "github.com/hashicorp/consul/proto-public/pbconnectca" - "github.com/hashicorp/consul/proto-public/pbserverdiscovery" -) - -func TestGRPCIntegration_ConnectCA_Sign(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - // The gRPC endpoint itself well-tested with mocks. This test checks we're - // correctly wiring everything up in the server by: - // - // * Starting a cluster with multiple servers. - // * Making a request to a follower's public gRPC port. - // * Ensuring that the request is correctly forwarded to the leader. - // * Ensuring we get a valid certificate back (so it went through the CAManager). - server1, conn1, _ := testGRPCIntegrationServer(t, func(c *Config) { - c.Bootstrap = false - c.BootstrapExpect = 2 - }) - - server2, conn2, _ := testGRPCIntegrationServer(t, func(c *Config) { - c.Bootstrap = false - }) - - joinLAN(t, server2, server1) - - waitForLeaderEstablishment(t, server1, server2) - - conn := conn2 - if server2.IsLeader() { - conn = conn1 - } - - client := pbconnectca.NewConnectCAServiceClient(conn) - - csr, _ := connect.TestCSR(t, &connect.SpiffeIDService{ - Host: connect.TestClusterID + ".consul", - Namespace: "default", - Datacenter: "dc1", - Service: "foo", - }) - - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - ctx = public.ContextWithToken(ctx, TestDefaultInitialManagementToken) - - // This would fail if it wasn't forwarded to the leader. - rsp, err := client.Sign(ctx, &pbconnectca.SignRequest{ - Csr: csr, - }) - require.NoError(t, err) - - _, err = connect.ParseCert(rsp.CertPem) - require.NoError(t, err) -} - -func TestGRPCIntegration_ServerDiscovery_WatchServers(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - // The gRPC endpoint itself well-tested with mocks. This test checks we're - // correctly wiring everything up in the server by: - // - // * Starting a server - // * Initiating the gRPC stream - // * Validating the snapshot - // * Adding another server - // * Validating another message is sent. - - server1, conn, _ := testGRPCIntegrationServer(t, func(c *Config) { - c.Bootstrap = true - c.BootstrapExpect = 1 - }) - waitForLeaderEstablishment(t, server1) - - client := pbserverdiscovery.NewServerDiscoveryServiceClient(conn) - - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - ctx = public.ContextWithToken(ctx, TestDefaultInitialManagementToken) - - serverStream, err := client.WatchServers(ctx, &pbserverdiscovery.WatchServersRequest{Wan: false}) - require.NoError(t, err) - - rsp, err := serverStream.Recv() - require.NoError(t, err) - require.NotNil(t, rsp) - require.Len(t, rsp.Servers, 1) - - _, server2, _ := testACLServerWithConfig(t, func(c *Config) { - c.Bootstrap = false - }, false) - - // join the new server to the leader - joinLAN(t, server2, server1) - - // now receive the event containing 2 servers - rsp, err = serverStream.Recv() - require.NoError(t, err) - require.NotNil(t, rsp) - require.Len(t, rsp.Servers, 2) -} - -func TestGRPCIntegration_ACL_Login_Logout(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - // The gRPC endpoints themselves are well unit tested - this test ensures we're - // correctly wiring everything up and exercises the cross-dc RPC forwarding by: - // - // * Starting two servers in different datacenters. - // * WAN federating them. - // * Configuring ACL token replication in the secondary datacenter. - // * Registering an auth method (configured for global tokens) in the primary - // datacenter. - // * Making a Login request to the secondary DC, with the request's Datacenter - // field set to "primary" (to exercise user requested DC forwarding). - // * Waiting for the token to be replicated to the secondary DC. - // * Making a Logout request to the secondary DC, with the request's Datacenter - // field set to "secondary" — the request will be forwarded to the primary - // datacenter anyway because the token is global. - - // Start the primary DC. - primary, _, primaryCodec := testGRPCIntegrationServer(t, func(c *Config) { - c.Bootstrap = true - c.BootstrapExpect = 1 - c.Datacenter = "primary" - c.PrimaryDatacenter = "primary" - }) - waitForLeaderEstablishment(t, primary) - - // Configured the auth method. - testSessionID := testauth.StartSession() - defer testauth.ResetSession(testSessionID) - testauth.InstallSessionToken(testSessionID, "fake-token", "default", "demo", "abc123") - - authMethod, err := upsertTestCustomizedAuthMethod(primaryCodec, TestDefaultInitialManagementToken, "primary", func(method *structs.ACLAuthMethod) { - method.Config = map[string]interface{}{ - "SessionID": testSessionID, - } - method.TokenLocality = "global" - }) - require.NoError(t, err) - - _, err = upsertTestBindingRule(primaryCodec, TestDefaultInitialManagementToken, "primary", authMethod.Name, "", structs.BindingRuleBindTypeService, "demo") - require.NoError(t, err) - - // Start the secondary DC. - secondary, secondaryConn, _ := testGRPCIntegrationServer(t, func(c *Config) { - c.Bootstrap = true - c.BootstrapExpect = 1 - c.Datacenter = "secondary" - c.PrimaryDatacenter = "primary" - c.ACLTokenReplication = true - }) - secondary.tokens.UpdateReplicationToken(TestDefaultInitialManagementToken, tokenStore.TokenSourceConfig) - waitForLeaderEstablishment(t, secondary) - - // WAN federate the primary and secondary DCs. - joinWAN(t, primary, secondary) - - client := pbacl.NewACLServiceClient(secondaryConn) - - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - // Make a Login request to the secondary DC, but request that it is forwarded - // to the primary DC. - rsp, err := client.Login(ctx, &pbacl.LoginRequest{ - AuthMethod: authMethod.Name, - BearerToken: "fake-token", - Datacenter: "primary", - }) - require.NoError(t, err) - require.NotNil(t, rsp.Token) - require.NotEmpty(t, rsp.Token.AccessorId) - require.NotEmpty(t, rsp.Token.SecretId) - - // Check token was created in the primary DC. - tokenIdx, token, err := primary.FSM().State().ACLTokenGetByAccessor(nil, rsp.Token.AccessorId, nil) - require.NoError(t, err) - require.NotNil(t, token) - require.False(t, token.Local, "token should be global") - - // Wait for token to be replicated to the secondary DC. - waitForNewACLReplication(t, secondary, structs.ACLReplicateTokens, 0, tokenIdx, 0) - - // Make a Logout request to the secondary DC, the request should be forwarded - // to the primary DC anyway because the token is global. - _, err = client.Logout(ctx, &pbacl.LogoutRequest{ - Token: rsp.Token.SecretId, - Datacenter: "secondary", - }) - require.NoError(t, err) -} diff --git a/agent/consul/health_endpoint.go b/agent/consul/health_endpoint.go index ee8f328885a5e..14ccf38c92d5c 100644 --- a/agent/consul/health_endpoint.go +++ b/agent/consul/health_endpoint.go @@ -6,9 +6,7 @@ import ( "github.com/armon/go-metrics" bexpr "github.com/hashicorp/go-bexpr" - "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" - hashstructure_v2 "github.com/mitchellh/hashstructure/v2" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/state" @@ -17,8 +15,7 @@ import ( // Health endpoint is used to query the health information type Health struct { - srv *Server - logger hclog.Logger + srv *Server } // ChecksInState is used to get all the checks in a given state @@ -50,9 +47,9 @@ func (h *Health) ChecksInState(args *structs.ChecksInStateRequest, var checks structs.HealthChecks var err error if len(args.NodeMetaFilters) > 0 { - index, checks, err = state.ChecksInStateByNodeMeta(ws, args.State, args.NodeMetaFilters, &args.EnterpriseMeta, args.PeerName) + index, checks, err = state.ChecksInStateByNodeMeta(ws, args.State, args.NodeMetaFilters, &args.EnterpriseMeta) } else { - index, checks, err = state.ChecksInState(ws, args.State, &args.EnterpriseMeta, args.PeerName) + index, checks, err = state.ChecksInState(ws, args.State, &args.EnterpriseMeta) } if err != nil { return err @@ -101,7 +98,7 @@ func (h *Health) NodeChecks(args *structs.NodeSpecificRequest, &args.QueryOptions, &reply.QueryMeta, func(ws memdb.WatchSet, state *state.Store) error { - index, checks, err := state.NodeChecks(ws, args.Node, &args.EnterpriseMeta, args.PeerName) + index, checks, err := state.NodeChecks(ws, args.Node, &args.EnterpriseMeta) if err != nil { return err } @@ -160,9 +157,9 @@ func (h *Health) ServiceChecks(args *structs.ServiceSpecificRequest, var checks structs.HealthChecks var err error if len(args.NodeMetaFilters) > 0 { - index, checks, err = state.ServiceChecksByNodeMeta(ws, args.ServiceName, args.NodeMetaFilters, &args.EnterpriseMeta, args.PeerName) + index, checks, err = state.ServiceChecksByNodeMeta(ws, args.ServiceName, args.NodeMetaFilters, &args.EnterpriseMeta) } else { - index, checks, err = state.ServiceChecks(ws, args.ServiceName, &args.EnterpriseMeta, args.PeerName) + index, checks, err = state.ServiceChecks(ws, args.ServiceName, &args.EnterpriseMeta) } if err != nil { return err @@ -235,11 +232,6 @@ func (h *Health) ServiceNodes(args *structs.ServiceSpecificRequest, reply *struc return err } - var ( - priorMergeHash uint64 - ranMergeOnce bool - ) - err = h.srv.blockingQuery( &args.QueryOptions, &reply.QueryMeta, @@ -251,43 +243,7 @@ func (h *Health) ServiceNodes(args *structs.ServiceSpecificRequest, reply *struc return err } - resolvedNodes := nodes - if args.MergeCentralConfig { - for _, node := range resolvedNodes { - ns := node.Service - if ns.IsSidecarProxy() || ns.IsGateway() { - cfgIndex, mergedns, err := mergeNodeServiceWithCentralConfig(ws, state, args, ns, h.logger) - if err != nil { - return err - } - if cfgIndex > index { - index = cfgIndex - } - *node.Service = *mergedns - } - } - - // Generate a hash of the resolvedNodes driving this response. - // Use it to determine if the response is identical to a prior wakeup. - newMergeHash, err := hashstructure_v2.Hash(resolvedNodes, hashstructure_v2.FormatV2, nil) - if err != nil { - return fmt.Errorf("error hashing reply for spurious wakeup suppression: %w", err) - } - if ranMergeOnce && priorMergeHash == newMergeHash { - // the below assignment is not required as the if condition already validates equality, - // but makes it more clear that prior value is being reset to the new hash on each run. - priorMergeHash = newMergeHash - reply.Index = index - // NOTE: the prior response is still alive inside of *reply, which is desirable - return errNotChanged - } else { - priorMergeHash = newMergeHash - ranMergeOnce = true - } - - } - - thisReply.Index, thisReply.Nodes = index, resolvedNodes + thisReply.Index, thisReply.Nodes = index, nodes if len(args.NodeMetaFilters) > 0 { thisReply.Nodes = nodeMetaFilter(args.NodeMetaFilters, thisReply.Nodes) @@ -356,7 +312,7 @@ func (h *Health) ServiceNodes(args *structs.ServiceSpecificRequest, reply *struc // can be used by the ServiceNodes endpoint. func (h *Health) serviceNodesConnect(ws memdb.WatchSet, s *state.Store, args *structs.ServiceSpecificRequest) (uint64, structs.CheckServiceNodes, error) { - return s.CheckConnectServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta, args.PeerName) + return s.CheckConnectServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta) } func (h *Health) serviceNodesIngress(ws memdb.WatchSet, s *state.Store, args *structs.ServiceSpecificRequest) (uint64, structs.CheckServiceNodes, error) { @@ -369,11 +325,11 @@ func (h *Health) serviceNodesTagFilter(ws memdb.WatchSet, s *state.Store, args * // Agents < v1.3.0 populate the ServiceTag field. In this case, // use ServiceTag instead of the ServiceTags field. if args.ServiceTag != "" { - return s.CheckServiceTagNodes(ws, args.ServiceName, []string{args.ServiceTag}, &args.EnterpriseMeta, args.PeerName) + return s.CheckServiceTagNodes(ws, args.ServiceName, []string{args.ServiceTag}, &args.EnterpriseMeta) } - return s.CheckServiceTagNodes(ws, args.ServiceName, args.ServiceTags, &args.EnterpriseMeta, args.PeerName) + return s.CheckServiceTagNodes(ws, args.ServiceName, args.ServiceTags, &args.EnterpriseMeta) } func (h *Health) serviceNodesDefault(ws memdb.WatchSet, s *state.Store, args *structs.ServiceSpecificRequest) (uint64, structs.CheckServiceNodes, error) { - return s.CheckServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta, args.PeerName) + return s.CheckServiceNodes(ws, args.ServiceName, &args.EnterpriseMeta) } diff --git a/agent/consul/health_endpoint_test.go b/agent/consul/health_endpoint_test.go index ee13483e28312..5113b3d3b8d30 100644 --- a/agent/consul/health_endpoint_test.go +++ b/agent/consul/health_endpoint_test.go @@ -13,7 +13,7 @@ import ( "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/lib" - "github.com/hashicorp/consul/sdk/testutil" + "github.com/hashicorp/consul/lib/stringslice" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/consul/types" @@ -558,109 +558,124 @@ func TestHealth_ServiceNodes(t *testing.T) { } t.Parallel() - _, s1 := testServer(t) + dir1, s1 := testServer(t) + defer os.RemoveAll(dir1) + defer s1.Shutdown() codec := rpcClient(t, s1) + defer codec.Close() - waitForLeaderEstablishment(t, s1) + testrpc.WaitForLeader(t, s1.RPC, "dc1") - testingPeerNames := []string{"", "my-peer"} + arg := structs.RegisterRequest{ + Datacenter: "dc1", + Node: "foo", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "db", + Service: "db", + Tags: []string{"primary"}, + }, + Check: &structs.HealthCheck{ + Name: "db connect", + Status: api.HealthPassing, + ServiceID: "db", + }, + } + var out struct{} + if err := msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out); err != nil { + t.Fatalf("err: %v", err) + } - // TODO(peering): will have to seed this data differently in the future - for _, peerName := range testingPeerNames { - arg := structs.RegisterRequest{ - Datacenter: "dc1", - Node: "foo", - Address: "127.0.0.1", - PeerName: peerName, - Service: &structs.NodeService{ - ID: "db", - Service: "db", - Tags: []string{"primary"}, - PeerName: peerName, - }, - Check: &structs.HealthCheck{ - Name: "db connect", - Status: api.HealthPassing, - ServiceID: "db", - PeerName: peerName, - }, - } - var out struct{} - require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + arg = structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.2", + Service: &structs.NodeService{ + ID: "db", + Service: "db", + Tags: []string{"replica"}, + }, + Check: &structs.HealthCheck{ + Name: "db connect", + Status: api.HealthWarning, + ServiceID: "db", + }, + } + if err := msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out); err != nil { + t.Fatalf("err: %v", err) + } - arg = structs.RegisterRequest{ - Datacenter: "dc1", - Node: "bar", - Address: "127.0.0.2", - PeerName: peerName, - Service: &structs.NodeService{ - ID: "db", - Service: "db", - Tags: []string{"replica"}, - PeerName: peerName, - }, - Check: &structs.HealthCheck{ - Name: "db connect", - Status: api.HealthWarning, - ServiceID: "db", - PeerName: peerName, - }, - } - require.NoError(t, msgpackrpc.CallWithCodec(codec, "Catalog.Register", &arg, &out)) + var out2 structs.IndexedCheckServiceNodes + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "db", + ServiceTags: []string{"primary"}, + TagFilter: false, + } + if err := msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2); err != nil { + t.Fatalf("err: %v", err) } - verify := func(t *testing.T, out2 structs.IndexedCheckServiceNodes, peerName string) { + nodes := out2.Nodes + if len(nodes) != 2 { + t.Fatalf("Bad: %v", nodes) + } + if nodes[0].Node.Node != "bar" { + t.Fatalf("Bad: %v", nodes[0]) + } + if nodes[1].Node.Node != "foo" { + t.Fatalf("Bad: %v", nodes[1]) + } + if !stringslice.Contains(nodes[0].Service.Tags, "replica") { + t.Fatalf("Bad: %v", nodes[0]) + } + if !stringslice.Contains(nodes[1].Service.Tags, "primary") { + t.Fatalf("Bad: %v", nodes[1]) + } + if nodes[0].Checks[0].Status != api.HealthWarning { + t.Fatalf("Bad: %v", nodes[0]) + } + if nodes[1].Checks[0].Status != api.HealthPassing { + t.Fatalf("Bad: %v", nodes[1]) + } + + // Same should still work for <1.3 RPCs with singular tags + // DEPRECATED (singular-service-tag) - remove this when backwards RPC compat + // with 1.2.x is not required. + { + var out2 structs.IndexedCheckServiceNodes + req := structs.ServiceSpecificRequest{ + Datacenter: "dc1", + ServiceName: "db", + ServiceTag: "primary", + TagFilter: false, + } + if err := msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2); err != nil { + t.Fatalf("err: %v", err) + } + nodes := out2.Nodes - require.Len(t, nodes, 2) - require.Equal(t, peerName, nodes[0].Node.PeerName) - require.Equal(t, peerName, nodes[1].Node.PeerName) - require.Equal(t, "bar", nodes[0].Node.Node) - require.Equal(t, "foo", nodes[1].Node.Node) - require.Equal(t, peerName, nodes[0].Service.PeerName) - require.Equal(t, peerName, nodes[1].Service.PeerName) - require.Contains(t, nodes[0].Service.Tags, "replica") - require.Contains(t, nodes[1].Service.Tags, "primary") - require.Equal(t, peerName, nodes[0].Checks[0].PeerName) - require.Equal(t, peerName, nodes[1].Checks[0].PeerName) - require.Equal(t, api.HealthWarning, nodes[0].Checks[0].Status) - require.Equal(t, api.HealthPassing, nodes[1].Checks[0].Status) - } - - for _, peerName := range testingPeerNames { - testName := "peer named " + peerName - if peerName == "" { - testName = "local peer" + if len(nodes) != 2 { + t.Fatalf("Bad: %v", nodes) + } + if nodes[0].Node.Node != "bar" { + t.Fatalf("Bad: %v", nodes[0]) + } + if nodes[1].Node.Node != "foo" { + t.Fatalf("Bad: %v", nodes[1]) + } + if !stringslice.Contains(nodes[0].Service.Tags, "replica") { + t.Fatalf("Bad: %v", nodes[0]) + } + if !stringslice.Contains(nodes[1].Service.Tags, "primary") { + t.Fatalf("Bad: %v", nodes[1]) + } + if nodes[0].Checks[0].Status != api.HealthWarning { + t.Fatalf("Bad: %v", nodes[0]) + } + if nodes[1].Checks[0].Status != api.HealthPassing { + t.Fatalf("Bad: %v", nodes[1]) } - t.Run(testName, func(t *testing.T) { - t.Run("with service tags", func(t *testing.T) { - var out2 structs.IndexedCheckServiceNodes - req := structs.ServiceSpecificRequest{ - Datacenter: "dc1", - ServiceName: "db", - ServiceTags: []string{"primary"}, - TagFilter: false, - PeerName: peerName, - } - require.NoError(t, msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2)) - verify(t, out2, peerName) - }) - - // Same should still work for <1.3 RPCs with singular tags - // DEPRECATED (singular-service-tag) - remove this when backwards RPC compat - // with 1.2.x is not required. - t.Run("with legacy service tag", func(t *testing.T) { - var out2 structs.IndexedCheckServiceNodes - req := structs.ServiceSpecificRequest{ - Datacenter: "dc1", - ServiceName: "db", - ServiceTag: "primary", - TagFilter: false, - PeerName: peerName, - } - require.NoError(t, msgpackrpc.CallWithCodec(codec, "Health.ServiceNodes", &req, &out2)) - verify(t, out2, peerName) - }) - }) } } @@ -695,7 +710,7 @@ func TestHealth_ServiceNodes_BlockingQuery_withFilter(t *testing.T) { register(t, "web", "foo") var lastIndex uint64 - testutil.RunStep(t, "read original", func(t *testing.T) { + runStep(t, "read original", func(t *testing.T) { var out structs.IndexedCheckServiceNodes req := structs.ServiceSpecificRequest{ Datacenter: "dc1", @@ -716,7 +731,7 @@ func TestHealth_ServiceNodes_BlockingQuery_withFilter(t *testing.T) { lastIndex = out.Index }) - testutil.RunStep(t, "read blocking query result", func(t *testing.T) { + runStep(t, "read blocking query result", func(t *testing.T) { req := structs.ServiceSpecificRequest{ Datacenter: "dc1", ServiceName: "web", diff --git a/agent/consul/intention_endpoint_test.go b/agent/consul/intention_endpoint_test.go index 0807662a32810..1fc0db35e9b7c 100644 --- a/agent/consul/intention_endpoint_test.go +++ b/agent/consul/intention_endpoint_test.go @@ -1802,7 +1802,7 @@ func TestIntentionMatch_BlockOnNoChange(t *testing.T) { ) } - testutil.RunStep(t, "test the errNotFound path", func(t *testing.T) { + runStep(t, "test the errNotFound path", func(t *testing.T) { run(t, "other", 0) }) @@ -1830,7 +1830,7 @@ func TestIntentionMatch_BlockOnNoChange(t *testing.T) { } } - testutil.RunStep(t, "test the errNotChanged path", func(t *testing.T) { + runStep(t, "test the errNotChanged path", func(t *testing.T) { run(t, "completely-different-other", 2) }) } diff --git a/agent/consul/internal_endpoint.go b/agent/consul/internal_endpoint.go index 718002889ce92..d78f20046b08d 100644 --- a/agent/consul/internal_endpoint.go +++ b/agent/consul/internal_endpoint.go @@ -38,7 +38,7 @@ func (m *Internal) NodeInfo(args *structs.NodeSpecificRequest, &args.QueryOptions, &reply.QueryMeta, func(ws memdb.WatchSet, state *state.Store) error { - index, dump, err := state.NodeInfo(ws, args.Node, &args.EnterpriseMeta, args.PeerName) + index, dump, err := state.NodeInfo(ws, args.Node, &args.EnterpriseMeta) if err != nil { return err } @@ -69,7 +69,7 @@ func (m *Internal) NodeDump(args *structs.DCSpecificRequest, &args.QueryOptions, &reply.QueryMeta, func(ws memdb.WatchSet, state *state.Store) error { - index, dump, err := state.NodeDump(ws, &args.EnterpriseMeta, args.PeerName) + index, dump, err := state.NodeDump(ws, &args.EnterpriseMeta) if err != nil { return err } @@ -112,7 +112,7 @@ func (m *Internal) ServiceDump(args *structs.ServiceDumpRequest, reply *structs. &reply.QueryMeta, func(ws memdb.WatchSet, state *state.Store) error { // Get, store, and filter nodes - maxIdx, nodes, err := state.ServiceDump(ws, args.ServiceKind, args.UseServiceKind, &args.EnterpriseMeta, args.PeerName) + maxIdx, nodes, err := state.ServiceDump(ws, args.ServiceKind, args.UseServiceKind, &args.EnterpriseMeta) if err != nil { return err } @@ -314,7 +314,7 @@ func (m *Internal) GatewayServiceDump(args *structs.ServiceSpecificRequest, repl // Loop over the gateway <-> serviceName mappings and fetch all service instances for each var result structs.ServiceDump for _, gs := range gatewayServices { - idx, instances, err := state.CheckServiceNodes(ws, gs.Service.Name, &gs.Service.EnterpriseMeta, args.PeerName) + idx, instances, err := state.CheckServiceNodes(ws, gs.Service.Name, &gs.Service.EnterpriseMeta) if err != nil { return err } diff --git a/agent/consul/internal_endpoint_test.go b/agent/consul/internal_endpoint_test.go index 9354b4f66413a..7f5e59a0affd5 100644 --- a/agent/consul/internal_endpoint_test.go +++ b/agent/consul/internal_endpoint_test.go @@ -17,7 +17,6 @@ import ( "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/lib/stringslice" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/consul/types" @@ -1122,7 +1121,6 @@ func TestInternal_GatewayServiceDump_Terminating(t *testing.T) { Gateway: structs.NewServiceName("terminating-gateway", nil), Service: structs.NewServiceName("db", nil), GatewayKind: "terminating-gateway", - ServiceKind: structs.GatewayServiceKindService, }, }, { @@ -1156,7 +1154,6 @@ func TestInternal_GatewayServiceDump_Terminating(t *testing.T) { Gateway: structs.NewServiceName("terminating-gateway", nil), Service: structs.NewServiceName("db", nil), GatewayKind: "terminating-gateway", - ServiceKind: structs.GatewayServiceKindService, }, }, { @@ -2388,7 +2385,7 @@ func TestInternal_IntentionUpstreams_BlockOnNoChange(t *testing.T) { ) } - testutil.RunStep(t, "test the errNotFound path", func(t *testing.T) { + runStep(t, "test the errNotFound path", func(t *testing.T) { run(t, "other", 0) }) @@ -2401,7 +2398,7 @@ func TestInternal_IntentionUpstreams_BlockOnNoChange(t *testing.T) { // web -> api (allow) registerIntentionUpstreamEntries(t, codec, "") - testutil.RunStep(t, "test the errNotChanged path", func(t *testing.T) { + runStep(t, "test the errNotChanged path", func(t *testing.T) { run(t, "completely-different-other", 1) }) } diff --git a/agent/consul/issue_test.go b/agent/consul/issue_test.go index 7839be0b95374..516e42ff9761e 100644 --- a/agent/consul/issue_test.go +++ b/agent/consul/issue_test.go @@ -62,7 +62,7 @@ func TestHealthCheckRace(t *testing.T) { } // Verify the index - idx, out1, err := state.CheckServiceNodes(nil, "db", nil, "") + idx, out1, err := state.CheckServiceNodes(nil, "db", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -85,7 +85,7 @@ func TestHealthCheckRace(t *testing.T) { } // Verify the index changed - idx, out2, err := state.CheckServiceNodes(nil, "db", nil, "") + idx, out2, err := state.CheckServiceNodes(nil, "db", nil) if err != nil { t.Fatalf("err: %s", err) } diff --git a/agent/consul/leader.go b/agent/consul/leader.go index aedcb032f256e..456fbec1ea544 100644 --- a/agent/consul/leader.go +++ b/agent/consul/leader.go @@ -305,8 +305,6 @@ func (s *Server) establishLeadership(ctx context.Context) error { s.startFederationStateAntiEntropy(ctx) - s.startPeeringStreamSync(ctx) - if err := s.startConnectLeader(ctx); err != nil { return err } @@ -344,8 +342,6 @@ func (s *Server) revokeLeadership() { s.stopACLReplication() - s.stopPeeringStreamSync() - s.stopConnectLeader() s.stopACLTokenReaping() @@ -891,7 +887,7 @@ func (s *Server) reconcileReaped(known map[string]struct{}, nodeEntMeta *acl.Ent } state := s.fsm.State() - _, checks, err := state.ChecksInState(nil, api.HealthAny, nodeEntMeta, structs.DefaultPeerKeyword) + _, checks, err := state.ChecksInState(nil, api.HealthAny, nodeEntMeta) if err != nil { return err } @@ -907,7 +903,7 @@ func (s *Server) reconcileReaped(known map[string]struct{}, nodeEntMeta *acl.Ent } // Get the node services, look for ConsulServiceID - _, services, err := state.NodeServices(nil, check.Node, nodeEntMeta, structs.DefaultPeerKeyword) + _, services, err := state.NodeServices(nil, check.Node, nodeEntMeta) if err != nil { return err } @@ -918,7 +914,7 @@ func (s *Server) reconcileReaped(known map[string]struct{}, nodeEntMeta *acl.Ent CHECKS: for _, service := range services.Services { if service.ID == structs.ConsulServiceID { - _, node, err := state.GetNode(check.Node, nodeEntMeta, check.PeerName) + _, node, err := state.GetNode(check.Node, nodeEntMeta) if err != nil { s.logger.Error("Unable to look up node with name", "name", check.Node, "error", err) continue CHECKS @@ -1055,7 +1051,7 @@ func (s *Server) handleAliveMember(member serf.Member, nodeEntMeta *acl.Enterpri // Check if the node exists state := s.fsm.State() - _, node, err := state.GetNode(member.Name, nodeEntMeta, structs.DefaultPeerKeyword) + _, node, err := state.GetNode(member.Name, nodeEntMeta) if err != nil { return err } @@ -1063,7 +1059,7 @@ func (s *Server) handleAliveMember(member serf.Member, nodeEntMeta *acl.Enterpri // Check if the associated service is available if service != nil { match := false - _, services, err := state.NodeServices(nil, member.Name, nodeEntMeta, structs.DefaultPeerKeyword) + _, services, err := state.NodeServices(nil, member.Name, nodeEntMeta) if err != nil { return err } @@ -1081,7 +1077,7 @@ func (s *Server) handleAliveMember(member serf.Member, nodeEntMeta *acl.Enterpri } // Check if the serfCheck is in the passing state - _, checks, err := state.NodeChecks(nil, member.Name, nodeEntMeta, structs.DefaultPeerKeyword) + _, checks, err := state.NodeChecks(nil, member.Name, nodeEntMeta) if err != nil { return err } @@ -1131,7 +1127,7 @@ func (s *Server) handleFailedMember(member serf.Member, nodeEntMeta *acl.Enterpr // Check if the node exists state := s.fsm.State() - _, node, err := state.GetNode(member.Name, nodeEntMeta, structs.DefaultPeerKeyword) + _, node, err := state.GetNode(member.Name, nodeEntMeta) if err != nil { return err } @@ -1146,7 +1142,7 @@ func (s *Server) handleFailedMember(member serf.Member, nodeEntMeta *acl.Enterpr if node.Address == member.Addr.String() { // Check if the serfCheck is in the critical state - _, checks, err := state.NodeChecks(nil, member.Name, nodeEntMeta, structs.DefaultPeerKeyword) + _, checks, err := state.NodeChecks(nil, member.Name, nodeEntMeta) if err != nil { return err } @@ -1224,7 +1220,7 @@ func (s *Server) handleDeregisterMember(reason string, member serf.Member, nodeE // Check if the node does not exist state := s.fsm.State() - _, node, err := state.GetNode(member.Name, nodeEntMeta, structs.DefaultPeerKeyword) + _, node, err := state.GetNode(member.Name, nodeEntMeta) if err != nil { return err } diff --git a/agent/consul/leader_connect_ca.go b/agent/consul/leader_connect_ca.go index 53b1856789e02..77dd5f6cfe993 100644 --- a/agent/consul/leader_connect_ca.go +++ b/agent/consul/leader_connect_ca.go @@ -22,7 +22,6 @@ import ( "github.com/hashicorp/consul/agent/connect/ca" "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/lib/routine" ) @@ -1383,7 +1382,7 @@ func (l *connectSignRateLimiter) getCSRRateLimiterWithLimit(limit rate.Limit) *r func (c *CAManager) AuthorizeAndSignCertificate(csr *x509.CertificateRequest, authz acl.Authorizer) (*structs.IssuedCert, error) { // Parse the SPIFFE ID from the CSR SAN. if len(csr.URIs) == 0 { - return nil, connect.InvalidCSRError("CSR SAN does not contain a SPIFFE ID") + return nil, errors.New("CSR SAN does not contain a SPIFFE ID") } spiffeID, err := connect.ParseCertURI(csr.URIs[0]) if err != nil { @@ -1404,7 +1403,7 @@ func (c *CAManager) AuthorizeAndSignCertificate(csr *x509.CertificateRequest, au // requirement later but being restrictive for now is safer. dc := c.serverConf.Datacenter if v.Datacenter != dc { - return nil, connect.InvalidCSRError("SPIFFE ID in CSR from a different datacenter: %s, "+ + return nil, fmt.Errorf("SPIFFE ID in CSR from a different datacenter: %s, "+ "we are %s", v.Datacenter, dc) } case *connect.SpiffeIDAgent: @@ -1413,7 +1412,7 @@ func (c *CAManager) AuthorizeAndSignCertificate(csr *x509.CertificateRequest, au return nil, err } default: - return nil, connect.InvalidCSRError("SPIFFE ID in CSR must be a service or agent ID") + return nil, errors.New("SPIFFE ID in CSR must be a service or agent ID") } return c.SignCertificate(csr, spiffeID) @@ -1437,13 +1436,13 @@ func (c *CAManager) SignCertificate(csr *x509.CertificateRequest, spiffeID conne serviceID, isService := spiffeID.(*connect.SpiffeIDService) agentID, isAgent := spiffeID.(*connect.SpiffeIDAgent) if !isService && !isAgent { - return nil, connect.InvalidCSRError("SPIFFE ID in CSR must be a service or agent ID") + return nil, fmt.Errorf("SPIFFE ID in CSR must be a service or agent ID") } var entMeta acl.EnterpriseMeta if isService { if !signingID.CanSign(spiffeID) { - return nil, connect.InvalidCSRError("SPIFFE ID in CSR from a different trust domain: %s, "+ + return nil, fmt.Errorf("SPIFFE ID in CSR from a different trust domain: %s, "+ "we are %s", serviceID.Host, signingID.Host()) } entMeta.Merge(serviceID.GetEnterpriseMeta()) @@ -1523,7 +1522,7 @@ func (c *CAManager) SignCertificate(csr *x509.CertificateRequest, spiffeID conne // Append any intermediates needed by this root. for _, p := range caRoot.IntermediateCerts { - pem = pem + lib.EnsureTrailingNewline(p) + pem = pem + ca.EnsureTrailingNewline(p) } modIdx, err := c.delegate.ApplyCALeafRequest() diff --git a/agent/consul/leader_connect_ca_test.go b/agent/consul/leader_connect_ca_test.go index 37756eb204267..1f2c964b8a960 100644 --- a/agent/consul/leader_connect_ca_test.go +++ b/agent/consul/leader_connect_ca_test.go @@ -30,7 +30,6 @@ import ( "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/token" - "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" @@ -59,7 +58,7 @@ func TestCAManager_Initialize_Vault_Secondary_SharedVault(t *testing.T) { } }) - testutil.RunStep(t, "check primary DC", func(t *testing.T) { + runStep(t, "check primary DC", func(t *testing.T) { testrpc.WaitForTestAgent(t, serverDC1.RPC, "dc1") codec := rpcClient(t, serverDC1) @@ -72,7 +71,7 @@ func TestCAManager_Initialize_Vault_Secondary_SharedVault(t *testing.T) { verifyLeafCert(t, roots.Roots[0], leafPEM) }) - testutil.RunStep(t, "start secondary DC", func(t *testing.T) { + runStep(t, "start secondary DC", func(t *testing.T) { _, serverDC2 := testServerWithConfig(t, func(c *Config) { c.Datacenter = "dc2" c.PrimaryDatacenter = "dc1" @@ -648,7 +647,7 @@ func TestCAManager_Initialize_Vault_WithIntermediateAsPrimaryCA(t *testing.T) { } }) - testutil.RunStep(t, "check primary DC", func(t *testing.T) { + runStep(t, "check primary DC", func(t *testing.T) { testrpc.WaitForTestAgent(t, s1.RPC, "dc1") codec := rpcClient(t, s1) @@ -665,7 +664,7 @@ func TestCAManager_Initialize_Vault_WithIntermediateAsPrimaryCA(t *testing.T) { // TODO: renew primary leaf signing cert // TODO: rotate root - testutil.RunStep(t, "run secondary DC", func(t *testing.T) { + runStep(t, "run secondary DC", func(t *testing.T) { _, sDC2 := testServerWithConfig(t, func(c *Config) { c.Datacenter = "dc2" c.PrimaryDatacenter = "dc1" @@ -798,7 +797,7 @@ func TestCAManager_Initialize_Vault_WithExternalTrustedCA(t *testing.T) { var origLeaf string roots := structs.IndexedCARoots{} - testutil.RunStep(t, "verify primary DC", func(t *testing.T) { + runStep(t, "verify primary DC", func(t *testing.T) { codec := rpcClient(t, serverDC1) err := msgpackrpc.CallWithCodec(codec, "ConnectCA.Roots", &structs.DCSpecificRequest{}, &roots) require.NoError(t, err) @@ -826,7 +825,7 @@ func TestCAManager_Initialize_Vault_WithExternalTrustedCA(t *testing.T) { }) var origLeafSecondary string - testutil.RunStep(t, "start secondary DC", func(t *testing.T) { + runStep(t, "start secondary DC", func(t *testing.T) { joinWAN(t, serverDC2, serverDC1) testrpc.WaitForActiveCARoot(t, serverDC2.RPC, "dc2", nil) @@ -841,7 +840,7 @@ func TestCAManager_Initialize_Vault_WithExternalTrustedCA(t *testing.T) { origLeafSecondary = leafPEM }) - testutil.RunStep(t, "renew leaf signing CA in primary", func(t *testing.T) { + runStep(t, "renew leaf signing CA in primary", func(t *testing.T) { previous := serverDC1.caManager.getLeafSigningCertFromRoot(roots.Active()) renewLeafSigningCert(t, serverDC1.caManager, serverDC1.caManager.primaryRenewIntermediate) @@ -863,7 +862,7 @@ func TestCAManager_Initialize_Vault_WithExternalTrustedCA(t *testing.T) { verifyLeafCert(t, roots.Roots[0], origLeaf) }) - testutil.RunStep(t, "renew leaf signing CA in secondary", func(t *testing.T) { + runStep(t, "renew leaf signing CA in secondary", func(t *testing.T) { previous := serverDC2.caManager.getLeafSigningCertFromRoot(roots.Active()) renewLeafSigningCert(t, serverDC2.caManager, serverDC2.caManager.secondaryRequestNewSigningCert) @@ -886,7 +885,7 @@ func TestCAManager_Initialize_Vault_WithExternalTrustedCA(t *testing.T) { verifyLeafCert(t, roots.Roots[0], origLeaf) }) - testutil.RunStep(t, "rotate root by changing the provider", func(t *testing.T) { + runStep(t, "rotate root by changing the provider", func(t *testing.T) { codec := rpcClient(t, serverDC1) req := &structs.CARequest{ Op: structs.CAOpSetConfig, @@ -920,7 +919,7 @@ func TestCAManager_Initialize_Vault_WithExternalTrustedCA(t *testing.T) { verifyLeafCertWithRoots(t, rootsSecondary, origLeafSecondary) }) - testutil.RunStep(t, "rotate to a different external root", func(t *testing.T) { + runStep(t, "rotate to a different external root", func(t *testing.T) { setupPrimaryCA(t, vclient, "pki-primary-2/", rootPEM) codec := rpcClient(t, serverDC1) @@ -1002,7 +1001,7 @@ func generateExternalRootCA(t *testing.T, client *vaultapi.Client) string { "ttl": "2400h", }) require.NoError(t, err, "failed to generate root") - return lib.EnsureTrailingNewline(resp.Data["certificate"].(string)) + return ca.EnsureTrailingNewline(resp.Data["certificate"].(string)) } func setupPrimaryCA(t *testing.T, client *vaultapi.Client, path string, rootPEM string) string { @@ -1034,12 +1033,12 @@ func setupPrimaryCA(t *testing.T, client *vaultapi.Client, path string, rootPEM require.NoError(t, err, "failed to sign intermediate") var buf strings.Builder - buf.WriteString(lib.EnsureTrailingNewline(intermediate.Data["certificate"].(string))) - buf.WriteString(lib.EnsureTrailingNewline(rootPEM)) + buf.WriteString(ca.EnsureTrailingNewline(intermediate.Data["certificate"].(string))) + buf.WriteString(ca.EnsureTrailingNewline(rootPEM)) _, err = client.Logical().Write(path+"/intermediate/set-signed", map[string]interface{}{ "certificate": buf.String(), }) require.NoError(t, err, "failed to set signed intermediate") - return lib.EnsureTrailingNewline(buf.String()) + return ca.EnsureTrailingNewline(buf.String()) } diff --git a/agent/consul/leader_connect_test.go b/agent/consul/leader_connect_test.go index 5e90de6b082a9..bbb9bf4320181 100644 --- a/agent/consul/leader_connect_test.go +++ b/agent/consul/leader_connect_test.go @@ -83,7 +83,7 @@ func TestConnectCA_ConfigurationSet_ChangeKeyConfig_Primary(t *testing.T) { require.Equal(r, src.keyBits, caRoot.PrivateKeyBits) }) - testutil.RunStep(t, "sign leaf cert and make sure chain is correct", func(t *testing.T) { + runStep(t, "sign leaf cert and make sure chain is correct", func(t *testing.T) { spiffeService := &connect.SpiffeIDService{ Host: "node1", Namespace: "default", @@ -103,14 +103,14 @@ func TestConnectCA_ConfigurationSet_ChangeKeyConfig_Primary(t *testing.T) { require.NoError(t, connect.ValidateLeaf(caRoot.RootCert, leafPEM, []string{})) }) - testutil.RunStep(t, "verify persisted state is correct", func(t *testing.T) { + runStep(t, "verify persisted state is correct", func(t *testing.T) { state := srv.fsm.State() _, caConfig, err := state.CAConfig(nil) require.NoError(t, err) require.Equal(t, providerState, caConfig.State) }) - testutil.RunStep(t, "change roots", func(t *testing.T) { + runStep(t, "change roots", func(t *testing.T) { // Update a config value newConfig := &structs.CAConfiguration{ Provider: "consul", @@ -145,7 +145,7 @@ func TestConnectCA_ConfigurationSet_ChangeKeyConfig_Primary(t *testing.T) { require.Equal(r, dst.keyBits, newCaRoot.PrivateKeyBits) }) - testutil.RunStep(t, "sign leaf cert and make sure NEW chain is correct", func(t *testing.T) { + runStep(t, "sign leaf cert and make sure NEW chain is correct", func(t *testing.T) { spiffeService := &connect.SpiffeIDService{ Host: "node1", Namespace: "default", @@ -165,7 +165,7 @@ func TestConnectCA_ConfigurationSet_ChangeKeyConfig_Primary(t *testing.T) { require.NoError(t, connect.ValidateLeaf(newCaRoot.RootCert, leafPEM, []string{})) }) - testutil.RunStep(t, "verify persisted state is still correct", func(t *testing.T) { + runStep(t, "verify persisted state is still correct", func(t *testing.T) { state := srv.fsm.State() _, caConfig, err := state.CAConfig(nil) require.NoError(t, err) diff --git a/agent/consul/leader_federation_state_ae.go b/agent/consul/leader_federation_state_ae.go index 6cc0d4ba22a11..ef6f6378f68c4 100644 --- a/agent/consul/leader_federation_state_ae.go +++ b/agent/consul/leader_federation_state_ae.go @@ -157,7 +157,7 @@ func (s *Server) fetchFederationStateAntiEntropyDetails( // Fetch our current list of all mesh gateways. entMeta := structs.WildcardEnterpriseMetaInDefaultPartition() - idx2, raw, err := state.ServiceDump(ws, structs.ServiceKindMeshGateway, true, entMeta, structs.DefaultPeerKeyword) + idx2, raw, err := state.ServiceDump(ws, structs.ServiceKindMeshGateway, true, entMeta) if err != nil { return err } diff --git a/agent/consul/leader_peering.go b/agent/consul/leader_peering.go deleted file mode 100644 index c0f69b1686d88..0000000000000 --- a/agent/consul/leader_peering.go +++ /dev/null @@ -1,251 +0,0 @@ -package consul - -import ( - "container/ring" - "context" - "crypto/tls" - "crypto/x509" - "fmt" - "net" - - "github.com/hashicorp/consul/agent/rpc/peering" - "github.com/hashicorp/go-hclog" - "github.com/hashicorp/go-memdb" - "github.com/hashicorp/go-multierror" - "github.com/hashicorp/go-uuid" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" - - "github.com/hashicorp/consul/agent/pool" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" -) - -func (s *Server) startPeeringStreamSync(ctx context.Context) { - s.leaderRoutineManager.Start(ctx, peeringStreamsRoutineName, s.runPeeringSync) -} - -func (s *Server) runPeeringSync(ctx context.Context) error { - logger := s.logger.Named("peering-syncer") - cancelFns := make(map[string]context.CancelFunc) - - retryLoopBackoff(ctx, func() error { - if err := s.syncPeeringsAndBlock(ctx, logger, cancelFns); err != nil { - return err - } - return nil - - }, func(err error) { - s.logger.Error("error syncing peering streams from state store", "error", err) - }) - - return nil -} - -func (s *Server) stopPeeringStreamSync() { - // will be a no-op when not started - s.leaderRoutineManager.Stop(peeringStreamsRoutineName) -} - -// syncPeeringsAndBlock is a long-running goroutine that is responsible for watching -// changes to peerings in the state store and managing streams to those peers. -func (s *Server) syncPeeringsAndBlock(ctx context.Context, logger hclog.Logger, cancelFns map[string]context.CancelFunc) error { - state := s.fsm.State() - - // Pull the state store contents and set up to block for changes. - ws := memdb.NewWatchSet() - ws.Add(state.AbandonCh()) - ws.Add(ctx.Done()) - - _, peers, err := state.PeeringList(ws, *structs.NodeEnterpriseMetaInPartition(structs.WildcardSpecifier)) - if err != nil { - return err - } - - // TODO(peering) Adjust this debug info. - // Generate a UUID to trace different passes through this function. - seq, err := uuid.GenerateUUID() - if err != nil { - s.logger.Debug("failed to generate sequence uuid while syncing peerings") - } - - logger.Trace("syncing new list of peers", "num_peers", len(peers), "sequence_id", seq) - - // Stored tracks the unique set of peers that should be dialed. - // It is used to reconcile the list of active streams. - stored := make(map[string]struct{}) - - var merr *multierror.Error - - // Create connections and streams to peers in the state store that do not have an active stream. - for _, peer := range peers { - logger.Trace("evaluating stored peer", "peer", peer.Name, "should_dial", peer.ShouldDial(), "sequence_id", seq) - - if !peer.ShouldDial() { - continue - } - - // TODO(peering) Account for deleted peers that are still in the state store - stored[peer.ID] = struct{}{} - - status, found := s.peeringService.StreamStatus(peer.ID) - - // TODO(peering): If there is new peering data and a connected stream, should we tear down the stream? - // If the data in the updated token is bad, the user wouldn't know until the old servers/certs become invalid. - // Alternatively we could do a basic Ping from the initiate peering endpoint to avoid dealing with that here. - if found && status.Connected { - // Nothing to do when we already have an active stream to the peer. - continue - } - logger.Trace("ensuring stream to peer", "peer_id", peer.ID, "sequence_id", seq) - - if cancel, ok := cancelFns[peer.ID]; ok { - // If the peer is known but we're not connected, clean up the retry-er and start over. - // There may be new data in the state store that would enable us to get out of an error state. - logger.Trace("cancelling context to re-establish stream", "peer_id", peer.ID, "sequence_id", seq) - cancel() - } - - if err := s.establishStream(ctx, logger, peer, cancelFns); err != nil { - // TODO(peering): These errors should be reported in the peer status, otherwise they're only in the logs. - // Lockable status isn't available here though. Could report it via the peering.Service? - logger.Error("error establishing peering stream", "peer_id", peer.ID, "error", err) - merr = multierror.Append(merr, err) - - // Continue on errors to avoid one bad peering from blocking the establishment and cleanup of others. - continue - } - } - - logger.Trace("checking connected streams", "streams", s.peeringService.ConnectedStreams(), "sequence_id", seq) - - // Clean up active streams of peerings that were deleted from the state store. - // TODO(peering): This is going to trigger shutting down peerings we generated a token for. Is that OK? - for stream, doneCh := range s.peeringService.ConnectedStreams() { - if _, ok := stored[stream]; ok { - // Active stream is in the state store, nothing to do. - continue - } - - select { - case <-doneCh: - // channel is closed, do nothing to avoid a panic - default: - logger.Trace("tearing down stream for deleted peer", "peer_id", stream, "sequence_id", seq) - close(doneCh) - } - } - - logger.Trace("blocking for changes", "sequence_id", seq) - - // Block for any changes to the state store. - ws.WatchCtx(ctx) - - logger.Trace("unblocked", "sequence_id", seq) - return merr.ErrorOrNil() -} - -func (s *Server) establishStream(ctx context.Context, logger hclog.Logger, peer *pbpeering.Peering, cancelFns map[string]context.CancelFunc) error { - tlsOption := grpc.WithInsecure() - if len(peer.PeerCAPems) > 0 { - var haveCerts bool - pool := x509.NewCertPool() - for _, pem := range peer.PeerCAPems { - if !pool.AppendCertsFromPEM([]byte(pem)) { - return fmt.Errorf("failed to parse PEM %s", pem) - } - if len(pem) > 0 { - haveCerts = true - } - } - if !haveCerts { - return fmt.Errorf("failed to build cert pool from peer CA pems") - } - cfg := tls.Config{ - ServerName: peer.PeerServerName, - RootCAs: pool, - } - tlsOption = grpc.WithTransportCredentials(credentials.NewTLS(&cfg)) - } - - // Create a ring buffer to cycle through peer addresses in the retry loop below. - buffer := ring.New(len(peer.PeerServerAddresses)) - for _, addr := range peer.PeerServerAddresses { - buffer.Value = addr - buffer = buffer.Next() - } - - logger.Trace("establishing stream to peer", "peer_id", peer.ID) - - retryCtx, cancel := context.WithCancel(ctx) - cancelFns[peer.ID] = cancel - - // Establish a stream-specific retry so that retrying stream/conn errors isn't dependent on state store changes. - go retryLoopBackoff(retryCtx, func() error { - // Try a new address on each iteration by advancing the ring buffer on errors. - defer func() { - buffer = buffer.Next() - }() - addr, ok := buffer.Value.(string) - if !ok { - return fmt.Errorf("peer server address type %T is not a string", buffer.Value) - } - - logger.Trace("dialing peer", "peer_id", peer.ID, "addr", addr) - conn, err := grpc.DialContext(retryCtx, addr, - grpc.WithContextDialer(newPeerDialer(addr)), - grpc.WithBlock(), - tlsOption, - ) - if err != nil { - return fmt.Errorf("failed to dial: %w", err) - } - defer conn.Close() - - client := pbpeering.NewPeeringServiceClient(conn) - stream, err := client.StreamResources(retryCtx) - if err != nil { - return err - } - - err = s.peeringService.HandleStream(peering.HandleStreamRequest{ - LocalID: peer.ID, - RemoteID: peer.PeerID, - PeerName: peer.Name, - Partition: peer.Partition, - Stream: stream, - }) - if err == nil { - // This will cancel the retry-er context, letting us break out of this loop when we want to shut down the stream. - cancel() - } - return err - - }, func(err error) { - // TODO(peering): These errors should be reported in the peer status, otherwise they're only in the logs. - // Lockable status isn't available here though. Could report it via the peering.Service? - logger.Error("error managing peering stream", "peer_id", peer.ID, "error", err) - }) - - return nil -} - -func newPeerDialer(peerAddr string) func(context.Context, string) (net.Conn, error) { - return func(ctx context.Context, addr string) (net.Conn, error) { - d := net.Dialer{} - conn, err := d.DialContext(ctx, "tcp", peerAddr) - if err != nil { - return nil, err - } - - // TODO(peering): This is going to need to be revisited. This type uses the TLS settings configured on the agent, but - // for peering we never want mutual TLS because the client peer doesn't share its CA cert. - _, err = conn.Write([]byte{byte(pool.RPCGRPC)}) - if err != nil { - conn.Close() - return nil, err - } - - return conn, nil - } -} diff --git a/agent/consul/leader_peering_test.go b/agent/consul/leader_peering_test.go deleted file mode 100644 index dd79529b3890b..0000000000000 --- a/agent/consul/leader_peering_test.go +++ /dev/null @@ -1,197 +0,0 @@ -package consul - -import ( - "context" - "encoding/base64" - "encoding/json" - "testing" - "time" - - "github.com/stretchr/testify/require" - "google.golang.org/grpc" - - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/sdk/testutil/retry" - "github.com/hashicorp/consul/testrpc" -) - -func TestLeader_PeeringSync_Lifecycle_ClientDeletion(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - // TODO(peering): Configure with TLS - _, s1 := testServerWithConfig(t, func(c *Config) { - c.NodeName = "s1.dc1" - c.Datacenter = "dc1" - c.TLSConfig.Domain = "consul" - }) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - // Create a peering by generating a token - ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) - t.Cleanup(cancel) - - conn, err := grpc.DialContext(ctx, s1.config.RPCAddr.String(), - grpc.WithContextDialer(newServerDialer(s1.config.RPCAddr.String())), - grpc.WithInsecure(), - grpc.WithBlock()) - require.NoError(t, err) - defer conn.Close() - - peeringClient := pbpeering.NewPeeringServiceClient(conn) - - req := pbpeering.GenerateTokenRequest{ - PeerName: "my-peer-s2", - } - resp, err := peeringClient.GenerateToken(ctx, &req) - require.NoError(t, err) - - tokenJSON, err := base64.StdEncoding.DecodeString(resp.PeeringToken) - require.NoError(t, err) - - var token structs.PeeringToken - require.NoError(t, json.Unmarshal(tokenJSON, &token)) - - // S1 should not have a stream tracked for dc2 because s1 generated a token for baz, and therefore needs to wait to be dialed. - time.Sleep(1 * time.Second) - _, found := s1.peeringService.StreamStatus(token.PeerID) - require.False(t, found) - - // Bring up s2 and store s1's token so that it attempts to dial. - _, s2 := testServerWithConfig(t, func(c *Config) { - c.NodeName = "s2.dc2" - c.Datacenter = "dc2" - c.PrimaryDatacenter = "dc2" - }) - testrpc.WaitForLeader(t, s2.RPC, "dc2") - - // Simulate a peering initiation event by writing a peering with data from a peering token. - // Eventually the leader in dc2 should dial and connect to the leader in dc1. - p := &pbpeering.Peering{ - Name: "my-peer-s1", - PeerID: token.PeerID, - PeerCAPems: token.CA, - PeerServerName: token.ServerName, - PeerServerAddresses: token.ServerAddresses, - } - require.True(t, p.ShouldDial()) - - // We maintain a pointer to the peering on the write so that we can get the ID without needing to re-query the state store. - require.NoError(t, s2.fsm.State().PeeringWrite(1000, p)) - - retry.Run(t, func(r *retry.R) { - status, found := s2.peeringService.StreamStatus(p.ID) - require.True(r, found) - require.True(r, status.Connected) - }) - - // Delete the peering to trigger the termination sequence - require.NoError(t, s2.fsm.State().PeeringDelete(2000, state.Query{ - Value: "my-peer-s1", - })) - s2.logger.Trace("deleted peering for my-peer-s1") - - retry.Run(t, func(r *retry.R) { - _, found := s2.peeringService.StreamStatus(p.ID) - require.False(r, found) - }) - - // s1 should have also marked the peering as terminated. - retry.Run(t, func(r *retry.R) { - _, peering, err := s1.fsm.State().PeeringRead(nil, state.Query{ - Value: "my-peer-s2", - }) - require.NoError(r, err) - require.Equal(r, pbpeering.PeeringState_TERMINATED, peering.State) - }) -} - -func TestLeader_PeeringSync_Lifecycle_ServerDeletion(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - // TODO(peering): Configure with TLS - _, s1 := testServerWithConfig(t, func(c *Config) { - c.NodeName = "s1.dc1" - c.Datacenter = "dc1" - c.TLSConfig.Domain = "consul" - }) - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - // Create a peering by generating a token - ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) - t.Cleanup(cancel) - - conn, err := grpc.DialContext(ctx, s1.config.RPCAddr.String(), - grpc.WithContextDialer(newServerDialer(s1.config.RPCAddr.String())), - grpc.WithInsecure(), - grpc.WithBlock()) - require.NoError(t, err) - defer conn.Close() - - peeringClient := pbpeering.NewPeeringServiceClient(conn) - - req := pbpeering.GenerateTokenRequest{ - PeerName: "my-peer-s2", - } - resp, err := peeringClient.GenerateToken(ctx, &req) - require.NoError(t, err) - - tokenJSON, err := base64.StdEncoding.DecodeString(resp.PeeringToken) - require.NoError(t, err) - - var token structs.PeeringToken - require.NoError(t, json.Unmarshal(tokenJSON, &token)) - - // Bring up s2 and store s1's token so that it attempts to dial. - _, s2 := testServerWithConfig(t, func(c *Config) { - c.NodeName = "s2.dc2" - c.Datacenter = "dc2" - c.PrimaryDatacenter = "dc2" - }) - testrpc.WaitForLeader(t, s2.RPC, "dc2") - - // Simulate a peering initiation event by writing a peering with data from a peering token. - // Eventually the leader in dc2 should dial and connect to the leader in dc1. - p := &pbpeering.Peering{ - Name: "my-peer-s1", - PeerID: token.PeerID, - PeerCAPems: token.CA, - PeerServerName: token.ServerName, - PeerServerAddresses: token.ServerAddresses, - } - require.True(t, p.ShouldDial()) - - // We maintain a pointer to the peering on the write so that we can get the ID without needing to re-query the state store. - require.NoError(t, s2.fsm.State().PeeringWrite(1000, p)) - - retry.Run(t, func(r *retry.R) { - status, found := s2.peeringService.StreamStatus(p.ID) - require.True(r, found) - require.True(r, status.Connected) - }) - - // Delete the peering from the server peer to trigger the termination sequence - require.NoError(t, s1.fsm.State().PeeringDelete(2000, state.Query{ - Value: "my-peer-s2", - })) - s2.logger.Trace("deleted peering for my-peer-s1") - - retry.Run(t, func(r *retry.R) { - _, found := s1.peeringService.StreamStatus(p.PeerID) - require.False(r, found) - }) - - // s2 should have received the termination message and updated the peering state - retry.Run(t, func(r *retry.R) { - _, peering, err := s2.fsm.State().PeeringRead(nil, state.Query{ - Value: "my-peer-s1", - }) - require.NoError(r, err) - require.Equal(r, pbpeering.PeeringState_TERMINATED, peering.State) - }) -} diff --git a/agent/consul/leader_test.go b/agent/consul/leader_test.go index 7b04518fc41ed..cb767acf04268 100644 --- a/agent/consul/leader_test.go +++ b/agent/consul/leader_test.go @@ -51,7 +51,7 @@ func TestLeader_RegisterMember(t *testing.T) { // Client should be registered state := s1.fsm.State() retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -61,7 +61,7 @@ func TestLeader_RegisterMember(t *testing.T) { }) // Should have a check - _, checks, err := state.NodeChecks(nil, c1.config.NodeName, nil, "") + _, checks, err := state.NodeChecks(nil, c1.config.NodeName, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -80,7 +80,7 @@ func TestLeader_RegisterMember(t *testing.T) { // Server should be registered retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(s1.config.NodeName, nil, "") + _, node, err := state.GetNode(s1.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -90,7 +90,7 @@ func TestLeader_RegisterMember(t *testing.T) { }) // Service should be registered - _, services, err := state.NodeServices(nil, s1.config.NodeName, nil, "") + _, services, err := state.NodeServices(nil, s1.config.NodeName, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -129,7 +129,7 @@ func TestLeader_FailedMember(t *testing.T) { // Should be registered state := s1.fsm.State() retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -139,7 +139,7 @@ func TestLeader_FailedMember(t *testing.T) { }) // Should have a check - _, checks, err := state.NodeChecks(nil, c1.config.NodeName, nil, "") + _, checks, err := state.NodeChecks(nil, c1.config.NodeName, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -154,7 +154,7 @@ func TestLeader_FailedMember(t *testing.T) { } retry.Run(t, func(r *retry.R) { - _, checks, err = state.NodeChecks(nil, c1.config.NodeName, nil, "") + _, checks, err = state.NodeChecks(nil, c1.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -193,7 +193,7 @@ func TestLeader_LeftMember(t *testing.T) { // Should be registered retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) require.NoError(r, err) require.NotNil(r, node, "client not registered") }) @@ -204,7 +204,7 @@ func TestLeader_LeftMember(t *testing.T) { // Should be deregistered retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) require.NoError(r, err) require.Nil(r, node, "client still registered") }) @@ -236,7 +236,7 @@ func TestLeader_ReapMember(t *testing.T) { // Should be registered retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) require.NoError(r, err) require.NotNil(r, node, "client not registered") }) @@ -257,7 +257,7 @@ func TestLeader_ReapMember(t *testing.T) { // anti-entropy will put it back. reaped := false for start := time.Now(); time.Since(start) < 5*time.Second; { - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) require.NoError(t, err) if node == nil { reaped = true @@ -296,7 +296,7 @@ func TestLeader_ReapOrLeftMember_IgnoreSelf(t *testing.T) { // Should be registered retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(nodeName, nil, "") + _, node, err := state.GetNode(nodeName, nil) require.NoError(r, err) require.NotNil(r, node, "server not registered") }) @@ -318,7 +318,7 @@ func TestLeader_ReapOrLeftMember_IgnoreSelf(t *testing.T) { // anti-entropy will put it back if it did get deleted. reaped := false for start := time.Now(); time.Since(start) < 5*time.Second; { - _, node, err := state.GetNode(nodeName, nil, "") + _, node, err := state.GetNode(nodeName, nil) require.NoError(t, err) if node == nil { reaped = true @@ -402,7 +402,7 @@ func TestLeader_CheckServersMeta(t *testing.T) { } // s3 should be registered retry.Run(t, func(r *retry.R) { - _, service, err := state.NodeService(nil, s3.config.NodeName, "consul", &consulService.EnterpriseMeta, "") + _, service, err := state.NodeService(s3.config.NodeName, "consul", &consulService.EnterpriseMeta) if err != nil { r.Fatalf("err: %v", err) } @@ -438,7 +438,7 @@ func TestLeader_CheckServersMeta(t *testing.T) { if err != nil { r.Fatalf("Unexpected error :%v", err) } - _, service, err := state.NodeService(nil, s3.config.NodeName, "consul", &consulService.EnterpriseMeta, "") + _, service, err := state.NodeService(s3.config.NodeName, "consul", &consulService.EnterpriseMeta) if err != nil { r.Fatalf("err: %v", err) } @@ -506,7 +506,7 @@ func TestLeader_ReapServer(t *testing.T) { // s3 should be registered retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(s3.config.NodeName, nil, "") + _, node, err := state.GetNode(s3.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -527,7 +527,7 @@ func TestLeader_ReapServer(t *testing.T) { } // s3 should be deregistered retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(s3.config.NodeName, nil, "") + _, node, err := state.GetNode(s3.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -582,7 +582,7 @@ func TestLeader_Reconcile_ReapMember(t *testing.T) { // Node should be gone state := s1.fsm.State() - _, node, err := state.GetNode("no-longer-around", nil, "") + _, node, err := state.GetNode("no-longer-around", nil) if err != nil { t.Fatalf("err: %v", err) } @@ -615,7 +615,7 @@ func TestLeader_Reconcile(t *testing.T) { // Should not be registered state := s1.fsm.State() - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -625,7 +625,7 @@ func TestLeader_Reconcile(t *testing.T) { // Should be registered retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -657,7 +657,7 @@ func TestLeader_Reconcile_Races(t *testing.T) { state := s1.fsm.State() var nodeAddr string retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -693,7 +693,7 @@ func TestLeader_Reconcile_Races(t *testing.T) { if err := s1.reconcile(); err != nil { t.Fatalf("err: %v", err) } - _, node, err := state.GetNode(c1.config.NodeName, nil, "") + _, node, err := state.GetNode(c1.config.NodeName, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -707,7 +707,7 @@ func TestLeader_Reconcile_Races(t *testing.T) { // Fail the member and wait for the health to go critical. c1.Shutdown() retry.Run(t, func(r *retry.R) { - _, checks, err := state.NodeChecks(nil, c1.config.NodeName, nil, "") + _, checks, err := state.NodeChecks(nil, c1.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -720,7 +720,7 @@ func TestLeader_Reconcile_Races(t *testing.T) { }) // Make sure the metadata didn't get clobbered. - _, node, err = state.GetNode(c1.config.NodeName, nil, "") + _, node, err = state.GetNode(c1.config.NodeName, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -835,7 +835,7 @@ func TestLeader_LeftLeader(t *testing.T) { // Verify the old leader is deregistered state := remain.fsm.State() retry.Run(t, func(r *retry.R) { - _, node, err := state.GetNode(leader.config.NodeName, nil, "") + _, node, err := state.GetNode(leader.config.NodeName, nil) if err != nil { r.Fatalf("err: %v", err) } @@ -2336,7 +2336,7 @@ func TestLeader_EnableVirtualIPs(t *testing.T) { }) require.NoError(t, err) - _, node, err := state.NodeService(nil, "bar", "tgate1", nil, "") + _, node, err := state.NodeService("bar", "tgate1", nil) require.NoError(t, err) sn := structs.ServiceName{Name: "api"} key := structs.ServiceGatewayVirtualIPTag(sn) diff --git a/agent/consul/merge_service_config.go b/agent/consul/merge_service_config.go deleted file mode 100644 index 8026553903d0b..0000000000000 --- a/agent/consul/merge_service_config.go +++ /dev/null @@ -1,408 +0,0 @@ -package consul - -import ( - "fmt" - - "github.com/hashicorp/consul/agent/configentry" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/go-hclog" - memdb "github.com/hashicorp/go-memdb" - "github.com/imdario/mergo" - "github.com/mitchellh/copystructure" -) - -// mergeNodeServiceWithCentralConfig merges a service instance (NodeService) with the -// proxy-defaults/global and service-defaults/:service config entries. -// This common helper is used by the blocking query function of different RPC endpoints -// that need to return a fully resolved service defintion. -func mergeNodeServiceWithCentralConfig( - ws memdb.WatchSet, - state *state.Store, - args *structs.ServiceSpecificRequest, - ns *structs.NodeService, - logger hclog.Logger) (uint64, *structs.NodeService, error) { - - serviceName := ns.Service - var upstreams []structs.ServiceID - if ns.IsSidecarProxy() { - // This is a sidecar proxy, ignore the proxy service's config since we are - // managed by the target service config. - serviceName = ns.Proxy.DestinationServiceName - - // Also if we have any upstreams defined, add them to the defaults lookup request - // so we can learn about their configs. - for _, us := range ns.Proxy.Upstreams { - if us.DestinationType == "" || us.DestinationType == structs.UpstreamDestTypeService { - sid := us.DestinationID() - sid.EnterpriseMeta.Merge(&ns.EnterpriseMeta) - upstreams = append(upstreams, sid) - } - } - } - - configReq := &structs.ServiceConfigRequest{ - Name: serviceName, - Datacenter: args.Datacenter, - QueryOptions: args.QueryOptions, - MeshGateway: ns.Proxy.MeshGateway, - Mode: ns.Proxy.Mode, - UpstreamIDs: upstreams, - EnterpriseMeta: ns.EnterpriseMeta, - } - - // prefer using this vs directly calling the ConfigEntry.ResolveServiceConfig RPC - // so as to pass down the same watch set to also watch on changes to - // proxy-defaults/global and service-defaults. - cfgIndex, configEntries, err := state.ReadResolvedServiceConfigEntries( - ws, - configReq.Name, - &configReq.EnterpriseMeta, - upstreams, - configReq.Mode, - ) - if err != nil { - return 0, nil, fmt.Errorf("Failure looking up service config entries for %s: %v", - ns.ID, err) - } - - defaults, err := computeResolvedServiceConfig( - configReq, - upstreams, - false, - configEntries, - logger, - ) - if err != nil { - return 0, nil, fmt.Errorf("Failure computing service defaults for %s: %v", - ns.ID, err) - } - - mergedns, err := MergeServiceConfig(defaults, ns) - if err != nil { - return 0, nil, fmt.Errorf("Failure merging service definition with config entry defaults for %s: %v", - ns.ID, err) - } - - return cfgIndex, mergedns, nil -} - -func computeResolvedServiceConfig( - args *structs.ServiceConfigRequest, - upstreamIDs []structs.ServiceID, - legacyUpstreams bool, - entries *configentry.ResolvedServiceConfigSet, - logger hclog.Logger, -) (*structs.ServiceConfigResponse, error) { - var thisReply structs.ServiceConfigResponse - - thisReply.MeshGateway.Mode = structs.MeshGatewayModeDefault - - // TODO(freddy) Refactor this into smaller set of state store functions - // Pass the WatchSet to both the service and proxy config lookups. If either is updated during the - // blocking query, this function will be rerun and these state store lookups will both be current. - // We use the default enterprise meta to look up the global proxy defaults because they are not namespaced. - var proxyConfGlobalProtocol string - proxyConf := entries.GetProxyDefaults(args.PartitionOrDefault()) - if proxyConf != nil { - // Apply the proxy defaults to the sidecar's proxy config - mapCopy, err := copystructure.Copy(proxyConf.Config) - if err != nil { - return nil, fmt.Errorf("failed to copy global proxy-defaults: %v", err) - } - thisReply.ProxyConfig = mapCopy.(map[string]interface{}) - thisReply.Mode = proxyConf.Mode - thisReply.TransparentProxy = proxyConf.TransparentProxy - thisReply.MeshGateway = proxyConf.MeshGateway - thisReply.Expose = proxyConf.Expose - - // Extract the global protocol from proxyConf for upstream configs. - rawProtocol := proxyConf.Config["protocol"] - if rawProtocol != nil { - var ok bool - proxyConfGlobalProtocol, ok = rawProtocol.(string) - if !ok { - return nil, fmt.Errorf("invalid protocol type %T", rawProtocol) - } - } - } - - serviceConf := entries.GetServiceDefaults( - structs.NewServiceID(args.Name, &args.EnterpriseMeta), - ) - if serviceConf != nil { - if serviceConf.Expose.Checks { - thisReply.Expose.Checks = true - } - if len(serviceConf.Expose.Paths) >= 1 { - thisReply.Expose.Paths = serviceConf.Expose.Paths - } - if serviceConf.MeshGateway.Mode != structs.MeshGatewayModeDefault { - thisReply.MeshGateway.Mode = serviceConf.MeshGateway.Mode - } - if serviceConf.Protocol != "" { - if thisReply.ProxyConfig == nil { - thisReply.ProxyConfig = make(map[string]interface{}) - } - thisReply.ProxyConfig["protocol"] = serviceConf.Protocol - } - if serviceConf.TransparentProxy.OutboundListenerPort != 0 { - thisReply.TransparentProxy.OutboundListenerPort = serviceConf.TransparentProxy.OutboundListenerPort - } - if serviceConf.TransparentProxy.DialedDirectly { - thisReply.TransparentProxy.DialedDirectly = serviceConf.TransparentProxy.DialedDirectly - } - if serviceConf.Mode != structs.ProxyModeDefault { - thisReply.Mode = serviceConf.Mode - } - - thisReply.Meta = serviceConf.Meta - } - - // First collect all upstreams into a set of seen upstreams. - // Upstreams can come from: - // - Explicitly from proxy registrations, and therefore as an argument to this RPC endpoint - // - Implicitly from centralized upstream config in service-defaults - seenUpstreams := map[structs.ServiceID]struct{}{} - - var ( - noUpstreamArgs = len(upstreamIDs) == 0 && len(args.Upstreams) == 0 - - // Check the args and the resolved value. If it was exclusively set via a config entry, then args.Mode - // will never be transparent because the service config request does not use the resolved value. - tproxy = args.Mode == structs.ProxyModeTransparent || thisReply.Mode == structs.ProxyModeTransparent - ) - - // The upstreams passed as arguments to this endpoint are the upstreams explicitly defined in a proxy registration. - // If no upstreams were passed, then we should only return the resolved config if the proxy is in transparent mode. - // Otherwise we would return a resolved upstream config to a proxy with no configured upstreams. - if noUpstreamArgs && !tproxy { - return &thisReply, nil - } - - // First store all upstreams that were provided in the request - for _, sid := range upstreamIDs { - if _, ok := seenUpstreams[sid]; !ok { - seenUpstreams[sid] = struct{}{} - } - } - - // Then store upstreams inferred from service-defaults and mapify the overrides. - var ( - upstreamConfigs = make(map[structs.ServiceID]*structs.UpstreamConfig) - upstreamDefaults *structs.UpstreamConfig - // usConfigs stores the opaque config map for each upstream and is keyed on the upstream's ID. - usConfigs = make(map[structs.ServiceID]map[string]interface{}) - ) - if serviceConf != nil && serviceConf.UpstreamConfig != nil { - for i, override := range serviceConf.UpstreamConfig.Overrides { - if override.Name == "" { - logger.Warn( - "Skipping UpstreamConfig.Overrides entry without a required name field", - "entryIndex", i, - "kind", serviceConf.GetKind(), - "name", serviceConf.GetName(), - "namespace", serviceConf.GetEnterpriseMeta().NamespaceOrEmpty(), - ) - continue // skip this impossible condition - } - seenUpstreams[override.ServiceID()] = struct{}{} - upstreamConfigs[override.ServiceID()] = override - } - if serviceConf.UpstreamConfig.Defaults != nil { - upstreamDefaults = serviceConf.UpstreamConfig.Defaults - - // Store the upstream defaults under a wildcard key so that they can be applied to - // upstreams that are inferred from intentions and do not have explicit upstream configuration. - cfgMap := make(map[string]interface{}) - upstreamDefaults.MergeInto(cfgMap) - - wildcard := structs.NewServiceID(structs.WildcardSpecifier, args.WithWildcardNamespace()) - usConfigs[wildcard] = cfgMap - } - } - - for upstream := range seenUpstreams { - resolvedCfg := make(map[string]interface{}) - - // The protocol of an upstream is resolved in this order: - // 1. Default protocol from proxy-defaults (how all services should be addressed) - // 2. Protocol for upstream service defined in its service-defaults (how the upstream wants to be addressed) - // 3. Protocol defined for the upstream in the service-defaults.(upstream_config.defaults|upstream_config.overrides) of the downstream - // (how the downstream wants to address it) - protocol := proxyConfGlobalProtocol - - upstreamSvcDefaults := entries.GetServiceDefaults( - structs.NewServiceID(upstream.ID, &upstream.EnterpriseMeta), - ) - if upstreamSvcDefaults != nil { - if upstreamSvcDefaults.Protocol != "" { - protocol = upstreamSvcDefaults.Protocol - } - } - - if protocol != "" { - resolvedCfg["protocol"] = protocol - } - - // Merge centralized defaults for all upstreams before configuration for specific upstreams - if upstreamDefaults != nil { - upstreamDefaults.MergeInto(resolvedCfg) - } - - // The MeshGateway value from the proxy registration overrides the one from upstream_defaults - // because it is specific to the proxy instance. - // - // The goal is to flatten the mesh gateway mode in this order: - // 0. Value from centralized upstream_defaults - // 1. Value from local proxy registration - // 2. Value from centralized upstream_config - // 3. Value from local upstream definition. This last step is done in the client's service manager. - if !args.MeshGateway.IsZero() { - resolvedCfg["mesh_gateway"] = args.MeshGateway - } - - if upstreamConfigs[upstream] != nil { - upstreamConfigs[upstream].MergeInto(resolvedCfg) - } - - if len(resolvedCfg) > 0 { - usConfigs[upstream] = resolvedCfg - } - } - - // don't allocate the slices just to not fill them - if len(usConfigs) == 0 { - return &thisReply, nil - } - - if legacyUpstreams { - // For legacy upstreams we return a map that is only keyed on the string ID, since they precede namespaces - thisReply.UpstreamConfigs = make(map[string]map[string]interface{}) - - for us, conf := range usConfigs { - thisReply.UpstreamConfigs[us.ID] = conf - } - - } else { - thisReply.UpstreamIDConfigs = make(structs.OpaqueUpstreamConfigs, 0, len(usConfigs)) - - for us, conf := range usConfigs { - thisReply.UpstreamIDConfigs = append(thisReply.UpstreamIDConfigs, - structs.OpaqueUpstreamConfig{Upstream: us, Config: conf}) - } - } - - return &thisReply, nil -} - -// MergeServiceConfig merges the service into defaults to produce the final effective -// config for the specified service. -func MergeServiceConfig(defaults *structs.ServiceConfigResponse, service *structs.NodeService) (*structs.NodeService, error) { - if defaults == nil { - return service, nil - } - - // We don't want to change s.registration in place since it is our source of - // truth about what was actually registered before defaults applied. So copy - // it first. - nsRaw, err := copystructure.Copy(service) - if err != nil { - return nil, err - } - - // Merge proxy defaults - ns := nsRaw.(*structs.NodeService) - - if err := mergo.Merge(&ns.Proxy.Config, defaults.ProxyConfig); err != nil { - return nil, err - } - if err := mergo.Merge(&ns.Proxy.Expose, defaults.Expose); err != nil { - return nil, err - } - - if ns.Proxy.MeshGateway.Mode == structs.MeshGatewayModeDefault { - ns.Proxy.MeshGateway.Mode = defaults.MeshGateway.Mode - } - if ns.Proxy.Mode == structs.ProxyModeDefault { - ns.Proxy.Mode = defaults.Mode - } - if ns.Proxy.TransparentProxy.OutboundListenerPort == 0 { - ns.Proxy.TransparentProxy.OutboundListenerPort = defaults.TransparentProxy.OutboundListenerPort - } - if !ns.Proxy.TransparentProxy.DialedDirectly { - ns.Proxy.TransparentProxy.DialedDirectly = defaults.TransparentProxy.DialedDirectly - } - - // remoteUpstreams contains synthetic Upstreams generated from central config (service-defaults.UpstreamConfigs). - remoteUpstreams := make(map[structs.ServiceID]structs.Upstream) - - for _, us := range defaults.UpstreamIDConfigs { - parsed, err := structs.ParseUpstreamConfigNoDefaults(us.Config) - if err != nil { - return nil, fmt.Errorf("failed to parse upstream config map for %s: %v", us.Upstream.String(), err) - } - - remoteUpstreams[us.Upstream] = structs.Upstream{ - DestinationNamespace: us.Upstream.NamespaceOrDefault(), - DestinationPartition: us.Upstream.PartitionOrDefault(), - DestinationName: us.Upstream.ID, - Config: us.Config, - MeshGateway: parsed.MeshGateway, - CentrallyConfigured: true, - } - } - - // localUpstreams stores the upstreams seen from the local registration so that we can merge in the synthetic entries. - // In transparent proxy mode ns.Proxy.Upstreams will likely be empty because users do not need to define upstreams explicitly. - // So to store upstream-specific flags from central config, we add entries to ns.Proxy.Upstream with those values. - localUpstreams := make(map[structs.ServiceID]struct{}) - - // Merge upstream defaults into the local registration - for i := range ns.Proxy.Upstreams { - // Get a pointer not a value copy of the upstream struct - us := &ns.Proxy.Upstreams[i] - if us.DestinationType != "" && us.DestinationType != structs.UpstreamDestTypeService { - continue - } - localUpstreams[us.DestinationID()] = struct{}{} - - remoteCfg, ok := remoteUpstreams[us.DestinationID()] - if !ok { - // No config defaults to merge - continue - } - - // The local upstream config mode has the highest precedence, so only overwrite when it's set to the default - if us.MeshGateway.Mode == structs.MeshGatewayModeDefault { - us.MeshGateway.Mode = remoteCfg.MeshGateway.Mode - } - - // Merge in everything else that is read from the map - if err := mergo.Merge(&us.Config, remoteCfg.Config); err != nil { - return nil, err - } - - // Delete the mesh gateway key from opaque config since this is the value that was resolved from - // the servers and NOT the final merged value for this upstream. - // Note that we use the "mesh_gateway" key and not other variants like "MeshGateway" because - // UpstreamConfig.MergeInto and ResolveServiceConfig only use "mesh_gateway". - delete(us.Config, "mesh_gateway") - } - - // Ensure upstreams present in central config are represented in the local configuration. - // This does not apply outside of transparent mode because in that situation every possible upstream already exists - // inside of ns.Proxy.Upstreams. - if ns.Proxy.Mode == structs.ProxyModeTransparent { - for id, remote := range remoteUpstreams { - if _, ok := localUpstreams[id]; ok { - // Remote upstream is already present locally - continue - } - - ns.Proxy.Upstreams = append(ns.Proxy.Upstreams, remote) - } - } - - return ns, err -} diff --git a/agent/consul/merge_service_config_test.go b/agent/consul/merge_service_config_test.go deleted file mode 100644 index 5a866dce2a0e2..0000000000000 --- a/agent/consul/merge_service_config_test.go +++ /dev/null @@ -1,458 +0,0 @@ -package consul - -import ( - "testing" - - "github.com/hashicorp/consul/agent/structs" - "github.com/mitchellh/copystructure" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func Test_MergeServiceConfig_TransparentProxy(t *testing.T) { - type args struct { - defaults *structs.ServiceConfigResponse - service *structs.NodeService - } - tests := []struct { - name string - args args - want *structs.NodeService - }{ - { - name: "inherit transparent proxy settings", - args: args{ - defaults: &structs.ServiceConfigResponse{ - Mode: structs.ProxyModeTransparent, - TransparentProxy: structs.TransparentProxyConfig{ - OutboundListenerPort: 10101, - DialedDirectly: true, - }, - }, - service: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Mode: structs.ProxyModeDefault, - TransparentProxy: structs.TransparentProxyConfig{}, - }, - }, - }, - want: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Mode: structs.ProxyModeTransparent, - TransparentProxy: structs.TransparentProxyConfig{ - OutboundListenerPort: 10101, - DialedDirectly: true, - }, - }, - }, - }, - { - name: "override transparent proxy settings", - args: args{ - defaults: &structs.ServiceConfigResponse{ - Mode: structs.ProxyModeTransparent, - TransparentProxy: structs.TransparentProxyConfig{ - OutboundListenerPort: 10101, - DialedDirectly: false, - }, - }, - service: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Mode: structs.ProxyModeDirect, - TransparentProxy: structs.TransparentProxyConfig{ - OutboundListenerPort: 808, - DialedDirectly: true, - }, - }, - }, - }, - want: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Mode: structs.ProxyModeDirect, - TransparentProxy: structs.TransparentProxyConfig{ - OutboundListenerPort: 808, - DialedDirectly: true, - }, - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - defaultsCopy, err := copystructure.Copy(tt.args.defaults) - require.NoError(t, err) - - got, err := MergeServiceConfig(tt.args.defaults, tt.args.service) - require.NoError(t, err) - assert.Equal(t, tt.want, got) - - // The input defaults must not be modified by the merge. - // See PR #10647 - assert.Equal(t, tt.args.defaults, defaultsCopy) - }) - } -} - -func Test_MergeServiceConfig_UpstreamOverrides(t *testing.T) { - type args struct { - defaults *structs.ServiceConfigResponse - service *structs.NodeService - } - tests := []struct { - name string - args args - want *structs.NodeService - }{ - { - name: "new config fields", - args: args{ - defaults: &structs.ServiceConfigResponse{ - UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ - { - Upstream: structs.ServiceID{ - ID: "zap", - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - }, - Config: map[string]interface{}{ - "passive_health_check": map[string]interface{}{ - "Interval": int64(10), - "MaxFailures": int64(2), - }, - "mesh_gateway": map[string]interface{}{ - "Mode": "local", - }, - "protocol": "grpc", - }, - }, - }, - }, - service: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zap", - }, - }, - }, - }, - }, - want: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zap", - Config: map[string]interface{}{ - "passive_health_check": map[string]interface{}{ - "Interval": int64(10), - "MaxFailures": int64(2), - }, - "protocol": "grpc", - }, - MeshGateway: structs.MeshGatewayConfig{ - Mode: structs.MeshGatewayModeLocal, - }, - }, - }, - }, - }, - }, - { - name: "remote upstream config expands local upstream list in transparent mode", - args: args{ - defaults: &structs.ServiceConfigResponse{ - UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ - { - Upstream: structs.ServiceID{ - ID: "zap", - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - }, - Config: map[string]interface{}{ - "protocol": "grpc", - }, - }, - }, - }, - service: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Mode: structs.ProxyModeTransparent, - TransparentProxy: structs.TransparentProxyConfig{ - OutboundListenerPort: 10101, - DialedDirectly: true, - }, - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zip", - LocalBindPort: 8080, - Config: map[string]interface{}{ - "protocol": "http", - }, - }, - }, - }, - }, - }, - want: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Mode: structs.ProxyModeTransparent, - TransparentProxy: structs.TransparentProxyConfig{ - OutboundListenerPort: 10101, - DialedDirectly: true, - }, - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zip", - LocalBindPort: 8080, - Config: map[string]interface{}{ - "protocol": "http", - }, - }, - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zap", - Config: map[string]interface{}{ - "protocol": "grpc", - }, - CentrallyConfigured: true, - }, - }, - }, - }, - }, - { - name: "remote upstream config not added to local upstream list outside of transparent mode", - args: args{ - defaults: &structs.ServiceConfigResponse{ - UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ - { - Upstream: structs.ServiceID{ - ID: "zap", - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - }, - Config: map[string]interface{}{ - "protocol": "grpc", - }, - }, - }, - }, - service: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Mode: structs.ProxyModeDirect, - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zip", - LocalBindPort: 8080, - Config: map[string]interface{}{ - "protocol": "http", - }, - }, - }, - }, - }, - }, - want: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - Mode: structs.ProxyModeDirect, - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zip", - LocalBindPort: 8080, - Config: map[string]interface{}{ - "protocol": "http", - }, - }, - }, - }, - }, - }, - { - name: "upstream mode from remote defaults overrides local default", - args: args{ - defaults: &structs.ServiceConfigResponse{ - UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ - { - Upstream: structs.ServiceID{ - ID: "zap", - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - }, - Config: map[string]interface{}{ - "mesh_gateway": map[string]interface{}{ - "Mode": "local", - }, - }, - }, - }, - }, - service: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - MeshGateway: structs.MeshGatewayConfig{ - Mode: structs.MeshGatewayModeRemote, - }, - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zap", - }, - }, - }, - }, - }, - want: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - MeshGateway: structs.MeshGatewayConfig{ - Mode: structs.MeshGatewayModeRemote, - }, - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zap", - Config: map[string]interface{}{}, - MeshGateway: structs.MeshGatewayConfig{ - Mode: structs.MeshGatewayModeLocal, - }, - }, - }, - }, - }, - }, - { - name: "mode in local upstream config overrides all", - args: args{ - defaults: &structs.ServiceConfigResponse{ - UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ - { - Upstream: structs.ServiceID{ - ID: "zap", - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - }, - Config: map[string]interface{}{ - "mesh_gateway": map[string]interface{}{ - "Mode": "local", - }, - }, - }, - }, - }, - service: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - MeshGateway: structs.MeshGatewayConfig{ - Mode: structs.MeshGatewayModeRemote, - }, - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zap", - MeshGateway: structs.MeshGatewayConfig{ - Mode: structs.MeshGatewayModeNone, - }, - }, - }, - }, - }, - }, - want: &structs.NodeService{ - ID: "foo-proxy", - Service: "foo-proxy", - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "foo", - DestinationServiceID: "foo", - MeshGateway: structs.MeshGatewayConfig{ - Mode: structs.MeshGatewayModeRemote, - }, - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationNamespace: "default", - DestinationPartition: "default", - DestinationName: "zap", - Config: map[string]interface{}{}, - MeshGateway: structs.MeshGatewayConfig{ - Mode: structs.MeshGatewayModeNone, - }, - }, - }, - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - defaultsCopy, err := copystructure.Copy(tt.args.defaults) - require.NoError(t, err) - - got, err := MergeServiceConfig(tt.args.defaults, tt.args.service) - require.NoError(t, err) - assert.Equal(t, tt.want, got) - - // The input defaults must not be modified by the merge. - // See PR #10647 - assert.Equal(t, tt.args.defaults, defaultsCopy) - }) - } -} diff --git a/agent/consul/peering_backend.go b/agent/consul/peering_backend.go deleted file mode 100644 index b82f52f230ccd..0000000000000 --- a/agent/consul/peering_backend.go +++ /dev/null @@ -1,169 +0,0 @@ -package consul - -import ( - "encoding/base64" - "encoding/json" - "fmt" - "strconv" - "sync" - - "google.golang.org/grpc" - - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/rpc/peering" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" -) - -type peeringBackend struct { - // TODO(peering): accept a smaller interface; maybe just funcs from the server that we actually need: DC, IsLeader, etc - srv *Server - connPool GRPCClientConner - apply *peeringApply - monitor *leadershipMonitor -} - -var _ peering.Backend = (*peeringBackend)(nil) - -// NewPeeringBackend returns a peering.Backend implementation that is bound to the given server. -func NewPeeringBackend(srv *Server, connPool GRPCClientConner) peering.Backend { - return &peeringBackend{ - srv: srv, - connPool: connPool, - apply: &peeringApply{srv: srv}, - monitor: &leadershipMonitor{}, - } -} - -// Forward should not be used to initiate forwarding over bidirectional streams -func (b *peeringBackend) Forward(info structs.RPCInfo, f func(*grpc.ClientConn) error) (handled bool, err error) { - // Only forward the request if the dc in the request matches the server's datacenter. - if info.RequestDatacenter() != "" && info.RequestDatacenter() != b.srv.config.Datacenter { - return false, fmt.Errorf("requests to generate peering tokens cannot be forwarded to remote datacenters") - } - return b.srv.ForwardGRPC(b.connPool, info, f) -} - -// GetAgentCACertificates gets the server's raw CA data from its TLS Configurator. -func (b *peeringBackend) GetAgentCACertificates() ([]string, error) { - // TODO(peering): handle empty CA pems - return b.srv.tlsConfigurator.ManualCAPems(), nil -} - -// GetServerAddresses looks up server node addresses from the state store. -func (b *peeringBackend) GetServerAddresses() ([]string, error) { - state := b.srv.fsm.State() - _, nodes, err := state.ServiceNodes(nil, "consul", structs.DefaultEnterpriseMetaInDefaultPartition(), structs.DefaultPeerKeyword) - if err != nil { - return nil, err - } - var addrs []string - for _, node := range nodes { - addrs = append(addrs, node.Address+":"+strconv.Itoa(node.ServicePort)) - } - return addrs, nil -} - -// GetServerName returns the SNI to be returned in the peering token data which -// will be used by peers when establishing peering connections over TLS. -func (b *peeringBackend) GetServerName() string { - return b.srv.tlsConfigurator.ServerSNI(b.srv.config.Datacenter, "") -} - -// EncodeToken encodes a peering token as a bas64-encoded representation of JSON (for now). -func (b *peeringBackend) EncodeToken(tok *structs.PeeringToken) ([]byte, error) { - jsonToken, err := json.Marshal(tok) - if err != nil { - return nil, fmt.Errorf("failed to marshal token: %w", err) - } - return []byte(base64.StdEncoding.EncodeToString(jsonToken)), nil -} - -// DecodeToken decodes a peering token from a base64-encoded JSON byte array (for now). -func (b *peeringBackend) DecodeToken(tokRaw []byte) (*structs.PeeringToken, error) { - tokJSONRaw, err := base64.StdEncoding.DecodeString(string(tokRaw)) - if err != nil { - return nil, fmt.Errorf("failed to decode token: %w", err) - } - var tok structs.PeeringToken - if err := json.Unmarshal(tokJSONRaw, &tok); err != nil { - return nil, err - } - return &tok, nil -} - -func (s peeringBackend) Subscribe(req *stream.SubscribeRequest) (*stream.Subscription, error) { - return s.srv.publisher.Subscribe(req) -} - -func (b *peeringBackend) Store() peering.Store { - return b.srv.fsm.State() -} - -func (b *peeringBackend) Apply() peering.Apply { - return b.apply -} - -func (b *peeringBackend) LeadershipMonitor() peering.LeadershipMonitor { - return b.monitor -} - -func (b *peeringBackend) EnterpriseCheckPartitions(partition string) error { - return b.enterpriseCheckPartitions(partition) -} - -func (b *peeringBackend) IsLeader() bool { - return b.srv.IsLeader() -} - -type leadershipMonitor struct { - lock sync.RWMutex - leaderAddr string -} - -func (m *leadershipMonitor) UpdateLeaderAddr(addr string) { - m.lock.Lock() - defer m.lock.Unlock() - - m.leaderAddr = addr -} - -func (m *leadershipMonitor) GetLeaderAddr() string { - m.lock.RLock() - defer m.lock.RUnlock() - - return m.leaderAddr -} - -type peeringApply struct { - srv *Server -} - -func (a *peeringApply) PeeringWrite(req *pbpeering.PeeringWriteRequest) error { - _, err := a.srv.raftApplyProtobuf(structs.PeeringWriteType, req) - return err -} - -func (a *peeringApply) PeeringDelete(req *pbpeering.PeeringDeleteRequest) error { - _, err := a.srv.raftApplyProtobuf(structs.PeeringDeleteType, req) - return err -} - -// TODO(peering): This needs RPC metrics interceptor since it's not triggered by an RPC. -func (a *peeringApply) PeeringTerminateByID(req *pbpeering.PeeringTerminateByIDRequest) error { - _, err := a.srv.raftApplyProtobuf(structs.PeeringTerminateByIDType, req) - return err -} - -func (a *peeringApply) PeeringTrustBundleWrite(req *pbpeering.PeeringTrustBundleWriteRequest) error { - _, err := a.srv.raftApplyProtobuf(structs.PeeringTrustBundleWriteType, req) - return err -} - -func (a *peeringApply) CatalogRegister(req *structs.RegisterRequest) error { - _, err := a.srv.leaderRaftApply("Catalog.Register", structs.RegisterRequestType, req) - return err -} - -var _ peering.Apply = (*peeringApply)(nil) -var _ peering.LeadershipMonitor = (*leadershipMonitor)(nil) diff --git a/agent/consul/peering_backend_oss.go b/agent/consul/peering_backend_oss.go deleted file mode 100644 index 5f5a117dbac56..0000000000000 --- a/agent/consul/peering_backend_oss.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !consulent -// +build !consulent - -package consul - -import ( - "fmt" -) - -func (b *peeringBackend) enterpriseCheckPartitions(partition string) error { - if partition != "" { - return fmt.Errorf("Partitions are a Consul Enterprise feature") - } - return nil -} diff --git a/agent/consul/peering_backend_oss_test.go b/agent/consul/peering_backend_oss_test.go deleted file mode 100644 index 75decc0a8c26f..0000000000000 --- a/agent/consul/peering_backend_oss_test.go +++ /dev/null @@ -1,51 +0,0 @@ -//go:build !consulent -// +build !consulent - -package consul - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/require" - gogrpc "google.golang.org/grpc" - - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/testrpc" -) - -func TestPeeringBackend_RejectsPartition(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - _, s1 := testServerWithConfig(t, func(c *Config) { - c.Datacenter = "dc1" - c.Bootstrap = true - }) - - testrpc.WaitForLeader(t, s1.RPC, "dc1") - - // make a grpc client to dial s1 directly - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - t.Cleanup(cancel) - - conn, err := gogrpc.DialContext(ctx, s1.config.RPCAddr.String(), - gogrpc.WithContextDialer(newServerDialer(s1.config.RPCAddr.String())), - gogrpc.WithInsecure(), - gogrpc.WithBlock()) - require.NoError(t, err) - t.Cleanup(func() { conn.Close() }) - - peeringClient := pbpeering.NewPeeringServiceClient(conn) - - req := pbpeering.GenerateTokenRequest{ - Datacenter: "dc1", - Partition: "test", - } - _, err = peeringClient.GenerateToken(ctx, &req) - require.Error(t, err) - require.Contains(t, err.Error(), "Partitions are a Consul Enterprise feature") -} diff --git a/agent/consul/peering_backend_test.go b/agent/consul/peering_backend_test.go deleted file mode 100644 index 6d6344a295df5..0000000000000 --- a/agent/consul/peering_backend_test.go +++ /dev/null @@ -1,116 +0,0 @@ -package consul - -import ( - "context" - "net" - "testing" - "time" - - "github.com/stretchr/testify/require" - gogrpc "google.golang.org/grpc" - - "github.com/hashicorp/consul/agent/pool" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/sdk/testutil" - "github.com/hashicorp/consul/testrpc" -) - -func TestPeeringBackend_DoesNotForwardToDifferentDC(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - _, s1 := testServerDC(t, "dc1") - _, s2 := testServerDC(t, "dc2") - - joinWAN(t, s2, s1) - - testrpc.WaitForLeader(t, s1.RPC, "dc1") - testrpc.WaitForLeader(t, s2.RPC, "dc2") - - // make a grpc client to dial s2 directly - ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) - t.Cleanup(cancel) - - conn, err := gogrpc.DialContext(ctx, s2.config.RPCAddr.String(), - gogrpc.WithContextDialer(newServerDialer(s2.config.RPCAddr.String())), - gogrpc.WithInsecure(), - gogrpc.WithBlock()) - require.NoError(t, err) - t.Cleanup(func() { conn.Close() }) - - peeringClient := pbpeering.NewPeeringServiceClient(conn) - - // GenerateToken request should fail against dc1, because we are dialing dc2. The GenerateToken request should never be forwarded across datacenters. - req := pbpeering.GenerateTokenRequest{ - PeerName: "peer1-usw1", - Datacenter: "dc1", - } - _, err = peeringClient.GenerateToken(ctx, &req) - require.Error(t, err) - require.Contains(t, err.Error(), "requests to generate peering tokens cannot be forwarded to remote datacenters") -} - -func TestPeeringBackend_ForwardToLeader(t *testing.T) { - t.Parallel() - - _, conf1 := testServerConfig(t) - server1, err := newServer(t, conf1) - require.NoError(t, err) - - _, conf2 := testServerConfig(t) - conf2.Bootstrap = false - server2, err := newServer(t, conf2) - require.NoError(t, err) - - // Join a 2nd server (not the leader) - testrpc.WaitForLeader(t, server1.RPC, "dc1") - joinLAN(t, server2, server1) - testrpc.WaitForLeader(t, server2.RPC, "dc1") - - // Make a write call to server2 and make sure it gets forwarded to server1 - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - // Dial server2 directly - conn, err := gogrpc.DialContext(ctx, server2.config.RPCAddr.String(), - gogrpc.WithContextDialer(newServerDialer(server2.config.RPCAddr.String())), - gogrpc.WithInsecure(), - gogrpc.WithBlock()) - require.NoError(t, err) - t.Cleanup(func() { conn.Close() }) - - peeringClient := pbpeering.NewPeeringServiceClient(conn) - - testutil.RunStep(t, "forward a write", func(t *testing.T) { - // Do the grpc Write call to server2 - req := pbpeering.GenerateTokenRequest{ - Datacenter: "dc1", - PeerName: "foo", - } - _, err := peeringClient.GenerateToken(ctx, &req) - require.NoError(t, err) - - // TODO(peering) check that state store is updated on leader, indicating a forwarded request after state store - // is implemented. - }) -} - -func newServerDialer(serverAddr string) func(context.Context, string) (net.Conn, error) { - return func(ctx context.Context, addr string) (net.Conn, error) { - d := net.Dialer{} - conn, err := d.DialContext(ctx, "tcp", serverAddr) - if err != nil { - return nil, err - } - - _, err = conn.Write([]byte{byte(pool.RPCGRPC)}) - if err != nil { - conn.Close() - return nil, err - } - - return conn, nil - } -} diff --git a/agent/consul/prepared_query/walk_test.go b/agent/consul/prepared_query/walk_test.go index e45aa3a1e42ec..2c6920afdbfcb 100644 --- a/agent/consul/prepared_query/walk_test.go +++ b/agent/consul/prepared_query/walk_test.go @@ -3,12 +3,12 @@ package prepared_query import ( "fmt" "reflect" - "sort" "testing" - "github.com/stretchr/testify/require" + "sort" "github.com/hashicorp/consul/agent/structs" + "github.com/stretchr/testify/require" ) func TestWalk_ServiceQuery(t *testing.T) { @@ -42,7 +42,6 @@ func TestWalk_ServiceQuery(t *testing.T) { ".Tags[0]:tag1", ".Tags[1]:tag2", ".Tags[2]:tag3", - ".PeerName:", } expected = append(expected, entMetaWalkFields...) sort.Strings(expected) diff --git a/agent/consul/prepared_query_endpoint.go b/agent/consul/prepared_query_endpoint.go index 31890449c0287..15f818171d861 100644 --- a/agent/consul/prepared_query_endpoint.go +++ b/agent/consul/prepared_query_endpoint.go @@ -404,7 +404,7 @@ func (p *PreparedQuery) Execute(args *structs.PreparedQueryExecuteRequest, qs.Node = args.Agent.Node } else if qs.Node == "_ip" { if args.Source.Ip != "" { - _, nodes, err := state.Nodes(nil, structs.NodeEnterpriseMetaInDefaultPartition(), structs.TODOPeerKeyword) + _, nodes, err := state.Nodes(nil, structs.NodeEnterpriseMetaInDefaultPartition()) if err != nil { return err } @@ -534,7 +534,7 @@ func (p *PreparedQuery) execute(query *structs.PreparedQuery, f = state.CheckConnectServiceNodes } - _, nodes, err := f(nil, query.Service.Service, &query.Service.EnterpriseMeta, query.Service.PeerName) + _, nodes, err := f(nil, query.Service.Service, &query.Service.EnterpriseMeta) if err != nil { return err } diff --git a/agent/consul/rpc_test.go b/agent/consul/rpc_test.go index 75f9b966266ee..4103be74672fd 100644 --- a/agent/consul/rpc_test.go +++ b/agent/consul/rpc_test.go @@ -1145,7 +1145,7 @@ func TestRPC_LocalTokenStrippedOnForward_GRPC(t *testing.T) { }) require.NoError(t, err) - testutil.RunStep(t, "Register a dummy node with a service", func(t *testing.T) { + runStep(t, "Register a dummy node with a service", func(t *testing.T) { req := &structs.RegisterRequest{ Node: "node1", Address: "3.4.5.6", @@ -1183,7 +1183,7 @@ func TestRPC_LocalTokenStrippedOnForward_GRPC(t *testing.T) { } // Try to use it locally (it should work) - testutil.RunStep(t, "token used locally should work", func(t *testing.T) { + runStep(t, "token used locally should work", func(t *testing.T) { arg := &pbsubscribe.SubscribeRequest{ Topic: pbsubscribe.Topic_ServiceHealth, Key: "redis", @@ -1198,7 +1198,7 @@ func TestRPC_LocalTokenStrippedOnForward_GRPC(t *testing.T) { require.Equal(t, localToken2.SecretID, arg.Token, "token should not be stripped") }) - testutil.RunStep(t, "token used remotely should not work", func(t *testing.T) { + runStep(t, "token used remotely should not work", func(t *testing.T) { arg := &pbsubscribe.SubscribeRequest{ Topic: pbsubscribe.Topic_ServiceHealth, Key: "redis", @@ -1216,7 +1216,7 @@ func TestRPC_LocalTokenStrippedOnForward_GRPC(t *testing.T) { require.True(t, event.Payload.(*pbsubscribe.Event_EndOfSnapshot).EndOfSnapshot) }) - testutil.RunStep(t, "update anonymous token to read services", func(t *testing.T) { + runStep(t, "update anonymous token to read services", func(t *testing.T) { tokenUpsertReq := structs.ACLTokenSetRequest{ Datacenter: "dc1", ACLToken: structs.ACLToken{ @@ -1233,7 +1233,7 @@ func TestRPC_LocalTokenStrippedOnForward_GRPC(t *testing.T) { require.NotEmpty(t, token.SecretID) }) - testutil.RunStep(t, "token used remotely should fallback on anonymous token now", func(t *testing.T) { + runStep(t, "token used remotely should fallback on anonymous token now", func(t *testing.T) { arg := &pbsubscribe.SubscribeRequest{ Topic: pbsubscribe.Topic_ServiceHealth, Key: "redis", diff --git a/agent/consul/server.go b/agent/consul/server.go index 16cc22baf4184..1f0ea51911863 100644 --- a/agent/consul/server.go +++ b/agent/consul/server.go @@ -16,16 +16,19 @@ import ( "sync/atomic" "time" + "github.com/hashicorp/consul/agent/rpc/middleware" + + "github.com/hashicorp/go-version" + "go.etcd.io/bbolt" + "github.com/armon/go-metrics" connlimit "github.com/hashicorp/go-connlimit" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" - "github.com/hashicorp/go-version" "github.com/hashicorp/raft" autopilot "github.com/hashicorp/raft-autopilot" raftboltdb "github.com/hashicorp/raft-boltdb/v2" "github.com/hashicorp/serf/serf" - "go.etcd.io/bbolt" "golang.org/x/time/rate" "google.golang.org/grpc" @@ -41,21 +44,15 @@ import ( "github.com/hashicorp/consul/agent/consul/wanfed" agentgrpc "github.com/hashicorp/consul/agent/grpc/private" "github.com/hashicorp/consul/agent/grpc/private/services/subscribe" - aclgrpc "github.com/hashicorp/consul/agent/grpc/public/services/acl" "github.com/hashicorp/consul/agent/grpc/public/services/connectca" - "github.com/hashicorp/consul/agent/grpc/public/services/dataplane" - "github.com/hashicorp/consul/agent/grpc/public/services/serverdiscovery" "github.com/hashicorp/consul/agent/metadata" "github.com/hashicorp/consul/agent/pool" "github.com/hashicorp/consul/agent/router" - "github.com/hashicorp/consul/agent/rpc/middleware" - "github.com/hashicorp/consul/agent/rpc/peering" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/token" "github.com/hashicorp/consul/lib" "github.com/hashicorp/consul/lib/routine" "github.com/hashicorp/consul/logging" - "github.com/hashicorp/consul/proto/pbpeering" "github.com/hashicorp/consul/proto/pbsubscribe" "github.com/hashicorp/consul/tlsutil" "github.com/hashicorp/consul/types" @@ -125,7 +122,6 @@ const ( intermediateCertRenewWatchRoutineName = "intermediate cert renew watch" backgroundCAInitializationRoutineName = "CA initialization" virtualIPCheckRoutineName = "virtual IP version check" - peeringStreamsRoutineName = "streaming peering resources" ) var ( @@ -241,16 +237,6 @@ type Server struct { // is only ever closed. leaveCh chan struct{} - // publicACLServer serves the ACL service exposed on the public gRPC port. - // It is also exposed on the private multiplexed "server" port to enable - // RPC forwarding. - publicACLServer *aclgrpc.Server - - // publicConnectCAServer serves the Connect CA service exposed on the public - // gRPC port. It is also exposed on the private multiplexed "server" port to - // enable RPC forwarding. - publicConnectCAServer *connectca.Server - // publicGRPCServer is the gRPC server exposed on the dedicated gRPC port, as // opposed to the multiplexed "server" port which is served by grpcHandler. publicGRPCServer *grpc.Server @@ -363,9 +349,6 @@ type Server struct { // this into the Deps struct and created it much earlier on. publisher *stream.EventPublisher - // peering is a service used to handle peering streams. - peeringService *peering.Service - // embedded struct to hold all the enterprise specific data EnterpriseServer } @@ -673,55 +656,6 @@ func NewServer(config *Config, flat Deps, publicGRPCServer *grpc.Server) (*Serve s.overviewManager = NewOverviewManager(s.logger, s.fsm, s.config.MetricsReportingInterval) go s.overviewManager.Run(&lib.StopChannelContext{StopCh: s.shutdownCh}) - // Initialize public gRPC server - register services on public gRPC server. - s.publicACLServer = aclgrpc.NewServer(aclgrpc.Config{ - ACLsEnabled: s.config.ACLsEnabled, - ForwardRPC: func(info structs.RPCInfo, fn func(*grpc.ClientConn) error) (bool, error) { - return s.ForwardGRPC(s.grpcConnPool, info, fn) - }, - InPrimaryDatacenter: s.InPrimaryDatacenter(), - LoadAuthMethod: func(methodName string, entMeta *acl.EnterpriseMeta) (*structs.ACLAuthMethod, aclgrpc.Validator, error) { - return s.loadAuthMethod(methodName, entMeta) - }, - LocalTokensEnabled: s.LocalTokensEnabled, - Logger: logger.Named("grpc-api.acl"), - NewLogin: func() aclgrpc.Login { return s.aclLogin() }, - NewTokenWriter: func() aclgrpc.TokenWriter { return s.aclTokenWriter() }, - PrimaryDatacenter: s.config.PrimaryDatacenter, - ValidateEnterpriseRequest: s.validateEnterpriseRequest, - }) - s.publicACLServer.Register(s.publicGRPCServer) - - s.publicConnectCAServer = connectca.NewServer(connectca.Config{ - Publisher: s.publisher, - GetStore: func() connectca.StateStore { return s.FSM().State() }, - Logger: logger.Named("grpc-api.connect-ca"), - ACLResolver: plainACLResolver{s.ACLResolver}, - CAManager: s.caManager, - ForwardRPC: func(info structs.RPCInfo, fn func(*grpc.ClientConn) error) (bool, error) { - return s.ForwardGRPC(s.grpcConnPool, info, fn) - }, - ConnectEnabled: s.config.ConnectEnabled, - }) - s.publicConnectCAServer.Register(s.publicGRPCServer) - - dataplane.NewServer(dataplane.Config{ - GetStore: func() dataplane.StateStore { return s.FSM().State() }, - Logger: logger.Named("grpc-api.dataplane"), - ACLResolver: plainACLResolver{s.ACLResolver}, - Datacenter: s.config.Datacenter, - }).Register(s.publicGRPCServer) - - serverdiscovery.NewServer(serverdiscovery.Config{ - Publisher: s.publisher, - ACLResolver: plainACLResolver{s.ACLResolver}, - Logger: logger.Named("grpc-api.server-discovery"), - }).Register(s.publicGRPCServer) - - // Initialize private gRPC server. - // - // Note: some "public" gRPC services are also exposed on the private gRPC server - // to enable RPC forwarding. s.grpcHandler = newGRPCHandlerFromConfig(flat, config, s) s.grpcLeaderForwarder = flat.LeaderForwarder go s.trackLeaderChanges() @@ -734,6 +668,14 @@ func NewServer(config *Config, flat Deps, publicGRPCServer *grpc.Server) (*Serve // since it can fire events when leadership is obtained. go s.monitorLeadership() + // Initialize public gRPC server. + connectca.NewServer(connectca.Config{ + Publisher: s.publisher, + GetStore: func() connectca.StateStore { return s.FSM().State() }, + Logger: logger.Named("grpc-api.connect-ca"), + ACLResolver: plainACLResolver{s.ACLResolver}, + }).Register(s.publicGRPCServer) + // Start listening for RPC requests. go func() { if err := s.grpcHandler.Run(); err != nil { @@ -758,29 +700,13 @@ func NewServer(config *Config, flat Deps, publicGRPCServer *grpc.Server) (*Serve } func newGRPCHandlerFromConfig(deps Deps, config *Config, s *Server) connHandler { - p := peering.NewService( - deps.Logger.Named("grpc-api.peering"), - peering.Config{ - Datacenter: config.Datacenter, - ConnectEnabled: config.ConnectEnabled, - }, - NewPeeringBackend(s, deps.GRPCConnPool), - ) - s.peeringService = p - register := func(srv *grpc.Server) { if config.RPCConfig.EnableStreaming { pbsubscribe.RegisterStateChangeSubscriptionServer(srv, subscribe.NewServer( &subscribeBackend{srv: s, connPool: deps.GRPCConnPool}, deps.Logger.Named("grpc-api.subscription"))) } - pbpeering.RegisterPeeringServiceServer(srv, s.peeringService) s.registerEnterpriseGRPCServices(deps, srv) - - // Note: these public gRPC services are also exposed on the private server to - // enable RPC forwarding. - s.publicACLServer.Register(srv) - s.publicConnectCAServer.Register(srv) } return agentgrpc.NewHandler(deps.Logger, config.RPCAddr, register) @@ -823,7 +749,7 @@ func (s *Server) setupRaft() error { }() var serverAddressProvider raft.ServerAddressProvider = nil - if s.config.RaftConfig.ProtocolVersion >= 3 { // ServerAddressProvider needs server ids to work correctly, which is only supported in protocol version 3 or higher + if s.config.RaftConfig.ProtocolVersion >= 3 { //ServerAddressProvider needs server ids to work correctly, which is only supported in protocol version 3 or higher serverAddressProvider = s.serverLookup } @@ -1603,8 +1529,6 @@ func computeRaftReloadableConfig(config ReloadableConfig) raft.ReloadableConfig TrailingLogs: defaultConf.RaftConfig.TrailingLogs, SnapshotInterval: defaultConf.RaftConfig.SnapshotInterval, SnapshotThreshold: defaultConf.RaftConfig.SnapshotThreshold, - ElectionTimeout: defaultConf.RaftConfig.ElectionTimeout, - HeartbeatTimeout: defaultConf.RaftConfig.HeartbeatTimeout, } if config.RaftSnapshotThreshold != 0 { raftCfg.SnapshotThreshold = uint64(config.RaftSnapshotThreshold) @@ -1615,12 +1539,6 @@ func computeRaftReloadableConfig(config ReloadableConfig) raft.ReloadableConfig if config.RaftTrailingLogs != 0 { raftCfg.TrailingLogs = uint64(config.RaftTrailingLogs) } - if config.HeartbeatTimeout >= 5*time.Millisecond { - raftCfg.HeartbeatTimeout = config.HeartbeatTimeout - } - if config.ElectionTimeout >= 5*time.Millisecond { - raftCfg.ElectionTimeout = config.ElectionTimeout - } return raftCfg } @@ -1658,8 +1576,7 @@ func (s *Server) trackLeaderChanges() { continue } - s.grpcLeaderForwarder.UpdateLeaderAddr(s.config.Datacenter, string(leaderObs.LeaderAddr)) - s.peeringService.Backend.LeadershipMonitor().UpdateLeaderAddr(string(leaderObs.LeaderAddr)) + s.grpcLeaderForwarder.UpdateLeaderAddr(s.config.Datacenter, string(leaderObs.Leader)) case <-s.shutdownCh: s.raft.DeregisterObserver(observer) return diff --git a/agent/consul/server_connect.go b/agent/consul/server_connect.go index 9193604d6ac06..5010eda7fe2ba 100644 --- a/agent/consul/server_connect.go +++ b/agent/consul/server_connect.go @@ -6,9 +6,9 @@ import ( "github.com/hashicorp/go-memdb" "github.com/hashicorp/consul/agent/connect" + "github.com/hashicorp/consul/agent/connect/ca" "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib" ) func (s *Server) getCARoots(ws memdb.WatchSet, state *state.Store) (*structs.IndexedCARoots, error) { @@ -59,7 +59,7 @@ func (s *Server) getCARoots(ws memdb.WatchSet, state *state.Store) (*structs.Ind ExternalTrustDomain: r.ExternalTrustDomain, NotBefore: r.NotBefore, NotAfter: r.NotAfter, - RootCert: lib.EnsureTrailingNewline(r.RootCert), + RootCert: ca.EnsureTrailingNewline(r.RootCert), IntermediateCerts: intermediates, RaftIndex: r.RaftIndex, Active: r.Active, diff --git a/agent/consul/server_register.go b/agent/consul/server_register.go index 7268a390349ff..4f91a73e14171 100644 --- a/agent/consul/server_register.go +++ b/agent/consul/server_register.go @@ -10,7 +10,7 @@ func init() { registerEndpoint(func(s *Server) interface{} { return &ConnectCA{srv: s, logger: s.loggers.Named(logging.Connect)} }) registerEndpoint(func(s *Server) interface{} { return &FederationState{s} }) registerEndpoint(func(s *Server) interface{} { return &DiscoveryChain{s} }) - registerEndpoint(func(s *Server) interface{} { return &Health{s, s.loggers.Named(logging.Health)} }) + registerEndpoint(func(s *Server) interface{} { return &Health{s} }) registerEndpoint(func(s *Server) interface{} { return &Intention{s, s.loggers.Named(logging.Intentions)} }) registerEndpoint(func(s *Server) interface{} { return &Internal{s, s.loggers.Named(logging.Internal)} }) registerEndpoint(func(s *Server) interface{} { return &KVS{s, s.loggers.Named(logging.KV)} }) diff --git a/agent/consul/server_test.go b/agent/consul/server_test.go index 9cd9762d34223..904c9d6ede9dc 100644 --- a/agent/consul/server_test.go +++ b/agent/consul/server_test.go @@ -19,6 +19,9 @@ import ( "github.com/hashicorp/raft" "google.golang.org/grpc" + "github.com/hashicorp/consul/agent/rpc/middleware" + "github.com/hashicorp/consul/ipaddr" + "github.com/hashicorp/go-uuid" "golang.org/x/time/rate" @@ -26,10 +29,8 @@ import ( "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/metadata" - "github.com/hashicorp/consul/agent/rpc/middleware" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/token" - "github.com/hashicorp/consul/ipaddr" "github.com/hashicorp/consul/sdk/freeport" "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" @@ -237,8 +238,6 @@ func testServerWithConfig(t *testing.T, configOpts ...func(*Config)) (string, *S r.Fatalf("err: %v", err) } }) - t.Cleanup(func() { srv.Shutdown() }) - return dir, srv } @@ -259,26 +258,6 @@ func testACLServerWithConfig(t *testing.T, cb func(*Config), initReplicationToke return dir, srv, codec } -func testGRPCIntegrationServer(t *testing.T, cb func(*Config)) (*Server, *grpc.ClientConn, rpc.ClientCodec) { - _, srv, codec := testACLServerWithConfig(t, cb, false) - - // Normally the gRPC server listener is created at the agent level and passed down into - // the Server creation. For our tests, we need to ensure - ln, err := net.Listen("tcp", "127.0.0.1:0") - require.NoError(t, err) - go func() { - _ = srv.publicGRPCServer.Serve(ln) - }() - t.Cleanup(srv.publicGRPCServer.Stop) - - conn, err := grpc.Dial(ln.Addr().String(), grpc.WithInsecure()) - require.NoError(t, err) - - t.Cleanup(func() { _ = conn.Close() }) - - return srv, conn, codec -} - func newServer(t *testing.T, c *Config) (*Server, error) { return newServerWithDeps(t, c, newDefaultDeps(t, c)) } @@ -1857,8 +1836,6 @@ func TestServer_computeRaftReloadableConfig(t *testing.T) { SnapshotThreshold: defaults.SnapshotThreshold, SnapshotInterval: defaults.SnapshotInterval, TrailingLogs: defaults.TrailingLogs, - ElectionTimeout: defaults.ElectionTimeout, - HeartbeatTimeout: defaults.HeartbeatTimeout, }, }, { @@ -1870,8 +1847,6 @@ func TestServer_computeRaftReloadableConfig(t *testing.T) { SnapshotThreshold: 123456, SnapshotInterval: defaults.SnapshotInterval, TrailingLogs: defaults.TrailingLogs, - ElectionTimeout: defaults.ElectionTimeout, - HeartbeatTimeout: defaults.HeartbeatTimeout, }, }, { @@ -1883,8 +1858,6 @@ func TestServer_computeRaftReloadableConfig(t *testing.T) { SnapshotThreshold: defaults.SnapshotThreshold, SnapshotInterval: 13 * time.Minute, TrailingLogs: defaults.TrailingLogs, - ElectionTimeout: defaults.ElectionTimeout, - HeartbeatTimeout: defaults.HeartbeatTimeout, }, }, { @@ -1896,8 +1869,6 @@ func TestServer_computeRaftReloadableConfig(t *testing.T) { SnapshotThreshold: defaults.SnapshotThreshold, SnapshotInterval: defaults.SnapshotInterval, TrailingLogs: 78910, - ElectionTimeout: defaults.ElectionTimeout, - HeartbeatTimeout: defaults.HeartbeatTimeout, }, }, { @@ -1906,15 +1877,11 @@ func TestServer_computeRaftReloadableConfig(t *testing.T) { RaftSnapshotThreshold: 123456, RaftSnapshotInterval: 13 * time.Minute, RaftTrailingLogs: 78910, - ElectionTimeout: 300 * time.Millisecond, - HeartbeatTimeout: 400 * time.Millisecond, }, want: raft.ReloadableConfig{ SnapshotThreshold: 123456, SnapshotInterval: 13 * time.Minute, TrailingLogs: 78910, - ElectionTimeout: 300 * time.Millisecond, - HeartbeatTimeout: 400 * time.Millisecond, }, }, } @@ -1951,50 +1918,3 @@ func TestServer_RPC_RateLimit(t *testing.T) { } }) } - -// TestServer_Peering_LeadershipMonitor tests that a peering service can receive the leader address -// through the LeadershipMonitor IRL. -func TestServer_Peering_LeadershipMonitor(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - - // given two servers: s1 (leader), s2 (follower) - _, conf1 := testServerConfig(t) - s1, err := newServer(t, conf1) - if err != nil { - t.Fatalf("err: %v", err) - } - defer s1.Shutdown() - - _, conf2 := testServerConfig(t) - conf2.Bootstrap = false - s2, err := newServer(t, conf2) - if err != nil { - t.Fatalf("err: %v", err) - } - defer s2.Shutdown() - - // Try to join - joinLAN(t, s2, s1) - - // Verify Raft has established a peer - retry.Run(t, func(r *retry.R) { - r.Check(wantRaft([]*Server{s1, s2})) - }) - - testrpc.WaitForLeader(t, s1.RPC, "dc1") - testrpc.WaitForLeader(t, s2.RPC, "dc1") - waitForLeaderEstablishment(t, s1) - - // the actual tests - // when leadership has been established s2 should have the address of s1 - // in its leadership monitor in the peering service - peeringLeaderAddr := s2.peeringService.Backend.LeadershipMonitor().GetLeaderAddr() - - require.Equal(t, s1.config.RPCAddr.String(), peeringLeaderAddr) - // test corollary by transitivity to future-proof against any setup bugs - require.NotEqual(t, s2.config.RPCAddr.String(), peeringLeaderAddr) -} diff --git a/agent/consul/state/acl_schema.go b/agent/consul/state/acl_schema.go index 5b9529bbd09dc..f2b77dcbf7bd5 100644 --- a/agent/consul/state/acl_schema.go +++ b/agent/consul/state/acl_schema.go @@ -239,26 +239,6 @@ func prefixIndexFromUUIDQuery(arg interface{}) ([]byte, error) { return nil, fmt.Errorf("unexpected type %T for Query prefix index", arg) } -func prefixIndexFromUUIDWithPeerQuery(arg interface{}) ([]byte, error) { - switch v := arg.(type) { - case Query: - var b indexBuilder - peername := v.PeerOrEmpty() - if peername == "" { - b.String(structs.LocalPeerKeyword) - } else { - b.String(strings.ToLower(peername)) - } - uuidBytes, err := variableLengthUUIDStringToBytes(v.Value) - if err != nil { - return nil, err - } - return append(b.Bytes(), uuidBytes...), nil - } - - return nil, fmt.Errorf("unexpected type %T for Query prefix index", arg) -} - func multiIndexPolicyFromACLRole(raw interface{}) ([][]byte, error) { role, ok := raw.(*structs.ACLRole) if !ok { diff --git a/agent/consul/state/catalog.go b/agent/consul/state/catalog.go index ae16267e4bcb2..db256cfe10630 100644 --- a/agent/consul/state/catalog.go +++ b/agent/consul/state/catalog.go @@ -34,8 +34,6 @@ var ( startingVirtualIP = net.IP{240, 0, 0, 0} virtualIPMaxOffset = net.IP{15, 255, 255, 254} - - ErrNodeNotFound = errors.New("node not found") ) func resizeNodeLookupKey(s string) string { @@ -59,7 +57,7 @@ func (s *Snapshot) Nodes() (memdb.ResultIterator, error) { // Services is used to pull the full list of services for a given node for use // during snapshots. -func (s *Snapshot) Services(node string, entMeta *acl.EnterpriseMeta, peerName string) (memdb.ResultIterator, error) { +func (s *Snapshot) Services(node string, entMeta *acl.EnterpriseMeta) (memdb.ResultIterator, error) { // TODO: accept non-pointer value if entMeta == nil { entMeta = structs.NodeEnterpriseMetaInDefaultPartition() @@ -67,13 +65,12 @@ func (s *Snapshot) Services(node string, entMeta *acl.EnterpriseMeta, peerName s return s.tx.Get(tableServices, indexNode, Query{ Value: node, EnterpriseMeta: *entMeta, - PeerName: peerName, }) } // Checks is used to pull the full list of checks for a given node for use // during snapshots. -func (s *Snapshot) Checks(node string, entMeta *acl.EnterpriseMeta, peerName string) (memdb.ResultIterator, error) { +func (s *Snapshot) Checks(node string, entMeta *acl.EnterpriseMeta) (memdb.ResultIterator, error) { // TODO: accept non-pointer value if entMeta == nil { entMeta = structs.NodeEnterpriseMetaInDefaultPartition() @@ -81,7 +78,6 @@ func (s *Snapshot) Checks(node string, entMeta *acl.EnterpriseMeta, peerName str return s.tx.Get(tableChecks, indexNode, Query{ Value: node, EnterpriseMeta: *entMeta, - PeerName: peerName, }) } @@ -138,12 +134,8 @@ func (s *Store) ensureCheckIfNodeMatches( preserveIndexes bool, node string, nodePartition string, - nodePeerName string, check *structs.HealthCheck, ) error { - if !strings.EqualFold(check.PeerName, nodePeerName) { - return fmt.Errorf("check peer name %q does not match node peer name %q", check.PeerName, nodePeerName) - } if !strings.EqualFold(check.Node, node) || !acl.EqualPartitions(nodePartition, check.PartitionOrDefault()) { return fmt.Errorf("check node %q does not match node %q", printNodeName(check.Node, check.PartitionOrDefault()), @@ -167,9 +159,6 @@ func printNodeName(nodeName, partition string) string { // registration is performed within a single transaction to avoid race // conditions on state updates. func (s *Store) ensureRegistrationTxn(tx WriteTxn, idx uint64, preserveIndexes bool, req *structs.RegisterRequest, restore bool) error { - if err := validateRegisterRequestPeerNamesTxn(tx, req, restore); err != nil { - return err - } if _, err := validateRegisterRequestTxn(tx, req, restore); err != nil { return err } @@ -183,7 +172,6 @@ func (s *Store) ensureRegistrationTxn(tx WriteTxn, idx uint64, preserveIndexes b Partition: req.PartitionOrDefault(), TaggedAddresses: req.TaggedAddresses, Meta: req.NodeMeta, - PeerName: req.PeerName, } if preserveIndexes { node.CreateIndex = req.CreateIndex @@ -199,7 +187,6 @@ func (s *Store) ensureRegistrationTxn(tx WriteTxn, idx uint64, preserveIndexes b existing, err := tx.First(tableNodes, indexID, Query{ Value: node.Node, EnterpriseMeta: *node.GetEnterpriseMeta(), - PeerName: node.PeerName, }) if err != nil { return fmt.Errorf("node lookup failed: %s", err) @@ -219,7 +206,6 @@ func (s *Store) ensureRegistrationTxn(tx WriteTxn, idx uint64, preserveIndexes b EnterpriseMeta: req.Service.EnterpriseMeta, Node: req.Node, Service: req.Service.ID, - PeerName: req.PeerName, }) if err != nil { return fmt.Errorf("failed service lookup: %s", err) @@ -234,14 +220,12 @@ func (s *Store) ensureRegistrationTxn(tx WriteTxn, idx uint64, preserveIndexes b // Add the checks, if any. if req.Check != nil { - err := s.ensureCheckIfNodeMatches(tx, idx, preserveIndexes, req.Node, req.PartitionOrDefault(), req.PeerName, req.Check) - if err != nil { + if err := s.ensureCheckIfNodeMatches(tx, idx, preserveIndexes, req.Node, req.PartitionOrDefault(), req.Check); err != nil { return err } } for _, check := range req.Checks { - err := s.ensureCheckIfNodeMatches(tx, idx, preserveIndexes, req.Node, req.PartitionOrDefault(), req.PeerName, check) - if err != nil { + if err := s.ensureCheckIfNodeMatches(tx, idx, preserveIndexes, req.Node, req.PartitionOrDefault(), check); err != nil { return err } } @@ -249,61 +233,6 @@ func (s *Store) ensureRegistrationTxn(tx WriteTxn, idx uint64, preserveIndexes b return nil } -func validateRegisterRequestPeerNamesTxn(_ ReadTxn, args *structs.RegisterRequest, _ bool) error { - var ( - peerNames = make(map[string]struct{}) - ) - if args.Service != nil { - if args.Service.PeerName == "" { - args.Service.PeerName = args.PeerName - } - - peerName := args.Service.PeerName - // TODO(peering): validate the peering exists (skip check on restore) - - peerNames[peerName] = struct{}{} - } - - validateCheck := func(chk *structs.HealthCheck) error { - if chk.PeerName == "" { - chk.PeerName = args.PeerName - } - - peerName := chk.PeerName - // TODO(peering): validate the peering exists (skip check on restore) - - peerNames[peerName] = struct{}{} - - return nil - } - - if args.Check != nil { - if err := validateCheck(args.Check); err != nil { - return err - } - } - for _, chk := range args.Checks { - if err := validateCheck(chk); err != nil { - return err - } - } - - { - // TODO(peering): validate the node's peering exists (skip check on restore) - peerName := args.PeerName - peerNames[peerName] = struct{}{} - } - - if len(peerNames) > 1 { - return fmt.Errorf("Cannot register services and checks for multiple peer names in one registration request") - } else if len(peerNames) == 0 { - return fmt.Errorf("No peer names are present on the registration request; this makes no sense") - } - - return nil - -} - // EnsureNode is used to upsert node registration or modification. func (s *Store) EnsureNode(idx uint64, node *structs.Node) error { tx := s.db.WriteTxn(idx) @@ -321,11 +250,8 @@ func (s *Store) EnsureNode(idx uint64, node *structs.Node) error { // If allowClashWithoutID then, getting a conflict on another node without ID will be allowed func ensureNoNodeWithSimilarNameTxn(tx ReadTxn, node *structs.Node, allowClashWithoutID bool) error { // Retrieve all of the nodes - q := Query{ - PeerName: node.PeerName, - EnterpriseMeta: *node.GetEnterpriseMeta(), - } - enodes, err := tx.Get(tableNodes, indexID+"_prefix", q) + + enodes, err := tx.Get(tableNodes, indexID+"_prefix", node.GetEnterpriseMeta()) if err != nil { return fmt.Errorf("Cannot lookup all nodes: %s", err) } @@ -338,7 +264,6 @@ func ensureNoNodeWithSimilarNameTxn(tx ReadTxn, node *structs.Node, allowClashWi EnterpriseMeta: *node.GetEnterpriseMeta(), Node: enode.Node, CheckID: string(structs.SerfCheckID), - PeerName: enode.PeerName, }) if err != nil { return fmt.Errorf("Cannot get status of node %s: %s", enode.Node, err) @@ -366,7 +291,7 @@ func ensureNoNodeWithSimilarNameTxn(tx ReadTxn, node *structs.Node, allowClashWi // Returns a bool indicating if a write happened and any error. func (s *Store) ensureNodeCASTxn(tx WriteTxn, idx uint64, node *structs.Node) (bool, error) { // Retrieve the existing entry. - existing, err := getNodeTxn(tx, node.Node, node.GetEnterpriseMeta(), node.PeerName) + existing, err := getNodeTxn(tx, node.Node, node.GetEnterpriseMeta()) if err != nil { return false, err } @@ -399,7 +324,7 @@ func (s *Store) ensureNodeTxn(tx WriteTxn, idx uint64, preserveIndexes bool, nod // name is the same. var n *structs.Node if node.ID != "" { - existing, err := getNodeIDTxn(tx, node.ID, node.GetEnterpriseMeta(), node.PeerName) + existing, err := getNodeIDTxn(tx, node.ID, node.GetEnterpriseMeta()) if err != nil { return fmt.Errorf("node lookup failed: %s", err) } @@ -412,7 +337,7 @@ func (s *Store) ensureNodeTxn(tx WriteTxn, idx uint64, preserveIndexes bool, nod return fmt.Errorf("Error while renaming Node ID: %q (%s): %s", node.ID, node.Address, dupNameError) } // We are actually renaming a node, remove its reference first - err := s.deleteNodeTxn(tx, idx, n.Node, n.GetEnterpriseMeta(), n.PeerName) + err := s.deleteNodeTxn(tx, idx, n.Node, n.GetEnterpriseMeta()) if err != nil { return fmt.Errorf("Error while renaming Node ID: %q (%s) from %s to %s", node.ID, node.Address, n.Node, node.Node) @@ -435,7 +360,6 @@ func (s *Store) ensureNodeTxn(tx WriteTxn, idx uint64, preserveIndexes bool, nod existing, err := tx.First(tableNodes, indexID, Query{ Value: node.Node, EnterpriseMeta: *node.GetEnterpriseMeta(), - PeerName: node.PeerName, }) if err != nil { return fmt.Errorf("node name lookup failed: %s", err) @@ -472,7 +396,7 @@ func (s *Store) ensureNodeTxn(tx WriteTxn, idx uint64, preserveIndexes bool, nod } // GetNode is used to retrieve a node registration by node name ID. -func (s *Store) GetNode(nodeNameOrID string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, *structs.Node, error) { +func (s *Store) GetNode(nodeNameOrID string, entMeta *acl.EnterpriseMeta) (uint64, *structs.Node, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -482,21 +406,20 @@ func (s *Store) GetNode(nodeNameOrID string, entMeta *acl.EnterpriseMeta, peerNa } // Get the table index. - idx := catalogNodesMaxIndex(tx, entMeta, peerName) + idx := catalogNodesMaxIndex(tx, entMeta) // Retrieve the node from the state store - node, err := getNodeTxn(tx, nodeNameOrID, entMeta, peerName) + node, err := getNodeTxn(tx, nodeNameOrID, entMeta) if err != nil { return 0, nil, fmt.Errorf("node lookup failed: %s", err) } return idx, node, nil } -func getNodeTxn(tx ReadTxn, nodeNameOrID string, entMeta *acl.EnterpriseMeta, peerName string) (*structs.Node, error) { +func getNodeTxn(tx ReadTxn, nodeNameOrID string, entMeta *acl.EnterpriseMeta) (*structs.Node, error) { node, err := tx.First(tableNodes, indexID, Query{ Value: nodeNameOrID, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return nil, fmt.Errorf("node lookup failed: %s", err) @@ -507,11 +430,10 @@ func getNodeTxn(tx ReadTxn, nodeNameOrID string, entMeta *acl.EnterpriseMeta, pe return nil, nil } -func getNodeIDTxn(tx ReadTxn, id types.NodeID, entMeta *acl.EnterpriseMeta, peerName string) (*structs.Node, error) { +func getNodeIDTxn(tx ReadTxn, id types.NodeID, entMeta *acl.EnterpriseMeta) (*structs.Node, error) { node, err := tx.First(tableNodes, indexUUID+"_prefix", Query{ Value: string(id), EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return nil, fmt.Errorf("node lookup by ID failed: %s", err) @@ -523,7 +445,7 @@ func getNodeIDTxn(tx ReadTxn, id types.NodeID, entMeta *acl.EnterpriseMeta, peer } // GetNodeID is used to retrieve a node registration by node ID. -func (s *Store) GetNodeID(id types.NodeID, entMeta *acl.EnterpriseMeta, peerName string) (uint64, *structs.Node, error) { +func (s *Store) GetNodeID(id types.NodeID, entMeta *acl.EnterpriseMeta) (uint64, *structs.Node, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -532,15 +454,16 @@ func (s *Store) GetNodeID(id types.NodeID, entMeta *acl.EnterpriseMeta, peerName entMeta = structs.NodeEnterpriseMetaInDefaultPartition() } - idx := catalogNodesMaxIndex(tx, entMeta, peerName) + // Get the table index. + idx := catalogNodesMaxIndex(tx, entMeta) // Retrieve the node from the state store - node, err := getNodeIDTxn(tx, id, entMeta, peerName) + node, err := getNodeIDTxn(tx, id, entMeta) return idx, node, err } // Nodes is used to return all of the known nodes. -func (s *Store) Nodes(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.Nodes, error) { +func (s *Store) Nodes(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta) (uint64, structs.Nodes, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -549,14 +472,11 @@ func (s *Store) Nodes(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, peerName s entMeta = structs.NodeEnterpriseMetaInDefaultPartition() } - idx := catalogNodesMaxIndex(tx, entMeta, peerName) + // Get the table index. + idx := catalogNodesMaxIndex(tx, entMeta) // Retrieve all of the nodes - q := Query{ - PeerName: peerName, - EnterpriseMeta: *entMeta, - } - nodes, err := tx.Get(tableNodes, indexID+"_prefix", q) + nodes, err := tx.Get(tableNodes, indexID+"_prefix", entMeta) if err != nil { return 0, nil, fmt.Errorf("failed nodes lookup: %s", err) } @@ -571,7 +491,7 @@ func (s *Store) Nodes(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, peerName s } // NodesByMeta is used to return all nodes with the given metadata key/value pairs. -func (s *Store) NodesByMeta(ws memdb.WatchSet, filters map[string]string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.Nodes, error) { +func (s *Store) NodesByMeta(ws memdb.WatchSet, filters map[string]string, entMeta *acl.EnterpriseMeta) (uint64, structs.Nodes, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -580,7 +500,8 @@ func (s *Store) NodesByMeta(ws memdb.WatchSet, filters map[string]string, entMet entMeta = structs.NodeEnterpriseMetaInDefaultPartition() } - idx := catalogNodesMaxIndex(tx, entMeta, peerName) + // Get the table index. + idx := catalogNodesMaxIndex(tx, entMeta) if len(filters) == 0 { return idx, nil, nil // NodesByMeta is never called with an empty map, but just in case make it return no results. @@ -598,7 +519,6 @@ func (s *Store) NodesByMeta(ws memdb.WatchSet, filters map[string]string, entMet Key: firstKey, Value: firstValue, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return 0, nil, fmt.Errorf("failed nodes lookup: %s", err) @@ -617,7 +537,7 @@ func (s *Store) NodesByMeta(ws memdb.WatchSet, filters map[string]string, entMet } // DeleteNode is used to delete a given node by its ID. -func (s *Store) DeleteNode(idx uint64, nodeName string, entMeta *acl.EnterpriseMeta, peerName string) error { +func (s *Store) DeleteNode(idx uint64, nodeName string, entMeta *acl.EnterpriseMeta) error { tx := s.db.WriteTxn(idx) defer tx.Abort() @@ -627,7 +547,7 @@ func (s *Store) DeleteNode(idx uint64, nodeName string, entMeta *acl.EnterpriseM } // Call the node deletion. - if err := s.deleteNodeTxn(tx, idx, nodeName, entMeta, peerName); err != nil { + if err := s.deleteNodeTxn(tx, idx, nodeName, entMeta); err != nil { return err } @@ -637,9 +557,9 @@ func (s *Store) DeleteNode(idx uint64, nodeName string, entMeta *acl.EnterpriseM // deleteNodeCASTxn is used to try doing a node delete operation with a given // raft index. If the CAS index specified is not equal to the last observed index for // the given check, then the call is a noop, otherwise a normal check delete is invoked. -func (s *Store) deleteNodeCASTxn(tx WriteTxn, idx, cidx uint64, nodeName string, entMeta *acl.EnterpriseMeta, peerName string) (bool, error) { +func (s *Store) deleteNodeCASTxn(tx WriteTxn, idx, cidx uint64, nodeName string, entMeta *acl.EnterpriseMeta) (bool, error) { // Look up the node. - node, err := getNodeTxn(tx, nodeName, entMeta, peerName) + node, err := getNodeTxn(tx, nodeName, entMeta) if err != nil { return false, err } @@ -655,7 +575,7 @@ func (s *Store) deleteNodeCASTxn(tx WriteTxn, idx, cidx uint64, nodeName string, } // Call the actual deletion if the above passed. - if err := s.deleteNodeTxn(tx, idx, nodeName, entMeta, peerName); err != nil { + if err := s.deleteNodeTxn(tx, idx, nodeName, entMeta); err != nil { return false, err } @@ -664,22 +584,21 @@ func (s *Store) deleteNodeCASTxn(tx WriteTxn, idx, cidx uint64, nodeName string, // deleteNodeTxn is the inner method used for removing a node from // the store within a given transaction. -func (s *Store) deleteNodeTxn(tx WriteTxn, idx uint64, nodeName string, entMeta *acl.EnterpriseMeta, peerName string) error { +func (s *Store) deleteNodeTxn(tx WriteTxn, idx uint64, nodeName string, entMeta *acl.EnterpriseMeta) error { // TODO: accept non-pointer value if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } // Look up the node. - nodeRaw, err := tx.First(tableNodes, indexID, Query{ + node, err := tx.First(tableNodes, indexID, Query{ Value: nodeName, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return fmt.Errorf("node lookup failed: %s", err) } - if nodeRaw == nil { + if node == nil { return nil } @@ -687,7 +606,6 @@ func (s *Store) deleteNodeTxn(tx WriteTxn, idx uint64, nodeName string, entMeta services, err := tx.Get(tableServices, indexNode, Query{ Value: nodeName, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return fmt.Errorf("failed service lookup: %s", err) @@ -697,17 +615,17 @@ func (s *Store) deleteNodeTxn(tx WriteTxn, idx uint64, nodeName string, entMeta svc := service.(*structs.ServiceNode) deleteServices = append(deleteServices, svc) - if err := catalogUpdateServiceIndexes(tx, idx, svc.ServiceName, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceIndexes(tx, svc.ServiceName, idx, &svc.EnterpriseMeta); err != nil { return err } - if err := catalogUpdateServiceKindIndexes(tx, idx, svc.ServiceKind, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceKindIndexes(tx, svc.ServiceKind, idx, &svc.EnterpriseMeta); err != nil { return err } } // Do the delete in a separate loop so we don't trash the iterator. for _, svc := range deleteServices { - if err := s.deleteServiceTxn(tx, idx, nodeName, svc.ServiceID, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := s.deleteServiceTxn(tx, idx, nodeName, svc.ServiceID, &svc.EnterpriseMeta); err != nil { return err } } @@ -717,7 +635,6 @@ func (s *Store) deleteNodeTxn(tx WriteTxn, idx uint64, nodeName string, entMeta checks, err := tx.Get(tableChecks, indexNode, Query{ Value: nodeName, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return fmt.Errorf("failed check lookup: %s", err) @@ -729,52 +646,46 @@ func (s *Store) deleteNodeTxn(tx WriteTxn, idx uint64, nodeName string, entMeta // Do the delete in a separate loop so we don't trash the iterator. for _, chk := range deleteChecks { - if err := s.deleteCheckTxn(tx, idx, nodeName, chk.CheckID, &chk.EnterpriseMeta, chk.PeerName); err != nil { + if err := s.deleteCheckTxn(tx, idx, nodeName, chk.CheckID, &chk.EnterpriseMeta); err != nil { return err } } - if peerName == "" { - // Delete any coordinates associated with this node. - coords, err := tx.Get(tableCoordinates, indexNode, Query{ - Value: nodeName, - EnterpriseMeta: *entMeta, - PeerName: structs.DefaultPeerKeyword, - }) - if err != nil { - return fmt.Errorf("failed coordinate lookup: %s", err) - } - var coordsToDelete []*structs.Coordinate - for coord := coords.Next(); coord != nil; coord = coords.Next() { - coordsToDelete = append(coordsToDelete, coord.(*structs.Coordinate)) - } - for _, coord := range coordsToDelete { - if err := deleteCoordinateTxn(tx, idx, coord); err != nil { - return fmt.Errorf("failed deleting coordinate: %s", err) - } + // Delete any coordinates associated with this node. + coords, err := tx.Get(tableCoordinates, indexNode, Query{ + Value: nodeName, + EnterpriseMeta: *entMeta, + }) + if err != nil { + return fmt.Errorf("failed coordinate lookup: %s", err) + } + var coordsToDelete []*structs.Coordinate + for coord := coords.Next(); coord != nil; coord = coords.Next() { + coordsToDelete = append(coordsToDelete, coord.(*structs.Coordinate)) + } + for _, coord := range coordsToDelete { + if err := deleteCoordinateTxn(tx, idx, coord); err != nil { + return fmt.Errorf("failed deleting coordinate: %s", err) } } // Delete the node and update the index. - if err := tx.Delete(tableNodes, nodeRaw); err != nil { + if err := tx.Delete(tableNodes, node); err != nil { return fmt.Errorf("failed deleting node: %s", err) } - node := nodeRaw.(*structs.Node) - if err := catalogUpdateNodesIndexes(tx, idx, entMeta, node.PeerName); err != nil { + if err := catalogUpdateNodesIndexes(tx, idx, entMeta); err != nil { return fmt.Errorf("failed updating index: %s", err) } - if peerName == "" { - // Invalidate any sessions for this node. - toDelete, err := allNodeSessionsTxn(tx, nodeName, entMeta.PartitionOrDefault()) - if err != nil { - return err - } + // Invalidate any sessions for this node. + toDelete, err := allNodeSessionsTxn(tx, nodeName, entMeta.PartitionOrDefault()) + if err != nil { + return err + } - for _, session := range toDelete { - if err := s.deleteSessionTxn(tx, idx, session.ID, &session.EnterpriseMeta); err != nil { - return fmt.Errorf("failed to delete session '%s': %v", session.ID, err) - } + for _, session := range toDelete { + if err := s.deleteSessionTxn(tx, idx, session.ID, &session.EnterpriseMeta); err != nil { + return fmt.Errorf("failed to delete session '%s': %v", session.ID, err) } } @@ -800,13 +711,7 @@ var errCASCompareFailed = errors.New("compare-and-set: comparison failed") // Returns an error if the write didn't happen and nil if write was successful. func ensureServiceCASTxn(tx WriteTxn, idx uint64, node string, svc *structs.NodeService) error { // Retrieve the existing service. - existing, err := tx.First(tableServices, indexID, - NodeServiceQuery{ - EnterpriseMeta: svc.EnterpriseMeta, - Node: node, - Service: svc.ID, - PeerName: svc.PeerName, - }) + existing, err := tx.First(tableServices, indexID, NodeServiceQuery{EnterpriseMeta: svc.EnterpriseMeta, Node: node, Service: svc.ID}) if err != nil { return fmt.Errorf("failed service lookup: %s", err) } @@ -835,7 +740,6 @@ func ensureServiceTxn(tx WriteTxn, idx uint64, node string, preserveIndexes bool EnterpriseMeta: svc.EnterpriseMeta, Node: node, Service: svc.ID, - PeerName: svc.PeerName, }) if err != nil { return fmt.Errorf("failed service lookup: %s", err) @@ -845,18 +749,9 @@ func ensureServiceTxn(tx WriteTxn, idx uint64, node string, preserveIndexes bool return fmt.Errorf("Invalid Service Meta for node %s and serviceID %s: %v", node, svc.ID, err) } - if svc.PeerName == "" { - // Do not associate non-typical services with gateways or consul services - if svc.Kind == structs.ServiceKindTypical && svc.Service != "consul" { - // Check if this service is covered by a gateway's wildcard specifier, we force the service kind to a gateway-service here as that take precedence - sn := structs.NewServiceName(svc.Service, &svc.EnterpriseMeta) - if err = checkGatewayWildcardsAndUpdate(tx, idx, &sn, structs.GatewayServiceKindService); err != nil { - return fmt.Errorf("failed updating gateway mapping: %s", err) - } - if err = checkGatewayAndUpdate(tx, idx, &sn, structs.GatewayServiceKindService); err != nil { - return fmt.Errorf("failed updating gateway mapping: %s", err) - } - } + // Check if this service is covered by a gateway's wildcard specifier + if err = checkGatewayWildcardsAndUpdate(tx, idx, svc); err != nil { + return fmt.Errorf("failed updating gateway mapping: %s", err) } if err := upsertKindServiceName(tx, idx, svc.Kind, svc.CompoundServiceName()); err != nil { return fmt.Errorf("failed to persist service name: %v", err) @@ -892,30 +787,28 @@ func ensureServiceTxn(tx WriteTxn, idx uint64, node string, preserveIndexes bool } } - if svc.PeerName == "" { - // If there's a terminating gateway config entry for this service, populate the tagged addresses - // with virtual IP mappings. - termGatewayVIPsSupported, err := terminatingGatewayVirtualIPsSupported(tx, nil) + // If there's a terminating gateway config entry for this service, populate the tagged addresses + // with virtual IP mappings. + termGatewayVIPsSupported, err := terminatingGatewayVirtualIPsSupported(tx, nil) + if err != nil { + return err + } + if termGatewayVIPsSupported && svc.Kind == structs.ServiceKindTerminatingGateway { + _, conf, err := configEntryTxn(tx, nil, structs.TerminatingGateway, svc.Service, &svc.EnterpriseMeta) if err != nil { - return err + return fmt.Errorf("failed to retrieve terminating gateway config: %s", err) } - if termGatewayVIPsSupported && svc.Kind == structs.ServiceKindTerminatingGateway { - _, conf, err := configEntryTxn(tx, nil, structs.TerminatingGateway, svc.Service, &svc.EnterpriseMeta) + if conf != nil { + termGatewayConf := conf.(*structs.TerminatingGatewayConfigEntry) + addrs, err := getTermGatewayVirtualIPs(tx, termGatewayConf.Services, &svc.EnterpriseMeta) if err != nil { - return fmt.Errorf("failed to retrieve terminating gateway config: %s", err) + return err } - if conf != nil { - termGatewayConf := conf.(*structs.TerminatingGatewayConfigEntry) - addrs, err := getTermGatewayVirtualIPs(tx, termGatewayConf.Services, &svc.EnterpriseMeta) - if err != nil { - return err - } - if svc.TaggedAddresses == nil { - svc.TaggedAddresses = make(map[string]structs.ServiceAddress) - } - for key, addr := range addrs { - svc.TaggedAddresses[key] = addr - } + if svc.TaggedAddresses == nil { + svc.TaggedAddresses = make(map[string]structs.ServiceAddress) + } + for key, addr := range addrs { + svc.TaggedAddresses[key] = addr } } } @@ -928,7 +821,6 @@ func ensureServiceTxn(tx WriteTxn, idx uint64, node string, preserveIndexes bool n, err := tx.First(tableNodes, indexID, Query{ Value: node, EnterpriseMeta: svc.EnterpriseMeta, - PeerName: svc.PeerName, }) if err != nil { return fmt.Errorf("failed node lookup: %s", err) @@ -962,7 +854,6 @@ func ensureServiceTxn(tx WriteTxn, idx uint64, node string, preserveIndexes bool // assignServiceVirtualIP assigns a virtual IP to the target service and updates // the global virtual IP counter if necessary. func assignServiceVirtualIP(tx WriteTxn, sn structs.ServiceName) (string, error) { - // TODO(peering): support VIPs serviceVIP, err := tx.First(tableServiceVirtualIPs, indexID, sn) if err != nil { return "", fmt.Errorf("failed service virtual IP lookup: %s", err) @@ -1087,15 +978,15 @@ func terminatingGatewayVirtualIPsSupported(tx ReadTxn, ws memdb.WatchSet) (bool, } // Services returns all services along with a list of associated tags. -func (s *Store) Services(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.Services, error) { +func (s *Store) Services(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta) (uint64, structs.Services, error) { tx := s.db.Txn(false) defer tx.Abort() // Get the table index. - idx := catalogServicesMaxIndex(tx, entMeta, peerName) + idx := catalogServicesMaxIndex(tx, entMeta) // List all the services. - services, err := catalogServiceListNoWildcard(tx, entMeta, peerName) + services, err := catalogServiceListNoWildcard(tx, entMeta) if err != nil { return 0, nil, fmt.Errorf("failed querying services: %s", err) } @@ -1127,24 +1018,17 @@ func (s *Store) Services(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, peerNam return idx, results, nil } -func (s *Store) ServiceList(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.ServiceList, error) { +func (s *Store) ServiceList(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta) (uint64, structs.ServiceList, error) { tx := s.db.Txn(false) defer tx.Abort() - return serviceListTxn(tx, ws, entMeta, peerName) + return serviceListTxn(tx, ws, entMeta) } -func serviceListTxn(tx ReadTxn, ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.ServiceList, error) { - if entMeta == nil { - entMeta = structs.NodeEnterpriseMetaInDefaultPartition() - } +func serviceListTxn(tx ReadTxn, ws memdb.WatchSet, entMeta *acl.EnterpriseMeta) (uint64, structs.ServiceList, error) { + idx := catalogServicesMaxIndex(tx, entMeta) - idx := catalogServicesMaxIndex(tx, entMeta, peerName) - - services, err := tx.Get(tableServices, indexID+"_prefix", Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - }) + services, err := tx.Get(tableServices, indexID+"_prefix", entMeta) if err != nil { return 0, nil, fmt.Errorf("failed querying services: %s", err) } @@ -1164,26 +1048,8 @@ func serviceListTxn(tx ReadTxn, ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, return idx, results, nil } -func serviceExists(tx ReadTxn, ws memdb.WatchSet, name string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, bool, error) { - idx := catalogServicesMaxIndex(tx, entMeta, peerName) - q := Query{ - Value: name, - EnterpriseMeta: *entMeta, - PeerName: peerName, - } - watchCh, existing, err := tx.FirstWatch(tableServices, indexService, q) - if err != nil { - return idx, false, fmt.Errorf("failed querying for service: %s", err) - } - ws.Add(watchCh) - if existing == nil { - return idx, false, nil - } - return idx, true, nil -} - // ServicesByNodeMeta returns all services, filtered by the given node metadata. -func (s *Store) ServicesByNodeMeta(ws memdb.WatchSet, filters map[string]string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.Services, error) { +func (s *Store) ServicesByNodeMeta(ws memdb.WatchSet, filters map[string]string, entMeta *acl.EnterpriseMeta) (uint64, structs.Services, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -1193,9 +1059,8 @@ func (s *Store) ServicesByNodeMeta(ws memdb.WatchSet, filters map[string]string, } // Get the table index. - idx := catalogServicesMaxIndex(tx, entMeta, peerName) - - if nodeIdx := catalogNodesMaxIndex(tx, entMeta, peerName); nodeIdx > idx { + idx := catalogServicesMaxIndex(tx, entMeta) + if nodeIdx := catalogNodesMaxIndex(tx, entMeta); nodeIdx > idx { idx = nodeIdx } @@ -1215,7 +1080,6 @@ func (s *Store) ServicesByNodeMeta(ws memdb.WatchSet, filters map[string]string, Key: firstKey, Value: firstValue, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return 0, nil, fmt.Errorf("failed nodes lookup: %s", err) @@ -1224,7 +1088,7 @@ func (s *Store) ServicesByNodeMeta(ws memdb.WatchSet, filters map[string]string, // We don't want to track an unlimited number of services, so we pull a // top-level watch to use as a fallback. - allServices, err := catalogServiceListNoWildcard(tx, entMeta, peerName) + allServices, err := catalogServiceListNoWildcard(tx, entMeta) if err != nil { return 0, nil, fmt.Errorf("failed services lookup: %s", err) } @@ -1239,7 +1103,7 @@ func (s *Store) ServicesByNodeMeta(ws memdb.WatchSet, filters map[string]string, } // List all the services on the node - services, err := catalogServiceListByNode(tx, n.Node, entMeta, n.PeerName, false) + services, err := catalogServiceListByNode(tx, n.Node, entMeta, false) if err != nil { return 0, nil, fmt.Errorf("failed querying services: %s", err) } @@ -1280,8 +1144,8 @@ func (s *Store) ServicesByNodeMeta(ws memdb.WatchSet, filters map[string]string, // * return when the last instance of a service is removed // * block until an instance for this service is available, or another // service is unregistered. -func maxIndexForService(tx ReadTxn, serviceName string, serviceExists, checks bool, entMeta *acl.EnterpriseMeta, peerName string) uint64 { - idx, _ := maxIndexAndWatchChForService(tx, serviceName, serviceExists, checks, entMeta, peerName) +func maxIndexForService(tx ReadTxn, serviceName string, serviceExists, checks bool, entMeta *acl.EnterpriseMeta) uint64 { + idx, _ := maxIndexAndWatchChForService(tx, serviceName, serviceExists, checks, entMeta) return idx } @@ -1299,20 +1163,20 @@ func maxIndexForService(tx ReadTxn, serviceName string, serviceExists, checks bo // returned for the chan. This allows for blocking watchers to _only_ watch this // one chan in the common case, falling back to watching all touched MemDB // indexes in more complicated cases. -func maxIndexAndWatchChForService(tx ReadTxn, serviceName string, serviceExists, checks bool, entMeta *acl.EnterpriseMeta, peerName string) (uint64, <-chan struct{}) { +func maxIndexAndWatchChForService(tx ReadTxn, serviceName string, serviceExists, checks bool, entMeta *acl.EnterpriseMeta) (uint64, <-chan struct{}) { if !serviceExists { - res, err := catalogServiceLastExtinctionIndex(tx, entMeta, peerName) + res, err := catalogServiceLastExtinctionIndex(tx, entMeta) if missingIdx, ok := res.(*IndexEntry); ok && err == nil { // Note safe to only watch the extinction index as it's not updated when new instances come along so return nil watchCh return missingIdx.Value, nil } } - ch, res, err := catalogServiceMaxIndex(tx, serviceName, entMeta, peerName) + ch, res, err := catalogServiceMaxIndex(tx, serviceName, entMeta) if idx, ok := res.(*IndexEntry); ok && err == nil { return idx.Value, ch } - return catalogMaxIndex(tx, entMeta, peerName, checks), nil + return catalogMaxIndex(tx, entMeta, checks), nil } // Wrapper for maxIndexAndWatchChForService that operates on a list of ServiceNodes @@ -1326,7 +1190,7 @@ func maxIndexAndWatchChsForServiceNodes(tx ReadTxn, for i := 0; i < len(nodes); i++ { sn := structs.NewServiceName(nodes[i].ServiceName, &nodes[i].EnterpriseMeta) if ok := seen[sn]; !ok { - idx, svcCh := maxIndexAndWatchChForService(tx, sn.Name, true, watchChecks, &sn.EnterpriseMeta, nodes[i].PeerName) + idx, svcCh := maxIndexAndWatchChForService(tx, sn.Name, true, watchChecks, &sn.EnterpriseMeta) if idx > maxIdx { maxIdx = idx } @@ -1343,7 +1207,7 @@ func maxIndexAndWatchChsForServiceNodes(tx ReadTxn, // ConnectServiceNodes returns the nodes associated with a Connect // compatible destination for the given service name. This will include // both proxies and native integrations. -func (s *Store) ConnectServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.ServiceNodes, error) { +func (s *Store) ConnectServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta) (uint64, structs.ServiceNodes, error) { tx := s.db.ReadTxn() defer tx.Abort() @@ -1351,16 +1215,12 @@ func (s *Store) ConnectServiceNodes(ws memdb.WatchSet, serviceName string, entMe if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } - q := Query{ - Value: serviceName, - PeerName: peerName, - EnterpriseMeta: *entMeta, - } + q := Query{Value: serviceName, EnterpriseMeta: *entMeta} return serviceNodesTxn(tx, ws, indexConnect, q) } // ServiceNodes returns the nodes associated with a given service name. -func (s *Store) ServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.ServiceNodes, error) { +func (s *Store) ServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta) (uint64, structs.ServiceNodes, error) { tx := s.db.ReadTxn() defer tx.Abort() @@ -1368,11 +1228,7 @@ func (s *Store) ServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *acl if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } - q := Query{ - Value: serviceName, - PeerName: peerName, - EnterpriseMeta: *entMeta, - } + q := Query{Value: serviceName, EnterpriseMeta: *entMeta} return serviceNodesTxn(tx, ws, indexService, q) } @@ -1395,9 +1251,9 @@ func serviceNodesTxn(tx ReadTxn, ws memdb.WatchSet, index string, q Query) (uint // We append rather than replace since it allows users to migrate a service // to the mesh with a mix of sidecars and gateways until all its instances have a sidecar. var idx uint64 - if connect && q.PeerName == "" { + if connect { // Look up gateway nodes associated with the service - gwIdx, nodes, err := serviceGatewayNodes(tx, ws, serviceName, structs.ServiceKindTerminatingGateway, &q.EnterpriseMeta, structs.DefaultPeerKeyword) + gwIdx, nodes, err := serviceGatewayNodes(tx, ws, serviceName, structs.ServiceKindTerminatingGateway, &q.EnterpriseMeta) if err != nil { return 0, nil, fmt.Errorf("failed gateway nodes lookup: %v", err) } @@ -1420,7 +1276,7 @@ func serviceNodesTxn(tx ReadTxn, ws memdb.WatchSet, index string, q Query) (uint } // Fill in the node details. - results, err = parseServiceNodes(tx, ws, results, &q.EnterpriseMeta, q.PeerName) + results, err = parseServiceNodes(tx, ws, results, &q.EnterpriseMeta) if err != nil { return 0, nil, fmt.Errorf("failed parsing service nodes: %s", err) } @@ -1428,7 +1284,7 @@ func serviceNodesTxn(tx ReadTxn, ws memdb.WatchSet, index string, q Query) (uint // Get the table index. // TODO (gateways) (freddy) Why do we always consider the main service index here? // This doesn't seem to make sense for Connect when there's more than 1 result - svcIdx := maxIndexForService(tx, serviceName, len(results) > 0, false, &q.EnterpriseMeta, q.PeerName) + svcIdx := maxIndexForService(tx, serviceName, len(results) > 0, false, &q.EnterpriseMeta) if idx < svcIdx { idx = svcIdx } @@ -1438,7 +1294,7 @@ func serviceNodesTxn(tx ReadTxn, ws memdb.WatchSet, index string, q Query) (uint // ServiceTagNodes returns the nodes associated with a given service, filtering // out services that don't contain the given tags. -func (s *Store) ServiceTagNodes(ws memdb.WatchSet, service string, tags []string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.ServiceNodes, error) { +func (s *Store) ServiceTagNodes(ws memdb.WatchSet, service string, tags []string, entMeta *acl.EnterpriseMeta) (uint64, structs.ServiceNodes, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -1447,11 +1303,8 @@ func (s *Store) ServiceTagNodes(ws memdb.WatchSet, service string, tags []string entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } - services, err := tx.Get(tableServices, indexService, Query{ - Value: service, - EnterpriseMeta: *entMeta, - PeerName: peerName, - }) + q := Query{Value: service, EnterpriseMeta: *entMeta} + services, err := tx.Get(tableServices, indexService, q) if err != nil { return 0, nil, fmt.Errorf("failed service lookup: %s", err) } @@ -1469,12 +1322,12 @@ func (s *Store) ServiceTagNodes(ws memdb.WatchSet, service string, tags []string } // Fill in the node details. - results, err = parseServiceNodes(tx, ws, results, entMeta, peerName) + results, err = parseServiceNodes(tx, ws, results, entMeta) if err != nil { return 0, nil, fmt.Errorf("failed parsing service nodes: %s", err) } // Get the table index. - idx := maxIndexForService(tx, service, serviceExists, false, entMeta, peerName) + idx := maxIndexForService(tx, service, serviceExists, false, entMeta) return idx, results, nil } @@ -1511,16 +1364,12 @@ func serviceTagsFilter(sn *structs.ServiceNode, tags []string) bool { // ServiceAddressNodes returns the nodes associated with a given service, filtering // out services that don't match the given serviceAddress -func (s *Store) ServiceAddressNodes(ws memdb.WatchSet, address string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.ServiceNodes, error) { +func (s *Store) ServiceAddressNodes(ws memdb.WatchSet, address string, entMeta *acl.EnterpriseMeta) (uint64, structs.ServiceNodes, error) { tx := s.db.Txn(false) defer tx.Abort() // List all the services. - q := Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - } - services, err := tx.Get(tableServices, indexID+"_prefix", q) + services, err := tx.Get(tableServices, indexID+"_prefix", entMeta) if err != nil { return 0, nil, fmt.Errorf("failed service lookup: %s", err) } @@ -1543,7 +1392,7 @@ func (s *Store) ServiceAddressNodes(ws memdb.WatchSet, address string, entMeta * } // Fill in the node details. - results, err = parseServiceNodes(tx, ws, results, entMeta, peerName) + results, err = parseServiceNodes(tx, ws, results, entMeta) if err != nil { return 0, nil, fmt.Errorf("failed parsing service nodes: %s", err) } @@ -1552,14 +1401,10 @@ func (s *Store) ServiceAddressNodes(ws memdb.WatchSet, address string, entMeta * // parseServiceNodes iterates over a services query and fills in the node details, // returning a ServiceNodes slice. -func parseServiceNodes(tx ReadTxn, ws memdb.WatchSet, services structs.ServiceNodes, entMeta *acl.EnterpriseMeta, peerName string) (structs.ServiceNodes, error) { +func parseServiceNodes(tx ReadTxn, ws memdb.WatchSet, services structs.ServiceNodes, entMeta *acl.EnterpriseMeta) (structs.ServiceNodes, error) { // We don't want to track an unlimited number of nodes, so we pull a // top-level watch to use as a fallback. - q := Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - } - allNodes, err := tx.Get(tableNodes, indexID+"_prefix", q) + allNodes, err := tx.Get(tableNodes, indexID+"_prefix", entMeta) if err != nil { return nil, fmt.Errorf("failed nodes lookup: %s", err) } @@ -1577,7 +1422,6 @@ func parseServiceNodes(tx ReadTxn, ws memdb.WatchSet, services structs.ServiceNo watchCh, n, err := tx.FirstWatch(tableNodes, indexID, Query{ Value: sn.Node, EnterpriseMeta: sn.EnterpriseMeta, - PeerName: sn.PeerName, }) if err != nil { return nil, fmt.Errorf("failed node lookup: %s", err) @@ -1602,15 +1446,15 @@ func parseServiceNodes(tx ReadTxn, ws memdb.WatchSet, services structs.ServiceNo // NodeService is used to retrieve a specific service associated with the given // node. -func (s *Store) NodeService(ws memdb.WatchSet, nodeName string, serviceID string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, *structs.NodeService, error) { +func (s *Store) NodeService(nodeName string, serviceID string, entMeta *acl.EnterpriseMeta) (uint64, *structs.NodeService, error) { tx := s.db.Txn(false) defer tx.Abort() // Get the table index. - idx := catalogServicesMaxIndex(tx, entMeta, peerName) + idx := catalogServicesMaxIndex(tx, entMeta) // Query the service - service, err := getNodeServiceTxn(tx, ws, nodeName, serviceID, entMeta, peerName) + service, err := getNodeServiceTxn(tx, nodeName, serviceID, entMeta) if err != nil { return 0, nil, fmt.Errorf("failed querying service for node %q: %s", nodeName, err) } @@ -1618,81 +1462,30 @@ func (s *Store) NodeService(ws memdb.WatchSet, nodeName string, serviceID string return idx, service, nil } -func getNodeServiceTxn(tx ReadTxn, ws memdb.WatchSet, nodeName, serviceID string, entMeta *acl.EnterpriseMeta, peerName string) (*structs.NodeService, error) { - sn, err := getServiceNodeTxn(tx, ws, nodeName, serviceID, entMeta, peerName) - if err != nil { - return nil, err - } - if sn != nil { - return sn.ToNodeService(), nil - } - return nil, nil -} - -func getServiceNodeTxn(tx ReadTxn, ws memdb.WatchSet, nodeName, serviceID string, entMeta *acl.EnterpriseMeta, peerName string) (*structs.ServiceNode, error) { +func getNodeServiceTxn(tx ReadTxn, nodeName, serviceID string, entMeta *acl.EnterpriseMeta) (*structs.NodeService, error) { // TODO: pass non-pointer type for ent meta if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } // Query the service - watch, service, err := tx.FirstWatch(tableServices, indexID, NodeServiceQuery{ + service, err := tx.First(tableServices, indexID, NodeServiceQuery{ EnterpriseMeta: *entMeta, Node: nodeName, Service: serviceID, - PeerName: peerName, }) if err != nil { return nil, fmt.Errorf("failed querying service for node %q: %s", nodeName, err) } - ws.Add(watch) if service != nil { - return service.(*structs.ServiceNode), nil + return service.(*structs.ServiceNode).ToNodeService(), nil } return nil, nil } -// ServiceNode is used to retrieve a specific service by service ID and node ID or name. -func (s *Store) ServiceNode(nodeID, nodeName, serviceID string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, *structs.ServiceNode, error) { - var ( - node *structs.Node - err error - ) - if nodeID != "" { - _, node, err = s.GetNodeID(types.NodeID(nodeID), entMeta, peerName) - if err != nil { - return 0, nil, fmt.Errorf("Failure looking up node by ID %s: %w", nodeID, err) - } - } else if nodeName != "" { - _, node, err = s.GetNode(nodeName, entMeta, peerName) - if err != nil { - return 0, nil, fmt.Errorf("Failure looking up node by name %s: %w", nodeName, err) - } - } else { - return 0, nil, fmt.Errorf("Node ID or name required to lookup the service") - } - if node == nil { - return 0, nil, ErrNodeNotFound - } - - tx := s.db.Txn(false) - defer tx.Abort() - - // Get the table index. - idx := catalogServicesMaxIndex(tx, entMeta, peerName) - - // Query the service - service, err := getServiceNodeTxn(tx, nil, node.Node, serviceID, entMeta, peerName) - if err != nil { - return 0, nil, fmt.Errorf("failed querying service for node %q: %w", node.Node, err) - } - - return idx, service, nil -} - -func (s *Store) nodeServices(ws memdb.WatchSet, nodeNameOrID string, entMeta *acl.EnterpriseMeta, peerName string, allowWildcard bool) (bool, uint64, *structs.Node, memdb.ResultIterator, error) { +func (s *Store) nodeServices(ws memdb.WatchSet, nodeNameOrID string, entMeta *acl.EnterpriseMeta, allowWildcard bool) (bool, uint64, *structs.Node, memdb.ResultIterator, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -1702,14 +1495,10 @@ func (s *Store) nodeServices(ws memdb.WatchSet, nodeNameOrID string, entMeta *ac } // Get the table index. - idx := catalogMaxIndex(tx, entMeta, peerName, false) + idx := catalogMaxIndex(tx, entMeta, false) // Query the node by node name - watchCh, n, err := tx.FirstWatch(tableNodes, indexID, Query{ - Value: nodeNameOrID, - EnterpriseMeta: *entMeta, - PeerName: peerName, - }) + watchCh, n, err := tx.FirstWatch(tableNodes, indexID, Query{Value: nodeNameOrID, EnterpriseMeta: *entMeta}) if err != nil { return true, 0, nil, nil, fmt.Errorf("node lookup failed: %s", err) } @@ -1726,7 +1515,6 @@ func (s *Store) nodeServices(ws memdb.WatchSet, nodeNameOrID string, entMeta *ac iter, err := tx.Get(tableNodes, indexUUID+"_prefix", Query{ Value: resizeNodeLookupKey(nodeNameOrID), EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { ws.Add(watchCh) @@ -1757,7 +1545,7 @@ func (s *Store) nodeServices(ws memdb.WatchSet, nodeNameOrID string, entMeta *ac nodeName := node.Node // Read all of the services - services, err := catalogServiceListByNode(tx, nodeName, entMeta, peerName, allowWildcard) + services, err := catalogServiceListByNode(tx, nodeName, entMeta, allowWildcard) if err != nil { return true, 0, nil, nil, fmt.Errorf("failed querying services for node %q: %s", nodeName, err) } @@ -1767,8 +1555,8 @@ func (s *Store) nodeServices(ws memdb.WatchSet, nodeNameOrID string, entMeta *ac } // NodeServices is used to query service registrations by node name or UUID. -func (s *Store) NodeServices(ws memdb.WatchSet, nodeNameOrID string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, *structs.NodeServices, error) { - done, idx, node, services, err := s.nodeServices(ws, nodeNameOrID, entMeta, peerName, false) +func (s *Store) NodeServices(ws memdb.WatchSet, nodeNameOrID string, entMeta *acl.EnterpriseMeta) (uint64, *structs.NodeServices, error) { + done, idx, node, services, err := s.nodeServices(ws, nodeNameOrID, entMeta, false) if done || err != nil { return idx, nil, err } @@ -1791,8 +1579,8 @@ func (s *Store) NodeServices(ws memdb.WatchSet, nodeNameOrID string, entMeta *ac } // NodeServices is used to query service registrations by node name or UUID. -func (s *Store) NodeServiceList(ws memdb.WatchSet, nodeNameOrID string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, *structs.NodeServiceList, error) { - done, idx, node, services, err := s.nodeServices(ws, nodeNameOrID, entMeta, peerName, true) +func (s *Store) NodeServiceList(ws memdb.WatchSet, nodeNameOrID string, entMeta *acl.EnterpriseMeta) (uint64, *structs.NodeServiceList, error) { + done, idx, node, services, err := s.nodeServices(ws, nodeNameOrID, entMeta, true) if done || err != nil { return idx, nil, err } @@ -1818,12 +1606,12 @@ func (s *Store) NodeServiceList(ws memdb.WatchSet, nodeNameOrID string, entMeta } // DeleteService is used to delete a given service associated with a node. -func (s *Store) DeleteService(idx uint64, nodeName, serviceID string, entMeta *acl.EnterpriseMeta, peerName string) error { +func (s *Store) DeleteService(idx uint64, nodeName, serviceID string, entMeta *acl.EnterpriseMeta) error { tx := s.db.WriteTxn(idx) defer tx.Abort() // Call the service deletion - if err := s.deleteServiceTxn(tx, idx, nodeName, serviceID, entMeta, peerName); err != nil { + if err := s.deleteServiceTxn(tx, idx, nodeName, serviceID, entMeta); err != nil { return err } @@ -1833,9 +1621,9 @@ func (s *Store) DeleteService(idx uint64, nodeName, serviceID string, entMeta *a // deleteServiceCASTxn is used to try doing a service delete operation with a given // raft index. If the CAS index specified is not equal to the last observed index for // the given service, then the call is a noop, otherwise a normal delete is invoked. -func (s *Store) deleteServiceCASTxn(tx WriteTxn, idx, cidx uint64, nodeName, serviceID string, entMeta *acl.EnterpriseMeta, peerName string) (bool, error) { +func (s *Store) deleteServiceCASTxn(tx WriteTxn, idx, cidx uint64, nodeName, serviceID string, entMeta *acl.EnterpriseMeta) (bool, error) { // Look up the service. - service, err := getNodeServiceTxn(tx, nil, nodeName, serviceID, entMeta, peerName) + service, err := getNodeServiceTxn(tx, nodeName, serviceID, entMeta) if err != nil { return false, fmt.Errorf("service lookup failed: %s", err) } @@ -1851,7 +1639,7 @@ func (s *Store) deleteServiceCASTxn(tx WriteTxn, idx, cidx uint64, nodeName, ser } // Call the actual deletion if the above passed. - if err := s.deleteServiceTxn(tx, idx, nodeName, serviceID, entMeta, peerName); err != nil { + if err := s.deleteServiceTxn(tx, idx, nodeName, serviceID, entMeta); err != nil { return false, err } @@ -1860,19 +1648,13 @@ func (s *Store) deleteServiceCASTxn(tx WriteTxn, idx, cidx uint64, nodeName, ser // deleteServiceTxn is the inner method called to remove a service // registration within an existing transaction. -func (s *Store) deleteServiceTxn(tx WriteTxn, idx uint64, nodeName, serviceID string, entMeta *acl.EnterpriseMeta, peerName string) error { +func (s *Store) deleteServiceTxn(tx WriteTxn, idx uint64, nodeName, serviceID string, entMeta *acl.EnterpriseMeta) error { // TODO: pass non-pointer type for ent meta if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } - service, err := tx.First(tableServices, indexID, - NodeServiceQuery{ - EnterpriseMeta: *entMeta, - Node: nodeName, - Service: serviceID, - PeerName: peerName, - }) + service, err := tx.First(tableServices, indexID, NodeServiceQuery{EnterpriseMeta: *entMeta, Node: nodeName, Service: serviceID}) if err != nil { return fmt.Errorf("failed service lookup: %s", err) } @@ -1890,7 +1672,6 @@ func (s *Store) deleteServiceTxn(tx WriteTxn, idx uint64, nodeName, serviceID st Node: nodeName, Service: serviceID, EnterpriseMeta: *entMeta, - PeerName: peerName, } checks, err := tx.Get(tableChecks, indexNodeService, nsq) if err != nil { @@ -1903,13 +1684,13 @@ func (s *Store) deleteServiceTxn(tx WriteTxn, idx uint64, nodeName, serviceID st // Do the delete in a separate loop so we don't trash the iterator. for _, check := range deleteChecks { - if err := s.deleteCheckTxn(tx, idx, nodeName, check.CheckID, &check.EnterpriseMeta, check.PeerName); err != nil { + if err := s.deleteCheckTxn(tx, idx, nodeName, check.CheckID, &check.EnterpriseMeta); err != nil { return err } } // Update the index. - if err := catalogUpdateCheckIndexes(tx, idx, entMeta, peerName); err != nil { + if err := catalogUpdateCheckIndexes(tx, idx, entMeta); err != nil { return err } @@ -1917,35 +1698,30 @@ func (s *Store) deleteServiceTxn(tx WriteTxn, idx uint64, nodeName, serviceID st if err := tx.Delete(tableServices, service); err != nil { return fmt.Errorf("failed deleting service: %s", err) } - - svc := service.(*structs.ServiceNode) - if err := catalogUpdateServicesIndexes(tx, idx, entMeta, svc.PeerName); err != nil { - return err - } - if err := catalogUpdateServiceKindIndexes(tx, idx, svc.ServiceKind, &svc.EnterpriseMeta, svc.PeerName); err != nil { - return err + if err := catalogUpdateServicesIndexes(tx, idx, entMeta); err != nil { + return fmt.Errorf("failed updating index: %s", err) } + svc := service.(*structs.ServiceNode) name := svc.CompoundServiceName() + if err := catalogUpdateServiceKindIndexes(tx, svc.ServiceKind, idx, &svc.EnterpriseMeta); err != nil { + return err + } if err := cleanupMeshTopology(tx, idx, svc); err != nil { return fmt.Errorf("failed to clean up mesh-topology associations for %q: %v", name.String(), err) } - q := Query{ - Value: svc.ServiceName, - EnterpriseMeta: *entMeta, - PeerName: svc.PeerName, - } + q := Query{Value: svc.ServiceName, EnterpriseMeta: *entMeta} if remainingService, err := tx.First(tableServices, indexService, q); err == nil { if remainingService != nil { // We have at least one remaining service, update the index - if err := catalogUpdateServiceIndexes(tx, idx, svc.ServiceName, entMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceIndexes(tx, svc.ServiceName, idx, entMeta); err != nil { return err } } else { // There are no more service instances, cleanup the service. index - _, serviceIndex, err := catalogServiceMaxIndex(tx, svc.ServiceName, entMeta, svc.PeerName) + _, serviceIndex, err := catalogServiceMaxIndex(tx, svc.ServiceName, entMeta) if err == nil && serviceIndex != nil { // we found service. index, garbage collect it if errW := tx.Delete(tableIndex, serviceIndex); errW != nil { @@ -1953,13 +1729,11 @@ func (s *Store) deleteServiceTxn(tx WriteTxn, idx uint64, nodeName, serviceID st } } - if err := catalogUpdateServiceExtinctionIndex(tx, idx, entMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceExtinctionIndex(tx, idx, entMeta); err != nil { return err } - if svc.PeerName == "" { - if err := cleanupGatewayWildcards(tx, idx, svc); err != nil { - return fmt.Errorf("failed to clean up gateway-service associations for %q: %v", name.String(), err) - } + if err := cleanupGatewayWildcards(tx, idx, svc); err != nil { + return fmt.Errorf("failed to clean up gateway-service associations for %q: %v", name.String(), err) } if err := freeServiceVirtualIP(tx, svc.ServiceName, nil, entMeta); err != nil { return fmt.Errorf("failed to clean up virtual IP for %q: %v", name.String(), err) @@ -2044,24 +1818,20 @@ func (s *Store) EnsureCheck(idx uint64, hc *structs.HealthCheck) error { } // updateAllServiceIndexesOfNode updates the Raft index of all the services associated with this node -func updateAllServiceIndexesOfNode(tx WriteTxn, idx uint64, nodeID string, entMeta *acl.EnterpriseMeta, peerName string) error { - if peerName == "" { - peerName = structs.LocalPeerKeyword - } +func updateAllServiceIndexesOfNode(tx WriteTxn, idx uint64, nodeID string, entMeta *acl.EnterpriseMeta) error { services, err := tx.Get(tableServices, indexNode, Query{ Value: nodeID, EnterpriseMeta: *entMeta.WithWildcardNamespace(), - PeerName: peerName, }) if err != nil { return fmt.Errorf("failed updating services for node %s: %s", nodeID, err) } for service := services.Next(); service != nil; service = services.Next() { svc := service.(*structs.ServiceNode) - if err := catalogUpdateServiceIndexes(tx, idx, svc.ServiceName, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceIndexes(tx, svc.ServiceName, idx, &svc.EnterpriseMeta); err != nil { return err } - if err := catalogUpdateServiceKindIndexes(tx, idx, svc.ServiceKind, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceKindIndexes(tx, svc.ServiceKind, idx, &svc.EnterpriseMeta); err != nil { return err } } @@ -2072,7 +1842,7 @@ func updateAllServiceIndexesOfNode(tx WriteTxn, idx uint64, nodeID string, entMe // Returns a bool indicating if a write happened and any error. func (s *Store) ensureCheckCASTxn(tx WriteTxn, idx uint64, hc *structs.HealthCheck) (bool, error) { // Retrieve the existing entry. - _, existing, err := getNodeCheckTxn(tx, hc.Node, hc.CheckID, &hc.EnterpriseMeta, hc.PeerName) + _, existing, err := getNodeCheckTxn(tx, hc.Node, hc.CheckID, &hc.EnterpriseMeta) if err != nil { return false, fmt.Errorf("failed health check lookup: %s", err) } @@ -2106,7 +1876,6 @@ func (s *Store) ensureCheckTxn(tx WriteTxn, idx uint64, preserveIndexes bool, hc EnterpriseMeta: hc.EnterpriseMeta, Node: hc.Node, CheckID: string(hc.CheckID), - PeerName: hc.PeerName, }) if err != nil { return fmt.Errorf("failed health check lookup: %s", err) @@ -2130,7 +1899,6 @@ func (s *Store) ensureCheckTxn(tx WriteTxn, idx uint64, preserveIndexes bool, hc node, err := tx.First(tableNodes, indexID, Query{ Value: hc.Node, EnterpriseMeta: hc.EnterpriseMeta, - PeerName: hc.PeerName, }) if err != nil { return fmt.Errorf("failed node lookup: %s", err) @@ -2147,7 +1915,6 @@ func (s *Store) ensureCheckTxn(tx WriteTxn, idx uint64, preserveIndexes bool, hc EnterpriseMeta: hc.EnterpriseMeta, Node: hc.Node, Service: hc.ServiceID, - PeerName: hc.PeerName, }) if err != nil { return fmt.Errorf("failed service lookup: %s", err) @@ -2163,10 +1930,10 @@ func (s *Store) ensureCheckTxn(tx WriteTxn, idx uint64, preserveIndexes bool, hc if existing != nil && existing.(*structs.HealthCheck).IsSame(hc) { modified = false } else { - if err = catalogUpdateServiceIndexes(tx, idx, svc.ServiceName, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err = catalogUpdateServiceIndexes(tx, svc.ServiceName, idx, &svc.EnterpriseMeta); err != nil { return err } - if err := catalogUpdateServiceKindIndexes(tx, idx, svc.ServiceKind, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceKindIndexes(tx, svc.ServiceKind, idx, &svc.EnterpriseMeta); err != nil { return err } } @@ -2176,7 +1943,7 @@ func (s *Store) ensureCheckTxn(tx WriteTxn, idx uint64, preserveIndexes bool, hc } else { // Since the check has been modified, it impacts all services of node // Update the status for all the services associated with this node - err = updateAllServiceIndexesOfNode(tx, idx, hc.Node, &hc.EnterpriseMeta, hc.PeerName) + err = updateAllServiceIndexesOfNode(tx, idx, hc.Node, &hc.EnterpriseMeta) if err != nil { return err } @@ -2184,7 +1951,7 @@ func (s *Store) ensureCheckTxn(tx WriteTxn, idx uint64, preserveIndexes bool, hc } // Delete any sessions for this check if the health is critical. - if hc.Status == api.HealthCritical && hc.PeerName == "" { + if hc.Status == api.HealthCritical { sessions, err := checkSessionsTxn(tx, hc) if err != nil { return err @@ -2210,18 +1977,18 @@ func (s *Store) ensureCheckTxn(tx WriteTxn, idx uint64, preserveIndexes bool, hc // NodeCheck is used to retrieve a specific check associated with the given // node. -func (s *Store) NodeCheck(nodeName string, checkID types.CheckID, entMeta *acl.EnterpriseMeta, peerName string) (uint64, *structs.HealthCheck, error) { +func (s *Store) NodeCheck(nodeName string, checkID types.CheckID, entMeta *acl.EnterpriseMeta) (uint64, *structs.HealthCheck, error) { tx := s.db.Txn(false) defer tx.Abort() - return getNodeCheckTxn(tx, nodeName, checkID, entMeta, peerName) + return getNodeCheckTxn(tx, nodeName, checkID, entMeta) } // nodeCheckTxn is used as the inner method to handle reading a health check // from the state store. -func getNodeCheckTxn(tx ReadTxn, nodeName string, checkID types.CheckID, entMeta *acl.EnterpriseMeta, peerName string) (uint64, *structs.HealthCheck, error) { +func getNodeCheckTxn(tx ReadTxn, nodeName string, checkID types.CheckID, entMeta *acl.EnterpriseMeta) (uint64, *structs.HealthCheck, error) { // Get the table index. - idx := catalogChecksMaxIndex(tx, entMeta, peerName) + idx := catalogChecksMaxIndex(tx, entMeta) // TODO: accept non-pointer value if entMeta == nil { @@ -2229,13 +1996,7 @@ func getNodeCheckTxn(tx ReadTxn, nodeName string, checkID types.CheckID, entMeta } // Return the check. - check, err := tx.First(tableChecks, indexID, - NodeCheckQuery{ - EnterpriseMeta: *entMeta, - Node: nodeName, - CheckID: string(checkID), - PeerName: peerName, - }) + check, err := tx.First(tableChecks, indexID, NodeCheckQuery{EnterpriseMeta: *entMeta, Node: nodeName, CheckID: string(checkID)}) if err != nil { return 0, nil, fmt.Errorf("failed check lookup: %s", err) } @@ -2248,7 +2009,7 @@ func getNodeCheckTxn(tx ReadTxn, nodeName string, checkID types.CheckID, entMeta // NodeChecks is used to retrieve checks associated with the // given node from the state store. -func (s *Store) NodeChecks(ws memdb.WatchSet, nodeName string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.HealthChecks, error) { +func (s *Store) NodeChecks(ws memdb.WatchSet, nodeName string, entMeta *acl.EnterpriseMeta) (uint64, structs.HealthChecks, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -2257,14 +2018,10 @@ func (s *Store) NodeChecks(ws memdb.WatchSet, nodeName string, entMeta *acl.Ente } // Get the table index. - idx := catalogChecksMaxIndex(tx, entMeta, peerName) + idx := catalogChecksMaxIndex(tx, entMeta) // Return the checks. - iter, err := catalogListChecksByNode(tx, Query{ - Value: nodeName, - EnterpriseMeta: *entMeta, - PeerName: peerName, - }) + iter, err := catalogListChecksByNode(tx, Query{Value: nodeName, EnterpriseMeta: *entMeta}) if err != nil { return 0, nil, fmt.Errorf("failed check lookup: %s", err) } @@ -2280,21 +2037,17 @@ func (s *Store) NodeChecks(ws memdb.WatchSet, nodeName string, entMeta *acl.Ente // ServiceChecks is used to get all checks associated with a // given service ID. The query is performed against a service // _name_ instead of a service ID. -func (s *Store) ServiceChecks(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.HealthChecks, error) { +func (s *Store) ServiceChecks(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta) (uint64, structs.HealthChecks, error) { tx := s.db.Txn(false) defer tx.Abort() // Get the table index. - idx := catalogChecksMaxIndex(tx, entMeta, peerName) + idx := catalogChecksMaxIndex(tx, entMeta) if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } - q := Query{ - Value: serviceName, - EnterpriseMeta: *entMeta, - PeerName: peerName, - } + q := Query{Value: serviceName, EnterpriseMeta: *entMeta} iter, err := tx.Get(tableChecks, indexService, q) if err != nil { return 0, nil, fmt.Errorf("failed check lookup: %s", err) @@ -2311,37 +2064,35 @@ func (s *Store) ServiceChecks(ws memdb.WatchSet, serviceName string, entMeta *ac // ServiceChecksByNodeMeta is used to get all checks associated with a // given service ID, filtered by the given node metadata values. The query // is performed against a service _name_ instead of a service ID. -func (s *Store) ServiceChecksByNodeMeta(ws memdb.WatchSet, serviceName string, filters map[string]string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.HealthChecks, error) { +func (s *Store) ServiceChecksByNodeMeta(ws memdb.WatchSet, serviceName string, + filters map[string]string, entMeta *acl.EnterpriseMeta) (uint64, structs.HealthChecks, error) { + tx := s.db.Txn(false) defer tx.Abort() // Get the table index. - idx := maxIndexForService(tx, serviceName, true, true, entMeta, peerName) + idx := maxIndexForService(tx, serviceName, true, true, entMeta) if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } - q := Query{ - Value: serviceName, - EnterpriseMeta: *entMeta, - PeerName: peerName, - } + q := Query{Value: serviceName, EnterpriseMeta: *entMeta} iter, err := tx.Get(tableChecks, indexService, q) if err != nil { return 0, nil, fmt.Errorf("failed check lookup: %s", err) } ws.Add(iter.WatchCh()) - return parseChecksByNodeMeta(tx, ws, idx, iter, filters, entMeta, peerName) + return parseChecksByNodeMeta(tx, ws, idx, iter, filters, entMeta) } // ChecksInState is used to query the state store for all checks // which are in the provided state. -func (s *Store) ChecksInState(ws memdb.WatchSet, state string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.HealthChecks, error) { +func (s *Store) ChecksInState(ws memdb.WatchSet, state string, entMeta *acl.EnterpriseMeta) (uint64, structs.HealthChecks, error) { tx := s.db.Txn(false) defer tx.Abort() - idx, iter, err := checksInStateTxn(tx, ws, state, entMeta, peerName) + idx, iter, err := checksInStateTxn(tx, ws, state, entMeta) if err != nil { return 0, nil, err } @@ -2355,21 +2106,21 @@ func (s *Store) ChecksInState(ws memdb.WatchSet, state string, entMeta *acl.Ente // ChecksInStateByNodeMeta is used to query the state store for all checks // which are in the provided state, filtered by the given node metadata values. -func (s *Store) ChecksInStateByNodeMeta(ws memdb.WatchSet, state string, filters map[string]string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.HealthChecks, error) { +func (s *Store) ChecksInStateByNodeMeta(ws memdb.WatchSet, state string, filters map[string]string, entMeta *acl.EnterpriseMeta) (uint64, structs.HealthChecks, error) { tx := s.db.Txn(false) defer tx.Abort() - idx, iter, err := checksInStateTxn(tx, ws, state, entMeta, peerName) + idx, iter, err := checksInStateTxn(tx, ws, state, entMeta) if err != nil { return 0, nil, err } - return parseChecksByNodeMeta(tx, ws, idx, iter, filters, entMeta, peerName) + return parseChecksByNodeMeta(tx, ws, idx, iter, filters, entMeta) } -func checksInStateTxn(tx ReadTxn, ws memdb.WatchSet, state string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, memdb.ResultIterator, error) { +func checksInStateTxn(tx ReadTxn, ws memdb.WatchSet, state string, entMeta *acl.EnterpriseMeta) (uint64, memdb.ResultIterator, error) { // Get the table index. - idx := catalogChecksMaxIndex(tx, entMeta, peerName) + idx := catalogChecksMaxIndex(tx, entMeta) if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() @@ -2379,17 +2130,9 @@ func checksInStateTxn(tx ReadTxn, ws memdb.WatchSet, state string, entMeta *acl. var iter memdb.ResultIterator var err error if state == api.HealthAny { - q := Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - } - iter, err = tx.Get(tableChecks, indexID+"_prefix", q) + iter, err = tx.Get(tableChecks, indexID+"_prefix", entMeta) } else { - q := Query{ - Value: state, - EnterpriseMeta: *entMeta, - PeerName: peerName, - } + q := Query{Value: state, EnterpriseMeta: *entMeta} iter, err = tx.Get(tableChecks, indexStatus, q) } if err != nil { @@ -2402,26 +2145,13 @@ func checksInStateTxn(tx ReadTxn, ws memdb.WatchSet, state string, entMeta *acl. // parseChecksByNodeMeta is a helper function used to deduplicate some // repetitive code for returning health checks filtered by node metadata fields. -func parseChecksByNodeMeta( - tx ReadTxn, - ws memdb.WatchSet, - idx uint64, - iter memdb.ResultIterator, - filters map[string]string, - entMeta *acl.EnterpriseMeta, - peerName string, -) (uint64, structs.HealthChecks, error) { - if entMeta == nil { - entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() - } +func parseChecksByNodeMeta(tx ReadTxn, ws memdb.WatchSet, + idx uint64, iter memdb.ResultIterator, filters map[string]string, + entMeta *acl.EnterpriseMeta) (uint64, structs.HealthChecks, error) { // We don't want to track an unlimited number of nodes, so we pull a // top-level watch to use as a fallback. - q := Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - } - allNodes, err := tx.Get(tableNodes, indexID+"_prefix", q) + allNodes, err := tx.Get(tableNodes, indexID+"_prefix", entMeta) if err != nil { return 0, nil, fmt.Errorf("failed nodes lookup: %s", err) } @@ -2434,7 +2164,6 @@ func parseChecksByNodeMeta( watchCh, node, err := tx.FirstWatch(tableNodes, indexID, Query{ Value: healthCheck.Node, EnterpriseMeta: healthCheck.EnterpriseMeta, - PeerName: healthCheck.PeerName, }) if err != nil { return 0, nil, fmt.Errorf("failed node lookup: %s", err) @@ -2454,12 +2183,12 @@ func parseChecksByNodeMeta( } // DeleteCheck is used to delete a health check registration. -func (s *Store) DeleteCheck(idx uint64, node string, checkID types.CheckID, entMeta *acl.EnterpriseMeta, peerName string) error { +func (s *Store) DeleteCheck(idx uint64, node string, checkID types.CheckID, entMeta *acl.EnterpriseMeta) error { tx := s.db.WriteTxn(idx) defer tx.Abort() // Call the check deletion - if err := s.deleteCheckTxn(tx, idx, node, checkID, entMeta, peerName); err != nil { + if err := s.deleteCheckTxn(tx, idx, node, checkID, entMeta); err != nil { return err } @@ -2469,16 +2198,9 @@ func (s *Store) DeleteCheck(idx uint64, node string, checkID types.CheckID, entM // deleteCheckCASTxn is used to try doing a check delete operation with a given // raft index. If the CAS index specified is not equal to the last observed index for // the given check, then the call is a noop, otherwise a normal check delete is invoked. -func (s *Store) deleteCheckCASTxn( - tx WriteTxn, - idx, cidx uint64, - node string, - checkID types.CheckID, - entMeta *acl.EnterpriseMeta, - peerName string, -) (bool, error) { +func (s *Store) deleteCheckCASTxn(tx WriteTxn, idx, cidx uint64, node string, checkID types.CheckID, entMeta *acl.EnterpriseMeta) (bool, error) { // Try to retrieve the existing health check. - _, hc, err := getNodeCheckTxn(tx, node, checkID, entMeta, peerName) + _, hc, err := getNodeCheckTxn(tx, node, checkID, entMeta) if err != nil { return false, fmt.Errorf("check lookup failed: %s", err) } @@ -2494,7 +2216,7 @@ func (s *Store) deleteCheckCASTxn( } // Call the actual deletion if the above passed. - if err := s.deleteCheckTxn(tx, idx, node, checkID, entMeta, peerName); err != nil { + if err := s.deleteCheckTxn(tx, idx, node, checkID, entMeta); err != nil { return false, err } @@ -2503,16 +2225,11 @@ func (s *Store) deleteCheckCASTxn( // NodeServiceQuery is a type used to query the checks table. type NodeServiceQuery struct { - Node string - Service string - PeerName string + Node string + Service string acl.EnterpriseMeta } -func (q NodeServiceQuery) PeerOrEmpty() string { - return q.PeerName -} - // NamespaceOrDefault exists because structs.EnterpriseMeta uses a pointer // receiver for this method. Remove once that is fixed. func (q NodeServiceQuery) NamespaceOrDefault() string { @@ -2527,19 +2244,13 @@ func (q NodeServiceQuery) PartitionOrDefault() string { // deleteCheckTxn is the inner method used to call a health // check deletion within an existing transaction. -func (s *Store) deleteCheckTxn(tx WriteTxn, idx uint64, node string, checkID types.CheckID, entMeta *acl.EnterpriseMeta, peerName string) error { +func (s *Store) deleteCheckTxn(tx WriteTxn, idx uint64, node string, checkID types.CheckID, entMeta *acl.EnterpriseMeta) error { if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } // Try to retrieve the existing health check. - hc, err := tx.First(tableChecks, indexID, - NodeCheckQuery{ - EnterpriseMeta: *entMeta, - Node: node, - CheckID: string(checkID), - PeerName: peerName, - }) + hc, err := tx.First(tableChecks, indexID, NodeCheckQuery{EnterpriseMeta: *entMeta, Node: node, CheckID: string(checkID)}) if err != nil { return fmt.Errorf("check lookup failed: %s", err) } @@ -2550,29 +2261,24 @@ func (s *Store) deleteCheckTxn(tx WriteTxn, idx uint64, node string, checkID typ if existing != nil { // When no service is linked to this service, update all services of node if existing.ServiceID != "" { - if err := catalogUpdateServiceIndexes(tx, idx, existing.ServiceName, &existing.EnterpriseMeta, existing.PeerName); err != nil { + if err := catalogUpdateServiceIndexes(tx, existing.ServiceName, idx, &existing.EnterpriseMeta); err != nil { return err } - svcRaw, err := tx.First(tableServices, indexID, - NodeServiceQuery{ - EnterpriseMeta: existing.EnterpriseMeta, - Node: existing.Node, - Service: existing.ServiceID, - PeerName: existing.PeerName, - }) + + svcRaw, err := tx.First(tableServices, indexID, NodeServiceQuery{EnterpriseMeta: existing.EnterpriseMeta, Node: existing.Node, Service: existing.ServiceID}) if err != nil { return fmt.Errorf("failed retrieving service from state store: %v", err) } svc := svcRaw.(*structs.ServiceNode) - if err := catalogUpdateServiceKindIndexes(tx, idx, svc.ServiceKind, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceKindIndexes(tx, svc.ServiceKind, idx, &svc.EnterpriseMeta); err != nil { return err } } else { - if err := updateAllServiceIndexesOfNode(tx, idx, existing.Node, &existing.EnterpriseMeta, existing.PeerName); err != nil { + if err := updateAllServiceIndexesOfNode(tx, idx, existing.Node, &existing.EnterpriseMeta); err != nil { return fmt.Errorf("Failed to update services linked to deleted healthcheck: %s", err) } - if err := catalogUpdateServicesIndexes(tx, idx, entMeta, existing.PeerName); err != nil { + if err := catalogUpdateServicesIndexes(tx, idx, entMeta); err != nil { return err } } @@ -2583,22 +2289,20 @@ func (s *Store) deleteCheckTxn(tx WriteTxn, idx uint64, node string, checkID typ return fmt.Errorf("failed removing check: %s", err) } - if err := catalogUpdateCheckIndexes(tx, idx, entMeta, peerName); err != nil { + if err := catalogUpdateCheckIndexes(tx, idx, entMeta); err != nil { return err } - if peerName == "" { - // Delete any sessions for this check. - sessions, err := checkSessionsTxn(tx, existing) - if err != nil { - return err - } + // Delete any sessions for this check. + sessions, err := checkSessionsTxn(tx, existing) + if err != nil { + return err + } - // Do the delete in a separate loop so we don't trash the iterator. - for _, sess := range sessions { - if err := s.deleteSessionTxn(tx, idx, sess.Session, &sess.EnterpriseMeta); err != nil { - return fmt.Errorf("failed deleting session: %s", err) - } + // Do the delete in a separate loop so we don't trash the iterator. + for _, sess := range sessions { + if err := s.deleteSessionTxn(tx, idx, sess.Session, &sess.EnterpriseMeta); err != nil { + return fmt.Errorf("failed deleting session: %s", err) } } @@ -2606,12 +2310,12 @@ func (s *Store) deleteCheckTxn(tx WriteTxn, idx uint64, node string, checkID typ } // CombinedCheckServiceNodes is used to query all nodes and checks for both typical and Connect endpoints of a service -func (s *Store) CombinedCheckServiceNodes(ws memdb.WatchSet, service structs.ServiceName, peerName string) (uint64, structs.CheckServiceNodes, error) { +func (s *Store) CombinedCheckServiceNodes(ws memdb.WatchSet, service structs.ServiceName) (uint64, structs.CheckServiceNodes, error) { var ( resp structs.CheckServiceNodes maxIdx uint64 ) - idx, csn, err := s.CheckServiceNodes(ws, service.Name, &service.EnterpriseMeta, peerName) + idx, csn, err := s.CheckServiceNodes(ws, service.Name, &service.EnterpriseMeta) if err != nil { return 0, nil, fmt.Errorf("failed to get downstream nodes for %q: %v", service, err) } @@ -2619,7 +2323,8 @@ func (s *Store) CombinedCheckServiceNodes(ws memdb.WatchSet, service structs.Ser maxIdx = idx } resp = append(resp, csn...) - idx, csn, err = s.CheckConnectServiceNodes(ws, service.Name, &service.EnterpriseMeta, peerName) + + idx, csn, err = s.CheckConnectServiceNodes(ws, service.Name, &service.EnterpriseMeta) if err != nil { return 0, nil, fmt.Errorf("failed to get downstream connect nodes for %q: %v", service, err) } @@ -2632,14 +2337,14 @@ func (s *Store) CombinedCheckServiceNodes(ws memdb.WatchSet, service structs.Ser } // CheckServiceNodes is used to query all nodes and checks for a given service. -func (s *Store) CheckServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.CheckServiceNodes, error) { - return s.checkServiceNodes(ws, serviceName, false, entMeta, peerName) +func (s *Store) CheckServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { + return s.checkServiceNodes(ws, serviceName, false, entMeta) } // CheckConnectServiceNodes is used to query all nodes and checks for Connect // compatible endpoints for a given service. -func (s *Store) CheckConnectServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.CheckServiceNodes, error) { - return s.checkServiceNodes(ws, serviceName, true, entMeta, peerName) +func (s *Store) CheckConnectServiceNodes(ws memdb.WatchSet, serviceName string, entMeta *acl.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { + return s.checkServiceNodes(ws, serviceName, true, entMeta) } // CheckIngressServiceNodes is used to query all nodes and checks for ingress @@ -2648,7 +2353,7 @@ func (s *Store) CheckIngressServiceNodes(ws memdb.WatchSet, serviceName string, tx := s.db.Txn(false) defer tx.Abort() - maxIdx, nodes, err := serviceGatewayNodes(tx, ws, serviceName, structs.ServiceKindIngressGateway, entMeta, structs.DefaultPeerKeyword) + maxIdx, nodes, err := serviceGatewayNodes(tx, ws, serviceName, structs.ServiceKindIngressGateway, entMeta) if err != nil { return 0, nil, fmt.Errorf("failed gateway nodes lookup: %v", err) } @@ -2670,7 +2375,7 @@ func (s *Store) CheckIngressServiceNodes(ws memdb.WatchSet, serviceName string, var results structs.CheckServiceNodes for sn := range names { - idx, n, err := checkServiceNodesTxn(tx, ws, sn.Name, false, &sn.EnterpriseMeta, structs.DefaultPeerKeyword) + idx, n, err := checkServiceNodesTxn(tx, ws, sn.Name, false, &sn.EnterpriseMeta) if err != nil { return 0, nil, err } @@ -2680,14 +2385,14 @@ func (s *Store) CheckIngressServiceNodes(ws memdb.WatchSet, serviceName string, return maxIdx, results, nil } -func (s *Store) checkServiceNodes(ws memdb.WatchSet, serviceName string, connect bool, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.CheckServiceNodes, error) { +func (s *Store) checkServiceNodes(ws memdb.WatchSet, serviceName string, connect bool, entMeta *acl.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { tx := s.db.Txn(false) defer tx.Abort() - return checkServiceNodesTxn(tx, ws, serviceName, connect, entMeta, peerName) + return checkServiceNodesTxn(tx, ws, serviceName, connect, entMeta) } -func checkServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, serviceName string, connect bool, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.CheckServiceNodes, error) { +func checkServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, serviceName string, connect bool, entMeta *acl.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { index := indexService if connect { index = indexConnect @@ -2701,7 +2406,6 @@ func checkServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, serviceName string, con q := Query{ Value: serviceName, EnterpriseMeta: *entMeta, - PeerName: peerName, } iter, err := tx.Get(tableServices, index, q) if err != nil { @@ -2736,10 +2440,9 @@ func checkServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, serviceName string, con // We append rather than replace since it allows users to migrate a service // to the mesh with a mix of sidecars and gateways until all its instances have a sidecar. var idx uint64 - if connect && peerName == "" { + if connect { // Look up gateway nodes associated with the service - // TODO(peering): we'll have to do something here - gwIdx, nodes, err := serviceGatewayNodes(tx, ws, serviceName, structs.ServiceKindTerminatingGateway, entMeta, structs.DefaultPeerKeyword) + gwIdx, nodes, err := serviceGatewayNodes(tx, ws, serviceName, structs.ServiceKindTerminatingGateway, entMeta) if err != nil { return 0, nil, fmt.Errorf("failed gateway nodes lookup: %v", err) } @@ -2771,7 +2474,7 @@ func checkServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, serviceName string, con // We know service values should exist since the serviceNames map is only // populated if there is at least one result above. so serviceExists arg // below is always true. - svcIdx, svcCh := maxIndexAndWatchChForService(tx, n.Name, true, true, &n.EnterpriseMeta, peerName) + svcIdx, svcCh := maxIndexAndWatchChForService(tx, n.Name, true, true, &n.EnterpriseMeta) // Take the max index represented idx = lib.MaxUint64(idx, svcIdx) if svcCh != nil { @@ -2792,7 +2495,7 @@ func checkServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, serviceName string, con // use target serviceName here but it actually doesn't matter. No chan will // be returned as we can't use the optimization in this case (and don't need // to as there is only one chan to watch anyway). - svcIdx, _ := maxIndexAndWatchChForService(tx, serviceName, false, true, entMeta, peerName) + svcIdx, _ := maxIndexAndWatchChForService(tx, serviceName, false, true, entMeta) idx = lib.MaxUint64(idx, svcIdx) } @@ -2818,12 +2521,12 @@ func checkServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, serviceName string, con ws.Add(iter.WatchCh()) } - return parseCheckServiceNodes(tx, fallbackWS, idx, results, entMeta, peerName, err) + return parseCheckServiceNodes(tx, fallbackWS, idx, results, entMeta, err) } // CheckServiceTagNodes is used to query all nodes and checks for a given // service, filtering out services that don't contain the given tag. -func (s *Store) CheckServiceTagNodes(ws memdb.WatchSet, serviceName string, tags []string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.CheckServiceNodes, error) { +func (s *Store) CheckServiceTagNodes(ws memdb.WatchSet, serviceName string, tags []string, entMeta *acl.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -2832,7 +2535,7 @@ func (s *Store) CheckServiceTagNodes(ws memdb.WatchSet, serviceName string, tags entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } - q := Query{Value: serviceName, EnterpriseMeta: *entMeta, PeerName: peerName} + q := Query{Value: serviceName, EnterpriseMeta: *entMeta} iter, err := tx.Get(tableServices, indexService, q) if err != nil { return 0, nil, fmt.Errorf("failed service lookup: %s", err) @@ -2851,8 +2554,8 @@ func (s *Store) CheckServiceTagNodes(ws memdb.WatchSet, serviceName string, tags } // Get the table index. - idx := maxIndexForService(tx, serviceName, serviceExists, true, entMeta, peerName) - return parseCheckServiceNodes(tx, ws, idx, results, entMeta, peerName, err) + idx := maxIndexForService(tx, serviceName, serviceExists, true, entMeta) + return parseCheckServiceNodes(tx, ws, idx, results, entMeta, err) } // GatewayServices is used to query all services associated with a gateway @@ -2898,37 +2601,23 @@ func (s *Store) ServiceNamesOfKind(ws memdb.WatchSet, kind structs.ServiceKind) tx := s.db.Txn(false) defer tx.Abort() - wildcardMeta := structs.WildcardEnterpriseMetaInPartition(structs.WildcardSpecifier) - return serviceNamesOfKindTxn(tx, ws, kind, *wildcardMeta) + return serviceNamesOfKindTxn(tx, ws, kind) } -func serviceNamesOfKindTxn(tx ReadTxn, ws memdb.WatchSet, kind structs.ServiceKind, entMeta acl.EnterpriseMeta) (uint64, []*KindServiceName, error) { - iter, err := tx.Get(tableKindServiceNames, indexKind, Query{Value: string(kind), EnterpriseMeta: entMeta}) +func serviceNamesOfKindTxn(tx ReadTxn, ws memdb.WatchSet, kind structs.ServiceKind) (uint64, []*KindServiceName, error) { + var names []*KindServiceName + iter, err := tx.Get(tableKindServiceNames, indexKindOnly, kind) if err != nil { return 0, nil, err } - - // TODO(peering): Maybe delete this watch and rely on the max idx tables below, to avoid waking up on unrelated changes ws.Add(iter.WatchCh()) - var names []*KindServiceName + idx := kindServiceNamesMaxIndex(tx, ws, kind) for name := iter.Next(); name != nil; name = iter.Next() { ksn := name.(*KindServiceName) names = append(names, ksn) } - var idx uint64 - switch { - case entMeta.PartitionOrDefault() == structs.WildcardSpecifier: - idx = kindServiceNamesMaxIndex(tx, ws, kind.Normalized()) - - case entMeta.NamespaceOrDefault() == structs.WildcardSpecifier: - idx = kindServiceNamesMaxIndex(tx, ws, partitionedIndexEntryName(kind.Normalized(), entMeta.PartitionOrDefault())) - - default: - idx = kindServiceNamesMaxIndex(tx, ws, partitionedAndNamespacedIndexEntryName(kind.Normalized(), &entMeta)) - - } return idx, names, nil } @@ -2943,9 +2632,7 @@ func parseCheckServiceNodes( tx ReadTxn, ws memdb.WatchSet, idx uint64, services structs.ServiceNodes, entMeta *acl.EnterpriseMeta, - peerName string, - err error, -) (uint64, structs.CheckServiceNodes, error) { + err error) (uint64, structs.CheckServiceNodes, error) { if err != nil { return 0, nil, err } @@ -2956,16 +2643,9 @@ func parseCheckServiceNodes( return idx, nil, nil } - if entMeta == nil { - entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() - } - // We don't want to track an unlimited number of nodes, so we pull a // top-level watch to use as a fallback. - allNodes, err := tx.Get(tableNodes, indexID+"_prefix", Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - }) + allNodes, err := tx.Get(tableNodes, indexID+"_prefix", entMeta) if err != nil { return 0, nil, fmt.Errorf("failed nodes lookup: %s", err) } @@ -2974,10 +2654,7 @@ func parseCheckServiceNodes( // We need a similar fallback for checks. Since services need the // status of node + service-specific checks, we pull in a top-level // watch over all checks. - allChecks, err := tx.Get(tableChecks, indexID+"_prefix", Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - }) + allChecks, err := tx.Get(tableChecks, indexID+"_prefix", entMeta) if err != nil { return 0, nil, fmt.Errorf("failed checks lookup: %s", err) } @@ -2989,7 +2666,6 @@ func parseCheckServiceNodes( watchCh, n, err := tx.FirstWatch(tableNodes, indexID, Query{ Value: sn.Node, EnterpriseMeta: sn.EnterpriseMeta, - PeerName: sn.PeerName, }) if err != nil { return 0, nil, fmt.Errorf("failed node lookup: %s", err) @@ -3008,7 +2684,6 @@ func parseCheckServiceNodes( Node: sn.Node, Service: "", // node checks have no service EnterpriseMeta: *sn.EnterpriseMeta.WithWildcardNamespace(), - PeerName: sn.PeerName, } iter, err := tx.Get(tableChecks, indexNodeService, q) if err != nil { @@ -3024,7 +2699,6 @@ func parseCheckServiceNodes( Node: sn.Node, Service: sn.ServiceID, EnterpriseMeta: sn.EnterpriseMeta, - PeerName: sn.PeerName, } iter, err = tx.Get(tableChecks, indexNodeService, q) if err != nil { @@ -3048,7 +2722,7 @@ func parseCheckServiceNodes( // NodeInfo is used to generate a dump of a single node. The dump includes // all services and checks which are registered against the node. -func (s *Store) NodeInfo(ws memdb.WatchSet, node string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.NodeDump, error) { +func (s *Store) NodeInfo(ws memdb.WatchSet, node string, entMeta *acl.EnterpriseMeta) (uint64, structs.NodeDump, error) { tx := s.db.Txn(false) defer tx.Abort() @@ -3057,72 +2731,55 @@ func (s *Store) NodeInfo(ws memdb.WatchSet, node string, entMeta *acl.Enterprise } // Get the table index. - idx := catalogMaxIndex(tx, entMeta, peerName, true) + idx := catalogMaxIndex(tx, entMeta, true) // Query the node by the passed node nodes, err := tx.Get(tableNodes, indexID, Query{ Value: node, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return 0, nil, fmt.Errorf("failed node lookup: %s", err) } ws.Add(nodes.WatchCh()) - return parseNodes(tx, ws, idx, nodes, entMeta, peerName) + return parseNodes(tx, ws, idx, nodes, entMeta) } // NodeDump is used to generate a dump of all nodes. This call is expensive // as it has to query every node, service, and check. The response can also // be quite large since there is currently no filtering applied. -func (s *Store) NodeDump(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.NodeDump, error) { +func (s *Store) NodeDump(ws memdb.WatchSet, entMeta *acl.EnterpriseMeta) (uint64, structs.NodeDump, error) { tx := s.db.Txn(false) defer tx.Abort() - if entMeta == nil { - entMeta = structs.NodeEnterpriseMetaInDefaultPartition() - } - // Get the table index. - idx := catalogMaxIndex(tx, entMeta, peerName, true) + idx := catalogMaxIndex(tx, entMeta, true) // Fetch all of the registered nodes - q := Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - } - nodes, err := tx.Get(tableNodes, indexID+"_prefix", q) + nodes, err := tx.Get(tableNodes, indexID+"_prefix", entMeta) if err != nil { return 0, nil, fmt.Errorf("failed node lookup: %s", err) } ws.Add(nodes.WatchCh()) - return parseNodes(tx, ws, idx, nodes, entMeta, peerName) + return parseNodes(tx, ws, idx, nodes, entMeta) } -func (s *Store) ServiceDump(ws memdb.WatchSet, kind structs.ServiceKind, useKind bool, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.CheckServiceNodes, error) { +func (s *Store) ServiceDump(ws memdb.WatchSet, kind structs.ServiceKind, useKind bool, entMeta *acl.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { tx := s.db.Txn(false) defer tx.Abort() if useKind { - return serviceDumpKindTxn(tx, ws, kind, entMeta, peerName) + return serviceDumpKindTxn(tx, ws, kind, entMeta) } else { - return serviceDumpAllTxn(tx, ws, entMeta, peerName) + return serviceDumpAllTxn(tx, ws, entMeta) } } -func serviceDumpAllTxn(tx ReadTxn, ws memdb.WatchSet, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.CheckServiceNodes, error) { +func serviceDumpAllTxn(tx ReadTxn, ws memdb.WatchSet, entMeta *acl.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { // Get the table index - idx := catalogMaxIndexWatch(tx, ws, entMeta, "", true) + idx := catalogMaxIndexWatch(tx, ws, entMeta, true) - if entMeta == nil { - entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() - } - - q := Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - } - services, err := tx.Get(tableServices, indexID+"_prefix", q) + services, err := tx.Get(tableServices, indexID+"_prefix", entMeta) if err != nil { return 0, nil, fmt.Errorf("failed service lookup: %s", err) } @@ -3133,23 +2790,19 @@ func serviceDumpAllTxn(tx ReadTxn, ws memdb.WatchSet, entMeta *acl.EnterpriseMet results = append(results, sn) } - return parseCheckServiceNodes(tx, nil, idx, results, entMeta, peerName, err) + return parseCheckServiceNodes(tx, nil, idx, results, entMeta, err) } -func serviceDumpKindTxn(tx ReadTxn, ws memdb.WatchSet, kind structs.ServiceKind, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.CheckServiceNodes, error) { +func serviceDumpKindTxn(tx ReadTxn, ws memdb.WatchSet, kind structs.ServiceKind, entMeta *acl.EnterpriseMeta) (uint64, structs.CheckServiceNodes, error) { // unlike when we are dumping all services here we only need to watch the kind specific index entry for changing (or nodes, checks) // updating any services, nodes or checks will bump the appropriate service kind index so there is no need to watch any of the individual // entries - idx := catalogServiceKindMaxIndex(tx, ws, kind, entMeta, peerName) + idx := catalogServiceKindMaxIndex(tx, ws, kind, entMeta) if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } - q := Query{ - Value: string(kind), - EnterpriseMeta: *entMeta, - PeerName: peerName, - } + q := Query{Value: string(kind), EnterpriseMeta: *entMeta} services, err := tx.Get(tableServices, indexKind, q) if err != nil { return 0, nil, fmt.Errorf("failed service lookup: %s", err) @@ -3161,15 +2814,14 @@ func serviceDumpKindTxn(tx ReadTxn, ws memdb.WatchSet, kind structs.ServiceKind, results = append(results, sn) } - return parseCheckServiceNodes(tx, nil, idx, results, entMeta, peerName, err) + return parseCheckServiceNodes(tx, nil, idx, results, entMeta, err) } // parseNodes takes an iterator over a set of nodes and returns a struct // containing the nodes along with all of their associated services // and/or health checks. -// TODO(peering): support parsing by peerName func parseNodes(tx ReadTxn, ws memdb.WatchSet, idx uint64, - iter memdb.ResultIterator, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.NodeDump, error) { + iter memdb.ResultIterator, entMeta *acl.EnterpriseMeta) (uint64, structs.NodeDump, error) { if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() @@ -3177,11 +2829,7 @@ func parseNodes(tx ReadTxn, ws memdb.WatchSet, idx uint64, // We don't want to track an unlimited number of services, so we pull a // top-level watch to use as a fallback. - q := Query{ - EnterpriseMeta: *entMeta, - PeerName: peerName, - } - allServices, err := tx.Get(tableServices, indexID+"_prefix", q) + allServices, err := tx.Get(tableServices, indexID+"_prefix", entMeta) if err != nil { return 0, nil, fmt.Errorf("failed services lookup: %s", err) } @@ -3203,14 +2851,13 @@ func parseNodes(tx ReadTxn, ws memdb.WatchSet, idx uint64, ID: node.ID, Node: node.Node, Partition: node.Partition, - PeerName: node.PeerName, Address: node.Address, TaggedAddresses: node.TaggedAddresses, Meta: node.Meta, } // Query the node services - services, err := catalogServiceListByNode(tx, node.Node, entMeta, node.PeerName, true) + services, err := catalogServiceListByNode(tx, node.Node, entMeta, true) if err != nil { return 0, nil, fmt.Errorf("failed services lookup: %s", err) } @@ -3221,11 +2868,7 @@ func parseNodes(tx ReadTxn, ws memdb.WatchSet, idx uint64, } // Query the service level checks - checks, err := catalogListChecksByNode(tx, Query{ - Value: node.Node, - EnterpriseMeta: *entMeta, - PeerName: node.PeerName, - }) + checks, err := catalogListChecksByNode(tx, Query{Value: node.Node, EnterpriseMeta: *entMeta}) if err != nil { return 0, nil, fmt.Errorf("failed node lookup: %s", err) } @@ -3243,7 +2886,6 @@ func parseNodes(tx ReadTxn, ws memdb.WatchSet, idx uint64, // checkSessionsTxn returns the IDs of all sessions associated with a health check func checkSessionsTxn(tx ReadTxn, hc *structs.HealthCheck) ([]*sessionCheck, error) { - // TODO(peering): what are implications for imported health checks? mappings, err := tx.Get(tableSessionChecks, indexNodeCheck, MultiQuery{Value: []string{hc.Node, string(hc.CheckID)}, EnterpriseMeta: *structs.DefaultEnterpriseMetaInPartition(hc.PartitionOrDefault())}) if err != nil { @@ -3491,10 +3133,6 @@ func terminatingConfigGatewayServices( var gatewayServices structs.GatewayServices for _, svc := range entry.Services { - kind, err := GatewayServiceKind(tx, svc.Name, &svc.EnterpriseMeta) - if err != nil { - return false, nil, fmt.Errorf("failed to get gateway service kind for service %s: %v", svc.Name, err) - } mapping := &structs.GatewayService{ Gateway: gateway, Service: structs.NewServiceName(svc.Name, &svc.EnterpriseMeta), @@ -3503,7 +3141,6 @@ func terminatingConfigGatewayServices( CertFile: svc.CertFile, CAFile: svc.CAFile, SNI: svc.SNI, - ServiceKind: kind, } gatewayServices = append(gatewayServices, mapping) @@ -3511,34 +3148,6 @@ func terminatingConfigGatewayServices( return false, gatewayServices, nil } -func GatewayServiceKind(tx ReadTxn, name string, entMeta *acl.EnterpriseMeta) (structs.GatewayServiceKind, error) { - serviceIter, err := tx.First(tableServices, indexService, Query{ - Value: name, - EnterpriseMeta: *entMeta, - }) - if err != nil { - return structs.GatewayServiceKindUnknown, err - } - if serviceIter != nil { - return structs.GatewayServiceKindService, err - } - - _, entry, err := configEntryTxn(tx, nil, structs.ServiceDefaults, name, entMeta) - if err != nil { - return structs.GatewayServiceKindUnknown, err - } - if entry != nil { - sd, ok := entry.(*structs.ServiceConfigEntry) - if !ok { - return structs.GatewayServiceKindUnknown, fmt.Errorf("invalid config entry type %T", entry) - } - if sd.Destination != nil { - return structs.GatewayServiceKindDestination, nil - } - } - return structs.GatewayServiceKindUnknown, nil -} - // updateGatewayNamespace is used to target all services within a namespace func updateGatewayNamespace(tx WriteTxn, idx uint64, service *structs.GatewayService, entMeta *acl.EnterpriseMeta) error { if entMeta == nil { @@ -3579,41 +3188,6 @@ func updateGatewayNamespace(tx WriteTxn, idx uint64, service *structs.GatewaySer return err } } - entries, err := tx.Get(tableConfigEntries, indexID+"_prefix", ConfigEntryKindQuery{Kind: structs.ServiceDefaults, EnterpriseMeta: *entMeta}) - if err != nil { - return fmt.Errorf("failed querying entries: %s", err) - } - for entry := entries.Next(); entry != nil; entry = entries.Next() { - e := entry.(*structs.ServiceConfigEntry) - if e.Destination == nil { - continue - } - - sn := structs.ServiceName{ - Name: e.Name, - EnterpriseMeta: e.EnterpriseMeta, - } - existing, err := tx.First(tableGatewayServices, indexID, service.Gateway, sn, service.Port) - if err != nil { - return fmt.Errorf("gateway service lookup failed: %s", err) - } - if existing != nil { - // If there's an existing service associated with this gateway then we skip it. - // This means the service was specified on its own, and the service entry overrides the wildcard entry. - continue - } - - mapping := service.Clone() - - mapping.Service = structs.NewServiceName(e.Name, &service.Service.EnterpriseMeta) - mapping.ServiceKind = structs.GatewayServiceKindDestination - mapping.FromWildcard = true - - err = updateGatewayService(tx, idx, mapping) - if err != nil { - return err - } - } // Also store a mapping for the wildcard so that the TLS creds can be pulled // for new services registered in its namespace @@ -3661,11 +3235,16 @@ func updateGatewayService(tx WriteTxn, idx uint64, mapping *structs.GatewayServi // checkWildcardForGatewaysAndUpdate checks whether a service matches a // wildcard definition in gateway config entries and if so adds it the the // gateway-services table. -func checkGatewayWildcardsAndUpdate(tx WriteTxn, idx uint64, svc *structs.ServiceName, kind structs.GatewayServiceKind) error { +func checkGatewayWildcardsAndUpdate(tx WriteTxn, idx uint64, svc *structs.NodeService) error { + // Do not associate non-typical services with gateways or consul services + if svc.Kind != structs.ServiceKindTypical || svc.Service == "consul" { + return nil + } + sn := structs.ServiceName{Name: structs.WildcardSpecifier, EnterpriseMeta: svc.EnterpriseMeta} svcGateways, err := tx.Get(tableGatewayServices, indexService, sn) if err != nil { - return fmt.Errorf("failed gateway lookup for %q: %s", svc.Name, err) + return fmt.Errorf("failed gateway lookup for %q: %s", svc.Service, err) } for service := svcGateways.Next(); service != nil; service = svcGateways.Next() { if wildcardSvc, ok := service.(*structs.GatewayService); ok && wildcardSvc != nil { @@ -3673,9 +3252,8 @@ func checkGatewayWildcardsAndUpdate(tx WriteTxn, idx uint64, svc *structs.Servic // Copy the wildcard mapping and modify it gatewaySvc := wildcardSvc.Clone() - gatewaySvc.Service = structs.NewServiceName(svc.Name, &svc.EnterpriseMeta) + gatewaySvc.Service = structs.NewServiceName(svc.Service, &svc.EnterpriseMeta) gatewaySvc.FromWildcard = true - gatewaySvc.ServiceKind = kind if err = updateGatewayService(tx, idx, gatewaySvc); err != nil { return fmt.Errorf("Failed to associate service %q with gateway %q", gatewaySvc.Service.String(), gatewaySvc.Gateway.String()) @@ -3685,31 +3263,6 @@ func checkGatewayWildcardsAndUpdate(tx WriteTxn, idx uint64, svc *structs.Servic return nil } -// checkGatewayAndUpdate checks whether a service matches a -// wildcard definition in gateway config entries and if so adds it the the -// gateway-services table. -func checkGatewayAndUpdate(tx WriteTxn, idx uint64, svc *structs.ServiceName, kind structs.GatewayServiceKind) error { - sn := structs.ServiceName{Name: svc.Name, EnterpriseMeta: svc.EnterpriseMeta} - svcGateways, err := tx.First(tableGatewayServices, indexService, sn) - if err != nil { - return fmt.Errorf("failed gateway lookup for %q: %s", svc.Name, err) - } - - if service, ok := svcGateways.(*structs.GatewayService); ok && service != nil { - // Copy the wildcard mapping and modify it - gatewaySvc := service.Clone() - - gatewaySvc.Service = structs.NewServiceName(svc.Name, &svc.EnterpriseMeta) - gatewaySvc.ServiceKind = kind - - if err = updateGatewayService(tx, idx, gatewaySvc); err != nil { - return fmt.Errorf("Failed to associate service %q with gateway %q", gatewaySvc.Service.String(), gatewaySvc.Gateway.String()) - } - } - - return nil -} - func cleanupGatewayWildcards(tx WriteTxn, idx uint64, svc *structs.ServiceNode) error { // Clean up association between service name and gateways if needed sn := structs.ServiceName{Name: svc.ServiceName, EnterpriseMeta: svc.EnterpriseMeta} @@ -3740,12 +3293,6 @@ func cleanupGatewayWildcards(tx WriteTxn, idx uint64, svc *structs.ServiceNode) if err := deleteGatewayServiceTopologyMapping(tx, idx, m); err != nil { return fmt.Errorf("failed to reconcile mesh topology for gateway: %v", err) } - } else { - kind, err := GatewayServiceKind(tx, m.Service.Name, &m.Service.EnterpriseMeta) - if err != nil { - return fmt.Errorf("failed to get gateway service kind for service %s: %v", svc.ServiceName, err) - } - checkGatewayAndUpdate(tx, idx, &structs.ServiceName{Name: m.Service.Name, EnterpriseMeta: m.Service.EnterpriseMeta}, kind) } } return nil @@ -3796,11 +3343,7 @@ func (s *Store) collectGatewayServices(tx ReadTxn, ws memdb.WatchSet, iter memdb // TODO(ingress): How to handle index rolling back when a config entry is // deleted that references a service? // We might need something like the service_last_extinction index? -func serviceGatewayNodes(tx ReadTxn, ws memdb.WatchSet, service string, kind structs.ServiceKind, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.ServiceNodes, error) { - if peerName != "" { - return 0, nil, nil - } - +func serviceGatewayNodes(tx ReadTxn, ws memdb.WatchSet, service string, kind structs.ServiceKind, entMeta *acl.EnterpriseMeta) (uint64, structs.ServiceNodes, error) { // Look up gateway name associated with the service gws, err := tx.Get(tableGatewayServices, indexService, structs.NewServiceName(service, entMeta)) if err != nil { @@ -3842,7 +3385,7 @@ func serviceGatewayNodes(tx ReadTxn, ws memdb.WatchSet, service string, kind str } // This prevents the index from sliding back if case all instances of the gateway service are deregistered - svcIdx := maxIndexForService(tx, mapping.Gateway.Name, exists, false, &mapping.Gateway.EnterpriseMeta, structs.DefaultPeerKeyword) + svcIdx := maxIndexForService(tx, mapping.Gateway.Name, exists, false, &mapping.Gateway.EnterpriseMeta) maxIdx = lib.MaxUint64(maxIdx, svcIdx) // Ensure that blocking queries wake up if the gateway-service mapping exists, but the gateway does not exist yet @@ -3938,11 +3481,7 @@ func (s *Store) ServiceTopology( if entMeta == nil { entMeta = structs.DefaultEnterpriseMetaInDefaultPartition() } - q := Query{ - Value: service, - EnterpriseMeta: *entMeta, - PeerName: structs.TODOPeerKeyword, - } + q := Query{Value: service, EnterpriseMeta: *entMeta} idx, proxies, err := serviceNodesTxn(tx, ws, indexConnect, q) if err != nil { @@ -4057,7 +3596,7 @@ func (s *Store) ServiceTopology( upstreamDecisions[un.String()] = decision } - idx, unfilteredUpstreams, err := s.combinedServiceNodesTxn(tx, ws, upstreamNames, structs.DefaultPeerKeyword) + idx, unfilteredUpstreams, err := s.combinedServiceNodesTxn(tx, ws, upstreamNames) if err != nil { return 0, nil, fmt.Errorf("failed to get upstreams for %q: %v", sn.String(), err) } @@ -4175,7 +3714,7 @@ func (s *Store) ServiceTopology( downstreamDecisions[dn.String()] = decision } - idx, unfilteredDownstreams, err := s.combinedServiceNodesTxn(tx, ws, downstreamNames, structs.DefaultPeerKeyword) + idx, unfilteredDownstreams, err := s.combinedServiceNodesTxn(tx, ws, downstreamNames) if err != nil { return 0, nil, fmt.Errorf("failed to get downstreams for %q: %v", sn.String(), err) @@ -4224,14 +3763,14 @@ func (s *Store) ServiceTopology( // combinedServiceNodesTxn returns typical and connect endpoints for a list of services. // This enabled aggregating checks statuses across both. -func (s *Store) combinedServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, names []structs.ServiceName, peerName string) (uint64, structs.CheckServiceNodes, error) { +func (s *Store) combinedServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, names []structs.ServiceName) (uint64, structs.CheckServiceNodes, error) { var ( maxIdx uint64 resp structs.CheckServiceNodes ) for _, u := range names { // Collect typical then connect instances - idx, csn, err := checkServiceNodesTxn(tx, ws, u.Name, false, &u.EnterpriseMeta, peerName) + idx, csn, err := checkServiceNodesTxn(tx, ws, u.Name, false, &u.EnterpriseMeta) if err != nil { return 0, nil, err } @@ -4240,7 +3779,7 @@ func (s *Store) combinedServiceNodesTxn(tx ReadTxn, ws memdb.WatchSet, names []s } resp = append(resp, csn...) - idx, csn, err = checkServiceNodesTxn(tx, ws, u.Name, true, &u.EnterpriseMeta, peerName) + idx, csn, err = checkServiceNodesTxn(tx, ws, u.Name, true, &u.EnterpriseMeta) if err != nil { return 0, nil, err } @@ -4341,7 +3880,6 @@ func linkedFromRegistrationTxn(tx ReadTxn, ws memdb.WatchSet, service structs.Se // updateMeshTopology creates associations between the input service and its upstreams in the topology table func updateMeshTopology(tx WriteTxn, idx uint64, node string, svc *structs.NodeService, existing interface{}) error { - // TODO(peering): make this peering aware oldUpstreams := make(map[structs.ServiceName]bool) if e, ok := existing.(*structs.ServiceNode); ok { for _, u := range e.ServiceProxy.Upstreams { @@ -4422,7 +3960,6 @@ func updateMeshTopology(tx WriteTxn, idx uint64, node string, svc *structs.NodeS // cleanupMeshTopology removes a service from the mesh topology table // This is only safe to call when there are no more known instances of this proxy func cleanupMeshTopology(tx WriteTxn, idx uint64, service *structs.ServiceNode) error { - // TODO(peering): make this peering aware? if service.ServiceKind != structs.ServiceKindConnectProxy { return nil } @@ -4530,7 +4067,6 @@ func truncateGatewayServiceTopologyMappings(tx WriteTxn, idx uint64, gateway str } func upsertKindServiceName(tx WriteTxn, idx uint64, kind structs.ServiceKind, name structs.ServiceName) error { - // TODO(peering): make this peering aware q := KindServiceNameQuery{Name: name.Name, Kind: kind, EnterpriseMeta: name.EnterpriseMeta} existing, err := tx.First(tableKindServiceNames, indexID, q) if err != nil { @@ -4553,7 +4089,10 @@ func upsertKindServiceName(tx WriteTxn, idx uint64, kind structs.ServiceKind, na if err := tx.Insert(tableKindServiceNames, &ksn); err != nil { return fmt.Errorf("failed inserting %s/%s into %s: %s", kind, name.String(), tableKindServiceNames, err) } - return updateKindServiceNamesIndex(tx, idx, kind, name.EnterpriseMeta) + if err := indexUpdateMaxTxn(tx, idx, kindServiceNameIndexName(kind)); err != nil { + return fmt.Errorf("failed updating %s index: %v", tableKindServiceNames, err) + } + return nil } func cleanupKindServiceName(tx WriteTxn, idx uint64, name structs.ServiceName, kind structs.ServiceKind) error { @@ -4561,12 +4100,15 @@ func cleanupKindServiceName(tx WriteTxn, idx uint64, name structs.ServiceName, k if _, err := tx.DeleteAll(tableKindServiceNames, indexID, q); err != nil { return fmt.Errorf("failed to delete %s from %s: %s", name, tableKindServiceNames, err) } - return updateKindServiceNamesIndex(tx, idx, kind, name.EnterpriseMeta) + + if err := indexUpdateMaxTxn(tx, idx, kindServiceNameIndexName(kind)); err != nil { + return fmt.Errorf("failed updating %s index: %v", tableKindServiceNames, err) + } + return nil } // CatalogDump returns all the contents of the node, service and check tables. // In Enterprise, this will return entries across all partitions and namespaces. -// TODO(peering) make this peering aware? func (s *Store) CatalogDump() (*structs.CatalogContents, error) { tx := s.db.Txn(false) contents := &structs.CatalogContents{} diff --git a/agent/consul/state/catalog_events.go b/agent/consul/state/catalog_events.go index 42f1f5d3dbd78..13c5c4ba0c96e 100644 --- a/agent/consul/state/catalog_events.go +++ b/agent/consul/state/catalog_events.go @@ -9,7 +9,6 @@ import ( "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/stream" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbservice" "github.com/hashicorp/consul/proto/pbsubscribe" ) @@ -18,13 +17,33 @@ import ( type EventSubjectService struct { Key string EnterpriseMeta acl.EnterpriseMeta - PeerName string overrideKey string overrideNamespace string overridePartition string } +// String satisfies the stream.Subject interface. +func (s EventSubjectService) String() string { + partition := s.EnterpriseMeta.PartitionOrDefault() + if v := s.overridePartition; v != "" { + partition = strings.ToLower(v) + } + + namespace := s.EnterpriseMeta.NamespaceOrDefault() + if v := s.overrideNamespace; v != "" { + namespace = strings.ToLower(v) + } + + key := s.Key + if v := s.overrideKey; v != "" { + key = v + } + key = strings.ToLower(key) + + return partition + "/" + namespace + "/" + key +} + // EventPayloadCheckServiceNode is used as the Payload for a stream.Event to // indicates changes to a CheckServiceNode for service health. // @@ -43,7 +62,6 @@ type EventPayloadCheckServiceNode struct { } func (e EventPayloadCheckServiceNode) HasReadPermission(authz acl.Authorizer) bool { - // TODO(peering): figure out how authz works for peered data return e.Value.CanRead(authz) == acl.Allow } @@ -51,7 +69,6 @@ func (e EventPayloadCheckServiceNode) Subject() stream.Subject { return EventSubjectService{ Key: e.Value.Service.Service, EnterpriseMeta: e.Value.Service.EnterpriseMeta, - PeerName: e.Value.Service.PeerName, overrideKey: e.overrideKey, overrideNamespace: e.overrideNamespace, @@ -59,31 +76,6 @@ func (e EventPayloadCheckServiceNode) Subject() stream.Subject { } } -func (e EventPayloadCheckServiceNode) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - return &pbsubscribe.Event{ - Index: idx, - Payload: &pbsubscribe.Event_ServiceHealth{ - ServiceHealth: &pbsubscribe.ServiceHealthUpdate{ - Op: e.Op, - CheckServiceNode: pbservice.NewCheckServiceNodeFromStructs(e.Value), - }, - }, - } -} - -func PBToStreamSubscribeRequest(req *pbsubscribe.SubscribeRequest, entMeta acl.EnterpriseMeta) *stream.SubscribeRequest { - return &stream.SubscribeRequest{ - Topic: req.Topic, - Subject: EventSubjectService{ - Key: req.Key, - EnterpriseMeta: entMeta, - PeerName: req.PeerName, - }, - Token: req.Token, - Index: req.Index, - } -} - // serviceHealthSnapshot returns a stream.SnapshotFunc that provides a snapshot // of stream.Events that describe the current state of a service health query. func (s *Store) ServiceHealthSnapshot(req stream.SubscribeRequest, buf stream.SnapshotAppender) (index uint64, err error) { @@ -97,7 +89,7 @@ func (s *Store) ServiceHealthSnapshot(req stream.SubscribeRequest, buf stream.Sn return 0, fmt.Errorf("expected SubscribeRequest.Subject to be a: state.EventSubjectService, was a: %T", req.Subject) } - idx, nodes, err := checkServiceNodesTxn(tx, nil, subject.Key, connect, &subject.EnterpriseMeta, subject.PeerName) + idx, nodes, err := checkServiceNodesTxn(tx, nil, subject.Key, connect, &subject.EnterpriseMeta) if err != nil { return 0, err } @@ -135,7 +127,6 @@ type nodeServiceTuple struct { Node string ServiceID string EntMeta acl.EnterpriseMeta - PeerName string } func newNodeServiceTupleFromServiceNode(sn *structs.ServiceNode) nodeServiceTuple { @@ -143,7 +134,6 @@ func newNodeServiceTupleFromServiceNode(sn *structs.ServiceNode) nodeServiceTupl Node: strings.ToLower(sn.Node), ServiceID: sn.ServiceID, EntMeta: sn.EnterpriseMeta, - PeerName: sn.PeerName, } } @@ -152,7 +142,6 @@ func newNodeServiceTupleFromServiceHealthCheck(hc *structs.HealthCheck) nodeServ Node: strings.ToLower(hc.Node), ServiceID: hc.ServiceID, EntMeta: hc.EnterpriseMeta, - PeerName: hc.PeerName, } } @@ -164,7 +153,6 @@ type serviceChange struct { type nodeTuple struct { Node string Partition string - PeerName string } var serviceChangeIndirect = serviceChange{changeType: changeIndirect} @@ -298,7 +286,7 @@ func ServiceHealthEventsFromChanges(tx ReadTxn, changes Changes) ([]stream.Event } // Rebuild events for all services on this node es, err := newServiceHealthEventsForNode(tx, changes.Index, node.Node, - structs.WildcardEnterpriseMetaInPartition(node.Partition), node.PeerName) + structs.WildcardEnterpriseMetaInPartition(node.Partition)) if err != nil { return nil, err } @@ -354,7 +342,6 @@ func ServiceHealthEventsFromChanges(tx ReadTxn, changes Changes) ([]stream.Event q := Query{ Value: gs.Gateway.Name, EnterpriseMeta: gatewayName.EnterpriseMeta, - PeerName: structs.TODOPeerKeyword, } _, nodes, err := serviceNodesTxn(tx, nil, indexService, q) if err != nil { @@ -517,8 +504,6 @@ func connectEventsByServiceKind(tx ReadTxn, origEvent stream.Event) ([]stream.Ev case structs.ServiceKindTerminatingGateway: var result []stream.Event - // TODO(peering): handle terminating gateways somehow - sn := structs.ServiceName{ Name: node.Service.Service, EnterpriseMeta: node.Service.EnterpriseMeta, @@ -566,17 +551,16 @@ func getPayloadCheckServiceNode(payload stream.Payload) *structs.CheckServiceNod // given node. This mirrors some of the the logic in the oddly-named // parseCheckServiceNodes but is more efficient since we know they are all on // the same node. -func newServiceHealthEventsForNode(tx ReadTxn, idx uint64, node string, entMeta *acl.EnterpriseMeta, peerName string) ([]stream.Event, error) { +func newServiceHealthEventsForNode(tx ReadTxn, idx uint64, node string, entMeta *acl.EnterpriseMeta) ([]stream.Event, error) { services, err := tx.Get(tableServices, indexNode, Query{ Value: node, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return nil, err } - n, checksFunc, err := getNodeAndChecks(tx, node, entMeta, peerName) + n, checksFunc, err := getNodeAndChecks(tx, node, entMeta) if err != nil { return nil, err } @@ -594,12 +578,11 @@ func newServiceHealthEventsForNode(tx ReadTxn, idx uint64, node string, entMeta // getNodeAndNodeChecks returns a the node structure and a function that returns // the full list of checks for a specific service on that node. -func getNodeAndChecks(tx ReadTxn, node string, entMeta *acl.EnterpriseMeta, peerName string) (*structs.Node, serviceChecksFunc, error) { +func getNodeAndChecks(tx ReadTxn, node string, entMeta *acl.EnterpriseMeta) (*structs.Node, serviceChecksFunc, error) { // Fetch the node nodeRaw, err := tx.First(tableNodes, indexID, Query{ Value: node, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return nil, nil, err @@ -612,7 +595,6 @@ func getNodeAndChecks(tx ReadTxn, node string, entMeta *acl.EnterpriseMeta, peer iter, err := tx.Get(tableChecks, indexNode, Query{ Value: node, EnterpriseMeta: *entMeta, - PeerName: peerName, }) if err != nil { return nil, nil, err @@ -647,7 +629,7 @@ func getNodeAndChecks(tx ReadTxn, node string, entMeta *acl.EnterpriseMeta, peer type serviceChecksFunc func(serviceID string) structs.HealthChecks func newServiceHealthEventForService(tx ReadTxn, idx uint64, tuple nodeServiceTuple) (stream.Event, error) { - n, checksFunc, err := getNodeAndChecks(tx, tuple.Node, &tuple.EntMeta, tuple.PeerName) + n, checksFunc, err := getNodeAndChecks(tx, tuple.Node, &tuple.EntMeta) if err != nil { return stream.Event{}, err } @@ -656,7 +638,6 @@ func newServiceHealthEventForService(tx ReadTxn, idx uint64, tuple nodeServiceTu EnterpriseMeta: tuple.EntMeta, Node: tuple.Node, Service: tuple.ServiceID, - PeerName: tuple.PeerName, }) if err != nil { return stream.Event{}, err @@ -709,7 +690,6 @@ func newServiceHealthEventDeregister(idx uint64, sn *structs.ServiceNode) stream Node: &structs.Node{ Node: sn.Node, Partition: entMeta.PartitionOrEmpty(), - PeerName: sn.PeerName, }, Service: sn.ToNodeService(), } diff --git a/agent/consul/state/catalog_events_oss.go b/agent/consul/state/catalog_events_oss.go index e59636d318251..d088a6cfd1c02 100644 --- a/agent/consul/state/catalog_events_oss.go +++ b/agent/consul/state/catalog_events_oss.go @@ -13,7 +13,6 @@ func (nst nodeServiceTuple) nodeTuple() nodeTuple { return nodeTuple{ Node: strings.ToLower(nst.Node), Partition: "", - PeerName: nst.PeerName, } } @@ -21,7 +20,6 @@ func newNodeTupleFromNode(node *structs.Node) nodeTuple { return nodeTuple{ Node: strings.ToLower(node.Node), Partition: "", - PeerName: node.PeerName, } } @@ -29,20 +27,5 @@ func newNodeTupleFromHealthCheck(hc *structs.HealthCheck) nodeTuple { return nodeTuple{ Node: strings.ToLower(hc.Node), Partition: "", - PeerName: hc.PeerName, } } - -// String satisfies the stream.Subject interface. -func (s EventSubjectService) String() string { - key := s.Key - if v := s.overrideKey; v != "" { - key = v - } - key = strings.ToLower(key) - - if s.PeerName == "" { - return key - } - return s.PeerName + "/" + key -} diff --git a/agent/consul/state/catalog_events_oss_test.go b/agent/consul/state/catalog_events_oss_test.go deleted file mode 100644 index ace7cfe712023..0000000000000 --- a/agent/consul/state/catalog_events_oss_test.go +++ /dev/null @@ -1,45 +0,0 @@ -//go:build !consulent -// +build !consulent - -package state - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/agent/structs" -) - -func TestEventPayloadCheckServiceNode_Subject_OSS(t *testing.T) { - for desc, tc := range map[string]struct { - evt EventPayloadCheckServiceNode - sub string - }{ - "mixed casing": { - EventPayloadCheckServiceNode{ - Value: &structs.CheckServiceNode{ - Service: &structs.NodeService{ - Service: "FoO", - }, - }, - }, - "foo", - }, - "override key": { - EventPayloadCheckServiceNode{ - Value: &structs.CheckServiceNode{ - Service: &structs.NodeService{ - Service: "foo", - }, - }, - overrideKey: "bar", - }, - "bar", - }, - } { - t.Run(desc, func(t *testing.T) { - require.Equal(t, tc.sub, tc.evt.Subject().String()) - }) - } -} diff --git a/agent/consul/state/catalog_events_test.go b/agent/consul/state/catalog_events_test.go index 129b834b82e69..1f6f6d885afb6 100644 --- a/agent/consul/state/catalog_events_test.go +++ b/agent/consul/state/catalog_events_test.go @@ -16,6 +16,49 @@ import ( "github.com/hashicorp/consul/types" ) +func TestEventPayloadCheckServiceNode_Subject(t *testing.T) { + for desc, tc := range map[string]struct { + evt EventPayloadCheckServiceNode + sub string + }{ + "default partition and namespace": { + EventPayloadCheckServiceNode{ + Value: &structs.CheckServiceNode{ + Service: &structs.NodeService{ + Service: "foo", + }, + }, + }, + "default/default/foo", + }, + "mixed casing": { + EventPayloadCheckServiceNode{ + Value: &structs.CheckServiceNode{ + Service: &structs.NodeService{ + Service: "FoO", + }, + }, + }, + "default/default/foo", + }, + "override key": { + EventPayloadCheckServiceNode{ + Value: &structs.CheckServiceNode{ + Service: &structs.NodeService{ + Service: "foo", + }, + }, + overrideKey: "bar", + }, + "default/default/bar", + }, + } { + t.Run(desc, func(t *testing.T) { + require.Equal(t, tc.sub, tc.evt.Subject().String()) + }) + } +} + func TestServiceHealthSnapshot(t *testing.T) { store := NewStateStore(nil) @@ -264,7 +307,7 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { return nil }, Mutate: func(s *Store, tx *txn) error { - return s.deleteServiceTxn(tx, tx.Index, "node1", "web", nil, "") + return s.deleteServiceTxn(tx, tx.Index, "node1", "web", nil) }, WantEvents: []stream.Event{ // Should only publish deregistration for that service @@ -284,7 +327,7 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { return nil }, Mutate: func(s *Store, tx *txn) error { - return s.deleteNodeTxn(tx, tx.Index, "node1", nil, "") + return s.deleteNodeTxn(tx, tx.Index, "node1", nil) }, WantEvents: []stream.Event{ // Should publish deregistration events for all services @@ -337,7 +380,7 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { return s.ensureRegistrationTxn(tx, tx.Index, false, testServiceRegistration(t, "web", regConnectNative), false) }, Mutate: func(s *Store, tx *txn) error { - return s.deleteServiceTxn(tx, tx.Index, "node1", "web", nil, "") + return s.deleteServiceTxn(tx, tx.Index, "node1", "web", nil) }, WantEvents: []stream.Event{ // We should see both a regular service dereg event and a connect one @@ -401,7 +444,7 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { }, Mutate: func(s *Store, tx *txn) error { // Delete only the sidecar - return s.deleteServiceTxn(tx, tx.Index, "node1", "web_sidecar_proxy", nil, "") + return s.deleteServiceTxn(tx, tx.Index, "node1", "web_sidecar_proxy", nil) }, WantEvents: []stream.Event{ // We should see both a regular service dereg event and a connect one @@ -867,7 +910,7 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { }, Mutate: func(s *Store, tx *txn) error { // Delete only the node-level check - if err := s.deleteCheckTxn(tx, tx.Index, "node1", "serf-health", nil, ""); err != nil { + if err := s.deleteCheckTxn(tx, tx.Index, "node1", "serf-health", nil); err != nil { return err } return nil @@ -921,11 +964,11 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { }, Mutate: func(s *Store, tx *txn) error { // Delete the service-level check for the main service - if err := s.deleteCheckTxn(tx, tx.Index, "node1", "service:web", nil, ""); err != nil { + if err := s.deleteCheckTxn(tx, tx.Index, "node1", "service:web", nil); err != nil { return err } // Also delete for a proxy - if err := s.deleteCheckTxn(tx, tx.Index, "node1", "service:web_sidecar_proxy", nil, ""); err != nil { + if err := s.deleteCheckTxn(tx, tx.Index, "node1", "service:web_sidecar_proxy", nil); err != nil { return err } return nil @@ -986,10 +1029,10 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { // In one transaction the operator moves the web service and it's // sidecar from node2 back to node1 and deletes them from node2 - if err := s.deleteServiceTxn(tx, tx.Index, "node2", "web", nil, ""); err != nil { + if err := s.deleteServiceTxn(tx, tx.Index, "node2", "web", nil); err != nil { return err } - if err := s.deleteServiceTxn(tx, tx.Index, "node2", "web_sidecar_proxy", nil, ""); err != nil { + if err := s.deleteServiceTxn(tx, tx.Index, "node2", "web_sidecar_proxy", nil); err != nil { return err } @@ -1473,18 +1516,6 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { }, WantEvents: []stream.Event{ testServiceHealthEvent(t, "srv1", evNodeUnchanged), - testServiceHealthDeregistrationEvent(t, - "tgate1", - evConnectTopic, - evServiceTermingGateway("srv1"), - evTerminatingGatewayVirtualIPs("srv1"), - ), - testServiceHealthEvent(t, - "tgate1", - evConnectTopic, - evNodeUnchanged, - evServiceUnchanged, - evServiceTermingGateway("srv1")), }, }) run(t, eventsTestCase{ @@ -1513,22 +1544,10 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { testServiceRegistration(t, "tgate1", regTerminatingGateway), false) }, Mutate: func(s *Store, tx *txn) error { - return s.deleteServiceTxn(tx, tx.Index, "node1", "srv1", nil, "") + return s.deleteServiceTxn(tx, tx.Index, "node1", "srv1", nil) }, WantEvents: []stream.Event{ testServiceHealthDeregistrationEvent(t, "srv1"), - testServiceHealthDeregistrationEvent(t, - "tgate1", - evConnectTopic, - evServiceTermingGateway("srv1"), - evTerminatingGatewayVirtualIPs("srv1"), - ), - testServiceHealthEvent(t, - "tgate1", - evConnectTopic, - evNodeUnchanged, - evServiceUnchanged, - evServiceTermingGateway("srv1")), }, }) run(t, eventsTestCase{ @@ -1630,7 +1649,7 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { testServiceRegistration(t, "tgate1", regTerminatingGateway), false) }, Mutate: func(s *Store, tx *txn) error { - return s.deleteServiceTxn(tx, tx.Index, "node1", "tgate1", structs.DefaultEnterpriseMetaInDefaultPartition(), "") + return s.deleteServiceTxn(tx, tx.Index, "node1", "tgate1", structs.DefaultEnterpriseMetaInDefaultPartition()) }, WantEvents: []stream.Event{ testServiceHealthDeregistrationEvent(t, @@ -1649,92 +1668,6 @@ func TestServiceHealthEventsFromChanges(t *testing.T) { evTerminatingGatewayVirtualIPs("srv1", "srv2")), }, }) - run(t, eventsTestCase{ - Name: "terminating gateway destination service-defaults", - Setup: func(s *Store, tx *txn) error { - configEntry := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "tgate1", - Services: []structs.LinkedService{ - { - Name: "destination1", - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - }, - }, - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - } - err := ensureConfigEntryTxn(tx, tx.Index, configEntry) - if err != nil { - return err - } - return s.ensureRegistrationTxn(tx, tx.Index, false, - testServiceRegistration(t, "tgate1", regTerminatingGateway), false) - }, - Mutate: func(s *Store, tx *txn) error { - configEntryDest := &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "destination1", - Destination: &structs.DestinationConfig{Port: 9000, Address: "kafka.test.com"}, - } - return ensureConfigEntryTxn(tx, tx.Index, configEntryDest) - }, - WantEvents: []stream.Event{ - testServiceHealthDeregistrationEvent(t, - "tgate1", - evConnectTopic, - evServiceTermingGateway("destination1"), - evTerminatingGatewayVirtualIPs("destination1")), - testServiceHealthEvent(t, - "tgate1", - evConnectTopic, - evNodeUnchanged, - evServiceUnchanged, - evServiceTermingGateway("destination1"), - evTerminatingGatewayVirtualIPs("destination1"), - ), - }, - }) - - run(t, eventsTestCase{ - Name: "terminating gateway destination service-defaults wildcard", - Setup: func(s *Store, tx *txn) error { - configEntry := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "tgate1", - Services: []structs.LinkedService{ - { - Name: "*", - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - }, - }, - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - } - err := ensureConfigEntryTxn(tx, tx.Index, configEntry) - if err != nil { - return err - } - return s.ensureRegistrationTxn(tx, tx.Index, false, - testServiceRegistration(t, "tgate1", regTerminatingGateway), false) - }, - Mutate: func(s *Store, tx *txn) error { - configEntryDest := &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "destination1", - Destination: &structs.DestinationConfig{Port: 9000, Address: "kafka.test.com"}, - } - return ensureConfigEntryTxn(tx, tx.Index, configEntryDest) - }, - WantEvents: []stream.Event{ - testServiceHealthEvent(t, - "tgate1", - evConnectTopic, - evNodeUnchanged, - evServiceUnchanged, - evServiceTermingGateway("destination1"), - evTerminatingGatewayVirtualIPs("*"), - ), - }, - }) } func (tc eventsTestCase) run(t *testing.T) { diff --git a/agent/consul/state/catalog_oss.go b/agent/consul/state/catalog_oss.go index b0c0c5337688c..8a30d45892b00 100644 --- a/agent/consul/state/catalog_oss.go +++ b/agent/consul/state/catalog_oss.go @@ -15,83 +15,54 @@ import ( func withEnterpriseSchema(_ *memdb.DBSchema) {} -func serviceIndexName(name string, _ *acl.EnterpriseMeta, peerName string) string { - return peeredIndexEntryName(fmt.Sprintf("service.%s", name), peerName) +func serviceIndexName(name string, _ *acl.EnterpriseMeta) string { + return fmt.Sprintf("service.%s", name) } -func serviceKindIndexName(kind structs.ServiceKind, _ *acl.EnterpriseMeta, peerName string) string { - base := "service_kind." + kind.Normalized() - return peeredIndexEntryName(base, peerName) +func serviceKindIndexName(kind structs.ServiceKind, _ *acl.EnterpriseMeta) string { + return "service_kind." + kind.Normalized() } -func catalogUpdateNodesIndexes(tx WriteTxn, idx uint64, _ *acl.EnterpriseMeta, peerName string) error { +func catalogUpdateNodesIndexes(tx WriteTxn, idx uint64, entMeta *acl.EnterpriseMeta) error { // overall nodes index if err := indexUpdateMaxTxn(tx, idx, tableNodes); err != nil { return fmt.Errorf("failed updating index: %s", err) } - // peered index - if err := indexUpdateMaxTxn(tx, idx, peeredIndexEntryName(tableNodes, peerName)); err != nil { - return fmt.Errorf("failed updating partitioned+peered index for nodes table: %w", err) - } - return nil } -// catalogUpdateServicesIndexes upserts the max index for the entire services table with varying levels -// of granularity (no-op if `idx` is lower than what exists for that index key): -// - all services -// - all services in a specified peer (including internal) -func catalogUpdateServicesIndexes(tx WriteTxn, idx uint64, _ *acl.EnterpriseMeta, peerName string) error { +func catalogUpdateServicesIndexes(tx WriteTxn, idx uint64, _ *acl.EnterpriseMeta) error { // overall services index if err := indexUpdateMaxTxn(tx, idx, tableServices); err != nil { - return fmt.Errorf("failed updating index for services table: %w", err) - } - - // peered services index - if err := indexUpdateMaxTxn(tx, idx, peeredIndexEntryName(tableServices, peerName)); err != nil { - return fmt.Errorf("failed updating peered index for services table: %w", err) + return fmt.Errorf("failed updating index: %s", err) } return nil } -// catalogUpdateServiceKindIndexes upserts the max index for the ServiceKind with varying levels -// of granularity (no-op if `idx` is lower than what exists for that index key): -// - all services of ServiceKind -// - all services of ServiceKind in a specified peer (including internal) -func catalogUpdateServiceKindIndexes(tx WriteTxn, idx uint64, kind structs.ServiceKind, _ *acl.EnterpriseMeta, peerName string) error { - base := "service_kind." + kind.Normalized() +func catalogUpdateServiceKindIndexes(tx WriteTxn, kind structs.ServiceKind, idx uint64, _ *acl.EnterpriseMeta) error { // service-kind index - if err := indexUpdateMaxTxn(tx, idx, base); err != nil { - return fmt.Errorf("failed updating index for service kind: %w", err) + if err := indexUpdateMaxTxn(tx, idx, serviceKindIndexName(kind, nil)); err != nil { + return fmt.Errorf("failed updating index: %s", err) } - // peered index - if err := indexUpdateMaxTxn(tx, idx, peeredIndexEntryName(base, peerName)); err != nil { - return fmt.Errorf("failed updating peered index for service kind: %w", err) - } return nil } -func catalogUpdateServiceIndexes(tx WriteTxn, idx uint64, serviceName string, _ *acl.EnterpriseMeta, peerName string) error { +func catalogUpdateServiceIndexes(tx WriteTxn, serviceName string, idx uint64, _ *acl.EnterpriseMeta) error { // per-service index - if err := indexUpdateMaxTxn(tx, idx, serviceIndexName(serviceName, nil, peerName)); err != nil { + if err := indexUpdateMaxTxn(tx, idx, serviceIndexName(serviceName, nil)); err != nil { return fmt.Errorf("failed updating index: %s", err) } return nil } -func catalogUpdateServiceExtinctionIndex(tx WriteTxn, idx uint64, _ *acl.EnterpriseMeta, peerName string) error { - if err := indexUpdateMaxTxn(tx, idx, indexServiceExtinction); err != nil { - return fmt.Errorf("failed updating missing service extinction index: %w", err) +func catalogUpdateServiceExtinctionIndex(tx WriteTxn, idx uint64, _ *acl.EnterpriseMeta) error { + if err := tx.Insert(tableIndex, &IndexEntry{indexServiceExtinction, idx}); err != nil { + return fmt.Errorf("failed updating missing service extinction index: %s", err) } - // update the peer index - if err := indexUpdateMaxTxn(tx, idx, peeredIndexEntryName(indexServiceExtinction, peerName)); err != nil { - return fmt.Errorf("failed updating missing service extinction peered index: %w", err) - } - return nil } @@ -104,14 +75,14 @@ func catalogInsertNode(tx WriteTxn, node *structs.Node) error { return fmt.Errorf("failed inserting node: %s", err) } - if err := catalogUpdateNodesIndexes(tx, node.ModifyIndex, node.GetEnterpriseMeta(), node.PeerName); err != nil { + if err := catalogUpdateNodesIndexes(tx, node.ModifyIndex, node.GetEnterpriseMeta()); err != nil { return err } // Update the node's service indexes as the node information is included // in health queries and we would otherwise miss node updates in some cases // for those queries. - if err := updateAllServiceIndexesOfNode(tx, node.ModifyIndex, node.Node, node.GetEnterpriseMeta(), node.PeerName); err != nil { + if err := updateAllServiceIndexesOfNode(tx, node.ModifyIndex, node.Node, node.GetEnterpriseMeta()); err != nil { return fmt.Errorf("failed updating index: %s", err) } @@ -124,95 +95,73 @@ func catalogInsertService(tx WriteTxn, svc *structs.ServiceNode) error { return fmt.Errorf("failed inserting service: %s", err) } - if err := catalogUpdateServicesIndexes(tx, svc.ModifyIndex, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := catalogUpdateServicesIndexes(tx, svc.ModifyIndex, &svc.EnterpriseMeta); err != nil { return err } - if err := catalogUpdateServiceIndexes(tx, svc.ModifyIndex, svc.ServiceName, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceIndexes(tx, svc.ServiceName, svc.ModifyIndex, &svc.EnterpriseMeta); err != nil { return err } - if err := catalogUpdateServiceKindIndexes(tx, svc.ModifyIndex, svc.ServiceKind, &svc.EnterpriseMeta, svc.PeerName); err != nil { + if err := catalogUpdateServiceKindIndexes(tx, svc.ServiceKind, svc.ModifyIndex, &svc.EnterpriseMeta); err != nil { return err } return nil } -func catalogNodesMaxIndex(tx ReadTxn, _ *acl.EnterpriseMeta, peerName string) uint64 { - return maxIndexTxn(tx, peeredIndexEntryName(tableNodes, peerName)) +func catalogNodesMaxIndex(tx ReadTxn, entMeta *acl.EnterpriseMeta) uint64 { + return maxIndexTxn(tx, tableNodes) } -func catalogServicesMaxIndex(tx ReadTxn, _ *acl.EnterpriseMeta, peerName string) uint64 { - return maxIndexTxn(tx, peeredIndexEntryName(tableServices, peerName)) +func catalogServicesMaxIndex(tx ReadTxn, _ *acl.EnterpriseMeta) uint64 { + return maxIndexTxn(tx, tableServices) } -func catalogServiceMaxIndex(tx ReadTxn, serviceName string, _ *acl.EnterpriseMeta, peerName string) (<-chan struct{}, interface{}, error) { - return tx.FirstWatch(tableIndex, indexID, serviceIndexName(serviceName, nil, peerName)) +func catalogServiceMaxIndex(tx ReadTxn, serviceName string, _ *acl.EnterpriseMeta) (<-chan struct{}, interface{}, error) { + return tx.FirstWatch(tableIndex, "id", serviceIndexName(serviceName, nil)) } -func catalogServiceKindMaxIndex(tx ReadTxn, ws memdb.WatchSet, kind structs.ServiceKind, _ *acl.EnterpriseMeta, peerName string) uint64 { - return maxIndexWatchTxn(tx, ws, serviceKindIndexName(kind, nil, peerName)) +func catalogServiceKindMaxIndex(tx ReadTxn, ws memdb.WatchSet, kind structs.ServiceKind, entMeta *acl.EnterpriseMeta) uint64 { + return maxIndexWatchTxn(tx, ws, serviceKindIndexName(kind, nil)) } -func catalogServiceListNoWildcard(tx ReadTxn, _ *acl.EnterpriseMeta, peerName string) (memdb.ResultIterator, error) { - q := Query{ - PeerName: peerName, - } - return tx.Get(tableServices, indexID+"_prefix", q) +func catalogServiceListNoWildcard(tx ReadTxn, _ *acl.EnterpriseMeta) (memdb.ResultIterator, error) { + return tx.Get(tableServices, indexID) } -func catalogServiceListByNode(tx ReadTxn, node string, _ *acl.EnterpriseMeta, peerName string, _ bool) (memdb.ResultIterator, error) { - return tx.Get(tableServices, indexNode, Query{Value: node, PeerName: peerName}) +func catalogServiceListByNode(tx ReadTxn, node string, _ *acl.EnterpriseMeta, _ bool) (memdb.ResultIterator, error) { + return tx.Get(tableServices, indexNode, Query{Value: node}) } -func catalogServiceLastExtinctionIndex(tx ReadTxn, _ *acl.EnterpriseMeta, peerName string) (interface{}, error) { - return tx.First(tableIndex, indexID, peeredIndexEntryName(indexServiceExtinction, peerName)) +func catalogServiceLastExtinctionIndex(tx ReadTxn, _ *acl.EnterpriseMeta) (interface{}, error) { + return tx.First(tableIndex, "id", indexServiceExtinction) } -func catalogMaxIndex(tx ReadTxn, _ *acl.EnterpriseMeta, peerName string, checks bool) uint64 { +func catalogMaxIndex(tx ReadTxn, _ *acl.EnterpriseMeta, checks bool) uint64 { if checks { - return maxIndexTxn(tx, - peeredIndexEntryName(tableChecks, peerName), - peeredIndexEntryName(tableServices, peerName), - peeredIndexEntryName(tableNodes, peerName), - ) + return maxIndexTxn(tx, tableNodes, tableServices, tableChecks) } - return maxIndexTxn(tx, - peeredIndexEntryName(tableServices, peerName), - peeredIndexEntryName(tableNodes, peerName), - ) + return maxIndexTxn(tx, tableNodes, tableServices) } -func catalogMaxIndexWatch(tx ReadTxn, ws memdb.WatchSet, _ *acl.EnterpriseMeta, peerName string, checks bool) uint64 { - // TODO(peering_indexes): pipe peerName here +func catalogMaxIndexWatch(tx ReadTxn, ws memdb.WatchSet, _ *acl.EnterpriseMeta, checks bool) uint64 { if checks { - return maxIndexWatchTxn(tx, ws, - peeredIndexEntryName(tableChecks, peerName), - peeredIndexEntryName(tableServices, peerName), - peeredIndexEntryName(tableNodes, peerName), - ) + return maxIndexWatchTxn(tx, ws, tableNodes, tableServices, tableChecks) } - return maxIndexWatchTxn(tx, ws, - peeredIndexEntryName(tableServices, peerName), - peeredIndexEntryName(tableNodes, peerName), - ) + return maxIndexWatchTxn(tx, ws, tableNodes, tableServices) } -func catalogUpdateCheckIndexes(tx WriteTxn, idx uint64, _ *acl.EnterpriseMeta, peerName string) error { +func catalogUpdateCheckIndexes(tx WriteTxn, idx uint64, _ *acl.EnterpriseMeta) error { // update the universal index entry - if err := indexUpdateMaxTxn(tx, idx, tableChecks); err != nil { - return fmt.Errorf("failed updating index: %s", err) - } - - if err := indexUpdateMaxTxn(tx, idx, peeredIndexEntryName(tableChecks, peerName)); err != nil { + if err := tx.Insert(tableIndex, &IndexEntry{tableChecks, idx}); err != nil { return fmt.Errorf("failed updating index: %s", err) } return nil } -func catalogChecksMaxIndex(tx ReadTxn, _ *acl.EnterpriseMeta, peerName string) uint64 { - return maxIndexTxn(tx, peeredIndexEntryName(tableChecks, peerName)) +func catalogChecksMaxIndex(tx ReadTxn, _ *acl.EnterpriseMeta) uint64 { + return maxIndexTxn(tx, tableChecks) } func catalogListChecksByNode(tx ReadTxn, q Query) (memdb.ResultIterator, error) { @@ -225,7 +174,7 @@ func catalogInsertCheck(tx WriteTxn, chk *structs.HealthCheck, idx uint64) error return fmt.Errorf("failed inserting check: %s", err) } - if err := catalogUpdateCheckIndexes(tx, idx, &chk.EnterpriseMeta, chk.PeerName); err != nil { + if err := catalogUpdateCheckIndexes(tx, idx, &chk.EnterpriseMeta); err != nil { return err } @@ -258,10 +207,3 @@ func indexFromKindServiceName(arg interface{}) ([]byte, error) { return nil, fmt.Errorf("type must be KindServiceNameQuery or *KindServiceName: %T", arg) } } - -func updateKindServiceNamesIndex(tx WriteTxn, idx uint64, kind structs.ServiceKind, entMeta acl.EnterpriseMeta) error { - if err := indexUpdateMaxTxn(tx, idx, kindServiceNameIndexName(kind.Normalized())); err != nil { - return fmt.Errorf("failed updating %s table index: %v", tableKindServiceNames, err) - } - return nil -} diff --git a/agent/consul/state/catalog_oss_test.go b/agent/consul/state/catalog_oss_test.go index 7ed7429fc908d..9edaff833b838 100644 --- a/agent/consul/state/catalog_oss_test.go +++ b/agent/consul/state/catalog_oss_test.go @@ -19,14 +19,6 @@ func testIndexerTableChecks() map[string]indexerTestCase { CheckID: "CheckID", Status: "PASSING", } - objWPeer := &structs.HealthCheck{ - Node: "NoDe", - ServiceID: "SeRvIcE", - ServiceName: "ServiceName", - CheckID: "CheckID", - Status: "PASSING", - PeerName: "Peer1", - } return map[string]indexerTestCase{ indexID: { read: indexValue{ @@ -34,11 +26,11 @@ func testIndexerTableChecks() map[string]indexerTestCase { Node: "NoDe", CheckID: "CheckId", }, - expected: []byte("internal\x00node\x00checkid\x00"), + expected: []byte("node\x00checkid\x00"), }, write: indexValue{ source: obj, - expected: []byte("internal\x00node\x00checkid\x00"), + expected: []byte("node\x00checkid\x00"), }, prefix: []indexValue{ { @@ -47,75 +39,28 @@ func testIndexerTableChecks() map[string]indexerTestCase { }, { source: Query{Value: "nOdE"}, - expected: []byte("internal\x00node\x00"), - }, - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: NodeCheckQuery{ - Node: "NoDe", - CheckID: "CheckId", - PeerName: "Peer1", - }, - expected: []byte("peer1\x00node\x00checkid\x00"), - }, - write: indexValue{ - source: objWPeer, - expected: []byte("peer1\x00node\x00checkid\x00"), - }, - prefix: []indexValue{ - { - source: Query{Value: "nOdE", - PeerName: "Peer1"}, - expected: []byte("peer1\x00node\x00"), - }, - }, + expected: []byte("node\x00"), }, }, }, indexStatus: { read: indexValue{ source: Query{Value: "PASSING"}, - expected: []byte("internal\x00passing\x00"), + expected: []byte("passing\x00"), }, write: indexValue{ source: obj, - expected: []byte("internal\x00passing\x00"), - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: Query{Value: "PASSING", PeerName: "Peer1"}, - expected: []byte("peer1\x00passing\x00"), - }, - write: indexValue{ - source: objWPeer, - expected: []byte("peer1\x00passing\x00"), - }, - }, + expected: []byte("passing\x00"), }, }, indexService: { read: indexValue{ source: Query{Value: "ServiceName"}, - expected: []byte("internal\x00servicename\x00"), + expected: []byte("servicename\x00"), }, write: indexValue{ source: obj, - expected: []byte("internal\x00servicename\x00"), - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: Query{Value: "ServiceName", PeerName: "Peer1"}, - expected: []byte("peer1\x00servicename\x00"), - }, - write: indexValue{ - source: objWPeer, - expected: []byte("peer1\x00servicename\x00"), - }, - }, + expected: []byte("servicename\x00"), }, }, indexNodeService: { @@ -124,27 +69,11 @@ func testIndexerTableChecks() map[string]indexerTestCase { Node: "NoDe", Service: "SeRvIcE", }, - expected: []byte("internal\x00node\x00service\x00"), + expected: []byte("node\x00service\x00"), }, write: indexValue{ source: obj, - expected: []byte("internal\x00node\x00service\x00"), - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: NodeServiceQuery{ - Node: "NoDe", - PeerName: "Peer1", - Service: "SeRvIcE", - }, - expected: []byte("peer1\x00node\x00service\x00"), - }, - write: indexValue{ - source: objWPeer, - expected: []byte("peer1\x00node\x00service\x00"), - }, - }, + expected: []byte("node\x00service\x00"), }, }, indexNode: { @@ -152,26 +81,11 @@ func testIndexerTableChecks() map[string]indexerTestCase { source: Query{ Value: "NoDe", }, - expected: []byte("internal\x00node\x00"), + expected: []byte("node\x00"), }, write: indexValue{ source: obj, - expected: []byte("internal\x00node\x00"), - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: Query{ - Value: "NoDe", - PeerName: "Peer1", - }, - expected: []byte("peer1\x00node\x00"), - }, - write: indexValue{ - source: objWPeer, - expected: []byte("peer1\x00node\x00"), - }, - }, + expected: []byte("node\x00"), }, }, } @@ -272,11 +186,11 @@ func testIndexerTableNodes() map[string]indexerTestCase { indexID: { read: indexValue{ source: Query{Value: "NoDeId"}, - expected: []byte("internal\x00nodeid\x00"), + expected: []byte("nodeid\x00"), }, write: indexValue{ source: &structs.Node{Node: "NoDeId"}, - expected: []byte("internal\x00nodeid\x00"), + expected: []byte("nodeid\x00"), }, prefix: []indexValue{ { @@ -289,90 +203,38 @@ func testIndexerTableNodes() map[string]indexerTestCase { }, { source: Query{Value: "NoDeId"}, - expected: []byte("internal\x00nodeid\x00"), - }, - { - source: Query{}, - expected: []byte("internal\x00"), - }, - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: Query{Value: "NoDeId", PeerName: "Peer1"}, - expected: []byte("peer1\x00nodeid\x00"), - }, - write: indexValue{ - source: &structs.Node{Node: "NoDeId", PeerName: "Peer1"}, - expected: []byte("peer1\x00nodeid\x00"), - }, - prefix: []indexValue{ - { - source: Query{PeerName: "Peer1"}, - expected: []byte("peer1\x00"), - }, - { - source: Query{Value: "NoDeId", PeerName: "Peer1"}, - expected: []byte("peer1\x00nodeid\x00"), - }, - }, + expected: []byte("nodeid\x00"), }, }, }, indexUUID: { read: indexValue{ source: Query{Value: uuid}, - expected: append([]byte("internal\x00"), uuidBuf...), + expected: uuidBuf, }, write: indexValue{ source: &structs.Node{ ID: types.NodeID(uuid), Node: "NoDeId", }, - expected: append([]byte("internal\x00"), uuidBuf...), + expected: uuidBuf, }, prefix: []indexValue{ + { + source: (*acl.EnterpriseMeta)(nil), + expected: nil, + }, + { + source: acl.EnterpriseMeta{}, + expected: nil, + }, { // partial length source: Query{Value: uuid[:6]}, - expected: append([]byte("internal\x00"), uuidBuf[:3]...), + expected: uuidBuf[:3], }, { // full length source: Query{Value: uuid}, - expected: append([]byte("internal\x00"), uuidBuf...), - }, - { - source: Query{}, - expected: []byte("internal\x00"), - }, - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: Query{Value: uuid, PeerName: "Peer1"}, - expected: append([]byte("peer1\x00"), uuidBuf...), - }, - write: indexValue{ - source: &structs.Node{ - ID: types.NodeID(uuid), - PeerName: "Peer1", - Node: "NoDeId", - }, - expected: append([]byte("peer1\x00"), uuidBuf...), - }, - prefix: []indexValue{ - { // partial length - source: Query{Value: uuid[:6], PeerName: "Peer1"}, - expected: append([]byte("peer1\x00"), uuidBuf[:3]...), - }, - { // full length - source: Query{Value: uuid, PeerName: "Peer1"}, - expected: append([]byte("peer1\x00"), uuidBuf...), - }, - { - source: Query{PeerName: "Peer1"}, - expected: []byte("peer1\x00"), - }, - }, + expected: uuidBuf, }, }, }, @@ -382,7 +244,7 @@ func testIndexerTableNodes() map[string]indexerTestCase { Key: "KeY", Value: "VaLuE", }, - expected: []byte("internal\x00KeY\x00VaLuE\x00"), + expected: []byte("KeY\x00VaLuE\x00"), }, writeMulti: indexValueMulti{ source: &structs.Node{ @@ -393,34 +255,8 @@ func testIndexerTableNodes() map[string]indexerTestCase { }, }, expected: [][]byte{ - []byte("internal\x00MaP-kEy-1\x00mAp-VaL-1\x00"), - []byte("internal\x00mAp-KeY-2\x00MaP-vAl-2\x00"), - }, - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: KeyValueQuery{ - Key: "KeY", - Value: "VaLuE", - PeerName: "Peer1", - }, - expected: []byte("peer1\x00KeY\x00VaLuE\x00"), - }, - writeMulti: indexValueMulti{ - source: &structs.Node{ - Node: "NoDeId", - Meta: map[string]string{ - "MaP-kEy-1": "mAp-VaL-1", - "mAp-KeY-2": "MaP-vAl-2", - }, - PeerName: "Peer1", - }, - expected: [][]byte{ - []byte("peer1\x00MaP-kEy-1\x00mAp-VaL-1\x00"), - []byte("peer1\x00mAp-KeY-2\x00MaP-vAl-2\x00"), - }, - }, + []byte("MaP-kEy-1\x00mAp-VaL-1\x00"), + []byte("mAp-KeY-2\x00MaP-vAl-2\x00"), }, }, }, @@ -435,12 +271,6 @@ func testIndexerTableServices() map[string]indexerTestCase { ServiceID: "SeRviCe", ServiceName: "ServiceName", } - objWPeer := &structs.ServiceNode{ - Node: "NoDeId", - ServiceID: "SeRviCe", - ServiceName: "ServiceName", - PeerName: "Peer1", - } return map[string]indexerTestCase{ indexID: { @@ -449,11 +279,11 @@ func testIndexerTableServices() map[string]indexerTestCase { Node: "NoDeId", Service: "SeRvIcE", }, - expected: []byte("internal\x00nodeid\x00service\x00"), + expected: []byte("nodeid\x00service\x00"), }, write: indexValue{ source: obj, - expected: []byte("internal\x00nodeid\x00service\x00"), + expected: []byte("nodeid\x00service\x00"), }, prefix: []indexValue{ { @@ -464,39 +294,9 @@ func testIndexerTableServices() map[string]indexerTestCase { source: acl.EnterpriseMeta{}, expected: nil, }, - { - source: Query{}, - expected: []byte("internal\x00"), - }, { source: Query{Value: "NoDeId"}, - expected: []byte("internal\x00nodeid\x00"), - }, - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: NodeServiceQuery{ - Node: "NoDeId", - PeerName: "Peer1", - Service: "SeRvIcE", - }, - expected: []byte("peer1\x00nodeid\x00service\x00"), - }, - write: indexValue{ - source: objWPeer, - expected: []byte("peer1\x00nodeid\x00service\x00"), - }, - prefix: []indexValue{ - { - source: Query{Value: "NoDeId", PeerName: "Peer1"}, - expected: []byte("peer1\x00nodeid\x00"), - }, - { - source: Query{PeerName: "Peer1"}, - expected: []byte("peer1\x00"), - }, - }, + expected: []byte("nodeid\x00"), }, }, }, @@ -505,61 +305,34 @@ func testIndexerTableServices() map[string]indexerTestCase { source: Query{ Value: "NoDeId", }, - expected: []byte("internal\x00nodeid\x00"), + expected: []byte("nodeid\x00"), }, write: indexValue{ source: obj, - expected: []byte("internal\x00nodeid\x00"), - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: Query{ - Value: "NoDeId", - PeerName: "Peer1", - }, - expected: []byte("peer1\x00nodeid\x00"), - }, - write: indexValue{ - source: objWPeer, - expected: []byte("peer1\x00nodeid\x00"), - }, - }, + expected: []byte("nodeid\x00"), }, }, indexService: { read: indexValue{ source: Query{Value: "ServiceName"}, - expected: []byte("internal\x00servicename\x00"), + expected: []byte("servicename\x00"), }, write: indexValue{ source: obj, - expected: []byte("internal\x00servicename\x00"), - }, - extra: []indexerTestCase{ - { - read: indexValue{ - source: Query{Value: "ServiceName", PeerName: "Peer1"}, - expected: []byte("peer1\x00servicename\x00"), - }, - write: indexValue{ - source: objWPeer, - expected: []byte("peer1\x00servicename\x00"), - }, - }, + expected: []byte("servicename\x00"), }, }, indexConnect: { read: indexValue{ source: Query{Value: "ConnectName"}, - expected: []byte("internal\x00connectname\x00"), + expected: []byte("connectname\x00"), }, write: indexValue{ source: &structs.ServiceNode{ ServiceName: "ConnectName", ServiceConnect: structs.ServiceConnect{Native: true}, }, - expected: []byte("internal\x00connectname\x00"), + expected: []byte("connectname\x00"), }, extra: []indexerTestCase{ { @@ -571,20 +344,7 @@ func testIndexerTableServices() map[string]indexerTestCase { DestinationServiceName: "ConnectName", }, }, - expected: []byte("internal\x00connectname\x00"), - }, - }, - { - write: indexValue{ - source: &structs.ServiceNode{ - ServiceName: "ServiceName", - ServiceKind: structs.ServiceKindConnectProxy, - ServiceProxy: structs.ConnectProxyConfig{ - DestinationServiceName: "ConnectName", - }, - PeerName: "Peer1", - }, - expected: []byte("peer1\x00connectname\x00"), + expected: []byte("connectname\x00"), }, }, { @@ -602,32 +362,18 @@ func testIndexerTableServices() map[string]indexerTestCase { expectedIndexMissing: true, }, }, - { - read: indexValue{ - source: Query{Value: "ConnectName", PeerName: "Peer1"}, - expected: []byte("peer1\x00connectname\x00"), - }, - write: indexValue{ - source: &structs.ServiceNode{ - ServiceName: "ConnectName", - ServiceConnect: structs.ServiceConnect{Native: true}, - PeerName: "Peer1", - }, - expected: []byte("peer1\x00connectname\x00"), - }, - }, }, }, indexKind: { read: indexValue{ source: Query{Value: "connect-proxy"}, - expected: []byte("internal\x00connect-proxy\x00"), + expected: []byte("connect-proxy\x00"), }, write: indexValue{ source: &structs.ServiceNode{ ServiceKind: structs.ServiceKindConnectProxy, }, - expected: []byte("internal\x00connect-proxy\x00"), + expected: []byte("connect-proxy\x00"), }, extra: []indexerTestCase{ { @@ -636,30 +382,7 @@ func testIndexerTableServices() map[string]indexerTestCase { ServiceName: "ServiceName", ServiceKind: structs.ServiceKindTypical, }, - expected: []byte("internal\x00\x00"), - }, - }, - { - write: indexValue{ - source: &structs.ServiceNode{ - ServiceName: "ServiceName", - ServiceKind: structs.ServiceKindTypical, - PeerName: "Peer1", - }, - expected: []byte("peer1\x00\x00"), - }, - }, - { - read: indexValue{ - source: Query{Value: "connect-proxy", PeerName: "Peer1"}, - expected: []byte("peer1\x00connect-proxy\x00"), - }, - write: indexValue{ - source: &structs.ServiceNode{ - ServiceKind: structs.ServiceKindConnectProxy, - PeerName: "Peer1", - }, - expected: []byte("peer1\x00connect-proxy\x00"), + expected: []byte("\x00"), }, }, }, @@ -717,7 +440,7 @@ func testIndexerTableKindServiceNames() map[string]indexerTestCase { }, indexKind: { read: indexValue{ - source: Query{Value: string(structs.ServiceKindConnectProxy)}, + source: structs.ServiceKindConnectProxy, expected: []byte("connect-proxy\x00"), }, write: indexValue{ diff --git a/agent/consul/state/catalog_schema.go b/agent/consul/state/catalog_schema.go index 9a2fbecadbb38..b2d0907dc870b 100644 --- a/agent/consul/state/catalog_schema.go +++ b/agent/consul/state/catalog_schema.go @@ -48,9 +48,9 @@ func nodesTableSchema() *memdb.TableSchema { AllowMissing: false, Unique: true, Indexer: indexerSingleWithPrefix{ - readIndex: indexWithPeerName(indexFromQuery), - writeIndex: indexWithPeerName(indexFromNode), - prefixIndex: prefixIndexFromQueryWithPeer, + readIndex: indexFromQuery, + writeIndex: indexFromNode, + prefixIndex: prefixIndexFromQueryNoNamespace, }, }, indexUUID: { @@ -58,9 +58,9 @@ func nodesTableSchema() *memdb.TableSchema { AllowMissing: true, Unique: true, Indexer: indexerSingleWithPrefix{ - readIndex: indexWithPeerName(indexFromUUIDQuery), - writeIndex: indexWithPeerName(indexIDFromNode), - prefixIndex: prefixIndexFromUUIDWithPeerQuery, + readIndex: indexFromUUIDQuery, + writeIndex: indexIDFromNode, + prefixIndex: prefixIndexFromUUIDQuery, }, }, indexMeta: { @@ -68,8 +68,8 @@ func nodesTableSchema() *memdb.TableSchema { AllowMissing: true, Unique: false, Indexer: indexerMulti{ - readIndex: indexWithPeerName(indexFromKeyValueQuery), - writeIndexMulti: multiIndexWithPeerName(indexMetaFromNode), + readIndex: indexFromKeyValueQuery, + writeIndexMulti: indexMetaFromNode, }, }, }, @@ -146,9 +146,9 @@ func servicesTableSchema() *memdb.TableSchema { AllowMissing: false, Unique: true, Indexer: indexerSingleWithPrefix{ - readIndex: indexWithPeerName(indexFromNodeServiceQuery), - writeIndex: indexWithPeerName(indexFromServiceNode), - prefixIndex: prefixIndexFromQueryWithPeer, + readIndex: indexFromNodeServiceQuery, + writeIndex: indexFromServiceNode, + prefixIndex: prefixIndexFromQuery, }, }, indexNode: { @@ -156,8 +156,8 @@ func servicesTableSchema() *memdb.TableSchema { AllowMissing: false, Unique: false, Indexer: indexerSingle{ - readIndex: indexWithPeerName(indexFromQuery), - writeIndex: indexWithPeerName(indexFromNodeIdentity), + readIndex: indexFromQuery, + writeIndex: indexFromNodeIdentity, }, }, indexService: { @@ -165,8 +165,8 @@ func servicesTableSchema() *memdb.TableSchema { AllowMissing: true, Unique: false, Indexer: indexerSingle{ - readIndex: indexWithPeerName(indexFromQuery), - writeIndex: indexWithPeerName(indexServiceNameFromServiceNode), + readIndex: indexFromQuery, + writeIndex: indexServiceNameFromServiceNode, }, }, indexConnect: { @@ -174,8 +174,8 @@ func servicesTableSchema() *memdb.TableSchema { AllowMissing: true, Unique: false, Indexer: indexerSingle{ - readIndex: indexWithPeerName(indexFromQuery), - writeIndex: indexWithPeerName(indexConnectNameFromServiceNode), + readIndex: indexFromQuery, + writeIndex: indexConnectNameFromServiceNode, }, }, indexKind: { @@ -183,8 +183,8 @@ func servicesTableSchema() *memdb.TableSchema { AllowMissing: false, Unique: false, Indexer: indexerSingle{ - readIndex: indexWithPeerName(indexFromQuery), - writeIndex: indexWithPeerName(indexKindFromServiceNode), + readIndex: indexFromQuery, + writeIndex: indexKindFromServiceNode, }, }, }, @@ -295,61 +295,6 @@ func indexKindFromServiceNode(raw interface{}) ([]byte, error) { return b.Bytes(), nil } -// indexWithPeerName adds peer name to the index. -func indexWithPeerName( - fn func(interface{}) ([]byte, error), -) func(interface{}) ([]byte, error) { - return func(raw interface{}) ([]byte, error) { - v, err := fn(raw) - if err != nil { - return nil, err - } - - n, ok := raw.(peerIndexable) - if !ok { - return nil, fmt.Errorf("type must be peerIndexable: %T", raw) - } - - peername := n.PeerOrEmpty() - if peername == "" { - peername = structs.LocalPeerKeyword - } - b := newIndexBuilder(len(v) + len(peername) + 1) - b.String(strings.ToLower(peername)) - b.Raw(v) - return b.Bytes(), nil - } -} - -// multiIndexWithPeerName adds peer name to multiple indices, and returns multiple indices. -func multiIndexWithPeerName( - fn func(interface{}) ([][]byte, error), -) func(interface{}) ([][]byte, error) { - return func(raw interface{}) ([][]byte, error) { - results, err := fn(raw) - if err != nil { - return nil, err - } - - n, ok := raw.(peerIndexable) - if !ok { - return nil, fmt.Errorf("type must be peerIndexable: %T", raw) - } - - peername := n.PeerOrEmpty() - if peername == "" { - peername = structs.LocalPeerKeyword - } - for i, v := range results { - b := newIndexBuilder(len(v) + len(peername) + 1) - b.String(strings.ToLower(peername)) - b.Raw(v) - results[i] = b.Bytes() - } - return results, nil - } -} - // checksTableSchema returns a new table schema used for storing and indexing // health check information. Health checks have a number of different attributes // we want to filter by, so this table is a bit more complex. @@ -362,9 +307,9 @@ func checksTableSchema() *memdb.TableSchema { AllowMissing: false, Unique: true, Indexer: indexerSingleWithPrefix{ - readIndex: indexWithPeerName(indexFromNodeCheckQuery), - writeIndex: indexWithPeerName(indexFromHealthCheck), - prefixIndex: prefixIndexFromQueryWithPeer, + readIndex: indexFromNodeCheckQuery, + writeIndex: indexFromHealthCheck, + prefixIndex: prefixIndexFromQuery, }, }, indexStatus: { @@ -372,8 +317,8 @@ func checksTableSchema() *memdb.TableSchema { AllowMissing: false, Unique: false, Indexer: indexerSingle{ - readIndex: indexWithPeerName(indexFromQuery), - writeIndex: indexWithPeerName(indexStatusFromHealthCheck), + readIndex: indexFromQuery, + writeIndex: indexStatusFromHealthCheck, }, }, indexService: { @@ -381,8 +326,8 @@ func checksTableSchema() *memdb.TableSchema { AllowMissing: true, Unique: false, Indexer: indexerSingle{ - readIndex: indexWithPeerName(indexFromQuery), - writeIndex: indexWithPeerName(indexServiceNameFromHealthCheck), + readIndex: indexFromQuery, + writeIndex: indexServiceNameFromHealthCheck, }, }, indexNode: { @@ -390,8 +335,8 @@ func checksTableSchema() *memdb.TableSchema { AllowMissing: true, Unique: false, Indexer: indexerSingle{ - readIndex: indexWithPeerName(indexFromQuery), - writeIndex: indexWithPeerName(indexFromNodeIdentity), + readIndex: indexFromQuery, + writeIndex: indexFromNodeIdentity, }, }, indexNodeService: { @@ -399,8 +344,8 @@ func checksTableSchema() *memdb.TableSchema { AllowMissing: true, Unique: false, Indexer: indexerSingle{ - readIndex: indexWithPeerName(indexFromNodeServiceQuery), - writeIndex: indexWithPeerName(indexNodeServiceFromHealthCheck), + readIndex: indexFromNodeServiceQuery, + writeIndex: indexNodeServiceFromHealthCheck, }, }, }, @@ -643,20 +588,11 @@ type upstreamDownstream struct { // NodeCheckQuery is used to query the ID index of the checks table. type NodeCheckQuery struct { - Node string - CheckID string - PeerName string + Node string + CheckID string acl.EnterpriseMeta } -type peerIndexable interface { - PeerOrEmpty() string -} - -func (q NodeCheckQuery) PeerOrEmpty() string { - return q.PeerName -} - // NamespaceOrDefault exists because structs.EnterpriseMeta uses a pointer // receiver for this method. Remove once that is fixed. func (q NodeCheckQuery) NamespaceOrDefault() string { @@ -744,16 +680,7 @@ type KindServiceName struct { structs.RaftIndex } -func (n *KindServiceName) PartitionOrDefault() string { - return n.Service.PartitionOrDefault() -} - -func (n *KindServiceName) NamespaceOrDefault() string { - return n.Service.NamespaceOrDefault() -} - func kindServiceNameTableSchema() *memdb.TableSchema { - // TODO(peering): make this peer-aware return &memdb.TableSchema{ Name: tableKindServiceNames, Indexes: map[string]*memdb.IndexSchema{ @@ -766,8 +693,8 @@ func kindServiceNameTableSchema() *memdb.TableSchema { writeIndex: indexFromKindServiceName, }, }, - indexKind: { - Name: indexKind, + indexKindOnly: { + Name: indexKindOnly, AllowMissing: false, Unique: false, Indexer: indexerSingle{ @@ -805,20 +732,20 @@ func indexFromKindServiceNameKindOnly(raw interface{}) ([]byte, error) { b.String(strings.ToLower(string(x.Kind))) return b.Bytes(), nil - case Query: + case structs.ServiceKind: var b indexBuilder - b.String(strings.ToLower(x.Value)) + b.String(strings.ToLower(string(x))) return b.Bytes(), nil default: - return nil, fmt.Errorf("type must be *KindServiceName or Query: %T", raw) + return nil, fmt.Errorf("type must be *KindServiceName or structs.ServiceKind: %T", raw) } } -func kindServiceNamesMaxIndex(tx ReadTxn, ws memdb.WatchSet, kind string) uint64 { +func kindServiceNamesMaxIndex(tx ReadTxn, ws memdb.WatchSet, kind structs.ServiceKind) uint64 { return maxIndexWatchTxn(tx, ws, kindServiceNameIndexName(kind)) } -func kindServiceNameIndexName(kind string) string { - return "kind_service_names." + kind +func kindServiceNameIndexName(kind structs.ServiceKind) string { + return "kind_service_names." + kind.Normalized() } diff --git a/agent/consul/state/catalog_test.go b/agent/consul/state/catalog_test.go index b48e0a04dc93e..c9860a9dfb9b4 100644 --- a/agent/consul/state/catalog_test.go +++ b/agent/consul/state/catalog_test.go @@ -1,14 +1,12 @@ package state import ( - "context" crand "crypto/rand" "fmt" "reflect" "sort" "strings" "testing" - "time" "github.com/hashicorp/go-memdb" uuid "github.com/hashicorp/go-uuid" @@ -18,7 +16,6 @@ import ( "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/lib/stringslice" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/types" ) @@ -33,21 +30,21 @@ func makeRandomNodeID(t *testing.T) types.NodeID { func TestStateStore_GetNodeID(t *testing.T) { s := testStateStore(t) - _, out, err := s.GetNodeID(types.NodeID("wrongId"), nil, "") + _, out, err := s.GetNodeID(types.NodeID("wrongId"), nil) if err == nil || out != nil || !strings.Contains(err.Error(), "node lookup by ID failed: index error: UUID (without hyphens) must be") { t.Errorf("want an error, nil value, err:=%q ; out:=%q", err.Error(), out) } - _, out, err = s.GetNodeID(types.NodeID("0123456789abcdefghijklmnopqrstuvwxyz"), nil, "") + _, out, err = s.GetNodeID(types.NodeID("0123456789abcdefghijklmnopqrstuvwxyz"), nil) if err == nil || out != nil || !strings.Contains(err.Error(), "node lookup by ID failed: index error: invalid UUID") { t.Errorf("want an error, nil value, err:=%q ; out:=%q", err, out) } - _, out, err = s.GetNodeID(types.NodeID("00a916bc-a357-4a19-b886-59419fcee50Z"), nil, "") + _, out, err = s.GetNodeID(types.NodeID("00a916bc-a357-4a19-b886-59419fcee50Z"), nil) if err == nil || out != nil || !strings.Contains(err.Error(), "node lookup by ID failed: index error: invalid UUID") { t.Errorf("want an error, nil value, err:=%q ; out:=%q", err, out) } - _, out, err = s.GetNodeID(types.NodeID("00a916bc-a357-4a19-b886-59419fcee506"), nil, "") + _, out, err = s.GetNodeID(types.NodeID("00a916bc-a357-4a19-b886-59419fcee506"), nil) if err != nil || out != nil { t.Errorf("do not want any error nor returned value, err:=%q ; out:=%q", err, out) } @@ -60,14 +57,14 @@ func TestStateStore_GetNodeID(t *testing.T) { } require.NoError(t, s.EnsureRegistration(1, req)) - _, out, err = s.GetNodeID(nodeID, nil, "") + _, out, err = s.GetNodeID(nodeID, nil) require.NoError(t, err) if out == nil || out.ID != nodeID { t.Fatalf("out should not be nil and contain nodeId, but was:=%#v", out) } // Case insensitive lookup should work as well - _, out, err = s.GetNodeID(types.NodeID("00a916bC-a357-4a19-b886-59419fceeAAA"), nil, "") + _, out, err = s.GetNodeID(types.NodeID("00a916bC-a357-4a19-b886-59419fceeAAA"), nil) require.NoError(t, err) if out == nil || out.ID != nodeID { t.Fatalf("out should not be nil and contain nodeId, but was:=%#v", out) @@ -75,59 +72,30 @@ func TestStateStore_GetNodeID(t *testing.T) { } func TestStateStore_GetNode(t *testing.T) { - assertExists := func(t *testing.T, s *Store, node, peerName string, expectIndex uint64) { - idx, out, err := s.GetNode(node, nil, peerName) - require.NoError(t, err) - require.NotNil(t, out) - require.Equal(t, expectIndex, idx) - require.Equal(t, strings.ToLower(node), out.Node) - require.Equal(t, strings.ToLower(peerName), out.PeerName) - } - assertNotExist := func(t *testing.T, s *Store, node, peerName string) { - idx, out, err := s.GetNode(node, nil, peerName) - require.NoError(t, err) - require.Nil(t, out) - require.Equal(t, uint64(0), idx) - } - - t.Run("default peer", func(t *testing.T) { - s := testStateStore(t) - - // initially does not exist - assertNotExist(t, s, "node1", "") - - // Create it - testRegisterNode(t, s, 1, "node1") - - // now exists - assertExists(t, s, "node1", "", 1) - - // Case insensitive lookup should work as well - assertExists(t, s, "NoDe1", "", 1) - }) - - t.Run("random peer", func(t *testing.T) { - s := testStateStore(t) + s := testStateStore(t) - // initially do not exist - assertNotExist(t, s, "node1", "") - assertNotExist(t, s, "node1", "my-peer") + // initially does not exist + idx, out, err := s.GetNode("node1", nil) + require.NoError(t, err) + require.Nil(t, out) + require.Equal(t, uint64(0), idx) - // Create one with no peer, and one with a peer to test a peer-name crossing issue. - testRegisterNode(t, s, 1, "node1") - testRegisterNodeOpts(t, s, 2, "node1", func(n *structs.Node) error { - n.PeerName = "my-peer" - return nil - }) + // Create it + testRegisterNode(t, s, 1, "node1") - // now exist - assertExists(t, s, "node1", "", 1) - assertExists(t, s, "node1", "my-peer", 2) + // now exists + idx, out, err = s.GetNode("node1", nil) + require.NoError(t, err) + require.NotNil(t, out) + require.Equal(t, uint64(1), idx) + require.Equal(t, "node1", out.Node) - // Case insensitive lookup should work as well - assertExists(t, s, "NoDe1", "", 1) - assertExists(t, s, "NoDe1", "my-peer", 2) - }) + // Case insensitive lookup should work as well + idx, out, err = s.GetNode("NoDe1", nil) + require.NoError(t, err) + require.NotNil(t, out) + require.Equal(t, uint64(1), idx) + require.Equal(t, "node1", out.Node) } func TestStateStore_ensureNoNodeWithSimilarNameTxn(t *testing.T) { @@ -201,596 +169,396 @@ func TestStateStore_ensureNoNodeWithSimilarNameTxn(t *testing.T) { func TestStateStore_EnsureRegistration(t *testing.T) { t.Parallel() + s := testStateStore(t) - run := func(t *testing.T, peerName string) { - s := testStateStore(t) - // Start with just a node. - nodeID := makeRandomNodeID(t) - - makeReq := func(f func(*structs.RegisterRequest)) *structs.RegisterRequest { - req := &structs.RegisterRequest{ - ID: nodeID, - Node: "node1", - Address: "1.2.3.4", - TaggedAddresses: map[string]string{"hello": "world"}, - NodeMeta: map[string]string{"somekey": "somevalue"}, - PeerName: peerName, - } - if f != nil { - f(req) - } - return req - } - - verifyNode := func(t *testing.T) { - node := &structs.Node{ - ID: nodeID, - Node: "node1", - Address: "1.2.3.4", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - TaggedAddresses: map[string]string{"hello": "world"}, - Meta: map[string]string{"somekey": "somevalue"}, - RaftIndex: structs.RaftIndex{CreateIndex: 1, ModifyIndex: 1}, - PeerName: peerName, - } - - _, out, err := s.GetNode("node1", nil, peerName) - require.NoError(t, err) - require.Equal(t, node, out) + // Start with just a node. + nodeID := makeRandomNodeID(t) + req := &structs.RegisterRequest{ + ID: nodeID, + Node: "node1", + Address: "1.2.3.4", + TaggedAddresses: map[string]string{"hello": "world"}, + NodeMeta: map[string]string{"somekey": "somevalue"}, + } + if err := s.EnsureRegistration(1, req); err != nil { + t.Fatalf("err: %s", err) + } - _, out2, err := s.GetNodeID(nodeID, nil, peerName) - require.NoError(t, err) - require.NotNil(t, out2) - require.Equal(t, out, out2) + // Retrieve the node and verify its contents. + verifyNode := func() { + node := &structs.Node{ + ID: nodeID, + Node: "node1", + Address: "1.2.3.4", + Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), + TaggedAddresses: map[string]string{"hello": "world"}, + Meta: map[string]string{"somekey": "somevalue"}, + RaftIndex: structs.RaftIndex{CreateIndex: 1, ModifyIndex: 1}, } - verifyService := func(t *testing.T) { - svcmap := map[string]*structs.NodeService{ - "redis1": { - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Tags: []string{"primary"}, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - RaftIndex: structs.RaftIndex{CreateIndex: 2, ModifyIndex: 2}, - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - PeerName: peerName, - }, - } - - idx, out, err := s.NodeServices(nil, "node1", nil, peerName) - require.NoError(t, err) - require.Equal(t, uint64(2), idx) - require.Equal(t, svcmap, out.Services) - - idx, r, err := s.NodeService(nil, "node1", "redis1", nil, peerName) - require.NoError(t, err) - require.Equal(t, uint64(2), idx) - require.Equal(t, svcmap["redis1"], r) - - // lookup service by node name - idx, sn, err := s.ServiceNode("", "node1", "redis1", nil, peerName) - require.NoError(t, err) - require.Equal(t, uint64(2), idx) - require.Equal(t, svcmap["redis1"].ToServiceNode("node1"), sn) - - // lookup service by node ID - idx, sn, err = s.ServiceNode(string(nodeID), "", "redis1", nil, peerName) - require.NoError(t, err) - require.Equal(t, uint64(2), idx) - require.Equal(t, svcmap["redis1"].ToServiceNode("node1"), sn) - - // lookup service by invalid node - _, _, err = s.ServiceNode("", "invalid-node", "redis1", nil, peerName) - testutil.RequireErrorContains(t, err, "node not found") - // lookup service without node name or ID - _, _, err = s.ServiceNode("", "", "redis1", nil, peerName) - testutil.RequireErrorContains(t, err, "Node ID or name required to lookup the service") + _, out, err := s.GetNode("node1", nil) + if err != nil { + t.Fatalf("got err %s want nil", err) } - verifyCheck := func(t *testing.T) { - checks := structs.HealthChecks{ - &structs.HealthCheck{ - Node: "node1", - CheckID: "check1", - Name: "check", - Status: "critical", - RaftIndex: structs.RaftIndex{CreateIndex: 3, ModifyIndex: 3}, - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - PeerName: peerName, - }, - } - - idx, out, err := s.NodeChecks(nil, "node1", nil, peerName) - require.NoError(t, err) - require.Equal(t, uint64(3), idx) - require.Equal(t, checks, out) + require.Equal(t, node, out) - idx, c, err := s.NodeCheck("node1", "check1", nil, peerName) - require.NoError(t, err) - require.Equal(t, uint64(3), idx) - require.Equal(t, checks[0], c) + _, out2, err := s.GetNodeID(nodeID, nil) + if err != nil { + t.Fatalf("got err %s want nil", err) } - verifyChecks := func(t *testing.T) { - checks := structs.HealthChecks{ - &structs.HealthCheck{ - Node: "node1", - CheckID: "check1", - Name: "check", - Status: "critical", - RaftIndex: structs.RaftIndex{CreateIndex: 3, ModifyIndex: 3}, - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - PeerName: peerName, - }, - &structs.HealthCheck{ - Node: "node1", - CheckID: "check2", - Name: "check", - Status: "critical", - ServiceID: "redis1", - ServiceName: "redis", - ServiceTags: []string{"primary"}, - RaftIndex: structs.RaftIndex{CreateIndex: 4, ModifyIndex: 4}, - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - PeerName: peerName, - }, - } - - idx, out, err := s.NodeChecks(nil, "node1", nil, peerName) - require.NoError(t, err) - require.Equal(t, uint64(4), idx) - require.Equal(t, checks, out) + if out2 == nil { + t.Fatalf("out2 should not be nil") } + require.Equal(t, out, out2) + } + verifyNode() - testutil.RunStep(t, "add a node", func(t *testing.T) { - req := makeReq(nil) - require.NoError(t, s.EnsureRegistration(1, req)) - - // Retrieve the node and verify its contents. - verifyNode(t) - }) - - testutil.RunStep(t, "add a node with invalid meta", func(t *testing.T) { - // Add in a invalid service definition with too long Key value for Meta - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Meta: map[string]string{strings.Repeat("a", 129): "somevalue"}, - Tags: []string{"primary"}, - PeerName: peerName, - } - }) - testutil.RequireErrorContains(t, s.EnsureRegistration(9, req), `Key is too long (limit: 128 characters)`) - }) - - // Add in a service definition. - testutil.RunStep(t, "add a service definition", func(t *testing.T) { - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Tags: []string{"primary"}, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - PeerName: peerName, - } - }) - require.NoError(t, s.EnsureRegistration(2, req)) + // Add in a invalid service definition with too long Key value for Meta + req.Service = &structs.NodeService{ + ID: "redis1", + Service: "redis", + Address: "1.1.1.1", + Port: 8080, + Meta: map[string]string{strings.Repeat("a", 129): "somevalue"}, + Tags: []string{"primary"}, + } + if err := s.EnsureRegistration(9, req); err == nil { + t.Fatalf("Service should not have been registered since Meta is invalid") + } - // Verify that the service got registered. - verifyNode(t) - verifyService(t) - }) + // Add in a service definition. + req.Service = &structs.NodeService{ + ID: "redis1", + Service: "redis", + Address: "1.1.1.1", + Port: 8080, + Tags: []string{"primary"}, + Weights: &structs.Weights{Passing: 1, Warning: 1}, + } + if err := s.EnsureRegistration(2, req); err != nil { + t.Fatalf("err: %s", err) + } - // Add in a top-level check. - testutil.RunStep(t, "add a top level check", func(t *testing.T) { - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Tags: []string{"primary"}, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - PeerName: peerName, - } - req.Check = &structs.HealthCheck{ - Node: "node1", - CheckID: "check1", - Name: "check", - PeerName: peerName, - } - }) - require.NoError(t, s.EnsureRegistration(3, req)) + // Verify that the service got registered. + verifyService := func() { + svcmap := map[string]*structs.NodeService{ + "redis1": { + ID: "redis1", + Service: "redis", + Address: "1.1.1.1", + Port: 8080, + Tags: []string{"primary"}, + Weights: &structs.Weights{Passing: 1, Warning: 1}, + RaftIndex: structs.RaftIndex{CreateIndex: 2, ModifyIndex: 2}, + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + } - // Verify that the check got registered. - verifyNode(t) - verifyService(t) - verifyCheck(t) - }) + idx, out, err := s.NodeServices(nil, "node1", nil) + if gotidx, wantidx := idx, uint64(2); err != nil || gotidx != wantidx { + t.Fatalf("got err, idx: %s, %d want nil, %d", err, gotidx, wantidx) + } + require.Equal(t, svcmap, out.Services) - // Add a service check which should populate the ServiceName - // and ServiceTags fields in the response. - testutil.RunStep(t, "add a service check", func(t *testing.T) { - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Tags: []string{"primary"}, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - PeerName: peerName, - } - req.Check = &structs.HealthCheck{ - Node: "node1", - CheckID: "check1", - Name: "check", - PeerName: peerName, - } - req.Checks = structs.HealthChecks{ - &structs.HealthCheck{ - Node: "node1", - CheckID: "check2", - Name: "check", - ServiceID: "redis1", - PeerName: peerName, - }, - } - }) - require.NoError(t, s.EnsureRegistration(4, req)) + idx, r, err := s.NodeService("node1", "redis1", nil) + if gotidx, wantidx := idx, uint64(2); err != nil || gotidx != wantidx { + t.Fatalf("got err, idx: %s, %d want nil, %d", err, gotidx, wantidx) + } + require.Equal(t, svcmap["redis1"], r) + } + verifyNode() + verifyService() - // Verify that the additional check got registered. - verifyNode(t) - verifyService(t) - verifyChecks(t) - }) + // Add in a top-level check. + req.Check = &structs.HealthCheck{ + Node: "node1", + CheckID: "check1", + Name: "check", + } + if err := s.EnsureRegistration(3, req); err != nil { + t.Fatalf("err: %s", err) + } - // Try to register a check for some other node (top-level check). - testutil.RunStep(t, "try to register a check for some other node via the top level check", func(t *testing.T) { - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Tags: []string{"primary"}, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - PeerName: peerName, - } - req.Check = &structs.HealthCheck{ - Node: "nope", - CheckID: "check1", - Name: "check", - PeerName: peerName, - } - req.Checks = structs.HealthChecks{ - &structs.HealthCheck{ - Node: "node1", - CheckID: "check2", - Name: "check", - ServiceID: "redis1", - PeerName: peerName, - }, - } - }) - testutil.RequireErrorContains(t, s.EnsureRegistration(5, req), `does not match node`) - verifyNode(t) - verifyService(t) - verifyChecks(t) - }) + // Verify that the check got registered. + verifyCheck := func() { + checks := structs.HealthChecks{ + &structs.HealthCheck{ + Node: "node1", + CheckID: "check1", + Name: "check", + Status: "critical", + RaftIndex: structs.RaftIndex{CreateIndex: 3, ModifyIndex: 3}, + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + } - testutil.RunStep(t, "try to register a check for some other node via the checks array", func(t *testing.T) { - // Try to register a check for some other node (checks array). - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Tags: []string{"primary"}, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - PeerName: peerName, - } - req.Checks = structs.HealthChecks{ - &structs.HealthCheck{ - Node: "nope", - CheckID: "check2", - Name: "check", - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - PeerName: peerName, - }, - } - }) - testutil.RequireErrorContains(t, s.EnsureRegistration(6, req), `does not match node`) - verifyNode(t) - verifyService(t) - verifyChecks(t) - }) + idx, out, err := s.NodeChecks(nil, "node1", nil) + if gotidx, wantidx := idx, uint64(3); err != nil || gotidx != wantidx { + t.Fatalf("got err, idx: %s, %d want nil, %d", err, gotidx, wantidx) + } + require.Equal(t, checks, out) - testutil.RunStep(t, "NodeService with WatchSet", func(t *testing.T) { - ws := memdb.NewWatchSet() + idx, c, err := s.NodeCheck("node1", "check1", nil) + if gotidx, wantidx := idx, uint64(3); err != nil || gotidx != wantidx { + t.Fatalf("got err, idx: %s, %d want nil, %d", err, gotidx, wantidx) + } + require.Equal(t, checks[0], c) + } + verifyNode() + verifyService() + verifyCheck() - _, _, err := s.NodeService(ws, "node1", "watch1", nil, peerName) - require.NoError(t, err) + // Add a service check which should populate the ServiceName + // and ServiceTags fields in the response. + req.Checks = structs.HealthChecks{ + &structs.HealthCheck{ + Node: "node1", + CheckID: "check2", + Name: "check", + ServiceID: "redis1", + }, + } + if err := s.EnsureRegistration(4, req); err != nil { + t.Fatalf("err: %s", err) + } - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "watch1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Tags: []string{"primary"}, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - PeerName: peerName, - } - }) - require.NoError(t, s.EnsureRegistration(7, req)) + // Verify that the additional check got registered. + verifyNode() + verifyService() + verifyChecks := func() { + checks := structs.HealthChecks{ + &structs.HealthCheck{ + Node: "node1", + CheckID: "check1", + Name: "check", + Status: "critical", + RaftIndex: structs.RaftIndex{CreateIndex: 3, ModifyIndex: 3}, + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + &structs.HealthCheck{ + Node: "node1", + CheckID: "check2", + Name: "check", + Status: "critical", + ServiceID: "redis1", + ServiceName: "redis", + ServiceTags: []string{"primary"}, + RaftIndex: structs.RaftIndex{CreateIndex: 4, ModifyIndex: 4}, + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + } - select { - case <-ws.WatchCh(context.Background()): - case <-time.After(100 * time.Millisecond): - t.Fatal("WatchSet did not trigger after service registration") - } - }) + idx, out, err := s.NodeChecks(nil, "node1", nil) + if gotidx, wantidx := idx, uint64(4); err != nil || gotidx != wantidx { + t.Fatalf("got err, idx: %s, %d want nil, %d", err, gotidx, wantidx) + } + require.Equal(t, checks, out) } + verifyChecks() - t.Run("default peer", func(t *testing.T) { - run(t, structs.DefaultPeerKeyword) - }) + // Try to register a check for some other node (top-level check). + req.Check = &structs.HealthCheck{ + Node: "nope", + CheckID: "check1", + Name: "check", + } + err := s.EnsureRegistration(5, req) + if err == nil || !strings.Contains(err.Error(), "does not match node") { + t.Fatalf("err: %s", err) + } + verifyNode() + verifyService() + verifyChecks() - t.Run("random peer", func(t *testing.T) { - run(t, "my-peer") - }) + // Try to register a check for some other node (checks array). + req.Check = nil + req.Checks = structs.HealthChecks{ + &structs.HealthCheck{ + Node: "nope", + CheckID: "check2", + Name: "check", + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + } + err = s.EnsureRegistration(6, req) + if err == nil || !strings.Contains(err.Error(), "does not match node") { + t.Fatalf("err: %s", err) + } + verifyNode() + verifyService() + verifyChecks() } func TestStateStore_EnsureRegistration_Restore(t *testing.T) { - const ( - nodeID = "099eac9d-8e3e-464b-b3f5-8d7dcfcf9f71" - nodeName = "node1" - ) - - run := func(t *testing.T, peerName string) { - verifyNode := func(t *testing.T, s *Store, nodeLookup string) { - idx, out, err := s.GetNode(nodeLookup, nil, peerName) - require.NoError(t, err) - byID := false - if out == nil { - _, out, err = s.GetNodeID(types.NodeID(nodeLookup), nil, peerName) - require.NoError(t, err) - byID = true - } + s := testStateStore(t) - require.NotNil(t, out) - require.Equal(t, uint64(1), idx) + // Start with just a node. + req := &structs.RegisterRequest{ + ID: makeRandomNodeID(t), + Node: "node1", + Address: "1.2.3.4", + RaftIndex: structs.RaftIndex{ + CreateIndex: 1, + ModifyIndex: 1, + }, + } + nodeID := string(req.ID) + nodeName := req.Node + restore := s.Restore() + if err := restore.Registration(1, req); err != nil { + t.Fatalf("err: %s", err) + } + restore.Commit() - require.Equal(t, "1.2.3.4", out.Address) - if byID { - require.Equal(t, nodeLookup, string(out.ID)) - } else { - require.Equal(t, nodeLookup, out.Node) + // Retrieve the node and verify its contents. + verifyNode := func(nodeLookup string) { + _, out, err := s.GetNode(nodeLookup, nil) + if err != nil { + t.Fatalf("err: %s", err) + } + if out == nil { + _, out, err = s.GetNodeID(types.NodeID(nodeLookup), nil) + if err != nil { + t.Fatalf("err: %s", err) } - require.Equal(t, peerName, out.PeerName) - require.Equal(t, uint64(1), out.CreateIndex) - require.Equal(t, uint64(1), out.ModifyIndex) } - verifyService := func(t *testing.T, s *Store, nodeLookup string) { - idx, out, err := s.NodeServices(nil, nodeLookup, nil, peerName) - require.NoError(t, err) - require.Len(t, out.Services, 1) - require.Equal(t, uint64(2), idx) - svc := out.Services["redis1"] - - require.Equal(t, "redis1", svc.ID) - require.Equal(t, "redis", svc.Service) - require.Equal(t, peerName, svc.PeerName) - require.Equal(t, "1.1.1.1", svc.Address) - require.Equal(t, 8080, svc.Port) - require.Equal(t, uint64(2), svc.CreateIndex) - require.Equal(t, uint64(2), svc.ModifyIndex) + if out == nil || out.Address != "1.2.3.4" || + !(out.Node == nodeLookup || string(out.ID) == nodeLookup) || + out.CreateIndex != 1 || out.ModifyIndex != 1 { + t.Fatalf("bad node returned: %#v", out) } - verifyCheck := func(t *testing.T, s *Store) { - idx, out, err := s.NodeChecks(nil, nodeName, nil, peerName) - require.NoError(t, err) - - require.Len(t, out, 1) - require.Equal(t, uint64(3), idx) + } + verifyNode(nodeID) + verifyNode(nodeName) - c := out[0] + // Add in a service definition. + req.Service = &structs.NodeService{ + ID: "redis1", + Service: "redis", + Address: "1.1.1.1", + Port: 8080, + Weights: &structs.Weights{Passing: 1, Warning: 1}, + RaftIndex: structs.RaftIndex{ + CreateIndex: 2, + ModifyIndex: 2, + }, + } + restore = s.Restore() + if err := restore.Registration(2, req); err != nil { + t.Fatalf("err: %s", err) + } + restore.Commit() - require.Equal(t, strings.ToUpper(nodeName), c.Node) - require.Equal(t, "check1", string(c.CheckID)) - require.Equal(t, "check", c.Name) - require.Equal(t, peerName, c.PeerName) - require.Equal(t, uint64(3), c.CreateIndex) - require.Equal(t, uint64(3), c.ModifyIndex) + // Verify that the service got registered. + verifyService := func(nodeLookup string) { + idx, out, err := s.NodeServices(nil, nodeLookup, nil) + if err != nil { + t.Fatalf("err: %s", err) } - verifyChecks := func(t *testing.T, s *Store) { - idx, out, err := s.NodeChecks(nil, nodeName, nil, peerName) - require.NoError(t, err) - - require.Len(t, out, 2) - require.Equal(t, uint64(4), idx) - - c1 := out[0] - require.Equal(t, strings.ToUpper(nodeName), c1.Node) - require.Equal(t, "check1", string(c1.CheckID)) - require.Equal(t, "check", c1.Name) - require.Equal(t, peerName, c1.PeerName) - require.Equal(t, uint64(3), c1.CreateIndex) - require.Equal(t, uint64(3), c1.ModifyIndex) - - c2 := out[1] - require.Equal(t, nodeName, c2.Node) - require.Equal(t, "check2", string(c2.CheckID)) - require.Equal(t, "check", c2.Name) - require.Equal(t, peerName, c2.PeerName) - require.Equal(t, uint64(4), c2.CreateIndex) - require.Equal(t, uint64(4), c2.ModifyIndex) + if idx != 2 { + t.Fatalf("bad index: %d", idx) } - - makeReq := func(f func(*structs.RegisterRequest)) *structs.RegisterRequest { - req := &structs.RegisterRequest{ - ID: types.NodeID(nodeID), - Node: nodeName, - Address: "1.2.3.4", - RaftIndex: structs.RaftIndex{ - CreateIndex: 1, - ModifyIndex: 1, - }, - PeerName: peerName, - } - if f != nil { - f(req) - } - return req + if len(out.Services) != 1 { + t.Fatalf("bad: %#v", out.Services) } + s := out.Services["redis1"] + if s.ID != "redis1" || s.Service != "redis" || + s.Address != "1.1.1.1" || s.Port != 8080 || + s.CreateIndex != 2 || s.ModifyIndex != 2 { + t.Fatalf("bad service returned: %#v", s) + } + } - s := testStateStore(t) - - // Start with just a node. - testutil.RunStep(t, "add a node", func(t *testing.T) { - req := makeReq(nil) - restore := s.Restore() - require.NoError(t, restore.Registration(1, req)) - require.NoError(t, restore.Commit()) - - // Retrieve the node and verify its contents. - verifyNode(t, s, nodeID) - verifyNode(t, s, nodeName) - }) - - // Add in a service definition. - testutil.RunStep(t, "add a service definition", func(t *testing.T) { - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - RaftIndex: structs.RaftIndex{ - CreateIndex: 2, - ModifyIndex: 2, - }, - PeerName: peerName, - } - }) - restore := s.Restore() - require.NoError(t, restore.Registration(2, req)) - require.NoError(t, restore.Commit()) - - // Verify that the service got registered. - verifyNode(t, s, nodeID) - verifyNode(t, s, nodeName) - verifyService(t, s, nodeID) - verifyService(t, s, nodeName) - }) + // Add in a top-level check. + // + // Verify that node name references in checks are case-insensitive during + // restore. + req.Check = &structs.HealthCheck{ + Node: strings.ToUpper(nodeName), + CheckID: "check1", + Name: "check", + RaftIndex: structs.RaftIndex{ + CreateIndex: 3, + ModifyIndex: 3, + }, + } + restore = s.Restore() + if err := restore.Registration(3, req); err != nil { + t.Fatalf("err: %s", err) + } + restore.Commit() - testutil.RunStep(t, "add a top-level check", func(t *testing.T) { - // Add in a top-level check. - // - // Verify that node name references in checks are case-insensitive during - // restore. - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - RaftIndex: structs.RaftIndex{ - CreateIndex: 2, - ModifyIndex: 2, - }, - PeerName: peerName, - } - req.Check = &structs.HealthCheck{ - Node: strings.ToUpper(nodeName), - CheckID: "check1", - Name: "check", - RaftIndex: structs.RaftIndex{ - CreateIndex: 3, - ModifyIndex: 3, - }, - PeerName: peerName, - } - }) - restore := s.Restore() - require.NoError(t, restore.Registration(3, req)) - require.NoError(t, restore.Commit()) - - // Verify that the check got registered. - verifyNode(t, s, nodeID) - verifyNode(t, s, nodeName) - verifyService(t, s, nodeID) - verifyService(t, s, nodeName) - verifyCheck(t, s) - }) + // Verify that the check got registered. + verifyCheck := func() { + idx, out, err := s.NodeChecks(nil, nodeName, nil) + if err != nil { + t.Fatalf("err: %s", err) + } + if idx != 3 { + t.Fatalf("bad index: %d", idx) + } + if len(out) != 1 { + t.Fatalf("bad: %#v", out) + } + c := out[0] + if c.Node != strings.ToUpper(nodeName) || c.CheckID != "check1" || c.Name != "check" || + c.CreateIndex != 3 || c.ModifyIndex != 3 { + t.Fatalf("bad check returned: %#v", c) + } + } + verifyNode(nodeID) + verifyNode(nodeName) + verifyService(nodeID) + verifyService(nodeName) + verifyCheck() - testutil.RunStep(t, "add another check via the slice", func(t *testing.T) { - // Add in another check via the slice. - req := makeReq(func(req *structs.RegisterRequest) { - req.Service = &structs.NodeService{ - ID: "redis1", - Service: "redis", - Address: "1.1.1.1", - Port: 8080, - Weights: &structs.Weights{Passing: 1, Warning: 1}, - RaftIndex: structs.RaftIndex{ - CreateIndex: 2, - ModifyIndex: 2, - }, - PeerName: peerName, - } - req.Check = &structs.HealthCheck{ - Node: strings.ToUpper(nodeName), - CheckID: "check1", - Name: "check", - RaftIndex: structs.RaftIndex{ - CreateIndex: 3, - ModifyIndex: 3, - }, - PeerName: peerName, - } - req.Checks = structs.HealthChecks{ - &structs.HealthCheck{ - Node: nodeName, - CheckID: "check2", - Name: "check", - RaftIndex: structs.RaftIndex{ - CreateIndex: 4, - ModifyIndex: 4, - }, - PeerName: peerName, - }, - } - }) - restore := s.Restore() - require.NoError(t, restore.Registration(4, req)) - require.NoError(t, restore.Commit()) - - // Verify that the additional check got registered. - verifyNode(t, s, nodeID) - verifyNode(t, s, nodeName) - verifyService(t, s, nodeID) - verifyService(t, s, nodeName) - verifyChecks(t, s) - }) + // Add in another check via the slice. + req.Checks = structs.HealthChecks{ + &structs.HealthCheck{ + Node: nodeName, + CheckID: "check2", + Name: "check", + RaftIndex: structs.RaftIndex{ + CreateIndex: 4, + ModifyIndex: 4, + }, + }, } + restore = s.Restore() + if err := restore.Registration(4, req); err != nil { + t.Fatalf("err: %s", err) + } + restore.Commit() - t.Run("default peer", func(t *testing.T) { - run(t, structs.DefaultPeerKeyword) - }) + // Verify that the additional check got registered. + verifyNode(nodeID) + verifyNode(nodeName) + verifyService(nodeID) + verifyService(nodeName) + func() { + idx, out, err := s.NodeChecks(nil, nodeName, nil) + if err != nil { + t.Fatalf("err: %s", err) + } + if idx != 4 { + t.Fatalf("bad index: %d", idx) + } + if len(out) != 2 { + t.Fatalf("bad: %#v", out) + } + c1 := out[0] + if c1.Node != strings.ToUpper(nodeName) || c1.CheckID != "check1" || c1.Name != "check" || + c1.CreateIndex != 3 || c1.ModifyIndex != 3 { + t.Fatalf("bad check returned, should not be modified: %#v", c1) + } - t.Run("random peer", func(t *testing.T) { - run(t, "my-peer") - }) + c2 := out[1] + if c2.Node != nodeName || c2.CheckID != "check2" || c2.Name != "check" || + c2.CreateIndex != 4 || c2.ModifyIndex != 4 { + t.Fatalf("bad check returned: %#v", c2) + } + }() } func deprecatedEnsureNodeWithoutIDCanRegister(t *testing.T, s *Store, nodeName string, txIdx uint64) { @@ -805,7 +573,7 @@ func deprecatedEnsureNodeWithoutIDCanRegister(t *testing.T, s *Store, nodeName s if err := s.EnsureNode(txIdx, in); err != nil { t.Fatalf("err: %s", err) } - idx, out, err := s.GetNode(nodeName, nil, "") + idx, out, err := s.GetNode(nodeName, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -835,7 +603,7 @@ func TestStateStore_EnsureNodeDeprecated(t *testing.T) { t.Fatalf("err: %v", err) } // Retrieve the node again - idx, out, err := s.GetNode(firstNodeName, nil, "") + idx, out, err := s.GetNode(firstNodeName, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -858,7 +626,7 @@ func TestStateStore_EnsureNodeDeprecated(t *testing.T) { t.Fatalf("err: %v", err) } // Retrieve the node again - idx, out, err = s.GetNode(firstNodeName, nil, "") + idx, out, err = s.GetNode(firstNodeName, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -931,11 +699,11 @@ func TestNodeRenamingNodes(t *testing.T) { t.Fatalf("err: %s", err) } - if _, node, err := s.GetNodeID(nodeID1, nil, ""); err != nil || node == nil || node.ID != nodeID1 { + if _, node, err := s.GetNodeID(nodeID1, nil); err != nil || node == nil || node.ID != nodeID1 { t.Fatalf("err: %s, node:= %q", err, node) } - if _, node, err := s.GetNodeID(nodeID2, nil, ""); err != nil && node == nil || node.ID != nodeID2 { + if _, node, err := s.GetNodeID(nodeID2, nil); err != nil && node == nil || node.ID != nodeID2 { t.Fatalf("err: %s", err) } @@ -980,13 +748,13 @@ func TestNodeRenamingNodes(t *testing.T) { } // Retrieve the node again - idx, out, err := s.GetNode("node2bis", nil, "") + idx, out, err := s.GetNode("node2bis", nil) if err != nil { t.Fatalf("err: %s", err) } // Retrieve the node again - idx2, out2, err := s.GetNodeID(nodeID2, nil, "") + idx2, out2, err := s.GetNodeID(nodeID2, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1004,7 +772,7 @@ func TestStateStore_EnsureNode(t *testing.T) { s := testStateStore(t) // Fetching a non-existent node returns nil - if _, node, err := s.GetNode("node1", nil, ""); node != nil || err != nil { + if _, node, err := s.GetNode("node1", nil); node != nil || err != nil { t.Fatalf("expected (nil, nil), got: (%#v, %#v)", node, err) } @@ -1021,7 +789,7 @@ func TestStateStore_EnsureNode(t *testing.T) { } // Retrieve the node again - idx, out, err := s.GetNode("node1", nil, "") + idx, out, err := s.GetNode("node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1050,7 +818,7 @@ func TestStateStore_EnsureNode(t *testing.T) { } // Retrieve the node - idx, out, err = s.GetNode("node1", nil, "") + idx, out, err = s.GetNode("node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1067,7 +835,7 @@ func TestStateStore_EnsureNode(t *testing.T) { if err := s.EnsureNode(3, in2); err != nil { t.Fatalf("err: %s", err) } - _, out, err = s.GetNode("node1", nil, "") + _, out, err = s.GetNode("node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1084,7 +852,7 @@ func TestStateStore_EnsureNode(t *testing.T) { if err := s.EnsureNode(3, in3); err != nil { t.Fatalf("err: %s", err) } - idx, out, err = s.GetNode("node1", nil, "") + idx, out, err = s.GetNode("node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1111,13 +879,13 @@ func TestStateStore_EnsureNode(t *testing.T) { } // Retrieve the node - _, out, err = s.GetNode("node1", nil, "") + _, out, err = s.GetNode("node1", nil) require.NoError(t, err) if out != nil { t.Fatalf("Node should not exist anymore: %q", out) } - idx, out, err = s.GetNode("node1-renamed", nil, "") + idx, out, err = s.GetNode("node1-renamed", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1176,7 +944,7 @@ func TestStateStore_EnsureNode(t *testing.T) { } // Retrieve the node - _, out, err = s.GetNode("Node1bis", nil, "") + _, out, err = s.GetNode("Node1bis", nil) require.NoError(t, err) if out == nil { t.Fatalf("Node should exist, but was null") @@ -1192,7 +960,7 @@ func TestStateStore_EnsureNode(t *testing.T) { t.Fatalf("err: %s", err) } - idx, out, err = s.GetNode("Node1bis", nil, "") + idx, out, err = s.GetNode("Node1bis", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1235,7 +1003,7 @@ func TestStateStore_EnsureNode(t *testing.T) { if err := s.EnsureNode(12, in); err != nil { t.Fatalf("err: %s", err) } - idx, out, err = s.GetNode("Node1-Renamed2", nil, "") + idx, out, err = s.GetNode("Node1-Renamed2", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1265,7 +1033,7 @@ func TestStateStore_EnsureNode(t *testing.T) { if err := s.EnsureNode(15, in); err != nil { t.Fatalf("[DEPRECATED] it should work, err:= %q", err) } - _, out, err = s.GetNode("Node1-Renamed2", nil, "") + _, out, err = s.GetNode("Node1-Renamed2", nil) if err != nil { t.Fatalf("[DEPRECATED] err: %s", err) } @@ -1282,7 +1050,7 @@ func TestStateStore_GetNodes(t *testing.T) { // Listing with no results returns nil. ws := memdb.NewWatchSet() - idx, res, err := s.Nodes(ws, nil, "") + idx, res, err := s.Nodes(ws, nil) if idx != 0 || res != nil || err != nil { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) } @@ -1297,7 +1065,7 @@ func TestStateStore_GetNodes(t *testing.T) { // Retrieve the nodes. ws = memdb.NewWatchSet() - idx, nodes, err := s.Nodes(ws, nil, "") + idx, nodes, err := s.Nodes(ws, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1327,7 +1095,7 @@ func TestStateStore_GetNodes(t *testing.T) { if watchFired(ws) { t.Fatalf("bad") } - if err := s.DeleteNode(3, "node1", nil, ""); err != nil { + if err := s.DeleteNode(3, "node1", nil); err != nil { t.Fatalf("err: %s", err) } if !watchFired(ws) { @@ -1347,7 +1115,7 @@ func BenchmarkGetNodes(b *testing.B) { ws := memdb.NewWatchSet() for i := 0; i < b.N; i++ { - s.Nodes(ws, nil, "") + s.Nodes(ws, nil) } } @@ -1356,7 +1124,7 @@ func TestStateStore_GetNodesByMeta(t *testing.T) { // Listing with no results returns nil ws := memdb.NewWatchSet() - idx, res, err := s.NodesByMeta(ws, map[string]string{"somekey": "somevalue"}, nil, "") + idx, res, err := s.NodesByMeta(ws, map[string]string{"somekey": "somevalue"}, nil) if idx != 0 || res != nil || err != nil { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) } @@ -1401,7 +1169,7 @@ func TestStateStore_GetNodesByMeta(t *testing.T) { } for _, tc := range cases { - _, result, err := s.NodesByMeta(nil, tc.filters, nil, "") + _, result, err := s.NodesByMeta(nil, tc.filters, nil) if err != nil { t.Fatalf("bad: %v", err) } @@ -1419,7 +1187,7 @@ func TestStateStore_GetNodesByMeta(t *testing.T) { // Set up a watch. ws = memdb.NewWatchSet() - _, _, err = s.NodesByMeta(ws, map[string]string{"role": "client"}, nil, "") + _, _, err = s.NodesByMeta(ws, map[string]string{"role": "client"}, nil) if err != nil { t.Fatalf("err: %v", err) } @@ -1461,13 +1229,13 @@ func TestStateStore_NodeServices(t *testing.T) { // Look up by name. t.Run("Look up by name", func(t *testing.T) { { - _, ns, err := s.NodeServices(nil, "node1", nil, "") + _, ns, err := s.NodeServices(nil, "node1", nil) require.NoError(t, err) require.NotNil(t, ns) require.Equal(t, "node1", ns.Node.Node) } { - _, ns, err := s.NodeServices(nil, "node2", nil, "") + _, ns, err := s.NodeServices(nil, "node2", nil) require.NoError(t, err) require.NotNil(t, ns) require.Equal(t, "node2", ns.Node.Node) @@ -1476,13 +1244,13 @@ func TestStateStore_NodeServices(t *testing.T) { t.Run("Look up by UUID", func(t *testing.T) { { - _, ns, err := s.NodeServices(nil, "40e4a748-2192-161a-0510-aaaaaaaaaaaa", nil, "") + _, ns, err := s.NodeServices(nil, "40e4a748-2192-161a-0510-aaaaaaaaaaaa", nil) require.NoError(t, err) require.NotNil(t, ns) require.Equal(t, "node1", ns.Node.Node) } { - _, ns, err := s.NodeServices(nil, "40e4a748-2192-161a-0510-bbbbbbbbbbbb", nil, "") + _, ns, err := s.NodeServices(nil, "40e4a748-2192-161a-0510-bbbbbbbbbbbb", nil) require.NoError(t, err) require.NotNil(t, ns) require.Equal(t, "node2", ns.Node.Node) @@ -1490,20 +1258,20 @@ func TestStateStore_NodeServices(t *testing.T) { }) t.Run("Ambiguous prefix", func(t *testing.T) { - _, ns, err := s.NodeServices(nil, "40e4a748-2192-161a-0510", nil, "") + _, ns, err := s.NodeServices(nil, "40e4a748-2192-161a-0510", nil) require.NoError(t, err) require.Nil(t, ns) }) t.Run("Bad node", func(t *testing.T) { // Bad node, and not a UUID (should not get a UUID error). - _, ns, err := s.NodeServices(nil, "nope", nil, "") + _, ns, err := s.NodeServices(nil, "nope", nil) require.NoError(t, err) require.Nil(t, ns) }) t.Run("Specific prefix", func(t *testing.T) { - _, ns, err := s.NodeServices(nil, "40e4a748-2192-161a-0510-bb", nil, "") + _, ns, err := s.NodeServices(nil, "40e4a748-2192-161a-0510-bb", nil) require.NoError(t, err) require.NotNil(t, ns) require.Equal(t, "node2", ns.Node.Node) @@ -1519,12 +1287,12 @@ func TestStateStore_DeleteNode(t *testing.T) { testRegisterCheck(t, s, 2, "node1", "", "check1", api.HealthPassing) // Delete the node - if err := s.DeleteNode(3, "node1", nil, ""); err != nil { + if err := s.DeleteNode(3, "node1", nil); err != nil { t.Fatalf("err: %s", err) } // The node was removed - if idx, n, err := s.GetNode("node1", nil, ""); err != nil || n != nil || idx != 3 { + if idx, n, err := s.GetNode("node1", nil); err != nil || n != nil || idx != 3 { t.Fatalf("bad: %#v %d (err: %#v)", n, idx, err) } @@ -1558,7 +1326,7 @@ func TestStateStore_DeleteNode(t *testing.T) { // Deleting a nonexistent node should be idempotent and not return // an error - if err := s.DeleteNode(4, "node1", nil, ""); err != nil { + if err := s.DeleteNode(4, "node1", nil); err != nil { t.Fatalf("err: %s", err) } if idx := s.maxIndex(tableNodes); idx != 3 { @@ -1616,7 +1384,7 @@ func TestStateStore_EnsureService(t *testing.T) { // Fetching services for a node with none returns nil. ws := memdb.NewWatchSet() - idx, res, err := s.NodeServices(ws, "node1", nil, "") + idx, res, err := s.NodeServices(ws, "node1", nil) if err != nil || res != nil || idx != 0 { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) } @@ -1649,7 +1417,7 @@ func TestStateStore_EnsureService(t *testing.T) { // Service successfully registers into the state store. ws = memdb.NewWatchSet() - _, _, err = s.NodeServices(ws, "node1", nil, "") + _, _, err = s.NodeServices(ws, "node1", nil) if err != nil { t.Fatalf("err: %v", err) } @@ -1671,7 +1439,7 @@ func TestStateStore_EnsureService(t *testing.T) { // Register a different service on the bad node. ws = memdb.NewWatchSet() - _, _, err = s.NodeServices(ws, "node1", nil, "") + _, _, err = s.NodeServices(ws, "node1", nil) if err != nil { t.Fatalf("err: %v", err) } @@ -1686,7 +1454,7 @@ func TestStateStore_EnsureService(t *testing.T) { // Retrieve the services. ws = memdb.NewWatchSet() - idx, out, err := s.NodeServices(ws, "node1", nil, "") + idx, out, err := s.NodeServices(ws, "node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1727,7 +1495,7 @@ func TestStateStore_EnsureService(t *testing.T) { } // Retrieve the service again and ensure it matches.. - idx, out, err = s.NodeServices(nil, "node1", nil, "") + idx, out, err = s.NodeServices(nil, "node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -1772,7 +1540,7 @@ func TestStateStore_EnsureService_connectProxy(t *testing.T) { assert.Nil(t, s.EnsureService(10, "node1", ns1)) // Retrieve and verify - _, out, err := s.NodeServices(nil, "node1", nil, "") + _, out, err := s.NodeServices(nil, "node1", nil) assert.Nil(t, err) assert.NotNil(t, out) assert.Len(t, out.Services, 1) @@ -1811,7 +1579,7 @@ func TestStateStore_EnsureService_VirtualIPAssign(t *testing.T) { assert.Equal(t, "240.0.0.1", vip) // Retrieve and verify - _, out, err := s.NodeServices(nil, "node1", nil, "") + _, out, err := s.NodeServices(nil, "node1", nil) require.NoError(t, err) assert.NotNil(t, out) assert.Len(t, out.Services, 1) @@ -1842,7 +1610,7 @@ func TestStateStore_EnsureService_VirtualIPAssign(t *testing.T) { assert.Equal(t, "240.0.0.2", vip) // Retrieve and verify - _, out, err = s.NodeServices(nil, "node1", nil, "") + _, out, err = s.NodeServices(nil, "node1", nil) assert.Nil(t, err) assert.NotNil(t, out) assert.Len(t, out.Services, 2) @@ -1852,7 +1620,7 @@ func TestStateStore_EnsureService_VirtualIPAssign(t *testing.T) { assert.Equal(t, ns2.Port, taggedAddress.Port) // Delete the first service and make sure it no longer has a virtual IP assigned. - require.NoError(t, s.DeleteService(12, "node1", "foo", entMeta, "")) + require.NoError(t, s.DeleteService(12, "node1", "foo", entMeta)) vip, err = s.VirtualIPForService(structs.ServiceName{Name: "connect-proxy"}) require.NoError(t, err) assert.Equal(t, "", vip) @@ -1879,7 +1647,7 @@ func TestStateStore_EnsureService_VirtualIPAssign(t *testing.T) { assert.Equal(t, "240.0.0.2", vip) // Make sure the new instance has the same virtual IP. - _, out, err = s.NodeServices(nil, "node1", nil, "") + _, out, err = s.NodeServices(nil, "node1", nil) require.NoError(t, err) taggedAddress = out.Services["redis-proxy2"].TaggedAddresses[structs.TaggedAddressVirtualIP] assert.Equal(t, vip, taggedAddress.Address) @@ -1907,7 +1675,7 @@ func TestStateStore_EnsureService_VirtualIPAssign(t *testing.T) { assert.Equal(t, "240.0.0.1", vip) // Retrieve and verify - _, out, err = s.NodeServices(nil, "node1", nil, "") + _, out, err = s.NodeServices(nil, "node1", nil) require.NoError(t, err) taggedAddress = out.Services["web-proxy"].TaggedAddresses[structs.TaggedAddressVirtualIP] assert.Equal(t, vip, taggedAddress.Address) @@ -1943,7 +1711,7 @@ func TestStateStore_EnsureService_ReassignFreedVIPs(t *testing.T) { assert.Equal(t, "240.0.0.1", vip) // Retrieve and verify - _, out, err := s.NodeServices(nil, "node1", nil, "") + _, out, err := s.NodeServices(nil, "node1", nil) require.NoError(t, err) assert.NotNil(t, out) @@ -1973,7 +1741,7 @@ func TestStateStore_EnsureService_ReassignFreedVIPs(t *testing.T) { assert.Equal(t, "240.0.0.2", vip) // Retrieve and verify - _, out, err = s.NodeServices(nil, "node1", nil, "") + _, out, err = s.NodeServices(nil, "node1", nil) assert.Nil(t, err) assert.NotNil(t, out) @@ -1982,7 +1750,7 @@ func TestStateStore_EnsureService_ReassignFreedVIPs(t *testing.T) { assert.Equal(t, ns2.Port, taggedAddress.Port) // Delete the last service and make sure it no longer has a virtual IP assigned. - require.NoError(t, s.DeleteService(12, "node1", "redis", entMeta, "")) + require.NoError(t, s.DeleteService(12, "node1", "redis", entMeta)) vip, err = s.VirtualIPForService(structs.ServiceName{Name: "redis"}) require.NoError(t, err) assert.Equal(t, "", vip) @@ -2008,7 +1776,7 @@ func TestStateStore_EnsureService_ReassignFreedVIPs(t *testing.T) { assert.Equal(t, "240.0.0.2", vip) // Retrieve and verify - _, out, err = s.NodeServices(nil, "node1", nil, "") + _, out, err = s.NodeServices(nil, "node1", nil) assert.Nil(t, err) assert.NotNil(t, out) @@ -2038,7 +1806,7 @@ func TestStateStore_EnsureService_ReassignFreedVIPs(t *testing.T) { assert.Equal(t, "240.0.0.3", vip) // Retrieve and verify - _, out, err = s.NodeServices(nil, "node1", nil, "") + _, out, err = s.NodeServices(nil, "node1", nil) assert.Nil(t, err) assert.NotNil(t, out) @@ -2052,7 +1820,7 @@ func TestStateStore_Services(t *testing.T) { // Listing with no results returns an empty list. ws := memdb.NewWatchSet() - idx, services, err := s.Services(ws, nil, "") + idx, services, err := s.Services(ws, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2093,7 +1861,7 @@ func TestStateStore_Services(t *testing.T) { // Pull all the services. ws = memdb.NewWatchSet() - idx, services, err = s.Services(ws, nil, "") + idx, services, err = s.Services(ws, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2116,7 +1884,7 @@ func TestStateStore_Services(t *testing.T) { } // Deleting a node with a service should fire the watch. - if err := s.DeleteNode(6, "node1", nil, ""); err != nil { + if err := s.DeleteNode(6, "node1", nil); err != nil { t.Fatalf("err: %s", err) } if !watchFired(ws) { @@ -2130,7 +1898,7 @@ func TestStateStore_ServicesByNodeMeta(t *testing.T) { ws := memdb.NewWatchSet() t.Run("Listing with no results returns nil", func(t *testing.T) { - idx, res, err := s.ServicesByNodeMeta(ws, map[string]string{"somekey": "somevalue"}, nil, "") + idx, res, err := s.ServicesByNodeMeta(ws, map[string]string{"somekey": "somevalue"}, nil) if idx != 0 || len(res) != 0 || err != nil { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) } @@ -2172,7 +1940,7 @@ func TestStateStore_ServicesByNodeMeta(t *testing.T) { ws = memdb.NewWatchSet() t.Run("Filter the services by the first node's meta value", func(t *testing.T) { - _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"role": "client"}, nil, "") + _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"role": "client"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2184,7 +1952,7 @@ func TestStateStore_ServicesByNodeMeta(t *testing.T) { }) t.Run("Get all services using the common meta value", func(t *testing.T) { - _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"common": "1"}, nil, "") + _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"common": "1"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2196,7 +1964,7 @@ func TestStateStore_ServicesByNodeMeta(t *testing.T) { }) t.Run("Get an empty list for an invalid meta value", func(t *testing.T) { - _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"invalid": "nope"}, nil, "") + _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"invalid": "nope"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2205,7 +1973,7 @@ func TestStateStore_ServicesByNodeMeta(t *testing.T) { }) t.Run("Get the first node's service instance using multiple meta filters", func(t *testing.T) { - _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"role": "client", "common": "1"}, nil, "") + _, res, err := s.ServicesByNodeMeta(ws, map[string]string{"role": "client", "common": "1"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2239,7 +2007,7 @@ func TestStateStore_ServicesByNodeMeta(t *testing.T) { // Now get a fresh watch, which will be forced to watch the whole // service table. ws := memdb.NewWatchSet() - _, _, err := s.ServicesByNodeMeta(ws, map[string]string{"common": "1"}, nil, "") + _, _, err := s.ServicesByNodeMeta(ws, map[string]string{"common": "1"}, nil) require.NoError(t, err) testRegisterService(t, s, idx, "nope", "more-nope") @@ -2264,7 +2032,7 @@ func TestStateStore_ServiceNodes(t *testing.T) { // Listing with no results returns an empty list. ws := memdb.NewWatchSet() - idx, nodes, err := s.ServiceNodes(ws, "db", nil, "") + idx, nodes, err := s.ServiceNodes(ws, "db", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2303,7 +2071,7 @@ func TestStateStore_ServiceNodes(t *testing.T) { // Read everything back. ws = memdb.NewWatchSet() - idx, nodes, err = s.ServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.ServiceNodes(ws, "db", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2366,7 +2134,7 @@ func TestStateStore_ServiceNodes(t *testing.T) { } // But removing a node with the "db" service should fire the watch. - if err := s.DeleteNode(18, "bar", nil, ""); err != nil { + if err := s.DeleteNode(18, "bar", nil); err != nil { t.Fatalf("err: %s", err) } if !watchFired(ws) { @@ -2390,7 +2158,7 @@ func TestStateStore_ServiceNodes(t *testing.T) { // Now get a fresh watch, which will be forced to watch the whole nodes // table. ws = memdb.NewWatchSet() - _, _, err = s.ServiceNodes(ws, "db", nil, "") + _, _, err = s.ServiceNodes(ws, "db", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2407,7 +2175,7 @@ func TestStateStore_ServiceTagNodes(t *testing.T) { // Listing with no results returns an empty list. ws := memdb.NewWatchSet() - idx, nodes, err := s.ServiceTagNodes(ws, "db", []string{"primary"}, nil, "") + idx, nodes, err := s.ServiceTagNodes(ws, "db", []string{"primary"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2440,7 +2208,7 @@ func TestStateStore_ServiceTagNodes(t *testing.T) { // Read everything back. ws = memdb.NewWatchSet() - idx, nodes, err = s.ServiceTagNodes(ws, "db", []string{"primary"}, nil, "") + idx, nodes, err = s.ServiceTagNodes(ws, "db", []string{"primary"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2470,7 +2238,7 @@ func TestStateStore_ServiceTagNodes(t *testing.T) { } // But removing a node with the "db:primary" service should fire the watch. - if err := s.DeleteNode(21, "foo", nil, ""); err != nil { + if err := s.DeleteNode(21, "foo", nil); err != nil { t.Fatalf("err: %s", err) } if !watchFired(ws) { @@ -2501,7 +2269,7 @@ func TestStateStore_ServiceTagNodes_MultipleTags(t *testing.T) { t.Fatalf("err: %v", err) } - idx, nodes, err := s.ServiceTagNodes(nil, "db", []string{"primary"}, nil, "") + idx, nodes, err := s.ServiceTagNodes(nil, "db", []string{"primary"}, nil) require.NoError(t, err) require.Equal(t, int(idx), 19) require.Len(t, nodes, 1) @@ -2510,13 +2278,13 @@ func TestStateStore_ServiceTagNodes_MultipleTags(t *testing.T) { require.Contains(t, nodes[0].ServiceTags, "primary") require.Equal(t, nodes[0].ServicePort, 8000) - idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"v2"}, nil, "") + idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"v2"}, nil) require.NoError(t, err) require.Equal(t, int(idx), 19) require.Len(t, nodes, 3) // Test filtering on multiple tags - idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"v2", "replica"}, nil, "") + idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"v2", "replica"}, nil) require.NoError(t, err) require.Equal(t, int(idx), 19) require.Len(t, nodes, 2) @@ -2525,7 +2293,7 @@ func TestStateStore_ServiceTagNodes_MultipleTags(t *testing.T) { require.Contains(t, nodes[1].ServiceTags, "v2") require.Contains(t, nodes[1].ServiceTags, "replica") - idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"dev"}, nil, "") + idx, nodes, err = s.ServiceTagNodes(nil, "db", []string{"dev"}, nil) require.NoError(t, err) require.Equal(t, int(idx), 19) require.Len(t, nodes, 1) @@ -2545,9 +2313,9 @@ func TestStateStore_DeleteService(t *testing.T) { // Delete the service. ws := memdb.NewWatchSet() - _, _, err := s.NodeServices(ws, "node1", nil, "") + _, _, err := s.NodeServices(ws, "node1", nil) require.NoError(t, err) - if err := s.DeleteService(4, "node1", "service1", nil, ""); err != nil { + if err := s.DeleteService(4, "node1", "service1", nil); err != nil { t.Fatalf("err: %s", err) } if !watchFired(ws) { @@ -2556,7 +2324,7 @@ func TestStateStore_DeleteService(t *testing.T) { // Service doesn't exist. ws = memdb.NewWatchSet() - _, ns, err := s.NodeServices(ws, "node1", nil, "") + _, ns, err := s.NodeServices(ws, "node1", nil) if err != nil || ns == nil || len(ns.Services) != 0 { t.Fatalf("bad: %#v (err: %#v)", ns, err) } @@ -2580,7 +2348,7 @@ func TestStateStore_DeleteService(t *testing.T) { // Deleting a nonexistent service should be idempotent and not return an // error, nor fire a watch. - if err := s.DeleteService(5, "node1", "service1", nil, ""); err != nil { + if err := s.DeleteService(5, "node1", "service1", nil); err != nil { t.Fatalf("err: %s", err) } if idx := s.maxIndex(tableServices); idx != 4 { @@ -2596,7 +2364,7 @@ func TestStateStore_ConnectServiceNodes(t *testing.T) { // Listing with no results returns an empty list. ws := memdb.NewWatchSet() - idx, nodes, err := s.ConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err := s.ConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(0)) assert.Len(t, nodes, 0) @@ -2614,7 +2382,7 @@ func TestStateStore_ConnectServiceNodes(t *testing.T) { // Read everything back. ws = memdb.NewWatchSet() - idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(17)) assert.Len(t, nodes, 3) @@ -2630,7 +2398,7 @@ func TestStateStore_ConnectServiceNodes(t *testing.T) { assert.False(t, watchFired(ws)) // But removing a node with the "db" service should fire the watch. - assert.Nil(t, s.DeleteNode(18, "bar", nil, "")) + assert.Nil(t, s.DeleteNode(18, "bar", nil)) assert.True(t, watchFired(ws)) } @@ -2639,7 +2407,7 @@ func TestStateStore_ConnectServiceNodes_Gateways(t *testing.T) { // Listing with no results returns an empty list. ws := memdb.NewWatchSet() - idx, nodes, err := s.ConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err := s.ConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(0)) assert.Len(t, nodes, 0) @@ -2660,7 +2428,7 @@ func TestStateStore_ConnectServiceNodes_Gateways(t *testing.T) { // Reset WatchSet to ensure watch fires when associating db with gateway ws = memdb.NewWatchSet() - _, _, err = s.ConnectServiceNodes(ws, "db", nil, "") + _, _, err = s.ConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) // Associate gateway with db @@ -2678,7 +2446,7 @@ func TestStateStore_ConnectServiceNodes_Gateways(t *testing.T) { // Read everything back. ws = memdb.NewWatchSet() - idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(17)) assert.Len(t, nodes, 2) @@ -2704,15 +2472,15 @@ func TestStateStore_ConnectServiceNodes_Gateways(t *testing.T) { // Reset WatchSet to ensure watch fires when deregistering gateway ws = memdb.NewWatchSet() - _, _, err = s.ConnectServiceNodes(ws, "db", nil, "") + _, _, err = s.ConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) // Watch should fire when a gateway instance is deregistered - assert.Nil(t, s.DeleteService(19, "bar", "gateway", nil, "")) + assert.Nil(t, s.DeleteService(19, "bar", "gateway", nil)) assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() - idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(19)) assert.Len(t, nodes, 2) @@ -2725,10 +2493,10 @@ func TestStateStore_ConnectServiceNodes_Gateways(t *testing.T) { assert.Equal(t, 443, nodes[1].ServicePort) // Index should not slide back after deleting all instances of the gateway - assert.Nil(t, s.DeleteService(20, "foo", "gateway-2", nil, "")) + assert.Nil(t, s.DeleteService(20, "foo", "gateway-2", nil)) assert.True(t, watchFired(ws)) - idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.ConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(20)) assert.Len(t, nodes, 1) @@ -2788,7 +2556,7 @@ func TestStateStore_Service_Snapshot(t *testing.T) { if idx := snap.LastIndex(); idx != 4 { t.Fatalf("bad index: %d", idx) } - services, err := snap.Services("node1", nil, "") + services, err := snap.Services("node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2845,7 +2613,7 @@ func TestStateStore_EnsureCheck(t *testing.T) { } // Retrieve the check and make sure it matches - idx, checks, err := s.NodeChecks(nil, "node1", nil, "") + idx, checks, err := s.NodeChecks(nil, "node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2862,7 +2630,7 @@ func TestStateStore_EnsureCheck(t *testing.T) { testCheckOutput := func(t *testing.T, expectedNodeIndex, expectedIndexForCheck uint64, outputTxt string) { t.Helper() // Check that we successfully updated - idx, checks, err = s.NodeChecks(nil, "node1", nil, "") + idx, checks, err = s.NodeChecks(nil, "node1", nil) require.NoError(t, err) require.Equal(t, expectedNodeIndex, idx, "bad raft index") @@ -2928,7 +2696,7 @@ func TestStateStore_EnsureCheck_defaultStatus(t *testing.T) { } // Get the check again - _, result, err := s.NodeChecks(nil, "node1", nil, "") + _, result, err := s.NodeChecks(nil, "node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2944,7 +2712,7 @@ func TestStateStore_NodeChecks(t *testing.T) { // Do an initial query for a node that doesn't exist. ws := memdb.NewWatchSet() - idx, checks, err := s.NodeChecks(ws, "node1", nil, "") + idx, checks, err := s.NodeChecks(ws, "node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2969,7 +2737,7 @@ func TestStateStore_NodeChecks(t *testing.T) { // Try querying for all checks associated with node1 ws = memdb.NewWatchSet() - idx, checks, err = s.NodeChecks(ws, "node1", nil, "") + idx, checks, err = s.NodeChecks(ws, "node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -2989,7 +2757,7 @@ func TestStateStore_NodeChecks(t *testing.T) { // Try querying for all checks associated with node2 ws = memdb.NewWatchSet() - idx, checks, err = s.NodeChecks(ws, "node2", nil, "") + idx, checks, err = s.NodeChecks(ws, "node2", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3012,7 +2780,7 @@ func TestStateStore_ServiceChecks(t *testing.T) { // Do an initial query for a service that doesn't exist. ws := memdb.NewWatchSet() - idx, checks, err := s.ServiceChecks(ws, "service1", nil, "") + idx, checks, err := s.ServiceChecks(ws, "service1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3037,7 +2805,7 @@ func TestStateStore_ServiceChecks(t *testing.T) { // Try querying for all checks associated with service1. ws = memdb.NewWatchSet() - idx, checks, err = s.ServiceChecks(ws, "service1", nil, "") + idx, checks, err = s.ServiceChecks(ws, "service1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3071,7 +2839,7 @@ func TestStateStore_ServiceChecksByNodeMeta(t *testing.T) { // Querying with no results returns nil. ws := memdb.NewWatchSet() - idx, checks, err := s.ServiceChecksByNodeMeta(ws, "service1", nil, nil, "") + idx, checks, err := s.ServiceChecksByNodeMeta(ws, "service1", nil, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3124,7 +2892,7 @@ func TestStateStore_ServiceChecksByNodeMeta(t *testing.T) { idx = 7 for _, tc := range cases { ws = memdb.NewWatchSet() - _, checks, err := s.ServiceChecksByNodeMeta(ws, "service1", tc.filters, nil, "") + _, checks, err := s.ServiceChecksByNodeMeta(ws, "service1", tc.filters, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3160,7 +2928,8 @@ func TestStateStore_ServiceChecksByNodeMeta(t *testing.T) { // Now get a fresh watch, which will be forced to watch the whole // node table. ws = memdb.NewWatchSet() - _, _, err = s.ServiceChecksByNodeMeta(ws, "service1", map[string]string{"common": "1"}, nil, "") + _, _, err = s.ServiceChecksByNodeMeta(ws, "service1", + map[string]string{"common": "1"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3181,7 +2950,7 @@ func TestStateStore_ChecksInState(t *testing.T) { // Querying with no results returns nil ws := memdb.NewWatchSet() - idx, res, err := s.ChecksInState(ws, api.HealthPassing, nil, "") + idx, res, err := s.ChecksInState(ws, api.HealthPassing, nil) if idx != 0 || res != nil || err != nil { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) } @@ -3197,7 +2966,7 @@ func TestStateStore_ChecksInState(t *testing.T) { // Query the state store for passing checks. ws = memdb.NewWatchSet() - _, checks, err := s.ChecksInState(ws, api.HealthPassing, nil, "") + _, checks, err := s.ChecksInState(ws, api.HealthPassing, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3221,7 +2990,7 @@ func TestStateStore_ChecksInState(t *testing.T) { // HealthAny just returns everything. ws = memdb.NewWatchSet() - _, checks, err = s.ChecksInState(ws, api.HealthAny, nil, "") + _, checks, err = s.ChecksInState(ws, api.HealthAny, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3248,7 +3017,7 @@ func TestStateStore_ChecksInStateByNodeMeta(t *testing.T) { // Querying with no results returns nil. ws := memdb.NewWatchSet() - idx, res, err := s.ChecksInStateByNodeMeta(ws, api.HealthPassing, nil, nil, "") + idx, res, err := s.ChecksInStateByNodeMeta(ws, api.HealthPassing, nil, nil) if idx != 0 || res != nil || err != nil { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) } @@ -3316,7 +3085,7 @@ func TestStateStore_ChecksInStateByNodeMeta(t *testing.T) { for i, tc := range cases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { ws = memdb.NewWatchSet() - _, checks, err := s.ChecksInStateByNodeMeta(ws, tc.state, tc.filters, nil, "") + _, checks, err := s.ChecksInStateByNodeMeta(ws, tc.state, tc.filters, nil) require.NoError(t, err) var foundIDs []string @@ -3348,7 +3117,8 @@ func TestStateStore_ChecksInStateByNodeMeta(t *testing.T) { // Now get a fresh watch, which will be forced to watch the whole // node table. ws = memdb.NewWatchSet() - _, _, err = s.ChecksInStateByNodeMeta(ws, api.HealthPassing, map[string]string{"common": "1"}, nil, "") + _, _, err = s.ChecksInStateByNodeMeta(ws, api.HealthPassing, + map[string]string{"common": "1"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3370,7 +3140,7 @@ func TestStateStore_DeleteCheck(t *testing.T) { // Make sure the check is there. ws := memdb.NewWatchSet() - _, checks, err := s.NodeChecks(ws, "node1", nil, "") + _, checks, err := s.NodeChecks(ws, "node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3381,10 +3151,10 @@ func TestStateStore_DeleteCheck(t *testing.T) { ensureServiceVersion(t, s, ws, "service1", 2, 1) // Delete the check. - if err := s.DeleteCheck(3, "node1", "check1", nil, ""); err != nil { + if err := s.DeleteCheck(3, "node1", "check1", nil); err != nil { t.Fatalf("err: %s", err) } - if idx, check, err := s.NodeCheck("node1", "check1", nil, ""); idx != 3 || err != nil || check != nil { + if idx, check, err := s.NodeCheck("node1", "check1", nil); idx != 3 || err != nil || check != nil { t.Fatalf("Node check should have been deleted idx=%d, node=%v, err=%s", idx, check, err) } if idx := s.maxIndex(tableChecks); idx != 3 { @@ -3398,7 +3168,7 @@ func TestStateStore_DeleteCheck(t *testing.T) { // Check is gone ws = memdb.NewWatchSet() - _, checks, err = s.NodeChecks(ws, "node1", nil, "") + _, checks, err = s.NodeChecks(ws, "node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -3413,7 +3183,7 @@ func TestStateStore_DeleteCheck(t *testing.T) { // Deleting a nonexistent check should be idempotent and not return an // error. - if err := s.DeleteCheck(4, "node1", "check1", nil, ""); err != nil { + if err := s.DeleteCheck(4, "node1", "check1", nil); err != nil { t.Fatalf("err: %s", err) } if idx := s.maxIndex(tableChecks); idx != 3 { @@ -3425,7 +3195,7 @@ func TestStateStore_DeleteCheck(t *testing.T) { } func ensureServiceVersion(t *testing.T, s *Store, ws memdb.WatchSet, serviceID string, expectedIdx uint64, expectedSize int) { - idx, services, err := s.ServiceNodes(ws, serviceID, nil, "") + idx, services, err := s.ServiceNodes(ws, serviceID, nil) t.Helper() if err != nil { t.Fatalf("err: %s", err) @@ -3443,7 +3213,7 @@ func ensureIndexForService(t *testing.T, s *Store, serviceName string, expectedI t.Helper() tx := s.db.Txn(false) defer tx.Abort() - transaction, err := tx.First(tableIndex, "id", serviceIndexName(serviceName, nil, "")) + transaction, err := tx.First(tableIndex, "id", serviceIndexName(serviceName, nil)) if err == nil { if idx, ok := transaction.(*IndexEntry); ok { if expectedIndex != idx.Value { @@ -3465,7 +3235,7 @@ func TestStateStore_IndexIndependence(t *testing.T) { // Querying with no matches gives an empty response ws := memdb.NewWatchSet() - idx, res, err := s.CheckServiceNodes(ws, "service1", nil, "") + idx, res, err := s.CheckServiceNodes(ws, "service1", nil) if idx != 0 || res != nil || err != nil { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) } @@ -3522,13 +3292,13 @@ func TestStateStore_IndexIndependence(t *testing.T) { testRegisterCheck(t, s, 14, "node2", "service_shared", "check_service_shared", api.HealthPassing) ensureServiceVersion(t, s, ws, "service_shared", 14, 2) - s.DeleteCheck(15, "node2", types.CheckID("check_service_shared"), nil, "") + s.DeleteCheck(15, "node2", types.CheckID("check_service_shared"), nil) ensureServiceVersion(t, s, ws, "service_shared", 15, 2) ensureIndexForService(t, s, "service_shared", 15) - s.DeleteService(16, "node2", "service_shared", nil, "") + s.DeleteService(16, "node2", "service_shared", nil) ensureServiceVersion(t, s, ws, "service_shared", 16, 1) ensureIndexForService(t, s, "service_shared", 16) - s.DeleteService(17, "node1", "service_shared", nil, "") + s.DeleteService(17, "node1", "service_shared", nil) ensureServiceVersion(t, s, ws, "service_shared", 17, 0) testRegisterService(t, s, 18, "node1", "service_new") @@ -3587,7 +3357,7 @@ func TestStateStore_ConnectQueryBlocking(t *testing.T) { // The connect index and gateway-services iterators are watched wantBeforeWatchSetSize: 2, updateFn: func(s *Store) { - require.NoError(t, s.DeleteService(5, "node1", "test", nil, "")) + require.NoError(t, s.DeleteService(5, "node1", "test", nil)) }, // Note that the old implementation would unblock in this case since it // always watched the target service's index even though some updates @@ -3648,7 +3418,7 @@ func TestStateStore_ConnectQueryBlocking(t *testing.T) { // connect index iterator, and gateway-services iterator. wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { - require.NoError(t, s.DeleteService(6, "node2", "test", nil, "")) + require.NoError(t, s.DeleteService(6, "node2", "test", nil)) }, shouldFire: true, wantAfterIndex: 6, @@ -3668,7 +3438,7 @@ func TestStateStore_ConnectQueryBlocking(t *testing.T) { // connect index iterator, and gateway-services iterator. wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { - require.NoError(t, s.DeleteService(6, "node1", "test", nil, "")) + require.NoError(t, s.DeleteService(6, "node1", "test", nil)) }, shouldFire: true, wantAfterIndex: 6, @@ -3725,7 +3495,7 @@ func TestStateStore_ConnectQueryBlocking(t *testing.T) { // connect index iterator, and gateway-services iterator. wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { - require.NoError(t, s.DeleteService(6, "node2", "test-sidecar-proxy", nil, "")) + require.NoError(t, s.DeleteService(6, "node2", "test-sidecar-proxy", nil)) }, shouldFire: true, wantAfterIndex: 6, @@ -3745,7 +3515,7 @@ func TestStateStore_ConnectQueryBlocking(t *testing.T) { // connect index iterator, and gateway-services iterator. wantBeforeWatchSetSize: 3, updateFn: func(s *Store) { - require.NoError(t, s.DeleteService(6, "node1", "test-sidecar-proxy", nil, "")) + require.NoError(t, s.DeleteService(6, "node1", "test-sidecar-proxy", nil)) }, shouldFire: true, wantAfterIndex: 6, @@ -3909,7 +3679,7 @@ func TestStateStore_ConnectQueryBlocking(t *testing.T) { // Run the query ws := memdb.NewWatchSet() - _, res, err := s.CheckConnectServiceNodes(ws, tt.svc, nil, "") + _, res, err := s.CheckConnectServiceNodes(ws, tt.svc, nil) require.NoError(t, err) require.Len(t, res, tt.wantBeforeResLen) require.Len(t, ws, tt.wantBeforeWatchSetSize) @@ -3928,7 +3698,7 @@ func TestStateStore_ConnectQueryBlocking(t *testing.T) { // Re-query the same result. Should return the desired index and len ws = memdb.NewWatchSet() - idx, res, err := s.CheckConnectServiceNodes(ws, tt.svc, nil, "") + idx, res, err := s.CheckConnectServiceNodes(ws, tt.svc, nil) require.NoError(t, err) require.Len(t, res, tt.wantAfterResLen) require.Equal(t, tt.wantAfterIndex, idx) @@ -3942,7 +3712,7 @@ func TestStateStore_CheckServiceNodes(t *testing.T) { // Querying with no matches gives an empty response ws := memdb.NewWatchSet() - idx, res, err := s.CheckServiceNodes(ws, "service1", nil, "") + idx, res, err := s.CheckServiceNodes(ws, "service1", nil) if idx != 0 || res != nil || err != nil { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, res, err) } @@ -3975,7 +3745,7 @@ func TestStateStore_CheckServiceNodes(t *testing.T) { // with a specific service. ws = memdb.NewWatchSet() ensureServiceVersion(t, s, ws, "service1", 6, 1) - idx, results, err := s.CheckServiceNodes(ws, "service1", nil, "") + idx, results, err := s.CheckServiceNodes(ws, "service1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -4001,7 +3771,7 @@ func TestStateStore_CheckServiceNodes(t *testing.T) { t.Fatalf("bad") } ws = memdb.NewWatchSet() - idx, _, err = s.CheckServiceNodes(ws, "service1", nil, "") + idx, _, err = s.CheckServiceNodes(ws, "service1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -4017,7 +3787,7 @@ func TestStateStore_CheckServiceNodes(t *testing.T) { t.Fatalf("bad") } ws = memdb.NewWatchSet() - idx, _, err = s.CheckServiceNodes(ws, "service1", nil, "") + idx, _, err = s.CheckServiceNodes(ws, "service1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -4031,7 +3801,7 @@ func TestStateStore_CheckServiceNodes(t *testing.T) { t.Fatalf("bad") } ws = memdb.NewWatchSet() - idx, _, err = s.CheckServiceNodes(ws, "service1", nil, "") + idx, _, err = s.CheckServiceNodes(ws, "service1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -4058,7 +3828,7 @@ func TestStateStore_CheckConnectServiceNodes(t *testing.T) { // Listing with no results returns an empty list. ws := memdb.NewWatchSet() - idx, nodes, err := s.CheckConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err := s.CheckConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(0)) assert.Len(t, nodes, 0) @@ -4083,7 +3853,7 @@ func TestStateStore_CheckConnectServiceNodes(t *testing.T) { // Read everything back. ws = memdb.NewWatchSet() - idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(20)) assert.Len(t, nodes, 2) @@ -4103,7 +3873,7 @@ func TestStateStore_CheckConnectServiceNodes_Gateways(t *testing.T) { // Listing with no results returns an empty list. ws := memdb.NewWatchSet() - idx, nodes, err := s.CheckConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err := s.CheckConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(0)) assert.Len(t, nodes, 0) @@ -4137,7 +3907,7 @@ func TestStateStore_CheckConnectServiceNodes_Gateways(t *testing.T) { assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() - idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(18)) assert.Len(t, nodes, 0) @@ -4156,7 +3926,7 @@ func TestStateStore_CheckConnectServiceNodes_Gateways(t *testing.T) { // Read everything back. ws = memdb.NewWatchSet() - idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(21)) assert.Len(t, nodes, 2) @@ -4181,17 +3951,17 @@ func TestStateStore_CheckConnectServiceNodes_Gateways(t *testing.T) { assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() - idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(22)) assert.Len(t, nodes, 3) // Watch should fire when a gateway instance is deregistered - assert.Nil(t, s.DeleteService(23, "bar", "gateway", nil, "")) + assert.Nil(t, s.DeleteService(23, "bar", "gateway", nil)) assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() - idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(23)) assert.Len(t, nodes, 2) @@ -4204,10 +3974,10 @@ func TestStateStore_CheckConnectServiceNodes_Gateways(t *testing.T) { assert.Equal(t, 443, nodes[1].Service.Port) // Index should not slide back after deleting all instances of the gateway - assert.Nil(t, s.DeleteService(24, "foo", "gateway-2", nil, "")) + assert.Nil(t, s.DeleteService(24, "foo", "gateway-2", nil)) assert.True(t, watchFired(ws)) - idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil, "") + idx, nodes, err = s.CheckConnectServiceNodes(ws, "db", nil) assert.Nil(t, err) assert.Equal(t, idx, uint64(24)) assert.Len(t, nodes, 1) @@ -4251,7 +4021,7 @@ func BenchmarkCheckServiceNodes(b *testing.B) { ws := memdb.NewWatchSet() for i := 0; i < b.N; i++ { - s.CheckServiceNodes(ws, "db", nil, "") + s.CheckServiceNodes(ws, "db", nil) } } @@ -4285,7 +4055,7 @@ func TestStateStore_CheckServiceTagNodes(t *testing.T) { } ws := memdb.NewWatchSet() - idx, nodes, err := s.CheckServiceTagNodes(ws, "db", []string{"primary"}, nil, "") + idx, nodes, err := s.CheckServiceTagNodes(ws, "db", []string{"primary"}, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -4364,7 +4134,7 @@ func TestStateStore_Check_Snapshot(t *testing.T) { if idx := snap.LastIndex(); idx != 5 { t.Fatalf("bad index: %d", idx) } - iter, err := snap.Checks("node1", nil, "") + iter, err := snap.Checks("node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -4620,7 +4390,7 @@ func TestStateStore_ServiceDump(t *testing.T) { { name: "delete a node", modFn: func(t *testing.T) { - s.DeleteNode(12, "node2", nil, "") + s.DeleteNode(12, "node2", nil) }, allFired: true, // fires due to "index" kindFired: true, // fires due to "index" @@ -4656,11 +4426,11 @@ func TestStateStore_ServiceDump(t *testing.T) { op := op require.True(t, t.Run(op.name, func(t *testing.T) { wsAll := memdb.NewWatchSet() - _, _, err := s.ServiceDump(wsAll, "", false, nil, "") + _, _, err := s.ServiceDump(wsAll, "", false, nil) require.NoError(t, err) wsKind := memdb.NewWatchSet() - _, _, err = s.ServiceDump(wsKind, structs.ServiceKindConnectProxy, true, nil, "") + _, _, err = s.ServiceDump(wsKind, structs.ServiceKindConnectProxy, true, nil) require.NoError(t, err) op.modFn(t) @@ -4668,12 +4438,12 @@ func TestStateStore_ServiceDump(t *testing.T) { require.Equal(t, op.allFired, watchFired(wsAll), "all dump watch firing busted") require.Equal(t, op.kindFired, watchFired(wsKind), "kind dump watch firing busted") - _, dump, err := s.ServiceDump(nil, "", false, nil, "") + _, dump, err := s.ServiceDump(nil, "", false, nil) require.NoError(t, err) sortDump(dump) op.checkAll(t, dump) - _, dump, err = s.ServiceDump(nil, structs.ServiceKindConnectProxy, true, nil, "") + _, dump, err = s.ServiceDump(nil, structs.ServiceKindConnectProxy, true, nil) require.NoError(t, err) sortDump(dump) op.checkKind(t, dump) @@ -4686,12 +4456,12 @@ func TestStateStore_NodeInfo_NodeDump(t *testing.T) { // Generating a node dump that matches nothing returns empty wsInfo := memdb.NewWatchSet() - idx, dump, err := s.NodeInfo(wsInfo, "node1", nil, "") + idx, dump, err := s.NodeInfo(wsInfo, "node1", nil) if idx != 0 || dump != nil || err != nil { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, dump, err) } wsDump := memdb.NewWatchSet() - idx, dump, err = s.NodeDump(wsDump, nil, "") + idx, dump, err = s.NodeDump(wsDump, nil) if idx != 0 || dump != nil || err != nil { t.Fatalf("expected (0, nil, nil), got: (%d, %#v, %#v)", idx, dump, err) } @@ -4844,7 +4614,7 @@ func TestStateStore_NodeInfo_NodeDump(t *testing.T) { // Get a dump of just a single node ws := memdb.NewWatchSet() - idx, dump, err = s.NodeInfo(ws, "node1", nil, "") + idx, dump, err = s.NodeInfo(ws, "node1", nil) if err != nil { t.Fatalf("err: %s", err) } @@ -4855,7 +4625,7 @@ func TestStateStore_NodeInfo_NodeDump(t *testing.T) { require.Equal(t, expect[0], dump[0]) // Generate a dump of all the nodes - idx, dump, err = s.NodeDump(nil, nil, "") + idx, dump, err = s.NodeDump(nil, nil) if err != nil { t.Fatalf("err: %s", err) } @@ -4886,7 +4656,7 @@ func TestStateStore_ServiceIdxUpdateOnNodeUpdate(t *testing.T) { // Store the current service index ws := memdb.NewWatchSet() - lastIdx, _, err := s.ServiceNodes(ws, "srv", nil, "") + lastIdx, _, err := s.ServiceNodes(ws, "srv", nil) require.Nil(t, err) // Update the node with some meta @@ -4895,7 +4665,7 @@ func TestStateStore_ServiceIdxUpdateOnNodeUpdate(t *testing.T) { // Read the new service index ws = memdb.NewWatchSet() - newIdx, _, err := s.ServiceNodes(ws, "srv", nil, "") + newIdx, _, err := s.ServiceNodes(ws, "srv", nil) require.Nil(t, err) require.True(t, newIdx > lastIdx) @@ -4926,7 +4696,7 @@ func TestStateStore_ensureServiceCASTxn(t *testing.T) { // ensure no update happened roTxn := s.db.Txn(false) - _, nsRead, err := s.NodeService(nil, "node1", "foo", nil, "") + _, nsRead, err := s.NodeService("node1", "foo", nil) require.NoError(t, err) require.NotNil(t, nsRead) require.Equal(t, uint64(2), nsRead.ModifyIndex) @@ -4941,7 +4711,7 @@ func TestStateStore_ensureServiceCASTxn(t *testing.T) { // ensure no update happened roTxn = s.db.Txn(false) - _, nsRead, err = s.NodeService(nil, "node1", "foo", nil, "") + _, nsRead, err = s.NodeService("node1", "foo", nil) require.NoError(t, err) require.NotNil(t, nsRead) require.Equal(t, uint64(2), nsRead.ModifyIndex) @@ -4956,7 +4726,7 @@ func TestStateStore_ensureServiceCASTxn(t *testing.T) { // ensure the update happened roTxn = s.db.Txn(false) - _, nsRead, err = s.NodeService(nil, "node1", "foo", nil, "") + _, nsRead, err = s.NodeService("node1", "foo", nil) require.NoError(t, err) require.NotNil(t, nsRead) require.Equal(t, uint64(7), nsRead.ModifyIndex) @@ -5038,7 +4808,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -5048,7 +4817,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -5082,7 +4850,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -5092,7 +4859,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -5143,7 +4909,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 22, ModifyIndex: 22, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -5153,7 +4918,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 22, ModifyIndex: 22, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -5181,7 +4945,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 22, ModifyIndex: 22, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -5191,7 +4954,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 22, ModifyIndex: 22, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("redis", nil), @@ -5206,13 +4968,12 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 23, ModifyIndex: 23, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) // Delete a service covered by wildcard - assert.Nil(t, s.DeleteService(24, "bar", "redis", nil, "")) + assert.Nil(t, s.DeleteService(24, "bar", "redis", nil)) assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() @@ -5234,7 +4995,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 22, ModifyIndex: 22, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -5244,7 +5004,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 22, ModifyIndex: 22, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -5276,7 +5035,6 @@ func TestStateStore_GatewayServices_Terminating(t *testing.T) { CreateIndex: 25, ModifyIndex: 25, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -5404,7 +5162,6 @@ func TestStateStore_GatewayServices_ServiceDeletion(t *testing.T) { CreateIndex: 19, ModifyIndex: 19, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -5441,10 +5198,10 @@ func TestStateStore_GatewayServices_ServiceDeletion(t *testing.T) { assert.Equal(t, expect, out) // Delete a service specified directly. - assert.Nil(t, s.DeleteService(20, "foo", "db", nil, "")) + assert.Nil(t, s.DeleteService(20, "foo", "db", nil)) - // The watch will fire because we need to update the gateway-services kind - assert.True(t, watchFired(ws)) + // Only the watch for other-gateway should fire, since its association to db came from a wildcard + assert.False(t, watchFired(ws)) assert.True(t, watchFired(otherWS)) // db should remain in the original gateway @@ -5461,7 +5218,7 @@ func TestStateStore_GatewayServices_ServiceDeletion(t *testing.T) { CAFile: "my_ca.pem", RaftIndex: structs.RaftIndex{ CreateIndex: 19, - ModifyIndex: 20, + ModifyIndex: 19, }, }, } @@ -5725,7 +5482,7 @@ func TestStateStore_GatewayServices_Ingress(t *testing.T) { }) t.Run("deregistering a service", func(t *testing.T) { - require.Nil(t, s.DeleteService(18, "node1", "service1", nil, "")) + require.Nil(t, s.DeleteService(18, "node1", "service1", nil)) require.True(t, watchFired(ws)) ws = memdb.NewWatchSet() @@ -6342,7 +6099,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -6352,7 +6108,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -6403,7 +6158,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -6413,7 +6167,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -6443,7 +6196,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -6453,7 +6205,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("redis", nil), @@ -6468,7 +6219,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 22, ModifyIndex: 22, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -6476,7 +6226,7 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { // Delete a service covered by wildcard t.Run("delete-wc-service", func(t *testing.T) { - assert.Nil(t, s.DeleteService(23, "bar", "redis", nil, "")) + assert.Nil(t, s.DeleteService(23, "bar", "redis", nil)) assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() @@ -6498,7 +6248,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("db", nil), @@ -6508,7 +6257,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 21, ModifyIndex: 21, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -6542,7 +6290,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 24, ModifyIndex: 24, }, - ServiceKind: structs.GatewayServiceKindService, }, } assert.Equal(t, expect, out) @@ -6600,7 +6347,6 @@ func TestStateStore_DumpGatewayServices(t *testing.T) { CreateIndex: 24, ModifyIndex: 24, }, - ServiceKind: structs.GatewayServiceKindService, }, { Service: structs.NewServiceName("api", nil), @@ -6785,7 +6531,7 @@ func TestCatalog_catalogDownstreams_Watches(t *testing.T) { require.ElementsMatch(t, exp.names, names) // Now delete the web-proxy service and the result should be empty - require.NoError(t, s.DeleteService(3, "foo", "web-proxy", defaultMeta, "")) + require.NoError(t, s.DeleteService(3, "foo", "web-proxy", defaultMeta)) assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() @@ -7236,7 +6982,7 @@ func TestCatalog_upstreamsFromRegistration_Watches(t *testing.T) { require.ElementsMatch(t, exp.names, names) // Now delete the web-proxy service and the result should mirror the one of the remaining instance - require.NoError(t, s.DeleteService(4, "foo", "web-proxy", defaultMeta, "")) + require.NoError(t, s.DeleteService(4, "foo", "web-proxy", defaultMeta)) assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() @@ -7256,7 +7002,7 @@ func TestCatalog_upstreamsFromRegistration_Watches(t *testing.T) { require.ElementsMatch(t, exp.names, names) // Now delete the last web-proxy instance and the mappings should be cleared - require.NoError(t, s.DeleteService(5, "foo", "web-proxy-2", defaultMeta, "")) + require.NoError(t, s.DeleteService(5, "foo", "web-proxy-2", defaultMeta)) assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() @@ -7333,7 +7079,7 @@ func TestCatalog_topologyCleanupPanic(t *testing.T) { assert.True(t, watchFired(ws)) // Now delete the node Foo, and this would panic because of the deletion within an iterator - require.NoError(t, s.DeleteNode(3, "foo", nil, "")) + require.NoError(t, s.DeleteNode(3, "foo", nil)) assert.True(t, watchFired(ws)) } @@ -7494,7 +7240,7 @@ func TestCatalog_upstreamsFromRegistration_Ingress(t *testing.T) { require.ElementsMatch(t, exp.names, names) // Deleting a service covered by a wildcard should delete its mapping - require.NoError(t, s.DeleteService(6, "foo", svc.ID, &svc.EnterpriseMeta, "")) + require.NoError(t, s.DeleteService(6, "foo", svc.ID, &svc.EnterpriseMeta)) assert.True(t, watchFired(ws)) ws = memdb.NewWatchSet() @@ -7616,7 +7362,7 @@ func TestCatalog_cleanupGatewayWildcards_panic(t *testing.T) { require.NoError(t, s.EnsureService(5, "foo", &api2)) // Now delete the node "foo", and this would panic because of the deletion within an iterator - require.NoError(t, s.DeleteNode(6, "foo", nil, "")) + require.NoError(t, s.DeleteNode(6, "foo", nil)) } func TestCatalog_DownstreamsForService(t *testing.T) { @@ -8165,7 +7911,7 @@ func TestStateStore_EnsureService_ServiceNames(t *testing.T) { // Deregister an ingress gateway and the index should not slide back idx++ - require.NoError(t, s.DeleteService(idx, "node1", "new-ingress-gateway", entMeta, "")) + require.NoError(t, s.DeleteService(idx, "node1", "new-ingress-gateway", entMeta)) gotIdx, got, err = s.ServiceNamesOfKind(nil, structs.ServiceKindIngressGateway) require.NoError(t, err) @@ -8190,7 +7936,7 @@ func TestStateStore_EnsureService_ServiceNames(t *testing.T) { // Deregister the single typical service and the service name should also be dropped idx++ - require.NoError(t, s.DeleteService(idx, "node1", "web", entMeta, "")) + require.NoError(t, s.DeleteService(idx, "node1", "web", entMeta)) gotIdx, got, err = s.ServiceNamesOfKind(nil, structs.ServiceKindTypical) require.NoError(t, err) @@ -8198,6 +7944,13 @@ func TestStateStore_EnsureService_ServiceNames(t *testing.T) { require.Empty(t, got) } +func runStep(t *testing.T, name string, fn func(t *testing.T)) { + t.Helper() + if !t.Run(name, fn) { + t.FailNow() + } +} + func assertMaxIndexes(t *testing.T, tx ReadTxn, expect map[string]uint64, skip ...string) { t.Helper() diff --git a/agent/consul/state/config_entry.go b/agent/consul/state/config_entry.go index 195cc3b913c04..1ae05bc11a891 100644 --- a/agent/consul/state/config_entry.go +++ b/agent/consul/state/config_entry.go @@ -12,7 +12,6 @@ import ( "github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/lib" - "github.com/hashicorp/consul/lib/maps" ) type ConfigEntryLinkIndex struct { @@ -138,36 +137,6 @@ func (s *Store) ConfigEntriesByKind(ws memdb.WatchSet, kind string, entMeta *acl return configEntriesByKindTxn(tx, ws, kind, entMeta) } -func listDiscoveryChainNamesTxn(tx ReadTxn, ws memdb.WatchSet, entMeta acl.EnterpriseMeta) (uint64, []structs.ServiceName, error) { - // Get the index and watch for updates - idx := maxIndexWatchTxn(tx, ws, tableConfigEntries) - - // List all discovery chain top nodes. - seen := make(map[structs.ServiceName]struct{}) - for _, kind := range []string{ - structs.ServiceRouter, - structs.ServiceSplitter, - structs.ServiceResolver, - } { - iter, err := getConfigEntryKindsWithTxn(tx, kind, &entMeta) - if err != nil { - return 0, nil, fmt.Errorf("failed config entry lookup: %s", err) - } - ws.Add(iter.WatchCh()) - - for v := iter.Next(); v != nil; v = iter.Next() { - entry := v.(structs.ConfigEntry) - sn := structs.NewServiceName(entry.GetName(), entry.GetEnterpriseMeta()) - seen[sn] = struct{}{} - } - } - - results := maps.SliceOfKeys(seen) - structs.ServiceList(results).Sort() - - return idx, results, nil -} - func configEntriesByKindTxn(tx ReadTxn, ws memdb.WatchSet, kind string, entMeta *acl.EnterpriseMeta) (uint64, []structs.ConfigEntry, error) { // Get the index and watch for updates idx := maxIndexWatchTxn(tx, ws, tableConfigEntries) @@ -344,27 +313,6 @@ func deleteConfigEntryTxn(tx WriteTxn, idx uint64, kind, name string, entMeta *a return fmt.Errorf("failed updating gateway-services index: %v", err) } } - - c := existing.(structs.ConfigEntry) - switch x := c.(type) { - case *structs.ServiceConfigEntry: - if x.Destination != nil { - gsKind, err := GatewayServiceKind(tx, sn.Name, &sn.EnterpriseMeta) - if err != nil { - return fmt.Errorf("failed to get gateway service kind for service %s: %v", sn.Name, err) - } - if gsKind == structs.GatewayServiceKindDestination { - gsKind = structs.GatewayServiceKindUnknown - } - if err := checkGatewayWildcardsAndUpdate(tx, idx, &structs.ServiceName{Name: c.GetName(), EnterpriseMeta: *c.GetEnterpriseMeta()}, gsKind); err != nil { - return fmt.Errorf("failed updating gateway mapping: %s", err) - } - if err := checkGatewayAndUpdate(tx, idx, &structs.ServiceName{Name: c.GetName(), EnterpriseMeta: *c.GetEnterpriseMeta()}, gsKind); err != nil { - return fmt.Errorf("failed updating gateway mapping: %s", err) - } - } - } - // Also clean up associations in the mesh topology table for ingress gateways if kind == structs.IngressGateway { if _, err := tx.DeleteAll(tableMeshTopology, indexDownstream, sn); err != nil { @@ -397,7 +345,6 @@ func insertConfigEntryWithTxn(tx WriteTxn, idx uint64, conf structs.ConfigEntry) } // If the config entry is for a terminating or ingress gateway we update the memdb table // that associates gateways <-> services. - if conf.GetKind() == structs.TerminatingGateway || conf.GetKind() == structs.IngressGateway { err := updateGatewayServices(tx, idx, conf, conf.GetEnterpriseMeta()) if err != nil { @@ -405,26 +352,6 @@ func insertConfigEntryWithTxn(tx WriteTxn, idx uint64, conf structs.ConfigEntry) } } - switch conf.GetKind() { - case structs.ServiceDefaults: - if conf.(*structs.ServiceConfigEntry).Destination != nil { - sn := structs.ServiceName{Name: conf.GetName(), EnterpriseMeta: *conf.GetEnterpriseMeta()} - gsKind, err := GatewayServiceKind(tx, sn.Name, &sn.EnterpriseMeta) - if gsKind == structs.GatewayServiceKindUnknown { - gsKind = structs.GatewayServiceKindDestination - } - if err != nil { - return fmt.Errorf("failed updating gateway mapping: %s", err) - } - if err := checkGatewayWildcardsAndUpdate(tx, idx, &sn, gsKind); err != nil { - return fmt.Errorf("failed updating gateway mapping: %s", err) - } - if err := checkGatewayAndUpdate(tx, idx, &sn, gsKind); err != nil { - return fmt.Errorf("failed updating gateway mapping: %s", err) - } - } - } - // Insert the config entry and update the index if err := tx.Insert(tableConfigEntries, conf); err != nil { return fmt.Errorf("failed inserting config entry: %s", err) @@ -1414,52 +1341,6 @@ func configEntryWithOverridesTxn( return configEntryTxn(tx, ws, kind, name, entMeta) } -// getExportedServicesConfigEntriesTxn fetches exported-service config entries and -// filters their exported services to only those that match serviceName and entMeta. -// Because the resulting config entries may have had their exported services modified, -// they *should not* be used in subsequent writes. -func getExportedServiceConfigEntriesTxn( - tx ReadTxn, - ws memdb.WatchSet, - serviceName string, - entMeta *acl.EnterpriseMeta, -) (uint64, []*structs.ExportedServicesConfigEntry, error) { - var exportedServicesEntries []*structs.ExportedServicesConfigEntry - // slice of names to match config entries against - matchCandidates := getExportedServicesMatchServiceNames(serviceName, entMeta) - // matcher func generator for currying the matcher func over EnterpriseMeta values - // from the associated config entry - matchFunc := func(matchMeta *acl.EnterpriseMeta) func(structs.ExportedService) bool { - return func(exportedService structs.ExportedService) bool { - matchSvcName := structs.NewServiceName(exportedService.Name, matchMeta) - for _, candidate := range matchCandidates { - if candidate.Matches(matchSvcName) { - return true - } - } - return false - } - } - idx, entries, err := configEntriesByKindTxn(tx, ws, structs.ExportedServices, entMeta) - if err != nil { - return 0, nil, err - } - for _, entry := range entries { - esEntry, ok := entry.(*structs.ExportedServicesConfigEntry) - if !ok { - return 0, nil, fmt.Errorf("type %T is not a %s config entry", esEntry, structs.ExportedServices) - } - // get a copy of the config entry with Services filtered to match serviceName - newEntry := filterExportedServices(esEntry, matchFunc(entry.GetEnterpriseMeta())) - // the filter will return a new entry, so checking to see if its services is empty says that there - // were matches and that we should include it in the results - if len(newEntry.Services) > 0 { - exportedServicesEntries = append(exportedServicesEntries, newEntry) - } - } - return idx, exportedServicesEntries, nil -} - // protocolForService returns the service graph protocol associated to the // provided service, checking all relevant config entries. func protocolForService( @@ -1502,23 +1383,6 @@ func protocolForService( return maxIdx, chain.Protocol, nil } -// filterExportedServices returns the slice of ExportedService that matc ffor matching service names -// returning a copy of entry with only the services that match one of the -// services in candidates. -func filterExportedServices( - entry *structs.ExportedServicesConfigEntry, - testFunc func(structs.ExportedService) bool, -) *structs.ExportedServicesConfigEntry { - newEntry := *entry - newEntry.Services = []structs.ExportedService{} - for _, ceSvc := range entry.Services { - if testFunc(ceSvc) { - newEntry.Services = append(newEntry.Services, ceSvc) - } - } - return &newEntry -} - func newConfigEntryQuery(c structs.ConfigEntry) configentry.KindName { return configentry.NewKindName(c.GetKind(), c.GetName(), c.GetEnterpriseMeta()) } diff --git a/agent/consul/state/config_entry_oss.go b/agent/consul/state/config_entry_oss.go index 56fff98e8704a..66a47eb860351 100644 --- a/agent/consul/state/config_entry_oss.go +++ b/agent/consul/state/config_entry_oss.go @@ -60,15 +60,3 @@ func configIntentionsConvertToList(iter memdb.ResultIterator, _ *acl.EnterpriseM } return results } - -// getExportedServicesMatchServicesNames returns a list of service names that are considered matches when -// found in a list of exported-services config entries. For OSS, namespace is not considered, so a match is one of: -// - the service name matches -// - the service name is a wildcard -// This value can be used to filter exported-services config entries for a given service name. -func getExportedServicesMatchServiceNames(serviceName string, entMeta *acl.EnterpriseMeta) []structs.ServiceName { - return []structs.ServiceName{ - structs.NewServiceName(serviceName, entMeta), - structs.NewServiceName(structs.WildcardSpecifier, entMeta), - } -} diff --git a/agent/consul/state/config_entry_oss_test.go b/agent/consul/state/config_entry_oss_test.go index 9f6a1ef44d9d7..13a56e18c618c 100644 --- a/agent/consul/state/config_entry_oss_test.go +++ b/agent/consul/state/config_entry_oss_test.go @@ -4,12 +4,9 @@ package state import ( - "testing" - "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/configentry" "github.com/hashicorp/consul/agent/structs" - "github.com/stretchr/testify/require" ) func testIndexerTableConfigEntries() map[string]indexerTestCase { @@ -39,121 +36,3 @@ func testIndexerTableConfigEntries() map[string]indexerTestCase { }, } } - -func TestStore_ExportedServices(t *testing.T) { - type testCase struct { - name string - write []structs.ConfigEntry - query string - expect []*structs.ExportedServicesConfigEntry - } - - cases := []testCase{ - { - name: "empty everything", - write: []structs.ConfigEntry{}, - query: "foo", - expect: []*structs.ExportedServicesConfigEntry{}, - }, - { - name: "no matching exported services", - write: []structs.ConfigEntry{ - &structs.ProxyConfigEntry{Name: "foo"}, - &structs.ProxyConfigEntry{Name: "bar"}, - &structs.ExportedServicesConfigEntry{ - Name: "baz", - Services: []structs.ExportedService{ - {Name: "baz"}, - }, - }, - }, - query: "foo", - expect: []*structs.ExportedServicesConfigEntry{}, - }, - { - name: "exact match service name", - write: []structs.ConfigEntry{ - &structs.ExportedServicesConfigEntry{ - Name: "foo", - Services: []structs.ExportedService{ - {Name: "foo"}, - }, - }, - &structs.ExportedServicesConfigEntry{ - Name: "bar", - Services: []structs.ExportedService{ - {Name: "bar"}, - }, - }, - }, - query: "bar", - expect: []*structs.ExportedServicesConfigEntry{ - { - Name: "bar", - Services: []structs.ExportedService{ - {Name: "bar"}, - }, - }, - }, - }, - { - name: "wildcard match on service name", - write: []structs.ConfigEntry{ - &structs.ExportedServicesConfigEntry{ - Name: "foo", - Services: []structs.ExportedService{ - {Name: "foo"}, - }, - }, - &structs.ExportedServicesConfigEntry{ - Name: "wildcard", - Services: []structs.ExportedService{ - {Name: structs.WildcardSpecifier}, - }, - }, - }, - query: "foo", - expect: []*structs.ExportedServicesConfigEntry{ - { - Name: "foo", - Services: []structs.ExportedService{ - {Name: "foo"}, - }, - }, - { - Name: "wildcard", - Services: []structs.ExportedService{ - {Name: structs.WildcardSpecifier}, - }, - }, - }, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - s := testStateStore(t) - - // Write the entries. - for idx, entry := range tc.write { - require.NoError(t, s.EnsureConfigEntry(uint64(idx+1), entry)) - } - - // Read the entries back. - tx := s.db.ReadTxn() - defer tx.Abort() - idx, entries, err := getExportedServiceConfigEntriesTxn(tx, nil, tc.query, acl.DefaultEnterpriseMeta()) - require.NoError(t, err) - require.Equal(t, uint64(len(tc.write)), idx) - - // Verify the result. - require.Len(t, entries, len(tc.expect)) - for idx, got := range entries { - // ignore raft fields - got.ModifyIndex = 0 - got.CreateIndex = 0 - require.Equal(t, tc.expect[idx], got) - } - }) - } -} diff --git a/agent/consul/state/config_entry_test.go b/agent/consul/state/config_entry_test.go index 5d2cdf9fd2804..8cb4d8f51dc5c 100644 --- a/agent/consul/state/config_entry_test.go +++ b/agent/consul/state/config_entry_test.go @@ -73,8 +73,8 @@ func TestStore_ConfigEntry(t *testing.T) { serviceConf.Protocol = "http" require.NoError(t, s.EnsureConfigEntry(5, serviceConf)) require.True(t, watchFired(ws)) - } + func TestStore_ConfigEntryCAS(t *testing.T) { s := testConfigStateStore(t) @@ -310,497 +310,6 @@ func TestStore_ConfigEntries(t *testing.T) { Protocol: "tcp", })) require.True(t, watchFired(ws)) - -} - -func TestStore_ServiceDefaults_Kind_Destination(t *testing.T) { - s := testConfigStateStore(t) - - Gtwy := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "Gtwy1", - Services: []structs.LinkedService{ - { - Name: "dest1", - }, - }, - } - - // Create - require.NoError(t, s.EnsureConfigEntry(0, Gtwy)) - - destination := &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "dest1", - Destination: &structs.DestinationConfig{}, - } - - _, gatewayServices, err := s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) - - ws := memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - // Create - require.NoError(t, s.EnsureConfigEntry(0, destination)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindDestination) - - ws = memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - require.NoError(t, s.DeleteConfigEntry(6, structs.ServiceDefaults, destination.Name, &destination.EnterpriseMeta)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) - -} - -func TestStore_ServiceDefaults_Kind_NotDestination(t *testing.T) { - s := testConfigStateStore(t) - - Gtwy := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "Gtwy1", - Services: []structs.LinkedService{ - { - Name: "dest1", - }, - }, - } - - // Create - require.NoError(t, s.EnsureConfigEntry(0, Gtwy)) - - destination := &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "dest1", - } - - _, gatewayServices, err := s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) - - ws := memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - // Create - require.NoError(t, s.EnsureConfigEntry(0, destination)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.False(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) - - ws = memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - require.NoError(t, s.DeleteConfigEntry(6, structs.ServiceDefaults, destination.Name, &destination.EnterpriseMeta)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.False(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) - -} - -func TestStore_Service_TerminatingGateway_Kind_Service_Destination(t *testing.T) { - s := testConfigStateStore(t) - - Gtwy := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "Gtwy1", - Services: []structs.LinkedService{ - { - Name: "web", - }, - }, - } - - // Create - require.NoError(t, s.EnsureConfigEntry(0, Gtwy)) - - service := &structs.NodeService{ - Kind: structs.ServiceKindTypical, - Service: "web", - } - destination := &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "web", - Destination: &structs.DestinationConfig{}, - } - - _, gatewayServices, err := s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) - - ws := memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - // Create - require.NoError(t, s.EnsureNode(0, &structs.Node{Node: "node1"})) - require.NoError(t, s.EnsureService(0, "node1", service)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindService) - - require.NoError(t, s.EnsureConfigEntry(0, destination)) - - _, gatewayServices, err = s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindService) - - ws = memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - require.NoError(t, s.DeleteService(6, "node1", service.ID, &service.EnterpriseMeta, "")) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindDestination) - -} - -func TestStore_Service_TerminatingGateway_Kind_Destination_Service(t *testing.T) { - s := testConfigStateStore(t) - - Gtwy := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "Gtwy1", - Services: []structs.LinkedService{ - { - Name: "web", - }, - }, - } - - // Create - require.NoError(t, s.EnsureConfigEntry(0, Gtwy)) - - service := &structs.NodeService{ - Kind: structs.ServiceKindTypical, - Service: "web", - } - destination := &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "web", - Destination: &structs.DestinationConfig{}, - } - - _, gatewayServices, err := s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) - - ws := memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - // Create - require.NoError(t, s.EnsureConfigEntry(0, destination)) - - _, gatewayServices, err = s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindDestination) - - require.NoError(t, s.EnsureNode(0, &structs.Node{Node: "node1"})) - require.NoError(t, s.EnsureService(0, "node1", service)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindService) - - ws = memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - require.NoError(t, s.DeleteService(6, "node1", service.ID, &service.EnterpriseMeta, "")) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindDestination) - -} - -func TestStore_Service_TerminatingGateway_Kind_Service(t *testing.T) { - s := testConfigStateStore(t) - - Gtwy := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "Gtwy1", - Services: []structs.LinkedService{ - { - Name: "web", - }, - }, - } - - // Create - require.NoError(t, s.EnsureConfigEntry(0, Gtwy)) - - service := &structs.NodeService{ - Kind: structs.ServiceKindTypical, - Service: "web", - } - - _, gatewayServices, err := s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) - - ws := memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - // Create - require.NoError(t, s.EnsureNode(0, &structs.Node{Node: "node1"})) - require.NoError(t, s.EnsureService(0, "node1", service)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindService) - - ws = memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - require.NoError(t, s.DeleteService(6, "node1", service.ID, &service.EnterpriseMeta, "")) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) - -} - -func TestStore_ServiceDefaults_Kind_Destination_Wildcard(t *testing.T) { - s := testConfigStateStore(t) - - Gtwy := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "Gtwy1", - Services: []structs.LinkedService{ - { - Name: "*", - }, - }, - } - - // Create - require.NoError(t, s.EnsureConfigEntry(0, Gtwy)) - - destination := &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "dest1", - Destination: &structs.DestinationConfig{}, - } - - _, gatewayServices, err := s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 0) - - ws := memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - // Create - require.NoError(t, s.EnsureConfigEntry(0, destination)) - require.NoError(t, err) - - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindDestination) - - ws = memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - require.NoError(t, s.DeleteConfigEntry(6, structs.ServiceDefaults, destination.Name, &destination.EnterpriseMeta)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindUnknown) -} - -func TestStore_Service_TerminatingGateway_Kind_Service_Wildcard(t *testing.T) { - s := testConfigStateStore(t) - - Gtwy := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "Gtwy1", - Services: []structs.LinkedService{ - { - Name: "*", - }, - }, - } - - // Create - require.NoError(t, s.EnsureConfigEntry(0, Gtwy)) - - service := &structs.NodeService{ - Kind: structs.ServiceKindTypical, - Service: "web", - } - - _, gatewayServices, err := s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 0) - - ws := memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - // Create - require.NoError(t, s.EnsureNode(0, &structs.Node{Node: "node1"})) - require.NoError(t, s.EnsureService(0, "node1", service)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindService) - - ws = memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - require.NoError(t, s.DeleteService(6, "node1", service.ID, &service.EnterpriseMeta, "")) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 0) -} - -func TestStore_Service_TerminatingGateway_Kind_Service_Destination_Wildcard(t *testing.T) { - s := testConfigStateStore(t) - - Gtwy := &structs.TerminatingGatewayConfigEntry{ - Kind: structs.TerminatingGateway, - Name: "Gtwy1", - Services: []structs.LinkedService{ - { - Name: "*", - }, - }, - } - - // Create - require.NoError(t, s.EnsureConfigEntry(0, Gtwy)) - - service := &structs.NodeService{ - Kind: structs.ServiceKindTypical, - Service: "web", - } - destination := &structs.ServiceConfigEntry{ - Kind: structs.ServiceDefaults, - Name: "web", - Destination: &structs.DestinationConfig{}, - } - - _, gatewayServices, err := s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 0) - - ws := memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - // Create - require.NoError(t, s.EnsureConfigEntry(0, destination)) - - _, gatewayServices, err = s.GatewayServices(nil, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindDestination) - - require.NoError(t, s.EnsureNode(0, &structs.Node{Node: "node1"})) - require.NoError(t, s.EnsureService(0, "node1", service)) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 1) - require.Equal(t, gatewayServices[0].ServiceKind, structs.GatewayServiceKindService) - - ws = memdb.NewWatchSet() - _, _, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - - require.NoError(t, s.DeleteService(6, "node1", service.ID, &service.EnterpriseMeta, "")) - - //Watch is fired because we transitioned to a destination, by default we assume it's not. - require.True(t, watchFired(ws)) - - _, gatewayServices, err = s.GatewayServices(ws, "Gtwy1", nil) - require.NoError(t, err) - require.Len(t, gatewayServices, 0) - } func TestStore_ConfigEntry_GraphValidation(t *testing.T) { diff --git a/agent/consul/state/connect_ca_events.go b/agent/consul/state/connect_ca_events.go index 36fe8ce35186e..6a0bdb97443fc 100644 --- a/agent/consul/state/connect_ca_events.go +++ b/agent/consul/state/connect_ca_events.go @@ -4,7 +4,6 @@ import ( "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/stream" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbsubscribe" ) // EventTopicCARoots is the streaming topic to which events will be published @@ -13,7 +12,13 @@ import ( // // Note: topics are ordinarily defined in subscribe.proto, but this one isn't // currently available via the Subscribe endpoint. -const EventTopicCARoots stream.StringTopic = "CARoots" +const EventTopicCARoots stringer = "CARoots" + +// stringer is a convenience type to turn a regular string into a fmt.Stringer +// so that it can be used as a stream.Topic or stream.Subject. +type stringer string + +func (s stringer) String() string { return string(s) } type EventPayloadCARoots struct { CARoots structs.CARoots @@ -30,10 +35,6 @@ func (e EventPayloadCARoots) HasReadPermission(authz acl.Authorizer) bool { return authz.ServiceWriteAny(&authzContext) == acl.Allow } -func (e EventPayloadCARoots) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - panic("EventPayloadCARoots does not implement ToSubscriptionEvent") -} - // caRootsChangeEvents returns an event on EventTopicCARoots whenever the list // of active CA Roots changes. func caRootsChangeEvents(tx ReadTxn, changes Changes) ([]stream.Event, error) { diff --git a/agent/consul/state/coordinate_test.go b/agent/consul/state/coordinate_test.go index 0335ac5f41563..3a28d199b9d23 100644 --- a/agent/consul/state/coordinate_test.go +++ b/agent/consul/state/coordinate_test.go @@ -11,7 +11,6 @@ import ( "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/lib" - "github.com/hashicorp/consul/sdk/testutil" ) // TODO(partitions): test partitioned nodes here @@ -182,7 +181,7 @@ func TestStateStore_Coordinate_Cleanup(t *testing.T) { require.Equal(t, expected, coords) // Now delete the node. - require.NoError(t, s.DeleteNode(3, "node1", nil, "")) + require.NoError(t, s.DeleteNode(3, "node1", nil)) // Make sure the coordinate is gone. _, coords, err = s.Coordinate(nil, "node1", nil) @@ -255,7 +254,7 @@ func TestStateStore_Coordinate_Snapshot_Restore(t *testing.T) { // the read side. require.Equal(t, append(updates, badUpdate), dump) - testutil.RunStep(t, "restore the values into a new state store", func(t *testing.T) { + runStep(t, "restore the values into a new state store", func(t *testing.T) { s := testStateStore(t) restore := s.Restore() require.NoError(t, restore.Coordinates(6, dump)) diff --git a/agent/consul/state/intention.go b/agent/consul/state/intention.go index 821288f3bcd78..2417f5741adff 100644 --- a/agent/consul/state/intention.go +++ b/agent/consul/state/intention.go @@ -997,9 +997,8 @@ func (s *Store) intentionTopologyTxn(tx ReadTxn, ws memdb.WatchSet, // TODO(tproxy): One remaining improvement is that this includes non-Connect services (typical services without a proxy) // Ideally those should be excluded as well, since they can't be upstreams/downstreams without a proxy. - // Maybe narrow serviceNamesOfKindTxn to services represented by proxies? (ingress, sidecar- - wildcardMeta := structs.WildcardEnterpriseMetaInPartition(structs.WildcardSpecifier) - index, services, err := serviceNamesOfKindTxn(tx, ws, structs.ServiceKindTypical, *wildcardMeta) + // Maybe narrow serviceNamesOfKindTxn to services represented by proxies? (ingress, sidecar-proxy, terminating) + index, services, err := serviceNamesOfKindTxn(tx, ws, structs.ServiceKindTypical) if err != nil { return index, nil, fmt.Errorf("failed to list ingress service names: %v", err) } @@ -1009,7 +1008,7 @@ func (s *Store) intentionTopologyTxn(tx ReadTxn, ws memdb.WatchSet, if downstreams { // Ingress gateways can only ever be downstreams, since mesh services don't dial them. - index, ingress, err := serviceNamesOfKindTxn(tx, ws, structs.ServiceKindIngressGateway, *wildcardMeta) + index, ingress, err := serviceNamesOfKindTxn(tx, ws, structs.ServiceKindIngressGateway) if err != nil { return index, nil, fmt.Errorf("failed to list ingress service names: %v", err) } diff --git a/agent/consul/state/peering.go b/agent/consul/state/peering.go deleted file mode 100644 index e566532b6867d..0000000000000 --- a/agent/consul/state/peering.go +++ /dev/null @@ -1,647 +0,0 @@ -package state - -import ( - "fmt" - - "github.com/golang/protobuf/proto" - "github.com/hashicorp/go-memdb" - "github.com/hashicorp/go-uuid" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib/maps" - "github.com/hashicorp/consul/proto/pbpeering" -) - -const ( - tablePeering = "peering" - tablePeeringTrustBundles = "peering-trust-bundles" -) - -func peeringTableSchema() *memdb.TableSchema { - return &memdb.TableSchema{ - Name: tablePeering, - Indexes: map[string]*memdb.IndexSchema{ - indexID: { - Name: indexID, - AllowMissing: false, - Unique: true, - Indexer: indexerSingle{ - readIndex: readIndex(indexFromUUIDString), - writeIndex: writeIndex(indexIDFromPeering), - }, - }, - indexName: { - Name: indexName, - AllowMissing: false, - Unique: true, - Indexer: indexerSingleWithPrefix{ - readIndex: indexPeeringFromQuery, - writeIndex: indexFromPeering, - prefixIndex: prefixIndexFromQueryNoNamespace, - }, - }, - }, - } -} - -func peeringTrustBundlesTableSchema() *memdb.TableSchema { - return &memdb.TableSchema{ - Name: tablePeeringTrustBundles, - Indexes: map[string]*memdb.IndexSchema{ - indexID: { - Name: indexID, - AllowMissing: false, - Unique: true, - Indexer: indexerSingle{ - readIndex: indexPeeringFromQuery, // same as peering table since we'll use the query.Value - writeIndex: indexFromPeeringTrustBundle, - }, - }, - }, - } -} - -func indexIDFromPeering(raw interface{}) ([]byte, error) { - p, ok := raw.(*pbpeering.Peering) - if !ok { - return nil, fmt.Errorf("unexpected type %T for pbpeering.Peering index", raw) - } - - if p.ID == "" { - return nil, errMissingValueForIndex - } - - uuid, err := uuidStringToBytes(p.ID) - if err != nil { - return nil, err - } - var b indexBuilder - b.Raw(uuid) - return b.Bytes(), nil -} - -func (s *Store) PeeringReadByID(ws memdb.WatchSet, id string) (uint64, *pbpeering.Peering, error) { - tx := s.db.ReadTxn() - defer tx.Abort() - - peering, err := peeringReadByIDTxn(tx, ws, id) - if err != nil { - return 0, nil, fmt.Errorf("failed to read peering by id: %w", err) - } - if peering == nil { - // Return the tables index so caller can watch it for changes if the peering doesn't exist - return maxIndexWatchTxn(tx, ws, tablePeering), nil, nil - } - - return peering.ModifyIndex, peering, nil -} - -func peeringReadByIDTxn(tx ReadTxn, ws memdb.WatchSet, id string) (*pbpeering.Peering, error) { - watchCh, peeringRaw, err := tx.FirstWatch(tablePeering, indexID, id) - if err != nil { - return nil, fmt.Errorf("failed peering lookup: %w", err) - } - ws.Add(watchCh) - - peering, ok := peeringRaw.(*pbpeering.Peering) - if peeringRaw != nil && !ok { - return nil, fmt.Errorf("invalid type %T", peering) - } - return peering, nil -} - -func (s *Store) PeeringRead(ws memdb.WatchSet, q Query) (uint64, *pbpeering.Peering, error) { - tx := s.db.ReadTxn() - defer tx.Abort() - - return peeringReadTxn(tx, ws, q) -} - -func peeringReadTxn(tx ReadTxn, ws memdb.WatchSet, q Query) (uint64, *pbpeering.Peering, error) { - watchCh, peeringRaw, err := tx.FirstWatch(tablePeering, indexName, q) - if err != nil { - return 0, nil, fmt.Errorf("failed peering lookup: %w", err) - } - - peering, ok := peeringRaw.(*pbpeering.Peering) - if peeringRaw != nil && !ok { - return 0, nil, fmt.Errorf("invalid type %T", peering) - } - ws.Add(watchCh) - - if peering == nil { - // Return the tables index so caller can watch it for changes if the peering doesn't exist - return maxIndexWatchTxn(tx, ws, partitionedIndexEntryName(tablePeering, q.PartitionOrDefault())), nil, nil - } - - return peering.ModifyIndex, peering, nil -} - -func (s *Store) PeeringList(ws memdb.WatchSet, entMeta acl.EnterpriseMeta) (uint64, []*pbpeering.Peering, error) { - tx := s.db.ReadTxn() - defer tx.Abort() - return s.peeringListTxn(ws, tx, entMeta) -} - -func (s *Store) peeringListTxn(ws memdb.WatchSet, tx ReadTxn, entMeta acl.EnterpriseMeta) (uint64, []*pbpeering.Peering, error) { - var ( - iter memdb.ResultIterator - err error - idx uint64 - ) - if entMeta.PartitionOrDefault() == structs.WildcardSpecifier { - iter, err = tx.Get(tablePeering, indexID) - idx = maxIndexWatchTxn(tx, ws, tablePeering) - } else { - iter, err = tx.Get(tablePeering, indexName+"_prefix", entMeta) - idx = maxIndexWatchTxn(tx, ws, partitionedIndexEntryName(tablePeering, entMeta.PartitionOrDefault())) - } - if err != nil { - return 0, nil, fmt.Errorf("failed peering lookup: %v", err) - } - - var result []*pbpeering.Peering - for entry := iter.Next(); entry != nil; entry = iter.Next() { - result = append(result, entry.(*pbpeering.Peering)) - } - - return idx, result, nil -} - -func generatePeeringUUID(tx ReadTxn) (string, error) { - for { - uuid, err := uuid.GenerateUUID() - if err != nil { - return "", fmt.Errorf("failed to generate UUID: %w", err) - } - existing, err := peeringReadByIDTxn(tx, nil, uuid) - if err != nil { - return "", fmt.Errorf("failed to read peering: %w", err) - } - if existing == nil { - return uuid, nil - } - } -} - -func (s *Store) PeeringWrite(idx uint64, p *pbpeering.Peering) error { - tx := s.db.WriteTxn(idx) - defer tx.Abort() - - q := Query{ - Value: p.Name, - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(p.Partition), - } - existingRaw, err := tx.First(tablePeering, indexName, q) - if err != nil { - return fmt.Errorf("failed peering lookup: %w", err) - } - - existing, ok := existingRaw.(*pbpeering.Peering) - if existingRaw != nil && !ok { - return fmt.Errorf("invalid type %T", existingRaw) - } - - if existing != nil { - p.CreateIndex = existing.CreateIndex - p.ID = existing.ID - - } else { - // TODO(peering): consider keeping PeeringState enum elsewhere? - p.State = pbpeering.PeeringState_INITIAL - p.CreateIndex = idx - - p.ID, err = generatePeeringUUID(tx) - if err != nil { - return fmt.Errorf("failed to generate peering id: %w", err) - } - } - p.ModifyIndex = idx - - if err := tx.Insert(tablePeering, p); err != nil { - return fmt.Errorf("failed inserting peering: %w", err) - } - - if err := updatePeeringTableIndexes(tx, idx, p.PartitionOrDefault()); err != nil { - return err - } - return tx.Commit() -} - -// TODO(peering): replace with deferred deletion since this operation -// should involve cleanup of data associated with the peering. -func (s *Store) PeeringDelete(idx uint64, q Query) error { - tx := s.db.WriteTxn(idx) - defer tx.Abort() - - existing, err := tx.First(tablePeering, indexName, q) - if err != nil { - return fmt.Errorf("failed peering lookup: %v", err) - } - - if existing == nil { - return nil - } - - if err := tx.Delete(tablePeering, existing); err != nil { - return fmt.Errorf("failed deleting peering: %v", err) - } - - if err := updatePeeringTableIndexes(tx, idx, q.PartitionOrDefault()); err != nil { - return err - } - return tx.Commit() -} - -func (s *Store) PeeringTerminateByID(idx uint64, id string) error { - tx := s.db.WriteTxn(idx) - defer tx.Abort() - - existing, err := peeringReadByIDTxn(tx, nil, id) - if err != nil { - return fmt.Errorf("failed to read peering %q: %w", id, err) - } - if existing == nil { - return nil - } - - c := proto.Clone(existing) - clone, ok := c.(*pbpeering.Peering) - if !ok { - return fmt.Errorf("invalid type %T, expected *pbpeering.Peering", existing) - } - - clone.State = pbpeering.PeeringState_TERMINATED - clone.ModifyIndex = idx - - if err := tx.Insert(tablePeering, clone); err != nil { - return fmt.Errorf("failed inserting peering: %w", err) - } - - if err := updatePeeringTableIndexes(tx, idx, clone.PartitionOrDefault()); err != nil { - return err - } - return tx.Commit() -} - -// ExportedServicesForPeer returns the list of typical and proxy services -// exported to a peer. -// -// TODO(peering): What to do about terminating gateways? Sometimes terminating -// gateways are the appropriate destination to dial for an upstream mesh -// service. However, that information is handled by observing the terminating -// gateway's config entry, which we wouldn't want to replicate. How would -// client peers know to route through terminating gateways when they're not -// dialing through a remote mesh gateway? -func (s *Store) ExportedServicesForPeer(ws memdb.WatchSet, peerID string) (uint64, *structs.ExportedServiceList, error) { - tx := s.db.ReadTxn() - defer tx.Abort() - - peering, err := peeringReadByIDTxn(tx, ws, peerID) - if err != nil { - return 0, nil, fmt.Errorf("failed to read peering: %w", err) - } - if peering == nil { - return 0, &structs.ExportedServiceList{}, nil - } - - return s.exportedServicesForPeerTxn(ws, tx, peering) -} - -func (s *Store) exportedServicesForPeerTxn(ws memdb.WatchSet, tx ReadTxn, peering *pbpeering.Peering) (uint64, *structs.ExportedServiceList, error) { - maxIdx := peering.ModifyIndex - - entMeta := structs.NodeEnterpriseMetaInPartition(peering.Partition) - idx, raw, err := configEntryTxn(tx, ws, structs.ExportedServices, entMeta.PartitionOrDefault(), entMeta) - if err != nil { - return 0, nil, fmt.Errorf("failed to fetch exported-services config entry: %w", err) - } - if idx > maxIdx { - maxIdx = idx - } - if raw == nil { - return maxIdx, &structs.ExportedServiceList{}, nil - } - - conf, ok := raw.(*structs.ExportedServicesConfigEntry) - if !ok { - return 0, nil, fmt.Errorf("expected type *structs.ExportedServicesConfigEntry, got %T", raw) - } - - var ( - normalSet = make(map[structs.ServiceName]struct{}) - discoSet = make(map[structs.ServiceName]struct{}) - ) - - // TODO(peering): filter the disco chain portion of the results to only be - // things reachable over the mesh to avoid replicating some clutter. - // - // At least one of the following should be true for a name for it to - // replicate: - // - // - are a discovery chain by definition (service-router, service-splitter, service-resolver) - // - have an explicit sidecar kind=connect-proxy - // - use connect native mode - - for _, svc := range conf.Services { - svcMeta := acl.NewEnterpriseMetaWithPartition(entMeta.PartitionOrDefault(), svc.Namespace) - - sawPeer := false - for _, consumer := range svc.Consumers { - name := structs.NewServiceName(svc.Name, &svcMeta) - - if _, ok := normalSet[name]; ok { - // Service was covered by a wildcard that was already accounted for - continue - } - if consumer.PeerName != peering.Name { - continue - } - sawPeer = true - - if svc.Name != structs.WildcardSpecifier { - normalSet[name] = struct{}{} - } - } - - // If the target peer is a consumer, and all services in the namespace are exported, query those service names. - if sawPeer && svc.Name == structs.WildcardSpecifier { - idx, typicalServices, err := serviceNamesOfKindTxn(tx, ws, structs.ServiceKindTypical, svcMeta) - if err != nil { - return 0, nil, fmt.Errorf("failed to get typical service names: %w", err) - } - if idx > maxIdx { - maxIdx = idx - } - for _, s := range typicalServices { - normalSet[s.Service] = struct{}{} - } - - // list all config entries of kind service-resolver, service-router, service-splitter? - idx, discoChains, err := listDiscoveryChainNamesTxn(tx, ws, svcMeta) - if err != nil { - return 0, nil, fmt.Errorf("failed to get discovery chain names: %w", err) - } - if idx > maxIdx { - maxIdx = idx - } - for _, sn := range discoChains { - discoSet[sn] = struct{}{} - } - } - } - - normal := maps.SliceOfKeys(normalSet) - disco := maps.SliceOfKeys(discoSet) - - structs.ServiceList(normal).Sort() - structs.ServiceList(disco).Sort() - - serviceProtocols := make(map[structs.ServiceName]string) - populateProtocol := func(svc structs.ServiceName) error { - if _, ok := serviceProtocols[svc]; ok { - return nil // already processed - } - - idx, protocol, err := protocolForService(tx, ws, svc) - if err != nil { - return fmt.Errorf("failed to get protocol for service: %w", err) - } - - if idx > maxIdx { - maxIdx = idx - } - - serviceProtocols[svc] = protocol - return nil - } - for _, svc := range normal { - if err := populateProtocol(svc); err != nil { - return 0, nil, err - } - } - for _, svc := range disco { - if err := populateProtocol(svc); err != nil { - return 0, nil, err - } - } - - list := &structs.ExportedServiceList{ - Services: normal, - DiscoChains: disco, - ConnectProtocol: serviceProtocols, - } - - return maxIdx, list, nil -} - -// PeeringsForService returns the list of peerings that are associated with the service name provided in the query. -// This is used to configure connect proxies for a given service. The result is generated by querying for exported -// service config entries and filtering for those that match the given service. -// TODO(peering): this implementation does all of the work on read to materialize this list of peerings, we should explore -// writing to a separate index that has service peerings prepared ahead of time should this become a performance bottleneck. -func (s *Store) PeeringsForService(ws memdb.WatchSet, serviceName string, entMeta acl.EnterpriseMeta) (uint64, []*pbpeering.Peering, error) { - tx := s.db.ReadTxn() - defer tx.Abort() - - // short-circuit if the service does not exist in the context of the query -- this prevents "leaking" services - // when there are wildcard rules in place. - if svcIdx, svcExists, err := serviceExists(tx, ws, serviceName, &entMeta, ""); err != nil { - return 0, nil, fmt.Errorf("failed to check if service exists: %w", err) - } else if !svcExists { - // if the service does not exist, return the max index for the services table so caller can watch for changes - return svcIdx, nil, nil - } - // config entries must be defined in the default namespace, so we only need the partition here - meta := structs.DefaultEnterpriseMetaInPartition(entMeta.PartitionOrDefault()) - // return the idx of the config entry that was last modified so caller can watch for changes - idx, peeredServices, err := readPeeredServicesFromConfigEntriesTxn(tx, ws, serviceName, meta) - if err != nil { - return 0, nil, fmt.Errorf("failed to read peered services for service name: %w", err) - } - - var peerings []*pbpeering.Peering - - // lookup the peering for each matching peered service - for _, peeredService := range peeredServices { - readQuery := Query{ - Value: peeredService.PeerName, - EnterpriseMeta: peeredService.Name.EnterpriseMeta, - } - _, peering, err := peeringReadTxn(tx, ws, readQuery) - if err != nil { - return 0, nil, fmt.Errorf("failed to read peering: %w", err) - } - if peering == nil { - continue - } - peerings = append(peerings, peering) - } - // see note above about idx - return idx, peerings, nil -} - -// PeeringTrustBundleRead returns the peering trust bundle for the peer name given as the query value. -func (s *Store) PeeringTrustBundleRead(ws memdb.WatchSet, q Query) (uint64, *pbpeering.PeeringTrustBundle, error) { - tx := s.db.ReadTxn() - defer tx.Abort() - - watchCh, ptbRaw, err := tx.FirstWatch(tablePeeringTrustBundles, indexID, q) - if err != nil { - return 0, nil, fmt.Errorf("failed peering trust bundle lookup: %w", err) - } - - ptb, ok := ptbRaw.(*pbpeering.PeeringTrustBundle) - if ptbRaw != nil && !ok { - return 0, nil, fmt.Errorf("invalid type %T", ptb) - } - ws.Add(watchCh) - - if ptb == nil { - // Return the tables index so caller can watch it for changes if the trust bundle doesn't exist - return maxIndexWatchTxn(tx, ws, partitionedIndexEntryName(tablePeeringTrustBundles, q.PartitionOrDefault())), nil, nil - } - return ptb.ModifyIndex, ptb, nil -} - -// PeeringTrustBundleWrite writes ptb to the state store. If there is an existing trust bundle with the given peer name, -// it will be overwritten. -func (s *Store) PeeringTrustBundleWrite(idx uint64, ptb *pbpeering.PeeringTrustBundle) error { - tx := s.db.WriteTxn(idx) - defer tx.Abort() - - q := Query{ - Value: ptb.PeerName, - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(ptb.Partition), - } - existingRaw, err := tx.First(tablePeeringTrustBundles, indexID, q) - if err != nil { - return fmt.Errorf("failed peering trust bundle lookup: %w", err) - } - - existing, ok := existingRaw.(*pbpeering.PeeringTrustBundle) - if existingRaw != nil && !ok { - return fmt.Errorf("invalid type %T", existingRaw) - } - - if existing != nil { - ptb.CreateIndex = existing.CreateIndex - - } else { - ptb.CreateIndex = idx - } - - ptb.ModifyIndex = idx - - if err := tx.Insert(tablePeeringTrustBundles, ptb); err != nil { - return fmt.Errorf("failed inserting peering trust bundle: %w", err) - } - - if err := updatePeeringTrustBundlesTableIndexes(tx, idx, ptb.PartitionOrDefault()); err != nil { - return err - } - return tx.Commit() -} - -func (s *Store) PeeringTrustBundleDelete(idx uint64, q Query) error { - tx := s.db.WriteTxn(idx) - defer tx.Abort() - - existing, err := tx.First(tablePeeringTrustBundles, indexID, q) - if err != nil { - return fmt.Errorf("failed peering trust bundle lookup: %v", err) - } - - if existing == nil { - return nil - } - - if err := tx.Delete(tablePeeringTrustBundles, existing); err != nil { - return fmt.Errorf("failed deleting peering trust bundle: %v", err) - } - - if err := updatePeeringTrustBundlesTableIndexes(tx, idx, q.PartitionOrDefault()); err != nil { - return err - } - return tx.Commit() -} - -func (s *Snapshot) Peerings() (memdb.ResultIterator, error) { - return s.tx.Get(tablePeering, indexName) -} - -func (s *Snapshot) PeeringTrustBundles() (memdb.ResultIterator, error) { - return s.tx.Get(tablePeeringTrustBundles, indexID) -} - -func (r *Restore) Peering(p *pbpeering.Peering) error { - if err := r.tx.Insert(tablePeering, p); err != nil { - return fmt.Errorf("failed restoring peering: %w", err) - } - - if err := updatePeeringTableIndexes(r.tx, p.ModifyIndex, p.PartitionOrDefault()); err != nil { - return err - } - - return nil -} - -func (r *Restore) PeeringTrustBundle(ptb *pbpeering.PeeringTrustBundle) error { - if err := r.tx.Insert(tablePeeringTrustBundles, ptb); err != nil { - return fmt.Errorf("failed restoring peering trust bundle: %w", err) - } - if err := updatePeeringTrustBundlesTableIndexes(r.tx, ptb.ModifyIndex, ptb.PartitionOrDefault()); err != nil { - return err - } - return nil -} - -// readPeeredServicesFromConfigEntriesTxn queries exported-service config entries to return peers for serviceName -// in the form of a []structs.PeeredService. -func readPeeredServicesFromConfigEntriesTxn( - tx ReadTxn, - ws memdb.WatchSet, - serviceName string, - entMeta *acl.EnterpriseMeta, -) (uint64, []structs.PeeredService, error) { - var results []structs.PeeredService - - // Get all exported-service config entries for that have exports for serviceName. This assumes the result - // has exported services filtered to only those matching serviceName so no futher filtering is needed. - idx, exportedServicesEntries, err := getExportedServiceConfigEntriesTxn(tx, ws, serviceName, entMeta) - if err != nil { - return 0, nil, err - } - - // dedupe results by peer name - resultSet := make(map[string]struct{}) - // filter entries to only those that have a peer consumer defined - for _, entry := range exportedServicesEntries { - for _, service := range entry.Services { - // entries must have consumers - if service.Consumers == nil || len(service.Consumers) == 0 { - continue - } - for _, consumer := range service.Consumers { - // and consumers must have a peer - if consumer.PeerName == "" { - continue - } - // if we get here, we have a peer consumer, but we should dedupe peer names, so skip if it's already in the set - if _, ok := resultSet[consumer.PeerName]; ok { - continue - } - - // if we got here, we can add to the result set - resultSet[consumer.PeerName] = struct{}{} - result := structs.PeeredService{ - Name: structs.NewServiceName(serviceName, entry.GetEnterpriseMeta()), - PeerName: consumer.PeerName, - } - results = append(results, result) - } - } - } - return idx, results, nil -} diff --git a/agent/consul/state/peering_oss.go b/agent/consul/state/peering_oss.go deleted file mode 100644 index 8229d78a66b6f..0000000000000 --- a/agent/consul/state/peering_oss.go +++ /dev/null @@ -1,66 +0,0 @@ -//go:build !consulent -// +build !consulent - -package state - -import ( - "fmt" - "strings" - - "github.com/hashicorp/consul/proto/pbpeering" -) - -func indexPeeringFromQuery(raw interface{}) ([]byte, error) { - q, ok := raw.(Query) - if !ok { - return nil, fmt.Errorf("unexpected type %T for Query index", raw) - } - - var b indexBuilder - b.String(strings.ToLower(q.Value)) - return b.Bytes(), nil -} - -func indexFromPeering(raw interface{}) ([]byte, error) { - p, ok := raw.(*pbpeering.Peering) - if !ok { - return nil, fmt.Errorf("unexpected type %T for structs.Peering index", raw) - } - - if p.Name == "" { - return nil, errMissingValueForIndex - } - - var b indexBuilder - b.String(strings.ToLower(p.Name)) - return b.Bytes(), nil -} - -func indexFromPeeringTrustBundle(raw interface{}) ([]byte, error) { - ptb, ok := raw.(*pbpeering.PeeringTrustBundle) - if !ok { - return nil, fmt.Errorf("unexpected type %T for pbpeering.PeeringTrustBundle index", raw) - } - - if ptb.PeerName == "" { - return nil, errMissingValueForIndex - } - - var b indexBuilder - b.String(strings.ToLower(ptb.PeerName)) - return b.Bytes(), nil -} - -func updatePeeringTableIndexes(tx WriteTxn, idx uint64, _ string) error { - if err := tx.Insert(tableIndex, &IndexEntry{Key: tablePeering, Value: idx}); err != nil { - return fmt.Errorf("failed updating table index: %w", err) - } - return nil -} - -func updatePeeringTrustBundlesTableIndexes(tx WriteTxn, idx uint64, _ string) error { - if err := tx.Insert(tableIndex, &IndexEntry{Key: tablePeeringTrustBundles, Value: idx}); err != nil { - return fmt.Errorf("failed updating table index: %w", err) - } - return nil -} diff --git a/agent/consul/state/peering_test.go b/agent/consul/state/peering_test.go deleted file mode 100644 index 53b80cb9c8a83..0000000000000 --- a/agent/consul/state/peering_test.go +++ /dev/null @@ -1,1096 +0,0 @@ -package state - -import ( - "fmt" - "math/rand" - "testing" - - "github.com/hashicorp/go-memdb" - "github.com/hashicorp/go-uuid" - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/sdk/testutil" -) - -func insertTestPeerings(t *testing.T, s *Store) { - t.Helper() - - tx := s.db.WriteTxn(0) - defer tx.Abort() - - err := tx.Insert(tablePeering, &pbpeering.Peering{ - Name: "foo", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - ID: "9e650110-ac74-4c5a-a6a8-9348b2bed4e9", - State: pbpeering.PeeringState_INITIAL, - CreateIndex: 1, - ModifyIndex: 1, - }) - require.NoError(t, err) - - err = tx.Insert(tablePeering, &pbpeering.Peering{ - Name: "bar", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - ID: "5ebcff30-5509-4858-8142-a8e580f1863f", - State: pbpeering.PeeringState_FAILING, - CreateIndex: 2, - ModifyIndex: 2, - }) - require.NoError(t, err) - - err = tx.Insert(tableIndex, &IndexEntry{ - Key: tablePeering, - Value: 2, - }) - require.NoError(t, err) - require.NoError(t, tx.Commit()) -} - -func insertTestPeeringTrustBundles(t *testing.T, s *Store) { - t.Helper() - - tx := s.db.WriteTxn(0) - defer tx.Abort() - - err := tx.Insert(tablePeeringTrustBundles, &pbpeering.PeeringTrustBundle{ - TrustDomain: "foo.com", - PeerName: "foo", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - RootPEMs: []string{"foo certificate bundle"}, - CreateIndex: 1, - ModifyIndex: 1, - }) - require.NoError(t, err) - - err = tx.Insert(tablePeeringTrustBundles, &pbpeering.PeeringTrustBundle{ - TrustDomain: "bar.com", - PeerName: "bar", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - RootPEMs: []string{"bar certificate bundle"}, - CreateIndex: 2, - ModifyIndex: 2, - }) - require.NoError(t, err) - - err = tx.Insert(tableIndex, &IndexEntry{ - Key: tablePeeringTrustBundles, - Value: 2, - }) - require.NoError(t, err) - require.NoError(t, tx.Commit()) -} - -func TestStateStore_PeeringReadByID(t *testing.T) { - s := NewStateStore(nil) - insertTestPeerings(t, s) - - type testcase struct { - name string - id string - expect *pbpeering.Peering - } - run := func(t *testing.T, tc testcase) { - _, peering, err := s.PeeringReadByID(nil, tc.id) - require.NoError(t, err) - require.Equal(t, tc.expect, peering) - } - tcs := []testcase{ - { - name: "get foo", - id: "9e650110-ac74-4c5a-a6a8-9348b2bed4e9", - expect: &pbpeering.Peering{ - Name: "foo", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - ID: "9e650110-ac74-4c5a-a6a8-9348b2bed4e9", - State: pbpeering.PeeringState_INITIAL, - CreateIndex: 1, - ModifyIndex: 1, - }, - }, - { - name: "get bar", - id: "5ebcff30-5509-4858-8142-a8e580f1863f", - expect: &pbpeering.Peering{ - Name: "bar", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - ID: "5ebcff30-5509-4858-8142-a8e580f1863f", - State: pbpeering.PeeringState_FAILING, - CreateIndex: 2, - ModifyIndex: 2, - }, - }, - { - name: "get non-existent", - id: "05f54e2f-7813-4d4d-ba03-534554c88a18", - expect: nil, - }, - } - for _, tc := range tcs { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} - -func TestStateStore_PeeringRead(t *testing.T) { - s := NewStateStore(nil) - insertTestPeerings(t, s) - - type testcase struct { - name string - query Query - expect *pbpeering.Peering - } - run := func(t *testing.T, tc testcase) { - _, peering, err := s.PeeringRead(nil, tc.query) - require.NoError(t, err) - require.Equal(t, tc.expect, peering) - } - tcs := []testcase{ - { - name: "get foo", - query: Query{ - Value: "foo", - }, - expect: &pbpeering.Peering{ - Name: "foo", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - ID: "9e650110-ac74-4c5a-a6a8-9348b2bed4e9", - State: pbpeering.PeeringState_INITIAL, - CreateIndex: 1, - ModifyIndex: 1, - }, - }, - { - name: "get non-existent baz", - query: Query{ - Value: "baz", - }, - expect: nil, - }, - } - for _, tc := range tcs { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} - -func TestStore_Peering_Watch(t *testing.T) { - s := NewStateStore(nil) - - var lastIdx uint64 - lastIdx++ - - // set up initial write - err := s.PeeringWrite(lastIdx, &pbpeering.Peering{ - Name: "foo", - }) - require.NoError(t, err) - - newWatch := func(t *testing.T, q Query) memdb.WatchSet { - t.Helper() - // set up a watch - ws := memdb.NewWatchSet() - - _, _, err := s.PeeringRead(ws, q) - require.NoError(t, err) - - return ws - } - - t.Run("insert fires watch", func(t *testing.T) { - // watch on non-existent bar - ws := newWatch(t, Query{Value: "bar"}) - - lastIdx++ - err := s.PeeringWrite(lastIdx, &pbpeering.Peering{ - Name: "bar", - }) - require.NoError(t, err) - require.True(t, watchFired(ws)) - - // should find bar peering - idx, p, err := s.PeeringRead(ws, Query{Value: "bar"}) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.NotNil(t, p) - }) - - t.Run("update fires watch", func(t *testing.T) { - // watch on existing foo - ws := newWatch(t, Query{Value: "foo"}) - - // unrelated write shouldn't fire watch - lastIdx++ - err := s.PeeringWrite(lastIdx, &pbpeering.Peering{ - Name: "bar", - }) - require.NoError(t, err) - require.False(t, watchFired(ws)) - - // foo write should fire watch - lastIdx++ - err = s.PeeringWrite(lastIdx, &pbpeering.Peering{ - Name: "foo", - State: pbpeering.PeeringState_FAILING, - }) - require.NoError(t, err) - require.True(t, watchFired(ws)) - - // check foo is updated - idx, p, err := s.PeeringRead(ws, Query{Value: "foo"}) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Equal(t, pbpeering.PeeringState_FAILING, p.State) - }) - - t.Run("delete fires watch", func(t *testing.T) { - // watch on existing foo - ws := newWatch(t, Query{Value: "foo"}) - - // delete on bar shouldn't fire watch - lastIdx++ - require.NoError(t, s.PeeringWrite(lastIdx, &pbpeering.Peering{Name: "bar"})) - lastIdx++ - require.NoError(t, s.PeeringDelete(lastIdx, Query{Value: "bar"})) - require.False(t, watchFired(ws)) - - // delete on foo should fire watch - lastIdx++ - err := s.PeeringDelete(lastIdx, Query{Value: "foo"}) - require.NoError(t, err) - require.True(t, watchFired(ws)) - - // check foo is gone - idx, p, err := s.PeeringRead(ws, Query{Value: "foo"}) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Nil(t, p) - }) -} - -func TestStore_PeeringList(t *testing.T) { - s := NewStateStore(nil) - insertTestPeerings(t, s) - - _, pps, err := s.PeeringList(nil, acl.EnterpriseMeta{}) - require.NoError(t, err) - expect := []*pbpeering.Peering{ - { - Name: "foo", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - ID: "9e650110-ac74-4c5a-a6a8-9348b2bed4e9", - State: pbpeering.PeeringState_INITIAL, - CreateIndex: 1, - ModifyIndex: 1, - }, - { - Name: "bar", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - ID: "5ebcff30-5509-4858-8142-a8e580f1863f", - State: pbpeering.PeeringState_FAILING, - CreateIndex: 2, - ModifyIndex: 2, - }, - } - require.ElementsMatch(t, expect, pps) -} - -func TestStore_PeeringList_Watch(t *testing.T) { - s := NewStateStore(nil) - - var lastIdx uint64 - lastIdx++ // start at 1 - - // track number of expected peerings in state store - var count int - - newWatch := func(t *testing.T, entMeta acl.EnterpriseMeta) memdb.WatchSet { - t.Helper() - // set up a watch - ws := memdb.NewWatchSet() - - _, _, err := s.PeeringList(ws, entMeta) - require.NoError(t, err) - - return ws - } - - t.Run("insert fires watch", func(t *testing.T) { - ws := newWatch(t, acl.EnterpriseMeta{}) - - lastIdx++ - // insert a peering - err := s.PeeringWrite(lastIdx, &pbpeering.Peering{ - Name: "bar", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - }) - require.NoError(t, err) - count++ - - require.True(t, watchFired(ws)) - - // should find bar peering - idx, pp, err := s.PeeringList(ws, acl.EnterpriseMeta{}) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Len(t, pp, count) - }) - - t.Run("update fires watch", func(t *testing.T) { - // set up initial write - lastIdx++ - err := s.PeeringWrite(lastIdx, &pbpeering.Peering{ - Name: "foo", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - }) - require.NoError(t, err) - count++ - - ws := newWatch(t, acl.EnterpriseMeta{}) - - // update peering - lastIdx++ - err = s.PeeringWrite(lastIdx, &pbpeering.Peering{ - Name: "foo", - State: pbpeering.PeeringState_FAILING, - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - }) - require.NoError(t, err) - - require.True(t, watchFired(ws)) - - idx, pp, err := s.PeeringList(ws, acl.EnterpriseMeta{}) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Len(t, pp, count) - }) - - t.Run("delete fires watch", func(t *testing.T) { - // set up initial write - lastIdx++ - err := s.PeeringWrite(lastIdx, &pbpeering.Peering{ - Name: "baz", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - }) - require.NoError(t, err) - count++ - - ws := newWatch(t, acl.EnterpriseMeta{}) - - // delete peering - lastIdx++ - err = s.PeeringDelete(lastIdx, Query{Value: "baz"}) - require.NoError(t, err) - count-- - - require.True(t, watchFired(ws)) - - idx, pp, err := s.PeeringList(ws, acl.EnterpriseMeta{}) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Len(t, pp, count) - }) -} - -func TestStore_PeeringWrite(t *testing.T) { - s := NewStateStore(nil) - insertTestPeerings(t, s) - type testcase struct { - name string - input *pbpeering.Peering - } - run := func(t *testing.T, tc testcase) { - require.NoError(t, s.PeeringWrite(10, tc.input)) - - q := Query{ - Value: tc.input.Name, - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(tc.input.Partition), - } - _, p, err := s.PeeringRead(nil, q) - require.NoError(t, err) - require.NotNil(t, p) - if tc.input.State == 0 { - require.Equal(t, pbpeering.PeeringState_INITIAL, p.State) - } - require.Equal(t, tc.input.Name, p.Name) - } - tcs := []testcase{ - { - name: "create baz", - input: &pbpeering.Peering{ - Name: "baz", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - }, - }, - { - name: "update foo", - input: &pbpeering.Peering{ - Name: "foo", - State: pbpeering.PeeringState_FAILING, - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - }, - }, - } - for _, tc := range tcs { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} - -func TestStore_PeeringWrite_GenerateUUID(t *testing.T) { - rand.Seed(1) - - s := NewStateStore(nil) - - entMeta := structs.NodeEnterpriseMetaInDefaultPartition() - partition := entMeta.PartitionOrDefault() - - for i := 1; i < 11; i++ { - require.NoError(t, s.PeeringWrite(uint64(i), &pbpeering.Peering{ - Name: fmt.Sprintf("peering-%d", i), - Partition: partition, - })) - } - - idx, peerings, err := s.PeeringList(nil, *entMeta) - require.NoError(t, err) - require.Equal(t, uint64(10), idx) - require.Len(t, peerings, 10) - - // Ensure that all assigned UUIDs are unique. - uniq := make(map[string]struct{}) - for _, p := range peerings { - uniq[p.ID] = struct{}{} - } - require.Len(t, uniq, 10) - - // Ensure that the ID of an existing peering cannot be overwritten. - updated := &pbpeering.Peering{ - Name: peerings[0].Name, - Partition: peerings[0].Partition, - } - - // Attempt to overwrite ID. - updated.ID, err = uuid.GenerateUUID() - require.NoError(t, err) - require.NoError(t, s.PeeringWrite(11, updated)) - - q := Query{ - Value: updated.Name, - EnterpriseMeta: *entMeta, - } - idx, got, err := s.PeeringRead(nil, q) - require.NoError(t, err) - require.Equal(t, uint64(11), idx) - require.Equal(t, peerings[0].ID, got.ID) -} - -func TestStore_PeeringDelete(t *testing.T) { - s := NewStateStore(nil) - insertTestPeerings(t, s) - - q := Query{Value: "foo"} - - require.NoError(t, s.PeeringDelete(10, q)) - - _, p, err := s.PeeringRead(nil, q) - require.NoError(t, err) - require.Nil(t, p) -} - -func TestStore_PeeringTerminateByID(t *testing.T) { - s := NewStateStore(nil) - insertTestPeerings(t, s) - - // id corresponding to default/foo - id := "9e650110-ac74-4c5a-a6a8-9348b2bed4e9" - - require.NoError(t, s.PeeringTerminateByID(10, id)) - - _, p, err := s.PeeringReadByID(nil, id) - require.NoError(t, err) - require.Equal(t, pbpeering.PeeringState_TERMINATED, p.State) -} - -func TestStateStore_PeeringTrustBundleRead(t *testing.T) { - s := NewStateStore(nil) - insertTestPeeringTrustBundles(t, s) - - type testcase struct { - name string - query Query - expect *pbpeering.PeeringTrustBundle - } - run := func(t *testing.T, tc testcase) { - _, ptb, err := s.PeeringTrustBundleRead(nil, tc.query) - require.NoError(t, err) - require.Equal(t, tc.expect, ptb) - } - - entMeta := structs.NodeEnterpriseMetaInDefaultPartition() - - tcs := []testcase{ - { - name: "get foo", - query: Query{ - Value: "foo", - EnterpriseMeta: *entMeta, - }, - expect: &pbpeering.PeeringTrustBundle{ - TrustDomain: "foo.com", - PeerName: "foo", - Partition: entMeta.PartitionOrEmpty(), - RootPEMs: []string{"foo certificate bundle"}, - CreateIndex: 1, - ModifyIndex: 1, - }, - }, - { - name: "get non-existent baz", - query: Query{ - Value: "baz", - }, - expect: nil, - }, - } - for _, tc := range tcs { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} - -func TestStore_PeeringTrustBundleWrite(t *testing.T) { - s := NewStateStore(nil) - insertTestPeeringTrustBundles(t, s) - type testcase struct { - name string - input *pbpeering.PeeringTrustBundle - } - run := func(t *testing.T, tc testcase) { - require.NoError(t, s.PeeringTrustBundleWrite(10, tc.input)) - - q := Query{ - Value: tc.input.PeerName, - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(tc.input.Partition), - } - _, ptb, err := s.PeeringTrustBundleRead(nil, q) - require.NoError(t, err) - require.NotNil(t, ptb) - require.Equal(t, tc.input.TrustDomain, ptb.TrustDomain) - require.Equal(t, tc.input.PeerName, ptb.PeerName) - } - tcs := []testcase{ - { - name: "create baz", - input: &pbpeering.PeeringTrustBundle{ - TrustDomain: "baz.com", - PeerName: "baz", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - }, - }, - { - name: "update foo", - input: &pbpeering.PeeringTrustBundle{ - TrustDomain: "foo-updated.com", - PeerName: "foo", - Partition: structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty(), - }, - }, - } - for _, tc := range tcs { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} - -func TestStore_PeeringTrustBundleDelete(t *testing.T) { - s := NewStateStore(nil) - insertTestPeeringTrustBundles(t, s) - - q := Query{Value: "foo"} - - require.NoError(t, s.PeeringTrustBundleDelete(10, q)) - - _, ptb, err := s.PeeringRead(nil, q) - require.NoError(t, err) - require.Nil(t, ptb) -} - -func TestStateStore_ExportedServicesForPeer(t *testing.T) { - s := NewStateStore(nil) - - var lastIdx uint64 - - lastIdx++ - require.NoError(t, s.PeeringWrite(lastIdx, &pbpeering.Peering{ - Name: "my-peering", - })) - - _, p, err := s.PeeringRead(nil, Query{ - Value: "my-peering", - }) - require.NoError(t, err) - require.NotNil(t, p) - - id := p.ID - - defaultEntMeta := structs.DefaultEnterpriseMetaInDefaultPartition() - - newSN := func(name string) structs.ServiceName { - return structs.NewServiceName(name, defaultEntMeta) - } - - ws := memdb.NewWatchSet() - - ensureConfigEntry := func(t *testing.T, entry structs.ConfigEntry) { - t.Helper() - require.NoError(t, entry.Normalize()) - require.NoError(t, entry.Validate()) - - lastIdx++ - require.NoError(t, s.EnsureConfigEntry(lastIdx, entry)) - } - - testutil.RunStep(t, "no exported services", func(t *testing.T) { - expect := &structs.ExportedServiceList{} - - idx, got, err := s.ExportedServicesForPeer(ws, id) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Equal(t, expect, got) - }) - - testutil.RunStep(t, "config entry with exact service names", func(t *testing.T) { - entry := &structs.ExportedServicesConfigEntry{ - Name: "default", - Services: []structs.ExportedService{ - { - Name: "mysql", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-peering"}, - }, - }, - { - Name: "redis", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-peering"}, - }, - }, - { - Name: "mongo", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-other-peering"}, - }, - }, - }, - } - ensureConfigEntry(t, entry) - - require.True(t, watchFired(ws)) - ws = memdb.NewWatchSet() - - expect := &structs.ExportedServiceList{ - Services: []structs.ServiceName{ - { - Name: "mysql", - EnterpriseMeta: *defaultEntMeta, - }, - { - Name: "redis", - EnterpriseMeta: *defaultEntMeta, - }, - }, - ConnectProtocol: map[structs.ServiceName]string{ - newSN("mysql"): "tcp", - newSN("redis"): "tcp", - }, - } - - idx, got, err := s.ExportedServicesForPeer(ws, id) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Equal(t, expect, got) - }) - - testutil.RunStep(t, "config entry with wildcard service name picks up existing service", func(t *testing.T) { - lastIdx++ - require.NoError(t, s.EnsureNode(lastIdx, &structs.Node{ - Node: "foo", Address: "127.0.0.1", - })) - - lastIdx++ - require.NoError(t, s.EnsureService(lastIdx, "foo", &structs.NodeService{ - ID: "billing", Service: "billing", Port: 5000, - })) - - entry := &structs.ExportedServicesConfigEntry{ - Name: "default", - Services: []structs.ExportedService{ - { - Name: "*", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-peering"}, - }, - }, - }, - } - ensureConfigEntry(t, entry) - - require.True(t, watchFired(ws)) - ws = memdb.NewWatchSet() - - expect := &structs.ExportedServiceList{ - Services: []structs.ServiceName{ - { - Name: "billing", - EnterpriseMeta: *defaultEntMeta, - }, - }, - ConnectProtocol: map[structs.ServiceName]string{ - newSN("billing"): "tcp", - }, - } - idx, got, err := s.ExportedServicesForPeer(ws, id) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Equal(t, expect, got) - }) - - testutil.RunStep(t, "config entry with wildcard service names picks up new registrations", func(t *testing.T) { - lastIdx++ - require.NoError(t, s.EnsureService(lastIdx, "foo", &structs.NodeService{ - ID: "payments", Service: "payments", Port: 5000, - })) - - // The proxy will be ignored. - lastIdx++ - require.NoError(t, s.EnsureService(lastIdx, "foo", &structs.NodeService{ - Kind: structs.ServiceKindConnectProxy, - ID: "payments-proxy", - Service: "payments-proxy", - Port: 5000, - })) - - // Ensure everything is L7-capable. - ensureConfigEntry(t, &structs.ProxyConfigEntry{ - Kind: structs.ProxyDefaults, - Name: structs.ProxyConfigGlobal, - Config: map[string]interface{}{ - "protocol": "http", - }, - EnterpriseMeta: *defaultEntMeta, - }) - - ensureConfigEntry(t, &structs.ServiceRouterConfigEntry{ - Kind: structs.ServiceRouter, - Name: "router", - EnterpriseMeta: *defaultEntMeta, - }) - - ensureConfigEntry(t, &structs.ServiceSplitterConfigEntry{ - Kind: structs.ServiceSplitter, - Name: "splitter", - EnterpriseMeta: *defaultEntMeta, - Splits: []structs.ServiceSplit{{Weight: 100}}, - }) - - ensureConfigEntry(t, &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "resolver", - EnterpriseMeta: *defaultEntMeta, - }) - - require.True(t, watchFired(ws)) - ws = memdb.NewWatchSet() - - expect := &structs.ExportedServiceList{ - Services: []structs.ServiceName{ - { - Name: "billing", - EnterpriseMeta: *defaultEntMeta, - }, - { - Name: "payments", - EnterpriseMeta: *defaultEntMeta, - }, - // NOTE: no payments-proxy here - }, - DiscoChains: []structs.ServiceName{ - { - Name: "resolver", - EnterpriseMeta: *defaultEntMeta, - }, - { - Name: "router", - EnterpriseMeta: *defaultEntMeta, - }, - { - Name: "splitter", - EnterpriseMeta: *defaultEntMeta, - }, - }, - ConnectProtocol: map[structs.ServiceName]string{ - newSN("billing"): "http", - newSN("payments"): "http", - newSN("resolver"): "http", - newSN("router"): "http", - newSN("splitter"): "http", - }, - } - idx, got, err := s.ExportedServicesForPeer(ws, id) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Equal(t, expect, got) - }) - - testutil.RunStep(t, "config entry with wildcard service names picks up service deletions", func(t *testing.T) { - lastIdx++ - require.NoError(t, s.DeleteService(lastIdx, "foo", "billing", nil, "")) - - lastIdx++ - require.NoError(t, s.DeleteConfigEntry(lastIdx, structs.ServiceSplitter, "splitter", nil)) - - require.True(t, watchFired(ws)) - ws = memdb.NewWatchSet() - - expect := &structs.ExportedServiceList{ - Services: []structs.ServiceName{ - { - Name: "payments", - EnterpriseMeta: *defaultEntMeta, - }, - // NOTE: no payments-proxy here - }, - DiscoChains: []structs.ServiceName{ - { - Name: "resolver", - EnterpriseMeta: *defaultEntMeta, - }, - { - Name: "router", - EnterpriseMeta: *defaultEntMeta, - }, - }, - ConnectProtocol: map[structs.ServiceName]string{ - newSN("payments"): "http", - newSN("resolver"): "http", - newSN("router"): "http", - }, - } - idx, got, err := s.ExportedServicesForPeer(ws, id) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Equal(t, expect, got) - }) - - testutil.RunStep(t, "deleting the config entry clears exported services", func(t *testing.T) { - expect := &structs.ExportedServiceList{} - - require.NoError(t, s.DeleteConfigEntry(lastIdx, structs.ExportedServices, "default", defaultEntMeta)) - idx, got, err := s.ExportedServicesForPeer(ws, id) - require.NoError(t, err) - require.Equal(t, lastIdx, idx) - require.Equal(t, expect, got) - }) -} - -func TestStateStore_PeeringsForService(t *testing.T) { - type testCase struct { - name string - services []structs.ServiceName - peerings []*pbpeering.Peering - entries []*structs.ExportedServicesConfigEntry - query []string - expect [][]*pbpeering.Peering - expectIdx uint64 - } - - run := func(t *testing.T, tc testCase) { - s := testStateStore(t) - - var lastIdx uint64 - // Create peerings - for _, peering := range tc.peerings { - lastIdx++ - require.NoError(t, s.PeeringWrite(lastIdx, peering)) - - // make sure it got created - q := Query{Value: peering.Name} - _, p, err := s.PeeringRead(nil, q) - require.NoError(t, err) - require.NotNil(t, p) - } - - // Create a Nodes for services - svcNode := &structs.Node{Node: "foo", Address: "127.0.0.1"} - lastIdx++ - require.NoError(t, s.EnsureNode(lastIdx, svcNode)) - - // Create the test services - for _, svc := range tc.services { - lastIdx++ - require.NoError(t, s.EnsureService(lastIdx, svcNode.Node, &structs.NodeService{ - ID: svc.Name, - Service: svc.Name, - Port: 8080, - })) - } - - // Write the config entries. - for _, entry := range tc.entries { - lastIdx++ - require.NoError(t, s.EnsureConfigEntry(lastIdx, entry)) - } - - // Query for peers. - for resultIdx, q := range tc.query { - tx := s.db.ReadTxn() - defer tx.Abort() - idx, peers, err := s.PeeringsForService(nil, q, *acl.DefaultEnterpriseMeta()) - require.NoError(t, err) - require.Equal(t, tc.expectIdx, idx) - - // Verify the result, ignoring generated fields - require.Len(t, peers, len(tc.expect[resultIdx])) - for _, got := range peers { - got.ID = "" - got.ModifyIndex = 0 - got.CreateIndex = 0 - } - require.ElementsMatch(t, tc.expect[resultIdx], peers) - } - } - - cases := []testCase{ - { - name: "no exported services", - services: []structs.ServiceName{ - {Name: "foo"}, - }, - peerings: []*pbpeering.Peering{}, - entries: []*structs.ExportedServicesConfigEntry{}, - query: []string{"foo"}, - expect: [][]*pbpeering.Peering{{}}, - }, - { - name: "service does not exist", - services: []structs.ServiceName{ - {Name: "foo"}, - }, - peerings: []*pbpeering.Peering{}, - entries: []*structs.ExportedServicesConfigEntry{}, - query: []string{"bar"}, - expect: [][]*pbpeering.Peering{{}}, - expectIdx: uint64(2), // catalog services max index - }, - { - name: "config entry with exact service name", - services: []structs.ServiceName{ - {Name: "foo"}, - {Name: "bar"}, - }, - peerings: []*pbpeering.Peering{ - {Name: "peer1", State: pbpeering.PeeringState_INITIAL}, - {Name: "peer2", State: pbpeering.PeeringState_INITIAL}, - }, - entries: []*structs.ExportedServicesConfigEntry{ - { - Name: "ce1", - Services: []structs.ExportedService{ - { - Name: "foo", - Consumers: []structs.ServiceConsumer{ - { - PeerName: "peer1", - }, - }, - }, - { - Name: "bar", - Consumers: []structs.ServiceConsumer{ - { - PeerName: "peer2", - }, - }, - }, - }, - }, - }, - query: []string{"foo", "bar"}, - expect: [][]*pbpeering.Peering{ - { - {Name: "peer1", State: pbpeering.PeeringState_INITIAL}, - }, - { - {Name: "peer2", State: pbpeering.PeeringState_INITIAL}, - }, - }, - expectIdx: uint64(6), // config entries max index - }, - { - name: "config entry with wildcard service name", - services: []structs.ServiceName{ - {Name: "foo"}, - {Name: "bar"}, - }, - peerings: []*pbpeering.Peering{ - {Name: "peer1", State: pbpeering.PeeringState_INITIAL}, - {Name: "peer2", State: pbpeering.PeeringState_INITIAL}, - {Name: "peer3", State: pbpeering.PeeringState_INITIAL}, - }, - entries: []*structs.ExportedServicesConfigEntry{ - { - Name: "ce1", - Services: []structs.ExportedService{ - { - Name: "*", - Consumers: []structs.ServiceConsumer{ - { - PeerName: "peer1", - }, - { - PeerName: "peer2", - }, - }, - }, - { - Name: "bar", - Consumers: []structs.ServiceConsumer{ - { - PeerName: "peer3", - }, - }, - }, - }, - }, - }, - query: []string{"foo", "bar"}, - expect: [][]*pbpeering.Peering{ - { - {Name: "peer1", State: pbpeering.PeeringState_INITIAL}, - {Name: "peer2", State: pbpeering.PeeringState_INITIAL}, - }, - { - {Name: "peer1", State: pbpeering.PeeringState_INITIAL}, - {Name: "peer2", State: pbpeering.PeeringState_INITIAL}, - {Name: "peer3", State: pbpeering.PeeringState_INITIAL}, - }, - }, - expectIdx: uint64(7), - }, - } - - for _, tc := range cases { - testutil.RunStep(t, tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} diff --git a/agent/consul/state/query.go b/agent/consul/state/query.go index a4725b875ae08..b88fbe4fccdb3 100644 --- a/agent/consul/state/query.go +++ b/agent/consul/state/query.go @@ -12,15 +12,10 @@ import ( // Query is a type used to query any single value index that may include an // enterprise identifier. type Query struct { - Value string - PeerName string + Value string acl.EnterpriseMeta } -func (q Query) PeerOrEmpty() string { - return q.PeerName -} - func (q Query) IDValue() string { return q.Value } @@ -142,16 +137,11 @@ func (q BoolQuery) PartitionOrDefault() string { // KeyValueQuery is a type used to query for both a key and a value that may // include an enterprise identifier. type KeyValueQuery struct { - Key string - Value string - PeerName string + Key string + Value string acl.EnterpriseMeta } -func (q KeyValueQuery) PeerOrEmpty() string { - return q.PeerName -} - // NamespaceOrDefault exists because structs.EnterpriseMeta uses a pointer // receiver for this method. Remove once that is fixed. func (q KeyValueQuery) NamespaceOrDefault() string { diff --git a/agent/consul/state/query_oss.go b/agent/consul/state/query_oss.go index 553e7aebe6a9c..0f11dce5f5c93 100644 --- a/agent/consul/state/query_oss.go +++ b/agent/consul/state/query_oss.go @@ -8,7 +8,6 @@ import ( "strings" "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/structs" ) func prefixIndexFromQuery(arg interface{}) ([]byte, error) { @@ -29,29 +28,6 @@ func prefixIndexFromQuery(arg interface{}) ([]byte, error) { return nil, fmt.Errorf("unexpected type %T for Query prefix index", arg) } -func prefixIndexFromQueryWithPeer(arg interface{}) ([]byte, error) { - var b indexBuilder - switch v := arg.(type) { - case *acl.EnterpriseMeta: - return nil, nil - case acl.EnterpriseMeta: - return nil, nil - case Query: - if v.PeerOrEmpty() == "" { - b.String(structs.LocalPeerKeyword) - } else { - b.String(strings.ToLower(v.PeerOrEmpty())) - } - if v.Value == "" { - return b.Bytes(), nil - } - b.String(strings.ToLower(v.Value)) - return b.Bytes(), nil - } - - return nil, fmt.Errorf("unexpected type %T for Query prefix index", arg) -} - func prefixIndexFromQueryNoNamespace(arg interface{}) ([]byte, error) { return prefixIndexFromQuery(arg) } diff --git a/agent/consul/state/schema.go b/agent/consul/state/schema.go index 28a690e48c213..75a2ffa74712f 100644 --- a/agent/consul/state/schema.go +++ b/agent/consul/state/schema.go @@ -22,16 +22,12 @@ func newDBSchema() *memdb.DBSchema { configTableSchema, coordinatesTableSchema, federationStateTableSchema, - freeVirtualIPTableSchema, gatewayServicesTableSchema, indexTableSchema, intentionsTableSchema, - kindServiceNameTableSchema, kvsTableSchema, meshTopologyTableSchema, nodesTableSchema, - peeringTableSchema, - peeringTrustBundlesTableSchema, policiesTableSchema, preparedQueriesTableSchema, rolesTableSchema, @@ -43,6 +39,8 @@ func newDBSchema() *memdb.DBSchema { tokensTableSchema, tombstonesTableSchema, usageTableSchema, + freeVirtualIPTableSchema, + kindServiceNameTableSchema, ) withEnterpriseSchema(db) return db diff --git a/agent/consul/state/schema_oss.go b/agent/consul/state/schema_oss.go index fbe3cd7e56fbf..ea8e8a43e01ab 100644 --- a/agent/consul/state/schema_oss.go +++ b/agent/consul/state/schema_oss.go @@ -3,12 +3,7 @@ package state -import ( - "fmt" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/structs" -) +import "github.com/hashicorp/consul/acl" func partitionedIndexEntryName(entry string, _ string) string { return entry @@ -17,11 +12,3 @@ func partitionedIndexEntryName(entry string, _ string) string { func partitionedAndNamespacedIndexEntryName(entry string, _ *acl.EnterpriseMeta) string { return entry } - -// peeredIndexEntryName returns the peered index key for an importable entity (e.g. checks, services, or nodes). -func peeredIndexEntryName(entry, peerName string) string { - if peerName == "" { - peerName = structs.LocalPeerKeyword - } - return fmt.Sprintf("peer.%s:%s", peerName, entry) -} diff --git a/agent/consul/state/session_test.go b/agent/consul/state/session_test.go index a4eae8a5073da..2e841500a968c 100644 --- a/agent/consul/state/session_test.go +++ b/agent/consul/state/session_test.go @@ -553,7 +553,7 @@ func TestStateStore_Session_Invalidate_DeleteNode(t *testing.T) { if err != nil { t.Fatalf("err: %v", err) } - if err := s.DeleteNode(15, "foo", nil, ""); err != nil { + if err := s.DeleteNode(15, "foo", nil); err != nil { t.Fatalf("err: %v", err) } if !watchFired(ws) { @@ -608,7 +608,7 @@ func TestStateStore_Session_Invalidate_DeleteService(t *testing.T) { if err != nil { t.Fatalf("err: %v", err) } - if err := s.DeleteService(15, "foo", "api", nil, ""); err != nil { + if err := s.DeleteService(15, "foo", "api", nil); err != nil { t.Fatalf("err: %v", err) } if !watchFired(ws) { @@ -709,7 +709,7 @@ func TestStateStore_Session_Invalidate_DeleteCheck(t *testing.T) { if err != nil { t.Fatalf("err: %v", err) } - if err := s.DeleteCheck(15, "foo", "bar", nil, ""); err != nil { + if err := s.DeleteCheck(15, "foo", "bar", nil); err != nil { t.Fatalf("err: %v", err) } if !watchFired(ws) { @@ -777,7 +777,7 @@ func TestStateStore_Session_Invalidate_Key_Unlock_Behavior(t *testing.T) { if err != nil { t.Fatalf("err: %v", err) } - if err := s.DeleteNode(6, "foo", nil, ""); err != nil { + if err := s.DeleteNode(6, "foo", nil); err != nil { t.Fatalf("err: %v", err) } if !watchFired(ws) { @@ -859,7 +859,7 @@ func TestStateStore_Session_Invalidate_Key_Delete_Behavior(t *testing.T) { if err != nil { t.Fatalf("err: %v", err) } - if err := s.DeleteNode(6, "foo", nil, ""); err != nil { + if err := s.DeleteNode(6, "foo", nil); err != nil { t.Fatalf("err: %v", err) } if !watchFired(ws) { diff --git a/agent/consul/state/state_store.go b/agent/consul/state/state_store.go index d8aa98dd98fd4..e795b685787fe 100644 --- a/agent/consul/state/state_store.go +++ b/agent/consul/state/state_store.go @@ -291,9 +291,10 @@ func maxIndexWatchTxn(tx ReadTxn, ws memdb.WatchSet, tables ...string) uint64 { return lindex } -// indexUpdateMaxTxn sets the table's index to the given idx only if it's greater than the current index. -func indexUpdateMaxTxn(tx WriteTxn, idx uint64, key string) error { - ti, err := tx.First(tableIndex, indexID, key) +// indexUpdateMaxTxn is used when restoring entries and sets the table's index to +// the given idx only if it's greater than the current index. +func indexUpdateMaxTxn(tx WriteTxn, idx uint64, table string) error { + ti, err := tx.First(tableIndex, indexID, table) if err != nil { return fmt.Errorf("failed to retrieve existing index: %s", err) } @@ -310,7 +311,7 @@ func indexUpdateMaxTxn(tx WriteTxn, idx uint64, key string) error { } } - if err := tx.Insert(tableIndex, &IndexEntry{key, idx}); err != nil { + if err := tx.Insert(tableIndex, &IndexEntry{table, idx}); err != nil { return fmt.Errorf("failed updating index %s", err) } return nil diff --git a/agent/consul/state/store_integration_test.go b/agent/consul/state/store_integration_test.go index 47afc36d74d86..421205e1425dc 100644 --- a/agent/consul/state/store_integration_test.go +++ b/agent/consul/state/store_integration_test.go @@ -10,7 +10,6 @@ import ( "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/consul/stream" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbsubscribe" ) func TestStore_IntegrationWithEventPublisher_ACLTokenUpdate(t *testing.T) { @@ -27,7 +26,7 @@ func TestStore_IntegrationWithEventPublisher_ACLTokenUpdate(t *testing.T) { // Register the subscription. subscription := &stream.SubscribeRequest{ Topic: topicService, - Subject: stream.StringSubject("nope"), + Subject: stringer("nope"), Token: token.SecretID, } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) @@ -74,7 +73,7 @@ func TestStore_IntegrationWithEventPublisher_ACLTokenUpdate(t *testing.T) { // Register another subscription. subscription2 := &stream.SubscribeRequest{ Topic: topicService, - Subject: stream.StringSubject("nope"), + Subject: stringer("nope"), Token: token.SecretID, } sub2, err := publisher.Subscribe(subscription2) @@ -115,7 +114,7 @@ func TestStore_IntegrationWithEventPublisher_ACLPolicyUpdate(t *testing.T) { // Register the subscription. subscription := &stream.SubscribeRequest{ Topic: topicService, - Subject: stream.StringSubject("nope"), + Subject: stringer("nope"), Token: token.SecretID, } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) @@ -166,7 +165,7 @@ func TestStore_IntegrationWithEventPublisher_ACLPolicyUpdate(t *testing.T) { // Register another subscription. subscription2 := &stream.SubscribeRequest{ Topic: topicService, - Subject: stream.StringSubject("nope"), + Subject: stringer("nope"), Token: token.SecretID, } sub, err = publisher.Subscribe(subscription2) @@ -195,7 +194,7 @@ func TestStore_IntegrationWithEventPublisher_ACLPolicyUpdate(t *testing.T) { // Register another subscription. subscription3 := &stream.SubscribeRequest{ Topic: topicService, - Subject: stream.StringSubject("nope"), + Subject: stringer("nope"), Token: token.SecretID, } sub, err = publisher.Subscribe(subscription3) @@ -237,7 +236,7 @@ func TestStore_IntegrationWithEventPublisher_ACLRoleUpdate(t *testing.T) { // Register the subscription. subscription := &stream.SubscribeRequest{ Topic: topicService, - Subject: stream.StringSubject("nope"), + Subject: stringer("nope"), Token: token.SecretID, } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) @@ -283,7 +282,7 @@ func TestStore_IntegrationWithEventPublisher_ACLRoleUpdate(t *testing.T) { // Register another subscription. subscription2 := &stream.SubscribeRequest{ Topic: topicService, - Subject: stream.StringSubject("nope"), + Subject: stringer("nope"), Token: token.SecretID, } sub, err = publisher.Subscribe(subscription2) @@ -400,7 +399,7 @@ var topicService topic = "test-topic-service" func (s *Store) topicServiceTestHandler(req stream.SubscribeRequest, snap stream.SnapshotAppender) (uint64, error) { key := req.Subject.String() - idx, nodes, err := s.ServiceNodes(nil, key, nil, structs.TODOPeerKeyword) + idx, nodes, err := s.ServiceNodes(nil, key, nil) if err != nil { return idx, err } @@ -432,11 +431,7 @@ func (p nodePayload) HasReadPermission(acl.Authorizer) bool { } func (p nodePayload) Subject() stream.Subject { - return stream.StringSubject(p.key) -} - -func (e nodePayload) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - panic("EventPayloadCARoots does not implement ToSubscriptionEvent") + return stringer(p.key) } func createTokenAndWaitForACLEventPublish(t *testing.T, s *Store) *structs.ACLToken { @@ -464,7 +459,7 @@ func createTokenAndWaitForACLEventPublish(t *testing.T, s *Store) *structs.ACLTo // continuing... req := &stream.SubscribeRequest{ Topic: topicService, - Subject: stream.StringSubject("nope"), + Subject: stringer("nope"), Token: token.SecretID, } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) diff --git a/agent/consul/state/txn.go b/agent/consul/state/txn.go index 087bb4fe82475..4f44b56cc77f1 100644 --- a/agent/consul/state/txn.go +++ b/agent/consul/state/txn.go @@ -153,9 +153,9 @@ func (s *Store) txnNode(tx WriteTxn, idx uint64, op *structs.TxnNodeOp) (structs getNode := func() (*structs.Node, error) { if op.Node.ID != "" { - return getNodeIDTxn(tx, op.Node.ID, op.Node.GetEnterpriseMeta(), op.Node.PeerName) + return getNodeIDTxn(tx, op.Node.ID, op.Node.GetEnterpriseMeta()) } else { - return getNodeTxn(tx, op.Node.Node, op.Node.GetEnterpriseMeta(), op.Node.PeerName) + return getNodeTxn(tx, op.Node.Node, op.Node.GetEnterpriseMeta()) } } @@ -182,11 +182,11 @@ func (s *Store) txnNode(tx WriteTxn, idx uint64, op *structs.TxnNodeOp) (structs entry, err = getNode() case api.NodeDelete: - err = s.deleteNodeTxn(tx, idx, op.Node.Node, op.Node.GetEnterpriseMeta(), op.Node.PeerName) + err = s.deleteNodeTxn(tx, idx, op.Node.Node, op.Node.GetEnterpriseMeta()) case api.NodeDeleteCAS: var ok bool - ok, err = s.deleteNodeCASTxn(tx, idx, op.Node.ModifyIndex, op.Node.Node, op.Node.GetEnterpriseMeta(), op.Node.PeerName) + ok, err = s.deleteNodeCASTxn(tx, idx, op.Node.ModifyIndex, op.Node.Node, op.Node.GetEnterpriseMeta()) if !ok && err == nil { err = fmt.Errorf("failed to delete node %q, index is stale", op.Node.Node) } @@ -219,7 +219,7 @@ func (s *Store) txnNode(tx WriteTxn, idx uint64, op *structs.TxnNodeOp) (structs func (s *Store) txnService(tx WriteTxn, idx uint64, op *structs.TxnServiceOp) (structs.TxnResults, error) { switch op.Verb { case api.ServiceGet: - entry, err := getNodeServiceTxn(tx, nil, op.Node, op.Service.ID, &op.Service.EnterpriseMeta, op.Service.PeerName) + entry, err := getNodeServiceTxn(tx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) switch { case err != nil: return nil, err @@ -233,7 +233,7 @@ func (s *Store) txnService(tx WriteTxn, idx uint64, op *structs.TxnServiceOp) (s if err := ensureServiceTxn(tx, idx, op.Node, false, &op.Service); err != nil { return nil, err } - entry, err := getNodeServiceTxn(tx, nil, op.Node, op.Service.ID, &op.Service.EnterpriseMeta, op.Service.PeerName) + entry, err := getNodeServiceTxn(tx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) return newTxnResultFromNodeServiceEntry(entry), err case api.ServiceCAS: @@ -246,15 +246,15 @@ func (s *Store) txnService(tx WriteTxn, idx uint64, op *structs.TxnServiceOp) (s return nil, err } - entry, err := getNodeServiceTxn(tx, nil, op.Node, op.Service.ID, &op.Service.EnterpriseMeta, op.Service.PeerName) + entry, err := getNodeServiceTxn(tx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) return newTxnResultFromNodeServiceEntry(entry), err case api.ServiceDelete: - err := s.deleteServiceTxn(tx, idx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta, op.Service.PeerName) + err := s.deleteServiceTxn(tx, idx, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) return nil, err case api.ServiceDeleteCAS: - ok, err := s.deleteServiceCASTxn(tx, idx, op.Service.ModifyIndex, op.Node, op.Service.ID, &op.Service.EnterpriseMeta, op.Service.PeerName) + ok, err := s.deleteServiceCASTxn(tx, idx, op.Service.ModifyIndex, op.Node, op.Service.ID, &op.Service.EnterpriseMeta) if !ok && err == nil { return nil, fmt.Errorf("failed to delete service %q on node %q, index is stale", op.Service.ID, op.Node) } @@ -284,7 +284,7 @@ func (s *Store) txnCheck(tx WriteTxn, idx uint64, op *structs.TxnCheckOp) (struc switch op.Verb { case api.CheckGet: - _, entry, err = getNodeCheckTxn(tx, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta, op.Check.PeerName) + _, entry, err = getNodeCheckTxn(tx, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta) if entry == nil && err == nil { err = fmt.Errorf("check %q on node %q doesn't exist", op.Check.CheckID, op.Check.Node) } @@ -292,7 +292,7 @@ func (s *Store) txnCheck(tx WriteTxn, idx uint64, op *structs.TxnCheckOp) (struc case api.CheckSet: err = s.ensureCheckTxn(tx, idx, false, &op.Check) if err == nil { - _, entry, err = getNodeCheckTxn(tx, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta, op.Check.PeerName) + _, entry, err = getNodeCheckTxn(tx, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta) } case api.CheckCAS: @@ -303,14 +303,14 @@ func (s *Store) txnCheck(tx WriteTxn, idx uint64, op *structs.TxnCheckOp) (struc err = fmt.Errorf("failed to set check %q on node %q, index is stale", entry.CheckID, entry.Node) break } - _, entry, err = getNodeCheckTxn(tx, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta, op.Check.PeerName) + _, entry, err = getNodeCheckTxn(tx, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta) case api.CheckDelete: - err = s.deleteCheckTxn(tx, idx, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta, op.Check.PeerName) + err = s.deleteCheckTxn(tx, idx, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta) case api.CheckDeleteCAS: var ok bool - ok, err = s.deleteCheckCASTxn(tx, idx, op.Check.ModifyIndex, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta, op.Check.PeerName) + ok, err = s.deleteCheckCASTxn(tx, idx, op.Check.ModifyIndex, op.Check.Node, op.Check.CheckID, &op.Check.EnterpriseMeta) if !ok && err == nil { err = fmt.Errorf("failed to delete check %q on node %q, index is stale", op.Check.CheckID, op.Check.Node) } diff --git a/agent/consul/state/txn_test.go b/agent/consul/state/txn_test.go index f98325df3b8c4..17adc2bc36385 100644 --- a/agent/consul/state/txn_test.go +++ b/agent/consul/state/txn_test.go @@ -196,7 +196,7 @@ func TestStateStore_Txn_Node(t *testing.T) { require.Equal(t, expected, results) // Pull the resulting state store contents. - idx, actual, err := s.Nodes(nil, nil, "") + idx, actual, err := s.Nodes(nil, nil) require.NoError(t, err) if idx != 8 { t.Fatalf("bad index: %d", idx) @@ -311,7 +311,7 @@ func TestStateStore_Txn_Service(t *testing.T) { require.Equal(t, expected, results) // Pull the resulting state store contents. - idx, actual, err := s.NodeServices(nil, "node1", nil, "") + idx, actual, err := s.NodeServices(nil, "node1", nil) require.NoError(t, err) if idx != 6 { t.Fatalf("bad index: %d", idx) @@ -464,7 +464,7 @@ func TestStateStore_Txn_Checks(t *testing.T) { require.Equal(t, expected, results) // Pull the resulting state store contents. - idx, actual, err := s.NodeChecks(nil, "node1", nil, "") + idx, actual, err := s.NodeChecks(nil, "node1", nil) require.NoError(t, err) if idx != 6 { t.Fatalf("bad index: %d", idx) diff --git a/agent/consul/state/usage_test.go b/agent/consul/state/usage_test.go index 7b0f11f8f38e8..3831d9c76d595 100644 --- a/agent/consul/state/usage_test.go +++ b/agent/consul/state/usage_test.go @@ -38,7 +38,7 @@ func TestStateStore_Usage_NodeUsage_Delete(t *testing.T) { require.Equal(t, idx, uint64(1)) require.Equal(t, usage.Nodes, 2) - require.NoError(t, s.DeleteNode(2, "node2", nil, "")) + require.NoError(t, s.DeleteNode(2, "node2", nil)) idx, usage, err = s.NodeUsage() require.NoError(t, err) require.Equal(t, idx, uint64(2)) @@ -152,7 +152,7 @@ func TestStateStore_Usage_ServiceUsage_DeleteNode(t *testing.T) { require.Equal(t, 1, usage.ConnectServiceInstances[string(structs.ServiceKindConnectProxy)]) require.Equal(t, 1, usage.ConnectServiceInstances[connectNativeInstancesTable]) - require.NoError(t, s.DeleteNode(4, "node1", nil, "")) + require.NoError(t, s.DeleteNode(4, "node1", nil)) idx, usage, err = s.ServiceUsage() require.NoError(t, err) diff --git a/agent/consul/stream/event.go b/agent/consul/stream/event.go index 708420de2ff64..b3936a49b725b 100644 --- a/agent/consul/stream/event.go +++ b/agent/consul/stream/event.go @@ -8,7 +8,6 @@ import ( "fmt" "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/proto/pbsubscribe" ) // Topic is an identifier that partitions events. A subscription will only receive @@ -23,7 +22,11 @@ type Subject fmt.Stringer // SubjectNone is used when all events on a given topic are "global" and not // further partitioned by subject. For example: the "CA Roots" topic which is // used to notify subscribers when the global set CA root certificates changes. -const SubjectNone StringSubject = "none" +const SubjectNone stringer = "none" + +type stringer string + +func (s stringer) String() string { return string(s) } // Event is a structure with identifiers and a payload. Events are Published to // EventPublisher and returned to Subscribers. @@ -47,10 +50,6 @@ type Payload interface { // it is usually the normalized resource name (including the partition and // namespace if applicable). Subject() Subject - - // ToSubscriptionEvent is used to convert streaming events to their - // serializable equivalent. - ToSubscriptionEvent(idx uint64) *pbsubscribe.Event } // PayloadEvents is a Payload that may be returned by Subscription.Next when @@ -114,26 +113,6 @@ func (PayloadEvents) Subject() Subject { panic("PayloadEvents does not implement Subject") } -func (p PayloadEvents) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - return &pbsubscribe.Event{ - Index: idx, - Payload: &pbsubscribe.Event_EventBatch{ - EventBatch: &pbsubscribe.EventBatch{ - Events: batchEventsFromEventSlice(p.Items), - }, - }, - } -} - -func batchEventsFromEventSlice(events []Event) []*pbsubscribe.Event { - result := make([]*pbsubscribe.Event, len(events)) - for i := range events { - event := events[i] - result[i] = event.Payload.ToSubscriptionEvent(event.Index) - } - return result -} - // IsEndOfSnapshot returns true if this is a framing event that indicates the // snapshot has completed. Subsequent events from Subscription.Next will be // streamed as they occur. @@ -167,42 +146,18 @@ func (framingEvent) Subject() Subject { panic("framing events do not implement Subject") } -func (framingEvent) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - panic("framingEvent does not implement ToSubscriptionEvent") -} - type endOfSnapshot struct { framingEvent } -func (s endOfSnapshot) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - return &pbsubscribe.Event{ - Index: idx, - Payload: &pbsubscribe.Event_EndOfSnapshot{EndOfSnapshot: true}, - } -} - type newSnapshotToFollow struct { framingEvent } -func (s newSnapshotToFollow) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - return &pbsubscribe.Event{ - Index: idx, - Payload: &pbsubscribe.Event_NewSnapshotToFollow{NewSnapshotToFollow: true}, - } -} - type closeSubscriptionPayload struct { tokensSecretIDs []string } -// closeSubscriptionPayload is only used internally and does not correspond to -// a subscription event that would be sent to clients. -func (s closeSubscriptionPayload) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - panic("closeSubscriptionPayload does not implement ToSubscriptionEvent") -} - func (closeSubscriptionPayload) HasReadPermission(acl.Authorizer) bool { return false } diff --git a/agent/consul/stream/event_publisher.go b/agent/consul/stream/event_publisher.go index 8e4f5b6edfa66..2cd0564ff7bf4 100644 --- a/agent/consul/stream/event_publisher.go +++ b/agent/consul/stream/event_publisher.go @@ -351,7 +351,7 @@ func (s *subscriptions) closeAll() { for _, byRequest := range s.byToken { for _, sub := range byRequest { - sub.shutDown() + sub.forceClose() } } } diff --git a/agent/consul/stream/event_publisher_test.go b/agent/consul/stream/event_publisher_test.go index 28256fa113a1c..fbd253830d9a2 100644 --- a/agent/consul/stream/event_publisher_test.go +++ b/agent/consul/stream/event_publisher_test.go @@ -9,8 +9,6 @@ import ( "github.com/stretchr/testify/require" "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/proto/pbsubscribe" - "github.com/hashicorp/consul/sdk/testutil" ) type intTopic int @@ -24,7 +22,7 @@ var testTopic Topic = intTopic(999) func TestEventPublisher_SubscribeWithIndex0(t *testing.T) { req := &SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("sub-key"), + Subject: stringer("sub-key"), } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() @@ -84,11 +82,7 @@ func (p simplePayload) HasReadPermission(acl.Authorizer) bool { return !p.noReadPerm } -func (p simplePayload) Subject() Subject { return StringSubject(p.key) } - -func (p simplePayload) ToSubscriptionEvent(idx uint64) *pbsubscribe.Event { - panic("simplePayload does not implement ToSubscriptionEvent") -} +func (p simplePayload) Subject() Subject { return stringer(p.key) } func registerTestSnapshotHandlers(t *testing.T, publisher *EventPublisher) { t.Helper() @@ -173,10 +167,10 @@ func TestEventPublisher_ShutdownClosesSubscriptions(t *testing.T) { cancel() // Shutdown err = consumeSub(context.Background(), sub1) - require.Equal(t, err, ErrShuttingDown) + require.Equal(t, err, ErrSubForceClosed) _, err = sub2.Next(context.Background()) - require.Equal(t, err, ErrShuttingDown) + require.Equal(t, err, ErrSubForceClosed) } func consumeSub(ctx context.Context, sub *Subscription) error { @@ -194,7 +188,7 @@ func consumeSub(ctx context.Context, sub *Subscription) error { func TestEventPublisher_SubscribeWithIndex0_FromCache(t *testing.T) { req := &SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("sub-key"), + Subject: stringer("sub-key"), } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() @@ -240,7 +234,7 @@ func TestEventPublisher_SubscribeWithIndex0_FromCache(t *testing.T) { func TestEventPublisher_SubscribeWithIndexNotZero_CanResume(t *testing.T) { req := &SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("sub-key"), + Subject: stringer("sub-key"), } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() @@ -255,7 +249,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_CanResume(t *testing.T) { // splicing the topic buffer onto the snapshot. publisher.publishEvent([]Event{testSnapshotEvent}) - testutil.RunStep(t, "start a subscription and unsub", func(t *testing.T) { + runStep(t, "start a subscription and unsub", func(t *testing.T) { sub, err := publisher.Subscribe(req) require.NoError(t, err) defer sub.Unsubscribe() @@ -270,7 +264,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_CanResume(t *testing.T) { require.Equal(t, uint64(1), next.Index) }) - testutil.RunStep(t, "resume the subscription", func(t *testing.T) { + runStep(t, "resume the subscription", func(t *testing.T) { newReq := *req newReq.Index = 1 sub, err := publisher.Subscribe(&newReq) @@ -294,7 +288,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_CanResume(t *testing.T) { func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshot(t *testing.T) { req := &SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("sub-key"), + Subject: stringer("sub-key"), } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() @@ -305,7 +299,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshot(t *testing.T) { // Include the same event in the topicBuffer publisher.publishEvent([]Event{testSnapshotEvent}) - testutil.RunStep(t, "start a subscription and unsub", func(t *testing.T) { + runStep(t, "start a subscription and unsub", func(t *testing.T) { sub, err := publisher.Subscribe(req) require.NoError(t, err) defer sub.Unsubscribe() @@ -326,11 +320,11 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshot(t *testing.T) { Payload: simplePayload{key: "sub-key", value: "event-3"}, } - testutil.RunStep(t, "publish an event while unsubed", func(t *testing.T) { + runStep(t, "publish an event while unsubed", func(t *testing.T) { publisher.publishEvent([]Event{nextEvent}) }) - testutil.RunStep(t, "resume the subscription", func(t *testing.T) { + runStep(t, "resume the subscription", func(t *testing.T) { newReq := *req newReq.Index = 1 sub, err := publisher.Subscribe(&newReq) @@ -351,7 +345,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshot(t *testing.T) { func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshotFromCache(t *testing.T) { req := &SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("sub-key"), + Subject: stringer("sub-key"), } ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() @@ -366,7 +360,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshotFromCache(t *testin // splicing the topic buffer onto the snapshot. publisher.publishEvent([]Event{testSnapshotEvent}) - testutil.RunStep(t, "start a subscription and unsub", func(t *testing.T) { + runStep(t, "start a subscription and unsub", func(t *testing.T) { sub, err := publisher.Subscribe(req) require.NoError(t, err) defer sub.Unsubscribe() @@ -387,7 +381,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshotFromCache(t *testin Payload: simplePayload{key: "sub-key", value: "event-3"}, } - testutil.RunStep(t, "publish an event while unsubed", func(t *testing.T) { + runStep(t, "publish an event while unsubed", func(t *testing.T) { publisher.publishEvent([]Event{nextEvent}) }) @@ -395,7 +389,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshotFromCache(t *testin return 0, fmt.Errorf("error should not be seen, cache should have been used") } - testutil.RunStep(t, "resume the subscription", func(t *testing.T) { + runStep(t, "resume the subscription", func(t *testing.T) { newReq := *req newReq.Index = 1 sub, err := publisher.Subscribe(&newReq) @@ -420,7 +414,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshotFromCache(t *testin func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshot_WithCache(t *testing.T) { req := &SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("sub-key"), + Subject: stringer("sub-key"), Index: 1, } @@ -453,7 +447,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshot_WithCache(t *testi publisher.publishEvent([]Event{testSnapshotEvent}) publisher.publishEvent([]Event{nextEvent}) - testutil.RunStep(t, "start a subscription and unsub", func(t *testing.T) { + runStep(t, "start a subscription and unsub", func(t *testing.T) { sub, err := publisher.Subscribe(req) require.NoError(t, err) defer sub.Unsubscribe() @@ -477,7 +471,7 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshot_WithCache(t *testi return 0, fmt.Errorf("error should not be seen, cache should have been used") } - testutil.RunStep(t, "resume the subscription", func(t *testing.T) { + runStep(t, "resume the subscription", func(t *testing.T) { newReq := *req newReq.Index = 0 sub, err := publisher.Subscribe(&newReq) @@ -495,10 +489,17 @@ func TestEventPublisher_SubscribeWithIndexNotZero_NewSnapshot_WithCache(t *testi }) } +func runStep(t *testing.T, name string, fn func(t *testing.T)) { + t.Helper() + if !t.Run(name, fn) { + t.FailNow() + } +} + func TestEventPublisher_Unsubscribe_ClosesSubscription(t *testing.T) { req := &SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("sub-key"), + Subject: stringer("sub-key"), } ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() @@ -521,7 +522,7 @@ func TestEventPublisher_Unsubscribe_ClosesSubscription(t *testing.T) { func TestEventPublisher_Unsubscribe_FreesResourcesWhenThereAreNoSubscribers(t *testing.T) { req := &SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("sub-key"), + Subject: stringer("sub-key"), } publisher := NewEventPublisher(time.Second) diff --git a/agent/consul/stream/string_types.go b/agent/consul/stream/string_types.go deleted file mode 100644 index 568f972991b2d..0000000000000 --- a/agent/consul/stream/string_types.go +++ /dev/null @@ -1,11 +0,0 @@ -package stream - -// StringSubject can be used as a Subject for Events sent to the EventPublisher -type StringSubject string - -func (s StringSubject) String() string { return string(s) } - -// StringTopic can be used as a Topic for Events sent to the EventPublisher -type StringTopic string - -func (s StringTopic) String() string { return string(s) } diff --git a/agent/consul/stream/subscription.go b/agent/consul/stream/subscription.go index 9e6c47e6f080b..28ca50c3a1614 100644 --- a/agent/consul/stream/subscription.go +++ b/agent/consul/stream/subscription.go @@ -21,21 +21,12 @@ const ( // subStateUnsub indicates the subscription was closed by the caller, and // will not return new events. subStateUnsub = 2 - - // subStateShutting down indicates the subscription was closed due to - // the server being shut down. - subStateShuttingDown = 3 ) // ErrSubForceClosed is a error signalling the subscription has been // closed. The client should Unsubscribe, then re-Subscribe. var ErrSubForceClosed = errors.New("subscription closed by server, client must reset state and resubscribe") -// ErrShuttingDown is an error to signal that the subscription has -// been closed because the server is shutting down. The client should -// subscribe to a different server to get streaming event updates. -var ErrShuttingDown = errors.New("subscription closed by server, server is shutting down") - // Subscription provides events on a Topic. Events may be filtered by Key. // Events are returned by Next(), and may start with a Snapshot of events. type Subscription struct { @@ -126,8 +117,6 @@ func (s *Subscription) requireStateOpen() error { switch atomic.LoadUint32(&s.state) { case subStateForceClosed: return ErrSubForceClosed - case subStateShuttingDown: - return ErrShuttingDown case subStateUnsub: return fmt.Errorf("subscription was closed by unsubscribe") default: @@ -156,13 +145,6 @@ func (s *Subscription) forceClose() { } } -// Close the subscription and indicate that the server is being shut down. -func (s *Subscription) shutDown() { - if atomic.CompareAndSwapUint32(&s.state, subStateOpen, subStateShuttingDown) { - close(s.closed) - } -} - // Unsubscribe the subscription, freeing resources. func (s *Subscription) Unsubscribe() { if atomic.CompareAndSwapUint32(&s.state, subStateOpen, subStateUnsub) { diff --git a/agent/consul/stream/subscription_test.go b/agent/consul/stream/subscription_test.go index 80aed3dbb3ac5..b6e0f1a5fe904 100644 --- a/agent/consul/stream/subscription_test.go +++ b/agent/consul/stream/subscription_test.go @@ -29,7 +29,7 @@ func TestSubscription(t *testing.T) { req := SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("test"), + Subject: stringer("test"), } sub := newSubscription(req, startHead, noopUnSub) @@ -103,7 +103,7 @@ func TestSubscription_Close(t *testing.T) { req := SubscribeRequest{ Topic: testTopic, - Subject: StringSubject("test"), + Subject: stringer("test"), } sub := newSubscription(req, startHead, noopUnSub) diff --git a/agent/consul/txn_endpoint_test.go b/agent/consul/txn_endpoint_test.go index 62aca0f7aa1ab..868ea3b813f03 100644 --- a/agent/consul/txn_endpoint_test.go +++ b/agent/consul/txn_endpoint_test.go @@ -234,7 +234,7 @@ func TestTxn_Apply(t *testing.T) { t.Fatalf("bad: %v", d) } - _, n, err := state.GetNode("foo", nil, "") + _, n, err := state.GetNode("foo", nil) if err != nil { t.Fatalf("err: %v", err) } @@ -242,7 +242,7 @@ func TestTxn_Apply(t *testing.T) { t.Fatalf("bad: %v", err) } - _, s, err := state.NodeService(nil, "foo", "svc-foo", nil, "") + _, s, err := state.NodeService("foo", "svc-foo", nil) if err != nil { t.Fatalf("err: %v", err) } @@ -250,7 +250,7 @@ func TestTxn_Apply(t *testing.T) { t.Fatalf("bad: %v", err) } - _, c, err := state.NodeCheck("foo", types.CheckID("check-foo"), nil, "") + _, c, err := state.NodeCheck("foo", types.CheckID("check-foo"), nil) if err != nil { t.Fatalf("err: %v", err) } diff --git a/agent/coordinate_endpoint.go b/agent/coordinate_endpoint.go index bb4f328ede669..fc9d86bd6c474 100644 --- a/agent/coordinate_endpoint.go +++ b/agent/coordinate_endpoint.go @@ -15,7 +15,7 @@ func (s *HTTPHandlers) checkCoordinateDisabled() error { if !s.agent.config.DisableCoordinates { return nil } - return HTTPError{StatusCode: http.StatusUnauthorized, Reason: "Coordinate support disabled"} + return UnauthorizedError{Reason: "Coordinate support disabled"} } // sorter wraps a coordinate list and implements the sort.Interface to sort by @@ -154,7 +154,7 @@ func (s *HTTPHandlers) CoordinateUpdate(resp http.ResponseWriter, req *http.Requ args := structs.CoordinateUpdateRequest{} if err := decodeBody(req.Body, &args); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } s.parseDC(req, &args.Datacenter) s.parseToken(req, &args.Token) diff --git a/agent/coordinate_endpoint_test.go b/agent/coordinate_endpoint_test.go index 331451641f3a7..ff38d83227213 100644 --- a/agent/coordinate_endpoint_test.go +++ b/agent/coordinate_endpoint_test.go @@ -39,14 +39,10 @@ func TestCoordinate_Disabled_Response(t *testing.T) { req, _ := http.NewRequest("PUT", "/should/not/care", nil) resp := httptest.NewRecorder() obj, err := tt(resp, req) - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 401 { - t.Fatalf("expected status 401 but got %d", err.StatusCode) - } - } else { - t.Fatalf("expected HTTP error but got %v", err) + err, ok := err.(UnauthorizedError) + if !ok { + t.Fatalf("expected unauthorized error but got %v", err) } - if obj != nil { t.Fatalf("bad: %#v", obj) } diff --git a/agent/discovery_chain_endpoint.go b/agent/discovery_chain_endpoint.go index 4f762faf04440..94cfe04324f63 100644 --- a/agent/discovery_chain_endpoint.go +++ b/agent/discovery_chain_endpoint.go @@ -22,7 +22,7 @@ func (s *HTTPHandlers) DiscoveryChainRead(resp http.ResponseWriter, req *http.Re args.Name = strings.TrimPrefix(req.URL.Path, "/v1/discovery-chain/") if args.Name == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing chain name"} + return nil, BadRequestError{Reason: "Missing chain name"} } args.EvaluateInDatacenter = req.URL.Query().Get("compile-dc") @@ -35,12 +35,12 @@ func (s *HTTPHandlers) DiscoveryChainRead(resp http.ResponseWriter, req *http.Re if req.Method == "POST" { var raw map[string]interface{} if err := decodeBody(req.Body, &raw); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decoding failed: %v", err)} } apiReq, err := decodeDiscoveryChainReadRequest(raw) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decoding failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decoding failed: %v", err)} } args.OverrideProtocol = apiReq.OverrideProtocol @@ -49,7 +49,7 @@ func (s *HTTPHandlers) DiscoveryChainRead(resp http.ResponseWriter, req *http.Re if apiReq.OverrideMeshGateway.Mode != "" { _, err := structs.ValidateMeshGatewayMode(string(apiReq.OverrideMeshGateway.Mode)) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Invalid OverrideMeshGateway.Mode parameter"} + return nil, BadRequestError{Reason: "Invalid OverrideMeshGateway.Mode parameter"} } args.OverrideMeshGateway = apiReq.OverrideMeshGateway } diff --git a/agent/discovery_chain_endpoint_test.go b/agent/discovery_chain_endpoint_test.go index 8b4a7e2723491..b93cd45c92ae9 100644 --- a/agent/discovery_chain_endpoint_test.go +++ b/agent/discovery_chain_endpoint_test.go @@ -57,7 +57,8 @@ func TestDiscoveryChainRead(t *testing.T) { resp := httptest.NewRecorder() _, err = a.srv.DiscoveryChainRead(resp, req) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + require.True(t, ok) })) require.True(t, t.Run(method+": read default chain", func(t *testing.T) { diff --git a/agent/event_endpoint.go b/agent/event_endpoint.go index 971cb9deb84d6..3295948132d4d 100644 --- a/agent/event_endpoint.go +++ b/agent/event_endpoint.go @@ -22,7 +22,7 @@ func (s *HTTPHandlers) EventFire(resp http.ResponseWriter, req *http.Request) (i event := &UserEvent{} event.Name = strings.TrimPrefix(req.URL.Path, "/v1/event/fire/") if event.Name == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing name"} + return nil, BadRequestError{Reason: "Missing name"} } // Get the ACL token @@ -52,7 +52,7 @@ func (s *HTTPHandlers) EventFire(resp http.ResponseWriter, req *http.Request) (i // Try to fire the event if err := s.agent.UserEvent(dc, token, event); err != nil { if acl.IsErrPermissionDenied(err) { - return nil, HTTPError{StatusCode: http.StatusForbidden, Reason: acl.ErrPermissionDenied.Error()} + return nil, ForbiddenError{Reason: acl.ErrPermissionDenied.Error()} } resp.WriteHeader(http.StatusInternalServerError) return nil, err diff --git a/agent/event_endpoint_test.go b/agent/event_endpoint_test.go index e921f5aa5f2df..e5f0b39f73582 100644 --- a/agent/event_endpoint_test.go +++ b/agent/event_endpoint_test.go @@ -103,12 +103,8 @@ func TestEventFire_token(t *testing.T) { if !acl.IsErrPermissionDenied(err) { t.Fatalf("bad: %s", err.Error()) } - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 403 { - t.Fatalf("Expected 403 but got %d", err.StatusCode) - } - } else { - t.Fatalf("Expected HTTP Error %v", err) + if err, ok := err.(ForbiddenError); !ok { + t.Fatalf("Expected forbidden but got %v", err) } } } diff --git a/agent/federation_state_endpoint.go b/agent/federation_state_endpoint.go index 4b7757ef827c5..ef807adfafe25 100644 --- a/agent/federation_state_endpoint.go +++ b/agent/federation_state_endpoint.go @@ -11,7 +11,7 @@ import ( func (s *HTTPHandlers) FederationStateGet(resp http.ResponseWriter, req *http.Request) (interface{}, error) { datacenterName := strings.TrimPrefix(req.URL.Path, "/v1/internal/federation-state/") if datacenterName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing datacenter name"} + return nil, BadRequestError{Reason: "Missing datacenter name"} } args := structs.FederationStateQuery{ diff --git a/agent/grpc/private/internal/testservice/simple.proto b/agent/grpc/private/internal/testservice/simple.proto index 31a53308fbed9..9773df134c08c 100644 --- a/agent/grpc/private/internal/testservice/simple.proto +++ b/agent/grpc/private/internal/testservice/simple.proto @@ -2,19 +2,17 @@ syntax = "proto3"; package testservice; -option go_package = "github.com/hashicorp/consul/agent/grpc/private/internal/testservice"; - // Simple service is used to test gRPC plumbing. service Simple { - rpc Something(Req) returns (Resp) {} - rpc Flow(Req) returns (stream Resp) {} + rpc Something(Req) returns (Resp) {} + rpc Flow(Req) returns (stream Resp) {} } message Req { - string Datacenter = 1; + string Datacenter = 1; } message Resp { - string ServerName = 1; - string Datacenter = 2; + string ServerName = 1; + string Datacenter = 2; } diff --git a/agent/grpc/private/services/subscribe/subscribe.go b/agent/grpc/private/services/subscribe/subscribe.go index 3abaa4b55bf72..c1b2f7e2d4f2f 100644 --- a/agent/grpc/private/services/subscribe/subscribe.go +++ b/agent/grpc/private/services/subscribe/subscribe.go @@ -2,6 +2,7 @@ package subscribe import ( "errors" + "fmt" "github.com/hashicorp/go-hclog" "google.golang.org/grpc" @@ -12,6 +13,7 @@ import ( "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/consul/stream" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/proto/pbservice" "github.com/hashicorp/consul/proto/pbsubscribe" ) @@ -59,7 +61,7 @@ func (h *Server) Subscribe(req *pbsubscribe.SubscribeRequest, serverStream pbsub return status.Error(codes.InvalidArgument, "Key is required") } - sub, err := h.Backend.Subscribe(state.PBToStreamSubscribeRequest(req, entMeta)) + sub, err := h.Backend.Subscribe(toStreamSubscribeRequest(req, entMeta)) if err != nil { return err } @@ -82,15 +84,25 @@ func (h *Server) Subscribe(req *pbsubscribe.SubscribeRequest, serverStream pbsub } elog.Trace(event) - - // TODO: This conversion could be cached if needed - e := event.Payload.ToSubscriptionEvent(event.Index) + e := newEventFromStreamEvent(event) if err := serverStream.Send(e); err != nil { return err } } } +func toStreamSubscribeRequest(req *pbsubscribe.SubscribeRequest, entMeta acl.EnterpriseMeta) *stream.SubscribeRequest { + return &stream.SubscribeRequest{ + Topic: req.Topic, + Subject: state.EventSubjectService{ + Key: req.Key, + EnterpriseMeta: entMeta, + }, + Token: req.Token, + Index: req.Index, + } +} + func forwardToDC( req *pbsubscribe.SubscribeRequest, serverStream pbsubscribe.StateChangeSubscription_SubscribeServer, @@ -117,3 +129,48 @@ func forwardToDC( } } } + +func newEventFromStreamEvent(event stream.Event) *pbsubscribe.Event { + e := &pbsubscribe.Event{Index: event.Index} + switch { + case event.IsEndOfSnapshot(): + e.Payload = &pbsubscribe.Event_EndOfSnapshot{EndOfSnapshot: true} + return e + case event.IsNewSnapshotToFollow(): + e.Payload = &pbsubscribe.Event_NewSnapshotToFollow{NewSnapshotToFollow: true} + return e + } + setPayload(e, event.Payload) + return e +} + +func setPayload(e *pbsubscribe.Event, payload stream.Payload) { + switch p := payload.(type) { + case *stream.PayloadEvents: + e.Payload = &pbsubscribe.Event_EventBatch{ + EventBatch: &pbsubscribe.EventBatch{ + Events: batchEventsFromEventSlice(p.Items), + }, + } + case state.EventPayloadCheckServiceNode: + e.Payload = &pbsubscribe.Event_ServiceHealth{ + ServiceHealth: &pbsubscribe.ServiceHealthUpdate{ + Op: p.Op, + // TODO: this could be cached + CheckServiceNode: pbservice.NewCheckServiceNodeFromStructs(p.Value), + }, + } + default: + panic(fmt.Sprintf("unexpected payload: %T: %#v", p, p)) + } +} + +func batchEventsFromEventSlice(events []stream.Event) []*pbsubscribe.Event { + result := make([]*pbsubscribe.Event, len(events)) + for i := range events { + event := events[i] + result[i] = &pbsubscribe.Event{Index: event.Index} + setPayload(result[i], event.Payload) + } + return result +} diff --git a/agent/grpc/private/services/subscribe/subscribe_test.go b/agent/grpc/private/services/subscribe/subscribe_test.go index 0dffc2db8c588..c3195905758b8 100644 --- a/agent/grpc/private/services/subscribe/subscribe_test.go +++ b/agent/grpc/private/services/subscribe/subscribe_test.go @@ -28,7 +28,6 @@ import ( "github.com/hashicorp/consul/proto/pbservice" "github.com/hashicorp/consul/proto/pbsubscribe" "github.com/hashicorp/consul/proto/prototest" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/types" ) @@ -64,7 +63,7 @@ func TestServer_Subscribe_IntegrationWithBackend(t *testing.T) { ids := newCounter() var req *structs.RegisterRequest - testutil.RunStep(t, "register two instances of the redis service", func(t *testing.T) { + runStep(t, "register two instances of the redis service", func(t *testing.T) { req = &structs.RegisterRequest{ Node: "node1", Address: "3.4.5.6", @@ -92,7 +91,7 @@ func TestServer_Subscribe_IntegrationWithBackend(t *testing.T) { require.NoError(t, backend.store.EnsureRegistration(ids.Next("reg3"), req)) }) - testutil.RunStep(t, "register a service by a different name", func(t *testing.T) { + runStep(t, "register a service by a different name", func(t *testing.T) { req := &structs.RegisterRequest{ Node: "other", Address: "2.3.4.5", @@ -117,7 +116,7 @@ func TestServer_Subscribe_IntegrationWithBackend(t *testing.T) { chEvents := make(chan eventOrError, 0) var snapshotEvents []*pbsubscribe.Event - testutil.RunStep(t, "setup a client and subscribe to a topic", func(t *testing.T) { + runStep(t, "setup a client and subscribe to a topic", func(t *testing.T) { streamClient := pbsubscribe.NewStateChangeSubscriptionClient(conn) streamHandle, err := streamClient.Subscribe(ctx, &pbsubscribe.SubscribeRequest{ Topic: pbsubscribe.Topic_ServiceHealth, @@ -132,7 +131,7 @@ func TestServer_Subscribe_IntegrationWithBackend(t *testing.T) { } }) - testutil.RunStep(t, "receive the initial snapshot of events", func(t *testing.T) { + runStep(t, "receive the initial snapshot of events", func(t *testing.T) { expected := []*pbsubscribe.Event{ { Index: ids.For("reg3"), @@ -208,7 +207,7 @@ func TestServer_Subscribe_IntegrationWithBackend(t *testing.T) { prototest.AssertDeepEqual(t, expected, snapshotEvents) }) - testutil.RunStep(t, "update the registration by adding a check", func(t *testing.T) { + runStep(t, "update the registration by adding a check", func(t *testing.T) { req.Check = &structs.HealthCheck{ Node: "node2", CheckID: "check1", @@ -441,7 +440,7 @@ func TestServer_Subscribe_IntegrationWithBackend_ForwardToDC(t *testing.T) { ids := newCounter() var req *structs.RegisterRequest - testutil.RunStep(t, "register three services", func(t *testing.T) { + runStep(t, "register three services", func(t *testing.T) { req = &structs.RegisterRequest{ Node: "other", Address: "2.3.4.5", @@ -487,7 +486,7 @@ func TestServer_Subscribe_IntegrationWithBackend_ForwardToDC(t *testing.T) { chEvents := make(chan eventOrError, 0) var snapshotEvents []*pbsubscribe.Event - testutil.RunStep(t, "setup a client and subscribe to a topic", func(t *testing.T) { + runStep(t, "setup a client and subscribe to a topic", func(t *testing.T) { streamClient := pbsubscribe.NewStateChangeSubscriptionClient(connLocal) streamHandle, err := streamClient.Subscribe(ctx, &pbsubscribe.SubscribeRequest{ Topic: pbsubscribe.Topic_ServiceHealth, @@ -503,7 +502,7 @@ func TestServer_Subscribe_IntegrationWithBackend_ForwardToDC(t *testing.T) { } }) - testutil.RunStep(t, "receive the initial snapshot of events", func(t *testing.T) { + runStep(t, "receive the initial snapshot of events", func(t *testing.T) { expected := []*pbsubscribe.Event{ { Index: ids.Last(), @@ -579,7 +578,7 @@ func TestServer_Subscribe_IntegrationWithBackend_ForwardToDC(t *testing.T) { prototest.AssertDeepEqual(t, expected, snapshotEvents) }) - testutil.RunStep(t, "update the registration by adding a check", func(t *testing.T) { + runStep(t, "update the registration by adding a check", func(t *testing.T) { req.Check = &structs.HealthCheck{ Node: "node2", CheckID: types.CheckID("check1"), @@ -658,7 +657,7 @@ func TestServer_Subscribe_IntegrationWithBackend_FilterEventsByACLToken(t *testi addr := runTestServer(t, NewServer(backend, hclog.New(nil))) token := "this-token-is-good" - testutil.RunStep(t, "create an ACL policy", func(t *testing.T) { + runStep(t, "create an ACL policy", func(t *testing.T) { rules := ` service "foo" { policy = "write" @@ -685,7 +684,7 @@ node "node1" { ids := newCounter() var req *structs.RegisterRequest - testutil.RunStep(t, "register services", func(t *testing.T) { + runStep(t, "register services", func(t *testing.T) { req = &structs.RegisterRequest{ Datacenter: "dc1", Node: "node1", @@ -744,7 +743,7 @@ node "node1" { chEvents := make(chan eventOrError, 0) - testutil.RunStep(t, "setup a client, subscribe to a topic, and receive a snapshot", func(t *testing.T) { + runStep(t, "setup a client, subscribe to a topic, and receive a snapshot", func(t *testing.T) { streamHandle, err := streamClient.Subscribe(ctx, &pbsubscribe.SubscribeRequest{ Topic: pbsubscribe.Topic_ServiceHealth, Key: "foo", @@ -762,7 +761,7 @@ node "node1" { require.True(t, getEvent(t, chEvents).GetEndOfSnapshot()) }) - testutil.RunStep(t, "update the service to receive an event", func(t *testing.T) { + runStep(t, "update the service to receive an event", func(t *testing.T) { req = &structs.RegisterRequest{ Datacenter: "dc1", Node: "node1", @@ -789,7 +788,7 @@ node "node1" { require.Equal(t, int32(1234), service.Port) }) - testutil.RunStep(t, "updates to the service on the denied node, should not send an event", func(t *testing.T) { + runStep(t, "updates to the service on the denied node, should not send an event", func(t *testing.T) { req = &structs.RegisterRequest{ Datacenter: "dc1", Node: "denied", @@ -813,7 +812,7 @@ node "node1" { assertNoEvents(t, chEvents) }) - testutil.RunStep(t, "subscribe to a topic where events are not visible", func(t *testing.T) { + runStep(t, "subscribe to a topic where events are not visible", func(t *testing.T) { streamHandle, err := streamClient.Subscribe(ctx, &pbsubscribe.SubscribeRequest{ Topic: pbsubscribe.Topic_ServiceHealth, Key: "bar", @@ -854,7 +853,7 @@ func TestServer_Subscribe_IntegrationWithBackend_ACLUpdate(t *testing.T) { addr := runTestServer(t, NewServer(backend, hclog.New(nil))) token := "this-token-is-good" - testutil.RunStep(t, "create an ACL policy", func(t *testing.T) { + runStep(t, "create an ACL policy", func(t *testing.T) { rules := ` service "foo" { policy = "write" @@ -887,7 +886,7 @@ node "node1" { chEvents := make(chan eventOrError, 0) - testutil.RunStep(t, "setup a client and subscribe to a topic", func(t *testing.T) { + runStep(t, "setup a client and subscribe to a topic", func(t *testing.T) { streamClient := pbsubscribe.NewStateChangeSubscriptionClient(conn) streamHandle, err := streamClient.Subscribe(ctx, &pbsubscribe.SubscribeRequest{ Topic: pbsubscribe.Topic_ServiceHealth, @@ -900,7 +899,7 @@ node "node1" { require.True(t, getEvent(t, chEvents).GetEndOfSnapshot()) }) - testutil.RunStep(t, "updates to the token should close the stream", func(t *testing.T) { + runStep(t, "updates to the token should close the stream", func(t *testing.T) { tokenID, err := uuid.GenerateUUID() require.NoError(t, err) @@ -941,6 +940,13 @@ func logError(t *testing.T, f func() error) func() { } } +func runStep(t *testing.T, name string, fn func(t *testing.T)) { + t.Helper() + if !t.Run(name, fn) { + t.FailNow() + } +} + func TestNewEventFromSteamEvent(t *testing.T) { type testCase struct { name string @@ -950,7 +956,7 @@ func TestNewEventFromSteamEvent(t *testing.T) { fn := func(t *testing.T, tc testCase) { expected := tc.expected - actual := tc.event.Payload.ToSubscriptionEvent(tc.event.Index) + actual := newEventFromStreamEvent(tc.event) prototest.AssertDeepEqual(t, expected, actual, cmpopts.EquateEmpty()) } diff --git a/agent/grpc/public/forward.go b/agent/grpc/public/forward.go deleted file mode 100644 index 398d33d516d55..0000000000000 --- a/agent/grpc/public/forward.go +++ /dev/null @@ -1,16 +0,0 @@ -package public - -import ( - "context" - - "google.golang.org/grpc/metadata" -) - -func ForwardMetadataContext(ctx context.Context) context.Context { - md, ok := metadata.FromIncomingContext(ctx) - if !ok { - return ctx - } - - return metadata.NewOutgoingContext(ctx, md) -} diff --git a/agent/grpc/public/services/acl/login.go b/agent/grpc/public/services/acl/login.go deleted file mode 100644 index 1a68b1eb2f085..0000000000000 --- a/agent/grpc/public/services/acl/login.go +++ /dev/null @@ -1,92 +0,0 @@ -package acl - -import ( - "context" - "errors" - - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/auth" - "github.com/hashicorp/consul/agent/grpc/public" - "github.com/hashicorp/consul/proto-public/pbacl" -) - -// Login exchanges the presented bearer token for a Consul ACL token using a -// configured auth method. -func (s *Server) Login(ctx context.Context, req *pbacl.LoginRequest) (*pbacl.LoginResponse, error) { - logger := s.Logger.Named("login").With("request_id", public.TraceID()) - logger.Trace("request received") - - if err := s.requireACLsEnabled(logger); err != nil { - return nil, err - } - - entMeta := acl.NewEnterpriseMetaWithPartition(req.Partition, req.Namespace) - - if err := s.ValidateEnterpriseRequest(&entMeta, true); err != nil { - logger.Error("error during enterprise request validation", "error", err.Error()) - return nil, status.Errorf(codes.Internal, err.Error()) - } - - // Forward request to leader in the correct datacenter. - var rsp *pbacl.LoginResponse - handled, err := s.forwardWriteDC(req.Datacenter, func(conn *grpc.ClientConn) error { - var err error - rsp, err = pbacl.NewACLServiceClient(conn).Login(ctx, req) - return err - }, logger) - if handled || err != nil { - return rsp, err - } - - // This is also validated by the TokenWriter, but doing it early saves any - // work done by the validator (e.g. roundtrip to the Kubernetes API server). - if err := s.requireLocalTokens(logger); err != nil { - return nil, err - } - - authMethod, validator, err := s.LoadAuthMethod(req.AuthMethod, &entMeta) - switch { - case errors.Is(err, acl.ErrNotFound): - return nil, status.Errorf(codes.InvalidArgument, "auth method %q not found", req.AuthMethod) - case err != nil: - logger.Error("failed to load auth method", "error", err.Error()) - return nil, status.Error(codes.Internal, "failed to load auth method") - } - - verifiedIdentity, err := validator.ValidateLogin(ctx, req.BearerToken) - if err != nil { - // TODO(agentless): errors returned from validators aren't standardized so - // it's hard to tell whether validation failed because of an invalid bearer - // token or something internal/transient. We currently return Unauthenticated - // for all errors because it's the most likely, but we should make validators - // return a typed or sentinel error instead. - logger.Error("failed to validate login", "error", err.Error()) - return nil, status.Error(codes.Unauthenticated, err.Error()) - } - - description, err := auth.BuildTokenDescription("token created via login", req.Meta) - if err != nil { - logger.Error("failed to build token description", "error", err.Error()) - return nil, status.Error(codes.Internal, err.Error()) - } - - token, err := s.NewLogin().TokenForVerifiedIdentity(verifiedIdentity, authMethod, description) - switch { - case acl.IsErrPermissionDenied(err): - return nil, status.Error(codes.PermissionDenied, err.Error()) - case err != nil: - logger.Error("failed to create token", "error", err.Error()) - return nil, status.Error(codes.Internal, "failed to create token") - } - - return &pbacl.LoginResponse{ - Token: &pbacl.LoginToken{ - AccessorId: token.AccessorID, - SecretId: token.SecretID, - }, - }, nil -} diff --git a/agent/grpc/public/services/acl/login_test.go b/agent/grpc/public/services/acl/login_test.go deleted file mode 100644 index 84b2693f4378d..0000000000000 --- a/agent/grpc/public/services/acl/login_test.go +++ /dev/null @@ -1,256 +0,0 @@ -package acl - -import ( - "context" - "errors" - "fmt" - "testing" - - mock "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/go-hclog" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/authmethod" - "github.com/hashicorp/consul/agent/grpc/public/testutils" - structs "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbacl" -) - -const bearerToken = "bearer-token" - -func TestServer_Login_Success(t *testing.T) { - authMethod := &structs.ACLAuthMethod{} - identity := &authmethod.Identity{} - - validator := NewMockValidator(t) - validator.On("ValidateLogin", mock.Anything, bearerToken). - Return(identity, nil) - - token := &structs.ACLToken{ - AccessorID: "accessor-id", - SecretID: "secret-id", - } - - login := NewMockLogin(t) - login.On("TokenForVerifiedIdentity", identity, authMethod, "token created via login"). - Return(token, nil) - - server := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - LoadAuthMethod: func(methodName string, entMeta *acl.EnterpriseMeta) (*structs.ACLAuthMethod, Validator, error) { - return authMethod, validator, nil - }, - ForwardRPC: noopForwardRPC, - ValidateEnterpriseRequest: noopValidateEnterpriseRequest, - LocalTokensEnabled: noopLocalTokensEnabled, - NewLogin: func() Login { return login }, - }) - - rsp, err := server.Login(context.Background(), &pbacl.LoginRequest{ - BearerToken: bearerToken, - }) - require.NoError(t, err) - require.Equal(t, token.AccessorID, rsp.Token.AccessorId) - require.Equal(t, token.SecretID, rsp.Token.SecretId) -} - -func TestServer_Login_LoadAuthMethodErrors(t *testing.T) { - testCases := map[string]struct { - error error - code codes.Code - }{ - "auth method not found": { - // Note: we wrap the error here to make sure we correctly unwrap it in the handler. - error: fmt.Errorf("%w auth method not found", acl.ErrNotFound), - code: codes.InvalidArgument, - }, - "unexpected error": { - error: errors.New("BOOM"), - code: codes.Internal, - }, - } - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - server := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - LoadAuthMethod: func(methodName string, entMeta *acl.EnterpriseMeta) (*structs.ACLAuthMethod, Validator, error) { - return nil, nil, tc.error - }, - ValidateEnterpriseRequest: noopValidateEnterpriseRequest, - LocalTokensEnabled: noopLocalTokensEnabled, - ForwardRPC: noopForwardRPC, - }) - _, err := server.Login(context.Background(), &pbacl.LoginRequest{ - BearerToken: bearerToken, - }) - require.Error(t, err) - require.Equal(t, tc.code.String(), status.Code(err).String()) - }) - } -} - -func TestServer_Login_ValidateEnterpriseRequest(t *testing.T) { - server := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - ValidateEnterpriseRequest: func(*acl.EnterpriseMeta, bool) error { return errors.New("BOOM") }, - ForwardRPC: noopForwardRPC, - }) - - _, err := server.Login(context.Background(), &pbacl.LoginRequest{ - BearerToken: bearerToken, - }) - require.Error(t, err) - require.Equal(t, codes.Internal.String(), status.Code(err).String()) -} - -func TestServer_Login_ACLsDisabled(t *testing.T) { - server := NewServer(Config{ - ACLsEnabled: false, - Logger: hclog.NewNullLogger(), - ValidateEnterpriseRequest: noopValidateEnterpriseRequest, - ForwardRPC: noopForwardRPC, - LocalTokensEnabled: noopLocalTokensEnabled, - }) - - _, err := server.Login(context.Background(), &pbacl.LoginRequest{ - BearerToken: bearerToken, - }) - require.Error(t, err) - require.Equal(t, codes.FailedPrecondition.String(), status.Code(err).String()) -} - -func TestServer_Login_LocalTokensDisabled(t *testing.T) { - server := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - ValidateEnterpriseRequest: noopValidateEnterpriseRequest, - ForwardRPC: noopForwardRPC, - LocalTokensEnabled: func() bool { return false }, - }) - - _, err := server.Login(context.Background(), &pbacl.LoginRequest{ - BearerToken: bearerToken, - }) - require.Error(t, err) - require.Equal(t, codes.FailedPrecondition.String(), status.Code(err).String()) -} - -func TestServer_Login_ValidateLoginError(t *testing.T) { - validator := NewMockValidator(t) - validator.On("ValidateLogin", mock.Anything, bearerToken). - Return(nil, errors.New("BOOM")) - - server := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - LoadAuthMethod: func(methodName string, entMeta *acl.EnterpriseMeta) (*structs.ACLAuthMethod, Validator, error) { - return &structs.ACLAuthMethod{}, validator, nil - }, - ValidateEnterpriseRequest: noopValidateEnterpriseRequest, - LocalTokensEnabled: noopLocalTokensEnabled, - ForwardRPC: noopForwardRPC, - }) - - _, err := server.Login(context.Background(), &pbacl.LoginRequest{ - BearerToken: bearerToken, - }) - require.Error(t, err) - require.Equal(t, codes.Unauthenticated.String(), status.Code(err).String()) -} - -func TestServer_Login_TokenForVerifiedIdentityErrors(t *testing.T) { - testCases := map[string]struct { - error error - code codes.Code - }{ - "permission denied": { - error: acl.ErrPermissionDenied, - code: codes.PermissionDenied, - }, - "unexpected error": { - error: errors.New("BOOM"), - code: codes.Internal, - }, - } - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - validator := NewMockValidator(t) - validator.On("ValidateLogin", mock.Anything, bearerToken). - Return(&authmethod.Identity{}, nil) - - login := NewMockLogin(t) - login.On("TokenForVerifiedIdentity", mock.Anything, mock.Anything, mock.Anything). - Return(nil, tc.error) - - server := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - LoadAuthMethod: func(methodName string, entMeta *acl.EnterpriseMeta) (*structs.ACLAuthMethod, Validator, error) { - return &structs.ACLAuthMethod{}, validator, nil - }, - ValidateEnterpriseRequest: noopValidateEnterpriseRequest, - LocalTokensEnabled: noopLocalTokensEnabled, - ForwardRPC: noopForwardRPC, - NewLogin: func() Login { return login }, - }) - - _, err := server.Login(context.Background(), &pbacl.LoginRequest{ - BearerToken: bearerToken, - }) - require.Error(t, err) - require.Equal(t, tc.code.String(), status.Code(err).String()) - }) - } -} - -func TestServer_Login_RPCForwarding(t *testing.T) { - validator := NewMockValidator(t) - validator.On("ValidateLogin", mock.Anything, mock.Anything). - Return(&authmethod.Identity{}, nil) - - login := NewMockLogin(t) - login.On("TokenForVerifiedIdentity", mock.Anything, mock.Anything, mock.Anything). - Return(&structs.ACLToken{AccessorID: "leader response"}, nil) - - dc2 := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - LoadAuthMethod: func(methodName string, entMeta *acl.EnterpriseMeta) (*structs.ACLAuthMethod, Validator, error) { - return &structs.ACLAuthMethod{}, validator, nil - }, - ValidateEnterpriseRequest: noopValidateEnterpriseRequest, - LocalTokensEnabled: noopLocalTokensEnabled, - ForwardRPC: noopForwardRPC, - NewLogin: func() Login { return login }, - }) - - leaderConn, err := grpc.Dial(testutils.RunTestServer(t, dc2).String(), grpc.WithInsecure()) - require.NoError(t, err) - - dc1 := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - ForwardRPC: func(info structs.RPCInfo, fn func(*grpc.ClientConn) error) (bool, error) { - if dc := info.RequestDatacenter(); dc != "dc2" { - return false, fmt.Errorf("unexpected target datacenter: %s", dc) - } - return true, fn(leaderConn) - }, - ValidateEnterpriseRequest: noopValidateEnterpriseRequest, - }) - - rsp, err := dc1.Login(context.Background(), &pbacl.LoginRequest{ - BearerToken: bearerToken, - Datacenter: "dc2", - }) - require.NoError(t, err) - require.Equal(t, "leader response", rsp.Token.AccessorId) -} diff --git a/agent/grpc/public/services/acl/logout.go b/agent/grpc/public/services/acl/logout.go deleted file mode 100644 index 4f7fc3767afff..0000000000000 --- a/agent/grpc/public/services/acl/logout.go +++ /dev/null @@ -1,68 +0,0 @@ -package acl - -import ( - "context" - "errors" - - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/auth" - "github.com/hashicorp/consul/agent/grpc/public" - "github.com/hashicorp/consul/proto-public/pbacl" -) - -// Logout destroys the given ACL token once the caller is done with it. -func (s *Server) Logout(ctx context.Context, req *pbacl.LogoutRequest) (*pbacl.LogoutResponse, error) { - logger := s.Logger.Named("logout").With("request_id", public.TraceID()) - logger.Trace("request received") - - if err := s.requireACLsEnabled(logger); err != nil { - return nil, err - } - - if req.Token == "" { - return nil, status.Error(codes.InvalidArgument, "token is required") - } - - // Forward request to leader in the requested datacenter. - var rsp *pbacl.LogoutResponse - handled, err := s.forwardWriteDC(req.Datacenter, func(conn *grpc.ClientConn) error { - var err error - rsp, err = pbacl.NewACLServiceClient(conn).Logout(ctx, req) - return err - }, logger) - if handled || err != nil { - return rsp, err - } - - if err := s.requireLocalTokens(logger); err != nil { - return nil, err - } - - err = s.NewTokenWriter().Delete(req.Token, true) - switch { - case errors.Is(err, auth.ErrCannotWriteGlobalToken): - // Writes to global tokens must be forwarded to the primary DC. - req.Datacenter = s.PrimaryDatacenter - - _, err = s.forwardWriteDC(s.PrimaryDatacenter, func(conn *grpc.ClientConn) error { - var err error - rsp, err = pbacl.NewACLServiceClient(conn).Logout(ctx, req) - return err - }, logger) - return rsp, err - case errors.Is(err, acl.ErrNotFound): - // No token? Pretend the delete was successful (for idempotency). - return &pbacl.LogoutResponse{}, nil - case errors.Is(err, acl.ErrPermissionDenied): - return nil, status.Error(codes.PermissionDenied, err.Error()) - case err != nil: - logger.Error("failed to delete token", "error", err.Error()) - return nil, status.Error(codes.Internal, "failed to delete token") - } - - return &pbacl.LogoutResponse{}, nil -} diff --git a/agent/grpc/public/services/acl/logout_test.go b/agent/grpc/public/services/acl/logout_test.go deleted file mode 100644 index 461b6e249e053..0000000000000 --- a/agent/grpc/public/services/acl/logout_test.go +++ /dev/null @@ -1,224 +0,0 @@ -package acl - -import ( - "context" - "fmt" - "testing" - - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/go-hclog" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/auth" - "github.com/hashicorp/consul/agent/grpc/public/testutils" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbacl" -) - -func TestServer_Logout_Success(t *testing.T) { - secretID := generateID(t) - - tokenWriter := NewMockTokenWriter(t) - tokenWriter.On("Delete", secretID, true).Return(nil) - - server := NewServer(Config{ - ACLsEnabled: true, - InPrimaryDatacenter: true, - ForwardRPC: noopForwardRPC, - LocalTokensEnabled: noopLocalTokensEnabled, - Logger: hclog.NewNullLogger(), - NewTokenWriter: func() TokenWriter { return tokenWriter }, - }) - - _, err := server.Logout(context.Background(), &pbacl.LogoutRequest{ - Token: secretID, - }) - require.NoError(t, err) -} - -func TestServer_Logout_EmptyToken(t *testing.T) { - server := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - }) - - _, err := server.Logout(context.Background(), &pbacl.LogoutRequest{ - Token: "", - }) - require.Error(t, err) - require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.Contains(t, err.Error(), "token is required") -} - -func TestServer_Logout_ACLsDisabled(t *testing.T) { - server := NewServer(Config{ - ACLsEnabled: false, - Logger: hclog.NewNullLogger(), - ValidateEnterpriseRequest: noopValidateEnterpriseRequest, - ForwardRPC: noopForwardRPC, - LocalTokensEnabled: noopLocalTokensEnabled, - }) - - _, err := server.Logout(context.Background(), &pbacl.LogoutRequest{ - Token: generateID(t), - }) - require.Error(t, err) - require.Equal(t, codes.FailedPrecondition.String(), status.Code(err).String()) -} - -func TestServer_Logout_LocalTokensDisabled(t *testing.T) { - server := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - ForwardRPC: noopForwardRPC, - LocalTokensEnabled: func() bool { return false }, - }) - - _, err := server.Logout(context.Background(), &pbacl.LogoutRequest{ - Token: generateID(t), - }) - require.Error(t, err) - require.Equal(t, codes.FailedPrecondition.String(), status.Code(err).String()) - require.Contains(t, err.Error(), "token replication is required") -} - -func TestServer_Logout_NoSuchToken(t *testing.T) { - tokenWriter := NewMockTokenWriter(t) - tokenWriter.On("Delete", mock.Anything, true).Return(acl.ErrNotFound) - - server := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - ForwardRPC: noopForwardRPC, - LocalTokensEnabled: noopLocalTokensEnabled, - NewTokenWriter: func() TokenWriter { return tokenWriter }, - }) - - _, err := server.Logout(context.Background(), &pbacl.LogoutRequest{ - Token: generateID(t), - }) - require.NoError(t, err) -} - -func TestServer_Logout_PermissionDenied(t *testing.T) { - tokenWriter := NewMockTokenWriter(t) - tokenWriter.On("Delete", mock.Anything, true).Return(acl.ErrPermissionDenied) - - server := NewServer(Config{ - ACLsEnabled: true, - InPrimaryDatacenter: true, - ForwardRPC: noopForwardRPC, - LocalTokensEnabled: noopLocalTokensEnabled, - Logger: hclog.NewNullLogger(), - NewTokenWriter: func() TokenWriter { return tokenWriter }, - }) - - _, err := server.Logout(context.Background(), &pbacl.LogoutRequest{ - Token: generateID(t), - }) - require.Error(t, err) - require.Equal(t, codes.PermissionDenied.String(), status.Code(err).String()) -} - -func TestServer_Logout_RPCForwarding(t *testing.T) { - tokenWriter := NewMockTokenWriter(t) - tokenWriter.On("Delete", mock.Anything, true).Return(nil) - - dc1 := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - NewTokenWriter: func() TokenWriter { return tokenWriter }, - ForwardRPC: noopForwardRPC, - LocalTokensEnabled: func() bool { return true }, - }) - - dc1Conn, err := grpc.Dial( - testutils.RunTestServer(t, dc1).String(), - grpc.WithInsecure(), - ) - require.NoError(t, err) - - dc2 := NewServer(Config{ - ACLsEnabled: true, - Logger: hclog.NewNullLogger(), - ForwardRPC: func(rpcInfo structs.RPCInfo, fn func(*grpc.ClientConn) error) (bool, error) { - return true, fn(dc1Conn) - }, - }) - _, err = dc2.Logout(context.Background(), &pbacl.LogoutRequest{ - Token: generateID(t), - }) - require.NoError(t, err) -} - -func TestServer_Logout_GlobalWritesForwardedToPrimaryDC(t *testing.T) { - tokenWriter := NewMockTokenWriter(t) - tokenWriter.On("Delete", mock.Anything, true).Return(nil) - - // This test checks that requests to delete global tokens are forwared to the - // primary datacenter by: - // - // 1. Setting up 2 servers (1 in the primary DC, 1 in the secondary). - // 2. Making a logout request to the secondary DC. - // 3. Mocking TokenWriter.Delete to return ErrCannotWriteGlobalToken in the - // secondary DC. - // 4. Checking that the primary DC server's TokenWriter receives a call to - // Delete. - // 5. Capturing the forwarded request's Datacenter in the primary DC server's - // ForwardRPC (to check that we overwrote the user-supplied Datacenter - // field to prevent infinite forwarding loops!) - var forwardedRequestDatacenter string - primary := NewServer(Config{ - ACLsEnabled: true, - InPrimaryDatacenter: true, - LocalTokensEnabled: noopLocalTokensEnabled, - Logger: hclog.NewNullLogger(), - NewTokenWriter: func() TokenWriter { return tokenWriter }, - ForwardRPC: func(info structs.RPCInfo, _ func(*grpc.ClientConn) error) (bool, error) { - forwardedRequestDatacenter = info.RequestDatacenter() - return false, nil - }, - }) - - primaryConn, err := grpc.Dial( - testutils.RunTestServer(t, primary).String(), - grpc.WithInsecure(), - ) - require.NoError(t, err) - - secondary := NewServer(Config{ - ACLsEnabled: true, - InPrimaryDatacenter: false, - LocalTokensEnabled: noopLocalTokensEnabled, - Logger: hclog.NewNullLogger(), - PrimaryDatacenter: "primary", - ForwardRPC: func(info structs.RPCInfo, fn func(*grpc.ClientConn) error) (bool, error) { - dc := info.RequestDatacenter() - switch dc { - case "secondary": - return false, nil - case "primary": - return true, fn(primaryConn) - default: - return false, fmt.Errorf("unexpected target datacenter: %s", dc) - } - }, - NewTokenWriter: func() TokenWriter { - tokenWriter := NewMockTokenWriter(t) - tokenWriter.On("Delete", mock.Anything, true).Return(auth.ErrCannotWriteGlobalToken) - return tokenWriter - }, - }) - - _, err = secondary.Logout(context.Background(), &pbacl.LogoutRequest{ - Token: generateID(t), - Datacenter: "secondary", - }) - require.NoError(t, err) - require.Equal(t, "primary", forwardedRequestDatacenter) -} diff --git a/agent/grpc/public/services/acl/mock_Login.go b/agent/grpc/public/services/acl/mock_Login.go deleted file mode 100644 index 3c33169a86d2d..0000000000000 --- a/agent/grpc/public/services/acl/mock_Login.go +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by mockery v2.12.0. DO NOT EDIT. - -package acl - -import ( - authmethod "github.com/hashicorp/consul/agent/consul/authmethod" - mock "github.com/stretchr/testify/mock" - - structs "github.com/hashicorp/consul/agent/structs" - - testing "testing" -) - -// MockLogin is an autogenerated mock type for the Login type -type MockLogin struct { - mock.Mock -} - -// TokenForVerifiedIdentity provides a mock function with given fields: identity, authMethod, description -func (_m *MockLogin) TokenForVerifiedIdentity(identity *authmethod.Identity, authMethod *structs.ACLAuthMethod, description string) (*structs.ACLToken, error) { - ret := _m.Called(identity, authMethod, description) - - var r0 *structs.ACLToken - if rf, ok := ret.Get(0).(func(*authmethod.Identity, *structs.ACLAuthMethod, string) *structs.ACLToken); ok { - r0 = rf(identity, authMethod, description) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*structs.ACLToken) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(*authmethod.Identity, *structs.ACLAuthMethod, string) error); ok { - r1 = rf(identity, authMethod, description) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// NewMockLogin creates a new instance of MockLogin. It also registers the testing.TB interface on the mock and a cleanup function to assert the mocks expectations. -func NewMockLogin(t testing.TB) *MockLogin { - mock := &MockLogin{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/grpc/public/services/acl/mock_TokenWriter.go b/agent/grpc/public/services/acl/mock_TokenWriter.go deleted file mode 100644 index 19408afc8895b..0000000000000 --- a/agent/grpc/public/services/acl/mock_TokenWriter.go +++ /dev/null @@ -1,38 +0,0 @@ -// Code generated by mockery v2.12.0. DO NOT EDIT. - -package acl - -import ( - testing "testing" - - mock "github.com/stretchr/testify/mock" -) - -// MockTokenWriter is an autogenerated mock type for the TokenWriter type -type MockTokenWriter struct { - mock.Mock -} - -// Delete provides a mock function with given fields: secretID, fromLogout -func (_m *MockTokenWriter) Delete(secretID string, fromLogout bool) error { - ret := _m.Called(secretID, fromLogout) - - var r0 error - if rf, ok := ret.Get(0).(func(string, bool) error); ok { - r0 = rf(secretID, fromLogout) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// NewMockTokenWriter creates a new instance of MockTokenWriter. It also registers the testing.TB interface on the mock and a cleanup function to assert the mocks expectations. -func NewMockTokenWriter(t testing.TB) *MockTokenWriter { - mock := &MockTokenWriter{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/grpc/public/services/acl/mock_Validator.go b/agent/grpc/public/services/acl/mock_Validator.go deleted file mode 100644 index 3c27ec38baf9f..0000000000000 --- a/agent/grpc/public/services/acl/mock_Validator.go +++ /dev/null @@ -1,51 +0,0 @@ -// Code generated by mockery v2.12.0. DO NOT EDIT. - -package acl - -import ( - context "context" - - authmethod "github.com/hashicorp/consul/agent/consul/authmethod" - - mock "github.com/stretchr/testify/mock" - - testing "testing" -) - -// MockValidator is an autogenerated mock type for the Validator type -type MockValidator struct { - mock.Mock -} - -// ValidateLogin provides a mock function with given fields: ctx, loginToken -func (_m *MockValidator) ValidateLogin(ctx context.Context, loginToken string) (*authmethod.Identity, error) { - ret := _m.Called(ctx, loginToken) - - var r0 *authmethod.Identity - if rf, ok := ret.Get(0).(func(context.Context, string) *authmethod.Identity); ok { - r0 = rf(ctx, loginToken) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*authmethod.Identity) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { - r1 = rf(ctx, loginToken) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// NewMockValidator creates a new instance of MockValidator. It also registers the testing.TB interface on the mock and a cleanup function to assert the mocks expectations. -func NewMockValidator(t testing.TB) *MockValidator { - mock := &MockValidator{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/grpc/public/services/acl/server.go b/agent/grpc/public/services/acl/server.go deleted file mode 100644 index 7f0994f040057..0000000000000 --- a/agent/grpc/public/services/acl/server.go +++ /dev/null @@ -1,88 +0,0 @@ -package acl - -import ( - "context" - - "github.com/hashicorp/go-hclog" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/authmethod" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbacl" -) - -type Config struct { - ACLsEnabled bool - Logger hclog.Logger - LoadAuthMethod func(authMethod string, entMeta *acl.EnterpriseMeta) (*structs.ACLAuthMethod, Validator, error) - NewLogin func() Login - ForwardRPC func(structs.RPCInfo, func(*grpc.ClientConn) error) (bool, error) - ValidateEnterpriseRequest func(*acl.EnterpriseMeta, bool) error - LocalTokensEnabled func() bool - InPrimaryDatacenter bool - PrimaryDatacenter string - NewTokenWriter func() TokenWriter -} - -//go:generate mockery --name Login --inpackage -type Login interface { - TokenForVerifiedIdentity(identity *authmethod.Identity, authMethod *structs.ACLAuthMethod, description string) (*structs.ACLToken, error) -} - -//go:generate mockery --name Validator --inpackage -type Validator interface { - ValidateLogin(ctx context.Context, loginToken string) (*authmethod.Identity, error) -} - -//go:generate mockery --name TokenWriter --inpackage -type TokenWriter interface { - Delete(secretID string, fromLogout bool) error -} - -type Server struct { - Config -} - -func NewServer(cfg Config) *Server { - return &Server{cfg} -} - -func (s *Server) Register(grpcServer *grpc.Server) { - pbacl.RegisterACLServiceServer(grpcServer, s) -} - -func (s *Server) requireACLsEnabled(logger hclog.Logger) error { - if s.ACLsEnabled { - return nil - } - logger.Warn("request blocked ACLs are disabled") - return status.Error(codes.FailedPrecondition, acl.ErrDisabled.Error()) -} - -func (s *Server) requireLocalTokens(logger hclog.Logger) error { - if s.LocalTokensEnabled() { - return nil - } - logger.Warn("request blocked because we're in a non-primary datacenter and token replication is disabled") - return status.Error(codes.FailedPrecondition, "token replication is required for auth methods to function") -} - -func (s *Server) forwardWriteDC(dc string, fn func(*grpc.ClientConn) error, logger hclog.Logger) (bool, error) { - // For private/internal gRPC handlers, protoc-gen-rpc-glue generates the - // requisite methods to satisfy the structs.RPCInfo interface using fields - // from the pbcommon package. This service is public, so we can't use those - // fields in our proto definition. Instead, we construct our RPCInfo manually. - var rpcInfo struct { - structs.WriteRequest // Ensure RPCs are forwarded to the leader. - structs.DCSpecificRequest // Ensure RPCs are forwarded to the correct datacenter. - } - rpcInfo.Datacenter = dc - - return s.ForwardRPC(&rpcInfo, func(conn *grpc.ClientConn) error { - logger.Trace("forwarding RPC", "datacenter", dc) - return fn(conn) - }) -} diff --git a/agent/grpc/public/services/acl/server_test.go b/agent/grpc/public/services/acl/server_test.go deleted file mode 100644 index d2b381156e788..0000000000000 --- a/agent/grpc/public/services/acl/server_test.go +++ /dev/null @@ -1,37 +0,0 @@ -package acl - -import ( - "testing" - - "github.com/hashicorp/go-uuid" - "github.com/stretchr/testify/require" - "google.golang.org/grpc" - - "github.com/hashicorp/consul/acl" - structs "github.com/hashicorp/consul/agent/structs" -) - -func generateID(t *testing.T) string { - t.Helper() - - id, err := uuid.GenerateUUID() - require.NoError(t, err) - - return id -} - -func noopForwardRPC(structs.RPCInfo, func(*grpc.ClientConn) error) (bool, error) { - return false, nil -} - -func noopValidateEnterpriseRequest(*acl.EnterpriseMeta, bool) error { - return nil -} - -func noopLocalTokensEnabled() bool { - return true -} - -func noopACLsEnabled() bool { - return true -} diff --git a/agent/grpc/public/services/connectca/acl_test.go b/agent/grpc/public/services/connectca/acl_test.go new file mode 100644 index 0000000000000..bac0e342e6d5f --- /dev/null +++ b/agent/grpc/public/services/connectca/acl_test.go @@ -0,0 +1,27 @@ +package connectca + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/hashicorp/consul/acl" +) + +// testAuthorizer returns an ACL policy authorizer with `service:write` on an +// arbitrary service. +func testAuthorizer(t *testing.T) acl.Authorizer { + t.Helper() + + policy, err := acl.NewPolicyFromSource(` + service "foo" { + policy = "write" + } + `, acl.SyntaxCurrent, nil, nil) + require.NoError(t, err) + + authz, err := acl.NewPolicyAuthorizerWithDefaults(acl.DenyAll(), []*acl.Policy{policy}, nil) + require.NoError(t, err) + + return authz +} diff --git a/agent/grpc/public/services/connectca/mock_ACLResolver.go b/agent/grpc/public/services/connectca/mock_ACLResolver.go index a1ff427964ce0..6b6a6a771bc7e 100644 --- a/agent/grpc/public/services/connectca/mock_ACLResolver.go +++ b/agent/grpc/public/services/connectca/mock_ACLResolver.go @@ -1,12 +1,11 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. +// Code generated by mockery v1.0.0. DO NOT EDIT. package connectca import ( - acl "github.com/hashicorp/consul/acl" mock "github.com/stretchr/testify/mock" - testing "testing" + acl "github.com/hashicorp/consul/acl" ) // MockACLResolver is an autogenerated mock type for the ACLResolver type @@ -14,13 +13,13 @@ type MockACLResolver struct { mock.Mock } -// ResolveTokenAndDefaultMeta provides a mock function with given fields: token, entMeta, authzContext -func (_m *MockACLResolver) ResolveTokenAndDefaultMeta(token string, entMeta *acl.EnterpriseMeta, authzContext *acl.AuthorizerContext) (acl.Authorizer, error) { - ret := _m.Called(token, entMeta, authzContext) +// ResolveTokenAndDefaultMeta provides a mock function with given fields: _a0, _a1, _a2 +func (_m *MockACLResolver) ResolveTokenAndDefaultMeta(_a0 string, _a1 *acl.EnterpriseMeta, _a2 *acl.AuthorizerContext) (acl.Authorizer, error) { + ret := _m.Called(_a0, _a1, _a2) var r0 acl.Authorizer if rf, ok := ret.Get(0).(func(string, *acl.EnterpriseMeta, *acl.AuthorizerContext) acl.Authorizer); ok { - r0 = rf(token, entMeta, authzContext) + r0 = rf(_a0, _a1, _a2) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(acl.Authorizer) @@ -29,19 +28,10 @@ func (_m *MockACLResolver) ResolveTokenAndDefaultMeta(token string, entMeta *acl var r1 error if rf, ok := ret.Get(1).(func(string, *acl.EnterpriseMeta, *acl.AuthorizerContext) error); ok { - r1 = rf(token, entMeta, authzContext) + r1 = rf(_a0, _a1, _a2) } else { r1 = ret.Error(1) } return r0, r1 } - -// NewMockACLResolver creates a new instance of MockACLResolver. It also registers a cleanup function to assert the mocks expectations. -func NewMockACLResolver(t testing.TB) *MockACLResolver { - mock := &MockACLResolver{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/grpc/public/services/connectca/mock_CAManager.go b/agent/grpc/public/services/connectca/mock_CAManager.go deleted file mode 100644 index 8839344a2dcf2..0000000000000 --- a/agent/grpc/public/services/connectca/mock_CAManager.go +++ /dev/null @@ -1,51 +0,0 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. - -package connectca - -import ( - acl "github.com/hashicorp/consul/acl" - mock "github.com/stretchr/testify/mock" - - structs "github.com/hashicorp/consul/agent/structs" - - testing "testing" - - x509 "crypto/x509" -) - -// MockCAManager is an autogenerated mock type for the CAManager type -type MockCAManager struct { - mock.Mock -} - -// AuthorizeAndSignCertificate provides a mock function with given fields: csr, authz -func (_m *MockCAManager) AuthorizeAndSignCertificate(csr *x509.CertificateRequest, authz acl.Authorizer) (*structs.IssuedCert, error) { - ret := _m.Called(csr, authz) - - var r0 *structs.IssuedCert - if rf, ok := ret.Get(0).(func(*x509.CertificateRequest, acl.Authorizer) *structs.IssuedCert); ok { - r0 = rf(csr, authz) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*structs.IssuedCert) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(*x509.CertificateRequest, acl.Authorizer) error); ok { - r1 = rf(csr, authz) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// NewMockCAManager creates a new instance of MockCAManager. It also registers a cleanup function to assert the mocks expectations. -func NewMockCAManager(t testing.TB) *MockCAManager { - mock := &MockCAManager{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/grpc/public/services/connectca/server.go b/agent/grpc/public/services/connectca/server.go index f9abd49ee4c33..86edfdb545c9d 100644 --- a/agent/grpc/public/services/connectca/server.go +++ b/agent/grpc/public/services/connectca/server.go @@ -1,11 +1,7 @@ package connectca import ( - "crypto/x509" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-memdb" @@ -21,13 +17,10 @@ type Server struct { } type Config struct { - Publisher EventPublisher - GetStore func() StateStore - Logger hclog.Logger - ACLResolver ACLResolver - CAManager CAManager - ForwardRPC func(structs.RPCInfo, func(*grpc.ClientConn) error) (bool, error) - ConnectEnabled bool + Publisher EventPublisher + GetStore func() StateStore + Logger hclog.Logger + ACLResolver ACLResolver } type EventPublisher interface { @@ -39,14 +32,9 @@ type StateStore interface { AbandonCh() <-chan struct{} } -//go:generate mockery --name ACLResolver --inpackage +//go:generate mockery -name ACLResolver -inpkg type ACLResolver interface { - ResolveTokenAndDefaultMeta(token string, entMeta *acl.EnterpriseMeta, authzContext *acl.AuthorizerContext) (acl.Authorizer, error) -} - -//go:generate mockery --name CAManager --inpackage -type CAManager interface { - AuthorizeAndSignCertificate(csr *x509.CertificateRequest, authz acl.Authorizer) (*structs.IssuedCert, error) + ResolveTokenAndDefaultMeta(string, *acl.EnterpriseMeta, *acl.AuthorizerContext) (acl.Authorizer, error) } func NewServer(cfg Config) *Server { @@ -56,10 +44,3 @@ func NewServer(cfg Config) *Server { func (s *Server) Register(grpcServer *grpc.Server) { pbconnectca.RegisterConnectCAServiceServer(grpcServer, s) } - -func (s *Server) requireConnect() error { - if s.ConnectEnabled { - return nil - } - return status.Error(codes.FailedPrecondition, "Connect must be enabled in order to use this endpoint") -} diff --git a/agent/grpc/public/services/connectca/server_test.go b/agent/grpc/public/services/connectca/server_test.go index b382f88239441..e74b7c0946df3 100644 --- a/agent/grpc/public/services/connectca/server_test.go +++ b/agent/grpc/public/services/connectca/server_test.go @@ -2,42 +2,81 @@ package connectca import ( "context" + "net" + "sync" "testing" + "time" "github.com/stretchr/testify/require" "google.golang.org/grpc" "github.com/hashicorp/consul/agent/consul/state" "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/grpc/public/testutils" - structs "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/proto-public/pbconnectca" ) -func noopForwardRPC(structs.RPCInfo, func(*grpc.ClientConn) error) (bool, error) { - return false, nil +func testStateStore(t *testing.T, publisher state.EventPublisher) *state.Store { + t.Helper() + + gc, err := state.NewTombstoneGC(time.Second, time.Millisecond) + require.NoError(t, err) + + return state.NewStateStoreWithEventPublisher(gc, publisher) } -func setupFSMAndPublisher(t *testing.T) (*testutils.FakeFSM, state.EventPublisher) { +type FakeFSM struct { + lock sync.Mutex + store *state.Store + publisher *stream.EventPublisher +} + +func newFakeFSM(t *testing.T, publisher *stream.EventPublisher) *FakeFSM { t.Helper() - config := testutils.FakeFSMConfig{ - Register: func(fsm *testutils.FakeFSM, publisher *stream.EventPublisher) { - // register handlers - publisher.RegisterHandler(state.EventTopicCARoots, func(req stream.SubscribeRequest, buf stream.SnapshotAppender) (uint64, error) { - return fsm.GetStore().CARootsSnapshot(req, buf) - }) - }, - Refresh: []stream.Topic{state.EventTopicCARoots}, - } + store := testStateStore(t, publisher) + + fsm := FakeFSM{store: store, publisher: publisher} - return testutils.SetupFSMAndPublisher(t, config) + // register handlers + publisher.RegisterHandler(state.EventTopicCARoots, func(req stream.SubscribeRequest, buf stream.SnapshotAppender) (uint64, error) { + return fsm.GetStore().CARootsSnapshot(req, buf) + }) + + return &fsm +} + +func (f *FakeFSM) GetStore() *state.Store { + f.lock.Lock() + defer f.lock.Unlock() + return f.store +} + +func (f *FakeFSM) ReplaceStore(store *state.Store) { + f.lock.Lock() + defer f.lock.Unlock() + oldStore := f.store + f.store = store + oldStore.Abandon() + f.publisher.RefreshTopic(state.EventTopicCARoots) +} + +func setupFSMAndPublisher(t *testing.T) (*FakeFSM, state.EventPublisher) { + t.Helper() + publisher := stream.NewEventPublisher(10 * time.Second) + + fsm := newFakeFSM(t, publisher) + + ctx, cancel := context.WithCancel(context.Background()) + t.Cleanup(cancel) + go publisher.Run(ctx) + + return fsm, publisher } func testClient(t *testing.T, server *Server) pbconnectca.ConnectCAServiceClient { t.Helper() - addr := testutils.RunTestServer(t, server) + addr := runTestServer(t, server) conn, err := grpc.DialContext(context.Background(), addr.String(), grpc.WithInsecure()) require.NoError(t, err) @@ -47,3 +86,18 @@ func testClient(t *testing.T, server *Server) pbconnectca.ConnectCAServiceClient return pbconnectca.NewConnectCAServiceClient(conn) } + +func runTestServer(t *testing.T, server *Server) net.Addr { + t.Helper() + + lis, err := net.Listen("tcp", "127.0.0.1:0") + require.NoError(t, err) + + grpcServer := grpc.NewServer() + server.Register(grpcServer) + + go grpcServer.Serve(lis) + t.Cleanup(grpcServer.Stop) + + return lis.Addr() +} diff --git a/agent/grpc/public/services/connectca/sign.go b/agent/grpc/public/services/connectca/sign.go deleted file mode 100644 index b3ace6d3d024c..0000000000000 --- a/agent/grpc/public/services/connectca/sign.go +++ /dev/null @@ -1,96 +0,0 @@ -package connectca - -import ( - "context" - "strings" - - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/grpc/public" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbconnectca" -) - -// Sign a leaf certificate for the service or agent identified by the SPIFFE -// ID in the given CSR's SAN. -func (s *Server) Sign(ctx context.Context, req *pbconnectca.SignRequest) (*pbconnectca.SignResponse, error) { - if err := s.requireConnect(); err != nil { - return nil, err - } - - logger := s.Logger.Named("sign").With("request_id", public.TraceID()) - logger.Trace("request received") - - token := public.TokenFromContext(ctx) - - if req.Csr == "" { - return nil, status.Error(codes.InvalidArgument, "CSR is required") - } - - // For private/internal gRPC handlers, protoc-gen-rpc-glue generates the - // requisite methods to satisfy the structs.RPCInfo interface using fields - // from the pbcommon package. This service is public, so we can't use those - // fields in our proto definition. Instead, we construct our RPCInfo manually. - // - // Embedding WriteRequest ensures RPCs are forwarded to the leader, embedding - // DCSpecificRequest adds the RequestDatacenter method (but as we're not - // setting Datacenter it has the effect of *not* doing DC forwarding). - var rpcInfo struct { - structs.WriteRequest - structs.DCSpecificRequest - } - rpcInfo.Token = token - - var rsp *pbconnectca.SignResponse - handled, err := s.ForwardRPC(&rpcInfo, func(conn *grpc.ClientConn) error { - logger.Trace("forwarding RPC") - ctx := public.ForwardMetadataContext(ctx) - var err error - rsp, err = pbconnectca.NewConnectCAServiceClient(conn).Sign(ctx, req) - return err - }) - if handled || err != nil { - return rsp, err - } - - csr, err := connect.ParseCSR(req.Csr) - if err != nil { - return nil, status.Error(codes.InvalidArgument, err.Error()) - } - - authz, err := s.ACLResolver.ResolveTokenAndDefaultMeta(token, nil, nil) - if err != nil { - return nil, status.Error(codes.Unauthenticated, err.Error()) - } - - cert, err := s.CAManager.AuthorizeAndSignCertificate(csr, authz) - switch { - case connect.IsInvalidCSRError(err): - return nil, status.Error(codes.InvalidArgument, err.Error()) - case acl.IsErrPermissionDenied(err): - return nil, status.Error(codes.PermissionDenied, err.Error()) - case isRateLimitError(err): - return nil, status.Error(codes.ResourceExhausted, err.Error()) - case err != nil: - logger.Error("failed to sign leaf certificate", "error", err.Error()) - return nil, status.Error(codes.Internal, "failed to sign leaf certificate") - } - - return &pbconnectca.SignResponse{ - CertPem: cert.CertPEM, - }, nil -} - -// TODO(agentless): CAManager currently lives in the `agent/consul` package and -// returns ErrRateLimited which we can't reference directly here because it'd -// create an import cycle. Checking the error message like this is fragile, but -// because of net/rpc's limited error handling support it's what we already do -// on the client. We should either move the error constant so that can use it -// here, or perhaps make it a typed error? -func isRateLimitError(err error) bool { - return err != nil && strings.Contains(err.Error(), "limit reached") -} diff --git a/agent/grpc/public/services/connectca/sign_test.go b/agent/grpc/public/services/connectca/sign_test.go deleted file mode 100644 index a4f891b8cac30..0000000000000 --- a/agent/grpc/public/services/connectca/sign_test.go +++ /dev/null @@ -1,253 +0,0 @@ -package connectca - -import ( - "context" - "errors" - "testing" - - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/go-hclog" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - acl "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/grpc/public/testutils" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbconnectca" -) - -func TestSign_ConnectDisabled(t *testing.T) { - server := NewServer(Config{ConnectEnabled: false}) - - _, err := server.Sign(context.Background(), &pbconnectca.SignRequest{}) - require.Error(t, err) - require.Equal(t, codes.FailedPrecondition.String(), status.Code(err).String()) - require.Contains(t, status.Convert(err).Message(), "Connect") -} - -func TestSign_Validation(t *testing.T) { - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(acl.AllowAll(), nil) - - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - ForwardRPC: noopForwardRPC, - ConnectEnabled: true, - }) - - testCases := map[string]struct { - csr, err string - }{ - "no csr": { - csr: "", - err: "CSR is required", - }, - "invalid csr": { - csr: "bogus", - err: "no PEM-encoded data found", - }, - } - for desc, tc := range testCases { - t.Run(desc, func(t *testing.T) { - _, err := server.Sign(context.Background(), &pbconnectca.SignRequest{ - Csr: tc.csr, - }) - require.Error(t, err) - require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) - require.Equal(t, tc.err, status.Convert(err).Message()) - }) - } -} - -func TestSign_Unauthenticated(t *testing.T) { - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(nil, acl.ErrNotFound) - - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - ForwardRPC: noopForwardRPC, - ConnectEnabled: true, - }) - - csr, _ := connect.TestCSR(t, connect.TestSpiffeIDService(t, "web")) - - _, err := server.Sign(context.Background(), &pbconnectca.SignRequest{ - Csr: csr, - }) - require.Error(t, err) - require.Equal(t, codes.Unauthenticated.String(), status.Code(err).String()) -} - -func TestSign_PermissionDenied(t *testing.T) { - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(acl.AllowAll(), nil) - - caManager := &MockCAManager{} - caManager.On("AuthorizeAndSignCertificate", mock.Anything, mock.Anything). - Return(nil, acl.ErrPermissionDenied) - - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - CAManager: caManager, - ForwardRPC: noopForwardRPC, - ConnectEnabled: true, - }) - - csr, _ := connect.TestCSR(t, connect.TestSpiffeIDService(t, "web")) - - _, err := server.Sign(context.Background(), &pbconnectca.SignRequest{ - Csr: csr, - }) - require.Error(t, err) - require.Equal(t, codes.PermissionDenied.String(), status.Code(err).String()) -} - -func TestSign_InvalidCSR(t *testing.T) { - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(acl.AllowAll(), nil) - - caManager := &MockCAManager{} - caManager.On("AuthorizeAndSignCertificate", mock.Anything, mock.Anything). - Return(nil, connect.InvalidCSRError("nope")) - - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - CAManager: caManager, - ForwardRPC: noopForwardRPC, - ConnectEnabled: true, - }) - - csr, _ := connect.TestCSR(t, connect.TestSpiffeIDService(t, "web")) - - _, err := server.Sign(context.Background(), &pbconnectca.SignRequest{ - Csr: csr, - }) - require.Error(t, err) - require.Equal(t, codes.InvalidArgument.String(), status.Code(err).String()) -} - -func TestSign_RateLimited(t *testing.T) { - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(acl.AllowAll(), nil) - - caManager := &MockCAManager{} - caManager.On("AuthorizeAndSignCertificate", mock.Anything, mock.Anything). - Return(nil, errors.New("Rate limit reached, try again later")) - - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - CAManager: caManager, - ForwardRPC: noopForwardRPC, - ConnectEnabled: true, - }) - - csr, _ := connect.TestCSR(t, connect.TestSpiffeIDService(t, "web")) - - _, err := server.Sign(context.Background(), &pbconnectca.SignRequest{ - Csr: csr, - }) - require.Error(t, err) - require.Equal(t, codes.ResourceExhausted.String(), status.Code(err).String()) -} - -func TestSign_InternalError(t *testing.T) { - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(acl.AllowAll(), nil) - - caManager := &MockCAManager{} - caManager.On("AuthorizeAndSignCertificate", mock.Anything, mock.Anything). - Return(nil, errors.New("something went very wrong")) - - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - CAManager: caManager, - ForwardRPC: noopForwardRPC, - ConnectEnabled: true, - }) - - csr, _ := connect.TestCSR(t, connect.TestSpiffeIDService(t, "web")) - - _, err := server.Sign(context.Background(), &pbconnectca.SignRequest{ - Csr: csr, - }) - require.Error(t, err) - require.Equal(t, codes.Internal.String(), status.Code(err).String()) -} - -func TestSign_Success(t *testing.T) { - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(acl.AllowAll(), nil) - - caManager := &MockCAManager{} - caManager.On("AuthorizeAndSignCertificate", mock.Anything, mock.Anything). - Return(&structs.IssuedCert{CertPEM: "this is the PEM"}, nil) - - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - CAManager: caManager, - ForwardRPC: noopForwardRPC, - ConnectEnabled: true, - }) - - csr, _ := connect.TestCSR(t, connect.TestSpiffeIDService(t, "web")) - - rsp, err := server.Sign(context.Background(), &pbconnectca.SignRequest{ - Csr: csr, - }) - require.NoError(t, err) - require.Equal(t, "this is the PEM", rsp.CertPem) -} - -func TestSign_RPCForwarding(t *testing.T) { - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(acl.AllowAll(), nil) - - caManager := &MockCAManager{} - caManager.On("AuthorizeAndSignCertificate", mock.Anything, mock.Anything). - Return(&structs.IssuedCert{CertPEM: "leader response"}, nil) - - leader := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - CAManager: caManager, - ForwardRPC: noopForwardRPC, - ConnectEnabled: true, - }) - leaderConn, err := grpc.Dial(testutils.RunTestServer(t, leader).String(), grpc.WithInsecure()) - require.NoError(t, err) - - follower := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ForwardRPC: func(_ structs.RPCInfo, fn func(*grpc.ClientConn) error) (bool, error) { - return true, fn(leaderConn) - }, - ConnectEnabled: true, - }) - - csr, _ := connect.TestCSR(t, connect.TestSpiffeIDService(t, "web")) - - rsp, err := follower.Sign(context.Background(), &pbconnectca.SignRequest{ - Csr: csr, - }) - require.NoError(t, err) - require.Equal(t, "leader response", rsp.CertPem) -} diff --git a/agent/grpc/public/services/connectca/watch_roots.go b/agent/grpc/public/services/connectca/watch_roots.go index bf455ce27800e..7a7430783f0c7 100644 --- a/agent/grpc/public/services/connectca/watch_roots.go +++ b/agent/grpc/public/services/connectca/watch_roots.go @@ -7,9 +7,11 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/timestamppb" "github.com/hashicorp/go-hclog" + "github.com/hashicorp/go-uuid" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/connect" @@ -23,12 +25,9 @@ import ( // WatchRoots provides a stream on which you can receive the list of active // Connect CA roots. Current roots are sent immediately at the start of the // stream, and new lists will be sent whenever the roots are rotated. -func (s *Server) WatchRoots(_ *pbconnectca.WatchRootsRequest, serverStream pbconnectca.ConnectCAService_WatchRootsServer) error { - if err := s.requireConnect(); err != nil { - return err - } +func (s *Server) WatchRoots(_ *emptypb.Empty, serverStream pbconnectca.ConnectCAService_WatchRootsServer) error { + logger := s.Logger.Named("watch-roots").With("stream_id", streamID()) - logger := s.Logger.Named("watch-roots").With("request_id", public.TraceID()) logger.Trace("starting stream") defer logger.Trace("stream closed") @@ -179,6 +178,16 @@ func (s *Server) authorize(token string) error { return nil } +// We tag logs with a unique identifier to ease debugging. In the future this +// should probably be an Open Telemetry trace ID. +func streamID() string { + id, err := uuid.GenerateUUID() + if err != nil { + return "" + } + return id +} + func getTrustDomain(store StateStore, logger hclog.Logger) (string, error) { _, cfg, err := store.CAConfig(nil) switch { diff --git a/agent/grpc/public/services/connectca/watch_roots_test.go b/agent/grpc/public/services/connectca/watch_roots_test.go index d0960da51f7be..a436c2deaf0b6 100644 --- a/agent/grpc/public/services/connectca/watch_roots_test.go +++ b/agent/grpc/public/services/connectca/watch_roots_test.go @@ -11,13 +11,13 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/emptypb" "github.com/hashicorp/go-uuid" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/grpc/public" - "github.com/hashicorp/consul/agent/grpc/public/testutils" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/proto-public/pbconnectca" "github.com/hashicorp/consul/sdk/testutil" @@ -25,20 +25,6 @@ import ( const testACLToken = "acl-token" -func TestWatchRoots_ConnectDisabled(t *testing.T) { - server := NewServer(Config{ConnectEnabled: false}) - - // Begin the stream. - client := testClient(t, server) - stream, err := client.WatchRoots(context.Background(), &pbconnectca.WatchRootsRequest{}) - require.NoError(t, err) - rspCh := handleRootsStream(t, stream) - - err = mustGetError(t, rspCh) - require.Equal(t, codes.FailedPrecondition.String(), status.Code(err).String()) - require.Contains(t, status.Convert(err).Message(), "Connect") -} - func TestWatchRoots_Success(t *testing.T) { fsm, publisher := setupFSMAndPublisher(t) @@ -53,21 +39,20 @@ func TestWatchRoots_Success(t *testing.T) { // Mock the ACL Resolver to return an authorizer with `service:write`. aclResolver := &MockACLResolver{} aclResolver.On("ResolveTokenAndDefaultMeta", testACLToken, mock.Anything, mock.Anything). - Return(testutils.TestAuthorizerServiceWriteAny(t), nil) + Return(testAuthorizer(t), nil) ctx := public.ContextWithToken(context.Background(), testACLToken) server := NewServer(Config{ - Publisher: publisher, - GetStore: func() StateStore { return fsm.GetStore() }, - Logger: testutil.Logger(t), - ACLResolver: aclResolver, - ConnectEnabled: true, + Publisher: publisher, + GetStore: func() StateStore { return fsm.GetStore() }, + Logger: testutil.Logger(t), + ACLResolver: aclResolver, }) // Begin the stream. client := testClient(t, server) - stream, err := client.WatchRoots(ctx, &pbconnectca.WatchRootsRequest{}) + stream, err := client.WatchRoots(ctx, &emptypb.Empty{}) require.NoError(t, err) rspCh := handleRootsStream(t, stream) @@ -106,16 +91,15 @@ func TestWatchRoots_InvalidACLToken(t *testing.T) { ctx := public.ContextWithToken(context.Background(), testACLToken) server := NewServer(Config{ - Publisher: publisher, - GetStore: func() StateStore { return fsm.GetStore() }, - Logger: testutil.Logger(t), - ACLResolver: aclResolver, - ConnectEnabled: true, + Publisher: publisher, + GetStore: func() StateStore { return fsm.GetStore() }, + Logger: testutil.Logger(t), + ACLResolver: aclResolver, }) // Start the stream. client := testClient(t, server) - stream, err := client.WatchRoots(ctx, &pbconnectca.WatchRootsRequest{}) + stream, err := client.WatchRoots(ctx, &emptypb.Empty{}) require.NoError(t, err) rspCh := handleRootsStream(t, stream) @@ -139,21 +123,20 @@ func TestWatchRoots_ACLTokenInvalidated(t *testing.T) { // first two times it is called (initial connect and first re-auth). aclResolver := &MockACLResolver{} aclResolver.On("ResolveTokenAndDefaultMeta", testACLToken, mock.Anything, mock.Anything). - Return(testutils.TestAuthorizerServiceWriteAny(t), nil).Twice() + Return(testAuthorizer(t), nil).Twice() ctx := public.ContextWithToken(context.Background(), testACLToken) server := NewServer(Config{ - Publisher: publisher, - GetStore: func() StateStore { return fsm.GetStore() }, - Logger: testutil.Logger(t), - ACLResolver: aclResolver, - ConnectEnabled: true, + Publisher: publisher, + GetStore: func() StateStore { return fsm.GetStore() }, + Logger: testutil.Logger(t), + ACLResolver: aclResolver, }) // Start the stream. client := testClient(t, server) - stream, err := client.WatchRoots(ctx, &pbconnectca.WatchRootsRequest{}) + stream, err := client.WatchRoots(ctx, &emptypb.Empty{}) require.NoError(t, err) rspCh := handleRootsStream(t, stream) @@ -207,21 +190,20 @@ func TestWatchRoots_StateStoreAbandoned(t *testing.T) { // Mock the ACL Resolver to return an authorizer with `service:write`. aclResolver := &MockACLResolver{} aclResolver.On("ResolveTokenAndDefaultMeta", testACLToken, mock.Anything, mock.Anything). - Return(testutils.TestAuthorizerServiceWriteAny(t), nil) + Return(testAuthorizer(t), nil) ctx := public.ContextWithToken(context.Background(), testACLToken) server := NewServer(Config{ - Publisher: publisher, - GetStore: func() StateStore { return fsm.GetStore() }, - Logger: testutil.Logger(t), - ACLResolver: aclResolver, - ConnectEnabled: true, + Publisher: publisher, + GetStore: func() StateStore { return fsm.GetStore() }, + Logger: testutil.Logger(t), + ACLResolver: aclResolver, }) // Begin the stream. client := testClient(t, server) - stream, err := client.WatchRoots(ctx, &pbconnectca.WatchRootsRequest{}) + stream, err := client.WatchRoots(ctx, &emptypb.Empty{}) require.NoError(t, err) rspCh := handleRootsStream(t, stream) @@ -229,7 +211,7 @@ func TestWatchRoots_StateStoreAbandoned(t *testing.T) { mustGetRoots(t, rspCh) // Simulate a snapshot restore. - storeB := testutils.TestStateStore(t, publisher) + storeB := testStateStore(t, publisher) rootB := connect.TestCA(t, nil) _, err = storeB.CARootSetCAS(1, 0, structs.CARoots{rootB}) diff --git a/agent/grpc/public/services/dataplane/get_envoy_boostrap_params_test.go b/agent/grpc/public/services/dataplane/get_envoy_boostrap_params_test.go deleted file mode 100644 index 072068861be0f..0000000000000 --- a/agent/grpc/public/services/dataplane/get_envoy_boostrap_params_test.go +++ /dev/null @@ -1,260 +0,0 @@ -package dataplane - -import ( - "context" - "testing" - - acl "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/grpc/public" - "github.com/hashicorp/consul/agent/grpc/public/testutils" - structs "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbdataplane" - "github.com/hashicorp/consul/types" - "github.com/hashicorp/go-hclog" - mock "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/types/known/structpb" -) - -const ( - testToken = "acl-token-get-envoy-bootstrap-params" - proxyServiceID = "web-proxy" - nodeName = "foo" - nodeID = "2980b72b-bd9d-9d7b-d4f9-951bf7508d95" - proxyConfigKey = "envoy_dogstatsd_url" - proxyConfigValue = "udp://127.0.0.1:8125" - serverDC = "dc1" -) - -func testRegisterRequestProxy(t *testing.T) *structs.RegisterRequest { - return &structs.RegisterRequest{ - Datacenter: serverDC, - Node: nodeName, - ID: types.NodeID(nodeID), - Address: "127.0.0.1", - Service: &structs.NodeService{ - Kind: structs.ServiceKindConnectProxy, - Service: proxyServiceID, - ID: proxyServiceID, - Address: "127.0.0.2", - Port: 2222, - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "web", - Config: map[string]interface{}{ - proxyConfigKey: proxyConfigValue, - }, - }, - EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - }, - } -} - -func testRegisterIngressGateway(t *testing.T) *structs.RegisterRequest { - registerReq := structs.TestRegisterIngressGateway(t) - registerReq.ID = types.NodeID("2980b72b-bd9d-9d7b-d4f9-951bf7508d95") - registerReq.Service.ID = registerReq.Service.Service - registerReq.Service.Proxy.Config = map[string]interface{}{ - proxyConfigKey: proxyConfigValue, - } - return registerReq -} - -func TestGetEnvoyBootstrapParams_Success(t *testing.T) { - type testCase struct { - name string - registerReq *structs.RegisterRequest - nodeID bool - } - - run := func(t *testing.T, tc testCase) { - store := testutils.TestStateStore(t, nil) - err := store.EnsureRegistration(1, tc.registerReq) - require.NoError(t, err) - - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", testToken, mock.Anything, mock.Anything). - Return(testutils.TestAuthorizerServiceRead(t, tc.registerReq.Service.ID), nil) - ctx := public.ContextWithToken(context.Background(), testToken) - - server := NewServer(Config{ - GetStore: func() StateStore { return store }, - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - Datacenter: serverDC, - }) - client := testClient(t, server) - - req := &pbdataplane.GetEnvoyBootstrapParamsRequest{ - ServiceId: tc.registerReq.Service.ID, - NodeSpec: &pbdataplane.GetEnvoyBootstrapParamsRequest_NodeName{NodeName: tc.registerReq.Node}} - if tc.nodeID { - req.NodeSpec = &pbdataplane.GetEnvoyBootstrapParamsRequest_NodeId{NodeId: string(tc.registerReq.ID)} - } - resp, err := client.GetEnvoyBootstrapParams(ctx, req) - require.NoError(t, err) - - require.Equal(t, tc.registerReq.Service.Proxy.DestinationServiceName, resp.Service) - require.Equal(t, serverDC, resp.Datacenter) - require.Equal(t, tc.registerReq.EnterpriseMeta.PartitionOrDefault(), resp.Partition) - require.Equal(t, tc.registerReq.EnterpriseMeta.NamespaceOrDefault(), resp.Namespace) - require.Contains(t, resp.Config.Fields, proxyConfigKey) - require.Equal(t, structpb.NewStringValue(proxyConfigValue), resp.Config.Fields[proxyConfigKey]) - require.Equal(t, convertToResponseServiceKind(tc.registerReq.Service.Kind), resp.ServiceKind) - - } - - testCases := []testCase{ - { - name: "lookup service side car proxy by node name", - registerReq: testRegisterRequestProxy(t), - }, - { - name: "lookup service side car proxy by node ID", - registerReq: testRegisterRequestProxy(t), - nodeID: true, - }, - { - name: "lookup ingress gw service by node name", - registerReq: testRegisterIngressGateway(t), - }, - { - name: "lookup ingress gw service by node ID", - registerReq: testRegisterIngressGateway(t), - nodeID: true, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} - -func TestGetEnvoyBootstrapParams_Error(t *testing.T) { - type testCase struct { - name string - req *pbdataplane.GetEnvoyBootstrapParamsRequest - expectedErrCode codes.Code - expecteErrMsg string - } - - run := func(t *testing.T, tc testCase) { - aclResolver := &MockACLResolver{} - - aclResolver.On("ResolveTokenAndDefaultMeta", testToken, mock.Anything, mock.Anything). - Return(testutils.TestAuthorizerServiceRead(t, proxyServiceID), nil) - ctx := public.ContextWithToken(context.Background(), testToken) - - store := testutils.TestStateStore(t, nil) - registerReq := testRegisterRequestProxy(t) - err := store.EnsureRegistration(1, registerReq) - require.NoError(t, err) - - server := NewServer(Config{ - GetStore: func() StateStore { return store }, - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - }) - client := testClient(t, server) - - resp, err := client.GetEnvoyBootstrapParams(ctx, tc.req) - require.Nil(t, resp) - require.Error(t, err) - errStatus, ok := status.FromError(err) - require.True(t, ok) - require.Equal(t, tc.expectedErrCode.String(), errStatus.Code().String()) - require.Equal(t, tc.expecteErrMsg, errStatus.Message()) - } - - testCases := []testCase{ - { - name: "lookup-service-by-unregistered-node-name", - req: &pbdataplane.GetEnvoyBootstrapParamsRequest{ - ServiceId: proxyServiceID, - NodeSpec: &pbdataplane.GetEnvoyBootstrapParamsRequest_NodeName{NodeName: "blah"}}, - expectedErrCode: codes.NotFound, - expecteErrMsg: "node not found", - }, - { - name: "lookup-service-by-unregistered-node-id", - req: &pbdataplane.GetEnvoyBootstrapParamsRequest{ - ServiceId: proxyServiceID, - NodeSpec: &pbdataplane.GetEnvoyBootstrapParamsRequest_NodeId{NodeId: "5980b72b-bd9d-9d7b-d4f9-951bf7508d98"}}, - expectedErrCode: codes.NotFound, - expecteErrMsg: "node not found", - }, - { - name: "lookup-service-by-unregistered-service", - req: &pbdataplane.GetEnvoyBootstrapParamsRequest{ - ServiceId: "blah-service", - NodeSpec: &pbdataplane.GetEnvoyBootstrapParamsRequest_NodeName{NodeName: nodeName}}, - expectedErrCode: codes.NotFound, - expecteErrMsg: "Service not found", - }, - { - name: "lookup-service-without-node-details", - req: &pbdataplane.GetEnvoyBootstrapParamsRequest{ - ServiceId: proxyServiceID}, - expectedErrCode: codes.InvalidArgument, - expecteErrMsg: "Node ID or name required to lookup the service", - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } - -} - -func TestGetEnvoyBootstrapParams_Unauthenticated(t *testing.T) { - // Mock the ACL resolver to return ErrNotFound. - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(nil, acl.ErrNotFound) - ctx := public.ContextWithToken(context.Background(), testToken) - store := testutils.TestStateStore(t, nil) - server := NewServer(Config{ - GetStore: func() StateStore { return store }, - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - }) - client := testClient(t, server) - resp, err := client.GetEnvoyBootstrapParams(ctx, &pbdataplane.GetEnvoyBootstrapParamsRequest{}) - require.Error(t, err) - require.Equal(t, codes.Unauthenticated.String(), status.Code(err).String()) - require.Nil(t, resp) -} - -func TestGetEnvoyBootstrapParams_PermissionDenied(t *testing.T) { - // Mock the ACL resolver to return a deny all authorizer - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", testToken, mock.Anything, mock.Anything). - Return(acl.DenyAll(), nil) - ctx := public.ContextWithToken(context.Background(), testToken) - store := testutils.TestStateStore(t, nil) - registerReq := structs.TestRegisterRequestProxy(t) - proxyServiceID := "web-sidecar-proxy" - registerReq.Service.ID = proxyServiceID - err := store.EnsureRegistration(1, registerReq) - require.NoError(t, err) - - server := NewServer(Config{ - GetStore: func() StateStore { return store }, - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - }) - client := testClient(t, server) - req := &pbdataplane.GetEnvoyBootstrapParamsRequest{ - ServiceId: proxyServiceID, - NodeSpec: &pbdataplane.GetEnvoyBootstrapParamsRequest_NodeName{NodeName: registerReq.Node}} - - resp, err := client.GetEnvoyBootstrapParams(ctx, req) - require.Error(t, err) - require.Equal(t, codes.PermissionDenied.String(), status.Code(err).String()) - require.Nil(t, resp) -} diff --git a/agent/grpc/public/services/dataplane/get_envoy_bootstrap_params.go b/agent/grpc/public/services/dataplane/get_envoy_bootstrap_params.go deleted file mode 100644 index 1b534672c5b4e..0000000000000 --- a/agent/grpc/public/services/dataplane/get_envoy_bootstrap_params.go +++ /dev/null @@ -1,88 +0,0 @@ -package dataplane - -import ( - "context" - "errors" - "strings" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/types/known/structpb" - - acl "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/grpc/public" - structs "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbdataplane" -) - -func (s *Server) GetEnvoyBootstrapParams(ctx context.Context, req *pbdataplane.GetEnvoyBootstrapParamsRequest) (*pbdataplane.GetEnvoyBootstrapParamsResponse, error) { - logger := s.Logger.Named("get-envoy-bootstrap-params").With("service_id", req.GetServiceId(), "request_id", public.TraceID()) - - logger.Trace("Started processing request") - defer logger.Trace("Finished processing request") - - token := public.TokenFromContext(ctx) - var authzContext acl.AuthorizerContext - entMeta := acl.NewEnterpriseMetaWithPartition(req.GetPartition(), req.GetNamespace()) - authz, err := s.ACLResolver.ResolveTokenAndDefaultMeta(token, &entMeta, &authzContext) - if err != nil { - return nil, status.Error(codes.Unauthenticated, err.Error()) - } - - store := s.GetStore() - - _, svc, err := store.ServiceNode(req.GetNodeId(), req.GetNodeName(), req.GetServiceId(), &entMeta, structs.DefaultPeerKeyword) - if err != nil { - logger.Error("Error looking up service", "error", err) - if errors.Is(err, state.ErrNodeNotFound) { - return nil, status.Error(codes.NotFound, err.Error()) - } else if strings.Contains(err.Error(), "Node ID or name required") { - return nil, status.Error(codes.InvalidArgument, err.Error()) - } else { - return nil, status.Error(codes.Internal, "Failure looking up service") - } - } - if svc == nil { - return nil, status.Error(codes.NotFound, "Service not found") - } - - if err := authz.ToAllowAuthorizer().ServiceReadAllowed(svc.ServiceName, &authzContext); err != nil { - return nil, status.Error(codes.PermissionDenied, err.Error()) - } - - // Build out the response - - resp := &pbdataplane.GetEnvoyBootstrapParamsResponse{ - Service: svc.ServiceProxy.DestinationServiceName, - Partition: svc.EnterpriseMeta.PartitionOrDefault(), - Namespace: svc.EnterpriseMeta.NamespaceOrDefault(), - Datacenter: s.Datacenter, - ServiceKind: convertToResponseServiceKind(svc.ServiceKind), - } - - bootstrapConfig, err := structpb.NewStruct(svc.ServiceProxy.Config) - if err != nil { - logger.Error("Error creating the envoy boostrap params config", "error", err) - return nil, status.Error(codes.Unknown, "Error creating the envoy boostrap params config") - } - resp.Config = bootstrapConfig - - return resp, nil -} - -func convertToResponseServiceKind(serviceKind structs.ServiceKind) (respKind pbdataplane.ServiceKind) { - switch serviceKind { - case structs.ServiceKindConnectProxy: - respKind = pbdataplane.ServiceKind_SERVICE_KIND_CONNECT_PROXY - case structs.ServiceKindMeshGateway: - respKind = pbdataplane.ServiceKind_SERVICE_KIND_MESH_GATEWAY - case structs.ServiceKindTerminatingGateway: - respKind = pbdataplane.ServiceKind_SERVICE_KIND_TERMINATING_GATEWAY - case structs.ServiceKindIngressGateway: - respKind = pbdataplane.ServiceKind_SERVICE_KIND_INGRESS_GATEWAY - case structs.ServiceKindTypical: - respKind = pbdataplane.ServiceKind_SERVICE_KIND_TYPICAL - } - return -} diff --git a/agent/grpc/public/services/dataplane/get_supported_features.go b/agent/grpc/public/services/dataplane/get_supported_features.go deleted file mode 100644 index cb4eff1e770d5..0000000000000 --- a/agent/grpc/public/services/dataplane/get_supported_features.go +++ /dev/null @@ -1,49 +0,0 @@ -package dataplane - -import ( - "context" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - acl "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/grpc/public" - structs "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbdataplane" -) - -func (s *Server) GetSupportedDataplaneFeatures(ctx context.Context, req *pbdataplane.GetSupportedDataplaneFeaturesRequest) (*pbdataplane.GetSupportedDataplaneFeaturesResponse, error) { - logger := s.Logger.Named("get-supported-dataplane-features").With("request_id", public.TraceID()) - - logger.Trace("Started processing request") - defer logger.Trace("Finished processing request") - - // Require the given ACL token to have `service:write` on any service - token := public.TokenFromContext(ctx) - var authzContext acl.AuthorizerContext - entMeta := structs.WildcardEnterpriseMetaInPartition(structs.WildcardSpecifier) - authz, err := s.ACLResolver.ResolveTokenAndDefaultMeta(token, entMeta, &authzContext) - if err != nil { - return nil, status.Error(codes.Unauthenticated, err.Error()) - } - if err := authz.ToAllowAuthorizer().ServiceWriteAnyAllowed(&authzContext); err != nil { - return nil, status.Error(codes.PermissionDenied, err.Error()) - } - - supportedFeatures := []*pbdataplane.DataplaneFeatureSupport{ - { - FeatureName: pbdataplane.DataplaneFeatures_DATAPLANE_FEATURES_WATCH_SERVERS, - Supported: true, - }, - { - FeatureName: pbdataplane.DataplaneFeatures_DATAPLANE_FEATURES_EDGE_CERTIFICATE_MANAGEMENT, - Supported: true, - }, - { - FeatureName: pbdataplane.DataplaneFeatures_DATAPLANE_FEATURES_ENVOY_BOOTSTRAP_CONFIGURATION, - Supported: true, - }, - } - - return &pbdataplane.GetSupportedDataplaneFeaturesResponse{SupportedDataplaneFeatures: supportedFeatures}, nil -} diff --git a/agent/grpc/public/services/dataplane/get_supported_features_test.go b/agent/grpc/public/services/dataplane/get_supported_features_test.go deleted file mode 100644 index 0dd2b02d0e160..0000000000000 --- a/agent/grpc/public/services/dataplane/get_supported_features_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package dataplane - -import ( - "context" - "testing" - - "github.com/hashicorp/go-hclog" - mock "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/grpc/public" - "github.com/hashicorp/consul/agent/grpc/public/testutils" - "github.com/hashicorp/consul/proto-public/pbdataplane" -) - -const testACLToken = "acl-token" - -func TestSupportedDataplaneFeatures_Success(t *testing.T) { - // Mock the ACL Resolver to return an authorizer with `service:write`. - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", testACLToken, mock.Anything, mock.Anything). - Return(testutils.TestAuthorizerServiceWriteAny(t), nil) - ctx := public.ContextWithToken(context.Background(), testACLToken) - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - }) - client := testClient(t, server) - resp, err := client.GetSupportedDataplaneFeatures(ctx, &pbdataplane.GetSupportedDataplaneFeaturesRequest{}) - require.NoError(t, err) - require.Equal(t, 3, len(resp.SupportedDataplaneFeatures)) - - for _, feature := range resp.SupportedDataplaneFeatures { - switch feature.GetFeatureName() { - case pbdataplane.DataplaneFeatures_DATAPLANE_FEATURES_EDGE_CERTIFICATE_MANAGEMENT: - require.True(t, feature.GetSupported()) - case pbdataplane.DataplaneFeatures_DATAPLANE_FEATURES_WATCH_SERVERS: - require.True(t, feature.GetSupported()) - case pbdataplane.DataplaneFeatures_DATAPLANE_FEATURES_ENVOY_BOOTSTRAP_CONFIGURATION: - require.True(t, feature.GetSupported()) - default: - require.False(t, feature.GetSupported()) - } - } -} - -func TestSupportedDataplaneFeatures_Unauthenticated(t *testing.T) { - // Mock the ACL resolver to return ErrNotFound. - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", mock.Anything, mock.Anything, mock.Anything). - Return(nil, acl.ErrNotFound) - ctx := public.ContextWithToken(context.Background(), testACLToken) - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - }) - client := testClient(t, server) - resp, err := client.GetSupportedDataplaneFeatures(ctx, &pbdataplane.GetSupportedDataplaneFeaturesRequest{}) - require.Error(t, err) - require.Equal(t, codes.Unauthenticated.String(), status.Code(err).String()) - require.Nil(t, resp) -} - -func TestSupportedDataplaneFeatures_PermissionDenied(t *testing.T) { - // Mock the ACL resolver to return a deny all authorizer - aclResolver := &MockACLResolver{} - aclResolver.On("ResolveTokenAndDefaultMeta", testACLToken, mock.Anything, mock.Anything). - Return(acl.DenyAll(), nil) - ctx := public.ContextWithToken(context.Background(), testACLToken) - server := NewServer(Config{ - Logger: hclog.NewNullLogger(), - ACLResolver: aclResolver, - }) - client := testClient(t, server) - resp, err := client.GetSupportedDataplaneFeatures(ctx, &pbdataplane.GetSupportedDataplaneFeaturesRequest{}) - require.Error(t, err) - require.Equal(t, codes.PermissionDenied.String(), status.Code(err).String()) - require.Nil(t, resp) -} diff --git a/agent/grpc/public/services/dataplane/mock_ACLResolver.go b/agent/grpc/public/services/dataplane/mock_ACLResolver.go deleted file mode 100644 index 1a73abfc81faa..0000000000000 --- a/agent/grpc/public/services/dataplane/mock_ACLResolver.go +++ /dev/null @@ -1,47 +0,0 @@ -// Code generated by mockery v2.11.0. DO NOT EDIT. - -package dataplane - -import ( - acl "github.com/hashicorp/consul/acl" - mock "github.com/stretchr/testify/mock" - - testing "testing" -) - -// MockACLResolver is an autogenerated mock type for the ACLResolver type -type MockACLResolver struct { - mock.Mock -} - -// ResolveTokenAndDefaultMeta provides a mock function with given fields: _a0, _a1, _a2 -func (_m *MockACLResolver) ResolveTokenAndDefaultMeta(_a0 string, _a1 *acl.EnterpriseMeta, _a2 *acl.AuthorizerContext) (acl.Authorizer, error) { - ret := _m.Called(_a0, _a1, _a2) - - var r0 acl.Authorizer - if rf, ok := ret.Get(0).(func(string, *acl.EnterpriseMeta, *acl.AuthorizerContext) acl.Authorizer); ok { - r0 = rf(_a0, _a1, _a2) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(acl.Authorizer) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(string, *acl.EnterpriseMeta, *acl.AuthorizerContext) error); ok { - r1 = rf(_a0, _a1, _a2) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// NewMockACLResolver creates a new instance of MockACLResolver. It also registers a cleanup function to assert the mocks expectations. -func NewMockACLResolver(t testing.TB) *MockACLResolver { - mock := &MockACLResolver{} - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/grpc/public/services/dataplane/server.go b/agent/grpc/public/services/dataplane/server.go deleted file mode 100644 index b45f6f38ac0b1..0000000000000 --- a/agent/grpc/public/services/dataplane/server.go +++ /dev/null @@ -1,42 +0,0 @@ -package dataplane - -import ( - "google.golang.org/grpc" - - "github.com/hashicorp/go-hclog" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbdataplane" -) - -type Server struct { - Config -} - -type Config struct { - GetStore func() StateStore - Logger hclog.Logger - ACLResolver ACLResolver - // Datacenter of the Consul server this gRPC server is hosted on - Datacenter string -} - -type StateStore interface { - ServiceNode(string, string, string, *acl.EnterpriseMeta, string) (uint64, *structs.ServiceNode, error) -} - -//go:generate mockery --name ACLResolver --inpackage -type ACLResolver interface { - ResolveTokenAndDefaultMeta(string, *acl.EnterpriseMeta, *acl.AuthorizerContext) (acl.Authorizer, error) -} - -func NewServer(cfg Config) *Server { - return &Server{cfg} -} - -var _ pbdataplane.DataplaneServiceServer = (*Server)(nil) - -func (s *Server) Register(grpcServer *grpc.Server) { - pbdataplane.RegisterDataplaneServiceServer(grpcServer, s) -} diff --git a/agent/grpc/public/services/dataplane/server_test.go b/agent/grpc/public/services/dataplane/server_test.go deleted file mode 100644 index fa0a24b91f0bc..0000000000000 --- a/agent/grpc/public/services/dataplane/server_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package dataplane - -import ( - "context" - "testing" - - "github.com/hashicorp/consul/agent/grpc/public/testutils" - "github.com/hashicorp/consul/proto-public/pbdataplane" - "github.com/stretchr/testify/require" - "google.golang.org/grpc" -) - -func testClient(t *testing.T, server *Server) pbdataplane.DataplaneServiceClient { - t.Helper() - - addr := testutils.RunTestServer(t, server) - - conn, err := grpc.DialContext(context.Background(), addr.String(), grpc.WithInsecure()) - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, conn.Close()) - }) - - return pbdataplane.NewDataplaneServiceClient(conn) -} diff --git a/agent/grpc/public/services/serverdiscovery/mock_ACLResolver.go b/agent/grpc/public/services/serverdiscovery/mock_ACLResolver.go deleted file mode 100644 index 909e9c617213f..0000000000000 --- a/agent/grpc/public/services/serverdiscovery/mock_ACLResolver.go +++ /dev/null @@ -1,36 +0,0 @@ -// Code generated by mockery v1.0.0. DO NOT EDIT. - -package serverdiscovery - -import ( - acl "github.com/hashicorp/consul/acl" - mock "github.com/stretchr/testify/mock" -) - -// MockACLResolver is an autogenerated mock type for the ACLResolver type -type MockACLResolver struct { - mock.Mock -} - -// ResolveTokenAndDefaultMeta provides a mock function with given fields: _a0, _a1, _a2 -func (_m *MockACLResolver) ResolveTokenAndDefaultMeta(_a0 string, _a1 *acl.EnterpriseMeta, _a2 *acl.AuthorizerContext) (acl.Authorizer, error) { - ret := _m.Called(_a0, _a1, _a2) - - var r0 acl.Authorizer - if rf, ok := ret.Get(0).(func(string, *acl.EnterpriseMeta, *acl.AuthorizerContext) acl.Authorizer); ok { - r0 = rf(_a0, _a1, _a2) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(acl.Authorizer) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(string, *acl.EnterpriseMeta, *acl.AuthorizerContext) error); ok { - r1 = rf(_a0, _a1, _a2) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} diff --git a/agent/grpc/public/services/serverdiscovery/server.go b/agent/grpc/public/services/serverdiscovery/server.go deleted file mode 100644 index ec82b47fa367b..0000000000000 --- a/agent/grpc/public/services/serverdiscovery/server.go +++ /dev/null @@ -1,38 +0,0 @@ -package serverdiscovery - -import ( - "google.golang.org/grpc" - - "github.com/hashicorp/go-hclog" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/proto-public/pbserverdiscovery" -) - -type Server struct { - Config -} - -type Config struct { - Publisher EventPublisher - Logger hclog.Logger - ACLResolver ACLResolver -} - -type EventPublisher interface { - Subscribe(*stream.SubscribeRequest) (*stream.Subscription, error) -} - -//go:generate mockery -name ACLResolver -inpkg -type ACLResolver interface { - ResolveTokenAndDefaultMeta(string, *acl.EnterpriseMeta, *acl.AuthorizerContext) (acl.Authorizer, error) -} - -func NewServer(cfg Config) *Server { - return &Server{cfg} -} - -func (s *Server) Register(grpcServer *grpc.Server) { - pbserverdiscovery.RegisterServerDiscoveryServiceServer(grpcServer, s) -} diff --git a/agent/grpc/public/services/serverdiscovery/server_test.go b/agent/grpc/public/services/serverdiscovery/server_test.go deleted file mode 100644 index 2c26f2a1c4c81..0000000000000 --- a/agent/grpc/public/services/serverdiscovery/server_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package serverdiscovery - -import ( - "context" - "testing" - "time" - - mock "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - "google.golang.org/grpc" - - "github.com/hashicorp/consul/agent/consul/autopilotevents" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/grpc/public/testutils" - "github.com/hashicorp/consul/proto-public/pbserverdiscovery" -) - -type mockSnapshotHandler struct { - mock.Mock -} - -func newMockSnapshotHandler(t *testing.T) *mockSnapshotHandler { - handler := &mockSnapshotHandler{} - t.Cleanup(func() { - handler.AssertExpectations(t) - }) - return handler -} - -func (m *mockSnapshotHandler) handle(req stream.SubscribeRequest, buf stream.SnapshotAppender) (uint64, error) { - ret := m.Called(req, buf) - return ret.Get(0).(uint64), ret.Error(1) -} - -func (m *mockSnapshotHandler) expect(token string, requestIndex uint64, eventIndex uint64, payload autopilotevents.EventPayloadReadyServers) { - m.On("handle", stream.SubscribeRequest{ - Topic: autopilotevents.EventTopicReadyServers, - Subject: stream.SubjectNone, - Token: token, - Index: requestIndex, - }, mock.Anything).Once().Run(func(args mock.Arguments) { - buf := args.Get(1).(stream.SnapshotAppender) - buf.Append([]stream.Event{ - { - Topic: autopilotevents.EventTopicReadyServers, - Index: eventIndex, - Payload: payload, - }, - }) - }).Return(eventIndex, nil) -} - -func newMockACLResolver(t *testing.T) *MockACLResolver { - t.Helper() - m := &MockACLResolver{} - t.Cleanup(func() { m.AssertExpectations(t) }) - return m -} - -func setupPublisher(t *testing.T) (*mockSnapshotHandler, state.EventPublisher) { - t.Helper() - - handler := newMockSnapshotHandler(t) - - publisher := stream.NewEventPublisher(10 * time.Second) - publisher.RegisterHandler(autopilotevents.EventTopicReadyServers, handler.handle) - - ctx, cancel := context.WithCancel(context.Background()) - t.Cleanup(cancel) - go publisher.Run(ctx) - - return handler, publisher - -} - -func testClient(t *testing.T, server *Server) pbserverdiscovery.ServerDiscoveryServiceClient { - t.Helper() - - addr := testutils.RunTestServer(t, server) - - conn, err := grpc.DialContext(context.Background(), addr.String(), grpc.WithInsecure()) - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, conn.Close()) - }) - - return pbserverdiscovery.NewServerDiscoveryServiceClient(conn) -} diff --git a/agent/grpc/public/services/serverdiscovery/watch_servers.go b/agent/grpc/public/services/serverdiscovery/watch_servers.go deleted file mode 100644 index 6ceda83ffed30..0000000000000 --- a/agent/grpc/public/services/serverdiscovery/watch_servers.go +++ /dev/null @@ -1,146 +0,0 @@ -package serverdiscovery - -import ( - "context" - "errors" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/autopilotevents" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/grpc/public" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto-public/pbserverdiscovery" - "github.com/hashicorp/go-hclog" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -// WatchServers provides a stream on which you can receive the list of servers -// that are ready to receive incoming requests including stale queries. The -// current set of ready servers are sent immediately at the start of the -// stream and new updates will be sent whenver the set of ready servers changes. -func (s *Server) WatchServers(req *pbserverdiscovery.WatchServersRequest, serverStream pbserverdiscovery.ServerDiscoveryService_WatchServersServer) error { - logger := s.Logger.Named("watch-servers").With("request_id", public.TraceID()) - - logger.Debug("starting stream") - defer logger.Trace("stream closed") - - token := public.TokenFromContext(serverStream.Context()) - - // Serve the ready servers from an EventPublisher subscription. If the subscription is - // closed due to an ACL change, we'll attempt to re-authorize and resume it to - // prevent unnecessarily terminating the stream. - var idx uint64 - for { - var err error - idx, err = s.serveReadyServers(token, idx, req, serverStream, logger) - if errors.Is(err, stream.ErrSubForceClosed) { - logger.Trace("subscription force-closed due to an ACL change or snapshot restore, will attempt to re-auth and resume") - } else { - return err - } - } -} - -func (s *Server) serveReadyServers(token string, index uint64, req *pbserverdiscovery.WatchServersRequest, serverStream pbserverdiscovery.ServerDiscoveryService_WatchServersServer, logger hclog.Logger) (uint64, error) { - if err := s.authorize(token); err != nil { - return 0, err - } - - // Start the subscription. - sub, err := s.Publisher.Subscribe(&stream.SubscribeRequest{ - Topic: autopilotevents.EventTopicReadyServers, - Subject: stream.SubjectNone, - Token: token, - Index: index, - }) - if err != nil { - logger.Error("failed to subscribe to server discovery events", "error", err) - return 0, status.Error(codes.Internal, "failed to subscribe to server discovery events") - } - defer sub.Unsubscribe() - - for { - event, err := sub.Next(serverStream.Context()) - switch { - case errors.Is(err, stream.ErrSubForceClosed): - return index, err - case errors.Is(err, context.Canceled): - return 0, nil - case err != nil: - logger.Error("failed to read next event", "error", err) - return index, status.Error(codes.Internal, err.Error()) - } - - // We do not send framing events (e.g. EndOfSnapshot, NewSnapshotToFollow) - // because we send a full list of ready servers on every event, rather than expecting - // clients to maintain a state-machine in the way they do for service health. - if event.IsFramingEvent() { - continue - } - - // Note: this check isn't strictly necessary because the event publishing - // machinery will ensure the index increases monotonically, but it can be - // tricky to faithfully reproduce this in tests (e.g. the EventPublisher - // garbage collects topic buffers and snapshots aggressively when streams - // disconnect) so this avoids a bunch of confusing setup code. - if event.Index <= index { - continue - } - - index = event.Index - - rsp, err := eventToResponse(req, event) - if err != nil { - logger.Error("failed to convert event to response", "error", err) - return index, status.Error(codes.Internal, err.Error()) - } - if err := serverStream.Send(rsp); err != nil { - logger.Error("failed to send response", "error", err) - return index, err - } - } -} - -func (s *Server) authorize(token string) error { - // Require the given ACL token to have `service:write` on any service (in any - // partition and namespace). - var authzContext acl.AuthorizerContext - entMeta := structs.WildcardEnterpriseMetaInPartition(structs.WildcardSpecifier) - authz, err := s.ACLResolver.ResolveTokenAndDefaultMeta(token, entMeta, &authzContext) - if err != nil { - return status.Error(codes.Unauthenticated, err.Error()) - } - if err := authz.ToAllowAuthorizer().ServiceWriteAnyAllowed(&authzContext); err != nil { - return status.Error(codes.PermissionDenied, err.Error()) - } - return nil -} - -func eventToResponse(req *pbserverdiscovery.WatchServersRequest, event stream.Event) (*pbserverdiscovery.WatchServersResponse, error) { - readyServers, err := autopilotevents.ExtractEventPayload(event) - if err != nil { - return nil, err - } - - var servers []*pbserverdiscovery.Server - - for _, srv := range readyServers { - addr := srv.Address - - wanAddr, ok := srv.TaggedAddresses[structs.TaggedAddressWAN] - if req.Wan && ok { - addr = wanAddr - } - - servers = append(servers, &pbserverdiscovery.Server{ - Id: srv.ID, - Version: srv.Version, - Address: addr, - }) - } - - return &pbserverdiscovery.WatchServersResponse{ - Servers: servers, - }, nil -} diff --git a/agent/grpc/public/services/serverdiscovery/watch_servers_test.go b/agent/grpc/public/services/serverdiscovery/watch_servers_test.go deleted file mode 100644 index 1409431d944f2..0000000000000 --- a/agent/grpc/public/services/serverdiscovery/watch_servers_test.go +++ /dev/null @@ -1,302 +0,0 @@ -package serverdiscovery - -import ( - "context" - "errors" - "io" - "testing" - "time" - - acl "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/autopilotevents" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/grpc/public" - "github.com/hashicorp/consul/agent/grpc/public/testutils" - "github.com/hashicorp/consul/proto-public/pbserverdiscovery" - "github.com/hashicorp/consul/proto/prototest" - "github.com/hashicorp/consul/sdk/testutil" - mock "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -const testACLToken = "eb61f1ed-65a4-4da6-8d3d-0564bd16c965" - -func TestWatchServers_StreamLifeCycle(t *testing.T) { - // The flow for this test is roughly: - // - // 1. Open a WatchServers stream - // 2. Observe the snapshot message is sent back through - // the stream. - // 3. Publish an event that changes to 2 servers. - // 4. See the corresponding message sent back through the stream. - // 5. Send a NewCloseSubscriptionEvent for the token secret. - // 6. See that a new snapshot is taken and the corresponding message - // gets sent back. If there were multiple subscribers for the topic - // then this should not happen. However with the current EventPublisher - // implementation, whenever the last subscriber for a topic has its - // subscription closed then the publisher will delete the whole topic - // buffer. When that happens, resubscribing will see no snapshot - // cache, or latest event in the buffer and force creating a new snapshot. - // 7. Publish another event to move to 3 servers. - // 8. Ensure that the message gets sent through the stream. Also - // this will validate that no other 1 or 2 server event is - // seen after stream reinitialization. - - srv1 := autopilotevents.ReadyServerInfo{ - ID: "9aeb73f6-e83e-43c1-bdc9-ca5e43efe3e4", - Address: "198.18.0.1", - Version: "1.12.0", - } - srv2 := autopilotevents.ReadyServerInfo{ - ID: "eec8721f-c42b-48da-a5a5-07565158015e", - Address: "198.18.0.2", - Version: "1.12.3", - } - srv3 := autopilotevents.ReadyServerInfo{ - ID: "256796f2-3a38-4f80-8cef-375c3cb3aa1f", - Address: "198.18.0.3", - Version: "1.12.3", - } - - oneServerEventPayload := autopilotevents.EventPayloadReadyServers{srv1} - twoServerEventPayload := autopilotevents.EventPayloadReadyServers{srv1, srv2} - threeServerEventPayload := autopilotevents.EventPayloadReadyServers{srv1, srv2, srv3} - - oneServerResponse := &pbserverdiscovery.WatchServersResponse{ - Servers: []*pbserverdiscovery.Server{ - { - Id: srv1.ID, - Address: srv1.Address, - Version: srv1.Version, - }, - }, - } - - twoServerResponse := &pbserverdiscovery.WatchServersResponse{ - Servers: []*pbserverdiscovery.Server{ - { - Id: srv1.ID, - Address: srv1.Address, - Version: srv1.Version, - }, - { - Id: srv2.ID, - Address: srv2.Address, - Version: srv2.Version, - }, - }, - } - - threeServerResponse := &pbserverdiscovery.WatchServersResponse{ - Servers: []*pbserverdiscovery.Server{ - { - Id: srv1.ID, - Address: srv1.Address, - Version: srv1.Version, - }, - { - Id: srv2.ID, - Address: srv2.Address, - Version: srv2.Version, - }, - { - Id: srv3.ID, - Address: srv3.Address, - Version: srv3.Version, - }, - }, - } - - // setup the event publisher and snapshot handler - handler, publisher := setupPublisher(t) - // we only expect this to be called once. For the rest of the - // test we ought to be able to resume the stream. - handler.expect(testACLToken, 0, 1, oneServerEventPayload) - handler.expect(testACLToken, 2, 3, twoServerEventPayload) - - // setup the mock ACLResolver and its expectations - // 2 times authorization should succeed and the third should fail. - resolver := newMockACLResolver(t) - resolver.On("ResolveTokenAndDefaultMeta", testACLToken, mock.Anything, mock.Anything). - Return(testutils.TestAuthorizerServiceWriteAny(t), nil).Twice() - - // add the token to the requests context - ctx := public.ContextWithToken(context.Background(), testACLToken) - - // setup the server - server := NewServer(Config{ - Publisher: publisher, - Logger: testutil.Logger(t), - ACLResolver: resolver, - }) - - // Run the server and get a test client for it - client := testClient(t, server) - - // 1. Open the WatchServers stream - serverStream, err := client.WatchServers(ctx, &pbserverdiscovery.WatchServersRequest{Wan: false}) - require.NoError(t, err) - - rspCh := handleReadyServersStream(t, serverStream) - - // 2. Observe the snapshot message is sent back through the stream. - rsp := mustGetServers(t, rspCh) - require.NotNil(t, rsp) - prototest.AssertDeepEqual(t, oneServerResponse, rsp) - - // 3. Publish an event that changes to 2 servers. - publisher.Publish([]stream.Event{ - { - Topic: autopilotevents.EventTopicReadyServers, - Index: 2, - Payload: twoServerEventPayload, - }, - }) - - // 4. See the corresponding message sent back through the stream. - rsp = mustGetServers(t, rspCh) - require.NotNil(t, rsp) - prototest.AssertDeepEqual(t, twoServerResponse, rsp) - - // 5. Send a NewCloseSubscriptionEvent for the token secret. - publisher.Publish([]stream.Event{ - stream.NewCloseSubscriptionEvent([]string{testACLToken}), - }) - - // 6. Observe another snapshot message - rsp = mustGetServers(t, rspCh) - require.NotNil(t, rsp) - prototest.AssertDeepEqual(t, twoServerResponse, rsp) - - // 7. Publish another event to move to 3 servers. - publisher.Publish([]stream.Event{ - { - Topic: autopilotevents.EventTopicReadyServers, - Index: 4, - Payload: threeServerEventPayload, - }, - }) - - // 8. Ensure that the message gets sent through the stream. Also - // this will validate that no other 1 or 2 server event is - // seen after stream reinitialization. - rsp = mustGetServers(t, rspCh) - require.NotNil(t, rsp) - prototest.AssertDeepEqual(t, threeServerResponse, rsp) -} - -func TestWatchServers_ACLToken_PermissionDenied(t *testing.T) { - // setup the event publisher and snapshot handler - _, publisher := setupPublisher(t) - - resolver := newMockACLResolver(t) - resolver.On("ResolveTokenAndDefaultMeta", testACLToken, mock.Anything, mock.Anything). - Return(acl.DenyAll(), nil).Once() - - // add the token to the requests context - ctx := public.ContextWithToken(context.Background(), testACLToken) - - // setup the server - server := NewServer(Config{ - Publisher: publisher, - Logger: testutil.Logger(t), - ACLResolver: resolver, - }) - - // Run the server and get a test client for it - client := testClient(t, server) - - // 1. Open the WatchServers stream - serverStream, err := client.WatchServers(ctx, &pbserverdiscovery.WatchServersRequest{Wan: false}) - require.NoError(t, err) - rspCh := handleReadyServersStream(t, serverStream) - - // Expect to get an Unauthenticated error immediately. - err = mustGetError(t, rspCh) - require.Equal(t, codes.PermissionDenied.String(), status.Code(err).String()) -} - -func TestWatchServers_ACLToken_Unauthenticated(t *testing.T) { - // setup the event publisher and snapshot handler - _, publisher := setupPublisher(t) - - resolver := newMockACLResolver(t) - resolver.On("ResolveTokenAndDefaultMeta", testACLToken, mock.Anything, mock.Anything). - Return(nil, acl.ErrNotFound).Once() - - // add the token to the requests context - ctx := public.ContextWithToken(context.Background(), testACLToken) - - // setup the server - server := NewServer(Config{ - Publisher: publisher, - Logger: testutil.Logger(t), - ACLResolver: resolver, - }) - - // Run the server and get a test client for it - client := testClient(t, server) - - // 1. Open the WatchServers stream - serverStream, err := client.WatchServers(ctx, &pbserverdiscovery.WatchServersRequest{Wan: false}) - require.NoError(t, err) - rspCh := handleReadyServersStream(t, serverStream) - - // Expect to get an Unauthenticated error immediately. - err = mustGetError(t, rspCh) - require.Equal(t, codes.Unauthenticated.String(), status.Code(err).String()) -} - -func handleReadyServersStream(t *testing.T, stream pbserverdiscovery.ServerDiscoveryService_WatchServersClient) <-chan serversOrError { - t.Helper() - - rspCh := make(chan serversOrError) - go func() { - for { - rsp, err := stream.Recv() - if errors.Is(err, io.EOF) || - errors.Is(err, context.Canceled) || - errors.Is(err, context.DeadlineExceeded) { - return - } - rspCh <- serversOrError{ - rsp: rsp, - err: err, - } - } - }() - return rspCh -} - -func mustGetServers(t *testing.T, ch <-chan serversOrError) *pbserverdiscovery.WatchServersResponse { - t.Helper() - - select { - case rsp := <-ch: - require.NoError(t, rsp.err) - return rsp.rsp - case <-time.After(1 * time.Second): - t.Fatal("timeout waiting for WatchServersResponse") - return nil - } -} - -func mustGetError(t *testing.T, ch <-chan serversOrError) error { - t.Helper() - - select { - case rsp := <-ch: - require.Error(t, rsp.err) - return rsp.err - case <-time.After(1 * time.Second): - t.Fatal("timeout waiting for WatchServersResponse") - return nil - } -} - -type serversOrError struct { - rsp *pbserverdiscovery.WatchServersResponse - err error -} diff --git a/agent/grpc/public/testutils/acl.go b/agent/grpc/public/testutils/acl.go deleted file mode 100644 index 8caacb1052190..0000000000000 --- a/agent/grpc/public/testutils/acl.go +++ /dev/null @@ -1,44 +0,0 @@ -package testutils - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/acl" -) - -func TestAuthorizerServiceWriteAny(t *testing.T) acl.Authorizer { - t.Helper() - - policy, err := acl.NewPolicyFromSource(` - service "foo" { - policy = "write" - } - `, acl.SyntaxCurrent, nil, nil) - require.NoError(t, err) - - authz, err := acl.NewPolicyAuthorizerWithDefaults(acl.DenyAll(), []*acl.Policy{policy}, nil) - require.NoError(t, err) - - return authz -} - -func TestAuthorizerServiceRead(t *testing.T, serviceName string) acl.Authorizer { - t.Helper() - - aclRule := &acl.Policy{ - PolicyRules: acl.PolicyRules{ - Services: []*acl.ServiceRule{ - { - Name: serviceName, - Policy: acl.PolicyRead, - }, - }, - }, - } - authz, err := acl.NewPolicyAuthorizerWithDefaults(acl.DenyAll(), []*acl.Policy{aclRule}, nil) - require.NoError(t, err) - - return authz -} diff --git a/agent/grpc/public/testutils/fsm.go b/agent/grpc/public/testutils/fsm.go deleted file mode 100644 index aea426a4ea1b3..0000000000000 --- a/agent/grpc/public/testutils/fsm.go +++ /dev/null @@ -1,81 +0,0 @@ -package testutils - -import ( - "context" - "sync" - "testing" - "time" - - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/stretchr/testify/require" -) - -func TestStateStore(t *testing.T, publisher state.EventPublisher) *state.Store { - t.Helper() - - gc, err := state.NewTombstoneGC(time.Second, time.Millisecond) - require.NoError(t, err) - - if publisher == nil { - publisher = stream.NoOpEventPublisher{} - } - - return state.NewStateStoreWithEventPublisher(gc, publisher) -} - -type Registrar func(*FakeFSM, *stream.EventPublisher) - -type FakeFSMConfig struct { - Register Registrar - Refresh []stream.Topic - publisher *stream.EventPublisher -} - -type FakeFSM struct { - config FakeFSMConfig - lock sync.Mutex - store *state.Store -} - -func newFakeFSM(t *testing.T, config FakeFSMConfig) *FakeFSM { - t.Helper() - - store := TestStateStore(t, config.publisher) - - fsm := &FakeFSM{store: store, config: config} - - config.Register(fsm, fsm.config.publisher) - - return fsm -} - -func (f *FakeFSM) GetStore() *state.Store { - f.lock.Lock() - defer f.lock.Unlock() - return f.store -} - -func (f *FakeFSM) ReplaceStore(store *state.Store) { - f.lock.Lock() - defer f.lock.Unlock() - oldStore := f.store - f.store = store - oldStore.Abandon() - for _, topic := range f.config.Refresh { - f.config.publisher.RefreshTopic(topic) - } -} - -func SetupFSMAndPublisher(t *testing.T, config FakeFSMConfig) (*FakeFSM, state.EventPublisher) { - t.Helper() - config.publisher = stream.NewEventPublisher(10 * time.Second) - - fsm := newFakeFSM(t, config) - - ctx, cancel := context.WithCancel(context.Background()) - t.Cleanup(cancel) - go config.publisher.Run(ctx) - - return fsm, config.publisher -} diff --git a/agent/grpc/public/testutils/server.go b/agent/grpc/public/testutils/server.go deleted file mode 100644 index 53d779d9127ab..0000000000000 --- a/agent/grpc/public/testutils/server.go +++ /dev/null @@ -1,30 +0,0 @@ -package testutils - -import ( - "net" - "testing" - - "github.com/stretchr/testify/require" - "google.golang.org/grpc" -) - -type GRPCService interface { - Register(*grpc.Server) -} - -func RunTestServer(t *testing.T, services ...GRPCService) net.Addr { - t.Helper() - - lis, err := net.Listen("tcp", "127.0.0.1:0") - require.NoError(t, err) - - grpcServer := grpc.NewServer() - for _, svc := range services { - svc.Register(grpcServer) - } - - go grpcServer.Serve(lis) - t.Cleanup(grpcServer.Stop) - - return lis.Addr() -} diff --git a/agent/grpc/public/utils.go b/agent/grpc/public/utils.go deleted file mode 100644 index 70d7d1abb5278..0000000000000 --- a/agent/grpc/public/utils.go +++ /dev/null @@ -1,13 +0,0 @@ -package public - -import "github.com/hashicorp/go-uuid" - -// We tag logs with a unique identifier to ease debugging. In the future this -// should probably be a real Open Telemetry trace ID. -func TraceID() string { - id, err := uuid.GenerateUUID() - if err != nil { - return "" - } - return id -} diff --git a/agent/health_endpoint.go b/agent/health_endpoint.go index 6ea64528b07b2..1577c443261c9 100644 --- a/agent/health_endpoint.go +++ b/agent/health_endpoint.go @@ -31,7 +31,7 @@ func (s *HTTPHandlers) HealthChecksInState(resp http.ResponseWriter, req *http.R // Pull out the service name args.State = strings.TrimPrefix(req.URL.Path, "/v1/health/state/") if args.State == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing check state"} + return nil, BadRequestError{Reason: "Missing check state"} } // Make the RPC request @@ -75,7 +75,7 @@ func (s *HTTPHandlers) HealthNodeChecks(resp http.ResponseWriter, req *http.Requ // Pull out the service name args.Node = strings.TrimPrefix(req.URL.Path, "/v1/health/node/") if args.Node == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing node name"} + return nil, BadRequestError{Reason: "Missing node name"} } // Make the RPC request @@ -121,7 +121,7 @@ func (s *HTTPHandlers) HealthServiceChecks(resp http.ResponseWriter, req *http.R // Pull out the service name args.ServiceName = strings.TrimPrefix(req.URL.Path, "/v1/health/checks/") if args.ServiceName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing service name"} + return nil, BadRequestError{Reason: "Missing service name"} } // Make the RPC request @@ -183,8 +183,6 @@ func (s *HTTPHandlers) healthServiceNodes(resp http.ResponseWriter, req *http.Re return nil, nil } - s.parsePeerName(req, &args) - // Check for tags params := req.URL.Query() if _, ok := params["tag"]; ok { @@ -192,10 +190,6 @@ func (s *HTTPHandlers) healthServiceNodes(resp http.ResponseWriter, req *http.Re args.TagFilter = true } - if _, ok := params["merge-central-config"]; ok { - args.MergeCentralConfig = true - } - // Determine the prefix var prefix string switch healthType { @@ -213,7 +207,7 @@ func (s *HTTPHandlers) healthServiceNodes(resp http.ResponseWriter, req *http.Re // Pull out the service name args.ServiceName = strings.TrimPrefix(req.URL.Path, prefix) if args.ServiceName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing service name"} + return nil, BadRequestError{Reason: "Missing service name"} } out, md, err := s.agent.rpcClientHealth.ServiceNodes(req.Context(), args) @@ -231,7 +225,7 @@ func (s *HTTPHandlers) healthServiceNodes(resp http.ResponseWriter, req *http.Re // Filter to only passing if specified filter, err := getBoolQueryParam(params, api.HealthPassing) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Invalid value for ?passing"} + return nil, BadRequestError{Reason: "Invalid value for ?passing"} } // FIXME: remove filterNonPassing, replace with nodes.Filter, which is used by DNSServer diff --git a/agent/health_endpoint_test.go b/agent/health_endpoint_test.go index a3393310511bc..fa15091e7d268 100644 --- a/agent/health_endpoint_test.go +++ b/agent/health_endpoint_test.go @@ -18,7 +18,6 @@ import ( "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" "github.com/hashicorp/consul/testrpc" "github.com/hashicorp/consul/types" @@ -609,169 +608,133 @@ func TestHealthServiceNodes(t *testing.T) { t.Parallel() a := NewTestAgent(t, "") + defer a.Shutdown() testrpc.WaitForTestAgent(t, a.RPC, "dc1") - testingPeerNames := []string{"", "my-peer"} + req, _ := http.NewRequest("GET", "/v1/health/service/consul?dc=dc1", nil) + resp := httptest.NewRecorder() + obj, err := a.srv.HealthServiceNodes(resp, req) + if err != nil { + t.Fatalf("err: %v", err) + } - for _, peerName := range testingPeerNames { - req, err := http.NewRequest("GET", "/v1/health/service/consul?dc=dc1"+peerQuerySuffix(peerName), nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - obj, err := a.srv.HealthServiceNodes(resp, req) - require.NoError(t, err) + assertIndex(t, resp) - assertIndex(t, resp) + // Should be 1 health check for consul + nodes := obj.(structs.CheckServiceNodes) + if len(nodes) != 1 { + t.Fatalf("bad: %v", obj) + } - nodes := obj.(structs.CheckServiceNodes) - if peerName == "" { - // Should be 1 health check for consul - require.Len(t, nodes, 1) - } else { - require.NotNil(t, nodes) - require.Len(t, nodes, 0) - } + req, _ = http.NewRequest("GET", "/v1/health/service/nope?dc=dc1", nil) + resp = httptest.NewRecorder() + obj, err = a.srv.HealthServiceNodes(resp, req) + if err != nil { + t.Fatalf("err: %v", err) + } - req, err = http.NewRequest("GET", "/v1/health/service/nope?dc=dc1"+peerQuerySuffix(peerName), nil) - require.NoError(t, err) - resp = httptest.NewRecorder() - obj, err = a.srv.HealthServiceNodes(resp, req) - require.NoError(t, err) + assertIndex(t, resp) - assertIndex(t, resp) + // Should be a non-nil empty list + nodes = obj.(structs.CheckServiceNodes) + if nodes == nil || len(nodes) != 0 { + t.Fatalf("bad: %v", obj) + } - // Should be a non-nil empty list - nodes = obj.(structs.CheckServiceNodes) - require.NotNil(t, nodes) - require.Len(t, nodes, 0) + args := &structs.RegisterRequest{ + Datacenter: "dc1", + Node: "bar", + Address: "127.0.0.1", + Service: &structs.NodeService{ + ID: "test", + Service: "test", + }, } - // TODO(peering): will have to seed this data differently in the future - originalRegister := make(map[string]*structs.RegisterRequest) - for _, peerName := range testingPeerNames { - args := &structs.RegisterRequest{ - Datacenter: "dc1", - Node: "bar", - Address: "127.0.0.1", - PeerName: peerName, - Service: &structs.NodeService{ - ID: "test", - Service: "test", - PeerName: peerName, - }, - } + var out struct{} + if err := a.RPC("Catalog.Register", args, &out); err != nil { + t.Fatalf("err: %v", err) + } - var out struct{} - require.NoError(t, a.RPC("Catalog.Register", args, &out)) - originalRegister[peerName] = args + req, _ = http.NewRequest("GET", "/v1/health/service/test?dc=dc1", nil) + resp = httptest.NewRecorder() + obj, err = a.srv.HealthServiceNodes(resp, req) + if err != nil { + t.Fatalf("err: %v", err) } - verify := func(t *testing.T, peerName string, nodes structs.CheckServiceNodes) { - require.Len(t, nodes, 1) - require.Equal(t, peerName, nodes[0].Node.PeerName) - require.Equal(t, "bar", nodes[0].Node.Node) - require.Equal(t, peerName, nodes[0].Service.PeerName) - require.Equal(t, "test", nodes[0].Service.Service) - require.NotNil(t, nodes[0].Checks) - require.Len(t, nodes[0].Checks, 0) + assertIndex(t, resp) + + // Should be a non-nil empty list for checks + nodes = obj.(structs.CheckServiceNodes) + if len(nodes) != 1 || nodes[0].Checks == nil || len(nodes[0].Checks) != 0 { + t.Fatalf("bad: %v", obj) } - for _, peerName := range testingPeerNames { - req, err := http.NewRequest("GET", "/v1/health/service/test?dc=dc1"+peerQuerySuffix(peerName), nil) - require.NoError(t, err) + // Test caching + { + // List instances with cache enabled + req, _ := http.NewRequest("GET", "/v1/health/service/test?cached", nil) resp := httptest.NewRecorder() obj, err := a.srv.HealthServiceNodes(resp, req) require.NoError(t, err) - - assertIndex(t, resp) - - // Should be a non-nil empty list for checks nodes := obj.(structs.CheckServiceNodes) - verify(t, peerName, nodes) - - // Test caching - { - // List instances with cache enabled - req, err := http.NewRequest("GET", "/v1/health/service/test?cached"+peerQuerySuffix(peerName), nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - obj, err := a.srv.HealthServiceNodes(resp, req) - require.NoError(t, err) - nodes := obj.(structs.CheckServiceNodes) - verify(t, peerName, nodes) + assert.Len(t, nodes, 1) - // Should be a cache miss - require.Equal(t, "MISS", resp.Header().Get("X-Cache")) - } + // Should be a cache miss + assert.Equal(t, "MISS", resp.Header().Get("X-Cache")) + } - { - // List instances with cache enabled - req, err := http.NewRequest("GET", "/v1/health/service/test?cached"+peerQuerySuffix(peerName), nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - obj, err := a.srv.HealthServiceNodes(resp, req) - require.NoError(t, err) - nodes := obj.(structs.CheckServiceNodes) - verify(t, peerName, nodes) + { + // List instances with cache enabled + req, _ := http.NewRequest("GET", "/v1/health/service/test?cached", nil) + resp := httptest.NewRecorder() + obj, err := a.srv.HealthServiceNodes(resp, req) + require.NoError(t, err) + nodes := obj.(structs.CheckServiceNodes) + assert.Len(t, nodes, 1) - // Should be a cache HIT now! - require.Equal(t, "HIT", resp.Header().Get("X-Cache")) - } + // Should be a cache HIT now! + assert.Equal(t, "HIT", resp.Header().Get("X-Cache")) } // Ensure background refresh works { - // TODO(peering): will have to seed this data differently in the future - for _, peerName := range testingPeerNames { - args := originalRegister[peerName] - // Register a new instance of the service - args2 := *args - args2.Node = "baz" - args2.Address = "127.0.0.2" - var out struct{} - require.NoError(t, a.RPC("Catalog.Register", &args2, &out)) - } - - for _, peerName := range testingPeerNames { - retry.Run(t, func(r *retry.R) { - // List it again - req, err := http.NewRequest("GET", "/v1/health/service/test?cached"+peerQuerySuffix(peerName), nil) - require.NoError(r, err) - resp := httptest.NewRecorder() - obj, err := a.srv.HealthServiceNodes(resp, req) - require.NoError(r, err) + // Register a new instance of the service + args2 := args + args2.Node = "baz" + args2.Address = "127.0.0.2" + require.NoError(t, a.RPC("Catalog.Register", args, &out)) - nodes := obj.(structs.CheckServiceNodes) - require.Len(r, nodes, 2) + retry.Run(t, func(r *retry.R) { + // List it again + req, _ := http.NewRequest("GET", "/v1/health/service/test?cached", nil) + resp := httptest.NewRecorder() + obj, err := a.srv.HealthServiceNodes(resp, req) + r.Check(err) - header := resp.Header().Get("X-Consul-Index") - if header == "" || header == "0" { - r.Fatalf("Want non-zero header: %q", header) - } - _, err = strconv.ParseUint(header, 10, 64) - require.NoError(r, err) - - // Should be a cache hit! The data should've updated in the cache - // in the background so this should've been fetched directly from - // the cache. - if resp.Header().Get("X-Cache") != "HIT" { - r.Fatalf("should be a cache hit") - } - }) - } + nodes := obj.(structs.CheckServiceNodes) + if len(nodes) != 2 { + r.Fatalf("Want 2 nodes") + } + header := resp.Header().Get("X-Consul-Index") + if header == "" || header == "0" { + r.Fatalf("Want non-zero header: %q", header) + } + _, err = strconv.ParseUint(header, 10, 64) + r.Check(err) + + // Should be a cache hit! The data should've updated in the cache + // in the background so this should've been fetched directly from + // the cache. + if resp.Header().Get("X-Cache") != "HIT" { + r.Fatalf("should be a cache hit") + } + }) } } func TestHealthServiceNodes_Blocking(t *testing.T) { - t.Run("local data", func(t *testing.T) { - testHealthServiceNodes_Blocking(t, structs.DefaultPeerKeyword) - }) - - t.Run("peered data", func(t *testing.T) { - testHealthServiceNodes_Blocking(t, "my-peer") - }) -} - -func testHealthServiceNodes_Blocking(t *testing.T, peerName string) { cases := []struct { name string hcl string @@ -794,23 +757,10 @@ use_streaming_backend = true }, } - verify := func(t *testing.T, expectN int, nodes structs.CheckServiceNodes) { - require.Len(t, nodes, expectN) - - for i, node := range nodes { - require.Equal(t, peerName, node.Node.PeerName) - if i == 2 { - require.Equal(t, "zoo", node.Node.Node) - } else { - require.Equal(t, "bar", node.Node.Node) - } - require.Equal(t, "test", node.Service.Service) - } - } - for _, tc := range cases { tc := tc t.Run(tc.name, func(t *testing.T) { + sink := metrics.NewInmemSink(5*time.Second, time.Minute) metrics.NewGlobal(&metrics.Config{ ServiceName: "testing", @@ -822,17 +772,14 @@ use_streaming_backend = true testrpc.WaitForTestAgent(t, a.RPC, "dc1") // Register some initial service instances - // TODO(peering): will have to seed this data differently in the future for i := 0; i < 2; i++ { args := &structs.RegisterRequest{ Datacenter: "dc1", Node: "bar", Address: "127.0.0.1", - PeerName: peerName, Service: &structs.NodeService{ - ID: fmt.Sprintf("test%03d", i), - Service: "test", - PeerName: peerName, + ID: fmt.Sprintf("test%03d", i), + Service: "test", }, } @@ -841,13 +788,13 @@ use_streaming_backend = true } // Initial request should return two instances - req, _ := http.NewRequest("GET", "/v1/health/service/test?dc=dc1"+peerQuerySuffix(peerName), nil) + req, _ := http.NewRequest("GET", "/v1/health/service/test?dc=dc1", nil) resp := httptest.NewRecorder() obj, err := a.srv.HealthServiceNodes(resp, req) require.NoError(t, err) nodes := obj.(structs.CheckServiceNodes) - verify(t, 2, nodes) + require.Len(t, nodes, 2) idx := getIndex(t, resp) require.True(t, idx > 0) @@ -877,16 +824,13 @@ use_streaming_backend = true go func() { time.Sleep(sleep) - // TODO(peering): will have to seed this data differently in the future args := &structs.RegisterRequest{ Datacenter: "dc1", Node: "zoo", Address: "127.0.0.3", - PeerName: peerName, Service: &structs.NodeService{ - ID: "test", - Service: "test", - PeerName: peerName, + ID: "test", + Service: "test", }, } @@ -896,7 +840,7 @@ use_streaming_backend = true { timeout := 30 * time.Second - url := fmt.Sprintf("/v1/health/service/test?dc=dc1&index=%d&wait=%s"+peerQuerySuffix(peerName), idx, timeout) + url := fmt.Sprintf("/v1/health/service/test?dc=dc1&index=%d&wait=%s", idx, timeout) req, _ := http.NewRequest("GET", url, nil) resp := httptest.NewRecorder() obj, err := a.srv.HealthServiceNodes(resp, req) @@ -909,7 +853,7 @@ use_streaming_backend = true " it timed out. timeout=%s, elapsed=%s", timeout, elapsed) nodes := obj.(structs.CheckServiceNodes) - verify(t, 3, nodes) + require.Len(t, nodes, 3) newIdx := getIndex(t, resp) require.True(t, idx < newIdx, "index should have increased."+ @@ -926,7 +870,7 @@ use_streaming_backend = true start = time.Now() { timeout := 200 * time.Millisecond - url := fmt.Sprintf("/v1/health/service/test?dc=dc1&index=%d&wait=%s"+peerQuerySuffix(peerName), + url := fmt.Sprintf("/v1/health/service/test?dc=dc1&index=%d&wait=%s", idx, timeout) req, _ := http.NewRequest("GET", url, nil) resp := httptest.NewRecorder() @@ -939,7 +883,7 @@ use_streaming_backend = true " least as long as timeout. timeout=%s, elapsed=%s", timeout, elapsed) nodes := obj.(structs.CheckServiceNodes) - verify(t, 3, nodes) + require.Len(t, nodes, 3) newIdx := getIndex(t, resp) require.Equal(t, idx, newIdx) @@ -960,16 +904,6 @@ use_streaming_backend = true } func TestHealthServiceNodes_Blocking_withFilter(t *testing.T) { - t.Run("local data", func(t *testing.T) { - testHealthServiceNodes_Blocking_withFilter(t, structs.DefaultPeerKeyword) - }) - - t.Run("peered data", func(t *testing.T) { - testHealthServiceNodes_Blocking_withFilter(t, "my-peer") - }) -} - -func testHealthServiceNodes_Blocking_withFilter(t *testing.T, peerName string) { cases := []struct { name string hcl string @@ -990,19 +924,23 @@ use_streaming_backend = true }, } - // TODO(peering): will have to seed this data differently in the future + runStep := func(t *testing.T, name string, fn func(t *testing.T)) { + t.Helper() + if !t.Run(name, fn) { + t.FailNow() + } + } + register := func(t *testing.T, a *TestAgent, name, tag string) { args := &structs.RegisterRequest{ Datacenter: "dc1", ID: types.NodeID("43d419c0-433b-42c3-bf8a-193eba0b41a3"), Node: "node1", Address: "127.0.0.1", - PeerName: peerName, Service: &structs.NodeService{ - ID: name, - Service: name, - PeerName: peerName, - Tags: []string{tag}, + ID: name, + Service: name, + Tags: []string{tag}, }, } @@ -1026,8 +964,8 @@ use_streaming_backend = true // Initial request with a filter should return one. var lastIndex uint64 - testutil.RunStep(t, "read original", func(t *testing.T) { - req, err := http.NewRequest("GET", "/v1/health/service/web?dc=dc1&"+filterUrlPart+peerQuerySuffix(peerName), nil) + runStep(t, "read original", func(t *testing.T) { + req, err := http.NewRequest("GET", "/v1/health/service/web?dc=dc1&"+filterUrlPart, nil) require.NoError(t, err) resp := httptest.NewRecorder() @@ -1052,7 +990,7 @@ use_streaming_backend = true }) const timeout = 30 * time.Second - testutil.RunStep(t, "read blocking query result", func(t *testing.T) { + runStep(t, "read blocking query result", func(t *testing.T) { var ( // out and resp are not safe to read until reading from errCh out structs.CheckServiceNodes @@ -1060,7 +998,7 @@ use_streaming_backend = true errCh = make(chan error, 1) ) go func() { - url := fmt.Sprintf("/v1/health/service/web?dc=dc1&index=%d&wait=%s&%s"+peerQuerySuffix(peerName), lastIndex, timeout, filterUrlPart) + url := fmt.Sprintf("/v1/health/service/web?dc=dc1&index=%d&wait=%s&%s", lastIndex, timeout, filterUrlPart) req, err := http.NewRequest("GET", url, nil) if err != nil { errCh <- err @@ -1433,7 +1371,9 @@ func TestHealthServiceNodes_PassingFilter(t *testing.T) { req, _ := http.NewRequest("GET", "/v1/health/service/consul?passing=nope-nope-nope", nil) resp := httptest.NewRecorder() _, err := a.srv.HealthServiceNodes(resp, req) - require.True(t, isHTTPBadRequest(err), fmt.Sprintf("Expected bad request HTTP error but got %v", err)) + if _, ok := err.(BadRequestError); !ok { + t.Fatalf("Expected bad request error but got %v", err) + } if !strings.Contains(err.Error(), "Invalid value for ?passing") { t.Errorf("bad %s", err.Error()) } @@ -1839,7 +1779,8 @@ func TestHealthConnectServiceNodes_PassingFilter(t *testing.T) { resp := httptest.NewRecorder() _, err := a.srv.HealthConnectServiceNodes(resp, req) assert.NotNil(t, err) - assert.True(t, isHTTPBadRequest(err)) + _, ok := err.(BadRequestError) + assert.True(t, ok) assert.True(t, strings.Contains(err.Error(), "Invalid value for ?passing")) }) @@ -1881,156 +1822,3 @@ func TestFilterNonPassing(t *testing.T) { t.Fatalf("bad: %v", out) } } - -func TestListHealthyServiceNodes_MergeCentralConfig(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - - a := NewTestAgent(t, "") - defer a.Shutdown() - testrpc.WaitForLeader(t, a.RPC, "dc1") - - // Register the service - registerServiceReq := registerService(t, a) - // Register proxy-defaults - proxyGlobalEntry := registerProxyDefaults(t, a) - // Register service-defaults - serviceDefaultsConfigEntry := registerServiceDefaults(t, a, registerServiceReq.Service.Proxy.DestinationServiceName) - - type testCase struct { - testCaseName string - serviceName string - connect bool - } - - run := func(t *testing.T, tc testCase) { - url := fmt.Sprintf("/v1/health/service/%s?merge-central-config", tc.serviceName) - if tc.connect { - url = fmt.Sprintf("/v1/health/connect/%s?merge-central-config", tc.serviceName) - } - req, _ := http.NewRequest("GET", url, nil) - resp := httptest.NewRecorder() - var obj interface{} - var err error - if tc.connect { - obj, err = a.srv.HealthConnectServiceNodes(resp, req) - } else { - obj, err = a.srv.HealthServiceNodes(resp, req) - } - - require.NoError(t, err) - assertIndex(t, resp) - - checkServiceNodes := obj.(structs.CheckServiceNodes) - - // validate response - require.Len(t, checkServiceNodes, 1) - v := checkServiceNodes[0] - - validateMergeCentralConfigResponse(t, v.Service.ToServiceNode(registerServiceReq.Node), registerServiceReq, proxyGlobalEntry, serviceDefaultsConfigEntry) - } - testCases := []testCase{ - { - testCaseName: "List healthy service instances with merge-central-config", - serviceName: registerServiceReq.Service.Service, - }, - { - testCaseName: "List healthy connect capable service instances with merge-central-config", - serviceName: registerServiceReq.Service.Proxy.DestinationServiceName, - connect: true, - }, - } - for _, tc := range testCases { - t.Run(tc.testCaseName, func(t *testing.T) { - run(t, tc) - }) - } -} - -func TestHealthServiceNodes_MergeCentralConfigBlocking(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - a := NewTestAgent(t, "") - defer a.Shutdown() - - testrpc.WaitForLeader(t, a.RPC, "dc1") - - // Register the service - registerServiceReq := registerService(t, a) - // Register proxy-defaults - proxyGlobalEntry := registerProxyDefaults(t, a) - - // Run the query - rpcReq := structs.ServiceSpecificRequest{ - Datacenter: "dc1", - ServiceName: registerServiceReq.Service.Service, - MergeCentralConfig: true, - } - var rpcResp structs.IndexedCheckServiceNodes - require.NoError(t, a.RPC("Health.ServiceNodes", &rpcReq, &rpcResp)) - - require.Len(t, rpcResp.Nodes, 1) - nodeService := rpcResp.Nodes[0].Service - require.Equal(t, registerServiceReq.Service.Service, nodeService.Service) - // validate proxy global defaults are resolved in the merged service config - require.Equal(t, proxyGlobalEntry.Config, nodeService.Proxy.Config) - require.Equal(t, proxyGlobalEntry.Mode, nodeService.Proxy.Mode) - - // Async cause a change - register service defaults - waitIndex := rpcResp.Index - start := time.Now() - var serviceDefaultsConfigEntry structs.ServiceConfigEntry - go func() { - time.Sleep(100 * time.Millisecond) - // Register service-defaults - serviceDefaultsConfigEntry = registerServiceDefaults(t, a, registerServiceReq.Service.Proxy.DestinationServiceName) - }() - - const waitDuration = 3 * time.Second -RUN_BLOCKING_QUERY: - url := fmt.Sprintf("/v1/health/service/%s?merge-central-config&wait=%s&index=%d", - registerServiceReq.Service.Service, waitDuration.String(), waitIndex) - req, _ := http.NewRequest("GET", url, nil) - resp := httptest.NewRecorder() - obj, err := a.srv.HealthServiceNodes(resp, req) - - require.NoError(t, err) - assertIndex(t, resp) - - elapsed := time.Since(start) - idx := getIndex(t, resp) - if idx < waitIndex { - t.Fatalf("bad index returned: %v", idx) - } else if idx == waitIndex { - if elapsed > waitDuration { - // This should prevent the loop from running longer than the waitDuration - t.Fatalf("too slow: %v", elapsed) - } - goto RUN_BLOCKING_QUERY - } - // Should block at least 100ms before getting the changed results - if elapsed < 100*time.Millisecond { - t.Fatalf("too fast: %v", elapsed) - } - - checkServiceNodes := obj.(structs.CheckServiceNodes) - - // validate response - require.Len(t, checkServiceNodes, 1) - v := checkServiceNodes[0].Service.ToServiceNode(registerServiceReq.Node) - - validateMergeCentralConfigResponse(t, v, registerServiceReq, proxyGlobalEntry, serviceDefaultsConfigEntry) -} - -func peerQuerySuffix(peerName string) string { - if peerName == "" { - return "" - } - return "&peer=" + peerName -} diff --git a/agent/http.go b/agent/http.go index 5dbcdf00bd825..d28d546744ba0 100644 --- a/agent/http.go +++ b/agent/http.go @@ -51,6 +51,41 @@ func (e MethodNotAllowedError) Error() string { return fmt.Sprintf("method %s not allowed", e.Method) } +// BadRequestError should be returned by a handler when parameters or the payload are not valid +type BadRequestError struct { + Reason string +} + +func (e BadRequestError) Error() string { + return fmt.Sprintf("Bad request: %s", e.Reason) +} + +// NotFoundError should be returned by a handler when a resource specified does not exist +type NotFoundError struct { + Reason string +} + +func (e NotFoundError) Error() string { + return e.Reason +} + +// UnauthorizedError should be returned by a handler when the request lacks valid authorization. +type UnauthorizedError struct { + Reason string +} + +func (e UnauthorizedError) Error() string { + return e.Reason +} + +type EntityTooLargeError struct { + Reason string +} + +func (e EntityTooLargeError) Error() string { + return e.Reason +} + // CodeWithPayloadError allow returning non HTTP 200 // Error codes while not returning PlainText payload type CodeWithPayloadError struct { @@ -63,15 +98,12 @@ func (e CodeWithPayloadError) Error() string { return e.Reason } -// HTTPError is returned by the handler when a specific http error -// code is needed alongside a plain text response. -type HTTPError struct { - StatusCode int - Reason string +type ForbiddenError struct { + Reason string } -func (h HTTPError) Error() string { - return h.Reason +func (e ForbiddenError) Error() string { + return e.Reason } // HTTPHandlers provides an HTTP api for an agent. @@ -391,7 +423,8 @@ func (s *HTTPHandlers) wrap(handler endpoint, methods []string) http.HandlerFunc if acl.IsErrPermissionDenied(err) || acl.IsErrNotFound(err) { return true } - return false + _, ok := err.(ForbiddenError) + return ok } isMethodNotAllowed := func(err error) bool { @@ -399,18 +432,33 @@ func (s *HTTPHandlers) wrap(handler endpoint, methods []string) http.HandlerFunc return ok } + isBadRequest := func(err error) bool { + _, ok := err.(BadRequestError) + return ok + } + + isNotFound := func(err error) bool { + _, ok := err.(NotFoundError) + return ok + } + + isUnauthorized := func(err error) bool { + _, ok := err.(UnauthorizedError) + return ok + } + isTooManyRequests := func(err error) bool { // Sadness net/rpc can't do nice typed errors so this is all we got return err.Error() == consul.ErrRateLimited.Error() } - addAllowHeader := func(methods []string) { - resp.Header().Add("Allow", strings.Join(methods, ",")) + isEntityToLarge := func(err error) bool { + _, ok := err.(EntityTooLargeError) + return ok } - isHTTPError := func(err error) bool { - _, ok := err.(HTTPError) - return ok + addAllowHeader := func(methods []string) { + resp.Header().Add("Allow", strings.Join(methods, ",")) } handleErr := func(err error) { @@ -442,21 +490,21 @@ func (s *HTTPHandlers) wrap(handler endpoint, methods []string) http.HandlerFunc addAllowHeader(err.(MethodNotAllowedError).Allow) resp.WriteHeader(http.StatusMethodNotAllowed) // 405 fmt.Fprint(resp, err.Error()) - case isHTTPError(err): - err := err.(HTTPError) - code := http.StatusInternalServerError - if err.StatusCode != 0 { - code = err.StatusCode - } - reason := "An unexpected error occurred" - if err.Error() != "" { - reason = err.Error() - } - resp.WriteHeader(code) - fmt.Fprint(resp, reason) + case isBadRequest(err): + resp.WriteHeader(http.StatusBadRequest) + fmt.Fprint(resp, err.Error()) + case isNotFound(err): + resp.WriteHeader(http.StatusNotFound) + fmt.Fprint(resp, err.Error()) + case isUnauthorized(err): + resp.WriteHeader(http.StatusUnauthorized) + fmt.Fprint(resp, err.Error()) case isTooManyRequests(err): resp.WriteHeader(http.StatusTooManyRequests) fmt.Fprint(resp, err.Error()) + case isEntityToLarge(err): + resp.WriteHeader(http.StatusRequestEntityTooLarge) + fmt.Fprint(resp, err.Error()) default: resp.WriteHeader(http.StatusInternalServerError) fmt.Fprint(resp, err.Error()) @@ -1060,12 +1108,6 @@ func (s *HTTPHandlers) parseSource(req *http.Request, source *structs.QuerySourc } } -func (s *HTTPHandlers) parsePeerName(req *http.Request, args *structs.ServiceSpecificRequest) { - if peer := req.URL.Query().Get("peer"); peer != "" { - args.PeerName = peer - } -} - // parseMetaFilter is used to parse the ?node-meta=key:value query parameter, used for // filtering results to nodes with the given metadata key/value func (s *HTTPHandlers) parseMetaFilter(req *http.Request) map[string]string { @@ -1130,7 +1172,7 @@ func (s *HTTPHandlers) checkWriteAccess(req *http.Request) error { } } - return HTTPError{StatusCode: http.StatusForbidden, Reason: "Access is restricted"} + return ForbiddenError{Reason: "Access is restricted"} } func (s *HTTPHandlers) parseFilter(req *http.Request, filter *string) { diff --git a/agent/http_oss.go b/agent/http_oss.go index 94eb575c36e2f..c14c31d8de72e 100644 --- a/agent/http_oss.go +++ b/agent/http_oss.go @@ -14,16 +14,10 @@ import ( func (s *HTTPHandlers) parseEntMeta(req *http.Request, entMeta *acl.EnterpriseMeta) error { if headerNS := req.Header.Get("X-Consul-Namespace"); headerNS != "" { - return HTTPError{ - StatusCode: http.StatusBadRequest, - Reason: "Invalid header: \"X-Consul-Namespace\" - Namespaces are a Consul Enterprise feature", - } + return BadRequestError{Reason: "Invalid header: \"X-Consul-Namespace\" - Namespaces are a Consul Enterprise feature"} } if queryNS := req.URL.Query().Get("ns"); queryNS != "" { - return HTTPError{ - StatusCode: http.StatusBadRequest, - Reason: "Invalid query parameter: \"ns\" - Namespaces are a Consul Enterprise feature", - } + return BadRequestError{Reason: "Invalid query parameter: \"ns\" - Namespaces are a Consul Enterprise feature"} } return s.parseEntMetaPartition(req, entMeta) @@ -38,10 +32,7 @@ func (s *HTTPHandlers) validateEnterpriseIntentionPartition(logName, partition s // No special handling for wildcard namespaces as they are pointless in OSS. - return HTTPError{ - StatusCode: http.StatusBadRequest, - Reason: "Invalid " + logName + "(" + partition + ")" + ": Partitions is a Consul Enterprise feature", - } + return BadRequestError{Reason: "Invalid " + logName + "(" + partition + ")" + ": Partitions is a Consul Enterprise feature"} } func (s *HTTPHandlers) validateEnterpriseIntentionNamespace(logName, ns string, _ bool) error { @@ -53,10 +44,7 @@ func (s *HTTPHandlers) validateEnterpriseIntentionNamespace(logName, ns string, // No special handling for wildcard namespaces as they are pointless in OSS. - return HTTPError{ - StatusCode: http.StatusBadRequest, - Reason: "Invalid " + logName + "(" + ns + ")" + ": Namespaces is a Consul Enterprise feature", - } + return BadRequestError{Reason: "Invalid " + logName + "(" + ns + ")" + ": Namespaces is a Consul Enterprise feature"} } func (s *HTTPHandlers) parseEntMetaNoWildcard(req *http.Request, _ *acl.EnterpriseMeta) error { @@ -84,10 +72,7 @@ func (s *HTTPHandlers) rewordUnknownEnterpriseFieldError(err error) error { func parseACLAuthMethodEnterpriseMeta(req *http.Request, _ *structs.ACLAuthMethodEnterpriseMeta) error { if methodNS := req.URL.Query().Get("authmethod-ns"); methodNS != "" { - return HTTPError{ - StatusCode: http.StatusBadRequest, - Reason: "Invalid query parameter: \"authmethod-ns\" - Namespaces are a Consul Enterprise feature", - } + return BadRequestError{Reason: "Invalid query parameter: \"authmethod-ns\" - Namespaces are a Consul Enterprise feature"} } return nil @@ -106,16 +91,10 @@ func (s *HTTPHandlers) uiTemplateDataTransform(data map[string]interface{}) erro func (s *HTTPHandlers) parseEntMetaPartition(req *http.Request, meta *acl.EnterpriseMeta) error { if headerAP := req.Header.Get("X-Consul-Partition"); headerAP != "" { - return HTTPError{ - StatusCode: http.StatusBadRequest, - Reason: "Invalid header: \"X-Consul-Partition\" - Partitions are a Consul Enterprise feature", - } + return BadRequestError{Reason: "Invalid header: \"X-Consul-Partition\" - Partitions are a Consul Enterprise feature"} } if queryAP := req.URL.Query().Get("partition"); queryAP != "" { - return HTTPError{ - StatusCode: http.StatusBadRequest, - Reason: "Invalid query parameter: \"partition\" - Partitions are a Consul Enterprise feature", - } + return BadRequestError{Reason: "Invalid query parameter: \"partition\" - Partitions are a Consul Enterprise feature"} } return nil diff --git a/agent/http_register.go b/agent/http_register.go index 854f8dccb3f2b..47cdfcf1f913e 100644 --- a/agent/http_register.go +++ b/agent/http_register.go @@ -103,10 +103,6 @@ func init() { registerEndpoint("/v1/operator/autopilot/configuration", []string{"GET", "PUT"}, (*HTTPHandlers).OperatorAutopilotConfiguration) registerEndpoint("/v1/operator/autopilot/health", []string{"GET"}, (*HTTPHandlers).OperatorServerHealth) registerEndpoint("/v1/operator/autopilot/state", []string{"GET"}, (*HTTPHandlers).OperatorAutopilotState) - registerEndpoint("/v1/peering/token", []string{"POST"}, (*HTTPHandlers).PeeringGenerateToken) - registerEndpoint("/v1/peering/initiate", []string{"POST"}, (*HTTPHandlers).PeeringInitiate) - registerEndpoint("/v1/peering/", []string{"GET", "DELETE"}, (*HTTPHandlers).PeeringEndpoint) - registerEndpoint("/v1/peerings", []string{"GET"}, (*HTTPHandlers).PeeringList) registerEndpoint("/v1/query", []string{"GET", "POST"}, (*HTTPHandlers).PreparedQueryGeneral) // specific prepared query endpoints have more complex rules for allowed methods, so // the prefix is registered with no methods. diff --git a/agent/http_test.go b/agent/http_test.go index a42a932303ab3..44518842f6cf9 100644 --- a/agent/http_test.go +++ b/agent/http_test.go @@ -1488,16 +1488,10 @@ func TestAllowedNets(t *testing.T) { t.Fatalf("bad checkWriteAccess for values %+v, got %v", v, err) } - if err != nil { - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 403 { - t.Fatalf("expected 403 but got %d", err.StatusCode) - } - } else { - t.Fatalf("expected HTTP Error but got %v", err) - } + _, isForbiddenErr := err.(ForbiddenError) + if err != nil && !isForbiddenErr { + t.Fatalf("expected ForbiddenError but got: %s", err) } - } } diff --git a/agent/intentions_endpoint.go b/agent/intentions_endpoint.go index d21833a8f5f96..ab3bfd90b09b0 100644 --- a/agent/intentions_endpoint.go +++ b/agent/intentions_endpoint.go @@ -56,9 +56,8 @@ func (s *HTTPHandlers) IntentionCreate(resp http.ResponseWriter, req *http.Reque if err := s.parseEntMetaNoWildcard(req, &entMeta); err != nil { return nil, err } - if entMeta.PartitionOrDefault() != acl.PartitionOrDefault("") { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Cannot use a partition with this endpoint"} + return nil, BadRequestError{Reason: "Cannot use a partition with this endpoint"} } args := structs.IntentionRequest{ @@ -71,10 +70,10 @@ func (s *HTTPHandlers) IntentionCreate(resp http.ResponseWriter, req *http.Reque } if args.Intention.DestinationPartition != "" && args.Intention.DestinationPartition != "default" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Cannot specify a destination partition with this endpoint"} + return nil, BadRequestError{Reason: "Cannot specify a destination partition with this endpoint"} } if args.Intention.SourcePartition != "" && args.Intention.SourcePartition != "default" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Cannot specify a source partition with this endpoint"} + return nil, BadRequestError{Reason: "Cannot specify a source partition with this endpoint"} } args.Intention.FillPartitionAndNamespace(&entMeta, false) @@ -325,7 +324,7 @@ func (s *HTTPHandlers) IntentionGetExact(resp http.ResponseWriter, req *http.Req if err := s.agent.RPC("Intention.Get", &args, &reply); err != nil { // We have to check the string since the RPC sheds the error type if strings.Contains(err.Error(), consul.ErrIntentionNotFound.Error()) { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: err.Error()} + return nil, NotFoundError{Reason: err.Error()} } // Not ideal, but there are a number of error scenarios that are not @@ -333,7 +332,7 @@ func (s *HTTPHandlers) IntentionGetExact(resp http.ResponseWriter, req *http.Req // to detect a parameter error and return a 400 response. The error // is not a constant type or message, so we have to use strings.Contains if strings.Contains(err.Error(), "UUID") { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: err.Error()} + return nil, BadRequestError{Reason: err.Error()} } return nil, err @@ -367,7 +366,7 @@ func (s *HTTPHandlers) IntentionPutExact(resp http.ResponseWriter, req *http.Req s.parseDC(req, &args.Datacenter) s.parseToken(req, &args.Token) if err := decodeBody(req.Body, &args.Intention); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } // Explicitly CLEAR the old legacy ID field @@ -518,7 +517,7 @@ func (s *HTTPHandlers) IntentionSpecificGet(id string, resp http.ResponseWriter, if err := s.agent.RPC("Intention.Get", &args, &reply); err != nil { // We have to check the string since the RPC sheds the error type if err.Error() == consul.ErrIntentionNotFound.Error() { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: err.Error()} + return nil, NotFoundError{Reason: err.Error()} } // Not ideal, but there are a number of error scenarios that are not @@ -526,7 +525,7 @@ func (s *HTTPHandlers) IntentionSpecificGet(id string, resp http.ResponseWriter, // to detect a parameter error and return a 400 response. The error // is not a constant type or message, so we have to use strings.Contains if strings.Contains(err.Error(), "UUID") { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: err.Error()} + return nil, BadRequestError{Reason: err.Error()} } return nil, err @@ -550,9 +549,8 @@ func (s *HTTPHandlers) IntentionSpecificUpdate(id string, resp http.ResponseWrit if err := s.parseEntMetaNoWildcard(req, &entMeta); err != nil { return nil, err } - if entMeta.PartitionOrDefault() != acl.PartitionOrDefault("") { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Cannot use a partition with this endpoint"} + return nil, BadRequestError{Reason: "Cannot use a partition with this endpoint"} } args := structs.IntentionRequest{ @@ -561,14 +559,14 @@ func (s *HTTPHandlers) IntentionSpecificUpdate(id string, resp http.ResponseWrit s.parseDC(req, &args.Datacenter) s.parseToken(req, &args.Token) if err := decodeBody(req.Body, &args.Intention); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } if args.Intention.DestinationPartition != "" && args.Intention.DestinationPartition != "default" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Cannot specify a destination partition with this endpoint"} + return nil, BadRequestError{Reason: "Cannot specify a destination partition with this endpoint"} } if args.Intention.SourcePartition != "" && args.Intention.SourcePartition != "default" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Cannot specify a source partition with this endpoint"} + return nil, BadRequestError{Reason: "Cannot specify a source partition with this endpoint"} } args.Intention.FillPartitionAndNamespace(&entMeta, false) diff --git a/agent/intentions_endpoint_test.go b/agent/intentions_endpoint_test.go index fbff357f75461..e8aeef0a9c4ad 100644 --- a/agent/intentions_endpoint_test.go +++ b/agent/intentions_endpoint_test.go @@ -347,9 +347,8 @@ func TestIntentionGetExact(t *testing.T) { resp := httptest.NewRecorder() obj, err := a.srv.IntentionExact(resp, req) testutil.RequireErrorContains(t, err, "Intention not found") - httpErr, ok := err.(HTTPError) + _, ok := err.(NotFoundError) require.True(t, ok) - require.Equal(t, http.StatusNotFound, httpErr.StatusCode) require.Nil(t, obj) } @@ -531,7 +530,7 @@ func TestIntentionSpecificGet(t *testing.T) { obj, err := a.srv.IntentionSpecific(resp, req) require.Nil(t, obj) require.Error(t, err) - require.True(t, isHTTPBadRequest(err)) + require.IsType(t, BadRequestError{}, err) require.Contains(t, err.Error(), "UUID") }) diff --git a/agent/kvs_endpoint.go b/agent/kvs_endpoint.go index 1aed8178ad588..79ed6e15e101f 100644 --- a/agent/kvs_endpoint.go +++ b/agent/kvs_endpoint.go @@ -53,7 +53,7 @@ func (s *HTTPHandlers) KVSGet(resp http.ResponseWriter, req *http.Request, args if _, ok := params["recurse"]; ok { method = "KVS.List" } else if args.Key == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing key name"} + return nil, BadRequestError{Reason: "Missing key name"} } // Do not allow wildcard NS on GET reqs @@ -154,7 +154,7 @@ func (s *HTTPHandlers) KVSPut(resp http.ResponseWriter, req *http.Request, args return nil, err } if args.Key == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing key name"} + return nil, BadRequestError{Reason: "Missing key name"} } if conflictingFlags(resp, req, "cas", "acquire", "release") { return nil, nil @@ -205,8 +205,7 @@ func (s *HTTPHandlers) KVSPut(resp http.ResponseWriter, req *http.Request, args // Check the content-length if req.ContentLength > int64(s.agent.config.KVMaxValueSize) { - return nil, HTTPError{ - StatusCode: http.StatusRequestEntityTooLarge, + return nil, EntityTooLargeError{ Reason: fmt.Sprintf("Request body(%d bytes) too large, max size: %d bytes. See %s.", req.ContentLength, s.agent.config.KVMaxValueSize, "https://www.consul.io/docs/agent/config/config-files#kv_max_value_size"), } @@ -255,7 +254,7 @@ func (s *HTTPHandlers) KVSDelete(resp http.ResponseWriter, req *http.Request, ar if _, ok := params["recurse"]; ok { applyReq.Op = api.KVDeleteTree } else if args.Key == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing key name"} + return nil, BadRequestError{Reason: "Missing key name"} } // Check for cas value diff --git a/agent/operator_endpoint.go b/agent/operator_endpoint.go index 851ef52e1c31d..4a33497a80e6f 100644 --- a/agent/operator_endpoint.go +++ b/agent/operator_endpoint.go @@ -49,13 +49,10 @@ func (s *HTTPHandlers) OperatorRaftPeer(resp http.ResponseWriter, req *http.Requ } if !hasID && !hasAddress { - return nil, HTTPError{ - StatusCode: http.StatusBadRequest, - Reason: "Must specify either ?id with the server's ID or ?address with IP:port of peer to remove", - } + return nil, BadRequestError{Reason: "Must specify either ?id with the server's ID or ?address with IP:port of peer to remove"} } if hasID && hasAddress { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Must specify only one of ?id or ?address"} + return nil, BadRequestError{Reason: "Must specify only one of ?id or ?address"} } var reply struct{} @@ -82,7 +79,7 @@ func (s *HTTPHandlers) OperatorKeyringEndpoint(resp http.ResponseWriter, req *ht var args keyringArgs if req.Method == "POST" || req.Method == "PUT" || req.Method == "DELETE" { if err := decodeBody(req.Body, &args); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } } s.parseToken(req, &args.Token) @@ -91,12 +88,12 @@ func (s *HTTPHandlers) OperatorKeyringEndpoint(resp http.ResponseWriter, req *ht if relayFactor := req.URL.Query().Get("relay-factor"); relayFactor != "" { n, err := strconv.Atoi(relayFactor) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Error parsing relay factor: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Error parsing relay factor: %v", err)} } args.RelayFactor, err = ParseRelayFactor(n) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid relay-factor: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Invalid relay-factor: %v", err)} } } @@ -105,12 +102,12 @@ func (s *HTTPHandlers) OperatorKeyringEndpoint(resp http.ResponseWriter, req *ht var err error args.LocalOnly, err = strconv.ParseBool(localOnly) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Error parsing local-only: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Error parsing local-only: %v", err)} } err = ValidateLocalOnly(args.LocalOnly, req.Method == "GET") if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Invalid use of local-only: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Invalid use of local-only: %v", err)} } } @@ -229,7 +226,7 @@ func (s *HTTPHandlers) OperatorAutopilotConfiguration(resp http.ResponseWriter, conf := api.NewAutopilotConfiguration() if err := decodeBody(req.Body, &conf); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Error parsing autopilot config: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Error parsing autopilot config: %v", err)} } args.Config = structs.AutopilotConfig{ @@ -248,7 +245,7 @@ func (s *HTTPHandlers) OperatorAutopilotConfiguration(resp http.ResponseWriter, if _, ok := params["cas"]; ok { casVal, err := strconv.ParseUint(params.Get("cas"), 10, 64) if err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Error parsing cas value: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Error parsing cas value: %v", err)} } args.Config.ModifyIndex = casVal args.CAS = true diff --git a/agent/peering_endpoint.go b/agent/peering_endpoint.go deleted file mode 100644 index 162d8985ed0a9..0000000000000 --- a/agent/peering_endpoint.go +++ /dev/null @@ -1,160 +0,0 @@ -package agent - -import ( - "fmt" - "net/http" - "strings" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/lib" - "github.com/hashicorp/consul/proto/pbpeering" -) - -// PeeringEndpoint handles GET, DELETE on v1/peering/name -func (s *HTTPHandlers) PeeringEndpoint(resp http.ResponseWriter, req *http.Request) (interface{}, error) { - name := strings.TrimPrefix(req.URL.Path, "/v1/peering/") - if name == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Must specify a name to fetch."} - } - - // Switch on the method - switch req.Method { - case "GET": - return s.peeringRead(resp, req, name) - case "DELETE": - return s.peeringDelete(resp, req, name) - default: - return nil, MethodNotAllowedError{req.Method, []string{"GET", "DELETE"}} - } -} - -// peeringRead fetches a peering that matches the name and partition. -// This assumes that the name and partition parameters are valid -func (s *HTTPHandlers) peeringRead(resp http.ResponseWriter, req *http.Request, name string) (interface{}, error) { - args := pbpeering.PeeringReadRequest{ - Name: name, - Datacenter: s.agent.config.Datacenter, - } - var entMeta acl.EnterpriseMeta - if err := s.parseEntMetaPartition(req, &entMeta); err != nil { - return nil, err - } - args.Partition = entMeta.PartitionOrEmpty() - - result, err := s.agent.rpcClientPeering.PeeringRead(req.Context(), &args) - if err != nil { - return nil, err - } - if result.Peering == nil { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: fmt.Sprintf("Peering not found for %q", name)} - } - - return result.Peering.ToAPI(), nil -} - -// PeeringList fetches all peerings in the datacenter in OSS or in a given partition in Consul Enterprise. -func (s *HTTPHandlers) PeeringList(resp http.ResponseWriter, req *http.Request) (interface{}, error) { - args := pbpeering.PeeringListRequest{ - Datacenter: s.agent.config.Datacenter, - } - var entMeta acl.EnterpriseMeta - if err := s.parseEntMetaPartition(req, &entMeta); err != nil { - return nil, err - } - args.Partition = entMeta.PartitionOrEmpty() - - pbresp, err := s.agent.rpcClientPeering.PeeringList(req.Context(), &args) - if err != nil { - return nil, err - } - - return pbresp.ToAPI(), nil -} - -// PeeringGenerateToken handles POSTs to the /v1/peering/token endpoint. The request -// will always be forwarded via RPC to the local leader. -func (s *HTTPHandlers) PeeringGenerateToken(resp http.ResponseWriter, req *http.Request) (interface{}, error) { - if req.Body == nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "The peering arguments must be provided in the body"} - } - - apiRequest := &api.PeeringGenerateTokenRequest{ - Datacenter: s.agent.config.Datacenter, - } - if err := lib.DecodeJSON(req.Body, apiRequest); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Body decoding failed: %v", err)} - } - args := pbpeering.NewGenerateTokenRequestFromAPI(apiRequest) - - if args.PeerName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "PeerName is required in the payload when generating a new peering token."} - } - - var entMeta acl.EnterpriseMeta - if err := s.parseEntMetaPartition(req, &entMeta); err != nil { - return nil, err - } - if args.Partition == "" { - args.Partition = entMeta.PartitionOrEmpty() - } - - out, err := s.agent.rpcClientPeering.GenerateToken(req.Context(), args) - if err != nil { - return nil, err - } - - return out.ToAPI(), nil -} - -// PeeringInitiate handles POSTs to the /v1/peering/initiate endpoint. The request -// will always be forwarded via RPC to the local leader. -func (s *HTTPHandlers) PeeringInitiate(resp http.ResponseWriter, req *http.Request) (interface{}, error) { - if req.Body == nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "The peering arguments must be provided in the body"} - } - - apiRequest := &api.PeeringInitiateRequest{ - Datacenter: s.agent.config.Datacenter, - } - if err := lib.DecodeJSON(req.Body, apiRequest); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Body decoding failed: %v", err)} - } - args := pbpeering.NewInitiateRequestFromAPI(apiRequest) - - if args.PeerName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "PeerName is required in the payload when initiating a peering."} - } - - if args.PeeringToken == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "PeeringToken is required in the payload when initiating a peering."} - } - - out, err := s.agent.rpcClientPeering.Initiate(req.Context(), args) - if err != nil { - return nil, err - } - - return out.ToAPI(), nil -} - -// peeringDelete initiates a deletion for a peering that matches the name and partition. -// This assumes that the name and partition parameters are valid. -func (s *HTTPHandlers) peeringDelete(resp http.ResponseWriter, req *http.Request, name string) (interface{}, error) { - args := pbpeering.PeeringDeleteRequest{ - Name: name, - Datacenter: s.agent.config.Datacenter, - } - var entMeta acl.EnterpriseMeta - if err := s.parseEntMetaPartition(req, &entMeta); err != nil { - return nil, err - } - args.Partition = entMeta.PartitionOrEmpty() - - _, err := s.agent.rpcClientPeering.PeeringDelete(req.Context(), &args) - if err != nil { - return nil, err - } - - return nil, nil -} diff --git a/agent/peering_endpoint_oss_test.go b/agent/peering_endpoint_oss_test.go deleted file mode 100644 index 5e00b05767f06..0000000000000 --- a/agent/peering_endpoint_oss_test.go +++ /dev/null @@ -1,76 +0,0 @@ -//go:build !consulent -// +build !consulent - -package agent - -import ( - "bytes" - "encoding/json" - "io" - "net/http" - "net/http/httptest" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/testrpc" -) - -func TestHTTP_Peering_GenerateToken_OSS_Failure(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - - a := NewTestAgent(t, "") - testrpc.WaitForTestAgent(t, a.RPC, "dc1") - - t.Run("Doesn't allow partitions in OSS HTTP requests", func(t *testing.T) { - reqBody := &pbpeering.GenerateTokenRequest{ - PeerName: "peering-a", - } - reqBodyBytes, err := json.Marshal(reqBody) - require.NoError(t, err) - req, err := http.NewRequest("POST", "/v1/peering/token?partition=foo", - bytes.NewReader(reqBodyBytes)) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusBadRequest, resp.Code) - body, _ := io.ReadAll(resp.Body) - require.Contains(t, string(body), "Partitions are a Consul Enterprise feature") - }) -} - -func TestHTTP_PeeringEndpoint_OSS_Failure(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - - a := NewTestAgent(t, "") - testrpc.WaitForTestAgent(t, a.RPC, "dc1") - - t.Run("Doesn't allow partitions on PeeringEndpoint in OSS HTTP requests", func(t *testing.T) { - req, err := http.NewRequest("GET", "/v1/peering/foo?partition=foo", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - - require.Equal(t, http.StatusBadRequest, resp.Code) - body, _ := io.ReadAll(resp.Body) - require.Contains(t, string(body), "Partitions are a Consul Enterprise feature") - - req2, err2 := http.NewRequest("DELETE", "/v1/peering/foo?partition=foo", nil) - require.NoError(t, err2) - resp2 := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp2, req2) - - require.Equal(t, http.StatusBadRequest, resp2.Code) - body2, _ := io.ReadAll(resp2.Body) - require.Contains(t, string(body2), "Partitions are a Consul Enterprise feature") - }) -} diff --git a/agent/peering_endpoint_test.go b/agent/peering_endpoint_test.go deleted file mode 100644 index ca90b11959dfa..0000000000000 --- a/agent/peering_endpoint_test.go +++ /dev/null @@ -1,415 +0,0 @@ -package agent - -import ( - "bytes" - "context" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "net/http" - "net/http/httptest" - "testing" - "time" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/testrpc" -) - -var validCA = ` ------BEGIN CERTIFICATE----- -MIICmDCCAj6gAwIBAgIBBzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtDb25zdWwg -Q0EgNzAeFw0xODA1MjExNjMzMjhaFw0yODA1MTgxNjMzMjhaMBYxFDASBgNVBAMT -C0NvbnN1bCBDQSA3MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER0qlxjnRcMEr -iSGlH7G7dYU7lzBEmLUSMZkyBbClmyV8+e8WANemjn+PLnCr40If9cmpr7RnC9Qk -GTaLnLiF16OCAXswggF3MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/ -MGgGA1UdDgRhBF8xZjo5MTpjYTo0MTo4ZjphYzo2NzpiZjo1OTpjMjpmYTo0ZTo3 -NTo1YzpkODpmMDo1NTpkZTpiZTo3NTpiODozMzozMTpkNToyNDpiMDowNDpiMzpl -ODo5Nzo1Yjo3ZTBqBgNVHSMEYzBhgF8xZjo5MTpjYTo0MTo4ZjphYzo2NzpiZjo1 -OTpjMjpmYTo0ZTo3NTo1YzpkODpmMDo1NTpkZTpiZTo3NTpiODozMzozMTpkNToy -NDpiMDowNDpiMzplODo5Nzo1Yjo3ZTA/BgNVHREEODA2hjRzcGlmZmU6Ly8xMjRk -ZjVhMC05ODIwLTc2YzMtOWFhOS02ZjYyMTY0YmExYzIuY29uc3VsMD0GA1UdHgEB -/wQzMDGgLzAtgisxMjRkZjVhMC05ODIwLTc2YzMtOWFhOS02ZjYyMTY0YmExYzIu -Y29uc3VsMAoGCCqGSM49BAMCA0gAMEUCIQDzkkI7R+0U12a+zq2EQhP/n2mHmta+ -fs2hBxWIELGwTAIgLdO7RRw+z9nnxCIA6kNl//mIQb+PGItespiHZKAz74Q= ------END CERTIFICATE----- -` - -func TestHTTP_Peering_GenerateToken(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - a := NewTestAgent(t, "") - - testrpc.WaitForTestAgent(t, a.RPC, "dc1") - - t.Run("No Body", func(t *testing.T) { - req, err := http.NewRequest("POST", "/v1/peering/token", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusBadRequest, resp.Code) - body, _ := io.ReadAll(resp.Body) - require.Contains(t, string(body), "The peering arguments must be provided in the body") - }) - - t.Run("Body Invalid", func(t *testing.T) { - req, err := http.NewRequest("POST", "/v1/peering/token", bytes.NewReader([]byte("abc"))) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusBadRequest, resp.Code) - body, _ := io.ReadAll(resp.Body) - require.Contains(t, string(body), "Body decoding failed:") - }) - - t.Run("No Name", func(t *testing.T) { - req, err := http.NewRequest("POST", "/v1/peering/token", - bytes.NewReader([]byte(`{}`))) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusBadRequest, resp.Code) - body, _ := io.ReadAll(resp.Body) - require.Contains(t, string(body), "PeerName is required") - }) - - // TODO(peering): add more failure cases - - t.Run("Success", func(t *testing.T) { - body := &pbpeering.GenerateTokenRequest{ - PeerName: "peering-a", - } - - bodyBytes, err := json.Marshal(body) - require.NoError(t, err) - - req, err := http.NewRequest("POST", "/v1/peering/token", bytes.NewReader(bodyBytes)) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusOK, resp.Code, "expected 200, got %d: %v", resp.Code, resp.Body.String()) - - var r pbpeering.GenerateTokenResponse - require.NoError(t, json.NewDecoder(resp.Body).Decode(&r)) - - tokenJSON, err := base64.StdEncoding.DecodeString(r.PeeringToken) - require.NoError(t, err) - - var token structs.PeeringToken - require.NoError(t, json.Unmarshal(tokenJSON, &token)) - - require.Nil(t, token.CA) - require.Equal(t, []string{fmt.Sprintf("127.0.0.1:%d", a.config.ServerPort)}, token.ServerAddresses) - require.Equal(t, "server.dc1.consul", token.ServerName) - - // The PeerID in the token is randomly generated so we don't assert on its value. - require.NotEmpty(t, token.PeerID) - }) -} - -func TestHTTP_Peering_Initiate(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - a := NewTestAgent(t, "") - - testrpc.WaitForTestAgent(t, a.RPC, "dc1") - - t.Run("No Body", func(t *testing.T) { - req, err := http.NewRequest("POST", "/v1/peering/initiate", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusBadRequest, resp.Code) - body, _ := io.ReadAll(resp.Body) - require.Contains(t, string(body), "The peering arguments must be provided in the body") - }) - - t.Run("Body Invalid", func(t *testing.T) { - req, err := http.NewRequest("POST", "/v1/peering/initiate", bytes.NewReader([]byte("abc"))) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusBadRequest, resp.Code) - body, _ := io.ReadAll(resp.Body) - require.Contains(t, string(body), "Body decoding failed:") - }) - - t.Run("No Name", func(t *testing.T) { - req, err := http.NewRequest("POST", "/v1/peering/initiate", - bytes.NewReader([]byte(`{}`))) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusBadRequest, resp.Code) - body, _ := io.ReadAll(resp.Body) - require.Contains(t, string(body), "PeerName is required") - }) - - t.Run("No Token", func(t *testing.T) { - req, err := http.NewRequest("POST", "/v1/peering/initiate", - bytes.NewReader([]byte(`{"PeerName": "peer1-usw1"}`))) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusBadRequest, resp.Code) - body, _ := io.ReadAll(resp.Body) - require.Contains(t, string(body), "PeeringToken is required") - }) - - // TODO(peering): add more failure cases - - t.Run("Success", func(t *testing.T) { - token := structs.PeeringToken{ - CA: []string{validCA}, - ServerName: "server.dc1.consul", - ServerAddresses: []string{fmt.Sprintf("1.2.3.4:%d", 443)}, - PeerID: "a0affd3e-f1c8-4bb9-9168-90fd902c441d", - } - tokenJSON, _ := json.Marshal(&token) - tokenB64 := base64.StdEncoding.EncodeToString(tokenJSON) - body := &pbpeering.InitiateRequest{ - PeerName: "peering-a", - PeeringToken: tokenB64, - Meta: map[string]string{"foo": "bar"}, - } - - bodyBytes, err := json.Marshal(body) - require.NoError(t, err) - - req, err := http.NewRequest("POST", "/v1/peering/initiate", bytes.NewReader(bodyBytes)) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusOK, resp.Code, "expected 200, got %d: %v", resp.Code, resp.Body.String()) - - // success response does not currently return a value so {} is correct - require.Equal(t, "{}", resp.Body.String()) - }) -} - -func TestHTTP_Peering_MethodNotAllowed(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - a := NewTestAgent(t, "") - - testrpc.WaitForTestAgent(t, a.RPC, "dc1") - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - // Insert peerings directly to state store. - // Note that the state store holds reference to the underlying - // variables; do not modify them after writing. - foo := &pbpeering.PeeringWriteRequest{ - Peering: &pbpeering.Peering{ - Name: "foo", - State: pbpeering.PeeringState_INITIAL, - PeerCAPems: nil, - PeerServerName: "fooservername", - PeerServerAddresses: []string{"addr1"}, - }, - } - _, err := a.rpcClientPeering.PeeringWrite(ctx, foo) - require.NoError(t, err) - - req, err := http.NewRequest("PUT", "/v1/peering/foo", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusMethodNotAllowed, resp.Code) -} - -func TestHTTP_Peering_Read(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - a := NewTestAgent(t, "") - - testrpc.WaitForTestAgent(t, a.RPC, "dc1") - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - // Insert peerings directly to state store. - // Note that the state store holds reference to the underlying - // variables; do not modify them after writing. - foo := &pbpeering.PeeringWriteRequest{ - Peering: &pbpeering.Peering{ - Name: "foo", - State: pbpeering.PeeringState_INITIAL, - PeerCAPems: nil, - PeerServerName: "fooservername", - PeerServerAddresses: []string{"addr1"}, - Meta: map[string]string{"foo": "bar"}, - }, - } - _, err := a.rpcClientPeering.PeeringWrite(ctx, foo) - require.NoError(t, err) - bar := &pbpeering.PeeringWriteRequest{ - Peering: &pbpeering.Peering{ - Name: "bar", - State: pbpeering.PeeringState_ACTIVE, - PeerCAPems: nil, - PeerServerName: "barservername", - PeerServerAddresses: []string{"addr1"}, - }, - } - _, err = a.rpcClientPeering.PeeringWrite(ctx, bar) - require.NoError(t, err) - - t.Run("return foo", func(t *testing.T) { - req, err := http.NewRequest("GET", "/v1/peering/foo", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusOK, resp.Code) - - var apiResp api.Peering - require.NoError(t, json.NewDecoder(resp.Body).Decode(&apiResp)) - - require.Equal(t, foo.Peering.Name, apiResp.Name) - require.Equal(t, foo.Peering.Meta, apiResp.Meta) - }) - - t.Run("not found", func(t *testing.T) { - req, err := http.NewRequest("GET", "/v1/peering/baz", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusNotFound, resp.Code) - require.Equal(t, "Peering not found for \"baz\"", resp.Body.String()) - }) -} - -func TestHTTP_Peering_Delete(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - a := NewTestAgent(t, "") - - testrpc.WaitForTestAgent(t, a.RPC, "dc1") - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - foo := &pbpeering.PeeringWriteRequest{ - Peering: &pbpeering.Peering{ - Name: "foo", - State: pbpeering.PeeringState_INITIAL, - PeerCAPems: nil, - PeerServerName: "fooservername", - PeerServerAddresses: []string{"addr1"}, - }, - } - _, err := a.rpcClientPeering.PeeringWrite(ctx, foo) - require.NoError(t, err) - - t.Run("read existing token before attempting delete", func(t *testing.T) { - req, err := http.NewRequest("GET", "/v1/peering/foo", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusOK, resp.Code) - - var apiResp api.Peering - require.NoError(t, json.NewDecoder(resp.Body).Decode(&apiResp)) - - require.Equal(t, foo.Peering.Name, apiResp.Name) - }) - - t.Run("delete the existing token we just read", func(t *testing.T) { - req, err := http.NewRequest("DELETE", "/v1/peering/foo", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusOK, resp.Code) - require.Equal(t, "", resp.Body.String()) - }) - - t.Run("now the token is deleted, a read should 404", func(t *testing.T) { - req, err := http.NewRequest("GET", "/v1/peering/foo", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusNotFound, resp.Code) - }) - - t.Run("delete a token that does not exist", func(t *testing.T) { - req, err := http.NewRequest("DELETE", "/v1/peering/baz", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - - require.Equal(t, http.StatusOK, resp.Code) - }) -} - -func TestHTTP_Peering_List(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - t.Parallel() - a := NewTestAgent(t, "") - - testrpc.WaitForTestAgent(t, a.RPC, "dc1") - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - // Insert peerings directly to state store. - // Note that the state store holds reference to the underlying - // variables; do not modify them after writing. - foo := &pbpeering.PeeringWriteRequest{ - Peering: &pbpeering.Peering{ - Name: "foo", - State: pbpeering.PeeringState_INITIAL, - PeerCAPems: nil, - PeerServerName: "fooservername", - PeerServerAddresses: []string{"addr1"}, - }, - } - _, err := a.rpcClientPeering.PeeringWrite(ctx, foo) - require.NoError(t, err) - bar := &pbpeering.PeeringWriteRequest{ - Peering: &pbpeering.Peering{ - Name: "bar", - State: pbpeering.PeeringState_ACTIVE, - PeerCAPems: nil, - PeerServerName: "barservername", - PeerServerAddresses: []string{"addr1"}, - }, - } - _, err = a.rpcClientPeering.PeeringWrite(ctx, bar) - require.NoError(t, err) - - t.Run("return all", func(t *testing.T) { - req, err := http.NewRequest("GET", "/v1/peerings", nil) - require.NoError(t, err) - resp := httptest.NewRecorder() - a.srv.h.ServeHTTP(resp, req) - require.Equal(t, http.StatusOK, resp.Code) - - var apiResp []*api.Peering - require.NoError(t, json.NewDecoder(resp.Body).Decode(&apiResp)) - - require.Len(t, apiResp, 2) - }) -} diff --git a/agent/prepared_query_endpoint.go b/agent/prepared_query_endpoint.go index 6f5e7a9c2eb8c..094280ef4afb5 100644 --- a/agent/prepared_query_endpoint.go +++ b/agent/prepared_query_endpoint.go @@ -23,7 +23,7 @@ func (s *HTTPHandlers) preparedQueryCreate(resp http.ResponseWriter, req *http.R s.parseDC(req, &args.Datacenter) s.parseToken(req, &args.Token) if err := decodeBody(req.Body, &args.Query); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } var reply string @@ -143,7 +143,7 @@ func (s *HTTPHandlers) preparedQueryExecute(id string, resp http.ResponseWriter, // We have to check the string since the RPC sheds // the specific error type. if structs.IsErrQueryNotFound(err) { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: err.Error()} + return nil, NotFoundError{Reason: err.Error()} } return nil, err } @@ -196,7 +196,7 @@ RETRY_ONCE: // We have to check the string since the RPC sheds // the specific error type. if structs.IsErrQueryNotFound(err) { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: err.Error()} + return nil, NotFoundError{Reason: err.Error()} } return nil, err } @@ -225,7 +225,7 @@ RETRY_ONCE: // We have to check the string since the RPC sheds // the specific error type. if structs.IsErrQueryNotFound(err) { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: err.Error()} + return nil, NotFoundError{Reason: err.Error()} } return nil, err } @@ -247,7 +247,7 @@ func (s *HTTPHandlers) preparedQueryUpdate(id string, resp http.ResponseWriter, s.parseToken(req, &args.Token) if req.ContentLength > 0 { if err := decodeBody(req.Body, &args.Query); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } } diff --git a/agent/prepared_query_endpoint_test.go b/agent/prepared_query_endpoint_test.go index 34b8975fda624..e4d3056e836f4 100644 --- a/agent/prepared_query_endpoint_test.go +++ b/agent/prepared_query_endpoint_test.go @@ -621,12 +621,8 @@ func TestPreparedQuery_Execute(t *testing.T) { req, _ := http.NewRequest("GET", "/v1/query/not-there/execute", body) resp := httptest.NewRecorder() _, err := a.srv.PreparedQuerySpecific(resp, req) - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 404 { - t.Fatalf("expected status 404 but got %d", err.StatusCode) - } - } else { - t.Fatalf("expected HTTP error but got %v", err) + if err, ok := err.(NotFoundError); !ok { + t.Fatalf("Expected not found error but got %v", err) } }) } @@ -760,12 +756,8 @@ func TestPreparedQuery_Explain(t *testing.T) { req, _ := http.NewRequest("GET", "/v1/query/not-there/explain", body) resp := httptest.NewRecorder() _, err := a.srv.PreparedQuerySpecific(resp, req) - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 404 { - t.Fatalf("expected status 404 but got %d", err.StatusCode) - } - } else { - t.Fatalf("expected HTTP error but got %v", err) + if err, ok := err.(NotFoundError); !ok { + t.Fatalf("Expected not found error but got %v", err) } }) @@ -853,12 +845,8 @@ func TestPreparedQuery_Get(t *testing.T) { req, _ := http.NewRequest("GET", "/v1/query/f004177f-2c28-83b7-4229-eacc25fe55d1", body) resp := httptest.NewRecorder() _, err := a.srv.PreparedQuerySpecific(resp, req) - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 404 { - t.Fatalf("expected status 404 but got %d", err.StatusCode) - } - } else { - t.Fatalf("expected HTTP error but got %v", err) + if err, ok := err.(NotFoundError); !ok { + t.Fatalf("Expected not found error but got %v", err) } }) } diff --git a/agent/proxycfg-glue/glue.go b/agent/proxycfg-glue/glue.go deleted file mode 100644 index b18c6487f44ab..0000000000000 --- a/agent/proxycfg-glue/glue.go +++ /dev/null @@ -1,158 +0,0 @@ -package proxycfgglue - -import ( - "context" - - "github.com/hashicorp/consul/agent/cache" - cachetype "github.com/hashicorp/consul/agent/cache-types" - "github.com/hashicorp/consul/agent/proxycfg" - "github.com/hashicorp/consul/agent/rpcclient/health" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" -) - -// CacheCARoots satisfies the proxycfg.CARoots interface by sourcing data from -// the agent cache. -func CacheCARoots(c *cache.Cache) proxycfg.CARoots { - return &cacheProxyDataSource[*structs.DCSpecificRequest]{c, cachetype.ConnectCARootName} -} - -// CacheCompiledDiscoveryChain satisfies the proxycfg.CompiledDiscoveryChain -// interface by sourcing data from the agent cache. -func CacheCompiledDiscoveryChain(c *cache.Cache) proxycfg.CompiledDiscoveryChain { - return &cacheProxyDataSource[*structs.DiscoveryChainRequest]{c, cachetype.CompiledDiscoveryChainName} -} - -// CacheConfigEntry satisfies the proxycfg.ConfigEntry interface by sourcing -// data from the agent cache. -func CacheConfigEntry(c *cache.Cache) proxycfg.ConfigEntry { - return &cacheProxyDataSource[*structs.ConfigEntryQuery]{c, cachetype.ConfigEntryName} -} - -// CacheConfigEntryList satisfies the proxycfg.ConfigEntryList interface by -// sourcing data from the agent cache. -func CacheConfigEntryList(c *cache.Cache) proxycfg.ConfigEntryList { - return &cacheProxyDataSource[*structs.ConfigEntryQuery]{c, cachetype.ConfigEntryListName} -} - -// CacheDatacenters satisfies the proxycfg.Datacenters interface by sourcing -// data from the agent cache. -func CacheDatacenters(c *cache.Cache) proxycfg.Datacenters { - return &cacheProxyDataSource[*structs.DatacentersRequest]{c, cachetype.CatalogDatacentersName} -} - -// CacheFederationStateListMeshGateways satisfies the proxycfg.FederationStateListMeshGateways -// interface by sourcing data from the agent cache. -func CacheFederationStateListMeshGateways(c *cache.Cache) proxycfg.FederationStateListMeshGateways { - return &cacheProxyDataSource[*structs.DCSpecificRequest]{c, cachetype.FederationStateListMeshGatewaysName} -} - -// CacheGatewayServices satisfies the proxycfg.GatewayServices interface by -// sourcing data from the agent cache. -func CacheGatewayServices(c *cache.Cache) proxycfg.GatewayServices { - return &cacheProxyDataSource[*structs.ServiceSpecificRequest]{c, cachetype.GatewayServicesName} -} - -// CacheHTTPChecks satisifies the proxycfg.HTTPChecks interface by sourcing -// data from the agent cache. -func CacheHTTPChecks(c *cache.Cache) proxycfg.HTTPChecks { - return &cacheProxyDataSource[*cachetype.ServiceHTTPChecksRequest]{c, cachetype.ServiceHTTPChecksName} -} - -// CacheIntentions satisfies the proxycfg.Intentions interface by sourcing data -// from the agent cache. -func CacheIntentions(c *cache.Cache) proxycfg.Intentions { - return &cacheProxyDataSource[*structs.IntentionQueryRequest]{c, cachetype.IntentionMatchName} -} - -// CacheIntentionUpstreams satisfies the proxycfg.IntentionUpstreams interface -// by sourcing data from the agent cache. -func CacheIntentionUpstreams(c *cache.Cache) proxycfg.IntentionUpstreams { - return &cacheProxyDataSource[*structs.ServiceSpecificRequest]{c, cachetype.IntentionUpstreamsName} -} - -// CacheInternalServiceDump satisfies the proxycfg.InternalServiceDump -// interface by sourcing data from the agent cache. -func CacheInternalServiceDump(c *cache.Cache) proxycfg.InternalServiceDump { - return &cacheProxyDataSource[*structs.ServiceDumpRequest]{c, cachetype.InternalServiceDumpName} -} - -// CacheLeafCertificate satisifies the proxycfg.LeafCertificate interface by -// sourcing data from the agent cache. -func CacheLeafCertificate(c *cache.Cache) proxycfg.LeafCertificate { - return &cacheProxyDataSource[*cachetype.ConnectCALeafRequest]{c, cachetype.ConnectCALeafName} -} - -// CachePrepraredQuery satisfies the proxycfg.PreparedQuery interface by -// sourcing data from the agent cache. -func CachePrepraredQuery(c *cache.Cache) proxycfg.PreparedQuery { - return &cacheProxyDataSource[*structs.PreparedQueryExecuteRequest]{c, cachetype.PreparedQueryName} -} - -// CacheResolvedServiceConfig satisfies the proxycfg.ResolvedServiceConfig -// interface by sourcing data from the agent cache. -func CacheResolvedServiceConfig(c *cache.Cache) proxycfg.ResolvedServiceConfig { - return &cacheProxyDataSource[*structs.ServiceConfigRequest]{c, cachetype.ResolvedServiceConfigName} -} - -// CacheServiceList satisfies the proxycfg.ServiceList interface by sourcing -// data from the agent cache. -func CacheServiceList(c *cache.Cache) proxycfg.ServiceList { - return &cacheProxyDataSource[*structs.DCSpecificRequest]{c, cachetype.CatalogServiceListName} -} - -func CacheTrustBundle(c *cache.Cache) proxycfg.TrustBundle { - return &cacheProxyDataSource[*pbpeering.TrustBundleReadRequest]{c, cachetype.TrustBundleReadName} -} - -// cacheProxyDataSource implements a generic wrapper around the agent cache to -// provide data to the proxycfg.Manager. -type cacheProxyDataSource[ReqType cache.Request] struct { - c *cache.Cache - t string -} - -// Notify satisfies the interfaces used by proxycfg.Manager to source data by -// subscribing to notifications from the agent cache. -func (c *cacheProxyDataSource[ReqType]) Notify( - ctx context.Context, - req ReqType, - correlationID string, - ch chan<- proxycfg.UpdateEvent, -) error { - return c.c.NotifyCallback(ctx, c.t, req, correlationID, dispatchCacheUpdate(ctx, ch)) -} - -// Health wraps health.Client so that the proxycfg package doesn't need to -// reference cache.UpdateEvent directly. -func Health(client *health.Client) proxycfg.Health { - return &healthWrapper{client} -} - -type healthWrapper struct { - client *health.Client -} - -func (h *healthWrapper) Notify( - ctx context.Context, - req *structs.ServiceSpecificRequest, - correlationID string, - ch chan<- proxycfg.UpdateEvent, -) error { - return h.client.Notify(ctx, *req, correlationID, dispatchCacheUpdate(ctx, ch)) -} - -func dispatchCacheUpdate(ctx context.Context, ch chan<- proxycfg.UpdateEvent) cache.Callback { - return func(ctx context.Context, e cache.UpdateEvent) { - u := proxycfg.UpdateEvent{ - CorrelationID: e.CorrelationID, - Result: e.Result, - Err: e.Err, - } - - select { - case ch <- u: - case <-ctx.Done(): - } - } -} diff --git a/agent/proxycfg-sources/catalog/config_source.go b/agent/proxycfg-sources/catalog/config_source.go deleted file mode 100644 index 1ee3f7f909d4d..0000000000000 --- a/agent/proxycfg-sources/catalog/config_source.go +++ /dev/null @@ -1,259 +0,0 @@ -package catalog - -import ( - "context" - "errors" - "sync" - - "github.com/hashicorp/go-hclog" - "github.com/hashicorp/go-memdb" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/local" - "github.com/hashicorp/consul/agent/proxycfg" - "github.com/hashicorp/consul/agent/structs" -) - -const source proxycfg.ProxySource = "catalog" - -// ConfigSource wraps a proxycfg.Manager to register services with it, from the -// catalog, when they are requested by the xDS server. -type ConfigSource struct { - Config - - mu sync.Mutex - watches map[proxycfg.ProxyID]*watch - - shutdownCh chan struct{} -} - -type watch struct { - numWatchers int // guarded by ConfigSource.mu. - closeCh chan chan struct{} -} - -// NewConfigSource creates a ConfigSource with the given configuration. -func NewConfigSource(cfg Config) *ConfigSource { - return &ConfigSource{ - Config: cfg, - watches: make(map[proxycfg.ProxyID]*watch), - shutdownCh: make(chan struct{}), - } -} - -// Watch wraps the underlying proxycfg.Manager and dynamically registers -// services from the catalog with it when requested by the xDS server. -func (m *ConfigSource) Watch(serviceID structs.ServiceID, nodeName string, token string) (<-chan *proxycfg.ConfigSnapshot, proxycfg.CancelFunc, error) { - // If the service is registered to the local agent, use the LocalConfigSource - // rather than trying to configure it from the catalog. - if nodeName == m.NodeName && m.LocalState.ServiceExists(serviceID) { - return m.LocalConfigSource.Watch(serviceID, nodeName, token) - } - - proxyID := proxycfg.ProxyID{ - ServiceID: serviceID, - NodeName: nodeName, - Token: token, - } - - // Start the watch on the real proxycfg Manager. - snapCh, cancelWatch := m.Manager.Watch(proxyID) - - // Wrap the cancelWatch function with our bookkeeping. m.mu must be held when calling. - var cancelOnce sync.Once - cancel := func() { - cancelOnce.Do(func() { - cancelWatch() - m.cleanup(proxyID) - }) - } - - m.mu.Lock() - defer m.mu.Unlock() - - w, ok := m.watches[proxyID] - if ok { - w.numWatchers++ - } else { - w = &watch{closeCh: make(chan chan struct{}), numWatchers: 1} - m.watches[proxyID] = w - - if err := m.startSync(w.closeCh, proxyID); err != nil { - delete(m.watches, proxyID) - cancelWatch() - return nil, nil, err - } - } - - return snapCh, cancel, nil -} - -func (m *ConfigSource) Shutdown() { - close(m.shutdownCh) -} - -// startSync fetches a service from the state store's catalog tables and -// registers it with the proxycfg Manager. It spawns a goroutine to watch -// and re-register the service whenever it changes - this goroutine will -// run until a signal is sent on closeCh (at which point the service will -// be deregistered). -// -// If the first attempt to fetch and register the service fails, startSync -// will return an error (and no goroutine will be started). -func (m *ConfigSource) startSync(closeCh <-chan chan struct{}, proxyID proxycfg.ProxyID) error { - logger := m.Logger.With( - "proxy_service_id", proxyID.ServiceID.String(), - "node", proxyID.NodeName, - ) - - logger.Trace("syncing catalog service") - - fetchAndRegister := func() (memdb.WatchSet, error) { - store := m.GetStore() - ws := memdb.NewWatchSet() - - // Add the store's AbandonCh to the WatchSet so that if the store is abandoned - // during a snapshot restore we'll unblock and re-register the service. - ws.Add(store.AbandonCh()) - - _, ns, err := store.NodeService(ws, proxyID.NodeName, proxyID.ID, &proxyID.EnterpriseMeta, structs.DefaultPeerKeyword) - - switch { - case err != nil: - logger.Error("failed to read service from state store", "error", err.Error()) - return nil, err - case ns == nil: - m.Manager.Deregister(proxyID, source) - logger.Trace("service does not exist in catalog, de-registering it with proxycfg manager") - return nil, err - case !ns.Kind.IsProxy(): - err := errors.New("service must be a sidecar proxy or gateway") - logger.Error(err.Error()) - return nil, err - default: - err := m.Manager.Register(proxyID, ns, source, proxyID.Token, false) - if err != nil { - logger.Error("failed to register service", "error", err.Error()) - return nil, err - } - return ws, nil - } - } - - syncLoop := func(ws memdb.WatchSet) { - for { - select { - case <-ws.WatchCh(context.Background()): - // Something changed, unblock and re-run the query. - case doneCh := <-closeCh: - // All watchers of this service (xDS streams) have gone away, so it's time - // to free its resources. - // - // TODO(agentless): we should probably wait for a short grace period before - // de-registering the service to allow clients to reconnect after a network - // blip. - logger.Trace("de-registering service with proxycfg manager because all watchers have gone away") - m.Manager.Deregister(proxyID, source) - close(doneCh) - return - case <-m.shutdownCh: - // Manager is shutting down, stop the goroutine. - return - } - - var err error - ws, err = fetchAndRegister() - if err != nil { - return - } - } - } - - ws, err := fetchAndRegister() - if err != nil { - // Currently, only the first attempt's error is returned to the xDS server, - // which terminates the stream immediately. - // - // We don't (yet) have a way to surface subsequent errors to the xDS server. - // - // We could wrap ConfigSnapshot in a sum type (i.e. a struct that contains - // either a snapshot or an error) but given the relative unlikelihood of a - // query that succeeds once failing in the future, it doesn't seem worth it. - // - // Instead, we log the error and leave any watchers hanging. Perhaps another - // solution would be to close any watch channels when de-registering a service? - return err - } - go syncLoop(ws) - - return nil -} - -// cleanup decrements the watchers counter for the given proxy, and if it has -// reached zero, stops the sync goroutine (and de-registers the service). -func (m *ConfigSource) cleanup(id proxycfg.ProxyID) { - m.mu.Lock() - defer m.mu.Unlock() - - h := m.watches[id] - h.numWatchers-- - - if h.numWatchers == 0 { - // We wait for doneCh to be closed by the sync goroutine, so that the lock is - // held until after the service is de-registered - this prevents a potential - // race where another sync goroutine is started for the service and we undo - // its call to register the service. - // - // This cannot deadlock because closeCh is unbuffered. Sending will only - // succeed if the sync goroutine is ready to receive (which always closes - // doneCh). - doneCh := make(chan struct{}) - select { - case h.closeCh <- doneCh: - <-doneCh - case <-m.shutdownCh: - // ConfigSource is shutting down, so the goroutine will be stopped anyway. - } - - delete(m.watches, id) - } -} - -type Config struct { - // NodeName is the name of the local agent node. - NodeName string - - // Manager is the proxycfg Manager with which proxy services will be registered. - Manager ConfigManager - - // State is the agent's local state that will be used to check if a proxy is - // registered locally. - LocalState *local.State - - // LocalConfigSource is used to configure proxies registered in the agent's - // local state. - LocalConfigSource Watcher - - // GetStore is used to access the server's state store. - GetStore func() Store - - // Logger will be used to write log messages. - Logger hclog.Logger -} - -//go:generate mockery --name ConfigManager --inpackage -type ConfigManager interface { - Watch(req proxycfg.ProxyID) (<-chan *proxycfg.ConfigSnapshot, proxycfg.CancelFunc) - Register(proxyID proxycfg.ProxyID, service *structs.NodeService, source proxycfg.ProxySource, token string, overwrite bool) error - Deregister(proxyID proxycfg.ProxyID, source proxycfg.ProxySource) -} - -type Store interface { - NodeService(ws memdb.WatchSet, nodeName string, serviceID string, entMeta *acl.EnterpriseMeta, peerName string) (uint64, *structs.NodeService, error) - AbandonCh() <-chan struct{} -} - -//go:generate mockery --name Watcher --inpackage -type Watcher interface { - Watch(proxyID structs.ServiceID, nodeName string, token string) (<-chan *proxycfg.ConfigSnapshot, proxycfg.CancelFunc, error) -} diff --git a/agent/proxycfg-sources/catalog/config_source_test.go b/agent/proxycfg-sources/catalog/config_source_test.go deleted file mode 100644 index dffb0c2e57917..0000000000000 --- a/agent/proxycfg-sources/catalog/config_source_test.go +++ /dev/null @@ -1,266 +0,0 @@ -package catalog - -import ( - "errors" - "testing" - "time" - - "github.com/hashicorp/go-hclog" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/local" - "github.com/hashicorp/consul/agent/proxycfg" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/agent/token" -) - -func TestConfigSource_Success(t *testing.T) { - serviceID := structs.NewServiceID("web-sidecar-proxy-1", nil) - nodeName := "node-name" - token := "token" - - store := testStateStore(t) - - // Register the proxy in the catalog/state store at port 9999. - require.NoError(t, store.EnsureRegistration(0, &structs.RegisterRequest{ - Node: nodeName, - Service: &structs.NodeService{ - ID: serviceID.ID, - Service: "web-sidecar-proxy", - Port: 9999, - Kind: structs.ServiceKindConnectProxy, - }, - })) - - // testConfigManager builds a ConfigManager that emits a ConfigSnapshot whenever - // Register is called, and closes the watch channel when Deregister is called. - // - // Though a little odd, this allows us to make assertions on the sync goroutine's - // behavior without sleeping which leads to slow/racy tests. - cfgMgr := testConfigManager(t, serviceID, nodeName, token) - - mgr := NewConfigSource(Config{ - Manager: cfgMgr, - LocalState: testLocalState(t), - Logger: hclog.NewNullLogger(), - GetStore: func() Store { return store }, - }) - t.Cleanup(mgr.Shutdown) - - snapCh, cancelWatch1, err := mgr.Watch(serviceID, nodeName, token) - require.NoError(t, err) - - // Expect Register to have been called with the proxy's inital port. - select { - case snap := <-snapCh: - require.Equal(t, 9999, snap.Port) - require.Equal(t, token, snap.ProxyID.Token) - case <-time.After(100 * time.Millisecond): - t.Fatal("timeout waiting for snapshot") - } - - // Update the proxy's port to 8888. - require.NoError(t, store.EnsureRegistration(0, &structs.RegisterRequest{ - Node: nodeName, - Service: &structs.NodeService{ - ID: serviceID.ID, - Service: "web-sidecar-proxy", - Port: 8888, - Kind: structs.ServiceKindConnectProxy, - }, - })) - - // Expect Register to have been called again with the proxy's new port. - select { - case snap := <-snapCh: - require.Equal(t, 8888, snap.Port) - case <-time.After(100 * time.Millisecond): - t.Fatal("timeout waiting for snapshot") - } - - // Start another watch. - _, cancelWatch2, err := mgr.Watch(serviceID, nodeName, token) - require.NoError(t, err) - - // Expect the service to have not been re-registered by the second watch. - select { - case <-snapCh: - t.Fatal("service shouldn't have been re-registered") - case <-time.After(100 * time.Millisecond): - } - - // Expect cancelling the first watch to *not* de-register the service. - cancelWatch1() - select { - case <-snapCh: - t.Fatal("service shouldn't have been de-registered until other watch went away") - case <-time.After(100 * time.Millisecond): - } - - // Expect cancelling the other watch to de-register the service. - cancelWatch2() - select { - case _, ok := <-snapCh: - require.False(t, ok, "channel should've been closed") - case <-time.After(100 * time.Millisecond): - t.Fatal("timeout waiting for service to be de-registered") - } -} - -func TestConfigSource_LocallyManagedService(t *testing.T) { - serviceID := structs.NewServiceID("web-sidecar-proxy-1", nil) - nodeName := "node-1" - token := "token" - - localState := testLocalState(t) - localState.AddService(&structs.NodeService{ID: serviceID.ID}, "") - - localWatcher := NewMockWatcher(t) - localWatcher.On("Watch", serviceID, nodeName, token). - Return(make(<-chan *proxycfg.ConfigSnapshot), proxycfg.CancelFunc(func() {}), nil) - - mgr := NewConfigSource(Config{ - NodeName: nodeName, - LocalState: localState, - LocalConfigSource: localWatcher, - Logger: hclog.NewNullLogger(), - GetStore: func() Store { panic("state store shouldn't have been used") }, - }) - t.Cleanup(mgr.Shutdown) - - _, _, err := mgr.Watch(serviceID, nodeName, token) - require.NoError(t, err) -} - -func TestConfigSource_ErrorRegisteringService(t *testing.T) { - serviceID := structs.NewServiceID("web-sidecar-proxy-1", nil) - nodeName := "node-name" - token := "token" - - store := testStateStore(t) - - require.NoError(t, store.EnsureRegistration(0, &structs.RegisterRequest{ - Node: nodeName, - Service: &structs.NodeService{ - ID: serviceID.ID, - Service: "web-sidecar-proxy", - Port: 9999, - Kind: structs.ServiceKindConnectProxy, - }, - })) - - var canceledWatch bool - cancel := proxycfg.CancelFunc(func() { canceledWatch = true }) - - cfgMgr := NewMockConfigManager(t) - - cfgMgr.On("Watch", mock.Anything). - Return(make(<-chan *proxycfg.ConfigSnapshot), cancel) - - cfgMgr.On("Register", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). - Return(errors.New("KABOOM")) - - mgr := NewConfigSource(Config{ - Manager: cfgMgr, - LocalState: testLocalState(t), - Logger: hclog.NewNullLogger(), - GetStore: func() Store { return store }, - }) - t.Cleanup(mgr.Shutdown) - - _, _, err := mgr.Watch(serviceID, nodeName, token) - require.Error(t, err) - require.True(t, canceledWatch, "watch should've been canceled") -} - -func TestConfigSource_NotProxyService(t *testing.T) { - serviceID := structs.NewServiceID("web", nil) - nodeName := "node-name" - token := "token" - - store := testStateStore(t) - - require.NoError(t, store.EnsureRegistration(0, &structs.RegisterRequest{ - Node: nodeName, - Service: &structs.NodeService{ - ID: serviceID.ID, - Service: "web", - Port: 9999, - Kind: structs.ServiceKindTypical, - }, - })) - - var canceledWatch bool - cancel := proxycfg.CancelFunc(func() { canceledWatch = true }) - - cfgMgr := NewMockConfigManager(t) - - cfgMgr.On("Watch", mock.Anything). - Return(make(<-chan *proxycfg.ConfigSnapshot), cancel) - - mgr := NewConfigSource(Config{ - Manager: cfgMgr, - LocalState: testLocalState(t), - Logger: hclog.NewNullLogger(), - GetStore: func() Store { return store }, - }) - t.Cleanup(mgr.Shutdown) - - _, _, err := mgr.Watch(serviceID, nodeName, token) - require.Error(t, err) - require.Contains(t, err.Error(), "must be a sidecar proxy or gateway") - require.True(t, canceledWatch, "watch should've been canceled") -} - -func testConfigManager(t *testing.T, serviceID structs.ServiceID, nodeName string, token string) ConfigManager { - t.Helper() - - cfgMgr := NewMockConfigManager(t) - - proxyID := proxycfg.ProxyID{ - ServiceID: serviceID, - NodeName: nodeName, - Token: token, - } - - snapCh := make(chan *proxycfg.ConfigSnapshot, 1) - cfgMgr.On("Watch", proxyID). - Return((<-chan *proxycfg.ConfigSnapshot)(snapCh), proxycfg.CancelFunc(func() {}), nil) - - cfgMgr.On("Register", mock.Anything, mock.Anything, source, token, false). - Run(func(args mock.Arguments) { - id := args.Get(0).(proxycfg.ProxyID) - ns := args.Get(1).(*structs.NodeService) - - snapCh <- &proxycfg.ConfigSnapshot{ - ProxyID: id, - Port: ns.Port, - } - }). - Return(nil) - - cfgMgr.On("Deregister", proxyID, source). - Run(func(mock.Arguments) { close(snapCh) }). - Return() - - return cfgMgr -} - -func testStateStore(t *testing.T) *state.Store { - t.Helper() - - gc, err := state.NewTombstoneGC(time.Second, time.Millisecond) - require.NoError(t, err) - return state.NewStateStoreWithEventPublisher(gc, stream.NoOpEventPublisher{}) -} - -func testLocalState(t *testing.T) *local.State { - t.Helper() - - l := local.NewState(local.Config{}, hclog.NewNullLogger(), &token.Store{}) - l.TriggerSyncChanges = func() {} - return l -} diff --git a/agent/proxycfg-sources/catalog/mock_ConfigManager.go b/agent/proxycfg-sources/catalog/mock_ConfigManager.go deleted file mode 100644 index 047b61c878dbd..0000000000000 --- a/agent/proxycfg-sources/catalog/mock_ConfigManager.go +++ /dev/null @@ -1,71 +0,0 @@ -// Code generated by mockery v2.12.0. DO NOT EDIT. - -package catalog - -import ( - proxycfg "github.com/hashicorp/consul/agent/proxycfg" - mock "github.com/stretchr/testify/mock" - - structs "github.com/hashicorp/consul/agent/structs" - - testing "testing" -) - -// MockConfigManager is an autogenerated mock type for the ConfigManager type -type MockConfigManager struct { - mock.Mock -} - -// Deregister provides a mock function with given fields: proxyID, source -func (_m *MockConfigManager) Deregister(proxyID proxycfg.ProxyID, source proxycfg.ProxySource) { - _m.Called(proxyID, source) -} - -// Register provides a mock function with given fields: proxyID, service, source, token, overwrite -func (_m *MockConfigManager) Register(proxyID proxycfg.ProxyID, service *structs.NodeService, source proxycfg.ProxySource, token string, overwrite bool) error { - ret := _m.Called(proxyID, service, source, token, overwrite) - - var r0 error - if rf, ok := ret.Get(0).(func(proxycfg.ProxyID, *structs.NodeService, proxycfg.ProxySource, string, bool) error); ok { - r0 = rf(proxyID, service, source, token, overwrite) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// Watch provides a mock function with given fields: req -func (_m *MockConfigManager) Watch(req proxycfg.ProxyID) (<-chan *proxycfg.ConfigSnapshot, proxycfg.CancelFunc) { - ret := _m.Called(req) - - var r0 <-chan *proxycfg.ConfigSnapshot - if rf, ok := ret.Get(0).(func(proxycfg.ProxyID) <-chan *proxycfg.ConfigSnapshot); ok { - r0 = rf(req) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(<-chan *proxycfg.ConfigSnapshot) - } - } - - var r1 proxycfg.CancelFunc - if rf, ok := ret.Get(1).(func(proxycfg.ProxyID) proxycfg.CancelFunc); ok { - r1 = rf(req) - } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(proxycfg.CancelFunc) - } - } - - return r0, r1 -} - -// NewMockConfigManager creates a new instance of MockConfigManager. It also registers the testing.TB interface on the mock and a cleanup function to assert the mocks expectations. -func NewMockConfigManager(t testing.TB) *MockConfigManager { - mock := &MockConfigManager{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/proxycfg-sources/catalog/mock_Watcher.go b/agent/proxycfg-sources/catalog/mock_Watcher.go deleted file mode 100644 index 193b7d844f257..0000000000000 --- a/agent/proxycfg-sources/catalog/mock_Watcher.go +++ /dev/null @@ -1,59 +0,0 @@ -// Code generated by mockery v2.12.0. DO NOT EDIT. - -package catalog - -import ( - proxycfg "github.com/hashicorp/consul/agent/proxycfg" - mock "github.com/stretchr/testify/mock" - - structs "github.com/hashicorp/consul/agent/structs" - - testing "testing" -) - -// MockWatcher is an autogenerated mock type for the Watcher type -type MockWatcher struct { - mock.Mock -} - -// Watch provides a mock function with given fields: proxyID, nodeName, token -func (_m *MockWatcher) Watch(proxyID structs.ServiceID, nodeName string, token string) (<-chan *proxycfg.ConfigSnapshot, proxycfg.CancelFunc, error) { - ret := _m.Called(proxyID, nodeName, token) - - var r0 <-chan *proxycfg.ConfigSnapshot - if rf, ok := ret.Get(0).(func(structs.ServiceID, string, string) <-chan *proxycfg.ConfigSnapshot); ok { - r0 = rf(proxyID, nodeName, token) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(<-chan *proxycfg.ConfigSnapshot) - } - } - - var r1 proxycfg.CancelFunc - if rf, ok := ret.Get(1).(func(structs.ServiceID, string, string) proxycfg.CancelFunc); ok { - r1 = rf(proxyID, nodeName, token) - } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(proxycfg.CancelFunc) - } - } - - var r2 error - if rf, ok := ret.Get(2).(func(structs.ServiceID, string, string) error); ok { - r2 = rf(proxyID, nodeName, token) - } else { - r2 = ret.Error(2) - } - - return r0, r1, r2 -} - -// NewMockWatcher creates a new instance of MockWatcher. It also registers the testing.TB interface on the mock and a cleanup function to assert the mocks expectations. -func NewMockWatcher(t testing.TB) *MockWatcher { - mock := &MockWatcher{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/proxycfg-sources/local/config_source.go b/agent/proxycfg-sources/local/config_source.go deleted file mode 100644 index b23316d5368cc..0000000000000 --- a/agent/proxycfg-sources/local/config_source.go +++ /dev/null @@ -1,31 +0,0 @@ -package local - -import ( - "github.com/hashicorp/consul/agent/proxycfg" - structs "github.com/hashicorp/consul/agent/structs" -) - -// ConfigSource wraps a proxycfg.Manager to create watches on services -// local to the agent (pre-registered by Sync). -type ConfigSource struct { - manager ConfigManager -} - -// NewConfigSource builds a ConfigSource with the given proxycfg.Manager. -func NewConfigSource(cfgMgr ConfigManager) *ConfigSource { - return &ConfigSource{cfgMgr} -} - -func (m *ConfigSource) Watch(serviceID structs.ServiceID, nodeName string, _ string) (<-chan *proxycfg.ConfigSnapshot, proxycfg.CancelFunc, error) { - watchCh, cancelWatch := m.manager.Watch(proxycfg.ProxyID{ - ServiceID: serviceID, - NodeName: nodeName, - - // Note: we *intentionally* don't set Token here. All watches on local - // services use the same ACL token, regardless of whatever token is - // presented in the xDS stream (the token presented to the xDS server - // is checked before the watch is created). - Token: "", - }) - return watchCh, cancelWatch, nil -} diff --git a/agent/proxycfg-sources/local/local.go b/agent/proxycfg-sources/local/local.go deleted file mode 100644 index 2cdc2875169e6..0000000000000 --- a/agent/proxycfg-sources/local/local.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package local integrates the proxycfg Manager with the agent's local state. -package local diff --git a/agent/proxycfg-sources/local/mock_ConfigManager.go b/agent/proxycfg-sources/local/mock_ConfigManager.go deleted file mode 100644 index 0f77ce065112f..0000000000000 --- a/agent/proxycfg-sources/local/mock_ConfigManager.go +++ /dev/null @@ -1,87 +0,0 @@ -// Code generated by mockery v2.12.0. DO NOT EDIT. - -package local - -import ( - proxycfg "github.com/hashicorp/consul/agent/proxycfg" - mock "github.com/stretchr/testify/mock" - - structs "github.com/hashicorp/consul/agent/structs" - - testing "testing" -) - -// MockConfigManager is an autogenerated mock type for the ConfigManager type -type MockConfigManager struct { - mock.Mock -} - -// Deregister provides a mock function with given fields: proxyID, source -func (_m *MockConfigManager) Deregister(proxyID proxycfg.ProxyID, source proxycfg.ProxySource) { - _m.Called(proxyID, source) -} - -// Register provides a mock function with given fields: proxyID, service, source, token, overwrite -func (_m *MockConfigManager) Register(proxyID proxycfg.ProxyID, service *structs.NodeService, source proxycfg.ProxySource, token string, overwrite bool) error { - ret := _m.Called(proxyID, service, source, token, overwrite) - - var r0 error - if rf, ok := ret.Get(0).(func(proxycfg.ProxyID, *structs.NodeService, proxycfg.ProxySource, string, bool) error); ok { - r0 = rf(proxyID, service, source, token, overwrite) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// RegisteredProxies provides a mock function with given fields: source -func (_m *MockConfigManager) RegisteredProxies(source proxycfg.ProxySource) []proxycfg.ProxyID { - ret := _m.Called(source) - - var r0 []proxycfg.ProxyID - if rf, ok := ret.Get(0).(func(proxycfg.ProxySource) []proxycfg.ProxyID); ok { - r0 = rf(source) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]proxycfg.ProxyID) - } - } - - return r0 -} - -// Watch provides a mock function with given fields: id -func (_m *MockConfigManager) Watch(id proxycfg.ProxyID) (<-chan *proxycfg.ConfigSnapshot, proxycfg.CancelFunc) { - ret := _m.Called(id) - - var r0 <-chan *proxycfg.ConfigSnapshot - if rf, ok := ret.Get(0).(func(proxycfg.ProxyID) <-chan *proxycfg.ConfigSnapshot); ok { - r0 = rf(id) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(<-chan *proxycfg.ConfigSnapshot) - } - } - - var r1 proxycfg.CancelFunc - if rf, ok := ret.Get(1).(func(proxycfg.ProxyID) proxycfg.CancelFunc); ok { - r1 = rf(id) - } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).(proxycfg.CancelFunc) - } - } - - return r0, r1 -} - -// NewMockConfigManager creates a new instance of MockConfigManager. It also registers the testing.TB interface on the mock and a cleanup function to assert the mocks expectations. -func NewMockConfigManager(t testing.TB) *MockConfigManager { - mock := &MockConfigManager{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/agent/proxycfg-sources/local/sync.go b/agent/proxycfg-sources/local/sync.go deleted file mode 100644 index c6cee8c61d159..0000000000000 --- a/agent/proxycfg-sources/local/sync.go +++ /dev/null @@ -1,125 +0,0 @@ -package local - -import ( - "context" - - "github.com/hashicorp/go-hclog" - - "github.com/hashicorp/consul/agent/local" - "github.com/hashicorp/consul/agent/proxycfg" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/agent/token" -) - -const source proxycfg.ProxySource = "local" - -// SyncConfig contains the dependencies required by Sync. -type SyncConfig struct { - // Manager is the proxycfg Manager with which proxy services will be registered. - Manager ConfigManager - - // State is the agent's local state that will be watched for proxy registrations. - State *local.State - - // Tokens is used to retrieve a fallback ACL token if a service is registered - // without one. - Tokens *token.Store - - // NodeName is the name of the local agent node. - NodeName string - - // Logger will be used to write log messages. - Logger hclog.Logger -} - -// Sync watches the agent's local state and registers/deregisters services with -// the proxycfg Manager ahead-of-time so they're ready immediately when a proxy -// begins an xDS stream. -// -// It runs until the given context is canceled, so should be called it its own -// goroutine. -// -// Note: proxy service definitions from the agent's local state will always -// overwrite definitions of the same service from other sources (e.g. the -// catalog). -func Sync(ctx context.Context, cfg SyncConfig) { - // Single item buffer is enough since there is no data transferred so this is - // "level triggering" and we can't miss actual data. - stateCh := make(chan struct{}, 1) - - cfg.State.Notify(stateCh) - defer cfg.State.StopNotify(stateCh) - - for { - sync(cfg) - - select { - case <-stateCh: - // Wait for a state change. - case <-ctx.Done(): - return - } - } -} - -func sync(cfg SyncConfig) { - cfg.Logger.Trace("syncing proxy services from local state") - - services := cfg.State.AllServices() - - // Traverse the local state and ensure all proxy services are registered - for sid, svc := range services { - if !svc.Kind.IsProxy() { - continue - } - - // Retrieve the token used to register the service, or fallback to the - // default user token. This token is expected to match the token used in - // the xDS request for this data. - token := cfg.State.ServiceToken(sid) - if token == "" { - token = cfg.Tokens.UserToken() - } - - id := proxycfg.ProxyID{ - ServiceID: sid, - NodeName: cfg.NodeName, - - // Note: we *intentionally* don't set Token here. All watches on local - // services use the same ACL token, regardless of whatever token is - // presented in the xDS stream (the token presented to the xDS server - // is checked before the watch is created). - Token: "", - } - - // TODO(banks): need to work out when to default some stuff. For example - // Proxy.LocalServicePort is practically necessary for any sidecar and can - // default to the port of the sidecar service, but only if it's already - // registered and once we get past here, we don't have enough context to - // know that so we'd need to set it here if not during registration of the - // proxy service. Sidecar Service in the interim can do that, but we should - // validate more generally that that is always true. - err := cfg.Manager.Register(id, svc, source, token, true) - if err != nil { - cfg.Logger.Error("failed to watch proxy service", - "service", sid.String(), - "error", err, - ) - } - } - - // Now see if any proxies were removed - for _, proxyID := range cfg.Manager.RegisteredProxies(source) { - if _, ok := services[proxyID.ServiceID]; !ok { - cfg.Manager.Deregister(proxyID, source) - } - } -} - -//go:generate mockery --name ConfigManager --inpackage -type ConfigManager interface { - Watch(id proxycfg.ProxyID) (<-chan *proxycfg.ConfigSnapshot, proxycfg.CancelFunc) - Register(proxyID proxycfg.ProxyID, service *structs.NodeService, source proxycfg.ProxySource, token string, overwrite bool) error - Deregister(proxyID proxycfg.ProxyID, source proxycfg.ProxySource) - RegisteredProxies(source proxycfg.ProxySource) []proxycfg.ProxyID -} diff --git a/agent/proxycfg-sources/local/sync_test.go b/agent/proxycfg-sources/local/sync_test.go deleted file mode 100644 index b73c0e3b3e1cc..0000000000000 --- a/agent/proxycfg-sources/local/sync_test.go +++ /dev/null @@ -1,111 +0,0 @@ -package local - -import ( - "context" - "testing" - "time" - - "github.com/hashicorp/go-hclog" - mock "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/agent/local" - "github.com/hashicorp/consul/agent/proxycfg" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/agent/token" -) - -func TestSync(t *testing.T) { - const ( - serviceID = "some-service" - serviceToken = "some-service-token" - otherServiceID = "other-service" - userToken = "user-token" - ) - - tokens := &token.Store{} - tokens.UpdateUserToken(userToken, token.TokenSourceConfig) - - state := local.NewState(local.Config{}, hclog.NewNullLogger(), tokens) - state.TriggerSyncChanges = func() {} - - state.AddService(&structs.NodeService{ - ID: serviceID, - Kind: structs.ServiceKindConnectProxy, - }, serviceToken) - - cfgMgr := NewMockConfigManager(t) - - type registration struct { - id proxycfg.ProxyID - service *structs.NodeService - token string - } - registerCh := make(chan registration) - cfgMgr.On("Register", mock.Anything, mock.Anything, source, mock.Anything, true). - Run(func(args mock.Arguments) { - id := args.Get(0).(proxycfg.ProxyID) - service := args.Get(1).(*structs.NodeService) - token := args.Get(3).(string) - registerCh <- registration{id, service, token} - }). - Return(nil) - - deregisterCh := make(chan proxycfg.ProxyID) - cfgMgr.On("Deregister", mock.Anything, source). - Run(func(args mock.Arguments) { - id := args.Get(0).(proxycfg.ProxyID) - deregisterCh <- id - }). - Return() - - cfgMgr.On("RegisteredProxies", source). - Return([]proxycfg.ProxyID{{ServiceID: structs.ServiceID{ID: otherServiceID}}}). - Once() - - ctx, cancel := context.WithCancel(context.Background()) - t.Cleanup(cancel) - - go Sync(ctx, SyncConfig{ - Manager: cfgMgr, - State: state, - Tokens: tokens, - Logger: hclog.NewNullLogger(), - }) - - // Expect the service in the local state to be registered. - select { - case reg := <-registerCh: - require.Equal(t, serviceID, reg.service.ID) - require.Equal(t, serviceToken, reg.token) - case <-time.After(100 * time.Millisecond): - t.Fatal("timeout waiting for service to be registered") - } - - // Expect the service not in the local state to be de-registered. - select { - case id := <-deregisterCh: - require.Equal(t, otherServiceID, id.ID) - case <-time.After(100 * time.Millisecond): - t.Fatal("timeout waiting for service to be de-registered") - } - - // Update the service (without a token) and expect it to be re-registered (with - // the user token). - cfgMgr.On("RegisteredProxies", source). - Return([]proxycfg.ProxyID{}). - Maybe() - - state.AddService(&structs.NodeService{ - ID: serviceID, - Kind: structs.ServiceKindConnectProxy, - }, "") - - select { - case reg := <-registerCh: - require.Equal(t, serviceID, reg.service.ID) - require.Equal(t, userToken, reg.token) - case <-time.After(100 * time.Millisecond): - t.Fatal("timeout waiting for service to be registered") - } -} diff --git a/agent/proxycfg/connect_proxy.go b/agent/proxycfg/connect_proxy.go index 923b15b73bf6d..e23ae0662d66f 100644 --- a/agent/proxycfg/connect_proxy.go +++ b/agent/proxycfg/connect_proxy.go @@ -5,11 +5,9 @@ import ( "fmt" "strings" + "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" - "github.com/hashicorp/consul/agent/configentry" - "github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" ) type handlerConnectProxy struct { @@ -24,8 +22,6 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e snap.ConnectProxy.WatchedDiscoveryChains = make(map[UpstreamID]context.CancelFunc) snap.ConnectProxy.WatchedUpstreams = make(map[UpstreamID]map[string]context.CancelFunc) snap.ConnectProxy.WatchedUpstreamEndpoints = make(map[UpstreamID]map[string]structs.CheckServiceNodes) - snap.ConnectProxy.WatchedPeerTrustBundles = make(map[string]context.CancelFunc) - snap.ConnectProxy.PeerTrustBundles = make(map[string]*pbpeering.PeeringTrustBundle) snap.ConnectProxy.WatchedGateways = make(map[UpstreamID]map[string]context.CancelFunc) snap.ConnectProxy.WatchedGatewayEndpoints = make(map[UpstreamID]map[string]structs.CheckServiceNodes) snap.ConnectProxy.WatchedServiceChecks = make(map[structs.ServiceID][]structs.CheckType) @@ -35,7 +31,7 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e snap.ConnectProxy.PassthroughIndices = make(map[string]indexedTarget) // Watch for root changes - err := s.dataSources.CARoots.Notify(ctx, &structs.DCSpecificRequest{ + err := s.cache.Notify(ctx, cachetype.ConnectCARootName, &structs.DCSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Source: *s.source, @@ -45,7 +41,7 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e } // Watch the leaf cert - err = s.dataSources.LeafCertificate.Notify(ctx, &cachetype.ConnectCALeafRequest{ + err = s.cache.Notify(ctx, cachetype.ConnectCALeafName, &cachetype.ConnectCALeafRequest{ Datacenter: s.source.Datacenter, Token: s.token, Service: s.proxyCfg.DestinationServiceName, @@ -56,7 +52,7 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e } // Watch for intention updates - err = s.dataSources.Intentions.Notify(ctx, &structs.IntentionQueryRequest{ + err = s.cache.Notify(ctx, cachetype.IntentionMatchName, &structs.IntentionQueryRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Match: &structs.IntentionQueryMatch{ @@ -75,7 +71,7 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e } // Get information about the entire service mesh. - err = s.dataSources.ConfigEntry.Notify(ctx, &structs.ConfigEntryQuery{ + err = s.cache.Notify(ctx, cachetype.ConfigEntryName, &structs.ConfigEntryQuery{ Kind: structs.MeshConfig, Name: structs.MeshConfigMesh, Datacenter: s.source.Datacenter, @@ -87,7 +83,7 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e } // Watch for service check updates - err = s.dataSources.HTTPChecks.Notify(ctx, &cachetype.ServiceHTTPChecksRequest{ + err = s.cache.Notify(ctx, cachetype.ServiceHTTPChecksName, &cachetype.ServiceHTTPChecksRequest{ ServiceID: s.proxyCfg.DestinationServiceID, EnterpriseMeta: s.proxyID.EnterpriseMeta, }, svcChecksWatchIDPrefix+structs.ServiceIDString(s.proxyCfg.DestinationServiceID, &s.proxyID.EnterpriseMeta), s.ch) @@ -97,7 +93,7 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e if s.proxyCfg.Mode == structs.ProxyModeTransparent { // When in transparent proxy we will infer upstreams from intentions with this source - err := s.dataSources.IntentionUpstreams.Notify(ctx, &structs.ServiceSpecificRequest{ + err := s.cache.Notify(ctx, cachetype.IntentionUpstreamsName, &structs.ServiceSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, ServiceName: s.proxyCfg.DestinationServiceName, @@ -159,7 +155,7 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e switch u.DestinationType { case structs.UpstreamDestTypePreparedQuery: - err = s.dataSources.PreparedQuery.Notify(ctx, &structs.PreparedQueryExecuteRequest{ + err = s.cache.Notify(ctx, cachetype.PreparedQueryName, &structs.PreparedQueryExecuteRequest{ Datacenter: dc, QueryOptions: structs.QueryOptions{Token: s.token, MaxAge: defaultPreparedQueryPollInterval}, QueryIDOrName: u.DestinationName, @@ -174,46 +170,7 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e fallthrough case "": - // If DestinationPeer is not empty, insert a default discovery chain directly to the snapshot - if u.DestinationPeer != "" { - req := discoverychain.CompileRequest{ - ServiceName: u.DestinationName, - EvaluateInNamespace: u.DestinationNamespace, - EvaluateInPartition: u.DestinationPartition, - EvaluateInDatacenter: dc, - EvaluateInTrustDomain: "trustdomain.consul", // TODO(peering): where to evaluate this? - Entries: configentry.NewDiscoveryChainSet(), - } - chain, err := discoverychain.Compile(req) - if err != nil { - return snap, fmt.Errorf("error while compiling default discovery chain: %w", err) - } - - // Directly insert chain and empty function into the discovery chain maps - snap.ConnectProxy.ConfigSnapshotUpstreams.DiscoveryChain[uid] = chain - snap.ConnectProxy.ConfigSnapshotUpstreams.WatchedDiscoveryChains[uid] = func() {} - - if err := (*handlerUpstreams)(s).resetWatchesFromChain(ctx, uid, chain, &snap.ConnectProxy.ConfigSnapshotUpstreams); err != nil { - return snap, fmt.Errorf("error while resetting watches from chain: %w", err) - } - - // Check whether a watch for this peer exists to avoid duplicates. - if _, ok := snap.ConnectProxy.WatchedPeerTrustBundles[uid.Peer]; !ok { - peerCtx, cancel := context.WithCancel(ctx) - if err := s.dataSources.TrustBundle.Notify(peerCtx, &pbpeering.TrustBundleReadRequest{ - Name: uid.Peer, - Partition: uid.PartitionOrDefault(), - }, peerTrustBundleIDPrefix+uid.Peer, s.ch); err != nil { - cancel() - return snap, fmt.Errorf("error while watching trust bundle for peer %q: %w", uid.Peer, err) - } - - snap.ConnectProxy.WatchedPeerTrustBundles[uid.Peer] = cancel - } - continue - } - - err = s.dataSources.CompiledDiscoveryChain.Notify(ctx, &structs.DiscoveryChainRequest{ + err = s.cache.Notify(ctx, cachetype.CompiledDiscoveryChainName, &structs.DiscoveryChainRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Name: u.DestinationName, @@ -236,7 +193,7 @@ func (s *handlerConnectProxy) initialize(ctx context.Context) (ConfigSnapshot, e return snap, nil } -func (s *handlerConnectProxy) handleUpdate(ctx context.Context, u UpdateEvent, snap *ConfigSnapshot) error { +func (s *handlerConnectProxy) handleUpdate(ctx context.Context, u cache.UpdateEvent, snap *ConfigSnapshot) error { if u.Err != nil { return fmt.Errorf("error filling agent cache: %v", u.Err) } @@ -248,17 +205,6 @@ func (s *handlerConnectProxy) handleUpdate(ctx context.Context, u UpdateEvent, s return fmt.Errorf("invalid type for response: %T", u.Result) } snap.Roots = roots - - case strings.HasPrefix(u.CorrelationID, peerTrustBundleIDPrefix): - resp, ok := u.Result.(*pbpeering.TrustBundleReadResponse) - if !ok { - return fmt.Errorf("invalid type for response: %T", u.Result) - } - peer := strings.TrimPrefix(u.CorrelationID, peerTrustBundleIDPrefix) - if resp.Bundle != nil { - snap.ConnectProxy.PeerTrustBundles[peer] = resp.Bundle - } - case u.CorrelationID == intentionsWatchID: resp, ok := u.Result.(*structs.IndexedIntentionMatches) if !ok { diff --git a/agent/proxycfg/data_sources.go b/agent/proxycfg/data_sources.go deleted file mode 100644 index 1f48c15d89c18..0000000000000 --- a/agent/proxycfg/data_sources.go +++ /dev/null @@ -1,187 +0,0 @@ -package proxycfg - -import ( - "context" - - cachetype "github.com/hashicorp/consul/agent/cache-types" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" -) - -// UpdateEvent contains new data for a resource we are subscribed to (e.g. an -// agent cache entry). -type UpdateEvent struct { - CorrelationID string - Result interface{} - Err error -} - -// DataSources contains the dependencies used to consume data used to configure -// proxies. -type DataSources struct { - // CARoots provides updates about the CA root certificates on a notification - // channel. - CARoots CARoots - - // CompiledDiscoveryChain provides updates about a service's discovery chain - // on a notification channel. - CompiledDiscoveryChain CompiledDiscoveryChain - - // ConfigEntry provides updates about a single config entry on a notification - // channel. - ConfigEntry ConfigEntry - - // ConfigEntryList provides updates about a list of config entries on a - // notification channel. - ConfigEntryList ConfigEntryList - - // Datacenters provides updates about federated datacenters on a notification - // channel. - Datacenters Datacenters - - // FederationStateListMeshGateways is the interface used to consume updates - // about mesh gateways from the federation state. - FederationStateListMeshGateways FederationStateListMeshGateways - - // GatewayServices provides updates about a gateway's upstream services on a - // notification channel. - GatewayServices GatewayServices - - // Health provides service health updates on a notification channel. - Health Health - - // HTTPChecks provides updates about a service's HTTP and gRPC checks on a - // notification channel. - HTTPChecks HTTPChecks - - // Intentions provides intention updates on a notification channel. - Intentions Intentions - - // IntentionUpstreams provides intention-inferred upstream updates on a - // notification channel. - IntentionUpstreams IntentionUpstreams - - // InternalServiceDump provides updates about a (gateway) service on a - // notification channel. - InternalServiceDump InternalServiceDump - - // LeafCertificate provides updates about the service's leaf certificate on a - // notification channel. - LeafCertificate LeafCertificate - - // PreparedQuery provides updates about the results of a prepared query. - PreparedQuery PreparedQuery - - // ResolvedServiceConfig provides updates about a service's resolved config. - ResolvedServiceConfig ResolvedServiceConfig - - // ServiceList provides updates about the list of all services in a datacenter - // on a notification channel. - ServiceList ServiceList - - // TrustBundle provides updates about the trust bundle for a single peer. - TrustBundle TrustBundle - - DataSourcesEnterprise -} - -// CARoots is the interface used to consume updates about the CA root -// certificates. -type CARoots interface { - Notify(ctx context.Context, req *structs.DCSpecificRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// CompiledDiscoveryChain is the interface used to consume updates about the -// compiled discovery chain for a service. -type CompiledDiscoveryChain interface { - Notify(ctx context.Context, req *structs.DiscoveryChainRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// ConfigEntry is the interface used to consume updates about a single config -// entry. -type ConfigEntry interface { - Notify(ctx context.Context, req *structs.ConfigEntryQuery, correlationID string, ch chan<- UpdateEvent) error -} - -// ConfigEntry is the interface used to consume updates about a list of config -// entries. -type ConfigEntryList interface { - Notify(ctx context.Context, req *structs.ConfigEntryQuery, correlationID string, ch chan<- UpdateEvent) error -} - -// Datacenters is the interface used to consume updates about federated -// datacenters. -type Datacenters interface { - Notify(ctx context.Context, req *structs.DatacentersRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// FederationStateListMeshGateways is the interface used to consume updates -// about mesh gateways from the federation state. -type FederationStateListMeshGateways interface { - Notify(ctx context.Context, req *structs.DCSpecificRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// GatewayServices is the interface used to consume updates about a gateway's -// upstream services. -type GatewayServices interface { - Notify(ctx context.Context, req *structs.ServiceSpecificRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// Health is the interface used to consume service health updates. -type Health interface { - Notify(ctx context.Context, req *structs.ServiceSpecificRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// HTTPChecks is the interface used to consume updates about a service's HTTP -// and gRPC-based checks (in order to determine which paths to expose through -// the proxy). -type HTTPChecks interface { - Notify(ctx context.Context, req *cachetype.ServiceHTTPChecksRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// Intentions is the interface used to consume intention updates. -type Intentions interface { - Notify(ctx context.Context, req *structs.IntentionQueryRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// IntentionUpstreams is the interface used to consume updates about upstreams -// inferred from service intentions. -type IntentionUpstreams interface { - Notify(ctx context.Context, req *structs.ServiceSpecificRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// InternalServiceDump is the interface used to consume updates about a (gateway) -// service via the internal ServiceDump RPC. -type InternalServiceDump interface { - Notify(ctx context.Context, req *structs.ServiceDumpRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// LeafCertificate is the interface used to consume updates about a service's -// leaf certificate. -type LeafCertificate interface { - Notify(ctx context.Context, req *cachetype.ConnectCALeafRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// PreparedQuery is the interface used to consume updates about the results of -// a prepared query. -type PreparedQuery interface { - Notify(ctx context.Context, req *structs.PreparedQueryExecuteRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// ResolvedServiceConfig is the interface used to consume updates about a -// service's resolved config. -type ResolvedServiceConfig interface { - Notify(ctx context.Context, req *structs.ServiceConfigRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// ServiceList is the interface used to consume updates about the list of -// all services in a datacenter. -type ServiceList interface { - Notify(ctx context.Context, req *structs.DCSpecificRequest, correlationID string, ch chan<- UpdateEvent) error -} - -// TrustBundle is the interface used to consume updates about a single -// peer's trust bundle. -type TrustBundle interface { - Notify(ctx context.Context, req *pbpeering.TrustBundleReadRequest, correlationID string, ch chan<- UpdateEvent) error -} diff --git a/agent/proxycfg/data_sources_oss.go b/agent/proxycfg/data_sources_oss.go deleted file mode 100644 index e5e23d17734fe..0000000000000 --- a/agent/proxycfg/data_sources_oss.go +++ /dev/null @@ -1,6 +0,0 @@ -//go:build !consulent -// +build !consulent - -package proxycfg - -type DataSourcesEnterprise struct{} diff --git a/agent/proxycfg/ingress_gateway.go b/agent/proxycfg/ingress_gateway.go index 3fb67ddabcaec..34566201bb2af 100644 --- a/agent/proxycfg/ingress_gateway.go +++ b/agent/proxycfg/ingress_gateway.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/structs" ) @@ -15,7 +16,7 @@ type handlerIngressGateway struct { func (s *handlerIngressGateway) initialize(ctx context.Context) (ConfigSnapshot, error) { snap := newConfigSnapshotFromServiceInstance(s.serviceInstance, s.stateConfig) // Watch for root changes - err := s.dataSources.CARoots.Notify(ctx, &structs.DCSpecificRequest{ + err := s.cache.Notify(ctx, cachetype.ConnectCARootName, &structs.DCSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Source: *s.source, @@ -25,7 +26,7 @@ func (s *handlerIngressGateway) initialize(ctx context.Context) (ConfigSnapshot, } // Get information about the entire service mesh. - err = s.dataSources.ConfigEntry.Notify(ctx, &structs.ConfigEntryQuery{ + err = s.cache.Notify(ctx, cachetype.ConfigEntryName, &structs.ConfigEntryQuery{ Kind: structs.MeshConfig, Name: structs.MeshConfigMesh, Datacenter: s.source.Datacenter, @@ -37,7 +38,7 @@ func (s *handlerIngressGateway) initialize(ctx context.Context) (ConfigSnapshot, } // Watch this ingress gateway's config entry - err = s.dataSources.ConfigEntry.Notify(ctx, &structs.ConfigEntryQuery{ + err = s.cache.Notify(ctx, cachetype.ConfigEntryName, &structs.ConfigEntryQuery{ Kind: structs.IngressGateway, Name: s.service, Datacenter: s.source.Datacenter, @@ -49,7 +50,7 @@ func (s *handlerIngressGateway) initialize(ctx context.Context) (ConfigSnapshot, } // Watch the ingress-gateway's list of upstreams - err = s.dataSources.GatewayServices.Notify(ctx, &structs.ServiceSpecificRequest{ + err = s.cache.Notify(ctx, cachetype.GatewayServicesName, &structs.ServiceSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, ServiceName: s.service, @@ -69,7 +70,7 @@ func (s *handlerIngressGateway) initialize(ctx context.Context) (ConfigSnapshot, return snap, nil } -func (s *handlerIngressGateway) handleUpdate(ctx context.Context, u UpdateEvent, snap *ConfigSnapshot) error { +func (s *handlerIngressGateway) handleUpdate(ctx context.Context, u cache.UpdateEvent, snap *ConfigSnapshot) error { if u.Err != nil { return fmt.Errorf("error filling agent cache: %v", u.Err) } @@ -120,7 +121,6 @@ func (s *handlerIngressGateway) handleUpdate(ctx context.Context, u UpdateEvent, uid := NewUpstreamID(&u) - // TODO(peering): pipe destination_peer here watchOpts := discoveryChainWatchOpts{ id: uid, name: u.DestinationName, @@ -195,7 +195,7 @@ func (s *handlerIngressGateway) watchIngressLeafCert(ctx context.Context, snap * snap.IngressGateway.LeafCertWatchCancel() } ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.LeafCertificate.Notify(ctx, &cachetype.ConnectCALeafRequest{ + err := s.cache.Notify(ctx, cachetype.ConnectCALeafName, &cachetype.ConnectCALeafRequest{ Datacenter: s.source.Datacenter, Token: s.token, Service: s.service, diff --git a/agent/proxycfg/manager.go b/agent/proxycfg/manager.go index 3de11b3f8aeb5..d5d102b1efd2e 100644 --- a/agent/proxycfg/manager.go +++ b/agent/proxycfg/manager.go @@ -6,50 +6,50 @@ import ( "github.com/hashicorp/go-hclog" + "github.com/hashicorp/consul/agent/cache" + "github.com/hashicorp/consul/agent/local" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/token" "github.com/hashicorp/consul/tlsutil" ) -// ProxyID is a handle on a proxy service instance being tracked by Manager. -type ProxyID struct { - structs.ServiceID +var ( + // ErrStopped is returned from Run if the manager instance has already been + // stopped. + ErrStopped = errors.New("manager stopped") - // NodeName identifies the node to which the proxy is registered. - NodeName string - - // Token is used to track watches on the same proxy with different ACL tokens - // separately, to prevent accidental security bugs. - // - // Note: this can be different to the ACL token used for authorization that is - // passed to Register (e.g. agent-local services are registered ahead-of-time - // with a token that may be different to the one presented in the xDS stream). - Token string -} - -// ProxySource identifies where a proxy service tracked by Manager came from, -// such as the agent's local state or the catalog. It's used to prevent sources -// from overwriting each other's registrations. -type ProxySource string + // ErrStarted is returned from Run if the manager instance has already run. + ErrStarted = errors.New("manager was already run") +) // CancelFunc is a type for a returned function that can be called to cancel a // watch. type CancelFunc func() -// Manager provides an API with which proxy services can be registered, and -// coordinates the fetching (and refreshing) of intentions, upstreams, discovery -// chain, certificates etc. -// -// Consumers such as the xDS server can then subscribe to receive snapshots of -// this data whenever it changes. +// Manager is a component that integrates into the agent and manages Connect +// proxy configuration state. This should not be confused with the deprecated +// "managed proxy" concept where the agent supervises the actual proxy process. +// proxycfg.Manager is oblivious to the distinction and manages state for any +// service registered with Kind == connect-proxy. // -// See package docs for more detail. +// The Manager ensures that any Connect proxy registered on the agent has all +// the state it needs cached locally via the agent cache. State includes +// certificates, intentions, and service discovery results for any declared +// upstreams. See package docs for more detail. type Manager struct { ManagerConfig - mu sync.Mutex - proxies map[ProxyID]*state - watchers map[ProxyID]map[uint64]chan *ConfigSnapshot - maxWatchID uint64 + // stateCh is notified for any service changes in local state. We only use + // this to trigger on _new_ service addition since it has no data and we don't + // want to maintain a full copy of the state in order to diff and figure out + // what changed. Luckily each service has it's own WatchCh so we can figure + // out changes and removals with those efficiently. + stateCh chan struct{} + + mu sync.Mutex + started bool + proxies map[structs.ServiceID]*state + watchers map[structs.ServiceID]map[uint64]chan *ConfigSnapshot } // ManagerConfig holds the required external dependencies for a Manager @@ -57,9 +57,13 @@ type Manager struct { // panic. The ManagerConfig is passed by value to NewManager so the passed value // can be mutated safely. type ManagerConfig struct { - // DataSources contains the dependencies used to consume data used to configure - // proxies. - DataSources DataSources + // Cache is the agent's cache instance that can be used to retrieve, store and + // monitor state for the proxies. + Cache *cache.Cache + // Health provides service health updates on a notification channel. + Health Health + // state is the agent's local state to be watched for new proxy registrations. + State *local.State // source describes the current agent's identity, it's used directly for // prepared query discovery but also indirectly as a way to pass current // Datacenter name into other request types that need it. This is sufficient @@ -70,6 +74,9 @@ type ManagerConfig struct { // logger is the agent's logger to be used for logging logs. Logger hclog.Logger TLSConfigurator *tlsutil.Configurator + // Tokens configured on the local agent. Used to look up the agent token if + // a service is registered without a token. + Tokens *token.Store // IntentionDefaultAllow is set by the agent so that we can pass this // information to proxies that need to make intention decisions on their @@ -77,50 +84,114 @@ type ManagerConfig struct { IntentionDefaultAllow bool } -// NewManager constructs a Manager. +// NewManager constructs a manager from the provided agent cache. func NewManager(cfg ManagerConfig) (*Manager, error) { - if cfg.Source == nil || cfg.Logger == nil { + if cfg.Cache == nil || cfg.State == nil || cfg.Source == nil || + cfg.Logger == nil { return nil, errors.New("all ManagerConfig fields must be provided") } m := &Manager{ ManagerConfig: cfg, - proxies: make(map[ProxyID]*state), - watchers: make(map[ProxyID]map[uint64]chan *ConfigSnapshot), + // Single item buffer is enough since there is no data transferred so this + // is "level triggering" and we can't miss actual data. + stateCh: make(chan struct{}, 1), + proxies: make(map[structs.ServiceID]*state), + watchers: make(map[structs.ServiceID]map[uint64]chan *ConfigSnapshot), } return m, nil } -// RegisteredProxies returns a list of the proxies tracked by Manager, filtered -// by source. -func (m *Manager) RegisteredProxies(source ProxySource) []ProxyID { +// Run is the long-running method that handles state syncing. It should be run +// in it's own goroutine and will continue until a fatal error is hit or Close +// is called. Run will return an error if it is called more than once, or called +// after Close. +func (m *Manager) Run() error { m.mu.Lock() - defer m.mu.Unlock() + alreadyStarted := m.started + m.started = true + stateCh := m.stateCh + m.mu.Unlock() + + // Protect against multiple Run calls. + if alreadyStarted { + return ErrStarted + } - proxies := make([]ProxyID, 0, len(m.proxies)) - for id, state := range m.proxies { - if state.source != source { - continue + // Protect against being run after Close. + if stateCh == nil { + return ErrStopped + } + + // Register for notifications about state changes + m.State.Notify(stateCh) + defer m.State.StopNotify(stateCh) + + for { + m.syncState(m.notifyBroadcast) + + // Wait for a state change + _, ok := <-stateCh + if !ok { + // Stopped + return nil } - proxies = append(proxies, id) } - return proxies } -// Register and start fetching resources for the given proxy service. If the -// given service was already registered by a different source (e.g. we began -// tracking it from the catalog, but then it was registered to the server -// agent locally) the service will be left as-is unless overwrite is true. -func (m *Manager) Register(id ProxyID, ns *structs.NodeService, source ProxySource, token string, overwrite bool) error { +// syncState is called whenever the local state notifies a change. It holds the +// lock while finding any new or updated proxies and removing deleted ones. +func (m *Manager) syncState(notifyBroadcast func(ch <-chan ConfigSnapshot)) { m.mu.Lock() defer m.mu.Unlock() - state, ok := m.proxies[id] - if ok { - if state.source != source && !overwrite { - // Registered by a different source, leave as-is. - return nil + // Traverse the local state and ensure all proxy services are registered + services := m.State.AllServices() + for sid, svc := range services { + if svc.Kind != structs.ServiceKindConnectProxy && + svc.Kind != structs.ServiceKindTerminatingGateway && + svc.Kind != structs.ServiceKindMeshGateway && + svc.Kind != structs.ServiceKindIngressGateway { + continue + } + // TODO(banks): need to work out when to default some stuff. For example + // Proxy.LocalServicePort is practically necessary for any sidecar and can + // default to the port of the sidecar service, but only if it's already + // registered and once we get past here, we don't have enough context to + // know that so we'd need to set it here if not during registration of the + // proxy service. Sidecar Service in the interim can do that, but we should + // validate more generally that that is always true. + err := m.ensureProxyServiceLocked(svc, notifyBroadcast) + if err != nil { + m.Logger.Error("failed to watch proxy service", + "service", sid.String(), + "error", err, + ) } + } + + // Now see if any proxies were removed + for proxyID := range m.proxies { + if _, ok := services[proxyID]; !ok { + // Remove them + m.removeProxyServiceLocked(proxyID) + } + } +} + +// ensureProxyServiceLocked adds or changes the proxy to our state. +func (m *Manager) ensureProxyServiceLocked(ns *structs.NodeService, notifyBroadcast func(ch <-chan ConfigSnapshot)) error { + sid := ns.CompoundServiceID() + // Retrieve the token used to register the service, or fallback to the + // default user token. This token is expected to match the token used in + // the xDS request for this data. + token := m.State.ServiceToken(sid) + if token == "" { + token = m.Tokens.UserToken() + } + + state, ok := m.proxies[sid] + if ok { if !state.Changed(ns, token) { // No change return nil @@ -132,8 +203,9 @@ func (m *Manager) Register(id ProxyID, ns *structs.NodeService, source ProxySour // TODO: move to a function that translates ManagerConfig->stateConfig stateConfig := stateConfig{ - logger: m.Logger.With("service_id", id.String()), - dataSources: m.DataSources, + logger: m.Logger.With("service_id", sid.String()), + cache: m.Cache, + health: m.Health, source: m.Source, dnsConfig: m.DNSConfig, intentionDefaultAllow: m.IntentionDefaultAllow, @@ -143,7 +215,7 @@ func (m *Manager) Register(id ProxyID, ns *structs.NodeService, source ProxySour } var err error - state, err = newState(id, ns, source, token, stateConfig) + state, err = newState(ns, token, stateConfig) if err != nil { return err } @@ -152,32 +224,33 @@ func (m *Manager) Register(id ProxyID, ns *structs.NodeService, source ProxySour if err != nil { return err } - m.proxies[id] = state + m.proxies[sid] = state // Start a goroutine that will wait for changes and broadcast them to watchers. - go m.notifyBroadcast(ch) + go notifyBroadcast(ch) + return nil } -// Deregister the given proxy service, but only if it was registered by the same -// source. -func (m *Manager) Deregister(id ProxyID, source ProxySource) { - m.mu.Lock() - defer m.mu.Unlock() - - state, ok := m.proxies[id] - if !ok { - return +func (m *Manager) notifyBroadcast(ch <-chan ConfigSnapshot) { + // Run until ch is closed + for snap := range ch { + m.notify(&snap) } +} - if state.source != source { +// removeProxyService is called when a service deregisters and frees all +// resources for that service. +func (m *Manager) removeProxyServiceLocked(proxyID structs.ServiceID) { + state, ok := m.proxies[proxyID] + if !ok { return } - // Closing state will let the goroutine we started in Register finish since + // Closing state will let the goroutine we started in Ensure finish since // watch chan is closed. state.Close() - delete(m.proxies, id) + delete(m.proxies, proxyID) // We intentionally leave potential watchers hanging here - there is no new // config for them and closing their channels might be indistinguishable from @@ -186,13 +259,6 @@ func (m *Manager) Deregister(id ProxyID, source ProxySource) { // cleaned up naturally. } -func (m *Manager) notifyBroadcast(ch <-chan ConfigSnapshot) { - // Run until ch is closed - for snap := range ch { - m.notify(&snap) - } -} - func (m *Manager) notify(snap *ConfigSnapshot) { m.mu.Lock() defer m.mu.Unlock() @@ -248,24 +314,23 @@ OUTER: // will not fail, but no updates will be delivered until the proxy is // registered. If there is already a valid snapshot in memory, it will be // delivered immediately. -func (m *Manager) Watch(id ProxyID) (<-chan *ConfigSnapshot, CancelFunc) { +func (m *Manager) Watch(proxyID structs.ServiceID) (<-chan *ConfigSnapshot, CancelFunc) { m.mu.Lock() defer m.mu.Unlock() // This buffering is crucial otherwise we'd block immediately trying to // deliver the current snapshot below if we already have one. ch := make(chan *ConfigSnapshot, 1) - watchers, ok := m.watchers[id] + watchers, ok := m.watchers[proxyID] if !ok { watchers = make(map[uint64]chan *ConfigSnapshot) } - watchID := m.maxWatchID - m.maxWatchID++ - watchers[watchID] = ch - m.watchers[id] = watchers + idx := uint64(len(watchers)) + watchers[idx] = ch + m.watchers[proxyID] = watchers // Deliver the current snapshot immediately if there is one ready - if state, ok := m.proxies[id]; ok { + if state, ok := m.proxies[proxyID]; ok { if snap := state.CurrentSnapshot(); snap != nil { // We rely on ch being buffered above and that it's not been passed // anywhere so we must be the only writer so this will never block and @@ -277,16 +342,16 @@ func (m *Manager) Watch(id ProxyID) (<-chan *ConfigSnapshot, CancelFunc) { return ch, func() { m.mu.Lock() defer m.mu.Unlock() - m.closeWatchLocked(id, watchID) + m.closeWatchLocked(proxyID, idx) } } // closeWatchLocked cleans up state related to a single watcher. It assumes the // lock is held. -func (m *Manager) closeWatchLocked(proxyID ProxyID, watchID uint64) { +func (m *Manager) closeWatchLocked(proxyID structs.ServiceID, watchIdx uint64) { if watchers, ok := m.watchers[proxyID]; ok { - if ch, ok := watchers[watchID]; ok { - delete(watchers, watchID) + if ch, ok := watchers[watchIdx]; ok { + delete(watchers, watchIdx) close(ch) if len(watchers) == 0 { delete(m.watchers, proxyID) @@ -300,10 +365,15 @@ func (m *Manager) Close() error { m.mu.Lock() defer m.mu.Unlock() + if m.stateCh != nil { + close(m.stateCh) + m.stateCh = nil + } + // Close all current watchers first for proxyID, watchers := range m.watchers { - for watchID := range watchers { - m.closeWatchLocked(proxyID, watchID) + for idx := range watchers { + m.closeWatchLocked(proxyID, idx) } } diff --git a/agent/proxycfg/manager_test.go b/agent/proxycfg/manager_test.go index 5d511c59bba06..9b6289703311a 100644 --- a/agent/proxycfg/manager_test.go +++ b/agent/proxycfg/manager_test.go @@ -2,24 +2,27 @@ package proxycfg import ( "context" + "path" "testing" "time" - "github.com/hashicorp/consul/proto/pbpeering" "github.com/mitchellh/copystructure" "github.com/stretchr/testify/require" + "golang.org/x/time/rate" "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/consul/discoverychain" + "github.com/hashicorp/consul/agent/local" + "github.com/hashicorp/consul/agent/rpcclient/health" "github.com/hashicorp/consul/agent/structs" + "github.com/hashicorp/consul/agent/token" "github.com/hashicorp/consul/api" "github.com/hashicorp/consul/sdk/testutil" ) -const testSource ProxySource = "test" - func mustCopyProxyConfig(t *testing.T, ns *structs.NodeService) structs.ConnectProxyConfig { cfg, err := copyProxyConfig(ns) require.NoError(t, err) @@ -28,22 +31,25 @@ func mustCopyProxyConfig(t *testing.T, ns *structs.NodeService) structs.ConnectP // assertLastReqArgs verifies that each request type had the correct source // parameters (e.g. Datacenter name) and token. -func assertLastReqArgs(t *testing.T, dataSources *TestDataSources, token string, source *structs.QuerySource) { +func assertLastReqArgs(t *testing.T, types *TestCacheTypes, token string, source *structs.QuerySource) { t.Helper() // Roots needs correct DC and token - rootReq := dataSources.CARoots.LastReq() - require.Equal(t, token, rootReq.Token) - require.Equal(t, source.Datacenter, rootReq.Datacenter) + rootReq := types.roots.lastReq.Load() + require.IsType(t, rootReq, &structs.DCSpecificRequest{}) + require.Equal(t, token, rootReq.(*structs.DCSpecificRequest).Token) + require.Equal(t, source.Datacenter, rootReq.(*structs.DCSpecificRequest).Datacenter) // Leaf needs correct DC and token - leafReq := dataSources.LeafCertificate.LastReq() - require.Equal(t, token, leafReq.Token) - require.Equal(t, source.Datacenter, leafReq.Datacenter) + leafReq := types.leaf.lastReq.Load() + require.IsType(t, leafReq, &cachetype.ConnectCALeafRequest{}) + require.Equal(t, token, leafReq.(*cachetype.ConnectCALeafRequest).Token) + require.Equal(t, source.Datacenter, leafReq.(*cachetype.ConnectCALeafRequest).Datacenter) // Intentions needs correct DC and token - intReq := dataSources.Intentions.LastReq() - require.Equal(t, token, intReq.Token) - require.Equal(t, source.Datacenter, intReq.Datacenter) + intReq := types.intentions.lastReq.Load() + require.IsType(t, intReq, &structs.IntentionQueryRequest{}) + require.Equal(t, token, intReq.(*structs.IntentionQueryRequest).Token) + require.Equal(t, source.Datacenter, intReq.(*structs.IntentionQueryRequest).Datacenter) } func TestManager_BasicLifecycle(t *testing.T) { @@ -119,17 +125,16 @@ func TestManager_BasicLifecycle(t *testing.T) { }, } - rootsReq := &structs.DCSpecificRequest{ + rootsCacheKey := testGenCacheKey(&structs.DCSpecificRequest{ Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: "my-token"}, - } - leafReq := &cachetype.ConnectCALeafRequest{ + }) + leafCacheKey := testGenCacheKey(&cachetype.ConnectCALeafRequest{ Datacenter: "dc1", Token: "my-token", Service: "web", - } - - intentionReq := &structs.IntentionQueryRequest{ + }) + intentionCacheKey := testGenCacheKey(&structs.IntentionQueryRequest{ Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: "my-token"}, Match: &structs.IntentionQueryMatch{ @@ -142,17 +147,16 @@ func TestManager_BasicLifecycle(t *testing.T) { }, }, }, - } - - meshConfigReq := &structs.ConfigEntryQuery{ + }) + meshCacheKey := testGenCacheKey(&structs.ConfigEntryQuery{ Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: "my-token"}, Kind: structs.MeshConfig, Name: structs.MeshConfigMesh, EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - } + }) - dbChainReq := &structs.DiscoveryChainRequest{ + dbChainCacheKey := testGenCacheKey(&structs.DiscoveryChainRequest{ Name: "db", EvaluateInDatacenter: "dc1", EvaluateInNamespace: "default", @@ -162,16 +166,16 @@ func TestManager_BasicLifecycle(t *testing.T) { OverrideConnectTimeout: 1 * time.Second, Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: "my-token"}, - } + }) - dbHealthReq := &structs.ServiceSpecificRequest{ + dbHealthCacheKey := testGenCacheKey(&structs.ServiceSpecificRequest{ Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: "my-token", Filter: ""}, ServiceName: "db", Connect: true, EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - } - db_v1_HealthReq := &structs.ServiceSpecificRequest{ + }) + db_v1_HealthCacheKey := testGenCacheKey(&structs.ServiceSpecificRequest{ Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: "my-token", Filter: "Service.Meta.version == v1", @@ -179,8 +183,8 @@ func TestManager_BasicLifecycle(t *testing.T) { ServiceName: "db", Connect: true, EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - } - db_v2_HealthReq := &structs.ServiceSpecificRequest{ + }) + db_v2_HealthCacheKey := testGenCacheKey(&structs.ServiceSpecificRequest{ Datacenter: "dc1", QueryOptions: structs.QueryOptions{Token: "my-token", Filter: "Service.Meta.version == v2", @@ -188,7 +192,7 @@ func TestManager_BasicLifecycle(t *testing.T) { ServiceName: "db", Connect: true, EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), - } + }) db := structs.NewServiceName("db", nil) dbUID := NewUpstreamIDFromServiceName(db) @@ -197,19 +201,19 @@ func TestManager_BasicLifecycle(t *testing.T) { tests := []*testcase_BasicLifecycle{ { name: "simple-default-resolver", - setup: func(t *testing.T, dataSources *TestDataSources) { + setup: func(t *testing.T, types *TestCacheTypes) { // Note that we deliberately leave the 'geo-cache' prepared query to time out - dataSources.Health.Set(dbHealthReq, &structs.IndexedCheckServiceNodes{ + types.health.Set(dbHealthCacheKey, &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodes(t, db.Name), }) - dataSources.CompiledDiscoveryChain.Set(dbChainReq, &structs.DiscoveryChainResponse{ + types.compiledChain.Set(dbChainCacheKey, &structs.DiscoveryChainResponse{ Chain: dbDefaultChain(), }) }, expectSnap: &ConfigSnapshot{ Kind: structs.ServiceKindConnectProxy, Service: webProxy.Service, - ProxyID: ProxyID{ServiceID: webProxy.CompoundServiceID()}, + ProxyID: webProxy.CompoundServiceID(), Address: webProxy.Address, Port: webProxy.Port, Proxy: mustCopyProxyConfig(t, webProxy), @@ -239,10 +243,8 @@ func TestManager_BasicLifecycle(t *testing.T) { NewUpstreamID(&upstreams[1]): &upstreams[1], NewUpstreamID(&upstreams[2]): &upstreams[2], }, - PassthroughUpstreams: map[UpstreamID]map[string]map[string]struct{}{}, - PassthroughIndices: map[string]indexedTarget{}, - WatchedPeerTrustBundles: map[string]context.CancelFunc{}, - PeerTrustBundles: map[string]*pbpeering.PeeringTrustBundle{}, + PassthroughUpstreams: map[UpstreamID]map[string]map[string]struct{}{}, + PassthroughIndices: map[string]indexedTarget{}, }, PreparedQueryEndpoints: map[UpstreamID]structs.CheckServiceNodes{}, WatchedServiceChecks: map[structs.ServiceID][]structs.CheckType{}, @@ -255,22 +257,22 @@ func TestManager_BasicLifecycle(t *testing.T) { }, { name: "chain-resolver-with-version-split", - setup: func(t *testing.T, dataSources *TestDataSources) { + setup: func(t *testing.T, types *TestCacheTypes) { // Note that we deliberately leave the 'geo-cache' prepared query to time out - dataSources.Health.Set(db_v1_HealthReq, &structs.IndexedCheckServiceNodes{ + types.health.Set(db_v1_HealthCacheKey, &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodes(t, db.Name), }) - dataSources.Health.Set(db_v2_HealthReq, &structs.IndexedCheckServiceNodes{ + types.health.Set(db_v2_HealthCacheKey, &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesAlternate(t), }) - dataSources.CompiledDiscoveryChain.Set(dbChainReq, &structs.DiscoveryChainResponse{ + types.compiledChain.Set(dbChainCacheKey, &structs.DiscoveryChainResponse{ Chain: dbSplitChain(), }) }, expectSnap: &ConfigSnapshot{ Kind: structs.ServiceKindConnectProxy, Service: webProxy.Service, - ProxyID: ProxyID{ServiceID: webProxy.CompoundServiceID()}, + ProxyID: webProxy.CompoundServiceID(), Address: webProxy.Address, Port: webProxy.Port, Proxy: mustCopyProxyConfig(t, webProxy), @@ -301,10 +303,8 @@ func TestManager_BasicLifecycle(t *testing.T) { NewUpstreamID(&upstreams[1]): &upstreams[1], NewUpstreamID(&upstreams[2]): &upstreams[2], }, - PassthroughUpstreams: map[UpstreamID]map[string]map[string]struct{}{}, - PassthroughIndices: map[string]indexedTarget{}, - WatchedPeerTrustBundles: map[string]context.CancelFunc{}, - PeerTrustBundles: map[string]*pbpeering.PeeringTrustBundle{}, + PassthroughUpstreams: map[UpstreamID]map[string]map[string]struct{}{}, + PassthroughIndices: map[string]indexedTarget{}, }, PreparedQueryEndpoints: map[UpstreamID]structs.CheckServiceNodes{}, WatchedServiceChecks: map[structs.ServiceID][]structs.CheckType{}, @@ -322,13 +322,15 @@ func TestManager_BasicLifecycle(t *testing.T) { require.NotNil(t, tt.setup) require.NotNil(t, tt.expectSnap) + // Use a mocked cache to make life simpler + types := NewTestCacheTypes(t) + // Setup initial values - dataSources := NewTestDataSources() - dataSources.LeafCertificate.Set(leafReq, leaf) - dataSources.CARoots.Set(rootsReq, roots) - dataSources.Intentions.Set(intentionReq, TestIntentions()) - dataSources.ConfigEntry.Set(meshConfigReq, &structs.ConfigEntryResponse{Entry: nil}) - tt.setup(t, dataSources) + types.roots.Set(rootsCacheKey, roots) + types.leaf.Set(leafCacheKey, leaf) + types.intentions.Set(intentionCacheKey, TestIntentions()) + types.configEntry.Set(meshCacheKey, &structs.ConfigEntryResponse{Entry: nil}) + tt.setup(t, types) expectSnapCopy, err := copystructure.Copy(tt.expectSnap) require.NoError(t, err) @@ -336,11 +338,11 @@ func TestManager_BasicLifecycle(t *testing.T) { webProxyCopy, err := copystructure.Copy(webProxy) require.NoError(t, err) - testManager_BasicLifecycle(t, - dataSources, - rootsReq, leafReq, + testManager_BasicLifecycle(t, types, + rootsCacheKey, leafCacheKey, roots, webProxyCopy.(*structs.NodeService), + local.Config{}, expectSnapCopy.(*ConfigSnapshot), ) }) @@ -349,43 +351,53 @@ func TestManager_BasicLifecycle(t *testing.T) { type testcase_BasicLifecycle struct { name string - setup func(t *testing.T, dataSources *TestDataSources) + setup func(t *testing.T, types *TestCacheTypes) webProxy *structs.NodeService expectSnap *ConfigSnapshot } func testManager_BasicLifecycle( t *testing.T, - dataSources *TestDataSources, - rootsReq *structs.DCSpecificRequest, - leafReq *cachetype.ConnectCALeafRequest, + types *TestCacheTypes, + rootsCacheKey, leafCacheKey string, roots *structs.IndexedCARoots, webProxy *structs.NodeService, + agentConfig local.Config, expectSnap *ConfigSnapshot, ) { + c := TestCacheWithTypes(t, types) + logger := testutil.Logger(t) + state := local.NewState(agentConfig, logger, &token.Store{}) source := &structs.QuerySource{Datacenter: "dc1"} + // Stub state syncing + state.TriggerSyncChanges = func() {} + // Create manager m, err := NewManager(ManagerConfig{ - Source: source, - Logger: logger, - DataSources: dataSources.ToDataSources(), + Cache: c, + Health: &health.Client{Cache: c, CacheName: cachetype.HealthServicesName}, + State: state, + Source: source, + Logger: logger, }) require.NoError(t, err) - webProxyID := ProxyID{ - ServiceID: webProxy.CompoundServiceID(), - } + // And run it + go func() { + err := m.Run() + require.NoError(t, err) + }() // BEFORE we register, we should be able to get a watch channel - wCh, cancel := m.Watch(webProxyID) + wCh, cancel := m.Watch(webProxy.CompoundServiceID()) defer cancel() // And it should block with nothing sent on it yet assertWatchChanBlocks(t, wCh) - require.NoError(t, m.Register(webProxyID, webProxy, testSource, "my-token", false)) + require.NoError(t, state.AddService(webProxy, "my-token")) // We should see the initial config delivered but not until after the // coalesce timeout @@ -393,35 +405,35 @@ func testManager_BasicLifecycle( assertWatchChanRecvs(t, wCh, expectSnap) require.True(t, time.Since(start) >= coalesceTimeout) - assertLastReqArgs(t, dataSources, "my-token", source) + assertLastReqArgs(t, types, "my-token", source) // Update NodeConfig webProxy.Port = 7777 - require.NoError(t, m.Register(webProxyID, webProxy, testSource, "my-token", false)) + require.NoError(t, state.AddService(webProxy, "my-token")) expectSnap.Port = 7777 assertWatchChanRecvs(t, wCh, expectSnap) // Register a second watcher - wCh2, cancel2 := m.Watch(webProxyID) + wCh2, cancel2 := m.Watch(webProxy.CompoundServiceID()) defer cancel2() // New watcher should immediately receive the current state assertWatchChanRecvs(t, wCh2, expectSnap) // Change token - require.NoError(t, m.Register(webProxyID, webProxy, testSource, "other-token", false)) + require.NoError(t, state.AddService(webProxy, "other-token")) assertWatchChanRecvs(t, wCh, expectSnap) assertWatchChanRecvs(t, wCh2, expectSnap) // This is actually sort of timing dependent - the cache background fetcher // will still be fetching with the old token, but we rely on the fact that our // mock type will have been blocked on those for a while. - assertLastReqArgs(t, dataSources, "other-token", source) + assertLastReqArgs(t, types, "other-token", source) // Update roots newRoots, newLeaf := TestCerts(t) newRoots.Roots = append(newRoots.Roots, roots.Roots...) - dataSources.CARoots.Set(rootsReq, newRoots) + types.roots.Set(rootsCacheKey, newRoots) // Expect new roots in snapshot expectSnap.Roots = newRoots @@ -429,7 +441,7 @@ func testManager_BasicLifecycle( assertWatchChanRecvs(t, wCh2, expectSnap) // Update leaf - dataSources.LeafCertificate.Set(leafReq, newLeaf) + types.leaf.Set(leafCacheKey, newLeaf) // Expect new roots in snapshot expectSnap.ConnectProxy.Leaf = newLeaf @@ -437,7 +449,7 @@ func testManager_BasicLifecycle( assertWatchChanRecvs(t, wCh2, expectSnap) // Remove the proxy - m.Deregister(webProxyID, testSource) + state.RemoveService(webProxy.CompoundServiceID()) // Chan should NOT close assertWatchChanBlocks(t, wCh) @@ -445,7 +457,7 @@ func testManager_BasicLifecycle( // Re-add the proxy with another new port webProxy.Port = 3333 - require.NoError(t, m.Register(webProxyID, webProxy, testSource, "other-token", false)) + require.NoError(t, state.AddService(webProxy, "other-token")) // Same watch chan should be notified again expectSnap.Port = 3333 @@ -497,6 +509,8 @@ func TestManager_deliverLatest(t *testing.T) { // None of these need to do anything to test this method just be valid logger := testutil.Logger(t) cfg := ManagerConfig{ + Cache: cache.New(cache.Options{EntryFetchRate: rate.Inf, EntryFetchMaxBurst: 2}), + State: local.NewState(local.Config{}, logger, &token.Store{}), Source: &structs.QuerySource{ Node: "node1", Datacenter: "dc1", @@ -508,11 +522,11 @@ func TestManager_deliverLatest(t *testing.T) { require.NoError(t, err) snap1 := &ConfigSnapshot{ - ProxyID: ProxyID{ServiceID: structs.NewServiceID("test-proxy", nil)}, + ProxyID: structs.NewServiceID("test-proxy", nil), Port: 1111, } snap2 := &ConfigSnapshot{ - ProxyID: ProxyID{ServiceID: structs.NewServiceID("test-proxy", nil)}, + ProxyID: structs.NewServiceID("test-proxy", nil), Port: 2222, } @@ -551,14 +565,28 @@ func TestManager_deliverLatest(t *testing.T) { require.Equal(t, snap2, <-ch5) } -func TestManager_SyncState_No_Notify(t *testing.T) { - dataSources := NewTestDataSources() +func testGenCacheKey(req cache.Request) string { + info := req.CacheInfo() + return path.Join(info.Key, info.Datacenter) +} + +func TestManager_SyncState_DefaultToken(t *testing.T) { + types := NewTestCacheTypes(t) + c := TestCacheWithTypes(t, types) logger := testutil.Logger(t) + tokens := new(token.Store) + tokens.UpdateUserToken("default-token", token.TokenSourceConfig) + + state := local.NewState(local.Config{}, logger, tokens) + state.TriggerSyncChanges = func() {} m, err := NewManager(ManagerConfig{ - Source: &structs.QuerySource{Datacenter: "dc1"}, - Logger: logger, - DataSources: dataSources.ToDataSources(), + Cache: c, + Health: &health.Client{Cache: c, CacheName: cachetype.HealthServicesName}, + State: state, + Tokens: tokens, + Source: &structs.QuerySource{Datacenter: "dc1"}, + Logger: logger, }) require.NoError(t, err) defer m.Close() @@ -580,21 +608,72 @@ func TestManager_SyncState_No_Notify(t *testing.T) { }, } - proxyID := ProxyID{ - ServiceID: srv.CompoundServiceID(), + err = state.AddServiceWithChecks(srv, nil, "") + require.NoError(t, err) + m.syncState(m.notifyBroadcast) + + require.Equal(t, "default-token", m.proxies[srv.CompoundServiceID()].serviceInstance.token) +} + +func TestManager_SyncState_No_Notify(t *testing.T) { + types := NewTestCacheTypes(t) + c := TestCacheWithTypes(t, types) + logger := testutil.Logger(t) + tokens := new(token.Store) + tokens.UpdateUserToken("default-token", token.TokenSourceConfig) + + state := local.NewState(local.Config{}, logger, tokens) + state.TriggerSyncChanges = func() {} + + m, err := NewManager(ManagerConfig{ + Cache: c, + Health: &health.Client{Cache: c, CacheName: cachetype.HealthServicesName}, + State: state, + Tokens: tokens, + Source: &structs.QuerySource{Datacenter: "dc1"}, + Logger: logger, + }) + require.NoError(t, err) + defer m.Close() + + srv := &structs.NodeService{ + Kind: structs.ServiceKindConnectProxy, + ID: "web-sidecar-proxy", + Service: "web-sidecar-proxy", + Port: 9999, + Meta: map[string]string{}, + Proxy: structs.ConnectProxyConfig{ + DestinationServiceID: "web", + DestinationServiceName: "web", + LocalServiceAddress: "127.0.0.1", + LocalServicePort: 8080, + Config: map[string]interface{}{ + "foo": "bar", + }, + }, } - require.NoError(t, m.Register(proxyID, srv, testSource, "", false)) + err = state.AddServiceWithChecks(srv, nil, "") + require.NoError(t, err) + + readEvent := make(chan bool, 1) + snapSent := make(chan bool, 1) - watchCh, cancelWatch := m.Watch(proxyID) - t.Cleanup(cancelWatch) + m.syncState(func(ch <-chan ConfigSnapshot) { + for { + <-readEvent + snap := <-ch + m.notify(&snap) + snapSent <- true + } + }) // Get the relevant notification Channel, should only have 1 - notifyCH := m.proxies[proxyID].ch + notifyCH := m.proxies[srv.CompoundServiceID()].ch // update the leaf certs roots, issuedCert := TestCerts(t) - notifyCH <- UpdateEvent{ + notifyCH <- cache.UpdateEvent{ CorrelationID: leafWatchID, Result: issuedCert, Err: nil, @@ -602,14 +681,14 @@ func TestManager_SyncState_No_Notify(t *testing.T) { // at this point the snapshot should not be valid and not be sent after := time.After(200 * time.Millisecond) select { - case <-watchCh: + case <-snapSent: t.Fatal("snap should not be valid") case <-after: } // update the root certs - notifyCH <- UpdateEvent{ + notifyCH <- cache.UpdateEvent{ CorrelationID: rootsWatchID, Result: roots, Err: nil, @@ -618,14 +697,14 @@ func TestManager_SyncState_No_Notify(t *testing.T) { // at this point the snapshot should not be valid and not be sent after = time.After(200 * time.Millisecond) select { - case <-watchCh: + case <-snapSent: t.Fatal("snap should not be valid") case <-after: } // update the mesh config entry - notifyCH <- UpdateEvent{ + notifyCH <- cache.UpdateEvent{ CorrelationID: meshConfigEntryID, Result: &structs.ConfigEntryResponse{}, Err: nil, @@ -634,14 +713,17 @@ func TestManager_SyncState_No_Notify(t *testing.T) { // at this point the snapshot should not be valid and not be sent after = time.After(200 * time.Millisecond) select { - case <-watchCh: + case <-snapSent: t.Fatal("snap should not be valid") case <-after: } + // prepare to read a snapshot update as the next update should make the snapshot valid + readEvent <- true + // update the intentions - notifyCH <- UpdateEvent{ + notifyCH <- cache.UpdateEvent{ CorrelationID: intentionsWatchID, Result: &structs.IndexedIntentionMatches{}, Err: nil, @@ -650,9 +732,40 @@ func TestManager_SyncState_No_Notify(t *testing.T) { // at this point we have a valid snapshot after = time.After(500 * time.Millisecond) select { - case <-watchCh: + case <-snapSent: case <-after: t.Fatal("snap should be valid") } + + // send two snapshots back to back without reading them to overflow the snapshot channel and get to the default use case + for i := 0; i < 2; i++ { + time.Sleep(250 * time.Millisecond) + notifyCH <- cache.UpdateEvent{ + CorrelationID: leafWatchID, + Result: issuedCert, + Err: nil, + } + } + + // make sure that we are not receiving any snapshot and wait for the snapshots to be processed + after = time.After(500 * time.Millisecond) + select { + case <-snapSent: + t.Fatal("snap should not be sent") + case <-after: + } + + // now make sure that both snapshots got propagated + for i := 0; i < 2; i++ { + + readEvent <- true + after = time.After(500 * time.Millisecond) + select { + case <-snapSent: + case <-after: + t.Fatal("snap should be valid") + + } + } } diff --git a/agent/proxycfg/mesh_gateway.go b/agent/proxycfg/mesh_gateway.go index 45b80b55243b7..3bcce18e7ad37 100644 --- a/agent/proxycfg/mesh_gateway.go +++ b/agent/proxycfg/mesh_gateway.go @@ -6,6 +6,8 @@ import ( "strings" "time" + "github.com/hashicorp/consul/agent/cache" + cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/logging" ) @@ -18,7 +20,7 @@ type handlerMeshGateway struct { func (s *handlerMeshGateway) initialize(ctx context.Context) (ConfigSnapshot, error) { snap := newConfigSnapshotFromServiceInstance(s.serviceInstance, s.stateConfig) // Watch for root changes - err := s.dataSources.CARoots.Notify(ctx, &structs.DCSpecificRequest{ + err := s.cache.Notify(ctx, cachetype.ConnectCARootName, &structs.DCSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Source: *s.source, @@ -33,7 +35,7 @@ func (s *handlerMeshGateway) initialize(ctx context.Context) (ConfigSnapshot, er // Eventually we will have to watch connect enabled instances for each service as well as the // destination services themselves but those notifications will be setup later. // We cannot setup those watches until we know what the services are. - err = s.dataSources.ServiceList.Notify(ctx, &structs.DCSpecificRequest{ + err = s.cache.Notify(ctx, cachetype.CatalogServiceListName, &structs.DCSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Source: *s.source, @@ -45,7 +47,7 @@ func (s *handlerMeshGateway) initialize(ctx context.Context) (ConfigSnapshot, er } // Watch service-resolvers so we can setup service subset clusters - err = s.dataSources.ConfigEntryList.Notify(ctx, &structs.ConfigEntryQuery{ + err = s.cache.Notify(ctx, cachetype.ConfigEntriesName, &structs.ConfigEntryQuery{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Kind: structs.ServiceResolver, @@ -84,7 +86,7 @@ func (s *handlerMeshGateway) initializeCrossDCWatches(ctx context.Context) error // Conveniently we can just use this service meta attribute in one // place here to set the machinery in motion and leave the conditional // behavior out of the rest of the package. - err := s.dataSources.FederationStateListMeshGateways.Notify(ctx, &structs.DCSpecificRequest{ + err := s.cache.Notify(ctx, cachetype.FederationStateListMeshGatewaysName, &structs.DCSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Source: *s.source, @@ -93,7 +95,7 @@ func (s *handlerMeshGateway) initializeCrossDCWatches(ctx context.Context) error return err } - err = s.dataSources.Health.Notify(ctx, &structs.ServiceSpecificRequest{ + err = s.health.Notify(ctx, structs.ServiceSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, ServiceName: structs.ConsulServiceName, @@ -103,7 +105,7 @@ func (s *handlerMeshGateway) initializeCrossDCWatches(ctx context.Context) error } } - err := s.dataSources.Datacenters.Notify(ctx, &structs.DatacentersRequest{ + err := s.cache.Notify(ctx, cachetype.CatalogDatacentersName, &structs.DatacentersRequest{ QueryOptions: structs.QueryOptions{Token: s.token, MaxAge: 30 * time.Second}, }, datacentersWatchID, s.ch) if err != nil { @@ -117,7 +119,7 @@ func (s *handlerMeshGateway) initializeCrossDCWatches(ctx context.Context) error return nil } -func (s *handlerMeshGateway) handleUpdate(ctx context.Context, u UpdateEvent, snap *ConfigSnapshot) error { +func (s *handlerMeshGateway) handleUpdate(ctx context.Context, u cache.UpdateEvent, snap *ConfigSnapshot) error { if u.Err != nil { return fmt.Errorf("error filling agent cache: %v", u.Err) } @@ -167,7 +169,7 @@ func (s *handlerMeshGateway) handleUpdate(ctx context.Context, u UpdateEvent, sn if _, ok := snap.MeshGateway.WatchedServices[svc]; !ok { ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.Health.Notify(ctx, &structs.ServiceSpecificRequest{ + err := s.health.Notify(ctx, structs.ServiceSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, ServiceName: svc.Name, @@ -219,7 +221,7 @@ func (s *handlerMeshGateway) handleUpdate(ctx context.Context, u UpdateEvent, sn if _, ok := snap.MeshGateway.WatchedGateways[gk.String()]; !ok { ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.InternalServiceDump.Notify(ctx, &structs.ServiceDumpRequest{ + err := s.cache.Notify(ctx, cachetype.InternalServiceDumpName, &structs.ServiceDumpRequest{ Datacenter: dc, QueryOptions: structs.QueryOptions{Token: s.token}, ServiceKind: structs.ServiceKindMeshGateway, diff --git a/agent/proxycfg/mesh_gateway_oss.go b/agent/proxycfg/mesh_gateway_oss.go index 143eff76fe263..b32884452eed4 100644 --- a/agent/proxycfg/mesh_gateway_oss.go +++ b/agent/proxycfg/mesh_gateway_oss.go @@ -7,12 +7,14 @@ import ( "context" "github.com/hashicorp/go-hclog" + + "github.com/hashicorp/consul/agent/cache" ) func (s *handlerMeshGateway) initializeEntWatches(_ context.Context) error { return nil } -func (s *handlerMeshGateway) handleEntUpdate(_ hclog.Logger, _ context.Context, _ UpdateEvent, _ *ConfigSnapshot) error { +func (s *handlerMeshGateway) handleEntUpdate(_ hclog.Logger, _ context.Context, _ cache.UpdateEvent, _ *ConfigSnapshot) error { return nil } diff --git a/agent/proxycfg/naming.go b/agent/proxycfg/naming.go index 7b80d49a9dfa5..e222c8fe3c8c5 100644 --- a/agent/proxycfg/naming.go +++ b/agent/proxycfg/naming.go @@ -11,9 +11,6 @@ type UpstreamID struct { Type string Name string Datacenter string - // If Peer is not empty, Namespace refers to the remote - // peer namespace and Partition refers to the local partition - Peer string acl.EnterpriseMeta } @@ -26,13 +23,11 @@ func NewUpstreamID(u *structs.Upstream) UpstreamID { u.DestinationPartition, u.DestinationNamespace, ), - Peer: u.DestinationPeer, } id.normalize() return id } -// TODO(peering): confirm we don't need peername here func NewUpstreamIDFromServiceName(sn structs.ServiceName) UpstreamID { id := UpstreamID{ Name: sn.Name, @@ -42,7 +37,6 @@ func NewUpstreamIDFromServiceName(sn structs.ServiceName) UpstreamID { return id } -// TODO(peering): confirm we don't need peername here func NewUpstreamIDFromServiceID(sid structs.ServiceID) UpstreamID { id := UpstreamID{ Name: sid.ID, @@ -52,7 +46,6 @@ func NewUpstreamIDFromServiceID(sid structs.ServiceID) UpstreamID { return id } -// TODO(peering): confirm we don't need peername here func NewUpstreamIDFromTargetID(tid string) UpstreamID { // Drop the leading subset if one is present in the target ID. separators := strings.Count(tid, ".") @@ -83,7 +76,7 @@ func (u *UpstreamID) normalize() { // String encodes the UpstreamID into a string for use in agent cache keys. // You can decode it back again using UpstreamIDFromString. func (u UpstreamID) String() string { - return UpstreamIDString(u.Type, u.Datacenter, u.Name, &u.EnterpriseMeta, u.Peer) + return UpstreamIDString(u.Type, u.Datacenter, u.Name, &u.EnterpriseMeta) } func (u UpstreamID) GoString() string { @@ -91,13 +84,12 @@ func (u UpstreamID) GoString() string { } func UpstreamIDFromString(input string) UpstreamID { - typ, dc, name, entMeta, peerName := ParseUpstreamIDString(input) + typ, dc, name, entMeta := ParseUpstreamIDString(input) id := UpstreamID{ Type: typ, Datacenter: dc, Name: name, EnterpriseMeta: *entMeta, - Peer: peerName, } id.normalize() return id @@ -105,25 +97,21 @@ func UpstreamIDFromString(input string) UpstreamID { const upstreamTypePreparedQueryPrefix = structs.UpstreamDestTypePreparedQuery + ":" -func ParseUpstreamIDString(input string) (typ, dc, name string, meta *acl.EnterpriseMeta, peerName string) { +func ParseUpstreamIDString(input string) (typ, dc, name string, meta *acl.EnterpriseMeta) { if strings.HasPrefix(input, upstreamTypePreparedQueryPrefix) { typ = structs.UpstreamDestTypePreparedQuery input = strings.TrimPrefix(input, upstreamTypePreparedQueryPrefix) } - before, after, found := strings.Cut(input, "?") - input = before - if found { - if _, peerVal, ok := strings.Cut(after, "peer="); ok { - peerName = peerVal - } else if _, dcVal, ok2 := strings.Cut(after, "dc="); ok2 { - dc = dcVal - } + idx := strings.LastIndex(input, "?dc=") + if idx != -1 { + dc = input[idx+4:] + input = input[0:idx] } name, meta = parseInnerUpstreamIDString(input) - return typ, dc, name, meta, peerName + return typ, dc, name, meta } // EnvoyID returns a string representation that uniquely identifies the @@ -138,9 +126,7 @@ func (u UpstreamID) EnvoyID() string { name := u.enterpriseIdentifierPrefix() + u.Name typ := u.Type - if u.Peer != "" { - name += "?peer=" + u.Peer - } else if u.Datacenter != "" { + if u.Datacenter != "" { name += "?dc=" + u.Datacenter } diff --git a/agent/proxycfg/naming_oss.go b/agent/proxycfg/naming_oss.go index c6a3db10de1d0..2ba2d999640ef 100644 --- a/agent/proxycfg/naming_oss.go +++ b/agent/proxycfg/naming_oss.go @@ -8,12 +8,10 @@ import ( "github.com/hashicorp/consul/agent/structs" ) -func UpstreamIDString(typ, dc, name string, _ *acl.EnterpriseMeta, peerName string) string { +func UpstreamIDString(typ, dc, name string, _ *acl.EnterpriseMeta) string { ret := name - if peerName != "" { - ret += "?peer=" + peerName - } else if dc != "" { + if dc != "" { ret += "?dc=" + dc } diff --git a/agent/proxycfg/naming_test.go b/agent/proxycfg/naming_test.go index 23ff241658ad3..a8ad9a6e71ed5 100644 --- a/agent/proxycfg/naming_test.go +++ b/agent/proxycfg/naming_test.go @@ -8,6 +8,7 @@ import ( "github.com/hashicorp/consul/agent/structs" ) +// TODO(freddy): Needs enterprise test func TestUpstreamIDFromTargetID(t *testing.T) { type testcase struct { tid string @@ -90,13 +91,6 @@ func TestUpstreamIDFromString(t *testing.T) { Datacenter: "dc2", }, }, - "normal with peer": { - "foo?peer=payments", - UpstreamID{ - Name: "foo", - Peer: "payments", - }, - }, } for name, tc := range cases { @@ -165,13 +159,6 @@ func TestUpstreamID_String(t *testing.T) { }, prefix + "foo?dc=dc2", }, - "normal with peer": { - UpstreamID{ - Name: "foo", - Peer: "payments", - }, - prefix + "foo?peer=payments", - }, } for name, tc := range cases { @@ -235,13 +222,6 @@ func TestUpstreamID_EnvoyID(t *testing.T) { }, "foo?dc=dc2", }, - "normal with peer": { - UpstreamID{ - Name: "foo", - Peer: "billing", - }, - "foo?peer=billing", - }, } for name, tc := range cases { diff --git a/agent/proxycfg/proxycfg.go b/agent/proxycfg/proxycfg.go index b19f20afc91da..f4a2f2499b713 100644 --- a/agent/proxycfg/proxycfg.go +++ b/agent/proxycfg/proxycfg.go @@ -1,53 +1,53 @@ -// Package proxycfg contains components for sourcing the data required to -// configure Connect proxies. The Manager provides an API with which proxy -// services can be registered, and coordinates the fetching (and refreshing) -// of intentions, upstreams, discovery chain, certificates etc. Consumers -// such as the xDS server can then subscribe to receive snapshots of this -// data whenever it changes. +// Package proxycfg provides a component that monitors local agent state for +// Connect proxy service registrations and maintains the necessary cache state +// for those proxies locally. Local cache state keeps pull based proxies (e.g. +// the built in one) performant even on first request/startup, and allows for +// push-based proxy APIs (e.g. xDS for Envoy) to be notified of updates to the +// proxy configuration. // -// Consul client agents support the configuration of proxies locally -// registered to them, whereas Consul servers support both this and proxies -// in the catalog. +// The relationship with other agent components looks like this: // -// The following diagram depicts the component relationships on a server, as -// this is the more complex mode of operation: +// +------------------------------------------+ +// | AGENT | +// | | +// | +--------+ 1. +----------+ | +// | | local |<-----+ proxycfg |<--------+ | +// | | state +----->| Manager |<---+ | | +// | +--------+ 2. +^---+-----+ | | | +// | 5.| | | | | +// | +----------+ | +-------+--+ |4. | +// | | +->| proxycfg | | | +// | | 3.| | State | | | +// | | | +----------+ | | +// | | | | | +// | | | +----------+ | | +// | | +->| proxycfg +-+ | +// | | | State | | +// | | +----------+ | +// | |6. | +// | +----v---+ | +// | | xDS | | +// | | Server | | +// | +--------+ | +// | | +// +------------------------------------------+ // -// +-------+ 1. +------------+ -// | Local | ◀------------▶ | Local | -// | State | | State Sync | -// +-------+ +-----+------+ -// ▲ | -// | +---------------+ | 2. -// 4. | 4a. | Local | | -// | +-▶ | Config Source +-+ | -// | | +---------------+ | | -// | | ▼ ▼ -// +--------+ 3. +-+-+-----------+ 6. +----------+ 2a. +----------+ -// | xDS +---▶ | Catalog +-----▶ | proxycfg +----▶ | proxycfg | -// | Server | ◀---+ Config Source +-----▶ | Manager +--+ | State | -// +--------+ 8. +----+----------+ 7. +----------+ | +----------+ -// 5. | | -// ▼ 7a. | +----------+ -// +-------+ +-▶ | proxycfg | -// | State | | State | -// | Store | +----------+ -// +-------+ -// -// 1. local.Sync watches the agent's local state for changes. -// 2. If any sidecar proxy or gateway services are registered to the local agent -// they are sync'd to the proxycfg.Manager. -// 2a. proxycfg.Manager creates a state object for the service and begins -// pre-fetching data (go to 8). -// 3. Client begins a stream and the xDS server calls Watch on its ConfigSource - -// on a client agent this would be a local config source, on a server it would -// be a catalog config source. -// 4. The catalog config source will check if service is registered locally. -// 4a. If the service *is* registered locally it hands off the the local config -// source, which calls Watch on the proxycfg manager (and serves the pre- -// fetched data). -// 5. Otherwise, it fetches the service from the state store. -// 6. It calls Watch on the proxycfg manager. -// 7. It registers the service with the proxycfg manager. -// 7a. See: 2a. -// 8. xDS server receives snapshots of configuration data whenever it changes. +// 1. Manager watches local state for changes. +// 2. On local state change manager is notified and iterates through state +// looking for proxy service registrations. +// 3. For each proxy service registered, the manager maintains a State +// instance, recreating on change, removing when deregistered. +// 4. State instance copies the parts of the the proxy service registration +// needed to configure proxy, and sets up blocking watches on the local +// agent cache for all remote state needed: root and leaf certs, intentions, +// and service discovery results for the specified upstreams. This ensures +// these results are always in local cache for "pull" based proxies like the +// built-in one. +// 5. If needed, pull-based proxy config APIs like the xDS server can Watch the +// config for a given proxy service. +// 6. Watchers get notified every time something changes the current snapshot +// of config for the proxy. That might be changes to the registration, +// certificate rotations, changes to the upstreams required (needing +// different listener config), or changes to the service discovery results +// for any upstream (e.g. new instance of upstream service came up). package proxycfg diff --git a/agent/proxycfg/snapshot.go b/agent/proxycfg/snapshot.go index cd8afd2cefe00..7cf669a89d2ed 100644 --- a/agent/proxycfg/snapshot.go +++ b/agent/proxycfg/snapshot.go @@ -6,8 +6,6 @@ import ( "sort" "strings" - "github.com/hashicorp/consul/lib" - "github.com/hashicorp/consul/proto/pbpeering" "github.com/mitchellh/copystructure" "github.com/hashicorp/consul/acl" @@ -44,14 +42,6 @@ type ConfigSnapshotUpstreams struct { // endpoints of an upstream. WatchedUpstreamEndpoints map[UpstreamID]map[string]structs.CheckServiceNodes - // WatchedPeerTrustBundles is a map of (PeerName -> CancelFunc) in order to cancel - // watches for peer trust bundles any time the list of upstream peers changes. - WatchedPeerTrustBundles map[string]context.CancelFunc - - // PeerTrustBundles is a map of (PeerName -> PeeringTrustBundle). - // It is used to store trust bundles for upstream TLS transport sockets. - PeerTrustBundles map[string]*pbpeering.PeeringTrustBundle - // WatchedGateways is a map of UpstreamID -> (map of GatewayKey.String() -> // CancelFunc) in order to cancel watches for mesh gateways WatchedGateways map[UpstreamID]map[string]context.CancelFunc @@ -143,8 +133,6 @@ func (c *configSnapshotConnectProxy) isEmpty() bool { len(c.WatchedDiscoveryChains) == 0 && len(c.WatchedUpstreams) == 0 && len(c.WatchedUpstreamEndpoints) == 0 && - len(c.WatchedPeerTrustBundles) == 0 && - len(c.PeerTrustBundles) == 0 && len(c.WatchedGateways) == 0 && len(c.WatchedGatewayEndpoints) == 0 && len(c.WatchedServiceChecks) == 0 && @@ -437,7 +425,7 @@ func IngressListenerKeyFromListener(l structs.IngressListener) IngressListenerKe type ConfigSnapshot struct { Kind structs.ServiceKind Service string - ProxyID ProxyID + ProxyID structs.ServiceID Address string Port int ServiceMeta map[string]string @@ -544,15 +532,6 @@ func (s *ConfigSnapshot) Leaf() *structs.IssuedCert { } } -// RootPEMs returns all PEM-encoded public certificates for the root CA. -func (s *ConfigSnapshot) RootPEMs() string { - var rootPEMs string - for _, root := range s.Roots.Roots { - rootPEMs += lib.EnsureTrailingNewline(root.RootCert) - } - return rootPEMs -} - func (s *ConfigSnapshot) MeshConfig() *structs.MeshConfigEntry { switch s.Kind { case structs.ServiceKindConnectProxy: diff --git a/agent/proxycfg/state.go b/agent/proxycfg/state.go index de0eec2368b3f..9d4488e1ebf87 100644 --- a/agent/proxycfg/state.go +++ b/agent/proxycfg/state.go @@ -11,16 +11,25 @@ import ( "github.com/hashicorp/go-hclog" "github.com/mitchellh/copystructure" + "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/logging" ) +type CacheNotifier interface { + Notify(ctx context.Context, t string, r cache.Request, + correlationID string, ch chan<- cache.UpdateEvent) error +} + +type Health interface { + Notify(ctx context.Context, req structs.ServiceSpecificRequest, correlationID string, ch chan<- cache.UpdateEvent) error +} + const ( coalesceTimeout = 200 * time.Millisecond rootsWatchID = "roots" leafWatchID = "leaf" - peerTrustBundleIDPrefix = "peer-trust-bundle:" intentionsWatchID = "intentions" serviceListWatchID = "service-list" federationStateListGatewaysWatchID = "federation-state-list-mesh-gateways" @@ -44,7 +53,8 @@ const ( type stateConfig struct { logger hclog.Logger source *structs.QuerySource - dataSources DataSources + cache CacheNotifier + health Health dnsConfig DNSConfig serverSNIFn ServerSNIFunc intentionDefaultAllow bool @@ -54,7 +64,6 @@ type stateConfig struct { // connect-proxy service. When a proxy registration is changed, the entire state // is discarded and a new one created. type state struct { - source ProxySource logger hclog.Logger serviceInstance serviceInstance handler kindHandler @@ -63,7 +72,7 @@ type state struct { // in Watch. cancel func() - ch chan UpdateEvent + ch chan cache.UpdateEvent snapCh chan ConfigSnapshot reqCh chan chan *ConfigSnapshot } @@ -78,7 +87,7 @@ type ServerSNIFunc func(dc, nodeName string) string type serviceInstance struct { kind structs.ServiceKind service string - proxyID ProxyID + proxyID structs.ServiceID address string port int meta map[string]string @@ -115,14 +124,6 @@ func copyProxyConfig(ns *structs.NodeService) (structs.ConnectProxyConfig, error if us.DestinationNamespace == "" { proxyCfg.Upstreams[idx].DestinationNamespace = ns.EnterpriseMeta.NamespaceOrDefault() } - - // If PeerName is not empty, the DestinationPartition refers - // to the local Partition in which the Peer exists and the - // DestinationNamespace refers to the Namespace residing in - // the remote peer - if us.DestinationPeer == "" { - proxyCfg.Upstreams[idx].DestinationPeer = ns.PeerName - } } } @@ -136,7 +137,7 @@ func copyProxyConfig(ns *structs.NodeService) (structs.ConnectProxyConfig, error // // The returned state needs its required dependencies to be set before Watch // can be called. -func newState(id ProxyID, ns *structs.NodeService, source ProxySource, token string, config stateConfig) (*state, error) { +func newState(ns *structs.NodeService, token string, config stateConfig) (*state, error) { // 10 is fairly arbitrary here but allow for the 3 mandatory and a // reasonable number of upstream watches to all deliver their initial // messages in parallel without blocking the cache.Notify loops. It's not a @@ -144,9 +145,9 @@ func newState(id ProxyID, ns *structs.NodeService, source ProxySource, token str // conservative to handle larger numbers of upstreams correctly but gives // some head room for normal operation to be non-blocking in most typical // cases. - ch := make(chan UpdateEvent, 10) + ch := make(chan cache.UpdateEvent, 10) - s, err := newServiceInstanceFromNodeService(id, ns, token) + s, err := newServiceInstanceFromNodeService(ns, token) if err != nil { return nil, err } @@ -157,7 +158,6 @@ func newState(id ProxyID, ns *structs.NodeService, source ProxySource, token str } return &state{ - source: source, logger: config.logger.With("proxy", s.proxyID, "kind", s.kind), serviceInstance: s, handler: handler, @@ -167,7 +167,7 @@ func newState(id ProxyID, ns *structs.NodeService, source ProxySource, token str }, nil } -func newKindHandler(config stateConfig, s serviceInstance, ch chan UpdateEvent) (kindHandler, error) { +func newKindHandler(config stateConfig, s serviceInstance, ch chan cache.UpdateEvent) (kindHandler, error) { var handler kindHandler h := handlerState{stateConfig: config, serviceInstance: s, ch: ch} @@ -189,7 +189,7 @@ func newKindHandler(config stateConfig, s serviceInstance, ch chan UpdateEvent) return handler, nil } -func newServiceInstanceFromNodeService(id ProxyID, ns *structs.NodeService, token string) (serviceInstance, error) { +func newServiceInstanceFromNodeService(ns *structs.NodeService, token string) (serviceInstance, error) { proxyCfg, err := copyProxyConfig(ns) if err != nil { return serviceInstance{}, err @@ -208,7 +208,7 @@ func newServiceInstanceFromNodeService(id ProxyID, ns *structs.NodeService, toke return serviceInstance{ kind: ns.Kind, service: ns.Service, - proxyID: id, + proxyID: ns.CompoundServiceID(), address: ns.Address, port: ns.Port, meta: meta, @@ -220,7 +220,7 @@ func newServiceInstanceFromNodeService(id ProxyID, ns *structs.NodeService, toke type kindHandler interface { initialize(ctx context.Context) (ConfigSnapshot, error) - handleUpdate(ctx context.Context, u UpdateEvent, snap *ConfigSnapshot) error + handleUpdate(ctx context.Context, u cache.UpdateEvent, snap *ConfigSnapshot) error } // Watch initialized watches on all necessary cache data for the current proxy @@ -253,7 +253,7 @@ func (s *state) Close() error { type handlerState struct { stateConfig // TODO: un-embed serviceInstance // TODO: un-embed - ch chan UpdateEvent + ch chan cache.UpdateEvent } func newConfigSnapshotFromServiceInstance(s serviceInstance, config stateConfig) ConfigSnapshot { @@ -402,6 +402,7 @@ func (s *state) Changed(ns *structs.NodeService, token string) bool { i := s.serviceInstance return ns.Kind != i.kind || + i.proxyID != ns.CompoundServiceID() || i.address != ns.Address || i.port != ns.Port || !reflect.DeepEqual(i.proxyCfg, proxyCfg) || @@ -440,16 +441,16 @@ func hostnameEndpoints(logger hclog.Logger, localKey GatewayKey, nodes structs.C } type gatewayWatchOpts struct { - internalServiceDump InternalServiceDump - notifyCh chan UpdateEvent - source structs.QuerySource - token string - key GatewayKey - upstreamID UpstreamID + notifier CacheNotifier + notifyCh chan cache.UpdateEvent + source structs.QuerySource + token string + key GatewayKey + upstreamID UpstreamID } func watchMeshGateway(ctx context.Context, opts gatewayWatchOpts) error { - return opts.internalServiceDump.Notify(ctx, &structs.ServiceDumpRequest{ + return opts.notifier.Notify(ctx, cachetype.InternalServiceDumpName, &structs.ServiceDumpRequest{ Datacenter: opts.key.Datacenter, QueryOptions: structs.QueryOptions{Token: opts.token}, ServiceKind: structs.ServiceKindMeshGateway, diff --git a/agent/proxycfg/state_oss_test.go b/agent/proxycfg/state_oss_test.go deleted file mode 100644 index 0034041f740a7..0000000000000 --- a/agent/proxycfg/state_oss_test.go +++ /dev/null @@ -1,6 +0,0 @@ -//go:build !consulent -// +build !consulent - -package proxycfg - -func recordWatchesEnterprise(*stateConfig, *watchRecorder) {} diff --git a/agent/proxycfg/state_test.go b/agent/proxycfg/state_test.go index 7ca93da661e25..29004eeaf16e0 100644 --- a/agent/proxycfg/state_test.go +++ b/agent/proxycfg/state_test.go @@ -7,13 +7,14 @@ import ( "testing" "time" - "github.com/hashicorp/consul/proto/pbpeering" "github.com/hashicorp/go-hclog" "github.com/stretchr/testify/require" "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/consul/discoverychain" + "github.com/hashicorp/consul/agent/rpcclient/health" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/sdk/testutil" ) @@ -50,6 +51,16 @@ func TestStateChanged(t *testing.T) { }, want: true, }, + { + name: "different service ID", + ns: structs.TestNodeServiceProxy(t), + token: "foo", + mutate: func(ns structs.NodeService, token string) (*structs.NodeService, string) { + ns.ID = "badger" + return &ns, token + }, + want: true, + }, { name: "different address", ns: structs.TestNodeServiceProxy(t), @@ -104,8 +115,7 @@ func TestStateChanged(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - proxyID := ProxyID{ServiceID: tt.ns.CompoundServiceID()} - state, err := newState(proxyID, tt.ns, testSource, tt.token, stateConfig{logger: hclog.New(nil)}) + state, err := newState(tt.ns, tt.token, stateConfig{logger: hclog.New(nil)}) require.NoError(t, err) otherNS, otherToken := tt.mutate(*tt.ns, tt.token) require.Equal(t, tt.want, state.Changed(otherNS, otherToken)) @@ -113,98 +123,90 @@ func TestStateChanged(t *testing.T) { } } -func recordWatches(sc *stateConfig) *watchRecorder { - wr := newWatchRecorder() - - sc.dataSources = DataSources{ - CARoots: typedWatchRecorder[*structs.DCSpecificRequest]{wr}, - CompiledDiscoveryChain: typedWatchRecorder[*structs.DiscoveryChainRequest]{wr}, - ConfigEntry: typedWatchRecorder[*structs.ConfigEntryQuery]{wr}, - ConfigEntryList: typedWatchRecorder[*structs.ConfigEntryQuery]{wr}, - Datacenters: typedWatchRecorder[*structs.DatacentersRequest]{wr}, - FederationStateListMeshGateways: typedWatchRecorder[*structs.DCSpecificRequest]{wr}, - GatewayServices: typedWatchRecorder[*structs.ServiceSpecificRequest]{wr}, - Health: typedWatchRecorder[*structs.ServiceSpecificRequest]{wr}, - HTTPChecks: typedWatchRecorder[*cachetype.ServiceHTTPChecksRequest]{wr}, - Intentions: typedWatchRecorder[*structs.IntentionQueryRequest]{wr}, - IntentionUpstreams: typedWatchRecorder[*structs.ServiceSpecificRequest]{wr}, - InternalServiceDump: typedWatchRecorder[*structs.ServiceDumpRequest]{wr}, - LeafCertificate: typedWatchRecorder[*cachetype.ConnectCALeafRequest]{wr}, - PreparedQuery: typedWatchRecorder[*structs.PreparedQueryExecuteRequest]{wr}, - ResolvedServiceConfig: typedWatchRecorder[*structs.ServiceConfigRequest]{wr}, - ServiceList: typedWatchRecorder[*structs.DCSpecificRequest]{wr}, - TrustBundle: typedWatchRecorder[*pbpeering.TrustBundleReadRequest]{wr}, - } - recordWatchesEnterprise(sc, wr) +type testCacheNotifierRequest struct { + cacheType string + request cache.Request + ch chan<- cache.UpdateEvent +} - return wr +type testCacheNotifier struct { + lock sync.RWMutex + notifiers map[string]testCacheNotifierRequest } -func newWatchRecorder() *watchRecorder { - return &watchRecorder{ - watches: make(map[string]any), +func newTestCacheNotifier() *testCacheNotifier { + return &testCacheNotifier{ + notifiers: make(map[string]testCacheNotifierRequest), } } -type watchRecorder struct { - mu sync.Mutex - watches map[string]any +func (cn *testCacheNotifier) Notify(ctx context.Context, t string, r cache.Request, correlationId string, ch chan<- cache.UpdateEvent) error { + cn.lock.Lock() + cn.notifiers[correlationId] = testCacheNotifierRequest{t, r, ch} + cn.lock.Unlock() + return nil } -func (r *watchRecorder) record(correlationID string, req any) { - r.mu.Lock() - r.watches[correlationID] = req - r.mu.Unlock() +func (cn *testCacheNotifier) Get(ctx context.Context, t string, r cache.Request) (interface{}, cache.ResultMeta, error) { + panic("Get: not implemented") } -func (r *watchRecorder) verify(t *testing.T, correlationID string, verifyFn verifyWatchRequest) { - t.Helper() - - r.mu.Lock() - req, ok := r.watches[correlationID] - r.mu.Unlock() - - require.True(t, ok, "No such watch for Correlation ID: %q", correlationID) +func (cn *testCacheNotifier) getNotifierRequest(t testing.TB, correlationId string) testCacheNotifierRequest { + cn.lock.RLock() + req, ok := cn.notifiers[correlationId] + cn.lock.RUnlock() + require.True(t, ok, "Correlation ID: %s is missing", correlationId) + return req +} - if verifyFn != nil { - verifyFn(t, req) - } +func (cn *testCacheNotifier) getChanForCorrelationId(t testing.TB, correlationId string) chan<- cache.UpdateEvent { + req := cn.getNotifierRequest(t, correlationId) + require.NotNil(t, req.ch) + return req.ch } -type typedWatchRecorder[ReqType any] struct { - recorder *watchRecorder +func (cn *testCacheNotifier) sendNotification(t testing.TB, correlationId string, event cache.UpdateEvent) { + cn.getChanForCorrelationId(t, correlationId) <- event } -func (r typedWatchRecorder[ReqType]) Notify(_ context.Context, req ReqType, correlationID string, _ chan<- UpdateEvent) error { - r.recorder.record(correlationID, req) - return nil +func (cn *testCacheNotifier) verifyWatch(t testing.TB, correlationId string) (string, cache.Request) { + // t.Logf("Watches: %+v", cn.notifiers) + req := cn.getNotifierRequest(t, correlationId) + require.NotNil(t, req.ch) + return req.cacheType, req.request } -type verifyWatchRequest func(t testing.TB, request any) +type verifyWatchRequest func(t testing.TB, cacheType string, request cache.Request) + +func genVerifyDCSpecificWatch(expectedCacheType string, expectedDatacenter string) verifyWatchRequest { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, expectedCacheType, cacheType) -func genVerifyDCSpecificWatch(expectedDatacenter string) verifyWatchRequest { - return func(t testing.TB, request any) { reqReal, ok := request.(*structs.DCSpecificRequest) require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) } } -func verifyDatacentersWatch(t testing.TB, request any) { - _, ok := request.(*structs.DatacentersRequest) - require.True(t, ok) +func genVerifyRootsWatch(expectedDatacenter string) verifyWatchRequest { + return genVerifyDCSpecificWatch(cachetype.ConnectCARootName, expectedDatacenter) } -func genVerifyTrustBundleReadWatch(peer string) verifyWatchRequest { - return func(t testing.TB, request any) { - reqReal, ok := request.(*pbpeering.TrustBundleReadRequest) - require.True(t, ok) - require.Equal(t, peer, reqReal.Name) - } +func genVerifyListServicesWatch(expectedDatacenter string) verifyWatchRequest { + return genVerifyDCSpecificWatch(cachetype.CatalogServiceListName, expectedDatacenter) +} + +func verifyDatacentersWatch(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.CatalogDatacentersName, cacheType) + + _, ok := request.(*structs.DatacentersRequest) + require.True(t, ok) } func genVerifyLeafWatchWithDNSSANs(expectedService string, expectedDatacenter string, expectedDNSSANs []string) verifyWatchRequest { - return func(t testing.TB, request any) { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.ConnectCALeafName, cacheType) + reqReal, ok := request.(*cachetype.ConnectCALeafRequest) require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) @@ -218,7 +220,9 @@ func genVerifyLeafWatch(expectedService string, expectedDatacenter string) verif } func genVerifyResolverWatch(expectedService, expectedDatacenter, expectedKind string) verifyWatchRequest { - return func(t testing.TB, request any) { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.ConfigEntriesName, cacheType) + reqReal, ok := request.(*structs.ConfigEntryQuery) require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) @@ -228,7 +232,9 @@ func genVerifyResolverWatch(expectedService, expectedDatacenter, expectedKind st } func genVerifyResolvedConfigWatch(expectedService string, expectedDatacenter string) verifyWatchRequest { - return func(t testing.TB, request any) { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.ResolvedServiceConfigName, cacheType) + reqReal, ok := request.(*structs.ServiceConfigRequest) require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) @@ -237,7 +243,9 @@ func genVerifyResolvedConfigWatch(expectedService string, expectedDatacenter str } func genVerifyIntentionWatch(expectedService string, expectedDatacenter string) verifyWatchRequest { - return func(t testing.TB, request any) { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.IntentionMatchName, cacheType) + reqReal, ok := request.(*structs.IntentionQueryRequest) require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) @@ -249,8 +257,21 @@ func genVerifyIntentionWatch(expectedService string, expectedDatacenter string) } } +func genVerifyIntentionUpstreamsWatch(expectedService string, expectedDatacenter string) verifyWatchRequest { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.IntentionUpstreamsName, cacheType) + + reqReal, ok := request.(*structs.ServiceSpecificRequest) + require.True(t, ok) + require.Equal(t, expectedDatacenter, reqReal.Datacenter) + require.Equal(t, expectedService, reqReal.ServiceName) + } +} + func genVerifyPreparedQueryWatch(expectedName string, expectedDatacenter string) verifyWatchRequest { - return func(t testing.TB, request any) { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.PreparedQueryName, cacheType) + reqReal, ok := request.(*structs.PreparedQueryExecuteRequest) require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) @@ -260,7 +281,9 @@ func genVerifyPreparedQueryWatch(expectedName string, expectedDatacenter string) } func genVerifyDiscoveryChainWatch(expected *structs.DiscoveryChainRequest) verifyWatchRequest { - return func(t testing.TB, request any) { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.CompiledDiscoveryChainName, cacheType) + reqReal, ok := request.(*structs.DiscoveryChainRequest) require.True(t, ok) require.Equal(t, expected, reqReal) @@ -268,7 +291,9 @@ func genVerifyDiscoveryChainWatch(expected *structs.DiscoveryChainRequest) verif } func genVerifyMeshConfigWatch(expectedDatacenter string) verifyWatchRequest { - return func(t testing.TB, request any) { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.ConfigEntryName, cacheType) + reqReal, ok := request.(*structs.ConfigEntryQuery) require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) @@ -278,7 +303,9 @@ func genVerifyMeshConfigWatch(expectedDatacenter string) verifyWatchRequest { } func genVerifyGatewayWatch(expectedDatacenter string) verifyWatchRequest { - return func(t testing.TB, request any) { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.InternalServiceDumpName, cacheType) + reqReal, ok := request.(*structs.ServiceDumpRequest) require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) @@ -288,8 +315,10 @@ func genVerifyGatewayWatch(expectedDatacenter string) verifyWatchRequest { } } -func genVerifyServiceSpecificRequest(expectedService, expectedFilter, expectedDatacenter string, connect bool) verifyWatchRequest { - return func(t testing.TB, request any) { +func genVerifyServiceSpecificRequest(expectedCacheType, expectedService, expectedFilter, expectedDatacenter string, connect bool) verifyWatchRequest { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, expectedCacheType, cacheType) + reqReal, ok := request.(*structs.ServiceSpecificRequest) require.True(t, ok) require.Equal(t, expectedDatacenter, reqReal.Datacenter) @@ -299,12 +328,18 @@ func genVerifyServiceSpecificRequest(expectedService, expectedFilter, expectedDa } } +func genVerifyServiceWatch(expectedService, expectedFilter, expectedDatacenter string, connect bool) verifyWatchRequest { + return genVerifyServiceSpecificRequest(cachetype.HealthServicesName, expectedService, expectedFilter, expectedDatacenter, connect) +} + func genVerifyGatewayServiceWatch(expectedService, expectedDatacenter string) verifyWatchRequest { - return genVerifyServiceSpecificRequest(expectedService, "", expectedDatacenter, false) + return genVerifyServiceSpecificRequest(cachetype.GatewayServicesName, expectedService, "", expectedDatacenter, false) } func genVerifyConfigEntryWatch(expectedKind, expectedName, expectedDatacenter string) verifyWatchRequest { - return func(t testing.TB, request any) { + return func(t testing.TB, cacheType string, request cache.Request) { + require.Equal(t, cachetype.ConfigEntryName, cacheType) + reqReal, ok := request.(*structs.ConfigEntryQuery) require.True(t, ok) require.Equal(t, expectedKind, reqReal.Kind) @@ -313,7 +348,7 @@ func genVerifyConfigEntryWatch(expectedKind, expectedName, expectedDatacenter st } } -func ingressConfigWatchEvent(gwTLS bool, mixedTLS bool) UpdateEvent { +func ingressConfigWatchEvent(gwTLS bool, mixedTLS bool) cache.UpdateEvent { e := &structs.IngressGatewayConfigEntry{ TLS: structs.GatewayTLSConfig{ Enabled: gwTLS, @@ -336,7 +371,7 @@ func ingressConfigWatchEvent(gwTLS bool, mixedTLS bool) UpdateEvent { } } - return UpdateEvent{ + return cache.UpdateEvent{ CorrelationID: gatewayConfigWatchID, Result: &structs.ConfigEntryResponse{ Entry: e, @@ -369,25 +404,20 @@ func TestState_WatchesAndUpdates(t *testing.T) { t.Parallel() indexedRoots, issuedCert := TestCerts(t) - peerTrustBundles := TestPeerTrustBundles(t) // Used to account for differences in OSS/ent implementations of ServiceID.String() var ( db = structs.NewServiceName("db", nil) billing = structs.NewServiceName("billing", nil) api = structs.NewServiceName("api", nil) - apiA = structs.NewServiceName("api-a", nil) - apiUID = NewUpstreamIDFromServiceName(api) - dbUID = NewUpstreamIDFromServiceName(db) - pqUID = UpstreamIDFromString("prepared_query:query") - extApiUID = NewUpstreamIDFromServiceName(apiA) + apiUID = NewUpstreamIDFromServiceName(api) + dbUID = NewUpstreamIDFromServiceName(db) + pqUID = UpstreamIDFromString("prepared_query:query") ) - // TODO(peering): NewUpstreamIDFromServiceName should take a PeerName - extApiUID.Peer = "peer-a" - rootWatchEvent := func() UpdateEvent { - return UpdateEvent{ + rootWatchEvent := func() cache.UpdateEvent { + return cache.UpdateEvent{ CorrelationID: rootsWatchID, Result: indexedRoots, Err: nil, @@ -396,7 +426,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { type verificationStage struct { requiredWatches map[string]verifyWatchRequest - events []UpdateEvent + events []cache.UpdateEvent verifySnapshot func(t testing.TB, snap *ConfigSnapshot) } @@ -472,8 +502,11 @@ func TestState_WatchesAndUpdates(t *testing.T) { stage0 := verificationStage{ requiredWatches: map[string]verifyWatchRequest{ - intentionsWatchID: genVerifyIntentionWatch("web", "dc1"), - meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), + rootsWatchID: genVerifyRootsWatch("dc1"), + leafWatchID: genVerifyLeafWatch("web", "dc1"), + intentionsWatchID: genVerifyIntentionWatch("web", "dc1"), + meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), + "upstream:" + pqUID.String(): genVerifyPreparedQueryWatch("query", "dc1"), fmt.Sprintf("discovery-chain:%s", apiUID.String()): genVerifyDiscoveryChainWatch(&structs.DiscoveryChainRequest{ Name: "api", EvaluateInDatacenter: "dc1", @@ -524,11 +557,8 @@ func TestState_WatchesAndUpdates(t *testing.T) { Mode: meshGatewayProxyConfigValue, }, }), - "upstream:" + pqUID.String(): genVerifyPreparedQueryWatch("query", "dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - leafWatchID: genVerifyLeafWatch("web", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: leafWatchID, @@ -625,10 +655,10 @@ func TestState_WatchesAndUpdates(t *testing.T) { stage1 := verificationStage{ requiredWatches: map[string]verifyWatchRequest{ - fmt.Sprintf("upstream-target:api.default.default.dc1:%s", apiUID.String()): genVerifyServiceSpecificRequest("api", "", "dc1", true), - fmt.Sprintf("upstream-target:api-failover-remote.default.default.dc2:%s-failover-remote?dc=dc2", apiUID.String()): genVerifyServiceSpecificRequest("api-failover-remote", "", "dc2", true), - fmt.Sprintf("upstream-target:api-failover-local.default.default.dc2:%s-failover-local?dc=dc2", apiUID.String()): genVerifyServiceSpecificRequest("api-failover-local", "", "dc2", true), - fmt.Sprintf("upstream-target:api-failover-direct.default.default.dc2:%s-failover-direct?dc=dc2", apiUID.String()): genVerifyServiceSpecificRequest("api-failover-direct", "", "dc2", true), + fmt.Sprintf("upstream-target:api.default.default.dc1:%s", apiUID.String()): genVerifyServiceWatch("api", "", "dc1", true), + fmt.Sprintf("upstream-target:api-failover-remote.default.default.dc2:%s-failover-remote?dc=dc2", apiUID.String()): genVerifyServiceWatch("api-failover-remote", "", "dc2", true), + fmt.Sprintf("upstream-target:api-failover-local.default.default.dc2:%s-failover-local?dc=dc2", apiUID.String()): genVerifyServiceWatch("api-failover-local", "", "dc2", true), + fmt.Sprintf("upstream-target:api-failover-direct.default.default.dc2:%s-failover-direct?dc=dc2", apiUID.String()): genVerifyServiceWatch("api-failover-direct", "", "dc2", true), fmt.Sprintf("mesh-gateway:dc2:%s-failover-remote?dc=dc2", apiUID.String()): genVerifyGatewayWatch("dc2"), fmt.Sprintf("mesh-gateway:dc1:%s-failover-local?dc=dc2", apiUID.String()): genVerifyGatewayWatch("dc1"), }, @@ -684,13 +714,16 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, } - dbResolver := &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Name: "db", - Kind: structs.ServiceResolver, - Redirect: &structs.ServiceResolverRedirect{ - Service: "db", - Datacenter: "dc2", + dbResolver := &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Name: "db", + Kind: structs.ServiceResolver, + Redirect: &structs.ServiceResolverRedirect{ + Service: "db", + Datacenter: "dc2", + }, }, }, } @@ -708,9 +741,9 @@ func TestState_WatchesAndUpdates(t *testing.T) { stages: []verificationStage{ { requiredWatches: map[string]verifyWatchRequest{ + rootsWatchID: genVerifyRootsWatch("dc1"), + serviceListWatchID: genVerifyListServicesWatch("dc1"), datacentersWatchID: verifyDatacentersWatch, - serviceListWatchID: genVerifyDCSpecificWatch("dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { require.False(t, snap.Valid(), "gateway without root is not valid") @@ -718,7 +751,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { @@ -734,7 +767,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: serviceListWatchID, Result: &structs.IndexedServiceList{ @@ -769,11 +802,11 @@ func TestState_WatchesAndUpdates(t *testing.T) { stages: []verificationStage{ { requiredWatches: map[string]verifyWatchRequest{ + rootsWatchID: genVerifyRootsWatch("dc1"), + serviceListWatchID: genVerifyListServicesWatch("dc1"), datacentersWatchID: verifyDatacentersWatch, - serviceListWatchID: genVerifyDCSpecificWatch("dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: serviceListWatchID, @@ -792,7 +825,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: serviceListWatchID, Result: &structs.IndexedServiceList{ @@ -811,7 +844,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "mesh-gateway:dc4", Result: &structs.IndexedNodesWithGateways{ @@ -855,7 +888,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: federationStateListGatewaysWatchID, Result: &structs.DatacenterIndexedCheckServiceNodes{ @@ -913,9 +946,9 @@ func TestState_WatchesAndUpdates(t *testing.T) { stages: []verificationStage{ { requiredWatches: map[string]verifyWatchRequest{ + rootsWatchID: genVerifyRootsWatch("dc1"), meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), gatewayConfigWatchID: genVerifyConfigEntryWatch(structs.IngressGateway, "ingress-gateway", "dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), gatewayServicesWatchID: genVerifyGatewayServiceWatch("ingress-gateway", "dc1"), }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { @@ -924,7 +957,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: meshConfigEntryID, @@ -937,7 +970,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ ingressConfigWatchEvent(false, false), }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { @@ -947,7 +980,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -988,7 +1021,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { requiredWatches: map[string]verifyWatchRequest{ leafWatchID: genVerifyLeafWatch("ingress-gateway", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: leafWatchID, Result: issuedCert, @@ -1010,7 +1043,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Datacenter: "dc1", }), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "discovery-chain:" + apiUID.String(), Result: &structs.DiscoveryChainResponse{ @@ -1026,9 +1059,9 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, { requiredWatches: map[string]verifyWatchRequest{ - "upstream-target:api.default.default.dc1:" + apiUID.String(): genVerifyServiceSpecificRequest("api", "", "dc1", true), + "upstream-target:api.default.default.dc1:" + apiUID.String(): genVerifyServiceWatch("api", "", "dc1", true), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "upstream-target:api.default.default.dc1:" + apiUID.String(), Result: &structs.IndexedCheckServiceNodes{ @@ -1082,12 +1115,12 @@ func TestState_WatchesAndUpdates(t *testing.T) { stages: []verificationStage{ { requiredWatches: map[string]verifyWatchRequest{ + rootsWatchID: genVerifyRootsWatch("dc1"), meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), gatewayConfigWatchID: genVerifyConfigEntryWatch(structs.IngressGateway, "ingress-gateway", "dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), gatewayServicesWatchID: genVerifyGatewayServiceWatch("ingress-gateway", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: meshConfigEntryID, @@ -1135,7 +1168,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { "*.ingress.dc1.alt.consul.", }), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{}, @@ -1162,12 +1195,12 @@ func TestState_WatchesAndUpdates(t *testing.T) { stages: []verificationStage{ { requiredWatches: map[string]verifyWatchRequest{ + rootsWatchID: genVerifyRootsWatch("dc1"), meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), gatewayConfigWatchID: genVerifyConfigEntryWatch(structs.IngressGateway, "ingress-gateway", "dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), gatewayServicesWatchID: genVerifyGatewayServiceWatch("ingress-gateway", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: meshConfigEntryID, @@ -1228,7 +1261,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { "*.ingress.dc1.alt.consul.", }), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{}, @@ -1255,9 +1288,10 @@ func TestState_WatchesAndUpdates(t *testing.T) { stages: []verificationStage{ { requiredWatches: map[string]verifyWatchRequest{ - meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - gatewayServicesWatchID: genVerifyGatewayServiceWatch("terminating-gateway", "dc1"), + rootsWatchID: genVerifyRootsWatch("dc1"), + meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), + gatewayServicesWatchID: genVerifyServiceSpecificRequest(gatewayServicesWatchID, + "terminating-gateway", "", "dc1", false), }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { require.False(t, snap.Valid(), "gateway without root is not valid") @@ -1267,7 +1301,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: meshConfigEntryID, @@ -1297,11 +1331,12 @@ func TestState_WatchesAndUpdates(t *testing.T) { stages: []verificationStage{ { requiredWatches: map[string]verifyWatchRequest{ - meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - gatewayServicesWatchID: genVerifyGatewayServiceWatch("terminating-gateway", "dc1"), + rootsWatchID: genVerifyRootsWatch("dc1"), + meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), + gatewayServicesWatchID: genVerifyServiceSpecificRequest(gatewayServicesWatchID, + "terminating-gateway", "", "dc1", false), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: meshConfigEntryID, @@ -1329,7 +1364,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -1388,9 +1423,9 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, { requiredWatches: map[string]verifyWatchRequest{ - "external-service:" + db.String(): genVerifyServiceSpecificRequest("db", "", "dc1", false), + "external-service:" + db.String(): genVerifyServiceWatch("db", "", "dc1", false), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "external-service:" + db.String(), Result: &structs.IndexedCheckServiceNodes{ @@ -1433,9 +1468,9 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, { requiredWatches: map[string]verifyWatchRequest{ - "external-service:" + api.String(): genVerifyServiceSpecificRequest("api", "", "dc1", false), + "external-service:" + api.String(): genVerifyServiceWatch("api", "", "dc1", false), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "external-service:" + api.String(), Result: &structs.IndexedCheckServiceNodes{ @@ -1528,7 +1563,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { requiredWatches: map[string]verifyWatchRequest{ "service-leaf:" + db.String(): genVerifyLeafWatch("db", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "service-leaf:" + db.String(), Result: issuedCert, @@ -1546,7 +1581,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { requiredWatches: map[string]verifyWatchRequest{ serviceIntentionsIDPrefix + db.String(): genVerifyIntentionWatch("db", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: serviceIntentionsIDPrefix + db.String(), Result: dbIxnMatch, @@ -1567,7 +1602,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { requiredWatches: map[string]verifyWatchRequest{ serviceConfigIDPrefix + db.String(): genVerifyResolvedConfigWatch("db", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: serviceConfigIDPrefix + db.String(), Result: dbConfig, @@ -1586,7 +1621,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { requiredWatches: map[string]verifyWatchRequest{ "service-resolver:" + db.String(): genVerifyResolverWatch("db", "dc1", structs.ServiceResolver), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "service-resolver:" + db.String(), Result: dbResolver, @@ -1602,11 +1637,11 @@ func TestState_WatchesAndUpdates(t *testing.T) { require.True(t, snap.TerminatingGateway.ServiceResolversSet[db]) require.Len(t, snap.TerminatingGateway.ServiceResolvers, 1) - require.Equal(t, dbResolver.Entry, snap.TerminatingGateway.ServiceResolvers[db]) + require.Equal(t, dbResolver.Entries[0], snap.TerminatingGateway.ServiceResolvers[db]) }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -1669,11 +1704,12 @@ func TestState_WatchesAndUpdates(t *testing.T) { stages: []verificationStage{ { requiredWatches: map[string]verifyWatchRequest{ - intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), - intentionUpstreamsID: genVerifyServiceSpecificRequest("api", "", "dc1", false), - meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - leafWatchID: genVerifyLeafWatch("api", "dc1"), + rootsWatchID: genVerifyRootsWatch("dc1"), + intentionUpstreamsID: genVerifyServiceSpecificRequest(intentionUpstreamsID, + "api", "", "dc1", false), + leafWatchID: genVerifyLeafWatch("api", "dc1"), + intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), + meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { require.False(t, snap.Valid(), "proxy without roots/leaf/intentions is not valid") @@ -1693,7 +1729,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, }, { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: leafWatchID, @@ -1754,11 +1790,12 @@ func TestState_WatchesAndUpdates(t *testing.T) { // Empty on initialization { requiredWatches: map[string]verifyWatchRequest{ - intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), - intentionUpstreamsID: genVerifyServiceSpecificRequest("api", "", "dc1", false), - meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - leafWatchID: genVerifyLeafWatch("api", "dc1"), + rootsWatchID: genVerifyRootsWatch("dc1"), + intentionUpstreamsID: genVerifyServiceSpecificRequest(intentionUpstreamsID, + "api", "", "dc1", false), + leafWatchID: genVerifyLeafWatch("api", "dc1"), + intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), + meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { require.False(t, snap.Valid(), "proxy without roots/leaf/intentions is not valid") @@ -1776,7 +1813,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, // Valid snapshot after roots, leaf, and intentions { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: leafWatchID, @@ -1813,12 +1850,13 @@ func TestState_WatchesAndUpdates(t *testing.T) { // Receiving an intention should lead to spinning up a discovery chain watch { requiredWatches: map[string]verifyWatchRequest{ - intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), - intentionUpstreamsID: genVerifyServiceSpecificRequest("api", "", "dc1", false), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - leafWatchID: genVerifyLeafWatch("api", "dc1"), + rootsWatchID: genVerifyRootsWatch("dc1"), + intentionUpstreamsID: genVerifyServiceSpecificRequest(intentionUpstreamsID, + "api", "", "dc1", false), + leafWatchID: genVerifyLeafWatch("api", "dc1"), + intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: intentionUpstreamsID, Result: &structs.IndexedServiceList{ @@ -1861,7 +1899,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { OverrideMeshGateway: structs.MeshGatewayConfig{Mode: structs.MeshGatewayModeRemote}, }), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "discovery-chain:" + dbUID.String(), Result: &structs.DiscoveryChainResponse{ @@ -1877,9 +1915,9 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, { requiredWatches: map[string]verifyWatchRequest{ - "upstream-target:db.default.default.dc1:" + dbUID.String(): genVerifyServiceSpecificRequest("db", "", "dc1", true), + "upstream-target:db.default.default.dc1:" + dbUID.String(): genVerifyServiceWatch("db", "", "dc1", true), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "upstream-target:db.default.default.dc1:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ @@ -2030,7 +2068,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { OverrideMeshGateway: structs.MeshGatewayConfig{Mode: structs.MeshGatewayModeRemote}, }), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "discovery-chain:" + dbUID.String(), Result: &structs.DiscoveryChainResponse{ @@ -2057,7 +2095,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, { // Receive a new upstream target event without proxy1. - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "upstream-target:db.default.default.dc1:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ @@ -2138,7 +2176,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, { // Receive a new upstream target event with a conflicting passthrough address - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "upstream-target:api.default.default.dc1:" + apiUID.String(), Result: &structs.IndexedCheckServiceNodes{ @@ -2220,7 +2258,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, { // Event with no nodes should clean up addrs - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "upstream-target:api.default.default.dc1:" + apiUID.String(), Result: &structs.IndexedCheckServiceNodes{ @@ -2244,12 +2282,13 @@ func TestState_WatchesAndUpdates(t *testing.T) { { // Empty list of upstreams should clean up map keys requiredWatches: map[string]verifyWatchRequest{ - intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), - intentionUpstreamsID: genVerifyServiceSpecificRequest("api", "", "dc1", false), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - leafWatchID: genVerifyLeafWatch("api", "dc1"), + rootsWatchID: genVerifyRootsWatch("dc1"), + intentionUpstreamsID: genVerifyServiceSpecificRequest(intentionUpstreamsID, + "api", "", "dc1", false), + leafWatchID: genVerifyLeafWatch("api", "dc1"), + intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: intentionUpstreamsID, Result: &structs.IndexedServiceList{ @@ -2310,9 +2349,12 @@ func TestState_WatchesAndUpdates(t *testing.T) { // Empty on initialization { requiredWatches: map[string]verifyWatchRequest{ - intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), - intentionUpstreamsID: genVerifyServiceSpecificRequest("api", "", "dc1", false), - meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), + rootsWatchID: genVerifyRootsWatch("dc1"), + intentionUpstreamsID: genVerifyServiceSpecificRequest(intentionUpstreamsID, + "api", "", "dc1", false), + leafWatchID: genVerifyLeafWatch("api", "dc1"), + intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), + meshConfigEntryID: genVerifyMeshConfigWatch("dc1"), "discovery-chain:" + upstreamIDForDC2(dbUID).String(): genVerifyDiscoveryChainWatch(&structs.DiscoveryChainRequest{ Name: "db", EvaluateInDatacenter: "dc2", @@ -2321,8 +2363,6 @@ func TestState_WatchesAndUpdates(t *testing.T) { Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{Mode: structs.MeshGatewayModeLocal}, }), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - leafWatchID: genVerifyLeafWatch("api", "dc1"), }, verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { require.False(t, snap.Valid(), "proxy without roots/leaf/intentions is not valid") @@ -2341,7 +2381,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, // Valid snapshot after roots, leaf, and intentions { - events: []UpdateEvent{ + events: []cache.UpdateEvent{ rootWatchEvent(), { CorrelationID: leafWatchID, @@ -2387,7 +2427,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { OverrideMeshGateway: structs.MeshGatewayConfig{Mode: structs.MeshGatewayModeLocal}, }), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: "discovery-chain:" + upstreamIDForDC2(dbUID).String(), Result: &structs.DiscoveryChainResponse{ @@ -2410,8 +2450,11 @@ func TestState_WatchesAndUpdates(t *testing.T) { // be deleted from the snapshot. { requiredWatches: map[string]verifyWatchRequest{ - intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), - intentionUpstreamsID: genVerifyServiceSpecificRequest("api", "", "dc1", false), + rootsWatchID: genVerifyRootsWatch("dc1"), + intentionUpstreamsID: genVerifyServiceSpecificRequest(intentionUpstreamsID, + "api", "", "dc1", false), + leafWatchID: genVerifyLeafWatch("api", "dc1"), + intentionsWatchID: genVerifyIntentionWatch("api", "dc1"), "discovery-chain:" + upstreamIDForDC2(dbUID).String(): genVerifyDiscoveryChainWatch(&structs.DiscoveryChainRequest{ Name: "db", EvaluateInDatacenter: "dc2", @@ -2420,10 +2463,8 @@ func TestState_WatchesAndUpdates(t *testing.T) { Datacenter: "dc1", OverrideMeshGateway: structs.MeshGatewayConfig{Mode: structs.MeshGatewayModeLocal}, }), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - leafWatchID: genVerifyLeafWatch("api", "dc1"), }, - events: []UpdateEvent{ + events: []cache.UpdateEvent{ { CorrelationID: intentionUpstreamsID, Result: &structs.IndexedServiceList{ @@ -2454,129 +2495,15 @@ func TestState_WatchesAndUpdates(t *testing.T) { }, "connect-proxy": newConnectProxyCase(structs.MeshGatewayModeDefault), "connect-proxy-mesh-gateway-local": newConnectProxyCase(structs.MeshGatewayModeLocal), - "connect-proxy-with-peers": { - ns: structs.NodeService{ - Kind: structs.ServiceKindConnectProxy, - ID: "web-sidecar-proxy", - Service: "web-sidecar-proxy", - Address: "10.0.1.1", - Port: 443, - Proxy: structs.ConnectProxyConfig{ - DestinationServiceName: "web", - Upstreams: structs.Upstreams{ - structs.Upstream{ - DestinationType: structs.UpstreamDestTypeService, - DestinationName: "api", - LocalBindPort: 10000, - }, - structs.Upstream{ - DestinationType: structs.UpstreamDestTypeService, - DestinationName: "api-a", - DestinationPeer: "peer-a", - LocalBindPort: 10001, - }, - }, - }, - }, - sourceDC: "dc1", - stages: []verificationStage{ - // First evaluate peered upstream - { - requiredWatches: map[string]verifyWatchRequest{ - fmt.Sprintf("discovery-chain:%s", apiUID.String()): genVerifyDiscoveryChainWatch(&structs.DiscoveryChainRequest{ - Name: "api", - EvaluateInDatacenter: "dc1", - EvaluateInNamespace: "default", - EvaluateInPartition: "default", - Datacenter: "dc1", - }), - rootsWatchID: genVerifyDCSpecificWatch("dc1"), - leafWatchID: genVerifyLeafWatch("web", "dc1"), - peerTrustBundleIDPrefix + "peer-a": genVerifyTrustBundleReadWatch("peer-a"), - // No Peering watch - }, - verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { - require.False(t, snap.Valid(), "should not be valid") - require.True(t, snap.MeshGateway.isEmpty()) - - // Even though there were no events to trigger the watches, - // the peered upstream is written to the maps - require.Len(t, snap.ConnectProxy.DiscoveryChain, 1, "%+v", snap.ConnectProxy.DiscoveryChain) - require.NotNil(t, snap.ConnectProxy.DiscoveryChain[extApiUID]) - require.Len(t, snap.ConnectProxy.WatchedDiscoveryChains, 1, "%+v", snap.ConnectProxy.WatchedDiscoveryChains) - require.NotNil(t, snap.ConnectProxy.WatchedDiscoveryChains[extApiUID]) - require.Len(t, snap.ConnectProxy.WatchedUpstreams, 1, "%+v", snap.ConnectProxy.WatchedUpstreams) - require.Len(t, snap.ConnectProxy.WatchedUpstreamEndpoints, 1, "%+v", snap.ConnectProxy.WatchedUpstreamEndpoints) - require.Len(t, snap.ConnectProxy.WatchedGateways, 1, "%+v", snap.ConnectProxy.WatchedGateways) - require.Len(t, snap.ConnectProxy.WatchedGatewayEndpoints, 1, "%+v", snap.ConnectProxy.WatchedGatewayEndpoints) - require.Contains(t, snap.ConnectProxy.WatchedPeerTrustBundles, "peer-a", "%+v", snap.ConnectProxy.WatchedPeerTrustBundles) - require.Len(t, snap.ConnectProxy.PeerTrustBundles, 0, "%+v", snap.ConnectProxy.PeerTrustBundles) - - require.Len(t, snap.ConnectProxy.WatchedServiceChecks, 0, "%+v", snap.ConnectProxy.WatchedServiceChecks) - require.Len(t, snap.ConnectProxy.PreparedQueryEndpoints, 0, "%+v", snap.ConnectProxy.PreparedQueryEndpoints) - }, - }, - { - // This time add the events - events: []UpdateEvent{ - rootWatchEvent(), - { - CorrelationID: leafWatchID, - Result: issuedCert, - Err: nil, - }, - { - CorrelationID: intentionsWatchID, - Result: TestIntentions(), - Err: nil, - }, - { - CorrelationID: meshConfigEntryID, - Result: &structs.ConfigEntryResponse{}, - }, - { - CorrelationID: fmt.Sprintf("discovery-chain:%s", apiUID.String()), - Result: &structs.DiscoveryChainResponse{ - Chain: discoverychain.TestCompileConfigEntries(t, "api", "default", "default", "dc1", "trustdomain.consul", nil), - }, - Err: nil, - }, - { - CorrelationID: peerTrustBundleIDPrefix + "peer-a", - Result: &pbpeering.TrustBundleReadResponse{ - Bundle: peerTrustBundles.Bundles[0], - }, - }, - }, - verifySnapshot: func(t testing.TB, snap *ConfigSnapshot) { - require.True(t, snap.Valid()) - require.True(t, snap.MeshGateway.isEmpty()) - require.Equal(t, indexedRoots, snap.Roots) - require.Equal(t, issuedCert, snap.ConnectProxy.Leaf) - - require.Len(t, snap.ConnectProxy.DiscoveryChain, 2, "%+v", snap.ConnectProxy.DiscoveryChain) - require.Len(t, snap.ConnectProxy.WatchedUpstreams, 2, "%+v", snap.ConnectProxy.WatchedUpstreams) - require.Len(t, snap.ConnectProxy.WatchedUpstreamEndpoints, 2, "%+v", snap.ConnectProxy.WatchedUpstreamEndpoints) - require.Len(t, snap.ConnectProxy.WatchedGateways, 2, "%+v", snap.ConnectProxy.WatchedGateways) - require.Len(t, snap.ConnectProxy.WatchedGatewayEndpoints, 2, "%+v", snap.ConnectProxy.WatchedGatewayEndpoints) - - require.Contains(t, snap.ConnectProxy.WatchedPeerTrustBundles, "peer-a", "%+v", snap.ConnectProxy.WatchedPeerTrustBundles) - require.Equal(t, peerTrustBundles.Bundles[0], snap.ConnectProxy.PeerTrustBundles["peer-a"], "%+v", snap.ConnectProxy.WatchedPeerTrustBundles) - - require.Len(t, snap.ConnectProxy.WatchedServiceChecks, 0, "%+v", snap.ConnectProxy.WatchedServiceChecks) - require.Len(t, snap.ConnectProxy.PreparedQueryEndpoints, 0, "%+v", snap.ConnectProxy.PreparedQueryEndpoints) - }, - }, - }, - }, } for name, tc := range cases { t.Run(name, func(t *testing.T) { - proxyID := ProxyID{ServiceID: tc.ns.CompoundServiceID()} - - sc := stateConfig{ + cn := newTestCacheNotifier() + state, err := newState(&tc.ns, "", stateConfig{ logger: testutil.Logger(t), + cache: cn, + health: &health.Client{Cache: cn, CacheName: cachetype.HealthServicesName}, source: &structs.QuerySource{ Datacenter: tc.sourceDC, }, @@ -2584,10 +2511,7 @@ func TestState_WatchesAndUpdates(t *testing.T) { Domain: "consul.", AltDomain: "alt.consul.", }, - } - wr := recordWatches(&sc) - - state, err := newState(proxyID, &tc.ns, testSource, "", sc) + }) // verify building the initial state worked require.NoError(t, err) @@ -2603,18 +2527,24 @@ func TestState_WatchesAndUpdates(t *testing.T) { snap, err := state.handler.initialize(ctx) require.NoError(t, err) - // -------------------------------------------------------------------- + //-------------------------------------------------------------------- // // All the nested subtests here are to make failures easier to // correlate back with the test table // - // -------------------------------------------------------------------- + //-------------------------------------------------------------------- for idx, stage := range tc.stages { require.True(t, t.Run(fmt.Sprintf("stage-%d", idx), func(t *testing.T) { for correlationId, verifier := range stage.requiredWatches { require.True(t, t.Run(correlationId, func(t *testing.T) { - wr.verify(t, correlationId, verifier) + // verify that the watch was initiated + cacheType, request := cn.verifyWatch(t, correlationId) + + // run the verifier if any + if verifier != nil { + verifier(t, cacheType, request) + } })) } diff --git a/agent/proxycfg/terminating_gateway.go b/agent/proxycfg/terminating_gateway.go index a9dbdb3916e93..73b968272fca6 100644 --- a/agent/proxycfg/terminating_gateway.go +++ b/agent/proxycfg/terminating_gateway.go @@ -5,6 +5,7 @@ import ( "fmt" "strings" + "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/structs" ) @@ -17,7 +18,7 @@ type handlerTerminatingGateway struct { func (s *handlerTerminatingGateway) initialize(ctx context.Context) (ConfigSnapshot, error) { snap := newConfigSnapshotFromServiceInstance(s.serviceInstance, s.stateConfig) // Watch for root changes - err := s.dataSources.CARoots.Notify(ctx, &structs.DCSpecificRequest{ + err := s.cache.Notify(ctx, cachetype.ConnectCARootName, &structs.DCSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Source: *s.source, @@ -28,7 +29,7 @@ func (s *handlerTerminatingGateway) initialize(ctx context.Context) (ConfigSnaps } // Get information about the entire service mesh. - err = s.dataSources.ConfigEntry.Notify(ctx, &structs.ConfigEntryQuery{ + err = s.cache.Notify(ctx, cachetype.ConfigEntryName, &structs.ConfigEntryQuery{ Kind: structs.MeshConfig, Name: structs.MeshConfigMesh, Datacenter: s.source.Datacenter, @@ -40,7 +41,7 @@ func (s *handlerTerminatingGateway) initialize(ctx context.Context) (ConfigSnaps } // Watch for the terminating-gateway's linked services - err = s.dataSources.GatewayServices.Notify(ctx, &structs.ServiceSpecificRequest{ + err = s.cache.Notify(ctx, cachetype.GatewayServicesName, &structs.ServiceSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, ServiceName: s.service, @@ -67,7 +68,7 @@ func (s *handlerTerminatingGateway) initialize(ctx context.Context) (ConfigSnaps return snap, nil } -func (s *handlerTerminatingGateway) handleUpdate(ctx context.Context, u UpdateEvent, snap *ConfigSnapshot) error { +func (s *handlerTerminatingGateway) handleUpdate(ctx context.Context, u cache.UpdateEvent, snap *ConfigSnapshot) error { if u.Err != nil { return fmt.Errorf("error filling agent cache: %v", u.Err) } @@ -116,7 +117,7 @@ func (s *handlerTerminatingGateway) handleUpdate(ctx context.Context, u UpdateEv // Watch the health endpoint to discover endpoints for the service if _, ok := snap.TerminatingGateway.WatchedServices[svc.Service]; !ok { ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.Health.Notify(ctx, &structs.ServiceSpecificRequest{ + err := s.health.Notify(ctx, structs.ServiceSpecificRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, ServiceName: svc.Service.Name, @@ -141,7 +142,7 @@ func (s *handlerTerminatingGateway) handleUpdate(ctx context.Context, u UpdateEv // The gateway will enforce intentions for connections to the service if _, ok := snap.TerminatingGateway.WatchedIntentions[svc.Service]; !ok { ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.Intentions.Notify(ctx, &structs.IntentionQueryRequest{ + err := s.cache.Notify(ctx, cachetype.IntentionMatchName, &structs.IntentionQueryRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Match: &structs.IntentionQueryMatch{ @@ -171,7 +172,7 @@ func (s *handlerTerminatingGateway) handleUpdate(ctx context.Context, u UpdateEv // This cert is used to terminate mTLS connections on the service's behalf if _, ok := snap.TerminatingGateway.WatchedLeaves[svc.Service]; !ok { ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.LeafCertificate.Notify(ctx, &cachetype.ConnectCALeafRequest{ + err := s.cache.Notify(ctx, cachetype.ConnectCALeafName, &cachetype.ConnectCALeafRequest{ Datacenter: s.source.Datacenter, Token: s.token, Service: svc.Service.Name, @@ -193,7 +194,7 @@ func (s *handlerTerminatingGateway) handleUpdate(ctx context.Context, u UpdateEv // These are used to determine the protocol for the target service. if _, ok := snap.TerminatingGateway.WatchedConfigs[svc.Service]; !ok { ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.ResolvedServiceConfig.Notify(ctx, &structs.ServiceConfigRequest{ + err := s.cache.Notify(ctx, cachetype.ResolvedServiceConfigName, &structs.ServiceConfigRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Name: svc.Service.Name, @@ -215,7 +216,7 @@ func (s *handlerTerminatingGateway) handleUpdate(ctx context.Context, u UpdateEv // These are used to create clusters and endpoints for the service subsets if _, ok := snap.TerminatingGateway.WatchedResolvers[svc.Service]; !ok { ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.ConfigEntry.Notify(ctx, &structs.ConfigEntryQuery{ + err := s.cache.Notify(ctx, cachetype.ConfigEntriesName, &structs.ConfigEntryQuery{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Kind: structs.ServiceResolver, @@ -339,15 +340,16 @@ func (s *handlerTerminatingGateway) handleUpdate(ctx context.Context, u UpdateEv snap.TerminatingGateway.ServiceConfigs[sn] = serviceConfig case strings.HasPrefix(u.CorrelationID, serviceResolverIDPrefix): - resp, ok := u.Result.(*structs.ConfigEntryResponse) + configEntries, ok := u.Result.(*structs.IndexedConfigEntries) if !ok { return fmt.Errorf("invalid type for response: %T", u.Result) } - sn := structs.ServiceNameFromString(strings.TrimPrefix(u.CorrelationID, serviceResolverIDPrefix)) // There should only ever be one entry for a service resolver within a namespace - if resolver, ok := resp.Entry.(*structs.ServiceResolverConfigEntry); ok { - snap.TerminatingGateway.ServiceResolvers[sn] = resolver + if len(configEntries.Entries) == 1 { + if resolver, ok := configEntries.Entries[0].(*structs.ServiceResolverConfigEntry); ok { + snap.TerminatingGateway.ServiceResolvers[sn] = resolver + } } snap.TerminatingGateway.ServiceResolversSet[sn] = true diff --git a/agent/proxycfg/testing.go b/agent/proxycfg/testing.go index 8f12ec8f39810..eb2ebfb0b2e52 100644 --- a/agent/proxycfg/testing.go +++ b/agent/proxycfg/testing.go @@ -20,56 +20,53 @@ import ( "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/proto/pbpeering" ) -func TestPeerTrustBundles(t testing.T) *pbpeering.TrustBundleListByServiceResponse { +// TestCacheTypes encapsulates all the different cache types proxycfg.State will +// watch/request for controlling one during testing. +type TestCacheTypes struct { + roots *ControllableCacheType + leaf *ControllableCacheType + intentions *ControllableCacheType + health *ControllableCacheType + query *ControllableCacheType + compiledChain *ControllableCacheType + serviceHTTPChecks *ControllableCacheType + configEntry *ControllableCacheType +} + +// NewTestCacheTypes creates a set of ControllableCacheTypes for all types that +// proxycfg will watch suitable for testing a proxycfg.State or Manager. +func NewTestCacheTypes(t testing.T) *TestCacheTypes { t.Helper() + ct := &TestCacheTypes{ + roots: NewControllableCacheType(t), + leaf: NewControllableCacheType(t), + intentions: NewControllableCacheType(t), + health: NewControllableCacheType(t), + query: NewControllableCacheType(t), + compiledChain: NewControllableCacheType(t), + serviceHTTPChecks: NewControllableCacheType(t), + configEntry: NewControllableCacheType(t), + } + ct.query.blocking = false + return ct +} + +// TestCacheWithTypes registers ControllableCacheTypes for all types that +// proxycfg will watch suitable for testing a proxycfg.State or Manager. +func TestCacheWithTypes(t testing.T, types *TestCacheTypes) *cache.Cache { + c := cache.New(cache.Options{}) + c.RegisterType(cachetype.ConnectCARootName, types.roots) + c.RegisterType(cachetype.ConnectCALeafName, types.leaf) + c.RegisterType(cachetype.IntentionMatchName, types.intentions) + c.RegisterType(cachetype.HealthServicesName, types.health) + c.RegisterType(cachetype.PreparedQueryName, types.query) + c.RegisterType(cachetype.CompiledDiscoveryChainName, types.compiledChain) + c.RegisterType(cachetype.ServiceHTTPChecksName, types.serviceHTTPChecks) + c.RegisterType(cachetype.ConfigEntryName, types.configEntry) - return &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{ - { - PeerName: "peer-a", - TrustDomain: "1c053652-8512-4373-90cf-5a7f6263a994.consul", - RootPEMs: []string{`-----BEGIN CERTIFICATE----- -MIICczCCAdwCCQC3BLnEmLCrSjANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV -UzELMAkGA1UECAwCQVoxEjAQBgNVBAcMCUZsYWdzdGFmZjEMMAoGA1UECgwDRm9v -MRAwDgYDVQQLDAdleGFtcGxlMQ8wDQYDVQQDDAZwZWVyLWExHTAbBgkqhkiG9w0B -CQEWDmZvb0BwZWVyLWEuY29tMB4XDTIyMDUyNjAxMDQ0NFoXDTIzMDUyNjAxMDQ0 -NFowfjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkFaMRIwEAYDVQQHDAlGbGFnc3Rh -ZmYxDDAKBgNVBAoMA0ZvbzEQMA4GA1UECwwHZXhhbXBsZTEPMA0GA1UEAwwGcGVl -ci1hMR0wGwYJKoZIhvcNAQkBFg5mb29AcGVlci1hLmNvbTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA2zFYGTbXDAntT5pLTpZ2+VTiqx4J63VRJH1kdu11f0FV -c2jl1pqCuYDbQXknDU0Pv1Q5y0+nSAihD2KqGS571r+vHQiPtKYPYRqPEe9FzAhR -2KhWH6v/tk5DG1HqOjV9/zWRKB12gdFNZZqnw/e7NjLNq3wZ2UAwxXip5uJ8uwMC -AwEAATANBgkqhkiG9w0BAQsFAAOBgQC/CJ9Syf4aL91wZizKTejwouRYoWv4gRAk -yto45ZcNMHfJ0G2z+XAMl9ZbQsLgXmzAx4IM6y5Jckq8pKC4PEijCjlKTktLHlEy -0ggmFxtNB1tid2NC8dOzcQ3l45+gDjDqdILhAvLDjlAIebdkqVqb2CfFNW/I2CQH -ZAuKN1aoKA== ------END CERTIFICATE-----`}, - }, - { - PeerName: "peer-b", - TrustDomain: "d89ac423-e95a-475d-94f2-1c557c57bf31.consul", - RootPEMs: []string{`-----BEGIN CERTIFICATE----- -MIICcTCCAdoCCQDyGxC08cD0BDANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJV -UzELMAkGA1UECAwCQ0ExETAPBgNVBAcMCENhcmxzYmFkMQwwCgYDVQQKDANGb28x -EDAOBgNVBAsMB2V4YW1wbGUxDzANBgNVBAMMBnBlZXItYjEdMBsGCSqGSIb3DQEJ -ARYOZm9vQHBlZXItYi5jb20wHhcNMjIwNTI2MDExNjE2WhcNMjMwNTI2MDExNjE2 -WjB9MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExETAPBgNVBAcMCENhcmxzYmFk -MQwwCgYDVQQKDANGb28xEDAOBgNVBAsMB2V4YW1wbGUxDzANBgNVBAMMBnBlZXIt -YjEdMBsGCSqGSIb3DQEJARYOZm9vQHBlZXItYi5jb20wgZ8wDQYJKoZIhvcNAQEB -BQADgY0AMIGJAoGBAL4i5erdZ5vKk3mzW9Qt6Wvw/WN/IpMDlL0a28wz9oDCtMLN -cD/XQB9yT5jUwb2s4mD1lCDZtee8MHeD8zygICozufWVB+u2KvMaoA50T9GMQD0E -z/0nz/Z703I4q13VHeTpltmEpYcfxw/7nJ3leKA34+Nj3zteJ70iqvD/TNBBAgMB -AAEwDQYJKoZIhvcNAQELBQADgYEAbL04gicH+EIznDNhZJEb1guMBtBBJ8kujPyU -ao8xhlUuorDTLwhLpkKsOhD8619oSS8KynjEBichidQRkwxIaze0a2mrGT+tGBMf -pVz6UeCkqpde6bSJ/ozEe/2seQzKqYvRT1oUjLwYvY7OIh2DzYibOAxh6fewYAmU -5j5qNLc= ------END CERTIFICATE-----`}, - }, - }, - } + return c } // TestCerts generates a CA and Leaf suitable for returning as mock CA @@ -671,9 +668,19 @@ func TestGatewayServiceGroupFooDC1(t testing.T) structs.CheckServiceNodes { } } -type noopDataSource[ReqType any] struct{} +type noopCacheNotifier struct{} + +var _ CacheNotifier = (*noopCacheNotifier)(nil) -func (*noopDataSource[ReqType]) Notify(context.Context, ReqType, string, chan<- UpdateEvent) error { +func (*noopCacheNotifier) Notify(_ context.Context, _ string, _ cache.Request, _ string, _ chan<- cache.UpdateEvent) error { + return nil +} + +type noopHealth struct{} + +var _ Health = (*noopHealth)(nil) + +func (*noopHealth) Notify(_ context.Context, _ structs.ServiceSpecificRequest, _ string, _ chan<- cache.UpdateEvent) error { return nil } @@ -691,7 +698,7 @@ func testConfigSnapshotFixture( ns *structs.NodeService, nsFn func(ns *structs.NodeService), serverSNIFn ServerSNIFunc, - updates []UpdateEvent, + updates []cache.UpdateEvent, ) *ConfigSnapshot { const token = "" @@ -704,25 +711,8 @@ func testConfigSnapshotFixture( source: &structs.QuerySource{ Datacenter: "dc1", }, - dataSources: DataSources{ - CARoots: &noopDataSource[*structs.DCSpecificRequest]{}, - CompiledDiscoveryChain: &noopDataSource[*structs.DiscoveryChainRequest]{}, - ConfigEntry: &noopDataSource[*structs.ConfigEntryQuery]{}, - ConfigEntryList: &noopDataSource[*structs.ConfigEntryQuery]{}, - Datacenters: &noopDataSource[*structs.DatacentersRequest]{}, - FederationStateListMeshGateways: &noopDataSource[*structs.DCSpecificRequest]{}, - GatewayServices: &noopDataSource[*structs.ServiceSpecificRequest]{}, - Health: &noopDataSource[*structs.ServiceSpecificRequest]{}, - HTTPChecks: &noopDataSource[*cachetype.ServiceHTTPChecksRequest]{}, - Intentions: &noopDataSource[*structs.IntentionQueryRequest]{}, - IntentionUpstreams: &noopDataSource[*structs.ServiceSpecificRequest]{}, - InternalServiceDump: &noopDataSource[*structs.ServiceDumpRequest]{}, - LeafCertificate: &noopDataSource[*cachetype.ConnectCALeafRequest]{}, - PreparedQuery: &noopDataSource[*structs.PreparedQueryExecuteRequest]{}, - ResolvedServiceConfig: &noopDataSource[*structs.ServiceConfigRequest]{}, - ServiceList: &noopDataSource[*structs.DCSpecificRequest]{}, - TrustBundle: &noopDataSource[*pbpeering.TrustBundleReadRequest]{}, - }, + cache: &noopCacheNotifier{}, + health: &noopHealth{}, dnsConfig: DNSConfig{ // TODO: make configurable Domain: "consul", AltDomain: "", @@ -730,8 +720,7 @@ func testConfigSnapshotFixture( serverSNIFn: serverSNIFn, intentionDefaultAllow: false, // TODO: make configurable } - testConfigSnapshotFixtureEnterprise(&config) - s, err := newServiceInstanceFromNodeService(ProxyID{ServiceID: ns.CompoundServiceID()}, ns, token) + s, err := newServiceInstanceFromNodeService(ns, token) if err != nil { t.Fatalf("err: %v", err) return nil @@ -761,15 +750,15 @@ func testConfigSnapshotFixture( return &snap } -func testSpliceEvents(base, extra []UpdateEvent) []UpdateEvent { +func testSpliceEvents(base, extra []cache.UpdateEvent) []cache.UpdateEvent { if len(extra) == 0 { return base } var ( - hasExtra = make(map[string]UpdateEvent) + hasExtra = make(map[string]cache.UpdateEvent) completeExtra = make(map[string]struct{}) - allEvents []UpdateEvent + allEvents []cache.UpdateEvent ) for _, e := range extra { @@ -900,160 +889,3 @@ func projectRoot() string { _, base, _, _ := runtime.Caller(0) return filepath.Dir(base) } - -// NewTestDataSources creates a set of data sources that can be used to provide -// the Manager with data in tests. -func NewTestDataSources() *TestDataSources { - srcs := &TestDataSources{ - CARoots: NewTestDataSource[*structs.DCSpecificRequest, *structs.IndexedCARoots](), - CompiledDiscoveryChain: NewTestDataSource[*structs.DiscoveryChainRequest, *structs.DiscoveryChainResponse](), - ConfigEntry: NewTestDataSource[*structs.ConfigEntryQuery, *structs.ConfigEntryResponse](), - ConfigEntryList: NewTestDataSource[*structs.ConfigEntryQuery, *structs.IndexedConfigEntries](), - Datacenters: NewTestDataSource[*structs.DatacentersRequest, *[]string](), - FederationStateListMeshGateways: NewTestDataSource[*structs.DCSpecificRequest, *structs.DatacenterIndexedCheckServiceNodes](), - GatewayServices: NewTestDataSource[*structs.ServiceSpecificRequest, *structs.IndexedGatewayServices](), - Health: NewTestDataSource[*structs.ServiceSpecificRequest, *structs.IndexedCheckServiceNodes](), - HTTPChecks: NewTestDataSource[*cachetype.ServiceHTTPChecksRequest, []structs.CheckType](), - Intentions: NewTestDataSource[*structs.IntentionQueryRequest, *structs.IndexedIntentionMatches](), - IntentionUpstreams: NewTestDataSource[*structs.ServiceSpecificRequest, *structs.IndexedServiceList](), - InternalServiceDump: NewTestDataSource[*structs.ServiceDumpRequest, *structs.IndexedNodesWithGateways](), - LeafCertificate: NewTestDataSource[*cachetype.ConnectCALeafRequest, *structs.IssuedCert](), - PreparedQuery: NewTestDataSource[*structs.PreparedQueryExecuteRequest, *structs.PreparedQueryExecuteResponse](), - ResolvedServiceConfig: NewTestDataSource[*structs.ServiceConfigRequest, *structs.ServiceConfigResponse](), - ServiceList: NewTestDataSource[*structs.DCSpecificRequest, *structs.IndexedServiceList](), - TrustBundle: NewTestDataSource[*pbpeering.TrustBundleReadRequest, *pbpeering.TrustBundleReadResponse](), - } - srcs.buildEnterpriseSources() - return srcs -} - -type TestDataSources struct { - CARoots *TestDataSource[*structs.DCSpecificRequest, *structs.IndexedCARoots] - CompiledDiscoveryChain *TestDataSource[*structs.DiscoveryChainRequest, *structs.DiscoveryChainResponse] - ConfigEntry *TestDataSource[*structs.ConfigEntryQuery, *structs.ConfigEntryResponse] - ConfigEntryList *TestDataSource[*structs.ConfigEntryQuery, *structs.IndexedConfigEntries] - FederationStateListMeshGateways *TestDataSource[*structs.DCSpecificRequest, *structs.DatacenterIndexedCheckServiceNodes] - Datacenters *TestDataSource[*structs.DatacentersRequest, *[]string] - GatewayServices *TestDataSource[*structs.ServiceSpecificRequest, *structs.IndexedGatewayServices] - Health *TestDataSource[*structs.ServiceSpecificRequest, *structs.IndexedCheckServiceNodes] - HTTPChecks *TestDataSource[*cachetype.ServiceHTTPChecksRequest, []structs.CheckType] - Intentions *TestDataSource[*structs.IntentionQueryRequest, *structs.IndexedIntentionMatches] - IntentionUpstreams *TestDataSource[*structs.ServiceSpecificRequest, *structs.IndexedServiceList] - InternalServiceDump *TestDataSource[*structs.ServiceDumpRequest, *structs.IndexedNodesWithGateways] - LeafCertificate *TestDataSource[*cachetype.ConnectCALeafRequest, *structs.IssuedCert] - PreparedQuery *TestDataSource[*structs.PreparedQueryExecuteRequest, *structs.PreparedQueryExecuteResponse] - ResolvedServiceConfig *TestDataSource[*structs.ServiceConfigRequest, *structs.ServiceConfigResponse] - ServiceList *TestDataSource[*structs.DCSpecificRequest, *structs.IndexedServiceList] - TrustBundle *TestDataSource[*pbpeering.TrustBundleReadRequest, *pbpeering.TrustBundleReadResponse] -} - -func (t *TestDataSources) ToDataSources() DataSources { - ds := DataSources{ - CARoots: t.CARoots, - CompiledDiscoveryChain: t.CompiledDiscoveryChain, - ConfigEntry: t.ConfigEntry, - ConfigEntryList: t.ConfigEntryList, - Datacenters: t.Datacenters, - GatewayServices: t.GatewayServices, - Health: t.Health, - HTTPChecks: t.HTTPChecks, - Intentions: t.Intentions, - IntentionUpstreams: t.IntentionUpstreams, - InternalServiceDump: t.InternalServiceDump, - LeafCertificate: t.LeafCertificate, - PreparedQuery: t.PreparedQuery, - ResolvedServiceConfig: t.ResolvedServiceConfig, - ServiceList: t.ServiceList, - TrustBundle: t.TrustBundle, - } - t.fillEnterpriseDataSources(&ds) - return ds -} - -// NewTestDataSource creates a test data source that accepts requests to Notify -// of type RequestType and dispatches UpdateEvents with a result of type ValType. -// -// TODO(agentless): we still depend on cache.Request here because it provides the -// CacheInfo method used for hashing the request - this won't work when we extract -// this package into a shared library. -func NewTestDataSource[ReqType cache.Request, ValType any]() *TestDataSource[ReqType, ValType] { - return &TestDataSource[ReqType, ValType]{ - data: make(map[string]ValType), - trigger: make(chan struct{}), - } -} - -type TestDataSource[ReqType cache.Request, ValType any] struct { - mu sync.Mutex - data map[string]ValType - lastReq ReqType - - // Note: trigger is currently global for all requests of the given type, so - // Manager may receive duplicate events - as the dispatch goroutine will be - // woken up whenever *any* requested data changes. - trigger chan struct{} -} - -// Notify satisfies the interfaces used by Manager to subscribe to data. -func (t *TestDataSource[ReqType, ValType]) Notify(ctx context.Context, req ReqType, correlationID string, ch chan<- UpdateEvent) error { - t.mu.Lock() - t.lastReq = req - t.mu.Unlock() - - go t.dispatch(ctx, correlationID, t.reqKey(req), ch) - - return nil -} - -func (t *TestDataSource[ReqType, ValType]) dispatch(ctx context.Context, correlationID, key string, ch chan<- UpdateEvent) { - for { - t.mu.Lock() - val, ok := t.data[key] - trigger := t.trigger - t.mu.Unlock() - - if ok { - event := UpdateEvent{ - CorrelationID: correlationID, - Result: val, - } - - select { - case ch <- event: - case <-ctx.Done(): - } - } - - select { - case <-trigger: - case <-ctx.Done(): - return - } - } -} - -func (t *TestDataSource[ReqType, ValType]) reqKey(req ReqType) string { - return req.CacheInfo().Key -} - -// Set broadcasts the given value to consumers that subscribed with the given -// request. -func (t *TestDataSource[ReqType, ValType]) Set(req ReqType, val ValType) error { - t.mu.Lock() - t.data[t.reqKey(req)] = val - oldTrigger := t.trigger - t.trigger = make(chan struct{}) - t.mu.Unlock() - - close(oldTrigger) - - return nil -} - -// LastReq returns the request from the last call to Notify that was received. -func (t *TestDataSource[ReqType, ValType]) LastReq() ReqType { - t.mu.Lock() - defer t.mu.Unlock() - - return t.lastReq -} diff --git a/agent/proxycfg/testing_connect_proxy.go b/agent/proxycfg/testing_connect_proxy.go index 2e34e7d352ba2..61db728c2fb3b 100644 --- a/agent/proxycfg/testing_connect_proxy.go +++ b/agent/proxycfg/testing_connect_proxy.go @@ -4,13 +4,14 @@ import ( "github.com/mitchellh/go-testing-interface" "github.com/stretchr/testify/assert" + "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/structs" ) // TestConfigSnapshot returns a fully populated snapshot -func TestConfigSnapshot(t testing.T, nsFn func(ns *structs.NodeService), extraUpdates []UpdateEvent) *ConfigSnapshot { +func TestConfigSnapshot(t testing.T, nsFn func(ns *structs.NodeService), extraUpdates []cache.UpdateEvent) *ConfigSnapshot { roots, leaf := TestCerts(t) // no entries implies we'll get a default chain @@ -28,7 +29,7 @@ func TestConfigSnapshot(t testing.T, nsFn func(ns *structs.NodeService), extraUp webSN = structs.ServiceIDString("web", nil) ) - baseEvents := []UpdateEvent{ + baseEvents := []cache.UpdateEvent{ { CorrelationID: rootsWatchID, Result: roots, @@ -93,7 +94,7 @@ func TestConfigSnapshotDiscoveryChain( t testing.T, variation string, nsFn func(ns *structs.NodeService), - extraUpdates []UpdateEvent, + extraUpdates []cache.UpdateEvent, additionalEntries ...structs.ConfigEntry, ) *ConfigSnapshot { roots, leaf := TestCerts(t) @@ -107,7 +108,7 @@ func TestConfigSnapshotDiscoveryChain( webSN = structs.ServiceIDString("web", nil) ) - baseEvents := testSpliceEvents([]UpdateEvent{ + baseEvents := testSpliceEvents([]cache.UpdateEvent{ { CorrelationID: rootsWatchID, Result: roots, @@ -170,7 +171,7 @@ func TestConfigSnapshotExposeConfig(t testing.T, nsFn func(ns *structs.NodeServi webSN = structs.ServiceIDString("web", nil) ) - baseEvents := []UpdateEvent{ + baseEvents := []cache.UpdateEvent{ { CorrelationID: rootsWatchID, Result: roots, @@ -251,7 +252,7 @@ func TestConfigSnapshotGRPCExposeHTTP1(t testing.T) *ConfigSnapshot { }, Meta: nil, TaggedAddresses: nil, - }, nil, nil, []UpdateEvent{ + }, nil, nil, []cache.UpdateEvent{ { CorrelationID: rootsWatchID, Result: roots, diff --git a/agent/proxycfg/testing_ingress_gateway.go b/agent/proxycfg/testing_ingress_gateway.go index 6846bb8a3193b..7a37e44ec016f 100644 --- a/agent/proxycfg/testing_ingress_gateway.go +++ b/agent/proxycfg/testing_ingress_gateway.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/structs" @@ -20,7 +21,7 @@ func TestConfigSnapshotIngressGateway( variation string, nsFn func(ns *structs.NodeService), configFn func(entry *structs.IngressGatewayConfigEntry), - extraUpdates []UpdateEvent, + extraUpdates []cache.UpdateEvent, additionalEntries ...structs.ConfigEntry, ) *ConfigSnapshot { roots, placeholderLeaf := TestCerts(t) @@ -46,7 +47,7 @@ func TestConfigSnapshotIngressGateway( configFn(entry) } - baseEvents := []UpdateEvent{ + baseEvents := []cache.UpdateEvent{ { CorrelationID: rootsWatchID, Result: roots, @@ -70,7 +71,7 @@ func TestConfigSnapshotIngressGateway( } if populateServices { - baseEvents = testSpliceEvents(baseEvents, []UpdateEvent{{ + baseEvents = testSpliceEvents(baseEvents, []cache.UpdateEvent{{ CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ Services: []*structs.GatewayService{ @@ -154,7 +155,7 @@ func TestConfigSnapshotIngressGatewaySDS_GatewayLevel_MixedTLS(t testing.T) *Con }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -269,7 +270,7 @@ func TestConfigSnapshotIngressGatewaySDS_GatewayAndListenerLevel_HTTP(t testing. }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -343,7 +344,7 @@ func TestConfigSnapshotIngressGatewaySDS_ServiceLevel(t testing.T) *ConfigSnapsh }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -433,7 +434,7 @@ func TestConfigSnapshotIngressGatewaySDS_ListenerAndServiceLevel(t testing.T) *C }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -518,7 +519,7 @@ func TestConfigSnapshotIngressGatewaySDS_MixedNoTLS(t testing.T) *ConfigSnapshot }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -600,7 +601,7 @@ func TestConfigSnapshotIngressGateway_MixedListeners(t testing.T) *ConfigSnapsho }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -716,7 +717,7 @@ func TestConfigSnapshotIngress_HTTPMultipleServices(t testing.T) *ConfigSnapshot }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -853,7 +854,7 @@ func TestConfigSnapshotIngress_GRPCMultipleServices(t testing.T) *ConfigSnapshot }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -932,7 +933,7 @@ func TestConfigSnapshotIngress_MultipleListenersDuplicateService(t testing.T) *C }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -995,7 +996,7 @@ func TestConfigSnapshotIngressGatewayWithChain( } var ( - updates []UpdateEvent + updates []cache.UpdateEvent configFn func(entry *structs.IngressGatewayConfigEntry) populateServices bool @@ -1190,7 +1191,7 @@ func TestConfigSnapshotIngressGatewayWithChain( fooEntMeta.PartitionOrDefault(), "dc1", connect.TestClusterID+".consul", nil, entries...) - updates = []UpdateEvent{ + updates = []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -1320,7 +1321,7 @@ func TestConfigSnapshotIngressGateway_TLSMinVersionListenersGatewayDefaults(t te }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -1438,7 +1439,7 @@ func TestConfigSnapshotIngressGateway_SingleTLSListener(t testing.T) *ConfigSnap }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -1538,7 +1539,7 @@ func TestConfigSnapshotIngressGateway_TLSMixedMinVersionListeners(t testing.T) * }, }, } - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ diff --git a/agent/proxycfg/testing_mesh_gateway.go b/agent/proxycfg/testing_mesh_gateway.go index c5baaea2f3da6..c374a9aad2484 100644 --- a/agent/proxycfg/testing_mesh_gateway.go +++ b/agent/proxycfg/testing_mesh_gateway.go @@ -6,10 +6,11 @@ import ( "github.com/mitchellh/go-testing-interface" + "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/structs" ) -func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *structs.NodeService), extraUpdates []UpdateEvent) *ConfigSnapshot { +func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *structs.NodeService), extraUpdates []cache.UpdateEvent) *ConfigSnapshot { roots, _ := TestCerts(t) var ( @@ -37,7 +38,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st useFederationStates = false deleteCrossDCEntry = false case "service-subsets": - extraUpdates = append(extraUpdates, UpdateEvent{ + extraUpdates = append(extraUpdates, cache.UpdateEvent{ CorrelationID: serviceResolversWatchID, Result: &structs.IndexedConfigEntries{ Kind: structs.ServiceResolver, @@ -59,7 +60,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st }, }) case "service-subsets2": // TODO(rb): make this merge with 'service-subsets' - extraUpdates = append(extraUpdates, UpdateEvent{ + extraUpdates = append(extraUpdates, cache.UpdateEvent{ CorrelationID: serviceResolversWatchID, Result: &structs.IndexedConfigEntries{ Kind: structs.ServiceResolver, @@ -94,7 +95,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st }, }) case "default-service-subsets2": // TODO(rb): rename to strip the 2 when the prior is merged with 'service-subsets' - extraUpdates = append(extraUpdates, UpdateEvent{ + extraUpdates = append(extraUpdates, cache.UpdateEvent{ CorrelationID: serviceResolversWatchID, Result: &structs.IndexedConfigEntries{ Kind: structs.ServiceResolver, @@ -131,7 +132,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st }, }) case "ignore-extra-resolvers": - extraUpdates = append(extraUpdates, UpdateEvent{ + extraUpdates = append(extraUpdates, cache.UpdateEvent{ CorrelationID: serviceResolversWatchID, Result: &structs.IndexedConfigEntries{ Kind: structs.ServiceResolver, @@ -168,7 +169,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st }, }) case "service-timeouts": - extraUpdates = append(extraUpdates, UpdateEvent{ + extraUpdates = append(extraUpdates, cache.UpdateEvent{ CorrelationID: serviceResolversWatchID, Result: &structs.IndexedConfigEntries{ Kind: structs.ServiceResolver, @@ -191,7 +192,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st }, }) case "non-hash-lb-injected": - extraUpdates = append(extraUpdates, UpdateEvent{ + extraUpdates = append(extraUpdates, cache.UpdateEvent{ CorrelationID: "service-resolvers", // serviceResolversWatchID Result: &structs.IndexedConfigEntries{ Kind: structs.ServiceResolver, @@ -219,7 +220,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st }, }) case "hash-lb-ignored": - extraUpdates = append(extraUpdates, UpdateEvent{ + extraUpdates = append(extraUpdates, cache.UpdateEvent{ CorrelationID: "service-resolvers", // serviceResolversWatchID Result: &structs.IndexedConfigEntries{ Kind: structs.ServiceResolver, @@ -252,7 +253,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st return nil } - baseEvents := []UpdateEvent{ + baseEvents := []cache.UpdateEvent{ { CorrelationID: rootsWatchID, Result: roots, @@ -277,7 +278,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st } if populateServices || useFederationStates { - baseEvents = testSpliceEvents(baseEvents, []UpdateEvent{ + baseEvents = testSpliceEvents(baseEvents, []cache.UpdateEvent{ { CorrelationID: datacentersWatchID, Result: &[]string{"dc1", "dc2", "dc4", "dc6"}, @@ -290,7 +291,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st foo = structs.NewServiceName("foo", nil) bar = structs.NewServiceName("bar", nil) ) - baseEvents = testSpliceEvents(baseEvents, []UpdateEvent{ + baseEvents = testSpliceEvents(baseEvents, []cache.UpdateEvent{ { CorrelationID: "mesh-gateway:dc2", Result: &structs.IndexedNodesWithGateways{ @@ -348,7 +349,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st }) if deleteCrossDCEntry { - baseEvents = testSpliceEvents(baseEvents, []UpdateEvent{ + baseEvents = testSpliceEvents(baseEvents, []cache.UpdateEvent{ { // Have the cross-dc query mechanism not work for dc2 so // fedstates will infill. @@ -398,7 +399,7 @@ func TestConfigSnapshotMeshGateway(t testing.T, variant string, nsFn func(ns *st } } - baseEvents = testSpliceEvents(baseEvents, []UpdateEvent{ + baseEvents = testSpliceEvents(baseEvents, []cache.UpdateEvent{ { CorrelationID: federationStateListGatewaysWatchID, Result: &structs.DatacenterIndexedCheckServiceNodes{ diff --git a/agent/proxycfg/testing_oss.go b/agent/proxycfg/testing_oss.go deleted file mode 100644 index 11f9a6adeb7f2..0000000000000 --- a/agent/proxycfg/testing_oss.go +++ /dev/null @@ -1,12 +0,0 @@ -//go:build !consulent -// +build !consulent - -package proxycfg - -type TestDataSourcesEnterprise struct{} - -func (*TestDataSources) buildEnterpriseSources() {} - -func (*TestDataSources) fillEnterpriseDataSources(*DataSources) {} - -func testConfigSnapshotFixtureEnterprise(*stateConfig) {} diff --git a/agent/proxycfg/testing_peering.go b/agent/proxycfg/testing_peering.go deleted file mode 100644 index 09043c3421e96..0000000000000 --- a/agent/proxycfg/testing_peering.go +++ /dev/null @@ -1,86 +0,0 @@ -package proxycfg - -import ( - "github.com/mitchellh/go-testing-interface" - - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" -) - -func TestConfigSnapshotPeering(t testing.T) *ConfigSnapshot { - var ( - paymentsUpstream = structs.Upstream{ - DestinationName: "payments", - DestinationPeer: "cloud", - LocalBindPort: 9090, - } - paymentsUID = NewUpstreamID(&paymentsUpstream) - - refundsUpstream = structs.Upstream{ - DestinationName: "refunds", - DestinationPeer: "cloud", - LocalBindPort: 9090, - } - refundsUID = NewUpstreamID(&refundsUpstream) - ) - - return TestConfigSnapshot(t, func(ns *structs.NodeService) { - ns.Proxy.Upstreams = structs.Upstreams{ - paymentsUpstream, - refundsUpstream, - } - }, []UpdateEvent{ - { - CorrelationID: peerTrustBundleIDPrefix + "cloud", - Result: &pbpeering.TrustBundleReadResponse{ - Bundle: TestPeerTrustBundles(t).Bundles[0], - }, - }, - { - CorrelationID: "upstream-target:payments.default.default.dc1:" + paymentsUID.String(), - Result: &structs.IndexedCheckServiceNodes{ - Nodes: []structs.CheckServiceNode{ - { - Node: &structs.Node{ - Address: "85.252.102.31", - Datacenter: "cloud-dc", - }, - Service: &structs.NodeService{ - Service: "payments-sidecar-proxy", - Kind: structs.ServiceKindConnectProxy, - Port: 443, - Connect: structs.ServiceConnect{ - PeerMeta: &structs.PeeringServiceMeta{ - SpiffeID: []string{"spiffe://1c053652-8512-4373-90cf-5a7f6263a994.consul/ns/default/dc/cloud-dc/svc/payments"}, - }, - }, - }, - }, - }, - }, - }, - { - CorrelationID: "upstream-target:refunds.default.default.dc1:" + refundsUID.String(), - Result: &structs.IndexedCheckServiceNodes{ - Nodes: []structs.CheckServiceNode{ - { - Node: &structs.Node{ - Address: "106.96.90.233", - Datacenter: "cloud-dc", - }, - Service: &structs.NodeService{ - Service: "refunds-sidecar-proxy", - Kind: structs.ServiceKindConnectProxy, - Port: 443, - Connect: structs.ServiceConnect{ - PeerMeta: &structs.PeeringServiceMeta{ - SpiffeID: []string{"spiffe://1c053652-8512-4373-90cf-5a7f6263a994.consul/ns/default/dc/cloud-dc/svc/refunds"}, - }, - }, - }, - }, - }, - }, - }, - }) -} diff --git a/agent/proxycfg/testing_terminating_gateway.go b/agent/proxycfg/testing_terminating_gateway.go index e7b8c7b45963a..38c0245a2bea9 100644 --- a/agent/proxycfg/testing_terminating_gateway.go +++ b/agent/proxycfg/testing_terminating_gateway.go @@ -3,6 +3,8 @@ package proxycfg import ( "github.com/mitchellh/go-testing-interface" + "github.com/hashicorp/consul/agent/cache" + agentcache "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/structs" ) @@ -10,7 +12,7 @@ func TestConfigSnapshotTerminatingGateway( t testing.T, populateServices bool, nsFn func(ns *structs.NodeService), - extraUpdates []UpdateEvent, + extraUpdates []agentcache.UpdateEvent, ) *ConfigSnapshot { roots, _ := TestCerts(t) @@ -21,7 +23,7 @@ func TestConfigSnapshotTerminatingGateway( cache = structs.NewServiceName("cache", nil) ) - baseEvents := []UpdateEvent{ + baseEvents := []agentcache.UpdateEvent{ { CorrelationID: rootsWatchID, Result: roots, @@ -156,7 +158,7 @@ func TestConfigSnapshotTerminatingGateway( }, } - baseEvents = testSpliceEvents(baseEvents, []UpdateEvent{ + baseEvents = testSpliceEvents(baseEvents, []agentcache.UpdateEvent{ { CorrelationID: gatewayServicesWatchID, Result: &structs.IndexedGatewayServices{ @@ -295,34 +297,30 @@ func TestConfigSnapshotTerminatingGateway( // ======== { CorrelationID: serviceResolverIDPrefix + web.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - }, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: nil, }, }, { CorrelationID: serviceResolverIDPrefix + api.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - }, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: nil, }, }, { CorrelationID: serviceResolverIDPrefix + db.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - }, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: nil, }, }, { CorrelationID: serviceResolverIDPrefix + cache.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - }, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: nil, }, }, }) @@ -354,20 +352,23 @@ func testConfigSnapshotTerminatingGatewayServiceSubsets(t testing.T, alsoAdjustC cache = structs.NewServiceName("cache", nil) ) - events := []UpdateEvent{ + events := []agentcache.UpdateEvent{ { CorrelationID: serviceResolverIDPrefix + web.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "web", - Subsets: map[string]structs.ServiceResolverSubset{ - "v1": { - Filter: "Service.Meta.version == 1", - }, - "v2": { - Filter: "Service.Meta.version == 2", - OnlyPassing: true, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "web", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.version == 1", + }, + "v2": { + Filter: "Service.Meta.version == 2", + OnlyPassing: true, + }, }, }, }, @@ -382,16 +383,19 @@ func testConfigSnapshotTerminatingGatewayServiceSubsets(t testing.T, alsoAdjustC } if alsoAdjustCache { - events = testSpliceEvents(events, []UpdateEvent{ + events = testSpliceEvents(events, []agentcache.UpdateEvent{ { CorrelationID: serviceResolverIDPrefix + cache.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "cache", - Subsets: map[string]structs.ServiceResolverSubset{ - "prod": { - Filter: "Service.Meta.Env == prod", + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "cache", + Subsets: map[string]structs.ServiceResolverSubset{ + "prod": { + Filter: "Service.Meta.Env == prod", + }, }, }, }, @@ -412,21 +416,24 @@ func testConfigSnapshotTerminatingGatewayServiceSubsets(t testing.T, alsoAdjustC func TestConfigSnapshotTerminatingGatewayDefaultServiceSubset(t testing.T) *ConfigSnapshot { web := structs.NewServiceName("web", nil) - return TestConfigSnapshotTerminatingGateway(t, true, nil, []UpdateEvent{ + return TestConfigSnapshotTerminatingGateway(t, true, nil, []agentcache.UpdateEvent{ { CorrelationID: serviceResolverIDPrefix + web.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "web", - DefaultSubset: "v2", - Subsets: map[string]structs.ServiceResolverSubset{ - "v1": { - Filter: "Service.Meta.version == 1", - }, - "v2": { - Filter: "Service.Meta.version == 2", - OnlyPassing: true, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "web", + DefaultSubset: "v2", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.version == 1", + }, + "v2": { + Filter: "Service.Meta.version == 2", + OnlyPassing: true, + }, }, }, }, @@ -496,7 +503,7 @@ func testConfigSnapshotTerminatingGatewayLBConfig(t testing.T, variant string) * return nil } - return TestConfigSnapshotTerminatingGateway(t, true, nil, []UpdateEvent{ + return TestConfigSnapshotTerminatingGateway(t, true, nil, []cache.UpdateEvent{ { CorrelationID: serviceConfigIDPrefix + web.String(), Result: &structs.ServiceConfigResponse{ @@ -505,8 +512,9 @@ func testConfigSnapshotTerminatingGatewayLBConfig(t testing.T, variant string) * }, { CorrelationID: serviceResolverIDPrefix + web.String(), - Result: &structs.ConfigEntryResponse{ - Entry: entry, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{entry}, }, }, { @@ -519,7 +527,7 @@ func testConfigSnapshotTerminatingGatewayLBConfig(t testing.T, variant string) * } func TestConfigSnapshotTerminatingGatewaySNI(t testing.T) *ConfigSnapshot { - return TestConfigSnapshotTerminatingGateway(t, true, nil, []UpdateEvent{ + return TestConfigSnapshotTerminatingGateway(t, true, nil, []cache.UpdateEvent{ { CorrelationID: "gateway-services", Result: &structs.IndexedGatewayServices{ @@ -548,16 +556,19 @@ func TestConfigSnapshotTerminatingGatewayHostnameSubsets(t testing.T) *ConfigSna cache = structs.NewServiceName("cache", nil) ) - return TestConfigSnapshotTerminatingGateway(t, true, nil, []UpdateEvent{ + return TestConfigSnapshotTerminatingGateway(t, true, nil, []agentcache.UpdateEvent{ { CorrelationID: serviceResolverIDPrefix + api.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "api", - Subsets: map[string]structs.ServiceResolverSubset{ - "alt": { - Filter: "Service.Meta.domain == alt", + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "api", + Subsets: map[string]structs.ServiceResolverSubset{ + "alt": { + Filter: "Service.Meta.domain == alt", + }, }, }, }, @@ -565,13 +576,16 @@ func TestConfigSnapshotTerminatingGatewayHostnameSubsets(t testing.T) *ConfigSna }, { CorrelationID: serviceResolverIDPrefix + cache.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "cache", - Subsets: map[string]structs.ServiceResolverSubset{ - "prod": { - Filter: "Service.Meta.Env == prod", + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "cache", + Subsets: map[string]structs.ServiceResolverSubset{ + "prod": { + Filter: "Service.Meta.Env == prod", + }, }, }, }, @@ -598,21 +612,24 @@ func TestConfigSnapshotTerminatingGatewayIgnoreExtraResolvers(t testing.T) *Conf notfound = structs.NewServiceName("notfound", nil) ) - return TestConfigSnapshotTerminatingGateway(t, true, nil, []UpdateEvent{ + return TestConfigSnapshotTerminatingGateway(t, true, nil, []agentcache.UpdateEvent{ { CorrelationID: serviceResolverIDPrefix + web.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "web", - DefaultSubset: "v2", - Subsets: map[string]structs.ServiceResolverSubset{ - "v1": { - Filter: "Service.Meta.Version == 1", - }, - "v2": { - Filter: "Service.Meta.Version == 2", - OnlyPassing: true, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "web", + DefaultSubset: "v2", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.Version == 1", + }, + "v2": { + Filter: "Service.Meta.Version == 2", + OnlyPassing: true, + }, }, }, }, @@ -620,18 +637,21 @@ func TestConfigSnapshotTerminatingGatewayIgnoreExtraResolvers(t testing.T) *Conf }, { CorrelationID: serviceResolverIDPrefix + notfound.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: "notfound", - DefaultSubset: "v2", - Subsets: map[string]structs.ServiceResolverSubset{ - "v1": { - Filter: "Service.Meta.Version == 1", - }, - "v2": { - Filter: "Service.Meta.Version == 2", - OnlyPassing: true, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: "notfound", + DefaultSubset: "v2", + Subsets: map[string]structs.ServiceResolverSubset{ + "v1": { + Filter: "Service.Meta.Version == 1", + }, + "v2": { + Filter: "Service.Meta.Version == 2", + OnlyPassing: true, + }, }, }, }, @@ -646,9 +666,9 @@ func TestConfigSnapshotTerminatingGatewayIgnoreExtraResolvers(t testing.T) *Conf }) } -func TestConfigSnapshotTerminatingGatewayWithLambdaService(t testing.T, extraUpdateEvents ...UpdateEvent) *ConfigSnapshot { +func TestConfigSnapshotTerminatingGatewayWithLambdaService(t testing.T, extraUpdateEvents ...agentcache.UpdateEvent) *ConfigSnapshot { web := structs.NewServiceName("web", nil) - updateEvents := append(extraUpdateEvents, UpdateEvent{ + updateEvents := append(extraUpdateEvents, agentcache.UpdateEvent{ CorrelationID: serviceConfigIDPrefix + web.String(), Result: &structs.ServiceConfigResponse{ ProxyConfig: map[string]interface{}{"protocol": "http"}, @@ -667,15 +687,18 @@ func TestConfigSnapshotTerminatingGatewayWithLambdaServiceAndServiceResolvers(t web := structs.NewServiceName("web", nil) return TestConfigSnapshotTerminatingGatewayWithLambdaService(t, - UpdateEvent{ + agentcache.UpdateEvent{ CorrelationID: serviceResolverIDPrefix + web.String(), - Result: &structs.ConfigEntryResponse{ - Entry: &structs.ServiceResolverConfigEntry{ - Kind: structs.ServiceResolver, - Name: web.String(), - Subsets: map[string]structs.ServiceResolverSubset{ - "canary1": {}, - "canary2": {}, + Result: &structs.IndexedConfigEntries{ + Kind: structs.ServiceResolver, + Entries: []structs.ConfigEntry{ + &structs.ServiceResolverConfigEntry{ + Kind: structs.ServiceResolver, + Name: web.String(), + Subsets: map[string]structs.ServiceResolverSubset{ + "canary1": {}, + "canary2": {}, + }, }, }, }, diff --git a/agent/proxycfg/testing_tproxy.go b/agent/proxycfg/testing_tproxy.go index b93e6c970bf52..e593a51e93bd0 100644 --- a/agent/proxycfg/testing_tproxy.go +++ b/agent/proxycfg/testing_tproxy.go @@ -5,6 +5,7 @@ import ( "github.com/mitchellh/go-testing-interface" + "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/structs" @@ -27,7 +28,7 @@ func TestConfigSnapshotTransparentProxy(t testing.T) *ConfigSnapshot { return TestConfigSnapshot(t, func(ns *structs.NodeService) { ns.Proxy.Mode = structs.ProxyModeTransparent - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: meshConfigEntryID, Result: &structs.ConfigEntryResponse{ @@ -140,7 +141,7 @@ func TestConfigSnapshotTransparentProxyHTTPUpstream(t testing.T) *ConfigSnapshot return TestConfigSnapshot(t, func(ns *structs.NodeService) { ns.Proxy.Mode = structs.ProxyModeTransparent - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: meshConfigEntryID, Result: &structs.ConfigEntryResponse{ @@ -244,7 +245,7 @@ func TestConfigSnapshotTransparentProxyCatalogDestinationsOnly(t testing.T) *Con return TestConfigSnapshot(t, func(ns *structs.NodeService) { ns.Proxy.Mode = structs.ProxyModeTransparent - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: meshConfigEntryID, Result: &structs.ConfigEntryResponse{ @@ -334,7 +335,7 @@ func TestConfigSnapshotTransparentProxyDialDirectly(t testing.T) *ConfigSnapshot return TestConfigSnapshot(t, func(ns *structs.NodeService) { ns.Proxy.Mode = structs.ProxyModeTransparent - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: meshConfigEntryID, Result: &structs.ConfigEntryResponse{ @@ -472,7 +473,7 @@ func TestConfigSnapshotTransparentProxyTerminatingGatewayCatalogDestinationsOnly return TestConfigSnapshot(t, func(ns *structs.NodeService) { ns.Proxy.Mode = structs.ProxyModeTransparent - }, []UpdateEvent{ + }, []cache.UpdateEvent{ { CorrelationID: meshConfigEntryID, Result: &structs.ConfigEntryResponse{ diff --git a/agent/proxycfg/testing_upstreams.go b/agent/proxycfg/testing_upstreams.go index 2d80c0968d226..c97ac7a4ffe64 100644 --- a/agent/proxycfg/testing_upstreams.go +++ b/agent/proxycfg/testing_upstreams.go @@ -5,6 +5,7 @@ import ( "github.com/mitchellh/go-testing-interface" + "github.com/hashicorp/consul/agent/cache" "github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/structs" @@ -15,7 +16,7 @@ func setupTestVariationConfigEntriesAndSnapshot( variation string, upstreams structs.Upstreams, additionalEntries ...structs.ConfigEntry, -) []UpdateEvent { +) []cache.UpdateEvent { var ( dbUpstream = upstreams[0] @@ -24,7 +25,7 @@ func setupTestVariationConfigEntriesAndSnapshot( dbChain := setupTestVariationDiscoveryChain(t, variation, additionalEntries...) - events := []UpdateEvent{ + events := []cache.UpdateEvent{ { CorrelationID: "discovery-chain:" + dbUID.String(), Result: &structs.DiscoveryChainResponse{ @@ -45,14 +46,14 @@ func setupTestVariationConfigEntriesAndSnapshot( case "simple": case "external-sni": case "failover": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:fail.default.default.dc1:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesAlternate(t), }, }) case "failover-through-remote-gateway-triggered": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc1:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesInStatus(t, "critical"), @@ -60,26 +61,26 @@ func setupTestVariationConfigEntriesAndSnapshot( }) fallthrough case "failover-through-remote-gateway": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc2:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesDC2(t), }, }) - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "mesh-gateway:dc2:" + dbUID.String(), Result: &structs.IndexedNodesWithGateways{ Nodes: TestGatewayNodesDC2(t), }, }) case "failover-through-double-remote-gateway-triggered": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc1:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesInStatus(t, "critical"), }, }) - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc2:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesInStatusDC2(t, "critical"), @@ -87,26 +88,26 @@ func setupTestVariationConfigEntriesAndSnapshot( }) fallthrough case "failover-through-double-remote-gateway": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc3:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesDC2(t), }, }) - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "mesh-gateway:dc2:" + dbUID.String(), Result: &structs.IndexedNodesWithGateways{ Nodes: TestGatewayNodesDC2(t), }, }) - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "mesh-gateway:dc3:" + dbUID.String(), Result: &structs.IndexedNodesWithGateways{ Nodes: TestGatewayNodesDC3(t), }, }) case "failover-through-local-gateway-triggered": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc1:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesInStatus(t, "critical"), @@ -114,26 +115,26 @@ func setupTestVariationConfigEntriesAndSnapshot( }) fallthrough case "failover-through-local-gateway": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc2:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesDC2(t), }, }) - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "mesh-gateway:dc1:" + dbUID.String(), Result: &structs.IndexedNodesWithGateways{ Nodes: TestGatewayNodesDC1(t), }, }) case "failover-through-double-local-gateway-triggered": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc1:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesInStatus(t, "critical"), }, }) - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc2:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesInStatusDC2(t, "critical"), @@ -141,26 +142,26 @@ func setupTestVariationConfigEntriesAndSnapshot( }) fallthrough case "failover-through-double-local-gateway": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:db.default.default.dc3:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesDC2(t), }, }) - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "mesh-gateway:dc1:" + dbUID.String(), Result: &structs.IndexedNodesWithGateways{ Nodes: TestGatewayNodesDC1(t), }, }) case "splitter-with-resolver-redirect-multidc": - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:v1.db.default.default.dc1:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodes(t, "db"), }, }) - events = append(events, UpdateEvent{ + events = append(events, cache.UpdateEvent{ CorrelationID: "upstream-target:v2.db.default.default.dc2:" + dbUID.String(), Result: &structs.IndexedCheckServiceNodes{ Nodes: TestUpstreamNodesDC2(t), diff --git a/agent/proxycfg/upstreams.go b/agent/proxycfg/upstreams.go index 3e887caf1cd20..e38ddeb63a41a 100644 --- a/agent/proxycfg/upstreams.go +++ b/agent/proxycfg/upstreams.go @@ -9,6 +9,8 @@ import ( "github.com/mitchellh/mapstructure" "github.com/hashicorp/consul/acl" + "github.com/hashicorp/consul/agent/cache" + cachetype "github.com/hashicorp/consul/agent/cache-types" "github.com/hashicorp/consul/agent/structs" ) @@ -16,7 +18,7 @@ type handlerUpstreams struct { handlerState } -func (s *handlerUpstreams) handleUpdateUpstreams(ctx context.Context, u UpdateEvent, snap *ConfigSnapshot) error { +func (s *handlerUpstreams) handleUpdateUpstreams(ctx context.Context, u cache.UpdateEvent, snap *ConfigSnapshot) error { if u.Err != nil { return fmt.Errorf("error filling agent cache: %v", u.Err) } @@ -313,12 +315,12 @@ func (s *handlerUpstreams) resetWatchesFromChain( ctx, cancel := context.WithCancel(ctx) opts := gatewayWatchOpts{ - internalServiceDump: s.dataSources.InternalServiceDump, - notifyCh: s.ch, - source: *s.source, - token: s.token, - key: gwKey, - upstreamID: uid, + notifier: s.cache, + notifyCh: s.ch, + source: *s.source, + token: s.token, + key: gwKey, + upstreamID: uid, } err := watchMeshGateway(ctx, opts) if err != nil { @@ -371,8 +373,7 @@ func (s *handlerUpstreams) watchUpstreamTarget(ctx context.Context, snap *Config correlationID := "upstream-target:" + opts.chainID + ":" + opts.upstreamID.String() ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.Health.Notify(ctx, &structs.ServiceSpecificRequest{ - PeerName: opts.upstreamID.Peer, + err := s.health.Notify(ctx, structs.ServiceSpecificRequest{ Datacenter: opts.datacenter, QueryOptions: structs.QueryOptions{ Token: s.token, @@ -412,7 +413,7 @@ func (s *handlerUpstreams) watchDiscoveryChain(ctx context.Context, snap *Config } ctx, cancel := context.WithCancel(ctx) - err := s.dataSources.CompiledDiscoveryChain.Notify(ctx, &structs.DiscoveryChainRequest{ + err := s.cache.Notify(ctx, cachetype.CompiledDiscoveryChainName, &structs.DiscoveryChainRequest{ Datacenter: s.source.Datacenter, QueryOptions: structs.QueryOptions{Token: s.token}, Name: opts.name, diff --git a/agent/rpc/peering/health_snapshot.go b/agent/rpc/peering/health_snapshot.go deleted file mode 100644 index 8d73dcea45633..0000000000000 --- a/agent/rpc/peering/health_snapshot.go +++ /dev/null @@ -1,82 +0,0 @@ -package peering - -import ( - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/types" -) - -// healthSnapshot represents a normalized view of a set of CheckServiceNodes -// meant for easy comparison to aid in differential synchronization -type healthSnapshot struct { - Nodes map[types.NodeID]*nodeSnapshot -} - -type nodeSnapshot struct { - Node *structs.Node - Services map[structs.ServiceID]*serviceSnapshot -} - -type serviceSnapshot struct { - Service *structs.NodeService - Checks map[types.CheckID]*structs.HealthCheck -} - -func newHealthSnapshot(all []structs.CheckServiceNode, partition, peerName string) *healthSnapshot { - // For all nodes, services, and checks we override the peer name and - // partition to be the local partition and local name for the peer. - for _, instance := range all { - // For all nodes, services, and checks we override the peer name and partition to be - // the local partition and local name for the peer. - instance.Node.PeerName = peerName - instance.Node.OverridePartition(partition) - - instance.Service.PeerName = peerName - instance.Service.OverridePartition(partition) - - for _, chk := range instance.Checks { - chk.PeerName = peerName - chk.OverridePartition(partition) - } - } - - snap := &healthSnapshot{ - Nodes: make(map[types.NodeID]*nodeSnapshot), - } - - for _, instance := range all { - if instance.Node.ID == "" { - panic("TODO(peering): data should always have a node ID") - } - nodeSnap, ok := snap.Nodes[instance.Node.ID] - if !ok { - nodeSnap = &nodeSnapshot{ - Node: instance.Node, - Services: make(map[structs.ServiceID]*serviceSnapshot), - } - snap.Nodes[instance.Node.ID] = nodeSnap - } - - if instance.Service.ID == "" { - panic("TODO(peering): data should always have a service ID") - } - sid := instance.Service.CompoundServiceID() - - svcSnap, ok := nodeSnap.Services[sid] - if !ok { - svcSnap = &serviceSnapshot{ - Service: instance.Service, - Checks: make(map[types.CheckID]*structs.HealthCheck), - } - nodeSnap.Services[sid] = svcSnap - } - - for _, c := range instance.Checks { - if c.CheckID == "" { - panic("TODO(peering): data should always have a check ID") - } - svcSnap.Checks[c.CheckID] = c - } - } - - return snap -} diff --git a/agent/rpc/peering/health_snapshot_test.go b/agent/rpc/peering/health_snapshot_test.go deleted file mode 100644 index 33f662750d0d4..0000000000000 --- a/agent/rpc/peering/health_snapshot_test.go +++ /dev/null @@ -1,152 +0,0 @@ -package peering - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/types" -) - -func TestHealthSnapshot(t *testing.T) { - type testcase struct { - name string - in []structs.CheckServiceNode - expect *healthSnapshot - } - - entMeta := acl.DefaultEnterpriseMeta() - - run := func(t *testing.T, tc testcase) { - snap := newHealthSnapshot(tc.in, entMeta.PartitionOrEmpty(), "my-peer") - require.Equal(t, tc.expect, snap) - } - - newNode := func(id, name, peerName string) *structs.Node { - return &structs.Node{ - ID: types.NodeID(id), - Node: name, - Partition: entMeta.PartitionOrEmpty(), - PeerName: peerName, - } - } - - newService := func(id string, port int, peerName string) *structs.NodeService { - return &structs.NodeService{ - ID: id, - Service: "xyz", - EnterpriseMeta: *entMeta, - PeerName: peerName, - Port: port, - } - } - - newCheck := func(node, svcID, peerName string) *structs.HealthCheck { - return &structs.HealthCheck{ - Node: node, - ServiceID: svcID, - ServiceName: "xyz", - CheckID: types.CheckID(svcID + ":check"), - Name: "check", - EnterpriseMeta: *entMeta, - PeerName: peerName, - Status: "passing", - } - } - - cases := []testcase{ - { - name: "single", - in: []structs.CheckServiceNode{ - { - Node: newNode("abc-123", "abc", ""), - Service: newService("xyz-123", 8080, ""), - Checks: structs.HealthChecks{ - newCheck("abc", "xyz-123", ""), - }, - }, - }, - expect: &healthSnapshot{ - Nodes: map[types.NodeID]*nodeSnapshot{ - "abc-123": { - Node: newNode("abc-123", "abc", "my-peer"), - Services: map[structs.ServiceID]*serviceSnapshot{ - structs.NewServiceID("xyz-123", nil): { - Service: newService("xyz-123", 8080, "my-peer"), - Checks: map[types.CheckID]*structs.HealthCheck{ - "xyz-123:check": newCheck("abc", "xyz-123", "my-peer"), - }, - }, - }, - }, - }, - }, - }, - { - name: "multiple", - in: []structs.CheckServiceNode{ - { - Node: newNode("abc-123", "abc", ""), - Service: newService("xyz-123", 8080, ""), - Checks: structs.HealthChecks{ - newCheck("abc", "xyz-123", ""), - }, - }, - { - Node: newNode("abc-123", "abc", ""), - Service: newService("xyz-789", 8181, ""), - Checks: structs.HealthChecks{ - newCheck("abc", "xyz-789", ""), - }, - }, - { - Node: newNode("def-456", "def", ""), - Service: newService("xyz-456", 9090, ""), - Checks: structs.HealthChecks{ - newCheck("def", "xyz-456", ""), - }, - }, - }, - expect: &healthSnapshot{ - Nodes: map[types.NodeID]*nodeSnapshot{ - "abc-123": { - Node: newNode("abc-123", "abc", "my-peer"), - Services: map[structs.ServiceID]*serviceSnapshot{ - structs.NewServiceID("xyz-123", nil): { - Service: newService("xyz-123", 8080, "my-peer"), - Checks: map[types.CheckID]*structs.HealthCheck{ - "xyz-123:check": newCheck("abc", "xyz-123", "my-peer"), - }, - }, - structs.NewServiceID("xyz-789", nil): { - Service: newService("xyz-789", 8181, "my-peer"), - Checks: map[types.CheckID]*structs.HealthCheck{ - "xyz-789:check": newCheck("abc", "xyz-789", "my-peer"), - }, - }, - }, - }, - "def-456": { - Node: newNode("def-456", "def", "my-peer"), - Services: map[structs.ServiceID]*serviceSnapshot{ - structs.NewServiceID("xyz-456", nil): { - Service: newService("xyz-456", 9090, "my-peer"), - Checks: map[types.CheckID]*structs.HealthCheck{ - "xyz-456:check": newCheck("def", "xyz-456", "my-peer"), - }, - }, - }, - }, - }, - }, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} diff --git a/agent/rpc/peering/replication.go b/agent/rpc/peering/replication.go deleted file mode 100644 index 1f546bdd324bd..0000000000000 --- a/agent/rpc/peering/replication.go +++ /dev/null @@ -1,353 +0,0 @@ -package peering - -import ( - "errors" - "fmt" - "strings" - - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes" - "github.com/hashicorp/go-hclog" - "google.golang.org/genproto/googleapis/rpc/code" - "google.golang.org/protobuf/types/known/anypb" - - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/proto/pbservice" - "github.com/hashicorp/consul/proto/pbstatus" -) - -/* - TODO(peering): - - At the start of each peering stream establishment (not initiation, but the - thing that reconnects) we need to do a little bit of light differential - snapshot correction to initially synchronize the local state store. - - Then if we ever fail to apply a replication message we should either tear - down the entire connection (and thus force a resync on reconnect) or - request a resync operation. -*/ - -// makeServiceResponse handles preparing exported service instance updates to the peer cluster. -// Each cache.UpdateEvent will contain all instances for a service name. -// If there are no instances in the event, we consider that to be a de-registration. -func makeServiceResponse( - logger hclog.Logger, - update cache.UpdateEvent, -) *pbpeering.ReplicationMessage { - any, csn, err := marshalToProtoAny[*pbservice.IndexedCheckServiceNodes](update.Result) - if err != nil { - // Log the error and skip this response to avoid locking up peering due to a bad update event. - logger.Error("failed to marshal", "error", err) - return nil - } - - var serviceName string - if strings.HasPrefix(update.CorrelationID, subExportedService) { - serviceName = strings.TrimPrefix(update.CorrelationID, subExportedService) - } else { - serviceName = strings.TrimPrefix(update.CorrelationID, subExportedProxyService) + syntheticProxyNameSuffix - } - - // If no nodes are present then it's due to one of: - // 1. The service is newly registered or exported and yielded a transient empty update. - // 2. All instances of the service were de-registered. - // 3. The service was un-exported. - // - // We don't distinguish when these three things occurred, but it's safe to send a DELETE Op in all cases, so we do that. - // Case #1 is a no-op for the importing peer. - if len(csn.Nodes) == 0 { - resp := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Response_{ - Response: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - // TODO(peering): Nonce management - Nonce: "", - ResourceID: serviceName, - Operation: pbpeering.ReplicationMessage_Response_DELETE, - }, - }, - } - return resp - } - - // If there are nodes in the response, we push them as an UPSERT operation. - resp := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Response_{ - Response: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - // TODO(peering): Nonce management - Nonce: "", - ResourceID: serviceName, - Operation: pbpeering.ReplicationMessage_Response_UPSERT, - Resource: any, - }, - }, - } - return resp -} - -func makeCARootsResponse( - logger hclog.Logger, - update cache.UpdateEvent, -) *pbpeering.ReplicationMessage { - any, _, err := marshalToProtoAny[*pbpeering.PeeringTrustBundle](update.Result) - if err != nil { - // Log the error and skip this response to avoid locking up peering due to a bad update event. - logger.Error("failed to marshal", "error", err) - return nil - } - - resp := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Response_{ - Response: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLRoots, - // TODO(peering): Nonce management - Nonce: "", - ResourceID: "roots", - Operation: pbpeering.ReplicationMessage_Response_UPSERT, - Resource: any, - }, - }, - } - return resp -} - -// marshalToProtoAny takes any input and returns: -// the protobuf.Any type, the asserted T type, and any errors -// during marshalling or type assertion. -// `in` MUST be of type T or it returns an error. -func marshalToProtoAny[T proto.Message](in any) (*anypb.Any, T, error) { - typ, ok := in.(T) - if !ok { - var outType T - return nil, typ, fmt.Errorf("input type is not %T: %T", outType, in) - } - any, err := ptypes.MarshalAny(typ) - if err != nil { - return nil, typ, err - } - return any, typ, nil -} - -func (s *Service) processResponse( - peerName string, - partition string, - resp *pbpeering.ReplicationMessage_Response, -) (*pbpeering.ReplicationMessage, error) { - if !pbpeering.KnownTypeURL(resp.ResourceURL) { - err := fmt.Errorf("received response for unknown resource type %q", resp.ResourceURL) - return makeReply( - resp.ResourceURL, - resp.Nonce, - code.Code_INVALID_ARGUMENT, - err.Error(), - ), err - } - - switch resp.Operation { - case pbpeering.ReplicationMessage_Response_UPSERT: - if resp.Resource == nil { - err := fmt.Errorf("received upsert response with no content") - return makeReply( - resp.ResourceURL, - resp.Nonce, - code.Code_INVALID_ARGUMENT, - err.Error(), - ), err - } - - if err := s.handleUpsert(peerName, partition, resp.ResourceURL, resp.ResourceID, resp.Resource); err != nil { - return makeReply( - resp.ResourceURL, - resp.Nonce, - code.Code_INTERNAL, - fmt.Sprintf("upsert error, ResourceURL: %q, ResourceID: %q: %v", resp.ResourceURL, resp.ResourceID, err), - ), fmt.Errorf("upsert error: %w", err) - } - - return makeReply(resp.ResourceURL, resp.Nonce, code.Code_OK, ""), nil - - case pbpeering.ReplicationMessage_Response_DELETE: - if err := s.handleDelete(peerName, partition, resp.ResourceURL, resp.ResourceID); err != nil { - return makeReply( - resp.ResourceURL, - resp.Nonce, - code.Code_INTERNAL, - fmt.Sprintf("delete error, ResourceURL: %q, ResourceID: %q: %v", resp.ResourceURL, resp.ResourceID, err), - ), fmt.Errorf("delete error: %w", err) - } - return makeReply(resp.ResourceURL, resp.Nonce, code.Code_OK, ""), nil - - default: - var errMsg string - if op := pbpeering.ReplicationMessage_Response_Operation_name[int32(resp.Operation)]; op != "" { - errMsg = fmt.Sprintf("unsupported operation: %q", op) - } else { - errMsg = fmt.Sprintf("unsupported operation: %d", resp.Operation) - } - return makeReply( - resp.ResourceURL, - resp.Nonce, - code.Code_INVALID_ARGUMENT, - errMsg, - ), errors.New(errMsg) - } -} - -func (s *Service) handleUpsert( - peerName string, - partition string, - resourceURL string, - resourceID string, - resource *anypb.Any, -) error { - switch resourceURL { - case pbpeering.TypeURLService: - sn := structs.ServiceNameFromString(resourceID) - sn.OverridePartition(partition) - - csn := &pbservice.IndexedCheckServiceNodes{} - if err := ptypes.UnmarshalAny(resource, csn); err != nil { - return fmt.Errorf("failed to unmarshal resource: %w", err) - } - - return s.handleUpsertService(peerName, partition, sn, csn) - - case pbpeering.TypeURLRoots: - roots := &pbpeering.PeeringTrustBundle{} - if err := ptypes.UnmarshalAny(resource, roots); err != nil { - return fmt.Errorf("failed to unmarshal resource: %w", err) - } - - return s.handleUpsertRoots(peerName, partition, roots) - - default: - return fmt.Errorf("unexpected resourceURL: %s", resourceURL) - } -} - -func (s *Service) handleUpsertService( - peerName string, - partition string, - sn structs.ServiceName, - csn *pbservice.IndexedCheckServiceNodes, -) error { - if csn == nil || len(csn.Nodes) == 0 { - return s.handleDeleteService(peerName, partition, sn) - } - - // Convert exported data into structs format. - structsNodes := make([]structs.CheckServiceNode, 0, len(csn.Nodes)) - for _, pb := range csn.Nodes { - instance, err := pbservice.CheckServiceNodeToStructs(pb) - if err != nil { - return fmt.Errorf("failed to convert instance: %w", err) - } - structsNodes = append(structsNodes, *instance) - } - - // Normalize the data into a convenient form for operation. - snap := newHealthSnapshot(structsNodes, partition, peerName) - - for _, nodeSnap := range snap.Nodes { - // First register the node - req := nodeSnap.Node.ToRegisterRequest() - if err := s.Backend.Apply().CatalogRegister(&req); err != nil { - return fmt.Errorf("failed to register node: %w", err) - } - - // Then register all services on that node - for _, svcSnap := range nodeSnap.Services { - req.Service = svcSnap.Service - if err := s.Backend.Apply().CatalogRegister(&req); err != nil { - return fmt.Errorf("failed to register service: %w", err) - } - } - req.Service = nil - - // Then register all checks on that node - var chks structs.HealthChecks - for _, svcSnap := range nodeSnap.Services { - for _, c := range svcSnap.Checks { - chks = append(chks, c) - } - } - - req.Checks = chks - if err := s.Backend.Apply().CatalogRegister(&req); err != nil { - return fmt.Errorf("failed to register check: %w", err) - } - } - - // TODO(peering): cleanup and deregister existing data that is now missing safely somehow - - return nil -} - -func (s *Service) handleUpsertRoots( - peerName string, - partition string, - trustBundle *pbpeering.PeeringTrustBundle, -) error { - // We override the partition and peer name so that the trust bundle gets stored - // in the importing partition with a reference to the peer it was imported from. - trustBundle.Partition = partition - trustBundle.PeerName = peerName - req := &pbpeering.PeeringTrustBundleWriteRequest{ - PeeringTrustBundle: trustBundle, - } - return s.Backend.Apply().PeeringTrustBundleWrite(req) -} - -func (s *Service) handleDelete( - peerName string, - partition string, - resourceURL string, - resourceID string, -) error { - switch resourceURL { - case pbpeering.TypeURLService: - sn := structs.ServiceNameFromString(resourceID) - sn.OverridePartition(partition) - return s.handleDeleteService(peerName, partition, sn) - - default: - return fmt.Errorf("unexpected resourceURL: %s", resourceURL) - } -} - -func (s *Service) handleDeleteService( - peerName string, - partition string, - sn structs.ServiceName, -) error { - // Deregister: ServiceID == DeleteService ANd checks - // Deregister: ServiceID(empty) CheckID(empty) == DeleteNode - - // TODO(peering): implement - return nil -} - -func makeReply(resourceURL, nonce string, errCode code.Code, errMsg string) *pbpeering.ReplicationMessage { - var rpcErr *pbstatus.Status - if errCode != code.Code_OK || errMsg != "" { - rpcErr = &pbstatus.Status{ - Code: int32(errCode), - Message: errMsg, - } - } - - // TODO: shouldn't this be response? - return &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: resourceURL, - Nonce: nonce, - Error: rpcErr, - }, - }, - } -} diff --git a/agent/rpc/peering/service.go b/agent/rpc/peering/service.go deleted file mode 100644 index 1ff2b0fa0e1f8..0000000000000 --- a/agent/rpc/peering/service.go +++ /dev/null @@ -1,809 +0,0 @@ -package peering - -import ( - "context" - "errors" - "fmt" - "io" - "strings" - "time" - - "github.com/armon/go-metrics" - "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" - "github.com/hashicorp/go-hclog" - "github.com/hashicorp/go-memdb" - "google.golang.org/genproto/googleapis/rpc/code" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - grpcstatus "google.golang.org/grpc/status" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/dns" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" -) - -var ( - errPeeringTokenInvalidCA = errors.New("peering token CA value is invalid") - errPeeringTokenEmptyServerAddresses = errors.New("peering token server addresses value is empty") - errPeeringTokenEmptyServerName = errors.New("peering token server name value is empty") - errPeeringTokenEmptyPeerID = errors.New("peering token peer ID value is empty") -) - -// errPeeringInvalidServerAddress is returned when an initiate request contains -// an invalid server address. -type errPeeringInvalidServerAddress struct { - addr string -} - -// Error implements the error interface -func (e *errPeeringInvalidServerAddress) Error() string { - return fmt.Sprintf("%s is not a valid peering server address", e.addr) -} - -type Config struct { - Datacenter string - ConnectEnabled bool - // TODO(peering): remove this when we're ready - DisableMeshGatewayMode bool -} - -// Service implements pbpeering.PeeringService to provide RPC operations for -// managing peering relationships. -type Service struct { - Backend Backend - logger hclog.Logger - config Config - streams *streamTracker -} - -func NewService(logger hclog.Logger, cfg Config, backend Backend) *Service { - cfg.DisableMeshGatewayMode = true - return &Service{ - Backend: backend, - logger: logger, - config: cfg, - streams: newStreamTracker(), - } -} - -var _ pbpeering.PeeringServiceServer = (*Service)(nil) - -// Backend defines the core integrations the Peering endpoint depends on. A -// functional implementation will integrate with various subcomponents of Consul -// such as the State store for reading and writing data, the CA machinery for -// providing access to CA data and the RPC system for forwarding requests to -// other servers. -type Backend interface { - // Forward should forward the request to the leader when necessary. - Forward(info structs.RPCInfo, f func(*grpc.ClientConn) error) (handled bool, err error) - - // GetAgentCACertificates returns the CA certificate to be returned in the peering token data - GetAgentCACertificates() ([]string, error) - - // GetServerAddresses returns the addresses used for establishing a peering connection - GetServerAddresses() ([]string, error) - - // GetServerName returns the SNI to be returned in the peering token data which - // will be used by peers when establishing peering connections over TLS. - GetServerName() string - - // EncodeToken packages a peering token into a slice of bytes. - EncodeToken(tok *structs.PeeringToken) ([]byte, error) - - // DecodeToken unpackages a peering token from a slice of bytes. - DecodeToken([]byte) (*structs.PeeringToken, error) - - EnterpriseCheckPartitions(partition string) error - - Subscribe(req *stream.SubscribeRequest) (*stream.Subscription, error) - - // IsLeader indicates whether the consul server is in a leader state or not. - IsLeader() bool - - Store() Store - Apply() Apply - LeadershipMonitor() LeadershipMonitor -} - -// LeadershipMonitor provides a way for the consul server to update the peering service about -// the server's leadership status. -// Server addresses should look like: ip:port -type LeadershipMonitor interface { - // UpdateLeaderAddr is called on a raft.LeaderObservation in a go routine in the consul server; - // see trackLeaderChanges() - UpdateLeaderAddr(leaderAddr string) - - // GetLeaderAddr provides the best hint for the current address of the leader. - // There is no guarantee that this is the actual address of the leader. - GetLeaderAddr() string -} - -// Store provides a read-only interface for querying Peering data. -type Store interface { - PeeringRead(ws memdb.WatchSet, q state.Query) (uint64, *pbpeering.Peering, error) - PeeringReadByID(ws memdb.WatchSet, id string) (uint64, *pbpeering.Peering, error) - PeeringList(ws memdb.WatchSet, entMeta acl.EnterpriseMeta) (uint64, []*pbpeering.Peering, error) - PeeringTrustBundleRead(ws memdb.WatchSet, q state.Query) (uint64, *pbpeering.PeeringTrustBundle, error) - ExportedServicesForPeer(ws memdb.WatchSet, peerID string) (uint64, *structs.ExportedServiceList, error) - PeeringsForService(ws memdb.WatchSet, serviceName string, entMeta acl.EnterpriseMeta) (uint64, []*pbpeering.Peering, error) - ServiceDump(ws memdb.WatchSet, kind structs.ServiceKind, useKind bool, entMeta *acl.EnterpriseMeta, peerName string) (uint64, structs.CheckServiceNodes, error) - CAConfig(ws memdb.WatchSet) (uint64, *structs.CAConfiguration, error) - AbandonCh() <-chan struct{} -} - -// Apply provides a write-only interface for persisting Peering data. -type Apply interface { - PeeringWrite(req *pbpeering.PeeringWriteRequest) error - PeeringDelete(req *pbpeering.PeeringDeleteRequest) error - PeeringTerminateByID(req *pbpeering.PeeringTerminateByIDRequest) error - PeeringTrustBundleWrite(req *pbpeering.PeeringTrustBundleWriteRequest) error - CatalogRegister(req *structs.RegisterRequest) error -} - -// GenerateToken implements the PeeringService RPC method to generate a -// peering token which is the initial step in establishing a peering relationship -// with other Consul clusters. -func (s *Service) GenerateToken( - ctx context.Context, - req *pbpeering.GenerateTokenRequest, -) (*pbpeering.GenerateTokenResponse, error) { - if err := s.Backend.EnterpriseCheckPartitions(req.Partition); err != nil { - return nil, grpcstatus.Error(codes.InvalidArgument, err.Error()) - } - // validate prior to forwarding to the leader, this saves a network hop - if err := dns.ValidateLabel(req.PeerName); err != nil { - return nil, fmt.Errorf("%s is not a valid peer name: %w", req.PeerName, err) - } - - if err := structs.ValidateMetaTags(req.Meta); err != nil { - return nil, fmt.Errorf("meta tags failed validation: %w", err) - } - - // TODO(peering): add metrics - // TODO(peering): add tracing - - resp := &pbpeering.GenerateTokenResponse{} - handled, err := s.Backend.Forward(req, func(conn *grpc.ClientConn) error { - var err error - resp, err = pbpeering.NewPeeringServiceClient(conn).GenerateToken(ctx, req) - return err - }) - if handled || err != nil { - return resp, err - } - - ca, err := s.Backend.GetAgentCACertificates() - if err != nil { - return nil, err - } - - serverAddrs, err := s.Backend.GetServerAddresses() - if err != nil { - return nil, err - } - - writeReq := pbpeering.PeeringWriteRequest{ - Peering: &pbpeering.Peering{ - Name: req.PeerName, - // TODO(peering): Normalize from ACL token once this endpoint is guarded by ACLs. - Partition: req.PartitionOrDefault(), - Meta: req.Meta, - }, - } - if err := s.Backend.Apply().PeeringWrite(&writeReq); err != nil { - return nil, fmt.Errorf("failed to write peering: %w", err) - } - - q := state.Query{ - Value: strings.ToLower(req.PeerName), - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(req.Partition), - } - _, peering, err := s.Backend.Store().PeeringRead(nil, q) - if err != nil { - return nil, err - } - if peering == nil { - return nil, fmt.Errorf("peering was deleted while token generation request was in flight") - } - - tok := structs.PeeringToken{ - // Store the UUID so that we can do a global search when handling inbound streams. - PeerID: peering.ID, - CA: ca, - ServerAddresses: serverAddrs, - ServerName: s.Backend.GetServerName(), - } - - encoded, err := s.Backend.EncodeToken(&tok) - if err != nil { - return nil, err - } - resp.PeeringToken = string(encoded) - return resp, err -} - -// Initiate implements the PeeringService RPC method to finalize peering -// registration. Given a valid token output from a peer's GenerateToken endpoint, -// a peering is registered. -func (s *Service) Initiate( - ctx context.Context, - req *pbpeering.InitiateRequest, -) (*pbpeering.InitiateResponse, error) { - // validate prior to forwarding to the leader, this saves a network hop - if err := dns.ValidateLabel(req.PeerName); err != nil { - return nil, fmt.Errorf("%s is not a valid peer name: %w", req.PeerName, err) - } - tok, err := s.Backend.DecodeToken([]byte(req.PeeringToken)) - if err != nil { - return nil, err - } - if err := validatePeeringToken(tok); err != nil { - return nil, err - } - - if err := structs.ValidateMetaTags(req.Meta); err != nil { - return nil, fmt.Errorf("meta tags failed validation: %w", err) - } - - resp := &pbpeering.InitiateResponse{} - handled, err := s.Backend.Forward(req, func(conn *grpc.ClientConn) error { - var err error - resp, err = pbpeering.NewPeeringServiceClient(conn).Initiate(ctx, req) - return err - }) - if handled || err != nil { - return resp, err - } - - defer metrics.MeasureSince([]string{"peering", "initiate"}, time.Now()) - - // convert ServiceAddress values to strings - serverAddrs := make([]string, len(tok.ServerAddresses)) - for i, addr := range tok.ServerAddresses { - serverAddrs[i] = addr - } - - // as soon as a peering is written with a list of ServerAddresses that is - // non-empty, the leader routine will see the peering and attempt to - // establish a connection with the remote peer. - // - // This peer now has a record of both the LocalPeerID(ID) and - // RemotePeerID(PeerID) but at this point the other peer does not. - writeReq := &pbpeering.PeeringWriteRequest{ - Peering: &pbpeering.Peering{ - Name: req.PeerName, - PeerCAPems: tok.CA, - PeerServerAddresses: serverAddrs, - PeerServerName: tok.ServerName, - PeerID: tok.PeerID, - Meta: req.Meta, - }, - } - if err = s.Backend.Apply().PeeringWrite(writeReq); err != nil { - return nil, fmt.Errorf("failed to write peering: %w", err) - } - // resp.Status == 0 - return resp, nil -} - -func (s *Service) PeeringRead(ctx context.Context, req *pbpeering.PeeringReadRequest) (*pbpeering.PeeringReadResponse, error) { - if err := s.Backend.EnterpriseCheckPartitions(req.Partition); err != nil { - return nil, grpcstatus.Error(codes.InvalidArgument, err.Error()) - } - - var resp *pbpeering.PeeringReadResponse - handled, err := s.Backend.Forward(req, func(conn *grpc.ClientConn) error { - var err error - resp, err = pbpeering.NewPeeringServiceClient(conn).PeeringRead(ctx, req) - return err - }) - if handled || err != nil { - return resp, err - } - - defer metrics.MeasureSince([]string{"peering", "read"}, time.Now()) - // TODO(peering): ACL check request token - - // TODO(peering): handle blocking queries - q := state.Query{ - Value: strings.ToLower(req.Name), - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(req.Partition)} - _, peering, err := s.Backend.Store().PeeringRead(nil, q) - if err != nil { - return nil, err - } - return &pbpeering.PeeringReadResponse{Peering: peering}, nil -} - -func (s *Service) PeeringList(ctx context.Context, req *pbpeering.PeeringListRequest) (*pbpeering.PeeringListResponse, error) { - if err := s.Backend.EnterpriseCheckPartitions(req.Partition); err != nil { - return nil, grpcstatus.Error(codes.InvalidArgument, err.Error()) - } - - var resp *pbpeering.PeeringListResponse - handled, err := s.Backend.Forward(req, func(conn *grpc.ClientConn) error { - var err error - resp, err = pbpeering.NewPeeringServiceClient(conn).PeeringList(ctx, req) - return err - }) - if handled || err != nil { - return resp, err - } - - defer metrics.MeasureSince([]string{"peering", "list"}, time.Now()) - // TODO(peering): ACL check request token - - // TODO(peering): handle blocking queries - _, peerings, err := s.Backend.Store().PeeringList(nil, *structs.NodeEnterpriseMetaInPartition(req.Partition)) - if err != nil { - return nil, err - } - return &pbpeering.PeeringListResponse{Peerings: peerings}, nil -} - -// TODO(peering): As of writing, this method is only used in tests to set up Peerings in the state store. -// Consider removing if we can find another way to populate state store in peering_endpoint_test.go -func (s *Service) PeeringWrite(ctx context.Context, req *pbpeering.PeeringWriteRequest) (*pbpeering.PeeringWriteResponse, error) { - if err := s.Backend.EnterpriseCheckPartitions(req.Peering.Partition); err != nil { - return nil, grpcstatus.Error(codes.InvalidArgument, err.Error()) - } - - var resp *pbpeering.PeeringWriteResponse - handled, err := s.Backend.Forward(req, func(conn *grpc.ClientConn) error { - var err error - resp, err = pbpeering.NewPeeringServiceClient(conn).PeeringWrite(ctx, req) - return err - }) - if handled || err != nil { - return resp, err - } - - defer metrics.MeasureSince([]string{"peering", "write"}, time.Now()) - // TODO(peering): ACL check request token - - // TODO(peering): handle blocking queries - err = s.Backend.Apply().PeeringWrite(req) - if err != nil { - return nil, err - } - return &pbpeering.PeeringWriteResponse{}, nil -} - -func (s *Service) PeeringDelete(ctx context.Context, req *pbpeering.PeeringDeleteRequest) (*pbpeering.PeeringDeleteResponse, error) { - if err := s.Backend.EnterpriseCheckPartitions(req.Partition); err != nil { - return nil, grpcstatus.Error(codes.InvalidArgument, err.Error()) - } - - var resp *pbpeering.PeeringDeleteResponse - handled, err := s.Backend.Forward(req, func(conn *grpc.ClientConn) error { - var err error - resp, err = pbpeering.NewPeeringServiceClient(conn).PeeringDelete(ctx, req) - return err - }) - if handled || err != nil { - return resp, err - } - - defer metrics.MeasureSince([]string{"peering", "delete"}, time.Now()) - // TODO(peering): ACL check request token - - // TODO(peering): handle blocking queries - err = s.Backend.Apply().PeeringDelete(req) - if err != nil { - return nil, err - } - return &pbpeering.PeeringDeleteResponse{}, nil -} - -func (s *Service) TrustBundleRead(ctx context.Context, req *pbpeering.TrustBundleReadRequest) (*pbpeering.TrustBundleReadResponse, error) { - if err := s.Backend.EnterpriseCheckPartitions(req.Partition); err != nil { - return nil, grpcstatus.Error(codes.InvalidArgument, err.Error()) - } - - var resp *pbpeering.TrustBundleReadResponse - handled, err := s.Backend.Forward(req, func(conn *grpc.ClientConn) error { - var err error - resp, err = pbpeering.NewPeeringServiceClient(conn).TrustBundleRead(ctx, req) - return err - }) - if handled || err != nil { - return resp, err - } - - defer metrics.MeasureSince([]string{"peering", "trust_bundle_read"}, time.Now()) - // TODO(peering): ACL check request token - - // TODO(peering): handle blocking queries - - idx, trustBundle, err := s.Backend.Store().PeeringTrustBundleRead(nil, state.Query{ - Value: req.Name, - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(req.Partition), - }) - if err != nil { - return nil, fmt.Errorf("failed to read trust bundle for peer %s: %w", req.Name, err) - } - - return &pbpeering.TrustBundleReadResponse{ - Index: idx, - Bundle: trustBundle, - }, nil -} - -func (s *Service) TrustBundleListByService(ctx context.Context, req *pbpeering.TrustBundleListByServiceRequest) (*pbpeering.TrustBundleListByServiceResponse, error) { - if err := s.Backend.EnterpriseCheckPartitions(req.Partition); err != nil { - return nil, grpcstatus.Error(codes.InvalidArgument, err.Error()) - } - - var resp *pbpeering.TrustBundleListByServiceResponse - handled, err := s.Backend.Forward(req, func(conn *grpc.ClientConn) error { - var err error - resp, err = pbpeering.NewPeeringServiceClient(conn).TrustBundleListByService(ctx, req) - return err - }) - if handled || err != nil { - return resp, err - } - - defer metrics.MeasureSince([]string{"peering", "trust_bundle_list_by_service"}, time.Now()) - // TODO(peering): ACL check request token - - // TODO(peering): handle blocking queries - - entMeta := *structs.NodeEnterpriseMetaInPartition(req.Partition) - // TODO(peering): we're throwing away the index here that would tell us how to execute a blocking query - _, peers, err := s.Backend.Store().PeeringsForService(nil, req.ServiceName, entMeta) - if err != nil { - return nil, fmt.Errorf("failed to get peers for service %s: %v", req.ServiceName, err) - } - - trustBundles := []*pbpeering.PeeringTrustBundle{} - for _, peer := range peers { - q := state.Query{ - Value: strings.ToLower(peer.Name), - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(req.Partition), - } - _, trustBundle, err := s.Backend.Store().PeeringTrustBundleRead(nil, q) - if err != nil { - return nil, fmt.Errorf("failed to read trust bundle for peer %s: %v", peer.Name, err) - } - - if trustBundle != nil { - trustBundles = append(trustBundles, trustBundle) - } - } - return &pbpeering.TrustBundleListByServiceResponse{Bundles: trustBundles}, nil -} - -type BidirectionalStream interface { - Send(*pbpeering.ReplicationMessage) error - Recv() (*pbpeering.ReplicationMessage, error) - Context() context.Context -} - -// StreamResources handles incoming streaming connections. -func (s *Service) StreamResources(stream pbpeering.PeeringService_StreamResourcesServer) error { - if !s.Backend.IsLeader() { - // we are not the leader so we will hang up on the dialer - - // TODO(peering): in the future we want to indicate the address of the leader server as a message to the dialer (best effort, non blocking) - s.logger.Error("cannot establish a peering stream on a follower node") - return grpcstatus.Error(codes.FailedPrecondition, "cannot establish a peering stream on a follower node") - } - - // Initial message on a new stream must be a new subscription request. - first, err := stream.Recv() - if err != nil { - s.logger.Error("failed to establish stream", "error", err) - return err - } - - // TODO(peering) Make request contain a list of resources, so that roots and services can be - // subscribed to with a single request. See: - // https://github.com/envoyproxy/data-plane-api/blob/main/envoy/service/discovery/v3/discovery.proto#L46 - req := first.GetRequest() - if req == nil { - return grpcstatus.Error(codes.InvalidArgument, "first message when initiating a peering must be a subscription request") - } - s.logger.Trace("received initial replication request from peer") - logTraceRecv(s.logger, req) - - if req.PeerID == "" { - return grpcstatus.Error(codes.InvalidArgument, "initial subscription request must specify a PeerID") - } - if req.Nonce != "" { - return grpcstatus.Error(codes.InvalidArgument, "initial subscription request must not contain a nonce") - } - if !pbpeering.KnownTypeURL(req.ResourceURL) { - return grpcstatus.Error(codes.InvalidArgument, fmt.Sprintf("subscription request to unknown resource URL: %s", req.ResourceURL)) - } - - _, p, err := s.Backend.Store().PeeringReadByID(nil, req.PeerID) - if err != nil { - s.logger.Error("failed to look up peer", "peer_id", req.PeerID, "error", err) - return grpcstatus.Error(codes.Internal, "failed to find PeerID: "+req.PeerID) - } - if p == nil { - return grpcstatus.Error(codes.InvalidArgument, "initial subscription for unknown PeerID: "+req.PeerID) - } - - // TODO(peering): If the peering is marked as deleted, send a Terminated message and return - // TODO(peering): Store subscription request so that an event publisher can separately handle pushing messages for it - s.logger.Info("accepted initial replication request from peer", "peer_id", req.PeerID) - - // For server peers both of these ID values are the same, because we generated a token with a local ID, - // and the client peer dials using that same ID. - return s.HandleStream(HandleStreamRequest{ - LocalID: p.ID, - RemoteID: p.PeerID, - PeerName: p.Name, - Partition: p.Partition, - Stream: stream, - }) -} - -type HandleStreamRequest struct { - // LocalID is the UUID for the peering in the local Consul datacenter. - LocalID string - - // RemoteID is the UUID for the peering from the perspective of the peer. - RemoteID string - - // PeerName is the name of the peering. - PeerName string - - // Partition is the local partition associated with the peer. - Partition string - - // Stream is the open stream to the peer cluster. - Stream BidirectionalStream -} - -// The localID provided is the locally-generated identifier for the peering. -// The remoteID is an identifier that the remote peer recognizes for the peering. -func (s *Service) HandleStream(req HandleStreamRequest) error { - logger := s.logger.Named("stream").With("peer_id", req.LocalID) - logger.Trace("handling stream for peer") - - status, err := s.streams.connected(req.LocalID) - if err != nil { - return fmt.Errorf("failed to register stream: %v", err) - } - - // TODO(peering) Also need to clear subscriptions associated with the peer - defer s.streams.disconnected(req.LocalID) - - var trustDomain string - if s.config.ConnectEnabled { - // Read the TrustDomain up front - we do not allow users to change the ClusterID - // so reading it once at the beginning of the stream is sufficient. - trustDomain, err = getTrustDomain(s.Backend.Store(), logger) - if err != nil { - return err - } - } - - mgr := newSubscriptionManager( - req.Stream.Context(), - logger, - s.config, - trustDomain, - s.Backend, - ) - subCh := mgr.subscribe(req.Stream.Context(), req.LocalID, req.PeerName, req.Partition) - - sub := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: pbpeering.TypeURLService, - PeerID: req.RemoteID, - }, - }, - } - logTraceSend(logger, sub) - - if err := req.Stream.Send(sub); err != nil { - if err == io.EOF { - logger.Info("stream ended by peer") - status.trackReceiveError(err.Error()) - return nil - } - // TODO(peering) Test error handling in calls to Send/Recv - status.trackSendError(err.Error()) - return fmt.Errorf("failed to send to stream: %v", err) - } - - // TODO(peering): Should this be buffered? - recvChan := make(chan *pbpeering.ReplicationMessage) - go func() { - defer close(recvChan) - for { - msg, err := req.Stream.Recv() - if err == io.EOF { - logger.Info("stream ended by peer") - status.trackReceiveError(err.Error()) - return - } - if e, ok := grpcstatus.FromError(err); ok { - // Cancelling the stream is not an error, that means we or our peer intended to terminate the peering. - if e.Code() == codes.Canceled { - return - } - } - if err != nil { - logger.Error("failed to receive from stream", "error", err) - status.trackReceiveError(err.Error()) - return - } - - logTraceRecv(logger, msg) - recvChan <- msg - } - }() - - for { - select { - // When the doneCh is closed that means that the peering was deleted locally. - case <-status.doneCh: - logger.Info("ending stream") - - term := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Terminated_{ - Terminated: &pbpeering.ReplicationMessage_Terminated{}, - }, - } - logTraceSend(logger, term) - - if err := req.Stream.Send(term); err != nil { - status.trackSendError(err.Error()) - return fmt.Errorf("failed to send to stream: %v", err) - } - - logger.Trace("deleting stream status") - s.streams.deleteStatus(req.LocalID) - - return nil - - case msg, open := <-recvChan: - if !open { - // No longer receiving data on the stream. - return nil - } - - if !s.Backend.IsLeader() { - // we are not the leader anymore so we will hang up on the dialer - - // TODO(peering): in the future we want to indicate the address of the leader server as a message to the dialer (best effort, non blocking) - logger.Error("node is not a leader anymore; cannot continue streaming") - return grpcstatus.Error(codes.FailedPrecondition, "node is not a leader anymore; cannot continue streaming") - } - - if req := msg.GetRequest(); req != nil { - switch { - case req.Nonce == "": - // TODO(peering): This can happen on a client peer since they don't try to receive subscriptions before entering HandleStream. - // Should change that behavior or only allow it that one time. - - case req.Error != nil && (req.Error.Code != int32(code.Code_OK) || req.Error.Message != ""): - logger.Warn("client peer was unable to apply resource", "code", req.Error.Code, "error", req.Error.Message) - status.trackNack(fmt.Sprintf("client peer was unable to apply resource: %s", req.Error.Message)) - - default: - status.trackAck() - } - - continue - } - - if resp := msg.GetResponse(); resp != nil { - // TODO(peering): Ensure there's a nonce - reply, err := s.processResponse(req.PeerName, req.Partition, resp) - if err != nil { - logger.Error("failed to persist resource", "resourceURL", resp.ResourceURL, "resourceID", resp.ResourceID) - status.trackReceiveError(err.Error()) - } else { - status.trackReceiveSuccess() - } - - logTraceSend(logger, reply) - if err := req.Stream.Send(reply); err != nil { - status.trackSendError(err.Error()) - return fmt.Errorf("failed to send to stream: %v", err) - } - - continue - } - - if term := msg.GetTerminated(); term != nil { - logger.Info("received peering termination message, cleaning up imported resources") - - // Once marked as terminated, a separate deferred deletion routine will clean up imported resources. - if err := s.Backend.Apply().PeeringTerminateByID(&pbpeering.PeeringTerminateByIDRequest{ID: req.LocalID}); err != nil { - return err - } - return nil - } - - case update := <-subCh: - var resp *pbpeering.ReplicationMessage - switch { - case strings.HasPrefix(update.CorrelationID, subExportedService), - strings.HasPrefix(update.CorrelationID, subExportedProxyService): - resp = makeServiceResponse(logger, update) - - case strings.HasPrefix(update.CorrelationID, subMeshGateway): - // TODO(Peering): figure out how to sync this separately - - case update.CorrelationID == subCARoot: - resp = makeCARootsResponse(logger, update) - - default: - logger.Warn("unrecognized update type from subscription manager: " + update.CorrelationID) - continue - } - if resp == nil { - continue - } - logTraceSend(logger, resp) - if err := req.Stream.Send(resp); err != nil { - status.trackSendError(err.Error()) - return fmt.Errorf("failed to push data for %q: %w", update.CorrelationID, err) - } - } - } -} - -func getTrustDomain(store Store, logger hclog.Logger) (string, error) { - _, cfg, err := store.CAConfig(nil) - switch { - case err != nil: - logger.Error("failed to read Connect CA Config", "error", err) - return "", grpcstatus.Error(codes.Internal, "failed to read Connect CA Config") - case cfg == nil: - logger.Warn("cannot begin stream because Connect CA is not yet initialized") - return "", grpcstatus.Error(codes.FailedPrecondition, "Connect CA is not yet initialized") - } - return connect.SpiffeIDSigningForCluster(cfg.ClusterID).Host(), nil -} - -func (s *Service) StreamStatus(peer string) (resp StreamStatus, found bool) { - return s.streams.streamStatus(peer) -} - -// ConnectedStreams returns a map of connected stream IDs to the corresponding channel for tearing them down. -func (s *Service) ConnectedStreams() map[string]chan struct{} { - return s.streams.connectedStreams() -} - -func logTraceRecv(logger hclog.Logger, pb proto.Message) { - logTraceProto(logger, pb, true) -} - -func logTraceSend(logger hclog.Logger, pb proto.Message) { - logTraceProto(logger, pb, false) -} - -func logTraceProto(logger hclog.Logger, pb proto.Message, received bool) { - if !logger.IsTrace() { - return - } - - dir := "sent" - if received { - dir = "received" - } - - m := jsonpb.Marshaler{ - Indent: " ", - } - out, err := m.MarshalToString(pb) - if err != nil { - out = "" - } - - logger.Trace("replication message", "direction", dir, "protobuf", out) -} diff --git a/agent/rpc/peering/service_oss_test.go b/agent/rpc/peering/service_oss_test.go deleted file mode 100644 index 8c7633639a34f..0000000000000 --- a/agent/rpc/peering/service_oss_test.go +++ /dev/null @@ -1,39 +0,0 @@ -//go:build !consulent -// +build !consulent - -package peering_test - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/proto/pbpeering" -) - -func TestPeeringService_RejectsPartition(t *testing.T) { - s := newTestServer(t, nil) - client := pbpeering.NewPeeringServiceClient(s.ClientConn(t)) - - t.Run("read", func(t *testing.T) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - req := &pbpeering.PeeringReadRequest{Name: "foo", Partition: "default"} - resp, err := client.PeeringRead(ctx, req) - require.Contains(t, err.Error(), "Partitions are a Consul Enterprise feature") - require.Nil(t, resp) - }) - - t.Run("list", func(t *testing.T) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - req := &pbpeering.PeeringListRequest{Partition: "default"} - resp, err := client.PeeringList(ctx, req) - require.Contains(t, err.Error(), "Partitions are a Consul Enterprise feature") - require.Nil(t, resp) - }) -} diff --git a/agent/rpc/peering/service_test.go b/agent/rpc/peering/service_test.go deleted file mode 100644 index 0d30987da539f..0000000000000 --- a/agent/rpc/peering/service_test.go +++ /dev/null @@ -1,1235 +0,0 @@ -package peering_test - -import ( - "context" - "encoding/base64" - "encoding/json" - "fmt" - "io/ioutil" - "net" - "path" - "testing" - "time" - - "github.com/hashicorp/go-hclog" - "github.com/hashicorp/go-uuid" - "github.com/stretchr/testify/require" - "golang.org/x/sync/errgroup" - gogrpc "google.golang.org/grpc" - "google.golang.org/protobuf/types/known/anypb" - - "github.com/hashicorp/consul/agent/consul/state" - grpc "github.com/hashicorp/consul/agent/grpc/private" - "github.com/hashicorp/consul/agent/grpc/private/resolver" - "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/proto/pbservice" - "github.com/hashicorp/consul/proto/prototest" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul" - "github.com/hashicorp/consul/agent/pool" - "github.com/hashicorp/consul/agent/router" - "github.com/hashicorp/consul/agent/rpc/middleware" - "github.com/hashicorp/consul/agent/rpc/peering" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/agent/token" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/sdk/freeport" - "github.com/hashicorp/consul/sdk/testutil" - "github.com/hashicorp/consul/testrpc" - "github.com/hashicorp/consul/tlsutil" - "github.com/hashicorp/consul/types" -) - -func generateTooManyMetaKeys() map[string]string { - // todo -- modularize in structs.go or testing.go - tooMuchMeta := make(map[string]string) - for i := 0; i < 64+1; i++ { - tooMuchMeta[fmt.Sprint(i)] = "value" - } - - return tooMuchMeta -} - -func TestPeeringService_GenerateToken(t *testing.T) { - dir := testutil.TempDir(t, "consul") - signer, _, _ := tlsutil.GeneratePrivateKey() - ca, _, _ := tlsutil.GenerateCA(tlsutil.CAOpts{Signer: signer}) - cafile := path.Join(dir, "cacert.pem") - require.NoError(t, ioutil.WriteFile(cafile, []byte(ca), 0600)) - - // TODO(peering): see note on newTestServer, refactor to not use this - s := newTestServer(t, func(c *consul.Config) { - c.SerfLANConfig.MemberlistConfig.AdvertiseAddr = "127.0.0.1" - c.TLSConfig.InternalRPC.CAFile = cafile - c.DataDir = dir - }) - client := pbpeering.NewPeeringServiceClient(s.ClientConn(t)) - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - expectedAddr := s.Server.Listener.Addr().String() - - // TODO(peering): for more failure cases, consider using a table test - // check meta tags - reqE := pbpeering.GenerateTokenRequest{PeerName: "peerB", Datacenter: "dc1", Meta: generateTooManyMetaKeys()} - _, errE := client.GenerateToken(ctx, &reqE) - require.EqualError(t, errE, "rpc error: code = Unknown desc = meta tags failed validation: Node metadata cannot contain more than 64 key/value pairs") - - // happy path - req := pbpeering.GenerateTokenRequest{PeerName: "peerB", Datacenter: "dc1", Meta: map[string]string{"foo": "bar"}} - resp, err := client.GenerateToken(ctx, &req) - require.NoError(t, err) - - tokenJSON, err := base64.StdEncoding.DecodeString(resp.PeeringToken) - require.NoError(t, err) - - token := &structs.PeeringToken{} - require.NoError(t, json.Unmarshal(tokenJSON, token)) - require.Equal(t, "server.dc1.consul", token.ServerName) - require.Len(t, token.ServerAddresses, 1) - require.Equal(t, expectedAddr, token.ServerAddresses[0]) - require.Equal(t, []string{ca}, token.CA) - - require.NotEmpty(t, token.PeerID) - _, err = uuid.ParseUUID(token.PeerID) - require.NoError(t, err) - - _, peers, err := s.Server.FSM().State().PeeringList(nil, *structs.DefaultEnterpriseMetaInDefaultPartition()) - require.NoError(t, err) - require.Len(t, peers, 1) - - peers[0].ModifyIndex = 0 - peers[0].CreateIndex = 0 - - expect := &pbpeering.Peering{ - Name: "peerB", - Partition: acl.DefaultPartitionName, - ID: token.PeerID, - State: pbpeering.PeeringState_INITIAL, - Meta: map[string]string{"foo": "bar"}, - } - require.Equal(t, expect, peers[0]) -} - -func TestPeeringService_Initiate(t *testing.T) { - validToken := peering.TestPeeringToken("83474a06-cca4-4ff4-99a4-4152929c8160") - validTokenJSON, _ := json.Marshal(&validToken) - validTokenB64 := base64.StdEncoding.EncodeToString(validTokenJSON) - - // TODO(peering): see note on newTestServer, refactor to not use this - s := newTestServer(t, nil) - client := pbpeering.NewPeeringServiceClient(s.ClientConn(t)) - - type testcase struct { - name string - req *pbpeering.InitiateRequest - expectResp *pbpeering.InitiateResponse - expectPeering *pbpeering.Peering - expectErr string - } - run := func(t *testing.T, tc testcase) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - resp, err := client.Initiate(ctx, tc.req) - if tc.expectErr != "" { - require.Contains(t, err.Error(), tc.expectErr) - return - } - require.NoError(t, err) - prototest.AssertDeepEqual(t, tc.expectResp, resp) - - // if a peering was expected to be written, try to read it back - if tc.expectPeering != nil { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - resp, err := client.PeeringRead(ctx, &pbpeering.PeeringReadRequest{Name: tc.expectPeering.Name}) - require.NoError(t, err) - // check individual values we care about since we don't know exactly - // what the create/modify indexes will be - require.Equal(t, tc.expectPeering.Name, resp.Peering.Name) - require.Equal(t, tc.expectPeering.Partition, resp.Peering.Partition) - require.Equal(t, tc.expectPeering.State, resp.Peering.State) - require.Equal(t, tc.expectPeering.PeerCAPems, resp.Peering.PeerCAPems) - require.Equal(t, tc.expectPeering.PeerServerAddresses, resp.Peering.PeerServerAddresses) - require.Equal(t, tc.expectPeering.PeerServerName, resp.Peering.PeerServerName) - } - } - tcs := []testcase{ - { - name: "invalid peer name", - req: &pbpeering.InitiateRequest{PeerName: "--AA--"}, - expectErr: "--AA-- is not a valid peer name", - }, - { - name: "invalid token (base64)", - req: &pbpeering.InitiateRequest{ - PeerName: "peer1-usw1", - PeeringToken: "+++/+++", - }, - expectErr: "illegal base64 data", - }, - { - name: "invalid token (JSON)", - req: &pbpeering.InitiateRequest{ - PeerName: "peer1-usw1", - PeeringToken: "Cg==", // base64 of "-" - }, - expectErr: "unexpected end of JSON input", - }, - { - name: "invalid token (empty)", - req: &pbpeering.InitiateRequest{ - PeerName: "peer1-usw1", - PeeringToken: "e30K", // base64 of "{}" - }, - expectErr: "peering token server addresses value is empty", - }, - { - name: "too many meta tags", - req: &pbpeering.InitiateRequest{ - PeerName: "peer1-usw1", - PeeringToken: validTokenB64, - Meta: generateTooManyMetaKeys(), - }, - expectErr: "meta tags failed validation:", - }, - { - name: "success", - req: &pbpeering.InitiateRequest{ - PeerName: "peer1-usw1", - PeeringToken: validTokenB64, - Meta: map[string]string{"foo": "bar"}, - }, - expectResp: &pbpeering.InitiateResponse{}, - expectPeering: peering.TestPeering( - "peer1-usw1", - pbpeering.PeeringState_INITIAL, - map[string]string{"foo": "bar"}, - ), - }, - } - for _, tc := range tcs { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} -func TestPeeringService_Read(t *testing.T) { - // TODO(peering): see note on newTestServer, refactor to not use this - s := newTestServer(t, nil) - - // insert peering directly to state store - p := &pbpeering.Peering{ - Name: "foo", - State: pbpeering.PeeringState_INITIAL, - PeerCAPems: nil, - PeerServerName: "test", - PeerServerAddresses: []string{"addr1"}, - } - err := s.Server.FSM().State().PeeringWrite(10, p) - require.NoError(t, err) - - client := pbpeering.NewPeeringServiceClient(s.ClientConn(t)) - - type testcase struct { - name string - req *pbpeering.PeeringReadRequest - expect *pbpeering.PeeringReadResponse - expectErr string - } - run := func(t *testing.T, tc testcase) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - resp, err := client.PeeringRead(ctx, tc.req) - if tc.expectErr != "" { - require.Contains(t, err.Error(), tc.expectErr) - return - } - require.NoError(t, err) - prototest.AssertDeepEqual(t, tc.expect, resp) - } - tcs := []testcase{ - { - name: "returns foo", - req: &pbpeering.PeeringReadRequest{Name: "foo"}, - expect: &pbpeering.PeeringReadResponse{Peering: p}, - expectErr: "", - }, - { - name: "bar not found", - req: &pbpeering.PeeringReadRequest{Name: "bar"}, - expect: &pbpeering.PeeringReadResponse{}, - expectErr: "", - }, - } - for _, tc := range tcs { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} - -func TestPeeringService_List(t *testing.T) { - // TODO(peering): see note on newTestServer, refactor to not use this - s := newTestServer(t, nil) - - // Insert peerings directly to state store. - // Note that the state store holds reference to the underlying - // variables; do not modify them after writing. - foo := &pbpeering.Peering{ - Name: "foo", - State: pbpeering.PeeringState_INITIAL, - PeerCAPems: nil, - PeerServerName: "fooservername", - PeerServerAddresses: []string{"addr1"}, - } - require.NoError(t, s.Server.FSM().State().PeeringWrite(10, foo)) - bar := &pbpeering.Peering{ - Name: "bar", - State: pbpeering.PeeringState_ACTIVE, - PeerCAPems: nil, - PeerServerName: "barservername", - PeerServerAddresses: []string{"addr1"}, - } - require.NoError(t, s.Server.FSM().State().PeeringWrite(15, bar)) - - client := pbpeering.NewPeeringServiceClient(s.ClientConn(t)) - - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - resp, err := client.PeeringList(ctx, &pbpeering.PeeringListRequest{}) - require.NoError(t, err) - - expect := &pbpeering.PeeringListResponse{ - Peerings: []*pbpeering.Peering{bar, foo}, - } - prototest.AssertDeepEqual(t, expect, resp) -} - -func TestPeeringService_TrustBundleRead(t *testing.T) { - srv := newTestServer(t, nil) - store := srv.Server.FSM().State() - client := pbpeering.NewPeeringServiceClient(srv.ClientConn(t)) - - var lastIdx uint64 = 1 - _ = setupTestPeering(t, store, "my-peering", lastIdx) - - mysql := &structs.CheckServiceNode{ - Node: &structs.Node{ - Node: "node1", - Address: "10.0.0.1", - PeerName: "my-peering", - }, - Service: &structs.NodeService{ - ID: "mysql-1", - Service: "mysql", - Port: 5000, - PeerName: "my-peering", - }, - } - - lastIdx++ - require.NoError(t, store.EnsureNode(lastIdx, mysql.Node)) - lastIdx++ - require.NoError(t, store.EnsureService(lastIdx, mysql.Node.Node, mysql.Service)) - - bundle := &pbpeering.PeeringTrustBundle{ - TrustDomain: "peer1.com", - PeerName: "my-peering", - RootPEMs: []string{"peer1-root-1"}, - } - lastIdx++ - require.NoError(t, store.PeeringTrustBundleWrite(lastIdx, bundle)) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - resp, err := client.TrustBundleRead(ctx, &pbpeering.TrustBundleReadRequest{ - Name: "my-peering", - }) - require.NoError(t, err) - require.Equal(t, lastIdx, resp.Index) - require.NotNil(t, resp.Bundle) - prototest.AssertDeepEqual(t, bundle, resp.Bundle) -} - -func TestPeeringService_TrustBundleListByService(t *testing.T) { - // test executes the following scenario: - // 0 - initial setup test server, state store, RPC client, verify empty results - // 1 - create a service, verify results still empty - // 2 - create a peering, verify results still empty - // 3 - create a config entry, verify results still empty - // 4 - create trust bundles, verify bundles are returned - // 5 - delete the config entry, verify results empty - // 6 - restore config entry, verify bundles are returned - // 7 - add peering, trust bundles, wildcard config entry, verify updated results are present - // 8 - delete first config entry, verify bundles are returned - // 9 - delete the service, verify results empty - // Note: these steps are dependent on each other by design so that we can verify that - // combinations of services, peerings, trust bundles, and config entries all affect results - - // fixed for the test - nodeName := "test-node" - - // keep track of index across steps - var lastIdx uint64 - - // Create test server - // TODO(peering): see note on newTestServer, refactor to not use this - srv := newTestServer(t, nil) - store := srv.Server.FSM().State() - client := pbpeering.NewPeeringServiceClient(srv.ClientConn(t)) - - // Create a node up-front so that we can assign services to it if needed - svcNode := &structs.Node{Node: nodeName, Address: "127.0.0.1"} - lastIdx++ - require.NoError(t, store.EnsureNode(lastIdx, svcNode)) - - type testDeps struct { - services []string - peerings []*pbpeering.Peering - entries []*structs.ExportedServicesConfigEntry - bundles []*pbpeering.PeeringTrustBundle - } - - setup := func(t *testing.T, idx uint64, deps testDeps) uint64 { - // Create any services (and node) - if len(deps.services) >= 0 { - svcNode := &structs.Node{Node: nodeName, Address: "127.0.0.1"} - idx++ - require.NoError(t, store.EnsureNode(idx, svcNode)) - - // Create the test services - for _, svc := range deps.services { - idx++ - require.NoError(t, store.EnsureService(idx, svcNode.Node, &structs.NodeService{ - ID: svc, - Service: svc, - Port: int(8000 + idx), - })) - } - } - - // Insert any peerings - for _, peering := range deps.peerings { - idx++ - require.NoError(t, store.PeeringWrite(idx, peering)) - - // make sure it got created - q := state.Query{Value: peering.Name} - _, p, err := store.PeeringRead(nil, q) - require.NoError(t, err) - require.NotNil(t, p) - } - - // Insert any trust bundles - for _, bundle := range deps.bundles { - idx++ - require.NoError(t, store.PeeringTrustBundleWrite(idx, bundle)) - - q := state.Query{ - Value: bundle.PeerName, - EnterpriseMeta: *structs.NodeEnterpriseMetaInPartition(bundle.Partition), - } - gotIdx, ptb, err := store.PeeringTrustBundleRead(nil, q) - require.NoError(t, err) - require.NotNil(t, ptb) - require.Equal(t, gotIdx, idx) - } - - // Write any config entries - for _, entry := range deps.entries { - idx++ - require.NoError(t, store.EnsureConfigEntry(idx, entry)) - } - - return idx - } - - type testCase struct { - req *pbpeering.TrustBundleListByServiceRequest - expect *pbpeering.TrustBundleListByServiceResponse - expectErr string - } - - // TODO(peering): see note on newTestServer, once we have a better server mock, - // we should add functionality here to verify errors from backend - verify := func(t *testing.T, tc *testCase) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - resp, err := client.TrustBundleListByService(ctx, tc.req) - require.NoError(t, err) - // ignore raft fields - if resp.Bundles != nil { - for _, b := range resp.Bundles { - b.CreateIndex = 0 - b.ModifyIndex = 0 - } - } - prototest.AssertDeepEqual(t, tc.expect, resp) - } - - // Execute scenario steps - // ---------------------- - - // 0 - initial empty state - // ----------------------- - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: nil, - }, - }) - - // 1 - create a service, verify results still empty - // ------------------------------------------------ - lastIdx = setup(t, lastIdx, testDeps{services: []string{"foo"}}) - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{}, - }, - }) - - // 2 - create a peering, verify results still empty - // ------------------------------------------------ - lastIdx = setup(t, lastIdx, testDeps{ - peerings: []*pbpeering.Peering{ - { - Name: "peer1", - State: pbpeering.PeeringState_ACTIVE, - PeerServerName: "peer1-name", - PeerServerAddresses: []string{"peer1-addr"}, - }, - }, - }) - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{}, - }, - }) - - // 3 - create a config entry, verify results still empty - // ----------------------------------------------------- - lastIdx = setup(t, lastIdx, testDeps{ - entries: []*structs.ExportedServicesConfigEntry{ - { - Name: "export-foo", - Services: []structs.ExportedService{ - { - Name: "foo", - Consumers: []structs.ServiceConsumer{ - { - PeerName: "peer1", - }, - }, - }, - }, - }, - }, - }) - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{}, - }, - }) - - // 4 - create trust bundles, verify bundles are returned - // ----------------------------------------------------- - lastIdx = setup(t, lastIdx, testDeps{ - bundles: []*pbpeering.PeeringTrustBundle{ - { - TrustDomain: "peer1.com", - PeerName: "peer1", - RootPEMs: []string{"peer1-root-1"}, - }, - }, - }) - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{ - { - TrustDomain: "peer1.com", - PeerName: "peer1", - RootPEMs: []string{"peer1-root-1"}, - }, - }, - }, - }) - - // 5 - delete the config entry, verify results empty - // ------------------------------------------------- - lastIdx++ - require.NoError(t, store.DeleteConfigEntry(lastIdx, structs.ExportedServices, "export-foo", nil)) - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{}, - }, - }) - - // 6 - restore config entry, verify bundles are returned - // ----------------------------------------------------- - lastIdx = setup(t, lastIdx, testDeps{ - entries: []*structs.ExportedServicesConfigEntry{ - { - Name: "export-foo", - Services: []structs.ExportedService{ - { - Name: "foo", - Consumers: []structs.ServiceConsumer{ - {PeerName: "peer1"}, - }, - }, - }, - }, - }, - }) - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{ - { - TrustDomain: "peer1.com", - PeerName: "peer1", - RootPEMs: []string{"peer1-root-1"}, - }, - }, - }, - }) - - // 7 - add peering, trust bundles, wildcard config entry, verify updated results are present - // ----------------------------------------------------------------------------------------- - lastIdx = setup(t, lastIdx, testDeps{ - services: []string{"bar"}, - peerings: []*pbpeering.Peering{ - { - Name: "peer2", - State: pbpeering.PeeringState_ACTIVE, - PeerServerName: "peer2-name", - PeerServerAddresses: []string{"peer2-addr"}, - }, - }, - entries: []*structs.ExportedServicesConfigEntry{ - { - Name: "export-all", - Services: []structs.ExportedService{ - { - Name: structs.WildcardSpecifier, - Consumers: []structs.ServiceConsumer{ - {PeerName: "peer1"}, - {PeerName: "peer2"}, - }, - }, - }, - }, - }, - bundles: []*pbpeering.PeeringTrustBundle{ - { - TrustDomain: "peer2.com", - PeerName: "peer2", - RootPEMs: []string{"peer2-root-1"}, - }, - }, - }) - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{ - { - TrustDomain: "peer1.com", - PeerName: "peer1", - RootPEMs: []string{"peer1-root-1"}, - }, - { - TrustDomain: "peer2.com", - PeerName: "peer2", - RootPEMs: []string{"peer2-root-1"}, - }, - }, - }, - }) - - // 8 - delete first config entry, verify bundles are returned - lastIdx++ - require.NoError(t, store.DeleteConfigEntry(lastIdx, structs.ExportedServices, "export-foo", nil)) - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{ - { - TrustDomain: "peer1.com", - PeerName: "peer1", - RootPEMs: []string{"peer1-root-1"}, - }, - { - TrustDomain: "peer2.com", - PeerName: "peer2", - RootPEMs: []string{"peer2-root-1"}, - }, - }, - }, - }) - - // 9 - delete the service, verify results empty - lastIdx++ - require.NoError(t, store.DeleteService(lastIdx, nodeName, "foo", nil, "")) - verify(t, &testCase{ - req: &pbpeering.TrustBundleListByServiceRequest{ - ServiceName: "foo", - }, - expect: &pbpeering.TrustBundleListByServiceResponse{ - Bundles: []*pbpeering.PeeringTrustBundle{}, - }, - }) -} - -func Test_StreamHandler_UpsertServices(t *testing.T) { - if testing.Short() { - t.Skip("too slow for testing.Short") - } - - type testCase struct { - name string - msg *pbpeering.ReplicationMessage_Response - input structs.CheckServiceNodes - expect structs.CheckServiceNodes - } - - s := newTestServer(t, nil) - testrpc.WaitForLeader(t, s.Server.RPC, "dc1") - testrpc.WaitForActiveCARoot(t, s.Server.RPC, "dc1", nil) - - srv := peering.NewService( - testutil.Logger(t), - peering.Config{ - Datacenter: "dc1", - ConnectEnabled: true, - }, - consul.NewPeeringBackend(s.Server, nil), - ) - - require.NoError(t, s.Server.FSM().State().PeeringWrite(0, &pbpeering.Peering{ - Name: "my-peer", - })) - - _, p, err := s.Server.FSM().State().PeeringRead(nil, state.Query{Value: "my-peer"}) - require.NoError(t, err) - - client := peering.NewMockClient(context.Background()) - - errCh := make(chan error, 1) - client.ErrCh = errCh - - go func() { - // Pass errors from server handler into ErrCh so that they can be seen by the client on Recv(). - // This matches gRPC's behavior when an error is returned by a server. - err := srv.StreamResources(client.ReplicationStream) - if err != nil { - errCh <- err - } - }() - - sub := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - PeerID: p.ID, - ResourceURL: pbpeering.TypeURLService, - }, - }, - } - require.NoError(t, client.Send(sub)) - - // Receive subscription request from peer for our services - _, err = client.Recv() - require.NoError(t, err) - - // Receive first roots replication message - receiveRoots, err := client.Recv() - require.NoError(t, err) - require.NotNil(t, receiveRoots.GetResponse()) - require.Equal(t, pbpeering.TypeURLRoots, receiveRoots.GetResponse().ResourceURL) - - remoteEntMeta := structs.DefaultEnterpriseMetaInPartition("remote-partition") - localEntMeta := acl.DefaultEnterpriseMeta() - localPeerName := "my-peer" - - // Scrub data we don't need for the assertions below. - scrubCheckServiceNodes := func(instances structs.CheckServiceNodes) { - for _, csn := range instances { - csn.Node.RaftIndex = structs.RaftIndex{} - - csn.Service.TaggedAddresses = nil - csn.Service.Weights = nil - csn.Service.RaftIndex = structs.RaftIndex{} - csn.Service.Proxy = structs.ConnectProxyConfig{} - - for _, c := range csn.Checks { - c.RaftIndex = structs.RaftIndex{} - c.Definition = structs.HealthCheckDefinition{} - } - } - } - - run := func(t *testing.T, tc testCase) { - pbCSN := &pbservice.IndexedCheckServiceNodes{} - for _, csn := range tc.input { - pbCSN.Nodes = append(pbCSN.Nodes, pbservice.NewCheckServiceNodeFromStructs(&csn)) - } - - any, err := anypb.New(pbCSN) - require.NoError(t, err) - tc.msg.Resource = any - - resp := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Response_{ - Response: tc.msg, - }, - } - require.NoError(t, client.Send(resp)) - - msg, err := client.RecvWithTimeout(1 * time.Second) - require.NoError(t, err) - - req := msg.GetRequest() - require.NotNil(t, req) - require.Equal(t, tc.msg.Nonce, req.Nonce) - require.Nil(t, req.Error) - - _, got, err := s.Server.FSM().State().CombinedCheckServiceNodes(nil, structs.NewServiceName("api", nil), localPeerName) - require.NoError(t, err) - - scrubCheckServiceNodes(got) - require.Equal(t, tc.expect, got) - } - - // NOTE: These test cases do not run against independent state stores, they show sequential updates for a given service. - // Every new upsert must replace the data from the previous case. - tt := []testCase{ - { - name: "upsert an instance on a node", - msg: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - ResourceID: "api", - Nonce: "1", - Operation: pbpeering.ReplicationMessage_Response_UPSERT, - }, - input: structs.CheckServiceNodes{ - { - Node: &structs.Node{ - ID: "112e2243-ab62-4e8a-9317-63306972183c", - Node: "node-1", - Address: "10.0.0.1", - Datacenter: "dc1", - Partition: remoteEntMeta.PartitionOrEmpty(), - }, - Service: &structs.NodeService{ - Kind: "", - ID: "api-1", - Service: "api", - Port: 8080, - EnterpriseMeta: *remoteEntMeta, - }, - Checks: []*structs.HealthCheck{ - { - CheckID: "node-1-check", - Node: "node-1", - Status: api.HealthPassing, - EnterpriseMeta: *remoteEntMeta, - }, - { - CheckID: "api-1-check", - ServiceID: "api-1", - ServiceName: "api", - Node: "node-1", - Status: api.HealthCritical, - EnterpriseMeta: *remoteEntMeta, - }, - }, - }, - }, - expect: structs.CheckServiceNodes{ - { - Node: &structs.Node{ - ID: "112e2243-ab62-4e8a-9317-63306972183c", - Node: "node-1", - Address: "10.0.0.1", - Datacenter: "dc1", - Partition: localEntMeta.PartitionOrEmpty(), - PeerName: localPeerName, - }, - Service: &structs.NodeService{ - Kind: "", - ID: "api-1", - Service: "api", - Port: 8080, - EnterpriseMeta: *localEntMeta, - PeerName: localPeerName, - }, - Checks: []*structs.HealthCheck{ - { - CheckID: "node-1-check", - Node: "node-1", - Status: api.HealthPassing, - EnterpriseMeta: *localEntMeta, - PeerName: localPeerName, - }, - { - CheckID: "api-1-check", - ServiceID: "api-1", - ServiceName: "api", - Node: "node-1", - Status: api.HealthCritical, - EnterpriseMeta: *localEntMeta, - PeerName: localPeerName, - }, - }, - }, - }, - }, - { - name: "upsert two instances on the same node", - msg: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - ResourceID: "api", - Nonce: "2", - Operation: pbpeering.ReplicationMessage_Response_UPSERT, - }, - input: structs.CheckServiceNodes{ - { - Node: &structs.Node{ - ID: "112e2243-ab62-4e8a-9317-63306972183c", - Node: "node-1", - Address: "10.0.0.1", - Datacenter: "dc1", - Partition: remoteEntMeta.PartitionOrEmpty(), - }, - Service: &structs.NodeService{ - Kind: "", - ID: "api-1", - Service: "api", - Port: 8080, - EnterpriseMeta: *remoteEntMeta, - }, - Checks: []*structs.HealthCheck{ - { - CheckID: "node-1-check", - Node: "node-1", - Status: api.HealthPassing, - EnterpriseMeta: *remoteEntMeta, - }, - { - CheckID: "api-1-check", - ServiceID: "api-1", - ServiceName: "api", - Node: "node-1", - Status: api.HealthCritical, - EnterpriseMeta: *remoteEntMeta, - }, - }, - }, - { - Node: &structs.Node{ - ID: "112e2243-ab62-4e8a-9317-63306972183c", - Node: "node-1", - Address: "10.0.0.1", - Datacenter: "dc1", - Partition: remoteEntMeta.PartitionOrEmpty(), - }, - Service: &structs.NodeService{ - Kind: "", - ID: "api-2", - Service: "api", - Port: 9090, - EnterpriseMeta: *remoteEntMeta, - }, - Checks: []*structs.HealthCheck{ - { - CheckID: "node-1-check", - Node: "node-1", - Status: api.HealthPassing, - EnterpriseMeta: *remoteEntMeta, - }, - { - CheckID: "api-2-check", - ServiceID: "api-2", - ServiceName: "api", - Node: "node-1", - Status: api.HealthWarning, - EnterpriseMeta: *remoteEntMeta, - }, - }, - }, - }, - expect: structs.CheckServiceNodes{ - { - Node: &structs.Node{ - ID: "112e2243-ab62-4e8a-9317-63306972183c", - Node: "node-1", - Address: "10.0.0.1", - Datacenter: "dc1", - Partition: localEntMeta.PartitionOrEmpty(), - PeerName: localPeerName, - }, - Service: &structs.NodeService{ - Kind: "", - ID: "api-1", - Service: "api", - Port: 8080, - EnterpriseMeta: *localEntMeta, - PeerName: localPeerName, - }, - Checks: []*structs.HealthCheck{ - { - CheckID: "node-1-check", - Node: "node-1", - Status: api.HealthPassing, - EnterpriseMeta: *localEntMeta, - PeerName: localPeerName, - }, - { - CheckID: "api-1-check", - ServiceID: "api-1", - ServiceName: "api", - Node: "node-1", - Status: api.HealthCritical, - EnterpriseMeta: *localEntMeta, - PeerName: localPeerName, - }, - }, - }, - { - Node: &structs.Node{ - ID: "112e2243-ab62-4e8a-9317-63306972183c", - Node: "node-1", - Address: "10.0.0.1", - Datacenter: "dc1", - Partition: localEntMeta.PartitionOrEmpty(), - PeerName: localPeerName, - }, - Service: &structs.NodeService{ - Kind: "", - ID: "api-2", - Service: "api", - Port: 9090, - EnterpriseMeta: *localEntMeta, - PeerName: localPeerName, - }, - Checks: []*structs.HealthCheck{ - { - CheckID: "node-1-check", - Node: "node-1", - Status: api.HealthPassing, - EnterpriseMeta: *localEntMeta, - PeerName: localPeerName, - }, - { - CheckID: "api-2-check", - ServiceID: "api-2", - ServiceName: "api", - Node: "node-1", - Status: api.HealthWarning, - EnterpriseMeta: *localEntMeta, - PeerName: localPeerName, - }, - }, - }, - }, - }, - } - for _, tc := range tt { - testutil.RunStep(t, tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} - -// newTestServer is copied from partition/service_test.go, with the addition of certs/cas. -// TODO(peering): these are endpoint tests and should live in the agent/consul -// package. Instead, these can be written around a mock client (see testing.go) -// and a mock backend (future) -func newTestServer(t *testing.T, cb func(conf *consul.Config)) testingServer { - t.Helper() - conf := consul.DefaultConfig() - dir := testutil.TempDir(t, "consul") - - ports := freeport.GetN(t, 3) // {rpc, serf_lan, serf_wan} - - conf.Bootstrap = true - conf.Datacenter = "dc1" - conf.DataDir = dir - conf.RPCAddr = &net.TCPAddr{IP: []byte{127, 0, 0, 1}, Port: ports[0]} - conf.RaftConfig.ElectionTimeout = 200 * time.Millisecond - conf.RaftConfig.LeaderLeaseTimeout = 100 * time.Millisecond - conf.RaftConfig.HeartbeatTimeout = 200 * time.Millisecond - conf.TLSConfig.Domain = "consul" - - conf.SerfLANConfig.MemberlistConfig.BindAddr = "127.0.0.1" - conf.SerfLANConfig.MemberlistConfig.BindPort = ports[1] - conf.SerfLANConfig.MemberlistConfig.AdvertisePort = ports[1] - conf.SerfWANConfig.MemberlistConfig.BindAddr = "127.0.0.1" - conf.SerfWANConfig.MemberlistConfig.BindPort = ports[2] - conf.SerfWANConfig.MemberlistConfig.AdvertisePort = ports[2] - - conf.PrimaryDatacenter = "dc1" - conf.ConnectEnabled = true - - nodeID, err := uuid.GenerateUUID() - if err != nil { - t.Fatal(err) - } - conf.NodeID = types.NodeID(nodeID) - - if cb != nil { - cb(conf) - } - - // Apply config to copied fields because many tests only set the old - // values. - conf.ACLResolverSettings.ACLsEnabled = conf.ACLsEnabled - conf.ACLResolverSettings.NodeName = conf.NodeName - conf.ACLResolverSettings.Datacenter = conf.Datacenter - conf.ACLResolverSettings.EnterpriseMeta = *conf.AgentEnterpriseMeta() - - deps := newDefaultDeps(t, conf) - server, err := consul.NewServer(conf, deps, gogrpc.NewServer()) - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, server.Shutdown()) - }) - - testrpc.WaitForLeader(t, server.RPC, conf.Datacenter) - - backend := consul.NewPeeringBackend(server, deps.GRPCConnPool) - handler := &peering.Service{Backend: backend} - - grpcServer := gogrpc.NewServer() - pbpeering.RegisterPeeringServiceServer(grpcServer, handler) - - lis, err := net.Listen("tcp", "127.0.0.1:0") - require.NoError(t, err) - t.Cleanup(func() { lis.Close() }) - - g := new(errgroup.Group) - g.Go(func() error { - return grpcServer.Serve(lis) - }) - t.Cleanup(func() { - if grpcServer.Stop(); err != nil { - t.Logf("grpc server shutdown: %v", err) - } - if err := g.Wait(); err != nil { - t.Logf("grpc server error: %v", err) - } - }) - - return testingServer{ - Server: server, - Backend: backend, - Addr: lis.Addr(), - } -} - -func (s testingServer) ClientConn(t *testing.T) *gogrpc.ClientConn { - t.Helper() - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - - conn, err := gogrpc.DialContext(ctx, s.Addr.String(), gogrpc.WithInsecure()) - require.NoError(t, err) - t.Cleanup(func() { conn.Close() }) - return conn -} - -type testingServer struct { - Server *consul.Server - Addr net.Addr - Backend peering.Backend -} - -// TODO(peering): remove duplication between this and agent/consul tests -func newDefaultDeps(t *testing.T, c *consul.Config) consul.Deps { - t.Helper() - - logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ - Name: c.NodeName, - Level: hclog.Debug, - Output: testutil.NewLogBuffer(t), - }) - - tls, err := tlsutil.NewConfigurator(c.TLSConfig, logger) - require.NoError(t, err, "failed to create tls configuration") - - r := router.NewRouter(logger, c.Datacenter, fmt.Sprintf("%s.%s", c.NodeName, c.Datacenter), nil) - builder := resolver.NewServerResolverBuilder(resolver.Config{}) - resolver.Register(builder) - - connPool := &pool.ConnPool{ - Server: false, - SrcAddr: c.RPCSrcAddr, - Logger: logger.StandardLogger(&hclog.StandardLoggerOptions{InferLevels: true}), - MaxTime: 2 * time.Minute, - MaxStreams: 4, - TLSConfigurator: tls, - Datacenter: c.Datacenter, - } - - return consul.Deps{ - Logger: logger, - TLSConfigurator: tls, - Tokens: new(token.Store), - Router: r, - ConnPool: connPool, - GRPCConnPool: grpc.NewClientConnPool(grpc.ClientConnPoolConfig{ - Servers: builder, - TLSWrapper: grpc.TLSWrapper(tls.OutgoingRPCWrapper()), - UseTLSForDC: tls.UseTLS, - DialingFromServer: true, - DialingFromDatacenter: c.Datacenter, - }), - LeaderForwarder: builder, - EnterpriseDeps: newDefaultDepsEnterprise(t, logger, c), - NewRequestRecorderFunc: middleware.NewRequestRecorder, - GetNetRPCInterceptorFunc: middleware.GetNetRPCInterceptor, - } -} - -func setupTestPeering(t *testing.T, store *state.Store, name string, index uint64) string { - err := store.PeeringWrite(index, &pbpeering.Peering{ - Name: name, - }) - require.NoError(t, err) - - _, p, err := store.PeeringRead(nil, state.Query{Value: name}) - require.NoError(t, err) - require.NotNil(t, p) - - return p.ID -} diff --git a/agent/rpc/peering/stream_test.go b/agent/rpc/peering/stream_test.go deleted file mode 100644 index e8568f72708a5..0000000000000 --- a/agent/rpc/peering/stream_test.go +++ /dev/null @@ -1,1223 +0,0 @@ -package peering - -import ( - "context" - "fmt" - "io" - "sort" - "testing" - "time" - - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes" - "github.com/golang/protobuf/ptypes/any" - "github.com/stretchr/testify/require" - "google.golang.org/genproto/googleapis/rpc/code" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/go-uuid" - - "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/proto/pbservice" - "github.com/hashicorp/consul/proto/pbstatus" - "github.com/hashicorp/consul/proto/prototest" - "github.com/hashicorp/consul/sdk/testutil" - "github.com/hashicorp/consul/sdk/testutil/retry" -) - -func TestStreamResources_Server_Follower(t *testing.T) { - publisher := stream.NewEventPublisher(10 * time.Second) - store := newStateStore(t, publisher) - - srv := NewService( - testutil.Logger(t), - Config{ - Datacenter: "dc1", - ConnectEnabled: true, - }, - &testStreamBackend{ - store: store, - pub: publisher, - leader: func() bool { - return false - }, - }) - - client := NewMockClient(context.Background()) - - errCh := make(chan error, 1) - client.ErrCh = errCh - - go func() { - // Pass errors from server handler into ErrCh so that they can be seen by the client on Recv(). - // This matches gRPC's behavior when an error is returned by a server. - err := srv.StreamResources(client.ReplicationStream) - if err != nil { - errCh <- err - } - }() - - msg, err := client.Recv() - require.Nil(t, msg) - require.Error(t, err) - require.EqualError(t, err, "rpc error: code = FailedPrecondition desc = cannot establish a peering stream on a follower node") -} - -// TestStreamResources_Server_LeaderBecomesFollower simulates a srv that is a leader when the -// subscription request is sent but loses leadership status for subsequent messages. -func TestStreamResources_Server_LeaderBecomesFollower(t *testing.T) { - publisher := stream.NewEventPublisher(10 * time.Second) - store := newStateStore(t, publisher) - - first := true - leaderFunc := func() bool { - if first { - first = false - return true - } - return false - } - - srv := NewService( - testutil.Logger(t), - Config{ - Datacenter: "dc1", - ConnectEnabled: true, - }, - &testStreamBackend{ - store: store, - pub: publisher, - leader: leaderFunc, - }) - - client := NewMockClient(context.Background()) - - errCh := make(chan error, 1) - client.ErrCh = errCh - - go func() { - err := srv.StreamResources(client.ReplicationStream) - if err != nil { - errCh <- err - } - }() - - p := writeInitiatedPeering(t, store, 1, "my-peer") - peerID := p.ID - - // Set the initial roots and CA configuration. - _, _ = writeInitialRootsAndCA(t, store) - - // Receive a subscription from a peer - sub := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - PeerID: peerID, - ResourceURL: pbpeering.TypeURLService, - }, - }, - } - err := client.Send(sub) - require.NoError(t, err) - - msg, err := client.Recv() - require.NoError(t, err) - require.NotEmpty(t, msg) - - receiveRoots, err := client.Recv() - require.NoError(t, err) - require.NotNil(t, receiveRoots.GetResponse()) - require.Equal(t, pbpeering.TypeURLRoots, receiveRoots.GetResponse().ResourceURL) - - input2 := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: pbpeering.TypeURLService, - Nonce: "1", - }, - }, - } - - err2 := client.Send(input2) - require.NoError(t, err2) - - msg2, err2 := client.Recv() - require.Nil(t, msg2) - require.Error(t, err2) - require.EqualError(t, err2, "rpc error: code = FailedPrecondition desc = node is not a leader anymore; cannot continue streaming") -} - -func TestStreamResources_Server_FirstRequest(t *testing.T) { - type testCase struct { - name string - input *pbpeering.ReplicationMessage - wantErr error - } - - run := func(t *testing.T, tc testCase) { - publisher := stream.NewEventPublisher(10 * time.Second) - store := newStateStore(t, publisher) - - srv := NewService( - testutil.Logger(t), - Config{ - Datacenter: "dc1", - ConnectEnabled: true, - }, &testStreamBackend{ - store: store, - pub: publisher, - }) - - client := NewMockClient(context.Background()) - - errCh := make(chan error, 1) - client.ErrCh = errCh - - go func() { - // Pass errors from server handler into ErrCh so that they can be seen by the client on Recv(). - // This matches gRPC's behavior when an error is returned by a server. - err := srv.StreamResources(client.ReplicationStream) - if err != nil { - errCh <- err - } - }() - - err := client.Send(tc.input) - require.NoError(t, err) - - msg, err := client.Recv() - require.Nil(t, msg) - require.Error(t, err) - require.EqualError(t, err, tc.wantErr.Error()) - } - - tt := []testCase{ - { - name: "unexpected response", - input: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Response_{ - Response: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - ResourceID: "api-service", - Nonce: "2", - }, - }, - }, - wantErr: status.Error(codes.InvalidArgument, "first message when initiating a peering must be a subscription request"), - }, - { - name: "missing peer id", - input: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{}, - }, - }, - wantErr: status.Error(codes.InvalidArgument, "initial subscription request must specify a PeerID"), - }, - { - name: "unexpected nonce", - input: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - PeerID: "63b60245-c475-426b-b314-4588d210859d", - Nonce: "1", - }, - }, - }, - wantErr: status.Error(codes.InvalidArgument, "initial subscription request must not contain a nonce"), - }, - { - name: "unknown resource", - input: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - PeerID: "63b60245-c475-426b-b314-4588d210859d", - ResourceURL: "nomad.Job", - }, - }, - }, - wantErr: status.Error(codes.InvalidArgument, "subscription request to unknown resource URL: nomad.Job"), - }, - { - name: "unknown peer", - input: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - PeerID: "63b60245-c475-426b-b314-4588d210859d", - ResourceURL: pbpeering.TypeURLService, - }, - }, - }, - wantErr: status.Error(codes.InvalidArgument, "initial subscription for unknown PeerID: 63b60245-c475-426b-b314-4588d210859d"), - }, - } - - for _, tc := range tt { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } - -} - -func TestStreamResources_Server_Terminate(t *testing.T) { - publisher := stream.NewEventPublisher(10 * time.Second) - store := newStateStore(t, publisher) - - srv := NewService( - testutil.Logger(t), - Config{ - Datacenter: "dc1", - ConnectEnabled: true, - }, &testStreamBackend{ - store: store, - pub: publisher, - }) - - it := incrementalTime{ - base: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC), - } - srv.streams.timeNow = it.Now - - p := writeInitiatedPeering(t, store, 1, "my-peer") - var ( - peerID = p.ID // for Send - remotePeerID = p.PeerID // for Recv - ) - - // Set the initial roots and CA configuration. - _, _ = writeInitialRootsAndCA(t, store) - - client := makeClient(t, srv, peerID, remotePeerID) - - // TODO(peering): test fails if we don't drain the stream with this call because the - // server gets blocked sending the termination message. Figure out a way to let - // messages queue and filter replication messages. - receiveRoots, err := client.Recv() - require.NoError(t, err) - require.NotNil(t, receiveRoots.GetResponse()) - require.Equal(t, pbpeering.TypeURLRoots, receiveRoots.GetResponse().ResourceURL) - - testutil.RunStep(t, "new stream gets tracked", func(t *testing.T) { - retry.Run(t, func(r *retry.R) { - status, ok := srv.StreamStatus(peerID) - require.True(r, ok) - require.True(r, status.Connected) - }) - }) - - testutil.RunStep(t, "terminate the stream", func(t *testing.T) { - done := srv.ConnectedStreams()[peerID] - close(done) - - retry.Run(t, func(r *retry.R) { - _, ok := srv.StreamStatus(peerID) - require.False(r, ok) - }) - }) - - receivedTerm, err := client.Recv() - require.NoError(t, err) - expect := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Terminated_{ - Terminated: &pbpeering.ReplicationMessage_Terminated{}, - }, - } - prototest.AssertDeepEqual(t, expect, receivedTerm) -} - -func TestStreamResources_Server_StreamTracker(t *testing.T) { - publisher := stream.NewEventPublisher(10 * time.Second) - store := newStateStore(t, publisher) - - srv := NewService( - testutil.Logger(t), - Config{ - Datacenter: "dc1", - ConnectEnabled: true, - }, &testStreamBackend{ - store: store, - pub: publisher, - }) - - it := incrementalTime{ - base: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC), - } - srv.streams.timeNow = it.Now - - // Set the initial roots and CA configuration. - _, rootA := writeInitialRootsAndCA(t, store) - - p := writeInitiatedPeering(t, store, 1, "my-peer") - var ( - peerID = p.ID // for Send - remotePeerID = p.PeerID // for Recv - ) - - client := makeClient(t, srv, peerID, remotePeerID) - - testutil.RunStep(t, "new stream gets tracked", func(t *testing.T) { - retry.Run(t, func(r *retry.R) { - status, ok := srv.StreamStatus(peerID) - require.True(r, ok) - require.True(r, status.Connected) - }) - }) - - var sequence uint64 - var lastSendSuccess time.Time - - testutil.RunStep(t, "ack tracked as success", func(t *testing.T) { - ack := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - PeerID: peerID, - ResourceURL: pbpeering.TypeURLService, - Nonce: "1", - - // Acks do not have an Error populated in the request - }, - }, - } - err := client.Send(ack) - require.NoError(t, err) - sequence++ - - lastSendSuccess = it.base.Add(time.Duration(sequence) * time.Second).UTC() - - expect := StreamStatus{ - Connected: true, - LastAck: lastSendSuccess, - } - - retry.Run(t, func(r *retry.R) { - status, ok := srv.StreamStatus(peerID) - require.True(r, ok) - require.Equal(r, expect, status) - }) - }) - - var lastNack time.Time - var lastNackMsg string - - testutil.RunStep(t, "nack tracked as error", func(t *testing.T) { - nack := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - PeerID: peerID, - ResourceURL: pbpeering.TypeURLService, - Nonce: "2", - Error: &pbstatus.Status{ - Code: int32(code.Code_UNAVAILABLE), - Message: "bad bad not good", - }, - }, - }, - } - err := client.Send(nack) - require.NoError(t, err) - sequence++ - - lastNackMsg = "client peer was unable to apply resource: bad bad not good" - lastNack = it.base.Add(time.Duration(sequence) * time.Second).UTC() - - expect := StreamStatus{ - Connected: true, - LastAck: lastSendSuccess, - LastNack: lastNack, - LastNackMessage: lastNackMsg, - } - - retry.Run(t, func(r *retry.R) { - status, ok := srv.StreamStatus(peerID) - require.True(r, ok) - require.Equal(r, expect, status) - }) - }) - - var lastRecvSuccess time.Time - - testutil.RunStep(t, "response applied locally", func(t *testing.T) { - resp := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Response_{ - Response: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - ResourceID: "api", - Nonce: "21", - Operation: pbpeering.ReplicationMessage_Response_UPSERT, - Resource: makeAnyPB(t, &pbservice.IndexedCheckServiceNodes{}), - }, - }, - } - err := client.Send(resp) - require.NoError(t, err) - sequence++ - - expectRoots := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Response_{ - Response: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLRoots, - ResourceID: "roots", - Resource: makeAnyPB(t, &pbpeering.PeeringTrustBundle{ - TrustDomain: connect.TestTrustDomain, - RootPEMs: []string{rootA.RootCert}, - }), - Operation: pbpeering.ReplicationMessage_Response_UPSERT, - }, - }, - } - - roots, err := client.Recv() - require.NoError(t, err) - prototest.AssertDeepEqual(t, expectRoots, roots) - - ack, err := client.Recv() - require.NoError(t, err) - - expectAck := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: pbpeering.TypeURLService, - Nonce: "21", - }, - }, - } - prototest.AssertDeepEqual(t, expectAck, ack) - - lastRecvSuccess = it.base.Add(time.Duration(sequence) * time.Second).UTC() - - expect := StreamStatus{ - Connected: true, - LastAck: lastSendSuccess, - LastNack: lastNack, - LastNackMessage: lastNackMsg, - LastReceiveSuccess: lastRecvSuccess, - } - - retry.Run(t, func(r *retry.R) { - status, ok := srv.StreamStatus(peerID) - require.True(r, ok) - require.Equal(r, expect, status) - }) - }) - - var lastRecvError time.Time - var lastRecvErrorMsg string - - testutil.RunStep(t, "response fails to apply locally", func(t *testing.T) { - resp := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Response_{ - Response: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - ResourceID: "web", - Nonce: "24", - - // Unknown operation gets NACKed - Operation: pbpeering.ReplicationMessage_Response_Unknown, - }, - }, - } - err := client.Send(resp) - require.NoError(t, err) - sequence++ - - ack, err := client.Recv() - require.NoError(t, err) - - expectNack := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: pbpeering.TypeURLService, - Nonce: "24", - Error: &pbstatus.Status{ - Code: int32(code.Code_INVALID_ARGUMENT), - Message: `unsupported operation: "Unknown"`, - }, - }, - }, - } - prototest.AssertDeepEqual(t, expectNack, ack) - - lastRecvError = it.base.Add(time.Duration(sequence) * time.Second).UTC() - lastRecvErrorMsg = `unsupported operation: "Unknown"` - - expect := StreamStatus{ - Connected: true, - LastAck: lastSendSuccess, - LastNack: lastNack, - LastNackMessage: lastNackMsg, - LastReceiveSuccess: lastRecvSuccess, - LastReceiveError: lastRecvError, - LastReceiveErrorMessage: lastRecvErrorMsg, - } - - retry.Run(t, func(r *retry.R) { - status, ok := srv.StreamStatus(peerID) - require.True(r, ok) - require.Equal(r, expect, status) - }) - }) - - testutil.RunStep(t, "client disconnect marks stream as disconnected", func(t *testing.T) { - client.Close() - - sequence++ - lastRecvError := it.base.Add(time.Duration(sequence) * time.Second).UTC() - - sequence++ - disconnectTime := it.base.Add(time.Duration(sequence) * time.Second).UTC() - - expect := StreamStatus{ - Connected: false, - LastAck: lastSendSuccess, - LastNack: lastNack, - LastNackMessage: lastNackMsg, - DisconnectTime: disconnectTime, - LastReceiveSuccess: lastRecvSuccess, - LastReceiveErrorMessage: io.EOF.Error(), - LastReceiveError: lastRecvError, - } - - retry.Run(t, func(r *retry.R) { - status, ok := srv.StreamStatus(peerID) - require.True(r, ok) - require.Equal(r, expect, status) - }) - }) -} - -func TestStreamResources_Server_ServiceUpdates(t *testing.T) { - testStreamResources_Server_ServiceUpdates(t, true) -} -func TestStreamResources_Server_ServiceUpdates_EnableMeshGateways(t *testing.T) { - testStreamResources_Server_ServiceUpdates(t, false) -} -func testStreamResources_Server_ServiceUpdates(t *testing.T, disableMeshGateways bool) { - publisher := stream.NewEventPublisher(10 * time.Second) - store := newStateStore(t, publisher) - - // Create a peering - var lastIdx uint64 = 1 - p := writeInitiatedPeering(t, store, lastIdx, "my-peering") - - // Set the initial roots and CA configuration. - _, _ = writeInitialRootsAndCA(t, store) - - srv := NewService( - testutil.Logger(t), - Config{ - Datacenter: "dc1", - ConnectEnabled: true, - DisableMeshGatewayMode: disableMeshGateways, - }, &testStreamBackend{ - store: store, - pub: publisher, - }) - client := makeClient(t, srv, p.ID, p.PeerID) - - // Register a service that is not yet exported - mysql := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "foo", Address: "10.0.0.1"}, - Service: &structs.NodeService{ID: "mysql-1", Service: "mysql", Port: 5000}, - } - - lastIdx++ - require.NoError(t, store.EnsureNode(lastIdx, mysql.Node)) - - lastIdx++ - require.NoError(t, store.EnsureService(lastIdx, "foo", mysql.Service)) - - lastIdx++ - require.NoError(t, store.EnsureService(lastIdx, "foo", &structs.NodeService{ - ID: "mysql-sidecar-proxy", - Service: "mysql-sidecar-proxy", - Kind: structs.ServiceKindConnectProxy, - Port: 5000, - Proxy: structs.ConnectProxyConfig{DestinationServiceName: "mysql"}, - })) - - var ( - mongoSN = structs.NewServiceName("mongo", nil).String() - mongoProxySN = structs.NewServiceName("mongo-sidecar-proxy", nil).String() - mysqlSN = structs.NewServiceName("mysql", nil).String() - mysqlProxySN = structs.NewServiceName("mysql-sidecar-proxy", nil).String() - ) - - testutil.RunStep(t, "exporting mysql leads to an UPSERT event", func(t *testing.T) { - entry := &structs.ExportedServicesConfigEntry{ - Name: "default", - Services: []structs.ExportedService{ - { - Name: "mysql", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-peering"}, - }, - }, - { - // Mongo does not get pushed because it does not have instances registered. - Name: "mongo", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-peering"}, - }, - }, - }, - } - lastIdx++ - require.NoError(t, store.EnsureConfigEntry(lastIdx, entry)) - - expectReplEvents(t, client, - func(t *testing.T, msg *pbpeering.ReplicationMessage) { - require.Equal(t, pbpeering.TypeURLRoots, msg.GetResponse().ResourceURL) - // Roots tested in TestStreamResources_Server_CARootUpdates - }, - func(t *testing.T, msg *pbpeering.ReplicationMessage) { - require.Equal(t, pbpeering.TypeURLService, msg.GetResponse().ResourceURL) - require.Equal(t, mongoSN, msg.GetResponse().ResourceID) - require.Equal(t, pbpeering.ReplicationMessage_Response_DELETE, msg.GetResponse().Operation) - require.Nil(t, msg.GetResponse().Resource) - }, - func(t *testing.T, msg *pbpeering.ReplicationMessage) { - require.Equal(t, pbpeering.TypeURLService, msg.GetResponse().ResourceURL) - require.Equal(t, mongoProxySN, msg.GetResponse().ResourceID) - require.Equal(t, pbpeering.ReplicationMessage_Response_DELETE, msg.GetResponse().Operation) - require.Nil(t, msg.GetResponse().Resource) - }, - func(t *testing.T, msg *pbpeering.ReplicationMessage) { - require.Equal(t, pbpeering.TypeURLService, msg.GetResponse().ResourceURL) - require.Equal(t, mysqlSN, msg.GetResponse().ResourceID) - require.Equal(t, pbpeering.ReplicationMessage_Response_UPSERT, msg.GetResponse().Operation) - - var nodes pbservice.IndexedCheckServiceNodes - require.NoError(t, ptypes.UnmarshalAny(msg.GetResponse().Resource, &nodes)) - require.Len(t, nodes.Nodes, 1) - }, - func(t *testing.T, msg *pbpeering.ReplicationMessage) { - require.Equal(t, pbpeering.TypeURLService, msg.GetResponse().ResourceURL) - require.Equal(t, mysqlProxySN, msg.GetResponse().ResourceID) - require.Equal(t, pbpeering.ReplicationMessage_Response_UPSERT, msg.GetResponse().Operation) - - var nodes pbservice.IndexedCheckServiceNodes - require.NoError(t, ptypes.UnmarshalAny(msg.GetResponse().Resource, &nodes)) - require.Len(t, nodes.Nodes, 1) - - svid := "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/mysql" - require.Equal(t, []string{svid}, nodes.Nodes[0].Service.Connect.PeerMeta.SpiffeID) - }, - ) - }) - - mongo := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "zip", Address: "10.0.0.3"}, - Service: &structs.NodeService{ID: "mongo-1", Service: "mongo", Port: 5000}, - } - - testutil.RunStep(t, "registering mongo instance leads to an UPSERT event", func(t *testing.T) { - lastIdx++ - require.NoError(t, store.EnsureNode(lastIdx, mongo.Node)) - - lastIdx++ - require.NoError(t, store.EnsureService(lastIdx, "zip", mongo.Service)) - - retry.Run(t, func(r *retry.R) { - msg, err := client.RecvWithTimeout(100 * time.Millisecond) - require.NoError(r, err) - require.Equal(r, pbpeering.ReplicationMessage_Response_UPSERT, msg.GetResponse().Operation) - require.Equal(r, mongo.Service.CompoundServiceName().String(), msg.GetResponse().ResourceID) - - var nodes pbservice.IndexedCheckServiceNodes - require.NoError(r, ptypes.UnmarshalAny(msg.GetResponse().Resource, &nodes)) - require.Len(r, nodes.Nodes, 1) - }) - }) - - testutil.RunStep(t, "un-exporting mysql leads to a DELETE event for mysql", func(t *testing.T) { - entry := &structs.ExportedServicesConfigEntry{ - Name: "default", - Services: []structs.ExportedService{ - { - Name: "mongo", - Consumers: []structs.ServiceConsumer{ - { - PeerName: "my-peering", - }, - }, - }, - }, - } - lastIdx++ - err := store.EnsureConfigEntry(lastIdx, entry) - require.NoError(t, err) - - retry.Run(t, func(r *retry.R) { - msg, err := client.RecvWithTimeout(100 * time.Millisecond) - require.NoError(r, err) - require.Equal(r, pbpeering.ReplicationMessage_Response_DELETE, msg.GetResponse().Operation) - require.Equal(r, mysql.Service.CompoundServiceName().String(), msg.GetResponse().ResourceID) - require.Nil(r, msg.GetResponse().Resource) - }) - }) - - testutil.RunStep(t, "deleting the config entry leads to a DELETE event for mongo", func(t *testing.T) { - lastIdx++ - err := store.DeleteConfigEntry(lastIdx, structs.ExportedServices, "default", nil) - require.NoError(t, err) - - retry.Run(t, func(r *retry.R) { - msg, err := client.RecvWithTimeout(100 * time.Millisecond) - require.NoError(r, err) - require.Equal(r, pbpeering.ReplicationMessage_Response_DELETE, msg.GetResponse().Operation) - require.Equal(r, mongo.Service.CompoundServiceName().String(), msg.GetResponse().ResourceID) - require.Nil(r, msg.GetResponse().Resource) - }) - }) -} - -func TestStreamResources_Server_CARootUpdates(t *testing.T) { - publisher := stream.NewEventPublisher(10 * time.Second) - - store := newStateStore(t, publisher) - - // Create a peering - var lastIdx uint64 = 1 - p := writeInitiatedPeering(t, store, lastIdx, "my-peering") - - srv := NewService( - testutil.Logger(t), - Config{ - Datacenter: "dc1", - ConnectEnabled: true, - }, &testStreamBackend{ - store: store, - pub: publisher, - }) - - // Set the initial roots and CA configuration. - clusterID, rootA := writeInitialRootsAndCA(t, store) - - client := makeClient(t, srv, p.ID, p.PeerID) - - testutil.RunStep(t, "initial CA Roots replication", func(t *testing.T) { - expectReplEvents(t, client, - func(t *testing.T, msg *pbpeering.ReplicationMessage) { - require.Equal(t, pbpeering.TypeURLRoots, msg.GetResponse().ResourceURL) - require.Equal(t, "roots", msg.GetResponse().ResourceID) - require.Equal(t, pbpeering.ReplicationMessage_Response_UPSERT, msg.GetResponse().Operation) - - var trustBundle pbpeering.PeeringTrustBundle - require.NoError(t, ptypes.UnmarshalAny(msg.GetResponse().Resource, &trustBundle)) - - require.ElementsMatch(t, []string{rootA.RootCert}, trustBundle.RootPEMs) - expect := connect.SpiffeIDSigningForCluster(clusterID).Host() - require.Equal(t, expect, trustBundle.TrustDomain) - }, - ) - }) - - testutil.RunStep(t, "CA root rotation sends upsert event", func(t *testing.T) { - // get max index for CAS operation - cidx, _, err := store.CARoots(nil) - require.NoError(t, err) - - rootB := connect.TestCA(t, nil) - rootC := connect.TestCA(t, nil) - rootC.Active = false // there can only be one active root - lastIdx++ - set, err := store.CARootSetCAS(lastIdx, cidx, []*structs.CARoot{rootB, rootC}) - require.True(t, set) - require.NoError(t, err) - - expectReplEvents(t, client, - func(t *testing.T, msg *pbpeering.ReplicationMessage) { - require.Equal(t, pbpeering.TypeURLRoots, msg.GetResponse().ResourceURL) - require.Equal(t, "roots", msg.GetResponse().ResourceID) - require.Equal(t, pbpeering.ReplicationMessage_Response_UPSERT, msg.GetResponse().Operation) - - var trustBundle pbpeering.PeeringTrustBundle - require.NoError(t, ptypes.UnmarshalAny(msg.GetResponse().Resource, &trustBundle)) - - require.ElementsMatch(t, []string{rootB.RootCert, rootC.RootCert}, trustBundle.RootPEMs) - expect := connect.SpiffeIDSigningForCluster(clusterID).Host() - require.Equal(t, expect, trustBundle.TrustDomain) - }, - ) - }) -} - -// makeClient sets up a *MockClient with the initial subscription -// message handshake. -func makeClient( - t *testing.T, - srv pbpeering.PeeringServiceServer, - peerID string, - remotePeerID string, -) *MockClient { - t.Helper() - - client := NewMockClient(context.Background()) - - errCh := make(chan error, 1) - client.ErrCh = errCh - - go func() { - // Pass errors from server handler into ErrCh so that they can be seen by the client on Recv(). - // This matches gRPC's behavior when an error is returned by a server. - if err := srv.StreamResources(client.ReplicationStream); err != nil { - errCh <- srv.StreamResources(client.ReplicationStream) - } - }() - - // Issue a services subscription to server - init := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - PeerID: peerID, - ResourceURL: pbpeering.TypeURLService, - }, - }, - } - require.NoError(t, client.Send(init)) - - // Receive a services subscription from server - receivedSub, err := client.Recv() - require.NoError(t, err) - - expect := &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: pbpeering.TypeURLService, - PeerID: remotePeerID, - }, - }, - } - prototest.AssertDeepEqual(t, expect, receivedSub) - - return client -} - -type testStreamBackend struct { - pub state.EventPublisher - store *state.Store - leader func() bool - leadershipMonitor *leadershipMonitor -} - -var _ LeadershipMonitor = (*leadershipMonitor)(nil) - -type leadershipMonitor struct { -} - -func (l *leadershipMonitor) UpdateLeaderAddr(addr string) { - // noop -} - -func (l *leadershipMonitor) GetLeaderAddr() string { - // noop - return "" -} - -func (b *testStreamBackend) LeadershipMonitor() LeadershipMonitor { - return b.leadershipMonitor -} - -func (b *testStreamBackend) IsLeader() bool { - if b.leader != nil { - return b.leader() - } - return true -} - -func (b *testStreamBackend) Subscribe(req *stream.SubscribeRequest) (*stream.Subscription, error) { - return b.pub.Subscribe(req) -} - -func (b *testStreamBackend) Store() Store { - return b.store -} - -func (b *testStreamBackend) Forward(info structs.RPCInfo, f func(conn *grpc.ClientConn) error) (handled bool, err error) { - return true, nil -} - -func (b *testStreamBackend) GetAgentCACertificates() ([]string, error) { - return []string{}, nil -} - -func (b *testStreamBackend) GetServerAddresses() ([]string, error) { - return []string{}, nil -} - -func (b *testStreamBackend) GetServerName() string { - return "" -} - -func (b *testStreamBackend) EncodeToken(tok *structs.PeeringToken) ([]byte, error) { - return nil, nil -} - -func (b *testStreamBackend) DecodeToken([]byte) (*structs.PeeringToken, error) { - return nil, nil -} - -func (b *testStreamBackend) EnterpriseCheckPartitions(partition string) error { - return nil -} - -func (b *testStreamBackend) Apply() Apply { - return nil -} - -func Test_processResponse_Validation(t *testing.T) { - type testCase struct { - name string - in *pbpeering.ReplicationMessage_Response - expect *pbpeering.ReplicationMessage - wantErr bool - } - - publisher := stream.NewEventPublisher(10 * time.Second) - store := newStateStore(t, publisher) - - srv := NewService( - testutil.Logger(t), - Config{ - Datacenter: "dc1", - ConnectEnabled: true, - }, &testStreamBackend{ - store: store, - pub: publisher, - }) - - run := func(t *testing.T, tc testCase) { - reply, err := srv.processResponse("", "", tc.in) - if tc.wantErr { - require.Error(t, err) - } else { - require.NoError(t, err) - } - require.Equal(t, tc.expect, reply) - } - - tt := []testCase{ - { - name: "valid upsert", - in: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - ResourceID: "api", - Nonce: "1", - Operation: pbpeering.ReplicationMessage_Response_UPSERT, - Resource: makeAnyPB(t, &pbservice.IndexedCheckServiceNodes{}), - }, - expect: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: pbpeering.TypeURLService, - Nonce: "1", - }, - }, - }, - wantErr: false, - }, - { - name: "valid delete", - in: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - ResourceID: "api", - Nonce: "1", - Operation: pbpeering.ReplicationMessage_Response_DELETE, - }, - expect: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: pbpeering.TypeURLService, - Nonce: "1", - }, - }, - }, - wantErr: false, - }, - { - name: "invalid resource url", - in: &pbpeering.ReplicationMessage_Response{ - ResourceURL: "nomad.Job", - Nonce: "1", - Operation: pbpeering.ReplicationMessage_Response_Unknown, - }, - expect: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: "nomad.Job", - Nonce: "1", - Error: &pbstatus.Status{ - Code: int32(code.Code_INVALID_ARGUMENT), - Message: `received response for unknown resource type "nomad.Job"`, - }, - }, - }, - }, - wantErr: true, - }, - { - name: "unknown operation", - in: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - Nonce: "1", - Operation: pbpeering.ReplicationMessage_Response_Unknown, - }, - expect: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: pbpeering.TypeURLService, - Nonce: "1", - Error: &pbstatus.Status{ - Code: int32(code.Code_INVALID_ARGUMENT), - Message: `unsupported operation: "Unknown"`, - }, - }, - }, - }, - wantErr: true, - }, - { - name: "out of range operation", - in: &pbpeering.ReplicationMessage_Response{ - ResourceURL: pbpeering.TypeURLService, - Nonce: "1", - Operation: pbpeering.ReplicationMessage_Response_Operation(100000), - }, - expect: &pbpeering.ReplicationMessage{ - Payload: &pbpeering.ReplicationMessage_Request_{ - Request: &pbpeering.ReplicationMessage_Request{ - ResourceURL: pbpeering.TypeURLService, - Nonce: "1", - Error: &pbstatus.Status{ - Code: int32(code.Code_INVALID_ARGUMENT), - Message: `unsupported operation: 100000`, - }, - }, - }, - }, - wantErr: true, - }, - } - for _, tc := range tt { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} - -// writeInitiatedPeering creates a peering with the provided name and ensures -// the PeerID field is set for the ID of the remote peer. -func writeInitiatedPeering(t *testing.T, store *state.Store, idx uint64, peerName string) *pbpeering.Peering { - remotePeerID, err := uuid.GenerateUUID() - require.NoError(t, err) - - peering := pbpeering.Peering{ - Name: peerName, - PeerID: remotePeerID, - } - require.NoError(t, store.PeeringWrite(idx, &peering)) - - _, p, err := store.PeeringRead(nil, state.Query{Value: peerName}) - require.NoError(t, err) - - return p -} - -func writeInitialRootsAndCA(t *testing.T, store *state.Store) (string, *structs.CARoot) { - const clusterID = connect.TestClusterID - - rootA := connect.TestCA(t, nil) - _, err := store.CARootSetCAS(1, 0, structs.CARoots{rootA}) - require.NoError(t, err) - - err = store.CASetConfig(0, &structs.CAConfiguration{ClusterID: clusterID}) - require.NoError(t, err) - - return clusterID, rootA -} - -func makeAnyPB(t *testing.T, pb proto.Message) *any.Any { - any, err := ptypes.MarshalAny(pb) - require.NoError(t, err) - return any -} - -func expectReplEvents(t *testing.T, client *MockClient, checkFns ...func(t *testing.T, got *pbpeering.ReplicationMessage)) { - t.Helper() - - num := len(checkFns) - - if num == 0 { - // No updates should be received. - msg, err := client.RecvWithTimeout(100 * time.Millisecond) - if err == io.EOF && msg == nil { - return - } else if err != nil { - t.Fatalf("received unexpected update error: %v", err) - } else { - t.Fatalf("received unexpected update: %+v", msg) - } - } - - var out []*pbpeering.ReplicationMessage - for len(out) < num { - msg, err := client.RecvWithTimeout(100 * time.Millisecond) - if err == io.EOF && msg == nil { - t.Fatalf("timed out with %d of %d events", len(out), num) - } - require.NoError(t, err) - out = append(out, msg) - } - - if msg, err := client.RecvWithTimeout(100 * time.Millisecond); err != io.EOF || msg != nil { - t.Fatalf("expected only %d events but got more; prev %+v; next %+v", num, out, msg) - } - - require.Len(t, out, num) - - sort.SliceStable(out, func(i, j int) bool { - a, b := out[i], out[j] - - typeA := fmt.Sprintf("%T", a.GetPayload()) - typeB := fmt.Sprintf("%T", b.GetPayload()) - if typeA != typeB { - return typeA < typeB - } - - switch a.GetPayload().(type) { - case *pbpeering.ReplicationMessage_Request_: - reqA, reqB := a.GetRequest(), b.GetRequest() - if reqA.ResourceURL != reqB.ResourceURL { - return reqA.ResourceURL < reqB.ResourceURL - } - return reqA.Nonce < reqB.Nonce - - case *pbpeering.ReplicationMessage_Response_: - respA, respB := a.GetResponse(), b.GetResponse() - if respA.ResourceURL != respB.ResourceURL { - return respA.ResourceURL < respB.ResourceURL - } - if respA.ResourceID != respB.ResourceID { - return respA.ResourceID < respB.ResourceID - } - return respA.Nonce < respB.Nonce - - case *pbpeering.ReplicationMessage_Terminated_: - return false - - default: - panic("unknown type") - } - }) - - for i := 0; i < num; i++ { - checkFns[i](t, out[i]) - } -} diff --git a/agent/rpc/peering/stream_tracker.go b/agent/rpc/peering/stream_tracker.go deleted file mode 100644 index af2cbe1c285ef..0000000000000 --- a/agent/rpc/peering/stream_tracker.go +++ /dev/null @@ -1,212 +0,0 @@ -package peering - -import ( - "fmt" - "sync" - "time" -) - -// streamTracker contains a map of (PeerID -> StreamStatus). -// As streams are opened and closed we track details about their status. -type streamTracker struct { - mu sync.RWMutex - streams map[string]*lockableStreamStatus - - // timeNow is a shim for testing. - timeNow func() time.Time -} - -func newStreamTracker() *streamTracker { - return &streamTracker{ - streams: make(map[string]*lockableStreamStatus), - timeNow: time.Now, - } -} - -// connected registers a stream for a given peer, and marks it as connected. -// It also enforces that there is only one active stream for a peer. -func (t *streamTracker) connected(id string) (*lockableStreamStatus, error) { - t.mu.Lock() - defer t.mu.Unlock() - - status, ok := t.streams[id] - if !ok { - status = newLockableStreamStatus(t.timeNow) - t.streams[id] = status - return status, nil - } - - if status.connected() { - return nil, fmt.Errorf("there is an active stream for the given PeerID %q", id) - } - status.trackConnected() - - return status, nil -} - -// disconnected ensures that if a peer id's stream status is tracked, it is marked as disconnected. -func (t *streamTracker) disconnected(id string) { - t.mu.Lock() - defer t.mu.Unlock() - - if status, ok := t.streams[id]; ok { - status.trackDisconnected() - } -} - -func (t *streamTracker) streamStatus(id string) (resp StreamStatus, found bool) { - t.mu.RLock() - defer t.mu.RUnlock() - - s, ok := t.streams[id] - if !ok { - return StreamStatus{}, false - } - return s.status(), true -} - -func (t *streamTracker) connectedStreams() map[string]chan struct{} { - t.mu.RLock() - defer t.mu.RUnlock() - - resp := make(map[string]chan struct{}) - for peer, status := range t.streams { - if status.connected() { - resp[peer] = status.doneCh - } - } - return resp -} - -func (t *streamTracker) deleteStatus(id string) { - t.mu.Lock() - defer t.mu.Unlock() - - delete(t.streams, id) -} - -type lockableStreamStatus struct { - mu sync.RWMutex - - // timeNow is a shim for testing. - timeNow func() time.Time - - // doneCh allows for shutting down a stream gracefully by sending a termination message - // to the peer before the stream's context is cancelled. - doneCh chan struct{} - - StreamStatus -} - -// StreamStatus contains information about the replication stream to a peer cluster. -// TODO(peering): There's a lot of fields here... -type StreamStatus struct { - // Connected is true when there is an open stream for the peer. - Connected bool - - // If the status is not connected, DisconnectTime tracks when the stream was closed. Else it's zero. - DisconnectTime time.Time - - // LastAck tracks the time we received the last ACK for a resource replicated TO the peer. - LastAck time.Time - - // LastNack tracks the time we received the last NACK for a resource replicated to the peer. - LastNack time.Time - - // LastNackMessage tracks the reported error message associated with the last NACK from a peer. - LastNackMessage string - - // LastSendError tracks the time of the last error sending into the stream. - LastSendError time.Time - - // LastSendErrorMessage tracks the last error message when sending into the stream. - LastSendErrorMessage string - - // LastReceiveSuccess tracks the time we last successfully stored a resource replicated FROM the peer. - LastReceiveSuccess time.Time - - // LastReceiveError tracks either: - // - The time we failed to store a resource replicated FROM the peer. - // - The time of the last error when receiving from the stream. - LastReceiveError time.Time - - // LastReceiveError tracks either: - // - The error message when we failed to store a resource replicated FROM the peer. - // - The last error message when receiving from the stream. - LastReceiveErrorMessage string -} - -func newLockableStreamStatus(now func() time.Time) *lockableStreamStatus { - return &lockableStreamStatus{ - StreamStatus: StreamStatus{ - Connected: true, - }, - timeNow: now, - doneCh: make(chan struct{}), - } -} - -func (s *lockableStreamStatus) trackAck() { - s.mu.Lock() - s.LastAck = s.timeNow().UTC() - s.mu.Unlock() -} - -func (s *lockableStreamStatus) trackSendError(error string) { - s.mu.Lock() - s.LastSendError = s.timeNow().UTC() - s.LastSendErrorMessage = error - s.mu.Unlock() -} - -func (s *lockableStreamStatus) trackReceiveSuccess() { - s.mu.Lock() - s.LastReceiveSuccess = s.timeNow().UTC() - s.mu.Unlock() -} - -func (s *lockableStreamStatus) trackReceiveError(error string) { - s.mu.Lock() - s.LastReceiveError = s.timeNow().UTC() - s.LastReceiveErrorMessage = error - s.mu.Unlock() -} - -func (s *lockableStreamStatus) trackNack(msg string) { - s.mu.Lock() - s.LastNack = s.timeNow().UTC() - s.LastNackMessage = msg - s.mu.Unlock() -} - -func (s *lockableStreamStatus) trackConnected() { - s.mu.Lock() - s.Connected = true - s.DisconnectTime = time.Time{} - s.mu.Unlock() -} - -func (s *lockableStreamStatus) trackDisconnected() { - s.mu.Lock() - s.Connected = false - s.DisconnectTime = s.timeNow().UTC() - s.mu.Unlock() -} - -func (s *lockableStreamStatus) connected() bool { - var resp bool - - s.mu.RLock() - resp = s.Connected - s.mu.RUnlock() - - return resp -} - -func (s *lockableStreamStatus) status() StreamStatus { - s.mu.RLock() - copy := s.StreamStatus - s.mu.RUnlock() - - return copy -} diff --git a/agent/rpc/peering/stream_tracker_test.go b/agent/rpc/peering/stream_tracker_test.go deleted file mode 100644 index d6b49ef917570..0000000000000 --- a/agent/rpc/peering/stream_tracker_test.go +++ /dev/null @@ -1,163 +0,0 @@ -package peering - -import ( - "sort" - "testing" - "time" - - "github.com/hashicorp/consul/sdk/testutil" - "github.com/stretchr/testify/require" -) - -func TestStreamTracker_EnsureConnectedDisconnected(t *testing.T) { - tracker := newStreamTracker() - peerID := "63b60245-c475-426b-b314-4588d210859d" - - it := incrementalTime{ - base: time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC), - } - tracker.timeNow = it.Now - - var ( - statusPtr *lockableStreamStatus - err error - ) - - testutil.RunStep(t, "new stream", func(t *testing.T) { - statusPtr, err = tracker.connected(peerID) - require.NoError(t, err) - - expect := StreamStatus{ - Connected: true, - } - - status, ok := tracker.streamStatus(peerID) - require.True(t, ok) - require.Equal(t, expect, status) - }) - - testutil.RunStep(t, "duplicate gets rejected", func(t *testing.T) { - _, err := tracker.connected(peerID) - require.Error(t, err) - require.Contains(t, err.Error(), `there is an active stream for the given PeerID "63b60245-c475-426b-b314-4588d210859d"`) - }) - - var sequence uint64 - var lastSuccess time.Time - - testutil.RunStep(t, "stream updated", func(t *testing.T) { - statusPtr.trackAck() - sequence++ - - status, ok := tracker.streamStatus(peerID) - require.True(t, ok) - - lastSuccess = it.base.Add(time.Duration(sequence) * time.Second).UTC() - expect := StreamStatus{ - Connected: true, - LastAck: lastSuccess, - } - require.Equal(t, expect, status) - }) - - testutil.RunStep(t, "disconnect", func(t *testing.T) { - tracker.disconnected(peerID) - sequence++ - - expect := StreamStatus{ - Connected: false, - DisconnectTime: it.base.Add(time.Duration(sequence) * time.Second).UTC(), - LastAck: lastSuccess, - } - status, ok := tracker.streamStatus(peerID) - require.True(t, ok) - require.Equal(t, expect, status) - }) - - testutil.RunStep(t, "re-connect", func(t *testing.T) { - _, err := tracker.connected(peerID) - require.NoError(t, err) - - expect := StreamStatus{ - Connected: true, - LastAck: lastSuccess, - - // DisconnectTime gets cleared on re-connect. - } - - status, ok := tracker.streamStatus(peerID) - require.True(t, ok) - require.Equal(t, expect, status) - }) - - testutil.RunStep(t, "delete", func(t *testing.T) { - tracker.deleteStatus(peerID) - - status, ok := tracker.streamStatus(peerID) - require.False(t, ok) - require.Zero(t, status) - }) -} - -func TestStreamTracker_connectedStreams(t *testing.T) { - type testCase struct { - name string - setup func(t *testing.T, s *streamTracker) - expect []string - } - - run := func(t *testing.T, tc testCase) { - tracker := newStreamTracker() - if tc.setup != nil { - tc.setup(t, tracker) - } - - streams := tracker.connectedStreams() - - var keys []string - for key := range streams { - keys = append(keys, key) - } - sort.Strings(keys) - - require.Equal(t, tc.expect, keys) - } - - tt := []testCase{ - { - name: "no streams", - expect: nil, - }, - { - name: "all streams active", - setup: func(t *testing.T, s *streamTracker) { - _, err := s.connected("foo") - require.NoError(t, err) - - _, err = s.connected("bar") - require.NoError(t, err) - }, - expect: []string{"bar", "foo"}, - }, - { - name: "mixed active and inactive", - setup: func(t *testing.T, s *streamTracker) { - status, err := s.connected("foo") - require.NoError(t, err) - - // Mark foo as disconnected to avoid showing it as an active stream - status.trackDisconnected() - - _, err = s.connected("bar") - require.NoError(t, err) - }, - expect: []string{"bar"}, - }, - } - - for _, tc := range tt { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} diff --git a/agent/rpc/peering/subscription_blocking.go b/agent/rpc/peering/subscription_blocking.go deleted file mode 100644 index 0a8a07d9b4490..0000000000000 --- a/agent/rpc/peering/subscription_blocking.go +++ /dev/null @@ -1,108 +0,0 @@ -package peering - -import ( - "context" - "errors" - "fmt" - "time" - - "github.com/hashicorp/go-memdb" - - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/lib/retry" - "github.com/hashicorp/consul/proto/pbservice" -) - -// This file contains direct state store functions that need additional -// management to have them emit events. Ideally these would go through -// streaming machinery instead to be cheaper. - -func (m *subscriptionManager) notifyExportedServicesForPeerID(ctx context.Context, state *subscriptionState, peerID string) { - // syncSubscriptionsAndBlock ensures that the subscriptions to the subscription backend - // match the list of services exported to the peer. - m.syncViaBlockingQuery(ctx, "exported-services", func(ctx context.Context, store Store, ws memdb.WatchSet) (interface{}, error) { - // Get exported services for peer id - _, list, err := store.ExportedServicesForPeer(ws, peerID) - if err != nil { - return nil, fmt.Errorf("failed to watch exported services for peer %q: %w", peerID, err) - } - - return list, nil - }, subExportedServiceList, state.updateCh) -} - -// TODO: add a new streaming subscription type to list-by-kind-and-partition since we're getting evictions -func (m *subscriptionManager) notifyMeshGatewaysForPartition(ctx context.Context, state *subscriptionState, partition string) { - m.syncViaBlockingQuery(ctx, "mesh-gateways", func(ctx context.Context, store Store, ws memdb.WatchSet) (interface{}, error) { - // Fetch our current list of all mesh gateways. - entMeta := structs.DefaultEnterpriseMetaInPartition(partition) - idx, nodes, err := store.ServiceDump(ws, structs.ServiceKindMeshGateway, true, entMeta, structs.DefaultPeerKeyword) - if err != nil { - return nil, fmt.Errorf("failed to watch mesh gateways services for partition %q: %w", partition, err) - } - if idx == 0 { - idx = 1 - } - - // convert back to a protobuf flavor - result := &pbservice.IndexedCheckServiceNodes{ - Index: idx, - Nodes: make([]*pbservice.CheckServiceNode, len(nodes)), - } - for i, csn := range nodes { - result.Nodes[i] = pbservice.NewCheckServiceNodeFromStructs(&csn) - } - - return result, nil - }, subMeshGateway+partition, state.updateCh) -} - -func (m *subscriptionManager) syncViaBlockingQuery( - ctx context.Context, - queryType string, - queryFn func(ctx context.Context, store Store, ws memdb.WatchSet) (interface{}, error), - correlationID string, - updateCh chan<- cache.UpdateEvent, -) { - waiter := &retry.Waiter{ - MinFailures: 1, - Factor: 500 * time.Millisecond, - MaxWait: 60 * time.Second, - Jitter: retry.NewJitter(100), - } - - logger := m.logger - if queryType != "" { - logger = m.logger.With("queryType", queryType) - } - - store := m.backend.Store() - - for { - ws := memdb.NewWatchSet() - ws.Add(store.AbandonCh()) - ws.Add(ctx.Done()) - - if result, err := queryFn(ctx, store, ws); err != nil { - logger.Error("failed to sync from query", "error", err) - } else { - // Block for any changes to the state store. - updateCh <- cache.UpdateEvent{ - CorrelationID: correlationID, - Result: result, - } - ws.WatchCtx(ctx) - } - - if err := waiter.Wait(ctx); err != nil && !errors.Is(err, context.Canceled) && !errors.Is(err, context.DeadlineExceeded) { - logger.Error("failed to wait before re-trying sync", "error", err) - } - - select { - case <-ctx.Done(): - return - default: - } - } -} diff --git a/agent/rpc/peering/subscription_manager.go b/agent/rpc/peering/subscription_manager.go deleted file mode 100644 index 7e443e919258d..0000000000000 --- a/agent/rpc/peering/subscription_manager.go +++ /dev/null @@ -1,783 +0,0 @@ -package peering - -import ( - "context" - "errors" - "fmt" - "strings" - - "github.com/golang/protobuf/proto" - "github.com/hashicorp/go-hclog" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/agent/submatview" - "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/proto/pbcommon" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/proto/pbservice" -) - -type MaterializedViewStore interface { - Get(ctx context.Context, req submatview.Request) (submatview.Result, error) - Notify(ctx context.Context, req submatview.Request, cID string, ch chan<- cache.UpdateEvent) error -} - -type SubscriptionBackend interface { - Subscriber - Store() Store -} - -// subscriptionManager handlers requests to subscribe to events from an events publisher. -type subscriptionManager struct { - logger hclog.Logger - config Config - trustDomain string - viewStore MaterializedViewStore - backend SubscriptionBackend -} - -// TODO(peering): Maybe centralize so that there is a single manager per datacenter, rather than per peering. -func newSubscriptionManager( - ctx context.Context, - logger hclog.Logger, - config Config, - trustDomain string, - backend SubscriptionBackend, -) *subscriptionManager { - logger = logger.Named("subscriptions") - store := submatview.NewStore(logger.Named("viewstore")) - go store.Run(ctx) - - return &subscriptionManager{ - logger: logger, - config: config, - trustDomain: trustDomain, - viewStore: store, - backend: backend, - } -} - -// subscribe returns a channel that will contain updates to exported service instances for a given peer. -func (m *subscriptionManager) subscribe(ctx context.Context, peerID, peerName, partition string) <-chan cache.UpdateEvent { - var ( - updateCh = make(chan cache.UpdateEvent, 1) - publicUpdateCh = make(chan cache.UpdateEvent, 1) - ) - - state := newSubscriptionState(peerName, partition) - state.publicUpdateCh = publicUpdateCh - state.updateCh = updateCh - - // Wrap our bare state store queries in goroutines that emit events. - go m.notifyExportedServicesForPeerID(ctx, state, peerID) - if !m.config.DisableMeshGatewayMode && m.config.ConnectEnabled { - go m.notifyMeshGatewaysForPartition(ctx, state, state.partition) - } - - // If connect is enabled, watch for updates to CA roots. - if m.config.ConnectEnabled { - go m.notifyRootCAUpdates(ctx, state.updateCh) - } - - // This goroutine is the only one allowed to manipulate protected - // subscriptionManager fields. - go m.handleEvents(ctx, state, updateCh) - - return publicUpdateCh -} - -func (m *subscriptionManager) handleEvents(ctx context.Context, state *subscriptionState, updateCh <-chan cache.UpdateEvent) { - for { - // TODO(peering): exponential backoff - - select { - case <-ctx.Done(): - return - case update := <-updateCh: - if err := m.handleEvent(ctx, state, update); err != nil { - m.logger.Error("Failed to handle update from watch", - "id", update.CorrelationID, "error", err, - ) - continue - } - } - } -} - -func (m *subscriptionManager) handleEvent(ctx context.Context, state *subscriptionState, u cache.UpdateEvent) error { - if u.Err != nil { - return fmt.Errorf("received error event: %w", u.Err) - } - - // TODO(peering): on initial stream setup, transmit the list of exported - // services for use in differential DELETE/UPSERT. Akin to streaming's snapshot start/end. - switch { - case u.CorrelationID == subExportedServiceList: - // Everything starts with the exported service list coming from - // our state store watchset loop. - evt, ok := u.Result.(*structs.ExportedServiceList) - if !ok { - return fmt.Errorf("invalid type for response: %T", u.Result) - } - - state.exportList = evt - - pending := &pendingPayload{} - m.syncNormalServices(ctx, state, pending, evt.Services) - if m.config.DisableMeshGatewayMode { - m.syncProxyServices(ctx, state, pending, evt.Services) - } else { - if m.config.ConnectEnabled { - m.syncDiscoveryChains(ctx, state, pending, evt.ListAllDiscoveryChains()) - } - } - state.sendPendingEvents(ctx, m.logger, pending) - - // cleanup event versions too - state.cleanupEventVersions(m.logger) - - case strings.HasPrefix(u.CorrelationID, subExportedService): - csn, ok := u.Result.(*pbservice.IndexedCheckServiceNodes) - if !ok { - return fmt.Errorf("invalid type for response: %T", u.Result) - } - - // TODO(peering): is it safe to edit these protobufs in place? - - // Clear this raft index before exporting. - csn.Index = 0 - - if !m.config.DisableMeshGatewayMode { - // Ensure that connect things are scrubbed so we don't mix-and-match - // with the synthetic entries that point to mesh gateways. - filterConnectReferences(csn) - - // Flatten health checks - for _, instance := range csn.Nodes { - instance.Checks = flattenChecks( - instance.Node.Node, - instance.Service.ID, - instance.Service.Service, - instance.Service.EnterpriseMeta, - instance.Checks, - ) - } - } - - // Scrub raft indexes - for _, instance := range csn.Nodes { - instance.Node.RaftIndex = nil - instance.Service.RaftIndex = nil - if m.config.DisableMeshGatewayMode { - for _, chk := range instance.Checks { - chk.RaftIndex = nil - } - } - // skip checks since we just generated one from scratch - } - - id := servicePayloadIDPrefix + strings.TrimPrefix(u.CorrelationID, subExportedService) - - // Just ferry this one directly along to the destination. - pending := &pendingPayload{} - if err := pending.Add(id, u.CorrelationID, csn); err != nil { - return err - } - state.sendPendingEvents(ctx, m.logger, pending) - - case strings.HasPrefix(u.CorrelationID, subExportedProxyService): - csn, ok := u.Result.(*pbservice.IndexedCheckServiceNodes) - if !ok { - return fmt.Errorf("invalid type for response: %T", u.Result) - } - - if !m.config.DisableMeshGatewayMode { - return nil // ignore event - } - - sn := structs.ServiceNameFromString(strings.TrimPrefix(u.CorrelationID, subExportedProxyService)) - spiffeID := connect.SpiffeIDService{ - Host: m.trustDomain, - Partition: sn.PartitionOrDefault(), - Namespace: sn.NamespaceOrDefault(), - Datacenter: m.config.Datacenter, - Service: sn.Name, - } - peerMeta := &pbservice.PeeringServiceMeta{ - SpiffeID: []string{spiffeID.URI().String()}, - } - - // skip checks since we just generated one from scratch - // Set peerMeta on all instances and scrub the raft indexes. - for _, instance := range csn.Nodes { - instance.Service.Connect.PeerMeta = peerMeta - - instance.Node.RaftIndex = nil - instance.Service.RaftIndex = nil - if m.config.DisableMeshGatewayMode { - for _, chk := range instance.Checks { - chk.RaftIndex = nil - } - } - } - csn.Index = 0 - - id := proxyServicePayloadIDPrefix + strings.TrimPrefix(u.CorrelationID, subExportedProxyService) - - // Just ferry this one directly along to the destination. - pending := &pendingPayload{} - if err := pending.Add(id, u.CorrelationID, csn); err != nil { - return err - } - state.sendPendingEvents(ctx, m.logger, pending) - - case strings.HasPrefix(u.CorrelationID, subMeshGateway): - csn, ok := u.Result.(*pbservice.IndexedCheckServiceNodes) - if !ok { - return fmt.Errorf("invalid type for response: %T", u.Result) - } - - partition := strings.TrimPrefix(u.CorrelationID, subMeshGateway) - - if m.config.DisableMeshGatewayMode || !m.config.ConnectEnabled { - return nil // ignore event - } - - if !acl.EqualPartitions(partition, state.partition) { - return nil // ignore event - } - - // Clear this raft index before exporting. - csn.Index = 0 - - // Flatten health checks - for _, instance := range csn.Nodes { - instance.Checks = flattenChecks( - instance.Node.Node, - instance.Service.ID, - instance.Service.Service, - instance.Service.EnterpriseMeta, - instance.Checks, - ) - } - - // Scrub raft indexes - for _, instance := range csn.Nodes { - instance.Node.RaftIndex = nil - instance.Service.RaftIndex = nil - // skip checks since we just generated one from scratch - - // Remove connect things like native mode. - if instance.Service.Connect != nil || instance.Service.Proxy != nil { - instance.Service.Connect = nil - instance.Service.Proxy = nil - } - } - - state.meshGateway = csn - - pending := &pendingPayload{} - - // Directly replicate information about our mesh gateways to the consuming side. - // TODO(peering): should we scrub anything before replicating this? - if err := pending.Add(meshGatewayPayloadID, u.CorrelationID, csn); err != nil { - return err - } - - if state.exportList != nil { - // Trigger public events for all synthetic discovery chain replies. - for chainName, protocol := range state.connectServices { - m.emitEventForDiscoveryChain(ctx, state, pending, chainName, protocol) - } - } - - // TODO(peering): should we ship this down verbatim to the consumer? - state.sendPendingEvents(ctx, m.logger, pending) - - case u.CorrelationID == subCARoot: - roots, ok := u.Result.(*pbpeering.PeeringTrustBundle) - if !ok { - return fmt.Errorf("invalid type for response: %T", u.Result) - } - pending := &pendingPayload{} - if err := pending.Add(caRootsPayloadID, u.CorrelationID, roots); err != nil { - return err - } - - state.sendPendingEvents(ctx, m.logger, pending) - - default: - return fmt.Errorf("unknown correlation ID: %s", u.CorrelationID) - } - return nil -} - -func filterConnectReferences(orig *pbservice.IndexedCheckServiceNodes) { - newNodes := make([]*pbservice.CheckServiceNode, 0, len(orig.Nodes)) - for i := range orig.Nodes { - csn := orig.Nodes[i] - - if csn.Service.Kind != string(structs.ServiceKindTypical) { - continue // skip non-typical services - } - - if strings.HasSuffix(csn.Service.Service, syntheticProxyNameSuffix) { - // Skip things that might LOOK like a proxy so we don't get a - // collision with the ones we generate. - continue - } - - // Remove connect things like native mode. - if csn.Service.Connect != nil || csn.Service.Proxy != nil { - csn = proto.Clone(csn).(*pbservice.CheckServiceNode) - csn.Service.Connect = nil - csn.Service.Proxy = nil - } - - newNodes = append(newNodes, csn) - } - orig.Nodes = newNodes -} - -func (m *subscriptionManager) notifyRootCAUpdates(ctx context.Context, updateCh chan<- cache.UpdateEvent) { - var idx uint64 - // TODO(peering): retry logic; fail past a threshold - for { - var err error - // Typically, this function will block inside `m.subscribeCARoots` and only return on error. - // Errors are logged and the watch is retried. - idx, err = m.subscribeCARoots(ctx, idx, updateCh) - if errors.Is(err, stream.ErrSubForceClosed) { - m.logger.Trace("subscription force-closed due to an ACL change or snapshot restore, will attempt resume") - } else if !errors.Is(err, context.Canceled) && !errors.Is(err, context.DeadlineExceeded) { - m.logger.Warn("failed to subscribe to CA roots, will attempt resume", "error", err.Error()) - } else { - m.logger.Trace(err.Error()) - } - - select { - case <-ctx.Done(): - return - default: - } - } -} - -// subscribeCARoots subscribes to state.EventTopicCARoots for changes to CA roots. -// Upon receiving an event it will send the payload in updateCh. -func (m *subscriptionManager) subscribeCARoots(ctx context.Context, idx uint64, updateCh chan<- cache.UpdateEvent) (uint64, error) { - // following code adapted from connectca/watch_roots.go - sub, err := m.backend.Subscribe(&stream.SubscribeRequest{ - Topic: state.EventTopicCARoots, - Subject: stream.SubjectNone, - Token: "", // using anonymous token for now - Index: idx, - }) - if err != nil { - return 0, fmt.Errorf("failed to subscribe to CA Roots events: %w", err) - } - defer sub.Unsubscribe() - - for { - event, err := sub.Next(ctx) - switch { - case errors.Is(err, stream.ErrSubForceClosed): - // If the subscription was closed because the state store was abandoned (e.g. - // following a snapshot restore) reset idx to ensure we don't skip over the - // new store's events. - select { - case <-m.backend.Store().AbandonCh(): - idx = 0 - default: - } - return idx, err - case errors.Is(err, context.Canceled): - return 0, err - case errors.Is(err, context.DeadlineExceeded): - return 0, err - case err != nil: - return idx, fmt.Errorf("failed to read next event: %w", err) - } - - // Note: this check isn't strictly necessary because the event publishing - // machinery will ensure the index increases monotonically, but it can be - // tricky to faithfully reproduce this in tests (e.g. the EventPublisher - // garbage collects topic buffers and snapshots aggressively when streams - // disconnect) so this avoids a bunch of confusing setup code. - if event.Index <= idx { - continue - } - - idx = event.Index - - // We do not send framing events (e.g. EndOfSnapshot, NewSnapshotToFollow) - // because we send a full list of roots on every event, rather than expecting - // clients to maintain a state-machine in the way they do for service health. - if event.IsFramingEvent() { - continue - } - - payload, ok := event.Payload.(state.EventPayloadCARoots) - if !ok { - return 0, fmt.Errorf("unexpected event payload type: %T", payload) - } - - var rootPems []string - for _, root := range payload.CARoots { - rootPems = append(rootPems, root.RootCert) - } - - updateCh <- cache.UpdateEvent{ - CorrelationID: subCARoot, - Result: &pbpeering.PeeringTrustBundle{ - TrustDomain: m.trustDomain, - RootPEMs: rootPems, - }, - } - } -} - -const subCARoot = "roots" - -func (m *subscriptionManager) syncNormalServices( - ctx context.Context, - state *subscriptionState, - pending *pendingPayload, - services []structs.ServiceName, -) { - // seen contains the set of exported service names and is used to reconcile the list of watched services. - seen := make(map[structs.ServiceName]struct{}) - - // Ensure there is a subscription for each service exported to the peer. - for _, svc := range services { - seen[svc] = struct{}{} - - if _, ok := state.watchedServices[svc]; ok { - // Exported service is already being watched, nothing to do. - continue - } - - notifyCtx, cancel := context.WithCancel(ctx) - if err := m.NotifyStandardService(notifyCtx, svc, state.updateCh); err != nil { - cancel() - m.logger.Error("failed to subscribe to service", "service", svc.String()) - continue - } - - state.watchedServices[svc] = cancel - } - - // For every subscription without an exported service, call the associated cancel fn. - for svc, cancel := range state.watchedServices { - if _, ok := seen[svc]; !ok { - cancel() - - delete(state.watchedServices, svc) - - // Send an empty event to the stream handler to trigger sending a DELETE message. - // Cancelling the subscription context above is necessary, but does not yield a useful signal on its own. - err := pending.Add( - servicePayloadIDPrefix+svc.String(), - subExportedService+svc.String(), - &pbservice.IndexedCheckServiceNodes{}, - ) - if err != nil { - m.logger.Error("failed to send event for service", "service", svc.String(), "error", err) - continue - } - } - } -} - -// TODO(peering): remove -func (m *subscriptionManager) syncProxyServices( - ctx context.Context, - state *subscriptionState, - pending *pendingPayload, - services []structs.ServiceName, -) { - // seen contains the set of exported service names and is used to reconcile the list of watched services. - seen := make(map[structs.ServiceName]struct{}) - - // Ensure there is a subscription for each service exported to the peer. - for _, svc := range services { - seen[svc] = struct{}{} - - if _, ok := state.watchedProxyServices[svc]; ok { - // Exported service is already being watched, nothing to do. - continue - } - - notifyCtx, cancel := context.WithCancel(ctx) - if err := m.NotifyConnectProxyService(notifyCtx, svc, state.updateCh); err != nil { - cancel() - m.logger.Error("failed to subscribe to proxy service", "service", svc.String()) - continue - } - - state.watchedProxyServices[svc] = cancel - } - - // For every subscription without an exported service, call the associated cancel fn. - for svc, cancel := range state.watchedProxyServices { - if _, ok := seen[svc]; !ok { - cancel() - - delete(state.watchedProxyServices, svc) - - // Send an empty event to the stream handler to trigger sending a DELETE message. - // Cancelling the subscription context above is necessary, but does not yield a useful signal on its own. - err := pending.Add( - proxyServicePayloadIDPrefix+svc.String(), - subExportedProxyService+svc.String(), - &pbservice.IndexedCheckServiceNodes{}, - ) - if err != nil { - m.logger.Error("failed to send event for proxy service", "service", svc.String(), "error", err) - continue - } - } - } -} - -func (m *subscriptionManager) syncDiscoveryChains( - ctx context.Context, - state *subscriptionState, - pending *pendingPayload, - chainsByName map[structs.ServiceName]string, // TODO(peering):rename variable -) { - // if it was newly added, then try to emit an UPDATE event - for chainName, protocol := range chainsByName { - if oldProtocol, ok := state.connectServices[chainName]; ok && protocol == oldProtocol { - continue - } - - state.connectServices[chainName] = protocol - - m.emitEventForDiscoveryChain(ctx, state, pending, chainName, protocol) - } - - // if it was dropped, try to emit an DELETE event - for chainName := range state.connectServices { - if _, ok := chainsByName[chainName]; ok { - continue - } - - delete(state.connectServices, chainName) - - if state.meshGateway != nil { - // Only need to clean this up if we know we may have ever sent it in the first place. - proxyName := generateProxyNameForDiscoveryChain(chainName) - err := pending.Add( - discoveryChainPayloadIDPrefix+chainName.String(), - subExportedService+proxyName.String(), - &pbservice.IndexedCheckServiceNodes{}, - ) - if err != nil { - m.logger.Error("failed to send event for discovery chain", "service", chainName.String(), "error", err) - continue - } - } - } -} - -func (m *subscriptionManager) emitEventForDiscoveryChain( - ctx context.Context, - state *subscriptionState, - pending *pendingPayload, - chainName structs.ServiceName, - protocol string, -) { - if _, ok := state.connectServices[chainName]; !ok { - return // not found - } - - if state.exportList == nil || state.meshGateway == nil { - return // skip because we don't have the data to do it yet - } - - // Emit event with fake data - proxyName := generateProxyNameForDiscoveryChain(chainName) - - err := pending.Add( - discoveryChainPayloadIDPrefix+chainName.String(), - subExportedService+proxyName.String(), - createDiscoChainHealth( - state.peerName, - m.config.Datacenter, - m.trustDomain, - chainName, - protocol, - state.meshGateway, - ), - ) - if err != nil { - m.logger.Error("failed to send event for discovery chain", "service", chainName.String(), "error", err) - } -} - -func createDiscoChainHealth( - peerName string, - datacenter, trustDomain string, - sn structs.ServiceName, - protocol string, - pb *pbservice.IndexedCheckServiceNodes, -) *pbservice.IndexedCheckServiceNodes { - fakeProxyName := sn.Name + syntheticProxyNameSuffix - - var peerMeta *pbservice.PeeringServiceMeta - { - spiffeID := connect.SpiffeIDService{ - Host: trustDomain, - Partition: sn.PartitionOrDefault(), - Namespace: sn.NamespaceOrDefault(), - Datacenter: datacenter, - Service: sn.Name, - } - - sni := connect.PeeredServiceSNI( - sn.Name, - sn.NamespaceOrDefault(), - sn.PartitionOrDefault(), - peerName, - trustDomain, - ) - - // Create common peer meta. - // - // TODO(peering): should this be replicated by service and not by instance? - peerMeta = &pbservice.PeeringServiceMeta{ - SNI: []string{sni}, - SpiffeID: []string{spiffeID.URI().String()}, - Protocol: protocol, - } - } - - newNodes := make([]*pbservice.CheckServiceNode, 0, len(pb.Nodes)) - for i := range pb.Nodes { - gwNode := pb.Nodes[i].Node - gwService := pb.Nodes[i].Service - gwChecks := pb.Nodes[i].Checks - - pbEntMeta := pbcommon.NewEnterpriseMetaFromStructs(sn.EnterpriseMeta) - - fakeProxyID := fakeProxyName - destServiceID := sn.Name - if gwService.ID != "" { - // This is only going to be relevant if multiple mesh gateways are - // on the same exporting node. - fakeProxyID = fmt.Sprintf("%s-instance-%d", fakeProxyName, i) - destServiceID = fmt.Sprintf("%s-instance-%d", sn.Name, i) - } - - csn := &pbservice.CheckServiceNode{ - Node: gwNode, - Service: &pbservice.NodeService{ - Kind: string(structs.ServiceKindConnectProxy), - Service: fakeProxyName, - ID: fakeProxyID, - EnterpriseMeta: pbEntMeta, - PeerName: structs.DefaultPeerKeyword, - Proxy: &pbservice.ConnectProxyConfig{ - DestinationServiceName: sn.Name, - DestinationServiceID: destServiceID, - }, - // direct - Address: gwService.Address, - TaggedAddresses: gwService.TaggedAddresses, - Port: gwService.Port, - SocketPath: gwService.SocketPath, - Weights: gwService.Weights, - Connect: &pbservice.ServiceConnect{ - PeerMeta: peerMeta, - }, - }, - Checks: flattenChecks(gwNode.Node, fakeProxyID, fakeProxyName, pbEntMeta, gwChecks), - } - newNodes = append(newNodes, csn) - } - - return &pbservice.IndexedCheckServiceNodes{ - Index: 0, - Nodes: newNodes, - } -} - -func flattenChecks( - nodeName string, - serviceID string, - serviceName string, - entMeta *pbcommon.EnterpriseMeta, - checks []*pbservice.HealthCheck, -) []*pbservice.HealthCheck { - if len(checks) == 0 { - return nil - } - - healthStatus := api.HealthPassing - for _, chk := range checks { - if chk.Status != api.HealthPassing { - healthStatus = chk.Status - } - } - - if serviceID == "" { - serviceID = serviceName - } - - return []*pbservice.HealthCheck{ - { - CheckID: serviceID + ":overall-check", - Name: "overall-check", - Status: healthStatus, - Node: nodeName, - ServiceID: serviceID, - ServiceName: serviceName, - EnterpriseMeta: entMeta, - PeerName: structs.DefaultPeerKeyword, - }, - } -} - -const ( - subExportedServiceList = "exported-service-list" - subExportedService = "exported-service:" - subExportedProxyService = "exported-proxy-service:" - subMeshGateway = "mesh-gateway:" -) - -// NotifyStandardService will notify the given channel when there are updates -// to the requested service of the same name in the catalog. -func (m *subscriptionManager) NotifyStandardService( - ctx context.Context, - svc structs.ServiceName, - updateCh chan<- cache.UpdateEvent, -) error { - sr := newExportedStandardServiceRequest(m.logger, svc, m.backend) - return m.viewStore.Notify(ctx, sr, subExportedService+svc.String(), updateCh) -} -func (m *subscriptionManager) NotifyConnectProxyService( - ctx context.Context, - svc structs.ServiceName, - updateCh chan<- cache.UpdateEvent, -) error { - sr := newExportedConnectProxyServiceRequest(m.logger, svc, m.backend) - return m.viewStore.Notify(ctx, sr, subExportedProxyService+svc.String(), updateCh) -} - -// syntheticProxyNameSuffix is the suffix to add to synthetic proxies we -// replicate to route traffic to an exported discovery chain through the mesh -// gateways. -// -// This name was chosen to match existing "sidecar service" generation logic -// and similar logic in the Service Identity synthetic ACL policies. -const syntheticProxyNameSuffix = "-sidecar-proxy" - -func generateProxyNameForDiscoveryChain(sn structs.ServiceName) structs.ServiceName { - return structs.NewServiceName(sn.Name+syntheticProxyNameSuffix, &sn.EnterpriseMeta) -} diff --git a/agent/rpc/peering/subscription_manager_test.go b/agent/rpc/peering/subscription_manager_test.go deleted file mode 100644 index 299fd9ad8168f..0000000000000 --- a/agent/rpc/peering/subscription_manager_test.go +++ /dev/null @@ -1,909 +0,0 @@ -package peering - -import ( - "context" - "sort" - "testing" - "time" - - "github.com/stretchr/testify/require" - "google.golang.org/protobuf/types/known/durationpb" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbcommon" - "github.com/hashicorp/consul/proto/pbpeering" - "github.com/hashicorp/consul/proto/pbservice" - "github.com/hashicorp/consul/proto/prototest" - "github.com/hashicorp/consul/sdk/testutil" -) - -func TestSubscriptionManager_RegisterDeregister(t *testing.T) { - testSubscriptionManager_RegisterDeregister(t, true) -} -func TestSubscriptionManager_RegisterDeregister_EnableMeshGateways(t *testing.T) { - testSubscriptionManager_RegisterDeregister(t, false) -} -func testSubscriptionManager_RegisterDeregister(t *testing.T, disableMeshGateways bool) { - backend := newTestSubscriptionBackend(t) - // initialCatalogIdx := backend.lastIdx - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // Create a peering - _, id := backend.ensurePeering(t, "my-peering") - partition := acl.DefaultEnterpriseMeta().PartitionOrEmpty() - - mgr := newSubscriptionManager(ctx, testutil.Logger(t), Config{ - Datacenter: "dc1", - ConnectEnabled: true, - DisableMeshGatewayMode: disableMeshGateways, - }, connect.TestTrustDomain, backend) - subCh := mgr.subscribe(ctx, id, "my-peering", partition) - - var ( - gatewayCorrID = subMeshGateway + partition - - mysqlCorrID = subExportedService + structs.NewServiceName("mysql", nil).String() - - mysqlProxyCorrID = subExportedService + structs.NewServiceName("mysql-sidecar-proxy", nil).String() - - mysqlProxyCorrID_temp = subExportedProxyService + structs.NewServiceName("mysql", nil).String() - ) - - if disableMeshGateways { - expectEvents(t, subCh) - } else { - // Expect just the empty mesh gateway event to replicate. - expectEvents(t, subCh, func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, gatewayCorrID, 0) - }) - } - - testutil.RunStep(t, "initial export syncs empty instance lists", func(t *testing.T) { - backend.ensureConfigEntry(t, &structs.ExportedServicesConfigEntry{ - Name: "default", - Services: []structs.ExportedService{ - { - Name: "mysql", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-peering"}, - }, - }, - { - Name: "mongo", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-other-peering"}, - }, - }, - }, - }) - - if disableMeshGateways { - expectEvents(t, subCh, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mysqlProxyCorrID_temp, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mysqlCorrID, 0) - }, - ) - } else { - expectEvents(t, subCh, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mysqlCorrID, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mysqlProxyCorrID, 0) - }, - ) - } - }) - - mysql1 := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "foo", Address: "10.0.0.1"}, - Service: &structs.NodeService{ID: "mysql-1", Service: "mysql", Port: 5000}, - Checks: structs.HealthChecks{ - &structs.HealthCheck{CheckID: "mysql-check", ServiceID: "mysql-1", Node: "foo"}, - }, - } - - testutil.RunStep(t, "registering exported service instance yields update", func(t *testing.T) { - backend.ensureNode(t, mysql1.Node) - backend.ensureService(t, "foo", mysql1.Service) - - // We get one update for the service - expectEvents(t, subCh, func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, mysqlCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 1) - - if disableMeshGateways { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("foo", "10.0.0.1", partition), - Service: pbService_temp("", "mysql-1", "mysql", 5000, nil), - }, res.Nodes[0]) - } else { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("foo", "10.0.0.1", partition), - Service: pbService("", "mysql-1", "mysql", 5000, nil), - }, res.Nodes[0]) - } - }) - - backend.ensureCheck(t, mysql1.Checks[0]) - - // and one for the check - expectEvents(t, subCh, func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, mysqlCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 1) - - if disableMeshGateways { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("foo", "10.0.0.1", partition), - Service: pbService_temp("", "mysql-1", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck_temp("foo", "mysql-1", "mysql", "mysql-check", "critical", nil), - }, - }, res.Nodes[0]) - } else { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("foo", "10.0.0.1", partition), - Service: pbService("", "mysql-1", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck("foo", "mysql-1", "mysql", "critical", nil), - }, - }, res.Nodes[0]) - } - }) - }) - - mysql2 := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "bar", Address: "10.0.0.2"}, - Service: &structs.NodeService{ID: "mysql-2", Service: "mysql", Port: 5000}, - Checks: structs.HealthChecks{ - &structs.HealthCheck{CheckID: "mysql-2-check", ServiceID: "mysql-2", Node: "bar"}, - }, - } - - testutil.RunStep(t, "additional instances are returned when registered", func(t *testing.T) { - backend.ensureNode(t, mysql2.Node) - backend.ensureService(t, "bar", mysql2.Service) - - // We get one update for the service - expectEvents(t, subCh, func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, mysqlCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 2) - - if disableMeshGateways { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("bar", "10.0.0.2", partition), - Service: pbService_temp("", "mysql-2", "mysql", 5000, nil), - }, res.Nodes[0]) - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("foo", "10.0.0.1", partition), - Service: pbService_temp("", "mysql-1", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck_temp("foo", "mysql-1", "mysql", "mysql-check", "critical", nil), - }, - }, res.Nodes[1]) - } else { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("bar", "10.0.0.2", partition), - Service: pbService("", "mysql-2", "mysql", 5000, nil), - }, res.Nodes[0]) - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("foo", "10.0.0.1", partition), - Service: pbService("", "mysql-1", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck("foo", "mysql-1", "mysql", "critical", nil), - }, - }, res.Nodes[1]) - } - }) - - backend.ensureCheck(t, mysql2.Checks[0]) - - // and one for the check - expectEvents(t, subCh, func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, mysqlCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 2) - if disableMeshGateways { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("bar", "10.0.0.2", partition), - Service: pbService_temp("", "mysql-2", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck_temp("bar", "mysql-2", "mysql", "mysql-2-check", "critical", nil), - }, - }, res.Nodes[0]) - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("foo", "10.0.0.1", partition), - Service: pbService_temp("", "mysql-1", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck_temp("foo", "mysql-1", "mysql", "mysql-check", "critical", nil), - }, - }, res.Nodes[1]) - } else { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("bar", "10.0.0.2", partition), - Service: pbService("", "mysql-2", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck("bar", "mysql-2", "mysql", "critical", nil), - }, - }, res.Nodes[0]) - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("foo", "10.0.0.1", partition), - Service: pbService("", "mysql-1", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck("foo", "mysql-1", "mysql", "critical", nil), - }, - }, res.Nodes[1]) - } - }) - }) - - mongo := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "zip", Address: "10.0.0.3"}, - Service: &structs.NodeService{ID: "mongo", Service: "mongo", Port: 5000}, - Checks: structs.HealthChecks{ - &structs.HealthCheck{CheckID: "mongo-check", ServiceID: "mongo", Node: "zip"}, - }, - } - - testutil.RunStep(t, "no updates are received for services not exported to my-peering", func(t *testing.T) { - backend.ensureNode(t, mongo.Node) - backend.ensureService(t, "zip", mongo.Service) - backend.ensureCheck(t, mongo.Checks[0]) - - // Receive from subCh times out. - expectEvents(t, subCh) - }) - - testutil.RunStep(t, "deregister an instance and it gets removed from the output", func(t *testing.T) { - backend.deleteService(t, "foo", mysql1.Service.ID) - - expectEvents(t, subCh, func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, mysqlCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 1) - if disableMeshGateways { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("bar", "10.0.0.2", partition), - Service: pbService_temp("", "mysql-2", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck_temp("bar", "mysql-2", "mysql", "mysql-2-check", "critical", nil), - }, - }, res.Nodes[0]) - } else { - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("bar", "10.0.0.2", partition), - Service: pbService("", "mysql-2", "mysql", 5000, nil), - Checks: []*pbservice.HealthCheck{ - pbCheck("bar", "mysql-2", "mysql", "critical", nil), - }, - }, res.Nodes[0]) - } - }) - }) - - testutil.RunStep(t, "register mesh gateway to send proxy updates", func(t *testing.T) { - if disableMeshGateways { - t.Skip() - return - } - gateway := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "mgw", Address: "10.1.1.1"}, - Service: &structs.NodeService{ID: "gateway-1", Kind: structs.ServiceKindMeshGateway, Service: "gateway", Port: 8443}, - // TODO: checks - } - backend.ensureNode(t, gateway.Node) - backend.ensureService(t, "mgw", gateway.Service) - - expectEvents(t, subCh, - func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, mysqlProxyCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 1) - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("mgw", "10.1.1.1", partition), - Service: &pbservice.NodeService{ - Kind: "connect-proxy", - ID: "mysql-sidecar-proxy-instance-0", - Service: "mysql-sidecar-proxy", - Port: 8443, - Weights: &pbservice.Weights{ - Passing: 1, - Warning: 1, - }, - EnterpriseMeta: pbcommon.DefaultEnterpriseMeta, - Proxy: &pbservice.ConnectProxyConfig{ - DestinationServiceID: "mysql-instance-0", - DestinationServiceName: "mysql", - }, - Connect: &pbservice.ServiceConnect{ - PeerMeta: &pbservice.PeeringServiceMeta{ - SNI: []string{ - "mysql.default.default.my-peering.external.11111111-2222-3333-4444-555555555555.consul", - }, - SpiffeID: []string{ - "spiffe://11111111-2222-3333-4444-555555555555.consul/ns/default/dc/dc1/svc/mysql", - }, - Protocol: "tcp", - }, - }, - }, - }, res.Nodes[0]) - }, - func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, gatewayCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 1) - prototest.AssertDeepEqual(t, &pbservice.CheckServiceNode{ - Node: pbNode("mgw", "10.1.1.1", partition), - Service: pbService("mesh-gateway", "gateway-1", "gateway", 8443, nil), - }, res.Nodes[0]) - }, - ) - }) - - testutil.RunStep(t, "deregister the last instance and the output is empty", func(t *testing.T) { - backend.deleteService(t, "bar", mysql2.Service.ID) - - expectEvents(t, subCh, func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, mysqlCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 0) - }) - }) - - testutil.RunStep(t, "deregister mesh gateway to send proxy removals", func(t *testing.T) { - if disableMeshGateways { - t.Skip() - return - } - backend.deleteService(t, "mgw", "gateway-1") - - expectEvents(t, subCh, - func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, mysqlProxyCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, gatewayCorrID, got.CorrelationID) - res := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), res.Index) - - require.Len(t, res.Nodes, 0) - }, - ) - }) -} - -func TestSubscriptionManager_InitialSnapshot(t *testing.T) { - testSubscriptionManager_InitialSnapshot(t, true) -} -func TestSubscriptionManager_InitialSnapshot_EnableMeshGateways(t *testing.T) { - testSubscriptionManager_InitialSnapshot(t, false) -} -func testSubscriptionManager_InitialSnapshot(t *testing.T, disableMeshGateways bool) { - backend := newTestSubscriptionBackend(t) - // initialCatalogIdx := backend.lastIdx - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // Create a peering - _, id := backend.ensurePeering(t, "my-peering") - partition := acl.DefaultEnterpriseMeta().PartitionOrEmpty() - - mgr := newSubscriptionManager(ctx, testutil.Logger(t), Config{ - Datacenter: "dc1", - ConnectEnabled: true, - DisableMeshGatewayMode: disableMeshGateways, - }, connect.TestTrustDomain, backend) - subCh := mgr.subscribe(ctx, id, "my-peering", partition) - - // Register two services that are not yet exported - mysql := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "foo", Address: "10.0.0.1"}, - Service: &structs.NodeService{ID: "mysql-1", Service: "mysql", Port: 5000}, - } - backend.ensureNode(t, mysql.Node) - backend.ensureService(t, "foo", mysql.Service) - - mongo := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "zip", Address: "10.0.0.3"}, - Service: &structs.NodeService{ID: "mongo-1", Service: "mongo", Port: 5000}, - } - backend.ensureNode(t, mongo.Node) - backend.ensureService(t, "zip", mongo.Service) - - var ( - gatewayCorrID = subMeshGateway + partition - - mysqlCorrID = subExportedService + structs.NewServiceName("mysql", nil).String() - mongoCorrID = subExportedService + structs.NewServiceName("mongo", nil).String() - chainCorrID = subExportedService + structs.NewServiceName("chain", nil).String() - - mysqlProxyCorrID = subExportedService + structs.NewServiceName("mysql-sidecar-proxy", nil).String() - mongoProxyCorrID = subExportedService + structs.NewServiceName("mongo-sidecar-proxy", nil).String() - chainProxyCorrID = subExportedService + structs.NewServiceName("chain-sidecar-proxy", nil).String() - - mysqlProxyCorrID_temp = subExportedProxyService + structs.NewServiceName("mysql", nil).String() - mongoProxyCorrID_temp = subExportedProxyService + structs.NewServiceName("mongo", nil).String() - chainProxyCorrID_temp = subExportedProxyService + structs.NewServiceName("chain", nil).String() - ) - - if disableMeshGateways { - expectEvents(t, subCh) - } else { - // Expect just the empty mesh gateway event to replicate. - expectEvents(t, subCh, func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, gatewayCorrID, 0) - }) - } - - // At this point in time we'll have a mesh-gateway notification with no - // content stored and handled. - testutil.RunStep(t, "exporting the two services yields an update for both", func(t *testing.T) { - backend.ensureConfigEntry(t, &structs.ExportedServicesConfigEntry{ - Name: "default", - Services: []structs.ExportedService{ - { - Name: "mysql", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-peering"}, - }, - }, - { - Name: "mongo", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-peering"}, - }, - }, - { - Name: "chain", - Consumers: []structs.ServiceConsumer{ - {PeerName: "my-peering"}, - }, - }, - }, - }) - - if disableMeshGateways { - expectEvents(t, subCh, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, chainProxyCorrID_temp, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mongoProxyCorrID_temp, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mysqlProxyCorrID_temp, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, chainCorrID, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mongoCorrID, 1, "mongo", string(structs.ServiceKindTypical)) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mysqlCorrID, 1, "mysql", string(structs.ServiceKindTypical)) - }, - ) - } else { - expectEvents(t, subCh, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, chainCorrID, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, chainProxyCorrID, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mongoCorrID, 1, "mongo", string(structs.ServiceKindTypical)) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mongoProxyCorrID, 0) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mysqlCorrID, 1, "mysql", string(structs.ServiceKindTypical)) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mysqlProxyCorrID, 0) - }, - ) - } - }) - - testutil.RunStep(t, "registering a mesh gateway triggers connect replies", func(t *testing.T) { - if disableMeshGateways { - t.Skip() - return - } - gateway := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "mgw", Address: "10.1.1.1"}, - Service: &structs.NodeService{ID: "gateway-1", Kind: structs.ServiceKindMeshGateway, Service: "gateway", Port: 8443}, - // TODO: checks - } - backend.ensureNode(t, gateway.Node) - backend.ensureService(t, "mgw", gateway.Service) - - expectEvents(t, subCh, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, chainProxyCorrID, 1, "chain-sidecar-proxy", string(structs.ServiceKindConnectProxy)) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mongoProxyCorrID, 1, "mongo-sidecar-proxy", string(structs.ServiceKindConnectProxy)) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, mysqlProxyCorrID, 1, "mysql-sidecar-proxy", string(structs.ServiceKindConnectProxy)) - }, - func(t *testing.T, got cache.UpdateEvent) { - checkEvent(t, got, gatewayCorrID, 1, "gateway", string(structs.ServiceKindMeshGateway)) - }, - ) - }) -} - -func TestSubscriptionManager_CARoots(t *testing.T) { - backend := newTestSubscriptionBackend(t) - - // Setup CA-related configs in the store - clusterID, rootA := writeInitialRootsAndCA(t, backend.store) - trustDomain := connect.SpiffeIDSigningForCluster(clusterID).Host() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // Create a peering - _, id := backend.ensurePeering(t, "my-peering") - partition := acl.DefaultEnterpriseMeta().PartitionOrEmpty() - - mgr := newSubscriptionManager(ctx, testutil.Logger(t), Config{ - Datacenter: "dc1", - ConnectEnabled: true, - }, connect.TestTrustDomain, backend) - subCh := mgr.subscribe(ctx, id, "my-peering", partition) - - testutil.RunStep(t, "initial events contain trust bundle", func(t *testing.T) { - // events are ordered so we can expect a deterministic list - expectEvents(t, subCh, - func(t *testing.T, got cache.UpdateEvent) { - // mesh-gateway assertions are done in other tests - require.Equal(t, subMeshGateway+partition, got.CorrelationID) - }, - func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, subCARoot, got.CorrelationID) - roots, ok := got.Result.(*pbpeering.PeeringTrustBundle) - require.True(t, ok) - - require.ElementsMatch(t, []string{rootA.RootCert}, roots.RootPEMs) - - require.Equal(t, trustDomain, roots.TrustDomain) - }, - ) - }) - - testutil.RunStep(t, "updating CA roots triggers event", func(t *testing.T) { - rootB := connect.TestCA(t, nil) - rootC := connect.TestCA(t, nil) - rootC.Active = false // there can only be one active root - backend.ensureCARoots(t, rootB, rootC) - - expectEvents(t, subCh, - func(t *testing.T, got cache.UpdateEvent) { - require.Equal(t, subCARoot, got.CorrelationID) - roots, ok := got.Result.(*pbpeering.PeeringTrustBundle) - require.True(t, ok) - - require.ElementsMatch(t, []string{rootB.RootCert, rootC.RootCert}, roots.RootPEMs) - - require.Equal(t, trustDomain, roots.TrustDomain) - }, - ) - }) -} - -type testSubscriptionBackend struct { - state.EventPublisher - store *state.Store - - lastIdx uint64 -} - -func newTestSubscriptionBackend(t *testing.T) *testSubscriptionBackend { - publisher := stream.NewEventPublisher(10 * time.Second) - store := newStateStore(t, publisher) - - backend := &testSubscriptionBackend{ - EventPublisher: publisher, - store: store, - } - - // Create some placeholder data to ensure raft index > 0 - // - // TODO(peering): is there some extremely subtle max-index table reading bug in play? - placeholder := &structs.CheckServiceNode{ - Node: &structs.Node{Node: "placeholder", Address: "10.0.0.1"}, - Service: &structs.NodeService{ID: "placeholder-1", Service: "placeholder", Port: 5000}, - } - backend.ensureNode(t, placeholder.Node) - backend.ensureService(t, "placeholder", placeholder.Service) - - return backend -} - -func (b *testSubscriptionBackend) Store() Store { - return b.store -} - -func (b *testSubscriptionBackend) ensurePeering(t *testing.T, name string) (uint64, string) { - b.lastIdx++ - return b.lastIdx, setupTestPeering(t, b.store, name, b.lastIdx) -} - -func (b *testSubscriptionBackend) ensureConfigEntry(t *testing.T, entry structs.ConfigEntry) uint64 { - require.NoError(t, entry.Normalize()) - require.NoError(t, entry.Validate()) - - b.lastIdx++ - require.NoError(t, b.store.EnsureConfigEntry(b.lastIdx, entry)) - return b.lastIdx -} - -func (b *testSubscriptionBackend) ensureNode(t *testing.T, node *structs.Node) uint64 { - b.lastIdx++ - require.NoError(t, b.store.EnsureNode(b.lastIdx, node)) - return b.lastIdx -} - -func (b *testSubscriptionBackend) ensureService(t *testing.T, node string, svc *structs.NodeService) uint64 { - b.lastIdx++ - require.NoError(t, b.store.EnsureService(b.lastIdx, node, svc)) - return b.lastIdx -} - -func (b *testSubscriptionBackend) ensureCheck(t *testing.T, hc *structs.HealthCheck) uint64 { - b.lastIdx++ - require.NoError(t, b.store.EnsureCheck(b.lastIdx, hc)) - return b.lastIdx -} - -func (b *testSubscriptionBackend) deleteService(t *testing.T, nodeName, serviceID string) uint64 { - b.lastIdx++ - require.NoError(t, b.store.DeleteService(b.lastIdx, nodeName, serviceID, nil, "")) - return b.lastIdx -} - -func (b *testSubscriptionBackend) ensureCAConfig(t *testing.T, config *structs.CAConfiguration) uint64 { - b.lastIdx++ - require.NoError(t, b.store.CASetConfig(b.lastIdx, config)) - return b.lastIdx -} - -func (b *testSubscriptionBackend) ensureCARoots(t *testing.T, roots ...*structs.CARoot) uint64 { - // Get the max index for Check-and-Set operation - cidx, _, err := b.store.CARoots(nil) - require.NoError(t, err) - - b.lastIdx++ - set, err := b.store.CARootSetCAS(b.lastIdx, cidx, roots) - require.True(t, set) - require.NoError(t, err) - return b.lastIdx -} - -func setupTestPeering(t *testing.T, store *state.Store, name string, index uint64) string { - err := store.PeeringWrite(index, &pbpeering.Peering{ - Name: name, - }) - require.NoError(t, err) - - _, p, err := store.PeeringRead(nil, state.Query{Value: name}) - require.NoError(t, err) - require.NotNil(t, p) - - return p.ID -} - -func newStateStore(t *testing.T, publisher *stream.EventPublisher) *state.Store { - ctx, cancel := context.WithCancel(context.Background()) - t.Cleanup(cancel) - - gc, err := state.NewTombstoneGC(time.Second, time.Millisecond) - require.NoError(t, err) - - store := state.NewStateStoreWithEventPublisher(gc, publisher) - require.NoError(t, publisher.RegisterHandler(state.EventTopicServiceHealth, store.ServiceHealthSnapshot)) - require.NoError(t, publisher.RegisterHandler(state.EventTopicServiceHealthConnect, store.ServiceHealthSnapshot)) - require.NoError(t, publisher.RegisterHandler(state.EventTopicCARoots, store.CARootsSnapshot)) - go publisher.Run(ctx) - - return store -} - -func expectEvents( - t *testing.T, - ch <-chan cache.UpdateEvent, - checkFns ...func(t *testing.T, got cache.UpdateEvent), -) { - t.Helper() - - num := len(checkFns) - - var out []cache.UpdateEvent - - if num == 0 { - // No updates should be received. - select { - case <-ch: - t.Fatalf("received unexpected update") - case <-time.After(100 * time.Millisecond): - // Expect this to fire - } - return - } - - const timeout = 10 * time.Second - timeoutCh := time.After(timeout) - - for len(out) < num { - select { - case <-timeoutCh: - t.Fatalf("timed out with %d of %d events after %v", len(out), num, timeout) - case evt := <-ch: - out = append(out, evt) - } - } - - select { - case <-time.After(100 * time.Millisecond): - case evt := <-ch: - t.Fatalf("expected only %d events but got more; prev %+v; next %+v;", num, out, evt) - } - - require.Len(t, out, num) - - sort.SliceStable(out, func(i, j int) bool { - return out[i].CorrelationID < out[j].CorrelationID - }) - - for i := 0; i < num; i++ { - checkFns[i](t, out[i]) - } -} - -func checkEvent( - t *testing.T, - got cache.UpdateEvent, - correlationID string, - expectNodes int, - serviceKindPairs ...string) { - t.Helper() - - require.True(t, len(serviceKindPairs) == 2*expectNodes, "sanity check") - - require.Equal(t, correlationID, got.CorrelationID) - - evt := got.Result.(*pbservice.IndexedCheckServiceNodes) - require.Equal(t, uint64(0), evt.Index) - - if expectNodes == 0 { - require.Len(t, evt.Nodes, 0) - } else { - require.Len(t, evt.Nodes, expectNodes) - - for i := 0; i < expectNodes; i++ { - expectName := serviceKindPairs[i*2] - expectKind := serviceKindPairs[i*2+1] - require.Equal(t, expectName, evt.Nodes[i].Service.Service) - require.Equal(t, expectKind, evt.Nodes[i].Service.Kind) - } - } -} - -func pbNode(node, addr, partition string) *pbservice.Node { - return &pbservice.Node{Node: node, Partition: partition, Address: addr} -} - -func pbService(kind, id, name string, port int32, entMeta *pbcommon.EnterpriseMeta) *pbservice.NodeService { - if entMeta == nil { - entMeta = pbcommon.DefaultEnterpriseMeta - } - return &pbservice.NodeService{ - ID: id, - Kind: kind, - Service: name, - Port: port, - Weights: &pbservice.Weights{ - Passing: 1, - Warning: 1, - }, - EnterpriseMeta: entMeta, - } -} - -func pbService_temp(kind, id, name string, port int32, entMeta *pbcommon.EnterpriseMeta) *pbservice.NodeService { - if entMeta == nil { - entMeta = pbcommon.DefaultEnterpriseMeta - } - return &pbservice.NodeService{ - ID: id, - Kind: kind, - Service: name, - Port: port, - Weights: &pbservice.Weights{ - Passing: 1, - Warning: 1, - }, - EnterpriseMeta: entMeta, - Connect: &pbservice.ServiceConnect{}, - Proxy: &pbservice.ConnectProxyConfig{ - MeshGateway: &pbservice.MeshGatewayConfig{}, - Expose: &pbservice.ExposeConfig{}, - TransparentProxy: &pbservice.TransparentProxyConfig{}, - }, - } -} - -func pbCheck(node, svcID, svcName, status string, entMeta *pbcommon.EnterpriseMeta) *pbservice.HealthCheck { - if entMeta == nil { - entMeta = pbcommon.DefaultEnterpriseMeta - } - return &pbservice.HealthCheck{ - Node: node, - CheckID: svcID + ":overall-check", - Name: "overall-check", - Status: status, - ServiceID: svcID, - ServiceName: svcName, - EnterpriseMeta: entMeta, - } -} - -func pbCheck_temp(node, svcID, svcName, checkID, status string, entMeta *pbcommon.EnterpriseMeta) *pbservice.HealthCheck { - if entMeta == nil { - entMeta = pbcommon.DefaultEnterpriseMeta - } - return &pbservice.HealthCheck{ - Node: node, - CheckID: checkID, - Status: status, - ServiceID: svcID, - ServiceName: svcName, - EnterpriseMeta: entMeta, - Definition: &pbservice.HealthCheckDefinition{ - DeregisterCriticalServiceAfter: durationpb.New(0), - Interval: durationpb.New(0), - TTL: durationpb.New(0), - Timeout: durationpb.New(0), - }, - } -} diff --git a/agent/rpc/peering/subscription_state.go b/agent/rpc/peering/subscription_state.go deleted file mode 100644 index 29bbff967cc32..0000000000000 --- a/agent/rpc/peering/subscription_state.go +++ /dev/null @@ -1,183 +0,0 @@ -package peering - -import ( - "context" - "crypto/sha256" - "encoding/hex" - "fmt" - "strings" - - "github.com/golang/protobuf/proto" - "github.com/hashicorp/go-hclog" - - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbservice" -) - -// subscriptionState is a collection of working state tied to a peerID subscription. -type subscriptionState struct { - // peerName is immutable and is the LOCAL name for the peering - peerName string - // partition is immutable - partition string - - // plain data - exportList *structs.ExportedServiceList - - watchedServices map[structs.ServiceName]context.CancelFunc - watchedProxyServices map[structs.ServiceName]context.CancelFunc // TODO(peering): remove - connectServices map[structs.ServiceName]string // value:protocol - - // eventVersions is a duplicate event suppression system keyed by the "id" - // not the "correlationID" - eventVersions map[string]string - - meshGateway *pbservice.IndexedCheckServiceNodes - - // updateCh is an internal implementation detail for the machinery of the - // manager. - updateCh chan<- cache.UpdateEvent - - // publicUpdateCh is the channel the manager uses to pass data back to the - // caller. - publicUpdateCh chan<- cache.UpdateEvent -} - -func newSubscriptionState(peerName, partition string) *subscriptionState { - return &subscriptionState{ - peerName: peerName, - partition: partition, - watchedServices: make(map[structs.ServiceName]context.CancelFunc), - watchedProxyServices: make(map[structs.ServiceName]context.CancelFunc), - connectServices: make(map[structs.ServiceName]string), - eventVersions: make(map[string]string), - } -} - -func (s *subscriptionState) sendPendingEvents( - ctx context.Context, - logger hclog.Logger, - pending *pendingPayload, -) { - for _, pendingEvt := range pending.Events { - cID := pendingEvt.CorrelationID - newVersion := pendingEvt.Version - - oldVersion, ok := s.eventVersions[pendingEvt.ID] - if ok && newVersion == oldVersion { - logger.Trace("skipping send of duplicate public event", "correlationID", cID) - continue - } - - logger.Trace("sending public event", "correlationID", cID) - s.eventVersions[pendingEvt.ID] = newVersion - - evt := cache.UpdateEvent{ - CorrelationID: cID, - Result: pendingEvt.Result, - } - - select { - case s.publicUpdateCh <- evt: - case <-ctx.Done(): - } - } -} - -func (s *subscriptionState) cleanupEventVersions(logger hclog.Logger) { - for id := range s.eventVersions { - keep := false - switch { - case id == meshGatewayPayloadID: - keep = true - - case id == caRootsPayloadID: - keep = true - - case strings.HasPrefix(id, servicePayloadIDPrefix): - name := strings.TrimPrefix(id, servicePayloadIDPrefix) - sn := structs.ServiceNameFromString(name) - - if _, ok := s.watchedServices[sn]; ok { - keep = true - } - - case strings.HasPrefix(id, proxyServicePayloadIDPrefix): - name := strings.TrimPrefix(id, proxyServicePayloadIDPrefix) - sn := structs.ServiceNameFromString(name) - - if _, ok := s.watchedProxyServices[sn]; ok { - keep = true - } - - case strings.HasPrefix(id, discoveryChainPayloadIDPrefix): - name := strings.TrimPrefix(id, discoveryChainPayloadIDPrefix) - sn := structs.ServiceNameFromString(name) - - if _, ok := s.connectServices[sn]; ok { - keep = true - } - } - - if !keep { - logger.Trace("cleaning up unreferenced event id version", "id", id) - delete(s.eventVersions, id) - } - } -} - -type pendingPayload struct { - Events []pendingEvent -} - -type pendingEvent struct { - ID string - CorrelationID string - Result proto.Message - Version string -} - -const ( - caRootsPayloadID = "roots" - meshGatewayPayloadID = "mesh-gateway" - servicePayloadIDPrefix = "service:" - proxyServicePayloadIDPrefix = "proxy-service:" // TODO(peering): remove - discoveryChainPayloadIDPrefix = "chain:" -) - -func (p *pendingPayload) Add(id string, correlationID string, raw interface{}) error { - result, ok := raw.(proto.Message) - if !ok { - return fmt.Errorf("invalid type for %q event: %T", correlationID, raw) - } - - version, err := hashProtobuf(result) - if err != nil { - return fmt.Errorf("error hashing %q event: %w", correlationID, err) - } - - p.Events = append(p.Events, pendingEvent{ - ID: id, - CorrelationID: correlationID, - Result: result, - Version: version, - }) - - return nil -} - -func hashProtobuf(res proto.Message) (string, error) { - h := sha256.New() - buffer := proto.NewBuffer(nil) - buffer.SetDeterministic(true) - - err := buffer.Marshal(res) - if err != nil { - return "", err - } - h.Write(buffer.Bytes()) - buffer.Reset() - - return hex.EncodeToString(h.Sum(nil)), nil -} diff --git a/agent/rpc/peering/subscription_state_test.go b/agent/rpc/peering/subscription_state_test.go deleted file mode 100644 index e94459ac664b2..0000000000000 --- a/agent/rpc/peering/subscription_state_test.go +++ /dev/null @@ -1,200 +0,0 @@ -package peering - -import ( - "context" - "testing" - "time" - - "github.com/golang/protobuf/proto" - "github.com/hashicorp/go-hclog" - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbservice" - "github.com/hashicorp/consul/sdk/testutil" -) - -func TestSubscriptionState_Events(t *testing.T) { - logger := hclog.NewNullLogger() - - partition := acl.DefaultEnterpriseMeta().PartitionOrEmpty() - - state := newSubscriptionState("my-peering", partition) - - testutil.RunStep(t, "empty", func(t *testing.T) { - pending := &pendingPayload{} - - ch := make(chan cache.UpdateEvent, 1) - state.publicUpdateCh = ch - go func() { - state.sendPendingEvents(context.Background(), logger, pending) - close(ch) - }() - - got := drainEvents(t, ch) - require.Len(t, got, 0) - }) - - meshNode1 := &pbservice.CheckServiceNode{ - Node: &pbservice.Node{Node: "foo"}, - Service: &pbservice.NodeService{ID: "mgw-1", Service: "mgw", Kind: "mesh-gateway"}, - } - - testutil.RunStep(t, "one", func(t *testing.T) { - pending := &pendingPayload{} - require.NoError(t, pending.Add( - meshGatewayPayloadID, - subMeshGateway+partition, - &pbservice.IndexedCheckServiceNodes{ - Nodes: []*pbservice.CheckServiceNode{ - proto.Clone(meshNode1).(*pbservice.CheckServiceNode), - }, - }, - )) - - ch := make(chan cache.UpdateEvent, 1) - state.publicUpdateCh = ch - go func() { - state.sendPendingEvents(context.Background(), logger, pending) - close(ch) - }() - - got := drainEvents(t, ch) - require.Len(t, got, 1) - - evt := got[0] - require.Equal(t, subMeshGateway+partition, evt.CorrelationID) - require.Len(t, evt.Result.(*pbservice.IndexedCheckServiceNodes).Nodes, 1) - }) - - testutil.RunStep(t, "a duplicate is omitted", func(t *testing.T) { - pending := &pendingPayload{} - require.NoError(t, pending.Add( - meshGatewayPayloadID, - subMeshGateway+partition, - &pbservice.IndexedCheckServiceNodes{ - Nodes: []*pbservice.CheckServiceNode{ - proto.Clone(meshNode1).(*pbservice.CheckServiceNode), - }, - }, - )) - - ch := make(chan cache.UpdateEvent, 1) - state.publicUpdateCh = ch - go func() { - state.sendPendingEvents(context.Background(), logger, pending) - close(ch) - }() - - got := drainEvents(t, ch) - require.Len(t, got, 0) - }) - - webNode1 := &pbservice.CheckServiceNode{ - Node: &pbservice.Node{Node: "zim"}, - Service: &pbservice.NodeService{ID: "web-1", Service: "web"}, - } - - webSN := structs.NewServiceName("web", nil) - - testutil.RunStep(t, "a duplicate is omitted even if mixed", func(t *testing.T) { - pending := &pendingPayload{} - require.NoError(t, pending.Add( - meshGatewayPayloadID, - subMeshGateway+partition, - &pbservice.IndexedCheckServiceNodes{ - Nodes: []*pbservice.CheckServiceNode{ - proto.Clone(meshNode1).(*pbservice.CheckServiceNode), - }, - }, - )) - require.NoError(t, pending.Add( - servicePayloadIDPrefix+webSN.String(), - subExportedService+webSN.String(), - &pbservice.IndexedCheckServiceNodes{ - Nodes: []*pbservice.CheckServiceNode{ - proto.Clone(webNode1).(*pbservice.CheckServiceNode), - }, - }, - )) - - ch := make(chan cache.UpdateEvent, 1) - state.publicUpdateCh = ch - go func() { - state.sendPendingEvents(context.Background(), logger, pending) - close(ch) - }() - - got := drainEvents(t, ch) - require.Len(t, got, 1) - - evt := got[0] - require.Equal(t, subExportedService+webSN.String(), evt.CorrelationID) - require.Len(t, evt.Result.(*pbservice.IndexedCheckServiceNodes).Nodes, 1) - }) - - meshNode2 := &pbservice.CheckServiceNode{ - Node: &pbservice.Node{Node: "bar"}, - Service: &pbservice.NodeService{ID: "mgw-2", Service: "mgw", Kind: "mesh-gateway"}, - } - - testutil.RunStep(t, "an update to an existing item is published", func(t *testing.T) { - pending := &pendingPayload{} - require.NoError(t, pending.Add( - meshGatewayPayloadID, - subMeshGateway+partition, - &pbservice.IndexedCheckServiceNodes{ - Nodes: []*pbservice.CheckServiceNode{ - proto.Clone(meshNode1).(*pbservice.CheckServiceNode), - proto.Clone(meshNode2).(*pbservice.CheckServiceNode), - }, - }, - )) - - ch := make(chan cache.UpdateEvent, 1) - state.publicUpdateCh = ch - go func() { - state.sendPendingEvents(context.Background(), logger, pending) - close(ch) - }() - - got := drainEvents(t, ch) - require.Len(t, got, 1) - - evt := got[0] - require.Equal(t, subMeshGateway+partition, evt.CorrelationID) - require.Len(t, evt.Result.(*pbservice.IndexedCheckServiceNodes).Nodes, 2) - }) -} - -func drainEvents(t *testing.T, ch <-chan cache.UpdateEvent) []cache.UpdateEvent { - var out []cache.UpdateEvent - - for { - select { - case evt, ok := <-ch: - if !ok { - return out - } - out = append(out, evt) - case <-time.After(100 * time.Millisecond): - t.Fatalf("channel did not close in time") - } - } -} - -func testNewSubscriptionState(partition string) ( - *subscriptionState, - chan cache.UpdateEvent, -) { - var ( - publicUpdateCh = make(chan cache.UpdateEvent, 1) - ) - - state := newSubscriptionState("my-peering", partition) - state.publicUpdateCh = publicUpdateCh - - return state, publicUpdateCh -} diff --git a/agent/rpc/peering/subscription_view.go b/agent/rpc/peering/subscription_view.go deleted file mode 100644 index 2cd2a6ab2d047..0000000000000 --- a/agent/rpc/peering/subscription_view.go +++ /dev/null @@ -1,161 +0,0 @@ -package peering - -import ( - "fmt" - "sort" - - "github.com/hashicorp/go-hclog" - - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/agent/submatview" - "github.com/hashicorp/consul/proto/pbservice" - "github.com/hashicorp/consul/proto/pbsubscribe" -) - -type Subscriber interface { - Subscribe(req *stream.SubscribeRequest) (*stream.Subscription, error) -} - -type exportedServiceRequest struct { - logger hclog.Logger - req structs.ServiceSpecificRequest - sub Subscriber -} - -func newExportedStandardServiceRequest(logger hclog.Logger, svc structs.ServiceName, sub Subscriber) *exportedServiceRequest { - req := structs.ServiceSpecificRequest{ - ServiceName: svc.Name, - Connect: false, - EnterpriseMeta: svc.EnterpriseMeta, - } - return &exportedServiceRequest{ - logger: logger, - req: req, - sub: sub, - } -} - -// TODO(peering): remove -func newExportedConnectProxyServiceRequest(logger hclog.Logger, svc structs.ServiceName, sub Subscriber) *exportedServiceRequest { - req := structs.ServiceSpecificRequest{ - ServiceName: svc.Name, - Connect: true, - EnterpriseMeta: svc.EnterpriseMeta, - } - return &exportedServiceRequest{ - logger: logger, - req: req, - sub: sub, - } -} - -// CacheInfo implements submatview.Request -func (e *exportedServiceRequest) CacheInfo() cache.RequestInfo { - return e.req.CacheInfo() -} - -func (e *exportedServiceRequest) getTopic() pbsubscribe.Topic { - if e.req.Connect { - return pbsubscribe.Topic_ServiceHealthConnect - } - // Using the Topic_ServiceHealth will ignore proxies unless the ServiceName is a proxy name. - return pbsubscribe.Topic_ServiceHealth -} - -// NewMaterializer implements submatview.Request -func (e *exportedServiceRequest) NewMaterializer() (submatview.Materializer, error) { - // TODO(peering): reinstate this - // if e.req.Connect { - // return nil, fmt.Errorf("connect views are not supported") - // } - reqFn := func(index uint64) *pbsubscribe.SubscribeRequest { - return &pbsubscribe.SubscribeRequest{ - Topic: e.getTopic(), - Key: e.req.ServiceName, - Token: e.req.Token, - Datacenter: e.req.Datacenter, - Index: index, - Namespace: e.req.EnterpriseMeta.NamespaceOrEmpty(), - Partition: e.req.EnterpriseMeta.PartitionOrEmpty(), - } - } - deps := submatview.Deps{ - View: newExportedServicesView(), - Logger: e.logger, - Request: reqFn, - } - return submatview.NewLocalMaterializer(e.sub, deps), nil -} - -// Type implements submatview.Request -func (e *exportedServiceRequest) Type() string { - return "leader.peering.stream.exportedServiceRequest" -} - -// exportedServicesView implements submatview.View for storing the view state -// of an exported service's health result. We store it as a map to make updates and -// deletions a little easier but we could just store a result type -// (IndexedCheckServiceNodes) and update it in place for each event - that -// involves re-sorting each time etc. though. -// -// Unlike rpcclient.healthView, there is no need for a filter because for exported services -// we export all instances unconditionally. -type exportedServicesView struct { - state map[string]*pbservice.CheckServiceNode -} - -func newExportedServicesView() *exportedServicesView { - return &exportedServicesView{ - state: make(map[string]*pbservice.CheckServiceNode), - } -} - -// Reset implements submatview.View -func (s *exportedServicesView) Reset() { - s.state = make(map[string]*pbservice.CheckServiceNode) -} - -// Update implements submatview.View -func (s *exportedServicesView) Update(events []*pbsubscribe.Event) error { - for _, event := range events { - serviceHealth := event.GetServiceHealth() - if serviceHealth == nil { - return fmt.Errorf("unexpected event type for service health view: %T", - event.GetPayload()) - } - - id := serviceHealth.CheckServiceNode.UniqueID() - switch serviceHealth.Op { - case pbsubscribe.CatalogOp_Register: - s.state[id] = serviceHealth.CheckServiceNode - - case pbsubscribe.CatalogOp_Deregister: - delete(s.state, id) - } - } - return nil -} - -// Result returns the CheckServiceNodes stored by this view. -// Result implements submatview.View -func (s *exportedServicesView) Result(index uint64) interface{} { - result := pbservice.IndexedCheckServiceNodes{ - Nodes: make([]*pbservice.CheckServiceNode, 0, len(s.state)), - Index: index, - } - for _, node := range s.state { - result.Nodes = append(result.Nodes, node) - } - sortCheckServiceNodes(&result) - - return &result -} - -// sortCheckServiceNodes stable sorts the results to match memdb semantics. -func sortCheckServiceNodes(n *pbservice.IndexedCheckServiceNodes) { - sort.SliceStable(n.Nodes, func(i, j int) bool { - return n.Nodes[i].UniqueID() < n.Nodes[j].UniqueID() - }) -} diff --git a/agent/rpc/peering/subscription_view_test.go b/agent/rpc/peering/subscription_view_test.go deleted file mode 100644 index 6165545645561..0000000000000 --- a/agent/rpc/peering/subscription_view_test.go +++ /dev/null @@ -1,293 +0,0 @@ -package peering - -import ( - "context" - "fmt" - "math/rand" - "sort" - "sync" - "testing" - "time" - - "github.com/hashicorp/go-hclog" - "github.com/stretchr/testify/require" - "golang.org/x/sync/errgroup" - - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/agent/submatview" - "github.com/hashicorp/consul/proto/pbservice" - "github.com/hashicorp/consul/proto/pbsubscribe" -) - -// TestExportedServiceSubscription tests the exported services view and the backing submatview.LocalMaterializer. -func TestExportedServiceSubscription(t *testing.T) { - s := &stateMap{ - states: make(map[string]*serviceState), - } - - sh := snapshotHandler{stateMap: s} - pub := stream.NewEventPublisher(10 * time.Millisecond) - pub.RegisterHandler(pbsubscribe.Topic_ServiceHealth, sh.Snapshot) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - go pub.Run(ctx) - - apiSN := structs.NewServiceName("api", nil) - webSN := structs.NewServiceName("web", nil) - - newRegisterHealthEvent := func(id, service string) stream.Event { - return stream.Event{ - Topic: pbsubscribe.Topic_ServiceHealth, - Payload: state.EventPayloadCheckServiceNode{ - Op: pbsubscribe.CatalogOp_Register, - Value: &structs.CheckServiceNode{ - Service: &structs.NodeService{ - ID: id, - Service: service, - }, - }, - }, - } - } - - // List of updates to the state store: - // - api: {register api-1, register api-2, register api-3} - // - web: {register web-1, deregister web-1, register web-2}1 - events := []map[string]stream.Event{ - { - apiSN.String(): newRegisterHealthEvent("api-1", "api"), - webSN.String(): newRegisterHealthEvent("web-1", "web"), - }, - { - apiSN.String(): newRegisterHealthEvent("api-2", "api"), - webSN.String(): newRegisterHealthEvent("web-1", "web"), - }, - { - apiSN.String(): newRegisterHealthEvent("api-3", "api"), - webSN.String(): newRegisterHealthEvent("web-2", "web"), - }, - } - - // store represents Consul's memdb state store. - // A stream of event updates - store := store{stateMap: s, pub: pub} - - // This errgroup is used to issue simulate async updates to the state store, - // and also consume that fixed number of updates. - group, gctx := errgroup.WithContext(ctx) - group.Go(func() error { - store.simulateUpdates(gctx, events) - return nil - }) - - // viewStore is the store shared by the two service consumer's materializers. - // It is intentionally not run in the errgroup because it will block until the context is canceled. - viewStore := submatview.NewStore(hclog.New(nil)) - go viewStore.Run(ctx) - - // Each consumer represents a subscriber to exported service updates, and will consume - // stream events for the service name it is interested in. - consumers := make(map[string]*consumer) - for _, svc := range []structs.ServiceName{apiSN, webSN} { - c := &consumer{ - viewStore: viewStore, - publisher: pub, - seenByIndex: make(map[uint64][]string), - } - service := svc - group.Go(func() error { - return c.consume(gctx, service.Name, len(events)) - }) - consumers[service.String()] = c - } - - // Wait until all the events have been simulated and consumed. - done := make(chan struct{}) - go func() { - defer close(done) - _ = group.Wait() - }() - - select { - case <-done: - // finished - case <-time.After(500 * time.Millisecond): - // timed out, the Wait context will be cancelled by - t.Fatalf("timed out waiting for producers and consumers") - } - - for svc, c := range consumers { - require.NotEmpty(t, c.seenByIndex) - - // Note that store.states[svc].idsByIndex does not assert against a slice of expectations because - // the index that the different events will arrive in the simulation is not deterministic. - require.Equal(t, store.states[svc].idsByIndex, c.seenByIndex) - } -} - -// stateMap is a map keyed by service to the state of the store at different indexes -type stateMap struct { - mu sync.Mutex - states map[string]*serviceState -} - -type store struct { - *stateMap - - pub *stream.EventPublisher -} - -// simulateUpdates will publish events and also store the state at each index for later assertions. -func (s *store) simulateUpdates(ctx context.Context, events []map[string]stream.Event) { - idx := uint64(0) - - for _, m := range events { - if ctx.Err() != nil { - return - } - - for svc, event := range m { - idx++ - event.Index = idx - s.pub.Publish([]stream.Event{event}) - - s.stateMap.mu.Lock() - svcState, ok := s.states[svc] - if !ok { - svcState = &serviceState{ - current: make(map[string]*structs.CheckServiceNode), - idsByIndex: make(map[uint64][]string), - } - s.states[svc] = svcState - } - s.stateMap.mu.Unlock() - - svcState.mu.Lock() - svcState.idx = idx - - // Updating the svcState.current map allows us to capture snapshots from a stream of add/delete events. - payload := event.Payload.(state.EventPayloadCheckServiceNode) - switch payload.Op { - case pbsubscribe.CatalogOp_Register: - svcState.current[payload.Value.Service.ID] = payload.Value - case pbsubscribe.CatalogOp_Deregister: - delete(svcState.current, payload.Value.Service.ID) - default: - panic(fmt.Sprintf("unable to handle op type %v", payload.Op)) - } - - svcState.idsByIndex[idx] = serviceIDsFromMap(svcState.current) - svcState.mu.Unlock() - - delay := time.Duration(rand.Intn(25)) * time.Millisecond - time.Sleep(5*time.Millisecond + delay) - } - } -} - -func serviceIDsFromMap(m map[string]*structs.CheckServiceNode) []string { - var result []string - for id := range m { - result = append(result, id) - } - sort.Strings(result) - return result -} - -type snapshotHandler struct { - *stateMap -} - -type serviceState struct { - mu sync.Mutex - idx uint64 - - // The current snapshot of data, given the observed events. - current map[string]*structs.CheckServiceNode - - // The list of service IDs seen at each index that an update was received for the given service name. - idsByIndex map[uint64][]string -} - -// Snapshot dumps the currently registered service instances. -// -// Snapshot implements stream.SnapshotFunc. -func (s *snapshotHandler) Snapshot(req stream.SubscribeRequest, buf stream.SnapshotAppender) (index uint64, err error) { - s.stateMap.mu.Lock() - svcState, ok := s.states[req.Subject.String()] - if !ok { - svcState = &serviceState{ - current: make(map[string]*structs.CheckServiceNode), - idsByIndex: make(map[uint64][]string), - } - s.states[req.Subject.String()] = svcState - } - s.stateMap.mu.Unlock() - - svcState.mu.Lock() - defer svcState.mu.Unlock() - - for _, node := range svcState.current { - event := stream.Event{ - Topic: pbsubscribe.Topic_ServiceHealth, - Index: svcState.idx, - Payload: state.EventPayloadCheckServiceNode{ - Op: pbsubscribe.CatalogOp_Register, - Value: node, - }, - } - buf.Append([]stream.Event{event}) - } - return svcState.idx, nil -} - -type consumer struct { - viewStore *submatview.Store - publisher *stream.EventPublisher - seenByIndex map[uint64][]string -} - -func (c *consumer) consume(ctx context.Context, service string, countExpected int) error { - group, gctx := errgroup.WithContext(ctx) - updateCh := make(chan cache.UpdateEvent, 10) - - group.Go(func() error { - sr := newExportedStandardServiceRequest( - hclog.New(nil), - structs.NewServiceName(service, nil), - c.publisher, - ) - return c.viewStore.Notify(gctx, sr, "", updateCh) - }) - group.Go(func() error { - var n int - for { - if n >= countExpected { - return nil - } - select { - case u := <-updateCh: - // Each update contains the current snapshot of registered services. - c.seenByIndex[u.Meta.Index] = serviceIDsFromUpdates(u) - n++ - - case <-gctx.Done(): - return nil - } - } - }) - return group.Wait() -} - -func serviceIDsFromUpdates(u cache.UpdateEvent) []string { - var result []string - for _, node := range u.Result.(*pbservice.IndexedCheckServiceNodes).Nodes { - result = append(result, node.Service.ID) - } - sort.Strings(result) - return result -} diff --git a/agent/rpc/peering/testing.go b/agent/rpc/peering/testing.go deleted file mode 100644 index 312b9272063a0..0000000000000 --- a/agent/rpc/peering/testing.go +++ /dev/null @@ -1,191 +0,0 @@ -package peering - -import ( - "context" - "io" - "sync" - "time" - - "google.golang.org/grpc/metadata" - - "github.com/hashicorp/consul/agent/structs" - "github.com/hashicorp/consul/proto/pbpeering" -) - -// same certificate that appears in our connect tests -var validCA = ` ------BEGIN CERTIFICATE----- -MIICmDCCAj6gAwIBAgIBBzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtDb25zdWwg -Q0EgNzAeFw0xODA1MjExNjMzMjhaFw0yODA1MTgxNjMzMjhaMBYxFDASBgNVBAMT -C0NvbnN1bCBDQSA3MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER0qlxjnRcMEr -iSGlH7G7dYU7lzBEmLUSMZkyBbClmyV8+e8WANemjn+PLnCr40If9cmpr7RnC9Qk -GTaLnLiF16OCAXswggF3MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/ -MGgGA1UdDgRhBF8xZjo5MTpjYTo0MTo4ZjphYzo2NzpiZjo1OTpjMjpmYTo0ZTo3 -NTo1YzpkODpmMDo1NTpkZTpiZTo3NTpiODozMzozMTpkNToyNDpiMDowNDpiMzpl -ODo5Nzo1Yjo3ZTBqBgNVHSMEYzBhgF8xZjo5MTpjYTo0MTo4ZjphYzo2NzpiZjo1 -OTpjMjpmYTo0ZTo3NTo1YzpkODpmMDo1NTpkZTpiZTo3NTpiODozMzozMTpkNToy -NDpiMDowNDpiMzplODo5Nzo1Yjo3ZTA/BgNVHREEODA2hjRzcGlmZmU6Ly8xMjRk -ZjVhMC05ODIwLTc2YzMtOWFhOS02ZjYyMTY0YmExYzIuY29uc3VsMD0GA1UdHgEB -/wQzMDGgLzAtgisxMjRkZjVhMC05ODIwLTc2YzMtOWFhOS02ZjYyMTY0YmExYzIu -Y29uc3VsMAoGCCqGSM49BAMCA0gAMEUCIQDzkkI7R+0U12a+zq2EQhP/n2mHmta+ -fs2hBxWIELGwTAIgLdO7RRw+z9nnxCIA6kNl//mIQb+PGItespiHZKAz74Q= ------END CERTIFICATE----- -` -var invalidCA = ` ------BEGIN CERTIFICATE----- -not valid ------END CERTIFICATE----- -` - -var validAddress = "1.2.3.4:80" - -var validServerName = "server.consul" - -var validPeerID = "peer1" - -// TODO(peering): the test methods below are exposed to prevent duplication, -// these should be removed at same time tests in peering_test get refactored. -// XXX: we can't put the existing tests in service_test.go into the peering -// package because it causes an import cycle by importing the top-level consul -// package (which correctly imports the agent/rpc/peering package) - -// TestPeering is a test utility for generating a pbpeering.Peering with valid -// data along with the peerName, state and index. -func TestPeering(peerName string, state pbpeering.PeeringState, meta map[string]string) *pbpeering.Peering { - return &pbpeering.Peering{ - Name: peerName, - PeerCAPems: []string{validCA}, - PeerServerAddresses: []string{validAddress}, - PeerServerName: validServerName, - State: state, - PeerID: validPeerID, - Meta: meta, - } -} - -// TestPeeringToken is a test utility for generating a valid peering token -// with the given peerID for use in test cases -func TestPeeringToken(peerID string) structs.PeeringToken { - return structs.PeeringToken{ - CA: []string{validCA}, - ServerAddresses: []string{validAddress}, - ServerName: validServerName, - PeerID: peerID, - } -} - -type MockClient struct { - mu sync.Mutex - - ErrCh chan error - ReplicationStream *MockStream -} - -func (c *MockClient) Send(r *pbpeering.ReplicationMessage) error { - c.ReplicationStream.recvCh <- r - return nil -} - -func (c *MockClient) Recv() (*pbpeering.ReplicationMessage, error) { - select { - case err := <-c.ErrCh: - return nil, err - case r := <-c.ReplicationStream.sendCh: - return r, nil - case <-time.After(10 * time.Millisecond): - return nil, io.EOF - } -} - -func (c *MockClient) RecvWithTimeout(dur time.Duration) (*pbpeering.ReplicationMessage, error) { - select { - case err := <-c.ErrCh: - return nil, err - case r := <-c.ReplicationStream.sendCh: - return r, nil - case <-time.After(dur): - return nil, io.EOF - } -} - -func (c *MockClient) Close() { - close(c.ReplicationStream.recvCh) -} - -func NewMockClient(ctx context.Context) *MockClient { - return &MockClient{ - ReplicationStream: newTestReplicationStream(ctx), - } -} - -// MockStream mocks peering.PeeringService_StreamResourcesServer -type MockStream struct { - sendCh chan *pbpeering.ReplicationMessage - recvCh chan *pbpeering.ReplicationMessage - - ctx context.Context - mu sync.Mutex -} - -var _ pbpeering.PeeringService_StreamResourcesServer = (*MockStream)(nil) - -func newTestReplicationStream(ctx context.Context) *MockStream { - return &MockStream{ - sendCh: make(chan *pbpeering.ReplicationMessage, 1), - recvCh: make(chan *pbpeering.ReplicationMessage, 1), - ctx: ctx, - } -} - -// Send implements pbpeering.PeeringService_StreamResourcesServer -func (s *MockStream) Send(r *pbpeering.ReplicationMessage) error { - s.sendCh <- r - return nil -} - -// Recv implements pbpeering.PeeringService_StreamResourcesServer -func (s *MockStream) Recv() (*pbpeering.ReplicationMessage, error) { - r := <-s.recvCh - if r == nil { - return nil, io.EOF - } - return r, nil -} - -// Context implements grpc.ServerStream and grpc.ClientStream -func (s *MockStream) Context() context.Context { - return s.ctx -} - -// SendMsg implements grpc.ServerStream and grpc.ClientStream -func (s *MockStream) SendMsg(m interface{}) error { - return nil -} - -// RecvMsg implements grpc.ServerStream and grpc.ClientStream -func (s *MockStream) RecvMsg(m interface{}) error { - return nil -} - -// SetHeader implements grpc.ServerStream -func (s *MockStream) SetHeader(metadata.MD) error { - return nil -} - -// SendHeader implements grpc.ServerStream -func (s *MockStream) SendHeader(metadata.MD) error { - return nil -} - -// SetTrailer implements grpc.ServerStream -func (s *MockStream) SetTrailer(metadata.MD) {} - -type incrementalTime struct { - base time.Time - next uint64 -} - -func (t *incrementalTime) Now() time.Time { - t.next++ - return t.base.Add(time.Duration(t.next) * time.Second) -} diff --git a/agent/rpc/peering/testutil_oss_test.go b/agent/rpc/peering/testutil_oss_test.go deleted file mode 100644 index 4aac92cadd60d..0000000000000 --- a/agent/rpc/peering/testutil_oss_test.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build !consulent -// +build !consulent - -package peering_test - -import ( - "testing" - - "github.com/hashicorp/consul/agent/consul" - "github.com/hashicorp/go-hclog" -) - -func newDefaultDepsEnterprise(t *testing.T, logger hclog.Logger, c *consul.Config) consul.EnterpriseDeps { - t.Helper() - return consul.EnterpriseDeps{} -} diff --git a/agent/rpc/peering/validate.go b/agent/rpc/peering/validate.go deleted file mode 100644 index 32a3d5d2983c6..0000000000000 --- a/agent/rpc/peering/validate.go +++ /dev/null @@ -1,56 +0,0 @@ -package peering - -import ( - "fmt" - "net" - "net/netip" - "strconv" - - "github.com/hashicorp/consul/agent/connect" - "github.com/hashicorp/consul/agent/structs" -) - -// validatePeeringToken ensures that the token has valid values. -func validatePeeringToken(tok *structs.PeeringToken) error { - // the CA values here should be valid x509 certs - for _, certStr := range tok.CA { - // TODO(peering): should we put these in a cert pool on the token? - // maybe there's a better place to do the parsing? - if _, err := connect.ParseCert(certStr); err != nil { - return fmt.Errorf("peering token invalid CA: %w", err) - } - } - - if len(tok.ServerAddresses) == 0 { - return errPeeringTokenEmptyServerAddresses - } - for _, addr := range tok.ServerAddresses { - host, portRaw, err := net.SplitHostPort(addr) - if err != nil { - return &errPeeringInvalidServerAddress{addr} - } - - port, err := strconv.Atoi(portRaw) - if err != nil { - return &errPeeringInvalidServerAddress{addr} - } - if port < 1 || port > 65535 { - return &errPeeringInvalidServerAddress{addr} - } - if _, err := netip.ParseAddr(host); err != nil { - return &errPeeringInvalidServerAddress{addr} - } - } - - // TODO(peering): validate name matches SNI? - // TODO(peering): validate name well formed? - if tok.ServerName == "" { - return errPeeringTokenEmptyServerName - } - - if tok.PeerID == "" { - return errPeeringTokenEmptyPeerID - } - - return nil -} diff --git a/agent/rpc/peering/validate_test.go b/agent/rpc/peering/validate_test.go deleted file mode 100644 index 1f0660c8f9b2e..0000000000000 --- a/agent/rpc/peering/validate_test.go +++ /dev/null @@ -1,108 +0,0 @@ -package peering - -import ( - "errors" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/agent/structs" -) - -func TestValidatePeeringToken(t *testing.T) { - type testCase struct { - name string - token *structs.PeeringToken - wantErr error - } - - tt := []testCase{ - { - name: "empty", - token: &structs.PeeringToken{}, - wantErr: errPeeringTokenEmptyServerAddresses, - }, - { - name: "empty CA", - token: &structs.PeeringToken{ - CA: []string{}, - }, - wantErr: errPeeringTokenEmptyServerAddresses, - }, - { - name: "invalid CA", - token: &structs.PeeringToken{ - CA: []string{"notavalidcert"}, - }, - wantErr: errors.New("peering token invalid CA: no PEM-encoded data found"), - }, - { - name: "invalid CA cert", - token: &structs.PeeringToken{ - CA: []string{invalidCA}, - }, - wantErr: errors.New("peering token invalid CA: x509: malformed certificate"), - }, - { - name: "invalid address port", - token: &structs.PeeringToken{ - CA: []string{validCA}, - ServerAddresses: []string{"1.2.3.4"}, - }, - wantErr: &errPeeringInvalidServerAddress{ - "1.2.3.4", - }, - }, - { - name: "invalid address IP", - token: &structs.PeeringToken{ - CA: []string{validCA}, - ServerAddresses: []string{"foo.bar.baz"}, - }, - wantErr: &errPeeringInvalidServerAddress{ - "foo.bar.baz", - }, - }, - { - name: "invalid server name", - token: &structs.PeeringToken{ - CA: []string{validCA}, - ServerAddresses: []string{"1.2.3.4:80"}, - }, - wantErr: errPeeringTokenEmptyServerName, - }, - { - name: "invalid peer ID", - token: &structs.PeeringToken{ - CA: []string{validCA}, - ServerAddresses: []string{validAddress}, - ServerName: validServerName, - }, - wantErr: errPeeringTokenEmptyPeerID, - }, - { - name: "valid token", - token: &structs.PeeringToken{ - CA: []string{validCA}, - ServerAddresses: []string{validAddress}, - ServerName: validServerName, - PeerID: validPeerID, - }, - }, - } - - for _, tc := range tt { - t.Run(tc.name, func(t *testing.T) { - err := validatePeeringToken(tc.token) - if tc.wantErr != nil { - if err == nil { - t.Error("expected error but got nil") - return - } - require.Contains(t, err.Error(), tc.wantErr.Error()) - return - } - require.NoError(t, err) - }) - } -} diff --git a/agent/rpcclient/health/health.go b/agent/rpcclient/health/health.go index dd4be64cef207..004101144fb44 100644 --- a/agent/rpcclient/health/health.go +++ b/agent/rpcclient/health/health.go @@ -26,21 +26,19 @@ type NetRPC interface { type CacheGetter interface { Get(ctx context.Context, t string, r cache.Request) (interface{}, cache.ResultMeta, error) - NotifyCallback(ctx context.Context, t string, r cache.Request, cID string, cb cache.Callback) error + Notify(ctx context.Context, t string, r cache.Request, cID string, ch chan<- cache.UpdateEvent) error } type MaterializedViewStore interface { Get(ctx context.Context, req submatview.Request) (submatview.Result, error) - NotifyCallback(ctx context.Context, req submatview.Request, cID string, cb cache.Callback) error + Notify(ctx context.Context, req submatview.Request, cID string, ch chan<- cache.UpdateEvent) error } func (c *Client) ServiceNodes( ctx context.Context, req structs.ServiceSpecificRequest, ) (structs.IndexedCheckServiceNodes, cache.ResultMeta, error) { - // Note: if MergeCentralConfig is requested, default to using the RPC backend for now - // as the streaming backend and materializer does not have support for merging yet. - if c.useStreaming(req) && (req.QueryOptions.UseCache || req.QueryOptions.MinQueryIndex > 0) && !req.MergeCentralConfig { + if c.useStreaming(req) && (req.QueryOptions.UseCache || req.QueryOptions.MinQueryIndex > 0) { c.QueryOptionDefaults(&req.QueryOptions) result, err := c.ViewStore.Get(ctx, c.newServiceRequest(req)) @@ -93,14 +91,14 @@ func (c *Client) Notify( ctx context.Context, req structs.ServiceSpecificRequest, correlationID string, - cb cache.Callback, + ch chan<- cache.UpdateEvent, ) error { if c.useStreaming(req) { sr := c.newServiceRequest(req) - return c.ViewStore.NotifyCallback(ctx, sr, correlationID, cb) + return c.ViewStore.Notify(ctx, sr, correlationID, ch) } - return c.Cache.NotifyCallback(ctx, c.CacheName, &req, correlationID, cb) + return c.Cache.Notify(ctx, c.CacheName, &req, correlationID, ch) } func (c *Client) useStreaming(req structs.ServiceSpecificRequest) bool { @@ -135,16 +133,15 @@ func (r serviceRequest) Type() string { return "agent.rpcclient.health.serviceRequest" } -func (r serviceRequest) NewMaterializer() (submatview.Materializer, error) { +func (r serviceRequest) NewMaterializer() (*submatview.Materializer, error) { view, err := newHealthView(r.ServiceSpecificRequest) if err != nil { return nil, err } - deps := submatview.Deps{ + return submatview.NewMaterializer(submatview.Deps{ View: view, + Client: pbsubscribe.NewStateChangeSubscriptionClient(r.deps.Conn), Logger: r.deps.Logger, Request: newMaterializerRequest(r.ServiceSpecificRequest), - } - - return submatview.NewRPCMaterializer(pbsubscribe.NewStateChangeSubscriptionClient(r.deps.Conn), deps), nil + }), nil } diff --git a/agent/rpcclient/health/health_test.go b/agent/rpcclient/health/health_test.go index 00bc224b7a090..9ac67805fd5cc 100644 --- a/agent/rpcclient/health/health_test.go +++ b/agent/rpcclient/health/health_test.go @@ -82,16 +82,6 @@ func TestClient_ServiceNodes_BackendRouting(t *testing.T) { }, expected: useCache, }, - { - name: "rpc if merge-central-config", - req: structs.ServiceSpecificRequest{ - Datacenter: "dc1", - ServiceName: "web1", - MergeCentralConfig: true, - QueryOptions: structs.QueryOptions{MinQueryIndex: 22}, - }, - expected: useRPC, - }, } for _, tc := range testCases { @@ -162,7 +152,7 @@ func (f *fakeCache) Get(_ context.Context, t string, _ cache.Request) (interface return result, cache.ResultMeta{}, nil } -func (f *fakeCache) NotifyCallback(_ context.Context, t string, _ cache.Request, _ string, _ cache.Callback) error { +func (f *fakeCache) Notify(_ context.Context, t string, _ cache.Request, _ string, _ chan<- cache.UpdateEvent) error { f.calls = append(f.calls, t) return nil } @@ -185,7 +175,7 @@ func (f *fakeViewStore) Get(_ context.Context, req submatview.Request) (submatvi return submatview.Result{Value: &structs.IndexedCheckServiceNodes{}}, nil } -func (f *fakeViewStore) NotifyCallback(_ context.Context, req submatview.Request, _ string, _ cache.Callback) error { +func (f *fakeViewStore) Notify(_ context.Context, req submatview.Request, _ string, _ chan<- cache.UpdateEvent) error { f.calls = append(f.calls, req) return nil } diff --git a/agent/rpcclient/health/view.go b/agent/rpcclient/health/view.go index fcea750d7bc9d..8c9e6d469ce77 100644 --- a/agent/rpcclient/health/view.go +++ b/agent/rpcclient/health/view.go @@ -31,7 +31,6 @@ func newMaterializerRequest(srvReq structs.ServiceSpecificRequest) func(index ui Index: index, Namespace: srvReq.EnterpriseMeta.NamespaceOrEmpty(), Partition: srvReq.EnterpriseMeta.PartitionOrEmpty(), - PeerName: srvReq.PeerName, } if srvReq.Connect { req.Topic = pbsubscribe.Topic_ServiceHealthConnect diff --git a/agent/rpcclient/health/view_test.go b/agent/rpcclient/health/view_test.go index 50d33d1bb74f0..c2a7ea79b0e46 100644 --- a/agent/rpcclient/health/view_test.go +++ b/agent/rpcclient/health/view_test.go @@ -21,7 +21,6 @@ import ( "github.com/hashicorp/consul/proto/pbservice" "github.com/hashicorp/consul/proto/pbsubscribe" "github.com/hashicorp/consul/proto/prototest" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/types" ) @@ -76,16 +75,6 @@ func TestHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T) { t.Skip("too slow for testing.Short") } - t.Run("local data", func(t *testing.T) { - testHealthView_IntegrationWithStore_WithEmptySnapshot(t, structs.DefaultPeerKeyword) - }) - - t.Run("peered data", func(t *testing.T) { - testHealthView_IntegrationWithStore_WithEmptySnapshot(t, "my-peer") - }) -} - -func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerName string) { namespace := getNamespace(pbcommon.DefaultEnterpriseMeta.Namespace) streamClient := newStreamClient(validateNamespace(namespace)) @@ -102,7 +91,6 @@ func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerNam req := serviceRequestStub{ serviceRequest: serviceRequest{ ServiceSpecificRequest: structs.ServiceSpecificRequest{ - PeerName: peerName, Datacenter: "dc1", ServiceName: "web", EnterpriseMeta: structs.NewEnterpriseMetaInDefaultPartition(namespace), @@ -119,7 +107,7 @@ func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerNam }, } - testutil.RunStep(t, "empty snapshot returned", func(t *testing.T) { + runStep(t, "empty snapshot returned", func(t *testing.T) { result, err := store.Get(ctx, req) require.NoError(t, err) @@ -129,7 +117,7 @@ func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerNam req.QueryOptions.MinQueryIndex = result.Index }) - testutil.RunStep(t, "blocks for timeout", func(t *testing.T) { + runStep(t, "blocks for timeout", func(t *testing.T) { // Subsequent fetch should block for the timeout start := time.Now() req.QueryOptions.MaxQueryTime = 200 * time.Millisecond @@ -147,13 +135,13 @@ func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerNam var lastResultValue structs.CheckServiceNodes - testutil.RunStep(t, "blocks until update", func(t *testing.T) { + runStep(t, "blocks until update", func(t *testing.T) { // Make another blocking query with a longer timeout and trigger an update // event part way through. start := time.Now() go func() { time.Sleep(200 * time.Millisecond) - streamClient.QueueEvents(newEventServiceHealthRegister(4, 1, "web", peerName)) + streamClient.QueueEvents(newEventServiceHealthRegister(4, 1, "web")) }() req.QueryOptions.MaxQueryTime = time.Second @@ -170,13 +158,10 @@ func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerNam require.Len(t, lastResultValue, 1, "result value should contain the new registration") - require.Equal(t, peerName, lastResultValue[0].Node.PeerName) - require.Equal(t, peerName, lastResultValue[0].Service.PeerName) - req.QueryOptions.MinQueryIndex = result.Index }) - testutil.RunStep(t, "reconnects and resumes after temporary error", func(t *testing.T) { + runStep(t, "reconnects and resumes after temporary error", func(t *testing.T) { streamClient.QueueErr(tempError("broken pipe")) // Next fetch will continue to block until timeout and receive the same @@ -197,7 +182,7 @@ func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerNam req.QueryOptions.MinQueryIndex = result.Index // But an update should still be noticed due to reconnection - streamClient.QueueEvents(newEventServiceHealthRegister(10, 2, "web", peerName)) + streamClient.QueueEvents(newEventServiceHealthRegister(10, 2, "web")) start = time.Now() req.QueryOptions.MaxQueryTime = time.Second @@ -212,15 +197,10 @@ func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerNam require.Len(t, lastResultValue, 2, "result value should contain the new registration") - require.Equal(t, peerName, lastResultValue[0].Node.PeerName) - require.Equal(t, peerName, lastResultValue[0].Service.PeerName) - require.Equal(t, peerName, lastResultValue[1].Node.PeerName) - require.Equal(t, peerName, lastResultValue[1].Service.PeerName) - req.QueryOptions.MinQueryIndex = result.Index }) - testutil.RunStep(t, "returns non-temporary error to watchers", func(t *testing.T) { + runStep(t, "returns non-temporary error to watchers", func(t *testing.T) { // Wait and send the error while fetcher is waiting go func() { time.Sleep(200 * time.Millisecond) @@ -244,7 +224,7 @@ func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerNam req.QueryOptions.MinQueryIndex = result.Index // But an update should still be noticed due to reconnection - streamClient.QueueEvents(newEventServiceHealthRegister(req.QueryOptions.MinQueryIndex+5, 3, "web", peerName)) + streamClient.QueueEvents(newEventServiceHealthRegister(req.QueryOptions.MinQueryIndex+5, 3, "web")) req.QueryOptions.MaxQueryTime = time.Second result, err = store.Get(ctx, req) @@ -253,17 +233,9 @@ func testHealthView_IntegrationWithStore_WithEmptySnapshot(t *testing.T, peerNam require.True(t, elapsed < time.Second, "Fetch should have returned before the timeout") require.Equal(t, req.QueryOptions.MinQueryIndex+5, result.Index, "result index should not have changed") - lastResultValue = result.Value.(*structs.IndexedCheckServiceNodes).Nodes - require.Len(t, lastResultValue, 3, + require.Len(t, result.Value.(*structs.IndexedCheckServiceNodes).Nodes, 3, "result value should contain the new registration") - require.Equal(t, peerName, lastResultValue[0].Node.PeerName) - require.Equal(t, peerName, lastResultValue[0].Service.PeerName) - require.Equal(t, peerName, lastResultValue[1].Node.PeerName) - require.Equal(t, peerName, lastResultValue[1].Service.PeerName) - require.Equal(t, peerName, lastResultValue[2].Node.PeerName) - require.Equal(t, peerName, lastResultValue[2].Service.PeerName) - req.QueryOptions.MinQueryIndex = result.Index }) } @@ -283,16 +255,6 @@ func TestHealthView_IntegrationWithStore_WithFullSnapshot(t *testing.T) { t.Skip("too slow for testing.Short") } - t.Run("local data", func(t *testing.T) { - testHealthView_IntegrationWithStore_WithFullSnapshot(t, structs.DefaultPeerKeyword) - }) - - t.Run("peered data", func(t *testing.T) { - testHealthView_IntegrationWithStore_WithFullSnapshot(t, "my-peer") - }) -} - -func testHealthView_IntegrationWithStore_WithFullSnapshot(t *testing.T, peerName string) { namespace := getNamespace("ns2") client := newStreamClient(validateNamespace(namespace)) @@ -303,7 +265,7 @@ func testHealthView_IntegrationWithStore_WithFullSnapshot(t *testing.T, peerName // Create an initial snapshot of 3 instances on different nodes registerServiceWeb := func(index uint64, nodeNum int) *pbsubscribe.Event { - return newEventServiceHealthRegister(index, nodeNum, "web", peerName) + return newEventServiceHealthRegister(index, nodeNum, "web") } client.QueueEvents( registerServiceWeb(5, 1), @@ -314,7 +276,6 @@ func testHealthView_IntegrationWithStore_WithFullSnapshot(t *testing.T, peerName req := serviceRequestStub{ serviceRequest: serviceRequest{ ServiceSpecificRequest: structs.ServiceSpecificRequest{ - PeerName: peerName, Datacenter: "dc1", ServiceName: "web", EnterpriseMeta: structs.NewEnterpriseMetaInDefaultPartition(namespace), @@ -324,19 +285,19 @@ func testHealthView_IntegrationWithStore_WithFullSnapshot(t *testing.T, peerName streamClient: client, } - testutil.RunStep(t, "full snapshot returned", func(t *testing.T) { + runStep(t, "full snapshot returned", func(t *testing.T) { result, err := store.Get(ctx, req) require.NoError(t, err) require.Equal(t, uint64(5), result.Index) - expected := newExpectedNodesInPeer(peerName, "node1", "node2", "node3") + expected := newExpectedNodes("node1", "node2", "node3") expected.Index = 5 prototest.AssertDeepEqual(t, expected, result.Value, cmpCheckServiceNodeNames) req.QueryOptions.MinQueryIndex = result.Index }) - testutil.RunStep(t, "blocks until deregistration", func(t *testing.T) { + runStep(t, "blocks until deregistration", func(t *testing.T) { // Make another blocking query with a longer timeout and trigger an update // event part way through. start := time.Now() @@ -344,7 +305,7 @@ func testHealthView_IntegrationWithStore_WithFullSnapshot(t *testing.T, peerName time.Sleep(200 * time.Millisecond) // Deregister instance on node1 - client.QueueEvents(newEventServiceHealthDeregister(20, 1, "web", peerName)) + client.QueueEvents(newEventServiceHealthDeregister(20, 1, "web")) }() req.QueryOptions.MaxQueryTime = time.Second @@ -357,14 +318,14 @@ func testHealthView_IntegrationWithStore_WithFullSnapshot(t *testing.T, peerName "Fetch should have returned before the timeout") require.Equal(t, uint64(20), result.Index) - expected := newExpectedNodesInPeer(peerName, "node2", "node3") + expected := newExpectedNodes("node2", "node3") expected.Index = 20 prototest.AssertDeepEqual(t, expected, result.Value, cmpCheckServiceNodeNames) req.QueryOptions.MinQueryIndex = result.Index }) - testutil.RunStep(t, "server reload is respected", func(t *testing.T) { + runStep(t, "server reload is respected", func(t *testing.T) { // Simulates the server noticing the request's ACL token privs changing. To // detect this we'll queue up the new snapshot as a different set of nodes // to the first. @@ -387,14 +348,14 @@ func testHealthView_IntegrationWithStore_WithFullSnapshot(t *testing.T, peerName "Fetch should have returned before the timeout") require.Equal(t, uint64(50), result.Index) - expected := newExpectedNodesInPeer(peerName, "node3", "node4", "node5") + expected := newExpectedNodes("node3", "node4", "node5") expected.Index = 50 prototest.AssertDeepEqual(t, expected, result.Value, cmpCheckServiceNodeNames) req.QueryOptions.MinQueryIndex = result.Index }) - testutil.RunStep(t, "reconnects and receives new snapshot when server state has changed", func(t *testing.T) { + runStep(t, "reconnects and receives new snapshot when server state has changed", func(t *testing.T) { client.QueueErr(tempError("temporary connection error")) client.QueueEvents( @@ -414,21 +375,18 @@ func testHealthView_IntegrationWithStore_WithFullSnapshot(t *testing.T, peerName "Fetch should have returned before the timeout") require.Equal(t, uint64(50), result.Index) - expected := newExpectedNodesInPeer(peerName, "node3", "node4", "node5") + expected := newExpectedNodes("node3", "node4", "node5") expected.Index = 50 prototest.AssertDeepEqual(t, expected, result.Value, cmpCheckServiceNodeNames) }) } -func newExpectedNodesInPeer(peerName string, nodes ...string) *structs.IndexedCheckServiceNodes { +func newExpectedNodes(nodes ...string) *structs.IndexedCheckServiceNodes { result := &structs.IndexedCheckServiceNodes{} result.QueryMeta.Backend = structs.QueryBackendStreaming for _, node := range nodes { result.Nodes = append(result.Nodes, structs.CheckServiceNode{ - Node: &structs.Node{ - Node: node, - PeerName: peerName, - }, + Node: &structs.Node{Node: node}, }) } return result @@ -443,16 +401,6 @@ var cmpCheckServiceNodeNames = cmp.Options{ } func TestHealthView_IntegrationWithStore_EventBatches(t *testing.T) { - t.Run("local data", func(t *testing.T) { - testHealthView_IntegrationWithStore_EventBatches(t, structs.DefaultPeerKeyword) - }) - - t.Run("peered data", func(t *testing.T) { - testHealthView_IntegrationWithStore_EventBatches(t, "my-peer") - }) -} - -func testHealthView_IntegrationWithStore_EventBatches(t *testing.T, peerName string) { namespace := getNamespace("ns3") client := newStreamClient(validateNamespace(namespace)) @@ -463,9 +411,9 @@ func testHealthView_IntegrationWithStore_EventBatches(t *testing.T, peerName str // Create an initial snapshot of 3 instances but in a single event batch batchEv := newEventBatchWithEvents( - newEventServiceHealthRegister(5, 1, "web", peerName), - newEventServiceHealthRegister(5, 2, "web", peerName), - newEventServiceHealthRegister(5, 3, "web", peerName)) + newEventServiceHealthRegister(5, 1, "web"), + newEventServiceHealthRegister(5, 2, "web"), + newEventServiceHealthRegister(5, 3, "web")) client.QueueEvents( batchEv, newEndOfSnapshotEvent(5)) @@ -473,7 +421,6 @@ func testHealthView_IntegrationWithStore_EventBatches(t *testing.T, peerName str req := serviceRequestStub{ serviceRequest: serviceRequest{ ServiceSpecificRequest: structs.ServiceSpecificRequest{ - PeerName: peerName, Datacenter: "dc1", ServiceName: "web", EnterpriseMeta: structs.NewEnterpriseMetaInDefaultPartition(namespace), @@ -483,26 +430,26 @@ func testHealthView_IntegrationWithStore_EventBatches(t *testing.T, peerName str streamClient: client, } - testutil.RunStep(t, "full snapshot returned", func(t *testing.T) { + runStep(t, "full snapshot returned", func(t *testing.T) { result, err := store.Get(ctx, req) require.NoError(t, err) require.Equal(t, uint64(5), result.Index) - expected := newExpectedNodesInPeer(peerName, "node1", "node2", "node3") + expected := newExpectedNodes("node1", "node2", "node3") expected.Index = 5 prototest.AssertDeepEqual(t, expected, result.Value, cmpCheckServiceNodeNames) req.QueryOptions.MinQueryIndex = result.Index }) - testutil.RunStep(t, "batched updates work too", func(t *testing.T) { + runStep(t, "batched updates work too", func(t *testing.T) { // Simulate multiple registrations happening in one Txn (so all have same // index) batchEv := newEventBatchWithEvents( // Deregister an existing node - newEventServiceHealthDeregister(20, 1, "web", peerName), + newEventServiceHealthDeregister(20, 1, "web"), // Register another - newEventServiceHealthRegister(20, 4, "web", peerName), + newEventServiceHealthRegister(20, 4, "web"), ) client.QueueEvents(batchEv) req.QueryOptions.MaxQueryTime = time.Second @@ -510,7 +457,7 @@ func testHealthView_IntegrationWithStore_EventBatches(t *testing.T, peerName str require.NoError(t, err) require.Equal(t, uint64(20), result.Index) - expected := newExpectedNodesInPeer(peerName, "node2", "node3", "node4") + expected := newExpectedNodes("node2", "node3", "node4") expected.Index = 20 prototest.AssertDeepEqual(t, expected, result.Value, cmpCheckServiceNodeNames) @@ -519,16 +466,6 @@ func testHealthView_IntegrationWithStore_EventBatches(t *testing.T, peerName str } func TestHealthView_IntegrationWithStore_Filtering(t *testing.T) { - t.Run("local data", func(t *testing.T) { - testHealthView_IntegrationWithStore_Filtering(t, structs.DefaultPeerKeyword) - }) - - t.Run("peered data", func(t *testing.T) { - testHealthView_IntegrationWithStore_Filtering(t, "my-peer") - }) -} - -func testHealthView_IntegrationWithStore_Filtering(t *testing.T, peerName string) { namespace := getNamespace("ns3") streamClient := newStreamClient(validateNamespace(namespace)) @@ -541,7 +478,6 @@ func testHealthView_IntegrationWithStore_Filtering(t *testing.T, peerName string req := serviceRequestStub{ serviceRequest: serviceRequest{ ServiceSpecificRequest: structs.ServiceSpecificRequest{ - PeerName: peerName, Datacenter: "dc1", ServiceName: "web", EnterpriseMeta: structs.NewEnterpriseMetaInDefaultPartition(namespace), @@ -556,39 +492,39 @@ func testHealthView_IntegrationWithStore_Filtering(t *testing.T, peerName string // Create an initial snapshot of 3 instances but in a single event batch batchEv := newEventBatchWithEvents( - newEventServiceHealthRegister(5, 1, "web", peerName), - newEventServiceHealthRegister(5, 2, "web", peerName), - newEventServiceHealthRegister(5, 3, "web", peerName)) + newEventServiceHealthRegister(5, 1, "web"), + newEventServiceHealthRegister(5, 2, "web"), + newEventServiceHealthRegister(5, 3, "web")) streamClient.QueueEvents( batchEv, newEndOfSnapshotEvent(5)) - testutil.RunStep(t, "filtered snapshot returned", func(t *testing.T) { + runStep(t, "filtered snapshot returned", func(t *testing.T) { result, err := store.Get(ctx, req) require.NoError(t, err) require.Equal(t, uint64(5), result.Index) - expected := newExpectedNodesInPeer(peerName, "node2") + expected := newExpectedNodes("node2") expected.Index = 5 prototest.AssertDeepEqual(t, expected, result.Value, cmpCheckServiceNodeNames) req.QueryOptions.MinQueryIndex = result.Index }) - testutil.RunStep(t, "filtered updates work too", func(t *testing.T) { + runStep(t, "filtered updates work too", func(t *testing.T) { // Simulate multiple registrations happening in one Txn (all have same index) batchEv := newEventBatchWithEvents( // Deregister an existing node - newEventServiceHealthDeregister(20, 1, "web", peerName), + newEventServiceHealthDeregister(20, 1, "web"), // Register another - newEventServiceHealthRegister(20, 4, "web", peerName), + newEventServiceHealthRegister(20, 4, "web"), ) streamClient.QueueEvents(batchEv) result, err := store.Get(ctx, req) require.NoError(t, err) require.Equal(t, uint64(20), result.Index) - expected := newExpectedNodesInPeer(peerName, "node2") + expected := newExpectedNodes("node2") expected.Index = 20 prototest.AssertDeepEqual(t, expected, result.Value, cmpCheckServiceNodeNames) }) @@ -601,20 +537,20 @@ type serviceRequestStub struct { streamClient submatview.StreamClient } -func (r serviceRequestStub) NewMaterializer() (submatview.Materializer, error) { +func (r serviceRequestStub) NewMaterializer() (*submatview.Materializer, error) { view, err := newHealthView(r.ServiceSpecificRequest) if err != nil { return nil, err } - deps := submatview.Deps{ + return submatview.NewMaterializer(submatview.Deps{ View: view, + Client: r.streamClient, Logger: hclog.New(nil), Request: newMaterializerRequest(r.ServiceSpecificRequest), - } - return submatview.NewRPCMaterializer(r.streamClient, deps), nil + }), nil } -func newEventServiceHealthRegister(index uint64, nodeNum int, svc string, peerName string) *pbsubscribe.Event { +func newEventServiceHealthRegister(index uint64, nodeNum int, svc string) *pbsubscribe.Event { node := fmt.Sprintf("node%d", nodeNum) nodeID := types.NodeID(fmt.Sprintf("11111111-2222-3333-4444-%012d", nodeNum)) addr := fmt.Sprintf("10.10.%d.%d", nodeNum/256, nodeNum%256) @@ -630,17 +566,15 @@ func newEventServiceHealthRegister(index uint64, nodeNum int, svc string, peerNa Node: node, Address: addr, Datacenter: "dc1", - PeerName: peerName, RaftIndex: &pbcommon.RaftIndex{ CreateIndex: index, ModifyIndex: index, }, }, Service: &pbservice.NodeService{ - ID: svc, - Service: svc, - PeerName: peerName, - Port: 8080, + ID: svc, + Service: svc, + Port: 8080, RaftIndex: &pbcommon.RaftIndex{ CreateIndex: index, ModifyIndex: index, @@ -652,7 +586,7 @@ func newEventServiceHealthRegister(index uint64, nodeNum int, svc string, peerNa } } -func newEventServiceHealthDeregister(index uint64, nodeNum int, svc string, peerName string) *pbsubscribe.Event { +func newEventServiceHealthDeregister(index uint64, nodeNum int, svc string) *pbsubscribe.Event { node := fmt.Sprintf("node%d", nodeNum) return &pbsubscribe.Event{ @@ -662,14 +596,12 @@ func newEventServiceHealthDeregister(index uint64, nodeNum int, svc string, peer Op: pbsubscribe.CatalogOp_Deregister, CheckServiceNode: &pbservice.CheckServiceNode{ Node: &pbservice.Node{ - Node: node, - PeerName: peerName, + Node: node, }, Service: &pbservice.NodeService{ - ID: svc, - Service: svc, - PeerName: peerName, - Port: 8080, + ID: svc, + Service: svc, + Port: 8080, Weights: &pbservice.Weights{ Passing: 1, Warning: 1, @@ -734,6 +666,13 @@ func validateNamespace(ns string) func(request *pbsubscribe.SubscribeRequest) er } } +func runStep(t *testing.T, name string, fn func(t *testing.T)) { + t.Helper() + if !t.Run(name, fn) { + t.FailNow() + } +} + func TestNewFilterEvaluator(t *testing.T) { type testCase struct { name string diff --git a/agent/service_manager.go b/agent/service_manager.go index f9f449874b8ba..29c538e88ee7e 100644 --- a/agent/service_manager.go +++ b/agent/service_manager.go @@ -4,11 +4,12 @@ import ( "fmt" "sync" + "github.com/imdario/mergo" + "github.com/mitchellh/copystructure" "golang.org/x/net/context" "github.com/hashicorp/consul/agent/cache" cachetype "github.com/hashicorp/consul/agent/cache-types" - "github.com/hashicorp/consul/agent/consul" "github.com/hashicorp/consul/agent/structs" ) @@ -145,7 +146,7 @@ func (w *serviceConfigWatch) register(ctx context.Context) error { // Merge the local registration with the central defaults and update this service // in the local state. - merged, err := consul.MergeServiceConfig(serviceDefaults, w.registration.Service) + merged, err := mergeServiceConfig(serviceDefaults, w.registration.Service) if err != nil { return err } @@ -275,7 +276,7 @@ func (w *serviceConfigWatch) handleUpdate(ctx context.Context, event cache.Updat // Merge the local registration with the central defaults and update this service // in the local state. - merged, err := consul.MergeServiceConfig(serviceDefaults, w.registration.Service) + merged, err := mergeServiceConfig(serviceDefaults, w.registration.Service) if err != nil { return err } @@ -347,3 +348,114 @@ func makeConfigRequest(bd BaseDeps, addReq AddServiceRequest) *structs.ServiceCo } return req } + +// mergeServiceConfig from service into defaults to produce the final effective +// config for the watched service. +func mergeServiceConfig(defaults *structs.ServiceConfigResponse, service *structs.NodeService) (*structs.NodeService, error) { + if defaults == nil { + return service, nil + } + + // We don't want to change s.registration in place since it is our source of + // truth about what was actually registered before defaults applied. So copy + // it first. + nsRaw, err := copystructure.Copy(service) + if err != nil { + return nil, err + } + + // Merge proxy defaults + ns := nsRaw.(*structs.NodeService) + + if err := mergo.Merge(&ns.Proxy.Config, defaults.ProxyConfig); err != nil { + return nil, err + } + if err := mergo.Merge(&ns.Proxy.Expose, defaults.Expose); err != nil { + return nil, err + } + + if ns.Proxy.MeshGateway.Mode == structs.MeshGatewayModeDefault { + ns.Proxy.MeshGateway.Mode = defaults.MeshGateway.Mode + } + if ns.Proxy.Mode == structs.ProxyModeDefault { + ns.Proxy.Mode = defaults.Mode + } + if ns.Proxy.TransparentProxy.OutboundListenerPort == 0 { + ns.Proxy.TransparentProxy.OutboundListenerPort = defaults.TransparentProxy.OutboundListenerPort + } + if !ns.Proxy.TransparentProxy.DialedDirectly { + ns.Proxy.TransparentProxy.DialedDirectly = defaults.TransparentProxy.DialedDirectly + } + + // remoteUpstreams contains synthetic Upstreams generated from central config (service-defaults.UpstreamConfigs). + remoteUpstreams := make(map[structs.ServiceID]structs.Upstream) + + for _, us := range defaults.UpstreamIDConfigs { + parsed, err := structs.ParseUpstreamConfigNoDefaults(us.Config) + if err != nil { + return nil, fmt.Errorf("failed to parse upstream config map for %s: %v", us.Upstream.String(), err) + } + + remoteUpstreams[us.Upstream] = structs.Upstream{ + DestinationNamespace: us.Upstream.NamespaceOrDefault(), + DestinationPartition: us.Upstream.PartitionOrDefault(), + DestinationName: us.Upstream.ID, + Config: us.Config, + MeshGateway: parsed.MeshGateway, + CentrallyConfigured: true, + } + } + + // localUpstreams stores the upstreams seen from the local registration so that we can merge in the synthetic entries. + // In transparent proxy mode ns.Proxy.Upstreams will likely be empty because users do not need to define upstreams explicitly. + // So to store upstream-specific flags from central config, we add entries to ns.Proxy.Upstream with those values. + localUpstreams := make(map[structs.ServiceID]struct{}) + + // Merge upstream defaults into the local registration + for i := range ns.Proxy.Upstreams { + // Get a pointer not a value copy of the upstream struct + us := &ns.Proxy.Upstreams[i] + if us.DestinationType != "" && us.DestinationType != structs.UpstreamDestTypeService { + continue + } + localUpstreams[us.DestinationID()] = struct{}{} + + remoteCfg, ok := remoteUpstreams[us.DestinationID()] + if !ok { + // No config defaults to merge + continue + } + + // The local upstream config mode has the highest precedence, so only overwrite when it's set to the default + if us.MeshGateway.Mode == structs.MeshGatewayModeDefault { + us.MeshGateway.Mode = remoteCfg.MeshGateway.Mode + } + + // Merge in everything else that is read from the map + if err := mergo.Merge(&us.Config, remoteCfg.Config); err != nil { + return nil, err + } + + // Delete the mesh gateway key from opaque config since this is the value that was resolved from + // the servers and NOT the final merged value for this upstream. + // Note that we use the "mesh_gateway" key and not other variants like "MeshGateway" because + // UpstreamConfig.MergeInto and ResolveServiceConfig only use "mesh_gateway". + delete(us.Config, "mesh_gateway") + } + + // Ensure upstreams present in central config are represented in the local configuration. + // This does not apply outside of transparent mode because in that situation every possible upstream already exists + // inside of ns.Proxy.Upstreams. + if ns.Proxy.Mode == structs.ProxyModeTransparent { + for id, remote := range remoteUpstreams { + if _, ok := localUpstreams[id]; ok { + // Remote upstream is already present locally + continue + } + + ns.Proxy.Upstreams = append(ns.Proxy.Upstreams, remote) + } + } + + return ns, err +} diff --git a/agent/service_manager_test.go b/agent/service_manager_test.go index cbbd9e5e9deca..b215977737507 100644 --- a/agent/service_manager_test.go +++ b/agent/service_manager_test.go @@ -8,6 +8,9 @@ import ( "path/filepath" "testing" + "github.com/mitchellh/copystructure" + + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/hashicorp/consul/agent/structs" @@ -857,3 +860,451 @@ func convertToMap(v interface{}) (map[string]interface{}, error) { return raw, nil } + +func Test_mergeServiceConfig_UpstreamOverrides(t *testing.T) { + type args struct { + defaults *structs.ServiceConfigResponse + service *structs.NodeService + } + tests := []struct { + name string + args args + want *structs.NodeService + }{ + { + name: "new config fields", + args: args{ + defaults: &structs.ServiceConfigResponse{ + UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ + { + Upstream: structs.ServiceID{ + ID: "zap", + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + Config: map[string]interface{}{ + "passive_health_check": map[string]interface{}{ + "Interval": int64(10), + "MaxFailures": int64(2), + }, + "mesh_gateway": map[string]interface{}{ + "Mode": "local", + }, + "protocol": "grpc", + }, + }, + }, + }, + service: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zap", + }, + }, + }, + }, + }, + want: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zap", + Config: map[string]interface{}{ + "passive_health_check": map[string]interface{}{ + "Interval": int64(10), + "MaxFailures": int64(2), + }, + "protocol": "grpc", + }, + MeshGateway: structs.MeshGatewayConfig{ + Mode: structs.MeshGatewayModeLocal, + }, + }, + }, + }, + }, + }, + { + name: "remote upstream config expands local upstream list in transparent mode", + args: args{ + defaults: &structs.ServiceConfigResponse{ + UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ + { + Upstream: structs.ServiceID{ + ID: "zap", + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + Config: map[string]interface{}{ + "protocol": "grpc", + }, + }, + }, + }, + service: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Mode: structs.ProxyModeTransparent, + TransparentProxy: structs.TransparentProxyConfig{ + OutboundListenerPort: 10101, + DialedDirectly: true, + }, + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zip", + LocalBindPort: 8080, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + }, + }, + }, + }, + want: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Mode: structs.ProxyModeTransparent, + TransparentProxy: structs.TransparentProxyConfig{ + OutboundListenerPort: 10101, + DialedDirectly: true, + }, + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zip", + LocalBindPort: 8080, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zap", + Config: map[string]interface{}{ + "protocol": "grpc", + }, + CentrallyConfigured: true, + }, + }, + }, + }, + }, + { + name: "remote upstream config not added to local upstream list outside of transparent mode", + args: args{ + defaults: &structs.ServiceConfigResponse{ + UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ + { + Upstream: structs.ServiceID{ + ID: "zap", + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + Config: map[string]interface{}{ + "protocol": "grpc", + }, + }, + }, + }, + service: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Mode: structs.ProxyModeDirect, + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zip", + LocalBindPort: 8080, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + }, + }, + }, + }, + want: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Mode: structs.ProxyModeDirect, + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zip", + LocalBindPort: 8080, + Config: map[string]interface{}{ + "protocol": "http", + }, + }, + }, + }, + }, + }, + { + name: "upstream mode from remote defaults overrides local default", + args: args{ + defaults: &structs.ServiceConfigResponse{ + UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ + { + Upstream: structs.ServiceID{ + ID: "zap", + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + Config: map[string]interface{}{ + "mesh_gateway": map[string]interface{}{ + "Mode": "local", + }, + }, + }, + }, + }, + service: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + MeshGateway: structs.MeshGatewayConfig{ + Mode: structs.MeshGatewayModeRemote, + }, + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zap", + }, + }, + }, + }, + }, + want: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + MeshGateway: structs.MeshGatewayConfig{ + Mode: structs.MeshGatewayModeRemote, + }, + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zap", + Config: map[string]interface{}{}, + MeshGateway: structs.MeshGatewayConfig{ + Mode: structs.MeshGatewayModeLocal, + }, + }, + }, + }, + }, + }, + { + name: "mode in local upstream config overrides all", + args: args{ + defaults: &structs.ServiceConfigResponse{ + UpstreamIDConfigs: structs.OpaqueUpstreamConfigs{ + { + Upstream: structs.ServiceID{ + ID: "zap", + EnterpriseMeta: *structs.DefaultEnterpriseMetaInDefaultPartition(), + }, + Config: map[string]interface{}{ + "mesh_gateway": map[string]interface{}{ + "Mode": "local", + }, + }, + }, + }, + }, + service: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + MeshGateway: structs.MeshGatewayConfig{ + Mode: structs.MeshGatewayModeRemote, + }, + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zap", + MeshGateway: structs.MeshGatewayConfig{ + Mode: structs.MeshGatewayModeNone, + }, + }, + }, + }, + }, + }, + want: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + MeshGateway: structs.MeshGatewayConfig{ + Mode: structs.MeshGatewayModeRemote, + }, + Upstreams: structs.Upstreams{ + structs.Upstream{ + DestinationNamespace: "default", + DestinationPartition: "default", + DestinationName: "zap", + Config: map[string]interface{}{}, + MeshGateway: structs.MeshGatewayConfig{ + Mode: structs.MeshGatewayModeNone, + }, + }, + }, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + defaultsCopy, err := copystructure.Copy(tt.args.defaults) + require.NoError(t, err) + + got, err := mergeServiceConfig(tt.args.defaults, tt.args.service) + require.NoError(t, err) + assert.Equal(t, tt.want, got) + + // The input defaults must not be modified by the merge. + // See PR #10647 + assert.Equal(t, tt.args.defaults, defaultsCopy) + }) + } +} + +func Test_mergeServiceConfig_TransparentProxy(t *testing.T) { + type args struct { + defaults *structs.ServiceConfigResponse + service *structs.NodeService + } + tests := []struct { + name string + args args + want *structs.NodeService + }{ + { + name: "inherit transparent proxy settings", + args: args{ + defaults: &structs.ServiceConfigResponse{ + Mode: structs.ProxyModeTransparent, + TransparentProxy: structs.TransparentProxyConfig{ + OutboundListenerPort: 10101, + DialedDirectly: true, + }, + }, + service: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Mode: structs.ProxyModeDefault, + TransparentProxy: structs.TransparentProxyConfig{}, + }, + }, + }, + want: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Mode: structs.ProxyModeTransparent, + TransparentProxy: structs.TransparentProxyConfig{ + OutboundListenerPort: 10101, + DialedDirectly: true, + }, + }, + }, + }, + { + name: "override transparent proxy settings", + args: args{ + defaults: &structs.ServiceConfigResponse{ + Mode: structs.ProxyModeTransparent, + TransparentProxy: structs.TransparentProxyConfig{ + OutboundListenerPort: 10101, + DialedDirectly: false, + }, + }, + service: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Mode: structs.ProxyModeDirect, + TransparentProxy: structs.TransparentProxyConfig{ + OutboundListenerPort: 808, + DialedDirectly: true, + }, + }, + }, + }, + want: &structs.NodeService{ + ID: "foo-proxy", + Service: "foo-proxy", + Proxy: structs.ConnectProxyConfig{ + DestinationServiceName: "foo", + DestinationServiceID: "foo", + Mode: structs.ProxyModeDirect, + TransparentProxy: structs.TransparentProxyConfig{ + OutboundListenerPort: 808, + DialedDirectly: true, + }, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + defaultsCopy, err := copystructure.Copy(tt.args.defaults) + require.NoError(t, err) + + got, err := mergeServiceConfig(tt.args.defaults, tt.args.service) + require.NoError(t, err) + assert.Equal(t, tt.want, got) + + // The input defaults must not be modified by the merge. + // See PR #10647 + assert.Equal(t, tt.args.defaults, defaultsCopy) + }) + } +} diff --git a/agent/session_endpoint.go b/agent/session_endpoint.go index d1b6dd7cf1574..397d4b717bea9 100644 --- a/agent/session_endpoint.go +++ b/agent/session_endpoint.go @@ -41,7 +41,7 @@ func (s *HTTPHandlers) SessionCreate(resp http.ResponseWriter, req *http.Request // Handle optional request body if req.ContentLength > 0 { if err := s.rewordUnknownEnterpriseFieldError(lib.DecodeJSON(req.Body, &args.Session)); err != nil { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Request decode failed: %v", err)} + return nil, BadRequestError{Reason: fmt.Sprintf("Request decode failed: %v", err)} } } @@ -72,7 +72,7 @@ func (s *HTTPHandlers) SessionDestroy(resp http.ResponseWriter, req *http.Reques // Pull out the session id args.Session.ID = strings.TrimPrefix(req.URL.Path, "/v1/session/destroy/") if args.Session.ID == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing session"} + return nil, BadRequestError{Reason: "Missing session"} } var out string @@ -96,14 +96,14 @@ func (s *HTTPHandlers) SessionRenew(resp http.ResponseWriter, req *http.Request) args.SessionID = strings.TrimPrefix(req.URL.Path, "/v1/session/renew/") args.Session = args.SessionID if args.SessionID == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing session"} + return nil, BadRequestError{Reason: "Missing session"} } var out structs.IndexedSessions if err := s.agent.RPC("Session.Renew", &args, &out); err != nil { return nil, err } else if out.Sessions == nil { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: fmt.Sprintf("Session id '%s' not found", args.SessionID)} + return nil, NotFoundError{Reason: fmt.Sprintf("Session id '%s' not found", args.SessionID)} } return out.Sessions, nil @@ -123,7 +123,7 @@ func (s *HTTPHandlers) SessionGet(resp http.ResponseWriter, req *http.Request) ( args.SessionID = strings.TrimPrefix(req.URL.Path, "/v1/session/info/") args.Session = args.SessionID if args.SessionID == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing session"} + return nil, BadRequestError{Reason: "Missing session"} } var out structs.IndexedSessions @@ -175,7 +175,7 @@ func (s *HTTPHandlers) SessionsForNode(resp http.ResponseWriter, req *http.Reque // Pull out the node name args.Node = strings.TrimPrefix(req.URL.Path, "/v1/session/node/") if args.Node == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing node name"} + return nil, BadRequestError{Reason: "Missing node name"} } var out structs.IndexedSessions diff --git a/agent/structs/acl.go b/agent/structs/acl.go index 82d19b8acafc9..f516e0a6d6e4e 100644 --- a/agent/structs/acl.go +++ b/agent/structs/acl.go @@ -169,34 +169,6 @@ func (s *ACLServiceIdentity) SyntheticPolicy(entMeta *acl.EnterpriseMeta) *ACLPo return policy } -type ACLServiceIdentities []*ACLServiceIdentity - -// Deduplicate returns a new list of service identities without duplicates. -// Identities with the same ServiceName but different datacenters will be -// merged into a single identity with all datacenters. -func (ids ACLServiceIdentities) Deduplicate() ACLServiceIdentities { - unique := make(map[string]*ACLServiceIdentity) - - for _, id := range ids { - entry, ok := unique[id.ServiceName] - if ok { - dcs := stringslice.CloneStringSlice(id.Datacenters) - sort.Strings(dcs) - entry.Datacenters = stringslice.MergeSorted(dcs, entry.Datacenters) - } else { - entry = id.Clone() - sort.Strings(entry.Datacenters) - unique[id.ServiceName] = entry - } - } - - results := make(ACLServiceIdentities, 0, len(unique)) - for _, id := range unique { - results = append(results, id) - } - return results -} - // ACLNodeIdentity represents a high-level grant of all privileges // necessary to assume the identity of that node and manage it. type ACLNodeIdentity struct { @@ -241,27 +213,6 @@ func (s *ACLNodeIdentity) SyntheticPolicy(entMeta *acl.EnterpriseMeta) *ACLPolic return policy } -type ACLNodeIdentities []*ACLNodeIdentity - -// Deduplicate returns a new list of node identities without duplicates. -func (ids ACLNodeIdentities) Deduplicate() ACLNodeIdentities { - type mapKey struct { - nodeName, datacenter string - } - seen := make(map[mapKey]struct{}) - - var results ACLNodeIdentities - for _, id := range ids { - key := mapKey{id.NodeName, id.Datacenter} - if _, ok := seen[key]; ok { - continue - } - results = append(results, id.Clone()) - seen[key] = struct{}{} - } - return results -} - type ACLToken struct { // This is the UUID used for tracking and management purposes AccessorID string @@ -283,10 +234,10 @@ type ACLToken struct { Roles []ACLTokenRoleLink `json:",omitempty"` // List of services to generate synthetic policies for. - ServiceIdentities ACLServiceIdentities `json:",omitempty"` + ServiceIdentities []*ACLServiceIdentity `json:",omitempty"` // The node identities that this token should be allowed to manage. - NodeIdentities ACLNodeIdentities `json:",omitempty"` + NodeIdentities []*ACLNodeIdentity `json:",omitempty"` // Type is the V1 Token Type // DEPRECATED (ACL-Legacy-Compat) - remove once we no longer support v1 ACL compat @@ -546,10 +497,10 @@ type ACLTokenListStub struct { AccessorID string SecretID string Description string - Policies []ACLTokenPolicyLink `json:",omitempty"` - Roles []ACLTokenRoleLink `json:",omitempty"` - ServiceIdentities ACLServiceIdentities `json:",omitempty"` - NodeIdentities ACLNodeIdentities `json:",omitempty"` + Policies []ACLTokenPolicyLink `json:",omitempty"` + Roles []ACLTokenRoleLink `json:",omitempty"` + ServiceIdentities []*ACLServiceIdentity `json:",omitempty"` + NodeIdentities []*ACLNodeIdentity `json:",omitempty"` Local bool AuthMethod string `json:",omitempty"` ExpirationTime *time.Time `json:",omitempty"` @@ -857,10 +808,10 @@ type ACLRole struct { Policies []ACLRolePolicyLink `json:",omitempty"` // List of services to generate synthetic policies for. - ServiceIdentities ACLServiceIdentities `json:",omitempty"` + ServiceIdentities []*ACLServiceIdentity `json:",omitempty"` // List of nodes to generate synthetic policies for. - NodeIdentities ACLNodeIdentities `json:",omitempty"` + NodeIdentities []*ACLNodeIdentity `json:",omitempty"` // Hash of the contents of the role // This does not take into account the ID (which is immutable) diff --git a/agent/structs/acl_cache.go b/agent/structs/acl_cache.go index 65e20a1f4fe9b..dd996242cd787 100644 --- a/agent/structs/acl_cache.go +++ b/agent/structs/acl_cache.go @@ -134,12 +134,6 @@ func (c *ACLCaches) GetIdentity(id string) *IdentityCacheEntry { return nil } -// GetIdentityWithSecretToken fetches the identity with the given secret token -// from the cache. -func (c *ACLCaches) GetIdentityWithSecretToken(secretToken string) *IdentityCacheEntry { - return c.GetIdentity(cacheIDSecretToken(secretToken)) -} - // GetPolicy fetches a policy from the cache and returns it func (c *ACLCaches) GetPolicy(policyID string) *PolicyCacheEntry { if c == nil || c.policies == nil { @@ -201,22 +195,6 @@ func (c *ACLCaches) PutIdentity(id string, ident ACLIdentity) { c.identities.Add(id, &IdentityCacheEntry{Identity: ident, CacheTime: time.Now()}) } -// PutIdentityWithSecretToken adds a new identity to the cache, keyed by the -// given secret token (with a prefix to prevent collisions). -func (c *ACLCaches) PutIdentityWithSecretToken(secretToken string, identity ACLIdentity) { - c.PutIdentity(cacheIDSecretToken(secretToken), identity) -} - -// RemoveIdentityWithSecretToken removes the identity from the cache with the -// given secret token. -func (c *ACLCaches) RemoveIdentityWithSecretToken(secretToken string) { - if c == nil || c.identities == nil { - return - } - - c.identities.Remove(cacheIDSecretToken(secretToken)) -} - func (c *ACLCaches) PutPolicy(policyId string, policy *ACLPolicy) { if c == nil || c.policies == nil { return @@ -286,7 +264,3 @@ func (c *ACLCaches) Purge() { } } } - -func cacheIDSecretToken(token string) string { - return "token-secret:" + token -} diff --git a/agent/structs/acl_cache_test.go b/agent/structs/acl_cache_test.go index e0a057d36326e..9a5ba3707fcf6 100644 --- a/agent/structs/acl_cache_test.go +++ b/agent/structs/acl_cache_test.go @@ -51,14 +51,6 @@ func TestStructs_ACLCaches(t *testing.T) { entry := cache.GetIdentity("foo") require.NotNil(t, entry) require.NotNil(t, entry.Identity) - - cache.PutIdentityWithSecretToken("secret", &ACLToken{}) - entry = cache.GetIdentityWithSecretToken("secret") - require.NotNil(t, entry) - require.NotNil(t, entry.Identity) - cache.RemoveIdentityWithSecretToken("secret") - entry = cache.GetIdentityWithSecretToken("secret") - require.Nil(t, entry) }) t.Run("Policies", func(t *testing.T) { diff --git a/agent/structs/acl_test.go b/agent/structs/acl_test.go index e0aae4c0ae54c..65afc6bf19bc7 100644 --- a/agent/structs/acl_test.go +++ b/agent/structs/acl_test.go @@ -85,36 +85,6 @@ func TestStructs_ACLServiceIdentity_SyntheticPolicy(t *testing.T) { } } -func TestStructs_ACLServiceIdentities_Deduplicate(t *testing.T) { - identities := ACLServiceIdentities{ - {ServiceName: "web", Datacenters: []string{"dc1"}}, - {ServiceName: "web", Datacenters: []string{"dc2"}}, - {ServiceName: "db", Datacenters: []string{"dc3"}}, - } - - require.ElementsMatch(t, ACLServiceIdentities{ - {ServiceName: "web", Datacenters: []string{"dc1", "dc2"}}, - {ServiceName: "db", Datacenters: []string{"dc3"}}, - }, identities.Deduplicate()) - - require.Len(t, identities, 3, "original slice shouldn't have been mutated") -} - -func TestStructs_ACLNodeIdentities_Deduplicate(t *testing.T) { - identities := ACLNodeIdentities{ - {NodeName: "web", Datacenter: "dc1"}, - {NodeName: "web", Datacenter: "dc2"}, - {NodeName: "web", Datacenter: "dc1"}, - } - - require.Equal(t, ACLNodeIdentities{ - {NodeName: "web", Datacenter: "dc1"}, - {NodeName: "web", Datacenter: "dc2"}, - }, identities.Deduplicate()) - - require.Len(t, identities, 3, "original slice shouldn't have been mutated") -} - func TestStructs_ACLToken_SetHash(t *testing.T) { token := ACLToken{ diff --git a/agent/structs/config_entry.go b/agent/structs/config_entry.go index 5382da3af81ac..fabb5dae91ac3 100644 --- a/agent/structs/config_entry.go +++ b/agent/structs/config_entry.go @@ -1,9 +1,7 @@ package structs import ( - "errors" "fmt" - "net" "strconv" "strings" "time" @@ -96,17 +94,15 @@ type WarningConfigEntry interface { // ServiceConfiguration is the top-level struct for the configuration of a service // across the entire cluster. type ServiceConfigEntry struct { - Kind string - Name string - Protocol string - Mode ProxyMode `json:",omitempty"` - TransparentProxy TransparentProxyConfig `json:",omitempty" alias:"transparent_proxy"` - MeshGateway MeshGatewayConfig `json:",omitempty" alias:"mesh_gateway"` - Expose ExposeConfig `json:",omitempty"` - ExternalSNI string `json:",omitempty" alias:"external_sni"` - UpstreamConfig *UpstreamConfiguration `json:",omitempty" alias:"upstream_config"` - Destination *DestinationConfig `json:",omitempty"` - MaxInboundConnections int `json:",omitempty" alias:"max_inbound_connections"` + Kind string + Name string + Protocol string + Mode ProxyMode `json:",omitempty"` + TransparentProxy TransparentProxyConfig `json:",omitempty" alias:"transparent_proxy"` + MeshGateway MeshGatewayConfig `json:",omitempty" alias:"mesh_gateway"` + Expose ExposeConfig `json:",omitempty"` + ExternalSNI string `json:",omitempty" alias:"external_sni"` + UpstreamConfig *UpstreamConfiguration `json:",omitempty" alias:"upstream_config"` Meta map[string]string `json:",omitempty"` acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` @@ -179,12 +175,6 @@ func (e *ServiceConfigEntry) Validate() error { validationErr := validateConfigEntryMeta(e.Meta) - // External endpoints are invalid with an existing service's upstream configuration - if e.UpstreamConfig != nil && e.Destination != nil { - validationErr = multierror.Append(validationErr, errors.New("UpstreamConfig and Destination are mutually exclusive for service defaults")) - return validationErr - } - if e.UpstreamConfig != nil { for _, override := range e.UpstreamConfig.Overrides { err := override.ValidateWithName() @@ -200,38 +190,9 @@ func (e *ServiceConfigEntry) Validate() error { } } - if e.Destination != nil { - if err := validateEndpointAddress(e.Destination.Address); err != nil { - validationErr = multierror.Append(validationErr, fmt.Errorf("Destination address is invalid %w", err)) - } - - if e.Destination.Port < 1 || e.Destination.Port > 65535 { - validationErr = multierror.Append(validationErr, fmt.Errorf("Invalid Port number %d", e.Destination.Port)) - } - } - return validationErr } -func validateEndpointAddress(address string) error { - var valid bool - - ip := net.ParseIP(address) - valid = ip != nil - - _, _, err := net.ParseCIDR(address) - valid = valid || err == nil - - // Since we don't know if this will be a TLS connection, setting tlsEnabled to false will be more permissive with wildcards - err = validateHost(false, address) - valid = valid || err == nil - - if !valid { - return fmt.Errorf("Could not validate address %s as an IP, CIDR block or Hostname", address) - } - return nil -} - func (e *ServiceConfigEntry) CanRead(authz acl.Authorizer) error { var authzContext acl.AuthorizerContext e.FillAuthzContext(&authzContext) @@ -292,15 +253,6 @@ func (c *UpstreamConfiguration) Clone() *UpstreamConfiguration { return &c2 } -// DestinationConfig represents a virtual service, i.e. one that is external to Consul -type DestinationConfig struct { - // Address of the endpoint; hostname, IP, or CIDR - Address string `json:",omitempty"` - - // Port allowed within this endpoint - Port int `json:",omitempty"` -} - // ProxyConfigEntry is the top-level struct for global proxy configuration defaults. type ProxyConfigEntry struct { Kind string diff --git a/agent/structs/config_entry_export_oss_test.go b/agent/structs/config_entry_export_oss_test.go deleted file mode 100644 index 4015f5d714b4c..0000000000000 --- a/agent/structs/config_entry_export_oss_test.go +++ /dev/null @@ -1,62 +0,0 @@ -//go:build !consulent -// +build !consulent - -package structs - -import ( - "testing" -) - -func TestExportedServicesConfigEntry_OSS(t *testing.T) { - cases := map[string]configEntryTestcase{ - "normalize: noop in oss": { - entry: &ExportedServicesConfigEntry{ - Name: "default", - Services: []ExportedService{ - { - Name: "web", - Consumers: []ServiceConsumer{ - { - PeerName: "bar", - }, - }, - }, - }, - }, - expected: &ExportedServicesConfigEntry{ - Name: "default", - Services: []ExportedService{ - { - Name: "web", - Namespace: "", - Consumers: []ServiceConsumer{ - { - PeerName: "bar", - }, - }, - }, - }, - }, - }, - "validate: empty name": { - entry: &ExportedServicesConfigEntry{ - Name: "", - }, - validateErr: `exported-services Name must be "default"`, - }, - "validate: wildcard name": { - entry: &ExportedServicesConfigEntry{ - Name: WildcardSpecifier, - }, - validateErr: `exported-services Name must be "default"`, - }, - "validate: other name": { - entry: &ExportedServicesConfigEntry{ - Name: "foo", - }, - validateErr: `exported-services Name must be "default"`, - }, - } - - testConfigEntryNormalizeAndValidate(t, cases) -} diff --git a/agent/structs/config_entry_exports.go b/agent/structs/config_entry_exports.go index c3051fc371b9a..8a184cc396884 100644 --- a/agent/structs/config_entry_exports.go +++ b/agent/structs/config_entry_exports.go @@ -14,7 +14,7 @@ type ExportedServicesConfigEntry struct { // Services is a list of services to be exported and the list of partitions // to expose them to. - Services []ExportedService `json:",omitempty"` + Services []ExportedService Meta map[string]string `json:",omitempty"` acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` @@ -31,18 +31,13 @@ type ExportedService struct { Namespace string `json:",omitempty"` // Consumers is a list of downstream consumers of the service to be exported. - Consumers []ServiceConsumer `json:",omitempty"` + Consumers []ServiceConsumer } // ServiceConsumer represents a downstream consumer of the service to be exported. -// At most one of Partition or PeerName must be specified. type ServiceConsumer struct { // Partition is the admin partition to export the service to. - // Deprecated: PeerName should be used for both remote peers and local partitions. - Partition string `json:",omitempty"` - - // PeerName is the name of the peer to export the service to. - PeerName string `json:",omitempty" alias:"peer_name"` + Partition string } func (e *ExportedServicesConfigEntry) ToMap() map[string]map[string][]string { @@ -104,40 +99,37 @@ func (e *ExportedServicesConfigEntry) Normalize() error { e.EnterpriseMeta.Normalize() for i := range e.Services { - e.Services[i].Namespace = acl.NormalizeNamespace(e.Services[i].Namespace) + e.Services[i].Namespace = acl.NamespaceOrDefault(e.Services[i].Namespace) } return nil } func (e *ExportedServicesConfigEntry) Validate() error { - if err := validateExportedServicesName(e.Name); err != nil { - return err + if e.Name == "" { + return fmt.Errorf("Name is required") + } + if e.Name == WildcardSpecifier { + return fmt.Errorf("exported-services Name must be the name of a partition, and not a wildcard") } + if err := requireEnterprise(e.GetKind()); err != nil { + return err + } if err := validateConfigEntryMeta(e.Meta); err != nil { return err } - for i, svc := range e.Services { + for _, svc := range e.Services { if svc.Name == "" { - return fmt.Errorf("Services[%d]: service name cannot be empty", i) - } - if svc.Namespace == WildcardSpecifier && svc.Name != WildcardSpecifier { - return fmt.Errorf("Services[%d]: service name must be wildcard if namespace is wildcard", i) + return fmt.Errorf("service name cannot be empty") } if len(svc.Consumers) == 0 { - return fmt.Errorf("Services[%d]: must have at least one consumer", i) + return fmt.Errorf("service %q must have at least one consumer", svc.Name) } - for j, consumer := range svc.Consumers { - if consumer.PeerName != "" && consumer.Partition != "" { - return fmt.Errorf("Services[%d].Consumers[%d]: must define at most one of PeerName or Partition", i, j) - } + for _, consumer := range svc.Consumers { if consumer.Partition == WildcardSpecifier { - return fmt.Errorf("Services[%d].Consumers[%d]: exporting to all partitions (wildcard) is not supported", i, j) - } - if consumer.PeerName == WildcardSpecifier { - return fmt.Errorf("Services[%d].Consumers[%d]: exporting to all peers (wildcard) is not supported", i, j) + return fmt.Errorf("exporting to all partitions (wildcard) is not yet supported") } } } diff --git a/agent/structs/config_entry_exports_test.go b/agent/structs/config_entry_exports_test.go deleted file mode 100644 index db0aadb91a276..0000000000000 --- a/agent/structs/config_entry_exports_test.go +++ /dev/null @@ -1,94 +0,0 @@ -package structs - -import ( - "testing" -) - -func TestExportedServicesConfigEntry(t *testing.T) { - cases := map[string]configEntryTestcase{ - "validate: empty service name": { - entry: &ExportedServicesConfigEntry{ - Name: "default", - Services: []ExportedService{ - { - Name: "", - }, - }, - }, - validateErr: `service name cannot be empty`, - }, - "validate: empty consumer list": { - entry: &ExportedServicesConfigEntry{ - Name: "default", - Services: []ExportedService{ - { - Name: "web", - }, - }, - }, - validateErr: `must have at least one consumer`, - }, - "validate: no wildcard in consumer partition": { - entry: &ExportedServicesConfigEntry{ - Name: "default", - Services: []ExportedService{ - { - Name: "api", - Consumers: []ServiceConsumer{ - { - Partition: "foo", - }, - }, - }, - { - Name: "web", - Consumers: []ServiceConsumer{ - { - Partition: "*", - }, - }, - }, - }, - }, - validateErr: `Services[1].Consumers[0]: exporting to all partitions (wildcard) is not supported`, - }, - "validate: no wildcard in consumer peername": { - entry: &ExportedServicesConfigEntry{ - Name: "default", - Services: []ExportedService{ - { - Name: "web", - Consumers: []ServiceConsumer{ - { - PeerName: "foo", - }, - { - PeerName: "*", - }, - }, - }, - }, - }, - validateErr: `Services[0].Consumers[1]: exporting to all peers (wildcard) is not supported`, - }, - "validate: cannot specify consumer with partition and peername": { - entry: &ExportedServicesConfigEntry{ - Name: "default", - Services: []ExportedService{ - { - Name: "web", - Consumers: []ServiceConsumer{ - { - Partition: "foo", - PeerName: "bar", - }, - }, - }, - }, - }, - validateErr: `Services[0].Consumers[0]: must define at most one of PeerName or Partition`, - }, - } - - testConfigEntryNormalizeAndValidate(t, cases) -} diff --git a/agent/structs/config_entry_gateways.go b/agent/structs/config_entry_gateways.go index c0abcd59db128..0f89170989989 100644 --- a/agent/structs/config_entry_gateways.go +++ b/agent/structs/config_entry_gateways.go @@ -586,28 +586,19 @@ func (e *TerminatingGatewayConfigEntry) Warnings() []string { return warnings } -type GatewayServiceKind string - -const ( - GatewayServiceKindUnknown GatewayServiceKind = "" - GatewayServiceKindDestination GatewayServiceKind = "destination" - GatewayServiceKindService GatewayServiceKind = "service" -) - // GatewayService is used to associate gateways with their linked services. type GatewayService struct { Gateway ServiceName Service ServiceName GatewayKind ServiceKind - Port int `json:",omitempty"` - Protocol string `json:",omitempty"` - Hosts []string `json:",omitempty"` - CAFile string `json:",omitempty"` - CertFile string `json:",omitempty"` - KeyFile string `json:",omitempty"` - SNI string `json:",omitempty"` - FromWildcard bool `json:",omitempty"` - ServiceKind GatewayServiceKind `json:",omitempty"` + Port int `json:",omitempty"` + Protocol string `json:",omitempty"` + Hosts []string `json:",omitempty"` + CAFile string `json:",omitempty"` + CertFile string `json:",omitempty"` + KeyFile string `json:",omitempty"` + SNI string `json:",omitempty"` + FromWildcard bool `json:",omitempty"` RaftIndex } @@ -644,7 +635,6 @@ func (g *GatewayService) IsSame(o *GatewayService) bool { g.CertFile == o.CertFile && g.KeyFile == o.KeyFile && g.SNI == o.SNI && - g.ServiceKind == o.ServiceKind && g.FromWildcard == o.FromWildcard } @@ -663,6 +653,5 @@ func (g *GatewayService) Clone() *GatewayService { SNI: g.SNI, FromWildcard: g.FromWildcard, RaftIndex: g.RaftIndex, - ServiceKind: g.ServiceKind, } } diff --git a/agent/structs/config_entry_oss.go b/agent/structs/config_entry_oss.go index 4bd3a93fcdfff..2cd1db7ac9339 100644 --- a/agent/structs/config_entry_oss.go +++ b/agent/structs/config_entry_oss.go @@ -38,9 +38,6 @@ func validateInnerEnterpriseMeta(_, _ *acl.EnterpriseMeta) error { return nil } -func validateExportedServicesName(name string) error { - if name != "default" { - return fmt.Errorf(`exported-services Name must be "default"`) - } - return nil +func requireEnterprise(kind string) error { + return fmt.Errorf("Config entry kind %q requires Consul Enterprise", kind) } diff --git a/agent/structs/config_entry_test.go b/agent/structs/config_entry_test.go index afbd737f89095..0003363b2163e 100644 --- a/agent/structs/config_entry_test.go +++ b/agent/structs/config_entry_test.go @@ -427,36 +427,6 @@ func TestDecodeConfigEntry(t *testing.T) { }, }, }, - { - name: "service-defaults-with-destination", - snake: ` - kind = "service-defaults" - name = "external" - protocol = "tcp" - destination { - address = "1.2.3.4/24" - port = 8080 - } - `, - camel: ` - Kind = "service-defaults" - Name = "external" - Protocol = "tcp" - Destination { - Address = "1.2.3.4/24" - Port = 8080 - } - `, - expect: &ServiceConfigEntry{ - Kind: "service-defaults", - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "1.2.3.4/24", - Port: 8080, - }, - }, - }, { name: "service-router: kitchen sink", snake: ` @@ -1809,9 +1779,6 @@ func TestDecodeConfigEntry(t *testing.T) { }, { partition = "baz" - }, - { - peer_name = "flarm" } ] }, @@ -1843,9 +1810,6 @@ func TestDecodeConfigEntry(t *testing.T) { }, { Partition = "baz" - }, - { - PeerName = "flarm" } ] }, @@ -1877,9 +1841,6 @@ func TestDecodeConfigEntry(t *testing.T) { { Partition: "baz", }, - { - PeerName: "flarm", - }, }, }, { @@ -2421,119 +2382,6 @@ func TestServiceConfigEntry(t *testing.T) { EnterpriseMeta: *DefaultEnterpriseMetaInDefaultPartition(), }, }, - "validate: missing destination address": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "", - Port: 443, - }, - }, - validateErr: "Could not validate address", - }, - "validate: destination ipv4 address": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "1.2.3.4", - Port: 443, - }, - }, - }, - "validate: destination ipv4 CIDR address": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "10.0.0.1/16", - Port: 8080, - }, - }, - }, - "validate: destination ipv6 address": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "2001:0db8:0000:8a2e:0370:7334:1234:5678", - Port: 443, - }, - }, - }, - "valid destination shortened ipv6 address": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "2001:db8::8a2e:370:7334", - Port: 443, - }, - }, - }, - "validate: destination ipv6 CIDR address": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "2001:db8::8a2e:370:7334/64", - Port: 443, - }, - }, - }, - "validate: invalid destination port": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "2001:db8::8a2e:370:7334/64", - }, - }, - validateErr: "Invalid Port number", - }, - "validate: invalid hostname 1": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "*external.com", - Port: 443, - }, - }, - validateErr: "Could not validate address", - }, - "validate: invalid hostname 2": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "tcp", - Destination: &DestinationConfig{ - Address: "..hello.", - Port: 443, - }, - }, - validateErr: "Could not validate address", - }, - "validate: all web traffic allowed": { - entry: &ServiceConfigEntry{ - Kind: ServiceDefaults, - Name: "external", - Protocol: "http", - Destination: &DestinationConfig{ - Address: "*", - Port: 443, - }, - }, - }, } testConfigEntryNormalizeAndValidate(t, cases) } diff --git a/agent/structs/connect_proxy_config.go b/agent/structs/connect_proxy_config.go index 05e9ad9539688..f59543bdf04a5 100644 --- a/agent/structs/connect_proxy_config.go +++ b/agent/structs/connect_proxy_config.go @@ -338,7 +338,6 @@ type Upstream struct { DestinationType string `alias:"destination_type"` DestinationNamespace string `json:",omitempty" alias:"destination_namespace"` DestinationPartition string `json:",omitempty" alias:"destination_partition"` - DestinationPeer string `json:",omitempty" alias:"destination_peer"` DestinationName string `alias:"destination_name"` // Datacenter that the service discovery request should be run against. Note @@ -385,7 +384,6 @@ func (t *Upstream) UnmarshalJSON(data []byte) (err error) { DestinationTypeSnake string `json:"destination_type"` DestinationPartitionSnake string `json:"destination_partition"` DestinationNamespaceSnake string `json:"destination_namespace"` - DestinationPeerSnake string `json:"destination_peer"` DestinationNameSnake string `json:"destination_name"` LocalBindAddressSnake string `json:"local_bind_address"` @@ -412,9 +410,6 @@ func (t *Upstream) UnmarshalJSON(data []byte) (err error) { if t.DestinationPartition == "" { t.DestinationPartition = aux.DestinationPartitionSnake } - if t.DestinationPeer == "" { - t.DestinationPeer = aux.DestinationPeerSnake - } if t.DestinationName == "" { t.DestinationName = aux.DestinationNameSnake } @@ -452,9 +447,6 @@ func (u *Upstream) Validate() error { if u.DestinationName == WildcardSpecifier && !u.CentrallyConfigured { return fmt.Errorf("upstream destination name cannot be a wildcard") } - if u.DestinationPeer != "" && u.Datacenter != "" { - return fmt.Errorf("upstream cannot specify both destination peer and datacenter") - } if u.LocalBindPort == 0 && u.LocalBindSocketPath == "" && !u.CentrallyConfigured { return fmt.Errorf("upstream local bind port or local socket path must be defined and nonzero") @@ -475,7 +467,6 @@ func (u *Upstream) ToAPI() api.Upstream { DestinationType: api.UpstreamDestType(u.DestinationType), DestinationNamespace: u.DestinationNamespace, DestinationPartition: u.DestinationPartition, - DestinationPeer: u.DestinationPeer, DestinationName: u.DestinationName, Datacenter: u.Datacenter, LocalBindAddress: u.LocalBindAddress, @@ -491,14 +482,13 @@ func (u *Upstream) ToAPI() api.Upstream { // upstream in a canonical way. Set and unset values are deliberately handled // differently. // -// These fields should be user-specified explicit values and not inferred +// These fields should be user-specificed explicit values and not inferred // values. func (u *Upstream) ToKey() UpstreamKey { return UpstreamKey{ DestinationType: u.DestinationType, DestinationPartition: u.DestinationPartition, DestinationNamespace: u.DestinationNamespace, - DestinationPeer: u.DestinationPeer, DestinationName: u.DestinationName, Datacenter: u.Datacenter, } @@ -538,18 +528,16 @@ type UpstreamKey struct { DestinationName string DestinationPartition string DestinationNamespace string - DestinationPeer string Datacenter string } func (k UpstreamKey) String() string { return fmt.Sprintf( - "[type=%q, name=%q, partition=%q, namespace=%q, peer=%q, datacenter=%q]", + "[type=%q, name=%q, partition=%q, namespace=%q, datacenter=%q]", k.DestinationType, k.DestinationName, k.DestinationPartition, k.DestinationNamespace, - k.DestinationPeer, k.Datacenter, ) } @@ -560,9 +548,7 @@ func (us *Upstream) String() string { name := us.enterpriseStringPrefix() + us.DestinationName typ := us.DestinationType - if us.DestinationPeer != "" { - name += "?peer=" + us.DestinationPeer - } else if us.Datacenter != "" { + if us.Datacenter != "" { name += "?dc=" + us.Datacenter } @@ -579,7 +565,6 @@ func UpstreamFromAPI(u api.Upstream) Upstream { DestinationType: string(u.DestinationType), DestinationPartition: u.DestinationPartition, DestinationNamespace: u.DestinationNamespace, - DestinationPeer: u.DestinationPeer, DestinationName: u.DestinationName, Datacenter: u.Datacenter, LocalBindAddress: u.LocalBindAddress, diff --git a/agent/structs/peering.go b/agent/structs/peering.go deleted file mode 100644 index bd0351bb36077..0000000000000 --- a/agent/structs/peering.go +++ /dev/null @@ -1,45 +0,0 @@ -package structs - -// PeeringToken identifies a peer in order for a connection to be established. -type PeeringToken struct { - CA []string - ServerAddresses []string - ServerName string - PeerID string -} - -// PeeredService is a service that has been configured with an exported-service config entry to be exported to a peer. -type PeeredService struct { - Name ServiceName - PeerName string -} - -// NOTE: this is not serialized via msgpack so it can be changed without concern. -type ExportedServiceList struct { - // Services is a list of exported services that apply to both standard - // service discovery and service mesh. - Services []ServiceName - - // DiscoChains is a list of exported service that ONLY apply to service mesh. - DiscoChains []ServiceName - - // TODO(peering): reduce duplication here in the response - ConnectProtocol map[ServiceName]string -} - -// ListAllDiscoveryChains returns all discovery chains (union of Services and -// DiscoChains). -func (list *ExportedServiceList) ListAllDiscoveryChains() map[ServiceName]string { - chainsByName := make(map[ServiceName]string) - if list == nil { - return chainsByName - } - - for _, svc := range list.Services { - chainsByName[svc] = list.ConnectProtocol[svc] - } - for _, chainName := range list.DiscoChains { - chainsByName[chainName] = list.ConnectProtocol[chainName] - } - return chainsByName -} diff --git a/agent/structs/prepared_query.go b/agent/structs/prepared_query.go index 440053f0b7c76..b6028ceadfcfe 100644 --- a/agent/structs/prepared_query.go +++ b/agent/structs/prepared_query.go @@ -79,10 +79,6 @@ type ServiceQuery struct { // should be directly next to their services so this isn't an issue. Connect bool - // If not empty, PeerName represents the peer that the service - // was imported from. - PeerName string - // EnterpriseMeta is the embedded enterprise metadata acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` } diff --git a/agent/structs/service_definition.go b/agent/structs/service_definition.go index d506c15f98473..05357c8f29365 100644 --- a/agent/structs/service_definition.go +++ b/agent/structs/service_definition.go @@ -90,7 +90,7 @@ func (s *ServiceDefinition) NodeService() *NodeService { ns.Proxy.Upstreams[i].DestinationType = UpstreamDestTypeService } - // If a proxy's namespace and partition are not defined, inherit from the proxied service + // If a proxy's namespace is not defined, inherit the proxied service's namespace. // Applicable only to Consul Enterprise. if ns.Proxy.Upstreams[i].DestinationNamespace == "" { ns.Proxy.Upstreams[i].DestinationNamespace = ns.EnterpriseMeta.NamespaceOrEmpty() diff --git a/agent/structs/structs.go b/agent/structs/structs.go index 1eb428e596b42..e4876359f38c3 100644 --- a/agent/structs/structs.go +++ b/agent/structs/structs.go @@ -14,16 +14,15 @@ import ( "strings" "time" - "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/duration" "github.com/golang/protobuf/ptypes/timestamp" + + "github.com/golang/protobuf/proto" + ptypes "github.com/golang/protobuf/ptypes" + "github.com/hashicorp/consul-net-rpc/go-msgpack/codec" "github.com/hashicorp/go-multierror" "github.com/hashicorp/serf/coordinate" "github.com/mitchellh/hashstructure" - "google.golang.org/protobuf/types/known/durationpb" - "google.golang.org/protobuf/types/known/timestamppb" - - "github.com/hashicorp/consul-net-rpc/go-msgpack/codec" "github.com/hashicorp/consul/acl" "github.com/hashicorp/consul/agent/cache" @@ -79,29 +78,6 @@ const ( ServiceVirtualIPRequestType = 32 FreeVirtualIPRequestType = 33 KindServiceNamesType = 34 - PeeringWriteType = 35 - PeeringDeleteType = 36 - PeeringTerminateByIDType = 37 - PeeringTrustBundleWriteType = 38 - PeeringTrustBundleDeleteType = 39 -) - -const ( - // LocalPeerKeyword is a reserved keyword used for indexing in the state store for objects in the local peer. - LocalPeerKeyword = "internal" - - // DefaultPeerKeyword is the PeerName to use to refer to the local - // cluster's own data, rather than replicated peered data. - // - // This may internally be converted into LocalPeerKeyword, but external - // uses should not use that symbol directly in most cases. - DefaultPeerKeyword = "" - - // TODOPeerKeyword is the peer keyword to use if you aren't sure if the - // usage SHOULD be peering-aware yet. - // - // TODO(peering): remove this in the future - TODOPeerKeyword = "" ) // if a new request type is added above it must be @@ -145,10 +121,6 @@ var requestTypeStrings = map[MessageType]string{ ServiceVirtualIPRequestType: "ServiceVirtualIP", FreeVirtualIPRequestType: "FreeVirtualIP", KindServiceNamesType: "KindServiceName", - PeeringWriteType: "Peering", - PeeringDeleteType: "PeeringDelete", - PeeringTrustBundleWriteType: "PeeringTrustBundle", - PeeringTrustBundleDeleteType: "PeeringTrustBundleDelete", } const ( @@ -470,8 +442,6 @@ type RegisterRequest struct { // node portion of this update will not apply. SkipNodeUpdate bool - PeerName string - // EnterpriseMeta is the embedded enterprise metadata acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` @@ -502,7 +472,6 @@ func (r *RegisterRequest) ChangesNode(node *Node) bool { if r.ID != node.ID || !strings.EqualFold(r.Node, node.Node) || r.PartitionOrDefault() != node.PartitionOrDefault() || - r.PeerName != node.PeerName || r.Address != node.Address || r.Datacenter != node.Datacenter || !reflect.DeepEqual(r.TaggedAddresses, node.TaggedAddresses) || @@ -523,7 +492,6 @@ type DeregisterRequest struct { Node string ServiceID string CheckID types.CheckID - PeerName string acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` WriteRequest } @@ -587,7 +555,6 @@ type DCSpecificRequest struct { Datacenter string NodeMetaFilters map[string]string Source QuerySource - PeerName string acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` QueryOptions } @@ -600,7 +567,6 @@ func (r *DCSpecificRequest) CacheInfo() cache.RequestInfo { info := cache.RequestInfo{ Token: r.Token, Datacenter: r.Datacenter, - PeerName: r.PeerName, MinIndex: r.MinQueryIndex, Timeout: r.MaxQueryTime, MaxAge: r.MaxAge, @@ -635,7 +601,6 @@ type ServiceDumpRequest struct { UseServiceKind bool Source QuerySource acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` - PeerName string QueryOptions } @@ -647,7 +612,6 @@ func (r *ServiceDumpRequest) CacheInfo() cache.RequestInfo { info := cache.RequestInfo{ Token: r.Token, Datacenter: r.Datacenter, - PeerName: r.PeerName, MinIndex: r.MinQueryIndex, Timeout: r.MaxQueryTime, MaxAge: r.MaxAge, @@ -684,11 +648,7 @@ func (r *ServiceDumpRequest) CacheMinIndex() uint64 { // ServiceSpecificRequest is used to query about a specific service type ServiceSpecificRequest struct { - Datacenter string - - // The name of the peer that the requested service was imported from. - PeerName string - + Datacenter string NodeMetaFilters map[string]string ServiceName string ServiceKind ServiceKind @@ -706,12 +666,6 @@ type ServiceSpecificRequest struct { // Ingress if true will only search for Ingress gateways for the given service. Ingress bool - // MergeCentralConfig when set to true returns a service definition merged with - // the proxy-defaults/global and service-defaults/:service config entries. - // This can be used to ensure a full service definition is returned in the response - // especially when the service might not be written into the catalog that way. - MergeCentralConfig bool - acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` QueryOptions } @@ -755,10 +709,8 @@ func (r *ServiceSpecificRequest) CacheInfo() cache.RequestInfo { r.Connect, r.Filter, r.EnterpriseMeta, - r.PeerName, r.Ingress, r.ServiceKind, - r.MergeCentralConfig, }, nil) if err == nil { // If there is an error, we don't set the key. A blank key forces @@ -778,7 +730,6 @@ func (r *ServiceSpecificRequest) CacheMinIndex() uint64 { type NodeSpecificRequest struct { Datacenter string Node string - PeerName string acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"` QueryOptions } @@ -812,14 +763,13 @@ func (r *NodeSpecificRequest) CacheInfo() cache.RequestInfo { return info } -// ChecksInStateRequest is used to query for checks in a state +// ChecksInStateRequest is used to query for nodes in a state type ChecksInStateRequest struct { Datacenter string NodeMetaFilters map[string]string State string Source QuerySource - PeerName string acl.EnterpriseMeta `mapstructure:",squash"` QueryOptions } @@ -835,17 +785,12 @@ type Node struct { Address string Datacenter string Partition string `json:",omitempty"` - PeerName string `json:",omitempty"` TaggedAddresses map[string]string Meta map[string]string RaftIndex `bexpr:"-"` } -func (n *Node) PeerOrEmpty() string { - return n.PeerName -} - func (n *Node) GetEnterpriseMeta() *acl.EnterpriseMeta { return NodeEnterpriseMetaInPartition(n.Partition) } @@ -863,20 +808,6 @@ func (n *Node) BestAddress(wan bool) string { return n.Address } -func (n *Node) ToRegisterRequest() RegisterRequest { - return RegisterRequest{ - ID: n.ID, - Node: n.Node, - Datacenter: n.Datacenter, - Address: n.Address, - TaggedAddresses: n.TaggedAddresses, - NodeMeta: n.Meta, - RaftIndex: n.RaftIndex, - EnterpriseMeta: *n.GetEnterpriseMeta(), - PeerName: n.PeerName, - } -} - type Nodes []*Node // IsSame return whether nodes are similar without taking into account @@ -885,7 +816,6 @@ func (n *Node) IsSame(other *Node) bool { return n.ID == other.ID && strings.EqualFold(n.Node, other.Node) && n.PartitionOrDefault() == other.PartitionOrDefault() && - strings.EqualFold(n.PeerName, other.PeerName) && n.Address == other.Address && n.Datacenter == other.Datacenter && reflect.DeepEqual(n.TaggedAddresses, other.TaggedAddresses) && @@ -909,11 +839,6 @@ func ValidateServiceMetadata(kind ServiceKind, meta map[string]string, allowCons } } -// ValidateMetaTags validates arbitrary key/value pairs from the agent_endpoints -func ValidateMetaTags(metaTags map[string]string) error { - return validateMetadata(metaTags, false, nil) -} - func validateMetadata(meta map[string]string, allowConsulPrefix bool, allowedConsulKeys map[string]struct{}) error { if len(meta) > metaMaxKeyPairs { return fmt.Errorf("Node metadata cannot contain more than %d key/value pairs", metaMaxKeyPairs) @@ -1009,18 +934,11 @@ type ServiceNode struct { ServiceProxy ConnectProxyConfig ServiceConnect ServiceConnect - // If not empty, PeerName represents the peer that this ServiceNode was imported from. - PeerName string `json:",omitempty"` - acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash" bexpr:"-"` RaftIndex `bexpr:"-"` } -func (s *ServiceNode) PeerOrEmpty() string { - return s.PeerName -} - // PartialClone() returns a clone of the given service node, minus the node- // related fields that get filled in later, Address and TaggedAddresses. func (s *ServiceNode) PartialClone() *ServiceNode { @@ -1062,7 +980,6 @@ func (s *ServiceNode) PartialClone() *ServiceNode { ModifyIndex: s.ModifyIndex, }, EnterpriseMeta: s.EnterpriseMeta, - PeerName: s.PeerName, } } @@ -1082,7 +999,6 @@ func (s *ServiceNode) ToNodeService() *NodeService { EnableTagOverride: s.ServiceEnableTagOverride, Proxy: s.ServiceProxy, Connect: s.ServiceConnect, - PeerName: s.PeerName, EnterpriseMeta: s.EnterpriseMeta, RaftIndex: RaftIndex{ CreateIndex: s.CreateIndex, @@ -1141,18 +1057,6 @@ func (k ServiceKind) Normalized() string { return string(k) } -// IsProxy returns whether the ServiceKind is a connect proxy or gateway. -func (k ServiceKind) IsProxy() bool { - switch k { - case ServiceKindConnectProxy, - ServiceKindMeshGateway, - ServiceKindTerminatingGateway, - ServiceKindIngressGateway: - return true - } - return false -} - const ( // ServiceKindTypical is a typical, classic Consul service. This is // represented by the absence of a value. This was chosen for ease of @@ -1240,19 +1144,9 @@ type NodeService struct { acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash" bexpr:"-"` - // If not empty, PeerName represents the peer that the NodeService was imported from. - PeerName string - RaftIndex `bexpr:"-"` } -// PeeringServiceMeta is read-only information provided from an exported peer. -type PeeringServiceMeta struct { - SNI []string `json:",omitempty"` - SpiffeID []string `json:",omitempty"` - Protocol string `json:",omitempty"` -} - func (ns *NodeService) BestAddress(wan bool) (string, int) { addr := ns.Address port := ns.Port @@ -1323,8 +1217,6 @@ type ServiceConnect struct { // result is identical to just making a second service registration via any // other means. SidecarService *ServiceDefinition `json:",omitempty" bexpr:"-"` - - PeerMeta *PeeringServiceMeta `json:",omitempty" bexpr:"-"` } func (t *ServiceConnect) UnmarshalJSON(data []byte) (err error) { @@ -1349,8 +1241,7 @@ func (t *ServiceConnect) UnmarshalJSON(data []byte) (err error) { // IsSidecarProxy returns true if the NodeService is a sidecar proxy. func (s *NodeService) IsSidecarProxy() bool { - return s.Kind == ServiceKindConnectProxy && - (s.Proxy.DestinationServiceID != "" || s.Proxy.DestinationServiceName != "") + return s.Kind == ServiceKindConnectProxy && s.Proxy.DestinationServiceID != "" } func (s *NodeService) IsGateway() bool { @@ -1384,7 +1275,8 @@ func (s *NodeService) Validate() error { } if s.Port == 0 && s.SocketPath == "" { - result = multierror.Append(result, fmt.Errorf("Port or SocketPath must be set for a %s", s.Kind)) + result = multierror.Append(result, fmt.Errorf( + "Port or SocketPath must be set for a Connect proxy")) } if s.Connect.Native { @@ -1398,34 +1290,17 @@ func (s *NodeService) Validate() error { bindAddrs = make(map[string]struct{}) ) for _, u := range s.Proxy.Upstreams { - destinationPartition := u.DestinationPartition if destinationPartition == "" { - - // If we have a set DestinationPeer, then DestinationPartition - // must match the NodeService's Partition - if u.DestinationPeer != "" { - destinationPartition = s.PartitionOrDefault() - } else { - destinationPartition = acl.DefaultPartitionName - } + destinationPartition = acl.DefaultPartitionName } - if u.DestinationPeer == "" { - // cross DC Upstreams are only allowed for non "default" partitions - if u.Datacenter != "" && (destinationPartition != acl.DefaultPartitionName || s.PartitionOrDefault() != "default") { - result = multierror.Append(result, fmt.Errorf( - "upstreams cannot target another datacenter in non default partition")) - continue - } - } else { - if destinationPartition != s.PartitionOrDefault() { - result = multierror.Append(result, fmt.Errorf( - "upstreams must target peers in the same partition as the service")) - continue - } + // cross DC Upstreams are only allowed for non "default" partitions + if u.Datacenter != "" && (destinationPartition != acl.DefaultPartitionName || s.PartitionOrDefault() != "default") { + result = multierror.Append(result, fmt.Errorf( + "upstreams cannot target another datacenter in non default partition")) + continue } - if err := u.Validate(); err != nil { result = multierror.Append(result, err) continue @@ -1532,11 +1407,6 @@ func (s *NodeService) Validate() error { } } - if s.Connect.Native && s.Port == 0 && s.SocketPath == "" { - result = multierror.Append(result, fmt.Errorf( - "Port or SocketPath must be set for a Connect native service.")) - } - return result } @@ -1558,7 +1428,6 @@ func (s *NodeService) IsSame(other *NodeService) bool { s.Kind != other.Kind || !reflect.DeepEqual(s.Proxy, other.Proxy) || s.Connect != other.Connect || - s.PeerName != other.PeerName || !s.EnterpriseMeta.IsSame(&other.EnterpriseMeta) { return false } @@ -1630,7 +1499,6 @@ func (s *NodeService) ToServiceNode(node string) *ServiceNode { ServiceProxy: s.Proxy, ServiceConnect: s.Connect, EnterpriseMeta: s.EnterpriseMeta, - PeerName: s.PeerName, RaftIndex: RaftIndex{ CreateIndex: s.CreateIndex, ModifyIndex: s.ModifyIndex, @@ -1672,10 +1540,6 @@ type HealthCheck struct { // HTTP or GRPC health check of the service. ExposedPort int - // PeerName is the name of the peer the check was imported from. - // It is empty if the check was registered locally. - PeerName string `json:",omitempty"` - Definition HealthCheckDefinition `bexpr:"-"` acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash" bexpr:"-"` @@ -1683,10 +1547,6 @@ type HealthCheck struct { RaftIndex `bexpr:"-"` } -func (hc *HealthCheck) PeerOrEmpty() string { - return hc.PeerName -} - func (hc *HealthCheck) NodeIdentity() Identity { return Identity{ ID: hc.Node, @@ -1844,7 +1704,6 @@ func (c *HealthCheck) IsSame(other *HealthCheck) bool { c.ServiceName != other.ServiceName || !reflect.DeepEqual(c.ServiceTags, other.ServiceTags) || !reflect.DeepEqual(c.Definition, other.Definition) || - c.PeerName != other.PeerName || !c.EnterpriseMeta.IsSame(&other.EnterpriseMeta) { return false } @@ -2019,7 +1878,6 @@ type NodeInfo struct { ID types.NodeID Node string Partition string `json:",omitempty"` - PeerName string `json:",omitempty"` Address string TaggedAddresses map[string]string Meta map[string]string @@ -2171,14 +2029,6 @@ func ServiceGatewayVirtualIPTag(sn ServiceName) string { type ServiceList []ServiceName -// Len implements sort.Interface. -func (s ServiceList) Len() int { return len(s) } - -// Swap implements sort.Interface. -func (s ServiceList) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -func (s ServiceList) Sort() { sort.Sort(s) } - type IndexedServiceList struct { Services ServiceList QueryMeta @@ -2845,19 +2695,23 @@ func (m MessageType) String() string { } func DurationToProto(d time.Duration) *duration.Duration { - return durationpb.New(d) + return ptypes.DurationProto(d) } func DurationFromProto(d *duration.Duration) time.Duration { - return d.AsDuration() + ret, _ := ptypes.Duration(d) + return ret + } func TimeFromProto(s *timestamp.Timestamp) time.Time { - return s.AsTime() + ret, _ := ptypes.Timestamp(s) + return ret } func TimeToProto(s time.Time) *timestamp.Timestamp { - return timestamppb.New(s) + ret, _ := ptypes.TimestampProto(s) + return ret } // IsZeroProtoTime returns true if the time is the minimum protobuf timestamp diff --git a/agent/structs/structs_filtering_test.go b/agent/structs/structs_filtering_test.go index 6b111ea2cc946..b094cf5bdd739 100644 --- a/agent/structs/structs_filtering_test.go +++ b/agent/structs/structs_filtering_test.go @@ -53,7 +53,7 @@ func TestPointerStructure(t *testing.T) { require.Equal(t, "1.1.1.1", val) } -// ///////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// // // NOTE: The tests within this file are designed to validate that the fields // that will be available for filtering for various data types in the @@ -61,7 +61,7 @@ func TestPointerStructure(t *testing.T) { // to update this file to get the tests passing again then you definitely // should update the documentation as well. // -// ///////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// type fieldConfigTest struct { dataType interface{} @@ -166,11 +166,6 @@ var expectedFieldConfigUpstreams bexpr.FieldConfigurations = bexpr.FieldConfigur CoerceFn: bexpr.CoerceString, SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, }, - "DestinationPeer": &bexpr.FieldConfiguration{ - StructFieldName: "DestinationPeer", - CoerceFn: bexpr.CoerceString, - SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, - }, "DestinationName": &bexpr.FieldConfiguration{ StructFieldName: "DestinationName", CoerceFn: bexpr.CoerceString, @@ -314,11 +309,6 @@ var expectedFieldConfigNode bexpr.FieldConfigurations = bexpr.FieldConfiguration CoerceFn: bexpr.CoerceString, SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, }, - "PeerName": &bexpr.FieldConfiguration{ - StructFieldName: "PeerName", - CoerceFn: bexpr.CoerceString, - SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, - }, "Address": &bexpr.FieldConfiguration{ StructFieldName: "Address", CoerceFn: bexpr.CoerceString, @@ -418,11 +408,6 @@ var expectedFieldConfigNodeService bexpr.FieldConfigurations = bexpr.FieldConfig StructFieldName: "ServiceConnect", SubFields: expectedFieldConfigServiceConnect, }, - "PeerName": &bexpr.FieldConfiguration{ - StructFieldName: "PeerName", - CoerceFn: bexpr.CoerceString, - SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, - }, } var expectedFieldConfigServiceNode bexpr.FieldConfigurations = bexpr.FieldConfigurations{ @@ -522,11 +507,6 @@ var expectedFieldConfigServiceNode bexpr.FieldConfigurations = bexpr.FieldConfig StructFieldName: "ServiceConnect", SubFields: expectedFieldConfigServiceConnect, }, - "PeerName": &bexpr.FieldConfiguration{ - StructFieldName: "PeerName", - CoerceFn: bexpr.CoerceString, - SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, - }, } var expectedFieldConfigHealthCheck bexpr.FieldConfigurations = bexpr.FieldConfigurations{ @@ -598,11 +578,6 @@ var expectedFieldConfigHealthCheck bexpr.FieldConfigurations = bexpr.FieldConfig SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual}, StructFieldName: "ExposedPort", }, - "PeerName": &bexpr.FieldConfiguration{ - CoerceFn: bexpr.CoerceString, - SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, - StructFieldName: "PeerName", - }, } var expectedFieldConfigCheckServiceNode bexpr.FieldConfigurations = bexpr.FieldConfigurations{ @@ -637,11 +612,6 @@ var expectedFieldConfigNodeInfo bexpr.FieldConfigurations = bexpr.FieldConfigura CoerceFn: bexpr.CoerceString, SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, }, - "PeerName": &bexpr.FieldConfiguration{ - StructFieldName: "PeerName", - CoerceFn: bexpr.CoerceString, - SupportedOperations: []bexpr.MatchOperator{bexpr.MatchEqual, bexpr.MatchNotEqual, bexpr.MatchIn, bexpr.MatchNotIn, bexpr.MatchMatches, bexpr.MatchNotMatches}, - }, "Address": &bexpr.FieldConfiguration{ StructFieldName: "Address", CoerceFn: bexpr.CoerceString, diff --git a/agent/structs/structs_oss.go b/agent/structs/structs_oss.go index 87f1b5457937b..bf911f5a8ca4f 100644 --- a/agent/structs/structs_oss.go +++ b/agent/structs/structs_oss.go @@ -57,10 +57,6 @@ func NodeEnterpriseMetaInDefaultPartition() *acl.EnterpriseMeta { // FillAuthzContext stub func (_ *Node) FillAuthzContext(_ *acl.AuthorizerContext) {} -func (n *Node) OverridePartition(_ string) { - n.Partition = "" -} - func (_ *Coordinate) FillAuthzContext(_ *acl.AuthorizerContext) {} func (_ *NodeInfo) FillAuthzContext(_ *acl.AuthorizerContext) {} @@ -118,12 +114,6 @@ func ServiceNameFromString(input string) ServiceName { return ServiceName{Name: id} } -// Less implements sort.Interface. -func (s ServiceList) Less(i, j int) bool { - a, b := s[i], s[j] - return a.Name < b.Name -} - func (cid CheckID) String() string { return string(cid.ID) } diff --git a/agent/structs/structs_test.go b/agent/structs/structs_test.go index 0b6efb33097b5..57711184bd1a4 100644 --- a/agent/structs/structs_test.go +++ b/agent/structs/structs_test.go @@ -3,7 +3,6 @@ package structs import ( "encoding/json" "fmt" - "math/rand" "reflect" "strings" "testing" @@ -679,10 +678,6 @@ func TestStructs_NodeService_ValidateTerminatingGateway(t *testing.T) { func(x *NodeService) { x.Proxy.Upstreams = []Upstream{{}} }, "Proxy.Upstreams configuration is invalid", }, - "port": { - func(x *NodeService) { x.Port = 0 }, - "Port must be non-zero", - }, } for name, tc := range cases { @@ -850,7 +845,7 @@ func TestStructs_NodeService_ValidateConnectProxy(t *testing.T) { { "connect-proxy: no port set", func(x *NodeService) { x.Port = 0 }, - fmt.Sprintf("Port or SocketPath must be set for a %s", ServiceKindConnectProxy), + "port or socketpath must", }, { @@ -1125,20 +1120,6 @@ func TestStructs_NodeService_ValidateConnectProxy(t *testing.T) { }, "upstreams cannot contain duplicates", }, - { - "connect-proxy: valid Upstream.PeerDestination", - func(x *NodeService) { - x.Proxy.Upstreams = Upstreams{ - { - DestinationType: UpstreamDestTypeService, - DestinationName: "foo", - DestinationPeer: "peer1", - LocalBindPort: 5000, - }, - } - }, - "", - }, } for _, tc := range cases { @@ -1197,36 +1178,6 @@ func TestStructs_NodeService_ValidateConnectProxy_In_Partition(t *testing.T) { }, "", }, - { - "connect-proxy: Upstream with peer targets partition different from NodeService", - func(x *NodeService) { - x.Proxy.Upstreams = Upstreams{ - { - DestinationType: UpstreamDestTypeService, - DestinationName: "foo", - DestinationPartition: "part1", - DestinationPeer: "peer1", - LocalBindPort: 5000, - }, - } - }, - "upstreams must target peers in the same partition as the service", - }, - { - "connect-proxy: Upstream with peer defaults to NodeService's peer", - func(x *NodeService) { - x.Proxy.Upstreams = Upstreams{ - { - DestinationType: UpstreamDestTypeService, - DestinationName: "foo", - // No DestinationPartition here but we assert that it defaults to "bar" and not "default" - DestinationPeer: "peer1", - LocalBindPort: 5000, - }, - } - }, - "", - }, } for _, tc := range cases { @@ -1290,15 +1241,6 @@ func TestStructs_NodeService_ValidateSidecarService(t *testing.T) { } } -func TestStructs_NodeService_ConnectNativeEmptyPortError(t *testing.T) { - ns := TestNodeService(t) - ns.Connect.Native = true - ns.Port = 0 - err := ns.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "Port or SocketPath must be set for a Connect native service.") -} - func TestStructs_NodeService_IsSame(t *testing.T) { ns := &NodeService{ ID: "node1", @@ -1966,8 +1908,6 @@ func TestServiceDumpRequest_CacheInfoKey(t *testing.T) { var cacheInfoIgnoredFields = map[string]bool{ // Datacenter is part of the cache key added by the cache itself. "Datacenter": true, - // PeerName is part of the cache key added by the cache itself. - "PeerName": true, // QuerySource is always the same for every request from a single agent, so it // is excluded from the key. "Source": true, @@ -2857,82 +2797,3 @@ func TestGatewayService_IsSame(t *testing.T) { t.Fatalf("should be equal, was %#v VS %#v", g, other) } } - -func TestServiceList_Sort(t *testing.T) { - type testcase struct { - name string - list []ServiceName - expect []ServiceName - } - - run := func(t *testing.T, tc testcase) { - t.Run("written order", func(t *testing.T) { - ServiceList(tc.list).Sort() - require.Equal(t, tc.expect, tc.list) - }) - t.Run("random order", func(t *testing.T) { - rand.Shuffle(len(tc.list), func(i, j int) { - tc.list[i], tc.list[j] = tc.list[j], tc.list[i] - }) - ServiceList(tc.list).Sort() - require.Equal(t, tc.expect, tc.list) - }) - } - - sn := func(name string) ServiceName { - return NewServiceName(name, nil) - } - - cases := []testcase{ - { - name: "nil", - list: nil, - expect: nil, - }, - { - name: "empty", - list: []ServiceName{}, - expect: []ServiceName{}, - }, - { - name: "one", - list: []ServiceName{sn("foo")}, - expect: []ServiceName{sn("foo")}, - }, - { - name: "multiple", - list: []ServiceName{ - sn("food"), - sn("zip"), - sn("Bar"), - sn("ba"), - sn("foo"), - sn("bar"), - sn("Foo"), - sn("Zip"), - sn("foo"), - sn("bar"), - sn("barrier"), - }, - expect: []ServiceName{ - sn("Bar"), - sn("Foo"), - sn("Zip"), - sn("ba"), - sn("bar"), - sn("bar"), - sn("barrier"), - sn("foo"), - sn("foo"), - sn("food"), - sn("zip"), - }, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - run(t, tc) - }) - } -} diff --git a/agent/submatview/local_materializer.go b/agent/submatview/local_materializer.go deleted file mode 100644 index b65c2f0744e56..0000000000000 --- a/agent/submatview/local_materializer.go +++ /dev/null @@ -1,109 +0,0 @@ -package submatview - -import ( - "context" - "errors" - - "github.com/hashicorp/consul/acl" - "github.com/hashicorp/consul/agent/consul/state" - "github.com/hashicorp/consul/agent/consul/stream" - "github.com/hashicorp/consul/lib/retry" - "github.com/hashicorp/consul/proto/pbsubscribe" -) - -// LocalMaterializer is a materializer for a stream of events -// and manages the local subscription to the event publisher -// until the cache result is discarded when its TTL expires. -type LocalMaterializer struct { - deps Deps - backend LocalBackend - retryWaiter *retry.Waiter - handler eventHandler - - mat *materializer -} - -var _ Materializer = (*LocalMaterializer)(nil) - -type LocalBackend interface { - Subscribe(req *stream.SubscribeRequest) (*stream.Subscription, error) -} - -func NewLocalMaterializer(backend LocalBackend, deps Deps) *LocalMaterializer { - m := LocalMaterializer{ - backend: backend, - deps: deps, - mat: newMaterializer(deps.Logger, deps.View, deps.Waiter), - } - return &m -} - -// Query implements Materializer -func (m *LocalMaterializer) Query(ctx context.Context, minIndex uint64) (Result, error) { - return m.mat.query(ctx, minIndex) -} - -// Run receives events from a local subscription backend and sends them to the View. -// It runs until ctx is cancelled, so it is expected to be run in a goroutine. -// Mirrors implementation of RPCMaterializer. -// -// Run implements Materializer -func (m *LocalMaterializer) Run(ctx context.Context) { - for { - req := m.deps.Request(m.mat.currentIndex()) - err := m.subscribeOnce(ctx, req) - if ctx.Err() != nil { - return - } - m.mat.handleError(req, err) - - if err := m.mat.retryWaiter.Wait(ctx); err != nil { - return - } - } -} - -// subscribeOnce opens a new subscription to a local backend and runs -// for its lifetime or until the view is closed. -func (m *LocalMaterializer) subscribeOnce(ctx context.Context, req *pbsubscribe.SubscribeRequest) error { - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - m.handler = initialHandler(req.Index) - - entMeta := acl.NewEnterpriseMetaWithPartition(req.Partition, req.Namespace) - sub, err := m.backend.Subscribe(state.PBToStreamSubscribeRequest(req, entMeta)) - if err != nil { - return err - } - defer sub.Unsubscribe() - - for { - event, err := sub.Next(ctx) - switch { - case errors.Is(err, stream.ErrSubForceClosed): - m.deps.Logger.Trace("subscription reset by server") - return err - - case err != nil: - return err - } - - e := event.Payload.ToSubscriptionEvent(event.Index) - m.handler, err = m.handler(m, e) - if err != nil { - m.mat.reset() - return err - } - } -} - -// updateView implements viewState -func (m *LocalMaterializer) updateView(events []*pbsubscribe.Event, index uint64) error { - return m.mat.updateView(events, index) -} - -// reset implements viewState -func (m *LocalMaterializer) reset() { - m.mat.reset() -} diff --git a/agent/submatview/materializer.go b/agent/submatview/materializer.go index aa312d060cea9..3b870d9e17f27 100644 --- a/agent/submatview/materializer.go +++ b/agent/submatview/materializer.go @@ -6,6 +6,9 @@ import ( "time" "github.com/hashicorp/go-hclog" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "github.com/hashicorp/consul/lib/retry" "github.com/hashicorp/consul/proto/pbsubscribe" @@ -35,27 +38,16 @@ type View interface { Reset() } -// Result returned from the View. -type Result struct { - Index uint64 - Value interface{} - // Cached is true if the requested value was already available locally. If - // the value is false, it indicates that GetFromView had to wait for an update, - Cached bool -} - -type Deps struct { - View View - Logger hclog.Logger - Waiter *retry.Waiter - Request func(index uint64) *pbsubscribe.SubscribeRequest -} - -// materializer consumes the event stream, handling any framing events, and -// allows for querying the materialized view. -type materializer struct { +// Materializer consumes the event stream, handling any framing events, and +// sends the events to View as they are received. +// +// Materializer is used as the cache.Result.State for a streaming +// cache type and manages the actual streaming RPC call to the servers behind +// the scenes until the cache result is discarded when TTL expires. +type Materializer struct { + deps Deps retryWaiter *retry.Waiter - logger hclog.Logger + handler eventHandler // lock protects the mutable state - all fields below it must only be accessed // while holding lock. @@ -66,22 +58,175 @@ type materializer struct { err error } -func newMaterializer(logger hclog.Logger, view View, waiter *retry.Waiter) *materializer { - m := materializer{ - view: view, - retryWaiter: waiter, - logger: logger, +type Deps struct { + View View + Client StreamClient + Logger hclog.Logger + Waiter *retry.Waiter + Request func(index uint64) *pbsubscribe.SubscribeRequest +} + +// StreamClient provides a subscription to state change events. +type StreamClient interface { + Subscribe(ctx context.Context, in *pbsubscribe.SubscribeRequest, opts ...grpc.CallOption) (pbsubscribe.StateChangeSubscription_SubscribeClient, error) +} + +// NewMaterializer returns a new Materializer. Run must be called to start it. +func NewMaterializer(deps Deps) *Materializer { + v := &Materializer{ + deps: deps, + view: deps.View, + retryWaiter: deps.Waiter, updateCh: make(chan struct{}), } - if m.retryWaiter == nil { - m.retryWaiter = defaultWaiter() + if v.retryWaiter == nil { + v.retryWaiter = &retry.Waiter{ + MinFailures: 1, + // Start backing off with small increments (200-400ms) which will double + // each attempt. (200-400, 400-800, 800-1600, 1600-3200, 3200-6000, 6000 + // after that). (retry.Wait applies Max limit after jitter right now). + Factor: 200 * time.Millisecond, + MinWait: 0, + MaxWait: 60 * time.Second, + Jitter: retry.NewJitter(100), + } + } + return v +} + +// Run receives events from the StreamClient and sends them to the View. It runs +// until ctx is cancelled, so it is expected to be run in a goroutine. +func (m *Materializer) Run(ctx context.Context) { + for { + req := m.deps.Request(m.index) + err := m.runSubscription(ctx, req) + if ctx.Err() != nil { + return + } + + failures := m.retryWaiter.Failures() + if isNonTemporaryOrConsecutiveFailure(err, failures) { + m.lock.Lock() + m.notifyUpdateLocked(err) + m.lock.Unlock() + } + + m.deps.Logger.Error("subscribe call failed", + "err", err, + "topic", req.Topic, + "key", req.Key, + "failure_count", failures+1) + + if err := m.retryWaiter.Wait(ctx); err != nil { + return + } + } +} + +// isNonTemporaryOrConsecutiveFailure returns true if the error is not a +// temporary error or if failures > 0. +func isNonTemporaryOrConsecutiveFailure(err error, failures int) bool { + // temporary is an interface used by net and other std lib packages to + // show error types represent temporary/recoverable errors. + temp, ok := err.(interface { + Temporary() bool + }) + return !ok || !temp.Temporary() || failures > 0 +} + +// runSubscription opens a new subscribe streaming call to the servers and runs +// for it's lifetime or until the view is closed. +func (m *Materializer) runSubscription(ctx context.Context, req *pbsubscribe.SubscribeRequest) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + m.handler = initialHandler(req.Index) + + s, err := m.deps.Client.Subscribe(ctx, req) + if err != nil { + return err + } + + for { + event, err := s.Recv() + switch { + case isGrpcStatus(err, codes.Aborted): + m.reset() + return resetErr("stream reset requested") + case err != nil: + return err + } + + m.handler, err = m.handler(m, event) + if err != nil { + m.reset() + return err + } + } +} + +func isGrpcStatus(err error, code codes.Code) bool { + s, ok := status.FromError(err) + return ok && s.Code() == code +} + +// resetErr represents a server request to reset the subscription, it's typed so +// we can mark it as temporary and so attempt to retry first time without +// notifying clients. +type resetErr string + +// Temporary Implements the internal Temporary interface +func (e resetErr) Temporary() bool { + return true +} + +// Error implements error +func (e resetErr) Error() string { + return string(e) +} + +// reset clears the state ready to start a new stream from scratch. +func (m *Materializer) reset() { + m.lock.Lock() + defer m.lock.Unlock() + + m.view.Reset() + m.index = 0 +} + +func (m *Materializer) updateView(events []*pbsubscribe.Event, index uint64) error { + m.lock.Lock() + defer m.lock.Unlock() + + if err := m.view.Update(events); err != nil { + return err } - return &m + m.index = index + m.notifyUpdateLocked(nil) + m.retryWaiter.Reset() + return nil +} + +// notifyUpdateLocked closes the current update channel and recreates a new +// one. It must be called while holding the s.lock lock. +func (m *Materializer) notifyUpdateLocked(err error) { + m.err = err + close(m.updateCh) + m.updateCh = make(chan struct{}) +} + +// Result returned from the View. +type Result struct { + Index uint64 + Value interface{} + // Cached is true if the requested value was already available locally. If + // the value is false, it indicates that getFromView had to wait for an update, + Cached bool } -// Query blocks until the index of the View is greater than opts.MinIndex, -// or the context is cancelled. -func (m *materializer) query(ctx context.Context, minIndex uint64) (Result, error) { +// getFromView blocks until the index of the View is greater than opts.MinIndex, +//or the context is cancelled. +func (m *Materializer) getFromView(ctx context.Context, minIndex uint64) (Result, error) { m.lock.Lock() result := Result{ @@ -133,85 +278,3 @@ func (m *materializer) query(ctx context.Context, minIndex uint64) (Result, erro } } } - -func (m *materializer) currentIndex() uint64 { - var resp uint64 - - m.lock.Lock() - resp = m.index - m.lock.Unlock() - - return resp -} - -// notifyUpdateLocked closes the current update channel and recreates a new -// one. It must be called while holding the m.lock lock. -func (m *materializer) notifyUpdateLocked(err error) { - m.err = err - close(m.updateCh) - m.updateCh = make(chan struct{}) -} - -// reset clears the state ready to start a new stream from scratch. -func (m *materializer) reset() { - m.lock.Lock() - defer m.lock.Unlock() - - m.view.Reset() - m.index = 0 -} - -// updateView updates the view from a sequence of events and stores -// the corresponding Raft index. -func (m *materializer) updateView(events []*pbsubscribe.Event, index uint64) error { - m.lock.Lock() - defer m.lock.Unlock() - - if err := m.view.Update(events); err != nil { - return err - } - - m.index = index - m.notifyUpdateLocked(nil) - m.retryWaiter.Reset() - return nil -} - -func (m *materializer) handleError(req *pbsubscribe.SubscribeRequest, err error) { - failures := m.retryWaiter.Failures() - if isNonTemporaryOrConsecutiveFailure(err, failures) { - m.lock.Lock() - m.notifyUpdateLocked(err) - m.lock.Unlock() - } - - m.logger.Error("subscribe call failed", - "err", err, - "topic", req.Topic, - "key", req.Key, - "failure_count", failures+1) -} - -// isNonTemporaryOrConsecutiveFailure returns true if the error is not a -// temporary error or if failures > 0. -func isNonTemporaryOrConsecutiveFailure(err error, failures int) bool { - // temporary is an interface used by net and other std lib packages to - // show error types represent temporary/recoverable errors. - temp, ok := err.(interface { - Temporary() bool - }) - return !ok || !temp.Temporary() || failures > 0 -} - -func defaultWaiter() *retry.Waiter { - return &retry.Waiter{ - MinFailures: 1, - // Start backing off with small increments (200-400ms) which will double - // each attempt. (200-400, 400-800, 800-1600, 1600-3200, 3200-6000, 6000 - // after that). (retry.Wait applies Max limit after jitter right now). - Factor: 200 * time.Millisecond, - MinWait: 0, - MaxWait: 60 * time.Second, - Jitter: retry.NewJitter(100), - } -} diff --git a/agent/submatview/rpc_materializer.go b/agent/submatview/rpc_materializer.go deleted file mode 100644 index 3b379d4e843a9..0000000000000 --- a/agent/submatview/rpc_materializer.go +++ /dev/null @@ -1,125 +0,0 @@ -package submatview - -import ( - "context" - - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/hashicorp/consul/proto/pbsubscribe" -) - -// RPCMaterializer is a materializer for a streaming cache type -// and manages the actual streaming RPC call to the servers behind -// the scenes until the cache result is discarded when its TTL expires. -type RPCMaterializer struct { - deps Deps - client StreamClient - handler eventHandler - - mat *materializer -} - -var _ Materializer = (*RPCMaterializer)(nil) - -// StreamClient provides a subscription to state change events. -type StreamClient interface { - Subscribe(ctx context.Context, in *pbsubscribe.SubscribeRequest, opts ...grpc.CallOption) (pbsubscribe.StateChangeSubscription_SubscribeClient, error) -} - -// NewRPCMaterializer returns a new Materializer. Run must be called to start it. -func NewRPCMaterializer(client StreamClient, deps Deps) *RPCMaterializer { - m := RPCMaterializer{ - deps: deps, - client: client, - mat: newMaterializer(deps.Logger, deps.View, deps.Waiter), - } - return &m -} - -// Query implements Materializer -func (m *RPCMaterializer) Query(ctx context.Context, minIndex uint64) (Result, error) { - return m.mat.query(ctx, minIndex) -} - -// Run receives events from the StreamClient and sends them to the View. It runs -// until ctx is cancelled, so it is expected to be run in a goroutine. -// Mirrors implementation of LocalMaterializer -// -// Run implements Materializer -func (m *RPCMaterializer) Run(ctx context.Context) { - for { - req := m.deps.Request(m.mat.currentIndex()) - err := m.subscribeOnce(ctx, req) - if ctx.Err() != nil { - return - } - m.mat.handleError(req, err) - - if err := m.mat.retryWaiter.Wait(ctx); err != nil { - return - } - } -} - -// subscribeOnce opens a new subscribe streaming call to the servers and runs -// for its lifetime or until the view is closed. -func (m *RPCMaterializer) subscribeOnce(ctx context.Context, req *pbsubscribe.SubscribeRequest) error { - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - m.handler = initialHandler(req.Index) - - s, err := m.client.Subscribe(ctx, req) - if err != nil { - return err - } - - for { - event, err := s.Recv() - switch { - case isGrpcStatus(err, codes.Aborted): - m.mat.reset() - return resetErr("stream reset requested") - case err != nil: - return err - } - - m.handler, err = m.handler(m, event) - if err != nil { - m.mat.reset() - return err - } - } -} - -func isGrpcStatus(err error, code codes.Code) bool { - s, ok := status.FromError(err) - return ok && s.Code() == code -} - -// resetErr represents a server request to reset the subscription, it's typed so -// we can mark it as temporary and so attempt to retry first time without -// notifying clients. -type resetErr string - -// Temporary Implements the internal Temporary interface -func (e resetErr) Temporary() bool { - return true -} - -// Error implements error -func (e resetErr) Error() string { - return string(e) -} - -// updateView implements viewState -func (m *RPCMaterializer) updateView(events []*pbsubscribe.Event, index uint64) error { - return m.mat.updateView(events, index) -} - -// reset implements viewState -func (m *RPCMaterializer) reset() { - m.mat.reset() -} diff --git a/agent/submatview/store.go b/agent/submatview/store.go index 242a0d70d72d0..07363f74032ae 100644 --- a/agent/submatview/store.go +++ b/agent/submatview/store.go @@ -34,14 +34,8 @@ type Store struct { idleTTL time.Duration } -// A Materializer maintains a materialized view of a subscription on an event stream. -type Materializer interface { - Run(ctx context.Context) - Query(ctx context.Context, minIndex uint64) (Result, error) -} - type entry struct { - materializer Materializer + materializer *Materializer expiry *ttlcache.Entry stop func() // requests is the count of active requests using this entry. This entry will @@ -106,7 +100,7 @@ type Request interface { // NewMaterializer will be called if there is no active materializer to fulfil // the request. It should return a Materializer appropriate for streaming // data to fulfil this request. - NewMaterializer() (Materializer, error) + NewMaterializer() (*Materializer, error) // Type should return a string which uniquely identifies this type of request. // The returned value is used as the prefix of the key used to index // entries in the Store. @@ -130,7 +124,7 @@ func (s *Store) Get(ctx context.Context, req Request) (Result, error) { defer cancel() } - result, err := materializer.Query(ctx, info.MinIndex) + result, err := materializer.getFromView(ctx, info.MinIndex) // context.DeadlineExceeded is translated to nil to match the timeout // behaviour of agent/cache.Cache.Get. if err == nil || errors.Is(err, context.DeadlineExceeded) { @@ -149,23 +143,6 @@ func (s *Store) Notify( req Request, correlationID string, updateCh chan<- cache.UpdateEvent, -) error { - return s.NotifyCallback(ctx, req, correlationID, func(ctx context.Context, event cache.UpdateEvent) { - select { - case updateCh <- event: - case <-ctx.Done(): - return - } - }) -} - -// NotifyCallback subscribes to updates of the entry identified by req in the -// same way as Notify, but accepts a callback function instead of a channel. -func (s *Store) NotifyCallback( - ctx context.Context, - req Request, - correlationID string, - cb cache.Callback, ) error { info := req.CacheInfo() key, materializer, err := s.readEntry(req) @@ -178,7 +155,7 @@ func (s *Store) NotifyCallback( index := info.MinIndex for { - result, err := materializer.Query(ctx, index) + result, err := materializer.getFromView(ctx, index) switch { case ctx.Err() != nil: return @@ -191,11 +168,16 @@ func (s *Store) NotifyCallback( } index = result.Index - cb(ctx, cache.UpdateEvent{ + u := cache.UpdateEvent{ CorrelationID: correlationID, Result: result.Value, Meta: cache.ResultMeta{Index: result.Index, Hit: result.Cached}, - }) + } + select { + case updateCh <- u: + case <-ctx.Done(): + return + } } }() return nil @@ -203,7 +185,7 @@ func (s *Store) NotifyCallback( // readEntry from the store, and increment the requests counter. releaseEntry // must be called when the request is finished to decrement the counter. -func (s *Store) readEntry(req Request) (string, Materializer, error) { +func (s *Store) readEntry(req Request) (string, *Materializer, error) { info := req.CacheInfo() key := makeEntryKey(req.Type(), info) diff --git a/agent/submatview/store_integration_test.go b/agent/submatview/store_integration_test.go index b0efb91cbe15b..e8247b8185cea 100644 --- a/agent/submatview/store_integration_test.go +++ b/agent/submatview/store_integration_test.go @@ -253,6 +253,7 @@ func (e *eventProducer) Produce(ctx context.Context, pub *stream.EventPublisher) }, }, } + } e.nodesLock.Lock() @@ -320,12 +321,7 @@ func (c *consumer) Consume(ctx context.Context, maxIndex uint64) error { group, cctx := errgroup.WithContext(ctx) group.Go(func() error { - return c.healthClient.Notify(cctx, req, "", func(ctx context.Context, event cache.UpdateEvent) { - select { - case updateCh <- event: - case <-ctx.Done(): - } - }) + return c.healthClient.Notify(cctx, req, "", updateCh) }) group.Go(func() error { var idx uint64 diff --git a/agent/submatview/store_test.go b/agent/submatview/store_test.go index 78d7b1aa1718f..b177380d31107 100644 --- a/agent/submatview/store_test.go +++ b/agent/submatview/store_test.go @@ -14,7 +14,6 @@ import ( "github.com/hashicorp/consul/proto/pbcommon" "github.com/hashicorp/consul/proto/pbservice" "github.com/hashicorp/consul/proto/pbsubscribe" - "github.com/hashicorp/consul/sdk/testutil" "github.com/hashicorp/consul/sdk/testutil/retry" ) @@ -25,7 +24,7 @@ func TestStore_Get(t *testing.T) { store := NewStore(hclog.New(nil)) go store.Run(ctx) - req := &fakeRPCRequest{ + req := &fakeRequest{ client: NewTestStreamingClient(pbcommon.DefaultEnterpriseMeta.Namespace), } req.client.QueueEvents( @@ -33,7 +32,7 @@ func TestStore_Get(t *testing.T) { newEventServiceHealthRegister(10, 1, "srv1"), newEventServiceHealthRegister(22, 2, "srv1")) - testutil.RunStep(t, "from empty store, starts materializer", func(t *testing.T) { + runStep(t, "from empty store, starts materializer", func(t *testing.T) { var result Result retry.Run(t, func(r *retry.R) { var err error @@ -57,7 +56,7 @@ func TestStore_Get(t *testing.T) { require.Equal(t, store.expiryHeap.Next().Entry, e.expiry) }) - testutil.RunStep(t, "with an index that already exists in the view", func(t *testing.T) { + runStep(t, "with an index that already exists in the view", func(t *testing.T) { req.index = 21 result, err := store.Get(ctx, req) require.NoError(t, err) @@ -85,7 +84,7 @@ func TestStore_Get(t *testing.T) { chResult <- resultOrError{Result: result, Err: err} }() - testutil.RunStep(t, "blocks with an index that is not yet in the view", func(t *testing.T) { + runStep(t, "blocks with an index that is not yet in the view", func(t *testing.T) { select { case <-chResult: t.Fatalf("expected Get to block") @@ -98,7 +97,7 @@ func TestStore_Get(t *testing.T) { require.Equal(t, 1, e.requests) }) - testutil.RunStep(t, "blocks when an event is received but the index is still below minIndex", func(t *testing.T) { + runStep(t, "blocks when an event is received but the index is still below minIndex", func(t *testing.T) { req.client.QueueEvents(newEventServiceHealthRegister(24, 1, "srv1")) select { @@ -113,7 +112,7 @@ func TestStore_Get(t *testing.T) { require.Equal(t, 1, e.requests) }) - testutil.RunStep(t, "unblocks when an event with index past minIndex", func(t *testing.T) { + runStep(t, "unblocks when an event with index past minIndex", func(t *testing.T) { req.client.QueueEvents(newEventServiceHealthRegister(41, 1, "srv1")) var getResult resultOrError select { @@ -140,7 +139,7 @@ func TestStore_Get(t *testing.T) { require.Equal(t, store.expiryHeap.Next().Entry, e.expiry) }) - testutil.RunStep(t, "with no index returns latest value", func(t *testing.T) { + runStep(t, "with no index returns latest value", func(t *testing.T) { req.index = 0 result, err := store.Get(ctx, req) require.NoError(t, err) @@ -161,7 +160,7 @@ func TestStore_Get(t *testing.T) { require.Equal(t, store.expiryHeap.Next().Entry, e.expiry) }) - testutil.RunStep(t, "blocks until timeout", func(t *testing.T) { + runStep(t, "blocks until timeout", func(t *testing.T) { req.index = 50 req.timeout = 25 * time.Millisecond @@ -200,14 +199,14 @@ type resultOrError struct { Err error } -type fakeRPCRequest struct { +type fakeRequest struct { index uint64 timeout time.Duration key string client *TestStreamingClient } -func (r *fakeRPCRequest) CacheInfo() cache.RequestInfo { +func (r *fakeRequest) CacheInfo() cache.RequestInfo { key := r.key if key == "" { key = "key" @@ -221,9 +220,10 @@ func (r *fakeRPCRequest) CacheInfo() cache.RequestInfo { } } -func (r *fakeRPCRequest) NewMaterializer() (Materializer, error) { - deps := Deps{ +func (r *fakeRequest) NewMaterializer() (*Materializer, error) { + return NewMaterializer(Deps{ View: &fakeView{srvs: make(map[string]*pbservice.CheckServiceNode)}, + Client: r.client, Logger: hclog.New(nil), Request: func(index uint64) *pbsubscribe.SubscribeRequest { req := &pbsubscribe.SubscribeRequest{ @@ -236,11 +236,10 @@ func (r *fakeRPCRequest) NewMaterializer() (Materializer, error) { } return req }, - } - return NewRPCMaterializer(r.client, deps), nil + }), nil } -func (r *fakeRPCRequest) Type() string { +func (r *fakeRequest) Type() string { return fmt.Sprintf("%T", r) } @@ -292,7 +291,7 @@ func TestStore_Notify(t *testing.T) { store := NewStore(hclog.New(nil)) go store.Run(ctx) - req := &fakeRPCRequest{ + req := &fakeRequest{ client: NewTestStreamingClient(pbcommon.DefaultEnterpriseMeta.Namespace), } req.client.QueueEvents( @@ -305,7 +304,7 @@ func TestStore_Notify(t *testing.T) { err := store.Notify(ctx, req, cID, ch) require.NoError(t, err) - testutil.RunStep(t, "from empty store, starts materializer", func(t *testing.T) { + runStep(t, "from empty store, starts materializer", func(t *testing.T) { store.lock.Lock() defer store.lock.Unlock() require.Len(t, store.byKey, 1) @@ -314,7 +313,7 @@ func TestStore_Notify(t *testing.T) { require.Equal(t, 1, e.requests) }) - testutil.RunStep(t, "updates are received", func(t *testing.T) { + runStep(t, "updates are received", func(t *testing.T) { retry.Run(t, func(r *retry.R) { select { case update := <-ch: @@ -340,7 +339,7 @@ func TestStore_Notify(t *testing.T) { } }) - testutil.RunStep(t, "closing the notify starts the expiry counter", func(t *testing.T) { + runStep(t, "closing the notify starts the expiry counter", func(t *testing.T) { cancel() retry.Run(t, func(r *retry.R) { @@ -361,7 +360,7 @@ func TestStore_Notify_ManyRequests(t *testing.T) { store := NewStore(hclog.New(nil)) go store.Run(ctx) - req := &fakeRPCRequest{ + req := &fakeRequest{ client: NewTestStreamingClient(pbcommon.DefaultEnterpriseMeta.Namespace), } req.client.QueueEvents(newEndOfSnapshotEvent(2)) @@ -394,13 +393,13 @@ func TestStore_Notify_ManyRequests(t *testing.T) { assertRequestCount(r, store, req, 4) }) - var req2 *fakeRPCRequest + var req2 *fakeRequest - testutil.RunStep(t, "Get and Notify with a different key", func(t *testing.T) { + runStep(t, "Get and Notify with a different key", func(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - req2 = &fakeRPCRequest{client: req.client, key: "key2", index: 22} + req2 = &fakeRequest{client: req.client, key: "key2", index: 22} require.NoError(t, store.Notify(ctx, req2, cID, ch1)) go func() { @@ -415,7 +414,7 @@ func TestStore_Notify_ManyRequests(t *testing.T) { }) }) - testutil.RunStep(t, "end all the requests", func(t *testing.T) { + runStep(t, "end all the requests", func(t *testing.T) { req.client.QueueEvents( newEventServiceHealthRegister(10, 1, "srv1"), newEventServiceHealthRegister(12, 2, "srv1"), @@ -434,7 +433,7 @@ func TestStore_Notify_ManyRequests(t *testing.T) { }) }) - testutil.RunStep(t, "the expiry heap should contain two entries", func(t *testing.T) { + runStep(t, "the expiry heap should contain two entries", func(t *testing.T) { store.lock.Lock() defer store.lock.Unlock() e := store.byKey[makeEntryKey(req.Type(), req.CacheInfo())] @@ -473,7 +472,7 @@ func TestStore_Run_ExpiresEntries(t *testing.T) { store.idleTTL = ttl go store.Run(ctx) - req := &fakeRPCRequest{ + req := &fakeRequest{ client: NewTestStreamingClient(pbcommon.DefaultEnterpriseMeta.Namespace), } req.client.QueueEvents(newEndOfSnapshotEvent(2)) @@ -505,3 +504,10 @@ func TestStore_Run_ExpiresEntries(t *testing.T) { require.Len(t, store.byKey, 0) require.Equal(t, ttlcache.NotIndexed, e.expiry.Index()) } + +func runStep(t *testing.T, name string, fn func(t *testing.T)) { + t.Helper() + if !t.Run(name, fn) { + t.FailNow() + } +} diff --git a/agent/testagent.go b/agent/testagent.go index 6b1c2ed518a94..c309513a60703 100644 --- a/agent/testagent.go +++ b/agent/testagent.go @@ -88,6 +88,8 @@ type TestAgent struct { // NewTestAgent returns a started agent with the given configuration. It fails // the test if the Agent could not be started. +// The caller is responsible for calling Shutdown() to stop the agent and remove +// temporary directories. func NewTestAgent(t *testing.T, hcl string) *TestAgent { a := StartTestAgent(t, TestAgent{HCL: hcl}) t.Cleanup(func() { a.Shutdown() }) diff --git a/agent/txn_endpoint.go b/agent/txn_endpoint.go index 4e898bfce874c..c75d30bcc6be3 100644 --- a/agent/txn_endpoint.go +++ b/agent/txn_endpoint.go @@ -88,8 +88,7 @@ func (s *HTTPHandlers) convertOps(resp http.ResponseWriter, req *http.Request) ( // Check Content-Length first before decoding to return early if req.ContentLength > maxTxnLen { - return nil, 0, HTTPError{ - StatusCode: http.StatusRequestEntityTooLarge, + return nil, 0, EntityTooLargeError{ Reason: fmt.Sprintf("Request body(%d bytes) too large, max size: %d bytes. See %s.", req.ContentLength, maxTxnLen, "https://www.consul.io/docs/agent/config/config-files#txn_max_req_len"), } @@ -101,8 +100,7 @@ func (s *HTTPHandlers) convertOps(resp http.ResponseWriter, req *http.Request) ( if err.Error() == "http: request body too large" { // The request size is also verified during decoding to double check // if the Content-Length header was not set by the client. - return nil, 0, HTTPError{ - StatusCode: http.StatusRequestEntityTooLarge, + return nil, 0, EntityTooLargeError{ Reason: fmt.Sprintf("Request body too large, max size: %d bytes. See %s.", maxTxnLen, "https://www.consul.io/docs/agent/config/config-files#txn_max_req_len"), } @@ -110,16 +108,15 @@ func (s *HTTPHandlers) convertOps(resp http.ResponseWriter, req *http.Request) ( // Note the body is in API format, and not the RPC format. If we can't // decode it, we will return a 400 since we don't have enough context to // associate the error with a given operation. - return nil, 0, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Failed to parse body: %v", err)} + return nil, 0, BadRequestError{Reason: fmt.Sprintf("Failed to parse body: %v", err)} } } // Enforce a reasonable upper limit on the number of operations in a // transaction in order to curb abuse. if size := len(ops); size > maxTxnOps { - return nil, 0, HTTPError{ - StatusCode: http.StatusRequestEntityTooLarge, - Reason: fmt.Sprintf("Transaction contains too many operations (%d > %d)", size, maxTxnOps), + return nil, 0, EntityTooLargeError{ + Reason: fmt.Sprintf("Transaction contains too many operations (%d > %d)", size, maxTxnOps), } } @@ -133,9 +130,8 @@ func (s *HTTPHandlers) convertOps(resp http.ResponseWriter, req *http.Request) ( case in.KV != nil: size := len(in.KV.Value) if int64(size) > kvMaxValueSize { - return nil, 0, HTTPError{ - StatusCode: http.StatusRequestEntityTooLarge, - Reason: fmt.Sprintf("Value for key %q is too large (%d > %d bytes)", in.KV.Key, size, s.agent.config.KVMaxValueSize), + return nil, 0, EntityTooLargeError{ + Reason: fmt.Sprintf("Value for key %q is too large (%d > %d bytes)", in.KV.Key, size, s.agent.config.KVMaxValueSize), } } diff --git a/agent/txn_endpoint_test.go b/agent/txn_endpoint_test.go index 4b529d5deeac1..2f9d6fbca1548 100644 --- a/agent/txn_endpoint_test.go +++ b/agent/txn_endpoint_test.go @@ -12,7 +12,6 @@ import ( "github.com/hashicorp/raft" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" "github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/api" @@ -32,7 +31,10 @@ func TestTxnEndpoint_Bad_JSON(t *testing.T) { req, _ := http.NewRequest("PUT", "/v1/txn", buf) resp := httptest.NewRecorder() _, err := a.srv.Txn(resp, req) - require.True(t, isHTTPBadRequest(err), fmt.Sprintf("Expected bad request HTTP error but got %v", err)) + err, ok := err.(BadRequestError) + if !ok { + t.Fatalf("expected bad request error but got %v", err) + } if !strings.Contains(err.Error(), "Failed to parse") { t.Fatalf("expected conflicting args error") } @@ -61,19 +63,11 @@ func TestTxnEndpoint_Bad_Size_Item(t *testing.T) { req, _ := http.NewRequest("PUT", "/v1/txn", buf) resp := httptest.NewRecorder() _, err := agent.srv.Txn(resp, req) - - if wantPass { - if err != nil { - t.Fatalf("err: %v", err) - } - } else { - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 413 { - t.Fatalf("expected 413 but got %d", err.StatusCode) - } - } else { - t.Fatalf("excected HTTP error but got %v", err) - } + if err, ok := err.(EntityTooLargeError); !ok && !wantPass { + t.Fatalf("expected too large error but got %v", err) + } + if err != nil && wantPass { + t.Fatalf("err: %v", err) } } @@ -144,19 +138,11 @@ func TestTxnEndpoint_Bad_Size_Net(t *testing.T) { req, _ := http.NewRequest("PUT", "/v1/txn", buf) resp := httptest.NewRecorder() _, err := agent.srv.Txn(resp, req) - - if wantPass { - if err != nil { - t.Fatalf("err: %v", err) - } - } else { - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 413 { - t.Fatalf("expected 413 but got %d", err.StatusCode) - } - } else { - t.Fatalf("excected HTTP error but got %v", err) - } + if err, ok := err.(EntityTooLargeError); !ok && !wantPass { + t.Fatalf("expected too large error but got %v", err) + } + if err != nil && wantPass { + t.Fatalf("err: %v", err) } } @@ -219,13 +205,8 @@ func TestTxnEndpoint_Bad_Size_Ops(t *testing.T) { req, _ := http.NewRequest("PUT", "/v1/txn", buf) resp := httptest.NewRecorder() _, err := a.srv.Txn(resp, req) - - if err, ok := err.(HTTPError); ok { - if err.StatusCode != 413 { - t.Fatalf("expected 413 but got %d", err.StatusCode) - } - } else { - t.Fatalf("expected HTTP error but got %v", err) + if err, ok := err.(EntityTooLargeError); !ok { + t.Fatalf("expected too large error but got %v", err) } } diff --git a/agent/ui_endpoint.go b/agent/ui_endpoint.go index 70d5d9def9f52..3524ecf7a1888 100644 --- a/agent/ui_endpoint.go +++ b/agent/ui_endpoint.go @@ -136,7 +136,7 @@ func (s *HTTPHandlers) UINodeInfo(resp http.ResponseWriter, req *http.Request) ( // Verify we have some DC, or use the default args.Node = strings.TrimPrefix(req.URL.Path, "/v1/internal/ui/node/") if args.Node == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing node name"} + return nil, BadRequestError{Reason: "Missing node name"} } // Make the RPC request @@ -264,7 +264,7 @@ func (s *HTTPHandlers) UIGatewayServicesNodes(resp http.ResponseWriter, req *htt // Pull out the service name args.ServiceName = strings.TrimPrefix(req.URL.Path, "/v1/internal/ui/gateway-services-nodes/") if args.ServiceName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing gateway name"} + return nil, BadRequestError{Reason: "Missing gateway name"} } // Make the RPC request @@ -304,12 +304,12 @@ func (s *HTTPHandlers) UIServiceTopology(resp http.ResponseWriter, req *http.Req args.ServiceName = strings.TrimPrefix(req.URL.Path, "/v1/internal/ui/service-topology/") if args.ServiceName == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing service name"} + return nil, BadRequestError{Reason: "Missing service name"} } kind, ok := req.URL.Query()["kind"] if !ok { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing service kind"} + return nil, BadRequestError{Reason: "Missing service kind"} } args.ServiceKind = structs.ServiceKind(kind[0]) @@ -317,7 +317,7 @@ func (s *HTTPHandlers) UIServiceTopology(resp http.ResponseWriter, req *http.Req case structs.ServiceKindTypical, structs.ServiceKindIngressGateway: // allowed default: - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: fmt.Sprintf("Unsupported service kind %q", args.ServiceKind)} + return nil, BadRequestError{Reason: fmt.Sprintf("Unsupported service kind %q", args.ServiceKind)} } // Make the RPC request @@ -578,7 +578,7 @@ func (s *HTTPHandlers) UIGatewayIntentions(resp http.ResponseWriter, req *http.R // Pull out the service name name := strings.TrimPrefix(req.URL.Path, "/v1/internal/ui/gateway-intentions/") if name == "" { - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Missing gateway name"} + return nil, BadRequestError{Reason: "Missing gateway name"} } args.Match = &structs.IntentionQueryMatch{ Type: structs.IntentionMatchDestination, @@ -608,14 +608,14 @@ func (s *HTTPHandlers) UIMetricsProxy(resp http.ResponseWriter, req *http.Reques // Check the UI was enabled at agent startup (note this is not reloadable // currently). if !s.IsUIEnabled() { - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: "UI is not enabled"} + return nil, NotFoundError{Reason: "UI is not enabled"} } // Load reloadable proxy config cfg, ok := s.metricsProxyCfg.Load().(config.UIMetricsProxy) if !ok || cfg.BaseURL == "" { // Proxy not configured - return nil, HTTPError{StatusCode: http.StatusNotFound, Reason: "Metrics proxy is not enabled"} + return nil, NotFoundError{Reason: "Metrics proxy is not enabled"} } // Fetch the ACL token, if provided, but ONLY from headers since other @@ -667,7 +667,7 @@ func (s *HTTPHandlers) UIMetricsProxy(resp http.ResponseWriter, req *http.Reques u, err := url.Parse(newURL) if err != nil { log.Error("couldn't parse target URL", "base_url", cfg.BaseURL, "path", subPath) - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Invalid path."} + return nil, BadRequestError{Reason: "Invalid path."} } // Clean the new URL path to prevent path traversal attacks and remove any @@ -716,7 +716,7 @@ func (s *HTTPHandlers) UIMetricsProxy(resp http.ResponseWriter, req *http.Reques "path", subPath, "target_url", u.String(), ) - return nil, HTTPError{StatusCode: http.StatusBadRequest, Reason: "Invalid path."} + return nil, BadRequestError{Reason: "Invalid path."} } // Add any configured headers diff --git a/agent/uiserver/README.md b/agent/uiserver/README.md deleted file mode 100644 index ee698a5bdf2e1..0000000000000 --- a/agent/uiserver/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# uiserver - -The contents of `dist/` are generated by `make ui` in the root of this repo -which compiles `ui` assets and copies them here. - -A CI job (`publish-static-assets`) will detect any diffs in `ui` files and -commit the compiled files. Avoid committing files manually to `dist/`. \ No newline at end of file diff --git a/agent/uiserver/bindata_assetfs.go b/agent/uiserver/bindata_assetfs.go new file mode 100644 index 0000000000000..04c749595a536 --- /dev/null +++ b/agent/uiserver/bindata_assetfs.go @@ -0,0 +1,986 @@ +// Code generated by go-bindata. +// sources: +// pkg/web_ui/assets/apple-touch-icon-01cd4680782fbb5bc02301347df9903d.png +// pkg/web_ui/assets/codemirror/mode/javascript/javascript-77218cd1268ea6df75775114ae086566.js +// pkg/web_ui/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js +// pkg/web_ui/assets/codemirror/mode/xml/xml-10ec8b8cc61ef0fbd25b27a599fdcd60.js +// pkg/web_ui/assets/codemirror/mode/yaml/yaml-3f129a000349e3075be0f65719884b61.js +// pkg/web_ui/assets/consul-acls/routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js +// pkg/web_ui/assets/consul-acls/services-8b6b2b2bea3add7709b8075a5ed5652b.js +// pkg/web_ui/assets/consul-nspaces/routes-f939ed42e9b83f9d1bbc5256be68e77c.js +// pkg/web_ui/assets/consul-nspaces/services-8b6b2b2bea3add7709b8075a5ed5652b.js +// pkg/web_ui/assets/consul-partitions/routes-cba490481425519435d142c743bbc3d3.js +// pkg/web_ui/assets/consul-partitions/services-85621f245f195fe1ce177064bfb04504.js +// pkg/web_ui/assets/consul-ui/routes-7726cc49168b83dcd93c923c97ebe93d.js +// pkg/web_ui/assets/consul-ui/routes-debug-8f884a3e3f7105d43b7b4024db9b4c99.js +// pkg/web_ui/assets/consul-ui/services-a17470cdfbd4a4096117ac0103802226.js +// pkg/web_ui/assets/consul-ui/services-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js +// pkg/web_ui/assets/consul-ui-1931ddc38430fffd3fdb3a7ec5b01c18.css +// pkg/web_ui/assets/consul-ui-60e32dd57229711d8752c463a9d423d3.js +// pkg/web_ui/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js +// pkg/web_ui/assets/encoding-cdb50fbdab6d4d3fdf574dd784f77d27.js +// pkg/web_ui/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js +// pkg/web_ui/assets/favicon.ico +// pkg/web_ui/assets/favicon.svg +// pkg/web_ui/assets/init-21ea65714d133467454b601efc15e2dd.js +// pkg/web_ui/assets/loading-cylon-pink.svg +// pkg/web_ui/assets/metrics-providers/consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js +// pkg/web_ui/assets/metrics-providers/prometheus-5f31ba3b7ffd850fa916a0a76933e968.js +// pkg/web_ui/assets/vendor-69ef69e98b7d14d1513f8056b6c6b48d.css +// pkg/web_ui/assets/vendor-a8ab945788d03426b8cd1080cb42495f.js +// pkg/web_ui/index.html +// pkg/web_ui/oidc/callback +// pkg/web_ui/robots.txt +// pkg/web_ui/torii/redirect.html +// DO NOT EDIT! + +package uiserver + +import ( + "bytes" + "compress/gzip" + "fmt" + "github.com/elazarl/go-bindata-assetfs" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _web_uiAssetsAppleTouchIcon01cd4680782fbb5bc02301347df9903dPng = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x8b\x67\x34\x1b\x0e\xd4\xb8\x13\x7b\xaf\xda\xbb\xa8\xbd\xc5\x5e\x41\xec\x59\xb3\xa5\x5a\x6a\xc5\x1e\x55\xbb\x84\xda\x45\x51\xbb\x45\x8a\xd8\xa3\x2a\x76\x51\xa3\x66\x11\xb3\xb5\xd5\x4c\x62\xef\xcd\xff\xfc\xfe\x1f\xde\xf7\xf3\x7b\xcf\xb9\xe7\xdc\xf3\x3c\xcf\x4d\x30\x31\xd2\x26\x27\x61\x26\x01\x00\x00\xe4\xba\x3a\x10\x53\x00\x00\x80\xfc\x6f\x89\x08\x00\x00\x80\xf2\x28\x81\x24\x00\x00\x00\xbe\x31\xd5\x56\x07\xd4\x8e\xb1\x62\x00\x00\x00\xc4\xe9\x99\xae\xb3\xa1\x21\x40\x10\x00\x00\x10\x01\x80\x71\xae\x00\xbc\xff\x12\x00\x00\xc0\x0c\xf8\x6f\x70\xe1\x40\x00\xee\xff\x27\x40\x00\x00\x8e\xf3\x3f\x16\x09\xc7\xfd\xdf\xfb\xbf\xd0\x72\x26\x2b\x18\x00\x60\x69\xd4\x85\xa8\x99\x07\x01\xf7\x6c\x09\x33\xcc\x35\x67\x3b\xf3\x4b\xdb\xcb\xf8\x5c\xa8\x9e\x76\x47\x73\x0a\x6a\x41\xf0\xe9\x9c\x92\x39\x05\xb1\xc3\x79\xe2\x30\x57\x89\xdd\xfb\xfe\x57\x17\xd5\x6d\xec\xd3\xca\x82\x9c\xb1\x6f\x2f\x5e\x3d\xf5\x7f\x9b\x29\x6d\x0f\xa6\x15\x87\x11\xab\xfd\xe6\xe2\xa2\x71\xce\x51\x9a\x92\x62\x2b\xbb\xe9\xba\xe8\xfe\x36\x8a\xfa\xd7\x11\x5e\x87\x45\xb4\x6d\x9f\x62\xf6\x2f\xb0\x1d\x6d\x6f\x77\x76\xb0\x21\x16\x17\xe1\x7f\xd2\x20\xc0\xc7\x3d\x38\xf4\xf5\xb0\x29\xae\x3d\xaa\x51\x2a\xfa\x54\x61\x4e\x80\x08\xcc\x4e\x80\x94\x08\x6c\x53\xa9\xa8\xe9\x80\x07\xc7\x27\x10\x76\x02\x02\xa1\xfa\x6f\xcb\xa0\x49\x00\xe4\x4f\x18\x42\x98\x13\xe0\x59\xb1\x4f\x9b\x4c\x0d\xa3\x67\xfc\x96\x81\x8f\x07\x17\x99\xc9\x2f\x92\xc0\x41\xe1\xe0\x66\x7d\x87\x01\x90\x88\x36\x33\x90\x16\xc0\xda\xee\xa7\x29\x3d\x15\xac\xc9\x3c\x30\xb1\x9f\x08\x4c\x4a\xf6\x6c\x18\x07\x07\x95\x85\x35\x9a\x60\x6c\x16\x57\x0b\xa7\xd7\x41\x06\x6a\x84\x39\x48\xf5\xc9\x82\x34\xc8\x56\x42\x99\xe7\xe1\x65\x35\xa4\xe8\x96\xd3\xe5\x09\xf2\xa1\x67\xac\x70\x3e\xa0\x6e\xd8\x84\xa2\x1c\xeb\xaa\xb0\x30\x20\x8e\xf2\x55\xb8\x98\x1c\xee\x4b\x1f\x0b\xda\xf7\x55\xa5\xb4\x8b\x33\x4f\x56\x2b\xfb\x2f\x6c\x05\x7f\x36\x68\xb3\xc9\xe9\xdf\x5e\x09\x38\x9f\x54\xb1\xf6\x74\xab\xca\xe2\x84\x60\x6d\x1e\x1f\xef\x11\xc4\x87\x6b\xd7\x25\x53\xdd\x85\xe3\x9e\x72\xfa\x3c\x4f\x6c\xaf\xc4\x53\x7a\xef\xd6\x2d\xd5\xc2\x11\x14\x47\x8e\x77\x70\xb8\xd4\x1d\x33\x10\xed\xd8\x0c\x03\xf8\x33\xdf\xf0\x58\xbf\xa7\xba\xf7\x27\x8f\x56\xb1\xc1\xfd\x37\x1e\x1e\x7d\xb9\x35\x0b\x42\x5c\x72\x1c\x9f\xd6\xa5\xc2\xf6\x14\xc3\xbc\x0f\x3f\x2e\x32\x7c\x41\xc4\xdc\x66\x8a\x07\x25\xe3\xa0\x16\x14\xf8\x3b\x2b\xf0\xdb\x56\x6c\x93\xeb\xc4\x7c\x41\xf7\x33\xab\x4b\xb1\x0d\x0c\x65\x66\xcc\xad\x77\xc5\xb1\xe0\x7f\x68\xfb\xd5\xe5\x9a\xf9\x43\x85\x13\x13\xd4\x2c\xcc\x68\xf5\x8b\xec\xe5\xb5\x0b\xea\x6e\x4c\x30\x7e\xd5\xbf\xe7\xf7\x1a\xdb\x77\x21\x3c\x23\x66\x60\xe4\x23\x0a\x3c\x97\xe7\x3f\x7f\x1b\x3e\x45\xb4\x8b\x00\xd9\xfa\x2b\x20\x87\x9b\x1f\xbf\x86\x1e\x59\xa5\x26\x5d\x94\x4b\xc2\x27\x44\x03\x5a\x6c\x57\x55\xfd\x5e\xf1\xab\x84\xd2\x5e\x52\xcc\x4d\x41\xb1\x12\x7f\x06\x54\x60\x5a\xab\x04\x0c\x61\x14\x6c\xe3\xc2\x91\x7f\xaf\xb5\xb6\x62\xa5\xd5\xf1\xf1\xdf\xef\xc0\x83\x26\x9f\x52\x31\xca\xe2\xb0\xbe\x0c\x15\x86\x3e\x67\x47\x0d\x99\xd0\x46\x3d\x3c\xa7\x60\x1b\xef\xa4\x3c\xea\x0f\xe0\x5e\x4d\x6a\xa7\xa8\x3d\xe6\xe2\xcf\x55\x22\x48\x1c\x57\x9a\x3c\xfe\xd9\x24\x0a\xf7\x85\xec\x87\xb9\x32\x21\x1f\xde\x51\x8b\xd6\xbf\xf5\x25\x4c\xa3\x16\xf2\xb7\xa0\xd7\xc0\xe0\x0f\xa8\x1f\x45\x73\x03\x48\xaa\xe5\x5f\xdb\xd0\xa0\x96\x3e\x58\xaa\x2d\x7c\x91\x45\x90\x53\x72\xe3\xe8\x7b\xe7\x2f\xbe\xdd\x34\xf1\xed\xc5\x3b\xe4\x90\x86\x78\x5b\x80\xea\x56\x4c\x61\x29\x77\xe6\x94\xa3\x17\x9d\x44\x69\x75\xe1\x13\x8b\x26\x96\x3f\xec\x57\xff\xde\x7d\xbd\xbd\x3e\xca\x9a\xff\x56\x8f\x07\xff\x94\xc6\x88\x54\x6d\x35\xc9\xe3\xb3\xf1\x9c\x89\x3a\xa3\x1c\x62\x3a\x54\xbb\xca\xe4\x53\x9b\x60\x92\x23\xef\xae\x09\x6e\xf8\x80\x01\xb2\x3d\x3f\x7a\x04\x5a\xb9\xc3\xe9\xf3\x71\x80\xe8\xdc\xd3\x1f\xee\x77\xb1\x98\x2f\xfb\x67\x21\x97\x0a\x1e\x6c\x4f\xbb\x26\xa7\x61\xfb\x97\xdb\xed\xa8\xf3\xbe\x05\x9b\xfc\x88\xd3\x66\x04\x46\x1a\x2e\xbd\x9b\x7e\xa2\xad\x31\xf7\xc4\xc1\xf0\x06\x05\xd5\x03\xf3\x29\xa8\xa3\xfc\xb7\x1b\xa8\xac\xcf\xf3\x31\x6a\x8e\x7d\x04\x41\x17\x6c\x80\x19\x29\xd1\x8c\x1f\x0f\x49\xe5\xaf\x64\xf2\x0d\x08\xd1\x68\xd9\x2e\xf5\xf5\x1a\x63\x0d\x56\xe5\xd5\xe8\x6f\x0d\x80\xd6\x46\xcb\x95\x50\x20\xca\xbc\xcf\xe0\xb5\x20\x38\xb0\xf3\x90\x1a\x39\x16\xe6\x59\x55\x58\x9f\x5b\xed\x61\x6a\xcb\xc6\x2e\x6b\x7e\xfb\x8f\x8c\x5f\x61\xcf\x64\x0a\xf9\x93\x16\x66\x14\xa0\x0d\xbf\x12\x7b\x88\x15\xf5\xe7\xa2\xe9\x59\xc1\x79\x82\x66\x30\xbd\xbf\x99\x02\xbc\xe8\xa7\xf4\x91\x54\x82\x0b\xe0\x94\xfc\x9b\x1f\x78\x7c\xdd\xcb\x7b\xaf\x2c\xe0\xb6\xe8\x05\x5c\xe9\x0e\x55\x3f\x53\xfe\x24\x91\xde\xff\x57\xe5\x6f\x2c\x81\x7f\x51\x23\x29\x73\x6d\x30\x59\x51\x8b\x3d\x17\x24\x82\x94\x96\xac\xf2\x7d\xb8\xb1\xa1\xec\xa9\x8e\xe7\x5f\xf2\x3b\x88\x3e\x15\xb6\x2e\x84\xec\xf5\x0e\xf3\xe9\x81\xee\x57\x20\x2a\xac\xed\x76\xde\x8c\x9c\xdc\x19\xcb\xab\x81\xd3\x56\x56\x8f\xcb\x5c\xab\x25\xbe\xd0\x37\x3a\x85\xee\x62\xb0\x2e\xac\xed\xdc\x09\x83\xa3\xc4\x8a\x3f\xfc\x03\x18\x4e\x4c\xd1\xe4\x48\xe4\x59\xc7\xdf\xd3\xc3\x4d\xea\x2a\x17\xc6\x81\x0f\x12\x1a\x67\x56\x5a\xb1\x04\xb1\x38\x20\xfc\x62\x99\x55\x10\x77\xe7\x73\x0f\x87\x11\xb4\xa2\xa8\xa6\xe0\xbd\x0b\x17\x6d\x41\x10\x67\x76\x1b\xb2\xbc\x4f\x1c\x56\x2a\xff\xa6\x17\x29\x4f\x35\x40\x6d\x1d\x2f\x21\x6c\x22\x71\xe7\xcf\xaf\x70\x27\xee\xc0\xcf\x6d\x46\xea\x00\x60\xd6\x7d\xc6\xec\x1d\x3c\x3c\x6d\x17\x00\x2f\xcb\xab\xaa\x25\x5b\x94\x76\x42\xa7\x24\x6c\x48\xa0\x0d\x0e\x84\x89\x57\x7b\x33\xf4\x43\x80\x63\x1a\x9f\xd2\xe4\x50\x79\x21\x5c\xd1\x62\x5c\x95\xdd\x1c\x62\x77\x2c\x13\x52\xef\x27\x7e\xe0\x8d\x94\xdd\x13\x24\x8e\xcb\xeb\xf1\x26\x25\x99\xfd\xa6\x82\x79\x5d\xed\x8c\x50\xbd\x6c\x1c\x93\xb3\x4c\xfb\x9a\xe0\x62\x27\x7d\x49\xc1\xcc\xe3\x49\x1e\x7a\x0e\x56\x67\x0c\x93\xbf\xc5\x97\xac\x35\x30\xc3\x8b\x40\xd5\xbf\xb5\x49\xfd\xe9\x2c\x94\x60\xe8\x78\x16\x82\x79\x23\x19\xe9\xa1\xaf\x40\xa4\xd9\x98\xf1\x22\xe8\x0b\x85\x74\x55\x9d\xe9\xc5\x5b\xf4\xaa\x50\xa1\x4e\x3b\x0c\xfb\xb9\xe7\x9c\xc2\xa8\x90\x30\x2c\x6e\x8f\x3c\xc6\xe1\x9c\x50\x55\x65\x4f\x51\x28\x31\xc7\x32\x07\x2c\x28\x91\xb0\x4b\xc0\xf6\xad\x6d\xc5\x86\x9c\x98\x75\x2e\x38\x1e\x29\x14\x6f\xf4\xe0\x4c\x67\x0b\x64\xbb\x0b\x51\x9e\x36\x0e\x9d\xfe\xd6\xc9\x04\x4a\xe6\x14\x84\x15\x1d\xc5\x45\x46\x4c\x87\x0f\xea\x6e\x4f\x20\x0a\x05\x50\xd9\x4d\x77\x09\x21\x8f\xa3\x64\x1c\x9e\x68\x96\xb1\x93\x64\x36\x17\x8c\x62\xcf\x5f\xec\x57\xb1\xc0\x31\x8f\x7d\x4e\x34\x29\x99\x24\x69\x16\x12\xcc\xe2\x8a\xa4\xb4\xd4\x25\xb4\x7c\x5b\x08\xcd\xfd\x30\x44\xad\x99\x7d\xb3\x32\x3a\x3f\xf7\x43\xdc\x63\x4a\x6f\x43\x22\xeb\x09\xc1\x33\x85\xe1\xa4\xab\xa0\xc0\xe9\x44\x15\x58\x7f\xbc\x87\x75\x01\x69\x44\xab\x91\x97\xaa\x9f\x80\x36\x0b\xd1\xa9\xf9\x2b\x99\x4d\xbc\x2d\x33\x92\x19\xf2\x44\x7b\xf3\x9b\xb0\x24\xb7\x88\x63\x36\x74\x37\x26\x81\x59\x40\xc9\x4d\x75\xc8\x62\x9a\x6c\x4c\xbb\x75\xbe\x82\x14\x6e\xc3\x11\x4e\xbe\xfe\x90\xb5\x35\x99\xbc\x10\x9c\x67\x4d\xbb\x46\x64\x11\xf0\xcb\x9b\x47\xc1\xc6\x8b\xce\xdd\x84\x1a\x5f\x11\xa9\x7a\x25\x63\x2a\x23\x3c\xee\x8e\xe8\x8b\x40\xbf\x34\x79\xf3\xf0\xab\x34\xd9\x04\xe3\xae\xbe\x0f\x2b\xe5\xbb\xba\x16\x90\x22\x7f\x24\xa3\x49\x19\xb4\x69\x55\x40\x56\xd0\x71\x73\xd1\x98\x5c\xd1\x39\x10\xe1\x1a\x4d\xcf\xca\xaf\xce\xf1\x4e\xc8\xc6\x9b\xc3\xf4\x74\x56\xc9\x3f\xd7\x6b\x9c\xe0\x3b\x9d\x85\x49\xaa\x18\xfc\x93\x6e\x79\x97\x3f\x3d\x44\x1c\x0b\xf1\xf6\xe5\xc2\x04\xfd\x22\x5f\x7f\x0c\xa3\x54\xb7\x4c\x3f\x1c\x50\x05\x8f\xbc\x3b\x79\xe3\x97\x6e\x92\x63\xb1\x57\x3d\xd2\x1d\xf9\x74\xc5\x92\xa6\x16\xb6\x1f\xe6\xcb\x84\x5c\x54\x7d\x15\x78\x43\xb7\x3b\x67\xec\xd7\xe4\x7b\x60\x59\xdc\x2e\x2a\x4c\xab\xe3\x1f\x0b\xbf\x32\x1e\x57\xbb\x88\xc3\x68\xbb\xfb\xe1\xd6\xe4\x4b\xcd\x1c\x76\x8e\x5e\xfd\x8d\x65\x81\x87\xe6\x29\xda\x4f\xb5\x5e\x68\x70\x31\x0e\x6b\x1b\x8f\xd6\x0a\x14\xc8\xd1\x08\xf2\x5f\xf7\x14\x99\x3f\xab\x88\x75\x7b\x18\xe0\x82\x3e\x2c\xa8\xeb\x2c\xc1\x8f\x76\xad\x63\xec\x0a\x78\xf7\x1c\x4b\xb3\x1a\x87\x5d\xbc\x60\x5e\x6d\xef\xd8\x6b\x11\xb5\xd3\xa3\x5e\x63\x5c\xaa\xe6\xcb\x7e\xf4\xb4\x5c\x36\xa9\xf9\xd1\xa5\x9c\x86\x81\x4a\x42\x47\x37\xd4\xf8\xcf\x96\x8a\x89\xb6\xe6\x25\x47\xf2\x60\xa4\xf0\xa1\x72\xf2\xa9\x87\xd2\xcf\xd4\x02\xaf\x74\xf7\xaa\x85\x3c\x46\xfc\x56\xcc\x56\x78\x0d\xcf\x86\xcb\x0a\x63\x77\xb0\x16\xbf\xaf\x23\x6f\xcd\xf8\x71\xd5\x93\x5e\x44\xf8\x2a\x76\xd9\x0d\x02\x0c\xf2\xeb\x29\xff\x54\x90\x87\x82\xb5\xd7\xbf\x61\x6e\x09\x9b\x64\xd2\x73\x05\xa4\x56\xfe\x26\xe7\x22\xdc\x5c\xb8\x73\x8e\xea\x2c\x89\x14\x49\xfd\x95\xce\x96\x2d\x27\x39\x16\x1d\x74\xe8\x5c\xea\x39\x86\xcb\x3c\x8b\x99\xf5\x95\xbb\xd1\x52\x6f\xb6\x79\x8a\x90\x99\xe1\xf5\x49\xcc\xa9\x7b\x4d\x1b\x57\xbc\x91\x73\x76\xed\xef\xe6\xfc\x65\xd6\x5b\xb3\x98\xc4\xfe\xf1\x8e\x1f\x23\x2b\xf5\x29\xcb\x83\x54\xa8\xc9\x34\x86\x0e\xfa\x4b\x44\x8a\x37\xd5\x4a\x7d\x31\x1b\xa2\x73\x2a\x81\xf5\x59\xd7\xc3\x9d\x0c\xa3\x0c\x18\xdd\x65\xa8\xcd\x9f\xef\x2c\x76\xe9\x51\x5f\x29\x3b\x87\x88\xb6\xa6\x79\x91\x2a\xdf\x01\xaf\x55\xbd\x8c\x94\xfb\x36\xa4\xcc\xc0\x84\xbe\xee\x4d\x65\x88\x4f\x09\x6b\x73\x5e\xd8\xfd\x38\xbb\x70\xbc\xee\x24\x57\x54\xf4\xb7\x46\x40\xda\xc3\x60\x66\x4a\xb0\xfe\x06\xfd\x68\x3b\xab\x14\x78\x47\x5a\x61\x2a\x56\x77\x14\x37\x1b\x10\x69\x4d\xe4\x40\xba\xaa\xf5\xfc\xf2\x44\xfa\xbb\x50\x42\xf5\xbd\x66\xc0\x5c\x18\xa9\x24\xae\xff\x1f\x96\xc2\x1d\x49\x05\xab\x5b\xdf\xa2\x0d\x8f\xc2\x3a\xb5\xbe\xb7\xc7\x22\x60\xaf\x1a\xd3\x79\x97\xdc\xec\xc3\xcb\x66\x67\x02\xf4\x18\x83\x4a\xc6\x9c\xc1\x5e\x22\x5d\x71\x19\xeb\x26\xf6\x51\xcf\x00\x0e\x45\x1d\xe1\x49\xe6\xc8\x8a\x42\x59\x39\xfb\x6c\x0f\x1e\x0a\xa2\xce\x6e\x3b\x92\xbd\x17\xdf\xd4\x30\x52\x57\xf8\x73\xfe\xe5\xda\x7d\x05\x3d\xb8\x56\x71\x25\x32\xb4\x84\x7d\xe8\x7a\x4e\xd1\xdf\x6e\xf6\xc4\xfa\x8b\x23\x0e\x9a\x62\xac\x58\x2a\x99\x66\xe6\xe2\x76\xec\x58\x60\x04\x89\xf6\xa9\x39\x78\x9a\xd8\xb9\xde\xb7\x94\xa6\x0f\x55\x6e\xc3\x73\xa0\x7b\xae\xef\x65\x48\xeb\x06\x4e\xe3\xff\x7a\xd1\xf5\x34\x28\xb3\x6d\x0d\x72\x25\x28\x63\x34\x3d\x27\xbe\x52\xe5\x2a\xfb\x8d\x8c\xbb\xaf\x21\x01\x57\xfb\x58\x6f\x97\x9b\x61\xff\xef\x77\xfa\x51\x59\xcb\xc1\x57\x1a\x43\xef\xa3\xe6\x09\x68\x1e\x07\xda\x2d\xaa\xb9\x79\x73\xd7\x5a\xd9\x03\xe7\xc5\x7d\x67\x32\xd4\x17\x8a\xbd\xf7\x21\x90\x83\xb9\x0e\xfa\xdc\x6c\x5e\xb5\xee\xf0\xf6\xca\x72\xb5\x7b\xc4\x3c\xee\x75\x8d\xd8\xc6\x9f\x5a\xb5\xa1\x63\xf7\x54\xb0\x49\xfc\x3e\x3d\x5c\x2d\x66\x8d\xa6\x57\x68\x56\x7d\x37\x5b\x64\x55\xf8\x54\xbd\x5b\xa5\xdd\xc3\xd6\x77\x8d\xb1\xac\x5c\x00\xbe\xce\x92\xd7\xa2\x70\x60\x56\xa0\xdc\x80\x30\x40\xb1\x05\x0b\xd3\xc1\xe3\xfa\x34\x2e\x32\x5e\x0a\x57\x0d\x05\x78\x1b\x6e\xa3\x6c\x49\xaf\x24\x76\xcd\xc0\xee\x4c\xb1\x46\xc4\xd4\xf4\x3a\x8d\xb0\x52\x18\xc5\xbb\x3e\x31\x21\x8b\x23\xc8\xfa\x53\xb2\x12\x66\xcb\xb0\xd9\x01\x9c\x3c\x60\x5e\x98\xbd\x80\x06\x1d\xe5\x57\xa7\xb6\x49\x7d\xa3\xd5\xa7\x99\xe5\xbd\x8e\xf4\x28\x32\xd4\xd7\xcd\x95\x03\x2a\x6c\xef\x24\x85\x26\x1f\x07\xd9\x98\xa9\xc3\xf6\xb5\xdd\x5c\xb8\xef\xc1\xef\xff\x9c\x3d\x1e\x48\x4c\x40\xe5\x0d\x4f\x5d\x25\x44\x99\xb7\x01\x16\x00\x7b\x79\x25\x95\x5d\x7a\x93\xe6\x3e\x56\x39\x31\xff\x82\x0c\x7a\xa4\x07\x7a\xde\xb4\xe3\x8a\xfd\xeb\xaa\x96\x9f\xb9\x84\xc3\xc7\xd1\x83\x9d\x5d\xeb\x4c\x12\x01\x2b\xfd\xed\xab\xc4\x0a\x1f\x4b\x90\x4e\xcf\xe0\xa1\x94\x6e\x5f\x0c\xcd\x66\x24\x54\x1c\xe6\xdc\x31\x7e\xb6\x5d\xda\x73\xc8\x89\x4a\x29\xe0\x83\xbe\x8f\x9c\xdd\x44\x24\xe1\x0d\x6a\x10\xea\x84\xed\x0b\x92\xc3\x5c\x7c\x44\xbc\xe4\xc8\x7e\x06\x90\x65\x46\xe9\xcc\xcc\xf4\xdf\x63\xd9\x0d\xd4\xd8\xac\xcf\xef\x2c\x39\x5f\xa7\xa8\xaf\xc4\xab\x25\x3e\x3c\x6e\xf7\x69\x48\xfe\x72\x63\xf6\xc6\x30\x44\xfc\xb2\xc8\xf1\x98\x91\x3f\xcf\x47\x2e\xa0\x5a\xa3\x21\x16\x4a\xc3\x33\xf2\xa1\xaa\xf6\x10\xca\x43\xf7\xc5\x37\xcd\x39\xf9\xcf\xae\x16\x1a\xbd\xdc\x81\xd6\x4f\xa8\x33\x26\x16\x9a\x3e\x37\x42\x4c\xf7\xb6\xd4\x7a\xf1\x3c\x1e\x53\x1a\x5e\x66\xb1\x3e\xa6\xe3\xa9\x7f\x57\x61\x2a\x17\xc2\x68\xce\x19\x07\xf2\x0c\xdc\x4e\xcf\x0a\x7d\x15\x6d\x54\x02\x1c\xe3\xb9\xe7\x8e\x03\x8f\x26\x91\x4a\xeb\x33\x94\x0d\xb1\xe6\x5d\x62\x83\x88\x92\xdd\xb4\x1e\x25\x7e\xaa\x2a\x94\x24\x65\xf6\x8e\xd0\x3a\x12\x75\xf5\x30\x23\x05\x39\x00\x30\xfd\x0d\x2e\xe0\xcb\x4f\x1c\xe4\x53\x20\x9c\x37\x77\x4f\x28\x35\x2e\xd6\x66\x14\x23\x73\x33\x76\xb5\x52\xff\x18\xe7\xe3\x42\xd8\x33\x0c\x15\x1e\xce\xd4\x2c\xc5\xa7\x1a\xfb\x7e\xfd\xb9\x46\x55\xcd\x79\x15\xa3\xbf\xf0\xc2\x4a\xfd\x49\x94\xa2\x07\x07\x92\x79\xd4\x92\xa0\x2b\x49\x6c\x1c\x57\x96\x4b\xd7\xa1\xac\x0f\xb3\xcd\x9c\xde\xc4\x77\x53\x6a\xaf\x07\x26\x4c\x3e\x9e\x37\x2d\xde\x1c\x7c\x59\x0c\xca\x60\x29\xbd\x1a\x7f\x18\xae\x66\x9f\xb4\x42\x3e\x76\xff\xc4\xfa\x35\xfe\xa8\x40\x64\xcf\x2f\x71\x4b\xb8\x98\x19\x45\x5b\x3a\xc6\x8d\x8c\xbd\x2f\xb0\x65\x1c\xf2\xa4\x75\xfd\x7c\xa6\x00\xe2\x16\x28\xb2\x1c\x0a\x47\x7b\xe7\xf3\xc7\x7e\xde\xcf\xe1\x4b\x43\xa2\x67\x8c\xb8\x10\x98\x97\xb7\x99\xd5\x58\x0d\x1d\x4e\xda\x91\xd4\xf7\xf9\x63\x43\x88\x77\xdc\x2c\x01\x62\x77\xd6\x96\xf9\xad\x24\x15\x04\xa0\xba\x89\xb9\x0f\x43\x53\xc9\x5c\x90\xca\xc9\xfb\xdf\x34\xbc\x58\x13\x6c\x02\x2f\x8f\xf5\xb4\x7e\x09\xf9\x77\x95\x37\x5b\x1e\x6d\xd1\x56\xb5\x86\xa1\xd6\xae\x21\x9d\x97\x75\x86\xae\x07\xc5\xa7\x70\x37\xf0\x80\x3c\x42\x8c\xd7\x0a\xc2\x4d\x84\x2f\x96\xba\x22\xa6\x8f\xb1\x6e\xa1\x51\x28\x0c\x2d\x74\xa2\x63\x3a\x30\x7c\x68\xd1\x8b\xce\x5a\x9b\x4c\xec\xc9\x24\xcd\xd6\xd2\xcd\x99\xc6\x6d\x7b\xfa\xb9\xd5\xd8\xba\xb8\x84\x55\xf8\x6f\xd5\xab\x61\xd9\x77\x2a\xbc\xed\x3d\x60\x61\xb5\x77\x85\xd7\xcf\xa1\x53\x0a\xa1\xc0\x43\x66\x61\xd3\xb3\x32\x13\x81\x27\x6b\xfd\xa7\x01\x98\xbe\xb8\x48\x06\xbd\x12\xc0\x55\x65\x23\xd5\x0c\x6c\xec\x92\x74\x46\xbd\x3d\x23\xd4\x84\xaa\x7a\x79\xf2\xbc\x4f\x3d\x7e\x9d\x97\x86\xf2\x6b\xb0\xd3\xce\xef\x3f\xc1\xe6\x8d\x1a\x6c\x9d\xef\x09\x0f\x0e\x95\xff\x30\x88\xc5\xda\x21\x1e\x51\x52\x80\xfd\x1e\x2c\x94\x75\x66\xb6\x2c\xa8\x3c\x3e\xd7\x76\x2e\x3b\x60\x81\xf9\x0e\x98\xd2\x66\x2e\xe9\x83\x8c\xcc\x99\x48\x6a\xaa\x10\x92\x3b\x3a\x33\x6b\xe9\x82\xc9\x64\x90\xcd\xc4\x81\xcc\x61\xb5\x69\xe2\x68\xc9\x4f\x62\x79\x53\x39\x67\xc6\x20\x49\x72\x90\xdc\x66\x39\x24\x85\x56\x9b\x82\xdd\x6b\xd8\xdb\x2c\x78\x87\x87\xcc\xe7\x7c\xb0\x42\xd2\x85\xe9\x0c\xb6\x25\xfe\x9a\x1a\x53\xb4\xac\x4e\xac\xfe\xe8\x1f\x7f\xa0\x74\x54\x5d\xf8\x70\xc7\xd8\xf1\x4e\xff\x7b\x97\xec\x5d\xcc\x2e\x34\xb5\xe2\x76\x3d\xf7\xf9\xdb\x62\xb9\x9e\x79\x42\x31\x7c\x86\x7d\xf1\xd2\x47\x79\xb2\x56\x0f\x9b\x38\xa3\x5a\x2e\x95\x1a\xd2\xf0\x4c\x15\x48\x89\xfb\xb3\x5a\x87\x5a\xb7\xf3\x89\x9e\x56\xff\x55\xb6\xa1\xe5\x2a\x63\xd9\xda\x90\xd5\x92\x8e\x0b\xa1\xec\xc0\xef\x81\x4b\x8f\xac\x80\x7b\x6b\x88\x47\xc3\xa5\x0b\x11\xfb\x67\xab\xc2\x94\x25\x8a\x1d\xbd\x12\x62\xa5\x1f\x97\x37\x11\x9f\xe1\xb7\x95\x9f\xba\x23\xfa\x54\x4c\x60\x8e\x52\xc8\x29\x9d\xd6\xbe\x9b\xf1\x76\xea\xdb\xe2\xc6\x25\x61\xb3\xbd\x91\x34\xb2\x81\x00\x28\xe0\x83\x98\x52\xcf\x4a\x03\xc6\x90\x78\xfb\xb9\xb3\xcf\xa8\xa5\xec\x26\x67\x89\xe3\xe7\x82\xee\xb7\x73\x89\xae\xe1\x63\xcf\x5f\x46\xb3\x46\x32\xe0\x5e\x95\x46\x77\x3d\x13\xf2\x0c\x0b\x0a\xa8\x22\x08\x09\x32\xab\x24\x7d\xc2\xcb\xd5\x45\x1e\x52\x4f\x7f\x06\x4b\xf9\x46\x08\xd2\xa4\xda\x11\xa8\x2f\x64\x01\x2d\x80\x87\xca\xd8\x4e\x1d\x4c\x49\x8a\xc2\xb0\xba\x81\xe4\x33\x55\x56\x4b\x98\xd3\xa1\xb7\x06\x67\x19\xdc\x4c\xf6\xaa\x75\xd3\xd8\xc8\xc7\xd9\x12\x92\xf9\x1f\xbd\xbd\x46\xfd\x13\x47\x7c\x5f\x0a\xe9\xbe\x60\xee\x6d\xa1\x39\x83\xa5\xec\xe7\x44\xc1\x62\x3a\x43\x9e\x24\x1f\x78\xea\x1b\xdb\x58\x1d\x68\xdb\x2e\x3f\x62\xbb\x9e\xad\xd3\x2f\x3e\xa9\x36\x97\x86\xd7\xa4\x72\x28\x64\xef\xb1\xa2\x47\xaa\xab\x06\x57\x53\xa6\x2c\x54\x71\x2d\x6a\x99\x51\x4a\x0a\x8a\x43\xf6\x05\x05\x35\xc6\xac\x3a\x45\xb5\x65\xe8\x3b\x93\x6a\x97\x85\xcc\x59\x11\x80\x48\xef\xeb\x8c\x6a\x53\x63\x6a\x58\x96\xf7\xbb\x99\x2a\xd6\xd5\xd7\x0f\x81\x06\x06\x47\x21\x24\xd4\x6f\xa7\x52\xe8\x29\x39\x52\xfc\xf7\x84\x57\x7f\x38\x66\x57\x6a\xb0\xbe\xa7\x8a\x07\xc7\x9f\xb3\x0c\x8e\xf7\xca\xbe\x16\x0f\x22\xa8\xe7\x13\x35\x9e\x51\x1b\x72\x99\x81\x95\xc2\xb4\x67\xef\x51\x47\xa5\xbb\x69\xd4\x7a\xcc\x5f\x8c\x9f\xc7\x75\x81\xd7\x50\xa4\x11\xad\xa2\x85\x23\x16\xb6\xeb\xfd\xd5\x75\x4c\xcd\xd9\x16\x4b\xf2\x37\xbf\x68\x7f\xcf\x87\x5d\x90\xba\xde\x65\x08\xd0\xd6\xae\xc5\x12\x7f\xc7\xb5\xc5\x0c\xa0\xce\xce\xf5\xe0\x49\xcf\x3b\xd4\xbe\x9f\xf6\xf2\x33\x47\xc8\xc9\x8d\xf8\x79\x8f\x39\xfe\xf1\x1f\x68\xa8\x04\xee\xf5\xe0\x5f\x32\x3a\x30\x4c\xb2\x1b\xb1\xbf\x53\xcc\x73\x1e\xf0\xce\x30\x7d\x4e\x09\xbe\xf9\xb8\xc6\x41\x6b\x00\x5f\x08\x9b\xe8\x05\x3f\x15\xc0\x94\xb0\xd8\x42\x8b\xdd\x65\x34\x96\xd6\xad\x36\x37\xc2\x52\x56\x4b\x0d\xa6\x1e\xc6\x16\x86\x2a\x84\xa2\x1f\xbb\x6c\x98\x19\xdd\xb3\xc7\x0c\x5a\x57\x66\x96\x17\x68\x8c\xcc\xdd\x9b\x57\x55\x5b\xfe\x93\x77\x3b\x25\x4a\x62\x01\x66\xd8\x7f\x28\x43\x81\xca\xe2\x71\xa0\xf2\xa4\xf8\x03\xce\x38\x6f\xea\x04\x91\x32\x2b\xb7\xdb\xdb\xa1\x5d\xa5\xef\x3e\x3e\x46\xb3\xd4\x86\xfa\xf1\x89\x5f\xd0\x97\xa6\xb5\x63\xc6\x5c\x1e\x9f\xfe\x6b\xee\x88\x33\xef\xaa\x22\x00\x25\xa3\xaa\x63\x82\x54\x83\x3c\xea\x5d\xdc\x09\xef\x7c\x82\xa5\x64\xe8\xd8\x55\x5f\x34\x91\x3a\xcb\x2c\x65\x7e\x29\xa6\xaa\x46\xa5\xd7\x39\xd9\xd2\x5c\x6f\x10\x0e\xd2\x73\x2e\x45\x4b\xc4\xb5\x5a\x96\xc7\xb3\x76\x39\xf5\x87\x8d\xf6\x8c\x4d\xe3\x32\x77\xd4\x3e\x23\x55\x4e\xfa\x15\xfe\xba\x30\x06\x64\xa5\xc8\xaf\x1d\x5f\x15\xf5\x2e\x54\x97\x32\x41\xf4\x32\xd1\xb7\xd5\x7c\xf2\x36\x0c\x3a\x17\x98\xc8\x1e\xce\x5d\x15\x6e\x54\x85\xfb\x8b\xb9\xf4\xd8\xa7\x44\x04\xb9\x67\x17\x46\xda\x2f\xf1\x9a\xa7\x95\xbe\x88\x19\xb5\x0f\x0c\xcb\x42\x16\xb1\x4e\x62\xb7\x24\xcb\x1f\x2d\x71\x56\x79\x29\x2a\x5a\x49\x18\x8e\x65\x1b\xab\xb2\x4d\x29\x9c\xd4\x7b\x56\xf6\x64\x7c\xb2\x49\x70\x9c\xcf\xb2\xea\x31\x56\x3f\xfb\x35\x0b\xfd\x24\x6d\x28\x0d\x0f\xae\x99\xd0\x8a\x58\xed\xbd\x4b\xab\x92\x7a\xc7\x7d\x11\xf3\x5d\xdf\xf8\xb7\x85\xc1\xcc\xd5\x1a\xb1\xb6\x4f\xe1\xf2\xa9\xe0\xae\xf0\x04\x2f\x9e\x50\x05\x2a\xf0\x85\xd0\xab\x37\x33\xb0\x2d\xe9\x44\xaa\xc6\xac\xa7\x25\xfe\xc3\xcf\xf8\x95\x23\x40\x8f\xde\xe2\x0c\x90\xc7\x25\xb2\x9c\x8d\x34\x97\xcb\xe1\x09\x69\x48\x72\xfa\x49\x5b\x70\xf9\xf5\x36\xfa\x2d\x99\x49\xc3\x31\x0c\x86\x5f\x3c\xab\x63\x68\x26\x50\xbd\x5f\x9f\x96\xec\x62\xcd\x4a\xcc\x9d\xfa\x9a\xcb\x62\x50\x89\x04\xc9\xb7\x16\x81\xc6\xb3\x49\xf4\x42\x1c\x1d\x50\x18\xc9\x6a\x6f\x39\xeb\x57\x93\x1a\x83\x5a\xc4\x32\xee\x79\x6a\xbe\x53\x56\x01\x43\xd8\xb3\x97\xa4\x4f\xc9\xa1\xa6\x51\x56\x90\x80\xcb\x93\x42\x24\xb4\xc1\xf9\x82\x3f\x4f\x8e\x06\xcb\xde\x4e\xf3\x43\x63\x1a\x21\x7c\xb2\xfb\x92\x5b\x7e\x6a\x6a\xd0\x1b\xef\xeb\x55\x68\x6d\x45\x09\xcb\x1b\x0a\xcb\x5b\xfb\xd7\x5a\x6f\x05\x08\x90\x06\xce\xa1\x7a\x62\x2a\xec\xba\xd1\x48\xe2\x86\x29\x02\x94\xa0\x22\xa8\xd8\xe2\xfa\x0b\x51\x87\x98\xb7\x7c\xc5\xb8\x93\x41\x97\xe9\xda\x50\x5b\xd7\x2b\x5c\x8b\xc0\x02\xc2\x65\xb2\x88\xae\x5c\x5a\x78\x4b\xc7\xf0\xe7\xf1\xa8\xfb\xf1\x45\x00\x48\x56\x36\x31\xf5\x40\x67\xc9\xc1\x0a\xb8\x47\x54\xfa\x88\xb9\xfb\x66\xb4\x43\xd4\x85\xc8\xf2\x48\x5e\x1b\x77\xf3\xd5\x38\xaf\xb9\x36\x26\x66\xc0\x49\xa8\x08\xfd\x85\x77\xb7\x18\xc2\x36\x13\x74\x62\x96\x28\x38\x56\x26\xee\xe9\x41\x16\xb4\x4e\x81\x5a\x50\x55\xf8\xbc\x4f\x93\x2f\x7a\xad\x02\xb1\xac\xeb\x5d\x42\x86\xe8\x20\x03\xd5\x70\x34\x5a\xbe\x68\xca\x49\x57\x09\x12\x04\xbe\x15\x08\x4a\x4b\x6f\x3a\x44\x7f\x65\x7a\xa8\x6d\x58\x2a\xbc\x90\x27\x79\x28\x42\xb4\xca\xf9\x8d\x4f\x94\x1b\x46\xd6\x9d\x7e\x2c\x82\xb4\xd1\x87\x51\xec\x3d\x84\x05\xc6\xb1\x39\x15\x05\x14\x23\x87\x81\x06\x62\x45\x08\x28\x0e\xba\x20\x56\xe6\xaf\xf8\x3f\x76\x91\xb3\xe1\xa0\x3a\x6c\x3b\x2f\xae\xa7\x5c\x8e\x5e\x3c\x2c\xcd\xe1\x58\xb7\x78\x3e\x36\xeb\x32\xc4\x67\x34\x77\xf2\xd9\x14\x0d\x3f\xe9\x84\xe3\xf0\x3f\x75\x42\xe6\x66\xb2\x5a\x3b\x11\x66\xd4\xd9\x16\x89\x88\x57\xef\x05\x3b\xce\xef\xf4\x0e\x81\xbc\x1f\x76\x68\xb0\xb3\x5d\xa9\x1e\x08\x08\x5a\x1a\x0c\x44\xbf\x3c\xed\x7f\x31\x98\xf9\xf4\x80\x51\x75\x2b\x99\x96\x6e\xc3\x13\x38\x0a\xd8\x53\x0d\x3b\xf8\x91\x69\xe2\x67\x2f\x99\x06\x5b\xbd\x75\xd2\x13\xa5\x76\xf2\x74\x04\x8e\x02\x0c\xb9\x41\x35\x88\xe3\xd4\x55\xa1\x42\x1c\x5f\x27\x22\x6a\x7a\xb4\xfb\x7f\x30\x65\xde\x7a\xef\xfc\xd4\xe2\xfb\xc1\x05\xfb\x0b\x79\x68\x61\x7b\xcb\x81\xfd\x91\xed\x33\x70\xbb\x3c\x68\x2e\xfd\xcb\x6a\xb0\xee\xf6\x1b\xfd\x6e\xa2\x94\x87\x1f\xf3\x42\xd8\x34\x17\xe0\xa8\x16\xb4\xd2\x68\x64\xf0\xfd\x0b\x2c\x5f\x6a\x54\xf5\x5e\x7d\xb3\x1f\xdd\xa3\x6d\x4f\x67\xa0\x21\x70\xaf\xff\x97\x5f\xe3\xc2\x4f\xbd\xdd\x95\xb3\x7e\x12\x7f\xc5\xe9\x15\x63\xeb\x84\xb1\x2c\xb1\x0f\x14\x37\xb4\x3d\x08\x2b\x70\xac\x4c\x81\xb4\x40\x07\xa4\x18\x39\x5f\x6d\x22\xd0\x3c\x72\x9d\x66\xa9\x64\x2d\x11\x6c\x4c\x6e\xda\x44\x32\xf1\x07\x87\xda\x20\xd9\x70\x48\x5a\x40\x97\x2f\xad\xf1\x53\x2f\x35\xb5\x62\x16\xdc\x8a\xeb\x48\xe7\x84\xc6\x30\x80\xc4\x2c\xd3\x10\x89\x67\xdf\x7b\xd9\xde\x9a\xce\x32\xbb\x18\x21\x71\xa9\x8d\x28\x0b\x37\x9c\x31\x0c\x73\x76\x88\xa4\x58\x9c\xf5\x0a\xbd\xf5\x84\x03\x79\xf3\xf1\xfa\xd9\xf0\x2c\x02\xbf\x54\xb9\xf6\xff\xf5\x3f\x43\x49\x18\x96\xb1\x4e\x92\xa7\xf5\xb5\x99\x38\x8c\xad\x18\x0c\x5f\xb0\x7b\x77\xee\x04\x1f\xc1\xfe\xba\x93\x8d\x1d\x2c\x1d\xd4\xc4\x5a\x1a\x14\x65\x10\xff\x2e\xa1\x40\x68\x79\x85\x6e\x90\x8b\xe6\xb9\x52\x40\x27\xdb\x18\x97\x04\x83\x49\xd2\x04\x64\xec\x79\xad\x7e\x5e\x7d\xa6\x4a\xa1\xff\xf9\x6c\x7c\x96\xf0\x55\x9a\x85\x3d\xa1\x73\xe6\xe6\xbf\xf1\x31\x3c\xd4\xcb\xd7\x7f\xe6\x0c\x73\xb5\xb3\x84\xab\x1c\x05\x68\x5f\x36\x52\xcc\x6f\x1d\x32\xe1\x7f\x2f\xb7\xaf\x32\x03\x79\xf3\x8a\x29\xc9\xa7\x27\xfd\x42\x84\xa1\xfd\x86\x2b\x05\x7a\xf1\x50\x25\x26\x43\xad\xda\x55\x13\x42\x75\xee\x8a\x5b\x22\x9a\x01\xec\x7b\x72\xec\xc7\xa6\x3d\x5a\x0c\xbf\x64\x65\x84\xdc\x44\xdc\xd5\xb9\x4c\x63\x99\xe0\x1f\x8c\xe4\x21\xc7\x77\x16\xd3\xaf\x33\x63\x12\xf6\x61\xc7\xc6\x17\x76\xfb\x1e\x8f\x77\x45\x52\xcd\x73\xb2\x17\x99\x0e\x25\xad\x12\x99\xe0\x40\xf9\x4c\xfd\xf0\x50\xb2\x13\x82\xd3\x1a\x98\x5f\xba\x47\xeb\x11\x47\x2a\x2a\xb7\xe4\x47\xdd\x4b\xcb\xdb\x5a\x90\x7a\x99\x5d\xe1\xa9\x3c\x79\x23\x92\x5c\x11\x5c\x9c\xa5\xc9\x98\x72\x30\x99\x93\x64\x6c\xb4\x5e\x9c\x83\x2e\xfd\x37\xac\xfd\x78\x82\x39\xc3\xec\x45\xc6\xd0\x14\x0e\x2d\xa7\x50\x36\x53\x26\x4e\xc5\xbb\xb8\xdd\x5c\x17\xc3\x63\x31\x07\x12\x28\x49\xa6\xa0\x66\xd3\x63\x65\x9e\xc4\x84\x70\x2c\xf5\xb4\x32\x2b\xcd\x7b\xec\x84\x8a\xc6\x74\xc2\x72\x26\x9d\x6c\x01\x90\xc2\xca\x8b\x91\x5a\xfa\x7d\x43\x86\x61\x86\x5e\xa5\x88\x9f\x7b\xba\xb5\xc2\xc7\xf1\x5f\x2e\x1f\x87\x73\xfb\x24\x3e\x2e\x0c\xb7\xf1\x34\x79\x7d\x00\x99\x9e\x3c\x13\x4d\x47\xa4\xe2\x93\x3e\xd5\x73\xd0\x2b\xc0\xf4\x75\x0b\xe5\x9b\xf4\x94\x25\xba\x1b\x6f\x6e\x6d\x17\x5f\x19\xd9\xb7\x69\xbd\xed\xba\x79\x02\x5a\xbe\xf6\x6f\x33\x7b\x91\xf2\xd4\xc7\x65\x6f\x57\xe8\x67\x0c\xb0\x32\x80\xf6\xb8\x06\xfa\xb9\x03\xa0\x27\xa6\x28\xc1\x77\xe7\xd9\x79\xfe\x35\xa8\x3b\xc5\x25\x5b\xfd\xb2\x41\x9a\x6a\x20\xce\x2f\x11\x5a\x16\x7f\x49\x93\x74\x1b\x20\xc4\x93\x3f\x64\x45\xd8\x96\x42\x0a\xaf\x28\xba\x1e\x71\x71\xe0\x39\x15\x3b\x7d\xca\xf0\x35\x47\x3b\xc1\x0d\x20\xf5\x79\x5e\x97\xdf\x2a\x68\x5d\xe4\x0d\xe2\x9b\xf4\xf8\x7e\xa3\x89\xac\x4b\xe5\x16\xcf\xba\xd6\x77\x3e\x59\xf0\x23\x96\xcd\x2d\x01\xa9\xd6\xeb\xa0\x53\x69\xd0\xe8\x99\x9e\x98\x16\xb3\x18\x8f\x4c\xbd\x06\xad\xcc\x26\x9f\x77\xf0\xaa\x6a\x6a\x52\x7f\xf3\xe7\x22\xbb\x83\x7b\x13\xd9\x50\x41\x39\xf1\x93\x28\xba\x18\x16\xf8\x50\x90\xe7\x47\x61\x71\x48\x09\x31\x42\x03\x3e\x31\x4f\x24\xdf\x97\x0b\x23\x01\x2e\x86\xad\x84\x11\x75\x9e\xbb\xce\x2f\x84\x4a\x1c\xb7\x05\x6c\x6d\x82\x2b\x64\xaa\x79\x5f\x00\xf3\x93\xfa\xec\x4f\x36\x08\x39\x9b\xd4\xe6\x28\x1e\x91\x16\x4f\xf9\xbd\xde\xdc\xdb\xb6\x8b\x0a\x58\x17\xa7\x77\x9d\x30\xba\xe6\xf3\x68\xdb\x8e\xa9\x86\x6c\x98\x53\xde\x95\xbb\xdf\x2b\xe0\xb3\xbe\x1c\x55\x8e\x6f\x84\x6a\x2d\x5f\xac\x92\x40\x27\xd3\x2f\x31\x4d\x2f\x4e\x5a\xb8\x4c\xf7\x7e\xd8\x64\xaf\xab\x93\x60\xc9\xbf\x80\x70\x86\x45\x59\xca\x98\x9a\xad\x53\x04\x73\xf3\x79\x9b\x97\x2c\x4f\x9d\x1e\x67\x15\x79\x14\x78\x57\x90\x5c\x7e\xfc\x4b\xe8\xb6\xdf\x4e\x04\x78\x97\x5d\xc3\xb5\x08\x34\x8c\x2d\x46\x55\x9c\x3f\xd8\x38\x32\xb2\x28\x90\x2c\xa6\xc7\xd9\x61\x34\x07\xde\x3c\x17\x9a\x41\xfe\x93\xeb\x80\xcf\xc4\x9c\x97\x2d\x7f\xe2\x1f\xc8\x58\x6e\xf7\x39\x15\x2f\x9f\xcd\x3d\x32\xaf\x18\x9b\x1b\xde\xc1\x81\xb2\x16\xd8\x8f\x9c\xf2\x45\xfa\xf9\x33\xea\x7e\x01\x16\xd2\xda\xab\xa5\x58\x38\xe7\xbc\x0a\x10\xb3\xc6\xaf\x69\x61\x2d\xcb\x0a\xe2\xf3\xe1\x52\x58\x5d\x19\x1a\x00\x16\xbe\x8d\xd8\xc1\x85\x7a\x58\x14\xb1\x99\xc5\xd9\x5e\x72\xf6\xa5\x31\x8c\x43\xd7\x7a\x38\x63\xd2\x4f\x06\xc0\x13\x15\x71\xe2\x88\x9a\xe1\xb2\x25\xe4\xc9\xdc\xd9\xb5\x0b\x55\xd8\xd9\x23\xc3\x42\xcd\xf8\x27\x48\x9c\x5c\x93\x51\xd1\x36\x60\x1e\x19\xc3\xdd\x96\x55\x79\xa1\x02\xe1\xa0\xd5\x6c\xbc\xba\x19\xf5\xeb\x69\xb1\x9e\xb1\x52\x36\x09\xc7\xc9\x09\x6d\xc3\x53\xb7\x62\x47\x15\x24\x99\xb6\x39\x94\xb6\x61\x40\x5d\x8f\x37\x39\xea\x78\xa7\xbf\xa1\x45\xba\x39\x14\x4b\x02\x75\x73\xf2\xb9\xf7\x83\x16\x1c\xd1\x34\x13\x6c\xdb\x50\x3b\x75\x15\xa1\xbe\xf7\x48\xdc\xbc\xff\x28\xe3\x82\xfa\x9c\x5a\x61\x77\x4a\xee\x09\xa1\x4e\x4d\x80\x9b\xd6\x72\x77\x58\xe7\x0f\x5e\x94\x7a\xcc\xeb\xba\x79\x17\x2f\x9c\xb5\xe1\xe6\x59\x1b\xa9\xfc\x56\x0b\x53\x90\xfd\x80\x1a\x34\x74\x6f\xed\xc4\x25\xb4\x1f\xde\x88\xcc\xb9\x69\x33\x0a\xc8\x5b\x35\xf0\xe4\x09\xfc\x83\x0e\x64\xf1\x6d\xf5\xc4\x85\x74\x5a\x53\xfe\xa3\x53\xdd\x3c\x4b\xcd\xc6\xdc\xeb\xa5\x64\xdb\x2b\xc8\x87\x80\x65\x8a\x19\x71\x50\x48\x15\xdb\x88\x39\xe1\xf8\xfb\x96\xa1\x24\x99\x0c\xff\x52\x42\x3d\x2e\x9c\xb2\xc5\x45\x88\x87\x11\x77\xdb\x23\x5b\x5e\x36\x50\xfa\xfa\x77\xc6\x98\xb3\xa9\x14\xb6\xb4\x42\x3e\x0d\x6a\x0c\x13\x57\x8a\xae\xa8\x80\x83\x90\xf2\x74\xfd\x58\x76\xed\xf4\x37\xba\x2e\x55\xf2\xc4\xb7\xf1\x0a\xa6\x95\x2e\x2b\xc7\xb1\x00\x90\x80\xe6\x4e\xf9\xc6\xbe\xee\x50\x64\x34\x63\x2f\x4e\xa6\x6c\xbe\xc0\x93\x1c\xd9\x58\x99\x63\xa4\xdd\xbe\x8a\xa0\x31\xb9\x7f\xcd\xcf\x4c\xfc\xe3\xf8\x13\x32\xf3\x2c\x0a\x83\xfd\x3b\x4d\xf9\x4d\x7a\x78\xc6\x2f\x88\x9a\x1d\xaf\x04\x19\x7c\x08\x2a\x6a\xd0\x20\x1c\x19\x62\x05\x74\xe3\x86\xc5\x07\xb0\x62\xae\x62\xfd\xd0\x39\x9a\x64\xf8\x50\x49\x66\x27\xbb\x79\x12\xac\x60\xc3\x5f\xd4\x64\x88\xa9\x5f\xf0\x9a\x12\xf1\xba\xdb\x07\xa6\x3e\x1f\x18\x6f\x71\x1a\xc3\x0b\x91\x36\xb9\x10\x02\xf3\xbc\xee\xd8\xac\x3f\x69\xb3\x1d\xcd\x8b\x4a\x56\xc7\xbd\x12\x21\x0e\xe4\xc4\x50\xc9\x3c\x3c\xac\x36\xd5\x34\xe3\x15\x27\x24\x82\x94\x87\x5b\x02\xda\x1a\xd1\xf9\x6f\xae\x82\x8c\x14\x8a\x55\x27\xc9\xad\xcc\x97\x32\xf4\x55\xd7\xbf\x6b\x5f\x09\x61\x46\xb5\x29\xe2\x13\xc0\x92\x60\xcf\x94\x6d\xbc\x73\x9c\xda\xab\xb5\xe2\xcf\x74\x8a\x35\xf8\xbc\xee\x48\xfe\x79\x47\xfe\xfc\x8b\xfb\xf5\xb8\x49\xb7\xf4\x30\x5f\x86\x10\xde\x7c\x66\x7f\xb8\xf9\x51\xa2\x04\xed\xd4\x7b\x1d\x7e\x18\xc7\x7c\xc3\x3c\x22\xaa\xac\x36\x7c\x39\xdc\xc9\xeb\xe9\x26\x4e\x07\xaf\x18\xda\x40\x4d\xc7\x53\xf2\xfb\xfe\xd6\x11\x8c\xce\xc7\x8f\xcf\x82\x1f\xcf\xea\x2e\xa2\x09\x91\x6e\x09\x18\x80\x21\xb9\x31\x32\x40\x6d\xdd\xd3\x58\xff\x9e\xc2\x9a\x49\x7d\x71\xbb\x8b\xfe\x90\xeb\x24\xfc\x09\x4d\x86\xd0\x28\xe6\x6e\x45\x11\x7d\x31\x94\x01\xcb\xfa\x1d\xb3\x53\x5c\xa3\x53\xb4\x94\x30\xc1\x0c\x99\xe4\x87\x74\xe0\x97\x94\x5f\x92\xa6\xf4\x0a\xf4\x3f\xeb\x55\xbd\x75\x72\xab\x09\x06\x76\xd4\x68\x4e\xd4\xfd\xd1\xa7\x1e\x9b\x38\x90\x75\x76\x2b\x96\x13\xed\xc5\x61\x5f\xcc\x47\x94\x67\x46\xdd\x05\x64\x3e\x9d\x6f\xd1\x34\xa0\x84\x0e\x21\xd1\x80\x95\xab\x35\xc9\xdf\x27\x47\xf4\x3c\x51\x8f\xd7\xad\x17\x60\x79\x4f\xe1\x3e\xd4\xce\x2f\xf8\xbb\xb6\x68\x5f\xfc\xd2\x31\xde\x76\x02\x37\x4a\x55\x3a\x92\x83\xbd\xdd\x0b\x68\xaf\x94\x4e\xa4\x89\x8a\x34\x7e\xa4\x2e\xd2\x73\x0a\xbe\xf7\xdb\xc8\x5f\xcf\x04\xca\x35\x6b\x61\xf5\x9f\x91\xa0\x3a\xb6\xe2\xc3\xea\xe9\x8b\xed\xb6\x34\x3c\x6c\x35\x0e\x1e\x1f\x15\xbc\x06\xe6\xbd\xcc\x78\xf5\x4e\xf2\xf2\x23\x53\x9e\xdf\x34\x33\x87\x08\x31\xb4\xc2\xfd\xf0\x6b\xfd\xc9\x15\x25\xfc\x0e\xf3\x0b\xad\x24\x16\x54\x34\xc4\x2b\x5a\xd2\x20\xd2\xe1\x28\x4c\x5b\x18\x5c\xe2\xca\x71\xed\x77\xb7\x5b\x4d\x8a\xf6\x14\xe1\xe3\xc0\x4b\xb4\xd9\x0d\x72\x26\xee\xfb\xac\xe0\x37\xd7\x9b\xbe\xbd\x84\xee\x7e\x16\x36\x9b\x46\x93\x5a\x33\xec\xfa\x67\xc1\x37\x8b\xd0\xdf\x5b\x03\xd8\x5b\x18\xc5\x78\xbf\x72\x74\x1b\xd7\x94\x9b\x48\x25\xe1\x30\x14\x3c\x00\x06\x34\xdc\x58\x27\xb0\xb9\x86\x16\x96\x5e\xd9\x71\x80\xcb\x40\x2a\x51\xc0\x72\xa4\xe0\x64\xc7\xa9\xbb\x73\x06\x40\x60\xc6\xf7\x4e\xa7\x8a\x3e\xc3\xa2\x79\xe3\x47\x71\xe4\xe4\xce\x9c\xa1\x07\x31\x7a\xd9\x88\x77\x32\x6b\x3f\x46\xe8\x2b\xe9\x2b\xea\x45\x53\xd9\x2a\xaa\x78\xd2\x58\xf2\x0c\xad\xb5\x1e\x87\x38\x9b\x6c\x0b\x0b\x2d\xc2\x39\x66\x54\xc5\x79\x82\xb7\x47\xe4\x7e\xa0\xa5\x5e\xb1\xcc\x04\xf1\xe0\x13\x25\x83\x0e\xc2\x83\xf1\x8d\x49\x26\xb9\x70\x39\x5a\xf6\x08\x40\x4b\x2a\xca\x96\x48\x9b\x20\x42\x8a\xe9\x33\x74\xb8\x67\xb0\x9d\xc1\xfa\xfe\x6e\x96\x96\x54\xb2\x01\xf1\xdd\x8b\xfb\xca\xf2\x92\xe2\x2f\xee\x8f\xcb\xe3\x64\xc6\x92\x3c\xd2\xe8\xc6\xce\x90\xc5\x57\x49\x28\xc9\x6a\xa3\x2b\x0d\xae\x96\x5f\x46\x0b\xbb\x20\xe9\x04\xfb\xd8\x1a\xf6\x7e\x81\x75\x7e\xbb\x9c\xd9\x0f\x02\xc6\x09\x94\xae\x83\x3f\x7a\x03\x9b\xfd\x05\x89\x99\x96\x38\xab\xe2\x01\x48\x61\xa9\xbd\x17\xfc\x13\x4c\x51\x97\xd7\x5a\x1b\xd4\xae\x8b\x46\xb4\x1a\x8e\x12\x48\x1b\x5d\x3b\xe3\x58\x07\x9a\x7a\x03\xc9\xc4\x03\x46\x38\x78\x4d\xf8\x34\xaa\xd7\x0a\x90\xd2\x83\xe3\x73\x7d\x24\x25\x89\x56\x3c\xd2\x8c\xec\xf6\x4a\x2a\xf4\xa7\x2c\x4f\x5f\xe3\x5f\x62\x0c\x70\x26\x38\x9f\xca\xaf\x29\x7a\xa0\x06\x42\xef\x6e\xc0\x50\xf8\x57\x7c\x32\x36\xb3\x72\x7b\xc5\x5f\x35\x1e\xaf\x81\x40\xe8\x67\x7f\xa4\x6d\x9e\x00\xc0\x33\xbb\xa0\x49\x57\x11\x1f\xee\x39\x39\x11\xe0\x5a\x0a\x40\xda\x86\xcc\xf3\xee\xd1\xc2\x9a\x74\xb5\x17\x10\xb9\x38\xa8\x00\x8c\xeb\x67\xa4\x19\x60\x9e\x97\xcd\x33\xdb\x99\x04\xbc\x80\x28\xf3\x9c\x34\xfa\x3f\x3d\x9f\x3c\x00\x7f\x6e\x67\x5f\x91\x84\x51\xcd\x00\x00\x00\x80\xae\xa6\x11\xa4\x56\xdd\x2e\xea\xff\x05\x00\x00\xff\xff\x09\xac\x53\x20\x4b\x1c\x00\x00") + +func web_uiAssetsAppleTouchIcon01cd4680782fbb5bc02301347df9903dPngBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsAppleTouchIcon01cd4680782fbb5bc02301347df9903dPng, + "web_ui/assets/apple-touch-icon-01cd4680782fbb5bc02301347df9903d.png", + ) +} + +func web_uiAssetsAppleTouchIcon01cd4680782fbb5bc02301347df9903dPng() (*asset, error) { + bytes, err := web_uiAssetsAppleTouchIcon01cd4680782fbb5bc02301347df9903dPngBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/apple-touch-icon-01cd4680782fbb5bc02301347df9903d.png", size: 7243, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x7c\x7b\x7f\xdb\x38\xae\xe8\xff\xf9\x14\x36\x6f\xae\x86\xac\xe1\x87\x9c\xbe\xc2\x0c\xeb\xd3\xdd\x4d\x77\x3b\xdb\x69\xe7\x4c\xd3\xee\xce\xda\x9a\xae\x22\xd3\x89\x52\x59\xf2\x48\x72\x12\xd7\xd2\xfd\xec\xf7\xc7\xa7\x28\xdb\xe9\x74\xce\xd9\x7f\x6a\x0a\x04\x41\x10\x04\x40\x00\x64\x7a\x1b\xe6\x9d\x9b\x22\x4b\x93\x38\x2d\xd9\x62\x9d\x46\x65\x9c\xa5\x98\x6c\x05\x9c\xb3\x6d\x99\x87\x11\xa7\x0e\xbc\x86\xcd\x86\x6e\x6b\x28\x36\xcb\xcb\x2c\x29\x3e\xd1\x2d\xcf\xf3\x2c\xa7\x63\xf8\xe1\xfd\xbb\xb7\xef\xcb\x3c\x4e\xaf\xe8\x09\xbc\xbf\xf8\xf9\xf5\xdb\xbf\xd2\xc7\x12\xfa\x76\xbd\xbc\xe4\x39\x7d\x02\x6f\x3f\xfc\xf8\xa7\xf3\x9f\xe9\x53\x0d\x4d\x92\x37\x71\xc9\xf3\x30\xa1\xcf\xe0\xed\x87\x37\x6f\xe8\x73\xd9\xf1\xa7\x2c\x4b\x78\x98\x9a\xbe\x53\xb8\xf8\xf9\xc3\x39\xf5\x47\xf0\xea\xe5\x9b\xf7\xe7\xd4\xf7\x25\xd6\x05\xbf\x2f\xa9\xaf\xa6\xfd\x18\x26\x6b\x4e\xfd\x13\x38\x7f\xf7\x8a\xfa\x6a\xd2\x77\x97\x37\x3c\x2a\xa9\xff\x44\x7e\xbd\xcc\xf3\x70\x43\xfd\xa7\x80\xb6\x88\xfa\xcf\x00\xd5\x88\xfa\x6a\xba\x1f\xb9\xe0\xee\x4d\x5c\x94\xd4\x3f\x75\x20\x74\x3c\x02\x44\x11\x1d\xfb\x80\x00\xd1\xf1\x18\xd0\x14\xd1\xf1\x09\xa0\x00\xd1\xb1\x9a\xe4\x3c\xe1\x4b\x9e\x96\x72\xf0\xf8\x09\x1c\x87\x51\xc4\x57\x25\x1d\xc1\x31\x4f\xe7\xd4\xaf\xa1\xe4\xf9\x32\x4e\x43\x29\xa8\x31\x45\x52\x56\x08\x1e\x53\xa4\x04\x84\xe0\x29\x45\x4a\x2a\x08\x9e\x8b\xe6\x9b\x37\x08\xfc\x11\x45\x62\xcd\x08\x7c\x9f\x22\xb9\x6a\x04\xfe\x63\x8a\xce\xdf\xbd\x42\xe0\x3f\xa3\x68\x8b\xc0\x7f\x4e\x51\x8d\x60\xec\x53\x44\x11\x8c\xc7\x14\x01\x82\xf1\x09\x45\x53\x04\xe3\xc7\x14\x05\xa8\x86\x55\x9e\xcd\xd7\x72\xe7\x8a\x4f\x74\x3a\x82\xe9\x09\xf8\x01\x4c\x9f\xc8\x7f\x9f\xc9\x7f\x4f\x9d\x7f\xfd\x31\x8c\xc5\x8f\xc2\xfa\x96\x9f\x27\x6a\xc0\x13\x38\x09\x60\x3a\x1e\xc9\x1f\x5f\x13\x3b\x55\x5f\x4f\x15\xca\x53\x85\xa2\xa6\x1e\x8b\x01\x01\xac\x78\xbe\xc8\xf2\xe5\x4b\xc9\x61\xa3\x64\x1c\x4a\xc8\x21\x85\x18\x42\xa5\x87\x05\x0b\x07\x09\x4f\xaf\xca\xeb\xbe\x7f\x54\xdc\xc5\x65\x74\x8d\x63\xb2\x8d\xc2\x82\x77\x7c\x5a\x5e\xc7\xc5\xe0\x98\xf1\x41\xce\x57\x49\x18\x71\x3c\x9c\xcd\xf0\x6c\x56\x21\x32\xbc\x02\x74\xec\x23\xe2\xf6\xa4\x02\x38\x4b\xdb\xc0\x5c\x02\xf3\x36\xb0\x94\xc0\xb2\x0d\xbc\x95\xc0\xdb\x36\x70\x21\x81\x8b\x36\xf0\x52\x02\x2f\x11\x39\xba\xcc\x79\xf8\xf9\x48\x72\x3b\x36\xdc\x2a\x93\xc0\xbc\xd5\x7b\x62\x7a\xd3\x75\x92\xb8\x1d\x8f\x4d\x47\x77\xe4\x82\x9f\x58\xb0\xef\x82\x9f\xd2\x9c\x97\xeb\x3c\xed\xe8\xde\x70\x5a\xf4\xfd\x40\xf5\xf9\x76\x8e\x6d\xed\x8e\xf1\xed\x14\x1a\xdb\xed\xb3\xf3\x4c\x45\xe7\x38\x80\x70\x5a\x04\x6d\x94\xa7\x0d\x59\x50\x2d\x81\x1b\x4c\x47\x41\xc0\x64\x63\x87\xe4\x33\x77\x3a\x45\xb1\x3f\x0e\xbe\x3e\xe6\xb9\x65\xa3\x0d\x3f\x7d\x98\xf5\xf1\xc8\x65\xbd\xcd\xf3\xd8\x3f\xc8\xc3\x60\xb5\x2e\xae\xb1\xc0\x26\x75\x0d\x65\x78\x99\x70\x3a\xdd\x9e\xd0\x27\xf0\x98\x4e\x7d\xf0\xc7\x01\x3c\xa1\x4f\xe1\xa9\xfc\x38\x09\xe0\x19\x3d\x81\xe7\xe2\xe3\x34\x80\x53\xfa\x58\x18\xaf\xe8\x19\x05\xc2\x78\x45\xcb\x0f\xc0\x1f\x53\x81\x4c\xc7\xe0\x3f\xa1\xcf\xc0\x7f\x4a\x9f\x0b\x33\x16\xbd\x8f\x03\x61\xb4\xa2\xf5\x24\xa8\x61\xeb\xd3\xe9\x89\xfc\x55\x93\x3d\x35\xed\x31\x3c\x0b\x84\xc9\xab\xc6\x78\x6c\x1a\xba\xcb\x62\x3d\x37\x58\xcf\x0d\xd6\x73\x83\xf5\xbc\xc1\x3a\x35\x58\xa7\x06\xeb\xd4\x60\x9d\x36\x58\x72\x0d\xcf\x4d\x4b\xe1\xc9\x96\xe9\x6d\x30\x7d\x8b\xe9\x5b\x4c\xdf\x62\xfa\x0e\xe6\xd8\x62\x8e\x2d\xe6\xd8\x62\x8e\x1b\xcc\x13\x83\x78\x62\xf0\x4e\x0c\xda\x49\x83\xf5\xd8\x60\x3d\x36\x58\x8f\x0d\xd6\xe3\x06\xeb\x89\xc1\x7a\x62\xb0\x9e\x18\xac\x27\x0e\x6f\x96\xb5\x40\xb8\x55\xdd\x18\x9b\x86\xc6\xb1\xe8\x76\x25\x76\x21\x76\x1d\x72\x19\x27\xe2\x00\xb1\x3a\xe3\x4b\x1d\xf1\xc5\x2e\x9e\x8a\x93\x67\x3c\xa2\xfe\xa9\xc4\xfa\x5f\x29\xd6\x89\x38\x90\xbe\xaa\x54\x92\x25\x1f\xc6\x62\x09\x4f\xe8\x78\xac\x94\x6c\x0c\x8e\x6a\xf9\x56\xd6\xbe\x15\xb6\x6f\xa5\xed\x2b\x71\x4b\x56\xc6\x5a\xcc\x3e\x8c\x9f\x18\xe8\x58\xa8\xa9\x19\x25\xa9\x8e\x25\x7f\x63\x77\x06\xab\x97\xbe\x55\x4c\xdf\x6a\xa6\x2f\x55\x53\xd3\x7d\x6e\x39\x7e\x66\xa0\x63\x18\x5b\xb5\x1b\xbb\x6a\x67\x77\xdf\xb7\xdb\xef\xdb\xfd\xf7\x1f\xef\xef\xc2\x78\x44\xc7\xff\x11\xa9\x9f\x8c\x7e\xdf\x94\x15\x17\xd6\xd6\x7c\x6b\x6c\xbe\xb5\x36\xff\x34\xf8\x8f\x70\xe3\xff\x3e\x37\x8a\x07\xeb\x3c\xfc\x67\x0e\xd4\x9a\x85\xc2\xd5\x32\xb7\x4a\x3f\xf6\x83\x3a\x80\x39\x5f\x84\xeb\xa4\x54\xa7\x75\x41\xb7\xfe\x53\xa3\x46\xab\x30\x2f\xf8\xb9\x0c\x03\x9b\x43\x9c\x6c\xcb\xeb\x3c\xbb\xeb\xa4\xfc\xae\x23\xfb\x30\x27\x1a\xb5\x85\x25\x0e\xf8\x92\x09\x4f\x0c\x39\x9b\x8e\x02\x48\xd9\x54\x9c\x7f\x01\xc4\x6c\x1a\x40\x28\xbb\x06\xd2\x0f\x43\xc1\x10\x82\x8c\x8d\x20\x61\x23\x88\xd8\xe8\x48\xf6\x25\xfc\x9e\xe7\x83\x82\x97\xaf\xd3\xd5\xba\xc4\x9c\x80\x03\xde\x6c\x14\x81\xcd\x06\xf4\xaf\xea\x60\x0d\x0e\xdc\x66\xf1\xbc\x33\x62\x8c\xb5\xc6\x25\x49\x16\x79\x1e\xde\x83\xb1\x6d\x4d\x8e\x04\xd7\xeb\x7d\xfc\x23\xb3\xb2\xce\xc2\xc4\xd0\x47\xea\x30\x46\xa9\x3c\xf1\x51\x97\x95\x9b\x15\xcf\x16\x98\xb3\x52\x0f\x4d\xf8\x3d\x26\x55\xe5\x13\xcf\x93\x50\x13\x5a\x4f\x79\x50\x55\x9c\x00\xaf\x63\x75\x28\xad\x09\x20\x33\x01\x62\x9a\x50\xc7\x2c\xab\xd9\x05\xc3\x75\x03\x61\xfb\x48\xe4\x68\x91\xe5\x58\xb0\x78\x0d\x2b\x98\xc3\x06\x96\x70\x0b\x57\x70\x09\xf7\xf0\x19\xee\xd8\xb6\x3e\x3b\x23\xdb\x78\x81\xe7\x2c\x9f\xe6\x36\xfe\x0a\x94\x18\xdb\xca\x30\x9d\x07\x13\x2d\xe7\xbd\x0e\x8a\xc5\x6e\x32\x76\xed\x79\xf8\x9a\x2d\x30\x21\xb0\x61\xe1\x74\x1e\x78\x9e\xf8\x77\x7a\x1d\x90\x66\x03\x36\x55\xd5\xdd\xe8\xb9\x44\x73\x3a\x0a\x24\x0f\xdd\x88\x6c\x25\xbb\x9d\x38\xed\xdc\x4b\xbd\x98\xce\x03\xa2\x54\xc3\x86\xd8\xd3\xdb\xc0\xf3\x6e\x5f\x8c\x3d\xef\x5e\x09\x0c\x7d\x87\x7a\xfb\x38\x3d\xf4\x1d\x52\x3b\xf8\x89\x21\x74\xf4\xc9\xdd\xc6\xe2\x3a\xbb\xfb\x29\x2b\x62\xc1\xfd\x04\xfd\x24\xa4\xd5\x91\x41\x7b\x27\x4b\x3b\x49\x9c\xf2\x0e\xea\xe1\xac\xe7\x93\x1e\xa2\xb3\x54\x53\xdf\x1f\x8a\x49\x0f\xcd\xd2\xf3\xfb\x15\x8f\xca\x38\xbd\xea\xa0\xde\xfd\xe0\x26\x8b\x53\x8c\xa0\x83\x48\x0f\x41\xe7\x2a\x2b\x3b\x07\xb8\xbb\x96\xdc\xd1\xdf\x99\xb9\xf3\x21\xe5\x92\x36\x9f\x0b\xa8\xcf\xd8\xf5\x04\xf1\x74\xde\xc9\x16\x9d\x58\x18\x01\xa2\x62\xe9\x78\x9f\x7a\x55\x5d\x13\xb9\x7e\xd8\xd1\x10\xfc\x09\xb6\xa5\x48\xa9\x9c\x15\x2d\xc3\x32\xba\x86\x32\xfb\xcc\x53\x7a\x90\x14\x08\xbe\x68\xdb\x0a\xe2\x94\xa7\x19\x24\x59\x44\xd7\x60\x98\xa4\xf7\x35\xa9\xe3\x05\x3e\x61\x2c\x92\xfb\x29\x38\x26\xbb\xfe\xe1\x53\x55\xc9\x75\x0b\x81\x5d\x87\x49\xc9\xe7\x03\x44\x8e\x92\x1d\x2b\xe3\xe9\x15\x14\x6d\x98\xe0\x1b\x32\x76\x88\x8f\x03\x36\x0a\x52\x0b\x6b\xa1\x4e\x67\x5d\x3c\x1e\x0c\xca\x4c\xa5\xad\x98\xc4\x69\x47\xea\x95\x52\xfc\x11\x63\xf3\x6f\x64\xf2\x33\xf3\xc1\xd8\x08\xb3\xc6\x32\x7e\xf4\x19\x52\x03\x35\x8d\xfe\x67\x88\x0d\x2c\x6e\x60\x3b\x56\x56\xaf\xd8\x35\x5c\xb3\xb1\xb2\x95\x76\x9f\xb1\x9c\x71\x00\x11\x3b\x11\x72\x15\x76\x12\xa7\x45\x19\xa6\x91\xf0\x08\x32\xd9\xf5\x3c\x63\x48\x2f\xfc\xbd\x55\x68\xfd\x52\x3e\xbb\xb3\x5c\x27\x65\xbc\x4a\x78\x27\x54\x56\xdb\x59\x65\x45\x11\x5f\x0a\x40\xd9\x29\xca\xb0\xe4\xb4\x83\x7a\x73\xa1\xb6\x4a\x19\x3a\xa8\x77\x4d\x4c\x26\xa6\x8c\x54\x27\x63\xb9\x32\xbc\x6b\x02\xa9\x6a\xed\x6d\x14\x81\xf8\x40\x8f\xd8\x18\x02\x7a\xf4\x66\xea\x07\x04\xae\x65\x1a\x04\xab\x09\xbe\x66\x2b\x58\xc9\x2f\x42\xf1\x7f\x5e\x1f\xa2\x17\x23\xcf\x8b\xfa\xfd\x9d\x4c\x2d\x5e\xe0\x2b\x85\xed\xa6\xd1\x53\xc1\x9c\x48\x4d\xe0\x4e\x24\x6a\x53\xbb\xad\x57\x02\xf2\xe9\x98\x6d\x17\x71\x5e\x94\x9f\xa4\x65\xc4\x53\xbb\xc3\xf8\x4a\x78\xf8\x60\xd0\xf4\x42\x12\x1e\xc0\xf3\x83\x81\x85\x83\x42\x8e\xb2\x64\xbd\x4c\x1f\x26\xa6\xfa\x15\xb9\x7d\x5c\x43\x50\xf5\xd4\xda\xd7\x76\x19\xc3\x4b\xbd\x3a\x37\x0b\x1f\x44\x61\x92\xe0\x3b\x28\x20\x81\xcc\x9c\x98\x20\xd6\x2c\x12\x72\x42\x88\x4e\x2d\x97\x47\x57\x9e\x87\x73\x96\x0f\x8a\x24\x8e\x38\x1e\x41\xdf\x7f\x74\xf5\x68\x4c\x20\x65\x69\x0b\x46\x20\x66\x71\x1b\x62\x37\xfa\x21\xe9\x8e\x02\xab\x3f\x77\x83\x63\xab\x31\x42\xbe\x04\x2e\x59\x38\x75\xec\x61\x1c\x04\xd3\xb6\x79\x18\xea\x97\x3b\xc9\xb5\x62\xbd\x3b\xaa\xeb\xa6\x05\x87\x8a\x5e\xb2\x8a\x74\x38\xaa\x81\x52\x9d\x47\x07\xce\xd3\xfd\x70\xe7\x68\x1f\x4b\x52\xa8\xc1\x04\x2b\xad\x48\xc8\xcd\xda\x3f\x49\x37\xce\xb8\xda\x82\x4f\xcb\x2c\xe7\x6a\xb7\x3e\x25\xbc\xd0\xea\x3e\xcf\x52\xce\xba\xbe\xd9\x25\xa5\xe1\xe6\xa4\x17\xe2\x60\x23\xd3\x27\x2c\x42\xf5\x48\x9f\xce\xe7\xce\x87\x88\xa9\xe4\x57\x94\xa5\x73\x79\x7a\xbd\x2f\xc3\xe8\x33\x9b\xa2\xd7\x6f\x5f\x5f\xbc\x7e\xf9\x06\x05\x76\x0a\x19\xfe\x38\x0a\xee\xb7\x55\x74\xe4\xe8\xb4\xdf\x52\xc8\x91\x2a\x0b\xd4\x10\xb7\x97\x6d\x64\xee\x2c\x7a\x3a\x0a\x8e\x5c\x51\x28\xee\x7b\x46\x16\x6a\x69\xbd\x1e\x34\x2b\xb0\x7d\x7a\x71\xe2\x9b\xab\x0f\x3c\x9c\xa5\x43\xe2\x79\x2d\x19\x99\xc1\x5a\xc8\x4e\x5b\xeb\xa9\x2f\x82\x2e\x58\x7f\xd3\x0e\xf5\x9c\x2f\xbd\x46\xb1\x5b\xee\x12\x5b\xc3\xe4\x56\x76\x47\x1a\x55\xec\xe6\x4e\xd0\xbc\xc3\x98\x5c\x86\xe6\x8b\x13\x77\x36\x11\x4d\x17\xbb\x7a\xd4\x12\xa8\x96\xc7\xa0\x58\x5f\x16\x65\x8e\x47\x2d\x29\x19\x8b\x71\x66\x51\x10\xa2\xc5\x8f\xb9\x39\x40\xc6\xa3\x09\x1a\x0c\x06\x88\x22\x44\x7a\xdc\x90\xeb\x8f\x47\x6e\xc5\x4b\x56\xd6\x10\xa9\x61\xbd\x8a\xb2\x65\x9c\x5e\xfd\x2e\x67\x66\x9b\xcd\x3c\xdf\x8f\x47\x22\x04\xee\xb5\x77\xc4\xf0\x3e\x1e\xf5\x0d\x22\x21\x80\xb9\xdb\x43\x7a\x87\x99\x3d\xc8\x9f\x1b\xa8\x3d\xc0\x9e\x15\x2c\x26\x50\x32\x61\xd3\xf2\x4c\xb5\x93\xf4\x7c\xa2\xe3\xb9\x3e\x22\x76\x19\x6a\x73\x5a\xcb\x57\x81\x20\xea\x95\x3d\xf4\x2b\xaa\x21\x15\x11\x96\x33\x65\xbc\xc0\xd6\x94\x89\xab\x26\xe7\xef\x5e\xc9\x08\xd5\xd6\x42\x8f\x1c\x99\x54\x15\x76\x1c\xc0\x88\x38\x4e\xc2\x74\x69\x93\x37\xa6\x6d\x0c\xbd\x09\xfa\x75\x5e\xf5\x29\x5a\xe7\x39\x4f\xcb\x9f\xd7\x09\x2f\x30\x81\x82\x8d\xce\x8a\xef\x4d\xb9\xd5\xf3\x70\x17\xe7\xad\xed\x50\x56\x25\x21\xb9\x18\xa3\xea\x6a\x84\x54\x55\xe9\x79\x5d\x9c\x4f\x47\x81\xd9\x88\xb2\x69\x13\xc1\x17\xcb\x21\x65\x85\x62\x28\x5b\x49\x87\x3f\x58\x24\xfc\x9e\x90\xb3\xa2\xd7\x23\x67\x66\xfd\x13\x8c\x63\x26\x07\x5b\x13\x1e\x3c\x1a\x5e\x11\x62\xf2\x1a\x6b\xc7\x36\x80\x22\x0f\x7a\x28\x07\xee\x1c\xac\x8d\x9b\x6a\x13\xdc\xf1\x67\x7b\x83\x0f\x1d\xb5\x93\x9d\xc3\x56\xb7\x1e\x1a\xdc\x73\xc4\x52\x43\xcb\xc3\x89\x9e\x96\x5b\x6b\x00\xda\xa1\x3b\xe8\x9a\x84\x7b\x40\x98\xb3\xe0\x41\xbf\xe6\xee\xc8\x8e\xc7\x94\x53\xf1\x07\x23\x02\x99\x9f\xbb\x89\x34\x84\xd3\x34\x38\x74\x6e\x4c\x0f\xc0\x1a\xf1\xe8\x69\x85\xe6\x6a\xa7\xac\x18\x34\x5b\xab\xcf\x34\x02\xbc\xaa\x54\xa4\x42\x28\x42\x26\x35\x57\xb8\x13\x63\x21\x54\x62\xec\x26\x32\xe8\x0d\xbf\x8f\xa3\x30\xd9\xcf\x9e\x76\xf6\x9a\xf4\xd0\xa0\xf3\x21\xcd\x79\x94\x5d\xa5\xf1\x17\x3e\xef\x48\xb9\xda\xb4\xae\x9d\xd0\xe9\xf4\x48\x58\x94\x8c\x81\x65\x70\xba\xaf\x42\x35\x11\x4e\xfd\xfe\x01\xbf\x22\xec\x1f\x5b\x87\x61\x43\x31\x3e\x69\xb2\x28\x4c\x6a\xb8\xe4\x57\x71\xba\x7f\x2c\xec\x08\x55\x06\x39\xb2\xa8\x92\xad\xde\xcb\x28\xfd\x81\x33\x67\x77\x5c\xb6\x12\x93\xb4\x4c\xff\x77\x87\x16\x87\xf6\xf5\xeb\x7b\x1d\x28\x0f\x51\x43\xf9\x87\xf8\xfb\x1a\xd1\x71\x50\x83\x58\xf6\x0e\x39\x23\x20\x29\x37\x29\x12\xed\x5f\xe8\xb6\xfe\xea\x2d\x13\xd9\xea\x24\x26\xd7\x19\xcc\x88\xba\x37\x0b\xe6\x22\xe5\xa9\xc9\x09\x0c\xd7\x36\xa4\x32\xc6\xa8\xcf\x22\x1f\x4a\x6d\xaa\xfd\x31\x81\xc7\xed\xc8\xb3\xe3\x3f\x33\xd7\x39\x06\xf0\xdc\x5c\xe4\x68\xc0\xf8\x64\xe7\x0a\x67\xac\x69\x3c\xb3\x80\xb1\x02\x3c\xb7\x00\x5f\x01\x4e\x2d\xd1\x91\xe6\x7e\x64\x21\x1a\xc5\xb7\x0b\xd2\xf3\xfa\x76\x45\xfe\x63\x7b\x3f\xa4\xeb\x55\xaf\xdf\x7e\x7c\xf9\xe6\xf5\x5f\x50\x5d\x83\xdc\x46\x3a\x1d\xfe\x8a\x27\x74\x56\xf4\xc8\x10\x64\x13\xf7\x27\x78\x3a\xea\x9f\x06\xd5\xd4\xef\x9f\x06\xb2\xd9\x23\x04\xcf\x06\xba\x39\xc1\x53\x7e\x1e\x4c\xfb\xbd\x60\x62\x20\xb3\x4b\x33\x1a\x09\x62\xb3\xe9\x6c\x86\x2e\x17\x69\x5e\x0e\x83\x6a\x36\x5b\x4f\xc3\xfe\xe2\x65\xff\x95\x40\xde\x3e\xae\xab\xe9\xaf\xb3\xd9\x6c\xd4\x9f\xdd\x8f\x4e\x67\xf7\xa3\xb0\x3f\xbb\xf7\x17\x28\x20\x8f\x90\x21\x32\xdb\xda\x56\x6d\x5b\x53\xdb\x0a\x4c\x0b\x4c\x83\x9a\x46\x99\xaf\x79\xc3\xcc\x22\x4c\x0a\xe7\x53\xd8\x76\xf3\x75\x6c\x1a\x03\x32\x0c\xa0\xb1\x08\xba\xd5\x01\x32\xdd\x6a\x09\x8d\xc0\x87\x31\x9c\xc0\x63\x78\x02\x4f\xe1\x19\x3c\x87\x53\xf0\x47\xe0\xfb\xe0\xab\x8a\x7a\x9c\x46\xc9\xba\x88\x6f\x39\x15\xc9\x47\x6d\x23\x87\xba\x71\x0a\xdc\xd4\x27\x41\x42\xd1\x3a\x9d\xf3\x45\x9c\xf2\xb9\x2d\x1d\x76\x72\xfe\xdb\x3a\xce\xb9\xe7\x1d\xea\xe4\xf7\xab\x2c\x2f\x0b\x11\x48\xa9\x96\xf2\x8d\x39\x33\xb7\xfc\xd0\x82\xb3\x7d\x9b\x34\x88\x0a\x61\x10\xae\x56\xc9\x06\xdb\xd1\x61\x7e\xb5\x5e\xf2\xb4\x2c\x48\x6d\x29\x2d\xc3\x38\x65\xae\x35\x8a\x14\x89\x8b\x2c\x7e\xaf\xf0\xf0\xa1\x08\xaf\x64\x39\x81\x4f\x47\x41\x0f\x75\x5e\xbd\x7e\x73\x8e\xc8\x51\xbc\xc0\x87\x16\xb3\xca\xb3\x88\x17\x05\x51\x45\x62\xbd\x6e\x8c\x16\x85\xbc\x6b\x0d\xe7\xaf\xe2\x84\xbf\xdf\xa4\x11\xb6\x5d\xab\xb0\xbc\x46\x3a\x38\xd3\xa3\x07\xd1\xdd\x1c\x13\x90\xfc\x00\x5a\x97\x8b\xe7\x88\x1c\xf1\xa4\xe0\x2d\x92\x71\xc2\x11\x19\x88\xe1\x78\x17\x28\xc7\x6b\x9a\x92\x8a\x9c\x1b\x6f\xa3\x6b\x21\xa0\x92\x0a\x9a\xfd\xe7\xa8\x6e\xf6\xb0\x25\x79\xf5\x83\x45\xde\x77\x68\x8d\xcb\x6c\xbe\x4e\xb8\xe7\xe9\x59\x95\x30\x19\x33\x60\x57\xc6\x5f\x93\xd1\xc4\xac\x36\xcc\xaf\x6e\x6d\x1e\x43\xed\x5a\x8a\x4d\x51\xf2\x25\x22\xa2\xbf\x20\x04\xdc\xed\x42\x99\x7c\x2c\xd1\xd4\x94\xad\x12\xed\xf5\x28\xb6\x26\xbc\x11\xd2\x60\x30\x1c\x0c\x86\x49\x7c\x39\x8c\xb2\x39\x5f\xc6\xf2\x89\x03\x21\xf4\x40\xa9\x5a\xf1\xee\x79\xea\x77\x10\x2e\xe7\x13\xd5\xc4\xd3\xc3\x64\x02\xe0\x84\x72\xfc\xe7\x6c\xce\x7f\x94\x10\x52\x63\xdc\xe2\x7c\x5d\xf0\x4e\x51\xe6\x71\x54\xa2\xa6\xf8\x5e\x1a\xef\xae\xf6\x43\x1a\x6f\xb6\xe2\x79\x58\x66\x79\x55\x64\x8b\xea\x33\xdf\xdc\x65\xf9\xbc\x13\x55\xc2\xeb\x55\x29\xbf\xab\xa6\xb3\xe9\xb6\x9e\x61\x38\xa3\x41\xc5\x5e\x90\xe3\xe1\xa0\xe4\x45\x89\x4b\x19\xbb\x5d\x6c\x56\x9c\x54\x15\xfa\x6d\x1d\x16\xb1\x58\x8f\x85\x7a\xde\x70\xb6\x9d\x15\x8f\x0c\x3e\x1f\x14\xb2\x98\x68\x2b\x1e\x7c\xb0\xca\x8a\x3e\xce\xab\x6a\x44\x08\xa9\xf9\x40\xad\xf8\xc7\x6c\xce\x31\xba\x09\x6f\xc3\x22\xca\xe3\x55\x89\xa0\x59\x57\x0e\xa9\x8a\x1a\x62\x08\xa1\x60\xf9\x20\x4e\xe7\x3c\x2d\x3f\xa4\x71\x09\x19\x4b\x07\xb2\x24\x27\x6c\xf0\xb5\x84\x43\xc2\xd2\x81\xb4\xcf\x39\x44\xba\x59\x55\x09\xac\x59\x3a\x10\x82\x57\x13\xc0\x82\xa5\x03\xb1\xe8\x3f\x5f\x87\x79\x18\x95\x3c\x2f\xaa\x6a\x38\x9d\xdd\x1d\xcf\xee\x43\xbf\x3f\x5b\x2f\x16\x8b\x45\x30\x84\x6b\xd7\x23\x58\x89\xf2\x26\xfd\xdd\x0a\x9a\x94\x43\x51\x6e\x12\x4e\x91\x16\x25\xaa\x6b\x65\xa4\x1c\x1b\x50\x27\x44\x04\x72\x17\x70\x89\x08\xa4\x2e\x20\x42\x04\x62\x01\x30\xbb\x83\x08\x84\x4c\xcd\x80\xc2\x32\x5b\x22\x33\x8d\xfc\xa8\xa1\x60\xdb\x78\x41\x39\x46\xf1\x02\x11\xb8\xbb\x8e\x13\x4e\x4b\xb8\x8b\xcb\x6b\x5a\x82\xb0\x69\x9a\xc3\x3c\xa3\x39\x94\xf9\x86\xe6\xb0\x88\xd3\x30\x49\x44\x4b\xf1\x4e\x53\x90\xe7\x3b\x4d\x85\x1f\x2f\xe3\x74\xcd\x69\x0a\x29\xbf\x13\x24\x53\x7e\x87\x08\xcc\x79\xc2\x4b\x01\x95\xae\x8b\xa6\x30\xe7\x97\xeb\xab\x2b\x9e\xd3\x14\x6e\xc3\x5c\x20\xde\x86\x82\xcf\x28\x4b\x8b\xb2\xf9\x4c\xb8\xf3\x61\xe4\x26\x20\xd6\x0c\x08\x44\x22\xda\x16\x30\xd9\x10\x78\x99\x24\xb8\x90\x0b\x57\xa1\x88\xf8\x56\x2d\x39\xa0\xe0\x0a\xbf\xe0\x92\x37\x79\xb9\x22\x20\xba\x29\xe4\x97\xd2\x18\x94\x81\xd1\x18\x9a\x32\xb0\x80\xe6\x6b\x4e\x43\x90\xa7\x1b\x0d\x41\x1c\x6b\x34\x04\xeb\x43\x68\x08\x6f\xc3\xb7\x34\x84\xd7\xe9\x22\x4e\xe3\x72\x43\x43\x19\x9e\x0b\xfa\xe2\x57\x30\x90\x84\x85\xfc\x96\x0d\xc1\xe4\x7a\xc5\x25\xcf\x72\x43\x08\x6c\x62\x9e\xcc\x69\xaa\x8f\x02\xd1\xa1\x5a\x82\xb1\xa5\x01\xa9\x16\x22\xc0\xef\x4b\x9e\xce\x0b\x9a\x42\x78\x17\xc6\xa5\xf8\x2d\x36\x69\x24\xe9\x89\x06\x22\xb5\x38\x0a\xd6\x4a\xfd\x33\xa3\x09\xb7\x61\x1e\x87\x97\x09\xb7\xda\x60\x00\xfd\x13\x54\x43\xc2\xb6\x71\x5a\xf2\x7c\x11\x46\xdc\x65\x35\x5e\xae\xd4\xf3\x2c\x31\x5f\x1a\x2e\x79\xb1\x12\x18\x29\x28\x1f\x26\x50\x55\x4b\x30\x96\xae\x97\x2d\xc0\x6a\x7d\x99\xc4\x91\x06\xc5\x8b\x98\x8b\x1d\x5a\xe5\xf1\xad\x08\x3c\x77\xa1\x59\xa9\xae\x39\xda\xf0\x50\x84\x84\x61\x54\xee\x82\x0b\x1a\x83\x72\x12\x34\x03\x75\x2d\x48\x33\xb8\x54\xaf\xde\x68\x06\x61\xba\xa1\x59\x6d\x33\xf5\xa8\x13\xa7\x9d\x84\x14\xd3\x28\x60\xc9\x34\x0a\x74\xf5\xb2\x53\xd4\x98\xc0\x8a\x0d\xa7\xbd\x59\xff\x91\xf7\x7f\xd9\xf7\x2f\xba\x93\xea\xff\xfd\x1a\x0c\x61\xce\x86\xbf\xfe\x17\x16\x0a\xce\xef\xcb\x2a\x9e\x57\xb7\x61\xb2\xe6\x55\x12\xa6\x57\xeb\xf0\x8a\x57\x42\xa8\x95\xe8\x0e\xe3\x94\xe7\x55\x12\x17\x65\x55\xf0\xb2\xca\xf9\x2d\xcf\x0b\x5e\x09\x77\x73\x5f\x5d\x0a\xcf\x78\x9b\x45\xe1\x65\x75\x95\x87\xab\x6b\x82\x86\x8d\x87\xdd\xb4\x3d\x6c\x27\x66\x1c\x42\x96\x43\x59\x5b\x94\x25\xe6\x02\x41\x2c\x21\x15\x46\x6e\x92\x9f\x78\x81\xbf\x43\xdf\x31\x16\x57\x15\xfa\x0e\x31\x16\x9b\xc2\x47\x3e\x90\x99\x55\xfc\x85\x33\x9c\xb2\x18\xda\x55\x57\x41\x27\x87\x98\x75\x7d\x41\x21\xf1\x3c\xf4\x5f\x88\x31\x3e\x58\x71\xfe\x19\x13\xcf\x33\x05\xbf\xb9\xad\x51\x97\x0d\xbd\x25\x6c\x30\x52\x2e\xb2\x6f\x1c\x16\xa0\x25\x2f\x43\x5d\x12\x39\x13\xb6\xd1\x65\x38\xb7\x7c\x12\xcf\xc3\x79\x97\xa5\x55\x15\x93\x33\x12\xb3\x6e\xec\x79\x68\x36\x43\x8c\xe5\xe6\x98\x8f\xab\x0a\xbb\x93\x10\x31\x8b\xda\x59\x04\xa6\x41\x6a\x02\xcd\xca\xa4\x4c\x64\xb4\x33\x10\x4b\x6f\xd8\x1e\xfe\x3a\x9b\xf7\xf0\x84\xca\x88\xb9\x37\xeb\x07\x93\xd9\xbc\x47\x26\x43\xbb\x9a\x0d\x36\x57\xc8\x60\x1a\x07\x09\xa1\xc1\x00\xb9\x83\x8a\x95\x08\x56\x9a\xd5\xc6\x0b\x3c\x9c\xce\xa6\xb3\x40\x9c\x76\x33\x02\x67\x33\x3a\x1b\x04\xfa\xf4\x8a\x9d\x91\xb1\x22\xcf\x0c\x79\x1e\x96\x18\xbd\x68\xd1\x66\x2f\x10\x38\xae\x5b\xe2\x8f\x5c\xfc\xe1\xfd\xb0\x21\x29\x41\xff\x10\x2e\x5b\x70\x30\x0f\xfb\x8b\x60\x18\x4b\x99\x1d\x5e\x58\x9b\x52\xf6\x10\xa5\x51\xff\xd9\x1f\xa1\x73\xf9\x20\x1d\xff\xab\x64\x86\xb3\xf9\x9e\x90\xdc\xcd\x7b\x24\x12\x8e\xc1\x6c\xfe\x88\x4c\x0e\x6d\xe3\xc3\xec\x0d\x5d\x1b\xd0\x62\x7e\x84\xc8\x04\x3b\xf6\x70\x0b\xb7\x52\x73\x08\xd5\x08\x43\x81\xc0\x07\xc5\xe7\x78\x75\x91\x9d\xa7\x22\xbe\xdd\x60\x14\x65\x4b\xe1\xef\x10\xd8\x16\x21\x54\x04\x43\x39\xf8\x64\xd2\x0a\x9c\x8c\x77\x29\x21\x67\x5d\x1f\x52\xd6\xf5\x8d\x0d\x94\x8d\x0d\xa8\x8b\xd0\x6e\x2e\x7f\x24\xa7\xa5\xe7\x75\x53\xcd\xed\x11\x9a\x0a\xc8\x24\x65\xdd\x11\x4d\x3d\x0f\x05\x0a\x01\x0b\x6a\xa4\xce\x59\x37\x37\x36\x53\xd6\x35\xe6\x04\x1c\x81\x5d\x62\x3c\xbd\x8a\x97\x9b\x75\x40\xf0\xa4\xab\x9b\x8f\x66\x63\x42\x7a\xb3\x4b\x25\xaf\x9c\x5f\xf1\xfb\x95\x35\xa5\xfe\x58\x2c\x07\x3b\x9b\xb6\x92\x68\x56\x01\x1d\x5d\x04\x3e\xd0\xe5\x0d\x4c\x88\x92\xf3\xbf\x1f\xf0\x35\x57\x70\xd5\x58\xe5\xff\x69\x6f\xc6\x8e\x7c\xf5\xf3\x5d\xfd\x2b\x47\xac\xf6\x75\xe2\x8f\xb2\x27\xc8\x2c\x2c\x99\xad\x43\x60\xa1\x9e\x29\x84\xcc\x41\x87\x82\x5d\x0f\x56\xb9\x20\x55\x6e\x5e\x17\xe7\xe9\x7a\xc9\x73\x71\x16\xe2\x90\x78\xde\xf5\x34\xb4\xb7\x27\x22\x7c\x1f\xa0\x2e\xcb\x6d\xb0\x3a\xd9\xe0\x42\x86\x84\x50\x0c\xe4\x49\x0a\x21\xa1\x1b\xec\x9c\xaf\x4e\x33\x24\x75\xe3\xcc\x6f\x95\x13\x36\x5a\x93\x2b\x85\x69\xbc\xe5\x59\xa3\x21\xb9\xe7\xa5\x64\xeb\xfa\x45\x75\x0d\x57\xa7\x0c\x3d\x12\xfd\x75\xe3\x40\x0e\x28\x6c\x33\xe7\xd5\xc1\x39\xf7\x1d\xb5\x56\xd2\xd4\xf3\xd4\x26\xe7\x55\x85\x8e\x15\x23\xda\x5a\xb6\x88\x90\x07\x58\x12\xc3\xb4\x5b\x77\xf8\x52\x71\xbe\xa3\x78\xad\x0d\x6b\x58\xbc\x54\x2c\x96\x83\x45\x58\xbe\xcc\xf3\xec\xee\xa5\xac\x64\x3a\x9f\xea\xda\x5a\x6e\xa3\x60\x59\x27\x07\xf2\x84\x7d\xb7\x50\x1e\x54\x40\xc3\xbc\x94\x7a\xd0\xc5\xf9\xf7\x23\xd2\x2c\x3a\x65\x23\x79\xe6\x89\xc3\xb5\xef\x9f\x85\x2f\xd8\xe8\xac\xdf\xb7\xef\xa2\x2d\x41\x91\x8a\xbe\x2c\x71\x48\x20\x63\x08\x4f\xb7\x75\x40\x90\x9d\xa5\x90\xa4\xb3\x17\x6c\xe4\x79\xd9\xf7\x27\x5a\x5c\x64\xdb\xeb\x85\x5a\x0e\xea\xb5\x43\xbf\x9f\x12\xf5\x2d\xb3\x63\x35\xe6\x44\x8c\x79\x4a\x7a\xbd\xf4\xc8\x40\xb5\xb2\x16\x44\x1c\x8b\x23\x09\xde\xca\x63\x05\x7d\x37\x1b\x9a\xa3\xa4\x30\x16\x21\xe6\x8e\xa5\xd7\x70\x26\xac\x6b\x09\xda\x15\x96\xd0\x39\xb1\xb2\x7b\xb6\x15\xf1\x25\xed\x8e\x4c\x80\xd4\x1d\x81\x51\x4d\xd1\xd6\xf1\x53\x77\x04\xca\x49\x50\x7d\xa3\x26\x7e\x77\x0f\x7a\xda\x1d\xd5\x4d\xe4\xf2\xb9\xfd\xbe\x5c\xd6\x0d\x55\x7e\xc5\xe7\xe6\x1e\x51\x55\xea\x99\xba\xcf\x93\x06\x23\x42\x1b\x75\x59\xcd\x6f\x59\x0c\x7a\xd4\x22\x63\x2a\xaa\xee\xb2\xd4\x54\xb0\xc3\x24\xbe\x4a\x59\xea\x28\xc9\xdd\x8e\x1e\x33\x3e\x48\xb2\x28\x4c\x3e\x86\x79\x71\x96\x9f\xe5\x2c\x97\x9a\x4c\xe2\x05\xce\x07\x22\x4e\x65\xac\x24\xe6\x8a\xfa\xa8\xd1\x04\x3e\xd0\x21\xdd\x59\x7a\x96\xb2\x54\xf2\x42\x44\x77\xce\xd2\xc1\xed\xb7\x10\xab\xd5\xa3\xa7\xad\x7a\xd3\x21\x2b\xd8\xfa\x16\x43\xb6\x97\x61\xfe\x99\xcf\x35\x3c\x92\xbf\x8e\xe0\xce\x71\xb3\x06\xce\x6c\x19\xc8\xd6\x7b\xcf\xb8\x50\x4e\xde\xef\x93\x4f\x83\x28\xd2\xcf\xa8\x0d\xd6\x94\x07\x8e\x44\x6e\x9a\x62\xd3\xb9\xae\x2f\xc9\x49\x9b\xda\x12\x74\x47\x0d\xfa\x7b\x79\x60\x35\xc9\x7d\x4b\x98\xe5\x03\xab\xe6\x8d\x08\x75\xc3\xaf\xd5\x88\x4f\x2a\x81\x16\x7a\xf9\x69\xa0\xd6\xcc\x44\x3e\x85\x20\x37\x12\x56\x37\x73\x38\x6f\x36\xca\x6a\xb3\x03\x63\x5b\x31\x15\xe5\xea\x5a\xcf\xe9\xa8\x6b\x63\x13\x82\xc6\x55\x92\x5d\xee\x10\x49\x1d\xa0\x88\x33\x9d\xcf\x5d\xa2\x4d\x4f\xad\x8d\xe3\xb5\x46\x51\x39\x9a\xc2\xd3\x10\x2b\x40\x54\x3b\x3b\x77\x8c\xc9\x56\x2f\xda\x2c\x90\x6d\x85\xf6\xd0\x1d\xa8\x30\xb1\xc2\x02\x9b\xe5\xc0\x1e\x88\xbd\x6e\xb6\xe7\xa5\x43\xbe\x41\xd8\x21\x2d\x15\x14\x76\xb9\xd8\x45\x12\x4c\x35\x84\x7f\x74\x22\xff\xdd\x67\x1a\x76\x1b\x21\xb5\x05\x12\x3e\x97\x67\xb8\x00\x0b\x7f\x3e\x48\xd4\x45\x90\x34\x60\x92\x3a\x00\x8b\x2e\x3d\x9a\xd1\xa5\xb8\xc1\x38\x13\xc1\x3e\x11\xb1\x80\x1c\xec\x79\xb1\xb2\xeb\xb3\x98\xc5\xca\xee\x52\x16\x37\x64\xec\x38\x79\x55\xfc\x19\xa7\x72\xa1\x39\x0f\x97\xda\x95\x60\x02\x5c\x3a\x0a\xb0\xa8\x50\x12\x5b\xff\x95\x40\x26\x9c\x59\xb3\xf8\xb7\xf6\xe6\xc8\xe8\x2b\xb7\xfc\x0b\x0e\xc4\x69\x47\x64\x06\xe4\x2e\xd3\xf3\x30\x77\xdc\xd9\xde\x8a\x45\x08\x66\x78\x6d\xd3\x73\xcc\xf3\x9d\xf3\xd6\xc1\x31\xbb\x26\xdb\xcb\x19\xe3\x93\x1b\x4c\x28\x3a\x13\x1c\x4c\xce\x31\xa1\x37\xb8\x74\x03\x86\x8f\x6a\xef\xf4\x65\xc2\x6d\x98\x23\x35\xe6\x47\x19\x6d\x48\x6b\x2b\xed\x55\x64\xc8\xe1\x1d\x46\x67\x88\xc0\x5b\x42\x9d\xf2\x91\x1d\xb2\xc8\xf2\x25\x22\x70\x01\x1f\x5b\x18\x97\x7b\x18\xaa\x7f\xdb\xc0\x6b\x91\xdc\x73\x09\x3d\x43\x96\xed\x78\x21\xdb\x18\x09\x05\x40\xcc\xea\x61\x23\xae\x45\xe6\x79\x56\x3b\xa3\x69\xd3\x6c\xee\xb7\x18\x7b\xeb\xe2\xa8\x7b\x35\x4c\x60\x8f\x63\x58\xf3\x9d\x7a\xa8\x60\x63\xc9\x05\x2c\xcb\xf7\xd6\xb0\xe0\x7a\x19\x36\x16\xb3\x18\x52\xb5\x09\xfc\x85\x50\x53\x23\xda\x17\x91\x5c\x34\x34\x35\xa4\x77\x32\xfe\x91\x42\x90\x54\x65\x2d\x49\x0d\xbb\x10\x9d\x54\x16\x6b\x4d\x3d\x49\x75\x58\xb0\x2a\x54\xed\x4e\x72\x2c\xc6\x61\x44\xe0\x56\x6e\x1c\x51\x82\x87\x97\x62\x80\x2c\xbe\xec\x0e\xb8\x52\x3b\xa0\x4b\x43\xbb\xcb\xb9\x53\xbd\xba\x4a\xb4\xdb\xfb\x49\xf5\xea\xca\xcc\x2e\xe5\x82\x83\xde\xe5\xdd\x75\xaa\x82\x92\xc2\xff\x48\xe8\xb9\x43\xf2\xa2\x51\xb7\x46\x63\x2f\x1c\xad\x7f\x83\x39\x88\x14\xc6\x76\x7e\xd9\xed\x1c\x39\x9d\x6f\xec\xbb\x30\xa3\x0d\x4e\x48\xc3\xac\x2b\x50\x51\x9e\xf6\x5e\xe5\xe4\x1f\xf4\xcf\xd2\x5d\x61\xd4\x1c\x56\x9d\x1b\x7c\x2c\xd6\x23\x24\xfa\x0b\x2e\x38\xc8\xd6\x5b\xc1\x2e\x7b\x81\x08\xe4\xf0\x52\xe5\x29\xae\x6a\x98\xb1\xe7\xf8\x58\x88\xc3\xc5\xad\x55\xe4\x50\x4e\x5e\xd1\x1f\x8c\xb3\xb9\x1f\x5c\x87\xc5\xbb\xbb\xf4\x27\x9d\x43\x60\x4e\x26\x37\x38\x3d\xa4\xa0\x90\x3a\xc6\x66\x64\x59\x4e\x7e\xa2\xbf\x11\xaa\xf8\x56\x7b\x21\x98\xfc\x0d\x5e\x5a\x65\x78\x2b\x07\xda\x6c\x87\x31\x5e\x55\xa6\x10\x61\x88\x7c\xa1\x17\x84\xca\x04\x52\x13\x09\x10\x81\xd7\x5c\x8f\x55\x16\xfc\x2f\xfc\x77\x10\xca\x2c\x3d\xa7\x00\x9b\xfa\xbb\x70\x39\x1f\x24\x24\xe5\x77\x9a\xc4\x81\x87\x5a\x16\xd4\x78\xa2\x81\xcc\x58\x6f\x30\x9f\xfc\x95\xfe\x49\x68\x05\x97\x9c\xd4\x35\x2e\x89\x70\x62\xce\xb6\xfe\xe6\x50\xb2\x89\xeb\xf4\x6c\x56\xcf\xc8\x2c\x80\x60\x48\xa4\xdf\x3b\xc7\x17\xce\x98\x9f\xbe\x71\xcc\x17\x67\xcc\x0f\x2d\x57\x09\xc6\x36\x09\x7d\x25\x43\xd5\x96\x1e\xbe\x32\x75\x37\x9d\x1c\x30\x96\x4f\x7e\xa0\xaf\x20\x56\xcd\x0b\xfa\xc5\xfc\xbd\x01\x7b\xa1\x09\x1d\x43\x2e\x74\x4d\x5a\xa7\xbb\x25\x93\xe1\xac\x37\xeb\x55\xfd\xbe\xb9\xe9\x30\x6a\x30\xd1\x22\x32\xde\x01\x62\x21\x98\xf8\xa0\xf8\xcf\x50\x97\xf1\x89\xd6\x85\x7f\xe1\x2f\x42\x61\x01\x45\x61\x92\x20\xd9\x3f\xd0\x4c\xfc\x4d\x7e\xed\xec\xf6\x6f\x62\x82\xc0\xe8\x8b\x7a\x0d\xa1\x7f\x9a\x15\x7f\x68\x49\x47\x71\xd0\xd5\x67\x0e\x3a\xde\xa2\x2e\xb3\xaf\x5b\xec\x2b\x01\xb1\x92\x0f\x82\xe9\x0b\xf8\xd9\x11\xde\xcf\xfa\x6a\x12\xd5\xae\xd9\x34\x31\x60\x93\xed\x19\x3b\x76\x8a\x04\x82\x62\x43\xea\xcf\xce\x3e\x5f\x62\x63\xe2\x66\x1c\x81\x73\xac\x55\xf8\x23\x75\xd5\xe3\x1f\xdf\x3e\xcc\xd5\x90\x3f\x59\x07\x83\xca\x30\xbf\xe2\xf2\x3e\x6e\x9f\x7f\x5b\xd9\xbc\xc1\x3f\x38\xa3\xff\xfa\x87\x47\xbf\x72\x46\xff\xa5\x61\x19\x51\xbd\x7f\x6f\x41\x3a\xd4\x1f\x0e\xb9\xd1\xbf\x19\x21\x1f\x72\x51\xcd\x6c\xa6\x82\x21\xa6\x73\x46\xff\x7d\x37\x6c\xb0\x24\xaa\xca\x72\xa8\x7c\xea\x26\xe1\x13\x7c\x98\x20\xd2\x8b\x14\x5e\x47\xb5\x26\xff\x4d\xff\x29\xce\x33\x5d\x79\xd3\x1e\x49\x55\x68\x65\x24\x60\x09\x25\x93\x86\x14\xd5\xf3\xf4\x50\xc7\x25\x2f\x29\xed\x24\x99\x4a\x30\xff\x54\x07\x95\x2a\xf5\x2b\xd0\xdf\x1d\xbd\xbf\x30\x0a\x2f\xf0\x5a\xfe\xf0\x82\xec\x29\xfe\x7f\x3b\x82\xb7\x82\x50\x9a\xff\x4f\x42\x1f\x58\xf9\x92\xbb\xe5\x89\x7f\x1e\xd8\xbb\x2f\xd6\x75\x9f\xcb\x10\x64\x77\xda\x5f\x74\xb6\x6a\xbe\x73\x9c\x42\xac\x76\x54\xb8\x26\x7d\x33\x19\xee\x86\x4c\xc6\xed\x48\xd3\x67\x2c\xd4\x21\x14\x0e\x07\xab\xac\x60\xea\xa7\xaa\x46\xa4\xe7\x8b\x00\x89\x43\x4e\x4c\xb9\x25\x95\x1b\x15\x2b\x9f\x23\x8c\xf6\x9d\x70\xc5\xf5\xae\x0b\x97\x5c\x1c\x1e\x72\xae\xe8\x35\x6b\xf8\x97\xf1\x92\x4d\xf2\x7c\x72\x96\x7e\xbf\x9b\xb3\x9e\xa5\xbd\xde\xc1\x64\x35\x0d\xec\x55\xbe\x70\x56\x82\x14\x28\xb9\xb4\x54\x9d\x3b\xb7\xa2\xca\xa7\x68\x76\x3e\x02\xe7\x0e\x5e\xc9\xb5\x4d\xac\x3d\x4f\xed\x43\x73\xdc\xa7\x2e\x62\xce\x1b\x53\x65\xae\x95\xde\xb4\x0e\x8c\x94\x7f\x9b\x8d\x39\xb7\x64\x70\x83\x63\x77\xa6\x98\xb7\x0c\xed\x7b\xed\xf2\x7f\xc1\x29\x07\x24\xa2\x87\x98\x3b\x7a\xab\xb5\x36\x3e\xa0\x2e\x21\x77\x72\x79\x11\xb1\x94\x1c\x12\x0e\x91\x3b\x59\xd1\x9e\x6c\xc7\x40\x0a\xbe\x1b\xea\xe2\xf7\xb8\x14\x5a\x42\x76\xad\xa4\x68\x98\xfa\x97\x8c\x8e\x02\xe4\xc4\x0a\x19\x17\xc1\xc2\x3e\x8b\x19\x3f\xec\x54\xba\xc2\x09\xd8\xe8\xcc\x16\xa6\x8b\x47\x74\x28\x0e\xdd\x49\x5b\xbc\x9e\x77\xc8\xe4\x08\x1c\xe0\xb0\x76\x92\x22\x7d\x84\x16\x42\x2a\x84\x50\xb3\xb4\xa4\x65\xa7\xc9\xb7\xed\x7b\x64\xf7\x1d\xda\x4a\x14\xba\xd2\x5e\x3b\xc4\x5a\x89\x92\xe7\x99\x74\xc7\xa1\x6f\x22\x69\x50\x7d\x2a\x83\x6a\x88\x2d\xec\x94\x3b\x61\xaa\x8e\xfa\xae\x9b\x98\xcf\x19\x75\xcd\xdb\xbe\x4b\x0b\xa7\x49\xf3\xe6\xdc\xc9\xc7\xe6\x7b\x0a\x70\x83\x57\x5c\x46\x56\x0e\x7e\x43\x7d\xd5\xde\xcf\x38\xd5\xae\x3e\x5b\x48\x2d\xc6\x07\x8f\xb4\x0b\x19\xdd\xfd\xd0\xa6\x34\x6f\x53\x32\x0c\x6d\x04\x43\xdf\x4e\xd6\xe1\x73\xe3\x52\xdf\x48\x29\x20\x22\x14\xcd\xf3\x6e\x5a\x71\xe2\xb2\x3d\xf3\xa3\xaf\x4c\xb1\x94\xc9\xe3\x41\x03\x51\x5d\xd8\x06\x7a\x36\x73\xb8\xb5\x99\x43\x29\x92\xc9\x97\xfb\x46\x71\xeb\x6e\x51\x4b\x85\x6f\xa5\xe8\x95\x25\xe7\xee\x7a\xae\x1c\xc5\x3a\xe4\x78\x34\x53\x97\xee\x98\xcb\xf6\x3a\xf5\xfd\xbf\x0d\x30\x2f\xf9\x7e\xb6\x7e\x2f\xf3\xbd\x5d\x7e\xef\x1f\x30\xe2\x87\x22\x03\x99\xea\xc5\xd1\x57\xe4\x7a\x2f\xed\xf1\xd0\x31\x7a\x20\x7c\xb8\xc1\x9f\x39\x2c\x39\xdc\x73\xa1\x46\xaa\x41\xe8\x57\xf7\x4d\x61\x18\x9d\xba\x6f\x1c\x83\x38\x23\x76\x97\xf7\x99\x3f\x7c\xda\x3f\x78\xd8\xbb\x2e\xe4\xee\xdb\x15\xea\xbd\x31\xc3\x76\xde\xff\xa0\x8a\x37\xd8\xe7\xf8\xa3\x33\xe5\xa7\x96\x0a\x35\xb1\x94\x3a\x03\xcf\x39\xbc\x77\x35\xe1\xbc\xcd\xa0\x71\xda\xe7\xda\x69\xef\x3a\x5b\xa9\x4c\x6a\x19\x2d\xcf\x6b\x18\x13\x9a\x76\xd3\x72\xa2\x37\x8e\x7a\x86\xc5\xef\xc6\xb8\xe7\x2e\x73\xef\x9d\xb1\x8b\x3c\x5b\xfe\xee\x68\xd7\x96\x5f\xbb\x72\x08\x1c\x11\x7c\x81\x63\x77\x92\x63\x17\xcf\x14\x7e\xce\xb1\x4a\x9b\x03\x59\x6e\x31\xc9\xdf\x2f\xf8\x27\x50\xa0\x73\xfc\x8b\xc8\xaa\x44\xdb\xa9\xb8\x1e\xa2\x74\x83\x17\x1c\x5e\xf2\xa6\xba\x25\xb6\xee\x65\x73\x64\xeb\xe5\xbc\x35\xb5\xc6\xad\xac\x47\xec\xbf\xa4\x56\xcf\xb8\xb6\x26\xf5\xa1\x4b\x30\xd7\x87\x14\x15\xd9\x02\x41\x14\xd1\x69\x00\x3a\xee\xa3\xaa\xe2\x89\xb9\x08\xee\xfa\x05\x8c\x00\x5d\x26\x59\xf4\x19\x89\x23\x14\x6c\x39\x98\xa6\x4d\x69\x18\x74\xb5\xd7\x85\x79\xde\xf6\x76\x07\xad\x06\x53\xb4\xa4\x82\xb8\x2d\x96\xb6\x6b\xe7\x7b\x0f\x14\x77\x4a\xeb\xa5\x5b\x5a\x77\xfb\x08\x94\xb5\x7e\xca\xbf\xf7\xe7\x7d\x7c\x50\x64\x09\x96\x7f\x6f\x62\x4b\x82\x3b\x45\x13\x24\xeb\xc1\x48\xfe\x61\x8b\xc5\x51\x77\x3f\x62\xe1\xa5\x5b\x84\x55\xcd\x50\xff\x1d\x81\xba\x33\x14\x28\x46\xc4\x5d\x76\xab\xaf\x2a\xdf\xaf\xc2\x88\x63\x7b\x97\x2c\xff\x1f\x20\x5d\x2f\x72\x9f\x90\x94\xc4\x86\xdb\xfa\xda\x94\xb1\x78\x92\x53\xe7\xb5\x22\x6b\x72\xfd\xae\x7c\x6a\xd3\xeb\xa1\x2e\x0b\x3d\x0f\xf5\xfb\xa2\x31\x89\xc5\x11\x17\xcd\x79\x84\x60\xff\x7f\x5e\x32\x41\x3e\x1f\x44\x91\xbc\x81\xd2\xd1\x3e\xe3\xb6\xb2\xcd\x62\xb0\x96\x21\xeb\x33\x22\x90\x66\x21\x68\x07\xcc\xca\xa6\xd2\xfc\x15\xd9\xf1\x5d\xd9\x8d\x88\xfe\x6f\x07\xb0\xf9\x23\xa4\x49\xa8\x2a\xab\x34\x9a\x5c\xd0\x8f\x44\xbe\x8e\x54\x91\xfd\x59\xf3\x77\x4a\xe1\x34\x6c\xfd\x0d\xce\xfd\x19\x09\x4d\x41\xf6\x68\xc7\x90\x27\xa6\xd1\x3a\x55\x73\xcf\xbb\xc3\x1c\x52\x32\x69\xe2\xe6\x31\xa2\x65\x5d\xd7\x22\x01\x80\x18\x42\x10\xfe\x46\x6b\x65\xa3\x34\x32\xd1\x88\x17\xee\x4b\x20\x76\xdb\xbc\x06\xf8\x29\x2c\x8a\xa3\x56\x77\x97\x2d\x4d\xf7\xe8\x48\x5f\x3c\x78\x5e\x6e\xee\x70\x47\x04\x42\x66\x75\x4a\x5e\x0a\xcb\xa8\x94\xcb\x27\xea\xba\x58\x93\x13\x62\x72\x9b\x84\x95\x6e\x59\xfa\x2c\x51\x77\xc4\x89\xda\xc3\x48\xf6\x4e\x93\x40\x10\x8a\x18\x7b\x4b\x42\x16\xca\x82\xbf\xbd\xce\x8d\xba\x6c\xcd\xf5\xc5\xaf\xb9\x3c\x09\xf5\x6d\x82\x3c\xb2\x62\x91\xc7\xe9\x51\x04\x32\x7d\x35\x62\x51\xec\x10\xd1\x6f\x6e\x21\x2c\xbe\xfe\xaf\x32\x14\x36\x2c\x58\xcc\xd8\xfa\xa8\x39\xe8\xe6\x5c\x38\xab\xf5\x24\xb4\x06\xd3\xc3\x6e\x99\xaa\xd1\xe8\xaa\x92\xee\xb1\x01\x4c\x54\x92\xd9\xf3\xe9\x48\x55\xd2\x85\xdb\x16\x29\xd6\x56\x9a\x43\x43\xb1\xe9\x74\xa7\x29\xa8\xe1\xbc\x3d\x7b\xdb\x1b\x68\x4e\xdd\xc2\xd9\x2e\x47\x2e\x60\x65\x5e\x0d\xdb\xcd\x24\x55\x35\x9c\x82\x7d\x61\xe5\xf6\x48\xc5\x22\x93\xac\xaa\x0a\xb9\x04\x5d\xb2\xef\xea\xec\xb9\xaa\x16\x55\x35\x62\x2c\x1d\xcc\xb3\xf5\x65\xc2\xd5\x6b\xdf\xf7\x12\x69\x12\x2a\x83\x99\x84\xfa\x86\xa9\x87\x17\x93\x11\xf5\x09\x6d\x2d\x65\x32\xa2\x45\x1b\x24\xdf\x42\xcb\x47\xcf\xfa\xe4\x27\x8e\x4e\x4d\x0a\x3a\x7e\x24\x1f\xf6\x27\x3c\x2a\xf3\x38\x52\x7f\xc2\x29\xd5\x4f\x0f\xeb\x0c\x1e\x4d\xa8\x19\x4b\xab\xd9\xb6\x9a\xd5\xe4\x78\x08\xd2\xe9\xff\x59\x79\xa3\xf7\xe2\x60\xa1\xd1\x44\xbe\x37\x45\xc3\x47\xa8\xd5\x7b\x9e\xce\x6d\xdf\xa3\x21\x92\x7f\x43\xa5\xbb\x9a\x31\x43\x04\x8b\x2c\x99\x53\x74\x99\x87\x11\x47\x10\x25\x59\xc1\xff\x94\x87\xd1\x67\x5e\x16\x14\x61\x32\x0d\xb6\xf5\x77\xdf\xcd\xd0\x0c\xfd\xfb\xdf\x08\xae\x79\xb2\xe2\xb9\x3c\xa3\xa2\x89\x2c\xcd\x20\xda\x7a\x5c\xad\xaa\x35\x3f\x66\x73\x4e\x13\xf9\x21\x9b\x11\xf0\xfb\x55\xce\x8b\x22\xce\xd2\x97\x49\x92\xdd\xf1\x39\x2d\xa1\xf8\x1c\xaf\xce\x2d\xfc\xc0\xd9\x28\x6f\x84\xda\x77\x41\x47\x65\x97\x5d\x78\x5e\xd9\x65\x5f\xaa\xaa\xb9\x0d\xaa\xeb\x9a\x10\xe0\x83\x9c\x5f\xc5\x45\xc9\xf3\xbf\x49\x3e\x31\x32\xef\xb0\x0b\x04\x2d\x36\xe5\x7b\xec\x60\x28\x86\xe8\x67\xe2\xaf\x7f\x3c\xc7\x48\x9c\x96\x43\x17\xcf\x1d\x74\x10\x99\x47\xcb\x6f\x42\x0e\x57\xab\x24\x8e\xe4\xd1\xf4\xcd\x13\xb8\x63\xee\xfb\xff\x93\x51\xff\x23\xee\xc4\xa6\x82\xbe\xe7\xde\xdd\x5a\xda\x1d\xd5\xbf\xc3\xe6\xff\x66\x78\x32\xef\x7d\x75\x7c\x32\x3f\x44\x41\x6e\x44\xf3\x00\xff\xe0\xe8\xa6\xfb\xf7\x78\xf8\x63\x84\x6a\x42\x8e\xfe\x7f\x00\x00\x00\xff\xff\x55\x91\x60\x5f\xdb\x53\x00\x00") + +func web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js, + "web_ui/assets/codemirror/mode/javascript/javascript-77218cd1268ea6df75775114ae086566.js", + ) +} + +func web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js() (*asset, error) { + bytes, err := web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/javascript/javascript-77218cd1268ea6df75775114ae086566.js", size: 21467, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x58\xdd\x73\xdb\x36\x12\x7f\xf7\x5f\x11\x6d\x5d\x1a\x88\x21\x52\xca\x3d\xdc\x0c\x6d\x84\xc9\xa5\xee\x8d\x67\x92\xcc\xdc\xb4\x9d\xce\x94\xa4\x5d\x58\x84\x62\x9e\x29\x50\x01\x41\x7f\x54\xe4\xfd\xed\x37\x0b\xf0\x4b\xb2\x2f\xbd\xe9\x8b\x04\x62\x17\xfb\xf1\xdb\xc5\xee\x92\x64\x5d\xab\x95\xc9\x4b\x45\x24\xdd\x41\x79\xf3\x6f\xb9\x32\xc0\xb9\x79\xda\xca\x72\xfd\x4a\x3e\x6e\x4b\x6d\x2a\xcf\x7b\x46\xd9\x94\x59\x5d\xc8\x48\x12\x2d\xbf\xd6\xb9\x96\x04\x7c\x3f\xf0\xfd\xa0\xc8\x6f\x82\x55\x99\xc9\x4d\xae\x75\xa9\x81\xd2\x10\x7a\x0d\xe3\xe1\x4c\xae\x73\x25\x3d\xcf\xfd\xfb\x62\x93\x45\x6e\x49\xe2\x97\xc5\xa4\x4c\xd2\x50\x92\x0f\x65\x26\x3f\xd9\x1d\xda\x52\xb2\x6f\x7a\x5d\xc9\x57\x95\xd1\xf9\xca\xc0\x91\xf4\x9d\xb8\x4f\x65\x26\x09\xe8\xfa\xe6\x09\xd8\x1e\x77\xbf\x7e\x65\xec\x53\xa9\xc9\xbd\xd0\xaf\x0c\xdf\xb5\x4c\xf1\x05\xd3\x5c\xfa\x85\x54\x5f\xcc\xed\x99\x3a\xd7\x67\xa7\xa7\x8a\x9a\x58\xc6\x2a\x4d\xf9\x6c\x71\xa4\xa5\xa9\xb5\x7a\x65\x5a\x3c\xa3\x98\xe6\x86\xc4\x20\x8a\x5c\x54\xc0\x40\xa8\x0c\x18\xfc\xe3\xe2\x9f\x97\x9f\x81\xc1\x8d\xfc\x92\x2b\xfc\xd7\x52\xdc\x01\x83\x95\xa8\x24\xfe\x15\xa2\x42\xe6\x4c\xae\xdd\x6f\xae\x64\x16\xe1\xb2\x04\x06\xb2\xb0\x4c\xb2\xa8\x72\x24\x5f\x7c\xfe\x01\x9f\xac\x5c\xa9\xaa\x5a\x23\x71\x2d\x1c\xd3\xba\xd4\xc0\xc0\xf2\x59\x45\x2e\x2c\xc0\x40\xc9\x47\x83\x7f\x25\xfe\x5a\x26\x2d\xad\x74\x2d\xab\x55\x2d\xed\xc2\xe8\x27\xf7\x5f\x6b\x3c\x5b\xc9\x02\xe5\x54\xf5\x56\x22\xbf\xb9\x95\xb8\x6b\xb4\xe5\xae\x95\x33\xb6\x56\x85\xb4\xb6\xd7\xca\xe4\x05\x30\x78\x70\x6c\x0f\xb7\xb9\xd5\xfb\x94\xcb\x02\x2d\x55\x96\xa8\x45\x6e\xcd\x34\xb7\xba\x7c\xb0\xfe\x9b\xd5\xad\x35\xdf\x92\x8b\xb2\xdc\xda\xdd\xa2\x58\xad\xba\x85\xd5\x5d\x88\xcd\x4d\x26\x80\xc1\x56\x97\x48\xd8\xd6\x37\x45\xbe\x72\xcf\x46\xae\x8c\xcc\xec\x3a\xbf\x17\xc6\xb9\x62\x73\xd0\x4a\x14\xd9\xb8\x71\xad\x65\x21\x4c\x7e\x6f\xe1\x7c\x34\x0e\x43\x51\x9b\xb2\x63\xbb\xbe\xbe\xf8\xfc\xc3\xf5\xb5\x5d\xfd\x78\xf9\xf1\xa2\x5b\x7e\xbc\xfc\xdc\x2f\xb3\x5c\x5f\x5f\x43\x4a\x59\x6e\xa3\xec\x30\xe8\xc3\xd7\x45\xd3\xc5\xa0\x07\xa0\xc7\x65\x88\x44\x87\x63\xef\x7a\xe7\x73\xe7\x98\x4b\x90\x94\xb2\xd2\xca\x77\x16\x3a\x11\x29\x65\x82\xef\x20\x86\x10\x52\x60\xb0\x83\x10\x5a\x60\x40\x20\x04\x0a\xed\xd1\x90\xc2\x35\x91\xcc\x30\x45\x77\x5d\x5e\x2a\xdf\x94\x77\x52\xe5\x7f\x48\x7f\x5b\x57\xb7\x44\x52\x26\x09\x32\xb4\xc3\x91\x35\x1e\xa1\xbb\x7c\x4d\xa4\x5f\x95\x05\xa1\x9e\x27\xfd\x0d\x1a\x48\x80\x3b\x93\xec\x96\x44\x1a\xed\xf3\xfd\x40\x6e\x45\x19\xac\xca\xcd\x46\x2a\x03\x47\x56\x94\x14\xe6\xa7\xad\x58\xc9\xf1\x8c\xaa\x8b\xe2\x08\xaf\x89\x66\x39\x2b\xb9\xf4\x31\x2d\x09\x45\x76\xf8\x1d\x38\x2f\x9b\x06\x4e\xdc\xff\x09\x9c\x70\x5e\xf6\x07\x6b\xb2\x22\x25\x03\xbc\xd0\xea\x0b\x30\x47\x6c\x1a\x77\x88\x32\x34\xdf\x0a\x09\xec\xf3\x0e\x55\xac\xb9\xf4\x57\xb5\xd6\x52\x19\x42\xbb\xeb\xeb\xec\xaa\xee\xf2\xed\xcf\x25\x32\x53\xc7\x5a\xbc\xc4\x2a\xfd\x1b\xb1\xba\xfb\x65\x4b\x9e\xd3\xe6\x6b\x7a\xd4\x17\x89\x8c\x2f\xce\x9e\x73\x9c\x17\x67\x4e\xf4\x76\xdf\x49\x02\x9c\x6f\xa3\xec\x94\x2f\x31\x6a\x9c\x6f\x3d\x8f\x64\x73\xbe\xa4\x2c\x3b\x5f\x50\x5b\x16\x5a\x6b\xe3\xb7\x74\xb3\x05\xe7\xd9\x8b\xc8\xcc\xdf\x00\x9b\x2d\x1c\x1e\x6d\x77\x91\xcb\xad\xd4\xc2\x94\x1a\x50\x30\x7c\x3f\x02\x74\xc7\x07\x3c\x6f\xb1\x8e\xd9\x80\x11\xa8\x80\x46\x77\x1c\x84\x29\x37\x10\xba\xbd\x20\xfe\xf5\x5f\x69\x60\xb7\xbb\x13\x03\x41\xef\xed\xcf\xdf\x8c\x94\x87\xc7\xaf\x69\x40\x3d\x8f\xec\xeb\x59\x52\x9b\x00\x1b\xde\xf3\x5d\x25\x0f\x49\xc5\xd3\x80\xf6\x85\x74\x13\x11\xe1\x6f\x35\xda\x6d\x9e\x2e\xab\x0b\x55\x6f\xa4\x16\x37\x85\x24\x1b\x14\xb7\xe1\x22\xde\xa4\x94\xa1\xe3\x1b\x76\xc7\x6e\x07\x8f\x69\x78\xe0\xec\x77\x30\x49\xa1\x3e\xee\x17\x2a\x23\x07\xa9\x0a\xe7\xc8\xe8\x79\x04\x0b\xbd\xcb\xfb\xe0\xea\x7c\x1e\xc5\xc9\xef\x09\x24\x27\x69\x44\x62\x31\xff\xe3\xfd\xfc\xb7\xeb\x28\x4d\x1e\x5e\xd3\x71\x3f\x0a\xcf\x9a\x63\x1a\x50\x3a\x86\x83\xe4\x5c\xc7\xcb\x94\x8d\xfd\x05\xef\xd6\x60\x84\x13\x9f\xd3\x68\x7a\x7f\xca\x2d\xa1\xe1\x81\x81\x1d\x66\xed\x24\xbb\x17\xfb\xfe\xd8\x70\x3d\x02\x8d\xec\xf2\x57\x2c\x38\x24\x88\x93\x4c\xcc\xd7\xef\xe7\x3f\xa6\x01\xed\x62\x01\x37\x87\x3c\x8b\xe5\x40\x1d\xb6\xe6\x7f\x4f\x03\xca\x40\xd5\x9b\x1b\xa9\x2d\x2c\x41\x92\x05\xbe\x91\x95\x21\x25\xa5\x07\x0e\x04\x57\x71\x92\x5d\xa7\xaf\x49\x14\x26\xbe\x5d\x9e\x52\x84\x23\x96\x17\x69\x7c\x9a\xcc\xd3\xa8\xdf\x3c\x10\x0a\x91\xcb\x40\xbc\x3f\x67\xa3\xb4\x24\x89\x3f\x7c\x4a\xe7\x01\x3d\xa3\x67\xfb\x0e\x26\xc9\x81\xf5\xc9\x83\xb5\xdd\xdd\xaa\x11\x27\x94\x1d\xbe\x00\xd0\x09\xd0\x08\x73\x05\x4e\xb0\xd8\x63\x56\xb3\xd9\xd2\x81\xda\xe1\x73\x02\x27\x8e\xe5\x04\x4e\x06\x96\xc5\x1e\x4b\x10\x27\xe7\xc9\x5b\xcc\x75\x72\xb0\xd1\x1d\x98\x30\x9e\x26\xf3\xe4\x75\x12\x24\x5e\xd2\x24\x61\x32\xc3\x43\x07\xb7\xc9\x25\xd3\xf1\xbb\xeb\xe4\x51\x2c\xe7\x49\xbd\x5e\xaf\xd7\xa3\xec\x21\x90\x0f\xc7\xfb\x74\x36\xa8\x88\x92\x59\xc2\xa7\xca\xc7\xc4\xb7\x18\xbf\x73\xf9\x3c\xc2\xfb\x2e\xea\x33\x78\x5f\xe4\x01\x56\xef\xa0\x53\x32\xda\x70\x60\x02\xdc\x0b\x9d\xe3\x65\x9c\xbf\x71\xaa\x8e\x9f\x43\xde\x3b\x78\x8d\x3e\x1d\x88\x1b\xb3\x12\xb3\xab\x23\xbb\xf5\x24\xa6\x83\x92\xbf\xb9\x44\x7c\xd1\xf8\xe7\xa9\xf9\x2d\xc3\xa7\xd8\x8d\xcf\xd8\x3c\xfb\xe8\x40\x9e\x0d\x05\xa1\x81\x19\xf6\x97\x99\xf1\xef\x85\xfe\x98\x57\xc6\xf3\x60\x07\x33\x6e\xfc\x42\x54\xe6\xe7\xf2\xce\xf3\x70\x38\x9b\x6c\xd8\xf6\x19\xc4\x09\x49\x68\x12\x27\xe9\xae\x4d\x92\xb3\xe7\x36\x2a\x5e\x32\xdb\x04\x51\xc9\xbc\x8f\x92\xb5\xe4\x2d\xf4\x5c\x20\x34\x8e\x47\xce\x73\x8e\xe9\x14\xbc\x0e\x13\xff\xea\xfb\xf3\xb7\xff\x69\x26\x32\x6d\x15\x7f\xe4\x7b\x7e\x3f\x67\xef\xeb\x2a\xf8\xce\xa7\xc7\xa6\x21\x8a\x83\x0f\x94\x4d\xca\xe5\xa4\x41\x0f\x6b\x0e\x0d\x58\x6b\xc7\x49\xa1\xc0\xf9\xb8\xc7\xbb\x69\x88\xc4\xd6\x35\x54\x3a\x3b\x76\xa0\x67\x2d\xce\xf6\xfe\x56\xca\x3b\x42\xed\xce\x92\x73\x49\x5f\x18\x48\xb0\xf0\xb1\x71\x23\x9e\xd0\xba\x76\xb7\x4c\xad\xd8\xa3\x3f\x61\xe2\x05\x91\xf3\x25\x6d\xed\xb0\xbc\x9b\xa8\xf7\x3c\xf2\x7f\x1c\x3d\x5d\xd2\xa1\xff\xac\xdd\x74\x34\x3a\x9d\x11\x07\xb5\xe4\xb3\xe5\xc0\xb4\xe7\x73\x8f\x48\x44\xfe\x92\x73\x34\x24\x92\xcf\x16\xcc\x69\x9e\xaa\x5e\xb9\x61\x8e\xe9\x41\xc7\xa0\x38\x67\x5d\x1f\x17\xac\x46\xc3\xb0\xa0\x82\x96\x22\x9b\x7f\xad\x4b\x23\xb3\xf9\x56\xd4\x95\xcc\x80\x73\x5e\xfa\xab\x52\x19\xf9\x68\x7c\x7c\xe1\xf2\x3c\x32\x6c\x4c\x48\x5b\x2d\xef\x59\xee\x72\xb1\x05\x4a\xcf\x30\xf2\x33\x4e\x04\xcf\xbb\x7b\x49\xcf\x6c\x2c\x05\xe7\x28\x43\x37\xcd\xac\xa6\x74\x57\x1e\x78\x7c\x34\x4c\x31\xca\xf3\x6c\x0b\x16\x9e\x37\xab\xed\xd1\x4e\xfc\x0e\x07\x2f\x9b\x24\xfb\xc6\xec\xd0\x86\x70\x78\x66\x68\x6d\xf8\x92\x4f\x2d\x65\xe5\xc1\xf8\x89\x93\xe9\xa8\x3a\x88\xdf\x25\xc7\xfd\x55\xc9\xfb\x4c\xdc\x37\x16\x4f\x65\xe3\xa9\xb6\xe6\xb3\xda\xf3\xb0\xdf\x70\x2e\xda\xe1\xad\x6e\x0c\x46\x75\xd0\xca\x9f\x8d\xca\x38\xae\x8f\x83\xb2\xe7\x1d\xb6\x78\xf6\x3f\x66\x90\x4e\xd9\xae\x32\x42\x9b\x9f\x8c\x30\x32\x1c\xc2\xdc\xeb\xdb\xf5\xa2\xc2\x78\x9d\xb2\x5c\x61\xad\x92\x59\xb8\x60\x1d\x58\xe1\xce\xa1\x65\xf0\x75\x62\x20\xcf\xa5\xef\xd6\xbf\xa8\xdc\xb4\x96\x37\x57\xb5\xcc\x3e\xe6\x4a\x86\xb3\x25\xeb\x8a\x57\x88\xb1\x66\x5d\xa9\x0b\x67\xcb\xb6\x65\x56\x5d\xb8\x3f\xc4\x28\x6e\xf9\x06\xcf\x89\xf1\x7b\x4d\xbc\x57\x24\x9c\xd5\x6e\xca\xc3\xd4\x1c\x41\x88\xcd\x4b\x17\x00\x25\xb3\x35\x57\xb6\x24\xba\x12\xcc\x79\xfd\xc2\x60\x7e\x04\x77\xf2\xe9\xa1\xd4\x98\xd2\xa4\xc6\x0a\xc6\xc7\xf2\x1b\x41\x3f\x31\x42\xa8\x5f\x9e\x1e\x27\xa2\x68\x34\xc8\x0a\x83\xab\xf8\xfd\xfc\xb7\x3e\x57\x0a\x1a\x81\x11\x5f\x20\xb4\xef\x76\x13\x05\x4d\xd3\xbd\xe7\xed\xed\x0d\xfd\x21\xb2\xfc\xe1\xd0\xb9\x30\x0f\xc8\x9a\x17\x2c\x7f\xd9\x98\x82\x46\x82\x83\x83\x0c\xc2\xf2\x5b\x4c\x99\x74\x4c\xf8\x5a\x3f\xe3\x85\xe7\xf5\x2f\xdd\x33\x5e\x34\x8d\xf4\x57\x65\x51\x6f\x14\xa1\xb3\xc3\x18\x44\xd8\xa2\x38\x9e\x30\xc3\x2d\xef\xe3\x75\x3e\x2e\x3d\x8f\x8c\xa6\xd0\x70\xb2\xee\xf2\x92\xa8\xa6\xc1\x9b\xd1\xa7\xeb\x8c\xd7\x2e\xf8\x1d\x0c\x7c\x4d\x19\x34\xc0\xb9\xb2\xbb\x1d\x22\x7c\x6c\x9e\x94\xf5\x22\x39\x17\x4d\x63\xbb\x64\x9c\xec\x7a\xcc\x15\x0e\xc3\xfb\x35\xc0\xec\xd7\x00\x34\x60\x4c\xea\xd1\xf4\x36\x24\x3d\x3c\xbd\x64\x9a\xa4\x49\x3b\x4a\xa6\x53\xe7\x51\xb4\x35\xb1\x57\xb6\x4f\xb2\x43\xc1\x90\xd9\x7b\x77\x85\xbb\xb2\xa0\x9a\x66\xec\x99\x98\xa5\xac\x6e\x3b\xbb\xc2\x67\x5d\xf0\x4f\x12\x7f\xc6\xd7\x7d\x47\x5c\xb8\x77\x62\xc4\x4f\xf9\xab\x5b\xa1\xdf\x1b\xb2\xb0\xdf\x18\x06\x18\x4a\x9e\xdb\xe2\xcd\xb9\x88\x75\xda\x34\x93\xbb\x90\x77\x55\x3d\xb8\x22\x51\x28\x55\xd6\xd8\xef\x05\x0d\x76\xc2\xc6\x7e\x34\x6a\x1e\x6e\xa5\x6a\xdc\x87\x1e\x9a\xdc\x0c\xd8\xf4\xbd\x2c\x1f\xf0\x3c\x25\x65\xb4\x08\xa7\x35\x83\x9e\x1e\x42\x11\x4d\xc9\xe1\x82\xb6\x4c\x16\x72\x65\x74\xbe\xba\x54\xdb\xda\x84\xc1\x55\x52\xbd\xee\x2c\x71\x3a\x9b\xa4\xa5\xc7\x01\x2b\x72\x25\x3f\xb8\x14\x0a\xe1\x3b\x68\x5b\x8a\x80\x77\x5f\xe6\x2e\x3f\x5d\x10\x40\x4f\x83\xc7\xb9\xfb\x40\xe7\xbe\xd3\xd1\x96\xd2\xa3\xff\x06\x00\x00\xff\xff\x95\xbb\x19\x0f\x95\x14\x00\x00") + +func web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs, + "web_ui/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js", + ) +} + +func web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs() (*asset, error) { + bytes, err := web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js", size: 5269, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsCodemirrorModeXmlXml10ec8b8cc61ef0fbd25b27a599fdcd60Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x38\xdb\x6e\xdb\x38\xda\xf7\x79\x0a\x8b\xff\x0f\x0d\xd9\xd0\xb2\x3d\xb3\xbb\x17\x4a\x58\xa3\xc8\xb4\x8b\x02\xdb\x03\xd0\x0c\x16\x0b\xcb\x1d\xd0\x12\x6d\x73\x23\x93\x2e\x45\x25\x4e\x2d\xbd\xfb\x82\x1f\x75\xb2\x9d\x76\x6e\x44\x8a\xfc\xce\x67\x09\xaf\x4b\x95\x5a\xa9\x15\xb6\xe4\x88\xf4\xea\xbf\x22\xb5\x88\x31\xfb\xbc\x17\x7a\x3d\x12\x87\xbd\x36\xb6\x08\xc3\x8b\x9b\x9d\xce\xca\x5c\xcc\x2d\x36\xe2\x5b\x29\x8d\xc0\x28\x8a\x26\x51\x34\xc9\xe5\x6a\x92\xea\x4c\xec\xa4\x31\xda\x20\x42\x62\xd4\x72\xe8\x91\x33\xb1\x96\x4a\x84\xa1\x5f\x23\xbe\xcb\xe6\x7e\x8b\x17\x2f\x93\x59\x52\x4b\x62\x8b\xef\x74\x26\x3e\xc0\x09\xa9\x09\x3e\x15\xbd\x2c\xc4\xa8\xb0\x46\xa6\x16\x5d\x3d\x72\x33\x12\xec\xc8\x4b\xab\xbf\x88\x7c\x7d\x97\xeb\x42\x98\x22\x3e\x72\x23\x78\x1c\x4c\xe9\x8a\x17\x02\x56\xe3\x9e\xa9\xce\xfd\xb2\xdb\x71\x95\xb9\xad\xd8\xad\x04\x6c\xd6\x86\xef\x00\x72\x0b\x90\x72\xb7\x81\x45\xed\x4b\xeb\x36\x0f\xe2\x79\x23\x94\xdb\xe5\x52\x3d\xb8\x75\x27\x2c\x70\xd8\x73\xc3\x77\x6e\x53\xe8\xd2\xa4\x40\xc2\x1a\x9e\x02\xcc\x93\x67\xbb\x13\xaa\x94\x56\x38\xa8\x9a\xca\xdd\x3e\x97\xa9\xb4\xf9\x33\x08\x9b\xc5\xc7\x2c\xf3\x74\xdd\x53\xef\xed\xc6\xe8\x72\xdf\xec\xa5\x06\x9e\xf0\x6a\xfc\x13\xc4\xb1\x2b\x9d\x3d\xc3\x06\x70\xed\x5a\x6b\x7f\xbe\xf5\xfc\x81\x53\xaa\x95\x15\x07\xfb\x4f\xc3\x57\x2b\x30\x4a\xd6\x31\xcb\x2c\x40\x64\xf6\xec\x20\x97\xf1\x11\x04\xa9\x5b\xee\xc7\x5e\x8a\x81\x6c\x75\xff\x72\x3c\x39\xde\xc7\x47\x9e\x65\x46\x14\x85\xc3\xe0\xc6\xca\x34\x07\x9b\xf0\x42\x66\xde\x13\xb9\x4e\x1f\xbe\x95\xda\xc2\x5b\x26\x8d\x5f\x1e\x61\x01\xf7\xac\xa5\xc8\xb3\x42\x80\x42\x4e\x31\x61\xfc\xce\x80\x99\xb7\x33\x78\xfe\x0a\xcf\xdf\xe0\xf9\x37\x78\xfe\x1d\x9e\xff\x80\xa7\xe0\x99\xc7\xda\x76\xd6\xdc\x76\xae\x70\xab\xe2\xc0\xd0\xc7\x03\xdc\xef\x0d\x08\x54\x88\xb4\xd5\xd7\xf2\x95\x97\xbd\xcc\x41\x37\xb3\x8f\x8f\x03\x27\xd4\x6e\x39\x3d\xf0\x6e\x39\xf6\xde\x69\xfc\x52\x3b\x3f\x1d\x1b\x5f\x6d\xfd\x01\x5c\x75\xa0\xb5\x3b\x3f\x83\x70\x5a\xbc\x4c\xcc\xc4\x47\xef\xe3\x9a\x66\xfa\xa3\xb6\xef\x55\x26\x94\x8d\x8f\x5e\x87\x9a\xf2\x3c\xd7\x4f\x7f\x28\xb0\x32\x90\x84\x83\x0f\xb2\x28\xa4\x82\xb8\x4e\x79\x21\xde\xe9\x3c\x03\x68\xf5\x42\xfe\xbc\x14\xa7\x2f\x44\xd4\x19\xff\x0b\xce\xb3\x33\xce\xb3\x01\xe7\x59\x7d\x65\x23\x5f\x0c\x3e\xe8\x4c\x60\x74\xd8\xe5\x88\xf6\xa9\x6e\xa8\x26\x47\x97\xdf\x9c\x4a\x9a\x33\x13\x49\xe0\xf2\x87\x92\x96\x96\xcc\xb1\x66\x3a\xda\xda\x5d\xee\xb0\xe7\x22\x56\x57\x6b\x6d\xb0\x43\x48\x47\x52\x8d\x32\x52\x2e\xd2\x25\xcb\x16\xe9\xf2\xf4\x42\xfb\x0b\x0d\x17\x0d\xb3\x51\x81\x2d\x15\xe4\xd8\xbd\x2b\xac\xc8\xd1\x08\x5b\x1a\x35\x12\x91\xd5\x0f\x42\xc9\xef\x82\x29\xaa\x00\xb0\x76\xd4\x0c\xb3\x91\x12\x07\x8b\xc9\x95\x87\x44\xb7\x88\x31\x33\xb7\x91\xe0\x16\xa3\x00\x91\x76\xbb\x80\xed\x8e\xdb\x74\x8b\xd1\xdd\xef\x6f\xee\xdf\xb8\x13\x85\x77\x18\x71\xab\x77\x88\xa2\xe5\xf2\xb5\xab\xa0\xaa\xcc\xf3\xb8\x83\x1c\x8f\x5b\x28\x57\xb1\x84\xb2\x88\xa2\xf1\x38\x39\xfc\x26\x1c\x6c\x07\xf6\xfb\xa7\xbb\xfb\xff\x7c\x7e\x8b\x68\x30\xa5\xc1\x94\xcc\x31\x70\xfd\xf7\x56\xe6\x02\x4f\x16\xc9\x53\x12\xfd\x99\x8c\x97\x13\x42\x55\x67\xdc\x91\xc5\xa2\xd3\xaf\xb3\xb8\xa2\x86\x1c\x5b\x5b\xe9\x1b\x27\x4c\xc0\xb0\x66\xaa\x51\x93\xdc\x90\xa3\x5c\x63\x50\x53\x93\x06\xdb\xf4\xd6\xb1\x58\x5c\xcf\x08\xed\x4f\x80\xe2\x95\x43\x79\x0d\x28\x0e\x7b\xc6\x98\x63\xdd\x63\x15\x57\x2b\x23\xf8\x43\xfd\x22\xbd\xf1\x25\xbd\xba\x81\x44\xae\x02\xa3\xba\xc6\x33\xd2\x5b\x0e\xcc\x3d\x47\x3f\x31\xc2\xc0\x9b\x3b\xec\x69\x50\x34\x7f\x8d\x08\xf5\x2f\x24\xc6\x9c\x35\x84\x26\x88\xcc\x51\xea\xc2\xff\x9e\x6f\x50\x8c\xf4\x5e\x28\xb7\x1b\x12\x59\x53\x64\xf9\x66\xb4\x72\x35\x5f\x58\x44\x62\x14\x42\x14\xe0\x86\xc6\xff\xf5\x61\x70\x68\xb7\xad\x58\x7c\xbc\x7e\x33\x7e\x97\x64\xcb\x09\x09\xc3\x06\xe8\x06\x91\xf8\x54\xf6\xbf\xb8\x7e\x4a\xa2\x64\x1c\x9f\xc1\x90\xb9\x8f\xac\x18\x09\x68\xab\xf1\xa9\x3d\xbe\x86\xb7\x10\x10\x65\x9e\x93\xba\x0b\x8a\xb5\x4f\x02\xe7\x7d\x45\x0d\xd5\x7d\x7c\x77\x2e\xac\x2a\x34\x71\x6b\xc7\xcb\x85\xed\x65\x9e\x14\x94\x33\x8f\x30\x47\x42\x65\xde\x7a\x85\xc8\xd7\x9d\x31\x4f\xad\x06\x0c\xd8\x30\xac\x38\x43\xe2\x5b\xc9\xf3\x02\x81\x94\x57\x7d\xdc\x1d\x4f\xf8\x88\xa8\xb0\xdc\x0a\x76\x70\x3e\xe1\x9b\x8f\x7c\x27\x18\xec\xbe\x58\x6e\x2c\x03\x5c\xa7\x90\x64\x3d\x1a\xa8\xd9\xe4\xec\x48\xce\xe5\x35\x1a\x39\x61\x1a\x4b\xa1\x7e\xdf\x44\xda\x64\x91\xfc\x92\xa0\xe5\x24\xb2\xa2\xb0\x58\x93\x39\x1e\x88\x80\x15\xd3\x14\x1b\xd6\x8f\x28\x50\x48\xb4\xc1\x37\x81\x8d\x84\xce\x31\xb9\x21\x72\x8d\x5b\x5b\x32\xa6\x4e\x54\x58\x9f\x84\x3f\x72\x83\x8d\xda\xa0\x9a\x44\xb2\x78\xaf\xde\x58\x6b\xe4\xaa\xb4\x82\xb9\x26\x43\x40\x5b\x77\x0f\xca\xdd\xe9\x9c\xd9\x28\xd5\x79\xb9\x53\x78\x18\xd8\x20\x02\x71\x2e\xf7\x15\x62\xf2\x75\xf1\x35\x29\x92\x72\x3a\xe5\x53\x76\xfb\x3a\x41\xc9\x2f\xcb\x57\x17\x47\xc9\xc4\x85\x04\x7a\xd2\x26\x43\x83\xa0\xd8\x79\x85\x7e\x58\x2b\x6e\x02\xd5\x6a\xe9\xd2\x5b\x35\x3c\x05\x79\x31\xc9\xdb\x52\xd2\x66\xbb\xad\x7b\x4e\x1b\xc7\x89\x2a\x72\xb4\x5b\x59\x44\x7b\x23\x1e\x41\x3d\x68\x39\x14\xce\x3a\x07\xfb\x57\xdf\x10\x98\x6d\x36\x22\xf3\xc7\x85\x33\xce\xa7\xf5\xbf\xa4\x72\x05\x1b\x97\xd1\xa0\x47\x45\x5b\x5e\x7c\x7a\x52\x9f\x8d\xde\x0b\x63\x9f\xb1\x20\x55\xd5\x31\x71\x41\xdd\x6c\x23\xa5\x3d\x02\x09\x43\x0c\x54\xdb\x03\x16\x4c\x07\xd6\xd9\xbb\x89\x74\x40\x00\x77\xfb\x5e\x76\x50\x65\x80\xb3\xed\x43\x04\x52\xed\xc6\x5b\x2e\xe8\x10\x9a\x1c\x70\x31\xaf\x06\x64\x1a\xed\x69\x50\x46\x67\x8d\xf8\x5c\x2b\x45\xaa\xea\x12\x6a\xa1\x96\x97\xea\xb7\xbc\x9c\x22\x03\x5f\x1c\x5a\x5f\x34\x61\xd9\x56\x3e\xc6\xec\x1c\xab\x3e\xbf\x44\x1f\x7f\x2b\x12\xf7\xb5\xd2\xc1\x3d\xc4\x87\x9e\xe0\xea\x8c\x20\x84\x59\x4f\xad\xc9\xdb\xb4\x34\x46\x28\x8b\x09\x95\xcc\xe5\x21\xa2\xcf\x24\xc6\x92\x35\x55\x8c\xae\x06\x66\x7c\x68\x29\xba\xd2\xd0\x92\xf3\xd5\xcb\x0c\x49\xb5\x89\xae\x7a\x2f\xa9\x73\x9b\x06\xcc\x84\x61\x19\x9d\xcf\x3c\x17\x76\x3d\xc7\x23\x61\xb8\xc7\x8a\xd0\x9f\xd1\x66\xcc\x54\x55\x30\x63\x8c\x95\x3e\x37\x1c\x6d\xa9\x36\x73\xdc\xea\xf8\xe4\x75\xec\xeb\x0e\x7d\xec\x12\xa4\xd7\xfd\xb1\x57\xfd\xe9\xcc\x98\x4d\x89\x0d\x9c\x39\x7b\x04\x47\x16\xa4\x3b\x0c\xac\xf6\x78\x8a\x3a\xa0\xef\x88\x4e\xa9\x1a\xc0\x3e\xbf\x68\xe1\x1e\x91\xb7\xd5\x09\xd1\xef\x50\xa0\x1b\x39\x18\xb3\x55\x75\x5a\xee\x07\xae\xe9\xfc\x4d\x35\xeb\x23\xa9\xf7\x52\x6b\x36\x75\x5a\xc5\xe9\x05\xc1\xaa\x2a\xa3\xb3\xc1\xf5\xdc\x61\x86\xcc\xb7\x50\xaa\x62\xec\xd7\xde\x53\x4c\x89\xa7\xd1\x06\xfb\x46\xc7\x54\x57\x43\x08\xa1\x87\x4b\xe3\x3f\xf7\x56\xf9\x7e\x6e\x7c\xdf\xa6\x5c\x2c\x7f\x8c\x71\x19\x0d\x27\xde\xaa\xea\xfd\x41\xe8\x73\x63\xe1\x81\x89\x3f\x9e\x11\x6b\xca\xbf\x23\x76\x1f\x77\x36\x77\xb1\x79\x32\x59\x83\x9b\x1b\xd8\xb3\x14\x79\x81\xc9\xfd\xcf\x98\xb4\xf0\xad\xce\x05\x34\x9e\x7b\x67\xa1\x60\x4a\x8f\x50\x4c\xbf\xb8\x16\x1b\x0f\x3f\xc2\x9b\xef\xee\xb6\xbe\xc7\x05\x85\x36\x1c\x1f\x68\x6b\xc7\xd8\x56\x95\xfb\x86\x02\x67\xc2\x78\x46\x5b\x7f\xfa\xb7\xc6\x0f\xf0\x52\x77\xee\x87\x99\xd3\x15\x52\x11\xb9\x6f\xf7\xa6\xe6\x5a\x42\x45\x4d\x81\x5b\x7c\xda\x68\x5d\xe1\xec\x3a\xbf\x2b\xe0\x85\xeb\x45\x80\xdf\x4a\xd2\x35\x08\x0e\x68\x84\x50\x98\x5d\xbe\xec\x79\x2a\x70\x37\xbd\xc0\xa4\xc0\xfb\x81\x41\xfd\x60\x60\xc0\xaa\xaa\x38\x09\xc3\x6e\x26\x0f\x98\x0a\x43\x2c\x7d\x90\xb6\xe3\x48\xb3\x62\x5e\x55\x8a\x3a\x6c\x2a\xc3\x10\xab\xd6\x4b\x8c\xc9\xb9\xba\x46\xed\xc8\x21\x09\xa1\xaa\x6e\x4c\xd7\x2b\x28\x28\x74\x59\x98\xc6\xa1\xd2\x82\xc1\x5c\xa6\xf5\xa2\x9d\x8e\x09\x83\x51\xac\xcd\x1d\xd6\x1b\x62\x7e\x3e\x3e\x5c\xcf\xe2\xfe\xf6\x1a\x86\x2c\x1d\x86\xba\x6f\x7e\x6d\x97\x8e\x3e\xf3\xa2\x38\x65\x1c\xb0\x75\x18\x0e\x5f\x8b\xee\x8b\x60\x6e\xba\xc1\x03\x27\xc5\x2b\x32\x21\x8b\xe9\x32\xca\x85\xda\xd8\x6d\x3c\x6d\xc8\x34\x05\xd4\xe3\x04\xb3\x00\xca\x63\x99\x5b\x99\x4b\xe5\x32\xdc\x4b\xf0\x99\x17\xf6\x9e\x6f\xe6\xbd\x42\xd7\x1d\x6e\x43\xf1\xfa\xd7\x78\x70\x9b\xbf\xc2\x2f\xd1\x79\xc7\x53\xab\x4d\x55\xcd\x60\x96\x75\xd9\x24\x37\x0a\xbe\xc4\xc2\x70\x72\x1b\x24\x0b\xd8\x27\x8b\x66\xc6\x53\x5d\x58\x4c\x21\x18\xb8\xf3\xf1\xe4\xeb\x2d\x4e\x26\x64\x8e\x17\xc9\xd3\x9f\x71\x12\x8d\x97\xaf\xc8\x24\x12\x07\x91\x62\x05\x64\x79\x18\xf2\xc5\x6c\x49\x60\x2c\xd2\xbe\xab\xeb\xbe\x0d\xf0\xc5\xaf\x4b\x72\xd4\x4c\xc3\x40\xd0\x0c\x44\x2e\x7e\xff\xba\xf1\x74\x54\x08\x01\xb4\xab\x96\x4a\x2d\xf2\x42\x8c\x1c\xef\x9e\xab\x1f\x77\x2f\xdb\x7f\x47\x64\xe9\x84\x0d\x64\x55\x05\xf2\x9c\x11\xc8\x78\xce\xc3\x53\x76\x81\xe1\x5e\xc3\x30\xd0\xc3\x19\xeb\x86\x74\x2a\x35\x36\xd3\x73\xdd\x44\xd5\x75\x1e\x0f\xf3\xb8\xaa\xa6\x35\x15\xb9\x48\xad\x91\xe9\x7b\xf8\xb7\x36\xb9\x4d\x26\x8b\xa4\x48\x9e\xe2\xe5\xf5\xeb\xff\x9f\xf8\xdf\x43\x77\x3e\xb5\x7c\xb1\x40\xc9\xe1\xb7\x34\x18\x8f\xd1\xc9\xdd\x5b\x95\xc5\xed\xc7\xb0\x2b\x25\x6b\xb9\x29\x0d\x24\x78\x5c\xf6\x7f\x05\x90\xdb\xa1\xd8\xff\x5a\xd8\x8a\x7c\x2f\xcc\xfd\xf3\x5e\xfc\x10\xa4\x78\x90\xfb\x2e\x99\x4e\x0a\x9e\x6d\x12\x9b\x7d\x84\x21\xcf\xbf\x3c\x93\xba\xae\xa1\x9e\x34\xff\x31\xde\x7f\x78\x8b\x91\x33\xfa\x04\xc8\x01\xd1\xf3\x6b\xbe\x77\xbe\x06\x51\xcf\xa0\x76\x72\x07\xbf\x42\x2e\xda\x98\x27\x09\x82\xc2\xbc\x7a\xc1\x0d\xae\xe8\x51\xb9\x52\xdb\x28\xdb\xe8\x17\x07\xd3\x9a\xd4\x84\x5c\xfd\x2f\x00\x00\xff\xff\xc4\xe8\x95\x55\xff\x15\x00\x00") + +func web_uiAssetsCodemirrorModeXmlXml10ec8b8cc61ef0fbd25b27a599fdcd60JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsCodemirrorModeXmlXml10ec8b8cc61ef0fbd25b27a599fdcd60Js, + "web_ui/assets/codemirror/mode/xml/xml-10ec8b8cc61ef0fbd25b27a599fdcd60.js", + ) +} + +func web_uiAssetsCodemirrorModeXmlXml10ec8b8cc61ef0fbd25b27a599fdcd60Js() (*asset, error) { + bytes, err := web_uiAssetsCodemirrorModeXmlXml10ec8b8cc61ef0fbd25b27a599fdcd60JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/xml/xml-10ec8b8cc61ef0fbd25b27a599fdcd60.js", size: 5631, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsCodemirrorModeYamlYaml3f129a000349e3075be0f65719884b61Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\xbd\xeb\x76\xdb\x36\xd7\x20\xfc\xf3\x5b\xcb\xb7\xf0\xfd\xa1\xf0\xb4\x34\x11\x42\x32\x29\x1f\x62\xd3\x86\xf5\xa6\x69\xd2\xc7\x6d\xe2\xb4\x4d\xd2\x3e\x8d\xc4\x64\x68\x0a\xb2\xd9\x50\xa0\x4a\x42\x89\x5d\x53\xef\xbf\x99\x0b\x98\x2b\x98\x6b\x99\x4b\x99\x2b\x99\x85\x23\x41\x1d\x6c\xa7\x4f\xdf\xb5\xa6\x07\x8b\x38\x6f\x60\x6f\x6c\xec\xbd\xb1\x01\xec\x3c\xea\x38\xbf\x57\xdd\x9b\x64\x9a\x3b\x7b\xbd\xa0\x17\x38\x57\x8c\xcd\xaa\x68\x67\xe7\x32\x63\x57\xf3\x8b\x5e\x5a\x4c\x77\x68\x31\x26\x69\xb2\xa3\xf3\xfd\x47\x9e\xa5\x84\x56\xc4\x79\x79\xf6\xc6\x79\xb4\xb3\xe5\x4d\xe6\x34\x65\x59\x41\x3d\x82\x18\xbc\x05\xc5\xc5\xef\x24\x65\x00\x63\x76\x33\x23\xc5\xc4\x21\xd7\xb3\xa2\x64\x95\xeb\x82\x39\x1d\x93\x49\x46\xc9\x18\x74\x74\xe2\xb4\x18\xcf\x73\x32\x60\x9e\xca\x05\x23\xa0\xab\x6b\x6a\x90\xa5\x5c\x57\xfe\xf6\x92\xe9\x78\x20\x3f\xbd\x21\x50\xe5\x40\x8c\x18\x8c\x98\xe7\x11\xbc\xae\x99\xcb\xbc\xb8\x48\xf2\x37\x57\x59\x35\x68\x3e\x23\x52\xd7\x15\xc9\x27\xb0\xf7\x7b\xc5\x7b\x86\x6f\x17\x70\x01\x3d\x76\x95\x55\xc8\xea\x14\xbc\x05\xf3\x8a\x38\x15\x2b\xb3\x94\x81\x2d\x9d\xe0\x30\x9e\x54\x12\x36\x2f\xa9\x43\xe7\x79\x8e\x31\x59\x7c\x4a\x4a\x87\xe2\xdb\xac\x3a\x2f\xd8\x55\x46\x2f\x23\x86\xb2\xea\x95\x18\x90\xc8\xae\x51\x16\x5b\x1d\x2a\xd7\xe5\x35\x75\x78\x55\x88\x15\x4f\xca\x32\xb9\x59\x53\xce\x11\x09\xbd\xac\x12\xbf\x1e\x81\x03\x12\x71\x68\x06\xc3\x38\x1a\x92\x78\x81\x4a\x32\x23\x89\xdd\x22\x47\x8c\x80\x0d\x65\x18\x80\xad\x49\x51\x7a\x14\x07\xc7\xf4\x84\x1d\x53\x1f\x87\x30\xf3\x31\xd9\x52\x95\x67\x0b\x94\x55\xe7\xe4\x32\x61\xd9\x27\xf2\x8e\x94\xc5\x3a\x08\x02\x8c\x31\x71\xdd\xf3\xf9\xf4\x82\x94\xbd\xf3\x67\xdf\x3d\x79\x73\xf6\xcb\xb3\x0f\x67\xe7\xcf\xcf\xce\xcf\xde\xfc\x86\x31\x0e\x77\xc8\x02\x91\x6b\x46\xe8\x78\x3d\x20\xa8\x44\xc5\x56\x36\xf1\x18\x54\xe0\xa0\x0c\x7b\x05\x96\xa3\xd5\xfb\x48\x6e\x2a\x8f\x41\xd8\xcb\x09\xbd\x64\x57\xc7\xf4\x24\x93\xa0\x92\x61\x89\x8b\x21\x8d\x63\xcc\x86\x65\xac\x81\x26\x8b\x45\x83\x99\xcc\x6a\x07\x03\x80\x32\x4c\x7a\x25\x49\xaa\x82\xd6\x35\xf0\xe6\xf4\x23\x2d\x3e\x53\x47\xc6\x40\x60\xaa\xe8\x4d\x93\xf2\xe3\xc0\x93\xbf\x3d\x9a\x4c\x89\xeb\x7a\xd4\xc7\xdb\x19\x75\xc0\xb6\x6f\xc5\xfb\xdb\xc0\xd9\x86\x88\xfa\x18\x78\xc0\xd7\x25\xf2\x8c\x12\x3f\x84\x3e\x88\x9a\xb8\xb4\xc8\xe7\x53\x2a\x62\x21\x40\x1d\xe6\xba\x2a\xa1\xa2\xd9\x6c\x46\x98\x6c\x01\x8c\xe8\x88\x02\xbf\x9d\x04\x51\xe6\x03\x07\xf8\x14\x46\xd9\xc2\xf4\xad\x94\x7d\x7b\x56\x96\x45\xd9\x4b\x93\x3c\x17\xf4\x0a\x11\xff\x2b\x60\xc3\xe0\xb7\x27\x2f\x5f\x3c\xbb\x4e\xc9\x4c\xcc\x22\x99\x22\x3b\x8b\x89\x0c\xf1\x66\x30\x53\xdf\xa4\xaa\x92\x4b\x82\x33\x49\xf8\x9d\x10\x22\x5d\xf9\x8c\xcd\x4b\xf2\x9a\x25\xe9\xc7\x37\x65\x92\x92\xc1\x86\x78\x59\x50\x54\x96\x16\xb4\x62\xe5\x3c\x65\x45\x09\x23\x11\x53\xf1\x6c\xd8\xa3\xe4\xb3\x23\x8a\x43\x19\x53\xd7\x00\x2c\xca\xde\xac\x2c\x58\xc1\x89\x5f\xa3\x3d\x2d\x49\xc2\x88\x27\x5b\x32\xa9\x10\x59\x01\xbb\x11\x5c\xb6\x52\x58\xf1\x9a\x95\x19\xbd\xc4\x6b\x28\xd6\x0c\x90\x0f\x22\x07\xf8\xaa\xbb\x04\x2e\xb6\x38\x9d\x14\xb8\x6c\xe8\x27\xe1\x63\x8c\x04\x89\x4a\x2a\x2a\x38\x15\x25\xfc\x4f\x8e\x5f\x26\xec\xaa\x37\xc9\x8b\xa2\xf4\xca\x9d\x3e\xec\x86\x66\xde\x74\xd9\x69\xee\xba\x1e\xc3\x59\x37\xf7\xbd\x02\x03\xa7\xd7\xeb\x39\x40\x93\x30\x44\xb4\x9b\x89\x1c\x14\x67\x7e\xde\xf5\x12\x99\xc3\xca\x70\x5b\xb1\x32\x2a\x7c\xd2\xab\x38\x8f\xf5\x18\xa2\xb0\x57\x92\x59\xce\x07\x79\x67\xc4\x76\x2e\x11\xf8\x3f\xff\xe3\x7f\x02\xe8\x27\x68\x56\x54\x51\xd6\x65\x7e\xa1\x0a\x2f\x1a\x12\xc9\x25\x89\x68\xd6\xd4\x93\xdc\xc0\x03\x0e\x40\xac\x4b\x74\x63\xbe\xe4\x56\x29\x6e\x4f\x4e\x3e\x21\x97\x90\xc1\xea\x9a\x73\x25\x88\x3a\xa4\x77\x31\x9f\x4c\x48\x09\x2d\xb6\xb7\xc5\x7a\xd3\xe4\xfa\x85\xa8\xb4\xae\x3d\x2b\x84\x1f\x1f\x41\x04\xa8\x60\x11\x0d\x2b\x66\xbd\x8c\x8e\x09\xe5\x94\xaf\x3f\x71\xb8\x36\x1f\x9f\x4f\xd5\x37\x64\x52\x94\x44\x64\xb6\xc2\x78\x77\x73\x89\x27\x13\x46\xca\xa6\x80\x08\xe2\x3e\x14\x4c\x8f\xf7\x38\x43\x25\xde\x19\x95\x83\x11\xad\x47\x65\x3d\x0a\x76\x2e\x51\x81\x87\x41\x8c\x52\x3c\x8c\x51\x85\xbb\xe1\x71\x86\xcb\x1e\xb9\x26\xa9\x67\x3a\x7c\x0c\xd3\xde\x6c\x5e\x5d\x79\x99\x80\xf9\x1a\xa2\xa2\x15\xf6\xb3\x61\x10\x1b\x3c\x92\xde\xac\xa8\x32\x3e\xa8\x27\x58\x65\x70\xdd\xea\x24\x70\x5d\xaf\xc2\x1a\x63\xdd\x3e\xdc\x5a\x89\x0b\xa1\x20\xc7\x39\x9a\xa1\x09\xa7\xb7\xb1\xa4\xb7\x69\x46\x3d\x22\x19\x8c\xdd\x2d\x94\xea\x26\x0d\xe9\x7b\x9a\x9a\xd0\x15\xb6\x70\xd1\x35\x83\xed\x8f\xfd\x5d\x39\x18\x73\x1c\x1e\xcf\x4f\xf0\xd2\x40\x77\xbc\xaa\x3b\x3f\x09\xe0\xf1\xdc\xf7\xe1\x0c\x27\x66\x0c\x50\x31\xac\xba\xf3\x18\xa5\xf2\xa7\xe9\x63\xd7\x2b\x86\x55\xdc\x95\xc9\x10\x5d\x41\x34\xc1\x6d\xaa\x53\x4d\x43\x3f\xf7\x54\x37\xba\x73\x3f\xb4\x81\x46\x63\xe8\x03\xa7\x76\x80\x3f\xeb\x55\xac\xf4\x01\xe7\x87\x13\x01\xe6\x32\x0c\x02\x02\xbb\x7d\xd1\xa2\x7f\x6f\x93\xf7\x37\xd8\xae\xa5\xdb\xd4\xc2\xc7\xcc\x9f\xf1\x06\xa1\x0f\xde\xf3\x9c\xed\xb1\x53\x24\xd7\xf1\x2a\x7f\x7e\x8a\x0d\x52\xd6\x0e\xa1\x2f\x87\xd0\xdf\x30\x84\xbe\x1e\xc2\x07\x74\xe8\x01\x63\xa8\x99\xd3\xc4\xe2\x23\xf4\xab\x1d\x04\x00\x5c\xa0\x0a\x0f\xc1\xc7\x8c\x8e\x01\x02\xd3\x79\xce\x32\x80\x40\x49\xaa\x22\xff\x44\x00\x02\x86\xcb\x02\x04\x32\x5a\xb1\x84\xa6\xe4\xd5\x04\x20\x30\x2b\xc9\x38\x4b\x13\x46\x44\xf6\x59\x49\x2a\x42\x99\xfd\x7d\x9e\x4c\x79\xda\x98\x4c\x92\x79\xce\x5e\xb3\x9b\x9c\x07\x2b\xfe\xfb\x24\xcf\x92\x8a\x70\x69\x6d\x8e\x87\xa0\x4a\x93\x3c\x29\x79\x1a\xf9\x63\x4e\x68\xca\xb3\x4d\x93\xd9\x2c\xa3\x97\x20\x16\xf3\x60\xb6\x8e\x3b\xb1\xba\xbe\x5d\xa0\xb6\x9c\xd0\x9b\x14\xe5\xb3\x24\xbd\xf2\x1a\xc1\x4d\x66\xef\x86\x18\xe3\x4a\xce\xc1\x57\x5c\xd8\x80\xec\xaa\x2c\x3e\x3b\x7c\x41\x2a\xbc\xed\xb7\x4a\x18\x28\xc4\x62\xc9\x97\x79\xc6\x17\xf7\xac\x72\xa6\x84\x39\x19\x95\xb2\xa7\xc0\x91\x53\x4c\x84\x18\xc0\xd3\xf9\x12\xeb\x88\x25\x67\x1b\x2e\xa0\x5a\x7d\x59\x72\xa9\x17\x58\x3e\xaa\x98\x89\x1f\xc9\x3c\xf5\x2a\x2c\x46\x17\x33\xfd\x55\xd7\x06\x5c\xcd\xb0\x3b\xc1\x62\x69\x2d\xc5\xac\xf9\xb6\x0a\x34\x4b\x1b\x51\x25\x1a\x34\x61\x66\x05\x6c\x08\x0c\xf2\x30\x6b\xbe\xdb\x20\x2a\x2c\x0a\x20\xd5\xf7\xda\x0c\x1c\xcd\x76\x26\x1e\xb6\x33\xda\xf8\xc7\xac\x15\xb4\xb3\x09\xca\xe3\xac\x8a\xff\xd6\x75\x27\x44\x4a\x6e\x68\xc8\xa5\xb5\x9c\x73\xb2\x60\xf8\x76\xb1\x65\xad\x41\x1d\x21\x8c\xda\x14\x41\xd6\x51\x04\x85\xb7\x64\x48\xe3\x35\x29\x04\xde\xb2\xa1\x9a\x47\x04\xc6\x98\x2e\xa0\xc4\xeb\xc2\x63\x2d\x50\xf4\x52\x28\xc8\x6a\xde\x90\x95\x46\xfa\x06\xf2\xe2\x49\x82\xb8\x74\x3e\x45\x64\xd5\x8c\xa4\xd9\x24\x23\x63\x67\x52\x94\xeb\xa9\xab\x11\x4b\x26\x52\x2c\x91\x43\x90\xe1\x61\x23\xfc\x0e\xd9\x86\x4e\xd1\x75\xf3\x82\x57\xc1\x04\xb5\x62\x4c\xf8\xaf\xeb\x4a\x52\x15\x61\xfe\xc1\x23\x24\x5e\x78\x8c\xf8\x72\xdd\x4c\x2e\x78\x54\x0c\x0c\x95\x01\xa2\x02\x93\x2c\x67\xa4\xf4\x96\x54\x41\x09\x9e\x18\xaa\xcc\x9a\x81\x7c\x6c\x4d\xa7\xc6\xcb\x22\x9a\x54\x19\x78\xcd\x63\x4b\xb2\x93\xb1\x6b\x08\x61\x18\x23\xca\x87\x22\x9b\x78\xc4\xd1\x34\x5f\x4c\x9c\x19\x34\x20\x6e\x91\xbc\x22\x4e\x36\xf1\x96\xd5\x26\x48\x31\xe5\x53\x2b\x4d\x98\xce\xc6\x59\x46\x87\xd4\x75\x67\x29\x6f\x2f\x9b\xce\xf2\x2c\xcd\x18\x74\xdd\x95\x34\x72\xad\xd2\x5a\xc8\x07\xaf\xd3\x2b\x32\x4d\x14\xe8\x4e\x52\x5e\xce\xa7\x84\x32\xa7\xba\x2a\xe6\xf9\xd8\xb9\x20\x4e\xe2\xbc\xb9\x99\x11\xe4\x0c\xc5\xaf\x13\x23\xa7\x28\x9d\xc4\xa9\x44\x39\x9b\xf3\x78\xb7\x8e\x6e\x3f\x72\x86\xbd\x5e\x2f\x46\x8e\x6e\x54\x45\x38\x0b\x08\xe0\x56\x03\xa7\x10\x44\x99\xe9\x5d\x03\x3f\x97\x4e\x74\x59\x21\x8b\x36\x43\x60\x75\x64\xc1\xd6\x13\x14\x1f\x9e\xe5\x81\x5e\xea\xb5\x21\xe9\x3c\xab\x18\x67\x9a\x86\x9c\x2b\xc7\x93\x1d\xcc\xe8\x65\x4e\x64\xa7\xa5\x0a\x0c\x9d\xb4\xa0\x2c\xc9\x68\xe5\x24\x0e\x2d\x68\xd7\x4a\xeb\x01\x28\xb0\xdb\xcb\x8b\x64\xfc\x83\xa0\x4e\xbd\x72\xf0\x79\x6f\xa2\xdb\x60\xbc\xb9\x22\x25\xe1\x53\x4c\xd6\x27\x0b\x08\x28\x38\x57\x67\x57\xc4\x8c\xa8\x81\x53\x8f\x7c\xcf\x39\xd3\x49\x92\x4d\x67\xf4\x92\xa7\x57\xf3\xf4\x4a\xf5\x23\xab\x1c\x5a\x30\xa7\x9a\xcf\x66\x45\xc9\xc8\xd8\xc0\x28\xe6\xca\x46\x48\x44\xea\x43\x81\x78\x29\x33\x27\x97\x95\x93\x26\xd4\x29\x68\x7e\xc3\x89\x86\x67\x24\x63\x27\xa9\x0c\x05\xf4\x80\x9e\x85\xff\xef\x60\x6c\x01\xa5\x20\x9b\x2d\xe9\x12\xd6\x9c\x86\x46\x71\x32\xc4\x89\x25\x23\xd5\xc1\xba\x1e\xc6\x50\x53\x27\xd7\x87\x0d\x81\xaa\x8c\x3a\xd8\xca\x48\x79\xc6\xb4\x98\xce\xb2\x9c\x8c\x35\x26\xf1\xc4\xcb\x10\xd0\x15\x03\x34\x8c\xed\x5c\xcf\xae\xed\x5c\xba\xd6\xe5\x5c\xbc\x87\x2f\x13\x4b\x24\x91\x3c\x48\x30\x65\x7c\x2b\x29\x2c\xba\x5d\x20\x2d\xcd\xf0\x6f\x25\xce\xf0\xcf\x49\x92\xe7\x17\x49\xfa\x51\x44\x73\xdc\x46\xba\x0c\x57\x3b\x74\x99\x61\x6c\xca\x0c\xe3\xa6\xcc\x30\x5e\x32\x70\xc0\x5b\x45\x6c\x03\x8f\xca\x8f\xa1\xe4\xdd\xb1\x66\x7b\x48\xc5\xf7\x74\x25\x3a\x01\x46\x54\xe7\x1d\x0a\xfe\x1f\x63\x6a\x32\xe9\x18\xb2\xe0\xb2\x37\xc1\x01\x62\x58\xb3\xae\x4a\x1b\x63\xc8\x09\x3b\x26\x3e\x0e\xa1\x49\x19\x92\x66\x05\xca\x0c\x66\xe9\xc2\x5b\x45\xc5\x9a\x71\x87\x28\x93\x6a\xf8\x15\x1e\xa3\x29\xe6\x74\x79\xe5\xdd\x1a\x0e\x37\xe4\x11\x33\x0f\xb0\xe4\x32\xba\x49\xa6\x79\xaf\x28\x2f\x51\x3f\x08\xfa\x51\xc5\x4a\x80\x6e\x79\x57\x22\x23\x4d\x1a\x59\x69\x9d\xdd\x4a\x4b\x0b\x03\x12\x01\xb0\x58\x40\xb4\xb9\x6a\xf2\x47\x53\xb5\x91\x4f\x1f\x5a\x39\xc7\xd7\x1d\x95\x4f\x93\x99\xa9\x5c\x4b\xbc\x0f\xae\xfb\x76\xb1\x58\xc0\x78\x21\x27\xd8\x25\xde\xd8\x08\x2f\xb2\x32\x3a\x4a\xf0\x8c\x96\x58\x84\x34\x60\x62\x02\xb5\x10\xba\x25\x97\x57\x6d\x2e\xd0\x18\xe5\x6b\x39\x73\x5d\xf0\x9f\x80\xe7\xae\xeb\x3d\x19\xf6\x80\x68\x4c\xc6\x81\x73\xfb\xfb\xed\x8b\x17\xe2\x1b\x2e\xd6\x75\xb0\xd5\xbf\x05\x32\x22\xe9\xa6\x21\xc0\xc2\x34\x6a\x64\xce\xe8\x36\x4d\x68\x41\xb3\x34\xc9\x57\xeb\x04\xff\x09\x16\x28\x2f\x3e\x93\x32\x4d\x2a\xb2\x26\x5d\xc0\xbc\x40\xf3\xd9\x6c\x63\x16\x01\xfe\x02\xa5\xc9\x94\xe4\x9b\xb2\xc8\x5a\xc8\x74\xc6\x6e\xd6\x24\x83\xc5\x02\xd9\xb2\x6f\x04\x0c\x48\x40\xe1\xf0\x66\x33\x0e\x2f\x8a\xe2\x2f\xe3\x30\xdc\x80\x43\x83\x33\x56\xce\x89\xc6\xd3\x1b\xfb\xfb\xe7\xb7\xcf\x24\xce\xea\x7a\x5f\x67\x9e\x24\x79\x65\x72\x3c\x6f\x05\x9e\xbc\x78\xfd\xec\x0e\x1c\x37\xf6\xee\x7b\x1b\xbc\x9b\x02\xc0\x50\xae\x2f\xce\x37\x45\x91\x93\x84\xc6\xbc\x8c\x5a\x5f\x56\x8d\x80\xd2\x3a\xca\x61\xb2\xc8\x65\x0d\x39\x58\x7a\xd4\x40\x42\x18\xa9\xce\xae\x25\x8d\x56\x76\x01\x78\xa4\x46\x60\x2d\x99\xb4\xb3\xcb\xda\xe5\xe8\xdd\x4d\x17\x86\xd7\x5f\x58\x55\xec\x1d\x9e\x70\x45\x87\x9c\xe0\xfd\xfd\x46\x84\x7e\xb2\x3e\xc7\x63\x61\xdf\xfb\xb4\x99\xb6\x32\xae\xb6\xff\x5b\xa4\x85\xa8\xb0\xad\x2b\x83\x53\x89\x03\x54\xe0\x4e\xc8\x25\xa1\x4e\xd6\x64\xcd\x26\x1e\xe8\x72\x59\xcd\x63\x98\x0c\xcb\x18\xba\x2e\xf0\x79\x98\xd5\xb5\x88\xf2\xfd\x32\x86\x08\x04\x1c\x9d\x52\x6b\x2f\x7d\xa1\x34\x34\xdc\x88\xd7\x71\xc1\xd3\x9b\x02\xf0\x96\xaf\x50\xa5\xef\x1f\x97\x27\xd9\x71\xe9\xfb\x90\x67\xfa\x60\x37\x24\xea\x02\x81\x68\xcb\x75\x41\x28\x3e\x1a\xc0\x0a\xdc\x09\x16\x6a\xe0\x0a\xd7\x95\x65\xd9\x82\x97\xb9\x56\xb0\x3c\xac\x89\x8e\xc7\xc7\xdd\xa3\x98\xf4\xd2\xab\xa4\x7c\x5a\x8c\xc9\x13\xe6\x95\x10\xba\x2e\xe5\x98\xa8\xeb\x83\xfd\x13\x4c\x45\xe8\x71\x50\xd7\x47\x8f\x75\x28\x0c\xfa\xf0\x41\x00\x15\x5f\x06\xd0\x85\xb7\x0c\xca\xbd\xad\x2c\x64\x55\xb8\x35\x44\xbc\xb9\xfb\xda\x7a\xf2\xb0\xb6\x3a\x5e\xa7\xa8\x6b\xdd\xc2\x26\x4e\xa1\xe8\x0a\x13\x94\x61\x41\x3a\xdd\xb0\x83\x31\x35\xea\x23\xf8\x00\xa0\x52\x5b\x8c\x45\xeb\xc3\xce\x25\x02\x00\x42\x64\xc8\x8c\x0e\x83\x36\x99\x81\x2e\x50\x8c\x2c\xc3\xdd\x10\x22\x86\x45\x15\xd2\xce\x1e\x42\xc8\xf3\x2b\x0a\xa4\xda\xba\x2d\xa9\xce\xa2\x4a\x49\x81\x74\x18\xc6\x3a\x4b\xf6\x68\x96\x94\x15\x39\xa3\xcc\xd3\x95\xf5\x21\xea\x0b\x65\x40\xd2\xd0\xfd\xb9\xc3\x03\x99\xbd\x78\x58\xf6\x43\xb8\x58\x93\x8e\xc2\x00\x3e\x90\x79\xca\x3d\xbb\x87\xf1\x4e\xd7\x25\x5f\x87\x18\x07\xae\xdb\xa1\xbd\xf6\xae\xe0\x32\x67\xbd\xc8\x68\x52\xae\xdd\xad\x24\xa7\x38\x18\x80\xe0\x02\xf8\x4d\x03\x5e\x1f\x46\xa0\xbb\x12\x67\x10\xb2\x40\x45\xca\xec\x45\x7d\xa5\xba\xa2\x55\xf4\x50\x54\xb7\x1c\x67\x55\x37\x26\x69\x36\xdd\x50\x61\x53\x44\x8c\xe2\x15\xb9\x4e\xee\xca\x2e\xdb\xbf\x6e\xb5\x15\x1e\xc0\x1e\x2b\xde\xf2\xe5\xe2\x69\x52\x11\x4f\x80\x73\x4f\x96\x06\xba\xe5\x95\x40\xb5\x0e\x90\x6d\x7a\x32\x43\x3c\xec\x23\x70\x91\x51\x10\xab\x31\x1a\x1e\x22\x50\xa4\x0c\xc4\xa6\x93\xc3\x30\x40\xbc\x12\x10\xb7\x3a\x33\x0c\x0f\x10\xb8\x22\xd7\x40\x08\xa7\x1f\xc5\xca\xf0\x33\xb9\x7c\x76\x3d\xf3\xc0\x7b\x6f\x10\x0d\xbb\x7e\x3c\xe0\xbf\x41\xf7\x28\xe6\x7f\x3e\xc4\x8f\xa0\x37\x88\x46\xa3\x9e\x0e\x89\x64\xf2\x2c\x16\x59\x45\x3e\x1f\x0e\x6a\x93\xc1\x5f\x9b\x2c\x42\xa3\x51\xcf\x1b\x44\x19\x9d\xd4\x67\xfc\xff\xf3\xe7\xb0\x96\x51\x34\xa1\xf5\x79\x72\x5e\x9f\x3f\x39\x87\xf0\x2b\x20\x45\xa2\xcf\x78\xe7\xbd\x55\x09\xd9\x11\xb1\x4f\x37\x2f\x66\x93\xbc\x48\x1e\xb6\x9c\xad\xd8\x0d\x3b\x5e\xe7\x63\x8f\x91\x8a\x79\x5c\xe0\x91\x0c\x8a\x0c\x89\xd9\x92\x89\xef\x63\x56\x46\xdd\xc1\x92\xcd\x70\xf6\xb8\xc2\x9d\x7a\xac\x78\xc1\x17\x78\x89\x7b\xce\x70\x06\xdd\x30\x0a\x11\xf0\xbb\xa0\x31\x8e\x71\x3e\x74\xca\xe7\x9b\xb0\xde\x18\xf6\x84\x78\x96\x89\xe0\x44\x03\xbe\x32\xd2\x81\xda\x79\xff\xf1\xd5\xeb\xb3\xd6\xce\x7b\xb4\x69\x4b\x3e\x02\x3d\x9a\x50\x59\xc5\x79\x72\x1e\x51\xc9\x3d\x9e\xf3\x71\xf3\xd8\x7f\x19\xff\xf0\xc8\xd7\x61\x07\x07\x75\xbd\x86\x7f\xb4\x18\xc8\xaa\x8f\x40\xc6\xd9\x62\x56\x9d\x27\xe7\x3c\x6f\xf5\x39\x63\xe9\x95\xc7\xe0\xad\x10\x91\x1a\x61\x29\x52\xf0\x89\xee\x6d\x89\x28\x23\xb6\x35\x89\xe7\x4f\xce\x55\xa2\x11\xd2\xac\xc4\xe4\x1c\x2c\xb4\x95\x70\xd3\xc8\x0a\xf9\xe7\x7e\x28\x38\x9e\x36\x42\x71\x76\xfe\x7c\x33\x14\x67\x74\xb2\x02\xc5\x3a\xcf\x8a\x07\x40\xd1\xbd\x13\x8c\xee\x9d\x70\x74\xdb\x80\xac\xc3\x9b\xce\x19\xf4\x02\xb3\xc3\xc4\x05\x41\x9b\x8f\xa2\xcf\x72\x4e\x65\x70\x90\x99\xc9\x00\x08\x40\xa0\x47\x00\x8c\xb2\xbb\xa4\x5f\x74\x8d\xa7\xda\x10\x7c\x6b\x2c\x9f\xc3\x4b\x74\x83\x3e\xa1\xa7\xf1\x02\xa2\x33\x7c\x8d\x5e\x2f\x31\x30\xc3\xb6\xac\x3f\xb0\xeb\x6d\x0a\x7c\x05\x20\x7a\xf5\xa5\x55\x0c\x96\x42\x9c\xdf\xbd\x61\x71\x3d\x74\x46\x23\x16\xfb\xb0\x95\x18\xd9\xcd\xb5\x02\x92\xa9\xca\x98\x47\x50\x72\x55\x51\xc3\x23\xef\x5d\xed\x71\xc6\x07\x97\x9b\x69\x95\x87\x03\x08\x07\x9a\x57\xfe\xbe\x99\x2b\xb2\x6c\x4a\x2a\x96\x4c\x67\x7f\x8d\x33\x7a\xea\xf3\xb5\xda\x0d\x87\x72\xfb\xa3\x83\xf1\x2b\x1d\x73\x1f\x6f\x94\x7e\x3e\x28\x41\x39\x4a\x51\x85\x03\x34\xc7\xc2\x6b\xa0\x51\x2a\x3c\xd6\xd4\x0f\x05\xe3\x6b\x2a\x47\x2a\x0f\xb3\x2c\x96\xc2\x37\xc4\x03\xdf\x26\x8c\x28\xfb\x2c\x71\x08\x8f\x93\x36\x58\x8a\x7d\x36\x0c\x63\x94\xf1\xdf\x7e\xdc\x0d\x51\xc9\xbf\x76\x63\xd4\x61\xc3\x3d\x23\x5c\xf1\x9a\x78\x15\x1e\xff\xd3\x7b\xfb\xe6\xa9\x27\xfd\x3d\x44\x1d\x05\x2f\xb1\x17\xa3\x84\xff\xee\xc7\x28\xe7\xbf\x07\x31\x62\xc3\xc7\xb1\x14\xc1\x2b\xcc\xbf\x15\x83\x0e\xd0\x2e\x3c\xd6\xc6\xb1\x93\xdd\x63\x58\xf9\x18\x04\x60\xab\xc2\x7e\xa5\x85\x35\x36\x3c\x8a\x5d\xd7\x9b\xe3\x03\xb2\xf7\xc8\x3b\x08\x1e\x71\x28\x83\xd8\x77\x7c\x8f\x0d\xc3\x30\xae\xeb\x40\x0a\xb0\xbc\xb7\x3a\x6f\x77\x0e\x21\x4a\xf1\x06\x58\xd5\xb0\x56\x10\xa2\xb9\xeb\xa6\xbd\x8a\xb0\x37\xd9\x94\x78\x69\xef\x52\x7d\xc1\xee\x1c\xa2\x74\x81\x9a\xbd\xc0\x88\x57\xb1\x96\xeb\xb6\xc4\xa1\xb3\xd7\xaf\xf4\xae\xf2\x42\x19\x29\xde\x6c\xa6\xb2\x29\x29\x2f\xc9\x17\x50\x18\x38\x39\x51\x9a\xbf\x31\xe9\x2c\x20\x7a\x86\xc1\x93\x6f\x9e\x7e\xfb\xec\xf9\x77\xff\x3c\xfb\xfe\x87\x17\x2f\xcf\x5f\xfd\xf8\xd3\xcf\xaf\xdf\xbc\xfd\xe5\xd7\x7f\xfd\xf6\x2e\xb9\x48\xc7\x64\x72\x79\x95\xfd\xfe\x31\x9f\xd2\x62\xf6\x47\x59\xb1\xf9\xa7\xcf\xd7\x37\x7f\x06\x61\x7f\x77\x6f\xff\xe0\xf1\xe1\x91\xbf\x83\x47\x74\x54\x02\x01\xee\xcb\x3b\x6c\x2a\x42\x8c\xfa\x3b\x54\xdf\x00\x95\x8d\xfa\x5b\xe0\x67\x96\x63\x5d\x79\x4c\xa5\xc6\xd4\xf1\x3c\x86\x0b\xb3\xc2\x4b\x55\xe9\x09\xf3\x28\x84\xf0\xf4\x60\x4f\xea\x50\xec\x24\xb0\xf4\x65\x1f\x1f\x18\x19\xff\xeb\x43\x8c\x83\x7b\xe7\x98\x2d\x6f\x0c\x47\xe5\x88\xe2\x58\x4a\x1d\xa8\xc4\x99\x05\x20\x4a\x70\x80\x72\x3c\x8c\x05\xa4\x0c\x07\xc7\xec\xa4\x3c\x66\xbe\x0f\xd9\xd7\x7b\x42\xce\xe7\x2a\x52\x2e\x2d\xc5\xc9\xe9\x69\x78\xe0\xf6\xf7\xf7\x21\x6a\x62\x0e\x5b\x11\xfd\xfd\x7d\x37\x81\x10\x25\x38\x39\x39\x39\xa8\x9b\x6e\x66\xba\x9b\x0c\x1a\x6b\x70\xc0\x27\x3b\xc5\xe5\xd7\x7b\x8f\x0e\xe0\xe0\xcb\x5b\x89\xc2\x43\x21\xfa\xd8\x25\x83\xe5\x92\x7d\x11\x01\xa3\xb0\xcf\xf3\xba\x6e\x93\xb2\x27\xb3\x72\xb2\x78\x9b\x51\x76\x28\x77\xef\xf2\x87\x8a\x3d\x4d\x99\x2f\x37\x3b\xad\xc7\x19\x00\xca\x64\x62\x48\x28\x51\x24\x24\x11\x53\x28\xc4\xec\x1a\xc4\x64\x3e\x4e\x86\xe5\xe9\x69\x78\xe8\x1e\xec\xc6\xc8\x04\xfb\xad\xe0\x41\x13\x3a\xd8\x75\xcb\x98\x13\x81\x57\x9e\x9c\x1c\x42\x9f\x0c\x59\xbc\x84\x8e\xe2\xeb\x5d\x38\xf8\xab\x35\x47\x7d\x89\x11\x93\x3f\x68\xe5\xdf\xb3\x42\x27\x27\x56\x5d\x07\x7b\x31\x8c\x42\x89\x21\x53\xb8\xdf\xca\xbd\xd7\xca\xdd\x14\x43\x19\x67\x16\x2f\x56\x11\x70\x95\x54\xaf\x3e\xd3\x1f\xcb\x62\x46\x4a\x76\x83\xce\x37\xa3\x48\xcc\xe0\xe7\x9b\x19\x44\x61\x9b\xe7\x1b\xdb\xff\x97\x99\xce\x9b\xa5\x0f\x0f\xf9\x0a\x42\x34\x66\x11\xc5\xb9\xde\x48\x61\x27\xf4\x98\xf9\x38\x14\x15\x65\x38\x1f\xb2\x58\x98\xd0\x90\x21\x3b\xd9\x89\x18\x74\x30\x3e\x97\xa4\x95\xc1\xb6\x79\xa6\x74\x32\xea\x64\x9c\xd5\xbc\x50\x19\xf8\x32\xc6\x2b\x2c\x96\xec\x30\x9c\x1b\x15\x2d\xbb\x9c\x30\xae\x24\x66\xd6\x96\x56\xd5\x89\x9c\x38\xa5\x36\x37\x74\x36\x72\xa1\x4d\xbb\x1f\x1f\xee\xc1\xc0\xb7\x9b\x31\x30\x4b\xb2\xb2\xfa\x3b\x51\x20\x47\xbf\x10\x2d\xca\x89\x9f\x18\x6f\x3d\x89\x93\x64\x03\x4e\x12\x8e\x93\x75\xe8\xf8\xb0\x8a\x8e\x6c\xe2\xf1\x01\xf5\xca\x96\x17\x73\x66\xbc\x98\x2d\x7c\x0c\x59\x8c\x87\xe5\x30\x88\x51\x26\x7e\xe2\xf8\xde\x71\x5e\xed\xe8\x30\xfe\x5b\x3a\xaa\x3a\xb9\x0c\x35\x5a\x03\xa4\x66\x1e\x05\x47\xf0\xdb\xfb\x26\xa1\x80\xee\x8f\xcd\x68\xae\x08\x5b\xdd\x06\xfb\x52\x1c\xeb\x99\xc5\xa7\x01\xe5\xd3\xe0\xad\x44\x0c\x45\x0c\x1a\x7f\x7a\x3a\x64\x71\x33\xfa\x5f\x4e\xd1\x62\xcf\x0d\xfd\x86\xcf\xd6\xa8\x25\xbf\xa3\x37\x31\x6a\x36\x2b\x5f\xa2\xe7\xe8\x5b\xf4\x07\xd7\x52\x7e\xbc\x97\x4b\xfd\x8c\x77\x86\xa3\xeb\x20\xe8\x8e\xae\x83\xc3\xd1\x75\xf0\xcd\xe8\x3a\x78\x3a\xba\x0e\x9e\x75\x47\xd7\xe1\xf3\xd1\xf5\xe3\xe7\xdd\xd1\xf5\xe1\xde\xe8\xfa\xf0\xa0\x3b\xba\x3e\x7a\x3e\x9a\x3f\x7f\xfe\xfc\x99\xf8\xfb\x3c\xae\x87\xa3\xf9\xb7\x87\xbc\xf0\xfc\xdb\x6f\x9e\x3f\x8f\xbd\x41\x87\xc7\x3c\x95\x31\x3c\x07\xac\xb9\x66\xf1\xbe\x9d\xad\x7e\x0f\x97\xb2\xed\xa0\xaf\x04\x1c\x87\xfb\xa3\x79\x3f\xe8\x1f\x8a\xbf\x47\xf1\x0e\xfa\x06\xef\x0c\xd1\x68\x38\x8a\x47\xb7\xa3\x45\xbc\x83\x7e\xc0\x3b\xef\xbd\x41\xd4\xa9\x3b\x9d\xba\x33\x4c\xba\x7f\x8e\xba\xb1\xdf\x81\x5f\xed\x64\xe8\x57\x9d\x34\x7c\xdf\x94\xe0\x8a\xcb\xd7\x5c\x65\x49\xba\x93\xf8\xb6\xbf\xa8\xe5\xf7\x9f\xa3\xee\x3f\x8e\x47\x3b\xa3\x41\xf4\x1f\x2e\x1e\xf9\xa3\xaf\xd0\x87\x51\xaf\xf3\x9f\xa3\x47\xdb\x23\x6f\x04\x79\xe9\x18\x3e\xfa\x6a\x27\x6b\x76\x41\xfe\x69\xa1\xe5\xfe\xa5\xd7\x14\xfb\xce\x2a\x16\x06\x52\xe6\x0c\x77\x85\xc4\x69\xf2\xfc\x62\xe5\x39\x92\x59\x76\xfb\xed\x2c\xef\x36\x65\xa9\xeb\x4d\xb5\xfe\x69\x6f\xca\xec\xc9\x3c\x47\xa1\xfa\xdd\x55\x65\xfa\xe6\x63\xbf\x5d\xfa\x7b\x23\x29\x6c\xad\xd9\xd8\x19\x90\xee\xde\x61\x74\xf4\xf8\x84\xeb\x4e\xbb\xfd\x9a\x40\xd7\x65\x62\x2f\x61\xc0\xba\x47\x8f\xfd\x30\x88\xba\x61\x53\xd9\x4f\xad\xfd\x21\xde\xd0\x00\x8c\x02\x10\x1d\x3d\x96\xdf\xff\x1f\x88\x8e\x74\xf4\x05\x88\xc2\xf0\x40\x81\xa9\xe2\x18\x8f\x0b\x54\x80\xf2\x80\xce\xfd\x09\x44\x61\xd0\x57\x81\x09\x4f\xd9\x53\x81\x92\xa7\x84\x32\xf0\xff\x83\x68\x57\x65\x72\x40\xb4\x2b\xb3\x6c\x83\xed\x68\x4f\x01\xb0\x03\xa2\x23\x5d\xcb\x08\x44\x8f\x55\xf5\xff\xfb\xbf\x83\xe8\x68\x5f\x7d\xff\x2f\x10\x3d\x3e\x50\x79\x04\x8d\x82\xe8\x30\xb0\xc2\x47\x20\x02\xa0\xe9\xf3\xbf\x6c\x85\xe6\x04\x1f\xec\xef\xef\xee\x0f\x14\x95\x4c\xca\x62\xfa\x54\xed\x57\x78\x04\x46\xeb\xa2\xf7\xf7\xfb\x47\x07\xbe\x47\xba\xbc\xe4\x01\x17\x6c\x20\xda\x3f\xd8\xed\x07\x26\xce\x0d\x83\xfe\x2e\x84\x0b\xed\x56\x4e\x88\xc5\x73\xfb\xfb\x07\x10\xb1\x95\x18\x4a\xb8\x6e\x40\x4e\xfa\xfb\x07\xc7\x94\xf8\x3e\x24\x64\x48\x49\x8c\x7f\xf2\x28\x81\x83\x30\x0a\x10\xb3\x22\x2c\x7f\x0f\x22\xad\x62\xca\xcb\x73\x36\x67\xda\xd1\x74\x92\xe5\x84\x4a\x47\x4c\xfd\x69\x3b\x57\x4a\x5f\x22\xcc\xd4\x47\x5d\xff\x26\xe3\x0b\xfa\x6b\x52\xd2\x8c\x5e\x62\xd6\x7c\xdb\x05\x73\x72\x99\xa4\x37\x98\xa9\x8f\xc6\x2f\xf3\xf7\xaa\xa0\x98\x89\x9f\x26\x52\xf8\x24\x51\x52\x0a\x7f\x68\xf9\x69\x57\xa6\x59\xe5\x9b\x9b\x19\xa9\xb0\x05\xd8\xaa\x6f\x88\x74\xa4\x55\x8e\x36\xeb\x72\x2a\x27\x1c\x0d\xa5\x38\x67\x60\xe4\x67\xe9\xe2\xaa\x7c\xaa\x71\xa0\x81\xa3\xc4\xfe\x7e\xcd\x92\x92\xd9\x11\x67\xf2\x10\x42\xa0\x47\xb4\xac\xd8\x9b\xe4\xe2\x8c\xbe\xe0\x05\xbb\xaa\x8b\xe3\x22\x95\x9e\x2e\x78\x18\x5b\xa7\x71\x88\x7d\xd4\xe8\x96\x0f\x7f\x44\x0c\x26\x90\xf4\xfa\x8e\x88\xc4\x99\xb1\x16\x74\x43\x88\x34\x94\x91\xe5\xc7\xce\x81\x89\xa4\x6f\x37\x92\x07\x87\xac\xd4\x2e\x69\xa0\x6f\x9c\x5f\xf5\x61\x21\x9c\x7a\x54\xea\x36\x85\x70\xf0\x6c\x40\x2c\x0c\xed\x94\xc5\x67\x0d\x70\x93\x9c\xa8\x64\xd2\xd0\x81\xeb\x5a\x01\xb5\x96\x72\x5c\xaa\xb2\x50\xec\x2b\xe7\x04\xdf\xfe\xf6\xe4\xe5\x8b\x96\xdd\xd6\x38\xa7\x8a\xb3\x5d\x7a\xf9\xec\x7d\x22\x65\x95\x15\xd4\x75\x05\x2c\x60\x3c\xe7\xc8\x4e\xb4\x4f\xf5\xd7\xc2\xdb\x6c\x9c\x95\x24\x65\xd9\x27\x02\x20\x92\x3b\x7e\x12\xa7\xba\x50\x3b\x93\x93\xa4\x29\x99\xb1\xca\x21\xd7\x49\xca\xf2\x1b\xa7\xa0\xc4\x78\x58\x02\x63\x36\xf2\x32\xbe\x28\xa9\x7d\x08\x6d\x6f\xf3\xe1\x57\x3b\xd2\xc0\x24\x76\x09\xa1\x6e\x21\xcb\xf3\xee\xa4\x28\xa7\xc4\xf2\xd5\x2c\x26\xc2\x4b\x6f\x05\xc2\x12\x9b\xad\xb7\x6c\x18\xc6\x88\xb3\x87\xc2\x8e\xeb\xcb\x38\xde\x93\x52\x37\x30\xa7\x12\xea\xe4\x22\x57\x55\xaa\x81\xd1\xcd\x68\x1a\x03\x10\x99\x41\x13\x5b\x99\x88\xf4\xd2\x2b\x92\x7e\xe4\x14\xf9\x4d\x49\x92\x8f\x15\x2e\x4e\xfa\xa2\xf6\xc2\x75\xfb\xf2\x27\x51\x8d\x18\xa7\xc4\x7b\xda\x58\xa0\x37\x4f\xbe\xdb\x84\xbe\xad\xfe\x1a\x1c\xbc\x79\xf2\xdd\x1d\x28\x60\x9f\x0b\x33\x70\x15\x80\x28\x93\xa0\x97\x62\x4f\x13\xfd\xa0\xad\xc1\x75\xbd\x32\xdc\x2c\xb9\x74\xae\x12\x3a\xce\x89\xe3\x89\xe9\x67\xea\x81\x1a\xec\x56\xd3\x00\xa2\x1f\xd5\x5a\xdf\x63\xc9\x25\x67\x07\x99\x46\xe3\x36\x6b\xdc\x2d\x67\x25\xf9\x94\x15\xf3\x2a\xbf\x71\xc6\x24\xcd\x93\x92\x8c\x9d\x6a\x3e\x99\x64\xd7\xda\xdd\x3a\xf3\xb7\x81\xd5\xfc\x36\x44\xbf\x4a\x38\xcb\x4d\x70\xce\x4a\xc2\xcb\x7b\x15\x49\x0b\xcb\xab\x77\x13\xa0\x5b\xac\xbc\xb9\x2d\xf1\x98\xa4\xc5\x98\xbc\xfd\xf9\xec\x69\x31\x9d\x15\x94\x50\xde\xc2\x22\x4d\x58\x7a\xe5\x15\xf0\x56\xb6\x64\x55\x9f\x55\xce\x34\xc9\x65\xb3\x91\x03\xfc\x12\x2e\x74\x57\x87\x59\x8c\x4b\xdb\x19\x30\x25\xfa\xb8\x9a\xc4\x9e\xb2\x0b\x8a\xa3\x95\x27\x54\xc8\xce\x39\x6e\xb3\x20\x8e\x69\x94\x89\x73\x97\xd2\x02\x61\x14\xd2\xf2\xa4\x38\x2e\xb9\x4e\xc0\x17\x7f\x2f\xc1\xf9\xd2\xce\x3e\x17\x7c\x4e\x70\xe2\xba\xc9\x09\x0e\xc3\x70\x2f\x0c\x43\x3d\x50\xe4\x7a\x46\x52\x4e\x76\x9f\x92\x3c\x1b\x3b\xdf\xbf\x7e\x75\xee\xf0\xc2\x49\xca\x48\x09\x94\x17\xf6\xcf\x72\x78\x73\x33\xeb\xf8\x98\x55\xac\x24\xc9\xb4\x71\x28\xa5\x05\xed\xce\xca\x8c\xca\x99\x62\xea\xa8\x84\x83\x73\x49\xaa\x79\xce\x7c\x9c\x5b\x27\xde\x2a\x39\x04\xcd\x79\x3d\x69\x6f\x96\xe6\xb8\x9e\x3e\x81\x6b\x11\x5f\x9a\x50\x5a\x30\x47\x18\x2e\x1d\xa5\x79\x54\xc7\x02\x81\xb3\xb2\xf8\x94\x8d\x39\xa5\x14\xf3\x32\xd5\x2e\xad\x1c\x23\xf6\xfc\x05\x10\xe5\x38\x40\xe9\xf2\x89\xd5\x46\xd7\x3b\xce\x4f\xd2\xe3\x5c\x38\x49\xe2\x62\x98\xc7\x9a\x64\x19\x4a\x60\x5d\x7b\x6c\x98\xc4\x38\x1b\x26\x31\x2a\xf9\x57\x27\xb0\x78\xf2\x9c\x34\x07\x10\xb5\xed\x5c\x76\xac\x42\xf3\xad\x15\x47\xf6\x12\x42\x69\x92\x0e\xd0\x9c\xeb\x9e\x32\xb5\x11\x8f\x05\xce\x65\xe3\x65\x03\x5e\x75\x32\x3f\xae\x38\x78\x4b\x95\x0d\xab\xd8\x20\x87\x12\xe9\x6b\xcc\x53\x2a\x27\x29\x49\xdb\xeb\xd9\xc9\x68\x95\x8d\x89\xc3\x7b\x0e\x20\x5a\x39\xce\x5c\xba\xee\x8a\xe2\x8c\x31\xfe\xa7\x6e\x44\xfc\xe2\x95\x2c\xca\x1d\xe2\xc1\x95\x89\x9a\xd6\x54\x83\x4a\xac\x8c\xd8\x65\xb3\x91\x20\x36\x18\x6e\x17\x10\x6d\xb4\x63\x0b\xc7\xa3\x95\x41\x2e\xec\x41\x2e\x56\x06\x51\x51\xa0\x38\x9e\x46\x15\xad\xeb\x38\x13\x41\x94\xd8\xf4\xa3\x56\x50\x39\x97\xe9\x18\xba\xe0\x21\x75\xb4\x0b\x27\x75\xad\x04\x01\x6b\xd9\xc7\xb9\x8e\x15\x41\xeb\xfc\x18\x4e\x79\x8a\x11\x24\xda\xeb\x2c\x19\x6b\x12\xe7\x98\x12\x7e\x32\x1f\x3e\x08\xf2\xf8\x20\xf6\xba\xcb\x81\xa2\x60\x79\x6c\x5e\xeb\xa6\x1c\x22\x74\x9b\x16\x74\x92\x5d\xce\x4b\x4e\xf4\x51\x27\x40\x84\xce\xa7\xc4\x84\x3e\x97\x19\xd3\xdf\x9f\x92\x7c\x4e\xa2\x62\x01\x23\x36\x2c\x63\x5c\xa0\x31\xc9\x09\x23\x0e\xb5\x8e\x69\xb3\x86\xc8\x67\xa4\xd1\x71\x84\x76\x21\x76\xcd\x25\x97\xb2\x78\x4e\xd3\x2b\x08\x07\x4d\xc0\xf7\x23\xa1\x71\xb1\x81\x67\x47\x22\xa9\xa7\xdc\x59\x0d\x17\x6f\x9a\x12\x30\x92\x83\x95\x38\x7c\x5c\x9d\x0b\xbe\xba\xf2\xc9\xae\xb9\x99\x58\x8b\xc5\x69\x3b\x1c\xb6\x70\x61\x0d\x37\x59\x15\x1a\x9b\x7e\x4e\x88\x5e\x5a\xcd\x01\x54\xb5\x6f\x70\x17\x90\xc7\x01\x97\x1c\x8e\x65\xa1\xe3\x5f\xbc\x12\x1e\x0b\x96\x5c\xba\xae\x38\x4f\xb3\xdc\xa4\xeb\x7a\x2b\x50\x58\xd5\xad\x6f\xcf\xf7\xad\x2c\x62\xbd\x70\xdd\x5d\xae\x70\x95\x70\x5c\xdc\xde\x5f\x64\xf1\xf9\x2a\xcb\x89\x17\x06\x52\xca\x09\x77\xe5\xaf\x08\x8a\xfa\x3a\xdf\x71\x8e\x23\xc6\x54\x1e\xe5\xe4\x38\xbf\xb7\xef\x28\xf3\x7d\x35\xd4\x5a\x34\x3f\x16\x0a\x64\x79\x0c\xed\x68\xdf\x7f\x40\xb7\x16\xfa\x10\x52\x47\x18\x9b\x39\x6c\x19\xa7\x80\xa6\x9a\x13\xaa\x65\x27\x4e\xff\x69\xc6\xe5\x3e\x79\xd6\x52\x88\xa8\x5c\x92\xb1\x8e\x2b\x91\x96\x93\x9a\x69\x47\x9b\x94\xbc\xbd\xfd\xce\x26\x52\xa6\x5c\xd6\xdc\x3b\x90\x1e\x69\xac\xb3\x96\x4e\xa9\x1f\xc2\x3b\x12\xfb\x9c\x45\x50\x1f\xef\xa2\xe0\xee\x66\x3a\xef\x3c\x06\xed\x73\x56\x57\x4a\xce\x17\x0e\xdc\x83\x66\x19\xe5\x2a\x39\x3b\x0d\x05\xfd\xe8\xb8\xe6\xe0\xe9\x88\x02\xc4\xba\xa1\x5d\xd1\x94\x2c\xdd\xe2\x20\xcf\x90\x89\x6d\x8c\x84\xa6\x57\x45\xa9\x2d\xde\x96\x89\x79\x99\x36\xdb\x16\x6c\xa3\x28\xc8\xf2\x02\x16\xf9\xc9\xe5\x1d\xfd\x1d\xe3\x04\x8a\x9d\xae\x7b\xe7\x4d\xe6\xba\xeb\x9b\x15\x35\x1b\x9e\xb9\x9c\x8a\xb4\x18\x76\x61\xc9\x1c\xce\x74\x5e\x31\xb1\xec\x5d\x10\x67\x5e\x89\x45\xaf\x4d\x1e\x10\xed\xed\x8b\x35\xc3\x75\xdf\x79\x77\x42\xe7\x87\x10\x1e\x43\x21\x8f\x71\x4e\x6a\xf3\x2d\xc1\x25\x3a\x42\x35\x5c\xa2\x4e\xcc\xa0\x32\xc5\xcb\x93\x87\xf7\x8d\x80\x39\xed\xc6\x3b\x28\x56\x90\x0b\xc9\x81\x76\x51\x27\x44\x9d\x00\x22\x55\x9d\xc6\x37\xb4\x1b\xbf\xb7\x7a\xa4\x57\x28\x8c\xa9\x5e\x8d\x24\xa4\xa7\x0c\xaa\xf9\x05\xe5\x40\x5e\x24\x63\x7b\xa4\xd4\xe9\x26\x65\xcb\x77\x08\x65\xe5\x0d\x68\xc0\x6d\x75\x9a\x29\xa6\xa1\xc8\xa4\x93\x0b\xcc\xb1\xe4\x12\x97\x48\xd3\x03\x2e\x90\x3c\xc5\x82\xad\x0d\x02\xdd\x29\x9c\xa0\x96\x48\x75\x49\x56\x7c\x12\x70\x27\x44\x89\x22\xd2\xdd\x5d\x69\xb6\xbf\x67\x01\x6a\x59\xfa\x0d\xd5\x8a\x13\x94\x6b\x55\xdb\x44\xa9\x0c\x72\x41\x05\x10\x1d\x88\x85\xee\x7e\xae\x05\x07\x5e\xc1\x69\xe4\x01\x39\xa3\xdd\x5d\xb1\x86\x7b\x09\x2f\x40\x31\xe8\x74\xc0\x83\xca\xf1\xac\x00\xb5\x16\xb2\x02\xde\x7e\x09\xe3\x57\x7c\xff\xa0\x2f\x19\xbe\x75\xeb\x81\xb6\xc8\x0c\xbc\x6c\x45\xf5\xf8\xb2\x65\x49\xaf\xcf\x73\x6a\xf4\x0b\x42\xc7\x5a\xdb\x52\x9a\xc3\xe7\x8c\x5d\x65\xd4\x49\xb8\xb2\x7b\x91\xb0\x6c\xca\xc7\x1d\x40\xe1\xc3\x24\x57\x50\x05\x6a\xe7\x9d\x58\x49\xe5\x90\xb9\xae\x97\x0c\x1a\xd5\x4b\x69\x86\x4a\x35\x50\xca\x88\x43\xae\xd3\x3c\x99\x4a\x8c\x4e\x93\xf2\x63\x05\x60\x24\xa6\x56\xab\x53\xdd\x10\xb5\xa6\xb9\x56\x77\xa9\xd1\x38\x68\xb2\xa4\xe9\x2e\xb5\x23\x0e\x17\xda\xaa\x0e\x12\xf8\xb4\xd1\xc3\xd9\xc7\x83\x16\xf2\x3b\x87\xfc\x1b\xad\x88\x1b\x0d\x6c\x63\xdf\x27\x79\xf1\x99\xcf\x60\x4e\xd1\x45\xd9\x82\x6e\x91\xb9\x6e\xe7\xd7\x75\x55\xf1\x8e\xde\xd3\x39\x71\xff\x8a\x54\x8d\xb3\x75\xaa\x71\xa6\x55\xe3\xdc\x56\x8d\x45\xc5\xcb\x8a\x71\x66\xbc\xa1\x8b\x81\x64\x10\x59\xb4\x6c\x1b\xa0\x50\x25\x19\x15\x9a\xc6\x7e\x16\x81\x8e\x70\xb8\x56\x69\xa0\x03\x44\x5c\x3b\x72\x55\x47\xe0\xb9\xa4\xa1\x61\x4e\x8d\x51\xc1\x42\x2b\xd8\xf6\xa9\xbf\x0d\xb6\x21\xea\x04\x0d\xfb\xb9\xb1\xd9\x8f\x60\x38\x87\x1d\x8c\x2d\x3a\xba\x97\xe1\xac\x5d\x27\xd7\x33\x1d\xea\xc8\x74\x9b\xf1\xac\x6d\xa9\x45\x36\x2d\x52\x13\xf3\x85\x8a\xf9\xc2\x05\xe6\xce\x9f\x1e\x85\xc7\xf0\xfe\x4a\x9a\xbb\x94\xcc\x2a\x2b\x74\xae\x66\x0e\xb4\x21\xa4\xc5\x98\xc8\x15\x56\x93\x4a\xc2\x9c\x9c\x24\x15\x13\x16\x3d\xcb\x7c\xd0\xb0\xfd\xbb\x88\xdb\x1e\xf3\x0b\x63\x14\xe0\x7c\x8d\x8f\xbd\x72\x42\x43\xe2\x76\x15\x34\x46\x57\x68\x8a\x43\x74\xc9\x17\x82\x1b\xbc\xc4\xd4\xb5\x1d\x5b\xae\xc6\xf2\xdb\x03\xc5\x8c\x50\x80\x08\x87\x86\xd3\x87\x30\x8b\x1a\xc0\x54\x48\x2c\x49\xea\x5b\x2d\x46\x22\x94\xe0\x1c\xa7\x78\x8f\x8b\x0a\x75\xcd\x19\x50\x86\x4a\xd7\x6d\x2d\xfc\xde\xa5\x14\x0c\xec\x45\x75\x30\xc5\x61\xd4\x92\x86\xb9\x00\x37\xc5\x41\xd4\x5e\x31\x5d\xd7\x9b\x62\x2e\xaa\x21\x2e\xe2\x4d\x85\xb6\x7a\x2c\x96\xbd\xba\x16\xe4\x77\x0c\xad\xb6\x06\xb2\xa9\x14\x27\xff\x6e\x73\x51\xaa\x86\x2e\x75\x5d\x2f\xc5\x97\x75\x5d\x48\xbb\xe7\xd4\x75\xf7\x3a\xa2\xb3\xde\x18\x87\xb2\xdb\x5c\x8a\xcf\x06\x2c\x62\x7e\x88\xae\xf0\x7a\xe3\xb6\x84\x7f\xc0\xab\x13\xb2\xe6\x15\xb4\x2f\xbd\x58\x32\x32\x23\x83\x53\x25\x86\xce\x1a\x31\x74\x82\x6f\x17\x68\xbc\x74\x00\x59\x0a\x51\x57\x12\x25\x53\xf9\xa3\x10\xc9\x69\x00\x5d\xfc\xfd\x62\xeb\x04\xa2\xea\x21\x62\x6b\x75\x2c\x8c\x75\x37\x75\xbd\x56\xc5\x13\xc6\x81\xbf\x5f\x78\xbd\x47\xe0\xe3\x8b\x59\xa1\x25\xc9\x03\x2e\x26\x55\xae\xbb\xcf\xb9\x57\x55\xd7\x9d\x77\x5e\x26\x5d\x4d\x12\x9d\x25\xc7\x36\x2a\x53\x5b\xba\xe8\x88\x19\x49\x51\x5f\x09\xa2\x4a\xc6\x33\xb2\x1f\xc6\xb8\xd0\xde\x95\xf7\x0c\xd7\x2f\x5e\x05\x8f\xe1\xda\x6c\x2b\x4a\xed\xfe\x21\xc6\xb8\x82\xef\xd6\xd7\xda\x16\x36\xf4\x6a\x9d\x38\x9f\xaf\x32\x46\xaa\x59\x92\x5a\x5c\xc8\xb6\x0b\x38\xc9\x84\xc7\x70\x21\xe4\x23\xb9\xe9\x0a\xe3\x87\x53\x91\x59\x52\x8a\xb5\xd2\x48\x24\x17\x79\x91\x7e\xd4\xf6\x17\x00\xd1\x8d\xeb\x7a\xc2\xbe\xa7\x18\x10\x92\xbc\x41\x98\xf8\xd0\x15\x9e\x62\x49\x8c\x90\x13\x62\x20\x49\xb2\xe4\x7f\xae\x14\x7d\x4f\xb1\xe6\x2a\xcd\x7d\x15\x17\xb0\x71\xdd\x4c\x2e\xf1\xbc\x61\x49\x33\xd4\x09\xb6\x8c\xc9\x53\x50\x42\x49\x92\x31\xe7\xc0\xe6\xe6\x01\x6d\x1b\x9a\x25\x59\x79\xec\x24\x4e\x5a\xe4\x05\x15\x0b\x6d\x56\x55\x64\x0c\xe0\x62\xf1\xef\xb4\xd4\x1e\x01\x29\xf6\x1f\xeb\xbb\x10\x84\xcd\xe5\x23\xb9\x71\xa6\xc9\x8d\xa6\x53\x1b\x36\x61\xaf\x92\xed\x3b\x07\x9c\x67\x56\x03\xef\x8b\x47\x90\x8b\xd1\x9d\x00\x46\x37\x03\x4f\x8f\x67\xa0\xc5\xca\x8c\xa6\xc5\x74\x26\xec\x54\xda\x83\x63\x65\x40\x38\x7c\x62\xa1\x32\x63\x72\xec\x14\xa5\x33\x29\xf2\xbc\xf8\x4c\xc6\xce\xc5\x8d\xba\x02\x81\x25\x17\xf3\x5c\xd8\xdb\xc4\x61\x60\x61\x51\x02\xf6\x6d\x60\x3e\x0e\x51\x85\xc5\xb9\x06\x8b\xe6\xd7\xa8\x51\xa2\x93\x0f\x98\x53\x50\x2b\x77\x7b\x9c\xaf\x0b\x4b\xe8\xcd\xa0\x21\x91\xe8\x12\x37\x5a\xde\x4d\x5d\xb7\xc7\xed\x72\xdd\xa0\xd9\xba\xe0\x7d\xd3\xd0\x56\x06\xd7\xf5\x42\x30\xb5\xbb\x94\xc1\x16\x51\xdc\xa3\x0b\x6a\x39\xef\xc6\x75\x37\x62\xff\xc2\xa8\x89\x2d\xca\xd4\x6a\xa2\x71\x31\x32\x0b\xf3\x04\xa2\x8b\x05\x5f\x63\xd0\x18\x2e\x2d\x33\xad\x7b\x2a\xd1\x8a\xe8\xc0\xc9\x6a\xaa\xe6\xe4\x65\xb3\xe6\xdc\xac\x5b\x6e\x38\xbe\x85\xef\x87\x37\xbe\x57\xe0\x4b\xf0\xd1\x2e\xaa\x38\x99\x16\x78\x18\x9b\x39\x1e\xf6\x39\xeb\x1d\x5b\xee\x79\x38\xec\xef\xf3\x8c\x01\x2a\xf0\xed\x62\xf1\x25\x0b\x52\x01\xd1\x5a\x40\x5a\xbc\x50\x2c\x49\x63\xb9\x24\x69\xa2\x60\x10\xdd\xdf\x05\x8c\x71\x02\x57\xe4\x40\x61\xd2\xe3\x98\x99\x36\x98\xb9\xd4\x98\xa9\x06\x06\x37\xd1\x3a\x65\xbe\xe0\xcc\xe5\x6a\x20\xfc\x68\xc6\x5a\x9a\x34\x9c\x98\xf3\x60\x31\x3f\xb9\x0c\x49\x28\x43\xce\xc5\x9c\x39\x93\x62\x4e\xc7\xce\x36\xda\x06\x7a\xae\xcb\xb9\xeb\xa4\xc5\x74\x9a\x38\x17\x84\x7d\x26\x44\xe9\x38\x69\x91\xe7\x44\x4a\x8d\x9c\x14\x33\xc2\xf5\xaf\x89\x94\x0a\xb8\xd0\xd6\x09\x91\xe0\x3e\xe3\x07\x99\x78\x5c\xd7\x13\x85\x36\x98\x78\x18\x94\xe2\xb8\x98\xda\x59\x6b\x6a\x97\xf6\x72\xa9\x66\x76\xa8\xcd\x36\x33\x45\x6d\x73\x33\xa7\xad\x2a\xd7\x23\xb4\x25\x1a\xa7\xda\xb0\xd4\x11\xa6\x1b\xb1\x86\x8f\xeb\x5a\x1a\xa3\xee\xa7\x07\xbb\xb1\x65\xd0\x26\x16\x9b\xa9\x06\x62\x7a\x16\xe8\x06\xcd\xd0\x1c\x4d\xd4\x3d\x9a\x51\x3e\x50\x37\x26\x8a\x64\x29\x70\xb5\x72\xc0\x48\x67\x68\xb5\x25\x90\x7e\x3f\xd5\x0d\xbc\xab\x87\xf5\x03\x46\x57\xb8\x13\x2e\xbe\xc4\xaa\xb0\x44\x23\x00\x72\x96\x31\x86\x03\xbe\xb6\x44\x5e\xee\xba\x6b\xce\xae\x35\x5c\x43\xf0\xfc\x4e\x88\xe6\xfc\xcf\x0c\x33\x34\xc1\x1c\x4e\xe5\x2e\xda\xdf\x93\x1b\xad\xf7\x2a\x82\xbc\x80\xe6\x06\xc2\xe2\x92\x58\xfe\x8c\x98\x2b\x3e\x45\xe9\x19\x83\x98\x3a\xd3\x60\x66\x10\x00\x62\x3e\x27\xc2\xfc\xb8\xb7\xbb\xb1\xcd\x65\x71\x48\x98\x36\x13\xc8\x99\x57\x3a\x48\xb1\x28\x99\x0c\x76\xa3\xbe\x9a\x53\xd2\x50\x2c\xb9\x79\x7a\x55\x4c\x05\x3b\x9f\x8a\xc5\x92\x33\xef\x6c\x92\x99\xbd\x5f\x79\x50\xde\x2b\xb0\x38\x2b\x9f\xe3\x04\xba\x6e\x2e\xdc\xd9\xf2\xee\xde\x61\xd4\x0d\xe1\x29\x36\x42\x61\xc0\x97\x94\x41\xb3\x74\x98\xc5\xd9\x5e\x43\x3e\x67\x63\x76\x25\xdb\x96\x42\x86\xec\xf6\xb1\x93\x31\x6d\x81\xb8\x20\x4e\x4e\xaa\xca\x61\x57\xe2\x0a\x25\x02\x60\x34\x1f\xac\x80\x4e\xd7\x54\x6b\xc3\x1f\x79\x33\xcc\xfc\xa2\x2b\x90\x18\xc0\x45\x36\xf1\x7e\xf1\x12\x28\xac\x65\xf7\x0f\xa3\xb2\x96\x89\x12\x42\xf7\x97\x63\xfa\x25\x65\x3b\xdf\x79\x89\x5a\x50\x13\xe9\x72\xa6\xd1\x79\xdb\xec\xab\xb4\xb7\x4c\xd0\x7d\x34\x75\xec\x75\xe6\xed\x45\xfb\x64\x06\x5d\x57\xec\xb4\x24\x2b\x3b\x2d\xf7\x83\x2a\x36\x7c\xe6\x6d\xeb\xf5\xe9\xcc\x75\xbd\x19\xb6\xa3\x20\xe2\x7d\x81\x13\xdf\x37\x54\xb1\x04\xc3\xed\xae\xa0\xb6\x4d\xfb\x11\xd5\x20\xf4\x27\xd1\x44\x9e\x1f\x48\x5d\xb7\x6a\xed\x5d\xf0\x2c\x70\x4b\x4a\x0c\xc2\xbf\x61\xc0\xc7\x7d\xe0\x8d\x25\x3f\xbe\xbb\x4a\x18\x8d\x45\xce\x70\x63\xce\x09\x67\xf0\x11\xa7\xce\xc9\x60\xa9\x61\x07\xc0\x68\x63\xb1\xcd\x49\xba\x6d\xb9\x96\x73\xfa\x12\x0c\x22\xb3\xad\x31\x36\xfa\x8f\xe1\x03\x50\x21\x7c\x42\x32\xfb\x8e\xd4\x4e\x08\x17\x8d\x87\xb9\xe0\x5f\x1b\xe5\x1d\x41\xa4\x47\x7f\xc1\x40\x75\x07\xfb\x69\xaf\x85\x19\x2e\x97\xad\x4d\xf7\xb7\x25\x78\xd7\xee\x91\xb8\xa2\x81\x93\xcd\x9a\x4e\x06\x10\xdd\x01\x78\x9b\xb9\x59\x97\x8b\xb4\x37\x73\x2d\x38\x6d\x28\xa5\x16\xf2\x9d\x47\xe1\x40\x37\x5d\x8a\x16\xc5\xd6\x9a\x5c\xb1\x42\xb1\xba\xb7\x7b\x07\xa3\x96\x35\xcc\x5a\xef\x5d\x57\x6c\x27\x0e\xee\x5a\x8b\xb4\xbf\x56\xb3\x1a\xa9\xbb\xd8\xfe\x98\x17\x3c\xab\x1a\x6a\x18\x79\x1b\x01\x87\x5b\x5f\xb2\xd8\xad\xaf\xfe\x1e\x8a\xd1\x6b\x9d\xa0\x9c\x3d\x8e\x80\xfc\xbf\x88\x72\x28\xce\x56\x28\xe7\xde\xb6\xa4\x14\x2b\x3c\x8f\x73\x2d\x9a\xa6\xd2\x18\xb1\x44\x3d\xad\xb6\xe4\xbd\x33\xc2\x35\x39\x6f\x28\x6e\xa5\xcc\x77\xeb\x01\x58\xa2\xb6\x86\x40\x8c\x9a\x93\x9f\xf4\xf7\x0f\x5c\x97\x90\x61\x1e\xc3\x86\x3f\x30\x1e\x6e\x41\x62\x4a\x78\x5c\xec\x17\x7b\x48\x29\xce\xe1\xa0\x1f\x85\xe1\x63\xc1\x2c\xf7\xa2\xc3\x7d\xf1\x71\x18\x05\xf0\x34\x50\xf7\xc4\xe0\x04\x15\x38\x38\x2e\x4f\x83\xe3\xb2\xdb\x85\x5e\x82\xbf\x7f\x10\xac\xa7\x38\x18\x14\xd8\x2b\x4e\x4e\xf6\xa0\x9f\x44\x4b\xf2\xb6\x75\xa5\x44\xdb\xc1\xcb\xf4\xe0\x5f\x5e\xd1\x1e\x4a\x39\x77\x34\x19\xca\x3b\x51\x49\x95\x26\x33\x62\x36\x04\x01\xdc\x6a\xe3\x56\xcf\xb7\x5c\xcf\x37\x4e\x69\x6b\xe7\x5b\xbb\xdc\xdf\x3d\xdf\xc6\xc5\xfc\xe2\xde\xf9\xd6\x02\xe0\x8b\x84\xcb\xf5\xd5\xdb\x12\x66\x67\xed\xf1\x41\x4e\x9a\x7b\x5c\x0e\xf4\xee\xdb\xb2\x5d\x9a\x6a\x6b\xb3\xdf\xb3\x15\x90\x89\xad\x80\x4c\x6e\x05\x64\x9c\x13\xff\x8d\x5b\x01\x79\x96\x54\x5f\xb2\x13\xb0\xb2\xfb\xd6\xda\x02\x30\xbb\x3f\x46\xf3\x45\x66\x17\x6e\x7b\x4e\x8d\x58\x37\x56\x0d\x37\x1b\x36\x86\xe7\xd8\x5a\x33\x8d\x5b\x26\x11\xb1\x76\xc2\xc1\x03\xec\xd1\x42\x5f\xe3\x4c\xcd\xd2\x8e\x38\xce\xde\x79\xf3\xfb\xf0\x55\xd7\x7f\x7a\x73\x58\xd7\x42\x50\x9c\xd7\xf5\xee\xa1\xfc\xdd\xeb\xab\xf0\xae\xfc\x95\xca\xc3\xbc\xae\x0f\x74\xc2\x91\xfa\x55\xf1\xbb\x8f\x55\xba\x0a\x1f\x1d\xf0\xdf\xd6\x2e\xb6\x77\xa0\x2a\x13\x92\xfe\x9c\x2b\xaf\xef\xee\xa3\x28\x2e\x03\xd5\x35\x75\x5d\x4e\x0b\x5f\xc0\xc8\x4b\x5c\xd8\x2b\x6d\x82\x3b\xa1\xa0\xae\xb9\xe4\xcf\xc2\x50\x3b\x17\x9f\x5f\x08\x82\x14\xf7\x34\x93\x94\xc3\xa6\xea\xb9\xb3\x96\x6e\x08\xed\xc2\x52\x16\xbd\x93\x77\xa8\x36\xe7\x96\xf1\xfa\x3b\x1e\xd2\x5e\xb6\xd2\x77\xbf\xa5\xd4\x57\x2d\xf1\xd7\x30\x2e\x4e\x4d\x2d\x51\x19\x33\x78\x9b\x48\x19\xf0\x1e\x0f\x0f\x3e\x43\x32\x3a\x27\x0b\x0b\xd8\x42\x55\x86\xf3\x96\x97\x5a\xda\xd6\x0a\x2a\x25\x19\x2f\x12\xd7\x95\x4c\x95\xd3\x6c\x27\x54\x4c\x55\xdd\xcd\x9f\xc3\x75\xa8\x82\xe8\x17\x41\x95\x5e\xd1\xde\x93\x5e\x0f\xef\x3a\x27\x2c\xa7\xd5\x62\xa7\xa3\x69\x43\xec\x6c\x08\xb2\x99\x59\xa6\x39\x21\xb2\x72\x36\x88\x42\xe5\x5e\xe3\x09\x63\xae\x3e\x08\x28\xfd\x2e\x94\xbd\x0f\x0c\x00\x84\xd1\xba\x0c\x26\x24\xe7\xb4\xb1\xf0\x37\x5c\x47\x5d\xc8\xcc\xd5\xc5\xab\xe4\x13\x71\x12\x7a\xa3\xb7\x4e\x85\x25\x48\x3a\x8f\x3e\xc4\xb0\x66\xac\x20\x52\x45\x98\x0a\x90\x53\xd7\x55\xfb\x58\xcd\x7d\x16\x02\x36\xf8\xc5\xd5\x1a\x39\x00\x0c\x80\xa9\xe5\xb6\x65\xfa\x93\x39\x97\xae\x48\x96\x77\x7a\x6b\x16\x68\x9d\x42\x10\xfd\x17\x97\x93\x4f\x8a\xd2\xe9\x9c\x0c\x4e\x1d\x96\x5c\x0a\x05\xba\xb9\xa6\xda\xcc\x65\x31\x44\xe2\x25\x1c\x75\x85\xf9\x36\x54\x57\x7a\x90\xf6\x19\x9f\x15\xf7\x58\xce\x68\x26\xcb\xb9\x86\x55\x0c\xf5\x45\xf8\x8d\x37\x12\xbc\x6d\x48\xa0\xb9\xf7\xde\xf2\x56\x92\x08\x9f\x08\x5b\xd8\x97\x8f\xa0\xa2\x7f\x33\x90\x1d\xd0\x31\x03\x99\x4d\xbc\xc6\x77\x40\x9e\x33\x52\x17\xe5\xd6\x35\xd0\x17\xe4\x82\x58\x42\x00\x21\xef\xd0\x1d\xd9\xd4\x4d\xba\x12\x67\x1c\x47\xca\xa0\xa8\xfc\xb4\x67\x4d\xe9\xd6\xfd\xbd\xad\x3a\x56\xbd\xb5\x05\x8b\x62\xc9\xa5\x39\x4c\x34\x1b\x56\xb1\x88\x50\xa7\x7c\x31\xc6\x3a\x0a\xde\x4e\xc4\xb7\x56\x87\x35\xed\x6b\x09\x8c\x25\x97\x4e\xe7\x44\x5c\x52\x96\x5c\xfa\xe0\x14\x58\x94\xae\xe9\x68\x22\x80\x5a\xa6\x22\x70\x27\x15\xe9\x1a\xb7\xd7\x52\xd3\xb6\x3f\xd1\xf4\xb3\x96\xa2\x26\x2b\x34\xa1\x06\x7c\xe0\xdd\x49\x19\x2a\xd7\x5f\x99\xac\xad\x43\x01\xfa\x4e\x99\x44\xf6\x8b\x0b\x6a\xad\x51\x6a\x6c\x51\xd2\xc9\x68\xe9\xb0\xf0\x06\xcf\x81\x34\x2f\x2a\x22\x5c\x07\x6c\xbf\x31\x73\x9f\x4e\xc3\x9e\x6e\xac\x8b\x3d\xd7\x38\xad\x2d\x31\x65\xb5\xe6\x9a\xc3\x42\xd2\xed\x60\xf9\xb0\x10\x51\xc7\xf8\x90\xf6\x80\x59\xbb\x29\x6e\x0d\xd3\xba\x74\xa9\x6b\xdd\xeb\x23\xe7\xba\x9e\x2d\x30\xdd\xeb\xec\xdb\x69\x99\x7f\x4e\x03\x2e\xb5\x08\x7f\x32\xa8\x8c\x5b\xc9\xc3\x1c\xe1\x56\x85\xd6\xc6\xdf\xeb\x01\x4e\x53\x52\x32\x1e\xc6\x68\xd5\xb9\xcb\x16\x2f\xf5\x84\x3c\x09\x8d\xf7\x8d\x39\x10\x25\x64\x5a\x7b\xc7\xbd\x65\x79\xb4\xb7\x91\xa9\x23\x6b\x01\x6b\xfd\xbc\x1f\xe6\xab\xad\x1c\xb5\xff\x8a\xc3\x9e\x74\xcb\x56\x5c\x41\x48\x30\x2d\x2f\xed\x7f\x6f\x20\x33\xed\x5d\xba\x79\x0c\x17\xaa\x52\x69\xb6\x54\x2c\x37\x27\x88\xc2\x41\x4e\x86\x34\x96\xba\x1e\x8c\x12\xb5\x60\x49\x6e\x65\x34\xb3\x66\xc4\x8d\xec\xbe\xb0\x49\x2e\x30\x92\xdb\x99\x7a\x69\x4a\xc8\xb6\xf7\x9d\x0a\xb8\x3f\x93\x1f\x3e\x2c\x5b\x1f\xb6\x4e\x25\xe0\x5d\x5b\x85\x80\x51\xb2\x42\x3a\x95\x50\x10\xa7\x49\xb9\x7c\xf4\xe0\xa2\x91\xca\x64\x5f\xba\x21\xda\x33\xbb\x2e\x56\x9f\x57\xe6\xbc\xeb\x7e\xa5\xee\x34\x6c\x21\xa2\x40\xed\xb9\x2a\x1d\xdf\x69\x41\xbb\x4f\x5e\x3f\x3d\x3b\xb3\x0e\x41\xc8\xf3\x3e\x19\x65\xa4\x9c\x95\x44\x3d\x39\xa0\x76\xd8\xc4\xa6\xb6\x39\x11\xbb\xec\x4e\x7c\x9f\xfa\xbd\x77\xf0\x00\x6c\xdc\x35\x80\x6b\x1c\x4d\xbb\x66\x3e\xae\xaa\xda\xe2\x05\x03\x43\x3d\x8d\x8f\x46\x6b\xa8\x1b\xae\xfb\x49\x1f\x98\x55\x0f\x0d\x09\xb6\x47\xb0\x79\x1d\x06\x9a\x53\x91\xf2\xe4\x03\x69\xf7\xc1\x3c\xe4\xa5\x0e\x44\x6c\x4e\xf6\x88\x32\x57\xa3\x83\xfd\xfe\x63\x71\xda\xde\xce\x1b\x88\x2c\x98\x34\xb7\x40\xca\x8b\xb8\xa8\x38\x55\xae\x8e\x84\x2b\xf7\x1d\x75\x37\xee\x28\x00\x92\x93\x09\xef\xa5\xcc\x75\x3d\xda\xe0\x22\x43\x05\xf1\x28\x12\xb7\x9e\x3b\x17\x37\x8c\xe8\x57\x2c\x12\xe5\xc7\x20\x7c\x83\x66\x73\x26\x24\x5e\x89\x1e\x0e\x60\x00\xe4\xe9\x0b\xba\xe6\xa8\x81\xb5\x9b\x00\xa9\xbd\x61\x80\x43\x44\x6d\xb7\x07\x79\x91\x70\x13\x75\x42\xcd\x48\x1c\xc3\x27\xc4\x6b\xec\x05\xb4\x21\x2c\x71\xd0\xf8\x23\xc1\xb7\x79\x91\x8c\x9f\xe4\xf9\xca\x61\x55\xb5\x78\x72\x71\x77\xf9\xb8\x18\x73\xdd\x4f\x45\x36\x16\xb7\x1c\x51\x71\x61\x30\x43\xd2\x11\x4f\x3f\x4c\x21\xf0\x2c\x79\x69\xf3\xe6\x68\xf3\x98\x9c\xb9\x85\xd7\x3c\x1c\x27\x8f\x4a\x66\x2b\x47\x25\x99\x97\x0d\xcb\x18\x2e\x10\x07\x73\xdd\x5b\x97\x58\x91\x14\x6f\x2a\xb0\xce\xd5\x0a\x89\x53\xdc\x82\xd4\xbe\x1f\xc6\xa1\xc3\x20\xde\x6a\xbd\xd1\xd1\xb8\x1d\x69\x03\xad\x21\x68\xf5\x92\x88\x24\x76\x7b\xef\x7b\x5a\x94\x04\xc0\xc5\x62\x81\x3e\x93\xcd\x57\xf1\xa0\xa7\x6b\x12\x97\x6e\x29\xb9\x26\xf8\x36\x88\xc0\x68\x14\x00\xf4\x98\xff\x26\x00\x1d\xf2\xdf\x0b\x80\x8e\xf8\x2f\x03\x28\x14\x19\x28\x40\x61\xc8\x3f\x3e\x01\x14\xf6\xf9\xc7\x04\xa0\x70\x97\x7f\x94\x00\xf5\x45\x61\x02\xd0\xee\x5e\xb4\x3d\x1a\x81\x6d\x74\x24\xf2\x8c\x46\x3c\x93\xc8\x75\x0e\x50\x78\x20\xaa\xfa\x00\xd0\x61\x7f\x57\xa4\xbf\x10\x9f\x22\xfd\x47\xb0\x40\x67\x04\x0f\xc1\x0d\x40\xe0\x37\x80\xc0\x0d\xa9\xf8\x97\xfc\xfb\xec\x35\x40\xa0\xa0\x00\x81\x57\xe2\xcf\x39\x40\x80\x7f\x88\xdf\x82\x7f\x88\x3f\xaf\x78\xae\xc9\x84\xe7\x90\x7f\x9f\x3f\x07\x31\x7a\x4d\xec\x4b\x67\xe5\x65\xb6\x91\xfa\x84\x3c\x60\x5d\x83\xfb\xd5\x4e\x73\x00\xf7\x95\x25\xa6\xa9\xdd\x13\x86\xef\xba\xf8\x17\x91\x13\xdc\xdf\xdf\x87\x19\x06\xd7\x00\x95\xb8\xdf\x38\xbe\xa8\xab\x2a\x78\xd2\x9c\x27\xed\x59\x5b\xa7\xe4\x04\xef\xf5\x8f\xf6\x8e\x0e\x1e\xf7\x8f\xf6\x97\xde\x70\x49\xb9\xa8\x3a\x2b\xb2\xd6\x46\x81\x68\xde\x76\xad\xba\x14\xe2\x5c\x29\x65\x92\xe0\xfa\xb9\xfa\x07\xc0\xad\x0c\x83\xb7\xbc\xbd\x43\x25\xce\x82\xd1\x08\xf8\x99\xdf\x6c\x55\x05\x00\x95\x5d\x66\x1e\x8f\xb4\x0e\xf2\xfd\x2e\xba\x6f\x5f\x37\x41\x96\xaf\x9b\x50\xcf\x3c\xca\xa7\x0c\x93\x6b\x2f\x44\x44\xc5\xd5\x75\x5f\xbf\x5d\x2a\x9f\xbb\x55\x86\x0a\xd2\x0e\x5b\xef\x82\x7d\xcc\x66\x67\x54\x1c\x31\xe6\xed\x34\xa1\x26\xcb\x24\x2f\x3e\xbf\x20\x9f\x48\x8e\xc5\xdd\xa5\xf2\x25\x5e\x8f\x34\xf1\x70\xd0\x0d\x23\x2b\x6c\xbd\x38\xd6\x7a\xdf\x65\xf3\x1e\x87\xb9\x96\x52\x8e\xd6\xed\x42\xdd\xfc\x77\xbb\x50\x57\xba\x79\xd9\xa6\x87\x6c\x0d\xdb\x48\x30\x67\x1b\x28\xd7\x2b\x0b\x1b\x26\x31\x44\xca\x03\x3d\x31\xfa\x5d\x1f\x0a\x57\xb0\xb5\xae\xe8\x89\xb9\x16\x1c\x22\x2f\xe5\xcb\x47\xfb\x96\x8c\xe6\x55\x97\x24\x86\xae\xfb\x54\x9d\x02\x4e\x5b\x4f\x9a\xa1\x5c\x79\xac\xb4\x62\x87\x79\x0c\x11\x1d\x26\x31\xce\xad\xd7\x5c\x2c\x2c\x23\x22\xf3\x9b\x27\xd1\x64\x5a\x51\xb2\x1f\xc8\x0d\x57\x39\xf4\xa7\x7d\x4d\x08\x25\xbf\x66\x63\x79\x63\x87\xfe\xae\xeb\xc3\x40\x53\xc0\xcf\x64\x52\x09\xd4\xf3\x8f\xa6\x1c\x2d\x9e\x16\xd3\x59\xc2\x5e\x16\x63\x22\x92\x9b\x60\x93\x29\x2d\x38\xa5\x88\x0b\x8d\x3f\x8b\x91\x68\x82\x4d\xa6\x3f\xe6\x05\xcb\xe8\x25\x1f\x1e\xbc\x0d\xb6\xc5\x92\x6b\xc5\x0d\xfa\x91\xa6\xa1\xa2\x4c\xc9\x4f\xf3\x82\x11\x0e\x90\x15\x6a\xea\x52\x17\x2e\x96\x78\xcd\x8b\xd5\xe6\x3a\xc6\x72\xd0\x7c\x46\x7f\xfd\x46\x14\xad\x72\x6e\xce\xaf\x9f\xd2\x69\x9e\x22\x6c\x3d\x3b\xa8\x2c\xb0\xf2\x2a\x13\x7d\x2e\xb8\xe2\xfa\x8e\x88\x9a\x57\x64\xfc\x6d\x13\x2d\x1e\x63\x31\x13\xfc\x8d\x12\x88\xec\x07\x54\xdb\x6f\x53\x42\x54\x08\x87\x83\x6e\x88\x72\xde\x4c\x6a\xae\x64\x39\x2e\x4e\xd2\x63\x28\xfc\x99\x95\xc3\x89\x16\x55\x28\x40\x05\x84\xf2\x80\x90\x92\x4d\x79\x35\x29\x8c\xec\x28\x94\x48\x07\x64\xf1\x93\x19\xc9\x8b\x17\x57\x12\x4e\xee\xe3\x12\xa2\xdc\xc7\x99\xa6\x53\x0b\xf4\x67\xc4\x7e\x89\x4e\x3c\x2a\xda\x82\x5c\xb3\xa1\x47\xf6\x95\x28\x2f\x89\x75\x79\x90\xbe\xe7\xe9\xa8\x7d\x41\xd3\x8b\x76\x1e\x7d\x37\x53\xd8\x3f\xa8\xeb\xf0\x20\x6c\x9e\xe9\xe8\x1f\xed\xbb\x2e\x5f\xc7\xe4\x8d\xba\x7c\x19\xeb\x88\x0a\xf7\x1f\xef\xee\xed\xe9\x7c\x9c\xe9\xef\xba\xae\x90\x03\x65\xb2\xb8\x63\xc8\x54\x2b\x6f\x5a\x68\x9a\x3f\xb7\x9b\x17\xb0\x58\x85\xb5\xe0\xe9\xba\x52\x3e\x6d\x8a\x3d\x27\xed\x27\x04\xcf\xd5\x79\xdc\xcc\x75\x3b\xa2\xd7\x6a\x08\x3d\x3a\xc8\xa2\xcc\x75\xf7\xf6\x64\x3d\x47\xa1\xfa\xd5\xf5\xf6\xcd\xc7\x3e\xff\x80\xae\xbb\xbb\xaf\x2f\x53\x17\x66\x7c\xe6\xba\x9d\x12\xd6\xf5\x39\xf1\xc4\x93\x79\x2f\xe5\xaf\x50\x5a\x79\xe7\x55\x9e\xb2\x81\xed\x43\xfb\x5c\x69\x5b\x16\x66\xcd\x63\x61\xa7\x62\x50\x0f\x5c\x37\x3b\xc1\xfb\x07\xbb\xe1\x91\xeb\x32\x3f\x34\x8a\x80\x10\xf5\xda\x65\xfd\x10\xc2\x53\x2c\x6e\x6f\x52\xef\x71\xec\xee\xed\x0e\xc2\xa0\xbf\xf7\xc8\xcb\xba\xa2\x36\xe8\xd3\xae\xbc\xde\x49\x8c\xbb\xfd\xe0\xf6\xb7\xd6\x50\xef\xbc\x1f\xd1\x47\xce\x8e\xbe\x2c\xbe\xc9\xf4\x76\xe5\xc6\x06\xd9\x11\x79\x32\x21\x40\x33\x39\x1b\x27\xb8\x13\x0a\xd7\x2f\x74\x85\xa5\x88\x8e\xa6\x7c\xd2\x5c\xe2\x17\xc4\xab\xb0\x18\x82\x00\x5a\xb8\xac\xe4\xd0\x55\x42\xef\x94\xe1\xb6\x0f\xbe\xc2\x51\xa5\x70\x54\x29\x1c\x55\x1a\x47\x95\xc6\x51\xa5\x50\xc4\x7f\x75\xc9\xbe\x0a\x9b\x8c\xaa\xaa\x03\x55\xd5\x81\xce\xa0\x40\xd9\x55\xe9\xc2\x40\xc3\xd3\x75\xd3\x07\xf2\x77\xf5\x0a\x3d\x49\x55\x0a\x58\xb2\xf0\x3e\x28\x7d\x56\x2b\x41\xf2\xd4\x79\x5d\x27\xe2\xb8\x4a\x8a\x83\xe3\xd4\x60\xf2\x78\x7e\x2a\xe6\xc5\xc1\x20\xf5\x71\x3f\x4a\x7d\x5f\x3e\x37\xf2\x82\x78\x73\x39\x54\xa9\xd9\x7c\x72\xf6\xb7\x2e\xf1\xa5\xeb\x3e\x27\xde\x1c\xcd\x50\x0e\xd1\x0c\xcf\x9b\xe3\x7f\x0f\xaa\x58\x5e\x42\x60\x55\x3d\xc1\x9d\x00\x71\x82\x1a\xe3\x71\x5d\xa7\xdd\x69\x37\x3c\xcd\x5c\x17\x38\xc2\x64\x3c\x9c\xfa\x61\x8c\xa6\x38\x6d\xac\xf2\x02\xb4\xbb\x41\x12\x55\x5d\xb9\xee\xda\xda\xb4\x29\x71\x52\xd7\xe3\x01\x3d\x3d\x72\x5d\x41\x7c\x83\xfd\x28\x19\xf4\x85\x43\xdc\x7e\xd4\x8f\xc6\x83\xbd\x68\x37\xea\x5c\xd6\x75\x52\xd7\x25\x4f\x6f\xd2\x2c\x16\xf1\x07\xb1\x5f\x31\x27\xbd\xf1\x7c\xda\x7a\xba\x8e\xeb\x22\x7c\x12\x2e\xa9\x1e\xfd\x95\x35\x71\x1b\x80\xed\x08\x6c\x6f\x03\xe1\xe0\xd5\x5e\x7e\xf5\x41\xeb\x33\x62\xbd\xef\x59\xd7\xaf\x89\x9c\x22\xac\x41\xd0\xba\x7a\xe5\x63\xbb\xbc\x72\xe0\x33\x1f\x6c\xcb\x9b\x9b\xf5\x32\x41\xd9\x23\x4b\x60\xa4\x10\xe5\x58\x9d\x8b\x31\xb2\x03\x97\xe3\x4c\x9e\xa5\x87\xb2\x45\x06\xb4\x17\xe8\x5d\x36\x11\xee\x26\x10\xa5\x38\xab\x6b\x4b\xfa\x3b\xed\x86\xae\x4b\x4f\xb1\x15\xb5\xa5\x2e\xd8\x7f\x4b\x3c\x86\x52\xb3\x4a\xa0\x1c\xb5\x9e\x17\xd6\xe8\x5a\x27\x2f\xea\xab\xa0\xa5\x82\xbe\x6e\x73\x84\x9e\x64\xc7\xd4\x98\xf4\xdb\x3b\x23\x34\x36\x46\x70\x66\x39\x2a\xe9\x9d\xd6\x85\xbc\xc4\x8b\x77\xcd\x1a\x51\xd4\x12\x54\x5c\xb7\x23\x2f\x82\x4d\x93\x8a\x38\x61\xa4\x6f\xe0\x10\xd7\xfe\x3b\x7d\x7d\xdb\x3f\x1f\xfa\xe6\xee\xe8\xed\x9d\x4b\xc4\x51\x0d\x05\x36\x44\xce\x5d\x9d\xb3\x06\xfe\x6f\xd2\x92\xa7\x5f\xa2\xfe\x91\x78\x6f\x88\xb8\xd0\x06\xca\xbc\x7b\x3a\xef\xe9\x86\xbc\x1b\x44\x6b\xbc\xe3\x8d\xa8\x0f\xbd\xe1\xfb\x11\x8d\x1f\x41\xf1\x22\xbb\x72\x54\x69\xc4\x05\x49\x00\x1d\x8c\xf3\x41\x1e\x35\x8f\x4e\xf5\xf2\xa4\x62\x5c\x4b\xb8\xc6\x39\xfa\x99\x78\xc4\x48\xce\x5c\x26\x15\x77\x53\xf3\xd2\xe2\x4d\x8f\x20\xae\x6b\xe0\xe8\x6f\x41\x6d\xb9\xb4\x4c\x34\x2f\xbe\xc3\x63\xc5\xba\xb1\xb8\xd9\xab\xc2\xd9\xb0\x1f\x6f\x51\x2c\xcb\x55\xc3\x20\x46\x85\x8f\x53\xdf\x4b\xea\x9a\xd6\x35\x10\xb1\x03\x00\x22\x01\xa3\xff\x33\xf1\x2a\x2e\x10\x25\x98\x9a\x93\xa9\x0b\x8f\x71\x60\xcc\x30\xed\xab\x61\xe2\x33\xc0\xe6\x99\x5a\xc0\x62\x88\x72\x29\x4a\xde\x13\x12\x1c\x97\x0d\xe7\xca\x34\xe7\x2a\x39\xe7\x12\x6f\x32\x49\x7e\x55\x42\xd4\xf1\x18\xbe\x26\xc3\x8c\x4b\xfa\x2f\x88\x97\xc1\x81\x47\x7d\xf1\x4e\x13\xd2\xc5\xf8\xe2\x28\xa2\xfc\x30\x86\x30\xa2\x3e\x66\x75\xfd\x8a\xb4\x5f\x6c\x64\x90\x4f\xca\x2d\xf5\x3a\x43\xd4\x52\x33\xb3\xe9\xac\xa8\xaa\xec\x22\x57\x57\xee\x47\x4e\x26\xb5\x2f\xe5\xb8\xe2\x08\x95\x00\xc0\xc5\xc2\xb3\x56\xc7\xdf\xec\xa5\x1d\x4b\x9e\xa6\x95\x1e\x18\x89\x9e\x1a\x14\x59\xcf\xae\x18\x98\x7c\x8f\x0b\x7a\xab\x59\xfa\x1c\x9d\x2a\x16\x0e\x80\x0f\xa2\x4c\x20\xa2\xcb\xe9\x77\x44\xad\xeb\x20\x7f\xb4\x16\xf1\x75\x4d\x0d\x88\x7d\x39\x5f\x64\x89\x4c\x3f\x13\xf3\xf2\x38\xd0\xcf\xd5\x19\x0a\x32\xc7\x1c\x8c\x8d\x48\x91\xb3\x33\x7c\xef\xc4\x82\x8c\x03\x75\xe5\x7a\x80\x52\x0c\xc0\x31\xb5\xe9\xcc\xcb\xf5\xc3\x56\xb0\x5b\x9c\xca\xc7\xa9\x92\xd3\x62\x90\x44\x39\x4a\xa5\x6d\xd0\x6f\x24\xe1\x8c\xcb\xc1\x19\x97\x83\x93\x46\x27\x53\xd9\x9a\x35\x55\xd4\xc3\x2b\x49\x7d\x5b\x8a\x96\x03\x62\x6a\xe3\xe2\x74\x64\xe7\x80\x28\x6d\x9e\x23\x32\x9d\xff\x6a\xfd\xd5\x62\x5a\xc4\x67\xc9\xe5\x56\x73\x87\x18\x5d\xa3\xe1\x52\x4e\x7d\x8d\x06\xa4\x0e\x35\xe9\xa0\xbe\x06\xa9\xb9\xa5\x29\xe1\x8a\xec\x0f\xa2\x55\x3f\x44\x09\xea\x04\xe2\x3f\x61\xef\xae\x6b\x63\xd0\x4b\x5c\xd7\x64\x12\x82\x95\x9d\x8f\x6b\xb3\x7c\x61\xe5\x48\xca\xeb\x9a\x2b\x08\x4a\x0d\x10\x56\xeb\xf9\x74\xc6\x05\x63\xb1\x90\xf0\x40\xdb\xe4\x3a\xc8\x7d\x0c\xba\x20\x12\x3f\x0e\xe0\x7a\x85\xcc\x06\xb7\xe4\xbe\x73\xaa\xea\xe0\x55\x83\x61\x6c\xd1\xd8\x37\x64\xd9\x1b\x48\xf9\x02\x6d\xc9\x5d\x2c\x4e\x05\x5e\x29\xce\x96\xb7\xd4\xb9\x68\x89\xf9\x1b\x4b\x41\x72\x92\x1f\x27\x7a\xf7\xdc\x4b\x71\xc9\xb5\xf8\xd6\xbb\xee\x69\xf3\x86\x3b\xef\x75\x27\x6d\xa5\xae\xb3\x89\x32\xfb\x21\x60\x3b\xbb\x2a\x6f\xbd\x09\x6f\x05\xc4\x42\x2e\x2e\x61\x1e\xa4\xfa\x39\xf0\xb4\xfd\xf2\xbb\x3a\x31\xbf\x14\xcb\xe7\xb7\x4e\x60\xc9\x65\x64\x9c\x35\x90\x95\x51\xd4\x2c\x2c\x06\xca\x02\x33\x14\x99\x63\x0e\x82\xfd\x46\x4c\x73\x0b\xf7\x73\x35\xe6\xe2\x06\xb0\xcf\xc6\xaa\xd1\xd4\x08\x33\x1b\x12\x8f\xa1\xca\x3a\x83\xf0\x74\xb5\x00\xaa\x96\xec\x69\x9d\x13\xe0\xa7\xd6\x26\xb6\xde\x15\x2e\xcd\xb5\x87\x6a\xe7\xba\xf2\xb7\x81\xe4\x7a\xdb\x70\xab\xd5\xea\xb0\x8a\x45\xc3\x0b\x45\x30\x59\xe3\x7e\x6d\xd6\x71\x43\x3c\x3f\xd8\x0a\x84\x50\x1f\x5a\x27\xcc\x45\x05\x14\x7d\x23\xdd\x20\x3b\x21\xac\x6b\xfd\x1d\x48\x7b\x76\x8a\x2a\x33\x12\x8a\x62\xd1\x1c\x67\x5b\x99\xe0\x2a\x96\x6c\x73\x12\xb4\xa5\x1f\x26\xcb\x8b\x63\x6d\xab\x97\xa8\x61\x71\xce\xd7\x44\x37\xef\x1f\x54\x5c\x1a\x1c\xbb\xae\x37\x91\x8b\xb2\xf0\x67\x68\x2c\x0b\x66\xe5\xa6\x90\x4f\xe9\xf6\x5d\x29\x60\x00\x9a\x0d\xf0\x49\x5d\xf7\xd5\x75\x47\x72\xb3\x8e\x9d\x06\xf2\x46\xb7\x4e\x08\xd1\xc4\x75\xc9\x92\x75\x62\x38\x8b\xa1\x1a\x11\xf0\xa8\x24\x93\x0f\xc0\x9f\x19\xe4\x8e\x5d\x77\xe2\xba\x9d\x35\x65\xc4\x96\xd2\x4a\x2c\xee\x04\x70\xf5\x76\x77\x71\x60\x38\x93\x0e\xf7\xb6\x19\x4f\x0d\xac\xb9\xdc\xa4\xbd\x1f\xd1\x70\x49\xdb\x09\x10\x00\xe1\x00\xc8\x92\xcb\xe6\x2c\xba\xa8\x4c\x9d\x98\x90\x9c\x48\x1b\xcb\xe0\x58\x7c\x7a\x96\xab\xcf\x3a\xeb\xd2\x72\x76\x2b\xc6\x3a\x44\x69\xe2\x5a\xa4\xad\x63\xe5\x56\xb5\x78\x86\xfe\x42\xbe\xa7\x2a\x77\xca\x4c\x7b\xd0\x30\xf7\x04\x8f\x1b\xe6\x9e\x48\xe6\x3e\x17\x22\x8a\xe2\xb3\xb3\xba\xf6\xe6\x16\x9f\x4d\x31\x1d\xe6\x78\x3c\x2c\xe3\x25\xf6\x9f\xae\x61\xff\x39\xd7\xb6\x90\x61\xe8\x86\x9b\x0b\x32\xf0\xa4\x35\x6a\x03\xf1\x68\x7e\xae\x58\xb9\x84\xf1\x94\xab\xf6\x72\x0b\xf1\x3e\x6e\x3f\xf7\x39\x33\x8a\xc4\x8f\x03\x20\x9a\x6b\x76\x8f\x2a\xd7\x6d\xf5\xc8\x80\x97\x72\xd8\xaa\x87\x57\x1f\xc9\xea\x23\x07\xa0\x99\x8f\x4d\x03\x50\x2f\x28\x13\x3d\xbd\x67\x75\x0d\x6e\x17\x40\xc8\xf6\x2a\x8e\x8b\x75\x13\xd3\x12\x06\xae\x22\x77\x5f\xd7\x11\x79\xf7\x78\xa2\x72\x24\x55\xe6\xe0\xe0\x12\xf9\x49\x9f\x07\x2e\x64\xce\x8d\x80\x79\x52\x1e\x67\x1c\xbd\x62\x91\x07\x7c\xa8\x53\x69\x64\x03\xc8\x11\xdb\xbe\xb6\x61\x55\xa6\x08\xaf\x1d\xbe\xd6\x17\x78\x3e\xcc\x96\x31\xbe\x6e\xc1\x2f\xc4\x42\xff\x83\xbe\x1f\x91\xaf\xdb\x61\x33\xa2\x36\x1a\x55\xdb\x02\x39\x66\x2d\xf6\xbd\x36\x18\xe2\x32\x71\xc0\x85\xbe\x08\xac\xa4\x71\x81\x90\x97\x56\xad\x25\x4d\x6b\xa9\x8f\xf3\x15\x74\x54\x1a\x1d\xe0\x16\xf8\xa9\x0f\xda\x08\xd9\x80\x0e\xe0\x00\xbf\xa9\x47\x4f\xdc\x35\x4c\x53\x33\x95\x56\x47\x07\xde\xd2\x6e\x87\xeb\x76\x72\xc1\x07\x07\x52\x00\x13\xb7\x0b\x29\x7a\x88\x94\x4c\xf6\x77\x10\x08\x47\x71\x6e\xc9\x71\x92\x16\xe8\x0a\x2d\x14\x98\x0e\xb3\x25\xb4\x16\x9b\xe5\x38\x2e\xa8\x36\x72\x9c\xc1\xaf\x25\xbf\x15\x5a\x7e\x53\xd2\x9b\x48\xe7\x28\x11\x04\x97\x70\xaa\xe1\x04\xb7\x11\x99\x10\x25\xcb\x72\x99\x59\x25\xc1\x10\xf8\x89\x0f\xe2\xbf\x84\xb7\x5b\x1b\x6f\xb2\x3b\xe2\xad\x8f\x0a\xb6\x52\xde\x52\x79\x55\xe6\x58\x61\xd5\x76\xa8\x6e\x6d\x4a\x35\x29\x2d\x16\xdc\xf2\x9e\x13\x8e\x73\xd2\x15\x5e\x55\xcf\x0a\x87\xc3\xe4\x00\xbf\x82\x0b\x8b\xdf\xb9\xee\x1f\xd2\x7e\x26\x50\xcf\x69\x79\x0e\x17\x1b\xb9\xa3\xe4\xb6\x54\xdd\xae\xe4\xc9\xeb\x8e\x44\xca\x30\x88\x07\xb6\x13\x61\xa8\x84\x34\xd8\x18\x02\x3a\x3b\x97\x08\x7c\xdd\x0f\x01\xe7\xe5\x4b\x45\x41\x07\xf8\x69\xb4\x6e\x43\x0a\x63\x9c\x1a\x45\x2a\x3c\x84\x03\xd0\xe1\x79\x75\x33\x87\x30\x92\x82\x95\x0f\x4e\x81\xc6\x57\x6a\x63\xa1\x11\x91\x8c\x64\xf4\xeb\xca\x7d\x83\xc3\x58\x9e\x8d\x17\x3e\x95\x3a\x9b\xb8\xd4\xb8\xa5\xa7\x58\xd7\xf9\xac\x75\x10\x80\xfa\x96\x17\xaf\xb0\xde\x17\xe6\x92\xae\x30\x33\x65\x26\xaa\x80\xae\xab\xbc\x9a\x0a\xeb\x7a\x3d\x19\xc3\x20\x6a\x5f\x14\xcb\xe4\x45\xb1\x52\xf3\x63\xcd\x36\x48\x72\x5c\xf0\xb9\x44\x3c\x36\x2c\x62\x01\x6a\xe3\x19\x5a\x2e\x6d\x16\x2a\xbd\xb1\x5c\x5b\xba\x1c\x16\xb1\xac\x60\x21\xbd\xa9\x21\x92\x76\xa6\x62\xc5\xb2\xc4\x6c\x89\x4c\x3e\xe7\x33\x2c\x86\x34\x8e\xe1\x16\x5b\xd9\xf3\x31\x4f\x15\x64\x96\x06\xf8\xcf\xd6\x06\x8a\x63\xd9\x0f\x57\x1e\xe4\x7b\x6e\x2e\xbb\xe2\x44\x01\x7c\xe2\x03\x27\xab\x9c\x92\x4c\x8b\x4f\xd2\xbb\xe4\xf7\xaa\xcb\xd3\x9c\xbd\x9e\xf3\xb6\x22\x3a\x1f\xe3\xf9\x68\xc5\x48\x32\x46\xce\xe7\xab\x2c\xbd\x92\x8e\x29\x9f\x9d\x2a\x99\x10\xe7\xe2\xc6\x51\x4a\x40\x0f\xc0\x85\x70\x09\xf9\x8e\xe0\x19\xfa\x85\xe0\x2b\xf4\x8e\xe0\x29\xfa\x93\xe0\x6b\xf4\x3d\xc1\x67\xe8\x27\x82\x7f\x43\xff\x22\xf8\x23\xe9\xe5\x45\x32\x46\x84\xe9\xcf\x27\x79\x8e\x18\xc3\xb7\x9c\xca\xd6\xba\x68\xf0\x8e\xfc\x4e\x3c\xe5\xf4\x03\xb7\xa8\xd9\x85\xfc\x55\xf9\x89\xc8\x2d\x13\xd2\xf8\xa9\x58\xdc\x30\x6b\x9e\xa3\x56\xdc\xf0\x16\x80\x28\x5b\x20\x2e\x23\xc9\xa5\x8e\xa2\x40\x9c\x5f\xe2\x72\xcd\x80\xca\x75\x4c\x3c\xa7\x01\xc0\x62\x21\x67\x34\x65\xb8\x40\x19\xc3\xff\x24\x1e\xe0\x7d\x7f\x51\x24\x63\x80\x00\x87\x1f\x40\x54\xb6\x13\x9e\xe4\xb9\x4a\xe3\x5f\x10\x15\x4d\xf2\xb7\xf3\xe9\x0c\x20\xc0\xeb\x04\x10\x25\x0c\xdf\x72\xc5\x32\xfa\x8e\xa0\xd7\x62\xd3\x30\xfa\x85\xa0\xe7\x4f\xce\x5e\xbc\x7e\xf2\xfc\xd9\x87\xd7\x4f\xff\xf9\xec\xe5\x93\xe8\x1d\x41\xdf\xbf\x7e\x75\xae\x83\x7f\x12\xf4\xf4\xd5\xcf\x26\xf5\x7b\x82\xbe\x7d\xf6\xfc\xc9\xdb\x17\x6f\x74\xcc\x4f\x44\xba\xbb\xfc\x4b\xfe\x3e\xc9\xf3\x88\x30\x24\x86\x97\x31\xf4\xdb\x93\x97\x2f\x9e\x5d\x73\x16\x97\x15\x34\xe2\xfa\x95\x82\x3a\xca\x9a\x6f\x5e\xa6\x94\x41\x0e\x71\x54\xb0\xc5\x16\xe9\x59\xcd\xe2\xef\x39\xb3\x6b\x37\x8c\x7f\xe2\x71\x4b\xd0\xe3\x77\x3c\xd2\x82\x1f\xff\xc9\x23\x64\x6f\xf1\x2f\xfc\x5b\x6c\xf9\x7e\xc7\xbf\x5a\xb0\x61\x2a\x96\x08\x49\x60\x38\xd1\xeb\x05\x66\xfc\x8b\x77\x0c\xff\x8b\x20\x43\x42\x98\xf0\x68\x0d\x30\x2e\x74\x88\xf7\x06\x67\x76\x88\x67\x2e\x19\x5a\x7f\xb1\x32\x41\xe0\xc3\x07\x52\xbd\x2c\xc6\xf3\x9c\x00\x74\x2b\x6f\x4e\xee\x04\x0b\xb8\x80\x10\xd9\x16\xc1\x15\xae\x45\xae\x67\x45\xc9\xaa\x35\xfc\x6c\x2a\x6a\x1b\x10\xaf\x24\x7f\xcc\xb3\x92\x78\xa0\xd7\xdb\xe9\xf5\x76\xf2\xec\x62\x87\xaf\x01\xd3\x4c\xbe\x91\x09\xa3\x35\x1a\x85\x04\xd0\x75\xe5\x6f\x2f\x99\x8e\x07\xf2\xd3\x1b\xae\xaf\x26\x46\x04\x46\xc4\xe3\xa2\xee\x4b\x11\x03\x17\x9e\xd7\x82\x7c\x5e\x09\x9f\xa4\x2c\x65\x60\x8b\xa8\x11\x78\x59\x8c\x89\x07\xf8\xbc\x07\x96\x25\x5d\x4e\x41\xd2\x7a\x8a\x75\x34\xba\xf0\x3c\xe0\x0f\x01\x2b\xe7\x04\x20\x30\x49\xf2\x8a\x68\xdf\x1e\xe9\xba\x23\x1d\x7f\x68\x01\xe2\xde\xef\x45\x46\x3d\x00\x6b\x8f\xcb\x80\x10\x7e\x05\x10\xc8\x80\xb6\x69\xde\xb2\xe2\x23\xa1\xcd\xa4\xb7\xf6\x3f\x59\x6f\x46\xc8\x47\x0f\x0a\xa9\x47\x9e\x47\x1c\x8b\x65\x43\x07\xc4\x53\x6c\xff\x00\x72\xa7\x39\xc0\xbc\x40\x51\xd5\xf5\xce\xa8\x52\x9b\x80\xac\x57\xa9\xa7\x87\xd4\x73\x87\x3c\x83\x38\x56\xa4\x6d\x83\x4c\xc8\x03\x6f\x8a\x67\x74\xec\x41\x04\xd2\x62\x2a\x9e\x5f\x10\x1b\x5f\xbd\xa9\xb8\xe6\x70\xe7\xbd\xb7\xed\x0d\xdf\x6f\xc7\xf5\x68\xd4\x83\x8f\xb6\x07\x35\xf0\x86\xef\x81\x0a\x82\x01\xdc\x31\x4f\xee\xca\xd6\x80\x04\x32\xcf\x18\x29\x13\x2e\x2a\xf6\xac\xfb\x0b\x3c\x78\x4a\xf9\x42\xf2\xb4\xc8\x37\xc0\xb0\xbe\x92\xe6\x5b\x68\xde\xac\x57\x15\xb9\xa7\xcc\x3e\xaa\x3e\x1c\x20\xda\x9b\x25\x99\xb8\x91\x4a\x7e\xc9\x63\x46\x9d\x10\x99\xce\x74\xbb\xdd\x06\xde\x31\x99\xb4\xbb\x3a\xea\xf1\x7f\xef\xca\x50\x3d\xea\x8e\x2a\xbf\xc9\x31\x25\x2c\x01\x8b\xf6\x70\x8d\x6e\xeb\xd1\xa2\x1e\x0d\xeb\x51\x6c\x0d\xce\x2d\x47\xd4\x80\xaf\xe5\x39\x9f\x6e\x49\x56\x56\xbe\x1f\x81\xc5\x6a\x74\xb7\x1b\x81\x61\x2b\xfa\x45\x56\x31\xdf\x8f\xec\x60\xb7\x8b\x64\xe3\x72\xa0\x9a\x84\xd3\xc0\x75\x3b\xa5\xeb\x02\xc4\xab\x68\x06\x99\x92\x6b\xc6\xc7\x77\xa5\x90\x68\x73\x7d\xa9\x87\x0d\xed\x9a\x9a\x4d\x0e\xf9\x80\xa8\x19\x9b\x51\xf5\xc8\x1b\xd5\xf5\xe8\x14\x8e\xaa\x47\x66\x6c\x1c\x0b\xb9\x81\x55\xcf\x52\x39\xb7\x1e\x3d\x82\xc3\xa4\xfb\x67\xd0\x3d\x1a\xf5\x3e\x74\x63\x7f\x74\xb1\x63\x5e\xb8\x03\x9f\x92\x32\xe3\x32\x6b\xb7\x2f\x0a\x07\xd2\x29\xd4\xf4\x90\x13\xa2\x55\x5d\x57\xf8\xd1\x8d\x7a\x23\x14\xfb\xa3\x6a\xf0\x55\x83\x28\x2a\x1e\xb7\x5e\x3f\x44\x77\x55\xe1\x0d\xb0\x87\xea\x05\x84\x6b\xab\xd2\x25\x9b\x07\xaa\x3f\x92\x9b\xcf\x45\x39\x06\x5a\xac\x94\xa3\xb6\xd4\x86\x37\x88\xe4\x1b\x67\xb7\x0b\xf7\x51\xa7\x3e\xdd\x06\x5f\xff\xc7\x7f\x8b\x87\xef\x47\xd5\x36\x88\x62\xfd\x9c\xd9\xed\xe2\x1f\x56\x2a\x1c\xbe\xff\x47\xfc\x88\xc3\x33\xaa\x1e\x45\xde\x57\xf5\xa8\xe2\x40\x0d\x3c\x8d\x43\x8e\x4d\x85\xd8\xa5\xc9\x89\x40\xc2\x8a\x29\x80\xd1\x2a\x30\x91\xc0\xd8\xc0\x6b\xa1\x5f\x63\x0b\x46\xde\x12\x59\x34\x5c\x0a\x8c\x46\x9c\xa6\x1a\x42\x11\x1e\x59\x0b\x54\xf1\xac\xaf\x59\xeb\x65\x53\x2d\xcb\xdd\xf2\xba\xa2\x4e\x88\x4c\x9d\x3c\x20\x61\x8e\x02\x64\x61\xc5\x84\x38\xed\x47\x01\x52\x84\xc4\xb3\x2b\x00\xa2\x4e\xb8\x58\x2c\x16\xd2\xc0\x2e\x39\xfd\xd9\xcb\x67\x1e\x60\xe4\x9a\xed\x5c\x77\x25\xc3\x97\x7c\x9f\x2f\x71\x5b\xff\x37\x00\x00\xff\xff\xa8\xf9\x23\x3a\x77\xa0\x00\x00") + +func web_uiAssetsCodemirrorModeYamlYaml3f129a000349e3075be0f65719884b61JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsCodemirrorModeYamlYaml3f129a000349e3075be0f65719884b61Js, + "web_ui/assets/codemirror/mode/yaml/yaml-3f129a000349e3075be0f65719884b61.js", + ) +} + +func web_uiAssetsCodemirrorModeYamlYaml3f129a000349e3075be0f65719884b61Js() (*asset, error) { + bytes, err := web_uiAssetsCodemirrorModeYamlYaml3f129a000349e3075be0f65719884b61JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/codemirror/mode/yaml/yaml-3f129a000349e3075be0f65719884b61.js", size: 41079, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulAclsRoutes75a2ac7d38caf09cfee2a4e2bc49dcf7Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xca\xb1\x8a\x02\x31\x10\x80\xe1\xfe\x9e\x62\x2f\x55\x02\x47\x1e\x20\x90\xb3\xb7\xd0\x62\x4b\x11\x89\xc9\xac\x0c\xee\x66\x42\x66\x02\x2e\x61\xdf\x5d\x16\xf1\xaf\xbe\xe2\xd7\x1a\xfe\xc4\x6b\xd5\x72\x82\x09\x33\x24\xf5\xeb\x65\x2d\x40\xd3\x90\x28\xb6\x05\xb2\x1c\xbe\xb0\xb1\xd5\x0a\x59\xc6\x58\xb1\x88\x4d\x41\x02\x83\xb8\x85\x52\x9b\xc1\xc2\xab\x50\x15\x36\xc6\xff\x77\xb1\x95\x9a\x00\xfb\xe3\x78\x3e\x59\x96\x8a\xf9\x81\xd3\xaa\xc1\x6c\x46\xf7\x14\x5d\x0f\x71\x66\xd7\x85\x9e\x90\xd9\xf5\x1b\x15\x41\xda\x15\xee\x38\xa3\x20\xb0\xbb\xa8\x0a\x21\x0d\x9f\x45\x5d\xb7\x3d\xf3\xf3\x0e\x00\x00\xff\xff\x79\xde\x72\x20\xb0\x00\x00\x00") + +func web_uiAssetsConsulAclsRoutes75a2ac7d38caf09cfee2a4e2bc49dcf7JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulAclsRoutes75a2ac7d38caf09cfee2a4e2bc49dcf7Js, + "web_ui/assets/consul-acls/routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js", + ) +} + +func web_uiAssetsConsulAclsRoutes75a2ac7d38caf09cfee2a4e2bc49dcf7Js() (*asset, error) { + bytes, err := web_uiAssetsConsulAclsRoutes75a2ac7d38caf09cfee2a4e2bc49dcf7JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-acls/routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js", size: 176, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulAclsServices8b6b2b2bea3add7709b8075a5ed5652bJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xc6\x31\x0a\xc2\x30\x14\x06\xe0\xdd\x53\x68\xa7\x04\x24\x07\x10\xa2\xbb\x83\x0e\x3d\x41\x49\xfe\x4a\xc0\xbe\x84\xf7\xfe\x88\xa5\xf4\xee\x4e\x6e\x9f\x73\x38\x33\xba\xa1\x4b\xc6\x5c\x04\x79\x38\x45\xae\x0d\x75\x3e\xe6\x9a\xfa\x02\xe1\xed\x8f\x90\xba\x2a\x84\x63\xd2\xd2\x18\xf2\xc4\xc9\xc0\xcb\x52\x73\x7f\x23\xe0\xdb\xaa\xd2\xbc\x8f\xd7\x8d\xc1\xa0\x9f\x92\x60\xf1\x3e\x3e\x1f\xc1\xa8\x45\x5e\x65\x5e\x1d\xfc\xee\xdd\xb6\xfb\xc3\x2f\x00\x00\xff\xff\x04\xfb\x62\x34\x79\x00\x00\x00") + +func web_uiAssetsConsulAclsServices8b6b2b2bea3add7709b8075a5ed5652bJsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulAclsServices8b6b2b2bea3add7709b8075a5ed5652bJs, + "web_ui/assets/consul-acls/services-8b6b2b2bea3add7709b8075a5ed5652b.js", + ) +} + +func web_uiAssetsConsulAclsServices8b6b2b2bea3add7709b8075a5ed5652bJs() (*asset, error) { + bytes, err := web_uiAssetsConsulAclsServices8b6b2b2bea3add7709b8075a5ed5652bJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-acls/services-8b6b2b2bea3add7709b8075a5ed5652b.js", size: 121, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulNspacesRoutesF939ed42e9b83f9d1bbc5256be68e77cJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xc1\x8a\xdb\x30\x10\x86\xef\x7d\x8a\x64\x4e\x36\x08\xa7\x67\x81\x5b\x28\x3d\xf5\x90\x86\xcd\x31\x84\x45\x2b\xfd\xde\x08\x6c\x49\x3b\x1a\x43\x8c\xd1\xbb\x2f\x5e\x67\x21\x81\xe8\x22\xf1\x69\xbe\x61\xe6\xaf\x2a\x28\x69\x2b\x1a\x83\x43\xe7\x03\x1c\x6d\x5b\x99\x12\x62\xb7\x71\xd1\x8e\x03\x82\xfc\xfe\x7e\x34\x76\x64\x46\x90\xa3\x65\x9f\xa4\x71\x46\x4c\x86\xe8\x21\xba\xb1\x47\x83\x6b\x8a\x2c\xb9\xae\xdb\x5f\xb3\x34\x1c\x47\x41\x6e\xff\x1d\xff\xef\x9b\x2c\xec\xc3\xbb\xef\xa6\x0a\x75\xa9\xab\xd9\x59\x3d\x87\x9c\x8c\x45\xd6\xf3\x6b\x4c\xe2\x63\xc8\x7a\x4e\x46\x2e\x9a\x76\xc1\x0c\x58\x3f\x49\x99\x37\xdf\x7b\xf1\xc8\xfa\x44\x0c\xe3\x36\x37\x8d\xce\x45\xf9\xe0\x70\x7d\xe2\x93\xfa\x18\xc1\xd3\xc1\xb0\x19\xb2\x9e\x73\x64\xf9\x33\x69\x5a\x6e\x52\x19\x86\xed\x25\x71\x4c\x60\x99\xf4\x6c\xb2\xa6\x47\x46\x0a\x43\x92\x49\x9f\x4e\xb4\x37\x03\x48\xd1\x5f\xe4\xaf\x85\x7d\x0c\xa4\xe8\x25\xf6\x0b\x3c\xc4\xde\xdb\x89\xce\xe7\x72\xeb\xb9\xf6\xea\x7c\x2f\x60\x52\x8c\xd4\x1b\x0b\xbd\xfd\x59\x4a\x29\x0a\xce\xcb\x93\x51\xf5\xb2\x2b\x95\xa2\x2c\xc3\x08\xee\x2b\x04\x43\xea\x17\x46\x4d\xb3\x5b\x74\x52\x37\x69\xad\x7d\xcc\x66\x65\x77\xe9\x2c\xa7\xfe\xf1\x19\x00\x00\xff\xff\x08\x5a\x9e\xe0\xdd\x01\x00\x00") + +func web_uiAssetsConsulNspacesRoutesF939ed42e9b83f9d1bbc5256be68e77cJsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulNspacesRoutesF939ed42e9b83f9d1bbc5256be68e77cJs, + "web_ui/assets/consul-nspaces/routes-f939ed42e9b83f9d1bbc5256be68e77c.js", + ) +} + +func web_uiAssetsConsulNspacesRoutesF939ed42e9b83f9d1bbc5256be68e77cJs() (*asset, error) { + bytes, err := web_uiAssetsConsulNspacesRoutesF939ed42e9b83f9d1bbc5256be68e77cJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-nspaces/routes-f939ed42e9b83f9d1bbc5256be68e77c.js", size: 477, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulNspacesServices8b6b2b2bea3add7709b8075a5ed5652bJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xc6\x31\x0a\xc2\x30\x14\x06\xe0\xdd\x53\x68\xa7\x04\x24\x07\x10\xa2\xbb\x83\x0e\x3d\x41\x49\xfe\x4a\xc0\xbe\x84\xf7\xfe\x88\xa5\xf4\xee\x4e\x6e\x9f\x73\x38\x33\xba\xa1\x4b\xc6\x5c\x04\x79\x38\x45\xae\x0d\x75\x3e\xe6\x9a\xfa\x02\xe1\xed\x8f\x90\xba\x2a\x84\x63\xd2\xd2\x18\xf2\xc4\xc9\xc0\xcb\x52\x73\x7f\x23\xe0\xdb\xaa\xd2\xbc\x8f\xd7\x8d\xc1\xa0\x9f\x92\x60\xf1\x3e\x3e\x1f\xc1\xa8\x45\x5e\x65\x5e\x1d\xfc\xee\xdd\xb6\xfb\xc3\x2f\x00\x00\xff\xff\x04\xfb\x62\x34\x79\x00\x00\x00") + +func web_uiAssetsConsulNspacesServices8b6b2b2bea3add7709b8075a5ed5652bJsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulNspacesServices8b6b2b2bea3add7709b8075a5ed5652bJs, + "web_ui/assets/consul-nspaces/services-8b6b2b2bea3add7709b8075a5ed5652b.js", + ) +} + +func web_uiAssetsConsulNspacesServices8b6b2b2bea3add7709b8075a5ed5652bJs() (*asset, error) { + bytes, err := web_uiAssetsConsulNspacesServices8b6b2b2bea3add7709b8075a5ed5652bJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-nspaces/services-8b6b2b2bea3add7709b8075a5ed5652b.js", size: 121, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulPartitionsRoutesCba490481425519435d142c743bbc3d3Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x50\xbd\x6a\xf3\x30\x14\xdd\xbf\xa7\x48\xee\x64\x83\x70\xbe\x59\xe0\x16\x4a\xa7\x0e\x69\x21\x63\x08\x45\x95\x8e\x1b\x81\x2d\xa9\x57\xd7\x10\x63\xf4\xee\xc5\x4d\x4a\x13\x88\x16\x1d\xce\x1f\xd2\xa9\x2a\x51\x68\x2b\x1a\x83\x43\xe7\x03\x1c\xad\x5b\x99\x12\x62\xb7\x72\xd1\x8e\x03\x82\x3c\xfe\x82\xc6\x8e\xcc\x08\xb2\xb3\xec\x93\x34\xce\x88\xc9\x10\x3d\x44\x37\xf6\x68\x70\x4a\x91\x25\xd7\x75\xfb\x30\xa3\xe1\x38\x0a\x72\xfb\xb2\x7b\xdd\x36\x59\xd8\x87\x4f\xdf\x4d\x95\xd4\xa5\xae\x66\x67\xf5\x9c\x0c\x8b\x17\x1f\x43\xd6\xf3\x7b\x4c\x17\x94\x8c\x1c\x35\x6d\xfe\x44\x52\xe6\xc3\xf7\x5e\x3c\xb2\xde\x13\xc3\xb8\xd5\x95\x78\x28\xca\x07\x87\xd3\x9d\x0a\x52\x5f\x23\x78\x7a\x33\x6c\x86\xac\xe7\x1c\x59\x9e\x26\x4d\xcb\x4d\x2a\xc3\xb0\x3d\x26\x8e\x09\x2c\x93\x9e\x4d\xd6\x74\xcb\x91\xc2\x90\x64\xd2\xfb\x3d\x6d\xcd\x00\x52\xf4\x8c\xfc\xf3\x6d\x1f\x03\x1d\x0e\xe5\xd2\x71\xce\x76\xbe\x17\x30\x29\x46\xea\x8d\x85\x5e\xff\x2f\xa5\x14\x05\xe7\xe5\xce\xd3\x74\x58\x1a\x4b\x51\x96\x61\x04\xd7\x0e\xc1\x90\xfa\x85\xa3\xa6\xd9\x2c\x71\x52\x97\xd0\xd9\x7b\x3b\xc7\x99\xbb\x1d\x64\x39\xf5\xbf\xef\x00\x00\x00\xff\xff\x83\x8b\x62\x16\xd6\x01\x00\x00") + +func web_uiAssetsConsulPartitionsRoutesCba490481425519435d142c743bbc3d3JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulPartitionsRoutesCba490481425519435d142c743bbc3d3Js, + "web_ui/assets/consul-partitions/routes-cba490481425519435d142c743bbc3d3.js", + ) +} + +func web_uiAssetsConsulPartitionsRoutesCba490481425519435d142c743bbc3d3Js() (*asset, error) { + bytes, err := web_uiAssetsConsulPartitionsRoutesCba490481425519435d142c743bbc3d3JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-partitions/routes-cba490481425519435d142c743bbc3d3.js", size: 470, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulPartitionsServices85621f245f195fe1ce177064bfb04504Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xcb\x31\x4e\xc6\x30\x0c\x40\xe1\x9d\x53\x40\xa6\x44\x82\x74\xaf\x14\xd8\x19\x60\xf8\x4f\x10\x39\x2e\xb2\x94\xda\x91\xed\x20\xaa\xaa\x77\x67\x40\xb0\xb1\xbd\xe1\x7d\x31\xe2\xa3\x97\x18\x26\x37\xdc\x88\xb1\x85\x87\xe2\xc7\x40\xd9\xee\x9b\xc0\xdc\x91\xfd\xe5\x37\x32\x4c\x55\x64\xbf\x81\xd2\xf0\xdc\xaa\x57\x43\x5f\x77\x69\xb3\x63\xc6\xaf\x21\xea\x96\x52\x79\x3e\x3d\x1b\xea\x27\x01\x5a\x79\xbd\xbd\xbf\x65\x73\x25\xfe\xa0\xed\x88\x98\xae\x14\xcf\x00\xb2\x0f\x61\x64\x5f\x41\xd8\x66\x5f\x46\x55\x27\x27\xe1\xc5\xb0\x23\xb8\x68\x58\x4f\xe8\xd5\x6c\x0d\x3f\xcb\xd3\xa4\xe5\x8f\xd9\xf2\xbf\xbb\xae\x74\xf7\x1d\x00\x00\xff\xff\xda\xe8\x51\xaf\xd7\x00\x00\x00") + +func web_uiAssetsConsulPartitionsServices85621f245f195fe1ce177064bfb04504JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulPartitionsServices85621f245f195fe1ce177064bfb04504Js, + "web_ui/assets/consul-partitions/services-85621f245f195fe1ce177064bfb04504.js", + ) +} + +func web_uiAssetsConsulPartitionsServices85621f245f195fe1ce177064bfb04504Js() (*asset, error) { + bytes, err := web_uiAssetsConsulPartitionsServices85621f245f195fe1ce177064bfb04504JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-partitions/services-85621f245f195fe1ce177064bfb04504.js", size: 215, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulUiRoutes7726cc49168b83dcd93c923c97ebe93dJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x57\x4b\x8f\xe3\x36\x0c\xbe\xf7\x57\xcc\xf2\x34\x59\xd8\x49\xcf\x02\xa6\x45\xb7\x7b\x69\xd1\xce\x2e\x30\xbd\x0d\x82\x85\x56\x62\x12\x21\x8e\xe4\x4a\xf4\x74\x82\xc0\xff\xbd\xa0\x64\xe7\xb1\xa3\x38\xc9\x3c\xfa\xb8\xc4\x8e\x3e\x92\x22\x29\xf2\x13\x7d\x7d\x4d\x05\xde\x5c\x43\x63\x35\xce\x8c\x45\x0d\xef\x6e\x68\x5d\xa3\x9b\x5d\x69\xa7\x9a\x15\x5a\xfa\xb1\x7f\x19\xab\xc6\x7b\xb4\x74\xa7\xbc\xa9\x69\xac\x25\xc9\x80\x24\x56\x4e\x37\x15\x8e\xf1\xb1\x76\x9e\xc2\x68\x74\xf3\xc3\x06\xc7\xde\x35\x84\xe1\xe6\xd7\xbb\x4f\xb7\xe3\x40\xde\xd8\xb9\x99\xad\xaf\x69\xd4\x8e\xae\x37\x5a\x89\xcd\x17\x57\x93\x71\x36\x88\x4d\x2d\x69\x21\x60\x22\xb4\x82\xb6\x30\x56\xe3\x63\x06\x85\xc2\xa3\x36\x1e\x15\x09\x18\x8f\x27\x01\xfd\x83\x51\x18\xa0\x6d\x8b\xfe\x3d\xa3\xb5\x13\x1b\x30\xfc\x67\x83\x7e\xfd\x59\x7a\xb9\x0a\x62\x13\x9c\xa7\x0f\x6b\x01\xfc\x84\x22\x90\xa4\x26\x08\x48\x4f\x28\x82\x6b\xbc\x42\x46\xf9\x09\xc5\xd2\x58\x2d\x80\x7f\xa1\x08\x28\xbd\x5a\xd4\xde\xd5\xe8\x69\x2d\x36\x92\xf5\x0e\xd6\xa0\xc0\x55\x4d\x6b\x71\x7f\x0f\xb7\x72\x85\x50\xc0\x1f\x72\x1e\x60\x3a\x6d\x3b\xe5\xa4\x34\x33\x15\xa1\xe7\x80\xeb\x4a\x2a\x14\xef\xbe\x6f\x5b\x0e\x73\xe1\xfe\xca\xa5\xcd\xb2\x29\x8e\x2f\x90\xb4\xf9\x34\x6c\xb1\x17\x05\xfb\x9c\x00\x6f\x9d\xde\xc6\x59\xc0\x2f\x1f\xa1\x80\x9f\xb4\xf6\x18\xf8\xef\xe7\xb8\x2d\xdc\xa5\x43\x1a\xff\x8e\x24\x3b\x95\xf4\x7e\x66\x62\x8c\x25\xb4\x5d\xc0\x99\xd0\x7b\xf0\x78\x0d\x0c\x66\x45\x2a\x85\x21\x08\x48\xcf\x0b\xb3\x70\x17\x53\xd7\xe5\xe2\x23\x06\x32\x56\xf2\xd6\x71\xe5\xcc\xf0\x50\x1b\xca\x9d\xfb\x36\xb2\x2f\x46\x73\x1b\x28\x8f\x92\x70\x5f\x92\x70\x55\x57\xbc\xc6\x1d\xc3\x66\xa0\xe8\x94\x93\x2c\xb0\x79\x72\xb5\xab\xdc\x7c\x9d\xd9\xa2\x87\xce\x6d\xb2\xa1\x34\xf6\x25\x28\xa0\x7f\x7b\xfb\x8e\x69\xea\x40\x1e\xa3\x33\x4f\x9c\xde\x62\xff\x39\xaf\x99\x38\x8d\x9d\x67\x7c\xee\x10\x3e\x0e\x92\xf3\x5c\x54\xbc\x0c\xa9\x27\x3a\xc7\x8f\x10\xc6\x8e\x12\x26\xc2\x3a\x8d\x13\x61\xf4\x01\xc5\x4e\x16\x28\x2b\x5a\xa8\x05\xaa\x25\xb7\xce\xfe\xdf\x8c\xd1\x04\x97\x9d\xf8\x25\x2c\x13\x55\x04\xc4\xc7\x8b\x38\xe6\x67\xb6\x10\x19\xe6\xd6\x11\x57\x23\x7c\x6a\xa8\x6e\xf6\x18\xe6\x9f\xad\x9d\x13\x9b\x5c\x16\xea\xb7\xdc\x51\xc0\x6f\x4e\xc9\xea\x83\xb1\x7a\xc7\xa7\xdb\xa5\x48\xac\xd3\x69\xa2\x8f\xc7\xda\x05\xd4\xec\x7a\x2e\x96\x0e\x2e\x23\xce\x95\x25\x93\xb9\x6c\xa7\x6f\x31\x16\x5c\x21\x49\x9e\x00\x32\x72\x3d\x14\x4b\xd1\x3a\x9a\xb9\xc6\xea\xa3\xa5\xb8\x2b\xc0\x24\xae\xb3\x7b\xc7\xf5\x67\x72\xf8\x93\x9b\xed\xa2\x2a\x4b\xe5\xb5\x4b\xf3\x25\x77\xd3\x89\x4b\xfb\xcd\xba\x6a\x7f\x30\x79\x79\x87\x75\xfd\xf3\xea\x4d\x76\xfa\x52\x29\xff\xbd\xd1\xe5\xfc\x99\xe5\x5c\x62\xa7\xdc\x3d\xee\xb9\x37\x4a\xf2\xa6\x2e\xc9\x70\x51\xb0\xad\x10\x8e\x8c\x33\x95\x53\xcb\xb2\xc7\x2f\xe8\xc2\x57\x98\x92\x86\x27\xe5\xff\xc7\x98\x54\xc8\xaf\xa6\x32\x64\x30\x88\x7b\xf0\x28\xf5\xd5\x5e\xe4\xd3\xe7\x0d\x51\x07\x36\xd3\xda\x37\x56\xdb\x62\xf9\x90\x71\x6d\xf9\xf0\xdc\x64\x3f\xfd\xec\x18\x4c\xcd\xcc\x55\x1a\xfd\xd1\xa0\xa2\x0b\xdb\xa8\xde\x2f\x31\x0e\x7c\x47\xf2\xc9\x70\x4a\xc3\x85\xd9\x8a\x8a\x03\x29\x5b\x3e\xa4\x13\x00\xef\x1c\x95\x9d\xe0\x8b\x0f\xa2\xb3\xda\x16\x52\x55\xd9\x1b\x4d\x55\xe1\x50\x31\x15\xf0\x55\x04\xa6\x6d\x51\xbb\xca\x28\x93\xa5\xa8\x1e\xca\x54\xd5\x16\x9a\x0e\x14\xe6\x91\xa9\xfd\x74\x50\x7b\xd6\xe3\xbc\x58\x65\xdd\x8b\xeb\x19\xdf\xd2\xfa\x9b\x38\xd6\x9b\x8e\x9f\x15\x4b\xcc\x52\x4d\x02\x06\x73\xfe\xfa\x8e\x75\x9b\x46\xcf\x40\x36\xb4\x28\x57\x48\x0b\xa7\x03\xe4\x6a\x62\x1f\x7f\x9a\xbf\x03\x78\x7a\xfc\x8a\x67\x6f\x0f\x36\x3b\xb1\x17\xc7\x06\x5f\x8d\xd5\xc6\xce\x4b\xdf\x70\x26\x33\x0a\x87\x02\xac\x62\x43\x2d\x15\x1e\xd7\x38\xc0\xdb\x48\x08\xd0\x7d\x49\x94\xca\xd9\x99\x99\xe7\xb4\x0e\x25\xfa\x81\xa5\x1d\x20\xac\x78\x71\x11\x2b\xe5\xef\x73\xea\xbf\x5d\x06\x06\xc2\xf7\x3d\xc6\x5b\x8d\xbe\xfb\x3b\x00\x00\xff\xff\x32\x1b\x83\x1f\x9c\x12\x00\x00") + +func web_uiAssetsConsulUiRoutes7726cc49168b83dcd93c923c97ebe93dJsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulUiRoutes7726cc49168b83dcd93c923c97ebe93dJs, + "web_ui/assets/consul-ui/routes-7726cc49168b83dcd93c923c97ebe93d.js", + ) +} + +func web_uiAssetsConsulUiRoutes7726cc49168b83dcd93c923c97ebe93dJs() (*asset, error) { + bytes, err := web_uiAssetsConsulUiRoutes7726cc49168b83dcd93c923c97ebe93dJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-ui/routes-7726cc49168b83dcd93c923c97ebe93d.js", size: 4764, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulUiRoutesDebug8f884a3e3f7105d43b7b4024db9b4c99Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\xb1\x4a\x35\x31\x14\x84\xfb\xff\x29\x7e\x53\x25\xb0\x37\xf6\x81\xd5\xde\x42\x85\xfb\x00\x4b\x4c\x66\xef\x0d\xb8\x39\xf1\xe4\x44\x5c\x42\xde\x5d\x56\x10\x6e\x61\x35\xf3\xcd\x4c\x33\x5a\x63\xe2\x59\xab\x96\x23\xd6\x94\x11\xd5\xdd\x2c\x7b\x01\xad\xff\x23\x85\xb6\x21\xcb\xe3\xaf\xb1\xa1\x31\x23\xcb\x39\x70\x2a\x62\xa3\x17\x5f\x21\x6e\xa3\xd8\xde\x61\xf1\x55\x88\xa5\x1a\x33\x3f\x74\xb6\x4c\x4d\x50\xe7\xa7\xf3\xcb\xb3\xad\xc2\x29\x5f\xd2\xba\x6b\x98\x61\x74\x57\xe4\x9b\x5c\x4f\x85\xe9\x33\x45\xf0\x29\xe2\xad\x5d\x94\xeb\x0b\x15\x49\x94\xab\xeb\xc5\xcb\xd5\xa9\xfb\x3f\x77\xd3\x47\x03\xef\xaf\x9e\xfd\x56\x5d\x67\xc4\xc4\x08\xb2\x34\x4e\x4e\xdd\x92\x9a\x18\xb5\x50\xae\x58\x8e\x43\x47\x79\x83\x6a\xaa\x81\x8e\xf4\x47\xd4\x18\x63\x98\x7f\xdf\x01\x00\x00\xff\xff\x40\xb4\x4e\x1f\x0d\x01\x00\x00") + +func web_uiAssetsConsulUiRoutesDebug8f884a3e3f7105d43b7b4024db9b4c99JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulUiRoutesDebug8f884a3e3f7105d43b7b4024db9b4c99Js, + "web_ui/assets/consul-ui/routes-debug-8f884a3e3f7105d43b7b4024db9b4c99.js", + ) +} + +func web_uiAssetsConsulUiRoutesDebug8f884a3e3f7105d43b7b4024db9b4c99Js() (*asset, error) { + bytes, err := web_uiAssetsConsulUiRoutesDebug8f884a3e3f7105d43b7b4024db9b4c99JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-ui/routes-debug-8f884a3e3f7105d43b7b4024db9b4c99.js", size: 269, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulUiServicesA17470cdfbd4a4096117ac0103802226Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8d\xc1\x4e\xeb\x30\x10\x45\xf7\xef\x2b\x1e\x5e\x25\x52\x93\x08\x56\xc8\x52\x80\x35\x0b\x58\xf4\x0b\x8c\x3d\x6d\x47\x4a\x66\xac\x99\x71\xa1\xaa\xf2\xef\x28\x2d\x0d\x20\xa1\xae\xec\xd1\xbd\xe7\x9e\xaa\x82\x95\xf6\x95\x2b\x94\x60\x83\x04\xc9\xdd\xf4\x76\xc8\xc0\x9b\xff\x89\x63\x19\x81\xec\xf1\xf2\x69\x63\x11\x01\xb2\x75\x14\xcc\xd6\xa6\x60\x41\xc1\xfc\xc8\xa9\x0c\xd0\xc2\x47\x66\x31\xad\xeb\xfe\xe1\xa8\xad\x82\xec\x31\x82\xf6\xcf\xeb\xd7\x97\x56\x4d\x90\xb6\xb8\x39\x54\x50\x4f\x75\x75\x74\xc2\xc5\xc0\xbf\x05\xc5\xe8\xfc\x31\x0e\x41\xd5\xbb\xc8\xa4\x65\x68\x0a\x76\x73\x8c\xb4\x3d\xbd\xe0\xa6\x95\xfb\x9a\xf3\x48\x36\xfc\x05\x5c\x74\x1d\xde\xde\xd3\x4f\x40\x2d\x18\x5c\x25\x4e\x8d\xe6\x1d\x6d\xd7\xc4\x5d\x10\xd3\x19\x0f\xc5\x76\x4d\x16\xde\x63\x02\xf1\x8c\x29\x9e\x1b\x45\xae\xeb\x7f\x71\xda\xf1\x7c\xdf\x35\x91\x13\x2c\xfc\x12\xcf\x9e\xc8\x63\x66\x02\x32\x7f\x1e\xeb\x72\x10\x43\x43\xa6\x4e\x61\x80\x68\x2c\xdf\xbe\xa7\xed\x80\xe3\x08\xd2\x2d\x94\x9b\xa6\xfa\xdf\x67\x00\x00\x00\xff\xff\x07\x44\x38\x12\xc3\x01\x00\x00") + +func web_uiAssetsConsulUiServicesA17470cdfbd4a4096117ac0103802226JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulUiServicesA17470cdfbd4a4096117ac0103802226Js, + "web_ui/assets/consul-ui/services-a17470cdfbd4a4096117ac0103802226.js", + ) +} + +func web_uiAssetsConsulUiServicesA17470cdfbd4a4096117ac0103802226Js() (*asset, error) { + bytes, err := web_uiAssetsConsulUiServicesA17470cdfbd4a4096117ac0103802226JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-ui/services-a17470cdfbd4a4096117ac0103802226.js", size: 451, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulUiServicesDebug5a3f1d2e3954a05aa8383f02db31b8e6Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8e\xb1\x4a\x04\x31\x10\x86\x7b\x9f\x42\x53\x25\x70\x97\xc5\x4e\x02\xd1\xde\x42\x8b\x7b\x82\x98\xcc\x2e\x03\xb9\x49\xc8\xcc\x88\xcb\xb2\xef\x2e\x82\x2b\x16\xd7\xfd\xc5\xf7\xf1\x7f\xd6\xc2\x09\xa3\x35\x4a\x05\x66\x24\x28\xe6\x21\xca\xda\xa1\xcd\xf7\xa5\x65\xbd\x02\xc9\xcb\x31\x7c\xd6\x31\x80\xe4\x92\x07\x76\xf1\x25\x49\x62\x90\x70\x6d\x45\x2b\x78\xf8\xea\x6d\x08\x3b\x17\x9f\x37\xf4\x0c\xe3\x13\x33\x70\x7c\xbd\xbc\xbf\x79\x96\x81\xb4\xe0\xbc\x5a\x70\xbb\xb3\x9b\x19\x4d\x05\x42\xea\xbd\x62\x4e\x82\x8d\x4c\xd8\x72\x4d\xcc\xc1\xe4\x46\xac\xf5\xac\x38\xfd\x40\x48\xcb\xf4\x0f\x3b\x17\xf8\xd0\xc5\xec\x27\xf3\x7b\x10\x90\xa4\xde\x92\x8f\x80\x09\x1f\x9f\xfe\xb4\xdd\xdd\x7d\x07\x00\x00\xff\xff\xed\x8b\xd6\xb0\xf1\x00\x00\x00") + +func web_uiAssetsConsulUiServicesDebug5a3f1d2e3954a05aa8383f02db31b8e6JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulUiServicesDebug5a3f1d2e3954a05aa8383f02db31b8e6Js, + "web_ui/assets/consul-ui/services-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js", + ) +} + +func web_uiAssetsConsulUiServicesDebug5a3f1d2e3954a05aa8383f02db31b8e6Js() (*asset, error) { + bytes, err := web_uiAssetsConsulUiServicesDebug5a3f1d2e3954a05aa8383f02db31b8e6JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-ui/services-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js", size: 241, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulUi1931ddc38430fffd3fdb3a7ec5b01c18Css = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x6f\x1c\x47\x92\x28\x8a\x7f\x95\x04\x8d\xc1\x5a\x33\xcc\x70\xbe\x1f\x94\x25\x1c\x8d\x76\x0d\xfd\x00\xf9\x77\x81\xbb\x67\xfd\xcf\x40\xf7\xa2\xd8\x5d\x64\xf7\xa8\xd8\xd5\xa7\xbb\x49\x49\xd4\xe1\xf9\xec\x17\x11\x59\xd5\x5d\xaf\x7e\x92\x1a\xcb\x5e\xc2\x66\x89\xcc\x8c\x8c\x7c\x47\x46\x44\x46\x44\xfe\x8f\xd1\x24\x5b\x2c\xf3\x15\x3b\xfb\xaf\xff\xf9\x0b\x0f\x67\x2f\x7f\x28\xca\xeb\xe9\x8c\xaf\xca\xeb\xeb\x22\xff\xdb\x78\x7a\xc7\xae\xca\x72\x95\x2f\xd8\xe5\xed\x6a\x55\xce\xce\x61\x54\xce\x96\xb7\x05\x9f\xce\x56\xf9\x6c\x35\x2d\x67\xfc\x6a\x9a\x17\xe3\x65\xbe\x5a\x32\x98\xe7\x8b\x9b\xe9\x72\x39\x2d\x67\xcb\xd7\x35\x7c\x7e\x33\x5f\x7d\xe1\xcb\x55\xb6\xca\x5f\xdf\x16\xaf\x8b\xe9\xeb\xbf\x0e\x25\x5e\x64\xa3\xd5\xf4\x2e\x1f\xca\x2a\xb2\xcb\xbc\xd8\x81\xaf\x99\xbf\x46\x73\x53\x8e\xb3\x82\x8f\xa7\x59\x51\x5e\xb3\x7f\x2c\xca\x22\x7f\x35\x2e\x47\xb7\x37\xf9\x6c\xf5\x81\x8d\xc7\x2c\xdb\x03\x32\x47\x88\x72\x3a\x1e\xf1\x65\x5e\xe4\xa3\x55\xd5\x7f\x58\xe4\xcb\x7c\x75\x0e\xcb\x3c\x5b\x8c\x26\xfc\x32\x5b\x50\x53\x6e\x97\x0c\x16\xf9\x4d\x79\x97\xf3\xac\x28\xea\xb1\xca\xce\xa9\x69\xb0\xfa\x32\xcf\xab\x7a\xfa\x29\x75\x8b\x6f\xb2\xe9\x2c\x35\x6c\xfd\x5b\x2b\x6b\x5e\xe7\xcc\xd7\x19\x5f\x57\xf9\xe7\x15\x1f\xe7\xa3\x72\x91\xe1\x54\x5c\xcc\xca\x59\xfe\x50\xcf\xc7\xf9\x64\xf1\xf5\xb2\x5c\x8c\xf3\x45\x4a\xcf\x16\xab\xe9\xa8\xc8\xcf\xb3\xe5\x74\x9c\x9f\x5f\x4d\xaf\x6f\x17\xf9\x79\x9a\xdc\xf3\x49\x9e\x8d\xf1\x9f\xeb\x45\x79\x3b\x3f\x9f\x2c\xce\x97\xf9\x08\x31\x7e\x1d\x4f\x97\xf3\x22\xfb\x72\x71\x59\x94\xa3\x8f\x0f\xf4\xfd\x5f\xb7\xe5\x2a\x3f\xbf\x2c\xc7\x5f\xce\xc7\xe3\xf3\x71\x71\x3e\x5e\x9d\xaf\xeb\xac\xd0\x4e\xe4\xf9\x44\x9d\x4f\xf4\xf9\xc4\x9c\x4f\xec\xf9\xc4\x21\xce\xc9\xea\xa6\x38\x9f\x5e\x2d\xb2\x9b\xfc\xbc\xc8\xaf\xf3\xd9\xf8\xbc\x98\x9e\x97\xc5\xf9\xfc\x7c\xbe\xc8\xcf\xb1\x33\xd9\x22\xcf\xce\x6f\x8b\xaf\x37\xd9\xe2\x7a\x3a\xbb\x10\x2f\xe7\xd9\x78\x3c\x9d\x5d\x5f\x88\x87\x1e\xca\xaf\x57\xe5\x6c\xc5\x97\xd3\xfb\xfc\x42\x0a\xf1\x97\x97\xf4\xe7\xa7\x7c\x7a\x3d\x59\x5d\x18\x21\x1e\x6e\x8b\xaf\xc5\x74\xb9\xe2\xcb\xd5\x97\x22\x4f\x43\xb0\xca\x2e\x8b\xbc\x1a\x14\x3e\x2a\x8b\x22\x9b\x2f\xf3\x8b\xfa\x97\x97\x55\xc6\x72\x9e\x8d\x52\x9d\x04\xcf\x56\xe3\xf3\xea\x97\xc9\xd7\x75\x7b\x5e\xd2\xd8\x67\xc5\xf4\x7a\x76\x51\xe4\x57\xab\x87\xec\x76\x3c\x2d\xcf\xf3\x9b\xcb\x7c\x7c\x3e\xbd\xb9\x3e\x2f\x2f\xff\x99\x8f\x56\xe7\x77\xd3\x71\x5e\x7e\x9d\xa4\x66\x65\xb7\xab\xf2\xe5\x4d\xf6\x99\x7f\x9a\x8e\x57\x13\x6a\xf6\x03\x64\xf3\x39\xbf\x9b\xe6\x9f\x5e\xa7\xcd\xb6\xb8\xa9\x96\xcf\x3f\x70\x91\xbc\x4a\xbf\x7f\xa8\x56\x4c\x5e\xe4\xab\x7c\x60\x0f\x66\x34\x5b\xfc\x53\xb6\x98\x71\x5a\xd6\xf5\x72\x1d\x67\xb3\xeb\x7c\x51\xde\x2e\xb1\xd0\xfc\x0b\x4f\xc9\xeb\xcd\x3c\x9e\x2e\x47\x45\xb9\xbc\x5d\xe4\xfc\x26\x9f\xdd\xb2\x7f\x64\x8b\x69\xc6\xf3\xcf\xf3\x6c\x36\xce\xc7\x1f\xfe\xcf\x5f\x71\x8b\xa5\xad\xb1\x5a\xe4\xf9\x74\x95\xdf\x7c\x38\xb0\x54\x31\xad\x0a\x22\xc8\x49\x05\xcb\x39\x76\xea\x43\x6b\xcb\xb3\xf1\xf4\x6e\x4d\x0a\x26\xd9\x72\x32\x1d\x95\x8b\x39\x4f\x03\xc2\x66\xd9\x1d\x2b\xa6\x30\xc3\x19\xcc\x97\xac\x5b\xdf\xde\x82\x73\xdc\x23\x58\xe9\x8e\xb2\xd3\x19\xce\x51\x3e\xae\xc6\x7c\x43\xd3\x10\x8a\xcf\xb3\x59\x5e\x0c\x0e\x5a\x3b\x7b\x68\x74\xb6\x40\xac\x87\xa1\x45\xaf\xda\x0b\xe2\xa6\x5c\xe4\x7c\x5e\xce\xcb\xbb\x7c\x91\x9a\x9b\x56\xcf\x68\x92\x8f\x3e\x5e\x96\x9f\x3f\xfc\x8d\xe8\x0e\xd2\xf3\xe1\xc6\x1d\x57\x7e\xb0\xf5\x27\xa2\x58\x77\xaf\x4f\x6c\x2f\x66\xe5\xea\xc7\x44\x71\x5f\x9c\xc3\x23\xba\xf7\xb8\x9e\x3d\xa6\x53\x75\xd9\xaa\x5f\xe9\xa8\xfa\xeb\x39\xac\xca\x79\x59\x94\xd7\x5f\xf8\xac\x5c\x4d\x71\xad\xd6\xcb\x8b\xa6\x75\x59\x2e\x56\x5b\x8b\x7e\x9a\xae\x26\xb8\x6e\xaf\xa6\x8b\x1b\x22\xfb\xed\xb5\x90\xa5\xbf\x46\x8b\x3c\x43\x32\x9d\xc8\x40\x4a\xca\x66\xa3\xbc\x68\x25\x2d\x6f\x2f\x6f\xa6\xab\xf3\x26\xc1\xa1\xe1\xfe\xd0\x4a\x4a\x50\x1f\xaa\x53\x82\x41\x5a\xf9\xcb\x21\x3a\x95\xa6\x2c\x91\x9a\xd5\xec\x45\x3a\xee\xd8\x72\x9e\xcd\x12\x0d\xc5\xad\xc7\xeb\xf2\xab\xc5\xeb\x1a\xd7\x71\x13\xfa\x08\x54\x03\x13\xfc\x14\xd8\xea\x09\x4f\xb8\x68\x8a\xc6\xf9\x2a\x9b\x16\x8f\xee\xe5\x69\xb8\xb6\x76\xf3\x91\xe8\xaa\x7e\x7e\xe5\x9f\xf2\xcb\x8f\xd3\x15\x5f\x95\xb7\xa3\x09\x1f\x65\x45\x51\xde\xae\xe8\x90\x7d\x59\x67\xdd\x2e\xd7\x8b\xb7\xca\xb8\x29\xef\x87\x52\x97\xfd\xc4\x6e\xc2\x43\x5a\xae\x8b\xfc\x2e\xcf\x0a\x36\x9d\xcd\x6f\x57\x17\xd4\xd4\x7c\xfc\x7f\xf2\x9b\x2d\xad\x19\xe7\x57\xd9\x6d\xb1\x1a\x6c\x10\x9e\xde\xfd\x06\x55\xa9\xcb\x7e\x62\x37\xe1\x21\xfb\x3a\x2a\x8b\x72\x71\xb1\xb8\xbe\xfc\xf1\x2e\x5b\xfc\xc8\x39\xfd\x5d\x2d\xa1\x17\x2f\x1e\x68\xcd\x2f\x57\x8b\x72\x76\x7d\x8e\x1c\xc4\xa4\x2a\x30\x9d\x4d\xf2\xc5\x74\xf5\x80\x0c\x54\x0f\xc7\xaa\x9c\xe5\xfc\x7a\x91\x7d\xe1\x51\x88\x17\x2f\x1e\x90\x65\xfa\x7a\x99\x8d\x3e\x22\x63\x36\x1b\xf3\xed\xf0\x02\xe1\x5f\x6e\x58\xa2\x2a\xff\xcb\xbc\xa4\xbf\x29\x3f\xf1\x2c\x8b\x7c\x36\xce\x17\xc8\xc4\xe0\x64\xde\x4c\xef\xf3\xf7\xf9\xf5\xf4\x72\x5a\x4c\x57\x5f\x12\x04\x15\xc8\xc6\xff\xbc\x5d\xae\x12\x6b\x45\x03\x55\x2e\x3f\xf3\x84\xff\xa6\x2c\x57\x13\x44\x80\x35\x2f\x47\x59\xb1\x99\xf4\x0e\x40\x36\x5b\x4d\xb3\x62\x9a\x2d\xf3\xf1\x4b\x24\x66\x57\x45\xf9\x89\x7f\xbe\x98\x4c\xc7\xe3\x7c\xb6\x49\xf9\x72\xb1\x1c\x2d\xca\xa2\x78\x79\x59\x7e\xc6\xda\xb1\x68\xc5\x8c\x5d\x96\x9f\x5f\xde\x4c\x67\x15\xc7\xa4\x85\x98\x7f\x7e\x40\xc6\xf6\x90\x31\x51\x34\x26\x15\xef\x25\xe7\x9f\x5f\x56\x6c\xa5\x04\xbb\xc8\x6f\x98\x78\x48\x44\xab\x8f\xac\x42\xb4\xc8\x90\x93\x58\xe4\xb3\xd5\x0b\x9a\xae\x8a\x28\x9e\xd3\xfa\x3b\x4f\xab\x61\xcd\xb6\x26\x76\xf4\x2a\xbb\x99\x16\x5f\x9a\xa3\x9f\x52\xf8\x32\x9b\x2d\x5f\x3c\xc0\xdb\x72\x9c\xff\x3a\x5d\x2c\xca\x05\x2f\xa6\x33\x5c\xb1\x65\xb1\x9a\xce\xcf\x61\x74\xc3\x97\x9c\xf8\x92\x06\xcc\xf9\xa8\x1c\xe7\xc8\x1c\xef\x41\x7e\x53\xce\xca\x17\x0f\x69\xb1\x55\x6c\x31\x31\xbd\xd5\x5a\x6b\xb1\xc6\x8d\xd2\x29\x85\x5f\x96\xc5\xf8\xc5\xc3\xba\xaa\x6d\x93\x4d\xcc\xeb\xb6\x79\xbe\x5d\x95\x0f\x54\xb8\xca\x5f\x4f\x6d\x9a\x58\x84\xa1\xcd\xd9\x5c\x05\x84\xf0\xd3\x64\xba\xca\x89\xe5\xce\x2f\xe6\x8b\xfc\xe5\xa7\x72\x31\xe6\x9f\x16\xd9\xfc\x62\x56\x2e\x6e\xb2\xe2\xe1\xaf\xe7\x17\x17\xd9\x15\x0a\x29\x17\x17\x97\xf9\x55\xb9\x40\x06\x7e\xbd\x4a\xea\xdd\x54\x0b\x20\x5f\x1b\x9c\x75\x96\x26\xaa\x43\xd8\x9a\x89\x8b\x6c\x3c\x2d\x3f\x7c\x1d\xdd\x2e\x96\xe5\xe2\x62\x5e\x22\x43\xbd\x78\x38\xb0\xd4\x5d\x8e\x02\x55\x56\x54\x42\xc0\x65\xb6\xcc\x8b\x29\x0a\x19\xb4\xd9\x3b\xe2\xc1\xcb\x0e\xf4\xaa\x9c\x3f\xec\x5c\x4d\xb5\x04\xf4\x90\x04\xa6\x5a\x92\x13\x0f\x17\x8b\xb2\x5c\x7d\xe5\x49\xec\xe3\xd8\x96\xdb\x25\xee\xee\x0b\xf1\xb2\x93\x28\x85\xb8\x50\xf3\xcf\xdd\x64\x25\xc4\x85\xe9\x27\x6b\x21\x2e\x7c\x3f\xf9\xea\xb6\x28\x2a\x22\x50\x65\x54\x1b\x13\xab\x4c\x04\xbc\x9d\x8e\xb5\xca\xf9\x67\xb6\x2c\x8b\xe9\xb8\x9b\xa9\x52\x93\x86\x33\xb1\x05\x7a\x5b\xa6\x49\xad\xee\x64\xe6\x45\x7e\x47\x3c\x10\x55\x2b\x18\x16\x47\xfc\x1b\x6a\x70\x59\x64\xa3\x8f\x2f\xd8\x4f\xcc\xfd\xe5\xc5\x40\x31\x45\xc5\xb0\x88\x19\x2e\x26\xc5\x60\x39\x4d\xe5\xec\xfc\x33\xc3\xbe\xf2\x2d\x75\x4a\x35\x58\xd8\x50\x61\x37\xff\xcc\xc2\x8e\xc2\xf6\x2f\x2f\xce\x05\x41\x60\xd3\xf8\x71\xed\x73\x54\x85\x44\xd4\xd8\x48\xee\x87\x4b\x07\xaa\x43\x62\x1f\xa4\x40\x38\x7d\x54\x2d\x21\xd5\x82\x3d\xc1\x1f\x4e\x38\x86\xc7\xfe\xbc\x82\xa3\xcf\xb6\xce\xa8\x54\xcd\x72\x95\xe7\x05\x17\x56\x5c\x28\x63\x99\x32\x8e\x29\xe3\xd7\xe9\xb4\xac\x95\x65\x4a\x05\xa6\xb4\x5c\xa7\xd3\xda\x12\x96\x29\x29\x99\x92\x76\x9d\x8e\x53\x25\x83\x65\x32\x6a\x26\x63\x5c\xa7\xe3\x2c\x48\x67\x99\xf4\x8e\xc9\xa0\xd7\xe9\x16\xd3\x8d\x65\xd2\x46\x26\x5d\x58\xa7\xe3\x90\x4a\x19\x99\xd4\x92\x49\xbd\x49\xf7\x42\x5c\x20\x6a\xa1\x98\x14\x9b\x66\xe2\xd8\x38\xc7\xbc\x66\x7e\x93\x18\x71\x15\x0b\x66\x0c\x33\xee\x25\xe7\x45\x7e\x53\xce\x52\x47\x2d\x36\xdc\x31\x25\xd6\xc9\xd4\xcf\x7e\xb2\x1a\x4e\xd6\xc3\xc9\x66\x38\xd9\x0e\x27\xbb\xe1\x64\x3f\x9c\x1c\x86\x93\x63\x37\xf9\x26\xbb\xce\x67\xab\xac\x9a\xd0\xc8\x94\xc6\x49\x55\x8d\x1c\xea\xaa\x8e\x4c\x46\x87\xc5\x1a\x39\xd4\x5b\x15\x99\xb4\x81\xc9\xd8\xc4\x46\x1d\x96\x81\xd1\x94\x38\xd3\xc8\xa1\x3e\x8b\xc0\x82\xa8\xe6\xa9\xce\xa0\x99\x8d\x81\x19\xc5\xa4\xd4\x8d\x0c\x9a\x5a\x1b\x98\xd6\x2c\xc4\x46\x3a\x76\x5c\xe2\x52\x73\xcc\xcb\x46\x3a\xf6\x3c\x0a\xa6\x04\xb3\xcd\x6e\x60\xcf\xad\x61\x52\xb1\x6a\x59\x2e\xb2\x4f\x97\xf9\x62\xf1\x85\x0b\x59\x8d\x89\x51\x4c\x99\xd0\xc9\xb4\x3b\x32\x69\x68\x4c\x60\x4a\xfa\xf5\x6a\x5f\x67\xaa\x5d\x99\x34\x40\x0a\x9b\xe3\x98\xf4\xaa\x9d\x69\x76\x65\xd2\xea\x10\x0a\x87\x23\x8d\x53\x23\x8f\x86\x0a\x07\x30\x32\x6f\xda\x59\x7e\x7b\x16\x0e\x98\x14\xb8\x6f\xd2\x88\x35\xb2\x62\x27\x6b\x54\x5e\x66\xc5\xaa\x5a\x2c\x82\x11\x05\xb0\x76\x93\x41\xe7\x4b\xc4\x2d\xae\xda\x19\x38\x18\x52\x07\x26\xbd\x6f\x67\xe0\x40\x44\xc9\x24\xd2\x91\x66\x3a\x8e\x81\x75\x4c\xaa\x0e\x22\xea\xbe\x64\x31\xb6\x93\xd3\x22\x61\x3e\x32\x25\xe2\x26\x39\xf5\x9a\x39\xc3\xa4\xd3\x9b\xe4\xd4\x63\x86\x74\x84\x16\x74\x95\x8c\xbd\x75\x4c\x79\xe6\x71\x2d\x4f\x67\xe3\xe9\x75\x99\xfa\xaa\x91\x9a\x61\xcb\xd5\x26\x83\x26\x5f\x6a\xa6\xa4\xa8\x48\x60\x95\x41\x7d\xf5\x58\xa5\xaf\xb6\x52\x95\x41\xc4\xce\x48\x22\x52\x4a\x37\x4a\x10\xb5\x93\x9e\x49\x61\x98\xd2\x8d\x12\xd8\xdb\xa8\x98\x0f\x4c\xa9\xb8\x49\xc6\xde\x7a\x47\xdd\x0a\x61\x93\x8c\xbd\xb5\x91\x59\x81\xc3\xb9\x49\xc6\xde\x1a\xc5\xb4\x63\x52\xd8\x4d\x32\x91\x02\xc7\x94\x62\x34\x34\xab\x3c\xab\xc8\x3a\x51\x80\xc0\x94\x59\x27\xa7\x69\xb5\x4c\x69\x84\x17\x75\x32\x75\x14\xf7\x86\x42\xe2\xed\xeb\x64\xea\x26\xd2\x17\x29\x99\xa4\xc5\x46\xc9\x26\x35\x1a\xf7\xb8\xb4\xb2\x4e\xc5\x1e\x6a\xcf\x64\xc0\xb9\x8e\x75\x2a\x76\x10\x29\xb9\x45\xd2\xed\xea\x54\x22\x75\x86\x88\x4a\x58\xb7\x8d\xe6\xd2\xb3\x60\x99\x5d\x17\xa7\x65\x2b\x99\x95\x4c\xd3\xf4\x7e\xc9\x2a\x42\x8e\x03\x8f\x5d\x4b\x4b\x07\x93\x65\x75\x00\x51\xd7\x36\xc9\x69\xbd\x46\x86\xdb\xb0\x91\xac\xd3\x7c\xd0\x29\xb6\x49\x25\xf6\x07\x7b\x16\x9b\xa9\x36\x9d\xbf\xc1\x37\x13\xab\xa3\xdf\x46\x24\x0b\x75\xa2\x4f\x89\x44\x2b\x75\x9d\x98\x8e\xef\xb0\x5e\xa2\x98\x16\x13\x63\x23\xd3\x02\x4d\xa2\x25\x11\x2f\x6c\x8e\xac\x96\x67\x4a\xa6\x1d\xea\xab\xde\xae\xa1\x13\x2d\xc7\xde\x86\x6a\x69\xa6\x64\x3b\x98\x9c\xe8\xbb\x48\x83\xa0\xd7\x48\xd2\x99\xed\xe8\xcc\x56\xc2\xd4\xc9\xa6\xa6\x30\xb8\xfe\xa8\x1f\x94\x4c\x74\x1d\x57\x02\x1e\x07\x1b\x24\x38\x10\xb8\x12\x04\xce\xa7\xad\x53\x71\x24\x82\x62\xc1\x33\x5a\x4e\x94\x86\x03\x61\x2d\xb3\x81\x39\xb7\x4e\xb3\xe2\x82\xce\x69\x46\x2b\xa9\x16\xca\x71\xcd\x68\x9d\x26\x3d\xa5\x59\xa2\x16\x4a\x33\x15\x28\x2d\xcf\xeb\x95\x40\x7c\x4b\xb5\x0d\x53\xba\xac\x4e\x20\xa5\xb1\x5f\x72\x9d\x4e\x6b\xc1\x09\xa6\x68\x82\xec\x3a\x9d\xc6\x01\xe9\x13\xf6\x81\xd6\x6e\x4a\xc7\x81\x08\x06\x4f\x44\x16\xf5\x3a\xd5\x56\x8b\xc4\x3b\x66\x37\x75\xd2\x42\x0f\x0c\x59\x1a\xb3\x49\xc5\x61\xd0\xb8\x22\x34\x6b\xb4\x2f\x24\xd2\x17\x04\x53\x6e\x9d\x48\x4b\x5d\x33\x13\x18\x2d\x93\xcb\xe2\x36\x6f\xac\x89\x9a\x78\xa6\xe4\x1e\xd5\xa6\xe4\x3e\xcd\xa6\xe4\x3e\xc5\xa6\xe4\x1e\xbd\xa6\xd4\x1e\xb5\xa6\xd4\x2e\xad\xa6\xc4\x2e\xa5\xa6\xc4\x2e\x9d\xa6\xc4\x2e\x95\xa6\xc4\x36\x8d\x5e\xe4\xe3\xaa\xb7\x1a\x97\x39\xee\x82\x3a\x75\xcd\xcf\x38\x5c\xd6\x55\xea\x86\x97\x89\xd5\xd2\xc5\xd4\x35\x1f\xe3\x14\x93\x6b\xbc\x89\x87\x89\x0c\x79\x0c\x49\x4b\x0a\x53\x13\xff\x12\x59\xc0\xb5\xab\xaa\xc4\xc4\xbb\x44\x66\x15\x73\xb1\x4a\xa3\x7e\x3a\xcd\x8c\x4e\xf3\x8d\x69\x89\x65\xf1\x4c\x1b\x66\xea\xca\x43\x1a\x50\x65\x98\xae\xd1\xc5\xb4\xe2\x25\xb2\xc5\x2f\x39\x2f\x17\xd9\xec\xba\x9a\x3e\x6b\x98\x32\xb8\x1b\xdd\x26\x23\xf1\xa2\x3a\x6d\x53\x21\x36\x19\x89\x1b\xad\x16\x28\x71\x61\x55\x46\xe2\x47\x25\x72\xd6\x4c\x2a\xbf\xc9\x48\x1c\x29\xed\x5f\x16\xe5\x26\xdd\xd6\xe9\xd8\x1b\xbb\x49\x77\x15\x5b\x8f\x9b\xdb\x34\x9a\xe4\xab\x2d\x13\x15\xd3\x0d\x70\x9a\x51\x9c\x67\x5c\x80\x9b\x64\x9a\xd3\xc8\x70\x5e\x30\xf5\x4b\x5e\x14\xe5\xa7\x0d\xe7\x65\xeb\xd3\xb2\xca\x58\xf7\x17\x57\x67\x70\x9b\x8c\x75\x7f\x15\xee\x28\xb1\xc9\xa8\xfb\x8b\xac\x58\x34\x9b\xf4\xba\xbb\x4a\x38\x46\xbc\x5d\x95\xbe\xee\x2e\xb2\xbc\x9b\xe4\x75\x6f\x9d\x6c\x26\xd7\x9d\x25\x66\x74\x93\x5c\x77\x36\x0a\x26\x37\xa9\x55\x5f\x91\x13\x7d\xd9\xd2\x62\x5d\x34\x7e\x7f\xc9\x39\xa9\x5e\xaa\xfe\x6f\xb6\x6b\x36\xfa\x78\x21\x98\x60\xe2\x65\xad\xd2\x9c\x2f\xa6\x37\xd9\x62\xad\x77\x2a\x67\xf9\x7a\xef\xbd\x58\x03\xad\x2f\x1a\x9b\x60\xd5\xc2\x7d\xd1\x45\xc5\xc7\xd3\x65\x76\x59\xe4\xe3\xdd\x38\x67\xf9\xed\x6a\x91\x15\x17\x5d\xbd\x5e\x0b\x28\x29\x5c\x77\x23\x9a\xce\xae\xca\xdd\x10\xcb\xdb\xd1\x28\x5f\x2e\xdb\x55\x55\x34\x75\x03\x75\x95\x4d\x8b\xdb\x45\xbe\xb3\x8b\x69\x20\x76\x82\x7c\xca\x16\xb3\xe9\xec\xba\x09\xb3\x59\x15\x8d\x9e\x15\xf9\x62\xd5\x04\xda\xec\x14\x04\xea\x6a\x17\x2f\xfe\x5e\x4c\x67\x1f\x7f\xcd\x46\xff\xf9\x65\xb9\xca\x6f\x7e\x29\x67\xab\x73\x9e\xcd\xe7\x45\xce\x97\x94\x72\x7e\xf6\x9f\xf9\x75\x99\xb3\xff\xfa\xff\x9d\x9d\x9f\xfd\xdf\xe5\x65\xb9\x2a\xcf\xce\xcf\xfe\xaf\xcf\x5f\xae\xf3\xd9\xd9\xf9\xd9\x7f\x5d\xde\xce\x56\xb7\x67\xe7\x67\x6f\xb3\xd9\x2a\x5b\xe4\x45\x71\x76\x7e\xf6\xcb\x74\x91\xb1\xff\xcc\x66\xcb\xb3\xf3\xb3\x7f\x5f\x94\xd3\x71\xfd\xc7\xbb\xbc\xb8\xcb\x57\xd3\x51\xc6\xfe\xff\xf9\x6d\xde\x4c\x38\x3b\x3f\x7b\xb3\x98\x66\xc5\xd9\x39\xb6\x8a\x2f\xf3\xc5\xf4\xea\x65\x5f\x5f\x79\x81\x1f\xd2\xfb\xbd\xec\xe8\xa9\x2f\xa4\x23\x3d\xd4\x26\x11\xb7\xa3\x26\xa5\x6d\x2b\x99\xce\x0f\x08\xdd\x64\x3a\x34\x41\x77\x93\x89\x79\x00\xd5\x4b\xb6\x98\x2c\x55\x0f\x3b\x51\xdc\x6e\x22\x31\x57\x10\x7c\x0f\xda\xa7\x8c\x01\x3c\xc4\x65\x41\xab\x44\xa5\x78\x2d\x48\x21\xab\x89\x9e\x36\xd3\x93\xe6\xf3\xc2\xf4\x32\x6e\xf2\xf1\xf4\xf6\xe6\xc2\xf6\x32\x96\xf9\xcd\xf4\xb2\x2c\xc6\x17\xae\x97\x45\xc9\x7e\x93\x5c\xe4\xd9\x78\xad\x2f\x6c\xa4\xe0\x30\xb4\x52\x64\x1a\xaf\x56\x5a\x1a\x71\x22\xac\x9b\xc4\x34\xde\xc4\xfd\x6c\x12\x6d\x9a\x04\xdd\x4a\xa4\x03\x0b\x4c\x2b\x8d\x48\x1b\xb4\x31\x12\x5d\x03\x62\x5e\x27\x8b\xf2\x26\x6f\x6a\xff\x37\x89\x95\x62\xdf\x25\x65\x66\xda\xd8\x8b\x6c\x96\xfa\xd2\xd8\x36\x0d\xfd\xc3\x8b\x36\x20\x76\xb1\x01\xd8\x16\xbb\x3b\xb0\xae\x92\x98\x91\x07\x21\xbe\xba\x91\x17\xc4\x60\x85\xa1\xb1\x51\x2b\x0b\x0d\x1c\x96\xce\x55\xc5\x9a\x18\x35\x34\x6c\x74\x41\x30\x00\x5b\x93\x92\x35\xda\x51\x39\x5b\x2d\xb2\xe5\x8a\xc7\x18\x87\xef\x91\x62\xdc\x40\x6f\x86\xa7\xdb\x86\x3a\xa3\x0b\xeb\x06\xda\x5b\x67\x34\x1a\x7c\x20\xf0\xf2\x53\xb6\x1a\x4d\x4e\x82\x0e\xdb\xa0\x43\x0d\xfd\x65\xb6\xca\x3e\xa7\x3d\x85\xb4\xfb\xcb\xc5\x0f\xe3\x71\xae\x73\xdf\xcf\xcb\xbe\x5c\xfc\x90\x19\xfc\x6f\xa8\x1c\x4d\xc8\xc5\x0f\x6e\xe4\x2f\x83\xdc\x00\x8c\xb3\xc5\xc7\x0a\xaf\x0f\x41\x91\x2e\xaa\xca\xba\xca\xc6\xf9\xb8\xc2\x9b\x67\xf8\xdf\x26\x2f\x5b\x15\xd9\xf2\xe2\x07\xa9\x7c\x7e\x75\xb5\x49\xbe\xcb\xae\x17\xd9\x6c\x75\xf1\x83\xba\x0a\xe1\xaa\xd1\xc6\x64\x90\x72\xf1\x83\x8b\x26\xc6\x06\x9e\x55\xbe\x58\x64\x57\xe5\xe2\xe6\xe2\x87\xa0\xd4\x55\xb3\xc8\x32\x5f\x5c\x61\x67\x4d\x6e\xc3\x26\x75\x9e\x8d\x3e\xe6\x8b\x8b\x1f\xe4\x78\x7c\x99\xe9\x4d\x3a\x35\x93\x7a\x9b\xcf\x7e\xfc\x41\x08\x71\xce\x42\xfc\x4b\x63\x04\x17\xf9\xf8\xe2\x87\xab\x2b\x3d\xd6\xe3\x66\xa9\x3c\x9f\x5d\xfc\xa0\xe3\xa5\x35\x59\x6f\x50\xb0\xe3\x56\xdb\x2b\xdf\xac\xe7\x76\xb5\xca\x17\xd5\x88\xa9\x4c\x5d\x11\x3f\x59\x65\xa6\xe3\xae\x3b\xa1\x8d\x43\x10\xdb\x33\x29\x17\xd3\xfb\x72\xb6\xca\x0a\xfe\xf1\x8e\x27\x5b\xae\x7c\x9e\x2d\xb2\x15\x9e\xa1\xe9\x9e\x27\xd0\xde\x1f\x80\xfc\x98\x7f\xd9\x40\x5f\x9c\x5d\x9c\x6d\x07\xfb\xb4\xc8\xe6\xf3\x9c\x0c\xf9\x16\xab\x8b\xb3\x1f\x0f\x00\xcd\x67\xe3\x8b\xb3\x17\x08\x38\x5a\x76\x9b\x76\x71\x76\x7e\xf6\x50\x9b\x68\x5d\xde\x8e\x3e\xe6\x2b\x82\x60\xb0\xcc\x17\x77\xd3\xd1\xc6\x7e\xab\x91\x49\x76\x13\xff\x18\x15\xd9\x72\xf9\xe1\x05\x1b\xb7\xff\x5e\x17\xc8\x3f\xcf\xcb\x65\x3e\xe6\xf3\x6c\x35\xa1\x62\xd5\xdd\x3c\xa4\x0b\x7d\x36\x2e\x0e\xc3\x33\x9d\x2d\x57\xd9\x6c\x94\x73\xba\xdf\x5a\x1e\x56\xa8\x28\x47\x1f\xf9\x32\x27\xf3\xce\xd4\xa1\x43\xab\xbb\x9d\x2f\x57\x8b\x3c\xbb\xd9\xd4\x5b\x15\x87\xa2\x1c\x65\x05\xbf\x9c\xce\xc6\x3c\x1b\x8f\x17\xf9\x72\xc9\xc6\xab\xe3\xca\x2d\x4b\x1a\x44\x1c\x92\x83\xca\xee\x69\x32\xcd\xe5\xa8\x2c\x8a\xbc\x61\xde\x45\x30\x17\x57\xd3\x05\xe6\x4d\xa6\xc5\xf8\xc5\xe1\x43\xbe\x28\x6f\x57\x39\x5f\x4d\x57\x45\x7e\x0e\xab\xec\xfa\x80\xe9\x5e\x8d\x11\x70\xf7\xb4\x7c\x9d\x97\x4b\x32\x55\xbb\xc8\x2e\x97\x65\x71\xbb\xca\xd7\x57\xab\xf5\xf5\xfa\xa8\x98\xce\x2f\x16\xf9\x68\xf5\x23\xf1\xf3\x4c\xbc\x78\x59\xed\x9a\xf9\xe7\x81\x5b\x71\x8e\xbf\x6f\xec\x1b\xd7\x17\x8e\xa7\xcc\xc6\x4d\x39\xce\xd9\x78\xb5\x69\xe4\x72\x95\xad\xa6\xa3\xd4\xa4\xdb\xd9\x32\x5f\x55\x4d\xa1\x3b\xe0\xb6\x75\x64\xcf\xf2\x13\xb2\xd9\xf4\x26\x4b\xe6\x2b\xab\xec\x92\xcf\xb2\x3b\x76\x5b\xd4\xb7\xc2\xa7\xd8\x4f\x1e\x5d\xe4\x62\x82\x83\x9b\x96\x41\x2d\xbb\xbc\x48\x7f\x26\x53\xdc\xcd\x62\xcf\x6e\x57\x13\x7e\x93\xaf\x26\xe5\x18\x0f\xd2\xbc\xb1\x79\x57\xf9\x62\x96\x15\x7c\x59\xde\x2e\x46\xa7\x5b\x71\x1e\x5d\x68\xdd\xe2\xd3\x4a\x5f\x95\xa3\x53\x2b\x4e\xa3\x56\x9b\x64\x9f\x8e\xe1\x90\x71\xdf\xa0\xa5\x65\xb9\x1a\x43\x4a\xe1\xac\x32\xc2\xe9\x03\x6e\xcc\xd5\x79\x63\x11\xb4\x2c\xe3\x4e\x29\xb4\x6b\xbc\x0f\x28\x4d\xe3\xdd\xe9\xf2\x69\x98\x86\x06\x6f\x00\xd3\xc6\x96\x9d\xc1\x5d\x86\xdc\x68\x32\xd8\xab\x21\x3f\x4e\x67\x9b\xae\x74\x16\x6f\x43\xa3\xc0\xe7\x8b\xf2\xf3\x97\x83\x8d\x7c\x37\x93\xfc\xba\x49\x59\x4f\x2b\x4f\x43\xf6\x58\x2c\x69\xb8\x7a\x58\x30\xf5\x0b\x1f\x4d\xb2\xe9\x8c\x55\xd4\x7c\x94\x2d\xc6\xaf\x2b\x6b\xc8\xdb\x82\x15\xd3\xed\x36\xca\xc3\xe9\x8d\x25\xb2\x05\xa0\xda\x75\x5b\x72\xdb\x1b\x6b\x27\xd0\xce\xbd\x33\x60\xcc\xdc\x18\x91\xbf\xee\x03\xa8\x5b\xb9\x07\x8a\x1a\x72\x0e\x45\x72\x32\xe8\xd9\x39\x6f\x5d\x09\x3b\x01\xfb\x53\xbe\x0b\x7c\x60\x6e\x77\x9a\x53\x6f\xc9\xea\x0c\xfc\x3e\xb8\x9d\x63\xbf\xcb\xfd\xe4\x75\xe5\x97\xb1\x1b\x68\x52\x0f\xe8\xb1\xa6\xd7\xdb\x47\xfc\x51\x98\x06\xa6\xe4\x31\xf8\x06\xe6\x6c\xc0\x46\x7c\xad\x4a\x6c\x19\x8b\x0f\x00\x6e\xe8\xea\x2e\xa8\xe6\x04\x1f\x08\xbc\x63\x96\xf7\x62\x38\xd1\xc2\x7d\xc7\x14\x3e\xe1\xec\x3d\xe1\xc4\xd5\x7c\x1b\xa4\xee\xe7\xe3\x96\x11\xfc\x4d\xbe\x5a\x4c\x47\xcb\xea\x70\xa9\xd8\xa6\x3d\x76\xee\x7b\xf2\x3b\x3b\xf5\x20\xe0\x5d\xdb\xb5\x6d\x56\xdf\xfa\x6b\x43\xcc\xdb\xc9\x89\x38\xb6\xd3\x5a\xad\x1a\xca\xda\xd5\x86\x3d\xc6\xfc\x29\xa9\x46\x3e\x90\x93\x1a\x34\x90\x71\x5c\xd5\x2d\xa7\x81\x61\xc6\x67\x1b\x5b\x33\x94\xd1\x1a\x92\x03\xb9\x98\xa1\xc6\x6d\x75\x5f\x48\x49\xed\x1a\x5a\x39\xcd\xa6\xb5\x32\x8e\xab\xba\x76\x93\x18\x48\xeb\x8e\x4c\x3b\xb3\x5f\x7f\x9d\x33\x30\x36\x43\x00\xbb\x5a\x78\x88\xd3\xc6\x81\x74\x6c\xe3\xd6\x71\x82\x27\xc8\x64\x75\x53\xfc\x63\x9c\xad\x32\x4e\x3c\xd4\xff\xf3\xea\x6c\x3c\x82\x6c\x54\x2c\x61\x3a\x1b\xe7\x9f\xcf\x3e\x30\xf2\x6e\x5c\x8d\x6b\x7e\x1d\x79\x50\x98\x97\xc5\x74\xf4\x85\xcf\xca\x71\xce\xa7\x63\x64\x58\x57\x5f\x5a\x39\x95\x4e\x65\x93\xf9\x28\x6f\x8e\x6d\x54\xf5\xe9\x90\xf6\xa8\xec\x93\xa1\xee\x53\xdd\xc7\x79\x7c\xec\x1e\x8b\x27\xc1\xba\x65\x30\x9e\x02\x77\x6f\x34\x6a\xb7\xcf\x64\x19\x4f\x66\xc4\x07\x68\x16\x18\xcc\xca\xd5\xf4\x6a\x3a\xca\x2a\xb7\xc0\x6c\x3e\xe7\xcd\xa4\xcd\xd1\x56\x4c\x5f\xff\xf5\x2b\xc9\x43\xa4\xf2\xe0\xe3\xdb\xca\x2b\x17\xa4\x5d\xbe\x6c\x64\xac\xa6\x37\xd3\xd9\x35\xbf\xba\x9d\xa5\xab\xcb\x3c\x5b\xe6\xbc\xbc\x5d\x3d\x24\xfe\xee\x32\x9b\xcd\xf2\xc5\x07\x36\xcb\xee\xaa\xf6\x97\x57\xe9\x48\x4c\xf9\xa3\x32\x49\x6e\xb3\xab\xf2\x03\xed\x2a\x76\x59\x8e\xbf\xbc\x86\xa4\x0e\x2f\x4a\xe2\x09\x71\x2f\x7d\xdd\x51\xe7\xe8\xf6\x72\x3a\xe2\x97\xf9\xfd\x34\x5f\xfc\x08\xf2\x1c\xff\x57\xf6\x1c\xe2\x8b\x97\xc3\x5d\x58\x3e\x6c\x36\x30\x49\x1a\xd5\x06\xcf\x6f\x2e\xf3\x05\xd5\x3a\x9d\x5d\xbf\x18\x68\xca\xd7\x34\xc6\x47\x36\x62\x53\xa8\xd9\x86\x46\xf2\x2c\xbb\xc9\x2f\x2a\x97\xeb\xab\x45\x79\xc3\xaf\x8a\xf2\x53\x23\xff\x6a\x5a\x14\xa4\x86\xba\xb8\x2a\x17\x9f\xb2\xc5\x78\xf9\xf0\x3f\x3e\xe6\x5f\xc8\x98\x7e\xc9\xba\x05\xbf\x4a\x21\xfe\xf2\xf5\x6e\xba\xac\xfc\x60\xba\x1e\x2a\xdb\x55\x6a\x0f\x0f\x5d\xe9\x87\x25\xe2\xf8\xfa\xaf\x0d\x07\xe5\x21\x47\x8c\x3a\xad\x98\xce\xd6\x77\x59\x2d\xb8\x96\x0f\xc7\x80\x9f\x70\x9a\x80\xab\x69\xb1\xca\x17\x28\xbd\xbf\xa8\x04\x04\xf2\x4f\x20\x4f\xee\x0f\xc9\x6b\x90\xa5\x7d\x33\xcf\x96\xcb\x4f\xe5\x62\xfc\x61\x40\x01\x76\x2c\xae\x55\xfe\x79\xf5\x38\x3c\x6b\x77\xef\xdd\x7e\xf8\x89\x15\xa8\x9b\xde\xef\xc9\xf1\x85\xab\xa6\x1f\x53\xf0\xa8\xb6\x56\x0c\xfe\x29\x2d\x6d\x15\x3d\xbc\x9d\x55\xb1\xa3\x5a\x89\xc0\x27\xb5\xb1\x51\xf0\xf0\x16\x52\xa1\x03\xdb\x77\xf0\x22\x7e\x04\x96\x43\x5a\xbe\x7f\xe1\x36\xe5\xb9\x2d\x6d\xdc\x06\x52\x35\xa0\x9f\xbd\xc1\x9e\x06\x8e\xe2\x70\xf4\xf1\xf6\x33\x2b\x8c\xcd\x8c\x35\x2e\x72\x5e\x23\xf6\x6a\xcf\x76\xda\x0e\x93\xd0\x0f\xe5\xaf\x6b\x69\x64\x6e\xd9\x03\xdb\x20\x7a\xc8\xbb\x2b\xba\x91\x35\xb8\x70\x87\xf3\x7b\x68\x5b\xcb\xf0\xeb\x76\x67\x49\x27\x44\xe5\x4b\xb9\xdb\x9f\xaf\x45\xbb\x1b\x30\xb5\x61\xc3\x8b\xc7\x50\xed\xd7\x49\x09\xbb\x46\x50\xf3\xdc\x74\x95\xd4\x11\xfa\x07\xee\x1e\x2e\xa7\x33\x3c\x92\x93\x36\x7c\xa2\x06\x61\x10\x2f\xab\x42\x7d\x34\x61\x26\x79\x56\xa0\xbc\x8c\x8c\x56\x75\x77\xd9\x4a\x2a\x6f\x57\xf3\xdb\x55\xf3\xba\xed\xc0\x12\xf5\xd1\xb8\x4d\x6b\x0f\xc9\x1d\x1e\xb2\xa2\x28\x3f\x1d\x0c\x3d\xce\x67\x5f\x0e\x06\x6e\xc4\xa8\xd9\x5b\x66\x35\x86\x71\xbe\x5c\x4d\x67\x15\xab\xb7\x15\x6a\xeb\x95\x4e\x57\x4b\x8f\x83\x3c\xce\xaf\xa6\xb3\x8a\x2d\xa3\xb8\x22\x38\x8e\x7f\xbc\x48\x1c\xd5\x7a\x6c\x2f\xc4\xc1\xc8\x1a\x30\x1e\x2d\xbb\x35\x7c\x1f\xd1\x3b\x58\xad\x42\xfd\x4e\xa2\x7a\xec\xe6\x43\x2a\x8a\x70\x30\x47\x70\x38\x3c\xd2\xc4\x43\xa0\x77\x93\xaa\x9d\x45\xd7\xcb\x7f\x27\x54\xda\x10\xa3\x6c\x9e\x36\xdc\x01\xb0\x1b\x85\xc1\x61\xd0\x3b\x2e\x01\xb6\x14\x99\x1c\xa4\x86\xa7\xc5\xf2\x27\x08\xc3\x52\x91\x49\x32\x41\x6b\x10\xc8\x2a\x79\x32\xbd\x9e\x90\xf1\x50\x3f\x0b\xb7\x50\x3f\xb5\x52\xd3\xdc\x64\xb3\xec\x3a\xc7\xf1\xea\x83\x54\xb6\xb7\xfd\x8c\xca\x4e\xb6\x91\xd1\xe3\x97\xaa\x95\xf7\x87\x8c\x0d\x43\xdb\x88\xee\x12\xd7\x64\xa8\xd2\x25\xb4\xd9\xb8\x46\x0c\x95\x66\x7a\xea\x7a\x5f\x67\x50\x64\x1b\x95\x41\x8f\xea\xee\x06\xaf\xcd\x89\x5a\xbd\x6a\x85\x5f\x3b\xa8\x7c\x76\x18\xd8\x31\x28\xa9\xaf\xb5\x93\x7f\x7d\xf1\x35\xa8\x52\xfc\x78\x07\xf9\x78\xba\x3a\xfb\x80\xc4\x66\x10\xa2\x52\x19\x2e\xa1\x36\x64\x81\x9b\x7c\x95\x21\xd4\x19\xd2\xc3\xec\x92\xd7\x2c\x51\x83\x35\x1a\xe0\x7c\x53\xa3\x7a\x5c\x6b\x2f\x79\x43\x5c\x29\xb1\x26\x84\xf4\x47\x75\x88\x6e\x74\x3d\x44\x97\x58\x59\x90\x3a\x29\xc1\xb4\x69\x62\x23\x69\x43\xfa\x5a\x89\x2d\x0a\xd7\xcc\x99\x3c\xc7\xe0\xf9\x33\xc5\xe0\xd9\x25\x7c\xa8\xb6\xf0\xb1\x5d\x76\xf8\x7a\x40\x6c\x90\x1d\x61\x65\xd4\xd3\x08\x39\xbf\x8f\xfc\xf2\x2c\x8d\x6c\x93\x46\x9e\x92\xcf\xdf\xc6\x72\x3f\x33\xbe\x8f\x65\x7c\x0f\x67\x65\x5f\xf7\x78\xab\x3f\x16\x7f\x37\xc4\x2a\x3d\x73\x42\x7f\x2a\x4e\x68\x07\x97\x73\xc4\x79\x55\x3b\x42\xbd\x78\x38\x41\x97\xf5\xc7\xd0\xc1\x7c\x0f\x7a\x93\xef\x45\x3f\x72\x92\x0a\x60\xf2\xe7\x10\xd4\xff\x90\x32\xef\x3e\x01\xf7\x48\xa1\x68\x58\x02\x7a\x96\x73\xfe\x54\x72\xce\x6e\x8a\x9f\x7c\x62\x37\xf4\xfe\xa9\x64\x88\xdd\x5c\xf3\x5e\x06\xf9\xf1\x2c\xe1\x86\x67\xdb\x7f\xba\x37\x8f\xd3\x1d\xf7\x5a\x9a\xa4\xb5\x3f\x89\x90\xf4\x3d\x33\xb2\x4f\xc6\x6d\xed\x98\x4c\xfb\xa4\xa2\xf7\x63\x65\xcd\x3f\xf0\xa5\xd6\xf3\x9d\xd5\xf3\x9d\xd5\xb7\x13\xca\xff\xf8\x8c\xe6\x7f\xc7\x4b\x97\x67\x95\xc2\xd3\x89\xf9\x8f\xbc\xe3\x78\x2a\x6b\xe9\x67\xc6\xfe\xbb\x64\xec\xb7\x1a\x60\x9d\xa2\xc1\xf9\x26\xca\x82\x5d\xa2\xea\x4e\x31\x74\x47\x07\xdb\xc6\x61\x6c\x22\x09\x27\x7c\x9c\xce\xc6\xb5\x1f\xed\x53\xf8\xb5\x1f\xce\x0c\xe6\x37\x8f\x2a\x5e\xd9\xaa\xa1\x5c\x45\x4d\x25\x74\xf8\xd7\x7c\x51\x5e\x4d\x8b\x7c\xaf\xe8\xb5\xd7\x4d\xfe\xd0\x55\x50\xbc\x1e\x9f\xe6\xe8\x7e\xfc\xd3\x66\x07\x08\x44\x87\x49\x4d\xd5\x13\x6b\x07\xca\x58\xf3\x43\x84\xab\x83\x04\xb0\x43\xeb\x25\xe0\xbd\xd5\x36\x86\xe8\x18\x89\xee\xd0\x46\x34\xcb\x0c\xb5\xa5\x21\xa6\xa7\x13\xa7\x11\x21\x85\x0d\xae\x89\x46\x89\x61\xd0\x2d\x9e\xef\x27\xbc\xa3\x55\x6d\x9c\x75\x90\x98\x83\xa4\x95\xf1\xf4\x6e\xc8\x05\x3d\x5f\x96\xc5\x5d\xbe\x58\x36\x2e\x75\x86\xfd\xd4\x77\x42\x2c\xe7\xc5\x74\xb5\x6a\xa3\x39\xc4\x89\xbd\xd6\x76\xcc\x68\xe7\x4d\x8b\xf1\x8f\xea\x45\x1b\x62\x7e\xf0\xa3\x7f\xed\x97\xfd\xf0\xf0\x24\x69\xfe\x75\x4d\xa0\xbb\x92\xcf\xbc\x29\x9a\x0c\x0c\x69\x43\x6e\xa1\xb1\x3b\xd4\xc5\x7b\x8f\x08\x83\xc4\xec\x5b\x8a\x3c\x07\xe2\x3f\x49\x40\x3a\x10\xf7\x63\x85\xa9\xbd\xd5\x3c\xf6\x02\x35\x2d\x92\xbf\xed\xad\x67\x7e\x20\x13\x70\x28\xaf\x30\x3f\x4a\x80\x1a\x5a\x93\x47\x88\x5f\xb4\x68\x9b\x7a\xad\x8e\x96\x6b\x43\x2a\x5b\xc9\xf3\xbe\xd6\x6b\x40\x0f\xd6\x2b\xbc\xc9\x9a\xb7\x74\x63\x6d\x45\x59\xaf\x18\xa5\xce\xb7\xeb\xcd\x76\x68\xd4\x7a\xb8\xfa\x20\xf3\xae\xb6\xad\xa7\x7d\xeb\x21\xa9\x33\xe6\x5d\x7d\x5c\x4f\x3f\xd7\x2b\x5a\x67\xcc\x77\xbd\xf5\xb9\xcf\x6d\xbf\x2f\x1f\xe3\x2a\x7d\x9c\xd4\x3c\xb0\x90\x8e\x59\x43\x5b\x9f\x9d\x9b\xce\xf1\xf0\x2a\x3f\x27\xe5\xe4\x6a\x92\xdf\xe4\xff\xe7\x55\xf5\x08\x11\xd2\x02\xca\xaf\x3c\x0c\xf7\xbd\x52\x57\xbd\x68\x7a\xc0\x93\x75\x4d\xc1\x1a\xc7\xa6\x27\x68\xef\x73\xf6\xef\x8b\xb1\x2d\xcf\xc8\xfe\x68\xed\x29\xb0\x43\x96\x1e\x82\xa3\x8e\x0c\xb9\x5f\x7e\x5f\x8f\xed\x0d\x89\xec\xf9\xcd\x31\x92\x7c\x1b\x7a\x97\x78\xdf\x86\x1c\xba\xd8\xdf\x50\xec\xf4\x6c\x6d\x5b\x60\xea\x88\x4f\xf4\x04\x2c\xa3\x37\xa8\x48\x10\x4a\x23\x7e\xa2\x50\xdd\x5f\x0e\xa7\x4a\xe7\xb8\x99\x4e\x15\x79\xb7\xb5\xe2\x04\xe1\x79\x3c\xbd\xfb\xba\xdd\x4d\xb4\xe1\x60\x3a\x78\x0b\x76\x94\x98\xf5\x78\x61\xe6\xe9\xc4\x93\x6f\x25\x71\xcc\x77\x33\xf8\x3b\x0e\xe0\xc3\x4e\xda\x5d\xc7\xe9\x69\x07\xe7\xfe\x53\x71\xff\xe1\x37\xff\x26\x44\xb1\xde\xb6\x7b\x95\x39\xc7\xe9\x3a\x4e\xd2\x3c\x74\x75\x0d\x8f\x54\x19\x1c\x2b\xfd\x3f\xa5\x00\x7a\xa0\x70\x78\x92\x9c\xb5\x53\xaa\x1a\x10\x9c\xfe\xf4\x17\x3c\xdf\x4a\x1a\x48\x63\xf9\xc8\xeb\x13\xc2\xd1\xe7\xb7\xfa\xd7\x14\x2d\xc6\xe4\xe9\xb4\xf7\x5b\x0f\xec\xc7\x9f\xd3\x8f\x3a\x5e\xe9\x50\x3c\x54\xc1\xfa\x2f\xd4\xa1\xb6\x54\xa0\x4f\xa3\x86\x7c\x84\xc6\xf0\x28\x35\xdf\x36\xad\xdc\xd3\xe9\xbb\xfe\x70\x8a\xac\xbe\x4e\x6a\xb7\x02\xea\x5f\xaa\x70\x3a\x4e\x7d\x74\x98\x3a\xe8\x64\x05\xcf\xf1\x5a\x9a\xc7\x68\x55\x76\xab\x45\x76\x28\x3d\x86\x75\x1a\x07\xa8\x2a\xb6\xaa\x1f\xfa\xca\x85\xa7\x56\x25\x3c\x5a\x65\xf0\x4d\xd5\x00\x47\x49\xfe\x4f\x2d\xe7\xff\xd1\x04\xf0\x41\x39\xbb\x25\x50\x0f\xcb\xce\x4f\x2c\x09\x3f\x81\x34\xbb\xe3\xec\x0d\x74\xf6\xf6\x69\xed\xfa\x01\x67\x9e\xde\xb6\xe1\xa3\xe9\x62\x54\xe4\x5c\x3a\xbe\xbc\xbb\xbe\xb8\x5d\x14\x3f\xfe\x1b\x2e\xc8\x8b\xe9\x4d\x76\x9d\xff\xb4\xbc\xbb\xfe\xdb\xe7\x9b\xe2\xe5\x68\x92\x2d\x96\xf9\xea\xd5\x7f\xfd\xcf\x5f\x78\x38\xff\x79\x79\x77\xcd\x3e\xdf\x14\xb3\xe5\xab\xb3\xc9\x6a\x35\xbf\xf8\xe9\xa7\x4f\x9f\x3e\xc1\x27\x0d\xe5\xe2\xfa\x27\x25\x84\xc0\x82\x67\xec\x6a\x5a\x14\xaf\xce\x66\xe5\x2c\x3f\x63\x78\x9e\xff\xbd\xfc\xfc\xea\x4c\x30\xc1\xa4\x63\xd2\x9d\xbd\xfe\xf9\xba\x02\xf9\x8b\xd2\x42\x88\xb3\xd7\x3f\xa7\x10\xf2\xaf\xce\x7e\x0d\xcc\x64\xe0\x2d\x78\xcb\x04\x13\x32\xfd\x7a\xa7\xc1\x36\x53\xb9\x04\xcb\xc4\x1d\xd7\x60\xdf\x34\x92\x03\x33\xf7\xbf\x06\x26\x45\x26\x99\xc4\xda\x84\x60\x6a\x02\x42\xf8\x4d\x02\x57\xef\xc2\xfd\xd9\x4f\x55\x8d\x14\xa9\x6a\x71\x5b\xe4\xaf\xce\xf2\xbb\x7c\x56\x8e\xc7\x67\xd4\x0a\xc1\x42\x16\x58\xc0\x22\x52\x3a\x26\xde\xa4\x3f\x84\x14\x2c\xdc\xdf\x04\xee\xc0\x66\x0e\x2c\xc3\x9f\x54\x8f\xd4\x6c\x93\x20\x84\xe0\x52\xdf\x9f\xb1\x51\x31\x9d\x77\xf0\xff\xf4\xfa\xe7\x9f\xae\x5f\xff\x8c\x03\xf5\xfa\xdf\x5e\xac\x1f\xf5\xbe\xc9\x96\x1f\x39\x8d\x7d\x35\xa5\x03\xb3\xf4\xe2\xe5\x41\x50\x0f\x87\x5b\xd5\xad\xc3\xad\x9d\x68\x5c\xb7\xb7\xfc\x7e\x1b\xbb\x35\x8a\x6e\xf4\xff\x8a\x7a\x60\x91\x7c\xbc\x86\x3a\xf0\xe8\x7a\xbd\x2e\x70\x0c\xec\x16\x62\x5b\xef\x9d\x23\x6d\x92\x6a\xb4\x27\xd0\x8f\xd7\xed\xb2\x6d\x92\x31\xbe\x28\x67\xc5\x97\xc4\x37\x21\xa7\x9c\x44\xcc\x75\x23\x07\x8b\x1c\x00\x73\x68\x9b\xbe\x72\x14\xe1\xef\x16\xe5\x8c\x8f\xcb\x4f\xb3\xdf\x89\x82\xac\xb7\xef\x9a\x88\x6c\xdd\xcc\x1a\x94\xb6\xcc\x82\x12\x2d\x22\x22\x41\x38\x10\xfa\x7d\x60\x11\xa4\x0d\x85\x06\x2f\x2c\xd7\x10\x95\xee\x80\x45\x26\x41\xe8\x82\x1b\x50\x96\x99\x1e\x29\x12\x91\x89\x94\xc9\x3b\x99\x20\x34\xe6\xbb\xed\x94\x20\x51\x81\x87\x1f\xea\x28\xbc\x78\xee\x67\xd3\x19\x9e\x7d\xc5\x74\xf6\x91\x41\x9d\x81\x7f\xad\xa7\x2f\xfb\xc7\x22\x2f\xfe\xfa\xaa\xd6\x23\x7e\xd8\xcc\xcc\x5a\xb5\x88\xf0\xdf\x1d\x71\x8f\x0c\x7c\x8b\x62\x47\xfa\x65\x62\xc0\x8e\x40\x09\xc7\x04\x03\x1d\x35\x88\xa0\xc1\xaa\x08\x4a\x86\x02\x04\x8e\xa3\x50\xd5\x8f\x7c\x03\xde\x04\xfc\x49\xb3\x63\x11\xe5\x5d\x7f\x52\x2c\x13\xbf\x29\xb0\xee\xbd\x07\x15\x58\x00\x1f\xba\xb3\xe6\xe8\x53\x38\x50\x8a\xe3\xe7\x5d\xec\x36\x0e\x51\x6f\xce\x8a\x6a\x29\x59\xd6\x3e\x8c\x04\xaf\xce\x28\x0f\x76\x24\x18\x18\x69\x40\x6b\x97\x12\xc1\xdb\x89\x6f\x83\x83\xb7\x58\xe2\x8e\x9b\xf6\x2a\xc3\x03\xcd\xbc\x51\x58\x01\x7d\x28\x15\xa1\x99\x34\x13\xee\xc1\x76\xf3\x98\x94\x84\xa7\x9f\x45\xad\x54\x93\x56\x05\x82\x49\xb0\x13\x6e\xee\x3b\x07\xd0\x03\x8c\xf2\x45\x15\x52\x33\xaf\x39\xe6\xe5\xa4\xfc\xb4\x5e\x6c\x89\x4f\x5a\xe4\x77\x79\x96\xac\xaf\x1a\xac\x44\xfe\xe5\x3b\xe1\x20\x06\x37\xff\xc0\x9e\x6b\x71\x1a\x36\xd3\x4c\x57\xe7\xb7\x63\xe9\x77\x3c\xba\xdd\xfd\xaf\x78\x8e\x87\x0c\x67\x45\xa6\x23\x5e\x12\xe0\xfa\x6f\x21\xb9\x66\xa2\xbd\x38\x02\x53\x6f\x2d\x18\xa5\x98\x62\x1a\x8c\x66\x1a\xb4\x62\x0a\xa4\x54\xcc\x80\xb3\x6f\xa4\x80\x68\x90\x3f\xa1\x7f\x68\x31\xd8\xe8\x90\x67\x70\x66\xc4\x41\x7a\x0d\x2a\x70\xd0\x12\xac\x76\x1c\x8c\xf0\xe0\xeb\x36\xe2\x3a\x93\x4a\x81\x96\x6f\x41\x18\xe6\x91\x58\x31\xc1\x3c\x04\x83\xdb\x26\x2c\x41\x18\x09\x2a\x3a\x10\xce\x83\x6e\x94\xab\x8a\x8d\x40\x44\x0f\x4a\x5a\x50\xda\x80\xf1\xb2\xc2\x2f\x41\x1b\x6c\x01\x04\x6b\x98\x04\x65\x1c\x76\x11\x87\x19\xa2\x34\x6f\xa9\x23\x52\x81\x0b\x2c\xf5\x4d\x1a\x16\x98\x34\x4b\x03\xd6\x73\x89\x3d\xb4\x10\x42\xe0\x0a\x9c\xcd\xb0\x6b\x56\xb1\xea\x1f\xac\x9d\x70\x71\xc2\x35\xc2\x1e\x72\x50\x01\xb4\xe4\xd8\x45\x6c\x01\xed\x1e\x61\x02\x07\x29\x3c\x88\xc8\x41\x49\x85\x4d\xa6\x71\x10\xca\x71\x10\x01\xfb\xc4\x41\x29\x99\x7e\xd1\xde\x2d\x39\xf6\x97\x63\x87\x79\x9d\x68\x33\x05\xd1\x07\x96\xbe\xeb\x21\x43\x44\xcc\x81\xf7\xbe\xfa\xa6\x9c\xaa\x6e\xc9\xfa\x6d\xe6\x8d\x46\xbf\x95\x0a\xac\x4f\x53\x29\x05\x58\xc4\xcf\x02\x53\xf7\xbf\x4a\xb0\xd6\x31\x0f\x51\xeb\x0c\x07\xd8\xb0\xf4\x4d\xe8\x85\xc6\x66\x15\xd5\xbf\x23\x10\xce\x82\x34\x16\xa4\x07\x6d\x0c\x68\xe9\xc0\x86\x2c\x82\xb1\x8c\x3e\x69\xac\xb4\xc0\x71\x77\xc6\xbf\x45\x22\xa2\x70\x8b\x1b\x8b\x23\x1f\x9d\xc1\x59\xb0\x38\xf6\x0a\xec\x52\x83\x73\x01\x09\x98\xc1\xb5\x15\x94\xe2\x0a\x09\xe8\x10\x42\x8e\x08\xdd\x1b\x8b\x54\x89\xa5\x2f\xe5\xe1\x22\xd0\x2c\x64\x98\x64\x59\xfa\xa6\xb6\x6b\xe3\x38\x38\x13\x08\x91\xaa\xbe\xd5\xc0\x68\x61\x13\xc2\xb7\x52\x62\x1b\xf0\x3c\x34\x34\x34\x42\x3b\x24\x8d\x2c\xe0\xf7\x3f\x53\xfb\x53\xa6\x06\xe9\xb1\x13\xbe\xd7\x40\xbe\xe9\x32\xb5\x4d\xd6\xdf\xaa\x21\x34\x4a\x07\x91\xac\xc9\x74\x9c\x0f\x93\xac\xe9\x6c\x7e\xbb\xba\x20\x66\x26\x1f\xff\x6d\x80\x80\x95\x57\x57\x7f\x58\x22\xa6\xf0\x74\x93\xa0\x54\xeb\x44\xc2\x7d\xc2\xe8\x74\xc3\x39\xc2\x6d\xed\x2a\xf2\x13\x59\xfa\x12\x61\x88\xde\xe3\xd2\x8a\x48\x7c\x54\xb4\x80\x1b\xca\x2a\x03\x3e\x4a\x0e\x2e\x68\x26\x41\x0a\x9d\x19\x90\x8e\xd1\xa7\xda\x53\xd1\x80\xd1\xf2\x8d\x04\xc4\x9c\x16\xbc\x60\x01\x0f\x3f\x69\xed\xbf\x98\x0e\x8d\x24\x18\xec\x8e\x02\x1f\x90\x66\xd2\x72\x0b\x69\x6f\x78\x59\x48\x08\xb8\xb7\x21\x58\xb9\x19\x21\x29\x36\xc7\x3f\x37\xe0\x8c\xa5\xaf\xcb\x40\x07\x8d\x3f\xf5\x1e\x16\x01\x3f\xfe\x0e\xbf\xb2\xe0\x1a\x64\xa4\x4f\x06\xd6\x5a\xfc\xa9\x01\xa5\xa1\xcf\xfb\xf5\x74\xdc\xdf\x68\x90\x0a\x87\x57\x99\xf0\x5e\x43\xc4\x1d\x26\x24\x2e\x7f\x63\x58\xfa\x56\x53\xe5\xa9\xbf\xc1\x7a\xe6\x41\x3b\x55\x7d\x13\x62\xeb\x1c\x44\x29\x47\x48\xed\x1c\x51\x47\x11\x40\x3a\x83\xd4\xd2\x20\x41\xfc\x56\x04\x66\x84\xb4\x97\xe4\x5f\x88\x96\x83\x72\x48\xdd\xbc\xd3\x1c\x9c\xf7\x05\x97\xa0\x34\x7d\xde\x46\x10\x9e\x8e\xb4\x60\x91\xcd\xb2\x38\xda\x12\x91\xc8\x7a\xe2\x25\xd7\x5c\x8f\xb0\x33\x56\x83\x34\x8a\x66\x26\x12\xfd\xc5\x83\x4e\xdd\xdf\x28\x88\x01\xd9\x97\x18\xec\x7b\x07\xd6\xe0\x48\x38\x11\xde\x48\x70\x38\x77\xd5\x68\xb8\xd4\xb8\xcd\x11\x2c\x90\x40\xd9\x11\x48\x8d\x34\x1d\x94\xc3\xe1\x91\x0e\x74\x54\x38\x5e\xfe\xfe\x57\x22\x45\x23\x4e\xbd\x16\x1c\x1c\x72\x90\x4a\x73\x08\xc1\xe3\xa0\x35\x56\x04\x1e\x25\x0a\x97\x84\x09\xfa\xad\x07\x7a\x3b\x1e\x84\x8a\xd8\x12\xe9\x13\xc9\x1f\x29\x22\xff\x02\xa9\x9a\x67\x9b\xa3\x8f\xe1\xd1\x07\xce\x29\xa2\x87\x12\x24\x65\xd2\xac\xae\xd7\x6f\x75\xb8\x57\x67\x7b\xb5\xe4\xf1\xdc\xab\x8e\xbd\xfa\xd4\xab\x0e\xbd\xea\xcc\xab\x8f\x3c\x3c\xf1\xa8\x8b\x92\xa7\xb1\x53\x78\xb2\x39\xb0\xda\x67\x06\xb7\xb3\xa9\xf6\x34\x76\xc3\x4a\xdc\xc4\xb8\xa5\x25\xe8\x60\x38\x58\x69\x71\x79\x71\x88\x24\xc9\x68\x6b\x5b\x1d\xc7\x06\x3b\x0e\x51\x8f\x40\x1b\xcd\xc1\x68\x03\x8e\x43\x40\x1e\x96\xf6\x91\x34\x06\x27\x99\x83\x34\x1a\xa4\xc6\x23\xdc\xe2\x2a\x44\x56\xc5\xa8\xac\x7b\xb0\xec\x3b\x3f\xdc\x21\xe7\xc7\xfd\x8d\x03\x2b\x25\xf2\x4d\xc2\x14\xb8\xff\x14\xed\xc7\x4a\x1a\xb0\xd5\xbf\xba\x77\x36\xfc\x80\x32\x69\xf5\x58\xde\x5a\x98\x42\x29\xb9\xe5\xff\xd2\x3c\x05\xce\xfb\xc2\x57\x8a\x60\xcf\x60\x39\xcf\x16\x1f\xc9\xf8\xe3\x63\xfe\xa5\x2d\x82\xed\x75\x79\x1e\x17\x6c\xbc\xa2\x83\xe8\x6f\xe3\x4e\x85\x5b\x0d\x45\x0e\x28\xb3\xff\x19\x4a\xb8\xcc\x27\xd9\xdd\xb4\x5c\xb0\xf1\xaa\x57\x7c\xff\xed\x53\xaf\x48\xff\xed\xc9\xfd\xef\x32\xee\x6c\xc3\x96\xc7\x0c\x0f\xe8\xc4\xde\x6b\xac\x6a\xcc\x2a\x75\xce\xee\x0b\xad\x3d\xb0\xdd\xab\xad\x36\xf8\x74\x76\x55\x6e\x71\x0e\xdd\x34\xf7\xf8\xf7\x2c\x87\xbb\xbd\xf3\x3a\xa7\xd2\x05\x4c\xf2\x62\xfe\xa1\xa1\x25\x3b\xc0\xbb\xa6\xdd\xa3\xc6\x1d\xcd\xa6\xe6\xd6\x06\x60\x13\xdd\xe0\xb0\x7a\xef\x07\xad\xb2\xd5\x6d\x75\x61\xd7\x59\xba\xdb\x60\xd3\x23\x05\x6d\x60\xd2\xb9\x0f\xf5\xa9\xe5\xdd\xd3\x6c\xfa\x57\x4e\x6f\xcc\x7f\x1f\x2c\x5c\x4b\x1c\xf4\x8f\xd0\x64\xd3\xe9\x65\x2a\xbd\xb5\xe8\x2a\xb2\xc5\x77\xa7\xc8\x7e\x38\xf4\x2d\xc8\x1d\x24\x69\xcb\x63\x88\x3b\x16\x52\xa5\xdc\x85\xc2\xd7\x17\x67\xd9\x62\x51\x7e\xea\x2b\x74\xfb\x05\x5e\xb7\x75\xbb\x5f\x39\x2f\xb2\x2f\xf9\x62\xf9\x5d\xad\xa3\x6d\xd3\xea\xc1\x59\x64\x12\xda\x77\x25\x2e\x44\x26\x0a\x9f\x74\x54\xde\x76\xd5\x3f\x5a\xab\x82\x0f\xe6\x72\x70\xa4\xc3\xc4\x4c\xde\x2b\xca\x53\xd1\x75\xe6\xfd\xaf\x8a\x98\x64\x03\xf6\x7d\x60\x1e\x8c\xb0\x4c\x6a\xe2\x93\x4c\xcd\xa3\x45\x92\x86\x13\xd0\xd6\xe5\xb3\xde\x2a\x20\xa2\x26\x1e\x32\xf8\x8e\xea\x55\xa1\x64\x62\xde\x23\xa7\x0f\x3a\xea\xc2\x21\x0c\xd7\x10\x9a\x2c\x0c\x78\x85\x4c\xa1\x96\xba\xea\x9f\x69\x77\xce\x2b\xb3\xee\x5d\x27\x4b\x45\x14\x67\x85\x8c\x6d\x55\x8e\x24\xa5\x0d\x32\x66\xba\x29\x36\x24\x54\xa9\xa6\x5e\x45\xa2\xaa\xa7\x5b\x4d\x2a\x86\xd5\x68\xa9\xdf\x27\x5e\x39\xea\x82\x3b\x52\x9b\x68\x18\x90\x6f\xe7\x8b\xf2\x7a\x91\x2f\xd3\xf3\x4c\x2b\x3c\x9b\x67\xd9\xaa\xb2\xce\xdd\x4d\x4c\x37\x34\xb1\x7a\x16\xe6\x1b\xac\x65\x02\xb9\xf8\x8c\xec\xd0\x10\xa0\x8c\x31\xfe\x44\xb9\x38\xef\xd9\x72\xf9\xea\x6c\xb9\x5a\xdc\x8e\x56\xb7\x8b\x9c\x4f\x47\x48\x18\x52\xd3\xce\x5e\xff\x4c\xcf\xac\xbc\x86\xe1\x7c\x7e\x99\x2d\xf3\xaf\xe5\x3c\x1b\x4d\x57\x5f\x2e\x40\x3e\x6c\x83\xab\x87\x6b\xf3\xdc\xcd\xc5\x16\xc8\xab\x6c\x36\xfa\xc2\x97\xf3\xe9\x8c\xe9\x25\x9b\xce\x28\x6e\x46\xce\xf0\x84\xcb\x16\x2f\xd7\x55\x29\xfb\x12\x89\xd5\xc7\x9c\x8f\xb3\xe5\x24\x5b\x2c\xb2\x2f\x17\x82\x19\xd3\x4c\x2d\xaf\xae\x96\xf9\xea\x42\xd4\x69\x88\x63\x94\xcd\x2f\x16\xe5\xed\x6c\x9c\x1e\xf2\x41\xee\x80\x97\x8b\xe9\xf5\x74\x76\x61\xc5\x5f\x98\x15\x7f\x69\x3e\x84\xb3\xb7\x8d\x5f\xc5\x5f\xbe\x1e\xdc\x8e\x07\x65\x07\xa0\xb5\x66\x52\x0e\x80\x73\x23\x1e\xec\x11\xe8\xb9\x94\xe2\xc1\x1f\x55\x83\xb4\xe2\x61\x55\x1e\x5e\x83\x52\xe2\xe1\x80\xe1\x59\x4e\x6f\xe6\x45\xbe\x1e\x9f\xf5\x40\x5f\x2c\xca\x55\xb6\xca\x7f\x14\xe3\xfc\xfa\x05\x56\xdc\xcb\xd1\x2e\xe5\x3d\xfc\xfc\x53\x5a\x77\x3f\x8f\xf3\xab\x65\xb5\xeb\x53\x83\x36\xaa\x98\xaa\x81\xf4\x52\xf6\xab\x33\xdd\xa6\xe0\xd3\xf1\xab\xb3\x2c\x51\x62\xa9\x98\x2d\x1c\xd3\x77\xa1\xe0\x8e\x69\xee\xb8\xfe\xad\xda\xd1\x09\xfb\xed\x32\x67\xb4\x1b\x2e\x26\x8b\xfc\x8a\x2a\xc8\xf6\x6c\x0c\x5a\xf8\x88\xe2\x94\xb2\xf5\x66\x68\x5e\x2f\xed\x3d\x9b\xc9\x54\x6d\xef\xf9\xdc\x31\x99\x65\xcd\xd2\x47\x1d\xeb\xa9\xba\xd6\xd1\x5e\x51\x31\x23\xf4\x6e\xe3\x85\xe5\xc7\xe9\xfc\xfb\xbf\x72\x0c\x4c\xd4\x6c\x17\xb2\x54\xae\x66\xbb\x44\x60\x82\x34\xc7\x2c\x34\xd8\x2e\xba\xe8\xb1\xda\x72\x0b\x22\xba\x82\x47\x90\x5a\x32\xfa\xbe\x71\x60\xbc\x62\xe9\x5b\x5f\x14\x85\xfb\x1b\x05\xc6\x91\x4a\x29\xba\x26\x22\x41\x85\x12\x82\x16\x9e\xbd\x37\x90\x87\x84\xc3\x62\xc9\x64\x29\x93\xf2\x4b\x05\xc8\x27\xd3\x71\xfe\xe1\x1c\x36\x53\x5c\x1d\x47\xac\x12\x74\xa0\x7a\xed\x2b\x2b\x8a\x17\xac\xc7\x71\x7d\xfe\x7e\x66\x32\xed\x65\xf0\x81\x19\x50\xa1\xa7\x4d\xa5\xcf\xfb\xc0\x1c\x44\x43\x10\x4c\x6f\x55\xba\xbe\x27\xa0\x50\x20\xb3\xa4\x90\xd7\x52\x5d\xd5\x23\xab\xb0\x45\x10\xae\xd8\x0a\x95\xea\x44\x18\x46\xb7\xd3\x8a\x10\xde\x37\x67\xed\x62\x51\x96\xab\x34\xd0\xf3\x45\x7e\x85\xec\xeb\xa8\x2c\xca\x05\x5f\x8e\x26\xf9\x0d\xd2\xd7\xc5\xc7\x17\x5f\x79\xb2\x32\xe3\x64\x96\xc7\x71\x5c\x2e\x28\x5e\x54\x56\xbc\xe4\x7c\x55\xce\x72\x7e\xbd\xc8\xbe\x70\x21\x44\x65\x55\xf2\x69\x32\x5d\xe5\x2f\xda\x99\xb6\xce\xac\xff\x6c\xe7\x4b\xd1\xca\x97\xa2\x9b\xdf\x2e\x2f\xbb\xe5\x55\xbb\xbc\xea\x96\xd7\xed\x7c\xdd\xcd\x37\xed\x7c\xd3\xcd\xb7\xed\x7c\xdb\xcd\x77\xed\x7c\xd7\xcd\xf7\xed\x7c\xdf\xcd\x0f\xed\xfc\xd0\xcb\x6f\xf7\x3f\x74\xfb\x1f\xdb\xe5\x63\xb7\x7c\x6c\x97\x8f\xbd\xf2\x31\x56\xf9\x97\x45\x36\xfa\xd8\xc8\xcc\xf3\xd9\x8e\xa9\xa5\xdc\x06\xee\xea\xef\x0e\x44\x73\x76\xab\xbf\xbb\x10\x1d\x1c\xb2\x87\x43\x75\x70\xa8\x1e\x0e\xdd\x81\xd0\x3d\x08\xd3\x81\x30\x3d\x08\xdb\x81\xb0\x3d\x08\xd7\x81\x70\x3d\x08\xdf\x81\xf0\x3d\x88\xd0\x81\x08\x7d\x88\xce\x78\x84\xde\x78\xc4\x0e\x8e\xd8\xc3\x11\x3b\x38\x62\x1f\xc7\x96\x59\xbf\xc4\x53\x76\xdb\xa4\xa7\xcc\x35\xee\xfa\xcf\x76\xfe\x66\xc6\xeb\x3f\x3b\xf9\xed\xf2\xb2\x5b\x5e\xb5\xcb\xab\x6e\x79\xdd\xce\xd7\xdd\x7c\xd3\xce\x37\xdd\x7c\xdb\xce\xb7\xdd\x7c\xd7\xce\x77\xdd\x7c\xdf\xce\xf7\xdd\xfc\xd0\xce\x0f\xbd\xfc\x76\xff\x43\xb7\xff\xb1\x5d\x3e\x76\xcb\xc7\x76\xf9\xd8\x2b\xbf\x65\x66\x17\xf9\x78\xeb\xc4\x52\xde\x1a\x6f\xf5\x57\x2b\x77\x33\xab\xd5\x5f\xed\xdc\x56\x59\xd9\x29\xab\x5a\x65\x55\xa7\xac\x6e\xe5\xea\x4e\xae\x69\xe5\x9a\x4e\xae\x6d\xe5\xda\x4e\xae\x6b\xe5\xba\x4e\xae\x6f\xe5\xfa\x4e\x6e\x68\xe5\x86\x6e\x6e\xab\xbf\xa1\xd3\xdf\xd8\x2a\x1b\x3b\x65\x63\xab\x6c\xec\x96\xdd\x32\x7b\xe5\x22\x9b\x5d\x6f\xdf\x99\x75\xf6\x1a\xf7\x26\xa1\x0b\xb3\x99\xc9\x4d\x42\x0f\xa6\x8b\x47\xf6\xf1\xa8\x2e\x1e\xd5\xc7\xa3\xbb\x30\xba\x0f\x63\xba\x30\xa6\x0f\x63\xbb\x30\xb6\x0f\xe3\xba\x30\xae\x0f\xe3\xbb\x30\xbe\x0f\x13\xba\x30\x61\x00\xa6\x3b\x3e\xa1\x3f\x3e\xb1\x8b\x27\xf6\xf1\xc4\x2e\x9e\x38\x80\x67\xcb\x8a\xf8\x92\x17\x45\xf9\x69\xeb\x8a\xa8\xb3\xd7\x35\x6c\x12\xba\x30\x9b\x15\xb1\x49\xe8\xc1\x74\xf1\xc8\x3e\x1e\xd5\xc5\xa3\xfa\x78\x74\x17\x46\xf7\x61\x4c\x17\xc6\xf4\x61\x6c\x17\xc6\xf6\x61\x5c\x17\xc6\xf5\x61\x7c\x17\xc6\xf7\x61\x42\x17\x26\x0c\xc0\x74\xc7\x27\xf4\xc7\x27\x76\xf1\xc4\x3e\x9e\xd8\xc5\x13\x07\xf0\x6c\x59\x11\xa4\xb7\x98\x67\x8b\x7c\xb6\x0e\xb9\xbc\x49\x59\x43\xdd\x65\xb7\xc5\xaa\x75\x0a\x22\x8e\x24\x10\x6c\x97\x05\xda\x16\xcc\xfb\x5c\x3e\xf6\xd8\x3b\xaf\xe5\x0a\xc4\x7c\x88\x58\xd1\xe5\x4c\xfb\x62\x45\x8f\xad\x95\x7b\xd8\x62\xb9\x87\xad\x56\x7b\xd8\x72\xbd\x87\xad\x37\x7b\xc4\x82\x23\xc5\x8a\x9e\x58\xe2\xf7\x88\x35\x61\x8f\x58\xd4\x11\x2b\xd4\x1e\xb1\xa2\x27\x96\xc5\x3d\x62\xdd\x66\x91\x0e\x0a\x0e\xcf\x62\xc5\xb3\x58\xf1\x2c\x56\x3c\x8b\x15\xcf\x62\xc5\xb3\x58\xf1\x2c\x56\x7c\xcf\x62\xc5\x70\xf6\x76\x6a\xb1\x4d\xa8\x18\x60\x76\x7b\x42\xc5\x00\xd3\xdc\x13\x2a\x06\x98\xef\x9e\x50\x31\xc0\xc4\xf7\x84\x8a\x01\x61\xe0\x24\xa1\x62\x40\x38\xe9\x09\x15\x03\x42\x4e\x4f\xa8\x18\x10\x96\x7a\x42\x85\x3a\x40\xa8\x18\x10\xde\x7a\x42\xc5\x80\x10\xb8\x8d\x5f\x3b\x4d\xa8\x28\xf2\x9b\x72\x56\x3d\x76\xb1\xd7\xe6\x7e\xaf\x1f\xd1\x70\xf4\x2b\xc8\x3e\xf5\x6d\x0e\xbb\x30\xb5\xc1\xe4\x7c\xca\xaf\xb3\x55\xfe\x29\xeb\xdf\x37\x0e\x17\xd9\x0b\xf6\xcf\x4f\x7d\x03\xc5\x2e\xcc\xc7\xdb\xcb\x7c\x31\xcb\x57\xf9\xfe\x86\xce\xca\x9b\x6c\xbc\x17\xaa\x9c\x8e\x47\x7b\x81\x56\xf9\x62\x91\xd1\xfd\xf5\x7e\xfb\xc7\x14\x54\x7f\x5c\xc0\x55\x36\x2d\xc8\x76\xb5\x7e\x02\x64\x37\xf8\x22\x1f\x4f\x17\xf9\x68\xb5\x1b\xfc\x5f\x6e\x5d\xb9\x19\xf0\xbd\x36\x96\x4f\x6b\x1b\xb9\xf7\xa2\xb3\xb2\x92\x1c\x2d\x1a\x93\xdc\x0c\x1c\x41\x31\x68\x04\xa7\xa4\xf9\xa2\xbc\x9b\xb6\x1a\xdb\x82\xbc\x2e\xcb\xeb\x22\x3f\x08\xf4\x66\x3a\x5a\x94\xcb\xf2\x6a\x75\x10\x74\xf9\x71\x95\x6d\x03\xec\xc4\x8a\xc0\xcd\xd7\x75\x72\xee\xc1\x54\x1e\xdd\x87\x81\x35\xf7\xe8\xde\x22\xff\xfc\xb4\xda\x0b\xb3\x59\x0b\x7b\x41\x69\xf3\xed\x85\xc2\x91\xd9\x0b\xb4\xde\x7c\x3d\x17\xf0\xab\x72\x41\xd1\x3a\x2e\xb3\x45\x15\x5c\xe3\xc3\x36\x7f\xdc\xed\xc6\xac\x87\x5b\x72\x7d\x23\x0f\xf0\xaf\x97\xd9\xe8\xe3\x35\xd9\x2a\xf1\x45\x3e\xcf\xb3\xd5\xc5\xac\xac\x7e\x7b\xd9\xc8\x9b\x97\x4b\x72\xdf\xbf\x18\xe5\xb3\x55\xbe\x18\x36\xaf\x67\xfd\xae\x10\x81\x81\xba\x76\xa0\x70\x36\x1d\xab\xfb\x63\x30\x8d\xa7\x77\x0c\x46\x8b\xe9\x6a\x3a\xca\x8a\x47\xa0\x20\xd3\x92\x47\x94\x4f\x21\xec\x9a\xc6\xd9\xc7\xe3\x48\x21\x15\x1e\x87\x63\x1d\x56\xe1\xb1\x68\x96\xcb\x69\xc3\xe4\xe7\x78\x0c\x55\x00\x9e\xdd\x18\xf6\xb8\x5f\x14\xe5\xf5\x74\x56\xed\xa5\xbf\xa5\xc8\x5f\x14\xcd\xa7\x1d\x1f\x62\xbb\x8b\x3c\x85\xb4\xb9\x6e\xbb\x67\x1c\xe9\x50\x7f\x92\x0b\xc8\x0f\x6b\x47\x86\x47\xee\x84\xc3\xf1\x6c\xd9\x07\x47\x22\xe8\xec\x82\x23\x4b\x0f\xec\x81\x23\x31\x0c\xec\x80\x23\x31\x0c\xaf\xff\xa3\x91\x74\x56\xff\x91\xe5\xbb\x6b\xff\xa9\x5d\x82\x2a\x5f\x1b\x06\x45\x39\xca\x8a\xe9\xaa\xcf\xf3\x9e\xe2\x40\xb4\xf5\xfd\xc5\x03\xca\x5e\xde\x8e\x3e\xe6\xab\xda\x75\x88\x66\x71\x37\xcc\x7a\x9e\x8e\xf6\x63\xea\x87\x05\x3b\x15\xc5\xf1\xe5\x90\x27\x3c\xc5\xf1\x2a\x1b\x8f\x17\xf9\x72\x39\xe4\xf3\xf4\x48\xb7\xad\x03\x8a\x93\x83\xf3\xa9\x75\xd7\x24\xe5\xc4\xe2\xc8\x2d\x27\x06\xe1\x44\x04\x44\x91\x4e\x2c\x4b\xfe\x69\xe3\xbc\xc8\x4e\x45\x70\x93\x2f\x27\x27\x16\x9d\x95\xe3\xfc\xd4\xa2\x3d\x22\x78\x44\xe1\x8a\x74\x9d\x5c\x7a\x75\x6a\x87\xe7\xe5\x62\x75\x6a\xd1\x45\xb9\x2a\x47\xe5\xa9\x6b\x6c\x59\x22\x5d\x39\xb1\xf0\x6a\x75\x6a\xb5\x75\x84\xc1\x63\x4a\xd7\xd1\xeb\x36\xbb\x6a\x48\x25\xb0\xa7\x70\xb5\x25\x4e\x28\xb9\x5e\x1c\xa7\x94\xed\x05\x63\x3c\x05\xcb\x7a\xd0\x8e\x2f\x8b\xc2\xd2\xab\x9b\xfc\xc3\x70\xd9\xb6\x86\xa4\xe8\xe8\x02\xb6\x80\x91\x56\xab\x07\x35\x10\xa0\xba\x9e\xaf\xa1\x48\xd5\x87\x94\xaf\x06\xfe\xd4\xe2\xd5\xa8\x1d\x54\x7c\xed\x3a\x9b\xc8\xfe\x4e\x02\xde\x85\xdd\x4a\x6c\xbb\x80\x3b\xa8\x4c\x17\x74\xc7\x36\x19\x0c\xea\x9d\xfc\x00\x5e\x27\x7b\x02\x12\x0a\x8e\x29\x47\x71\x78\x4f\x2d\x3c\xce\x67\x5f\x0e\x2c\xdb\x0f\xfe\x7b\x28\xf0\x1e\x97\x88\x83\x9d\xaf\x3b\x45\x90\x2b\xfb\x07\xf9\x7f\xfc\xef\x57\xe9\x00\xf9\x70\x4c\x91\x35\x3b\xb6\xb7\xd4\x31\x6e\x9b\x9d\x02\x29\x48\xf2\xb1\xa5\x1e\xe7\x81\xb2\x6f\x6e\x9e\xcc\x73\x65\x98\x2f\xde\x55\xa2\x1a\x8e\x63\x8b\x0d\xb8\xc8\x34\xde\x4d\x78\x02\x27\xfd\x03\x18\xec\x93\x91\x3e\x05\xa6\x41\x26\xfc\xa4\x58\x04\x3b\xd8\xf2\x27\x8f\x6d\x70\x12\xc2\xed\xac\xfb\x69\xe8\x76\x9c\x05\x27\x21\xdc\xcd\xde\x9f\x84\x72\xeb\x19\x74\x12\xb6\xdd\x22\xc0\x49\x28\xb7\x09\x05\x27\x21\xdb\x26\x26\x9c\x86\x6c\xab\xe0\x70\x12\xba\x1d\x87\xfc\x89\xf8\x86\x85\x8b\xd3\x90\x6d\x11\x37\x4e\x43\xb6\x43\x00\x39\x09\xe1\x76\x91\xe4\x24\x74\x5b\x84\x94\x93\x70\xed\xe0\xc7\x8e\xc0\x77\x88\x20\x73\x02\xba\xad\xa2\xcd\x09\xb8\x76\x08\x3b\xa7\x60\x3b\x44\xfc\x39\x01\xef\x0e\x81\xe8\x78\x6c\xbb\x44\xa4\x2d\xb1\x75\xf6\x12\xf1\xed\xe5\xb6\x93\x9b\xed\x65\x06\xd5\xb3\x87\x87\xff\x39\x80\x35\x39\x18\xc9\x29\x25\x07\x59\x8f\x83\xa2\x16\xed\x60\x35\x4e\x8f\x7a\x74\x0c\x82\xed\xac\xc4\x61\xc5\x77\xb0\x0e\x07\x21\x38\x69\x95\x1d\xa8\x0b\x3c\xa8\xf4\x6e\x56\xe0\x20\x14\xdb\x8e\xfe\x83\x0a\x6f\x3b\xea\x0f\x2b\x7c\xec\x5e\x3b\x58\x2b\x78\x60\xf9\xe1\xa3\xfb\xb0\xc2\x5b\x8e\xea\xc3\x0a\xef\x38\x9a\x0f\x42\xb0\xfd\x28\x3e\xa8\xf8\x96\xa3\xf7\xa0\xb2\x3b\x8e\xda\x1d\xe5\x0f\x39\x5a\x0f\x28\xbe\xf5\x28\x3d\xa0\xec\x8e\xa3\xf3\x90\xd2\x87\x1c\x95\x07\xe0\xd9\x71\x34\xee\x2f\x7d\xd0\x51\xb8\xef\x54\xea\x3e\xb1\xb4\xc9\x5b\x3f\x0c\xb5\xd7\x0c\x69\xff\x9b\x71\x74\xaa\xc3\x34\x3d\x02\x70\x97\xbf\x6e\xd9\x46\x1d\x50\x34\x25\x57\x61\x6c\x3f\x9c\x5a\xfc\x76\xb1\x20\x3b\xa7\xd3\x8a\x27\xeb\x98\x56\xf5\xcd\x60\x1d\x70\x99\x91\x32\x73\xf6\x71\x4b\xfe\xb8\xac\x2e\xde\xb7\xe4\x17\x79\xb6\x98\xed\x00\xe8\x8e\xfa\xd5\x22\xcf\x57\xf9\xe7\x15\x4f\x2f\x84\xfd\xbf\x95\x89\xcb\xe6\x4d\x8a\xd6\xfb\x51\x9b\x72\xbd\xd7\x2a\x36\x2d\x63\xd9\xf6\x37\x2d\xe0\x2a\xcf\xc7\xeb\x3e\xee\x84\xdc\xf4\x64\x17\xd8\x96\x67\x39\x5e\xad\x16\xb7\xf9\x87\xa3\x9e\xea\xf8\x5d\x1e\xf7\xd8\x53\x7e\xa8\x53\x4f\xf9\x60\xc8\xe9\x28\x76\xb6\xec\xa4\xd0\x8e\xc3\x8f\x95\x0c\x43\x6d\xcd\x7e\x8c\xca\xee\x44\x5c\x8f\x40\xd0\xe6\x92\x4f\x88\x75\x39\xc4\x2c\x3f\x55\xc8\xcc\x13\xf0\x0c\xb0\xce\xa7\x60\x19\xe2\xa0\x4f\xc0\xb3\x85\x91\x3e\x01\x53\x9f\x9f\x3e\x01\xc9\x16\xb6\xfa\x04\x4c\x3d\xee\xfa\x04\x1c\x3d\x26\xfb\x14\x1c\x7d\x5e\xfb\x04\x2c\x43\x2c\xf7\x49\x68\x56\x8f\x1e\x94\x1e\x03\x7e\x0a\x8e\x21\x3e\xfc\x04\x3c\x03\xec\xf8\x09\x58\xba\x5c\xf9\x09\x28\x86\x98\xf3\x83\xd1\xec\xe4\xd1\x8f\xc6\xd2\x67\xd5\x8f\x46\x31\xc4\xb1\x1f\x8f\x64\x27\xe3\x7e\x34\xba\x21\xfe\xfd\x58\x24\x83\x6c\x7c\xe3\x5d\xe4\xad\xbc\x73\x17\x66\x1b\x93\xbc\x05\xae\xc7\x0d\x0f\xc3\x0d\xb0\xbd\x07\x3d\x59\x0c\x57\x65\x71\xb8\xb3\xc2\x70\x58\xe6\xde\x7b\x67\xec\xa8\x17\xcd\x8e\x79\x31\x79\xfb\x28\x1f\x8b\x64\xeb\x34\x9c\x88\xa8\x3f\x4f\xa7\x21\x1a\x9c\xc8\x23\xdf\x93\xdb\x5b\x60\xfd\xd4\x48\xa7\x60\xf3\xd9\xd4\xcd\x92\xe8\xbe\x9a\xda\xcb\x69\x07\xe4\xde\xf6\x66\x6a\x0f\xa2\x7a\x32\xb5\x97\xde\x33\x5a\x7d\xec\xe2\x78\x8a\x75\xf1\x14\x4b\xe2\x49\x56\xc3\x53\x3d\x2c\xb8\x6d\x0d\x74\xdd\x4c\xd2\x5d\xff\xfa\x7c\xd9\xe7\x95\x92\xc0\xd3\x41\x72\x18\x6c\x7d\x62\x1c\x06\x5d\xd3\xf2\xfd\xd0\xb7\x45\xdf\x73\xe7\x94\x20\x90\xbb\x42\xcc\x1f\x14\x12\xb4\x01\x66\x76\x82\xad\xb2\xda\x0a\xbb\xb1\x59\xb6\xc6\x07\x27\xf3\x8b\xe3\x42\x8a\x93\x5d\x51\xb7\x77\xdf\x30\x62\xf9\x0e\xd8\x59\xb9\xe2\xe3\xfc\x6a\x3a\xcb\xc7\x47\xd6\xd2\x28\xb9\xbf\xba\x27\x0a\xf9\xbf\xf7\xd9\xcd\x6d\x00\xc3\x62\xfc\xba\xd0\x41\x6f\x40\x6d\x7f\xde\x6e\xef\x13\xcb\x3d\x40\xb2\x36\xec\x82\x36\xf4\x11\xbd\x7e\xd5\x16\x7f\xfb\xb4\x0d\x35\x5c\x8b\x7f\xe8\x00\x1d\xf5\x36\xe9\x4e\x0d\xd3\x69\xaf\x9c\xb6\x4a\x75\x1c\xd2\xc8\x0f\xae\xe2\xf5\x36\x51\x86\x92\x2f\x50\x59\x20\x99\x68\xa6\x64\xed\x72\xdb\xb8\xa9\xad\x0f\x42\xec\x7e\x70\xf5\x28\xfe\xe9\xc4\xa7\x9f\xb7\x9e\x96\x8f\xc2\xb7\xe5\xf4\x7c\x0a\x9c\xdd\xd3\xf4\x09\x70\xf6\x4f\xd7\xc7\xbf\x83\x7b\x60\xd9\x2d\xa7\xef\xee\x47\x6f\x4f\x58\x17\xc7\xbf\xe4\xbd\x67\x61\x9c\x8a\x70\xe7\xca\x78\x24\xd2\xe1\xa5\xf1\x38\xa4\xdb\xd6\xc6\x69\x0f\x12\x1f\x59\x78\xdb\xea\x18\x23\x8b\xd0\xd4\xff\x7d\x6d\xbd\xcd\xdd\xf3\x92\x6d\xe5\x76\xfc\x64\x5f\x0e\x17\x19\x04\x6d\x78\xdb\x52\xbc\xb6\x8b\x6a\xc8\xdf\xe2\x1f\x03\xa1\xdb\x1b\xb6\xac\x89\xa4\xf6\xd9\x9a\xbd\xf6\xaf\x07\x3d\xaa\x54\xb9\xba\x0d\x46\x06\x28\x6f\x57\x79\xca\xaf\xdd\xc7\x52\x5b\xd6\x87\x62\x7a\xa2\xfe\x53\x4e\x32\x4d\x15\x71\xe2\xcb\xbc\xac\x52\xf8\xac\x5c\xdc\x64\xc5\x8b\x7e\xe7\x17\xd7\x97\x3f\x56\xe0\xcd\x20\x70\x2f\x5e\xbc\xbc\x9b\x2e\xa7\x97\x53\xf2\x83\xa3\x5f\x8b\xfc\xe5\x3c\x1b\x8f\x51\x98\x11\xcc\xcc\x3f\x3f\xfb\x26\x3f\xfb\x26\x3f\xfb\x26\xd7\x85\x9e\x7d\x93\x4f\xc3\xf0\x67\xf5\x4d\x4e\x4f\xe3\xd0\x41\xb9\xca\x2e\xf9\x2c\xbb\x63\xb7\x9b\xab\xf2\x27\x0b\xee\xf3\xec\xfb\xfc\xec\xfb\x7c\x42\xe9\x67\xdf\xe7\x67\xdf\xe7\x67\xdf\xe7\x67\xdf\xe7\x67\xdf\xe7\x43\x7d\x9f\xff\x54\x51\xf3\x0e\x74\xe4\xfe\xb6\xc1\xf5\xb6\x40\x1e\xec\x3d\x7e\x82\xdb\xf6\xb3\xbb\xf4\xb7\x75\x97\xce\x6f\xf6\x39\xde\x3e\x3b\x3b\x3f\x3b\x3b\x3f\x12\xe9\x53\x60\x7a\x76\x76\x7e\x76\x76\x7e\x76\x76\x7e\x76\x76\x7e\x76\x76\x7e\x76\x76\x7e\x76\x76\x7e\x76\x76\x3e\x11\xc9\x29\x25\x9f\x9d\x9d\x9f\x9d\x9d\x9f\x9d\x9d\x9f\x9d\x9d\x9f\x9d\x9d\x9f\x9d\x9d\x9f\x9d\x9d\x77\x9b\x87\x3f\xc9\x0b\x19\x74\x4b\xdb\x1e\xcc\x47\x3f\xa3\xb1\x0f\xe7\xee\xe7\x36\x9a\x66\xd3\xc5\x34\x05\x0b\xfc\xeb\x2b\x32\x28\x68\x74\xfe\x4f\xea\x6c\xfd\xed\xdd\xa4\x8f\x70\x69\x3e\xc8\xf7\xf8\x88\xd7\x51\x9e\x1d\x90\x9f\x1d\x90\x4f\xc4\xf3\xec\x80\xfc\xec\x80\xfc\xec\x80\xfc\xec\x80\xfc\xec\x80\xfc\xc7\x73\x40\x3e\xfa\xdd\xb3\x67\x97\xe5\x3f\xb3\xcb\xf2\x77\xea\x79\xfc\x47\x7c\x37\xef\xd9\x4b\xfa\x44\x2f\xe9\xe7\x07\x07\x4f\x7c\x70\xf0\xd9\x67\xfc\x18\x9f\xf1\x2d\x5e\xde\x65\xb1\x9a\xce\xd3\xb9\xca\xc6\xf4\x64\x62\x33\xf7\xd9\x07\xfc\x8f\xe0\x03\xfe\x27\x71\xd3\xae\xb4\x6b\xd5\x58\x7c\xd8\x15\xb3\xe0\xe9\x1d\xb1\x8f\x7e\xa8\xf4\x5f\xec\xb9\x7d\xf4\xbb\xa8\xcf\x4e\xde\x7f\x3a\x27\xef\xa7\x7e\xea\xf6\xd9\xef\xfb\x4f\xeb\xf7\xdd\x77\xd9\x1e\x4f\x97\xf3\x22\xfb\x72\x31\x9d\x11\x7b\x70\x59\x94\xa3\x8f\x2f\x47\x25\xd9\x9e\x5e\x9c\x9d\x0d\x39\x11\x37\x5c\x90\x97\xd3\xfb\xfc\xa2\x72\xb0\x7b\xf9\x69\x3a\x5e\x4d\x2e\xe4\x22\xbf\x79\x39\x49\x6e\xcc\xf4\xfb\x5d\xbe\x20\xc6\x8b\x67\xc5\xf4\x7a\x76\x41\x37\x22\xab\x72\xfe\x30\x70\x2f\x91\x8d\x8a\x25\x5f\xe6\xf3\x6c\x91\xad\xaa\xd3\xf1\xeb\x65\xf9\x19\xab\x41\x41\xe8\xb2\x5c\x8c\xf3\x05\xbf\x2c\x3f\xd7\x75\xa9\xf9\xe7\x75\x5d\x6a\xfe\xf9\x40\x9c\x3b\x6e\x46\x06\xa1\xab\xa1\x6a\x8c\x4a\x3d\x6a\x69\xb8\xaa\xc6\x08\xf1\x97\x75\x63\xf0\xf7\xaa\xb9\x8b\x6c\x3c\xbd\x5d\x52\xd2\xc1\xed\xab\x6a\x4c\x18\x2e\xe4\xfc\x33\x5b\x96\xc5\x74\xcc\x9a\x9e\xee\x2f\xcb\x79\x36\xc2\x79\x01\xfb\x00\xf9\xcd\x65\xbe\xe0\xf3\xf2\xd3\xfa\x84\xe6\xab\xc5\xf4\xfa\x3a\xdd\x56\x6d\xcb\xe3\xd5\xee\xda\x05\x73\x71\x55\x8e\x6e\x97\x55\x53\x70\xe2\x1a\xcd\xf9\x21\xcb\xb2\x97\xeb\x59\x59\xad\xca\x9b\x2d\x99\x8b\x34\x2a\x83\x79\x45\x7e\xd5\xcd\x3a\x6e\x1e\xbf\xae\x03\x04\x64\x97\xcb\xb2\xb8\x5d\xe5\x2f\xb1\x99\xb8\x36\x08\x37\xfe\x92\xa6\x68\x94\x15\xa3\x1f\x71\x22\x18\x67\x66\xfe\xf9\x45\x3d\x5d\xbd\xf4\xdd\x21\x06\x9e\xc0\xb3\xfa\x89\x5e\xce\xfd\xc6\x3e\x49\x3b\x6e\xdf\x9f\xf8\x39\xbe\xa7\xb1\x48\xfc\x56\x16\x8e\xa7\x59\x21\x3c\x95\x11\xc8\x50\xed\x87\xdb\x1e\xfc\x5e\x2a\xf8\xa1\x56\xef\x0b\xa9\x77\x98\xa0\xfc\x2f\x96\xe0\x9e\x50\x98\xf9\xca\x79\x56\xe4\x0b\xa2\xad\xd9\xec\xba\xc8\xb9\x74\x7c\x79\x77\x7d\x71\xbb\x28\x7e\xfc\xb7\x71\xb6\xca\x2e\xa6\x37\xd9\x75\xfe\xd3\xf2\xee\xfa\x6f\x9f\x6f\x8a\x97\xa3\x49\xb6\x58\xe6\xab\x57\xff\xf5\x3f\x7f\xe1\xe1\xfc\xe7\xe5\xdd\x35\xfb\x7c\x53\xcc\x96\xaf\xce\x26\xab\xd5\xfc\xe2\xa7\x9f\x3e\x7d\xfa\x04\x9f\x34\x94\x8b\xeb\x9f\x94\x10\x02\x0b\x9e\xb1\xab\x69\x51\xbc\x3a\x9b\x95\xb3\xfc\x8c\xdd\x4d\xf3\x4f\x7f\x2f\x3f\xbf\x3a\x13\x4c\x30\xe9\x98\x74\x67\xaf\x7f\xbe\xae\x40\xfe\xa2\xb4\x10\xe2\xec\xf5\xcf\xe9\x36\xeb\xd5\xd9\xaf\x9e\x49\x99\x49\x26\x99\x60\x42\x4a\x2e\x27\x20\x84\xaf\x12\xa4\x14\x4c\xbd\x0b\xeb\x6c\x2e\xb9\xbc\xff\x35\x80\xb7\xcc\x82\xb7\x19\x78\xfc\x07\xb3\x04\x97\x60\x99\xb8\x53\xd0\x4a\x4d\x89\x5c\x81\xbd\x3f\xfb\xa9\xaa\x14\x1b\xc2\x17\xb7\x45\xfe\xea\x2c\xbf\xcb\x67\xe5\x78\x7c\x46\x0d\x71\x10\xad\x66\x12\x94\xd7\x99\x02\x69\x34\x4b\x5f\xac\x58\x41\xf0\x06\xbc\x95\x05\x08\xa1\x40\x08\xc3\x2c\x84\x60\x58\x04\xef\x0d\x82\x2b\xc7\xd2\x97\xda\x09\xde\x05\xa6\x20\x0a\x3b\xe2\xa0\x95\x02\x19\x02\x07\x17\x3c\xa8\x10\xb9\x04\xe1\x40\x45\xfd\x4e\x81\x94\xb6\x57\x19\x97\x10\xb4\x46\x28\x6f\x08\xa9\xad\xbe\x98\x09\x42\x38\x8e\x7f\x9a\x82\x7e\x05\x21\xb1\x29\x3e\xf0\x08\xde\x19\x6c\x1e\xc7\xf6\x8d\x40\x46\xc9\x41\x4b\x0d\xc6\x71\xb0\x5e\x82\x0f\x1c\xbc\xbd\xbf\x01\x2b\x14\x93\x60\x75\x81\x90\x92\x8a\x20\x0a\x85\xbd\xb1\x26\x03\xa7\x1c\xfe\xd0\x08\x82\xd2\x12\x82\xd5\xe0\x8c\xc1\x9f\x94\xa8\xa5\x01\x11\xc2\x44\x4a\xf0\xc6\x65\xe0\x0c\x02\xe8\x94\x69\x8d\xc1\x4e\xb7\xd0\x08\x0e\x4e\x15\x54\x0d\x36\xd4\x5a\x5e\xb7\x54\xbe\x01\xa7\x2d\xfe\x10\x20\x0e\x9b\x6d\x23\xe4\x60\x8d\x05\x2d\xcc\xfd\x19\x1b\x15\xd3\x79\x67\xf2\x7e\x7a\xfd\xf3\x4f\xd7\xaf\x7f\xc6\x85\xf8\xfa\xdf\x5e\xb4\x63\xfe\xd0\xda\xae\x62\xdb\x0c\xee\x83\x17\x2f\x0f\x84\x1b\x88\xf2\x73\x9a\x9f\xd9\xa9\x2e\x63\x87\x78\x72\xe1\x6e\x47\xf2\x93\xb8\x9f\xdf\x69\xab\xaf\x37\xd9\x7a\xb7\xd3\xf6\x0a\xa0\xb4\x65\x06\x84\x69\xec\x50\x29\x25\x08\x5a\xea\xb1\x30\x80\xd9\xaa\xb9\x7f\xa5\x60\x94\xc5\x87\xf2\xf8\xba\xe8\x7b\x29\x41\x3b\xc3\x02\xd8\x77\xaa\x4d\x17\x24\x11\x86\x49\x00\x27\xcd\xfb\x46\x13\x88\x1c\xec\x5f\x32\xbd\xc1\x1c\x5a\x2f\x7d\xa0\x81\xc5\x72\xb8\xc7\x67\x67\x12\x95\xf9\x57\x4e\xa2\x32\x4c\x99\xed\x93\x28\x15\x28\x15\x99\x05\x61\x9a\x83\x2c\x41\x18\x85\x53\x11\x0a\x0f\x96\xf9\xa1\x59\x0c\x05\xef\xe7\x49\x9a\xc5\xba\xac\x03\xe9\x1c\xb7\x10\xdd\x3b\x3d\x38\x8d\x12\x49\x90\x2d\xf8\x06\xf0\xf8\x79\x4c\xe3\xb9\x67\x1e\x2b\xa0\x87\x9d\x77\xab\xb5\xa1\xde\x3f\x70\x5a\x78\x26\xe5\x97\x0a\x90\x4f\xa6\xe3\xfc\xc3\xd7\x06\x4b\xdf\xac\xe7\xf3\x66\x95\x9c\xa2\x5a\xff\xba\xb5\x97\x9f\xb7\xaf\xd1\x4d\x9d\x4f\x11\x37\xeb\xb1\x01\x87\xbe\x75\xe4\x8f\x43\x6c\x99\x1f\xfb\xb6\xf8\x71\xaf\x7b\x1f\xee\x51\xfd\x7b\x7a\x58\x3e\xd2\x06\xfc\xd1\x6e\x1b\x3b\xeb\xdf\x6e\xbd\xfa\x2f\xb7\xc0\xdb\xd9\xce\xe1\x9b\xfc\x23\x6f\x08\xbf\xf1\x85\xd7\x57\xa4\x08\xcb\xff\x75\x9b\x2d\x72\x4e\xec\xf0\x77\xc3\x29\x6c\x63\xce\x25\xd3\x20\x75\x7c\x2b\x99\x84\x68\x43\xfd\x4d\xa9\x4c\x4e\x22\x78\xa5\xde\x22\x57\x6a\x14\x93\x4c\xda\x1a\xc2\x26\x90\x3b\x02\x78\xa3\x08\x3c\x7d\xe9\xe0\x52\x10\x1c\x82\xbf\xd3\x20\x4d\x3f\x9b\x25\x80\xdf\x30\xf7\xfe\xc6\x80\x0a\x74\x94\xbd\x69\x88\x18\x06\x94\x62\x16\x54\x78\xef\x20\x1a\x16\x0a\xae\xc0\x2b\x86\x9f\xc6\x39\x87\x6c\xb6\xc3\xb2\xee\x7d\x60\x11\x84\x2b\xb6\x42\x91\x78\xf0\x1e\x61\x58\x20\x28\xde\x86\x22\x59\xa7\x06\x0b\x8c\x6a\xc5\xfa\x91\x41\x52\xdb\x59\xe4\x7d\x67\xe4\xd0\x82\x18\x3c\x49\x06\xc0\x4e\x38\x55\x1e\x1b\x3d\xad\x5b\xfe\x1b\x47\x27\x7a\x82\xe0\x35\xbb\x7c\x43\x06\x4e\xa3\xaa\xa6\x93\x0e\xa3\x1d\x3d\x3c\x2a\x14\xc8\xef\xe8\xc0\xfd\x4d\xfc\x69\x4f\xf0\x54\x7d\x0a\x8f\xb6\x27\x71\x70\x1a\x6c\xfb\xbf\xda\x1a\xf9\x29\x8d\x4c\x07\x3b\xb4\xcd\x40\xed\x18\x33\x98\xaf\xbc\xda\x2d\xa3\xe9\x62\x54\xfc\x51\x4e\xb8\xc0\x44\x16\x58\xa0\x63\x00\x11\xbc\x49\x7f\x08\x11\x98\xb8\xbf\xa1\xd3\xc2\x82\x52\x1d\xd9\x39\x9d\x29\xb5\x80\xdc\x93\x8f\x1d\x13\x05\x57\x5c\x75\x84\xb5\x74\x78\x14\x12\x8c\x67\xf4\xd1\x10\x3d\xc7\xcf\xe9\xe7\xc7\xb6\x21\x1f\x38\x43\xb6\x82\x3e\xfc\xf7\xf5\x5b\xfb\xce\x2d\x99\x9f\xed\x7d\x1f\x69\x6e\xf9\xdf\xc7\xf6\xf4\xd9\x56\xe7\xc9\x6d\x75\x9e\xad\x59\x9e\xca\x9a\x65\xcd\x1b\x7c\x37\xfc\x00\x49\xb7\x06\x3c\xc9\x6f\x61\x58\xcc\x2b\xb8\x87\xe8\x99\x4f\xa7\xb4\x49\x9f\x1e\x68\x62\x05\x0c\x33\xed\x1b\x30\x62\x02\x02\x58\x1e\xe0\x40\xb5\x77\x73\x84\xb6\x1e\xdf\xf5\x91\xfd\x6d\x2c\xc2\xb6\x29\x4f\x47\x93\xfc\x6e\x51\xce\x38\xca\x9b\x1b\xae\xe1\x0f\xe9\x48\x3c\xec\xf8\xdb\x7d\x9f\xf8\x68\x4f\x92\x63\x60\xf7\x59\xf4\x9e\x66\xdd\xfa\xd4\xf6\x85\x87\x16\xde\xae\x19\x1f\x5a\x35\x83\xeb\x7a\x60\x6d\xed\x79\x3d\xfd\x44\xeb\xdb\xaf\x9b\xea\x8a\xfc\xea\x3b\xba\xaa\xdb\xaa\x80\x13\xe0\xa3\x65\x1a\x94\x6e\x4b\x19\x20\x74\xd2\x6b\x39\x08\x46\xb1\x50\x68\x88\x4a\x33\x0d\x5e\xf4\xaf\xeb\x36\xd7\x79\xbc\x77\xd5\xb7\xbe\x05\xec\x65\xd1\x7d\xb9\xd0\x8f\x92\x4d\xba\x43\xbd\x63\xfe\x9b\x50\x0f\x87\x3d\x2f\xd1\x98\xce\xef\xec\xea\x75\xdb\x7c\x5a\x50\xa2\x3f\x9d\x62\x3d\x9b\x11\xa4\x0d\x2c\x14\x7c\x78\x3a\xc5\x66\x36\x07\x66\x4c\x54\x93\x39\x34\xd1\xe9\xac\x7a\x92\xe9\xdc\x73\x31\x3b\x08\x76\xf8\x61\x71\xc2\x13\xff\xbf\xdb\x83\xfb\x3b\xd1\xee\x89\x30\x71\xf2\x6b\xa9\xa7\x94\x39\xe5\x99\xc0\xa7\x7b\x36\xef\xdb\x3f\x51\x76\x18\x92\x06\xb9\xb8\x9d\x7f\xff\xb4\x82\xa8\x04\x4b\x27\x40\x97\xb7\x44\xfa\x4f\xb7\x10\xc1\xa8\x82\xa8\x04\x23\x8a\xd1\x81\x23\xa3\x27\x5d\x10\x31\xe0\x6d\x45\x55\xa2\x15\x4c\xa4\xcc\x8e\x16\x6b\x4d\x90\x1e\x4f\x2d\xd6\x23\xbd\x83\x54\x6c\x60\x1e\xf6\x3e\xba\x55\xc0\x55\x36\x2d\xe8\x99\x9f\xf1\x0a\x67\xb4\x28\x6f\xc7\x7c\xb4\x28\x97\xcb\x63\xe7\xb3\x6d\x82\xa1\x99\x12\x67\x07\xcc\x71\xc3\x88\x4e\x2a\x26\x35\xd8\xe0\x0a\xcd\xf5\x7b\xe9\xc0\x48\xc3\xa4\x2a\xb8\x66\xf4\xdf\x7b\x69\x99\x8c\x98\x5a\x70\x8d\xff\x31\xfd\xde\x23\x3c\x93\x01\x8b\x70\x05\xde\xd2\x87\x49\x84\xe2\xf4\x65\x94\x80\x9f\xfb\x5f\xa5\x86\x28\x2c\x04\xeb\x46\x0a\xbc\x70\x60\x22\x4a\x2c\x36\x22\x80\x35\x86\x19\x08\xd2\x31\x0b\xce\x14\xa0\xb4\x01\xe1\x10\xd2\x38\xf0\xd6\x30\x4d\xc6\x72\x0a\x7c\x64\x1a\x2c\xb3\x20\xb4\xe3\x60\x0c\x15\x8e\x8a\x2b\x10\x41\x33\x03\xda\x4b\xb2\x11\x73\xe9\xf7\x3b\xae\x46\x16\x84\x35\x4c\x20\x7e\x17\xb8\x45\x8c\x4a\x73\x07\xd2\x2a\x50\x06\x8b\x2a\xef\xb9\x04\xe5\x03\x37\xe0\x54\xe0\x1a\x94\xf3\xdc\x40\x8c\x96\x4b\xf0\x21\x72\xd0\x9a\x6b\xf0\xd6\x83\x75\x06\x97\x1f\x5d\xbd\x49\x87\xfd\x74\x2a\x72\xf0\xca\x73\x05\x4e\x58\x0e\xda\x58\x14\xaf\x8c\x02\xed\x14\x87\xa0\x1d\x76\x97\x83\x55\x1e\xcb\x44\xc3\x41\x91\x45\x5e\x50\x64\x7d\x14\x22\x44\x89\x15\x45\x21\x99\x02\x21\x71\x30\xa5\xc5\x0a\x62\xf0\x1c\xa4\x90\xa0\xa3\xe5\x20\xa2\xc4\x95\x2c\xb1\x33\x12\x94\x54\x60\x54\x80\x98\xae\x14\x71\x57\x02\xf6\xda\xd0\x7a\x77\x77\x6a\xc4\x0d\x48\xe9\x99\xe0\x16\x9c\x57\x1c\xa2\xe3\x0e\x8c\x09\x9c\x8c\x11\x39\x38\xab\xb0\xf9\x12\xa4\x26\x81\xd0\x7a\x26\x21\x04\xc5\x2d\x48\x19\x38\x99\xe1\x49\xf0\x38\x15\x12\xc7\x24\x62\xbe\x8e\x12\xb7\x99\xf3\x99\x81\x10\x19\x7d\x90\xc5\xd2\xe0\x70\x9c\xbc\x7f\x1b\x41\x29\x85\x0d\x74\x4c\x4a\x70\x42\x83\xd1\x92\xad\xa7\xdf\xde\x9f\x6d\xa8\x86\xfb\xc5\xbb\xa0\x5a\x84\x63\x56\xce\xee\xf3\x45\xd9\xdc\x99\xdb\x44\xb9\xf6\x7e\x21\xa3\xa9\x6d\xa1\xcf\x68\x7b\x4d\xe7\x97\x65\xb6\x18\x73\x02\xfb\x9e\xcc\x58\x77\xd0\x4d\x5a\xe0\xef\xcc\x1d\x28\xfb\x16\xb7\x01\x6d\x14\xeb\x18\x5d\xd9\x5a\x66\x26\x16\xec\x5b\x29\x29\x9d\x49\x95\x20\x24\x5d\x0c\xdb\xdf\x14\xd8\x49\xc7\x0e\x2a\xfd\x7a\xa7\x07\x8c\x5c\xf5\x1b\x95\xea\x53\x55\x72\xda\xce\x13\x9c\x55\x3b\xe2\x20\x25\xd9\x81\x72\x70\x8a\x23\x37\xae\x94\xe5\x72\xc2\x2d\x60\xa6\x13\x96\x21\x21\xc6\xa6\xe8\x94\xc9\xe4\x3b\xec\x40\x17\x2b\xf2\x8c\xf6\x4e\x0a\xe8\xe6\x50\x6f\xa5\x9b\xc4\x5e\x0e\x12\x1f\xdc\x7e\x77\x5c\x0e\x98\xec\xca\xb6\x38\x41\xbf\x4f\x78\xec\x5c\x66\x20\x7d\xc2\x31\xd1\x1d\xd9\xa0\x4a\xbf\xbf\xc1\xda\xb8\xbc\x93\x13\xac\x66\xc2\xed\xd6\x03\x63\x4d\x34\x4d\xb2\x23\x6e\x33\xae\x4c\x82\x9d\xe8\x2e\x2f\x6b\x27\x5c\xdf\xff\x8a\x33\x33\x5c\x7d\xab\x84\x4c\x48\xb8\x1e\xea\xc0\x7d\xaa\x36\x0c\x55\xab\x06\xaa\x55\xf7\xbf\x4a\xc7\x62\xd7\xf6\xb1\x1e\x26\x03\x32\x16\x38\x5d\xb8\x63\x55\xd7\xb0\xae\xbe\x1d\x52\x80\xc4\x9d\x30\xe0\xa2\x50\x1b\x81\xcb\x15\x8d\xbc\xde\xbd\xd2\xfb\xf4\x6b\x00\x3b\xc1\x8a\xfa\x0b\xf1\xfe\x60\xeb\xdb\xc1\xed\x3b\x74\x12\x0f\xc2\x3d\x1c\x71\xbd\xff\x0d\x82\xaf\x3f\x41\x10\xd7\xa7\x0b\x8e\x35\x88\xe9\x2b\x4f\x49\xdf\x15\x5d\x24\xce\x04\x2c\x0b\x99\x03\xcb\xf0\x07\x57\x8e\x03\x6f\x0c\x1e\x65\xd1\x35\x2c\x5f\x40\x58\x3c\x44\x4d\x8c\xac\xbe\x05\xf5\xc8\x25\xe0\x21\x24\xa3\x6e\x93\x0d\x8d\x7b\xc9\x31\x07\x5e\xa9\xea\x9b\x76\x85\x52\x60\xac\x7e\xd3\xac\x8e\x1a\x70\x4f\xfa\x0b\x3c\xd2\x40\xe9\xd0\xd1\x2d\x48\xcd\x41\x4b\x35\x02\xe9\x3d\x88\x68\x40\x5b\x3c\xe7\xc1\xca\x00\xdd\x3d\x1c\x23\x79\x08\x20\x76\xa9\xaa\x6f\xb2\x51\x37\x8a\x83\x32\xa6\x05\xae\x25\x59\xb6\x4a\x43\xfc\x93\xc7\x03\xc0\x8a\x6e\xf5\xda\x20\x7b\x3d\x02\x29\x1c\x48\x17\x40\x09\x07\xda\x80\xc6\xfa\x3b\x1b\x5a\x2b\x64\x46\xb0\x5e\x63\xeb\x6f\xaa\x5d\x19\x8d\x4d\x90\xcd\x1d\xaa\xb4\x25\xae\x1b\x6b\xb7\xa0\x24\xb6\x3a\xfa\xce\x2e\xf6\x9e\x86\x2f\x20\x5c\xf5\xad\xdc\x0c\x14\x58\xa2\x16\x0d\x05\x0e\x72\x31\x06\xd1\x78\xa9\xab\x6f\x65\xdc\x6f\x6c\x0b\xab\xc2\xb1\xf2\xfe\xbe\x45\x6f\x3d\xe6\xeb\xa1\xd3\x0c\x7c\x40\x42\x24\x02\xb2\x9f\xc2\xe8\x56\xb7\xc1\x11\xe3\x62\x54\xa2\x63\x12\xcf\xa4\x06\x0e\xcf\xc2\x6f\xb8\x3c\x5a\x69\x54\xd3\xe1\xc4\xa9\xb9\x75\x06\x68\x52\x2b\xfb\x01\x2a\x5f\x77\x23\xf4\x8e\xc8\x00\xdb\x95\x91\xcb\x8f\xd3\x1d\x92\x48\x33\xf7\xe1\xb8\x47\x4b\xdb\xaa\xca\x75\x04\xcf\xd7\x3b\x9c\x4f\xfb\x61\x3e\x91\x90\xd4\x89\xdf\x15\x31\xd9\xce\x64\x91\x1a\x6b\xe8\x54\x7e\xd7\x32\xd4\x0b\x4c\xbe\x33\x7d\x86\x46\x25\x86\xa6\xcf\xb5\x90\x34\x2a\xed\x24\x80\x1d\x81\x8b\x89\x6b\xb7\x1c\xb9\x37\xfa\x05\x3f\xbf\x75\x6f\x61\x90\xa1\xd1\x54\xcd\x88\x83\x72\x9a\x09\x0e\x56\x5a\x10\x86\x5a\x04\x52\x05\x62\x61\xee\x6f\x04\x8b\x77\x60\x47\x82\xa1\xa4\x05\x5a\x57\xc4\x10\x4f\xf5\x80\x0d\xe2\xea\x5d\x4f\x73\x56\x1f\xba\xfb\x38\x1b\xa9\x68\x50\xac\xbb\x03\x17\x87\xfd\xa1\xba\x78\x89\x8b\xe9\x66\x24\xb6\x04\x5c\x7c\x1f\xc1\x78\x94\x4e\x7c\xef\x6e\xa9\xb2\x24\x89\x28\x83\x45\x7f\xc4\x9e\xeb\xac\xb2\xa1\x7d\xd7\x05\x79\xd8\x12\x1c\x63\xdb\x6d\xd1\xfa\xa1\xb0\x16\x92\xe3\x1e\xf7\xdd\xbe\x91\x07\xb1\xf7\x7b\x31\xdc\x88\x43\x19\x9a\x27\x7c\xc1\xe8\xf4\x07\x08\x1e\x1d\x07\xb6\x8d\xe0\x2b\xe7\x57\xd3\xdf\xcd\x15\xf1\x38\xc5\x97\x65\xa2\x27\x01\x29\x92\x80\xe4\x09\x12\xd0\x6f\x16\xe5\xf4\x91\xe0\xa0\xb5\xe4\x20\xb5\x42\x39\x9e\x83\x76\x8e\x43\x08\xe6\xbd\x14\x60\x94\xc7\xbf\xdf\x48\xc2\x56\x63\x88\x60\x8d\x66\x82\x44\xb2\xfb\x5f\x71\x7f\x6f\x11\x45\xde\x45\x3c\x4f\x87\x09\x0b\x09\x61\xbe\x23\x52\xee\x15\xb9\x14\xd1\xab\x08\xd1\x50\x9d\xd8\x46\x12\x6b\xdd\x6f\x06\xec\x44\x42\xdc\xe1\x98\xb7\x8f\x0a\x34\xd6\xc1\xc0\xd6\x69\xe6\x9e\x60\x63\xfc\xf8\x87\xa2\xb7\x3f\x80\x70\xc8\x5b\xc3\x8f\x7a\x66\xb5\x63\xa8\xbb\x9c\x67\xb3\x14\x98\xe8\x7f\xbf\x4a\x85\x3e\x3c\x8d\x6c\x73\xca\x7b\x2a\x4f\x13\x17\x77\x00\xcb\x49\x01\x30\x77\x05\x32\x42\x52\x43\x09\xdf\x3f\xb1\x21\x62\x21\x3b\x84\x43\x6c\xe3\x4e\x54\xc5\x9d\x0c\x90\x21\xac\x5b\x91\xba\xc5\xf7\xf3\x34\xb1\xc6\xef\x22\x04\xdf\x51\xbc\x58\x8d\xf2\xd3\xfb\x90\x94\x09\xce\x75\x4a\x3a\x70\x2a\x32\xf9\x8e\xa8\x01\x89\x75\x5b\xb8\xae\x89\x01\xdd\x91\x32\xac\xae\x30\x07\xa6\x21\x98\xac\xd3\x26\xb0\x51\x82\xb3\x71\xa2\x21\x74\xe5\x13\x9b\x48\xd6\x10\xc5\x7a\xd7\xa5\x80\x6b\x8a\xe5\x27\x28\xee\xf5\x6e\x24\xed\x3b\x09\x49\x83\xf4\x08\x82\xd5\x5c\x4d\x43\x24\xab\x95\xff\x30\xf4\x48\xe2\x57\x5e\x07\x43\xfc\xae\x18\xec\x8a\x99\xd6\x9e\x59\xd0\xd6\x8c\xc0\x90\x5a\x5b\x5a\x0d\xd1\x4b\xf2\x39\xc7\x75\x11\xe9\x9e\x20\x9a\xb7\x16\xa2\x26\x47\x1c\x81\xb2\x60\xd0\x8c\x24\x6d\xfc\x8e\xf0\xd4\x92\x4c\x30\xf2\x7b\x07\xe3\x98\x82\xa8\x24\x69\xbd\x93\x0a\xca\x21\x9c\xc6\x94\xe0\xf0\x90\xf3\xe4\xc9\x63\x1c\x04\xa1\xe8\x68\x71\xa4\x4e\xb7\xe0\x74\x80\xe0\x14\xf3\x60\x9d\xe6\x28\xab\x83\x8d\x86\xa3\x18\x4d\x9e\x38\x28\x95\x92\xee\x5c\x04\xf9\x4e\x83\x73\x61\x84\x27\xaa\x4e\xca\x4c\x13\x38\x98\xe0\x09\x86\x74\xf5\x84\x42\x91\x43\x79\xfa\x4d\x82\x0c\xb1\xfa\x2d\xc4\xa6\x2b\x4e\x52\x46\x70\x10\x56\x33\x6d\xc1\xf9\x50\xff\x93\x58\x66\x21\xb1\xc7\xd1\x9b\xb7\x28\x63\x07\x26\x0d\x44\xe9\x68\x55\xe3\x30\x33\x6a\x0c\x72\x03\x01\x9c\xc3\x21\x31\x69\x44\x5c\xba\x35\xc0\x6e\x3a\x87\x0c\x37\x0a\x07\xc8\x3b\xbb\x80\x95\x19\x6e\x41\xe9\xc0\x21\x6a\x1e\x40\x18\xc9\xc1\xe8\x80\x8d\x21\x28\x11\x71\xf4\x8d\xe7\x0a\x84\xe7\x1a\xbc\x89\x6f\xa5\x80\x18\x0d\x38\xc3\x22\x38\xef\x99\x20\xfd\x89\x03\x43\x5e\x4c\x16\x64\xb0\x60\xad\x61\x06\x68\x0e\x8c\x53\x23\x0e\xd1\x41\x88\x9a\xee\x3f\xe8\x2e\x84\xae\x60\x0c\xd3\xa0\x83\x69\x7b\x24\x19\x24\x31\x22\xb4\x65\x79\x87\x54\xa2\x23\x0f\xc8\xca\xd6\x8c\xd8\x20\xfc\x80\x10\x01\x7f\x3a\xf6\x22\x69\xea\xac\x2a\xf8\x1a\xb2\x67\xb7\x5e\x79\x37\x81\x8c\x2c\xbe\x93\x7d\x4f\x60\x0f\x32\xbe\x77\xc9\xf5\xca\xea\x9e\x1d\x89\x3b\x5c\x0e\x69\x6f\xc5\x81\x1d\xdd\x01\x38\x46\x15\xf9\xb4\xef\x2c\x3e\xea\x25\xa7\xa7\x88\x86\xdf\xc6\x81\x64\x6c\x8a\x38\x6e\x6e\xa6\x7f\x00\x83\x17\xdc\x25\xc2\x32\x9f\x69\x48\xb7\x18\xf8\xa5\xad\x6c\x21\x48\x26\xba\x91\x03\x6a\x9d\x3c\x68\x63\x7b\x65\x52\x91\x2a\x73\x40\x69\x8f\xe9\xf7\xbf\x06\xe6\x70\x6d\x23\x5d\x24\xc1\x9b\x3c\x3b\x12\x9d\x4c\x7f\x63\x81\x47\xd8\xc1\xf4\x86\x7f\x68\xf5\xf6\x60\x8e\x59\xc0\x4f\xfd\x12\xec\x23\x5f\x83\x7b\x9a\xd7\x37\xba\x58\xbe\x56\x41\xc9\xa6\xab\xdf\xeb\x40\x3e\x62\x19\xbb\x74\x57\xdc\x62\x92\x5c\x0c\x60\x95\x2c\x34\x68\xe1\x98\x14\xa0\x35\xb9\xf5\x70\x03\xda\xc8\xa6\x62\x54\x2a\x50\xcc\xbf\x93\xbd\xf0\x0c\xb4\x68\x95\x23\x1d\xab\x50\x81\x59\x88\xb1\x43\x94\x8d\x32\x78\xea\xc9\xf7\x16\xa2\x45\xe2\x2f\x1c\x33\x60\x05\xa9\x8d\x5b\x3e\xb1\x52\x43\xa0\x60\x1c\x8d\xba\xa5\x94\xcc\x4f\x14\x28\x4f\x9a\x5e\xc5\x2d\x1e\x2a\x23\x90\x92\x83\xc6\x53\x86\xe3\x71\x0b\x5e\xe1\xbf\x8f\x70\x63\xed\xcc\xe4\x50\x9c\x87\x0e\xc4\x09\x82\x65\xf2\xc9\x7c\x8c\x60\xd9\xc7\xb0\x51\x2b\x9b\x9d\x6a\x65\x3e\xc9\x8b\xdf\xcb\x66\xe8\x38\xcd\x2c\x9e\xde\x1e\x97\x88\xd2\x48\x03\x75\x0a\x3a\xa4\xd6\x36\x3f\x56\x82\x8c\x6e\xc4\x41\x4b\x04\xe5\xc8\xe2\x81\x89\x29\x4e\x52\xe8\xf2\x04\x46\x22\x33\x17\x47\xa0\x34\x82\x44\xf0\x74\x89\xed\x0d\x72\x92\x74\xd3\xe1\x4c\x40\x42\xad\x15\x4b\xdf\x14\xb8\x49\xf8\xc8\x41\x07\x64\xc8\x84\xf5\xd5\x37\x71\x2b\x01\x05\x1a\x10\x2e\xf9\x88\xa7\x4f\x92\x3a\x90\x91\x23\x0d\x4a\xf0\x1c\x44\xa4\x48\x4e\x1c\x14\x99\xc7\x28\xe7\x38\xc8\xa0\x80\x4c\x58\x34\x72\x50\x1c\x9c\x8f\x10\xa4\xe7\x74\x71\x24\x2d\xe6\x48\x50\x11\xc5\xaa\x20\x41\xc7\x50\x20\x1e\x07\xc2\x65\x0a\xac\xf0\x2c\x7d\xab\xab\x23\x8b\x07\x46\x27\xe6\x91\xf4\x0a\x54\xec\x5c\xc0\x24\x8e\x54\xeb\x11\x02\x38\xec\xa6\xe5\xa0\x95\x01\x11\xb0\x4a\x1f\x41\x04\xba\x0c\x02\xa5\x89\xcd\xd5\x60\xa5\xe5\x10\xb4\x4a\xe3\x86\x59\x16\xfb\x62\x64\xda\x6c\xd6\x1a\x10\x06\x77\xb6\x8a\x09\x8b\xb0\x0e\xa4\xc2\x5f\x02\x48\x17\x39\x5d\x4c\xa9\x48\x9d\x76\x24\x14\x80\x0a\x2a\x83\xe8\x1d\xfe\x54\x51\xa2\x68\x94\x95\x1e\x81\xb0\x58\x44\x7a\x90\x12\x05\xca\xe8\xd2\x2f\x36\xde\x51\xc8\xa7\x4c\x82\x23\x0b\x97\xba\x9f\xda\xd3\x1d\x99\x91\x23\x6c\x1d\x96\x48\x56\x0a\x26\x48\x64\x82\x25\x19\xb2\xec\x57\x79\x87\x4d\x18\x31\x3c\x65\x55\x2b\x8c\x98\x10\x5c\xbd\x0b\xfb\x43\x80\x09\x16\x6a\x1f\x4c\x29\x1d\x13\xb5\x0f\xa6\x14\x2c\xdc\xdf\x04\xee\xc0\x36\xae\x32\xc9\x4f\x53\xb3\xc6\x65\x23\xae\xeb\x1d\xe7\xf9\x21\xec\x68\x63\x77\x0f\xd0\xae\x66\xee\x31\xe7\xf8\x53\x3e\xe5\xfc\x98\xb7\x29\x9f\xe0\xb5\x9e\x36\x0a\xa4\x87\xd3\xe5\xaa\x5c\x7c\x7f\xb2\x74\x62\xf3\xba\x96\xec\x64\xf1\x02\xc1\xca\x37\x9e\xf9\xea\x5c\x0c\x3d\x10\x94\x6a\xe8\x27\x89\x60\x5e\x59\x6e\xde\xd9\x6e\x4c\xa4\xca\xcc\x64\x58\x6d\x7b\x87\x19\x6d\xa1\x2d\x90\xc9\xd1\xf0\x05\xac\xd3\x85\x84\x80\x8c\xad\x50\x6d\x74\x0e\x85\x46\xed\x91\x33\x50\x96\xcb\xf6\x3d\xab\x65\xf1\x37\xd3\xb9\x7d\x4d\xd5\x1c\x2e\x81\xb5\x27\x70\x68\xd5\xb7\x01\x06\x2e\x70\x2e\x26\x64\x87\xd9\x7e\x75\xa0\x73\x3b\xba\x3b\x00\xc2\x26\x2c\x5b\xc3\xeb\xfc\xa0\xb7\xfe\x06\x9f\x62\xd9\xf6\xfc\xc1\xf6\xdb\x24\x2c\xbf\x7d\x08\x9a\xb9\x3b\x4c\x53\x8f\x79\xe4\xf2\xc8\xf7\x2b\x87\xc1\x8f\x7e\xe3\x68\x5b\x18\xfb\x6d\x57\x78\xed\x8e\xcf\x17\xe5\xf5\x22\x5f\x2e\x61\x3a\x1b\xe7\x2b\x9c\xb2\x59\xb6\xca\x8f\x88\x49\xbf\xad\x1a\x04\x9a\xce\xae\x77\x30\x84\xf4\x22\x45\xd3\x97\xa7\xfd\xc2\x41\xfd\xd2\xc9\xed\x6a\x82\x0d\x98\x94\x63\x7e\x39\x9d\x11\xce\x4a\x6b\xce\xc6\x2b\x7a\xde\xe0\x6f\xe3\x03\xca\x22\xad\x39\xa4\xcc\x01\xb4\x7f\xd7\x1b\xde\x27\x1d\x00\x8f\x7e\x14\xfc\xa9\x5e\x63\x1c\xc4\x73\xc2\x6b\x58\xdf\xea\xc5\x8c\xad\x8f\x28\x3c\x0d\x15\xd8\x17\x90\x72\x7f\x2c\xca\x7e\x4c\xc9\x4e\x38\xc9\x6d\xcd\x2c\xb2\x2f\xf9\x62\xb9\xbd\xa1\xed\xfc\x43\xc2\x21\x6e\x89\x84\x58\x21\xfa\x7d\x82\x20\x1e\x27\xee\x48\x09\xce\x26\xad\xb4\x6a\x8b\xe7\xc1\x30\x51\x48\x81\xc7\xa2\x1d\x08\x8d\xa8\xb5\x2b\xf8\x70\x36\xaf\x0a\xa7\x6c\xde\x2b\xcd\x53\xe9\x4d\xee\xfd\xaf\x1a\x74\xb4\xcc\xbf\x97\x8a\x49\x09\x06\x45\x0d\x41\xe6\xbd\x3e\xd9\x15\xdb\x88\x92\x0e\xc1\x1c\x60\x48\x02\x22\x44\x26\x1d\xc2\x77\xad\xe6\x1c\x0a\xee\x0e\xeb\x51\x28\xe1\xc4\x22\x42\x88\xd8\x0a\xdd\xd6\x4e\x78\xe2\x1f\x94\xda\xf4\xb1\xcb\xaf\xc8\x66\x0f\x3b\x99\x3a\xe9\x82\xa5\x6b\xb3\x32\x0a\xa4\xb0\xd8\x41\x11\x62\xc7\x94\xa5\xae\x6e\xa8\x36\x91\x2a\x1b\xaa\x8b\x8a\x92\x8d\x9d\xa2\xb1\x73\xd4\x27\xbe\xe9\xd4\xe1\x0c\x4d\x6b\xd1\x6e\xdf\x1d\xeb\x20\x93\xdf\xf0\xf5\xa1\xa7\xdb\xc2\x2d\xe3\xb2\xcd\x73\xce\xbb\xac\xcb\x06\x1e\x7d\xc6\x2d\x4d\xa9\xdf\xbd\xa2\x2d\x80\xa6\xeb\x1c\xd1\x36\xf1\x02\xa7\x15\x2e\x57\xdf\xbd\xb7\x20\x7d\xb1\xa6\xa0\x3a\x28\xcb\x3b\xf7\x06\xbc\x71\xf8\x53\x99\x99\x79\xf0\xf6\x37\xd9\xb2\x80\x07\x69\x03\x18\xf7\x3e\x59\xea\xcb\x02\xc5\x64\xf2\x99\xa9\xc2\x32\x57\xff\xe2\x8f\x06\x21\x4c\xba\x50\x91\x19\xf9\x79\x24\x6f\x8f\x0a\x8f\xd0\x20\xd5\x08\x84\x0b\x20\xbc\x03\xe9\x2c\x48\x1f\x48\x81\xa0\x62\x04\x65\x0d\x28\x03\x4e\x83\xb5\x28\x95\x48\xad\x20\x38\xf7\xd6\x80\x17\x8e\x49\x0d\x3a\x90\xb2\x5a\x7a\x26\x0d\x23\x06\x5e\x9a\x91\x02\xa1\x51\x46\xd1\x60\x0c\xca\x01\x96\x19\x72\x8f\x21\x1d\x48\x66\x41\x2b\x46\x1f\x6a\x42\xf4\x9e\x43\x24\x73\xba\x48\xd7\x5f\xf8\x4d\xc1\xa2\x95\xe2\x60\x4c\x28\x50\x24\xa7\x6b\x37\xec\x0f\x45\xa9\x4e\x3a\x01\x94\xd5\xe5\x48\xf0\xa4\x5e\xaf\x22\x43\x3b\x9b\xec\x62\x0a\xfc\x0d\xb4\x23\x11\xc3\x90\x37\x11\x5d\x1a\x1b\x26\xe5\x6f\x95\x2d\x8b\xf1\xf8\x53\x2b\x4e\x48\x51\x24\x4c\x9a\x09\x8e\x53\xd1\x55\xd1\x23\xc1\xf5\x3c\x99\xd2\x90\xad\x9c\x87\x18\xc2\xfb\x34\xe5\x11\x62\xc7\xea\x97\xa6\xfc\xbd\xae\xe1\xee\x14\x78\xa5\x33\x0b\x36\x10\x7d\x09\xd5\x64\xc6\x08\xde\xbb\x11\x04\x61\xc8\x40\x46\x18\x72\x5d\x23\xcd\x92\x77\xd5\xaf\xb2\xb2\x9a\x55\x10\x24\x07\x2b\x71\x70\x5d\xe0\x10\x83\xc9\x34\x04\x72\x01\x09\x95\x51\x31\xf8\xa0\x38\x78\x63\x7f\xa3\x7a\xef\x7f\x0d\x2c\x80\x51\x1a\xd7\x4b\x90\xcc\xb1\xc0\x34\x58\xef\x71\x02\x95\x8c\x94\x40\x00\xa7\xab\x4f\x9b\x9b\x73\x88\x28\x34\xb3\x1f\x0e\x7e\x1e\xf2\x2b\xe7\x29\x97\x9e\xb6\xf8\x7e\xf6\x7e\x6d\x2b\x69\x22\x93\x13\x6e\xc0\xda\x22\x1d\x99\x06\x74\x98\x18\xb0\x86\x1c\xa0\x29\x96\x3b\x89\xc1\x46\x24\x1f\x2d\x3b\x52\xa0\x3d\x27\xc9\x9c\x6e\xae\x35\x27\x53\x2b\xa6\x40\x79\xc3\x3d\x1e\x58\xef\x11\xb3\x65\xf2\xfe\x57\x5c\x0a\xb8\x52\x12\x4e\xfb\x3e\x90\x6b\x8d\xb1\xef\x37\x19\x23\x0e\x21\x55\x13\x38\x88\x14\xd1\x31\x12\x36\x5c\x74\x42\xda\xf7\x96\xea\xf2\x80\x87\x12\x36\x89\x63\x93\x14\xf9\xbd\xac\x61\x02\x93\xb6\xa8\x33\x85\xa5\x50\x93\xde\xd8\x4d\x1f\xda\x01\x40\xb6\xc8\x42\xfd\xa9\x6a\xea\x9a\x2a\x63\xc6\xea\x8d\xb6\xfe\x03\x8f\x03\x22\xca\x50\x91\xed\xa1\xdd\x9e\xea\x69\xc9\xaf\xbc\x3a\x88\x7e\xd7\x55\xd7\xe0\x21\xff\x43\xe8\xe0\xed\x59\x4b\x21\x23\x90\xfc\xda\x8d\x2e\x48\x01\xc5\xfc\x0f\xb6\xe0\x12\x1c\x12\x0d\xaf\x43\x66\xc8\x35\xd0\x55\x3a\x47\x07\x41\x85\x62\x9d\xed\xdf\x38\x88\x14\x07\x34\x54\xea\x97\x84\x94\x7c\x0e\x9c\x0e\xc4\x06\xc6\x98\x81\xf5\x48\x2d\x74\x7a\x57\x81\xcc\x23\x7c\x23\x2d\xf1\xa2\xd2\xf4\x8c\xf6\x23\x92\x44\x2b\x7d\x26\xf1\xcb\xd2\x37\x59\xe6\x0b\xa9\xb8\x26\x9f\x81\x76\x9e\xa8\xc9\x5e\x72\x3e\x30\xa0\x12\x12\x63\xb0\x15\x06\x7f\x1a\xad\x08\x8d\xb4\xba\x15\x21\x11\xe6\xc8\x22\x18\xaf\x8e\x29\x95\x2a\xf3\xe0\xe4\x50\x29\x3f\x50\xca\xd7\x75\x79\x70\x78\x9c\x1c\x5e\x97\x06\x47\x61\xf9\x5c\x68\x97\xe2\x74\xc0\xf5\xeb\xc3\xe4\xaa\x70\x97\x99\xdc\xe6\x24\xd9\x5f\xc1\x43\x21\x0c\xe0\x2a\xcf\xc7\xeb\xe0\x24\x4d\x6e\xeb\x7a\xba\x9a\xdc\x5e\x7e\x3f\x24\x77\x7b\xf8\x43\xf9\xd6\x80\xd4\x9a\x49\x26\x19\xfe\xc6\x24\x51\x3b\x3d\x42\x06\x44\x20\x31\xc4\x75\x6d\x91\x83\x37\xe0\x83\x67\x8e\x1e\x8e\xd0\x16\x84\x33\x60\x7c\xe0\xe4\x13\x4c\xbf\x68\xe4\x5b\x38\x45\x89\x4f\xaf\x64\xb8\xf4\x54\x06\xce\x49\xe4\x12\xa2\xf1\x78\x4e\x72\x05\xda\x22\xdb\xa2\x7d\xf3\x57\xd0\x32\x72\x08\x22\x70\xf0\x3e\xa0\xf8\xa1\x74\xeb\x57\xa7\x2d\x27\x36\x4f\x90\x85\x91\xb2\x9b\x5f\x3c\x72\x6a\xe4\xc6\xe2\x35\x78\xb5\xfe\x05\x9c\x32\xf4\x07\xdd\x7d\x04\x64\x08\x88\xbd\x02\x1b\x14\x08\xa7\xd3\x2d\x90\x42\x46\xcb\x3b\x30\xf8\x6f\xa4\x5b\x2d\x6b\x0d\x07\xe9\x1d\xd7\xe9\x11\x11\xbf\xfe\x15\x8f\x10\x87\xdd\xf4\x4e\x83\xf2\xb8\xe0\x74\x08\x40\xf7\x29\xc1\x63\x7f\xbd\xc2\xa2\x3e\x39\x22\x41\x08\xc8\x1c\x62\x26\x31\x2c\x0c\x6c\xa0\x4b\x9d\xc8\x24\x44\x65\xc0\x4b\xf7\xc6\x81\x97\x92\xa5\x2f\x11\x13\x3a\x0a\xe5\x08\x6c\xb4\xf5\xea\x8d\x06\xc8\x84\xc7\x5b\x0d\x4a\xbb\x24\xc1\x72\xb2\xae\x40\x44\x38\x54\x44\x0b\xea\x5f\x41\x07\x05\xd1\xe1\x31\x49\x16\x64\xde\xa4\x61\x08\x16\xb9\x42\x30\x31\x8d\x93\x94\x26\xfd\x12\xc8\x86\x09\x8f\x42\x14\xfd\x90\x82\x69\xf2\xee\xd6\x74\x9f\x88\xbd\x06\x65\x25\x28\xe9\xc0\x78\x4b\xd7\x66\x26\xdd\xcc\x45\x24\x91\x10\x91\xeb\x13\x02\xbb\xe5\x70\xc4\xd2\xaf\x51\x22\x79\x04\x19\x3c\x48\xe5\x91\x41\x04\x13\x14\x36\x1d\xe9\x67\x74\x2c\x7d\x2b\x6b\x6d\x5a\x79\x94\xe4\xab\x6f\xe5\x42\xf2\x28\x6b\x8d\xcd\x4e\x1c\xb6\xd4\x68\xe4\x3f\x1c\xfe\xa2\x36\xee\xf2\x94\xfd\xfd\xb0\x57\x46\x05\xfb\x8b\x59\x47\x37\x8b\x2c\x80\x74\xc4\xe3\x1b\x5a\x99\x3a\x72\x88\xb4\xb2\x55\xb2\x2d\x50\x13\xee\xc0\x99\x3b\x05\x2e\xda\x89\xa6\x6b\x08\x0d\xca\x30\xfa\xd4\xd7\x9f\x74\x71\x2a\x95\xbf\xc3\xd5\x37\x51\xa0\x5c\x1c\xe1\xf2\x53\xe4\xb2\x8c\x3b\x8a\x22\xa4\x89\xfa\x57\x0b\xb2\xf3\xf2\x0f\xb5\x4e\x9b\x37\xc1\xea\xf5\x2d\xb5\x61\xd2\x8e\x24\x04\x3a\x40\x75\xba\x64\x75\x0a\x4f\x5c\x47\xf7\xca\x91\xee\x3e\x1c\x6e\x7f\x6f\xe2\x08\xf7\x3f\x36\x19\xb7\x92\x31\x0e\x9c\x8b\x48\x3d\xa2\xa5\xdf\x24\x04\x8d\xbb\x52\x83\x26\xfb\x3a\xa5\xf1\x8c\x8c\x56\x71\x85\x3b\xf0\x1d\xae\xfb\x3b\x09\x41\xe8\x37\x1e\x84\x31\x2c\x7d\x69\x79\xa5\xa6\x0c\x34\xf8\x97\xbf\xff\xfd\xad\xa8\x86\xd3\xe0\x1a\x66\x11\xb4\x91\x99\x01\x89\xcc\x6a\x75\xe8\x0a\x64\xfb\xc2\x6f\x06\x82\xa5\x7a\x4c\xcc\x1c\xa4\x05\xec\x2b\x11\xd5\x81\x0a\xbe\xc0\x65\x8f\xbd\x09\x42\x0f\x54\xf6\x1f\x6f\x8c\xd6\xb6\x31\x3a\x1a\xbc\x47\xe1\x44\xe3\xee\x0b\xda\x57\x37\xeb\x9e\xcc\xf8\x0a\x95\xe8\x6a\x8c\x58\x9b\x0f\xe4\x96\x19\xd2\x46\xe2\x26\xe9\x54\x82\xa2\x5e\xd6\x5f\xca\x72\xc8\xe0\x6a\x6c\xea\x7b\xec\x11\x16\x73\x6e\x04\xd6\xd2\xa6\xb7\xc8\xae\x4a\xe9\x70\xd0\x10\xac\x1a\xbf\x78\x08\xff\x3a\xb0\x19\xb6\x33\xb0\xff\xfc\xb4\xda\xce\x63\xf6\xdf\x22\xff\xca\x79\x51\x5e\x97\xfc\x9f\x9f\x56\x55\x05\x47\x6e\x35\x7a\x16\xf0\xd5\x99\x54\x67\x2c\x3d\x05\xf8\xea\x4c\xea\xf6\xf6\x3a\x38\xf2\xc7\xd0\x59\x3a\x40\x9c\x2a\xbb\xa1\xe0\x90\x23\x0b\xc2\xfe\x06\xce\xf9\x09\x2e\x66\x7b\xa7\x41\xea\x50\x40\x48\xf4\x53\x28\xfc\x8d\xd3\x6f\xf7\xbf\x5a\x90\x52\xb3\x08\x32\x56\x70\x13\x2c\xf2\x1b\x25\x14\x7c\x03\xc9\x37\xc5\x9b\xc1\x21\xae\xae\xae\x76\x5e\xb8\xef\x6e\x69\xaa\x05\x17\xb1\xa1\x00\x23\xfa\xbd\x14\xc4\x14\x08\xf0\x2c\x90\xcc\x83\x24\x25\x14\x64\x1a\xa2\x38\x18\xe7\xee\x90\xd1\xd5\x75\xc3\xa9\xaf\xef\xf1\xe8\x20\xa3\x0d\x3a\x59\x0c\xd2\x0f\xba\xe9\xb4\xe4\xc2\x42\x36\x29\x06\x19\x64\xe7\x7e\xa3\x02\xcd\x1e\x08\xf1\x8b\xfa\x0f\x77\x52\x27\x34\xf9\xe9\x1a\x08\x5a\xbd\x07\x4f\xaf\x10\x04\x3c\x01\x9d\x27\x83\x55\x55\x28\x88\xc1\x41\x24\x43\x68\xb2\xac\x32\xd6\xae\xc7\x54\xea\xfb\x5f\x3d\x18\xdc\xb8\xd6\xae\x67\x47\xea\x14\x53\x04\xa2\x43\x5e\x3a\x90\x84\x10\xdf\x07\x08\x2a\x59\x21\xac\x8b\xb4\x3b\xf1\xf7\xf8\x8b\x3c\xa9\x13\x6b\xcc\x45\x15\xcb\x84\x6c\x94\xd7\x35\xf3\x75\x6b\xde\xa7\x9a\x85\x21\xf9\x59\xe1\x11\x4d\x9a\x68\x69\x53\x71\xbe\xee\x2d\x96\x26\xef\x82\xc8\xd6\x38\xe3\xa6\xdb\xef\xd7\x65\x9a\x5d\xf8\x77\xa7\xdf\xfc\xf2\xcb\x23\xe6\x81\x56\xca\xfb\x34\xff\xb8\x80\x52\x2b\x59\x65\xb8\x0d\xc1\x20\x27\x68\x8d\xfe\xcd\x23\x78\x5a\x52\xb4\x26\xee\x7f\x4d\x4b\x2d\x4d\x64\x5a\x81\x0a\x34\x0b\xe0\x45\xbd\xac\x1a\x3b\x2b\x2d\xc0\x62\xb3\x22\x9b\xbd\xf8\xe5\xef\x42\xda\xbf\x1f\x40\xbf\xfa\x04\x66\x3b\xf9\xfa\x78\x7b\x99\x2f\x66\xf9\x2a\x6f\xdc\x5a\x6f\xd2\x0e\xbd\xbb\x1e\x2d\xc6\xdb\x89\xe0\x06\x5d\x9f\x16\x6e\xf2\xbe\x23\xde\x43\x2b\xf7\xef\xff\xe1\xea\xc3\xd2\x32\x69\xc0\xba\x38\x02\x85\xb2\xa1\x0f\x60\x75\x24\xbb\xad\xe0\x0d\xfe\x3b\x21\x76\x72\x04\x9a\x5e\xa0\x03\xb2\xee\x72\x96\xd6\x24\xf2\xf8\x64\xce\x1e\x38\x1e\xb2\x81\x70\x70\x42\xa2\xe8\x41\x3f\xad\x53\x4a\xf4\x44\x88\xa4\xa3\x5b\x18\x81\xb2\xb2\xa4\xc0\x3e\xf8\xad\xf4\xc6\x28\x81\x78\xef\x0b\x3a\x14\x0d\x72\x0c\xf2\x8d\x04\x41\x84\x09\xbf\x89\x03\x10\x42\x31\x39\xc2\x26\x04\x46\x6e\x82\x16\x17\x29\x07\x13\x90\xaa\xd9\x54\x1a\x69\x97\x56\x54\x49\x64\xe9\x5b\x57\x62\xb1\x8e\xf7\x92\x0c\xe0\x22\x18\x35\xe2\x20\x02\xa9\x6d\xb1\x73\x9e\x06\x21\x7a\x3c\x73\xab\x81\x09\x03\x1c\x00\x92\xee\xed\xf7\x5c\x0a\xbc\x91\x48\xa0\x55\x18\x81\x88\x81\xb4\xd3\x32\x3a\x10\xc8\x82\x23\xf7\x65\x0a\x10\x36\x90\xb7\x86\xd0\x32\xb9\x00\x68\x11\xf0\xa7\x0a\x4d\xe0\x40\x7b\x09\x5a\x38\x32\x59\xad\xae\x7a\xa2\x03\xa5\xf4\x84\x34\xc3\x05\xaf\x95\xc4\x72\xf3\x5b\x26\x81\x6e\xd8\xec\xda\x09\x03\xd9\x7b\x49\xd6\x74\x36\x7d\xaa\x38\x10\xde\x90\xdd\x1a\x53\x10\x9c\xaf\xbe\xd5\x5b\x82\x5a\xa3\xa0\xe8\x92\x95\x5c\xc3\xdc\x0e\x67\x41\x23\xd3\x67\x5d\xf5\xad\x72\x34\xb6\x80\x62\x20\x46\xf2\x53\xc1\x6f\xc5\x90\x7a\x47\x3e\x91\xa4\x7a\x27\x2f\x6f\x94\xe9\x28\x98\x55\x32\x6f\x54\x3a\x03\xa5\x23\xfe\xd4\x2d\x56\x28\xbc\x8d\x40\x78\x5c\x51\xb4\xd2\xb4\x56\xa0\xbc\x04\x13\x0c\x45\x46\xf4\x81\x64\x21\xe9\x40\x3a\x83\x22\x61\x01\x42\x05\x10\xd6\x27\xdd\xb9\xb2\x38\x9a\x16\x7f\xaa\xee\x4a\xad\x48\x1c\xd5\xe4\x54\x53\x8d\x26\x72\xd7\xc2\xe1\x00\x7b\xfc\xa9\xbd\x2f\x1c\xc5\xa4\xf2\x05\x89\xc3\x20\x14\x0d\x2a\xa9\x6e\xd6\x20\x8a\x3c\x51\xe8\x25\x46\xab\xab\x6f\x95\x15\x22\x07\x85\x39\x41\x9b\xea\x5b\x05\xa0\x20\x6d\x36\x85\xe4\xc2\x9f\x7a\xec\x2c\x32\xfb\xd1\x32\x07\x32\xc6\xea\x5b\x87\x0d\x25\xdf\x1a\x6c\x07\x4a\xd3\xc2\x99\x0c\x87\x96\xc6\x37\x81\xa4\x10\x5b\x20\x52\x63\x51\x6c\xb3\x19\x28\x13\xf1\x67\x3d\x37\x28\x3c\xd3\x2b\x99\x3a\x7d\xaa\xd6\xa0\x60\x6d\xa8\x07\xb2\xfe\xd6\x3d\xc0\xbd\x8b\x08\x51\x6a\xb7\xc9\xa5\x48\x28\x7f\x47\xeb\xab\xb3\x22\x8d\x92\x20\xbd\xee\x0c\x21\x79\xed\x22\x65\x00\x81\x7b\x1f\x05\x7e\x32\x97\xb4\xb8\x0a\x10\x23\x6e\x55\x61\x48\xfd\x40\x41\xc6\x28\x2e\x88\x14\xa1\x5a\x77\xe9\x45\x50\x85\x72\xb9\x89\x0e\xeb\x54\xf8\xb3\x5e\x20\x08\xe7\x35\x6e\x21\x24\x45\x5a\xbf\xc1\x21\xa1\x7b\x15\x9f\x8c\x5a\xe9\xc9\xa1\x48\x6c\x04\x02\x18\x5c\x54\x19\xc5\x0c\x31\xeb\xd5\x8c\x0d\x72\x28\x06\x05\x5f\x7f\xd7\xeb\x1f\x9b\x81\x74\x21\x02\xb5\x32\x48\x10\x9e\xcc\x5b\xb1\x95\xc8\xda\x09\x0b\x82\xb4\x58\x1a\x47\xff\x1d\x76\x90\xf6\xa3\xa2\xdb\x1a\xfc\xcd\xb6\x37\x34\x6e\x5e\xcf\x41\x9b\xd8\x1a\x41\x50\x0e\x37\xa3\xb1\x05\x16\xa1\x2d\x3c\x41\x14\xf5\xd3\xa5\x02\x47\x8c\xcc\xca\x71\xdd\xd3\x82\x95\x06\x04\x35\x5e\x06\x92\xe0\x68\x7e\x24\xc5\x4f\x53\x44\x5e\xea\x2d\xe4\x52\x96\x46\x10\xa3\xc1\x9a\x88\x3d\xca\x50\x94\xc4\x9f\xea\x5e\x2c\x79\x59\xeb\x02\x89\x15\xf6\x07\xe5\x98\x48\x1a\x05\xfc\xa6\xeb\x79\x95\x22\xdf\x51\x17\x23\x42\x05\x9f\xa1\x80\x84\x3f\xf5\xa4\x38\xd2\xa4\x10\x3d\xb1\xa6\xfa\xd6\xc6\xbb\x96\x14\x46\xb4\x4f\x7c\xf5\xad\xa8\x10\x09\xb8\x86\x56\x9b\xa1\xea\x89\x5c\x55\xae\x67\x48\xe5\xe8\x93\x81\x56\x1a\x7f\xea\x25\x8a\xfd\x37\x16\x54\xa4\x9f\x6a\x24\x0d\x51\x34\x0f\xda\xd1\x6d\x58\x95\x8a\x8b\x37\x20\x7d\x40\x29\xcc\x23\x15\x72\x15\xd9\xc5\x55\x81\x2c\x99\x23\x2d\x93\xf0\xb8\x51\x3c\x48\x1d\xe9\x07\x59\x7d\x2c\x2c\x95\x05\xa9\x3d\x28\xa7\x91\x99\x41\xc6\x05\x34\xc2\x5a\x2c\x87\xd2\x39\x08\xed\xc8\xdc\x59\xc8\x50\x80\xc4\xb5\x12\x7a\x83\x48\xb1\x62\x48\x06\xa7\x67\x69\x71\x05\xab\x98\x11\x65\xd3\xf5\x05\xa1\x40\xb1\x5a\xd2\x10\x25\xa6\x3e\x98\x7a\x0c\x85\x36\x64\x89\x4c\xae\x7f\xe9\x53\x0d\x05\x45\xd5\x21\xd3\xe1\x90\x46\xec\x4d\x6b\x81\x11\x25\x52\x9d\xc3\x85\x00\x34\xee\xe8\xe0\x33\x05\x96\x2e\x52\xac\x5a\x13\x1e\xb2\xcc\xa6\x39\x4c\x9f\xba\x0d\x16\x09\x5d\x8b\x80\x01\xb9\x3f\xde\x11\x09\xc2\x0f\x48\x3d\x82\xe8\x3c\x62\x26\x45\x15\x58\xd2\x3a\x58\x43\xe1\xb7\x70\x99\x49\x32\x9c\x6e\x6d\xc7\x6a\xb1\xaa\x11\x48\x43\xb6\xd1\x28\x83\x23\x8d\xb2\x89\x4f\xd4\x5e\x27\x0d\x20\x9d\x09\x78\x3a\x19\x97\xe4\x2a\x25\x89\x0c\x50\xa3\x71\x7e\x69\x7f\x64\x0d\x72\x24\x25\xe8\x20\xc1\x78\x22\x91\x0a\xe7\x7c\xc4\xd3\x51\x44\x2b\x0c\x77\xae\x4d\x1b\x44\x68\x83\x83\xa1\x69\x89\xea\xc6\x12\xc5\x15\x4a\x14\x22\x7d\xd6\xab\x1a\xf0\x58\xc2\xb1\x32\xb2\x1e\x22\x1b\x40\x7a\x55\x11\x08\x32\x1a\xc7\x53\xde\xea\x11\x58\xa3\x20\x08\x07\x1e\xc7\xc5\x07\x0d\x8e\x2a\xf2\xb8\xf5\xa5\xc2\xda\xdd\x28\xf1\x02\xb8\xb0\xbc\xa7\xb0\x88\x12\x49\x91\x56\x20\x3d\x52\xa2\x00\xda\x69\x3a\xfd\xac\xc1\xbd\x8f\x22\x90\x8a\x92\x59\x50\x66\x84\x4b\x3f\xf5\x50\xd1\x08\x1b\xdc\x30\xc9\x58\x9d\xb6\x2d\xca\x14\xbc\xf2\x37\x34\x19\x28\x17\xf0\xa7\xee\x64\x44\x1e\xce\x81\xf2\x28\x0c\xd6\x44\x1c\xc7\xc5\xae\xc9\x1a\x99\x7e\x20\xea\xa8\x47\x60\x64\x24\x03\xfe\x68\x2c\x07\x17\x1d\x5d\x6c\x04\x0e\x41\xd9\xfb\x1b\x09\x4e\x26\xf5\x67\x81\x6b\x2d\x70\x88\x0a\xcf\x2e\x19\x90\x46\xcb\xb0\x76\x70\x08\xc8\x69\x84\x80\xd4\x0e\xdb\x67\x63\x20\xe2\xd7\x6a\x9d\x00\x15\x4d\xbb\x71\x62\xdd\xb6\xea\xca\x3f\x5d\xf2\x25\xb9\x09\xbb\x2b\x49\x04\x03\x63\x36\x8f\x28\xbb\xac\xdd\xb9\x40\x81\x2c\x75\x23\x11\xd2\xa6\x7c\x1f\x49\x4e\xf4\x28\xa4\x48\x8a\x8f\x29\x9c\x1f\x81\x76\x0e\x6c\x34\x14\xe4\x12\x77\x07\x18\xec\x73\x0c\xfa\xfe\xd7\x08\x22\x5d\xde\x14\x55\xbf\x4d\xc4\xce\x9a\xc0\xd2\x37\x79\x70\x2b\x92\xe0\x6c\x24\x36\xd8\x22\x95\x56\x2e\xd6\x63\x4b\x13\x02\x6a\xcd\x50\x39\x47\x04\x6b\xd3\x63\x9c\x0e\xd0\x89\x50\x52\x09\x7d\x7f\xc3\x41\x53\x38\xa8\xf4\x86\xb6\xf5\xb8\x54\x90\xc5\xf6\x40\x8c\x97\xf2\x74\x96\x17\xc8\xee\xa2\xbc\x36\x49\xe7\x77\xa3\xc3\xc6\x6f\x4e\x1c\x87\x70\x91\x2e\x70\x49\xad\x48\xee\x20\x2a\xac\x39\x4f\x32\x24\xf2\xf7\x37\x5c\x55\x7e\x26\x4a\x61\x77\x49\xe7\xe8\xcd\x9a\x54\xbb\xf6\xdc\xe1\xca\xc2\x53\xcf\xbf\x77\x80\x43\x24\x35\xf5\xde\x47\x0a\xb0\x89\xd2\x3e\xa3\x4f\x3d\x44\xe4\x00\x13\x1c\xf6\x2d\x46\xf2\xce\x52\x85\x04\x25\x28\x2e\xa8\x97\xf5\x6b\xdc\x1e\x6b\x41\x1c\x35\xc5\x92\xc2\x81\x71\x6a\xfd\x5c\x37\x0d\xb5\x01\x63\x34\x56\xa2\x0d\x4b\xdf\xd4\x6b\x43\x81\x78\x42\xc0\x45\x13\xc9\xd6\xc3\x9a\x09\x39\x55\x15\x3c\x51\x8e\x40\x51\x1e\xe9\x96\x41\xd3\x21\x60\x88\xca\x4a\x45\xce\x58\xa4\x9f\xd5\x78\x3c\xeb\xb0\x5f\xdb\xbd\x45\x84\xdd\x22\x17\x76\xb5\xda\x37\xd3\xd1\xa2\x5c\x96\x57\xab\xad\x8a\xed\x0d\xc4\xf7\x23\x5f\xfe\xa2\xad\x56\xb6\x7e\x97\x52\x4e\x1c\xd8\x3b\x07\xf6\x9d\xfc\x4d\x0e\xc8\x52\x41\xfe\xfd\xad\x70\xb5\x42\xc5\x32\xf9\x4e\x26\xf0\x00\x76\xb0\x80\xb0\x6f\xdc\x2f\xb5\x71\x02\xc5\x5e\x74\x08\x89\xf8\x43\xf7\x1d\xfb\xd4\x9e\x5f\xfe\xfe\x46\x84\x4d\x0d\xe4\x79\x47\x25\xb0\x8a\xee\xab\x1f\x5b\x66\x6c\x78\xa0\xb7\x2b\x1e\x66\xe5\x4d\xb6\x43\x69\x40\xd9\x7d\x7d\x01\x25\x7f\x47\x53\x29\xdc\xbf\x8b\xa8\xd6\x0f\xb0\xbd\x97\xcc\xdc\x85\xc2\x33\xc3\x3c\x37\xbf\x99\xf7\xf4\xf6\x9a\x06\x29\x23\x0b\xe0\xa3\x7f\x4f\xa6\x54\x2c\x92\xca\xc7\x93\xbd\x52\x00\x67\xef\xc8\x86\xa4\xe0\xb8\x83\x28\xb2\x81\xbe\xe3\x28\xd7\x15\x12\xe8\xd6\x20\x31\x2a\x9a\xb4\x8d\x4a\xba\xdf\x0c\xf8\x68\x0a\x05\x14\x41\x98\xcc\xa3\xd2\xd5\xa6\x56\x07\xcd\x55\x7f\x14\xb7\xcf\x13\x6e\xac\xed\xd3\x84\xb9\x5b\x34\xdc\xb4\x23\x4f\x52\x71\xe3\xb8\x5f\xb6\x6d\x69\x4f\xd3\x6f\x57\xda\x86\xa0\x35\x0b\xa0\x3d\x1e\xd6\x2a\xa2\x5c\x88\x2c\x3b\x04\xe3\x90\x67\x1c\x71\xf0\x81\x5c\x03\x1d\x45\x7b\xa6\x8c\x74\xd7\x42\xd7\xb5\x48\x16\x79\x75\x8b\x2a\x29\x50\x74\xd0\xe9\x57\xf0\x29\x4c\x84\x41\xda\xbf\xfe\x17\xeb\x03\x6d\xb9\x59\xbf\x33\x6b\xaa\xdf\x35\x04\x72\x0d\xc3\x73\x91\x42\x5b\xa0\xb0\xea\x28\xe8\xb5\x35\xa4\x18\x10\xe1\x0e\x8f\x28\x1d\x46\x1c\x45\x3a\x83\x92\x1e\xd7\xe0\x1d\xf2\xc6\xa6\xfa\x4d\x21\x93\x24\xa8\x21\xe4\xbb\x68\xb0\x47\x9a\x54\x88\xd2\x53\x78\x87\x24\xc6\x32\x0a\xc5\x0b\x5a\x49\xba\x0b\xd5\xc4\x6c\x39\x49\x71\x32\x90\xac\x3b\x0f\xda\xd2\x6d\xb2\x01\x67\x48\x6b\x29\x45\x04\x87\xad\xb2\x60\x83\x69\x2a\x1f\xe3\x7f\xe0\x7f\x9d\x10\x0e\x5e\x24\x49\x5e\xdf\x49\x01\x4a\xc4\x22\x85\x70\x09\xde\xfe\x46\xaf\xe7\x16\x74\x47\x80\x7f\xb7\x15\xca\xe2\x49\xf0\xfc\xf2\x4b\x0c\x09\xd5\x21\xfa\xd0\xf6\x72\xec\x1e\x24\xe5\xc7\x55\xb6\xf5\x0c\xa1\xcc\xef\x88\xe6\x08\xff\xef\x6f\x65\xcb\xea\xc1\xac\xad\x1e\x14\x93\x2c\x2c\x49\xf0\x62\x3e\xfd\xc7\xab\xbf\xc8\x62\x51\x1a\xcd\xf1\x37\x7f\x7f\x43\x51\x53\xed\x88\xac\x19\xe8\xbe\x91\xd8\x02\x47\xbf\x68\xb0\xff\xe9\x2a\x07\x6d\x46\x71\xda\x97\x3a\x45\x1d\x70\x2c\x05\x4c\x4c\xc0\xac\x02\x66\xfa\xb0\x53\xa2\x37\x94\xdb\x09\xcf\x2a\x5f\x2c\xb2\xab\x72\x71\xb3\x9d\xfa\xac\x41\xfa\x24\x68\x9d\xf5\xbd\x18\x6f\xf9\xbf\x1b\xf5\xf7\xb7\xc3\x5a\xd1\x01\x16\xa9\xb1\x3f\x2c\x8a\x0d\x24\xa7\x16\x06\x77\x2c\xca\xa2\xe6\xce\x82\xb0\xea\x7d\xca\xf3\x10\xfc\x6f\x08\x40\x61\x6a\x9d\x45\x99\x47\x9b\x1a\x46\x36\x00\x0a\x72\xe9\x4f\xf2\xac\xb9\xff\x55\x32\x41\x40\xc5\x26\x15\xe1\xac\x72\xef\x25\x13\xf7\x55\xd5\xc8\xe1\x79\x0a\x2d\x27\xbd\x61\xd2\xe1\xd9\x24\xac\xac\x2a\x27\x83\x51\xc2\xd2\xb7\x70\xdf\xb2\x0a\x86\x27\xe7\xc5\x43\xeb\xa1\x8e\xce\x7b\x5e\x9c\x9e\x09\xf9\xfd\xe7\xb1\xeb\xa4\xc9\xba\xb1\x63\x25\x05\xc8\x9a\xc8\x76\x28\xcc\xe4\x6c\xf9\x4e\x76\x81\xa9\x38\x4e\x84\x1f\x42\xe3\x0f\x46\xe3\x13\x9a\x64\x07\xde\x8f\x42\x22\xbb\x81\x39\x79\x8d\xe6\x70\xaf\x84\xc6\xf8\x0f\x58\x9f\x34\x73\x8f\xf1\x2c\xbe\xc9\x97\x93\x27\xf3\x2c\xdb\x86\xec\x20\xaf\xb2\x5e\xe1\x13\x3c\xca\x3a\x38\x68\xd5\x2e\x27\xdf\xc9\xb1\xb1\x2b\xb8\x8d\x05\x17\x24\x1e\x08\xca\xe8\x37\xa1\x62\x4c\xeb\x68\x35\xd2\xb1\x90\xad\x5f\x10\x4c\xa2\xab\x02\x61\x3c\x32\xa9\xc6\xbe\xa1\xa0\x5c\x4c\xd6\x91\xe1\x05\x45\xb9\x07\x4b\x8a\x5e\x3f\x4a\x2c\x88\xe0\xe0\x94\x26\x0e\x09\x42\x40\xd6\x35\xbc\x69\xa3\x0c\x4c\x60\x25\xc4\x18\xc7\xda\xbd\xdf\x50\x61\x72\x18\xc0\x6a\xc8\x00\xcc\x57\xda\xb5\xf5\xfb\x04\xe4\xa9\x9f\xde\x1e\xd9\x44\xd2\x35\xc9\x1a\xda\xbc\xe9\xe2\x14\xa9\x33\x21\x59\xe3\xd7\xd1\xf0\x62\x34\xcc\x01\xd9\xd8\x35\x11\xd5\x7f\x25\x2d\xc0\x08\x34\x5d\x65\xe0\x60\xa1\x58\x8d\x7c\x9d\xe3\xc8\x88\xd1\x98\xa5\x48\x26\xa6\x36\xf5\x72\xbd\x6a\xb0\x02\xcb\xf5\x84\x14\xe0\xdd\x8a\x8c\x96\xa4\x47\xf6\x14\x9e\xd3\x6b\x66\x50\xe8\x26\xb0\xa4\x2e\x5a\x5f\x41\x18\xba\xd5\xb0\x6f\x1c\x50\x30\xed\xca\x73\x81\xc2\xa7\x8d\x44\x32\x55\x83\x80\xfc\xa0\x33\x14\x9b\xcb\x56\x96\x04\x20\x49\xa9\x17\x41\x69\x93\x2e\x29\x29\x6e\xa8\x22\x15\x9f\x8a\x5c\xa7\x8b\x32\xa3\x2d\xb7\xc8\x25\x92\x7d\x92\xe5\x28\xef\xdb\xfb\x5f\x5d\xba\xf1\xa3\xb8\x16\xa4\x57\x25\x65\x42\x48\xda\x0d\x52\x04\x9b\xa0\xe8\xe6\x29\x06\x07\x92\x3a\x67\x31\xc7\xdb\xcc\x81\x09\x38\xbe\xf8\x4d\xb1\x91\x83\x0d\x28\xee\xe0\xa2\x6b\x4f\x2b\x29\xfc\x91\xdf\x45\x36\x56\x2b\x64\x8a\xeb\x7f\xaa\x85\xa7\x05\xf2\xe7\xd2\xc7\x11\x4f\x3a\x69\x49\xf7\x1c\x2e\xc5\xac\x50\x02\x17\xa5\xe7\x10\x09\xab\x25\xd8\x14\x7c\x89\x6c\x00\xc9\xfc\x33\xa8\x48\xbe\x2e\x12\x5b\x8a\x05\x82\xa7\x7f\x6d\xf4\xf7\x37\x1e\x82\x72\xdc\x80\x8b\x01\x47\x9f\x5c\x2f\xbc\xaf\xb5\x4f\xe9\x76\xa1\xba\xc6\xe8\xad\x3b\xb0\x9a\x82\xb3\x69\xe4\xe6\x5d\xfd\x4f\xd5\x70\x47\x6f\xe4\x58\xa1\x47\x38\x10\x9c\x34\xc1\x51\x06\x0a\x7c\x4c\x66\x90\x96\xcc\xa1\x03\xad\x0d\x5a\x89\x95\x02\xd8\x91\x16\xc7\x06\x0a\x18\x5f\x7f\xd3\x29\xa1\xb5\x65\x16\x1c\x99\x1a\x50\xec\xbc\xf4\x22\x0b\xd9\x7d\xe3\x18\xd1\xe5\x15\xd6\x49\x2d\x4d\x4d\xad\xfc\x4d\x0c\x55\x6a\x1c\x8a\x40\xda\x47\x88\xce\xf0\xd4\x9b\xa0\x1d\x45\xee\x4b\x41\xe6\xd4\xdb\x74\x95\x61\xc9\x28\xdb\x81\x23\xef\x9c\x60\x68\x81\xc6\xf4\x92\x0d\x62\x27\x71\xc4\x87\xb5\x52\x3e\xc5\xef\x50\xed\x65\x4a\xf2\x2d\xbd\x62\x21\x22\x62\xd0\x22\x8e\x20\x26\xad\xbe\x27\xd9\xd7\x23\xfb\x22\xc8\x3f\xc9\xd4\x81\xe5\x71\x21\x92\x62\x10\x65\x19\x43\xd1\x04\x23\xb6\x02\x97\x02\xf2\x2e\x74\xf1\xc4\x91\x3f\x01\x25\x02\x07\x6d\x02\x68\xe1\x39\xb2\x39\x64\x8d\x81\xa2\x9c\x57\x64\x47\x82\x22\x92\xb0\x0e\x99\x18\x7a\xd6\x47\xba\x47\x3c\x0e\xd5\x20\xef\x83\x87\xe2\x26\xf7\x84\x30\x41\xe4\x32\x77\x72\x88\xa0\x76\xe9\x23\x8e\x64\x2a\x38\x74\x8c\x6e\x2d\x5b\x3f\xeb\x5f\x95\x1c\x0f\xb8\x0c\x57\xe7\x6e\x0a\x9e\xb5\xbd\x8a\x93\x8e\xfd\xa7\xc0\xb6\xb7\x0b\x07\xf1\x10\x5b\x5b\xb2\xa3\xf4\xf6\x9a\x4f\x60\x40\xfa\x0d\x38\x18\xc9\xf6\x76\x74\xe5\xae\xe4\x71\x9d\xe0\x7a\x92\xd7\xcd\x74\x76\xbb\xe4\xcb\xff\x75\x9b\x2d\x7e\xaf\x08\xdd\xdb\xd9\x75\x7a\x34\xc9\xf7\xf9\xe3\xee\x2b\x3e\x29\x0c\x9f\xed\xaa\x4b\xb7\xc6\xf8\xee\x86\xdd\x95\xdb\xc2\xee\xea\x2a\xec\xee\x70\x88\xef\x14\x75\x77\x20\xaf\x66\x75\x22\x54\xc1\xbb\xb7\xc5\xce\xed\xc4\xe0\xae\xe2\xb3\x0c\x44\xe6\xde\x15\xb1\x9b\x9a\xf0\xb8\x30\x44\x03\xab\x60\x88\x3e\x0e\x40\x3d\xf4\x1f\x94\x64\xc7\x3c\x4a\xbc\xf3\x8d\xc6\x13\x30\x6d\x7b\xa9\xf1\x18\x54\xb8\x2d\xb0\x53\x93\x72\x31\xbd\x47\xe2\x5d\x7c\x77\x3b\x43\xa7\x28\x54\x7b\x83\x4d\x52\x50\xca\x03\xc0\xc8\x2d\xf6\x10\xc8\xc3\x97\xd4\xe0\x08\x0e\xad\xaa\x61\xc0\x63\xa4\xd2\x34\x2c\x4f\x74\x3c\x6d\x43\x76\xd0\x89\xd2\x2b\x7c\xc2\xa1\xd0\xc1\xf1\x95\xa7\xae\x7f\xff\x52\xa9\x66\x22\xd3\x4c\xd7\x22\x9d\x23\x77\x69\xe1\x98\x27\x7e\xd4\xd7\x06\x36\x48\xb8\xd2\xcd\xb2\x1e\xd1\x1b\x4e\x64\x60\xe5\x55\xf2\xb3\xa2\x90\x1a\x29\x8c\x6a\xba\x47\x17\xb5\xf5\x57\xd0\xd5\x9b\x41\x8a\xde\x30\xaa\xfe\xa9\x2a\xf3\xe4\x10\x25\x15\x72\xc7\x28\x25\x69\x43\x8e\xdf\x8e\x83\x23\xb7\x02\x45\x71\xf1\xbc\x6c\x2d\x70\x14\xe0\xc8\xb7\x49\x09\x2c\x47\x7e\x43\xe4\x85\xa5\x34\x45\x74\x26\xf7\x29\x23\x22\xb3\x10\x74\x68\x15\xc5\xe6\x7b\x10\xd1\x8e\x40\x92\x96\x5f\x78\xe4\xcd\xb9\x26\x27\xe0\x3a\x3e\x87\x06\x1d\xc8\xc4\x8e\x62\x7a\x81\x0c\x1a\xa2\x8f\x24\xb3\x25\x37\x2e\x4d\x51\x04\x3c\x32\xc9\x24\x09\x46\xf0\xd6\x65\x52\x92\xed\xbb\xac\x23\x14\x4a\xb0\xda\x41\xf4\xcd\xed\x28\x85\x82\x10\x23\xc5\xdc\x1b\x21\x07\xcd\xc1\x48\x0b\x24\x14\xf8\x08\x21\x9a\xff\x8f\xbd\xb7\xdd\x8d\x1c\x57\x16\x04\x5f\x45\x53\x77\x0a\x68\xbb\x2c\x1d\x7d\xa7\x94\x46\x1b\xf7\xc0\xfb\xa3\x16\xe8\x5a\x60\x31\x40\x63\xd1\x0d\xcf\x40\x4e\xd1\x4e\x4d\x29\x53\x1a\x49\x69\xa7\x2b\xb7\xfa\x31\xf6\xf7\x3e\xdb\x3e\xc9\x82\x41\x4a\x22\x25\x52\xa2\x3e\x5c\xa7\xfb\xde\xc6\xbd\xa7\xda\x29\x92\xc1\x60\x30\x18\x0c\x06\x83\x11\xf4\x2d\x23\x64\xcf\xf2\xdc\x80\x3e\x6f\xb1\x4c\x07\x8e\x0e\x96\x11\x78\x9b\x7f\x92\xe9\xb2\xf0\x49\xc1\xfc\x76\x80\x8c\x36\x0e\x3b\x4e\x40\x80\x91\x01\x96\x8e\x2b\xce\xd6\xbf\x19\x46\x16\x48\x02\xb6\x74\xd2\xf2\xcf\x8a\x6a\xbd\xe5\x2f\x01\xa6\xb6\xfc\xbb\x8d\xe7\x2c\x7f\x1e\x06\x5e\xfe\x59\x51\x2d\xcb\x31\xbb\xe0\x56\x6e\xda\x0b\x02\xc7\x83\xb0\xc9\xa6\x69\xdd\x07\xc4\xfa\x6d\x06\xc1\xc6\xd5\x42\xf8\x2f\x70\xbb\x87\xf5\x2d\x12\x09\x07\xff\xf9\xd9\x72\xef\x21\x98\xba\xc5\x94\x7a\x58\x78\xd4\x6d\xc9\x2f\x0a\xf6\xd7\x0d\x05\x4f\xbe\xe2\x13\x39\xb8\x5e\x53\x08\x81\xe1\x13\x08\x6e\xfd\xe7\x67\xbc\xb5\x05\x8e\x7b\x4f\xfe\xeb\xe3\xef\xbe\x89\x97\x5b\xfb\x7b\x63\xb9\x1b\xfa\x1b\x40\x04\xb6\x1d\xc2\x7b\x7e\xc7\x0e\xe1\x05\xc1\x2f\xb6\x65\xd0\x9c\xc8\xf7\xb6\x65\x6c\x4c\xf2\x59\xc3\x62\xc8\x34\x42\x7c\xce\x85\xf8\x3b\x8e\x77\x4f\xfe\xc0\x35\xea\x8a\x24\x62\x0e\x96\x5b\x9f\x2d\x78\x00\xea\xdf\xe3\xff\x86\x90\x5f\xd2\x74\xf1\xd1\x79\x63\x40\x12\x07\x13\x1f\xd3\xeb\x1f\x96\xf7\xab\xe5\x1a\x8e\xf7\xd9\x0a\xef\xad\x90\x12\x88\x5c\x29\x98\x78\xe8\x96\x07\xf4\xa9\x7f\xf9\xbf\xda\xe6\x3d\xf9\xdb\x36\x69\x6d\xda\xca\x06\x59\x6c\x85\xe4\x8f\xcf\x96\x87\x09\x4e\xda\x92\x12\x87\x42\x25\xad\xe8\xaf\x5f\x2d\xff\x9e\xfc\x5d\xf7\x54\xb7\x22\x58\x58\x9e\x46\xf1\xf3\x0d\xe7\x57\x40\xf8\x1e\xff\xd9\x0e\x84\x38\xee\x35\x83\xf4\x0d\x07\x6e\x24\x6c\x3c\x25\xa6\x65\xdf\x5b\x96\x11\x92\x72\x12\xbd\x28\x34\x3d\xfa\x73\x03\x89\x00\x03\x37\x0c\xc8\x6f\x1f\x2a\x07\xa6\x47\xa0\x5b\x9e\x05\x44\xf6\x61\x17\x30\xcd\x10\xaa\x6f\x6c\x13\xff\xfe\x4c\x68\x6c\xdd\x63\x1a\x3b\x14\x82\x0b\x6f\xd2\x5a\x22\x77\x69\x1c\xde\x03\xad\xec\x66\x70\x1c\x89\x2d\x86\xc4\x16\x47\xe2\xba\x15\x21\x64\x4d\x61\xef\xde\xa5\xfc\x4e\xbe\x73\xf4\x65\xc8\xcb\x51\xb7\x6e\x42\x10\xa8\x89\xdb\xd2\x96\x25\x2d\x50\xd6\xb4\x9b\xa1\x01\x69\x1d\xcc\x6b\x9f\x6d\xc3\xf7\xee\x6d\xc3\x0e\x2d\x28\xd7\x5a\x76\xac\x19\xb4\x61\x59\xa8\x64\x51\x4e\x86\x11\x62\x56\xb7\xe0\x11\x23\xf3\x23\x70\x82\x76\x31\x99\xf7\xf5\x52\xae\x97\x1a\xac\xf3\x7a\x1d\xd2\x1f\x64\xa9\xd2\x25\xfb\xdb\x17\x0b\xde\xf7\xe2\xda\xf7\xa1\x11\x98\xfe\xa6\xfe\xa9\x85\x64\xa1\xe3\x6f\xf4\x47\x77\x9d\x87\x64\x99\x5b\xa1\xe3\xe0\x1a\xd0\x7a\xd3\x4a\x91\x0d\x27\x45\x70\xad\xb6\xd4\x25\xc8\x90\xa6\xf5\x2f\x0e\xb5\x7b\xba\xa0\x28\x02\x35\x04\xbb\x95\x22\x76\x33\xf0\xdf\xbe\x78\x44\x14\xdd\xbb\x04\x0b\x22\x81\x5c\xca\x28\xf0\xc9\x6d\xf9\xc4\xa5\x6c\x02\x00\x69\x0b\xdb\x24\x53\x0b\xff\x05\x9e\x23\xdd\xc1\xe7\x90\x32\x09\x7c\x0a\x5b\x26\x09\x29\x93\x00\x04\xda\x82\x74\x1d\x92\xff\x7e\xf6\x7e\xfb\x62\xd1\x9e\xef\x2d\x0e\x1f\x8b\x43\xd5\xa2\x03\xa0\x12\x85\x81\x64\x71\x9d\xd0\x5f\x84\xdd\x39\xb4\x2c\x0e\x63\x2c\x51\x60\x24\x44\xa2\x30\x43\xb4\xb8\xd1\xd7\xbf\x7e\xb5\xfc\xdf\xfa\xe9\xa4\x95\xf4\x06\xba\x03\x8a\x94\x86\xba\x68\x92\xc6\x50\x64\x55\xb6\xcb\xd6\x8b\x92\x3b\x04\x50\x4d\x73\x10\x01\x98\xa3\x3d\xf4\xe1\x60\x0d\x82\x7e\xfd\x4b\x68\x11\xa0\xdb\xc3\x3e\x0a\x0e\xd7\x41\xf3\x5f\x9b\x08\x34\xfb\xde\x37\xdc\x0d\x3c\x8b\x02\xf1\x56\x97\x42\x2b\xad\x2e\x6b\xea\x40\x9b\xfb\xb6\x96\xdd\xd6\x01\x80\xbf\x7d\xc1\x5b\x8b\x65\xba\xb0\x5f\x86\x9b\x00\xf6\x25\xdb\x0f\xf1\xef\xc0\xf6\xc8\x06\xe2\x3b\xf0\xdb\xb7\x2c\xd0\x14\x6c\xbc\x63\xe1\xa5\xb1\xb1\x41\xb1\xb0\x2c\x4b\xb3\x02\x23\x80\xe4\xe9\xf0\x5e\xc0\xc5\xbf\x2d\xdf\x83\x70\x4d\x96\xef\x3b\x18\x51\xc7\x09\xa0\x7e\x18\x6c\x42\xf8\x6d\x3b\x20\xd4\x03\x93\x6c\xfc\x0e\xc8\x63\xdb\xf0\xed\x0d\x0c\xdb\x0e\x83\x0d\xa0\xe3\x39\x3e\xfc\xf6\x7c\x10\xe3\x36\xc6\x1e\xff\x86\xfd\xcd\x34\xbc\xd0\x0e\x69\xb9\x83\x77\xa8\xc0\xc7\xe8\x07\x86\xe5\x38\x10\x36\xcf\xb6\xfc\x00\xe3\x6b\xba\x3e\x9c\x2b\x7c\xcf\xa3\xc3\xb5\x01\xfe\xc6\x24\xc3\x0d\x43\x37\x84\xfd\xc2\x0b\x7c\xf2\xdb\x27\x3b\x31\x43\x9e\xdf\xbe\xe0\xd3\x05\x48\x89\x8d\x6d\x6e\xee\x43\xc3\xf3\x02\xd7\xc6\xdd\x85\x66\x10\x6a\xa1\x61\x07\xa6\x45\xba\xb7\x42\x2c\xd7\x4c\xcf\xc3\xe4\xc1\x72\xd9\xbd\x0f\x0c\xcf\x71\x02\xf8\xe9\xe2\xea\x81\x61\x5a\x61\x08\xd4\x71\x83\x8d\xa5\x6d\x0c\xcf\x0a\x42\x32\xad\xa1\xe5\xdd\x6f\x8c\x8d\x03\x6e\x76\x81\x61\x6e\x6c\x72\x01\xe9\x92\xdf\x9e\xef\x39\x10\xbd\xcc\x24\xd8\x9a\x7e\x10\xde\x07\xc6\xc6\x0f\x00\x59\xc7\xc5\x7a\xa7\x63\x85\x1b\x98\x2b\xcf\x77\x02\x8d\x43\xfd\xb7\x2f\x9e\xe1\x7a\x90\xd6\xc8\xc7\x87\xbd\xcd\xbd\x67\xb8\x64\xa8\xf8\x37\x64\x24\xf2\x4c\x1b\xef\xc9\x3e\x26\x31\x9c\x67\x6d\xd7\xf5\xe0\x77\x80\x37\x02\xd7\xf7\x6d\xa2\x32\x05\x20\xe6\x7d\xdb\x21\x8f\x4e\x7d\xd7\x83\xa8\x4e\xd6\xc6\xdc\x68\x01\x06\x63\xbb\xf7\x9e\x61\x86\xb6\x0b\x4e\x18\xfe\xc6\x09\x34\xd7\x08\x37\x96\x8f\xcb\x5d\xc7\xf6\xe0\xa6\xcb\x73\x43\xac\x92\x3a\xe1\x66\xb3\xb9\x77\x0d\xc7\x0c\x4c\x2c\xf5\xdd\xc0\x84\x94\xf1\xa6\xb1\x31\x5d\x1b\x92\xc7\xdf\xbb\x90\x64\xd0\x82\xf7\x6b\x9e\x0b\xd1\x3a\xe0\x95\x18\x46\x9b\x1b\x16\x1e\xa7\x1f\x3a\xe0\x77\x60\x6e\x36\x1b\xfb\x1e\xff\xf6\x2d\x08\x46\xb0\x09\x3c\x5f\xc3\xbf\x43\x2b\x80\xdf\xa1\x83\xcf\xbb\x1b\xd3\xb6\xa1\x7e\x60\xda\xce\x3d\xfe\x8d\x07\x8a\xcb\x4d\x52\x6e\x99\xe0\xca\x62\xfa\xa6\x47\xc2\xb4\xb8\x30\x39\xa6\x67\x6e\x7c\xa8\xbf\x81\xf7\xff\x1e\x3e\xb5\xe2\x9f\x24\xcc\x86\xe9\x07\x24\x84\x0e\x8b\xce\x6f\x5f\x02\x23\xf4\x03\xb8\x60\xf2\x42\xd7\xda\xdc\x07\x46\xe8\x58\x76\x88\x09\xea\xb8\x2e\x26\x50\xb0\x21\x7b\x6d\xe8\x6e\xb0\x96\x11\x98\x81\x85\xe9\xbd\xd9\xb8\x9e\x77\x8f\x55\x7a\xcb\xc5\xe5\xa1\xeb\xf9\x10\x15\xcd\xb3\x43\xdc\x8f\x6d\x7a\x3e\xf0\x88\xb5\x71\x5d\xf0\xdc\x0b\xb1\x62\x18\x84\x26\xbc\x60\xb6\x7d\x8b\x70\x9c\xe3\x59\x70\x55\x66\x99\x78\x10\xd6\x66\xb3\xc1\x83\x75\x5d\xd3\xb6\xef\x37\x86\x1f\x60\x0e\x83\x37\x66\xa0\xe3\xd8\x56\xe8\x81\x0e\xe9\x86\x01\x9e\xad\x4d\xe0\x84\xe0\xd4\xe1\x04\x1b\xef\x97\xc0\xd8\x84\x81\x8b\x89\xe9\x07\x8e\x8d\x37\x70\x2b\xb0\x5c\x08\xb8\xe7\xb8\xe0\x5c\xbf\x31\xbd\x00\x13\xd1\xf4\xbd\x10\xb8\x05\xb0\x73\x0d\xdb\x0c\x6d\xef\x3e\x34\x36\x5e\x68\x5b\x70\xdb\xe6\x5b\x44\x31\xf0\x5d\x88\x44\xe6\x78\x0e\x5e\x31\x1c\xb1\x7e\xfb\x82\xe5\x93\xe7\x62\x76\xc2\x3a\x0d\x91\x5f\xc0\x5d\xd6\xc6\xc6\xeb\x1c\x6b\xce\x26\x44\xf3\x0b\x36\x76\x48\xd6\xbf\x05\xc4\x75\xed\x0d\xac\x7f\x1b\x2b\xa6\x9e\xe1\x9a\x70\x13\x6e\x1a\xfe\xc6\x25\x49\xaf\x2d\x48\x30\x62\x07\x2e\x44\xe7\x71\x3c\x2c\x2e\x30\x73\x03\xef\x84\x1b\x1b\x33\xbb\x65\x98\xa6\x1b\xc0\x65\x3a\x28\x5a\x96\xe1\xd0\x1c\xd3\xb6\xef\x86\x58\xdc\x59\xb6\x85\x99\xde\xdc\x38\xa0\xff\x1b\x41\x60\xc2\xef\x20\xf0\x61\xf1\xf8\x0e\x9c\xc3\x4c\x1f\xcb\x13\xbc\x98\x1c\x10\xe0\x9b\xd0\x74\xc1\xdc\x13\x6c\x4c\xbc\xf6\x5c\x38\x44\x19\xb6\x09\xd1\x3a\x4c\x3c\x7b\x00\xdd\xf3\x42\xf8\x6d\x11\x61\x6a\x99\x90\xfd\xca\x34\x4d\x8f\x68\xc8\x0c\x6d\x7e\xfb\x82\xd5\x6d\xcc\x7b\x56\x68\xb8\xa6\x17\x60\xc5\xc5\x0b\x89\x34\xf4\x02\x17\x94\x15\xcb\x35\x7d\x22\x23\x3c\x38\x1c\xf9\xb8\x7b\xb2\x19\x38\x70\x74\x32\x37\x20\x4d\x6d\xcb\x26\x6a\xfa\x06\x4b\x79\xbc\x88\x7d\xa2\xfa\x84\x21\xd9\xb4\xcc\x30\xc0\xe7\x54\x1b\x1f\x2b\x36\xe4\x74\x69\x79\xc6\xc6\xf1\xc8\x29\xcf\x0f\x60\x89\xda\x70\xf9\xbe\x31\x36\xbe\xb5\xc1\x27\x28\xd3\x0f\x40\x9a\x82\x10\xf5\x8c\xd0\x36\x41\x98\xda\x6e\x08\x27\xe3\x4d\x60\xfb\xd0\x9b\x67\x86\x18\xba\x07\xb6\x23\xcc\x74\x2e\x9c\x95\x1d\x87\x4a\x43\xcf\x85\xee\xac\xd0\x02\xd9\x6e\xdb\x9e\x87\xeb\x5b\xb6\x43\x14\x3e\x20\x8f\x07\x4b\x12\x7e\xfb\x1e\x39\x8c\x30\xd4\xf9\xed\x0b\xe9\x08\xf0\xdc\x38\xb6\x87\xf5\x41\x17\x66\x1d\x73\xcb\xc6\xd6\x6c\x13\xa4\x10\xf8\x84\x9a\xb0\x03\x83\xa3\xe2\x06\xbc\x9f\x81\xd3\xe1\x35\x89\xe3\xd9\xd0\x29\x5e\x09\x78\x79\x62\xf1\x70\x0f\x22\xdb\xc6\x33\xef\xd9\x70\xf4\x0b\x8c\xd0\x85\x05\xe6\xf9\x30\x15\x81\x11\x60\x29\x14\x18\xbe\xe5\x3a\x01\xae\xef\x39\x4e\x48\x22\x9c\x01\x38\x7b\x63\x02\x03\x85\x9e\x07\x3b\x82\xef\xe3\x93\xa3\x67\x04\x01\xa6\x7c\x60\x78\x1b\xbc\xd3\xf8\x86\x05\x29\xe8\x02\x2c\xdd\x41\xb8\xbb\x9e\x05\xdd\x39\x1b\xbc\xfe\x20\xb5\x39\xd4\x77\x4d\x50\x7c\x21\x30\x51\x60\xb8\xf0\x86\x03\xff\xf2\x6d\xad\x43\x08\x60\xa4\x0d\x9e\x12\x17\xcb\x2a\x3c\x15\xbe\x61\xfb\x90\x4e\x2f\xf0\x37\x00\xd5\xf7\x21\x09\xfb\x06\x0b\x27\xfc\x3b\x24\x22\xd4\xb7\x5d\x0b\x4e\xca\x1b\x37\xc4\x42\xc3\x0f\x5d\x40\x7a\xe3\xfb\x01\xf8\xfe\x79\x01\x4c\x84\xe5\xc2\x6e\xe7\x06\x3e\x70\x69\x10\x90\xec\xf7\x1b\x3b\x74\x31\x97\xb9\xa1\x03\xc1\x25\x5c\xbc\x75\x63\x12\x40\x04\x0a\xdb\x09\x1d\xc2\xd4\x81\x03\x22\x24\xdc\x84\x30\xcd\x56\xe0\x5b\x20\x4f\xad\x80\xf4\xc6\xe0\xfe\xdb\x17\xdf\xf0\x37\x0e\x1c\xe6\x02\xdf\x73\xc2\x7b\xac\x5a\x38\xb0\x3b\x87\x41\xe8\xe3\xc5\x1e\x38\x9b\x0d\xde\x3f\x2d\xd3\x07\x81\xec\x6e\xf0\x8e\x15\x1a\xb6\x19\x98\x78\xd7\xb5\x7c\x0b\x82\x74\x82\xf7\x06\xd6\x3c\x4c\xb2\x78\x1c\xd7\xdb\x80\x4d\x05\xef\x5b\x30\x35\x3e\x56\x02\x2c\xd3\x25\x1b\x56\xe8\x81\x6c\xf1\x1c\x8b\x90\xde\xc4\x78\x61\x5a\x41\x0a\x41\x98\xba\x7b\xcf\x08\x37\x34\x72\xa9\x6d\x79\xf0\xb0\xd8\x05\x93\x82\x69\x6c\xf0\xf0\x3b\xd8\x63\x0d\x25\xf4\x40\xd2\xba\x66\x08\x47\x48\xdf\x21\x76\x19\x6b\x13\x60\x81\xea\x3b\x16\x5e\x34\x8e\xe1\x58\x1e\x80\xb1\x42\x3c\xb5\x78\x0e\x88\xc2\x65\x12\x16\xdf\x60\xc1\x64\x41\xac\x20\x9b\x12\x6d\x43\x0d\xcf\x64\x30\xa6\x05\x02\xcb\xb4\x03\x58\x9b\x01\xac\x55\x10\x60\x30\xb8\xc0\xf5\xa8\x80\x23\xe0\x83\x8d\x13\x82\x04\x81\xd1\xb8\x86\x85\xe7\x14\x4b\x10\x70\xb4\x00\x51\x05\x68\x85\xb6\x83\x75\x17\xcf\xb3\x3c\x9b\xc2\xc7\xb4\xf7\x42\xfc\x5f\x2c\xe2\x9c\x00\xca\x37\xf0\xcc\x09\xeb\x83\x30\x37\x9e\xed\x78\x16\xe8\x7f\x8e\x05\x5a\x43\xe8\x39\x20\xcf\x9d\xd0\x82\xf8\x00\x9e\x0f\xcb\x91\x21\xce\x6f\x5f\x30\x63\x9a\x90\xc9\xd8\x70\xb0\x02\x85\xff\x8b\x95\x17\xcc\xcf\x78\xbb\xc1\xc3\x86\x68\x7f\x98\xea\xc4\x1c\x67\x39\x16\x84\x89\x36\x3d\xdf\x05\x11\x14\xd8\x70\x78\xb6\x1d\x42\xa5\xd0\xf7\x88\x61\x86\xd8\xf2\x5c\x1b\x2c\x25\x2e\xd9\x0e\x7c\xc3\x0c\xbc\x00\x22\x1a\xb9\x64\xf1\xe1\xff\x62\xf9\xe4\xdb\x44\x4b\x0c\x36\xf8\xb7\xe9\x3b\x78\x2e\xf0\xb6\xe2\x11\xa5\x95\xca\xcd\x0d\xde\xbc\xb0\xd0\x09\x7c\x97\x28\xc1\x44\x70\xb9\xae\xe3\x61\x3d\xdf\x72\x1c\x32\x79\x20\x1c\x36\x86\x69\x93\x00\xcf\xe6\x86\x04\xb7\x66\x47\x3b\xf7\x3c\xca\x9c\xa7\x44\x67\x52\xb6\xf8\xbb\x28\xe0\x3f\x3d\x57\x6a\x46\x9a\xed\xa2\x34\x99\xe7\xf9\x11\xc5\x71\x81\xca\xf5\xf2\xb5\x0d\xc0\x53\x3a\xc3\x8a\xda\xcf\x38\xc2\xf6\xc1\x5c\x74\xfd\x39\xcd\x1e\xff\x02\x29\xc4\x03\xcd\xac\x53\x0a\x99\x18\x40\x9d\x52\xc8\x0c\x34\xf3\xdb\x17\x9f\x86\x09\xd9\x6c\xdc\x7f\xfa\x90\xd4\x94\xfc\x4b\xfd\x01\x37\xbe\xb6\xf9\x8c\x85\x43\x84\x25\x50\x48\x02\x9e\xd3\x17\xe1\xf8\x08\xaa\x63\x55\xc2\xff\x76\x70\xf0\x92\xd1\xcc\x7f\x42\xb1\xaf\xd1\xff\xc0\x45\x11\xd6\xfc\x6c\xc8\xbc\xe6\x86\x76\xd4\xed\x03\x62\xde\xda\x14\xcc\x17\x48\x3e\xae\x81\x42\x67\xc1\x5d\x9d\x65\xc3\x81\xc9\x01\x1b\xa5\x43\xb2\xbb\x06\x0e\x09\xd5\xb5\xa1\xdf\x3c\x23\x70\xea\xba\x78\xe1\x6b\x9b\xbd\x6b\x04\xee\xb7\x2f\x1e\xbc\x26\x0d\x0c\x6f\x8f\xb5\x70\x1f\x43\x75\xc0\xb6\xe8\x79\x20\x8a\x3c\x62\x71\x77\x1c\x0d\xac\xf5\x96\x8f\x15\x70\xcf\xab\x3f\xe2\x23\x41\x53\xbd\x81\x45\xae\xa4\x4c\x4f\x33\x3f\x5b\x86\x47\x06\x04\xf7\xd4\x24\x16\x86\xe9\x1a\x3e\x3e\xed\x6c\x6c\xff\xde\x35\x02\x62\x4c\xc6\x9a\x06\x86\xef\x10\x68\xf8\x87\x09\x4a\x84\xf7\xed\xe0\x19\x10\xc3\x79\x63\xfb\x3b\xcb\xb0\x1d\x78\x5a\x0a\xef\x31\x43\xb8\xba\xf3\x37\x96\x86\xf5\x47\x4c\xe9\x8d\xed\xef\xc1\xfb\xaf\xdb\xa9\xa5\xb7\xbd\x2e\x08\x0f\xc8\xf0\xb3\x28\x3a\x20\x5b\x3c\x90\x01\x86\x3a\x90\xa5\x46\x81\xe2\xa4\x40\xbb\x4a\x8b\xab\x8b\xae\xd7\xbf\xfe\x0a\x0b\xc6\x21\xd1\x66\x35\x8b\x5e\x75\xfa\xb6\x6e\x6c\x02\x37\xf5\x0c\x07\xf4\x76\xdb\x71\x9a\x52\xb8\x8b\xf4\x83\x5f\x42\x83\x98\xfe\x37\xfe\xe6\x9f\x75\x19\x44\xbe\x0d\x03\xe7\x05\x9e\xcb\x7a\x3b\xdd\xd8\x90\xa7\xe3\x3a\x8d\xb5\x62\x3a\x90\xd3\xc8\x35\x6c\x2b\xd0\x21\x87\xae\x0d\x0f\xb0\x2c\xac\x67\x7a\x1b\xdd\x81\x1c\x6d\x16\xa4\x42\x0c\x43\x07\x42\x42\xd2\xc0\x2f\x96\x1d\x40\x3e\xb7\xd0\xb7\xf1\xff\xea\x78\x21\x10\x1c\xdd\x0c\xc3\x3a\x79\xb2\x07\x4e\x90\x1e\x3c\xdc\xb1\xc0\xaa\x1c\xe8\xae\xe1\xe2\xb3\xba\x01\x6a\x0a\x56\x91\x7c\xc3\x86\xa3\xa8\xed\x5a\x1a\x78\x69\xba\xf6\xaf\x40\x83\x6f\x07\x02\xc1\x74\xdc\x17\xcb\xb0\x05\x2e\x40\x3b\x1d\x5e\x14\xc3\xf3\x1f\xd3\x87\xf3\xa6\xee\x1a\x36\xc4\xaa\x0e\x1c\x2f\x0a\x20\xa6\x65\xd0\x44\xb6\x84\x78\x9a\x70\x91\x66\xb9\x3b\x23\xd8\x04\x3a\x5e\xff\x34\xad\x33\xcd\x5f\xec\xc2\xc3\x39\x0b\x22\x63\xd9\xee\x46\x27\xf6\x70\x07\xc2\x88\x3a\x1a\xc9\xd0\x67\x73\x51\xf1\x2d\x7c\x72\x31\x36\xae\x87\xb1\x4c\x5d\xf0\x2e\x76\x0c\xf2\xd6\x1c\x0b\x98\xb9\xaf\x88\x3b\x4c\x7b\xf5\xfd\xf7\xa7\xac\xf8\xb9\xca\xb2\xf4\x31\x2a\xf4\x2a\x7b\x7e\x4e\xd1\xc3\x45\xaf\xd3\x98\xcc\x7e\xac\xd8\x35\x68\x4e\x7b\xa0\xe8\x81\x5f\xf5\x5e\x37\x36\x61\xaa\x1b\x76\xa0\x1b\xf6\x06\x7c\x66\x2d\x8d\xfc\x6b\x6a\x74\x29\x84\x34\x53\x1c\x4d\x1f\xa7\x99\xf0\xc5\xc2\xa2\xc7\xb7\x34\x12\xe6\x56\x37\xe0\xec\x0a\x2f\x43\xbd\x4d\x0a\x0f\xda\x83\x17\x0c\x1b\xac\x19\xe1\x2f\xb6\x69\xb8\xf8\xf8\x96\xea\xf8\xa7\x8e\x25\xa2\xaf\x99\xf7\x1b\x83\x5c\x4f\xc0\x1e\x11\x86\x1a\x56\x6a\xbd\xff\x06\x5f\xe1\x4f\xb8\x3f\xd2\xea\x5a\xd0\x2f\xd4\xab\x7f\x70\xaf\x05\x2d\xcf\x77\x48\xf4\xbe\x91\x19\xea\x52\xfe\xea\xbb\xf1\x54\x20\x54\xa1\x73\xa5\x3f\x25\x69\x85\x8a\xff\x41\x9f\x01\xd5\x7e\x54\xb4\xc5\x9f\x5e\x0c\x6d\xc0\x81\x2f\xf2\xea\xac\x2c\xb0\x81\xe3\x65\xec\xc2\xde\xe5\xa5\xb6\xe1\xd8\x3e\xc4\xe1\xf2\xf8\x7c\xd9\x34\x79\x75\xaa\x43\x19\xfc\xeb\xff\x93\x85\x63\x9a\x04\xf8\xb7\x2f\x24\xa5\x80\xed\x45\x24\x2b\x7f\x9d\x29\x75\x03\xfc\xc1\x7e\x33\x2d\x1d\x3e\xce\xdf\x5e\x38\xba\x0b\xf6\x17\xbe\x7c\x3c\xb9\x50\x8c\x8e\x6f\xe3\x09\x86\xda\xac\x6a\x34\xdb\x1a\xd3\x7a\x52\x5e\x22\xd2\x9d\x52\x6e\xa2\xf2\x6b\x32\x90\x41\x91\x2d\x55\xc9\x4b\x84\x3b\x96\xe4\x26\x02\x50\xff\x9a\xcc\x44\x13\x18\x19\x8c\x7e\xc4\x78\x15\x44\x58\x4f\x24\xba\x22\x8d\x6e\xf3\x4f\xcb\x34\x42\x72\xd1\x1b\xfa\xb5\xb3\xaa\x66\x3b\x3b\x7c\x3a\x22\xdc\x88\xe5\x0c\x3e\x1f\x59\xba\x65\x91\x8d\x06\xb2\xe5\xdb\x16\xd6\x89\x40\xd2\x5b\x1b\x5b\xdf\x50\xf8\x7e\x88\xff\x57\x47\xf5\xd0\x65\x3d\x58\xf8\x08\x8f\xa1\x6a\x58\x71\xa2\x7f\xd9\x24\xd4\xb7\x45\x9e\xc9\x6b\x00\x1e\x5e\x45\x43\xf2\x14\x3b\x20\xae\xb3\x96\xfd\x4f\x2c\xb1\x42\xa3\x4e\x69\xac\xd9\x06\xe4\x63\x80\xa7\x3d\x2e\xde\xb3\x8d\xc0\xc3\x4a\xaa\xe5\x93\x84\x0c\xce\x2f\xae\xb1\xd9\x38\xe4\xfe\xc5\xff\x67\x68\xb8\x3e\x1c\x7e\xfd\x3a\x47\x2c\x06\xfa\xed\x00\x86\x9d\x8d\xee\x8b\x2b\xc1\x56\x6c\x47\x6c\xd7\x7a\xfd\xa3\x5b\x99\xc0\xd0\x49\xdf\x60\x69\x03\x2b\x90\x23\xcf\x63\x3a\xbe\x7e\x5b\x66\x93\x71\x75\x93\x4f\x48\xfd\xc0\x58\x66\xbb\xaf\x68\x3d\x57\x29\x39\x38\xa5\xe3\xa2\xa0\xf9\x8c\xd3\x62\x0f\x0a\x5e\xaa\xf0\xed\x2f\x71\xd9\x89\xf9\xd9\xbc\xb7\x7c\xc3\xb5\x02\x47\xb3\x4d\xb0\xa2\xb6\xbf\x88\x41\x75\x63\x78\x81\x45\x6c\x91\x50\xe0\x6a\x96\xad\xb9\xf7\xf5\x67\x57\x73\xb5\xf6\x6f\x72\x33\x44\x6b\xd6\x9f\x01\x94\x66\x9b\xbf\x7d\x21\x37\xa8\xcc\x95\x2a\x73\xd1\xda\xdc\xbc\xd6\x17\xa4\xec\xdd\xaa\xc6\xdc\xbb\x6a\x36\x77\xbf\x7a\xdf\x82\xe0\xae\x56\x35\xdb\xfe\xed\xcb\x46\xb3\xac\x7b\xb8\xe5\x70\xdd\xcd\x06\x6e\x55\x36\x78\x2c\x26\x3e\x08\x9a\x9f\x2d\x70\xa9\xf1\x3c\xdb\x01\xa7\x30\xab\xa9\x88\xff\xb4\x7e\xb5\x9c\x7b\x0b\x4c\x62\xb4\x06\xfd\xaf\x0b\x95\xdd\xcf\xc1\x7d\x03\xcf\xd5\x36\x4d\x3d\xfc\xd7\xaf\x96\xf5\xdb\x17\xa8\x78\x0f\x41\x6f\x30\x48\xc8\xe0\xdb\x74\xe0\xd4\x1d\x38\x6d\x07\x75\x4d\x97\xfc\xff\x67\xcb\xc7\x93\xd3\x74\xda\x76\x61\xd1\x3e\xee\xad\x76\x6c\x4d\x4d\xa2\x83\x98\x9f\x2d\xf7\xb7\x7e\x28\x85\xf1\xc5\xdf\xb0\xaf\x68\xed\xb7\x85\xdf\x21\x59\xa4\x5e\x66\x45\xd5\x7d\xf4\x51\xfb\xb3\x33\x4b\xa2\xc0\xfb\x70\xb9\xfb\xd3\xb9\xb2\xc3\xb3\x89\xee\xb3\x6c\x47\x73\xf6\x96\xd9\x7f\x4a\xed\x88\x1e\x40\x7c\xfb\xe2\x68\x7e\xff\x95\x88\xcf\x00\x34\x43\xcd\xff\xec\x7c\xfb\x02\x2e\x67\xe4\xca\xc0\x75\xf8\x54\x52\x34\xa1\xb7\xef\xa4\x8e\xee\xb0\x3a\x9e\xde\x28\x79\xbf\x10\xaf\x5c\xd7\xfd\xd5\xe7\x93\xf3\xc2\x0b\x14\xcd\x7c\xc1\xc7\xbc\x5f\x42\x03\x8c\xb1\x1b\xbb\x53\xc1\x84\xa4\x50\x7e\xea\x68\xd0\x33\x3e\x42\xd5\x41\xc1\x5c\x07\x77\x8c\xc7\x11\xf6\xc7\xe1\xb0\xe3\xf0\xb5\x10\x8f\x03\x88\x06\xef\x4c\x78\xaa\x59\xf6\xde\x51\xa5\x9a\xb2\x2b\x7f\x97\x77\x84\x5c\xd9\xa9\xa2\xbc\x2d\x19\x79\x96\x26\xbb\x37\xfd\x10\x1d\xa3\x67\x74\x40\xc7\x19\x0f\xd9\x7a\x20\x44\x2f\xc2\xa6\x6f\x71\x0a\xa8\xcd\x78\xb2\xa6\x84\xec\xf8\x06\xaa\x80\x9c\xc2\x2b\xb6\x61\x64\xa6\x6e\xc7\x43\x38\x4d\x7e\xd8\x36\x8c\x1a\x0d\x65\xbd\x4f\x9e\xf7\x69\xf2\xbc\xaf\x7a\x25\x52\x54\xb0\x30\xac\xa2\x42\x87\x5d\xfa\x4f\x73\x30\x25\xee\xd3\xf0\xc2\xb8\x2b\x37\x1c\x57\x33\x7f\xf1\x0c\xdb\xf7\x35\x0f\x82\xdb\xe9\xae\xe1\xdb\xf0\xd4\x97\xcf\x55\xe8\x12\x55\x3a\xf0\x52\x62\xab\x75\x0c\x2b\xd0\x21\x3b\x83\x6b\xb8\x01\x9b\x76\x1c\x9e\x82\xdb\xc6\x26\xf4\x7f\x09\xe0\x56\x2d\xd8\xa4\xae\x61\x41\x10\x47\xcb\xe9\x55\xd4\x71\xcd\x14\x40\xe9\x18\x54\x48\x8c\xc1\x90\x98\xa6\x87\x02\x09\x75\x44\x91\xd4\x31\x96\xbf\xd4\x03\xfb\xa6\xb6\xfd\x75\x66\x47\x24\x6e\xba\x55\xa4\x71\x69\x52\x2e\x04\x7a\x3d\xf7\x7f\x9a\x69\x97\x9b\x45\x3b\x2f\x03\xfd\x0d\xa6\x6d\x4a\xe2\x1f\xd7\xaf\xb1\xfb\x5c\x60\x31\x4c\xa0\xb7\x5c\x20\x64\x02\x78\x65\xdd\xe5\x02\x5d\xc8\x06\xb4\x2a\xe1\x83\x96\x0d\x74\x21\x1b\x58\x0c\x17\x30\x4c\xb0\x31\x1c\x07\x33\x01\x97\x3b\x5e\x33\xbc\x6f\x07\x53\xb3\x0d\xd7\xf2\x7f\xf1\x0d\xd7\xd1\x7c\xc3\xec\x6c\x57\x9e\x0f\x39\xf8\xf0\x78\x20\x7f\x10\x44\x78\x86\xd4\x30\x4e\xc8\x75\x8b\xa9\x01\xf1\x4a\xbd\xd0\x85\xa4\xb7\x10\x90\x11\x52\x9f\xf8\x96\xdf\x49\xd2\xeb\x6b\x66\xea\x50\xbb\xa7\x6f\xf9\xb8\x91\x07\x59\x5c\xfc\x0e\x4c\x4b\x07\xa8\xd0\x27\x24\x7e\x01\x3c\x74\x8c\x48\x17\x4f\x47\xc7\x88\xfe\x82\x11\x0c\xad\x05\x97\x03\x0c\x8f\xca\x98\xbf\xe1\xfb\x2a\xaa\x53\x8e\xb7\x32\xb0\x8a\xf1\xe7\xce\x0d\x1a\xae\xf8\x67\xd3\xfd\x3c\xcd\xad\x6d\xfb\xa6\xa9\x41\x66\x50\xbf\xfd\xa0\xdb\x9f\x15\x5e\xf4\x12\x55\xe8\x1e\xe2\x5b\xe1\xa6\xf4\x0f\xfc\xf9\xc5\x33\x6c\xd7\xdf\x99\x9a\xe1\x85\xbe\x61\x3b\x1b\x08\xa4\x16\x1a\xbe\x47\x22\xb4\xa6\x9e\xe1\x04\x0e\x64\x64\x74\xa3\xee\xcb\x5f\x08\xed\x9a\xba\x18\x82\x0e\xff\x76\x6a\x98\xc0\xf7\xf6\x2f\x21\x0d\x0f\xec\xfb\x9d\x67\xc0\x1b\xc3\x0d\x7d\xcd\xfa\x8c\x3f\x7c\x3b\xe0\xaf\x3e\xfe\xf2\xab\x4d\xee\xc8\x3a\x8c\xe6\x39\x86\x6d\x33\x08\xf5\xd4\x38\xd3\xff\x25\x24\xd7\x5a\x8e\xe1\x5a\xdd\xc5\xe9\x6b\xe6\x2f\xb6\xb1\xa1\x6e\x57\x3c\x63\xe2\x15\xe8\x0d\x64\x09\x55\xd1\x01\x5b\xee\x11\x70\x24\x53\x38\x2d\x6e\x82\x51\xbf\xd4\x35\x9e\x8b\xec\x94\xf3\xf9\xd4\x27\x44\x50\x18\x82\x73\xd1\xf5\xd3\x11\xcc\x8c\xff\x42\x89\xaf\x6a\x0e\x30\x35\xf3\xd7\xf0\x57\x7c\x72\xfc\x1c\xfe\x1a\x7e\xb6\x7e\xb1\x34\xf3\xb3\x39\xe7\x10\xd9\x8c\x59\x30\x5f\x6d\xd9\x14\xeb\x11\x26\xdb\x0e\x1d\x2b\x54\xac\x66\x41\x1a\x06\x29\xd1\x5f\xe5\xed\x66\x98\x8f\x84\x90\x2e\xba\x9e\x15\x7f\x2e\x69\x29\x7d\x74\x0b\xb1\x05\x78\xc9\x63\x91\xb0\x05\x7b\xbf\x1b\x99\xc0\x82\x7c\xc3\xb6\xf7\x02\xb1\x85\xb0\x32\x01\x37\x96\x9e\xd3\xad\xe6\x91\x38\xa7\x9e\x61\x61\xe1\xe9\x87\x3a\xc8\x54\xc3\x86\xb7\xb1\xe4\x7d\xeb\x5e\x27\x41\xca\xda\x73\x6c\x73\xb2\xb4\x5e\x74\x3e\xaa\x59\x5d\xb0\xd7\xfd\x5e\x12\x76\x88\x78\x60\x75\xe5\x19\x3e\x4c\xeb\x96\xf5\xed\x0b\xd6\x66\x1c\xc3\xfb\x75\x63\xd8\xa9\x65\x58\x81\x6b\x04\x9d\x5d\xdf\xb1\x7c\xc3\xb7\xec\x17\xd7\x08\xbc\xcf\x58\xc7\x1c\xcb\x72\xef\x42\x74\x06\xd3\xf0\x30\x2a\x46\x1d\x92\x7a\x63\x6c\x5e\x9c\xfa\x03\xbc\xef\xc5\x28\xd8\x86\xb3\xb7\x0d\xeb\xc5\x36\xfa\x65\x0e\xd7\x5c\x37\x36\x7b\xdd\x21\xb1\x72\xc0\x03\x81\x3f\x9a\x7b\x9a\xbb\xef\xa6\xf3\x87\xb3\xb9\x30\xa4\xc3\xb7\x2f\x1b\xfc\xc9\xed\x19\x03\x3e\x07\xac\x31\x20\xd0\xdc\xbd\x0e\x69\xad\x5d\xb2\xbd\x74\xfb\xf4\xa7\xf7\xd9\x37\xa4\x74\xfb\xf4\xd9\x3e\x83\x5e\x9f\xc1\xf4\x3e\x83\xd1\x3e\x03\xd2\xa7\xf2\x76\xd5\x2e\x5f\x81\xf8\x63\x0a\xd5\xcd\x14\x45\x96\xa2\x35\x6c\x0a\x42\x38\x0a\xc7\x7d\xbe\xdd\xe4\x93\x39\xdb\x1c\xef\x88\x25\xfa\x13\x44\xd9\x54\x90\x6f\x81\x66\x45\xae\xe6\x52\x87\xaa\x40\x23\x7f\x63\xed\x2b\x00\x9f\x23\xcd\x8b\x6c\x48\xbf\x4e\x6e\xaf\x3c\x48\x25\x5a\xff\x36\x2d\x7d\xe8\x16\x95\x8f\x33\x63\x99\xdc\xbd\x2c\xe8\x77\xf4\xe7\x0b\x2f\xb5\xa8\x78\x32\x3c\x5e\x23\x84\x38\x7a\xe0\x62\xb2\xf7\xfa\x92\x17\xf4\x36\x39\xa8\x7f\xf2\x7d\x5b\x26\x11\x52\x6d\x54\x1b\x25\xb6\x67\xa6\x55\xb4\xed\x33\xa5\x33\xe2\x5b\xe5\x51\x51\x25\x90\x57\x8c\xd9\x73\xa7\x86\xb9\x12\x02\xa9\x97\xc1\xe3\x09\x6c\xdb\xe4\xee\xb8\xa9\x39\x70\x73\x0c\x35\xb1\xb2\xf7\xfb\x2e\x8d\xca\xf2\xff\xfe\xb9\x69\xf4\x30\x41\x9b\x18\xc4\xa9\x69\x36\x5c\x9b\x5a\xe2\xc1\xe6\xd0\xb5\xc5\x27\x4c\x9b\x5e\x00\x26\x3c\x29\xe5\x5f\x62\x29\xfa\x9a\x1d\xd1\xe0\xc1\x74\x39\x6e\xb4\xf6\x37\x5e\x92\x9b\x6f\x5f\xc0\x2b\x30\xb2\x35\x1b\x96\x23\x5e\xab\xe4\x6f\xd3\xd2\x5d\x95\xa5\xe8\x92\xa5\xd8\x59\x0e\x86\x37\xbc\x7a\xa4\x0b\xd1\xe9\x2f\x44\x73\xd2\x42\xdc\xd4\xeb\x10\xb6\x76\x8b\xa8\x3f\x66\x37\xa0\xab\x8d\xab\x10\xcf\x0e\x9b\x44\x7b\x6a\xf5\x30\x50\xb8\xc4\xfa\x4d\x3f\x0c\x26\xe4\xd5\xd8\x60\x3d\x46\xbc\x5d\x82\xaf\xb7\x83\x47\xe3\xf2\x7a\x94\x07\x51\xc2\x9d\x10\xf2\x4c\x9b\x16\xfd\x97\x6c\xbf\x8e\xb1\xb1\x03\xa6\x76\x53\x19\xe6\x0f\xa2\x5f\x79\x66\x7d\xe6\xf6\x0d\xcf\xb6\xa7\x49\x9c\x72\x58\xe4\x94\xa3\x46\xba\x97\xe8\x94\x0e\xe4\x65\x85\xe2\xfe\xca\x81\xcf\x7f\x1e\x53\x1e\x3d\xbe\xa5\x1b\xc8\x18\x67\x79\x86\x67\xf9\xbf\x58\x3e\x3e\xbf\x7d\x3b\xc0\xa3\x11\xf0\x51\xd8\x63\x15\x7a\xf3\xab\x6b\x04\xe1\x1e\xff\xf5\x82\xff\xf9\x76\xc0\x93\x1f\x9a\x75\xa9\x6d\x84\x81\xd7\x14\xfb\xe1\xb7\x03\x2e\x75\x35\xc7\x08\x2c\x52\xe5\x05\xfe\xed\x43\xf0\x06\xe1\x7b\x03\xf0\x83\xd0\x25\xf9\x57\x3e\x87\x86\xed\x77\x01\x7c\xc1\x1f\x35\xbc\x3a\xdd\x5e\x6b\x68\xa0\x66\xdb\x65\xe7\x4c\xc0\x2e\x5c\xf1\x77\x63\x87\x8a\x2a\x79\x4a\x76\x51\x85\xe8\xf4\x1b\xfb\x24\x6e\xf5\x18\x89\x9b\x1a\x7a\x43\x7a\xf6\xf4\xc4\xd8\xc8\xb0\x70\x2e\xd0\x0b\x8a\x52\x2d\x39\xe6\xa7\x6a\x0b\x91\xbf\x50\xfc\x49\xcd\xc7\xa8\x03\xb0\x8f\x77\xaf\x47\x01\xe6\xe5\x3e\x7b\x55\xc1\x5c\x88\xb5\x3a\x9e\x83\x38\x36\xb0\x95\x93\x86\x8a\x3a\xc3\xeb\xe2\xb6\xfb\x9b\x19\x11\xf8\x07\xd6\xa6\xa1\x22\x3a\x96\x79\x54\xa0\x63\x75\xf5\x5f\x92\x43\x9e\x15\x55\x74\xac\xbe\x1b\xe8\xf0\x88\x0a\xfd\x31\x2a\x93\x9d\x1e\x17\x59\x8e\xb5\x91\x4b\x9e\x95\x64\xc7\x2f\x50\x1a\x55\xc9\x0b\x12\xd7\xbb\x11\x7e\x05\x05\x04\x1d\xab\xe1\x52\xed\xfa\xf2\x98\x9d\xf5\x32\xf9\x96\x1c\x9f\xb7\x8f\x59\x11\xe3\xaa\xd9\x59\xdc\x53\xdd\xaa\xc5\x2c\x7a\x2c\xb3\xf4\x54\xa1\x5b\xc8\xec\xbc\x8d\x4e\x55\x76\xfb\x4d\x4f\x8e\x31\x3a\x6f\x2d\xd3\x34\xfb\x74\xf8\xb7\xa7\xa7\xa7\x61\xe8\xba\x9e\xa2\xa7\xea\x82\xff\xd9\x9a\x63\x55\x8b\xe4\x79\x5f\x5d\xe0\x5f\x69\x65\x2c\x3d\xd3\xe8\xad\xc5\xfa\x29\x39\xa3\x98\x41\x6d\x5b\x3c\x3f\x46\x3f\x99\x37\xf8\xff\x0c\xef\x8a\x0e\xc6\x32\xcd\x8f\xb7\x24\x4d\x35\xf9\xbb\x1d\xd8\x6d\x95\xe5\x5b\xf3\x96\xa0\x78\x9b\x67\x58\x05\x2b\x74\xbc\x81\x57\x25\xcc\xff\x08\xda\xaf\x59\x71\xd8\x67\x29\xd2\xb3\x22\x79\x4e\x8e\x97\x38\x29\xf3\x34\x7a\xdb\x26\xc7\x34\x69\x1b\xe7\xd9\x6b\x23\xf6\x1b\x18\x63\x33\xc6\x35\xaa\x8a\xe4\xf9\x19\x15\x7d\x4e\xba\xa5\x0d\x8b\x28\x4e\x4e\xe5\xd6\xcd\xcf\xe2\x99\xba\xc5\xf8\xe8\x35\x11\x8c\x8d\x77\x8b\x89\xf9\x94\x66\xaf\xfa\x79\xbb\x4f\xe2\x18\x1d\x6f\xc1\xdf\xb5\xfe\xbc\x45\x69\x9a\xe4\x65\x52\xde\x1e\x92\x23\xdb\x10\x1d\x6e\x41\xe1\x26\x98\x91\x45\x52\x2f\xa6\x5e\x01\x41\x20\x39\xee\x51\x91\x54\x43\x23\xa3\x9e\xb5\x94\xae\xdb\x0f\x1f\x6e\x6b\x52\x42\xfc\xc3\xdb\x5d\x8a\xa2\x62\xfb\x98\x55\xfb\x21\x28\x3a\x2c\xf6\x17\x74\x33\xd4\xd3\x53\xb6\x3b\x95\x84\xf6\xfb\x28\xce\x5e\x87\xe6\xb9\x81\xfb\x88\xd2\xec\x75\x00\xea\xef\x51\x91\x44\xf8\xb4\x1d\x1d\x63\x14\xff\x5c\x15\x27\xf4\x20\x59\xb1\x0d\xcc\xe4\xa8\xe7\x69\xb4\x43\x13\xc1\x5e\x1a\x5e\xa9\xaa\xec\x00\x6b\xac\x9e\x7e\xf3\x96\x2f\x83\xe5\xd4\x14\x8e\x8d\x31\x7a\xcc\x5e\xe6\x22\x53\x65\xb9\x18\x13\x5c\x20\x46\x83\xeb\x02\x08\xb1\xcf\xd2\x18\x98\x00\xb8\x36\x0c\xc3\x86\x09\x1e\xd3\x6c\xf7\x55\xc0\xb2\xaf\xfb\xa4\x42\x7a\x99\x47\x3b\x2c\xae\x5f\x8b\x28\x97\x70\xb1\xb0\xd3\xb2\x8a\xaa\x53\xa9\x27\xbb\xec\x28\x90\x84\xfc\x5a\xd6\x09\x0a\x44\xa2\x98\xb5\x38\xa9\x05\x08\xa1\xf7\xd6\xbc\x3d\x44\xc5\x73\x72\x24\xf2\x93\x52\xa0\xac\xde\x52\xb4\x2d\xb3\x34\x89\xeb\x4f\x04\xca\x26\x3f\x6b\x6e\x7e\xd6\x1a\x5a\xd1\x81\x47\x51\xa4\x31\xfb\x0b\xfb\xf7\x2d\x11\x90\x5e\x2e\x13\xec\x03\x53\xa5\x8d\x91\x00\xfa\x81\x5c\x27\x45\x56\x45\x15\xfa\xc9\x0a\xcc\x18\xe1\x6d\x55\xd0\x10\x16\xa4\xfe\x58\x89\x28\xb7\x3b\x15\x65\x56\x6c\xa9\x38\xa5\x38\xdb\x0c\xd2\xc2\xb5\x7b\x38\xa5\x55\x92\xa7\x48\x07\x55\xe6\xf2\x94\x1d\x2b\xfd\x29\x3a\x24\xe9\x5b\x2d\x40\x6e\xe1\x5b\x99\x7c\x43\xcd\x17\x42\x39\x22\x6c\x84\x13\xc6\xca\xbd\xba\x51\x2d\xae\xa2\x3c\x47\x51\x81\xcf\xcc\x04\x40\x76\xaa\x70\x75\xbc\x13\x44\x71\x8c\xc5\xb2\x79\xfb\x94\x66\x51\xb5\xc5\xac\xdd\x17\xac\xec\xc4\x00\xdb\xe1\x6d\xe5\x58\x6d\xed\x49\x23\xdd\xc6\x49\x89\x65\x5c\x7c\xe9\x4b\x6e\x84\xc4\x9b\x88\x04\xd2\x96\x5d\x46\x59\x1e\xed\x92\xea\x6d\x6b\xdd\xb6\x0b\x6a\x12\xb0\x9a\x4c\xf0\x53\x5f\x17\xf4\x21\xfb\xb6\x36\xc4\x52\x19\x51\xb2\x49\xf4\x5e\x9f\xfd\x9e\xc4\xd7\x3f\x7f\xd8\x7e\x78\xb8\xe9\x15\xe1\x73\x91\x70\x53\x69\xd0\x28\xd0\x21\x7b\x41\x78\x41\x10\x73\xe5\x1e\x37\xbf\x6a\x10\x30\x3c\xe1\x68\x9a\xe6\x59\x0e\xe1\x7c\x2f\x2d\xe3\x51\x49\x22\x16\x97\x9d\x76\x54\x0a\x6f\xad\xfc\xac\x81\xa0\xd1\x9e\x8b\xe8\x4d\xa0\x1b\x50\x2a\x38\x8e\x23\x50\x13\x90\x8b\xff\xaf\xe5\x7d\x2c\x9c\xc6\x17\x95\x65\xb8\x1e\xbb\x4a\x28\xde\x36\x16\x6c\x1a\xfe\xd7\x91\xac\x06\x01\xe9\x2e\xbc\xe4\x10\x0b\x6d\x78\x55\xd1\x10\xca\x95\x40\xa7\x8f\x2f\x88\x2c\xe9\x91\x07\xcb\xd8\x0e\x79\x4c\x56\x5b\xec\x0b\x1a\x91\x1c\x69\x29\x25\x93\x6d\x2c\x16\x8d\xe2\x21\xc6\x45\xa8\x8e\x08\x35\xc7\x7a\xcf\x05\xad\x55\x32\x26\x32\x35\x7c\x59\x4f\x05\x14\xe8\x8e\x3c\x1a\xcd\x8e\x5b\xef\xb7\xe3\xfa\x5c\x8d\xe4\x88\xba\x0f\xba\x06\xa3\x3c\x48\xc6\x41\xf7\x55\x72\x12\x5b\xa8\xf6\xcc\x41\x13\xd4\x3e\xe1\xc2\x57\x04\x50\xeb\x78\xec\x50\xfb\xa3\x91\x8c\x7e\xa9\x52\x35\x15\xc7\x76\x01\x08\xc1\xd5\x32\x0a\x2e\x69\x88\x56\x43\x8f\xcc\x44\x52\x31\xbb\xa6\xf2\x09\x61\x4c\x19\x14\xd2\x9e\xfc\x07\xc5\x7a\x52\xa1\xc3\x4d\xf4\x7b\x81\xd2\xeb\x9f\x6b\xe3\xdb\x43\xfd\x4a\x8f\xa0\x45\x56\x49\x20\x59\x9f\x74\x48\x24\xe5\x17\x1e\xd7\x63\x76\x7e\xb8\x34\x7a\xe6\x1b\x51\xe4\x6a\xe4\x9b\xef\xe5\xae\xc8\xd2\x14\x0f\xb5\xca\x4e\xbb\xfd\xed\x21\x3a\x37\x0b\xcb\x36\x6c\x0f\x1d\x06\x7a\xeb\x08\x39\x46\x8a\xc8\xb0\x04\xe7\x0f\xa2\xd2\xd5\xba\x02\xd5\xbe\x19\x55\x99\x42\x3d\x66\x95\x1e\xa5\x69\xf6\x8a\xe2\x69\xb0\x84\xea\x21\xc1\x58\x38\x09\xa4\x68\x0c\x2b\xc1\x91\x5a\x15\x53\xb6\x83\x7a\xc6\xeb\x43\x47\x6f\xef\x8a\xe3\x71\x20\xbb\x53\x81\x55\x35\x29\x0c\x2f\x08\x37\x4f\x8f\xb7\x7d\xf3\x46\x9f\x80\xfa\x31\x3a\xa0\x7a\x22\x63\xf4\x14\x9d\x52\xaa\x9d\xbe\x12\x36\xd8\x98\xe2\x25\xc9\xe9\xe7\x1d\xb2\x4d\x56\xff\x5a\x6d\x41\xb3\x7c\xd8\x6f\xc5\x9d\x12\xe7\xa1\x19\x25\x64\x98\xb4\x17\xb2\x92\x6c\xd9\x86\x3b\xa7\x13\xba\x20\xb8\x0e\x5c\x73\x72\x07\x22\x30\x73\xf1\x14\x0c\x59\xb6\x2c\xeb\xb9\x8c\x93\xe2\xe7\xa2\x4a\x1f\x98\xe9\x20\x36\x75\xc5\x76\x42\x64\xc6\x64\xa0\x12\x10\x4e\x50\xd6\x02\x91\xe8\x06\xaa\x83\x12\xc2\xed\xa8\x9f\xf3\x11\x94\x9d\xfd\x40\x9d\x04\x44\xe7\x23\xc9\x1e\x6d\x61\x1e\xbd\xfc\x4c\xcf\xa2\xc9\x31\xa9\x92\x28\x9d\x0f\xbb\x3d\xfd\x12\x66\x53\x03\x5d\x6f\xbd\xc3\xb0\x57\x5a\xad\xf4\xd4\x2d\x5b\x06\xef\x87\x4b\x67\x35\x12\x3c\xa4\xab\x7a\x29\x1e\xc2\xde\xde\x77\xd4\x22\x3a\xe3\xe5\xf4\x6f\x69\x86\xd7\x17\x89\xe8\xf0\x29\x4e\x5e\xb4\xa7\x2c\xab\x50\x51\x5f\xf1\x81\xfe\x7f\x33\x56\x0b\x0e\x8e\x02\x9f\x00\xe6\x4d\x77\xfb\x1e\xbd\xbc\xe3\x60\x4f\x6d\x45\xfb\x82\x1c\x4a\xb0\x5e\x10\x75\x0f\xaa\xe1\x09\x4a\xa4\x6d\xc8\xdb\x3c\x1e\x9f\x91\x5a\x14\xd6\x21\x8b\xa3\x54\x8f\x93\x28\xcd\x9e\x35\xa2\x8b\xc5\xd9\xee\x74\x40\xc7\xea\x41\x8b\x63\x2d\xaa\xc1\x8d\x57\x54\x81\x98\x2b\x02\xcc\x5b\x78\x6c\x9a\x66\x7a\xef\x55\xa0\x12\x55\x35\x1c\x69\x39\x6d\xdf\x86\x02\xa0\x62\x49\x33\xe8\xa9\x37\x4a\x53\x9e\x3f\xd4\xea\x12\xb8\x40\x4c\x72\xa1\x46\xc6\x40\x61\xf4\xbf\x93\xfa\x87\x28\x39\xb2\x04\x6d\x7f\x33\xe5\x39\x5f\xdc\x50\xe1\x02\x26\xae\x18\xed\xb2\x22\x02\x7b\xdf\xe9\x18\xa3\x02\xee\x39\x46\x78\x7a\x2a\x5f\x8a\xf8\xe6\x5a\xc8\x8c\xad\xb9\x7f\x6d\x0e\x1e\xe5\x5d\x79\xd7\xef\xb8\x10\xc6\x39\x56\xce\x8b\x6a\x9c\xd5\xe7\x1d\x01\x37\xd1\xb1\xcf\x66\x3f\x86\xf1\x28\x28\x55\xce\x6c\x79\x92\x6d\x28\x65\x59\xa2\x47\x17\xcf\x8f\x3f\x91\x6b\x5b\x12\xe2\x85\xdc\x08\x5f\x41\x92\xaf\x01\x6a\xc2\x30\x34\x7a\xbc\xdc\xa3\x34\x7f\xb8\x89\x93\x17\x92\x8a\x6b\x97\x1d\x9f\x92\xe2\x00\x0b\x41\xcb\x49\xb7\xfd\xfa\xbd\xfe\xab\xec\x88\xf4\xe7\x22\x7a\xd3\x5d\xd3\xbc\xba\xfa\x97\x2d\x1c\x9e\xd3\xff\x9c\x6c\xd7\xe1\x96\x5c\x8b\xba\x27\x67\x85\xbb\xf9\xd1\x4d\xb9\x5e\xc6\x13\x77\xce\x01\xc1\xa3\x28\x18\xea\x6a\xe3\x7b\x9a\x52\x4d\x66\x49\xc8\x77\xa3\xba\x82\xd2\x16\x23\x5d\xe4\xbd\x25\xdb\x5d\x8a\xe4\xf7\xa5\xb9\x4e\x19\x59\x67\xec\x8a\xa9\xb3\xde\x01\x2c\x41\x41\x6b\x50\x77\x47\xa0\xee\xed\x9a\x73\xf0\x5f\x03\x2b\x31\x84\x95\x38\x0e\x4c\x86\xa5\xb8\xec\xd2\x9a\x90\x0d\xdf\x43\x07\x6a\x25\x03\x03\xa0\x61\xb7\xbf\xe1\xfc\x80\x3f\x7c\x37\xaa\xe8\x51\x2f\xa9\xe3\x73\xbe\xcd\x8e\xe9\x1b\x71\x77\xd6\x04\xd0\xeb\x8b\x72\x62\x43\x83\x10\x9c\x4f\x59\x71\xa0\x26\x3c\xc7\x36\xf3\x73\x6d\x97\xd3\xf1\x0f\x0d\x1f\x51\x34\x93\xa9\xaa\xa1\xc3\x00\x51\x3c\x4c\x14\x6a\x06\xa7\x96\xbe\xe2\x10\xa5\xe2\xeb\x00\x66\x68\x16\x1e\x48\xdb\x07\xcb\x8a\x37\xcc\x77\xc0\xb5\xd6\xa0\x05\xed\xa0\x9c\x82\xad\xef\x56\x59\x37\x1b\xa6\x87\xa1\x6b\x50\xb6\x4b\xca\xd5\xc7\xac\xfa\x89\xac\x86\x2b\xce\xde\xc9\x40\xcc\x8b\xec\xb9\x40\x65\x79\xa9\x0d\x9b\x5a\x74\xaa\xb2\x51\x49\xd2\x9b\x77\xcb\x36\x3f\xde\xf6\x3d\x36\xf0\x70\x75\x2b\x3f\x13\xaf\x13\xdd\x19\x38\x39\xb0\x56\xe3\xd6\xbc\x6a\xe1\xf9\x74\x6d\x3c\xa9\xa6\xc8\xdf\x43\x45\x0a\xde\x31\xff\x6b\x26\xa2\xa6\x34\xa5\x46\x5e\x64\x4f\x49\xda\x9c\x74\xb6\x46\x88\x0e\x5a\x3b\x51\xb4\x58\x8b\x89\xab\xf2\x85\x35\x7f\x51\x14\xde\xf2\x8c\x7e\xd1\x09\xff\x5c\xf5\xda\x8e\x34\x7b\xcc\xd2\xb8\xd7\x28\xbe\xe9\x41\x91\x73\x72\x40\x96\xb7\x10\x65\x79\x2b\x1f\x5a\x91\xf5\x4d\x1e\xee\x1f\xa3\x17\xf6\x0d\x82\x96\xa5\x5a\x9a\x0c\x0a\x16\xb2\x86\xba\x5a\x33\xac\x58\x05\xc0\x12\x0d\x06\xc0\x3f\xa6\x27\x24\x01\xdf\x2a\xe5\x2a\x7d\xd4\xde\x70\x33\x90\xbc\x4b\x13\xe6\x26\x00\x4f\x1a\x12\x5e\xc3\x3f\xa5\xe8\x3c\x8e\x0b\xf7\x25\x12\xf9\x13\x8e\xd1\x99\xb3\x6e\xc9\x6e\x2e\x15\x10\xe9\x3d\x36\xd1\x22\xee\x2a\xc1\xcf\x55\x86\x23\x80\xd2\x0c\xaa\x71\x72\xfa\xc7\x87\xdb\x49\xa3\x0a\x66\x8c\x4a\xe0\x9e\x01\xf2\x16\x7c\x14\xa2\x3c\xd7\x5f\x12\xf4\x7a\x47\x44\x4e\x23\x25\x49\x1a\x59\xf2\xf7\x03\xdd\xfb\x51\x8a\x2a\x91\x9e\x44\x94\x69\xfd\x35\x2a\x8e\x3a\xec\xa1\xb5\xca\x11\x47\xc7\x67\x54\x64\xc4\x2c\x91\xbf\xe9\xe4\x73\xa3\xd9\xc6\x49\xb9\x4b\xb3\xf2\x54\x20\x92\x5d\x97\x77\x59\x79\xf8\xe3\x1a\x2b\x4d\x64\x1f\xae\x0a\x84\x92\x0a\x1d\x1e\x14\x5b\xa5\x09\x6d\x88\xab\xcc\x6a\x48\xac\x4a\x0f\x9c\x12\xa7\x61\x71\x59\x63\xbf\x8f\xca\x7d\xb2\xcb\x8a\x5c\x27\x04\xc1\x64\xd7\xd2\xc4\x38\x82\x2f\x52\xa9\x75\xfb\x1b\x6d\xd8\x3c\xa5\x18\x68\xdb\x71\x69\x6d\x15\x7c\x5c\x4b\xcf\xa3\x23\x4a\x85\x44\xe3\x8b\x45\xd4\x91\xd4\x68\xc8\xc0\x29\x47\x3c\x43\xf4\xf2\x24\x8b\x93\x10\xc3\xa6\x23\x44\x6e\x5a\x7b\x21\xf6\x33\x41\x34\xc3\xeb\x2b\xcc\xac\x9e\x70\xa3\x90\x63\x59\x3a\xbc\x65\x23\x5b\x32\x28\x61\xe8\xac\xeb\x9b\xf6\x15\x13\x89\x28\x53\x36\x2b\x72\x24\xea\xd6\xf5\x8d\xe0\xe8\xcb\xf1\x42\x44\x7e\xed\x0a\x14\x55\xe8\x86\x8a\x01\xf2\x29\x3a\xee\x50\xca\x7d\x2a\x4f\x8f\x87\xa4\xba\x61\x05\x0e\x90\xfb\x81\xfb\x44\x6a\x3d\xdc\xd4\xd1\x73\xea\xb4\xd7\x02\x39\x45\xa6\x8c\x88\x9a\xea\x78\x35\x9c\x82\x7b\xda\x2c\x2e\x00\x25\x98\xd5\x35\xa0\xd5\xb3\x3c\x9c\x1d\x7c\xce\x28\xe7\xc1\x92\x0e\x73\x21\x38\x3a\xce\xee\xc9\x5f\xe6\xf7\xd9\x55\x61\xa6\xef\x70\x8d\x37\xde\xac\xad\x8e\x6b\xdd\xdd\xf3\x98\xc2\x39\x9b\xdf\xd4\xe6\xfd\x29\x99\x0d\x81\xce\x02\xd3\x5e\xbc\x2f\x32\x15\x66\x6e\x90\x0a\x10\xc6\x77\x4a\x06\x88\x78\xcb\x64\x2a\x0c\x6e\x9d\xd2\x7a\x83\xb4\x1d\xde\x4c\xd9\x8a\xb2\x5d\x95\xab\xb3\x64\x7b\x9d\x0f\x68\x78\x84\xcb\x36\x5c\x06\x92\x60\xe7\xad\x0b\x57\xda\x82\x99\xce\x56\x1a\xfd\x2a\x03\x17\x07\xb6\x6c\xcb\x25\xbb\x34\x53\x63\x78\x33\x6e\x2b\x72\xbb\x72\xfb\xb9\xbf\x3d\x8b\xcb\xc8\x0e\xdc\x2d\x63\x37\x6c\x71\x19\xdd\xb9\xdb\x42\x95\x2d\x9c\x9f\xfb\xf7\xd8\xcb\x5b\x7c\x56\xdd\xd4\xd7\x05\xdb\x63\x97\x15\xb7\xf9\x75\x80\x8e\x53\x60\x9d\x8d\xbf\x75\x8e\xef\x38\x5b\xf5\x1c\x66\x6b\x80\xf4\xf6\x1e\xa0\x2a\x48\xaa\x3f\x68\x45\x85\x3a\xfb\xea\x90\xfe\x1e\x47\x55\xa4\x17\xd9\xa9\x42\xff\xfd\xe7\x0f\xf1\xce\x88\x76\x69\x69\xc0\x73\xb2\x0f\x0f\x9a\x41\xb2\x05\x40\xc8\x77\x32\x8c\x22\x8a\x93\x0c\x30\xa2\xf7\x49\xd3\xf8\xe3\x0f\xb6\x8d\x2a\x45\x49\xa3\x9e\x2f\xf5\x8f\x3a\xec\xcb\x8e\xcc\x03\x67\xc8\xb1\xf3\xd7\x5f\xe9\xdc\x71\xe1\xde\xf8\x58\xe0\x54\xcd\xba\x59\x13\x3b\x0f\x28\xaa\xf4\x93\x6e\x99\xe6\x15\xcb\xd0\x6c\x15\x94\xa2\x17\x18\xb2\xee\x98\xe6\xd5\xf7\x71\xa9\x2d\x96\xcc\x0b\x84\xef\xa8\x95\xf4\x2f\x62\xca\xf9\x4f\x67\xb2\xf9\xeb\xdb\x65\xfe\x8a\x76\x97\xbf\xcd\x0e\xff\x91\xcc\x0e\xc3\xb7\xc6\xfd\xbb\x37\x51\x55\x73\xbe\x94\xac\xdd\x87\x66\xb5\xa5\x4e\x45\x73\x8d\x05\x53\xba\x16\x34\x9f\xd5\x7b\xad\xf5\xcd\xea\xbb\x6e\x4c\x7b\x9e\x6b\x81\xa0\x7d\xcf\x6d\x3e\xd2\xbb\x82\xf5\x62\x04\x01\x05\x08\x14\x07\x89\xf1\x83\xc2\x97\x94\xd6\xae\x68\x83\x76\x91\xda\x7d\x72\xb0\x92\x10\x92\x9c\xd1\x46\xeb\x0d\xc3\xeb\xb0\xce\x48\xad\xc6\xe1\x6e\x91\x75\xa5\xf1\x22\x5d\x04\x65\x1e\x2e\x03\x84\x5c\x0c\x68\x21\x46\xdd\xa9\x58\x08\x86\x62\xb3\x78\x9a\x16\xcf\xd0\x1a\x93\xb3\xc6\xbc\x2c\x9f\x92\xc5\xb3\xb1\xa2\x41\x86\xa0\xb4\x22\xc0\xc5\x18\x4a\x67\x6f\x5d\x98\xeb\xe1\xc9\xcf\xee\x9a\x10\x59\x1c\xd7\x31\x3f\xb1\x38\xae\x03\x71\x39\x8e\x23\x13\xbe\x1a\xd0\x15\x31\x15\x4d\xf9\x4a\x20\x89\xe3\x91\x9a\x6a\xeb\x81\x6a\xab\x9a\xaf\xa9\xef\x0c\x47\xad\x24\x7e\x7e\x6e\x22\x34\xc1\xb3\xb9\x51\x88\xc4\xd9\x0e\x1c\xe3\x38\xc7\xc0\x7f\xa1\x47\xcb\x3b\x18\xbe\xfe\x93\xdf\xe1\x8b\x22\xa7\x4d\x9e\xe1\xd6\xa1\x13\xec\xb4\x15\x2a\x0e\xc9\x31\x9a\x39\xf3\x43\xc0\xba\x1c\x21\xaf\x2b\xe6\x14\x79\x7d\x29\x07\xc9\x9b\x0c\x73\x96\xbc\x9d\x98\x6d\xe4\xf5\x25\x9c\x28\x6f\x30\xcc\x7f\xd2\x76\x1c\x5f\x4a\x6b\xf5\xf9\x55\xa9\x2a\xe1\xd0\x91\xaa\x2c\x7f\x2b\x55\xa5\x7c\x2f\xad\x3b\x7d\x3d\xc8\x40\x49\x9c\xfc\x3c\xf3\x23\x71\x32\xc6\x7f\xb0\x3e\x8c\xba\x65\x37\xfe\xe1\x3a\xf1\x47\x9e\xe7\x0f\xd8\xd8\x8c\x5b\xcc\x3e\x5d\x2f\xf3\x9c\xe8\x42\x92\x7a\x51\xf0\x15\x47\x1c\x12\xf8\xca\xe3\x17\xef\x7c\x7d\xc5\x5b\x6a\xbe\xd1\xf0\x0d\x2f\x5f\x77\xec\xb6\x97\xaf\xad\x78\xf3\xcb\x35\x12\xdf\x02\x73\x55\x06\xee\x16\xa4\xf5\x3a\xb7\xc3\x82\x7a\xc2\xfb\x08\x69\xbd\xee\xad\x31\x57\x71\xc1\x25\x06\x0b\xe7\xf2\x92\x94\xc9\x63\x92\x26\xd5\x1b\x8d\x6b\x33\x87\xf3\x81\xe1\xe6\xb1\x7a\xd3\xb4\xc7\xdb\xb4\x44\xc2\xcc\xb4\x54\xce\xbd\xb4\x82\x80\x5d\xa1\x44\x41\xb7\xa8\x41\xc8\x18\x92\x16\x8f\x70\x20\xa9\xc5\xb3\x1c\xf9\x26\xe0\xb1\x7e\x01\x65\x2a\xb6\x80\xe3\xa2\x7e\x41\xcd\x36\xa4\x44\x85\x4f\x18\x82\x30\xea\x06\xf7\xa6\x9b\x51\x2c\x6f\xb9\x80\x10\x56\x90\x9f\x99\x32\xce\x47\xdb\x9b\x27\x47\x09\x3a\xf2\x88\xf0\xaa\x5c\xc5\x82\x10\x73\x57\x5b\x63\x88\xcb\xda\x5a\x23\xdc\xd6\x56\x54\xe1\x3a\x69\x30\x6c\x96\xfb\x98\xe8\xf3\x43\x5c\xd8\x56\x53\xe1\xc6\xa6\xb6\x80\x2b\x9b\x32\x19\x77\x0a\x2b\xb0\x5c\xda\xa9\xd0\xe7\x56\x61\x05\x8e\x6b\x9b\x1a\x73\xb9\xb7\x39\x65\xd5\x71\xc1\xe6\xf0\x21\xbc\x5b\x00\xe8\x57\xf3\xb8\xb0\x03\xa0\xc7\x83\x5c\xb9\x84\x03\xb9\x3a\x72\xfe\xe3\xaa\x49\xf4\x5d\x5a\xae\x22\xf9\x38\x70\x32\xce\xe3\x2a\x8d\xf0\x1d\x5b\x97\xe7\x3a\xb6\x44\xc0\x73\xb2\x62\xca\x71\xfd\x62\x8e\xdf\x64\xc5\x35\xb7\xb1\xe5\xaa\x2a\x28\x47\xc6\x56\x5e\x0a\x9e\xfa\x10\x3f\xdc\x28\x4d\x9e\x8f\x5b\x92\x80\xea\xf6\x7f\x9e\xca\x2a\x79\x7a\xab\x03\x8e\xd5\x9f\xa1\x0e\x44\xa6\x29\xeb\x4f\xf5\x4b\xb3\x5d\x94\xee\x7e\x32\x3c\x74\xd0\x74\xcd\xca\xcf\x57\x1a\x7c\xb0\x0d\xbb\xf9\x02\x51\x89\x9b\xf7\x7b\x0b\x78\x3d\x8d\x9a\x27\x3a\x0b\x18\xbe\x03\x45\xcc\xf5\x5c\xa5\x21\xd6\xe7\x2a\x8e\xf0\x3f\x57\x57\xb6\x08\x98\x4a\xca\x2b\x81\x03\x3c\xb8\x1c\xb8\x9a\x2a\x6b\x82\x6d\x20\x58\x18\x6c\xb1\x6c\x75\xc8\xea\xb0\x4b\xa4\x5f\xa7\xbf\x4e\x64\x75\xb8\xc5\xc2\x56\x52\x5e\x31\x3d\x9a\xb7\xcb\xa6\x1f\x88\xa9\x61\xde\x2e\xf8\xe8\x46\x5e\x46\xba\xe3\x9e\xd1\x92\x85\xe3\x36\xcb\x44\xa0\xc1\xd0\x47\x9e\xf2\x9a\x7f\xfb\xf3\xfc\xed\xcf\xf3\xb7\x3f\xcf\xdf\xfe\x3c\xff\x11\xfd\x79\xba\x4f\xd9\x05\xda\x8a\x30\xc2\x81\x24\x53\xc3\x98\xb5\xfd\x42\xef\x34\x1c\x8f\x3d\x30\x7e\xef\x85\x97\xc6\xfb\x71\x96\xe2\xf6\xbb\xa8\x88\xfb\xe1\xa7\x0d\x70\x38\x96\x15\x96\x79\x9a\x54\x15\x6d\x5c\xc7\x17\x66\x7d\x48\x29\xca\xd4\xcd\x54\xc9\x19\x55\xd5\xaf\x49\xfb\x47\x68\x7e\xbc\xea\xc4\xe9\x17\x58\xed\x87\x47\x7c\x47\xc3\x5e\x88\x46\xce\xd5\x83\x39\x1d\xa4\xcf\x10\xa8\xb6\x92\x0c\x0e\x47\xca\x01\x50\x7c\x3d\x80\xc6\xc6\x6a\x90\x10\x7f\xce\xc4\xbf\x13\x99\x7e\x14\x0d\xdf\x87\xc6\x72\x9e\xb4\x5b\x5f\x3b\x39\x7d\x58\xf7\xb2\x81\x5a\x8c\x07\x9b\x84\x06\x72\x40\x6d\x15\x19\x14\x6e\x78\x52\x40\x7c\x2d\x7a\x33\x3b\xe6\x29\xee\x2a\xf0\x1a\xd5\x26\x87\xa7\x58\x5a\x87\x9f\x1b\x52\xed\xc2\xc6\x27\xf9\x4f\xb1\xe2\xeb\x01\x7b\xf9\x59\x53\x19\xb4\x76\x4a\x07\x91\x14\x97\x73\x3d\x6b\xa7\x54\x1c\x75\xa3\x1f\x84\x5b\xfc\x24\x86\x3f\x7c\x60\xac\x05\x8f\x69\x7b\x4d\x21\x5a\xca\x50\xec\x1f\x62\x73\x82\xa8\x43\xcd\xc1\xdc\x03\x92\xdc\x67\x31\xfa\x92\x14\x45\x56\x5c\x0e\xd1\xb9\x3e\xb3\xdb\x7e\x5d\xb7\xde\x22\xf1\x29\xbe\xf6\x01\x80\xa8\xdb\x9d\x03\x8b\xdd\x81\x46\x83\x70\xb7\xc1\xba\xeb\xa4\x30\xec\x46\xcb\x54\x4f\x93\x63\xa5\x57\x59\x96\x56\x49\x2e\x08\xb5\xfc\x14\x3e\x85\x4f\x75\xe4\x75\x26\x1e\x3b\x59\x61\xe5\xdb\xb1\x8a\xce\x7a\x0a\x31\x69\xb0\xa0\xe9\x6e\xa4\x66\x1d\x36\xda\xb6\xf0\xff\x31\x09\x04\x2c\x27\x3f\x37\x93\xb2\xc9\xcf\x5a\x90\x9f\xb5\x10\x8f\x65\x77\xd0\x4b\x1d\x0e\x23\x2c\x91\x98\x2c\x04\x4a\xbb\x70\x18\x86\x57\xec\x39\x8f\xe2\xb1\x7b\x8a\xed\xd8\x62\xbe\xb3\x99\x52\xea\x80\xe6\x04\xcb\x43\x96\x55\x7b\x8c\x1d\x90\xbd\x93\xdb\x81\x45\x53\x63\xe9\xf9\x7c\xc2\x4c\x59\x5e\xd8\x98\x43\x94\x4c\x71\x54\x7c\xd5\x9f\x0b\xf4\x26\x50\x24\xb8\x8a\x04\x46\x5d\xb5\x45\x50\xda\x29\x79\xd3\xc4\x25\x40\x20\xd3\x84\x07\xa0\xfd\xdb\x53\xf0\x14\x3c\x99\xd2\xd6\x78\x68\xc7\xd3\xe1\xb1\xcd\x31\xe4\xc7\x41\x14\x04\x92\xa9\xd0\x41\x28\x23\xc8\xf0\xca\x31\x1e\x8d\xaa\xcc\x70\x11\x9e\x77\xd7\x0e\x9c\xc1\xae\xb7\x5b\xd2\x12\x04\xcc\x40\xbd\x3b\x92\x15\x6f\x42\xe5\x6e\x8b\xe9\x98\x41\x42\x96\x49\xe8\x4d\x6d\x21\x6c\x76\xe1\x73\xb7\x49\x54\x4c\xcb\xfc\x78\xc5\xe1\x8f\x41\xe1\xdf\xbb\xec\x70\x40\xc7\x4a\xc4\x83\xf5\x52\x45\x6f\xe2\xa6\x65\x55\x24\xc7\xe7\x1b\x79\x91\x6e\x8b\xc0\xe6\xd1\xee\x2b\x2a\xc4\x20\x39\xd6\xe2\x5a\x95\xa8\x78\x12\xb7\x79\x89\x8a\x04\x1f\x70\x84\x88\xd4\x85\x0d\x2a\xff\x16\xa2\xc0\xdd\x79\x42\x48\x31\x7a\x9a\x8a\x70\x96\xa3\x22\xaa\x32\x21\xca\x20\xe4\x84\xad\xbe\xa2\xb7\xd7\xac\x88\x45\x8d\xde\x50\x9a\x66\xaf\xe2\x66\x51\x95\x1d\xa6\xd1\xe6\x80\xaa\x48\x48\x97\x2a\x7a\x9e\x3a\x54\x04\xb2\x55\xd0\xa8\x40\xb1\x0c\xdf\xaa\x48\x1e\x4f\x95\x78\x6a\xfe\xd7\x29\x4a\x93\xa7\x84\xc9\x56\xf6\xb4\x8b\x3c\x5f\x08\x29\x2f\x30\xa1\xab\x37\x85\x49\x7c\x3c\x25\x69\x95\x1c\x87\xb9\xc1\x19\xe8\x93\x5d\x7a\x24\x0c\x23\xd9\xab\x9b\x65\xc6\x89\x06\xcb\xb4\x6c\x4b\x2e\x1a\x0e\x51\xb5\xc3\x1b\xc3\x63\x81\x29\x5b\xc9\x03\x00\x0f\x84\xb1\x82\xc7\x2f\xec\x96\x5c\xa0\x28\x26\xb1\x0d\xb3\x18\x1d\xa0\x23\x81\x88\x2f\x1b\x6d\x83\xec\x07\xc2\x56\x1d\x22\x8d\x8a\x01\x15\x20\xac\x6c\x98\x56\x5f\x2c\x30\x9e\xa2\x18\xc5\xf5\x6a\x52\x05\xc8\x6f\x52\x91\x13\xed\x1e\x77\xea\xad\x3b\xfc\x36\xf0\x24\x49\x15\x62\x4f\x10\x49\x68\x0c\x81\xe9\x20\x1f\x72\x8c\x74\x14\x27\x55\x06\x59\xd3\xb3\xf4\x31\x2a\xda\x44\xea\xa3\x42\xdf\xe3\x9f\x56\x6d\x31\x8b\x45\x58\x4d\x88\xe2\x04\x1d\x2b\x9a\x97\xee\x46\xda\x56\xf3\xcc\x8f\xc2\x52\x0b\x4a\xb1\x6e\x75\xd5\xd3\xf4\x3a\x39\x84\x46\x1e\xbd\xb2\x99\x78\xc6\x82\xfc\x8e\x90\xa3\xf9\xa4\x19\x55\x52\xa5\x68\xf4\xd1\x19\xa3\x5b\xba\xf9\xb9\x9b\x76\xa4\x9b\x4f\x46\xbd\x73\x5a\x56\xa2\x3c\x22\xdb\x82\x24\x99\x94\x08\x33\x47\x6d\xa4\x03\xb9\x4c\xd4\x9f\xd2\x0d\x48\x1b\x50\x86\x95\x1f\x5c\xab\x18\xca\xe4\x7d\x6d\x7a\x43\xbe\xf0\x66\xb0\x9a\xc3\xf0\xc1\x26\xeb\x24\xd2\xea\x7b\x42\xb3\x19\x4e\x19\x98\xb5\xa7\x73\xdf\xc3\xaf\xc9\x39\xd9\xcf\x72\x0b\xf9\x28\xd4\x4f\x0f\xb7\x82\xb4\xab\x24\xb0\x20\x8b\xc9\x5d\x5e\xa0\x8e\x54\x1e\x9e\xee\x1b\x55\xde\xbb\x08\xae\x82\xbb\x97\xc6\x70\x3c\xd5\x1f\x51\xf5\x8a\xd0\xb1\xc1\x12\x82\x4b\x8e\x89\x9b\x3e\xad\x19\xcf\x47\xb7\x3d\x75\xba\xee\x84\xf5\x72\xc1\x5d\x6f\x2d\xf1\xe1\x79\xfe\x92\xab\x4f\xc3\xad\x7f\x26\xcd\xc3\x47\x13\x8f\x4e\x04\xde\x6e\xa3\x70\x37\x8f\xff\xd1\xe3\xa4\x20\xca\xf7\xb6\xc8\x5e\xdb\x4e\x80\x4d\xfb\x13\x31\xb5\x43\x8d\xbd\xfe\xbe\x74\xad\x03\xaa\x12\x42\x1c\xce\xb7\x0d\xc8\x1b\x34\x14\xb1\x6c\xc6\x6e\x00\x64\xe3\x46\x2c\xe0\xac\x3e\x11\x98\x04\xfe\x79\x56\xa2\x58\xcf\xa3\x6a\xaf\xa7\x49\x59\xd5\x66\x23\x5a\x8e\xd7\x84\x5e\x22\x08\x05\x0e\xe5\x1a\x94\xf7\xa3\x7d\x36\x2d\x4e\x79\x59\x15\x28\x3a\xe8\xc9\xb1\xac\xa2\xe3\x0e\x91\x66\x18\x26\x98\x71\x76\x59\x4a\x8f\x42\x77\x12\x50\xcd\x0c\x3e\x17\x49\x7c\x8b\xff\xd1\x2b\x74\xc8\xd3\xa8\x42\xb8\xf5\xe9\x70\x2c\xb7\xd6\x53\x01\x31\x8a\x3b\xc5\x45\xf6\x5a\x6e\x3d\xf3\x23\xde\x0f\x3b\x45\x51\x81\xa2\x72\xfb\x81\x5e\x29\xd3\xcb\x94\x0f\xda\x07\x72\xc5\xd2\x7c\x18\xa3\xcc\x9d\x51\x9b\x08\xa7\x52\xa8\xd7\x52\x4a\xa9\xb6\xa6\x22\xc5\xea\x06\x17\x18\x32\x1e\xe9\x96\x7c\xa0\xdc\x50\xa2\xf4\x69\x5b\x56\x51\x51\x8d\x0f\x8f\xd0\x63\xce\xf0\x3a\x2d\x07\x86\x57\xd7\x54\x1e\x1e\x69\xc0\x0c\x8f\x7c\x60\x87\x87\x8e\xb1\xea\xe0\xb4\xeb\xf9\xc3\x63\xda\x8e\x0e\x10\xd7\x9d\x38\x44\xed\x1a\xc4\xac\x8e\xc5\x2a\x95\xae\xec\x51\x62\x6c\x7c\x94\x8b\xe7\x0c\xaf\xdb\x74\x60\x74\x4d\x55\xe5\xc1\xd1\x16\xcc\x04\xd2\x2f\xc2\xd8\xc9\x35\x0a\xc4\xaf\x81\x19\xa0\x20\xc8\x70\x5c\x35\x18\xe7\x59\x9a\xec\xde\xea\xea\xe2\x98\xc4\x31\xf1\xa6\x31\xe2\xa8\x8a\x88\x74\xe4\x40\x14\x59\xaa\xde\x5f\x89\x8a\x97\x64\x87\x3a\x04\x32\xf0\x64\xa9\x57\xeb\x79\xc0\x56\xd9\x57\x74\x1c\xc3\xa1\xa7\x95\xa8\x88\xac\xed\x11\x7f\x6e\x9c\x74\x7e\xb2\xaf\xe6\x0b\xb1\x01\x58\xa3\x62\x4d\xd4\x76\xa2\xa0\xeb\x83\x20\xac\x45\xb6\x07\x1d\x44\x5d\x2d\x02\xd9\x02\x74\x8c\x6b\xce\x53\x15\x16\x8c\x5b\xd3\x7c\xa9\x21\x02\x32\x2a\x3e\xb8\x46\x13\xe5\x08\xd3\x56\x40\x19\x2a\x3d\xc7\x28\xa3\xb6\xfe\x3e\xc5\xf1\x0a\x4b\x90\x85\xa2\xb2\x0a\xd9\xfa\x4a\x4b\xe6\x53\x1c\x73\xca\x99\x29\x90\xab\x0c\xfa\x5a\x9c\x32\x18\x8a\xd6\x73\x3d\x5b\x71\xc2\x85\x1f\xbf\x8b\x53\x2e\x3a\x7a\xdb\x2d\x4d\xfa\x2b\x70\xdc\x24\x04\x69\x43\xa9\x5d\xc9\x62\xa9\xdd\xa1\xc3\x8d\xea\x26\xc7\xaa\xa5\x0b\xf6\x3b\x21\x98\xf1\xad\x8f\x6f\x36\x75\x17\xe4\x5b\x0f\x26\x2a\x21\x2e\x29\x79\x54\x96\xaf\x59\x11\x03\x81\x14\xea\x93\xa3\xb8\x6a\xed\x0a\x9d\x15\xea\x0e\xcd\xd9\x60\x43\xc6\x77\xf7\x13\xae\xcc\x3a\xb5\xb6\x20\x08\x26\x90\xcf\x02\xff\x86\x08\xf8\xfd\xc1\x33\x9f\xdb\x31\x32\x1f\xeb\xa1\xc0\x27\xbe\x63\x96\x4f\xed\xbc\xdd\x86\x25\x1b\x58\x47\xdd\xe3\x96\x45\xad\xb0\x31\x57\x95\xf0\x04\x29\x45\x82\x55\xd7\x3a\x1f\xb7\x69\x87\x6a\x86\x16\x27\xcc\x1e\xf0\x83\x50\xd8\x74\x45\xe7\x35\xfa\xfe\x65\x6c\x53\x58\xb8\xa8\x26\x2e\xa6\x79\x8b\x88\x1f\xdf\x90\x7e\x35\xa2\x2f\x2c\x96\x20\x43\x60\x46\xb5\x84\xb9\x12\x44\xd0\x9a\x93\xfb\x6e\x3e\x4a\x00\x4d\xf8\xd8\x7d\xd1\x64\x77\xa1\xa8\xcd\xb9\xb6\x64\xea\x3b\xde\xd2\xdc\xe3\xae\xda\xac\x30\xe5\x6c\x21\x20\xec\x6c\xda\x28\x41\x9b\xc6\x22\x53\x69\x35\x04\x64\x9e\x7a\x0d\xbe\x4a\xeb\xd2\x47\x01\xe6\xb8\xba\x3d\x00\x63\xaa\xda\x2d\x05\x75\xe9\x59\x51\xa7\x2e\xb0\x4e\x1a\xd8\x45\xcb\xac\x03\x6b\xd2\x62\xab\xdb\x2e\x58\x72\xb2\x78\x22\x4c\x82\xaa\x29\x0b\x8f\xec\xa5\x77\x6d\x3d\x92\xf6\x5f\x2f\xb3\x53\xb1\x43\x2c\x36\xaa\xba\x61\x03\xeb\x6b\x72\x8c\x85\x00\x26\xeb\x89\x93\xd0\x9b\x0f\x5d\x8a\xf0\xa8\x46\x3a\x09\x41\x75\x68\x7d\x84\x26\xea\xba\x6a\x78\xcd\x05\xda\x45\x8f\xdb\x0a\x75\x6f\x7c\x2f\x6c\x55\x72\x7a\x38\x3a\x44\xc7\xe8\x19\x61\xc5\xb5\x67\xba\x50\x04\x31\xbd\x1d\xd6\x97\x7b\xad\x66\x1c\x65\xc6\x87\x30\x1b\xe8\x1a\x90\x84\xc3\x54\x38\x6a\x8d\x0f\x4b\x19\xc8\x9c\x96\x3c\xda\x93\x8f\x7a\x03\xd8\xcf\x84\xb5\x00\x00\x3b\x16\xfe\x6c\xe0\xfc\xa0\xb5\x52\x6b\x25\x3d\x10\x5a\x1c\xff\xe9\xd6\xc0\x24\x64\xdf\x9b\x93\xd5\x90\xf9\x97\xf0\xa7\x0a\x6a\xa3\xfe\x00\x8f\x45\x74\x8c\x69\x04\x72\x78\x23\xa4\x09\x93\x33\x1b\xf4\x47\x72\x7c\x9e\xe0\x62\xf0\x5d\x92\xe8\xb9\xe3\x3d\x6d\xb7\xae\xbd\xf4\x8e\x93\x89\xab\x23\xc8\x5b\x2a\x84\x7a\x79\x4a\xb3\xa8\xda\x02\xc8\xb1\xcb\x4b\x3a\xd2\x2a\xbe\x1b\x1d\x6c\xdf\x61\xa0\x3e\xd5\xff\xfb\x01\xc5\x49\xa4\xfd\xd4\xba\x63\xbb\xb6\x99\x9f\xaf\x2e\x43\xe8\x31\x4e\xe6\x75\xc2\xd6\x8e\xaf\xc0\x08\xc9\x28\x39\x2c\x74\xf8\xfe\x5d\xa4\x32\x8f\x25\xba\x54\x48\x73\xca\xfa\x93\x5b\x1b\x22\xa1\x7a\xda\xe8\xf4\xd4\x92\x62\x30\xc4\x2d\x63\x4a\x94\x3c\x01\x14\xfa\xec\x43\xa6\x34\x93\xc5\x53\x87\xb4\x21\xef\x88\x69\x76\x65\x49\x58\xfe\x21\x82\x4d\x43\x8d\x20\xa0\xbc\x1a\x9b\x7e\x85\xc0\x68\x46\x68\x25\x94\x6c\x29\x14\x78\x33\x3f\x70\x82\xaf\xed\x56\x4d\x8a\x5d\x39\x94\x6e\x1e\x65\xc6\xf3\x05\x38\x5d\x1c\x50\x4b\xb7\xd9\xb4\xbd\xd4\x03\x81\x75\x40\xb0\xed\xc1\x4e\x29\x4d\x49\xd7\xbd\x33\xe2\x70\xbc\x16\x81\x1b\xcb\x37\x1d\x12\x8f\x6c\x2d\x61\x6b\x36\x6e\x83\x70\x0f\x67\x6d\x3f\x8f\xa7\xdd\x57\x54\x51\xbb\xa0\xc8\x42\x35\xb6\xc9\xc7\x12\xdb\x78\xb3\x31\xc1\x8b\x92\x52\xd5\x8a\x26\x03\x37\x7d\x8b\x97\x41\x92\x6c\x9d\xbd\xea\x53\x77\xc8\x1e\x80\x2a\x7a\x16\xd0\xb5\x8a\x71\x81\xd8\x5d\xa6\x17\xd5\x52\x3e\x49\xd5\x9c\x19\xaa\x46\xa7\xa7\x52\x9b\x9b\xc1\x6a\xea\x84\xaa\x26\xcc\x4a\xb5\x68\x4a\x2a\xc1\x7c\x54\xbd\xc9\xa8\x8e\xfd\xc0\xa2\x43\x53\x20\x89\xde\x34\x65\x42\xa4\x01\xa0\x24\xd3\x23\xa9\x3f\x3c\x59\x92\x46\x0a\x34\xef\xb6\x5c\x32\x03\xbd\x20\x4f\xbd\xf9\xe8\xd4\xe8\xcd\x4e\x47\x30\xf6\x2f\x30\x63\xf4\x94\x1c\x41\x58\xea\xa0\x30\xdd\xc5\xa9\x92\x1b\x95\x6b\xe6\x67\xc6\x91\xea\x39\xca\xb7\x10\x22\x83\x49\xa7\xdf\xe8\x31\xb8\x40\xd8\xd3\x5d\x1c\x93\x10\x2a\x71\xda\x8b\x90\x43\x65\x7d\x27\xba\x84\x28\xcc\xe9\x68\xac\x05\x95\xdc\x56\xe4\x26\x35\x3a\x26\x58\x19\x3b\x3e\x13\x05\x02\xee\xd0\x46\x32\xea\x8d\xe4\xc3\x1a\x82\x3b\x29\x2c\xc1\xc4\x6c\x58\xe3\xfd\xaa\xc6\x09\x98\x9a\x52\x6b\xa0\xe7\x8e\x79\x7c\x74\x56\xb6\xf0\x17\x8a\xff\x50\x9e\x0d\x61\x8b\x49\x94\x1b\x80\xa0\x4a\x02\x11\x88\x8e\x0e\x43\x00\xc6\xd9\x41\x2f\xd0\xee\x6d\x97\x72\xc7\x90\x86\xb5\x05\xb5\x70\xbf\xd7\x97\x8e\x8f\xf4\xf7\xae\x94\xa1\x2f\x3e\xf5\x97\xa4\xa8\x4e\x51\x7a\x77\xaa\x13\xa3\x75\x60\x3d\x66\xf1\xdb\xe0\xb3\x50\x51\xab\x38\xee\xb9\x9a\x49\xea\xdd\x5d\x77\x8e\x34\xe6\x77\x36\x9a\x13\x17\xda\x09\x1f\xd3\x06\x5d\x70\x89\xe8\xe1\x00\xd4\x89\xdc\xf9\x2c\xee\xb5\xd2\xdb\x5c\x56\x71\x6d\x24\x9a\x43\xef\x0d\xad\x11\xa0\xc3\x68\xce\x79\xb5\x83\x83\x05\x5a\x3a\x3b\xd6\x6b\xfa\x76\xd5\xd9\x98\xac\xf7\x32\x96\xa7\xfc\x00\x39\x6d\x87\xd6\xe8\xb8\xbe\x8d\x53\x84\x9f\x03\xd0\xc7\xb9\x17\x1c\x74\x39\xf6\xc1\x70\x0e\x28\x40\x10\x1e\x94\xe1\x61\xc1\xce\x0e\xec\x94\xf2\x73\x38\xec\x9b\xce\x1f\x92\xbb\x90\x68\xb8\xa0\xfe\x47\xe2\xda\x20\xbf\xa7\x16\xfa\x66\x77\x58\x6d\x4b\x1e\xf3\x70\x1c\xe3\xe1\x3d\x8d\xba\x77\xf7\xa2\x9d\x88\xe8\xd3\xec\xab\xed\x3b\x13\xdb\xf0\xd1\x41\xf0\x66\x01\xce\x44\x98\xf2\xc4\x46\x80\x37\xe2\xdb\xde\xfb\x72\x11\x05\x84\x41\x28\x05\x84\xe8\x1e\x5c\xea\x83\x1d\xdf\x0b\x9e\x31\xe6\x55\x8c\x11\x76\xc8\xae\xa5\xc9\xef\xbb\x34\x2a\xcb\xeb\x9f\xf5\x34\x39\x7e\x7d\x68\xe2\xc7\xb3\xf6\x7f\x2f\x3f\x7f\x5f\x98\xe2\x51\x31\xf8\x8a\x7c\x55\x39\xec\xdb\xa2\xe1\xf7\x2b\x4b\x71\xd5\x92\x63\x7e\xaa\x68\x44\x34\xfc\xb9\x91\xf0\x9f\xae\x17\xa7\xba\xec\xc3\x06\x4b\xc7\xbb\x40\x86\x43\xf5\xa7\xeb\xf1\xb0\x18\xce\xa4\xc8\x36\x57\xad\x9d\xac\x89\x68\x10\x86\x7e\x7e\xbe\xba\x2c\xe5\x12\xee\xf5\xca\x2a\x59\x45\xc9\xde\xf5\x5c\x64\xaf\x5b\xeb\xfb\xfa\x9c\xd1\x51\x71\xe6\x7b\xec\xdd\x2c\x68\xab\x61\xe9\x15\x15\x28\x5a\x02\x04\x7c\xc7\x16\x34\x2f\xf3\x68\x9a\x0b\xde\xa4\xca\xcc\x10\xdf\xc1\xcb\xaf\xa9\xaf\x3c\x08\xe2\x33\x37\xa1\xea\xb4\x01\x4c\x73\x3b\xa4\xb5\x95\x91\xc7\xa8\x28\x57\x9c\x86\xb8\x9a\x07\x24\x53\x57\x01\x69\xe9\x8a\x99\xd3\x4a\x75\x38\xb3\x9d\x34\x17\xac\x8f\x51\xff\x4e\xc1\x27\x66\x3c\x62\x77\xd0\xfe\x57\x82\x09\xe3\x26\xca\xfd\x60\x00\x76\x3c\x49\xb9\xdf\x00\x64\x9d\xbc\xcf\xab\x40\x81\x17\xd9\x22\x67\x57\xd1\xb7\x76\x8c\xe3\xde\xb1\xbc\x6c\xe8\xb9\xcd\xf6\xbf\x08\x81\x0b\x7d\x6c\xd9\x75\xdb\x71\xbd\xed\xfe\x16\x02\xe5\x7c\x74\xbb\x6b\x4a\xe0\xb8\x7b\x03\xaf\xd6\xc9\xb6\xc8\x9f\x4f\x17\x4e\xc1\x9f\x8e\x11\xea\xd7\xa2\x96\x69\x7e\x5c\x47\x8f\x20\x60\xb9\xb8\x56\xee\x32\x1f\x7d\x8d\xe8\x11\x35\x7f\x3d\x2c\xd2\x00\x08\x2c\x3c\xfb\xcb\xe0\xcc\xda\x66\xfb\x23\x99\xde\x98\xa2\xfe\x6e\x2a\x01\x5d\x9b\x73\x30\xe5\x9a\xaa\xe3\x39\x67\xdf\x87\xa5\x3e\x07\x47\xa6\xa1\x3a\x86\x53\xb6\x77\x65\x26\x5e\x00\x45\x05\xf3\x71\xc6\xed\x6f\x91\x3d\x1c\x65\x55\x28\x02\x43\x9b\x2c\xbb\x53\xf6\xe0\xf6\x0b\x29\x44\xe1\xfe\x2a\xda\x98\xba\x20\xe5\x75\x08\x64\xd5\xcd\x4d\xc2\xfe\xb2\x1a\x3d\xe0\x03\x5b\x9b\x90\x67\xc5\xe5\x3d\xb0\x1c\x07\x5e\x20\x02\x56\x94\xe7\x28\x2a\xa2\xe3\x0e\xf1\x11\xd9\xba\xdf\x99\x43\x6d\x72\x2c\x51\xa5\x89\x8f\xb6\x53\x42\xbb\x0e\x9b\x28\xb2\x53\x05\x11\xc1\xcc\x35\x85\x7e\xe3\xc2\xb0\x82\xf4\x6f\x81\x16\x28\x8a\xf5\xec\x98\xbe\xad\xb5\xa7\xac\x89\x26\x01\xb8\x0e\x8a\x35\xeb\xac\x83\x5f\x03\x8d\x41\x6e\xc1\x36\xc8\x20\xb5\x04\xca\x22\x64\xba\xb3\x37\x17\xc2\x4c\x24\x04\xf3\x33\xab\xf9\xb4\xee\xc5\xc2\x6e\x1a\x0e\x12\x18\x0b\x10\x99\x31\x15\x82\xf6\xb3\x10\x98\x37\x0d\xdd\xc6\xd3\xba\x16\x6d\x0b\xd3\xfa\x17\x42\x98\x8d\xc4\x0c\xf2\xf7\x5a\xcf\xe8\x7c\x1e\xe9\xf9\xa6\xaa\xdd\x4e\xdf\x73\x56\x01\xb7\x0e\x7a\x93\xe6\x67\xe2\x0e\xb3\x48\xa3\x5c\x8a\x93\x68\x1a\x47\x75\x54\xa6\xd3\xf1\xba\x0a\x80\xbb\xd4\x1d\xae\x37\x08\x50\x40\x97\x81\x4a\x0c\xa8\x01\xd5\x99\x81\x35\x54\x6b\x10\x58\x77\x88\xb2\x1a\x12\x20\x82\x61\x09\x8b\xdb\xe6\x0a\xfa\x7b\x0b\x4c\xa5\xb2\x0a\xe8\xce\x28\xc7\x2a\x0e\x83\xec\x8f\x79\xb0\x96\x10\xd8\xd8\x66\x3b\x5e\x75\x1c\xac\x7c\xd0\x83\x3b\xa4\xfc\xfc\x32\x04\x6b\x78\xb8\xc3\xdb\xda\x58\xc5\x31\x90\xf2\x81\x0e\xec\x45\xb2\xf3\x94\x1c\x8e\x60\x88\xbd\x46\x9f\xd8\xd0\xdb\x24\xf4\x28\xd6\xa4\xf5\x28\x4d\xb3\x57\x14\xaf\x7a\x08\xda\xe6\x69\xb4\x43\xfb\x2c\x85\x60\x56\x2b\x9d\x30\x56\x03\xda\x90\x66\x2d\x88\x53\xaf\xa5\x46\xe8\x35\x57\xa7\x9f\x0f\x45\x42\x91\x77\x8b\xbf\xb1\x9c\x00\x02\x39\x31\x17\xc6\xfc\xc1\x4f\x0f\x26\xb2\x7c\xe0\x3d\xb9\x31\x0f\xc2\xfc\x41\x2f\x8a\x89\xb2\x64\xfc\xd3\x65\xc4\x32\xf5\x6e\x39\xac\xe9\x11\x60\xc6\x2b\x3f\x25\x28\x8d\x4b\x54\xdd\xe5\x2a\x9a\x24\x3f\x86\x61\x25\x71\xac\xae\x84\x30\xa3\x41\x6b\x46\x90\x92\xa9\x75\xf2\x5a\x12\x44\xaa\xd1\x38\x39\xc3\x98\x8c\xa9\x5e\xa3\x95\xc5\x78\xa9\xc6\xeb\x51\x46\x6e\x4c\xf4\x0d\x68\x40\xc3\xf5\x04\x57\x8f\xca\x48\x0d\x8b\x25\xa9\xbe\x32\x54\x4b\x12\xad\x88\xf9\xd6\xae\x85\x81\x48\xd2\x34\x32\xf5\x3e\x2a\x49\x68\xfc\x3b\xf0\xf9\xb9\x61\x3e\x34\xf6\x6a\xce\x69\x8d\x33\x3f\x43\xbc\x76\xcf\x34\xbb\xb1\xb6\x0b\x14\x13\x57\x52\x2e\xf0\xfb\xdf\x77\x88\x7f\xdf\x21\xfe\x7d\x87\xf8\xf7\x1d\xe2\xdf\x77\x88\xcb\xef\x10\x47\x5d\xf8\x95\x1c\x8d\x57\x3d\xdd\xd2\x40\x41\x2b\x1d\x6b\x97\x43\x6b\x76\x53\x0a\x6a\xc9\x49\x74\x36\x08\x6e\x30\xb3\xce\x9e\xea\x6d\x25\x0a\xd3\x4c\x00\x53\x31\xef\x2a\x55\xea\x2d\x85\x1a\xd5\xac\xe6\x53\x71\xe6\xb5\x2e\x95\x76\x13\x17\xc3\xe2\x93\xdb\x12\x38\xdd\x81\x8d\x9f\x8b\x46\x2a\x72\x28\x0d\x9c\x84\x68\x8d\xa1\xc3\x8e\xb4\x0a\xd7\x87\xf0\x78\x43\xca\x54\xce\x31\x63\x35\xd9\xbe\x06\x4f\x2e\xbd\x2a\x83\x4b\x6d\xf8\x50\x22\xab\x23\xef\x6c\x60\x7d\x0c\x1d\x35\xc4\x35\xf8\x6e\xc6\xf3\xa9\x7a\xab\xef\x13\x34\xe4\xc5\x4a\xfb\xc4\x72\x68\x0d\x45\x28\xa8\x25\xfb\xc4\x6c\x10\xdc\x60\x66\xed\x13\xea\x6d\x25\xcc\x3b\x13\xc0\x54\xcc\xbb\xec\xae\xde\x52\xb8\x0e\x66\x35\x9f\x8a\x33\xbf\x72\x54\xda\x4d\x5c\x0c\x8b\xf7\x89\x25\x70\xba\x03\x1b\xdf\x27\x46\x2a\x72\x28\x0d\xec\x13\xb4\xc6\xd0\x3e\x21\xad\xc2\xf5\x21\xdc\x27\x48\x99\xca\x3e\x31\x56\x93\xed\x6b\x70\x9f\xe8\x55\x19\x5c\x6a\xc3\xfb\x84\xac\x8e\xbc\xb3\x81\xf5\x31\xb4\x4f\x88\x6b\xf0\xdd\x88\x6c\x40\xd5\x5b\x9e\xd1\xa7\xe7\x22\x1b\x50\x1b\x10\x68\xd9\xf6\x31\xd1\xbe\x32\xc9\xc4\x31\xc1\xd2\x30\xf7\xd0\x2f\x3c\x65\x77\x0e\xc7\xe2\xf3\xad\xe8\x50\xda\x3f\x4d\x46\x97\xee\xbb\xe9\x3f\xa3\x99\xed\x4f\x6b\x21\xfb\xf1\xb6\xae\x1f\x65\xb7\xfa\x81\x56\xa8\xe5\x66\xa4\x59\xa6\xa2\x95\x8d\x42\x4b\xed\x3e\x53\x8d\x3b\xc2\x37\xfe\xdd\xc8\x02\xf0\xac\x17\xb2\x94\xdc\x32\xc9\xd3\x4d\xf3\xa3\x20\xe9\x5f\x9b\xf9\xd1\xda\xe4\x67\xcd\x72\x16\x3e\xdc\x99\x67\xe0\x9e\x63\x6a\x9e\x6e\xf8\x5d\x68\x8a\x1d\x32\x81\x8a\x0d\x98\x83\xa6\xc8\x01\x33\xa2\xd4\x0c\xd8\x98\xf2\x0a\x04\x41\x0b\x5e\x50\x51\x25\xbb\x28\xed\xce\x73\xfb\xf8\xbc\xf9\xb9\xaf\x73\x7d\x32\x89\xe5\xfd\x45\x33\xbe\x44\xd2\xdf\x18\x75\x88\x18\x1d\x3e\xaf\xff\x3a\x7a\xc2\x2b\xe4\x6a\xfc\xcd\xaf\x60\xf0\xef\xf0\x2e\x17\x6e\xe2\x2a\x92\xd9\x5b\xf0\xc0\x95\x61\xad\xb1\xd7\x9c\xfd\x07\x98\x55\xf3\x72\xb2\xed\xa5\x1b\x65\x93\x44\xa7\xfa\x91\x0f\xdd\xa7\xbe\x2a\x9f\xf6\x90\x7b\xc1\x0b\x6a\xda\x54\xe1\x85\x70\xef\x8d\x2a\x3f\x36\xb5\x37\xad\xe4\x23\xf3\x06\xb5\xa7\x34\x63\xe1\x5e\x44\x65\xa5\x87\x61\x78\x93\x1c\xf7\xa8\x48\xaa\xab\x6e\x10\x1a\x67\x85\xf9\x1b\x77\x9e\x10\x0c\x53\xb5\x11\x43\x02\xd5\x26\x0d\x79\xc6\x1b\x8c\x0e\x4b\x3c\x9d\x9f\x44\x0f\xb8\x3f\x0d\x3c\x75\xfe\x24\x7d\xab\xfc\x49\xf2\xe4\x98\x7f\x61\xdc\x49\x14\xa4\x43\x28\x1a\x41\x3c\x21\xa8\x4c\x20\x91\x11\xd7\xce\x86\x79\x96\xd0\xac\xa4\x4d\x10\xe0\xef\xec\x08\x3e\x75\xc4\x2b\x1f\x09\x07\x33\x89\x62\xee\x52\x61\x5e\x21\x12\xf1\x47\xb9\xfa\x9f\x25\x25\x2a\xd4\x2b\xab\xb7\x14\xe1\x15\xd5\x3c\x95\x53\x89\xbd\xd3\x26\xec\x16\xc4\x0f\x56\x4d\x01\x6e\x73\x61\x7a\x20\xfd\xf9\x18\xcc\x14\x3d\x0d\x54\xd2\xf5\x7d\x56\x24\xdf\xb2\x63\x15\xa5\x7a\xa3\xc6\xd9\xf9\xf9\x56\xd7\x6b\xcd\xa0\xfd\xce\x6e\xfc\x04\x58\xb7\xce\x95\x66\xf2\x81\xa9\x49\xb5\x7e\x27\x6d\x8e\xa8\xe8\x54\xed\xf5\x03\xaa\xf6\x59\xcc\x26\x8f\x23\x91\x7b\x07\xa6\x53\xd2\x0e\xec\x06\xd3\x9b\x31\x61\x8f\x85\xcd\x24\x5c\x6e\xa4\xc9\xf1\x2b\xde\x07\x29\xbe\xea\xf5\x9b\x08\xcc\x6a\xd5\xf9\x54\x2a\xd2\x45\x42\xe4\x74\x9d\x5e\xff\x8a\xa3\xe5\xdc\xd6\x3c\xa6\x13\x1b\x2b\xa5\x93\xe9\x52\x71\x60\x1e\x46\x21\x8c\xcd\xff\x28\x80\x31\x4e\x38\x66\x31\x9a\xc4\xa8\xdd\x06\x63\x18\x76\xeb\x8f\x21\xc4\x67\x7b\x54\x42\xa9\xdf\x64\x0c\xa9\x7e\x8b\x31\xb4\x8a\x4e\xfa\xc8\x51\xa4\xba\x0d\xc6\x50\xea\xd6\x1f\x43\x48\x98\x8c\x4e\x15\xb9\xa1\xc6\x63\x88\x0e\xb5\x1d\x43\xba\x97\x54\x73\x14\xd3\x5e\x8b\x31\xf4\x7a\x0d\xc6\x70\x92\x6e\xa4\x52\x69\xa8\xd0\x82\x97\x32\x0a\x0d\x86\x12\x44\xa9\x08\x94\x91\x86\x52\xaa\x8d\xb4\x93\x10\x6f\xfc\xc6\xb3\xde\xdb\x9b\x77\xf7\xa6\x66\xe7\x67\xcd\xcd\xcf\x4c\xa2\xc5\xc7\x34\xda\x7d\xbd\xd2\xfe\x61\x99\x1f\xd5\x34\x0b\x5e\xdb\xfb\x6e\x80\x66\xab\xef\x22\x7c\x04\xae\x92\x3c\x7f\xd3\x1f\xb3\xf3\x78\x08\x3b\xd7\x34\xaf\xfe\xda\x39\xd9\xe5\x84\x0f\xc3\xf0\x4a\x79\x70\xf3\x92\x96\xf7\xda\x8e\xe7\x4f\x99\x92\xb4\xbc\x6e\x42\x07\x49\x8f\x76\x7f\xe9\x24\xf3\x37\x0c\xa7\x8e\x79\x9d\x29\x27\x04\x8a\x16\x44\x8d\x8f\x26\x24\xd0\x89\xa6\x07\x2a\x8f\xe6\xcd\x9d\x16\xcd\x4d\xd8\x27\x85\xa0\x30\xbc\x89\xc9\xf9\xba\x0d\x7b\xf3\x09\xbf\xe9\x9d\xde\xd5\x15\x89\x16\x0b\x12\x08\x84\xcf\xf6\x74\x8c\x51\x41\x2e\x99\x26\x72\xf4\xc8\x62\xee\x24\x89\x5e\x61\x21\x4c\x96\x09\x32\x14\x14\x56\x94\xaa\x28\xe9\x75\x31\x79\x29\x4e\x14\x44\x9d\x0e\xf9\xe4\x1f\xbe\x4a\x02\x2f\x2a\xd0\x98\x74\xdf\xd3\x85\x2d\xd3\x78\x5c\xda\xe2\xca\x53\xc5\xed\xcc\xfc\xff\x0b\x13\x88\xc9\x81\x28\x8c\x72\x4e\x02\xae\x5e\xdb\x4b\x37\xe2\xf1\xba\x8b\xf2\x5f\xb1\x0a\xdf\x63\xd9\xbd\xff\x3a\x13\x04\x78\x67\xa2\xc8\xdf\xf6\x22\xd1\x2b\x6f\x2a\xd7\xca\xf9\xf1\x66\x69\x43\xbd\x5e\xde\x49\x93\xea\xf5\xb3\xae\xd6\xd5\x82\x9f\xae\xa8\xbd\xee\x93\x0a\xe9\x10\xbf\xbd\x9e\xae\x5e\x16\x00\xd5\x2c\xb2\xe4\x3a\x61\x76\x4e\x57\xae\xf9\x78\xc6\x55\x52\x7d\x22\x91\xa0\x55\x27\x87\x5d\xc0\x6c\x04\xeb\xda\x88\xeb\x38\x92\x63\x59\x09\x44\x79\x76\xd4\x30\xe9\xa5\xdd\x1f\xc1\xa8\xc9\xc4\x0f\xe9\x5d\x8a\xec\x95\xdc\xad\x6f\x09\x60\x06\xc3\xa6\x1c\x1d\xe3\x2d\x69\xc3\x94\x92\x48\xfc\x25\x4a\x9f\x68\x18\xfd\xfe\xd8\x20\x76\xa6\x39\x79\x38\x43\x59\x40\x3e\xd5\xd7\xad\x8a\x43\x1d\x87\xd5\x66\x95\x78\x07\x44\x3f\xc5\xc9\x0b\xcd\x9a\xf2\x98\xbd\xa0\xab\x35\x11\xef\xc2\x86\x74\x4d\x0e\xe4\x1a\x68\x1f\x30\x96\x55\x91\x1d\x9f\xe9\x2e\x59\xbd\xa5\x78\x85\x17\x87\x28\x25\x99\x02\x5e\xc9\x25\xba\x6b\x9a\xb7\x9c\xc6\xdf\xcb\x8e\x41\x94\xe2\xa7\x28\x49\x4f\x05\xba\xba\x12\x64\x41\xe0\x0c\xed\xb6\x10\x0b\xc1\x9e\x6d\xb9\xf9\x59\x9c\x8a\xa3\x79\x3e\x29\xc9\x42\xe7\x99\x1f\x49\x12\x3a\x93\xcd\x35\xa1\xc3\x42\xee\x65\x9f\x51\xe2\xa9\xc1\x5c\x32\x13\x20\xc8\x72\xc9\x4c\x62\xc6\xcd\xec\x71\xdc\x5d\x2f\x1f\x49\x03\x63\xc9\x58\xee\xae\xfb\xa9\x0e\xe5\x57\x43\x23\x01\x1b\x69\x52\x15\x26\xcb\x20\xfc\xdd\x72\x92\x39\x97\x5c\x34\x0b\xc6\x0a\x44\xe3\x21\x2d\x22\xdd\xa4\xcc\x9a\x21\x2c\x13\xea\x1f\xe3\xb7\x14\x82\xbf\x47\x56\x0f\xfe\xa3\xb3\x7e\x6e\xb9\x7c\xe0\xf3\x17\xd4\x5d\x6d\x78\x5d\x81\xb2\x1c\xa4\x65\x94\x9d\x92\x85\xd3\x22\x16\x9d\x99\xc3\x6f\xfc\xd1\x67\xb5\xa6\x66\x8d\xd6\xf2\x74\xc7\x1d\x9c\x57\x20\x2a\xc1\x6f\x05\x40\x04\xd5\x35\x26\x87\x45\x69\x19\x24\xfa\xb4\x67\x42\xfa\x57\xd6\x99\x82\x64\xca\xf9\xaf\x3f\xeb\xf0\x31\x2f\xb2\x97\x24\x46\xc5\x43\xb3\x83\xd1\xa4\xa7\x36\x9f\xf4\x14\xd4\xe6\xad\xa9\xd1\x64\x4e\x82\x24\x40\x6c\x1f\x06\x3a\x3c\xa2\x42\xcf\xb3\x57\x54\xd0\x6f\x7a\x55\x24\xcf\xcf\xbd\x97\x65\x89\x20\x7d\xb0\x2a\xa8\x4b\xeb\x37\xc7\xb7\x21\x51\x13\x8c\x02\x95\xa8\xba\x70\x8e\x17\x8c\xb1\x53\xcd\x9d\x40\x29\xd8\xee\xe8\x6d\x83\xd0\x17\xe4\x98\x1d\x91\x34\xc5\x2d\x53\xc0\x9e\x3e\x39\x4d\x9a\x64\xf3\xe9\x8f\x49\x21\x83\x6f\xaf\x29\xb7\x02\xd5\xb2\x01\x53\xde\x6a\x61\x74\xf2\x6f\x31\xee\x31\x03\x29\xc9\xf8\x5b\x81\x56\x77\xac\xa3\x5c\x94\x1a\x87\x65\x1a\x75\x53\xa6\x11\x61\xee\x6e\xd8\x0d\xa1\x4d\xb3\x38\x1d\x6e\x3f\x1f\x6f\xb3\xbd\x90\x14\xe0\x2e\xb7\x39\x5b\x05\xe6\x58\x19\x21\x39\x97\x0e\x2e\x43\x65\x3f\xdb\x57\xe3\x1c\xcc\xa7\x00\x1b\x1e\x3d\x3d\xdf\x75\x12\x4e\x6a\xbf\x47\x45\x12\xe1\x13\x6d\x74\x8c\x51\xfc\xf0\xc7\xf5\x8d\x81\xbf\xeb\x79\x74\x24\xae\x8d\x23\x39\x0c\x5b\x35\x7c\x38\x73\x21\x53\x6f\x52\xbe\xc2\x5e\x3b\xd5\x2c\x85\x6d\xc3\x4b\xcd\x8b\xec\x3a\xe6\x1f\xc0\x2b\xba\x0c\xc9\xd7\xb8\x4d\x6a\x8d\x5c\xda\xf9\xb8\xd6\x98\x0e\xa3\x9e\x97\xea\x56\xaf\x9d\x77\xf4\x33\xe1\xb6\xf6\xc3\x1b\xf9\x20\x67\x74\xd6\xed\xe6\x48\xf2\xd6\x81\x65\x01\x92\x26\x6a\x55\xd1\xb9\x84\x60\xab\xbf\x24\xe8\x55\x2b\x89\xa1\x41\xa3\x79\xe8\xf9\x56\x64\xaa\x68\xd3\x03\xaa\x22\x48\x47\x21\x80\xcf\x5e\x74\x12\x9b\xed\x28\x83\x52\x8f\xc0\x12\xe5\x51\x11\x55\x59\xf1\xc0\x72\xac\xa8\x50\x9d\x85\x05\xad\xe7\x36\x9c\xc9\xe4\x32\x40\xd3\xb9\xbe\x07\xe9\xd2\xde\x4e\x4b\xf9\xbc\x4d\x29\xa9\x20\x27\x96\xcd\xd4\x7a\xb3\xf6\x63\xa6\xf8\x87\xb3\xc2\xbf\x9e\x85\xd6\xe7\x3d\xb1\x8e\x00\x65\x57\x62\x07\x44\xdc\x05\x63\xfc\xae\x50\x71\x8c\x52\xbd\xcc\x4e\xc5\xae\xfd\xbe\x47\x51\x5a\xed\x49\x6a\x6c\x9a\x41\x9a\xfb\x94\x9d\xaa\xfc\x54\x69\x71\xac\xa1\x83\xc0\xfa\x44\xe4\x52\xac\x11\x0b\xcd\xb8\x79\x4a\x5e\xb1\x44\x51\xb1\xdb\x43\x5e\x9d\x34\xa1\xda\xa5\xc6\xd9\x73\xbf\x26\xc7\xf6\x4e\xb1\x33\x0c\xc6\x24\x80\xd5\xed\xf3\x9b\xc2\x1a\xa3\xa6\x32\xd2\x07\xae\x8d\x59\xf4\x4d\xdf\xed\xc1\x61\x19\x12\x00\x11\x95\x80\x5a\xba\x4f\x29\xf1\xaf\xa5\x37\x22\xed\x1a\xe4\x00\x4d\x58\x50\x5c\xbb\x19\x4d\x5a\x92\x41\x8a\xce\x53\xa9\x51\xbb\xb5\x51\xa0\x43\xf6\x82\xf4\x28\x4d\xaf\x6e\x8c\x2a\xcb\xb3\x34\x7b\x7e\xc3\x7c\x51\x24\xbb\x92\xd2\x8e\xf0\xc7\x78\xc6\x23\xf0\xdf\x6e\xa7\x18\xdc\xb6\xa9\x07\x1d\x78\xf7\x25\x31\x9e\xc1\xea\x8d\x2b\x69\xdc\xc4\xea\xc2\x99\x2b\x92\x1d\xef\xdc\x25\xc5\xc0\xb8\xa8\x9d\x38\x44\xaf\xca\xfa\x26\x4b\x81\x76\xd9\xbf\x0a\x91\xae\x4c\x41\xa6\x7b\x6e\x85\xf6\xca\xa7\xac\x54\x41\x0e\x7c\xf1\x8a\x1d\xa8\x28\x5e\xb9\x03\x0d\xa4\x2b\xb8\xd7\x06\xaf\xe4\xde\x47\xc9\xb0\x7b\x2b\xbb\xad\x31\x65\x85\xf3\xad\x54\x56\x3a\x73\xbd\xcc\xa5\xf4\x95\xac\x7c\xa6\x78\x96\x04\x68\xdb\x2f\x68\xaa\x24\x11\xda\xea\x43\x92\xa1\xa9\x35\x55\x42\x34\x0d\xa5\x92\x42\x58\xa3\x2b\x31\x9a\x4a\xcb\x25\x47\x07\xd4\x22\x09\xd2\x4d\xa6\x4c\x4c\x09\xf8\xbc\x40\x0c\x25\xc6\xc6\x2b\xd0\x81\xb1\x2c\x50\xfb\x4e\xf7\xfb\xfc\x1d\x7b\xe2\x36\x58\x6f\x57\x6b\x6c\x16\xf3\x64\x7f\x7b\x43\xa6\x8d\xde\x93\x72\x3a\x82\xf2\x9e\x3c\x95\x45\xdb\x83\x7d\x7e\xd6\x3c\x21\x4e\xa3\x8a\x8d\x54\xda\x35\xc0\xdd\xfc\x0c\x03\x5e\x67\x1d\x50\x43\x1c\x58\x06\x99\xbb\x53\xf2\xae\xb9\x35\x95\xd4\x3e\x77\xa3\x9d\x5e\xea\xe7\xd1\x1f\xfe\x8f\x2c\x46\xda\xff\x5e\x17\x6b\x1f\xbe\x2b\xa1\xd3\x34\xff\x6f\xa4\x06\x07\x41\x55\x06\xde\x5d\xab\x88\xbb\xb1\x2b\xa9\x99\x97\x50\xd2\x6b\xa7\xae\x9f\xb1\xea\x60\xea\x0b\x9c\xd5\xae\x8d\x16\x5d\x14\x8d\x5c\x0d\x8d\xdd\xf7\xb4\x56\x8f\xde\xf0\xf9\x01\x0e\x0f\x61\x04\xc9\x8b\x4a\x7f\xb2\x4b\xfc\xa5\x97\xb2\xb3\xae\x61\x25\x17\xaf\x7c\x92\xd4\xff\x18\xc6\x3f\xe6\xd9\x7c\x68\x0b\xef\xf1\x54\xbd\x16\x66\xb4\x99\x39\x5a\x01\x8c\xe9\x23\xef\xbb\x45\x88\xaf\x31\xc7\x20\xa4\xe8\xa9\x9a\x38\x7a\xd2\x64\xd1\xe0\x59\x10\x73\xc7\x0e\x30\x2e\x44\xb9\x81\x0d\x92\xbf\x80\x6c\x35\xe0\xbe\x05\x9f\xd5\x71\xe0\x0d\x6e\x81\x5e\x50\xc4\xbf\xd7\xa7\x09\xf7\x05\x8b\xbf\xee\x87\x7d\x95\xcc\xa5\xe8\x15\xd6\xb8\xbb\xe6\x95\x8c\xbe\xfe\x85\xdb\x32\x5f\xbb\x31\x42\x88\x15\xf7\x11\x55\xaf\x08\x1d\xd9\x0b\xa3\x66\x09\xe0\x8d\x97\x1d\x9a\x10\x8d\x5a\xb8\xb2\x57\xe0\x3e\x4b\x3e\xee\xf2\x4c\xac\x4b\x92\x9b\xbe\x4e\x03\xe3\x25\x4a\x4f\xe4\xd9\x75\x72\x7c\xee\xb6\x97\x18\xbb\x11\x3a\xd6\x97\x51\x62\x70\xaf\x51\x71\x54\x05\x97\x15\xd1\xf1\x19\x0d\xc3\xdb\x15\x09\xbc\xa0\x55\x02\xd8\x78\xe8\xc8\xa0\xa1\x43\x5e\xbd\x29\x0e\xb5\x8d\xc6\x4e\x9e\xa0\x83\xd2\xda\x9b\x23\xaa\xf0\xe6\x51\x51\x01\xdf\x5d\x51\xe8\x17\xf0\xd2\x07\xe5\x19\x02\x04\xec\xa2\x3c\xa9\xa2\x34\xf9\x86\x46\xe0\x19\xd1\x6b\x29\x81\x71\xca\x73\x54\xec\xa2\x72\x14\x44\x83\x8d\xfa\x50\x6b\xb2\x15\xd9\x73\x81\x4a\xa2\xe5\x56\x58\x89\x3e\x46\x15\xe7\x9a\xd0\x2c\x30\x6a\x9f\x60\x8a\x0a\x94\x23\xb8\x20\xa5\x7f\xf5\x2f\x4f\x98\xc3\x44\x73\x4b\xdd\x1e\x74\xec\xd9\x39\xad\xa7\x46\x2d\xb8\xd4\xce\xbf\xd4\xf5\x97\xf7\x15\xb3\x96\x45\xe8\x99\x17\x42\x81\x5e\x78\x63\x04\xde\x3b\x40\xc8\x50\x53\xf6\xde\x9d\x73\xbb\xb1\x96\x05\xbe\x20\xce\xaf\xed\x45\xe8\xd5\x3c\x1c\x7b\x60\x78\x41\x67\x7b\x4b\xa7\xee\x5f\x42\xf9\x25\xf3\xc5\xdf\xda\x9b\x92\xad\xb2\x77\x00\x61\xca\x34\xc8\x31\xd1\x79\xac\xd1\x2b\xff\x03\x1d\x2e\x2f\x49\x99\x3c\x26\x29\x3e\x91\xd1\x75\xd3\xf3\xe2\x14\xb4\xdc\x52\xb7\x85\x0e\x04\xf8\x33\x45\xb5\x93\x05\xde\x0c\xc5\xdd\x36\xd2\x8b\xb7\xa1\xde\x8a\x60\xd5\x27\xc8\xff\xef\xff\xf9\x7f\xb5\x09\xff\xfb\x30\x8c\x36\x63\xde\x62\x14\x8e\x31\xb2\x01\x3f\x90\xb9\x7b\x8c\x8e\x47\x54\x3c\x68\xc7\x88\x2a\x43\xc9\x11\xb8\x0c\x4f\xd5\x15\xf5\x3c\xc8\x9e\xc0\x22\xd2\x27\x72\x1f\x6a\x5f\x43\xe2\xeb\xb4\xc1\x4f\x88\xef\x2b\x68\xda\x5d\x20\x0d\x59\x95\xae\xb8\x3d\x66\x2b\x64\x15\x2e\x82\x8f\x90\xbb\x7a\xd5\x1a\x17\xc2\x31\x8b\xf9\xd3\x29\x4d\xa5\x9d\xb5\x78\x73\x60\x36\xf9\xb9\xf6\xbe\x6d\x77\x93\x46\x55\xb3\x5b\x27\x42\x70\x2a\xf4\x1a\x8a\x1c\xd1\x33\xe8\x89\x6c\x6f\xb5\x93\x11\x9b\x6c\x9b\x5a\x87\x8c\x2a\xa9\x52\x34\xb2\x60\xe9\x2d\xfc\x58\x18\x2d\x5a\x6d\x4f\xe2\xd9\x34\x8d\xd8\x5f\xfb\x0b\x17\xfb\x44\x76\x55\x3c\x4a\x71\x75\x2f\x06\x96\x4a\x4e\xb3\x35\x07\x2d\x2d\x83\x41\xd2\xd1\xce\x61\x6d\x7c\xe2\x2d\xc9\x92\x5a\xf5\x3a\xfb\x34\x89\x29\x59\xb7\x28\x25\x64\x84\xdd\x88\x90\x9a\xbe\x36\x9c\xe1\xb5\x31\xe2\x61\xd2\xb9\x19\x82\xd3\x3e\xaf\x8f\x38\x6e\x43\x72\xd9\x0c\x8f\x0e\xa4\xef\x15\xc5\x99\x17\x5a\xc9\xf9\xa1\xf6\xc6\x9d\x36\xc9\x52\x2c\x44\xc4\x27\x4c\xd9\xb8\x65\xcd\x9b\xc1\x91\x71\x33\x7d\x50\x43\xc3\xd4\x95\xb8\x1f\x0f\x4a\xe0\x90\xe7\x00\xf4\x9c\x68\xf8\xe8\xa0\x99\x6a\x5d\xf1\xcb\x7c\xd8\x05\x90\xf5\x48\x1c\x49\x30\x42\xd7\xa8\x67\xe6\xe7\xdb\x26\xf8\x10\xd8\x76\xb7\x87\x24\x8e\x53\xa4\x88\x5d\x63\xa4\x9e\x21\xc0\xea\xb6\x3c\x2d\xe5\x98\xfb\xdc\x23\xf5\x9e\xbd\xdc\x88\x51\x59\xe1\x63\x48\x92\x1d\xe5\x97\x8f\x46\x7d\x6d\xa1\x80\xf0\x58\x78\xca\x7a\x20\x9c\x77\x33\x33\x9a\x88\x1f\x2f\xe7\x39\x38\xb2\xda\x55\xc8\xcf\x40\x67\x5c\x65\x19\x9f\xd5\x34\xca\x4b\xb4\xad\xff\xf8\x4e\xcc\x32\x71\x76\xd0\x0b\xb4\x7b\xdb\xa5\xf8\xf8\x5d\xf1\xaf\x1f\x25\x75\xee\xae\x2f\xe0\x1f\x6c\x69\x16\xf1\x0f\x16\xdd\x52\xf7\xef\xa4\x95\x78\x68\x17\xe5\x64\xc6\x94\x38\x08\x45\x71\x87\x8f\xea\xf6\x1c\x17\x91\x6a\xe4\x5c\x4c\xb8\x9a\x9c\x97\x94\xfa\x68\xbc\xb5\x49\x4e\x35\x0e\x30\x5f\xd6\x51\xea\x26\x41\x17\xc3\x65\x51\xa6\x3e\xcd\x6a\xeb\xb0\xc3\x6b\x4c\x60\xe9\xc6\x2c\xac\x00\xc6\x38\xd6\x31\xc1\xcb\x3f\x84\x88\x0a\x6b\xcc\x20\x43\x4c\xed\x9c\x04\xc0\xd5\xdd\x36\x3b\xa6\x6f\xfd\x15\x34\x54\xaf\x77\x36\x07\xd2\x35\x1f\x51\x9a\x26\x79\x99\x94\xf3\xf0\xb9\x1e\xc4\x42\xf4\xf0\x74\x12\xb3\xf7\xf9\xb7\xeb\x55\x1d\xe0\x63\xb4\xea\xd4\xcf\x19\xa2\xe2\x82\xeb\x34\xea\x30\xd9\x10\x95\x78\x06\xe7\xcb\x1a\xe7\x6e\x72\x1c\x27\xef\xdf\x55\xf0\x21\x6e\xa8\xe0\x11\xc6\x82\x6f\x3f\xf3\x6c\xdf\x3f\x77\x4a\x5e\x0f\xca\x8f\x32\x8b\xae\x98\x88\x58\xf6\x4d\xce\x2c\xdc\xb0\x28\x3d\x8d\x0e\x77\xb1\xe6\x4d\x51\x5f\xb9\x6b\xcd\xec\x0a\xce\xbf\xf5\xf1\x2d\x46\x4f\xd1\x29\x55\x15\xa7\x9c\xfa\xc9\xf1\x04\xa7\x81\x8d\x69\x2c\xec\x41\xd5\x55\x55\xd4\x28\xe2\x02\x5e\x29\x04\x57\xad\x0b\xb6\xfa\xce\xee\xce\x3c\xcc\x9d\x80\x26\x9b\xf3\x47\x54\x32\x1e\x5f\xca\x81\x33\x9e\x9a\xa8\x7f\x82\xfc\xa4\xcd\x09\x87\x97\xf2\x7c\xe1\x84\xe3\x0d\x7b\x2e\xb4\xda\xc3\x74\xcb\x67\xff\x7e\x40\x71\x12\x69\x3f\xb5\x71\xb2\x5d\xdb\xcc\xcf\x57\x17\x99\xca\x56\xdc\x6d\x8f\xd5\x5e\x6f\x6d\x79\x3f\xd9\x8a\xc2\x8b\x59\xa7\xec\xe8\x98\xf5\xc9\x6d\x5c\xdf\x45\x6b\x2a\x66\x76\x9c\xbb\x38\x79\xb9\x93\x2f\xbf\x98\x94\x29\x3a\xfa\x75\xde\x0c\xb5\xb7\x3d\xf0\x3a\x94\x89\x13\xee\xb0\x6f\x4b\x86\x15\xae\xde\xdd\x12\xd5\xc3\xd4\x07\x36\xf0\x8c\x4d\xd2\x40\xfe\x82\x2e\x1e\x07\xc9\xc2\x98\xf2\xe2\x6d\x02\x7e\x03\xef\x2f\x63\xae\xca\x94\x77\x95\x9c\xb5\x6e\xd0\xc7\xab\x8b\xd5\xa4\xca\x77\xb2\x3b\x74\xf1\x58\x27\x98\x6f\xc4\x8a\x3e\x96\x36\xe4\xd2\xd9\xe1\x76\x2c\xe6\x21\x9e\xa8\x1d\x55\x61\xfe\x68\xdb\x7b\x1b\xb6\xfd\xf7\x66\xe1\xf5\x57\x72\xff\x65\xe8\x78\xbd\x3f\xae\xe9\xc6\xba\x8b\xd2\xdd\x4f\x18\x2d\xed\x1f\x9a\x7d\x25\xef\xc6\x51\xec\xc6\x19\xef\xc6\x19\xe8\xc6\x55\xec\xc6\x1d\xef\xc6\x1d\xe8\xc6\x53\xec\xc6\x1b\xef\xc6\x93\xe8\x37\x2a\xf3\x34\xad\x8d\xa0\x7b\x5d\xc3\x8a\x91\x22\x06\xa2\x29\x9c\xd6\x86\xc7\xc0\x03\x04\x1c\x75\x04\x44\x93\x3b\xad\x0d\x8f\x80\xe3\x60\x04\x6c\x75\x04\x44\xd3\x3e\xad\x0d\x8f\x80\xed\x61\x04\x2c\x0f\x23\x20\xf7\x62\x04\x5f\xbc\x04\x95\x1f\xea\xeb\x25\xb2\xe5\x32\x7b\x2c\x68\xf6\xec\x85\x9d\x12\xb0\x39\xcd\x71\xff\xeb\x20\x52\x43\x6a\xd5\x02\xa3\x0d\xdf\x2a\x82\x55\x1b\x58\x20\x3c\xc8\xc4\x01\xb6\x60\x16\x8c\x6d\x12\x10\xf9\xb0\x98\x17\xa6\xfd\xe5\x68\xbb\x98\x1b\xbb\x72\x7b\x60\xeb\xe9\x1c\x08\x6e\x9b\xeb\x90\x09\xfb\x73\xad\x62\xb6\xee\x0b\x45\x56\x45\x15\xfa\xc9\x0a\xcc\x18\x3d\xab\xed\xf5\x02\x45\x75\xd0\x38\xda\xd8\xb0\xf9\xd3\x62\x7d\x0b\x24\x0c\x3e\x41\x4f\xe6\x3a\x66\x01\xfa\x54\xd8\x6c\xee\x3d\x38\x32\x32\x6b\x7a\x82\xf3\xe1\x4a\xda\x27\x55\x28\x75\xf4\x82\x8e\x55\x49\x9c\x76\xc5\x91\x34\x82\xe6\xd4\xa7\xd2\xa9\xfc\x21\x4c\xcc\x54\xe0\x35\xea\x21\x3c\xe9\x45\xbc\x04\x87\x02\x24\x19\x11\x62\x78\x24\x57\x5a\x15\xd7\xbe\x58\xfc\x90\x9a\x37\x31\x75\xcf\x00\x4e\xdf\xa1\x34\x55\x86\x7c\x77\xad\x80\xb7\x58\xe5\xa2\x8e\x53\xd6\x84\x71\xdc\xf1\xb7\x14\xd7\x1d\x4b\xdd\xe8\xa2\xeb\xda\x0f\xfa\xea\xd9\x30\xe6\xf5\xad\xa5\x95\x9f\xb5\x32\x4b\x93\x58\x39\x18\x82\xca\x43\x69\xde\x8e\x05\x8b\xa5\x3f\x57\x24\x40\x0b\xac\x1f\x42\x40\x5d\xb8\x96\x3e\x91\xb5\xc4\xdf\xc8\x92\xd5\xc9\x31\x39\xe4\x8f\x60\xdf\xe2\x2b\x0a\x8d\xda\xf2\x20\x11\x07\xbb\x14\x45\xc5\xf6\x31\xab\xf6\x6a\x1c\x81\x69\x2b\x5a\x7e\x0c\xfa\x0e\x1b\xb7\x93\x7d\x7f\xf1\x98\x1c\xc9\x45\x1e\x96\xd4\x71\x2a\x7f\xc1\x3d\x54\x56\xbf\xee\x8e\x53\x59\x4c\x43\xe9\xbb\xb0\x4e\xff\x5a\x1c\x0b\xbb\xe9\x55\xab\x86\x30\x95\x41\x69\x8a\xab\x0b\x9b\x2c\x43\x33\x9b\xa7\xcc\x4c\x50\xee\x96\x4f\x47\x9e\xb0\x4c\xc5\xad\xaa\x63\xa1\x98\x1f\x39\xab\x20\x93\xea\x87\x7c\xd1\x1f\xb3\x34\x16\x3f\x74\x55\x24\x5b\x4b\x0f\xce\xe1\x02\xb8\x83\x5e\x9c\x9b\x1f\xb9\x48\x20\x8a\xbd\xdd\xd1\x97\xa1\x83\x7d\x92\x4a\x97\xd9\xe0\x19\x67\x2a\xea\x7c\x22\xce\x03\xd2\xed\x51\xd0\xee\xd2\x89\x1d\x68\xd9\x6a\xeb\x41\x8b\x63\xcd\xd8\x65\xf9\x9b\x4e\x9f\xbb\x90\xff\x8c\xa0\x21\x6a\xd2\xda\xe6\x7a\xc1\x59\xb6\x26\x84\x89\x37\x35\x51\x44\xc3\x61\x4e\x23\x21\x57\x3e\x8d\xf2\x7b\x53\x8f\x0b\xae\x68\x29\x4a\x85\xbb\x38\xe6\xc8\xa9\xb2\x44\xef\xe2\x6a\xbc\x0d\x45\x50\x09\x7e\x53\x57\x15\x6e\x2b\x95\xd4\xe1\xb3\x6d\xf8\x7e\x3a\x8e\x2e\x02\xe1\x30\x1e\xb5\x07\x2c\x95\x53\xe7\xf8\x07\x09\xc4\xa9\xc8\x8f\xc5\xde\x99\x3c\x4c\xd1\xa2\xe9\x3d\x8d\x55\x5f\x6f\xd3\x6c\xc8\x7c\xb8\xa0\x91\x35\x87\xd9\xe1\x53\x1c\x8b\x1f\xfa\x4a\xd6\x9f\xa8\xcd\xa5\x73\xb7\xa0\x16\xcc\xa5\x76\x2a\xca\xb2\xb4\x4a\x72\x1a\x12\x23\xae\xfa\x3e\x6e\x7c\x05\xfe\xbc\x52\x1f\x2b\x3b\x2e\x68\xcc\x31\xe6\xdf\x9e\x9e\x9e\x84\xbb\xa1\x26\xb7\xc1\xb3\x99\xad\x94\x1a\xf4\x0e\x5f\xba\xeb\xe1\xc3\x97\xe0\xe4\x40\x4e\x3e\x7e\x7e\x86\x33\x84\x0e\xd1\x1e\xb9\x21\xde\xf4\x49\xd2\x57\x46\xe2\xa4\x20\x2b\x7c\xbb\xcb\xd2\xd3\xe1\x28\x26\x13\xfb\xd8\x03\xf7\x06\xfb\x65\xef\xfa\xac\xd7\x94\x53\xe6\x05\xda\xe7\x37\x1d\xde\x66\x6e\xad\x5b\x4e\x08\x9b\xed\x75\x45\x7d\xd6\x23\x0f\x22\x38\xf8\xc4\x58\xcd\xf6\x42\x2f\xd8\x45\x03\xa8\x35\x0c\xcf\xe4\xfc\x8d\x39\x1f\x41\x9e\x3a\x4a\x2f\xfb\x07\xc6\xe4\x75\xa3\xf3\x1a\xb6\xa2\x43\x76\x1d\x39\x6b\xdc\x93\xd0\x86\x5b\xa6\xee\x68\xf6\xd6\x1d\x3a\x8c\xbb\xef\x74\x9b\xc5\xf1\x5d\x34\x9e\x55\x84\xc3\x1f\x74\x6d\xbc\x99\x50\xaf\x59\xaa\xc0\x27\xc7\xa7\xec\x61\xfc\x95\xc6\x04\x52\xdc\xc8\xa6\x4c\xcd\x0b\x4b\x30\xe3\xdd\x8b\xa7\xde\x9c\x73\x19\x83\x3b\x9a\x22\x73\x8e\x08\xe5\xfc\x74\x37\xe2\xfb\x1e\x28\xba\xbe\x37\xfc\xd0\x65\x28\xa7\x97\x22\x11\xb3\xd8\xef\x4f\x59\xf1\x33\x5e\x03\x8f\x51\x41\xfd\xec\x1e\x84\xef\x41\x40\xc9\x12\x7b\x33\xd2\xd5\xc2\x3c\x0c\x85\xbf\x3b\x57\x65\x63\x7e\x9e\xff\xc6\x63\xc1\x1f\xed\xfb\xd7\x8f\x81\x1b\xc2\xf5\xa3\x74\xae\x3a\x64\x6f\x41\x34\x57\x76\x61\xe8\x63\x10\x42\x12\xf0\x57\x8c\xfd\xee\xc3\xd0\x13\x76\xbf\xb7\xba\x19\xa6\x89\x9c\xe9\x58\xff\xfe\x2b\x58\xff\xe8\x53\xe9\xd2\xa8\xe3\x8d\x1b\xe5\x3e\x7b\xfd\xf0\xc0\x42\x21\xcd\x3b\xc4\xf9\xd4\xb1\x7c\x74\x8a\x05\x46\x0a\x38\x3d\x7c\x37\x1e\x8b\xe8\x18\xeb\x69\x06\x11\x01\xe5\x91\x5a\xd9\x93\x3b\xcc\x65\x1d\xba\x15\x58\x50\x33\xca\xaf\x49\xae\xa7\xc9\xf1\x6b\x79\xc9\x4e\x15\x1e\xe6\x96\xec\x55\x96\x2c\xba\x32\xe3\x82\xac\xee\xfb\x7b\x3b\xbe\x03\x09\xb6\xba\x66\x9f\x30\xdb\x88\xb3\xf5\xe9\x01\x0c\x1b\x24\x89\xa7\x09\x7f\x36\x3b\x28\xfc\x95\x46\x15\xfa\xbf\x7e\xd2\x3d\xf3\xe3\x55\x6f\xa4\x5a\x74\xd3\xfb\x44\xcf\x26\x9d\xe4\x35\xca\x0d\xfb\xdf\xf1\xe6\xc3\x5b\x33\x18\x17\x41\xc6\xc9\xac\x7e\x9d\x95\x9d\xf5\x32\xf9\x86\x47\xd6\x88\xff\x73\x0f\x01\x72\x95\xab\xbf\x26\xd5\x3e\x39\xc2\x8e\x6c\xd2\x3a\xc7\xac\x4a\x9e\x92\x5d\x24\x90\x6e\x62\x6a\x0b\xf6\xb9\x66\x02\x9e\x92\x33\x8a\xdb\x1d\xcd\x24\x74\x76\xbd\xd6\x73\x5f\x60\xff\x11\x21\xa2\xc1\xaa\x62\x3f\xdd\x5d\x33\x4f\x8b\x5d\xb3\xde\x96\x47\xdb\x11\xf3\x74\x42\x62\x46\x14\x59\x8e\x8a\xea\x6d\x9b\xe5\xd1\x2e\xa9\xde\x28\x65\x9f\x92\xaa\xbe\x77\x67\x92\x80\xe3\x73\xbd\xc0\x26\xf4\xbd\xff\xde\x83\x3b\xe4\x74\x65\x3f\x84\x24\xdf\x27\xbb\xac\xc8\x75\xa2\xe0\xe2\x36\x9a\x11\xef\x4a\x98\x07\x12\x26\x52\x5a\x87\xc6\xa7\x01\x93\xe5\x43\xef\x9d\x0c\x1f\xa9\x74\x04\x35\x0a\x6a\x1f\x95\x79\x96\x9f\xf2\x9f\xb1\x8a\xf6\xf0\xc7\xb5\xd4\xb7\xc8\xbc\xed\xbe\xe5\x16\x6c\xda\xf2\xa9\x6f\xc3\x4b\x30\x66\x19\xfc\x5b\x0f\xda\xe0\xda\xa0\x5f\x75\xe2\xb8\x7b\x74\x7d\xd6\xd6\xc4\x97\xbd\xa6\x6b\xae\x9d\x9f\xaf\xda\xcf\x87\xe8\x4c\x8a\x6e\x5c\xb8\x8a\xac\x6b\x80\x90\x85\xbb\xb5\xe6\x85\x64\x09\x3f\x49\xc8\x45\xc2\x1f\x9a\x60\x1c\xea\x1d\xfa\x2e\xd7\x61\x9f\xe6\xfc\x63\x9f\x56\x14\x8d\x55\x15\xe9\x44\x22\xe6\x6d\x1e\x10\x76\x78\x1f\x5c\x65\xd8\x3d\x8f\x86\xd1\xdf\x17\xd9\x01\x51\x9f\x94\x1b\xdf\x85\x61\x09\xc0\x32\x8c\x2b\x14\x0d\x23\x6d\x6e\x60\x42\x45\x5b\xac\x69\xd6\xdb\x24\xb1\x9f\xff\x9e\xc4\x0f\x7f\x90\x04\xcf\x7c\x0f\xfd\x0b\x19\x6e\x04\x50\x4c\x75\xb3\x16\x52\xf3\x88\x4b\x0e\x91\x3c\x01\xe7\x5a\x7d\xaa\x13\x35\x25\x2f\x77\xfd\x89\xe8\xe0\xfa\x94\x65\xcd\x4b\x03\x53\xd2\xfd\x14\x80\x0d\xca\x2c\x60\x18\x76\x7f\xbc\x37\x0e\x90\x4f\xbb\xd6\x74\xab\x3b\x74\x18\x72\x17\x59\x11\x19\x58\x99\x24\xed\x62\x88\xae\xb2\x01\x8c\x75\x66\x8a\xf4\xa6\x20\x0c\x27\x31\x84\x60\xfa\x56\xa3\x7a\x77\x3a\x67\xf3\xc5\x8f\x9a\x3e\xf3\xbb\xd8\x85\x89\xbd\x0b\x91\xeb\x43\xba\xc5\xbf\xa0\xc3\x12\xed\x95\x07\xc8\xab\x00\x72\xf1\x5e\xef\xe7\x4d\x04\x05\x90\xdb\xfd\x25\xec\xc1\x3d\x90\xe0\x89\x01\xd7\xeb\x8d\x78\x50\x7b\xd6\xae\xcf\x09\xb2\x8e\xe0\xbd\xeb\x78\xcd\xdf\x82\xde\x4d\x9b\x9b\x7c\xca\x86\xb1\xbd\xb6\x89\x05\x77\x17\x09\x1e\x77\x0a\x76\x54\xf5\x06\x75\xe2\x22\x2e\xb8\x07\x79\xea\x4b\xd4\x41\x55\x08\x91\x6a\xc5\x69\x60\xcb\x3c\x3a\xde\xf5\x32\x31\x2a\x13\xac\xf6\x15\x9e\x46\xb5\xe9\xc1\x85\xb8\x25\xd3\x79\xc3\xa0\x14\xdf\x8f\x20\x58\x15\x08\x61\x96\x7c\x50\x8e\x0a\x48\x1b\xe2\x2a\xb3\x1a\x66\xe0\x6e\xf7\xd0\x8d\x06\xd8\x43\xa7\x1b\x2c\xb0\xdf\xaf\xa4\x46\xdb\xc1\xb4\x78\x82\x7d\x0c\xa6\xc6\x23\x14\xa0\x38\x13\x44\x33\x86\x05\xe8\x2f\xc3\x7c\x01\xd2\xa3\xcb\x8c\xaf\x01\x7e\xa2\xfc\x97\xd9\x31\xa8\x64\xc4\x58\x00\x4a\x40\x9c\x35\xa0\xd5\xc4\x9a\x1b\x6e\x48\x3e\xca\xb9\x61\x1a\x25\xc3\x5c\x08\x8e\x8e\x93\xb7\xc0\x08\x66\x5b\x94\xa4\xca\xb0\xd1\xa1\x6b\x3f\x53\xba\xdd\x08\x88\x01\x53\x59\x68\x8f\x49\x6b\x3e\x8a\x53\x67\xe0\x8d\x22\x56\x47\xcf\x9b\x26\xfa\x97\x6e\x97\x8a\x9b\xe5\x94\xad\x52\x7d\xa3\x1c\xb5\x98\x0b\x66\xfa\x22\xb0\x9e\x30\xc1\xa6\x18\x75\xca\x2a\xd0\x41\x33\x21\xd0\x64\x4f\x62\x5c\x06\x23\x51\x11\xbb\xcd\x73\x91\xbd\x6e\xad\x31\x93\x40\x1b\xb7\xad\x56\xed\x5c\xb3\xd1\xed\x8a\xd6\x69\x0b\x1f\x27\x6d\x2e\x46\xd6\x8a\x1c\xf6\x1f\x8a\x29\xd4\x52\x57\x74\x16\x36\xaf\xbb\xb2\x99\x0c\xe1\x52\x51\xf0\x66\x71\xca\xa2\xad\xfd\x0b\xb9\x97\x7b\x3d\xc6\x52\x02\xd2\xc6\x4c\x6b\x83\xd8\xaa\x1b\xa0\xe4\x73\x56\xeb\x80\xc0\x67\xa3\x98\x71\x8b\x90\x7f\xd9\x36\x62\x63\x19\x54\x9f\x45\x35\x09\x92\x1d\x95\x58\x10\x3a\x55\xb1\x5f\xfa\xa4\x46\xb5\x36\x79\xa2\x33\x01\xd3\x49\xf0\xd9\x27\x3c\x03\x29\xc7\xab\xe8\x51\xc7\x4b\x3b\x4d\x84\xf2\x5d\x00\xd9\x48\x88\x76\xf0\x82\xea\x11\x93\x9b\x2d\xf2\xed\x6a\x06\x10\x40\x92\x03\xd2\xc3\x18\xd4\xff\x31\x6b\x9c\xfa\x4b\xa5\x81\x3b\x8c\x4d\x5f\xba\xf7\xbb\xaa\xbd\xa8\xba\xa9\x19\xae\xc6\xf6\x0e\x47\x09\x7a\x2f\xe3\x83\x2c\x92\xdc\x88\x83\xdc\x01\xc5\xc9\xe9\x30\x34\x5a\xc1\x5e\x26\xe7\xd8\x29\x9c\x77\xe9\x6a\x37\xac\xef\x83\xe0\xf2\xda\xed\xe5\xf5\x12\x64\x76\x1c\xd3\x8b\x26\xb3\x9e\xf2\x5a\xfd\x93\xae\x6c\xb5\x16\xec\x2d\xc3\xe8\x9d\xfe\x64\x1a\x2a\x3e\xd0\xf3\x18\x0f\x98\x85\x38\x88\xaf\x4d\x46\x96\x74\xf3\xbc\x20\xaa\xaa\xe2\xa7\x16\xc0\x55\x67\x7f\x66\xaf\x46\x0d\xaf\xe8\x5d\xaa\xc3\x37\x89\x7e\x94\x26\x46\x73\x15\xd1\xb1\x1d\xd4\xba\x86\xb4\x61\x7b\xa5\x21\x6b\xab\x98\x3b\x6f\xec\xc5\xb6\x9a\x57\x39\x2b\x58\xea\x8d\x71\x15\xf9\x4a\x3d\x47\x66\xd2\x8f\xd7\x26\x7f\xae\x8a\x13\x7a\x58\x42\x53\x11\x3c\xde\xd3\x06\x2c\xb3\x03\xd4\x32\x19\xd2\xd3\x16\x20\xe4\x46\x9a\xcc\xa6\x40\x13\x39\x69\xfe\xa0\xa7\xda\xe4\x6e\xd9\x64\x8e\x63\x9b\xb0\xc4\x35\x8d\xdc\x16\x8b\x2e\xad\xdc\x4d\x7e\xae\x6f\x0c\xa5\x36\xf6\x1a\x41\xee\x16\x4f\x0a\x4d\xd3\x35\xc7\xc3\xad\x58\x47\x32\xfc\xa5\xf5\x52\x93\xdc\xf6\x76\x77\xf9\x7a\x36\xc6\x04\x2d\x47\xf8\x49\x95\xcb\x4e\x88\x11\xb0\xb4\x33\x86\x77\x5f\xa8\x30\xf7\xe0\xc5\xbb\x92\x09\x78\x0c\xf7\xce\x6a\x5a\x46\x63\x15\xe9\x9d\x3b\x5b\x9f\xa7\xc1\x43\xc0\x20\x50\x8d\x0d\x72\x09\x8c\x40\xe4\xe7\x54\x0d\x48\x81\xa4\x03\x0a\x99\xea\xc6\x3d\x49\xc1\x11\x1f\xeb\x36\xf9\x19\x2e\x4b\xa6\xeb\x78\xcc\xc6\x63\x6c\xf0\xbe\xd3\xcd\xe7\x3f\x49\x64\x4c\x95\x0f\xa2\xc8\xdb\xff\x8a\x3d\x4e\xec\x0e\x83\x39\x87\x7f\x49\x34\x19\x39\xea\x92\xf3\xe9\x7a\x16\x7a\x4d\x6b\x26\xf1\xdf\x94\x9d\x01\x57\x57\xd9\x16\x6e\x87\xf3\x0a\x42\x95\x01\x8f\x28\xd1\xb3\x47\xb8\xfd\x95\xbb\xa9\x08\xc2\xb0\x4a\xee\x05\x6b\x7f\x2b\xcb\x94\x4f\x00\x58\x88\x58\xff\xe0\xd6\x55\x80\x7a\xdb\xf6\x9a\xf1\x0b\x25\xd2\xca\x97\xe7\xcb\x53\x92\xa6\x3d\xb7\x31\x70\x6d\xf3\x25\x06\x50\x78\x69\xab\x37\xcb\x69\x20\x76\x63\x13\x65\x5c\x12\xba\xb1\xb7\xfb\x51\xb3\x05\xe7\xf8\x69\x2b\xa5\x7f\xbd\x8b\x93\x97\x4f\x27\x2e\x3b\x63\xfb\x69\xc2\x05\x4a\xdd\x66\x5a\xf5\xb9\xc6\x7c\xae\xf9\x0c\x23\x39\x69\xaf\x92\x21\x73\x3c\x91\xe1\x8d\xf0\x00\x7d\x35\x27\xb3\x29\xfb\xe4\x9e\x18\x1b\x20\x9c\xfc\xd5\x60\xee\xcc\x81\x46\x0b\xd2\x64\xca\xa1\xae\x0d\x70\x26\x0f\x4c\xed\x60\x85\xac\x96\xb2\x1e\xea\x53\xcf\xdf\x09\x6d\xdf\x37\xa1\xed\x3b\x9b\x98\x54\xef\xd2\xfb\x97\xdf\x33\xee\x9a\xa7\x5d\xf2\x2e\xbb\xf5\x5c\x78\x99\x78\x49\x93\x92\x86\xc2\x23\x49\xf6\xd4\x1d\x1d\x34\x23\x39\xe2\xb9\x42\x31\xc5\xbb\x43\x3b\x51\xf9\x24\x4a\x0a\x00\x2c\x68\x3b\x9f\xca\x32\x58\xb3\x68\xde\x03\xd6\x44\x0b\x67\xaf\xbf\x94\xb6\xf6\xee\xbe\x3e\x79\x53\x9f\xb2\xa3\x2f\xd9\xce\x17\xed\xe5\x97\x36\x3e\xb2\x8d\xcf\x6e\xf4\xd8\xdd\x24\x4b\xbf\xea\xdc\x60\x41\x38\xc7\xd6\x21\x90\xf1\xbf\xfe\xfe\xef\xe5\x29\xc7\x24\x2e\xb5\x63\x56\xb1\x5e\x83\x4c\xa5\xab\xcb\xdf\xc4\x67\x88\xdf\xd2\xc8\x06\xb5\x5b\x91\x35\x85\xa9\x49\xf9\xef\xd3\xa8\x35\x39\x19\x69\x3f\xa8\xda\x2c\xea\x2d\xcf\xd4\xc9\xbe\xeb\x94\xbd\x9b\xec\x78\xa5\xe7\x67\xed\x93\x66\x58\xe8\xa0\xba\x6f\x75\xfc\x55\x3e\xa9\x24\x74\x17\xfb\xa6\x4c\x6f\x4a\xfd\x50\x70\xc3\x76\xae\xf5\x18\xe5\x05\xda\x45\x15\x8a\x69\xe5\x38\x79\x69\xbb\x1a\x73\x52\xe3\x81\xc9\x31\x1d\x76\x54\x83\x1a\x8b\x5c\xd5\x66\x40\x90\x20\xba\xcc\x5d\xed\x93\x52\x56\xca\x81\x41\x2c\xc5\x7f\x11\xea\xeb\xb9\x9b\x2d\x03\x26\x1c\xda\x8a\x2e\x67\x9f\xe6\xe5\xf7\x1c\x1b\xeb\x5a\x6e\x67\x6b\x01\x6c\x46\x2b\x79\xe0\x47\xcd\x34\x6c\xbc\x1e\x8b\xbc\x01\x50\x11\x2c\x9d\x45\x3d\x75\xe9\x4c\x60\xd5\x05\x53\xbf\x84\x90\x97\x26\x98\x4d\xad\xd8\x30\xee\xfd\xb5\x56\xf3\x76\xa5\xe9\x1a\x55\x78\xae\x34\x93\x79\x53\xb3\x6d\xce\x48\x9a\xe5\x99\x87\x52\x95\xaa\xca\xe7\x1f\x55\xe9\xdf\x15\xbf\xc2\x93\x53\x57\x3e\x4f\x16\x85\xb3\x4e\x5f\xd3\xa5\xed\x14\x11\x37\xf1\x74\x37\x4d\x76\x2e\x11\x48\xab\x1c\x24\xe7\x4a\xc2\x45\xc2\x65\xa1\x60\x5a\x2a\xd7\xae\xb9\xc7\x40\xef\xea\xe4\xff\xa7\x7f\x0d\xf0\x97\x7c\x1f\xf0\x9f\xea\x49\xc1\xbf\xf0\x01\xc2\x9f\xe5\xe1\xc0\xdf\xcf\x0e\x7e\x80\x54\x7c\xd7\x57\x0b\xbd\x1c\x3c\x8a\xd2\x4d\xa3\x69\x32\x3b\x12\xa8\xfe\x3c\x75\x09\xd3\x76\xd3\x9b\x2c\x62\x19\x79\xd0\xd4\x89\x30\x06\x9c\xce\xd4\x62\x61\x30\x7e\x59\x5c\xba\xea\xdb\xbe\xcb\xc4\xac\x7d\xb1\xf1\x16\x9a\xb9\xeb\xcd\x6c\x4f\xb9\xac\x69\x3d\xb8\x07\x4a\x6a\x0d\x20\x33\xbc\xff\xb5\xd5\x16\x6d\x83\x73\xc1\x0c\xe1\xbd\x6c\x87\x6b\xe0\x2c\x1f\xd3\x2a\xc3\x59\x3e\x92\xf5\xf6\xb3\x15\x20\xca\x47\xba\xe2\xfe\xc4\x83\x5c\x65\x9b\x5a\x03\xe4\xd8\xd8\xd7\xd9\x75\x44\xc9\xf0\x49\xd8\x68\xee\xd9\x49\xef\x82\x41\x10\xc5\xe7\x27\xc1\xa1\xfd\x7c\xf5\x0f\xcd\xbe\xba\x31\x67\xb9\x07\xfc\x7d\x4f\xac\x76\x4f\xcc\xba\x54\x1a\xce\x46\x71\x6b\xea\x5f\xf7\xc3\x15\x3f\x73\xe7\x3f\xe2\x87\x21\xaa\xbe\xc4\x03\x43\x00\x6f\x3d\x50\xab\x79\x5d\xc8\x40\xaf\xe1\x6f\xd1\x83\xcd\x79\x20\xda\x0b\x67\x56\xc5\xb7\x66\x3d\x7f\x9a\x55\x7c\x68\xde\xc5\x6f\xe6\x7d\x7c\x65\x58\xff\x18\x2e\xbe\x52\x4f\x74\x8e\x48\xd6\x6e\x10\x41\xcb\x56\x9b\x76\xf6\xaa\x69\x97\x1d\x9f\x92\xe2\x90\x40\xbe\x59\xd1\x67\xe6\xeb\xa4\x79\x96\x75\xb2\xa8\xf5\xcc\x99\x1d\x84\x36\x7d\x4a\xc5\xe0\xba\xb9\x33\xe7\xce\x43\xc7\x1a\x2c\x9e\x8a\xa9\xc6\xdd\x81\xae\x96\x02\x58\x75\x4e\x96\x98\x33\xa5\x10\x2f\xc2\x40\x82\xa0\x83\xe8\xd4\xd1\x16\xee\x58\x54\x54\x8f\x9b\xb9\xeb\x41\x95\xd0\x73\xe9\x39\x9b\x6c\x7d\xbe\x15\xde\x44\x8b\xee\xab\xda\x7b\x95\x36\xb7\x1e\xb9\x58\xb9\x39\x44\x67\xee\x03\x9b\x7d\xcf\x94\x74\xd1\x0d\x61\xd0\xcd\x81\x2b\x6a\x43\x62\xac\xd2\xe9\x86\xe7\xa6\x57\x5d\x30\x7f\x5c\x5f\x86\x6e\x80\xd8\xb6\x32\xbc\xda\xbb\xf7\x0b\x33\x0e\xdb\xf4\xf8\x77\xf7\x4a\xa3\x6a\xa2\x5d\x5d\x2b\xf3\x25\x4b\x3c\xcb\x75\xc0\xc2\x70\xe6\x3e\x48\xfb\x4e\xe2\xff\xfa\xf3\x07\xfd\x03\xef\xa1\x59\x63\x70\x4a\x49\x98\x81\xdf\x9f\xb2\x82\x54\xd3\xae\x35\x89\xa3\xc1\x14\xa8\xfc\x89\xe4\xa1\x97\x36\x79\xc0\xd3\x01\xe6\x93\x77\x77\xb8\xba\x31\xaa\x24\xcf\xdf\xf4\xc7\xec\x2c\x7a\xe9\x30\xc0\x17\x78\x5b\xbd\xa2\xf9\x64\xd8\xdc\x04\xcd\xe1\x85\x9d\x3d\xfc\x51\xc2\xfb\x75\x44\xb2\x81\xae\xa2\xc7\x0c\xde\x3e\xd3\x70\x0c\xdf\xc9\x07\x09\x3c\xba\x63\xbb\x6c\xa6\x86\x53\x5e\x56\x05\x8a\x0e\x7a\x1d\x6f\xb6\x0e\xcb\x6e\xa4\xd9\x2e\x4a\x21\x58\xbb\x5e\x66\xbb\xaf\xa8\xd2\x0f\x59\x8c\xb4\xb8\xaa\x8f\x64\xbc\x2f\x7c\xf3\x58\x92\x28\x0c\xfb\xac\x48\xbe\x65\xc7\x2a\x4a\xf5\xaf\x2f\x00\x53\xff\x8a\xde\x5a\x6f\xfb\x36\x34\xfc\xe3\x09\x80\xe3\x2a\x4d\xc8\x77\x74\xce\xb3\x12\xc5\x7a\x1e\x55\x7b\x28\xa9\x83\x3c\x10\x19\xc3\xa6\x4e\x69\xf0\x06\x46\x28\x9b\xef\x78\xd2\xf5\x12\x95\x65\x93\x7f\x94\x69\xd4\x2f\x04\xf8\x7d\x05\x57\xd4\xa3\x94\x64\x63\x35\x3a\x03\x00\xa2\xec\xb2\x34\x25\xf1\x54\xef\x54\x50\xa8\x22\x12\x37\xff\xa6\x8a\xf1\xdf\x65\x37\xb2\x70\x27\x49\x4c\x9d\xd0\xba\x4f\x6a\xa2\x0a\x4e\x20\x78\xa7\x41\x87\xec\x9d\x52\x11\xf1\x47\xab\x8c\x8f\xbf\x03\x42\x3a\x11\x75\xbd\xe9\x14\xae\x5b\xd6\x74\xa6\xbf\x29\xb5\xc9\xaf\xce\x06\xd1\xa7\xed\xdd\xf5\xdd\xf5\x04\xca\x72\xd5\x3b\x74\xe5\xca\x44\x54\x1d\xa9\x30\x3e\x62\x0e\x80\x94\xa2\x2a\xb5\x04\x83\x9a\x3e\x01\xa4\x5d\x4d\x7e\xf8\x45\x89\x8f\xff\x16\x07\xd2\x16\x4e\xc1\xa4\x09\x90\x93\x7f\x84\xf8\x0b\x49\xaf\x42\xf8\x89\x64\x9f\x47\x74\x96\xe4\x2d\xc1\x85\xc9\xf1\x05\xc4\x66\x72\xa1\x28\x50\x9b\xa9\xdd\x25\x37\x53\x24\xa4\xf7\x60\xb9\xc2\x38\x99\xf6\x72\x8a\x8f\x57\xea\x8f\x67\x06\xcd\x71\xb3\x86\xe8\x71\xdc\x50\x3d\x8e\x2f\x92\x2c\x5f\x33\xf6\x6a\xe1\xfe\xc0\x84\x71\x0e\xd8\x07\xce\xb5\x26\xde\x9f\x61\x6d\xc2\x3e\x01\x6f\x6a\x77\x69\x54\x96\x0f\x57\x5a\x1c\x7f\x8a\x2b\xee\x13\x9b\x59\x49\xd4\xc3\xac\x7d\x61\x61\x9f\x4a\x84\x8d\xe2\xb8\x40\x65\x49\xc0\xaf\x02\x91\x4e\x15\xa6\xe5\x22\xa8\xeb\xd0\x7f\xc6\x66\x39\xb7\xab\x66\x77\x9d\x09\x00\x6a\x0a\x4b\xea\x8d\x7a\x1e\xe0\x4f\x22\x45\x89\xa1\x40\x2f\x67\x9a\xa8\x6d\x57\x33\x52\x6e\xcf\x51\x45\xa5\x05\x3b\x58\x85\xfa\x3c\x51\xd4\x57\xb4\x3a\xfd\xc4\x3d\xcc\x59\xd1\x4b\xfb\x54\x59\x29\xb3\xfb\x98\xbe\x52\x66\x77\x55\xf3\xc4\x5c\x00\x33\x9b\x51\xce\x1a\x69\x3e\xc6\x3a\x22\x9e\xa5\x52\x43\xc6\xae\xaa\x20\x3b\x8b\x6c\x2d\xb0\x22\xa5\x63\x2d\xd8\xd2\x2d\xe1\xdd\x3b\x50\xda\xc5\x56\xed\x65\x70\x67\x1b\xed\xe9\x7d\x77\xa2\xd1\xee\xeb\x35\xb7\x74\x5e\x62\xe1\x0a\x58\x13\xd5\x58\xba\x20\xde\xa9\x17\xe1\xb9\xfe\x7d\xba\x92\x1f\xee\x57\xee\x6f\x8e\x32\xa2\xba\x69\x4e\x69\x30\x43\x75\x19\x87\x3a\x59\xa3\x99\x00\x72\x8a\xa2\xa3\x02\x56\x49\xff\x51\x00\xb4\x78\xd9\x2a\x29\x56\x53\x4f\x42\x52\x3d\x76\xc1\xec\x8a\x7b\xe8\xcc\xcb\x3b\xf5\x22\x12\x05\xef\xd4\x95\x54\x14\xac\xdd\x9f\xa2\xb6\xb5\xee\x21\x78\x2a\xb4\x75\x74\x33\x0a\x65\x6c\xb1\x74\x79\xe9\x7d\x48\x20\xeb\xe5\xbd\x6d\x01\xb2\x7e\x97\x69\x52\x8b\xa0\x0e\x6a\x4e\x13\x21\xaf\x37\x1f\xef\xab\x91\xf5\xba\x9b\xb3\x25\x0b\xa5\x9e\xb4\x74\xc6\x66\xdb\x3d\x72\x4c\xdd\x59\x65\xed\xa7\x6c\xa3\x3d\x18\x4a\x7b\x66\xb7\x95\xca\xf6\x36\xa8\x4f\xae\x66\x3b\x50\xea\xe5\x1d\xec\x07\x4a\xfd\xae\x60\x43\x18\xee\x67\x75\x3b\xc2\x70\x77\x8a\xbb\xdb\x82\x93\xc4\x60\x53\xb5\x7d\xab\x3f\xd9\x22\xc5\x69\x5d\xf9\xa3\xd4\xe7\xd8\x4e\xa9\x04\x84\xc7\x6a\xf1\x7c\xcb\xfb\x54\x59\x99\x2b\xd1\x68\xb9\x46\xbe\x04\x76\x67\x0c\xf3\x29\xd6\xdd\x21\x7e\x14\x8b\x4d\xb4\x64\x29\x03\xfa\x61\xac\x26\xd7\xce\x67\xeb\x1f\x73\x3a\xfb\x51\xf3\x35\xdb\x8c\x37\x03\xa4\x50\xdd\x4c\xfb\x7a\xe1\x42\xd0\x9c\xce\xb9\x0e\x78\x9e\xd6\x53\xb6\xcc\xc5\x9d\xfd\x78\x56\x7f\x1f\xb9\xaa\xd2\xd9\xea\x3c\xf7\x3e\xb2\x55\xd2\x99\xca\x4c\xbd\x2f\x31\xc7\x31\x58\x9d\xc2\xe3\x5d\x2a\x1d\x32\xdf\xb9\xdf\xc1\x63\xe8\x3b\xf4\xbd\x9c\xd5\xe6\x28\xd3\x4b\x99\x6b\x7a\x9f\x33\xd8\x69\xf1\xd9\xfb\x07\x10\xf3\xdd\x37\xdf\xf6\xec\xb2\x1a\xa4\x1f\x86\xf3\x8c\x39\x97\x18\x40\x66\xcc\xa4\x18\xd2\x3b\xec\x91\xcc\xd5\xcd\xba\xc6\xc1\xc1\xae\xde\xdb\x42\x38\xd8\xf9\x32\x33\xe1\x72\xd0\x13\x85\xf4\x38\xf8\x95\xe7\xe8\x7d\xad\x86\xe2\x3e\xe7\x98\x0e\xe5\x57\x19\xc3\x55\x66\x18\x11\x85\x70\xde\x9f\x2e\x93\x8d\x95\x83\x40\xa6\x58\x2c\xc5\x80\x94\xcc\x96\x73\x9c\x31\x84\x6d\x54\xec\x9d\xe3\x37\xdb\xab\x19\x3d\xd5\xbb\x7a\x07\xcb\xa7\x7a\xe7\x2b\x98\x3f\x15\x3a\x5b\xdd\x06\xaa\xd0\xa7\xa2\x21\x74\xa9\xb3\xc3\x78\xfb\xb9\x26\xd1\x1f\x70\xe4\x6d\x50\x5b\x38\xe4\x1a\xce\x7b\xcb\x38\xc5\xfb\x4c\x69\xc3\xc5\x9a\x96\x10\xce\x3b\x4c\xcc\x18\xc8\x55\x4c\xd7\xaa\x9d\x2c\x36\x5e\xaa\x76\xb4\xa2\xd5\x6d\x71\x97\x33\xb5\xbb\x55\xfb\x9d\xa8\xfa\x8d\xf6\xfd\xa3\x55\xb5\x51\x84\xe6\x1f\x9e\x14\xd6\xdc\xe8\xcd\xcc\xda\xc3\x59\xc7\x51\x6f\x51\xbf\xab\xf8\xd3\xcd\xc3\x60\x1d\x9d\x5c\x55\x96\x2e\x04\xf1\xfe\xf4\x58\xe5\xd8\xa0\x60\x6a\x5a\xae\xf3\x4f\xe8\x64\xd9\x99\x40\xa5\xa3\x99\x67\x86\xf7\xb0\xc9\x29\xc0\x9c\x77\xe6\x98\x2a\x76\x45\x77\xe3\xeb\x73\x92\xb8\xcf\x69\x6e\x86\xeb\xf5\x3b\xd7\x1b\x70\x05\x0c\x66\x1f\x1c\xfe\xd5\xdb\xe9\x0a\x36\xe1\xa9\x5d\xcc\x3d\xdb\x8c\xf5\xa3\xa8\xe8\x4b\xb8\x44\xb4\x60\x66\x5b\xbd\xd4\xfb\x58\x0f\x5b\x1e\xbf\x29\x87\xf1\x91\x3e\x56\xf7\x18\x59\xdc\xdf\x42\xa2\x8d\x77\xa0\xa4\xc8\xaf\xda\xcb\xa0\xda\xbe\xb8\xa7\x89\x6b\x7c\xa4\xbf\xae\x7c\x7f\xaf\x65\x32\xf1\x0c\x39\x0d\xda\xbb\x2d\x17\xa1\x21\xf7\xbd\x48\x34\xc7\x12\x3a\x03\xe4\x0f\x24\xd6\xea\x9a\xf8\x3b\x60\xb0\x3a\x85\x57\xba\xfa\x7f\xe7\x7e\x97\xc8\xa8\x1f\xa0\x99\xc8\x30\x98\x63\x48\x5e\x85\xc3\xa6\x77\x3c\x97\xb1\xa6\xf7\xb4\x88\x9f\x96\x75\x37\x8b\x8d\x16\x9b\xa1\x7e\x14\xf7\xac\x2e\xe9\x67\x3a\x38\x8c\x82\x7b\x37\x44\xe7\x32\xf1\x4c\xd7\x86\x69\xe0\x56\xd8\xbb\xde\xcd\x9f\x61\xbc\xbf\xf7\x3e\x3f\x8e\x63\xb0\xb6\x7f\xc0\x40\x8f\xef\x6b\x79\x1e\xe8\x78\x8e\x55\x72\xc4\xf6\xa0\x50\xef\x1d\x48\x38\xc3\x9e\x28\xbf\x4e\x99\x6a\x34\x1c\x87\x34\xc5\x32\x38\x00\x4d\xc9\xfc\x37\xfb\x9a\x48\xde\x50\xc5\x90\x37\xe9\xaa\x48\x6a\xb3\x53\x9a\xa0\x21\x88\x42\x8b\xdc\x62\xa8\x72\xef\x98\xf9\xa0\x79\x43\xda\x6c\x38\xcb\x5a\x73\x16\xaa\xc9\x50\x58\xfd\x66\xbd\x29\x15\x41\x5d\x67\x5a\x45\x90\x57\x9c\x5a\x0e\xfc\xc2\xe9\x9d\xa3\x3a\xca\x21\x4c\x9f\x66\xb1\xdd\x79\xb1\xdf\xcf\xc4\xfe\xde\xc1\xf9\x67\x22\x06\x2b\x78\x00\xa9\xf6\x38\xe7\xf4\xb6\x4a\xc7\x8a\x26\xfd\x55\x6e\x4f\xdf\xe1\xb5\x8c\x22\x48\x35\x63\xfc\xf8\x7c\xaf\x67\xda\x5e\x1e\xd3\x49\x1d\xf0\x8a\xe6\xb3\x1f\x17\xa6\x48\x01\x81\x85\x47\xb1\x55\x43\x15\x4d\xea\x63\x81\x0f\xc4\xa4\x7e\x96\x7a\xf0\xa9\x75\xb6\xe2\x41\x62\x28\x84\xd0\x3b\x3c\x3e\x53\x02\xb9\xde\xf1\x62\x59\x64\xa2\x49\x40\x57\x38\x74\xcc\x89\x4e\xb4\xc6\x9b\x3d\x25\x18\x0b\x4e\x25\xab\x5d\x81\xad\x7a\xcb\xb5\x6a\xe4\xa4\xf9\x7d\x4c\x73\x6a\x98\xdf\xcf\x8c\xe8\x49\x33\x3a\x5b\xa6\xdc\xac\x6d\xaa\x78\x87\xbb\xca\xc5\x61\x92\xc6\xe1\x2e\xf3\x37\x98\xe7\x46\x3d\x02\x6c\xed\x89\x59\x65\x88\xeb\x4c\xa8\x10\x98\x92\x42\x3c\x55\x1b\x9b\xa2\xca\xce\x85\xbd\x92\xe1\x78\x6e\xf7\xaa\x0a\xf5\x5c\xf8\x93\xf4\xea\xf5\x3a\x59\x49\xcf\x9e\x8b\xd0\x74\x1b\xe3\xea\x3d\x0d\xef\xda\xef\xda\x9d\x78\x6f\x5f\xb9\xcb\x1f\xb0\x44\x46\xcf\x4e\x33\x2c\x12\x73\x8f\x50\x0b\xba\x9a\x73\x92\x5a\xd0\xdd\xec\x03\xd5\x82\x3e\x97\x99\x5e\xe6\x74\x3c\xe9\x40\x37\xd7\x72\x35\xab\xe5\x94\xb3\xd8\x74\xf0\xea\x47\xb2\x05\xb0\x95\x4e\x66\x73\xe0\x0f\x1f\xd0\x66\x40\x5c\x4f\x32\x0c\x1f\xd7\x96\xda\x91\x26\x9c\x8f\xd6\xea\x4a\xf1\x98\xb4\x56\x77\x53\x4e\x4b\x6b\xf5\x39\xd9\xcd\x7c\x71\xc7\x63\xa7\xb5\x77\xb2\x37\x2e\x05\x3b\x72\xd0\x9a\x0a\x7e\xec\x30\xd2\x50\x69\xee\x6e\xdb\x03\xb0\x92\x96\xde\x83\x3b\x67\x6f\xee\x01\x99\xbd\xe3\x2a\x40\x5a\x89\x81\x7a\x3d\xcd\xd4\x5b\xe7\xc1\x11\x2b\xa4\xea\xb0\x56\x1d\xe2\x12\xae\x79\xa7\xe5\xcd\x4b\x15\xe6\xf7\x14\x5d\xa2\xd1\x96\x95\x35\x84\x5e\x0b\xa5\x7d\xbf\x6d\x35\xbc\x9b\x37\xf5\x06\x37\x56\xb1\x1e\x37\x61\xbb\x1c\x06\x30\xff\x42\x78\x18\xae\xe2\xe6\x3a\x0c\x64\xca\x96\x39\x15\xd2\xfc\xcb\xd9\xe1\x9e\x26\x6f\xb9\xb3\xc0\x2d\x99\xa1\xb9\xca\xbe\x6a\x07\x93\x2a\x0f\x6f\xbc\x75\xe9\xcc\x6d\xb2\xdb\x7c\x9d\x4d\xb2\x0b\x75\xc6\x16\xd9\x05\x31\x77\x83\x1c\x87\xb3\x8e\x00\xee\xf6\x33\x6f\x73\x9c\x05\x45\xb8\x35\x2a\x43\x5a\x71\x70\xf3\xf9\xe4\x7d\x36\xc5\x06\xfc\x94\x55\xc8\x2d\xb7\xfa\x97\xf2\x86\xd8\xad\xaf\xb2\x1d\x36\x6d\x06\x37\xc3\xba\xd6\xd0\x56\x28\xdc\xeb\xd5\x37\xc2\xc1\xe6\xb3\xb7\xc1\x41\xa8\x6a\x9b\xe0\x20\x88\x09\x5b\xe0\x44\x38\xb3\xc5\xfe\x60\x3f\x53\xb7\xbf\x39\xc0\xe6\xcf\xcb\x6a\x5b\x9f\x18\xfc\xc8\xe1\x57\x5d\x59\xbd\x1c\xa2\xe2\x39\x39\xea\x90\x3c\x5d\x9a\x8b\xbc\xc9\x43\x4e\x12\xa1\x0a\xb3\x91\x6b\xd3\xd2\x96\xe1\x01\x0f\x66\xeb\x50\x88\xcf\xb7\x34\x8e\x4b\x0f\xc4\x00\x4f\x4d\xbe\x95\xd7\x66\x1a\xfb\xdb\x96\xed\x24\x73\x5b\x11\xfc\xe2\xe6\xcd\x65\x32\xd4\xcb\x15\x17\xf9\xed\xe2\x64\x6d\x45\x0e\x6a\x58\x45\x91\xb7\x53\xd0\x4b\x66\xb8\xf5\x09\x95\x84\x85\x1e\xb6\x73\x9c\x62\xdf\xc5\x3e\xa5\xae\x26\xab\x0a\x88\x61\xe9\x60\xfe\x97\xe4\x90\x67\x45\x15\x1d\xab\xef\xf2\x69\x33\x9a\x1d\x88\x3b\x4c\x33\xfa\x40\x93\x64\xf9\x29\x45\x67\x25\x48\x77\x84\x2c\x69\xd4\x50\x65\xbb\x8d\x9e\x2a\x54\x70\x5d\xc8\x6b\xb5\x7d\x4b\xeb\x74\x32\x3f\xdf\xee\xb2\x63\x85\x8e\xb5\x48\xdc\x95\x5d\x41\x78\x75\x4b\x49\x53\x24\xcf\xfb\x6a\x6b\x38\xe8\xf0\x9d\x5d\xb0\xdb\xed\x23\x7a\xca\x0a\xc4\xac\xda\xfa\xd3\x65\x97\xa5\x59\xb1\x4d\x8e\x7b\x54\x24\xd5\x2d\xf9\x55\x3c\x3f\xfe\x44\xfa\xaa\xb2\x23\xd2\x9f\x8b\xe8\x4d\xf7\x4c\xf3\xaa\x15\xb5\x2a\xa9\xc2\xab\xa5\x29\xd6\x39\x08\x2a\x52\x8e\xb6\x98\xce\xcc\xd0\xb0\xa1\xfa\x31\x3b\xa2\x09\x23\x35\xf2\xa8\x2c\x93\xe3\x33\x4b\xe8\xd1\xd6\x7b\x14\xc5\xa8\xd0\xda\xb6\x71\xaf\xed\xac\xc7\xc0\x03\xb8\x4c\x80\xa7\x80\x9d\x92\x63\xd9\x00\x36\x03\xed\x87\x7a\x9f\x3e\xb7\x42\x24\x94\xc1\xc8\x71\xb9\x48\xd6\x0a\x42\xc7\xc9\x8b\xc5\x78\x8d\x8a\xe3\x5c\x16\x6a\xda\xae\xc4\x42\x03\xb8\xcc\x60\xa1\x01\xec\x94\x58\x68\x00\x1b\x05\x16\x12\xf5\x3e\x83\x85\x44\x48\x4c\x66\xa1\x3e\x2e\x62\x16\xca\x8a\xe8\xf8\x8c\xa6\xf3\xd0\xae\x48\xaa\x64\x17\xa5\xb3\x98\xa8\x6d\xbc\x12\x17\x0d\x61\x33\x83\x8d\x86\xf0\x53\xe2\xa3\x21\x7c\x14\x18\x49\xd8\xff\x0c\x4e\x12\xa2\x31\x99\x95\x04\xd8\x88\x79\xa9\x40\xf1\x74\x46\x42\x87\xbc\x7a\x9b\xc5\x45\xb4\xe5\x4a\x2c\x24\xc5\x63\x06\xff\x48\x31\x53\x62\x1e\x29\x26\x0a\x9c\xd3\xef\x79\x06\xdb\xf4\x11\x98\xcc\x33\x5d\x3c\x64\xfb\x97\xba\xae\x47\x21\xff\x5e\xa0\xf4\xe7\x03\x7a\x58\x38\xef\x0a\xd0\xc6\xa9\x2d\x6c\x3d\x95\x54\x02\x20\x62\x62\x3d\xa6\xa7\x46\x4e\x47\x79\xae\xbf\x24\xe8\xf5\x2e\x4e\x5e\xb4\xa7\xac\x38\x40\x07\xc6\x53\x92\x56\xa8\xd0\x1f\xa3\xe2\x4a\xfb\xbd\xc8\x52\xf4\x73\x11\xc5\x49\xf6\x5c\x64\xa7\xfc\x41\x4b\xa3\x47\x94\xde\xa1\xc3\xdd\x2e\x8b\xd1\x8d\x71\xc8\xe2\x28\xd5\xe3\x24\x4a\xb3\x67\x5a\x3b\xce\x76\xa7\x03\x3a\x56\x0f\x9a\x51\xbd\xe5\x48\xc7\x7a\xc8\x6b\x56\xc4\x93\x1a\x95\x08\x0f\x7d\x52\x93\x0a\x9d\x55\x1b\x2c\x1b\x16\x26\x95\xf6\x78\xaa\xaa\xec\xf8\x49\xad\x45\xae\x91\x4a\x59\x12\xef\xe8\xd0\xba\x3d\x92\x21\x64\xcf\xcf\x29\x6a\x3e\x1e\xa2\xe4\x28\x23\x22\x53\xd6\xa1\x15\x53\xc2\x91\x04\xbe\x8b\x70\x87\x02\x82\xe2\xe5\x31\x2b\x62\x54\x6c\xad\xfc\xac\x95\x59\x9a\xc4\xe2\xe3\xd5\x63\x11\x1d\x63\xdd\xc7\x6c\x74\xfb\x18\xed\xbe\x62\x22\x1e\x63\x5d\xbe\x3c\x4d\x0f\xaa\x02\xf0\x81\x6a\x36\x40\xe4\x8f\x92\xfa\x23\x5e\x91\xb7\x79\x14\xc7\xc9\xf1\x79\x6b\x6a\x6e\x7e\xfe\xfe\x7b\x1c\x55\x91\x5e\x25\x79\xfe\xa6\x17\x59\x56\x3d\x5c\x0e\xd1\x99\x18\xd7\xb6\xbb\x28\xdd\xfd\x64\x99\xe6\xcb\xab\xa6\x6b\x96\x99\x9f\xaf\xbe\x1b\xa4\xe6\x63\x76\xbe\x64\xa7\x0a\x43\xdd\x9a\xb7\x55\x11\x1d\xcb\x04\x2f\x2f\x3d\x2f\xb2\x1c\x15\xd5\xdb\x16\xbe\x61\x1a\xdd\xbc\x24\x65\xf2\x98\xa4\x49\xf5\x76\x93\xe5\xd1\x2e\xa9\xde\x14\x47\x6a\x32\x23\xc5\x1c\x76\x2a\xe9\x21\x38\x46\xbb\xac\xfe\xa4\x5b\xa6\x79\x45\x47\x11\x1d\x93\x43\x84\xd1\xf8\xf9\x29\x8a\xd1\x03\xf9\x58\x56\x51\x85\x7e\xde\x27\x71\x8c\x8e\x0f\x2c\xfa\x04\x97\xad\x49\x1b\x27\x47\x54\x54\x49\xc4\xb5\x02\xd4\x53\xc4\x36\x63\xc6\x5a\x25\x87\xe4\xf8\xac\x3f\x9d\x8e\x20\x5a\xb6\xbb\xd3\x63\xb2\xd3\x1f\xd1\xb7\x04\x15\x3f\x19\x9e\x7b\x63\x19\xde\x8d\xe1\x04\x37\x96\x61\x59\x2c\xe9\x34\xfa\x67\x54\x14\xd9\xeb\x45\xd7\xcb\xe4\x1b\xda\x7a\xf9\x59\x56\x85\x11\x44\xc4\x16\xf0\xe1\xc3\x6d\x9e\x11\x2c\xb6\xd1\x63\x99\xa5\xa7\x0a\xd1\x61\xe4\x69\xb4\x43\x78\xad\xfc\xf7\x9f\xab\x2c\x67\x30\xbf\xe3\x3a\x7d\xcc\xaa\x2a\x3b\x34\x83\x57\x6b\xd5\xe0\x41\xac\x30\xb7\x14\x08\xb0\x89\x99\x9f\x35\x5d\x23\xf3\x83\xc7\x73\x75\x75\xdb\xb0\x80\x9e\x15\xc9\x73\x72\xdc\xee\xd0\xb1\x42\x85\x56\x65\x79\xbf\x5b\x02\x4b\x8a\x6f\x95\xe5\x22\x64\x87\x5b\x75\xf1\xc5\x40\xa6\x22\x4b\x7a\xe8\xf7\x8c\x41\x4a\xb1\x25\xa6\x18\x01\xbe\x43\xad\x1a\x6c\x49\xeb\xa9\x88\x62\xd0\xfd\x0e\x01\x96\x14\x4f\x42\x97\x89\xad\x78\xaa\x4e\x45\x13\x40\xd7\x52\x67\x8f\x0e\xe8\x8f\x9f\xcb\xff\x75\x8a\x0a\xa4\x63\x75\xe7\x41\xb8\x34\xac\x20\x3f\xdf\x76\x7b\xfb\x89\xe9\xee\x1f\x9a\x7d\x75\xc5\x18\x05\xd5\xc0\x37\x03\x99\x20\x8e\x58\xc1\x98\x9f\xb5\x4f\xfc\xa0\xf7\xa8\x9d\x3a\x41\x31\xdd\x12\x58\x21\x46\xc5\x1b\x16\x62\xe3\x42\xdd\x01\x6d\x43\x75\x70\xc4\x9a\xd8\x93\x13\x84\x90\x56\x2b\xfa\xfb\x80\x84\x32\xa1\x16\x19\x3a\xde\x08\x26\xb6\xd5\x8c\xe4\x88\x79\x01\xc5\x7a\x04\xb2\x92\xee\x8e\x3a\x81\x09\x56\xdd\x5a\xc4\x9b\x2a\xf3\x28\xe9\x45\x38\xb9\xd2\x9e\x04\x9b\x89\xcd\xcc\x03\x6d\x01\x0c\xab\xd8\x04\xa4\xd4\x5a\xf8\x93\xf9\x1b\x96\xb1\x13\x7a\xa0\xa2\x12\x24\xe9\xd4\x39\xa4\x6d\xa5\xd3\x58\x65\xf9\x0a\x73\xd8\xf4\x32\x30\x8d\xdd\x9e\xc6\x27\x64\xd2\x04\xd6\xdb\xe2\x8a\xf8\x93\x69\x1c\xd8\x7a\x98\x5d\x9f\xeb\xab\xca\xb2\xb4\x4a\x5a\xb6\xa0\x9b\xff\xa5\xd6\xdf\x2c\x3b\x3f\xdf\xb6\xca\x9a\x6d\xbb\xf9\xb9\x55\x0b\x0a\x94\x46\x55\xf2\x82\x6e\xbf\xe9\xc9\x31\x46\xe7\xad\x35\xd6\x8f\x9a\x18\xdc\x80\x18\x1c\x11\x93\xaa\x43\xea\x2a\x40\x03\x70\x37\x5d\xf1\xcb\x90\x50\xbb\xd6\x6c\x5e\xf8\x76\x0b\x27\x21\xd4\xe5\x39\x82\x14\x45\x08\x6f\x6b\x79\x54\xa0\x63\xd5\x30\x4d\x59\xbd\xa5\x68\x0b\x4a\xfe\x58\x3f\xc2\x75\x2f\xde\x5d\x29\x70\x32\x62\x76\x3c\xec\xdf\x26\xcb\xe8\xf5\x6d\x4e\x52\x25\x51\x3a\x19\x13\xca\xbd\x0a\xc8\x98\x9a\x04\x9d\x8e\xe4\x5c\x86\x0f\xa8\x4a\x13\x49\x33\x8a\x19\x88\x8e\x65\x78\x11\xdd\x68\xc1\x9c\x09\xe7\x8f\x08\xa9\x0e\x66\xcd\x4d\x36\x5e\xf7\xed\x6d\xe4\x31\xab\x92\x1d\x32\xa2\x34\xcd\x5e\x6f\x46\x2a\xc5\xe8\xf8\x36\x56\x27\x47\xc5\x21\x01\x2b\x4d\x79\x53\x7f\x43\x45\x91\x15\xcd\xaf\x7d\xf2\xbc\x4f\x31\x86\xcd\x17\xbc\x11\x34\x3f\xf2\x2c\x4d\x76\x6f\xfa\x21\x3a\x46\xcf\x40\xa5\xa6\xa4\x3c\xed\x76\xa8\x6c\xc1\x52\x33\xf8\x45\xe9\x54\x37\xa6\x2f\xc9\x85\x45\x18\x86\x8c\x0d\x6b\x88\x7e\xda\x53\x96\x61\xb5\xf4\x5a\x85\x90\xca\x95\x19\x8a\x32\x6d\x58\xd2\xf6\x3f\x37\x34\xee\x17\x61\x62\xf7\xbf\xf6\xa8\xde\xaf\x42\xc9\xdf\x2f\xa8\xaf\x23\xea\x82\xcb\x53\x76\xac\xf4\x57\x22\x41\x29\x35\xdf\xf2\x8c\x7e\xd1\x1f\xb3\x34\x56\xa3\x67\xb7\x6b\x85\x4d\x05\xa1\xa3\x92\x55\xa3\x7f\xb7\x36\x38\xb1\xd4\x9e\xd7\x27\x46\x5d\x30\x74\x87\x17\xa8\xf4\x23\x5a\x37\x78\xaa\x2e\x43\xe3\x00\xb3\xa1\xa5\x64\xef\x81\xaa\xa6\x05\x98\x48\x17\x62\x8f\x0b\x14\x4f\x33\x6a\x66\x24\x67\x22\x1d\xfa\x54\x07\xde\x1d\x26\x39\x8c\x73\x63\xb2\xe3\xec\xc8\x09\x61\xb3\x37\x84\xe7\x59\x91\x96\xb4\x32\x0c\xbb\xdb\xcb\x08\x7a\xb4\xa9\x12\x4b\x10\x71\xcb\x2e\xf4\xd1\xe9\x28\x50\xac\x30\x1b\xfd\xbb\x9c\x21\x39\xd5\x9b\x05\x22\x73\x86\xc7\xd9\xef\x62\x8f\xa2\xb4\xda\x13\x07\x2a\xda\x0b\xbd\x0a\x37\xb8\xa2\xec\x54\xe5\xa7\xfe\xfd\xc8\xd0\xf2\x6c\x2b\xf3\xab\x73\xfa\x05\xfb\x38\x53\xf6\xfa\xc2\x3c\xa9\x6e\xdc\xef\x2e\xbd\x1e\xb8\xde\x12\x1c\x86\x4d\xf9\xc9\x13\x31\xfc\x8c\xcb\xe1\x01\x3e\xe8\x61\x0a\x6c\x30\xf5\xd2\x50\x41\xca\x2a\x6d\x9e\x6a\x55\xfb\xc2\x44\xc8\xc4\x82\x6d\xb3\x53\xc0\x08\x9e\x81\x2d\xb3\x53\x81\xdf\x23\x7a\xdb\x25\xf9\x5c\xfb\xa2\xd1\xc3\xa2\x61\x15\xe8\x30\x85\x5a\x77\x6a\xca\x86\x6a\xe5\x3e\xc5\xee\xc4\x0b\xff\x4e\xa4\x6c\xf4\x8a\x18\xba\xdd\x0d\x29\x1b\xbd\x2a\x3c\xed\xee\xfa\xca\x46\x5d\xd0\xa1\x9f\xa9\x46\xbb\x5c\x89\x68\xa3\xb5\x58\x6a\xe5\x1d\x32\xe5\x02\xfa\xe4\x3c\x61\xf2\x01\x8a\xe4\x3d\x52\xe4\x3d\x1a\xe4\x5d\xe6\x71\x0a\x74\xb8\x85\xdb\x19\x7a\x7e\xb5\x0c\xf7\x3f\xb2\xe6\xdf\x37\x50\xd4\xf6\x0c\x23\xc0\xa4\xa0\xbf\xf4\xd6\xdc\x0b\xdf\xb5\x4f\x9a\x65\xb8\x05\x3a\xd4\xee\x8e\x5b\x0b\x1d\x34\x35\xd6\x51\xdd\x98\x78\x91\x39\x7f\x7b\xe1\xa4\x6c\x9f\x92\x83\xdb\xd1\xf8\xa6\x22\xdb\x31\xbb\x94\x6e\xc4\x7c\xdf\x02\x5c\x65\x39\xa5\x36\x50\xd9\xf0\xf1\x9f\x70\x02\x20\xe6\x76\x90\x67\x14\xda\xae\x68\xef\xc1\xf5\x57\xf4\xf8\x35\xa9\xf4\x43\x54\x7e\xd5\x93\x43\xf4\x8c\xc0\x5d\xf2\xb6\xfb\xbb\xa7\xf2\x30\x56\x93\xef\x35\x7e\xfc\x3d\x2f\x95\xac\x53\xd4\xb8\x41\x7d\x89\xdd\x64\xc5\x07\x45\x5e\xad\x1b\x40\x8a\x78\xea\xc2\x25\xf3\xd5\xa5\xa5\x12\x73\x4a\xc2\xbf\xa1\xab\xdb\xe1\x63\x54\x89\x0e\x09\x3d\x4a\x0d\xf4\xa7\xae\x3d\xdc\x3e\xa5\x59\x54\x6d\xf1\x24\xd6\x4e\xc0\x78\x6a\x89\x5d\x90\xf1\x09\x76\xf2\xf3\x77\xae\xa7\xbb\x38\x79\x61\xdd\x1f\xd4\x6f\x40\xb4\x7f\x84\xe6\xc7\xab\xef\x83\x97\xf4\x97\xc7\xec\xac\x97\xfb\x28\xce\x5e\xb9\xb3\x3b\x4a\xd1\x0b\x5c\xcf\x02\xd1\x27\x5c\x02\x0f\x77\x77\x47\x0e\xb1\xc3\x8e\x03\x77\xf5\x8e\xce\x56\xd2\x1f\xb3\xf8\x6d\xf0\x8c\xc1\x1e\x82\xa4\x2d\x19\xfb\x1f\x67\x67\x22\x66\x20\x2b\x3f\xf3\x46\x9e\xe6\x73\x0d\x32\x8d\xde\x50\x71\xa1\xe2\xdf\x1c\x1e\xac\x56\x45\x8f\x29\xaa\x2b\x5b\x9e\x99\x9f\x59\x67\xf8\xe1\xa6\x80\xf4\x21\x3a\x37\x5b\x8d\x69\x76\x39\x83\xc2\x3f\x24\xc7\xa6\x92\x1b\x76\x2b\xdd\x0c\x33\x53\x23\x70\x9e\x92\x33\x8a\x41\xda\x98\xb7\xf4\x4a\xb4\xbe\x33\x36\x6f\xe9\xdd\x23\x07\xea\x52\x1b\xab\x3d\xd3\xbc\x65\x9d\xf3\x6f\xa3\x34\x79\x3e\xea\x49\x85\x0e\x25\xbd\x49\xbc\xfd\x9f\xa7\xb2\x4a\x9e\x1a\xbb\x78\xfd\xb9\x1d\xdb\xc7\xef\xbf\x47\x45\x12\xe9\xe4\xee\xff\xe7\xaa\x38\xa1\x07\xbe\x3b\xde\xe9\x7b\x90\xa7\xe9\xae\x13\x9d\xaa\xac\x31\xa9\xdb\x8c\xf9\x3d\xf0\x3c\x91\xf9\x7d\x84\x75\xaf\x2f\xdc\x7e\x67\x01\x0c\xfa\xa5\xa0\x53\xdc\x9b\xa2\x2e\x90\x38\x79\xb9\x64\x2f\xa8\x78\xc2\x82\xe1\x8d\xa0\xc8\xcc\x72\x60\xbe\xec\x9b\x4d\xd6\x36\xf3\xb3\x66\xf7\x04\xc2\x92\x35\xc5\x5b\x3d\x2d\x66\x04\x78\xe6\xe1\x96\xa2\xfe\x40\x27\xdf\xea\xb3\x9d\x04\xf4\x54\x7a\xd6\x4e\x5c\xc4\x1d\xc4\xb2\xde\xea\xf5\xba\x4f\x62\xf4\x70\xd9\x9d\x8a\x32\x2b\xb6\x79\x96\x00\xab\x8c\xdd\xc7\xae\x6d\x48\x51\x73\x66\xa1\x52\x1d\xa6\xff\xb6\x42\xe7\x0a\xb8\xed\x58\x6d\xf5\xd0\xc4\x0b\x96\x5e\x82\xc0\x75\x0f\x9d\x62\xf8\x9b\xd9\x01\x74\x98\xe0\xbe\xeb\x1b\x73\x8b\xc6\x38\x26\xa9\x39\x13\xf5\xe1\x11\xe7\xa7\x1e\x51\xd5\xa9\x36\x72\xf4\xa6\x03\xc5\x2b\xb9\xe1\x5f\xb2\x1c\x3a\x98\xe8\xe5\xae\xc8\xd2\x54\x7f\x49\x8a\xea\x14\xa5\x12\xa7\x3f\x11\x33\x0d\x03\xaa\xc5\xac\x47\xe4\x64\xeb\xce\xa7\xb8\x5f\x5a\xcc\x9c\x53\xd6\x9f\x7d\xf7\x4f\x1c\xba\x6a\x32\xb8\xf9\x59\x0b\x78\x9c\x34\xfa\x77\xa9\x19\x79\x96\x63\x79\xa0\x1f\xd0\xf1\x74\xf7\x7b\xf5\x96\xa3\x9f\xc1\x50\xf3\x98\x9d\x1f\xb6\xf0\x17\x8a\x3f\x81\x42\x43\x1d\xd8\x6e\x38\x38\x65\x56\x54\x33\x80\x8c\x59\x52\xd4\x38\xc3\x22\xbc\xd6\xe2\xc3\xe2\x06\xa2\x8e\x7f\xb4\xd5\x45\x9c\x7b\x28\x86\x45\x21\x5f\xa5\x1e\x15\xf1\xf4\x13\x9c\x46\x6a\xd9\xee\x88\xdb\x89\xa8\xc1\x53\x81\x17\xe8\x86\x57\xa0\x43\xbb\x43\x77\x85\x7b\xa7\x58\xde\x27\x95\x74\xf8\x4f\xbc\x09\x3e\x5c\xba\xbb\xdf\x31\x2b\x0e\x51\xca\x80\xfa\xf7\x03\x8a\x93\x48\xfb\xa9\xdd\xa2\x2c\x67\x13\xe6\xe7\xab\xcb\x10\x71\x31\x51\xf5\xd7\x22\xca\xb7\xf8\x9f\x0e\x79\x51\x54\xec\xf6\x03\x34\x73\xd9\x15\x2b\x38\xe7\x7e\x17\x20\x15\x86\x5e\x07\xa7\x86\x91\xfb\x5c\xc9\x6f\xd8\xdf\xf7\xd5\x21\x25\xa2\xbe\xc8\x4e\x15\xfa\xef\x3f\x7f\x88\x77\x46\xb4\x4b\x4b\x03\xf0\xf9\xf0\xa0\xb1\x6b\x96\x7b\xec\xf6\xdd\x78\x2a\x10\x02\xe9\x4a\xaa\x5c\xd4\x9c\x73\xc6\x6e\xac\x26\x3b\x36\x8e\xad\x78\x79\xb9\x4b\x57\x0a\x3f\x8e\xed\x1e\xf3\xcc\x8d\xf8\xb3\x76\x3d\xae\xed\x8a\xc1\x6a\xd7\x3d\x90\xff\x23\x39\x82\xd5\x17\xee\x46\xf7\x59\x8a\xf7\x6b\xba\x17\xf0\x2f\x0a\xeb\x5f\x5c\xd7\xb2\x79\x20\x50\x9b\xa3\x66\x94\xe7\x28\x2a\xa2\xe3\xae\x3e\x5a\x92\x59\x22\x0a\x5b\xb7\x29\xac\x43\xb9\xe3\x13\xde\xf5\x3c\xf3\x23\xd1\x3c\xf1\x1f\x94\x5b\xfd\x76\x23\x85\xbf\x59\x09\xa2\x07\x9d\x9d\x95\x48\xdd\x0e\x71\xb8\xa5\x3a\xe5\x02\x46\x5e\x1e\xb0\x4c\x52\xbb\x6c\x89\x36\x6c\x19\x21\xe7\x48\x70\x25\xcc\x6d\x21\x83\x5c\xf4\x5a\xdf\xb4\x0d\xbb\x40\x07\x5e\x7d\xef\xcb\x8c\x3d\x7b\x48\x26\x3f\xd8\x0d\xbf\x07\xff\x0e\x10\x95\x30\x21\x11\x5b\xcf\x45\xf6\xba\xb5\x24\x1c\xd5\x6f\x09\x00\x2f\xec\x71\x41\x02\xbc\xde\x74\x83\xfc\x0c\x5e\xd0\xbc\x8d\x8a\x1f\x01\x3e\x38\xd1\x51\xd8\xc6\x06\xd3\x61\x60\x4c\x14\x85\xd6\x41\x7a\x4b\x8e\x2a\x7d\xe7\xde\xd6\x8b\xe7\x96\x75\x2e\xa0\xbd\x7e\x97\xf9\x65\x29\x39\x3d\x2d\xf4\x47\x9c\x22\xf3\x18\xea\x84\xa0\x52\x75\xf0\x86\x2d\xe8\x9d\x3d\xbd\xa8\x88\x8a\xd1\x53\x74\x4a\xab\x56\xb1\x04\xa3\x57\x07\x1f\x2d\x1f\x78\x28\x43\x9d\x0c\xba\x43\x20\xef\x63\xb6\x4f\xd9\xee\x54\xde\xc8\x4a\x41\x1a\xab\x2d\x37\xaa\x10\x61\x40\x3d\xf4\xe8\x29\x69\xf4\x56\x75\xa0\xb1\xb2\x13\x2c\xa3\xc8\x71\xc6\x25\xaf\x9e\x47\xf1\x64\x4e\xb8\xe3\x8e\xa3\xe3\x33\x2a\xb2\x53\x39\x69\x9c\x05\x8a\xeb\x61\x8e\x01\x50\x1e\x2b\x73\x09\x26\x85\xa9\x34\x3c\xb8\xdc\xb5\x38\x0b\xe3\x94\xb1\xd1\x0b\xbf\x8d\xa9\x00\x41\x79\x70\x9c\x05\xb1\x3f\x95\x92\x5e\x94\x86\xcb\xdf\xb2\x0b\x78\xdf\xa0\x7f\x0e\x79\x02\xd4\x84\xa7\x87\x7a\xb0\x18\xf6\x04\x5c\x2b\x49\xec\x8d\x48\x92\x48\xae\xea\x3c\xd1\x22\xef\xd0\xaf\x6f\x54\xed\x30\x3a\x3f\xa6\x0b\x09\xc7\x00\x36\x40\x50\x51\xb8\x8d\x8f\x9a\x8d\x4c\xf6\xe4\x26\x91\x19\x17\x32\x1e\x0f\x6f\x14\x62\xb1\x71\x7d\x61\x37\x93\x2a\x7a\xd4\x8f\xd1\x8b\xc6\xa1\x00\x71\xa3\x78\x3c\xe8\xe3\x1f\x99\x19\x4d\x7e\x21\x63\x36\xd8\xb7\x9d\x61\xe1\x05\x8f\xe7\xe2\xa4\x8c\x1e\x53\x14\x5f\x75\xce\xff\x4d\xd5\x8b\xd2\xc1\xf7\xbb\x41\x1e\xed\x60\x58\xcc\x88\x98\xa8\x1a\x4d\xbf\xd7\xe3\x10\x1d\x80\xd8\x41\x60\x54\xc3\x4e\x51\x54\x6c\x1f\xb3\x6a\x7f\x5b\x5b\xd1\x88\x0d\x2d\x45\x15\x3e\x3b\x94\x79\xb4\x83\xfb\x29\x93\x86\xd6\x60\x30\x7a\xdd\x27\x15\x82\x1a\x98\xe8\xf8\xc8\x24\x7c\x0c\xd5\x5d\x37\x37\x2c\x6a\xb7\x63\x6e\xa6\x23\x6f\x35\x87\x5f\x79\x61\x8d\x56\xb3\xc0\x1e\xd4\x62\x4e\x9e\x27\x92\x33\x30\x8a\xaf\xee\xb6\x98\xcd\x5e\xd0\xcd\x50\x15\xba\xa1\x0d\xd4\x98\xbe\xa9\xad\xd1\x9d\xa2\xf5\x5e\xc0\x66\x0d\x30\x2d\x1a\x73\xf5\x65\x8f\xe8\x43\x0c\x2b\x38\x75\x34\x06\xef\xda\xc0\xcf\x3d\x16\x10\x78\x34\x53\xa4\x88\x78\xbb\x31\xaf\xb4\x6b\xcd\xca\xcf\xcc\x8b\x1a\x72\x9d\x96\x46\x15\xfa\x49\xd4\x0e\x4b\xae\xb6\xd9\x8d\x79\x35\xf2\x3e\x0f\xfa\xf9\x4e\x4f\xf7\xf8\xa4\x0c\x8f\xdf\x4e\xa5\xda\x02\x16\xfa\xfc\x8e\x1b\xb0\xc0\xf0\xa1\x99\x1a\xf9\x2f\xfc\x2b\x40\xa1\x99\xf6\x02\x1d\xb2\x17\xa4\x47\x69\x7a\x45\xcf\x2a\x0a\x2f\x99\x7d\x76\x87\xa3\x26\xcf\x4e\xb0\x1c\x5b\xd2\x6f\x5c\xd5\x13\xda\x3c\xb9\xdb\x7e\xe8\x18\x6f\x88\x49\xa3\xdf\xf8\x0e\x42\xca\x30\xdb\x88\xb8\x03\x81\xec\x10\x53\xe0\x22\x10\xe4\x03\xb4\x62\x43\x0a\x5d\x3a\xa1\x81\xf0\x79\x44\x64\x97\x51\xa3\xbc\xa2\x89\x64\xbe\x45\xc3\xe7\x58\xc4\xd4\xa4\xd3\x23\x62\x8b\x38\xed\x58\x06\xa7\x70\x53\xd7\x88\xdd\xe0\xf0\xdd\xd8\xa1\xa2\x4a\x9e\x92\x5d\x54\xa1\x6e\xbc\xa8\xb6\x84\x82\x31\xda\xa3\x5c\x7d\xb0\x7c\x4a\xaa\xda\x46\xc7\xdd\x8b\xb8\x5d\x5e\xc4\x1f\xba\x5b\x29\xdb\x03\x79\x54\xac\x6e\x5a\x68\x6e\x84\xc0\x9a\xf7\x58\xa0\xe8\xab\xfe\x9a\x15\x31\x73\x67\x85\x95\xa8\x0e\x6e\x5b\x53\xb3\xec\xbc\x33\xb8\x7d\x63\x1d\x73\xf2\xb3\x16\x47\xe5\x1e\xc5\x53\x8e\x7d\x54\x6b\xf1\xcc\x66\xcc\xdb\x30\x3f\x6b\x78\x93\xd5\x88\x89\xb6\x89\x18\x00\xd7\x37\xbb\xa4\xd8\xa5\xe8\xf2\x94\xa4\xa9\xf8\xbd\x34\xf1\xf9\x6c\x9e\xfb\x6e\x49\xbb\xf6\xfd\xaf\x66\x19\x5e\xa9\x25\xc7\xa7\xe4\x98\x54\x48\x43\x51\x89\xf4\xe4\xa8\x67\xa7\xaa\xff\x2e\xd1\x33\x3f\x6a\xa0\x73\xf1\x38\x3c\x6f\x8f\xd5\x5e\x6f\xd7\xd2\x4f\xf6\x55\x8d\x57\xd3\x8d\x1e\x23\xcc\x0d\x86\x5d\x8e\xb6\x76\xe4\xad\x9d\xf1\xd6\xae\xbc\xb5\x3b\xde\xda\x93\xb7\xf6\xca\xef\xff\xfe\x15\xbd\x3d\x15\xd1\x01\x95\x5a\x97\x8c\x17\xf3\xe3\x0d\xd6\x35\x2f\xed\xd6\x53\xee\xa2\x14\x39\xff\xdb\x4f\xd6\x8d\x75\x63\x5d\x7d\x77\x1c\x51\xa1\x79\x63\xe2\xc2\x0e\x62\x97\xe5\x17\xba\x02\xc3\x08\x63\x71\x26\x1b\x2a\x23\xef\xb9\x38\x71\x55\x76\xc8\x9e\x8b\x28\xdf\xbf\xe9\xf0\x1f\xcd\x68\x39\x58\xc8\x6a\xed\x5a\x12\x35\x8e\xce\x49\x49\x9a\x81\xb2\x5d\x56\x45\xf6\x15\x0d\x58\x49\x48\x05\x1d\x2f\x9e\xa8\x28\xa2\xb7\xad\xab\xb9\x42\xa4\x60\xa1\x4d\x80\x2c\x02\x02\x02\xe4\x32\xd0\xd2\x25\xee\x23\x82\x51\x1f\xa2\x67\x7c\xe8\x22\xb2\x58\x04\x1b\xef\x41\xa5\x56\xa0\x5d\x25\xa4\x1a\xd7\xbe\x46\x9e\x51\xa5\x6a\x42\xd0\xc3\x0e\xe8\xa5\x03\x7d\x50\x2d\x4f\x3a\x3f\x84\xb8\x94\x45\x9c\xfc\x7c\xfb\xb6\xd5\x2d\x31\xd0\x2a\xd9\x7d\xd5\x30\xe4\x21\xc2\x48\x49\x0a\xad\x2b\x74\xae\x06\x5c\x80\xf0\x98\xc9\x8d\x6d\x74\xdc\xed\xb3\x62\x5b\x56\x51\x31\x14\x57\x2f\xa4\x47\xdd\xa4\xdc\xe1\x61\xbe\xe9\xbb\x3d\x84\x9c\x28\x50\x99\xa5\x2f\x78\x2f\x8d\x8a\xf8\x46\x50\x9e\x9d\x2a\x24\x2b\x2c\xf3\x34\x81\x83\x8b\xb8\x3c\x8f\xaa\x3d\x1b\xc5\x20\x3e\x15\x44\x88\x1a\x56\x79\x3b\x10\xdd\x00\x53\x2e\x2a\x7a\x5b\xd4\x18\xf8\x46\xe1\x24\x44\xbf\x55\x62\x6c\x97\x5d\x32\xf4\x98\x7f\xfb\x82\x76\x55\x56\xe8\xe8\xe9\x09\xf3\xc5\x11\x6e\x6b\xa3\x14\xe3\x48\x2a\xce\xa1\x23\x5b\xae\x45\x53\x29\xdd\x16\x0a\xdb\x8e\x4c\x04\x5f\xae\x45\x43\xa6\x46\x4c\x0f\x56\x98\x89\xa8\x5e\x1f\x99\x84\x65\x64\x19\x0d\x90\x7c\x8c\x15\x05\x80\xc9\xf8\x45\x05\xf5\xc8\xca\x69\x0f\xbd\xa6\xba\x24\x4c\xb8\x51\xbe\xa5\x0c\xab\xa3\x17\x74\xac\x4a\x7a\x81\x34\x9b\x61\xca\xda\xd3\xa4\xcc\xa3\xe3\x2c\xb6\x19\x83\xa0\xca\x3c\x1c\x9c\x4b\x67\x94\x51\x9a\x0e\x4d\xe9\x5d\xeb\xaa\x3d\x8c\xa4\xb0\x46\x17\x83\xbb\xeb\x0b\xc8\xbe\x56\x1f\x38\xe5\x39\x2a\x76\x51\x39\x44\x69\x0e\xff\xc6\xec\xa3\x40\x33\x79\x5d\x21\x69\xea\xf3\x1c\xd5\x17\x0c\x1b\x1d\x1a\xcd\x02\x7e\xd4\xf1\x60\x0c\xff\x5d\x05\xb2\x50\x36\xd2\xbe\xb5\x2e\x3f\x6b\x9c\x9d\x48\xa6\xd9\x74\x3b\xfc\x3d\x89\xaf\x7f\xfe\xb0\xfd\xf0\x00\xa7\x1d\xbc\xfc\xaf\xe8\xfa\xaf\xc7\x68\xad\x7a\x51\xed\xc9\x44\x47\x2b\x1e\xa9\x89\x95\x98\x70\xf6\x59\x51\x5d\x69\x71\xdc\x38\xad\xd5\xd7\x5e\x22\x6b\x1a\xe6\xa8\xa6\x1e\x4a\xd3\x24\x2f\x93\x72\xb8\xb3\x12\xb1\x76\xdd\xbb\xeb\xfe\x05\xdb\x70\x7b\xe3\x10\x55\xbb\xbd\x4e\x9a\x37\x4f\xda\xfa\x41\x78\x3e\x7f\x50\x82\xf3\xbf\x4e\xa8\x78\xcb\xa3\x22\x3a\x34\x6f\x23\xfa\xb0\xfe\x4f\x01\x2c\xaa\xb4\x77\xb6\xc1\x59\x5a\x1d\xeb\x4b\xdb\xe9\x46\xe0\xcf\xc1\x29\xea\x5d\xad\x1c\xa6\x47\x7f\x44\xd5\x2b\x12\x11\xb2\x7c\x79\xee\x1b\xc1\xd6\xdf\x57\x1a\xf3\xa6\x99\x9f\x35\xab\xbe\xca\x77\xec\x8f\x0a\xa2\x66\x4c\xbc\x28\x88\x94\xe6\xda\x18\xdc\x01\x96\x6d\x13\xaa\x3b\x41\x57\xd2\x4b\x03\x3d\x70\x0e\x0c\xf6\x30\x82\xd4\xaf\x88\xc4\x6e\x93\x62\x38\x56\xab\x41\x91\xab\x38\x88\x23\xc7\x63\x70\x7d\x1f\x27\x05\xa2\x81\xb4\xb2\xf4\x74\x38\x4a\x38\x2f\x02\xa9\xc5\xb9\xf9\x8e\x29\x76\x71\x3a\xac\xbc\x09\xcb\x79\xed\x2c\x4e\x2f\xcd\x55\x0e\xb1\xec\xcd\xd5\x20\xd4\x77\x0a\xde\x52\x67\x9b\xe2\x99\xec\x0a\x59\x22\x5f\xfb\xe6\x30\xf5\x96\x7d\xdb\xa7\xf6\x41\x78\xc9\x30\x08\xb4\xe6\xd6\x53\x7a\x61\x1d\x5a\x59\x5f\x1a\x09\x6f\x0a\x40\x68\x69\xc2\x39\xf6\x79\x63\xb4\xa0\x7b\xc0\x04\x1a\xf0\xbb\x46\xd3\x90\xdc\xa6\xd4\x4e\x0b\x5d\xa3\x9d\xe5\x0e\x2e\xaf\x5a\xb3\xe7\x80\x29\xb0\xeb\xa5\xbf\x3a\x1a\x9f\x3c\x96\x82\x12\x32\xf0\xd0\xd8\x13\xab\xc9\x6e\xfc\xf0\x25\x30\x3f\x6a\x41\xeb\xae\x47\x86\xe5\xf3\x4e\x4f\x56\xeb\x74\xec\x30\x4e\xc7\x12\x86\xe4\x7a\xcf\x86\xc7\x22\xba\xb8\x54\x80\x29\xb2\x75\x8b\xc3\xe7\xd3\xdb\xb0\x86\x93\x6f\x3e\x74\x6f\x00\x5a\x93\x38\x71\xf8\x22\x01\xf4\x97\xac\x5b\x81\x9f\xf1\x00\xb8\xf6\xfd\xd6\x30\xd8\x39\xd1\xca\x46\x4f\x5f\x4f\xa7\x34\x6d\x8e\x5f\xb6\xfa\xf1\xcb\xa5\x67\x2a\xb9\x9b\x12\x21\xaf\xee\xe5\xe7\xc6\xef\x8e\x5d\xfa\x5e\xc3\x52\xe0\x51\xd5\x48\xf3\x61\x96\x4a\x8e\x29\xaa\x86\x14\x03\x5a\xe3\x22\x02\x6d\x7e\x64\x63\x21\x8d\x82\x68\xbc\x04\x59\xee\x80\xfb\x36\xf8\x47\x77\xec\x8f\xda\x3f\x34\xfb\x4a\xfb\xa4\x59\x1f\x35\x5d\x73\x20\x3c\xe6\x18\xee\x6c\x70\x3f\x0c\x41\x27\x8d\x37\xd0\x58\x90\xca\xc6\x28\x51\xf1\x92\xec\xd0\xa7\x38\x1e\x89\xd1\xc1\x3c\x2e\x13\xe6\x87\x9a\xb9\x60\xfe\xf1\xa1\xf1\x02\xd0\xfc\xfc\xac\x99\x9a\x23\xce\xf1\xc2\xa2\x7a\x23\x4d\x51\x35\x9a\xc7\x63\x4a\x1a\x94\x43\x16\x23\x2c\xdf\x3a\xc7\xce\x34\x7b\x25\xc7\x4e\xf5\xe7\x78\xf2\x80\x07\x03\x81\x0e\x58\x27\x14\xb8\xda\x68\x1f\x4d\xd9\x66\x6f\xa7\xc0\xb2\xba\xef\xfe\xec\x7b\x26\xb8\x3f\x2f\x45\x00\x42\x24\xb2\xaf\xb6\x82\x2e\x02\x58\x53\x9d\x38\x50\x2d\x8e\x35\x74\x98\x70\xa3\xdf\x75\xae\x23\x1b\x0f\x75\x8d\x29\x0e\x51\xda\xdd\xfe\xb9\xc5\x45\xbc\x73\xe4\x18\xd6\x9e\x49\x43\x14\x51\x8f\x9b\x20\xe8\xa0\x8e\xac\x3e\xbd\x07\xa5\xd8\x19\x02\xa8\x37\x13\x27\x24\x6f\x83\x4c\x8d\x44\xc4\x9d\x3c\xd3\x7c\xea\xb9\x01\x63\xa4\x3b\x63\x9c\x04\xf1\x35\xfc\xa2\xfd\x19\xbd\xf7\x5e\xa8\x69\xf5\xff\xdc\xc1\x98\x73\xe1\x14\x47\x7d\xc1\x63\x50\xde\x05\x9a\x7b\x81\xe7\xe2\x7f\xe0\xec\xea\x33\xe2\x74\x5a\xc0\x95\x4b\x3f\xa8\x99\x42\xbc\x94\x69\x0b\x6b\xbc\x0f\x3e\x9c\xc9\xbc\xc5\x35\xde\xcb\xdc\x05\x26\x75\x89\xa8\x4f\x55\xee\x30\xf9\x85\x6b\x25\x25\x00\xe9\x52\x99\xba\x86\xe9\x01\x83\x75\xe5\x9b\x05\xa0\xe3\xc8\x11\x0e\x0b\x4f\x01\xa0\xe6\xc1\xcf\xd6\xd2\x2c\xb8\x88\xbf\xe5\xe3\x7e\x63\xcd\xc4\xf6\xf3\xf3\x95\xe0\xb4\xde\xea\xf0\x23\x06\xa2\xa9\xb4\x65\x37\x35\xa2\x0f\x4e\x85\xc0\x64\x73\x62\x4f\x6f\x30\xc0\x46\x65\x2d\xab\xa8\x4a\x76\xbc\x2b\xbf\x39\xb9\xaf\x4a\x1a\xcb\x44\x59\xee\x8a\x8e\x0b\x93\xf9\xb1\xb9\xf1\xa7\x3c\xf9\x93\x7d\xc5\xba\x93\x2e\xe2\xef\x0b\x7b\x12\xec\x39\x10\x4d\x1f\x31\x0f\xfd\xff\x27\xef\x59\x76\x1b\xd7\x95\xfc\x15\x21\xe7\x5e\xdc\xe3\xee\x88\x2d\x3e\xf4\x4a\x9f\xce\x62\x80\xb9\x98\xc5\x5c\x60\x16\x33\xb3\x39\xc8\x42\xb1\x94\xc4\xd3\xb6\x65\xc8\x4a\xd2\x7d\x82\xcc\xb7\x0f\xaa\x48\x49\x24\x45\xbd\x6c\xf7\xb9\x0d\xcc\x22\x8e\x2d\x15\x8b\xc5\x2a\xb2\xf8\xaa\x47\x9f\x87\x72\x03\xb6\x7c\x7a\xd1\xe3\xa2\x7a\x02\x75\x2b\x53\x1f\xc6\xc9\xf2\xa1\x2a\xb0\xf7\xba\x9c\xb5\x17\xd7\x2a\xcd\x72\x5e\xcb\x2a\xb7\xed\x6c\x96\x22\x23\xeb\xf2\xf0\xdd\x6f\x9c\x08\x7b\x3b\x2b\xb5\x5d\x0d\x8b\x9d\x0c\xdf\x11\x17\xbb\xf7\x5f\xf2\xf2\x75\xaf\x96\xcb\x78\x65\x7e\xfd\xcb\xae\xa8\xab\xcd\xfa\x88\x83\x31\xdb\xec\x8b\xca\xcb\x37\x2f\xb0\xb9\xc9\xaa\xaf\xb8\xbc\x07\x2a\x0f\x45\x75\xfd\x4b\xbb\xd0\x96\x25\x1b\x6a\xb3\xe7\xfa\xc9\xdf\x15\xf5\x53\x99\x63\x4a\x8b\xe6\x5c\x04\x73\x1b\x38\xfa\xea\x85\x96\xb4\x6f\xba\x83\xaf\x47\x53\xf8\xc0\x6f\xcb\xf5\x73\xb7\x3a\xb6\x97\xbf\x97\x1c\x57\xa7\x28\x6e\x95\x38\xd1\xe8\xff\x96\x8d\x5e\xf0\xfe\x3e\x90\xc0\xd2\x91\xca\x6c\x49\x90\x34\x13\x57\x3f\xa7\xd5\xa2\x88\x63\x26\x32\x47\x5a\xa3\xf9\xb1\xc5\x4c\x54\x76\xaa\x9b\xb3\xf2\xd4\x38\xbd\xdd\xbd\x11\x97\x36\x77\xc8\x9f\x3a\x27\xf2\x89\xef\x1d\xeb\xaa\xec\x22\xeb\x0c\xc5\x08\xea\x0a\xc8\xc8\x55\x4b\x4b\x61\x20\xab\xc9\x42\x5d\x04\x22\xd5\xe3\xf4\x3a\x4f\x28\x37\x11\xfd\xa8\xb3\xa6\xf4\xc8\x4b\xb6\x7d\x2e\x7c\x75\xad\xba\xa0\x84\x62\xc7\xd2\x62\x92\x1f\x5a\xa9\xb7\xbe\x5f\xc6\x4c\xd1\x2d\x13\xd9\x22\x51\x2d\x15\xd1\x42\xd1\xcc\x17\xc9\x42\x51\x2c\x13\x81\xfb\xb4\x68\xfc\x9c\x45\x6e\xfd\x57\x9f\xc7\x0d\xa7\xa6\x65\x38\x21\x9a\xa5\xdc\x1e\x63\xca\x64\x6c\xd8\x19\x17\xe8\x00\x4b\xe7\x29\x96\xd3\xba\xd1\xec\x6e\xd1\x49\x6f\x50\x2d\xcf\x6b\x14\x40\x4e\x35\x49\x8b\x8c\x36\xed\xe4\xe5\xc6\x52\xec\xde\x7c\x5c\x43\xb5\xbe\x37\x01\x61\xe1\x48\x94\xc5\x62\x37\xa5\x55\x0c\x30\x3d\x58\x91\xa1\x4a\x24\x95\x7a\xcd\x23\x34\x4a\x5c\xdd\xd6\xd2\x91\xc0\x7c\x16\xa6\x3a\x6f\xe3\x8c\xa4\x23\xaa\xac\xba\xc5\xd5\x88\x34\xe9\xa5\xcd\x32\x44\x1e\x24\xe3\x4e\x2d\x0c\xf4\x43\xe4\xd1\xe2\xdd\x2a\x86\x05\x73\xab\xe4\xe7\x55\x29\x8c\xe2\x42\xee\x2d\xc5\xfc\xf2\x61\x4b\x72\x34\x41\xb2\x26\x11\xb5\x20\x1d\x29\x40\x76\xc5\xfe\xd9\x3f\x64\xfb\x62\x0b\x10\x0f\x9b\x4a\x99\x3e\x37\xe7\xba\x81\xf3\xd8\x36\x11\xa9\xbe\xc6\x75\x51\x8e\xa6\x2e\xe5\x73\xb5\x2e\x56\xf2\x47\x5e\x1c\xeb\xcd\x1e\xb1\xab\x27\xb2\xd8\xca\x8a\x6a\xd1\x47\x2a\x9d\x00\x7d\x58\xb4\xf9\x18\xfe\xc8\x33\x83\x91\xbd\x6e\xf6\x79\xf9\xaa\x25\xee\x12\xa1\xbb\xc9\x53\x88\xee\xcb\xfc\xbb\x77\x98\xb0\x70\x75\xe0\x7d\xd8\x14\xdb\xfc\x58\xd4\xc7\x7e\x3e\xb8\xce\xc8\x47\x25\xd3\xd2\x82\xa1\x34\xed\x7e\xac\x36\xf9\x67\xf8\xf0\x1f\x33\x15\x31\x0a\x7f\xd5\xc5\xee\xb0\xcd\xea\xc2\x97\x06\x01\xc7\x9b\xaa\x38\x14\x59\xfd\x2b\xec\xe4\xfd\x87\x4d\x7d\xbd\xdb\xec\x77\xd9\xb7\x5f\xd1\x05\xf4\x1a\x9e\x3a\x75\x4a\x47\x1d\x41\xc2\xf4\x3b\x6f\xed\xac\x40\xce\x68\xe3\xe5\x35\xe5\xd6\x84\x3f\xd2\x2e\xb7\x1d\x65\x35\xdd\x2d\x19\xae\x22\x56\x21\xbf\xef\x5c\x7b\x89\x61\xbd\x9f\x6f\x89\x8e\x0e\xf7\x68\x56\x3a\x6f\x75\x69\xf3\x8f\xab\xc5\xe8\x54\x4a\xf9\x3e\xae\xff\x98\xc0\x25\xf9\xa8\x50\x8e\x05\x81\x1e\xaf\x5f\x5d\xf5\xbb\x28\xf8\xb7\x39\xad\x51\xf9\x32\x7b\x11\x82\x3e\x2f\x62\xb1\x9c\x83\x87\x77\x8e\xce\x92\x98\x09\xf0\x89\xcd\xda\x6e\x68\x5e\xf4\x46\x94\x34\x22\xba\x93\x15\xdc\xdf\xb3\xbe\xab\x56\xe4\x9c\x00\x6d\x42\xe6\x08\x0b\x00\x8d\x63\x1d\xb7\xba\x38\x15\xb5\xd7\x8c\x18\x90\xc6\x78\x4f\x30\xc0\x8d\x19\xca\x90\x64\xa7\x21\xe6\xea\x04\x9c\x26\xae\xe9\x43\xb5\x5a\x99\xaa\x65\x46\x3b\x07\xe9\x91\xa9\x26\xf5\x19\x06\x51\x4b\x52\x6e\x60\x3d\xe0\xb1\x39\x7c\x2c\x76\xf7\x18\x94\xe8\xb8\x59\xfb\x79\x55\x1e\xf2\xf2\x75\xef\xd7\xd5\xe6\xf1\xb1\xa8\xda\x93\x10\x7d\x5f\xa3\x9f\xca\xdc\x6f\xf6\xf2\xc8\x12\x3a\xec\x13\x9b\x3c\xb9\x81\xae\x69\x07\xe0\x9b\xc7\x07\xd2\x84\x8b\xf1\x51\x97\xbf\x39\xcd\xb4\x66\x6b\x07\x3d\xf2\x24\xce\xab\xa6\xbb\xb5\xe6\x2d\x64\xa7\x8d\x55\x9a\xd6\xb1\x54\x7b\x2a\xab\xcd\x1f\xe5\xbe\xce\xb6\xbe\x6a\xe2\xca\x8d\x07\x7b\xbc\x65\x6f\xea\xe4\xae\xca\x53\xeb\xc9\xeb\xe6\x4d\xfd\xdd\xbd\xe9\x14\x03\xc2\x01\xc6\x5b\xe7\x99\x9c\x8d\xc0\xb6\x86\x4a\x9a\x1f\x93\x15\xcb\x71\xb2\xac\x8c\xd9\xe9\xd5\xc0\x6b\x58\x4d\x4e\xf9\x8b\xcf\xbc\x15\x1f\xd9\xaf\xc5\xfa\x32\x60\x8a\x2c\x5c\x54\xd4\xf9\x94\xdf\xcc\xdc\x6c\x2e\xf3\xaa\x6b\x43\x51\xa9\xab\xe8\xe9\x91\x64\x47\xe6\x16\x66\x64\xd5\xa9\xe2\x4b\xdd\x33\x7b\xfe\x96\x7d\xfc\x7b\x79\x93\x22\x97\x94\x33\x85\xab\xad\xae\x66\x8a\xd9\x2e\x31\x28\xf0\x09\x6e\x18\xd4\xfe\x40\x99\x3b\xea\xe9\x0b\x1b\x16\x59\xca\x23\xbe\xac\xbc\xdf\xf7\xd9\xae\xf8\x72\x05\x0f\x7f\xc7\xc4\xae\x77\x57\x77\xd7\x33\x60\x3e\x7e\xb0\x22\xc4\x4e\x17\x69\xe3\x6a\x7d\xb0\x8d\xfe\xea\xf2\x50\x6e\xcb\xc7\xef\xbe\x0c\xac\x7d\x9c\x1b\x35\x71\xc0\x78\x52\x8f\x54\xa6\x2b\x1a\xc7\x0d\x00\xd9\x6e\xf6\x5f\xbd\xec\xba\x23\xa1\x7d\x37\xd2\x9d\x64\xd0\x19\xfd\x8a\x41\xc3\xd8\x62\x6a\x6b\xcb\xaa\xbe\x85\x91\x76\xc9\x20\xe7\x0a\x4f\x7f\xa0\x90\x8d\x97\x5a\x58\xa3\x35\x86\x61\xe9\xe6\x6c\x81\xe3\xa2\xc4\x55\xed\x8f\x75\x5f\x1a\x22\xcd\x45\xc7\x02\x47\x27\xed\x1a\xcc\x5d\x43\x2f\x60\xb3\x2b\xc0\xc0\xac\x92\xe6\xa9\xec\x2c\x22\xe5\xc1\x8f\xfb\x9e\xea\xb4\x90\xe4\x66\x93\xf5\x08\x81\x7a\x4c\x7b\x18\x2e\xba\x46\x8c\x83\x60\x70\xac\x9c\xc4\xee\x64\x74\xf0\x29\x07\x1c\x1b\x1b\xfe\x56\xdb\x72\xab\x43\x48\x1f\xd8\xe3\xcb\x23\x3a\xf0\xd9\xf7\x75\xed\x0b\xe9\x1a\xdb\x8f\x58\x32\x80\x4b\xfa\x94\x38\xb1\x8d\x78\xdd\x6b\xee\x23\x6e\xb4\x32\xd1\x82\xcc\x86\xe7\x44\xae\x03\x4c\x79\xf3\x2a\x87\x17\x28\xfc\x3f\xe5\x66\x7f\x83\x82\x98\x55\xf1\x18\x48\x5e\xd6\x03\x00\x83\xfc\x9d\xdb\x2a\x44\x3d\x24\x9f\xb9\x9e\xe1\xea\xc0\x69\xa4\x0f\xa8\x54\x84\xed\xe2\xfa\x0b\xde\x96\xdd\x8d\xb4\xaa\x57\x62\x5f\xd6\x7e\x5e\x3c\x6c\xf6\x45\x7e\x37\x48\xf2\x60\x3d\x73\xe1\xf5\x5a\xde\xfa\x8e\xef\x4b\x9a\x98\x17\xfb\x25\x35\x23\xf8\x00\xcb\xbb\xdb\xc7\x81\x7e\x02\x85\x07\x65\xd9\xbe\x9d\xc2\x3e\x4f\x9e\x12\xdd\x48\xcf\xea\xde\x3b\x87\x8b\x5d\xdd\x24\x39\xd6\x68\xea\x2d\x47\xb4\x43\x93\xf2\xd5\xaf\xca\xb2\x7e\x77\xad\x17\x8c\x0d\xb9\x6e\x5a\xad\xc7\x73\x90\x6e\xef\xee\xed\x3a\x7b\xa8\x3c\xfa\x50\x79\xda\x7f\x0b\xb2\x2a\x5f\x8f\x37\x21\xda\x6f\x3c\x54\x78\xc4\x6c\x01\x64\x55\x91\x1d\x6f\xae\x70\xd3\x0c\xab\x80\xa3\x87\x5f\x25\xf3\x88\xf7\x7c\x50\x5f\x9f\x0f\xf2\xf5\x95\x37\x00\xab\xb4\xf5\x82\x12\x2e\xec\xee\xa9\x52\x9e\x0c\x00\xa9\x37\x1d\xaa\x7e\x67\xb0\xc1\xf0\xa1\xe9\x90\x80\x47\xf4\x56\x1f\xd1\x8a\x35\x04\x99\xd6\xbe\x76\x29\xc9\x7e\xb3\x98\x22\xa9\x37\x67\x69\x50\xea\xdd\xd8\xc4\xb6\x7c\xf6\xef\xc5\xbd\x59\xb4\xca\x5c\xb0\x3c\xb4\xcc\xc0\xa6\x92\x0b\xdb\xee\xa8\x97\x74\xb4\xb8\xfc\x3a\x71\xa0\xcd\xde\x61\x01\x83\xbc\x83\x69\x35\x85\x1f\xc1\xc8\x3e\x70\x49\x92\x1b\xdb\x50\x4c\xdb\x3f\x2e\x6b\x90\xb4\x0a\x59\xd4\x2c\x59\xc4\x68\xdc\xa9\xd5\xe7\x9b\x17\x2f\xdf\x2e\xa9\x5d\x96\x70\xad\xaa\xfb\x16\xf9\xcb\x49\x59\x32\x00\x54\x89\x8b\xee\xf2\x10\x27\x1a\x0e\x2c\xa4\x03\x2f\xa0\x2f\xc0\x80\xee\x8e\xe1\x24\xb2\xbb\xd2\x0b\xd9\x58\x9f\x5a\x72\xd8\x74\x65\xa9\xee\x93\xc6\x7c\xd2\xb4\xec\x2c\x46\x10\x79\x8a\x72\x46\xa3\x5c\x54\x2c\xc4\xd0\xa3\xe1\xcd\x4c\x62\xf5\xf3\xb0\x66\x31\x8e\x43\x56\xd5\x68\x28\xf9\x93\x71\x78\x31\x06\x57\x43\x16\x6d\xf4\x4f\x60\x1d\x9a\x39\x9e\x41\xb1\x51\x7e\x66\x02\xea\x53\xa9\xb5\x92\xed\x2d\xa6\xd6\x4e\xd6\x37\x45\xad\x61\x90\xb9\x9c\xdc\xc6\x54\xf3\x64\x7a\x6d\x04\x0b\x42\x69\x2f\xa7\x16\x27\xf1\x93\x49\x35\x4a\x4f\x1a\x92\x2e\xa2\x4e\x5d\x36\x1f\x97\xd0\xd4\x94\x79\x33\x4f\xfe\xbd\xe1\x73\xba\x29\x4c\xb7\xe7\x1c\x9d\x8e\x60\xb1\x6f\x0b\xa3\x53\x09\xf4\x08\xde\x1b\x9e\x42\x95\x2a\x3a\xe7\x02\x98\xa9\xad\xa2\x6b\x1b\xa9\x2e\x87\x19\x5e\x04\xbb\xb7\x91\x9d\x86\x6b\xbf\x5d\x79\x57\xcf\x7b\x78\xb2\xcf\x76\x05\xaa\xd0\x81\x4d\xde\xcc\x56\x2c\x5e\x2e\xb9\xca\xbb\x2d\x2f\xb5\x0d\x1d\x50\x6c\xfa\xb3\xc4\xb6\x0f\x68\x70\x7e\x33\x4e\x19\x8e\x63\x78\x2c\xf3\xf7\x79\x9b\xae\x33\x86\x6c\x43\x43\xbe\xd5\x4f\x9b\xcf\x69\x8d\x89\x49\xdb\x3c\xb7\xfd\xc9\xce\x7f\x77\xee\x80\x6a\x3c\x13\x1a\xd3\x84\x33\xa9\x37\xec\x02\x3b\xf2\xdb\xce\xff\xde\x47\x25\x0d\xdb\x74\xf7\xa0\x1b\xe9\x1c\x1e\x35\x1e\x37\x4d\x6f\xc5\x5b\x59\x07\x06\x95\x9c\xe6\x76\xd0\xe1\xc5\x15\xee\xda\x0f\x83\xbf\x5e\xc3\xc7\xa2\xac\x23\xed\x2e\x50\xc6\x85\x1c\x25\xa4\x39\xa7\xb7\x63\xda\x4f\x94\x6a\xa2\xe1\x5f\x3b\x53\x52\xed\xcb\xbc\x38\x92\xe3\x53\xf9\x4a\x76\x45\x9d\xc1\xeb\xab\xbb\xe6\xbe\xba\x7f\x79\x39\x55\x59\x1b\xac\x7d\x02\x0e\xe3\x01\xbe\x95\xcf\x35\xe8\x0b\x0c\xe2\x3f\x50\x40\xa6\xce\x9e\xca\x8b\x60\x5e\x85\x4e\xe0\xaa\x37\x87\x83\x3a\xbf\xec\x62\xf9\x8f\x15\xb9\xb5\xc2\x7a\x2f\x48\xd1\x31\x88\x77\x1b\x2f\x24\x64\x1b\x2f\x25\xc3\x0c\x1a\x3a\x80\x56\x3b\x0f\x5f\x48\x90\x56\xd2\xa6\x6c\xda\x19\xd7\x75\x68\xd7\x73\x04\xb3\x2f\x2a\xd4\xb9\xb5\xfb\x72\xac\x5f\x9a\xd4\x65\xb9\xad\x37\x07\x6d\x55\x13\xc8\x24\x49\xdd\x21\x12\x49\xe2\xb0\x97\xe4\x3c\x6c\x52\x4e\xab\x83\x24\x11\x04\x8e\xf3\xb1\x96\xfb\x37\xbf\x3c\x3c\x3c\x58\xc7\x6c\xf2\xb6\xef\x1b\x54\x02\x35\xb7\x81\xe8\xd5\x53\x99\x80\x38\xf0\x54\xae\x44\xaf\x7a\xbc\xcf\x30\x34\x71\x70\x4d\x82\x70\x75\x2d\xdf\x08\xeb\x0d\x9d\xcb\xb7\xa6\xe5\xfa\xbb\x7a\xb3\x2b\xfa\xe9\xa2\xac\x6b\x47\xfd\x56\xb2\xf3\x3f\xff\x25\x68\x19\xd0\x5a\x69\x4d\xfb\x2c\x7d\xee\xd9\xac\xa8\xf8\xb3\xdb\xcd\xe3\x5e\x05\x50\x3e\xa7\x3d\xb5\xbf\x2d\x1e\x8b\x7d\xee\x72\x2c\x9c\x8f\xe3\xf8\xbc\x6b\x02\x88\x77\x89\x50\xb8\x62\x8f\xb7\xb4\xab\x0d\x22\x9f\xeb\xe8\xa5\x9b\x51\x88\x2e\x9d\x57\x2b\xb0\x73\x29\x92\x2c\x93\xfa\xa2\xb5\xb3\xd7\x22\xd1\x30\x2d\x23\x74\xd7\x93\xdb\x28\x2b\x21\x4e\xa4\x81\x16\x83\xfe\x12\xd4\xa0\x27\xc8\xd9\x62\x94\x68\x0c\x9b\xe7\x79\x28\xf3\xcd\x4b\x83\xb5\x67\xdf\xdb\x05\x17\x53\xa9\x4b\x86\x82\x7c\xdb\x4c\xec\x72\x26\xab\xfe\xef\xc7\x9d\x01\x40\xef\x94\x5d\x86\x07\xd7\x33\xea\x05\x3d\x05\xd3\x2d\x3a\xaa\xb2\x86\x15\x87\x08\xf3\xe2\x71\xf5\xae\xb5\xe8\x6b\xf1\xdd\x7b\xe2\xd6\xf2\x15\x63\x27\x71\x25\x38\x73\x7c\xf7\xcb\x4e\x05\xfa\xb5\xcc\x16\x6c\x04\xe6\xcf\xc6\xed\xde\xcb\xf3\x6b\xeb\x0d\x9a\x32\x4c\x3a\x50\xf6\xcb\x0c\xd8\x2a\xd8\xce\x3b\x7d\xc1\xab\x24\x93\x2e\x94\x16\xbb\xa8\x9b\x5d\x03\x06\x4c\x43\x2e\xcc\x73\x21\x61\x8e\xeb\x9e\xea\xa6\x96\x4f\x8d\x56\xd6\xd4\x80\x96\xf6\x68\x7e\x0d\xed\x3c\xb8\x28\x99\x5f\x9b\x0e\x3d\x4e\xba\x10\x6b\x34\x5e\xc2\x85\x31\xdd\xe3\x8c\xd9\xb7\xa8\x4d\xd6\xb2\xa4\xa8\xaa\x72\x09\xdf\xfb\x18\x54\x2a\x00\xc3\xf6\x3d\x9c\xdb\xc7\xdb\x90\x06\x56\xb4\x25\x95\xc7\x7e\xde\x30\xd9\x9a\xb1\x43\x03\x2f\x98\x5b\xb2\x36\x22\x70\x45\x41\xd0\xea\x25\x50\x41\x46\xbe\x97\x79\x03\xb6\x0d\x29\xe9\x35\x67\x41\xbc\xcf\x0b\x39\x8c\xfb\xdd\x6a\x28\xa8\x22\xa0\xb0\x42\x4f\xb9\x87\xd5\xf0\x68\xd5\x6b\x53\x5e\x3b\xae\x3d\x60\x9d\xd5\x47\xe7\xfd\x61\x3f\x5a\x08\x5e\xab\x56\xe5\xab\x37\x1d\x31\xc4\xb2\x24\xa8\x8a\x7a\xfd\xa4\x67\x79\x58\xea\xd4\xed\xa6\xbb\x17\x64\xd1\x69\x21\x3f\x54\xb6\xee\x79\x20\xf7\x57\xb7\x66\xee\x09\x37\x9e\xb1\x9b\x39\x61\xc7\x7c\x1f\x40\x22\xa3\xc1\xce\xa6\xfe\xb9\x19\xc5\x83\xaf\xd5\x10\xb5\x17\xe7\xe6\x7a\xbe\x2a\x76\x93\x79\xc9\x7a\x2b\xd1\x6e\x8d\x93\x3d\xd7\xa5\xc3\x11\xcc\x36\x95\x75\x11\x6e\x79\x7a\x8e\xb7\xe2\x64\x03\x45\x82\xbb\x2e\x95\x09\x01\x37\xea\x79\xfd\xa6\xcb\x58\xbb\xf8\xde\x16\x59\xae\x4c\xe2\xb3\xc3\x01\x8d\xd2\xd1\x59\x04\xd7\x11\xe8\xe8\xd7\x65\xa1\x5e\xf5\x3d\xe4\x3c\x95\xd9\x56\xf7\xc4\x6b\xdc\xc4\x54\x0e\xc4\xbb\xa1\x52\xa3\x24\x31\x37\x49\xca\xf0\x58\x26\x04\x96\xdf\xef\x08\xfc\xf0\xf3\x62\x5b\xd4\xc5\xf5\x19\xad\xb8\x1d\xf0\x28\xef\x3b\x1e\xaa\x84\x49\x6d\x7a\xcd\x6b\x3d\xfe\x49\x9b\x96\x1e\xcf\xf0\x51\xa4\x05\xcc\x31\xb7\xcd\x73\x83\x57\x26\xf1\xa3\x6c\x94\xa0\x87\xec\x78\x7c\x2d\xab\x5c\x51\x3b\xa3\x84\xb4\xf9\x9e\x0f\x0f\x5d\x7f\x0e\xf4\x38\x1b\xcb\x4d\xbe\x56\x55\x37\x59\xcf\x54\xfe\xaa\x63\x51\xaf\xcc\xf7\x7a\x39\x33\xc9\xbd\x7a\xf5\xe1\x7a\xc8\x04\xfd\x5a\xb5\xb1\xac\xea\xe1\xa2\xd8\xaa\xf2\xf1\x71\x5b\xa8\x4a\x5e\x37\xf5\x93\xaf\xbb\xcc\x9a\x72\xc8\xe4\xaf\x75\x55\x64\x75\x71\xad\xa4\x2d\x1f\x65\xfb\x75\xb1\x35\x1e\x1d\x9f\xef\x77\x9b\xfa\x5a\xef\x98\xd8\xc6\x3b\xe3\x91\x84\xba\xbb\x56\xae\x82\x2a\x97\xe8\xd1\xd5\x9f\x25\x9f\x64\x8f\xaa\xf7\x2b\x0c\x5e\xe3\x14\xbe\xf6\x42\x97\xb1\xf6\xb8\x13\x25\x7c\x10\x39\xec\x66\x07\x96\x5c\x1c\x14\x7f\x3c\x52\x75\xe3\xeb\x92\xd7\x53\xe1\x62\x9b\x40\xe5\xe3\x94\x2a\x2a\x9b\x01\xef\x3d\x51\xaf\xd8\x9d\xa7\x00\xcc\x28\x06\xba\xe7\x86\x11\x2c\xad\xf8\x56\x17\xd5\x3e\xdb\xaa\xa3\xe4\xa5\x41\xd4\x30\x32\xe5\x70\x7c\x8e\xe9\x00\x1e\x9a\x37\xf6\x28\x26\xe5\xc3\xed\x86\x71\xbb\x8f\x8e\xc7\x64\xd8\x6e\x54\x87\x35\xa3\x6f\x7c\xdd\xec\xbb\xb0\xa9\x16\x4f\x34\xbb\x6e\xff\x50\x95\xdf\xbe\x4b\xe1\x6f\xcb\xe3\x73\x55\x60\x7a\x77\xef\xf7\xac\xda\x64\x7e\xf1\xed\x90\xed\xf3\x22\xbf\xfb\xdf\x0f\x32\x65\xec\x74\x7e\x12\xaf\x75\xbc\x1d\x05\x33\x42\x71\x9b\x7a\xb9\xc9\x8f\x60\xdc\x48\x90\xad\x0a\xa5\xdf\xf9\xd7\x1b\x14\x2d\xd2\xd2\x8a\xab\x0b\xf4\xf4\xfc\x12\x72\x78\xcf\x81\x9f\xea\xf1\xa3\x85\x65\x9a\xfd\xec\xf7\xaa\xd8\x7e\xf8\xf2\x54\x6c\x0f\x77\x13\x05\xd4\xed\x40\x6e\xb8\x5b\x40\x27\xdc\x95\x55\xe1\x8f\xa5\xf6\x97\x29\xfd\x3f\xc2\x74\xa9\x73\xdc\x31\x59\x28\xc2\x4f\x40\x36\x2b\xb7\xa2\x6b\x71\xd6\xdd\x1b\x59\x73\x8a\xa4\xc5\x79\x7d\x92\xad\xb7\x47\x82\x3b\xe6\xab\x3b\x0f\x35\x73\x37\xc0\x9d\x8a\xbd\xf7\xca\xec\x16\x3d\xe5\xae\x3d\x76\xc8\x49\xd6\x38\x20\x0e\x9c\x13\x0e\xe5\x76\xb3\x86\x59\x35\x2f\xfc\x4d\x0e\x43\xbe\xfe\x6e\xbc\x51\x91\x91\xbb\x97\x32\x7d\xec\x53\x76\xf4\x9b\x49\xac\xae\x9a\xe4\xd8\xc7\x79\x32\x90\x28\x70\x16\x6e\xae\xf4\x96\xe2\x98\x98\x1c\x54\xdc\x9e\x8b\x4e\x0f\xa3\xaa\xf6\x14\x9d\xbc\x44\x91\xcc\x84\x57\xbd\x65\x26\x34\x76\xa1\x49\xd8\x31\x7e\x8c\x16\xd4\x56\xec\x1f\x27\x81\x07\x95\x46\x7f\xf0\xc3\x53\x7d\x00\x16\x3b\xe7\x58\x32\x1f\x77\x9c\xb1\xc7\x50\xf3\xc8\x22\x77\x6c\xec\xbc\xf5\xa2\x43\x8f\x46\x73\xbb\xdd\x6e\x6e\x49\x93\xa0\x65\xd0\x55\x1c\xe1\xa4\x45\x8b\x56\xdb\xaa\x57\x72\x20\xcc\xb8\x5e\x07\xe6\x26\x58\x97\xdb\x6d\xa1\xe5\x60\x1f\x46\x3d\xe2\xeb\x2a\xc2\x49\xab\xe9\x5d\x91\x6f\x9e\x77\xe3\xf1\xec\x34\x0e\x78\x48\x87\xe4\xf3\xea\x74\x76\xb8\xd1\x4c\xf2\xc6\x2a\xb6\x90\x51\x46\x69\x8d\x6b\x9b\xfd\x53\x51\x6d\x4c\xbf\x65\xf5\xcc\x56\x41\x23\xbc\x86\xed\xbb\x23\x60\x8f\x60\xc1\xe1\xdb\xca\xcb\xf6\xb9\xf7\xab\xff\x5a\xdc\x7f\xdd\xd4\xfe\x6e\xb3\xf7\xf3\x02\x15\xf3\x61\xf3\xad\xd8\xfa\x98\x08\xf1\x26\x58\xbd\x6d\xf6\x87\x67\x3d\x6d\x06\x8d\x0c\xfb\xf1\xf7\x5f\xd4\x01\xe7\x9b\x76\xfd\xa8\x0e\xb3\xfc\xfb\xf2\x5b\xfb\xfe\xf6\xa1\x2c\x6b\x99\x3e\x4d\x1f\xb7\xb7\x1f\x70\x60\x60\x46\x7b\xc7\xf5\xe5\xbb\x35\x0b\xfe\xe5\x8b\xdc\x45\xc9\xc9\xcf\x9e\x23\xff\xf2\xa5\xc8\x37\xb5\x7c\xa7\x85\x00\xa2\x0c\xc3\x1e\x35\xa1\x2c\xcc\xc4\x3c\x63\xe1\x7c\xad\x20\x0f\x55\xf9\xfa\x4e\xca\xe7\x7a\x5b\xd4\xb2\x52\x5c\xf4\x7d\xd9\x96\x59\xbe\xd9\x3f\xde\x21\x35\x2a\x9e\x85\x7a\xe6\x11\x10\x94\x3a\x80\xc1\xf7\x72\x7a\x80\xd9\x4e\x1a\xa4\x1e\x57\xde\xef\xeb\x6d\x76\x3c\x7e\xf8\xa2\xbc\xb9\xef\x2c\xb8\xd6\x74\x46\x03\x6d\x9f\x29\x68\x9d\x9c\x4d\xbe\x2d\xee\x8c\x8a\x4d\x73\x05\xbd\xf5\x6d\x78\x0f\x2d\x42\xae\xf3\xbd\xde\x85\xdb\x68\x9d\x86\x81\x15\x86\xf9\xd7\x6f\x94\x7a\x97\x4e\xf8\x74\xf8\x98\x69\xa4\x5e\x33\x48\xa8\x99\x7a\x5c\x46\xed\x6a\xc6\x84\x6e\x36\x1d\x8e\xc6\xab\xea\x98\x8c\xeb\x86\xfb\xaa\xc8\xf2\x75\xf5\xbc\xbb\x3f\xae\x3c\x27\x3a\x0c\x0c\x83\xfd\xd1\xbb\x2f\xf3\xef\xb7\x44\xe6\x5f\x56\x2c\x1e\xcf\x2b\xaf\x92\xcd\x39\x0d\x79\x82\xeb\x60\xd5\x66\xdc\xa3\xef\x96\x38\xd5\xf6\xdd\xe8\x55\x2b\x17\x01\x0d\x86\xa0\x6b\x72\x1b\x3c\x3a\x0d\x82\xa6\xc9\x3a\xea\xc1\x76\x0c\x67\xd6\x5f\x3f\x55\xe5\x4e\x19\x46\xac\x3e\x79\x6c\x75\x1d\xac\xde\x87\x07\x69\xb7\x3c\x92\xfa\x0e\x17\x5d\x86\xb1\xd9\xc0\x08\x9e\x2c\x68\x48\x86\x24\xc5\xce\x3a\xdd\x23\x9d\x13\xb9\xf5\xa2\xce\xee\xfd\xe6\xec\x60\x70\xa7\x3d\x52\xe8\x56\x5b\xf1\x7f\x3c\x8c\x01\xea\xf4\xf6\x96\x85\xf8\x00\x97\x03\x2b\xb3\x2d\x4c\x4f\xfd\xe0\x9e\x7f\x26\x4d\xab\xd4\xc4\x77\xbc\xba\xf3\x06\x27\xc4\xb7\xa1\x1c\x8a\xc3\x91\x60\xda\x69\x11\x97\xf7\xbd\x87\x5a\x34\x0a\xed\xb1\x5a\xf7\xdb\x8f\x31\x7e\x84\xfd\xb0\xdd\x1c\x18\xb3\xad\x06\x50\x97\x5f\x8b\x76\x3e\xb7\xd9\x80\x5c\x50\x28\xba\x5d\x92\x8d\x7b\xa0\xf0\x49\x3c\xf4\x8c\xc8\xba\x8d\xbd\x90\xce\x4c\x79\xbc\xf8\xd1\x49\x7f\xbf\x28\x35\x7d\xb3\x9a\xa9\xd5\x54\xb4\x61\x77\x41\xdb\xe8\xc0\x50\xb3\x32\x94\xce\x55\xc6\x8d\xe0\xcb\x93\x3b\xad\xdc\x3b\x4e\x94\x32\xec\xfd\x7b\xab\x10\x8d\xe1\x88\x5c\xbc\x5b\xb9\x5e\x48\x11\x1d\xef\x56\xcd\x7c\x6b\x24\x13\x28\x76\x23\xb1\x02\xcd\xe3\xca\xf6\x70\xf2\xcd\x48\x8b\x14\xe9\x17\xd1\xef\xef\xe3\xcb\xfd\x43\xdf\x00\x1c\x17\xdc\xfd\xe7\x16\xa1\x14\x46\xdb\xe4\xb6\xe3\xa3\xf4\x50\xb0\xcf\x79\x67\x6c\x58\x7a\x03\xbf\xdb\x1c\x0c\x21\x6d\x01\x7a\x65\x67\x31\x59\xae\xef\xde\xba\x3d\x88\x7e\x8a\xec\x4a\x40\xa7\xec\x8d\xf5\x55\x9d\x73\x70\xb4\x43\x0b\xc6\xc7\x95\xa6\xa4\xbb\xf3\x67\xd2\x9e\x65\xe6\xd9\xf1\xe9\xbe\x34\x72\x80\x75\xf6\xac\x6a\x76\xfe\xdc\x98\x62\x8f\x57\xd7\x74\xb5\xab\xfe\xbc\xe0\xe5\x4d\x4a\x3d\x18\x1b\x46\x50\x98\xb4\x17\x14\x06\x33\xb6\x99\xb7\x95\x30\xa7\x9f\x51\x79\x3d\xeb\x4c\x79\x7e\x05\x30\x7b\xec\xb3\x17\xdd\x88\x4b\x77\xa0\x55\x8f\x31\xa9\xcd\x32\xa4\xcd\x84\xa7\xfe\xf7\x07\x85\x69\x6e\x37\x50\xa9\x7d\x33\x8c\x19\x43\x16\xb7\xce\xad\x79\xcf\x26\x7d\xca\x73\x78\x5e\xad\xba\x55\xb2\xab\x7a\xef\x89\xb5\x76\x4e\x02\x6d\x26\xf0\x82\xd9\x89\xfc\xeb\xcb\x55\x7b\x32\x82\x27\x0b\xae\xc1\xe7\x70\x09\x1e\x40\x46\x60\x69\x74\x75\xa7\x85\x57\x1c\x96\x16\xeb\x7c\xac\x27\xb3\xf5\x58\x42\x75\x85\x5b\x84\x25\xc9\xd2\xf3\x48\xd3\x2e\x80\x3b\xd7\xe2\x4a\x55\x0d\xa3\x96\x0b\xc9\x06\xb7\x75\xdb\x35\x72\x44\xaa\x58\xe5\x2a\xf5\xd6\xe5\x2c\x5d\x90\xdd\xf7\x73\x7f\xd6\x38\x91\x6a\xa5\xf1\x1f\x8a\x22\xbf\xcf\xd6\x5f\x4f\x6b\x84\x85\x64\x30\x49\xc6\x80\x6a\x9d\x4d\xa5\x31\x2f\x9d\x43\xa9\x11\x50\x58\x5f\x79\x0e\xcc\x35\xed\x41\x67\x8b\xbc\x67\x86\xe0\x9a\xc8\xdd\x37\x6a\xe4\x25\x7b\xde\x6a\xf1\x58\xad\x9b\x5d\xf9\xda\x9b\x63\x54\x8e\x90\xbd\x7c\x0b\x66\x65\xd9\xeb\x71\xb8\xaa\xec\xf5\x68\x57\xe4\xfb\xd9\xeb\x51\x85\x3f\xa2\x91\x7f\x7c\x79\xbc\x79\xae\xb6\xbf\xfe\x0d\x58\x72\xb3\xd9\x65\x8f\xc5\xa7\xe3\xcb\xe3\xc7\x6f\xbb\xed\xe7\xf5\x53\x56\x1d\x8b\xfa\xcb\x7f\xfd\xe7\xdf\xfd\xe4\xfa\xb7\xe3\xcb\xa3\xf7\x6d\xb7\xdd\x1f\xbf\x5c\x3d\xd5\xf5\xe1\xe6\xd3\xa7\xd7\xd7\x57\xf2\xca\x49\x59\x3d\x7e\x62\x41\x10\x40\xc1\x2b\xef\x61\xb3\xdd\x7e\xb9\x82\x0e\x7f\xe5\xc1\xf4\xf5\x2f\xe5\xb7\x2f\x57\x68\x68\x15\x79\x34\xba\xba\xfd\x0d\x03\xde\x4a\xa8\xbf\x32\xce\x42\xf6\x77\xfe\xaf\x57\x5e\xfe\xe5\xea\x1f\x82\x84\xd4\x8b\x49\x94\xc4\xeb\xc0\x23\x34\x8d\x49\xc0\x08\x0f\x63\x12\x84\x09\x11\x71\x48\x02\xc1\x08\xa5\x31\x09\xd2\x88\x30\x11\x12\x1a\x13\x9e\x88\x8c\x30\xce\xe1\xcf\x0b\xbc\x80\x92\x80\xc7\x84\x32\x0e\x28\x82\x90\xfb\x24\xe0\x8c\xd0\x20\xf6\x09\x25\x34\xda\xfa\x84\xf3\x88\x30\x06\xa5\xc2\x10\xfe\xb0\x94\x4f\x28\x4f\x48\x20\x92\xb5\x4f\x82\x50\x78\x81\x2f\xcb\x04\x2c\xf2\x09\x8d\x7c\x12\xc4\x22\xa3\x24\x0a\x99\x27\x3f\x55\xa1\x94\xf9\x84\x85\xd4\x13\x84\xf2\x58\x7d\xaa\x57\x51\xe8\x13\x4e\xc3\xb5\x4f\x04\x0d\x89\x48\xa9\x4f\x52\x1e\x91\x98\xc7\x3e\x25\x61\x24\xf0\x1b\x11\x22\x86\xca\x92\x40\xf8\x84\xb2\xd4\xa7\x24\x88\x84\x4f\x78\x12\xfa\x84\x45\x14\xb0\x47\x3e\xe1\xa9\xf0\x49\x98\x26\xf2\x1b\x25\x01\x0b\xa1\x94\x08\x05\x12\x97\x30\x46\x44\x02\x2f\x28\xe1\x0c\x4a\xc6\x09\x89\xa1\xa0\x00\xae\x13\x0e\xd8\x05\x8d\x08\x4d\xbc\xc0\x23\x3c\x8a\x49\x40\x23\x24\x02\x59\x8a\x9c\x8e\x89\x20\x41\x4c\x22\x0a\x3c\x4e\x5e\xa0\xaa\x35\xd4\x11\x40\xeb\x81\x9c\x28\x49\x81\x1c\x9f\x24\x21\x10\x0b\x1c\x8d\xa0\x8a\x30\xf1\x09\x13\x40\x46\xd4\x7c\xa3\x49\x04\xf4\xf1\x18\x10\x33\x9f\x84\x31\xe0\xce\x04\x61\xdc\xc3\x8f\xc0\x0b\x02\x78\x1c\x12\x9a\x50\x8f\x92\x90\x85\xea\x53\x71\x2f\x89\x80\x18\xce\x22\xf8\x53\x0f\x83\x24\x04\xba\x41\x44\x31\xb6\x9f\x52\x86\xe2\x52\xdf\x68\x14\xbd\x00\xd7\x18\xd0\x2d\x81\x7d\x42\x43\xe8\x11\x88\x31\x23\x3c\x4d\xe1\x4f\x76\x14\x1a\x42\x39\xbe\x26\x14\x5a\x07\x7d\x4a\x04\x29\x34\x2c\x22\x51\x0c\x0d\x21\x0c\x05\x4f\x42\x2c\x1f\x50\x92\x70\xf9\x3f\xc2\xbe\x46\xb1\x0c\x15\x02\x38\x9c\x0a\x22\x38\x23\x2c\xe5\x84\x25\x09\x11\x82\x91\x98\x45\xf0\x1f\xde\x52\xf1\x42\x49\xcc\x9f\x48\x40\xff\xd8\xf9\x8c\xd0\x88\x92\x84\xd2\x35\xa1\xd0\x10\x8f\x70\x90\x15\x74\xd4\x50\x24\x92\x14\x0a\xfd\x25\x88\x04\xe1\x11\xb4\x2c\x61\x24\x0c\xa0\x43\x09\x96\x91\x44\x24\xf0\x87\x4c\x04\xfe\xc1\x63\xba\x86\xf2\xd8\x87\x24\x47\x58\xc2\xe5\x17\x11\x85\xff\x1d\x93\x80\x67\x40\xa1\x87\x1f\x92\xfb\x22\x85\xaa\x3c\x4e\xd2\x34\x52\x9f\x4a\x2c\x40\x0b\x5f\xfb\x30\xf6\x80\xcd\x11\x4d\x08\x0c\x86\x18\x1a\x47\x85\x64\x11\x15\x50\x49\x44\xb8\x88\xf1\x7f\x44\x05\xb4\x84\x85\x24\x88\x38\x11\x30\x08\x53\xe8\x62\x11\xa1\x2c\x21\x94\x73\xe0\x02\x76\xb5\x30\x4c\xe1\xff\x1f\x3b\x41\x58\xcc\x49\x18\xc7\x6b\x6c\x33\x4a\x14\xf8\x00\x1f\x2c\x68\x44\x1b\x08\x39\x88\x41\xa4\xc0\xfe\x48\x49\x9b\x05\xc9\xd6\xa7\xd0\x21\x05\xa1\x2c\xce\x48\xca\x13\xf8\x6b\x3a\x0b\x34\x8f\x51\xd1\xf6\x05\x40\x03\x64\x50\x96\xe0\x97\x27\x12\x32\xb6\x26\x14\xa8\xa6\x72\x40\xb0\x00\x74\x0d\x07\x58\x94\x46\x00\xfd\x33\x88\xf1\x0f\xaa\x23\x49\x2a\x3c\x4e\x42\x1e\x42\x57\xc0\x2f\x6b\xa5\x22\x82\x08\xb4\x94\x62\x0d\x12\x97\x11\x1e\x85\xf0\x27\x7b\x1b\x32\x2e\x08\xf9\x13\x11\x2c\x5c\x13\x1a\x30\xbd\x62\xca\xcd\x8a\x13\x55\x2f\x55\xf5\x0a\x0a\xf5\xc6\x09\x49\x99\x8f\x5f\x32\x18\x77\xf0\xa7\xfa\x32\xc8\x87\x05\x09\xe1\x02\x44\x12\xa9\x3a\x81\x63\xb2\xce\x14\x28\x4d\xb0\xb3\x01\x13\xa0\x22\x64\x06\xf6\x64\x18\xfd\x3e\x09\xb0\x0d\x40\x25\x25\x01\x8c\x96\x38\x22\x71\x3b\xf6\x38\x0a\x11\x39\x9e\x40\x37\xa2\x0c\xc5\xd6\x28\xd7\x20\x4a\x09\x8d\x61\x9c\x50\xa8\x37\xcd\x08\x17\x84\x0b\x55\x9a\x05\xd8\xbe\x27\xd0\x16\x50\x8c\x06\x14\xa5\x1d\x37\xd2\xa6\xdc\x57\xda\x5a\x4a\x3b\x69\xa4\x2d\x47\x1e\x4a\xf2\xdf\x13\x80\xf3\x42\xc2\xe3\x2d\xe8\x3c\x0f\xba\x59\xba\x46\x25\xad\x88\x08\x13\x10\x00\xa8\x7a\x89\x11\xd9\x09\x78\xa0\x07\xe3\xa8\x40\x46\x0b\x24\x24\xf9\x63\x17\x91\x04\xda\x25\x44\xc6\x61\xee\xc1\x0f\x49\x71\xc2\xb0\x4f\xae\xa1\x6f\x47\xbe\x54\xca\x22\xc6\x2e\x24\x60\x44\x30\x5f\x49\x14\x75\x07\x8c\x5a\x2a\xb8\xa2\x15\x55\x3f\x0d\x33\xc2\xe3\x04\xfe\x5a\x16\xc2\x3b\x91\x82\x8e\x8a\x51\x47\x51\xca\x40\x01\xa3\xe6\x22\x94\xc9\x2f\x19\xe1\xa4\x99\xca\xd2\x08\x15\x9e\xec\x13\x14\xc4\x22\x39\xce\xb1\x15\x04\x5a\x85\x35\x40\x13\x48\x98\x80\x36\x8d\x65\x1b\x05\x23\x82\xa1\x02\x89\x00\x18\x14\x09\x07\x59\x92\x30\x85\xe6\x84\x29\x89\x51\x5a\x71\x94\xa1\x1a\x0e\x51\x11\x05\x01\x61\xf0\x38\x0c\x12\x12\x32\x22\xe7\x39\x20\x14\x06\x3b\x8f\x39\x0e\x54\x68\x1c\x8c\x4e\x86\x9c\x4e\xb9\x2f\x15\x24\x8b\x93\xad\x4f\xe2\x18\xde\x08\x50\x1e\x09\x30\x85\x71\x9f\x44\x00\xc8\x03\x9c\x39\xa8\x4f\x42\x11\x66\x94\xb0\x18\x34\x3e\x8b\x1b\x8d\x8f\x6c\x8e\x63\x1c\xaf\x8c\x09\xc9\x53\xc1\x98\xe4\x6b\x98\x72\xe0\x06\x10\x0c\x6f\x7d\xc2\x19\x4c\xfd\x3e\x11\x20\x3f\x78\xce\x18\xe1\x4a\xc0\x21\x74\x24\x16\xc7\xaa\x13\x44\xa0\xf3\xa0\xd1\x29\x45\xc5\x0e\xff\xa9\x9c\x09\xa1\x9e\x20\x94\x6b\x0c\x46\x11\x09\x0e\x47\x2e\xb0\xc3\xc3\x60\x0a\x22\x39\xb8\x59\x84\xe3\x2b\x08\x19\xe1\xd0\x9b\x41\xa5\x80\x78\x40\x1c\x31\x56\x82\x54\xa7\x51\x46\x44\x44\x9a\x11\x08\x73\x2e\x2c\x4e\x92\x14\xfe\x94\x54\x45\x0c\x7c\x7f\x81\x85\x03\x2e\x74\x70\x16\x83\x79\x38\xa6\xb2\x21\x34\xa6\x19\x09\x41\x00\xed\x4a\x43\xea\xc3\x48\x78\x20\xd7\x58\x7d\xa2\x70\xa8\x9c\x62\x59\x00\x6b\x17\x1e\x70\x18\x58\x21\x74\x7c\x60\x60\x0c\x9a\x24\xc4\x2e\x89\x6a\x29\x94\xeb\x09\x16\xc2\x7a\x0a\x95\x81\x48\x51\xf3\x00\xbb\x68\x44\x78\x9c\x62\x73\x41\xf3\x40\x33\x59\xc0\xb0\x5f\xb1\x94\x6f\x61\x45\x01\xa2\x25\x3c\x01\x2d\xca\x49\x14\x11\x96\x0a\x92\xb0\x90\x84\x94\x63\x1d\x8c\xa6\x84\x09\x41\x44\x8c\xff\x62\x21\xd9\x8c\x63\x31\x86\x59\x41\x2e\xb4\x22\x9a\x66\x14\xa4\xe2\xc9\x4f\xd9\x46\x0e\x13\x27\xaa\x07\xa0\x96\x73\x1f\x26\x3f\x2c\x1c\xa6\x94\xb0\x34\xc5\x49\x39\x88\x43\x98\xbb\x24\xdb\xe2\x08\x64\xc9\xfe\xb8\xfa\x74\xfb\xdb\x63\xb7\xaa\xfc\x7b\x1a\xc8\x95\xa8\x5f\x3d\x6f\x8b\x2f\x57\xc5\x4b\xb1\x2f\xf3\xfc\xca\x5b\x6f\x37\x07\xeb\x99\x5a\x91\xc2\x02\x94\x0a\x98\x2d\x3d\x0a\x93\x33\x5f\xfb\x94\xc8\x3e\x9a\xc6\xbe\x80\x96\x7a\x94\xa4\x49\xe4\x47\x44\xe0\x9a\x05\xbe\xc3\xd0\x82\xa5\x48\x48\x12\x06\xeb\x3a\xca\x63\x3f\x26\x29\x85\xd9\x01\x95\xaa\xd2\x05\x4a\xcf\xf1\x90\x13\x0a\x8b\x24\x1e\x7a\x8c\xb0\x30\xc6\xc5\x01\xe8\xb4\x00\x24\x4b\x83\xd4\x8b\x49\xca\xd4\x57\x4a\x52\x01\xfa\xa8\x69\x73\x10\x79\xd0\xe1\x60\x91\xc8\x78\x0a\x32\x91\x33\x1a\x48\x9b\xa6\x0c\x17\xb4\x22\x88\x90\x19\x5d\x9b\x42\x42\x81\xf4\x80\xa4\xd0\x41\x18\xb0\x93\x25\x40\xab\x88\x53\x94\x86\xcf\x64\x5f\x09\x22\x5c\xfd\xc8\xee\x44\x53\x20\x1e\xa6\x4a\xd4\xc8\x4c\x78\x14\x7a\x13\x90\x1d\x89\x10\x34\x04\x50\x99\xc0\xb8\x62\x51\x2c\xab\x97\x13\x9c\x47\x09\x2c\x14\xd3\x14\x40\xa5\x5e\x94\x6a\x80\x25\xb0\xb8\x85\x21\x9a\xb4\x1a\x3a\xe4\xb0\xdc\x07\x4e\x33\x22\x22\x0e\xa4\x04\x1c\x1b\xf0\xe9\xf1\xf6\x37\xd8\x51\xdc\xfe\xcd\xf0\x39\xc7\x2d\x4a\x73\xf8\xf5\x54\xec\x0a\x3f\xcf\xaa\xaf\x3e\xec\x37\x56\x9e\x7c\x6c\x6f\x70\x56\x9f\xdb\x8b\xe7\xec\xf8\xd5\x81\x61\xab\xac\x6e\x66\xa3\x90\xd1\x2d\x06\x71\xec\x4b\x05\x61\x96\x6a\xb7\xcd\x43\xe5\x5a\x63\xfd\x93\xa9\x5c\x46\xdd\x22\xaa\x7a\x36\xfc\x43\xf0\xdd\x26\x16\x93\x7f\xce\xdd\xbb\xce\xd9\x4c\xab\x8b\x63\x22\xdd\x20\xd4\x95\x83\xfc\x35\x9e\x3e\x46\xa6\xe3\xd2\x53\x14\x8d\xe4\x4b\xe9\x95\xc3\x60\xb3\xa7\x16\x46\x1f\x7b\x47\xd9\xc6\x1b\x4e\x26\xd8\x6a\xdd\x2b\x07\xf3\x6d\x9d\x45\xd5\x69\xe9\x11\x4f\xcd\x74\x38\x27\x01\xe1\x92\x14\x9a\x8b\x79\xfb\xa3\x53\x3d\x2e\x4e\xd9\xd8\xcf\xa4\x38\x11\x5b\xe1\x83\x99\x3a\x3d\x78\x27\xd9\x7e\xb3\xcb\xa4\xed\xa1\x3a\xda\xf6\x9e\xb7\x6d\x20\x83\x4b\x38\x9b\x4c\x15\xe9\x82\x6d\x9c\x50\x16\x63\x62\x9c\x52\x10\x9d\xe5\xda\xd0\x1b\xa7\x96\xc7\x73\xfc\x86\x7e\x79\xc1\xa8\x70\xae\x4e\x37\x99\x5f\xea\x66\xb3\xb8\x90\xc6\xf1\x53\x4a\x2b\x9e\x9f\x52\xd4\xe4\xfa\xe9\x18\xe6\xf0\xfd\x84\xdc\xa1\x76\xc2\x1c\x87\x4f\xcb\x29\x85\xc6\xf8\x3d\xa3\x34\xf2\xdb\x6a\xf2\x69\x98\x5c\xcc\x3b\x21\x11\xe9\x8f\xf1\x6d\xe8\x84\x6c\x5a\xd7\x9c\x54\x1e\x59\x76\x2e\x16\xc9\xae\x1e\x96\xe5\x2e\x15\xba\xab\x9b\xfb\xb9\xd6\x45\x06\x00\xd4\xa8\x1b\x78\x6b\x0e\xac\x51\xa0\xd1\xb1\x63\xc5\x0c\x02\x9e\x68\x1c\xf9\x30\x05\xd0\x50\x39\x01\x85\x84\x0c\xfb\x94\x0c\xf6\x84\x51\xc0\xbe\xc8\xc7\xc0\x1d\xb2\x9d\xeb\x84\x38\x30\x79\x0d\xc3\x28\xa6\x0c\x03\x98\xd2\x9b\x82\x1b\x15\xe0\x98\x2d\x87\x32\x5f\x9d\x00\x6a\xec\xa5\x17\x3b\xa6\x0c\x8b\xed\x2c\x4c\x0e\xb9\x9e\x83\xcf\x21\x78\x87\x5f\x66\xc3\xde\x61\x07\x4d\x7d\x58\x4e\x42\xe9\x02\x9e\x09\x3c\x22\xe5\x49\x0c\xc6\xfb\x8b\x88\xf0\x82\xd2\xbb\xa0\xe0\x9a\x15\x2b\x91\xcd\x2f\x72\xc3\x2b\xd6\xe9\xa4\x34\xe1\xe6\x3a\xf1\x5e\x1b\xee\x13\x80\x6a\xcc\x4f\x40\x99\x03\x7f\x16\xf0\xd8\xe8\x37\x9d\x74\x8d\x5f\x1d\xe5\xe6\x63\x49\xa7\xf9\xcc\xa0\xca\xf5\x6a\x8c\x86\x09\xd7\x60\xf9\xa8\x41\xee\x78\x23\x09\x72\xbc\x58\x56\xb5\xe1\x82\xec\x5e\x8c\x0d\x2d\xb5\x5c\x2f\x0c\x96\xcc\x5c\x59\xb9\x88\x1b\x74\x86\x96\x8f\xcc\x1a\x8c\x37\x3a\x69\xc6\x8b\x65\x55\x37\x4e\xd7\x8e\x67\x36\x67\xcc\x97\xfd\xfa\x9b\x37\x0e\xde\xb8\x00\xc6\x28\x9c\xe3\x02\xae\x6b\xcf\xce\x13\x7c\x4e\x49\x4d\x47\x2f\x2b\x38\x53\x13\x2f\x43\x6a\x17\x59\xea\x22\xf9\xcf\x70\x51\x1c\x9a\x17\x2e\x87\xb4\x37\x4f\x5c\x0c\x75\x7f\xde\x38\xcf\xd5\x72\x9c\x17\x17\xc1\x3a\xc0\x8c\x4b\xe0\xee\x71\xa3\x39\x11\x92\x8e\x7b\xe8\xec\xf2\xfe\x23\xd4\xf2\xa5\x94\xd9\x4f\x35\xe0\x97\x64\xb5\x9b\xb4\x64\x94\x59\x6b\x86\xdf\x27\x78\x84\x37\x38\xbf\x1a\x53\xcb\x72\x45\xb4\x24\xd9\xe9\x64\x53\xf8\xac\xa6\x9c\x7c\x42\xb6\xf0\x00\xa2\xd9\x67\x8e\xae\x0c\x4f\x53\xab\x4b\x52\x0b\x4e\x72\x2d\x9c\xe0\x5a\x38\xd0\x01\x46\x56\x0d\xea\xcd\xc9\xf3\xeb\xbc\xf6\xb1\x4b\x76\xf0\x8b\x6d\x61\xff\xd4\x1e\x9d\x0e\x5c\x2e\xcc\x3e\x7b\x1c\x3c\x74\x9b\x7d\xe4\xb4\xd8\xb8\xf9\x92\x7d\xf7\x54\xfe\x2c\x38\x3d\xbd\x94\xb2\xc5\x98\x97\x23\xf4\x76\xef\xa7\xae\x47\x4e\x3a\x40\x76\x6c\x5a\x2f\xda\xb2\x11\x2d\xa2\x45\xfb\xfc\x09\x4f\xa2\x27\xb9\x80\xe4\x4f\x8f\xd7\x59\x5c\x50\xba\x66\xf2\x34\x76\xee\xd9\xd0\xc0\x66\x7b\x7a\xff\xe9\xde\x82\xcd\xe3\xc5\x4c\xbd\x2b\x26\x78\x81\x2c\x1d\xe4\xc5\x9c\x83\xe7\xd1\x23\xc9\x33\x4f\xcd\xe6\x1e\x84\xcd\x3d\xd7\x58\x76\x82\x30\x75\x24\xb0\x70\xdf\x3d\xb9\x8d\x1e\xc1\x37\xaf\x4f\x88\x79\x5a\x22\x99\xd0\xd7\xc1\xd8\xf8\x98\x3c\x74\x1c\x8e\x16\xe7\x08\x0d\xa7\x18\x30\xaf\x79\xe1\x9f\xd0\x3c\xeb\x58\x6e\xc9\x79\xee\xc8\x41\xda\xbc\x53\xa5\xe1\xa3\x95\x79\xfc\x89\x2f\xca\x9f\x13\xee\xff\x4f\xba\xc4\x3e\xf7\x8a\x70\xf2\xda\x6a\xfe\x15\xd3\xd8\x25\xd0\xa5\x2e\x44\x2e\x82\x64\xe2\x24\xfb\x07\x9e\xf7\x5c\xf8\xe4\xa4\xdf\xb1\xfb\xe9\xcf\x47\x7b\x74\x97\x1c\x79\x2a\xb5\xc8\x39\xc6\x29\xe7\x19\x5a\xcc\xb9\x41\x9c\x79\xf7\x30\x2b\x97\xca\xf9\x4b\x83\xb3\xf4\xc0\xb9\x86\x39\xcb\x0c\x3c\xfe\x0c\xa3\x95\x51\x8a\x7e\x26\x13\x85\x4b\xde\xd0\xff\x93\x2e\xdc\xe7\xde\x98\x4f\xdc\x84\xff\xdc\xb7\xce\x3f\xe7\x95\xea\x05\xaf\x35\xc7\xa4\xf3\xff\xfe\xe2\xe0\xcf\x3d\xe2\x9f\x9b\x7c\x6b\x72\x9a\xfd\x51\xeb\xc6\x8b\x59\x06\xce\x35\xa2\x59\x74\xe7\x3e\x73\x01\x0e\x0c\x9a\x5e\x7f\xcf\x67\xe3\x4d\x55\x96\x35\x39\x54\xc5\x43\x51\x35\x26\xf9\xc7\x75\xeb\x9d\x70\x8d\xef\xe5\xf6\x63\x10\x68\x75\x2d\x0f\x47\xef\xb3\xfd\xbe\xa8\xee\xcc\x5f\xde\x3e\x7b\x31\x03\xa2\x39\xde\xeb\x81\xcb\xde\x14\x91\xbb\xec\xb1\xd8\xd7\x19\xd0\x79\xa3\x1b\xe5\x7f\xb6\xdf\x87\xcd\x7b\xed\x49\x0f\x8a\x06\x36\x14\x06\xea\xb0\xa1\x7a\xb8\xa8\x03\x17\xeb\xe1\x62\x0e\x5c\xbc\x07\xc5\x1d\x50\xa2\x07\x25\x1c\x50\x61\x0f\x2a\x74\x40\x45\x3d\xa8\xc8\x01\x15\xf7\xa0\x62\x07\x54\xd2\x83\x4a\x5c\x50\x3d\x7e\x25\x0e\x7e\xa5\x3d\x5c\xa9\x03\x57\xda\xc3\x95\xba\x70\xa5\xa9\x82\xba\xdf\x66\xeb\xaf\xed\xfb\x63\x5d\x65\xaf\xf7\x45\x55\x7d\x1f\xec\x30\x3a\x48\x5b\x97\xf9\xd0\x05\xdb\xf5\x1c\xf3\xa1\x13\xd6\x85\x97\xba\xf1\x32\x17\x5e\xe6\xc6\xcb\x5d\xb0\xdc\x0d\x2b\x5c\xb0\xc2\x0d\x1b\xba\x60\x43\x37\x6c\xe4\x82\x8d\xdc\xb0\xb1\x0b\x36\x76\xc3\x26\x2e\xd8\x64\x00\xd6\xc5\xdf\xc4\xcd\xdf\xd4\x85\x37\x75\xe3\x4d\x5d\x78\xd3\x01\xbc\x03\x3d\x70\x5b\xec\xca\xfd\x60\xe7\x53\x6f\xdb\x7a\xda\xdf\x16\x44\xd7\xdb\xda\xdf\x36\x84\x85\x83\xf6\x70\x30\x0b\x07\xeb\xe1\xe0\x16\x04\xef\x41\x08\x0b\x42\xf4\x20\x42\x0b\x22\xec\x41\x44\x16\x44\xd4\x83\x88\x2d\x88\xb8\x07\x91\x58\x10\x49\x1f\xc2\xe2\x47\xd2\xe3\x47\x6a\xe1\x48\x7b\x38\x52\x0b\x47\xda\xc7\x61\x49\xfd\x7d\x7c\x12\xf3\xba\x45\x83\x71\x1e\x3d\x31\xf7\x39\x8a\xb9\x13\xab\x29\xff\x34\x2d\x18\xd2\xc4\xa4\xeb\x69\x1b\x27\x2f\x1b\x24\x66\xac\x8c\xa4\x64\xfe\x09\xea\xfb\xff\x05\x00\x00\xff\xff\xf1\x19\x38\x18\x02\x83\x05\x00") + +func web_uiAssetsConsulUi1931ddc38430fffd3fdb3a7ec5b01c18CssBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulUi1931ddc38430fffd3fdb3a7ec5b01c18Css, + "web_ui/assets/consul-ui-1931ddc38430fffd3fdb3a7ec5b01c18.css", + ) +} + +func web_uiAssetsConsulUi1931ddc38430fffd3fdb3a7ec5b01c18Css() (*asset, error) { + bytes, err := web_uiAssetsConsulUi1931ddc38430fffd3fdb3a7ec5b01c18CssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-ui-1931ddc38430fffd3fdb3a7ec5b01c18.css", size: 361218, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsConsulUi60e32dd57229711d8752c463a9d423d3Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x7b\xdb\x46\x92\x28\x8c\xff\xef\x4f\x41\xe3\xe4\x78\xc9\x33\x50\xbb\xef\x17\xed\x8f\x93\x38\xb2\x67\xd6\xbf\x75\x2e\xc7\x76\x76\xde\x1d\x1d\xbd\x59\x88\x84\x24\xac\x21\x80\x03\x80\x76\x34\x32\xbf\xfb\xfb\x54\x77\x03\x04\x40\x90\x22\x65\x27\xb1\x73\x3c\xcf\x33\xb1\x58\xe8\x4b\x75\x75\x75\xdd\xba\xba\x3b\x58\x96\xf1\xa8\xac\x8a\x64\x56\x05\x0f\xe6\xf1\x45\x92\xc5\xe3\x60\x96\x67\xe5\x32\x3d\x5a\x26\x8f\xa3\xf3\x24\x4d\xaa\x24\x2e\x1f\x47\xb3\x34\x08\x4f\x83\xf8\x97\x45\x5e\x54\x65\x10\x0e\x16\x3a\x8f\xca\x38\x38\x0b\xc7\x17\xcb\x6c\x56\x25\x79\x36\x8e\xc3\x6a\x72\xfb\x36\x2a\x46\x59\x58\x84\xd1\x83\x1a\x3e\x4a\xe1\x4b\x98\x4d\x6e\x8b\xb8\x5a\x16\xd9\xa8\x1a\x25\xd9\x28\xfe\xfa\x87\xf3\xff\x8e\x67\x15\x72\x78\xfc\x58\xe4\x8b\xb8\xa8\x6e\x6c\xd1\xdb\xb7\x51\xba\x8c\x8f\xb3\x30\xce\x96\xd7\x71\x11\x9d\xa7\xf1\xf1\x43\x1c\xce\xf2\xec\x22\xb9\x5c\x36\xbf\xdf\x15\x49\xe5\xff\x5e\x4d\x8e\xe3\xd3\xea\x6c\x9a\x85\xf1\x6a\x5b\xbb\xc1\xcf\x3f\xc7\xe5\x77\xf9\x7c\x99\xc6\x41\xdd\x05\xd4\x0c\x63\x28\x1b\x2d\xd3\x6a\xfa\x36\x4f\xe6\x23\xfc\x20\x8d\xab\x51\x39\x1d\x67\xd3\x67\xd7\xe7\x71\x81\x92\xcc\x36\x58\xc6\xc5\xdb\x64\x16\x8f\x83\x38\x7b\x1b\x4c\xc2\x62\x3a\x4b\xa3\xb2\x1c\xc5\xbf\x54\x71\x36\x2f\x47\x55\xdd\xca\x2d\x10\xab\x2a\x96\xb3\x2a\x2f\xc6\x08\xa1\xd8\x11\xa5\x0a\x81\x2c\xe5\x83\x72\xb9\x88\x3d\x3c\xac\xa6\xd5\x55\x52\x86\xd9\xd4\xb6\x19\x96\xee\xe7\xb8\x98\x46\x93\x47\x8f\x86\xc7\x01\xcd\xdc\xb6\xe8\x52\xa0\xf5\x8f\x2e\x85\x0a\xd4\xfe\xb9\xa6\x56\x81\xea\x3f\x43\x47\x04\x18\x61\x52\x25\x51\x9a\xfc\x33\x2e\xbe\xee\xfc\x42\xb3\x28\x4d\xc7\xe5\xe4\xd8\x51\x66\x35\x09\xd3\xb1\xc5\x31\x28\xe2\x32\x5f\x16\xb3\x38\x08\x03\xe0\x96\xf5\x87\x32\xbe\xbc\x8e\xb3\x2a\x9e\x07\xe1\x43\x32\x59\x5d\xc6\xd5\x68\x16\x65\x4f\x66\xb3\xb8\x2c\xc7\x35\x0f\x3c\x84\xb2\x28\xce\xde\xa2\xb7\x51\x31\x0e\x4e\x7e\xf8\xfe\xd5\x4f\x2f\x7e\x7e\x72\xf2\xe2\xd5\xcf\xcf\xbe\x7f\xf2\xed\x8b\x67\x4f\x83\xc9\xfb\xf7\xb6\xd0\x2c\xca\x5e\xc6\xd1\xbc\x6e\x08\xfe\x1e\xaf\x59\xe9\xee\x66\x1e\x3d\xb2\x14\xef\xb7\xf3\x74\xb9\x48\x93\x59\x54\xc5\xf7\x6d\xec\x6f\x45\x52\xc5\x4d\x6b\x71\x1a\x1f\xdc\x54\x10\x65\x79\x76\x73\x9d\x2f\xcb\xe0\xe1\xd4\x4e\x3d\x4a\xaa\xf8\x1a\x3d\x7f\xba\xad\x9b\x9f\xca\xc3\xfa\x58\xad\xc2\x64\x5a\xa0\x45\x91\x57\x79\x75\xb3\x88\xc3\xdc\x73\xda\x72\x7a\x9a\x9d\x85\xb3\xe9\x6d\x7f\x4d\x75\x57\x5c\x6b\x85\x85\x2d\xae\x38\xce\x96\x69\xba\x0a\xaf\xa7\xb7\xab\xd0\x73\xe9\x9b\xf8\xa6\x1c\xcf\x26\xe8\x22\x2f\x9e\x45\xb3\xab\x71\x4b\x2a\x4c\x6e\xaf\x4f\xe3\xb3\xe9\xec\x34\x3e\x5b\x4d\x26\xe1\x75\x8b\x61\xa7\x0f\x1f\xb6\x7f\x86\xd7\x1d\x96\xb5\x5f\x3b\x3c\x3c\x0e\x2c\xc7\x06\x49\x36\xba\x7e\xff\xfe\xba\xcd\xa9\x93\x47\x8f\xc6\xd7\x0d\x67\x4f\x1f\xe2\x49\x78\x3d\x5d\xa2\x32\x85\x25\x3b\x41\x45\xfc\x36\x2e\x4a\xf7\xd7\x7c\x39\x8b\xc7\x3d\xb1\x55\xd3\x74\x9c\x84\x79\x18\x4f\xde\xbf\x8f\x57\x93\xf0\x7a\x12\xce\x1f\x3d\x72\xac\xff\x70\x3a\xed\xf4\x67\xbb\xb3\xd8\x74\xe1\x5f\x5f\x6f\xae\x9f\x79\xbd\x7e\xc2\xce\x47\x2f\x6e\x26\xa1\xfb\x77\xba\xd9\xc3\xb0\x08\x00\x14\xaf\x61\x78\x30\x0d\x93\x30\x9a\x5e\x87\xc5\xe4\x01\xc8\x18\xf8\xb2\x0c\x67\xe1\x3c\xbc\x7e\xb0\x96\x6a\x25\x90\x7d\xa7\xb8\x5f\x56\x57\x47\xd7\x71\x75\x95\xcf\xbf\x88\xfd\x2f\x62\xff\x23\x8a\xfd\x8f\x25\xad\x4f\x8a\xf8\x03\x44\xb5\xab\xfd\x41\xb2\xba\x69\xcb\xd5\xde\x5f\x20\xbf\x7a\xf5\xc3\x17\x79\xfc\x45\x1e\x1f\x24\x8f\xad\x88\xed\x08\xe2\x18\x24\xd2\xd1\x2c\xca\xfe\x60\x92\x37\x46\x4f\x4e\x4e\x9e\xbd\x7a\xf5\xf3\x8b\xe7\xaf\x5e\xaf\x7f\xfd\xed\xe5\xf3\xd7\xcf\xd6\x3f\x5f\x3e\x7b\xf2\xb4\x16\xd2\x5d\x60\x50\xc4\xd1\x3c\x78\xd0\xab\x18\x00\xa2\x71\x0b\x6c\x5b\x0f\xd2\xa4\xac\x82\xbb\xa4\x7c\x11\x2f\xf2\x32\xa9\xf2\xe2\xe6\xf1\x22\x2e\xae\x93\xb2\x4c\xf2\x6c\x50\xee\x3f\xb1\xf3\x75\x73\x2f\xb9\xbf\x6e\xba\xfc\x6c\xe5\xff\x16\xe1\x8f\x41\xf8\x67\x71\x01\xf2\x3a\xee\xca\xc6\xd6\xa8\x51\x53\xc6\x7e\xa9\x9b\x0d\xe3\x75\xed\xbf\xe4\xc5\x2b\xd7\x6e\xbf\x9d\xa6\xbb\xaf\x4f\xf7\x6d\xd7\x31\x4a\x08\x93\xb0\x6f\x0d\xc7\x44\x61\x3c\x39\x3b\x3e\x3d\xb3\x02\x3f\x29\x5f\x24\xd9\x1b\x20\xe1\xda\x91\xc1\xfe\xcb\xf7\xf1\xbb\x9e\x26\xb0\xb6\xbc\xfd\xe0\x8b\xfc\x58\x24\x65\x05\x8b\x7e\xb0\x5c\xfd\xb5\xa7\x3a\x93\x8b\x71\x23\xf0\x9a\xe2\x13\xc7\x74\xa3\x78\x3a\x76\x5c\x7c\x19\x57\x7e\x2a\x6c\x6b\x2f\xfd\x20\x4a\xf0\xa2\x4e\xcf\x26\xe8\x22\xc9\xe6\xe3\x78\xfa\x67\x47\x86\xe9\x14\xd6\x96\xf5\xc8\x26\x0f\x92\x8b\x71\x3c\xf1\xf8\xc4\xe8\x49\x9a\xe6\xef\x56\xdb\x26\xed\x2a\x2a\x1d\x95\x1a\x9a\xb9\x06\x27\x8d\xc2\x7f\x91\x94\xd5\xc7\xc7\xda\xae\xdc\x8f\x89\xb5\x6d\x70\x8d\xb5\x75\xb2\x3e\x3e\xda\x8e\x83\x3e\x26\xde\xae\xc5\x35\xe2\x83\x76\xd1\x5e\xce\xe9\x86\x6b\xb9\x98\xef\x68\x69\xc0\x6e\xe9\x88\xb0\x2f\xf6\xcb\x17\xfb\x65\x6d\xbf\x24\x59\x15\x67\x40\x8b\xfb\x7a\x93\x1f\xee\xcb\x39\x65\x9d\x1d\xe6\xa6\x75\x94\x75\x31\x0d\x5a\xe3\x18\x67\xd3\xb5\xee\x9b\x24\xd9\xd8\xe9\xf2\xc9\x16\xa3\xca\xaa\x6b\xaf\x66\x0f\x32\xaa\xaa\xd3\xec\x6c\x5a\xf4\xe5\x92\xe7\xa6\x6e\x50\xe8\xd1\xa3\x71\x33\xd1\x8d\xb0\x7a\xff\xfe\x61\xbd\x72\xff\x23\x89\xdf\x9d\xbc\x7c\xda\xc8\x0a\xff\x7b\xdd\xdc\xa6\xa8\x7b\xf4\xa8\x15\x85\x2a\xbf\x8b\xb2\xe8\x32\x9e\x7f\x7b\x73\xf2\xf2\xe9\x6a\xb5\x26\x71\x76\xd7\xfc\xbf\x79\xfb\x99\x4f\xfc\x9b\xf8\xe6\x77\x98\xf2\x21\xb3\x07\xac\xd5\x6c\xea\x26\x7e\xb0\xc4\x83\x46\x99\xc0\x70\xff\x96\x54\x57\xe3\xe0\x31\x78\xac\xe3\x6c\x9a\x81\xb4\x9b\x45\x4e\x5b\xed\x63\xf3\x54\x6d\x83\x39\x8c\x27\x93\x49\x98\x0d\xba\xf2\xde\xec\x59\x2b\xfc\x3e\xb8\xcb\xb9\x0f\xf1\x41\xfc\x93\xe5\xf3\xf8\x33\xe7\x20\x37\x84\xdf\x98\x85\x0e\xa2\x71\xb9\x88\x66\xf7\xa6\xf2\x67\xed\x74\x7e\x09\xf7\xdd\xc7\xdd\x03\xcc\xa2\x2a\x2f\x76\xc7\xfc\x86\x5c\xa4\xb5\x4e\x71\x96\xe8\xfc\x49\x55\x8b\x09\xa7\x62\x36\xad\xce\x9d\x11\xbb\xc0\x4f\x41\x77\xd7\xe4\xfb\xe8\x3a\xde\x1a\xa7\x3b\xb9\xca\xf3\x8d\x50\x9d\x8b\xdf\xed\x1f\xca\xfb\xfe\xd5\x8f\x4f\x4e\x9e\x7d\xd9\x5e\xf9\x62\x0e\x1f\x66\x0e\x2f\xa2\xa2\x4a\x3e\xc4\x1c\x6e\xa4\x6d\x98\x86\xe5\x5a\xe2\x26\x4e\xe2\x86\xc5\xe4\x36\xdb\x26\x48\xac\xa0\x6d\x71\x5d\xb6\x55\x90\x64\x5b\x04\x49\xd6\x17\x24\x59\x67\x3e\xb2\xcd\xf9\x28\xd6\x82\x64\xd5\x20\x9b\xff\xb6\xea\xa1\xe9\x77\x59\x13\x29\x8c\x1c\x21\xd3\xe9\xed\xaa\x36\x9a\xda\xab\xab\xd8\xb2\xba\x52\x58\x5d\x85\x5f\x5d\x69\x77\x75\xb5\x7f\x86\x69\x7f\x75\xa5\x5b\x57\x57\xfa\xfe\x7d\xda\x5f\x5d\x69\x77\x75\xa5\xd3\x6c\x9f\xd5\x65\x67\xdf\x8f\xa6\xf0\x24\x7e\xff\x3e\x03\x11\x3e\x09\xa3\xd6\xea\x4a\x7b\xbc\x9f\xfa\xd5\xd5\x81\x7f\x9d\x6e\xce\x66\xd4\xac\xae\x74\xf7\xea\xea\xf7\xb0\x7d\x6a\x53\x3b\x3c\xbb\xba\xd2\x8f\xa4\xc8\x67\x77\x2b\xf2\x3b\xe3\xbd\xf3\x59\x00\xcb\x7d\x7f\x85\xdf\x56\xf2\x89\xd7\x89\x56\xfe\xa7\x36\xca\xb8\x06\xce\x67\x65\x10\x96\x1e\x98\xef\xd4\xad\xf9\xaf\xae\x5b\x3b\x61\x9f\x5e\x00\xe9\xa1\x73\x08\xe6\x33\x70\x17\xe2\x37\x4f\xd2\x74\x3c\x41\x69\x9c\x5d\x56\x57\x7f\x26\x7b\x6f\xa9\x7d\x04\x05\xdd\xf5\x4d\xe7\xb3\x47\x8f\xc6\x2d\x9d\xed\xfd\xd4\xf9\x0c\xfd\x58\x24\xd7\x51\x71\x33\xd9\x5f\x8b\xff\xf8\xe4\xe5\xeb\xe7\xaf\x9f\xff\xf0\x7d\x57\x91\xa7\xd3\xe5\x38\x6a\xa9\x72\x37\x91\xa0\xc6\x3f\x44\x89\x4f\xc2\xb2\xdf\xae\xe5\x85\xd3\xe2\x43\xdb\x8d\x26\x2d\x15\x34\xbb\x53\x05\xad\xb7\x32\x3e\x41\xbf\x6a\xfb\x66\x71\xdb\x67\x6d\xff\xed\x59\xf2\x30\xb7\x72\x91\xa7\xc9\xec\x66\x4f\x02\xb4\x3f\x5d\xc5\xe9\x22\x2e\xea\x06\x1e\xc3\x3c\xe6\x17\x7d\x12\x81\x6e\x03\xfd\x62\xd5\xf4\x5a\x49\x97\x9f\xa3\x5b\x94\x4c\xc7\xdb\xe4\xa5\x93\xa6\x87\x48\xc9\xb5\x5b\x14\xed\x72\x8b\xa2\xc6\x2d\x4a\x3f\x29\xb7\x28\x6a\xb9\x45\xe5\xb6\x2c\x88\xf2\x37\xc9\x82\xe8\x85\x03\xf7\x6a\x68\x30\x46\x18\x38\x4e\x3e\xba\xb6\x2a\x02\x30\x06\x51\x3d\xc6\x61\x86\x80\xb9\x7f\xb8\x98\x8c\x4f\x9b\xe2\x67\x93\xad\x69\x6f\xbf\x7b\x5a\xc6\xc7\x1e\x9d\x57\x4a\xab\x30\x9f\xb6\x85\xf6\xd2\xf3\xe8\x6c\x0a\x82\x7b\xfe\x61\x7e\xdd\xa2\xef\xd7\xcd\xb7\x58\x9e\x0b\xb0\x3c\xe7\xde\xf2\x5c\x74\x2d\xcf\xf6\xcf\x70\xd1\xb7\x3c\x17\x5b\x2d\xcf\xc5\xfb\xf7\x8b\xbe\xe5\xb9\xe8\x5a\x9e\x8b\xe9\xec\x70\xbf\x0e\x1c\xa3\xda\xaf\x5b\x4c\xc2\xeb\x96\xe5\xb9\xe8\xd9\x85\x0b\x6f\x79\x76\xe0\x5f\x2f\x36\x57\xde\x75\x63\x79\x2e\x76\x5b\x9e\xfd\x1e\x86\x85\x07\xa0\xb8\x80\xe1\x79\xcb\x73\xba\x00\x25\x0a\xd2\xa9\xf1\xea\xc2\x45\x4b\xa9\x26\x77\xe9\x93\x22\x4f\xbf\x04\xd0\xbe\x04\xd0\xbe\xe4\xcb\xed\x91\x2f\xf7\x25\x52\xf6\x25\x52\x76\x77\xa4\xcc\xcb\x8e\xa3\x24\x2b\xab\x28\xbb\xff\xf6\xc4\x27\xb2\x09\xe4\x87\xf3\x89\x6c\x25\x76\x36\x91\x07\x8a\x20\x84\xa2\xe2\x72\x09\x7f\x97\x93\x7a\xe7\x70\x47\x82\x55\x7b\x7b\xbc\x6a\x67\xe5\xed\xce\xb2\x1a\xac\x66\xf3\xf6\xc2\x78\x72\x36\x39\xc8\xa3\x6b\x08\xfc\x85\x4d\xee\x99\x64\x30\x10\x53\x6a\x65\xa5\x3d\xf7\xeb\xf0\x24\x5f\x66\xd5\x9f\x71\x5b\x4b\x3d\xaf\x67\xb1\x9d\x36\xd5\xb5\xc3\x37\x61\xeb\x5c\x29\x9f\x03\xf5\x90\x3c\xd8\x9a\x8c\xb0\x2e\xbc\xce\xa8\x5a\xf3\x8e\xcd\xaa\xaa\x4b\x3c\x7a\xb4\x91\xd8\xf6\xe8\xd1\x43\xec\x7e\xa6\x69\xfe\xae\x9b\xe9\xf5\xa9\xe1\xbe\x91\x27\xb6\x05\x79\xa7\x97\xdb\xd8\x0f\x85\xf6\x9a\xef\xdd\xd4\xae\xfd\xab\x1d\xb6\x02\x3f\xd9\xa8\xd2\x41\x2b\xd0\x8f\xe2\x13\xde\xb0\xaf\xf2\x37\xf1\xbe\x74\x1e\x0a\x5e\xd9\xfa\x8f\x93\xf2\x28\x8d\x2f\xa3\xd9\xcd\xee\x32\xeb\x93\x69\x1b\x51\xae\xb0\x70\x84\x1c\xde\x8c\xfa\xbc\xbc\x97\x7c\x3a\x8e\x76\x7a\x2f\xe9\xaf\x19\xe7\x2a\x3f\x29\xef\xa5\x1d\xe7\x4a\xb6\x79\x2f\xc9\xff\x1d\xde\xcb\xc3\x31\x0e\x0b\x94\x94\x4f\xea\x65\xd0\x8d\x18\xb5\xd3\xe4\x9c\xc0\xce\x8b\xe7\x4f\x6b\xf9\x6f\x17\x51\x0b\xbe\x75\xcf\xe3\xbe\x47\x50\x1f\xda\x50\x56\x52\xbe\xb0\x0b\xb9\x8f\x5a\x2f\x52\xb7\x0a\x97\xd3\xb4\xe5\x78\xcd\x3c\x1b\xce\xa7\xa7\xd1\x19\x78\x4e\x1f\xe2\x78\x5d\xf4\x1d\xaf\xeb\x2d\x8e\xd7\x05\x38\x5e\xd7\xde\xf1\xba\xe8\x3a\x5e\xed\x9f\xe1\x45\xdf\xf1\xba\xd8\xea\x78\x5d\xbc\x7f\x7f\xd1\x77\xbc\x2e\xba\x8e\xd7\xc5\x74\x7e\xb8\xe3\x05\x7e\x4b\xed\x78\x5d\x4c\xc2\x45\xcb\xf1\xba\xe8\xb9\x45\x17\xde\xf1\xea\xc0\xbf\xbe\xd8\x5c\x5c\x8b\xc6\xf1\xba\xd8\xed\x78\xf5\x7b\x18\x96\x0f\x80\xe2\x05\x0c\xcf\x39\x5e\xe5\xf4\x22\x4c\x9d\xe3\xd5\x04\xb2\xc2\x8b\x96\xe3\x95\xdf\xa5\x5c\x96\x8b\xb2\x2a\xe2\xe8\xfa\x33\xd7\xe3\xeb\x61\x7c\xf2\xa6\xf4\x1e\xaa\x7f\x1e\x2d\x2a\xd0\xca\x47\xff\x5d\xe6\xd9\x51\xb4\x48\xba\xb3\xf3\x8d\x3b\x14\x36\x8f\xaa\xa8\x2e\xfb\xb8\x29\xf9\xe1\x33\xb4\xb5\x42\xbd\xb9\xdb\xd1\x50\x0f\x71\x78\x19\x57\xc7\x4d\x9f\x6b\x0a\xd4\xc3\x5c\xad\x26\x77\x8c\x33\x5a\x38\x79\xb8\xcb\x9e\xac\xcb\x5e\x55\xd5\xe2\x0f\x9d\x28\xf3\x25\x61\xe5\x0f\x98\xb0\x12\x23\x97\x43\xf8\xf3\xff\xfe\xe9\xd9\xcb\xff\xfc\xf9\xc7\x27\x2f\x9f\x7c\x37\x8d\xd1\xd3\x27\xaf\x9f\x9c\x3c\xfb\xfe\xf5\xb3\x97\x9d\x0f\xcd\x89\xc7\x2d\xdf\x83\xf9\x2c\x78\x30\xd8\x64\x90\x95\xee\xa0\xe3\x72\x7b\x78\x7e\x96\x26\x71\x56\xb9\x85\xb4\x3d\x3d\xe6\xf0\xed\xde\xa1\xa4\x18\xd7\xd7\x66\x5e\x8c\x0b\xe7\x3b\xe0\xea\x22\x2f\xae\xa3\xea\x7b\x9b\x97\x0c\x7c\x9c\x5c\x8c\xf7\x4b\xc3\xf4\xfe\x78\x10\x3c\x9c\x4e\xe3\xaf\x6f\xb3\xf2\x38\x5e\xd5\x0b\xcb\x35\xfa\x34\xaa\xa2\x19\xd8\xab\xc5\x3a\x10\x76\x3b\x9f\x1d\xc7\x2b\x9b\xf9\x91\x77\x33\x34\x6a\x6c\x3f\x46\xf2\x47\x3e\x94\x54\xf2\x71\x93\x3f\x96\x77\x89\xd5\x3d\x6e\x77\x18\x12\xc1\xbf\xa9\x92\x2f\xe2\x7f\x2c\xe3\xb2\xfa\x4b\x5e\xfc\xef\x65\x5c\x40\xab\x30\x3f\x55\x98\x95\xc7\x59\xd8\x24\x50\x1e\x17\x61\x92\xcd\xe3\x5f\x8e\xa3\x30\x99\x1f\xa7\xab\x46\x92\xc4\xff\xf5\x60\x64\xff\xf7\xd7\x67\xaf\x47\x8f\xdf\x92\xc7\xd1\x2c\x6d\x0f\xbc\xfc\xfa\xab\x5b\xdb\xe0\x6a\xf5\xc0\x97\xfc\xea\xf6\x76\x5b\xe3\xab\x95\x2d\xf3\x5f\xab\x1e\x56\x2f\xe3\x59\x5e\xcc\xf7\xc6\xad\x1d\x5a\x4a\x27\xd5\x55\x91\xbf\x1b\x65\xf1\xbb\xd1\xb3\xa2\xc8\x8b\x71\xf0\x9f\xf9\x72\x74\xbd\x2c\xab\x51\xb9\x88\x67\xc9\xc5\xcd\x28\xca\x46\xc9\x3c\x58\x9f\xe8\xb8\x63\x4c\x8f\xbf\xba\x4d\x57\xf7\x1b\xd7\x01\xc6\xc7\x79\x92\xcd\x93\xec\xf2\xa8\x58\xee\xd8\xec\xfc\x7c\xd8\x07\xe8\xe7\xc8\x07\xf3\x64\xc9\x72\x17\x1b\xb5\x29\xd0\xf0\x51\xa7\xa1\x7d\x88\x9f\xde\x87\xf8\xb3\x3c\x2f\xe6\x49\x16\x55\x9f\x21\xe9\xd7\x24\xc8\x3c\x09\x8a\x70\x59\x24\xc7\xd1\x0e\x72\xaf\xc7\x6b\xcf\x00\xb5\x57\xad\x2b\xf8\xff\x1c\xbd\x74\xdd\x1d\x3d\x7f\x7a\x3c\xfa\xea\x36\x6a\x53\x7e\xa0\xc7\xfb\x10\x7d\x3e\xfb\x8c\x88\xbd\x83\x96\x51\x15\xa5\xf9\xe5\xe3\x79\xa3\xfb\xca\x7b\xd0\x22\x29\x67\xf9\xdb\xb8\xb8\x39\x9a\x5d\x45\xc9\xdd\x66\xf9\xa7\x42\x98\x43\x24\xb5\xe5\xca\xf2\x57\x90\xd7\x3d\xe2\xf5\xe5\xf5\x30\x47\x97\xbf\x96\x20\xb7\x86\xde\x5d\x0e\xe4\x16\xb7\x32\x06\x0a\xec\x4e\x78\xfc\x08\x93\x6b\x4f\xd9\x97\xd3\x7e\xb8\x79\x7a\xdb\x92\x18\xa8\x58\xcc\x3a\x91\x1b\x84\xd0\x3a\x78\x13\x9f\x06\x6b\x46\x08\xfe\x94\x9d\x8d\xed\xe7\xd5\x24\xdc\x5d\xa5\x5c\xe4\xd9\xbc\x5f\xa5\x08\xab\xc9\x2a\x4c\x36\xf0\xf9\xfd\x90\xa9\x63\xd6\xdb\x8c\xf5\xae\x49\xff\x71\x73\x34\x6b\xa3\xf8\x33\x48\xd3\x5c\xc1\xb4\x34\x93\xe5\xd8\xca\xa1\x8d\xdc\x28\xc2\xd4\xfd\x2a\xab\xbc\x88\x7d\x3a\x91\xcb\x7b\x0d\x73\xcf\x86\xcb\x69\x0a\x74\xf5\x5d\xfc\x25\x2f\xc6\xc5\x24\x9c\x4d\x53\x74\x9d\xcf\xe3\xd4\xfd\xf6\x0b\x3f\xa8\x67\x33\x98\x4e\x5d\x6a\xf0\x28\x43\x51\x55\x15\xc9\xf9\xb2\x8a\xcb\xaf\xc7\xc9\xb4\xfd\x7b\x3c\x09\xf3\xe9\x72\xdd\xf8\x38\x0b\x6f\x57\x93\xc9\x31\x14\x0b\xf3\x69\x32\x09\x23\xe4\xf9\xa6\xc5\x5b\x2d\x1e\x19\x97\x61\x15\xe6\x61\x12\xce\x26\xab\xc9\x04\xcd\xa2\xaa\x1f\x01\xa8\x77\xfa\x91\x5d\xb7\xe3\xd8\x96\xab\xae\xe2\x6c\xb0\x58\x35\x5e\x86\xf1\xba\xc1\x55\x5d\x09\xe4\x61\x3c\xaa\x53\x31\xf2\x8b\xd1\xeb\x9b\x45\x6c\x65\xa1\x97\x8d\xb1\xa7\x55\x35\x3d\xbd\x2d\xab\xa8\x5a\x96\xc7\x41\xf0\xa7\x18\xb9\xbf\x4f\xf2\x79\x1c\x56\x49\x95\xc6\xc7\xc1\xeb\xab\x78\x74\x1e\xcd\xde\xc4\xd9\x7c\xe4\x19\x3c\x9e\x8f\xde\x25\xd5\x15\x08\x51\x27\x5d\xc2\x79\x5c\x45\x49\x7a\x1c\xa3\xeb\xb8\x2c\xa3\xcb\x78\x75\x66\xe7\xa4\x78\x50\x15\x37\xb7\xe5\xbb\x04\x86\xd9\x6e\x7c\x72\x3b\x8b\xca\x78\x84\x8f\x8b\x29\x48\xe9\x0c\x3d\x39\xcf\x8b\xca\x22\x18\x16\x6e\xe8\xe5\x29\x3e\xf3\x35\xa6\x01\x0e\x1e\x9c\x17\x71\xf4\xe6\x81\xad\xc6\x31\x69\x2a\xfe\x94\x81\x35\x97\x17\xc9\x3f\xe3\xb9\x13\xf6\x55\x18\x04\x93\x6e\x71\xd6\x14\xff\x4b\x5e\x9c\x27\xf3\x79\x9c\x6d\x2d\xcb\x9b\xb2\xdf\xe7\xd5\x5f\xf2\x65\xb6\xbd\x59\xdd\x14\x7d\x9d\x5c\xc7\xf9\xd2\x0d\xa0\x5b\xc6\x34\x65\x4e\xf2\xec\x22\x4d\x66\xd5\xb6\xe6\x28\x6d\x8a\x3e\xcf\xde\x46\x69\x52\x77\x5c\x17\xf3\x22\xe0\xb8\x98\xb6\x49\xf9\xe7\xa9\xc0\xf8\x6b\x57\xef\x55\x5c\xbc\x8d\x8b\x56\x07\xc7\x0e\xee\x6b\x3a\xd8\x6a\xe5\xd8\x2e\x9a\xdc\x16\xd3\x68\xe5\xf8\xa1\x58\xfd\xc3\x5b\x80\xed\x8d\x40\x9f\x1a\x5d\xb9\x95\xf3\x7d\x74\x1d\x87\x81\xd5\xd1\x41\x98\x4d\x5c\x8d\x46\x5b\xef\x55\xcf\x95\xb6\xb5\x2f\x92\x6c\xfe\x24\x4d\x3b\x01\xfc\xa1\x7a\x7f\x71\xe5\x82\xc9\x6a\x66\x37\x87\x06\x3b\x4c\x06\x2a\x9e\xb4\x8a\xdb\x1e\x97\x76\x2f\x7d\xef\xfa\x3f\xb5\x8a\xdb\xfa\x73\xbb\x03\xb4\x77\xfd\xa7\xad\xe2\xb6\xfe\x2a\x5c\x76\x32\x93\x67\x6b\xc9\x3c\xb7\xc9\xc9\x5f\x76\x74\xfe\x08\x3b\x3a\xe9\xf4\xa2\x4e\x4e\x3e\x6c\x47\xa7\xb6\xf6\xee\xbe\x82\xe5\x53\x33\xd9\xb7\x1b\xeb\x17\x49\x5a\xc5\xc5\xda\x5f\x6f\x0c\xf6\xed\x6e\x64\x96\xc5\xb3\x6a\x4d\x84\xbb\x1d\xc9\x72\xf5\xd5\x6d\xc3\x14\xd1\xd7\xc1\xff\xc9\x9a\x72\x51\x76\x19\x1f\x8f\x82\x3f\x45\xc7\x41\x30\xec\x6e\x16\x80\x73\xf0\xbf\x82\x06\xc1\x1a\xe3\x3d\x03\x49\xae\x5a\x06\xde\x48\xd1\xf3\x43\x8a\x03\xfc\x10\xab\x8d\x4f\xed\xde\x47\x68\x13\x30\xcf\xa6\x05\x2a\x17\x69\x52\x8d\x83\xe3\x60\x82\xae\xa3\xc5\x78\x1e\xcf\xf2\x79\xfc\xd3\xcb\xe7\x27\xf9\xf5\x22\xcf\xe2\xac\xda\xee\xbf\x6c\x92\xf1\x71\xfc\x4b\x34\xab\x80\x98\x6e\x67\xed\xf8\xbf\xc0\x05\xb7\x8e\xcd\x63\xa0\xe1\x7f\x85\xf3\xb8\xac\xc0\x81\x07\xb2\xfc\xd7\x57\xb7\x09\xc0\x73\xf8\xcf\x12\x3e\xb6\x67\xe0\x24\x9a\x5d\xc5\x47\x27\x79\x56\x15\x79\x7a\x3c\xca\xf2\x23\x6b\x8e\xb5\x08\xec\xc9\x32\x40\xc4\x93\x01\x29\xee\x6c\x91\x62\x7a\xfb\xca\xa2\x06\xf2\xf3\xb8\x42\xeb\x1f\xe1\xd3\x35\x6a\xfe\x63\x0f\x12\xfa\xc2\xaf\xd6\xf5\x5e\x75\x6a\xbd\xea\xd5\x79\xe5\x6b\xfc\xd8\x70\x42\x5d\xb1\x81\xb4\xeb\xb7\x8b\x0d\x81\x7d\x6b\x60\x66\x35\x0d\xc1\x8f\xf0\xbb\xb8\x8a\x8e\x2b\x04\xff\x40\x7b\xb3\x22\x59\xac\x9b\xa9\x7f\x35\x7b\x44\xad\x4b\xca\xc2\xe0\x89\x5d\xcc\xfe\xbc\x5c\x30\xf9\xba\x40\x0e\x32\xad\xfc\x1f\xc7\x15\xfa\x71\x9d\xa6\xf9\xe8\xd1\xb8\x68\xff\x9e\x76\xbe\x4e\xc2\x86\x47\x7e\xfc\xe9\x10\x1e\xc9\xfa\x64\x01\x8e\xc8\x1a\x22\x77\x7e\x45\xd7\xf1\x26\x1f\x65\x83\x04\x73\xf5\x3a\x33\xb2\x09\xf2\xed\xcd\x8e\x33\xb4\xde\x06\x68\x47\xec\x8a\x4d\xfe\xfa\x69\xbb\x96\x77\x0a\x7c\xb4\xc9\x3c\x83\x1f\x5e\x0d\x82\xd7\x33\xee\xaf\xdf\x19\xe4\xeb\x4e\x3e\x6e\x0b\xb9\xa7\xdb\x4d\x88\x66\x7a\x9e\x3e\x7b\xf1\xec\xf5\xb3\xcf\x7c\x86\x0e\x0e\x71\xec\xb8\x77\x6a\x70\x8f\xb9\x55\x60\x59\x25\x69\xf9\x38\x29\xff\x92\xa7\x73\x1b\x06\xe9\x7f\x7a\x13\xdf\xbc\xce\x9f\x14\x45\xd4\xcd\x9c\xb3\xb6\x9a\xed\x79\x20\x51\x2e\x8c\x3e\x9e\x06\x4d\x07\x34\x68\x54\xde\x64\xb3\xd1\x9e\x7a\x74\xad\x3e\x93\xf9\x71\x19\x96\xf1\x22\xb2\x67\xce\x8f\x93\x9e\xca\x29\x0f\x55\x39\xa3\x7c\x1a\xbd\x8b\x92\x6a\xbc\xa1\x41\xde\xbc\x7d\xfc\xd5\xad\xcd\xa5\xf2\x28\x4f\xc6\xe5\xc4\xc6\xc0\xc0\xb6\xb4\x26\xa7\x55\x0a\x1d\x6c\x76\x04\xc0\xa2\x7e\x30\xbd\x51\x5e\x16\x81\x51\x3e\x8e\xa7\x7f\xf6\x2b\x2e\x3e\x0d\x7e\x39\xf2\x13\x65\x6b\x05\x67\x93\x30\x5f\x0d\xd2\x6c\x77\xb8\xb0\x4b\xb9\x0f\xa6\x56\x72\x38\xb5\xee\xda\xe1\xb9\x8b\x2e\xc9\x5d\x74\x49\xf6\x52\xae\xe9\xf4\xb6\xb7\x4a\x2d\xa9\xec\xc9\x7e\xbb\x6d\xdb\x0e\xfa\xa3\xb5\x10\xd8\xb0\x30\x6a\xed\x31\x30\xe2\xec\x34\x42\xaf\x5e\xfc\xf4\xd7\x9f\xff\xfd\xd9\x7f\x9e\xd9\xd1\xa7\x8d\xc5\x90\x5b\x11\x76\x64\x15\xe4\xa8\x8a\x7f\xa9\x1e\x2f\xd2\x28\xc9\xfe\x75\x34\xbb\x8a\x8a\x32\xae\xa6\xcb\xea\xe2\x48\xaf\xc9\x54\xed\x27\xd9\x3f\x68\x70\xe1\x45\x1a\x5d\x42\xb9\xbf\xc0\xbf\x9f\xd2\x50\x37\xf4\x44\xea\xae\x93\x2b\xff\xd5\xe6\x0f\x36\x68\xa4\x1d\x34\x1e\x3d\x1a\x97\xce\x09\x69\xd8\x15\xe8\x92\xf6\xe8\x92\x0e\xd2\x25\x6d\xd1\xa5\x88\x67\xcb\xa2\x8c\x8f\x07\x68\xd2\xd2\x4e\x03\x64\x49\x37\xc8\x92\x0c\xe8\x82\xf4\x0e\x5d\xb0\xf3\x0e\xb9\xcf\xc7\xf7\x19\xdc\xa8\xd8\x66\xb0\x83\x8a\x2f\xb2\x28\x7d\xbc\x4c\xf6\xdc\x3f\x3b\x6c\xb7\xe1\x53\xdc\x64\xe9\x8f\xf9\xd7\xd8\x65\xe9\x8d\xfb\x45\x1c\xcd\xe3\xa2\x19\x37\x8c\x2c\xdb\x31\x2b\x2e\xcc\xf6\x38\xb5\xb5\xee\xc4\x2c\xab\x3f\xbc\x8c\x2f\x8a\xb8\xbc\x3a\x1e\x31\xec\xd1\xf8\x47\xa7\xf3\xee\x5e\x84\x33\x24\x7b\xdb\x11\x1b\xdb\x15\x83\xe3\x70\xa5\x7a\xdb\x12\x9b\x55\xeb\x6d\x89\xc1\xaa\x45\x3b\x6c\xb5\xd7\x19\xae\x66\x9d\xee\xbe\x87\xf0\x2e\xbb\xcd\xdb\x5f\xbe\x95\x81\x1d\xaa\x8f\xb5\x8a\x8b\x5f\x79\xeb\x3b\xab\xc5\xe9\x47\xdc\xf4\xde\xbd\x5e\x87\xb0\x4c\xe6\x16\xc9\xf6\x22\x8d\xf6\x5b\xa4\x80\xff\x8e\x65\xda\x0c\xef\x31\xe0\x3f\x68\xd3\xec\x37\x92\x0d\xeb\xa4\xd8\xa4\x69\xad\x73\xdb\x9d\x16\xa7\xd9\x5a\xab\xd4\x08\x14\x6d\xad\xd6\x92\x00\x2d\xdb\xa5\x8d\xa1\x0f\x1b\xd4\xd1\x84\x61\x3f\x3c\x7c\x72\xf2\xa2\x3c\xbe\xfd\xd1\xde\x41\xf1\xd4\x71\x4a\x79\x5c\x21\x00\xa3\x2e\xd4\x46\x64\xe2\xe9\x9f\xc7\xb7\xcf\x9f\x1e\xc7\xe8\xf9\x53\x58\x2b\x2f\xf3\x34\xee\x57\x6b\xc3\x86\x2a\xad\x06\x08\xb5\x61\xe9\xfc\x86\x84\xfa\xe4\x89\xb3\x61\x1b\x0d\x10\xa7\x65\xa5\x7c\x1c\xfa\x6c\xd8\x30\xc5\x1d\xb2\x31\x4f\xe6\xb3\xa3\x45\x91\xbf\x4d\xac\x4f\xfa\x21\xc6\xcc\xfa\xbe\x89\x8f\x73\x72\x2a\xfd\x75\xee\x7d\x48\x77\x9d\x9c\x4a\x3f\xd1\x7b\x1f\xd2\xf6\xd6\xf3\xa1\x86\x1d\xe8\x85\x5d\x19\x68\x6d\xfb\xc6\xf2\xc3\x96\xac\xc6\x61\x55\x91\xfe\xaa\xf6\xdd\xbd\x95\xc5\xa0\x45\xf7\xe3\x0f\xaf\xd6\x49\x77\x30\x54\x97\xec\xb8\x2c\xd2\x26\xe9\xae\x8f\xc2\x01\xc1\xe4\x27\xcb\xea\xea\xbb\x3a\xf1\xef\x65\x3c\x4f\x8a\x78\x56\xfd\xf4\xf2\xf9\xf1\x60\x8e\xf1\xb7\x4f\x5e\x3d\xfb\xf9\xa7\xe7\x3f\xff\xf4\xf2\x45\x30\xf9\x53\xe0\xd0\x81\xc9\x3e\x8f\x66\x6f\x82\x01\x82\x3d\xa9\x37\x90\x77\x93\x2b\x9c\xe5\xf3\xf8\x38\x0d\xc1\x26\x8c\x37\xec\xe1\x43\xa8\x77\x0f\x3b\x1a\xfa\xee\xd5\xdc\x33\x7a\x61\xd1\xdd\x6b\xca\x6a\x1a\x7d\xf4\x29\x3b\x71\x84\x7b\xe5\x09\xb7\x39\x03\x2f\xf2\xcb\x7c\x59\x01\xf9\x93\xf9\x71\xd5\xa3\x6c\xf5\xb1\xf8\x32\xb5\xbd\xdc\x31\x84\x7a\x2d\x9e\x38\x21\xfd\x3a\x7f\x13\x67\xc7\x6d\x27\x3d\x6a\x71\xcb\x07\xd9\xf1\x6b\xb6\x3b\xd0\x8a\x1f\xa8\xd8\xb3\xe1\xd3\x9a\x9e\x1f\x84\xa0\x9f\x95\x01\xec\x9a\x3c\xfc\xd5\x80\xff\x10\x96\x9d\xdb\x62\x12\xaf\x01\x72\x7b\x5b\xcc\xf2\xc3\xb6\xb8\xe7\xfd\x2d\xee\xe5\x96\x2d\xee\xf9\x69\x7c\x36\x5d\xfa\x2d\xee\x79\x77\x8b\xbb\xfd\x33\x9c\xf7\xb7\xb8\xe7\x5b\xb7\xb8\xe7\xef\xdf\xcf\xfb\x5b\xdc\xf3\xee\x16\xf7\x7c\x9a\x1f\xbe\xc5\x5d\x86\x49\xb3\xc5\x3d\x9f\x84\xb3\xd6\x16\xf7\xbc\xb7\x01\x3d\xf7\x5b\xdc\x1d\xf8\xd7\xf3\x4d\xbd\x36\x6b\xb6\xb8\xe7\xbb\xb7\xb8\xfb\x3d\x0c\xab\x66\x40\x71\x0e\xc3\xab\x6f\x8b\x99\xd7\xb7\xc5\xf8\xed\xca\x70\x16\xce\x1f\xec\x1f\xe1\xb9\xfb\x5a\xe5\x3d\x9d\xc7\x75\x43\xbf\xb1\xff\xb8\x35\x7e\x9f\x95\xc7\x95\xdd\x10\x69\x1c\xa1\x75\x1e\xdb\x96\xe0\x71\x33\x88\xda\x28\xe8\x5a\xe4\x3d\x87\xaa\x17\x1f\x8e\xee\x8a\x0f\x47\x77\xc5\xcd\x37\x30\xfe\x50\xeb\xa0\x0e\xca\xde\x35\xdc\xb6\x3f\x79\xc8\x90\xd3\xbb\x86\x9c\x6e\x0c\xf9\x10\xd7\xb3\x8d\xdf\x9d\x1e\xc3\xe1\x4e\x66\xa3\xff\xfa\x38\x1e\xe2\xf5\xdd\x1f\xc7\xc3\xf1\x3a\xd0\xe1\x3a\x14\xb5\x41\xd7\x6a\xe8\x89\xf3\x46\x78\xdc\x7d\x21\xee\x61\x7e\xd5\xc0\x89\x53\xff\x75\xda\xd6\x35\xb1\xb5\xbf\x3c\xe4\x32\xae\x7e\x78\x97\xd5\x42\xe5\xd5\xcd\xf5\x79\x9e\x96\x3e\xa9\x7a\xba\xab\x0c\x34\x53\x3d\x7a\x34\x2e\xa6\x05\x72\xb9\x26\x83\xa9\xa2\x83\x4d\xd4\xb3\x95\xdb\x20\xe2\xa4\xa5\xc7\x56\xf6\xbd\x17\xb4\x58\x96\x57\x08\x06\x7d\x63\x0f\x6b\xd6\xcf\x93\x65\x9d\x23\xaa\x93\xdb\x8b\xbc\x18\x5b\xc7\x6d\x4a\xfe\xb5\xfa\xff\x35\x3b\xd5\x3e\xd5\xe0\x5f\xab\x3f\xfd\xa9\x1e\x3f\xc8\xfb\x87\xd3\xa6\xc4\x69\x75\xf6\x75\xfb\xc7\xf1\xed\xea\x41\xf5\x3f\xe9\xd7\x89\x27\xcb\x38\x9b\x84\x0f\xf1\x90\x4e\xae\x26\xb7\x3e\xb1\xf7\xb4\x3a\x9b\xac\x26\x93\xe3\x3b\x46\x58\x0e\x1e\xf7\x4e\xe2\x72\x1c\x87\x77\x55\x1d\x67\x93\xc9\x71\x0b\xa7\x2d\x08\x6d\x3f\x34\x7a\x17\xf5\xb3\xb0\x9a\xd8\x84\xdb\x7a\x1d\x0c\x5c\x5a\xff\x39\x1c\x58\x9e\xfd\x4e\x37\xfb\xcf\xbf\x1c\x94\xfe\xc3\x1e\x94\x6e\x45\x9a\xae\xef\x7b\xb3\x7f\x19\x57\x55\x92\x5d\x96\x1f\x70\x7e\x79\x39\x74\xa9\xff\xb2\xb9\x03\xc7\xb7\xdf\x9c\x60\x3e\x28\x1c\x50\xdf\x4e\x51\x1e\x47\xd3\xd3\xb3\xcd\xb3\x88\xfb\x9d\x7d\x7e\xf4\x68\x1c\x4d\xa3\x3a\xec\x99\x8f\xf3\xf1\xed\x2a\x8c\x27\xe1\xed\x2a\xbc\x6d\x76\x68\x8f\x33\x2b\xda\xf7\xbe\x0e\x7f\x57\xa3\x3f\xb6\x5c\x79\x68\x74\xd3\x4d\x6e\x22\x56\xf5\x79\x55\x4b\x88\xa1\x90\x7f\x74\x80\x3f\x6c\x0d\x0a\xbf\x0c\xa6\x7f\x6e\xb2\xfd\xf6\xa3\x92\x3f\xb5\xb2\xd7\xe0\x41\x3f\x17\xef\xdf\x47\xeb\x67\x3f\x9d\xc1\xe8\x4e\x8c\xf8\x39\xb7\xb7\xba\x7d\x7b\xf3\x2a\x5d\x5e\x8e\x03\x77\x33\xd7\xe4\x41\xd1\xdc\x47\xfd\x70\x3a\xcd\x50\x56\x3e\x7a\x54\xff\xe5\xb5\xe2\xfb\xf7\x63\xf8\x35\x8d\xd7\xbb\xe7\x13\xbb\x98\xdb\xf5\x1a\x26\xa9\xab\x37\x80\x76\x2b\x0d\x70\x1a\xaf\x83\xcc\x2d\x65\xb2\x2d\x48\x30\x59\xf5\x4d\x98\xc6\x87\xdc\x02\x07\x15\x35\xe0\xa1\xa7\xd3\xf9\xaf\xf4\x60\x42\xaf\xdd\xf5\x3a\xfb\xc8\x07\xe7\xaf\xef\x72\x30\x77\xbf\x17\xb0\xaf\x77\xe9\x5a\x19\x70\x2d\x1b\x4d\x56\xfc\xa1\xad\xc5\xe8\x57\xb1\x16\x8b\x7d\xac\xc5\xf4\xb7\xb5\x16\x8b\xdf\xc7\x5a\xfc\xec\x2e\x0e\x77\xca\x78\x48\x1d\xff\x1a\xd7\x40\xd8\x05\x98\xc4\x7f\x98\x2b\x20\xfc\x2b\x24\xf7\xbf\xfd\x61\x77\xaa\xdf\xb6\x68\xc1\xba\xeb\xaf\xbf\xba\x8d\xc6\x11\xd8\x04\x56\x27\x6e\x5c\xb1\xd2\xce\xa1\x9b\x38\xab\x61\xaf\x34\xc1\xc9\xe1\x7b\xed\x2f\x97\x69\x5c\x1e\x57\xc8\xfe\x1b\xae\xbb\x05\x58\xeb\xd7\x9e\xdb\xe3\x4d\xcc\x69\xd7\xe8\x8a\xc1\xd1\x15\x83\xa3\x6b\xef\xff\x0e\x6c\x2c\x6c\x50\x76\x28\xda\x91\xfe\x96\x54\x19\x0a\xd3\xfc\xc6\x54\x69\x45\x81\xee\x24\xcc\x46\xd8\x67\xdb\x0d\xe3\x8d\x4a\x2f\xf2\x5f\x0e\xd3\xe8\x9f\x51\x5a\xe0\xc7\x16\x36\xf5\x0d\x12\xf5\x09\x82\x7d\x33\xeb\x9a\x0f\xee\xe4\xd4\xa1\xbb\xd0\x07\x24\x8f\xed\x7c\x81\x63\x4f\xfb\xcc\xb6\xf1\xc5\x3a\xfb\x62\x9d\x7d\xb1\xce\x7e\x0f\xeb\x0c\x96\xdf\x1f\xc6\x34\x83\xc1\xfc\x2e\x86\x19\x74\xfc\x09\x99\x65\x3f\x7a\x93\xfb\xb8\x42\xf5\x9f\xe1\x2b\x17\x97\x7b\x3e\x8f\xb3\xca\x5e\x25\x7b\x5c\xa1\x0d\x58\xf8\x7d\x3e\xef\x16\xe9\x02\x3e\x7d\x43\xce\xb3\xc0\xc7\x30\xe3\x7e\x4b\x2a\x7e\x7a\x86\xdf\x0e\x42\x1e\x6c\xf6\xed\xfd\xae\xcc\x17\x0b\xb0\x23\xd3\xae\xe2\x28\xad\xae\x6a\xf2\xfd\x56\x06\xe0\xb0\x5c\xef\x85\x84\x7b\x74\xea\x1e\x96\x3d\xc0\x84\xbc\xeb\x09\x99\xcf\x8f\x23\x2e\xa3\x2a\x7e\x17\xdd\x6c\x9e\x17\x5a\xef\x18\x7d\xdd\xcc\xf4\x70\xa2\xa9\x6f\xe2\xc8\x13\xa7\x3c\xb2\xa7\x89\x86\xe7\xbf\x3f\xd1\x2d\xe8\x96\x23\x37\xfb\x70\xc1\x68\xf4\x5f\xc7\x77\x20\x59\x23\x37\x8c\xd1\x07\xf4\xfd\x69\x1e\x74\xba\xe7\x5a\xfc\x75\x1c\xaf\xbb\x9e\x7d\xd9\xd3\xf7\xaa\x9b\xf9\x44\xce\xed\xfc\x3e\x13\xeb\x89\xf0\x5b\x9d\x5e\xfb\x9d\xcd\xe4\x7a\xb4\x49\x76\x91\x7f\x14\x53\x79\xbb\xe5\x12\x4d\x37\x8e\x66\xec\x65\x9a\x6c\xb5\xef\x6a\xdc\xe7\x71\x59\x15\xf9\x60\x50\x2a\xba\xc7\x31\x8f\xdd\x2f\xfb\xec\xb9\x94\x5c\x23\x07\xbc\x49\xfd\x87\x8d\x68\x24\xbf\x4a\x44\xa3\xdc\x27\xa2\x91\xff\xb6\x11\x8d\xf2\xf7\x89\x68\xe4\x9f\x5b\x44\xc3\xdf\x84\xbf\x35\x51\xa4\xca\x8b\xf8\xa3\x5f\x98\xe9\x5a\xfd\x3c\xee\xcb\x3c\x54\x1f\x82\x6f\x76\x9c\x86\x2e\x36\xbf\xf3\x48\x3a\x78\x72\x56\x34\x59\x33\xad\x57\x2f\x3c\x5c\xee\xdf\xe3\xfa\x8e\x8f\xa6\xd2\xea\x0b\x6a\xb7\xa4\x24\x37\x43\x1d\x56\xe2\x77\x9f\x77\xb9\x6b\xf0\x8d\x52\x2d\xef\xca\x5d\x2e\x3f\x20\x94\x64\x87\xf0\xf5\x57\xb7\xc9\x38\xf9\x95\x63\x49\x87\x45\x3e\x5e\xe6\x7e\x53\x0b\xfe\xfd\x38\x71\x90\xf0\x45\x3e\x8b\xd2\xe3\x0a\xd9\x7f\xf7\x8c\x2d\x35\xdc\xf3\x70\x3a\x2d\xdc\x16\xdb\xa4\x4f\xcf\x2e\x45\xdd\x9d\x91\x5f\x7f\x75\xbb\x47\x04\xa5\xe3\xa8\x54\x8d\x2f\xf4\xa0\xb6\x68\x76\xce\xca\xaf\x13\xd1\xaa\x79\x7a\xc8\xd6\xf9\x9c\x26\xf3\x37\x30\x14\x7b\x21\xac\x5d\x94\xeb\x63\xf7\x2a\x4e\x2f\x9c\xb2\xec\x9c\xa2\x28\xe3\x59\x11\x57\x3b\x6f\x0e\x58\xf7\x54\xc6\xe9\x45\xeb\x28\x44\xed\x3c\xf4\x8f\xa1\x45\x87\x5e\xc1\x37\x78\x0e\x3f\xcd\xb3\x2d\xc4\xec\x0c\xf7\xc1\x47\x3b\x1e\x3a\xc0\x92\xd1\xea\xf1\x0c\xf0\x18\x3a\x85\xbd\xd7\x0c\xd6\xe3\x2a\x6b\xea\x7f\xc0\x51\x37\x3b\x83\x07\x1e\xc3\xeb\xd6\xe9\xe5\xd8\xd9\xa1\x7d\x28\x56\xed\x79\x5a\x23\x57\xd7\x68\x32\x29\x3f\x78\x09\xf4\x6f\x08\x69\xba\x8c\x26\xab\xcd\xe4\xc1\x59\xe7\x12\xdb\x79\x63\x2d\x5d\xdb\x3b\x6c\x17\x1f\x76\xc0\xef\xbc\x7f\xc0\x6f\xb1\x25\x01\xfc\xfc\x34\x3e\x9b\x2e\x7c\x02\xf8\x79\x37\x01\xbc\xfd\x33\x3c\xef\x27\x80\x9f\x6f\x4d\x00\x3f\x7f\xff\xfe\xbc\x9f\x00\x7e\xde\x4d\x00\x3f\x9f\x5e\x1f\x7e\xc0\x6f\x16\xce\x9b\x03\x7e\xe7\x93\xf0\xa2\x95\x00\x7e\xde\x4b\xcf\x3e\xf7\x09\xe0\x1d\xf8\xd7\xe7\x9b\x36\xe0\x45\x93\x00\x7e\xbe\x3b\x01\xbc\xdf\xc3\xb0\x19\x0b\x28\x9e\xc3\xf0\xea\x3b\x6c\xcf\xeb\x3b\x6c\x9b\x1b\x6c\xc3\xf3\x03\x1e\x2e\xaa\xf2\x45\x9e\xe6\x97\x9f\x4f\xbe\xc6\x5d\x76\xe8\x9b\x24\x9b\xf7\xef\xe1\x5b\x16\xc9\x07\xdd\xc0\xb7\xcf\xbd\x01\xf5\xf6\x47\x4d\x50\x7b\x57\x6b\x73\x42\xdb\x61\xb5\x35\xd8\x94\x7c\xec\xc7\x6d\x16\xbd\x67\x28\xdc\x7b\x13\x45\x5c\xe6\xe9\x5b\x7b\xf5\xa2\x03\xa4\x79\x34\x3f\x6a\xb1\x5d\x77\xee\xdd\xf2\x7b\x1c\x67\x6f\x93\x22\xcf\xc0\x59\x1f\x7e\xa9\xb8\x9d\xe7\xf0\x79\x39\xad\xfd\x6b\x1f\x9d\xef\xfa\x64\xcd\xea\x77\x9c\x5d\x88\xfc\x31\x85\x6b\xdb\xd9\x8f\x45\x7c\x91\xfc\x12\xac\xef\x59\x43\x6d\xf8\xba\xf4\x22\x9f\x7f\xb7\xa5\x42\xef\xd3\xba\xce\xcb\x66\xea\x9a\x95\xd1\xd9\x82\x49\xc3\xde\x85\x73\xdb\xb0\x18\x66\x98\x59\x7d\x53\xf1\xd1\x75\x94\x45\x97\xb0\xe0\x2f\xd3\xe4\xfa\xba\x7f\x25\xca\x37\x1e\xba\xae\xf0\xf8\x68\x51\x24\x6f\xa3\x2a\x7e\xec\x58\x6a\xa3\xa5\xcf\xe9\x99\xcc\x06\xf9\xf2\xf1\xd1\xfc\x26\x8b\xae\x93\xd9\x51\x9c\xc6\xc0\xfa\x47\x11\xf4\xb3\xa6\x45\x67\x54\x1f\x43\x02\xba\x48\x9a\xe3\xc0\xe6\xe2\x68\xe4\x38\x73\xdc\x4e\xa9\xaf\x0e\xc6\xfd\x73\xc1\x3b\xb2\x68\x3d\x76\x2e\xf6\xaf\x89\x73\xfd\xa6\x86\xc3\xfa\xdf\x5e\x7f\xf7\xe2\xdb\xa8\x28\x51\x15\x5f\x2f\xd2\xa8\x8a\xc7\xb7\xc9\xfc\x38\xf8\xfb\x0f\x7f\xfd\xfe\xdf\xfe\xf4\xef\xef\x82\xf0\x3c\xcd\x67\x6f\x8e\xff\xe5\x36\x28\x5d\xf0\x35\x38\x3e\x0d\xbe\xa9\xa2\x73\x8f\x68\xf0\x28\xaa\x2a\x2b\x3b\xbf\x01\x53\x0b\xfe\xcd\xb3\x59\x9a\xcc\xde\xc0\xb7\x86\x47\x83\x6f\xae\x8a\xf8\xc2\xbe\xfe\xf3\x8b\xd3\x1b\xf0\xf7\x85\x7d\xf4\x27\xb0\xb7\x7f\xd8\x78\x68\x70\x7c\x7a\x2a\xc3\x53\xa6\x42\x76\x16\x9e\x9e\x32\x1a\xea\xb3\xb3\xd0\x5e\xe3\x7a\x7a\xba\xe6\xf8\x20\x4e\xed\x23\xc1\xa7\xb7\xbd\xba\x84\x84\x41\x1a\x9d\xc7\x29\x7c\x24\x32\x0c\xa0\x87\xb0\x6e\xe7\x94\xa8\x90\xc2\x3f\xf6\x3f\x3a\x14\xb6\x65\xf8\x9b\x9d\x9d\x85\xc1\x22\x2a\xa2\xeb\x18\x14\x7e\x70\x7c\x7a\xb6\x0a\xfb\x8d\x77\x11\x93\x07\x21\xd6\xad\xab\x0e\x1e\x54\xe4\x07\x24\xc3\xba\xef\x53\xca\xc3\xa0\x8a\x8a\xcb\x18\xea\xfe\x7c\x9e\x46\xd9\x9b\xc0\x83\x8b\x18\xc8\x9b\xe5\xf9\x22\xce\xe2\x62\x94\xe5\x45\x7c\x11\x17\x85\x95\x47\x1f\x48\x84\x2d\xc8\x1c\xd4\xe8\xd9\xd9\xbe\x3d\x9d\x2f\xab\xca\xda\x5c\x76\x32\xd7\x5c\x07\xfd\x92\x76\xbf\x32\xe4\xe1\x29\xc3\xe1\x29\x93\x21\xf6\x54\x66\x67\xad\x06\x2c\x3e\x67\xe1\x29\x14\xd3\xb6\x4e\xe0\xb9\xb4\xae\x46\x7c\x35\x7e\xd6\x94\xae\x07\x71\xff\x51\x39\xe0\x55\x54\x3e\x7b\x1b\xa5\xc1\xf1\x45\x94\x96\x71\x18\x2c\x17\x6f\x23\x5b\x20\x00\xf6\x0c\x72\x1b\xc7\xb0\x4b\xc2\xee\xbd\x24\x17\xc1\xd9\xea\x5f\xc2\xeb\xb8\x8a\x8e\x6f\x9d\x02\xb3\x09\x3d\x77\x0b\x0e\x74\x75\x5e\x06\xab\x95\x33\x8a\xeb\x53\x8d\x3f\x97\x71\xd5\x08\xa7\xd7\xf5\x32\xaf\x42\xff\xb5\x5e\xf8\x3f\x64\xe9\x4d\x53\x6c\x3c\x69\x4b\xaf\x2d\x96\x56\x1b\x89\xfa\x21\xfb\x4f\x45\x80\xfd\xa4\x7e\xf9\xfe\xea\xbb\x2c\x1e\x16\x60\x8d\x60\xda\x90\x3e\x44\x87\xa4\x9e\xfe\xed\xf3\x76\xc8\xf4\x74\x29\x73\x8f\x19\xda\x50\x2c\xb7\x55\x74\xe9\x7a\x0c\x56\x87\xce\xd3\x62\x71\x64\x5f\x2e\xfa\x54\xe6\x69\xfe\x9f\xff\x11\xfd\xf3\x46\x14\x5b\x14\x8d\x7f\xba\x29\xf8\x26\xcd\x2f\x93\x6c\x73\xba\x74\x18\xc0\x90\xde\x26\xf1\xbb\x20\x3c\x85\x15\x7c\x16\x9e\xc2\x3a\x5f\x0b\xd6\x01\x89\x4a\xc3\xe0\xff\xfc\x9f\x6c\x34\x82\x6f\x3a\x0c\x6c\xcf\x47\x65\x9a\x57\xbe\x8d\xe0\x1b\x7b\xdb\x24\x08\x89\x2b\x7b\x11\x69\xb0\x77\x93\xae\x51\x82\xc3\xe0\x8a\x04\xb5\xec\x58\x7f\x1c\x39\x7f\xcb\x15\x72\x62\x2c\x3c\x0d\xdc\x0d\xae\xc1\xd9\x59\xa7\x6c\xe0\x24\x4d\xd8\x42\x77\x50\xc0\x84\x87\x8c\x67\xe6\x2e\x7e\x3e\x74\x40\x3a\x0c\xec\x54\x1c\xb9\x9b\xba\xea\x66\x37\xa6\xe7\xd4\x49\xe6\x9e\x50\xed\xca\xe5\xce\x88\xc3\x80\x63\x16\x34\xa2\x96\xd1\x90\x36\xf2\xb7\x81\xee\x49\x80\x7d\x3e\x6f\x17\xc5\xf1\x3f\x0e\x17\xbd\xdd\xd5\xf4\xfb\x49\x5f\xbf\x04\x36\x17\x75\x9b\x19\xca\x5f\x25\x76\x61\x17\x79\xb6\x7b\x91\xff\xf2\x4f\xfe\xd7\x44\xbe\x79\xbb\x45\x18\xd7\x16\xe4\x0e\xa9\x4c\xc2\x60\x9e\xbc\xf5\xf6\x0d\x6e\x2d\x7a\x67\x03\x90\xfe\x4a\x0b\x9c\xc6\xa6\x9b\x1c\xe4\x17\xa7\x5f\xd6\x03\x0b\xb4\x2e\xe2\xfb\xdb\xf8\xbe\x6f\x99\x76\xb9\x2c\x72\xe5\x78\x18\x44\x45\x12\x1d\x39\x1b\x35\x0c\xbe\x2d\xe2\x68\x3e\x2b\x96\xd7\xe7\x3b\x9b\x69\xad\xc2\x9b\x24\x4e\xe7\x5b\xd6\xf6\x79\xd3\x5a\x79\xc8\xfa\x1e\xea\x89\xb4\xad\xa9\xda\x54\xb5\x11\x03\xdb\xd3\xbb\xa4\xba\x3a\xea\x76\x77\xb6\x03\xf7\xed\xf3\xb1\x59\xee\x0e\x11\xb7\xd1\x28\xbb\x83\xf4\xf5\x14\x59\xb6\xb1\xcf\x05\xde\x41\xea\x3d\x08\x7d\xb8\x52\xb8\x1f\x3d\x0e\xa2\xc6\x96\x21\x3b\xf3\xb0\xbc\x93\xbf\xf6\x1a\x78\xd3\xd8\xfd\x47\xde\xf4\x03\x02\x2a\x4a\x8f\x6a\x17\x66\xa3\x2b\xbf\xc2\x8f\x5a\x7d\xde\xc1\x3c\xfb\x13\xf6\xbe\xc4\xdd\xc9\x6c\xbb\x3e\xde\x41\x57\x2b\x1f\xee\x47\xd3\x7d\x06\xbc\xf7\x50\x07\xc7\xb1\x15\x78\xc7\xa0\xaa\x3c\x4f\xcf\xa3\x83\x97\x49\xcd\xc5\x49\xb6\x58\x56\x9e\x8f\x49\x58\xb7\x76\x54\xe5\x97\x97\x7e\x0d\xf3\x90\x87\xc1\xec\x2a\x9e\xbd\x39\xcf\x7f\x69\x18\x7c\x60\x1e\x76\xd1\x68\x2f\xa3\xaa\x67\x86\xed\x12\xfe\x7b\x10\x66\x6f\x1b\x6c\x8d\xf3\x61\x38\x6e\xfc\xdc\x69\xf8\xcc\xf3\xd9\xd2\x45\xf9\xac\x1e\x3e\xd0\xfe\x59\xdb\x1d\x1d\xf3\xa7\xd8\x69\xfe\x64\xdb\x5c\x9b\x26\x4c\x19\x6e\x75\x72\xb6\x64\x3b\x76\xd1\x1a\xb2\x84\x36\xe3\xb7\x77\x5c\xb7\x16\x26\x0f\xfa\x39\x69\x5f\x2e\x83\xfa\xe3\x5e\x06\x55\x3f\xcc\xbc\xd3\x94\x7d\xfc\xdf\xdf\xe9\x85\xfe\xf6\xfb\x61\x53\xd6\x31\x5b\x3c\x6f\xc7\x45\xb7\x5b\xb5\x2e\x28\x48\x70\xcb\x47\x92\x6b\x6b\xeb\xda\xbe\x87\x1f\x7c\x9f\x57\xc9\xc5\x7a\xf3\xf1\xb4\xeb\x59\x09\x1b\xe5\x3a\xb2\x65\xd7\x4e\x94\x2b\x61\xbc\x1a\x7d\x9c\x75\x9b\xf0\xce\xd5\x40\x0c\x72\xab\x6c\xb6\x02\x65\xc0\x06\xef\xc7\x13\x5d\xe9\xb5\x48\xea\x57\x29\xdf\x24\x8b\xa3\x34\xc9\xde\x58\x7b\xc4\xc5\xe2\x70\x27\x16\x47\x43\x1c\x9e\x06\x17\xf9\xcc\xfb\xc3\xed\x10\xdc\x86\x90\xdd\x61\x42\x84\xc1\x37\xd7\xcb\xb4\x4a\x16\xe9\xda\x9c\x38\x8f\x2f\xf2\x22\x3e\x6a\x21\x11\x56\xc5\x32\xbe\x4b\x0c\xdf\xa9\x3b\x6b\x85\xe0\xe2\xa2\xc2\xc6\x45\xd7\x93\x14\xfc\x8f\xa0\x71\xf4\xdd\x3c\xad\x03\x8c\x5e\x63\x35\xe5\x5d\x5c\xb2\x91\x64\x28\x5a\x2c\x10\xa0\xfb\x73\x95\xff\xdc\x68\x8d\x75\xe5\xae\xc4\xa7\x61\x70\x7f\xda\x44\x17\x55\x5c\x7c\x6c\xd2\xf4\xf4\x50\x3b\x46\x71\x9d\xcf\xa3\xf4\x28\x8d\x6e\xec\x2e\xdb\x3a\x70\xd3\xd1\xd0\x1d\x75\xbb\xb6\x07\x44\x48\xc2\xad\xcb\xe0\x28\x8b\xde\xae\x8d\x84\x86\x54\x7b\xd8\x0a\x03\xbe\x21\x0f\x03\x77\x05\x40\x70\x1e\x65\xd9\xa0\xc3\x58\xf3\x79\xb3\xed\xe0\xe2\xf2\xcd\xfe\x08\xee\x6d\x45\x1c\x86\xb6\xec\x3a\x8c\xbb\xf8\xc4\x55\xfe\xf9\x3a\xce\x96\x1b\xf1\x6e\xbb\xc6\xde\xc4\x37\x8b\x22\x2e\xcb\xf5\x32\xab\x21\x27\x76\xf5\xb5\x96\x5b\xab\xd6\x75\xbe\x2c\xe3\xe5\x62\x5d\x69\x99\x0d\xaf\xce\x61\xbb\x51\x87\x6c\x2d\xb3\xb8\x75\x9e\xf2\xeb\xf8\xc8\x39\xc4\xeb\xa0\x0f\xd9\x30\x47\xb7\x5b\x59\x2d\x5e\x6f\x4f\x40\xed\x63\x1f\x40\xb2\xb6\xd8\x74\x55\x71\x53\x5e\xf8\x68\x15\x76\xe6\xf9\xf3\xec\x3f\x92\xf8\x1d\x2c\x2a\x6b\x4d\x25\x99\x35\x7c\xdc\xef\x1e\xb1\xf5\x5a\xb0\xe6\xd9\xb3\xac\xb2\x39\x07\x79\xf6\xec\x97\xa4\x0a\xc2\xa0\xae\xf6\x3a\x4f\xe3\xc2\x9e\x15\x6d\x09\x75\x55\x77\x7a\x16\xf6\x3a\x75\xcb\xb1\x27\xe1\x77\x14\xb7\x56\x5e\xbf\x7c\x4b\xbb\x54\xf9\x02\xb8\x3a\xaf\xaa\xfc\x3a\x08\x83\x34\xbe\x00\xe4\x8a\xe4\xf2\xca\xae\xb1\x23\x82\xc3\xd6\xff\xcf\x9c\xbe\xd8\x11\x0c\xd9\x9c\xe7\x9a\xab\xef\x98\xe7\x41\xe3\xb5\x3f\xbd\xad\x10\x8a\xd8\x7f\x7a\xe1\xa7\xdb\x04\x8e\x8a\x9b\xa0\x27\x74\xf7\x1c\x45\xa7\x8d\xfb\x0c\x67\xbb\x1b\xb5\xd5\xb1\xf0\x6c\x79\x87\xa0\xdb\x3e\xa0\xc1\x38\x40\xdb\x08\x18\x8e\x06\x6c\xa1\x40\xbf\xe2\x5d\x8b\xf6\x70\xdd\xd3\xed\xe1\x23\xea\x64\xb6\x09\x1a\xe6\xd3\x1d\xc3\xda\x3a\x4b\x17\x79\x5e\x6d\xa8\x09\xaf\xa4\x93\xec\x22\xdf\xa6\x2b\x86\x78\xcc\x3d\xc6\xe8\x6b\xed\x89\xc9\x26\x9f\x6d\xba\xb2\x64\x8f\x1d\x48\x7f\xda\x6b\x16\x81\x00\x80\xff\x5f\x2e\x13\x30\x60\x8f\x60\xbe\xe6\x47\x2e\x7e\x9c\x64\x6f\xf3\xe6\x6c\x58\x72\x11\xd8\x16\xaf\x02\x7b\x79\x62\xd0\x15\x87\xe1\x7a\x19\x5a\xc1\x52\x1d\xe8\x51\xf6\x9c\xc9\x34\xae\x46\xb3\xed\x57\xb4\xce\xf3\xeb\xd6\x15\xad\x3f\xbb\x60\x51\x18\xf5\x7e\xa7\xbd\xdf\xe5\x5e\x27\x71\xfa\x1e\xe1\xfa\x20\xce\xfa\x28\x78\x98\xb9\xf3\x37\xc5\xd4\xa2\xd2\xbc\x21\x14\x4d\x93\xad\xc7\x71\xa0\xb9\x76\xd2\x4e\xb4\xf5\x38\x4e\xb4\xe5\x38\x4e\xd4\x3f\x8e\x13\x75\xdc\xaf\x68\xe7\x1b\x42\x2e\xb9\x1f\x66\xd9\x5d\x5a\x3a\xcf\xaf\xed\xaf\xb1\xbb\x64\xb6\x63\x14\x80\xe7\x1a\x23\xb7\x90\xd1\x3c\x29\x17\x51\x35\xbb\x7a\xf6\x36\xce\xaa\x71\x16\xbf\x1b\x7d\x07\xc6\x81\xfb\xe9\x4d\xf8\xc9\x64\x65\xcd\x03\xa8\x58\x6f\x00\x36\x0d\x5c\xc6\xd5\x93\xaa\x2a\x92\xf3\x65\x15\x8f\x03\x9b\x11\x32\x79\x50\xa1\xb2\x8a\x8a\xaa\xfc\x5b\x52\x5d\x8d\x83\xff\x61\x6f\x87\x8d\xd1\x02\x9c\xd5\xac\xf2\xef\x6e\x8d\x3d\xd2\x80\xaa\x6b\xbe\x9a\x4c\x56\xde\x12\xe9\xe0\x78\x9e\x2e\x8b\xf1\x64\xb5\x0a\x93\x69\x3e\x2e\xdb\xd7\x7c\xda\xe9\xf9\xf0\xeb\x43\x7b\xad\x76\x4d\x28\x7b\x83\xe8\x5d\x27\xdf\x76\xd4\x9f\x84\xad\x8f\x1b\x7d\x39\xbb\x2b\x3c\x8d\x0e\xec\xc3\xd5\xdb\xdd\x76\x6d\xd5\x85\xa7\xe9\x81\xad\xd7\x35\x7b\xed\x97\xed\x98\xcd\x2c\xdc\x15\x0d\x5a\x86\xb3\xbb\x73\xd2\xfa\x8e\xec\xa7\xb2\x81\x9d\x26\xd5\xab\xbf\xfd\xf3\x87\x1f\xee\xd8\xdb\xfa\x66\x1e\xa7\xf6\x69\xef\x6f\xca\x2a\x99\xbd\xb9\x39\x7c\xbb\xab\xe7\xc5\xd7\xdb\x5e\xeb\x84\x96\xa1\x3d\x57\xeb\x80\xe6\x8b\x68\x96\x54\xd0\x25\xd9\x08\x12\xd8\x02\x55\x11\x65\xa5\xcd\xb8\x3d\xf2\x68\xf6\xf7\x6c\xe9\x59\x18\x5c\x97\x41\x37\x33\xa6\x9f\x27\x73\x08\x2a\x35\x94\xb5\x92\x75\x88\x77\x97\x06\xfb\xb0\xe6\x00\xe0\x76\x16\x9e\xe2\x4d\x63\xd4\xab\x56\xde\x75\x20\xb7\xe8\xc8\xed\xda\xb0\x51\x84\x91\x7f\x89\xbd\xac\x6e\xac\x62\x3f\x78\x63\x78\x80\x59\x7f\xbf\xfd\x61\x30\x98\xc1\x31\xfc\x54\x16\xcd\xf3\x1f\xfe\xb6\x48\xf2\xe7\x3f\xde\x2b\x3b\xe7\x74\xc3\x45\x3b\x03\xd7\x3e\xca\x2e\xe3\x0d\xf6\x6e\x17\x69\xfc\xdf\x7d\x0a\x79\x97\xb8\x57\x92\xaf\x1d\x28\xeb\x7f\xa4\xf1\xfc\x5b\xff\x5e\x7f\x55\x00\xf6\x21\x10\x36\xca\xe6\xf1\xbc\xed\xd6\xb1\x8e\x73\x72\xd4\x4c\xc7\x51\x55\x24\x97\x97\x71\x71\x04\xeb\x41\xac\x33\x1f\xc2\x3b\x2b\xda\xff\x6c\xab\x55\xbb\x0a\x30\x1e\x30\xa6\x83\xf0\x94\x9a\xb3\x56\xe0\xef\x8e\x44\x88\x7a\x04\xde\xd2\xf3\xf6\x60\xb3\x34\xbc\xe5\xe7\x4c\xa9\x83\x56\x45\x97\x0d\xeb\xe5\x10\x66\x53\xc2\xc2\x62\xca\x68\x18\x4d\x99\x0e\xd3\x29\xc7\x61\x39\xbd\x7d\x1b\x17\x55\x32\x8b\xd2\xe3\xdb\xd3\xf4\xec\xb8\x1d\xa7\x9f\x1e\x91\x3a\x5a\x3d\xae\xfe\x44\x26\xff\x33\xf6\xe7\xee\x57\xa0\x1c\xbb\x45\x71\x13\xd7\xb6\xef\xb4\x7d\x5d\x17\x3d\x22\xc7\xd5\x11\x59\x85\x4c\x0e\x64\x4b\xe3\x55\xc8\xc4\x71\x7b\x61\x34\xc7\x90\xea\xda\xab\x55\x68\x2f\x3d\xcf\xb3\x0a\x50\x5c\xad\xec\xaa\x4e\x3e\x38\xa3\x2b\x9c\xe7\xd7\xc7\xbb\x6c\x5d\x98\x0e\x28\x57\x4f\xd3\xf1\x43\x12\xe6\x45\x02\x1e\xaa\x3d\x33\x11\xd4\x74\x0b\xc2\x37\xf1\xcd\x79\x1e\x15\xf3\x27\xb3\x59\x5c\x96\xb5\x41\xd3\x1e\xaf\xb5\xaa\x7e\x1e\xb2\x6b\x1d\x0a\x65\x5c\xf9\x24\x7c\xc7\x05\x03\x06\xa3\x37\xcd\x7e\x4e\x93\xb2\x8a\xb3\xb8\x28\xd7\x56\x65\x03\xaa\xed\xb7\x9f\x8b\x7c\x59\xc5\xbb\x4b\xae\xc2\x79\x32\x7f\x9e\x95\x71\x51\x3d\x73\x9e\xf7\x06\xc2\x5f\x01\x13\xad\x2b\xfb\x4c\xef\x71\xf0\x3f\xb6\x2f\x95\x3f\x35\x46\x6f\x7d\xce\x3a\x9e\xae\xdb\xea\x59\xa6\xeb\x00\x43\x1a\xcf\xcf\x6f\xc0\x48\xb5\x45\xfd\x72\x1d\xea\x39\xf8\x53\x3c\x59\x85\xef\x92\x34\x7d\xea\x2e\xef\xd8\x86\xfb\x20\xb1\x7b\x14\x44\x45\x7c\x9d\xbf\x8d\xb7\x50\xad\xf9\xba\x0a\xfd\xde\xf8\xf1\x6d\x47\x6c\x75\x18\xf7\x50\xeb\x3d\xac\x9b\xea\xb4\x92\x5c\x8c\x1f\x9e\x7a\x37\xe8\x0c\x25\xd9\x2c\x5d\xce\xe3\x72\x1c\xa3\x37\xf1\xcd\x49\x3e\x8f\x27\xfe\x88\xf2\x83\x18\x95\x55\xbe\x00\xcd\x11\x5d\x46\x6e\xdc\x8d\x4a\x38\x45\x08\xf5\x49\x57\x8e\xff\xe5\x14\x7c\xe7\xff\x77\x1a\xc0\x44\x24\x55\x7c\x1d\x9c\xfd\x4b\xb8\x9e\x9a\x89\x3d\xe1\xd9\x74\x34\x9d\x4e\xb3\xf7\xef\xdb\x3f\x8b\xc9\x2d\xf8\x88\x7e\x3a\xeb\x55\xf1\xb5\x53\x47\xc7\xd5\x29\x3e\x7b\xe0\x78\xb9\x58\x66\x28\x8b\x7f\xa9\xc6\xe3\xc9\xf4\xcf\xb7\xfd\xf2\xf1\x71\x67\x8e\xc3\x66\xc7\x2b\x7e\xf4\x28\xf6\x4e\xc7\x64\x35\x59\x75\xce\x51\x9d\xda\x3a\xad\xd5\x77\x76\xda\xa0\x76\xb6\x26\x49\xdf\x99\xf1\x14\x49\x36\x19\x69\x80\x18\xc7\xb6\xef\x0e\x49\xac\x53\x9c\x3f\x48\x1e\x3d\x1a\xe7\xd3\xca\xbe\x15\xf1\x1c\x24\x6a\x77\xc7\xb1\x16\x59\xd3\xe9\x34\x59\x4d\x26\x93\x07\xd5\xe9\x6e\x84\xc7\x55\x98\x4f\xce\x9a\xb1\x86\x4e\xa7\x0e\x73\x93\x0d\xa5\xc7\xf3\xaf\x6d\x7b\x9e\x0d\x51\xbe\x88\x33\x7f\x77\x8a\x15\x1a\xa7\xf1\xd9\xe4\xb8\x53\x62\x96\xe6\x65\xdc\x2f\xb2\x0a\x2d\x78\x73\xa9\x0c\x2c\x88\xbe\x58\x5a\x2b\xab\x87\xa4\xfe\xda\x9d\xe8\xce\xb4\xfa\x86\x5a\x6b\xbd\x09\xd5\xc3\xe4\x86\x30\x82\x36\x1e\x3b\xba\xc3\x93\x07\xc0\x03\xf7\x64\x6a\xaf\x47\x1e\x3d\xda\x64\x01\xbb\xd1\x71\x0a\x5e\xd4\xb4\xb5\x63\xd1\xae\x8e\x16\x51\x11\x67\xb5\x78\x9c\xec\xb9\xb4\xc3\x2e\x25\xca\x8e\xc8\x6b\xed\x58\x1c\x91\x60\x53\x22\x45\x73\x27\xee\x2d\xaa\x75\xc6\xc0\x78\x12\x82\xe4\x99\xe7\xef\xb2\xe3\x78\xfa\xe7\x5b\xaa\xa6\xd3\x69\xc3\x4f\x7e\x6c\x4d\x87\x9e\xaf\x42\xf3\xb0\x53\x88\xaa\xf6\x6f\xc7\x50\x5d\xc5\xe5\x1b\xaa\x79\xa8\x16\x50\xc3\x9c\xd6\x74\xb7\xa7\xbc\x5b\x4d\x56\xab\x6e\x82\x41\x72\xb7\x3d\xbd\xac\xae\x8e\xe6\x89\xbb\xbc\xfa\x2a\x2a\x2a\xf4\x4b\x9d\x17\xfb\xeb\x19\xd6\x6b\x80\x35\xa1\x5b\x38\x04\x75\x9c\xe2\x38\x48\xe6\xd0\x4e\x9e\x1d\xdf\x9e\xfc\xdb\x93\xef\xff\xfa\xec\xf8\xf4\xd6\x2d\x58\x57\xc1\xbe\xd2\x32\x0f\xc2\x59\x9e\xcd\x8f\xc1\x90\x7b\xed\xae\x86\xaa\xf5\xc8\x69\xe0\x13\x79\x57\x61\x53\x6f\x99\xb5\x6b\x76\x4a\xe6\xcb\x2a\x38\x5b\x9d\xad\xdc\x73\xc3\xe5\xf1\x2d\x74\x7f\x7c\x7b\x68\xf7\xdb\x3a\x5b\x9d\xad\x56\x61\x1b\x72\x7c\xbb\x0a\x3b\xbf\xec\xd4\xed\x3f\x57\xfb\x25\x85\x84\x07\x4e\xfa\xae\x3b\xb1\x42\xfb\xf4\xe8\x83\xcd\x87\xd7\xbe\xa4\x91\xfc\xb1\xd3\x48\x66\xbb\x1d\xe0\xab\x3f\xfd\xfb\xbf\x5d\xe3\x7f\x7c\x37\xec\x00\xbf\x72\xc2\x24\xf8\xeb\x32\x2a\xc0\xf5\x7a\x32\xf3\x91\xf7\x5a\xa6\x05\xde\x31\x86\x7f\x93\xec\x0d\x78\x63\x8b\xa4\x77\xe0\xae\x2c\x66\xf6\x9f\xc4\x9e\x0b\xdb\x3c\x37\x61\x01\x47\x96\x93\x9b\x2d\x1a\xa8\x63\x9d\x47\xee\xf7\x1e\xf6\xc8\x0d\x69\xed\xea\xfb\x48\x51\x6f\xbf\x07\x56\xbb\x4b\x9b\x6d\xe4\x4d\x7b\xd7\xae\xf6\xbc\x9b\xaf\x3b\xd2\xff\xeb\x4e\xd8\x46\x27\xf1\x2f\xb1\x45\xdd\x0b\xb0\xc1\x1e\xea\x43\x0a\x1f\xd8\x3c\x48\xbd\x6d\xed\x5b\x89\x38\xdc\x41\x7b\x6b\xd3\xef\x93\xcd\xa3\x2a\x3a\x72\xaf\xb4\x75\xa6\xc0\x1d\xa2\xac\x23\x1a\xb6\x7d\xd3\xd9\xc5\x3d\x1d\xe8\xbe\xbd\xa5\x04\xde\xbf\xe8\xc4\xce\xdc\x62\x87\x11\x40\xa7\xee\xa8\xc9\x50\x1b\x14\xea\x07\x4e\x7a\x6f\x84\x3f\x76\xf4\xc6\xee\xe8\x6d\x0b\x51\x86\x29\x62\x59\xba\xa6\x87\xe3\x5f\x77\x72\x04\xef\xcb\x94\xf0\xc5\xa5\x57\xe9\xee\xf6\x7a\x13\xbe\x71\x6c\xd2\xcc\x67\x50\xdf\x6f\x38\x4c\x5a\x1a\x4a\x1b\xbd\x8c\xb3\x76\xde\xc3\x9d\x25\x7d\xc1\xba\xb8\x9d\x94\x83\x12\xaf\xda\xdb\xaa\xf5\xd1\x1a\x47\x97\x6b\x90\x03\xb1\x4b\xc7\x6f\xe9\xcc\xfb\x24\xdb\xea\x50\x77\x4f\xe9\x74\x1a\x6c\xed\x47\xaa\x81\x0d\xdf\x9d\x3b\xb1\x7b\x8f\xa0\xa3\xf7\x3f\xce\x18\xba\x4d\x7e\xe0\x28\x36\x4b\xa8\x75\x91\xa1\x06\xe4\x1d\x27\x93\x48\x48\x43\x16\xf2\x50\x1c\x72\x44\x69\xfb\x96\xac\x17\xe3\x75\x50\x2e\x0c\xc0\xe5\x4c\xf2\x65\x2d\x70\x83\xeb\x16\x93\x87\xc1\x3f\x96\xf1\x32\x5e\x87\xf2\x0e\xdd\xa4\xed\x9b\x54\x9d\xcd\xda\xf9\xf6\x8b\x10\x8b\x78\x91\x97\x49\x95\x17\x37\x8f\xf3\x64\x3e\x3b\x5a\x14\xf9\xdb\x64\x1e\x17\xf6\x6e\xc4\xbb\x76\x6c\xbb\xbf\x93\xbd\x76\x70\x9d\x8d\x65\xaf\x8f\x6a\xdf\xa3\xd8\x8a\xbc\xb8\x30\x40\x58\x4d\x2d\x72\xed\xeb\x14\xf3\xad\xfb\xb7\xfd\x97\x71\x7f\xe3\xeb\x14\x9d\x6f\x66\x67\x7c\xda\xdc\x7a\xb1\xaa\xd5\xe7\x78\xf3\x3a\x6e\x5b\xde\x4e\x3d\x72\x0e\x55\x5e\x3c\x7f\xba\xb2\x12\x70\x5c\x07\x4f\x1c\x75\x2f\x1b\x47\xb7\xc3\x3f\xad\x6a\xe0\x1a\x6e\x14\xee\xb7\x1d\x4c\x1e\xc0\x72\x9b\xda\xe0\xc9\xf8\xae\xc6\x5f\xd9\x2b\xc8\xa0\xd6\x24\xf4\xd5\xaa\x47\x8f\xc6\xdb\xba\x69\x15\xb7\xfc\x96\x4d\xd7\xe2\x2a\x78\xd0\x09\xdb\x3c\x74\x2d\x65\xd3\x60\x59\xc6\xb5\x53\x1b\x15\x97\x25\xaa\xd5\xeb\xf8\x16\x34\xce\xf1\x60\x4f\x50\xe1\x66\x61\x1f\x37\x5d\x39\x35\x01\xfc\x54\xb7\x7f\x07\xc1\x96\xd5\xd5\x77\x71\x75\x95\xcf\x83\x89\x77\x5f\x81\xbf\x90\x6f\x67\x7f\x82\xd8\xaa\x9d\xcf\xd6\x54\xdd\x3e\x14\xf7\x15\xf0\xae\x75\x1b\x78\xb8\x61\x3e\x5d\x8e\x93\xf6\xb6\xad\x63\xf7\x0f\x7f\xf1\xb2\xd7\x6c\xcb\xc6\xdb\x63\x9b\x7a\xb8\xea\x24\x4c\xda\x3b\xc9\xbd\x1e\x6a\x03\x6f\x8f\x7d\xea\x81\x7a\x77\xb6\xed\xac\xbb\xf2\xf0\xc6\xa1\x62\xaf\xf5\xa4\x1d\x56\x98\xef\xdc\x03\x9f\x85\xf3\x3d\xf6\xc0\x41\xf0\x5e\xe4\xc5\xf5\xef\x1b\x75\x00\x0c\x06\x63\x0e\x2f\x9f\xbd\x7a\xf6\xba\xe5\xf3\xdb\x2f\xab\xb3\xf0\xd9\xcb\x97\x3f\xbc\x6c\xc1\xdd\xb1\xe1\xcd\xc0\x41\x9c\x55\xc5\xcd\xf1\x69\x30\x4b\xe3\xa8\xb0\x07\xa5\x83\x33\xdb\xf0\xab\x9f\xbe\xfd\xee\x79\xbb\xe5\x34\x8f\xe6\x49\x76\xd9\x0a\x25\xfc\x87\x35\x39\x5b\xa1\x84\xa6\x93\x55\xe8\x4b\x1f\xdf\xae\x42\x0b\x3d\xbe\x8d\x7f\x49\xaa\xa1\x8e\x5e\xff\xe7\x8f\xcf\xbf\xff\xeb\xc0\x10\x3e\x0c\x83\x7d\xe3\x14\x76\x6e\x3f\x3c\x4a\x31\xc0\x22\x77\x95\xae\xa2\xf3\x72\x6b\x40\x03\xbc\x7a\x50\xa4\x36\xa0\xf1\xa0\x7d\x11\xf6\x97\x60\xc6\xff\x0d\xc1\x8c\x7c\x77\x30\x83\x55\xf9\x7f\xbf\xfe\x2e\xfb\xcf\xfd\x82\x19\x27\xc0\x97\xbb\x22\x1a\xb5\x2d\xdb\x3a\x4c\xf3\x3a\x3a\xaf\x9b\x79\x7e\x99\xe5\x45\x3c\xaf\x5b\xf3\x3f\x9b\xf6\xaa\xe8\xfc\xe9\xba\xc9\x6a\x5d\x2f\xcb\x2b\xfb\x0c\xcb\xc0\xc1\x9c\x30\xf8\x66\x6e\x9d\xee\xcc\xde\x44\x09\x7f\x35\x57\xd0\x39\x5f\xbc\x5c\x9e\x5f\x27\x03\xf9\x08\x77\x85\x51\x5c\xfa\xb8\xfb\x78\x76\xb8\xef\x4a\x54\x37\x89\xa0\x76\x1b\xf7\x8f\x0f\xb5\x6f\x64\x70\xb1\x19\x1f\xde\x70\x8e\x3e\xfc\xb3\xbf\x4b\xba\x1b\xa9\x22\x76\xb9\xa0\x3e\x8f\x0c\x70\x81\x15\x07\xf8\xd5\xd7\x44\x34\x64\x1c\x4a\xe1\xa8\x63\x0f\x56\x89\x74\x1c\xb6\xf6\x89\xa0\x0d\xa7\x5b\xd8\xc0\x8b\x93\xc5\x03\xf9\xee\xbb\x7a\xb2\x6a\x69\x57\x36\xc8\x46\x9e\x3d\x08\x65\xa7\x2d\xb6\x84\x3b\xec\x57\x64\xff\x5b\xa2\x8b\xa4\x28\x2b\xb7\x06\x5b\x21\x90\xbb\xb1\xdb\xec\xd4\x77\xb0\x91\x71\xb5\x7d\x6c\x4e\x5f\xf5\x93\xa9\xf6\x8f\x3d\xec\x1f\xd2\x73\x6a\xaf\x99\xa8\x06\x72\x76\x57\xb0\xa7\x8e\x95\x78\xee\x3d\xdb\x1e\x74\x6b\xa9\xe9\xfb\x50\xaf\x37\x65\xed\x6c\x98\x7d\x67\xdd\x5d\x93\x3c\xdc\xc6\xce\x80\xe2\x66\x2a\x5f\x63\x41\xf9\x1c\x3e\xbe\x79\xba\x65\x3f\xb1\x02\x2a\xfb\xe4\xde\xa2\xa5\x45\x3e\x6d\xc3\x25\x65\x3c\x7a\xf5\xea\x87\x2e\xc7\xec\xc3\x27\x4d\xec\xae\x8a\xce\xed\x01\x89\x1a\xdd\xa4\x8a\xaf\xcb\xf6\x85\x70\x67\xdd\xbc\xf7\x01\x19\x52\xdf\x8b\x51\xc6\x69\x3c\xab\x5c\x12\x55\xb0\x25\x66\x0c\x34\x6b\xa2\x76\x35\x7b\x87\xfb\x36\x0a\x43\x1d\x6e\xb2\x2c\xf3\x8d\x43\x92\x7b\x89\x14\x42\xf6\x59\x98\x1d\xf1\xb6\x35\x2a\xba\x3d\x1e\xb5\x4f\x34\xad\x66\xf8\x7b\xf1\x44\x7b\xcd\x84\xed\xab\x89\xf6\x67\x88\x16\x53\xd4\x6a\xf7\xd4\x5d\x4c\xe7\x4e\x49\x44\x69\x5c\xd4\xc7\xdf\xdd\xb5\x81\x07\x63\xdd\x3d\xb8\xe3\x89\xc1\xc2\xd3\xe0\xdb\x7c\x7e\xd3\xc8\x92\x43\x2e\x83\xea\x1d\x05\xc2\x61\xb0\x18\x38\x78\xb6\x49\x29\x27\x9b\xc3\xe0\x7b\x7b\xbc\xff\x1e\xb7\x02\x0e\xdd\x91\x34\x38\x05\x9d\xbb\x92\x0e\xe9\xa7\x35\x2d\x9b\xa3\x2c\xab\x22\xb7\xba\xb3\x19\xaa\xbb\xcf\x7d\x64\x1d\xe6\xd1\x45\x94\xa4\x6e\xcd\xd8\x44\x5a\xa8\x71\x5e\x0c\x1f\xa0\xec\xff\xef\x6f\xf1\xa8\x88\x67\x71\xf2\x36\x9e\x8f\xa2\x91\x5d\xaa\xa3\x8b\x22\xbf\x1e\xdd\xe4\xcb\x62\xf4\xc3\xf3\xa7\x27\xa3\x3a\x02\x38\x3a\x5f\x56\xa3\x59\xbe\x4c\xe7\xa3\x2c\xaf\xa0\xeb\x51\x92\x8d\xaa\x7c\xe4\x71\x79\x97\x54\x57\xa3\xa4\x42\x5b\x16\xc7\x96\xbb\x1a\x0f\xa2\x2c\xf9\x4d\x28\xbb\x39\xc2\x26\x08\x7a\x1f\x12\xbf\xbe\x8a\x7b\x84\xbc\x8a\xca\x51\x11\xff\xb7\x95\x74\xf6\x2e\xf7\x51\x64\xe3\x72\x8e\xfe\x68\xf4\x63\x1a\x47\x65\x3c\xba\x8a\xde\xc6\xa3\x28\x1b\x45\xf3\xeb\x24\x4b\xca\xaa\x88\xaa\xbc\x18\xd9\x74\x13\x37\x3d\xa0\xa7\x46\xd7\x36\x84\x35\x6a\x7c\x2d\x50\xd4\xbf\xe2\x1c\x18\xf3\x1b\xcc\xc1\xab\x57\x3f\xd4\xd4\x7f\x97\x64\xf3\xfc\xdd\xc8\x66\x1f\xdd\x8f\xc5\x37\xe9\xef\xdb\x7c\x17\x95\xbe\xdd\x86\xe4\x55\x71\x33\x8a\x2e\xa3\x64\x7f\x0a\x1e\x38\xb2\x3a\x90\x71\xf8\x30\x82\xb3\xfa\x3a\xba\xf6\xd4\xcc\xe3\x2a\x4a\xd2\xfe\xb5\x74\xdd\x7a\x07\xdd\x83\x79\xaf\x7b\x40\x3f\x51\x21\xf9\x3c\x7b\x1b\xa5\xc9\x7c\xd4\xec\x1b\xde\x8b\x77\x9c\x50\xb4\xef\x21\xc4\xf3\xd1\x3c\x8f\x4b\x2b\x1d\xe2\x5f\x92\xb2\x6a\x18\xc7\x7e\x1e\x45\xa3\x56\x87\x20\x38\x1c\x13\xff\x9a\x22\x91\xff\x06\x74\xfc\x7e\x2d\x01\xcb\x7b\x91\xf1\xfb\x1c\xec\xd6\x75\x23\xa3\xa8\x88\x1b\x89\x15\xcf\x47\x17\x79\x31\xaa\xae\xa2\x6a\xd4\x3c\x2a\xf1\x65\xfd\x6d\x9a\x94\x1d\x4c\x86\x50\xdd\xf3\x0e\xa9\x81\x9d\x4e\xb6\xf7\x25\x8d\x7b\xf4\xb3\xb6\xf6\xf4\xa0\xe9\xeb\x97\xe3\xfe\x46\xdf\xfa\x38\xaf\x77\xc9\x44\x18\x34\x01\x9f\x43\x3c\xec\xed\x37\x09\x5e\x24\x71\x3a\x2f\xe3\x6a\xe0\x44\x70\xbb\xd8\xfa\xe2\x6a\xd1\xba\x87\x80\xb8\x13\x5a\x37\x8b\xf8\x68\x11\x95\xe5\xbb\xbc\x98\xf7\xaf\x91\xf0\x7f\xe3\x81\xe4\x05\x71\x56\x47\x5f\x86\x6e\x87\xb9\xc3\xd8\x6f\xdc\x92\x00\xac\x8a\xa3\x4e\x3b\xfb\x9c\xa6\x87\x45\xb2\x88\xb2\xf6\xb0\x5f\xd4\x8a\xb7\xba\xaa\x4d\xc2\xa1\x33\x5a\x3d\xb6\xac\x1d\xe9\xf5\x15\x20\xb2\x1d\x5f\xda\x23\x24\xe4\xdc\x6f\xe6\xdc\xef\xd3\x7a\x83\xed\xcc\xbb\xe5\xc1\x22\x8d\x66\xf1\x55\x9e\xce\xed\x5d\x0d\xcd\xfe\x9b\xeb\x89\x86\x03\x51\x00\x8b\x42\x9e\x39\x8c\xee\x13\x94\xe8\x47\x14\x7a\x81\x24\x9f\x66\xbd\x0e\xfc\xdc\x37\x52\x74\x8f\x56\x1d\x7f\xbb\xad\x90\x81\xf9\x6e\xdf\xb5\xbd\xa9\x4e\x3c\xdc\xde\xc7\xd0\x7d\x3d\xc3\xf3\x52\x15\x97\x55\x3b\x58\x17\x54\xf1\x2f\xa0\x4f\x1a\xee\xee\xdf\xa7\x41\xda\xc1\x02\xc2\x5a\x09\x57\x35\x3f\x64\x03\xd7\x75\x0f\xcb\xb0\x5f\xd1\x6f\x3e\x74\x59\xed\xef\x4a\x6f\xd5\x3b\x1b\x1e\xf5\xce\x3b\x1e\x3b\xd6\x84\xb5\xf1\x1d\x0f\xde\x75\x9b\xe1\x5d\x12\xfb\x40\xfd\x70\xe0\x0d\x83\x75\x46\xcb\xe9\x3d\x16\x7d\x2f\xc0\x50\x87\x9f\x0f\x8b\x08\x38\x91\xb5\xff\x7d\x81\x07\xd1\x6f\x2d\xf0\x88\x0e\x89\x68\xf1\x79\xbd\x22\xd5\x60\x4c\xcb\xe7\x16\x9c\x35\x8f\x24\xb4\x33\xec\x06\x6f\x1e\xc1\x61\x10\x5f\x6f\xe1\x90\x93\x3c\xab\xa2\x59\xe5\x1d\xbf\x8e\x47\x08\xd6\x93\x0b\x04\xcc\x8a\xd8\xbe\x85\x17\xa5\x25\xda\x36\x73\x9b\x43\xd5\xa1\x09\x09\x0e\x09\x01\x91\xd0\x1b\xf6\xf6\xfb\x35\x76\x2d\xd2\x66\x92\x0f\xd3\xf1\xda\x07\x0b\xfb\xf9\x96\x3b\x77\x7e\xea\x27\x2d\xea\x18\xcf\x3a\x2d\xd3\xfe\x5d\x6b\x44\x17\x3c\x94\xad\x13\x98\x72\x4b\x80\xc8\x75\x73\xe6\x03\x86\x6a\xf3\xe8\xe6\x50\xc5\xc6\x70\x6d\x2a\xea\x2d\x67\x3e\x07\x23\x52\x61\x90\x27\x76\x94\xb5\xca\xe9\x6d\xad\xd4\xda\x60\xdf\x6d\x93\xcd\x0d\x1a\xb2\x19\x4f\xbf\x7f\x78\xfe\x80\x1d\x95\x5d\xea\xab\xb3\xb9\xb3\x23\x44\x7f\xe0\x8d\xe2\x6a\xd0\x96\x96\x83\xd0\x6e\x8e\xdf\x5e\x97\x8f\xd7\x81\xff\x9a\xe1\xd7\xa7\x6d\xfd\x79\xf4\x26\xc1\xaf\x4e\xe1\x73\x89\x7d\xb3\x28\x73\x7b\x9c\x50\x24\xeb\x1c\xd7\x8d\xb3\xb7\xcd\x3d\x2d\xf3\x64\x7e\x94\xd8\xa3\x95\x50\xae\x2c\x93\x4b\xa8\x66\x95\xd4\x7d\x72\x00\xd7\xe9\x0a\x9d\x0c\xc0\xe5\x74\x7c\x57\x3a\x5f\x32\x1e\xef\x77\x07\x4b\xeb\xcd\xa9\xfe\x79\xc9\x5e\x06\x9c\x03\x36\x9b\x22\xd3\xa2\x9d\x1a\x67\xb7\xa4\xba\x2f\x74\x05\x41\x9d\x1a\x67\x99\xad\xb5\x9f\xbf\x06\xfa\xbb\x4c\xfc\x79\x34\x6b\x6e\x34\xc7\xe3\x56\x93\x5e\xf2\x52\xbd\x11\x76\xe8\xf5\x1c\x4d\xd5\xde\x0d\x1a\xc9\xf0\xed\x1f\x87\xde\xcf\x71\xf7\xed\x1c\xcb\x9d\x99\x49\x79\xb8\x3c\x24\x33\xa9\x9d\x48\xf2\x7b\x24\x26\x1d\x01\x02\xad\xec\x24\x9f\xf2\x6a\x93\x7b\x7e\xf8\xf7\x67\xdf\xb7\x52\x78\xdc\xa7\xd5\x59\xf8\xea\xd5\x0f\x2d\x70\x59\xe6\x9d\xdc\x24\x5b\xec\xf8\x76\x15\x96\x65\x7e\xc0\x99\xa3\x45\x91\x5f\x24\x69\xfc\xa9\x5c\xb9\xf0\x7d\xf9\xe6\xcd\xdf\x79\xba\xed\xca\x85\xe6\x9e\x12\x77\x58\x71\xf0\x46\x92\xb4\xb7\x8b\xe9\x47\x18\x9c\x0d\xdf\xc1\xdf\xba\x88\x6c\xd8\x34\xdd\xe6\x24\x7e\x77\x33\x7a\x72\xf2\x62\xf4\xfa\xa0\xc8\xda\x3a\xfb\xf4\x8e\x1b\xc0\x00\x9f\xf9\x76\x7c\x36\x34\x2a\xb5\x5b\xd4\x4d\x6a\x6b\x4b\xeb\xe0\xe1\x12\x20\x4b\xb3\xcb\xea\x0a\x8a\xea\x0d\xf7\x69\x87\x99\x58\x3f\x2c\xb4\x5d\x4d\x94\xcb\x73\xab\x22\x8a\x24\xbb\x3c\x2a\x97\xe7\xee\xaf\x83\xe5\x76\x87\x35\x7f\xb7\x5b\x49\xce\xa3\x32\x99\x1d\xcd\x8b\x7c\x31\xcf\xdf\x65\x47\xf5\xfd\xa6\x03\x6f\x37\x76\x4b\xee\xd1\xc6\xe7\xf9\xec\x5e\x6f\x30\xf5\xb3\x50\x47\x55\x74\xf9\x41\x54\xe9\x34\xf4\x87\x20\x8d\x3f\xe3\xfb\x41\x54\xa9\xdb\xf8\x23\x10\xe4\x43\x08\xf1\xc9\x12\xe0\xc1\x6e\x02\xb4\x1f\x39\x1a\x7e\xef\x66\x4b\xf1\x4f\x75\xbc\x77\x4c\x78\x11\x65\x73\xfb\x68\x6d\x5c\x3c\xb6\x31\x9c\x45\x91\x94\xbf\xae\x8d\xb5\x97\x61\xc1\xfe\xed\xc5\xdb\x4a\xbe\x4a\x07\x0d\x8b\x4d\x43\x02\x83\x93\x04\xca\xd1\xc5\xaf\xec\x81\xbf\xf5\x70\x8e\xd2\xfc\x32\x0f\xc2\xa0\xf9\x1c\x84\xc1\x77\x8c\x52\x84\x8d\x09\x89\x46\x98\x73\x81\x31\x19\x9d\x30\x62\x10\xa5\xc2\xc2\x28\x65\x00\x63\x44\x22\x4e\x15\x80\x8c\xc4\xc6\x81\x38\x22\x5c\x87\x14\x23\x45\x08\x05\xd0\x0b\x80\x61\x22\x01\xa6\x89\x32\x1e\xc6\x90\xd4\x50\x53\x30\xa9\x3d\x08\x23\x66\x7d\xed\x4d\x98\x60\x08\xdb\xff\xf9\xe6\x18\xa1\xa1\xa0\x88\x33\xa6\x3b\x30\x4e\x11\x23\x92\x37\x30\xce\x44\x1b\x76\x02\x18\x2b\x6c\x61\x4a\x1a\x3f\x08\x83\x30\x54\x65\x80\xa4\x1d\x2b\xa3\x04\x31\xaa\x2c\x48\x70\xe3\x6a\x52\x89\x84\xe0\x6d\x18\xa3\x06\x61\xa3\x43\x8e\x91\xc0\xb4\x03\x62\x02\x51\xce\xfc\xf0\x3d\x8c\x0a\xc4\x34\xa6\xbe\x35\x83\xb0\x62\x40\x12\x2e\xa4\xaf\x2a\x91\xc6\x1d\x9a\x0f\x4c\xc3\xdf\x47\xdf\x51\xc9\x91\x51\x24\x24\x04\x19\x45\x5d\x1f\x54\x62\x64\x0c\x09\x09\x45\x82\x4b\xd9\x85\x69\x24\xa8\x76\x34\xa1\x02\xc6\xaf\x07\x61\x94\x20\x4d\x70\xb7\xee\x10\x8c\x29\x24\xb5\x66\x2d\x18\xe3\x1c\xa0\x86\x49\xa1\xa8\x19\x9d\x50\x49\x10\x96\x52\x71\x1e\x72\x82\x24\xa1\x14\x0b\x39\xa2\x92\x22\x65\x94\x00\x12\x12\x42\x39\x66\x6c\x44\xa5\x44\x86\x74\x40\x27\x54\x6a\x24\x0c\x71\x30\x65\xe7\x9c\x2a\x8c\xa8\xb0\xd3\xa6\x99\x91\x0e\x44\xe0\x6f\x00\x51\x43\x84\xc3\x46\x11\xc4\x24\x0b\x99\x41\x44\x43\x55\x0b\xc3\x48\x1b\x49\xa9\x01\x30\xc3\x52\x4a\x6e\x3b\x31\x48\x63\x86\x0d\x07\xb0\xd0\x58\x2a\x62\x46\xd0\xb5\xd4\x54\x2b\x01\x50\xc5\x5c\xbb\x54\x2a\x24\x84\x03\x09\x69\x11\x3a\xa1\x52\x20\x41\xa5\xa4\x1d\x30\x40\xb1\x26\x82\xab\x90\xc1\x9a\x50\x9c\x50\x3d\xb2\x13\x66\x88\xd1\x96\x76\x0a\x0b\x29\x38\x05\xda\xc1\x3c\x2a\xce\x00\xca\x89\x92\x98\xaa\x1a\x4a\x84\x01\x28\x21\x5c\x71\xaa\x1b\xa8\x9b\x0f\xad\x9b\xd1\x72\xc3\x37\x60\x9a\xf9\x25\x54\x4f\x9b\x67\x97\x21\xd8\x9a\x85\x80\xb1\x34\x43\x42\x48\xcb\x6e\x4a\xf9\x71\x2a\x65\x17\x56\x0b\x46\x15\x2c\x71\xdb\x2f\xd6\x8e\x87\x1a\x90\x42\x98\x29\xcf\x56\x1e\xc6\x38\x62\x58\x09\xdf\x9a\x83\x71\x8c\x18\xe1\xbe\x35\x85\x88\xe4\x35\x07\x68\xc3\x47\x80\x87\x14\xa2\x0d\x3a\xa1\x5a\x02\xbd\x1d\xcc\x58\x8c\xa9\x36\x88\x69\x60\x00\x29\xa9\x6b\xcb\x50\x44\xb0\x04\xa6\x53\x42\x13\x87\x86\x21\x48\x68\x03\xf3\x21\x89\x70\x52\x00\x6a\x12\x22\x1d\x43\x30\x57\x15\xda\x97\x16\x24\x95\x93\x51\x80\x86\x31\xc6\x73\x82\xaf\xa9\x0c\x52\x5a\x68\xce\xda\x60\xaa\x34\x12\x18\x6b\xcc\xa0\x1b\xae\x14\x95\x5c\x5b\x28\xc5\x84\x51\x0a\xe2\x40\x4b\xac\x31\xcc\xa4\xd2\x88\x48\xa1\x18\x07\x28\xd7\x52\x4b\xad\x3c\x18\x98\x40\x01\x18\x1b\x41\x34\xb1\xfd\x69\x44\x98\x96\xc0\x90\x02\x61\xaa\x39\x51\x74\xe4\xa0\x12\x13\x03\xd4\x05\xd1\x4b\x08\xf1\x50\xa6\x94\xa5\xb9\x36\x54\x4a\xc2\x7d\xcb\x54\x60\xa6\x00\x0c\xfc\x44\x4d\x0d\xe5\x21\xa3\x08\x5b\xee\xb5\xa4\xa2\x48\x68\x3a\x08\xa3\x0a\x11\xcc\x88\x23\x42\x0d\x23\x08\x63\x27\x58\x81\xa2\x92\x75\x58\x67\x80\x9b\xfe\x3e\xfa\x8e\x69\x8e\x24\x23\x0e\xea\x84\xfc\x09\x53\x1a\x71\xcf\x63\xdc\x71\x05\x53\x02\x51\xd7\x83\x70\x93\x56\x43\x14\xc2\x14\x7b\xa1\xef\x40\x8c\x23\x6a\xb0\x97\xd2\x0e\xc4\x31\xa2\x46\x39\xf1\x0e\xb3\x00\x72\x82\x01\x55\x85\xd1\x7a\x04\x38\x28\xd6\x86\x9c\x30\xad\x90\x30\xb6\x14\xc1\xcc\x55\x34\x20\x9b\x2d\x7b\x71\xb7\xba\x99\x61\x88\x40\x45\x82\x14\xf7\x22\x87\x19\x60\x3f\x01\xf3\x0e\x2d\x39\x24\x0c\x46\x44\x6b\xe0\x10\xaa\x5d\x39\x68\x5f\x32\x2b\x2b\xa4\xf0\x9a\x52\x0b\x10\x92\x16\x64\x9c\x38\x3d\x61\x1a\x23\x0d\x82\x99\xb5\xc1\x4c\x19\x24\xa4\xaa\xd9\x8b\x73\xca\x84\xb1\x50\x2a\x75\xcd\x5e\x54\x69\x0c\xd3\x6d\xc1\x8c\xd6\xfc\x25\x98\x96\xdc\x78\x30\xd6\x35\x7f\x49\x4a\x14\x2c\x2b\x07\x16\x96\xbf\x40\x48\x09\x4e\x84\x76\x4d\x63\x56\xf3\x17\x55\x06\x1b\xdf\x21\xc6\x35\x7f\x09\x23\x25\xf6\x1d\xc2\x8a\xf4\xfc\xc5\x09\xa5\xda\xd4\x60\xe2\x99\xc9\x6b\x64\x03\x0b\x5b\x0d\xc2\x2c\x83\x51\x3f\x8b\x35\xcc\x32\x18\xad\x67\x43\xd5\x72\xc8\xf1\xcd\x00\x2b\x01\x83\x49\x80\x72\xcf\x4c\x8e\x61\x99\x64\x48\x6b\x42\xbc\xf5\xe2\xc1\x00\x25\x5a\xd5\x5c\x4b\xa8\x26\x6c\xc4\x24\x68\x50\x23\xad\xd2\x25\x54\x19\xcd\x60\x8c\x92\x82\x71\xa0\x9c\x68\x25\x9a\x69\x69\xc4\xe8\x84\x09\x85\x0c\xd7\x5a\x58\x13\x48\x2a\x43\x18\xb4\x2b\x24\x62\x20\xab\x31\x12\x4c\x30\x25\xf5\x1a\xc4\x11\x97\x35\xf7\x3a\x98\x00\xa6\xe6\x48\x11\x21\x30\x61\x35\x58\x12\x2e\xc0\x60\xa0\x58\x50\x50\x8a\x0e\xac\xa5\xa0\x0a\xc0\x52\x1a\x2e\xb9\x83\x72\xcc\xb4\xa0\x21\x95\x88\x60\x43\x15\x97\x80\x17\x80\x15\xd3\xdc\x82\x35\x16\x86\x19\x8b\x04\x07\x22\x58\x28\x15\xd8\x30\xa1\x3c\x54\x70\xad\x01\xca\x28\x66\x14\xc4\x94\x05\x73\xc1\x05\x01\xb0\xa2\x82\x11\x5e\x77\xa8\x05\x23\xc6\x4d\x98\x66\xd0\x86\xed\x50\x09\x29\x01\x6c\x10\xe3\x54\x50\xcd\x46\x40\x1e\x49\xa5\xe6\x22\x64\x18\x71\xce\x14\x23\x66\xc4\x24\x46\x94\x2b\x0d\x1a\x8e\x20\xa6\x04\xc3\x12\xc8\x21\x31\x52\x98\x10\x60\x72\x82\x04\x35\x44\x32\x98\x39\x8c\x94\x32\x9c\x10\x0b\x15\x5c\x18\x43\x6c\x13\x5a\x18\x42\x2d\x50\x19\xc3\x61\x20\x60\x8a\x70\x4c\x85\x6d\x40\x62\x41\x29\xa3\xd0\x2e\x81\x25\xc3\x1c\x58\x09\x49\xa9\x94\x0e\x6c\x34\xd3\x4c\x02\xd8\x60\x29\xa4\xf4\x13\x0d\x22\xc1\x58\x1e\x15\x8a\x32\x06\xc4\x90\x0c\x71\x30\x1d\x18\x80\xa9\xa2\x9c\x4a\x60\x71\x09\xfc\x8e\x89\xb0\x60\x41\x8d\x21\xd4\x83\xb5\xe6\x4c\xda\x46\xa4\xc0\xd2\x28\x3b\x40\x01\x72\x8a\x5b\xa8\x92\xca\x18\x4a\x1d\x54\x4a\x4c\x89\x6d\x43\x6b\x46\x24\x56\x0e\x6c\x8c\xa0\x16\x6a\x8c\x12\x52\x58\x3e\x56\xb0\xe4\x89\x08\x19\x43\x5c\x08\xae\x2c\xc7\x2a\xa4\xb8\xd6\x44\x01\xd4\x50\xa5\x38\x96\x16\x6a\xa8\xa0\xc4\xae\x4a\x30\x6f\x34\x70\x11\x40\x25\xa3\x92\x58\x29\xc0\x04\xe5\x82\xba\x76\x8d\xe2\x98\x58\xe1\x40\x08\x67\x4a\x70\xd7\x84\xa6\x06\x84\x91\x40\xc4\x48\x21\x94\x6f\xd8\x60\x46\x6d\x13\x54\x53\x4c\xb4\x45\x58\x23\xd0\x80\xc6\x4a\x23\xc1\x35\x97\x92\x7a\x30\xd1\x14\x68\x21\x90\x66\xc2\x08\x5c\x83\x61\x70\x12\x31\xec\xec\xb9\x93\x36\x4c\x6a\xc6\x19\x1d\x39\x10\x95\x20\x71\xc0\xd3\x90\x44\x4a\xe5\xa1\xc4\x4e\x12\x70\x23\xc3\x9a\x98\xba\x2b\xc6\x98\x6d\x42\x13\xa6\xa4\x10\xbe\x59\xb0\x53\x14\x80\x0d\xc5\x9c\x12\xee\xda\xc0\x54\x2a\x09\x66\x16\xa6\x4c\x58\x91\x6a\xc7\xc6\x85\xd4\xd6\xf8\xa2\x60\xc0\x9b\x9a\x6a\x9c\x28\xe5\x2c\x35\x62\x98\x66\x8e\x6a\x4a\x71\x41\xac\x58\xd6\x82\x50\x2a\x1d\xd5\xb0\xd0\x92\x5a\xc9\xce\x35\x53\x52\x01\xc7\x72\xa4\x41\xe4\x71\xa7\x02\x08\xd8\x9b\x9e\x83\x18\xb8\x50\xce\xee\x50\xcc\x31\x9b\x11\xdc\x28\x57\xd4\x30\x46\x39\x73\x32\x4c\x69\x2d\xb5\x83\x4a\xc5\xb4\xb2\x22\x4c\x12\xa1\x54\xad\x2f\x78\x2d\xd8\x38\x93\x6d\xd0\x09\xf0\x3b\x71\x38\x49\xe9\x9c\x26\x26\x34\xd8\x8a\x60\x04\x31\xed\xb4\x94\x90\x48\x62\x02\xc3\x51\x0c\xd3\x46\x4c\x61\x41\xac\xd2\x33\x2d\xd1\x25\x89\xe1\x52\x03\xd8\x28\x82\xa5\x06\x65\x22\x34\x32\x40\x6b\x6f\x94\x71\xa1\x28\x4c\x22\x41\x54\x61\x43\x9d\xc6\xa5\xd2\x10\xcb\x5c\x20\xe2\xb5\x05\x71\xe9\xb5\x9f\x34\x48\x18\xe6\x2c\xbf\x1a\xca\xc0\xca\x05\xc5\x60\xf5\x2e\x93\x54\x68\xe9\xa0\x9a\x50\x6b\x26\x83\x44\xc7\x82\x5b\x1e\x00\xb0\xe0\x98\x38\x2f\x85\x53\x22\x14\xd0\xce\x82\x8d\x01\x3d\xad\x90\x50\x5c\xf8\x86\x35\x58\xe2\xb6\xac\x00\x95\x28\x84\x83\x2a\xcc\xb1\x85\x82\xc8\xc2\x84\xfa\x86\x0d\x57\xd4\xb6\x80\x89\xa4\x8a\x08\x07\x36\x18\x54\x21\x30\x97\xd0\xe0\x40\x4a\xd7\x9f\x21\x44\x68\xcb\x73\x9c\x51\xaa\x25\x1d\x39\xa8\xe5\x4e\xaa\x89\x36\xc0\xca\x6b\x10\x01\xdd\xe7\xac\x1a\x80\x71\xee\x16\xa3\x60\x44\x31\x4a\x7d\x9b\x98\x08\x98\x31\x86\x38\xd5\x86\x69\x63\x1b\x90\xca\x6a\x54\x2a\xb9\xa1\x02\xc6\x85\xc1\xcd\xb2\xc2\x55\x9a\xda\xc2\xc2\x08\x0b\x86\xa1\x24\x46\x12\x53\xaa\x18\xb1\x8b\x40\x69\x65\xb8\x85\x62\x6e\xb8\xb2\xac\x2a\x81\x02\xd8\x48\x90\xe5\x5c\x73\x4c\x38\x0c\x55\x4a\x04\x72\x0f\x1c\x45\x30\x9b\xb9\x92\xc4\xce\x99\x44\x84\x01\xb7\x51\x83\xa8\xe2\x0a\x24\x23\x00\x31\x14\x16\x16\xca\xb9\x30\x76\xcd\x09\x64\x08\x65\x98\x5b\x28\xe1\x8c\x5a\x85\x07\x72\x91\xd8\x56\x31\xc3\x9a\x62\x2f\x42\x29\x91\x04\xd3\x90\x6a\xa4\x94\xe6\x8c\xd6\x72\xd8\x08\x70\xa4\x28\xd8\x5b\x0c\xdb\x49\x90\x0c\x61\xa9\xad\xc6\x04\xeb\x9b\x31\x2a\x85\x13\xe5\x52\x19\xad\x00\xca\x84\x20\x92\x72\xb7\x0e\x40\x62\x01\x6a\x0a\x69\xca\x15\x08\x46\xd0\x1d\x02\x13\x2c\x24\x40\xa9\xd1\x12\xa4\x17\x40\x19\xc7\x56\x43\x4b\x44\xb1\xe1\x58\x78\x4d\xc5\x08\xe6\xd8\xaa\x62\x23\x94\xe6\x52\x38\x55\xc5\xb0\xa4\x92\x5a\x30\xe1\xd4\x68\xdf\x06\xa6\xe0\xba\x50\x70\x02\xc0\x0f\x74\xba\x0a\xd4\x85\x03\x52\x2e\x35\x65\xae\x61\x0a\xe2\xcc\x00\x58\x70\xaa\x88\xa9\xc1\x8a\x19\xd0\xe6\x02\x51\xa6\x95\x50\x1e\x0d\x2a\x8d\x01\x8b\x80\x03\xbb\x71\xcb\xa8\xb6\x30\xa6\xd4\x1a\x1b\x4c\x6b\xc1\x8c\xae\x9b\xc6\xd2\x15\xc6\x92\x09\xa9\x8d\xc7\x59\x4a\x05\x60\x6a\x4b\x83\x49\x67\x35\x29\xb8\xef\xd6\x02\x93\x4c\x61\xad\x8c\x5d\xb1\x94\x6b\xec\xa0\x1c\x56\xb7\xe0\x8e\xfa\xd2\x08\xa5\x6c\x00\x81\x33\x6d\xa8\xf1\x33\x48\x34\x07\xff\x18\xc0\x54\x32\xde\x68\x4c\x0f\xe2\x9e\x37\xa5\x44\x52\x73\xd7\xa8\x13\x30\xc0\x98\x96\x38\x04\x49\x2d\x4c\x2d\x06\x08\xb1\x68\x62\xa3\x64\xb3\x52\x98\xb1\xe6\x9b\xb6\x36\xba\x85\x61\x90\x5d\x46\x58\xbb\x50\x61\x61\x6d\x03\xab\x05\x14\xc3\xce\x0d\xa6\x42\x30\x66\x1c\xa7\x4b\xed\xcc\x3f\xc6\x08\xc5\x4e\x4e\xf7\xac\x47\xb0\x29\x05\x41\x0c\xd7\x2e\xb4\x8b\x7c\x30\xae\x10\x28\xc1\x21\x18\x48\xbf\x26\xf8\xe5\xeb\x0e\xc1\x5a\x75\xa1\x17\xac\x10\x63\xce\x44\x05\x79\x6c\x4b\x62\x89\x60\x2d\x5a\x03\x93\x49\xa6\x0d\x83\xd1\x60\x0e\xde\x86\x02\x2b\xd5\x20\x46\xa4\xa1\x46\x8f\x18\x86\x2e\x30\x36\xce\xf4\xc4\x8c\x30\xd0\x47\x18\x2c\x28\x1b\x39\x30\x18\x7b\xa7\x05\x63\x24\x29\xb3\xc4\xa4\x4c\x36\x30\xe6\xcc\xde\x66\x3c\xd4\x48\x64\x18\x19\x84\x75\xc6\x83\x31\x32\x83\x20\x58\x09\x98\x7b\xad\x81\x09\x92\x9c\x68\x6a\x2d\x5b\x06\xc2\x8a\x82\x70\xc6\x0c\x49\xcc\xbd\x79\x8c\x39\x55\x02\x64\x13\x16\x48\x0a\x6e\x99\x85\xc2\x12\xc1\x56\xf5\x63\x50\xb9\x96\xd3\x14\xaf\x67\x7c\x93\x6c\x40\x4c\xce\x11\x23\xba\x4b\x4c\xce\x90\xd4\x0c\xe4\x5d\x87\x9a\x9c\x20\xa1\x89\x30\xa2\x43\x4d\x06\xca\x88\xf6\xa9\xc9\x14\x52\x82\x75\xa9\x09\xaa\x06\xcb\x2e\x35\x99\x42\x4c\xf4\xb8\x03\xcc\x33\x2e\x07\x61\x1d\xd2\x31\x30\xdd\x86\x61\x1d\x7a\x02\x4c\xaa\x1e\x4c\x5b\x2b\xda\x09\x21\x06\x66\xa8\x95\xd2\x1c\x83\xcf\x60\x24\xb3\x34\xa6\xca\x50\xcd\x47\x8c\x53\xa4\xa8\x04\x27\x9d\x52\xa4\x8c\x91\x94\xb2\x11\x50\x0e\x8c\x73\xa0\x31\x21\xbe\xd9\x4d\x6a\xfe\x7d\xf4\x1d\x65\x18\x81\x8f\x61\x90\xa4\x00\xc4\x62\xf4\x82\x12\x02\x7e\xc8\x20\xac\x3d\x20\xa8\xcb\xa5\x1c\x84\x31\x8d\x8c\x30\x3e\x7c\x47\x04\x22\x7c\x18\x46\x15\xe2\xca\x45\x7e\x5e\x50\x50\x29\x86\x0d\xc3\x18\x08\x5e\xdd\xad\x3b\x00\x23\x0c\x51\xe9\x83\xcc\xf5\xd8\x86\x60\xad\xb1\x01\x15\xb8\x46\x4a\xb2\x8e\xc3\x49\xb9\x40\xba\x09\xdc\x5a\x18\x05\x03\x0a\x4b\xcb\x62\xcc\x85\xcf\x29\x33\xc8\x8a\x53\x8c\x24\xa1\x3e\x6a\x06\x03\xa5\xdc\xc2\x1a\xfc\x98\x46\xa0\x84\x5c\xd0\xb6\xa6\x95\x40\x6c\x0b\x8c\x53\x24\xc0\x84\x71\x30\x50\xd6\xc3\x30\xca\x11\xd5\x5a\xac\x61\x30\xeb\x6b\xd8\x09\xa0\x6c\xc0\xa5\xa3\x36\x94\xe9\x46\x01\xee\x8a\x8b\x43\x52\xe7\x73\x53\xae\x90\xa0\xbc\x0d\x3a\xa1\xdc\x20\x22\x45\xb7\x98\x41\x46\xdb\xd5\x2c\x14\x13\x1d\x10\x47\x44\xf9\x85\x53\xc3\x00\x5f\xed\x37\x01\xa8\x60\x08\x6c\xb7\x21\x18\xd4\x05\x43\xc1\xf6\x0a\x30\x46\x81\x76\x18\x4c\x5c\xe8\x42\x50\xe4\xbd\x7e\xe1\x89\xbe\x39\x5d\x20\x2e\x28\x41\x94\x5a\xa6\x17\xa2\xde\x2b\xa0\xcc\x86\x1c\x5b\x30\x46\x05\xc2\x30\x7c\x8a\x28\x76\xf2\xa7\x01\x81\x48\xf3\xe1\x55\x0b\x33\x36\x00\x43\x95\x0f\x18\x37\x30\x8d\x18\xa1\x2e\x00\x01\x4c\xa8\x9d\xed\x8f\x75\xb3\xf3\x80\x45\x07\x74\xc2\x40\xbf\x11\x1b\xa6\x16\xac\xd9\x77\x11\x8a\xfa\xf8\xa5\xab\x48\xb8\x15\xdf\xe0\x89\x48\xb2\xde\x14\xa1\x5a\x0d\xc2\x6c\x24\xc2\xac\x37\x45\x88\xd1\x56\x08\x30\xe2\x50\x23\x1a\x49\xee\x84\x00\xa6\xaa\x46\xad\x47\xa2\x3a\x66\xac\x2d\x43\x30\x2a\xeb\xf0\xaa\x42\x4c\xd1\x36\x8c\x6a\x8d\x94\xb0\x5d\x68\x2d\x44\x07\x04\x1a\x8e\xf8\x15\x56\xc3\x34\x52\x86\xd5\x71\x64\x8d\x08\xa0\x32\x04\x5b\xd7\x3d\x69\x60\x14\x1c\x7b\x17\xc1\x55\x06\x29\xd3\xc5\x63\x03\xdd\x3a\x28\xc9\xb5\x87\xfa\x1d\x1a\xad\x11\x67\xa4\x0d\x63\xda\x20\xcd\xb8\x1f\x44\x17\x64\xd5\xb4\x27\x71\x0d\xb3\x08\x7b\xf9\xad\x0c\xa2\x74\x0b\x6c\x5d\xf7\xa4\x81\xd9\x41\x38\xba\x6b\x0c\x7e\x4a\x17\x91\x0d\x7c\x5b\x56\x8a\x46\x92\x51\xea\x44\x6f\x6d\x91\x0c\xc1\x08\xd8\x62\xc6\x74\x2d\x92\x01\x58\xab\xee\xdf\xeb\x5d\xc2\x8b\x24\x4d\x8f\x0a\xbb\x9f\x19\x64\x79\xf6\xcf\xb8\xc8\x87\x12\x85\xee\xbc\x60\xf1\x80\x3c\x9a\x2d\xdb\xb1\xbf\x5f\x32\x4d\x1b\x9f\x4f\x24\xe5\xec\xe2\xb5\xf8\xf6\x1f\xf1\x73\x3d\x9c\x72\xf6\xcd\xbb\x64\x5e\x5d\xb9\xdb\x44\x52\x9b\x82\xfa\x4d\xb9\x3c\xaf\x92\xca\x4e\xe3\x8e\x37\x80\xfa\x2f\x5b\xb6\x87\xee\x8f\x4f\x89\xf0\x94\xb9\xf7\x96\x8b\xcb\x24\x3b\x4a\xe3\x8b\xea\x78\x34\x8b\xd2\xd9\xf8\x28\xa8\x53\xcb\x83\xc5\x2f\xa3\xc7\x23\x3a\x09\xfa\x8f\x49\x35\x69\x69\x6f\x2f\xeb\x03\x61\x1e\x55\xdb\x68\xfd\x30\xa3\xe7\xbd\xab\xd8\xbe\x99\x1a\x06\x82\xd5\xec\xf8\xcb\x75\x9a\xd9\xd4\xdd\xaa\x5a\x1c\x3f\x7e\xfc\xee\xdd\x3b\xf4\x8e\xa1\xbc\xb8\x7c\x0c\x7c\xfb\x18\xda\xdd\xfa\xd1\xd6\x7d\x5c\xf7\x0b\x8c\xdd\xea\x96\x6e\x79\x85\xb5\xb9\xb0\xa0\xbd\xb1\xee\x76\xce\x91\xa2\x76\x0f\x23\x84\x65\x2b\x29\x13\xe0\x34\x9e\x50\x0d\x16\x37\x2c\xac\xf0\x08\x83\xbf\x4b\x98\x32\xdc\x8c\xc0\x49\xa3\x56\x82\x59\xb8\x16\x5c\x0a\x0b\xc7\x88\x68\xe3\xdb\x91\xd6\x1d\xb7\xed\x10\x89\xb0\xdb\x30\x0e\x09\x98\x21\xa0\x71\xc4\x88\x50\x44\xa9\x35\x47\x43\x86\x84\xb2\xaa\x4e\x8c\xec\xbe\xb6\x92\x98\x88\x50\x22\xc6\x8d\xb4\x6b\xf8\x44\x20\x8d\x61\x8d\x13\x11\x1a\x44\x28\x03\xab\x4a\x8c\x18\x98\x0e\x20\x84\x44\x48\x28\x92\xcc\x6d\x8e\x13\xa4\x34\xa8\x57\x80\x4a\x24\x8c\x33\x79\x4f\x30\xa2\x1c\x73\xc6\xfc\x4e\xbf\xe0\xc4\x2a\xbe\x23\x70\x8c\x19\x11\xca\x06\xa4\x39\xd2\xd8\xed\xd4\x61\x44\xa4\xd6\x86\xda\xe2\x06\x61\xd7\x11\x34\x23\x05\x36\xdc\x36\xc3\x18\xa2\xcc\x0b\x69\x44\x04\xc7\x0a\x3a\x65\x36\xe0\x69\xe5\x20\x47\x82\x2b\x87\x20\xc7\x48\x49\x67\x0c\x9e\x48\x64\x38\x11\xcc\x82\x39\xb8\xbe\x16\x4c\x30\x22\xc2\x6a\xc6\x90\x2b\x44\x98\xd3\xd5\x84\x21\x3b\x02\x80\x1a\x44\x88\x47\x83\x28\x24\x85\xdd\xf9\x0f\x05\x41\xd8\x38\x85\x02\xb6\x0b\xb3\x06\x42\x28\x28\xd0\xc9\x99\x31\x12\x61\x65\x65\xbf\x83\x12\xce\x31\x38\xd2\x60\xc6\x52\xd1\x80\xdd\xe6\x23\xd8\x72\x4e\xd7\x43\x7f\xb5\x3d\xc7\x19\x52\x6e\x5f\x3b\xe4\xe0\xcf\xab\x3a\xee\x83\x84\xe0\x0a\xfb\xf8\x9b\x11\x6e\x7c\x6e\x37\xd0\x76\xc8\x89\x0d\x70\x3a\x65\x8c\x30\xb7\x3b\x28\x60\x15\x71\xab\x04\x41\xbb\x21\xa5\xac\x27\x00\x50\xa3\x7d\xf4\x87\x0a\x24\x30\x77\x4d\x30\x24\x7c\xc0\x95\x02\x99\x19\xf6\x50\xec\x91\x23\xc0\x12\x76\xe7\xcc\x46\xfc\x1c\xcb\x5a\xb6\x03\x26\xb0\x60\x8c\x98\xdf\x21\x25\x0c\x09\x66\x35\x17\xa0\x4c\xb4\x33\x45\x08\xd4\x93\x6e\x20\x02\x71\xbf\x43\x78\x62\x90\xa1\x60\x4a\xc3\xac\x52\x24\xa9\x33\x3e\x34\x32\x76\x5d\x10\x1b\x2a\x62\xda\x6d\xa1\xb5\xa1\x40\x70\xe5\x0c\xbc\x36\x98\x22\x25\x9d\x21\xd1\x6a\x98\x18\x30\x45\x4d\x0f\x0b\x22\x91\x72\xac\x33\x3a\x69\xa1\x0c\xdc\x50\xb3\xcb\x7a\x78\x50\x4f\x39\xef\xac\x45\x0b\x82\x11\x67\xd8\x9b\x37\x6b\xc2\x19\x84\x35\xe7\x1c\xd6\x4f\x8b\xc8\x60\x3a\xc1\x44\x02\x74\x3d\x23\x60\x11\x5b\x83\x53\x58\x76\xa9\xa7\xcf\x20\xa9\x39\x38\x40\x62\xd4\x9a\x6a\xf0\x98\x38\xf1\x5b\xa1\x0d\x5f\x10\x86\x98\xd0\xce\xc6\x6c\x71\x91\xb4\x9b\xbd\x76\xc9\x9f\x70\x8c\x84\x8b\x8f\x84\x1c\x61\x62\xa8\x95\x0f\x4c\x82\x0b\x4d\x9c\xd4\x30\x02\x4b\x8b\xc6\x16\x59\xf5\xf7\xd1\x77\x5c\x82\xce\xb7\x5f\xec\x56\x9f\x72\x36\x11\x97\x20\xb9\xa8\x07\x1b\x66\x2c\xfd\xc1\xd7\x71\xe6\xb6\xdd\x27\xe0\xce\x5c\xe4\x02\x09\x2b\x5a\x1c\x17\xf8\xc1\x9c\x00\xc7\x73\xc2\x3c\x58\x31\xc7\x05\x5c\x80\xc5\x6e\xf1\x63\x12\x11\xe2\x1b\xe6\xc8\x08\xa1\x3d\x54\x30\x67\xfc\x9d\x80\x7f\xea\x3c\x08\x1b\xd1\xe7\x0e\x39\x28\x4c\x84\xeb\x0f\xcc\x4f\x67\x16\x41\xc3\x4a\x51\x0f\x55\x52\xae\xb1\x60\xba\x5e\x6b\x44\xb8\x18\x13\xa0\xec\x97\x2b\xd3\x88\x6b\x43\xea\xe1\x49\x37\xdd\xb0\x2e\xa9\x63\x72\x47\x0b\x56\xf3\xbe\x11\x6e\x45\x00\xe1\xec\x54\x58\x7b\x1d\x6b\x97\x5c\xc0\x15\xc2\xdc\xd3\x6d\x0d\x3d\xe1\x0a\x49\xe2\x66\xa5\x5d\x18\x10\x92\x35\x6e\x5a\xb8\x3d\x60\xae\xc1\xea\xae\xbb\xe3\x42\xfb\x19\x81\xae\x9d\x3a\x60\xe0\xe3\x38\xb9\xc3\x9b\xfc\x17\x1b\xda\xf6\x69\x0f\x6d\x28\xd0\xcd\xef\xbb\x74\xc1\x82\xba\xe0\x1a\x37\xa0\x67\x44\x33\x23\xce\xdc\xe5\x1a\x69\xea\x29\x24\x90\x92\x9c\xd5\x58\x08\xad\x9a\xb9\x26\x8e\x44\x5c\x23\x2a\xb8\x68\xf8\x02\xd7\xb4\xd0\xd2\x8b\x39\x8e\x8c\xd2\xb2\xa6\x05\xf7\x0b\x05\x38\x8e\xb8\x15\x6f\x09\x27\x8c\x87\xfa\x95\x34\x1a\xe6\x4e\x60\x5b\xa0\xa2\x4d\x5c\x08\xa9\x42\x42\xd2\x86\x48\x52\x59\xff\x07\xc0\xd2\x07\x8e\x00\x3d\x43\xea\xc2\x9a\x2b\xe5\x7b\x34\xc6\xca\x58\xb0\xd5\x09\xf7\xae\x25\x4c\x95\xb1\x82\xc5\xc6\x98\x7d\x32\x16\x20\x6d\x1c\xe9\xa8\xb6\x71\xdc\x1a\x8a\x2d\x5f\xdb\x38\xb7\xdf\x5b\x39\xb1\x56\xb7\x1d\x16\x80\xa5\x77\x47\x01\xea\x12\xd1\x6c\x0c\x5e\x93\x1a\xda\x08\x56\x8c\xb8\x22\x2d\x2c\x68\x5d\x58\xfb\x94\x3b\x40\x59\x7a\xce\x27\x88\x18\xe7\xd4\x72\xf0\x33\xad\x3f\x0a\x50\x4e\x6b\x3a\x6b\x24\x9d\x2f\x6f\x77\x49\xa5\xe7\x39\x83\xb0\x32\xc6\x43\x95\x6e\xd8\x48\x60\x47\xb7\x16\xf4\x44\x60\x84\xa5\x93\x3c\x16\xec\x16\x8f\xc0\xe0\xb1\xd6\x0d\x0b\xe9\x2c\x05\xd0\xa7\x58\xd7\x65\x89\xc7\xf8\x44\x10\xc4\xb1\x93\x52\x0c\x74\xb9\x0b\x00\x09\x82\x24\x63\xc4\x43\x29\x71\x1a\xc9\x42\x05\x6b\xe8\xc6\x55\xdd\x44\x0b\x4c\x99\x93\x3a\x82\x20\x41\xec\xce\x95\x9b\x11\x5c\x37\x4c\x95\xa8\xe7\xa9\xf1\x7b\x01\x39\x2f\x8b\x60\xae\x89\x23\x91\xc0\x48\x61\x27\x8b\x2c\x5f\x08\xe2\xa1\x8c\x68\x56\xf3\x90\x66\xcd\xe2\x31\x2e\x8f\xce\x72\x1c\x75\x1c\xc7\x0d\xe2\xc6\xca\x30\x17\x8f\x72\x0e\xd5\x30\x77\x5a\x1f\x1a\x61\x45\x1d\x7f\x62\xe8\x51\x79\x87\x16\xd0\xa3\x1e\xcc\x89\xe3\x23\x1b\xed\x93\xc4\x43\x99\x9d\x09\x02\x66\xa4\x26\xce\x8c\x04\x7b\x8c\xfa\x9c\x4d\x0a\x4a\xc2\xad\x1f\x8a\x91\xe2\x3e\x04\x42\x11\xf0\xa1\x85\x12\x04\x1d\x7b\x7b\xc7\x78\x1b\x92\x52\xb0\x07\x7c\x13\x04\x11\x86\x8d\x07\xdb\xc9\x86\xc2\xa0\x66\xfc\x32\x61\xe0\x9e\xd6\x50\xe6\xf2\x3a\xec\x96\x84\x8f\x9b\x9d\x80\x2d\x2b\xdc\x6c\x83\x36\x17\x8e\xa2\xd4\x6e\x5f\xd4\xa4\x23\xc6\x4d\x15\xc5\x76\x73\xd3\xcf\x09\xa5\x44\x37\x58\x78\x55\x05\xb3\x2d\x9c\x2a\x00\x13\x8d\x37\x6c\x44\x98\x6f\x98\x82\x06\xc7\x35\x73\x89\x3a\xe9\x8b\x21\x85\x39\xf3\xac\xc8\x1c\x3f\x00\xe1\x94\x11\x0d\x8f\x63\x1f\xac\xb2\x3b\x55\xbc\x07\x85\x19\xe1\xce\x7a\xea\x14\xd6\x30\x67\xa2\xe6\x71\x52\xe7\xa2\x21\x53\x77\x67\x37\xdf\xfc\x1e\x27\x46\xc6\x6b\x13\xaa\x91\x31\x3e\x88\x44\x90\x10\xaa\x96\x50\x42\x38\x8b\xb7\x0d\x95\x08\x4b\x52\x87\x6b\xd6\x60\x8e\x0c\xf7\xc9\xa8\x04\x51\x6f\xef\xc0\x8c\x78\x0a\xd9\xdd\x3e\xa7\x8f\x28\x45\x86\x0a\x3f\x23\x06\x19\x2d\x6b\x0e\x30\x3e\x6e\x45\x0d\x22\x1e\x65\xe0\x0b\x55\x67\xc6\x0d\x71\x27\x48\x5b\x86\x8c\x97\x03\xd4\x6e\x95\x3a\x22\x81\x89\xe9\x55\x2e\x55\x88\x7a\x5b\x8a\x33\x44\xbc\x0a\x04\x28\xf3\x42\x8a\x22\xc5\x78\xcd\x03\x4d\x96\x2e\xa7\x88\xd5\xac\xa8\x10\x33\xde\x01\x20\xc8\x70\x5c\x17\x96\x98\x18\x0f\x95\x9c\xd6\x58\x18\x8c\xbd\x4a\x22\x88\x71\x56\xf3\x11\x31\x6e\x6d\x73\x30\xab\x7c\xc3\x1a\x09\xe5\xac\x4d\xb0\xab\x85\x5f\xf1\x30\x27\xd4\xaf\x6d\x8c\x8c\x72\xac\x41\x0d\xd8\xb1\xa2\x2e\x4c\x74\x2d\xc6\x35\xf3\xba\x95\x20\xa2\x4c\xcd\x89\x94\x8a\x16\x16\xa4\x66\x45\x49\x1c\x83\xda\x9c\x58\xaf\x18\x31\x32\xdc\x6b\x78\x02\x62\xbc\xe6\x4f\xa2\x9d\x40\x3b\x71\xd9\xcb\xb4\x96\xe3\xb5\x62\x04\xd3\x4d\xd7\x9c\x28\xfc\xc2\x06\x22\x0b\xdc\x87\x9e\x58\x53\x51\xf2\x7e\x61\x8e\xa8\x30\xa4\x5e\x0f\x44\xd5\x36\x97\x14\x86\xd6\xb8\x11\xc5\x6b\x83\x09\xaf\xc1\x82\xb8\xdc\x3a\x30\xa3\x74\xb3\x2a\x8d\xe2\x6a\x13\xca\xb1\xcf\x8a\x6b\x83\x35\xb0\x5f\x6d\x73\x11\xa1\x4d\x33\x23\x9c\xd7\xc6\x9c\x93\x61\x4e\x0a\xd4\xd2\x96\x23\x69\x70\x23\x9a\x95\xb7\x34\x39\x62\xde\x34\xa2\x36\x8b\xaf\xa6\xc5\x00\x77\xf6\xd8\x16\xc4\x03\x66\x1b\x6c\x8b\x91\xf0\x8e\x48\x9b\x6d\x71\x93\x5a\xdd\x66\x5b\x8c\x24\xd5\x66\x83\x6d\xd7\xe9\xef\x6d\xb6\xc5\x76\x67\xbf\xcf\xb6\x04\xd1\xda\x15\x6d\xb3\x2d\xa8\x32\x42\xfa\x6c\x4b\x90\x36\x84\xf5\xd9\x96\x22\x86\x05\xd9\x60\x5b\x10\xf4\x4e\x60\xb7\xd9\x16\xc6\xa4\x4c\x8f\x6d\x29\x38\x46\x4a\xf7\xd9\x96\xda\x94\x22\xd9\x63\x5b\xca\x11\xf5\x7b\xb5\x2d\xb6\xa5\x1c\x71\xe7\xbf\x74\xd8\x16\x44\x2c\x35\xb2\xc7\xb6\xa0\xb1\x04\xd7\x3d\xb6\x6d\x41\xdb\x6c\xdb\x2e\xbc\x66\x5b\xca\x91\x15\xa5\x5d\xb6\x05\xdc\xa8\x31\x7d\xb6\x05\xa1\x48\xbd\x03\xde\xe2\x44\x86\xa8\x56\xa4\x0f\x05\x34\x09\xdb\x60\x5b\x8a\xa8\x69\x1c\x96\x86\x6d\x09\xd2\x35\x33\xb7\xd8\x96\x20\xc1\x6a\x6f\xa3\xc5\xb6\xb0\xb2\x05\xed\xb3\x2d\xf0\x05\xd1\x7d\xb6\x5d\x73\x67\xcf\xb6\xc5\x88\x69\x2a\x36\x6c\x5b\x8c\xb8\x74\xca\xa0\x6d\xdb\x62\x24\xa5\x26\x7d\xdb\xd6\xee\xf0\xf3\x0d\xdb\x96\x20\x2a\x3d\x9d\x5b\xb6\x2d\xf0\x2a\x37\x7d\xdb\x96\x02\xfb\xe9\x0d\xdb\x96\x22\xae\xa8\xec\xd9\xb6\xa0\x7c\x30\x91\x3d\xdb\x16\xa8\x6f\x08\xef\xdb\xb6\x94\x21\xb9\x36\x84\x6b\xdb\x96\x82\x3f\xeb\x17\xcf\xda\xb6\x85\xd9\xe6\xf5\xfa\x5b\xdb\xb6\xc0\x8a\xda\xa9\xdc\x96\x6d\x0b\x0c\xe3\x6c\xd4\xb6\x6d\xdb\x82\xb6\x6d\x5b\x0b\x76\xca\xab\x65\xdb\xda\xa4\x0a\xac\x7b\xb6\x2d\xac\x12\xed\x96\x7b\xdb\xb6\xa5\x76\xb3\x41\xf4\x6c\x5b\xca\x10\xe6\x2e\x60\xd3\x36\x62\x81\x6e\x5e\x3d\x77\xc1\xd8\x05\x1b\x3a\xb6\x2d\xcc\x88\x3b\x96\xd1\xb6\x6d\xc1\x98\x33\x6a\xc3\xb6\xc5\xc8\x30\x6d\xfa\xb6\x2d\xf0\x85\x53\x5e\x6d\xdb\x16\x23\x81\x39\xde\xb0\x6d\xb1\x4d\xea\xec\xdb\xb6\x60\x7f\x62\xda\xb7\x6d\xd7\xdc\xe9\x22\x09\xde\x02\xb3\x5b\xa9\xb8\xd6\xad\x12\x24\x8c\xac\xc1\x9a\xd7\xca\xc0\x38\x2b\x07\xa0\xbc\x76\x43\x44\xed\xa7\x00\x54\x69\x29\xea\x85\xc9\xbc\x23\x49\x38\xc2\xeb\x26\x88\xf4\x91\x1c\x8e\xb8\x37\x4c\x6d\x18\xc0\xc9\x01\xc2\x91\x56\x35\xdb\x72\xb0\x7d\x5c\x30\x55\x20\x6a\x9a\xc8\x05\x66\x4e\xc2\x10\x01\x82\xa0\xd1\x6a\xd8\x09\x29\x02\x0e\x31\x69\x61\xe1\x3c\x62\x22\x81\xa5\x6a\xc5\x28\x99\x33\x09\x89\x44\x9a\xf1\x3a\x50\x62\xb4\x33\xc6\x88\x42\x58\xd6\x6c\x2b\x11\x63\x4e\xf3\x10\x85\x18\x76\x96\x1b\x10\x8e\xbb\xf8\x09\x51\xe0\xbf\xd5\x1e\x27\x51\x9e\x6e\x6b\x28\x2c\x1e\xe5\xce\x5d\x74\x0a\x6b\x30\xee\x89\x87\x52\xec\xf6\x93\x60\x95\xb8\x63\x48\x16\x37\xbc\xf6\x64\xb0\xc6\xcc\x83\xb9\xdf\x56\xe4\x06\x14\x0b\xf6\xb4\x68\x3c\xce\x0e\x94\x9a\x5a\xf3\xb4\xc0\x36\x46\xd3\x04\x23\xfc\xfa\xb3\x33\x82\x6b\xef\xdb\x78\xa3\x99\x70\x44\xb0\x0f\x55\x72\x0d\x7a\x93\xd4\x73\xed\x44\xac\x5d\xef\x2e\xe4\xe8\xf8\x42\xd4\xb4\xb0\x19\xf7\x3e\x30\x46\x79\x13\x55\x11\xc6\xa9\x6c\xc2\x10\x91\xb4\x21\x9c\x34\x0d\x94\x3a\xb9\x3a\xcc\x9d\x87\xee\x72\xdd\xb1\x25\xa0\x41\xb3\xda\x19\x09\x0d\xc2\x14\x9c\x5d\xcd\x47\x27\x4a\xd4\xab\xa7\x0d\x56\x04\x29\x2f\xcf\x09\xb5\x09\xcf\x80\x51\x1b\xaa\x91\x24\x3e\x37\xb3\x05\x66\x0c\x09\xea\xd4\xb7\x03\x73\x6e\xd3\x3d\x19\xd2\x40\x5b\x39\x3a\x51\xa0\xa7\x38\xa5\xc4\x9d\x42\x30\x54\x1b\x4d\x46\x4a\x20\x2e\x09\x25\xc4\x9f\xb7\x02\x1b\x81\x8d\x5a\x28\xb7\xa0\x27\xda\xe6\x38\xd2\x06\xec\x26\x58\x1b\xc0\xc8\xce\x0e\xe8\x77\x6f\x23\x19\x8a\x84\x4b\xca\x02\x28\xa6\x3e\x59\xc6\x10\xa4\xa5\xaa\x23\x7d\x12\xbb\x55\xfb\xc2\x80\xd1\x22\xb1\x50\x36\xa7\x57\x49\xe6\x8e\xbf\x68\x8d\x84\x81\x45\x6e\x77\x02\x88\x04\x05\xce\x46\x5a\x22\xa2\x8d\xa1\xd4\x9e\x3a\x63\x9a\x73\x4a\x2d\xce\x4a\xf9\x88\x15\xac\x01\xef\xf6\x29\x83\x38\x71\x1a\xab\x05\x56\x1a\x61\x46\x9d\xa5\x2c\x90\x71\xd1\xa4\x0e\x94\x22\x5e\x67\xbf\xb4\xc0\xc4\x20\x45\x5d\x4c\xc8\x81\xb9\xa4\xda\x82\xb9\xd1\x5a\x69\xe8\x50\x23\x6c\x84\xb4\x99\x3e\x12\x11\xc6\x34\xd5\x23\x65\xc0\x78\xa4\x58\x2a\x60\x77\xe5\xb6\x0a\xda\x28\xb7\xa0\x40\x66\xee\xb5\x37\x80\xbd\x37\xa8\x0d\xb2\x11\x11\xb7\xe8\x30\x73\xbb\xc8\x2d\x7a\x12\x81\x84\x53\x31\xa3\x17\x2d\xea\x13\x8c\x88\x37\xee\x2d\xf5\x29\x97\xd8\xd0\xd0\x20\xc3\x19\x17\x52\xd1\xd1\x09\x34\x8d\x85\xc2\x0a\x58\x91\x31\xaa\x09\x11\x12\xc8\xcc\xa8\x54\x54\x38\x06\x15\x18\x53\x6a\x46\xc3\xdc\xfc\xf7\xd1\x77\x44\x51\xbb\xff\x4e\x34\xe2\x9e\x33\x5e\x10\x29\x6d\xd2\xc3\x26\x4c\x68\x6d\x13\x61\x29\xd7\x84\xd2\xd1\x09\x40\x89\xe0\x46\xd8\xdd\x1d\x66\x94\xa0\x42\x8c\x88\x54\x48\x12\x56\x9f\x19\x74\x92\x98\x28\x70\x80\xdb\x90\x13\xa2\xb8\xcd\x54\xe1\x14\x19\x51\x97\xd2\x36\xad\x14\x98\xcf\x49\x89\x11\xd1\x04\x51\xc6\xec\x79\x4d\x1f\x1f\x7e\x01\x30\xcd\x68\x27\x0f\x89\xc0\x04\x70\x36\x08\xeb\x8c\x44\x83\xaa\xd3\x83\x30\x9b\x31\xef\x03\xd6\x80\x0a\x71\xe3\x65\xcc\x6d\xa8\x10\x58\x77\xee\x3c\x20\xa5\xce\xff\x83\x31\x60\x2d\xdb\xa0\x13\xa0\xa9\x34\xbd\x62\x8e\xcc\x3e\xdf\xb8\x03\x02\x59\xec\x79\x76\x60\x36\x60\x8e\x30\x30\xbb\x01\x75\x60\x88\x77\x30\x8d\x46\x54\x11\xc3\x15\x69\x83\x8d\x40\x4a\x03\x7b\x38\x03\x57\x10\x23\x38\x03\x28\x17\x44\x1a\x6e\x33\x62\x19\x13\x1a\x4b\x3a\x7a\x01\x60\x2a\x94\xe1\xee\xb0\x88\xd2\x5c\x29\x3e\x3a\xb1\x60\x2a\x8c\xb1\x89\x1a\x5a\x50\x81\xb5\xb6\x6d\x10\x63\x6c\x16\x86\x44\x86\x4a\x29\xa4\x74\x50\xa5\x85\xb0\x29\x5c\x18\x63\x83\x85\x71\x2d\x93\x26\x48\xcb\x79\xcd\xc7\x6b\x30\x08\x3e\xed\xdc\xed\x17\xbe\x11\xc6\x6c\x60\x18\x33\xa2\xb1\x70\x78\x08\x41\x0c\x17\x36\x8d\x4c\x69\xa2\x35\xf4\xa8\xc0\x6e\x97\xda\x65\x9b\x6b\x17\x44\x76\x04\x22\x6d\xd0\x09\x21\xd6\x11\x91\x46\x75\x4a\xc2\xe2\x16\x9a\xba\xd8\x3d\x97\x4a\x72\x6a\x81\x9c\x51\x02\xd3\xc8\xc1\x9e\x53\x98\xcb\xd1\x0b\x0b\x16\x14\xf3\x0e\x5a\x0e\x2a\xb9\xb2\x19\xdd\x5a\x33\x26\x05\x73\x4d\x08\xad\x84\xdd\x12\x05\x37\xd3\x10\x0f\x34\x9d\xc1\xd6\xb0\x36\x5d\x1c\x4c\x71\x61\xb3\x9b\x29\xa5\x84\x09\x5d\xf7\xc4\x18\x51\x8e\xe4\x20\x8c\x85\x6b\x94\x63\x65\x24\x40\x25\x65\x92\x73\xdf\x15\x31\x98\x09\x77\x1e\x48\x69\x2e\x99\x6b\x99\x29\xc3\x84\xcd\x37\xd4\x5a\x52\x4a\x05\xb4\x2c\x90\x21\xda\x9d\x42\x15\x52\x10\x42\xcd\x88\xd8\x7d\x2a\x41\x68\x87\xa3\x06\x78\x0f\x38\x52\x70\xc4\xb8\x00\xa8\xd6\x4a\x0a\x02\x8d\x82\x97\x21\x58\x1b\x46\xc0\xce\x22\xc6\xa6\x76\x51\xe7\x31\x34\x20\x0e\xa5\x3c\x4d\x1c\x4c\x1a\x9b\x2a\x4d\x18\x67\xc6\x28\x0f\xa6\x42\x61\x66\x0f\x4f\x11\xac\x8c\x66\x1e\x0c\x96\xb1\xdb\x65\x94\x9c\x28\x06\xbd\x0b\xb0\x4d\x95\x62\xf6\xf0\x14\x53\x5a\x72\xdf\x1b\xe7\xc6\xb8\x5c\x70\x82\x25\x23\xdc\x43\xb5\x70\x87\xa7\xa8\xa6\xdc\xd0\xba\x3f\xc5\xb5\xf6\x19\x4a\xd4\x50\x23\x7c\xcb\x1a\x63\x23\xdc\x32\x21\x94\x29\x3f\x34\x2d\x14\x75\xab\xc4\x1e\xf6\x74\x40\x43\x34\xb1\x73\x63\xb0\xa0\xc2\x48\xd7\x30\x67\xcc\x62\xa1\x10\x35\xc0\x76\xc4\x35\xac\x08\x27\x9a\x85\x14\xfc\x1a\x4d\x19\x63\x23\xc2\x25\x08\x4f\xca\xa4\x8d\x83\x52\x2c\x09\x05\xa8\x8b\x96\x13\x77\x4c\xca\x30\x2c\x35\x34\x6c\xcf\x8a\x68\x2a\x00\xaa\x85\x12\x52\x02\xc6\xc2\xd2\x1b\x2b\x77\x4a\x4a\x0a\x2d\xb8\x1a\x01\x94\x49\x29\xfd\x49\x51\x22\x60\xb5\x03\x50\x31\x45\x9c\xee\x24\x56\x6b\x99\xd1\x0b\x22\x08\x62\x84\x28\x66\xc1\x8c\x11\xa6\x09\x88\x7b\x70\x66\xb0\x91\x5c\x5a\xb0\xa6\x46\x08\x68\x83\xc0\x38\xac\xf2\x65\x9c\x11\xce\x2c\xc8\x50\xbb\x65\xcc\xb5\x3f\x93\x4a\x04\x45\x14\x0b\x21\x6c\x9b\x42\x70\x77\x82\x0c\xc0\x0a\x1c\x20\xdb\xa6\xd4\xc6\x30\x01\x34\x13\x60\xd9\x71\x7b\x2a\x9f\x22\x4d\x99\x62\x84\x38\xb0\x64\x8c\x32\x0b\x36\x42\x32\xe0\xfe\x13\x22\x40\x8b\x52\xea\x04\x8b\x62\xb0\x14\x47\x44\x48\x84\xc1\x54\xd1\xb0\x80\xed\x81\x0c\xae\x2d\x94\x10\x2a\xb1\x3b\x9b\x2b\x18\x28\x15\x68\x18\xb8\x06\x73\x4d\xdd\x2d\x00\x52\xd2\x35\xd8\x08\xac\xdc\x7e\xa8\x36\x44\x79\x28\xb7\x25\xa5\x24\x5e\x85\xd8\x92\x8a\x72\x5b\xd2\x68\x61\x94\x96\x1e\x4c\x09\x35\x4e\x71\x6a\xa6\x8d\x34\x80\xb0\x3f\x6b\xc1\xdc\x5e\x1f\x58\x7e\x40\x49\x81\x04\xc7\x1c\xe6\x48\x23\x4c\x14\x25\xdc\x8c\x60\xcc\x8a\x13\x49\x6d\x1a\x22\xc1\x8a\x71\x23\x1c\x29\x18\xa6\x8a\xdb\xc2\x84\x12\x0c\xbc\x6d\xc1\xd8\x1d\x6d\x25\xd4\x2b\x0b\x98\x65\xc9\xdc\x66\xa3\x0f\xcb\x12\x70\x33\xdc\xf6\xaa\x8b\x94\x59\xe6\xd5\xd2\x1e\x60\xc7\xda\x6d\xb0\x5b\xce\xc5\xdc\xd8\xfb\x00\x8c\xbf\xb4\x00\x60\x52\x51\x6e\xec\x89\x6d\xad\x15\x07\xbb\x18\xda\x23\x30\x08\x6e\x15\x30\x33\x92\x09\xc7\x5d\xd2\xd4\x87\x88\x38\x93\x94\x11\x3b\x1e\xd6\x08\x70\xe2\x31\x34\x48\x52\xa5\xb5\x6a\x83\x89\x24\x48\x68\xc6\xa5\x01\xed\x6f\xc0\x08\x32\x74\x44\x24\x45\x98\x61\xaa\x2d\xae\x5c\x70\x2d\x30\x0c\x1c\xc0\x8a\x0b\x7f\x38\x8c\x83\xa3\x02\x16\x0a\xb5\xc2\xdf\x1d\x3b\x33\x84\xda\xe3\x2b\x16\x0a\x66\x99\x3d\xa2\xa6\x14\x23\x46\x19\x0b\x25\x58\xda\xd3\x5a\x76\xb3\x92\x50\xe2\x1b\x26\xf6\x18\x86\x9d\x42\xcc\xb0\x34\x35\x98\x19\x2c\xfc\xae\x2a\x15\xf6\x48\x9d\x05\x73\xe2\x4e\x01\x39\x0b\xe6\xa4\x05\xe3\x42\x4a\xa2\x89\xeb\x8b\x63\x4d\xad\xd1\xc1\x94\x64\xd4\x98\x1a\x0a\xeb\x0b\xac\x02\x45\x08\x93\x75\x4f\xe0\xfd\x00\x23\x4b\x42\x05\x51\x35\x02\x44\x59\x83\x9a\x23\x62\x8f\x99\x12\x4f\x07\x23\x24\xb7\x8a\x47\x69\x26\x99\xd2\x1e\x2c\x05\x83\xd2\x0c\x71\x4c\x95\x31\xbe\x6d\x6c\x4f\x95\x02\x18\x73\x6a\xa4\x95\x85\x92\x20\xa3\x98\x32\xee\xdc\x23\x66\x58\x59\x29\x2b\x09\x92\xc2\x10\x77\x36\x14\x14\x31\x37\x7a\x44\x24\x46\xca\x60\x82\xed\x39\x52\x63\xa7\x11\x64\x80\x06\xcf\x9a\x73\x1b\x50\xc6\x1c\x6b\x42\xac\x68\xd1\x08\x08\xa8\x6d\x5a\xa5\xd6\x98\x70\x6c\xb9\x59\x21\x89\x05\x76\x60\x45\x8c\x31\xc6\xf2\x85\x4d\x53\xb6\xc7\x4a\x34\xc8\x3d\x6a\xac\x28\x03\xed\xc9\x18\xb7\x39\xa7\x12\x6c\x11\xed\xa0\x4c\x62\xab\xec\x34\xb0\xa0\x82\x26\xec\x0a\xd4\x5c\x10\xaa\xdc\x41\x23\xcd\x35\x17\x0e\x4c\xc1\xba\xb0\xe7\x8f\x18\x11\xd8\x1e\x8c\x81\x25\xa8\xb0\x12\xae\x43\xc2\xb5\xa0\xd4\x41\x61\xae\xa8\xb5\x73\x8c\x52\x4a\x59\x0b\x41\x80\x61\x20\x24\xb1\x77\x28\x28\x4c\x09\x33\x5e\x76\x71\xca\xa4\xb2\xe7\xa3\x05\xa3\x82\x52\x0f\xc6\x8a\x48\x62\xd5\x00\xa7\x12\x04\x3a\x0c\xd1\x5e\x61\xc2\x95\x33\x0a\xb0\xd6\xc4\x00\xf5\xa8\xdd\x72\x72\x87\xf8\x99\x21\x82\x4a\x0f\x05\xa6\xb0\x69\xf4\x4c\x71\x86\x9d\x90\xa1\x48\x52\xac\x89\x33\x20\x14\x11\x9c\x6a\x27\xae\xa5\x22\xdc\xa5\xeb\x1a\x42\xb9\x16\x56\x34\x73\x22\x84\x53\x67\x82\x4b\xc9\x89\xb4\x50\xc6\xb5\x72\x29\xd1\x4a\x70\xa6\xad\xae\x05\x30\xe3\x4c\x59\x15\x2c\x88\xc4\x92\x6b\x0f\xa6\x4a\x0a\x7b\x3d\x0a\x15\x14\xc8\xde\x80\x99\x70\xa1\x5f\xca\xed\x89\x3d\x8b\x06\x13\x42\xc3\x04\x30\xc4\x99\xc1\x5c\x39\x3c\xb4\x20\x8c\xd8\x03\x2d\x5a\xb9\x58\x2c\x50\x94\xe3\x0e\xc8\xca\x4a\xc9\xec\x69\x07\xe3\x83\xb3\xc0\x44\x5a\xba\xa0\xb8\x8b\x0f\x58\x59\x81\x85\xed\xa2\xde\x8f\xb0\x5c\x2c\x8c\x3f\x53\xe4\x53\xe6\x81\x59\xc1\x3c\x71\x87\x73\x84\x20\x44\x58\x4f\x46\x68\x50\x43\xca\xe6\xe6\x13\xcc\xb1\xc4\x4e\x57\x08\xee\x02\x31\x5a\x13\xe9\x34\xe6\x86\xe9\x03\x06\x91\x51\x48\x91\x10\xfe\xc3\x84\x4b\xd8\x25\x06\xd6\x0a\x0f\x35\x12\xcc\x6e\x03\xb4\x60\xce\x47\xf1\x7a\xd1\x55\x1d\x00\xb5\x5a\x83\x2e\xac\xf4\xb0\x1d\x1b\xea\x53\x0b\x08\xa8\x72\x7f\x16\x4a\xbb\x0d\x22\x02\xcb\xc7\xb9\x37\xc6\x25\x61\x8c\x08\x4c\xa9\xa2\xfe\xda\x1a\xdf\x05\x58\x5a\xba\xf6\x34\x3c\x69\x28\xb8\x58\x43\x20\x87\x5c\x0d\x02\xb3\x53\x0c\xc2\xc0\xc8\xc4\xae\x87\x13\x40\x44\x33\x7b\x74\x45\x4a\xe7\x7c\x13\xbb\x91\x65\x60\x8e\x94\xf2\x0e\x1f\xb3\xb3\xda\x06\x9d\x10\xc6\xed\x89\x88\x4e\x31\x8e\x60\x72\x28\xb7\x6e\x48\x07\x04\x0b\xd6\x9f\xa5\xa8\x61\x1d\xdc\x40\x75\x10\x33\x08\xb3\xa7\x00\x7c\x82\x44\x03\xc3\xc8\xa6\x0a\xda\x2e\x0c\xb8\x03\x6d\x92\x0f\xcc\x42\xe3\xa1\xb9\x20\xb1\xf2\x11\x2d\x82\x0d\x22\x42\xb6\x61\x84\x80\x93\x6c\x8f\x3f\x08\xe1\xd9\xb6\x06\x29\x44\x85\xbf\xb2\xa7\x86\x81\xf8\xe6\x86\xb7\x60\x94\x30\x2b\xbe\x8d\xe2\xd8\x58\x1b\x12\xc0\x50\xd1\x9e\x59\x15\x12\x73\x09\x02\x19\x1b\xe8\x93\x18\x1b\x80\x31\xc4\x45\x98\x6a\x24\x5b\xa0\x13\x82\xc1\x55\xd5\xdd\x62\xc4\x79\x2d\x12\x7c\xdd\x2e\xa8\x8d\x90\x87\x75\x10\x07\x98\x24\x5a\xbb\x3b\x65\xa8\xd0\x5a\x80\xd6\xc0\xf6\x6a\x00\xe6\xe7\x8f\x19\x50\x05\x23\xe8\x5a\x69\xa5\x71\x97\x44\x9b\x94\xfc\x80\xc0\x9e\x7f\xc6\x73\xe8\x93\x0e\x79\xff\x92\xe3\x2d\x97\x6c\xff\x16\x99\xf1\xbf\xef\x0d\x93\xb3\xb8\xa8\x92\x8b\x64\x16\x55\x03\xd7\xb0\x0e\xbe\xaa\xbc\x71\x37\x9c\x45\x39\x2c\xc2\x28\x4c\xd7\x0f\x1f\x97\x5f\x1e\x3e\xfe\xbf\xe3\xe1\xe3\x64\xf7\x01\x87\xbf\x3c\x99\x3f\x9b\xfd\x53\xfe\xb0\xe5\x80\x83\xbd\x4a\x37\xf4\xef\x99\xde\x7d\x8e\xa1\xc5\xad\x1b\xd7\xd3\xfa\x1b\xec\x67\xf9\xe2\xe6\xe8\x7c\x59\x55\xf6\x45\x04\x77\x81\x7d\x73\x37\xbd\xef\xa6\xfb\xe0\xef\xf6\x57\x49\x7d\x33\xee\x45\x0f\xdc\xb9\xf6\x36\x78\x9b\x94\xc9\x79\x92\x26\xd5\x4d\xb0\x71\xdb\xad\x7d\xbc\xe4\x2a\x7f\x67\x05\xc6\xe8\x2a\x99\x43\xe7\x23\x07\xd9\xb8\xec\x96\x87\xbc\xdd\x93\x7b\xd0\x83\xba\x37\x5d\x93\xd9\x9b\xa0\xf5\xb4\x4a\xf5\x1f\xeb\x4e\xcf\x7a\xaf\x79\x6c\x11\x5b\xeb\x27\x38\x06\x90\x3b\xf8\xcd\xaa\x7a\xcb\x64\x96\xcf\xd7\x13\x40\xfc\x71\x91\xbb\x9f\x74\x18\x7e\x3d\xaa\x6e\xf4\x6a\xf0\xea\xe2\xad\xd7\xcf\xdf\x75\x11\xb0\xbd\x2a\xbe\xb9\xe2\x1d\x88\xbb\xbf\x80\xde\x90\x8a\x9d\xcb\xdb\xf3\xe9\xb8\x11\xd1\x55\x11\xcd\xde\xc4\xf3\xb0\xe8\xdd\xde\x1e\xed\x75\x75\x3b\x42\x28\x76\xe2\xd1\xcb\xca\x07\xcd\x55\xee\xf1\x24\xac\xec\x35\xeb\x61\x36\x75\xf3\x15\x46\xee\xf7\xb8\x98\xa6\x93\x47\x8f\x86\x17\x30\xb4\xd3\xbe\x59\xb3\x68\x8b\xca\xb6\x5c\x3c\x2e\xba\x62\xb2\x96\x82\xc7\x45\x23\x10\x43\xb7\xfa\x8b\x8e\xa8\x2a\x76\x88\xaa\xd5\x64\xd5\x61\xd2\xfa\x56\x78\x40\x7f\xfa\xb0\xf9\x73\xb5\x0a\xd3\x69\x39\x8e\xda\x57\xb0\xbb\x11\x9e\x66\x67\xe1\x6d\x07\xcb\x87\x38\xec\xde\x13\xda\xe0\xf9\x10\x87\x2d\x4c\x36\xef\x0e\x7d\x48\x56\xab\x49\xd8\xef\xa6\xb3\x86\xc2\xd3\xe2\xee\x9b\xe2\x77\xd4\x9f\x84\x51\xfb\xc6\xf8\xa8\xad\x7a\xf3\x9d\x37\xc6\x27\x61\x7e\xf7\x7d\xa6\xb3\xab\x24\x9d\x1f\xb9\x37\x79\xf3\x81\x23\x6b\xf5\x35\xb6\xc0\xe4\xcb\xa2\x88\xb3\xd9\x4d\xf7\x76\xd7\xbe\xae\x0e\xb3\x8f\x77\xb0\xad\xd8\x2d\xf7\xf3\x65\xf6\x13\xd1\xff\xf8\xff\x0f\xcb\xfd\x59\x9e\xc2\xa0\xdc\x33\x0d\x5e\x07\xb4\xde\x9a\xf7\x57\xad\x0f\x5f\xb1\xee\xf5\x81\x13\xc8\xc4\xbe\x1d\xdf\x26\xd3\x08\x04\x26\xb7\x6f\x1f\x1d\x75\xbf\xf8\x53\x6c\x2a\x1c\x78\x4e\x9a\xe8\x90\x6d\xbe\xc4\xed\xdf\x2e\xea\x3c\x21\xe6\x5e\x2f\x12\xad\x07\x46\x0e\x7d\x2f\x3c\xb8\x49\x62\x40\xcb\xdd\xcb\xdb\x7a\xcf\xdb\xca\xfc\x22\xb6\xca\xed\xae\x97\x5b\xd6\x08\xdf\xf1\xd6\xce\xe6\xd3\x69\x56\x93\xda\xd7\xd2\xec\xb3\x52\xdb\xef\xa4\xef\x5c\x3a\x7f\x07\xde\xbe\xf9\x0f\x46\x7b\x50\x75\xf9\x19\x10\x21\xc1\x07\xbe\x0c\xe5\x29\x6e\xaf\xd0\xed\xbd\x6a\x53\x16\xb3\xce\x73\x35\xad\x49\x96\x30\xa2\xc7\x5f\xdd\x36\x0f\xdd\xac\x1e\x7f\x75\xeb\xde\xbf\x81\xbf\xe6\x33\xf8\x2f\x50\x70\xd5\x79\xfe\xae\x46\xac\xfd\x3e\x4e\xf3\x6a\x8e\x7d\x5e\xa6\x7e\x67\x09\xc6\x02\x5c\xc8\x44\xc8\xdc\x3f\xb4\xff\x4e\x8d\x08\xf1\xc6\x9b\xf4\x03\x4f\xd3\xad\x41\xda\x57\x53\x5b\x5e\x89\x01\x1a\x04\x67\x43\x4f\xce\xef\xf3\x92\xb6\x23\x61\x7b\xdd\x9e\xb6\x9e\x8e\x0a\x83\x6f\xca\xdc\xbe\x98\xf2\xcd\x45\x92\xda\x66\xc2\xfa\x75\x73\x8b\x96\x5b\x90\x56\xe3\x46\xe5\x6c\x90\x6a\x65\x1c\x15\xb3\xab\x85\x93\x48\x49\x5c\x06\x1b\x6f\xa5\xb9\xc7\x7a\xda\x0f\x99\xf3\x10\xac\x80\x43\x1e\xab\xf2\xa3\x59\xe4\xef\xe2\xc2\x4b\x86\x35\x47\x58\x0c\x9e\x65\xfe\xf9\xac\x1a\x60\xb9\xc4\xde\x0f\x6f\x47\xe5\x1f\x57\xfa\x2e\x2e\xcb\xc8\xbd\x72\xe4\x8a\x6d\x00\x7e\xec\xbc\x98\xf7\x4d\x9e\xfd\xb0\x88\x33\xf7\xd7\x49\x9a\x97\xfe\x81\xa4\x93\x86\xfb\xaa\x62\x19\x0f\x4f\x30\x0d\x49\x58\x13\x28\xd8\x64\x06\xfb\xfa\x5b\x87\xb8\xc2\xd2\xa5\x7e\x3d\xee\x85\xc3\x18\x21\x14\xb8\xc7\x44\xf3\xb2\x4c\xce\xd3\x78\xd4\x8c\xca\x52\x52\xec\xc5\x5e\xcd\x12\x3c\x0b\x01\xe1\x03\x18\xb3\x55\xd3\x1a\x6b\x3b\xaa\x06\xcd\x13\x52\x96\x87\x4e\xcf\xfc\xa0\xe4\x59\xe7\xdd\xb2\xbd\x1f\x28\xbb\x43\xf0\xba\x37\xad\x22\xc7\xac\x81\xa3\x4a\xeb\x05\xc9\xfa\x25\x26\xba\x77\xef\x7b\x4b\xe7\xe1\xe7\xd2\xe8\xc0\x7b\x69\x1b\x2f\x27\x0d\xc9\xf9\x3d\xcc\xe6\x01\x9d\x46\x71\x3d\x43\x12\x24\x79\xf3\x32\x07\xbe\xef\xd3\xb6\x7b\xe8\x39\xfb\xd6\xe7\x47\x22\xe3\xbe\xae\xc6\x87\x78\x13\x5e\xcc\x2d\xd2\x65\x61\x0d\xce\x5a\xa2\x37\xf2\xbd\x2d\xf4\xfd\x83\x54\xcb\x22\xb1\xef\x0e\xa6\x3f\x34\xd2\xc3\x3d\x45\xd5\xbc\x50\x95\x94\x5e\x26\x58\x67\xa5\x7e\xc0\x6a\x2d\x6c\x40\xa8\x1e\x9d\xdf\x04\xfd\xe7\x37\x9d\x64\xad\x6d\x3d\xcf\xbb\xed\xa7\xff\xfc\x3b\x57\x97\x07\x3d\x58\x35\x64\x6f\x76\x02\x53\xd1\xce\xc0\x54\xe1\x2d\xde\xe6\x0b\x72\xce\xcf\x78\xfd\xfe\xd4\x6d\xad\x6d\xdb\xe6\xfa\x2a\xac\xa2\x4b\x87\x56\x10\xda\x57\xcc\x7a\x5f\x6f\x16\xf6\xd3\x3c\xbf\x3e\x76\x3d\x24\x99\xb5\x61\xcb\xb8\x78\x9b\xcc\xe2\x71\x30\xcf\xaf\x83\x49\x78\x91\x17\xd7\xf6\x99\xbe\x24\x8b\x8b\x2d\x25\xed\x13\xb6\x93\x10\xe8\xe7\x4b\xc0\xf8\x97\x55\x3c\x47\x51\x9a\x44\xa5\x2b\x81\xac\xae\x9c\x84\x8e\x14\xf1\xdc\xcf\xdf\x96\x1a\x6e\x32\x26\xd6\x1b\x69\x63\x6e\xfd\x9d\x9f\xb7\xbe\xcd\xf5\x73\x9a\x94\x55\x9c\xc5\x45\xe9\x5e\xd3\x9a\xe7\xd7\xa8\x01\x8d\x7d\x21\xc0\x66\xda\xfc\xd5\x8c\xce\xfe\x1a\xbb\xd7\xbc\xac\xeb\xd1\x14\x41\xb3\x34\x8e\x8a\xf1\xed\xd3\xa8\x8a\x66\xf6\xd2\x8d\x63\xd7\xfa\x2c\x6c\x1e\xd7\x73\x10\x6f\xcf\x4c\x56\xe1\xbb\x24\x4d\x9f\xc6\x65\x55\xe4\x37\xcf\x52\xbb\x62\xee\x35\x0c\x54\xc4\xd7\xf9\xdb\x78\x3c\x59\x85\xf9\x20\xc1\xc6\x41\x8f\xa0\x08\x04\x7b\x6b\x81\xd8\xdf\xe3\x56\xdf\xe0\x6d\xc7\x6e\xfc\xeb\x52\xef\xdf\x9f\x9e\x35\xb7\x6b\x38\xa7\xb2\xdb\xac\x2d\xe0\x83\x73\x0e\x83\xcb\xb8\x1a\x57\xcd\xa3\x43\x93\x3f\xe3\x47\x8f\xc6\xf1\x34\x46\xce\x58\x19\xc7\xd3\x3f\x3f\xac\xd0\x45\x92\xcd\xbf\xbd\x19\x07\xcf\x9f\x06\xe1\xba\x5a\x1c\x02\x60\x32\x99\x4c\xc2\x18\x3c\xb6\x32\x7a\x1b\x1f\x8f\x71\x58\xa1\x2a\x2a\xdf\x4c\xd6\x31\xc1\xff\xe5\x3c\xac\x69\x9b\x77\x27\xb7\xb5\xb3\x64\xf1\x2c\xe2\x45\xfe\xa0\x2a\x6e\x6e\xe3\xa9\x95\x8d\xa3\x02\x2d\xe2\xa2\x4c\xca\x6a\x5c\xcf\xa1\x13\x0d\xf6\xe5\xb6\xec\x32\x46\xd1\x62\x91\xde\xd8\x89\x0e\x9b\xd7\xb7\x6e\x33\xbb\x56\x1a\xcd\xe8\x7c\xb5\x6a\xb5\x0a\xab\x30\x3e\x9b\x84\xd9\x78\xb2\x9a\x45\xd5\xec\x6a\x1c\xf9\xd9\xb3\x8b\x6a\x7c\xeb\xd6\x56\xb4\x9a\xd8\xe7\xb9\x7c\x4f\xc7\xb7\x45\x5c\xc6\x9b\x33\x7e\x1f\x66\x0a\x9b\x67\x18\x1d\x74\x6d\x3f\x4f\x56\xa1\xe3\x8e\xe3\x6e\xec\xd8\x91\x27\x5b\x93\x07\x68\xfe\x2a\x5d\x5e\xfe\x7b\x7c\x33\x9e\x34\x51\x15\x37\x11\xd9\x24\x8c\xa6\x6e\x9e\x9e\x83\x6c\xea\x06\x8c\x37\x26\x1c\x2a\x4c\xa7\xd3\x62\x35\x99\x3c\x48\x2e\xc6\x47\xe4\xe1\x74\x1a\x4d\x9a\x87\x45\x1c\x3e\x4f\xaa\x71\x14\x92\xc9\x03\x8b\x40\x2d\x9d\xc6\x35\xa9\x01\x0a\xb8\xf7\x85\x96\xf7\xa5\x3b\x93\x0b\xeb\x37\xcb\x8b\x6b\xab\x1e\x9e\xbd\x8d\xb3\xaa\xb7\x5c\xa2\x69\xf5\xa0\x7c\x97\xc0\xc4\x14\xc8\x3f\x33\x0c\x53\x39\xb9\x9d\x45\x65\xdc\xcc\xa7\x5f\x34\x65\x5c\x8d\xb3\x30\x38\xb1\xfe\xe0\xeb\x04\xac\x94\x71\x16\xbf\x1b\x3d\x8d\xaa\x78\x02\xe3\x03\xd8\x78\x62\x43\x10\xcb\xf2\xca\xb9\xf5\xe3\xcc\xb3\xd1\xb6\x91\xd8\x97\xd9\x5a\x51\x8a\xe8\xee\x20\x44\x3e\x8f\x8f\xe2\x79\x32\x18\x81\xe8\x5d\x9a\xd3\x44\xff\xab\xd6\xce\xc0\xb4\x1d\xed\x8f\xed\x54\x0c\x86\x5c\x5e\xb9\xf0\x80\xab\x55\x4c\x77\x95\xf9\xff\xd8\x7b\xd7\xf5\xb6\x8d\x2c\x51\xf4\xbf\x9f\x02\xc6\xf4\xb8\xc9\x4e\x91\x16\xa9\xbb\x66\x33\xb1\x22\x3b\x1d\x77\x7c\x1b\xcb\xe9\x74\x6f\x0d\x3f\x07\x02\x8a\x24\x62\x10\x60\x0a\x45\xc9\x6a\x99\xe7\x59\xce\xb3\x9c\x27\x3b\x5f\xdd\xab\x80\xc2\x95\x90\x2d\xf7\x24\xb3\x77\x5b\x04\x0a\x75\x59\xb5\x6a\xd5\xba\x2f\xd2\x0d\x7e\xf4\xa8\x87\x26\x48\x1c\x61\x35\x0f\x2c\x51\xa1\x4a\xb3\x43\xe6\xa8\xa9\xc7\x36\xe4\x8c\xc7\x14\x9a\xfc\xdc\xc5\x00\xf5\x37\xbc\xb3\x78\x23\x57\xc7\xd6\x9a\xa0\x1e\x5b\xdf\xe8\xbf\xe2\xff\x23\xb7\x79\xc8\x68\xcc\x7f\xc5\xdf\x7c\xc3\x56\xe2\x51\x8d\xfb\xc3\x89\x6c\x71\x11\x4f\xbf\xd3\x7f\x9c\xdc\x6e\x1e\xc4\xff\x39\xfe\x0e\x73\xb0\xf4\xbc\x3e\x78\xb8\x63\xb3\x8a\x90\x95\x51\xd4\xf3\x2e\xf0\xb4\xbf\xe9\xf7\x4f\x2a\x56\x98\x7e\x67\xd3\xf6\x84\x30\xed\xc1\x2a\xb5\x57\xda\xf3\xfa\xfd\x13\x6d\x4e\x05\x13\x2a\xb6\x36\x54\xea\xd5\x00\xee\x93\x45\x08\x00\x43\x05\x60\x64\x96\xa1\x74\xb0\x13\xc6\x0e\xb4\x2e\x86\x8d\xc5\xf5\x55\x71\x46\x57\x98\xd5\x24\x6a\xba\xc3\x4d\xff\x04\x5e\xe0\xe9\x24\x06\xb0\x33\x53\x88\x57\xae\x12\x7b\x3b\x5b\x84\xf0\xaf\xff\xfd\x7f\xed\x2a\xb1\x65\x12\x40\x53\x0b\x46\x99\xe5\xe0\x7b\xd2\x36\x7d\x1e\xcf\x92\x1a\xf6\x11\x9c\x24\xd1\xa5\x47\x35\x82\x8c\x51\xb0\x5a\x49\x8a\x3e\x2b\x51\x05\x65\xb5\x47\x34\x05\x55\x5e\x8d\xc6\x84\x8b\xe3\x7c\xc9\xfd\x31\xd8\x9d\x8a\x5e\x0c\xe9\xaf\x69\xa1\x6f\xae\xac\x1b\x6b\x23\x68\xea\xa7\x6c\x7d\xe7\x3a\xba\x8d\xa2\x02\x88\x59\x00\xa5\xcd\xd7\xcb\x3e\xab\x58\x6f\x85\x2c\x55\xba\x6c\x31\xaf\x1a\xcb\xce\x09\x44\xf9\xb9\x1f\x65\x54\x60\x86\x36\x09\x64\xdf\xec\x4f\xb3\xb6\xac\xa6\x25\xdb\xcb\x74\x31\x52\x31\x42\xd5\x29\x8c\xbd\x53\xaa\x15\x4d\x47\x23\x84\x25\x5d\x9e\xcd\x2b\x12\xd4\x22\xf6\xc8\xce\x30\xf1\x8e\xfc\xd8\x6b\xaa\x4a\x30\x1d\x0c\x46\xe0\xc2\x65\x32\x6d\xbe\x8e\x7b\x1d\xa9\xdd\xe8\xb1\xe8\x34\xa7\x90\xf4\x81\x93\x92\xd2\x9e\x1a\x38\x6b\x1a\x40\x99\x46\x4e\x16\xb6\xae\xa3\x12\x6c\x78\x96\xec\xc5\x3b\xf5\x9f\x47\xc0\x0d\xaf\x6e\x06\x84\xc5\x58\x86\xb4\xc4\xb5\x7d\xc2\xc0\x7d\x42\xad\x69\x19\x4d\x1c\x6d\xf4\xf3\x2a\xf0\x08\x6e\xa8\x45\x51\x65\xd6\x88\xff\x3b\x96\x6a\xc2\x5c\x39\xfc\x1d\xa6\x79\x1d\xed\x15\xd5\xbe\x96\x01\x62\x48\x33\x76\x66\xad\x9f\x15\x24\x40\x96\xec\x6c\x4b\x04\x2c\xa7\x5e\x95\xf0\x94\xaa\xd0\xca\xd3\x3e\xe2\x56\x91\x52\xbd\x7b\x56\x7f\x54\xac\x0e\x11\xfb\x33\xa0\x77\xd4\x80\xe9\x21\xc2\xf8\x2a\xf1\x3d\xae\xda\x90\x3a\x0e\x7e\xb1\x91\x7f\xa8\x4a\xe3\x26\xc6\xde\x47\xa9\xa1\x40\xd0\x0b\x92\x38\xba\x91\x45\xb9\xa9\x26\x64\xb0\xf0\x52\xd6\x29\x69\xc8\x50\x40\x60\x80\x42\x80\x24\xfe\x00\x6f\xd6\xab\x46\x2a\x8e\x2c\x37\x2b\xf4\x1b\x20\x9a\xdc\x62\xef\xf2\x3c\xfc\x17\x3c\x19\x83\x28\x8c\xe1\xab\x35\xb9\xcc\x53\xc2\x37\xe0\x05\x24\x3d\x2e\xbc\x74\x11\xba\x20\x5d\x24\xd7\x67\x6b\x94\x26\xe8\x97\x05\x8c\xcf\x29\x71\x0a\xe3\x39\x2d\x62\xb8\xc6\x04\xac\x27\x17\xee\x59\x12\xc0\x97\x14\xa7\x07\x51\x18\xe3\xc1\xd2\x43\x1f\x20\xb5\x69\x91\x9f\x84\x8d\xa0\x1a\x95\xb4\x54\xa3\xe2\x15\x69\x54\x6e\x53\x88\xc9\x98\x69\x81\x9a\x43\xbc\x76\xfb\x95\x5a\x93\x05\x8c\x56\x85\xea\x12\x0a\x2e\x76\x34\x1f\x93\x79\x43\xe4\xf6\x01\xdd\x08\x2a\xff\x51\x4b\x9e\x04\xa8\x3b\x05\x62\x37\x4f\x1e\x8e\x00\xdb\xe8\x13\xd7\x05\x7c\x9f\x4c\xad\x4e\x12\xd3\x5a\xe1\xe6\xc3\xfa\x2a\x14\x25\x24\x51\xe1\x58\xa0\x17\xfd\x80\x2d\x69\x48\x1f\xf5\xfa\xfd\x0d\x08\xc2\xe0\x2d\xf4\x61\x48\xc4\x3d\x8c\xd2\x5a\x23\x70\x9e\x8e\x6b\x1f\xd8\x0a\x1f\xc0\x47\x8f\x20\x19\x94\x29\x1a\x7a\x14\x7b\x5f\x53\xec\xe5\x02\x2c\x5b\x7e\x7f\x03\x52\x88\x5f\x26\x81\x2e\x32\x32\x6d\x06\x9e\xc4\xbd\xb8\x77\xbb\x01\x51\x1f\xdc\x6e\x00\xc1\x58\x78\x02\x87\xcb\x70\x09\x81\xe8\xed\xc4\xe8\x6c\xd3\x7f\xe0\xfe\xe3\xe5\x0b\x77\x32\x99\x40\x2a\x2f\x3e\x7a\xd4\xc3\xc3\x05\x5e\x46\x64\x80\x09\x94\x7f\x02\x3c\xa4\x35\xf1\xcf\xa2\x24\x0d\xe3\xf9\x04\x1a\x3f\x01\x1e\x7a\x51\x38\x8f\xcf\x9e\x9e\xbe\x3b\x9d\x40\xed\x47\x1e\x98\xf2\x88\xe1\xfe\x03\x43\xc6\xe5\x60\x40\x3a\x0c\xd8\xf9\x66\x4b\xe8\x1b\x1b\x40\x30\xa6\x87\xc8\xab\x24\x80\xf6\x2d\x73\x01\xdc\x56\x01\x95\x5c\x12\x74\x85\xe8\xd1\x23\xe3\xe7\x30\x08\x53\x3f\x89\x63\x22\xbd\x30\x14\x78\x4e\xab\xfa\x37\x19\xc0\xc4\x01\x22\xe0\x43\xf6\x75\xcf\xc5\xf0\x23\xf6\x10\xf4\x9c\xff\xc7\x59\x21\xe8\xd0\x2b\x81\xcd\x87\x37\x21\x52\xf6\x2c\x44\x29\x3e\x5b\x84\x51\x40\xf6\x4c\x9f\xdd\x84\x88\xf2\x2f\xd7\x98\x52\xcb\xd7\xfc\x61\xaf\x77\x01\xa7\xfd\xc9\xb7\xb7\x5c\x84\xa7\x07\xa4\x97\x05\x1b\x27\xbd\x50\xa8\x10\xae\x17\x49\x04\xdf\xc1\x8f\x54\x9a\x32\x41\x22\xfe\xe8\x41\x70\xeb\x61\x8c\xc2\xcb\x35\x86\x29\x3d\x9c\xeb\x4b\x8c\x20\x13\x92\xc8\xfc\x5e\x84\x29\x26\xcf\xfd\x85\x87\x3c\x1f\x43\xf4\xd4\xc3\x1e\x13\x76\x0a\xc7\x57\xab\xd3\xe7\x90\x6b\xcf\x89\x83\x81\x19\x73\x88\x9f\xd1\xc7\x3d\x03\x64\x7c\xfa\x82\x7a\x71\x8d\xdc\x79\xb4\x9e\xf7\x0c\x42\xd3\x1f\xe2\x05\x8c\x7b\x70\xf2\xed\xad\xa1\x07\xa4\x27\x1e\x70\x6d\x12\xa3\x3f\x0f\x62\xaa\xea\x63\x5a\x23\xab\xc2\x88\x1d\xaa\x21\x4e\x5e\x10\x3e\xf4\xcc\x4b\x61\xaf\x3f\x99\xc4\xe6\x03\xaa\x1b\x80\x13\xf8\xe9\x13\xbe\xd8\x99\xca\x69\x92\x63\xd7\x83\xfd\x0d\x43\xb0\xd3\xd5\x0a\x7a\x28\x87\x59\x6c\xd2\x43\x04\x67\x08\xa6\x0b\x82\x8c\x52\xf5\x96\xd3\x2b\x09\x87\x19\x01\x01\xa1\x1e\xbc\x35\xd6\x7f\x02\x37\xfd\xdc\x1c\x32\x9a\x9d\xb4\x86\x66\x27\x9e\x85\x68\x49\x51\x70\xe0\x45\x10\xe1\xfb\x92\x15\xf9\xcd\x62\xf7\xec\xf4\x87\x9d\xd8\x2e\x29\xbf\x7f\xef\xa1\xf9\x8e\x0b\xd8\x1f\x23\x17\xb8\xa7\xbe\xe4\x09\x93\x98\x7b\xcd\xe5\x24\xe9\x32\xbf\x92\x23\xb0\x9f\x67\xfd\x08\x77\x1a\xcf\x12\x44\x18\x1c\xc1\xcd\x5c\xf0\xe2\xfe\x79\xd8\x39\xd7\x1e\x8a\x69\xa5\x79\xea\x63\x72\x38\x55\x06\x2f\x53\x86\xd7\x45\x2c\xc1\x06\x2e\xa0\xc7\x0c\x3b\x97\x49\x70\x23\x99\x27\x2a\xd4\xec\x80\x1d\x96\x4b\xb9\x4a\x4c\x61\x8c\xe8\xbe\x36\xc0\x9e\xf2\x74\x14\x23\xb4\x93\x42\x35\xd1\xb8\xc2\xac\x27\x86\xa9\x61\xd9\xdb\xaf\xe9\xbe\x52\x5b\x94\x2d\x5a\x3a\x85\xe9\x5d\x2f\x9c\x0d\x72\x9f\x96\xad\x70\xa8\xbe\x78\xce\x7a\xdc\xcd\xd8\xbb\x6b\xcb\xc7\x0c\x4e\x54\xf4\x01\x17\xfc\x54\x32\xa0\xb0\x53\x13\x10\x6a\x87\x92\x75\xca\x1e\x4e\xc1\x45\x1b\xdf\x8d\x7a\x56\x7c\x7e\x42\xdd\x8c\xd8\xa7\x89\x51\xfc\x4c\xd3\x1e\x14\xd9\xc0\xde\x25\xa3\x82\x5a\xf3\x1d\xd3\x19\x63\x4f\xb9\x56\x0c\x46\xae\xf2\xa8\x69\xe1\x94\x90\xa7\x3c\x45\x9a\x83\x1a\x2e\x01\x96\x26\x05\xfb\xb1\x05\xf4\x3d\xd3\xfd\x67\xc6\xb4\x12\x64\x8c\x83\xa6\x00\x38\xf3\x62\x1f\x46\x9d\xae\x39\xdf\x60\xb7\x58\x75\xd1\xfe\xe1\x08\x8c\xc5\xf3\x62\x19\x59\x4a\xc0\x2a\x76\x22\x67\xb1\x8f\x20\x79\x38\x08\xd3\x62\x41\x9a\x0a\xc4\xd4\xa3\xa0\x91\x9c\x6b\xbf\xdb\x5b\xc4\x99\xe4\x85\x4f\x65\xae\xdf\x34\x8d\x36\xd1\xa7\x15\x84\x5e\x94\xcc\x6d\x6e\xad\x25\x2e\xac\xdd\xf1\x20\x71\x39\x0f\xb2\x78\xf1\xd4\xff\xe6\x97\x10\xdb\x79\x90\x56\xce\xaa\x8a\x0e\xb9\xd7\x21\x5e\x0c\x74\x68\xb8\x16\xf7\x3f\xe0\x3a\xbc\x09\xe1\x2b\x68\xc5\xff\x4c\xf0\xc0\xe8\x90\x76\x97\x77\x66\x1d\x59\xd9\x99\x7a\x94\x53\x9e\x70\xe3\x52\x61\x7f\xef\xea\xaa\x55\x4e\x61\xb3\x0a\x62\xa3\x0d\x3d\xe2\xd9\x89\xd7\x23\x13\x9a\xff\xa7\x36\x83\x43\x0e\x9e\x83\xa9\xee\x44\x98\x71\x98\x6c\xae\x91\x2e\x82\x5b\x43\x45\x68\x53\x58\xb3\x33\x50\x0d\x6b\xf8\x11\xfa\x6b\x0c\x1b\xc0\x9a\xea\x36\x8f\xd9\x3f\x47\x5b\x42\x5e\x81\xf6\x4b\x00\xb3\xca\x35\xcb\x38\x23\x66\xd4\x87\x24\xc1\x19\xb2\xcb\x74\x8f\x2b\x88\x96\x1e\xa7\xcb\xb4\xba\x0a\x6b\xfe\x8a\x6d\xd3\x92\xfb\x73\xb6\xa5\xba\x3a\x79\x33\xc8\x2e\x2a\x25\xbb\x71\x11\xd9\xc5\xca\x8b\x4a\xf3\x97\xe2\xb3\x3c\x71\x4f\x11\x74\x6e\x92\xb5\x93\xae\x11\xfc\xce\x05\x0a\x28\x44\xac\x97\x2b\x25\x3f\x94\xf4\x49\x11\x46\x97\x57\xb3\xb2\xbb\x0e\xda\x87\xa3\xfe\x06\x70\x3c\x6c\xf0\x8d\x90\x53\xe3\x80\xf1\x1f\x3d\x03\xca\xc3\xe1\x90\xb9\xbd\x48\x9d\xcb\x46\x4c\x5d\x1f\x83\x52\xec\x0b\x48\x9b\x4f\x95\x29\xfd\x41\x76\x6c\xbd\x6b\x8b\xc6\x49\x7e\xe8\x02\x9c\x7f\x6b\x4c\x7c\x27\x27\x50\xa3\x3a\xb7\x5b\xba\x8e\x1e\x7b\x7e\xf4\x58\x78\xe2\xdd\x17\x89\xfa\xaf\x7f\x43\xbf\xed\x25\xa3\x8f\xd6\xdb\x2c\x77\x75\x11\x36\x6f\xb5\x1a\x5c\x85\xf0\xda\x6d\xce\x2c\x72\x02\xa8\x2e\xf1\xf6\x62\x62\xde\x2c\xbb\x18\x59\xac\xd4\x8e\xf3\x2e\xf9\x00\xe3\xb4\x38\x94\xb7\x46\x90\x44\xc5\x94\xa5\xd1\xa5\xd9\x9c\x8f\x80\x0b\x97\x2b\x7c\x33\xa0\x8d\x5a\x40\x53\xeb\xa8\x5b\x88\x1a\x50\x1d\xeb\x50\xfd\x05\x46\x7e\xb2\x84\x0e\x4e\x9c\xd3\xb3\x17\xa9\xc5\x48\x5e\x8b\x59\xaf\x35\xef\x7a\x72\xb3\x7d\xd6\x2b\x2b\x2a\x90\xff\xc8\xb4\x1d\x0f\x41\x27\x4e\xb0\x03\x99\xb1\xd8\x09\x63\x87\x1c\x74\xe7\x8c\x1e\x53\xc7\x8f\xd6\x29\x86\x68\xe8\xfc\x02\x9d\x14\xa3\x24\x9e\x47\x37\x0e\x8c\xfd\x64\x8d\xbc\x39\x74\xf0\x02\x3a\xeb\x14\x3a\xc9\x8c\xf5\x16\xc6\xce\x0a\x25\xc1\x9a\x79\xa8\xc0\xf8\x2a\x44\x49\x4c\x27\xe8\xcc\x12\x44\x9b\x5f\xc2\x14\x3b\x29\xf4\xd7\x28\xc4\x37\xce\x0a\x11\x6a\xe4\xc3\x74\x98\x9d\xfa\x5d\xc1\x52\x4a\xfc\xed\xc0\x19\x85\xca\xf4\x1c\x24\x7e\x3a\x88\xc2\xf8\x43\x21\x88\xc5\x57\x9e\xcb\x0a\x71\x1d\x88\x1a\x5c\x4a\x64\x76\xcf\x5e\xbf\x3a\xff\xf9\xc5\xfb\xa7\xaf\xcf\xce\xdf\xff\xfc\xf6\x85\x64\x4d\x5c\x4a\x23\xf9\xcd\x88\x97\x91\x2b\x4b\x85\x21\x18\xd1\xeb\x39\x59\xc1\x18\x22\x27\x4e\x10\x9c\x41\x84\xb8\x23\xcb\x1e\x11\xcf\xd1\x9c\xca\x4c\xef\x2f\x23\xcf\x9c\xde\x5b\xe8\x05\x74\x1f\x82\xc4\xa7\x64\xde\x13\xf2\xbd\xc5\x5c\x5e\xf6\x38\x03\x8b\x08\x7a\x28\xee\x16\x18\x2f\x9e\x9d\xbe\x7d\x95\x01\x09\xbf\x3d\x04\xfe\x0c\x62\x88\xaf\x13\xf4\x21\x8c\xe7\x8f\x15\xe2\x0d\x3c\x3f\x4a\xbb\x01\xd7\x0f\x49\x14\x25\xd7\x14\x60\xf3\x75\xc8\x2d\xda\x35\x01\x75\x37\xa2\x7a\xa5\x53\xbf\xf6\xba\xda\x44\x0d\xe3\xab\x86\xbc\x9b\xfd\xf2\xfe\x72\xa9\x19\xd4\x8c\x8a\x63\x40\xbf\x0c\x3b\x71\xf6\xd7\xf4\xdd\xf2\xa7\x77\x57\x05\x51\xfd\x81\x6f\xf7\x55\xd3\x4f\x15\x41\xe4\x8c\x67\x0b\x41\xe8\x84\xa6\xf8\xc8\x7b\xbc\x08\xac\x39\xf5\x7d\x98\x52\x1a\x8e\x51\x12\xa5\x85\x62\xe2\x6e\xc6\x1f\xc8\x25\xb4\x9c\x1d\x9e\x96\x32\xa2\xcb\x93\x02\x88\xa8\x48\x16\xa8\x4f\x64\x4f\xd7\xb8\x6e\x58\x28\x2e\xa6\x97\x89\x79\xf1\xf0\x1b\xc7\x35\x03\xf7\x6b\xc6\xba\x67\x9d\x52\x38\x2c\xf7\x33\x79\x09\x0c\x92\x13\xf8\x43\xb2\xe4\x21\xa6\xdc\x91\x2b\x3d\x96\x5e\x09\x8f\x25\x4e\x7b\xc2\x94\x1a\x38\xae\x54\x74\x5d\xa1\x23\xa0\x4e\xe1\x94\xc8\x5a\x73\xa4\xa6\x9c\x9b\xe5\x67\x7e\xa7\xe9\xee\x22\x42\xfb\xf3\xdb\x5b\xd3\xc5\xa6\x21\x38\x57\x49\x14\xfa\x21\xfc\x2c\x00\xad\x1a\xcb\x06\xd2\x37\xfc\x9b\xda\x40\x6d\x0a\x00\x72\x4a\x3f\xcb\xea\x4b\x07\xb2\x2d\xfd\x2d\xf9\xe0\xce\xd6\xed\xad\xf1\x62\xb0\x84\x78\x91\x04\x9f\x65\xf9\x75\xc6\xb3\x41\xe1\x74\x8d\x17\xce\x4b\xf6\x5d\x4d\x60\xd4\x36\x37\xdd\x19\x91\xfd\xa2\xa7\xd0\x08\x75\xff\x4a\xcf\x52\xe1\x1a\xbe\xb2\x43\x51\xb8\x8e\x4e\xd0\xba\x5a\xe3\x58\x9e\x55\x26\x1d\x2c\x10\x9c\x49\x4d\xa3\x17\x4b\x75\x22\x79\x3e\xc0\x89\xcb\x1c\x77\x71\xd8\xd0\x31\xb1\x80\xd9\xfb\xe2\xec\xa7\xda\xde\xc7\x97\x61\x1c\x84\xf1\x7c\x10\x85\xe9\xbd\xf1\x15\x39\xfe\xb8\x5a\x5c\xfe\xf7\xb3\x97\x65\x09\xa6\x6a\x24\x96\x62\x10\xd0\x16\x3b\xd0\x17\x9b\x43\x47\x8b\xe2\x44\x39\x84\x7f\x1f\xc6\x81\xc4\x7f\x8b\x4f\x34\x19\x3c\xb2\x60\xb8\x7c\x89\xd5\xc4\x44\xc6\x08\x39\x84\x76\x02\x97\x49\x00\xa3\x74\x28\x26\x8a\xd6\x11\x1c\x92\xb1\xdf\xb1\x6f\xe4\x31\x2b\x08\x70\x08\xac\x87\xcc\xcd\x2d\x85\x75\x67\xcd\xa4\x67\x3f\xad\x8a\x4f\xcb\xda\xdc\x2d\xdd\x12\x66\x9f\x7a\x9b\xb6\x74\xd1\xd0\xe5\xd4\x23\x75\xf4\xda\x29\xda\x74\x00\x68\x80\x56\xa7\x62\xc8\x10\x45\x27\x7a\x43\x1d\x51\xe8\x8f\x01\xd9\xb4\x61\x6e\x59\x39\xc1\x7a\xfb\xa0\xf6\x06\x50\x8e\x99\xd3\xfa\xbf\x15\x88\xcd\x35\x7d\x59\xf8\x52\xc9\x75\x8b\xa0\xa6\x4e\x00\xdb\x19\x64\xcd\xd5\x34\x83\x6c\x45\xb3\x16\xa1\x25\xc5\x81\x5a\x05\xa4\x0d\x37\x21\x99\xe7\x32\x3f\x54\x03\x92\x59\x94\x05\x0f\x5c\xb8\xe7\x66\xbe\xa9\xdd\xae\xe6\x29\x62\x27\x99\x52\xb3\xc1\x54\xe5\xcc\x8c\x1e\xec\x77\x53\x8e\x97\x2a\xcf\x8a\x41\x08\xc7\xef\x8c\x19\x6a\xc1\xec\x94\xb2\x16\xf7\x89\xf1\xb9\x4f\x0c\xcf\x3f\x3e\x5e\x5e\x1d\x46\xab\x6f\xec\x0c\x8f\x48\xa8\x29\x72\x2f\xe5\x2d\x7b\x64\x2d\x66\x22\x27\xe5\xd3\x9a\xe5\x81\x18\xef\xc3\xcc\x0c\x5a\x36\x27\x9e\x35\xf3\x0b\x99\x03\xab\xd9\x8b\xa7\x61\xba\x8a\xbc\x1b\xce\x83\x65\x1d\x67\x1a\xdd\x7b\xc5\x92\x7a\xa1\x10\x34\xe4\xb9\x0c\x6b\x8b\xeb\x26\xcb\x65\x4e\xbe\x8c\xe4\xd5\x4f\xb1\xf9\x25\xd6\xd1\x72\x01\x8a\xee\x77\x61\xb5\x0d\x20\xf6\xc2\xa8\x91\x49\xcc\x15\x61\x94\x39\x2a\xc0\x72\x00\x5d\xa8\xe3\xe0\x4a\x77\x5b\x5b\xe8\x60\x57\x38\x5a\x8d\x9c\x06\x0f\x6e\xdb\x81\xfa\x89\xa1\xc6\x16\x07\x24\xd2\x17\x55\xd3\xbe\x48\x7c\x8f\x27\x9f\x05\xee\x3c\x4a\x2e\xbd\xa8\x93\x69\x33\x33\x9b\xec\x5c\xa1\x16\xcb\x86\x98\x3a\x6c\x2c\x87\x6b\x97\x5b\x2c\x88\x2d\xe2\xa5\xf7\x91\xae\xe3\xdd\xbb\x17\xd6\xec\xb7\xd5\x53\x0e\xf4\x20\x78\x6c\x13\xe2\xac\xb7\x7b\xde\xa4\xd6\x09\xbb\xf7\xd2\xfb\x18\x2e\xd7\x4b\xe7\x5d\xc8\xac\xf5\x2f\xc2\x2b\x78\x42\x2d\x7a\x4b\xfe\x26\x0a\x67\xd4\x84\xed\xc5\x37\x0c\x7a\x0e\x03\x69\xe0\x5c\xde\x30\xa3\x04\x41\x70\x87\x21\x78\x53\x16\xaf\xc0\x34\x58\xc2\x80\x64\x37\xa0\x82\xa7\xdb\x8a\x3e\x54\x05\x5f\x57\x28\x7a\x94\x36\x27\x4e\xf0\x40\x30\x39\x94\xdd\xd9\x8e\xd3\xb9\x9f\x1c\x0e\x4b\xe0\x73\xaf\x34\x3b\xcf\x7e\x3b\x7e\x71\xf8\x77\xef\xbf\x5b\x31\x3a\x75\x34\x3c\xda\x9a\x0b\x15\x3c\x34\x5f\x48\x89\xae\x06\x13\xde\xa5\x94\x0c\x60\x5b\x5e\x0d\xa3\x41\x50\x21\x05\xe8\xf2\x5a\xb5\xb0\xd2\xba\x6b\xa1\xb6\x62\x19\xed\x4a\xfa\x6f\x26\x8c\x61\x1e\x7f\x53\x57\x43\x64\x5e\x95\xe3\xad\xb2\x4c\xb4\xdd\x83\x42\x41\xae\xc1\xd7\x19\x70\xd6\x81\x64\x29\xc9\xb2\x82\xb9\x5c\xff\x5d\x4d\xe5\x68\xf4\x01\xcd\x61\x3e\x10\xd9\x07\xa1\xe7\x37\x0d\x35\xa8\x24\x26\xf7\x89\xd2\xb1\x0c\x22\x83\x4b\xef\xde\x78\x53\xfc\x74\xf6\xfd\x0f\xbf\xc4\x7f\xfd\xbd\x6e\xb8\xa3\x4c\x4b\xab\x16\xea\x02\xf7\xf5\x0a\xcf\x51\xb2\x5e\xb1\x3f\x99\xdb\x33\x33\x25\x50\x12\xd6\xe4\x33\x91\x01\xb5\xce\x00\x75\xfb\x5c\xa1\x64\xa5\x7f\xf0\x01\x12\x64\x93\x79\x3e\xcc\xf4\xc1\x2c\x92\x53\xa5\xdf\x95\x7f\x15\x05\x5b\x1c\x89\x9e\xc9\xbe\x96\x8a\xb4\x5a\xb3\x29\x0b\xa0\x38\xe2\x02\xae\x1a\xda\x1a\xb4\x39\x06\x63\x2d\x43\xee\x48\xcf\x5c\x8c\x3d\xbc\x4e\xf5\xc5\xc9\xae\xe8\xb2\x28\x59\xa0\xff\x57\x3f\x8e\xf3\x28\x17\xf2\xc0\xa2\xfa\xf8\x58\x2d\x04\x5a\xd6\xef\x41\x9b\xd8\x3e\x83\x62\x1f\xe4\x02\xe3\xb4\xb4\x27\x15\xda\x46\x05\xfc\x21\x13\x2c\xc7\x34\xb1\xb1\x80\x1f\xc1\x09\x42\xaf\x86\xb1\x9e\xe9\x39\x33\x45\x5b\xa8\x84\x1c\x7b\x99\xc4\x7c\x90\x92\x01\x72\xf9\x93\xf5\xaf\xf9\xac\x2b\xbf\x36\xf2\x50\xdf\x2d\x34\x78\x3a\x06\x6b\x23\x91\xc0\xe7\x0e\x80\x95\xe9\xba\x31\xb8\x6a\x7d\x4f\x4b\x21\xd5\x5b\x59\x6c\xe4\x42\x6f\x96\x01\x5e\x76\xff\x96\x66\x7d\xfc\x81\x9d\x4f\x0a\xae\xd1\x01\x70\x3d\x14\x7a\x03\x9e\x9d\x2c\xab\x3c\x27\xb3\x5c\x87\x3c\x5d\x24\x85\xa9\xab\x64\xff\x4c\xc6\x9f\xf1\x78\x0a\x5c\x87\xaf\x66\x57\x9f\x73\x3b\x11\xaf\xd4\x5c\x58\x28\x6d\x32\x1e\x64\x3c\x2e\xe0\x5a\x4a\x64\x34\x3a\xe7\xae\xbc\x40\x2d\x79\xad\xe9\x08\xd5\x9e\xa2\xe3\x51\x81\x51\xa0\xc0\x40\x53\x48\x2c\x79\xc6\xf4\xcf\x4a\x2c\xb3\x68\x47\x93\x6a\x9f\x8b\xdc\xed\x2a\xbf\x99\xba\xdd\xe4\x25\xa8\x27\x79\xb6\x07\x82\xd1\xd9\x1c\x68\x47\x6a\x0c\xc6\x87\x53\x2b\xce\xf2\x93\x9d\x81\x41\x73\xfc\x33\x56\x41\x73\xb4\x69\x11\xdd\xb4\x8c\x04\xa7\x63\x7a\xea\x7e\xb6\xc8\x55\x92\x8a\x94\xd8\xaa\xce\x02\x70\x9f\x2c\xd7\x11\x0e\x57\x94\x29\x79\x82\xe0\xef\xeb\x10\xb1\x04\x5e\x2e\x0a\xe7\x0b\xec\xda\xa2\xdb\xd8\xfd\x0b\x32\x65\x02\x08\x0b\x21\x32\xbc\x19\x69\xe9\x59\x6e\xfa\x36\x76\xc9\x0a\x85\xa2\xcc\x45\xd7\x36\x6d\x5c\x99\x83\x8b\xd1\xb0\x7a\x53\x25\x10\x8a\x0c\x75\x85\x27\xb7\xb6\x8a\xa7\x26\x54\x64\x12\xbe\xa6\x1a\x7c\x71\xc2\x46\x87\xe0\x42\xb1\x8d\x53\x5e\xf4\x80\x3f\x14\xe6\xaa\xda\x09\x0c\x46\x86\x54\x39\xca\xff\x28\xc2\x25\xd9\xf3\xd6\xb9\x0d\x33\xa7\xe7\x78\x9a\xcb\x6c\xa7\x30\x89\xcf\x68\x27\x5f\x0a\x61\x5c\x8a\xf9\xd9\x1b\xb2\x39\x46\xda\x91\xad\xea\xa2\xd7\xaa\x4e\xf0\x49\xda\xa0\x65\x47\xc7\x36\xb7\xc6\x8e\x3d\x06\xff\x88\x80\x35\x63\x27\x6e\x80\xd8\x16\x61\xfb\xb0\x56\x75\x86\x3a\xc5\x19\x0e\xba\xb9\xc0\xb8\x1c\xf1\x65\x2f\xb0\xa3\x62\xca\xff\x21\x8c\x83\xda\xc4\x9e\xe6\x69\x85\xb3\x0a\xfa\x4e\xbb\x2c\xa0\xea\xad\x6e\xaf\x3b\x22\xe7\x35\x89\xb9\x9d\x94\xd7\x13\x0a\x08\x28\xb2\xa2\x90\x75\x1a\x36\x7e\xad\xe6\x19\xf8\x0c\xa4\x7d\xd7\x46\xda\x77\x1b\x93\x76\x4b\xea\x58\xda\xd3\xbe\xc2\xc9\x0f\xeb\x4b\x88\x62\x88\x15\x07\x62\xa5\xb6\x7a\x3b\x83\xe4\x66\x5e\x98\x18\xd9\x82\xda\xfe\x64\xcc\xa7\xc1\x65\x9b\x5d\xd8\x6f\xd7\xb8\x7c\x45\xa4\x81\xb9\x14\xfe\x64\xeb\x35\xfc\xed\x97\x77\x95\x14\x1b\x58\xc8\x18\x45\x4a\x11\xf4\x76\x7e\xfe\xfa\xfd\xb3\x57\xa7\xdf\xbf\x78\xf6\xb4\xad\x8f\x54\x11\x68\x92\x30\xf0\xcb\x61\x43\x5b\x98\xc0\x11\x8f\xb6\x86\xce\xeb\xe7\x4f\xcf\xda\x05\xb2\xe5\xae\x0c\x5a\x81\x29\x77\x9d\xd5\x34\xc4\xe5\x7a\xcb\x8b\x59\x35\x49\x7a\xa4\xd9\x78\x3b\x24\xeb\xa2\xf8\xda\x1f\x84\xdd\x43\x43\x01\xe3\xaf\x9f\xb8\x1f\x5b\x68\xfb\xf1\x5d\x71\xed\x5a\x84\x0c\x85\xa0\x6b\x77\x42\xd8\x36\x21\x39\xa5\x30\x23\xae\x1a\xda\x11\x91\xbc\x63\x32\x3f\xa1\xbe\x2d\xe6\xe2\x47\xe3\x3c\x17\xcf\x9e\xf1\x83\x40\x0e\x59\xba\x15\xd3\x5e\x83\x61\x6f\x88\x86\xa6\x82\x71\x94\xb7\xb9\x35\x15\x1e\x2d\x04\x69\x6c\xa7\x7a\x3b\x04\xd4\x5d\x51\xbd\xe3\x1a\xac\xf9\x51\x47\xaa\x25\xa6\xd8\x6f\x9a\x5a\xaf\x13\x86\x7c\xb7\x44\x15\x43\xa7\x75\x37\xda\x97\x3d\x5a\x6b\x35\x43\xbd\x99\x45\xf1\x2b\xa2\xe1\x76\x43\x46\x3e\x89\xa2\x46\x6c\x58\xc8\x51\xbe\x78\xa5\xa1\x98\x49\x10\x1e\x7a\xd1\x6a\xe1\x0d\x49\x1b\xf3\x00\x81\xa2\xee\x02\x58\xa3\x3f\xda\xa8\xac\x43\xe1\x52\x53\xd5\x5d\xb0\x46\x34\x25\x42\xe5\x0c\x65\x87\xe5\xcb\x95\xfd\x59\x66\xd8\x95\xfe\x64\x94\x4b\xdb\x7f\xa8\xa1\x63\xde\xfa\x51\x44\x7f\x0e\xed\x9a\x82\xfb\x7e\xbf\xee\x59\xee\xd7\xbd\x6d\x44\x27\x45\x45\xf6\xa5\x4a\x4a\x16\x77\x29\x30\x7d\x18\x5c\x4a\x3b\x9d\x2a\xcb\x0f\x59\xaa\x03\x2b\x3c\x66\x23\xfb\xcb\x02\x14\xa8\x9a\x5f\x81\x5e\xd5\x7e\x7c\x1b\x0b\x6d\x0d\xd6\x68\x1e\xd6\xec\x22\xc5\xdb\xbb\x5a\xa5\x71\x64\xb7\x09\xe7\xb0\x9f\x8a\x66\x08\xb6\xf4\x3e\x32\x67\xca\xbb\x46\xb1\x02\x4a\x39\xb2\xbe\xeb\x1e\xf4\x56\x02\xdc\x39\x8e\xd9\xa9\xf7\xc8\xf6\xea\x0e\x97\xd8\x39\x82\xe5\x5f\xef\x83\x83\xce\x58\xc7\xbd\x1a\xac\xe3\x9d\xa4\x92\x2d\xcd\x2f\x5b\xd3\x57\x55\x86\xe1\xb0\x5c\x3f\x32\xeb\xa1\x70\xe9\x9a\xa1\x64\x39\x80\x31\x46\x34\x5c\xbe\x76\xd2\x59\x5e\x45\x2c\xd5\x33\x2a\xda\x9c\xc5\x00\xcd\xb5\x03\xdc\x28\xb9\x86\x88\xd6\x32\x6c\x95\xb0\xb6\xca\x51\xeb\x3e\x39\x91\x11\x66\xfb\xbe\xb8\x8f\x85\x1f\xfe\xb5\x33\xfa\x29\x7a\xd5\x38\x02\x5a\x72\xc7\xfb\x42\xcc\xb5\x39\x4c\x91\xa5\x3a\x2a\x0c\x44\x44\x03\xe7\x22\x40\x4c\x6e\x2d\x97\x2e\xc0\xe2\xef\xa1\x77\x67\x17\x38\x5d\x8b\x7f\x64\x69\x22\x50\x86\xa4\xcd\xaa\x1e\x97\xed\xee\x7d\xc2\xb9\xab\x10\x5e\xdf\x17\x9c\xbb\xba\x7c\xb6\xf6\x82\xb7\x9e\x1d\xe7\x08\xa9\xa1\xd4\x81\xff\x9b\xfa\x09\xad\x9e\x7d\x99\x50\x3d\x2b\xab\x8b\x2d\x2e\x2f\xfe\x50\xfc\x94\x77\x9a\x1d\x6f\x55\x2a\xa6\x1a\x0e\xde\x34\x81\x65\xa3\xd8\xf4\x1d\x85\x92\xa6\x39\x61\xeb\x00\xb2\x02\x17\x9e\x02\xf7\x1d\xa5\x70\xb0\x79\x6a\x97\x07\xf8\x5b\xfd\x7b\x9a\x46\x34\xed\x68\x7e\x5b\x59\x8f\xe2\x2a\x01\x7a\x3f\xa7\x92\xd2\xe3\x3e\x40\x26\x96\x08\x18\xa1\x50\xc0\xb5\x86\xb9\x36\x16\x26\x4b\xa2\x99\xb8\x3e\xe3\x78\x3b\x97\xf2\xc2\x0d\x33\x0c\x0d\x96\xcd\x73\x6d\xa3\xd7\xdd\xc6\x51\x4e\x3b\x63\x59\x4e\x8b\x14\x28\xc7\xf6\x98\x29\x72\x1c\xce\x68\x11\x55\x17\xb8\x3f\x26\x29\x6e\x2c\x71\xb6\xc2\x6f\x36\xe4\x90\x0d\xd8\x08\x3e\x56\x09\xbd\x66\x45\xc4\x82\xf5\xb6\x9a\x6d\x26\x1c\xb0\x54\x2f\xc5\x43\x06\xec\xb0\x6e\x11\x33\x50\x63\x2b\xcf\x4e\xcf\x20\xfa\xbc\x9b\x29\x86\xec\x60\x3b\x21\xc2\xe1\x2c\xf4\x55\x3e\x5d\x4e\xbb\x4a\x77\x53\x2e\xb9\xe5\x84\xad\x3b\xda\xc5\x5e\x9c\xb3\x3c\x21\xa7\xbe\x9f\xac\x63\xcc\xcc\xad\x9f\x6f\x5b\x2c\xa3\x7f\xb1\x03\x67\x83\xc4\xf6\xeb\x68\x72\x14\xad\x7a\x64\xcb\xf1\xb4\xef\x59\x3d\x9f\xd9\x06\x11\x8e\x9d\x44\x7c\xa7\x50\xd6\xb9\x61\x8c\x12\xe1\x8b\xcb\x79\x91\x22\x6f\x63\x0b\xa2\x8d\x01\xe7\x97\x4a\x03\xa4\xfe\x60\x44\x4a\x18\x91\xa3\xb6\x5a\xf2\x8e\x58\x91\xa3\x1a\xac\x48\x43\x66\xe4\x68\x2b\x66\xe4\xa8\xc0\xbd\xa4\x9a\x63\xa7\x7e\x32\x6d\x9d\xe5\xec\xe4\xf9\x6f\xbf\xfc\x74\x4e\x13\x35\x77\xbf\x3d\x25\xe4\x4c\x8e\xda\x70\x4b\x0a\x7c\x77\x5b\x12\x64\xb5\xf6\xb6\xf3\x2e\x20\xbe\x0d\x38\x21\x1d\xfe\x2d\x12\x79\xb7\x05\x7e\x35\xbb\xd2\x08\xfe\xad\x58\x16\x7d\x1e\x8d\x76\xa0\x0e\xeb\xd2\x0d\xf3\xf2\xb7\x5f\xde\xfd\xdd\x8b\xc2\x80\xea\x0d\xdf\xac\x2f\x7f\x82\x37\xe9\x67\x3f\x2a\xb6\x29\x7c\xd9\x7d\xb3\x02\xa5\x93\x05\xdd\xe1\x5e\xbe\x7e\xfe\xf4\xec\x69\x98\xfa\xc9\x15\x44\x37\x9f\x9f\xe4\xe5\x87\xff\xa2\xb4\xcf\x02\x8d\xad\x57\xb2\x3d\x35\xb4\xee\x51\x0d\xb2\xd8\xf6\x70\x9f\xaf\x57\xab\x04\x61\x18\x9c\x46\xf3\x2f\x70\xb0\x33\xc3\xb7\xe6\x4f\x8e\xc8\x48\x40\x68\xb1\xeb\x2d\xb2\x1e\xef\x52\x0e\xc1\xef\x93\x75\x1c\x9c\xae\x83\x10\xc6\x3e\x6c\x03\xbf\xed\x20\x98\x1d\xbe\x0c\x7e\xb5\x8e\x94\x6a\xb4\xce\xca\x08\x75\xb9\xf1\x9a\x20\xea\xc0\x73\x44\xe5\x31\x2e\x8a\xb3\x2a\x3d\x78\x87\x85\x80\xaa\x75\xbe\xac\x0e\x27\xa5\xe1\x58\x4d\xd0\xad\xbe\xc4\x43\xe1\xfb\x3c\x4d\xd7\x34\x1e\xfd\xd9\xc7\x55\xc8\x0c\xb4\x2f\x20\xbc\xa6\x26\xbc\x57\x09\xfe\x1e\xce\x12\x04\xe5\x93\xb3\x28\xf1\x3f\x9c\x7f\x80\xd7\xfc\xc9\xdd\x08\x3f\x0a\x09\xb8\x5f\xcb\xc1\x76\x8e\x9b\x5b\x49\x42\xfc\xc0\xb8\xb6\x89\x34\x0d\xa3\x6d\xb2\xd0\x16\xd2\x51\xc3\xd0\xa2\x6a\xa1\x89\x79\xd0\xb7\xdc\xd5\x3f\x98\x88\x3f\x98\x88\xfa\x08\xd1\x52\xef\xdc\x21\x4e\xdc\x07\xb9\xce\x0e\x92\x2e\x96\x73\xc7\xd2\xc1\x59\x14\xc2\x18\x3f\x7f\xfa\xd9\x19\x19\x73\xf0\x56\x54\xb9\x72\x3d\x1d\x42\xe8\x1c\xfa\x08\xb6\x41\xf3\xae\xa0\x24\x26\xd0\x31\xa4\xb4\x75\x6d\x0d\xad\xd3\x28\x4a\xae\x61\xf0\x16\x06\x21\x82\x3e\xfe\xf9\xed\xf3\xcf\xcf\x1f\x5b\xe7\x70\x1f\x99\xe4\x32\x60\x7d\x46\x4e\xb9\xc9\x45\xb8\x3f\x05\xae\x98\xaf\xf3\xf3\xdb\xe7\x6e\xf1\xc5\x55\x79\x7d\xed\x6f\xc7\x8a\x5b\xc2\xea\x2c\xdf\x35\xe8\xf0\x0f\xc9\xef\xdf\x5a\xf2\xdb\xdb\x0e\xdd\xf6\xbe\x00\xba\x11\x1a\x7d\xee\x27\xab\x2f\x80\x6a\xfa\xd0\xf7\x11\xcd\x2c\xa0\xf9\xf2\x28\x56\x94\x67\xa9\x26\x46\xec\x7e\x01\x14\xfb\x43\x1b\xb8\x2d\x04\xff\x0e\xd1\x65\x92\x42\x82\x90\x2f\x92\xf9\x3c\x8c\xe7\xdb\xc3\x90\xb9\x3e\x2e\xa0\xff\xa1\x39\x48\x6d\xf3\x69\x0a\xd4\x1d\xe0\x86\xf1\x6a\x2d\x26\xe3\x8a\xda\xa9\xae\xf6\xe7\x94\xba\x18\xb3\x59\x92\x37\xb5\x21\x43\x7a\xdc\xe3\x1f\x5e\x26\x1f\xd5\xa8\xbb\x35\x77\x43\x73\x91\xb9\xa3\xb2\x23\xfa\xd3\x1d\xe0\x2e\x90\x39\x49\x6b\xa3\x9c\x47\x86\x1f\x79\xe1\x72\xb0\xf4\x56\xab\x30\x9e\xa7\x56\xaa\x22\x07\x30\x2a\x75\x9f\x91\x0f\x9d\x97\xfa\x87\xbb\x85\x86\xf3\x9c\x47\x14\xf9\x58\x7d\xdb\xc6\xb9\x55\xcd\xcb\xa8\xc5\xfd\x73\x0a\x59\x72\xf1\x70\x46\xb3\x91\xd3\xf5\x39\x37\xc9\x9a\x16\x49\xf5\xbd\x15\x5e\xa3\x30\x9e\x3b\x61\xea\xa4\x61\x3c\x5f\x47\x1e\x1a\x3a\xbf\x2c\x60\xec\x10\x18\xc0\x00\xd0\xaf\x28\x5b\x99\x3a\xbe\x17\x3b\x97\x90\x66\x30\x4f\x66\x8e\xe7\xc4\xeb\xe5\x25\x44\xc0\x49\x31\xe9\x03\x38\x09\x72\x2e\x93\x24\x82\x5e\xec\x78\x71\xe0\x5c\x87\x51\xe4\x78\x51\x44\xbe\x61\x4d\xc2\x59\x08\x03\xe7\x9a\x74\x8f\x20\x5e\xa3\x18\x06\x43\x2b\xa5\x14\x6b\x29\xca\xf9\x6c\xb4\x29\xcc\xfb\x6c\xb4\x2a\xca\x3b\x6c\x34\x32\xfa\xf9\x09\xde\x14\x92\xf1\xa2\x6f\xfe\xce\xe2\x77\xea\x11\xff\x3a\x8f\x2b\xd3\x36\xd7\xd1\x3f\xef\x35\xc0\xba\x4e\x42\xf7\xdb\x40\x3c\xaf\xb0\x1d\x4f\xc1\x4e\x05\x23\x53\xbf\xa7\x51\x1d\x96\xa8\x8c\x90\x8d\x6d\x11\x4e\xed\xfc\xca\x8a\x1c\xc5\xa4\x6c\x07\x97\x2b\x7c\x33\xa0\x6d\x5a\x17\x25\x70\xbb\xae\xf6\x92\x87\xb9\x49\x02\x5f\x25\x9c\xbc\x2c\xed\x54\x50\x7d\xdd\x55\x50\x2f\x3b\x18\x6d\x67\xff\xef\x40\x28\xbb\x84\x26\x0b\x56\x6b\x54\xa1\xc5\x04\xa8\x5e\x54\x3c\x48\xfc\xd4\x56\xa9\x3f\x7b\x15\xde\x81\x0f\x99\x8d\x15\xcf\xd4\xdb\x19\x65\x42\xa2\x78\x72\xa4\xa7\xaf\xcf\xce\xdf\x6b\x1a\x7e\xe0\x3e\x4e\xa1\xbf\x46\x21\xbe\xa1\xf5\x40\xf5\x9a\x3c\x8f\x7f\xbb\xc6\xff\x41\xb1\x64\xa9\x93\x50\x56\x3b\x1d\x46\xb4\x5a\x45\xb2\x82\x31\x44\x4e\x9c\x20\x38\x83\x08\x41\x59\x5c\x1d\x7b\x88\x05\x08\xbe\xbf\x8c\x3c\x13\x46\x6f\xa1\x17\x50\x5c\x0a\x12\x7f\x4d\xd6\xe4\x49\x0e\xa5\x2d\x51\xb9\x5b\x38\x24\x61\xe0\xdf\x2b\x40\x74\x9b\x5d\xa0\x5d\x4e\xa9\x22\xb7\xe1\x4e\x98\x54\x56\x37\xac\x2d\xa7\xfa\x22\x4c\xb1\xb3\x15\xbb\x4a\x7a\xb8\x17\x2c\x2b\x05\x44\x14\x7e\x80\x4e\x2f\x5d\xfb\x0b\xc7\x4b\x1d\x9a\x9f\x21\xed\xdf\x07\xda\xfc\x07\x13\xfb\x19\x98\xd8\x62\x5c\xbc\x47\x8c\xec\xa8\x33\x46\x76\xd4\x01\x23\x6b\xcd\xf2\xf4\x07\x23\x6b\x30\xb2\x84\xb2\xfc\xef\xe0\x66\xef\x37\x0d\xfd\x83\xbf\xfd\xa2\xfc\x2d\x41\x8e\xfb\xc4\xda\x7d\x51\x1e\xf7\xbe\x01\xe3\x3e\xf3\xb9\xe5\xcd\x79\xe3\xd2\x14\x12\x2c\x91\x89\xaa\xf6\xc7\xc0\xa7\x52\xa7\xd8\xd3\x9f\x90\x36\xbf\x25\x61\xac\x27\x4a\x61\x4d\xb6\xcb\x43\xa1\x32\x3e\x7c\xe9\x3c\x14\x97\x6b\xff\x03\xc4\xf7\xaa\x0e\xf2\x2f\x6f\xfe\xf6\xf7\xf3\xd8\x3b\x2c\x4b\x7b\x42\x53\x23\xb1\x32\xfc\xc0\x7d\xc2\xca\x92\xd1\x42\x1b\x1e\xc2\x21\x47\xf8\xda\x5e\x93\x7b\x99\x2c\x79\xeb\x14\x3a\xb2\xa3\xd4\xea\x25\xdb\x3c\xfc\x2c\xc3\x78\x81\x0b\xf7\x8d\x9a\xeb\x54\x9a\xa7\x1b\x33\x97\x82\x46\xe9\x05\x4c\xf9\x86\xb3\xbd\xb5\x97\x41\x94\x9f\x8e\x84\xc5\x89\x25\x9b\xd4\x01\x78\xb1\x07\x2e\x76\x8f\x04\xaf\x29\x63\x35\xf3\x9c\xeb\x69\xb0\x0c\x63\x47\xae\xa7\x88\xe5\x33\x89\x6a\x69\xac\xb1\xaa\xb6\xa7\x43\xa9\x9c\xa3\x2c\x5e\x54\x2c\x2a\x1f\xd6\x5e\x91\xac\xef\xd7\xe9\x5a\x32\x55\x03\x4b\xd6\x52\x79\xf5\x8f\xa7\x5a\x35\x43\x76\x10\xa6\x9d\xe4\xbd\xa0\x00\x13\x67\xcb\xbe\x28\x3e\x60\xa7\xa0\xd1\x17\xd1\x54\x6c\xc8\xe5\xf7\x6a\xe3\x7d\xdd\xc8\xcf\x7a\xd7\x42\x31\xe2\x4c\x79\xcd\x4e\x9c\xe9\x33\x48\x23\x5d\x0c\xbe\x34\x99\xf8\xfa\x4e\xd4\x1f\xc7\xa9\xe9\x71\xda\xe6\x2c\x95\x3c\x2c\xc9\x76\x27\xea\x66\xbb\x1e\xcd\x1c\x45\x19\x35\x59\xa4\xd9\xf7\xe2\x16\x5c\x57\x8e\xbf\xf9\xd2\x0c\x57\xe0\x61\xcf\x87\x31\x86\xe8\x71\xca\xcb\xd0\xde\x17\xc6\xeb\xf1\x62\xbc\xf7\xf4\xc5\xd1\xd8\xce\x78\x05\x61\xea\x47\x49\xba\x46\x84\xd1\x5a\x79\x31\x95\x51\x96\x30\x5e\x93\x9d\xe2\x3c\x59\xe0\x9b\xec\x58\xe0\x17\x54\x70\x36\x64\x5f\x3f\xaf\x6f\xe6\xf2\xb7\x1a\x73\xc0\x46\xa2\x39\xb1\x8d\xaa\x7e\xee\x53\x09\x50\x26\x8a\x37\xd3\x08\xb9\x2a\x33\x3c\xb8\x70\x4f\x7d\xc9\x8f\x71\xc2\x46\x3d\x6d\xfc\x28\xf4\x3f\xa8\xd4\x76\x38\x99\xcf\xa3\x4c\x6d\xc6\xa6\x7a\x28\x75\x5c\xf7\x8d\x82\xfe\xfa\xcc\x6a\xdd\x74\x6a\xf2\x2f\x09\x84\xa6\xd3\x76\x7a\x31\x01\x70\x0f\x7b\x03\x51\xd2\x81\x6b\x3c\x52\xe4\x1b\x99\xc6\x35\xf2\x49\x1d\xae\x1e\xff\x85\xfe\x9f\x42\x6c\xc9\x32\x9b\x95\x21\x65\xca\x71\x33\x89\xfe\xa1\x0e\x46\x91\xb1\x14\x5c\xd0\xa9\xb8\xaa\x2c\x64\x81\x8a\x86\x12\xef\xf6\x8b\x57\xb7\xc2\x68\x57\xbf\x16\xc6\x85\x3f\x68\xba\x55\x96\x48\x24\x33\xfb\x6d\x1d\x10\x5d\x23\x0f\xfc\x73\x9a\x2b\x65\xaa\xd7\xb1\xf4\xd7\x08\xc1\x18\xbb\x85\xb9\x18\x33\xe8\x24\x93\x4a\x4b\xf4\xe2\xaa\x09\x8c\xd6\x46\x9a\x39\x56\x0d\x41\x67\x3d\x54\x66\x6e\x37\x4c\x07\xbc\x28\x83\xe8\x8e\x26\x56\xb1\xd4\xff\x14\xcd\x57\x28\x5c\x7a\xe8\x46\x7d\xf0\x86\x3f\xc8\xe9\xd2\xdb\x69\x70\x6d\xe0\xaa\x77\x72\x09\x31\xc9\x16\x55\x7d\xb2\x40\x70\xa6\x23\xf5\x01\xf9\x90\xea\x0f\x2f\xd8\xf9\x4b\x5d\xd3\x86\x20\xb7\xd6\x77\x75\x81\x49\xe7\x8a\x32\x90\x07\x17\xe3\xe3\xa9\x75\xdb\x84\x19\xe2\x80\x16\x5b\x89\xe7\x98\xd6\x92\xdc\x51\xa0\x65\x69\x81\xc7\x2a\x0b\xdc\x74\x5a\xa7\xd8\x70\x89\xe3\x6a\x1e\x2d\xf2\x87\x41\x5b\x42\x76\xf3\x9a\x7a\xd5\x16\xb8\xcb\x8e\x81\xea\xb9\x89\x07\xa6\x3e\x35\x13\x11\xbb\x9b\x18\xef\xb7\x85\xca\xac\x26\xe1\xae\xd9\xb4\x96\x0b\x7a\xa9\x13\x71\xe1\x5d\x32\xce\xb4\x29\xb5\xeb\xb4\x29\x40\xaf\x54\x6d\x42\xa7\xe6\x47\x5e\x9a\x0e\x96\x1e\x61\xf0\xe6\x58\xa4\x12\x06\x2e\x39\x7f\x03\x9c\xb8\xc0\xa5\x87\x88\x25\x11\x5d\xae\x8d\x84\xc7\x69\x82\xf0\xe0\xf2\xa6\xb3\xa2\xf6\x85\x5c\xd8\x17\x67\x0f\x45\x00\xe0\xc0\x5f\x78\x61\x9c\x67\x0d\x41\xa3\xcf\xd7\x38\x8c\x32\xec\x24\xc0\xdd\x31\x94\x71\x39\x43\x89\xe7\x3f\x1e\xfe\xe3\x1f\xff\xfd\x9b\x9d\xa1\xe4\x4c\x63\x00\x53\xac\x58\x48\xeb\x43\xfe\x2b\x5d\x45\x21\xe6\xe5\xd7\x29\x4f\x22\xbe\x61\x30\xa2\xcd\xde\x42\x1f\xe7\xbe\x67\xad\x0b\x5f\xeb\xff\xd8\xf3\x29\xe3\x9b\x9c\xc9\xdd\xcd\x58\x9b\xf7\xc1\xe8\x18\x5c\xb8\x71\x12\x34\x0e\xd5\x10\x54\x39\xd7\x05\x6d\x70\x2b\x69\x46\xb2\xf2\xfc\x10\xdf\x9c\x38\x23\xe7\x61\xb8\x24\xe8\xe0\xc5\xf8\xbf\x94\x87\x87\xe3\x5c\x7a\xfe\x87\x39\x4a\xd6\x71\x30\xf0\x93\x28\x41\x27\xce\x95\x87\x7a\x83\x01\x4e\x62\x38\x98\x23\xef\x66\xb0\xb3\xb3\xd3\xff\x2f\xd5\x3e\x41\x01\x94\xad\x02\xe8\x27\x68\xc0\x9e\x0d\x46\x96\x86\x03\xe4\x05\xe1\x3a\x35\xdb\xb3\x67\x83\xb1\xad\x3d\x9f\x04\x9a\x5f\xf6\xb2\x13\xd9\xdf\xd9\xe9\x1b\x1f\x7c\x1c\xa4\x0b\x2f\x48\xae\xcd\xde\x61\x04\xaf\xa8\x05\x63\x70\xa0\x0d\xb0\xa9\x9b\x48\x81\x83\x14\x06\xf3\x6d\x77\x45\x75\x51\xb8\x2b\xb5\x66\x97\x57\xf2\xe5\x12\x1e\xa3\x64\xcd\x52\x13\x5b\xf2\x70\xef\x00\x69\x9d\xce\xa9\x01\x5c\xab\xf9\x39\x27\x72\xec\x83\xf1\x8e\x52\x11\x18\x4c\x80\xf3\x96\x0c\x8d\x72\xaa\x1f\x71\x41\x32\xce\x8a\xf6\x4c\x8d\xc2\x74\xa6\x28\x75\x70\xe2\x84\x84\x98\xfa\x70\x85\x1d\x8c\xbc\xd9\x2c\xf4\x9d\x75\x1a\xc6\x73\xe7\x85\x77\x03\x91\x73\xe8\xf8\x28\xc4\x10\x85\x9e\x23\xcc\xc2\x2b\x0f\x2f\x9c\x15\x82\xb3\xf0\x23\x4c\x9d\x04\x39\x0b\x8c\x57\x0e\x5b\x5c\x3a\x54\x22\x84\x7d\x1d\xa5\xbe\xfb\x45\x0f\x0c\x40\xbb\x28\xa1\xa5\x92\x78\x09\x96\x82\xc3\x9d\x2f\x13\xa5\xff\xbd\x0f\xc6\xa3\xad\x38\x7f\xd7\x48\x9c\x98\xa5\xde\x14\xbc\x03\xdf\x43\x81\x2b\xd9\xda\x91\x51\x8b\x51\x9f\xd2\x48\xd6\xa0\xda\x99\x02\x17\xd1\x2a\x52\x1a\x9f\x3b\x43\x89\x4c\xbe\xb8\xa3\x23\x74\x86\x1d\x16\xb2\x7c\x12\x33\xe6\x59\xeb\x54\x8e\xb4\xaf\xc4\x39\x57\xb4\xb2\x06\xaa\x5b\x18\x8f\x1d\x8b\xe9\xae\x8c\xcb\xb0\x1c\x10\x71\x11\x74\x7f\x46\xce\x45\xcf\xb5\x8e\x80\x6c\xcd\xfc\x20\xa8\x13\xd1\x1a\xc1\x80\x9c\x07\x3a\x47\x27\x8c\xfd\x64\x49\x8e\x01\x82\xbf\xaf\x61\x8a\x53\xc7\xf3\x51\x92\xa6\x4e\x10\xce\x66\x90\x48\x73\x0e\x57\x0e\xd2\x23\x90\xae\x2f\x53\x88\x53\xe6\x06\x41\x8e\x4f\x04\xc5\xfb\xaf\xe4\x44\x70\x49\x70\x57\x97\x92\xf7\xc1\x38\x5f\x79\xae\xf3\xc3\x22\x90\xa2\xf9\x79\x19\x1d\xdf\xc1\x79\x19\x1d\x77\x73\x5e\xcc\x52\xd8\xed\xce\x0b\x82\x69\x12\x5d\xdd\xc5\x79\x79\x2b\x7a\xae\x75\x5e\x64\x6b\x7a\x5e\xd6\x29\x3b\x29\x8c\x0b\x75\xae\x17\xa1\xbf\x70\xc2\x38\xc5\x5e\x4c\x8f\x03\x3d\x03\x0c\xf9\x9d\x74\x91\xac\xa3\xc0\x49\x3d\x1c\xa6\xb3\x1b\x47\xee\xbd\x3c\x57\x5f\xf7\xf1\xd8\xbb\xfb\xe3\x21\x70\xa0\xc5\xf1\x38\xea\xe2\x78\xb0\xf7\x96\x73\x72\xc4\xb4\x1c\x7a\x1f\xdd\x1c\x9c\xa3\xe6\x07\x07\x5c\xec\xee\x81\xf1\xfe\x34\xf7\x82\x20\xf4\xd5\x5c\xd9\xbf\xf8\x4c\xe9\x4f\xf7\x3a\x0c\x30\x11\x64\x47\x3b\x3b\xff\x29\x9e\x2d\x20\xab\xb9\x68\x3c\x5c\x21\x48\x10\x1a\x9e\xa6\x2b\xe8\xe3\xb7\x84\xaf\xa5\x16\x8e\x58\xb3\xa4\x8d\x0f\x6c\x7b\x40\xd6\x2f\xc6\xd4\x31\xe4\xb3\x72\x2d\x99\xf2\xdf\x7b\xe0\x82\xa3\x45\x93\xcf\xf7\x2c\x9f\x03\xf9\xe0\x15\xfc\x88\x9f\x33\x8c\x69\xdb\x35\x87\x5c\x46\x8f\x29\x3a\x21\x72\xe2\x8d\xc4\xbd\x03\x40\x9e\x4c\xb3\xaa\x39\xfe\xe6\x46\x7f\xb3\xa3\xbf\xe1\xbb\x3b\x9d\x8a\xae\x35\xed\x5c\xbe\x4a\x2c\x59\x98\x96\x5b\xa7\xe9\xe9\xce\x50\x62\xc2\x37\xbb\xcc\x1f\x6d\x54\x32\x16\x70\xbf\x75\x4d\xb8\xbe\x4a\x02\x53\xf7\x39\xda\x07\x6e\xe0\x66\x95\xf4\x15\x20\x3b\xcc\x81\x6c\x4f\x7f\x75\xa3\xab\x2f\x85\x9e\x92\xc8\xdf\x75\xfa\xde\x97\xb5\x4a\x6d\x5b\xb2\x5f\xb8\x25\xfb\x15\x5b\xa2\x15\x35\xb2\xe8\xb0\x4c\xaa\x71\x68\xaf\xdb\xb5\x4f\xce\x62\xfd\x32\x5f\x7b\x35\x0a\xa9\x5b\x0f\xa6\x9d\x51\x6a\x74\x30\x8f\xb6\x3a\x97\xed\xbe\x2e\x5f\x17\xaf\x4b\x4e\x18\xb4\x96\xb9\x1a\x32\xb4\x63\xe7\xf3\x93\x8a\x71\x21\xa9\x18\x17\xe2\xe5\xb8\x29\xa9\x38\x52\xa7\x77\xe0\x8a\x7a\xd5\x5b\x51\x0d\xc5\x90\x49\xba\x71\x90\xa1\x1b\x52\x9c\x3a\x71\x65\x0d\x79\x61\xb7\x90\x44\x64\xa7\x88\x88\x8c\x95\x44\xc6\x7b\x6f\x4e\x53\x76\x15\x6c\xf9\xaf\x1b\x77\xda\x94\x7a\x1c\x97\x11\x8f\xe3\xa2\x3d\x3a\xae\x45\x3a\x34\x26\xd6\xdc\x32\xcd\x28\x68\xcd\x0f\xf9\x8b\xec\x7a\x47\xe7\x8a\x02\xe8\x87\x4b\x2f\x62\x1c\x04\x25\x1f\xff\x69\x30\x57\xb2\xbc\xac\x75\xd9\xb3\x24\x8a\x92\xeb\xb3\x35\x4a\x13\xca\xb2\xb3\x22\xcd\x4d\x88\x9c\xbd\xe0\x61\x65\x29\x6f\x7b\x71\xa1\x96\xa9\xff\xed\x72\x0b\xe7\xb2\x4c\xb9\x65\x10\xc6\x11\xc4\xa9\xe0\xc3\x73\xbc\xd5\x17\xe2\x81\xcc\xe4\x34\x07\xe6\x09\x51\xb3\x3f\x69\x91\x83\x73\xcf\x82\x50\x07\x56\xa2\x07\x2c\x08\x72\xe3\x4a\x20\x4d\xc1\xc5\x0e\xd8\x99\xb6\x74\x66\x52\x5c\x87\x1f\x22\x9f\xeb\xc0\x89\x24\xe4\x02\x77\x3c\xdc\x17\x3f\x7d\x72\x10\xf7\x39\x53\xe2\xfa\x37\x59\x0b\xf5\x18\x1c\x16\x9d\xbf\xc3\xd2\xf3\x97\xc7\xe7\xa2\x7c\xbc\x0d\x32\xac\x7e\x8e\xbb\xb8\xea\x3e\xdc\xed\xf0\x3e\x34\xb1\xc4\xce\x45\xdf\x31\x96\x74\x86\x27\x85\x3c\x5e\x39\x8b\x57\x07\x4f\xf6\xad\x28\xb1\x67\x7d\xba\x5b\xaa\xac\x37\x68\x94\x54\x3b\x7d\x0d\x34\x6a\x94\xa5\x51\xea\xea\xef\x06\xfb\x46\x5f\x31\x8d\x2a\xe4\xe3\xca\xd9\xb8\x3a\xb8\x67\xbf\x58\xed\xb7\x6d\x1e\xf5\x2a\x2c\xed\x41\x78\xe5\x02\xd7\x0b\x02\x65\x52\x4f\x90\xac\x06\xcc\x22\xe4\x06\x29\xf6\x10\x4e\x07\xd7\x21\xd5\x54\x50\xbb\xbc\x3d\xe4\x45\xc6\xb9\xa4\x57\xf3\x81\xbf\x46\x57\xd0\xa5\x16\x29\xea\x91\xa9\x3c\x34\xf1\x35\x84\x31\xb3\xda\xa7\xeb\x4b\xc3\x54\x4f\x87\x0d\x92\xe5\x60\x95\xa4\xc2\x33\x26\x89\x07\x08\xa6\xe1\xbf\x20\x6d\xc0\x6b\x5a\x03\x97\xaa\xa6\x5c\x69\xf1\xd2\x35\xfb\xba\xcd\x5f\xe9\x2f\x01\xb7\x8e\x02\x37\x08\x83\x41\x18\xa7\x34\x49\x6e\x73\xf3\xbf\xcd\xca\x6e\x98\xfe\x51\xa9\xe9\x3f\xe6\xa6\x7f\xf9\x66\x08\x3f\x62\x18\x07\xbd\xdb\x20\x59\x9e\xb0\x77\x61\x4c\x6d\xec\x5c\x83\xd9\x23\x10\x71\xfb\x00\x87\xfe\x07\x88\x0a\x9a\xb0\x97\x6e\x1f\x04\x1e\xf6\xce\x31\x5a\xfb\x38\x2d\xea\x8d\x3a\xea\xb1\x26\x6e\x1f\x50\xdf\x0a\xea\x0c\xcd\x3d\x35\xb5\xd5\xb9\x53\xf5\xfa\xfb\x30\x0e\xc2\x78\x4e\x5a\x91\x0d\xbb\x22\xa7\x45\xec\xc7\xf3\xe0\xc4\x75\x41\x18\x87\xf8\x44\x7a\x0b\xf4\x6f\xf1\x22\x4c\x87\xef\xd3\xf5\x0a\xa2\xde\x70\x38\xf4\xd0\x9c\x46\x95\xa5\x7d\xc0\xde\x44\x61\x8a\x61\x0c\x51\x3a\xa1\xbf\x83\x64\x39\x94\x8f\x7a\xfd\x0d\x08\xc2\xe0\x39\xdd\xa6\x67\x11\x3d\xbc\xf9\xbe\x65\xf3\xa1\x17\x04\x3d\xd9\x8b\x88\x5f\xeb\xf5\xc1\x2d\x55\xfd\x9d\xc0\xc9\xb7\xb7\xf2\x35\x75\xe5\x4a\x71\xef\xcf\x17\x74\x71\x7f\x9a\xb8\x4c\xb3\x39\xfd\x33\x80\x43\x16\x1f\xd7\xff\xf4\xa9\xc7\xa0\x97\x42\x4c\x3b\x06\x62\xd5\xe0\xe1\xa8\x0f\xb2\xef\x14\x20\x5c\xe0\xba\xfd\xfe\x66\xd3\xdf\x80\xeb\x30\x8a\x9e\xc2\x14\xa3\xe4\xa6\x70\x05\x35\xa0\x33\x44\x70\x99\x5c\xc1\x1e\x7f\xc1\x76\x7a\x18\xb0\x8e\xe9\xf8\xfd\x0d\x90\xd8\xcf\x37\x9d\x20\xee\x1a\xc3\xa0\xc7\x0e\xca\xf0\x15\xc3\xfd\x9e\x36\x01\x16\xef\xda\xdb\x01\x78\x38\x87\x58\x1a\xa4\xfa\x7c\xe1\x73\xb9\x38\xbd\x87\x7e\x7f\xd3\xef\x03\x76\xe8\xea\x0f\xc5\x5c\x3e\xe0\x44\x0c\x46\x6d\xc5\x55\x23\x01\xb9\x61\xf3\x75\x18\xf4\x1f\x84\xb3\xde\x43\x38\x9c\x85\x71\xd0\x83\x93\x6f\xdd\xc7\xee\x64\x32\x51\x1d\x40\xe0\x3e\x85\x33\x82\x82\x61\x12\x0f\x5f\x7a\xd8\x5f\x0c\x7f\x7c\xf7\xee\xcd\xf0\x8d\x87\x17\x6f\xa8\xad\xd8\xed\xf7\x1f\x3d\xd2\xba\x60\xfe\x28\x93\xc9\x04\x0e\xd5\xa7\xfd\xfe\x6d\x04\xb1\x13\x73\x37\x15\x34\xf9\x55\x32\xe3\x7f\x62\x7b\xc6\x26\xa9\xd9\xc0\x37\x43\xe3\x8d\x0c\x2c\xc8\x3c\x97\xe1\x48\x99\xe7\xca\x0b\x79\xf3\x2b\xf0\x26\xbf\xca\x8b\xb5\xb3\xf1\x7e\x25\xb0\x63\xab\x7d\x38\x99\xe8\x9f\x12\x48\x5f\x78\xd3\xef\xe2\x89\x77\x52\xdc\x00\x4d\x1f\x3d\xea\xc5\x13\xd4\x07\xb2\x4d\x2c\x36\x15\x4d\x6e\x9f\xb2\xab\xf6\xe4\xe1\x0e\x78\xfe\xf4\x84\x51\xe4\x13\xf7\x1b\xfb\xe4\x01\x25\xb1\x05\xef\xd4\x36\x9c\xdc\xd2\x2d\x3c\xb9\x25\x7b\x78\x72\xab\x36\xf1\xc4\x7d\xec\x6e\x36\x1b\x20\x78\x91\x93\x78\xf3\x00\x0e\x57\xeb\x74\xd1\xa3\xd8\xe5\x23\xe8\x61\x48\x11\xac\xdf\x43\xa0\x60\x20\x13\xb5\xfa\x9b\x0d\x3b\x0c\x0e\x24\xd8\x4d\xef\x89\x1c\x72\x5b\x2f\x1a\xed\x7a\xd1\xf1\x9d\x60\x10\x64\x70\x94\x2d\x86\x08\x06\x6b\x1f\xf6\xa8\x1b\xd5\xe4\xdb\x1e\xbc\xd0\xc4\xbc\x6f\xf0\xf0\xf9\xd3\xe9\x04\x03\x3c\x3c\x5b\x84\x51\x80\x60\x5c\xaf\x3d\xec\xf3\xff\x77\xbb\xe9\x3f\x10\x8b\x60\x23\xcb\x79\xe6\x7b\xca\x7c\xcd\x67\x4a\x17\x58\xd5\x98\xfb\x7f\xf1\xf0\xd7\x1e\xec\x0f\x67\x09\x7a\xe6\xf9\x8b\x5e\xef\x02\x83\x78\xda\x9f\x7c\x7b\xab\xb0\x64\x28\xb6\x89\x20\xd0\x50\xb0\x77\x13\x78\xa1\xde\x4c\x75\xac\x1a\x32\xc9\xe6\xd1\x23\xf1\x97\xec\x1d\xeb\xfd\x62\xbd\x5f\xac\xf7\x8b\xb5\x7e\x37\xfd\x4d\x1f\xb8\x2e\x25\x58\x62\x17\x0a\x68\xd6\x2d\x45\x74\xf0\x8e\x12\xff\x74\x53\x46\x28\xa5\x25\xb2\xdf\xb3\x1e\x62\x60\x3b\x82\xc0\x76\x5e\x81\x9d\xfc\xf1\x49\xb8\xfd\x82\xf7\x3a\x21\x9e\x23\x6f\xb5\xc8\xad\xc9\xc0\x50\xb6\xab\x17\x53\x3b\x45\x66\x07\x41\xf1\x0c\x43\xda\x63\x4f\xe2\x52\x06\x93\xf4\xdd\xc0\xd9\x2d\x8a\x27\xdf\xde\x42\x72\x13\xbf\x08\xe3\x0f\x3d\x82\x36\x40\x6d\x33\xdb\x0d\x1d\xd1\xf4\xbe\x32\x9f\x61\xfd\x33\x40\x0f\xa5\xb8\x61\xf3\x8b\xd5\xaf\x5e\x3a\x7b\x73\xa5\xe1\xac\xe7\x92\xab\x82\xad\x44\x36\xfe\xf4\xe9\xa1\x24\x02\x90\xdd\xce\x3d\xf7\x3f\x38\xd5\x52\xcd\xfa\x7d\x06\x88\xdb\xcd\x03\x03\x64\xaa\x05\xc0\x13\xc8\x20\xd4\x73\x4f\xdc\xfe\x30\x5d\x84\x33\xc2\x79\xc4\x93\x0b\x38\x05\x68\x72\x31\x35\x60\x49\x67\x28\xd6\x4e\x56\x0c\x03\xb2\xce\x1e\x04\x3d\x08\x3c\x72\x7a\x62\x46\xcd\xe0\x30\x0c\xfa\x00\xb1\x1f\xbf\xfe\xe9\xd6\x1b\xce\x50\xb2\x7c\x1e\x6c\xbe\x25\x7f\xe3\xe4\x79\xb0\xf9\x95\x03\xb4\xb0\xcf\x61\x18\xc8\x6e\xd9\xf4\xa3\x09\x79\x68\x99\xef\x03\xfc\x70\x32\x89\x1e\x3d\x52\xae\x92\xe4\x9c\x65\x7e\x47\xf4\x18\xd7\x9f\x1e\xdb\xf4\x5b\x46\x50\xe3\xe1\xd2\x5b\xd1\xab\xfb\x3f\xdc\x6f\xce\xce\xcf\x87\x30\xf5\xbd\x15\xec\xc1\x7e\x1f\x50\x03\xe5\x09\x2a\x6e\xb1\x21\x38\xc0\xf3\x66\x9c\x70\xa6\x4e\x8f\x73\x12\x51\x4a\x70\xc8\x43\x1d\xd8\x29\x22\x87\xe7\x14\x63\x14\x5e\xae\x31\xec\xb9\x61\xe0\xf6\x1f\xe0\x3c\x32\x7c\xb7\x15\xb3\x77\x52\xfc\xf5\x4e\xf9\xd7\x98\x2c\x6c\x63\xb8\xfb\xa2\xb6\xee\xbe\x86\x95\xfe\xbe\xc4\x85\xfd\x36\xfa\x0d\x9f\xbd\x7a\xe6\xd9\xdd\x78\x7d\x72\xd5\xb9\x5a\x4e\x0a\xf9\x47\xd6\x33\x46\xf7\x02\xe0\xef\x1e\x79\x18\xa3\x82\x18\x31\xab\x0b\x0b\x67\xf2\x6d\x6e\x2c\x23\xc3\x8d\x85\x29\x57\x46\x07\x44\xf6\x94\x51\x20\xa6\x36\x64\x7f\x6a\xc4\xc0\x8c\x0c\xc1\x5f\xbb\xa7\x81\x50\x54\x9a\x46\xdc\x22\x57\x19\x8f\xcf\x7a\x17\xb8\x56\x9f\x19\xe9\x52\xb3\x2b\x5f\x8f\xe4\x10\xca\x1d\xd3\x1a\xbb\xba\xa7\xa9\x4d\x7f\xf0\xc2\x88\xe0\x4e\xfb\xb2\xe2\x5a\x2c\xf0\x4c\x76\x56\x1c\x5d\x2a\x63\x80\xb9\x39\x64\x9a\x8f\x3e\x32\xe6\x05\x54\x6e\x1a\x47\xeb\xbf\xd0\x7f\x21\xa3\x4d\xb4\xea\x8a\x6b\x76\x6e\x9b\x7e\xeb\x7a\x40\xa4\x49\x52\x9c\xb5\x3e\x1b\x31\x65\xfe\x9d\x9f\x36\xe7\x0c\xba\xc8\x59\x2f\x66\x57\x91\xb1\x5e\x2a\x2e\x9b\x95\x44\xc8\xf9\xcc\xd4\x2a\x88\x50\x06\xeb\x16\x39\xc1\x4a\xa2\x91\x4b\x62\xbc\xf7\x72\x96\x3a\xb6\x0f\x82\x2f\xa7\xea\xb1\x6c\xb4\x55\x63\xef\xf0\xf2\x6a\x06\x75\xf0\x42\xce\x67\x3b\x6c\x10\xc7\x93\xe3\x41\x67\x44\x6f\x94\x27\x7a\xec\xec\x17\x29\xae\xa5\x73\x50\x95\xcb\xd8\x81\x11\xd9\x59\x92\xca\xb0\x98\x9a\xe6\xa9\xe2\x88\xfa\x18\xb2\xd2\x34\x6d\x93\x48\x16\x11\x48\x24\xfb\x2d\x4f\xde\x57\x83\x48\x66\xa6\x09\x5c\x47\xeb\xbc\x06\x75\x74\x72\xe1\xfe\xc6\xa2\xe9\x5a\x44\x8f\xe5\x47\xda\x46\x24\x4a\x8b\x78\xd8\xf2\x2f\xe4\x93\x0c\x54\x8c\x55\x71\x6a\x59\xcf\xad\x6f\xb7\xe2\x2d\xac\xb8\xe3\x9a\x6f\x62\x07\x37\x9d\x0d\xa8\xf9\x6e\xf9\xa6\x8a\xae\xed\x93\x2e\x2d\x3a\x52\xbd\xb1\x9d\xdc\x75\xd9\xe9\x77\x78\xd7\x99\x73\xac\xac\xd1\xe2\x94\xdf\x7b\xe5\x75\x5a\xac\x58\x5a\xb3\x56\x4b\xbd\xfd\x68\x79\xe3\x36\x4b\x5d\x53\xfb\x3c\x35\xa1\x8b\x35\xce\x7e\xcb\xc3\xf7\x05\x8e\x9e\x9d\xd1\x6c\x30\x40\x13\xba\xd7\x8c\xc6\xde\xeb\x83\xd8\xe0\x18\x96\x1c\xc2\x71\xc5\x21\xac\x3c\x0e\x96\x22\x0a\x4d\xcf\x58\x83\xd1\xaa\x12\x46\x56\x1f\x8f\x96\xd5\x6a\xda\x72\xcf\xa3\x76\x49\x15\xeb\x9b\x9e\xa5\xb1\x58\x19\x86\xed\x56\x65\x6a\x70\x66\x5e\x6d\x5e\x54\xc7\x48\x3c\xef\xc2\xac\x6b\xd1\xa6\xdc\xb7\xf8\x6e\x15\xe2\x67\x0b\xf5\x7e\x32\x8f\xc2\xe5\x12\x22\xd5\xd1\x17\x8b\xe5\x5e\xee\x8c\x57\x7b\xc1\xab\x1f\x4a\x63\xb9\xcd\x7f\x72\xa1\x51\x25\xfa\x9e\x11\xe7\xf4\xc7\x2a\x02\x56\xa9\x7a\x4c\x79\x46\x94\x8d\x64\xc2\x0b\xf3\x78\x92\xa5\x5e\x99\xdf\x4b\x55\x8c\xd3\xbe\x96\xf0\xc4\x96\x14\x7c\x07\x5c\x30\x7f\x59\x20\x12\xd2\x4c\x81\xfb\x58\xe5\x76\x4d\x17\x89\x59\x6b\xd8\x46\xa2\xf7\x2d\x72\x11\x99\xab\xb2\x8f\xb9\xc0\xa5\x06\x32\x17\xb8\x3f\xbe\x7b\xf7\x86\xfc\x64\x19\x62\xbb\x16\x4f\x29\x50\x97\x64\x28\x91\x83\xb6\xf5\xc5\x52\x77\x05\xdb\xde\x34\x96\x1b\xc6\xce\xb9\x55\x32\x66\x6d\x94\x0c\x8a\x79\x29\xd2\xde\x05\x45\x92\xa0\xba\x05\x34\x2c\xc2\x3a\x1f\xdf\x59\xa6\x37\x0b\x9a\x6e\x1f\xfa\xb6\x1d\x02\xff\xc8\x0e\xd9\x76\xf8\x2b\x59\x86\x6c\xa9\x0a\x86\xc2\x3c\x46\xdc\x02\x1e\xc1\x41\xaa\xa3\xae\xb8\x48\x31\xb5\x8a\x38\x41\x42\x28\xf6\xf4\xae\x7f\xd4\x46\xab\x80\x64\x09\xf2\x74\x77\xc0\xc4\x32\xb6\x57\x18\xd5\xc3\xe2\x71\x21\xab\xbf\x1d\xfa\x66\x7c\xec\xa6\x76\x96\xba\x29\x0b\x58\x8d\xdd\xa5\x59\x23\xda\xa0\xfc\x7f\xaf\x21\xba\x79\x43\xba\xbc\x5b\xb4\xff\x9d\x8c\xa3\x12\x52\x35\x41\x7d\x3a\x45\xe7\x8d\xf8\xb6\xd9\x01\xc8\x7c\x7c\x3f\x4e\x81\x06\xf4\xcf\x76\x12\x8a\x85\xde\x2e\x4f\xc2\xa8\xed\x49\x28\xe7\xf6\xef\x82\xfd\x67\x6c\xda\x92\xef\x4c\x95\x0c\xa0\x25\x5f\xef\x84\xb9\xcf\x70\xce\x92\xb3\xa7\xfe\x80\x0e\x72\x98\x4b\x66\xea\x60\xc1\xef\xde\xce\x21\xa6\x69\x47\xa4\x3b\x88\x93\x71\x84\x31\x7d\x35\x86\x1e\x9a\xa7\x43\xc2\xc4\x16\xb8\xa5\xb9\xfd\x4f\x9f\x6e\x37\x7d\xe9\x6d\xa3\x31\xe6\xcc\x8d\x46\x0c\x83\x87\x38\x79\x91\x5c\x43\x74\xe6\xa5\xb0\xd7\x1f\x32\x6f\xdc\x5f\x42\xbc\xe8\xb1\x0b\xbc\xff\xdd\x2d\x61\x11\x4e\xf0\x10\xc1\x55\xe4\xf9\xb0\xe7\xbe\x61\x17\xbb\xdb\x07\x8c\x77\x8f\x37\x27\x70\xd3\x07\xac\x9d\xcb\x9d\xe1\xf8\x3b\xf7\xb1\xbb\xe9\x6f\x36\x9a\x01\x1a\x94\xbb\xaf\xa2\x7e\x5b\x81\xc5\x48\xb3\x70\x5f\x2c\xd4\xb3\xbf\xe2\xc3\x1f\xf1\xf1\x4b\xbb\x70\xc2\x85\x0e\x8b\x40\x52\x6a\x77\xb6\x19\x98\x99\x35\x82\x65\xa1\x93\x02\xc8\x58\x13\x40\xc6\x66\x50\x40\x81\x08\x63\x9e\xf8\xdd\x6a\x9b\x72\x61\x7e\x86\x12\x73\xf2\xb8\xc8\x9c\x5c\x97\x0b\xac\x4f\x08\xa4\x64\xbf\xfd\xb1\xb6\xe0\xd7\x7d\x93\xd9\x59\x52\xb5\x62\xa4\x17\x7f\x3b\x98\x49\xe8\x6c\xda\xfc\x28\x7c\x80\x37\x69\x0f\x52\x47\x58\xfe\x64\x0e\xf1\xeb\xeb\x58\x1c\x8e\x73\x86\xb7\xec\x2b\x34\x29\x6b\x43\xba\xc1\x8f\x1e\xf5\xd0\x04\x0d\x67\x61\x84\x21\xd2\x48\x10\xce\xd2\x38\xb3\x8b\xa7\x30\xf5\x51\xb8\xc2\x09\xa2\x73\x1c\xc2\x78\xbd\x84\xc8\xbb\x8c\xe0\xa6\xdf\xef\x03\xe6\x1f\x34\xf4\x56\xab\xe8\x86\x91\x0b\xde\x59\xbc\x91\xab\x63\x6b\x4d\x50\x8f\xad\x6f\xf4\x5f\xf1\xff\x91\xfe\xcf\x43\xc6\x07\xfd\x57\xfc\xcd\x37\x6c\x25\xde\x84\x60\xf8\xc3\x89\x6c\x71\x11\x4f\xbf\xd3\x7f\x9c\xdc\x6e\x1e\xc4\xff\x39\xfe\x0e\x73\xb0\xf4\xbc\x3e\x78\xb8\xa3\x39\x26\x1a\x2b\x23\x93\x06\xde\x05\x9e\x12\x3a\x76\x52\xb1\xc2\xf4\x3b\x1b\x19\xa2\x8e\x8f\xa0\xea\xd3\x9e\xd7\xef\x9f\x68\x73\x2a\x98\x50\x11\x9d\xc3\x55\x03\xf4\x3c\xea\x3f\xd4\xef\x2b\xe7\x55\x09\x60\xb6\xca\x58\xdd\x22\x4e\x18\x3b\xd0\xba\x18\x36\x16\x27\xa4\x31\x50\xbb\x79\xf2\x70\x07\x88\xc4\x44\xe2\xf7\x35\x0a\x31\xff\x7b\xd3\x3f\x81\x17\x78\x3a\x89\x01\xdc\xb4\xa0\xd5\x9a\x9f\xee\x04\x1a\x7e\x95\xfc\x27\x75\x12\x64\x7f\x4b\xdf\x74\xf6\xf3\x94\xe0\x6b\xec\x61\xc8\x3d\x7a\x53\x93\xe0\x7b\x13\x75\xa2\x26\xb7\x1b\x90\x43\x67\x56\x3b\x8a\xba\xae\x32\xd4\x87\x93\x6f\xe1\xf0\xdd\xcd\x0a\x4e\x26\x13\xdc\xdf\x80\x68\xa2\xeb\xc9\x40\x3c\x51\xd6\x0e\xa4\xfd\xed\xc9\x8e\x95\x27\xf9\x05\x9e\x3e\x7a\xd4\xa3\x80\xb9\x7d\xfe\xf4\xe4\xd7\x3f\xdd\xe2\xcd\xf0\x4f\xb7\xd4\xe7\x1b\x91\xff\xf1\x36\xbf\x72\x17\x68\x20\x2c\xf8\x84\x7d\xea\x03\xf2\xcd\x06\xa4\x13\x53\x45\x67\xfa\xa2\x43\xea\x20\xd7\xcb\x39\xbe\x5d\x20\xe0\x4d\x27\x17\x18\xc0\xa9\x70\xa1\x93\x3e\x89\x43\x97\x70\x19\x04\xb0\xb0\xd7\xef\x83\x68\x72\xa1\xe7\xbd\x06\x5a\x95\x0c\xa0\xe5\xc4\x07\x32\x0f\x3c\x70\xcf\x69\x6a\x29\x57\xfa\x31\x7a\xcc\x83\x3e\xa3\x4c\x14\xc0\x87\x0f\x27\x13\x74\x81\x55\x6b\xea\x3b\x1e\x91\x03\x07\xbc\x0d\x45\x58\xfe\xea\x96\x80\xfc\x24\x16\x5e\xb7\x27\x68\xb3\x79\x50\xb0\xc1\xe9\x83\x0c\x22\xe8\x20\x10\x03\x11\x84\x93\xde\x8a\xfd\x02\x50\x51\x1f\x41\xb2\x4e\x0d\x3e\xd2\x41\x53\x01\x0a\x60\xe9\xc8\xa9\xff\xa5\xde\xc7\xbd\xb8\x77\xbb\x61\x9e\xd7\x80\x6c\xb5\x16\x10\xf7\x0d\x1b\x81\xef\xf3\xf0\xb7\x24\x8c\xe9\x38\x1b\x7a\x5a\x1f\xe8\xf8\x6d\xc2\x50\x5f\x09\x4b\x90\xe7\x5a\x59\x44\x75\xb0\xe1\x90\x29\xd2\x7b\xf1\x90\xf5\x98\x5f\x36\x6f\x19\x92\xef\xd8\xbc\x30\x99\x47\x7f\xd3\x07\x17\x53\x39\x1d\x79\xfa\xf4\x19\x69\xc8\x6e\x1e\x82\xdb\x0d\xf0\x26\xb7\x1b\x01\xd3\x70\x72\xbb\x79\x60\x3d\x64\x9e\x7e\xc8\xa4\x8f\x88\x4b\x83\x2e\xc8\xf6\xdb\x88\x22\x52\xc8\x84\x72\x5b\x45\x0e\x44\xf2\xc0\xe3\xb7\xc4\xb7\x7b\x8f\x1e\xf5\x92\x89\x27\xb6\xa8\x0f\x3c\x6d\x8f\xe4\xe3\x82\xbf\x64\x4b\x7e\xc0\xd6\x13\x4f\x6d\x16\xf0\x27\x51\x2f\x04\x6b\x10\x03\x0c\x20\x1b\x38\x30\x02\x29\xd0\x50\x40\x6d\x28\xec\x65\x8f\x1e\xf5\x82\x49\xda\xb3\xbc\x11\x6e\xdd\x80\x2d\xa9\xdf\x07\x89\xf2\xc2\xbe\x65\x47\x8c\x47\x50\x20\x0d\x7b\x92\xcd\x03\x39\x5e\x40\x28\x8b\xec\x70\x12\xf4\x81\xaf\xa2\x05\x98\x53\x6e\x7f\x03\xa3\x14\x3a\xc6\x27\xbe\xfe\x09\x61\x5c\xcc\x1d\x42\x6a\x0b\xd0\xe4\xdb\x5b\x7d\x81\x9e\x11\x72\x80\x86\xcf\x9f\x4e\xc5\x9c\x93\x49\xda\xbb\xa0\x4f\xc0\xaf\x22\xcd\x1c\x27\x73\x94\xe0\xc1\xcd\xaf\x94\x51\x91\x64\xe4\xe1\x64\x92\xb0\x1d\xbf\x15\xc0\x26\xe0\x45\x22\x2c\x83\x83\x19\xf8\x93\x5b\xe1\x92\x72\xc2\x3e\x60\x20\x79\xfe\x94\x01\x04\x5d\xb0\xa7\x53\x0d\x30\x96\x79\x5a\xb7\x46\x83\x44\xda\xab\xf5\x91\xb6\x6b\xcf\x9f\xf6\xfb\x60\x9d\x01\xb8\x4f\xfd\x77\x33\x10\x0d\xfb\xc2\x59\x3c\x34\x2f\x12\x24\x0f\xa3\x49\x3d\x44\x00\x0d\x8d\x43\x22\x7f\x7d\xfa\x64\x8d\x4d\x62\xf2\x23\x81\xc7\xaf\x2c\xc8\x86\x00\x7b\xf0\x27\xc2\xd3\xe8\x11\x4c\x9b\x5f\x37\xf4\x58\xeb\x57\x6c\x58\x97\x63\x25\x8c\x69\x0a\x83\x01\x91\x2d\xef\x55\x6d\xaf\xbf\x3d\xdf\xf9\xed\x9b\xd5\xe5\xdf\xec\x82\x1a\xd7\x65\xfb\xc9\xf2\x32\x8c\x61\x70\x1a\x04\x08\xa6\x54\x70\xf3\xe4\x9f\xa6\x30\x57\x60\x4a\xe2\x22\xdc\x58\x2f\x73\xa3\xc3\x44\x15\xbb\x61\x4e\x12\x56\x7b\x51\x89\x6b\x5f\x3e\xf4\xd9\x0c\x83\xde\xdf\x42\x25\x55\x61\x5a\x97\x5a\x25\xdd\x3b\xda\x2a\x1e\xba\x99\x9c\xe9\x59\xa1\x13\xb8\x9a\x97\xdf\x0b\x1e\xa8\xf8\x86\x1a\xb6\xa6\x5a\xf9\x2d\xaa\xcd\xdc\xd2\x88\xb3\x52\x53\x15\x9b\x3b\x10\x5b\x5a\xe4\x3f\x60\xf5\x1b\x28\x30\xe7\x2b\x6f\x82\x0a\xa3\xbe\xf9\x82\x66\xcb\x5b\xdd\x0c\x2e\xd7\x18\x13\xd6\x89\x17\xbc\x60\xb6\x14\xa0\x6a\x7d\xb2\xde\x81\x2b\x10\xb2\xac\x24\x45\x33\x7f\x85\x72\xc5\xa1\xbe\xc5\x01\xc4\x5e\x58\x8c\x91\xba\xdf\xc7\x1b\x94\xe0\xc4\x4f\xda\x64\xc6\xcf\x68\x6e\x59\x49\x38\xd9\x5d\xc5\x4e\x15\xaa\x50\x35\x78\x4b\x25\x61\xcb\xea\xbd\xe2\x3f\xb1\xc6\x66\x09\xf5\x6b\xe2\x45\xa5\x8b\x8e\xa9\x13\x36\xe0\x5d\x77\xa4\x66\x76\x09\x7d\x7b\x33\x47\xb5\x93\x2d\x66\xe6\xec\xfb\xb2\xbd\x62\x85\x0e\x59\xe2\x97\xd9\x61\x16\xb8\x1d\xc6\x73\x27\x89\x9d\x13\x73\xbf\x73\x1b\xf0\x19\xf6\x3c\xf1\xbd\x88\xc6\xcf\xfe\xfb\x6e\x3a\x59\xa2\x43\xd6\xf8\x25\xb7\x9d\x4e\x82\x40\x26\xb7\xe9\xb9\x1d\xb8\xfb\x5d\x37\x2e\xdf\x2d\x37\x5b\x64\x7f\xbb\x1f\x9b\x4d\x56\x76\x2f\x48\xb7\x80\x70\xd7\x9b\x59\x76\xc3\x37\xb3\xe4\x6d\xa5\x98\x97\x0e\x7a\x2c\x19\x4c\x61\xde\x97\xe6\x7a\xfb\x02\x11\xe3\x4b\xeb\xea\xe1\x47\xaa\x75\x8a\x78\x11\xb3\xfb\x22\xf7\xac\x5f\x1c\xbf\x59\x7d\xbf\xbf\xb0\xcb\x3d\x62\xd2\xe7\xbc\xf0\x9a\xfb\x44\x14\xb7\x53\xd2\xce\x75\x88\x17\xcf\xe3\x59\x22\xcd\x58\xa5\x05\x8e\x95\x08\x52\x2b\x95\x93\x2d\x84\x67\xbf\x45\xce\xa9\xb1\x25\xe7\x54\xa6\xba\xb2\x88\x0e\xe2\x9b\xe8\xad\xc2\xc1\xdc\xc3\xf0\xda\xbb\xd9\xa2\xd0\x72\x05\xf1\xe3\x34\x6b\xc0\xaa\x16\x6e\x4d\x05\xf5\xf4\xe6\xbc\x76\x1a\x2d\x2e\x26\xe4\x4c\x03\x03\x1d\x2e\x63\x4d\x85\x7f\xe2\x6e\x71\xe7\x8e\xf3\x16\xce\x09\x73\x81\x60\xe0\x5c\x85\x5e\xc6\x43\x20\x2b\xc6\x11\x59\x6a\x99\xc4\xc3\x4b\xe4\xc5\xc1\x50\x8e\x93\x4d\x4f\xd5\xde\x05\xba\x05\x69\x3d\x62\x35\x21\x39\xa8\x85\x44\xa5\x39\xf9\x3e\xa1\x85\x1c\xa7\xb4\xdc\xd9\x0c\xbb\x80\x92\xac\x56\x77\x08\x1f\x8e\x1e\xa8\x41\x1a\x25\x58\x0e\x27\xe4\x36\x29\x17\xb7\x93\x31\x4e\xdf\x3c\x77\xfe\xca\x70\x33\x75\x96\x5e\xec\xcd\xa1\x13\x27\x08\x2f\xc8\xd6\xe2\x85\x2c\x74\x32\x43\xc9\xd2\x11\xdb\xae\xea\x39\xe0\x44\xfd\x1d\xc6\xb4\x26\xbf\xd2\xd9\x0f\x9d\x1f\x12\xe4\x2c\x13\x04\x9d\x30\x9e\x25\x68\x49\x8b\xdc\x00\x07\x41\x2f\x70\x92\x35\x32\xcb\xf7\x0f\x2d\x8b\xaf\x5d\x64\xac\x16\xa4\x96\xa2\x7e\x62\xdb\xaa\x72\x7a\x51\x4f\x91\x29\x3f\x85\x64\x86\x38\x29\x8f\xb8\xa2\xa0\xbe\x4c\xd6\xf8\xae\xd0\xbd\x14\xb3\x2b\x96\x20\x92\xb3\x33\x42\x12\x41\x0f\xc5\x83\x28\x8c\x3f\x54\xae\x48\xf4\x28\xe2\x17\x5d\xec\x5d\x8a\x42\x55\x83\x51\x66\x14\x02\x7d\x4e\xd4\x2f\x46\xfb\xe0\x20\xe3\x22\xa0\x94\x4b\xee\xd9\xeb\x57\xe7\x3f\xbf\x78\xff\xf4\xf5\xd9\xf9\xfb\x17\xcf\x4e\xdf\xbe\x7a\xff\xf3\xdb\x17\x39\xca\xc9\xfa\xa6\x37\x48\x9c\x24\x2b\x2a\x4b\xc5\x09\x82\x33\x88\x10\xd7\x13\xed\x69\x81\xfa\xef\x2f\x23\xaf\xc6\x92\x1c\xe7\x05\x59\xbf\x33\x5f\x87\x01\x4c\xeb\x04\x4d\x35\x7a\xdd\x5d\xdd\xbc\xca\x01\x6b\x70\x71\xa5\xd5\xc0\x15\xe2\x35\xd0\xe9\x75\x79\x6b\xe4\x15\x3f\xe3\xad\x2e\xcc\xac\x02\xad\x69\xf0\xcb\xdd\xdd\x5b\x2d\x62\xc2\xdb\xd7\xa8\xb6\xa7\x39\xae\xae\x5c\xad\xe2\x60\x04\x93\x0d\xe3\x2b\xe1\xf2\xc6\x8a\x59\xf3\xab\x20\xcb\xa0\x72\xd6\xbc\x0d\xff\x6d\x61\x74\xbf\x34\xf7\xbd\x80\x5e\x84\x17\x03\x7f\x01\xfd\x0f\xf7\xca\xee\xf0\xfc\xed\x3f\xff\xf5\xdb\x9b\x34\x28\x8d\x5e\x69\x6d\x5a\xd0\x97\xad\x9b\x16\xc6\x2d\x4c\x0b\xf9\xb4\xad\x26\x3b\xbd\xdb\x9d\x69\x41\x8f\x82\x19\x71\x76\x49\xad\x23\x59\xe3\x15\xb9\x93\x55\x4d\x79\xec\xe1\x75\x5a\x96\x01\x25\xaf\xba\x2e\x8e\xeb\x2f\xf1\x68\x33\x9a\xa9\xba\x43\x36\x27\xdc\xba\x89\x26\x5a\xfa\x24\xb3\xe1\x7e\x0a\xe3\x80\x52\x95\x98\xa6\xcd\xdd\x4a\x3c\x29\x12\x33\x5e\x25\x01\x2f\xc5\x57\x9f\x03\xd7\x00\x22\xb2\xf2\x77\x10\xc0\x98\x9b\x9a\x51\x28\xb0\xcd\xec\x72\x95\x06\x1b\x96\xd5\x6d\xba\xa3\x55\x0b\x3a\x23\xf8\xfd\xfc\x69\xd3\xc5\x64\x64\x58\x9a\xbd\x83\x77\x44\xeb\x35\x68\xc7\x62\x7b\xac\xac\x5a\x03\x8b\x49\xae\xb7\x80\x3d\x5e\xd7\xdd\x38\xde\x34\x22\xa9\x20\x43\x51\x96\x31\x20\x6b\x7d\x97\x89\x60\xca\x1e\x1b\xd6\xea\x19\xd3\x0a\x6d\x93\xb4\x61\x04\x5c\xc6\x08\xb3\xf8\x05\xca\x30\xb0\x6e\x87\x74\xe6\xa9\x13\xa6\x4e\x0a\x31\x91\xaf\x30\x5a\x43\xe0\xa4\x89\xe3\x45\x91\x83\x14\x0f\xf2\xe3\xbb\x77\x6f\x1c\x2f\x0e\x9c\xf9\xdb\x37\x67\x0e\xfd\x8c\x3a\x7e\xb3\xc2\x63\x5c\x75\xe5\xe0\x05\x4a\xd6\xf3\x85\xf3\x2c\xbe\x4a\x6e\x9c\x59\x82\xa8\x8c\x76\x46\x69\xba\xe3\xcd\x61\x8c\x2d\x55\xc5\xe4\x0a\x5b\x54\x87\xae\xc7\x8d\x6e\x8d\x1b\xaf\x12\x51\x3e\x74\x2b\xec\xe6\xdd\x7c\x7e\xdc\x7e\x4d\x6f\x9e\xed\x74\x11\x9a\xed\x19\xa9\xd2\xbd\x34\x4b\x38\x23\xe2\x59\x22\x25\x06\x95\x6b\x2c\xcd\xdf\xd0\xc4\x72\x6c\xf4\x0e\xdc\x44\xfe\x69\xb5\x21\x37\xc3\x12\xcb\xc3\x4a\xcc\xec\x4e\xbb\xac\x22\x3e\x24\x03\xac\x82\x3c\x68\x0e\xf2\x6e\x74\xcd\x05\x6c\xe5\xbd\xe2\x76\x53\xe8\x21\x7f\x31\xb8\xf4\xd0\x7d\xe1\x79\x7f\x38\xff\x67\xf8\x8f\xef\x7f\x3b\xb3\xf3\xbc\xef\xdf\x7b\x68\xbe\x43\x84\x7f\xf2\xc7\x88\x4a\x28\x64\x05\xcc\xff\x86\xaf\xd4\x05\xee\xeb\x15\x66\x05\x0f\xe9\x9f\x22\xc5\x7b\x04\x7d\xea\x42\xdc\xe8\x33\xce\x66\x77\xd6\x8e\xde\x25\x8d\x66\xb0\x42\xc9\x4a\xff\xe0\x03\xbc\x91\xb1\xb3\xc0\x7d\x92\x26\x88\xe0\xf0\x13\xe6\xec\xc8\x02\x45\x64\xdb\x27\xf2\xaf\xa2\x20\xf6\x23\xd1\x33\xc1\x02\x17\x5c\xd8\x84\x04\x76\xf9\x6a\xcd\xb8\x78\xbf\xcb\xcb\x25\xaa\xa1\x09\x09\x09\xbe\x27\x3b\x97\x52\xbd\xbf\xe0\xff\x77\xcc\xd2\x6b\xe2\x96\x4d\x19\x77\xae\x2d\x4e\x76\x95\x0a\x43\x2f\xa0\xff\x27\x0b\x2b\xb5\xa8\x62\xc2\x74\xf7\x7c\xac\x16\x9c\xb0\x59\xa9\xcc\xa6\xb3\x28\xd4\x3a\x16\x4a\x49\xba\x8e\x6c\x24\xf4\x0b\x1c\x0f\x86\x0c\xf8\x43\xfd\xa8\x0e\x15\xf4\xb9\xf2\x61\x7c\x00\x34\x00\x12\xa4\x20\x74\x6f\xc8\x89\x78\xac\x95\x6d\x92\x73\x34\x2f\xcc\xcc\xe0\xcb\x24\xe6\x83\x94\x0c\x20\xe9\xbf\xed\x6b\x3e\xed\xca\xaf\xc5\x3f\xb9\xaa\x15\x77\x00\x0e\x5e\x94\xca\xda\x48\x85\x9f\x77\x0e\xad\x4c\xd7\x8d\xe1\x95\x9b\x5a\x2c\x4b\x13\x36\x8d\x13\x3d\x52\xdd\xbf\xa5\xe9\xfc\x7f\x60\x47\x8c\xae\x77\x74\x00\x5c\x0f\x85\xde\x80\xdb\xee\x6c\x1a\xaf\x75\xc8\xeb\x00\x50\xa0\xb8\x42\xe5\x9b\xa9\x96\x36\x06\xe3\xc3\x29\x70\xb9\xe8\x3d\x3e\x32\xca\x91\xb5\x32\xba\xb7\x63\xc5\xb8\x56\xf0\xb0\x30\x4b\x4f\xa1\xd4\x47\xe7\xdc\x80\x89\x29\xd5\xe6\x5a\xdc\xe8\x0e\xc9\x08\x59\x8d\xaf\xa5\x5d\x51\xc9\xc6\x02\xe5\x6e\x21\xbd\x63\x24\xf5\xf3\xd2\xbb\x1c\xda\x31\x51\x9a\xcd\x64\x2a\x38\x4e\xfd\x82\x92\xf7\x18\x8d\x20\x5d\x24\x11\x57\xb0\x64\xbd\x53\x77\x98\x7b\xe7\xee\x48\x3b\x53\x63\xb0\x3b\x9e\x5a\x71\x96\x1f\xcd\x0c\x0c\xea\xe1\x9f\x9b\xa9\x74\x44\xae\x2f\x72\x36\x69\x5f\x2b\xce\xf9\xb4\xf4\x70\x31\xa0\x12\x89\x42\x43\xfc\xce\x25\xd2\xad\xb8\x65\x57\x32\xde\x8b\x1b\xb8\x0c\x73\x64\x12\xfb\x0b\x2f\x9e\x53\xb8\x2d\xd7\x84\x9d\xa5\x5c\xcd\x13\x04\x7f\x5f\x87\x88\x09\x7a\xbc\xae\x20\x28\x02\xa4\x65\x4d\x34\xcf\x3b\xe9\x56\x11\x2e\x2a\xac\xb2\x5a\x7d\x0d\xcd\x6c\x6e\xb5\xfd\x4e\x16\xd5\x69\x61\xc3\x13\xc7\xb8\xc2\xd3\xd6\xb1\x04\xac\x5b\x91\x44\x6d\x6c\x3b\x1b\x74\x03\xdb\x4e\x05\x54\x64\x1d\xc5\xa6\xe8\x2a\x4f\xec\x98\x08\x6f\x82\x93\xe4\x7e\xd1\xe2\x21\xcd\xd1\xd0\xc4\x3d\xc2\x28\x20\x69\x14\x8d\x1c\x8d\x4a\xce\x07\x50\x3d\x77\x92\xbe\x4d\x3b\x3d\x7b\xd3\x9c\xe8\xaa\x30\x89\x83\x60\x3f\x5f\xa7\x94\x3d\x2b\x9a\x6d\xf6\xc6\xdd\xc2\xaa\x5c\xce\xd5\x64\x6e\x7e\xa3\x9c\xeb\x98\xd5\xf1\xce\x43\xab\xd8\x48\xde\xf4\x16\xb2\x57\x94\x1b\xef\x12\xb0\x5a\xb5\x3f\xb5\x10\xdb\x32\xd0\xb8\x62\x26\x79\x9f\xb3\xca\x91\x2c\xa3\x14\x19\xbf\x1a\x5e\x96\x5c\xec\xf8\xb2\x97\xe5\x51\xc9\xad\x20\xcc\x18\xf5\xae\x02\xe5\xa9\x52\x4a\xfd\x05\xb7\x69\xa5\xfa\x2d\xb8\xb5\x3b\x23\xf7\x35\x89\x7d\x31\xa9\xe7\x07\x2e\x2b\x03\xd6\x57\x63\xd5\x3c\x05\x77\x4f\xdc\x69\xc1\xf2\x2c\x71\x17\x0f\xbb\x27\xee\x4a\x04\x72\x57\x5e\x9a\x86\xf1\xdc\x05\xee\xb5\x87\x62\xf6\x97\x8f\x42\x1c\xfa\x34\x3b\x22\x5c\xae\xb0\xdd\x1d\xae\x65\x65\x4e\x76\x28\x46\xc7\x5c\x4e\x11\xbe\x07\x94\x50\xf3\x42\xd3\xe3\x1d\xa9\x17\x28\xb9\x0b\x76\x2c\x77\x81\xf5\x1c\x6c\x7f\x07\x34\xa7\xff\x6c\x11\x9d\x48\xa0\x3b\x36\x71\xb1\x29\xab\x62\xa1\xb1\x3b\x76\xb7\x83\x23\xb2\x37\x16\xbb\x57\x8d\xa3\x52\x58\xc2\x3e\x6f\xa8\x31\x78\xf0\x0f\xcc\xa8\xd9\x56\x08\x2e\x21\xb0\xbc\xe7\x2e\xc9\x2b\xed\xf2\xdf\x9d\xb8\xd6\xd4\xd1\x10\x58\x64\x55\x53\x5f\x21\xed\xdd\xb5\xd1\xde\xdd\xcf\x40\x7b\x53\x99\x12\x21\x6f\xce\xef\x84\xca\xee\x57\xf3\xd4\xa3\x83\x3c\x1d\x65\xcf\x4c\x84\xff\x2c\x54\xb4\x09\xde\x99\x3a\xc0\xd1\x41\x37\xe4\x56\xef\xa7\x4b\x72\x3b\xb2\xeb\x7f\x46\x7b\x64\x93\x3a\x23\xb7\xbb\x8d\xb9\xf3\x1a\x44\x94\x82\xbf\x63\x2a\xca\xfa\xfc\x83\x8c\x52\x74\x66\x0f\xbe\x7a\x3a\x7a\x6c\x21\xa3\xc7\x9f\x81\x8a\x7a\x51\xe8\xd1\x32\xcc\x09\x2d\x59\x0c\xdc\x39\x5a\xf9\x2e\x70\x17\x18\x53\x0b\x1b\x4d\x6f\xc4\xdc\x1e\x67\x2e\x70\xb1\x4f\x8b\x46\xe3\xe8\x0e\xe8\xed\xa8\x06\xbd\x1d\x5b\xe8\xed\xd8\x72\x34\xee\x13\xc1\x65\x0f\x32\x14\x77\xdc\x11\xc5\x1d\xdf\x11\xc5\xb5\x57\x3a\x1f\xed\x90\x6d\xea\x8a\xe2\x1e\xd7\xd0\x66\x1c\x75\xa4\xf9\x37\xf2\x7c\xd7\x3e\x49\x9d\xe8\x30\x76\x4b\x74\x18\x22\x4b\x43\xf7\xca\xec\xf1\x31\x3d\x0e\x99\x1b\x82\xb9\x7e\x7c\x45\xf7\x84\xdd\x54\x9c\xcf\xf5\xae\x91\x34\xea\x87\xe2\xa5\xbe\xdd\x74\x47\x40\x3e\xf4\xa2\xd5\xc2\x1b\x92\x36\xe6\xe9\x01\xf9\x8e\x02\x58\xa3\x27\xda\xa8\xac\x2b\xe6\x73\x5b\x31\x2b\x26\x74\x57\x4e\x8b\xf7\x55\x31\x31\xde\x59\xe5\xcc\x7e\x0a\xe3\xc0\x3e\xaf\x9a\xe4\x8d\x8e\x46\x99\xca\xaa\x89\xd3\xa1\xec\xd3\x6e\x3c\x96\x65\x5d\x5d\xa9\xd4\x15\xd5\x17\xce\xc3\x87\xda\x91\xca\x5b\xc8\x8b\x68\xe8\x61\x23\xd7\xc1\x7b\xc3\x89\xec\x59\x38\x91\xbd\xc6\x9c\x88\xd5\xc8\xa7\x24\x2a\x66\x5b\x9f\xda\xe3\x49\xec\x9a\xc9\x76\x57\x38\x1b\xf8\xa0\x9c\xb5\xb0\x1e\xcf\x51\xfe\x45\x01\x0a\x54\xcd\xac\xc0\xd4\x56\x70\xe4\x1b\x04\x4f\x35\x5c\x9e\x79\xf4\x46\x96\x37\x77\xb6\x40\xe3\xb8\xb6\x34\x9f\x94\x9c\x88\x9a\xc8\xd5\x84\xca\x90\x03\x65\x8a\x15\x77\x89\x80\xf9\x3b\x6b\x94\x7d\xdc\xfd\xde\xe4\x6f\xc1\x3b\xc0\x3d\xcb\x25\x3a\xca\x3d\xbf\xab\xb5\x7d\x7d\x68\x97\xd7\x0a\xb6\x73\x32\xa8\xb3\x35\xf9\xab\x7f\x94\x7d\x4c\x36\xa6\x89\x10\xc5\x43\x44\x1c\x9c\x38\x3c\x96\xa5\x89\x0f\x40\xed\x49\x5b\xf0\xc9\x78\xde\x74\xda\x64\xae\x64\xce\x22\x3f\x62\x27\xb8\x92\x7f\xbd\x0f\x0e\x3a\x13\x9e\xf6\x6a\x08\x4f\xbb\xf5\x23\x26\xb7\x7c\x38\x02\xe3\xea\xe8\x4a\xe9\x57\xce\xa2\x95\x59\x01\x79\xf2\x07\xf7\x2a\x9f\xa1\x64\x39\xe0\x29\xfc\x65\xaa\x93\x41\x98\x0e\xa8\x0b\xed\x80\x71\x3d\x61\x7c\x95\xf8\x9e\xf0\x30\x9e\x31\x9f\x75\xec\x85\x71\xaa\xbb\xaf\xdb\x2b\x17\x44\xc9\x35\x44\xbe\x97\x12\xac\x5a\x78\xe9\xd6\x2e\xec\x59\x5f\xf1\x2f\xed\xc8\x1e\xc6\x29\xf6\x62\x9f\x6b\x1d\xd3\xfb\xe2\xc0\x8e\xde\x5c\xfe\x32\x3b\xf8\x61\x6c\x77\x60\xa7\x8c\x26\x64\x66\x21\x32\x6b\x17\x28\xeb\xe3\x62\xbd\xf4\xe2\xf0\x5f\xf4\xed\x13\x1e\xe9\xc4\x83\x3a\x8b\xdd\xb7\xf3\x9a\x00\xa6\x3f\xe1\x71\x8f\x39\x81\x59\xd3\xe1\xef\x73\xde\xb6\xad\x3c\x91\x1f\xba\xa8\x3e\x8a\xd4\x5e\x91\x2b\x42\x59\x8c\xf3\x65\x67\x40\xae\x55\xde\x85\xb6\xa8\x63\x65\x94\x2e\xe9\x57\x34\xaa\xdf\xad\xb2\x7a\x97\x74\x2b\x1a\xe5\xbb\x2d\x06\x72\x03\xe8\xb2\xb2\x08\xb3\x10\xa5\x98\x61\xb1\x0b\xb2\x81\xad\xcd\x42\xfa\xb9\x4b\xed\x81\x16\x4b\x7b\x30\x55\x71\xfd\x99\xa3\x65\xd6\xe3\xe6\x86\xfe\x4c\xa0\x3c\x9b\x62\x51\x21\xa1\x69\xae\xa2\xf7\x6e\x3e\xc1\x4e\x69\x07\x5a\x2c\x17\xcb\xfc\xd3\xae\xc6\x59\x27\xb9\xc0\x4c\xb9\x59\x68\xde\xf6\x4d\x29\xd9\xa1\x71\x96\x69\x53\x6e\xcb\xcd\x87\x36\xd5\x3f\x67\x23\x05\x5c\xed\x04\xf1\x1d\xa0\xc5\x6c\x29\x92\x96\x60\xbe\xde\x83\x3c\x2b\xa2\x83\xeb\x10\x2f\x1c\xcf\xc9\x3e\xb7\x04\x78\xb7\x48\xfb\x56\x1c\x17\x67\x82\xbb\x6a\xed\x76\x2c\x32\x79\xe7\x57\x89\x23\x6a\x32\x02\xd7\xe1\x48\x5e\x80\xb0\xd5\x63\x50\xb2\xaa\x3f\xb1\x8e\x79\x1a\x45\xf9\x41\xf9\x93\xbd\x69\xc1\xe0\x3b\xd6\x01\xdd\xc7\x6e\x7e\x50\xe9\x7a\x5f\xdd\x7d\xf3\xcc\x22\x7b\x0d\x8b\x13\xda\x79\xb1\x02\x35\x7b\x83\x4c\x15\x99\x40\xbd\x38\xc1\x03\x96\xad\x82\xb3\x3e\xb4\x8a\xd2\x60\xe9\xd1\xe8\x3e\x6f\x15\x62\x2f\x62\x95\x59\x19\x7b\x35\xa7\xff\x43\xae\xe0\xc1\xe5\x4d\x0b\x7e\xc8\xca\x72\x7c\x79\x3e\x08\xc3\x98\x30\x39\x8f\x67\x09\x5a\x3e\x9e\x85\x30\x0a\x52\x88\xef\x0d\x43\xf4\xf6\xea\x45\x78\x1e\xfe\x78\x69\x67\x88\x96\x49\x40\x79\x81\x15\x44\xcb\x30\x4d\xc3\x24\xfe\x21\x41\x4b\x17\xb8\xef\x25\xc7\x8c\xbc\x20\x4c\x5c\x8a\x35\xb2\x5c\x44\x2c\x6a\x45\x28\xc7\x88\x8a\xd7\x2a\x4f\x46\xe0\x97\x26\xc9\x18\x1d\x32\xeb\x9c\x11\x07\x27\x81\x3c\x90\xf0\xcd\xd1\x2b\x41\xca\x44\x0b\xfa\x7b\x9f\xf4\x9b\x7a\x97\x11\x61\xeb\x2e\x76\xf7\xc0\x78\x6c\xc9\x41\x21\xa9\xa0\x4c\x9e\x2c\x92\x2c\x71\xcd\x64\xc9\x7d\x67\x0c\x57\x92\xba\x62\xac\x37\xe0\x49\xfb\xca\x63\xa0\xa5\x8c\xcf\x93\x6e\x10\x4e\x87\xc7\x28\x50\x03\x4f\xc6\x3a\xb9\x4f\x59\x21\x88\x10\x3d\x9b\x6c\x04\x9e\x3e\x01\xb8\xce\xc2\x4b\x07\xec\x9d\x1e\xfe\xd5\x28\x89\x36\xeb\x52\xc9\xad\xe5\x49\xb2\x57\x44\xfe\xe1\x53\x1d\x90\xab\x6b\xc0\xb2\xd2\x4b\x2d\xb2\xda\x17\xf7\x89\x50\x24\xcb\x88\xc9\x1f\x08\x54\x0d\x79\x5c\xbe\x7a\xa3\x05\xaa\x00\xf7\xc9\xe5\x3a\x8c\x82\xf3\xf5\x7c\x0e\x53\x61\xd1\x4a\x17\xc9\xf5\x19\x1d\xec\x97\x05\xe4\x36\xae\x33\x3e\x38\xfd\x9b\x5b\xaa\xb4\x9b\x65\x5f\x80\x70\x4f\xbb\x04\xf6\xc0\x98\x5c\xc4\x14\x88\xec\xe7\xde\x94\x65\x51\x10\x49\xda\x9c\x98\xbf\xcb\x99\xc5\x5c\xb6\xda\x57\xf0\xfa\x05\x4f\xcb\xf8\x73\x0a\x1d\x4f\x64\x0a\x10\xba\x0b\xdf\x8b\x22\x18\x38\xff\xf3\xe7\xdb\x5b\x0c\xd1\x72\xb3\xf9\x9f\x3f\xe7\x18\x04\xbd\xd7\x30\xfd\x39\x0e\x7f\x5f\xd3\x31\xf7\xc9\xf4\x4a\x1a\xd3\xf5\x90\x05\xe8\xb8\xd0\xaa\x79\x63\xfd\xfe\xb1\x0e\x5b\x99\x16\x65\x47\xa5\x61\x01\xee\x5f\xb6\x4e\x8a\xa2\xfe\xfb\x8b\xd3\x23\xf7\xbb\x28\x1a\xd3\x6f\x95\xc8\x24\xcf\xf1\x98\x53\x6e\x9c\xb7\x21\x6f\xd0\x2e\xf0\xb1\x3c\xce\x22\x5f\x53\xa7\x06\x72\x5a\x79\x22\x38\x99\x7f\x85\x1c\x15\x9a\x9f\xc2\x8b\x1d\xf8\x31\x4c\x71\x18\xcf\x05\xda\x02\x27\x41\x0e\x4d\x29\xe8\x78\xf1\x8d\x44\x46\xaa\x86\xae\x64\x2e\x2a\x73\xad\xd8\xd1\x80\x86\x7f\xb8\xfe\x22\x49\x52\xe8\xb0\x0b\xa2\x24\x1a\xb8\x66\x9d\xe7\x0e\x28\xe4\x79\xd7\xf4\x51\x95\x52\xba\x33\x0a\xf9\x25\x49\xe2\xe8\x88\x93\xc6\x91\xa0\x85\xb1\x58\x70\x6b\x6a\x28\x41\xb6\x25\x3d\x1c\x1d\x35\xa1\x87\xe7\x4d\xa8\xe1\x79\xb7\xb4\xf0\xf8\x6e\x48\x21\x27\x84\x12\x9e\x5b\x92\x42\x45\x08\x8f\x3b\xa4\x83\xc7\x5f\x9c\x0c\x4a\x8c\xcd\x10\xc2\x57\x06\x26\x77\x42\x0a\x4b\xf3\xb6\x17\xd2\x47\xc9\x4c\x53\x36\xf7\xc2\xa5\x3c\xb3\xf0\x40\x6b\x1c\x86\xde\x29\xc1\x54\x55\xe3\x3a\xa6\x9b\x5a\xc7\xff\x96\x74\xf3\x80\xd3\xcd\x1d\x41\x37\xe5\x26\xb7\xa6\x9b\x12\x64\xdb\xd2\xcd\x83\x06\x74\x53\xdf\xa7\xd6\xdf\x6c\x19\xdf\xc9\xdc\xa0\xed\x75\xb5\xed\x44\xe7\xe8\x8b\x13\x1d\xb9\xdd\x19\xa2\xf3\xc6\x40\x83\xbb\x24\x3a\xf5\x2a\x08\xb5\x12\x68\x9f\x92\x23\x13\x7b\x25\xc7\xb7\x13\x12\xa4\x0d\xd3\xa9\x68\xab\xf5\xfb\xbf\x5a\xbe\x3d\xf8\x2a\xe5\xdb\x1c\x56\xb4\xff\xa6\x1b\xee\xee\xf0\xab\x13\x74\x0f\x3b\xe4\xef\x8a\x42\x09\xff\x10\x73\xbf\x04\xd7\xa6\x23\x7a\x77\xb2\xae\x4e\x30\x3f\x83\xc0\x7b\x8f\x48\x26\x91\x7f\x35\x92\x39\x3a\xee\x40\x0c\x9e\xad\xf1\x1a\xc1\x2f\x24\x0d\x67\x10\xa4\xed\x17\xdd\x50\xce\x83\x3b\xa6\x9c\x5d\x49\xc6\x3a\xed\x3c\xe8\x90\x76\x1e\x7c\x3e\xda\xf9\x03\xcf\x5d\x1b\xa8\xdd\x04\xce\x4d\xb2\x76\x96\xde\x8d\xc3\x09\x18\x21\x9b\x0a\xaf\x09\x99\xbd\x5e\x84\xfe\x82\x36\x5b\x78\x57\xd0\xf1\x7c\x1f\xa6\xe9\x1f\x92\x72\x21\xcd\xed\x5e\x5c\xd6\x49\xef\x67\x90\x99\xef\x13\xe9\x3d\x30\x49\xef\x61\x07\x92\xb4\x49\x7a\x3f\xb3\x40\x6d\xc7\x93\x2d\x3f\xdc\x5a\xb4\xde\x6f\x28\x5a\xef\xdf\x3f\x9a\xa5\x10\xe2\x8b\xd0\xac\x06\x85\xfc\x6a\xc9\xdd\x95\x44\x09\xc3\x8f\xd5\x24\x89\x86\xd7\x36\xa5\x44\x25\x54\x48\xf4\xe7\xf4\x58\xb8\x8e\x17\xf5\x4b\x15\x0b\x61\x2c\x32\x74\xef\x81\xdd\xcc\x8c\xe8\x92\xc6\xec\x58\x83\x8b\xcc\x6c\xb9\x49\x7e\x65\x90\x9a\x92\x09\xec\x03\x57\x05\x35\x16\x1f\x23\xcd\xa7\x6d\x0f\xec\x01\x97\x02\x51\x2c\xb1\xd6\xae\x59\xda\x94\xd4\xb1\xc8\x81\x92\x95\x87\x92\x7b\x2a\x64\x9a\x45\xb2\x8e\x02\x07\x2f\xc2\xd4\xe1\x85\x7d\xfc\x24\x8e\xa1\xcf\xb2\xd7\x9b\xd8\xff\x5d\x29\xc4\xf3\xfe\x0c\xd4\x99\x43\x39\x35\xe8\xd5\x3c\x6c\x58\x73\xea\x97\x21\x4c\x51\x49\x0c\x3d\x80\x79\x7c\x5c\xf8\x43\x77\xa9\x1b\x1f\x2a\x12\xc1\x9c\x3d\x5c\x59\xee\x03\xb8\x97\x49\x70\xe3\xb2\x08\xf2\x28\xb9\x26\xf3\xe2\xff\xbe\x5b\x40\x01\x23\xa1\xb1\xb8\x0e\xa3\xc8\xb9\x84\x0e\x6d\x0a\x03\x02\xb3\x62\xf0\x0d\x19\x76\x35\x9b\x44\x00\xe3\x1b\x8a\x80\xf4\x9f\xa2\x29\xc4\x09\xbe\xdb\x69\x10\x30\xac\x56\x51\xc8\x1c\xd4\x9d\xd3\x6b\x0f\x41\xfb\x7c\x08\x71\x4c\x10\xfd\x87\xcc\xaa\x78\x1e\xf2\x8b\xab\xd0\x73\xd6\xf4\x3e\x73\x94\x67\x50\xea\x5c\x7a\x29\x0c\x9c\x24\x76\x5e\x78\x37\x10\x39\x87\x8e\x8f\x42\x0c\x51\xe8\x9d\xd0\x4a\x09\xc0\x61\xb3\xa4\x72\xf7\x12\xe2\x45\x12\xd0\x95\x75\x14\x33\xc9\x59\x19\x8a\xc2\x03\xdf\x43\x81\xab\x32\x53\xe9\xbe\xd7\x7a\x86\xaa\x5d\x20\x61\x98\x09\xf5\x51\x21\x1f\xd4\x9b\x8c\x73\x3e\x5a\x2c\xb4\x9e\x8e\xdf\xe8\x26\x73\x62\x0c\x09\x66\x47\x4f\x7d\xc0\xce\x92\x76\x86\x4c\x9f\x4d\xcb\xd4\xb8\x5f\x3a\x0d\x3f\xa9\xe2\x02\xe4\x27\x6a\x80\xb6\x49\x3c\x2b\xea\xea\x98\xec\xc1\xae\x5e\x23\xb1\x38\xc7\x86\xbd\x12\x82\x18\xd1\xee\x53\x65\x1f\x8c\x61\x7c\xc3\xa1\xaa\x82\x58\x8a\x9c\x26\xdb\x5c\xde\x55\x3a\xa1\x66\xb8\xe1\x36\x57\x17\x59\x59\x08\x56\xc2\x59\x9d\xde\x22\xbe\x62\x04\x5c\x5e\x91\x82\x79\xdd\xed\xe9\xbf\x59\x3d\x95\x43\x2a\x70\x45\xa1\xff\xc1\xcd\xc5\x2b\xef\x00\xe5\x45\x98\xac\x60\x9c\xcb\x37\x6a\xd9\xe7\xd3\x20\xd0\xe8\x4a\x11\x6c\x8b\x6c\x0d\x6f\x32\x6b\xaa\x02\xff\x91\x06\x70\xfd\x5b\x5b\x48\x41\x0b\x4d\x83\x2b\x4a\x7b\x64\xdc\x41\xe3\x04\x87\x3e\x7c\xac\xef\x80\xee\xf3\xce\x61\x63\x2e\xd6\xd6\x8f\xea\x80\x96\xb1\x90\x12\x9b\x08\x4d\x21\x44\x8b\x6d\x0d\xf9\x33\x80\x11\xc4\x9c\x6e\xed\xe5\x96\xac\x11\xaf\x83\x9c\x43\x3b\x27\x2e\x7a\xa0\xc0\x7e\xb1\x6f\xb4\xe5\x9b\xda\x28\x51\x26\x48\xf1\x05\x98\xdb\xcc\x68\x9e\x46\xc0\x0d\xe8\x35\x51\xe3\x70\x28\xd3\x20\x8a\x01\x2f\x06\xd1\x2a\x12\xc1\xbd\xab\x4a\xb2\x12\xe9\x77\x0b\x69\xe4\xab\xc4\xb8\x96\x6f\x20\xde\x32\x5d\x7a\xed\x25\x71\x5a\xdc\x6a\x41\xc5\x34\x5f\xdb\x6a\x87\x20\x3e\xf2\xe1\x0a\x3b\x5e\xec\x3c\x17\xa7\xe0\x7f\xfe\x9c\xca\xd2\xb9\xeb\x34\x8c\xe7\x39\x16\x04\x38\xe9\xda\x5f\x38\x5e\x4a\x59\x11\x67\x85\xe0\x2c\xfc\x08\x53\x5a\xd1\x69\x81\xf1\x8a\xf3\x26\xe9\xf0\x73\x81\x8a\x39\x50\xd7\x4e\x8e\x90\x85\x96\xac\x2a\xbb\x43\x13\x26\xa5\xe5\x15\x64\xc5\x57\x1e\x67\xeb\x0f\x98\x74\x68\x84\x40\xe8\x65\x60\xb5\x02\xb0\xc0\x7d\xec\x27\xcb\xa5\x17\x07\xa9\xa2\x3a\x4a\xea\xda\xa6\x22\xec\x53\xbd\x1e\x71\xc1\x55\x5d\xf6\x38\x03\x86\x1a\x95\x74\x9b\xc2\x21\x57\x0e\x97\x42\x83\x52\xe0\x39\xc4\x38\x8c\xe7\x84\x48\x20\x0c\x83\xc7\x9c\x6d\xee\x06\x32\x6f\xa1\x17\x50\xee\x9b\xd6\xc5\x6d\x02\x9a\x56\x79\x9a\x1b\x64\x9b\x6b\xa0\xe3\x90\x1c\xd0\x11\x60\xf4\x7e\x10\x84\x5e\x94\xcc\x73\x65\x6c\x94\xfb\xbe\x22\x5b\x03\x76\x43\x70\x66\x9c\xdc\x61\x09\x8d\x95\x7d\xe2\xa1\xd0\x73\x1b\x5e\x4e\xe0\x42\xc5\x60\x5b\xe5\x28\x29\x65\xbb\xcf\x82\x10\x6b\x04\xc7\xad\x53\xd9\x26\x77\x49\x23\x38\x93\x07\x5e\xee\x32\x3b\xfa\xb2\xa6\x82\x76\xa7\xf1\xcb\xf0\x82\x57\xe7\x2d\xbc\xfb\xbb\xbe\x4c\xec\x57\x49\x0e\x02\x16\xbe\xab\x06\x8e\xdd\xc1\x5d\x51\x83\x05\x9a\xd1\xf0\x14\x8d\x05\xe2\x15\x97\xd6\x97\xcb\x10\x0b\xb6\x67\xcf\xce\x5a\x78\x41\x50\xc5\x57\xb4\x48\x53\xd5\x10\x17\xb2\x91\x36\x3c\xe5\x97\x05\x29\x6c\xfb\x30\x6e\x7a\xd8\xef\xf2\xb2\x12\xe8\xa5\xc4\x85\x91\x96\x6e\x4c\xee\x48\x36\x08\xc7\x22\x3c\xef\x6b\x9c\x63\x2e\x14\x29\x4c\x9f\x86\x7a\xc9\x8f\xa9\xd6\x9d\xa6\x8a\x62\x5a\x3f\x53\x48\x29\x64\x72\x0b\x86\x12\x93\x2e\xe7\x76\x79\x8c\x34\x25\x58\x79\xd6\x96\x6b\x13\x35\xa0\xe4\x2f\xaa\x73\xef\x0a\x16\xc5\x9c\xd6\x80\xad\xef\xc5\xbe\x54\x04\x6f\xbf\x6a\x04\xa9\xcc\x78\xd7\x8b\x3e\xa3\xb3\x2e\x5b\x76\x8d\xcb\xa6\xa4\x30\xa1\xaa\xf7\x45\xb5\x23\x25\x01\x8d\xac\xd0\x36\xa7\x1e\x09\xd7\x1d\xeb\x59\x22\x14\x88\x5c\xe0\x2e\xd7\xe4\x44\xff\xbe\x86\x54\x5d\x44\x1f\xcd\xb1\x96\x10\x82\xc5\x46\x52\x7d\x29\x8d\x86\xd4\x94\x48\xc2\xc8\xe6\xc6\xe4\xd0\xb9\x9a\xb1\xb2\xc0\x86\x23\x62\xe7\xd2\x9c\xe7\x46\xde\x95\x52\xf3\x4d\xd7\x0f\x98\x08\xba\x4b\xcd\x28\x30\xe0\xfa\x5e\x6c\x71\xa1\xe3\xd9\x29\x54\x10\x67\x37\xe5\x17\xcb\xc3\x22\x5b\x04\x6d\xca\x37\x43\xf8\x11\xc3\x38\xe8\xdd\x62\x6f\xce\xe6\xe1\x82\x94\xea\xcc\xcf\x17\xc9\xf5\x1b\x03\xb9\x4f\x1e\x8e\x00\x27\x6d\x27\xb7\xa6\x05\xf0\x44\xc5\x62\x02\xdc\xbf\x45\x10\xaf\x51\xec\xc0\x21\x82\xd4\xce\xd0\x7b\x2c\x0c\x7f\x8f\xe7\x00\xf7\x37\x40\x18\xf8\xac\xdf\x3d\x84\xc3\x59\x18\x07\xdf\xdf\xf4\xb8\x7d\x92\x7c\xe1\x05\x81\xd1\x18\xc4\xfd\xdb\x87\x3d\x3c\x9c\x43\xdc\x83\xfd\x4f\x9f\x2e\xa6\xfd\x61\x18\xfb\xd1\x3a\x80\x69\x2f\xee\x3f\x7a\x14\x0f\xc3\xf4\x15\xbc\x7e\xf4\xa8\x87\x87\xab\x75\xba\x60\x11\xa2\x3d\x08\xe2\x3e\xc0\xc3\x2b\x2f\x0a\x03\x02\x91\x7e\x7f\x03\x98\x94\x9c\xeb\xbe\xac\xf7\x1e\xe6\x75\xc4\x8a\xbb\xdd\x6c\x3a\x89\x81\xcd\x45\xbe\x02\xf7\xc9\x3c\x0a\x97\x4b\x88\xd4\xc7\x66\x38\x2c\x01\x25\xc5\x05\x80\x80\x07\x22\x90\x82\x10\x24\x60\x0d\x7c\x10\x80\x25\x58\x81\x19\xb8\x04\x0b\x70\x05\x6e\xc0\x1c\xbc\x06\xef\xc1\x1b\x70\x0d\x9e\x81\x0f\xe0\x23\xf8\x0d\x9c\x81\x57\xe0\x1c\xfc\x0b\xbc\x04\x4f\x1f\x88\x1e\x9d\x77\x0c\x24\x00\xf5\x6f\xe3\x47\x8f\x8a\x62\x6d\x31\xb8\x85\xf1\x7a\x09\x11\x39\x3b\x27\xf1\x50\xfd\x00\x7e\x12\xcf\xc2\xf9\x5a\xbc\xd1\x7f\x82\x6b\x14\x62\xfe\x5c\xfc\x09\x58\xa0\x6e\x3c\x0c\xe3\x10\x87\x34\xee\x19\x7d\x67\xfc\x1a\xfa\x5e\x14\xf5\x50\xff\x84\x45\xef\x6e\xfa\x1b\x39\xd9\x17\x62\xb2\xc0\x63\x60\x88\x26\xb7\x9b\x07\x1c\x25\xf9\xdc\x3f\xc0\x9b\xb4\x87\xfa\xc3\x59\x82\x9e\x79\xfe\xa2\x67\xc4\x12\x47\x17\x70\x3a\x41\x17\x70\x4a\x76\x2c\xd2\x96\x31\x79\xf8\x50\xff\x09\x22\x63\x21\xf4\xad\xb1\xb2\x1e\xcf\x8b\x15\xc6\x4e\xf4\xe9\x53\xa4\xcf\x9f\xa0\x50\x24\xd7\x3b\x79\xb8\xd3\x07\xd1\x24\x1e\xa6\x51\xe8\xc3\x5e\x7f\x88\xe0\x15\x44\x29\xfb\x2b\x58\xfb\x50\x9b\x20\xdd\x05\xbe\x1a\xc4\x51\xf5\xd3\xa7\x78\xd3\x07\x51\x1f\x78\x8f\x1e\x31\x80\x3c\x9c\x4c\x8c\xf1\xe8\x70\x74\x36\xe6\xf3\xef\xa2\x3c\x54\x3d\x01\x55\x60\xbc\xe4\x81\xd2\x7d\xc0\xfe\x9d\xe4\x47\x28\x46\x8c\x88\x2e\x6f\x1d\x91\x7f\x37\x5d\xc5\x6a\x9f\x96\xc7\x6a\xff\xed\x6f\xaf\xff\xfe\xcf\xf5\x65\x41\xf5\x55\x6f\x15\xaa\x5b\x0b\x41\x2f\x48\xe2\xe8\x86\xdd\x2d\x2c\xc6\x1a\x7e\x84\xfe\x1a\x73\x52\xef\x53\xe9\x74\x09\xd3\xd4\x63\x57\x11\xd9\x66\x7a\xdd\xcb\xf6\x31\xbc\x3e\x15\x37\x9e\xd0\xd7\x09\x31\xcc\x9b\xb1\x3a\xa0\xaa\xb1\xf8\xe3\x49\xe0\xd3\x7a\x71\xda\x3d\xa4\x82\xbb\x65\xe4\xf7\x13\x6f\x8d\x93\x59\x18\x45\x22\x8b\x0e\x75\x05\x41\xe5\xb1\xdf\x76\xa1\x91\xde\xe8\x87\x2c\xf0\x2c\x63\x70\x3c\xe2\x55\xca\x0d\xa9\x40\xe4\xee\x61\xf3\x54\x33\xd2\x67\x5c\x38\xbd\x8c\x11\x48\x97\x2c\x5c\x35\x23\x9e\x81\x5e\x73\x56\xbb\x10\xb5\x52\x68\x39\x98\xa9\xa8\x08\xc2\xeb\xcd\x89\x1a\x60\x99\x4a\x94\x19\xc6\x2c\x97\x41\xb7\xac\xb1\x9a\x59\x43\xf1\xa5\xbe\x50\xc0\xad\xbd\x4d\x1d\xfb\x8c\x24\xe0\x32\x31\xb2\x66\x55\x0e\x20\xf6\x42\x2a\xfa\xbb\xc1\x9a\x59\x30\xa1\x23\x81\xeb\xcc\x92\x75\x1c\x9c\x6c\xe5\xfb\xc7\x17\x27\x70\x56\xa8\x23\xc8\xef\x19\x37\x98\x0e\xd6\x2b\x72\xed\x29\x23\xc7\xe8\x40\x0d\xc5\xb0\x5f\x5f\x47\x66\x07\x34\xf7\x01\x61\x4f\xc4\xbc\xba\x7e\x33\xb0\x99\xc2\x24\xed\x7a\x1f\x5c\xb8\x3f\x2a\x69\xbf\x8d\x72\x5a\x97\x20\x52\x8c\x12\x9a\x2e\x46\x1e\x1e\xa9\x55\x65\x1e\xd3\xe9\xc3\x42\xfd\x53\xc3\xfc\x84\x74\xea\xdf\x0b\xb1\x7f\xdb\x89\x97\xd9\x08\x4f\x63\x0d\x61\xbc\x88\x50\xc3\x1b\xbe\x1a\x5e\x94\x3f\x4c\x1d\xc6\xfd\x0e\x74\x87\xb9\x95\x17\xa2\xa1\xf3\x26\x82\x5e\x0a\x85\x6b\xb8\x13\x84\xb3\x19\x44\x30\xc6\x8e\x9f\x2c\x2f\x45\xd3\x64\x26\xfd\xec\xa9\x41\x9b\xf9\xbb\x51\xa5\x9d\x1c\x3a\x75\x70\xe2\xc0\x20\xc4\x86\xfb\xb9\x7c\x3d\xec\xac\x30\x80\x45\xf0\xc9\xba\x5d\x35\x71\x65\xfd\xaa\xcf\xc7\xde\x5d\x9f\x8f\x67\x64\x82\xdd\x1d\x8a\xbd\xcf\x75\x28\xde\x2d\x20\x82\xce\xb5\x97\x52\x6c\x24\x8b\x70\x52\xef\x8a\x60\xe4\x4d\xb2\x46\x26\x5a\xda\xc9\xb5\x8d\x5a\x6b\xb5\xef\x8a\xe8\x78\x6b\x97\x0e\x4d\xcf\xa1\xdc\x0f\x28\xd0\x47\xb9\xd1\x52\x95\x71\x8d\x74\x72\xa2\xa7\x69\xb0\x4f\xaa\xa1\x2f\x76\xa7\xa7\xb3\xca\xdb\x20\x9b\xd1\xa9\xa2\x42\x4c\xfd\x4b\x9b\xb2\x42\xcd\xef\xec\x3d\x6d\xe7\x09\x4b\x55\x64\x2a\xa6\xbe\xd7\x44\x08\xd0\xa8\x20\x25\x04\x5a\x61\x6a\xa3\x97\xac\xff\x4f\xbd\xaa\x22\xda\x88\x22\x57\x78\x49\x8e\xb3\x52\x8e\xc0\xb6\x4e\x4e\xb4\x64\xd5\x4f\xcd\x8b\xa6\x0d\x2a\x37\xb3\x81\x30\x85\xc4\xe0\xda\x43\xdc\x08\xa2\x52\xba\xb1\xbd\xcc\x5a\x40\x8e\x2c\x76\x0c\xc3\x9d\xc4\x3d\x87\x58\xbb\x0f\xb1\xc8\xaf\x36\xda\xd1\xa9\xf0\xe7\xd0\x6e\xeb\x96\x0e\xbb\xa9\xa3\x26\x1a\xb7\xb3\x9d\x17\xb9\x8c\xe4\xe1\xa3\x68\xc7\x0e\x3f\x65\x76\x57\xca\x86\x04\xbf\x73\xe3\x79\x3d\xca\xff\xcb\x02\xc6\xd4\xc1\x99\x89\x10\x8c\xfd\x79\x5e\xb1\x60\xe6\x39\x4d\x9d\x15\x99\x62\xc8\xf1\xa2\x88\xf2\x37\xc2\xb6\xbe\x4a\xa2\xd0\xbf\x31\x7c\x0d\xfc\x35\x22\x9c\x52\x74\x43\xae\x16\xe6\xd7\x68\x0e\x36\x74\x4e\x11\xa4\x3d\xa7\x6b\xfe\xc7\xb5\x17\x53\x6f\xc3\x94\xec\x02\x2e\x02\x7f\x67\xbc\xd2\x5d\x5a\xe7\x0b\x7c\xa6\x76\x88\x1c\x1a\xcf\x21\x4a\x68\x11\x81\x02\x37\xaa\x5d\xc3\x8d\x8a\x51\xc9\xbc\xc5\xa1\x60\x8b\x09\x0a\x6b\x90\xcb\xe5\x56\x2a\xcc\x2e\x58\xea\x24\xd7\xc6\xc8\xc0\x2b\x01\xd5\x51\xf9\x3b\xd4\x59\x05\x64\x55\xff\x8d\x76\x78\x94\xb7\x79\x59\x9b\x8d\xaa\xca\x0c\xed\x14\xfb\x71\x50\x25\x02\xf3\x9a\x95\xa8\x92\xd5\x06\x68\x44\x97\xc8\xf9\xee\xe3\x3f\xdd\x4a\x8d\xc2\xe6\xf1\x5f\x1e\xff\xe9\x36\xf0\x37\x8f\x95\xf2\xdd\x42\xbd\x75\x0d\x84\x16\xa8\xc4\xd5\x05\xba\x3e\x61\x5a\x4f\x09\xc0\x54\xda\x42\x4c\x11\x3c\xda\xb8\xc8\x51\xaa\x90\xef\xa3\xb7\xfa\xba\x9b\x88\xd5\x4e\xc1\x29\x83\xcf\x3e\x2b\x40\x5f\x09\x28\x54\xc0\xb3\xd2\xd1\xa2\x14\xd6\x46\xe8\xda\x67\x07\xf7\x5f\x24\x8c\x75\xab\x94\x05\xc6\x1a\x5c\xdb\xc2\xf3\x8d\xb6\xd2\x6e\x41\xca\x88\x68\x98\xf2\x80\xb2\x9a\xf1\x7e\x45\x82\x4f\xe5\x06\x15\xb3\xc4\xd5\xe1\x88\x07\x39\x56\xb8\xed\x7e\x4b\xb1\x3d\x23\x58\x87\xf1\x2c\x69\x77\xa1\x1d\xc9\x24\x4f\x1d\x08\xd6\xb5\x5c\x18\xc9\x7f\x67\x28\x49\xd3\x81\x8a\xd5\xf2\x93\xe5\x72\x1d\x8b\x80\x86\x38\xc1\x4e\xba\x5e\xad\x12\x84\x61\xd0\xde\xed\xbb\xb2\x08\xc4\x71\x17\xe2\x79\x5d\xcf\xf6\xf2\x25\x87\xa9\xb9\x6a\x27\x59\xe3\x34\x0c\xa0\x93\xcc\x28\x5f\xb6\x42\xe1\xd2\x43\x37\x0e\x39\xf0\x3e\xd5\x5e\x0d\x9d\x7f\x0a\x1e\x2e\x89\xa3\x1b\x1a\x71\x72\x19\x41\xc6\x6d\x45\xd0\xc7\x2a\x7c\x97\x29\xc6\x78\x68\x88\x17\x07\xb6\xc0\x8f\x74\xd8\x31\xa0\xab\xb3\x7f\x95\x86\xfd\x8e\x34\xbf\x90\x30\x7d\xe9\xc5\xde\x1c\x06\xdf\xdf\x9c\xbd\x7d\xda\x34\xf5\xba\x53\xed\xa9\xed\xaf\x53\x9c\x2c\x07\x08\x66\x48\xa9\x3c\x5f\x9a\x98\x56\x87\x66\xd5\x0a\x0e\x1c\x01\x2e\xb1\x1b\x4c\x22\xe7\x0a\xad\x9e\xd5\x92\x63\xe4\x84\xb4\x90\x95\x2c\xe3\x28\x8b\x40\x61\x1a\xeb\x15\xdb\x2c\x9d\x12\xb2\xd6\x1f\x1e\x25\x2c\x3d\x0e\x9e\x18\x2e\x07\x4f\x34\x0f\x85\x27\x79\xff\x85\x27\x79\x67\x84\x27\x59\xaf\x87\x27\x05\x7e\x12\xd2\x6a\xa3\x47\x2e\xfb\x5a\x5c\xb1\x7e\xf1\x31\xc8\xc5\xe6\xb5\x2e\x8a\x27\x53\x9f\x98\xdc\x0d\xb5\xa3\xca\x3e\x1b\xcf\xcc\xc4\xba\x99\xa7\xe7\xf9\x67\x46\x00\xb8\x78\x65\xc9\x63\x64\x7b\x75\x5e\xf0\x22\xd7\xa7\x86\x05\xca\x35\x4a\x3d\xd3\xee\x47\xe5\xc9\x23\x8d\x4d\x25\x42\x7a\x59\x38\xa3\x63\x17\x20\xac\xce\x5e\xd2\xc1\x6b\x4c\x67\xf3\x3c\xa6\x5e\x07\xfa\x74\xb4\x69\x67\x9d\x8a\x34\x4f\xb2\x02\xd1\x48\xf7\xa6\xaa\xa0\x5a\x59\xe1\x6d\x74\x60\xce\xd7\x32\x1b\x2e\xcd\x71\x2f\x29\xbb\x30\x97\x3f\xa6\x49\x2c\x04\xa8\x2c\xc7\x53\x21\xe8\x55\xcb\x4a\x76\xbe\xf2\xa0\x8c\x21\x6a\xcb\x17\xe9\xc5\x21\x9e\x3f\xa5\x84\xce\x8b\x93\xf8\x66\x99\xac\x5b\x73\xad\x3a\xf5\x99\x85\x68\xc9\xcc\x0d\x52\x6d\xc6\x28\x8e\x30\x5c\xd3\xdc\xfd\x45\x0a\x05\xe6\x05\x93\x51\x40\x7c\xd7\x36\x12\xae\x96\xc6\xa0\x4d\xe7\xc5\x4a\x03\x2a\x68\xab\x90\x9d\xfa\xc8\x58\xae\x5a\x30\xb1\xf1\x48\x3b\x65\x7c\xa8\xba\xb8\x48\xfe\x7b\x4a\xbf\xb1\x2f\xa9\x28\xc8\xaf\x3c\xfb\x5e\x43\xc0\x73\xcc\x68\x0d\xf8\x23\x11\x54\x34\xd0\x11\x2e\x87\x69\xc0\x7d\xa2\x1c\x28\x9e\x28\xed\xc7\x85\x2a\xca\xb9\xcf\xab\x4d\x14\xd2\x4c\xfb\xea\xf7\x01\x11\x30\x8a\xf8\xd0\x36\xbe\xfa\x8d\x53\x15\x14\xd0\x91\x7a\x36\x43\xab\xdc\x45\x29\x82\xc1\x92\x35\xe6\xc8\xb2\xe2\x8c\x50\x98\x23\x51\xd6\xd7\xca\x7a\xb5\xb3\x1a\x76\x6c\x34\x2c\x95\x6c\x94\xe2\xf5\x8c\xb2\x94\xce\x5b\xce\x52\x76\xae\xe2\x14\x2b\xfb\x4c\xe6\x45\x43\xa9\x1c\xa6\xce\x55\x08\xaf\x85\xdc\xe1\x7b\x44\x64\x0e\x31\x79\xbe\x64\x58\xe1\xe0\x05\x4a\xd6\xf3\x85\x11\xc9\x95\x85\x89\x13\xc6\xcc\x3c\xf9\xd3\xfa\x12\xa2\x18\x62\x98\x3a\x7e\xb4\x4e\x89\x70\x73\x67\xf0\xfa\x21\x49\x70\x47\x98\x50\x06\x31\x77\xab\xa8\xac\x0f\x47\xe9\x63\x1f\x05\xa9\x8a\x38\xb2\x05\x14\x55\x06\x22\xf1\xa9\xbd\x80\x1e\x8a\x9d\x65\x82\x88\x84\x98\xac\xb1\xc3\x84\xa8\x32\x46\xa9\x33\x6b\x68\x7d\x63\x68\x45\x2c\x2c\x41\x38\x33\xfa\x43\x5a\xf0\x5a\x0a\x65\x63\xb0\x5b\xe9\x63\x5e\xa5\x58\xce\x69\xa8\xb2\x34\xb6\xd2\x13\x7d\xe6\x02\x77\x16\x0b\xef\x72\x59\x57\x87\x79\x6c\x33\xdf\x71\x2f\x0e\x94\xaf\xf6\x1a\x85\xba\xbb\xba\x74\x42\x37\x8a\xee\x30\x0e\x3f\x85\x78\xc0\x90\x86\x15\xe1\x11\x95\x7b\xa4\xa3\x07\x35\xad\x23\x19\xe9\x96\xd2\xf4\x50\xdb\x7b\x7c\x9b\x7e\xde\x11\xc4\xce\xdb\x49\x4f\xba\x7a\x53\x1f\x73\x18\x00\x94\x7d\xe0\x65\x1f\x44\xd9\x07\x69\xf6\x41\x98\x7d\x90\x64\x1f\xac\xb3\x0f\xfc\xec\x83\x20\xfb\x60\xc9\x1f\x84\x31\xf5\xfc\xe4\x92\x60\xcf\x45\x90\xd6\xce\x4f\xd0\x8d\x16\x2c\xd9\x07\x2b\xf1\x3d\xdb\x13\x30\xcb\xfc\xbe\xcc\xfc\x5e\x64\x7e\x5f\x65\x7e\xdf\x64\x7e\xcf\x33\xbf\x5f\x67\x7e\xbf\xcf\xfc\x7e\x33\xa1\xb5\x98\x1c\xe6\x2b\x9f\x3a\x58\xf8\xa3\xde\x52\x47\x54\xb4\xf6\x71\x82\x32\x6e\xd7\x0f\xd2\xf5\x0a\xa2\xde\x70\x38\xf4\xd0\x9c\xc6\x6d\xa6\x7d\xf0\xae\x47\xb8\x6b\x3d\xa8\xe0\x1a\x90\x27\xea\x8d\x2e\xf0\x3f\xcb\xbc\xcb\xc9\xf7\x1f\x32\x0d\xa4\x62\xe1\xa3\xbd\xd7\x73\x17\xfc\x56\xd2\xe7\xb9\x0b\xce\x32\xaf\x75\xcd\xc4\x2b\x6b\xa7\x9a\x16\xe1\xbc\xb8\x6f\xad\xd5\xbf\x32\xad\xb2\x9a\x28\xf0\x92\x37\xf0\xa8\xc3\x30\xe8\xa1\x09\x37\x84\xf7\xc3\xb8\x17\x4f\xe8\xcb\xef\xec\x3e\xc4\x04\xf2\xdc\x71\xd8\x03\x9a\x2f\xfa\xc3\x1d\xd3\x03\xfd\xe1\x8e\xf2\x3a\x7f\xb8\xb3\xe9\x9f\xc4\x17\x68\x3a\xf1\xe4\x9c\x08\x5e\xba\xe0\x29\x9f\x08\xf9\xdf\x21\x73\xe0\x3a\x7b\xfb\x94\xcd\x76\x49\x6b\x5c\x6d\x44\x8a\x80\x5e\xff\x96\xb6\xf2\xd0\x3c\x1d\x8a\x87\xdf\xe5\x1f\x99\xf8\x70\x42\x1b\x08\xdf\x53\xf3\xdd\x46\x88\xbc\x99\xae\xd9\xc3\xef\xf2\x8f\x1a\x75\xcd\x1f\x9b\x5d\xb3\x87\x8f\x1e\xe5\x9f\x65\xbe\xb7\xc2\x82\x75\x95\xd9\x4d\xba\x5b\x43\x02\xce\xec\x9b\x5e\x7f\xc3\xfb\xe6\xd1\x16\xf1\x70\x85\xe0\x15\x8c\xf1\x53\x76\xb6\x7a\xc2\xd1\xfc\xe1\x64\x02\x87\x8c\xfc\x0e\x99\x5f\x89\x70\x72\x9f\x90\x37\x81\x87\x3d\xfe\x9c\x41\x85\x22\xcb\x90\x5c\xdf\xbd\xfe\x09\xd9\x24\xd3\xae\xc7\xce\x29\x21\xa1\xf1\x04\xb3\xaf\xd7\x71\xf8\xbb\x8c\x36\xe9\x0f\x71\x72\x8a\x90\x77\xd3\xeb\x0f\x67\x61\x84\x21\xea\xc1\xc9\xb7\x0f\x69\xe1\xb6\x18\xfa\x78\xb0\x42\xc9\xc7\x1b\xe6\x0d\xbe\x18\xcc\x3d\x0c\xaf\x69\x68\x0f\x86\x68\x49\xb1\x3d\x9e\xcb\xa7\x53\x15\x34\x02\x87\x3f\x85\x71\xd0\xef\xd3\x62\xd1\x3d\x3a\x89\xc9\xb7\x70\x48\x86\x1c\x46\x89\xef\x45\xf0\x2c\x59\xae\x3c\x04\x7b\x98\x3e\xec\xf7\x1f\xc4\x93\x8b\x5b\x76\x53\xfc\xc5\xdd\x4c\x87\xec\x5e\xea\xc5\x8c\xfe\xa3\x49\x9c\x89\x92\x81\x43\x45\x3c\xfa\x0f\xd0\xa7\x4f\x3d\x34\x61\xdf\xeb\x6f\x36\x20\x9e\x5c\x20\xad\x37\xd6\x9d\x67\xe9\x2e\x43\x6f\xfa\x0f\xbc\x4f\x9f\x7a\x9e\xec\x33\xf3\x9a\x76\xec\xe9\x1d\xb3\x83\x23\x68\xdd\x24\x66\xbf\xd5\x54\x26\x88\x3d\xc9\x74\x34\xf1\x36\x86\xe1\xd0\xb2\x61\x6a\x87\xee\x1e\x9a\xe7\x05\xb0\x3c\x6f\x09\xc9\xf3\x32\x38\x9e\x17\x41\x91\x93\xf6\x0c\x10\xcf\x6d\x20\x3c\x97\x00\x54\x96\xc2\x6e\x60\x08\x8a\xc1\x24\x87\xb2\x43\x4b\xbe\x6e\x07\x34\xad\xf7\x42\xd8\x99\x43\x58\x40\xa8\xee\x32\x13\x8a\xf2\x43\x0b\x30\xd5\x3b\x6f\xc3\x48\x90\x20\x57\x2c\x04\x05\x4d\xe0\x90\xc9\x11\x6c\x19\x20\x7a\x90\x5e\x87\xd8\x5f\xf4\x10\xad\x05\xdf\xbf\xa5\x45\xab\xb5\x5b\xfd\x84\x3e\xc8\x5e\xe5\x27\x7a\xb3\x73\x4b\xa3\x73\xa3\x89\xba\x4e\x73\x2d\xb5\x57\x7c\x26\xde\x24\x9a\x20\x16\xfb\x23\x98\x53\xf7\xe1\x04\xdf\xac\x60\x32\x73\xbc\x47\x8f\x7a\x9e\x78\xcd\xb6\x19\xf0\x5f\x13\x0f\x34\x5c\x04\x21\xc8\xc6\x99\xe7\x04\x54\xed\xaa\xd7\x1f\xb2\x34\x41\x8f\x1e\xf5\x22\xbe\x8b\xde\x26\x43\x28\x2e\x22\xb9\x79\x66\x6f\x12\x65\xfb\xfd\x07\x97\x08\x7a\x1f\x1e\xd4\x00\x9b\x9c\x14\x3f\x42\x8d\xe6\x24\x8e\x5d\x76\x4a\xa2\xaf\xd2\x19\xd5\xdb\x25\x39\x3f\x85\x9f\x8d\xa6\xa8\xa1\x75\x76\x96\x5a\x8f\xda\x44\x37\xe4\xdd\x05\xdb\xda\xe9\x24\xda\xe0\xe1\xc2\x8b\x83\x08\x3e\x23\x97\x6f\x0f\xf6\x37\x1b\x70\x3d\x79\xd1\x7b\x33\x5c\xa1\x04\x27\x04\x4f\x74\x86\xf5\x22\x9e\x82\xdb\x2c\x33\x65\xb2\x5a\x1a\x6b\x05\xb4\x00\xb1\x13\xc2\xce\x6d\xfa\xe0\x59\xb6\x73\x9d\xe7\xbd\x40\xdb\x76\xff\x21\xdb\x7d\x8e\x6d\xbe\xf0\xb6\x1d\xe3\x63\x76\x0c\xc9\x79\x5f\x44\xdb\xf6\xfd\x5b\x01\x78\xce\x5d\x70\x91\x6e\xdb\xf9\x59\x19\x70\xc8\x08\xe1\xb6\x23\xbc\xca\x8e\x60\x38\xc4\x24\xdb\x76\x7f\x6e\x87\x8e\x26\x5f\x5c\xac\xb7\x1d\xe3\x5f\x25\x40\xd2\x07\xf2\xb7\x1d\xe8\x65\x76\xa0\x9c\x2c\x74\x11\x6c\x3b\xc6\xd3\xec\x18\x4c\xb6\xb9\x58\x6e\xdb\x71\xa6\x5b\x99\x2c\x0d\x5c\xac\xa6\x80\x8b\x67\x73\x88\x5f\x5f\xc7\x42\x3c\x13\x49\x66\x13\x54\xf0\x69\x1f\x68\xcf\x2d\x23\x88\x40\xcc\x8b\x59\xe3\x11\xf8\xa7\x55\x23\x48\x57\x81\xcb\xc6\x23\xf0\x4f\xcb\x47\xb0\x48\x4e\x2e\xb8\x58\x34\x1c\xcc\xd6\x4b\xf9\xb8\x72\x5d\x57\x0d\x87\xaa\xb5\xaa\x8c\xe3\x24\xb8\xb8\x69\x38\x4a\xa6\x83\x3a\xa3\xbd\x92\x14\x77\xde\x6a\x30\xf1\x7d\x9d\xb1\xde\xe8\x24\xec\x75\xab\xe1\xb4\x2e\x2a\x46\x14\x99\x96\xdf\x37\x1d\x87\x7d\x98\xe9\xfd\x8d\x9e\x82\xe0\x2d\x28\xcb\x0d\x71\x0a\xde\xf6\x37\xfd\xfe\x83\x66\x39\x0a\xa2\x30\xc5\x8f\x69\x9e\xd5\xfb\x52\xa3\xfb\xf0\xf9\xbb\xbf\xbf\xfd\xd7\xfe\x91\x3d\xee\x1b\x87\x38\x62\xbe\x35\xdc\xe5\x85\x87\x5b\xe7\x22\xa9\x99\x81\xee\xa8\xc0\xad\xf1\x20\xf3\xb7\x99\x4c\xd9\x92\x72\xf6\xc0\x4c\x76\x1c\x16\x35\x71\x81\x2b\x02\x06\xde\xae\xa3\xac\xf3\x70\x23\x07\x04\xbd\x0e\xb8\x9e\xd8\x77\x8f\x9a\xb7\xb3\x81\x34\x64\x23\x59\x2d\x78\x47\x06\xa8\x3b\xf9\x8c\xdf\x63\x33\xd1\xaa\x99\x12\x35\x9b\xc6\xe6\x90\x7e\x66\x2d\x2c\x6e\xb5\xf9\x99\xfe\xf8\xc2\xcd\x65\x94\x4f\xa2\x33\xb6\xa7\x7b\xcd\x7b\xed\xe7\x4c\x2f\x45\x96\x26\xbb\x1b\xc8\x8e\x7d\x3c\xb6\xd9\xed\x63\xaa\xff\x09\x53\x20\x17\x4b\x53\xb5\x9b\x9e\x50\xdc\xfa\x1c\xa6\x05\x19\xaf\x55\xc4\xc7\xd8\xea\xff\xc4\xbf\x0f\xd6\x50\xe4\xa5\x5e\x84\xf3\x05\x4c\xb1\xb3\x42\xd0\x87\x01\x8c\x7d\x3d\x46\xfc\x12\x46\xc9\xf5\x49\x5d\x1b\x76\x6d\x28\x51\x6c\x6f\x0f\xa4\x57\x09\xc8\x2c\xb4\x00\x46\x71\x82\xef\x23\x9c\xb4\x1c\xa9\xe5\x4b\xc8\x64\x14\xb7\xe7\x39\xbf\x0e\xf1\xa2\xee\x7a\x84\xa5\x38\xc4\xa9\x8c\x3e\x42\x84\x98\x0c\xcb\x6c\x72\x8d\xf2\x18\x56\xb8\x3e\x8c\x44\x8f\x25\xc6\xba\xdf\x85\xad\x4e\xa4\x8e\x42\xba\xf1\x8d\x59\xd9\x44\xde\xa4\x19\x4a\x96\x03\x18\x63\x14\xc2\x94\x1b\xdf\xb6\xb1\xa9\x65\x2f\xad\x16\x19\x94\xde\x8b\x4b\xe7\x75\x1c\xdd\xc8\x66\xbd\x6d\x53\xfe\xd0\x99\x75\x93\xf2\x47\xa5\xef\x49\xbe\xa6\xf4\x3d\xeb\x3f\xd2\xf7\xfc\xef\x48\xdf\xe3\x97\xb3\x71\xf1\x2a\xda\x19\x9f\x9e\xc7\x76\x36\x4e\x25\xc9\x91\x99\xbb\x65\xae\xeb\x47\x8a\x27\x6a\x9a\x1d\x87\x72\x41\x2e\x4f\x91\x23\xfd\x01\x77\x34\x4f\x54\x9b\xec\x95\x75\x4a\xcd\x31\x16\xa3\x23\xb0\x67\x64\x11\x14\x97\xe1\x3b\x82\x3e\x2e\x70\xcf\x08\x2d\x7a\x25\x92\x02\x31\xa7\x1e\xe1\xd3\xc3\x1f\xeb\x61\xca\x8a\x81\xcb\x92\x0e\x8a\x8f\x3c\x5a\x46\xc0\x83\x41\x48\x06\x7e\x4b\x1f\x68\xfe\x7c\x6a\x94\xcb\xd0\x96\xca\xab\x27\x3c\xa7\x9e\x21\x5a\x64\x52\xf1\xe8\xf4\x0b\x37\x17\xc0\x9e\xef\x6c\x9a\x29\xe0\x90\x1f\x3c\x1f\xa0\x50\x31\x81\x82\xb8\x83\x7c\x21\x80\x69\xde\xbf\xa4\xf4\xa2\x0a\xc2\x40\xa4\xef\x20\x08\x23\xc8\x2f\xbf\xbc\xa8\x0f\xc9\xd6\x77\x51\xde\xbf\x23\x50\xfe\x1d\x35\xbd\x26\x8a\xbd\x3f\xb8\x1b\x43\x54\xdf\x8d\xc1\xe6\xbc\x90\x18\xc6\xf1\x94\x1b\xc7\x93\x22\x33\x7e\x58\x65\x3d\xc7\x43\x8a\x80\xfd\xcd\x9c\x46\x32\xc3\x65\xda\x93\x94\x51\x99\xa0\xe9\x8b\x4f\x9f\x2e\xa6\xb4\x99\x86\x45\xaa\xf1\x48\x68\xd0\x69\x5b\xa9\x29\x57\x7d\xd0\xaf\xf8\x03\xda\xe6\x62\x67\xaa\xdb\x21\xf9\xe7\xaa\xed\x77\x46\x53\xa6\xf1\xea\xc8\xe8\xbd\x01\xe9\x64\xdd\x8b\x2c\x1a\xb9\xad\x15\xeb\x61\xb6\xe3\xbc\x3a\x71\x6b\xed\x7a\x66\x04\xbb\x3e\xcb\xab\x56\x5d\x54\xf6\x42\xae\x6e\x4d\x8f\x11\xe9\x7c\x55\x50\xaa\xc7\xf0\x41\xd0\x6f\xc9\x78\xd1\x95\xdf\x17\x3d\xc6\xae\xff\xcf\xd3\xd3\x97\x7f\x3f\xb7\x5f\x80\x9c\x69\xe6\x73\x95\xff\xaa\x64\xa9\xb2\x0e\x8f\xca\x55\x97\x42\xea\xf6\xf6\x01\xde\xac\x10\x4c\xd3\x33\x5e\xe8\x42\x7e\xf3\xfe\xbd\x87\xe6\x3b\xe2\x8f\x91\x2c\x59\x95\x56\xbc\x7b\x82\x92\x35\x96\x51\x4a\xea\x1e\xce\xdc\xd1\xb9\xeb\xf8\x08\xb8\xd8\xbb\x5c\x47\x1e\x1a\xf8\x49\x14\x41\xee\x81\x57\x98\xeb\x83\xaa\x28\xe4\x0d\xc7\xb2\xd8\x4d\xcd\xf2\x1d\x28\xb9\xfe\x11\x86\xf3\x05\x96\x91\xa2\xc7\x53\xb0\x7f\xdc\x3c\x29\xf9\xdd\x95\xa2\xc0\x0b\x57\xe6\x06\x90\x97\x94\x4a\xae\xa1\x9e\x14\xe7\xf1\xd7\xbb\x10\x55\x8f\x54\x17\xff\xdf\xff\xdb\xe0\xf3\x20\x53\x6b\xbe\x71\x09\x7a\xbd\xb3\xf2\x02\x39\xec\x3f\x2d\x63\xb8\x3d\x83\x54\xa6\x36\x9e\x3d\xc4\x01\x27\x49\x84\xc3\x55\xb3\x72\x23\x9f\xb5\x32\x46\xa3\xe0\xd9\xe6\xa5\x1c\x74\xb0\x13\xd6\xa3\x12\x01\xba\x49\x6d\x8e\x92\xeb\xd6\x78\x1f\x94\xe1\x7d\x65\xe1\x09\xc5\xfb\x65\xd5\x4e\xb4\x92\x69\xe0\x0f\x55\x22\xb9\x21\x0c\x68\x8c\x5b\x2c\xeb\x83\x8d\x44\xc8\x55\x45\xb9\xbd\xfd\x6c\x36\x20\xf1\xb1\x19\xa9\xd8\x51\x35\x65\xbd\xfc\xbc\xd3\xfb\x4b\xfb\x2a\xca\xae\x91\xbd\xcb\xa2\x64\xaa\x8e\x0e\xde\xcf\x41\x56\x69\xbd\x6d\xd9\x2c\x40\xae\x41\x51\x0a\x86\xad\x52\x99\x99\x25\x4b\xed\x81\x53\x3a\xd5\xd0\x8b\x30\xd2\x13\xa0\x0c\xd0\x03\xa5\xcd\xde\xc9\xed\xac\x59\x5a\x58\xcd\x33\xab\xd2\x1e\x1b\x2a\xea\xc6\xfd\xc8\x53\xe9\x3c\xae\x33\x77\x06\xf3\xd2\x89\xf3\x3a\xf4\xed\x67\x5c\xd4\x41\x69\xd5\xb9\x66\xa5\x5e\x5b\x13\xb9\x40\x83\xcb\x48\x26\x8d\xe5\x2a\x59\x0d\x2c\x46\xc6\x35\xa9\x82\x56\x12\x5f\x55\x55\x68\x33\x6b\xe1\x28\x1b\x6a\x9b\x07\x9d\xa6\xe6\x3e\x5d\xad\x1c\x8f\xd6\x8b\xcc\xc3\xbe\xed\x8a\xcb\xae\xe6\xba\xb7\x66\x0d\xa2\x66\x89\x9c\xbe\xdf\x94\xad\x48\xe5\xfd\x07\x79\x2b\x24\x6f\x85\xe5\xd3\xdb\x50\x8c\xfa\x9d\x75\x49\xe8\x72\x51\xfc\xdb\xce\xfd\xfe\x93\xbc\x0a\x76\xba\xe0\x6c\xeb\x51\xeb\xcd\x8b\x33\xd6\xc7\x5a\x83\xda\xd8\x12\xa8\x95\x8c\xef\x1a\xc5\x92\x2c\x80\xaf\x03\xdd\x06\x40\xcc\x32\xc7\x16\xe8\x71\xf6\x70\xbb\xf8\x5b\x27\x17\x69\x07\x3f\x62\x88\x62\x2f\xca\x66\x93\x12\xb9\x36\xb4\xf4\x93\xd4\xc8\xed\xf2\xf1\x9d\xcb\x1b\x87\xcd\xa0\x7e\x36\xa7\x12\xc0\xd4\x4e\x02\x65\xa0\xd2\x51\x19\xbd\xac\x4e\x59\x6a\x28\x95\xe9\x37\x34\xbc\xf5\xec\xed\xd3\xca\xcf\x72\x99\xb0\xf4\x3c\xba\x2f\xc9\x6e\x02\x37\x0b\x5a\xb2\x44\xae\x2e\xf0\x56\xa1\x8a\xbf\x68\x4d\xa7\x6b\x88\x42\xad\xab\x3c\x1d\x01\x77\x95\xac\x92\x2b\x88\x06\x4b\x18\xaf\x65\xcf\xf0\xe3\xca\x8b\x83\x7c\xed\xe4\x0f\xf0\xe6\x32\xf1\x50\x70\x4a\x4b\xed\xbb\x99\x64\x59\xb9\x8b\x9d\xc7\xd5\xab\x9a\xc6\x18\xad\x21\xa0\x6a\xed\x42\x85\x3b\xfb\x64\x2f\xfb\x25\xfb\xa8\x4d\x94\x78\x29\xe4\x30\x0a\xe7\xf3\x36\xf9\x48\x5f\x26\x08\xde\x49\x02\x4b\xba\x0f\x8d\xf3\xfc\xee\xb7\x3b\x17\x5b\x30\x56\x82\xc0\xc9\x42\x8e\xa2\x14\x7d\x9c\xc4\xc5\xe2\xb4\x93\x13\xa9\xd5\x87\x64\xe5\x62\x86\x2c\x2a\xfa\x52\xe8\x12\x07\xa3\x1a\xe2\xf7\x3e\xcd\x54\xb7\x85\xf8\xfd\x2c\xe0\xe9\x68\x6a\x5d\xbd\xcd\x80\x91\xcf\x25\x5a\x09\x1f\x49\x94\x47\xfb\x34\x99\x94\x2b\x92\x54\x34\x86\x9a\x9b\xc4\x42\xd3\xca\x3a\x39\x9a\x1a\x0a\x36\x99\xa7\xc4\xbe\xba\x7c\xce\x20\x73\xf8\xd2\xd5\x48\xa4\x0f\xe3\x59\x82\x96\x30\x18\x78\x19\xe5\x6a\x26\x4b\x32\x39\x09\xc1\xf7\xe4\x84\xa4\xcf\x69\xe2\x3b\xc3\xbd\x4d\xe0\xab\x59\x37\x1f\x28\x12\x08\x2e\x76\xc0\x8e\xc0\xee\x3a\x69\x71\xf6\x2d\x69\x71\x08\x20\x54\xf5\xf4\x96\xd9\xa9\xb3\x70\x20\xff\x9d\x31\x0d\x78\x51\xf2\x95\x22\x52\x52\xe0\xf9\x54\x38\x75\x96\x91\xb8\xcb\x89\xbb\x05\xce\x6a\xb6\xb6\x4e\x71\xaa\x60\x3d\xb3\x8f\x3c\xa5\xdf\x95\x8d\x59\x84\x92\x5d\x81\x4a\x21\x4e\xd3\x7c\x4a\xc2\x03\x70\xb4\x57\xfb\x3e\x2f\x59\xa8\x56\x69\x43\x2f\xfc\x9f\x4b\x42\xdc\x3e\x93\x61\x76\x3c\x37\x7b\x10\x33\x59\x8b\xc6\x36\x6a\xc2\xdc\x10\x8e\x2d\x69\x89\x74\x36\x2d\x73\x9b\x5b\x6a\xb8\x9a\x0d\x64\x66\x57\x7b\x41\xf1\x2e\xd6\x5c\x98\xf0\xa8\x0c\x99\x0a\x92\x1b\x6d\xf5\x49\xd1\x56\xdf\xc5\xc6\x32\x8a\x4a\xee\x0e\x0e\xef\x83\xa6\xe9\xe2\xb3\xff\x59\xb2\x98\x7d\x6e\x20\x16\xd6\x4c\xa9\xef\x4b\x58\xeb\xe1\x68\x17\x64\xca\x3d\xe4\x81\xdd\x5e\x4a\xaf\x41\xa7\xda\x08\x2b\xed\xa4\xe8\xf6\x4c\xdc\x9d\x70\x04\xe4\x85\xf3\x41\xe6\x0d\xba\x57\x9c\xc1\xce\x1d\x71\x06\xa6\xc4\x7d\x27\xd7\xdd\xce\x3d\xe0\x0c\xde\x19\x37\xbf\x13\xa6\xce\x25\x0c\xe3\x79\x67\xa9\xa5\x9c\xe7\xd8\xcc\x60\x15\xc6\xd4\x9b\xfa\xe7\xe7\xd9\x14\xb8\x35\x8e\x71\x77\x60\xef\x80\xcb\x18\x75\xc8\x65\x8c\xef\xfe\xea\xb1\xb3\x0f\xec\x7c\x1b\x29\x17\x9f\x2c\x10\x9c\xb9\x19\x9f\xc2\x4e\x0c\xab\xdb\xdd\x74\x7f\x0f\xe1\xf5\xfd\x61\x16\x3e\xc3\x8e\xb1\xdd\x10\x05\x21\x6a\x70\x73\xff\x96\xac\xc4\xf8\x4e\x58\x89\x1d\x90\xa9\x63\x91\xdf\x8a\xa6\x5a\x87\x2d\x52\x48\x66\xdb\x1c\x80\x43\x40\x98\xfa\x3a\x39\xdf\x6a\x14\xaa\xdf\x05\x7b\xa0\xba\x8a\x9d\x0d\x4c\x60\x9c\xff\xac\xd8\x1d\x96\x86\x69\x10\xea\x31\xc0\x89\x9e\x36\x8d\x25\x44\x1b\x84\xe9\x80\x72\x0c\x03\xa6\x6e\x0b\xe3\xab\x44\x66\x46\x53\x0e\xb3\x22\x1b\x9b\x51\x07\x5c\xf7\x22\xa3\xd1\x21\xab\x68\x8d\x64\xfe\x35\x11\x18\x92\x46\xeb\x79\x38\xbb\xc9\xe6\x67\xa3\x45\xc4\x65\xae\x37\x2f\x0e\xb6\x77\xca\xd5\xbc\x01\xef\x4f\x80\x88\xdd\xcd\xf9\xbe\xf8\x2c\xee\xef\xfc\xf0\xf8\xe5\x8b\xef\xdf\xd8\x7d\x16\x65\xd5\x5b\xe5\x19\xc8\x73\x92\xe6\x1d\x03\x73\x79\x4c\xb3\xce\x80\xac\xc1\x20\x03\x08\x87\xe6\x3b\xa5\xce\x81\xe3\x4c\xda\xd3\xec\xed\xb6\x3b\x05\xbc\xc8\x43\x43\xc2\xaa\x5d\x10\xdb\xe6\x41\x15\x6c\x5c\x41\x06\xd4\xaa\xdc\xa7\x39\x32\x55\x49\x39\xcc\xb9\x6f\x91\xe9\xb4\x9c\x01\x3d\x4f\x96\xb4\xce\x82\x59\x2a\x31\x75\x3c\x04\xbb\x66\x3d\xdf\x2d\x92\x14\xca\xee\xb4\xb1\x68\x1d\x87\x4b\x68\xe5\x4a\x9d\xd3\xf8\x46\x6f\xcb\x82\xb4\x03\xd5\x82\x7d\x7d\x9d\xa0\x0f\xce\xe5\x1a\xb3\x5f\x3c\x38\x2f\xbd\x89\x7d\x51\xab\x0b\xe6\xa6\xfa\x94\x9c\x30\x56\x8e\xa2\x77\xf6\xf6\x69\x9f\x96\x97\x48\x71\x82\xe0\xb0\xa3\x4d\xdb\x2a\xdd\x6a\xf9\xb6\xb9\x16\xbf\xbb\x51\x26\xee\xe4\xbe\xa5\x58\x6d\x0a\xce\x56\xc1\x8a\xf4\xd2\x83\xf1\xd5\x56\x97\x4a\x19\xe9\xbe\x77\x17\x8c\xe6\x7b\x70\x5f\x2e\x97\x1f\x93\xa7\xff\xf0\xe3\x1b\xaf\xf4\x72\x29\xbd\x4b\xa6\xdb\x94\xf8\xf9\x4c\xa4\xd3\xcd\x39\xb0\xa8\xa0\xa3\x74\xc8\xb6\x4b\x49\x64\x43\xb6\xb6\xa1\xb6\x5d\x43\x53\xdb\xb0\xc5\x51\xf9\x6a\x28\x0f\x0f\x92\x56\x58\xdc\x11\x0d\xca\xba\x96\x6c\xb5\x2d\x33\x0e\x3d\xcb\xc6\x14\xf8\x6d\x74\x43\xd8\xc4\xfb\x6a\xd6\x1e\x77\x47\xe4\x72\xe4\xe3\x7e\x11\x38\x91\xae\xf9\xde\xd0\xb6\xe5\x3c\x1c\xdd\x7c\x93\xbe\xb4\xd3\x36\x51\x8e\xf9\x09\x2f\xdb\x2c\x18\x67\xe0\x3e\xe1\xf5\xbf\xed\xd9\x4b\x46\x16\x7d\x02\x61\x7b\x79\x65\x9f\x16\x1a\xc9\xe2\x7e\xc7\x64\x0e\x6b\xe1\xa2\xd2\x3a\x33\x86\xc1\x30\x3a\x0b\x2f\x75\x2e\x21\x8c\x1d\x2f\x08\x60\x30\x6c\xe8\x45\x6a\x29\xe1\xed\x05\x41\x51\x09\xef\x9a\x82\x7d\x8d\x7c\x18\x3a\xa8\x65\xe1\xf7\xaf\x06\xd4\xb4\x14\x6d\x07\xa0\x2e\xa9\x96\x7e\x37\xa0\x96\x46\xd4\x6d\x6a\xf4\xdc\x29\x8c\x09\x7c\xd8\x2c\xbb\x00\x30\xed\x69\x4b\x10\x37\x7a\x08\x32\xda\xf1\x3d\x51\x29\x9e\x50\xa4\x59\x88\x52\xcc\xa8\x65\x9b\xca\x91\xa2\xa4\x8e\x51\x04\xbf\xbe\xaf\x5e\x51\xd5\x7b\xed\xba\xee\xb9\x19\x37\x26\x5e\xe8\x4d\xab\xc8\x9f\x77\x1a\x56\x6f\x59\x8d\x7c\xb3\xd0\x4f\x76\xd6\xc0\xed\xe7\xee\xf7\xba\x5a\xb8\x6a\x21\x44\xaa\xc0\xa8\x1e\x8d\xea\xb9\xb6\x4d\x84\x62\xb9\x0b\xef\xcf\x45\xad\x78\x08\xad\x08\xc2\x97\xbf\xaa\x7f\x8b\x5e\x8e\x6f\x8e\x8e\xff\x66\xbf\xaa\xe7\x28\x59\xaf\x5c\x61\xad\xfc\x21\xa1\x81\xb7\xec\xc7\x8b\x30\xc5\xd4\x54\x8b\x17\x49\x40\x69\x87\xf1\x3f\xef\xd8\x8d\xce\xe3\x39\x35\x25\x59\xad\x7c\x16\xa3\x43\x56\x32\xb6\x40\x5b\xa6\x60\x39\x10\x15\x12\x33\x0e\xd1\x47\xac\x76\xe2\x80\x2f\x20\xe3\x21\x79\xb1\xbb\x47\x5d\x6e\xea\xf1\xfb\x2a\xd3\xd6\x11\x18\x8d\x4c\x07\x75\x71\xae\x45\x4a\x42\x5e\x0a\x0e\xb8\x61\xfa\x34\x44\xf8\x46\xaf\xb5\xa1\xab\xed\x76\x95\x3d\x44\xab\xe8\xb8\x0f\x76\x72\x6e\x2e\x7a\x4b\xde\xb9\xbd\x21\x8f\xee\xd9\xe7\x09\x27\xfe\xce\xcb\xe8\xa9\x66\xf4\xa3\xa9\xc9\x43\x2b\x7a\x23\x2a\x3b\x5a\x24\x06\x8b\xa1\x9e\xd6\x15\x5e\x71\xac\x54\x8a\xf3\x32\x61\x48\xba\xd9\xd3\x3d\x55\x9e\x89\x79\xe9\xe4\x7c\x91\xac\xa3\x80\x79\x78\xa9\xad\x66\x79\xa4\xa8\x9a\x4a\x68\x47\x55\x6e\x2c\xf2\x54\x8b\x30\xfa\xae\x4c\x14\x29\xf3\x3c\x40\x5e\x10\x26\x0c\x69\xb2\xa1\x1d\x63\x0d\xbc\x82\x85\xd5\x02\xa7\x08\xcb\x31\x10\xfc\x6b\x69\x54\x66\xb6\x40\xb0\xf9\xf7\x3e\x18\x1d\x6e\x59\x0b\xd8\xe6\xff\x59\x5e\x85\xa8\x2a\x04\xe2\xb8\x3c\x0c\x4c\xef\x2a\x8c\x57\x6b\xcc\xa1\xba\xab\x20\x44\x81\x39\x96\xc6\x3f\xea\x52\x2a\xa3\xfa\x4d\x10\x1b\x1e\xe0\x0c\xde\x9a\xd9\xd2\xf0\x05\x93\x5d\x68\xd3\x63\x15\xe9\x45\xe2\xc9\xfc\x29\x32\x42\x75\xd8\xa9\xd0\xa6\x29\x9d\xc5\x78\xba\x24\xea\xe1\x4d\x85\xee\x21\x7f\x20\x64\xf1\x3d\x8e\x2d\xe6\x35\x5d\x11\x0f\x9d\xbf\x3f\x8f\xad\xb5\x5f\x2b\x85\x67\xe3\x41\xd3\x83\x2c\x9d\x4f\x8a\x4f\xeb\x62\xac\xbf\x7e\xe3\xf1\x08\xed\x8a\x79\xe5\x8f\x56\x51\x7d\x59\xc1\x6d\x3c\x8b\x54\xd6\x21\x8d\x48\x03\x4d\xb1\x45\x06\xe7\xd7\x09\x2b\x5c\xdc\xdc\xd5\x5e\x8d\x79\x08\x2e\xdc\x17\xec\x54\x6c\x65\x03\x27\x93\x72\xc8\x14\xeb\x18\x54\xed\x68\x41\x23\x27\xae\x21\x1a\xf0\x55\x49\xf3\xf9\x0a\xab\xea\xb9\xe4\x8d\x08\xa2\x38\xd3\xca\xd6\xee\xb1\xa0\x96\xdd\x3d\x56\xc3\x31\x7f\x57\xc8\x88\x8b\x1f\xdf\xbd\x7b\x33\x54\x30\x34\x2e\x8f\x56\xe6\x77\x53\x79\x34\x12\x9e\xf3\xc7\x53\xe9\x17\x6e\xd3\x09\xd9\xc1\x63\xaf\xfe\x98\x6f\x77\x98\x57\xfe\x08\x72\x2a\xe8\xf2\xe8\xb8\x65\xd5\xe7\x6a\x54\x14\x64\x9d\xe1\xa2\x0b\xcc\x1c\xaa\x8c\x82\xd0\x36\x43\x09\xec\xc6\x76\xb8\xfc\x9c\x0e\x3a\x42\xd5\xb2\xfd\xda\x6f\xb8\x5f\x95\x25\xd3\xc9\xa4\xdf\xc1\x8f\xfc\x8c\x8e\x0e\x08\x31\x66\x57\x42\x4d\x2c\xb5\x62\xe8\x13\x49\x8c\x6d\xa0\xb7\x01\x3d\xb6\xd7\xe0\xe4\xe7\x8e\x82\x4c\x1e\x38\xfe\xcb\x7d\xb2\xf4\xb0\xbf\x80\x32\xbb\xd8\x01\x17\x99\x58\x44\x16\x47\x82\x76\xf0\x57\xc0\x79\x26\xbb\x69\xb6\xa3\x59\x84\x37\x6e\xc9\x1a\x30\x01\xee\x5b\x38\x87\x1f\x3b\x89\x87\xe6\xe4\x8f\x76\xe8\xa4\x8c\x5b\xe3\xf6\x44\xaa\x96\x6e\x1d\x1f\xcd\x3b\xe6\x5d\x5e\xc2\x79\x18\xb3\x5c\xa1\x9e\xf3\x3f\x7f\x7e\xfc\x3f\x7f\xae\x1d\xae\xda\x08\x77\x5b\x96\xab\x3f\x68\x53\xba\xb0\xd3\x6b\xdc\xb8\xa3\x5f\x52\x49\xac\xd0\xa8\x68\xb0\xbb\xc2\x53\x1f\x27\xf3\x79\x64\xf7\xd2\xb5\xb2\x86\x63\x9a\x12\xda\x61\x42\x1f\x33\x80\x7b\xab\x55\x14\x32\xa7\x53\x8e\x49\xce\x3a\x8e\x60\x9a\x3a\xe9\x0a\xfa\xe1\x8c\xe5\x86\xb6\xf3\xe0\x95\xb4\x97\xe7\xa2\x96\x4b\x6b\x76\xf8\xd4\x10\xfb\xe0\x82\x65\x25\xbc\x4c\x3e\x2a\xca\x54\xc0\x7f\xee\x83\xf1\x8e\x9d\xb5\x3c\xa8\x60\x2d\x15\x39\xd3\x26\x6d\xa1\x67\xec\xd4\x5b\x49\x94\x39\xe7\xed\xc9\x3f\xd9\x2e\x3e\x93\xa6\xb1\x86\xf9\x46\xfb\x55\x28\x6d\xbd\x98\xc7\xf5\xdd\x4e\x0b\xb1\xd5\xe7\x9b\x37\x50\xb2\x99\x12\xda\xd4\xb3\x36\xe2\xd6\xde\x96\xd2\x56\x5e\xd6\x52\xe7\xcb\x97\x38\x57\x91\xf1\x22\x23\x35\x71\xad\x8a\x2e\x35\xed\xd5\x93\x9a\x84\x32\x93\x0b\xfc\xe0\x82\xde\x04\xae\x46\x1e\xb6\x12\x9e\x14\x86\x0b\xc5\x8f\x89\xdd\x42\x32\xca\x2d\xbc\x58\x38\xb2\x89\x9f\x62\xb9\x95\x09\x07\xf2\x38\xba\x67\x5e\x07\x95\xed\x4b\x12\x43\x6f\x47\x8f\x99\x2b\x55\x96\x1e\x6b\x9f\xd8\xaa\xd8\x6a\x5a\x42\x26\xa4\x51\xe7\x3d\x23\xd8\x3e\x65\xc2\x80\x0a\xb2\x2a\xbc\xfe\x7f\x34\x62\x0c\xac\xdb\x29\xd3\xdb\xe9\x1f\xb4\x92\x11\x8a\x5d\x39\xb3\xac\x7b\xb3\xf5\x53\x05\x9f\xf2\x2c\xe6\xca\xb2\x02\x55\x9a\x17\x04\x5d\xac\xc5\xe0\x15\x11\x9c\x29\x67\x0b\x61\x7e\x97\xa2\x81\xc6\x98\xb2\x29\xe8\xaa\x52\x7b\xf9\x61\x3b\x98\xc6\x45\x60\xa2\xc6\x00\x59\xd3\x5f\x23\x2e\x0a\x14\xe4\xd8\x06\x61\xea\x5d\x46\x45\x74\x61\xac\x67\xa3\x35\xb4\xb9\x42\x51\xa9\xd1\x05\xd9\x55\x8e\x30\x98\xe1\x7a\xbb\xa6\x53\x77\xae\x6b\x31\xc1\x1c\x75\xd0\x96\x93\x25\x8a\xa7\x41\x60\xe7\x74\xc7\xbb\x3a\x99\xcb\x26\x71\x28\xc3\x7b\x99\xae\x83\xff\x6e\x9c\x33\xc4\x8b\x13\xbc\x60\xae\x22\x85\xb4\x83\x2d\xbc\x5a\x2f\x62\xdd\x49\x5e\xcf\xa7\x2d\x9c\x99\x5a\xb8\x11\x98\x0d\xc7\xf9\x42\xb2\x57\xee\xaf\x61\x2d\x6e\x5d\x6e\xf3\x91\xaa\x70\x7a\xf4\xb1\x17\x52\x35\x07\xb5\x00\x49\xd7\xeb\xa5\xe0\x9b\xdc\x01\xcd\xfd\x3b\x10\x69\xf3\xa1\xe7\x2f\x2c\xb5\xab\x57\x4a\x3d\x44\xfe\xa4\x2c\x53\x2a\x73\xee\xf3\x62\xd9\xd6\xda\xd7\x6c\x22\xfc\x24\x1b\x45\xb4\x19\x41\x4a\xb5\xde\xc9\xdf\x4c\x2c\x39\x5f\x24\xd7\x44\x4a\xf9\x81\x5c\x08\x19\x56\x4f\x6b\xa2\x9e\xb1\x22\xdd\xf3\xed\x6c\x5b\x56\xf3\x91\xb0\x6e\x81\x78\xe2\xda\xac\x23\x2e\x35\x7b\xa1\x5a\x66\x2f\xf9\x66\xc8\x32\x2a\xf7\x6e\xb1\x37\x67\x33\x74\x01\x81\xd1\x49\x0c\x52\x7f\x01\x97\xde\x89\x3d\x91\x33\x7b\xe9\xf6\x01\x03\x70\x41\x2b\x59\xd8\x07\xc1\x55\x52\xd0\x46\x4b\x09\xed\x7e\x13\xf7\x81\xa0\xfa\x27\xd2\x3e\xd6\xbf\xdd\x80\x24\xa6\x78\x6f\x3e\xe4\x1b\xc7\x3b\x26\x00\x5d\x63\x18\x0c\xbd\x28\xf4\xd2\xde\xaf\x6c\x8a\xc3\x3f\xdd\xc6\x1b\x5e\x64\x77\xc8\x8b\x53\xfc\x9d\x90\xf1\xf4\xd7\x3e\xe0\xd8\x57\xdd\xc1\x60\x81\xf1\x6a\xc8\x77\x39\xd7\x0d\x41\x9b\x37\x28\x59\xd5\xee\x48\x28\xe8\xac\x3d\x51\x04\xcc\xf4\xd4\x73\xe5\x18\xae\x66\x39\x14\x79\xa4\x2f\xdc\x57\x09\x13\xff\x33\x45\x14\xf9\x37\x34\xa9\xb0\x3a\x2f\xd9\xce\xf3\x1d\xde\xb2\xfe\x4e\xdc\x57\x89\xc3\xf4\x34\xe4\x7f\x9f\x7d\xf4\x7c\x7c\xe2\xd2\x7f\xd8\x93\x37\x34\x87\xe8\x89\xcb\xfe\xa5\x82\x21\x7b\x41\xb5\x05\x27\xee\x5b\x38\x5f\x47\x1e\x72\x9e\x7d\xa4\xc9\x24\x08\x96\x6e\xc4\x5c\x9e\x13\x2e\xb8\xf6\x84\xb2\xe3\x6b\xd3\x92\x93\xf0\xf0\xc2\x61\x3f\x8c\x49\x08\xf5\x85\x75\x26\x92\x40\xe4\x20\xce\x72\x1d\xe9\x53\x61\x36\x56\xc8\x92\x64\xf3\xb2\xce\xf2\xfb\x1f\x12\xd4\xe3\xc5\x59\xc9\x97\x9f\x3e\xa9\x54\xda\xcc\x67\xa9\xd7\xef\x8b\x5a\x10\x70\x18\xa6\xaf\xe0\xf5\xa3\x47\x70\x78\xe5\x45\x61\x40\xdf\x02\x28\x20\x43\x30\x20\x37\x1d\x39\xd0\xf0\x3d\xff\x73\x98\x51\xf6\x2a\xf2\x35\xd4\x3d\x1a\x2c\xf8\xe2\x68\x2b\x20\x3d\x1a\x1d\xf1\x99\x5b\x3b\x23\x33\x8c\x93\x37\xf6\x39\x0e\xe1\xef\x6b\x2f\xea\xe9\x34\x9a\xa3\x65\x1f\x58\xa8\x69\xf6\xeb\x38\xc1\x3d\x57\x75\xee\xf6\x81\x22\xb6\x27\x0f\x47\x20\x47\x6d\xad\x1d\x68\x04\xba\x0f\x82\x30\x78\x0b\x7d\x18\x5e\xc1\x53\x8c\x51\xaa\x53\x0f\xf6\xed\x1c\x62\x91\x04\x1e\xc3\x25\x83\x83\x38\xe5\x9c\x91\xe8\x7f\xfa\xc4\xda\xa6\xb2\xad\x7e\x09\x3c\xdc\xe9\x6f\x00\x8f\xd6\x3c\xb9\xe5\xd4\x50\x2f\x6e\xa2\x57\xdc\x95\x15\x32\xd4\xe8\x31\x30\x2d\x4e\xfd\xef\xe2\xa1\xfe\xe0\x24\x16\x65\x79\x45\x31\x5b\x6d\xf4\x93\xcc\xcc\x20\x90\x1f\x73\x71\xcf\xa8\xed\xca\xa5\xb8\x93\x6c\x23\x5e\x92\x9d\x2d\x62\xe8\x05\xc1\xd0\x5b\xad\xa2\x1b\xd6\x27\x93\x29\x87\x72\xc1\x18\xa0\x29\xaf\xd1\x2e\xbe\x60\x72\x45\xe5\x47\x7c\x2a\x9c\xff\x3a\xc1\x74\xde\x10\xa0\xfe\x06\x6b\xc7\x60\x03\xbc\x20\xc8\x41\x10\x0f\x57\xeb\x74\xc1\x90\xb0\x07\x41\xdc\x07\xe6\x37\x6c\x0a\x96\xcf\x10\x5c\x26\x57\xb0\xf8\xc3\xec\x65\x03\xfb\xb7\xb9\xda\xed\x29\x2d\xf0\xdc\xeb\xdd\x7e\x80\x37\x27\xa2\x44\x0c\xde\xf4\x27\xdf\x66\xec\x2d\x93\xc9\x04\x7e\xfa\xa4\xa9\x63\xc9\x83\xfe\xa3\x47\x19\x72\x2c\x8b\xbf\xe0\xc9\xb7\xb7\x90\x82\x81\x7d\xe3\x7e\x83\x79\x8d\x93\xfe\xa6\x2f\x4f\x0f\x9d\x89\x31\x10\x21\x1c\xfa\x57\x99\xd7\x40\xfb\x2d\x4a\x48\x2b\xac\x31\x3f\x96\x5b\x14\xd3\x1a\x29\x3c\xdf\x0a\x2c\x20\x32\x65\xef\x81\x22\x78\x2b\x88\xd2\x30\xc5\x3d\xc8\x07\x97\xc5\xf8\x59\xcd\xfb\xfe\x06\x64\x6e\x73\xd8\xbf\x85\x43\x94\x44\xd1\xa5\xe7\x7f\xe8\xc9\xaf\x68\x2b\xf9\x11\xa1\xd7\x9a\x5b\x0e\xda\xca\x2d\x47\x13\x38\xef\x8b\x77\x4e\xf8\x06\xbf\x7e\xf6\xfd\x8b\x83\x72\xef\x1c\xbb\xeb\x4d\x63\x8f\x9b\x83\x5a\x0e\x37\x0c\x4a\x36\xbf\x1b\x29\x31\x57\x78\xde\x1c\x36\x56\x29\x50\xd7\x9b\x43\x25\xf1\x1d\xb7\x77\xbc\x39\xa8\xed\x78\x73\x50\xd7\xf1\xe6\xc8\xea\x77\x03\xd4\xa3\xac\x80\x5d\xe4\x8a\x53\x4b\xd9\x74\x27\x26\x76\x26\x31\x77\x66\x64\xdf\x6b\xab\xba\x66\xf3\x70\xd8\xbc\x3e\xa3\x29\x7d\x87\x99\xd2\xc7\xf6\xdd\x57\x46\x4a\x0d\x4c\x5d\xdb\xd1\xf7\x38\x16\xf1\x92\x46\xfb\x8d\xcc\xb2\x79\xc5\xbc\xbd\xdd\x5e\x56\xc9\xd4\x02\x69\x94\x31\x9c\x17\x20\x37\x54\xcf\xba\x31\x9c\x25\x35\xde\xda\x0e\xbe\xbb\x25\x36\xc5\x22\x19\x74\x33\x4b\xf6\x6e\xb5\x25\xdb\x8a\x24\x02\x2a\x35\x8c\xd8\x3a\xc8\x32\xc0\xea\xc2\x7e\xbd\xdb\xb5\xfd\x7a\x77\x0b\xfb\x75\x19\xee\xdb\x51\x47\x30\x65\xa6\x63\x96\x6d\x7e\x77\x6d\xe9\xcd\xa9\xb0\x95\x8a\x72\x24\xdd\x4f\x9a\x59\xb9\xda\x9d\x38\xaa\x15\x28\x3b\x72\x7f\xe7\x28\xb6\xed\x99\x1b\x6f\x79\xe6\xcc\xfd\xcd\xe7\xb4\xe1\x74\x6e\x5f\x95\x99\x53\x73\x6e\x78\x4e\xc7\x2d\xcf\xa9\x84\x65\xc3\x83\x9a\x05\x71\x17\x27\x75\xdc\xf5\x49\x1d\x7f\xb6\x93\x4a\xc1\x71\x7f\x8e\xaa\x25\xfb\x47\xb5\x9d\xbb\x4d\xb4\xe2\x96\xda\xef\x8c\x12\x7b\xa1\x33\x60\xdc\xc1\xde\x54\x64\x47\x84\xbf\xa1\x32\xbb\xa6\x2b\xb7\xe9\xae\x55\x57\xa6\x42\x9a\x6e\x94\x50\x5a\x87\xb3\xae\xb4\xd1\x39\xa9\xa9\x4a\x29\x4d\xf5\x9d\x5c\x8c\xf8\xdf\xa7\xa0\x6e\xa2\x5c\xcc\x6b\xe6\x9a\xe8\x16\x6f\x15\xb7\xca\x74\x33\x1a\x62\x64\x14\x78\x44\x6c\xd6\xde\xd6\xd0\x9e\xab\xbe\x73\x0a\x6b\x1d\x7b\x6b\x68\x71\x75\x0d\x6e\x74\xe3\xbc\x24\x84\x31\x8c\xe7\x2e\xb0\x2a\x92\xcf\xd7\x33\xfa\x90\xfd\xcb\x1f\x16\x6b\x96\x49\x27\x29\x8c\xf1\x89\xfb\x3c\x75\x56\xec\x6f\xa6\xe4\x55\xcb\x2d\x51\xab\xfe\x98\x3f\x95\xed\x94\xa9\xf2\x53\xbe\x4f\xc5\x5b\xa1\x4d\xec\xd9\xef\x6b\x2f\x4a\xc5\x0a\xec\x8a\x55\x83\x6e\xf0\xa6\x86\x6e\x55\x9d\x7a\xab\x6e\xb4\x60\x34\xb7\x7f\xc7\x0a\x4c\xa5\xe9\xab\x56\xbe\xe5\x21\x96\xd3\x95\x69\x3a\x32\xa9\x58\x91\xe0\x98\x50\x65\x99\xb6\x05\x90\x5d\x5a\x0f\xd8\xb7\xfa\x3b\x80\xad\xfa\x2e\xf5\x3e\xff\x92\x76\xd5\x40\xd1\x05\xb2\xaa\x63\x76\xee\x9b\x1c\x5f\x72\x62\x2b\xd4\x65\x77\xa2\x19\xb3\x97\xf3\xfe\x32\x9a\xb1\xbf\x62\xb8\x7a\x76\xbc\xf7\xcf\xd2\x7a\x92\xaa\xa8\xe3\xa9\xb8\x31\x79\xf6\x6c\xcf\xfc\x59\x14\x72\x6e\x63\x5c\x77\xc0\x45\xdb\x02\x24\x47\xc0\xa5\x55\x1f\x6b\xd5\x87\xcc\xeb\xdc\x58\x39\xe7\x8c\x27\x50\xea\x93\x5d\x27\x7f\xf9\x30\x8a\xf4\x72\x91\x7b\x94\x4b\x8b\x3d\x1c\x5e\x41\x17\xec\x8d\x1b\xe6\x06\x29\x2d\x31\xc0\x82\x44\x1b\x79\x64\x4a\xb5\x95\x3d\x20\x49\xbe\xb6\x2b\xbd\xe4\xac\x5a\xd5\x4a\x34\x78\xcb\x1f\x75\x57\x8d\xda\xcc\x66\xa1\x13\x2b\x9d\x74\x50\x32\x69\x55\xf0\xc9\xa8\xf2\x64\xe5\xac\x8d\xfc\xd5\x1d\x70\xa9\xd6\x0c\x28\x5d\x17\x02\xd1\xc4\x8e\x96\xc2\x86\xa6\x62\x98\x16\x65\x2c\xb7\xe6\x95\x34\x5c\x63\xf6\x99\x02\x4f\x87\x61\x1b\x87\xe1\x52\xf0\x44\x52\x28\x6e\x84\x73\xb9\xc4\xe1\xdd\x55\xfb\xf0\x75\x8a\xb6\x8d\xd2\x76\x6a\x2f\xa7\xd0\x3e\xe8\xe4\x4e\x0a\xcf\xb2\xff\x44\x11\x84\xc0\x96\x90\xbd\x41\x0e\xcf\x1a\xd3\xbc\x14\xb9\x91\xda\x89\xce\x35\xd2\x1a\xd7\x2a\x75\xc0\xa0\x95\xaf\x73\x60\xa5\x4b\x77\x01\x07\x51\x79\xb9\x35\x28\xb8\x5b\x7b\x33\x12\x21\x2a\x8b\x34\x58\x49\x3d\xe5\xf8\x16\x3a\x06\x5b\x46\xf7\x76\x59\x4e\x73\xe4\xb9\xa9\x3a\x23\xab\x85\x28\xca\xce\x50\xac\x95\x10\x8c\x04\xcd\x57\x3a\xa0\x7a\x29\x9a\xc2\x54\x7a\x06\x4b\x65\xc3\x1c\xdf\x85\xe2\x40\x31\x95\x2d\x72\x35\x94\xe9\x04\x36\x1d\x66\x6c\xb8\x4f\x9c\xef\xeb\x83\x77\x67\x57\xfb\x4f\x5f\x75\xc4\xf9\x02\x59\x7c\x9d\x55\x03\xb0\xf2\xc1\x7a\x61\x0e\xa9\xf1\x3e\xee\x9a\x11\x1e\x1d\xc8\xd2\xa8\x65\xdc\x30\xf7\x88\xb7\xd4\x0c\x51\x9e\xc0\xd2\xf7\xd7\x41\xd0\x0b\x92\x38\x52\x39\xe4\x84\x92\x57\x31\xce\x92\x97\xa6\xd5\x27\x3d\xca\x9f\x4a\xbe\x99\xf0\xd1\xc7\x53\x6a\x8f\xbb\x17\xdc\x33\x37\xfa\xda\xfc\x84\x8d\x24\xdb\x59\x7d\xad\x91\xe6\xc5\x5e\x38\xda\xbc\xb5\xb4\x32\xb2\x46\x85\xcb\x9d\xa9\x2c\x5d\x3b\x70\x41\x61\x99\xda\x7c\x32\x01\x3d\x4f\x8d\xad\xf9\xae\x25\x78\xc7\x82\x78\x3c\x51\xad\x19\xd5\xd2\x45\x4d\xc8\x8c\x80\x92\x29\x5a\x39\x58\x6a\xf1\x75\x65\xa1\x3c\x85\x02\x8c\xd3\xa5\x10\x43\xfe\xcb\xc7\x75\x35\xba\xf5\x0b\x39\x87\x42\xa9\xc6\xad\x19\x54\x65\xdd\xa2\xe9\xd6\x59\x2d\x74\x71\xea\xb0\xec\xd6\x3b\x6c\x5f\xc1\xb4\x10\x7a\x3a\x3e\x1a\xeb\x63\x5e\xb6\x5d\x63\xdb\x4a\x64\x5c\xb8\x1f\xa8\x66\xca\xb1\xda\xca\xdf\x31\x57\x8d\x6d\xad\x3d\x4d\x31\xb1\xd6\xdc\xec\xf3\xea\x04\x0f\x1a\xe0\xbf\x4c\xa9\xdd\x4d\x98\x61\x01\xbe\x94\xa4\xf4\xf8\x32\x18\x93\xd3\xb2\x7c\x11\x8c\x38\xa8\xd0\xba\x88\x0a\x2b\x07\xa5\xee\x36\xed\x10\xe6\xa0\x34\x12\xb1\x12\x18\xd9\x4b\x50\x5d\xe2\x75\x90\xe6\xeb\xd0\xf4\x98\x7a\x1d\xe0\x3e\xf1\xa3\x24\x35\x2c\xef\xcd\x79\x1a\x5a\x21\xf6\xde\x28\x7e\x9e\x05\x21\xde\x3e\xf0\xba\x40\x1f\xd9\x4a\x65\x36\x36\x55\x66\xbb\x7f\xa8\xcc\xfe\x50\x99\xfd\x7b\xaa\xcc\xd4\xf5\xf8\x87\xda\xec\x0f\xb5\x59\xcd\xa4\xa5\xdb\xe8\xd2\xd4\x45\xc6\x1c\x8f\xbd\x48\xd7\x9f\x69\x3a\x35\x53\xd9\x66\x8f\x73\x65\x61\xa3\x34\x36\x56\x28\x28\x64\xce\xd4\x6c\xb1\xa0\x8e\x54\x72\xf7\x57\x17\x97\x42\x0f\xf9\x8b\xc1\xa5\x87\xee\x8b\x1a\x6e\x77\x67\xfc\xd3\x25\xfa\xeb\x6b\xbb\x1a\xee\xfd\x7b\x0f\xcd\x77\x5c\xc0\xfe\x18\x51\xaf\x7a\xb2\x02\xba\x89\x62\x99\x2e\x70\x5f\xaf\xb0\x88\xe2\x78\xbd\xe2\x78\xc2\x3c\xd5\xbd\xcb\x08\x36\xfa\x8c\xab\xf1\xea\x7f\xb0\x42\xc9\x4a\xff\xe0\x03\x24\xd8\xc7\x5c\x36\x80\xfb\x24\x4d\x10\xcd\x74\x30\x0b\x23\x4c\x8b\x61\x3e\x49\x62\xd9\xf6\x89\xfc\x8b\x87\x99\xd8\x2a\x55\xa8\x4d\x2b\x31\x73\x6b\x8d\x58\x18\xca\x98\xab\xda\xb4\x81\xad\x55\x3b\xc7\x2c\xa9\x81\x96\xfd\x54\xc6\x84\x88\xbc\xf2\x72\x92\xb2\x2b\xba\x28\x2a\x01\xd0\xff\xab\x5f\xc8\x33\xaf\x66\x24\x3c\x13\x90\x29\x95\xdb\x66\x44\x17\xae\xa9\xe3\x26\xa5\x19\x0b\x55\x31\x7a\x5a\x84\xe3\xaa\xaa\x0e\x0a\xf2\x43\xae\xc7\x3b\x02\x1a\xf0\x08\x3a\xe8\xfa\x39\x63\x5e\xa6\xfc\x64\x0e\xb8\x94\x7d\x57\xf7\x0b\x6c\x1f\xf3\x99\xd6\x98\x94\xd0\xe8\x82\xbb\x00\x80\xcc\xf7\xd9\x39\x08\x32\x3d\x37\x05\x42\x6e\x62\x4a\xb1\xdd\x44\xa7\xa0\x98\x0b\xda\xfd\x5b\x1a\x16\xf9\x03\x3b\x29\xd2\x97\xda\x43\xa1\x37\x60\x1c\x7c\xae\x5e\x08\x99\xe6\x3a\xe4\xf1\x94\x14\x24\x5a\x49\x61\xb5\x22\x3a\xc2\xf1\x94\xc8\xde\x4c\x74\xdc\xd1\xa7\xdc\x8e\x5f\x76\xcb\x9d\x49\x1c\xbb\xca\x83\x6b\x89\x8e\xa7\x0d\xb4\x0b\x23\x35\xe7\x1a\x5a\x80\x5a\x5c\x8d\xc5\x8c\x77\x4c\x46\xa8\xe6\x7c\x46\x47\xcd\x8a\x0b\x14\x52\x2d\x46\x18\x3f\x2f\xd5\xca\x61\xdd\x2e\xb8\x70\xcf\xf9\x4c\x34\x65\x80\xba\x64\xe4\x5d\xb4\x8a\x3c\x1f\x2e\x92\x88\xab\xb8\x0a\x12\xa3\x8c\x77\x0d\x8d\xc0\x78\x6f\x6a\x45\x59\x7e\x30\x33\x30\xa8\x87\x7f\x59\xa5\x0c\xb9\x84\xc8\xd1\xa4\x7d\xc9\x7c\xd8\xed\xb4\xc1\x06\x54\x54\x08\x9e\x56\x58\x9f\x13\x2c\x3e\x4e\xa8\xca\x5a\x53\x77\x64\x76\xab\x3f\x51\xf9\xbb\xdc\x27\xcb\x75\x84\xc3\x15\x65\x24\x9e\x20\xf8\xfb\x3a\x44\x2c\x1b\x9f\x8b\xa8\x9b\x58\x51\x86\x19\xdb\x9a\x64\xe4\xc4\xd4\x50\xb4\xb4\xd1\xb6\xd4\x92\x9b\x64\xbc\x5e\x4b\x49\xda\x96\xbb\xb0\x22\xb8\xa1\x10\x49\xd4\xc6\x96\xc6\x36\x34\xab\xb2\x5a\x18\x32\x52\x06\x15\x11\xd0\xd8\x18\x5d\xc5\x89\x1d\xed\x81\x0b\xc5\x0d\x4e\xb9\xf2\x87\x3f\xd4\x4d\x72\xb5\xb8\xa2\xd1\x6e\xde\x3e\x97\x31\xd6\xd9\x71\x49\xf6\xdc\x81\x51\xc8\x38\x3d\x07\x92\x90\x28\x46\x56\x62\x12\x07\xc1\xe1\xd4\x62\x94\x3c\x2c\x43\xfd\xec\x8d\xdb\x46\x96\xb7\x61\x5b\xc5\xc5\xcf\xe7\xb8\xa7\xe6\x68\x83\x96\x1d\x1d\xdb\xdc\x42\x87\x76\xb9\x78\x9f\x80\xd5\x6a\x51\x6b\xa9\x09\x18\xed\xd5\x8e\xd2\xa9\x3d\x92\x65\x94\xdd\x6e\x2e\x4b\x2e\x3c\x7c\xd9\xcb\xf2\xa8\xf8\x56\xf0\x78\x5d\x9f\x9a\x57\x01\x55\xc9\xc2\x59\x05\xf5\xe7\x9d\x16\x50\xfd\xee\x95\xc4\xed\xc9\x7d\x4d\x62\x6f\x27\xf5\x75\x64\x03\x06\x8a\x61\xac\x07\xe8\x36\xb0\x12\x75\xa5\xb4\xde\x9a\xf4\x1f\x5b\x28\xff\xf1\x5d\x11\x7e\x25\x1b\xb9\x34\x40\x88\xd2\xfc\x98\xd0\x52\xb7\x80\x86\xb5\xa9\x71\xc1\x89\xfe\x68\xaa\xbc\x87\x34\x82\x4a\xa9\xb6\xf0\x51\x19\x5b\x63\x3c\x73\xd7\x83\x91\x5f\x90\x7e\x06\x5c\x6f\xb5\x1a\x78\xd7\x1e\x82\xb9\x54\x9a\x46\xfa\xed\xea\x8f\xb2\x67\x6b\xfb\x6b\xc5\x8a\xfc\xe5\x77\x4c\x03\x94\xe7\x28\xa7\xdf\x45\xe5\x6b\xcc\xdd\x4b\x6d\x18\x22\x0b\x25\xb7\x57\xd4\xcf\x94\xc4\x6f\x74\xe4\xf2\x8d\xf2\xb5\xeb\xf3\x6d\xba\x12\xbf\x98\x16\xaa\x3e\xe2\x77\x78\x91\x94\x89\x17\x74\x5a\x77\x23\x51\x50\xa7\xbe\xec\x55\xc2\x14\xe8\x5f\xd1\x85\x62\xd7\xba\xe5\xa3\x84\x34\xea\xc7\x3c\xdd\x4e\xbc\xd4\xcf\x2b\x50\xea\x1c\x45\xb2\x29\xe2\x3c\x92\x4e\xcc\x23\x06\x6c\x63\x05\xb0\x8b\xc1\x68\x2f\x65\xa3\x9d\xd3\x2a\x4c\x54\xc3\xbf\xdd\xea\x58\x39\xa7\x01\xd9\xba\xca\x25\x6a\x83\x6e\xb9\x4c\x7d\xd4\xca\xb5\x3e\x55\xb5\xa5\x3a\x58\xb0\x56\xa9\xaa\xde\xaa\xb3\xc3\x6f\xb9\xf4\xdc\xf8\x95\xeb\x7f\x83\xa0\x0f\x03\x18\xfb\x05\x4b\xa7\x22\x33\xe9\x3a\x5e\x2f\x21\x0a\xfd\xca\x15\x69\x1d\xda\x17\x93\xeb\xd1\x32\xc7\xae\x64\xc7\x51\xce\x85\xf6\x50\x23\x5b\x79\x3d\x70\x37\x7e\x87\xf7\x86\x31\xb4\xa9\x04\x9a\x6b\x04\xac\xda\xac\x7d\x29\x8e\xcb\xf4\xf8\xdb\xd2\xa5\xb8\x9b\xac\x42\x15\x8a\x02\x2b\xdd\x1e\xe5\x5f\x14\xe0\x48\xd5\xbc\xda\x49\x22\x45\x77\x41\xf3\x2a\x3d\xf5\x16\x6f\x9e\xcc\x91\xe5\xcd\x17\x5b\xbe\x41\x0d\x5a\xaa\x21\x4a\x0e\x5c\xd7\xb8\xab\x5f\x36\x9f\x09\x81\x8b\xae\xe7\x91\xfd\x65\x67\x3b\x29\x09\xb7\x17\xad\x16\xde\xdd\xe2\x69\x21\x37\x90\x5d\x64\xe7\xf8\x9a\x59\xe5\x57\x86\x8e\x39\x06\xe0\x33\xe1\x64\x29\x1b\x35\x2a\x69\xf1\x55\x62\x67\x39\xd7\x66\x5d\xee\x1f\x78\x6a\xe0\xe9\x4a\x72\x89\x9f\x0b\x43\x8b\x18\xdd\x91\xfd\x65\xf7\xfb\x64\x63\xa0\x3b\xc7\xcc\x42\xee\x3b\xbb\xcc\xbb\xc3\x47\x2b\x5b\xdf\x05\x46\x5a\x3c\x19\x81\xc5\x7c\xd1\x52\x4b\x94\x77\x62\x2c\xf2\x4f\xbc\x8b\x9a\xf5\x39\x0d\x18\x18\x57\x7b\x25\xca\x32\x18\x2c\x91\x98\xf4\x47\x14\xfe\x86\x33\x94\x2c\x07\x30\xc6\x28\x84\x29\xaf\xc2\x0e\xdc\x41\x98\xd2\x9b\x21\x18\x30\xd1\x23\x8c\xaf\x12\x5f\xc4\x8e\x52\xa7\x44\xe9\x8c\x48\x2b\x21\x6b\xe5\x3c\xec\xee\x8c\x7a\xfe\x32\x9a\xa9\x6c\x1b\x9f\xc5\xac\x3b\xe0\xfd\x29\xf3\x7e\x15\xc2\xeb\xfb\xe2\xa2\xf8\xc3\xbb\x6f\x4e\x5f\xff\xbc\xf8\xbf\x76\x17\xc5\x22\xc7\x3d\x2d\x29\x74\x81\xcb\x1e\x59\x23\x77\xd6\x1b\x99\xfa\x31\x19\x00\x9b\x2b\xe0\x46\xd7\x4a\x35\x8a\x03\xe6\xda\x58\x9a\x03\xa6\xc8\xab\xc7\xe2\xd3\x43\x9d\x9d\xe5\x25\x5a\x28\x6c\x57\x46\x0d\xb9\x46\x45\xaa\xcb\xb5\xff\x01\xe2\x7c\xf1\x2d\xea\x8d\x98\xae\x3c\x1f\xca\x78\x61\xa1\x25\xe5\xd9\xe1\x0c\x33\x82\x12\x9c\x09\x76\x8b\xef\xde\x68\x9f\x9d\xeb\x5f\xb1\xe4\x42\x3a\x4f\x70\xce\xe4\xf1\xdc\x0b\xd5\x85\xfd\xbd\x88\x79\x22\x94\x61\xe0\xd2\xff\xcf\xd5\xac\xd6\x74\x95\x55\x60\x33\xc0\xcd\xd8\xea\x7f\x07\x48\x73\x01\xc1\x00\x32\x7b\x66\x85\xaf\x92\x27\xda\x83\xd6\xcd\x95\x47\xdc\xc9\x87\x43\xb7\x88\x0a\x34\x76\x48\x2b\xba\xde\x7a\x87\x46\xc0\x32\xb9\xa6\x21\x70\xb6\x6b\xb7\xe0\x04\xfb\x28\x5c\x75\x33\x6b\xdd\x00\x21\x0f\x86\xea\x7e\x0a\xdc\x57\x8f\x4f\x0b\x2d\xb9\xd6\xf1\x73\x0f\x33\x0f\x0a\xeb\xf3\xea\x49\xc3\xde\x48\x47\xfb\x6d\xe3\xd5\x05\x30\x32\x45\xda\xb5\xfe\x6d\xf3\xb5\xd5\xdb\x8b\x13\x1c\xfa\x50\x8b\x01\x48\x8d\xb0\xcf\x0c\x46\x17\xf5\x92\x09\x21\xc8\x94\x2b\x9c\xf2\x64\x64\x19\x10\x4c\xa7\xd9\x01\x6a\x04\x44\x66\xb1\xad\x3c\xaf\x89\x56\xd0\x6b\x26\x18\x95\x2d\xa3\x25\xd4\xfd\x7e\x3f\x42\x24\x3e\x84\x71\x70\x5f\xf8\x8d\x7f\x7d\xf3\x01\xfe\xf2\xe6\xe3\xcc\xce\x6f\xb0\xbc\xe8\x6e\x14\xc6\x1f\xc4\x3f\xa5\x59\xf7\xf6\xa9\xa9\xf2\xa7\x30\x0e\x9a\xb9\x26\x1c\x17\x7a\x26\x8c\x8a\xfa\x6d\x64\x41\x30\xe7\x38\xb2\x05\xe5\xd6\x2a\xa5\xed\x5a\x02\xba\x79\xe8\xf5\x60\xe5\xc5\xb0\x91\x67\x73\x0d\xcf\x00\x9d\x97\xfb\x40\x57\x5f\xc3\x31\x92\x05\x86\x36\xf3\x76\xdc\x36\x72\xfb\x08\xb8\x4b\x18\xaf\x39\x10\x04\x2d\x91\x06\x69\xe9\xbf\xb4\x45\x44\x5d\x87\x41\x96\x8a\xee\xeb\x66\xe0\x83\x3c\xaa\x01\x37\x8c\xe7\x08\xa6\xe9\x60\xee\x61\x78\xed\xdd\x74\x54\x8a\xdd\x71\x9e\xb3\x7e\x1d\xde\x6f\xea\xc0\x98\xb0\xd8\x0e\x1f\xcf\xc1\xc8\x9b\xcd\x42\xdf\x21\x82\x9e\xc3\x99\xa7\xd4\x49\xd6\x38\x0d\x03\xe8\xe0\x05\x74\xce\x28\x5a\x88\x77\xce\x12\xa6\x0b\x07\x27\xaa\x6d\x18\x97\x35\x1d\xd6\xad\xf7\x5e\x13\x4e\x98\xdc\x12\x84\x8f\x8d\xe7\x9d\xc3\xea\x9d\xea\x5b\xc1\x8b\x7a\x28\x39\x7e\x12\xc7\xd0\xc7\x03\x06\xbd\x40\x5f\x7d\x11\x80\xfc\x64\xb9\x5c\xc7\xa1\xef\x61\xc8\xea\xd4\x5b\xa1\xdb\x0a\x56\xd6\xd9\xbf\x24\xe3\x66\xb7\x19\x25\x6b\xba\x9c\x64\x46\xa6\x49\x96\x20\x77\xfc\x12\xe2\x6b\x08\x63\x27\x08\x67\x33\x88\x60\x8c\xc5\x42\x02\x0f\x7b\x3e\x8c\xc9\xf0\x43\xab\xa7\x6a\x7d\x9d\x04\xb0\xd9\x54\x6b\xc7\x9d\xd6\x3a\x91\x84\x1c\xb4\x3b\xee\x8a\xec\x44\x21\xa7\x82\xa2\x6a\x78\x0a\xc9\x0c\x71\x92\x4d\x9a\x71\x0f\x0e\x34\xf9\xef\xf4\x32\x59\xe3\xdc\xd1\xfe\x8a\x4e\x9a\x5a\x84\xed\xcc\x6d\x75\x0c\x54\xd7\xc6\x81\xb0\xec\xfe\xd6\xa8\x5c\x22\xc0\xe9\x8c\x46\xde\xd3\x4b\xfd\x9d\x43\x13\xe0\x0a\xee\x2d\x80\x57\x30\x22\xec\xd8\x80\xd0\x86\xc7\x99\x86\x69\xce\xdf\x90\x76\x67\xdb\xb4\xc2\x2e\xd7\x71\x00\x51\x8a\xbd\x38\x18\x58\xbe\x2b\x18\x81\x7c\x59\xdd\xb5\xa0\x97\xd9\xbe\xba\xf0\xca\x28\x39\xb7\x71\x12\x43\xc5\xd0\x44\xd0\x43\xf1\x80\x73\x93\x65\x19\x03\x54\x8f\x9e\xe8\x10\x7b\x97\x9c\x73\x76\x07\xa3\xcc\x28\x84\xe4\x88\x60\xb6\xd1\x3e\x38\x28\xac\xb6\xef\x9e\xbd\x7e\x75\xfe\xf3\x8b\xf7\x4f\x5f\x9f\x9d\xbf\x7f\xf1\xec\xf4\xed\xab\xf7\x3f\xbf\x7d\x91\x83\xab\xf0\x9b\xe4\x65\x4f\x4a\x58\x50\x36\x0b\x5a\xc9\x2d\x4e\x92\x15\x8c\x21\x72\xfe\x7f\xf6\xde\xbe\xbb\x6d\x1b\xd9\x1f\xff\xbf\xaf\x82\xe5\xd9\xd3\x63\xed\x52\x0c\x01\x3e\xfb\x7c\xbd\x4d\xea\x64\xdb\x6c\x93\x36\xb7\x49\x7b\xbb\x75\xf5\xeb\xa5\x25\x58\xe6\x5a\x26\x55\x92\x8a\xe3\x3a\x7e\xef\xbf\x83\x07\x92\x20\x09\x3e\x8a\x8a\x95\x44\xbd\xe7\x6e\x2c\x90\xc4\xc3\x60\x30\x18\x0c\x66\x3e\x13\x84\x11\xba\x40\x51\xc4\x10\x7e\x8c\x14\x60\x5d\x56\xe4\x3f\xce\x57\x5e\x87\xc1\x4b\xd2\x0b\x4c\x29\x69\xb9\xf1\x17\xa8\x6e\xa5\xd4\x42\x22\x08\xd7\x41\x5d\x58\xfe\x28\xab\x03\x73\x56\x79\x3d\xf4\x5d\x0e\xa4\x8e\x06\x11\xd7\xca\xf4\xa4\x82\x42\xf9\x43\xb0\xf8\x22\x9c\xc7\x7b\xc3\xe1\x4d\xbc\x0d\x1f\x8c\xb7\x9f\x86\xf3\x0d\xa6\x34\xb1\x7d\x8e\xc0\xdc\x9d\x67\xaa\x4e\x89\xa8\x76\xe0\xc7\xe4\x12\x45\xe9\x56\x45\x32\xdc\x89\x56\x61\xed\x66\x23\x4c\xa1\xc4\x6f\xe5\xf5\x6c\x7a\x60\x4c\xd8\x48\x9f\x1d\xf2\x65\x17\xf5\x64\x3b\xa1\x5b\x90\xb9\xad\x4c\xd2\x4b\xdf\xfb\x7c\x79\xa5\x95\x4c\x3b\x64\x99\x1a\x65\xf9\xa1\x39\xa7\xf3\x51\xe7\xf3\xe5\x9a\x46\x12\xed\x90\x63\x04\x67\xc4\x1d\x71\x4b\x03\xcc\x52\xb9\xba\x2d\x80\xa7\xfa\x41\x42\x76\xe8\x79\xf3\xa1\x72\x1b\x43\x69\x8b\x99\x74\x18\x55\x41\xa3\xff\x47\xfd\x8d\x07\x65\x1b\x14\xbc\xe5\x9d\x33\xd8\x35\x48\x10\x26\x53\xe2\x03\x42\x2e\x42\xc8\x5f\x8d\xee\x1f\x37\x7e\x72\x49\xa0\x76\x14\xf9\x72\x73\xed\x05\x14\x69\x2a\xf1\x93\x15\xc2\x7f\xf6\xbf\x41\xc9\xef\x29\xf6\xe4\xde\xe4\xed\x5e\x25\xfa\x7e\x11\xfd\x75\xf5\xea\xd7\x1f\x7e\x11\x5f\x9d\x78\x6b\x5f\x56\xe4\x85\x1f\x7b\xe7\x24\x7b\x1f\x7a\x87\xe6\x1b\x02\x24\x36\xf7\x82\x39\x91\x28\xd7\x28\x8e\x3d\x12\xa2\x35\xcf\x80\xdd\x19\x08\x95\x08\x9a\x69\xe1\x25\x1e\xcd\xe1\x9d\x1a\xdb\x16\xf3\x86\x1b\xf7\x84\x26\x18\x63\x1e\x7d\x8a\xfc\xd8\xdb\x24\xe1\x85\x9f\xc3\xa7\x93\x6b\xf9\x68\x5e\x8e\x16\x4b\x93\x5f\xa5\x77\x80\xc0\xa4\x89\x96\x49\x98\x3e\xfe\xd7\x9e\x29\xf2\xd5\xdb\x14\x7c\x8a\x14\x39\xec\x91\xcb\x72\x32\x6b\x55\x69\xcb\xe5\xf1\xac\x13\xc8\x69\x42\x98\xfe\xb8\x96\x1d\xec\x91\xf3\x90\xdc\x07\xf6\xbf\x22\x80\x7c\xd8\x2c\x81\xaf\x92\x6f\x22\x3f\x41\xd2\x15\x71\x95\xe1\xf1\x73\x28\x86\x30\x9e\x27\x79\xd6\x17\xdb\x27\x15\x69\x59\x92\x76\x82\x16\x9f\xa7\x3b\x17\x90\x8a\x36\x97\xce\x56\x2b\x3e\x3c\x28\xe6\x28\x37\x94\x33\xdd\x29\x28\x11\x80\x3f\x13\xb2\xb1\x10\xfe\x45\xd5\x73\x61\x8d\xf9\x55\xe7\xe8\xe0\xc7\xa7\x24\x2d\xda\x16\x2e\x12\x99\x37\x2a\x83\xb3\xc7\xd5\x92\xb0\xc7\x04\xbd\x13\x04\x2e\x66\xd4\x4f\xf3\xb1\x2a\xf2\xf7\x04\x7c\x4a\x91\xa5\x4b\x2f\x9e\xa6\x49\x79\x83\x0c\x82\xaa\xeb\x45\x1c\x7b\xed\x7b\x74\x2b\x85\x91\x74\x91\xa1\xda\xd4\xc2\x51\xd2\xef\x69\x4e\x5b\xa6\x25\x90\xf5\x17\xce\x09\x1c\x54\xfe\x37\x1d\x1c\x14\x43\xee\xb3\xc1\xb0\x41\x14\xee\x2e\x99\x72\xa2\x2b\xb2\xb7\x58\xf8\x0c\xb9\x30\xe3\x9b\x52\x32\x5d\x01\xdb\x94\x03\x3b\x59\x27\x79\xd4\x1e\xd1\x78\x0d\x05\xeb\x3b\x24\x75\x6f\x1a\xb9\xdc\x4c\x02\xa6\xb1\x31\x02\xbe\x09\x25\x9a\x2b\x4f\xf2\x58\xad\x8a\x84\x82\x85\xe4\x49\x57\xe8\x96\x5e\xc7\xa4\x1f\xce\xc3\x45\xc1\xe3\xec\x51\x46\xef\xad\x91\xc0\xf5\x0a\xd3\x17\x50\x3b\x7a\x4e\x44\x1e\x1e\x9f\x4f\xa2\x20\xd4\x5e\x50\x51\x56\xc1\x23\xa1\x91\x6a\x80\x4b\x11\x73\xdf\x6b\xe6\xea\x82\x93\x1f\x5d\x4e\xe1\x72\x59\xe3\xdf\x57\xbf\x24\x5b\x55\x7b\xc0\x2d\x00\x48\x58\xf5\xbf\x31\x73\x16\xb2\xf0\x66\x80\xe6\x57\x68\x51\x5e\xc5\xa6\xe2\xce\xf2\x87\x1c\x73\x92\x24\xd1\xe9\x36\xd5\x8f\xb1\x21\xe1\x5a\x52\xe7\x79\xf8\xae\x28\xfc\x88\x4a\x56\x14\x6a\x0d\x3a\x77\xbd\x68\x38\x4d\xd9\xb5\xee\xe3\x36\x71\xa1\x17\x3d\x32\x9b\x28\x6f\x90\x6d\x82\xe2\x32\x0c\x17\x8d\x2c\x29\x76\x27\xe1\x58\x96\xf0\x78\x96\xb6\xbc\x6d\x92\x53\xc7\xa4\x05\x9a\xa2\x85\x9f\xe0\x3e\x95\x92\xa8\x67\x79\x60\x78\x5c\xb1\x30\xb8\x42\xb7\x04\x15\x53\x84\x31\x99\x62\x61\xf6\xda\xd3\x2a\x49\xc7\x39\x6a\xfd\x52\x83\xfb\xd7\xc4\x79\x19\x4a\x44\xd5\x66\x9d\x92\x2c\x9b\x4c\xad\x3b\x9e\xa5\x5e\x31\xcf\x93\xa0\xd7\xac\xae\x5e\xa2\x23\x9f\xfd\xf6\xd3\x8d\xdd\x0a\xfd\xd3\xe5\x0e\xb0\x6e\xe5\xa4\xc9\xd9\x5b\xcf\xba\x80\xee\x3c\x5e\x84\xbc\x54\x88\x70\x7b\x6a\x39\x1c\x58\xa8\x82\xcc\x32\x51\x94\xe5\x8b\x17\x66\x9f\xef\x26\x57\x46\x51\xa1\x40\x0f\xee\xeb\xb8\xcb\x89\x32\xb0\x0c\xdf\x33\xc5\xb9\x10\x06\xe8\x7c\x6d\xa0\x4b\x05\x45\x7b\x56\xc4\xcd\x18\xbc\x25\x9e\x6f\x92\x84\x6d\x3a\xa6\x92\x4f\x46\x35\x87\x67\x4e\x74\x3f\x7e\x15\xf9\x71\xe2\x07\x28\x03\x5b\xe3\x1f\x3e\x0f\x48\xf2\xe3\xc2\x33\xc1\x1c\x33\x5d\x29\x3f\x4c\x65\xbe\xd8\xde\xdb\x32\xbb\xf7\xf1\xc2\x2d\x0e\xa8\x92\x50\xaa\x74\x98\x32\x4a\x03\x28\x74\xb0\x44\x10\xc1\x58\xd8\x20\x48\xe2\xe2\xc2\x6e\x47\xcf\xb0\x03\xec\x38\xfb\x36\xd5\x87\xd9\xac\x9d\x4d\x91\xba\x3c\xca\x64\x39\x4a\x21\x9d\xc3\x74\xe1\x7b\xab\x70\x99\x6d\xff\xa9\x5d\x84\xc4\xae\x77\x49\x1a\x70\x85\x6e\xbf\x1e\x9a\x13\xa2\x43\xba\x95\xc1\x70\x96\x80\x9f\x5f\x0e\xb4\x87\x61\xca\xb3\xcd\xa7\x6d\xd2\xa8\xf6\x9a\x57\x44\x77\x9d\xd2\x0e\x65\x71\x9c\x91\xe6\x11\xa8\x1c\xd5\x9f\xe6\xed\x76\xc3\x78\xb2\x86\xa3\x5e\xb2\x39\x1d\x48\x3a\x47\x61\xc3\x98\x16\xf2\x7e\x94\x39\x44\x91\x1f\xe7\x76\xb5\xc7\xf3\x8c\x8d\xd3\x98\xd6\xd4\x79\x03\x2a\x46\xc5\x73\xbd\x69\xdc\xba\x62\x28\xe2\x5c\x0a\xbd\x03\x19\x3b\x79\x2e\xb5\x0a\x10\x58\xde\x8b\xfb\xa2\x71\x55\x9f\xd7\x1b\xa5\xf3\xec\x07\x51\x31\xa7\x41\x18\x64\xb6\xcb\x9c\x69\x65\x2f\x09\xcf\x73\xaf\xfd\xc6\x20\x44\x72\xfe\x23\x5d\x43\x41\x42\x0c\xd7\x17\xc9\x34\x89\xfc\x6b\xfc\xb7\x17\x27\xbc\xd5\x9b\xfc\x0f\xb1\x70\x66\x06\x4e\xde\xbe\xc9\x59\x33\x53\x14\x7d\x62\xcb\xcc\x6d\x66\xf2\xdc\x0b\x68\xe7\x57\x68\x48\x00\x41\xc1\xdc\x3c\xb2\x05\x5c\x41\x01\x3e\xf8\x44\xc7\xf4\x55\x3f\x20\x16\x6b\xe6\x74\x7a\x24\x9f\x27\xa1\x27\x4f\x14\x4c\xae\xe3\x2f\x35\x25\xcd\x42\x71\x9c\x59\xb9\x27\x77\x58\xf0\xa9\xe9\x60\x8f\x54\x55\xf5\xa2\x25\xf1\xa7\x88\x27\xf7\x4a\x3a\x51\x3d\x3e\xa0\xe5\xfc\x07\xf7\x0a\xcb\x36\x75\x7c\x47\x75\xdf\xfc\x21\x52\x92\xc9\x1d\x35\x92\x07\x27\x89\xba\x44\xc9\x53\x2f\xf1\x8e\x26\x5f\x24\xd1\xed\x5d\xa2\x5e\x7a\xc1\x62\x85\x9e\xbd\x45\x41\x72\x84\x26\xf7\x73\x2f\x99\x5f\x1e\x45\xe9\x17\xc9\x09\x52\xe9\x8d\xd9\x17\x2b\x94\x48\xde\x17\xf1\x8d\x8f\x5f\x48\x48\xbc\xf8\xe4\x8e\x04\x9c\x52\xf5\x9c\x91\x27\x46\xc9\x51\x90\x2a\xc3\x0a\x19\x08\xa3\x9f\xca\x96\xff\x51\xa2\x92\x2f\x26\x93\x2f\xce\x23\xe4\x5d\x7d\x41\x2a\xe1\x2c\x63\xc7\x1e\x9b\xb3\x25\x4a\x8e\x70\x0d\x19\x17\x4e\x94\x42\x23\xdf\xa3\x5b\x59\xf9\xbf\xbf\xdd\xc9\x8f\xe4\x2f\x4f\x4e\xbc\xaf\xbd\x63\x59\xbe\xff\xdb\x1d\xab\xff\xfe\xff\x0a\x0d\x10\x7e\xe6\x3a\x49\x2b\xa6\x5c\xfe\x25\xe9\x27\xfe\x3b\xfd\x84\x49\xc1\xe3\xe4\x32\x0a\x6f\xa4\xe8\x1e\xff\x37\xf8\x26\x64\x9f\xd2\xdb\x3e\xff\xf6\x7f\x6e\x5f\xfc\xec\xfd\xab\x31\xbd\x6d\x7a\xb3\x9b\xfe\x9b\xdd\x38\x64\x86\x20\xee\x1a\x24\x46\xc1\x82\xde\x30\xac\x23\x14\xc7\xa7\x2c\x45\x4b\x35\x45\x47\x9e\x34\xf7\x71\x96\xa9\x85\x45\xc9\x96\xb2\xc4\x12\xe3\xbf\xe0\x5a\x25\xf1\xce\x37\x2b\x2f\x2a\xe5\xb5\x2d\x84\xd1\x5e\xbd\xa5\x09\x6c\x67\x34\x7e\x56\x9f\x55\x42\xa5\xa0\x02\x8c\x51\xaf\x2b\xfa\x67\x8d\x4a\x35\xca\x62\x0e\xca\x1f\x58\x85\x7d\xb2\xd8\x75\xea\x60\x14\xde\x0c\xea\xdd\x82\xb3\x59\x15\x75\x5c\x7a\x7e\xfc\x17\xb3\x35\xcf\x14\xf9\x22\x35\x43\x5f\xf8\x2b\x1e\xc6\xb5\x21\xc8\xd8\x93\xcb\xee\x01\xa0\x84\x65\x21\x6c\x69\x31\x57\xaf\xde\xaa\x59\x7b\xf4\x27\x5a\xf8\x49\x01\x08\x14\x7f\xf6\x7d\x29\xc3\x46\xe9\x08\x5f\xf5\xa0\xe4\x3f\xa3\xb5\x98\xe5\x6a\x0a\xf6\xdf\xb2\x6a\xb6\x93\xc9\x1b\x9c\x46\x50\x5e\x87\xeb\xf0\x2d\xf1\x26\x0e\x36\x59\xbd\xe8\xdd\xda\x0b\x16\x64\x09\x17\xae\x12\xaf\xd0\xed\x79\xe8\x45\x8b\x27\x0c\xed\xb8\x3c\x13\x25\x7c\xd2\x4c\x63\x4b\xe9\x42\xc0\xea\x8b\x06\xda\xd2\x31\x44\x9b\x65\x49\xdd\x0a\x5f\xd2\x8f\xfa\xe8\x9e\x1d\xa8\x96\x44\xfe\x72\xd9\x3f\x95\xdb\xcb\x30\x42\x0d\xe8\x14\xb5\x79\x02\x47\x0b\xaf\xc8\x4f\x72\x5a\xf9\x7e\xa3\xe9\x2a\x53\x7c\x83\xd9\xd1\xc6\x2b\xb7\x3a\x0b\x35\xdf\x51\x78\x72\x83\xfb\x8f\xd0\x55\xe8\xe1\x16\x7d\x6d\x0b\xbf\xf8\xe8\x46\x56\xe4\x67\x5c\x9d\xf5\x67\xaf\x96\x10\xbc\x36\xaf\xab\x3c\x8b\x64\x2b\x6d\xf9\x5b\x55\x7a\x91\x70\xc6\xd2\xa9\xf6\xa5\xb8\x4c\x8c\xf1\x64\x8b\xa6\x95\x38\xb3\xee\xc7\x4d\xd1\x85\x14\xdf\x78\xeb\x75\x94\x83\x95\x09\xac\xa2\xa3\xc5\xd4\x2b\xed\xdc\x85\xdc\x8e\x35\xd9\xa8\x2a\x46\x79\xb6\xe9\x2a\x34\x19\xa2\x92\x8b\x49\xe5\x4c\x53\xb4\x3e\xa9\xa7\xb4\x4a\x14\x0f\x24\xf7\x5a\x59\xca\xdf\x21\xf1\x3a\xc2\xfb\xa8\x34\x45\x64\x25\xf5\x66\xd3\x89\xb5\xc6\x2a\x57\xd7\x6b\x9a\x1b\x72\xbc\x3e\xa7\xf3\xde\x96\x31\x52\xea\x9a\x35\xf2\xfb\x5f\x24\x14\x24\xd1\x6d\x35\x67\x64\xe3\xda\x1a\x8d\x40\x39\xa3\x0c\x8b\x49\x86\xe2\x98\xe4\x9e\x24\x4d\x91\xd5\x79\xfc\x87\xba\x34\xb3\x43\x53\x44\x17\x56\x5f\x79\xd1\x95\x8c\x5b\x50\x24\x35\xa8\xf5\x8a\xe0\xc9\x96\x6c\x9d\x22\x33\x63\xb6\xbf\xb7\x28\x00\x00\x96\x53\xe2\x96\x1d\x39\xb7\x1c\xb1\x20\xb7\x6d\x1b\x0f\xd5\x46\x4f\x0e\xfc\xa0\x6e\x82\xc7\x9f\x4e\x2a\x33\x2f\xc2\x28\xd5\x05\xac\xfe\xf0\x6d\xfc\x7f\xd4\xbe\xfc\x40\xa4\x13\x18\xc3\x9a\xbd\x35\x07\x16\xba\x78\x0d\x37\x25\x9d\xed\xb2\xef\x0f\x77\x85\xfd\x74\x15\x2d\xc8\x14\xa9\x2d\x48\x58\xb6\xb6\x56\xec\xdc\x8a\xad\x38\x1d\x50\xe2\x5a\x93\xd8\x56\x0d\xc7\x02\xf6\xeb\x02\x00\x47\xec\xad\x97\x11\xba\x98\x26\x21\x0f\x00\xf7\xe7\x06\x11\x37\x08\xf2\xa3\x03\xec\x1b\xb3\xca\xf2\x86\x56\x82\xfa\x9f\xfe\x20\x56\xd6\xb9\x17\x0c\xb3\x8f\x6e\x95\x7c\x76\x54\x34\xb7\xab\xb7\x7b\x98\x6f\x76\xfd\xe6\xfc\xe5\x77\xff\xfa\xd7\xcd\x21\xdf\xec\x90\x7c\xb3\x57\x6f\x47\x4b\x34\x6b\xe4\xba\xd5\x21\xd1\x6c\x66\x73\x11\xc0\xba\x5e\xbd\x1d\x3d\xc5\x2c\x10\xa4\xe8\xeb\x9e\x63\xb6\xf0\xf5\x48\x49\x66\x87\x0f\x7e\x40\x7a\xd9\xae\xc3\xaf\xcb\x2f\xdb\x95\x00\x1f\x51\x82\xd9\x3c\x21\xd1\x21\xc3\x6c\xa3\xa2\x70\xc8\x30\x7b\xc8\x30\x7b\xc8\x30\x7b\xc8\x30\xfb\xb1\x65\x98\x15\x20\xf8\x95\x62\x2a\xf6\x3b\xc3\xac\x5b\x28\x7b\xa8\x04\xb3\x75\x3b\x7f\x21\xc4\xe4\x90\x61\xf6\x90\x61\x56\xb8\x2b\x5c\x31\x14\x80\x11\xf3\xcb\x92\x2a\x3f\xb3\xec\xb2\xc5\x33\x01\xa6\xc0\x21\xa9\x6c\x2f\x59\x9f\x9f\x88\x72\x7f\x0e\x72\x58\x13\xcb\xac\xbe\x82\x5e\x2e\x65\x94\xa5\x2b\x80\x66\x91\xbd\xc3\x07\x8f\xfb\xfb\x74\x15\xd4\x8b\x7e\x28\x10\xfd\xb0\xca\xf8\x23\xa5\x7e\xdd\xe2\x4c\x4a\xf8\x8f\xcf\xf0\x5a\x48\x92\xdb\xc0\x92\x87\xe4\xad\x87\xe4\xad\x9f\x49\xf2\xd6\xef\xd1\x6d\x4b\xbe\xcb\x6a\x1a\xa9\x92\xcd\x25\xab\xa7\x25\xcd\xa5\x20\x3f\x93\xb0\x26\x3f\x58\x74\xca\x3e\x5a\x5c\xec\xa4\x09\xb2\xe2\x5b\xbb\x8a\x1b\xe8\x94\x5f\xb4\xae\x85\x43\xa2\xce\x8f\x26\x51\x27\x2f\x5b\x3a\xe4\xed\xe2\x0e\x0f\x5b\xa5\xe3\xe2\x9b\x6d\x4b\x55\x55\x59\x82\xa0\x54\xba\x47\xa9\xe1\xfa\x8e\x4b\x90\x7b\x8b\x2f\xde\x9f\x24\x70\xbd\x4d\x0c\x1d\x19\xaa\xa7\x82\xbc\x53\x3e\xab\x08\x56\x50\x2e\xde\x55\xb2\xd3\x2e\xa2\x7a\x17\x1c\x58\x95\xf4\xa0\x52\xfe\xa1\xc7\xbc\x03\xde\xac\x3e\xfe\xf4\x13\xc2\x75\x8c\xce\xda\x5d\x6a\xb8\x34\x19\x5c\x06\x44\xb6\xb3\xac\x70\x82\xdb\xfa\x87\x76\x20\x58\x85\xde\x02\xed\x8d\xe7\x00\xfc\xcb\x7f\x0d\xbf\xd3\x6b\xd2\xb2\xf4\x4d\x03\x47\xc7\xc6\xae\xd0\x41\xd9\x22\x92\xa9\xdf\x6f\x97\xa9\xd3\xcf\xbb\xeb\x15\xe1\x84\xcb\x24\x59\x1f\x3f\x7a\x74\x73\x73\xa3\xde\xe8\x6a\x18\x2d\x1f\x41\x4d\xd3\x1e\xe1\x37\x6b\x1f\x92\x6f\x1f\x15\x6a\x3a\x7e\xc7\x32\xc8\x54\x3f\x01\xae\xeb\x3e\xaa\x7f\x2c\xa8\xf1\xc6\x5f\x24\x98\x0d\x0d\x63\xfd\x2e\x2d\xbb\x44\xf4\x30\x54\x28\x7c\xeb\xa3\x9b\x6f\xc2\x77\xb2\x22\x6b\x92\x26\x19\x86\x64\x18\xd9\x23\x14\xc5\x94\xf7\x81\x0a\x84\x26\xa2\x94\x28\xcb\xd6\x9b\xc4\xb9\x1f\xcd\x57\x28\xf3\xa2\xc2\x75\xa6\x3f\xe6\xb8\x71\x68\x67\x3f\xf1\x22\x82\xec\x97\xa9\xc8\x49\xe4\x05\xf1\x45\x18\x5d\x4f\xc3\xc8\x5f\xfa\xc1\xb1\x04\xed\xf5\x3b\x09\xb2\x21\xd4\x42\xd1\x74\x6d\x19\xf4\x68\x19\x8c\xda\x72\x69\xcc\x46\xfb\xa0\x8d\x5d\x8d\xba\xb9\x6d\x30\x6e\xdb\xb0\xd0\x74\xd6\x13\xf1\xb0\xd7\xef\x48\xf3\xbb\x68\x19\xb6\xb6\x0c\x47\x6b\xd9\xe8\x33\x68\x63\xdc\x51\x1b\x7d\x86\x6d\x8c\x3b\x6e\x5d\x2f\xf2\x59\x53\xd3\xba\x8e\xd9\x6c\x34\x0e\x07\xdd\x5b\x06\x60\xcc\x96\xcb\x63\xd6\xda\x07\xad\xed\x6a\xd4\x8d\x6d\xd3\x61\x8f\xd6\x76\xd6\x18\xe3\x71\xd0\xc8\x67\x1a\xe6\x71\x30\x5a\xdb\x85\xa6\xb3\x19\x10\x37\xbd\x7e\x47\xc8\xbe\x93\x51\xb7\x34\xad\x8d\xdb\x76\x1f\x82\xb7\xd2\x5b\xae\x2d\x1c\xb8\xc5\xc3\xa2\xf0\x85\xdd\x17\x24\x84\xdb\x2d\xc8\xe6\x96\x1b\x17\x05\x6d\x7a\x8b\x45\x01\x1b\xa6\x08\x36\xee\xb3\x78\x8a\xe0\x16\xdb\x2c\x6c\x62\xcc\x96\xa6\xb5\x51\xdb\x76\x0b\x4d\xbb\x4d\x2d\xbb\xeb\x77\xf8\xff\xc7\x69\x57\x37\x8b\x8b\xd1\x6c\x14\xbd\x26\x5e\x8c\xe6\x8e\xda\x6e\x1c\x34\x69\x7a\xb4\x51\xbb\x3d\x06\xed\xb6\x8e\x79\xd7\x62\xc0\x29\xf4\xd6\x69\x5c\x8b\xce\xfa\x9d\xe4\x8c\x45\x26\x60\x75\x6f\x19\x58\x63\xb6\x5c\x1a\xb3\x6e\xb5\x0e\x5a\xb7\x76\x34\xea\xe6\xb6\xc9\xb0\xc7\x6b\xbb\x38\x6c\xd8\x48\x71\x3c\x6a\x38\x1a\xc5\x8b\x2d\x83\xc6\x41\xe3\x96\xc1\x68\x63\xd6\xad\x1e\x83\xc6\xa4\x1e\x71\xd4\xa5\xb6\x9b\x87\x4d\xda\x6e\x1e\xf7\xe8\xa2\xc0\x6c\xda\x97\x41\xf3\x01\x98\x1c\x8a\xb6\xd8\xa1\x1a\xdb\xd6\xdb\xdb\xd6\x47\x6b\x1b\xc0\x1e\x3b\x33\x80\x5b\xee\xcc\xc5\xb6\xf5\x3e\x6d\xeb\xe3\xb6\x0d\x8a\x3b\x24\x68\xdc\xa8\x00\xde\x22\xc1\x16\xbb\x73\x69\xbe\x8b\x9b\x24\x6c\xdc\x9e\x21\xde\x25\xe1\x16\xfb\x73\x63\xdb\xcd\xe3\x26\x6d\x8f\x37\xee\x12\xcd\x9b\xc7\x4d\x68\xde\x3c\xee\xd1\x45\x82\xdb\xb4\x2c\x9b\xd9\x13\xb6\xb3\x67\xa5\xbb\xa5\x82\xca\xcf\xa6\x5b\x85\xfe\x26\x7c\xde\x5e\xfe\xf0\xb6\xfb\xf9\xd5\x34\x46\x34\x9b\xfd\x3e\xa5\x08\x31\xbe\x73\x2f\x7f\xbb\xb1\x6a\x80\xb1\x08\xf6\x4a\xd4\x3d\x37\x08\x01\xca\x22\xd9\x03\x2e\xd8\x77\x0c\xc9\x3b\xfd\x9d\xa6\xf5\xc8\x01\xb0\x38\x34\xbc\xc7\x29\x8a\x5c\x9f\x7b\x83\x9c\xae\xd3\x2c\x31\x85\x4d\x5d\xed\x2a\x77\x08\x69\x8a\x92\x74\x58\xec\x22\x33\xa6\xb6\xfd\x6a\x3e\x92\xac\x3f\xbc\xc7\x53\x09\x60\x41\x7e\xf4\xb7\xbb\x0c\xf5\xef\xfe\xd1\xdf\xee\x28\x16\x20\xfe\x6b\x31\xbf\x7f\xc4\xfa\x96\x5f\x86\x9a\xb9\x37\x05\x0f\x16\x98\x21\x08\x2e\xe6\x72\x06\xb8\xa0\x9c\xc9\xaf\xb2\x77\x52\x9f\x77\x5c\x8a\x99\x9f\x7e\xc0\x97\x3e\xcd\xd2\x2f\xf3\xc9\x3d\x48\xd8\x0c\xeb\x84\xfc\x22\x9c\x5f\x49\xaf\xcb\x7d\xd2\x2a\xde\x4a\x90\x7a\x6f\xf3\xff\xc2\x42\x90\x0a\x97\x5c\x40\x54\x8b\x9d\x3b\x29\x8a\xbf\x1a\x1b\xf9\x88\x46\x73\xf5\x76\xed\x92\x33\xac\xd7\xca\x2a\x0d\xc2\xc4\xbf\xf0\xe9\x15\x64\x2c\x2b\x67\x0c\x17\xc2\xcd\xe7\x8f\x32\xf5\xac\x8a\xa7\xc5\x3c\xdc\xdc\x42\x8c\x1b\xee\x2e\xe1\xb0\xbc\xbb\xb2\x18\xf1\xb3\x8b\x23\x62\x27\xa2\x30\xc0\xfc\x3d\x22\x89\x2d\x26\x89\x22\x3f\x4e\xc1\xfd\x33\xda\xa4\x68\x3d\x1d\x49\x24\x0a\x8f\xef\x44\xa4\x9e\x69\x77\xca\x9b\x6a\x21\x55\x05\x91\xd6\x64\xb9\x4e\x69\xe8\x73\xdb\x96\x5c\x89\x03\x94\x33\xf7\x2c\x83\x17\x03\x14\x24\x6f\x90\x8f\x5b\xd6\x54\x01\x50\x59\x88\xba\x27\xf8\xa8\x1c\x50\x58\xec\xcd\x60\xac\xf7\x4a\x7f\x9e\x3f\x1d\xdc\x1b\xfc\x69\x6d\x64\x64\xed\xf8\x9b\x93\x61\x08\x5a\x6c\x08\x8e\x11\xc3\xfa\x11\x1f\x95\xc5\x5c\x0d\xc2\x05\x8a\xd5\xf8\x32\xbc\x91\x39\x12\x92\xf6\x9b\x32\x22\x55\x5a\x11\x7c\xdc\xd4\xa9\x4e\x89\x3c\xda\x09\xf5\x14\xad\x48\xd6\xc1\x9e\x73\x53\xce\x50\x83\xbb\x8d\x37\x1f\x56\x9d\x38\x5d\x40\x7b\x6f\xde\xbc\x79\x31\xb8\x2f\x90\xef\x0b\xa9\x68\xa6\xc8\xd3\x36\xd8\xb3\xba\x9e\x7c\x83\x2e\xbd\xb7\x7e\xd8\x25\xc7\x92\x98\x6d\xf3\x0a\x2a\x0b\x29\x15\x01\x79\x04\x95\x46\x7c\xa5\x89\x72\x35\xa6\x14\xf8\x0e\x79\xab\xe4\x52\x3a\x65\x35\xf7\x5f\x0e\x65\x71\x55\xf4\xf4\xb6\x48\xd0\x4e\xb0\x4c\x48\xa0\xac\x36\x0c\x9f\xab\x6e\x2d\xe4\x1e\xbb\xb2\x22\xe5\x00\x71\x6d\x4e\xba\xdd\x32\x81\x4c\x87\x27\xaf\x68\xc4\x28\x6f\x5d\x88\x82\x23\x52\x95\xbe\x24\x0b\x14\x83\x1f\x97\x52\xe5\x6e\x56\x81\x47\xd4\xfa\x07\xd7\xf3\xdb\xff\x76\xe8\xf7\x3e\xcd\x5a\xe0\xa5\x00\x68\xbc\xe6\xb9\x8f\x50\xf8\xed\x60\x61\x54\xd9\x01\x02\x5c\xb0\x02\x3c\x68\x15\x6a\x28\x83\xbb\x2f\xeb\xc0\xa3\x21\x80\x3d\xcf\x89\xcd\x48\x5c\x19\xe1\x60\xaf\x47\x31\xca\x7c\xa7\x19\xd9\x0e\x61\xbf\x1d\x7f\x2f\xdf\x16\x8d\x9e\xb1\xcd\xe3\xcd\xb9\x20\xb8\x69\xf0\x34\xa6\x48\x89\xd9\x74\x6e\x31\x91\xcd\x23\xcc\x13\x11\xb4\x8f\x50\x1f\x73\x84\x22\x9c\xb5\x2d\x98\x13\x2a\xba\x52\xf5\x95\xed\x50\xe9\xae\x62\x77\x4b\x8d\x10\xf6\x6b\x74\x96\xbd\x08\x52\xac\xac\xff\x86\x3e\xfe\x67\x99\x25\x33\x60\xc8\x58\x9b\xc8\xc7\xaf\xac\x19\x4e\x3c\xe7\x50\xcb\x9f\xc7\x0a\x60\x5c\x8b\x4d\x44\x25\xf7\x45\x14\x5e\xa7\x69\x12\xa8\x9f\xed\x30\x24\xad\x1a\xfb\xd5\x5e\x99\xd5\xf6\x09\x6f\xde\xf8\xeb\xfa\xc7\xeb\x5f\x7f\x7e\xd9\x09\x6f\xbe\xaf\x71\xad\x62\x43\xcb\x40\xe4\xeb\x0d\x68\x8e\x22\x63\xfa\x34\x61\xc8\x17\x6c\x69\x1c\x9a\xbc\xcb\x4e\xea\x45\x30\x79\xed\x01\xc1\xe4\x05\x87\xe4\xa6\x33\x72\xab\x7a\x99\xee\x36\x85\xf0\x3e\xa0\x54\x2a\x1e\x8a\x83\x28\xac\xbf\x62\x29\xcf\xda\x4b\x0f\xb4\x02\x43\xc6\x3c\x5c\xdf\x4e\x59\xa2\x9d\x4a\x1c\x46\x4a\xcd\x42\x3d\x0a\xfb\xa7\x62\x44\x69\x55\x5b\x79\x81\x38\x06\xa4\xfb\x02\x25\x9e\xbf\x1a\x10\xa8\xd6\x69\x92\xdb\x67\xb7\x06\x73\x49\x7c\x32\xe2\x76\x92\xe7\x4f\xbb\x5d\xc0\xd4\xda\x0a\xc6\x9f\xbb\xee\x3c\xd3\x8c\xd5\xdf\xb6\x0b\x96\x48\x47\xa4\x05\x99\xe1\x45\x66\x15\x10\x92\x13\xa4\xe4\xa4\xda\x05\x64\xd3\x15\x54\xf2\x32\xa7\x83\x21\x66\x81\xde\x64\x06\x4a\x31\xde\x96\x92\xa2\x93\x99\xa1\x8e\x36\xa5\xc1\x26\x49\x03\xd3\xf4\x1e\xe5\x9b\x37\x2f\xea\xc6\x28\x3e\xe8\xf1\xf9\x16\x53\x8b\xc5\x40\x98\xeb\x26\x5e\x9d\x76\x60\x8b\xfa\x53\x73\xbd\x99\x23\xeb\xf5\x00\xae\x6b\x9f\x9b\x73\xde\x02\x33\xce\x04\xa5\x36\x99\x41\x9c\x48\x07\x5c\x6b\xd6\x69\x9c\x74\x21\x2c\x00\xb3\xf4\xa5\xd6\x99\x1c\x84\xf6\x35\xcd\xc2\x74\x5a\x34\x08\x6d\x23\x14\xa9\x1e\x90\x9b\x81\xc6\x21\x27\xed\xe0\x40\xe9\xd9\x6c\x5a\xb2\xb7\x36\x2d\x31\x13\xdb\x4c\x0c\x3f\xa9\x65\x91\xe0\xdb\x45\x99\x37\xa8\x16\x4e\xeb\xb2\xe8\x8c\x2d\xc1\x35\xd8\xcd\x72\x35\x64\x6b\xb0\xc7\x56\x08\x86\xe7\x78\x19\xdd\x3a\x15\x0f\x32\x4c\xed\xcc\x28\xd5\xcb\x38\xa1\x09\xce\xee\x29\x48\x8c\x25\xc0\x8d\x01\x3b\x01\xa2\xcf\x4d\x50\xdd\x0f\xe1\x75\x2f\x89\x92\x3a\xee\xcc\xdc\xd4\x6e\x6a\xca\x35\x2d\x53\x8c\xd0\x50\x63\xc7\x1d\x65\x06\xc7\xb2\xbe\x54\x6c\x4b\xbd\xe7\xa9\xa7\x45\xa9\x69\x50\xc6\x58\x83\x2a\x9b\x93\x06\x32\x9c\x38\x9b\xe6\x00\x74\xf5\x31\x80\xd5\xc5\x31\xcd\x49\x18\xae\x12\x7f\x5d\x30\x10\x95\xcd\x3c\x24\xe8\x7a\x13\xf8\x1c\xf4\x7a\x6a\x5e\xda\xd2\xe4\xb3\x3f\x30\xea\xf5\x0e\x09\xfb\x62\xfb\xf9\x59\x37\x9d\xef\xd7\x2f\xfe\x12\xdb\x7e\x70\x97\xe7\x88\x19\xef\xe6\xc5\x64\x80\xa9\xb7\x54\xea\x27\xd2\xaa\xb1\xc0\xfc\xe2\x21\x73\x29\xe9\x8d\x21\x05\x4a\x8b\xb2\xb7\xe9\xc4\xc9\x07\x93\x8a\x04\x7e\x62\xf8\x64\xc2\xb6\xa2\x97\x5d\x61\x06\x38\xa9\xc8\x19\x1a\x05\x54\xce\xe4\xef\x72\xdb\xd1\x30\x39\x92\xe9\x68\x49\x14\x06\x05\x37\xca\x67\xb8\x6f\x5f\xd6\xe8\xad\x9d\xd3\xa4\xa5\x1d\xfd\x86\x24\x29\xda\xba\x9b\xf5\x1b\xd5\x9b\x4b\x14\x21\xe9\xc6\x8b\x25\x2f\x90\x08\x5d\x73\x45\xc7\x0f\x96\x52\x72\x89\x0a\xf7\x70\x6a\xf1\xb6\x59\xa0\xfe\x1a\x39\x80\x37\x87\x0c\x44\x2d\x39\xc3\x0e\x1e\xc5\xb1\x9c\xe7\xa7\x37\x42\x61\xa0\x54\x5a\xa5\xe3\x3c\xe6\x2f\x7b\x8a\x5d\xe8\x6c\xd1\xaf\x3d\x81\x0c\x30\xf4\x0b\x00\x31\x7a\x18\x03\xb7\x5b\x31\xf1\x86\x65\x2b\x1c\xb6\x66\xc0\x6e\xd7\xcc\x6b\xda\xbb\x51\x56\x0d\xf8\x10\xab\xe6\x3f\xe1\x26\x2a\x2c\x0b\xe9\xd2\x8b\xa5\x73\x84\x02\xee\x98\xb0\x50\xdb\x74\xbe\x51\xee\x8b\x7a\x61\xb4\x34\xe4\xc7\x26\x68\x90\x44\x47\x40\x7f\x6e\xbb\xf7\x0b\x36\xd9\x87\x57\x02\x96\xe1\xbe\x6c\xf7\xbf\xfc\xf9\x32\x5c\x2f\x97\x62\x0f\xea\xaa\x23\x73\x11\xc6\x24\x85\x0a\xc9\x23\x43\x32\xa0\x90\xbc\x68\x3c\xac\x13\x96\x8e\x7c\xbe\x89\x22\x14\x24\xa7\xe1\x4a\x60\x3d\x4b\x17\x4c\xe2\x27\x45\x07\xc6\x53\x42\xfb\x0a\xef\x67\x0b\xcc\x63\x79\x7d\x0d\x45\xc6\xdc\xf7\x12\x6a\xaa\xe6\x6a\xae\x0e\x80\xa2\xa9\xa6\x0e\x1c\x68\x3a\xba\x25\x9d\x02\x5b\x35\x6d\xdd\xb2\x35\x47\x99\x6a\x2a\xd0\x75\x17\x5a\x9a\x06\x25\x60\xa8\xae\x0e\x5c\x0d\x40\x52\x6e\x9b\xd0\x82\x9a\x0b\x25\x00\x55\xdd\x35\x35\xd3\x74\x15\x4d\x35\x00\x30\x34\x0b\x00\xe9\xd4\x55\x1d\xd3\x01\x86\x0b\x2c\x45\x53\x5d\xd7\xd1\x6c\xd3\xd4\x1d\xc9\x56\x4d\x0d\xda\x8e\x6d\x43\x05\xaa\xc0\x35\x35\x60\xba\x92\xa9\x9a\x3a\x69\xc7\x55\x74\xd5\x71\x1d\xdd\xd0\x35\x20\x9d\xea\xaa\x69\xe9\xae\xed\x42\x43\x31\x55\x4b\x03\x96\xad\x01\x20\x41\x55\x33\x34\x4d\xb7\x74\xa8\xd8\xaa\x6d\xba\x2e\xd0\x74\x28\x01\x55\x73\x75\x07\x02\x68\x2a\x40\x53\x81\x63\xda\xa6\xae\x4b\xa7\x9a\x0a\x0c\xdb\x02\x06\xb0\x80\x02\xa0\x6a\x01\x60\xea\x86\x2b\xe1\x01\xb8\x10\x5a\xba\x69\x41\x05\x98\x2a\xd4\x81\xa5\x43\x49\x53\x81\xa6\x5b\x2e\x30\x5c\x4b\x01\xb6\xea\x90\x6a\x1c\x5c\x8b\xee\xba\x96\x61\x03\xcb\x56\xa0\xa6\x1a\x9a\x69\x02\xd7\x94\x80\xaa\x43\x68\xb8\xba\x01\x15\x08\x55\xc7\xc1\x95\xbb\x12\x54\x6d\x17\x02\x68\x41\x43\x81\xa6\xaa\xe9\x9a\xe9\x5a\x50\x3a\x35\x54\x68\x01\xdb\x74\x35\x53\x81\xb6\x0a\x1c\x4d\xd3\x1d\x53\xb2\x54\xa8\xeb\xb6\x09\x80\x02\x1d\xd5\xd5\x1d\x5d\x87\x96\xe4\xa8\xa6\x6e\xb9\x8e\x03\x14\x5d\x53\x81\x09\x1d\x53\x33\xa4\x53\xa0\xa9\x8e\xa1\x41\x68\x02\x45\x07\xaa\x6e\xd9\xba\xe5\x40\x09\xe8\xb8\x3b\x9a\x65\x59\x8a\x0e\x55\x4d\x03\x86\x69\xd9\x12\xb0\x54\x4d\x73\x1c\xd7\x50\x74\x28\x9d\xe2\x99\x86\xd0\xb0\x4d\xf6\x8e\xa1\xb9\x96\x2d\x41\x4c\x6a\x0d\x40\xd2\x8a\xe1\x1a\x0e\xc4\xc4\xb5\x70\x23\x9a\xab\xbb\xb8\x97\xb6\xad\x43\xd7\xd5\xa5\x17\x50\x57\x35\xd3\xb2\x0d\x43\xc1\x5f\x01\xc7\x32\x6d\xe9\x14\x02\xd5\x34\x2c\x5b\x07\x16\x1e\x28\x70\x34\x60\x1a\xb6\x04\x5c\xd5\xb2\x0d\x5d\x33\x14\x68\xa9\x9a\x6d\x98\xa6\x63\x48\xc0\x56\x2d\xcb\x22\x6f\x5a\xaa\xee\xea\x16\x74\x6c\xe9\x14\x98\xaa\x65\x3a\x3a\x74\x70\xa9\x0d\xa0\x6d\x69\x06\x1e\x90\xa5\x69\x8e\x69\x92\x77\x0d\x03\xda\x86\xe1\x48\x00\xa8\xb6\x81\xa9\x0d\x71\x5b\x16\xb0\x0c\xe8\x40\xc2\x64\x8e\x69\xea\x40\xb7\x15\x68\xa8\xb6\xab\x69\xa6\x06\x25\x47\xd5\x35\x1b\x1a\xb6\x65\xe2\xee\xe2\x2a\x5c\x4b\x97\x6c\x15\xb8\xae\x05\x1c\xdb\x50\x20\x50\x6d\xdd\xb6\x5d\x1d\x48\xa7\x96\xaa\xb9\xc0\x75\x5c\x07\xe2\xa9\xd5\x74\xe8\x98\x40\xc7\x1c\xa9\x41\xc3\xb2\x5d\x47\x01\x8e\xaa\x19\x3a\x74\x80\x53\x28\xb5\x54\x0d\x68\x1a\xee\xf1\x29\x5f\xac\xab\xae\x6d\xe1\x7e\x48\x5c\xc5\x00\xa8\xae\x63\xeb\x3a\xe0\x3b\x01\x34\x15\x3a\x50\x87\xb6\x23\x9d\x72\x3d\x76\x54\x13\x93\xdd\xb0\xa0\xc4\x8d\xce\x56\xa1\xae\x69\xb6\x66\x99\x3c\x29\x2c\xd5\xd0\x74\xdb\x34\x34\xbc\x6c\x73\xba\x99\xb8\x0a\x43\xd3\x2c\x5d\xca\x49\x6c\xe2\x26\x0c\x08\x0a\xb3\x61\xaa\x16\xb4\x0c\xd7\x81\xae\x74\x9a\x4f\x9c\xa9\xba\x86\x69\xda\x86\x6d\x48\xdc\x1c\x53\xce\x80\xb6\x25\xe5\xdc\xe0\xa8\x50\x03\x26\x34\xa1\x21\xbd\xe0\x58\xc7\xc0\x0b\x0a\xcb\x10\x57\x3a\x85\x86\xea\xe2\x45\x62\xea\x0a\x54\x0d\xcb\xb6\xa0\x63\x1a\x12\x84\xaa\xa5\x39\xc0\x05\x86\x02\x54\xe0\xda\xa6\xed\xb8\x52\x8d\x44\xfa\x4d\x7a\x09\x1d\xd5\x82\xae\x6d\x01\x3c\x75\x78\x64\x00\x60\xbe\x76\x54\xdd\x36\x6d\xcd\xa1\xc5\x26\x00\xba\x6b\x48\xd0\x51\x81\x01\xa1\x83\x59\x18\xa8\x78\x01\xbb\x06\x94\xa0\xad\xba\xa6\x0b\x0c\xa8\x93\xd9\x37\x5d\x4d\xc7\x2b\x9b\x30\xb9\xe9\xea\x2e\x61\x0a\xd7\x80\x50\x77\x6c\xfc\xb2\x65\x02\xe0\x18\x26\x5e\xd8\xc0\x36\x2d\x0d\x98\xa4\x54\xd3\x2c\xd3\x32\x70\xa9\x01\x5d\x1b\xb0\x2a\x4c\x53\x03\xd0\x21\x52\xc0\x72\x74\xdb\xa2\x55\x98\xb6\x85\xa5\x09\x2e\x75\x0d\x1b\x98\x3a\xad\xd8\x36\x81\x8b\xf9\x12\x38\x58\xa2\xd8\xac\x0f\x86\x6e\xe8\x80\xb0\x2b\x34\x1d\x13\xd0\x0e\x1b\x10\xb8\xb6\x8e\x4b\x2d\x5d\x33\x80\x6b\x93\xc1\x99\xb6\xa5\x43\x1b\x97\xe2\xcf\xa0\xeb\x30\x4a\xe8\x9a\x66\x91\x62\x17\x38\x50\x77\x5d\x89\x50\xcd\x82\x16\x20\xcb\xd6\x75\x4d\xcd\x30\x01\x2e\x75\x1c\x13\x3a\xb4\xe2\xb4\xf4\x14\xba\x2a\x66\x46\x08\x61\xe1\x65\x57\x35\x2d\xd3\x31\x49\xa1\x63\xda\x9a\xab\x19\xb8\xd0\x01\xc0\x70\x75\x87\x74\x0d\x00\xc3\x70\x2c\xe9\x54\xd7\x54\xcd\xb4\x81\x6e\x92\x65\xa7\x5b\xa6\xa3\x59\x8e\x84\x45\x98\x6b\x02\x13\x90\xae\x69\x3a\xb4\x80\x69\x15\x4a\x31\xd1\x4c\x68\x40\x48\xaa\xe0\x8a\x0d\xfc\xae\xe1\x92\x97\x81\x03\x1d\x36\x1b\xd0\xb5\xf0\x6c\xb8\xaa\x6b\x1b\xba\x6d\x90\x69\x76\x4d\xbc\x1f\xd1\x61\x38\xba\x66\x58\x86\x43\xe6\xd9\x80\xc0\x84\x64\x18\x16\x34\x1d\xd7\x32\x28\x4f\x18\x50\xb7\x48\x15\x3a\x16\x65\x0e\xe1\x09\xc3\x36\x81\x61\xb8\xa4\x0a\x60\xd8\xc0\x75\x48\x15\x3a\xd9\x62\x1c\x4a\x36\xdd\xb1\x4d\xf2\xb2\x6e\x6a\x1a\x04\xb6\x24\x64\xcc\xdf\xa4\x97\xb8\xcb\xba\x05\x4c\x80\x05\x85\x0b\x81\xa3\xd3\x8a\x1d\x07\x6a\xae\x43\x4b\x6d\x68\x40\xc7\x22\x7d\x33\x1c\x0b\x4b\x04\x5b\xd5\x5c\x1b\x40\x88\xcb\x0c\xcb\x34\x75\x48\x0a\xa1\xa3\xe9\xd0\xa4\x53\x84\x25\x86\x4b\x4a\x0d\x4b\x37\xa1\xed\xe2\x77\x81\x69\x9b\xb6\x41\xf6\x2c\xcb\xb5\x1c\x57\xb3\x49\xa9\x66\x63\x42\xe0\x52\xd7\x04\x58\x24\xe1\x1a\x34\xd3\x32\x81\xa3\x63\xb1\x06\x35\x53\x33\x69\x0d\x9a\x03\x0d\x68\xe3\x42\xc3\x72\x0c\x03\xd2\x6a\x1d\x60\x3a\x1a\xc0\xa5\xb6\x66\xdb\x96\xe6\xb2\x3e\x68\xb6\x4e\xf2\x3b\x61\xbe\xd6\x68\x05\x86\xe1\x98\x98\xa5\x00\xee\x0d\xb0\x0c\x9b\x90\xd7\xb2\xf0\x8e\x65\xe3\x52\xe8\x9a\x16\x60\x44\xb0\x5d\xdd\xb5\x48\xa9\xa1\xbb\x26\x74\x01\x99\x62\x1d\x5a\x26\x30\x71\xa9\x09\x2c\x5d\x37\x74\x5c\xaa\xbb\xc0\xb2\x31\x6d\xf2\x52\xcc\x25\xb6\xee\x58\x0e\x64\x2f\x1b\x2e\x16\x13\x3a\x50\x35\x1b\x60\x35\x03\x97\xea\xb6\x85\xe7\x0d\x97\xea\xc0\x32\x80\x46\xbb\xa6\x03\x68\x91\x2a\x80\x6a\x5a\xc0\x36\x4c\x32\x3a\xc7\x31\x1d\xcb\x21\x2f\xdb\x9a\x06\x5c\x40\x4a\x4d\x53\xc7\x3c\x41\x4b\x81\x69\x00\x87\x12\xcd\x32\x75\x60\x90\x2a\xb2\x62\xbc\x56\x6d\xc3\x30\xc8\xcb\x16\x34\x6c\xdd\x32\xe9\x6c\x18\xc0\x71\x75\x5c\x6a\x38\x9a\x4d\x0b\x0d\xdb\x71\x80\x49\x3b\xa1\xeb\x96\x63\x1a\x2e\x99\x65\x4b\x37\x0c\x40\xde\x05\x3a\x84\x8e\xc5\x18\xc2\x34\xa1\x69\x63\x52\x38\x2e\x74\x2d\xc7\x20\xbc\xe3\x5a\xba\x0d\xe9\x9a\xb3\x4c\xdd\x74\x1c\x17\x17\x3b\xae\x0d\x1d\x40\xc9\xa6\x41\xcb\xd4\x49\xa1\x0d\x74\xa0\xd1\x85\x58\x66\xc9\xdf\xa4\x97\xb8\x65\xdd\xc4\xfb\x09\x56\x90\x6c\xd7\x81\xba\x8d\xb5\x0d\x0b\x6b\x5c\xae\xad\x59\xb8\xd8\xd4\x4d\xd7\xb4\x2d\xbc\x9d\xb8\x9a\xa9\xe1\x45\x07\x88\x34\xd7\x81\xed\x4a\x44\x81\x82\xb6\x6e\x43\xa2\x63\x69\x58\x89\xc2\x55\x18\xaa\x69\x69\xba\xeb\x9a\xa4\x66\x4c\x4c\xc3\xc5\xfb\xbb\x8b\x37\x6f\xac\x78\xe9\xaa\x66\x19\x8e\x8d\xf7\x29\x5d\x35\x4c\x07\x00\x52\x68\x1a\xae\xe9\x92\x3d\x0d\xaa\xae\xad\xeb\xba\xa5\x2b\xc0\x50\x35\xac\x16\xe2\x1a\xa0\x6a\x19\x3a\xb4\x69\xa9\x65\x02\x57\xc7\xca\x18\x54\x4d\xcd\x35\x5c\x5c\x6a\xaa\x3a\xc4\x2b\xdf\x21\x55\xe0\x3d\xc2\xb6\x1d\x5c\xec\xba\x78\x55\x91\x97\x0d\x3c\x5d\xb6\x89\x89\x61\xb9\xba\x61\x50\x4d\xd6\xd6\x2c\xdb\x74\xc8\x8c\xea\xd0\x72\xb0\xbe\x49\x7a\x61\xb9\x80\xcc\x32\xde\x08\x20\x19\x84\x01\x74\x9d\xcc\x9c\xa3\x9a\x1a\x30\x6c\x9d\xa8\x2e\xae\xa3\xeb\x86\x4d\x79\x0a\xe2\x3d\x9d\x92\xc1\xd4\xa1\x6d\xd3\x65\x60\xe9\xc0\x00\x84\x64\x50\x37\x34\x3c\x1b\x78\xad\x5b\x06\xd4\x00\x25\x2f\xde\xae\x1c\xbe\x14\xcf\x85\x03\x1d\x60\x6a\xc5\x97\x6d\xd5\xd6\x5c\x1b\x42\xca\xd9\x1a\xc0\x43\x96\x80\xa3\xea\xa6\x6b\xdb\xba\x45\x16\xb3\x09\xa0\x89\x05\x2b\x70\x55\x4d\x73\x6d\x4b\x27\x1c\xe8\x68\x58\x3f\xd5\x25\xb2\x4e\x0c\xd7\x20\xa9\x58\x54\x17\xb8\x96\x8b\x15\xfd\x42\xa9\xa6\x69\x06\xc4\xfc\xce\x17\x9b\xaa\x0e\x0c\xd7\x30\xc9\xcb\xc0\x06\x96\x05\xe9\x64\x18\x86\x03\x6c\x1b\xf7\xc2\x76\x35\xdb\xc2\x1c\x61\x60\x2d\xd0\x81\x26\x9e\x4f\x47\x35\x34\xd7\xd5\x75\x83\x4c\xb3\x66\x38\xba\x6e\xe1\x81\x38\x96\x63\x01\xe8\x50\x8e\xd0\x4c\xdb\xb1\x25\x31\x5f\x62\x5d\x00\xb3\xbf\x6e\x3a\xc0\x26\xdc\x6d\x98\x58\x10\x4a\xa7\x58\x85\x34\x0d\x68\xe1\x81\x5b\xaa\x6d\x58\x3a\xc0\x5b\x95\xa5\x1a\xae\xe6\xd8\x0e\x2d\x85\x9a\xa1\x61\xa9\x8d\xd5\x6e\x2c\x3f\x48\x15\xb6\xad\xb9\xd0\xc5\xa2\xc9\x54\x5d\x07\xda\x00\x90\x35\xe6\x40\x60\x98\x8e\x04\x4d\xd5\xc6\x3a\xbe\x43\xde\x75\x0d\x0b\x02\x2c\x1d\x4d\xd5\xb4\x2c\x60\xe0\x1a\x6c\x15\x40\x4c\x16\x87\xd4\xa0\x3b\xba\xa6\x19\x84\x5b\x74\x00\xb1\x1a\x85\x5f\x86\xa6\x83\x95\x20\x5c\x6a\x1a\xa6\xeb\xe0\x0d\xcc\x54\x21\x16\x09\xae\x4d\xa7\x44\xd3\x74\xc3\x20\x55\x00\xbc\x8b\x02\x32\x81\x9a\x69\x00\x03\xab\x13\x58\xc1\xd6\x81\x06\x08\x6f\xe9\xc0\x36\x6c\xa8\x93\x2a\x1c\x08\x4d\xc3\xa1\xf2\xca\x72\x4c\x90\xf6\x02\xe8\x06\x16\x37\x78\x22\x2c\x60\xb9\xb4\xcb\x86\x4b\xd6\x1d\x66\x06\xcd\xd6\x1d\x52\x83\x6d\x19\x84\x68\x78\xd7\xc3\xfb\xa6\xc1\x08\xa1\x69\x36\x20\x72\x17\x62\x2d\xd4\x31\x29\xd5\x74\x88\xb7\x56\xcc\x0b\x96\x69\x40\x13\x52\x0a\x43\xdd\x84\x80\x2f\xc5\xd3\xe1\xe8\xae\x0d\x4d\xab\xf0\xb2\x4d\xf6\x6f\x40\x85\x3f\x84\xb6\xa1\xb9\xb8\xd0\x00\xa4\x09\xb2\xa5\x38\x00\xf3\x0d\x51\x8b\x2c\xcb\x00\xba\x43\xd6\x98\xad\x5b\x98\x9a\xf8\x65\x47\x83\xc0\xa4\x82\xdb\xd0\xa0\xeb\x9a\x76\xa9\x54\x33\x4d\xd3\xd2\xa8\x6a\x96\x15\xdb\x98\x10\xe4\xf0\x87\xf5\x2d\x88\xff\x72\xe8\x74\xe8\xd0\xd1\x48\xd7\xf0\x79\x55\xa7\xd3\xa1\x43\xdb\xd5\x2c\xda\x0b\x43\xb7\x4d\x48\x4f\x84\x00\x40\xc3\xd6\x1c\xfc\x32\xd4\xa1\xe3\xba\x8c\x29\x0c\x0b\x58\x96\x24\xe6\xcc\x12\xcb\x62\x49\xe8\x5a\x96\x55\x62\x59\x2c\xd3\x34\x13\xe8\x45\x96\xc5\x27\x56\xc3\xd2\x8c\x22\xcb\x42\xd5\xb2\x4c\xa0\xc3\x12\xcb\x42\xd5\x06\x98\x29\x0b\x2c\x0b\xb1\x52\x6e\xe0\x43\x36\xcf\xb2\xba\xaa\x41\xdd\x02\x4e\x89\x65\x75\xbc\xbb\x91\x53\x18\xcf\xb2\xf8\x08\xa5\x61\x65\xb8\xc0\xb2\x3a\xde\xdc\xe8\x5e\xc1\xb3\x2c\x96\xee\x8e\x6e\x82\x22\xcb\x1a\x2a\x04\xc0\xb2\xcd\x22\xcb\x1a\x58\x3e\x69\xa6\x51\x62\x59\x43\xb5\x5c\x4d\xb7\x61\x81\x65\x0d\xd5\x71\xb1\xf0\x29\xb0\x2c\x3e\x5e\x3b\x8e\x09\x4a\x2c\x8b\x1b\x86\x36\x51\x12\x39\x96\xc5\x23\x72\x2d\x7c\x6c\xe4\x59\x36\x2f\x2d\xb0\x2c\xf7\x32\xc7\xb2\xa6\x0a\x20\xb0\xa8\x72\x9e\xb1\xac\xa1\x3a\xb6\xe9\xda\x5a\x89\x65\x0d\xac\xb3\xe3\xd3\x64\x81\x39\x0d\x15\x1f\x1b\x74\x5b\x2f\x94\x62\xa2\x61\xe1\x5c\x62\x59\x4c\x62\xcd\xd6\xed\x22\xcb\xea\x98\x21\x0d\x47\x2f\xb2\xac\xae\x42\x08\x35\xc3\x76\x8a\x2c\xab\xab\x9a\x66\x59\xb6\x5e\x64\x59\xa8\x3a\xba\xe3\x00\xb7\xc8\xb2\x39\x67\x16\x15\x58\xa8\x9a\x40\xc7\x07\xd1\xa2\x06\x0b\x55\xd3\xc2\x9b\xa8\xcb\x6b\xb0\x58\x97\x77\x81\xeb\xda\x05\x15\x16\xaa\x8e\x0d\x75\x3c\x79\x05\x1d\x56\x27\x2b\xd5\x30\xf4\x82\x0e\xab\x63\x81\x53\x56\x61\xb1\x52\xa0\x6b\x90\xd5\x90\xe9\xb0\xba\x6a\xbb\x36\x3e\xd6\xf2\x3a\xac\x81\xf7\x10\xc3\x74\x61\x41\x87\xc5\x94\x77\x6d\xdb\xd6\x8b\x3a\xac\xa1\x9a\xba\x0b\x4c\xcb\x2e\x28\xb1\x06\x3e\x62\x5b\x78\x42\x78\x25\xd6\x50\x1d\xac\xac\xa4\x84\x48\xb5\x58\xcc\x85\xc0\x34\x4c\xa3\xa0\xc5\x9a\x2a\xd0\x1c\xdd\xd4\xec\x82\x16\x9b\x97\x16\xb4\x58\x93\x8c\xd4\x02\x46\x41\x8b\x35\x54\x17\xef\x8b\xa6\x51\xd0\x62\x0d\xd5\xc6\x13\x89\xf5\x23\x5e\x8b\x35\x54\xc3\xb6\x1d\xc7\x30\x0a\x5a\xac\xa1\x02\xc3\x34\x5c\x60\x14\xb4\x58\x4c\x36\xc7\x34\x6c\xbb\xa8\xc5\xea\x98\x16\x58\xdc\x14\xb4\x58\x3c\x1f\x16\xb4\x6c\x5e\x89\xd5\x55\xcd\xd6\x1c\x1d\x58\x45\x25\x16\xaa\x8e\x69\x1a\xa6\x6d\x17\x94\x58\xcc\x13\x58\xce\x81\x82\x12\x0b\x55\xd3\x71\x0c\x62\xd9\xe2\x95\x58\xa8\x1a\xf8\x15\x5b\x2f\x68\xb1\x58\xd7\xd4\xf1\xe9\x54\x12\xf2\x25\xb5\x10\xd8\x9a\x69\x42\x68\x2a\x8e\x0a\x34\xd3\x36\x1c\xc7\x25\x07\x63\xc3\x04\x86\xe5\x5a\xb8\xd8\xb4\xa0\x6d\x6b\x26\x3e\xb5\x41\xe0\x68\x86\x49\x2c\x18\x0e\xd0\x74\xe0\x90\xe3\xb2\xa6\x1b\x8e\x41\xaa\x30\x2c\x03\xea\x86\x63\xd2\x15\x69\x02\x5b\xd3\x5c\xc5\x51\x2d\x03\x9f\x39\xa9\x58\xb0\xa1\xe5\x1a\x16\x50\xb0\xae\xa7\x39\x9a\x66\xb2\xf3\xbd\x65\x00\xdb\x55\xf0\x61\xc3\x70\x4c\xdd\xa0\x2b\x12\x1f\x3f\x1d\xd7\x51\xf0\x91\xd3\x71\x2d\xdb\x76\x98\x95\x01\xcf\x84\xe2\xaa\x96\x89\x05\x12\x56\x16\x6c\xd5\x36\x35\xd7\x04\x96\xe2\xaa\x0e\xe6\x1b\xcd\x81\xac\x17\x1a\xd0\xf0\x0a\xc1\x24\xd0\x5c\x87\x75\x19\xd8\x2e\xd1\x58\x35\x55\xd7\x4d\xaa\x6f\x38\x58\xea\xe9\x3a\x24\xa5\x86\xed\x1a\x96\x6d\x52\x5a\x60\x6d\xdb\x81\xb8\xd8\x82\xba\xa1\x93\x1a\x6c\x0d\x6a\x58\x7d\xd3\x30\xdb\x40\x03\x2f\x26\x47\x75\x2d\xa0\x19\x78\x42\xf2\x52\xcc\xf4\xba\xe6\x18\xb0\xf4\x32\x5e\xfd\xc0\x02\x3a\xb1\xbc\x9a\x16\x84\xf8\x0c\x42\x24\x85\x0d\x4d\x93\xbc\xab\x03\xcb\x74\x2c\x7a\x74\x03\x58\x0a\xd9\x00\x17\x6b\xb6\xe6\x1a\x86\x89\x27\x15\xda\x9a\x63\x02\x4c\x36\x5b\xb7\x1d\x7c\xfe\x2e\x96\xea\xae\x66\x18\x80\x1d\x79\xf2\x62\xa0\x03\xdd\xd4\x5d\x66\x50\x30\x34\xc3\xc2\x13\xed\xd8\x8e\xe6\xba\x80\x58\x0e\x34\x53\x03\x3a\xb1\xab\x59\x16\xb4\xa9\x6e\xe2\xaa\x78\x73\x87\x16\x9e\x7e\xc3\xb0\xa1\xe3\xd2\x1e\xdb\x1a\xb0\x4c\x1b\xcf\x33\xb4\x5d\x43\x37\x2d\x76\x12\x87\xd0\x76\xf0\xbb\xc0\xd1\xa0\x03\x4d\x83\x8a\x10\x08\x5d\x4b\xc3\xc5\x1a\x3e\xb8\xb8\x86\x45\xe8\x86\x0f\x4a\x84\xaf\x08\x37\x6a\x58\xd2\x0b\x59\xf3\x37\xde\xe8\x3f\x8d\xc8\x6d\x87\x1c\x84\xc1\x5f\x28\x0a\x8b\x97\xae\x9d\x83\x95\x86\x5c\x24\xa5\x17\x35\x0f\x7d\x65\x84\xfb\xbd\xf0\x12\x6f\xaf\xc2\x84\x7e\x39\xff\xe5\xbb\xff\xfc\xe7\xe9\xbc\x43\x98\x90\x28\xa2\x27\xf1\xce\x37\x2b\x2f\x6a\x0a\xea\x49\x87\xcd\x02\x7a\x2a\x91\x3c\x86\xd2\x23\x90\x67\x07\xa1\x3c\xe5\x6b\x5a\x76\x87\xc4\xae\x9c\xbe\x47\x75\xd0\x03\xe2\xf7\x7f\xa1\x09\x45\x04\xbe\xad\x1d\xee\x66\xdb\x31\x66\xc2\x9b\xc1\xc3\xaa\xc7\x91\x10\x7a\x08\xd7\x84\xb2\x16\x52\xaa\x68\x65\x37\x4e\x71\xd5\x1d\x73\x7f\x0f\xef\x6b\xb1\x57\xa0\xd2\xab\x6e\x3d\x18\xec\x4b\x57\x78\xa3\xfe\x4a\x3c\x8d\x91\x0b\xc9\xca\x9e\x7a\xc9\x80\x6b\x71\x81\x0c\x19\x20\xd6\xb2\x27\x2a\x7a\x97\xa0\x60\x71\x74\x97\x78\x4b\xda\xb8\x7c\x3f\x4c\xb8\x05\xe1\x02\x4d\xfd\x05\x0a\x12\x3f\xb9\x7d\x94\xca\x98\x7d\x91\x72\x17\x20\xf8\xe9\x7f\x7f\xb8\x02\x62\x29\x47\xd7\x97\x22\x3f\xce\xe1\xb0\x3a\x78\xbe\x11\xef\xd2\x4d\x8c\xa4\xec\xab\x78\x60\x60\x4c\x56\x81\xf4\xfb\xef\x72\x71\x95\xc1\x2c\xc6\x9b\xcb\xfc\x5c\x5c\x6d\xb2\x74\xd7\xe8\x44\x45\xfa\x48\xc1\xbd\x86\x76\x50\x92\x82\x14\xee\x0b\x77\x91\x7d\x93\x36\x8d\xd7\x0e\x9e\x7e\xbe\xf7\x74\xfd\xf1\x1d\xfc\xfd\xf7\x04\xbf\xb8\x0e\x57\xfe\xfc\x56\x3a\xc1\x2f\x13\x10\xb4\xdf\x7f\x4f\xd7\xdf\x3d\xf9\x97\xfe\x6f\xd6\xde\x1f\xeb\x08\x5d\xf8\xef\x24\xf2\x5a\xde\x5e\x4c\xe3\x4f\x04\x4f\x05\xed\x44\xc8\x5b\x88\x9a\xe9\xee\x33\xd5\x71\x78\xb5\x83\xa3\x6d\xb6\x74\xba\xae\xcb\x75\x5d\x4d\x25\xcf\x7d\xa7\x71\xec\x8c\x39\x9a\x59\x63\x0c\xca\xe1\xff\x6f\x66\x88\x2d\x28\xdb\x87\x11\x3a\x0d\xa6\x66\x28\xb8\x9d\xc6\x6e\x8a\x3b\x29\x9c\xdc\x41\x1e\x59\x73\x2f\xcb\x63\x15\x46\x03\xb6\x9e\x26\x09\xff\xd0\xaa\x35\xee\xdb\x5e\xa9\xd5\xd7\xbf\xe9\x6f\xbf\xf7\x37\xcb\x4e\xd1\xf7\x79\xf4\xfc\x8a\x69\xae\x03\x62\xe7\xc9\xf4\xd4\xa8\xd8\x24\x86\xe3\xc1\x62\xe5\xa5\x6a\xb0\x9f\xa9\x68\x79\x28\x21\xe7\x66\xdb\x3f\x34\x9a\xe2\x47\x8d\x13\x1e\x9d\x05\x38\xb0\xf1\x66\xe9\x86\xf1\x98\x93\x70\x3d\x8d\x13\x2f\xea\x0c\xd3\xd7\xb0\x23\xcf\x23\x3f\xf1\xe7\xde\x4a\x16\x11\x61\x5b\x84\xaa\x27\x89\xb4\x42\x5e\x9c\x48\x61\x80\xa4\x4b\x0a\xaf\x45\xe2\x2a\xa5\x30\xa0\xa1\x66\x44\x8c\xf9\xb1\x74\xe1\xf9\x2b\x3f\x58\xaa\x5d\x25\x60\xcd\x68\x6e\xbc\x28\xf0\x83\xe5\x43\x0e\xe6\xd2\x8b\x25\x4f\x62\x1d\xd9\x76\x3c\x6b\x2f\x8e\x77\x36\x9e\xd5\xaa\x30\x8c\x58\xf2\x22\xac\x41\x92\x16\x3b\x77\xbc\x54\x29\x75\xba\xc7\x15\x05\x61\xb1\x76\xb5\x05\xbc\xa6\x67\x56\xc6\x92\x27\x7b\x47\x47\xea\xee\x71\xef\x55\x08\x43\x58\x87\x60\xd8\x09\xc0\x50\x2e\xc4\x45\x8b\x30\x0b\x05\xbe\xa4\x0f\x08\x33\x21\x8a\x7f\xc0\x3d\x7f\xb2\x58\x44\xa9\xbb\x3d\x8b\x3e\xc8\x8b\xb6\x08\xbd\xce\x0e\xd1\x14\x56\x01\x65\x19\x10\x19\x21\x5f\xe4\x25\xfd\x11\x1b\x5a\xa1\x46\x8a\xe1\xd4\x78\x9c\x2f\x51\x7c\xc9\x22\xcb\x9f\x07\x71\xe2\x05\x73\x96\x9e\x93\x45\x59\x17\x4e\x3e\xa5\x7a\x8c\x1e\xf5\x28\x69\xfc\x3a\xd9\x1e\xe5\x1b\x3f\xb9\x0c\x37\x78\x77\xdd\x04\x84\x6c\x34\xf9\x7b\x0b\xa7\x6c\x0f\xeb\x51\x47\xa9\x6c\x6e\xfb\x02\xb0\x8f\x8a\xff\xc1\x31\x1d\xff\x77\x07\x24\x10\x9e\x37\x7b\x4b\x83\x5d\x5b\x61\x48\x84\x22\x05\xb7\xca\xc0\xaa\x2e\xc2\xe8\xda\x4b\xa6\xc1\x06\xab\x74\xb2\x22\xaf\x57\x9b\xc8\x5b\xf9\x7f\xa1\x81\x6a\xf2\x1e\x05\x2b\x92\xee\x94\xf3\xc8\x3e\xbc\x7e\xec\xff\xf8\x3f\xff\xf9\x53\x5b\xfc\x43\xac\x1f\xff\xf1\x87\x17\x2d\x35\x59\xa1\x7f\x00\x59\x91\xe9\x08\x08\x18\x55\x3a\x42\x59\xc9\x73\xc6\x2b\x69\xaa\x78\xfc\x26\xd6\x90\x09\xf4\x71\xaf\xcf\xb0\x9c\xec\xf5\xc5\x3a\x0a\xd7\xfc\x07\x57\xe8\x56\x56\xe4\x3c\x25\x75\x18\x11\x44\xf9\x0b\x7f\xc5\x80\xe7\xc3\x20\x7b\xf7\x71\xf6\x57\x5d\x9a\x5a\x27\xad\x19\xcf\x9a\x58\xd9\xe7\x9e\xd3\x30\x2d\x68\x32\xd5\x3f\x6f\x93\xe4\x33\xfe\x06\x93\x38\x7e\x1e\x5c\x84\xe9\xfa\x86\x30\x8f\xca\x07\x46\xbe\x75\xb0\x90\x37\x6e\x54\x59\x55\x64\x3c\x64\x99\x93\xff\xcb\xe0\xb3\x5b\x83\x3b\x85\xc0\x22\x6c\xbc\x9b\x41\x46\x07\x5a\xaf\x55\x82\x3f\xec\xb4\xd7\x16\xb6\x5b\xab\x06\x79\x03\xd4\xe4\xf6\xc6\x54\xe7\xb3\x7b\x33\x55\xc4\x51\x38\xc2\x61\x2e\xe0\x37\xaa\x42\x9f\x8a\x7b\x55\xa9\x31\x92\xcc\x9e\x54\xde\x5e\xb1\x22\xfc\x9a\x75\xb3\x43\xb7\x52\x00\x74\x21\x72\xfe\x36\xc3\x2f\xe7\x53\x1f\x91\x00\xa5\xaa\x7b\x93\xa0\xd3\xf7\xe7\x91\x17\x2c\xba\x8d\x2c\x07\x91\xef\x13\x7a\xca\x45\x16\xe2\xea\x7f\x22\x21\xd3\xff\xa2\x8b\x8c\x90\x0b\x58\x8a\xec\x45\xbe\x37\x65\x39\x20\xca\xf9\xe6\x71\x2f\x37\xbe\x9a\xc5\x5a\x17\x20\x77\xb9\x11\x91\x26\xdc\x19\xd6\x93\x68\xf8\xaf\xc6\xf7\x79\xbb\x48\xc6\x1a\x85\xa7\x46\xe9\x61\x8a\x81\x5b\x0b\x70\x2d\x50\x5f\x40\xde\xe7\xce\xf7\x47\xfd\x35\x07\x17\xb7\xd0\x21\x44\xb2\x33\x0a\x4e\x8b\xc4\xa3\x42\xf5\xc3\x4a\xbc\x0a\xdb\xe9\x04\xbe\x89\xf6\x64\x96\x6a\x81\xfc\xde\x94\x6d\x61\xeb\x95\x37\x47\x97\xe1\x6a\x51\x4c\xa8\x90\x6a\xec\x2c\xa1\x02\xd4\x0b\x09\x36\xa0\x31\x13\xf2\x2c\x5b\xd9\x25\x1a\x0c\x01\xa5\xe1\x46\x81\xb7\x7a\xba\x6c\x38\x1c\x10\x26\xa2\xd6\x54\x79\xf1\x51\x7a\x10\xcb\xed\x39\x7c\x32\x15\x45\x7e\x7c\xbd\x59\x25\xfe\x9a\x28\x0c\x8f\x23\xf4\xe7\xc6\x8f\xd0\x82\x5e\xb7\xd2\x40\xc8\xba\x81\x43\x2c\x1f\x48\x63\xac\xad\x5b\x82\x91\x49\x73\xb4\x64\x44\xc1\x87\x09\x85\x9e\x28\xc6\x47\x9c\xa6\xda\x4e\xff\xac\x23\x9d\x0e\x6a\x65\xed\xbe\x65\x52\x33\x22\xd4\x5f\x07\xd7\xde\xfc\x76\x06\x80\xe9\x44\x15\x8a\x54\x3b\xe0\x00\x9e\xa1\xdd\xe1\x23\x76\xa6\xf4\xa5\xb8\x67\xac\x90\xa2\x29\xf5\x81\xb7\x80\xbc\x70\x06\xd5\x1f\x75\xbc\x94\xd5\xbc\x25\x04\x58\x65\xf5\x58\xb3\xca\xf1\x2f\xe7\x24\x46\x02\x5b\x00\xdc\x64\x37\x71\x7e\x79\x87\xec\xcf\x91\x62\x66\x6b\xdb\xe8\xd9\x53\x3d\xef\x64\x1d\xac\x94\x98\xb9\xfb\xee\x1a\xb6\x70\x37\x20\xa1\x04\x62\x98\xfd\x8e\xc8\x46\x95\x1a\x45\xb0\xd2\xc3\x62\xfc\xf5\x71\x36\x30\x76\x18\x78\xd8\x0d\xcc\x69\x90\xfc\x39\x4e\x48\x17\x71\x3f\x23\x08\x7e\x17\x6d\x12\x3e\xd5\x00\x85\x92\x7d\x18\xac\xda\x6e\x44\x7a\x47\x81\x5e\x2f\xce\xd9\xa2\x2a\x9f\xcc\xba\x7b\xf5\xf4\xc1\xf0\xda\xa9\x00\x77\x05\xf2\xdb\xdd\x95\xf8\xce\xcf\x34\xf9\xdd\x41\x7e\x2b\x92\xdf\xf6\xd4\x88\xa5\x21\xc8\x35\x4c\x8e\x03\x76\x62\xc0\x3d\x00\xca\x19\x15\xc1\x53\x39\x4b\x97\x96\xa6\xb8\xaa\x97\xf2\x50\x20\xe5\xa1\x88\xfb\xb7\x97\xee\xfd\x25\x3b\x9f\xbd\x6d\xcb\xa3\x64\x25\x49\x42\x47\x78\xff\xb6\xcd\x00\x8a\x37\x03\x0d\xcf\xcd\xd0\x2b\x93\xf6\xdc\x6b\x5b\x00\x75\xb6\x1c\x51\xa8\x95\xa7\x2f\x80\xd7\x28\x82\xbd\x49\xa5\x0f\xb3\x7b\xd7\xd1\xb5\x78\x40\x12\x1b\x95\x44\x3b\x35\x1b\x7f\x44\x02\x5e\x6c\xd5\x32\x6b\x16\x0a\x91\x55\x3f\x84\x0b\x74\xec\xc5\x73\xb1\x8d\x01\x93\x5c\xf5\x56\xeb\x4b\x4f\xc5\xef\x14\x57\x8f\x52\xad\x68\x81\x3a\xd4\x44\x5e\x6a\xaa\x8a\x5e\xb5\xb6\xf4\x8a\xca\xa4\xd6\x6e\xb1\xba\x5a\x3a\xc6\x2a\x13\xf4\x6c\x2c\x9d\xbb\xea\xcd\x67\x73\xac\x57\xb5\x98\xd5\xc9\x1a\xbb\x57\x12\xa7\xbd\xd9\x8a\x45\x47\xa9\xfe\x27\xa9\x9a\x1d\xd0\xcc\x0e\x32\xd4\x5c\x56\xf1\xb4\x68\x52\x6c\x86\x6d\x61\x8e\x92\xc2\xda\x36\xec\xad\x42\x46\x06\xd5\x07\x35\x4c\xd0\xd6\xb3\x9a\xd3\x78\xcd\xe2\xe8\x99\xaf\xa7\xc7\xf0\x8a\x6b\x0b\x08\x9e\xec\x6c\x80\x85\x05\x3b\x38\x7b\x4f\xa3\x8d\xa1\x3f\x83\x91\x7b\x19\xb6\x74\x76\xcf\x63\x55\x01\x0e\xca\xc5\xe3\x93\xbf\xba\x25\xec\x80\xbd\x04\x3b\x0a\xa8\x94\xef\x6a\x6c\x3b\xe0\x2c\x41\x4e\x33\x45\x60\x2c\x18\xa8\x1f\x56\xed\x04\x02\x7c\xe1\x9e\xae\x3e\xc3\x0b\x3b\x21\x0c\x27\x29\x56\xf0\x92\x60\x04\x67\xf9\xa4\x52\xc8\xe1\x8b\x28\xbc\x9e\xa2\x20\x89\x7c\xe6\xb9\x81\xdf\x9a\xfa\x31\x59\x5c\x8b\x29\xdd\xb0\xfc\xe0\x6d\x98\xa5\x9e\x22\x57\xfa\xf3\x30\x48\x3c\x9f\x40\xd5\xcd\xc3\x60\xee\x91\xaf\x84\x60\xc6\xab\xf0\x06\x45\x73\x2f\x46\x69\x96\xab\x81\x37\xfd\xe5\xab\xf5\x07\xbf\xef\x27\x4e\xd2\x7b\x95\xe0\x1d\x5e\xff\xa2\xbf\x5b\x6a\x5e\x4b\x82\xf7\x08\x79\x0b\x4c\x81\x3c\xbd\xd4\x0f\x34\x2c\xe3\x29\x8a\xe7\x91\x9f\x5e\xbb\xbf\x66\x17\xf5\xdf\x6e\xbc\x68\x21\x2b\xf2\xe9\xa5\x17\x25\x4f\x52\xfe\x59\xf8\xf1\xda\x4b\xc8\x0c\xa7\x37\xfa\x1d\x73\x5b\x65\xf9\xe1\x17\xf3\x62\x28\x48\x25\x43\x7c\x56\x4d\x31\xfd\xd5\xb0\xf4\xf1\x74\xbe\xf8\xc4\xf1\x50\xab\x9a\x6e\xe4\x1d\xa4\x8e\x27\x4d\xb4\xe4\x8e\x4f\x73\xc2\x73\x26\x82\xa0\x3d\x75\xbc\x2c\x2b\x32\x27\xa0\x6b\x93\xc2\x67\x9f\xe5\xc9\xe4\x85\xe6\x01\xbd\xe0\xb5\x90\xff\x0b\x9c\xe2\xcd\x13\x68\x4c\x08\x9f\x1b\x88\xeb\x3e\x1b\xff\xa8\x37\x30\x27\x3c\xe7\xb0\xc5\x2f\xea\x9a\xe4\xe7\x80\x4b\xe8\x5f\xc9\x7e\x0e\x8c\xe2\x71\x17\x98\x03\x53\xc2\x0b\xed\xca\x45\xc4\xfa\xee\x71\x8c\x3d\x33\x9e\x17\x9d\x24\xed\x59\x39\xb9\x3b\xe7\x2b\x4a\x56\x87\x38\xa2\x25\x9b\x6e\x11\x3b\x5f\xa2\xd5\x5a\xce\x93\x92\xcb\x2f\x37\x71\x22\x9d\x23\xc9\x93\x08\xfe\xae\xf4\xf4\x87\xd7\xd2\x65\x18\x27\x78\x08\xaa\x44\x9e\xb2\xcd\x46\x02\x53\xcb\x90\xe6\x97\x5e\xe4\xcd\x31\x5d\xa4\x23\xea\x47\x16\x2b\xd2\x0a\x25\x09\xf9\xc3\x0b\x16\xd2\xe5\xed\xfa\x12\x05\xf1\x84\xfe\xba\xa6\xf5\x2f\xfd\x40\xba\xf1\x93\x4b\xc9\x63\x2f\xab\xd2\x8f\xc1\x1c\x49\xf3\x08\x79\x09\x5a\x28\xd4\xc7\x79\xee\x05\x41\x48\xba\x43\x97\xf1\x82\xbf\xf7\xe0\xcf\xfb\xdc\x80\x12\x14\x93\x4d\x36\x4b\x6a\xff\xff\x9d\x79\xd3\xbf\x9e\x4c\x7f\xd3\xa6\xee\xec\x28\xff\x7b\x3a\xbb\xd3\x14\x0b\xde\x73\x4f\x27\x5f\xff\x8d\x91\x22\xed\xa6\x98\x0c\xf2\x6c\x26\xf2\x25\xe1\x3a\xc1\x8b\x6e\x9e\x29\x2d\x3e\x71\x4f\x57\x1f\x0a\x2c\x42\x53\x39\xc9\xe5\x0c\x4d\x45\xb3\xc8\x71\x76\x8d\xa2\x38\x0d\x89\x10\x64\xb2\x48\xeb\xb1\x4b\xe6\xab\xa2\x00\x66\xdc\xe7\x30\x91\x3e\xc5\x53\x9d\xf3\x74\x1c\xcd\x2b\xbe\x17\x72\x8a\xd9\xdc\xf3\x18\x50\x40\xb3\xbd\xf0\xd1\x6a\x11\xa3\xb2\xf3\x68\xbe\x10\xf4\x92\xa1\x47\x0e\xd0\x0d\xe3\xfc\xb2\x5f\x08\x0d\x00\xe9\xed\x23\xec\x28\x72\x82\xde\x25\x53\x3f\x58\x6f\x4a\xab\xb8\xe4\x1e\xc0\xed\x81\x79\xe2\x58\xb2\x35\x52\x6a\xcd\xd2\xc4\x79\xe9\xae\x4e\xfb\xc4\x32\xe7\x8a\x58\x27\xdd\xbe\xb3\x1d\x7d\x96\xa5\x7d\xa4\xd6\xfc\xc2\x5e\xd2\xc3\x37\x59\x3c\x28\xf4\x6e\xed\x05\x0b\xb4\xc8\x3c\x61\xf9\xad\xb4\x6d\x68\xe4\x8a\xbf\xa4\xa7\x70\xbf\xa4\xa3\x1f\x59\xea\xd4\x49\x61\xe0\xe6\x78\x03\xaf\x18\x82\xc4\x6c\x02\xd3\x90\x3f\x6f\xbe\x6a\x70\xbd\xab\xe3\x0a\x21\x6b\x1a\x0a\x50\xe4\x28\x5c\x21\x51\xde\xae\xf4\x8b\x4b\xc8\x3f\xfc\x29\x7b\x5b\xec\x50\x5d\x46\x4a\x6f\x18\x0c\x2f\xef\x3b\x73\x7d\x87\x70\x8d\x6f\x6e\x25\x6f\xb1\xf0\x83\xa5\x44\x86\x26\x25\x21\x0b\x37\x49\x55\x95\x58\xa1\xe9\x9c\xfc\xd5\x4a\xf2\xd6\xeb\xd5\xad\x94\x5c\xa2\x6b\xfc\x9e\xb7\x5a\x49\x49\x78\x85\x82\x38\x15\xe3\x44\xc4\xfb\x41\xa9\x86\xfe\xe1\x1e\x6f\x2e\x91\x74\x11\xae\x56\xe1\x4d\xde\x31\x2f\x42\xa4\x7d\x1f\x2d\xc6\x68\xbc\xe2\xc9\x5f\x9d\x21\x87\x4e\xf7\x94\x9e\xd8\xc3\x5c\x15\xa5\x9a\x73\xa6\xd5\x15\x75\xe8\x85\x1f\x7b\xe7\x2b\xba\xc0\x8a\x79\x5c\x2d\x2e\xb6\x59\x29\xb8\x19\xcc\xb2\x7b\x81\x27\xa7\x2f\xf0\x92\xc3\x8c\xf3\x94\xbe\x1a\xcb\x1d\x56\x41\x13\xcb\x92\x78\x4b\xbf\x07\xd7\xbe\xe2\x3f\xd8\x86\x71\x9d\xf2\x76\xb3\x25\x87\xa6\x23\xa9\x32\xe9\x83\xf3\x68\xd6\xb5\x07\x61\x53\x1a\x52\xbb\x05\xa3\x7a\x78\x1c\xcf\x59\xcc\x6b\x3f\xce\xa5\x26\x8f\x12\xff\x12\x16\xba\xed\xc3\xc1\x6d\x49\x71\x99\xe7\x24\x3d\x59\xb6\x72\x5e\xe1\xc2\xba\x9b\xce\x50\x0c\xc5\xa2\x93\x55\xa3\x5f\x0f\x62\x63\xb9\x9c\xd1\x8b\x57\xc9\xf8\x1c\xa4\x5c\xa7\xd7\x91\x1f\x27\x7e\xd0\x22\xf7\xab\xa1\x41\xda\x2c\x57\x88\xc5\x1e\x42\xc5\x24\x27\x44\xb1\xec\x79\x76\x7b\xed\xbd\x45\xc3\x5d\x52\x6b\x2f\x6c\xc7\xd9\xf8\xfa\x4c\xc4\x70\x6a\x60\x12\x0c\x18\x79\x63\xd4\x61\xe9\xbe\xb8\xc2\x2f\x40\x90\xeb\x2d\x3b\xf0\xbb\x65\x8b\x40\x5a\xc6\x1d\x09\xaa\x6f\x38\xe2\x43\x83\x98\x59\x22\x44\x36\x97\x7e\xbc\x52\x4a\x1e\xd7\x42\xb3\x6e\xab\xda\x19\x78\x2a\x28\x2d\x74\x6a\x3b\xea\xf4\xe1\x20\x36\xdb\x3a\x7f\x26\xeb\x20\xd9\x2e\x32\xfb\x51\xcf\xec\x99\x9d\x6c\x15\xc3\xf2\x67\x0a\x18\xb5\x29\xff\xa2\x80\x7b\x33\x3e\x34\x04\xbc\x99\xcd\x50\xdd\xd1\x96\xe3\xd2\x21\x69\x0d\x49\x3e\x6c\x54\xc8\xd0\x38\xb6\x27\x63\xb7\x50\xda\x41\x09\x35\x73\x83\x29\x19\xc4\x94\x67\xb6\x0a\x97\x29\xf8\xf0\x97\x9a\x88\x1f\xe7\x49\x24\xa9\x9b\xf9\x2c\x77\xb4\x4a\x7d\xaa\x3a\x5b\xc7\x80\x42\xc0\xbe\xfb\x7b\x71\x76\x0a\x42\x6e\x54\x12\x2c\xc5\x56\x1c\xc5\xc5\x5b\x5e\xb1\xe2\x96\xef\xb0\xb6\x52\x48\x44\x39\xc4\x27\xaa\xa9\xc9\xf6\x00\xcd\x34\x5f\xa4\xc2\x23\x96\x50\xcb\xcb\x35\x3e\x0f\x93\x0b\x21\x3f\xa6\x30\x26\xe4\x98\x9c\xaa\x6b\x01\xe6\x20\x7a\x9b\x53\xb2\xd5\xb0\x74\x54\x9b\xc8\xc7\x9f\xb1\xc3\x38\x7f\xef\xc4\x9b\x56\xb9\x6b\xa8\x15\x1a\x02\xd2\x55\xb9\x83\xd9\x93\x4b\xa1\x7d\x02\x48\x59\x3c\x07\xee\x9b\x5f\x2f\xe2\x46\x80\x94\x27\xf3\xd4\xd6\x92\x5d\xf0\x9c\x16\x96\x72\xfa\xb3\x74\xdf\x51\xbc\x98\x11\x47\x57\xb6\xe2\xa9\xd0\x8b\x19\x8a\xa8\x42\x2e\x66\xec\x02\xb0\x8a\x22\x3f\x5e\xf9\xc1\x15\x09\x34\x65\xd2\xc2\x99\xe1\x6a\x69\x59\xb6\x73\x76\x97\x5c\x1d\xc4\x61\x3f\xe0\x95\xb2\xb6\x40\xf7\x0d\x2a\xd8\x17\x4f\x12\xa1\xeb\x4d\xa7\x74\x9b\xf5\xd9\xec\x48\xe5\xf8\xe0\x27\x17\xa1\x17\xc8\x00\x98\x50\x50\x55\x55\x1c\xfc\xdd\xef\xa0\x29\xd7\x82\x46\x80\x14\x34\x82\x9e\x52\x54\xb4\xf0\x13\xb9\xda\x97\x80\x87\x8d\x10\xf5\xb5\x17\xe8\xc1\x18\xf0\x8e\x83\x81\x23\x8a\xf3\xcb\xd9\xdc\x07\x28\x67\x8d\x01\x7e\xb2\x10\xd3\xa0\x64\xe6\x6f\x40\x76\xac\x45\x28\x28\x63\x08\x94\x47\x21\xaa\xaf\x05\x1b\xa1\x76\x4e\xaa\x1a\x34\xf1\x17\x3c\xfd\xf1\x87\xd7\x3f\xbf\xf8\xe3\xc9\xe9\x8b\xd7\x7f\x3c\xfb\xe1\xc9\x37\x2f\x9e\x3d\xed\x6f\x22\x95\x2a\x97\x77\xc4\xcc\xf1\x28\xda\xac\xf0\x09\x81\xc8\xe0\x6c\xe2\x79\x8d\x1a\x0c\x30\x66\x8f\xc1\x73\x3d\x53\xe0\xd7\x5f\x3f\xd4\xcb\x97\xc1\x21\xb2\x70\xab\x9c\x9b\x4e\x66\x6b\xa7\x43\xbe\x8c\xd0\x85\xcc\x1f\x9b\xfa\x88\x89\x81\x0a\x68\x13\xe5\x99\x43\xd9\x36\x74\xef\x60\x09\x00\x83\x4d\xe0\xf4\xbf\x67\x0b\x3f\x19\x88\x4b\xf4\x8b\x8f\x6e\x3a\xa6\xc5\xdd\xe2\x70\x51\xd1\x36\x6b\xc8\xd4\x72\xa2\xad\xa1\x53\x33\x81\x8a\x6c\xc6\x14\x88\x85\x17\x2c\x51\x14\xe6\x81\x48\x61\x40\x8f\x76\xb3\x2a\xba\x0f\xbb\xd3\xb1\x66\x25\xcc\xda\x87\x66\x37\x7e\x1a\x87\x9f\x04\xbb\xfa\x02\xe4\x1a\xdd\x56\xfe\x92\x46\x3e\x07\x69\xf4\xcd\x16\x07\xe0\x1d\x28\x64\x52\xe9\x3f\xa6\xbd\x32\x5b\x46\xdf\xd0\xc4\xde\x9d\x3d\x4f\xf3\x18\x0f\x0d\xcb\x6c\x4c\x62\x9c\xfe\xd7\xc9\x62\x93\x19\xf8\xbf\xae\x6b\x4b\x14\x23\xbc\x0b\xa2\xa4\x1e\x60\x5b\xd0\xa5\xe8\x29\xdc\x91\xdb\x9e\x66\xe6\x9b\x1e\xa3\xa9\x78\x91\x36\xf8\xda\x0e\xf6\x5c\xad\x33\xd6\x0c\x36\x59\xd4\x55\xa0\xf7\xaa\x41\x60\xac\xe8\x64\x88\x68\x4e\x53\x9d\x9e\x2b\x73\x30\x28\xce\xea\x80\x82\xb7\xcc\xac\x30\xd8\x08\xb0\x47\x48\x50\x02\x27\xb2\x7d\xb1\x06\xbc\x98\xff\xe6\x7f\xe7\xce\x37\x62\x6b\x40\x9a\xa8\x9e\x3b\xd7\x33\xbb\x7b\x27\x40\x47\xb6\x3d\x67\xee\x6d\x43\xbc\x1e\x9c\x3e\xe9\xf2\x61\xf5\x26\xa9\x77\xba\x7c\x79\xcc\x64\xf9\xa9\xf0\xee\x95\x2a\xbf\xf3\xf1\xe2\x6c\x8c\x34\xf9\x6d\xfb\x0b\x49\x91\x9f\xd9\xf9\xf3\xfc\xf8\xd7\x5e\x74\x85\x16\xd2\x45\x18\xd1\xfd\xc5\x0f\x03\xb5\x19\x6f\xae\xd5\xb4\x3a\x34\x43\x7e\x3b\xe6\xdc\x60\x29\xb2\x87\x09\xf0\x59\xcf\xf6\x0f\x5a\xee\xaf\x6f\x1f\xbd\xf6\xfd\xeb\x1f\xf7\x06\x5a\xee\x41\x81\xe2\xa8\x15\xb3\x0a\x15\xa7\x31\x19\xd5\x0a\x15\xc7\xe3\x80\x34\x43\xc5\x15\x10\xe2\x3e\x69\x7c\x38\x50\x03\x90\x46\x5d\x56\xaa\x10\x69\xfa\x76\x08\x71\xa0\x36\xaa\xbd\xbe\x62\x45\xf8\x75\x31\xb6\xbe\xa9\x5b\x15\xaf\xde\xf1\x08\x30\x04\x23\xae\x23\x09\x6a\x31\xde\x3a\x12\xa1\xd3\xf7\x05\x8c\xb8\xe6\x91\xf5\xf2\x6f\x16\x61\xc4\xe9\x3b\xc3\x88\x03\xdc\xf5\x72\x8a\x11\x57\x0c\x0e\x18\x6e\x79\x1b\x8c\x11\x67\xcc\x7a\x63\xc4\x91\x3e\xef\x10\x23\xce\x50\x40\xf5\x94\xb5\x3b\x88\x9d\xbd\xc0\x88\x73\x46\x86\x88\x2b\x45\xdc\x94\xfd\x71\x76\x03\x11\xd7\x84\x13\xf4\x81\x10\xe2\x80\x7d\x40\x88\xfb\x44\x11\xe2\x46\x05\x18\x2a\x38\x73\xc1\xea\x8f\x3a\x4e\xda\x19\x3e\x1c\xe8\x80\x0f\xd7\x80\x1c\x24\xee\xed\xce\xf1\xe1\x6a\x36\xf9\x32\x28\x6a\x05\x0a\xa8\x81\x19\x77\x0e\x09\xb4\xc5\xc5\x47\x15\x16\xa8\xe3\xa1\xfd\x80\x1d\x34\x96\x7c\xb7\x3e\x5b\xec\x20\xef\x7a\x24\xec\x20\x5c\xd1\x50\xec\xa0\x9d\x23\xf4\x90\x09\x3e\x20\xf4\x7c\x38\x84\x9e\x0f\x87\x9d\x52\x61\x60\x50\x2e\xae\x99\xfe\xb6\x5e\x3d\x38\x76\x4a\x75\x45\x81\x4a\xf9\xae\xc6\x76\xc0\x4e\xf9\xc8\x60\x52\x78\x1c\x94\x16\xc8\x94\xa1\x30\x29\x62\x43\xf1\xde\xd8\xaf\x69\x6c\xd8\xbe\x58\xaf\xdf\xfc\x1c\x7b\xff\xb8\xfa\xd5\xaa\xb9\x09\xcb\x80\x36\xfc\x78\xbe\x0a\xe3\x4d\x84\x7f\xac\xbd\x80\xc1\x9a\x04\x9b\x1c\x3d\x45\x0c\x64\x92\xeb\x3c\x69\x0c\x57\x1e\x09\x57\x73\x9f\x56\x39\x9d\x74\x4b\x1a\x5a\xab\xf0\x55\xeb\x9b\x5f\x86\xe1\x56\x55\x82\x82\xb1\x30\xf3\x86\xd4\x44\x59\x73\xfb\x7b\xf8\x60\xb5\x69\xe5\xcb\xb3\x34\x51\x56\xde\xcf\x7a\xfb\x96\xc3\xcf\xd1\x94\xce\x0c\x51\x4b\x0b\x86\x3b\x0e\xf9\x64\x0b\x4f\x95\x7c\x6f\x80\xca\x59\xea\x2a\x4d\xea\x11\x45\x97\xd0\xb7\x92\x70\xb9\x5c\x95\xac\xb0\xdb\xf8\xc9\x94\xd3\xa1\x0e\x73\x46\x28\x8f\xe5\x25\xa6\x5b\xff\x2b\x45\xb9\xd6\xc9\x33\x3d\xa6\xe7\xa9\xc0\xb4\x6d\x82\x17\xab\x73\xee\x25\xde\x34\x0e\x37\x11\xb9\x29\x9e\x65\x08\x11\x35\x18\x3c\x56\x15\x82\xe7\xef\x29\xf4\x4e\x16\x68\x9e\xef\xe3\xa6\x18\x7e\x67\x31\x97\x8b\x6a\xab\xc5\xf9\x2f\x56\x8d\xd9\xa2\xf3\x9b\x53\xb1\x59\xb7\xfb\xa2\xb6\xb9\xff\x7d\xa6\x64\xa9\x9e\x00\xa4\xca\x51\x75\x6b\xbe\x2e\xc2\x50\x57\xb0\x94\x79\xc3\x0c\xe7\x90\x9b\xe2\x47\x8c\x77\x7a\x2a\x0e\x0d\x1f\x1a\x9e\x93\x8b\x86\xc2\x2d\xc5\x7c\x13\x45\x28\xa8\x1c\xa3\x8b\x27\x2e\x16\x61\x65\x56\x5c\x6f\x15\x19\x1f\xa5\x0b\x87\x82\xa1\x82\x4a\xd4\xdf\x6e\xe2\x12\x0b\xf2\xf2\x9d\x55\xc5\xa1\x98\xe8\xc4\x2a\xbd\x6f\x21\x4c\x11\xcb\xc5\xf3\xb4\x88\x4b\x39\x7f\x54\x01\x75\x52\x99\x65\x0b\x65\x96\x92\x32\x37\x74\x0b\x06\x76\xb3\xc8\xe8\x1d\xae\x62\xeb\xa9\xc5\x8b\x77\xb3\x1c\xca\x51\x4b\xe1\x1e\x5e\x6d\x1d\x3e\xa8\x77\x7c\xab\xd3\x28\xae\xbd\xc0\x5b\x0e\xd3\x28\x3a\xf0\xf8\x6b\x84\x3b\x93\x84\x65\x8f\x1c\x61\x60\x60\xeb\x42\xd9\x77\x8e\xce\x5d\xe4\xe5\x8a\x18\xdd\xca\x94\x4b\xff\x7b\x49\xa7\x2a\xd3\x84\xe2\x07\x63\xaa\x7a\xd9\xdd\xcd\x45\x52\xfc\xae\x28\xfe\x53\xfc\x26\xac\xb5\x00\x35\x46\xb5\x80\xfe\x27\xd1\xfa\x13\x67\xee\x07\x49\xa4\x53\x9e\x2d\x73\xc9\xc5\x56\x56\xe2\x28\x49\xcc\x66\x84\xf0\x09\x69\x7a\x7e\x5b\x7b\x82\xa4\xae\x95\x24\x6c\x73\xab\xc8\xca\xe2\xa1\x6d\x87\x27\xc9\x2f\xba\x9c\x24\x33\x69\xbe\x57\xa8\x9b\xbf\x5e\x2f\x5e\x3c\x8d\x6f\xb5\x8f\x04\x75\x73\x87\x10\x9b\xd9\xfc\xf0\x28\x9b\x04\xdd\x61\x4f\x50\x36\x39\x75\x80\x53\x46\x1b\x94\x85\x2a\xd0\x26\x70\x9b\x80\x36\xf9\x2a\x5e\x55\x1b\x13\x62\x6d\xa6\xe9\x11\xb2\xab\x8e\xf2\x15\xbe\x18\x37\xa3\x7c\x04\xaf\xfb\xac\xb7\x2b\xec\xf8\x38\x9b\x72\x21\x4c\x2f\x5f\xc5\x0f\x08\xb3\xb9\x8f\x10\x9b\xb0\x7c\xb8\x60\x01\x67\x39\x53\x55\xee\x77\x8a\x2e\x1e\x1c\x2f\x7f\x1a\x28\x9b\xdc\x80\x1e\x0e\x65\x93\xeb\xc4\xe7\x87\xb2\xe9\x3e\x2c\xc8\x26\xcf\xfa\x1f\x25\xce\xa6\x53\xf4\xe3\xfd\x7c\x70\x36\xb7\x1d\x78\x45\x1d\x2f\x70\xd3\x76\x30\x6c\x6d\x5c\x55\xce\x58\x4c\xa1\xd8\xb2\xaf\x1e\x1e\x8d\xad\xf3\x00\x3e\x45\x40\xb6\xb3\x66\x40\xc7\xcf\x14\x79\xcd\x16\x60\x57\xd9\xad\xc8\x6b\xd6\x47\x89\xbc\x06\x87\x6f\x15\xe5\xb5\xcd\x42\x65\x3b\x7e\x3c\x88\xdb\x46\x05\x60\xcb\x0e\x15\x07\x00\xb6\x03\x00\x1b\x5f\xf5\x67\x02\xc0\xb6\x05\x06\xdb\xc3\xc0\xb0\x75\xc6\x60\xa3\x98\x6a\xdd\x31\xd8\x84\xe8\x6b\xd4\xee\xf7\x41\x31\xd8\x44\x46\xb9\x87\x76\x39\xc9\xfb\xb4\x4f\x48\x6c\x91\x79\xf9\x5f\xfd\x34\xfa\xf7\xde\x22\xb1\xe5\xf6\xbb\xc1\x60\x6c\xdc\x46\x3a\xaa\xdd\xe9\x80\xc7\x76\xd6\x03\x8f\x2d\x3f\xaa\x1c\x20\xd9\x0e\x90\x6c\x7b\x0e\x69\x66\x34\x2e\xd1\x3d\x87\x34\xeb\xba\xd2\x06\x6a\x75\x1f\x0e\xd5\xac\xe1\x04\x74\x00\x36\x2b\x02\x9b\xf5\x27\xd5\x01\xdb\xec\x80\x6d\x76\xc0\x36\x6b\xc7\x9e\xc9\xff\xeb\x64\x0c\xc9\x16\xe2\x01\xdb\xec\x80\x6d\x36\x54\xef\xe9\x86\x6d\xd6\xf1\x38\xdf\x8c\x72\x36\x0c\xdf\x4c\x74\x98\xdd\x9f\x03\xf6\x5e\xa2\x9c\x69\xb7\x8b\xff\xd1\xfe\xf1\xe8\x97\x03\xca\x99\x7c\x40\x39\xab\x47\x39\xcb\x8c\xe9\x9f\x0d\xca\x59\xe3\xba\xdd\x1f\xa1\xb2\x7f\x58\x67\xda\x5f\x4f\x9f\x9c\x7f\xfb\x6e\x79\xc0\x3a\x2b\xd8\x09\x0f\x70\x67\x07\xb8\xb3\x03\xdc\xd9\x01\xee\xec\x00\x77\x76\x80\x3b\x3b\xc0\x9d\x1d\xe0\xce\x0e\x70\x67\x07\xb8\xb3\x03\xdc\x59\xc5\x31\x69\x80\x09\xf2\x00\x77\x76\x80\x3b\x3b\xc0\x9d\x1d\xe0\xce\x0e\x70\x67\x07\xb8\xb3\x03\xdc\xd9\x01\xee\xec\x00\x77\xd6\xdd\x5c\xbc\x4f\x86\xec\xfd\x02\x3d\x7b\xe9\x9d\xc6\xc9\x4b\x0f\x89\xcd\xd8\x05\x4c\x9f\xce\xb8\x67\xbc\xbe\xc3\xc5\x48\x15\x10\xd1\xea\xae\xd6\x04\x07\x14\x88\xb5\xfe\x41\x60\x62\x35\x51\x23\x29\xe8\x59\x21\x7e\x0b\xd7\x94\xa1\x16\x59\x83\x1d\x9c\x64\x01\x68\x59\xb1\x9d\x1a\x3f\xc2\x8e\xa8\x65\x4f\x16\xd7\x7e\x90\xdf\x53\x0d\xf7\x44\x91\x1f\x14\xb9\x4c\x6e\xc6\x2d\xeb\x79\x00\x3f\xdb\x0e\xb3\xac\xba\xfb\xf5\x45\xcd\x22\x31\x47\x8f\xfe\x9e\x41\x65\xf1\x5c\xcf\x29\xa1\x19\x3f\xe5\x8c\xd6\x88\x8b\x55\x8d\xfd\x83\xc4\xfb\x3a\x68\xc0\xc5\x12\x6f\xe5\xe3\x20\x5f\x95\xf1\xad\x44\x7f\x3b\x02\xdc\xab\x0a\x96\xd7\x76\x98\x40\x72\x3d\xea\x95\x36\x14\xe8\xca\x8f\xa7\x78\xcf\x7b\x3b\x1e\xda\x95\xfc\x30\x58\x57\x46\x3b\xd6\x55\x81\x02\x14\xc1\x6a\x5b\xa8\x2a\xb9\x27\x50\x55\x4f\x44\xa1\x31\x41\xaa\x00\x07\x52\x55\x17\xc1\xbb\x2d\x4f\x0e\x42\xa9\xaa\x61\xeb\xfd\xe6\xc3\xa2\xc7\x73\xaa\xd4\x8c\x0d\x55\xc5\x80\xaa\xb2\x6d\x4f\x0c\x54\xb5\x6b\xa6\x12\x83\x54\x75\x87\xa8\xea\x0a\x50\xd5\x0d\x9e\x4a\x1e\x1e\x31\xd2\xa8\xa4\xb0\xa2\x16\xb5\x43\xa0\xc7\x50\x19\xc0\x4f\x70\xd1\x91\xa7\x3d\x18\x61\x40\x16\xd1\x5a\xd0\xac\x87\xc6\xcb\xaa\x53\xf9\x1f\xfc\x28\x12\xae\xfc\xf9\xed\x5e\x85\xc1\xfd\xfc\x74\x69\x3d\xd7\x7f\x3d\xdf\x49\x18\xdc\x36\xd1\x6f\x84\x54\x2c\xf4\x6d\xc6\xc5\xbc\xe5\xaa\x58\x5f\x7f\xbb\x1d\x86\xb4\x09\x20\x83\x32\xb5\x27\x87\xa3\xa2\x43\xa2\xdb\xdf\x35\x01\x29\x1a\xb6\xef\x95\x2e\xdf\xa9\x08\x11\x54\xde\xf9\x5e\x1e\x2a\xf2\x1b\xe6\xce\xd8\xf5\x5a\xbe\x56\x7b\x4f\xc2\x70\x95\xf8\x6b\x79\xbb\xcd\xf3\xdb\x55\x78\xee\xad\xd8\xde\x83\xdf\x94\x5e\x91\x01\x0e\x77\x89\xee\xe2\x3d\xd0\xc5\xe3\xb9\x2e\xda\xcf\x60\x3b\xb2\x37\x5f\xc5\x2a\x99\x0d\x1f\x95\xc3\x90\x9e\x3f\x2d\x86\xfb\x99\x8d\x3a\x73\x7f\x46\x22\xaa\xb4\x88\xbf\x3a\x45\x16\x76\x24\x68\x87\xc5\xd4\x33\x7a\xb0\x89\xaf\x17\x1c\xb8\x5b\x2f\x86\x1e\x91\x3b\x73\x80\xb9\x78\x5b\x86\xeb\xb8\x96\xca\x17\x16\x04\x19\x5a\x91\x0a\xd8\xcf\x45\xae\xa8\xbf\xde\xec\xc6\xfa\x8d\x73\x50\x0a\xaa\xec\x3e\x09\xed\xe1\x98\x3d\x84\x4b\xe7\x90\xcc\x3e\x63\x7e\x90\xd0\x4b\x9e\x25\x77\x1f\x1d\xd9\x5b\x32\xed\xc0\x3f\x65\x84\xf0\x48\x9b\x0b\x8f\x24\x02\x50\x9e\x1d\x62\x23\x6b\xc8\x94\xc6\x46\xf6\xa3\xd3\x21\x30\xf2\x10\x18\x79\x08\x8c\x1c\x3f\x30\x92\xac\xc2\x43\x54\xe4\x21\x2a\xb2\x49\xed\xe8\x16\xf9\xd8\x2d\xde\x91\xd9\x19\x92\xdb\x35\x0a\x2f\x8a\x96\x99\xcc\x64\xc3\xde\x59\x70\xba\xad\x22\xff\x37\xf4\x03\x66\x80\x19\x60\x75\x29\x5b\x37\xf6\xc4\xdc\xb2\x97\x41\x91\xd1\x37\xda\xed\x8b\x9f\x7f\x7a\x26\xb6\xbb\x50\x70\x48\x45\x7e\x9c\x05\x1d\x64\x10\xdc\x29\x6e\x64\x6b\x74\x64\x7a\xf1\xa2\xcf\x14\x06\x9a\x39\xdc\xdf\x5c\x54\x2f\xc4\x7d\x48\x63\x1f\x07\x63\x6f\x92\xd0\x3f\x3a\x51\x79\xdc\x9f\xb7\x58\xa0\x85\xda\x53\x13\x7b\x73\x89\x22\x24\xdd\x78\xb1\xe4\x05\x12\xa1\x12\xae\xc7\x0f\x96\x58\x30\xa7\x6d\xd4\x55\xda\xc7\x33\xb2\x8e\xc8\x9b\xf5\xe2\x63\x22\x72\xec\xbd\x1d\x85\xc8\xb1\xf7\xf6\x03\x12\x39\x8b\xc5\xed\xeb\x89\xf0\x61\xa8\x8b\x29\x43\xbb\x38\x06\x69\x17\x29\x8c\xd5\x50\xe2\xf6\x2a\x2c\x43\x38\x19\x0a\x13\x44\x58\xfe\x5c\xf8\x51\x9c\x50\xd9\xd8\xd3\xed\x7d\xc6\x43\x47\x26\x9e\xbf\xea\xe9\x6a\x98\x6a\x63\xe7\xb9\x05\x88\xe8\x4c\x25\x2f\xb5\xa3\xa2\x23\x5c\xda\x64\x1a\x5f\x28\xc6\xb2\xcc\x9f\xca\xc7\x92\x10\xd0\x9d\xef\xb5\x22\x4f\x2a\x31\x0d\xe3\xdd\xa6\x64\x7e\x59\x7e\xb6\x65\x0f\xbc\xfd\xa8\xdd\xf6\xf6\x64\x43\x6e\x0a\x28\x56\xe4\xc7\xcb\x95\x7f\x7d\x8d\xa2\xfc\xfb\xe2\x16\xad\x24\xe3\x6d\xd2\x41\xf3\x26\xfd\xd6\x74\x7e\x5a\xff\xfb\x95\xbf\x37\x71\xc6\x31\x03\xef\x6e\x7d\x91\x38\x83\xed\x30\x7e\xb9\x94\x5e\x73\xbc\x60\x66\x6a\xda\xae\x44\x32\xeb\x9d\x23\x99\xa1\xd5\x35\x92\x39\xab\xaa\x10\xd2\xfc\x89\x07\x35\x6b\xe2\x98\x5e\xb6\xb7\x54\x62\x7a\x21\xac\x46\x0f\x2b\x72\xd1\x81\xbb\x4b\x64\xaf\x20\x58\xac\xbe\x01\x31\x38\xb4\x28\xae\xb7\xe1\xeb\xb6\xe0\xe6\x71\x08\xc1\xbc\xf2\x85\x2f\x0d\x89\x80\xee\x48\xa7\xda\x08\xe6\x8e\x94\xea\xf4\x3d\x1f\x01\xdd\x32\xb2\x6d\x23\xa0\x49\xf5\xbb\x89\x80\x4e\xb7\x7b\xa8\xe7\x11\xd0\xd0\x78\xd8\x08\x68\xa8\xf7\x8d\x80\xce\xfd\xfb\xca\x4a\x8e\x98\x31\x0b\xd7\x66\xb9\x3a\x23\x9e\xc6\x32\x4d\x76\x18\x68\x0d\x75\xdc\x50\x07\x6b\x88\x38\xbc\xee\xe3\x0c\xb4\x26\x81\x92\x63\x46\x5a\xc3\x62\xa4\x35\xfc\x20\x91\xd6\x6c\x14\x0f\x1a\x6a\x0d\xad\x43\xa8\xf5\x27\x1a\x6a\x0d\x1c\x41\x7c\x5a\x5a\xd8\x3f\xd8\x1a\x96\xdd\x4e\x2b\x90\x18\x62\x5e\xda\x55\xb0\x35\x49\x28\x37\x6b\x0e\xb6\x86\xa0\x1a\x6c\x0d\x41\x13\xe7\xef\x3c\xd8\xba\x46\x9f\x60\x4f\xed\xbc\x93\x3b\x0d\xb6\x86\xe2\x5c\x9f\xc0\xc5\x64\x1d\xf3\x7e\x15\x38\x63\x45\x5b\x03\x7b\x9c\x0d\x8c\x1d\x52\xf6\x01\x29\x44\x28\xf9\x79\x45\xa3\xa3\xc8\x27\x17\xb4\xe8\xa2\x45\xca\x73\x15\xd7\x48\xf8\x41\x3b\xd9\x87\x8f\xbb\xee\x26\xd6\xd9\xe2\xaa\xea\x6d\x7d\xbc\x5b\xf6\x26\xd6\x98\x20\x1a\x55\x84\xb9\xbe\x2b\x61\x6e\x2a\x40\x9c\x87\xa6\x9f\xbc\xe6\x74\x1d\xb3\x03\x34\x86\xc5\x07\x72\x94\x31\x32\x8a\x0f\x45\x3c\x3d\x24\x2a\xb7\x58\x71\x6f\xcc\x0a\x41\x40\xad\xd4\x29\xee\x6a\x15\x7a\x0b\x3f\x58\xd6\x66\x7b\x35\xab\xd9\x5e\xff\xfe\xe8\xef\xc5\xcb\x45\x91\x51\xa6\x08\xde\x8d\xc9\x64\x17\x32\xb8\xae\xbc\xbf\x6e\x6b\xc4\x04\xab\x2c\xe5\x38\x8d\xf8\x38\xc5\xa5\xe3\x36\xa3\x31\x23\xbd\xdc\x29\xa5\x5f\x09\x0b\xaa\xd7\xea\xaa\x45\x8c\xaa\x7a\xeb\xb7\x4a\xd6\x2b\x3f\x58\x8c\x2c\x53\x49\x95\x9f\xba\x34\x6d\x35\xe8\x60\x2a\x94\x2d\x58\x1f\x9f\x88\x1d\x15\x9a\xa8\x4d\xc0\x72\x8e\x84\x4b\xe2\x99\xcd\x7b\x19\x13\x7b\x67\xb0\xf0\xa2\x45\x13\x70\xc7\x30\x5c\x09\xda\x3e\x0b\x2e\x04\x29\x96\xc1\x54\xce\xb3\x62\xcd\xda\xc4\x74\x03\x82\x11\xbf\x28\xb6\x57\xa5\x3b\xa8\xd1\xdd\x78\xb3\x68\x54\xe4\x91\x8c\xb6\xb1\x20\x56\x11\x91\xc6\xc1\x69\xe8\x87\x84\x34\x50\x8c\x56\x51\x90\x0e\x00\x47\xe3\x59\x55\xcc\x03\xc0\xd1\x27\x0d\x70\x44\x26\xf8\x00\x70\xf4\x01\x00\x8e\x36\xfe\x9e\x81\x1b\x09\xa7\xbe\xcb\x51\xe3\x23\x00\x37\xda\xcd\xd8\x0e\xe0\x46\xa3\x20\x1e\x15\xc6\xfe\x90\xd8\x47\x2d\x78\x47\xf8\xd0\x58\x8a\x58\xbe\xde\x24\x05\xcc\xa4\xc1\x2e\x38\xb5\x50\x48\xf3\x95\x17\xc7\x52\x24\xa1\x77\x09\x0a\x16\xb1\x94\xa4\xee\x29\x77\xf7\xb9\xa7\x4a\xa4\x34\x39\xe8\x04\x4a\x34\xe9\xea\x77\x13\x85\x2b\xb4\x57\x51\xc7\x7f\x2e\x17\xff\xf8\xc7\x3b\xfb\x66\x6f\x93\x6f\x62\x8a\xd5\xe7\xdd\x64\x1b\x8e\xf3\xa0\x31\xc8\x45\x7d\xa8\x3e\xfd\x24\x09\xfb\xc2\xe3\x69\x8b\x46\xdd\xff\x10\x51\x39\xcb\xe1\x8d\xb9\x3a\x09\xaf\x50\xf0\x28\xda\xac\x50\x8c\x12\xc2\xde\x59\x33\xe5\x60\x27\x11\xf8\x47\xeb\x05\xbe\xe0\xfa\x7e\xac\x0c\x93\x3d\x03\x1a\x6b\xee\xde\x3f\xc7\x60\xc6\x7e\x5c\xbd\x83\xeb\xdf\x71\x13\x3d\xe2\x11\xc8\xb3\x43\x1c\x63\x73\x8e\xc7\x5e\x54\x3a\x44\x31\x1e\xa2\x18\x0f\x51\x8c\xa3\x47\x31\xe2\x35\x78\x88\x61\x3c\xc4\x30\x7e\xa8\x18\x46\x41\xce\xc6\xfe\xe7\xb0\xd2\xc1\xe7\xa1\xe3\x1f\x48\x77\xf6\x32\x1c\x71\x7d\xfd\x5c\x47\xd7\xb0\x06\x8a\xf6\x33\x0b\x47\xc4\xd3\xb4\xdb\x60\x44\xdc\xc2\x67\x1c\x8a\x58\x24\xf0\x2e\x02\x11\x77\x4d\xe0\x7d\x0d\x43\x24\x94\xdd\x65\x10\x62\x6f\xc2\x1e\x42\x10\x3f\xc3\x10\xc4\xba\x8d\x6e\x2f\x36\xe0\xfd\xcb\x67\x7a\xf3\xea\xc5\xbf\xbf\xf9\x16\xbc\xd9\x9b\x38\xc3\x87\xcc\x67\x4a\x4c\xaf\x87\x54\xa6\x1f\x22\x95\x29\x11\xe6\x9d\x12\x99\x0e\x89\xf9\xfb\x68\x12\x9a\xf6\x22\x43\xc9\x39\xe7\x90\xf3\x74\x58\xc4\xdf\x21\xe7\x69\xe5\x9b\x43\xce\xd3\x43\xce\xd3\x4e\xb7\x23\x87\x9c\xa7\xf2\x21\x10\xef\xe3\x70\x2c\x3e\xe4\x3c\xed\x69\xb0\x3f\xe4\x3c\x3d\xe4\x3c\xdd\x03\x97\xe0\x43\xce\xd3\x87\x75\x09\x2e\x56\x75\x4a\xec\xe5\xcf\x83\x05\x7a\xd7\x5a\xe3\x12\xf5\xab\xaf\x65\xa8\x4b\x24\x18\xe8\xce\x1d\x96\x0f\x19\x59\x07\x39\x2c\x57\xef\x37\x77\xec\xae\x2c\x7f\xa2\x99\x58\x7b\x8e\xeb\xe3\xc9\xc3\xda\x8b\xfb\xfb\x31\x12\xb9\xd4\xa3\x5e\x71\xbb\x66\xa6\x7a\x79\x08\xea\x1e\xef\x60\x0a\xca\x92\x76\x74\xde\xaa\x15\xd3\x95\x51\xee\x6e\x05\x95\xe4\xff\x38\xfe\x5e\x9f\xa4\x37\xfc\xde\x39\xbe\xef\x3e\xe9\xaf\xf0\x3a\xe5\xa1\xef\x78\x62\x14\xbd\xf5\xe7\x68\xea\x2f\x50\x90\xf8\xc9\xed\xa3\xb4\xf2\x7d\xb9\xed\x89\xd7\xff\xfb\xef\x1f\xbd\xe8\x17\xf1\x6d\x0f\xd5\x2f\x14\xf9\x31\xcb\x1a\xd9\x25\x73\x6f\x39\x5f\x90\xbc\x29\x67\xd8\x1d\x72\xa9\x9c\x55\x20\xfd\xfe\xbb\x2c\x3a\x9c\xa6\x57\xe1\xa9\x60\x29\xa8\x69\xb2\x74\x57\x50\x7a\x84\x7d\xa4\x63\x1c\x7e\xeb\x8d\x69\x45\xaa\xa8\xef\x22\x6c\xeb\x22\x16\x11\x8c\x67\xf8\x5a\xf8\xec\xb8\xf4\xc5\xdf\x7f\x4f\xf0\xbb\x0c\xe9\xf7\x04\xbf\x4c\x9c\x78\x7f\xff\x3d\x95\x34\xf7\x5d\xaa\x9b\xc6\xfe\x02\xcd\xbd\x68\xba\x8e\xc2\x77\xb7\x83\x2b\xff\x63\x1d\xa1\x0b\xff\x9d\x44\x5e\xa8\xad\x23\x42\xde\xa2\x5a\x45\x10\x2e\xb6\xf8\xfe\xbe\x97\x4f\x41\x77\xd2\xd6\x8e\x9d\x36\x3b\x94\xa8\xdd\xaa\xad\x23\x47\x1d\x31\xe8\xc7\x4d\x84\x6c\xfa\xb2\x69\x6f\xeb\x4c\xde\x9d\xad\xab\x71\x56\xd5\x61\xe2\x05\x5f\xf6\x59\x3b\x5d\x09\x58\x33\x4e\xdc\xd4\x30\xd2\xb5\x57\x28\x1e\xba\x78\xe0\xf8\xb3\x7a\x72\xd5\x7f\xd3\xd3\xc3\xa8\x5e\xd3\x22\xae\x8b\x5b\x38\x91\xb6\x28\x14\x7b\xa3\xef\x04\x71\xe2\x05\xf3\xfd\x0a\xf4\x7b\xf2\xc4\x7b\xf9\xfa\xdd\xa6\x06\x41\x1b\x33\x1e\x55\x6f\x59\xc8\x1f\xeb\x35\x79\x40\x2f\x94\xd0\xfc\x8a\xf8\x9b\x62\x0e\x22\x36\xcc\x70\x93\x90\x39\x13\x04\xfa\x61\x55\x89\xd5\x58\xe7\x90\x5a\xb0\xaa\xa7\x36\x4f\x5c\x2a\xbf\xa6\x64\x54\x5f\xe1\xa6\xd5\xa7\x28\x4e\xfc\x80\x68\xd6\xec\xc1\xf3\xa7\xbd\x2c\xc0\x1d\x62\x0c\xcb\x13\xc7\xc7\x1b\x3a\xa2\x78\x43\xb7\xfb\x99\x7a\xf4\x40\x88\x5c\x91\x13\x82\x29\xda\x78\x3f\x98\xab\x6c\x48\xb1\x1a\x5f\x86\x37\x5b\xf8\x32\x36\xc5\x35\xea\x45\x53\x21\x24\xf6\x71\xd2\xac\x9c\xcd\x62\x35\xb0\x51\x70\x83\x2e\xf8\x9c\x05\x8f\x35\xc5\xd9\xf5\x0b\xaa\xda\x7a\x18\xd9\xc3\x1f\xe8\x02\x20\xff\x70\xfe\x2d\x4e\xba\x21\x57\xc7\xd1\x8d\x3c\x1f\x8e\x4a\xf9\x01\xbf\xf5\x68\xdf\x81\x7d\x7b\x06\x90\x16\x59\x58\x13\xde\x44\x8a\x28\x56\x0c\x92\xed\x7e\xf1\xc9\xb7\xe0\x0a\xae\x95\x70\x2b\xa7\x54\xba\x09\x66\xd3\x10\x3e\xb5\x59\x07\xb6\x37\xc5\x0b\x16\x34\x54\xac\x21\x2b\x55\x2e\x84\xe4\xa2\x77\x09\x8a\x02\x6f\x55\x86\x91\xe3\xc3\xf6\x78\xfa\x56\xf1\xd8\xaa\x75\x66\xe2\x31\xdd\x0c\x58\x9d\x69\x04\x42\x26\x22\x53\x85\x49\x2e\x5e\x76\xe4\xf2\x5b\x91\x65\x66\xd3\xcc\xcd\x59\x41\x33\x18\x5c\x73\x1e\xf7\x31\x07\xfe\xd0\x63\xdf\xa6\x71\xba\x39\xf3\xd7\x6b\xdb\x52\x9d\xf3\x05\x4f\xd9\xd3\x18\xe4\xb2\xcd\xe7\xb1\xbd\x46\xf1\xa5\xd0\xd9\x43\xe0\xb6\x25\xbc\x0d\xda\x3e\xb7\xf5\x9b\x4b\x3f\xce\x0e\x34\x9b\x18\xc5\x92\x27\x11\x65\x47\xba\x08\x23\x29\xb9\x44\xd2\x29\x21\x7e\xf6\x0e\xee\x73\x5f\xfb\x7d\x8d\x7f\x58\x4b\x54\xba\x1f\x14\x1a\x95\x6e\xfc\xe4\x52\x62\x47\x83\xa6\x90\xf3\x6e\x72\xbf\xaa\x3b\x58\x25\xb1\xb3\xf5\xf4\x12\x2e\x7c\xd8\xe9\xc5\xbb\xf3\x87\x99\xad\x66\xc5\x02\xeb\x62\x98\x1c\x4c\x11\xab\x51\x22\x84\xd8\x0f\xa2\xd7\x3a\x82\x0f\xf4\xe7\x84\xf2\x6e\xfb\x8a\x7a\x34\x0c\xdc\x87\xca\x0c\xe1\x2d\x16\x11\x8d\xa9\x79\x48\x9e\x78\xfe\x4a\x7a\x42\x3b\x22\x79\xc1\x42\xc2\x43\xdc\x2d\x8b\x88\x55\x75\x28\x24\xf8\x93\x94\x44\x33\x45\xde\x4a\x5f\x6f\xd2\x17\xf3\x46\x68\x1f\x8f\xeb\x5e\xcc\xa6\x7f\x90\xae\x5d\xed\x02\xe3\xe3\x51\xdb\x2f\xc7\xc9\x0e\x59\x07\x8d\xc1\x66\x15\x9d\x3d\x9c\x5f\xa1\xe4\x95\x97\x5c\x0e\x8c\x5a\xe2\x97\x44\x4c\x2a\xab\x5f\x11\x20\x5d\x11\x86\x72\xa6\x3b\x8a\xc6\x6b\x9c\xc2\x65\x42\x7b\x27\xe1\xee\x8d\x21\xd1\x44\x67\x96\xe2\xf8\xc7\x11\x43\xcd\xf3\x9a\xae\x7d\x6f\x39\xad\x85\x95\x69\xd5\xe6\xea\x02\xc0\xdb\x2e\x2c\x7b\xdf\x9e\x42\x45\xdf\x3e\xee\x3a\x93\x73\xf4\x1a\x31\x08\x93\x29\xb9\x9d\xcc\xc3\xb0\x69\xe0\xcd\xf4\xfc\x56\x56\xe4\x08\xfd\x17\xcd\x13\xfa\x77\x10\x26\xdc\xb5\x25\x31\xb6\x5d\xa3\x68\x99\xab\x8d\xec\xee\x92\xbb\xec\x4c\xc2\xe9\xc0\x1b\xc7\x06\x63\xd7\xde\xd9\xe1\xf6\x2f\xce\xec\xea\xc5\xbf\x6f\xfe\x7a\xf1\x8f\x5f\xf7\x26\xce\x2c\x3d\x2d\x75\xcf\x7c\xb7\xc3\x18\x36\xda\x99\x78\xe4\x70\xb6\x8a\x95\x6f\xac\xdc\x76\x66\x53\x68\xdb\x21\xb7\x5d\x1e\xde\x55\x9e\x81\x43\x96\xbb\xe1\x24\x39\xe4\xbb\x3b\xe4\xbb\xab\xd1\xdf\x1a\xa2\xdf\xfa\xe7\xbb\x63\x7d\x3e\x24\xa2\xfb\xec\x13\xd1\xe5\x72\x3f\xbb\xea\x10\xa4\xc2\xda\xc6\x57\xfa\x90\xd8\xee\x10\x4f\x77\x48\x6c\x77\x48\x6c\x57\x4c\x51\xf4\x49\x27\xb6\x1b\x02\x00\x77\x48\x7a\x97\xef\x0a\x39\xa2\xcf\x78\xc9\x99\x32\x6d\xf3\xd3\x4e\xcf\xc4\x2d\xb8\xf2\x51\x52\xdc\xd0\x5e\x87\x70\x7d\xe0\x44\x77\xdc\xd5\xee\xda\x8b\x63\x9a\x92\x2d\x45\x4e\x55\xe4\x79\xe4\x27\xfe\xdc\x5b\xe1\x05\x72\xbd\xe6\x77\xcf\xed\x24\xbe\x5c\x4c\x8c\x57\x9b\x8f\xc9\xea\x92\x8f\xc9\x12\x65\xcb\x13\xad\x83\x0f\x92\x91\xa9\x0a\x9b\x62\x8d\x73\x80\x05\x96\xe8\xb8\xd8\x57\x55\x11\xc8\x58\x4b\xbc\x65\xec\x32\x6b\x5d\x59\x07\x2f\xf9\xcf\x41\x9b\x08\xb8\x60\x49\x4c\xf4\xe9\xa5\xc1\xe0\xc3\x71\x93\xe0\xa5\xf6\xc2\x91\x05\x6f\x66\x84\xfc\xe4\x05\x6f\xaa\x63\x33\x32\x7e\xc4\x82\xf7\x83\xa6\xbf\xa3\x79\x29\xc7\x13\xa2\x7c\x52\x3b\x96\xc6\x6e\x38\x24\x45\x91\x87\x3f\x98\xd0\x2c\x60\x45\x55\x81\x27\x46\x10\x74\x1f\x3e\xaf\x5c\x9b\x5a\x7c\x00\x98\x38\xe4\x9c\xfb\x24\x01\x26\x5e\x13\x9d\xab\xa5\x57\x54\x31\x6b\xed\x16\xab\xab\xa5\x63\xac\xb2\x43\x36\xbc\x4f\x17\x5c\x42\x7c\xca\x1b\xb6\x21\x75\x0b\x98\x17\xb1\x31\xa8\x3e\x18\x3f\x73\x9c\x60\x69\x74\x4e\x15\xd0\x7b\x78\x02\xc4\x83\xd2\x93\x9d\x0d\x70\x3f\x00\x27\x7a\x5c\x66\x92\xce\xe3\x45\x75\x48\xcb\xf8\xd9\xa5\x65\xfc\x3c\x61\x28\x3e\x0e\x6c\x8a\x16\x3c\x8a\x65\x52\xc2\xaf\x18\xcb\x5d\x6c\x4f\xc1\x2a\xf6\x2a\x66\xf3\x2f\x3f\xd1\x2e\xff\xf7\xbb\xff\x34\x26\x67\x4c\x23\x35\x39\x70\x0a\x61\x40\x26\x43\xb1\x18\x92\x83\x31\x9d\x3c\x2e\x2c\xd2\x28\x84\x45\x2a\xf2\xe3\x95\x1f\x5c\x11\xaf\x33\xa6\xf5\x98\x33\x5c\x2f\x2d\x4b\xc3\x19\xba\x2b\xfc\x1d\xf4\xb2\xfe\xe9\xa3\x4a\x8e\x13\x66\x7a\xea\x57\xce\xe4\x97\x28\xbe\x7c\x9d\xde\x25\x0c\xf2\x52\xff\x0e\x79\xab\x51\x3c\x6f\x2b\xae\xee\xdc\x89\x0f\x8f\x3b\x09\xd7\xd3\x38\xf1\xb2\xf3\x60\x0f\x8d\x54\x2b\x9f\x80\x72\x33\x75\x0d\x21\xb6\x73\x43\x97\xa4\x27\x89\xb4\x42\x5e\x9c\x48\x61\x80\xa4\x4b\x42\x22\x89\x78\xa3\x4a\x61\x40\xca\x52\x79\x20\xf9\xb1\x74\xe1\xf9\x2b\x3f\x58\x76\xce\x94\x51\x33\xa8\xcc\x0a\xff\xe0\x63\xba\xf4\x62\xc9\x93\x58\x7f\xb6\x1d\x56\x76\xcd\xb0\xab\x61\xad\x56\x85\xd1\xc4\x92\x17\x21\x89\xb5\xda\x37\x7b\x49\xfa\x1f\xcd\x62\x82\x2b\x0a\xc2\x62\xed\x6a\x17\x9b\xd4\x00\x8f\xf1\x1e\x9a\x42\xbb\xc7\xba\x68\xe1\xa4\xce\x2f\x24\xc5\x25\x9b\xe9\xd3\x70\x13\x24\xcd\x16\xf7\x96\x79\x90\x6b\xa3\x88\x6c\x16\x45\x54\x88\xe8\x56\xd3\x1d\xaa\x92\x23\xf6\x8c\x0e\x3c\x2e\xab\xeb\xe5\x60\x2f\xfc\xd5\xab\x1c\xce\x68\xc6\x32\x31\x96\x0d\x09\x9c\x6f\x2b\xbf\xbf\x64\x9b\x49\x7d\x5d\x69\xb7\xd8\x9b\x05\xcf\x48\x53\x14\x3f\x2b\x12\xbc\xf2\x4c\x9c\x09\x97\xdf\x27\x06\x85\x84\xa7\xf4\x16\xe7\xe4\x1b\xa1\xd9\xd9\x43\xc6\x58\x4b\x95\x10\xd2\x2b\x3f\x58\xf4\x48\xca\x2b\xf7\x8e\xa9\xad\xd6\x23\x5e\x3e\xa2\xc0\xc3\xc6\xa5\xa4\xb4\x7d\xf9\x3d\x1e\x1a\xa6\x71\x82\xa2\x6b\x02\x15\x11\x2c\xa7\x4b\x2f\x41\x37\x5e\x76\xef\xaa\x34\x7e\xe8\x07\xcb\x08\xc5\x71\xf9\xa3\xe1\xf6\xaf\xd6\xeb\x21\xb1\x59\x4c\x44\x87\x82\x59\xac\xf4\x9d\xde\x44\x3f\x39\xdd\x86\xc8\x0c\xc9\x37\x7e\x72\x19\x6e\xb0\x9a\x47\x9e\x2b\x67\xd4\xb6\x5b\x3e\x19\xf5\x89\x1c\x2c\x6f\x51\x7d\x26\x64\x8b\xc0\xc2\x01\x44\xfd\x96\x36\x4e\x72\x86\x2e\x65\x45\x7e\x12\xc7\xe1\xdc\xf7\x12\xb4\x60\x81\x43\x7d\xa9\xdd\xb9\x42\xaa\x04\xa3\x45\xae\x02\x8f\x39\x19\x1d\x75\x87\x7e\x0c\xbf\x73\x16\x7f\xc8\xd9\xd8\xac\xe3\x24\x42\xde\xf5\xf0\x79\xe8\xa7\xac\x88\xd6\x8a\xcb\x75\xfd\x34\x0c\x02\x62\xd7\xf9\x5f\x3f\xb9\xfc\x36\x9d\x8e\x7c\x07\x2d\x3c\x27\x88\x38\x3d\x51\x30\x0e\x51\xf8\xdd\xd4\x3a\xb0\xb3\x49\xe9\xa4\x81\xb7\x1e\x0d\x9b\x60\x01\x48\x38\x33\x5b\xcb\xf5\xfe\xf9\xbd\x05\x48\xeb\x60\x3f\xec\x28\x77\x3b\xb2\x7c\x9a\x87\x5c\xc7\x0c\x19\x54\xeb\x84\x8d\x7d\x34\xea\xa5\xb5\x96\x75\xc0\xf3\xcd\xfc\x0a\x25\x8f\xaa\x51\xb8\xb5\x00\xa9\x3c\x94\x8f\x95\x9d\x2f\xea\x95\xcd\xc6\x20\x5f\x91\x9a\xda\xdf\x91\x41\x81\xed\xf1\xb7\xc4\x40\xea\x61\x6d\x59\xbe\x08\xa3\x6b\x2f\x99\x06\x9b\xeb\x73\x12\xc2\xb7\x5e\x6d\x22\x6f\xe5\xff\x85\x52\xab\x2c\x31\x86\x0a\x63\x74\x89\xdd\x34\x8c\x86\x5b\x4a\xf7\x2f\x9e\x76\x0f\xc3\x68\x93\xa7\x37\xff\xfb\xfa\xd1\x7f\xf4\xfd\x0b\xa3\x0d\xc2\xe0\x29\x1d\xd0\xab\x1c\xfd\x57\x29\x9c\xa1\x3b\x47\xda\xd2\xb3\xdb\xbe\x45\xe6\xae\xf9\x71\x15\x8c\xcf\xbb\x08\xda\xad\xc6\xea\xba\x5d\x63\x75\x75\x9d\x3b\x43\x5a\x87\x58\xdd\x5e\x81\xa9\x82\x78\x54\xb7\x21\x06\x76\xab\x40\xd3\xfa\x8a\xbb\x84\x99\x36\x75\x6b\x9b\xd0\xdc\x36\x0a\x8c\x1b\x6c\xdb\x54\x75\x6f\x2a\xf4\x0f\xb6\x6d\x1e\xd9\xd6\xc1\xb6\xee\xce\x83\x6d\x75\x2d\x0f\xb6\xd5\xc1\xc3\x06\xdb\x52\x38\x81\x7e\xc1\xb6\xa4\xcf\xbb\x0b\xb6\xd5\x35\xdc\x42\x87\x60\x5b\xf7\x13\x0a\xb6\x85\xc6\xc8\xc1\xb6\xba\x5d\x08\xb6\xd5\x9d\x0f\x91\x6b\x92\x8d\xe2\x41\x83\x63\x75\xfd\x10\x1c\xfb\x89\x06\xc7\x12\x5f\xa1\xb2\x9b\x62\x5a\xb8\x0b\x47\x7e\x31\x2f\xed\x2c\x38\xd6\xee\x10\x1c\xeb\x08\x82\x63\x9d\x26\xce\x7f\xe0\xe0\x58\x33\xef\xe4\x6e\x83\x63\xc5\xce\xf5\xd0\xc2\x64\x1d\x33\x38\x16\x56\xd3\x20\x0f\x0c\x80\x65\x90\x12\x87\x00\xd8\x9e\x71\x58\xba\x7e\x08\x80\xfd\x38\xe3\xb0\xa0\x26\x12\xe0\xda\x27\x1b\x00\x0b\xe1\xac\x3e\x00\x16\xea\x1d\x02\x60\xa1\x2e\x90\xf7\xba\x68\x1d\x3c\x4c\x00\x2c\xd4\x47\x3a\x54\xea\xbb\x09\x80\x85\x62\xb7\x59\x08\x14\x08\x47\x73\xdf\xe5\xe1\x17\xda\x45\xe3\xa8\x62\x30\xb5\xbb\x7d\xd2\x42\xb0\xdd\xe8\x41\xc8\xf0\x31\x4b\x46\x20\x52\x6d\x41\x7f\xd5\xb6\x2e\x88\xb4\x45\xb5\xac\x22\xc2\xbb\xa5\xd2\x22\xbf\xed\x42\xd8\x94\xb7\xbb\xcc\x19\x61\x60\x90\xa8\x90\x0e\x56\xaf\x68\xa4\xb2\xef\x41\xdf\xd9\xed\xb3\x43\x95\xfd\x1d\xc4\xae\x29\xf4\x46\x7c\x3c\x2f\xa0\xfe\xac\x42\xde\x71\x05\x11\xc6\x6e\x55\x2c\x8d\x71\xf6\x18\xb2\x2b\x01\xb7\xcb\x29\xa3\xff\xdd\x9c\xbb\xc5\x49\x62\x0b\x36\x64\x4e\x10\x1f\x82\x07\xa7\xa4\x2d\x7a\x5d\x98\xfe\x7a\x28\x26\x13\x1c\x75\x81\xf3\xa0\x4c\x56\xc4\xec\xa8\x9e\x68\x47\x61\x32\x67\x00\x93\x89\x90\x3f\x14\x20\x38\xf8\x0e\x85\xf8\x30\xfb\x40\x7c\xe8\xc6\xc7\x0a\xf1\x41\x55\xea\x03\xc4\xc7\xc7\xa7\x40\x8d\x09\xf1\xc1\xdf\x43\x12\x74\x37\xce\x73\x9c\xb2\x49\xea\x2b\x62\xf6\x12\x87\x0d\x4b\x86\xa0\x40\x6d\xb7\x64\x38\xe9\xaa\x75\xdb\x5e\xe8\xb5\x1a\xdd\x64\x76\xb7\xbf\x54\xc9\x34\x58\x12\xd0\x1a\xe9\xfa\x5f\x17\x9c\xf9\x1b\x37\x12\x43\xb0\x91\x18\xa2\x05\xbf\xdd\x56\x22\xe7\x1e\xf9\x46\x4f\x03\xa1\x40\xe2\x1a\x6d\x68\x22\x5d\xc0\x48\xb6\x83\x6a\x1a\x41\x8e\xf7\x67\x4a\x26\x92\xfc\x20\x41\xcb\xc8\x2b\xa6\xa4\xde\x05\x6f\x1a\x7b\x8b\xd5\x33\x26\x6f\xf6\x50\x72\x3e\x14\x56\xcf\xd8\xac\x7d\x80\xfa\xf9\x14\xa0\x7e\x74\x78\x80\xfa\x39\x40\xfd\x3c\x08\xd4\x0f\x61\xbd\x03\xd4\xcf\x36\x1b\xe0\xc7\x0f\xf6\x23\x64\x82\xb6\x9e\x7d\x4c\x60\x3f\x3b\x1a\x60\x7f\xc4\x95\x41\x96\xb3\x9e\x0c\xc6\x3c\x73\xf7\x0b\xce\x67\xec\x19\xd8\x27\x38\x9f\xdd\x8c\x6d\x07\xcc\x75\x00\xf4\xd9\x73\x40\x1f\x3e\x6b\xdc\x78\xe0\x3e\xfb\x87\xe9\x43\xce\x77\xfb\x12\xac\xf2\xed\xe2\x49\xf4\xe3\xe9\xc5\xb9\x38\x58\xe5\x71\x66\x27\x2c\x2f\xe0\x52\xd4\x26\x0b\xba\x9c\xae\xbd\x00\x55\x9d\x92\xe5\xa6\xd0\xcd\x8a\x4e\x5d\x88\xb4\x48\xdb\x6f\x84\x43\x28\x2f\xbc\x4a\x68\xac\xa8\xa0\x2e\x38\x8e\xa9\x64\xd7\x28\xd8\xb0\xe1\x08\x11\x6f\x88\x55\xb9\xd7\xd6\xd2\x41\xd7\xeb\x0f\x1f\x54\xd5\x71\xeb\xee\xd0\x09\x25\xd5\xb4\x05\xe1\xe1\xbe\x73\xe0\x6a\xcb\x30\x30\xed\x06\x0d\x42\x53\xe4\x95\xcf\x98\x40\x8e\x42\x16\xe7\x84\x7b\x94\x84\x51\xad\xbd\xbb\xcf\xf8\xc9\xb4\x26\x7e\xb2\xaa\x37\x7e\xd7\x6a\xf4\x35\x1d\x0c\xc2\x00\xe5\x8c\xbb\x08\xe7\xf1\x74\xe5\x07\x57\xcd\xdd\xcd\x50\x55\x0c\x45\x4e\xbc\xf3\x14\x2f\x6b\x0a\x4a\x95\xe3\xfe\xa6\x71\x05\x0c\x81\x05\x14\xe3\x83\xe5\xd3\x1f\x7f\x78\xfd\xf3\x8b\x3f\x9e\xfe\x78\xfa\xfa\x8f\x9f\x7f\x7a\x91\xa1\x4b\xc8\x58\xe2\x04\x68\x9e\x3c\x5a\xd9\x58\xec\x5e\x5c\xf8\x73\x06\x24\x85\xeb\xc7\x8c\x2d\x07\x61\xb8\x46\x01\x8a\xa4\x20\x8c\xd0\x05\x8a\x22\xea\x62\x4e\x7b\x15\xd1\xed\xe0\x8f\xf3\x95\xd7\x30\x9c\x7e\xf4\xc7\x94\x89\xd5\x45\x38\xdf\x60\x3e\xf0\xd8\x72\xea\x7d\x0b\xd1\x3f\xec\xa0\xd3\x2b\x72\x35\x28\x9b\xfb\xd9\x71\x23\x0d\xde\x0e\xd9\xad\xb8\x5d\xe1\xa1\x77\xa8\x24\xbc\x42\xc1\x5e\x61\xce\xfd\xeb\x3c\xfe\xf9\xcf\x9f\x5f\xff\xdc\x88\x39\xf7\x64\x9e\x06\xfe\x3d\x49\x15\x18\x02\xbe\x10\x5d\x7b\xc5\x9f\x83\x1e\x3c\x0e\x83\x05\x5a\x21\x12\xcb\xf8\x38\x0c\x36\x31\xfb\x63\x15\x2e\xc3\x4d\xc2\x6c\x61\x2b\x2c\x0a\x78\x7c\x3b\x42\xca\x41\xf0\x76\xe4\x4b\x06\x6e\x37\x53\x72\x54\xbb\xfc\x3a\xa3\x87\x80\x1d\x7d\xeb\xc9\xad\x0c\x3a\x77\x20\xe3\xf1\x34\x9e\xcc\xe7\x28\x8e\xc3\xe8\xf9\xd3\x82\x73\x53\xa1\x78\xa0\x65\x47\x2e\xc3\x46\x30\x61\x76\x2d\x56\x14\xa4\x6e\xe1\xf0\xd2\x6e\x80\xee\xa4\xc2\x7f\xff\x09\x37\x91\x44\xa6\xb6\x9f\xd7\x40\x5f\x91\xd8\x66\xbf\xae\xee\x43\x3c\xba\x97\xc1\xd0\xbd\xbc\xf9\x2a\x56\x49\x6f\x63\x15\x2d\xfc\x24\x87\xf6\x12\x4f\x63\x1e\x33\xc6\x5b\x3f\x45\xfc\x30\x75\xb8\x8f\xca\x78\x67\x1d\xe4\xf8\x2e\xb0\xa9\x04\xac\xd5\x31\xb2\x0e\x2a\xf2\xeb\x79\xb8\x46\x35\x73\xd3\x91\xfd\xca\x1b\x29\x0f\x26\xf3\x22\x9c\x7b\x2b\x8a\xdc\x13\x52\x07\xe6\xe5\x2a\x3c\xf7\x56\x23\xed\x9d\x52\x09\x57\x81\xee\x00\xd1\x66\x85\x62\x21\xbc\xc2\xac\x09\xa6\x6b\x2b\x3a\x3e\x45\xf1\x3c\xf2\xd7\xe9\x7a\x1b\x8f\x9a\x3c\xc6\x56\xa1\x91\x59\x15\x52\x6d\x7b\x92\x8e\xc3\xc4\xde\x7c\xa0\xe9\x97\x67\x9d\x4b\x2f\x7e\x8d\xe6\x11\x4a\xb8\xb5\xda\xef\x22\x5e\x9e\x87\xeb\xdb\xe9\xf9\x26\x49\xc8\x3e\x55\x32\x1a\xa5\xbd\x4d\xdb\xe3\x1a\x2b\x1a\x8e\xaa\x3a\x21\x61\x33\x35\xce\x3e\xd8\xea\x12\x7e\x48\x4b\x5b\x5e\xd9\x57\xb3\xe2\x65\x71\x00\xb3\xa1\xf0\x43\x79\x1d\x7a\x66\xa0\xbb\x8c\xd0\x85\x5c\xbe\x3d\xea\x2f\x9f\x87\xdc\x76\xb5\x70\x28\xb3\xc9\x6e\xa3\x34\x10\x28\xc9\x9b\xc8\x4f\x90\x94\x6a\x4b\x85\x58\x6a\x98\x42\x1d\x74\x8f\x72\x2a\xdd\x02\x3d\x5b\xf8\xc9\x40\xa8\xd0\x5f\x7c\x74\xd3\x71\x3b\xed\x71\xe7\xd3\xc2\x66\xb5\x54\x5a\x6c\xd6\x2b\x7f\xee\xf5\xa6\x54\xd7\xcc\x0d\x3a\x17\x87\x3c\x5f\xf9\xf3\xab\xb2\xb5\x9d\xbb\xb6\x05\x2c\x26\x05\xec\x0d\x7b\xf1\xf3\xf6\x34\xa5\xd4\x90\xeb\x87\x2d\xe4\xc0\x20\xd5\xd8\x24\x0e\x8f\xdd\x34\xe3\xce\x88\x56\xf9\x8c\xb2\x73\xc5\xc2\x0b\x96\x28\x0a\xf3\xb8\xbc\x0e\x73\x0c\xf7\x79\x8e\x5f\x90\x93\xd7\xce\x82\x97\xe7\xfc\x49\x70\xab\x3b\x24\x27\x9f\x84\x34\x16\x6d\x36\x6c\x73\xe8\xdc\xf9\x61\x86\xc4\xf4\x3f\x76\xea\x95\x56\x55\x0a\xf7\xa2\x72\xc7\xce\x9e\x87\x8b\xdb\xa1\x5d\x4d\x75\x41\x31\x64\x2e\xff\xdf\x93\x08\x49\xb7\xe1\x46\x8a\x37\xec\x8f\x1b\x2f\x48\xa4\x24\x94\xe2\x24\x5c\x4b\x9b\xd8\x0f\x96\x52\x72\xe9\xc7\xd2\x93\xd3\x17\x54\xbe\x7e\x4d\x91\x00\x6f\xfc\xd5\x0a\x93\x82\x7c\x14\x6e\x12\xb5\xae\x1b\x22\x5d\x75\x17\xf4\x62\x9c\xb9\x0d\xc9\x28\x63\xba\xfd\xb4\x14\xba\xe0\x7a\x8e\xa6\xd9\xcf\x6a\x10\x99\xea\x9c\xaf\x46\x90\xe3\x4d\xfa\xc0\xc0\x7d\x12\xec\xb3\x0c\xfd\x39\x1e\xb4\x43\x7e\x60\x01\x6a\x7d\xac\x02\x74\x53\x22\x6f\x2f\x12\x77\xec\xe9\x03\x4b\xcf\x4d\x8c\xca\x62\xf3\x93\x91\x8f\x76\x3f\xf9\xf8\x73\x8c\xb6\x14\x8e\xf6\x2e\x84\xa3\xb5\x03\x25\xb7\xe5\x9c\x42\x0c\xe5\x95\x43\x8a\x22\xe7\x25\x39\x0a\x27\x30\xb7\x3f\xb4\x6c\xa1\xe2\x6a\xfb\x2c\x9e\x9f\x12\x42\x7e\x04\x12\xda\xf8\x58\x25\xf4\xa2\x4a\xe1\x5e\x54\xee\xd8\xd9\x07\x16\xd2\xe9\x82\xc4\x72\xfa\x13\x93\xd1\x66\x3f\x19\x4d\x57\xd4\x96\x62\x5a\x04\x08\xd4\x93\x4c\x5d\x3c\xc8\x3a\x54\x38\xd0\x5b\x4d\xef\x02\x56\xd4\x16\xd4\xd1\x8e\x5a\x9c\x39\x92\x65\x0e\x66\xc4\x2f\x2c\x07\x24\x8e\x37\xe7\x71\x12\x51\x50\x62\x45\x9e\x7b\x41\xbe\x47\xf4\xbe\x41\x2f\xdf\x5a\xef\xc7\x2d\x7a\x10\x26\xfe\x85\x4f\xfd\xe2\xe2\x7d\xb9\x4e\x77\xfe\xf3\xdf\xdf\xb4\x7f\x83\x5f\xc4\xd7\xe9\x28\x8a\x42\x8a\xab\x9b\x22\xcd\x3c\x4e\x6e\xd7\xd9\xbd\x36\xfe\x97\xbe\x52\xb9\xd6\x66\x31\x58\x02\xb3\x97\x3e\x53\xe4\x79\x84\xbc\x04\x0d\x47\xad\x12\xd5\x0b\x71\x1f\x36\xc4\x72\xb6\x45\x12\x8f\x37\x97\x4c\x59\x21\xc9\xb1\xce\x11\x0a\x24\x6f\xb1\x40\x8b\xbe\x09\xa6\x68\x62\xa9\x1b\x2f\x96\xbc\x40\x22\x34\xc2\xf5\x50\xc3\x02\x6b\xa1\xae\xca\x3e\xb1\x43\x75\x04\xde\xac\x17\x1f\x0f\x81\x63\xef\xed\x28\x04\x8e\xbd\xb7\x1f\x8c\xc0\xcc\x01\x64\xaf\x09\x8c\x89\x43\xfb\x39\x06\x75\x49\x4d\x1f\x8c\xbe\xd4\x7f\x66\xaf\xc9\x9b\xf1\x2f\xe9\xeb\x42\xf2\xe2\x9a\x5b\x7b\xa3\x62\xe8\x77\x68\x50\x5b\x7b\x9c\x51\xaf\x19\xc2\xfd\xf8\x70\x12\x26\x6e\x98\x9e\x07\x98\x97\xff\x84\x1b\x96\xc7\xef\x26\xb3\xe0\x22\x29\x40\x37\xb9\x35\x62\x7b\x0a\xa7\x15\x7b\x49\x5e\x6b\x2f\x22\xef\xa8\x30\x3d\x7e\xa7\xc9\x94\x4c\x85\xed\xdd\x31\x41\x8d\x8f\xe2\x84\xaa\x13\x3d\x31\xf6\xb8\x8b\x2a\xea\x44\xd3\xd3\x6b\x20\x3d\xae\x9c\xe7\x0e\xbb\xe4\x54\x51\xf2\x10\x3d\x92\x15\x51\x96\x1b\x0e\x3a\xb2\x74\x60\x2f\x3e\x95\x8f\xa5\x6a\xec\x61\xa9\xd7\x8a\x3c\xa9\xdc\xf4\x77\x8d\x2d\x6e\x57\x6e\xb3\x90\x06\xa2\xd3\x12\xed\x36\x89\x36\xb8\x0c\xb1\x18\x89\xa1\x3a\xac\x40\x67\xdc\x0f\x65\x96\x77\x08\xda\x17\x5d\xf6\x9b\xe7\x73\xcf\x7b\xf2\xf6\x4f\xb1\x2e\xbb\x0e\x57\xfe\x9c\x46\xad\x70\x7f\xa6\x49\x8a\x17\x28\x48\xfc\xa4\x50\x76\xed\x05\xde\x92\xf0\x74\x5a\x56\xa7\xe5\x16\xc2\xe9\xe1\xac\x1c\xce\x4d\xfc\xe9\xe4\x57\x69\xa3\xec\xa2\x17\x97\x3d\x39\x7d\x81\x1b\x24\x8f\x6e\x59\x3e\x8e\x02\xc7\x0b\x13\x51\xf6\x97\xba\xc2\xfc\xa0\xb3\xc2\x10\xfb\xd7\xca\x07\x31\xa7\x5b\x9d\x35\x02\xf8\xcf\x16\x2e\x63\xa5\x23\xf8\xcb\x6c\x78\x5d\x7c\xb7\x1a\xbc\xc9\x72\x03\x67\x01\x54\xa2\xe6\xef\x2e\x14\xde\x2e\x94\x59\x10\x2a\x43\xb3\x45\x17\xe5\xa4\x2d\xf2\xc7\x84\x8a\x5d\xc8\x19\xda\xe8\x2a\xda\x2f\xce\xb9\x8b\xdf\x69\x9d\x49\xba\x85\x53\xb9\x05\x3a\x0e\xa7\x8e\x01\x53\xb5\x05\xa7\x3e\xe7\xc7\xb3\x23\x6e\x84\xca\xf6\xf8\x26\x3d\xb8\xcd\x14\x73\x9b\xd9\x9d\xdb\xcc\x9d\x73\x9b\x21\x50\x97\x0a\xa0\x30\xa6\x62\x8d\xe0\x71\x33\x88\x25\x7e\xc2\x5b\x6a\x7f\x6e\x28\xce\xd4\x0b\xb4\xf4\xe6\xb7\x54\x33\x8d\xa5\x4b\xef\x2d\x92\xd0\xf5\x39\x5a\x2c\xd0\x42\x22\x7b\x76\x39\xaf\xf5\x50\xe2\xd6\x1d\x17\xaa\x89\x24\xab\x8b\x39\xdb\x7f\xcb\x58\x11\xfc\x7e\xf9\x53\xb8\x12\x6e\x96\xb8\x7c\x77\x5b\xa5\x48\x54\xc0\x87\x15\x15\x03\xf9\xa2\xbb\x94\xa8\xe2\xfc\x0c\x86\xd7\x68\x93\x11\xba\x58\x46\xe8\xdd\x65\x84\xbe\x73\x19\x01\x7b\x04\x57\xb7\x9f\x0d\x08\xaf\xdf\x3e\x4a\x6e\xd7\x28\xbc\x68\x8e\x7a\xa6\x99\xfd\xd8\x03\xa6\x84\x12\xf3\x2b\x8b\xc5\x5e\xaf\x11\x01\xbd\xa4\x41\xd7\x54\x0f\xf7\xe3\xe9\x8a\x2c\xf9\x54\xad\xbd\x7d\xc4\xd0\x3d\x06\x9e\x38\xaa\x8a\xfd\x80\x03\x47\xf6\x44\x45\xef\x12\x14\x2c\x8e\xee\x12\x6f\x49\x7b\x20\xdf\x6f\x73\xec\xd8\xbf\x14\x7f\x2f\xaf\xbf\xfd\x9f\xef\x9e\xc2\x60\x7f\x52\xfc\x25\x3b\xcf\xb2\x37\x62\xfe\x3c\x1a\xdb\x56\xc9\x9e\x07\x4d\x76\x6d\xdf\x9a\x3d\x0f\x72\x20\x6a\xc0\xc8\x45\x57\x7c\xc8\x9e\xd7\x90\x3b\x2e\x0d\x82\x28\x65\x8e\x03\x4e\x35\x49\x9d\x22\xab\x05\x08\x15\x65\x1b\xa8\x7f\x51\x03\x65\x25\xa0\x01\xda\xb9\xfe\xeb\xcc\x65\xa3\x5f\x0e\xbd\x7e\x74\x60\xf8\x4b\xc2\x97\x46\x4d\xb3\xd7\x58\x75\x6f\x42\xf5\x4e\xb3\xd7\x32\xb2\x60\xb3\x5d\x9a\x3d\x52\xfd\x6e\xd3\xec\x01\x37\x4f\xb3\x07\x35\xbe\xcf\xc3\x5c\x51\x86\x29\x6f\x20\x07\x24\xef\x99\x66\x0f\xd6\xa5\xe6\x13\x6a\x3a\xbd\x3d\x03\x80\xab\x08\xf2\x56\x08\xde\x1b\x0b\xca\x70\x1f\xd2\xec\x01\x7d\xe4\x34\x7b\x79\xde\x12\x96\x00\xef\x43\xa4\xd9\x03\x4d\xd0\x8c\x1f\x28\xcd\x1e\x84\x87\x34\x7b\x9f\x68\x9a\x3d\x20\x82\x08\x04\xfd\x31\x02\x3b\x63\xf0\x8a\x79\x29\xab\x79\xb4\xa3\x69\x25\xf9\x42\x3d\x2c\xaf\x2d\x80\xe5\xb5\x9b\x38\xff\x81\xd3\xec\xe9\x79\x27\x6b\x6c\xcc\x43\xfc\xf8\x04\xbb\x81\x2d\x3e\x04\x9b\x98\xac\x63\x06\x41\x02\x91\x03\xdc\x20\x50\x17\x50\x07\xb4\x76\x48\xb3\xd7\x98\x0b\x81\xf0\xf9\xe7\x98\x5f\xaa\x72\x20\xc0\x44\x28\x1f\x80\x3a\x83\x01\xec\x0d\xf0\xeb\x98\x19\x12\xfa\x24\x95\xa1\xd0\x14\xd3\xc2\x55\x2a\x83\xab\x48\xf1\x2b\x46\xba\x16\x93\xc5\x40\xec\xe5\xc4\x7b\x04\x96\x7d\xd6\xb6\x03\x34\x00\xb3\xf3\x2b\xe3\x83\xc0\xb2\x77\x62\xd0\xd2\xc9\x14\x8e\x74\x0c\xad\x58\x86\x3b\x3a\x30\x77\x03\x81\xff\x90\x28\xee\xe2\x77\x0e\x48\xed\x43\x4f\x00\xe0\x73\x45\x6a\x3f\x25\xae\xcb\x6f\xfc\x0e\x30\xeb\x4b\xd4\x0e\xb2\xce\x55\xd7\x02\xff\xbe\x44\x02\x94\xf5\xd1\x2e\x6e\xea\x70\xd1\x21\x38\xe0\xa2\x0f\xc0\x45\x97\xfb\x82\x56\x6f\x7c\x95\x38\xc5\xf3\x20\x88\xc3\x4e\xcd\x67\x1d\x00\x9d\x6b\x99\x18\xd4\x3c\xad\x61\x84\xb6\x1e\x36\x81\x3b\x97\x57\x47\x6f\x38\xf0\x1e\x83\xac\xa2\x72\x57\x1f\xee\x66\x88\xbd\x91\xb9\x7b\x6f\xa6\x07\xe8\xea\x7d\x81\xae\x1e\x01\xa9\x5a\x7c\xcb\xb9\x1f\x2e\x9f\x74\x71\x85\x82\x9b\x57\x45\x7e\xbc\x5c\xf9\xd7\xd7\x28\xca\x3f\x2e\x5e\xc7\x2a\xc9\xe4\x8e\x74\x5e\x89\x14\x4f\x59\x7d\x91\x3e\x91\x62\xfc\x4c\x21\xc5\xf4\x8d\xd5\xc9\xdd\xfd\x17\x11\x4a\x36\x51\x20\xb1\x2b\xdc\x2b\x74\x1b\x1f\x45\x13\xf5\x22\x8c\x9e\x79\xf3\xcb\xa3\xc2\x35\xef\xea\x0c\xcd\x4e\xa2\x33\x34\xc3\x83\x59\xa9\x28\xd8\x5c\xa3\xc8\x3b\x5f\xa1\x93\x2f\xbf\xe4\x7f\x2a\x2b\x95\x04\x1a\x2e\x37\xf9\x53\xbe\x40\x39\x62\x4b\xdf\x0f\xa4\xd5\xfb\xf7\x2b\xd5\x0f\xfc\xc4\xf7\x56\xfe\x5f\x28\x9a\x7c\xf5\xd5\xd1\x4a\xbd\x89\xfc\x84\x7e\xaa\x4d\x94\xd5\x49\xa0\xc6\x2b\x7f\x8e\x8e\x26\x6a\x84\xde\xa2\x28\xa6\x7f\x2d\x36\x73\xc4\x75\x30\x50\xa2\xc9\x1d\x1b\x4d\x44\x87\x3a\x79\xff\x3e\xb8\x9f\x28\xab\x89\xe2\x7d\xf5\x15\xbd\x69\xfe\xf2\xe4\xa4\xd0\x1e\x69\x8e\xf4\xa6\x58\xfe\x75\xe1\x97\x3a\xf7\x56\xab\x23\x6f\x72\x4c\x2b\x51\x0a\x0f\xd9\x1d\xf6\x44\xa1\xff\x9e\x54\x5b\xa8\xbb\x1f\x4f\x70\xd7\x56\x27\x58\x64\x4d\x94\xd5\xfd\x58\xd7\xe8\x7e\xf3\x35\xfa\xea\xcf\xdb\x77\x20\x78\x73\xda\xf5\x1a\xdd\xdb\x24\x97\x4f\x7d\x6f\x15\x2e\x65\x45\x5e\xf8\xf1\x7c\x15\xc6\x9b\x08\xaf\x3c\x06\xd4\x4d\x91\xa7\x15\xf9\x3a\x5c\x90\xc3\x26\xfe\xe0\x5f\x21\xc1\x6f\x2d\x7c\x2b\x78\xfe\x78\x31\x27\x17\xce\xf1\xda\x9b\xd3\xeb\x80\x3c\x03\xa0\xfc\x55\xbe\x17\xb4\x3a\x10\x91\x08\xf8\x4d\x8c\x24\x6f\xbe\xea\xe7\xb7\x48\x44\x79\xaa\xb8\x32\x98\x69\xc8\x87\xdc\x73\x9a\x11\xee\xf9\x74\xc1\xc6\xc3\x76\xc4\x38\x22\x43\x88\xfd\xe0\xaa\xac\xf1\x0b\xef\xd1\x73\x1f\x2d\x39\x46\x49\xe2\x07\xcb\xf8\xf8\x11\x5b\xfe\xc7\x69\xa8\x7e\x51\x7d\xed\xf8\x32\xc4\xc7\x70\x39\x42\xb8\x97\x61\xe4\xff\x85\x4a\x0e\xfd\x29\x31\x36\x41\xf6\xc6\x82\x4d\x07\xfb\x41\x6f\xea\xbb\xdf\xd2\xf3\x33\x60\x71\xa7\xb4\x42\x0b\x83\x2d\x79\xe6\xf0\x43\x5b\x36\x63\x58\x6a\x7a\x39\x98\x3c\x83\xd7\x26\x30\x8f\xeb\xf5\xf4\x1c\x5d\x84\x11\x9a\xc6\x57\xfe\x9a\xa0\x87\xf7\x46\x2e\xcd\x39\x23\xc3\x13\x36\x94\x33\xdd\x21\xba\xbd\x4c\x61\x10\xaa\x07\x3b\xe5\x2c\x5b\x0b\xe1\x1a\x05\x02\xd3\xfb\xd0\x18\xfe\x17\xe1\xd2\x0f\x76\x80\xbe\xb6\x8f\xa3\x7d\x11\x2e\xa5\xc2\x60\xfb\x8d\x81\xf4\xa9\xbc\x98\xc9\x39\x27\x45\x95\x4e\xc1\xa6\x49\xaf\x15\xf9\xb1\x17\xf9\x1e\xb5\xe7\x62\x2a\x4f\x93\x70\xb9\x5c\xb1\xa4\xed\x1a\x19\x7f\x18\xa3\xf4\x48\xa3\x91\xb3\x12\x0a\x6a\x96\x60\x76\x40\x91\xe9\x28\xa4\x24\x94\x4e\x59\x82\xd0\x0e\xab\xaf\x86\x09\x23\x74\x51\xe6\x74\x25\x1f\x13\x53\xb7\x33\xe3\x42\x3a\x2b\x0c\x90\xa3\x0e\x54\x76\xc7\xb0\x10\xa9\xe4\xbd\x84\x8d\xd7\x83\x65\x32\x3d\xc4\x8d\xdf\x50\x38\x09\x7e\xf3\xb8\x20\xfb\x1e\xab\x99\x6e\x7e\xfc\x96\xc7\xed\x84\x78\x98\xe7\xd7\x7e\x92\x5b\x4a\x73\xcf\xcd\x34\xfb\x29\x87\x09\x59\xf4\x33\xd5\x72\xbb\x33\x61\x56\x99\xf1\x54\xc6\x03\xf2\xc2\x4b\xbc\x41\xbc\x36\x9c\xdf\xf2\x7d\x9f\xd9\x8e\xcb\x2c\x27\x0b\xdd\xc5\xb3\xad\xfd\xf5\xeb\x1f\xfb\xef\xec\xa2\x8e\xd3\xe6\x95\x33\xf9\x25\x4a\x2e\xc3\x05\xe7\xa2\x70\xed\x25\xf3\x4b\xea\x02\x2c\xc7\x71\x38\x14\x28\x23\xa3\x50\xe8\x2f\xe6\x53\xaa\xcd\x97\x66\x3d\x9f\xe8\x85\x1f\x63\x5d\x77\x51\xd6\x1e\xc2\x20\x0d\xf8\xaf\x99\xff\x14\x0b\x94\x84\xdf\xa5\x95\xcc\xb8\xc2\x94\x81\xb8\x22\x56\x65\xc3\x6a\xef\xb4\x6e\x9a\x1e\x37\x57\xc3\x9b\x9d\x77\xb6\x52\x7b\x42\x38\x8b\x16\x6b\xe3\x0e\x87\x05\x26\x27\xf1\xb7\xde\xb6\x09\x32\x4e\xe2\x07\x1b\x24\xdd\xf8\xc9\x65\xb8\x49\xa4\x55\xb8\x5c\xfa\x41\x69\x87\xeb\x49\xa7\xa1\x77\xc2\x55\x7f\xa5\x7a\xab\x7f\x67\x8b\x7e\x9d\xae\xd8\x45\x53\xdc\xa9\x8a\xb8\x5f\x8a\x00\x9e\x7f\xc9\x93\x16\xfe\xc5\x05\x8a\x10\x01\x12\xba\xa2\x4a\xd3\x87\xd7\x0a\xec\x8f\x43\x29\x10\x93\xec\x13\xd2\x10\xc4\xc7\xe3\x0e\x1a\x82\xce\x6b\x0a\x42\x0d\x41\xdf\x63\x0d\xc1\x69\xdc\xa5\xea\xae\x18\x3f\xf6\x9d\xc5\xfe\x74\x37\x16\x31\xd0\xe2\x1e\x9f\xd4\xd9\xea\xa0\xf8\xbb\x23\x9e\xd1\x07\x22\x68\xf7\x3b\xe0\xe6\xa6\xba\x29\x35\xd0\x0d\xcc\x8d\xc0\x6b\xcd\x14\x5f\x25\x47\x2e\x14\xb3\xb0\x41\x52\xf6\x90\x4d\x71\x04\x1e\xde\x1e\x71\x3c\xed\xd3\xcb\x34\x43\x5e\xbf\xce\x94\x8f\x25\x94\x2f\xe8\xbe\xac\x88\x10\xe4\xfb\x9d\x4b\x78\xe1\xbf\x8e\xc2\x0b\x9f\xe8\x12\x74\x15\xf0\x69\x06\xf2\x46\xab\xea\x7b\x77\x7d\x3c\xbb\x2c\x1d\x4e\x8f\xa2\x80\xe1\x6e\x09\x89\x7f\xc4\x3a\xcd\x1b\x58\xa8\xb7\xe1\xb0\x51\xac\xe0\x39\x19\xf1\xac\x0e\x5d\x74\x68\x2f\xcb\xcd\xb4\x31\xf1\x07\x90\x03\xb5\xdc\xdd\x93\xc7\x7b\xbe\x5c\x7d\x55\x0c\x55\x2b\x7a\x53\x0c\xc1\xd8\xe5\x72\x73\x17\xd7\x9b\xe5\x4b\x4b\xd2\x94\x5c\x0e\x44\x55\xce\x80\x43\xb2\xa0\x09\xb4\x6f\xa6\xd0\xb3\xed\xb6\xd6\x5e\xa9\x70\xe5\xe4\xc2\x23\xdb\x9f\x67\x1d\xcf\xc4\xed\x57\xaa\xe4\x16\x93\xbb\x4a\xa5\xff\x43\x9c\x22\x48\x57\xc8\x05\x69\x87\x8b\x54\x0a\xe7\xb8\x89\xfc\x2d\xae\x44\xf9\xcb\xc7\xec\x42\x74\x85\x12\x29\x3c\x39\xca\xee\x44\x69\x4f\x95\xa8\xf4\xdb\x2b\xfd\x8e\x8f\x8e\x56\x27\xf3\x95\x17\xc7\x12\x0d\x50\x8d\xa5\x24\xbd\xb6\xba\xc3\xf4\x3d\x9a\xdc\x25\x97\x7e\xac\xa6\xba\x9f\x7a\x11\xce\x37\xf1\xd1\xe4\x9e\x10\xb9\xf2\x34\x42\x31\x4a\x8e\x26\xf7\xdc\x35\xc7\x11\x62\x2f\x91\x69\x53\xd9\x77\x0a\xfd\x2e\x5a\xc6\x6a\x6a\x55\x39\x42\x93\xfb\xfb\x89\xba\x8e\xc2\x24\x4c\x6e\xd7\x88\x4d\xb0\x72\x16\xcc\x14\x76\xf9\xb6\x44\xc9\x8f\x37\x41\x7a\xf9\x96\xa6\xac\x0a\xa3\xa3\x55\xe5\xb3\x89\xc2\x95\x4d\x94\xb8\xf8\x0a\x3b\x36\x9e\x45\x3d\xab\xa6\xdf\x35\xd7\xcd\x5f\xf1\x28\x67\x5e\xcf\x16\xf8\xaf\x4b\xed\xac\xf8\x3b\xeb\x50\x69\xba\xfd\xf6\x95\x70\xd2\xfd\x52\xfb\x3a\x5c\x46\xde\xfa\xf2\xf6\x11\xf9\x67\xeb\x6b\xed\xfc\x52\x7b\xc5\x6e\x7a\xd3\x9b\xdf\x04\x1f\x08\xd1\xd7\xf5\x37\xae\xec\xfe\x34\x50\xf2\xfb\xea\xe3\x2f\x35\x85\xbf\x9f\xc6\xbf\xd3\x1b\x68\x72\xd1\x7a\x8c\xce\x92\xd9\x49\xa0\xa0\xd1\xae\x68\xe3\xe6\x2b\xda\xe8\x7b\xed\xfb\x67\x06\xf8\xb5\x31\xf3\x66\x5d\x14\x30\x00\x58\xf7\x7b\x8b\xe5\x19\xf3\x50\xcc\xc8\x3f\x25\xff\xc8\x2c\xf0\xb7\x7c\xb4\xce\xbc\xf7\xde\x2e\x65\x8a\x2a\x20\xdf\xf8\x8b\xe4\x32\xb7\x6c\xc4\xf4\x52\x91\x3d\xbc\x44\xa9\xe3\x62\xe5\xa9\x30\x6d\xb4\xa6\xc8\x59\xc5\x49\xe4\x05\x31\x3b\xea\x12\xcf\x61\x52\x40\x28\x20\x57\x32\x19\x72\x95\xe3\x5e\x53\x5d\x42\x56\xa4\xae\x6f\x4e\x6a\x7a\x55\xed\x59\x63\x74\x92\xa6\xc8\x73\x3f\x9a\xaf\xb8\xbc\xc3\xe7\xde\xfc\x6a\x19\x85\x9b\x60\x91\x0e\x2c\xe2\xec\x40\xf4\x65\x45\xd6\xb8\xf6\x1b\xb0\x9e\xc5\x4d\x78\xef\xfc\xb8\xa9\x72\xb0\xcb\xca\xe1\x2e\x2b\xd7\xb7\xa9\xfc\x3c\x8c\x58\xc8\x60\x5d\xf5\x46\x5b\xf5\x0d\x26\x21\x9e\x27\x48\x73\x2b\x3f\x60\xc8\x20\x22\x97\x56\xbb\x62\xdb\x2c\xda\x39\x35\x6a\xa1\x4f\xbc\x60\x4e\x22\x05\xc7\xf0\xc0\xc7\xcb\x3c\x22\xbe\xc8\x0a\x89\xe7\xad\xac\xa8\x28\x4c\xd2\xe5\x44\x21\xfa\x68\x41\x0a\xd1\x37\x63\xdf\x71\x4b\x1c\xbf\x74\xcb\xa6\x1c\x1a\xf9\x02\x97\x49\x7e\x6c\xaa\x26\x17\xdc\xd9\x67\x39\x48\x60\x10\x2e\x68\xd5\xd2\x54\xaa\x2a\xd0\x80\x23\x40\x6a\x69\xba\xf6\xde\xf9\xd7\x9b\xeb\x7f\x45\x54\x53\x78\xea\x2f\x7d\x02\x2d\x71\x06\x89\xaa\x77\x1d\xcb\x15\x4f\x59\x72\xa9\x81\x96\x14\xe3\xab\x94\xe8\xf0\xff\x9d\x47\xd2\xa3\x7f\x1e\xbd\xa6\x8f\x8f\xa5\x7c\x48\xdc\x17\x3c\x36\x61\x59\x8b\xcf\x7d\x5b\x85\xba\xe2\x45\xb8\x5a\x85\x37\xa7\x9b\x28\x26\x40\x21\x1e\xfe\x85\xc5\x37\x7e\x9d\x0b\xbf\x9c\x09\x99\x4e\x60\x64\xef\xe1\xbe\x2b\xe6\x48\xef\x1c\xad\xca\x2c\xd9\x6d\xed\xac\x43\x3f\x48\xd8\x4f\xbc\x74\x64\x53\xee\xbc\x0e\xb9\x1e\x24\x2c\xc9\x43\x8b\x3c\xd7\x14\x29\x5f\x9d\xac\xd7\x54\x26\x36\x4b\xe6\x72\xcb\x78\x09\xa6\x9d\x7e\x07\x65\x45\xb6\xb5\xf6\x6e\xf3\x15\x24\xe8\x5d\x36\xea\x77\xf8\x7b\x33\xfd\x75\x4b\x3b\x44\x7f\x2c\xf0\x2f\x55\x87\x2c\xfd\x7b\x31\xb9\x6e\xc1\xab\xc1\x5f\xad\xfc\x18\xcd\xc3\x60\x11\xe7\x52\xbe\x85\xb1\x69\x3f\xaf\xeb\x51\x86\x1a\xf9\x60\x17\x33\x01\x3e\xb9\x99\x00\x1f\xe9\x4c\xc0\x4f\x6e\x26\xe0\x47\x3a\x13\xfa\x27\x37\x13\xfa\x07\x98\x09\xe1\x83\x4a\xa1\xc8\x42\xa3\xf7\x34\x93\x14\x61\x80\xf1\xcc\x7a\xc9\x34\xd8\xe0\x33\x95\xcc\xe5\x92\x27\xe7\x20\xb1\x0f\xf9\x10\xeb\x88\xe8\x14\x9b\xda\x47\x14\xff\x84\xf7\x95\x66\xc7\x51\x60\x69\x7f\x47\xf7\x15\xdb\x09\xe9\x0f\x5a\x28\x51\xad\x65\x84\x1c\x13\xa3\xcd\x1c\x9f\xde\x55\x55\x45\xf4\xf0\x4b\xdd\xb7\xe3\x2f\xe2\xcd\x1a\xb1\x72\x25\x39\x49\x2e\xfd\x58\x09\x4e\xf0\xcc\xca\x4a\x4c\x7f\x1e\x45\x27\xde\xe4\xab\xaf\xc4\xe7\x55\x5c\xcd\x1d\x77\xfe\x8d\x78\xe7\xed\xc2\x49\x38\x2a\x3a\x6e\x67\xa7\xe2\x28\x73\xd1\x56\xe8\x61\x37\x2a\x38\x4f\x47\x55\xe7\xe9\x38\x75\x9e\xbe\x9f\x28\xab\x23\xd2\x47\x7a\x52\x53\x74\xdd\xca\x8b\x52\xed\xfd\xcc\x3f\x02\x13\xc5\x3f\x52\xa1\x49\xfe\xa1\xff\x6b\x93\x7f\xc0\x64\x96\x7f\x90\x2e\xd9\x33\xff\x68\xca\x5e\x9e\xaa\xec\x1f\xfa\xfa\x14\xbf\x7f\xbf\x44\x89\xc4\x2f\x89\xa3\x09\xa5\xb1\x84\x4e\x8e\x72\x4b\x51\xa6\xa4\xbf\x7f\x7f\x36\xcb\x9d\xcc\x91\x92\x4c\x4e\xfe\xf9\xd2\x4b\x2e\xd5\x6b\xef\x1d\xfe\x99\xbd\xc9\xec\x4c\xd7\xde\xbb\x09\xf3\xa5\x3f\x83\xa6\x62\x6a\x8a\x6d\x2a\x40\xd3\x66\xea\xb5\xb7\x3e\x4a\x4e\xfe\x59\xb4\x64\xa4\xd6\x8a\x7f\x6a\x5f\xaf\xbd\x28\x46\xcf\x83\xe4\x28\xf9\x3b\x9a\x3c\x02\x9a\x76\xac\xdd\x1f\x25\x0a\x9a\xd0\x3e\x67\x3d\x3a\x9a\xdc\x61\x36\x42\x27\x35\xbd\xcd\x30\xd4\x50\xcf\x6e\x2b\xc1\x09\x52\x29\xe8\xe2\x17\xfe\xc5\x51\xf0\x4f\xdd\xd2\x52\xe2\x24\x27\xba\xa5\x3d\x0a\xbe\x40\x27\x48\xa5\x81\xf9\x7c\x48\x00\xe7\x71\xaf\x9d\x9c\x44\xef\xdf\x47\x27\x27\xc1\x14\xbc\x7f\x4f\x9a\x8c\xbc\x60\x11\x5e\x1f\x4d\xfe\x5f\x72\x3f\x99\xdc\xb3\xf7\x10\xa1\x07\x71\xd6\x3f\xf9\xe7\xd1\x1d\x3d\x92\x1c\xeb\x96\xf6\xf7\xe8\x51\xda\x0b\xe5\x16\x1e\x07\x59\x4f\x1f\x25\x7f\x07\x96\xa6\xe0\xf3\xc5\x71\xa0\xe2\x7f\x94\xf4\x11\xf7\x96\xc2\x94\xfc\xe3\x40\x65\x7f\xe1\x46\xef\x95\xcd\x49\xc4\xd9\xbe\xe6\x6c\x91\x2c\x4e\xce\x82\x99\x72\x7d\x72\x57\x36\xfb\x14\x8d\x42\x9c\x11\x48\xe1\x18\xfa\x38\xa3\x40\x3a\xfc\xa9\x9b\xfe\x77\x7f\xaf\x5c\x9c\xdc\xdd\x2b\x7c\x3c\xc5\x75\x4d\x3c\xc5\xc5\x19\x9a\x9d\x5c\xb3\x78\x8a\x8b\x62\x3c\x05\xff\x53\xb9\x28\xc7\x53\x5c\xd4\xc6\x53\x5c\xbc\x7f\x7f\x51\x8e\xa7\xb8\x28\xc6\x53\x5c\x9c\x2c\xba\xc4\x53\x14\xf8\xf4\x68\xa3\xcc\x15\x34\x79\xff\x1e\xdd\x4f\x94\x8b\x89\xb2\xe6\xe2\x29\x2e\x4a\xd1\x0e\x17\x2c\x9e\xa2\x50\xfe\xf5\x45\x55\x24\xac\xb3\x78\x8a\x8b\xe6\x78\x8a\x72\x0b\x62\xa9\x86\xbb\x78\x81\x87\x47\xe3\x29\xbc\x93\x0b\x25\xa2\x71\x3c\xf8\xc9\x42\xb9\x56\xd6\xca\x45\x67\xfb\x66\xdc\xc7\xbe\x89\xb5\x89\xb5\x17\xa1\x20\x99\xae\xa3\xf0\xdd\xed\xbe\x20\x26\xfe\x43\x07\x2f\x7e\x5e\x86\xbf\x09\xed\x88\x55\xc3\x21\x1f\xb9\x5b\x40\x0e\x2c\x8f\xaf\x72\xea\x94\x67\x5d\x00\x1f\x04\xd5\x94\xa3\x5c\x89\x2e\xd0\x12\x7b\x36\x60\xeb\x16\x4f\xd0\x43\x07\x7b\x6d\xd6\x71\x12\x21\xef\x7a\xea\x07\x4c\xd6\xed\x13\xc6\xff\xaf\xff\xd5\xae\x96\xdf\xfe\xea\x36\x1a\xa1\xe7\xe1\xf5\xb9\x1f\xa0\xc5\x93\xc5\x22\x42\x71\xdc\xe0\xcf\x4c\x5c\x99\x98\xcd\x9a\x25\xb5\xea\x62\xbc\x4e\xe9\x57\x26\xd5\x14\x93\x8a\x59\xb2\xad\x3a\x4b\xf6\xa6\x8c\x21\x27\x8b\xe1\xcf\xdd\xca\xdf\x05\x44\xf7\xde\x56\xba\xfc\x50\x50\x6a\xbf\x62\x10\x67\x63\xa5\xcb\x2d\x75\x98\x13\x1e\x39\xd2\x2f\xea\x13\x12\xa6\x8b\x90\x5a\xbd\x9e\xa2\x38\xf1\x03\x72\x2d\x98\xe3\xfd\x0a\xaa\x6c\xd1\xd7\x9b\x7b\x9c\x66\xfd\x28\x0f\x52\xae\xf5\xe4\x16\x74\xef\xcd\xed\x9a\xe5\x06\x8c\x10\x5e\xa4\x8b\x3f\xfe\xdc\xa0\xe8\x76\xa8\xaf\xb7\x4c\xfd\x29\xd8\x1a\x3b\xdf\xcc\xaf\x18\xc6\x6e\xd1\xab\xa2\x86\x53\x8b\xd6\xdb\xb4\x65\x4c\xc1\x94\x93\x5f\x65\x5f\xcd\xca\x48\xa0\x42\xca\xb3\x7a\x59\xa8\x7b\x05\x9b\xa0\xe6\x4b\xae\x15\xe6\xa9\x57\x04\xde\xa4\x29\x58\x69\x8d\x3d\x9c\x41\x6a\xe7\x46\x08\xb8\x81\xbb\xe4\x25\xde\x1c\x05\x29\x74\x24\x0f\x3e\xaf\xb4\xbf\x2f\x0b\xcd\xad\x83\x91\xbc\x99\x47\x48\xde\x42\xd3\x4a\x00\x29\x40\x24\x35\x5c\x17\x40\xcb\x6b\x0f\xf5\x79\xf7\xfb\x5d\x15\x34\x62\xc5\x97\x16\x26\x4f\xa1\x3e\x10\x47\x5d\x10\xb6\xeb\x26\x99\x36\xfd\x22\x9c\x7b\xab\x6f\xfc\x60\xf1\x3a\xc4\xab\xe2\x95\x47\x70\xd6\xfb\x44\xe6\xb5\xcc\x0d\xc1\x19\x9a\x9e\xfb\xc1\x62\x1a\x93\x26\xa6\x6b\xd2\xc6\x36\xa9\x45\x24\x89\x74\x5b\xc2\xb5\x4a\xb4\x56\x09\xd7\x3a\xf2\x04\x11\x91\xb1\xbe\x9d\x9e\x6f\x92\x84\xf8\x07\x96\x00\x0f\x52\x17\xd0\x66\x5a\x2a\xb2\xb8\xb3\x72\xb3\x2b\x2b\xcf\x1f\x75\x93\x34\x90\x51\xfa\x4d\xd7\x35\xb9\xc6\xd9\x2a\x13\x4c\xb8\x40\x3b\x58\x3b\x55\x61\x59\xa2\xd3\xcb\xf4\x02\x6a\x3a\x04\x3e\xac\x7f\x12\x86\x26\x61\xaa\x8b\xba\xf9\x8a\x61\x04\xf5\xca\x6a\xd0\x9c\x56\x40\x48\x8e\x54\x15\xc3\x83\x00\xd0\x56\x35\x55\x53\x41\x16\x26\x2c\x1f\xcb\x55\x4e\x63\x5d\x1b\x51\x48\x73\x9c\xe5\xa5\xfd\xd9\x86\xab\xd8\xa0\x1e\x70\xcd\xc3\x99\x22\x73\xa4\x6d\x71\x68\x64\xd8\xc2\x63\xf2\x60\x43\xb2\x84\x8e\x9b\x42\x6d\xfb\xad\x6d\x17\x6e\x2b\xb7\x32\xe0\xd2\x9c\xc3\xa9\xf9\x96\x3a\xb4\xe5\x29\x19\x72\xcb\x2d\x33\xf4\x06\x61\x32\x25\x48\x23\x1e\x81\x81\x1b\xc7\x92\xdb\x74\xee\xda\xbf\x33\xe1\xfe\x25\x62\xf8\xd7\xaf\xfe\x7f\x7e\xfb\x5e\xbb\xd8\x9b\x44\x0c\x0f\x99\x56\xa1\x7a\x32\xad\xa6\x58\xd0\xe8\xd5\x4b\x7b\x8a\x05\x1e\x10\xb7\x39\xc5\x42\x21\xb3\xc2\xa7\x96\x57\xa1\x82\x74\x29\xb0\x26\x55\xe8\x2e\xc8\x2d\xa0\x8f\x93\x63\x01\xd4\xa2\x36\x0a\x1a\xa8\x40\xff\x83\xda\xd4\x01\xf5\x5f\x17\x8e\x7a\x3b\xa4\x49\x0a\xc1\xb5\x43\xaa\xd4\xa6\x44\xe8\x48\x97\x4e\xdf\x17\x52\x2a\x34\x7d\xce\xa3\x6b\xf6\xd1\x72\xe4\x22\x2a\x7c\xf7\x94\x0a\xa0\x47\x4a\x85\xcc\x9f\xca\xc8\x53\x2a\x00\xf3\x81\x53\x2a\x18\xb3\x1e\x6a\x16\xc8\xfb\xbc\xc3\x94\x0a\x06\x6e\xe1\xc3\x21\x52\xef\x45\x4a\x05\x67\xe4\x8c\x0a\xc0\x29\x64\x54\x00\xee\x4c\xc8\xb2\xe3\x66\x54\x68\x82\xd5\xfe\x40\x09\x15\x80\xfd\x59\x26\x54\xa8\x9d\xd3\x4f\x28\xa1\xc2\xa8\xc8\xdb\x3a\x2f\x98\x61\xf5\x47\x1d\x27\xed\x2c\x9d\x02\xe8\x90\x4e\xa1\x01\x4c\x5b\xdc\xdb\x5d\xa4\x53\x10\x2a\x2a\xe2\x74\x0a\x5a\xde\xc9\x3a\xb7\xdc\x01\xd1\x6e\xdb\xa2\x60\x6f\x11\x8f\x5b\x45\xc2\xee\x54\xd9\x01\x2e\x7b\x3c\xf9\x6e\x7d\xae\x70\xd9\xa5\x6b\x27\x01\x12\x6f\x01\x31\x77\xb5\xbe\xf4\x04\x30\xd7\x4a\x63\x9d\x02\x08\xe3\x6a\xa5\x02\x24\xee\x9d\x83\x67\x93\x69\x3f\x80\x67\x0f\x8f\x3f\x3f\xeb\x00\xf3\xdc\xc8\x61\x5a\xc3\x1b\x35\xf3\xd3\x46\x86\x1a\xf5\x45\xcc\xbe\x3d\x02\xa0\x87\x8e\x57\x80\x42\x5f\xf7\xca\xae\x46\xdc\x1d\xc7\xfb\x13\x85\xaf\xee\x89\x54\x4d\x6c\xc7\xc9\x2e\x91\xaa\x79\x28\xea\x16\xd4\xea\x81\x48\xd5\xed\x26\xe1\x7d\x31\x5a\xef\x95\xff\xd2\x9f\x57\xef\xfe\xc7\x9b\xff\x63\xd5\xe8\xbf\xc4\xfa\x2a\x7b\xb9\xff\x52\x0d\x18\x71\x9b\xe7\x92\xa3\xc8\x78\xf4\xd3\x79\xb8\xc2\x22\x84\x61\xcc\x88\x4d\xc5\x05\xdf\xa5\xdc\x27\x85\x54\xbf\xf2\x83\x2b\x62\x00\xcf\x37\x38\x39\x2d\x93\xd2\x1a\xba\xeb\x1a\x1d\xb6\xa5\x7e\x38\x5d\xf9\xae\x04\x04\x91\x8e\x40\x39\x93\x9f\x33\x36\x3d\x0d\x37\x41\xcb\x8d\x67\xab\xa3\x41\xc9\x74\x45\x13\x9d\xd3\x66\x5e\xa2\xf8\xf2\x75\x9a\x8c\x4b\x74\x12\x6e\xbd\x58\xfc\x0e\x79\x2b\xce\x8f\xa0\xc6\x3a\xc5\x5c\x49\xc8\x96\x90\x41\x85\xd4\xb8\x92\x88\x89\x43\xfd\x21\x23\x3f\xf1\xe7\x19\xe0\x6a\x75\x00\x43\x49\x94\xfe\xf7\x24\x91\x56\xc8\x8b\x13\x29\x0c\x90\x74\x49\x86\x26\xcd\x2f\xd1\xfc\x4a\x0a\x03\x52\x96\x8a\x0f\xc9\x8f\xa5\x0b\xcf\x5f\xf9\xc1\x52\xed\x7a\xdb\x5d\x33\xa8\x1b\x2f\x0a\xfc\x60\xb9\x07\x63\xba\xf4\x62\xc9\x93\x58\x7f\xb6\x1d\xd6\xda\x8b\xe3\x9d\x0e\x6b\xb5\x2a\x8c\x26\x96\xbc\x08\x49\xac\xd5\xce\x9d\x2f\x55\xfa\xe6\x12\x45\x88\x54\x14\x84\xc5\xda\xd5\x2e\x36\x9b\xee\x85\x4a\xd1\x2c\xde\x7c\x97\xcc\x2f\x44\x8f\xad\x61\xab\x10\xb7\x2f\x2f\xe6\x6a\x8c\xa2\xb7\xfe\x1c\xc5\x6a\x7c\x19\xde\xe4\x64\xcf\x1d\x17\xcf\x68\x3f\x0a\xc1\xb9\xe5\x14\x68\xe9\x57\x15\xd7\xb9\xaa\xc7\x9a\x9e\x4f\x1e\x2f\xe4\x79\x1f\xc0\x9a\xba\xd2\x6e\xa5\x5e\x7d\x75\x57\x34\x7c\x87\x3a\x78\x01\x72\x1d\xaa\x76\xa2\xae\x3d\x9d\x97\x43\x82\x0b\x8e\x1a\x91\x28\x20\x6f\x0f\x57\x80\x7a\x46\x94\x1b\x3d\x54\x47\x69\x9a\x77\x42\x68\xd1\x5b\x3b\x6c\x7c\xd4\x7b\xb5\x17\x94\x9c\xdc\xd9\xb9\x54\xa4\x46\xe4\x96\x19\xca\x05\x29\x77\xd6\xe2\x20\x57\xed\x3a\x55\x8f\xcb\x6f\xbd\x04\xdd\x78\xb7\xa7\x24\x22\x44\xce\x9c\x54\xb6\x04\x1a\x68\xb9\x33\x6a\xdd\x5b\xcb\x0e\x3b\xf5\x9b\x6b\x93\xa3\x4e\x5f\x27\x1d\xbd\x83\x93\x4e\xce\x88\xfa\x18\xae\x31\x7a\x0f\xae\x14\x58\x26\x07\x1c\x67\x5a\x3c\x65\x2e\x23\x74\x31\x4d\xc2\xd4\xaf\x66\x5c\x97\x99\x3d\xf4\x94\xd9\x43\x07\x99\x6f\xc2\x64\x73\x91\x3c\x7b\xbe\x37\x0e\x32\x4c\x28\x7d\x64\x1e\x35\x55\x47\x1a\xb3\xab\x23\x0d\x84\x5d\x1d\x69\xb2\xaa\x0a\x1e\x35\x9f\x9e\x4f\x4d\x97\x8c\xa7\x29\xe5\x05\x6e\x23\xce\x38\xae\x34\xf5\x09\x50\x05\x0d\x54\x5c\x3e\x6a\x92\x73\x37\x7e\x2d\x70\xa5\x19\x93\x14\xdb\x78\xd0\x74\x24\x46\xad\x07\x4c\x47\x72\x74\xfa\xbe\xe0\x41\xd3\xf4\xf9\x08\x1e\x34\x4e\x2f\x0f\x1a\xad\x87\x07\x4d\x76\xa1\xe8\xe6\x1e\x34\xc4\xfb\xee\x21\x3d\x68\xdc\xfe\x1e\x34\xd4\x63\x70\x77\x1e\x34\x2e\x6e\xa1\x83\x07\xcd\x58\xd7\x90\xfb\xe0\x41\x03\xf4\x91\x5d\x68\xa0\x5e\x70\xa1\x81\xc6\x4c\x9c\xa0\x72\x54\x17\x1a\xd0\x74\xad\xfa\x81\x7c\x68\x48\x62\xee\xcf\xcf\x87\xa6\x76\x52\x3f\x21\x1f\x1a\x20\xba\x62\x04\xfd\xef\x18\x3b\xe6\xaf\xaf\xe3\xa5\x9d\x79\xd1\xb4\x5c\xf9\x95\x7d\xb0\xdd\x42\x59\x5d\x6f\x77\xe1\x45\x23\xd4\x51\xc4\x5e\x34\x7a\xde\xc9\xdd\x7a\xd1\xd8\xe2\x1b\x39\x13\x93\x75\x4c\x2f\x1a\xd0\x0d\x3f\xfa\x03\xba\x80\xb2\x43\xc2\x3e\xb8\x80\x66\x92\xbf\xa3\x68\x27\x79\x6a\xd0\x45\x8b\x34\x4f\xed\xe8\x75\x72\xfc\x23\x71\x9b\x69\x17\xde\x1d\xd4\xfc\xcc\x79\xbe\xa4\xd0\x77\x0e\xe4\xda\x1b\x7f\x91\x51\x3d\x22\xdb\x64\x39\xe7\x36\x14\xa1\xa5\x1f\x27\x28\x22\x49\xcd\x82\x30\x99\x72\x05\xa3\x79\x04\xc9\xa3\xf9\x46\x96\x57\xc0\x18\xf2\xbc\xbf\x34\x17\xba\x41\x0a\xf9\x7a\xa7\xde\x8f\x03\x1d\x42\xaa\x9e\x8f\x07\xa7\xc6\xf1\x14\x6e\xf0\xb9\x3a\x35\xd6\xf8\x99\xf5\xf7\x64\xac\x73\xe0\xea\xe4\xbe\x58\xac\x8a\x5e\x04\xb7\xf4\x8a\x9a\x4f\x5a\xbb\xc5\xea\x6a\xe9\x18\xab\xec\x21\x1c\x2b\x09\xeb\x1d\x1c\x2b\xfb\x53\x36\x97\x19\x66\xb6\x3b\x65\xd9\xfe\x44\x33\xcd\xb6\x82\x92\xd5\x78\xd8\xe9\xb6\x9b\x7f\xa3\x88\x91\x41\xf5\x41\x0d\x13\x74\xf7\x65\xec\xb2\x38\x76\xe0\xbe\x29\x5c\x5b\x40\xf0\x64\x67\x03\xec\xee\xad\xd9\x79\x7b\x1f\x81\xc1\xa8\xaf\xc5\xb4\xa0\xdd\xee\x92\xcd\x6a\xbc\xd1\x8b\x0e\xc2\x63\xcf\xc0\x07\x71\x10\xae\xf3\x89\x2f\xb9\x02\xef\x66\x6c\x3b\x60\xae\x4f\xd4\x67\x78\x0c\x47\x62\x72\xc6\xff\x73\x97\x8e\xc4\x2d\xce\xc3\xbc\x9f\xf1\x96\x8e\xc4\xfb\xe4\x3f\x9c\x39\x76\x3c\x9a\x5f\x7a\x51\xa2\xbe\x23\xab\x60\xa7\x57\xf8\x79\x01\xb9\xac\x2f\x38\x97\x30\xa0\xd1\x63\xd9\x5f\xe0\x7a\xc2\xe0\xf8\xee\xa7\x67\xaf\x9f\xbd\x39\x3e\xbb\xa3\x19\x29\xd9\x93\xfb\xd9\xbd\x42\x7a\x1a\x1f\xdf\xe1\x82\xe3\x3b\xfc\xea\xeb\x9f\x4f\x4f\x9f\xbd\x7e\xcd\xbd\x1c\x6f\x48\x7a\x40\xf9\x7e\xa6\x3c\xfb\xe9\xa7\x1f\x7f\xe2\x1e\xd1\x54\xdc\xf7\xb3\xfb\x7b\x85\xbd\x75\x7c\x77\xaf\x90\xd2\xe3\xbb\xfb\xfb\xfb\x5e\xc4\xeb\x96\x51\x49\xe9\x39\x0b\xa5\x0c\x4c\x4a\x30\x9e\x07\x45\xd4\xec\x41\x71\xf3\xe2\xe6\x97\x9f\x6f\x9e\xfd\x29\xf6\xa0\x78\x4d\x79\x44\xfe\x76\xe3\x45\x0b\x92\x83\x91\xad\xa9\x85\x1f\xaf\xbd\x84\x02\x64\xb0\x77\xd2\x19\x50\x18\xc1\x15\x99\xa4\x10\xe3\xf2\xd0\xe6\xae\xdd\xa9\x94\xff\x2a\x97\xcb\x02\xcf\x05\x5c\x30\x25\x74\xca\x34\xd1\x38\x9a\xa7\x86\x06\x8d\x1e\xd5\x28\xa0\x52\x1f\x2f\x6d\x01\xf4\x65\xce\x98\xd4\xff\x81\x98\x0e\x84\x07\x2a\x1e\xc1\xd2\x49\x95\xda\x99\x22\x33\x8e\x94\xcb\x87\x0f\xfe\x1d\xc2\x98\x8d\x6f\x90\x25\x30\x04\x8f\x31\x1d\x17\x37\x8a\x96\x5b\xde\xdc\x3e\x97\x0d\x5e\x4d\xfc\x84\xf9\xc3\xcb\xbc\xb3\x97\x9b\xa6\xdf\xe3\xa8\x95\x14\x48\x05\x0d\xc5\xe0\x1b\xa7\xee\xdb\x19\xcc\x02\xa0\xf3\x53\xe6\x10\xf6\xd8\x9a\x65\x49\xb0\xb3\x4f\xeb\x12\xfd\xa4\xe7\x75\x73\x96\x33\x5c\x99\xa0\x4d\x23\xcc\xbf\x11\x8d\xb1\x53\x15\x69\xdf\x83\x0e\x69\x6d\xcc\x7c\x0e\x93\xc8\x5f\x2e\xa9\xff\xcb\x65\x78\xf3\x63\x70\x1a\x21\xba\x6e\x16\x68\x45\xb6\x9f\x30\xf8\xce\x5f\x2c\x10\xa1\x9f\x7c\xed\x05\x1b\x8f\x9b\x35\x11\xe8\x19\xa6\x01\x91\x91\x35\xe7\x5e\xcc\xbe\x9a\xa2\x6b\x9a\xc6\xdf\x9e\x3a\xb3\x62\xee\x1c\x47\x01\x30\x73\xb0\x6f\xf2\xbf\xb3\x14\x5b\x71\x1a\xe1\xa9\x04\x3b\xbf\xa2\x2b\x86\x62\xf6\xdd\xff\x6f\xfc\xe4\x72\x8a\x69\xce\xfc\xaf\xd2\x1d\x9a\x4a\x84\x6b\x2c\x78\xc8\xe6\x1f\xe0\x33\x6a\xea\x97\x57\xf2\xd6\xbb\x08\x98\x76\xd0\x6b\xfb\x2e\x09\xfa\x6c\xbf\xa6\xe9\x03\xbc\x96\x04\x02\x93\xbb\x2c\x61\x80\x17\x2d\x37\x64\x91\x32\x00\x78\x22\xa9\x4e\x82\xf4\xb3\xfb\xfb\x5c\x5c\x7b\x8d\xf8\xd8\x91\xe2\x4d\xee\x27\x93\x2f\x1a\x77\xa8\x85\x97\x78\x5c\x40\xcc\xd6\x79\xff\x94\x95\x12\x2b\xbe\x12\x2a\x1c\xa2\xb7\x72\xae\x5c\x2a\x6f\x95\x5b\x65\xa9\xfc\x98\xe7\x05\xfc\x83\xee\x57\x4a\x34\xb9\x0b\xea\xd2\x20\x90\x74\x80\x1c\xe2\x7b\x50\x9b\x06\x21\xa8\x49\x83\x10\x94\xd3\x20\x04\x05\xcc\xf3\xa0\x8a\x79\x1e\xe5\x69\x10\xee\xb3\xce\xbe\x4a\x3b\xab\x78\x74\xb0\xab\x93\xbb\x7b\x96\x4d\x40\xe2\x91\xe4\xa3\x1a\x24\xf9\xd5\x19\x9a\x9d\x44\x0c\x49\x7e\x55\x44\x92\xe7\x7f\x2a\xab\x32\x92\xfc\xaa\x16\x49\x7e\xf5\xfe\xfd\xaa\x8c\x24\xbf\x2a\x22\xc9\xaf\x4e\x82\x2e\x48\xf2\x01\x97\x27\x20\x62\x7a\xc4\xfb\xf7\xc1\xfd\x44\x59\x4d\x14\x8f\x43\x92\x5f\x95\x70\xde\x57\x0c\x49\xbe\x50\xfe\xf5\xaa\x4a\x55\x2f\x43\x92\x5f\x35\x23\xc9\x97\x5b\xa8\x67\x8c\x15\x19\x1e\x41\x92\x5f\x8d\x96\xf6\xf1\xa6\x59\xe9\xf9\x45\xd3\x1e\xfd\x69\xff\xf5\x0f\xb1\xd2\xc3\xb9\x55\xd6\xaa\x27\xe5\x54\x30\x45\x93\x9e\x26\x0e\x55\xd0\xf2\xc7\x72\x82\xa2\xeb\x1c\x2b\x52\xe6\x25\x34\xa8\xbb\x9c\x90\xa9\xbc\x86\x05\x0d\x24\x73\xb8\x4c\x3b\x9d\x06\xb8\x9d\x72\xf1\x71\xf2\xb3\xeb\x35\x71\x9b\x10\x77\x95\xe5\x73\x4c\x5d\x76\xf8\xce\xe0\x07\x2c\x10\x2f\x1f\x94\x25\xb8\x30\xc8\x5f\xc4\x62\x37\x58\x52\x28\x56\x4d\x68\x8c\xf5\x82\x30\xb8\xbd\x0e\x73\xeb\x5b\x81\x02\xd5\x36\xcc\x71\xdb\xa8\x66\x13\xae\xdf\x8e\xa8\x06\x4b\x36\x13\x2f\x57\x7e\x17\xd3\xcd\x7a\x41\xb7\x6f\x5e\xe9\xcf\xbd\xc6\x97\xc9\x80\xd3\xa3\x50\x8a\x17\xf2\x02\x3f\xcb\x73\xdb\xf8\x01\x59\x2a\xcc\xc8\x74\x94\xde\x9c\x4f\xb2\x44\xc1\xe5\x17\xc8\xb5\xc9\x24\xcb\x1b\x5c\x79\x4c\x67\x1f\xaf\xc6\x52\xf2\x9c\x34\x87\x2a\xee\xe9\x26\x41\x0b\xd5\x5b\xf9\x5e\x9c\x7e\xf1\x9a\x56\xc0\xee\x75\xb1\xc8\x8a\xe5\x89\xe2\x97\xbe\x39\xa2\x0c\x8f\xb7\xf2\x65\xac\x66\x6d\x85\xd5\xd7\x6e\xd7\xb9\xc7\xf5\x4b\x94\x5c\x86\x8b\xcc\x77\x98\xdc\x72\x92\x0a\xe8\x6f\xdc\xd0\xa6\xae\x06\xda\x10\x1d\xf3\xbc\xf2\x12\xfe\x8b\xe5\x4f\x4f\x1b\x43\x0b\x79\xa2\x2c\x2a\x6f\xd2\x87\x6f\x68\xef\xf3\x41\xf2\x9d\x9a\x28\xd7\x75\xbd\x98\x87\x41\x42\x79\xa3\xd4\xef\x75\xe5\x0b\xf2\xc2\x1d\x61\x6f\xf5\x6c\xa6\xd0\x3f\xd8\xf7\xea\xd9\xec\x5e\x9e\x28\x17\xa5\x9c\xcf\xe7\x3d\xd2\x1a\xf1\xa9\x8c\xfe\x60\x39\x7d\x52\x97\xec\x4b\xa2\xa3\xe4\xe5\xd4\xeb\xfc\x6d\xb9\x94\x9f\x6f\x59\xb9\x2d\x3d\xa6\x13\xbc\x14\x7e\x84\x29\xf6\xd2\x5b\xcb\xca\x8f\xf4\x31\xc9\xb8\x83\x49\x74\x94\xa7\x3e\xc9\xb2\xed\xe0\x72\xf2\x02\xcf\x04\xa2\x17\xf3\xba\xdf\xbf\x97\xd1\x3b\x6f\x9e\xc8\xdc\x77\xaf\x32\xef\x3c\xd1\xb7\x6c\x26\x8a\x8e\x65\x3e\x8a\xb9\x0a\xf0\x9c\x97\x3e\xc5\x63\x7c\xff\xbe\xdc\x83\xf7\xef\x65\xbe\x61\xdc\x21\x2e\xeb\x11\x9d\xb2\x25\x4a\x18\x45\xea\x9b\xbf\xa5\xdb\xb0\x3c\x79\xff\xbe\xc7\x47\x72\x9a\x0f\x49\x0a\xd0\xcd\x91\x1c\x27\x91\x1f\x2c\xe5\x93\x13\x4c\xc6\xf0\x82\xf6\x9b\xa7\xe4\xd7\x5c\x09\x9b\x97\xb3\xca\x4b\xb3\x63\x11\x99\x27\x34\x83\x53\xca\xf8\xca\xdd\x05\x16\x51\x51\x7c\xcc\xf6\xed\x8b\x28\xbc\x7e\x46\x4d\x73\xe9\x8e\xcf\x2c\x75\x47\x5c\x0b\xa9\xc4\x58\x47\x68\xe1\xcf\x89\xad\x8b\xd0\xf6\x76\x8d\x26\x93\x2c\xfb\xd1\x59\xa2\x04\xb3\xc9\xc9\x3f\x33\x95\x02\xbd\x7f\x8f\x54\x3f\x98\xaf\x36\x0b\x5c\xdf\x64\x32\xb9\xa7\x7c\x94\xaf\xe5\x7c\xb6\xb2\xaf\xb8\x61\x84\x51\xf2\xf5\x19\x1b\x18\x31\xef\x72\x1f\xe6\x3d\x38\x2a\x7e\x41\x9b\x20\x8b\x31\x4b\x0c\xc5\x4b\x0f\x46\x7b\x39\x55\xc2\x4a\x84\xcf\xdf\xfc\xea\xab\x23\x96\x52\x2a\x2f\x9b\x30\xcd\xbf\x9c\x36\x2c\x5b\x84\x58\xe2\x95\x84\x2f\x2e\x3e\xca\x45\x96\x82\x26\xec\x84\x41\xdf\xe7\xf8\x10\xe5\x8b\x46\x96\x53\x52\xe4\xac\xfd\x75\x61\x2e\x8f\x4b\x5c\xc1\xfe\x3c\x2a\x7d\x44\xc9\x91\x7e\x74\x34\xb9\xf3\x2f\x8e\x04\xb4\x66\x9c\x3a\xe1\xd7\x4e\x2a\xca\x98\x22\xfb\x45\xba\x3e\xb8\x6e\x08\x59\xe2\x0b\xbe\x09\xd4\xa1\xca\xe4\x44\xc4\x7b\x85\x7e\xe5\x5c\x86\x94\x04\x73\xd9\x37\x61\xb8\x42\x5e\x80\xd9\x8a\x26\xce\x4a\x1f\x9c\x21\x25\x5d\x52\x5f\x66\x33\xfb\x75\x42\x57\xea\x71\x32\xcb\x16\x5f\xa1\x43\xac\x7a\x74\x24\x58\x18\x84\x73\x29\xdf\x92\x97\x39\x51\x91\x77\x94\x30\x1c\xc9\x36\x56\xcb\x5f\x48\x4d\x8d\x70\xcf\xde\xa2\x20\xf9\x1a\xa5\xad\x1f\xa3\x7b\x36\x79\xa8\x2a\xbd\x4e\x10\xe5\x16\xd2\xc0\xfd\xbd\x72\x79\xf2\xea\xe8\x9c\xcf\x5a\x9f\xee\x09\x67\xc1\x4c\x19\x98\xb6\x0b\x2b\x59\xf7\x13\xe5\x6d\xb9\x6a\xba\xad\x9c\x45\xdb\x56\x7c\x5b\xa9\xb8\xb8\x33\x9d\x79\xdb\xb6\xb0\x2c\xb7\x40\x37\xb7\xb3\xd5\xe0\x8a\x2b\xa9\xcc\x64\x92\xcc\xf0\x47\xf1\x50\xb2\xfd\xf2\x2c\xde\x76\x28\xc2\xfa\xa9\x3a\x73\xe6\xcf\xd2\xfc\x69\x4b\x94\xfc\x78\x13\xa4\x12\xe8\x29\x8a\xe7\x91\xbf\xc6\x82\xb1\xee\xe3\x89\xc2\x3d\xa9\x69\x85\xea\x49\x67\xe1\xa0\x56\xc8\xc7\xcd\xad\xf0\x4a\xdc\xd9\xa6\x67\x2b\xdc\xc7\xcd\xad\xb0\x03\xc7\xd9\xbc\x67\x03\xf4\xbb\x2e\x74\xc2\x62\xfc\x6c\x31\x88\x4a\x44\xfb\x6c\x6a\x21\xd7\x9c\xcf\xae\x7b\xb6\xc0\xe9\xb7\xcd\xb3\xc0\x54\xdc\xb3\x75\xef\x29\xa0\x5f\x76\xa1\x91\xac\x9c\x5d\x0c\xa2\x50\xb9\xf6\x73\xfe\xe2\xec\x59\xa3\xe9\xed\x46\x79\xd6\x9e\x9a\x8e\x1c\xda\x2e\xc2\xe8\x5a\x64\x74\xcb\x7d\x69\x58\x80\x97\x8f\x4f\x8d\x8b\x29\x75\x31\xc3\x67\xcb\x87\xbb\xf9\xd1\xce\xa3\xa7\xaf\x5f\xff\x24\xce\x59\x27\x63\xa9\x42\xac\xd5\xde\xda\x6f\xbb\xa8\x21\x24\x58\x85\x04\xdc\x86\x8f\xce\x27\x66\xc7\x38\x9a\x97\x9d\xf3\xc2\x20\x85\x5d\x30\x94\x92\xb7\xa8\xfc\xe8\x6f\x77\x59\x18\xff\xfd\xa3\xbf\xdd\xd1\xe8\x7e\xfc\xd7\x62\x8e\xff\x97\x1c\x0e\x1e\xfd\xed\x2e\x8e\xe6\xf7\xb2\x22\xb0\x83\x08\x60\x26\x14\x99\xe4\x44\x4b\x8f\x96\xe9\x15\x92\x49\x5d\xaf\x4c\x7a\x01\x61\x12\x2b\x83\x6e\x52\xb4\x00\x53\xd1\xf3\xc8\xbb\x59\x15\x48\x53\x23\xc1\x56\xc9\x53\x2f\xf1\xe4\x41\xee\xdb\x1d\x9c\xad\x08\x45\x3b\x3b\x06\x16\x71\x13\xc8\x94\xa4\x73\x98\xde\x9d\xf9\xc1\x15\x26\x3f\xa3\x03\xf3\x61\x21\xf3\xb1\x40\x2b\x94\xa0\xc2\x3c\x71\xe6\x97\xee\x13\x33\x64\x46\x04\x73\x51\x00\x80\x35\x15\x20\xca\x8f\x65\x16\xd0\x46\x4c\x92\x9e\x8b\x2b\x30\xe8\x3c\x1a\x34\x6a\x43\x30\x7d\xa4\xe2\x2a\x3e\x48\xe5\x15\xb3\xa7\x77\x72\x11\x9c\xc8\x9e\x09\x8d\x75\x78\x7a\xf2\x08\x00\x45\xf6\xe3\xec\x3a\x28\xbd\x3c\x5d\xf8\x31\xde\x02\x17\xe4\x66\xf5\xfc\xda\x4f\xe8\x55\x11\x4a\x32\x8a\x11\x6f\x6c\x11\x63\x66\x33\x98\x53\x07\x58\x39\xaa\x0a\xbb\xc0\xca\x0b\xfc\xe0\x62\x45\xdc\x62\x67\x75\x74\xa0\xef\xad\x51\x14\x13\x40\x2d\x56\x27\x68\xa1\x1e\xfd\x2a\xed\x74\xf9\xa3\x1e\x81\xad\x45\xdc\x08\x47\xd1\x33\x07\xe3\x5a\x40\x28\x53\xd1\x06\xc5\xcd\x36\xae\xc8\x9c\x72\xfd\x9d\x80\x6f\x7d\xb4\x5a\x8c\x59\x6f\x13\x35\xb6\x74\x20\x1a\x96\xeb\xa6\x85\x78\xe9\x6e\x3f\x3e\xf9\x48\xc2\xf9\x3d\xa5\x5e\x43\x86\xa1\x96\x88\xaa\x72\x35\x43\x27\xaa\x2d\xcd\xfb\x33\x26\x70\x88\xdd\x3a\xc5\xaf\x88\xb8\x0d\x93\x88\xea\x4c\x70\xf3\xd2\x9c\xdd\xbc\x6e\x22\xbf\x60\x1e\xa7\xc2\x8d\x54\x9a\xee\x31\xdc\x16\x83\x95\x28\x26\xcf\xe6\xa9\xd0\xeb\x79\x4f\x5b\xd2\xb9\x0a\x5e\x55\x5e\xa3\x57\x55\xc4\x14\xbe\xec\x89\x4a\x6d\xa7\x47\x99\xe9\x54\xb9\x4b\xbc\x25\x6d\x5b\x56\x16\xe1\xf5\xb1\xd8\x5c\xbe\x08\xc9\x19\x68\xe3\xaf\x16\x28\xaa\x79\x87\xf0\xe5\x44\xa1\xa3\x3c\xfe\x12\x28\x29\x15\xaa\xa7\x41\x7a\x40\x4f\x49\x53\xbc\x40\xbe\x57\xc2\x60\xee\x05\x73\xb4\xea\xff\x1d\x2d\xe7\xbf\x23\xb5\x91\x0d\xe2\x58\x9c\x82\x5a\xbd\xf4\x82\xc5\x0a\x11\xa3\xc2\x11\x9a\xdc\x2b\x0b\x7f\xf1\x13\x9a\x23\xff\x2d\x7a\x92\x24\x51\xcc\x57\x46\x5a\xff\x43\x70\xe9\xfd\x45\x12\xdd\xd2\xa7\x98\x08\xd4\xb0\xc1\x88\x45\x4a\x38\xfb\xce\xfd\xdc\x4b\xa8\xad\xe2\xfe\x5e\xb9\xf1\x57\xab\x9f\x50\xb0\x28\x9e\x98\x6b\x9b\x61\xb3\x19\x67\x76\xd2\x9c\x9f\xe9\x37\x7e\xfc\x53\x16\x11\x75\xc4\xe4\xec\x64\x42\xdb\x79\x8a\xe2\x24\x0a\x6f\x9f\xad\x88\x8c\xe8\xd3\x5e\x6e\x97\xc5\x9c\xa8\xfa\xf1\x0f\xe8\x46\x9e\x7c\xf5\x15\xf9\x8e\x14\x45\xe1\x6a\x75\xee\xcd\xaf\x30\xc5\xfc\xf3\x4d\x82\xe2\xa3\xc9\xbd\x42\x97\x48\x7c\x7c\xc7\x54\xc7\xe3\xc2\xdd\x32\x22\x49\xe5\x99\xc1\xe7\x48\x53\x02\xd5\x8f\x4f\xd3\x83\xc2\xe4\x08\x4d\xde\xbf\x2f\x9a\xda\x30\x21\xdf\xbf\x3f\x4a\xf2\x5f\x2a\xab\xf8\x08\x4d\x70\x27\xc9\x9f\x13\xbe\xd7\xf8\x5c\x9a\xf6\xf6\xa8\x4c\xbc\x74\x39\x7e\xa9\x4d\x94\x1a\x23\xda\x26\x09\x2f\xfc\xd5\xea\xfd\xfb\xbb\x7b\x61\x2a\x73\x6a\xb5\x4d\x79\x29\x6f\x80\x1e\x6d\x14\x74\x3f\x51\x92\x49\x75\xda\xa8\xc8\x48\x98\x25\x13\xff\xba\x57\x84\x4c\xca\xd8\x9d\x3e\xa3\x7d\x5a\x84\xd7\x6a\x10\x46\xd7\xc4\xec\xc1\xb8\x36\xab\x0a\x13\x25\xff\x8b\xa3\x09\x71\xfb\xe3\x4e\x82\x5e\xb7\x83\x1e\x3d\xe5\x3c\x98\x0b\x65\xe1\xa4\x95\xb9\x50\xe2\x02\xea\x42\xf9\xe3\xab\x67\x3f\x1c\x67\x8e\x8f\xa4\xfc\x9e\xf9\x43\x66\xa5\x0b\x3f\x9e\x87\x41\x40\x9d\xab\xef\x95\x17\x3f\x3e\x79\x5a\x76\xba\x54\xe6\x61\xb0\x38\x4e\x0f\x20\xf7\x4a\xa1\x46\x3f\x58\xca\xf7\x33\xe5\xf9\x0f\xbf\x3c\x79\xf1\xfc\xe9\x93\x37\xcf\xf8\xaf\x03\x76\xc6\xa5\x2f\xe5\xae\x9b\xf8\xc3\xe3\xbb\x7b\x85\x7f\x01\xff\x66\x15\x16\xbd\x3a\x4b\x1e\xa0\xe5\x01\xfc\xff\xec\xbd\xe9\x76\xdb\x46\xd6\x2e\xfc\xdf\x57\x01\xe3\xcb\x71\x13\x27\x45\x8a\xa4\x46\xab\x17\x3d\x44\xb6\x3b\xee\x78\x3a\x96\x93\xee\x84\x2f\x5f\x37\x44\x14\x49\xc4\x20\xc0\x00\xa0\x64\x45\xe6\xbd\x7f\xab\xe6\x19\x04\x48\xda\x56\xd2\x49\xaf\xd5\x16\x31\x14\x6a\xdc\xb5\x6b\x0f\xcf\x43\xe3\x39\x57\x2b\x40\x02\x42\x79\x2c\x27\x09\x22\x7d\xf7\xf6\x67\xbd\x0b\x56\x48\x88\x89\x56\x57\x3e\x59\x23\x1e\x54\x9e\x09\x6b\x0f\xfd\xcd\xe6\xd2\xd7\x33\x07\x94\xdd\xc3\xe2\xbb\xeb\xbd\x68\xfb\x40\x50\x62\x31\x48\xb3\x12\x1b\x63\xab\x82\x28\x4e\xc0\x89\x09\xc8\xb7\x2e\xf2\xf3\x00\xe7\xdf\x37\x3c\x67\xe7\x70\xc2\x4b\x22\x23\x2e\xc5\xa5\xd2\x70\x54\xe9\x04\x25\x5a\x35\xb4\x32\x3f\xcb\xb9\x0b\xfd\x91\xa2\x90\x02\xff\x11\x5a\x3d\xf2\x09\xde\x96\x6d\xe8\xc7\xc5\x0b\x7a\xbe\xe7\xc7\x4b\xe5\x13\xfa\x51\xb2\x2f\x47\x92\xf4\xbb\xc6\x59\x92\x9d\x1b\xf9\x0a\x83\xd2\xe8\x3c\x15\xf1\x96\x87\x94\x82\xe8\x50\x8e\x52\x51\x2a\x26\x0a\xd0\x8f\x77\xc7\x96\x28\x44\x39\xd6\xe5\x44\x3b\x7a\x91\x51\xe2\xbd\x4b\xea\x48\x02\x28\x8b\xce\x24\xce\x8b\x92\x4c\x6e\x5f\x03\xdb\x94\x8f\x90\x46\xe0\xec\x46\xc7\x47\xe5\x78\xc8\xde\x12\xf8\x94\xd8\x8c\x33\x6a\x08\x31\x4b\x0f\x10\x27\x2c\x8a\xb5\x5a\x13\x77\x41\xe2\x1a\x54\x6f\x9a\xd5\xa1\x61\x3e\x9c\x94\xac\x2d\xe6\x65\x56\xbe\xa4\x31\x93\x5a\xf4\xb2\x6c\x6d\x10\x9b\x02\x50\xe5\x78\x33\xfb\x87\xd4\xd3\x4a\xd3\xf6\x69\xd3\x4c\x03\x8f\xde\xf6\xae\x61\x56\xb8\x2f\x45\xbc\xb2\x2d\x68\xc7\xe9\xed\x64\x6b\x2d\xb2\x65\x8e\x3d\x48\xa4\xe3\xb2\x05\x4c\x9d\x36\x4c\x29\x86\xf9\x80\xd8\x0e\x0f\xe4\xc6\x39\xd6\x8a\x2f\x99\xd7\xa4\x95\x41\x67\x60\xe5\x2a\xd0\x42\xcc\xe5\x28\xad\x23\x54\x84\xba\xd6\x2d\x60\xa7\xeb\x40\x86\xb7\x38\x61\xae\x07\x88\x55\xa7\xe4\x5c\xcc\x47\x31\xa2\x8d\x27\x98\x65\x29\xdb\x0b\xfb\xfc\xab\x59\x37\x23\xd1\x4c\x20\xc5\x2a\x4e\xe0\xd0\x1a\x0c\xca\x7a\xdb\xc2\xfa\xde\x6d\x64\x5b\xaa\xee\x5b\x5b\x51\x5f\xbe\x67\x71\x2d\xda\x4c\xf5\x26\x0d\x56\xd6\x62\xb7\xe1\xd4\xdf\x41\x2f\x2b\x32\x95\xa8\xd0\x3b\x14\xa9\x8a\x69\xdf\x3d\xd2\xca\x07\xb7\x94\xd6\x0a\xec\xc8\x11\xdb\xd6\x05\x5a\x21\xea\xb2\x83\x6e\xcf\x2a\x85\xeb\xa1\x9c\x68\xf3\x0b\x48\xb8\xe3\x5a\xd7\x55\xe5\x40\x48\xe2\xd1\x92\x3b\x33\x6a\x3c\x57\x77\x3b\x63\xa5\x59\xcb\xd4\x61\x86\x64\x81\x7e\x4f\x62\x92\xa3\xc8\x82\x49\x0d\xde\x03\x8c\xa3\x1a\x8f\x3f\xe0\xc8\x5d\xe2\x5e\xa2\xb8\x17\xcc\x73\xc2\x89\x01\xb6\x4a\x2c\x3e\x06\x43\xff\x7b\x41\x4e\x31\xda\x08\xba\x51\xea\xba\x2e\x8e\x99\xc9\xf0\x44\xe7\x69\x54\xff\x22\x35\xbd\xeb\xbb\xf0\xd9\x1a\xa4\x64\xeb\x95\xff\x2e\x8b\xae\x77\x56\x75\x3b\xac\xba\xf8\xef\x71\xea\x61\x79\xe3\x5d\x85\x85\x47\x2c\x1d\x30\xf2\xae\x66\x71\x52\x94\x1e\xdd\x7f\xb0\x5d\xce\x43\xbb\x3a\xf0\x72\x38\xc9\x61\x31\xf3\xca\xcc\x2b\xf3\x6b\x2f\x9c\x86\x71\xda\xb1\x7f\x7d\xcb\x6e\xa9\x84\x89\xd8\x64\xff\xae\xa5\x13\xd8\x25\x88\x53\x68\xec\x6f\x8e\xee\xb5\xc3\x4d\x69\x97\x8b\x7c\xe7\x1b\xd3\x06\xbb\x62\x95\x7f\xa4\x99\x23\x79\x7d\xff\xd4\x9a\x95\x35\x78\x03\x9a\x3b\x4e\x8e\x8c\xfc\x33\x91\xed\xa6\x24\x62\xf4\xa5\xa4\xca\x17\xaf\x1f\x3f\x51\xe0\x82\xa5\x08\x80\x23\x33\x17\xa0\x22\x85\xad\x1a\x32\x9e\x1e\xa5\xe4\x91\x50\xc4\xbc\xec\x23\x21\x36\x22\xba\xe5\x01\x9f\x1e\x34\xc8\x39\xe3\xb7\x25\x5c\x56\x65\xbd\x65\x04\x3c\x8b\x24\xbf\xe1\x4f\x86\x69\x24\x3b\x70\x0a\x96\x8a\x40\x2d\x28\xfe\x7c\x59\x0a\xbf\x0c\x75\xda\x24\x22\xb1\x41\xca\x67\x68\xea\x84\x91\xad\x60\x9f\xcf\x0d\xc3\x3d\x16\x70\xf0\x00\x62\xbb\x67\x3d\x6b\xbd\x35\xf3\x6e\x23\x7f\x06\xe0\xb9\x53\x22\x7a\x92\xda\xfb\xa9\x51\xbf\x43\xaa\xd8\x09\x17\x8b\x84\x86\xf0\x0e\xc5\xb3\x23\xe2\x47\x79\x9e\x16\x30\x2f\x1b\x79\x1c\x88\x8d\x9b\x9e\xed\x5a\x64\x32\xcb\xae\x04\x61\xae\x61\xc5\x88\x87\x85\x8d\xd6\x67\x36\xf7\x7c\x99\x76\x8a\xf1\x0c\xa2\xc1\x6d\xf9\xe1\xa4\x84\x39\xf1\xb7\xf8\xa0\x15\x0c\x1e\xe8\x25\xd0\xcf\x05\x2b\xc0\xec\x55\x16\x1f\x94\xa5\x6f\x74\x57\x45\x91\x8f\x2d\x16\xfd\xe0\xc6\xe1\x08\x50\xac\xfc\x70\x63\x6b\x7d\x11\xa7\x1f\x6c\x16\x5a\xf1\xc6\xb2\x8c\x93\x62\x2f\xca\xe6\x7b\xf0\x12\xa6\x25\x33\x00\x18\x99\x91\xbb\x32\xc2\xa6\xd5\x46\xd8\xb7\x07\xff\xfa\x3e\xde\x2f\x3f\xda\x8d\xb0\x95\x96\xd4\x9e\x92\xdb\xc5\xb6\x49\x26\x58\xa8\x71\x59\xa3\xf4\x21\x16\x09\xfc\x8c\x1c\x2c\xd2\x6d\x96\x21\xc5\xcc\xbe\x63\xd9\x2b\xdc\x54\x90\x88\xa1\x52\xc4\x48\x5e\x29\x46\x52\x97\x18\x91\x85\x07\x75\xc7\xba\xfc\xb8\xfc\xe3\xf4\x92\x1f\xac\xf5\xfa\x26\xd9\x74\xea\x74\xfa\x92\x9b\x7e\x60\x71\xb3\x12\xe7\x2b\x71\x56\x28\x17\x71\x17\x9e\xea\x09\x41\x12\x50\x22\x47\xca\xbc\x89\xe2\xbc\xbc\x7e\x77\xbd\x80\x20\x2e\xce\xc3\xcb\x38\x9d\xae\x7c\x69\xb2\xd2\x14\x05\x8d\x3d\x43\xf8\x2b\x79\x41\xec\x6d\x3f\x00\xa9\xfb\x29\xfe\x35\x5f\x0d\xc3\x2f\x59\x32\xe9\x60\x30\x48\x03\x38\x20\x67\xde\x3b\x48\xeb\xba\x29\xae\x62\x24\x3a\xd2\xe0\x06\x83\xa8\x10\xa7\x62\xe4\x9f\xc2\x41\xf9\x90\xfc\x42\x9f\x3d\x65\xde\xc6\x3b\x17\x39\x0c\x3f\xdc\xc1\xcf\x92\x4d\x88\x3d\x8b\x7f\x91\x67\xe9\xee\x24\x3f\x4b\x3c\xe9\x91\x7f\x8a\x7e\x51\x11\x44\xde\xc3\xc0\xf5\xe4\x3d\x8a\x61\xbf\x82\x03\x3c\x3d\x2f\x61\xc7\xff\x16\xae\x88\xd8\xba\xa1\x3b\xea\x69\x39\x78\xd0\xee\xdd\x1d\x0c\x60\x07\xcf\xbf\xd7\x93\x56\x19\x60\x27\x50\xc3\x8d\xe6\x7d\x12\x17\x25\x4c\x61\x5e\x0c\xb8\x63\x92\x5f\x6a\x6d\xe1\x74\xd6\x4a\xa7\xc8\xfc\xa8\x44\x22\xae\x14\x89\xca\xe4\x4c\xab\x0b\x4a\x24\x43\x61\xd0\x82\x01\xc8\x07\x70\xf0\xc0\x90\xb6\x62\x86\xd1\x04\x5e\xe1\xb6\xa7\xf3\x14\xbd\x8b\x7f\x93\x69\xdd\x81\x1f\xe1\x78\x59\x22\x99\x2c\xdc\xf6\x8e\xfb\x2b\x25\x33\x42\xaa\x7e\x18\x45\xad\x14\xdc\xcc\x61\x51\x84\x64\x4f\xbf\x41\x9f\x5d\x5b\x39\x63\x5b\xa0\x55\x28\x83\x9b\x1c\x0f\x19\xf5\x03\xc2\xc1\x03\x54\xef\x55\x00\xd2\x4d\x37\x5d\x75\xf3\x42\x32\x42\x9a\xf0\x7c\x97\x63\x99\x60\x54\x01\x40\x72\xd4\xdc\xfe\xf1\x19\x90\xbf\x82\xf4\x00\x1a\x46\xa7\x79\xb6\xf9\x26\x0a\x1f\xba\x7b\x82\x66\xe3\xf0\xfc\xa9\x45\x98\x53\x2f\x38\x12\x61\x00\x15\x14\x9c\x56\xbc\xce\x53\x85\xd0\xb4\x69\xa1\x0d\x5f\x2d\x91\xd4\x4c\x2a\x91\x54\x9c\x16\x10\x04\x2b\x40\xe6\x5e\xe5\x1e\x2e\xbe\x07\xd7\x7c\x8f\x4e\x64\xa9\x01\x81\xac\xda\xa0\x0e\xd5\x7a\x29\x9e\xb4\x4a\xce\x45\x98\x4d\x3c\xec\xef\xbf\x77\xaf\x55\x9a\x29\xe8\x50\x1e\xb2\xa0\x9c\xe5\xd9\x95\x97\xc2\x2b\x0f\xdb\xc7\x5b\xfe\xcf\xd9\xd2\x9b\x2f\x8b\xd2\x2b\x16\x70\x1c\x4f\xae\xf1\x61\x1d\x9d\xd1\x8b\xf0\x12\x02\x2f\xcb\x3d\xb4\x21\xa2\x0b\x54\x88\x04\x77\xd0\x05\x92\x88\x86\xf3\xa9\x20\xc9\xa0\x62\x8d\x08\x48\x0a\x15\xeb\x43\x54\x5d\x5d\x6d\xc9\x6b\xaa\x2d\xb8\xbb\xfe\x02\x71\xf8\x0b\xc4\xe1\x2f\x10\x07\xb7\xae\xfc\x6a\xef\xd7\xf9\x6f\x4f\xf6\x0e\x5d\x20\x0e\xc4\x67\xc7\xfc\x41\xc0\x7f\x24\x45\x54\xbb\x35\x69\xea\x6c\x77\x80\x0f\xf0\x22\x46\x1b\x98\xbc\xfb\x36\xfd\x5b\x75\x59\xf9\x49\xf8\xfb\xf5\x26\xf6\x31\x0d\x06\x8a\xb8\x13\x31\x2e\x13\x01\x81\x9a\x11\x68\x21\xe0\x97\x39\xf1\x38\xf6\x0f\xc0\x21\xf0\xaf\xe2\xa8\x9c\x9d\x7a\xdd\xbf\xcf\x60\x3c\x9d\x95\xe8\xaf\x49\x86\x8e\x41\xf1\xef\x10\xfd\x58\x84\x11\x0e\xcf\xf1\xba\x7f\x9f\x87\xf9\x34\x4e\xd1\x5f\xc2\x4e\xdd\x95\x5a\x41\x0d\xf6\x32\x7c\x04\x01\x18\xda\x82\xe3\x12\x18\xc8\x19\xb6\x0f\xd5\x76\xf3\x00\x03\xb6\x83\x94\x18\xb2\x20\x3d\x12\x6d\x87\x2d\x65\xc4\x16\xa3\xc1\x71\xa8\x30\x62\xf5\xcb\xe2\x93\x50\x86\xc5\x76\x97\x77\xa0\xce\xb8\x0d\x1a\xdc\xa0\x6e\x62\x55\x0c\x29\x53\xa3\x15\x74\xe4\x40\x41\xfc\x70\xc4\x9e\x9c\xb3\xd3\xb3\xa8\x3e\x8b\xac\xa0\xbf\xa5\xdc\x03\x0d\x87\x44\x79\x58\x40\x80\x28\x7e\x79\x62\xc0\xe4\x6b\xd0\x0e\x6d\x2d\x2f\x2d\xf1\xb9\xfe\x7d\x0b\x4f\xd9\x46\x88\x20\x51\x1c\xb5\x63\xac\x52\x2a\x88\x1f\x0a\x28\x08\xd2\xf4\xdb\x11\x51\xf5\xb9\xa9\x4e\x46\x0a\xd9\xec\x8c\x2c\xe9\x05\xec\x94\x0c\x9e\x0e\xd4\x80\x31\x90\x0f\x5a\x2d\x48\x84\xf1\xe0\x81\x2d\x6f\xf8\x21\x6c\x05\x38\x3b\x34\x60\xa7\x85\x70\x00\x87\x25\x4b\x35\xf6\xc2\xbb\x83\x41\x7a\xef\x5e\xde\x0a\x71\xc8\xe6\xb0\x1c\x0d\xd2\x15\xf8\x30\xc0\xf6\xa1\x15\xf8\x88\x8e\x12\xf6\x72\x4f\x3f\x80\x5f\x07\x43\x1f\x86\x04\xe8\x8c\x08\x33\x0c\x5c\x72\xe6\x06\x2e\x91\x9b\x26\xce\xe0\x2e\x14\x13\x72\x02\x77\x81\x98\xf0\xc3\xb7\x13\xc4\x84\x5f\x88\xf5\x0b\x99\x06\xae\xb1\xd4\x7e\x8f\xb5\xdf\x91\xf6\x7b\xae\xfd\x5e\x68\xbf\x27\xb5\xc0\x3a\xb0\x0a\x67\x3b\x92\xbc\x97\x2c\x64\x74\x9d\x81\x0b\x0d\x6c\x03\x75\x8e\x01\xe6\x41\xfb\xc4\x80\xf3\x88\x8b\xe7\x29\x92\x1a\x70\x8c\x0f\xd9\x06\x9e\x07\x59\xdb\x3a\x9e\x07\x5d\xea\x14\xc7\xa3\xd6\xc1\x97\x3d\x14\xfe\x7e\xfd\xa2\xfa\x84\x3c\x85\xdc\x81\x26\xac\x8b\xbf\x4a\xa0\x0f\x3c\x3f\x9e\x3e\x15\x3c\x34\x2e\x9d\xfe\x3a\xec\x8e\x70\x49\x4c\x50\xb8\x0c\x95\xf8\x2d\xf6\x10\x33\xe6\xca\xd7\x56\xd2\x59\x93\x1c\x16\x71\xeb\xa9\x96\x22\x62\x95\x07\x90\x9c\xf2\x3e\x4a\x15\x64\xaf\xa2\xd3\xf7\x4a\x1c\xa6\xe5\x62\x20\xf9\xf7\xd3\x27\xa8\xbd\x89\x2f\xe3\x17\xa9\xe8\x47\x2f\x3e\xce\xf3\xf0\xba\x13\x17\xf8\xdf\x16\x0c\x1e\xb6\x2c\xdd\xca\x4d\x03\xf4\xac\xbc\x80\x69\x2b\xa0\x07\x13\xed\x49\x74\x0a\xe7\x83\x80\xe6\xc2\x4f\x31\xbc\x42\xe7\x8c\x16\x04\x90\x19\x82\xd5\x39\xc2\xb1\x03\x94\xab\x0f\xa5\x4f\x91\x2f\x8d\x93\x0c\xe9\xb6\xab\x20\x58\x89\xed\xab\x25\x1d\x71\x9d\xa7\x6a\x1c\x3b\x4f\x90\x9d\xee\xdd\x73\x61\x6a\x38\x02\xec\xd7\x85\xdf\x03\xb9\x6e\x4e\x9b\x8a\x6d\xb2\x0a\x83\x8b\xbe\x83\x52\x98\x08\x66\xf3\x82\xd4\xe6\x85\x74\x87\xd3\x16\x95\x83\xac\x6d\x74\x7e\x52\xa3\x81\xda\x87\x2c\x77\x80\xf4\xe2\x6a\x45\xfe\xb5\xe0\x42\x14\xf9\x18\x94\x83\xa7\x1c\x22\x84\xc8\x01\xde\x70\x22\x18\x48\x31\x64\xb0\xc4\x44\x08\xc4\xb0\x4a\x8f\x92\xfe\x80\x14\x96\x27\x00\xe9\x80\xd9\x63\x4c\x13\x22\x04\xee\x08\xce\xe0\xd3\xa7\x9b\xd5\x1d\xff\xa0\x7f\xdf\xbf\x3b\x90\x0d\x8a\x9c\x9e\x95\xb7\x71\x7b\xcb\x12\xc8\x07\x36\xa3\x92\x64\x6b\x30\xcd\x4b\x6e\xe3\x51\xaa\x19\x8f\x6e\x52\xfc\x11\x6c\xf1\x64\x3d\xfd\x9e\x1a\x01\x40\x1e\x00\xdb\xbc\x44\x6d\x3d\x5b\xe6\x39\x4c\x4b\x6c\x92\x90\xc6\x4e\xbf\xd5\xc2\x05\xb3\x84\x8f\x3b\xc2\xee\x43\xba\xf5\x61\xab\x1c\xf8\x2c\xba\x10\x98\xe2\x22\x38\x6d\xd5\x10\x45\xb8\x0c\x1a\x6a\x58\xdb\xf5\x43\x7b\x69\x58\x8e\x44\xff\xe4\xa8\x7f\x72\xd4\x1d\xab\xd5\x2a\x2c\xae\xd3\xb1\x67\x7a\x9c\x48\x9f\x77\x72\x18\x46\xd7\x38\x52\x7c\xd0\xe7\x7e\x2b\xbe\xfc\x9b\x38\xa0\xd8\x4b\xc3\x51\xb0\x0a\x56\x74\xcd\x6a\xf2\x83\x7c\xf4\xde\xbd\x96\x7d\x4a\xcb\x93\x81\xec\x55\xc6\x58\x2a\x76\x45\xf2\x28\x3b\x04\xaf\x56\xe0\x62\xf0\xa6\x35\x91\xf1\x04\xe4\x9d\x77\x7b\x74\x94\x99\x51\x3c\xda\xbc\xb7\x07\x47\xb9\xd4\xcb\x65\xfb\xff\xf6\xa8\x28\xd7\x7a\xd1\xba\x0a\xb1\x4b\x7c\x94\xbb\xbd\x15\x05\x62\x31\x06\x61\x17\xb0\x28\xaf\xf5\x82\xe9\x82\x1b\xc6\xdb\x03\xae\x4c\x34\x90\x0b\x7c\x7a\xab\x85\x83\x62\x7d\x33\x00\x13\x15\x1e\x43\xed\x10\x71\x40\xac\x05\x82\xe2\x7a\xb9\xfa\x2b\xc6\xd1\xb1\x16\x1e\x4a\x75\x11\xd5\x5f\x24\x9e\xcb\x3a\xb0\x28\xe6\x6b\xd5\x25\xcb\x19\x12\x75\x40\x51\x5c\x2f\x57\x7f\x05\x4b\xa1\x7a\xa0\x28\x96\xf7\xb4\xb2\x27\xb2\x15\xf9\x6c\x0d\x68\xc9\x59\x4d\xd0\x12\x02\x0f\xf1\x75\x73\xd9\x18\x44\x85\x46\x07\x60\x22\xfe\xbf\x79\xfa\xf6\xfc\xf9\xf9\x3b\x91\xaf\x45\xed\xec\x38\xd1\x0c\xbc\x7d\xfa\xf2\xf5\x4f\x4f\xc5\x4d\xee\x02\x5c\xad\xa8\xcb\xc2\x9d\x64\x46\x76\x03\x4b\xa2\x9c\xc8\x33\x13\xdf\x72\x94\x41\x1f\xa8\x2e\x85\x7e\x88\x65\x9f\x9d\x3f\x7d\xa7\x67\xba\x89\x4f\xad\x7b\x4c\xc9\x78\xb3\x3e\x52\x37\x8f\x8d\xce\x82\x2d\xf2\xd8\x6c\xf3\xe8\xeb\xe5\xb1\xfd\xe3\xd7\x5e\x76\x95\xfe\x72\xbe\xab\x3c\x36\xac\xa1\xc8\xf9\x6c\xeb\x2f\x6c\xce\x6a\xd0\x24\xb7\xed\x33\xa6\xb7\xa9\x61\x9d\x87\xf5\x12\xcf\x18\x3a\x08\x87\x29\x01\x02\x58\x04\x68\x56\xbb\x43\x82\x14\xa2\x81\x98\xc8\x18\x26\x1c\x6b\x44\x47\x18\x91\xc3\xfc\xba\x96\x1c\xb4\xbe\x91\x46\x64\xe3\x07\x30\x62\xc7\x91\xfc\x70\x01\xe9\xf7\xa4\xfc\x23\x25\xd7\x4d\x16\x42\x40\x08\x9d\xcf\x52\x4c\x53\xb8\x14\x6a\xb7\xed\xed\x9b\xf1\x9b\xb5\xf2\x46\x44\x35\xea\x87\x8d\x2a\xa9\x54\x18\x6d\x48\x83\x1e\xa2\xf0\x12\x8f\xe8\xd4\xa9\xca\xa8\xba\x4f\xe1\x7b\xf8\x84\x73\x8f\x9e\x8b\x7b\xa3\xfe\x5c\xe9\x6d\x93\xb0\x68\xa9\x91\x3d\x61\xd1\xcc\x21\xdd\x3e\xbd\x47\x9a\x3a\x9f\x63\xa0\xea\x0d\xd0\x5f\x63\xe3\x5e\x42\x1b\xe5\xe2\x1c\x9a\x99\x93\x15\xb2\x4b\xca\x7b\xb1\x37\x5c\x46\xba\x6a\xee\xb7\x3c\xa9\x4a\xd5\x61\x6d\x04\x06\x81\x6c\x6f\xe3\x24\x9c\x0a\xd1\xd5\xd4\x85\xb8\x2e\xf3\x46\x20\x6a\x71\xca\x1a\xd6\x56\xb2\xad\xbb\xfb\x5e\x43\xb2\x52\xb2\x72\x38\xcd\x4c\x93\x90\x7b\x69\x3a\xf5\x77\x91\x90\xe3\x4e\xc5\x39\x27\xd5\xb3\xa7\xe2\x34\xc0\x7b\xe2\x75\xdd\x32\xff\x66\x7d\xe6\xcd\xcf\xd9\x32\xb7\x7a\x49\x0f\xb1\x87\x73\xff\x50\x77\xab\x7a\xb3\xb0\xf0\x2e\x20\x4c\x3d\x1a\x28\xd8\xd1\xbf\xb7\x41\xbb\x9d\x94\xcf\x0d\xf3\x39\x54\x3a\xe8\x1d\x6e\x03\x5b\x0b\x1b\x5d\x6c\x1c\xed\x5a\x5e\x88\x8a\x1a\x12\xe3\xfe\xd7\x16\x18\x9b\x25\xeb\x35\x10\x19\xf7\x77\x2c\x31\x94\x79\xd1\xdd\x4d\x12\xdf\x86\x52\xa3\x21\xcb\x30\xaf\xf1\xd6\x99\x7b\x75\xb2\xf6\xb6\x90\x1e\x45\x78\xa9\xca\x8e\xed\x58\x96\x2d\x12\xa4\xbb\x89\x04\xb9\x7f\x5b\xd2\xc4\x9d\xc2\x63\x53\x42\xbb\x1a\x32\x84\x99\x6a\x35\xf9\x71\x2c\xb0\x10\x58\x6b\xfe\xec\x02\xe5\xd8\x2d\x50\xb6\xc0\xaa\xc4\x34\x71\x9f\x5b\x9a\xe0\x30\xdc\x9d\xc9\x92\x93\x2f\x25\x4a\xde\xcd\x60\x0e\x71\xe6\x6f\xc8\xd2\x80\x0b\x9c\x48\xe1\x5d\x37\x15\x32\x9d\x35\x4c\xfd\xf2\x54\x06\x52\x0e\xad\x7e\x27\x82\x65\x18\x27\x0d\x43\x12\x6d\x19\xef\x5d\xe0\x5f\xe4\xbe\x12\xb8\xd7\x33\xbe\xc6\xeb\x41\x1a\x71\xca\x9b\xec\xac\x54\x03\xfc\x91\x5d\x0b\xd7\x93\x4d\x64\xeb\xf1\x66\xb2\xb5\x32\x05\x77\x03\xf0\xd3\x0a\x19\xb4\x4d\xf2\xec\x16\x19\xae\x3c\xc3\x4b\xcb\x6a\xa5\x38\xa1\x1c\xeb\x53\x4b\x49\xd5\x72\x5d\x95\xfc\x58\x6a\x6f\xd0\x4c\x89\x24\x5f\x95\xe5\xc1\x4a\xd8\xa1\x24\x69\x55\x32\x4a\xb0\x0c\x57\x57\xae\xec\x46\x71\x76\xb2\x49\xfc\x73\x26\xb5\xae\x03\x03\xa5\xb1\x0a\x26\x18\xa8\x25\xaf\x6c\xdb\xa4\x58\x9e\x74\x61\xcf\x4e\x29\xed\xe1\x38\x9d\x45\x8e\xf3\x26\x9f\x90\x62\xee\xdd\xd3\xaf\xb4\x5c\x58\x8f\xd0\xc8\x6c\xa5\x1e\x1e\x7f\x93\x64\x4f\x78\xb1\x9c\xee\xa5\xe1\x65\x3c\x0d\xed\xfc\x97\x3b\x77\x66\xa9\xd1\x31\x0e\x5f\xc4\x2f\x4f\x7e\xf8\xf1\xe5\x93\xbd\x57\x56\x5f\x84\xee\x1c\xa8\x5a\x7a\x4d\x66\xb0\xb5\x2f\xbe\x1a\xf1\x38\x99\xe3\x6d\xec\x51\xcf\xe7\xb7\x6a\x74\x7e\x3d\xbb\xfa\xfe\xd9\xbf\x9f\xbc\xad\x35\x3a\x0e\xc5\x80\x6d\x7e\x18\xdc\x41\x09\x99\xde\x57\x7f\x76\x15\x6e\x66\xac\x04\xa2\x45\x24\x19\xa0\x7a\x87\x58\xb2\x25\xf1\xf8\x83\x6f\x86\x47\xd3\xf3\xb8\xa4\x41\xf4\x34\xce\x65\xa5\x5e\x67\xa4\xbf\xbd\x27\xb8\xf8\x86\x75\x22\x60\xc3\x75\xeb\xb4\x5f\xa3\x4e\x67\xa2\xc4\xfd\xba\x71\xd6\x34\x80\x0b\x6d\x0b\x24\xf4\x4b\xce\x31\x66\x55\x6c\xb2\x2e\x1c\x13\x71\x83\xa5\x51\x99\x6f\x4c\x6b\xab\x8a\x67\x13\xbf\x59\x13\x72\x35\x56\x52\x5c\x8c\x93\xac\x58\xe6\xb0\x3d\x87\xe9\x72\x2f\x74\x50\xfd\x7e\x9d\xc5\x14\xfd\xf4\xfa\x9f\x47\xb3\x68\xdf\x91\x8d\x23\x2a\x2f\xf3\xc0\x57\x39\x4a\x19\x7d\x00\xf5\xd0\x62\xc5\x49\xa4\xb3\x84\xc5\x22\x5b\x2c\x17\x48\x57\x80\xe9\xd2\x27\x54\xe4\xfd\x51\x53\xcd\xdf\x67\x18\xf0\xb5\xe1\xc2\xd6\xce\xdb\x26\x53\xb2\x62\x44\xbf\x9e\xc0\xd6\x2a\x75\x4b\xe6\xd7\x2f\xff\x38\x7c\xdb\xef\x5f\xfc\xdb\x3e\xbf\xec\xd3\xeb\x11\xfc\xb8\x08\xd3\x68\x4d\xc6\x17\xce\x97\x8a\x2f\x7d\xc2\x99\xdf\x55\x39\xe0\xb5\xde\x90\x60\x64\x7a\x24\xa1\xcb\xd8\x0d\x4e\x80\x52\x1b\x86\x03\xc4\x6a\x42\x65\xe7\x7e\x7d\x04\x5b\x3e\x4b\x0f\xac\x08\x0f\x3c\x82\xe1\x25\xaa\x9f\xfa\x71\xbf\xcc\xa6\x53\x0c\x46\x47\xa3\x91\x18\x1e\x84\x5a\x1d\x91\x37\xa3\xb7\x97\x4e\x49\x9e\x78\xc3\x4a\x66\x3e\x1e\x85\x34\xdf\x5a\x00\x5b\x9e\x55\xaf\x13\x9b\x14\x5d\xef\xb4\xca\x23\x71\x85\xd4\x5d\xba\x40\x00\x2b\x24\x42\x13\xde\x1a\x35\x91\x67\x3d\xad\x42\xb3\x1d\x09\xe7\x6f\xb4\xe7\xe1\x62\xdb\x64\x1e\xdb\x12\xbb\x35\x0b\xfe\x36\xad\xfa\x7f\x1f\x1d\xfe\xb2\xff\xcb\xd8\x91\xe3\x49\x6c\x0c\x05\xcd\xed\xdc\x60\x7f\xe9\x83\xa1\xff\x84\x16\xd2\xdc\x70\xe4\xb3\x64\x4b\x2a\x3c\x8e\xb1\x9d\x47\x64\x46\xfa\x5c\x6f\x22\x5f\x62\xf3\x58\xcd\x8f\xd4\xb6\x22\xfb\x22\x7f\xc9\x56\x91\xbc\xd4\xaa\x96\x56\x7f\x34\x1a\xe9\x59\x6d\x6b\x72\x31\x0d\xc2\x91\x35\xab\x21\x4b\xdb\xd9\xb2\x2c\xe2\x48\x67\xc1\xde\x76\x39\xdc\xaa\x35\x71\xcb\xd4\xac\x45\x71\xf1\xdb\xd5\xe1\x2f\x67\x3b\x53\xb3\xb8\x4a\x3d\x44\xbb\x1f\xd1\xae\xc4\xb6\xa9\x9b\x9d\x35\x69\x4b\xd3\x89\x81\x8f\x27\x87\xbc\x39\xb2\xa2\xc6\x59\x5a\xe6\xa8\x76\x42\x9a\xb3\x2b\xa3\xd1\x2d\xd2\xda\xfc\x78\xb2\xd9\x94\xbd\x6d\x4a\xdb\x1e\x15\x8a\xb7\x65\xc2\xfe\xfe\x6e\x01\x27\xcf\x2f\xc7\xf6\x09\x1b\x47\xa6\xf0\x16\x6e\x9a\x47\xe1\xb2\xcc\x5c\x29\xfa\x94\x6a\x8c\x03\x84\x63\x51\xd9\xd4\xcd\x24\x7b\xaf\x4c\x78\x59\x35\x9f\xf8\x40\xc9\x22\xe6\x52\x5d\x56\x3e\xb4\x18\x1c\x05\x91\xd0\x55\x8a\xf1\x11\x3c\x35\x37\x47\x37\x67\x94\x56\x7c\xe1\xb2\x77\x70\x5f\xeb\x7a\x68\xcf\xde\x90\x6a\x50\x44\x23\xc9\x5c\xc6\x3a\x3f\x62\x3b\x10\x18\xfa\x61\x14\x71\x3d\xcd\x68\x8b\xbc\x2f\xc9\xb4\x81\xd6\x92\x68\xca\xce\xfa\xc2\xec\xbb\xda\x3a\x0e\xac\x19\x4b\xe5\x4e\xb3\xb2\x8d\xff\x20\xf6\x6b\x41\x8c\xc5\x81\x12\x79\xea\xb7\x96\xe3\xbd\x4c\xe3\xdf\x96\xb0\x8d\x7b\xb9\x29\x9d\x95\x63\xf5\xde\x06\x71\xb2\x0b\x10\x1a\x01\x34\x13\xff\x85\xdd\xf2\xdf\x81\xdd\x92\x55\xef\x0a\xfd\x93\x72\xd2\xcd\x67\x3f\x6e\x1f\xa4\xff\x9e\x46\xe9\xab\x2c\xb5\x40\x39\x71\xd7\x0f\xc2\x07\xfe\x23\xda\x6d\xbe\xe6\x8e\xf5\x2f\x08\x43\xbc\x11\x68\x79\xc4\xa3\x97\x1c\xda\x50\xd3\x90\x8a\x03\x75\xef\x61\xe2\x7b\xed\x51\x1e\xf8\xd8\xf1\xe2\x73\xfb\x2b\x90\x74\x2d\x15\xa2\x9e\x45\x67\xbc\x7b\xfd\x8f\x7f\xbc\x78\x6a\x34\x49\x7e\xe4\xd9\xe3\x17\xe7\xd5\x4f\xbc\x7b\xfb\xa3\xf9\x40\x57\x84\xba\x33\xc8\x19\xb1\x6d\x1e\x32\x87\xe8\x47\x85\x72\xf4\x58\xde\xc4\x39\x62\x48\x1c\x15\x74\x47\xaa\xbf\xad\xdb\x90\xe2\x8f\x94\xcd\xd6\xb0\x9e\xf0\x63\xa0\xba\x65\xfb\x86\xa6\xe7\x3a\x71\x1d\x29\xb6\x10\xfd\xdd\x48\x2a\xde\x78\xd9\xa8\x15\xda\x37\x01\xdb\xf3\xcc\x4d\xbb\xab\x6e\xad\x5d\x6d\x7f\xac\x1e\x01\xf1\x5f\xf3\x68\x01\x5f\x81\x84\x3e\xae\x54\x12\x8e\xad\xde\xe6\xad\x7d\xd0\x56\x07\xaf\x7a\xfe\x0c\x8b\x22\x9e\xa6\xdc\x5b\xac\xac\x75\xb2\x99\xcb\x7b\xf5\x24\xdd\x70\xab\x56\xb7\xe8\x04\x96\xde\x52\x80\x9c\x70\x54\x91\x5c\x43\x01\x09\xb5\xdf\x49\x2d\x54\x90\x4e\xa7\x03\xc9\x86\x49\x77\xcf\x3b\xdc\xb3\x0b\x03\x40\x08\x00\x41\x3a\xc0\x8b\x05\x84\xe4\x67\x2b\x1f\x14\x81\x0b\xcd\x0d\x15\x23\xa3\xb9\xe5\x4e\x34\xb7\xdc\x81\xe6\x96\xeb\x68\x6e\xb9\xb2\x77\xe5\x15\x7b\xd7\x2a\x58\x85\x51\x24\xa0\x03\x6b\xa5\x84\xc7\x51\x31\xf8\xcf\x37\xfc\xef\x95\xf8\x93\x02\x46\x3c\xe8\x3e\xf4\x3d\xff\xd4\xf7\x57\xdf\xdc\xc0\xd5\x7f\x56\xc1\x8a\xc2\x36\x30\x20\x01\x54\x02\x7f\xa7\x58\x24\x71\xd9\xf2\x3d\x3f\xe8\x10\x9e\xfb\x56\x39\x78\x50\xde\x1d\x0c\x60\xd0\xf9\x35\x8b\x53\x7c\x6b\xb5\x02\xc5\x20\x6e\x25\x4a\x02\x28\xea\xe2\x2d\xd2\xbf\x0d\x6f\xbf\x8f\x61\x7c\xb4\xaf\x60\x09\x30\xcc\xd7\xe7\x8e\x1a\x6f\x21\xb5\x48\xca\x1c\xd5\xca\x65\x32\x65\x18\x36\x2c\x9a\x81\x20\xaa\xa5\x27\xb2\x5e\xb9\xac\xcc\x4b\xcd\xc0\x72\x7d\x5e\x2a\x44\x05\xb4\xc7\x59\x92\x40\x66\x96\x90\x14\x4f\xfd\x6e\xe5\x9b\xdb\x43\x38\x3b\x5f\xe0\x5a\xc6\x8d\x3a\xe4\x53\x58\xda\x82\x39\x78\x90\xc5\xaa\x6e\x07\xa4\x61\x19\x5f\xc2\x76\x31\xce\xb3\x24\x41\xa5\x37\xed\x07\xb3\x80\x3f\x6a\x77\x2c\xca\x6b\x42\xa9\xb0\x2e\x43\xf5\x6b\x41\x76\xc7\x57\xc9\x87\xb3\xa7\xd1\xb3\x35\x90\xdd\xdc\x1c\x67\xc7\xee\x4e\x75\x16\x44\xc9\xb0\x4c\x42\x46\xa5\xae\xf0\xad\xee\x27\x3d\x94\xf0\x10\x9c\x34\xd8\xdc\x59\x40\xc0\x8c\xc6\x7c\x3a\x8a\x3e\xb6\x30\x70\xcc\x44\x98\x68\x7d\xa6\x75\x5b\xab\x1d\x76\x06\xf7\x97\x8b\xe5\xc5\xe7\xfe\xb8\xe8\x9c\x6a\x1c\xc3\x35\x35\xbd\x60\xb1\xa9\xb5\xd5\xac\xae\x70\x2c\xe8\x91\xa8\xae\x26\xe8\xe3\xdf\x94\x01\x9f\x3b\x30\x85\x4d\x98\x47\x24\x4b\xde\x0c\x8d\xdf\x71\xd3\x48\x5b\x07\xe7\x9e\xce\xb5\xa7\x2b\xe4\x05\x2c\xcb\x38\x9d\x16\xa7\x7b\x7b\x44\x64\x9c\x96\xd9\x07\x68\x9e\xcb\x0e\xcd\x9c\x42\x11\x8e\x6b\xcf\x28\x64\x24\x7c\x26\x4b\x8b\xde\xb3\xfb\x38\x30\x61\x0c\x8b\x22\xcb\x9f\x3f\xf1\x6d\x87\x93\xda\x64\x53\x2f\xb2\xa9\x17\xa7\xde\x55\x5c\xce\xbc\xd0\x8b\xe2\xc9\x04\xe6\x30\x2d\x3d\xdc\xac\x8d\x28\xa7\x58\x99\x9f\x95\xf4\x0f\x28\xb3\x75\xab\xc5\x41\x63\x0f\x1b\xaf\x8f\x65\xd2\x60\x79\x34\xa9\x6a\x6f\xbf\xfa\x10\x92\x64\xd3\x38\xc5\x81\xa8\x9c\xfd\x9e\x4c\x42\x16\xba\xca\xe3\x94\xf0\x71\x43\x89\x78\x9d\x85\x05\x8b\xab\xaf\x7f\xec\x30\xf6\xc1\x5d\x90\x24\xd8\xc3\x52\x77\xc0\xc0\x4e\xdb\x67\xa5\x60\xa7\xf2\x3a\xa0\x30\x68\xda\x5d\x21\xd0\x83\xa0\x31\x76\xb6\xc4\xbf\x74\x5b\xbc\x1f\xb3\xf1\x87\xeb\x7f\xff\xfb\xb8\xef\x70\xd7\xb1\x78\xe7\x47\x64\x42\x39\x3c\x1d\xfb\x96\xcc\x80\xde\x4e\x58\xb5\xf8\xe6\x76\xa2\xea\x17\xc4\x19\xa8\x85\xc2\x90\xcf\xb5\x85\x27\x4f\xca\x04\x90\x2c\x5d\xbc\x2d\xdc\x0f\xdd\x34\x2b\x5d\x68\x75\x66\x1c\x7d\x83\xed\x5e\x95\x07\x48\xb5\xe9\x3b\xf2\x3a\x54\x17\x44\x5f\xea\x62\x16\x83\x88\xfa\xf8\x0c\xcf\x39\x41\xf8\xc6\xf2\x3f\x7c\x13\xce\xd7\x91\xc8\x50\x9b\x49\x6d\xdf\x36\xca\x4d\x0d\x35\x6b\x7a\xb2\x99\xee\x64\x76\xe6\xbe\xa3\x33\x71\x5e\x8f\x94\x14\xa2\xb5\x61\xeb\x3e\x5a\xbf\x19\xad\x69\x78\x6d\x55\xcc\x68\xb3\x1e\xfe\x6b\x1f\x30\x2d\x1d\x67\x03\x9d\x40\xed\xbc\x7a\x99\x34\xd5\x1a\x01\x26\x3b\x08\xaf\xbd\x59\x78\x09\xbd\xcb\xb8\x88\x4b\x34\x81\xbd\x1f\xdf\xbe\xf0\xca\x59\x58\x7a\x71\xc1\x89\x0b\xc3\xd4\x5b\xa6\x1f\xd2\xec\x2a\xf5\x72\x48\xf1\xf3\xbc\x22\xf3\xae\xb3\xa5\x37\x0e\x53\x4c\x61\x38\xcd\xd0\x93\x17\xe1\xf8\x03\x26\x35\x9c\x41\x2f\xcf\xb2\xd2\xcb\x72\x7c\x37\x87\xed\x62\x79\x31\x8f\xb1\x9e\x46\xd2\xa2\x1e\x9f\xbd\xf0\xde\xa1\x1d\x72\xef\x1c\x8e\x73\x58\x3e\x7f\xe2\x5d\xe8\xc5\x3c\x3e\x7b\x51\x74\x6a\xa9\x2c\xcd\xa7\x4d\xcd\xa9\xd1\x44\x11\x31\x66\x47\x12\x8b\x30\x6a\xd4\xa6\x76\x12\xa7\x1f\x2a\x24\x8e\xac\x67\x93\x7a\xcc\x72\x38\xf1\x35\x8f\xb4\x4f\x76\xb2\x66\xce\x04\x31\xf0\xff\xc8\x70\xff\x36\xcf\xa4\xb2\x26\xc8\x9b\x0d\x8d\xb2\x71\xb1\x61\x43\xb1\x8f\xa6\x84\x79\xca\x9c\x2d\x3d\x2d\xbe\xe9\xec\xf5\xab\xf3\x1f\x5f\xbc\x7f\xf2\xfa\xec\xfc\xfd\x8f\x6f\x5f\x48\x7d\x40\xa8\x50\x1b\x76\xc5\x5b\x18\x46\x78\xae\x46\xd9\x18\x2b\x2f\x38\x06\x7c\x07\x3d\xb3\x2d\xd3\x61\xfd\xe5\xfc\xd7\x56\x8d\x04\x59\x98\x43\x2f\xcd\x4a\x2f\x5c\x96\xb3\x2c\x8f\x7f\x87\xd1\x56\xa3\xf3\x27\xde\x2d\xbf\xf8\x8e\xa8\xec\x37\xcb\xa2\xf4\x2e\xa0\x37\xcd\xc3\x14\x6d\x37\x0b\x98\xcf\xe3\xa2\x40\x02\x16\x89\xfb\xcb\x18\x5e\x09\x96\xdc\x8e\xf7\xb8\xf8\x40\xf6\x8a\x30\x9a\xc7\x69\x5c\x94\x79\x58\x66\xb9\x17\x4f\xf0\xce\x53\xce\xe2\x14\xdf\xf7\x8a\x59\xb6\x4c\x22\xb2\x93\x85\xf8\x08\xde\xf9\xfc\x3d\xb4\xb3\x8d\xe1\x2b\xc8\x4b\xe0\xef\x85\xe3\x84\x1d\x1b\xcb\x39\x52\x25\x6e\x99\x04\xb5\xf7\x55\x02\xc3\x3c\xfd\x12\x9d\xf5\xe2\xe9\xe3\xb7\xaf\xb4\x2e\xa3\xfc\xfd\x05\x1c\x2f\xf3\xb8\xbc\x6e\xa7\xb0\xbc\xca\xf2\x0f\x71\x3a\xdd\x5b\xe4\x59\xb4\xc4\xdf\x6c\x87\x63\x12\x39\xbc\x51\x77\x3e\xcb\x92\x24\xbb\xc2\x1d\x3a\x5d\xc6\x11\xbc\xa5\x5b\xd1\x3a\x8f\xec\x38\x4b\xc7\x21\xd6\x6d\xd3\x4b\x25\x64\x0a\x0d\x44\xbb\xcc\x44\x54\x55\x13\x83\x87\x7e\x96\xff\x6a\xb1\x50\x32\x2f\xe8\x6d\x31\x2b\xdc\xcf\x7f\x59\xf4\x9e\x5c\x2e\xb7\xa3\x09\x95\x02\x0e\x68\x68\xba\x15\x67\x82\xdf\x6c\xcc\x94\xb2\x31\x23\xa8\xd9\xe7\x9c\xee\x24\xfd\xcc\x74\x27\xc2\x9c\x45\xc2\xb7\x56\x35\x2c\x6c\xb5\xd2\x02\x77\x43\x2a\x8a\xf6\xca\x4a\x26\x53\x9d\x47\x05\x0f\xde\xeb\x94\xd2\x4e\x9e\xde\xed\x9a\x0c\xa4\x2e\xa0\x7d\x8a\x37\xdf\x38\xb7\x7c\x17\x3c\x98\x6a\xb5\x75\xa6\x65\x74\x53\x61\x5a\x1c\xad\x25\x74\xb0\xd4\x76\x43\x26\x68\x9d\x2c\xb5\xc8\xc7\x22\x44\x02\xbd\xdd\x59\xe6\xb1\x1f\xa8\x2c\x08\x12\x5d\x83\xed\x61\xad\x81\x06\x93\xe4\xc8\x4d\x8b\x88\xf9\x0b\xec\x6c\x10\x84\x07\xa2\xa4\xfc\xcb\x14\x05\x1f\x0e\x1e\x48\x5c\x93\x32\x69\x86\x41\x05\x41\xcb\x5d\xe4\xd9\xc7\x6b\xc6\x3d\x99\x8f\x8d\x12\x90\x0c\xc3\xc3\xd4\x0a\x56\xc1\x1d\xc6\x7b\xb0\x21\x8d\x84\x8d\x42\xe2\xd3\xa7\x9b\xd5\x67\xa1\x91\x28\xd7\xd3\x48\x90\xb5\x52\x0e\x1e\xdc\x40\x42\x0b\x7b\x27\xd5\x69\x04\xca\x60\x45\x96\x99\x3c\x28\xeb\xb8\x0a\x9c\x2c\x05\x46\xf1\x2c\xb4\x53\x37\xb4\xb3\xe1\xa6\xf7\x75\x8a\x72\x3c\x6a\xb4\xaf\xf0\xdf\xd2\x28\x35\x36\xad\x4f\x92\xb0\x98\xb5\x79\x46\xb6\x25\x18\x21\x89\xdb\xf8\x21\xf7\x5b\x7f\xcc\x08\x84\x49\x96\xcf\xdb\xfc\xf7\x6d\x0d\x42\xf8\xf9\xbb\x67\xbd\x6e\xf9\x6c\x6f\x23\x85\x80\x5a\xaf\x77\x92\xd2\x6c\xeb\x2e\xbe\x77\xe7\x83\xbd\xd6\xf0\x7f\x87\xff\x33\x1a\x05\xdf\xee\x4d\x6b\x20\xaa\x34\x74\x5d\x65\x69\x0e\x0b\x75\xc8\x5d\x70\x29\x56\x1a\x6e\xd4\x20\x7c\xa2\x54\x2f\x4b\x7b\x2e\x23\xe7\xee\x84\x49\x1c\x16\x2d\x1f\x35\x17\x2f\x67\x3f\x00\x71\x09\xe7\x35\x1e\x5b\xa7\x07\x8c\xb3\xb4\x0c\xe3\xd4\xa9\x0a\xa0\xb2\xfc\x40\xec\x06\x06\xa9\x3e\x9a\x76\x09\x44\x53\x86\xef\xbe\x69\x96\xcf\x71\xf8\x19\x21\xa0\x41\x8f\xdc\x61\xaa\xd0\xb0\xd3\xe9\xa4\x1d\x02\x1a\xde\x41\x07\xde\x0e\x0e\xae\x7c\x8c\xe9\x57\x47\x20\x19\x84\x43\x46\xc9\xd4\xee\x8d\x86\x5d\xc2\xe7\x56\xdc\x29\x06\xed\x1e\x8d\x33\x27\xa4\xd9\xfe\xd0\x0f\x1e\xb2\x08\x3d\xa4\x7c\xad\x86\xdf\xdc\x24\xab\xd1\x7f\x4e\x13\x22\xa1\x71\x2f\xcc\xc2\x34\x4a\x68\x3d\x52\x50\xe8\xa4\xce\x0c\xc6\x1e\x5d\x5d\x6d\x80\x04\x83\xe7\xdf\x34\xcf\x96\x8b\x3d\x48\x54\x8b\xbd\xf1\x0c\x8e\x3f\x5c\x64\x1f\x6f\x8b\xf2\x1e\x3d\xfb\xf5\x08\xfe\x0e\x4b\x87\x4f\x50\x05\x6d\x97\xb3\xd9\xa3\x38\xe2\xc9\x27\x72\x7c\x84\x25\x9f\x3d\x4e\x17\x4b\x7c\x06\xed\x1d\x81\x7d\x9e\x32\x83\x7e\xf5\x39\x07\x25\x4b\x58\xed\x63\xcc\x0e\xd6\x4b\xbe\x0c\x43\x67\x1c\x07\x74\x14\x61\xf6\x2c\x8e\xcc\x60\xa0\x4c\x66\x04\xb2\xfe\x92\x95\x18\xb4\x22\xd3\x74\x81\x86\x28\x4c\xf4\x0c\x9c\xac\x51\xe8\xee\xda\xa9\xf1\xd5\x8e\x98\x96\x9a\x61\xe9\x74\x5b\x66\xec\x2f\xfd\xeb\x1f\x9e\xfe\x98\xfd\xea\xd8\x5d\xd6\xa7\x99\xa2\x29\x29\x10\x00\xfb\x07\xc0\xcf\x33\x9c\xcb\x10\x26\x68\x24\xc9\x5c\xec\x39\x32\xa2\xfb\x96\xe0\xb8\xba\x53\x67\xbb\xe9\x21\x0d\xc2\x6d\x9a\x1b\xbb\xe1\x05\x17\x49\x59\xd9\x1f\x89\xfd\x7b\xf9\x57\x06\xd9\x7f\x47\x06\xd9\xb8\x5a\x26\x3d\xeb\xe5\xe7\xc5\xf3\x83\xdf\xed\x32\x09\xe3\x10\x9a\x82\x49\xe2\x44\xc1\x4b\xca\x15\x71\x73\x5f\xcd\x97\x62\x56\x32\x6a\xac\xf0\x81\xff\x0e\x7e\x44\xff\x9c\xb1\x4d\x13\xf8\x6f\xc3\x28\xce\x7c\xe0\xbf\xa0\x20\x88\x4f\x25\xb8\x4c\xc5\xb2\x86\x93\xc9\xcc\x55\x8d\x1f\xf1\x49\xad\x00\x0f\x8d\xe3\x6c\x21\x84\xa5\x45\x8d\x6e\xb4\x94\xb2\x47\x72\xaa\x48\x92\x91\xd0\x16\x68\xa3\xb3\x94\xeb\x05\x3a\x76\x6e\x57\xa4\x12\x59\x88\xbc\xe9\x1d\x52\xab\x91\x01\xbc\xdb\x35\xb3\xe1\xba\x18\xc9\x65\x39\x9e\x29\x89\xd1\xd8\x4c\x2e\xe8\x97\xd7\x35\x46\xd6\x49\x1c\x0d\x32\x83\x44\x6f\x75\x8b\x72\x3c\x4b\xfe\x34\xcd\x21\x88\x9f\xb6\xc8\x5b\xdb\xd3\x4a\xb4\x14\x8b\x23\x6e\x94\xd7\xd7\x37\xd2\xf5\x69\x43\x30\xe8\xb1\x9a\x78\xef\xe3\xbe\x66\x0b\x8a\x4d\xa5\xb6\x7e\x81\xc9\x81\xea\x3c\xfb\xfa\xc4\xfb\x1c\x48\x8a\xd8\x63\x17\x54\x00\xfa\x7c\x8c\xd0\x15\x8a\x7d\x41\xfc\xf6\x3d\xda\x80\xb6\x78\x46\x6f\x4f\xdf\x80\x23\x38\xc4\x96\x79\xb5\x47\x31\x6a\x79\x5b\x8d\x49\x73\x21\x55\x79\x9e\x04\xa3\xc1\xc1\x98\x1a\xc6\xca\x56\x72\xf7\xf7\x18\x20\xec\x7f\x4d\x77\xd8\x12\x1b\x6b\x26\x34\x5a\x90\x6b\xb1\x0b\x8d\xc1\xda\x52\xa3\x40\xa1\x65\x3a\x6a\xc1\xc6\x34\x17\xb2\x21\xfa\x80\x4b\xc3\x54\x52\x1b\xa3\xaa\xd4\x46\x76\x61\x9b\xdc\x46\x39\x9f\x31\x63\x5c\xe3\x89\x0f\x0a\x6a\x16\x65\xd7\x98\xcc\x02\x31\xb5\x53\x4f\x61\xe9\xa1\x09\xe2\x62\xf9\x86\xc9\x43\xfa\x2f\xb6\xc0\x14\xb0\xc4\xc6\x09\x1a\x7f\x0c\x93\xce\x14\x96\x9c\x26\xba\x45\xe6\x5a\xe0\xba\x8b\x8f\x2d\x94\xe5\x1a\xf3\x31\x63\x3b\x07\xaa\x02\x12\xbd\x95\x44\xe3\xb8\x87\xb9\x7d\x44\x5c\xc2\x36\x97\xd5\x50\xbe\x8e\xaf\x8c\xfe\x73\xaa\x5d\x41\x9f\x41\xcb\x45\xca\x1c\xfc\x56\x7d\xa4\x53\x66\x2f\xb2\x2b\x98\x9f\x85\x58\xbb\xa4\x39\x8e\x1d\x9f\xa5\x34\xb6\x7d\xd2\x5f\x78\xae\xe9\xfc\xd2\xb4\x67\x65\x22\x74\xbc\x78\xa8\x72\x7d\x43\xa7\xe6\x69\x39\x78\x40\x57\xda\x60\x30\x28\xef\xdd\x83\x2b\x99\xa6\x9c\xf6\xdb\x00\xe2\xdc\xc9\xa5\x9a\x44\x88\x06\x74\x7b\xe6\xdc\x58\x2f\x96\xcf\x89\x2d\xd8\x73\x1d\xfc\xb3\xda\x97\x04\xd3\x6a\xd3\xfc\x49\x41\xb3\xea\x4e\xa0\x8c\x2a\x13\x28\xc7\x20\xaa\x69\xae\xb6\x6c\xd2\xb7\xc5\x94\xf0\xea\xc9\x5e\xb4\xf7\xed\x13\x87\xda\x5e\xd7\x94\xb0\xc0\x38\x0c\x34\x31\x0e\x37\x99\x36\xb6\x68\xe3\xd6\x7a\x62\xe7\xb9\x8d\x76\x05\x69\x44\x6e\x93\x5d\x01\x2b\x4c\xb7\x65\xa2\xbc\xb9\x3c\xfa\x7f\xcb\xb3\xb9\x1d\x9c\xf9\xab\x59\x49\xb9\xfe\xfe\x5f\x63\x22\x95\x26\xc5\x6d\x9a\xab\xe8\x9c\x7b\x5b\xa6\xea\xdb\x1f\xff\x79\x79\x9e\xff\xdb\x95\xe4\x53\x7b\xaa\xb2\xe9\xb8\x93\x99\xca\x0c\x01\x1b\x4e\x54\xf2\xc1\x3f\xd0\x3c\x15\x13\xe2\x36\x4c\xd3\x0d\x4d\xb4\x5f\xc8\x5b\xfc\xe6\xd9\x0f\xfb\xdf\x3f\x3f\x59\x97\xb2\x5e\x3f\x7c\xec\xa9\x64\xc3\x92\xe3\xd0\xab\xcd\x5c\xdc\x38\x61\x42\x95\xae\x09\x38\xdc\x1c\x6b\x54\x1f\x23\x3e\x59\xc8\x49\x25\xb7\x9c\x55\x4c\xed\x5e\xd3\xcb\x57\x52\x24\x45\xa5\x06\x97\x82\x1c\x69\x70\x77\xd6\xcf\x22\xbc\xfc\x6e\x8b\x7c\x7b\x37\xfe\xc7\x62\x3c\xbb\xfc\x60\x9f\x2e\x33\x98\x2c\x64\xc3\x2a\x03\xda\xb1\x5a\x5f\xd9\xc3\x94\x43\x9f\xc4\x54\xdb\x04\x9e\x6c\x3a\xe8\xaa\xa8\x4a\xa2\x83\x74\xf9\xa4\x42\x29\xee\x03\x71\xb8\x66\x68\x53\xd4\x46\xc0\x69\x94\x38\x23\x93\xd5\x5a\x20\x63\x7d\x1f\x58\xb5\xc8\xae\x50\x46\x35\x7b\x02\x55\x32\x0f\x55\x20\x2a\x5f\xb1\x98\x8d\xf4\xe2\xf6\x4d\x2d\x55\x2f\x80\xed\x04\x5a\x01\x22\x15\xcd\x84\xb4\xec\x83\x63\x40\xc7\x89\xb1\x47\x6d\xc0\xea\xc8\x21\x60\x9b\x23\x46\x61\xf4\x0a\x6b\x0c\xb7\x94\xf8\xb0\x3b\x73\x0b\x50\x92\x65\x58\x9a\x0c\x45\x17\xa0\x13\x42\xe6\xbe\x53\x27\xcb\x48\x18\x92\xea\x23\xb7\x69\xad\x95\xd8\xce\x6c\xbe\xce\xbe\x92\x6f\xda\xdb\x7e\xee\x8a\x10\x2b\x3e\x63\xf7\x9b\x04\x7d\x37\xd9\xc1\xb1\x5d\x8a\x10\xcc\xf3\xc8\xef\x36\x5a\xfc\x51\x9b\x44\x42\xc5\xe9\x65\xc6\xa9\xa1\xb0\x0f\x64\x13\x83\x94\x24\x01\xbf\xde\x86\x9e\x43\x88\xba\xbe\x4d\x10\xa2\xb6\x76\xbc\x0a\x97\x6b\xf2\x97\x17\xf3\xbf\xc3\x8b\x59\x54\x6f\xad\xc9\x8f\x67\x3f\x9f\x5d\x25\x47\x6b\xcc\x21\xe2\xec\x50\x87\xc5\x82\x9a\x45\xd4\xc9\x5b\x69\x0c\xe9\xca\x1b\xae\xe0\x01\x2a\x60\x98\x8f\x67\xae\xcd\x4d\xde\xfb\x6c\x5f\x7c\x2f\x8a\x64\x04\xb2\xa2\x3c\x3d\x6d\x85\x94\x27\x8e\x39\xd6\x02\xc5\x6d\x4c\x4b\x44\xab\xe7\xe2\x7a\xef\x8a\xf3\xf6\x48\xde\xcb\x0f\x85\x23\x74\xa3\x57\x3f\xc0\xeb\x28\xbb\x4a\x2b\x5f\x66\xcf\x8c\x54\x6e\xa4\x7d\xe0\x17\xb4\xfe\xf2\xb9\xed\x10\xf8\x8b\x24\x1c\xc3\x59\x96\x60\xdc\x0c\xee\x1b\x91\x2e\x8e\x68\x11\x7e\xb8\x2c\xb3\x49\x36\x5e\xa2\x79\x21\xfe\x1e\x31\xee\x25\x6d\xcc\x4c\x95\xc2\xa2\x63\x18\x40\xea\xeb\x11\x50\x18\x16\x66\x03\xa9\x6e\x13\xa6\x8a\x8f\x21\x96\x7c\x0c\xd4\x83\xa0\xa3\x27\x26\xad\x56\xe8\x74\x2a\x60\xfb\xb8\xe8\x32\x9b\xbe\x2e\xdd\xfe\xf4\x89\xcd\x47\x6c\x12\x67\xd3\xc9\xf6\x16\xbb\xf7\xe9\x53\x0b\xe3\x11\xae\x82\x15\x0d\x57\x64\x06\x6f\xfe\x36\x0c\x56\x74\xec\xd1\xbd\xde\xfe\x60\x30\x80\x48\x92\x9f\x65\x11\x8e\x94\xd7\xd9\xf1\x56\xab\x40\xb1\x12\x33\xfb\x50\xba\xde\xbc\x1c\x5a\x5e\x0c\x40\xa8\x58\x97\xd5\x87\xc4\xcc\xad\x01\x2c\x68\x7d\x53\x2b\x3f\x94\xf7\xd3\xb8\xf2\xec\x53\x80\x78\xbd\xf5\x1a\x9d\xe6\xe2\x71\x96\x2f\xda\x34\xfd\x6e\xeb\x1d\x77\x57\x72\x3c\x59\x83\x72\xff\x2a\xfa\xc7\xb3\xfe\x6f\xd0\x2e\xc7\xdf\xbf\x0f\xf3\x69\xd7\x07\xe4\x8f\x9e\x8f\x56\x69\x02\xc7\x25\x21\x4a\x95\xc1\xef\x17\x61\x8a\xa3\x47\xe6\x84\xcb\x27\x5c\xa0\xd3\x12\x0e\xa3\x17\xcc\xab\x9c\x6f\x93\x91\x0a\x2b\x27\xac\x08\xa3\x67\x2d\xc2\xbc\x8c\xa9\x0a\xf6\x28\x2d\x16\x21\x7e\xee\x91\x44\x9c\xf9\x28\x1a\x17\x15\xa0\x74\x27\xf4\xe3\x8c\xb0\x58\x1f\x19\xb6\x9d\x9c\x8c\x44\xa6\x6c\xf4\x1d\x6a\x7b\xf1\x3c\x9d\x64\x1a\x8a\x01\x47\x7c\x92\x78\x43\x31\x78\x6b\x36\x87\xed\x34\xbc\x44\x2d\x0e\xe3\x94\xfe\x89\x06\x96\x58\x0b\xc2\xfc\x5a\xba\xcd\x74\xe1\xb4\x6c\xc7\xf4\x1b\x3d\xd0\x65\xff\xe3\x14\xc8\x6b\x4f\x32\x36\x58\xfe\xde\x08\x68\xb5\xdb\x20\x16\x40\xa1\xc4\x16\x0a\x7a\x53\x4a\x6d\x39\xfa\xa8\x77\x62\xfe\x38\x04\x3d\x74\xa0\x23\xf4\xa8\xa3\x4d\x38\x02\xa4\xf3\x11\x3b\x1e\xbe\x92\x29\x5d\x47\x9c\x22\x3c\x82\x09\x76\x40\x3f\x2a\xca\x78\xfc\xe1\x5a\x1e\xd7\x1e\x0b\x25\x39\x01\x43\xbf\x8c\xe7\x30\x5b\x96\xec\x6c\x72\x82\x97\x2c\x12\xd0\x30\x7a\xc7\x6f\xc9\xe1\x2a\x27\xf8\x84\x43\xca\x6c\x8e\x91\xbd\x2f\x7d\x3a\xca\xe6\x9b\x82\xad\x90\xa3\x9b\x5e\x50\x93\x88\x07\x0b\x0b\x7a\xef\x40\xee\x17\x12\xba\x60\xd0\x3d\xc8\xcf\xb0\xbd\x74\xd3\x21\x54\xd9\xc5\xcd\xe3\xa6\x6c\x41\x61\x07\xcc\xfb\x23\xe0\x7b\x0a\x0b\x39\x05\x8b\x90\xa1\xfd\x50\x69\x38\x6c\x43\xe3\xfb\xa5\x27\x63\xce\x35\x4e\x0a\x6c\x8c\x1e\x81\xbf\xd7\xdb\x9e\x67\xdc\x72\xea\x5e\x87\xf1\xd4\xdb\x17\xd5\x96\xd1\x9b\xee\xee\x04\x4a\x80\x37\x6c\x2b\x46\x72\x17\xc6\x82\xbe\x0a\x68\x8b\xd8\xc8\xf6\xba\x23\xe0\x27\xd9\x34\x93\xcc\x44\x8d\x65\x98\xb5\x64\x34\x67\x68\x82\xcc\xc6\x60\x63\xe2\x3f\x81\xe4\x71\xe5\xe1\xdc\xbc\xc8\xcb\x96\xa5\x0b\x00\x68\x1d\xe0\xa1\x85\x96\x1d\x15\x1a\xa7\xd3\xaa\x52\x2d\x26\x24\xe7\x1a\x77\x77\x36\xc7\x21\xf9\xa3\xf5\x77\x9c\xee\xae\xbb\x81\xb7\x48\x60\x58\x40\x0f\x07\xd6\x11\x24\x0f\x86\xf5\xb4\xf7\xae\x02\xca\x72\xe3\x31\xe8\x3b\x07\x64\x59\x40\x23\x28\x91\x3f\x81\x24\xee\x3c\x8b\x60\x42\xf8\xab\x64\xec\xd0\xed\x3b\x99\x0a\x64\xaa\xbd\xe2\xc2\xf7\x34\xa5\x67\x28\xc9\x4e\x40\x0c\x92\x58\xa9\x7b\x14\x97\x70\x8e\x71\x2b\xa8\x0d\x9a\xb7\x87\xce\x05\x56\x79\xfc\x9c\xbc\xcf\x52\x63\xa5\x89\x5a\xba\xdd\xdc\x56\x3b\x2a\xc6\x8a\x17\x01\xd6\xde\x6d\x2f\xf1\x92\xff\x24\x3d\x85\xf7\xdf\x5d\x77\x12\x2a\xf4\x4f\xd2\x3f\x8b\x2c\x89\xc7\xd7\xee\x1e\x6a\xda\x35\xa4\xbc\xaf\xd6\x39\x72\xb5\x6a\x4a\xb7\x46\x17\xeb\x40\xf5\x7e\x0e\xc0\x3c\x0b\x95\x96\xce\x9d\xaa\x3f\x70\x1f\xf5\xe3\xba\xfa\x34\x46\xa0\x39\x59\x5b\x31\x3b\xd5\x48\xad\x39\x2a\x9f\xff\xf8\x69\x74\xb3\xc5\xab\xd9\x32\x43\x6a\xe8\x3b\x52\xa2\xf1\x35\x38\x3f\xaa\xd8\x89\xc9\x8c\x14\x37\x5f\xd6\x17\x59\x98\xc5\x3a\x7f\x4e\xc3\xb6\xf2\xe3\xf6\x4e\xda\x5a\x01\xc4\x2c\x9a\x86\x4e\x12\x63\x98\x96\x30\xdf\x13\xe6\x0f\x76\xcc\xac\xb2\x5a\x44\x63\xee\xa6\xc3\xdd\x80\xfe\x3d\xa0\xff\xd2\xe4\x98\xde\xb1\x63\x5d\x6a\xa2\x82\x7d\xa0\x61\x0d\xf8\xe5\xc2\x84\x26\x77\x57\x0a\x9b\x70\xc5\x9b\x52\x00\xfb\x7d\x33\x2f\xe3\x44\x4a\x67\x50\x5e\x6a\x06\x55\x6e\x6b\x35\x69\x47\xc3\x26\x93\xbf\x1a\xb7\x97\xbd\x56\xbf\xb1\xe2\x8d\x4d\x41\xd9\x95\x3d\x07\xc7\x9d\xe4\x30\x8c\x3c\x9a\x31\x5f\xa1\x3b\xaf\xc7\xc2\x97\x20\xc9\x0e\xa5\x53\xb4\xfc\xc5\x23\x5c\xc9\x71\x87\x7f\x8e\xf4\xc9\x3e\x18\xfa\xaf\x48\x3a\x0e\x77\xd3\xc6\x45\x1b\x9d\xf5\x2f\xa1\xbe\xfe\xf5\x9d\x64\xad\x14\xa9\xf3\x3d\xc5\xf1\xc2\xbb\xc2\x84\x5e\x6b\x8a\xe0\xee\xe8\xee\x34\x8b\xbe\x58\x5f\x93\x6f\x7d\xa1\x8e\xae\xfe\x98\x54\xf2\x2b\xda\x03\x9f\xad\x8b\x3f\x54\x88\xeb\x9d\xf6\xef\x87\xcb\x2f\xd5\xb9\x15\x5f\x92\x8a\xfd\x01\x5e\xef\xfd\xc4\x24\xc2\xe7\xea\x5d\x7e\x0e\xf9\x52\xb3\x58\xfa\xe0\x17\xea\xed\x1a\x5f\x94\x8a\x7f\x2e\x77\xc8\x36\xdd\x6e\x12\x8c\xd0\x9d\x29\x1c\x27\x4d\xb6\x25\xf7\xfe\x63\xdb\x06\x2d\xde\xce\xad\xd5\x26\xd3\x35\xf1\x39\xf5\x27\xc1\x93\x02\x2f\x96\xd3\xbd\x34\xbc\x8c\xa7\xa1\x84\x75\xa9\x68\x88\x96\xa1\x11\x53\xd1\x36\x61\x58\xd9\x2a\xfb\xba\xbf\x99\xb1\x52\x2e\x12\x07\x17\x03\xce\xad\x88\xcb\x21\xa1\xc5\x87\x1a\x2b\xfe\x01\xe0\xbc\x96\xa3\x6d\x29\x65\xd0\x7f\xdf\xc3\x64\x61\x54\xa9\x06\x92\xa6\xad\xf6\x84\x72\x7f\x43\xdb\xad\x59\xe4\xe1\xae\x8a\x94\x0b\x3d\x02\x43\xff\x1c\xa2\xd6\x95\xd9\xe6\xf6\x73\xf9\x3f\x4a\x72\x70\xa9\x9a\xcb\xbb\x12\x62\xea\x4f\x4f\xdf\x9e\x3f\x7f\xfd\xca\xc1\x7a\xb0\x51\xc7\x9b\x8d\x7a\xce\x0e\xdf\xd4\xfd\x28\xc1\xe6\x6e\xdb\x42\xf5\x43\xd2\x1c\x1d\x55\xa0\xc7\x9a\xdd\x60\xa0\xec\x6e\x04\x01\x2b\xfe\x7b\xe2\x80\xd4\xdd\xa2\x43\x77\xd8\xff\x32\x14\xef\x57\x1c\x00\x3d\x8d\xa1\x26\x8a\xef\xae\xc6\xe8\xfb\xb0\x98\xc5\x67\x59\xbe\xf0\x5e\xa0\xfe\xf8\xea\xa3\xe4\x5a\xfa\x0e\xfb\x54\x9d\x81\x9e\x40\x18\x49\xe4\x05\xb7\x64\xb1\xbd\x7d\xfa\xe6\xf5\xfb\xe7\xe7\xe7\x3f\x3e\xdd\xe9\x9a\x7b\x93\x67\x97\x71\x04\xbd\x67\xb4\xd1\x5f\x7c\x40\xcd\x87\x8f\x2a\x76\x27\xfd\xd9\x43\xc7\xb3\xe6\x93\x07\xd6\x27\xab\xb4\xba\x9a\x5a\x2c\x23\x63\xf3\x3f\x83\xbe\x2a\x95\x3d\x1c\x92\xf6\x28\xf4\xcc\x72\x5c\x09\x33\x5b\x08\xad\x11\x4f\xe9\xfb\xe8\xbb\xf7\x45\x7a\x89\xa3\x22\x9e\x77\x4e\xbf\x65\xab\xe1\x5a\xbd\x57\x9d\xec\xaa\xf3\xa7\x99\xd1\xa5\xae\xa5\xa5\x77\xd4\x9c\x09\x84\xd6\x0e\xaf\x38\x66\x1c\xc7\x58\x7b\x72\xf2\x06\x37\xbb\x50\x83\x0d\xf1\x8f\x9d\x8b\x46\xec\xf7\xc1\xbe\xd3\x04\x6e\x4e\xbc\x7d\xab\x87\xfc\x73\x18\x33\x77\xa0\x88\x9f\x80\x5e\xdf\x3a\xbd\x24\x9a\x0c\x95\x53\x9c\x80\xa8\xc8\x3d\x34\x12\xa6\x30\xcb\x0d\xa3\x64\xca\xe1\x2e\xe0\xb7\xe5\x29\xcb\x31\x2b\xaa\xad\xdf\x1b\x1c\x62\x94\x20\xaa\x46\x47\x5d\xed\xe0\x62\xe7\x7f\xd8\x4e\x89\xb4\x3a\x2b\x48\x9c\x8e\x84\xdf\xff\x3f\x1f\xf7\xc7\x77\xdb\x6d\xcf\xb7\x96\xff\x8f\xe7\xef\xde\x9f\x7f\xff\x58\x88\xa5\x76\xfb\x7f\x3e\xee\x43\xcb\xf7\x3e\x8f\xd3\x66\xf3\x8b\x3d\xd0\x5f\x8f\x19\x42\x90\xf6\x45\xfa\x45\x5c\xb8\x33\x30\x08\x14\x3f\x89\x20\x24\x17\x8a\x36\xdd\x77\x05\x40\xbf\x06\x24\x32\x0e\xd1\xff\xc3\xdf\x58\x02\xc7\x38\x5c\xc4\x25\x0e\xa1\xf7\x81\x9f\x64\x57\x30\x1f\x87\x05\x14\x0c\xeb\xcb\x0b\x16\xa6\xf8\x92\x64\xa2\x14\xa8\x56\x18\x16\xa4\xcd\x20\x4c\x60\x38\x6e\x94\xa9\x67\x8f\x05\x55\x02\x86\x0b\x11\x30\x6c\xa0\xa4\x2a\x95\x09\x40\xbe\x11\xcd\x7a\xe2\xa0\x59\xd7\x9a\x9a\x70\xc2\xf5\xf0\x56\x11\xae\x27\x12\x80\xde\x0a\xc4\x83\x5c\x0a\xe9\xcd\x8c\x56\x2c\x07\xc3\x74\x04\xc6\x83\x6d\xc0\x39\xc0\x7c\x70\xb3\x02\x72\x02\xcb\xd8\x91\xc0\x32\x1f\xc2\xd1\x60\x4c\x13\x58\xe6\x6a\x02\x8b\xfc\x13\xcc\xf5\x04\x96\xb9\x33\x81\x65\xfe\xe9\xd3\x5c\x4f\x60\x99\xab\x09\x2c\xf3\xc1\xb2\x4e\x02\x0b\x8e\x22\x66\x71\xe0\xad\x18\x64\x00\x06\x9f\x3e\xc1\x55\x00\xe6\x01\x88\xa4\x04\x96\xb9\x96\x5e\x32\xa7\x09\x2c\xca\xf5\x87\x73\x73\x6c\x22\x9e\xc0\x32\xaf\x4e\x60\xd1\xbf\x60\x9f\x5e\xa8\x8a\x73\xd4\x3c\x92\xc0\x12\x0e\xe6\x20\x27\x09\x53\xe8\xce\x12\x8c\x41\x04\xe6\x52\xb0\x76\x51\x19\xac\x9d\x80\x62\x7d\xb0\x36\xda\x3e\x72\x24\x74\x88\xd8\xb8\x2d\xd9\xaa\x3f\x2d\xdf\x5c\xbc\x7c\xf3\xed\x8b\xad\x10\x46\x94\x4c\x1a\xad\xa1\xfe\x9a\x4c\x1a\x3b\x6b\x33\xbb\x6b\xe5\xd7\x96\xd4\xca\x13\xd0\xd7\xce\x40\xfc\x0d\x23\x67\xd4\xb9\x57\x5a\x4a\x21\x1c\x4f\x75\xf3\x4e\x5d\x36\x49\x47\xe1\x9c\x1e\x49\x0b\xba\xea\x0b\xb5\xe2\x31\xef\x3b\x65\x1b\x0f\xd3\x2c\xbd\x9e\x67\x4b\xaa\xe5\x53\x30\x6f\xec\xf8\x43\xe7\x8f\x91\xa9\xfe\x68\x26\xe7\xf5\xa9\x2a\xee\xad\x71\x9b\x44\x72\xeb\xec\xff\x6a\x99\x8a\xf1\xe5\x75\x7b\x9c\x45\x70\x1e\x13\xd8\x49\x39\x61\x42\xbd\x57\xf1\xd6\x1f\x13\xa0\xff\xd7\x2b\x37\x3b\x8f\x35\x5b\x04\x48\xe5\x2c\xcb\x38\x29\xf6\xa2\x6c\xae\x50\xce\xe8\x3d\x01\x52\xa2\x14\xfc\x85\x9d\xfb\x57\xd6\xe9\x2d\xcf\x3a\x45\x6a\xf1\x78\xd0\xca\x1d\x6a\x71\x0e\x17\x59\x11\x97\x59\x7e\xbd\x97\xc5\xd1\xb8\xbd\x20\x16\xb0\xdc\x0f\x38\x78\x9f\x83\x9d\xa8\x96\xfe\x2c\xc1\xf8\x49\x84\x39\x0c\xba\x0f\x7d\xdc\x04\xf4\x43\xe5\x33\x30\x3f\xa0\x90\xa5\x48\x3f\x28\x5b\x4a\x3d\x82\x21\xb9\x94\x41\xab\x0b\xd2\xce\x24\xcf\xe6\x6f\xf2\x6c\x1e\x17\x30\x20\x94\x2b\xa8\x2e\x9d\x49\x9c\x46\x67\x59\x04\xbf\xbb\xfe\xf1\xed\x8b\x96\xc8\xf7\x2b\xf2\x71\x60\x12\x0a\x19\xd4\x30\x34\xeb\xfe\x14\x0e\x1e\xa8\x24\x06\x30\x00\x84\x5d\x42\xdc\x61\x5c\x35\xab\x60\x25\x3d\x76\x63\xe1\xab\x92\xd3\x0e\xc9\x83\x32\x22\x1f\x7f\x59\x65\x32\x12\x1f\x58\x57\x24\x7e\x4e\x2d\x91\xbc\xaa\x16\x28\x51\x34\xb1\x51\xed\xc8\xd7\x2c\xb4\x4f\x6b\x87\x0d\xf7\xb9\x63\x20\x39\x5d\x93\x0d\x36\x90\x4c\x9c\x2d\xc0\xfd\x5c\xc0\x81\x78\xee\x0d\xc3\x6d\xcb\x55\x40\xfc\xc6\x6b\x77\x2c\xd4\xe8\xf6\x38\x4b\x12\xe8\x50\x9c\x39\xa9\x8e\x78\x46\x26\x47\xd3\xee\xd9\x1e\x4f\xc2\xeb\x6c\x59\x16\x7b\x0b\x98\x8f\x61\x5a\x86\x53\x88\xee\x2e\xe7\xe9\x1a\xc2\x1a\xb2\x93\xed\x4a\x53\x0f\xab\x35\xf5\x22\x5c\xa4\xf7\xc7\x3f\x9d\xd8\x35\x75\x2c\xf0\x7d\xe0\xcf\x33\x9c\x19\x49\xc3\x76\x69\x5f\xf9\x63\x98\x24\x6a\xe6\xa3\x2b\x93\x51\x45\xe5\x65\x08\xb3\xda\x18\x78\xda\xef\x76\x31\xce\xb3\x24\xc1\x49\x51\x07\xa0\x7f\x44\x95\xd0\x7d\x70\x28\x74\xdb\x13\xa2\x9c\xc7\xd3\x59\x79\xea\x63\x38\xe3\xfe\x31\xbf\x42\xcc\x4a\x4a\xa0\xe7\x11\xe8\x91\xd2\xee\x53\x48\x99\x63\x33\xaf\xa7\x77\x02\x8e\x5c\x61\x6e\x72\xbe\x43\xbf\x4b\x33\x01\xfb\x47\x23\xe0\x5f\xc6\x79\xb9\x0c\x93\x8d\x83\xce\x55\x3b\x5d\xbf\x47\x42\x62\x0a\x6c\xee\x31\xe0\x96\x47\x80\xdd\x33\x60\x72\x64\x25\xfd\x84\xcd\xca\x34\x2c\xe3\x4b\x48\x3b\x14\x2d\x22\xc9\xfc\x4c\x94\x7d\xe0\x3f\x62\x26\x49\xf2\x4d\xff\x11\xed\xfe\x04\x4e\x4a\xe9\x67\x99\x2d\xc4\xaf\x33\x9e\xc9\x3a\x4e\x62\x98\x96\xe7\xf1\xef\xf0\x8c\x5b\xcf\xd1\xf1\x85\xf4\x36\xea\x36\xf4\xef\x3e\xfd\xf7\x60\x64\x6d\x93\x52\xa8\x7e\x8e\x91\x1f\xb4\x7c\x2d\x6d\x4c\xcd\x6d\x09\xcf\xc0\xa7\x1a\x9a\x4e\x78\x20\x1f\x93\xf6\xcd\x1f\x87\xa0\xaf\x23\xb1\xd5\x32\xe0\x2a\x6e\x1d\x3f\x4b\x79\x28\x86\xb5\x99\xe3\x0f\xb2\xbd\x14\x87\x30\xd0\x40\x86\xa2\xbc\xa6\x21\x1b\xaa\x7f\xa8\x4f\x6b\x77\x62\xc7\x6a\xbe\xcf\x6f\xe3\xbe\x22\x11\xf6\x14\x58\x4e\x44\xdc\x63\xdb\x67\x12\xa7\x1f\xf0\x64\x31\xb1\x98\x9c\x51\x32\xd7\x31\x4c\xa2\x2d\xc9\xa8\xe5\x03\x3c\x49\x7c\x56\xcf\xeb\x78\x81\xea\x35\xe6\xfd\x42\x83\xbb\x47\x23\x7e\x2c\x5d\xef\x09\xac\x51\xf9\x08\x96\x61\x9c\xd4\x60\x1f\x36\x6a\x4f\xde\xfc\x7a\xb5\x27\xae\x2e\xea\xb8\xe3\x66\x02\xe0\xce\xe1\xc2\xe2\xbe\xbd\xc8\x16\xd9\x25\xcc\x49\x40\x12\x2e\x0e\x7e\x5c\x84\x69\x04\x23\x07\x4a\xbe\x55\x36\xf6\xee\x5b\xda\x26\x79\x8e\x01\x36\x15\x54\xae\x75\x0e\xd7\x69\x2d\x65\xa4\xf1\xa9\x37\xf4\xc6\x19\xa3\x25\xcc\x28\x95\x2e\xd3\xda\x83\x68\xfd\xa8\xcd\x6f\x59\x9f\x6c\xd8\xee\x83\xde\x9e\xde\x9e\x08\xbe\x23\xc7\x90\xf6\x8e\xd9\x90\x1e\x4a\x19\x7d\x5d\xc9\x0b\x47\xe6\x87\x91\x0d\x0f\x94\xd4\xf9\x2e\x10\x65\x60\xf2\x01\xfe\x90\xf4\xab\x59\xf6\x75\xb5\xa5\x4c\x26\xb4\x3e\xc4\xa1\x76\x8b\x24\xbc\x3e\xf5\xd2\x2c\x85\x7f\xdf\x48\xf2\x0b\xfc\xb5\x2f\x25\xf8\x2d\x02\x5e\xe9\x7f\x22\xce\xa9\x9b\x8d\x8b\xed\x66\xf2\xff\x10\x43\x10\xfc\xb1\xe4\xff\xbe\xa0\x65\xb9\xed\xc2\xfe\x73\x54\x75\x67\x92\xdd\x26\xce\x5d\x32\xf8\xe0\xb6\x48\x5e\xa5\x47\xbf\x80\x98\xdd\x07\x2c\x84\x47\x33\x7e\x9b\x47\x03\xbb\xac\x3c\xa2\x17\x91\xac\x24\x64\x8e\x64\xd3\xc0\x8f\x6d\x20\x50\x4c\x79\xcd\x50\x4f\x7a\xc6\x17\x94\x6f\x6e\x2c\x65\x2f\x96\x65\x49\x9d\x2f\xa6\x44\xea\xa3\x7f\x49\x18\x45\xa4\xca\xae\x4a\x61\x67\x8b\xe7\xd0\x77\x12\x15\x6b\x71\xc4\x70\xb6\xa4\xea\xd8\xa0\x19\x44\xb5\x36\x4a\x01\xfe\x29\x86\x57\x3a\x64\x85\x63\x04\xb5\x1e\x57\x4e\x63\x1e\x5a\x73\x8d\x53\xfc\xf1\xc7\x13\x58\x14\x6b\x63\xfa\x0d\x6f\x8c\xfe\x70\xbf\x41\xe0\xc3\x5a\xa5\x41\x12\x5f\x15\xf0\x94\x25\x9c\x17\x3c\x26\x01\x07\x3f\x68\xc1\x0d\x69\x56\xb6\x71\x68\x03\x09\x5e\xa0\x96\x04\xb1\x73\xf9\x71\x41\x9e\xd2\x3c\x44\xc4\x6c\x42\x85\x9e\x3d\xbc\x81\x06\xa0\x61\x78\xeb\x29\xfe\x68\x8a\x34\x56\x66\xca\xc0\xd0\x08\x58\x87\x25\xa1\x15\x69\xfb\x2a\x4e\xa3\xec\xca\x07\xfe\x7b\x7a\x02\x3e\x27\x07\xe0\xf7\xe4\x38\xfa\x82\x9c\x7f\xe9\xaf\x77\xf8\xf8\xfb\x1e\x55\x18\xb7\x10\x5f\xc4\xb8\x50\xd7\x09\x94\xe3\x41\xa6\xcb\x38\x6a\xe2\xcb\xb2\x1a\xa4\x38\x6b\x6f\x32\x48\x99\x79\x47\xd8\xce\x30\x99\x6b\x58\x3e\x2f\xe1\xfc\x1c\x7d\x1e\x7b\xbc\x8a\x4a\x8f\x57\x08\xb8\xd1\x98\xd1\xf8\xe6\x82\xc6\x77\x1d\x2d\xae\x44\xf3\x4b\x6d\x2e\x87\xdd\x2e\x40\x7d\xf1\x3d\xf9\x79\xdc\x05\xb4\x7f\xb1\x59\x0e\x90\xee\x39\xe5\xc6\x91\xa6\x2c\xf6\xd4\x5e\x36\x18\xf6\xba\xdd\x11\xb9\x84\xfa\x55\x58\x9c\xd1\xaf\x16\xe1\xa0\x01\x51\x1c\x3d\xc7\x50\xe6\x2e\x3e\x7b\xf7\x77\xbe\xa1\xc8\xd8\xa2\x60\x7a\xa1\xe5\xff\x7f\x94\xdf\x05\x7d\x29\x10\x66\x9e\x01\x23\x15\xc7\x2d\xd4\xa8\xe3\x89\x6d\x46\x21\x8f\x97\x39\x75\xf1\x07\x2e\x63\x78\xb5\xc8\xf2\xb2\x15\xac\x46\x9b\xb2\xe0\x93\x3b\xa8\xff\x5f\x60\x5b\x23\xae\xd2\x10\xaf\xa6\x36\xb1\x3e\xfa\xa3\x41\x0a\xaf\x3c\x3e\x79\x5a\x3a\x1d\x3e\x5e\xaa\x94\x5a\xd8\x37\x79\xf5\x99\xc1\xd2\x72\x87\x8f\xba\x1f\x08\xc2\x79\x74\xef\x8e\xa5\x16\xfa\x54\x1d\xf0\xf6\x71\xa2\xe4\x44\xee\x2f\xd1\x48\xe6\x1a\x83\x1d\x3a\xb3\x08\xe1\x4d\x2b\xfd\x76\xe0\xff\xfd\xf7\x36\x5e\x26\xa7\x5e\xcf\x0f\x40\xba\x5a\x01\xbc\x0c\x35\x02\xe8\x16\x33\x07\x4a\x66\x56\xce\xde\xc3\xc6\xf3\xae\x32\x9e\x0f\x6f\x56\xa7\x37\x74\x8a\xeb\x0d\xa7\x85\x05\xab\x55\x20\x31\x40\x93\x21\x3f\x95\x1d\x75\x26\xe9\xbe\x70\xb6\x04\x7c\x82\xfd\x6d\x92\x65\x25\xcc\x87\x79\x96\xc0\x01\x0b\x0b\x24\x51\x81\x7f\x0b\xee\xc4\x13\xd4\x41\x0c\x50\xbe\x07\xf2\x81\x32\x5f\x51\xa9\xdf\x65\xcb\x34\x8a\xd3\xe9\x19\xb6\x89\xbd\x85\xe3\xb2\x15\x74\xca\x6c\xf1\x6d\xd9\x21\x66\x32\x32\x4a\xdf\xa6\x20\x1c\x40\xc6\x31\x1d\xa7\x29\xcc\xc9\x8d\x76\x7e\x87\xb4\x1c\x96\xa2\xa7\x5e\x86\xe5\xac\x33\x0f\x3f\xb6\xba\x20\x64\x6e\x98\xe5\x22\x0a\x4b\x88\x86\x90\xfb\x77\xc8\xa5\x73\xdc\x67\x6f\xb2\x22\x26\x7d\xbb\x5a\x01\xbc\xdd\x2b\xbd\x21\x03\x3a\xa2\xf9\x8f\x9f\x78\x16\xe7\x45\xf9\x38\x1d\xcf\xb2\xbc\x05\x81\xdf\xd1\x2d\xc2\x0f\xbc\x65\xe2\x3d\xf0\x92\xd8\x0f\x56\xc0\x42\xb2\x3d\xb8\x59\x05\x37\xa8\x8f\x58\xbb\xe8\x1c\xb9\x77\x0f\xde\x1d\x18\x1d\xcf\x44\x7f\x10\xdc\xe8\x3c\xfe\x7c\x57\x58\x84\x79\x01\x9f\xa7\x65\x0b\xb2\x66\x7f\x93\x67\x57\x03\xa9\xda\x59\x01\x8b\xb2\x85\x4e\x72\x80\x7d\x56\x7a\xb2\x83\x67\x60\xe7\xf7\xe7\x68\x5e\x0e\x7a\x9c\x0b\x80\x17\x50\xc4\x17\x49\x9c\x4e\x79\x95\x89\x12\x1c\xdc\x49\x2b\xc7\x32\x55\xc6\xf2\x81\x21\xa6\x2a\x67\x51\x55\xc9\x0f\x51\xc9\x61\x51\xbc\x88\x8b\x12\x7b\xd7\xfc\xf0\x22\xbb\x84\x7e\x70\x2a\xdf\xa0\x8e\x21\x76\x6f\x85\x74\xa7\x9b\x75\x4d\x72\xbf\x0f\x9c\xdd\x4f\x9c\xb0\x8e\xde\xc4\x9e\x1e\x9d\x8e\xbc\x58\xeb\xea\x99\x87\xd7\x17\xb0\x1d\xa7\x8c\x9f\xc8\xe6\xe5\xd1\x9f\xa9\x7c\xff\x8f\x19\xa3\x81\x4e\x7b\x6d\x8c\x6d\x69\x73\x76\x55\xf8\xa3\xbe\x18\x25\xc6\xab\xe2\xf9\x38\x7d\x7e\xf9\xad\xdd\x17\x15\x2e\xe2\x9a\xce\x26\x2b\xad\x14\x39\x12\xc8\x48\x8e\xc7\xe2\x54\x50\xeb\xf4\xab\x1f\x7b\xd7\x99\x06\x0c\x9f\x97\x99\xbf\x41\xce\xe4\x7c\x60\x4c\xc0\x2c\xf5\x7e\x3b\x82\x8b\x1c\x8e\xc3\x52\x1c\xb0\x8c\xa3\x49\xdf\x34\xbb\xb1\x43\x0b\x09\x3b\x9f\xc4\x68\x27\x36\x40\xa4\x46\x9c\x7b\xc6\x46\x5e\x40\xdf\x25\x94\xa7\x9a\x75\xcf\x08\xc0\x5b\x63\x5c\x41\xd2\x29\xcf\xea\x58\x57\xec\x31\x6f\x3a\x2f\x64\x0d\x64\x7d\x7e\x52\xe6\xc9\x2a\x95\x36\xa9\x7a\x4c\xa3\xce\x30\xc3\xea\xea\xd6\x4a\xd9\xd6\x0f\x86\x6b\x0f\x80\x3d\x66\x02\x95\xd0\x27\x99\x7d\x87\x72\x12\x59\x8c\xa3\x6b\x46\x6a\xce\x72\x65\x9b\xf9\xd4\x2a\x1a\xbe\x16\xef\xc8\x16\x59\xe8\xee\xa8\x1a\xd4\x9e\x71\x71\x26\xcf\x79\x41\xe7\xb9\xa0\xfa\x0a\x4e\xfd\x08\x8b\xa2\x3d\x0f\x17\xf2\x11\x55\xa1\x46\x92\x7b\x69\x43\x8a\x4f\x5d\xfe\x2a\x71\x8a\x79\xe5\xa9\x2d\xa5\x1b\x26\xbf\xc3\xce\x6e\xa5\x38\xbb\x49\x67\xb3\x75\xc7\x38\xb5\x4b\x4e\xef\xf6\x84\x1a\x4b\xd7\xb8\xa2\xb9\x91\xa2\xf2\x65\xda\x49\xe1\xc7\x92\xa0\x6f\xc7\x93\xd6\x5d\xbc\x4b\xc7\x05\x8d\x46\x81\x91\xd0\x78\x4d\xf5\x24\x89\x4f\xb3\x34\xb9\x6e\x8f\x67\x71\x12\x79\x0f\x3c\xaa\xa8\x90\x09\x76\x3a\x41\x6a\x20\xb9\xf7\x37\x00\x83\x3b\xba\x7a\xa0\x8f\xa1\x60\xf6\x44\x5a\xb8\x45\x33\x14\x55\xe1\x1a\xaf\xca\x21\x1a\x47\xe8\xc0\x60\x56\xf4\x3f\xc3\x49\x96\x0f\xfe\xf6\xcd\x4d\xb9\xfa\xdb\xe8\x3f\x01\xd3\xb7\x95\x13\x21\xa9\x3b\xaa\xfa\xc8\x07\x69\x67\x11\xe6\x30\x65\x67\xce\x00\x84\x16\x5d\xb1\x23\x89\x78\x90\x63\xad\x1e\x6a\x1a\x6b\x70\x93\x53\x65\x87\x3a\x28\x06\x64\x4b\xf6\xf9\xd1\x2a\xef\x64\x93\x49\x01\x99\x3a\xdf\xbf\x13\xd2\x17\xe6\xe1\x47\x72\x6d\xc0\xaf\xc4\x29\xbd\x02\xbf\xf5\x17\x1f\x7d\xac\xaf\x79\xfa\x07\xb0\x2c\x34\x0b\x51\x2f\xf3\x92\xfc\xae\xaf\xab\x5e\x79\x2d\x9d\x63\xef\x76\x85\xa6\x7f\xbf\x1f\x3e\xee\x4d\xe0\x7c\x1d\xdb\x83\x91\x16\x8b\xb9\xe2\x24\x98\x70\x77\xf0\xfa\x89\x90\x22\x43\x5d\x1e\x33\x7f\x0b\x0d\x5e\x97\x69\x09\x55\x0b\x69\x4f\xd8\x54\x19\x1a\x02\xcd\x50\x1b\xc9\xd9\x56\x78\xb4\x4c\xcb\xf1\xa8\x2a\xb7\x97\x17\xba\x5f\xdf\x72\x4f\x05\xfb\xe1\x7a\x50\x42\xdd\x80\xe8\x16\xcd\x69\x86\x8d\x69\xd8\x3e\xd8\x8c\xc7\xc0\x98\x57\x5f\x2d\xe8\x1b\xd7\xe4\x96\x4c\xed\xd7\xf3\xfe\xf1\xf9\xfd\xef\x7f\x76\x70\x20\xaa\xb3\x97\x4f\x74\x1c\x74\x4d\x13\x5f\xf1\x04\x5b\x97\x97\xe1\xd6\x33\x8e\xd0\xee\x1a\x87\x84\xff\x35\x81\xd1\x05\xe5\x18\xef\x81\x21\xb7\xd5\x4b\x61\x58\xe4\x06\xd5\x7c\x69\x3c\x56\x5f\xa6\x4b\xe4\x19\x9a\xbc\x66\xd9\x02\xa6\x4f\x2f\x2d\x34\x77\xc4\x13\xc4\x0b\x65\x4b\x45\xd7\x85\xd9\xa3\xfb\xe2\x51\xd2\x7e\x39\x9e\xc0\x4e\x55\xab\x92\x80\x69\x29\x15\x80\x24\xf1\x03\x19\x0e\x40\x75\xa3\xfb\xd2\x9c\x25\x4e\x37\x69\x3c\x84\x5b\x79\xa4\x46\xed\x90\xb7\xa8\xd0\x30\xf2\x3a\xe8\xed\x42\xfa\xa6\x99\xae\x5a\x27\x3d\x03\x27\x18\xe2\xa1\xa3\xa4\x07\xdb\x64\x65\x88\x25\xf1\x95\x57\x65\x09\xe7\xb7\x65\x69\x1e\x76\x17\x27\xe7\xfd\xf0\x62\xab\x84\x28\x12\x3c\x20\x2d\xbc\x34\x4b\x61\x65\x26\xd4\x3a\x82\xe5\x5d\x72\x2c\x6b\x7d\xfe\x75\xc7\x9e\x2f\x89\xdb\x32\x01\xde\xfd\xf0\x6d\xef\xfb\x8b\xec\xdf\xbb\x9d\x00\xf2\xca\x57\x66\x81\x3c\xf2\x9f\x83\x50\xdb\xd6\xc9\x5f\x6f\xc4\xb3\x28\x4c\xda\x51\x1c\x26\xd9\x74\x9d\x6d\x0b\xf8\x61\xaf\x77\x4d\x1f\xb6\xe5\x18\xed\x6a\x3e\xe4\xd5\xf3\xe1\xff\x3d\xfb\xf5\x7a\x9c\xff\xee\x20\xab\x41\xa2\xd8\x6a\xec\x02\xfe\x23\x7c\xcf\x98\x1e\x66\x2c\x80\xb4\x49\x49\xfb\xb1\x1a\x2c\x20\x69\x8f\x35\xad\x5a\x32\xe5\x05\xea\x5f\xa4\x18\xab\x48\x16\x24\xcc\x24\x0a\x93\x8d\xec\x3b\x76\x04\x39\x3d\x1b\x54\x1e\x71\xb6\x24\xf0\xf6\x35\x8b\xa3\x08\xa3\x39\x94\xf9\x12\x4a\xb6\x0f\x37\x03\x73\x95\x65\x4b\x68\xe7\xb6\xb7\xd0\xfe\x5d\xc7\x24\x66\x0f\x78\xf1\xcb\xf0\x82\x05\xd2\xb7\x7b\xec\x22\x66\xfa\x90\x66\x28\x6a\x10\xc4\x6c\x1f\x36\x2e\x31\x67\x28\x8d\xdc\x3f\x6d\x3a\x18\x0a\x0f\xa6\xe8\xba\xde\xa1\xac\xb4\x09\x48\x38\x4a\x1c\x57\x11\xed\xa5\xb5\x87\x95\x4c\x31\xb4\x9c\x61\x3c\xbe\x99\x84\x6b\xd6\xb9\x22\x43\x57\x2d\x45\x0a\x01\x59\xd7\x7d\x07\x6a\x43\xfd\x33\xa4\x23\x7a\x52\x4f\xb8\x63\x4a\x8c\x2f\x9b\x91\x45\x3b\x8e\x81\x73\x01\xd9\xa9\x89\xbf\xfb\x0e\x14\x13\xd2\x52\x9b\x8e\x8c\x26\x2e\x7e\xd4\xa5\x19\x77\x47\x02\x0a\x45\xc4\xde\xf4\xf4\x1c\x60\xb9\x56\x35\xc1\x96\x9c\x1d\xb7\x7e\x0a\xd3\xc4\xe9\xaa\x21\x59\xd3\xef\x17\x8c\x05\xe6\xaf\x5e\xd7\x7a\x9d\x78\x0e\x1d\x1d\x2f\xdd\xdc\xa8\xeb\xd7\x44\x28\x1e\xb8\x04\xb2\xdc\x15\x9b\x06\x19\xfe\x79\x07\xcf\x7a\xd9\x72\xd1\xb8\xd4\x18\xf7\xbf\x86\x81\xdd\x6e\x30\xbf\x8a\x93\xa4\x1d\x11\xd3\xb0\x30\x99\x6b\xe1\x5b\xcb\x34\xfe\x6d\x09\xdb\x71\xb4\x81\x35\xdd\xd0\xf9\x14\xf5\x33\xac\x54\x3f\xf3\x66\xf6\x74\x6a\x7e\x90\x1d\xb0\x2b\x90\xa5\x68\x4e\xa8\xd7\x2a\xcd\xe8\xc4\x2c\x8c\x2b\xac\xc5\xe4\x40\xea\xf1\x26\x37\x3b\x59\xda\xf2\xc9\xbe\xd5\x0a\x44\x56\x2b\x4e\xd9\x64\x51\x44\x70\x15\x98\xef\x14\xb3\xec\x4a\x79\x07\x55\xd0\xf2\x0a\xba\x4c\x03\x96\xe8\xdb\xe8\xcd\x16\x0e\x42\x2a\x8c\x9a\x2b\x15\xef\x44\x2c\x1d\x75\x05\xf4\xe6\xdb\x0a\x34\xfa\x4d\x7e\x08\xb5\xb1\x15\xe8\x46\xe5\xb0\xa6\xba\x9f\x84\xd7\x36\x36\xe8\xaf\x73\xba\x3b\xff\xc7\x0f\xc5\xbf\xce\x7f\x3b\xac\x3c\xdd\xad\x07\x39\x91\x5a\x56\x75\xac\xe7\xaa\x77\x9b\x81\xc7\x69\x22\x77\xbe\x4c\xca\x78\x91\x40\x49\x17\x67\x30\x8d\x55\xd6\x80\xdd\x9d\x0e\xf5\x11\xfa\x8a\x47\x43\x2d\xde\xfd\xb6\xcc\x98\xf2\x49\xff\xdf\xdf\x5d\x7e\xff\xca\x3e\x63\x44\x0b\x30\x01\x69\x2c\x1f\x00\x1b\x80\xe6\x58\xa3\xfd\x6d\xde\x60\x3e\xab\xa4\x47\xd9\xa4\x92\xb2\xbe\x14\xee\xd2\x0f\xf0\xfa\x22\x0b\xf3\xe8\x31\x23\x47\x1b\x0e\xf7\x0f\xe4\x80\xee\xbe\x1c\xe3\x7d\x28\x72\x66\x68\xca\x57\xb3\xc3\xe1\x89\x7c\x8c\x37\xd5\xbb\x32\x8f\xa7\xd3\xa6\x7a\xf5\x4b\x12\x98\x5d\x73\x47\xae\x51\x8b\x8d\xfd\xe5\x07\x22\x6c\xff\x25\x4c\x97\xcf\x59\x12\x4e\x43\xe7\xb9\x0b\xc7\x6e\xa3\xf5\x6e\x4d\xf7\x03\x1b\x90\x4e\x3b\xd6\xe0\x06\x32\xc1\xd8\xaf\xa5\x5d\x7a\xd5\x50\x32\x10\xbe\xce\xdb\x22\x0e\xce\xbe\x9f\x47\xdd\x6f\xa3\xdf\x1c\xae\x1b\xca\xa0\xd5\x4c\x06\x48\x99\xf6\xa4\xb1\x9e\x49\x97\xde\x1b\x11\x68\x2d\x5f\xf1\x7e\x10\x37\x8c\x99\x16\xbf\xaf\xb8\x34\x98\x1a\x4d\x99\x43\x01\x61\xda\x04\xfe\x33\x7e\x66\xa8\x8b\x32\xc5\x0f\xc5\x5a\xe4\x93\xfc\x8a\x25\x30\xaa\xa2\x44\x76\x6e\x19\x59\x7d\x21\x35\x17\x00\x81\x5d\xdc\xc2\x13\x22\xcf\xb1\xaf\xb6\x05\x62\x8c\x19\x02\x81\xbb\x37\x9e\x85\x79\xd9\xf9\x88\xa7\xcc\x67\x9d\xf4\xe2\x02\x9e\xde\x52\x1d\x7c\x06\xde\x71\xea\xc7\x11\x2a\x27\x4b\x4f\x6f\xde\x3e\x3d\x7f\xfa\xee\x94\x07\xc9\x93\x3b\xab\xd1\x0a\xe0\x9a\x16\xa7\x37\xe8\xc2\xe9\x0d\x7a\xf4\xc5\xeb\xc7\x4f\xa4\x27\x93\x2c\x8c\xe2\x74\x8a\x1e\x5e\x01\xf4\x03\x46\xa7\x37\xe4\xaf\x38\x9d\x92\x57\xce\x7f\x3c\x3b\x7b\x7a\x7e\xae\xbd\x05\x23\xfc\x12\xd6\x3f\xeb\xf7\x60\x73\x78\xab\x3a\x43\x51\x85\x75\xb5\x33\xfa\xf4\xa2\x5a\x04\x65\xc9\xcf\x27\x6f\x7e\xfd\x78\x6c\x17\x41\xe7\x64\xca\xf8\xff\x58\x86\x39\xda\x11\xce\x50\xf5\x1f\x8b\xa3\x5f\xb1\x08\xcb\x31\x23\x48\x27\x79\x36\x21\x3e\x08\x52\xcc\x10\x93\x7e\x3d\x5b\x30\x70\x54\x8a\x2a\x32\x4d\xb3\x1c\x46\xec\x43\xf4\x27\xfb\x1e\xfd\xc9\xbf\x38\xc9\xf2\xf9\x13\xf3\xab\x8f\xa2\xb8\x08\x2f\x12\x43\x5b\x11\xe6\x73\x82\xfd\x2c\xc3\x3d\x33\x12\x42\x33\x8a\x03\x5f\x68\xd3\x96\xd0\xcd\xbe\xc8\xc7\x4c\xd7\xe9\xf7\xeb\x1a\x25\x44\x0c\xe2\x81\x3d\x00\x55\xef\x5e\x77\xcf\x0a\xc1\xad\x04\x72\x00\xc9\x01\x7e\xd8\xc4\x9a\xcf\xa4\xa2\xae\x3b\xca\x4b\x96\x9e\x45\xee\xbb\x82\x08\x59\x85\xa8\x3a\x94\x95\x2f\x51\x95\x09\x0f\x13\x59\xcb\x8d\x95\xa2\x13\x6a\xcc\xa5\x60\x70\x72\xef\x6b\x7a\xa8\x18\x40\xb1\xdf\x60\x8e\x93\xbd\x6f\x6e\x38\xc4\xf7\x6a\xef\x9b\x1b\x32\xe6\xe8\xaf\x68\xbc\xc2\x6b\x71\x8f\x41\x6f\x49\x26\x29\x69\x50\x64\x80\x70\x3e\x61\xa2\xb1\x2f\x25\x2a\x4a\x58\xe7\x74\x40\xd8\xc0\x74\x15\xba\x34\x35\x05\x54\x80\xb7\x6b\x39\x90\x87\x52\xd1\x24\x89\x6e\x1d\x23\x9b\x99\x89\x7f\x30\x02\x3e\x95\x78\x86\x5f\xc2\x56\x0d\xe5\x45\x2c\x88\x15\x33\x56\xbf\x2f\x19\xe0\x2c\xde\x99\x4a\xa5\xb4\x62\x96\xcc\xa5\x29\x42\xc5\xf1\x26\x93\x44\x09\xb4\xea\x62\x58\x1c\xe2\x83\xa2\x1e\x9f\x9e\x2d\xb4\xea\xc8\x4c\xd5\x25\x56\x3c\x79\xc4\x4d\x9d\xc3\xd9\x51\x66\xe8\x55\x73\xbe\x86\xb3\x59\x46\xdc\x11\x93\x09\xcc\x61\x5a\x7a\x6f\x58\x5d\xa4\x26\xd7\x38\xa4\xac\x1f\x0f\xda\x73\x95\xc2\x4d\x02\x6c\x40\x93\x2e\x8e\x88\xe8\x69\x6a\x88\xa5\x9f\x2a\xe1\xc7\xb2\x1d\xa7\x8b\xa5\x69\xaa\x60\xce\x18\x4e\x09\x4b\xbf\xc6\x78\x1e\x17\x49\x38\x86\xb3\x2c\x21\x1a\xe6\xa3\x2c\xa5\xc5\xf8\x8f\x48\xcd\x47\x40\x5d\xa7\x8f\xa3\x79\x9c\x8a\xbe\x23\xfe\x2c\x69\x85\x59\x97\xb7\xdc\xe4\xfb\x76\x01\x5d\xc2\x02\xc7\x85\x33\x51\xe3\xff\xef\x30\x6c\xff\xfe\xb8\xfd\x4b\xb7\x7d\x7f\xd4\x12\x7f\xb7\x47\x37\x5d\x70\xd4\x5f\x49\x77\x83\x87\xdf\xf8\x00\x33\x7c\x79\xf3\x65\x51\x7a\x17\xd0\x0b\x3d\xdc\x4c\xef\xc9\xab\x73\x6f\x96\x15\x25\xea\x8d\x8e\xaf\xe0\xcd\x03\xff\x69\x5a\xc2\x9c\x90\x78\x2b\xed\xa9\x25\x3d\x64\xc1\x64\x97\x20\x34\xfe\x94\x5e\x18\x59\xbb\x88\x6d\xab\x7c\x17\x62\xbb\xcf\x91\xc4\xfa\x65\x08\x06\xba\xa5\x48\xae\x62\xf7\xd2\x6f\xba\x3b\x18\xcb\x9e\xac\xf3\xfb\xda\x69\x43\xc1\xd1\x32\xfb\x04\x48\xd9\xdb\x3d\x23\xb0\xaa\x2b\xb5\x92\x8f\xb8\x65\xa1\x57\x0b\x19\x59\x5a\x20\xa5\xd5\x4c\xb7\x68\x2c\x25\xa8\x8c\x60\xbb\xd6\xe6\x86\x01\x9b\x50\x30\x8c\x07\x98\x9a\xae\x77\x00\x7a\x87\xa8\x27\x1c\x62\xa4\x5a\xa8\x23\xcd\xbc\xf9\xe0\x2e\xf2\x6c\x9a\xc3\xa2\xa8\x62\x58\xab\x2f\xe8\x76\xb5\xed\xf8\x56\xee\x42\x65\x82\xb1\xbc\x77\x31\xb9\xf6\xb7\x62\xc4\xf0\xaa\xe8\xe9\xfc\x26\x80\x35\x56\x85\xa2\x21\x08\x84\x5e\xa3\x0a\x5a\x3b\xcb\x3a\x55\x72\xa0\xf8\x0a\xeb\x81\xa1\xff\x43\x8c\xa1\x1e\x80\xdf\x56\xe1\x50\x15\xd8\x3e\x5f\x28\xf6\x43\xca\x35\x5c\x6f\xf9\xe1\x3d\x0c\x7f\xca\x1a\x21\x8d\x2d\x2b\x23\x39\x3e\x75\x03\x2f\xe3\x59\x96\x96\x71\xba\x84\xde\x55\x5c\xce\xac\x90\x11\xb4\xa9\x4f\x48\xe8\x3d\x65\x7b\x04\xfc\xba\x41\xff\x58\x41\x1e\xc2\x9e\xa7\x74\x8c\x23\x20\xd5\xb6\xd9\x88\xb6\x58\x4d\x2d\xa5\x92\x41\x0d\x1a\x31\xf7\x6d\xe6\xd4\xac\xe6\x38\x77\xbc\xd4\x00\x4f\xc3\x79\xfc\x52\xb6\x06\x3e\xe9\x46\x2a\x7c\x4e\x17\xec\x66\xf9\x98\xa0\x3e\xe4\xfc\xab\xa9\x45\x5c\x1d\x62\xfa\x11\x53\x8b\xc8\x49\x8c\x9c\x6b\x99\x98\x51\x8e\x41\xf2\xc1\x17\x83\xad\x7f\x87\x4e\xf1\xc5\x73\x62\xdc\x1b\xfa\xe7\xe7\xaf\x19\xd7\x16\xd2\xa4\x78\x83\x85\x82\xd4\xc7\x60\x98\x5a\x6b\x6b\xeb\x1b\xa2\x03\x8d\x43\x47\x9f\x28\xd9\xa6\x7a\x41\x4d\x00\x68\x68\xa9\x99\xae\x06\xde\x8d\xbc\x28\x18\x87\xf5\xc9\x08\x88\xc2\x9a\x02\xe8\xb0\x1c\xc7\xfb\x9b\x0c\xa6\x2c\x10\x8b\x45\x68\x62\xe3\x70\x39\xc4\x7a\xd5\x07\x75\x24\x9e\x8b\x24\xcb\x21\x5c\xa4\xc2\x6d\x32\x46\xba\xdd\x44\xd4\x68\xaf\xed\x56\xe2\x38\x0a\xdf\x44\xf0\x38\x23\x5c\x0c\xc9\xd2\xad\x8f\x85\x83\x94\x4a\xcb\x59\x76\xad\x12\x4a\x37\xa7\x06\x1a\x22\xdb\xa2\x8e\x3f\xcf\x0e\xf5\x22\x9b\x7a\x71\x5a\x1f\x04\xcb\x2a\x5b\x8f\xd7\x60\x0c\xd6\x76\xa1\x55\x4a\xfe\x23\x17\x1d\x13\xd8\x07\x07\xe0\x70\x7d\x30\x0a\x87\xdf\xc1\xb6\x7b\x8e\x32\x84\x53\x8c\x08\xd4\x90\x06\x44\x44\x03\x53\x2a\xd9\x9b\x24\xd1\x3a\x49\x19\x83\x53\x86\xad\xb2\x6d\xc2\xfd\x64\x85\x21\x5a\xe6\xb1\x0f\xfc\xdf\x96\x70\x49\x42\xb5\x4b\x5f\x3b\x74\xf3\x54\x54\x72\x95\xa9\xa6\xc0\xc7\xea\x21\x3d\xdf\xd6\xf7\x36\x18\x66\x6a\x85\xa7\x29\x16\x80\xf4\xef\x71\x75\x61\x04\xc2\x9a\x80\xf2\x97\x61\xee\x41\x50\x82\x1c\x84\x77\x6c\x38\x34\x04\xf7\x05\x94\x03\xf9\x88\x15\x72\x42\xa6\xc4\x49\xc8\xa4\xb3\x32\x7c\x09\x42\xa6\x50\xb0\x32\x50\x90\x21\xd4\xd1\x02\x5f\x69\xb5\x02\xd9\x20\x94\x10\xca\x97\x4a\xb3\xc6\x83\x61\x3e\x02\xd1\xa6\x0c\x4d\x26\x02\x8d\xbf\x5a\x81\x85\xce\xd8\x14\x39\xc8\x1f\x16\x43\x38\x1a\x44\x94\xfc\x61\xa1\x92\x3f\xc8\x3f\xc1\x42\x27\x7f\x58\x38\xc9\x1f\x16\x9f\x3e\x2d\x74\xf2\x87\x85\x4a\xfe\xb0\x18\x8c\x9b\x33\x36\x65\x60\xc9\x19\x9b\x16\x01\x98\x4b\xe4\x0f\x0b\x8d\x9a\x61\x41\xc9\x1f\x94\xeb\x0f\x17\xe6\xe0\xcd\x39\xf9\xc3\xa2\x9a\xfc\x41\xff\x82\x7d\xfe\xa1\x2a\x2e\x50\xf3\x08\xee\x48\x32\x58\x80\x90\x78\xe8\x38\x5f\x13\x58\x48\xce\xac\xb8\x92\xb1\xa9\x00\xf1\x7a\x18\x0e\x59\xed\xbb\x2d\xde\xe7\xe4\xc9\xa4\x7f\x78\xd2\x4f\xed\xae\x1f\xee\xba\x61\xba\xa8\xc3\xc7\x62\xd5\x51\xa5\x14\x06\x11\x96\x04\xd4\xa8\x12\xdd\x16\x28\x9c\x35\xec\x8b\x9a\x15\x70\x06\x93\x85\xc5\x56\xc8\x2c\x82\xa6\x23\x67\x92\xe5\x73\xae\x69\x33\x07\x87\x34\x10\x1e\x5a\xe8\x9a\xb7\xa3\x4f\xf7\x5f\x47\x1d\x0c\x03\x66\x65\xa5\xec\x4a\xf9\xd0\x46\x2f\xda\xe5\xe7\x55\x9d\x6e\xd4\x50\xa5\xbb\x5a\x8a\x07\xc6\xe6\x47\x8d\xc4\x07\x97\x6e\x7d\x9d\xba\xaf\xe6\x8d\xf0\xd0\x00\x9a\x04\xb0\xa9\x0d\xc3\x17\x67\x38\x55\x6f\x3d\xe0\x87\x59\xde\x68\x05\x33\xb1\x29\xcb\xa6\xab\xfe\xac\x37\x9a\x1e\xd5\x7c\x03\x43\xd2\x76\x38\x70\x37\x5f\x7d\xf7\xa4\xc9\xbb\x1b\x62\x81\x34\xc1\x96\xe4\xd1\x5e\x57\x30\xe7\x5e\x79\x46\x8d\xab\xac\xed\x33\xeb\xda\x2e\x60\x98\x8f\x67\x4f\x53\xf1\xe0\x82\x23\xb7\xda\xbc\x91\x24\xe0\x8b\x30\x50\x37\x0d\xe3\xa6\x91\x27\xc7\x5a\x30\x89\x7a\xd8\xb3\x2d\x08\x19\xd8\xbe\x6f\x0b\xc5\x76\x01\x65\xd6\xc9\x6d\xdf\x8e\xb2\xd4\x82\xb2\xe9\xd6\x68\x99\x82\x5a\xcd\x2d\x5a\xa9\xbf\x66\x79\x23\x35\xd2\xd8\xa0\xbe\x5e\xe8\xca\xb2\x4c\x60\xdd\x98\x0b\x03\xb5\x0a\xd7\x16\x70\xbe\x30\x20\x6d\xe9\x60\x02\x2e\xc0\x0c\x5c\x82\x6b\x30\x05\xaf\xc1\x7b\xf0\x06\x5c\x81\xa7\x82\x51\xec\xc3\x1f\x89\x51\xec\xe3\x5f\x8c\x62\x7f\x76\x46\x31\xa2\xc5\xfd\x5a\xad\xc5\xbd\xdd\xbb\xfe\xfd\xc9\xd9\xc7\x5f\x1c\x31\x84\x3c\x38\x3c\x8b\x60\x52\x1d\x43\x68\x66\xb8\x10\xd8\x2e\x92\xeb\x68\x6c\xd5\x76\x9b\x14\x7a\x47\x4e\x91\xb4\xbf\xd6\x43\x27\x63\x0e\x8a\x40\x35\x33\xbc\xec\x7d\x66\xf8\x0f\xcb\xb0\x4d\x2f\xb1\xc4\x1a\xe9\x4e\x9e\x2d\x4b\x8a\x4c\x8e\xbe\x88\x7f\x72\x1b\x97\x78\x8c\x85\xbc\xd1\xc7\x98\x63\x33\x35\x9f\x2c\xf3\x30\x2d\x34\x67\x6b\x5f\xb1\x74\xc2\xcb\x38\x5b\x16\xe7\x6a\x11\xc0\xf7\x2a\x8a\x57\x11\xd6\xba\x16\x75\x05\xbd\x16\x32\x80\x22\xb2\xef\x12\x1b\xa1\x40\x1d\xb4\xf9\x1e\x0f\x9a\x14\x45\x87\x5e\x03\xd3\x56\xca\x3b\x24\xd1\xd4\xac\x0b\x60\x1a\x89\x56\x89\xcb\x4f\x55\x70\x6e\x1b\xf0\xc0\xbe\x12\xe8\xa2\x3b\x94\xf5\x4e\x24\xa3\x28\xd5\x9f\x06\x3b\x09\x83\xb4\xfa\x86\x74\x83\xbe\xda\x1c\xf4\xa2\x2a\x5f\x89\xdb\x91\x26\x2c\xb3\x89\x40\x9d\x32\xeb\x4f\xd3\x48\x50\x79\x27\xe3\xdb\x29\x31\xbe\x9c\x29\xc6\x16\x96\x28\x84\x66\xce\x00\xae\xa8\x4d\x48\x07\x50\xc5\x77\x07\x03\xb8\x5a\x25\xb0\xf4\x5e\xb9\x29\xb8\x73\xba\x70\x02\xe0\x64\x23\x44\xdd\x27\x73\x0f\x72\xeb\x50\xa2\x5f\x28\xf4\x0b\xb1\x7e\x21\xd3\x2f\x2c\xf5\x0b\x63\x76\x81\x58\xe0\x40\xa4\xfd\x9e\x6b\xbf\x17\xda\xef\x89\xf6\xfb\x42\xfb\x3d\x6b\xc0\x31\x2e\xf3\x8a\x7f\x60\xfc\x88\x4c\xd2\x5c\x52\x36\x44\xf9\x06\x3a\xf9\x5d\x6b\xd7\x39\xa8\xe8\xd4\xf6\x02\xe1\xd6\x7a\xad\xdd\xa2\xab\xe0\xbd\x76\x59\x5b\x14\x6f\xf4\x2f\xa5\xd1\x3b\x49\x36\x5d\xd9\xbe\xe7\x83\xa7\xe4\xf2\x6a\x0a\x4b\x0f\xaf\xf7\x96\x3a\x75\x30\xdf\x20\xbe\xf1\xe9\xd3\xcd\x0a\x3f\x86\x66\x93\xed\x29\x74\x7d\x55\xc0\xf2\xf1\x62\xf1\x16\x15\x8e\x66\x61\x3c\x69\x71\xcf\xfe\xdd\xc1\x00\x7e\xfa\xe4\x2b\x3e\x8c\x76\x04\x2f\x96\x53\x1f\x4d\x4e\x0d\x0f\x8e\x41\x16\x67\x57\x29\xcc\x9f\xd0\x2c\xf1\x0e\x4b\x17\xa7\xf8\x69\x77\x4a\x09\x35\x76\x9c\xa5\x65\x18\xa7\x45\x8b\x82\xb4\xb2\xef\x06\xf7\xee\x95\x16\x70\x59\xed\x21\x50\x76\x90\x3c\x2f\x60\xd9\xc1\x5d\x33\x80\x80\xe1\x1c\x3f\x5e\x2c\x70\x1f\xb7\x48\xf8\x49\xb0\x5a\xc9\x17\xd9\x12\xac\x55\x61\xfe\x0d\x3c\xa6\x03\xb8\xd2\x05\x2f\xd1\x45\x8b\xab\xb8\x1c\xcf\x30\x30\x5d\x58\x40\x3e\x69\x4e\xe5\x0f\x0d\x4a\xe0\x87\x8b\x45\x12\x53\xc5\x9d\x41\x8c\xf3\xb1\xb8\x77\xaf\x65\xb6\x40\x6a\xaf\xb8\x47\x86\x8b\x10\x3e\xe2\x79\xdb\x19\x2f\xf3\x1c\xa6\xe5\x5b\x36\x29\x83\xe0\xce\x45\x0e\xc3\x0f\x77\x70\x7d\xc8\xc6\x70\x2a\x70\xf5\xf8\x9b\xec\x9b\xf8\x47\xe7\x3d\x7e\x10\xc3\xee\x29\x9b\x41\x15\xe7\xa5\x32\x6d\x69\xde\xa1\x72\xad\x15\xac\x8a\x32\xcc\xcb\x17\x59\x18\xb5\xf4\x59\x43\xd7\x23\xa6\x09\x7d\x8d\xff\x6c\xc1\x4e\x99\xe1\xfe\x08\x3e\x7d\x52\x3a\x0c\xa3\x65\x2b\x3d\x86\xba\x90\x8e\xa6\xb2\xb8\x28\xd6\x37\xfa\x13\x88\x3f\x71\x5a\xe6\x99\xd1\xa5\x4a\x65\xd5\x5a\x95\x52\x23\x38\x50\x1f\xe1\x13\xe8\x4c\xc9\xf9\x68\x59\xc2\x08\x43\x9e\xb7\xe4\xb1\xc6\x98\xcc\x4c\x15\xfc\x09\x69\x7e\x2d\x69\x7b\x6d\x47\xcb\x9c\x34\x29\xb8\x83\x8d\x99\x61\x5e\xc0\x67\x49\x16\x96\x2d\x18\x38\xba\x70\xdd\xd4\xa9\x98\x39\x2b\x98\x46\xac\xf3\x45\x6f\x74\xd8\xde\xe3\x4b\xeb\xae\xd5\xb4\x2f\xc9\x02\x0b\xd6\xce\xec\x66\x93\x77\x45\xb5\x4a\x96\x51\xca\xc6\x23\x8c\xd8\x24\x51\xcb\x97\x99\x6d\x5d\x95\x57\x6b\x0c\xe4\xef\x67\x29\xdd\x27\xff\x15\x0b\xce\x43\xf6\x26\x99\xb8\x8e\x17\x9e\xc4\x91\xf2\x3c\xed\xe9\x60\x25\x34\x63\xbd\x0d\x44\x9c\x59\x9b\xa1\x7d\x64\x32\x69\x5a\x2d\xfe\x86\xb3\x5e\x2b\x70\x39\xf8\xd8\x9a\x29\xcc\xaf\x5c\xf9\x4e\xb7\x25\x69\xbd\xb6\x95\x8d\x83\x10\xb6\xe6\x95\x9d\xea\x45\x0b\xb4\xef\xad\xb9\x65\x5f\x5b\xab\x4d\xf6\xf6\x61\xb2\x6d\xe9\xef\xf5\xd2\xd9\x59\xa5\xd8\xb6\xe4\x37\x7a\xc9\x9a\x86\x31\x8c\xb7\xfd\xc2\x95\xd1\xeb\xaa\x92\x32\xcc\xb6\xfd\xc2\x53\x6b\xdf\xfb\x60\xb8\xdc\xb6\x64\xad\x5c\xe3\xc4\x04\x86\xe3\x11\x73\xca\x4d\x61\xf9\xfa\x2a\x65\x02\xfb\x09\x2c\xc6\x79\xbc\x40\x9a\x64\x75\x11\x01\x90\xee\x1b\x5f\x54\xcf\x53\x60\x18\x35\xfc\x9c\xfa\x7e\xf5\xb7\xb8\x44\xf0\xc1\x70\xde\xf0\x3b\xe2\xdd\xea\x6f\x50\x21\xe2\x83\xe1\xa2\xe1\x17\xd8\x9b\xd5\xe5\x33\x53\x02\x18\x4e\x1a\x96\xcf\xde\xac\x2e\x5f\xb2\x56\x80\xe1\x45\xc3\x4f\x48\x2f\x6b\x5f\x99\xc9\x46\xcf\x57\x95\x1e\xc4\x5f\xc1\xab\xf5\x1e\xc4\x45\x96\xc4\xe3\xeb\xf6\x24\xcb\x2d\xf0\x86\x8e\xcc\x33\xec\x00\xe3\xbf\xe9\x6b\x5f\x0b\xe7\xff\x59\xff\x5f\xdf\x2e\x60\x7f\xdf\x6e\xa8\xc2\x09\x5a\xf8\xff\x28\x31\xb1\x9a\x3a\xa6\xfc\xc1\xca\xad\x4d\x0c\x70\x62\x01\x40\xe8\x01\x7f\x12\xc3\x24\xa2\x89\x23\xc4\x06\x25\x75\xb2\x6f\x89\x40\x95\x63\xe2\xe4\x60\x38\x6a\x2e\x3a\x1e\x81\xa1\x8f\xc4\x0f\xf4\x48\x41\x24\x43\x55\x26\x5b\xec\xc9\x81\xf3\xa2\x6c\x29\x04\xec\x18\xdc\x77\x32\x9b\x9d\x58\xa0\xec\x79\x67\xd4\x04\xb3\xaf\xef\x32\xf2\x4d\xc8\x2e\x3d\x3e\xed\x0d\x6f\x66\x4f\xeb\x1e\xca\x8f\xed\x65\xb9\x17\x47\x30\x2d\xe3\xf2\xfa\xa1\x94\x5e\x53\x1d\x20\x04\x14\x60\x3b\x5c\xd4\x06\x5c\x6e\xac\xfe\x0b\x6b\xd5\x9f\x93\x5a\xc5\xb0\xf0\xc2\x1c\x7a\xb4\x54\x32\x70\xe8\x22\x0e\xea\x95\x77\x1a\x7c\x60\x2e\x3a\xde\xbb\x19\xbc\xf6\x8a\xf0\x12\x7a\xd7\xd9\xd2\x2b\xb2\x39\xf4\xca\x78\x0e\xbd\x30\x8d\x3c\x38\x99\x64\x79\x89\x6e\xfc\xcf\xdf\x72\xe8\x2d\x8b\x38\x9d\x7a\x67\x78\x69\x7a\x93\x2c\x47\x7f\x22\x59\xe1\x4d\x60\x58\x2e\x73\x58\x74\xdc\x3d\xe0\xe0\x1c\x10\x90\x6b\x79\x18\xc5\xd9\x34\xcf\x96\x0b\x23\xfa\x90\xf5\x1b\x06\xba\xc5\x99\x0c\xc0\x7f\x87\x03\xca\xd0\x90\xcc\xc2\xa2\xad\xe5\x37\x38\x22\xcc\x7b\x66\xc2\x98\x46\x40\xba\x19\x19\xb6\x12\x58\x2e\x85\x96\x53\xbf\xf3\x9a\x38\x48\x39\xe6\xb2\xcf\x23\x0b\x8f\xc1\x50\xb6\xeb\xda\xa1\xda\x44\x09\xdc\x63\xde\x3b\x04\xfb\x40\xcb\x03\x22\xac\x19\x43\xb6\xb4\x46\x2a\xaf\x61\x9f\x7f\x4f\x5a\x7b\x14\x53\x8f\x53\xda\x28\x49\x89\x6c\x2c\x94\xb5\x6a\x2b\x23\x55\xd9\x13\x39\xff\xa6\x05\x5a\x83\x5e\x92\x2d\xc1\xfd\x7d\x2e\x65\x24\x21\x69\x89\x2e\x74\xa7\x03\x71\x40\x3c\x3c\xbb\x7c\x27\xfe\x60\xcd\x98\xee\x63\x35\xa4\x7b\xed\xf3\xeb\x85\xd1\xc6\xe3\x76\x00\xfa\x1c\x11\xf0\x00\xf8\x14\x32\xd2\xd2\xc0\x26\x3e\x5e\x63\x99\x8a\x29\x7c\xc8\x61\x18\x70\x94\x49\x09\x3f\x96\xf6\x2d\xa4\x7f\xdf\xb2\x5a\x45\x1c\xaf\xbc\xcf\x90\x67\xe2\xe2\x4d\x1e\x17\x65\x9c\x42\x33\xec\xda\xb6\xba\xd7\x80\x39\x2a\x6b\xa9\xcf\x3e\xed\x46\x20\xd3\x06\xa1\x8f\xb9\xfd\x95\x74\x06\x36\x36\x3d\x0e\x0e\xe3\x0f\xd1\xcd\x91\xcf\x26\x98\x1f\x2e\xcb\x6c\x92\x8d\x97\x18\xe9\x86\xff\xcd\x67\x3e\x0b\xda\x31\x27\xbe\x4e\xcb\xc3\xc6\x13\xf7\x6f\xc5\x74\x65\x55\xa7\x38\xfc\x36\x01\xf3\x32\xfc\x18\xcf\x97\x73\xaf\xd7\x3f\xf1\xc6\xb3\x30\x0f\xc7\x68\xa8\x3b\xde\xcb\xf0\xda\xcb\xd2\xe4\xda\x8b\xd3\x71\xb2\x8c\xa0\x97\xc0\x12\xdd\xf1\x5a\xcb\xc5\x02\xe6\xe3\xb0\xc0\xc2\x7f\x2f\xcb\xbd\x24\xbb\x22\x17\x02\x76\x25\x5d\x22\x9d\x08\x95\x42\x93\x00\x09\xfa\x59\xc7\x8d\xeb\xa6\x6f\x7f\xbb\x9f\x25\x9b\x27\xff\x14\x65\x9e\xa5\x53\x45\xf2\x5a\x6a\x04\x7c\x11\x0d\x65\x88\xe3\xea\x00\x0b\x37\xa0\x9d\xb2\xb8\x0e\x70\x70\x97\x80\xf8\xec\x02\x69\x95\xb9\xb6\xb3\x23\x3d\x57\xdc\x26\x96\x7d\xea\x22\x69\x33\xad\x65\xc3\x38\x28\x2d\x68\x7c\x9c\x45\xb0\x0d\xa3\xb8\x44\xb5\xa6\x41\x37\x39\x0c\x23\x34\xaf\xe4\xb8\xb2\xe2\x3a\x2d\xc3\x8f\x5a\xce\xab\x25\x86\x0c\x93\xe8\xdb\xa5\xdf\xdb\x65\x02\x0b\x2e\xfa\x80\x3f\x1b\x27\x95\x2b\xa9\x56\x31\xb6\x6c\x49\x3d\x08\x8d\xf2\xcf\x35\x0e\x43\x3b\xb2\x25\xd6\x1d\x6d\x1f\x87\x26\xef\x54\xb8\x35\x7c\x22\x85\x54\xd2\x1c\x31\x21\x25\x27\x3e\x9f\xbd\x7e\x75\xfe\xe3\x8b\xf7\x4f\x5e\x9f\x9d\xbf\xff\xf1\xed\x0b\xd1\x91\x7b\xd3\x65\x1c\xc1\x62\x2f\x1c\x27\x9d\x59\x39\x4f\xfe\xbf\x7c\x99\xc0\x76\xb1\x80\xe3\x78\xc2\x6c\x9c\x5c\xc0\xe5\xb8\x4b\x66\x30\x59\x78\x69\x96\x2d\x60\x0a\x73\x2f\xcd\x72\x38\x81\x79\xce\x71\x37\x7d\x86\xe4\xe6\xbf\xbf\x48\xc2\xf4\x83\x3c\x75\x5b\xdf\x9f\xbd\xf0\x9e\x61\xfe\xcc\xa0\x41\xae\x43\x3d\x82\x7f\xb9\x97\xc5\xb0\xd5\x17\x0e\x27\xec\xc0\xb9\xa7\x2f\x97\x3d\x71\x38\x63\x39\xdf\x1c\x74\x43\xce\xc4\xe5\xf0\x59\x14\x52\x83\xec\x22\xfb\x23\x63\x37\xe1\xd5\xda\x34\xee\xea\x68\x6d\x7c\x57\x8d\x1e\x73\xcb\x8b\x14\xad\xec\xbf\x84\xc5\x57\x15\x16\x87\x7f\x09\x8b\x2f\x20\x2c\x0e\xb7\x16\x16\xca\x5a\xb1\x48\x0a\x81\x1d\x2c\x43\x34\x28\xf2\x80\xc9\x89\xed\xe5\xc2\x61\x73\xb9\x50\x6f\xa9\x8a\x65\x89\xbd\xd5\xf2\x8a\x25\xe7\x2c\xbc\x60\x3f\xc0\xeb\xe5\xc2\x95\xb6\xa9\x2c\x43\xdb\x69\x1e\x4f\x51\x12\x28\x24\xeb\xfa\xf5\x56\x39\xeb\x52\x5e\xc8\xe7\x5f\xf0\x68\x99\x6f\xb9\xc8\x0f\xd6\x2f\xf2\xbf\x56\xf7\xda\x59\x7f\xe0\x66\xc9\x74\x4e\xb2\xcf\x78\x5e\x20\x9f\xd8\xe4\xc0\xb0\xe9\x21\x7d\xdd\x41\xeb\xf3\xee\xf4\x2a\xe4\x45\x1d\xac\x2b\x2d\xef\xd9\xdf\xfb\xbf\xf8\x7f\xe8\xd5\x31\x4c\x71\x3b\x8d\xe5\x67\xda\x89\xd8\xe2\xdd\x5f\x03\x2c\x65\x47\x7b\x32\x8f\x5f\xec\xc0\x25\x25\xcf\xb8\xc8\x2f\x74\xfb\xc2\x13\x5e\x73\xeb\x5c\xae\x4a\x53\x60\x19\x07\x3c\x1b\xe1\x59\x0c\x93\xc8\x9e\xa8\xf0\x46\x87\x10\x3a\x33\xfa\x13\x27\xd7\xd0\x23\xab\xd2\x39\x80\x5f\xa4\x0f\x1e\x48\x73\x42\xae\x3f\xc5\xb8\x15\x99\xbf\xd8\xcc\xea\x85\x9e\x18\x1e\x2f\x55\x8a\xb2\x89\x58\xb5\x4b\xd2\x0d\x61\xef\x7d\x6e\x0a\xdd\x5f\x9f\xf4\xb0\xdf\x3c\x4b\xb7\x89\x9e\xac\x77\xdb\xbe\x99\x3d\xbe\x79\x3a\xb9\x8b\x3b\x82\x58\x00\xb2\xe9\x94\x40\x60\xd7\x9e\x90\x3f\x61\x50\x26\x75\x41\xb9\x19\x57\xaa\x8c\xd4\x2e\x23\xa5\x6c\x08\x8b\x8b\xf3\x71\xb6\x80\xd1\xa8\xc2\x68\x6c\x7a\x98\x0e\x49\x66\x1a\xed\x39\xf6\x42\x03\x83\xb1\xcb\x6e\x86\x8b\xba\xc8\x3e\xd6\xb1\x9d\xe9\x1d\xf7\x38\x49\xdc\x5d\x55\xc9\x49\xe0\x34\x02\x69\x9b\x51\xbf\xf1\xac\xf8\x43\x48\x55\x4d\xb0\x2a\xb3\x98\x0d\x48\x5b\xb8\x76\x84\xcf\x47\x5c\xdb\xd0\x5f\xb3\xbf\xa5\x29\xb0\x6a\x2f\x30\xa6\x92\x8b\x7b\xa4\x6a\x79\x08\x51\x58\x88\x15\x42\x3c\x2e\x7d\xdd\xc6\x5c\xbd\x70\x18\xc2\x5f\x5f\x39\x3c\xe8\x32\x5c\xc2\x76\xf9\xe2\xeb\xaa\xd2\x9f\xa5\xb5\x76\x2d\x1d\x88\x3b\xb1\xad\xf6\xe4\x70\xf6\x4c\x73\x74\x15\x97\x8f\xfc\x40\xde\x71\x29\x9e\xe9\x1f\x7b\x56\xf6\x98\x9a\xcf\x27\xa3\x34\x8d\xbe\xe2\xfc\xe9\x6d\x3a\x6d\xd6\x25\x2f\x5a\x0a\x71\x43\x33\xb9\x75\xf2\x26\x9a\x77\x73\x15\xa1\x6a\x46\x58\x9c\x04\x95\xfa\x2a\x0d\xfd\x89\xb3\xd4\x6b\xbd\xc6\xff\x86\x89\xed\x1c\xc6\x0a\x40\xe5\x87\x39\x0c\x5d\x73\x49\x94\xa7\xce\x25\x72\x28\x97\x6e\x0b\x41\xd7\xd0\x23\x66\xcc\x97\xba\xdb\x6f\x13\x92\x50\x9f\x1a\x35\x68\xa6\xbc\x20\x04\x92\x24\x08\xf0\x27\x71\x1a\xb5\x2f\xae\x09\x2c\x0b\xcb\x5b\x65\x21\xfe\x1c\x2e\x85\xc0\xb3\xd8\x01\x55\x98\xc2\xe4\xab\x40\xad\xf8\xf8\x88\x61\x5e\xe6\xe1\x82\x7c\x01\x87\x0f\xc1\xf4\x52\xce\xe4\xa9\x83\xf4\xc2\x2d\xd4\xa4\x27\x0b\x58\xb6\x09\x6e\x4b\x46\x47\x5b\x8a\x39\xc2\x0e\xcb\x24\xc9\xae\x9e\xb3\x83\x20\xf0\xc7\x21\x2a\x45\x26\xc3\xf2\xc3\x34\x6a\x92\x28\x64\x04\x77\x29\xc9\xb7\x79\x65\xf2\x6d\x0a\x78\xb6\x8b\x20\x48\xb8\x5e\xc0\x53\x1a\xcd\xe4\x83\x14\x7f\x98\xfd\x52\x6a\x7f\x7a\xb7\x0b\xb0\x95\x0a\x83\x31\x9d\x0e\xb5\x08\x28\xd6\xf7\xa7\x77\x7b\x38\x96\xd2\x20\xf5\x79\x6f\x03\x86\x31\x89\xfc\xd9\x08\x92\x3b\x53\x71\xa7\x84\xf3\x8e\x24\x5c\x3b\x14\x43\x31\x78\xd0\xa5\x31\xcc\xbc\xdf\x07\xc3\x1b\xd2\x0e\x1a\x73\x04\xd8\x9d\x53\xdf\x5f\x01\x7a\xef\x9c\x78\x23\x3c\x31\x38\xe2\x29\xc3\xb1\xc7\xdf\x7a\x95\x45\xf6\x57\xd4\x13\xff\x6a\x24\x73\x3d\xe1\xa9\xa2\x52\x3d\xe5\xd7\xee\x4e\x59\x8d\xc3\x72\x3c\x6b\x95\x2c\xd1\x81\xc6\xa0\xb3\xae\xb9\x43\x53\x45\xca\x0e\x8d\xc8\xc0\x81\xdf\x24\x6d\x84\x0c\x89\x74\x70\x38\x85\x0f\x5b\x7a\x1f\xb3\x18\x5f\x79\xff\xd6\xba\xbb\x83\x7a\x1b\x28\x3b\x7c\xa0\x0f\x96\xe5\x19\x2c\x56\x82\xe0\xb4\xb5\xfe\x49\x25\xd2\x5e\xba\x63\x4e\x09\x6b\x75\xc9\x87\x2a\xa6\xcf\x5d\xc8\xf2\x57\xe8\x84\x3f\xa5\x9c\x57\xd8\x9c\xd4\x2a\x83\x15\xe3\xcd\xc2\xa3\xc3\x59\xb0\xf0\x55\x34\xa5\x57\xc1\x4a\x67\x9e\xca\xeb\x46\x5e\x12\x13\x83\x8d\x5b\xd8\x11\x7d\x39\x9e\xc5\x48\x20\xa8\xaf\x7d\xad\xe8\xcb\xb3\xe5\x77\x57\xaf\xfe\x79\xf6\xbb\x3d\xfa\x92\x81\xf1\x53\x66\x52\xf8\x11\x8e\x97\x04\xcf\x3f\x4c\xc7\xd8\x7c\x39\x87\x45\x11\x62\x63\x05\x8e\x89\xcb\x4d\x74\x7f\xe5\x0f\x0e\xf3\x4f\x79\xa8\x7c\x83\x64\xde\x1d\xb0\x79\x82\x04\xb1\xdc\x75\x18\x48\x14\x03\x9e\x9a\x68\x15\x39\x5c\x64\x02\xe0\x5f\xf5\x30\x72\xc7\x23\x25\x52\xd1\xc1\x5c\x28\xda\x21\xf5\x41\x1e\x10\xc3\x78\xff\x50\xf5\x45\x9e\xd0\x9f\x18\x28\x9c\x8a\x1e\xff\x1c\x9b\x98\x70\x48\x1f\xbb\x46\xf6\xf7\xda\x76\x1b\xbc\x23\x9f\x80\xde\xbe\x6e\x6f\xf3\xd7\x13\x0e\x31\x92\xd6\xda\x26\xa2\xc7\x8b\x45\x72\xed\x85\xa9\x07\x3f\xe2\x90\x90\x29\xad\x75\x1d\x4c\xdd\x5a\x35\x1a\xe7\xd0\x0c\x41\xad\x83\xb3\x72\x64\x8b\x68\xb5\xb2\x3a\xd5\x70\xa0\x3a\xfa\xb4\x99\x6b\x07\x17\xd2\x93\x34\xc7\xbe\xd0\x1c\x05\x6b\x2c\x05\xf8\x3b\xb1\x01\xfc\x1d\x4b\x09\xcd\x6c\xfa\x13\x26\x49\x23\xfb\xba\x41\x58\xd6\x19\xee\x62\x2f\x85\x57\x52\x70\xf1\x3a\xd3\x8b\x2f\xc3\xa9\xd2\x71\x54\x58\x94\x09\x2e\x52\x0f\xf8\x29\xbc\x6a\xb3\x72\xa9\xb1\x35\xa5\x4c\x99\x8f\x74\x8a\xcc\x9e\xa4\x7c\x5a\x29\x32\x0f\x2d\xee\x1f\xff\x15\xbc\xe2\xf1\xc2\x35\x3c\x41\x56\xf4\xd4\x1c\x4e\x74\xe2\x69\xc3\xbb\x26\x55\x8e\xf6\x3e\x03\x02\xb6\xd8\xb6\xbd\x7a\x14\x5f\x9b\xf2\xf7\xb2\xc1\x9c\xf5\xe5\xa1\x94\x7b\xc2\x71\x46\xab\x05\x83\x59\xa3\xe2\x9b\x11\xe0\x72\x1b\xbc\xd0\x05\x59\xc9\xe4\x87\x33\xaa\x83\x88\x61\xac\x62\x52\x5d\xec\xb9\x70\x98\x10\x5f\xee\x7d\x21\x50\x65\xf9\x4a\xc5\x2d\x66\xd0\x70\x8d\xd3\xae\x7a\x85\x31\xd2\x6e\x3c\x9e\x12\x5d\x34\x39\xe0\xab\x22\xa0\x2f\x63\x32\x14\xe1\x25\xb7\x3d\x91\x40\x97\x43\x25\x82\xb7\x67\x5f\x59\x78\xd2\xf6\x4d\x12\x0f\x69\x7a\x33\xd6\x0b\xd3\x74\xc2\xce\x8d\x66\xf2\xc2\xb1\x66\x8c\x21\xb5\xc2\xf1\x82\xe7\xe1\x25\x43\x6e\x17\x17\xa5\x20\x42\xf9\xf2\xf3\x14\x7b\xec\xfc\x35\xc9\x0c\xd8\x94\x51\x2c\x2f\xe6\xb1\x3b\x2c\xef\xd8\x51\x8b\x4d\x22\xc9\x1d\x36\x55\x06\x2d\xef\x21\x05\xa7\x84\xf9\x3c\x4e\x29\xa9\x4e\xcd\xe0\x5f\xe0\x0a\x59\x77\x48\xe9\x30\x8d\xbc\x10\x6d\xba\x8e\x05\x5e\x09\x5f\x4b\xf6\x1f\x69\x8a\x59\xb3\x50\x5c\xdd\x66\x1d\x88\x3e\x89\xe9\xd6\x58\x52\x2c\xe1\xe4\x9f\x65\x32\x4a\xdd\x43\xd4\xc9\xba\x52\xaf\xd7\xb7\xac\xf0\x6a\xe4\xf0\x4d\x21\xbc\x1a\xa9\x3b\x0c\x87\xac\xbe\xf8\x10\xce\x39\x8c\x80\x2c\x0c\xbb\x6e\xd8\x3b\x8a\x5a\xdc\xa8\x62\x78\x08\x9a\xd5\xea\x04\xf8\x65\x78\xb1\x4c\xc2\xbc\x1d\xc1\x32\x8c\x93\x42\xb8\x5b\x25\x94\x47\x49\x57\xae\xa9\x04\x90\x74\x28\xb2\x20\xde\xc5\x73\x78\x1a\xc1\x82\xe5\x77\x9d\x86\xe8\x4f\x22\x09\x37\xf1\x78\x7e\xb6\x2d\x9b\xdb\xf0\x66\xca\x86\xed\x0a\x89\xaf\xb5\x25\xd5\xa8\x6c\x9e\x5d\x6d\x5c\x53\x66\x67\x16\xe9\x3f\x7d\x06\x90\xde\x1b\xad\xc9\xf0\x61\xaa\x6a\x0f\x0c\xfd\xe7\x4f\xac\x42\xb7\x56\xe0\xa2\x67\x8d\xa7\x91\xbd\xec\xd1\xb8\x13\x8e\x93\xa2\xc3\xf2\xab\x3a\x30\x8a\x19\xb2\x93\xfa\xf1\x91\x66\xc7\x76\xf9\x41\x9a\x46\x6c\x99\x75\xdc\xb7\x7d\x60\xc3\x2f\xaf\x61\x2e\xd8\xed\x74\x61\x0b\xb5\xf1\x79\x4b\xde\xfd\xef\x4b\x63\xbf\xa5\xb5\x5d\xa9\x78\x4d\x02\x37\x4e\x14\xa3\xc5\x0b\xac\x21\x70\x23\x3a\xe9\xde\x37\x37\x71\xb4\xf2\x6d\x07\x0e\x17\x7d\x1b\xf0\xe3\xc8\xa7\x7b\xe6\x09\xf5\x04\x32\x8e\x62\x06\xc6\xca\x27\xe2\xa8\x6a\xab\x33\xfc\x15\xeb\xdc\xbf\xe8\x30\xf9\x3b\x56\xc3\xd7\x9e\x4b\x25\xd7\x48\xad\xb1\xda\x65\xf4\xb1\xa4\x3c\x55\x65\xe1\xf1\x87\x14\x95\x4e\x18\xf2\x4e\x9d\xaa\x8d\xf4\x6e\x54\xf1\x01\x65\xb7\xd4\x03\x6e\xea\xe4\xa1\x39\x6f\x6c\x2e\x32\xb6\xea\x91\x62\x87\x5d\x22\x91\x94\xf8\x40\xa2\xf6\x55\xdc\xbb\x07\x7c\x62\x02\x6d\x1b\xd0\xce\x08\xbb\xed\x4a\x53\x51\x6e\xe8\x86\x6b\x28\xa8\x76\x9c\xaa\xe3\xd5\x0d\xeb\xd5\x63\xf1\xad\xd1\xbb\x4a\xd0\xbd\x61\x10\xd9\x3c\x00\x5e\xee\x19\xc6\xce\x72\x7f\xb7\xf1\xef\x5e\xdd\x28\xd9\xfe\x1f\x2d\x48\xd6\x6b\x16\x06\xef\xea\xeb\x4d\xa2\xe0\xed\xdd\xcc\xe7\xdb\xee\x92\x69\x14\xc3\x4a\xdf\x96\x4b\x53\xbf\x5f\xea\xc6\xd9\xde\xdf\x34\xc7\xe6\x2b\x6c\x72\x7f\xd4\x45\x7e\xf2\xd7\x22\xff\x62\x8b\xfc\xe4\x33\x2e\xf2\xcd\x92\x60\xfa\x46\x12\xcc\xc9\x67\x5c\xcf\x27\x5b\xe5\xc6\x6c\xb4\xc6\x78\x6a\x4c\xbd\xc5\xc6\x55\x1c\x35\x8f\xa5\xaf\x24\xb6\xd4\xf1\x4b\x6c\xb9\x2a\x8f\x77\x94\x95\xf2\xdf\xb7\x1c\x2d\xd3\xee\xb8\x8e\x1d\xaf\xb6\xde\x69\xcb\xf4\x90\x87\x90\xa7\xd4\xf7\x0f\xb6\xcf\x8c\x67\xf6\xe6\x4a\x5e\x4c\xea\x3a\x0f\x09\xda\x23\xf3\xc0\x91\x55\xc1\x1c\xec\x68\x78\x1f\xe7\x14\x5c\x66\x49\xff\xb8\x0a\xd3\xd2\x2b\x33\x8f\xa0\x04\x62\x84\x4d\xea\x05\xf4\x26\x79\x36\x27\x17\xca\xec\x03\x4c\x1f\x6e\xc6\x65\x59\xdb\x69\xb2\x59\xf1\x36\xb3\xb6\xec\x57\x85\x09\x24\xf6\x78\x62\xa8\x16\x0f\x59\x2c\xd5\x24\x6b\x99\xf4\x84\x12\x45\xda\x35\xed\xcd\x6f\xc9\x53\xcd\xa6\xe6\x91\x93\x73\xae\x9e\x71\x86\x3a\x89\xb7\xe8\x27\x27\x68\x91\xf1\x24\x63\xfe\x77\x3d\xe6\x1b\x41\x7d\x9f\x73\x60\xf6\x2d\x16\x7f\x32\xe5\xe9\xcc\xad\x1c\x89\x35\x75\x19\x73\xdf\x41\xad\xba\x1c\x34\xf4\x3e\xb8\x66\x83\xa0\xa0\xb3\x2f\xec\x5d\xd1\x9f\xea\x62\x6c\x23\xda\xf7\x1e\xe8\xd7\x21\x79\xae\xed\x2e\x59\x1f\x04\xca\x18\x9f\x78\xf8\x27\x89\xbf\x24\x24\xcb\xcf\x49\x58\x11\x0e\xd5\xac\x13\x88\x89\x83\x43\xe5\x83\x0d\x8e\xef\xe4\x67\x1e\x6a\xfb\x53\x03\x4c\x7f\xcd\xe2\x94\x59\xf8\xe4\x60\xd2\x59\x0e\x27\xed\x32\x53\xa3\x38\x71\xa1\xd4\x85\x6d\x75\x52\x0b\xe6\x3e\x1a\x12\xb5\x80\x39\x7d\x5e\x8a\x3a\xa2\x41\x47\x4a\xc4\x67\x91\xe5\x25\x09\x43\xa5\xd5\x24\x68\xc8\x34\xf0\xb5\x79\x2c\xa8\x1a\x37\xb6\x65\x3c\x28\xaa\xf0\xa9\x03\x09\x1e\x2e\xb2\x02\xe9\x67\xd7\xf4\xcb\x7e\xa0\x05\x8c\xaa\xc1\xa4\xb5\xc2\x47\x79\xe4\xd6\xa8\x7e\xd8\xe8\x1d\x25\x30\x92\x18\x90\xef\x30\x8c\xe0\xf7\x49\x5c\x94\x48\x41\x29\x3a\x61\x14\xb5\x20\xb8\x29\xc2\x4b\x78\x0a\x07\x0f\x28\x76\x71\x78\x09\x3b\x74\xac\x30\xb6\x3b\x46\xe8\x0e\x56\xab\x60\x05\xb0\x67\x52\x8d\xd4\xdc\x20\x74\xf5\x6e\x0f\x17\x35\xc9\x61\x31\x3b\xcb\x22\xf8\x14\x2b\xb5\xa7\x6a\x30\x1f\x2e\x38\xca\xe6\x1d\x3e\x9e\x2d\xbf\xa3\xe8\xc0\x65\xd0\x89\xe2\xe8\xf1\x62\x01\xc3\xbc\x15\xac\x00\x8e\x5c\x54\x2a\xa7\x00\x61\xe3\x20\xcb\x74\x00\x3b\xf8\xb9\x3b\xf1\xa4\xc5\x69\x49\x52\x72\xad\x08\xca\x59\x9e\x5d\x79\xe9\x1d\x1e\x59\xca\xee\x0c\xbb\x23\x4c\x02\x99\x0f\x58\x9e\x6d\x38\x80\x1d\xe2\x3c\x60\x01\xa7\x77\xbb\x24\xca\x14\x17\x19\x76\xf0\x64\x7b\x3d\x69\xf9\xcf\xc2\x38\x81\x11\xd2\x39\x30\x0c\xb5\xf7\xf8\xec\x85\x97\xe3\x42\x82\x53\xdb\xf3\x34\x20\xc0\xa3\xf3\x8a\xc5\x28\x05\xa7\xd6\x8f\x0b\x10\x72\x57\x39\x24\x3e\xe6\xd4\x7b\x4c\xff\x22\x78\x7c\xf8\xfc\x83\xcb\x24\x39\x24\xe1\x20\xec\x14\xcb\x8b\xa2\xcc\x6b\xbd\x29\x3e\x73\xea\x07\xdf\xf6\x82\x55\x7e\xef\x1e\x86\x8f\x7e\x8a\xe3\x47\x73\x80\x66\x8c\x88\xf1\x45\x2a\xb1\x39\x6f\x8c\x39\xd0\x82\x00\xb2\xb0\xdd\x45\x98\x0b\x94\xf8\x60\x93\x58\xd3\x45\x76\x09\xf3\xf6\x1c\xa6\x4b\x5b\xa0\xa9\x50\x3c\x8a\xaf\x16\x4a\x5a\xbc\x7c\xf2\x53\x31\x7d\x72\x6e\x0f\x25\xe5\x1e\x9e\x0f\xf0\x7a\x41\xf8\xfc\xf9\x9f\x67\x24\x4c\xc6\xc7\x01\x65\x48\x1d\x66\xed\x46\xd7\x16\x58\x76\xc3\x74\xe9\xe3\x90\x11\x1f\xf8\x34\x97\xb3\x2e\xca\x67\xaf\xab\xfb\x57\x88\x36\x41\x55\x73\x86\xf0\x29\x3a\x18\x3f\x40\x33\xa3\x0c\x32\x93\x13\x52\x4d\xf2\x20\x53\xf2\x3e\xc0\xeb\x8b\x2c\xcc\xa3\xc7\xe3\x31\x6a\x19\xb5\xb8\x1d\xd4\x75\x5e\xab\xd9\x7a\x7a\xee\x0b\x3b\x7a\xbc\x84\xe9\x92\xee\x9c\xe8\xcf\x73\x88\x36\x67\x22\x4c\x87\x4a\x90\xa1\xd2\x98\x3d\xf4\x7f\x6d\x8e\x35\xea\xb3\x06\xda\xbe\x10\x46\xd1\xf9\xf2\x82\xf6\x35\xd1\xcc\xc4\x6f\x11\xdf\x8b\xa3\x9a\xde\xd1\x68\x4c\x7d\x14\x2d\x67\xe1\xee\x08\xc8\x45\xeb\xa7\xef\x23\x25\x5a\x44\xfe\xa8\x2d\xd5\x52\x69\x5c\x9b\x04\x0b\xf4\x46\xc0\x6f\x4b\x4f\x53\x82\x1a\x36\x4d\x48\x14\xd6\x88\xeb\xa2\xf4\x64\xbf\xa6\xcb\x0a\xa9\x7f\x69\x24\x42\x93\x4c\x37\xe7\x30\x8a\x4c\x64\x67\x45\xeb\x7e\xc9\x8c\xd8\xc0\x25\xb5\xa9\x0a\xcc\x66\xa7\xc8\x40\xb3\x26\xba\x32\x77\x25\x65\xe8\x3b\x20\x82\x85\xf0\x71\x8e\xb4\x44\x3c\xa0\x67\x51\xf6\xec\xe3\xa8\xe7\x1e\x6d\x1c\xca\xd1\x30\xb2\x93\x75\x25\x25\x69\xb4\x1a\xc2\x7c\x33\x58\xef\x80\x2e\xea\x59\x58\x2c\xb2\x05\xc6\x5f\xe1\x82\x00\x07\xf2\x7d\x80\xd7\x51\x76\x95\x0a\xb6\x24\x3d\xc0\xcf\x35\x92\xf8\xc1\x1e\xef\x58\x6c\x12\x4a\x60\xf4\xdd\xb5\x48\xe2\xc2\x5f\x1e\x67\x69\x99\x67\x38\xc8\x86\x3e\xca\xaf\x48\xe8\x9b\x52\x95\xed\x11\xc2\x27\xaa\xf6\xa9\x9f\x41\xed\x21\xd4\x75\x03\x1c\xb1\x28\x65\x90\x3f\x82\xbf\x71\x83\x68\x4c\xcb\x59\xcb\x7c\xcf\x4a\xb8\x4e\x1b\x89\x57\xe8\x22\x4c\x31\x81\xd5\xb0\x77\x24\x75\xb1\xd6\x6f\x47\xb4\x83\x59\xcf\x5f\x5c\xfb\xee\xd1\x60\x0f\x0b\x3e\x5a\xcb\x8a\xa0\x71\xd0\x58\x3d\x96\xc0\x88\x4e\xbe\xc4\xfc\xa6\xbb\x0e\xa1\x87\x77\xce\xee\x75\x51\xf9\xa2\x87\x36\x0a\x2d\x92\x33\x62\x7b\xcd\x84\xf3\xa8\x4e\x1e\xab\xdf\x24\x39\xf9\xfe\x8e\x72\x84\x37\x69\x14\x90\xf9\x5c\x6d\x69\xe1\x04\xca\x97\x09\xc3\xba\xad\xaf\xb0\xba\xd7\x5a\x63\xa2\xff\x0c\x90\x88\xc6\x51\x3b\x9f\x2d\xfa\xbd\x96\x30\x21\xcf\x92\xb6\x74\x2d\x29\x21\xd6\x1a\xec\x9a\x4c\xb7\xa1\x84\xab\x63\xc2\x59\xdb\xb5\x64\xf7\xd9\x28\x17\xc2\x25\xff\x89\xef\x28\x24\xd1\x9a\x5c\x90\x28\x88\x2c\xcd\xb4\x2c\x11\x20\xb5\x5f\xa1\x74\x6d\x0a\x5c\xb3\xf3\x1d\x67\x03\xb3\xd9\xb1\xbe\x03\xb9\x8c\xc2\xd5\x18\x72\x0e\x8b\x1c\xd8\x07\x26\xea\xd6\x3a\x9a\x42\xc5\xb6\x34\x5d\xc6\x91\x9c\xd4\x2c\xd1\xa8\x6b\x27\x12\x6a\x43\xe3\xd6\x38\x66\xcd\xe2\x9b\x18\x09\xc7\x87\x29\x46\x5e\xb6\x27\x5c\xcf\xc2\xe2\x7b\xb2\xde\x80\x5f\x60\x2a\x48\x3a\x85\xe9\xb4\xe2\xb6\x3c\x4c\x0f\xe4\x4b\x5c\xbc\x4d\x8c\x5c\xfa\x39\xb7\x91\x85\x8b\xdc\xe5\x77\x98\x9d\x8b\x1b\xbe\xc0\x4d\x19\x4e\xc9\xe7\x7d\x10\x65\x73\x87\xed\x2b\xca\xe6\x7e\x00\x58\x6f\x9e\xde\xed\x01\xb5\x3b\x4f\xef\x76\x01\x13\xf3\xb2\x0d\x6b\x05\x58\x7f\xa2\xf2\xeb\x27\x46\xe3\x3b\x68\x30\x07\xdc\x50\x84\x7e\xb5\x24\x9e\x2a\x36\x3a\x03\x24\xb5\xae\xe2\x24\x79\x0b\xd3\x08\xe6\x72\xf9\xba\x8d\x4a\x1a\x2f\xf2\xe9\xb8\x78\x0b\xa7\x71\x51\xc2\x1c\x46\x2d\x26\x3b\x83\x40\xb2\x6c\x88\x53\x9a\x62\xdf\xd0\x4b\x16\x53\x45\xa9\x5b\x87\x4c\xc4\x16\x0c\xb0\x49\x4c\x3a\xc9\xb9\x0d\x59\xfc\x5d\x66\x82\x81\xc1\xdf\xdb\xbd\xbb\x83\x41\xc9\xf9\xed\xd8\x13\xc5\x02\xd3\x03\x97\xa0\x67\xda\xe3\x1c\x35\x42\x15\xb1\x64\x64\x73\xb3\x0c\x3d\x19\x7d\xfa\x34\xec\x74\x3a\xbc\xef\x29\x57\x54\xd1\xfa\xcf\x30\x8e\xfe\x77\xa0\x88\xc2\x6f\x6e\xf8\x60\xad\x46\xff\x09\x46\x76\x0e\x65\xc8\x4a\x1e\xdc\xed\xad\x02\x3a\x84\x3c\xfd\x18\x06\x2b\x80\x16\x90\x31\x39\xd0\xc5\xc7\xe4\x8a\x9a\x24\xbe\x9d\xbd\x88\x5b\x00\x6e\xab\xe5\xe8\xf7\x1f\x7e\xe8\x26\x4f\xbf\xff\xc9\x6e\x39\x42\x8b\x38\x27\x76\xfa\x7a\x06\x9f\xbe\xdd\xde\x93\xc4\xd4\xdc\xc3\x50\x93\xd2\x2c\x85\xd4\xd6\xb3\xef\x0a\x38\xec\x31\x0d\xea\xb0\x79\x64\x91\x6f\x44\x39\x1e\x52\x7c\x72\x2d\x3a\x93\x84\x2b\x30\x03\xcb\x88\x47\x21\x2b\x4a\x33\xab\x35\x1a\x4d\x66\xce\x21\x7e\xf8\x0b\x96\x9f\xdd\xee\x29\x27\x56\x6a\x66\x43\x87\x13\x54\xbe\x66\xa7\x19\x99\xa7\xc8\x1a\x27\xc8\x9a\x39\xc6\x62\x14\x6a\x64\xd5\x98\x90\x24\x56\x62\x13\x7e\x22\x6f\x54\x69\x55\xed\x91\x3d\xed\x0e\xf5\x07\xd7\x46\x75\xc9\x87\x09\xcc\x4b\x62\x3e\xe3\x47\x7e\x5f\xc4\xd6\x99\x18\x53\x07\xb2\xcf\x91\x8e\xae\x6c\x34\x33\x43\x50\xb4\x37\x7a\x26\x23\x73\xb3\x29\x53\x5f\xf1\xda\x74\xa8\x1a\x84\x52\xb1\x2a\x1f\x37\x5a\x43\xe4\xdd\xfb\x23\x15\x92\x8d\x94\x03\xfc\xd3\xbd\xbd\xcd\xe1\x7f\x42\xcb\xd4\xaa\xb1\xa6\xb4\x74\xce\xda\xa3\x2c\x02\x76\x0e\x70\x1f\xe0\xe2\xd8\x69\x5f\xcf\x24\x40\x6a\x36\x0f\xa9\x91\x0f\x96\x39\x4c\xec\x4f\xdb\x83\x74\x2c\x09\x3e\xbb\x5d\xe3\x5a\x16\x9b\x21\x77\x6b\xa9\xdd\x6b\x27\x55\xcf\x11\xdc\x63\x4c\x35\xd3\xa4\x67\x1b\x5c\x66\x6f\x13\xc0\xa0\x6a\x8f\x12\x1c\xe3\x32\x5f\x6a\xd0\x5b\x35\xa7\x84\x53\x08\xc8\xa6\x56\x72\x52\x62\xef\x8e\x14\xfb\x36\x9e\xc9\xd6\x5c\x49\x77\xa9\x32\xc7\x3e\xc1\xd3\x18\x39\x67\x64\x9d\x6f\xe9\xb6\x1a\xa7\xd5\xf1\x73\xcc\xa5\xcf\x3b\x9b\xaa\x22\xc5\x1a\x81\x5c\x49\xc0\xb2\x31\x71\xe6\x67\x0b\xe1\xa7\xe2\xe7\x2c\x1c\xe2\xc0\x0e\x5b\x33\x6c\xec\xf3\x8b\x32\x8f\xd3\x69\x9b\xb2\xc6\x14\xfc\xc0\xa4\x9f\xe6\xc4\x56\x23\x8e\x52\xb6\x23\xd7\x99\xbc\xa7\x6d\x7a\xd6\xd2\x74\xc4\xaf\x77\xea\xda\xd1\xa9\x69\x05\xa2\x38\x7a\x8e\xf9\xfc\xa9\xd7\xb5\x41\xa1\xa8\x33\x3a\xe2\x2c\xd4\xe2\x5f\x22\xc5\x3e\x81\x45\x99\x67\xd7\x1b\x96\xab\x1c\x8c\x94\xa2\xed\xc7\xba\xfa\x41\x09\xfa\x5c\xb0\x1e\xfb\x14\x0d\x28\x08\x76\x70\xb2\xe0\x8e\xb2\xdb\x7a\xbc\x78\x7b\x7e\xff\x9f\x93\xe3\x09\xb4\x1f\x2f\xee\x09\xb1\x64\xf1\x1d\x5b\x8e\x12\x5d\x76\x94\x90\xf6\x18\xd9\x59\x68\xf5\x19\xef\x46\xa7\xee\xd5\x50\xd4\x6c\x32\xd0\x29\xc7\xb6\x12\x17\xda\xc0\x7f\x36\x99\xb1\xe9\x14\x25\x32\xfa\xb6\xce\xca\x74\xd2\x8d\xde\x7e\x5f\xa4\x8e\x70\x09\x39\x06\x82\xee\x2a\xaf\x17\x25\x01\xfa\xc5\x7f\x92\x0d\xa6\x1e\x6e\x96\x12\xdd\x40\xb0\x7d\xa4\x98\x07\x09\xac\xfd\x18\x1c\x59\xdd\x5b\x32\xba\x24\xb1\x04\x27\x70\x52\x36\x46\x25\xa7\x5b\xfb\xa1\xb9\xaa\xec\xca\xbe\x56\xc5\xbd\x8c\xf5\x00\xfe\xa0\xd4\x47\x5c\x1b\x96\x3d\xfb\x8e\x12\x58\xa3\x7c\x86\x22\xaf\x76\x36\xd7\xcb\x54\x94\x0b\xdd\xf5\x6d\xf1\x79\xd3\xd7\x8c\xdc\x02\xe1\x5d\x27\x97\xf6\x65\xd5\x8b\x83\xfa\xb2\xb8\x00\x5d\x0b\x6b\x86\x78\x52\xc3\xb7\xb0\x91\x13\xb8\x86\x18\xe3\x2a\xd1\x26\x6e\x45\x34\x29\x78\xaf\x4a\xae\x1e\x73\xce\xd3\x1e\xdf\xe7\xe1\xbc\xa3\xdd\x18\xfb\xad\xc8\xf7\x3b\x77\xd3\xd4\xe8\x47\xc6\x66\xf0\x27\xe8\x46\x6b\xd8\xb4\x1d\x48\x58\x8b\x50\x5e\xa3\x7e\x53\x4f\x83\xe4\xbe\xc0\x9a\x36\xd3\xc2\x97\x49\x19\x2f\xf0\xc6\xac\xba\x3d\x16\xf1\x02\x6a\xfa\x34\xd2\xbd\x37\xd8\x05\xe5\xbd\xe5\xeb\x29\xcb\xac\xa1\xa7\x77\x7b\x20\x87\xbf\x2d\xe3\x9c\xb8\x2b\xec\xce\x89\x30\x8a\xc8\xe0\x2b\xc6\x70\x1e\x38\x4a\xb4\x45\x3a\xfb\x98\xf5\x9d\xfd\x1e\xa4\xf0\xca\x3b\x87\x25\xd5\x64\xd9\x65\x12\x75\xcb\xcd\xfd\x96\xe2\xd5\xc7\x49\xe2\x00\x7e\x43\x40\xa6\x22\xb9\xa9\x05\xcc\xc6\x13\xf2\x79\xd6\x40\x7c\x05\x76\x98\x88\xa1\xd1\xbf\xac\xc9\xf8\xee\x5d\x6e\xc3\x67\x5f\x1b\x75\x26\x31\xea\xda\xc1\x83\xf2\xee\x60\x00\xef\xdd\x2b\x79\x01\x41\x90\xc3\x72\x99\xa7\x5e\xb9\x5a\xc1\xa4\x80\xd5\xc5\xb3\x67\xff\x6e\xfd\x44\x52\xc2\x9c\x7f\x24\xe0\x0e\x01\x38\x78\x70\x23\x8a\xc4\x8e\x80\x15\x2d\x48\xbe\x2c\xfe\xd6\xbc\x04\xfc\x50\x53\xc0\xf2\xe9\x25\x9a\x44\xd8\x60\x44\x15\x92\x18\x16\xad\x12\xdc\xb0\x77\x4f\x5b\xc1\xe0\x01\x44\x87\x83\x82\x90\xf6\x02\x76\xe7\x79\x09\xe7\x05\xbe\xed\xae\x3c\x44\xef\xf2\xae\xe9\xcc\xc3\x05\xb9\x24\x8a\x0b\x3a\xbf\x66\x71\xda\xf2\x81\x8f\x19\xe9\xcb\xcd\x3d\x12\xda\x4e\x6e\x6a\x67\x8a\x3e\xb6\x3b\x6d\xac\xac\xd6\xc6\xca\xa7\xf3\xf0\xe7\xf4\xf9\xbf\xec\xda\x98\x1a\x6f\x09\xfc\x47\x2c\x91\x57\x52\xbf\x1e\x29\xea\x88\xd5\x96\xd9\xa5\x42\xf7\x00\xe8\x45\xd6\xdc\xe4\x4f\xb8\x2e\x82\x4a\x42\xff\x34\xd1\xbc\x76\x0d\x1f\xea\xf3\x4c\xa3\x7e\xb5\xb3\xbb\x59\x5e\x09\xde\xc6\xd6\x62\x75\x72\xbb\xa0\x7b\x93\xd8\x4e\xb4\xab\x33\x54\x91\xf1\x69\xa5\x8c\x2f\xa9\x8c\x7f\xcf\x66\xd8\xeb\x34\xb9\xe6\x8f\xb5\x94\x75\x93\x6e\xb0\x6e\xe2\x2c\xb5\x9d\x69\x1e\x4d\x93\x78\x3e\x87\xf9\x9e\xe4\x78\xd7\x8f\x36\xb8\xf2\x20\x07\x21\x48\x40\x71\x87\xdd\xf3\x62\x74\x17\xe0\x1b\xe4\x99\x64\x70\xb3\xba\x43\x85\x15\x5d\x80\x1f\xe0\x75\xd1\xca\x03\xbb\xbf\x33\x19\xc2\xd1\x20\x1f\xc2\x11\x6a\x4e\xd2\x81\xe9\x72\x0e\x31\x39\xfe\xe0\xee\x5d\xf9\x27\x48\x3a\x32\x75\x3e\xbe\x2b\x5f\x00\x2d\x0a\x93\x13\xa7\x5e\xf2\xe9\x53\xd2\x89\xd3\xb8\x8c\xc3\x24\xfe\x1d\xe6\xc1\xbd\x7b\xad\xa4\x73\x95\xc7\x25\x79\xb5\x1b\x80\x64\x90\x76\x0a\xec\x14\x0e\x3a\x39\xbc\x84\x79\x41\xfe\x8a\x96\x63\x28\x55\x30\x05\x79\x70\x43\x5b\x93\x93\xa6\x06\x9f\x3e\xa5\xab\x00\x24\x01\x08\xef\xdd\x23\x72\xe2\xee\x60\xa0\x7c\x0f\x7f\x0e\xd7\x46\xbd\xfe\x50\xf9\xd5\x19\x87\x49\xd2\x0a\x83\x53\x52\x08\x50\x6e\x52\x09\x14\x00\xbe\xc7\xea\x5f\x70\x49\xb7\x12\x55\x2d\x19\xa0\x35\x10\x80\x64\xb5\x2b\x21\x98\xad\x39\x92\x1e\x3d\xfd\x3d\x7d\x97\x7c\x70\x0b\x41\x1a\x7f\x4e\x8f\x9a\x24\xa0\x98\x1a\x29\x65\xae\xad\x66\x62\x91\x1d\xa2\x8e\x80\xf4\x91\x26\xc7\x1e\x22\xdc\x98\x68\x1c\xf6\x8e\x24\xd0\xb3\xae\x64\x1c\x97\x4f\x28\x7e\x5c\xb4\x91\x0a\x72\xa9\x18\xfa\x8f\xf1\x19\x97\x24\x0e\xf6\x65\xb3\x7a\x96\xa6\xf8\x8c\x2c\xec\xf1\xf2\x43\xfc\x5c\xc7\x0f\x83\xb2\x7f\x41\x4a\x3a\xd4\xde\x3e\xd8\xea\x6d\xd9\x9b\x10\xc5\x85\x51\xc7\x11\x43\xeb\x33\x46\x68\xe4\x44\x73\x64\xa1\x5c\x23\x3d\x9a\x5e\xea\xbb\xe6\x48\x82\x3b\xdd\x76\x5c\x66\x84\x9a\x1e\x82\x86\x9b\x53\x8d\x7d\x46\x3d\x63\x44\x71\xd4\x8e\xb1\xe1\x19\xdb\x05\x4b\x7a\x69\xb9\x88\x30\x9c\x83\x7f\x15\x27\x49\x3b\x22\x26\xe4\xad\xcf\x1f\xf2\x76\xc0\xb7\xa8\x04\x96\xde\x72\xd0\xe2\xbb\x14\x8e\xe6\x82\x11\xe0\x47\x13\x52\x57\x10\x6a\xbf\x93\x01\xce\xd9\xf3\xc8\x91\xa4\xf0\xf8\x99\x84\x84\xec\xe4\xcb\x71\x99\x61\x1b\x34\x24\xbb\x04\xdd\x32\xee\x70\xdb\x34\x0c\x00\x09\xeb\x01\xe9\x40\x9a\xc3\x21\xb9\xd6\xca\x07\x45\x70\xef\x9e\x5d\x96\xa1\xb2\x6e\xc4\x46\x71\x9a\xcb\xbb\x86\xbc\x45\x9c\xe6\xea\x8e\xc1\x36\x84\xd3\x9c\xef\x0d\x80\x08\xc2\x5c\x91\xda\x79\x85\xd4\x5e\x05\x2b\xba\x78\x98\xbd\x1d\x6b\xbe\xa4\x05\x1d\x7e\x6c\xa2\x9e\x05\xb1\xd4\x6c\x4f\xcb\x07\x21\xfa\xc2\x0a\x14\x83\xb8\x95\x74\x16\x79\x56\x66\xe5\xf5\x02\x2a\x0b\x3c\x1d\x81\x1b\xa5\x81\x77\xbb\x40\xea\x88\xbb\x5d\xd1\xc4\xbb\x5d\x20\x35\xe2\x14\xcd\xfe\x55\x00\xb4\xa2\x99\x18\x00\xc3\x7c\x04\x68\x67\x4f\x61\xf9\xfa\x2a\x65\x9d\xcd\xa8\x64\xb2\xdc\xfe\x26\xda\xc2\xf9\x65\xa3\x7c\x49\xd2\x80\x61\xd8\xf0\x13\xd2\xcb\xda\x57\x12\x59\x2d\x5a\x82\x2a\x05\x2b\x03\xcb\xa0\x86\xde\x94\x97\x61\xd2\xe6\x5e\x76\x49\x53\x82\xa8\xec\x76\x81\x6e\x85\x25\x74\xbf\xb4\xbd\x65\xd8\xf9\x02\xdf\x1f\x6f\xd4\xa1\x9e\x42\xc5\x9f\xc4\x0e\x9e\xac\x63\x56\x2b\xd4\xf0\x3b\x35\x1a\xde\xac\xc5\xb7\xb6\xa9\xeb\xc6\x58\x90\x81\xb6\x99\xa9\xa0\x7d\x15\x97\xb3\x36\x65\x1e\xb0\xf4\x82\xf2\x92\xf4\x6c\xb3\x82\xff\x44\x1d\xb6\xae\x93\xd6\x17\xf0\x27\xea\x8c\x3d\x66\x1d\xdf\xb6\x53\x78\x41\x7f\x82\xce\xd9\xf5\x8a\xfa\x93\x2d\x24\xb9\xc9\xc5\x72\x3a\x85\x45\x09\xa3\x36\xa3\xba\xd9\x6d\x7f\x99\x1f\xf8\xe3\x77\xe0\xa6\x6b\xed\x4f\xd0\xf4\xbd\x0b\x38\xc9\x72\xd8\xe6\x0c\xd6\x9b\xf5\x84\x5e\xcc\x9f\xa0\x63\xd2\xac\x3d\x0f\xcb\xf1\x0c\x16\x6d\xce\x31\xb5\x61\xe7\x58\x8a\xfa\x13\x74\xd0\xb6\x53\xe6\x4f\x34\x57\x14\xfe\xae\x0d\xbb\x43\x2e\xe3\xcf\xd0\x25\xf2\xfe\x41\x5d\xbf\x9b\xf6\x8c\x59\xd4\x9f\xa0\x83\x0a\x4c\xd5\xb6\xb5\x6c\xd1\x8a\xf9\x13\x74\xcc\x96\x0a\xf0\x1f\x5d\xef\xa5\x94\x40\xb7\xc5\x2f\xf9\x71\xfe\xf4\x5d\xfc\xec\x9f\xdf\x3b\x62\x17\x5d\x49\x50\x06\xbc\x8d\x9b\xe9\x88\xa4\x67\x58\xb3\xd0\x77\x12\x36\xa8\x74\xe8\x57\x73\xa3\xe5\x61\x14\x67\xed\x71\x98\x47\xb7\x65\x64\x7f\xd9\xef\x5f\xfc\xb0\xff\x4b\x58\x39\xb2\xa0\x2a\x3c\x55\x66\x23\x64\xc3\x48\x5c\x1f\x3d\x30\xf4\x45\x8b\x7d\x23\x18\xad\x37\x02\xbe\xa7\xb3\xda\x1b\xc9\x22\x7a\x2a\x96\x2d\x3f\xee\xd0\x08\x86\x3b\x24\xd0\x1a\x84\xb0\x77\x34\x62\x51\x48\x9b\x01\x73\xdb\xd0\x19\xf6\x19\xa7\xa6\xc4\x90\x7d\xc0\x92\x64\x24\xea\xff\x03\xca\x75\x6e\xa5\x5a\xdf\x57\x73\x77\xfa\x46\xd2\x03\xee\xbe\x7a\xf8\x0c\x6b\x69\x23\x2b\x1a\x70\x00\xfa\x98\x59\xe5\x2b\x56\x5e\xe6\xc0\x5a\x93\x8c\x67\x61\x46\xb7\x24\x6a\x18\x11\xc8\xeb\xd3\xda\x69\xaa\x9e\x40\x2a\x92\x28\x61\xb8\x67\x85\x41\x41\x63\x7f\xcb\xb4\x91\xdb\x44\x5f\xfe\x1b\xc8\x21\x23\x64\xcb\x19\xa1\x5c\x57\x1a\xdd\xaa\x00\x98\x9f\x5e\xbe\x3e\x7e\x37\x7f\x7b\x50\x49\x04\xfc\xfe\x03\xbc\x46\xff\x30\x5c\x1a\x4b\x0a\xd6\x24\x86\x49\x44\xf9\xe4\x2a\xa5\x89\x08\x9e\xc7\xbd\xc1\xe3\x7a\x29\xfe\x0a\x17\x61\xf8\xc6\x7b\x9a\xc6\x6a\x48\x29\x29\x53\x57\x76\xc5\xaa\xc0\x31\x3c\x89\xb7\xbb\x09\x58\x8c\x19\x9a\xdc\x33\x72\x12\x09\xbe\x38\xea\x1d\xbc\x98\xee\x2b\xee\x53\xf9\x16\xfd\x49\x3b\xd0\x0d\xab\xa5\x38\x46\xed\x2f\x35\x0d\x0b\x36\x52\x91\x45\x4a\x9b\x2d\x07\xae\xeb\xeb\xb8\x36\x12\x08\x96\xf1\xb8\x1a\x22\x4e\xbc\xd8\xec\x79\x33\xad\xec\x90\xef\x52\x18\xc2\x17\x8f\xb3\x87\x9b\xd7\xe6\x10\x5b\xf2\x40\xe3\xfa\xdb\x30\xbc\x4c\xb1\xba\x2f\xed\x0b\x12\x54\x97\x24\x5a\xcd\x31\x3c\xb2\xa2\xa1\xc9\x43\x28\x38\x0e\x7d\x7d\xdb\x74\x09\xe9\x7e\x05\x1c\xda\x3a\x31\xad\x36\x52\x21\x93\xec\x71\x44\x65\x13\x41\x6b\x8d\xa8\x47\xaf\x59\x63\x6f\x2b\xf6\x80\x46\xd9\x24\xeb\x50\x47\xa8\x94\x67\x72\x5c\xe0\x96\xfc\x26\x02\x78\xcb\x36\xfe\x45\x52\xe2\x18\x8a\xb0\x0d\x90\xa4\xb1\xf4\xdf\x2e\x9a\xab\x4a\xfc\x1b\xf0\x20\xbd\x5d\xa7\xb9\xa1\x9e\xb3\xa7\xb9\xf1\x30\x5a\xba\xda\x94\xe0\xdb\xde\xfe\x60\x30\x80\x9d\x0f\xf0\xfa\x2c\x8b\xe0\xbd\x7b\x1c\xf8\x22\x8a\x8b\x45\x58\x8e\x67\x38\xb0\xb4\x95\xc2\x2b\xef\x65\xb6\x2c\x20\xf9\x49\x33\x19\x1c\xe0\x19\x4d\xa2\x54\xf1\x3e\x45\x87\x1b\x0e\x1e\xf8\x3e\xaa\xce\x43\xb2\x2d\x9d\xc2\xc0\x00\xb6\xa8\xb1\x73\xc2\xc9\x17\xd8\x31\x71\x74\xc3\xa0\xc6\xc0\x47\x71\xf4\x16\x8e\x61\x7c\x09\x1f\x23\x7d\xdd\x0d\xc7\x42\x3b\x5e\x8c\x26\xf9\x8b\x04\xd7\xa2\x99\x28\xea\x50\xae\xef\x84\x2c\x81\x98\x7e\xd9\x16\x07\x68\x7d\x03\x3d\xdc\xe6\xbf\xe9\x6b\x5f\x2b\xf3\xe9\xe7\x3c\x9c\x9d\x95\xdd\x7f\xae\xc9\xc7\xab\x06\x75\xb5\x63\x7c\xc8\xda\x07\x39\xf9\xf2\xbe\xf2\x47\x2e\xca\xdc\x23\x23\xc5\x49\x6c\x11\xfe\x55\x1e\x97\xd0\xc3\x9a\x0a\x0e\x51\xe2\x48\xaa\x84\x59\x60\x0d\xd1\x31\x89\x27\xb3\xe9\xcd\xda\x66\xac\xec\x87\x98\x02\x0d\xe8\xc7\xaa\x2e\x1a\xe6\x3c\xc7\x72\x92\x11\xbe\xf8\xde\x2c\x2c\xda\xe4\xaa\xf3\x1c\x57\xb1\x9b\x54\x91\x98\xda\x77\x59\x72\xde\x52\xc9\x6a\x7b\x07\x60\x9f\xf4\xf4\x10\x5d\x1c\x31\xfd\x2e\x5c\x96\xd9\x24\x1b\x63\x4c\x29\xf1\x37\xdf\x31\x49\xb1\x86\xee\x53\xb1\x61\x2a\xdc\x70\x15\x15\xa6\xc9\xfe\x36\x9a\x84\x97\xe1\xc7\x78\xbe\x9c\x7b\xfd\xc3\x23\x6f\x3c\x0b\xf3\x70\x8c\x76\xc1\x8e\xf7\x32\xbc\xf6\xb2\x34\xb9\xf6\x68\x5e\xb6\x97\xc0\x12\xdd\xf1\x5a\xcb\xc5\x02\xe6\x18\x93\x3a\x4c\xa3\xbd\x2c\xf7\x92\xec\x8a\x5c\x08\xd8\x95\x74\x89\xe6\x3b\x2a\x65\x59\x94\xde\x05\xf4\x96\x69\xfc\xdb\x12\x76\xf4\xaa\xd9\x30\x0e\x2b\x86\x77\x73\xda\x91\xa2\xcc\x33\x42\xa2\xc9\x95\x06\xcb\x17\xb0\x6c\x8e\x23\x99\xfe\xa5\x3e\x15\x81\xf3\xb0\x58\x93\xd4\xaf\x6a\x4e\xb2\xf0\xa1\x38\x4b\xbd\xd6\x6b\x8a\xd3\x6f\xa3\x92\x61\x05\xa0\xf2\xc3\x1c\x32\x5c\x0f\x36\x1b\xa5\x72\x46\xc6\xfc\x95\x6e\x0a\x30\xd6\x86\xb3\xd2\x98\x87\xeb\xd4\x27\x60\x1e\x92\x0e\x40\x8f\x92\x03\xc4\xb0\x10\xfd\xa6\x5c\xb1\x1d\xa4\x66\x7d\xf9\xd6\x1b\xf9\x71\xdb\x3c\xbb\xaf\xe1\x27\xd2\xc1\x25\xb8\x38\x0c\xc5\x5f\x47\x5a\x71\xd0\x30\xaf\xb5\xdc\x50\xd3\x80\x21\xa5\xeb\x9b\x4e\x68\xe4\xa8\x4e\x1c\xc0\xc2\x47\x25\xd6\x85\x47\x98\xe3\x41\x23\xbe\xe3\x7c\x78\x06\x41\xf5\xe6\x12\x9e\x1c\x2f\xa8\xbd\x09\xff\x73\x38\xe2\xb3\x49\xf4\xbf\x01\xcc\xea\x5c\x49\xf5\x15\x6b\x7a\xfe\x1e\x87\x29\x25\x8e\xa0\xcc\x16\x56\x56\x5b\x55\xe9\xd6\x00\x23\xa4\xcc\xc3\x26\x1a\xb4\xaa\x71\x6c\x49\x3b\x41\x98\x23\xc8\xe9\x9f\x70\x4a\x90\xbf\x15\xca\x08\x69\xe3\x6e\x9a\x6b\x84\x5f\x55\x89\x32\x6a\xe8\x48\xe3\x59\x8c\x7a\x46\x7b\x4d\x7a\x76\x59\xc6\x49\xb1\x17\x65\xf3\x3d\x88\x34\x5d\x46\x66\xac\xa9\x51\x20\xdd\x9d\x22\x95\xaf\x41\xdc\x9f\xbd\xfd\xee\xd7\x17\xef\x5e\x56\xda\x6c\x58\x3b\x78\x7b\x98\x5d\x4d\x18\xdb\x04\xb4\x3b\xc5\x75\xd4\x81\xf9\xdf\xbf\x0f\xf3\x69\x97\xfd\xd1\xf3\x81\x4f\x60\xea\x0a\x4e\xa3\xe2\x03\x7f\x9e\x45\x18\xa4\x8d\x42\xd0\x58\xd2\xd0\xf1\x13\x82\xe0\x4a\xd6\xd0\x24\x66\x10\x74\xb9\x07\xfc\x14\x5e\xb5\xc9\xa2\x14\x71\xec\xa8\x60\xe0\x3f\xc2\x3c\x01\xae\x18\x76\x17\x3e\x30\x35\x37\x59\xd0\xe7\x0d\xee\x37\xd5\x16\xa0\xb1\x3a\xdf\xd7\x4b\xf2\x5f\xc1\x2b\xef\x2d\x31\x65\xa1\x3f\x09\xbd\x84\x8c\x1a\xdf\x30\x49\xab\x29\x26\x34\xe9\x77\x6c\x25\xda\xb7\xa0\x42\xd7\x88\xc1\x6f\x86\xe4\x6b\xb7\xfe\x3b\x3b\x68\x03\xc3\xbf\x7d\x8b\xe3\xfd\xbc\xb9\x41\xde\x5d\x30\x1f\xb5\x26\xe6\xf2\x1a\x70\x44\x6b\x7a\xfe\x22\x8b\xae\xeb\xf6\xbb\xb2\xfb\xeb\x78\xd5\x3d\xca\xf2\x7a\x34\x02\xfe\x7b\xfc\xf6\x7b\xba\x7a\x84\x75\x4c\x7e\x66\x88\x9f\x19\x71\x05\xbe\xcf\x07\xcd\x6e\x2f\xab\xb9\x16\xea\x5a\xc7\x7a\x5b\x5a\xc7\xd8\x52\xe1\x9b\x04\xeb\x59\xca\xca\x44\x95\x02\x1b\x2f\xee\x88\xf6\xc2\x31\xd9\xbc\x7b\x27\xf4\xdf\xfb\xe4\xdf\x7e\x77\x23\x20\xf7\xaa\x41\xa6\xda\x55\x93\x61\x56\xca\x76\x29\x41\x8c\x4d\xbf\xbe\x0a\x74\x00\xfa\x3d\xb5\xd9\xfd\xae\xda\xfc\x5e\xcf\x50\x66\x9a\x03\x37\x7f\x0e\x04\x0a\xf5\x80\x63\xc3\xd4\xb4\x2c\x01\xde\xf3\xea\x71\x84\x71\xf1\xad\x23\x56\xb7\x1c\x4d\xce\x70\x18\xa6\x97\xc2\x2b\xc6\x65\x64\x3f\x8a\x5a\x8f\x48\xe2\xc6\x2e\x90\xc6\x77\x08\xd4\xa0\x1d\xa7\x6a\x08\x17\xa5\x67\x6b\x89\x17\xa9\xbb\x1a\x09\x98\x85\xb2\x9f\x7e\x71\x11\x43\x17\x9f\x22\x64\xd8\x5e\x5c\x4b\xd8\x90\xa3\x28\x29\x66\x44\xfc\x58\xfd\x7e\x95\xec\x51\xf6\xef\x3a\x59\x6b\x0d\x78\x3a\x6b\xc3\x8a\x7c\xd1\x7d\x5e\x42\x18\xb4\xa1\x2a\xf6\x0e\xe4\x24\xce\xf0\x92\x03\x1c\xf6\x38\xc5\x27\x50\xe0\x5b\x1d\xc9\x8d\xbd\x03\x13\x4e\x75\x24\x93\x0f\x91\x23\xb9\x03\x0b\xf1\xd0\x66\x3b\x3c\x34\x5c\x81\x87\x44\x84\xc6\xc5\x79\x78\x19\xa7\x53\x51\x55\x7c\xf1\x4d\x1e\x17\x65\x9c\x42\xed\x32\x25\x29\xf3\xd7\x98\x13\xf1\xa4\x2d\x96\x17\xf3\x58\xb7\xa6\xe8\x63\x65\xd6\x62\x53\x62\x0c\xe1\xaf\xad\x8e\x23\x6a\x14\x69\x50\x43\xc2\x86\x69\xe4\x85\x8b\x45\x62\x13\xb0\xae\x4b\x0a\x47\xa8\xdd\xd8\xeb\xea\x1e\x6b\x87\x13\x46\x51\x36\x2f\x6c\x84\xa2\x9f\x73\xd2\xad\x61\x28\x6d\xac\xf7\xd6\xee\x1d\x0d\x6d\xd7\x32\x9b\x8f\xad\x93\xf9\xb8\xc1\x5c\xee\x6b\x73\xd9\xe8\x5b\x9f\xf9\xa8\xd0\xb1\x34\xbc\x94\x05\x3b\xc3\x21\x3b\x96\xd6\x90\xa4\xb2\xd8\xfa\xb9\xee\xb9\xd0\x35\x02\xd6\x25\x76\xfc\xd7\x0a\xab\x58\x61\xfa\xbc\xd9\x6a\x81\xad\x3d\xce\x37\x5e\x2a\xeb\x08\x3a\x74\x6e\x0e\xe3\x81\x7d\x93\x1d\x84\xb0\x79\x2b\x76\x24\xab\xc5\x92\x12\xc5\x56\xab\xed\x48\x53\xc5\xb7\xe5\xe8\x76\x5d\x9b\xa7\xf6\xc8\xfe\x81\x5b\xab\x67\x61\x36\xe7\x38\x54\xd9\x9b\x64\x39\x31\x76\xb2\x28\xb4\xaf\x09\x21\xf3\x18\x4d\x3f\x2f\x4c\x3d\xf8\x11\x8b\x92\x29\xae\xda\xce\x74\x1e\x96\x63\xd6\x10\xd3\x46\x0e\xac\xec\xdb\x4e\x0d\x02\xfb\xc1\xd7\x54\x95\xbe\x0c\xca\xc0\x2c\x62\xd9\x02\xa6\x06\xb0\x9f\xe5\xec\x51\xe3\xcc\x91\x9b\xf6\x0f\x87\x33\x66\xfb\xde\x63\x09\x66\x9b\x20\x02\xf5\xfa\x8a\x87\xb0\x62\x9d\xf5\x9b\x57\x0c\x4b\x8b\xc6\x20\x14\x65\x78\xb1\x4c\xc2\xbc\x3d\xce\x12\xb4\x34\x63\x89\x21\x31\xcf\xae\x0a\x65\x6d\x1d\x8a\x01\x3d\x42\x5f\x24\x23\xf0\x2e\x9e\xc3\xd3\x08\x16\x63\xea\x40\x3b\x0d\xd1\x9f\x15\x7e\x92\xed\x4d\x07\x9b\x71\x6c\xb1\x89\x54\xce\xfc\x66\x9e\x5e\xf5\x05\xc5\x43\x66\x0d\x50\xaa\xc9\xf5\xb7\xa6\x91\x79\x76\xb5\x71\x0b\x23\xe7\x29\x9e\x3d\x12\xd2\x73\xc5\x91\x18\x53\x4c\xf9\x19\x8d\x3b\xe1\x38\x29\x3a\x68\x49\x15\x1d\x18\xc5\xa5\xcf\x43\xed\x9e\x3f\x51\xd1\xfb\x45\xe4\x55\x4f\xf5\x7c\x3b\xba\xb2\xa2\x87\xd7\x54\x98\x7f\xc4\x70\x4f\xd6\xf8\xcc\xae\x06\xa4\xe1\x59\x51\xae\x93\x89\x36\x4b\xca\x96\xb8\xa9\x1e\x49\xc1\xbd\x56\xea\x5c\xa7\x41\x80\xf3\x80\x09\x42\xd2\x32\x5f\x42\x80\xfd\x65\x15\x5a\x36\x41\xd1\xd1\xde\x24\x2f\xdd\x2e\xf3\xd6\xcb\x2c\x87\x9b\x58\x8a\x3e\x13\x5a\xa9\x3e\x79\x0d\xdc\x6b\x4e\xa1\xe3\x32\xa3\x6d\xc7\xb9\xb1\xed\x92\xad\xf2\x57\xf4\x31\x3c\x30\x2a\xc3\xea\xfb\xa5\x60\xc2\x1b\x65\x2d\xc8\xff\x3d\x8d\xe2\xb2\x71\xd6\x80\xfc\xdf\x4f\x31\xbc\xaa\xa5\xed\x6b\x5d\x6e\x37\x49\x56\x04\xa2\x28\x9d\x73\x9f\xea\xdb\xfd\xfd\x4d\x89\x35\xeb\xce\x1c\xac\x5f\x45\x48\x1c\xe4\xd9\xd2\x8c\x76\x70\x14\x67\x31\xff\xf6\x09\x76\xf5\x76\x54\x49\x84\xcf\x93\x57\xe1\x2d\x46\xf3\xa9\xec\xcf\x0d\x28\x8b\xcc\xd7\x4f\x80\x1f\xa7\x93\x2c\x9f\xc3\xa8\xcd\x3c\xf7\xcc\x3f\x7a\x15\xe6\x29\x3b\x7a\xd3\xe5\x1c\x7d\x87\x96\x79\xf1\x3c\x9d\x64\xbe\x1a\xc7\xcc\xc6\x68\xc6\x98\xfa\xb0\x83\x09\x08\x89\x0e\x86\x5d\xd0\x65\x73\xbb\x4e\xe0\xbb\x3c\x2d\x98\x1d\x0e\x9d\x2a\x98\x66\xb2\x91\xf1\xcf\xda\x11\xe8\x3f\x4a\x60\xe0\x91\x8e\x77\x3c\xd6\x80\x7a\xc8\x55\x7b\xe2\x77\xdb\x6d\xdd\xd9\x3c\x58\xac\x1d\x72\xf2\xdf\xe3\x1c\x7a\xd7\xd9\xd2\x2b\x96\xf4\x8f\xab\x30\x2d\xbd\x32\xf3\x08\x86\x94\x57\xce\xe2\x02\xcb\xa6\x87\xd5\x9f\x74\xcf\xcc\x1d\x75\x96\x98\x3c\x4d\xb3\x26\x58\xa6\x12\xcf\xbc\xd8\x60\xf3\x91\xdb\x4a\x51\xfe\x90\xbc\x27\x11\x08\x64\x55\xf4\x75\x21\x32\x6a\x08\x8f\x5a\xf5\x45\x5f\x59\x90\xa6\x10\x71\x1f\x06\x35\x0d\xe4\x98\x13\xdc\xfb\x02\x53\x5e\x3e\x3b\x08\xd8\xbe\xed\xeb\xee\x55\x2f\x21\xd7\xcc\xb0\xea\x16\x3b\x78\xc9\x35\x74\x9f\x67\xa0\xb8\x2b\x98\xed\xe5\x47\xcd\xfd\x98\xfa\x7f\xc4\xb0\x74\x0b\xba\xd3\x72\x86\x76\x91\x64\x6d\x75\xf1\x3e\x5a\xb5\x55\x95\x69\xa6\x66\xd4\x51\x5f\x2c\xfc\xba\xe0\x18\x9c\x6c\xe2\x1c\x75\x3d\xb4\x0f\x0e\x80\x4e\xcf\x6b\xed\x53\x60\x1a\x26\xb6\xc3\x35\x5e\x1b\xe0\x57\x28\xcc\x51\x29\xcf\x82\x69\xc7\x45\x1b\xef\xfa\x6d\xa2\xdd\xc7\xe9\x65\x36\xa6\x14\x3f\x24\xd8\x8f\xc3\xe1\x93\x28\x4e\x92\x4b\x83\xa7\x37\x46\xc3\x67\xa9\x34\xa8\x7c\x9a\x42\xc3\x09\x80\x61\x4e\x9d\x98\x38\xed\x86\x3a\x36\xe9\x25\x6c\x9e\xe4\x06\x49\xd9\x4c\xc9\x23\x0f\xc8\x27\x9f\xd1\xe7\x85\x89\x93\x5a\x38\x33\x1a\xbb\x8b\x5f\xc9\xcb\xf6\xc5\x35\xe5\xc1\x6a\x97\x99\x12\xcf\xd8\x34\x16\x51\x0d\xd3\x53\xe2\x11\xc3\xca\x78\xc4\xdc\x12\x8f\x88\x2a\xeb\xc8\xd6\x41\xb7\x8a\xb8\xcc\xf2\x6b\xfc\x5d\x3f\x58\x9b\xd9\x23\x07\x34\xca\x81\x8e\x66\x70\xa3\x14\xf3\x86\xc7\x8a\x3d\x49\xfa\x94\x7e\x04\x35\x7c\x59\xc2\xa8\x13\x26\x71\x58\xb4\xa4\x0e\xef\x44\x61\x19\x36\x4f\x25\x12\x05\x90\x84\x22\x34\xd6\x67\x59\x5a\x86\x71\x0a\x73\xfc\x8b\x7d\xc4\x67\xdc\xc3\x78\xb0\x31\x03\x40\xda\x39\x0b\x93\x04\x0d\x32\x4e\xf6\x39\xc7\x77\xa4\x24\x24\x6c\xc9\xb7\xe0\xff\xd7\xa8\x4d\x67\x9c\xc0\x30\x6f\xdd\x3c\x09\xcb\x70\x0c\xd3\x12\xe6\xa7\x24\xb9\x68\xbc\xc2\xb4\x5b\xc4\x19\xa4\xf1\x04\x48\xf5\xd3\x72\x9a\x48\x90\x29\x04\xa8\x93\x4e\xcb\x95\x25\x97\x89\x31\x11\x4b\x89\x55\x69\x96\xcf\x31\xb8\x26\x29\x43\xab\xef\x80\xa5\x4f\xdd\x29\xae\xe2\x72\x3c\x6b\x95\x38\x93\x27\xb8\x19\x87\x05\x24\x5e\x7e\x1a\xf5\x70\x6a\xf0\x13\x93\xb5\x58\xd2\x84\x1f\xbe\x54\x07\x83\x01\xbd\x46\x39\x07\x50\x2d\xf8\x5c\x6f\xf9\x9d\x71\x16\xc1\x36\x3a\xa4\xa2\x25\x5d\x76\x52\xf8\x91\xf1\x99\x9d\xc7\x17\x49\x9c\x4e\x83\x4e\x14\x47\x8f\x17\x0b\xd4\x77\xc1\x9d\x8b\x1c\x86\x1f\xee\xd0\xf9\x7d\xea\xec\xfb\x95\x9e\x78\x15\xd6\x88\xa9\x5d\x96\x70\x2f\x4c\xd3\x6c\x99\x8e\xa1\x25\xaa\xf6\xeb\xa4\x2d\xbf\x7b\xf1\xfa\xfc\xf1\xf1\x87\xa7\xf6\x10\xd8\x47\x85\x0c\xda\x5f\xc6\x65\x62\xcb\x5a\x36\xf4\xb5\x3e\x51\x16\x14\x52\x2f\x1d\x4f\x1a\x43\x28\xb4\x3d\x39\xcc\x53\x3e\x52\x63\x33\x98\x8a\x40\x6a\x18\x3d\x97\x25\x6c\xf3\x0e\xf5\x2d\x81\x1f\x6b\xf6\x0c\xdc\xaa\x45\x38\x85\x6d\xda\xb2\x26\x32\xd4\x32\x9a\x5f\x0f\x9c\x03\xd7\x66\x17\x98\xf6\x20\x06\x19\x58\x82\x31\x88\xc0\x1c\x2c\xc0\x04\x5c\x08\x94\xfb\x19\x43\xb9\x0f\x6e\x52\x17\x0c\x31\x7a\x42\x06\x95\x49\x9d\x30\xc4\xa9\x03\x86\x38\xd5\x61\x88\x53\x05\x86\x38\x35\x61\x88\x73\x09\x86\x98\x57\xf6\xf2\x2f\x48\xfe\xff\x0e\x48\xfe\xeb\x6a\xf9\xb6\xfc\xfe\xfe\xa2\x3f\x79\xf2\xb8\x31\x77\xa1\x15\x00\xdf\x06\x11\x2f\x65\x26\x59\x19\x65\x1d\xc8\xf2\xd2\x6b\x27\xa0\xa7\xc0\xd8\xb3\x73\xfe\x3c\x8b\x30\x49\x0a\xcf\x3d\x19\x2f\xf3\x1c\xa6\x25\xcd\x3d\xcb\xe1\x24\x87\x58\x6f\x45\xfa\xe9\x3b\x2c\xc2\x80\xff\x58\x08\x44\xc5\x91\x2a\xa0\x10\xd0\x05\x96\xba\x24\xae\x60\x19\x92\x8b\x8f\xbc\x45\xbf\x39\x4d\xb7\xf4\x1c\xfd\xaa\x74\xa9\xd4\x78\x71\x69\x61\x7b\x6c\xbf\x50\xdd\x0a\xd2\x03\x92\xf0\x96\x82\xfd\x2b\x65\xb6\x82\x0e\xaf\x41\xc1\xcb\xb4\x54\x58\xa3\x6f\x2c\xd0\x15\x31\x0e\xa6\x83\xbd\xff\xf9\xe6\xa6\x35\x7c\xdc\xfe\x25\x6c\xff\xde\xe9\xb6\xef\xbf\x6f\x8f\xbe\x0d\x56\x7b\x53\x0c\x11\xff\x5a\x40\xc4\x1b\x5a\x6f\xb6\x2c\xd1\xd9\x23\xe0\x98\xf1\xb6\x27\x60\xee\x07\x1c\x44\x5e\x7f\x20\x4e\xcb\xc4\x47\x0b\xc6\x7e\x1b\xa6\x48\xb3\x41\x05\x14\x3a\x4c\x7d\xac\xc1\xd2\x67\xda\xef\xa5\xf6\x7b\x5c\x0b\xb6\x3e\xb8\xb1\xe9\xa0\x33\xaa\x9f\xb1\x06\x03\xc2\xc2\xa4\xde\x40\xd3\x6a\xae\x5d\xc7\xcd\x03\x0b\xed\x2a\x6b\x15\x98\x68\x37\xde\xd3\xb5\x70\x41\xaf\x63\xcd\x0c\x95\xf1\x03\xbc\x26\xea\x27\x7d\xb5\x43\x42\x16\xde\xc2\xe9\xd3\x8f\x8b\xa7\xe4\x5a\x6b\x0a\xe0\xe0\x01\x0c\x56\x53\x58\x7a\x64\xe6\x4b\xe8\x66\x98\xa9\x8a\x54\xbf\x43\x6e\x3e\xcb\xf2\x96\xc0\xa5\xc7\x2a\x2a\x7e\x15\xd7\xa1\x25\xc8\xb5\x48\xa5\x02\xb9\x20\x72\xe9\x0e\x7b\x42\x14\xa0\xea\xca\xec\x7b\xe4\x1f\xcb\xf7\xee\xd8\x6a\x87\xcb\x46\x0f\x43\x5a\xa9\x55\x49\xb6\x70\x4e\x8b\xc5\x38\x91\x5b\xfe\x37\x37\x3e\xda\x5d\xe8\xf7\x68\x4f\xe1\xa7\xa5\xce\xeb\x94\xad\xff\xe0\x01\x2a\x3a\xdf\xdc\xa8\x35\x58\x75\xbe\xb9\x81\xab\xff\x80\xd2\x80\xf6\x67\xb5\x09\xa3\x08\xcb\x08\xad\xea\xc0\x05\xf2\xcf\xde\x23\x16\xbc\x8a\x57\x57\x20\x1a\x5c\xb6\xc6\x32\xec\x3d\x9f\x5e\xdb\xa3\xfd\xcf\x6d\x65\x63\xb8\xbe\x7c\xdb\xa2\x17\x7a\xd1\x64\x92\x0f\xc3\x6d\x0b\x9e\xe8\x05\xf3\x75\x32\x4c\xb6\x2d\xfb\x42\x2f\x9b\x2d\xb5\x61\xb1\x6d\xd1\x5a\xc1\x68\xf8\xe2\xf5\x7c\x07\xda\x3b\x01\x18\xcb\x34\x07\x5a\x99\x82\x49\x21\x6b\x58\xb2\xa0\x51\xa8\x2a\x5f\x21\x6b\x58\x36\xfc\x84\x42\xd6\xa0\x7c\x65\x2c\xeb\xf7\xaf\x2b\xc9\x1a\xae\xc1\xeb\xf5\xa8\x8b\xd2\x7e\x7b\x5b\x0e\x96\xff\x3a\xd9\x8f\x9e\x84\x3f\x3d\x77\x1c\x2c\x4b\xaa\xae\xa8\x27\xcc\x1c\xb3\x77\x57\x21\x57\x18\x6a\x59\xcf\x7a\xd6\xa4\x08\x48\x16\x2f\xad\x9e\xbe\x4c\x49\x7b\xe4\x08\x88\x5a\x9e\x16\x1a\x68\x52\xc3\x7e\xc9\x8f\xb2\x7a\x52\xa2\xe3\x14\x5b\x37\x85\xd0\x00\xa9\x24\x65\x31\xad\x6b\xd8\x3b\xc6\x4e\xa8\xfe\x01\xf0\xc3\x3c\x0e\xdb\x49\x7c\x89\xe1\xe0\x0a\xa4\x3d\x11\xde\x26\x71\x33\x2c\xb3\x79\x3c\x46\xba\x64\xbe\xd4\x23\x12\x7c\x05\xdb\x48\x41\xd1\xf3\x5f\x85\x97\xf1\x34\x2c\x61\xe4\x95\x99\xe7\xf3\x3e\xb1\x68\xb9\xb5\xa3\x49\xd7\x9c\xda\xa5\x03\xbb\x84\x77\x84\xcd\xb8\x14\x10\xa9\xb1\xda\x27\x2d\x9c\xaf\x76\x86\xa7\x40\xb8\x17\xa1\x35\xe1\xda\x72\x90\x77\x64\x61\x4b\xe5\xe0\x7c\x6b\x5b\x7a\x35\xce\x3a\x07\xe1\x9d\x5d\x89\x82\xa4\x5a\x14\xfc\x7e\x7d\xd5\xeb\xbe\x3b\x58\xd8\x45\x01\xe1\xd0\xc4\xd9\x40\xec\xaf\x3a\x10\x36\xfa\xe4\x17\xed\x96\xe6\xbe\x15\xf7\x81\x83\xd9\xe0\xf7\xc8\x47\xf9\x7b\x76\x7c\x0d\x25\xc2\x9c\x7c\xc9\xea\xa3\xa6\xc7\xb9\x7d\x15\x1a\x4d\xbc\x61\x04\x58\x31\x41\x43\x62\x8b\x71\x90\x31\xe3\x12\x97\xc3\xb8\xfc\x49\x0e\x61\x09\x3f\x96\x6d\xda\x47\x36\x96\x6c\x93\x8f\x5c\x4e\xa0\x5e\x1f\x9a\xae\xb7\x93\x7c\xca\x1e\x51\xe2\x68\xa8\xa3\x76\xb7\xbc\xa1\x45\x96\xdb\xc0\x55\xdc\xc3\x49\x9e\xbf\x9d\x6d\x74\x86\x27\xf5\x64\x3e\xbe\xb8\x78\x86\xbf\x0d\xa3\xc6\x44\x81\x8e\xf5\x80\x56\x50\x1b\xbd\x62\x8d\x41\xe2\x2f\x26\xee\x8e\x46\xb7\x25\x74\x22\x0d\x4b\x45\xa0\xc9\x88\x73\x7e\x47\x7c\xba\xc3\xc3\x69\x94\x30\x14\x16\xbd\x84\xde\x99\x67\x69\x67\x19\x53\xce\x5e\x18\x11\x5f\x9a\x04\x37\x62\x0f\x08\xa5\x15\x73\x45\x9d\xb2\x07\x96\x7a\xc3\xa4\x8e\xef\x4a\x0d\xb8\x6f\xfc\x4d\x06\x84\x2f\xb6\x4d\x10\x36\x4d\x08\x23\xcb\xa4\x65\x43\xe3\x9c\xb6\x24\xde\xe1\x19\x13\xc2\x62\x2c\x95\x79\x29\xed\x2f\xe4\x24\x27\x66\xf1\x70\xa8\x92\xff\xab\x81\x30\xdd\x91\x86\xbf\xab\x62\xf1\xf6\x75\xac\x4f\x29\x5f\x55\xce\x3d\xb5\xd5\x5c\xe8\x53\x96\x9b\x0a\x91\xb3\xfc\x0c\x5b\x0f\x3d\x9d\xd9\x12\xa8\xe6\x28\x19\x17\xcc\x2c\x9e\x20\xba\x2a\xa0\x12\x0a\x5e\xa9\xa6\xad\x5a\x60\x48\x47\x23\x4d\x55\xad\xc4\x97\xd4\x27\x1e\x0f\x0c\xec\xb2\xe0\x98\x76\x98\xd8\x57\x99\x78\x51\x09\xca\xa1\x49\x43\x3d\x25\x00\x87\x19\xfb\x50\x81\x8f\x93\xe4\x99\x39\x3d\x37\x8f\x3b\x21\x13\xcd\xa3\x53\xde\xa8\x5e\x83\x80\xdd\xba\xe1\xe3\xae\x9d\xa0\x52\x70\x6e\x0d\x3a\xc4\x71\xce\x44\x84\xc1\xaf\x59\x9c\xfa\xc0\x27\x90\x24\x3c\x56\x41\x56\xea\xdc\x91\x0a\x98\x0f\xb3\xcc\xe3\x74\xda\x2e\xf3\x78\xee\x80\xf5\xa4\x91\x0f\xf1\xa4\x89\x1a\xac\x2b\x9f\x0a\x15\x66\x31\x68\x99\xcc\x97\x2e\x93\xe1\x14\x96\x9e\xd8\x5c\x74\x1f\x31\x36\xf5\x90\x71\xa7\xb2\x7b\x41\xb5\xce\x4f\x9f\x6e\x98\xd7\x75\x38\xa2\x9e\x9f\xe1\x88\x79\x6c\x5a\x5d\x90\x76\xa2\x78\x32\x09\x5a\x5c\x05\x05\x90\x51\xab\x13\xac\xf4\x07\xdd\x4f\x9f\xa8\x42\x0b\xd3\x32\xc7\x04\xef\xda\x37\x83\x4e\x91\xcd\x61\xab\x35\x84\xa0\x1c\x05\x83\x07\xbe\x5a\x07\x9f\xb0\xdc\x73\xdf\x09\xf3\x36\x63\xe3\x1f\x9d\xad\xdc\x70\x88\xab\x44\x2f\x06\xe6\x97\x56\xfa\xd2\x69\xf1\x93\x37\x2e\xd4\x56\x39\xee\x87\x82\xa0\x0c\x06\x0f\x6e\x0a\x58\xbe\x8b\xe7\x30\x5b\x96\x2d\x42\x4f\x4f\x31\x43\x79\x17\x7c\xfa\x34\x1c\x05\xa0\xf7\x7f\xcb\x60\x15\xac\x56\x20\x1e\x84\x92\xf9\x21\x1b\x98\xcb\x17\x2c\x07\xc3\x7c\x04\xc6\x83\x75\x76\x8c\x50\xb1\x90\xe9\xc5\x04\x20\x52\x3e\x35\x1f\xdc\xac\x80\xec\x54\x1b\x3b\x9c\x6a\xf3\x21\x1c\x0d\xc6\xd4\xa9\x36\x57\x9d\x6a\xf2\x4f\x30\xd7\x9d\x6a\x73\xa7\x53\x6d\xfe\xe9\xd3\x5c\x77\xaa\xcd\x55\xa7\xda\x7c\xb0\xac\xe3\x54\x93\x6d\xa9\x65\x2b\x06\x19\x80\xc1\xa7\x4f\x70\x15\x80\x79\x00\x22\x69\x62\xcc\x35\x97\xd7\x9c\x3a\xd5\x94\xeb\x0f\xe7\xa6\x53\x2d\xe2\x4e\xb5\x79\xb5\x53\x4d\xff\x82\xfd\xa4\x86\xaa\x38\x47\xcd\x23\x4e\xb5\x90\x9c\x5a\x25\x17\xae\x74\x02\x2d\x2a\xad\x4c\x09\x28\xd6\x5b\x99\x5c\x5b\xff\x6d\x31\x39\xfd\xf6\xfc\xdb\xd7\xef\x7e\xbb\xf8\xf7\x1a\x46\x08\x89\xd1\xb9\xc2\xff\x27\xb6\x56\xfd\x0c\xa9\x6c\x9e\x94\x37\x82\xec\xa1\x5d\x6d\x0b\xed\x9b\xbb\xa5\x05\x5b\xca\xc6\xd6\xdf\x64\x9b\xc9\xd2\x0d\x45\xbd\x65\x10\x6f\x83\xf9\x83\x98\x2d\x76\x3a\x9b\xa8\x9c\x1e\x40\xbc\x89\xe8\x93\x8a\xca\x5b\xf6\x58\x0b\x0e\x1e\xdc\x2d\x85\x2f\x05\x92\xa6\xa0\x17\xcb\x3b\x52\x59\x83\x07\xda\x76\x03\x03\x56\x02\xda\x61\x52\xdb\x0e\x83\xf1\x9b\xcb\x56\xca\x37\xb1\x54\xdf\xc4\x4e\x5b\xf4\x12\x16\xee\xfc\xb2\x10\x57\x10\x0c\x53\x90\x8f\xc8\x86\x80\x0d\x5e\xad\x9c\xbc\xd1\x99\x87\x0b\x54\x79\xba\xe7\x86\x83\x9b\x0f\xf0\xfa\x34\xa5\xbb\x29\xe4\xe1\x0f\x61\x87\xa9\xbb\x03\xcb\x0e\x98\x3e\xe4\x05\x82\x21\x1c\x05\xa7\xbd\xc1\x60\xc0\xbe\x40\xaa\xf3\x30\xef\xf0\x10\x29\xe5\x59\x80\xe3\xa0\x86\xa3\x3a\xb2\x64\x9c\xc3\xb2\x4d\x72\xe1\x6f\x8b\x00\xf9\xf7\xf8\xdd\xc9\xeb\xf3\xc7\x87\x8d\x83\x05\x1c\xa8\xad\x68\xaf\x09\x4d\x5d\x9c\xa9\xee\x02\x25\x08\x67\xf1\x63\x5c\x9e\x8b\xec\xa3\x6f\xc1\x2a\x70\xe7\x36\xbf\x15\xdf\xb0\x3d\x2e\x21\xf9\xca\x78\xa2\xcd\xe8\x45\x1a\x89\x17\x63\x5c\x77\x02\x16\xdf\x14\xe7\xbc\x98\x85\x51\x76\xd5\x66\xe3\x7b\x5b\x66\xd8\xf1\xd5\xe5\xcb\x6f\x8f\x9e\xbf\x71\x85\xdb\x95\xd7\x09\x2c\x66\x10\x12\xa3\x2f\x69\xc4\xdb\x0c\xe3\x95\xba\xa7\x1f\x35\x33\x48\xc1\x77\xb5\xf3\x4b\xfa\x6a\xc4\xde\x74\x19\x47\x18\xea\xb2\x80\x79\xf9\x1d\xe6\xc4\xc4\xd6\x93\xff\x33\x5e\xe6\x45\x96\x9f\x76\xff\x8f\x4f\xd8\x39\xea\xa5\x3e\xf5\x24\x1f\x4d\x13\x33\x86\xea\x67\xe8\x6a\x16\x02\x8b\x7b\x61\x2d\x29\x8f\x65\x8b\x6d\x14\xd8\xef\xde\x7d\xc3\x28\x5b\x94\x6d\x32\x70\xcc\x0f\x11\xa7\x6d\x48\x82\x4c\x1b\xed\xcc\xb6\x29\xfb\xf5\x36\x64\x34\x34\xed\xf1\x2c\xcc\xcb\x3d\xa2\xee\xdc\x96\x35\x74\xf9\x43\xf7\xc5\xbf\x9e\xee\x97\x8d\xa5\x34\x97\x7f\xbb\x92\x75\x8e\x2e\xda\x35\x3b\x46\x14\x47\xcf\xf1\x8a\xa4\x91\xcb\x0d\x82\xd5\x71\xe5\x3a\x61\x14\x91\x94\xa1\x96\xa0\x4f\xa0\x4a\x0f\x89\x9d\xf9\x08\xc7\x24\x36\x64\x05\xae\xe2\x24\x79\x42\x42\xaa\x1a\x7f\x87\x1e\x14\xa5\x4f\x61\x77\x77\x63\x92\x0a\xb9\x63\xa7\xcb\x5b\xc4\x39\x17\xfe\xfa\xfd\x9b\x97\x93\x6f\x27\xb7\x6a\xea\x49\x3d\x74\x2b\x66\xde\x1d\xd9\xe4\x73\x47\x9d\x86\xff\x40\x75\x95\x67\xa1\x41\x37\xe9\xb3\x2b\xfe\x60\x80\x66\x4f\x36\xf1\xb0\x9e\x1b\x3d\x24\xff\xa8\xdf\x3a\x25\x17\x57\xda\xcc\xdd\x74\xa1\x90\x09\xac\x55\xd2\x36\x7f\xef\xd4\x9e\xbf\xb7\x64\xe6\x2e\x7f\xfe\xf5\xe7\x1f\xa6\xd7\xcf\x36\x9a\xb9\x8a\xc9\x9c\xe6\x62\x90\xa8\x0b\xfe\x27\xc3\x7a\x07\xe6\xa3\xf2\x34\x25\xaf\xe1\x0b\x3c\x3e\xb5\xfa\x35\x7a\xd4\x5e\xf7\x9e\x15\xf8\x4c\xb8\x0c\x58\xed\x2a\x36\x72\x96\xee\x65\xb1\xca\x6e\xb8\x30\x77\xb7\x24\x71\x79\x8e\xac\x29\x52\xef\x00\x48\xcb\x36\x4b\xcb\x3c\x4c\x0b\x9c\x6c\x26\xaf\x81\x55\xd3\x5c\x27\x6a\xef\x2d\x06\x37\x2b\x7a\x01\x8f\x22\xfa\xbd\xaa\xe2\xee\x11\x26\x54\xf4\xd2\x3c\x1c\xcf\xe2\x94\x65\xe8\xd0\x5f\x9d\xa2\xcc\x16\x2d\x66\xf2\x62\x8f\x52\xab\xd7\xbd\x7b\x64\xf9\x15\xf9\x98\x5d\x52\xee\xd3\xea\xd1\xa2\x06\xd2\x0a\x8e\xd3\x12\xe6\x8b\x9c\xb1\x06\x15\xf9\x18\xdc\x64\xe9\x3b\xd1\x1d\xe2\x7c\x5c\xe2\x8c\xac\xb3\x65\x51\x66\x73\x4a\xdc\x24\xba\xcd\x07\x37\x11\x2c\xc3\x38\x39\x85\xab\xe0\x0e\xe5\x6c\x12\xb7\x5b\x65\x20\xf2\xe0\xde\xe4\x18\xcf\x1e\x46\x9f\x3e\xc1\x0e\xed\x31\x6e\xff\x2c\x07\x0f\x6e\x2c\x32\x4d\xe9\xde\x61\x89\x37\xca\x11\xed\x21\xfd\x72\x8b\xfc\x0b\xb0\xac\x2b\xe1\xc7\x12\xc0\x0e\xfe\x62\xb0\x0a\x80\x23\x53\x0a\x06\x2b\x90\xa5\x58\x92\x9d\xb6\x20\xe8\x74\x3a\x7c\xb7\xa7\x63\x38\x84\xa3\x16\xbe\x4c\xd2\xc3\x36\x51\x31\x5c\x59\x5a\xf2\x30\xd3\x11\x3b\x47\xb7\x3e\x7d\xd2\x66\x40\x58\x42\x75\x28\xd1\xb5\xbc\x6c\x6d\xac\x87\xa8\x93\x6b\x05\xb8\xe6\x63\xcb\x7b\xe3\xfd\x0c\x47\x83\x72\x05\x64\xed\x45\x49\xc1\x8b\x60\x02\x4b\xe8\xe9\xef\xe0\xd2\x49\x0f\xdb\x0a\xe7\xbd\x2c\xca\xd6\x1f\xd6\x8a\xe6\x6f\x54\xa7\xeb\x29\xdd\xc7\xa6\xc4\xa0\xd4\x3a\x40\x10\x45\xc0\x95\x4c\x73\xe6\x2a\xf9\xde\xbd\xb2\xb3\x20\x13\xf9\x09\x99\xd6\xf7\xee\xb5\x24\x57\x08\x25\x3e\x4b\xb3\x08\x8b\xbf\x7b\xf7\xfc\x90\x64\xdf\x69\x37\x3a\x65\xf6\x22\xbb\x82\xf9\x59\x58\xc0\x56\xf0\xe9\x93\x5e\x6a\x8b\x05\x20\xb3\x8a\xe0\xef\x37\x27\x32\xc3\xad\xbf\x2d\xbb\x6b\xf6\x38\x8d\x2f\xba\x3f\x3a\xb2\xe8\xea\x9d\xdc\x05\x90\x41\xed\x48\x8c\x5a\x04\x31\xeb\xf6\x3d\x12\x73\x19\xa7\xd3\xe6\x5e\xc3\x72\x9b\x63\xaa\xb9\xcb\xd1\x2d\xad\xfe\x3e\x57\xb1\x03\xc5\x93\x16\x77\xa6\x90\x9d\x00\x0b\x1b\xa2\x63\x62\xb7\x26\x1c\xdc\xed\xde\xd1\x37\xaa\x72\x3c\x83\xc5\x43\xba\xa3\xd0\x4f\xb3\xcb\x2d\x51\x0e\x90\x1f\x67\x3e\x1d\x56\x4a\x9a\x95\x2f\xc9\x1d\x1c\x80\x7f\xb7\x56\x59\xe2\xa5\xc0\x94\xab\xd2\x10\x6d\x70\x9a\x2a\xc3\x8b\x76\x1a\x5e\x6e\x9a\x1f\xf8\x85\x48\xed\x1e\x2f\x5f\x75\x0f\x7f\xff\xf0\x9d\x7d\x09\xd1\x28\x28\x9e\x60\x4f\xb3\xf1\x1f\xb1\xb4\x7f\xd9\xa7\xe3\x88\x18\xa4\x6b\xed\xc8\x44\x45\xd3\x41\xb2\xf1\xab\xd7\x32\xa6\xed\x70\xe8\x67\x93\x09\x05\x59\x2d\xf3\x25\xc4\x6b\xaa\x0c\x2f\xfc\x7a\xb1\xc2\x3d\x54\x71\x12\xac\xb8\x0f\x0e\xad\x69\x62\xf4\x8b\x92\x46\x8b\x03\x32\xda\x6d\x66\xab\x6f\x5f\xc5\x51\x39\x3b\x15\xc1\x19\xe4\x0d\xe0\xe3\xeb\x78\xe5\xff\xdd\x07\xf2\x0b\x09\x9c\x94\x96\xe7\xd1\x65\xdb\xe3\x33\x18\x4f\x67\xb6\x17\xc8\x0d\xdb\x2b\x65\xb6\xb0\x3c\x5f\x66\x0b\x99\x9a\x57\xb0\xf9\x2a\xd1\xc8\xd8\x5e\x0e\xfc\x73\x88\x0e\x70\x61\x4e\x40\x74\x09\xfd\xba\xdc\x01\x74\xf6\xfa\xc0\xf7\xc2\x34\x9e\x87\xd8\xab\xab\x52\x04\x1e\xb9\x0c\xec\x55\x41\x59\x0a\xe2\x74\xdf\xfc\xd1\x17\x0c\xb6\x8d\x43\xb1\x58\x74\x36\x75\x20\x2a\x8d\xb2\x44\x46\xed\x6b\x01\x48\x6a\x68\xd4\x21\x31\x7c\x6a\x11\xeb\x2a\xbf\xb1\x6a\x28\x95\x6f\xea\x51\x53\xfc\x19\x6b\xe3\x44\xd0\x95\xa8\x0f\xef\x69\xe2\xe3\x3c\xb2\xe0\xf4\x1c\x6a\x76\x5e\xf1\x55\xf2\xce\x89\x2d\xe6\xde\xd1\x68\xa3\x2c\x99\x49\x0e\x0f\x80\xfa\x05\x34\x50\x32\x5f\xbe\x0b\x1d\xd6\x11\xf6\x64\x6b\x8e\xc2\x7d\xdd\x95\x80\x13\x15\x5e\x6a\xb5\xba\x87\xe2\xd2\x7d\xf7\x30\xd4\x69\x92\x2c\x74\x1e\xcd\x72\x38\xf1\xa5\xf2\xc8\xef\xe6\x28\xa9\x94\xf5\x58\xa9\x51\x25\x7c\x8b\x05\x54\xb6\x32\x38\x6a\xbf\x21\x07\xb2\x15\x2b\xa6\xfa\x7c\x9e\x2c\xa7\xf1\xe4\x9a\xd9\xd8\xf9\xdc\x91\xe9\x8f\x27\x1c\xf9\x25\xcd\xb2\x05\x46\x54\x89\xda\xcb\x05\x4d\x17\xe5\x44\x94\x72\xe2\x00\x27\x51\xb6\x07\x53\x15\x38\x52\x2b\xca\xe6\x6d\x8c\x63\x12\x73\x58\x99\x06\x7a\x92\xb2\x01\x73\x4d\x89\x44\x50\xe5\x96\x18\xaa\xff\x9f\xbd\xb7\xef\x6e\x1a\xc9\x12\x87\xff\xcf\xa7\x30\x1a\x36\x2b\x2d\x65\x25\x4e\x80\xa6\xbd\x3f\x41\xd3\x40\xcf\xb0\x4b\x03\x4b\xe8\x99\xdd\xf1\xe3\x03\x15\xa9\x6c\x6b\x90\x4b\xea\x52\x39\x89\xdb\xd1\x77\x7f\x4e\xbd\xaa\xf4\x66\x4b\x4e\x02\xf6\x0c\x73\xce\x34\xb1\x54\x55\xaa\x7b\xeb\xd6\xad\x5b\xf7\x35\x33\x6a\xb5\xad\xf5\xda\xc0\x80\x6c\xb6\xb4\x56\xd3\xf6\xd6\x49\x02\x88\x7d\xc6\x6c\x63\x8c\x50\x7e\x57\xd7\x5c\xd4\x76\xc3\x08\x05\x69\x9f\x20\x59\x16\x13\xd5\xb5\x8c\xe0\x32\x5e\xd0\xf4\x68\x4a\xb8\xad\x29\x4f\xb8\x59\x13\xaa\x20\xc2\xf7\xbf\x52\x98\xc2\x5f\x97\x8f\x7f\x3b\xff\x47\xfc\xd7\x7a\x09\xc4\x47\x51\x64\x54\x81\x6b\x19\xa2\xa0\x4e\x2b\x75\x08\x0c\xc4\x89\x56\x5a\x90\x1e\xa3\x2f\x82\xfc\xa5\x1f\x85\x78\xda\xcb\x39\xd1\x43\x79\x02\x9c\x8a\x9d\xd1\x87\xba\x6a\x5c\xb1\x5a\xed\x63\x5e\x65\xe6\x21\x78\x34\x2e\x8b\x18\x3f\x88\x24\xc8\xfa\x64\xe7\x39\x41\xcd\x13\x3d\xb9\x2a\x1e\xa6\x0f\xab\x27\x66\xd1\x15\xdb\x22\x28\x0d\xff\x68\xa8\x13\x23\xdf\x55\x58\x59\x21\xda\xbd\xc6\xdb\x45\x1c\xca\x0a\xdc\x1f\xb7\x70\x49\xf7\x61\x9e\x67\xf9\x44\xf0\x7a\xa3\x54\x63\x35\xb3\x39\x6c\x99\x9c\x3b\x9f\x6f\x4b\x7f\xd0\xf5\x86\x48\x9e\x23\x1a\xc1\x3a\x77\x72\xfd\xbe\x2e\x12\x45\x1f\x60\xeb\x80\x6a\x9b\xec\x7a\x23\x4c\x4d\x0b\x73\xba\x8d\x21\x37\x4f\x8b\xcd\x3d\x23\x8c\x4c\x9a\x0a\xc6\xe7\xc6\xa3\x9b\x16\xd0\x2d\x3f\x78\xa2\x58\x10\x86\x34\xbc\x40\xfd\xd4\x27\xb1\xc8\xc0\x64\x84\xe3\x4d\x65\x4a\x85\x9f\xb8\x36\x05\xd3\xbe\xa0\x70\xeb\x27\xd1\x9a\x4b\xd2\xc6\x4f\xca\xcf\x16\xf9\xeb\x85\x4e\xc5\xec\x47\x21\xcf\x2b\xf4\x07\x7a\xa1\x5c\xd6\x47\x16\x15\x09\x44\x79\x31\x01\x55\x54\x40\x95\x10\xab\x11\xec\xf8\xe5\xc3\x1c\x77\x5d\xed\x93\x9a\x0f\x76\x4d\xa2\x5e\x43\x74\x1c\x85\x52\x4a\xae\xb9\x20\x15\x7e\x3c\xe2\x25\x13\xbb\x8b\xc9\xf9\x27\x4f\x4e\x38\xb7\x92\x6e\xf8\xf2\x12\x34\x6e\x2a\x64\x54\x04\x9e\x07\x1a\xd4\x24\x2c\x6e\xbd\x61\x5a\x25\x4e\x57\xc1\x14\x62\x8a\x22\xa2\x64\x0c\x74\x8c\xe9\x57\xda\x41\xc1\xda\x1d\x54\x4d\x22\xde\x04\xb6\xa8\x97\xa1\xea\x16\xeb\x03\xa5\x2e\x28\x42\x56\xb9\x6f\xa0\xbd\x32\x79\x6e\x9b\xc4\xbf\x1c\xb3\x52\x8f\xe6\x2d\xb3\x17\x6e\xc3\x50\xd6\x48\xa7\xeb\x57\x7a\x83\x17\x95\x51\x30\xb6\xa9\xb8\xf0\x0c\xa6\x79\x61\x58\x2e\xe6\x4a\x8f\x1c\x75\xb5\xd6\xd2\x6a\x8c\xfb\x97\x21\x0e\xe2\x4b\xd1\xeb\x05\x54\x55\x64\x3f\x49\x16\x76\x26\x38\xd8\x27\xc1\x4c\xde\x08\x06\x26\x7f\x7d\xe4\xfc\xeb\x13\x13\x69\xd2\x06\xc9\xb7\x9b\x78\x5b\x2b\x60\xea\x3c\x2a\xa9\xa7\xfd\x05\x73\xa7\x71\x9e\x29\x0f\xd2\xd7\x14\xcd\xcf\x18\x70\xc2\x75\x79\xad\xe6\x30\xaa\xa6\x1e\x84\xda\x91\xb2\x60\xb6\xde\x90\x62\x50\x68\x52\x06\x83\x47\xc7\x80\xc4\x97\x7f\x11\xd2\xd1\xa3\x63\x30\x87\x57\xfa\xc7\x31\x90\xcb\xc5\xb3\x19\x80\x1c\xc7\xc3\x7b\x83\xae\x66\x34\xb6\x88\x79\x92\x3c\xf6\x8b\x2b\xf6\x6a\x2c\xe5\x42\xce\xec\x0b\x19\xd9\x1a\x73\x0b\x95\x46\x9e\x2d\x60\x9a\x6a\xbd\xa0\xd0\xfc\x28\x7d\x61\xfe\x5c\x03\x65\x49\x65\x7b\x69\xd8\x32\xee\x3d\x0d\x0a\x75\x56\x11\xa2\x3d\xec\xa5\x2e\xaf\x6c\x24\x06\x34\x6c\xfb\x3a\xd5\x88\xc4\x8e\xe7\x79\xf4\xf0\xd0\xc6\x0f\x3c\xeb\x3f\xff\xe8\xf3\x75\x1f\xf6\x06\x96\x03\x70\xb6\xad\x55\x89\xbf\xb9\x2f\x1d\xa8\x72\xb4\xc9\x07\xb6\xf5\x27\xeb\x81\xc6\xaa\x6c\xad\x8c\x6e\x42\xfc\x34\xa7\x3e\x5a\x09\xfb\xc4\x50\x8f\x73\x11\xa2\x4b\x76\xeb\xb1\x9d\x6c\xec\x64\x80\xef\xac\x52\xae\x48\xdb\xc0\x20\xb0\x3e\x29\x25\xe3\x1c\x5e\x7d\x10\x85\x4e\x34\xa1\x58\x05\x0f\x06\xb5\x9c\x35\xeb\x91\x5a\x22\x98\x86\x56\x5e\xe6\x63\x39\x07\xe1\x84\xa7\x1e\xe3\x2b\xf0\x2b\xa4\x33\x77\x0e\xaf\xec\xd3\xd2\xfa\xba\x62\x42\xd7\xd7\xa3\x31\x50\x7a\x0f\xc7\x39\x50\x3d\x42\x76\x77\xc2\x0e\xa8\x7e\xc9\x20\x8b\xff\xc0\x0f\x4e\x7e\xcc\xc4\x62\xae\xe4\xf5\x80\x66\xec\x2e\x79\x19\x46\xd1\x07\xae\x6f\xde\xce\x06\x68\x32\x23\x39\xdb\xf4\x03\x9a\x86\xa9\x08\x08\xd2\x82\x77\x8d\x9a\xdb\xe4\x7e\x75\x5d\xd5\x61\xe5\x38\x19\xf8\xc4\xaf\x9a\x1f\xf4\x4d\xb3\x32\xd9\x30\x95\xd6\x43\x14\x48\xb3\xa3\x7e\x12\xe2\xe9\xf5\xb5\x42\x65\xfa\x67\xa1\x02\x3f\xb1\x9d\x67\x22\x4f\x0d\x12\xea\x76\xdb\x19\x8a\xb0\x23\xb1\xf9\x44\x8c\x8f\xe3\x14\x93\x75\x86\x7f\xa0\x82\x3d\x4f\x59\x8b\x0a\x34\x0c\x70\x0d\x15\x33\x22\xed\x33\x5a\x14\xcb\x8e\x1d\xed\xb5\x3d\x00\x91\xc7\x43\x73\x7e\x8e\x17\x38\x08\xf1\xf4\x05\x17\xf3\x3e\xf0\x5c\x3a\x20\xac\x8e\xf5\xef\x93\x38\xa6\x88\x8c\x48\x1c\x21\xcf\x92\xfc\x3f\xe4\xb9\xed\xff\xdd\x01\xb1\x17\xb9\x34\x4e\x1e\x84\xae\x10\x17\x05\x09\x3c\x80\x60\xa1\xf3\x71\xba\x21\xc6\x88\x88\x17\xfd\xf8\x40\x1a\x2c\xa8\x6d\xd2\xb9\x26\xc7\x63\xb0\xa8\xe7\x2a\x25\x66\x85\xe5\xf7\xfe\xc6\x98\xd4\x5a\x16\x25\xd9\xa0\xdf\xc8\x06\x9b\xf9\x95\xdc\x2d\x74\x13\xbf\xf2\x0d\x7e\x85\x0e\x0f\x6d\x5a\xe1\x57\x54\x7a\x38\x2c\x12\x46\x4e\x3c\x58\xd4\x76\xcc\x47\x67\xfc\xe8\x7c\x2f\xb5\x40\xb6\x93\x65\x80\x8b\xa0\x85\xf5\x37\xd3\x36\xf1\x54\xa4\xac\xc5\x2f\x21\x49\xe9\x73\xec\xcf\x62\x62\xa3\x9a\x44\xaa\x08\x50\x6f\x95\xe5\x79\xa5\xee\x53\xa2\x1c\x20\xee\x53\xe2\x72\x0e\xe5\xfe\xf1\x9a\xcd\x55\x46\xfa\x28\xab\xeb\xe1\xa1\xb6\xbf\x4a\xf8\x0e\x0f\xd1\x3d\xaf\xb2\xf3\x95\xe4\xe1\x38\xab\xf2\xa6\xd3\x42\x49\x02\x49\x8a\x5e\x63\xca\xe3\x1d\x94\xc9\x46\x0d\x0f\x88\x67\xc0\x14\xa7\x28\xe5\xde\x12\x16\x63\x34\x30\x7f\x95\x8a\x9c\xaa\x36\x16\x21\xe2\xce\x01\x6c\xa2\x63\x4e\x92\xb0\x40\x92\x4f\xbb\x11\xf6\xba\x91\x9f\xb1\x91\x61\x9a\xbe\x09\x53\xee\x76\x66\x5b\xf0\x3c\xbe\x40\x96\x33\x34\x5f\x08\xa3\xbc\x7e\x07\x4a\xa8\x1e\x00\xb5\x04\x1e\xc9\x50\x94\xa2\x5e\x23\xee\xf8\xaa\x94\x6d\xd8\x61\x6b\xd5\x9c\xf0\x34\x49\xeb\xf4\x72\x6b\xd4\x63\x5f\xcd\x34\x37\x38\xfa\xf2\xcb\xdf\x5e\x9f\x36\x98\xe6\x78\x14\xc3\xeb\x20\x37\xca\x55\x54\x64\x75\x4e\x65\x0f\x6b\x22\x9e\x8e\x4d\x7d\x99\x28\xdd\x11\xd2\x99\xc2\x4e\xcf\x54\x80\x35\x59\x7c\x76\x42\xb7\xf2\xb0\x85\x6e\xe5\x16\xf4\x23\xed\x75\x20\xfc\x13\xb2\x62\x47\xbd\x39\xec\xc7\x92\x85\xc6\x2a\x91\x66\x5f\xe8\x0e\x1f\x8e\xd9\x6d\x21\x9e\x4e\x23\x24\x9f\x3c\x19\x03\xeb\xd3\x16\x85\x2d\x7e\x28\x96\x5d\x29\xfd\xfd\x88\x6b\x32\xb7\xcf\x83\x50\x5a\xee\x3a\x55\xc2\x71\x17\x55\xc2\x2d\xab\x13\x1e\x16\x02\x1a\x4e\x37\xdd\x2d\xab\x41\xff\xed\xb5\x01\xbd\x0d\x45\x7f\x8a\x17\xfb\x41\xa9\xc6\x97\x56\x09\xd5\x04\x1e\x9d\xcd\xe2\xcb\x9e\x24\x0f\x4d\x75\x0d\xd5\xda\xdb\x85\xe4\x6f\xdc\xa6\x35\x08\xb0\xfc\x38\xe2\x33\x03\xd6\x69\x23\x0a\xaa\x01\x57\x75\x05\xd4\x4f\x6b\x72\x43\x9c\x70\xeb\x60\x9c\x1a\x79\x52\x8a\x25\xad\x4f\x34\xc2\x54\x15\xf7\x87\xdc\x70\xac\x2a\xbf\x6f\xc6\x6f\x6d\xed\xf5\xe3\xaa\xa6\x05\x68\x92\x29\xec\x8e\x56\xc1\x63\x65\x44\xa8\xfc\x2d\x5f\x93\x5e\xfe\x12\x06\xa8\x1d\xbd\xb4\x9d\x67\xab\x3d\xa9\xbf\xb8\x5d\xfd\x12\xa9\x99\xaa\xee\xd8\xa6\x09\xb5\x2e\x47\x52\xbb\x01\xd6\xbc\x68\xb3\x8b\xaa\x9f\x67\x93\xad\x53\x5e\x0d\x3a\xda\x6b\xd7\x04\x40\xe5\xfe\xd2\x52\x37\x15\xa6\x7d\x34\x4f\xe8\x52\x96\xa6\x28\x38\xed\x34\xe9\x9b\xb4\xa6\xab\xbb\x6d\xb5\x2a\x42\x15\xbc\xd1\xc8\x5a\x9d\x12\x6e\xf2\x46\xa3\xb9\x66\x69\x93\x3a\x49\x6d\xdf\x1b\xb9\x5a\x37\xe9\x88\x8c\xfb\x66\xf5\xba\xd1\xf9\x9e\x01\xb0\xec\xa4\xe6\x6c\x63\x50\xe7\x7f\x49\x5a\xc8\xae\xd3\x7e\x14\xa6\x3b\x13\xe0\x30\x7f\x70\xf1\xf6\xf7\x57\xc7\x7f\xaf\x17\x52\x29\x9c\xa6\xb9\x84\x9a\xa7\x02\x50\x0f\x72\x6b\x6e\xa5\x3e\x1c\xe0\x06\xa2\x66\x87\xb2\x1a\x6f\x91\xa2\x1f\xc8\x43\x30\xb2\x3e\xf2\x11\xaa\x09\x84\x6a\xbd\x42\x54\xc7\x1f\xd6\xb7\xbf\x99\xd0\xf5\xc4\x50\xf4\x6b\xe7\x19\x76\xde\xdc\x5c\x92\x3b\x61\xff\xe6\x49\xb8\x46\x27\x3f\x00\xe1\x22\xd3\x3c\xe5\x16\x45\x21\x25\x27\x7e\x54\xca\x47\xa5\xe8\x90\x7b\xc9\x14\xea\x4f\x3e\xdc\x94\x57\xa9\xa6\x8e\x1b\x4f\x2b\x68\xd6\xad\x36\x46\x1f\x88\x72\x6c\xd5\x7b\xc7\x40\x25\x2e\xd3\x59\x20\xf2\xb5\xaa\xbf\x89\x14\xc3\x5d\xf2\x5d\xe5\xaa\xef\xb9\x3a\x8b\x67\x61\x05\x0a\x22\xba\x4c\x69\x26\x76\xa7\x2b\x69\x14\x97\x8b\x69\xac\xb9\x12\x54\x92\x9a\x95\xcd\x55\xcd\xd9\xba\xca\x9e\x5e\xdb\x89\xe7\x05\x11\x61\xa0\x53\x66\x6c\x38\xd1\x6e\xe2\x69\xd4\xbe\x7a\xd7\x60\xb3\x47\x12\x8d\xe3\x88\x86\x89\x51\x15\xaa\xd9\x8f\xa8\x90\xe2\x89\xdd\x64\x39\x97\xd2\x56\x1e\xaa\x3c\x98\x16\x78\x4b\x17\x23\x93\x1b\x7f\xb3\xa0\x61\x9e\xd5\x90\x4b\xd9\xbb\x72\x2c\xfc\xfc\xfa\x18\xfd\x76\x39\x8f\xea\x8f\x85\x4f\x9f\x20\x99\x1e\x2b\xae\x6f\x1c\x08\x3f\x89\xf4\x42\xc0\xfa\x29\x89\xa0\x8f\x66\x71\x24\xf2\x12\xff\x24\x42\xd0\x44\x83\x30\x80\xca\x56\xf7\x53\x8c\xc5\xe5\x02\x14\x2b\x35\x2b\x2f\xd7\xfc\xc4\x99\xa1\x28\xa9\x9e\x25\x4f\x44\x5a\xd2\xbe\x1c\x64\x54\x74\x1a\xe5\x4e\x3c\x39\x6e\x2d\x60\xf5\x78\x7e\x09\xf6\xa8\xe8\xbd\x33\x90\xe9\x90\x35\x1c\xa5\xe9\x2b\x30\xd5\xbc\xc4\x74\xaa\xe0\x68\x30\x6b\xab\xa5\xf2\x8c\xc9\x46\x35\x69\x15\x99\x2f\xeb\x34\x0e\x4e\x74\xbd\x46\x79\x18\x18\x87\x8e\xe2\x13\x6a\x06\xfa\x4e\x76\x2c\x42\xf4\xda\x65\x16\x78\x54\x73\xe8\x0c\xc6\xf9\x95\x65\x9b\x63\xc6\xcc\x74\x5c\xe6\xd3\xfa\xc2\x73\x3c\xae\x64\xf6\x59\x57\xdf\xae\x45\xa1\x50\x73\xfa\x0a\x19\x9d\x78\x6a\x4d\x11\xe2\x93\x5a\x17\xaa\x8d\x87\xac\x3a\xcd\x18\x5d\x41\x82\x44\xc5\xe9\xc7\xfc\x56\x2b\x39\x73\x5e\xab\x53\x5f\x7b\x79\x42\x43\x83\x76\x0a\x41\x9a\x9a\x04\xc6\x79\x6f\x76\xb6\x58\x8a\xd0\x4b\xe7\xca\x93\x8a\xa7\x6c\x29\x19\xe8\x40\x1f\xee\x35\x2e\xcd\xe5\xa5\xa9\x49\xeb\xd9\xa5\x8e\xb4\x42\x47\xae\x36\x78\xcc\xef\xfb\x37\x99\x49\x01\x9b\x83\xc7\xc0\x2a\x6c\xd0\xf2\xd8\x8f\x8a\x9e\xf3\x0f\xc5\xd2\x58\xdf\x70\x21\xda\x3b\xbb\xdd\xf4\xe8\x6d\x79\xfd\x14\xa9\x14\xf9\xd9\x69\x78\x9d\x1a\x75\x13\xf3\x2a\x8f\x6b\xeb\x40\xea\xdb\x6b\xd7\xca\x31\xe5\x33\xef\xdb\x1d\xbe\x42\x2f\xbb\x5b\x29\x95\x3e\x1c\xf9\xbf\x27\x97\x6f\xff\xb6\x21\x27\xdb\x1a\x5b\x41\x61\x03\x8a\x60\x39\xb6\x6f\x2a\xea\xbb\x3c\x8a\xce\x7c\x59\x08\x3e\x91\x7e\xb2\x46\xfa\xfa\x02\xce\xa4\x4a\xfb\xa4\xd8\xa3\x46\x3b\xf7\xb0\xd1\x0f\x4a\xef\x53\x53\x1f\x97\x47\x1a\x94\xa3\x06\x8e\xeb\x79\x7e\xed\x6e\x93\x21\x25\x5a\x27\xf7\xb8\xa4\x93\x6b\x05\xcf\xfa\xa9\xd4\x9c\x9e\xb5\x17\x9e\x27\x8c\x0d\x96\x63\x18\x46\x23\x6b\x5d\xee\xdf\x92\x92\xbd\x5c\x9c\xa1\xbd\xef\x94\xe9\x16\xa5\x37\xad\x56\x42\x49\x7f\x7d\xb3\x4a\x54\xe7\x0d\x5d\xdd\x47\xb7\x12\xde\xb8\x49\x8d\x64\x38\x30\x29\xd7\xa3\x7b\x83\x06\xe5\x52\x8c\xcf\xa3\x05\xb9\x13\x85\x93\x74\xbd\x60\xb7\x09\x84\x11\x49\xf3\x36\xfa\x91\x7d\xd3\x6c\x1b\xf9\xe8\xca\x08\xeb\xac\xcd\x27\xb0\x31\x79\x07\x47\x97\xf0\xdf\x80\x41\xf0\x82\x91\xda\xbb\x05\x4d\xc3\x00\xbd\x91\x5f\xb2\x9d\x61\xf3\xa7\x1b\xfa\x54\xa7\x50\xed\x5c\x01\x08\x06\x32\x77\x08\x43\x59\x10\xfb\x7c\xa6\xb6\xa3\x36\x00\x40\xde\xd3\x5c\x6f\x17\xa6\xf2\x93\xa2\x0b\xdf\x80\x40\xb9\x65\x38\x46\x4d\xd3\xba\x86\x35\xd5\x4c\xcd\xbe\xb6\xcc\x98\x90\x2c\x0c\xef\x80\x9a\x87\xde\x3d\x69\xe9\xd6\x3a\xc1\x82\xcf\x14\x6f\x9b\x39\xcd\x2b\xe7\x64\xeb\x95\x94\xfd\x81\xe7\x79\xb6\xf6\x35\x21\x28\xba\xbe\xb6\x2c\xc7\xe5\x3b\xeb\xdd\xc4\xe6\xb1\x3a\x6c\x48\xcb\x39\x3c\x44\x95\x70\x71\x50\x37\xe3\xea\x33\x70\x7c\xcf\xf3\xd8\x19\x45\x61\x18\xb1\x71\xe4\xe7\xd8\x3e\xb1\x4b\x6e\x62\x02\xcc\x82\x9b\x18\x1a\xd7\x56\xb8\xad\x43\xe1\x7a\x2a\x6b\x81\xca\xee\xc1\xee\x34\xfe\x82\x70\x83\xba\x75\x37\x7c\x04\xde\x5e\x5d\x3e\x59\xcc\xe6\x1f\x1a\x7c\x04\x3a\x78\x06\x34\x46\x87\x9c\x56\xb4\x97\x8f\x6e\xa2\xbd\xd4\xfa\xa3\x27\xa0\x26\x24\x87\xdd\xc1\xa5\x0a\x50\xe3\x5e\xda\x90\x7e\x22\xc2\x09\x50\x06\x1f\x8f\xc1\xe8\x51\x51\x9f\xf7\xdc\xf7\x51\x9a\xc6\xe4\xf5\xcb\x21\x4c\x7d\x71\x08\x0f\x3a\xfa\x46\x97\xc1\xee\x96\x1d\x40\x03\x96\x93\xc6\x4d\x42\x60\xb8\x55\xf3\x78\xa3\x07\xf4\xa6\x0a\xf5\x2d\xe6\xd4\xd6\xcb\xa2\xd1\x30\x3e\x2b\xfa\x4d\xa8\x85\x58\x6f\x6c\xab\x74\x3c\xf3\xe3\x04\x75\xec\xa3\xb2\x67\xab\x20\xa4\xaa\xa9\xae\xa5\x43\xc8\x06\x14\xb5\x72\x32\xd8\xe0\x38\xb0\xde\xee\x0b\xa5\xcd\xf7\x71\x41\xe0\xb5\x02\xdf\x85\x7e\x94\xba\x7c\x43\xa4\x2e\x0a\x42\x6a\xe9\xc8\x0d\x13\xd5\x25\xeb\xb6\x2e\xe0\x5c\x71\xf1\x30\xc2\xd8\x2a\x17\xfd\x1f\x0c\xfb\x44\x61\x70\xf0\xa4\x54\xac\xab\x93\x15\xb5\x0b\x2a\x2a\x97\x62\x36\x97\x37\xb1\x0f\x79\xd4\xb5\x15\xf1\xbf\x80\x35\x8d\xe2\x73\x18\x59\x55\x85\xd0\x2d\x4e\xe5\x18\x58\x49\x49\x53\xce\x26\x53\xa0\xb9\x6e\xa8\x68\x11\xf2\xdb\x14\x08\x71\x93\x6c\x23\xbe\x0e\x54\x50\xd6\xe0\x34\x26\x54\xd4\x62\xe1\x92\xfd\x8c\xa0\x49\x9f\xc6\x56\x4e\x37\xe2\x72\x4f\xc9\x82\xc9\xfa\x48\x68\xcb\x3b\x89\xf3\xc5\xb3\xf3\x96\x8d\xc3\xb9\xd4\xde\xd9\x82\xca\x27\x26\x8a\xef\x1f\x89\xec\x55\x57\x32\x83\xd2\x1d\xde\xda\xf3\x07\xfc\xdc\x36\x27\x61\xa9\x22\x8e\x43\x2b\x0c\xd8\x40\x31\x1e\xae\x3e\xbc\x3a\xfb\xf8\xfc\xc3\xc7\xa1\x76\xa4\xb7\x44\x8a\x5f\x0b\xf8\x31\x0e\x86\x56\x98\x9e\x89\xdf\x19\xd0\x2d\x12\x12\x5f\x84\x8c\x8f\x67\xe3\x0c\x70\x90\xd2\xe1\x8a\x0d\x39\x5c\x65\x40\x74\x67\x7f\xa9\x66\xc3\x15\xfb\xd0\xd9\x6f\x2f\x5e\xbc\x3a\x3b\x1b\x5a\xff\xb8\xa4\x56\x96\x81\x7f\x5c\xd2\xd2\x0b\x3e\x57\xf6\x8a\xff\x31\x5c\x89\x2a\xfc\x1d\x90\x7c\xa3\xc2\x6a\xcd\xcb\xd5\x5c\x61\x2d\x2f\xa9\x9e\x97\x51\xf7\x8d\xb2\xeb\x9e\x59\x34\x01\x71\x47\xf0\xda\xca\x0c\x67\x42\x94\x92\xe3\xd6\x57\x6f\x90\x6d\xd8\x30\xf4\xf0\xd0\x26\x1e\xd1\xd9\xc8\xcd\xf0\x8e\x62\x09\xf4\xc6\x02\x10\x6c\x8e\x46\x41\x86\xcc\x71\x1c\x80\xdd\x64\x91\xce\xa4\xd8\xcc\x63\xcf\xe5\x60\x38\xaf\xbb\x1e\xec\x53\x91\xf8\xb9\x5a\x2e\xe5\xb6\xdd\x0b\x71\x0f\x3d\x5b\x33\x6b\xf9\xb5\x52\x1d\xd4\x72\x95\x54\xa3\x2e\x6a\xe6\x0c\xd1\x88\x8e\x3d\x0c\x50\xfe\xdd\xe4\x7b\x71\xfa\x7f\x8d\xe2\xf4\x93\x0d\x3e\x2b\xef\xa7\xf0\x84\xfc\x7e\x54\x7f\x69\x3a\x93\x09\x29\x79\xd6\x38\x4b\x79\x01\x5b\x46\x7e\x4b\x9d\x71\xcf\x4a\x20\x9d\x15\xcc\x96\x31\x46\x84\x88\xa2\xaa\x74\x99\xf0\x47\x81\xcf\x0d\x7a\x69\x02\x7d\x15\x06\x4a\x43\x29\xae\x56\xcd\x91\x46\x22\x4b\x2d\x83\xa6\x84\x0f\x21\x51\x6a\x19\xd9\x8b\xa4\xad\x61\xdc\x58\xb4\x4d\xd8\xa4\x80\x15\x87\x81\xaf\x83\x46\xf3\x83\x02\xa8\x53\xa5\x6b\x04\xa9\x10\x98\x95\x11\xb2\x18\xe7\xca\x0e\x28\x2e\x32\xeb\x33\x0a\xe4\xf5\xef\xe4\x93\xf1\xb8\x5c\x94\xc3\xaa\x75\x8a\xe6\x17\xbb\xa3\xfb\x2b\x8d\xb4\xec\xe8\xfe\x4a\xe0\x92\xfd\x15\xf8\x59\xc1\x79\x53\x5d\xd4\x72\x1c\x03\x4b\x63\x9e\x63\xa0\x62\xff\xfb\x01\x8c\xac\xf7\xf9\x92\x68\x53\x6a\xd9\x3b\xc8\x6c\xcf\x24\x0f\x31\xaa\x6a\x3f\x28\x64\xc6\x19\x1c\x9b\x05\xcc\x3a\x5f\x1f\x95\x8b\xa7\x40\xab\x4c\x5d\x66\x89\x2a\x70\x12\x7b\x1d\xf3\xd0\x3c\x01\x56\x00\x29\xd4\x02\x47\x91\xb0\x72\x4d\x7b\x4e\xc0\x15\xa7\xdc\xa2\x85\xec\xf1\x18\x58\xe2\x68\x3e\x4a\x51\x34\x39\xba\x2f\x76\x65\x56\x89\x9b\x37\x16\xa5\x50\xac\xed\x87\xb1\x49\x02\x39\x39\x73\xa5\xbe\x78\xf2\xa4\x42\x23\x2d\xef\x73\x9b\xb0\xa8\xc9\x7f\x47\xf0\xc8\x36\xe7\x91\x9a\xd4\x16\xa8\x94\x14\x69\x8d\x8b\x38\x35\x0d\x0d\xc5\x0b\x95\x51\x13\xf0\xa1\xc1\x4d\x0c\xbc\x98\xd9\x90\xf4\xc7\x38\xec\xd6\xb8\x92\x2a\x4b\x0e\xc8\x6d\xb2\x96\x14\x1b\x2b\xe6\x8c\xbb\x5c\x50\x26\xba\x6e\xb3\x96\xff\xb8\xa4\x5d\x97\xb2\x84\x29\x60\x3d\x5f\xd0\xd9\x6f\x1f\xde\x54\x73\x69\xb5\x42\xb9\x98\xf9\x7e\x61\x5b\xdc\x07\x76\x69\xef\xc0\x05\x9d\xc5\x24\xfc\x03\xb1\x93\x42\x2e\x0d\x3b\x1e\xfc\x38\xe0\xc7\x04\x9f\xd8\xda\x0d\x65\x2c\x28\xeb\xa4\x8f\xf8\xfa\x35\x97\xbb\x0d\x98\xab\x08\x2c\x35\x0b\x6e\xda\x7e\xc1\x46\x19\x57\x8f\x8f\x86\xe6\x42\xe8\x18\x8f\x0b\x19\x86\xee\x80\x3d\x56\x5f\x3f\xae\xf7\x05\x00\x27\xe0\x14\x3c\x04\x8f\x36\xab\x16\x64\x89\x45\x6d\x13\x5c\x90\xd0\xb4\x0c\xce\xb9\xe3\xd4\xef\x0b\xc4\x05\x24\x2e\x1a\xe5\x95\xc3\xbb\xba\xdb\x55\x6e\x95\x85\x8a\x89\xe7\x46\xc5\x44\xee\x0d\x88\x02\x00\xcb\x0f\xa2\x52\x4d\xc5\xb4\xf4\x3b\x6c\xac\xb1\xc8\x65\x4b\xb2\xf0\xd9\x3d\xcd\x59\xd5\x59\xc5\x02\x19\xa0\x98\x93\x4a\x0c\x84\x71\x4f\xbd\xe1\x4b\xbf\x00\x86\xc5\x8f\x8b\x70\x9e\x8e\x77\xce\x94\x88\x94\x67\xe6\x97\x87\xbe\xca\xa8\xca\x6b\x17\x32\xe1\x32\x53\x75\x09\x9d\x15\x72\xd9\xd6\x72\x69\xfc\x5f\x67\xef\xde\x7a\x95\xe4\xfe\x3d\xf3\x12\x33\x89\x89\xcd\x2e\x3f\xd4\x1b\xfc\x27\xfd\x7f\x7a\xf6\xb2\xc6\xd4\x7f\xd2\x07\x0f\xd4\x2d\x99\x11\xd7\x3d\x4f\xb7\x18\xd1\xf1\x33\xf3\xc7\x70\x95\x1d\xd0\x7f\x3b\x79\xe6\x4b\xf1\xde\xc6\x0e\xb8\x77\x5c\x77\x75\xa2\xce\x4a\xde\xf9\x46\x94\x17\xa9\x1a\x6e\xb8\x07\xa7\xb5\x97\x41\x5e\xec\x0b\x6c\xea\x6a\x63\xc7\x19\x1a\x73\x6a\x98\x50\xf3\x95\x64\xd3\x1d\x1d\xf3\x8a\x1d\x8e\xbe\x86\xa3\xcc\x5e\x19\xb6\x07\xbe\x48\xf9\x6f\x20\x96\x53\xbd\x50\xbf\x80\x96\x21\xc5\x73\xfd\x13\x68\x61\x54\xbc\xd0\x3f\x33\xb0\x62\x67\xcd\xaf\x88\xce\xe2\xa0\x94\xfb\x36\x7f\xf1\xac\xf4\x3b\xbf\x7e\x83\xa6\x74\xe8\x9c\xa0\x14\xff\x55\x76\x36\xf3\x99\x8d\x9c\x2c\x03\xb1\x97\xd8\xa1\x59\x9f\x32\xa7\xf2\x11\x19\x83\x55\xf9\x36\x5e\xbc\xab\x1b\x77\x73\x60\xdc\x0d\x79\x96\x8f\xcc\x01\x8b\xf2\xe0\x7c\xa3\x8c\xe0\x4d\xc7\x2d\x8d\x6a\xdc\x48\xa2\xf1\xc6\x85\xae\xef\xea\x00\xe3\x79\xe5\x0b\xda\x67\x25\xed\x38\xbe\xec\x58\x1a\x3d\x34\x75\x9b\xe7\x6b\xb3\x12\x4e\xc0\x79\x8b\xac\x84\xc2\x77\x7a\x57\xdc\x94\x7e\xa4\x8b\xf7\x3f\xff\xfd\x8f\x27\x37\x72\x53\x92\xd1\x6a\xca\x6c\x28\x9c\xc3\x73\xaf\x25\x59\x67\x39\x3f\xeb\x85\x93\x5a\xa1\x26\xb5\x21\x09\x50\x12\x4e\xa7\x88\x7c\xd4\xb5\xad\xd9\xc1\x88\x30\x7d\x2b\x0e\x74\x99\xf9\xaf\xd6\x37\xa7\x1a\x5a\xdd\x3a\x9a\x4b\x1e\xa2\x7a\xf6\x5d\xce\x44\x63\x45\xbf\xa1\x13\x5c\x12\x47\xf1\x74\xd9\x9f\x23\x4a\x42\x3f\x3d\xf2\x6b\xcb\x07\xed\x54\xea\xeb\x3f\x7e\x78\xf7\x38\x1c\xc4\xff\x53\x4f\x7c\x09\x22\x3e\xc2\x14\x4e\x0b\xfe\xe9\x42\x99\x23\x3d\x88\x5a\x57\x87\xab\x06\xb7\xbe\x84\x14\xb2\xe1\xc5\x25\xd4\xda\xc6\x75\x3a\x37\x19\x4a\xc2\x2f\xae\x40\xdf\x97\x75\x5f\x0a\x16\xc5\xc7\xd2\xa2\x28\x21\x48\x5d\x99\x6c\xac\x60\x39\xe4\x62\x7a\x82\xc8\x3c\x4c\x53\x61\x93\x2f\x67\xe5\x3d\x29\x47\x9e\x96\x63\x5c\x92\x7c\x62\x22\x26\xb1\x39\x22\x47\x20\x44\x5d\x60\xd7\xe4\xbe\xed\xee\x50\xbc\x15\x8a\x06\x95\x58\x32\x23\x09\xe7\x8b\x77\x6f\xcf\x7e\x7b\xf3\xe9\xed\xd9\xfb\xe7\x2f\x5e\x9d\x7d\x7a\xf5\xf6\xf9\xcf\x6f\x5e\xbd\xac\xbb\x59\x8c\x4c\xc8\x0a\xca\xa2\x87\xa5\x87\x0d\x49\x8a\xcd\x1b\xc3\x8c\xa0\xc9\x7b\x28\xbc\x2d\xea\x49\xa8\x8a\xc7\x91\x95\x27\x9c\xab\x71\x1a\x94\x6a\xb1\x86\x89\x2a\x46\xd7\x72\x2e\xfa\xab\xd5\x48\xed\xae\xd4\x24\xe2\xb7\x07\x6b\xf0\x77\x52\xd0\x77\xac\x25\xc0\x1b\x53\xdc\xfa\x5d\x7c\x26\xae\xb2\x63\xa1\x52\xbd\x5a\xf6\x09\x4f\x9b\x44\xa0\x54\xef\x6e\xa9\xff\xab\x10\xea\x91\xb8\xf2\xf4\x85\x4a\x59\x5d\x9c\xe5\xc7\xc5\xd5\xb4\xf2\xf1\x8a\x7a\xb5\xe1\x5e\xd8\x1a\x42\x12\x2f\x68\x88\xa7\x7d\x21\x8f\x7d\x45\xe8\xca\x1f\x6e\x0b\x59\x21\xfb\xab\x0a\x69\xe7\x8c\xc0\x0c\x87\xaf\xcd\x52\xdf\xc0\x02\x44\x6a\xfc\x45\x8a\x7a\x5a\xc1\x9c\x56\x33\x85\xea\x46\x62\x8b\xa5\x95\xb4\xbc\xdd\x30\x66\xce\xfe\x51\x43\x4a\x7b\x93\xdf\x54\x94\xd9\x0f\x4b\x0f\xb5\x19\x60\x4a\xe2\x45\x52\x9f\x7f\xa3\x1e\x17\xdb\x7c\x66\xbb\x10\xc5\xc0\xa8\xe9\x6b\x1a\x4c\xd6\x25\xa7\x10\xc1\xa0\xeb\x92\x88\xe8\xc8\x41\x4e\x64\xa2\x32\x78\xf7\xec\x04\xcf\x83\x79\x88\x7b\x1a\xd4\xd2\x87\x5a\x25\x22\x68\x70\x4d\xb1\x9a\x22\x44\xab\x1e\x32\xd5\x45\xb8\xa5\xcc\x05\x75\xde\x63\xd5\xa0\xd1\x4d\x5c\xf2\xd1\x4d\x89\xf3\x16\x4e\xd2\x9b\x53\x5e\x7e\x46\xee\x00\xd9\x69\x40\xbf\x25\xc1\x15\xb1\x7d\x07\x04\xd7\xa1\x79\x2b\x36\x75\x6b\x07\x58\x2b\x81\xa0\x2a\x93\x9d\x6e\x13\x7c\xdf\x14\x0c\x5e\x89\x6d\xeb\x50\x0e\xba\x94\x67\x78\xcb\x4b\x47\xe9\x5c\xd2\x4c\xa1\x5e\xd2\x7f\x1b\xf7\x66\x08\x46\x74\xd6\xe3\x5e\xdc\x6d\x32\x8d\x37\x44\x6e\xd6\x2d\xef\x80\xdf\xcd\xd3\x34\xc4\xd3\xed\xbc\x90\x9b\x21\xd1\xc3\x56\x5c\xff\xf2\x0f\x0a\x30\xfe\xad\x2d\xc1\xae\x87\xe3\x12\x12\x7c\x07\x70\xe8\x61\x2b\x70\xe4\x1f\xbc\x55\x38\x7c\x12\xd2\x50\x7a\x6a\xde\x26\x20\xf9\xb8\x15\x48\x8c\x4f\x76\x02\xa5\x5b\x3a\x82\x2e\xb1\xab\xa5\x53\x44\x6c\x81\x5a\x06\xbb\xf1\x0c\xb9\xc5\x13\xe4\x6f\xa8\x07\x09\xea\x2d\x30\x3c\x8f\x50\x8f\xc6\xbd\x80\x81\x33\x0f\x31\xea\xd1\x19\x52\x1b\x95\x8d\xb2\x48\x7b\xf1\xa4\xa7\x54\x04\xbd\x10\xf7\x08\x9a\xc7\x14\xf5\x02\xcd\xde\x52\xf7\x86\x49\xc1\x5b\x9e\x3f\x7f\xe1\xb3\x5a\x37\x48\xd7\x03\x63\xe3\x65\xa1\x92\xb2\xe3\x09\x78\xb4\x59\xb5\xd7\xd1\x1f\x57\xd7\xc1\xe1\x66\x30\xfe\x97\xc4\xf7\x91\x58\x88\x7e\x41\xff\x14\xe5\x0e\xb9\xb9\xa3\xae\xd4\x19\x22\x7c\x61\x01\x0b\xe2\xc0\x18\xc3\x87\x24\x30\xee\xdc\x3c\x2c\x99\x6d\xa7\x2e\x6a\xc5\x46\x85\x5e\x8b\x52\x3a\x53\x44\x7b\x4a\x4f\x90\x1b\xb2\x4a\x07\xb0\x57\x4e\x98\x2a\xac\x0e\x21\x45\x73\xa0\xce\x6d\xe7\x99\x15\xf8\x6e\xa9\xe3\xb0\xa0\xc1\x4a\x67\xf1\xa5\x54\x63\x65\xb7\x5c\xc2\xa7\x8c\x83\x20\xbe\xc4\xfd\x28\xc4\xa8\x36\x67\x68\x1b\xd5\x26\xd7\xcb\x02\xed\xa2\x9a\xbb\xa7\xc6\xfb\xe4\xc0\xb9\xf8\xee\x48\xf9\xaf\xe1\x48\xe9\xaf\xd7\xa0\xbf\xa6\xa7\x2f\x4f\x7e\xfc\xfb\xa0\x5e\x83\x1e\x84\x29\xc3\xbc\x91\xa2\x96\x6d\x9d\xa2\xfe\xfc\xa7\x18\xfb\x04\x09\x67\xca\xbc\xaa\x24\xcf\xcf\x0d\xac\x9f\xf8\x56\x6b\x52\xad\x9b\x09\xb0\x74\x11\xc9\x27\xb7\x10\x98\x36\x18\x00\x2b\xbd\x10\x42\xd3\x63\x60\xb1\xc9\xfc\x1c\x5f\x55\x93\x44\xfe\x00\x46\x16\xaf\xd3\x61\xf5\x84\x87\x23\x7b\xb0\x2c\x3f\xc8\xcb\x44\x1a\x0f\x75\x21\xa8\x42\xfc\xba\x95\x10\xc4\x50\x83\x9e\xa7\x09\xf2\xe9\x07\x48\xc3\x98\x27\xf3\xc3\x5c\x16\x97\x86\xac\x13\x43\x17\x3b\x45\xf4\xb5\x1f\x63\x95\x1d\x3b\x35\x2f\xd0\xb2\xf9\xe9\xfa\xe6\xa0\x90\x75\xa2\x31\x81\x6f\x80\x26\xf5\xa9\x4e\x55\x83\x39\x24\x5f\x90\x4a\xfb\x3a\xa8\x26\xd4\x64\x5f\x5f\x84\xbc\xe4\xa0\xd5\x87\x51\x14\x5f\xf6\x83\xb8\x90\x45\x47\x64\x55\x35\xde\xf0\x3c\xa3\x1a\xfb\x56\xff\xa4\xd7\x3f\xe9\x0d\x1e\xf5\x06\x8f\xd4\x4b\x82\x26\xff\x6b\x01\xeb\xb1\xf1\xfb\xff\xcc\xdf\x62\x52\x3c\x13\x7a\xf5\xb1\x2e\x34\xf0\x78\xc3\x05\xdf\x0f\x89\xaf\xb3\x23\x5b\xfe\x95\x39\x94\xbf\x2c\x7c\xbf\x30\x5a\xb7\xdc\xab\x5b\x20\x10\x12\x1e\x94\x56\x8b\x42\xf5\xae\x8c\xc4\x41\xaf\x3f\xe8\x0d\x4e\x7a\x83\x93\x12\x12\x1f\x95\x90\xf8\x68\x1b\x24\x3e\x64\x42\x4a\x28\xa2\x39\xe0\x82\xc6\x7d\x5e\x57\xbc\x2f\x79\xed\x06\x3c\x27\x71\xb4\x9c\xc6\x4a\xe8\xb7\x92\x38\xc4\xfc\x5c\x3d\xee\x1d\xf7\x06\xc7\xbd\x47\xfc\x9f\xaf\x81\xdd\x00\xe1\x65\x2d\x75\x1a\x2f\xbe\x13\xe7\x7a\xf4\xd5\xd3\x66\xe1\xd5\xbf\x34\x69\x56\xee\x10\xfa\x66\x5d\xcd\x65\x59\x4c\x4f\x59\x4e\x11\xb4\x65\xce\x48\x75\x2e\x9c\x02\x6e\xeb\x56\xd6\xb9\xf1\x58\xac\xd2\x2d\x28\x87\x78\x70\x44\x1b\x92\x51\xd3\x08\x83\x4a\x10\xab\x99\x68\xc6\x2c\x61\x1b\xa0\x94\x2a\x33\x67\x4a\xa4\x63\xbf\xac\x6e\xcb\x7e\x2a\xd3\xe0\x23\x45\x0d\x62\xb9\x8b\x87\xb8\xb5\x20\x91\xfd\xa7\x3c\x3a\xa1\xca\x01\x9c\x92\x65\x5c\x8e\x85\x70\xd0\x69\x24\x4e\xf1\xe5\xb1\x6a\xec\xa2\x35\xab\x51\xab\x71\x6f\xaf\x8f\xf8\x67\x58\x0c\x2d\x13\xdc\x7c\x35\x8c\xb3\xf1\x4e\x97\xa3\x46\x67\xb4\xbe\x52\x6f\x5b\x2d\xb7\x99\x42\xa8\x50\x17\x90\x27\x65\x15\x15\x53\x7a\xa1\x28\xd8\x11\xe3\xde\x24\x26\x4a\x8f\xc3\x57\xa5\x98\xa8\x15\x8c\xac\x33\xf5\xb2\x6b\xc0\x4a\x4b\x66\xf5\xf8\x76\x98\x55\x5d\xe6\xa4\x35\x6e\x34\xb5\xe1\x50\x0f\x8d\x7e\xaf\x15\x86\x2c\x60\x3d\x67\x34\x61\x26\x9a\x07\x75\xad\xfe\x02\xd3\xf7\x86\x3e\x65\xb3\xad\xa9\x15\x9b\xac\xb3\x86\x27\x71\x12\x5f\x70\xaf\x4a\x61\x09\x57\x71\x64\x46\x21\xe4\xdc\x1d\x29\xbf\x62\xe5\x37\xa9\x9a\x10\xb0\x8d\xd0\x00\x2b\xfa\xc1\x2a\x72\xfe\x82\xa1\x99\xb1\x83\x8d\x6c\x63\xa3\xb7\x46\xc9\x9f\x3d\x6c\xba\xba\x18\xb9\x2d\xc7\x95\x12\x89\xc7\x75\x39\x30\x1f\x1a\x79\x3e\x36\x7a\x07\x34\xd8\x18\x6e\x46\x70\xeb\x08\xab\x12\xfa\xc1\x9a\x7e\x24\x10\xa7\xc2\xb7\xf0\x3d\x89\xaf\x96\x35\xc6\x4f\xb3\xf9\x8b\x18\x63\xe4\xd3\xb7\xbc\x9c\x6a\x4d\xdb\xd3\x7a\xa3\x17\xbb\x49\x86\x93\xd0\xef\x6b\xa6\x70\x43\x77\x84\x2e\x24\x6b\xdc\xf3\xbb\x50\x2f\xd7\x8e\x0a\xdd\x45\x60\xa9\x50\x97\x7f\x0a\x6a\xbc\x59\x82\xc6\xfa\x7a\x98\x9d\xd2\x36\xea\x28\x8d\x49\x88\x03\x91\xfe\x41\x47\x6a\x70\x2d\xb4\xac\x1c\xa0\xd4\xd3\x42\xad\xcc\x95\xd4\x5c\xfb\xdc\x50\xad\xfd\x62\xda\xf7\x17\xe4\x02\x95\x73\xc0\x89\x3a\xf0\x81\xce\x1f\x21\xd4\xd0\x5b\xc4\x7d\x6c\x50\xc4\x16\xc2\x40\x02\xcf\xc6\xe5\xa8\x0f\x15\x17\x52\x9f\x02\x0e\x96\x62\x40\xa2\x56\x31\x20\xae\xeb\x22\x23\x0e\x04\x39\x20\x96\x51\x1e\x45\x52\x02\xa9\x8c\xf7\x50\xaf\xd9\x47\x41\x28\x1e\x66\x53\x44\x7b\x3c\x0b\x5c\xb5\x8a\x99\x51\x8d\xa0\xac\xb9\x31\xaa\x1e\xe6\x9a\x73\x76\x97\x02\xd4\x1b\xb9\xae\x4e\x80\xe6\xfe\xbe\x40\x64\x79\xc6\x8b\xf6\xc7\xe4\x79\x14\xd9\xd6\x9f\x18\xf2\x52\x4a\x10\x9c\x0b\x14\xf6\xb8\x6c\xe8\x8c\x45\x01\xba\xc2\xdc\x3d\xea\xce\x61\x62\x53\xef\xe9\x4a\xb9\xd4\xf2\x7a\x65\xbf\x44\x31\xa4\x36\x77\x6d\xff\x18\x53\x18\xbd\xe1\x2a\x37\xdb\x71\x00\x11\x35\xf4\xde\xb3\x1b\xd2\x73\x2a\x9f\xf3\x22\x76\x3e\x0a\x23\x1b\x1f\x9d\x3a\xaa\x3a\xdc\x2a\x0c\x86\xd4\x0d\x03\x70\x35\xe4\x0d\x48\xbc\xc0\x81\x4d\xdc\xab\x3e\x72\xaf\x1c\xb0\x2c\x3e\x5d\xf6\x91\xbb\x74\xb2\xcc\xc9\x32\x90\x7a\x0b\x3b\x2a\x38\xe7\x17\x11\x3e\xc2\x37\x8d\x1b\x08\xcb\x5f\xe0\x6b\x76\x0b\x71\x0e\xc5\x51\x2b\x0a\x39\x1e\xf2\xb0\x29\x6e\x60\xfd\x10\x0e\x88\xcc\x08\x82\xc8\x74\xe4\x0e\xd6\x1a\x45\x7c\x10\x6c\x61\x14\xb9\x1d\x4b\x08\x88\xc1\x02\xf8\x20\x00\x73\x90\x80\x09\x38\x07\x33\x70\x01\x96\xb9\x7d\x64\xba\x4f\xf6\x91\x77\xdf\xed\x23\xff\x1a\xf6\x91\x4f\xeb\xed\x23\xbf\x44\x5f\x7e\x8e\x66\x7f\x9e\xd6\xdb\x47\x16\x89\xe0\xc2\xa9\xc8\x4d\x90\x17\xf2\x93\xe2\x91\x21\x3d\x89\xb0\x83\x19\x4c\x7f\x15\x9b\xee\x7d\x1e\x8b\xfa\x93\xdc\x87\x7f\x21\x68\xc2\xd3\x4e\xc8\xfd\x59\x4c\x3a\x61\x88\x57\x9b\x23\x68\xe4\x06\xf7\x63\x4c\x61\x88\x11\xe9\x49\x46\x50\xde\xfa\x56\xbd\x95\xc1\x87\x91\xbf\x88\x44\x3c\x6b\x9d\x5d\xc1\xaa\x4d\x2d\x38\x30\xc3\xa2\xf3\x23\x2a\xb5\xc0\xad\x18\x74\x72\x10\xd9\x8f\xfc\x04\xd4\x40\x5a\x85\xfc\xdc\x6a\x22\x29\x92\x55\x32\x85\x62\xac\x74\x72\x5a\x25\x63\xcb\xa3\xf6\x3d\x41\x1d\xa8\x9d\xf0\x65\xda\x81\xb8\xe7\xd5\x8b\x38\x5a\xcc\xb7\xf4\xbc\xd5\x76\x9e\x86\xca\x5f\x5a\x8d\x54\x72\xc0\x79\x5c\x70\xa4\x6f\xd4\x1f\x97\x8b\x92\xdd\x85\x87\xcb\x3b\x1c\x2d\x7b\xe9\x2c\xbe\x0c\xf1\xb4\x67\x60\xb5\x77\x19\xd2\x59\x88\xb9\x93\x8b\xbf\x20\xec\xbe\x65\x38\xb2\x70\x15\x89\xa5\xe1\x79\x64\xe8\x44\x80\xa9\x1d\xe1\xd3\xbe\x0d\xa7\x97\x6e\x7e\x56\xeb\xeb\x35\xae\xa1\xa0\x5b\xbc\xdd\xf1\x28\x19\x9d\xe4\x45\xb3\x94\x72\x28\x94\xbe\xd6\xd5\xb3\x29\x1c\xcb\x87\x1f\x10\x4c\x85\x2a\x7d\x64\x54\x76\x30\x08\xa9\xb2\x10\xe3\x71\x7e\x09\xd4\x29\xf5\x8f\xf9\x3d\xb1\x34\xe6\xb6\x69\x3e\x8b\x77\x3a\xe3\x0b\x73\x18\xe2\xb7\x31\x7d\x8d\xa7\x04\xa5\x69\x61\x42\xa5\x72\x04\x60\x64\xfd\x77\x88\x85\x9e\x31\x14\xcd\xfb\x53\x48\xd1\x25\x5c\xde\xe0\xc6\xbd\x26\x68\x82\x42\x26\x6b\x55\x96\xc5\x4c\x7d\x23\xd7\x08\xe1\x80\x5b\x2c\x1a\xd6\xab\x76\x65\x8a\x77\xeb\xb2\xa3\x35\x30\xa6\x5e\xef\xaf\x5d\xf6\xeb\xae\xeb\x21\x5a\x95\x54\x2a\x06\xa7\x4c\x17\xf3\x39\x24\xcb\xfe\x24\x26\x7d\x3d\xef\x75\xbb\xb4\xe0\x14\x6e\x26\x68\xa8\x25\x94\x0e\x51\x24\x5b\xe4\x55\x78\xb8\xa5\xbe\xb7\x2e\x64\x65\x00\x2c\x1d\xb2\x66\x9e\x57\x4d\xc6\x7a\x33\xd6\x45\x75\x54\x29\x5e\x9b\x98\x7b\x0b\xf6\xb7\xc9\x74\x75\x5a\x93\xa4\xa3\x38\xe2\xaf\x88\x42\x0b\x58\xec\x5e\x4d\x30\x8c\x54\x2e\x10\x86\x0e\x29\x63\xc0\x24\xac\xdf\x36\xad\x74\xc6\xa7\x7a\x07\xdf\xd2\x26\x43\x24\x44\x2d\x77\x99\xa9\xec\x62\xd7\x2f\x3f\x8e\x5a\xee\xae\x22\x8e\xba\xec\xb3\x47\x60\x30\x28\x74\xde\xbc\xe5\xd6\x31\xda\xca\x5e\xfa\x91\xed\x62\x05\x4c\xc7\xfd\x04\x4a\x6b\xb2\x8e\x9d\xee\x0a\x4b\xdc\x97\x85\xb3\xb6\x63\x8d\x37\x59\xce\xf6\x6a\x4b\xd0\x24\x54\x72\x7e\x14\x85\xf8\x8b\xb5\x5e\xc0\xcd\x6d\xdc\xdb\xd4\x2a\x2c\xc6\xfc\x2a\xf6\xa7\x3f\x2b\x42\x7d\xc5\x27\xb8\x31\x5f\xe7\xbb\xfd\x74\x1e\x41\xd9\x88\xfb\x1a\x44\x5c\x11\x2a\x72\xe4\xf7\x70\x4c\xd0\x04\x11\x52\x64\xa1\xef\x12\x84\x7b\x01\x4c\x67\xe7\xb1\x0a\x25\xde\xd2\x4e\x5b\x37\x77\x71\x93\x2f\x4f\x7d\x00\x8a\x75\x2f\x55\x4c\xf2\xcb\x77\x2f\xce\x3e\xf1\x4c\x54\x2a\xbe\xef\xc8\x17\x36\x83\xa3\xf8\x9c\xd1\x08\x3c\x0f\xa3\x90\x2e\x8f\x16\x61\xff\x22\x4c\x17\xec\xce\x0c\x8d\x14\xc6\x37\x44\xc5\x0b\xa9\x76\x40\x9d\xf0\xb1\x65\xe8\x4f\x93\xab\x76\xf9\xd4\xac\xb9\xb0\xd5\x1d\x9a\x75\xcc\x24\x57\x31\xaf\x33\x6b\x28\x4f\x45\x29\xc0\x68\x9f\x45\xd3\x9b\xb1\x60\xda\xc8\x67\x64\x99\x86\x03\x25\xc7\xff\x95\x8d\x67\xec\x4c\x31\xee\xcb\x70\x8e\x70\x6a\x7a\xec\xa9\xf6\x6f\x04\x54\xe3\x86\xeb\x24\x28\xd8\x87\x0d\x7b\xc5\x60\xb0\xce\x44\xd1\xe6\x7c\x37\x6f\xc9\xa6\x26\xe3\xc6\x97\xf5\xf2\x1a\xaa\xc1\xfb\xbe\xbc\xdf\x36\xf0\x8e\x1f\x1a\x4c\xd1\x3c\x6e\xdf\x10\x32\x41\x75\xd6\x37\xbd\x35\x55\x14\x0c\xc6\x9c\x3b\xa8\x17\x74\xaf\x8e\xca\x85\x52\xbf\x75\x00\x6e\xe0\xbb\x27\x5b\x06\xeb\x94\xd5\x02\x9b\xcb\x89\x76\xba\xe5\xde\xbc\xec\xe9\xc6\x7b\xad\x10\x0b\xca\xaa\x37\xe5\xc5\x50\x92\x99\x4e\xeb\xee\xa8\xdf\xec\xea\x79\x7a\x57\x57\xcf\x1d\xb9\x7c\x9e\x76\xbe\x7c\x9e\xb6\xba\x7c\x9e\x56\x2f\x9f\x7a\x27\x6d\x27\x5f\x9d\xde\xc9\xd5\x73\x8b\xcb\xe7\x69\xc7\x93\xb5\x50\x62\xe0\x36\xae\xab\x15\x56\xd6\xf6\xd8\x5d\x24\x77\x70\xe8\xaa\xd9\x54\x8e\xdc\x45\xd2\xe5\xc0\x5d\x24\x95\xe3\xd6\x64\xb1\xb7\x75\xd8\xb6\xcf\x1a\xc5\x4d\xf2\x75\xb6\xfa\x66\x23\x7c\xbd\x01\x9f\x67\x82\x10\xee\x00\x7d\xf6\xa8\x1f\x62\x1d\x59\x96\x23\x5e\xf8\x06\xc4\xb8\x4f\x50\x1a\xfe\xa1\x4d\xfa\xd2\x81\xe0\x26\xf6\xfc\xaa\x11\xff\x7d\x6e\xc4\x2f\xdb\xec\xd9\xb4\x1c\xd0\x21\xd3\xa3\x7a\x90\x96\x1f\x84\xe5\x07\x71\xf9\xc1\xa2\xe4\x19\xe0\x97\x7e\x07\x5b\x7a\x0a\x4c\xa5\x2b\x00\x47\xf1\x5c\xfa\x07\xa8\x87\x15\x1a\x04\x49\xa9\x85\x16\x15\xc1\xa4\xe6\x8d\xa0\x52\x70\x5e\x7a\x25\x89\x1d\xcc\x2a\xcf\x65\x87\x8b\xd2\x8b\x32\xeb\x02\x4b\xe9\xb3\x10\x10\x78\xf9\x52\x7d\xc8\x46\xca\x17\x81\x7a\x23\x11\x7d\x60\x78\x92\x79\xab\x2b\x91\xc7\xb0\x0c\x94\x7b\xd5\xff\x01\x2c\x1b\xde\x2d\x1f\xd4\x3f\x17\x71\x33\x47\x27\xda\x98\x8a\xb8\x7f\x02\xd2\xfe\x09\xd4\x43\xee\x14\xd1\x9f\xe3\x05\x0e\x42\x3c\x7d\x11\x85\x08\xd3\x0f\xc8\xa7\x36\xa3\x18\x36\x17\xf7\xea\x01\x75\x79\x50\x0e\xfb\x3a\xfb\x52\x65\xd4\x55\x18\x0c\x91\x1b\x06\x20\x77\xfd\x1c\xf2\x61\x9f\x53\x4a\xc2\xf3\x05\x45\x76\xc5\x5d\xd4\x01\x01\x4a\xe9\x10\x83\x94\xf8\x43\x92\x65\x8e\x9b\xc6\x84\xda\x36\x02\xd8\xf1\x9e\x52\x5d\x75\x0d\xb9\x79\x27\xa7\x9f\x3f\xc7\xe6\x73\x81\xe1\xdf\x92\x9b\xe1\xf7\xc1\x23\xf7\xd1\xb7\xc1\x70\x5f\x62\xb8\x7f\xf2\xe8\x2e\x90\x4c\x38\x92\xf1\x8d\x91\x6c\x58\xcd\x0c\x7f\x9a\xba\x98\x54\xc5\xb0\xd8\x9e\x78\x89\x12\x84\x03\x84\xfd\x10\xa5\x96\xf2\x65\x11\x95\xf1\x10\xbe\x70\x2f\x20\xb1\xd5\x95\xfc\xf9\x8b\x37\x79\x8e\x30\xe7\xfa\x1a\x71\x6f\x1f\xe3\x8a\xd6\xfa\xb3\x2f\x8d\x6b\x9d\x73\x7d\x3d\x1a\x4b\x3f\x1f\xc4\x48\xe0\xce\x66\x7c\x78\x88\x9f\x51\x5e\x7d\xc4\x5e\x09\x76\x6e\xcc\xa3\xb7\xc0\x5f\x70\x7c\x89\x5d\x0b\xbc\x62\x88\x1c\xde\x3b\x06\xb9\x38\x35\xb4\x2c\x23\xc5\xa9\x65\x65\xce\xf0\xd8\xf3\x3c\x24\xd3\xcc\x1e\x1e\x16\xc7\x7d\x1b\x9b\x68\x71\xad\xb5\x23\x01\xca\xf1\xa8\xcf\xde\xd6\x58\xfc\x2d\xe9\x84\xc3\xc0\x07\x96\xac\x87\xf8\xfc\xc5\x9b\xf7\x71\x14\xfa\x4b\xe3\xe4\x69\xfa\xca\x65\x18\x05\xec\x6e\x91\xfb\x82\xe6\x1e\x66\x77\xb2\x48\xb0\xb4\x48\x1a\x4c\x63\x89\xd6\xae\x8c\xe4\x2a\x9e\xe7\xe1\xeb\x6b\x52\x1a\xed\x3f\x7a\xf6\xf3\x28\xea\x49\x51\x37\x75\x36\x8c\xb5\x61\x95\xf5\xa2\xb5\x5b\xe3\xda\x4b\x50\x1e\x51\x5e\xbe\xed\xdc\xf3\x3c\xbb\x0e\xd1\x52\x76\x70\xe5\x00\x40\xdc\x97\x1c\x5e\x10\x33\xd3\x97\x69\xe1\x98\x14\x4e\x72\x8e\x8b\x9b\x99\xdd\x81\x76\xb1\x9b\x22\x55\x0d\xf4\xe7\xe5\xeb\xc0\xb6\xac\x07\x74\x74\x3c\x76\xdc\xb4\xc0\xcb\x52\xba\x8c\x90\x05\x3e\x0b\x3e\x38\xbc\xbf\xc2\x92\x25\x66\xc9\xd5\x67\x27\x13\xdc\x58\x79\x4e\xd8\x4e\x66\xfc\xbd\x32\x82\xe3\xd3\x0f\x3c\x15\xc3\xcb\x17\x22\xd1\x6f\xe9\x88\xf6\x2c\x91\xa9\xa1\x1f\xf8\xd6\xb0\x82\x9d\x42\x06\xe9\x12\x4a\x5c\x86\x91\x86\x31\xcb\xe3\x0c\x6b\x9b\x31\xc1\xf6\x40\xed\xc3\x46\xe4\x54\x34\x72\x4e\xe3\x69\x42\x9b\x47\x29\x5d\x2f\x9a\xc7\xc0\x2d\xc6\x90\x7a\x25\x47\xf8\x3f\x1a\x87\xc2\x33\xe9\x89\x29\x64\x2d\x76\xb6\x21\xf7\x0a\x2c\x87\xc8\x5d\x02\x7e\xbe\x0d\x91\x94\x24\xe4\xa2\x22\xb9\xa4\x0f\x06\xc7\xd9\xb0\xd8\x19\x01\xac\xaa\xc0\x0a\x39\x4c\x1e\x95\xe2\x7c\x94\xc3\xd1\xe2\x70\xb8\x09\x2c\xe3\x33\x8e\x44\x39\xe9\xe2\xf6\x99\x7b\xf6\xb8\xf5\x39\x31\x9d\x31\x80\x5e\xfd\x60\xb6\xe5\x96\x4c\x8a\x0e\x88\x36\x7e\xbc\x84\xec\xe6\xef\x1e\xd4\x8a\x25\x1e\x6c\xa6\x12\x85\x66\x2e\x2c\xc9\xaa\xc9\x05\xf9\x94\xc8\x46\x52\xce\xcd\x9b\x28\x01\x2b\x72\xb2\x0c\xcc\xbd\x77\x76\x60\x3a\x56\x72\xd1\xfc\xe6\x9e\xa4\x49\x79\xdc\xaa\x74\x7f\x73\xb7\xd2\x49\xf9\x23\xf9\x05\xe1\xe6\x39\xb4\xcf\xeb\x06\x97\x57\x86\x51\xb4\xf5\xe8\x95\x2c\xf5\xa3\x71\x96\x39\x60\x56\xfe\x9a\xba\xb6\x8c\xd2\x9b\x02\x72\x51\x1d\x5a\x81\x11\xde\x36\x18\xcb\xf2\xb7\x2a\x97\xa9\x51\x7c\x53\x78\x4a\x5f\xc8\x95\xc2\x60\xb4\xd8\xec\x45\xdc\xd0\xd7\x01\x81\xe9\x3e\x5c\x26\x5e\xed\xdb\x07\x46\x7e\xc7\x6f\xe4\x7d\x4b\xdf\x08\x4c\x17\xe5\xf7\x6b\x5d\x94\x3f\x81\xf7\x5b\xb8\x28\xe3\x98\x86\x93\xd0\xe7\xd6\xae\x1a\x87\xe5\x6f\x93\xfb\xfc\xef\x7f\x8d\xfe\x27\x49\xff\x9e\xd4\x3b\x87\xea\x32\x62\x22\x21\x93\x59\x50\x4c\x15\x47\x69\x9d\xec\xed\x74\x0c\x2c\xad\x0d\xdb\x32\x19\x5d\x6d\xc6\x3b\x6e\x88\xe6\x95\x0e\x6e\x10\x2e\xfc\x7f\xf1\x82\x18\x21\x8b\x33\x98\xf6\xce\x11\xc2\x3d\x18\x04\x28\x70\x3b\xda\x51\x3f\xce\x10\x41\xbd\x4b\x98\xf6\x20\xee\x71\x44\xb1\x71\x42\x3c\xed\x2d\x0b\x9f\x69\x1a\xb7\x5d\xb2\xaf\xf5\xa8\x96\xba\xb6\xdb\x49\xd4\x77\xb7\x38\x4e\xe1\xc5\xad\xe0\x38\x85\x17\x37\xc4\x71\xb3\x33\x41\xd1\x42\xf5\x10\xc8\xbd\x91\xf2\x20\x26\x92\x52\xb1\x5d\xdb\x3a\x91\x98\x98\x16\xf9\xe3\x44\x32\xe0\x8e\x4e\x28\x4a\xe9\x7d\x9e\xdb\xc0\xb9\xda\xb6\x18\x5b\x6d\xd9\x56\xc5\x5a\xc3\x3e\x29\xf7\xf4\xb8\x6a\xb9\x28\xbe\xb5\x86\xbd\xba\xca\x4e\x85\x59\x03\xcb\xa9\xd4\x40\x6e\x89\xf5\xed\x22\xc7\xf2\x8c\x65\x37\x8d\xe2\xaa\x61\xcb\xbb\x53\xc0\x40\xc6\x34\xee\x78\x0d\x83\xf0\xff\x2e\x7f\x3c\xfa\x9f\xd3\x79\xfd\x21\x22\xef\x9c\x56\x04\xcf\xb9\x0b\xc7\xa7\x4f\x90\x4c\x8f\xd5\x1f\x03\x5d\xdc\x32\xbd\xc1\xbb\x8a\xcd\xd4\x38\xa9\xcc\xe4\x4e\x46\xb0\xa7\xae\xeb\x91\x47\x85\xae\x0b\x4b\x18\x3c\xe6\x59\xaf\x07\xbc\xf4\x58\xe9\xd6\x20\x57\x49\xa6\x56\x1a\x3c\x94\x99\x06\x7e\x00\x83\x1f\xda\xf8\x09\x0c\x44\x3d\xb3\x64\x28\xfb\x3f\xd1\x19\x9c\x92\xab\xff\x8c\xd0\x84\x9a\x2f\xae\xd4\x8b\x8a\xdd\xf1\xc7\x3a\xc7\x08\xf6\x47\x31\xa0\xda\x7a\x1e\x04\x39\x7b\xb4\x80\xc5\x04\xdb\x5e\x43\x60\x6e\x2b\x3e\x56\xf8\xb0\xb6\x96\x3f\xde\x3e\xe7\x6c\x3b\x48\xb6\x76\xce\x7a\x02\xac\x10\x4f\x62\x32\x47\x41\x5f\xc5\x9d\x8e\x64\xdc\x49\x00\xf1\x14\x91\x78\x61\x86\x95\x14\xca\xbe\x0d\x72\xab\x9a\xa5\x22\x8e\xcb\xe6\x6d\x55\x87\x34\xf8\x99\x6d\x87\xf4\x35\x9e\xc4\xa6\x49\x79\x60\x14\x7a\x91\xb7\x57\x60\x9d\xc7\x41\x1e\x07\xcb\xbf\x7e\x0c\x8e\xc1\x60\xdc\xc2\xa4\x5f\x45\xda\x13\x39\xc9\x1f\xc7\xc0\xd2\x2e\xb7\xdb\x20\xad\xb6\x62\xfd\xec\xb4\x21\x8a\xa2\x57\x5b\x3c\xdf\xca\x19\x9c\x2b\xb8\x5e\xe5\xde\xed\x4a\x4c\xba\x6c\x7d\xdd\xf2\x8c\xeb\x27\x52\x97\x47\xba\xb5\xd4\xd4\x84\x2c\xbe\x0a\xb7\x88\xaa\x72\x01\x08\xab\x54\x5f\xf6\x04\x0c\x6a\xb2\x22\xbc\xba\x82\x0d\xb2\x44\x0b\x0a\xbf\xc5\x85\x60\xd8\x70\x43\x35\x9d\x16\xc7\x7b\xb3\x63\xe1\x6d\xcf\x0a\xc7\xb4\xfd\xb4\x8a\x7e\x0c\x77\x4b\x41\xf9\x06\xde\x2e\xd5\x88\xa8\xdb\xdb\x52\x08\xac\xc9\xf3\x2e\x4c\xfd\x60\xa4\x2a\x46\x73\xee\x21\x78\x1b\x34\x9e\x6c\x97\xbd\x57\xb9\x99\x9d\x2f\x28\x15\x6e\x32\x27\x0f\xc1\x43\xf3\xb7\x60\x99\xbc\xc0\x8f\x1f\x85\xfe\x17\x79\x72\x3d\xda\xe0\xfa\x75\xe7\xbb\xe1\x56\x28\x4f\x20\xf0\x96\x77\xc4\x6d\xce\xec\x86\xbb\xa2\x71\x5f\xb4\xce\xf0\xbf\x8e\x0a\x6f\x99\xec\x8e\x79\x1a\x07\x1f\x45\x6d\xc9\xb0\x5a\x13\xa2\x50\x76\x58\xa0\xf3\x45\x8c\x29\x89\xa3\x88\x9f\xc9\xb3\x30\x68\x2a\xe8\xd0\x7c\x00\xf6\x7a\x2f\xf8\xb4\xea\x60\xb8\x01\x66\x6b\xdc\xa5\x9a\xd2\x82\xdf\xe8\xe1\x8f\x8c\xff\x6c\x4a\x56\xdd\x82\x27\x16\xe5\x36\x33\x97\xca\x5d\x8a\x6f\x32\xa1\x7c\x4f\x59\x01\x54\x0d\xa4\xfd\x17\xe5\x1e\xef\x9b\x28\x67\x2c\xf9\xb7\x92\xe8\x1e\x7f\x05\x89\xee\x6e\x10\x26\x67\x3d\x2a\xba\xea\xe7\x2e\x84\xe6\x71\x69\xfa\x7a\x0e\x4e\x4b\x65\xd8\xbf\x22\xa6\x6f\x2e\xf9\xb4\x0f\x98\x6b\x38\x72\x9e\xdc\xa5\xdc\xa3\xc3\x62\xaa\x11\x30\xa7\xed\x22\x60\xcc\xda\x68\x47\x52\x53\x51\x28\x98\xf6\xa7\xa2\xb3\x7c\x8b\xb8\x97\x86\x78\x99\xa6\xa3\xe9\xf6\x28\x54\x21\xb5\x71\x4b\xdf\xae\x30\xf1\xe4\x5f\x55\x96\x88\xe2\x14\xdd\xb9\x28\xf1\xe4\x2e\x24\x89\xc7\xe0\x87\xee\x82\x44\xeb\x93\x3e\x94\x27\xf1\xde\x1f\xec\xa7\xfb\x76\xb0\x47\x3f\x7c\xab\xf3\xfc\x74\xaf\xce\xf3\xe8\x07\xb7\x38\xd9\xaf\x88\xa5\x9b\x9f\xc5\x0f\x6f\x7a\x16\x3f\xfa\x8a\x67\x71\x6e\xad\xac\x2b\xca\x22\xb5\x09\xa9\x8b\x82\x90\xd6\xd8\xc2\xca\x3a\x87\xd7\x2f\x6b\xab\xc8\xde\xcd\x99\x1a\xfd\xf0\xb5\x8f\xd2\x47\xdf\x8f\xd2\x5b\xc3\x6b\xb5\xd9\xa3\xbb\x38\x4a\x4f\xc1\xc3\xca\xe7\xb7\x0f\x86\x2f\x2e\xd9\x29\x23\x08\x19\xde\xc8\x4b\x8d\x40\x12\xc2\xbe\x34\xd6\xe9\x30\xca\xfa\x95\x1c\x3c\xaa\x2e\x95\xca\xc1\xad\x0a\xdc\x33\x09\x96\x2e\x48\xb1\xd4\xbd\x79\xbc\xd2\x19\x9a\x23\x0b\x58\x49\x04\x7d\x4e\x6e\x3c\x5a\x2a\xfd\x7d\x01\x09\xea\x73\xfb\x32\xe3\xfa\x94\xc6\x73\x99\xb1\x7b\x3c\x1e\x57\x53\x80\x1b\x67\xbd\x41\x2c\x3a\xe2\xe9\xd6\x88\x8f\xf1\x94\xd6\xc4\xd7\x22\x84\x6d\x6d\x0d\xb7\xdb\x5b\xa9\xe3\x31\x18\x51\xb2\x40\x37\x98\x69\x9d\xed\x5e\x47\xec\xb5\x0f\x17\x33\x4c\xb0\xda\x9a\x9f\x97\x13\xe3\xb1\x5d\x9c\x72\x20\x5b\xf7\x09\xe6\xb1\x5e\xba\xf8\x58\x3f\x4c\xfb\x5c\x6a\xeb\x73\x4b\x73\x3f\xc4\x17\xb1\x30\xdd\x2b\x9f\x00\x59\x8f\x2c\x45\xb4\x1c\x81\x26\x02\xc9\xb8\xcf\xc0\x65\x48\x67\x7d\xb6\xb4\x11\x8f\x3f\xc3\xf1\xcd\x5c\x08\x0a\x56\xfa\x16\x85\xc9\xee\xb8\x40\x98\xc8\x17\x53\xe7\x33\x10\xc0\xe5\x3f\xf4\xbf\x47\x49\xb4\x98\x86\xf8\xc8\x87\x11\xc2\x01\x64\xc4\x1d\x9c\xf6\x53\xee\x31\x2b\x10\xca\x7e\xb2\xb7\xc6\x9f\x7d\x7f\x46\xe2\x39\xa4\xa1\x2f\x1f\xce\x60\x22\xdf\x8b\x68\xbe\x92\x0f\x02\x30\xb2\x6b\xde\x9e\x3f\x42\xbc\xde\x1f\xe1\xe3\xc3\xe9\xbb\xe3\xc9\x9b\xb3\x7a\x7f\x84\x79\x1c\x70\xda\x0a\x50\xea\x1b\x6e\x09\x95\x20\xe0\x52\x26\x96\x4a\x22\xc4\x42\x98\xb1\x2e\xd2\xbb\xb1\x88\xea\x8f\x25\x01\xab\x63\x66\x82\x27\xb2\x48\x80\x4c\x5a\xa4\x2b\x95\x13\x5f\xfa\x3a\xcc\x20\x9e\x4a\xbf\x07\xe5\xa3\x57\x08\x65\xb7\x8e\xee\xaf\xf4\xd4\xb3\xa3\xfb\x2b\x31\x75\xf6\x57\xe0\x67\x47\x9a\x88\xaa\xb1\xc7\x47\xf7\x57\xf2\x2f\xd6\x58\xe1\x26\x2b\xf0\x51\x5c\x2c\xec\x6f\xd6\xcd\x96\xf9\x25\x73\x3c\x6a\xec\xe6\xe6\x33\x91\x13\xc5\xcc\xb0\xf6\x58\xa5\xb6\x1e\x57\xb3\x8d\xff\x60\xf0\x7e\x09\xf7\x9a\x26\x45\x39\xf9\x11\x38\x2e\x5c\x06\x45\x86\xd2\xb1\x72\xec\xb2\xc6\xdd\x42\xa4\x55\xd4\x2c\x28\x66\x45\x51\x31\xaa\x75\x33\x26\x28\x20\xf0\xb2\x7a\x31\xad\x1d\xcd\xf4\xca\x6b\x3f\x48\xc1\xc6\x56\x25\xc2\x47\xec\xde\xdc\xfd\x8a\xf0\x50\x76\x3e\x05\x23\xb1\x7b\xd2\x6d\xfc\xd6\x06\x52\x84\x17\x32\x63\x9a\x40\xf2\x25\x0a\x31\xea\x7f\x41\x4b\x9d\x6c\x46\x9c\x5d\x27\x35\x47\xf6\xc0\x38\xa6\xd5\x86\x8e\x13\x54\x49\x3c\x59\x27\x10\xfe\x37\x5a\xde\xe8\xd4\xab\xae\x7a\x39\xbd\x50\x0e\xcd\x25\x81\x49\x52\x93\xf1\xac\xb6\x9b\x4a\x3f\xd9\x32\xa9\x5a\xfe\x15\x1a\xce\x0b\xc5\x83\x3e\x86\x73\x94\x52\x38\x4f\x2a\xf2\x6d\x05\x62\x50\x5a\xd4\x41\xb7\xec\x1b\xd6\x9a\xdc\x0c\x0b\x23\x39\x43\x95\xb7\x1a\xcc\x49\x66\x55\x7c\xc8\xb6\x64\xa7\xb4\x04\x0a\x2d\xaa\x50\x5e\x11\x2d\xd6\xb8\xbe\x50\xbc\xf1\x53\x3e\x79\x02\x04\x11\xf5\x83\x10\x46\xf1\x34\xd7\x32\x15\xc8\xd2\x92\x6a\x23\x26\x76\x99\x5c\xd5\x60\x7b\xe2\x30\x61\xf4\x2a\xe1\x65\xc4\x66\xb5\x51\x10\x55\x92\x12\xf0\x4c\xba\x2a\xfd\x80\x52\xf1\x72\x95\x15\xcf\x3e\xa0\xd8\x95\x62\x04\x72\x13\x48\xf9\xb0\x12\xe1\xaf\x87\x15\x72\x53\x1a\xc5\x34\x5f\x1c\x28\xa8\x47\xab\xa1\xba\x5c\x05\xeb\x15\x4e\x05\xe8\x6b\xb2\x8f\x6e\xbc\x5c\xb5\x98\xad\x50\xae\x6c\x33\xd7\x86\x5d\xc4\x38\x8f\x1f\x73\x45\x40\x83\x52\xa8\x56\x69\xf4\x71\x16\xa6\xbd\x2f\x68\xd9\x0b\x78\xc8\xc1\x39\x4a\x79\x96\x57\xb9\x13\x7a\x7e\x4c\x08\x4a\x93\x98\x07\x0d\xf5\x68\xcc\x5f\x4e\x09\x4c\x66\x3d\xb9\xdf\x7b\x82\x89\xf6\x42\xdc\x9b\xc7\x04\xf5\x84\x57\xad\xdb\xa8\x1d\x2a\x14\x77\xae\xf3\xa6\x18\x14\x8a\xf2\x9c\x36\xb3\xeb\xce\xa9\x58\x0a\x13\xc8\xb1\x34\xd0\x55\xe6\xeb\x6f\xd3\xbd\xba\x1a\xcb\x6d\x93\xf4\xb0\x81\x2b\xce\x0a\x8d\x7c\x4c\x5e\x49\x6f\x70\x3a\x15\x27\x5c\xac\x00\x8e\xe3\x3e\x93\xbe\x4c\xcc\xbf\x8d\xf5\x52\x47\x31\x0c\x50\x50\x5e\xb8\x36\x99\x55\xee\x68\x8b\x68\x35\xe0\x36\xbb\x24\xbf\x42\xca\xd3\x69\x99\xa0\x7e\xae\xdb\x19\x3c\x62\x37\xb3\xd2\xb1\xfc\x43\x29\xe7\x08\x3f\xb8\xe3\x14\x15\xab\x78\x95\x6e\xa8\x35\x1b\xad\xa8\xab\xe9\x8e\x9f\x1a\x6f\x89\xcd\xe5\xb0\x55\xb4\x8b\x71\xff\x14\x62\x2b\xe4\xf9\x42\xcd\xeb\xe5\x82\x84\x66\xd1\x92\xf9\x82\x9a\x99\x49\x2e\x43\x1c\x88\xfc\x08\x85\xfb\xe7\x3c\xa1\xe5\xdc\x26\x22\xf1\xc9\x02\x47\x3c\xb2\xe2\x06\x57\x50\xf3\xce\xa7\x6f\xa0\xfa\xc6\xe9\x8a\x3b\xa8\x8d\xd5\x03\xe1\xda\xbe\x58\xeb\xda\x1e\xcb\xab\xa9\x7e\xa3\x46\x59\x31\x84\xf0\xf0\x2f\x80\x44\xcc\xfd\x00\x48\x4a\x1b\xae\x84\x40\x6a\x06\xa4\xe9\x48\xc7\x3f\x33\xa6\x97\xda\x4e\x06\x84\xb0\x3e\x34\xe3\x9d\x78\xab\x14\x51\x5b\xa2\x1b\xb9\xec\x5f\x57\xc0\xa5\x02\x2c\x8d\x41\xc4\x13\x82\x08\xc2\x01\x22\xb6\x93\x65\x20\x7f\x6d\x7e\x3e\x9c\xd8\x22\x80\x9d\x8d\xe7\xc8\x7c\x12\xfc\x36\x29\xc0\x4b\x65\x8c\xb6\x5e\xa0\x7b\xc7\x22\xf9\x8b\x2c\x6a\x92\x5e\x4c\x3d\xfb\x18\xb0\x86\xec\x66\xec\x88\xf0\x59\x24\x82\x78\xcb\x51\xa9\xe9\xc5\xd4\xcd\xe5\x0f\xee\xfd\x1f\x63\xdb\x9a\xc7\x8b\x14\x71\x17\x71\xfe\xd7\x3c\xbe\x40\xe2\xaf\x98\x11\x0e\xe6\xf5\x00\x90\xfc\x00\x0f\x55\x15\xc5\x50\x5c\xc2\x9b\xda\xa5\x97\x04\xf9\xd4\x78\xc9\x27\x4b\x3d\xe4\xe2\x38\x40\xf6\xba\x28\x64\x15\xd9\x1b\x7b\x2a\x13\x06\x58\x78\x1a\x37\xd7\xd7\xab\x0c\xf8\xde\x42\xfe\x18\x8d\x41\xe0\x2d\x5c\xc1\x42\xf9\xbb\xb9\xb7\x70\x17\x38\xa4\x67\x8b\xc9\x24\xbc\xba\xbe\xb6\x2c\x90\x78\x66\x21\x89\xc0\x71\x27\x61\x44\x11\xb1\x91\xf7\xd4\xe2\x35\x59\xac\x7b\x1e\x72\x0e\xc2\x89\x7d\xec\x79\xbe\x0c\xc8\xbf\xbe\x3e\xf6\xbc\x44\xfe\x68\xbb\x22\x4d\xaf\x06\x02\xfe\x09\x5b\xa3\xd4\x4d\x29\xf4\xbf\x38\xb6\x23\xe6\x93\x38\x6e\x4c\x18\x75\xc8\x17\xef\xd8\x8f\x0f\xa2\xa4\x84\x63\xfb\x0e\x38\xf7\x7c\x9d\x58\x44\x60\xf1\x58\x65\x1c\x49\x74\x4d\x0c\xec\x3d\x5d\xd1\x07\x1e\x1a\xe1\x31\xcf\x08\xe0\x80\x19\xfb\x18\x74\xb9\x42\x84\x89\xda\xec\x83\x41\x3c\x87\x21\xb6\xed\x63\x10\x8a\x7d\x42\x1d\xdb\x07\xc8\x7b\x8a\x5c\x26\x9d\x3b\x8e\x4b\x18\xcd\xdb\xa3\x63\x80\xc7\x0e\xb8\x30\x86\x78\x13\x62\x04\x89\x31\xc8\xe8\x18\xf0\x71\xe6\xf0\xca\xb1\xcf\x9d\xb1\xee\x1b\x83\xe3\xb1\x03\x96\x02\x56\x48\x10\x64\x9d\xae\xd8\xf4\x67\xb6\xdc\x30\xf2\x63\xcb\x01\x7b\x7a\x61\xa3\xd1\xf1\x98\xfd\x3c\x56\x3f\x07\x63\xc7\x01\x53\x6f\x64\xfd\xe9\xe5\x8b\x57\xc7\xaf\x1e\x5b\xc0\xfa\xd3\x8b\x1f\x4e\x1f\x3e\x7c\x64\x8d\x5d\xa1\x90\xb3\x23\x37\xf5\x67\x68\x8e\x3e\xc2\xf3\x08\xc1\xc5\xe0\xd8\x39\x48\xdc\x10\xfb\xd1\x22\x40\xa9\x6d\xbd\x5b\xd0\x73\x46\x60\x96\x73\x78\x68\x97\x86\x3a\x7e\xf5\xf0\xf8\xf9\xe9\xba\xa1\xc4\x7a\xbd\x33\xe0\x7f\x47\x82\x10\xc3\xc8\xb1\xa7\x1a\x03\x09\xdb\x39\xd5\xfd\xc0\x20\xb4\x27\x8e\xfb\x8f\x38\xc4\xfa\x21\xa4\x94\xd8\xd6\x24\x8c\x22\x0b\xd8\xab\x2f\x68\x39\x44\x99\xe3\x3d\x7d\x67\x33\x3c\x88\x97\x29\x25\xf1\x17\xd4\xf8\x3a\xb0\xc0\x52\x4c\xeb\x93\x87\x5c\x76\x61\xc3\x81\xde\x66\xa2\x09\x57\xe6\x59\xc0\xf2\x17\x24\x8d\x89\xe5\xb8\x3c\xaa\xc5\xb6\x2e\xc2\x34\x14\x19\x4d\x85\x61\x22\x40\x58\xf7\x11\x45\xb7\xc1\x40\xfd\x96\xf5\xb6\x41\xac\x1e\x5c\x59\xe0\x58\xfd\xbd\x64\x7f\x83\xf7\xed\x59\x8d\xab\x6e\x8b\x8e\x73\x30\x89\x89\xcd\x18\xfa\x65\x2f\x9e\xd8\xef\x4d\xc4\xb9\xc6\x25\x91\xf6\x23\x34\x45\x6c\xdd\x72\xc6\xb2\xa6\x71\xba\x98\x9b\x2d\x13\xc7\x59\x09\xb6\xf8\x5e\xa3\x88\x09\xd2\x65\x0c\xd5\x7e\xf0\x00\x75\xed\xd3\xf7\xe3\xc8\x44\xf4\x39\xf4\xbf\x4c\x79\x19\x26\xf9\x06\xbc\xb3\x2f\x1d\xc6\x19\xd5\xc0\x5c\x52\x73\x5c\x8a\xae\xa8\x7d\xe9\x94\x1f\x6f\xfe\xa0\xb8\x52\x39\x19\x03\xf2\x95\xb7\x11\x8b\xaa\xfd\x81\xe2\x64\x4f\x07\x87\x87\x1d\x50\x23\xd0\x5b\x37\x79\xc9\x39\xbb\x80\x90\x2e\xe6\x7a\x3e\x6c\xfe\x5f\x38\x5b\x2f\x9f\x3e\x56\x31\xc4\xf8\x7d\x2d\x11\xf3\x1f\x11\xb2\x1c\xf0\x69\xc3\xfb\x2f\xae\x08\x32\xfd\x28\x08\xd1\x46\xc0\xe7\x45\x93\xe6\x60\x06\xde\x83\x57\xe0\x93\x93\x39\x4e\x3e\x03\x46\x47\xa5\x19\x74\x1c\x81\x9f\x96\xb6\x71\xb6\xd7\x43\xa0\xb6\x61\x03\x00\xea\x75\xe6\x38\x19\xb8\x0c\xa3\xe8\x25\x62\xfc\x61\x29\xf3\x72\x54\x44\x97\x4f\x3a\x65\x1a\x24\x53\xee\x55\x9a\xaa\xda\x3f\xf7\x3c\x2d\x23\x1c\x1e\xaa\xbf\xda\x9e\xf8\x19\x28\x00\x6f\x48\x43\x00\x4b\x95\x79\x0c\x16\x20\x00\x73\xbe\xf1\x46\xc9\x58\x30\x07\x9e\xc8\x12\x11\xc7\x46\xce\xc1\x3c\xe7\x24\x89\x3a\x08\x63\x37\xc4\x17\x88\x50\x5b\x3e\x39\x67\xdd\xf8\x79\x72\x1e\xa6\x9c\x79\x38\xc5\x3a\x4f\x3a\xc7\x16\x3b\x3b\x18\xc2\x23\x34\xa1\x8e\x8d\xc1\x44\x88\x89\xb3\x83\x85\x42\x24\x7b\x63\x81\xa4\x7f\x72\xf2\xc0\x4a\xae\xd8\xee\xe4\x9b\xa4\xb8\x43\xc2\x39\x52\xa4\x6c\xcf\xbc\x09\xfb\xb6\x96\x44\x1d\x7b\xe6\xb8\xca\xe2\x60\x73\x19\x72\x95\xc2\x39\x7a\x09\x97\x43\x6b\xf4\x31\x0e\xe0\xb2\x07\xe9\xb8\x37\x1b\xce\xe7\xc3\x34\xed\x3d\xb7\x40\x04\x53\x2a\x5e\xff\x1f\x4a\x29\x22\x0d\x4d\xfe\x86\xd0\x97\xa1\x35\x7a\x03\x53\x3a\xee\x05\x41\x10\xf4\x20\x35\xdb\xb0\xaf\xbc\x8a\x52\x34\xb4\x7e\xfd\xf5\xd7\xde\xcb\x97\xc5\xd7\x99\xe3\x38\x60\x51\x0b\x4e\x61\x77\x09\xb0\x3e\xdf\x5f\xf9\x76\x34\x3a\x1f\x3b\xd9\xfd\x55\x9a\x7d\x76\x40\xc0\xa5\xaf\xd4\x36\x4a\x69\x21\x40\x1d\x29\x57\x60\x0f\x8e\xe8\x78\x74\x3e\x1e\x0d\xc6\x7d\xf5\xe7\xf1\xf8\x3f\x0b\xcc\x1e\x99\x83\x63\x35\x72\xe6\x80\xc2\x22\x67\x19\xe3\xf7\xaa\xc6\x97\x6f\xae\xdf\xff\x1b\xa0\xd3\x67\x6f\x17\x22\x5d\x61\xfa\x1a\x53\x34\x65\xa2\x98\xf3\xcc\xb2\x1e\xa0\xa1\x78\x61\xa3\xa7\xde\xe0\xf8\xf8\x19\x72\x69\xfc\x9e\x20\x3f\x4c\x19\x11\x9c\x3a\x43\xf4\xff\x06\xfc\xe1\x2f\xe1\x15\x0a\xec\x13\x67\x58\x6c\x71\xe2\x38\x43\xd6\x15\x9d\x1e\x1e\xb2\x0f\x3d\x7e\xf6\xc0\x46\x47\x03\x74\xea\x94\x06\x7a\x60\x7d\xb1\x44\xcb\xc7\xa2\xe5\x8f\xb2\xe5\xe3\x6a\xcb\xb9\x6c\xf9\xa3\x68\x39\x38\x91\x4d\x7f\xac\x36\x9d\xca\xa6\xba\xcd\xe0\xc4\xd1\xb3\x3d\x76\x1e\x58\xd4\x52\x25\xd0\x72\x9b\xd1\x62\x0b\xdb\x19\x37\xab\xf4\xd9\x5d\x77\x57\x52\x34\x4c\x4f\x8e\x5f\xfd\xef\x97\xdf\xfe\xab\xde\x9a\xf5\x93\xaa\x5e\x51\x17\xbb\xaa\x94\x17\xa5\x9a\x5a\x2a\x6e\xd5\x00\xb6\xa8\x6d\x2f\x6a\xd9\x8d\x50\xf2\x16\x8e\x2d\xc6\xa0\xae\xd2\x47\x82\x5c\x5a\x69\x63\x38\x2f\xd9\x3e\x6e\x71\x12\xe8\x8a\xae\x35\xb8\x9c\xb6\x0c\x3f\xe7\xff\x57\x10\xdd\xe4\xda\x5e\x26\xb7\xdd\x09\x3d\xe7\xd9\x95\x6f\xa9\xae\x62\xce\xb0\xe2\x7d\xaa\xa0\xb8\xf8\x5e\x41\xf1\x5f\xa3\x82\xa2\xbf\x9e\x03\x5f\xfc\x76\xf5\xb7\xdf\x3e\xc4\x0d\x1c\x98\x6d\x94\x6e\xfe\x03\x66\x36\xf2\x66\x5f\x02\x9d\xa2\xa0\x29\xc9\xce\xa0\xe4\x50\x55\x48\x9e\xff\x35\xdd\x0a\x7e\x68\xef\x56\x70\x7f\xa5\x80\xcf\x36\xba\x13\x0c\xda\xb8\x13\x18\xb8\x6c\xf6\x2c\x68\x70\x29\x28\x57\xf5\x7e\x6c\x78\xd0\x1a\xae\x63\x65\x9f\x82\x27\x86\xd9\x8d\x73\xc9\xdf\x0a\xb9\x76\xea\xda\x95\xed\xee\x77\xe2\x7b\x60\x24\xab\x10\x9e\xc1\x4d\xc7\x3e\xcf\x9b\xdf\x68\x3c\x1a\xac\xb3\x04\x6f\x4a\xdd\x50\x75\xa5\x33\xff\x7e\xc4\x6d\x44\x55\x01\xa0\x53\x14\xa0\x86\x35\x2a\x0b\x2d\x2a\x29\x4d\xea\x97\x9d\x10\x8b\x32\x8d\xfa\x24\x4f\x38\xca\xf6\xbc\xa5\xbc\xe3\xa4\xa5\xb6\xb1\xf2\x64\xb0\xd6\x32\xa8\x6d\x1e\x72\x41\x5b\x14\x62\xac\xb5\x8c\xad\x1b\x5a\x5a\x98\x6f\xa3\xc6\xe3\xa0\x4d\x25\xa0\x72\xd1\xcc\xb7\x71\x4f\x19\x77\x9f\x5f\xc0\x30\x62\x87\xce\xb6\x6e\x14\xeb\x7c\x1f\x6f\xc1\xa9\xe0\xa4\xb3\x53\xc1\x26\xf9\x4f\x59\x88\xa4\x15\x48\x97\x0b\xb5\x64\x29\x8a\x86\xc4\xf6\xbc\xcf\x1a\x93\x91\xb2\x2c\xbd\xe1\xf6\xc3\x9b\x09\x94\xb9\xd4\xd6\xba\x1c\x7d\x35\x79\xfd\x2d\x55\xa0\x97\x58\x29\x57\x9e\xcf\x21\xd5\xf5\xe7\x0d\x36\xca\xe4\xa6\x70\x62\xd7\x16\x17\x33\x53\xc7\x2a\xc6\xef\x08\xbd\x0b\x1b\xc0\x53\x46\x23\xf6\xe3\x80\xb1\x11\xa9\xd5\xcf\x7b\x89\x83\xe4\xfa\xda\xb2\x0e\x98\xdc\x41\x75\x8e\x60\x9b\x7a\x9a\x05\x09\x94\x61\xef\xf3\x7d\x33\xe9\x2d\x45\xf3\xcc\xbd\xbf\xa2\xfc\x3f\x46\x7a\xe6\xec\xf3\x41\xc3\x14\x46\x78\x9c\x19\xaf\xec\xfc\xef\xeb\xeb\xd1\xd8\x91\x32\xda\x31\x78\x28\xad\x59\x1a\x31\xde\xbd\xe3\xba\x02\xf3\xaa\xe0\xc9\xf6\xe9\x40\x2b\x79\x22\x7b\x6c\x63\x64\x75\xb5\xe6\x8d\x55\xba\x41\x6a\xd0\xca\x07\xef\x0d\xb2\x6a\x05\x7a\xf3\x14\xed\x5e\x7c\xde\xec\xfd\xb5\xeb\xce\x0b\x96\xb4\x2b\xaa\x02\xfc\xf7\xf7\x6f\x1e\xff\xf7\xcf\xa7\x0d\xaa\x02\x9d\xce\xb1\x5a\xef\x66\x63\x2a\xc0\x87\x26\x53\xad\x14\x43\xea\x70\x80\xd7\x3b\x56\xd4\x0a\x29\x8b\xb4\xaf\x19\x7a\xbd\xac\x62\x4c\x30\xaf\x1e\xb5\xa1\xfe\xd0\x36\xe5\xfc\x40\x67\x05\x04\x9f\xbe\xdb\x38\x91\xee\xc9\x15\x9a\x60\xcd\x73\x6d\x7f\x33\x28\xd5\x22\xd5\xc5\x2f\x29\x69\x4d\x2d\x77\x55\xc9\xd4\xf1\x63\x0d\xf0\xd6\xfa\xfa\x75\x44\x6e\x4e\xd6\x9d\x4a\x8f\xdd\x3e\xda\x6e\x21\x61\x65\xdb\x12\x4a\xf5\x32\x58\xb7\x4d\xca\xfd\x9e\x48\xc1\xb1\x6b\x2b\x84\xb0\x71\x42\x3c\x35\x50\xd2\x4a\xaa\x6c\x96\xd7\xb4\x70\x95\x4b\x6a\x3c\xfe\x83\xa1\xfd\x86\x42\xd6\x62\xe7\x72\x45\xaa\xa2\x55\xdf\x75\x76\xdf\x75\x76\xdf\x75\x76\xff\xf5\xc7\xcf\x3f\xfe\xe3\x2f\xef\xff\x5a\x2f\x0a\xc9\x74\xa1\xdc\x4b\xab\xa8\x9b\x33\xb3\x85\x6e\x2c\xf1\xd6\x20\x37\x1d\xd7\xe5\x41\xfa\x81\x5d\xde\x6f\x5a\x96\x74\x90\xfb\xba\x3f\x06\x16\x9b\xdf\xcf\xf1\x55\x35\x2a\xe2\xb1\x4e\x14\xda\xcb\x0b\x06\x2e\xcb\x0f\x84\x7f\x4a\xe9\xe1\x4c\x55\xf4\x34\xce\xa5\x87\xc0\x4a\x08\x62\x48\x42\xcf\xd3\x04\xf9\xf4\x03\xa4\x61\xcc\xaf\xaf\xd8\xb0\x1c\x69\x1d\xe4\x31\x18\x59\x53\x44\x5f\xfb\x31\x7e\x2f\x73\xab\x16\xaa\x7f\xca\xe6\x83\xf5\xcd\x81\x99\x12\x66\x4d\x48\x04\x9a\xd4\x95\xf6\xcb\x1b\xcc\x21\xf9\x22\x4f\xa7\x47\xa0\x6c\x56\x92\x5f\x5f\x84\xa2\x70\x65\x9f\xab\x84\xfa\x41\x6c\xa6\x50\x13\x87\x9f\xf9\x86\xe7\x5d\xd1\xd8\xb7\xfa\x27\xbd\xfe\x49\x6f\xf0\xa8\x37\x78\xa4\x5e\x12\x34\xf9\x5f\x0b\x58\x8f\x8d\xdf\xff\x67\xfe\x16\x93\xfa\x9b\xf0\x10\x2a\x3f\x56\x09\xf4\xe5\xf3\x66\x3f\x74\x3f\x24\xbe\x54\xbf\x3c\x04\x96\x7f\x65\x0e\xe5\x2f\x0b\xdf\x2f\x8c\x56\xaf\x84\x6a\xd2\x4c\x6d\x81\x40\x48\x48\x7c\xd9\x80\x42\xf5\xae\x8c\xc4\x41\xaf\x3f\xe8\x0d\x4e\x7a\x83\x93\x12\x12\x1f\x95\x90\xf8\x68\x1b\x24\x3e\x64\xa7\x7e\x88\xb8\xa2\x18\x2e\x68\x2c\x62\x89\xfb\x92\xd5\x6e\xf2\xf7\x8f\xa3\xe5\x54\xfb\x42\x5b\x5c\xef\xc0\xd8\xc0\x71\xef\xb8\x37\x38\xee\x3d\xe2\xff\x7c\x0d\xec\x06\x08\x2f\x6b\xa9\xd3\x78\xf1\x9d\x38\xd7\xa3\xaf\x9e\x36\x0b\xaf\xfe\xa5\x49\xb3\x39\xb4\xa2\x50\x7a\xfb\xa4\xfa\xc3\x60\xd7\xdd\xa3\x0a\x8f\x6b\x62\x64\x4f\xc0\xc8\x32\x2a\xef\x8d\x6f\x9e\x01\x5a\xa3\x0d\xb2\xa3\xaf\x05\xd1\xa8\x69\xf0\x5f\x06\xd1\x3c\x02\x56\x60\x55\x4c\x3d\x27\xc2\xfe\x40\x95\xfd\x21\x25\xbe\x65\xbc\xe2\x3f\x95\x8d\xe1\x91\x22\x07\x99\xd6\xa0\x30\x0d\x6b\x41\x22\xfb\x4f\x79\x15\xed\x2a\x0b\x30\x13\xee\x1b\x63\x21\x1c\x74\x1a\x89\x93\x7c\x79\xac\x72\xc9\x43\x50\xbb\x18\xdb\x5e\xb9\xd5\xed\x79\xff\xd7\x42\xcb\x04\x37\x5f\x0c\xe3\x6c\xbc\xd3\xd5\xa8\xd1\x18\x6c\x55\x75\xb9\x35\x4b\x78\x72\x3b\x2c\xa1\x5a\x9d\x5d\xd8\xc3\x4a\xb5\xb3\x2b\x46\xd8\xba\xdc\x1e\x83\x52\xc2\x9f\xe7\x0c\xf7\x28\x30\x45\xd4\x9a\x56\x7f\x81\xe9\x7b\x8d\xf0\x9b\x97\xeb\xaf\x33\x70\xa9\x14\x2a\xe5\xb2\xd3\xba\x42\x81\x51\xe9\xc0\xc8\xa3\x51\xa8\x33\x5d\x57\xcc\x63\x2d\x18\xc0\x8a\x7e\xb0\x4a\x45\x02\x0a\x29\x95\xc2\xa0\x3e\xee\xda\xdc\x96\x83\x72\x79\x74\xf3\x61\x09\xb1\xac\x6f\xd8\x74\x37\x10\xae\x5a\x42\x93\x53\x56\x77\x1e\x1b\x16\x7b\x5d\xff\xbe\xb1\xac\x75\xa7\xfa\x23\x6b\xd5\x48\x5c\x85\xa4\x7d\xbf\x26\x21\x0e\x44\x95\x6a\x6d\xcc\x93\x91\x5f\x35\x85\xb0\xd3\x8b\x69\xdf\x5f\x90\x0b\xa4\x54\x4f\x9d\x8b\x62\xdf\x2c\x35\x49\x51\x29\xd4\xda\x24\x58\xae\x76\x1d\xc4\x73\xa3\x7e\xe8\x6d\xd9\x07\x8b\x44\x50\xb1\x13\xb2\x8f\x6a\x0b\xe1\x14\xd1\x1e\x23\xb8\xdc\x72\x25\x6b\xee\xcd\x5d\xfe\x58\xb7\x2a\x5c\x23\x8d\xa2\xac\xb9\xc9\x4e\xb0\x0b\x60\x9a\x05\x99\xac\x07\x70\xfb\x02\x82\x1c\xa7\x3d\x11\x80\x22\xab\x05\x16\x80\xf1\x30\x8f\x2b\xc2\xba\x60\x31\xf1\x12\x48\x52\xf4\x4b\x14\x43\x6a\xf3\x92\x8a\xdc\xc9\xff\x0d\x57\x08\xd8\x0e\xc3\x2d\x7f\xfa\x9e\xc9\x6f\xcf\xa9\x7c\xfe\x2b\xa4\x33\xd7\x47\x61\x64\xbb\x8f\x1f\x3f\xfe\x0f\xe2\x38\x46\xdd\x62\xec\x86\x01\xb8\x1a\xf2\x36\x3c\x30\xc2\x86\xee\x55\x1f\xb9\x57\x0e\x58\x16\x9f\x2e\xfb\xd4\x5d\x3a\x59\xe6\xd4\x19\x15\x4b\x8b\x70\xf3\x5a\x83\x15\x4b\x22\x5f\xc7\x9b\x97\x17\x2c\x8d\x5a\xd1\x18\x74\x37\x1c\x56\x86\xb8\x73\xeb\x21\x09\xc3\x7e\x38\x61\xdc\xa7\xcf\xd3\x5d\xcd\xe2\x88\xa7\x96\x34\x75\xb5\xbc\x55\xab\x6e\x77\x50\xef\x47\x68\xb1\xf5\x46\xee\xa4\x91\x5e\x86\x28\x0a\x54\x24\xb2\x01\x50\x1e\xa1\x9c\x36\x34\xbf\x39\x20\x8d\x1d\xf4\xcd\x60\x55\x24\xb6\x29\xa2\x35\xd6\x70\x0d\x38\xdb\x2c\x0d\xf0\xaa\x64\x60\xe9\x11\x4c\x92\x28\x54\xe9\xa7\x4c\x88\xf3\xe6\x0b\x1a\x46\xe9\x11\x89\x17\x34\xc4\xd3\x23\x4a\x20\x16\xb4\x26\xdd\x66\xd6\xab\xe0\x41\x0c\x16\x05\x5f\xff\xfd\x51\xc3\x07\xdf\xd5\xf0\xff\xec\x6a\x78\x26\x43\xcc\x73\x19\xa2\x2c\x32\x30\x9a\xe7\x75\x79\x9b\x64\x8a\x94\xc6\x04\x19\x52\x45\xf9\xfd\x04\xa1\xe0\x1c\xfa\x5f\x78\x69\xdf\xa2\xe0\x91\x96\x04\x0f\x15\xa8\xae\xb6\xe6\x06\xf9\xc3\x97\x02\x86\x9c\xa2\x92\x31\xf4\x73\x31\x33\x10\x97\x1e\xeb\x09\x81\x85\x14\x4a\x08\x82\x0b\x3a\x8b\x49\xf8\x07\xd2\x31\xec\xaa\x95\x8b\xae\x90\xbf\xa0\xc8\xb6\x1d\xef\xa9\x0c\x6f\x67\xe3\xba\x21\xbe\x80\x51\xc8\x5d\x9d\x1c\x5d\x5f\x6d\x95\x1d\x84\x13\x19\xc3\xab\x64\x16\x2a\x9d\x89\xd8\x9b\x62\xbc\x99\xf0\x62\xaa\x2d\x38\x0f\x0c\x31\xdc\xb9\xbe\x36\x9a\xbb\xec\xc5\x01\x2a\x8e\xc1\x1f\x1e\x1e\xda\x58\xfe\xf6\x2c\xeb\x01\x72\xb2\x4c\x49\x2d\x7a\xe4\x77\x97\x18\x11\x21\x65\x01\x28\x46\x10\xe8\x73\xfd\x05\x21\x08\xd3\x0f\xec\x97\x8b\xe1\x1c\x81\xc8\x23\x6e\x14\xc7\x5f\x16\x89\x24\x83\xa1\xf5\x00\x2a\xd1\xa5\x57\x7e\x67\x72\x51\xb6\xd5\x26\x04\xa5\x33\xdb\x61\x07\xf1\x3c\x4c\x91\xeb\x43\x5a\x60\x0e\xce\x2a\x73\x1c\x97\xce\x10\xb6\x91\xf7\x14\x2a\x78\x6a\x66\xc3\x60\xbb\xbe\xd6\xa8\x53\x30\x3e\x8b\xdc\x9c\x11\x7f\x8c\x19\x51\x14\x43\xd4\x9a\xc6\xe3\xcc\xd7\x19\x22\x27\x03\xc8\xe5\x22\x44\x6d\x1c\x5d\xe6\x80\x15\x97\xb5\x42\x2f\xb0\x53\x53\xe0\x50\x04\x77\x73\x21\x2b\x2e\x0f\x2d\x69\xf6\x16\xc4\xac\xf2\xc8\x39\xd9\xdf\xbc\x8a\x73\x19\x1f\xf9\xfe\x11\x55\x9c\x37\x89\x6f\x8d\xbd\x1d\x90\x9a\x92\x5b\x6a\x4a\x6e\xf3\xcd\x27\x79\xe0\x1f\x41\x3f\x62\x17\xf0\x28\xf4\x43\x94\x1e\x29\x23\x60\xfd\xa9\xbe\xb6\x2b\xcf\x32\x7c\x17\xa5\x18\x39\xcb\xc3\xeb\xf3\x49\x36\x4a\x69\x9b\x26\xdc\xec\xbb\xc6\x4e\x6f\x7e\x94\x1f\xdc\xce\x99\x01\x3d\x9b\x36\xb1\xfc\x98\xb0\x7b\x26\xee\xce\xde\xd5\x24\x21\x88\x0e\x4c\x56\x2f\x2e\x79\x00\x7b\xd6\xf9\x22\x14\xb2\x76\x24\x1e\xd9\xd0\x63\x02\x40\x3d\x4c\x6c\x28\x53\x8e\x82\x8d\x72\x14\x6c\x90\xa3\x60\x59\x8e\x82\x85\x13\x1f\x56\x4f\xfc\xc8\x90\xa3\xd8\x4b\x5b\x1e\x5a\xbc\x65\x29\xfc\x58\x9c\x34\x31\x99\x0b\xde\x27\x61\xe3\x4f\x6c\x8b\x2f\xec\xd2\x72\xb2\x14\x51\x09\x51\x88\x52\x5b\x1d\x82\x6e\xf1\xb1\x29\x8c\xa1\x5c\xd4\x91\xd1\xab\xe9\x65\xc8\xb8\x2f\x75\x56\x3e\x4c\x91\xb0\x9b\x0f\xd1\x88\x8e\x3d\x3d\x05\x36\xde\x4b\x48\xa1\xcd\x1e\xf3\xf4\x23\xfc\x17\x3b\x1d\x25\x3f\x04\xc8\x61\xec\x90\xc9\x56\xf9\xf6\x4d\x8d\x25\x09\xbd\x11\x1d\x83\xd8\xbb\x09\x73\x01\xbe\xb7\xca\x80\x09\x4d\xdc\x20\x5a\xfa\x4c\xb4\x8c\xa5\x68\xe9\x17\x45\x4b\xbf\xb0\xd0\x65\xd1\xd2\x6f\x14\x2d\xfd\xeb\x6b\xbf\x2c\x5a\xfa\x45\xd1\xd2\xf7\xc2\x36\xa2\x25\xe7\x16\xea\x3a\x62\xb3\x7b\x00\x72\xae\xaf\xd9\xa1\xe2\x3b\x60\x61\x88\x96\x7e\x49\xf0\xf3\xa5\x68\x59\x78\xfe\xcc\xaf\x12\xda\x42\x8b\x96\xfe\x7a\xd1\xb2\xfc\x85\xfa\xbd\xc2\xa6\xe8\x33\xf0\x84\x68\x49\x3c\x1f\x60\xe1\x0e\xa5\x2f\x31\xc0\x37\xd8\x31\x6c\xcf\xa2\x48\x1c\x6d\xc5\x8b\x45\xbf\x7d\x61\xc4\xc6\x6c\xbf\x73\xe1\x7f\x1a\x2e\xcc\x56\xf5\x3b\x0f\xfe\xce\x83\xf7\x9d\x07\xd3\xf8\x0b\xc2\xdb\x30\x61\xd9\xf1\x9b\x73\xe1\x83\x4e\x70\x6e\x60\xc3\xb7\xa3\x61\x55\x9c\x37\x67\xa6\x79\x6e\xbd\x78\x3e\x5c\x67\x83\x91\xfb\xb5\xa1\x8d\x64\xdd\x61\x7a\xe6\xc7\x09\x0a\x86\xf7\x06\x7c\x93\xb6\xcb\x69\xb3\x96\x9d\x71\xf4\x58\x4e\x06\x0a\x9c\xab\x9a\xc2\x4f\x8e\xfc\xb5\x38\x5a\x9e\x78\xb0\x92\x53\x90\x91\x99\x52\xaf\x68\x5b\x11\x8e\xc9\x9c\xef\xa5\x57\x17\x08\x53\xde\x08\x90\xfc\xab\x07\x94\x2c\x57\xc4\x9d\x41\x1c\x44\xb2\x09\x76\x32\xa1\x81\x80\x0c\x42\x12\x5f\xf6\xb0\x2b\xf2\xf1\x0a\x65\x07\xcc\xb2\x2c\x33\xaf\x9b\xb4\x7e\x6f\x71\x2b\x3e\x0c\x60\x42\xcb\x0a\xff\x9f\x10\x5b\x4b\x9e\x58\xf4\x28\x40\xe7\x8b\xe9\x3e\xe9\xc3\x03\xe4\xc7\x04\xd2\x98\xed\xa4\x42\x00\xb9\x01\xe0\x25\x5c\x4e\x20\xb9\x25\x83\xc5\x9c\x2d\x86\xd7\xe0\x14\x8c\xbd\xa2\x26\xc7\x5c\x17\xe4\x3d\xb5\x29\x57\x48\x7b\x4f\x6d\xec\xf2\x29\x98\xd3\xc1\x8e\xb6\xd5\x61\xad\xa2\x92\x3b\x6b\xc8\x38\x06\x0c\x31\x22\x96\x23\xf4\x6c\x5a\x9d\x45\xbd\xa7\x50\x70\x7d\x17\x26\x49\xb4\xb4\x09\x18\x21\x40\xc7\x1c\x5f\x90\x4d\x40\xce\xd8\x7b\x8a\xc5\x9f\x36\xda\x8c\x4b\x82\xb8\xa1\xe7\x6e\x38\x11\x72\xd9\x31\xf1\x57\x7e\x52\x21\x57\x7e\xaa\x1c\x68\x26\xf7\xaa\x8d\x15\xca\x56\x25\x12\x51\x18\x87\x0c\x21\x12\x76\x2e\xd3\xe5\x2c\x45\xe1\x08\x7b\x9e\x87\x9e\xd1\x21\xe6\xec\xa3\x86\xce\x20\xdb\xee\xf5\x63\x88\xcd\xa5\x26\x49\x0f\xcc\xc9\xd7\x68\xdf\xa8\x48\x2a\x85\x9c\x4c\xd9\xb2\x36\xdb\xb0\x78\x65\x90\xc6\x83\x6d\x12\x4e\x59\x8b\x90\xc4\x78\x2e\x9c\xf4\xca\xe6\x9d\x29\xa2\x7d\xb3\x45\xa5\x06\xc6\x56\xab\x85\xf0\x45\x71\x4d\x08\x23\x6e\x6c\xa8\x29\xd5\x9f\x40\x24\x9c\x05\xca\x74\xcd\x10\xc6\x7a\x93\x7a\x70\x45\x8e\xce\xa3\x84\xa0\x20\xf4\x21\x45\xe9\x11\x5c\xd0\x59\x7f\x8e\xe8\x2c\x0e\xee\xf4\xec\xcb\x1f\xac\xbe\x84\x38\x18\xae\xbe\x2c\xce\x11\xc1\x88\xa2\x74\x28\xe9\x0d\xb9\x1f\x97\x09\xf2\x3c\x8f\x82\x7f\x5c\xd2\x9a\xa7\x71\x18\xf8\xd5\xc7\x19\x10\x8c\x67\xb8\x8a\x62\x1f\x46\x46\x03\x76\x6e\xbd\x61\xcf\x42\xba\xe4\x03\x4c\xa3\xf8\x7c\x6d\x0b\xc6\xcf\xdb\xe1\x6d\x86\x60\x44\x67\x7d\x7f\x86\xb8\x7a\xf4\xab\x20\x4e\x04\x1f\x0d\x57\x09\x4c\xd3\x10\x4f\x73\x38\xce\xf8\x0b\x0e\xa2\x2c\x83\x5c\xfb\xce\x27\x21\x0d\x0b\x28\xca\x5f\x66\x40\x2c\x8b\xe2\x7a\xba\xc9\x7f\x87\x38\xe0\xbd\x71\x1c\xd4\x3c\xce\x00\x47\x01\xef\x38\xa9\x59\x33\xa1\xbf\xad\x79\x31\xa3\x34\xa9\x79\x4c\xfd\xda\xa7\x34\xaa\x79\x1a\xc4\xfe\x17\x44\x6a\x5e\x4c\x49\x52\x43\x28\x00\x46\x21\xac\xa1\xb6\xf6\x8b\x1e\xe6\xce\x54\x5f\x67\xc5\xa1\xef\xa3\x34\x1d\xae\xb8\x8b\x60\x3e\x73\x51\xc3\x4d\xe0\x00\xe1\x65\xed\x0b\x0b\x26\x49\x1f\x5e\x42\x82\xac\x21\xf2\x9e\xea\x5b\x85\x6a\xd4\x1e\xea\x2f\x17\x5f\x97\x33\x4c\xb8\x8b\xc3\x90\x27\xd0\x0d\xd3\x5f\xf8\x2f\xc0\xb3\xb7\x7a\x4f\xef\xe5\x8f\xda\x03\xc0\x28\xf7\x9f\x62\x8f\xb6\x86\x58\xea\x81\x0b\x27\xdb\x1c\xa3\x79\x8c\xc3\x94\x1e\xa5\xe8\x4e\xae\x65\xe2\xd0\x95\x8b\x68\x09\x5e\xdb\x9f\x43\x0c\xa7\xa2\xb6\x9b\x5a\xd1\x3f\xf3\x37\xbf\xea\x17\x20\xa5\x10\x07\x90\x04\x7a\x81\xcb\x2d\x32\x10\x68\x5f\xcf\x21\x97\xd7\x0a\x04\x9d\x3b\x82\xa6\xd7\xd7\x79\xe6\x73\x9e\x2b\x33\x15\x25\xad\xce\xc2\x3f\x90\x8d\x01\x46\x97\xbd\x33\x44\xed\x42\x1f\xc7\x79\x7a\x9c\x6d\x16\x15\xaa\x58\x56\x75\x9c\x43\xcc\x20\x28\x8b\xbe\x5f\x0b\xdf\x77\x49\x71\x32\xcb\x3b\xf2\x9e\x0a\x4c\x9f\x09\x88\x5f\x30\x96\x9f\xca\x04\x1a\xfa\xfc\x95\x0b\xc3\x4d\xd5\xed\x16\xe1\xd5\x15\x45\x04\xc3\xe8\x8c\x0f\x20\x52\x63\x38\x37\x59\x8a\x6f\x4a\xf1\xe5\x88\xff\x9a\x33\xd4\xa2\x88\xcc\x43\x0c\x69\x88\xa7\x6b\xdb\xcd\x51\x3a\x5b\xd7\x40\x1d\xd3\x62\xc7\xb0\xc7\xc0\x0a\x71\x9f\x75\x93\xfb\xec\x35\xfe\x15\xa5\x33\xe1\x95\x6a\xbe\xb9\xa7\x5e\x65\xa0\x91\x72\xd8\xeb\x75\xd4\x53\x7a\x5f\xa5\xa0\x52\x83\x12\x15\xb1\xb7\x82\x84\xb8\x27\x64\x06\xd4\x06\x1a\xae\x44\x49\x74\x44\x50\xa0\xa0\x10\x6f\x5e\xc4\x0b\x4c\x9f\x1e\x0b\x70\xf2\x46\x56\x3e\x68\xa1\xe5\x6d\xd3\xe4\xf5\x35\xce\xb3\xa0\x23\xf7\xbd\x4a\x45\xb6\x1d\xb1\x0a\x85\xca\x57\x3d\x53\xbb\xb0\x63\x29\x25\x0b\x5a\xe1\xd2\x31\x10\x92\x35\xef\xc0\x1f\x34\x9e\x44\x11\x4c\x67\x47\x31\x9f\x7f\x71\x2f\x0a\x45\x87\x1f\x85\x7d\xd1\xa6\xd0\x72\x8f\x94\x1e\x93\x98\xcc\x45\x2a\x9e\xaf\xb2\x7a\x34\x9c\xa3\xe1\x6a\x36\x9b\xcf\x99\x18\x38\x8b\x17\x64\x68\x71\x38\x42\xdf\x02\xf3\x10\x73\x0f\x1b\xfd\x20\x45\x7e\x8c\x83\xfc\x41\xc6\x0f\xce\x9b\x0d\x80\x79\xf2\xe0\xe1\xca\x8f\xe7\x09\xf4\xe9\x70\x85\x63\xca\x3d\x76\x86\x96\x7c\x64\x65\xe0\xd5\x6f\x1f\x86\x2b\x9e\x28\x7a\x68\x09\xb7\x19\x26\x7d\xa8\xbf\x86\xd6\xab\xdf\x3e\xf0\xaf\x85\xf3\xc5\xfc\x17\x22\x14\x77\x2f\xc3\x69\x48\xd3\xe1\x09\x98\xc3\xab\xba\xe7\x19\xf8\xed\xec\xe5\xda\x51\x7f\x3b\x7b\xd9\x7d\xd4\x46\xd2\x8d\xc9\xbc\x41\xc2\x37\xaf\xfd\xd2\x81\x2b\x8c\x71\xa1\x71\x45\x31\xc0\x86\x3b\x52\x16\x96\xdb\xd1\x0a\x28\xa2\x30\x15\x57\x9e\x65\x01\x98\xb3\x36\x10\x79\xb9\x77\x62\x64\x63\xb0\xca\x1c\x37\x45\xf4\xaf\x62\xd6\x31\x49\x6d\xe8\x64\x0d\x4a\x85\x35\x14\x5f\xbe\x04\x34\x61\x84\xb5\xfa\xa7\x47\x45\x9d\x70\x5d\x8f\x0e\xd5\xf2\xdb\xa1\x44\xcd\x60\x2d\x62\x0c\x59\x78\xb8\xa2\xcb\x04\x0d\x2d\x11\x8a\x92\xdd\x16\xca\xb8\x45\xb4\x05\xc2\x44\xbb\x6f\x87\x2e\xf1\xfd\xae\x54\xe4\xc2\x20\xb0\x51\xc9\x05\x67\x3b\x44\x55\x44\x83\x26\x4c\xc9\x86\xfb\xb4\xd9\xea\xd1\x54\x78\x2a\x2c\xe7\x5d\x51\x37\x43\x51\x82\x48\x7a\xd4\x97\xf5\x52\xea\x24\x0f\xf9\xaa\x2f\xda\x56\xbb\xec\x91\x08\xa2\xe7\x3e\x83\xa9\x2c\x86\xcd\xc3\xda\xd2\x3a\xb8\x8d\x92\xd9\x69\x3f\x89\xa3\xe5\x24\x8c\xa2\x35\x43\xec\x35\x1e\x6e\x82\x80\xbd\x84\x7c\x4d\x4d\xf4\xce\x98\x68\x1e\x6b\x1f\x31\x73\x6b\x68\xf9\xe7\xc1\x09\x3c\xaf\xe5\x10\x73\x48\x67\x7d\xd5\xc6\x6c\xbb\x93\x20\x36\x8f\xc9\xc1\x6b\x39\x1e\x3c\x4f\x37\xa3\xcb\x8f\x3b\xe0\x8b\x35\xde\x37\x84\x71\x00\xdb\x62\xcc\x8f\xdb\xa1\x6c\xd6\x09\x67\xb3\x7d\x44\xda\xac\x13\xd6\x66\x9b\xd1\x16\x04\xed\x91\xc6\x93\x85\xef\x17\xca\x18\x78\x6d\x11\x16\x04\x02\x5d\x35\xae\x5b\x39\x0a\xe2\x84\xf6\xb9\x5e\xa0\xb4\x41\x7f\x8a\x42\x7a\x44\x10\xbb\xf1\x5f\xa0\x5b\x14\xed\x36\x7a\xa0\xc9\x7c\x74\x7c\x82\x5c\x53\xb2\xa0\xc8\x1e\x21\x80\xc7\x80\x38\x2b\xee\x98\xc2\x67\x7d\xc6\x27\xed\xd8\x08\x8c\xf0\xd8\xc9\x36\x3b\x0d\x6b\x98\x71\x2d\x89\x50\xb2\xa8\xa3\x11\xbc\x7f\x34\x82\x3b\xd0\x08\x0e\x36\x6f\xa9\x24\xe9\x5f\x20\x92\xae\xd1\xe4\xd4\xfa\x77\xe4\x6a\x4a\x63\x04\x15\xca\x8b\xa6\xe8\x2a\xa9\xbb\x54\xe9\xd8\x57\x62\x23\x40\xbc\x55\xa6\x5c\x64\x8c\x2b\x92\xfb\xfc\xfd\x7b\x57\x0e\xc8\xdd\xb0\x23\x8f\xa8\xdf\xef\x70\xb4\xbc\xbe\x26\xee\x2c\x0c\xd0\xd9\x0c\x82\xd4\x23\x6e\x3a\x83\xe6\xe3\xbf\x8a\x96\x20\xe4\x7e\x9e\xca\xbb\x26\x3a\x3c\xb4\x59\xd3\xf8\xf2\x15\xa7\x44\x14\x1c\x1e\xda\xa1\x07\xa5\xb7\x11\x56\x1f\x50\x6f\x3f\xa0\xe9\xab\xab\xc4\x71\x40\x78\x7d\x5d\xd7\x4e\xbd\x77\x40\x5a\x1a\x28\x9d\xc1\xbc\xf3\xb3\x70\x74\x3c\x1e\xc2\x6d\x22\x49\x61\x92\x48\x50\x3c\x52\x6f\x50\x51\x41\xa1\x62\x37\xb9\x62\x45\x6d\xe2\x6c\xf6\x61\x35\x16\x1f\xd5\xef\x17\x1e\x83\xce\x93\xa7\x54\x37\x8d\xe8\xb4\x6f\xfb\x46\x82\xda\x76\xeb\xf0\xe6\x9b\x77\x4f\x1a\xd6\x8a\xca\xf5\x27\x12\x6b\xbc\x6f\x68\xe3\x00\xb6\x45\x5a\x1a\xe2\x56\x28\xeb\x20\xfa\xf0\xd6\x7b\x88\xb4\x0e\xa2\x0f\x6b\xdd\x02\x6d\x69\x38\xad\xa5\x35\xf1\xa6\xac\xaf\x91\xed\xf7\x0e\x73\x02\xca\xd6\xa8\x63\xcd\x37\xe3\x8e\xc2\x0e\xbb\x94\xc2\xfd\x43\x1b\x07\xb0\x2d\xd2\x28\x6c\x87\xb2\x93\x4e\x38\x3b\xd9\x47\xa4\x9d\x74\xc2\xda\x49\x2b\xb4\x75\x60\x6e\xbc\xf5\x1e\xa2\xad\x03\x73\x63\xad\x5b\xa0\x2d\x3e\x5f\x9f\x1d\x86\xb7\xb8\x33\xc7\x94\x3a\x39\x2a\xff\xd4\x08\x79\x96\x35\x56\x40\x15\x9d\xe7\xb9\x9b\xfa\x66\xd7\x06\x05\x68\xb3\x12\xda\x4c\x00\x54\xdb\x7a\x27\xc9\x64\x3d\xb4\x3e\xf4\x67\x28\xe8\xcf\xe3\x00\x45\x77\x5b\xf8\x85\xdf\x32\xe9\xc6\x5b\x26\x1d\xb3\x4b\x88\x84\xa3\x2e\x6d\x47\x25\xa6\x81\x20\x9e\x57\x30\x26\xcb\x23\xeb\x01\x72\x5c\x01\x92\x4d\x0b\x57\xd2\x86\x68\x96\x1c\x0d\x73\x14\x89\xf4\x0d\xb5\x7e\x1e\x29\x25\x21\x9e\x56\xb8\x83\xee\xb6\x93\x2b\xdf\x3c\x66\x0e\x6e\xcb\x41\x55\x87\x16\xf4\x54\x7b\x8c\xfb\x10\x17\x9a\xec\x24\xbe\x36\x42\xe6\xa3\xa8\x0f\xa3\xa8\xfe\x32\x86\x95\x2f\x47\x5d\x8f\xfd\x84\x17\x97\x53\xa0\xd5\x2e\x26\xde\xaf\xcc\x67\xf9\xcc\x93\x90\xc2\xad\x36\xbd\xee\xb8\x93\x60\xaf\xdb\xf6\x39\xc8\xad\x37\xbe\xea\xb2\x19\xa1\xe7\xa4\x96\x5c\x6a\xe5\x2a\xde\x78\xdf\xd0\xc7\x01\x6c\x8b\xb8\x73\xd2\x82\x06\x51\x58\xcb\x4d\xea\x51\xc6\x1a\xef\x1b\xca\x38\x80\x6d\x51\x86\xc2\x68\x33\xca\x78\x7c\x6c\x8a\x68\x7f\x8a\xea\xb9\x93\x6a\xd0\xd0\x65\x27\x31\xd8\x16\xe6\xb4\x3b\xcc\xb7\xe3\x2e\xfe\x75\xa9\x46\x4d\xfe\x0c\x75\xd8\x70\x46\xa7\xf6\x18\x5d\x8b\xcd\xbe\xe9\xa4\x54\xed\xba\xaf\x58\xed\x8e\xd2\x16\xf8\x5c\xe0\x5a\x8f\x95\x35\x4a\x6a\xd1\x67\xef\x90\xc8\x01\x6d\x8d\xc0\x05\xfe\xb2\x19\x79\xec\x6a\xd4\x9f\xc3\xe4\xab\x25\x6c\x28\x5e\xa3\x91\x4e\xef\x4c\x3d\xe4\x0a\x17\x7f\xf6\xd0\x12\x02\x90\xe5\x79\x74\x99\xa0\x78\xd2\x43\xd7\xd7\x68\x84\x64\xa8\x4c\x7f\x30\x76\x78\x76\xe8\xda\x96\xcf\xd0\x10\x8d\x8e\xc7\x8e\xfb\x8f\x38\xc4\xb6\xd5\xb3\xf2\x40\x73\xd9\xff\xe9\xf1\x33\xaa\x73\xd4\x6c\xce\x3b\x50\x40\x56\x38\x59\x76\x15\xda\x54\xb7\x7d\xa3\x37\x0d\x6e\x5b\x92\x93\x1d\x5a\x50\xdd\x1f\xa7\xed\xd5\x87\xa2\xf5\xde\x21\x8f\x83\xd8\x1a\x73\x7f\x9c\x6e\x56\x1f\xfa\x71\x14\x89\x68\x9b\x26\x6d\x18\xd7\xa5\x18\x51\x5c\x8d\xaf\xf2\x58\xbb\xdb\xf5\x6d\x2d\x45\xdb\xeb\x30\x68\xea\xbe\xd0\x93\x07\x56\x65\x12\x43\x6c\xbc\xcf\xa4\xc2\x06\xae\x32\xf1\x47\xd4\x52\x73\xc3\xd3\xbf\xaa\x1d\x9e\xa7\x80\xcd\x53\xbb\x22\x60\x4d\x42\x92\x52\x01\xa0\xe5\xb8\x9f\x78\x08\x13\x86\xd1\xaf\x0c\x3b\x2e\xc7\x11\xcf\xf1\xaa\xb2\x2e\xa0\x4b\xfb\x18\x90\x11\x1d\x73\x5d\x5e\xfe\xb4\x07\x4d\x0d\x4f\xb4\x69\xdd\x44\x7c\x47\xc7\x33\x4a\xf6\xda\x49\xc2\xdf\x0c\xf0\xa2\x9c\xea\xa8\x15\xc0\x0b\xba\x7f\x37\x5b\x05\x6c\xdb\xbd\x2e\xda\x6f\x74\xcf\x91\xf9\x52\x6a\x7d\xe7\xd6\x62\x51\x76\xdb\x3b\x34\x2a\x70\x5b\xe3\x51\x74\x68\x41\x8d\xed\xfd\x0f\xf7\xd0\xfd\xb0\x8b\xf7\x61\x1b\xe7\xc3\x4e\xbe\x87\xfb\xe8\x7a\xd8\xc9\xf3\xb0\x95\xe3\xa1\x9f\xee\xb8\x03\x9d\x61\xd8\xe0\x06\x2a\x3f\x4d\x1d\xf6\xb8\x8b\xeb\x5c\x00\xd3\x19\x22\xdd\x75\x96\x79\xbf\x3d\xa3\x13\x03\xe0\xb6\xa3\xaa\x1e\x1b\x29\x26\x40\x7e\x47\xbe\xce\x7a\xec\x1b\x02\x19\x90\xad\xc7\xf3\x37\x23\xcd\x28\xfc\x54\xc5\x1d\x41\x38\x40\xa4\x8a\xb7\xbc\xd3\x4e\xa2\x6f\x33\xc8\xaa\xbc\x55\x27\x90\x65\xa7\xbd\x04\xf9\xa2\xf5\xf1\xc3\xda\xee\x24\x88\x6b\xc6\x64\xe0\xb5\x1d\x2f\xbc\xd8\x8c\x2e\x99\xb1\xac\x0f\x29\x25\x69\x53\xe2\x8e\xf9\x22\xa2\x21\xd7\xf3\x34\x57\xcc\xb9\x85\xb4\xc8\xe2\xca\x15\x79\xec\x86\xf4\x2b\x4c\x40\xca\xff\xfa\x1b\x82\x5f\x7e\x85\x09\xf7\xd6\x0d\x9b\xcb\x9d\xf4\x15\x28\xbc\xe2\x49\x5d\xe6\x64\x7d\xae\x35\x65\x4d\x26\x8d\x59\x93\xf5\xd8\x3a\x6d\x32\xf1\x60\xeb\xb4\xc9\xa4\x31\x6d\x32\x69\x48\x9b\x4c\xca\x69\x93\x49\x21\x9f\x2d\x59\x9f\x36\x59\x9d\xdc\x7c\x81\x44\xe1\x93\x25\xf6\x67\x24\xc6\xe1\x1f\xc8\x96\xa9\x38\x65\x91\x35\xf5\xc7\x2b\x21\x65\x00\xea\x64\x97\x61\x14\xbd\x44\x29\x25\xf1\xd2\xee\xda\xdf\x01\xa9\x1b\xa0\x08\x51\x24\x0b\xc2\x99\x3d\x0b\x29\x1e\x53\x91\xc6\x91\x35\xd2\x85\x49\x34\x42\x11\xa6\x24\x44\xc5\xe2\x44\x22\xa9\xa3\xf7\x74\xc5\x08\x01\x7b\x91\xb8\x93\x3b\x07\x79\x79\x91\xc3\xc3\x91\xeb\xba\x2a\x89\x08\x75\xd3\x24\x0a\x29\x57\xe1\x39\x63\xa5\xf0\xc3\x2e\x41\xf3\xf8\x82\x23\x87\x7d\xdb\xc9\x1c\x80\x0f\x0f\xed\xd4\x4d\xe5\x74\x00\x76\x00\x1b\xa7\x34\x15\xec\x8c\x0b\x73\xc1\x7a\x2e\xa4\x3c\x17\xcf\xf3\xc8\xe1\xa1\x4d\x38\xf9\xea\x7d\x6d\x9f\x21\xea\x80\x88\x7f\x07\x01\xe2\x88\xaf\xa8\xd9\xe2\xda\xd9\xae\xf8\x58\xae\x1f\x2f\x30\x1b\xff\xf0\x90\xc8\xee\x32\xcd\xb0\xfc\x25\x50\xcd\xb7\x3a\x1b\x33\xd2\x93\x2e\xcc\x99\x16\xe6\x6c\xb1\x1d\x6f\x1d\x08\x3d\x9d\xe5\x79\x1e\x7d\x46\x3c\x3a\xa4\x2e\x2f\xc0\x9a\xfe\x2d\xa4\x33\x5b\x54\x3e\xb5\x1c\x0e\x0c\xff\x61\xc9\x59\x8b\xc4\xb2\xc6\xf0\xd0\x7b\xba\x0a\x27\xf6\xc0\xf3\x3c\x2c\xe7\x0b\x1d\x47\x25\x9a\x25\x32\xd1\xac\xf8\xd8\x10\x09\x65\xdf\x9b\x30\xa5\x6a\x39\xa0\x93\x61\x45\x39\xd0\x01\xc7\x7c\x9c\x34\xfc\x03\x1d\x1e\x46\x9a\xa2\x9c\x0c\x45\x29\xea\x6d\x1e\x14\x06\x01\x1b\x91\xa1\x04\x44\x59\x06\x62\x8f\x18\x59\xb7\x17\xe6\x86\xf6\xbd\x11\x1e\x83\xe0\x66\x69\xb7\x93\x72\xda\xed\xa0\x21\xed\x76\x32\x42\x63\x2f\x90\x69\xb7\x93\x62\xda\x6d\xf3\x27\x48\xca\x69\xb7\x93\xc6\xb4\xdb\xc9\xf5\x75\x52\x4e\xbb\x9d\x14\xd3\x6e\x27\x9e\xdf\x3d\xed\x76\x0c\x16\x3a\xed\x76\xe2\x80\xb9\x91\x76\x3b\x29\x25\xc5\x4e\x64\xda\xed\xc2\xf3\x67\x49\x95\x4d\xcd\x75\xda\xed\x64\x7d\xda\xed\xf2\x17\xea\x39\x2d\x9b\x62\xc2\xc0\x13\xfb\x01\x7a\x09\x20\x22\xed\x36\x4f\xb8\x0d\x02\x30\x07\x89\xa1\xa2\x0f\x37\x9d\x86\xf3\x7e\x5e\xea\xf5\xdb\xfb\x94\x8d\xc1\x6a\x42\xe2\xf9\x90\x82\x78\x32\x49\x11\x1d\x62\xef\xde\x20\xcb\x0b\x9f\x89\x3d\x67\xa9\xb9\x19\x56\x0c\x87\xef\x72\x08\xa2\x83\x70\x62\x63\x27\xf2\x74\x21\xa5\x8f\x3c\x75\x32\x80\xde\xea\x32\x0c\xe8\x6c\x18\xb9\x62\x6c\x5e\x2a\x1d\x44\x68\x42\xf5\xa3\x37\x68\x42\xc1\x8c\xd7\x4a\xd7\xcf\x44\xe9\x74\x40\xe3\x44\x3f\xfa\x18\x27\xd9\x01\xdf\x98\xe1\xc4\x66\x5f\xa2\xea\x13\x9c\x2f\xfe\x1c\x2f\x70\x10\xe2\xe9\x8b\x28\x44\x98\x7e\x40\x3e\xb5\xd5\x3a\xdf\xf3\x3c\x6a\x14\x08\x6d\x6a\x7d\x00\xdd\x2b\x4f\xd6\xd6\x04\xd0\x5d\x7a\xd0\x5d\xf6\x91\xbb\xd4\xa9\xa8\xf9\x5e\xef\xe0\x34\x17\x90\x38\xe9\x7a\x81\x62\x5d\x76\x52\x58\xdc\x00\xea\x82\x70\x33\x70\x9f\x11\xd2\x6e\x94\xb7\xa0\x68\x9e\xc4\x04\x46\x8d\x25\x2e\x36\x0a\x6a\xcd\xe5\x2d\xf4\xd8\x7b\x51\xdf\xc2\xdc\xe9\xb4\x58\x57\x57\x01\xe2\xaa\x05\xfc\x85\xc4\x73\x1b\xd5\x96\x90\xc8\x81\xfe\x5e\x43\xe2\x7b\x0d\x09\xb5\xf3\xbb\xa7\x61\xd9\xe3\x2c\x2c\x02\xae\x24\xbe\x44\xa4\x9f\xf2\x92\xd1\xfd\x30\xed\x4f\x49\xbc\xa8\x65\xf4\x66\xc3\x56\x63\xec\x24\x4a\x9a\xc7\xe4\xa0\xbc\x67\x90\x88\xfa\xd9\xaf\xd3\x3f\x0b\x54\xb4\xfc\x46\x43\xff\x2d\x97\x41\xfc\x85\x6a\x63\x41\x3b\xac\x84\x1e\x66\xef\x17\xe3\x4c\x23\x64\xeb\xf5\x50\x43\x6c\x5e\x12\x9c\x2e\x08\xea\xa7\x70\x82\xfa\xba\xf8\x73\xb5\xfe\x05\x89\xc3\x00\x11\x1e\x10\xb3\x4b\xf8\x7d\xc5\x67\x7f\x06\x27\x48\x97\xfc\x16\xd2\x41\x0b\xb8\xf9\x15\xb8\xa3\x98\xa7\x7a\xed\x10\x0a\x5a\x91\x98\x02\xb6\x2d\x3d\x89\xf6\x2d\x90\xb8\x2e\xeb\xf8\x57\x94\x19\xd9\x44\xee\x40\x5c\xe4\xf0\xed\x97\xa4\x08\xa8\x67\x59\x63\x53\x93\xc6\xe5\x45\x84\x2f\xdc\x0b\x48\x6c\x94\xd7\xfc\x58\x44\xd1\x3d\x8f\x3c\x23\x43\x5a\x27\x34\x72\xd0\xbf\xcb\x8b\xdf\xe5\x45\xbd\xd7\x7f\x6f\x9f\xdb\x04\xfd\xbe\x80\x3b\x75\x4e\xb4\x62\x92\x7c\xd2\xad\x59\x24\x6b\xbd\x99\x41\x5e\xd5\xca\x97\xb5\xe6\xa6\x9a\xb4\x25\x3b\x8f\xb2\xab\x0e\x32\xe3\x55\x0b\xf9\xf0\x2a\x99\x0f\xba\x20\x6c\x3e\xd8\x43\x94\x31\x10\xdb\x23\x6d\x3e\xd8\x88\x36\xe1\xd9\xdc\x3f\xaf\xf7\x1d\x6e\x96\x66\xf2\x7e\x3b\x89\xc4\x36\x40\x6f\x05\xf1\x7e\x82\x8b\x83\x6d\x56\x58\xf4\xda\x4b\x80\xaf\x50\xd0\x9f\x92\x30\xe8\x47\x70\x19\x2f\x1a\x3c\x5c\x95\x5f\xef\x91\x68\x94\x1e\xb1\x1e\xdf\x2a\x5a\x3f\x2f\x73\x56\x34\xed\xa1\xd1\xf1\x18\xa0\xd1\x60\xdc\x2d\x62\x7f\x12\x41\x4a\x11\xee\x27\x72\xbe\xdf\x28\x8c\x42\x7f\xa8\x87\x84\x95\x10\x90\x3c\x75\x16\x71\x13\x38\x15\x15\x18\x0e\x74\xb1\xb8\x64\x91\xce\x98\x30\x4d\xc5\x4b\x07\x50\xd7\x9f\x85\x51\x40\x10\xd6\xa2\x1f\xf5\x9e\xb2\xe1\xc6\x60\xc5\xdb\x0c\xb9\xf8\x01\x8b\xf8\xd9\xa0\xa7\x97\xf8\xe9\xba\x27\x64\xaf\x9d\xdc\x13\xcd\x63\x6a\x60\x5b\x8e\x29\xdb\x6f\xde\x67\x51\x1c\xd7\xb2\xd1\xda\x33\x57\xb4\xde\x3b\xd4\x71\x10\x5b\x23\x2e\x8e\x37\xeb\x0f\x44\x89\x89\x7e\x93\xf3\x54\x88\x69\x54\xdb\x76\x27\x51\xb7\xde\x57\x5c\x4e\x7f\x8e\xd2\x14\x4e\x5b\x43\xab\x9a\xef\x2a\xc0\x9b\xd7\x56\x14\xd5\x68\x0b\xaf\x6c\xbd\xbf\xe0\x12\x14\x41\x1a\x5e\xb4\x5e\x60\xdd\x7e\x7f\x41\x4e\x67\x31\xa1\x7d\x1a\xce\xef\xb6\xf2\x5c\x8b\xa3\x95\xfb\x4b\x73\xa3\xbc\xf0\x34\x83\x07\xd0\xfb\x15\xd2\x99\xe0\x46\x36\x3a\x1a\xa0\x53\x76\x87\x37\x9e\xc1\xa3\xc7\xc7\x0e\x80\xff\xe6\x3d\x3e\x06\xd8\x7c\x41\xf8\x0b\xc2\x5f\x50\xf3\x05\x3e\x3a\x79\xe8\x00\xfc\x6f\xde\xc9\x43\xed\x4c\x47\x41\xea\x61\x10\x7a\x04\xc4\x1e\x3c\x90\xae\x33\xf7\x8e\x85\xef\x0c\xd7\x67\x44\x43\x95\xc7\xf2\x81\x15\x58\x07\xfa\x79\xaa\x9e\xa7\x0f\xac\x99\xf1\x3c\x54\xcf\xc3\x07\xd6\xdc\x3a\x90\xb8\x50\x0f\xe3\x07\x56\x6a\x65\xdd\x8e\x79\xb1\x58\xe5\x65\x5a\x47\x9b\xbc\xed\x3e\xd2\x25\x89\xe7\xfd\xed\x54\xd3\x85\xae\x3b\x09\xfa\x9a\x03\x9a\xc4\xf3\x57\x1d\x75\xd4\x46\x9f\x36\x68\x5d\xd4\xe7\x1a\xad\x17\x72\x44\xf3\xfd\x43\xe2\xa2\x43\x96\x51\xd1\x7c\x23\xea\xa6\x7e\x7b\xbc\xb1\xb6\x7b\x86\x34\x0e\x5e\xcb\xf1\xa6\x7e\x0b\x74\x91\x78\x91\x74\xbf\xa7\xeb\x6e\x3b\x89\xbe\x0d\x20\xd7\xde\xcc\xeb\x15\xc3\xd3\x1d\xf5\x1e\x58\x43\x20\xed\x87\x9b\xb6\xc1\x55\xed\x11\xd6\x84\xac\x1d\x3d\xc3\xd6\x61\xab\x7d\x3c\xd3\x94\x6e\x8e\x64\x9a\xc1\xb4\x8f\xd1\x55\xd7\xe8\x66\xdd\x6d\xcf\xd0\x37\x83\xe9\x5b\x0e\x6d\xcb\x31\x65\xfb\x56\x68\x4c\x08\xba\x08\xe3\x45\x57\xb1\xa2\xd0\x75\xff\xd0\xf9\x5e\x43\xdd\x1e\xa5\xaa\xcf\x66\xb4\x12\x34\xe9\xd3\x78\x7d\xf6\x50\x12\x2f\x68\x88\xa7\x47\x94\x40\x2c\x5c\x87\xd9\x14\xd6\x34\xbc\x0c\xa3\xc0\x87\x24\x28\x34\x61\x2f\xeb\x6a\x85\x01\x22\xec\xd8\x10\x70\xa3\xde\x81\x56\xd5\xc5\xea\x3d\x80\xa2\x45\xe4\xad\x32\xa5\xa1\x33\xad\xb1\xa4\xc1\x1a\x1b\x8d\xd0\xd8\x23\xd2\x1a\x1b\x15\xad\xb1\xe6\x4f\x10\x95\xad\xb1\x51\xa3\x35\x36\xba\xbe\x8e\xca\xd6\xd8\xa8\x68\x8d\x8d\x3c\xdc\xc6\x1a\xcb\x01\x57\x7e\xce\x32\xb5\xc4\xf5\x35\xce\x1c\x10\x39\x00\x1a\xd6\xd8\xa8\x64\x2b\x8d\xa4\x35\xb6\xf0\xfc\x59\x54\xb5\xc6\x42\x6d\x8d\x8d\xd6\x5b\x63\xcb\x5f\x68\x22\x47\xca\xa6\x16\x49\x6b\x6c\xb4\x4d\x5a\x7e\x75\x5f\x42\x2e\xa3\xbc\x8f\x71\x31\x30\x6a\x51\xaa\xc3\x46\x5c\x4e\x34\xa9\x03\xfc\x42\x55\xb8\x52\xed\x03\xa4\xf3\x8e\x0a\x1a\x1b\xce\x61\x88\x2d\xc7\x8d\x64\x11\x25\x10\x19\x4d\x74\x6a\x52\x41\x8e\x0e\xf7\xcb\x48\xf5\x92\x1d\x3b\x20\xf4\x52\x37\x9d\x85\x13\x6a\x3b\x22\xac\x82\x67\x90\xbd\xbe\x5e\x65\x07\x96\x6b\x79\x9e\x17\x1e\x1e\xda\xa9\x57\xcc\x64\x1b\x29\xef\xf3\x0f\x6c\x5c\x10\x03\x54\x18\xc8\x39\xa0\x64\xa9\x56\x7b\x61\x87\x0e\x1f\x22\x55\x51\x30\x48\xc5\xc6\x1c\x59\x32\x71\x0f\xf6\xe3\x00\xfd\xf6\xe1\xb5\x76\x0a\x52\xe9\x7a\x8e\x2c\xc7\x71\x00\x94\xf8\xb3\x43\x90\x82\xd8\xc9\x7c\x5e\x3e\xc1\x77\x56\x74\x46\xe2\xcb\x1e\xf7\x26\x50\xbe\x22\x9e\xe7\xbd\x22\x24\x16\x86\x7c\xa9\xd3\xf2\x3e\xdf\x5f\xe9\x1f\x59\xef\x97\x98\xf4\xac\xfb\x2b\x3c\x3a\x1e\x67\xc3\xfb\xab\xff\x3a\x7b\xf7\xd6\x15\xe1\xca\xe1\x64\x69\x2b\xdc\x0c\x1c\x27\xb3\x3e\x3b\xc0\xcf\xb2\x03\xbd\x80\x3e\x47\x60\xe0\xd9\xb0\xc1\xb1\x45\x21\x1a\x44\xb2\xc1\x27\x51\x29\x15\xa4\xdb\xc6\xb0\xc1\x06\x5f\x17\xf9\x25\x00\x75\x04\x5b\xb8\x53\x11\x6c\xd0\x70\x77\x61\x2f\x6d\x67\xc5\x01\xe1\x2d\x19\x34\x90\x4c\x79\xcc\x4e\xea\xf0\x80\x27\x41\xfd\xc4\x8d\xb1\xc4\xe2\xdf\xc2\x28\x7a\xc1\x13\x7f\x59\x46\x83\xfc\x69\x29\x30\x4e\x92\x9b\x6f\xd7\xe5\xea\x05\xac\x49\x56\x1a\x80\x71\x4d\x31\x30\x52\x23\xd5\x46\xcb\xa9\x89\x4d\x26\x6d\x67\x06\x04\xa4\x85\xb1\xb2\x0c\x84\x5e\x6c\xa7\x86\xdb\x8e\x5e\xc3\x11\x1c\x83\x9b\xf8\xec\x38\xa0\x6e\x60\x73\x9a\xa3\x68\xac\xce\x5d\x81\x19\x45\x1b\x2f\x51\xea\x93\x30\x61\x94\xb7\x76\x04\x07\x18\xaf\x1d\x90\x9a\xfa\xa0\x60\xc3\xb1\x4b\xe7\x11\x77\x58\xec\x98\x2b\x20\xef\xb7\x6f\x72\x0c\x9d\x47\x67\x1c\xde\xb6\x42\x8c\xec\xb0\x59\x82\x59\xcc\x21\xee\x9e\x75\x41\x77\xdb\x37\x44\x6a\x70\xdb\x22\x52\x76\xd8\x8c\xc8\x65\x52\x9f\x53\xb8\x56\x51\x22\x5a\xef\x1b\xf2\x04\x88\x6d\x31\xc7\x5a\x6f\x44\x5b\x38\x5f\xb4\xcf\x13\xcb\x1b\xef\x19\xd2\x04\x80\x2d\x07\x64\x8d\x37\xa3\x0c\x77\x4d\xee\xc1\x7a\xec\x1b\xda\x70\xfb\xe4\x1e\x21\xde\x9c\xdc\x83\x67\x62\x4b\x51\xe7\x34\x69\x79\xbf\x9d\x44\xe0\x26\xa0\x2f\xe2\x2f\x5d\xf3\xa4\xc9\x4e\x3b\x09\xee\x3a\x7a\x11\xa0\xb6\x26\x19\xd6\x7c\x33\x02\xd3\xbe\x48\xb2\x54\x9b\x1e\x85\xcb\x5a\x55\xfc\xe9\x3e\xfb\x86\xc2\xf4\xb9\x84\xb5\x2d\x12\x65\x87\x56\x68\xe4\x95\xea\x5b\x6b\x3e\x75\x8f\xfd\xc3\xa1\x00\xb4\x3d\x0a\x59\xfb\x36\x18\x44\xf3\x84\x76\xc3\xa0\xe8\xb1\x93\x18\xdc\x0c\xad\xf0\xc5\xee\x02\xed\x3e\xba\x9c\x87\xe9\xab\x4e\x4e\xe7\xb2\x7d\x1b\x0c\xce\x08\x9a\xb4\x89\xcd\x01\x30\xd7\x19\x46\xdf\x75\x86\xff\xb4\x3a\x43\x23\x8e\x2a\x6d\x8e\xa3\xd2\xea\x26\x5c\x52\x37\xdd\x7a\xca\x24\xa5\xaa\xd8\x87\x84\x49\x77\xac\x6e\x1a\x21\xe0\xba\x2e\x1d\x17\x23\xfc\xe5\x78\xa6\x62\xf4\x2d\x9c\xa3\x42\xfe\x1d\x9c\x26\xd0\x47\xae\xe5\x1c\x1e\x16\x5f\x04\x3e\x7f\x68\x23\x4f\xb7\x79\x80\xcc\xb4\x1a\xec\x0b\x18\x5d\xd1\xc3\x43\x2b\x8a\x61\x10\xe2\xa9\x65\x3e\x7e\xa6\xff\x32\x87\x45\xce\xd0\x9c\x9a\x12\x00\x6c\x31\xff\x66\x7d\x18\x1b\xc7\x43\x2e\x8d\x5d\xcc\x20\x20\x28\x89\x20\xa3\x36\x37\xc4\x01\xba\xb2\x80\x65\x29\x1c\x7e\x25\xc5\x19\xf4\x22\x9b\xd4\x2a\xce\xe8\x4d\x15\x67\x75\x03\x17\x14\x67\x78\xb3\xe2\x6c\xed\x08\x0e\x20\xa6\xe2\xac\x50\x72\x37\xdd\x74\x2c\x7c\x9d\x12\x56\xa6\xa5\x22\x4c\x8b\x56\x0a\xec\xd9\x08\x28\x2f\x72\x91\x6d\x6a\x05\xcf\xc3\x28\xa4\x4b\x46\xde\x43\x08\x94\xb7\x3b\xff\x19\x65\x1e\x72\x7d\x88\xdd\x04\x32\xae\x4e\x1d\x90\xca\x07\xb2\xd3\x2f\x31\xb1\x21\xb7\x83\xe9\x72\xcb\x5e\x4d\xc6\x1b\x9e\x4e\xec\xc5\x0c\x12\xe8\x53\x44\xc2\x94\x86\xbe\x82\xe4\xd9\x9a\x77\x8c\x0d\x08\x56\x77\xc6\x35\x61\xba\x5e\x98\x6d\x85\x69\xdf\x7a\x10\x31\x60\x3f\x89\x1c\x55\xcf\xc5\x84\xde\x9d\x33\x6e\x8a\x88\xcd\x5f\xc1\x20\x28\x3f\x4f\x19\x4f\xcf\xd3\x86\xb3\x9f\xd9\x01\x47\x14\xe6\x9e\x82\xc4\x28\x47\x2d\xd8\xad\x5d\xca\x46\x9e\x1f\x63\x58\xa4\x24\x53\x8f\xb3\x42\xc1\x01\xb2\x9e\x1a\xfe\x11\xd7\xd7\x0f\x5e\x73\x39\xe4\x5d\x76\x52\xc6\x5a\x0f\x2a\x13\x5a\x3a\x82\xca\xbb\xec\x24\xa8\xcd\x63\x0a\x30\x5b\x0e\xc8\x1a\x6f\x44\x5c\x04\x53\xba\x46\x8a\xd4\x92\x23\xd5\x85\x2a\x4b\x1e\xa4\xd5\x02\x1a\xca\x11\x14\xb9\xe9\xe2\x3c\xa5\xc4\xee\x0f\x9c\x6c\x1b\xc9\x86\xcd\xcd\xa3\x5d\x02\x75\x68\x39\xf6\x66\x8d\xd3\x7b\xe4\xcf\x5b\x2b\x26\x59\xdb\x3d\x23\x15\x0e\x5e\xcb\xf1\x22\x7f\xbe\x99\x50\xd0\x84\xf6\x29\x09\xe7\xeb\x9d\x21\xf2\x66\xdf\xb2\x9e\x2a\x93\x3f\x1b\x8b\xaa\x02\xdc\x2d\x48\x2b\x8a\xa7\xfd\x5a\x05\x51\x3d\xa9\xf0\xd6\xfb\x46\x2c\xf1\xf4\x55\x7b\x6a\x89\xa7\xaf\x36\x93\x4b\x3c\x1d\x1c\x77\x41\xda\xe0\x78\x0f\x91\xc6\x40\x6c\x8f\xb5\xc1\x71\x2b\xb4\xb5\x0f\x28\x17\xad\xf7\x10\x6d\xed\x83\xca\x79\xeb\x36\x68\x6b\x5f\x10\x88\x37\xde\x3f\xa4\xb5\x2f\x07\xc4\x1a\xb7\x40\xd9\x25\x22\xfc\x00\xef\x66\x19\xce\xfb\xed\x1d\x0a\x35\xc0\xad\xf1\x28\x7b\x6c\x46\x66\x07\x0f\xe9\x68\x47\x4d\x4d\x6b\x30\xd7\x7e\xb8\x16\xa2\x7a\xd4\xc5\x43\x3a\xda\x3f\x0f\xe9\xa8\x83\x87\x74\xd4\xc2\x43\x7a\x0e\xb7\x08\x37\x90\x9d\x76\x12\x75\x1b\xc1\xed\x0e\xeb\x7e\x02\x7a\xd5\xfa\xc8\x62\x6d\x77\x12\xc4\xe6\x31\x39\x78\x2d\xc7\x9b\xc3\xab\xcd\xe8\x42\x64\x8a\xfa\xfe\x0c\xf9\x5f\xd2\xf5\x57\x90\x42\xcb\x6f\x76\x0b\x01\xf8\xb6\xee\x1f\xf3\x7a\x2d\x4e\x3d\xa1\xec\xaa\xfa\x66\x0d\xa1\x84\xed\x53\x1e\xcc\xc3\xcd\xe9\x0e\xe6\x5b\xa6\x15\xc9\xfb\xed\x62\x72\x91\x8e\x24\x13\xb7\x8f\xe9\x63\x6d\xf7\x8d\x64\xe2\xf6\x31\x7d\xf3\x78\x73\x4c\xdf\x7c\x51\x2f\xc0\xd5\xe3\x6b\xb1\x7f\x12\xdc\xbc\xcb\x80\xf3\x36\xa7\xd7\x16\x31\x5b\xfb\x18\xaf\x85\xbb\x04\x6b\xe1\x36\x91\x5a\x38\xee\x9c\x7a\x9e\x77\xd9\x37\xc4\x71\x30\xdb\x22\x2e\x8e\x37\xdf\xf1\x71\x4c\xfb\x5d\x52\x14\x8a\xf6\x7b\xe8\x33\x82\x63\xca\x9d\x40\xc4\x31\xd1\x01\x89\x66\xb7\x36\xe8\xec\x84\xcb\x3d\xc4\x62\x17\xd4\x6d\xc4\x57\xcc\x3f\xd4\x87\x5d\xb9\x5e\xde\x6f\xcf\x10\x28\x26\xfe\xbc\xfd\xa0\xaa\xc3\x66\x54\xe2\xbc\x56\x57\x0d\x32\x63\x5c\xce\x4b\x6f\x76\xd8\x49\x2c\x6e\x84\xf7\x32\xc4\x41\x7c\xd9\x1a\x5a\xd9\x7c\x2f\x61\x6d\x0b\xe4\x5e\x42\x97\xf0\xf0\xde\x5a\xc7\xc5\x75\x3c\x40\x75\xdb\x49\x90\xd7\xb0\x00\x0d\x6e\x5b\x16\x20\x3b\x6c\x46\x64\x6d\xd6\xad\xfa\xc3\x67\xff\xd2\xd1\x75\xc8\x45\xd7\x22\x11\x5d\x02\xa7\xa8\x4f\x43\x1a\xd5\xea\x4d\xf3\xb7\x75\x1d\xee\xec\x26\xab\x11\xd1\xfe\x52\x9a\x20\xe2\x23\x4c\xd9\xe4\xfc\x38\x5a\xcc\x71\xda\xed\x82\x5e\xed\xbf\x8b\x17\x75\x9e\x05\x14\xa0\xd1\x49\xc7\x2b\x7b\x82\xc8\x24\x26\xb5\x2e\x09\x7e\x8c\x85\x93\xa0\xbf\xac\x34\xdf\xc9\x9d\xb1\xde\xf1\x22\x09\x13\xd4\x17\x5e\xa7\x1d\xf9\xa8\xd9\x73\x57\x01\x5f\xb7\xc4\x61\xd2\x35\x58\x87\x77\xd9\x49\x50\x9b\xc7\x14\x60\xb6\x1c\x90\x35\xde\x8c\xb8\x68\x41\xb8\x13\x66\x7d\x76\xb8\x09\xe3\x14\x31\x39\x8a\xc2\xf3\x9a\x2e\x3b\xc5\x02\xe3\x28\xf4\x97\x47\x01\xa4\x90\xb1\x32\x54\xac\xb8\xdb\xec\x7b\x85\x00\x35\x52\x3a\x28\xf6\xc4\x6b\x8e\x32\x96\x63\xbd\x34\x06\xd4\x6e\x92\x3c\xf2\x44\x45\xa0\xd8\xd8\x39\x3c\xe4\x45\x52\xdd\x08\xe1\x29\x9d\x3d\x5b\x3b\xc6\x70\x44\xdd\x69\x14\x9f\xc3\xe8\xfa\xda\x7a\x1e\x45\xd6\x78\x2b\xd7\xf4\x7c\xc8\x1b\xfa\x71\x6d\xc6\x69\x4d\xa9\xa7\xbc\xed\x3c\x0e\x50\xa4\x9a\x7e\x3b\x9b\x40\xee\x00\x8e\xea\xca\x4f\x60\x91\x1f\x92\x54\x92\x34\xe6\x4b\x85\x81\xf5\xfa\xa5\xe5\x78\x9e\x47\xdd\x5f\x9f\xbf\x7d\xfe\xe7\x57\xbf\xbe\x7a\xfb\xf1\xd3\xeb\x97\x43\xe2\x59\x73\x88\xe1\x54\x54\xf0\x3a\x38\x27\x08\x7e\xe1\x29\x1b\x2d\xeb\x9e\xe7\x15\x46\xa0\x68\x9e\x44\x90\x22\xcb\x61\xbd\xc2\x00\x61\x1a\xd2\x10\xa5\xaa\x97\x84\x8d\xbd\xe4\x18\x63\xaf\x74\xa9\xc5\x11\x19\x8b\xec\xcf\xd8\x01\x28\x73\xc0\x2a\xff\xea\x70\x34\x06\xf9\x68\xec\x97\xea\x3e\x1c\x8d\xb3\x8e\xc7\xa1\x58\x55\xe1\x53\x78\xbb\xb9\x3b\xd9\x98\xef\x26\x75\x04\x69\xee\x38\xb5\xd9\xa8\xc7\xb7\x87\xb9\xe7\xa8\x89\xc2\xca\x62\xe9\x10\x10\x2c\x1d\x21\x2d\x12\x47\x48\xa4\xcf\x54\xe9\x55\xfa\x12\x4d\x4b\xcb\x6c\x27\x60\xee\x57\xda\x88\xae\x38\x0e\xd6\xf7\x2b\x36\x10\x9d\x8e\xe5\xff\xfa\x35\xff\x91\xff\x1b\xb0\xb1\x0a\xc0\x31\x0a\x2b\x8d\x6d\x92\x96\x26\x0f\xb3\x85\x95\x65\xb7\xb5\x9d\x6b\xaf\xc9\xb5\xaa\xf8\x64\x57\xef\xc8\x6b\x0e\x47\x06\x5e\xdb\xb3\x31\xbe\xdc\x7c\x34\x6e\x97\xf4\x6b\x5f\x13\x7e\x25\x5d\xb3\x7d\x25\x6d\x53\x7d\xfd\xbe\x40\x8b\xae\xd2\x99\xe8\xb3\x67\x28\x94\x80\xb6\x1c\x91\xb7\xde\x88\x3c\x02\x71\x10\xb7\x77\xa7\x96\xcd\xf7\x0c\x71\x0a\xc8\x96\x43\x8a\xe6\x6d\x50\x57\x9f\x72\x7d\x0d\xdd\x89\x3e\xfb\x87\xbe\x69\x7b\xba\xe3\xad\x37\x23\x8f\x0b\x51\x5d\xb1\x27\x3a\xed\x24\xfa\x36\x81\x3b\x21\x28\x9d\x89\xcc\x04\xbb\x51\x97\xcf\x88\x27\xbd\xe5\xd2\x7c\xe5\xf8\xd1\x7d\xa8\xce\x67\xe4\x15\xb3\x1d\xef\xa9\xae\x6c\x5e\x9b\x61\x4c\x80\x5a\x17\x06\xca\xa3\x28\x0f\xf4\x55\xa1\x90\xbe\x6f\x68\x3d\xa0\x8e\x2b\x29\xc1\x76\xb2\xba\xd2\x7e\x0a\x75\xdf\xab\xfb\x7d\xaf\xee\x97\xf3\x0e\x6e\x87\xec\xec\x49\x9a\xf7\xdb\x4b\x86\x89\x03\x44\xfa\xfa\xb6\xf6\x75\x58\xa6\x4a\xbc\x79\xb4\x5a\xd9\xa3\xe7\xfd\xbf\xc3\xfe\x1f\xee\x71\xff\xc7\x4f\xfd\xf1\x03\x27\xcb\x8e\xa6\x9c\xa7\x46\x60\x4d\x94\xbe\xc8\x6f\xd9\x89\xad\x0a\x10\x44\x7a\x87\x34\x67\xa9\x46\x10\x3b\x12\x8c\x94\x7a\x7a\x78\x90\x4a\xde\x8a\xd7\xf0\x56\x36\xa4\xb9\x2c\xb8\x91\xb7\xe2\x06\xde\x8a\xcb\xbc\x15\x17\xb6\x12\xae\x6e\xa5\x34\xe7\xad\x20\x8f\xf5\xbd\xa7\x42\x0c\xa3\xc3\x43\x3b\x52\x65\x4f\x39\x28\xae\x4f\x10\xa4\xe8\x03\x9a\xbe\xba\x4a\x5e\x89\x67\x36\x04\xd5\x3c\xa1\xe0\xde\xc0\x29\x56\x53\xcd\x95\x32\x3c\x3b\x86\x48\xbb\x68\x32\xd4\xd8\x40\xd8\x82\x73\x54\xff\x66\x1c\x75\x5e\xe6\xa8\x7e\x03\x47\x9d\x33\x8e\xea\x4b\x8e\x3a\x2f\x72\x54\xf3\x27\x98\x97\x39\xea\xbc\x91\xa3\xce\xaf\xaf\xe7\x65\x8e\x3a\x2f\x72\xd4\xb9\xb7\xe8\xce\x51\x43\x9e\xd4\x55\x70\xd4\xb9\x03\x02\x83\xa3\xce\x4b\xfc\x6e\x2e\x39\x6a\xe1\xf9\xb3\x79\x95\x0c\x02\xcd\x51\xe7\xeb\x39\x6a\xf9\x0b\xf5\x94\xcc\xa6\x38\x67\xe0\x29\x8e\x3a\x57\x1c\x55\x72\x53\x10\x80\x79\xfb\x60\x7b\x82\x12\xd4\xd9\x1d\x44\x76\xda\x49\x5e\xba\x46\x76\x97\xa0\xb6\x15\xde\x79\xf3\x16\xdc\x99\xd3\x56\x67\x0c\x8a\x5e\x3b\x89\xc2\x0d\x00\x87\xd3\x59\x9b\x20\x5a\xa3\xdd\x3f\x4d\x14\x2d\x89\x63\xda\x5f\x90\x5a\xd7\x89\x86\x4c\x6b\xba\xcb\x4e\x2e\xf5\x9a\xdd\x12\xc7\xf4\x37\xd2\xde\x6b\x42\xb6\xdf\x4c\x3e\x9d\x6a\xdc\xec\x65\x89\x9b\x6e\x15\x6e\xda\x15\xb8\xe1\xd4\xb5\xc6\xe0\x6c\xbe\x2f\xbb\x29\x15\xfa\xee\x24\x2e\xdb\xc0\x3e\x87\xd4\x9f\xed\x46\x01\x34\x69\x2d\x19\x59\xef\x09\x4a\xb9\x03\xa0\xf5\xea\x0a\xfa\xec\xdf\xf7\x04\x4d\xc2\x2b\x0b\x58\x67\x8b\x89\xf8\xe3\x03\x9a\xa2\x2b\x6b\xec\x4e\x42\x1c\xd8\xd4\x7b\xaa\x25\x0a\x34\xa2\x63\x47\xe6\x9f\x50\x03\x49\x7b\x84\x8d\xdc\xd7\xf8\x02\x11\xfa\xcc\x7a\xfb\xee\x63\xcf\x1a\x5a\x96\xf3\xc0\x4a\x64\x23\x61\x15\x11\x5f\x94\x1d\x3e\xdf\x5f\x55\xbb\x64\x88\x35\x89\x96\x3d\x8e\xba\x10\x4f\x7b\x16\x6b\xc6\x3b\x66\xd6\xe7\x03\xf5\x65\x36\xcf\xb5\xe3\x24\xbc\x0d\x0a\x7a\xe7\x4b\x31\x84\xe8\xa4\xc7\x90\xb0\xae\x1d\x23\xe5\x6d\x8c\x31\x44\x27\x3d\x86\x40\xd3\xda\x21\x34\x18\x74\x86\x7a\x84\xb5\x17\x23\xf1\xae\x99\xf5\x59\x9a\xf7\x2c\xab\x53\xdd\x36\x41\x5d\xa2\x00\x40\x27\xbe\x6e\x74\xdb\xc9\x4d\xb5\x96\x41\x51\xf4\x5e\x42\xdc\x9e\x4d\xa9\x3e\x1b\x37\xac\xbc\x02\x1e\xf9\x90\x04\xfd\x04\x91\x79\x98\xa6\x61\x8c\xd7\xf9\x09\x7c\xc5\xdd\x1b\x4e\x6c\xcb\xf2\x3c\x0f\xb9\xb9\xb7\x80\x23\x49\x47\x64\xa3\x3c\xc8\xcd\xa6\xee\x6b\x4c\x11\x66\x9d\xdd\xbf\xc0\xf4\x7d\x0e\x0b\xc0\x85\x97\xcf\xa3\x28\xbe\x44\x01\x20\x9e\x95\x26\xc8\x0f\x27\xa1\xdf\x0f\xd5\x5b\xf1\xb5\xb3\x78\x41\x7c\x74\x78\x78\x0f\xb9\x1f\x09\xc4\x69\x02\x09\xc2\xf4\x3d\x89\xaf\x96\x15\xfb\xab\x36\x4c\x42\x36\xae\xd8\xf1\xf7\xf0\xe1\xe1\x3d\xfd\x22\x40\x58\xda\x47\x7b\xf8\xf0\x90\xa8\xc7\x38\xa6\x7d\x81\xc4\xa0\x62\xe4\x14\x63\x65\xdd\xca\x1a\xaa\xb5\x64\x77\x77\x82\x61\xd4\x4f\x39\x18\xad\x5d\x3e\x84\x3b\x40\xd5\xdb\xe3\x95\x1c\x4f\x60\x25\x75\x27\x21\x49\xa9\xa0\x02\xcb\x39\xc0\xd7\xd7\x76\xb5\xcf\xaf\x88\x42\xb7\x3c\x11\xc7\x91\xba\x0a\x75\xa5\xe2\x7e\x05\x82\x65\x3d\xb3\xac\xa1\xfa\xfb\x20\x9c\xd8\xf8\xf0\x70\xa4\x60\x84\x49\xd8\x9f\x42\x8a\x2e\xe1\xd2\x02\xd6\x85\xd8\x64\xd6\x97\xc5\x39\x22\x18\x51\xc4\x18\x00\x45\x84\x40\xe1\xd0\x66\xe1\x78\x0e\xf3\x62\x37\x16\xb0\xe0\x65\x6a\x8d\xdd\x10\xfb\xd1\x22\x40\xa9\x8d\x1d\x47\xf3\x2e\x92\xdd\x5f\xe1\xec\xf3\x36\xde\x26\x12\xdd\x45\xec\xdc\x9d\xdf\x89\x5a\xdd\x19\x82\x11\x9d\xf5\x73\xef\xc4\xdd\xd8\xaa\xf9\x36\x7c\xc1\x23\x61\x5f\x90\x90\x86\x3e\x8c\x1e\xa8\x07\xef\x61\x9a\x86\x78\xaa\x7f\xff\x0d\x12\x1c\xe2\xa9\x52\x3b\x73\x5a\x60\x44\xb0\x4a\x44\xc3\x21\xaf\x33\xca\x45\x2e\xbb\x34\xc6\x11\xfd\x8f\xc1\xf1\xb1\x03\x2e\xc5\x10\x75\x2d\xe5\xe8\xaa\xa5\x2f\x67\x53\xd7\x54\xcd\x54\xb6\xed\xba\xe7\x6a\x6f\xe4\x29\xa2\x65\xd1\x8e\xb5\xdc\xc9\xc3\x67\x03\x80\xb3\xc5\x64\x52\xef\x0a\xbc\xe6\xd2\xac\x7a\xed\x24\xc0\xcd\x63\x6a\x60\x5b\x8e\x29\xdb\x6f\x46\x62\x38\x6d\x1f\x53\xcd\x1b\xef\x1b\xe2\x38\x80\x6d\xb1\x16\x4e\x37\x87\x55\xa7\x1d\xa2\xd0\xd3\xfd\x8b\x42\x4f\x3b\x44\xa1\xa7\x2a\x0a\x7d\x8d\x93\x33\x63\x8b\x8b\x08\x92\x4e\x4e\xab\x66\xa7\x5d\x72\x5b\xe5\xca\xe0\xae\x1c\x87\xf7\xd9\x49\x2a\xd8\x04\xec\x62\x1a\x4e\x96\xdd\x92\x22\x1a\x6e\x9d\x22\xf5\xed\x51\xef\x68\x0a\xac\xbe\xe5\xb8\x34\x7e\x13\x5f\x22\xf2\x02\xa6\xc8\x76\xb6\x92\x6b\xc4\x84\xee\x50\x92\x89\xc9\x16\x86\x41\xd5\x6b\x1f\x97\x38\x89\xc2\x2e\x59\x2f\x01\xf5\x2c\x50\x58\x66\x51\x8f\x8e\x6e\xb7\x9e\xac\xef\x1d\xae\xe6\xef\xa4\x7d\x32\x03\xde\x78\x27\x57\x70\x0d\xab\xe6\x00\xb6\xe5\xd5\xbf\x93\x16\xf4\x40\x21\x45\x7d\x7f\x06\xc9\x3a\xaa\xf8\x8a\x5e\x35\x7c\x42\x77\xe1\x54\x23\x06\xde\x2b\x9f\x9a\x11\x1a\x9b\x86\xc6\x59\x98\xba\x1c\x0a\xf1\xdf\x17\x6c\xd1\x6c\xe4\xd4\xb9\xc1\x48\x60\xbf\x7b\xc1\x7c\xf7\x82\x29\xee\x74\xae\x0d\x45\xeb\x74\x6a\xdf\xf7\xfa\x37\xda\xeb\x80\x8e\x01\xae\xdb\xed\x72\xcd\x94\x8b\xc6\xf7\xcd\xfe\x7d\xb3\x6f\xde\xec\x3c\x83\x29\x3b\xd7\x1b\xf2\x76\xc8\x16\x13\x9c\x36\x75\xda\x37\xd9\x88\xcf\x9e\x1d\x8a\x1d\x12\x77\x98\x9d\x5a\xc8\x4a\x39\x7e\xfc\x38\x40\xdb\x61\x56\xf5\xdc\x5b\xf4\xbe\x88\x03\xb4\x15\x8a\x45\xc7\xd6\x68\x66\x78\x4a\xe2\x10\x37\x65\x9e\x59\x83\xe7\x42\xd7\xfd\x44\x74\x1c\xa0\xf7\x0c\x82\xee\x98\xce\x7b\xb6\x47\x35\xf6\xbb\xe3\x98\xf7\xd9\x53\xe4\x0a\x78\x3b\xe2\x95\x75\x6a\x8b\x52\x26\xc7\xf4\x2f\x43\x3a\xeb\x86\xd5\xbc\xdb\x5e\x22\xf6\x15\x0e\x78\x35\xa5\x8e\xa8\x55\xdd\x5a\x23\xf7\xf7\x05\x8c\x6a\xcd\xee\x6b\x30\x2b\xfa\xec\x27\x5a\x25\xbc\xdd\x90\xca\x3b\xb5\x45\xe9\x84\xc4\xf3\xfc\x7c\xea\x86\xda\x52\xdf\xbd\x44\xf1\x2f\x24\x9e\xab\x33\xaa\x23\xa2\xcd\xae\xdd\xd0\xad\x8f\xa9\x6d\xf0\x9d\x77\xde\x5f\x84\xab\xa3\x6a\x1b\x8c\xab\xbe\x6d\x51\x5e\x5b\x59\xbf\xb5\x7a\xbb\x50\x28\x4b\x95\xa0\xb7\xd1\x76\x5a\x50\x3e\xca\x5f\xe4\x20\x77\xa8\x0e\x15\x80\x2b\x67\x83\x6e\x44\xa6\x7b\xed\x25\x75\xbd\xd6\x30\x77\x22\x2c\xd5\xad\x2d\x4d\xf1\x1a\x7f\xfd\x62\x96\x86\x36\xa8\x95\xbd\xf6\x14\xb5\x01\xba\x7a\x37\xe9\x8c\x59\xde\xab\x2d\x62\x23\x98\xd2\x2d\xb1\x5b\xec\xba\x97\x28\x7e\x03\x53\xba\x1d\x9a\x8d\x9e\x6d\x51\xad\x93\xc5\x76\x64\x10\x46\xbf\xbd\x44\xf2\x5b\x99\x34\xb6\x2b\x8f\xd0\xfd\xda\x22\x38\x81\x01\x93\xeb\xbb\x61\x57\x75\xda\x4b\xd4\xbe\x87\xc1\xab\x0e\xbe\xec\x66\xa7\x2e\x48\xe5\xd5\x5b\xbb\xa3\x55\x74\xdb\x57\xc4\x9e\x09\xa0\xbb\xa2\x96\x77\x6b\x8b\xdc\xe6\xf0\xae\x66\xcc\xee\x67\x74\x97\x98\xfc\x87\x6e\x31\x5e\x66\xa7\x0e\x28\x8d\xa0\x8f\xfa\x30\xaa\x0d\x03\x5a\x8b\x57\xdd\x71\x5f\x91\xcb\x00\x78\x1e\xb5\x8f\x0a\x2a\x77\xec\x88\xe4\xad\x10\xbc\xd7\xc8\xdd\x0e\xb3\x6d\xd1\xda\xe8\x03\xd5\x8c\xd4\x1d\x76\x81\xda\x84\xd2\x33\x01\x6d\x27\x84\xf2\x3e\xad\xd1\x59\x76\xc1\x69\x81\x4e\xde\x65\x3f\xd1\x29\xa0\xed\x86\x4e\xd6\xa7\x35\x3a\x79\x0d\xf7\x2d\x74\xad\x66\xc7\xfd\x44\xad\xae\x5e\xdf\x15\xbf\xba\x63\x6b\x24\xf3\x72\xc6\x21\x9e\x76\x44\xb1\xee\xb6\x9f\x08\xce\xa1\xee\x86\x5f\xd5\x6f\xb3\xaf\xac\xc0\x13\x8d\xfb\xbc\xf8\x7a\xbf\xa9\x2a\x65\x33\x8a\x8b\x5d\xf7\x12\xcd\x1f\xe3\x17\x0c\x82\x17\x5d\x0a\x54\x56\x7a\xb6\xa5\x64\x1a\xf7\xbf\xa0\x73\x78\xbe\x1d\xaa\x8d\xae\x7b\x8a\xea\xff\x66\x10\x6c\x85\x6a\xdd\xb3\x03\xaa\x79\x1d\xd1\xed\x50\x6d\x74\xdd\x53\x54\x6b\xe7\xe7\xce\xa8\xd6\x3d\x3b\xa0\x3a\x81\xa9\x0f\xb7\xe4\x20\x66\xdf\x3d\x45\xf6\x7b\x0e\xc2\x56\xd8\xce\xbb\x76\x40\x77\x8a\x30\x45\xd8\x47\xdb\x21\xbc\xd8\x7b\x4f\x51\x7e\x26\x81\xd8\x0a\xe9\x66\xe7\x2e\x68\xc7\xf0\xcb\xb6\x38\xcf\xbb\xee\x2b\xc2\x19\x04\xdb\x61\x5b\xf5\xec\x80\x6a\x5e\x46\x63\x3b\x54\x1b\x5d\xf7\x14\xd5\x1f\x19\x04\x5b\xa1\x5a\xf7\xec\x80\xea\x45\x92\x6c\x7b\x4c\x1a\x5d\xf7\x14\xd5\xbf\x31\x08\xb6\x42\xb5\xee\xd9\x1a\xd5\x24\x9c\x77\xd7\xc5\xeb\x5e\xfb\x89\x60\x12\xce\xbb\x6b\xe3\x65\xaf\x4e\x88\xdd\x42\x1f\x6f\xf4\xdb\x5b\xe4\x6e\xa3\x91\xd7\xfd\xba\x20\xb8\x3b\x6a\xf7\x17\xa9\x5b\xe0\xb3\x05\x2a\x97\x11\xea\x97\xaa\xac\x7f\xc5\x34\x05\x48\xa7\xc5\xa5\x5e\x5e\x05\x03\x81\x11\x0f\xb7\xe0\xee\x26\xde\x53\xbc\x88\x22\xcf\xc3\xcf\xd0\xf0\xf3\xfd\x15\xca\xee\xaf\x68\x36\xbc\xbf\xc2\x2e\x8d\x85\xf3\x89\xed\x64\xf7\x57\x24\xfb\xcf\xcf\xc0\xca\xeb\x9d\x50\x59\xd9\xe4\xe9\xf1\x33\xaa\x43\x0b\x3a\x64\x0e\x58\x9c\xb7\x0f\x9b\x5b\x9c\xef\x1d\x55\x31\xf0\xda\x92\xd3\xe2\x7c\x33\x1d\x71\xf5\xce\x0e\xe4\xba\x10\xf1\x99\xc7\x46\xbd\xf5\x1e\x72\xc5\xec\x6c\x5a\xc9\x52\xb7\x89\x08\x2e\xa6\x7d\x7f\x41\x2e\x76\x22\x89\x07\x23\x2a\x55\xf1\x87\xba\x29\xf1\xaf\xaf\x57\x57\xc3\x63\xb0\x1c\x1e\x67\x80\x78\x94\x57\x32\xb9\xbe\xb6\xfc\xc5\x79\xe8\x5b\x32\xce\x68\x84\xc0\xea\x6a\x68\x63\xf7\xea\x01\x72\xaf\x9c\xa3\x13\xb0\x1c\x62\x77\x99\x8d\xe5\x36\x91\xad\x3d\xcf\x23\x87\x87\x50\x94\x72\x59\x5d\x0d\xe1\x68\x30\x76\xaf\xc0\x72\x88\xdc\x65\xe6\x80\xcf\xf7\x57\x91\x87\xc1\xe7\xff\x0f\xf7\x7a\xbd\xde\xaf\xbd\xfb\xab\xc8\xbd\xca\xf8\x3f\xcb\x8c\x3d\xfc\x9c\xdd\x5f\x19\xa4\xa3\x12\x5d\x8f\xcc\x94\xb3\xea\x93\x9f\xef\xaf\xf4\x33\xb5\x47\x4f\x9e\x59\x2f\xac\xa1\xf5\x3f\x16\x1b\x14\xb9\xc2\x91\xda\x46\x6e\x3a\x0b\x27\xd4\x76\x1c\x77\x0e\x13\xc6\x2b\x24\xb2\x39\x36\x53\x1b\x39\xee\x3f\xe2\x10\xdb\x56\xcf\x72\xd4\x9f\xc0\x72\xb2\xcf\x19\xcf\x75\xeb\x64\x9f\x45\xb4\x48\xa7\x35\xaf\x3d\xad\x43\x4c\x23\xa3\xc5\x4e\x6e\xf6\x0d\x60\xc1\x2f\x5d\x63\xf6\x79\x97\xbd\x04\xb5\x7d\x6e\x0a\xd6\x76\x27\x41\x6c\x1e\x93\x83\xd7\x72\x3c\x0a\x37\xa7\xf2\xa0\x10\xd7\x5a\x89\x9a\xf0\xb5\x77\x96\x21\x01\x60\x7b\x8c\x6d\xb6\x00\x51\x98\x7e\x69\x5b\x9a\x91\xb7\xdd\x49\x8c\x6d\x80\x11\xa5\xf5\xd9\x8c\x21\xd6\x6d\x7c\x46\x8a\x35\x7d\xc3\x8a\xff\x1b\xc0\xb7\x75\x52\x92\x3c\x65\x89\x2b\x82\x63\xed\x55\x31\x60\x94\xe8\xbc\x92\x3a\x0b\x1c\x0f\x0f\x97\xf6\x3d\xdb\xf2\x21\xee\xe9\x9a\x56\x3d\x1e\x2e\xeb\xe6\x43\x28\x69\xe1\xa1\x23\x06\x3b\xa8\x19\x21\x4c\xf3\x01\xec\x63\x80\xdd\x30\x75\x78\x1d\x07\x90\xf7\x3f\x95\xfd\x33\x3a\x23\xf1\x25\xaf\x0d\xfa\x8a\x90\x98\xd8\xe8\x81\xd5\x0b\xd3\x1e\x8e\x29\xfb\x36\xc3\xae\x48\xe6\x48\x67\xa8\xf7\xef\x0c\xed\xff\xde\x13\x88\x74\x2d\x27\x2b\xc8\xac\x64\xc3\x92\x85\x34\x42\x0d\x29\x66\xfc\x28\x54\x17\xa3\xca\x9e\x56\xdd\x76\x92\x4a\xd7\xec\x6b\x0d\x6e\xdb\xbd\x2d\x3b\x6c\xa6\xfd\xb8\x3f\x83\xe9\x37\xcb\x91\x3a\x42\xde\x68\x0c\x28\xbb\xfa\xd8\xc5\xb2\x8d\xc8\xb9\xbe\xb6\x91\x87\x5c\x1a\x8b\x07\x0e\x1b\x39\xbf\x36\x61\xd6\x05\x8d\xcc\xfa\x7e\xd4\x19\x7b\x18\x20\x07\xac\x32\xa7\x93\x1c\x14\xb7\x2f\x2c\xc3\xc3\xce\x75\xa0\x40\x2a\x36\x3c\xdb\x87\x78\x97\xca\x08\x10\x23\xc4\x5c\x4f\x36\x54\x93\x05\x50\x00\x14\x79\xab\x4c\xdd\x21\xcd\xa0\x6f\xd2\x10\xf4\x1d\x8d\xd0\xd8\x23\x32\xe8\x3b\x2a\x06\x7d\x9b\x3f\x41\x54\x0e\xfa\x8e\x1a\x83\xbe\xa3\xeb\xeb\xa8\x1c\xf4\x1d\x15\x83\xbe\x23\x0f\xb7\x09\xfa\xe6\xab\x20\xa1\x21\x92\x11\x5f\x5f\xe3\xcc\x01\x91\x03\xa0\x11\xf4\x1d\x95\x42\xb2\x23\x19\xf4\x5d\x78\xfe\x2c\xaa\x62\x15\xea\xa0\xef\x68\x7d\xd0\x77\xf9\x0b\xcd\x84\x11\x71\xf0\x78\xd0\x77\xb4\x55\xa1\xd1\x6a\xc6\x85\xb8\x55\xcd\xa2\xa6\xf2\x1b\x17\x16\x0f\x3f\xef\x92\x90\xc1\x4c\xc2\x90\x8a\xa3\x41\x17\xe2\x81\x40\x94\xfc\x51\xcf\xd9\x07\x40\x24\x1e\x9a\x89\x4e\x8a\x89\x0f\x64\x65\x20\x82\xfc\x78\x8a\xc3\x3f\x90\xfd\xf9\xfe\x4a\x16\xbd\xb8\x70\x2f\x20\xb1\x45\xa6\xf1\x0f\x6f\x2c\x27\xbb\xbf\x42\xd9\x67\x87\x17\x0e\xca\x32\x00\xbd\xd0\x26\x46\x7e\x04\x3d\x91\x11\x1d\x83\x9b\xa4\x46\x60\xeb\x54\x1a\x9a\xc3\x32\xc2\x37\x1d\x97\x98\x9c\x2a\xde\xc4\xa9\xa6\xd3\x68\xcb\x1a\xd2\xc5\xbe\x3b\x79\x00\xb6\x01\x7e\x2b\xa8\x77\x13\xdc\x35\xe7\xbd\x04\xb5\xed\x69\xcf\x9b\xb7\x40\xe0\x17\x84\x8f\xc2\xb4\x0f\x71\x8c\x97\xf3\x52\xf1\xcc\x9b\x1f\xfb\x61\xfa\x5c\x0d\xbc\xb9\xc8\xac\x54\xca\xb4\xa8\xd3\x7a\x52\xac\xd3\x2a\xd2\xfa\x3e\xf7\x7d\x94\xa6\x31\x79\xfd\xd2\x72\x6e\xa9\x00\xab\x46\x4f\x84\xa6\xd0\x5f\x97\x07\x6f\x2b\xdc\xbc\xe1\xa3\x32\x01\xa5\x8c\x18\xa5\x15\x36\x3f\xa1\x9e\x19\x70\x03\xeb\xc3\x22\x42\xa9\xe5\xf0\xac\xc4\x8b\x28\xba\xe7\x51\x95\x83\xda\xba\xe7\x79\xd4\xa5\x24\x9c\xdb\x2a\xb5\x31\x2e\xf6\x15\x9f\xcf\x95\xc6\xfa\x38\xc4\x87\x87\x38\xcb\x17\xc7\xf8\x3a\xe6\x15\x80\xab\x1d\x54\x21\x6d\x2c\xf2\xd3\x17\x50\xa3\xb3\xae\x20\x46\x8c\x43\x6a\x63\xb1\x3c\xa4\x76\x79\x70\x17\x91\x9f\x40\x9c\x86\xec\x3b\x7d\x1a\x77\x48\xba\x5e\xec\xb7\x6f\x8c\x40\x4f\xfe\x63\xdc\x9e\x1d\x18\x9d\x36\x33\x85\x06\xd3\xd2\xba\x5b\xd4\x1e\xda\x96\x68\x17\xab\x12\xd5\xf6\xa4\x35\xce\x9b\x94\x2c\xb0\xdf\x5e\x9b\xc4\x5b\xef\x1d\xd2\x38\x88\xad\xb1\xb6\xc0\x7e\x0b\x7a\x5b\x60\xbf\x54\x92\xae\x15\xcd\xc9\x6e\xfb\x88\x42\x0e\x6e\x17\x2c\x42\xda\xe2\x34\xbf\x44\xa8\xcc\x0a\xbf\x5d\x32\x37\x1a\xfa\x5f\xee\xa6\x1c\xaa\x1c\x79\xff\xd3\xb9\x09\x40\x5c\xbe\x6e\x1f\xe3\xc6\x7c\x6e\x0a\xde\xef\x09\xdd\xbe\x27\x74\x53\x7b\x7d\x81\x03\x44\x52\x3f\x26\x5d\xd9\xa6\xd1\x71\xcf\x18\xa7\x09\x72\xcb\x61\xf3\x2e\x1b\x99\xe7\x02\x77\xbf\x40\x8b\x3e\x3b\x89\xc6\x8d\xc0\xfe\x5e\x4a\x73\xbd\x2e\xf3\x89\x59\x19\x54\x32\xfb\xf4\xd5\x3c\x61\x73\x74\x9e\x8d\xc6\x43\xf1\xec\xb9\x4d\x1d\x97\x8d\xfc\xf3\x72\xcb\x44\x28\xa2\xf3\xdd\x25\x40\x61\xe3\x2f\x50\x3f\x0c\x76\xe3\x84\x0c\xe2\xf9\x5d\x1c\x8f\xbc\x32\xff\x3e\x9d\x8d\xa8\x9c\xd4\x38\x88\xe7\xee\x74\x11\x06\xf6\x2a\xab\x3d\x10\x39\x84\xdf\x4f\xc3\xef\xa7\xa1\xde\xd8\x49\x82\x48\x93\xbb\xf4\xba\xc3\x50\xf7\xdb\x49\x26\xbe\xe6\x2c\xcc\x01\x6e\x7b\x14\xaa\x1e\x9b\x0f\x07\x12\x7e\xb7\x7b\x7d\xb7\x7b\xed\xb7\xdd\x4b\xe8\x2b\x63\xef\xe8\xff\xbb\x5f\x53\x79\x5e\x16\x9e\x5f\x00\xbf\x5d\xe1\xf9\x86\xf3\x1b\x52\x28\xeb\xc7\x1d\xc9\x87\x5d\x6c\x65\x86\x9d\xcc\x28\x4d\x9f\xdb\xc5\x64\x9d\xf5\xb2\xc1\x8c\x7d\x55\x5b\xcc\xea\x4a\xc2\x2f\x0e\x0f\xed\xc5\xe6\x92\xf0\x71\x4d\x49\xf8\xc6\x7a\xf0\xe2\x58\x86\x14\xba\x0b\x12\xda\x0b\xce\x22\x9d\x3a\xeb\x9a\x9e\xf6\x1d\x98\xd7\x04\xe4\xb7\x6c\x5f\xf3\x37\x31\xc3\xa8\x3f\x89\x49\x07\xed\xb2\xea\xb1\x6f\x27\x0a\x89\x7e\x61\x70\xb6\x3d\x4e\x78\xf3\x8d\x67\x89\x70\x56\xed\x78\xad\x92\x9d\xf6\x0c\x81\x0a\xd4\x96\x43\x8a\xe6\x1b\x11\x78\xd9\x51\xa2\xb9\xdc\x37\xb4\x5d\xb6\x1e\xed\x72\x33\xb2\xc2\x28\xea\x07\x28\xa5\x24\xae\x2d\xe1\x44\x10\x0e\x6a\x76\x6c\xa1\xdb\x4e\xa2\x6f\x13\xd8\x74\x16\x2f\xea\x1d\x16\x9b\x77\x99\xea\xb5\x93\x00\xaf\xa1\x17\x05\x6c\x5b\xaa\x11\xed\x37\x22\xf1\xaa\x9e\xc9\x53\xb2\xa8\xb1\xdd\x5c\xed\x1f\x7f\xbf\xea\xc0\xdc\xaf\xd6\x70\x76\xe3\x3c\x4d\x8f\x60\x92\xf4\x99\x18\xda\xa4\x3a\x8b\xc2\xbe\xd1\xc4\xec\xdb\x9f\x40\x26\x04\x2d\x0b\x2e\xb4\xe2\x54\x3f\x42\xf8\x22\x24\x31\x66\x02\x51\x9d\x2b\x2d\x93\xdc\x08\x80\x37\xd7\xcf\x00\xac\x9d\x69\x9f\xbf\x7f\x7f\x78\x68\x13\xaf\xf0\x84\xbb\x10\x01\x58\x7a\x28\x81\x91\xb7\x55\x6f\xc5\x1a\x0d\xad\xe7\x49\xd2\xfb\xab\xc2\x44\x0e\xe7\xd0\x3e\x06\x7a\x7d\x1c\x9b\x5d\x38\x32\x43\xf8\x88\x5a\xe0\xd8\x8f\x31\x85\x21\x46\xa4\x1f\xa0\xf3\xc5\xb4\x0f\x03\x98\x08\x07\xa6\x1a\xfe\x96\xc6\xd1\x05\x22\x47\xea\x8f\xf4\x88\xcb\xa2\xa1\xdf\x38\xca\x9d\xd5\x56\x94\x78\x69\x9c\x7d\x0e\xa3\x2d\x96\x14\x79\x5a\x0a\x1e\x0d\xc6\xd7\xd7\xf9\xaf\xe3\xf1\x01\x72\x09\x9a\x86\x29\x45\xc4\x6e\x1a\x72\x38\x87\x21\xb6\x0c\x6c\x03\x24\x25\xf6\x4d\x5d\x2c\x36\xd5\x34\xe1\x79\xd3\x2c\x98\x24\x51\xe8\x43\x86\x10\xf1\xda\xc9\xb2\xcd\x1a\xc6\xc2\x8a\x89\xc5\xe0\xb7\x03\xfe\x9f\xda\x15\xfb\x29\x6f\x75\xc4\x27\x75\x94\x22\xba\x48\x76\x93\xad\x74\x02\xba\x8e\x32\xc5\x73\xe3\x87\x80\xb6\xaf\x17\xe6\x2e\x7d\xe6\x25\x29\x9a\x33\x31\x76\xa8\xde\xdd\xd9\x66\xcf\x93\x22\xc4\x1c\xc6\xbe\x41\x30\xfd\x69\x14\x9f\xc3\x52\x42\xc7\x2e\xec\xcd\xd0\xbb\xb3\x95\x60\xd3\x5f\xbb\x2d\xc2\x89\x7d\x6f\xc0\x1d\x7d\xf2\xa8\x00\xf6\xdd\xe7\xf9\x9c\xfe\xcc\xa7\x24\xc6\xc2\xac\x03\xb7\xa3\x4c\x78\x69\x77\x7d\x65\xbc\x0c\x71\x10\x5f\x3a\xd8\x13\x7f\x1c\xa0\x28\x45\xbd\x86\xb6\x02\x46\x07\x7b\xe2\x0f\xde\x76\x55\x6c\xeb\xa9\xb6\x29\x8a\x26\xd2\x21\xe9\x00\x7b\xec\x97\x70\xfd\x01\x70\xf3\x94\x0f\x88\x27\xe3\x7f\xf3\xf1\xe0\x33\x38\x2c\x64\x5e\x17\xec\x6d\xb2\xb4\xf3\xe1\xe6\x9c\x30\xde\xf3\x6a\xed\x0e\xc0\x23\x32\xbe\xbe\xb6\xd9\x3f\x1e\xe2\xee\xe2\x71\x82\xb0\xbd\x62\x32\xdf\x4b\x21\xf2\x99\xb4\xcf\xef\xb9\x9f\x44\x54\x04\x5b\xd8\xa5\xb8\x74\x1b\xf7\xf3\x00\x45\x88\xa2\x1e\x1b\x30\xcb\xd8\x1d\x78\x1b\xd7\x2f\x4d\x46\x75\xce\x5f\x45\xa2\x6d\x26\x32\x93\x86\xbb\xd2\xee\x24\x82\xe9\xac\x3f\x47\x69\x0a\xa7\xe5\xfb\xd9\x5a\x82\x35\x8f\x76\x3e\xc8\xd1\x82\x86\x51\x69\xc0\x7e\x9c\xb0\x99\xde\x56\x20\x8c\x81\x2e\xb2\xc6\x89\x90\x18\xc1\x97\xcd\x7b\x06\xac\xf8\x54\x7f\x15\x33\x7d\x29\xc6\x4a\x87\x24\xcb\x29\xf2\xfa\x7a\x95\x81\x95\x38\x3b\xc2\x18\xff\xc2\x25\x95\x10\xa5\x43\x98\x79\xe4\xfa\x7a\x34\x06\x91\x67\x1b\xd2\x83\x63\x13\xe7\x00\x1e\x1e\x42\xe9\x06\x77\x10\xb9\xd5\xce\x5a\x91\x48\xbd\xa7\x2b\x7d\x32\x51\x60\x99\xd3\x61\xe8\x97\x9a\xa4\x61\x69\x89\x9c\x4c\xb8\xcd\x41\x45\x19\xe5\x25\x34\xc8\x81\x64\x9b\x55\xe7\x05\x72\xc8\x7f\xf4\xd9\x6c\xc3\xbe\x0f\xa3\xe8\x1c\xfa\x5f\x3a\x51\x06\xef\x7a\x44\x50\x10\x12\xe4\xd3\xfe\x0c\xe2\x20\xfa\x2a\x9c\xbd\x3c\xe7\x73\x34\x89\x89\x7a\x5e\x10\x35\x90\xb3\x32\x49\xe3\xf0\xd0\x2e\xd2\x8a\x93\xcb\x0f\x2e\xef\x7d\x78\x58\x7a\xe0\x06\x21\xbf\x4f\x7d\x90\x60\xbe\xce\xf1\x78\x7d\x6d\xf3\x79\x22\xf2\x01\xc1\x20\xc4\x28\x4d\x6d\xc7\x10\x32\x05\x42\x6c\xc9\x6c\x5d\x1f\xd2\x82\x5e\xd9\x59\x21\x17\x06\x17\x10\xfb\xc8\xe8\x9f\x39\x4e\x51\x02\x69\xb3\xbd\x2b\xeb\x99\xa2\xb4\x2a\xa4\x8b\xf5\x3a\x8f\x63\x9a\x52\x02\x93\x23\xdd\x48\xbe\xd1\x4a\xb6\x3a\xff\xf0\x3b\x5b\x46\x3d\x0b\x38\x61\x22\xda\x36\x8b\x28\xb5\xbf\x44\xec\xd2\x29\xa2\x2f\x4c\x48\x1c\x9b\xfb\xcb\x12\x57\x7e\xe9\x4c\x6c\xb8\xb7\x70\x8e\x9c\x55\x51\x5e\x47\xa0\xb6\xd5\x81\xd8\x88\x7a\xab\x5a\x0f\xea\x9a\x1d\xe4\xf2\xa7\x96\x00\xeb\xda\xb1\x3b\xc1\x8d\x57\x78\xfd\xca\xca\x26\xb5\xeb\xda\xf5\x02\x06\xc8\x6d\x2d\x3c\x2c\x2c\x7c\xc7\x7d\xca\x97\x56\x41\x82\x1c\x9b\x14\xb7\x29\xe3\xe1\xbc\x91\xb9\x9a\xe6\x95\x40\xc6\x77\xa9\x6f\xeb\xb5\x14\xbf\x8b\x5b\xae\x0d\x0b\x9d\xc7\x01\x8a\xfa\x13\x02\xa7\x7c\x8e\x4d\x42\x70\xbf\xd2\x6e\xcd\xcb\x23\x74\x45\xef\x2a\xf8\x4e\x9d\x22\xf2\x5b\x1f\x09\xc4\xe9\x24\x26\x73\xbd\xef\xea\xc5\x65\xdb\x59\x15\x50\xd3\x10\x48\x57\x40\x8d\x10\xf5\x75\x04\x6d\x53\x60\xed\xda\x3e\x3b\x79\x2d\x6a\x1e\x33\x87\xa5\xf5\xb0\x79\x97\x76\x17\xae\x8b\x10\x5d\x72\xd9\x50\x6c\x82\xfa\xcc\x0d\x7d\xd5\x6a\x7d\xdf\xef\xd8\xe5\xd8\x4d\x29\x3b\x7c\xfb\xf5\xea\x97\x22\x82\x09\xfa\x7d\x11\x12\xc6\x40\x02\x84\x92\x39\x22\xd3\x8a\x0f\xc1\x0d\x4f\x48\xa4\x0c\x8d\x69\xd1\xa6\x49\xbc\x20\xf6\x39\x23\x2c\xa8\xa6\x60\x14\xd9\x23\xd7\x75\x89\xfb\xfb\x02\x91\xe5\x19\x8a\x10\x93\x3c\x9f\x47\x91\x6d\xa5\x3e\x09\x13\x3a\x12\xf6\x4a\x39\xe8\xd8\x72\xc6\x2a\xb3\xc8\x7f\x9d\xbd\x7b\xeb\x26\x90\xa4\x88\x09\x30\x90\xc2\x14\x69\x33\x67\x2a\x02\x67\xf5\x5c\x60\x51\xef\x65\xa0\xa7\xc8\xbe\x4d\x54\xe4\x88\x40\x98\x32\x61\xd8\xc6\x86\x61\x7d\x84\x01\x19\x3b\xde\xd3\x72\xe0\x7a\xe5\xf6\x47\xc4\x75\x6f\xc8\x6e\xbd\xd4\x90\xaa\x52\x5b\xbe\x71\x9c\x72\xb8\xf9\xe7\xdf\x30\xa3\x8c\x1e\x8d\x7b\x51\xec\x43\x8a\x7a\xff\x7e\x7f\x25\x5b\x67\xff\xfe\xd9\x31\x15\x4b\xd8\x95\xa9\xff\x6d\x0b\x2e\xe8\xac\x9f\x90\xf8\x22\x0c\x18\x2b\x94\xa7\x84\xf1\xa4\x7c\xb4\xa8\x09\xe8\x27\x9c\xca\x6c\x76\xb6\xeb\xe0\x1b\xe4\x46\x71\xfc\x65\x91\xd8\xfa\xac\xc9\x91\xe7\x70\x7b\x34\xf1\xb8\xb4\xb2\x41\x5f\xc5\x25\x47\x18\xc5\xd3\x57\x02\x99\x3f\x2f\x3f\x2e\x13\xa4\x47\xb5\x1c\x77\x12\x46\x54\xe4\x97\x2a\x46\xee\x13\x94\xc4\x69\x48\x63\xb2\x3c\xb2\x9c\xeb\x6b\x6b\x11\x2a\x06\xe0\x79\x1e\x72\x0e\x88\xc8\x81\x63\xb6\x33\xec\xda\x7a\xc5\xcc\xbc\x55\x86\x0c\x84\x0e\xb0\x9b\x22\x76\xa7\x61\x98\xe4\x0a\xc8\x0f\x1c\xb7\x42\xd0\xb0\xa9\xc3\xee\x30\xad\xd4\x9f\x75\x1b\x71\xb3\x82\xc9\x14\x8a\x52\x1a\x13\xa4\x88\xfd\xce\xb5\x9c\x0d\xaa\x25\x5a\xa7\x5a\x6a\xd4\x20\xd6\x01\x3d\x23\x68\xb2\xde\xa3\xff\x46\x1c\xe6\x2f\x04\x4d\x3e\xc6\x9a\xbf\x70\xbf\x05\x5a\x70\x52\xe0\xd8\xe2\x5a\x11\x43\x05\xf1\x5a\xce\xd5\x43\x40\xf8\xb1\x43\x32\x45\xd4\xa3\x9a\xd4\x8d\xa7\x2e\xa4\x94\x84\xe7\x0b\x8a\x52\x97\x41\x73\xc0\xdf\x2d\x48\xc4\xc3\xcc\x84\x19\x34\x93\x37\x23\x24\x3f\x95\xce\xe2\x45\x14\xfc\x45\x3d\x64\xd2\x9f\x9b\x10\x74\x81\x30\x95\x17\x76\xdb\x01\x4d\x93\xd2\xbb\x4c\xd8\xe7\xd5\x9e\xe1\xdb\x3f\x8c\x71\x21\x16\xca\x56\x93\x71\x9c\xac\xf4\xd1\x82\xe7\x43\x98\xfe\x86\xe7\x71\x10\x4e\x42\x14\xbc\x41\x13\xfa\x22\xfa\xff\xd9\xfb\xf3\xf6\xb6\x71\x2c\x51\x18\xff\xdf\x9f\x22\xe1\x93\xf1\x25\xba\x60\x3a\x99\x9e\x5f\xff\xee\x55\x0f\x93\xd7\xb1\x9d\x8a\x3b\xde\xca\x76\xba\xba\x5a\xaf\xc6\x45\x93\x90\xc4\x98\x22\x55\x24\x64\x5b\x91\x79\x3f\xfb\xfb\x60\x25\x00\x82\x5a\x4c\x65\x71\xca\x3d\xcf\x54\x2c\x00\x3c\xd8\x0f\xce\x7e\xe2\xf0\x9a\x8e\xec\x39\xaf\x3f\x18\xa4\x59\x8e\x22\x57\x99\xb9\x52\xbb\x7f\x87\x51\x9e\x06\x89\xb5\x7a\x18\x14\x3b\x74\x3b\xdf\x73\x8b\x56\x7b\x9b\xbd\xec\x36\x4d\xb2\xa0\xa9\x8b\xc3\x38\xbd\x96\x76\x1c\x5a\x9b\xb2\x69\xf4\x7c\x8a\xcf\x5d\x69\x10\x84\xbc\xdb\x61\x1c\x0e\x37\x37\x5f\x55\x3f\xee\xef\x91\x17\xe2\x3c\xf9\x80\xa6\xe4\xcf\x11\xc2\xc1\x07\x34\x25\x50\xe5\xac\x2a\xe7\xcd\xcb\xab\x24\x48\xaf\x29\x3a\x21\x98\x6c\x47\xec\xbd\xeb\xb0\xc1\x38\xe4\x3b\xb1\x56\x48\x89\x52\x26\x5e\x9d\x34\xc0\xf1\x0d\x22\xe7\xb2\x34\xd7\xc5\xd6\x9c\x5e\x3c\xd6\xaa\x54\xd7\x48\x6d\x4b\xe0\x54\xe3\x88\x78\x13\x3a\x12\x7d\xd1\x10\x53\x44\x60\xff\xf9\x2b\x05\x69\xc7\x11\xf5\xae\xac\x64\x4b\x0b\x0f\x1e\x25\xba\xb6\xd8\xbb\x92\x4f\xf9\x01\xec\xa6\xbd\x0d\xec\xa3\xcd\x4d\xf4\x4c\x5c\xf5\xac\xcf\x8d\x83\xb4\x61\x94\xe2\xe0\x95\xd2\xdb\xfd\x63\x9e\x68\x83\x8b\xfb\xaa\x4b\x26\x93\x59\x0e\x10\x3e\xa3\x07\xde\x05\x30\x57\xcb\x32\x4c\x3e\x07\x30\xf0\x5f\xd2\x6d\x89\x59\x3a\x38\x37\x07\xdc\x48\x98\x6c\xd4\xc7\x3c\xf9\x95\x29\x4a\xc9\x07\x2e\x80\x85\x9f\x7a\x97\xdc\xeb\x9e\xff\x7b\x14\x87\x79\x96\xc4\x57\xf7\xf7\x55\x15\xfb\x67\x03\xfb\xc1\xe6\x66\x51\xb9\xe7\xab\x9e\xfa\x09\xa8\x66\x64\xe9\x69\xf9\x65\xb5\xdf\xe7\x0d\xb6\x2a\xf4\xb8\x7d\x3c\x3b\xe4\x52\xdb\xd9\x00\xe1\xf7\x41\x31\xec\xb8\xc0\x7f\xed\x38\x50\xb4\xee\xcc\xc6\x01\x1e\x52\xa4\x2d\xae\x7e\x09\xaf\x82\x02\x7d\x3c\x3b\xec\x20\x8f\xff\x05\x79\x30\x81\x0e\xf2\xf8\x5f\x10\xa5\x37\x1d\xe4\xa1\xf4\xa6\x84\xdd\x5e\xf5\xa6\x63\xb9\x9c\xce\x1b\xe9\x49\xbb\xf5\x8a\x39\xd1\xba\xd8\xc7\x22\x20\xce\x4b\x98\x6e\xbd\x02\x00\xe2\x52\xdd\x29\x0d\xc9\xcc\x9b\xbb\x78\x65\x45\xbc\x86\x52\xdb\x5b\xae\x3f\xab\x1d\x04\x46\x4c\xc8\xc8\x08\x22\xec\xdd\xb6\x43\x6f\x77\x48\xb3\xdc\xbb\x88\x4b\x2d\xb7\x5e\x51\x44\xfb\x93\xef\x6c\x3b\x00\xa2\xb2\x94\xcf\x03\xd6\x1f\x3b\xf9\x26\xe9\x04\x5f\x83\x0a\xe0\x5d\x50\xe0\xb7\x59\xa6\xc4\xef\xab\xcf\x8a\x1a\xc2\x7b\x82\xac\xa5\x07\x38\x95\x34\x46\xee\x3b\x3b\x04\xa1\xa4\xe2\x41\xc1\xc1\xe0\x38\x18\xa1\x37\xa2\xa0\xa3\x3e\x87\xe4\x6a\x78\x61\x92\x15\xa8\x10\xae\xd0\xcf\x64\x81\xeb\x04\x0e\xd8\xe8\x93\x67\xcd\x47\x84\xe0\x45\x29\xde\x4f\x10\xe9\xf4\xef\x68\x73\xd3\xd9\x61\x0b\xc3\x3b\xf8\x3b\xa8\xb5\x12\x36\xa2\xa8\x74\x45\xef\x4c\x96\x04\x66\x84\xe6\xc4\x2e\x82\x39\x10\x72\xbe\x94\x10\x3b\xa9\x77\x95\x45\x53\x2f\x88\xa2\x7d\xf2\x7c\x1d\x12\x52\x33\xa5\x5a\x4c\x82\x84\x1d\x98\x03\xbb\x52\xa2\x3a\x1b\x1c\x42\x8e\x46\xd9\x0d\x6a\x04\xa2\x28\x2e\x74\x83\x42\x42\x88\xd6\x34\x98\x16\x27\x56\x3b\xfd\x11\xdf\x4c\x69\x66\xe1\x51\x4c\xc8\xe9\xe5\xfc\x45\x14\x5f\x75\xa4\x1e\x6a\xa6\x4e\xb7\xed\xff\x96\xd8\x7a\x6a\x3e\x49\x56\xf2\x28\x18\xbb\x06\xcb\xa0\x30\x29\xa9\xce\xe3\xb8\xbf\x33\xd6\xe6\xc5\x0c\x97\x5b\xfd\xa2\xf7\x3b\xf0\x30\xba\xc3\xbb\x59\x8a\xa9\x4d\x23\xd8\xd8\xcd\x22\x74\x44\xa7\xe0\x8d\xa8\xc9\xe3\xa1\x3f\xe3\xc4\x7e\x47\x27\x0c\x39\x0f\x22\x3c\xe7\x39\x27\xf2\x29\xb8\x09\x18\x13\xe5\x88\xc8\x59\xcc\x8d\xbe\xeb\xa8\xab\xe3\x8c\x68\xb6\x68\xb5\xb9\xfa\xc3\xfb\x54\x38\x3d\x1e\xaa\x71\xdb\x01\x2c\xb8\x96\x93\x4f\xae\xa6\x4b\x41\xa5\x0d\xd9\x3f\x76\x48\xd3\x60\x94\x2c\x05\x89\x36\x64\xff\xd8\x21\xdd\x2d\x09\xe8\x8e\xc2\xb9\xab\x83\x61\x47\xce\xc6\x05\x38\xa1\x78\xe8\x3a\xc6\xe1\x02\xf2\x1e\x48\x92\xf1\x6d\x9c\x46\x71\x3a\x28\x3a\x5d\xaa\xa3\x77\x7a\xe5\x83\xfc\x8a\x14\x05\x52\xa3\x6f\xd1\x4c\xa5\xdb\x1f\x4c\xaf\x17\xf4\x48\xd6\x24\xed\xd5\x67\x28\xbd\xf9\xe2\xdc\x88\x32\x88\x1a\x8a\xa6\x6c\x2b\x4a\x6f\x80\xeb\xec\x9e\x1c\x9f\x7f\x3c\xbc\xfc\x78\x70\xb9\x77\x70\xbe\xf3\xf6\x70\xff\x72\xe7\x78\xf7\xfd\xc9\xd9\xe5\xf9\xfe\xe1\xfe\xee\xc5\xc1\xc9\xb1\x03\x84\xf2\x76\x01\xee\x86\xd4\x72\xa6\xc2\xdf\x81\x4f\x4f\x0d\xc7\x9a\x84\x43\x65\x28\xd5\x75\x86\x78\x94\x38\xa0\xfb\xb2\x07\x13\xbf\x1e\x25\x82\x61\x7a\x89\x81\xdf\x50\x4f\x80\x0a\x77\x43\x04\x4a\x58\xf8\x06\xbe\x0f\x18\xef\x4d\xb0\xa2\xc7\x19\xe7\xc2\x75\xe2\x82\xf1\xce\xe6\x1c\xb0\x9f\xb8\x48\xc5\xdd\x98\x02\x51\x48\xe0\xab\x09\xc6\x59\xba\xb9\xf9\x9f\x7e\xf5\x4b\x21\x53\x24\xed\x49\xb9\x19\x25\x14\x86\x8b\x36\x37\x31\xe1\x80\x15\x6a\x93\xb4\x21\xc3\x06\x65\x45\x31\x0c\xea\x2d\xc0\x06\x25\x17\x34\xd0\x7e\x0a\x31\xc7\xfa\xb5\xe6\xa0\x2c\x61\xbc\xfe\x75\xa8\xc6\xa8\xcd\xf1\xb9\xec\x08\x73\x03\x01\xb5\xe9\x00\xe1\x73\x71\xe0\x5c\x21\xc7\x78\xfe\x6a\x03\xe7\xd3\x59\xee\x3b\x71\xb1\x9b\x25\x49\x30\x2e\x50\xe4\xc4\xe9\xb3\x74\x73\xf3\x79\xea\x29\x85\x84\x09\xac\x62\x59\x8b\x98\xb8\xaf\x4a\xa6\x1d\x43\x60\x26\xa8\xc7\xbc\x74\xc1\xe6\x66\xda\xb4\xc6\xf4\xb5\xcd\x9b\x5e\xdb\x51\x36\x29\x10\x21\xfd\x1d\x58\x00\x38\xbf\xd9\x64\xec\xc0\xb8\xe1\x59\xb6\xc8\x16\xf3\x39\xef\xb3\xb5\xdb\xe6\x96\xbc\xe7\xf9\x6f\xf9\xc3\x51\x13\x9e\x8c\x99\xd1\x7a\x31\x5f\x5b\x44\xda\xd0\x24\x67\x0d\xfa\x22\x51\x3a\x1a\x07\x78\x7b\x80\xb0\xb0\x84\x17\xfd\xce\x69\x92\xc4\x57\x95\xa2\x98\x15\x45\x45\xb2\x55\xd3\x73\x54\xee\x39\xeb\xc1\x8d\x89\xa9\x63\x54\xd7\xa2\x86\x24\x9f\x37\xe9\x0d\x6d\xca\x40\x7e\xab\xc8\xb9\xa7\x66\x01\xb9\xaa\x70\xa2\x9d\x2b\x18\x8b\xdb\xe1\x90\x76\x41\xd5\x2e\x01\x5e\x30\xc1\x43\x94\x62\x42\x2a\xa1\x88\xd2\xef\xc5\xc6\x73\xdd\xd7\x36\x25\xf4\xb9\xa1\x9e\x4c\x01\x4c\xbc\xac\xdf\x77\x1d\x72\x48\x2f\xa4\x68\x83\x9c\xb7\x72\x23\xf1\xc8\x83\x6b\xa9\x79\xb0\x10\xee\x36\x48\xae\xa5\x18\xd4\x7a\x8c\x92\xf8\x4a\x31\x36\xa4\xc6\x21\xdf\x58\xa1\x6c\x8e\x59\xdf\x6e\x86\xaf\x1a\x15\xc5\x84\x59\xa0\xba\xca\x67\x31\xb9\xea\x12\x0c\x50\xfe\xf6\x86\x41\x71\x72\x9b\xca\xf1\x06\x62\xa3\xd8\x5b\x09\x58\xfc\x2e\x5d\x80\xfc\x53\xb0\x94\x56\x5f\xf0\xad\xc5\x76\xbf\x18\xd1\xd4\x94\xdc\xb6\x26\x48\xb6\xea\x41\x6a\x97\xfa\xae\xb9\x9d\xb4\x4a\xa4\xf1\x6f\x85\xd1\xf3\x97\xd2\x00\x33\x69\x63\x20\xfd\xa4\xe4\xb9\x9e\x15\x38\xc0\x71\xf8\x8c\x39\x2d\x29\x8c\x10\xe1\xb0\x86\x71\x61\xe0\x44\xdd\xa5\x8a\x9a\xcc\x41\x0c\xf3\x0d\x9b\x73\x55\xee\x3b\x4d\xeb\xe8\x62\xdf\x89\x47\x63\x46\xb1\xb0\x03\x0a\xe2\xd4\x65\x5c\x35\x78\x33\xc7\xa3\x91\x4d\x32\x37\x7c\x90\x4c\x0f\x25\xc5\x27\xa9\x04\x1d\xd4\xc5\x3d\x3f\x67\x98\x5e\xec\x01\x65\x7c\x52\xef\x90\xff\x64\x95\xa3\x20\x1c\xc6\x29\xe2\x75\xef\xce\x8f\x5c\xed\x1b\xfe\x58\x44\x59\xe8\xcf\xf8\xf2\xfd\x33\x46\xb7\x9d\x99\xf9\xb6\x75\x28\xa5\xe9\xbf\x9e\x2d\x03\x15\x62\x50\x42\xcb\x33\x45\xa5\x29\x0d\x10\xca\xb2\x2c\x6f\xe2\x22\xd6\xf8\x3f\xda\x54\x62\x03\x98\x1a\x05\x76\xd1\x0e\x0c\xfc\xa0\x98\xa6\x21\xe9\xcc\x0d\x6e\x83\x18\x53\xac\x5a\x20\x8c\x13\x14\x01\x17\x40\xd2\xe9\x69\x9e\x8d\xe2\x02\xb9\xc8\x7f\x5d\x20\x7c\x11\x8f\x50\x36\xc1\x2e\x72\x31\x80\x2f\x01\x00\x30\xf1\x91\xff\x9a\x89\x03\x10\x61\x2f\xb8\x6a\x88\xff\xa2\x86\x90\x15\x52\xdc\xb9\xa2\x81\x88\x19\xf1\x49\x70\x07\xa1\x4a\x0c\xb1\x97\x17\x84\x38\xbe\x41\xd5\x47\x40\x32\xe8\x8b\x5a\x7a\x04\xb7\xbb\x01\x4c\xc0\x06\x1d\xc5\xbc\x9e\xdf\x28\xb1\x92\x3d\x6e\xdd\x05\x3a\x48\xb8\xa7\x3a\xa4\xa5\xb6\x59\x9e\x90\x68\xbd\x71\x79\xa8\x4c\x2a\xee\xf1\x53\xf1\x97\x54\x6b\x6d\xff\xbf\xdb\x2f\xb6\xa1\xe3\x00\xed\x68\x79\xe4\xba\x21\x0a\xa5\x01\xb0\x2f\x82\x6d\x72\x80\x2c\xc2\x26\x03\x52\x7d\xc6\xe4\x6f\x2e\x80\xc2\xd0\x89\xfc\x72\x9c\x9f\x64\x33\x50\x2d\x03\x60\xd2\x37\x4d\x14\x8f\x94\xfa\xb2\x5c\x68\x7c\x31\x17\xc3\xad\xc0\x7b\xa9\x61\xee\xd8\x23\x24\x64\x72\x04\xe3\xa3\xc5\x17\x3f\x5d\xfd\xe2\xa7\x10\xad\xcd\xc5\x35\xf7\x67\xe5\xdf\xeb\x5c\xdd\xe9\xce\xd9\xc5\x01\xe1\xe1\xce\x2f\xf7\x8f\x09\x73\xb7\xe7\x90\x57\x29\xf7\xc6\x41\x8e\xe9\x92\xfb\xdb\xff\x73\xe9\x76\x83\xad\xcf\x3b\x5b\xff\x7e\xb9\xf5\x7f\x7a\xca\xdf\x5b\xbd\xd9\x4b\xf8\xb7\xff\x2c\x95\x5a\xf0\x06\xbc\xd8\xe6\x5a\x4f\xad\xa3\xe3\xf3\xd3\x9d\xdd\x7d\xb3\x97\x94\x9a\xd3\xfb\xdb\xff\xf3\x7f\x57\xed\x82\x4f\x2b\xf0\xd9\x69\x4d\xac\x31\x10\xd5\x43\x2b\xb0\x0a\x3b\x7f\xef\xb2\xbc\xba\x5c\x2e\xe3\x6c\x52\x71\x65\x2e\xc7\x39\xba\x89\xb3\x49\xf1\xf1\xec\x90\x12\x7a\xb8\x56\x73\x4a\x0e\x2a\x27\xe9\xea\x35\x7a\xc7\xf3\x90\x59\x47\x11\x7c\x51\xc9\x46\x3f\x47\xc5\xd0\x05\x65\xe5\xb0\x2b\x45\xa4\x0c\x0e\xb7\x5e\xdc\xdc\xd4\x7e\xba\x02\xc5\xab\x63\xf7\x53\xb8\x60\x6c\x2a\x69\x41\x1f\xda\x16\x8f\x2a\x7d\x4e\xc1\x2c\xe5\xfe\xc7\xc6\x23\x09\xeb\x2f\xaa\x03\xa0\x68\xcc\x05\xea\x0e\xc5\x3a\xa9\x0c\x05\xcc\x04\xd2\x90\x4a\x9a\x45\x29\x19\xb6\x51\x14\x12\x02\x34\x61\xd2\xec\x73\xea\x1d\x01\x9f\xbf\xaa\xaa\xab\xfb\x3e\x2b\x81\xb1\x1b\xbe\x21\x3d\x44\xa0\xfb\xb2\xd7\x7d\xd5\x83\x55\x38\x61\x3f\xf1\xae\xe2\x94\xe9\xd3\x94\x77\x54\xfa\xae\xe3\x37\x0d\x1b\x6c\x11\x5b\x76\x30\x14\xe1\x88\x2b\x00\xf9\x22\x00\x34\xb8\x72\x27\x97\x47\x5e\x8c\xc1\x10\x6f\xd2\x55\xec\x12\x36\xb7\xe7\x80\x0d\x16\xe7\xd3\x0f\x36\x37\x19\xbe\xe7\x4b\xec\x07\x56\xc1\x02\x28\x09\xb9\x7b\x8e\xd9\xa6\xeb\xf4\x86\xf6\xeb\xfe\x5e\xf6\xae\x10\x12\x0a\x49\xa0\xbe\xfa\xea\x8f\x86\x0f\x87\x71\x81\xb3\x7c\x0a\xad\x95\x75\xce\x7b\x9c\x8d\xe9\xe9\x75\x94\x0d\x12\xb8\x40\xef\x8f\x9d\x72\x1e\xef\xa6\x7a\x75\xf8\x74\xfa\x59\x3e\x0a\x68\x11\x06\x1b\x68\x73\x93\x3f\x6c\xbe\x9f\xf2\xe7\x51\xbf\x33\xe6\x45\x22\x0b\x89\xf9\xeb\x14\xc5\xc5\x98\x0a\x21\x1c\xfe\x80\x52\x21\x03\x47\x33\x79\x36\x52\x95\x8c\xbe\x58\x86\xda\xe3\x09\xb5\x47\x59\xfd\x21\xdf\xe5\xa0\x7a\x93\xc5\x66\xaa\x3f\x8c\x76\x48\xfe\x26\x77\x97\xf9\xf4\xbb\xbf\xff\x0f\x7f\xa2\xf9\x37\xa5\xfb\xc6\xdf\xbe\x7f\x01\x7e\x07\xe4\x9b\xb9\x5f\x88\x47\x5d\xfb\xa2\xb4\x61\x53\x43\x29\x2e\xae\x9f\x3f\x2b\x21\xd2\x70\x30\x5b\x1c\xaf\x18\x27\x31\xa6\xf2\x60\x61\x91\x22\x88\x50\x82\x7a\xff\xfb\xaf\x8a\x46\x53\x8f\xbd\x21\x2e\x6d\x5e\x05\xb7\x48\x61\x37\x87\x01\x35\x13\x62\x87\x22\xf1\x03\x0f\xdd\xa1\x90\x30\xd9\x02\x97\xb1\x9b\x91\x6c\x6e\x32\x7f\x0f\xfe\x7a\x22\x38\x22\xdb\xd8\x49\xba\xaf\x7a\x25\xc4\x34\x92\x46\x5a\x42\x6d\x0e\x00\x3e\x17\x8a\x57\xf2\xd8\x56\x92\xec\x52\xb4\x38\x0d\xf2\x60\x54\xe8\xba\x36\x51\x77\x7f\x2f\xc3\x87\x74\x1d\xf9\xc0\x3a\xd0\x61\xcf\xa0\xd3\x93\xd3\xc0\x34\x4b\x01\x67\x3a\x1d\xa7\x16\x49\x17\x75\xd3\x1e\x75\x44\x24\x7f\x78\x74\xdc\x00\xe2\x6e\x4a\x99\x85\x92\xe0\x39\x4e\x64\x1b\x81\x04\x55\x42\x4a\xc7\xe4\x43\xaa\xc3\x73\x11\x63\xdb\x64\x47\xb9\x17\x85\x9b\x9b\xdc\x99\x85\xfc\x80\x4a\x15\x1b\xb6\xfa\x90\x3b\xff\xd7\xf9\x49\xfc\x00\x6a\x53\x39\x5b\x83\xb8\x70\x2e\xc9\x07\xf2\xb7\x12\x12\x44\x89\xe7\x2e\x50\x18\xfb\xb5\x14\x73\x00\x78\x50\xad\xe7\x2f\x37\x6a\xe6\x62\x08\xe3\x38\x1d\x14\x94\x96\xee\x58\x12\x97\x44\x59\x58\x78\x0e\xe8\x04\xfe\xf3\x57\x25\x39\x82\x4a\x64\x79\x96\xba\x86\x69\x4e\x8f\x83\x91\xf5\x43\x72\xae\xbc\x49\xca\xf2\x72\xd5\x29\xa1\xbd\x9d\x8b\x9d\xdd\xfd\xe3\x8b\xfd\xb3\xcb\xd3\xb3\x83\xa3\x9d\xb3\xdf\x1c\x9a\xa1\x42\x83\x14\x3a\x40\x08\x62\x7f\x27\x07\x39\x4b\x50\x67\x7b\x9b\x10\xd4\xcf\xfe\xdb\x7f\xf6\x62\x46\xb5\x5c\xcc\xf0\x2d\xee\x4f\xdd\x14\x94\xbf\x6f\x88\x03\xaf\x8e\xd7\x60\x39\xe8\xaa\x14\x54\xe6\x5a\xf8\x89\x37\x20\x48\x35\xa0\xa1\xb5\x3c\xcf\x4b\xe1\x8c\x3e\x28\xec\x08\x77\x66\x65\x09\xb8\x78\x35\x06\xb3\xd4\xd7\xf3\x8a\x25\x5e\x96\x44\xe7\x9c\x90\x20\xed\x81\x92\x62\x83\x5c\x5e\x99\xa1\x4c\x0d\x94\x83\x81\x9a\x71\xb0\xdb\x03\x90\xfc\xbf\x65\x28\x95\x31\x80\x8e\xad\x0b\x2a\xed\x2b\x0d\x8e\x60\xb6\xea\x2e\x91\x4d\x32\xf2\xdd\xc8\x45\x96\x12\xf0\x67\xbc\xcc\x8b\xd3\x7e\xe6\x3a\x56\xcb\xa0\xce\x33\xe7\x27\x99\xcd\xe6\xd5\x4b\x00\xe0\xf3\x2a\x2c\xb7\x81\xa6\x34\x5c\x20\xf0\x04\x98\x47\x97\x22\x26\x71\xaf\x3d\x3d\xbe\x2f\xb9\x4a\xe3\x09\x1a\x4f\x8a\xa1\x03\x11\x80\x9c\xef\x15\xba\x35\x17\x6c\x48\x3d\xb9\x75\x1c\x55\x4a\xc8\x22\x1b\x21\x97\xc7\x75\xf1\x5f\xe7\x5d\xd4\x7b\xee\xfb\x18\x70\x82\xd3\xd2\xd5\x32\xf7\x51\x47\x3d\x29\x28\x4b\xf1\x22\xeb\x86\x1d\x72\x91\x0b\x14\xe4\xe1\xf0\xfe\xde\x71\xb8\xe5\x86\xe3\x6c\x48\x7c\xa2\x37\x1d\x06\xc5\x90\x59\x51\xd4\x8a\xa5\x59\x05\x00\x55\x66\xbd\x66\x36\xc0\xfa\x32\xb3\x4c\x11\x2f\x66\xb8\xfc\xbd\xac\x0e\x22\x65\x02\xc9\x1b\x41\x0d\x1a\xa8\x41\x80\xc1\x58\xb7\x7f\xc3\x41\xc7\xd9\x96\x7c\x3c\x6f\xd1\x7d\xd9\xdb\xdc\x54\x8a\x79\x07\xb4\xd8\x5d\x16\x2e\x4c\x55\x33\x8b\xea\xfd\xdd\x20\x88\x57\xbb\xaf\xd4\x3f\x82\xdf\x59\xba\xc6\x22\x74\x13\xf6\x5d\x6c\xa0\x04\xcc\x69\x1b\xf5\xb9\x03\xaa\x95\xe9\xdb\x2c\x4b\x50\x40\x8e\xb5\x4c\x56\x88\xd8\xc7\xf7\xf7\x88\x62\x82\x94\x0e\x26\x44\xe4\x71\xea\xbe\x82\x2f\x7b\x02\x89\x60\x82\x22\xfd\x54\x79\x70\xf5\xed\x14\xf4\x8c\x4d\x02\x51\x86\xc3\x20\x1d\x20\xbe\x6b\x9c\xba\x65\x02\x09\xdd\x12\x51\xa3\x1c\x37\x70\x9d\x52\x84\xd4\x16\x91\x53\x8a\x62\xba\xf2\x46\xd0\xb8\xbc\x05\x3b\xd6\xc2\x44\xb1\xea\x5a\xde\x97\x92\xef\x45\x43\x33\x49\x44\x22\x50\x66\xe9\xc7\x71\x14\x60\xbd\x29\xe7\xf8\x7c\x54\x6a\x3d\xcb\x0d\xa5\xa6\x4b\x1d\x0c\x27\x93\x38\xea\x38\x77\xfc\x7f\x5b\xf4\x3f\xff\x45\xfe\x33\x15\x3f\xc5\xff\x9c\x4a\xf4\xd3\xbd\x9b\xf6\xb6\x07\x50\x35\xdd\x7d\xf5\xb7\xbf\x1c\x05\x78\xe8\xe5\x41\x1a\x65\x23\x17\xdc\xbf\xe4\x57\xc9\x75\xee\xe8\x1b\xfa\x06\x77\xfe\xba\x89\xef\xff\x37\xa8\x14\x74\xaf\xfe\x06\x4a\x50\x6e\xa8\xab\xda\x45\x3f\x39\xf4\xbd\x70\x7a\x6e\x0a\x09\x0d\x06\x31\x50\xa8\x78\x97\xb2\x9e\xa8\x93\x96\xa0\xd4\x0d\x5c\xac\xac\x81\x55\x3b\x66\xe5\x0e\xca\x72\x09\xc9\xd0\x92\x26\x2b\x8f\x44\xf2\x83\xa4\x74\xd8\x47\xde\xbb\xf3\x23\x21\x0a\x62\x3f\x18\xa3\xaf\xb3\xee\xa9\xef\x52\xa1\x6d\x09\xc0\x0c\x73\xbe\x99\x2f\xa5\x64\x9a\x13\xbe\xce\x82\x1b\x92\x0c\x22\x2a\xc9\xd9\x66\xcc\x23\x5f\x22\xda\x80\x02\x10\xc6\xbf\x75\x71\x61\xaa\x83\x15\x07\xa0\xfa\xb4\x94\x77\x45\x30\xa6\xea\xa3\x57\xf5\x69\x28\x3f\x37\x94\xe9\xd7\xe7\x5a\xcd\x4f\x0c\x84\x49\x1d\xe4\xac\xe9\xc3\xa3\x97\xb1\x44\x67\x8e\xe1\xee\xd5\x5a\x60\x52\x0d\xc5\x26\x2c\x71\x96\x95\x55\x3c\x90\xd4\x07\x33\x9d\x8c\x02\xb3\xa6\x9b\xc2\x6f\x70\xb1\x7d\xc5\x10\xb8\x77\xc7\x8f\xc6\x17\x4c\xfd\x56\x15\xcc\x08\x1a\xe3\x3d\x4b\xad\x5c\xc7\xe9\x07\x49\x81\x1c\x48\x47\x52\x74\x66\x38\x9f\xa0\xce\x2c\x4b\x3b\xb3\x8b\x93\x9f\x7f\x3e\xdc\xef\x74\x67\xdc\xec\x8f\xb7\x2c\x7b\xf0\xdd\xce\xe1\xb9\xad\xa2\x2c\x21\xfd\xb3\xe1\x7b\x02\x9a\x7c\x7e\x71\xf6\xd1\x52\x5c\x96\x0b\x97\xed\x26\x48\x62\x82\xc6\xbf\xc1\xba\x31\x57\x3d\xb9\x68\x71\x44\x00\x90\x59\x9e\xed\x9f\xef\x5f\x28\xb3\xa1\x35\x65\xaf\x94\x0b\x4a\x0a\xd8\x82\x9c\x7f\xdc\xdd\xdd\x3f\x3f\x57\x1a\x17\x13\x9a\x44\x87\x2c\xca\xfe\xd9\xd9\xc9\x99\x52\x45\xd5\x26\x6c\x4d\x79\xab\x0e\xe1\xfb\x49\x29\xe1\x28\x9a\x96\x2a\xbe\x8b\xd3\x62\x7b\x9c\x25\x71\x38\xdd\x0e\x8a\xad\x51\x90\x4e\x9b\xe4\xf3\x2c\x92\xc0\x28\x4e\xe3\x51\xfc\x19\x1d\x65\x11\x4a\x16\xc9\xeb\x85\x3e\x5d\xa5\x6d\x18\x71\xcd\x4b\x06\x08\x2b\xaa\xd9\xf3\xe9\xe8\x2a\x4b\x0a\xf6\x95\xbc\x77\xd6\x36\x04\x0c\xa6\xac\x78\x2e\xa5\x17\x95\x1d\x8c\xbc\x93\x56\x10\x7b\x88\x19\xfc\x71\xff\x09\x25\x20\x68\x09\x08\x91\x46\x51\x1c\xb7\x54\x26\x6c\xb9\xe0\x89\xd2\x52\x09\x66\xf0\x58\xde\x24\x4d\x1b\x11\xf8\x75\x55\x31\x27\x2a\xd0\xfd\x7d\xb7\xc7\xe8\x43\xb7\x2e\xd3\x0f\xfc\x19\x46\xa3\x71\x42\x1f\x0a\x48\x78\xbb\x0e\xea\xa6\xbd\xd2\x22\x21\xc9\x09\x45\x1c\xd0\x80\x1e\xdd\xbc\x07\x60\x50\x02\x50\x5a\xcd\xc9\x1a\xfb\xe4\x40\x35\x6a\x80\x2b\xfa\xb1\xff\xea\xef\xf8\xbf\xcd\x24\xdd\x7f\xc7\x3f\xfd\xc4\x4e\x4d\xe0\x33\x31\x53\xe5\x8d\x8c\x7b\x6f\xd4\x1f\x9d\x59\xb9\x81\xff\xe3\x3f\xdf\xa4\xfc\x08\xba\x01\xe1\x1d\x6d\x81\x64\xc9\x29\xa2\xcb\x14\x74\x71\x8f\x26\x47\x5a\x70\x9a\x0a\xeb\xfe\xd3\x27\x03\x2e\xfa\xd4\x0d\x00\xe8\x28\x63\x6a\x18\x50\xf3\x01\x5b\x74\xd2\x03\x1a\x12\x14\xc8\xc3\x8c\x4a\xb7\xda\x52\xc7\x29\x21\xcd\xff\xa4\xdb\xef\xe9\x47\xe4\x19\xaa\xdf\x34\x64\x04\x9e\xe7\xb9\xab\x04\x60\x07\x10\x82\xbd\x04\x8d\xe7\x0a\xfb\xb3\x6e\x2a\x22\xd4\xf3\x8f\xc9\xe9\x72\x40\xfd\x68\xa9\x8d\x68\xf8\x5d\x4c\x0e\x99\x5e\x0a\x20\xa6\xb3\x88\x2d\xc7\x6d\xee\xf8\x1d\x23\x67\x99\x3a\x07\x02\x91\x5a\xae\x64\xbc\xc5\x11\x41\x9b\x3c\x6a\xab\x3b\xcb\x51\x31\xce\xd2\xe8\x5d\x96\xff\x32\x41\xf9\xf4\x0c\x85\x59\x1e\x75\xec\xc1\xbf\x15\xd3\x31\x1b\xba\xaa\x12\xa5\xa6\xde\x29\x41\xca\x31\x2a\xfc\x44\xf9\x01\x04\x63\x16\xb8\xa9\xc7\xcd\x9c\x0e\x22\x94\xe2\x98\x9c\x33\xe9\x26\xbf\x15\xb3\xb2\xa9\x03\x1d\xc5\x18\xca\x81\xce\x5e\x80\x83\x10\xa5\x18\xe5\x85\x03\x34\x68\xc7\x59\xa4\x81\x4a\xb3\x48\x83\x43\xea\x6b\x40\x08\x53\x8b\xe9\x98\xc9\xe1\xe2\x86\x09\xda\x72\x3c\x78\x21\x74\x07\xd5\x2a\x4d\x19\x4c\x1b\x11\x06\x52\x17\x0d\xd9\x16\x0d\xad\x75\xd1\xd0\xc3\x17\x8d\x3e\x35\xa5\x5c\xb4\x02\xe5\xdc\xb8\x59\x9f\xb6\x26\x3b\xb2\xd9\x1c\x6e\x48\x33\xc7\xda\xc4\xfc\xc2\xcd\xe5\x1a\xac\x3a\x4b\x98\x1b\x73\x33\xa0\x2d\x39\x51\x58\x7d\xe3\xeb\xc6\x71\xb1\x02\x0e\x00\x98\xeb\xd9\xa4\x1b\xd2\x6a\x72\x7a\x25\xcf\x12\xb4\x16\x6a\x65\x5d\x96\xdd\x5f\x11\x2d\x9c\x65\x89\x74\x39\xa7\x6e\x37\xb4\xe0\xfe\x9e\x3c\x7b\xd5\xef\x37\xdd\x5e\x87\xff\xf9\x5d\xdd\x4f\x63\xf4\xc8\x18\x3d\xaa\x46\xcf\xff\xfc\x02\x17\x85\x8d\xc1\x74\x10\xa7\xa5\xb5\x73\xd8\x60\xc2\xcb\xcf\x61\x91\x64\x66\x28\x91\xab\x24\x0b\xaf\xb7\x68\x85\xde\xea\xbb\x8c\xe1\x30\x77\x76\xd4\x68\x80\xce\x27\x4e\x07\x3c\x0d\xad\x35\x70\x4a\x9c\xf6\x99\x2a\xfc\xeb\x5e\xb0\xcb\x3e\x42\xd1\x55\x10\x5e\x77\xec\xf1\xdf\x45\xb5\x03\xa0\xd0\x3d\x35\xb4\x94\xaa\x29\x40\x59\xb6\x86\x88\x73\xc6\x79\xd2\xe4\xe7\x72\x2c\x5c\xad\xb0\xc1\x3a\xa2\xfe\xf6\x54\xd2\x20\x07\x03\x67\xe8\x0e\x85\x13\xac\x1c\x60\x9a\xab\x41\x1c\xe1\x82\x5a\x86\x49\x05\x0a\x93\x11\x7b\x0e\xd8\x28\xbc\x71\x36\x96\xc9\x42\x63\x76\x80\x8b\x38\x1d\x4c\x92\x20\x8f\x3f\x23\xe0\xf2\x16\xf2\xa8\x23\x8f\x77\xc5\x7a\x80\x31\xb5\x50\x67\x01\x64\x76\xe9\x22\x76\x2c\x97\x94\xce\x87\xb6\x61\x42\x50\x43\x8a\x01\x95\x2a\x75\xa1\xb4\xe5\xb0\x4e\x40\x8e\x8a\x8e\x12\x5a\x4c\xcc\xb8\x98\xd9\x73\x80\xe8\x67\x8f\x6a\x40\x57\xeb\x87\x2b\x1e\x79\x3f\x5c\xfb\x48\xfd\x40\xa5\xd3\x14\xfb\x58\x18\xfd\x6c\xf0\x23\xd7\x69\x14\xe4\x68\x23\xe3\x6c\x75\xf3\x0a\x22\xde\xc2\x5c\xa4\x7a\x0b\x73\x7a\x5a\x0b\x7e\xe3\x3a\x33\x66\x67\x63\xbb\xca\x0b\xb6\x2a\x9c\xbf\xc9\xe2\x4c\xca\x63\xe2\x02\xff\x35\x5f\x9a\x71\xe6\x8d\x51\x5e\xc4\x05\x96\x96\x7f\xb2\x56\x39\x40\x7a\x8f\x00\x3a\xac\x4b\x07\x72\x6d\x24\xb3\xba\xa9\x96\x8b\x67\x26\x80\x93\xc6\xa5\x69\x3f\x32\xdb\x5a\x00\xe8\xb0\x2e\x2d\x23\xe3\xed\xf9\xc8\xa2\xc6\x2d\x59\x66\x64\x4c\x3c\xde\x30\x30\xb6\xdb\xb5\x81\xb1\x1e\x2d\x03\xe3\xed\xc5\x92\x15\xcd\xa3\xa2\x7d\xf7\xe3\x34\x7a\x3b\x3d\x4f\x26\x03\x77\x16\x85\x3a\x4f\xa5\xd1\x64\x69\x51\x67\xb8\x98\x25\x04\x80\xd2\x24\x40\x6f\x72\x2a\xad\x26\x00\x8c\x23\xbd\x4e\xcb\xec\xcc\x27\x8e\xf8\x3c\x04\x66\x95\x5b\x36\xa3\x49\x9b\x3b\xb3\xea\xa3\x66\x60\xf0\x1c\x85\x39\xc2\x66\x13\x51\xea\x00\x28\x47\xde\x3c\xa1\xd3\x85\x13\x2a\x99\x80\x22\x1b\x64\x13\xeb\x7b\xa9\xcd\x83\x6d\x96\xeb\xd0\x69\x38\xe4\x8e\x25\x59\xaa\x6f\x0c\xd5\x9b\x6e\xac\x70\x68\x28\x08\x79\x66\x90\xff\xda\xc5\x42\x7a\xdf\x7c\x6e\xc4\x09\xb3\x0c\xb8\xa4\x17\x91\x00\x75\xa8\x16\x66\x09\x7a\x86\x90\xc7\xc5\x36\x8d\xab\x33\x42\x78\x98\x45\xcd\xd1\x90\x69\x5b\x07\x3a\xd4\xd7\x77\x2b\x9a\xe3\x2e\xc2\x63\xc9\x42\x25\x67\x14\x8c\xe0\x08\x8e\x61\x1f\x5e\xc1\x21\xbc\x81\x53\x38\x80\x27\xf0\x12\x9e\xc2\x5b\xb8\x0f\xaf\xe1\x1d\xfc\x04\x77\xe1\x31\x3c\x87\x9f\xe1\x11\xdc\x83\x17\xf0\x10\xee\xc0\x33\x78\x50\x85\x11\x7d\xfb\x98\x32\x19\x7d\x7c\xca\x64\xf4\xc3\x66\x32\x42\xde\xf9\xe1\xc7\x9f\x2f\x3f\xec\xff\xe6\x23\x8f\x5b\x14\xd1\x5f\x52\x23\xa0\x16\x3a\x93\x38\x72\x36\x94\x6f\x98\x98\x8b\x1a\x59\xbc\xf7\xdd\x9c\x91\x73\x01\xc6\x39\x70\x45\x64\x2d\x00\x03\x7b\x71\x62\x2f\x2e\xec\xc5\xb1\xbd\x38\xb3\x15\x43\xe9\xa6\x42\xa7\xcc\xc2\x73\x94\x00\x4e\x56\x69\x1c\x2e\xdb\x38\xc9\xc2\x20\x21\x5f\x44\xf6\x21\x8e\xd4\x62\x00\xc7\x9c\x0d\xe0\x39\x90\x22\x2f\xcb\x5d\x67\x2f\x2e\xc6\x49\x30\xe5\xb2\x07\x26\x3b\x84\x7d\xfd\xc3\x2b\x3b\xf8\xa1\x56\x9c\x4e\x08\x70\x07\xc0\x1b\x7b\xf1\x54\x87\x39\xd0\x7f\x9e\x18\x63\x73\x9d\xa3\xe0\xee\x82\x3c\x12\x17\x17\x87\x0e\x80\x97\x46\xda\xa9\xca\x9d\xaa\x9e\x43\x52\xcd\x1b\xf9\x96\xf3\x0f\xe4\xf8\xc0\x53\x9e\x55\x4a\x14\xb2\x49\xdf\x1a\xa5\xca\x5b\x0f\xf7\x2d\x5f\xf0\x50\xfa\xd7\x46\x55\xf5\x22\xc2\x3b\x13\x22\x17\x23\xd3\xca\x4f\x66\xa5\xba\x01\xbb\x46\x25\x5d\x81\x43\xb2\xcd\x54\x4c\x74\x6c\x56\x4f\xc7\xc8\x81\xe7\x4d\x83\x3c\x9b\x24\xa8\x70\xe0\x67\xa3\xfe\x88\xbe\x50\xac\xc3\x23\xa3\x6e\x97\x47\x5b\xdc\x33\xbf\x51\x76\x03\x5e\x98\x1f\x51\xda\xf4\x80\xb2\x08\xf0\xd0\xfc\x32\x8b\xe2\xfe\x94\x57\xee\x34\xae\x75\xe1\xc0\x33\xa3\x72\x84\x70\xe0\xc0\x03\x56\x5a\x0e\x10\x7e\x26\x86\x20\x1f\x6b\x3d\x4e\x35\x7d\xf2\x95\x91\x12\x5e\xe3\xd4\xff\xe8\x5e\xaa\x69\xb6\xe8\x49\xe8\xe6\x6d\xb3\x6c\xdd\x9a\x70\xd9\x7a\x76\x83\xb6\x80\xf7\x4d\xc0\xea\x79\xec\x26\x6d\xc1\x5f\xdb\xc6\xcd\x8f\x74\xb7\x68\x0b\xfd\xce\x84\xae\xdc\x8a\x6e\xdc\x16\xfa\xa7\xda\xd2\xa8\x17\xab\x9b\xb5\x85\xbf\x5b\x83\xaf\xde\xcd\xee\xa4\x2d\xfc\x63\x13\xbe\x71\xbd\xbb\x61\xdb\x1e\xce\x6b\x3d\x50\x0c\xd1\x8d\xda\x02\xfe\xdc\x78\x6c\x38\x92\xe9\x8e\xda\x76\x71\x64\x76\xa1\xe2\xa9\xee\xb8\x2d\xf8\x3d\x13\xbc\x40\x75\xdd\x7e\x5b\xd0\x17\xb5\x91\xab\xd8\xb2\x7b\xd5\x16\xfe\x61\x6d\xe8\x2a\xc2\xed\x0e\xdb\xc2\xdf\xa9\x8d\x5f\xc5\xd9\xdd\x9b\xb6\xf0\xcf\x9a\x51\x1a\x39\x39\xd3\xb6\xf0\x0f\x4c\xf8\xec\xe5\xe8\x0e\xda\x02\xb6\x5d\x57\xb6\xa7\x27\xbd\x85\x1a\x63\xfb\xa7\x00\x2a\xe5\x00\x5e\xaa\xdc\xe5\xfb\xb9\xdc\xe5\x15\x8b\x16\xb4\x95\x53\xa2\x7a\x3e\x7b\x59\x13\x24\x53\x31\x30\x5c\x91\x9b\xac\xb8\xc6\x4f\x8f\x89\x6b\xdc\x7d\xe2\x1a\x9f\xb8\xc6\x06\xae\xf1\x60\x8f\xf1\x8c\xc7\xbe\x9b\xda\xb9\x9a\xaf\xce\x4a\x36\xb1\x81\x56\x06\x73\x1d\xac\xe4\x72\xfc\x62\xc5\xb9\x8d\xed\xc5\xfd\x07\xb2\x64\x9f\x54\x96\xec\x8a\xd3\xfc\xa2\xf0\x60\xcf\x81\x43\xa3\x4c\x25\x80\x6f\x8c\x3a\x85\x7a\x9d\x1a\x55\x0a\xe9\x39\x30\x21\xaa\x74\xe3\x89\x51\xb9\x33\xc1\xc3\x23\x2e\xc4\xbb\x34\xea\x84\xd3\x6a\xc5\x4b\x8a\x9a\xb7\x71\x1a\x31\x62\xeb\xd6\x52\xc3\x88\x98\x7d\xa3\x46\x7b\xc6\xaf\x8d\x4a\xed\x0d\xe6\x1c\x65\x59\xc2\x2b\x7f\xd7\xed\xd7\xf9\x99\xd6\x59\x83\x87\x26\x5c\xb2\x13\xed\xd9\xa4\x1b\x13\xac\xc6\xcd\xb4\x66\x96\xa6\x26\x78\x95\x9b\x69\xcd\x2b\x0d\x4c\xe8\x2a\x37\xd3\x9a\x57\x3a\xa9\x2d\x8d\xc6\xcd\xb4\xe6\x96\x2e\x4d\xf8\xea\xc1\x6e\xcf\x2c\x9d\x9a\xe0\xab\xbb\xd1\x9e\x53\xba\x35\x81\x57\xd7\xab\x3d\x93\xb4\x6f\x03\xce\xd9\x8c\xd6\x8c\xd2\xb5\x09\x5c\xa7\xd5\x5b\x73\x49\x77\x26\x7c\x9d\x56\x6f\xcd\x26\xf5\x55\x82\xf4\x78\x2e\x41\x1a\x66\x59\x1e\xc5\xa9\x61\x1a\xbe\x1e\x72\xb4\x22\x3d\x6f\x1e\x13\xe9\x39\x7d\x22\x3d\x9f\x48\xcf\x26\x85\x45\x16\x71\x85\xc5\xa0\x15\xf1\xf9\x45\xf4\x17\x92\xaa\x9b\x3c\x90\xaa\xbb\x51\xa9\xba\x90\xd3\x32\xa2\x90\x4e\x1d\x46\x46\xe9\x2e\xc1\x1f\x0e\x1c\x19\xc5\xe7\x68\xc0\x32\xee\x8d\x8d\x0a\x95\x74\xe8\x1b\x75\xca\xcb\x7c\x65\xc2\x9b\xa6\xe1\x45\x4c\xb0\xfb\x50\x52\x51\xa1\x3f\x75\x27\x5f\x80\x8a\x8a\x4c\xb8\x6c\xe6\xed\xe9\xa8\x91\x09\x98\x2f\x5e\x7b\x12\x6a\x6c\x42\x96\xeb\xdf\x9e\x80\xea\x9b\xb0\x35\xea\xaf\x35\x05\x75\x65\x82\x5f\xab\xb4\x79\x58\x5b\x18\x79\x90\xda\x53\x4f\x13\xf5\x99\x1d\xcc\x7d\x66\xa3\x70\xbd\xcf\x6b\xf5\xb4\x5e\x3d\xa6\xa7\x75\xf8\xf4\xb4\xfe\x39\x9e\xd6\x77\x27\x67\xfb\x07\x3f\x1f\xaf\xfa\xd0\xaa\x9f\xa9\x78\xa6\xc1\x68\xe0\xa6\x9d\x00\x48\x38\x76\x9a\x8f\x71\x55\xbe\xd4\x6b\x2c\xfd\x43\xeb\xf2\x1b\xba\x44\xd9\x03\x5f\xe3\x2b\xf5\x35\x9e\xf0\x07\xf1\x4a\x53\x7b\x87\x46\x29\x55\x43\x55\x8f\xb4\x28\x3e\xcd\xe3\x51\x90\x4f\xab\x67\xfa\x4a\xca\x50\xe8\x40\x76\x76\x0f\xa9\x1b\xc2\xb4\x7a\xaf\xaf\xa4\x9e\xb9\x18\xee\xd3\x04\x65\x91\x7c\xb0\xcb\x12\x4e\xfc\xa1\x9b\x7d\x81\xb7\x37\x34\xe1\x72\x96\xae\xf5\xdb\x1b\x99\x80\xf9\x52\xb5\x7f\x7b\x47\x26\x64\xb9\xda\xed\xdf\xde\xb1\x09\xbb\xbe\x61\xed\x5f\xe0\xbe\xd9\x89\xb6\xe7\xed\xdf\xe0\x4c\x7d\x26\x6f\xe6\x3f\x93\x71\x11\x66\x37\x28\x9f\x6e\x85\xc3\x20\x4e\x9f\x58\xd2\x27\x96\xf4\xcf\xf5\x6e\x3e\x80\x25\x55\x1d\xd8\xd6\xc0\x99\xae\x45\x2d\x62\x70\xa6\x5f\x88\x23\xd5\x5c\xf7\x4c\xc6\x54\xe5\x52\x4c\xee\x54\x61\x31\x4c\xfe\x54\x91\x3d\x9b\xec\xe9\x2e\x43\x49\x26\x6b\xca\xf4\xd4\xdf\x80\x2d\xd5\xa6\xff\x05\xb8\xd3\xf5\x4a\xf9\x6b\x2c\xaa\xca\xe7\xad\x9f\x49\x5d\xab\x45\x54\x8d\x47\xe5\x47\xe1\x0b\xf0\xa7\xdc\xea\xe1\x6b\xf2\xa6\x83\x00\xa3\xdb\x60\x3a\x27\x49\xb3\x35\xf1\xb7\xf8\x6b\x7e\xab\x2a\xb5\xe6\x32\x2f\x38\x8f\x00\x19\xe4\xcf\xe4\x0b\x5e\xbd\xd8\x93\xc7\xf4\x62\x87\x4f\x2f\xf6\x0f\xfb\x62\xf3\x87\x99\xbc\xb5\x91\xef\x06\x2c\xa3\x8a\x2e\x83\xb5\xf0\x82\x04\x46\xc2\xb2\x78\x04\x79\x1e\x4c\xe7\x2a\xfe\xbb\xbd\x92\xbc\xb4\x0f\x7b\x34\x27\x42\x09\x5e\x14\x59\x18\x07\x18\x45\xfc\xa9\xd8\xcd\x26\xe4\xbe\xc6\xfc\x05\x93\xed\xa2\x28\x47\x45\x41\xae\x68\x26\x9f\xb1\xd8\x0f\xdd\x42\xd3\x3c\x36\x40\x6b\xff\x34\x64\xb5\xae\xaa\x01\xb5\x7f\x1a\x0a\x15\x13\x46\x73\x31\xe1\x10\x05\x09\x1e\x6e\x85\x43\x14\x5e\x7f\x5d\x3c\xa8\x7a\xed\x47\x28\xcc\xf2\x00\x67\x79\xb1\x2d\x02\xf2\x35\x24\x1e\xa2\x78\xe5\xa1\x8e\x45\x15\x62\xbd\x78\x4c\x88\xf5\xf0\x09\xb1\xfe\xb0\x88\x15\x79\x45\x38\x44\xa3\xa0\x62\x7d\xf8\xef\xd9\x39\x0e\xf0\xa4\xe8\xcc\x82\x24\xc9\x6e\x51\x44\x11\x65\xd1\xe9\x3a\xe3\xa0\x28\x58\x1e\xb0\xdb\x20\x4f\xd9\x5f\x61\x1e\xe3\x38\x0c\x12\xa7\x57\xc2\x8b\xe9\x18\xd5\xbf\x2a\x50\xde\x77\xa0\x23\xf3\x5f\x0e\x31\x1e\x3b\xd0\xc1\x21\xfd\x2f\x26\xd7\x31\xca\xc2\x6b\x82\xc7\x9d\x41\x3e\x0e\x1d\xe8\x04\x49\x1c\x14\x4e\xaf\x2c\x29\xda\xdf\xf1\xdd\x44\x43\xfb\x3a\x77\x54\x2f\x8e\x59\x3a\x2d\x7e\x9f\x81\xeb\x38\x90\x8d\x82\x73\x4a\xf5\x2f\x26\xf6\xe2\xd0\x5e\x1c\xd9\x8b\x47\xf6\xe2\xb1\xbd\xb8\x6f\x2f\xbe\x62\x63\x27\xfb\x4b\x57\x10\xb8\xdd\x1e\x77\x1c\xaa\x3d\x65\xdc\x73\x28\x97\x8c\xdf\x54\x83\x59\x49\x56\x07\x35\x5f\x21\x11\xbb\x65\xcf\xb1\x79\x12\x51\xbb\x91\x87\xbb\x10\x5d\x68\x62\x53\x61\xf7\x75\x21\x39\x3b\x14\x5e\x1f\xec\x55\x66\x5f\x17\x9a\x6f\xce\xbe\x51\xca\x0e\x63\x65\xed\x25\x81\x67\x14\xbd\xdf\x19\xc5\x27\x13\x3c\x9e\xe0\xca\x69\xe8\xc2\xc6\xbe\xee\xda\x2b\xc9\xa0\x8e\x6b\xdd\x44\x8a\xc3\x90\xf1\xc1\x45\x30\x50\xbc\x85\x2e\x2a\x39\x2f\xbd\xcb\x84\xd9\x3a\x32\xea\xf6\xef\xc6\x59\x81\x22\xe9\x2e\x44\x9d\x74\x3e\xc4\x69\xe4\x6a\x71\xa1\xa8\x5f\x8e\x1c\xd5\x1b\x1a\xfc\xc6\xe9\x88\x88\x3a\x0e\xfd\x8a\x82\x22\x18\x4f\x7e\xda\x15\x77\x8b\x5e\xa3\x9e\x17\xa7\x61\x32\x89\x44\x40\x6a\xb2\xbc\xcc\xbf\xe7\xd0\xea\x87\xd3\xfa\xed\xbf\x35\x01\xcb\x9d\x6e\xcf\x14\xee\x9b\xb0\xb9\x69\x53\x0c\x5b\x33\x6f\xd7\x26\x68\x71\xe2\xda\x1b\x65\xdd\xd5\x96\x9a\x1d\xda\xf6\x16\x59\x9f\x4c\xc8\xe2\xdc\xb7\xb7\xc7\xda\xad\xad\x87\x26\xfa\x68\x6d\x8f\x75\xdc\x00\x9f\x1e\x94\xd6\xd6\x58\xe7\xf5\x25\xa7\xf6\x04\xad\x5d\x56\x3e\x37\x0c\x9b\xe1\x80\xee\x15\x6c\xed\x54\x72\x64\xf6\xa0\x22\x92\xf6\x3e\x25\x7b\x26\x78\x89\x8b\xda\xfb\x93\x18\x90\x09\x42\x63\xde\x24\x2b\xb9\x7c\xd0\xcf\x0c\x77\x0f\xdb\x98\xc9\x40\x1e\xe0\x51\x52\x7d\x3b\xcf\xa5\x64\x67\x2e\xd3\x12\xd3\x14\xe2\x71\x96\x6e\x8d\x51\x3e\x8a\x69\xf2\xcf\x2d\x82\x75\xb7\x86\x28\x88\x50\xfe\x10\x46\x66\x09\x41\xcd\x52\xa1\x0d\x2a\x1e\x63\xf0\x98\x78\x8c\x93\x27\x1e\xe3\x4f\xc3\x63\xb0\x58\x4a\x97\xfe\x8c\x06\x74\x9d\xe5\xe8\x8f\x49\x9c\xa3\x88\x7c\x06\xdf\xd3\x0b\x64\xe7\x21\xf6\xef\x82\x90\x5c\x95\xd3\x1c\xf5\xe3\x3b\x07\x3a\xe7\x93\x3e\xfb\xe3\x0c\x0d\xd0\x1d\xab\x29\xc8\x75\xea\xd1\xc8\xdd\xbc\xd7\x4b\xca\x3f\x9c\xf2\x68\x07\xa9\x5d\x17\x53\x2f\x4e\xec\xc5\x85\xbd\x38\xb6\x17\x67\x6a\x31\xe1\x30\xea\xa1\x04\x3c\xcf\xbb\xf4\xaa\x69\x7b\xda\xac\x09\xf7\x61\xd0\xe5\x0b\xda\x47\x0f\x24\xd7\x07\x1a\xb9\x2e\xd4\x37\x03\x49\xb1\xd2\xa5\x1f\x1b\xc5\x62\x27\xfa\x46\xb9\xd8\x98\x2b\xa3\x9c\xef\xd3\xb0\x0e\x86\x6e\x9b\x74\x53\x11\x15\x74\x52\xd2\x45\x85\x12\xbc\xd5\xcc\xab\xd0\x33\xcd\xeb\x41\xa3\x13\xb9\xc8\x7f\xad\x25\x13\xe9\xa2\x1e\xa1\x81\x47\xfe\x89\x1b\x7d\x09\xcb\x87\xb1\x09\x98\x2f\x5f\x7b\xb9\x5d\xdf\x84\x2c\x76\xa0\x3d\xe1\x7e\x65\x82\x16\x9b\xd8\x9e\x6e\x1f\x9a\xa0\xf9\x39\x68\xaf\xcc\xb9\xb1\xac\x07\x3b\x4a\xed\xf5\x39\x53\x13\x36\x3f\x8d\xed\x39\x02\x03\x6e\x75\x78\x19\x53\xb0\x88\x9e\x69\xfa\x18\xc0\x48\x25\x68\x22\x95\xa0\x39\x7d\x18\x41\xf3\xbd\xa9\xa6\xea\x14\xcf\x46\xdd\x62\xe3\x31\xd0\x3b\x83\x27\x7a\xe7\x4f\x46\xef\x9c\xf8\xb3\xd3\x00\x0f\xed\xa4\x0d\xa9\x91\x64\x0d\xf9\x21\x69\x9d\x00\x0f\x19\xb6\xec\x95\x90\x79\xa1\x59\x64\xb2\x3f\xef\x5f\x38\xd0\x79\xbf\xbf\xb3\x47\x3e\x39\x39\x27\xbf\x4e\x3f\x92\xff\xee\xed\x1f\xee\x5f\xec\x3b\xd0\xd9\x3d\x39\x3e\xde\xdf\x25\x45\x27\xa7\x34\x03\xb0\x03\x9d\x8b\xb3\x9d\x5d\x52\x77\xba\x73\xb1\xfb\x5e\x27\x9a\x4e\x28\xd1\x74\x69\xea\xda\x74\xea\x68\x35\x59\x6c\xea\x09\x44\xb0\xc3\x25\x98\x0b\xf9\xa8\x8a\x80\x32\x65\x9e\x0d\x94\xd4\x89\x27\xd6\x78\x19\x3a\xaa\xb9\xf5\x43\xa9\xa8\xa9\x34\x77\x91\x5b\x28\x48\x29\xb5\x4a\x6c\xf5\xd8\x52\xc7\xdf\xc6\xbe\x51\xf5\x9e\x73\x96\x57\x46\x39\x3f\x13\x15\x51\xa5\xc2\x92\x14\x15\x25\x9d\xc4\x64\x2b\xc2\xa9\x69\x01\x24\xd9\x24\x16\x5c\xcb\x4a\x2c\xc9\xa7\x81\xf1\xf6\x56\x93\x5e\x87\xf1\x8a\x05\xfa\xfa\xa8\x9d\xbe\x0d\xbc\x20\x4b\xd6\x60\xbd\x32\xb0\xbd\xd2\xeb\x31\x5f\x31\x40\xcb\x03\xd0\x9e\xe2\xb9\xb1\x2d\xca\x3a\x08\x1e\x0b\xd8\x07\x92\x3b\xf2\xd3\x79\xc4\xce\xe5\xca\xc4\xce\xf7\x46\xe7\x3c\x99\xe0\x3c\x51\x35\x8f\x82\xaa\x89\xfc\xd9\x0e\x5d\x9c\x8e\x6e\x51\xe3\xd0\xf7\xc4\x81\x26\xa5\xc2\x8b\x9d\x08\xa5\x53\x9d\xe2\x88\x28\xc5\x31\x6a\xa0\x38\x2c\x06\x3b\x91\xc7\x7a\xf6\xd4\x9a\xca\xe2\x47\xdc\xc6\x79\x74\x86\xb3\x06\x8b\x1f\x96\xb6\xbf\x66\xe1\xf3\xfe\xe2\xe2\x74\xbe\x71\x0f\xff\xf0\x0b\x18\xf3\xb0\xbe\xd7\x6c\xc7\x33\x5a\x0e\xa9\x2e\x8e\xe0\xbb\x2c\xde\x5c\xd5\x3c\x67\x21\xab\xb8\x7c\xdc\x5f\xf8\x16\x7e\x84\xef\xe1\x0b\xf8\x01\xfe\x01\xdf\xc1\xdf\xe0\x3f\xe1\xaf\xf0\x67\xf8\x0b\xfc\x07\xfc\x77\x85\x9a\xff\xf5\x98\x50\x33\x42\x4f\xb8\xf9\x07\xc6\xcd\xeb\x09\xef\x84\x11\x47\xbf\xdf\x3a\xf8\xef\x5f\x56\x8a\xfe\xfb\x97\x95\xc2\xff\x8a\xbc\x25\x4d\x01\x80\x17\x7c\x33\x7a\xc0\x37\xe3\x07\x7c\xd3\xb7\x07\x1a\xb0\x06\x15\xb6\x81\x62\xe8\xd3\x29\xb9\xdd\x50\xae\x5a\x13\xc9\x23\x6b\xdf\xa6\xa9\xbd\x78\xb0\x92\x0f\xe6\x89\x7d\xfc\x97\x5a\x31\xcd\x8d\x00\xe0\xa9\xad\xf0\xd6\x0e\x60\xdf\x5e\x7c\xad\x7b\xbf\xdc\xa9\x3f\x1b\x8c\x7d\x3f\x2d\x2f\x95\x70\x00\xdc\xad\x87\x5a\x46\x38\x70\x00\x3c\x7e\x20\x05\xf1\x2f\xd5\xd1\x46\xd8\x16\xfd\x4b\x09\xe8\xf5\xd9\x28\x53\xbd\x43\x8e\xcc\x3a\x35\x08\xd2\x9e\x51\x79\x9e\x4d\x72\x61\xba\x71\x51\xff\x10\xc7\x29\x0d\xa6\xcf\x1a\x1c\xda\x3f\x3e\xaf\xa2\x10\xdb\x3e\x3d\xaf\xe2\x10\xeb\x1f\x2a\x3e\x27\x07\xcd\xdf\x2b\xad\xde\x1a\xad\x4e\x73\x14\xa2\x08\xa5\x21\x72\xe0\x47\x6b\x17\x8c\x95\x7c\x6f\xd4\x09\xfa\xea\x85\x51\x7e\x88\x06\x41\x38\x25\xeb\xfb\xc1\x5a\xe3\xc0\x3f\xcc\x5e\x64\x00\x83\x77\x46\x0d\x0b\x52\x14\xed\x60\x07\xfe\x66\x54\xb1\xf4\x1e\xb4\xea\x9f\xd6\xaf\x78\xe8\xa1\x5f\x8d\x4a\x2d\x2e\xd1\xcf\x66\x25\x75\x55\xf9\xc5\x28\x3d\x43\x05\x5d\x87\xc2\x81\xff\x30\x17\x4f\x9e\xe0\xc2\x81\xff\x56\x64\x41\x07\xc5\x51\x90\x06\x03\x14\xbd\x9d\xee\x9e\xed\x55\x12\x21\xf9\x4c\x1a\xd9\x87\xa9\xf1\x18\xe9\x9e\xa5\x88\xa7\xf2\x21\xb7\x8b\x20\xee\x11\x5c\x43\x8e\x7e\x9e\x06\xc9\x16\x1b\x08\xcd\x13\xbe\xb9\xe9\x5c\x4f\xae\x50\x9e\x22\x42\xce\xf9\xbe\x8f\x09\x19\x7c\xee\x23\xe4\x1e\xd7\x7d\xb5\x5a\x13\xc1\x9f\x6b\x80\xa9\x29\x51\x6b\x1a\xf8\xa8\x06\x77\xbd\xc1\x38\xf6\xea\xf0\xd7\x1b\xcf\xec\xa2\xd6\x81\x8a\x0e\xda\x0b\x8d\x0e\x6d\x13\xd0\x51\x4a\x7b\x01\xd2\x4e\xd3\x24\xce\xd7\x61\x47\x77\x36\x77\x0a\xe7\xeb\xb0\xa7\x3b\x68\x98\x80\xea\x92\xd7\xda\xa8\xee\xed\xbc\x79\xa8\x3d\xb5\x36\xb0\xfb\x58\xeb\x49\x45\xd3\xed\xed\xec\xde\x37\x2c\x17\x97\x1a\xb6\x0e\x0d\xfd\xa2\x06\x5f\xb2\xe3\x43\xd8\xda\xc8\xee\x43\x0d\x7a\xf5\xe8\xb4\x37\xb3\xfb\xa3\x01\xfa\x3a\x22\x37\xbf\xab\xaf\x7b\x15\xbd\xe7\xa4\x2d\xf4\xdf\x6a\xd0\x95\x07\xb4\x7b\xd9\x16\xfc\x3f\x6b\xe0\x95\x47\xb8\x7b\xda\x16\xfc\xaf\x0d\xa3\x17\x31\x04\x6f\xdb\x76\xf0\x73\xad\x03\x3d\x48\xe1\x7e\xdb\x0e\x7e\xa9\x77\xc0\x7c\x5f\xaf\xdb\x42\xfe\x47\x0d\xb2\x42\x94\x74\xef\xda\x82\xff\x77\x1d\xdd\xa8\x84\x4d\xf7\x53\xdb\x0e\x6a\xb4\x83\x46\x1e\x39\xb0\xbb\xbb\x58\x4f\x31\x0f\x00\x80\xc7\xaa\xb6\xe2\x58\x15\xac\x61\x34\x57\xb2\x76\x7d\xb3\x58\xa4\x66\xe6\x9f\x8d\x8b\x77\x59\x42\x15\x4e\xdf\x46\x8a\x56\xc9\xc8\x76\x1e\x93\x8c\xec\xec\x49\x44\xf6\x24\x22\x6b\x10\x91\x7d\x40\x53\x26\x23\x3b\x68\x27\x22\x93\x02\x8b\x79\xd1\x3b\x16\x84\x2d\x5f\x32\x40\xb9\xec\x6a\x5e\x80\x72\xab\x5c\xa8\x6f\x07\x7f\x65\x87\xb3\x54\x42\x2b\xbb\x70\xa9\x41\x32\x53\x77\x55\x93\x18\xcd\xe6\xa9\x46\xf6\xe6\xe1\x8e\x6a\x3b\xb6\x5c\x57\xa2\x90\x80\x96\x3e\x6a\x3b\x35\x81\xc0\xbe\x51\xc3\x62\x49\x5c\x1b\xa5\x2a\xc7\x78\x67\xd4\x29\x51\x33\x3e\x19\x55\x0a\xc5\xbe\x6b\x54\x1d\x66\xe1\x35\x27\x0b\x8e\x8d\xaa\x77\x09\xf5\x45\x39\x37\x8a\xb9\xf1\xe2\x67\xa3\x58\x23\x61\x8e\x8c\x4a\x8d\xfc\xd8\x33\x17\x01\x71\xcd\xf9\x85\x51\xa1\xbc\xfc\x87\x4d\xfe\x6d\x2c\x41\xa5\xd8\xd4\x37\x4e\x9f\x6d\x6e\xc7\xb9\x46\x53\xe6\xd8\x26\xea\xe6\xe5\xac\xfa\x80\xa6\xf7\xf7\x8e\xc3\xfc\xd9\xce\x6c\xf9\xaa\x5a\x8b\x15\x6e\x4d\xb8\xf4\x40\xb4\x17\x2b\xec\x9b\x70\x15\x3a\xbb\xb5\x4c\xe1\xda\x04\xce\x43\x9c\xb4\x96\x25\xdc\x99\x80\x35\x59\x48\x6b\x51\xc2\x27\x13\xbc\x1a\x52\xa6\xb5\x0c\x61\xd7\x84\xae\x72\xc4\xad\x65\x08\xc7\x26\x74\xe5\x8a\xb6\x17\x1f\x9c\x9b\xd0\xf9\x2d\x6f\x2f\x33\xf8\x6c\x42\x16\x56\xce\x63\xd8\x9a\x8b\x3f\x32\x61\xeb\x0c\x53\x6b\x2e\x7e\xcf\x84\xaf\xf3\x4b\xad\x7d\xf1\x2e\x6a\x97\x54\xe0\xbc\xf6\x8e\x78\x87\x26\x6c\x95\x61\x6a\x2d\x23\x30\x91\xd6\xfa\x5c\xf1\x0c\xc8\x15\xa7\xb1\xb2\x27\x9e\xf2\xa4\x37\x3b\xe2\x1d\xcc\xe5\x8d\x52\xe6\xd6\xb9\x16\x83\x83\x2f\x9b\x49\xb8\xb2\x28\xa8\x78\xa3\x3f\x1e\x13\x6f\xf4\xee\x89\x37\x7a\xe2\x8d\x16\x98\x0f\xfc\xf6\xfd\x64\x14\x36\x39\x27\xc9\x95\x84\xf6\xe2\x65\x38\x27\x43\x8f\x3f\x3f\xdf\x6f\x03\x67\xc3\x79\xa5\x61\x50\x1c\x05\x29\xb5\x68\x67\x0e\xe4\x5b\x71\x5a\xe0\x20\xa5\xb9\xe3\x6f\xec\x7a\x69\x2d\x54\x12\xe1\xa3\x0c\x0b\xf8\x7e\x9c\x60\x94\xcb\xa8\x1e\x85\x03\x11\x33\x03\x48\x51\x88\xb7\xc6\x79\x76\x37\x75\x9e\xfb\x64\xb3\x59\x03\x8f\xa0\xf7\x3a\xaf\xb5\x14\x1c\xbf\x0e\xc7\x64\xcb\x24\x1c\x1a\x00\x82\x43\xd1\x3e\x3c\xd8\x23\x4c\x9b\xc9\xcc\xb1\xe6\xbb\x22\xa2\x0c\x0f\x20\x51\x9c\xca\xb0\x33\xec\xf7\xaf\x3c\xf8\x0c\x80\xa7\x35\x10\xc7\x59\x84\x58\x2b\xaf\xdb\xa3\x96\x04\x8b\x5a\xec\x2f\x6c\x71\xfd\x40\xee\xf2\x0f\x95\xbb\x14\xcc\xdf\x1f\x8a\x96\xff\x93\x51\xa6\x92\xd4\xbb\x46\x9d\x42\xb1\x1e\x1b\x55\x3c\x80\x57\xc5\xf8\xfd\xa1\xc5\x2e\xf9\x6c\x94\x56\xec\xc6\x91\x51\xa3\xd1\x68\x7b\x46\xa5\x46\x60\x5d\x18\x95\x8c\xcb\x38\x34\x3f\xa1\xa5\x3b\x46\xe9\x45\x30\x18\xa0\x48\x89\x3a\x76\x66\x34\x50\xc8\xa1\x03\x73\xec\xf2\x60\xbe\x35\xc7\xce\x8f\xda\xc7\xda\x18\x8a\xa1\x38\x74\xfc\x9e\x15\x95\xc5\x80\x5c\x5d\x72\xb4\xeb\xcd\x5e\x58\x16\x54\x74\xf4\x41\x61\x70\x59\xc4\x10\x17\xcc\x8a\xdb\x18\x87\x43\xf7\xf9\x4b\x30\x0b\x83\x02\x49\xb7\x53\x4f\x3f\xda\x1d\x1e\xea\x45\x06\x4f\xda\xb0\xb5\xe6\xe7\x5c\x34\x16\x31\x97\xac\x6d\xf9\x1d\x11\x6d\x45\xa4\xa6\x0d\x7e\x52\x45\x39\x1a\x8d\xf1\xd4\x29\xe9\xa0\xf5\x21\x19\xfc\xb9\x72\x07\xf8\x65\xa6\x98\x40\x8c\x97\xdd\x65\x3a\x6b\xe0\x25\x28\x1d\xe0\xa1\x02\x93\x0f\x66\x29\x90\x62\xa4\xf3\x21\xf2\xa5\x58\x0a\xa2\x58\x27\x1b\xc4\x12\xde\xf9\xef\xdc\xeb\xba\xb4\xa0\xb5\xe3\xef\x27\x13\x2e\xd5\xf8\xb5\x16\x42\xec\x9a\x60\xd7\x9b\xdb\xfa\xd8\x04\xbf\xd6\x7c\x6d\xe7\x26\x74\x89\xa9\xda\xcb\x23\x3e\x9b\xb0\x79\x9c\x97\xd6\x92\x88\x23\x13\xb0\x22\x9e\x69\x2d\x88\xd8\x33\x81\xeb\x6c\x71\x6b\x51\xc4\x85\x09\x5f\x67\x8b\x5b\x0b\x23\x0e\x4d\xf8\x5c\xbc\xd4\x5a\x16\xb1\x53\x1b\x38\x03\xdc\xda\x5c\xe1\xcc\x04\x5c\x7b\x7e\xda\x9b\x2c\x1c\x98\x7d\xa8\x0c\x7d\x6b\x51\xc7\xdb\xda\x81\x94\x8f\x60\x7b\x39\xc7\xc7\xda\x81\xe4\xcf\x5b\x7b\x31\xc7\xfb\xfa\x96\xda\x9e\xe2\xf6\x12\x8f\x17\x35\x24\x66\x7f\xcd\xdb\xdb\x48\x7c\xb0\x21\x1d\xb9\x62\xad\x8d\x24\xcc\x7d\x16\x71\xc8\x2e\x17\x8b\x57\x6c\x1f\x02\x78\xad\x0a\x57\xac\x1b\x5d\x11\xdb\xdd\xd3\x15\x7b\x31\x00\x2c\xd3\x9b\xa4\xe4\xbb\xb7\x0f\xea\x4c\x7c\xbf\x4c\x5f\x82\x4b\xa0\xc6\x13\x0f\xe8\xab\xe2\x32\xb4\xbe\xae\x55\x11\xd5\x6f\xf3\x45\x54\x42\x7e\xfd\x05\x13\x8f\x57\x22\xa5\xdb\xc7\x24\x52\xda\x7f\x12\x29\xfd\xc0\x22\xa5\xe3\xf3\xd3\x9d\xdd\x7d\x2e\x54\x6a\x99\x02\x92\x26\xda\xd0\x40\x2a\xaa\x21\x2a\x7a\xba\xfe\xf6\x19\x38\x2a\xa9\xd1\xd2\x6e\x2e\x35\x2f\x97\x06\xa9\xd1\x32\xea\xfe\xfa\xa7\xee\x8c\x65\x2c\xe2\x19\x8c\x8a\x4e\xb7\x07\xcf\xb2\x04\x29\xbf\x4b\x40\x3d\x5a\x1e\x26\xda\xb8\x55\x45\x1b\x22\x94\xc1\xad\x16\x47\xaa\x6f\x94\xaa\x8c\xcb\x95\x51\xa7\x70\x1d\x43\x0b\x30\x8e\x47\x6f\x8c\xaa\x8a\x30\x9f\x9a\x7d\xa9\x76\xd4\x03\xa3\x52\x21\xce\x4e\x6a\xdf\x25\x88\x1b\x0d\x5e\x1a\x55\x3b\xbb\x87\x85\xb4\x11\x28\x4b\x38\xf6\xf7\xdd\xd1\x17\x48\x3c\xd2\x37\xe1\xae\x2b\x32\xd5\x95\x09\x78\xbd\x19\x47\x86\x26\xf8\xb5\x66\x1c\xb9\xb1\xad\xca\xda\x32\x8e\x4c\x4d\xe8\x0a\xcb\xd7\x9a\x51\x1d\xd4\xd6\x5d\x33\xf2\x6f\xcd\xaf\x9e\x98\xf0\x55\xe6\xa3\x35\xc3\x7a\x59\x1f\xbd\xbc\x22\xed\xd9\xd5\x53\x13\x3a\xbb\x65\xed\xf9\xd4\x91\x4a\xa5\x5d\xcf\xa5\xd2\xb2\x38\x0a\xb7\xc6\x79\x76\x13\xd7\xc2\x77\xae\x93\x58\xab\x08\xb5\xcb\xc7\x44\xa8\x9d\x3e\x11\x6a\x3f\x30\xa1\xb6\x0e\xda\x8c\x90\x60\xb7\xdf\x01\x09\xb6\x9a\x52\xd0\x6e\x4e\xf9\xf0\xe8\x4f\x97\x2a\x41\x24\xe2\x3e\x5d\x6a\x04\xd1\xd8\x28\xb5\x25\xe7\xbe\xac\x53\x3d\x57\x46\x95\x85\x56\x12\x55\xcc\xd6\xe3\xc6\x28\xdd\x99\xe0\xe1\xc7\xb3\xc3\x8a\x4a\x92\x03\x88\x8b\x71\x12\x4c\xd9\xe8\x06\x46\x25\x13\xec\x9d\x48\x7a\x67\xe4\x9f\xea\xe1\x78\xd6\x44\xef\x8c\x4d\xb8\xeb\xa2\x77\xfa\x26\xe0\xf5\xd2\x3b\x57\xb6\x71\x0b\x8a\xa4\x35\xbd\x33\x34\xa1\xaf\x55\x2e\x7f\x63\x42\xe7\x46\x42\xad\x69\x9d\xa9\x09\x58\x9e\xbd\xf6\x74\xce\xa0\xb6\x9f\xea\xf1\x5d\x43\x64\x4e\x13\x3e\x17\x6d\xb7\x26\x72\xb4\xf8\x54\xb7\x73\x69\x91\xb1\xb2\xcb\xd6\xa0\x54\x16\xc3\x26\x6a\xc8\xd4\xca\x84\x69\xa3\xfe\xda\x3f\x06\xd2\xe4\xf6\x89\x34\xf9\x81\x49\x93\xd3\x9d\xb3\x8b\x83\x8b\x83\x93\xe3\xb5\x8a\x91\x74\xa8\x0a\x56\xa5\x64\xcc\xbe\x0c\x14\x2e\x8d\xcd\x6b\xb1\xc2\x2d\x35\x49\x63\x4d\xd1\x58\x13\x37\xd6\x64\x8d\x35\x93\xc6\x9a\xd0\xac\xd1\x8d\x9b\x94\x9a\x87\x8b\x7c\x4e\x6d\x22\x9f\x53\xab\xc8\xe7\xd4\x26\x86\xb9\xaa\x55\x4a\x46\x72\x68\x56\x29\x2f\xf5\x8d\xa5\x27\xfe\xcc\x4e\x8d\x2a\xe5\x8d\x1c\x18\x55\x15\x43\x7f\x62\xd4\x30\x2c\x7f\xa9\xc8\x75\x6e\x6d\x72\x9d\x35\x90\x23\xb7\x56\xb9\xce\x1a\x08\x91\xdb\x79\xf2\x85\x35\x90\x22\x35\xf8\x95\x04\x60\x0d\xa4\x88\x09\x5d\xa5\xd2\xd6\x40\x90\x58\x56\x5d\x50\x69\x6b\x20\x49\x6e\x9b\x65\x5e\x6b\x20\x48\x6e\x1b\xa5\x52\xad\x89\x92\x4b\x13\x38\xa7\x76\xd6\x2b\x79\xd9\x9f\x4f\xed\x34\xc4\xe0\x7c\xa8\xd8\xa5\xa2\x63\xa2\xc7\x44\xc7\x8c\x9e\xe8\x98\x1f\x96\x8e\x51\x92\xd7\x8e\xbf\x88\x8c\xa4\xca\xf1\xf7\xd0\x68\x96\x91\xa1\x16\xa9\xe2\x59\x46\xd2\xe8\x92\xc7\xbd\xcd\x8c\x8a\x9d\x30\xa4\xd6\x5c\x13\xb3\x9c\x45\xfa\x0c\x95\x08\x98\x23\x3d\x4c\x65\xd5\x59\x7b\x09\x42\x66\x02\x97\xe3\x6d\xff\x6a\x4f\x4c\xd8\x62\xca\xed\xdf\xed\xb0\x06\x9a\xad\xda\x9a\x63\x77\x8e\x4b\x00\x36\x9a\x51\x30\xd5\x12\x7e\x59\x13\x85\xa7\x84\xb8\x4f\xc8\xfa\x51\x20\xeb\x46\x26\x13\x79\x47\x3b\xc7\x3b\x3f\xef\x1f\xed\x1f\x5f\x5c\x1e\xec\x55\x4c\xa7\x5e\xec\xbc\xe4\xff\xdb\xb2\xfc\x87\xff\xef\x95\xb3\xb4\x4b\xcd\xce\xf7\x23\x54\x6f\x32\x60\x78\xb8\xb5\xc3\xa2\xc6\x2d\x7c\x75\x8c\x28\x07\xcb\xf9\xec\x2c\x1a\x8f\x35\xd0\x81\xa5\xb1\x9b\xa2\xdb\x67\x7b\x01\x46\xc0\x1b\x20\x4c\xa8\x75\x17\x30\xfd\xb5\xe1\x64\x42\x33\xef\x4e\x5b\x26\xd8\xa5\xbc\xe9\xc0\x48\x31\x7b\xb0\x57\x71\xb9\x17\x16\x8e\xfa\xd2\xcc\x70\x5b\xb1\x44\x66\xaa\x5e\x85\x9f\x31\x93\xf5\x32\xf6\xd5\x4c\xd6\xab\xf1\x9e\x66\xc6\xde\xb3\x49\x62\xcb\xd8\x5b\xb1\x35\x66\xce\x5e\xcd\x38\xda\xcc\xd9\xab\x59\x36\x9b\x59\x7b\xab\xf9\x16\xf5\xe4\xbd\x8c\xd5\x31\xb3\xf6\x62\x34\x1a\x27\x01\x46\xf5\x9c\xbd\x6c\x18\x6c\x88\x6a\xda\xde\xb8\xf8\x39\xc9\xae\x82\x84\x85\xfb\x21\x24\x47\x95\xc4\x77\x29\x54\x20\x12\xfd\x1e\xec\x95\x25\x1c\xf8\x87\xee\xf4\x0b\x28\x58\x4e\x4c\xb8\xd4\x31\xa1\x35\x65\x74\x69\x82\x5d\xaf\x7a\xe5\xd4\x04\xbf\x56\xf5\xca\xad\x09\x7d\xad\xea\x95\x7d\xdb\xd8\xd7\x21\xcd\xb8\xae\xad\xf9\x7a\x4d\x49\xee\x4c\xf8\xfc\xc6\xb6\x97\x65\x7c\x32\x21\xaf\x53\x96\xb1\x6b\x02\xd7\x9d\x2a\x5a\x8b\x34\x8e\x4d\xf8\xba\x53\x45\x6b\xdf\x87\xf3\xe6\xab\x54\xac\xc3\x05\xe2\xb3\x09\x9f\xcb\x7a\xd6\x10\xe4\xc1\x00\x5c\xe1\xd0\x75\x44\x78\xb0\xee\x2a\x3f\x34\xad\x1d\x1f\x0c\xe0\x75\x5c\xce\x5c\x20\x16\x19\x8e\x2f\x02\x02\xe0\x54\xb5\x1e\x9f\x2e\x9f\x69\x98\x79\xdb\xae\x10\xff\x8d\x7f\x57\xf3\x2a\x6e\x1b\xdd\x60\xa3\x6e\xb5\xfd\x18\x38\xb5\xeb\x27\x4e\xed\xcf\xc7\xa9\x2d\xab\x0e\xcc\x22\x04\xab\xb4\xf3\x94\xdd\xba\xfb\x7e\x23\x18\xac\x23\xf6\x1b\xe1\x86\x74\x66\x23\x5d\x92\xd9\xd8\x57\x99\x0d\xa1\xe2\xdb\x57\x98\x8d\x2b\xa3\x4c\xa5\x04\x87\x46\x9d\xc5\x9c\x7b\xbf\xce\x6c\x4c\x8d\x2a\xbe\x55\xba\xa5\x92\x51\xa9\xb2\x3d\xfb\x8a\xbf\x36\xfb\xe8\xd2\xfc\x48\xd2\x1f\xa7\x76\x70\xa7\x0c\xfd\xde\x4a\x19\x66\xdf\xbf\x76\xc7\x5f\x40\x31\x78\x65\xc2\x5d\x8f\xe3\xf0\xd0\x04\xbb\x5e\xc7\xe1\x1b\x13\xfc\x9a\x0d\xb2\x0d\xe8\x2a\x7d\xbe\x06\x8b\x6c\x03\xba\x76\xbc\xd6\x61\x91\x6d\x87\x4f\x37\x76\x0d\x16\xd9\xe6\xca\xcb\x43\xbe\x0e\x83\x6c\x73\xe8\x15\x9d\xde\x9a\x8e\xbe\x6d\x58\x17\x7e\xd5\xda\x13\xd2\x63\x95\xba\xba\x9b\x4b\x5d\xe5\x59\xf2\x85\x3d\xf3\x9a\xc2\x42\x6d\xd4\x65\xc9\x8f\x81\x9c\xda\x79\x22\xa7\x9e\xc8\xa9\x05\x12\xeb\xb3\x1f\x59\x62\xbd\x8c\x7f\x5e\x43\x9b\x05\xce\x7a\xb4\xcd\x32\x22\xec\xaa\x78\xa9\x0c\x51\xf6\x28\xbd\x73\xa2\xf3\x3e\x4c\x18\x7d\x68\x13\x46\x1f\x5a\x84\xd1\x87\x73\x84\xd1\x87\xcd\xc2\xe8\xc3\x66\x61\xf4\xa1\x55\x18\x7d\x38\x4f\x18\x2d\xa1\x65\x49\x1c\xc6\xaa\x3c\xfa\xd0\xa0\x27\x23\x94\x92\xfe\x48\x93\x4f\x66\x7f\x59\xa4\xd5\xef\x9a\x20\xe4\xab\x79\x6c\xd4\x68\xa2\xa9\x73\xa3\x52\x93\x2b\x7d\xb6\x7e\xa9\x07\x6e\xaa\xaf\x68\x51\x05\x6e\x12\x95\xef\x83\x62\x28\x23\x36\x51\x41\xf3\xce\x17\x12\x34\xef\x7c\x19\x41\xf3\xce\x97\x15\x34\xef\x7c\x51\x41\xf3\xce\x17\x15\x34\x5b\xc6\xbe\x1e\x41\xb3\xb9\xe6\xeb\x16\x34\x9b\xcb\x22\x6f\xe3\x3a\x64\xcd\x06\x70\xcb\x85\x5e\x87\xd0\xd9\x5c\x7b\x03\x27\xac\x43\xee\x6c\x4e\xa4\x22\xc6\xd7\x20\x74\xde\x99\x27\x34\x5f\x83\xd0\x79\x67\x9e\xd0\x7c\x0d\xb2\x67\xeb\xf8\xf9\xf2\xac\x41\xfa\xdc\x88\x75\xd6\x12\x77\xe7\xc2\x84\xcf\xb0\x74\xfb\xa8\x3b\x9a\x84\xf9\x6c\x2e\x0f\x54\x93\x14\x3f\xb2\x70\xba\xf5\x04\xbd\xf0\x5f\x10\x21\x88\x51\xc5\x63\xa5\xe8\x31\x31\x59\xf9\x53\xa6\xde\x1f\x99\xcb\xda\xcd\x92\x04\xd1\x95\x58\x8b\x04\xdb\x53\xc5\xd8\x1e\x61\xc2\x58\x62\xf6\x00\xf9\x6e\xce\x0d\x4e\x2e\x71\x1e\x84\xd7\x28\x82\x89\x9f\x23\xd7\x0d\x18\x8d\xaf\x51\xf4\x08\xcc\x52\xc4\x69\xc5\x18\xa3\x51\xe1\xc0\x84\x93\x90\xd4\x3a\x81\x96\xf9\x88\x9a\x3c\xec\xf3\x6c\x8f\x2c\x25\x5b\xe1\x02\x06\xe9\x19\xf2\xab\xa6\xf5\x6d\xa7\xc2\x13\xbe\xed\x88\x1c\xb3\x30\xc0\x2e\xf6\x0c\x60\xf7\xf7\xdd\x1e\x28\x01\xec\xf6\x00\x3f\xf1\x5d\xcf\xf3\x52\x74\xfb\xec\x1c\x61\x17\x81\x9e\x08\xf2\xf8\x96\xd9\xbc\x02\xaf\xc8\x72\xec\x82\xb2\x04\x9a\x12\x8e\x4d\xa1\x3d\xe1\x19\x10\x4c\xaa\x6c\x59\x80\x28\x93\x9b\x20\xdf\x6d\x21\xe3\x37\xb8\x4a\x8b\x03\xf2\x32\x11\x80\x1f\x60\xf0\xd4\xc0\x77\x5e\x99\xb1\x7b\x83\x24\x0e\x0a\x19\x02\x58\x04\xec\xa5\x5c\xa4\xd1\x32\xab\x22\x05\x7b\xb3\x83\x3d\x71\x12\x4b\xa7\x6e\xef\xa4\xb5\x95\x51\x20\xd9\x29\xae\x7a\x68\x4c\x3e\x3c\x7f\x88\x17\xc1\xa0\xb0\x24\x87\x31\x9b\xf1\x9c\xbd\x66\xd8\x61\xb3\x59\x45\xff\xd7\xe3\x0b\x9b\x6d\x2b\x6a\xbe\x1e\x69\xd8\x08\x82\xec\xfd\x3f\x28\x08\x87\x1e\xf3\xb4\x45\xfe\x6b\x11\xfd\x99\x85\x29\x65\x71\x94\xcd\x50\xc4\x8b\x40\xd0\x18\xf8\xca\xf7\xd7\x35\x2b\x33\x63\xee\x77\x8d\x0d\x78\xbc\xff\x4f\x8b\x1a\xd4\x53\x21\x1f\x14\x27\x79\x3c\x88\x53\x9a\x0e\xd9\x1e\xd1\xb9\x29\x80\xb3\x25\x86\xdc\x79\x03\x08\x16\x89\xf9\xf3\xdc\xda\xa3\xb9\xb5\x7b\x73\x6a\xeb\xf1\xe5\x2e\x96\x68\x5d\x45\x88\x3b\x5c\xa2\xb5\x32\xc9\x9d\x07\x4a\x5a\x24\x9a\xa6\x1c\xbb\x08\x9b\x2c\x4b\x55\xc6\xf8\xc0\xac\xe4\x42\xf6\xb7\x66\x39\x0b\x9b\xfa\xd1\x2c\x16\x97\x52\x46\x4a\x96\x35\x22\xdc\xe1\x8b\xda\x27\x92\x3b\xf9\x60\x56\x31\x83\x93\x3f\xcc\x62\x25\x52\xcd\xbb\xda\xb8\x28\x2b\xfb\x9b\x59\x7c\xb0\x57\x25\x55\x96\x85\x12\xa1\xfc\x5a\x1b\x53\x16\x5e\x23\x7c\x1a\xe0\x61\x95\x51\x59\x56\x52\xbc\x21\x53\x2a\xcb\x62\x16\x79\xf4\x1f\xb6\x01\x71\xb9\xc0\xbf\x6b\x8b\x5b\x71\xf5\xff\x6a\x58\x49\x19\x0a\x1d\xd9\x76\x40\xd4\x62\xa4\xd8\x17\x36\x3f\xb6\xb6\x0c\xcd\xea\x55\x17\x99\x9a\x29\xf6\x98\x9f\xab\x19\x78\xa3\x60\x5c\xb5\xc1\x0d\x6f\x2f\xcf\x1c\x4d\x4f\x91\xb4\x72\xec\x1a\xa1\xe1\xc9\x46\x17\xc3\xad\x41\x80\xd1\x6d\x40\x7e\xc6\xe9\x80\x6c\x8c\x52\x82\x51\x3e\xa2\x59\x69\xd3\x81\x2c\xed\x79\x71\x1a\x26\x93\xc8\x9c\x09\x45\x6a\xbc\x63\x86\x63\x64\xcf\xcf\x17\x74\xbd\x0c\xc8\x23\x54\x0c\x0d\xb0\x2c\xac\xb4\xe8\x6d\x73\xf3\x79\xf7\x81\x03\x5e\x35\x20\x38\x8f\x4f\xbd\x52\x5c\x70\xe3\x9b\x65\xc2\x83\x1b\x9f\x2c\x1f\x25\xdc\x1e\xd1\x7b\xb9\x68\xde\x0b\xc3\x78\x2f\x17\xc2\x7b\x71\xcc\xf2\x25\xe3\x95\x53\x40\xa7\x28\x27\xa8\x32\x18\xa0\xc5\x13\xd4\x17\x6f\x5b\xed\x8b\x15\xfd\xe5\xd5\xcb\x97\x56\xa8\xf3\xe6\xab\xef\xe2\x2a\x50\xe7\x4e\xdf\x38\x51\x4d\x70\x4b\x78\x46\x18\x82\x9d\xba\x1c\xb8\xb5\x54\xf2\xa0\x06\x78\xbd\x3e\xbd\x6f\x6b\xf0\x85\x02\xb9\xb5\x5c\xf2\x63\x0d\x34\x8f\x2a\xde\x5a\x28\xf9\xbe\x06\x59\xbe\xb0\xed\x65\x91\x2f\x6a\xc0\x65\x4c\xe2\xd6\x42\xc8\x0f\xf5\x81\xaf\x51\x0a\xf9\x47\x0d\xfa\x68\x4d\x71\xbf\xdf\xd5\x20\xab\x71\xf1\x5a\x8b\x1f\x7f\xab\x9f\x94\x60\x3d\x92\xc7\x7f\xd6\x20\x53\x3d\x4a\x6b\x89\xe3\xaf\x35\xb8\x55\x34\xfe\xd6\x52\xc7\x9f\xeb\xa7\x44\xa1\xbc\xda\x87\xf8\xfe\xa5\x06\x9f\x11\x6f\xed\x43\x7a\xff\xa3\x06\x99\x47\x9e\x6f\x1d\xcd\xfb\xdf\xd6\x23\x22\x54\x4b\xad\x53\x9e\xff\xab\x8e\x06\x15\xdd\x52\xeb\x94\xe7\x08\x35\x61\x2c\x89\x5b\x5a\x67\x3d\xc7\xf5\x3e\xb4\x80\xea\xad\xb3\x9e\x9b\xd0\x0d\x8a\x9a\xa5\x3f\x5f\x64\xe2\x3d\x17\x02\x80\x3b\xaa\x7d\x77\xed\xea\x16\xe2\x6d\xba\x5b\xb1\x23\xf1\xe5\xc2\x0e\x38\xf7\x4d\x33\xa1\xaf\xd8\x83\x64\xdc\x17\x74\x51\x51\xca\xcb\xa5\x43\x6f\xfe\x7c\x41\x57\x32\xe2\xfd\xf1\x8a\x9d\xc8\x88\xf7\x73\xc1\x9b\x41\xe8\xcf\x57\xec\xc5\x14\x12\x2c\xd1\x59\x15\x85\xfe\xf3\x83\x3a\xab\x64\x0c\x4b\x74\xa6\x04\xf3\x3f\x7a\x50\x6f\xaa\x8c\x62\x5e\x77\x0d\xd4\xb3\x03\xbb\x7b\x2b\xf6\xdb\x04\x69\xc5\x01\x54\xcb\x7c\xd1\x72\x00\x4b\x2e\x78\x13\x4d\xee\xc0\xee\x61\xcb\x11\x34\x6d\xc2\x8e\xaa\xd9\x4b\xd0\x32\xaa\xbd\x75\x69\xf4\x54\x37\x93\x08\x85\x59\x1e\xe0\x2c\x2f\xb6\x73\x34\x4e\x02\x9b\x87\x09\xcc\x99\xf6\xea\xab\x29\xfc\x60\x8a\x60\x8e\x60\x80\x60\x82\x60\x81\x60\x8c\x60\x86\xe0\x44\x51\x04\x86\x8f\x4a\x11\x18\x3d\x29\x02\x9f\x14\x81\x2b\x44\xb6\x63\x82\xc1\x11\xf2\xdd\xc0\x54\xfc\x15\x7e\x84\x5c\x37\xb1\x2b\xfe\x42\x43\xf1\x57\x3c\x2a\xc5\x1f\x15\x8e\x08\xa2\xb7\xa8\xc4\x92\xca\xd7\xca\xe8\x46\xc1\xd8\x45\xfe\x6b\x45\x6b\x03\x40\x6f\xbe\x0e\xb1\xb5\x75\x59\x62\xe8\x10\x47\x4c\x87\x38\x46\xbe\xfb\xf5\x1c\x82\x64\xf1\xc8\x5e\xbc\x7e\x1b\xd3\xaa\xf8\xa6\x21\x5a\xd1\xb4\xa1\x7c\xb0\x84\xca\xf2\xc4\xde\xd5\xa5\xbd\xf8\xd4\x5e\x7c\x4b\x8a\x73\x8f\xec\x13\x05\x0f\xdc\x6e\x0f\xc0\xfd\x25\xba\xbf\xd6\x95\xac\x77\xfa\xcf\x4f\xba\xfe\x16\xb8\x0e\x97\x1a\x6f\xb1\x83\x44\x75\x68\xb6\xae\x8f\x75\x38\xe7\xfa\xcf\xcf\xfa\xcf\x26\x55\xd7\x0a\x9a\xb6\xba\x3e\x8c\xd0\xe9\x26\x98\xaa\xac\x02\x55\x95\x29\xe0\x2c\x0a\x33\x26\xa0\x47\xd1\xaf\x31\x1e\x72\x36\x48\x2f\xfc\x99\xcb\xd3\x6d\x0a\x34\xd2\xc9\x7e\x4a\xae\x56\xe4\xc8\x74\xe4\x3b\xeb\x1d\xf3\xd9\xc2\x55\xa4\xc3\xf6\x4c\xd2\xf4\xa0\xe1\xbb\xaa\x3b\xf5\xbb\x8a\xa2\x7c\xbb\x38\xe3\xad\xfa\xa1\x32\xd2\x8f\x0f\xd4\x18\x86\x9a\xc6\x50\xe8\xf2\x42\x5d\xc9\xf6\xc2\x2c\x56\xe5\xb5\x1f\x6c\xdf\x70\x21\xc6\x1f\x66\x9d\x22\x81\x78\x67\xd6\x31\xb5\xf5\x6f\x66\xb1\xb1\xe2\xff\xb4\xd7\x57\x2b\xf4\xab\xbd\x81\x5c\xfa\x9f\xcd\x7a\x91\x00\x6e\x37\x9b\xa4\xb8\x52\xf7\x55\xdf\xdb\x4e\xa4\x54\xff\xd9\x9b\xf1\xd3\xfc\x6f\xb3\x91\x22\x62\xfc\x97\x59\x57\x89\x4d\xa5\x0a\xb0\x02\xae\xda\x5e\xe2\x5a\xb5\x66\x3a\x99\xd6\xaa\x99\x28\x2c\xaf\x95\x1f\x67\x11\x19\x49\x50\xab\xe0\xc3\x4f\x6a\x15\x7c\xfa\xbb\x0c\x53\x11\x42\xda\x68\x50\x13\xa0\xc4\xf5\xc1\x52\xf1\x59\x56\x2b\x67\x82\xdd\x89\xaa\xe0\x64\x5b\x77\x91\xe1\x06\x5d\x06\x3f\x15\x3f\xd5\xb5\x26\x3f\x59\x34\x1e\x14\x64\x75\xcf\x6d\x60\x6b\xd8\xe2\x27\xa3\x58\x03\x5f\xc7\x19\xb2\x0b\x8e\x99\xcc\x51\xd7\xce\xc8\xfd\x7d\xbd\x82\x2f\x32\xd3\x42\xa6\x04\x9a\x65\x94\xbc\x83\xfb\x7b\x46\xc1\x90\xcb\x73\x7f\xef\x38\x22\x91\xed\xeb\x97\x72\x28\x8b\x55\x8d\xf5\x79\x2c\xd2\x33\xd6\x16\x64\x81\x92\xb1\xb6\xae\xab\x68\x18\x6b\x1f\xbb\x60\x46\x88\x24\xe4\xbf\x14\x0c\x8f\x64\x07\x68\x6f\x74\x65\x37\x37\x5d\xa4\xfc\xd4\x4f\x0c\x27\x60\xf5\xad\x46\x46\x6f\x95\x72\xee\xa1\xbd\x71\x08\x5a\x6f\xe2\x04\x99\xbd\x29\x4a\xbb\x87\x76\x27\x40\x68\xfd\x89\xc2\x9f\x50\x59\xc2\xf7\x84\xd6\xff\x58\xd7\xe9\xb5\xd6\xb9\xbd\xa8\x01\x5e\x97\xb3\xec\x87\x1a\x64\x4d\x5b\xd8\x5a\xf1\xf6\x87\x75\xe4\x42\x0a\xdf\x5a\xf5\xf6\xae\x06\x5e\x95\xc2\xb7\xd6\xbe\xfd\x56\x03\xcf\x53\x35\xb4\xd6\xbc\xfd\xb3\x06\xd9\x14\xe5\xb5\x56\xc1\xfd\xda\xd0\x85\x22\x2b\x6b\xad\x87\xfb\xb9\xa1\x8f\x4a\x20\xd8\x5a\x21\xf7\x4b\xad\x0b\x83\xa4\x68\xaf\x9b\xfb\x47\x7d\x16\x56\xaa\xa4\xbd\xa2\xee\xdf\xf3\x7b\x12\xda\x8a\xd6\x0a\xbb\x7f\xd5\xfa\x51\xd5\xaf\xad\xb5\x76\x08\xd5\xe0\x2b\x6a\xe9\xd6\xaa\x3b\x5c\x07\xaf\xbb\xc7\xb4\xd6\xde\xa5\xf5\x1e\x74\x07\x99\xd6\x0a\xbc\xbc\xde\x03\xd7\x99\xde\xc2\xd6\x8a\xb5\xa0\x0e\x9c\x53\x9b\xdd\xeb\xd6\x32\x93\x3a\x6c\x45\x89\xd6\x32\x34\x6e\x1d\xb6\x41\xf3\x76\x3f\xb5\xed\x23\xae\xf7\x51\xd7\x3b\xee\xc2\xe3\xd6\x71\x8f\x2d\x47\x88\xa9\xae\xcf\x5b\x87\x3d\xae\x83\xe6\x76\x19\x9f\x5b\x67\xc3\xb1\xa2\x6b\x4a\xac\x2f\xa7\xb6\x6a\xfc\x1a\xc0\x8f\xaa\xba\xa4\xbe\x36\x1a\x67\xb0\x9c\xae\x6a\x2e\x84\x25\x3a\x94\x12\x8c\x65\xf4\x52\x8d\x5f\x2f\xe8\x88\x31\x11\xcb\x69\x9e\x6c\x1f\x2e\x31\x0f\xa9\x98\xdd\x79\xc0\x34\xa4\x72\x76\xc9\xfd\xa9\x48\x90\xb3\x07\xef\x50\x25\xac\x59\xb2\xd3\x8a\x60\x38\x78\x70\xa7\x95\xa4\x67\xc9\x4e\x15\x4a\xe8\xed\x83\x7b\x55\xc5\x44\x6a\xb7\x1f\xb5\x30\xe0\x8b\xf4\x85\x4b\xe5\x61\x58\x55\x0f\xb8\x56\xc7\xbf\x4a\x97\xf7\xf6\x31\xa9\xf2\x3e\x3e\x69\xf2\x7e\x60\x4d\xde\x7a\x02\xa7\xbc\xff\x51\x62\xcf\x35\xa8\x9a\xbe\x40\x38\x93\xd4\xd4\x9f\xdc\x2c\xa1\xba\x99\x5a\xbf\x5c\x59\xe7\xd4\xd0\xc6\xf4\x2c\x73\x35\x6b\x36\xc3\x7c\x0e\xc0\xd3\x07\xca\xf4\xdf\xaa\x22\x7d\x11\x09\xe5\xad\xe2\x1f\xb3\x6f\x94\x31\x51\xcd\xb5\x51\xaa\x8a\x59\xee\x2c\x5f\x70\x11\xc9\x27\xa3\x4a\x11\x6f\xec\x9a\x5f\x51\x5b\xe9\x63\xa3\xf4\x2d\x1a\x06\x37\x71\x96\x57\xe1\x4e\x44\xcd\xc5\xc5\x61\x15\xe6\x44\x14\x1e\x66\xe1\xf5\x1e\x4a\x08\xb7\x7b\x64\x54\x55\x1c\xde\x9e\x51\xa3\x31\x67\x17\x46\xa5\xc6\x57\x1d\x5a\xc6\x2c\x76\x68\xc7\xec\x4f\xb7\x77\x3c\x33\xaa\x15\x86\xf6\x40\x11\x6a\x53\x17\x4d\x5d\x19\x4d\xc5\x75\x55\x4f\x50\x14\x69\x1d\x30\x3f\x9c\xd9\xc1\x5e\x07\x95\xc0\x7f\x8d\x40\xaf\x2c\xe1\xad\xff\xd1\x3d\xfd\x02\x41\x07\xf7\x4d\xb8\xeb\x09\x3a\x78\x6d\x82\xe5\x52\xc2\xd6\x71\x54\xee\x4c\xc0\x9a\x90\xb0\xb5\xcb\xc2\x27\xdb\xb8\x85\x8c\xb0\xb5\xf0\x74\xd7\x84\xae\x8a\x08\x5b\x0b\x50\x8f\x6b\x63\x5f\x93\xcb\xc2\xb9\x09\xb8\xba\xc9\xed\xe5\xa6\x9f\x4d\xe0\x14\x19\xb4\x17\x98\x1e\x99\x70\x15\x7c\xd2\x5e\x68\xba\x67\x42\x57\x84\x4e\xad\xc5\xa5\x17\x26\x70\x5d\xe4\xd4\x5a\x54\x7a\x68\xc2\xd7\x05\x4e\xad\xe5\xa4\x3b\xb6\x83\x28\x6d\xb9\x87\xb0\xb5\xec\xf2\xac\xb6\xfa\x86\x41\xfa\x14\xb6\x16\x2c\x1e\x98\x7d\xa8\x62\xcb\xd6\x72\x45\x03\x76\x28\x06\x7e\xb9\x98\xf9\xb3\x7d\x08\xe0\xa9\xca\xf0\x9d\xaa\x0c\xdf\xfb\xb9\xfc\x1e\xce\xae\xd1\x4a\xdc\x9e\x9e\x2f\xea\x5b\x44\x78\xa9\xd8\xbf\x5f\x1e\x13\xfb\xf7\x8f\x27\xf6\xef\x89\xfd\x6b\x60\xff\x58\x32\xb9\x2c\x17\x6c\xe0\xbf\x1f\x1d\x1b\x58\x19\xee\x45\x0d\xe5\x56\x9b\xc3\xa6\x80\x9b\x0f\x8a\x5f\xb2\xb8\xcd\x70\x89\x36\x4b\xb3\x8f\x72\x2e\x51\x80\x91\x69\xb1\x58\xad\x53\x1b\x23\x45\x09\xe4\x76\x95\xc5\xdb\xb7\xc3\xa8\x07\x05\x11\xc1\xf6\x58\x5c\x0c\x5b\x4c\x90\x30\x47\x98\x26\xa8\xfa\xf4\x40\x1e\xf5\x17\x95\x47\x15\x7c\xe2\x2f\x5a\xda\x48\x7a\xec\x25\xb7\xf8\x8b\x85\x2b\x3d\x37\xea\x14\xa2\xfc\xb3\x51\xa5\x50\xd4\x47\x46\xd5\xc1\xde\x29\xe3\x42\xf6\x8c\x0a\x39\x4d\xc9\x31\x8a\x9a\x43\x34\x08\xc2\x69\xc5\x2c\xfe\x52\xf1\xa6\x41\x52\xf1\x89\xbf\xd8\xe2\x8c\x9e\x19\x95\x4c\x6f\x72\x60\x8e\x57\xc6\x3b\x7c\x6b\xd4\x9c\x65\x34\xe5\xce\xc7\xda\x60\x6b\x31\x0c\xdf\x9b\xcb\x63\x04\x20\x7c\x61\xd4\xab\x01\xf2\x3e\x18\x75\x2c\xfa\xdc\x1f\xd6\x2f\x38\x81\xf8\xce\xa8\xd4\xa8\xc7\xdf\x8c\xca\x8b\xe9\x18\x55\xc6\x7c\xbf\x68\x82\x88\x5f\xcd\x19\xb3\x24\x43\x3f\x2f\x97\x59\x8b\xd9\x43\x89\xf5\xa3\xa6\xe3\x5e\x3f\x4e\x23\x66\xda\x7d\xb0\xe7\xfb\x7e\xaa\xe7\xe5\x63\x20\x87\x41\x21\x36\xbc\xca\xd2\xe5\x08\xab\x1b\x51\xb5\xb9\xe9\xfc\xf7\x30\x8e\x22\x94\xbe\xae\xd5\x95\x25\xdc\xf5\xff\xe1\x7e\xfa\x02\xec\xf8\xb1\x09\x57\xbd\x22\xed\xd9\xf2\x73\x13\xfc\x7a\x73\x01\x7c\x36\xc1\xaf\x35\x17\xc0\x91\x09\x7d\xad\xb9\x00\xf6\x4c\xe8\x12\x5d\xb4\xe7\xcc\x2f\x4c\xd8\x15\xc6\x69\xcf\x9d\x1f\x9a\xc0\x05\xd2\x6a\xcf\x9b\xef\xd4\x40\x33\xbc\xd7\x9e\x3b\x3f\xab\x1d\x44\x2d\xae\x6c\x6b\xfe\xfc\xc0\x84\xbf\xae\x68\x02\x6f\x6b\x87\xb0\x0a\x58\xdb\x9a\x31\xff\x68\x02\xe7\x6f\x40\x7b\x96\xfc\x7d\xfd\x04\xd6\x43\xe1\xb6\xb6\x5e\x7a\x51\xbb\xff\x66\x28\xdc\xd6\xac\xff\x07\xb3\x0b\x2d\xda\x6b\x6b\x6b\xa5\x3f\x4c\xf0\x3c\x1a\x6b\x6b\x71\xc2\x3b\xfb\xb8\x85\xcc\xa5\xb5\x40\xe1\x37\x13\xbe\x2e\xd3\x69\x6d\xa6\xf4\x4f\x13\x3e\x7b\xd8\xdb\x5b\x27\xfd\x6a\x7b\x33\xd6\x11\x53\xe0\xe7\xda\x65\xe2\x39\x0c\x5b\xdb\x3c\x19\x70\xad\x19\xe3\x96\x08\x27\xb0\x08\x08\x80\x9f\x54\xa1\x8e\xd1\xab\x42\xc6\x2c\x17\x54\xa0\xf1\x6b\xa3\x9f\x4f\xaa\xf0\xe8\xdf\x0b\x84\x47\xe3\x2c\xc9\x06\x5f\x35\x6d\x78\x25\xfd\x39\x7f\x4c\xd2\x9f\xcf\x4f\xd2\x9f\x27\xe9\x4f\x83\xf4\x47\xcd\x3a\x45\xc5\x3f\x47\xdf\x4f\xfa\x14\x53\x2a\x54\xc9\x73\x26\x0d\xe5\x4b\xc9\x85\x2c\x39\xe9\x0c\x81\x8f\x29\x8b\xd8\xcb\x6e\xd3\x02\xe7\x28\x18\x15\x4e\x3d\x58\xad\x5e\x0f\x9d\x8f\xe3\xaa\xad\x19\xae\x76\x5e\xdb\x9b\x07\x8a\x39\xce\x55\x31\x87\x48\x5a\x77\x3e\x2f\x69\xdd\xb9\x45\xce\x71\x62\xd4\x29\xec\xd3\xa5\x51\xa5\xf0\x3e\xa7\x66\x15\xc1\xe5\x61\x96\x54\x36\x01\xa2\xe6\x1d\xf5\x9e\x46\xd1\xdb\xe9\xce\xee\x61\x51\xd9\x07\x88\xfa\x8b\x3c\x48\x8b\x71\x90\xa3\x14\x73\x43\xdb\x6b\xa3\x05\xb7\x11\x3f\x0e\x70\x7c\x83\x2a\x73\x01\x51\x5d\x2d\xa5\x34\x17\x90\xf3\x54\xd7\x7c\xd7\xa8\x64\xd4\xf9\xb1\xc2\xf8\xa7\x19\xde\xa3\x57\x31\x3a\x48\x31\x21\x20\xb3\x54\x3a\xcc\x3c\x7f\x25\x10\x27\xf2\xa5\xbb\x8c\x02\x5f\x0d\xfc\x57\x8c\x51\x18\xf7\xe3\x70\x2b\x16\x60\x78\x08\x40\xaa\xcb\xd9\xdc\x7c\x8e\x3c\x73\xd6\xb4\x50\x9b\xe8\xe6\x26\xf2\xe4\x30\xbc\x9d\x24\xc9\x6e\x51\x24\x3c\xb0\x20\x73\xf0\xb9\x8d\x93\x28\x0c\x72\x6d\xb8\xc2\x33\x7e\xc1\x20\x9f\xab\xd0\xdf\x07\xc5\xfe\x5d\x10\xe2\xf9\x7d\xe2\x0a\xa6\x5c\xf3\x56\x10\xe5\x8a\xde\xdf\x63\xbe\x01\x7b\x68\x8c\xd2\x08\xa5\x84\xbb\xa9\x1c\xd3\x5e\xfa\xb5\x7e\x19\x84\xcd\x4d\x59\xa5\x4e\x93\x55\x96\x25\x9c\xfa\x9f\xdd\x9b\xba\xc8\xa4\x75\xb6\x99\x81\x09\x57\x4f\xe2\xd7\x5a\x24\x73\x62\xc2\x5f\x6f\xda\x99\x4b\x13\xfc\x5a\xd3\xce\x9c\x9a\xd0\xd7\x9a\x76\xe6\xb6\x06\x5d\xa2\x9e\xf6\x02\x99\x7d\x13\xb8\x89\xbd\xda\xcb\x65\xae\xcd\x2e\xea\x08\xb0\xbd\x7c\xe6\xce\xec\xc4\xc0\xa1\xed\xc5\x34\x9f\xcc\x1e\x14\x34\xdc\x5e\x54\xb3\x5b\x3b\xff\x2a\x26\x6f\x2f\xaa\x39\x36\xe1\xaf\x4b\x54\x63\x80\xb5\xbc\x28\x4c\x66\xb3\x88\x71\x5a\x08\x05\xc0\x1b\x95\x81\x32\xfa\xad\x3d\x0c\x4c\x9e\xb3\x52\xaf\x75\x18\xf3\xfb\xd4\x91\x37\x13\xed\xac\x38\x4d\x0d\x80\xd1\xdb\x8d\xca\x22\x1e\x35\xb2\x88\x71\x3f\x46\x79\xb1\x1d\xe4\x71\xb0\x35\x42\xe9\x44\x67\x13\x19\x97\x28\x9a\x2d\xe0\x11\x2b\xae\x2f\x7e\x62\xa4\x7e\x58\x46\x8a\xf3\x4b\x8c\x6c\xca\xfc\xd9\x0d\xca\x99\x97\xfa\xec\xbf\x5e\x76\x48\x4f\xfe\xd6\x2b\xe0\xbf\x76\xf1\x4f\xaf\xc0\x7f\x20\x41\x0b\xfd\xf5\x7f\xb3\xba\x97\xc0\x7f\x4d\x49\x90\x37\xa2\x6a\xeb\x55\x07\x6f\xbd\x82\x7f\xfd\x1b\xd5\x8d\xbe\x84\x7f\xfd\xff\x75\xa8\x72\x48\xd4\x96\x70\x98\xe5\xf1\xe7\x2c\xc5\xa4\x8f\xb2\xa4\xcc\xd7\x84\x30\x5f\x8c\x63\x88\x53\x3a\x15\x1e\x43\xcd\x75\xb6\xa2\x2c\x9c\x70\xd9\x8c\xcc\xab\x12\xd0\x8d\x83\x81\xf1\x3b\x59\x81\x93\x20\xc7\x98\x9f\x69\x98\xc0\x18\x66\x1b\x2a\x6f\x81\x29\x51\x05\x53\xdf\x89\xb2\xd0\x81\x01\xfb\xe9\xe6\x7e\x01\x9a\xc4\x1e\x04\x98\x2a\xf6\xc8\x1b\xc5\x1e\x79\x83\xd8\x23\x37\xc5\x1e\xb9\x76\xae\xf2\x39\xe7\x8a\x26\xd7\x74\xc4\xde\x39\xd0\x8d\x7d\x27\xcb\x63\x94\xe2\x80\xa1\xae\x38\x75\x13\x3a\x09\xf0\xc6\x3e\x7c\xb2\x06\xfc\x84\x64\x06\xce\x37\x5f\x04\xe5\x0d\x28\x41\x27\xe9\xc6\x3d\x3f\x2b\x83\x62\x9a\x86\xcf\xae\xd1\x34\xca\x6e\xe9\x9d\x8f\xfb\xee\x7f\xfe\xff\x29\xdd\x7f\x8d\xa6\xbb\x59\x84\x80\x1a\x66\x21\xa3\x6a\x87\xc2\xcb\xd2\x30\xc9\x0a\xe4\x22\x7e\x09\x68\xe5\x0b\x9c\xc7\x83\x01\xca\xbd\x7e\x16\x4e\x0a\x17\xf0\xd3\x89\x7d\x69\xcf\x8b\x12\x2a\xaf\xf3\xfe\x98\xa0\x7c\x7a\x8e\x12\x44\x76\x76\x27\x49\xdc\xff\xd5\xcd\xb3\x04\xfd\x8f\xef\x10\xe4\x17\x63\x34\x72\x7a\xff\x0b\xf4\x60\xea\x63\xaa\xa8\xa4\xb2\x59\xaa\xad\x14\x74\x73\x94\x85\x1e\x39\x3e\x37\x68\x9f\xc1\x04\x1b\xff\xe7\xb9\x32\xea\x37\xf2\xf6\x67\x5d\x36\xf2\x6a\x59\x7b\x5d\xd9\xac\xb7\xb9\xe9\xe2\xee\xfc\x26\xe4\x88\x80\x9e\x98\x14\x44\x5e\x81\xb3\x31\xd9\x80\x60\x10\x30\xee\x05\x22\x6f\x4c\x10\x55\x4a\x1e\x3c\x72\x70\x5d\x00\x3a\xc8\x2b\x86\x71\x1f\x7f\x40\xd3\x37\xe4\xaa\xa5\xa4\xa7\x86\x25\xb4\xae\x1e\xe8\xa4\x64\xb2\xf2\x06\x6e\x6e\xba\xc1\x6d\x10\xe3\x67\x29\xba\x7d\x76\x9a\x67\xa3\x98\x7c\xec\xbf\x2e\x10\xbe\x88\x47\x28\x9b\x60\x17\xc1\x97\x80\x43\xab\xf7\x02\xf8\x5e\x33\xf0\x08\xcc\x1c\xc6\xde\x8d\x33\xc2\xef\xe5\x17\xd3\x31\x92\x5d\x70\xf0\x5e\x8e\x8a\x2c\xb9\x41\x2e\x07\x2a\x8e\xc9\x8c\x2f\x4d\xe7\xaf\x7f\x83\xc6\x62\x50\xf4\x31\x2b\xa1\xbe\x1e\xbc\xb4\x04\xa0\xe4\x29\x08\xd8\xc3\xa5\x4d\xbc\xda\xd8\x01\xc2\x7c\x57\xdf\x4e\x0f\x22\x57\x3b\x3a\x03\x84\x77\x44\x90\x45\xd7\xa1\x0f\x66\x12\x5c\xa1\x24\x41\xd1\xd5\xd4\x01\x02\x29\x13\x96\xcf\xcb\xc6\x28\xdd\x27\xc3\xd8\xdc\xa4\x30\xd8\xd4\x95\x72\x3e\x2f\x7a\x98\xa2\x88\x16\x1d\xc6\x05\x46\x29\xca\x5d\x87\xcf\xd6\xd1\xe6\x0e\xca\x28\x2e\xc4\x1c\xf8\x04\xc8\xe7\x39\x1a\x65\x37\x68\x59\x08\xd1\x19\x0a\x51\x7c\x83\x76\xf2\x01\x45\x92\x85\x00\x35\x0e\xf2\x60\x54\xb0\x95\x08\xf2\x41\xe1\x8d\xb3\x82\xf2\x20\x41\xa2\xed\xab\xd2\x22\x0d\x46\x28\x22\x30\xa9\x87\x7d\x92\x08\x50\x62\x90\xcd\xb0\xaa\xcf\x41\x79\x1b\x27\xc9\x19\x9d\x83\x9c\x95\x32\xcf\xb2\x84\x85\x1f\xbb\x89\x4a\xf7\x50\x0c\xdb\x9e\x27\x35\xa0\xca\x25\x23\xdc\xe8\x22\x3a\xcc\xfa\x25\xa1\x54\x14\x02\xcc\x80\x4f\x8f\x00\x63\x46\x57\x82\xce\xbe\x33\x60\x27\x2a\x71\x37\x59\x48\xdc\x61\x1c\x84\xc3\xad\x62\x18\x44\xd9\xad\x4a\xe0\x69\xf4\x1c\x98\xb5\xa7\x0a\xe8\x23\x29\x1e\xd9\x02\xe1\x23\x3e\x06\xa6\x31\xc9\x5d\x72\x1b\xdd\x59\x18\x8c\x83\xab\x38\xa1\xfa\xc6\x0e\x6f\x3c\xd2\x5b\xee\x2a\x4d\x5c\xe7\xaf\xde\xab\xbf\x3a\x70\x16\xc5\x05\xd9\xcf\x9d\x09\xce\x2e\xf2\x20\xbc\x8e\xd3\x01\x1b\x47\x48\xf5\x74\xa2\x33\x17\xcc\x4a\x18\xb3\x33\x29\xcb\xb8\xe1\x2b\x21\x1e\x72\x38\xab\x0e\x64\xa7\x1b\x40\xcf\xf3\x92\x1e\xa4\xe7\xb1\x53\x94\x7e\xba\x81\xf3\xe9\x2c\xf7\xa9\xa4\x33\x08\x87\xe7\x74\xdd\xdc\xd9\x88\x20\x1e\x87\x5c\x61\xa7\x04\x65\x18\xe0\x70\xe8\xc6\x4c\x80\x94\x25\xc8\x43\x79\x9e\xe5\x6e\x0c\xca\xc0\xcd\x41\x09\x27\xe3\xc8\x1c\x53\x84\x0a\x9c\x67\x53\xb5\x8c\x0c\x9e\x86\x7a\x2c\xd5\x1d\xc5\x8b\x76\x34\x2c\x8a\xad\x71\x9e\x8d\x1f\x48\xad\x6f\xb4\xdf\x69\x9a\x5c\x6d\x59\x2a\xec\x21\x54\x56\x32\x8f\xbe\x4a\x24\x7d\x15\x7c\x57\xf4\x55\xa2\xa8\x95\xec\xc8\x56\x0b\xc4\x59\x43\x8e\x26\x76\xfd\xbb\x8b\xba\xaf\x7a\xf7\xf7\xd8\x63\xb4\x50\x01\x5c\x89\xf8\x85\x5d\x61\x8c\x6e\x09\x2a\xd9\xe5\x92\xf3\x73\x3c\x4d\x90\xf6\x72\x01\x52\x2d\x96\x85\x9a\x21\xba\xa8\xfb\xb2\x07\x18\x72\xcd\x15\x64\x13\xf3\xe5\xcd\x7c\x82\x5e\x27\x7e\x1b\x04\x0b\x23\x7f\x56\x42\x95\xd9\x9b\x34\x30\x7b\x11\x61\xf6\x26\x9c\xd9\x8b\x74\x66\x4f\xfd\x09\x23\x93\xd9\x8b\x1a\x99\xbd\xe8\xfe\x3e\x32\x99\xbd\x48\x67\xf6\x22\x3f\x5b\x86\xd9\x53\xa3\xa2\x62\xb7\x80\x31\x44\xe0\xfe\x1e\x95\x00\x46\x00\x86\x0a\xb3\x17\x19\xac\x58\xc4\x99\x3d\xad\xfc\x4d\x54\x3f\x34\xa1\x64\xf6\xa2\xf9\xcc\x9e\xd9\x83\xfd\xdc\x93\x21\x46\x64\x7a\x8c\xd9\x0b\xfc\x08\xe6\x80\x62\x66\x45\x8b\xab\x06\xa7\x5e\x16\xd9\x14\xab\x61\x9b\x75\xf1\x98\xa9\x48\xa0\xd5\xcf\xb3\xd1\x3e\x4f\xa2\x45\x08\x7b\x81\x62\xbc\x82\x1c\xf9\xf3\x21\x42\xb8\xe8\xc9\x0d\x24\x63\x20\x7c\x24\x8f\x63\x4b\x39\x01\x2f\x2c\x0a\x6a\x61\xd0\x53\xe4\xf0\xaf\x28\x31\x4a\xdf\x55\xe3\x63\xf2\x0d\x22\xaf\x03\xfb\x98\x76\xa3\x7e\x49\x08\xf2\x20\xc7\xc5\xaf\x31\x1e\xba\xce\xd6\x96\x03\x80\x88\x5b\xdb\x45\x1e\xce\xe3\x11\xa1\x5f\xd9\x77\x96\x3b\x08\x78\x93\x1e\xe8\xc1\x6e\x0f\xd0\x90\xba\x6c\xa3\xb8\x06\x51\xac\x2d\xd0\x8e\x63\x17\xf7\x60\x2e\x10\x49\xe0\x13\xa2\xfc\x0c\x0d\xf6\xef\xc6\xee\xef\xff\xb3\xb5\xf5\x62\x46\x2e\x34\xea\xc7\x77\xf7\xf7\x8e\xe7\x94\xe4\xf7\x20\xcf\x26\xe3\xfb\x7b\xc7\x29\x7f\xfa\x1d\x40\x2a\x8b\x31\x72\x92\xa5\xca\xd5\x14\xc9\xc5\x66\x62\xf9\x91\x37\xa2\x6f\x5d\x00\x36\xe2\xbe\x2b\x1e\x51\x3f\xed\xbe\xec\x6d\x38\x5b\x84\x96\xcf\xbd\x70\x18\xe4\x3b\xd8\xcd\x25\xd3\x40\x2e\x5c\xee\xe7\x5e\x31\xb9\x2a\x70\x4e\x43\xa8\xca\x2a\x55\x7e\xd1\xcd\x09\x27\x44\xfe\xf1\x67\x25\x80\xe4\x0f\x82\x0e\x30\x79\x19\xb1\x9b\x80\x12\xa8\x0f\x63\xbe\xe8\xac\x46\x71\xb4\x15\xa7\x05\xca\xb1\xcd\xde\x61\x3b\x47\x69\xa4\x1c\xda\xc2\xfe\x65\xfb\xa3\xdc\xf8\x01\x9f\x88\xa3\xbd\x4c\xcf\x5f\xc2\x01\xc2\x1d\xd9\x67\x85\x6f\xc4\xc4\xcb\x12\x2c\x33\x73\x46\x73\x3c\x64\xe6\xfc\xcb\x47\x3c\x73\x73\xcf\xd7\x4e\xdb\x0a\x99\x02\x22\x24\x2c\x0e\x72\x32\x70\x24\xde\x58\x18\x4e\xf2\x1c\xa5\xf8\xc2\x28\x2f\xd9\x85\x4e\xbf\x35\x4d\xdc\x61\xbd\xf0\x51\x49\x16\xa8\x46\x24\x53\xd1\xa6\x1c\xbd\x9f\xb2\x59\x0b\x1a\x99\x10\x0b\x92\x5a\xd9\x08\x5c\xec\x12\x5e\x04\xe6\x82\x97\x33\x89\x5e\x44\x48\x6e\x06\x21\x27\x10\x82\x9e\x9f\xaa\x10\x72\x06\x21\x80\xa9\x84\xb0\x34\x8d\x9c\x2e\x3e\x16\x74\x65\xa2\xaf\xfd\x6a\xb1\xfd\x9e\x8b\xc0\xfd\xe7\x2f\x7b\x54\xe0\xd5\x75\xe2\x74\x3c\xc1\x34\xd5\xe2\x1d\x0e\x72\x14\x38\xd0\x29\xa8\x78\xca\x81\xce\xd5\x04\xe3\x2c\x55\x13\x18\x22\x2f\xcd\x22\xaa\x35\xf5\x70\x76\x98\xdd\x92\x43\x41\xc8\x16\x00\xf0\x1b\x17\x79\x85\x26\xa2\xa8\x16\x00\x53\xe1\x51\x5d\x7e\xa1\xb6\x00\x1d\x17\x79\x51\x80\x83\x02\x61\x4f\x54\xf8\xcf\x5f\x41\xc4\x45\x0c\x36\xc8\xc0\x56\xab\x83\x26\xf8\x3b\x29\xd0\xb3\x7e\x96\xbb\xfc\x45\x79\x96\xf5\x9f\xa1\xba\x28\x8e\xad\x05\x14\x2b\x01\xf9\xf4\x01\xc0\x9b\x9b\x4e\x3f\x48\x0a\xe4\x3c\xf7\xfd\xb4\x36\xc8\xb5\xcc\xbc\xe5\x1c\xf5\x67\x6a\xe1\xd9\x8c\xd3\xad\x9b\x18\xdd\x92\x43\x69\x3b\x9e\x4a\x75\xc3\x47\x8f\x12\x51\xa7\x19\x8e\xfb\x71\x18\xe0\x5a\xf0\xa2\xe5\x39\x57\xa9\x63\x4a\x94\x1a\x5f\x65\x33\x10\x25\x53\xac\x32\x96\xf3\xe9\xe8\x2a\x4b\x0a\xee\xff\xea\xcf\x6b\x43\xc0\x60\x4e\xc3\x88\xd4\xac\x72\x4c\x15\x47\xb0\x48\x94\x43\xc6\xa8\xb0\x30\x25\x00\x00\xa6\xde\x78\x52\x0c\xbd\x60\x3c\x4e\xa6\x54\x97\x54\x72\x60\x69\x65\x8a\x58\x08\x81\x85\x58\xe6\x67\x71\xfa\x0c\x35\x88\xe2\xa9\x01\x25\x37\x7c\x5c\x49\x14\x8f\xba\xb8\xe7\xa7\x10\xad\x41\x1f\x44\x68\xc2\xb8\x59\x1e\xd0\x4f\x82\x62\x78\x84\x8a\x22\x18\x50\x55\xe5\x7a\x65\x02\xf4\x60\x4d\x1f\x8d\x58\xc0\x90\x97\x0a\x01\xb3\x8e\xa6\xf2\x8c\xac\xb9\x13\x24\x84\xae\xe1\xe2\x62\xd1\x52\x60\x40\xf5\x42\x51\x76\x6f\x43\x88\x17\x54\xd2\x87\x60\x5e\x26\x98\x7b\xf5\x77\xfc\xdf\x81\x10\x46\x70\x7a\xfc\xef\xf8\xa7\x9f\xc4\x35\x22\x20\x9e\xfb\xb2\x45\x17\xf7\xde\xa8\x3f\x3a\xb3\x72\x03\xff\xc7\x7f\xbe\x49\xf8\xed\x72\x53\x00\x9f\xbf\xb4\x71\xf5\x18\xcc\xf8\x09\xee\xe2\x1e\xc1\x0b\x9d\x05\x17\xa5\xb0\x1e\x6d\x42\xe8\xa0\x45\xe2\x52\xc2\xbd\x80\x8e\x32\xa6\x86\x01\x35\xdf\x9d\x45\x97\x38\x25\x8f\x44\x09\xe4\x3d\x45\xa5\x3b\xc3\x4c\xf3\xd1\xf9\x1b\xfa\x2b\x64\x87\x18\x45\x5c\x1b\xd2\xf9\xeb\xcb\x97\x65\x4d\xd0\x4d\x9e\x87\x6c\xe4\x6b\xfb\x98\x4d\x30\xca\xdf\x5f\x1c\x1d\xea\xdb\x9b\x73\x71\x38\x2b\x65\x87\xdb\x0b\x13\x14\xe4\xe2\x06\xb9\x00\x3a\x62\x6e\x8e\xef\x13\xe6\x95\xbe\xa9\x41\x1f\xa3\xfc\x4d\x4d\x89\xe2\xe1\x21\x4a\x29\xa1\xc9\x9b\xb8\x00\x78\x4c\x80\x89\xfc\xd7\x84\x10\x61\x56\x35\x94\x2e\xdb\xb9\xca\x72\x8c\x22\x87\x2a\xb5\xc8\xd8\x01\x1e\xe6\xd9\xed\x33\x54\x2a\x70\x66\xea\xd0\x82\x28\x72\x11\x28\x41\xc7\x52\x78\x1b\x27\xc9\x1e\xa3\xe9\xc4\x79\xaf\x16\xc5\x2b\x70\x1c\x5e\x4f\xb9\x92\xc4\x3e\xd1\xb2\x84\x99\x26\xa4\x9a\x54\xf7\x3d\xa4\x72\xaa\xa8\x9d\x9c\x6a\x6c\xca\xa9\xa2\x06\x39\xd5\x98\x30\xa6\x11\x97\x53\x8d\x75\x39\x95\xfa\x13\x8e\x4d\x39\xd5\xb8\x51\x4e\x35\xbe\xbf\x1f\x9b\x72\xaa\xb1\x2e\xa7\x1a\xfb\xe1\xea\x72\xaa\x0c\x4e\xa4\x9c\x6a\x0c\xe0\x48\x91\x53\x8d\x0d\x29\xd2\x98\xcb\xa9\xb4\xf2\x37\xe3\x3a\x16\x1b\x49\x39\xd5\x78\xbe\x9c\xca\xec\xc1\x7e\xf3\xc8\x10\xc7\x64\x7a\x42\x4e\x35\x16\x72\x2a\xc5\xd3\x40\x21\xaa\xe2\x45\xe4\x45\x96\x6e\x65\x13\x5c\xc4\x11\x7a\xb0\x11\xcb\x86\xf9\x00\x3f\x99\xb0\xfc\xb8\x26\x2c\x0b\x48\x96\x28\x1b\x59\x4d\x48\x96\x21\x5c\xd8\x91\xe1\x27\xa8\x22\x5a\xe4\x63\x0a\x20\xd3\x00\x40\xec\xd3\x7e\x60\xce\x29\x97\xd4\x4f\x1a\x29\x97\x6f\xec\x27\x23\x35\xd6\x42\x5d\x3e\x92\x12\x58\x57\xa8\xf8\x35\x1d\xfb\x52\x46\x03\x54\xd7\xd6\xac\x0b\x47\xdd\x97\x3d\xd6\x71\x42\x8b\x84\xde\x2d\x05\xb3\xb2\x64\x45\xdc\x76\x44\x0e\x2a\x2e\x4e\x18\x16\xd0\x94\x20\x10\x79\x4c\x66\x03\xc0\xcc\xb5\xbc\x9d\x8a\x12\xbc\xfb\xaa\xf7\x46\xff\xc9\xad\x08\x00\xa7\xd9\x35\xb8\x5d\xd4\x03\xe5\x2a\xba\xf9\x30\x89\xc3\x6b\x47\x9f\xd4\xa3\x54\xcc\x27\x7e\xe1\x06\xba\x62\x7e\xb4\x0e\xc5\xbc\x01\x95\xad\xd1\x72\x7a\x79\xdb\x87\x00\x06\xaa\xea\x3c\x00\x2b\xbe\x29\x39\x2a\xe2\xcf\xd6\x27\x45\x56\xca\xc7\xc5\xfa\xe5\xa3\xe4\xd5\x73\xd4\xb7\x4d\x39\x47\x7d\xdb\x64\x49\xeb\x47\x39\x4d\xaa\x9b\xf9\xea\x7a\x2d\xfa\x82\xa4\x96\x37\xa4\x40\x98\xea\x6f\x0b\x17\xf9\xdd\x9e\x50\xf2\x70\xb5\xf0\x65\x96\x30\xed\x6e\x71\x7f\xcf\x33\x26\x6e\xec\xe4\x79\x30\xf5\xe2\x82\xfe\xeb\x12\x8a\xcf\x45\xbe\xa1\xdc\x41\x80\x8c\x41\xd5\xef\xa4\x54\xbf\xc3\xd4\x38\x8e\xb3\x91\xca\x3c\x45\x9b\x9b\x69\x25\x6c\x74\x9e\xc7\x23\xb2\x28\x41\x8a\x1d\xa6\xce\x71\xaa\x02\x98\xfa\xa9\xc7\x43\x49\x6b\x2d\xa1\xe3\x00\x83\x5d\x65\x0a\xb0\xa2\x52\x80\x71\x41\x33\x24\x13\x4f\x10\x46\x94\x7b\x80\x58\x8e\x11\xf9\xaf\x2d\x00\x18\x36\xad\x60\x88\x6e\xaa\x75\xf1\x65\x1a\x4a\x99\x3f\x92\x29\xba\xed\xf8\x55\xcf\xe5\xa3\xb0\x25\x11\x4a\x82\xe9\x1b\xe5\xa9\x62\x2c\x4f\xf5\x52\x68\xdf\x54\x48\xb4\xfb\xb2\xc7\x79\x99\x6a\x23\x1b\xda\x81\x1a\x87\xc8\x7a\xe5\x4c\xd4\x12\xdf\x97\x2b\xc8\x1b\x71\x96\x25\x38\x9e\x6f\x2e\x02\x1d\x1c\x8f\xc7\x53\xef\x53\x61\x8b\x18\x27\x09\xe3\xfc\x87\x96\xbb\x05\x8f\x4d\xee\xc6\x58\x13\x53\xdb\xc0\xb4\xc4\x84\x65\xa9\x14\xb9\x85\x9f\x08\x5a\xe1\xfe\x7e\xc6\xec\xa8\x63\x98\xf9\x88\x6c\x9b\x70\x25\x95\xf4\x50\xe1\x71\xe3\x48\xa6\xd1\xaa\x0c\x57\xb2\x0d\x9e\xba\xac\xde\x22\x28\x90\xc3\x1c\x73\x68\x54\xd3\x4e\xe6\x67\x5e\xf5\x7b\xe3\x2a\x47\xc1\xb5\xcc\x2d\x46\x2a\x6b\x2a\x00\x13\x66\x89\xfd\xcc\x0b\x93\x2c\x45\x04\x82\x4b\x18\x1c\x54\x89\x47\xe4\x7c\xf4\xaf\xf8\xd2\x94\x71\xdf\x95\x4c\x06\x39\x52\x04\x56\x9c\xa6\x5c\xe2\xa2\xfc\xed\x3b\x0e\x80\xce\x28\x48\x27\x41\xe2\xf8\xbe\x2f\xe1\x55\xb3\x2e\xd8\xed\xbc\xbf\xef\xf6\x36\x24\xda\x40\xdd\x57\x54\x79\xad\xd8\xbc\x9e\x0f\xb3\xdb\xd4\xc7\x64\xd1\x13\x14\xe4\x07\x29\x46\xf9\x4d\x90\xb8\x31\x80\xb1\x5f\x43\x28\xde\x90\x90\xa9\xa0\x84\x04\x12\x28\x41\xc9\x6c\xdb\x33\x18\xfa\xcf\x5f\x6d\x4c\xbc\x61\x50\x28\x12\x41\x1c\x5c\xc5\x34\x54\x04\xc1\xf2\xa1\xff\xfc\x25\x9c\x18\x32\x43\xd9\x02\x3a\x2f\x1d\x20\xcc\xa0\x23\x16\x47\x9b\x2f\x3c\x70\x33\xf8\x45\xa5\x83\xf9\x32\xd2\xc1\xe0\xeb\x4a\x07\xf3\xaf\x2d\x1d\x1c\xa2\x11\xea\x38\x12\xed\x6a\xe7\xb3\x33\x21\xe8\x01\xa3\x94\x59\x27\x63\x38\x4e\x26\x83\x38\x2d\x3a\x5d\x79\xb2\x0a\xaf\x9f\x25\x49\x76\xbb\x3b\xc9\x8b\x8c\x30\x66\xea\x4f\xce\x91\xa9\x96\x28\x3c\xd7\x32\x35\xb6\xae\xae\x05\x10\x19\x9a\xe9\x69\x0b\x37\x37\x27\x75\x45\x56\x75\xa8\x60\xed\xc4\x92\x27\x89\x4b\xee\x4a\x4d\xf7\xba\xd0\x64\xe8\x26\x48\xe2\xba\x29\xc2\x43\xb5\x3c\x5f\x0f\x1f\x3f\x89\x7f\xfe\x3c\xe2\x1f\x46\x85\xc7\x92\x0a\xdf\xcf\xf3\x2c\x9f\x51\x14\x9c\x55\x52\x21\x21\xf7\x31\xe5\x40\x85\xeb\x2e\x27\x0a\xaa\xc7\x21\x48\x94\x2c\xee\x0e\xe4\x13\xe2\x65\x43\x1a\xca\x88\x96\x95\xe2\x12\x51\xc7\xa9\x59\x49\xa5\x1c\x64\xc5\xd4\xe3\x87\x85\x6f\x38\x77\x96\x91\x36\x73\x75\x1b\x2f\x4a\x48\x12\xf8\x1e\x07\x4c\x51\x84\x24\xb2\x84\xd9\x97\xa0\x04\x9e\x4b\xc9\x88\x6a\x1b\x86\x61\xde\x93\xe2\x7f\x32\x01\xe1\x5c\x42\xfe\x26\xb7\x08\x01\xe8\xe6\x3c\xd0\x1f\xff\x2a\xf7\x5f\xcf\x14\x2b\xb5\xdc\xc3\xa8\xc0\x80\xfe\x97\x71\x2c\x29\xbd\x7e\xe8\xf6\x59\xec\xe6\xcc\x8c\x9a\x20\xd4\x52\xbc\x5f\xdc\x3f\x83\x0e\x3d\x1c\x06\x39\xe1\x07\x02\x8c\x36\xc8\x2a\x51\xdb\x33\x82\x4c\xef\x28\xd1\x28\xfe\xa6\xb6\x64\xea\x3a\xa5\x55\x2e\xd6\x37\x55\x33\xd6\x59\xe1\xa7\xd0\xec\x21\x8a\x8b\x31\x15\x34\x39\xfb\x67\x67\x27\x67\x0e\x00\x1d\xcb\x67\x93\x24\x99\xf3\xe5\xd9\xfe\xf9\xfe\x85\x43\x1f\x86\x82\xa6\xc6\x17\x1b\x28\x44\x51\xec\x2e\x89\x0d\xd4\x4d\x83\x6b\xb3\x45\xa2\x77\xc2\xe2\x69\xf3\x44\xc6\xb8\xd4\x06\x62\xa8\xca\x7a\xac\xf9\x3c\x30\x5e\xb2\xa2\x89\x8c\x9e\xbb\xb8\xb7\xb9\xc9\xb8\xbc\x67\x96\xba\x12\x40\xf3\x48\x9b\xad\x80\x8c\x5d\x50\x9f\xd6\xb2\x3b\x60\x88\x27\xbb\xa8\x27\x9d\x80\x04\x8f\x59\x77\xc3\xe1\xa6\x39\xaa\xa0\x0e\x2e\xf8\xe4\x2a\x99\xe4\xfc\x0b\xba\xe9\xc6\x07\xea\x7e\x13\x66\x7b\xae\xd3\x13\xe7\x24\xf9\xb7\xfc\x97\xc4\x09\x75\xb8\xd0\xbe\xa1\x40\x11\x93\xea\x20\xf4\x63\xd8\xf0\xb9\x45\xb2\x49\xae\xba\xb1\xf2\xca\x4f\x5d\x89\xb9\xea\x92\x5a\xbf\xaa\xad\xea\x3c\xdb\x7a\x6a\x3d\xba\x94\x71\xfd\x46\x35\x1b\x65\xf6\x3e\xae\xde\x26\xcc\x4e\x94\xc0\x71\xd5\x19\xf3\x67\xf4\x52\x76\x66\xfc\x3c\x76\x66\x65\x09\xc5\xb9\xeb\x20\xff\xb5\xc8\xef\x8c\x38\x5b\xc4\xb0\x48\x07\x7b\x59\x1a\x0e\x83\x74\x80\x4c\x88\xec\x96\x9b\x47\x9f\xf3\x4c\x14\x04\x3b\xcc\x2a\x08\x50\x96\x56\x83\x82\xf5\xca\x79\x81\x2a\x53\xa5\xeb\xcf\x84\xbc\x2b\xc9\x62\xd9\x77\x86\x28\xf6\x2b\x0a\x7a\xb3\x45\x14\x2b\x59\x85\x2d\x4e\xee\xae\x6a\x40\xab\x7d\xfb\x28\xc5\xa0\xb7\x31\x1e\x6e\x85\xd9\x78\x4a\x40\x3e\x99\x66\xfd\x58\xa6\x59\x8c\xae\x88\x7d\x3e\x6e\xff\xb5\x78\xc8\x09\x29\xf2\x06\x77\xd2\x0d\x83\xe6\x35\x35\xa1\x61\x12\x8f\xaf\xb2\x20\x8f\xb6\xb3\xf5\xdb\x6e\x49\xe0\x8f\xc2\x7c\x0b\x16\x75\x42\x5d\x96\xb1\xdc\x23\x82\x7c\x37\x88\x0d\xe4\xc7\x55\x50\x78\xa4\xbf\x7a\x54\x12\x75\x81\xee\x30\xa8\xe8\xf7\x62\x42\xa3\x4a\x93\xc7\x24\x56\x14\x96\x10\x7b\xbc\x06\x72\xa5\xa4\x8b\x00\xa4\xcf\x85\xa5\x29\x2d\x57\x1a\x96\xec\xcd\x63\x03\x65\xef\xa1\x5c\x7f\x0f\xdd\xa1\x70\x62\x90\x16\x5f\x56\x54\xf4\x64\x48\xe6\xce\x28\xf9\x40\x4d\xb3\x4a\x98\x56\x92\x1b\x2f\x4b\x5d\x87\xef\xb4\x03\x53\xb1\xe9\xac\x9c\x6e\x2b\x29\x65\xcc\x92\x4a\x87\x59\xe8\xb5\x82\x87\x51\x93\xad\x04\x3d\xc3\x2a\xbc\xac\xdf\x57\xba\xaa\xe8\x92\xaa\x4b\xd2\x80\xf7\x59\x55\xab\x7d\x73\x48\x52\x5c\x64\xa5\x0c\xf9\xa9\x63\xb7\x63\x8e\xc6\x5b\x9d\x01\xfc\x12\x8a\xeb\x89\x66\x4f\x16\x6a\x38\x28\xa2\x26\x65\xa3\x76\x26\x65\x7d\xd3\xa4\x6c\xd4\x20\x25\xea\x13\x6a\x75\xc4\xa5\x44\x7d\x5d\x4a\xa4\xfe\x84\x7d\x53\x4a\xd4\x6f\x94\x12\xf5\xef\xef\xfb\xa6\x94\xa8\xaf\x4b\x89\xfa\x7e\xb4\xba\x49\xd9\x04\x86\xd2\xa4\xac\x0f\xe0\x58\x91\x12\xf5\x0d\x19\x4e\x9f\x4b\x89\xb4\xf2\x37\xfd\x3a\x66\x1d\x4b\x29\x51\x7f\xbe\x94\xc8\xec\xc1\x7e\x07\xc9\x10\xfb\x64\x7a\xc2\xa4\xac\x2f\x4c\xca\x94\xd0\xb5\xab\x51\x85\x78\xb8\x95\xdd\xa0\x9c\xa5\x24\x7b\x52\x9e\x3d\x29\xcf\x9e\x94\x67\x16\xe5\x59\x22\xfc\xd3\x37\x37\xab\x61\xf8\x42\xa5\xd6\x46\xb9\xb6\x3e\xa5\x1a\x27\xad\xc2\x27\x6d\xd8\x57\xd7\x86\xcd\xd5\x7e\xd1\x20\x40\x2c\xa2\x12\xb9\xec\x6b\x56\x86\x55\x4a\xb0\x67\xca\x21\x95\x7f\xba\x21\x60\xe4\x71\xed\x64\x85\x2b\x2a\xbf\x72\x6a\xcc\xaf\x3f\x12\x55\x2d\x43\x69\xdb\x28\xbd\x89\xf3\x2c\x65\xf1\xe7\x9d\x08\xa1\xf1\x08\xe5\x03\xa4\x35\x45\xe9\x8d\xf6\x7b\x82\xe3\xa4\xa0\xe0\xe3\x74\xb0\x7d\x1b\x24\xd7\xf5\x27\x86\xe9\xa9\xbe\x95\xd6\xac\x55\x58\x6e\xba\x6e\x85\xce\xab\x16\xbe\xb0\x2c\x85\xb1\xef\x4a\xfe\x92\x20\xe9\x49\x82\x4e\xa9\x7b\x7b\x75\x87\x3d\x42\x49\x74\x3d\xcf\x2b\x2c\x3e\x85\xec\x60\x76\xa3\x00\x07\x5b\xac\xab\x9e\x03\x7a\xc2\x3c\xe8\x1f\xe7\x27\xc7\x04\xcb\x16\x48\x71\x7e\x64\xcd\x00\xa0\x2e\x7d\x7c\x78\x31\x57\x17\x65\x95\xba\x88\xb2\xca\x67\x74\xd7\x97\x54\xf8\x24\x99\xf0\x7d\xa3\xfe\xf0\x28\xbd\x01\xae\x2c\xa4\xb9\x1a\x40\xd5\x38\xcf\x32\xfc\xf1\xec\x50\x6b\x2b\xca\x80\x66\xfd\x93\xc1\x8c\xa5\x23\x7e\x09\x83\x0a\xaf\xc5\xa0\x41\xea\xc3\x66\xb4\x4d\x5e\x72\xab\x2f\x9e\xde\x92\x9c\x39\xfa\x85\x9e\x60\x32\xbe\x8b\x53\x4e\x1e\x5d\x25\x19\x75\x3b\xde\x62\x9a\x31\x2b\x01\xc4\xf3\x4d\xae\x2f\xee\xcc\x02\xb3\x6c\xe5\xcc\xb0\x12\xb7\xc2\xf8\x60\xc6\x22\xf5\x50\x4a\x8c\x80\x4b\x99\x34\x77\x52\x74\x90\x17\x66\x11\xba\xbf\xa7\x81\x1d\xf0\xa4\xd8\xa5\xbf\x1c\x07\x8e\x98\x3b\x4a\x07\x79\xfc\x2f\xd2\x26\x42\x38\x88\x93\xfb\x7b\x87\x6a\x0e\x1d\xa9\x1e\xe6\xa1\x80\x8a\xcd\x4d\xf1\x17\xb5\x0b\x73\x53\x5f\xf9\x0d\x53\x01\xca\x4f\x2b\xa0\xa9\x87\x63\x9c\xd0\x3f\x0c\xe8\x00\xd2\xa8\x69\x29\x1f\x19\x01\x27\x01\xc8\x26\x82\x59\xc2\x79\x96\x24\x28\x7f\x97\xe5\xae\xa3\xee\x33\x50\x8c\xf0\xc8\x7b\xc1\x56\xa2\x93\x96\xe4\x6d\xa2\xd1\x60\x02\x3d\x1a\x0c\x67\xfa\x32\xbf\x9b\xf7\xe0\xc4\x4e\x7b\x36\x49\x65\x11\x1f\x54\xa8\x01\x7d\x8a\x0a\xf3\x7d\x44\x85\x79\x40\x44\x18\x8e\x38\xa2\x70\x39\x7c\xf1\x2d\xc3\x4f\xe5\x88\x0a\x08\xb2\x7c\xba\x3d\x46\xf9\x28\x2e\x0a\x16\x8f\x77\xbd\xa2\xcb\x0a\x74\x71\x86\xc6\xd9\xa3\x10\x60\x72\x4d\x28\xcd\xf9\x42\xb5\x53\xdc\xc2\x98\x69\x22\x99\xc7\x81\x3e\x2d\x1a\x07\x93\xbc\xa5\xb3\x28\xec\x20\x2f\x0a\x61\x5a\x74\x14\xcf\x83\x20\x39\xa5\x2e\x0a\x2e\xf0\x52\x1a\x13\x1d\x8e\x45\xfc\xf2\x86\x66\xb2\xbe\x94\xb4\xd9\xca\x98\x4b\x19\x64\x07\x97\x00\x1a\x05\xb6\xd0\x56\xb5\xed\x7a\x0a\x73\xf5\x03\x21\xb4\x65\xc2\x5c\x6d\xcc\x41\x6a\xdb\x41\x98\x14\xdb\xc1\x04\x0f\xb7\x46\x08\x0f\xb3\xa8\xd8\xe6\xb6\x94\x0f\x42\x76\x5f\xd2\x4b\x60\x0e\xae\xd2\x30\x55\xee\xcf\x8a\x2c\xc7\x6f\xa7\x1d\xa7\xa0\x91\x26\x98\x04\xb6\x23\x15\x15\xd7\x71\x1a\x75\x1c\xf2\x5f\x07\x16\x28\xc8\xc3\xe1\x98\x8f\xb4\x33\x0b\x8a\x8e\xa3\x97\x39\x10\x8d\xc6\x78\xda\xe9\x76\x79\xfe\x2f\x67\x2f\x2e\xc6\x49\x30\xa5\xbf\x7a\xbd\x92\xc3\x60\xdf\x32\x7e\xcc\x81\xdc\x47\xa0\x43\x09\x0c\x37\xf5\x1d\x4a\xa3\x33\x5c\x40\xc3\x0c\xe3\xb9\x61\x86\x29\xba\xe4\x68\x6e\x25\xee\x04\x77\xd3\x9e\x9f\x2f\x61\x25\x3f\xef\x04\x14\xc3\xec\x76\x95\x63\xd0\xcc\xb7\xe5\x28\x8a\x73\x14\xe2\x2d\x9c\xd9\x08\xe4\x75\x1d\x97\x7c\x85\xe3\x42\x5e\x62\xcb\xc3\x96\xfb\x8e\x18\xac\xc3\x92\x16\x29\xd2\x12\x47\x59\x1e\xf2\x9e\x12\xc6\x12\x37\x6e\x5d\x2e\x86\x1c\xac\xb8\x75\x79\xcf\x0f\xd4\xad\x6b\x88\xfb\x65\x6c\xdd\x98\xa7\x79\xdc\x66\xb1\x8f\xe6\x6d\x99\xed\x2b\x14\xc5\xeb\x08\xac\xf2\x45\x2e\xb2\x63\x1f\x2d\xbd\x50\x18\x8d\xc6\x49\x80\x59\x32\x95\xef\xf0\x46\x19\x43\xfe\x4a\xbc\x26\x4c\xd6\x44\x66\x16\x15\xb7\x39\x8f\xcc\x24\x93\x9c\xd2\x34\x5f\x2b\x70\xa2\x73\xc3\xcc\x37\x50\x9d\x39\xa5\x5d\xaa\x08\xf3\xcd\x0e\xc3\xdf\x38\xc2\x7c\x59\xc2\x58\xe3\xfd\x32\x31\xf8\x09\xe5\x27\xc3\x76\x84\xd7\xc8\x24\xbc\xc2\x06\xc2\x6b\x44\x08\xaf\x90\x13\x5e\x23\x9d\xf0\x52\x7f\xc2\x91\x49\x78\x8d\x1a\x09\xaf\xd1\xfd\xfd\xc8\x24\xbc\x46\x3a\xe1\x35\xf2\x27\xab\x13\x5e\x84\x72\x11\x84\xd7\x08\xc0\x48\x21\xbc\x46\x06\x59\x34\xe2\x84\x97\x56\xfe\x66\x54\xdf\x92\x48\x12\x5e\xa3\xf9\x84\x97\xd9\x83\xfd\x54\x91\x21\x8e\xc8\xf4\xb8\xe5\xb2\x3f\x12\xdc\xa4\x92\x23\x52\x21\xbc\x8a\xd5\x90\xc4\x03\x5f\xdb\x3f\x2d\x96\x60\xb9\x39\x1f\x3b\xae\x80\x99\x49\xab\x46\x32\x83\x17\xa3\x27\xa3\xd0\x29\xdb\x13\xac\x4a\x06\xeb\xe5\x08\xd6\xb8\x4e\xb0\x16\x73\x9f\xd7\xe2\xa1\x79\x31\x0a\x96\x17\xe3\x09\x69\x3e\x21\xcd\x65\x91\x66\x9e\x25\xab\x52\xbb\xec\x93\x47\x41\xea\x2a\x43\x7d\x14\x74\xae\x3a\xde\x1f\xf3\xf9\xa2\x31\xe9\x9e\x48\xdc\x27\x12\xf7\x09\x5b\x3f\x18\x5b\xff\xd0\xf4\xed\xda\x11\xc4\x8f\x4a\xdd\xb6\x25\x5e\xa1\x73\xca\x58\x89\x27\x2a\xf6\x09\x2f\x3e\x72\xbc\x88\xb3\x6b\x94\xae\x48\xc6\xf2\x6f\x1e\x05\x1d\xab\x8e\xf5\x51\x10\xb2\xda\x80\xbf\xda\x43\x45\x50\x7d\xe5\x43\x96\x09\xc3\x36\x30\x4b\xbf\xd3\x80\x88\x95\xe1\xf3\xe4\x29\x5a\xc4\x8f\x1e\x2d\x82\xd0\x40\xe1\x52\x34\x10\xbd\x3d\x94\x08\xb2\x37\x2d\x10\x26\x57\x87\xe6\xf4\x6b\x47\x27\xa9\xf8\x26\x13\x66\x83\xf4\x95\x2d\xa8\x29\x58\x55\x2a\xfb\x84\x31\xab\xd1\xcd\x40\xaa\x77\x68\x46\x47\xdf\x51\xac\x41\xc4\xa7\xd4\x0c\xe4\xed\xf4\x3c\x99\x0c\x5c\x87\xcf\x91\x99\x59\x4c\xf4\x84\x85\x6c\x04\xed\x73\xfa\xc7\x26\xe0\x6a\x12\xed\x33\xfa\x6b\x09\x14\xc3\x55\xb0\xe2\x0f\x4d\xbf\x57\x67\xf7\x89\x80\x9f\x4f\xc0\x3f\x58\x12\xbd\x43\x9d\xea\xb2\xfc\x60\xaf\x46\xd2\x9f\xb1\x90\xff\x4f\x94\xfd\x13\x65\xff\xe8\x29\xfb\xeb\x9b\xed\x7e\x96\x44\xcd\x1e\x11\x5a\x53\x86\x54\xbf\x2a\x21\x7f\x85\xfa\x59\x8e\x8e\x84\x1d\x24\x45\x50\x9e\x5a\xa8\xc5\xeb\xde\xd0\x22\xb1\xb2\x98\xcc\xd4\x48\x31\x0a\xbd\xeb\x1b\x8f\x4f\x95\x3a\xf1\x39\xdb\x0e\x0d\x1d\x72\x8d\xa6\xf7\xf7\x2c\x46\x11\xfd\xa1\xa5\x33\xc7\x32\xdd\xc2\x45\x26\x80\xf0\x38\x6c\x2b\xd1\xeb\x72\xed\x1e\x68\x9e\x14\x17\xef\xd8\xd0\xbf\x03\xa3\xfd\x86\xcd\x31\x02\x23\x55\x6b\xcf\x02\xc2\x90\x89\x11\x46\x0a\xb0\x05\x77\xb6\x1d\xb2\x09\xcf\x75\xb3\x25\x04\xb4\xd5\xe7\x28\x94\xe6\x6d\xd4\xa1\x40\xf4\x93\xb3\xed\x80\x92\xbb\x08\x88\x4b\xfc\x1c\xc9\xd8\x4a\xcf\x15\x23\xfe\xfb\x7b\xe7\xbf\x5e\xfe\x97\xf3\x5c\x35\xec\xe7\x06\xfa\xf7\xf7\x8b\xf7\xf9\xc9\xde\xfe\xcf\x63\x9e\xda\xc6\xde\x7e\x9b\x93\x6a\x34\x83\x56\x3f\x9b\xa4\xd1\x77\x68\x94\x2a\x6c\x06\x95\xfc\xfa\xea\x35\x23\x67\x5f\x4c\xc3\xa3\x79\x07\xd3\x10\x39\x90\x65\x98\x81\x2c\xaf\x1d\x44\x5e\x1c\xad\x86\xff\xe4\xca\x50\x4b\x4d\x9c\x8d\xb3\x24\x1b\x4c\xdb\x3a\x28\x30\x61\x04\xd9\xa9\x4a\x20\x11\xfe\xd0\xae\xdb\xd1\x17\x71\x7e\x0d\x97\x71\x7e\x1d\x7f\x5d\xe7\xd7\xf0\xab\x3a\xbf\xca\x05\x1e\x3d\x26\x79\xd6\xf8\x1b\x45\x5d\xed\x3f\xc9\xd1\xfe\x0c\x72\xb4\xab\x39\x49\x77\x02\x1c\x6c\x31\xf7\x04\x81\xdb\x95\x24\x3c\x73\x24\x17\x31\x75\x29\x67\x5e\x5e\x4d\x92\xb7\x3e\x42\xd1\x55\x10\x5e\x53\xc9\x9b\x11\xce\xf5\x81\xb1\x5c\x47\x5c\xc0\x46\xc6\x2d\x85\x6b\xb2\x94\x31\xc6\x99\x51\x2a\x87\x01\x27\x9a\x30\x8e\x29\x40\x0e\xc4\x44\x54\x07\x55\xfa\x9c\x8a\xef\xb4\xb4\x7f\xae\x23\xf4\x26\x8e\xb2\x04\x34\xab\x0e\xcb\xef\xe0\x2a\xb2\x3c\xd9\x82\xc6\xf9\x4c\x23\x37\xf5\x5f\xa7\xde\x9e\xb4\xb4\xa3\xb1\x49\xab\x9f\x9b\x9b\xa9\x77\x4e\xf7\x82\x90\xc6\xb4\x92\xfc\xa1\x14\x9f\xcb\x42\xea\xf9\x55\xd5\x9c\x0a\x17\x2f\xda\x40\xfe\x22\x0d\xf6\x50\x81\xe3\x94\x0e\x9e\x83\xc5\x12\xac\x5a\x77\x2e\x6b\x24\x6c\xa5\x5a\xed\x00\x57\x1d\x80\x0d\x79\xc4\xf3\x37\x3c\x70\x2c\xd9\x05\x8f\xad\x92\x3b\xab\x66\xd7\x51\xa7\x0a\xab\x79\x76\xd8\x84\x44\xc9\x79\x47\x99\xe0\xfd\x7d\x15\x84\xcf\x98\x68\x47\x99\xa6\xda\xcc\x98\x6e\x87\x4d\x49\x2b\x3e\xef\x60\x7b\x17\xb6\xf9\x76\xb0\xb5\x9f\x12\x74\xe6\x1f\x13\x91\x1b\x5c\x3d\x26\x90\x5d\x82\x02\x61\x37\x87\xce\x0e\x0f\x1b\xe6\x04\x49\x92\xdd\x92\x7b\x54\x9d\x1c\xba\x86\x63\x94\x17\x71\x81\xdd\x1c\x54\x01\xa9\xdc\x5c\xa4\x64\x22\x2f\x1b\x63\x83\x48\x19\xff\xaa\x9f\xa3\x62\xe8\x82\x92\x66\x1d\x3c\xaa\xa4\xcd\x22\xcc\x59\xe4\x92\xff\x9b\x95\xd0\xea\x29\xc8\x3d\x9a\x35\x76\xdb\xb1\x96\x56\xb4\x25\x21\x04\x1d\x00\x36\x8c\x03\xcf\x93\x56\x05\x38\xe0\x71\xa8\x68\x76\x90\xdf\xb7\x5f\xcc\x52\xc5\x1f\x91\xfe\x64\x5e\x8c\xec\xef\x28\x2c\x2b\xd4\x52\x6c\xf7\xb3\x7c\x8b\xf7\xc4\x9a\x06\x23\x54\xfe\x2e\x2e\x70\x84\x68\x18\x0b\x1a\x5b\x15\xcc\x9a\x2e\x9e\x12\x56\x02\xc6\x7e\xdf\x2d\xb4\x14\x4a\x14\x8f\xb4\xcf\xa1\x94\x99\x80\xd7\x25\x95\x9f\x98\x80\x2b\x6c\xd6\x5e\x2a\x6f\x80\x36\x10\xa2\x03\xbb\xc9\xe2\xc8\xa0\x73\x21\x00\x58\x68\x01\x48\x55\x2d\xc0\xd5\x5c\x5e\x43\x51\x3e\xac\x81\xb5\x78\xd2\x73\x3e\xd1\x67\xdf\x2f\x7d\x16\xce\x0d\x05\x8a\x52\xbc\x3d\xc4\x78\x3c\x87\x2e\x53\x54\x9c\x81\x41\x68\x25\x0f\x24\xb4\x84\x26\x93\x0d\xa0\xae\xe1\x64\xf8\x4d\x68\x37\x79\x80\x64\x7a\xf5\x8c\x48\xcc\x1c\x40\x07\x7b\x42\x0d\xe7\x3f\xaf\xfe\x86\xd5\x9f\x5c\x82\xc7\xda\x7b\xc1\x55\x96\x63\x57\xbe\x6b\xca\x6b\x38\xeb\xa2\x5e\x07\x97\xc0\xa6\x0b\x15\xa3\x6d\x8f\xd0\x6b\xda\xd0\xb5\x21\x74\x63\xc4\x74\xe5\x18\x32\x5f\x84\x6a\x6d\x1f\x92\x6b\xad\x60\xd8\x65\xf5\xac\x8a\x8c\xda\x8e\x5f\x99\xb8\x7a\x1c\xe0\xe1\x36\x0f\x93\x5e\xd7\x26\xcc\x93\x62\x57\x22\x9d\x2a\x12\x20\xbc\xaa\xf0\xf0\xf0\x87\x16\xef\xdc\x7c\x11\xf1\xce\x70\x19\xf1\xce\xe0\xeb\x8a\x77\x86\xdf\x46\xbc\x33\x7d\x4c\xcf\xf8\xe0\x1b\x89\x77\x4e\x9e\xc8\x87\x3f\x03\xf9\x70\xd9\x6c\x6a\x12\x66\x29\x0e\xe2\x14\xe5\x73\xa4\x34\x28\xbd\x51\x04\x34\xcb\x46\xf6\x29\x9a\xda\xb3\x87\x81\x3c\xa0\xcd\x0d\x12\x9a\x9b\x20\x33\x48\x95\x89\xf1\x3b\x34\x48\x17\x25\x02\xdc\x02\xe2\x65\x2a\x88\x17\x39\x7d\x18\x71\xfa\x45\x54\xd1\xa8\x7f\x23\xa3\x50\x89\x58\xe3\xc0\xb1\x51\x29\x02\x0e\xf6\x2d\xe5\x64\x42\xf0\x8a\x13\x43\x97\x05\xc2\x67\x42\xc1\xe9\x0a\x55\xb7\x5e\x6a\x53\x76\x23\x3e\xff\x01\xc2\x6e\xca\x03\xe1\x41\x5d\x5d\xfa\x93\xe3\x5d\xca\x30\xa2\xdc\xaa\xd5\x01\x4a\x10\x4f\x11\x6a\x5a\x35\x79\x65\x01\x57\xa5\x6e\x56\x87\xe8\x15\xe3\x24\xc6\xae\xe3\x39\xc0\xfb\x94\xc5\xa9\xeb\x6c\x3b\x00\x22\x50\x25\x03\x5a\x69\x50\x9a\x6d\x4c\x35\xae\x5c\x8c\x4b\xa9\xf7\xe9\xcb\x29\x95\x58\x39\x93\xbd\x05\xab\xf5\x27\x23\x67\x28\x9d\x05\x3c\xf4\xb6\xaa\x0e\x5b\x7d\x09\x02\x20\xca\xb7\x65\xb9\x47\x97\xa6\x2c\x50\xce\xae\xfa\x2f\x72\x36\x02\xc3\xcb\x30\xae\x64\x33\x2a\xb1\x4b\x35\x27\x7a\x66\x7e\x57\x96\xc1\x7b\x31\xc3\xa5\x47\xcd\x95\x7e\xa7\xa4\x8f\x44\x2a\x29\xa0\x21\xe8\xc8\x9e\x22\x81\x72\x36\x50\x52\x20\x19\x44\x2a\xed\xbe\xec\x6d\x30\xb1\x23\x32\x52\xd3\xe6\x80\x53\x3f\x7c\x12\xd0\x01\x60\x83\xe5\x58\xa9\x22\x77\x3e\xcf\xab\xec\xb3\x08\xa8\x89\x7f\x44\x7f\x65\xf5\xf6\x8e\x0c\xeb\x80\xea\x29\xd1\xf3\xba\x2a\x73\x53\x70\xb0\x59\xe5\xe9\x06\x5b\x34\xd9\x10\x2b\xaa\x68\x90\x45\x1f\xb1\x55\xeb\xbe\xec\x01\x88\xca\x02\xe1\xc9\x78\x57\x46\xb4\x62\xe4\xa5\x94\xb7\x69\x84\xcd\x8d\x7b\x43\x45\x60\x00\xce\x4a\x38\x93\xe7\xa0\xa3\x1f\x0b\xf2\xe6\xb1\xab\x6b\x82\xd6\x2e\x6f\x69\x0a\xd1\x66\x66\x88\x2d\x8a\x81\xe8\xe6\xcb\xe0\x93\x1d\xe7\x27\x16\xf5\x3f\xbd\xf1\x6e\x82\xbc\x16\x95\xb2\x26\x99\x2b\x2b\xe9\x1b\xd2\x7b\xe0\xe8\xc7\x4b\xb3\x7c\x44\x0f\xe5\x69\x83\xc1\x06\x9f\x4c\x05\x48\x9b\x86\x90\xa9\xa9\x97\x46\xc9\x2a\x5f\x4b\x99\xb4\xc1\x04\xe5\xdd\x1e\x3f\x04\xb5\x98\xcc\x98\x46\x60\x24\x64\xa8\x92\xdf\xe7\xfe\x5e\x3f\xa5\x18\xdc\xdf\xd7\xbf\xbc\xbf\x77\x25\x4f\x40\x1f\xbf\xc2\xc5\x72\x33\xf4\x01\x7a\x9e\x97\x8a\xa1\x6b\xb6\x1f\xdf\xe5\xd8\x8d\x11\xb2\xc1\x97\x30\xf2\x4f\xdc\x50\xe3\xed\xaa\x77\xab\x3d\xc3\x39\x32\xa1\xd3\xa7\xaf\xbd\xf0\x70\x6c\xc2\xd5\x5e\xcf\x6e\xd2\x5a\x38\x69\xc2\x97\x11\x7f\x8b\xb6\xa0\xaf\x6c\xa0\xe9\x1b\xde\x8d\xdb\xc2\x36\x21\x57\xc7\xd5\x81\xdd\x6c\x31\x93\xdf\xf8\x35\x80\xa1\xca\xe9\x1b\xfd\xa8\x47\xcb\x81\xdd\xc9\x8a\x1d\x69\x9f\x1b\x3d\x85\xaa\x4c\xe1\x72\xbe\x4c\xa1\x88\xd3\x81\x99\xd1\x68\x69\xa1\xad\x64\x5c\xd2\x1f\x5a\x38\x90\xaf\x22\x1c\xc8\x97\x15\x0e\xa4\x82\x11\xcf\x17\x06\x3e\xcf\xbf\x86\x70\x20\x07\xa0\xa3\x8c\x69\xed\xc2\x81\xbc\x59\x38\xf0\x48\xf3\x22\xd4\x8c\xfe\x67\x71\xb1\x4b\x15\x2a\x1d\x9b\x5d\x9e\x50\x44\x53\x9a\x8e\x65\x16\x34\xa9\xd9\x71\x36\x76\x41\x09\x29\xe5\x66\xc0\x10\x94\xa9\x94\xaf\x72\xb7\x00\x8f\x36\x96\xba\x3f\x2f\x0a\x99\xfe\x94\x85\x5a\x6d\x0c\x41\x5a\x34\x54\x4b\x55\x1f\x8c\x59\x0b\x31\x25\x83\x03\xe2\x3b\xc5\x59\xbc\xf3\x7f\x9e\xd2\x64\x36\x6e\x4e\x83\xa0\x06\x4a\x84\xd3\x02\xb2\x1e\x3b\x09\x64\xf3\xef\xc4\x25\x14\x51\x9a\xdd\x59\x8c\xd1\xa8\x13\xbf\x51\xe0\x98\xaf\x7f\x6a\x53\x4d\x07\x50\xea\x83\x3b\x09\xac\x74\xbf\x05\xb9\x25\xa9\xea\x8a\x33\xd3\x87\xd2\x49\x20\x1d\x60\x1c\x75\x90\x17\x47\x34\xf3\xdb\x72\xf1\xeb\x19\x29\xbb\x3d\x26\x1c\x4c\x18\xd0\x08\xe1\x61\xa2\x22\x4e\x0d\x3d\xae\xc3\x96\xb0\x2a\x98\x1d\xec\x75\x90\xff\x1a\x79\x07\x7b\x90\xa9\xe0\xc9\x0f\x4a\xf4\x2e\x3d\x58\x25\x2e\xe1\x57\x1a\xb4\x3e\x52\xa8\x04\xc3\x64\xa5\x4a\xc1\xd2\xd3\x18\xa2\x20\xc1\xc3\xad\x70\x88\xa8\x46\xf5\xcb\xcd\x83\xe1\x7a\x73\x0e\xc7\x59\x24\x7e\x66\x11\x82\xe7\x4c\x48\xc2\x4a\xf8\x0f\xda\x6e\x97\x8c\x4f\x6c\x1a\xff\x41\x03\xa5\x8b\x32\xde\xd8\xe3\xc5\xc7\x19\x46\x85\x00\x4c\x38\xe8\x93\x09\x1e\x4f\x30\x2b\x61\x7f\x8b\xce\x2e\x82\x01\x6d\x29\x91\xa5\x2f\xa1\x91\x2a\x68\x12\xbd\x6f\x70\x07\x7b\x38\x63\x3f\x99\x95\x2d\x2e\x4b\x65\x9f\xf0\xb2\x6b\x1f\x2b\x8a\xe6\x2f\xbe\xf0\xaa\xbd\x89\xff\xba\x8b\x14\x43\x1b\xe8\xfc\x85\xf2\xd9\x4a\xd1\x1b\x67\x27\x49\x9e\xf1\x65\x28\x9e\xb9\x7f\x01\x8e\x99\xf8\x82\x67\xbd\x00\x35\x83\x13\x06\xde\x28\x95\x7d\x18\xe5\x2b\x74\xf4\xa0\x35\xbe\xbe\x99\xaf\xe0\xc9\xe3\xc1\x10\x6f\xe1\x3c\x1e\x7d\x09\xeb\x65\x46\xc0\xcd\x3e\xa0\x29\x59\x15\x5d\x06\x83\xbc\x0f\x68\xea\xe1\xec\x30\xbb\x45\xf9\x6e\x50\x20\x17\x68\x12\x17\x6b\x7e\x11\xfe\xa2\x6d\x2c\xb4\x58\xae\xaf\x44\x9a\x45\xe8\xab\xdc\x70\xfd\x4a\xef\x44\x51\xce\xd3\x0a\x22\x8f\xff\x80\x47\x08\x07\xa4\x84\x77\x2a\x32\x44\x23\x8f\x54\xdc\xdf\xcf\xca\x4a\xda\x4d\x76\x82\x7c\x1a\x66\x69\x18\x60\x17\x03\xd8\xed\x3d\xec\x28\xb0\x77\xf3\x5b\x21\xeb\xca\xf1\x8e\x23\xeb\xaa\x00\x9e\x65\x09\x6d\xeb\xba\xc8\xdb\xd9\x3d\x2c\xd8\x0a\x90\xd2\x3d\x06\xae\x60\x09\xce\x79\x12\x11\x06\x12\x40\xe6\xb7\x57\xff\x90\x95\xcf\xfb\x74\xe9\xe7\x81\xc7\x0f\xfc\xfe\xd6\x6c\xe9\x19\xd0\x08\x31\xdf\xdf\xf8\xd5\xcd\x43\x6c\xc7\x62\x64\xdd\x2b\x71\xf2\x5d\xf9\x2c\x1d\x44\xe4\xd9\xc0\xf5\xf6\xca\x8b\x09\xd4\xef\xc8\x45\x6c\xfc\x88\x54\xb2\x2f\x96\x5e\x53\xae\xcb\xd8\xaa\xdc\x2a\xbe\x31\xe1\xc0\x50\x8d\x78\xc9\x2b\x6a\x80\x94\x90\xe9\x36\x91\x09\x36\xe4\x44\x2b\x4e\xb3\x1c\xf3\xbd\x11\x9f\x90\x22\x52\x07\x3c\x9c\x9d\x53\xa9\x97\x0b\xa0\x23\x6a\x09\xe2\x72\xac\x28\x4d\x6d\xb1\x04\x6a\x83\x0e\x9d\x50\x33\x3c\x59\xfd\xa5\xf0\xa4\x30\x83\xfe\x36\x97\xa6\xda\x44\xb1\x79\x4b\x1f\x4b\xe6\x4c\xfe\x1d\xde\xf5\xca\x05\x9b\x9f\x34\xf9\xbb\x42\xfd\x88\xe2\xfb\x85\x88\xfe\x7b\xc2\x15\x96\xec\x06\xf5\x4d\x99\x8c\x0b\x9c\xa3\x60\xf4\x75\x90\x85\xb2\x41\x16\xb2\xb4\x4e\x95\x1e\x66\x61\x90\xbc\x8d\xd3\x48\xc3\x04\x66\x69\xd5\x4c\xe0\x05\xa5\x0d\x29\x52\x50\x42\xe3\x69\xe5\x2a\xb3\xbc\xd8\xde\x92\xf6\xd6\xf5\xb4\xef\x5b\x51\x80\x03\xa5\xf5\xf6\xa7\x22\x4b\x1f\x53\x8e\x77\x6d\xa2\x64\xf0\x5b\xc1\x38\x5e\x7a\xa6\xb4\xf1\x63\x9d\x6d\x8e\x8a\xe5\xf6\x94\x36\x7c\xa4\xb3\x5c\x22\x8d\x9b\xda\x9c\x1a\x6e\xd6\xd9\x2e\x52\xbc\xcd\x0a\x9b\x6a\x87\x28\x88\x50\xae\x43\xa6\xb2\x39\x96\x11\xaa\x5e\x2a\xe8\xfb\x7a\x8d\x14\x59\x59\xfa\x62\xc2\xb0\xad\x7e\x9c\x0e\x50\x3e\xce\x69\x72\x48\x7b\xbe\x43\x66\xd1\xa7\x48\xe9\xb3\xc7\x26\x66\x65\x32\xcf\x89\x6f\x93\x84\xe6\x0d\xa6\x51\xa8\x41\x70\x9d\x77\xb1\xce\xbc\xf6\x7c\x32\x52\x72\x80\x70\x37\xf5\xde\xef\xef\xec\xed\x9f\x9d\x5f\x9e\xff\x76\xf4\xf6\xe4\xb0\xe7\xe7\x10\x97\xdc\x99\x37\x7c\xb0\x2d\x6e\x80\x71\x10\x0e\xdf\x8b\x83\x31\xa9\x6a\x94\xed\xa3\x09\x0c\xe3\x8a\xcf\x0e\xbc\x77\x27\x67\xfb\x07\x3f\x1f\x5f\x7e\xd8\xff\x0d\x26\xde\xf1\xf9\xe9\xce\xee\x3e\xfd\x51\x78\xa7\x3b\x67\x17\x07\x17\x07\x27\xb4\x92\xca\xd2\x8b\x71\x96\x46\xef\xb2\x9c\x9a\x36\x68\x6e\xe0\x94\xc8\xca\x41\x25\x29\x9a\xb8\x08\xba\x81\x9f\x0b\xd9\xb0\x32\x08\xa6\x7a\x1e\xe7\xf1\x28\xc8\xa7\x1f\xd0\x94\x27\x24\x4f\x26\x03\xfa\xc3\x8b\x42\x88\x94\x55\x3a\xde\x39\xda\xa7\xc3\xea\x69\xc5\x72\x74\x3d\x60\x88\xa1\x02\xf0\x26\xa0\xcf\x72\x02\x3a\xdd\xa0\xc7\xff\xec\xbe\xec\x01\x26\x91\x0a\x60\x52\xd6\x66\x73\x86\xc2\x2c\x8f\xec\x73\xa2\x96\xf6\x5f\x7a\x12\x6e\x0e\xb4\x35\x66\x92\xf0\x6a\x58\x50\xe6\xe8\xe5\x2b\x2a\xfa\xe2\xd2\xf5\x6a\x28\x1b\xea\xf8\x09\xe1\xeb\x3e\xaf\x12\x07\x8b\x24\xf1\xea\x54\x0a\x98\xc0\xbc\xab\x9d\x85\x5e\xd3\xe8\x73\xc5\xbd\xcb\xc5\xfa\x90\x3f\x52\xaf\xa6\xef\x6e\xc8\x4d\x0b\x6e\x8c\x7e\x0f\x25\xc8\x3e\xfa\x58\x1f\x7d\xd6\x3c\x7a\x42\x85\xce\xba\x59\xaf\x53\x1b\x70\x06\xe3\xd6\x03\x9e\x75\xe3\x5e\x27\xef\xc6\x3d\xd8\x55\xaf\x2a\x29\xd3\x7e\xc3\xae\x71\x79\x49\x0b\xb3\xa8\x04\xdd\x8c\x60\xa4\x52\xda\x86\x9c\xd1\xa5\x28\x90\x6a\x18\xaa\x6d\x9f\x62\x45\x32\x4d\xb2\x20\x72\x59\x23\xb1\x9d\xb2\x9a\x30\x60\xcc\x9e\x91\xd6\x6f\xb0\xa0\x48\x0e\xb3\xbe\x72\x13\x6f\x84\x70\xe0\x4b\xcb\xb6\xd8\x67\xf6\x0f\xf6\x71\xcc\x48\xe3\x4e\x01\xbb\x98\x29\x9f\x08\x65\xda\xeb\x24\x25\x83\xac\xd9\x18\xf9\xbe\x1f\xbf\x49\x3b\x71\x89\xe3\x11\x2a\x70\x30\x1a\xcb\x77\xdc\x4d\xd1\xed\xb3\xbd\x00\x23\xe0\x0d\x58\x8a\x6a\x57\x99\xb8\x1c\x2f\x7d\xc6\xaa\x5d\x0f\xea\xb8\x9a\xe6\x1b\x8f\xe8\x49\x79\x66\xa9\xe6\x53\xca\xfc\x59\x18\x84\x43\xc4\xcd\x82\x3a\x71\x37\xf7\x76\x77\x76\xdf\xef\x5f\xee\x9e\x1c\x5f\x9c\x9d\x1c\x1a\xaf\x03\x0c\x59\xfa\xe4\x58\x81\x78\x70\xbc\xb7\xff\x2f\xb3\x5d\x14\x6a\x6d\xf6\x76\x2e\x76\x76\xf7\x8f\x2f\xf6\xcf\xcc\x86\x5c\x0f\x16\xdb\x0e\x98\xd9\xb6\x52\x5a\xc5\xb6\x83\x67\x34\xaf\x1b\x76\xc5\x5d\xe7\x6e\x2b\xa7\x0e\x07\xbd\xcd\x4d\x37\xf3\xe8\xdf\x5a\xb1\x30\x95\x21\xad\x85\x23\x22\x6d\x1a\xf3\x24\xcf\xfe\x2b\xf4\xd7\xbf\xc8\x2a\x00\xf9\x91\xf1\x7d\xbf\xa0\xed\x08\x62\x61\xa7\x4c\xd9\x5c\x18\xd8\x2d\x93\x2b\x47\x4a\x04\x9d\xf3\x69\x1a\x92\x0d\x77\x20\x83\x42\x95\x70\x30\x2b\x6b\x87\x59\xa7\x57\x90\x1a\xf9\xa2\xc1\x57\x42\x23\xfd\xec\x2a\xaf\x26\xd2\x4f\xa3\x14\xeb\x44\x99\x0a\xcd\xe2\x46\xa1\x5a\x0b\x3c\x32\x2a\x8b\x52\x39\xc1\xca\x54\x4e\x2e\x8c\x70\x25\xd2\x75\x60\xea\x9d\x9e\x1d\x1c\xed\x9c\xfd\x46\xe9\x13\xd9\x84\xa3\x69\x52\x7f\x7e\xf8\xf1\x67\x5a\xa9\x6e\x66\xb0\x78\x33\xaf\xe2\x34\x8a\xd3\xc1\x56\x3e\x69\x36\x57\x59\x61\x37\x35\x70\x4f\xdb\xf9\xd5\xb7\x33\xcc\xb2\x3c\x8a\xd3\x39\x01\x8d\x57\xd8\x4c\x05\xd8\xd3\x56\x7e\xf5\xad\x6c\xce\x77\xbc\xc2\x16\x1a\x2c\x72\x9d\xeb\xb6\xb0\xb8\xcc\xe0\x8a\x12\x08\x95\x9f\x5a\xfc\x43\x9b\xa2\x65\x5f\xc4\x4f\x2d\x5e\xc6\x4f\x6d\xf2\x75\xfd\xd4\xe2\x6f\xe3\xa7\x36\x79\x6c\x38\x82\xfb\x23\x2f\x72\x16\x5a\x35\xad\x37\x0b\xad\x6b\xcf\x7e\x4a\xed\x91\x45\x2a\x6f\xc2\x35\x34\x07\xa5\xcd\x35\x91\x5e\xd0\xe8\xd0\x17\x34\x38\xf4\x05\xa6\x43\x5f\xa0\xb9\x80\x05\x73\x53\x79\xc3\xc9\x62\x3c\x38\x99\x87\x07\xe7\x49\x57\x84\x71\xbb\xde\x02\xfb\xaf\x29\xbf\x9c\x02\xff\xf5\x2c\xf5\x53\xa1\x8a\xd0\x8c\xd7\x1c\x07\x76\x55\xee\xb5\xd7\xa1\xbe\x0b\xc8\x77\x53\x1f\xd3\x8f\x41\x37\x6f\x60\x63\xb8\xd1\x9f\xf4\x43\xd8\x3d\x39\x3e\xff\x78\xa8\x70\x1d\x97\x87\x27\xbb\x3b\x87\x74\xcf\x17\xb5\xe4\x0b\x41\x9d\xc3\x90\xd2\xe3\xde\xfe\xbb\x9d\x8f\x87\x17\x97\x3b\xbb\x87\x97\xa7\x27\x87\x07\xbb\xbf\x19\xfc\x86\x60\x37\xe4\xf4\x32\x37\x73\x67\x25\x44\xcc\x41\x83\xaa\x1a\x78\x54\x18\xdf\xf7\x03\x78\xca\xd6\xbf\x2a\x4a\x20\xd7\xf6\xef\xec\x1e\x72\x65\x51\x41\xee\x23\x80\x98\xd9\xd7\xab\x9e\xd3\x23\x7e\xe2\xc6\x7e\x37\xe8\xc1\x7e\xbb\xf8\xb9\x43\x33\xdc\x63\xbf\xc1\x95\x72\xd8\x45\x3d\xbf\xcf\x5d\x29\x87\xba\x2b\xa5\xfa\x13\x0e\x4d\x57\xca\x61\xa3\x2b\xe5\xf0\xfe\x7e\x68\xba\x52\x0e\x75\x57\xca\xa1\x3f\x5e\x3d\xdc\x63\x04\x47\x32\xdc\xe3\x10\xc0\x2b\xc5\x8d\x67\x68\x38\x3a\x0e\xb9\x2b\xa5\x56\xfe\x66\x58\xbf\x47\x57\xd2\x95\x72\x38\xdf\x95\xd2\xec\xc1\x8e\x0a\xc8\x10\x87\x64\x7a\xcc\x95\xb2\xf0\x87\x30\x61\xa2\x3f\xe9\x6b\x0e\x87\x8b\x5d\xe1\x35\xba\x23\x2e\xc2\xec\x06\xe5\xd3\xad\x70\x18\xc4\x4b\x49\xf7\x17\x11\x21\x06\xc4\x85\xc4\xe4\x0f\x4b\x67\x04\x5f\x84\xce\xc8\x97\xa1\x33\x92\xaf\x4b\x67\xe4\xdf\x86\xce\x48\x1e\x1b\x9d\xc1\x08\x88\xd5\xe3\x92\x24\x8b\xdf\xe0\x64\x85\x37\xd8\xa2\x13\xb0\xbe\xc4\xbc\x9d\xed\xce\xe8\x78\x34\x57\xf0\x28\x82\x81\x1b\x90\x87\x2c\x67\x0f\x59\xb7\x1a\x48\xaf\x93\x7b\xbb\x04\x29\xa8\x65\x25\xdb\x5d\xf6\x6a\x2d\x8c\xfd\x5d\x57\x33\x7e\x3d\xd5\xeb\x0a\x71\x6a\xa9\x67\x51\x3f\xcb\x47\x6f\x51\x92\xa5\x83\xe2\x22\x33\x85\xd0\x95\x13\x7f\x29\x1b\xbf\x0f\x8a\xa3\x20\x9d\xce\x69\xba\x50\x55\x85\x81\xff\x1a\x2f\xad\x04\xaa\xb5\x7e\x17\xa7\xd1\x4e\x92\x2c\xd1\xd2\x54\xe3\x2c\x68\x6e\xaa\x50\x16\x34\x37\x75\x16\xd6\xe6\x8b\x43\xf8\xaa\xa7\xc5\x6a\x78\xfd\xc0\x37\xae\x82\x35\x37\xa9\x86\x44\x54\xc5\x63\x43\x54\x84\x21\x8a\x9b\x23\x2c\xa0\x34\xcc\x22\x1e\x5f\xe1\x21\x4c\x51\xdc\xc8\x14\x31\xb8\xdc\x6f\x86\x30\x46\xf3\xb2\x75\x7c\x7d\xc6\x28\x56\x18\xa3\x62\x31\x52\x2e\xe6\x21\x65\x02\x5c\x06\x4a\xa0\x3f\x34\xef\x20\xa6\x1b\x9c\xe4\xb1\x60\x41\xe8\xd2\x90\x82\x8b\x60\xe0\x82\x12\xa5\xc5\x24\x47\x07\x7b\x8a\x6b\x74\xe5\x70\x8f\xa0\x73\xb0\xc7\x69\x0c\x07\xbc\x71\x91\x77\x88\x06\x41\x38\xf5\x09\xa5\xcf\xff\x3e\xd8\xf3\x91\x77\xb0\x07\x3a\x55\xe5\x2b\x48\x4a\x7c\xd1\xf3\xef\x2f\x66\xc8\x0c\xb5\x59\x76\xaa\xc2\xe3\x73\xed\x57\x30\x42\xec\xb7\x2d\xa2\x64\xad\x46\x7c\x6c\x58\x67\x95\xbf\x43\xd4\x92\x67\xa4\xec\x9f\xe0\xaa\xf8\xe2\xc9\xb5\x22\xc4\xdb\x52\x08\x72\xde\x8b\xa8\xf6\xe6\xa6\xbe\xde\x47\x0a\x20\x67\x40\x8d\x9e\x6a\x9a\xef\xb4\xb2\xc3\xd0\x14\xb1\xc1\x5c\x35\x72\x42\x3a\x75\x13\x3f\x05\xc6\x5e\x61\xdb\x5e\x61\x6d\xaf\xb0\xb1\x57\xb8\x71\xaf\x70\x7d\xaf\xb0\x65\xaf\x6a\xfa\xe0\x00\xe6\x30\x51\x62\x9e\x02\x37\x59\xa0\x4c\x6f\xbd\x0a\xf2\x38\x27\xde\xc1\x1e\x4c\xe8\xaa\x90\xbf\x96\x1d\x5b\x09\x33\x2d\x9b\xc1\x44\x41\x44\x21\x4d\x92\x10\xb5\xe3\x97\xc7\x26\xbf\x1c\x35\xf0\xcb\x63\xc2\x2f\x47\x9c\x5f\x1e\xeb\xfc\xb2\xfa\x13\x8e\x4d\x7e\x79\xdc\xc8\x2f\x8f\xef\xef\xc7\x26\xbf\x3c\xd6\xf9\xe5\xb1\x1f\xae\xce\x2f\x67\x70\x22\xf9\xe5\x31\x80\x23\x85\x5f\x1e\x1b\xdc\xec\x98\xf3\xcb\x5a\xf9\x9b\x71\x1d\xbd\x8e\x24\xbf\x3c\x9e\xcf\x2f\x9b\x3d\xd8\x5f\x08\x32\xc4\x31\x99\x9e\xc8\x37\x33\x16\x29\x12\x94\x08\x6d\x0a\xbf\x1c\x2f\xa6\x22\x9a\x5d\x8b\x56\x20\x1f\xae\x6f\xfe\xa4\x74\x43\x80\xb3\xab\xb5\x13\x0d\x11\xfa\x13\x11\x0d\xf2\x94\xe9\x0e\xcd\xc8\x0b\x30\xce\x5d\xe7\x9f\xf4\xd6\x83\xa6\x10\x1f\xe9\x1b\x16\xa0\x98\xad\x98\x87\xee\x50\x38\xc1\xc8\x4d\x01\x43\x54\x6b\x7c\x14\xab\x78\x3e\xdd\x97\x3d\xef\x1c\xd1\x08\x19\x9b\x9b\xae\xfa\xd3\x77\x1c\xfe\x54\x52\x1b\x36\xdb\xbb\xdc\xe6\xe5\x77\x67\x16\x01\x31\xe0\xd2\xd1\x1a\xc6\x97\xa7\xe8\x09\xe3\x3f\x61\x7c\x15\x97\x9b\x2e\x94\xcb\xe1\xfc\x79\x92\x08\x9b\x19\x33\xe9\xc4\xaa\x9d\x7d\xbc\xf1\x1d\x84\x89\x9d\x7a\xdc\x39\x5e\xa2\x5e\xc1\xdd\xbc\x12\x02\x6d\x6e\xba\xda\x6f\x9f\xb9\x9d\x00\x88\x4a\x53\x68\x66\x4b\x13\x49\x5e\x9b\x28\x42\x11\xc3\x44\xc5\x51\x7c\x17\xa7\x0b\x93\x99\x06\x16\x54\x9c\xeb\xa8\x38\x30\x51\x71\x35\xc4\xaa\x92\x60\xde\xc2\x81\x33\xe1\xcf\xdc\x99\x21\x3e\x9c\x8e\x13\x24\xb7\xc1\xb4\x70\xca\x12\x2c\x94\xf2\xb0\x23\xcb\xc2\xc1\x41\x1a\xb3\x92\xc7\x14\x66\x79\xdd\x58\x5c\x61\xd1\x87\xd3\x11\xf6\x7f\xcc\x31\x9e\xfb\xec\x54\xee\xc3\x8e\xf3\xdc\xaf\x7c\xda\x0f\xf6\x2a\xf4\x83\xfc\xd7\xb3\x2a\x84\x63\x57\x69\x43\x76\x41\x2f\xf0\xbb\x3d\x00\xf5\x22\x2a\xf7\x76\x11\x28\x81\x20\xd0\x0b\x9c\xe5\xc8\xab\x0e\x39\x0d\xc2\xe5\xb1\x28\x3a\xa9\xf8\xb2\xf0\xab\x3f\x05\x82\x0e\xbc\xa6\x35\x79\x97\x67\x23\xb2\xff\x6e\x0a\x09\xa5\x0f\x60\x5a\x6a\x6f\x40\xe3\x5a\xea\x41\xca\x2c\x8f\x09\xbb\x54\x42\x0d\xb8\xca\x8b\x92\xb0\xb7\x43\x30\x21\xb9\x87\x82\x70\x78\x86\x12\x7a\xe3\x8b\x61\x3c\x16\x92\xa9\x59\xa0\xae\x35\x59\xa2\xee\xef\x72\xc0\x2f\xb8\x11\x1f\xf3\x1c\xf2\xe8\xd9\x8e\xfb\x53\xb2\xc9\x71\x1a\x81\x52\xcc\xe4\xf7\x9e\x5b\x2d\x2e\xc4\x10\xc1\x80\x0a\x49\x83\xe6\x47\x7a\x89\xa9\x59\x5e\x6a\x32\xc1\xc4\x4d\x97\x9e\xdc\x9a\xe6\x13\x58\x27\x73\x48\xad\xfc\xeb\x02\x3f\xaa\x09\x16\x4c\x62\x2a\x1c\xe6\x3b\x94\x94\xcc\x99\x7b\x3c\x4c\xfc\x9c\x07\x2c\xec\x48\x02\x88\x05\x8b\xd3\x3c\x08\x5c\x04\x67\xc2\xef\x2b\x61\x2e\x9f\x41\x49\x68\x82\x55\xa5\xcf\x75\xcf\xf2\x07\x72\x03\x1c\xd0\x8f\x65\x74\xc5\x4f\x21\x21\xc3\x34\xa9\xd4\xce\xee\x61\x61\xf8\xaa\x3b\x80\xc6\x41\xb4\xd4\xf8\xd6\x52\x7a\x1b\xdd\xfa\xab\x52\x59\x4b\x23\x19\x09\x94\x42\x16\x3f\x28\xbd\xc9\xd4\x77\x5d\xc7\x18\x03\xcb\x8b\x2b\x7f\xf6\xec\x5a\x2c\xa5\x07\x32\x30\x39\x6e\x8a\x27\x8d\xca\x2e\xee\xc9\x7a\xb2\xb0\x5d\xaa\x8a\x83\x08\xf0\x07\x2d\xf9\xea\x16\x69\x8d\xe8\x70\x2e\x7d\x9d\x72\x64\x91\x03\xff\x35\xd5\xf5\x34\xae\xbf\x92\xc2\xc6\x77\xfe\xe2\x40\x35\xf5\x8d\x4f\x3d\x47\x02\x97\x99\x29\xcf\x17\xc1\x29\x07\x7d\xf1\x90\xdc\xbc\xd6\x4b\x6e\x8c\x23\xa5\x3a\xa9\x9c\xf5\x0b\xd3\x45\x22\xb9\x86\xae\xb5\xa6\xeb\x1b\x81\x4d\x1c\x66\xea\x3a\x02\x17\x03\x0d\x3d\x35\x46\x57\xaa\x90\x4e\x16\x47\xe1\xd6\x38\xcf\x6e\xe2\x39\xe9\x71\x57\xc0\x52\x3a\xbc\x3f\xb5\x52\xff\x91\xa1\xe2\x07\x62\x1b\x1b\x79\x9c\x2e\x20\x8f\xed\xd8\x66\x67\x82\x87\x59\xce\x65\x16\xb6\xf3\x6d\x7d\xa5\x49\xcb\xb6\x72\x7a\x71\x4d\x13\x8e\xbb\x54\xa4\xf5\x6d\x0c\x33\x82\x1f\xd9\x30\xc3\x9d\xf1\xe4\x63\x71\xa4\x84\x96\xc3\x5e\x5a\x40\x35\xb3\x58\x95\x09\x0b\x26\x42\x20\xb3\x12\x6e\x53\x5c\x7b\x5b\xe3\xb5\x0a\xd6\x8f\x45\x80\x7d\x23\xab\xf7\x87\xd1\x18\xcd\x32\x3c\x25\xdf\x1d\xa7\x29\x0c\x1a\x03\xd4\x4f\xd0\x12\xe6\xf6\x4a\x54\xff\x15\x8f\xd0\x57\x35\x23\x59\xcd\xc2\xa1\x1e\xb7\xe9\xa1\x77\x82\x01\x7a\xba\x10\x5f\xdd\x0d\x64\x9c\x67\x77\x6b\xd9\x41\x0a\xe7\x69\x03\xdb\x6f\xa0\xac\x14\x62\x3e\x11\x0e\xa7\x43\x63\x36\x39\xe5\xaa\x5b\x6c\xc6\x26\x7b\xe0\x0e\x33\x30\x6a\x79\x7c\x17\xa7\xe2\xee\x6e\x07\xc5\xd6\x28\x48\x2d\x47\xe0\x91\xcb\x94\x75\x62\xb6\x2e\x0b\xce\x65\x0c\x88\x87\x88\x7f\x57\xa1\x6f\x57\x23\x59\xe6\x45\x4f\x7b\xe0\x09\xa8\x81\xfc\x53\x33\x65\x4f\x96\xd6\x4f\x96\xd6\xdf\xde\xd2\x5a\x56\x0e\x83\x62\xe8\xc0\x7f\x9c\x9f\x1c\x7b\x4c\x09\x1f\xf7\xa7\xa0\x44\x77\x38\x0f\x42\xfc\x31\x8e\xcc\x84\x26\x34\xf0\x77\xb7\x21\xbb\x73\x43\x6e\x68\x2d\xb5\xb4\x1a\x13\x51\x0d\x79\xd8\x6b\xd6\x3c\x49\x2d\x8b\x61\x85\x95\x76\x31\xf9\x90\xc6\x50\x4c\x7c\x61\xcd\x6d\x04\x1d\x9c\x49\xed\xd4\x39\x8d\x42\xce\x15\x54\xe3\xa0\x28\xe2\x74\xe0\x74\x78\xc4\xe6\xe2\x94\x15\x30\xb5\x11\x06\x1b\x57\x39\x0a\xae\x37\x68\xdb\xdb\x20\x4f\xb5\xb6\xbf\xb2\x02\x5b\xdb\x30\x8f\x71\x1c\x06\x49\xd5\x78\x97\x97\x88\xd6\xd5\xa9\x85\x33\xad\xeb\x4e\xb7\x07\x35\xf8\x55\x81\x80\xd1\xe9\x52\xfd\xfb\xac\x94\x5a\xbc\x0e\xe6\x4d\x3a\x39\x0b\x3b\xd9\x98\xd3\xbb\x62\x74\x95\x6d\x82\xd6\x8c\xdd\x34\x22\x25\x0d\x3f\x4e\x03\x59\x1a\xb1\x72\x65\xa0\xdc\x8b\x60\x30\x40\x22\x0c\x1d\x22\x35\x46\x09\x0f\xa5\x4b\x03\x42\x96\xa5\x54\x76\x24\xde\x24\x8e\xb8\x31\x62\x75\xd0\x68\xce\xb5\xd5\xcd\x2a\x54\x09\xe7\x2c\xee\xbb\x34\xd9\x39\xc7\xa5\x55\x3a\xa4\x14\xdd\x3e\xdb\xcf\xf3\x2c\xdf\xc0\xc3\x3c\xbb\x7d\x86\x58\x6e\xee\xc2\xef\xce\x58\x70\xfa\x8e\xf3\x5f\x2f\xff\xcb\x81\x38\xc6\x09\xa5\x98\xf0\xb3\x7e\x36\x49\x23\xa7\xec\x51\x33\x4f\xae\x6d\x52\x75\x93\x75\xa9\xb1\xca\xf3\x61\x2f\x2d\xf4\x3b\x50\xf1\x87\x8a\x64\x41\x6f\x62\x5b\x16\xaa\xc1\x64\xbe\x0b\xe5\x1a\x2c\x42\xcd\xe5\xfa\x76\x73\x92\x6a\x08\xfe\x18\xa7\x51\x93\xb0\x5e\xe0\x0b\x9a\x4b\x21\xcd\x22\xb4\xb9\xa9\x62\x0e\x5a\x5c\x88\x88\x92\x54\x6c\xbf\xee\x7d\xaf\xd6\x20\x97\x1d\x57\x77\x48\x09\xc9\xa4\xd4\x57\xb7\x49\xdd\xbd\xd5\x74\x77\x96\x68\xa7\xed\x88\xb0\x27\x56\xeb\x0b\x09\x8f\x56\x71\x15\xae\xc7\xb4\x4b\xeb\xc4\x68\x65\x84\x12\x66\x69\x8a\x42\xbc\xc5\x78\x65\x6a\x2e\xf1\x21\x4e\xc9\x41\xd7\xee\x6e\xde\x65\x67\xb2\xe7\x23\x82\x31\x96\x87\xe8\x37\x41\x44\xde\x29\x69\xf0\x2e\xcb\xc9\x85\x13\x7f\xcb\x26\x58\x1a\x68\x3c\xf7\xfd\x9c\xa9\x11\xc9\x3f\xac\xa5\x4f\x2e\x79\x29\x4c\xcc\xd7\x8d\xba\xc8\xe1\xb5\x0a\x71\x2b\x25\x6e\x0e\x9d\x7e\x9c\x17\x98\x1f\xb3\xda\xb5\x75\x00\x7d\xde\x8a\x4e\x5e\x3e\x44\x32\x57\xa0\x07\x89\xe5\xac\x57\x93\x41\x7a\xba\x9a\xeb\xbf\x9a\x2d\x4c\x43\x05\x31\x91\x7e\x19\x62\x42\xda\x93\xd6\xde\x85\x25\x0e\x5f\x2d\x98\xf4\x03\x8f\x1e\x87\xb3\x50\x3a\x63\x69\x91\x67\x09\x9a\x27\xbd\x81\x81\x72\x7c\x1f\x3b\x5b\x36\x47\x7e\x03\x83\xa5\x25\x39\x6d\xbd\x63\x0d\x9b\x6a\x96\x27\x51\x24\xc1\x14\x55\xd6\xcc\x4d\x4c\x90\xe0\xa7\xde\xd9\x24\x41\x05\xcd\x9f\x38\x3b\xd8\xeb\xa4\xde\x39\x0a\x73\x84\x45\xa2\xa1\x54\x0b\x0c\x7e\x31\x1d\x93\x22\xf2\x0f\xa4\xdf\x75\xf8\xf7\xe4\x79\xd9\xdc\xe4\x41\xf8\x14\x18\xa9\x72\xfb\xce\x51\xd2\xd7\xcd\x72\x59\x2a\xab\xa6\xdb\xb9\x9c\xa5\x81\x79\x77\xb5\xa6\xe6\xe5\x95\x6f\x53\x2a\xc3\x92\x6f\x6e\xca\x95\xa8\x22\x95\xbb\xd5\x0f\xc5\x3e\x86\x36\x3a\xd8\xab\x6e\xbd\x62\x43\x38\x46\xe8\x7a\x27\x49\x5c\x87\xdd\x1f\xc0\x53\x50\xb9\x8e\x58\x0a\xb2\x6f\x07\x7b\x60\x03\x91\xa5\x96\x0b\x44\x01\xc2\x54\x89\xb0\xee\xeb\x36\x47\xb2\xdc\xa9\x84\x1b\xd5\xfb\x49\xfe\x59\x8d\x7c\xc4\xd9\x38\x4b\xb2\xc1\x3a\x04\xf5\x12\xd4\x0a\x0e\x21\x3f\xac\x18\x2f\xfe\x22\x62\xbc\x62\x19\x31\x5e\xf6\x75\xc5\x78\xc5\xb7\x11\xe3\x3d\xba\xe0\xd5\x04\x17\x4f\x9a\xfd\x89\x28\xda\x78\xb0\x43\x51\xd1\xe0\x50\xc4\xa0\xf2\xe8\xaf\xdf\x9f\x3b\x51\xa1\xb8\x13\x65\x8b\x9f\xbe\xec\x81\x64\x9d\xee\x93\x69\xb1\xf1\x76\x2a\x2f\x78\xf9\x20\x2e\x17\x46\x22\x68\x08\x23\x91\xc8\xf2\xc4\xdb\xcb\x6e\x53\x96\x44\xa2\x30\x98\xa7\x03\xd1\xad\xe2\xcb\xea\xf3\x8c\x1c\x96\xda\x73\x5f\x95\x29\xa8\x0d\x0c\x6f\x56\x9f\xb2\x3c\x4d\x0d\xce\x6b\x62\x9a\x5c\x71\x2b\xae\x3e\x22\x4f\x4a\xe2\x7d\x1c\xaf\x30\xf6\x5a\xbf\x72\xe4\x75\xc9\x50\xf3\xe8\x2d\x2b\xa0\x8f\x5f\x17\xad\x34\x8d\x3d\x70\x11\x8c\xdd\xd8\x9d\x95\x30\xb1\x04\xf0\xc0\x34\xdf\xa3\x12\xb1\x03\x86\x9a\x27\x55\x24\xaf\xcf\x88\xfa\x51\x8d\xdb\xf9\x51\x5d\x99\x7e\x54\xe3\x06\x3f\xaa\xab\x2e\xea\xf9\x63\xee\x47\x75\xa5\xfb\x51\xa9\x3f\xe1\x95\xe9\x47\x75\xd5\xe8\x47\x75\x75\x7f\x7f\x65\xfa\x51\x5d\xe9\x7e\x54\x57\xfe\x68\x75\x3f\xaa\x10\x46\xd2\x8f\xea\x0a\xc0\xbe\xe2\x47\x75\x65\x78\x39\x5d\x71\x3f\x2a\xad\xfc\xcd\x55\x1d\x29\xf4\xa5\x1f\xd5\xd5\x7c\x3f\x2a\xb3\x07\x3b\x5e\x23\x43\xbc\x22\xd3\x13\x7e\x54\x57\xc2\x8f\x8a\xfb\x50\xc1\x3e\xbc\x52\xfc\xa8\x26\x8d\x44\x13\xf5\xf8\xd8\xde\x62\xc7\x6d\x2b\x47\x83\xb8\xc0\x28\x47\x51\x3d\x70\x4b\x9e\xc5\x11\xca\x69\xd4\xca\xea\xc3\xfa\x77\x8f\x2b\x85\x06\x9f\x3e\x99\x67\x90\xe8\x73\x66\x1e\x62\x05\x0e\xf2\x41\x80\x51\xbd\xf1\x63\x9c\x28\x75\xf0\x9d\x9b\x7b\x91\xb6\xf8\x0a\x46\x54\xdc\x2d\x85\x0d\x6c\x26\x3c\x5d\x65\xdc\x74\x2d\x2b\xa3\xee\x35\xb4\x94\xd1\x15\x9f\xee\x04\x0f\xa5\x51\x74\xb1\x9d\x91\xdf\xff\xb9\x15\x66\x11\xda\xba\x8d\xf1\x70\x6b\x92\x27\x0d\x36\xd8\x38\xcb\xe3\x78\xdb\xfa\xe9\xd7\x35\x31\x6b\x22\x90\x52\x98\x6b\xe4\x51\xee\x3b\xd4\x04\x5c\xcc\xcb\x81\x6e\xea\x3b\x69\x30\x42\x0e\x88\x53\x97\x51\x4f\xa0\x81\x94\x24\xe0\xf8\xf8\xf2\x95\x48\x49\xdc\x4d\x7b\x7e\x5e\x5e\x4d\xe2\x24\xfa\x98\x27\xae\xce\xf6\x5e\x05\x05\xfa\x98\x27\x65\x36\x46\xf4\x11\x60\x24\x0b\x1b\x0a\x65\xfe\xf8\xf8\x20\x0f\xd1\x51\x81\xd1\xfc\x83\x68\xcb\x71\x36\x9e\x8c\x1d\xe0\x51\x58\x29\xec\x3a\x05\xa6\x71\x95\x1d\xbe\x25\x08\x78\x78\x88\x52\x9b\xdc\x77\x16\x70\x03\x67\xfa\xd2\x9e\x93\xef\x3a\x88\x26\x67\x46\x50\xab\xda\xcd\x22\xd4\x61\x8e\xc6\x1f\xcf\x0e\x76\xb3\xd1\x38\x4b\x51\x8a\x5d\xe4\x85\xd4\xd9\x51\x1c\x87\x0e\xb9\x69\xa0\x0c\x93\x8c\x3c\x27\x3a\xa7\x5c\x0d\xd6\xcb\xd1\x28\xc3\xc8\x01\x34\x76\x7f\xdc\x77\x1d\x31\xb4\xca\xe1\x1b\x79\x14\x08\x90\x4a\x1f\x0e\xd3\x3c\xe4\xd6\xac\x5e\xfc\x90\x5f\xe1\xff\x8f\xbd\x77\xef\x6e\x1b\xb7\xf6\x40\xff\xf7\xa7\x60\x78\xba\x7c\xc8\x53\x48\xb6\x13\x67\x26\xa3\x73\x98\x8c\x27\xc9\xb4\xe9\xe4\x75\x1d\x4f\xa7\xbd\xaa\x56\x0a\x91\x90\xc5\x9a\x22\x55\x10\xb4\xa3\xca\xbc\x9f\xfd\x2e\x3c\x09\xf0\x21\x91\x92\xec\xd8\x19\xb7\x6b\x4d\x2c\x12\xc4\x1b\x1b\xfb\xf9\xdb\x09\x5c\x7d\xa6\x59\x89\x6f\xe5\x4c\xfb\x30\xae\xa3\xd3\x3e\x8c\xcd\x32\xb7\x7a\x4a\xe7\x90\x72\x16\xa8\xa4\xb0\x11\x4f\xfb\x18\xcd\x23\x48\xe5\xa1\x2c\x45\xd6\xa7\x4f\x1f\x6c\x60\x5b\xf4\x4f\xba\xf9\xde\x31\xb0\xfd\xd4\x76\xbb\x4d\xc2\x94\xe5\x37\xa8\x9b\x07\xf6\x26\x45\xa4\x77\x09\xa3\x30\xe0\x01\x82\xd5\xb7\x35\xbb\x64\x92\xe0\xd9\x41\x7d\x01\xad\xaa\x02\x5b\xab\xa7\x3b\xe9\x76\x28\xdc\x9b\x12\x32\xef\xf1\x4c\x52\x4d\x49\x9d\x38\x95\x4b\x41\x08\x92\xbd\x5d\x45\xbb\x65\xde\xd2\xae\xed\xfc\x40\xa9\x32\x41\x6d\x01\xa3\xc3\x83\x48\xdd\xb6\x12\x96\x38\x6d\x92\x7e\xfd\x29\x9a\x41\xdb\x05\x61\x49\xfc\x35\xcf\xc9\x0a\x0a\x0f\x60\x9d\x08\x1c\x7b\xb2\x6a\x11\xe2\x0b\x1c\xec\x25\x2b\x64\xe0\xd8\xe0\x23\x70\xa3\x0c\x8c\x1b\x64\x60\x5c\x96\x81\xb1\xc1\xee\xe2\x2a\xbb\x0b\x0b\x19\xb8\x1d\x8e\xd6\x67\xb1\x6b\x12\x9c\x32\x3b\xc3\x3b\x38\xcf\xaf\xc2\x28\xa2\x22\x12\x4e\x16\x8e\xbb\xac\x16\xa3\x12\x88\xda\xaf\x3f\x33\xbd\x16\x8f\xcc\x96\x24\x59\xe4\x87\x51\xdf\xf0\x32\x91\xcb\x61\x50\x28\x49\x4e\xb9\x3a\x19\x79\xe9\x5e\x41\x9d\x1f\x49\xea\xcc\x02\x08\x3d\x93\x6e\xa5\x2e\x5d\x4f\xe7\x10\xc4\xfd\x97\xb2\x6d\xd7\x81\x00\x81\x14\x2c\x55\x6f\x06\x4a\x4f\x9e\xbb\x39\x8a\x52\x64\xd5\x7c\xa3\x6e\xb9\x30\x2f\x75\x91\xb0\x41\x84\x13\xe7\x51\x79\xd4\xfd\x29\x4c\x1d\xe4\x16\x77\x69\x36\x44\x23\x36\x9e\x78\x4f\x49\x29\x84\x69\xba\x45\xaa\x28\xbe\x55\xdc\xea\x3c\x8b\x44\x25\x71\xa1\x72\x2d\x17\x60\xfa\x59\x8e\x55\x1c\x9a\x58\xc5\x72\xff\xcd\xbd\x61\xfa\x00\x57\xfc\x6d\xc0\x15\x27\xde\x14\x84\x9b\xc1\x15\x8b\x4b\x29\x0a\x51\x4c\x0e\x84\x95\x9d\xdf\x3b\x8d\x69\x45\x35\x1a\xc7\x73\xf8\xed\x95\xb5\xa0\x00\xbb\xcb\xb8\x89\xa8\x31\xe5\xa7\xb6\xc9\xe2\x46\xa2\x16\x37\x10\xb5\xb8\x4c\xd4\x62\x63\xfa\xe3\xea\xf4\x63\x8d\xa8\x95\xb1\xf4\xb9\xe1\x8f\x0e\x2a\x6a\xc8\xd9\x87\x1b\x36\x75\x44\x37\x35\x16\x9b\x3a\x32\x37\xb5\xfe\x13\x44\xe5\x4d\x1d\x35\x6e\xea\xe8\xfa\x3a\x2a\x6f\xea\xc8\xdc\xd4\x91\x17\xb7\xd9\xd4\x06\xbc\xa9\xd0\x4e\x5f\x5f\xc7\xb9\x0b\x22\x17\x40\x6d\x53\x47\xa5\x2d\x17\x89\x4d\x6d\x3c\x7f\x11\xad\xb8\x2a\x40\xb4\x7a\x53\x97\x5b\x68\xde\x18\x4c\x23\x22\x34\x23\xbb\xcb\x3e\x40\x1a\xae\xf9\x20\x99\x31\x11\x66\x55\x6e\x82\x26\x05\x79\x00\x09\xec\xa5\x4c\x9d\xa8\x5c\x95\xaa\xea\xf2\x75\xfc\x42\x5d\x5a\x46\xda\x2b\x10\x31\xa2\x5f\x3c\x64\x10\xf3\x69\xe9\x21\xed\x83\x0d\x42\xfe\xb4\xe5\x6d\x1d\x85\x29\x41\x31\xc2\xe2\x86\x0d\x92\x59\x5f\x3d\x72\x44\x21\x8d\x0e\xb0\x2b\xfd\x13\x22\xfc\x05\x0c\x82\xbf\x86\x69\x38\x0e\xa3\x90\x2c\xf8\x85\xe8\xb8\xb5\xb7\xbd\xaa\x93\xc9\x52\x97\x48\x56\x3d\xcf\x30\xfd\x06\xf0\x5e\xea\x5f\x9a\x62\x45\x6d\x4b\x95\xba\x61\x10\x38\x6a\x18\x41\xe2\xb3\xaf\x1d\x17\x2c\x2f\xd5\xb7\xfc\x62\x1f\x70\x25\x31\x81\xf8\x1c\x91\xfe\x34\x0c\x02\x14\xef\xef\x6b\x3d\xea\x1d\xb9\x79\xee\xe6\x57\x53\x14\x9f\x5c\xc2\x30\xa2\xa7\xad\x22\xf8\x9a\xad\x28\x49\x57\xd4\xf7\x82\x4e\xd5\x47\x9c\xcc\xc2\x14\x39\xb1\xe6\x35\x55\xdb\xeb\x9a\x3e\xea\xfa\x21\x87\xb9\x50\xb2\x3e\xb9\x03\x51\x69\x1f\xa3\x34\x89\x2e\x69\xbf\x72\xde\x6b\xe4\x1d\xba\xcb\x61\xbf\xdf\x2f\x2f\x5b\x03\xca\x02\xe9\xc3\x71\x82\x09\xc7\x0a\x68\x5c\xeb\x1c\xfa\xff\xce\x42\xcc\xc6\x1f\x4e\x9c\x72\xb1\x7e\x1a\xfe\x07\x3d\xaf\x4f\xdf\xf0\xe7\xb3\xb3\x8f\x9f\xdf\x9d\xfc\xed\xf3\xcb\x0f\xef\xdf\xbf\x7e\x79\xf6\xe6\xc3\xfb\x4f\xb6\x5b\x9e\x46\x48\x20\x17\x97\x03\x87\x73\x74\xb1\xd7\x30\x88\x30\x0e\x1c\xe4\x3d\x7f\xf4\x08\xf5\x45\x02\x5b\xc7\x65\x49\xe2\xd0\xbf\x33\x94\x92\x5e\x18\xd8\xa3\xfd\x7d\xd2\x0f\x63\x3f\xca\x02\x96\xd0\xbd\xb1\x9c\xeb\xee\x15\xd8\x69\xfb\xfb\x36\x41\x5f\xc8\x01\xba\x44\x31\xe9\x71\x93\x02\xf7\x2b\xd3\xbe\xf7\x13\x26\x53\xf4\x28\xef\xc4\x12\xd5\x09\x6d\x87\x3e\x19\x8c\xfc\xa4\x8e\xdb\x8f\xd1\x17\xe2\xb8\xfc\xb7\x6e\x92\xdf\xdf\x77\x84\x27\x41\x84\x20\xdd\x19\x2e\x88\xc5\x32\x1c\x3f\xfe\xc1\x75\xf3\x4a\x95\x74\x7f\x20\xca\xdb\xf1\x0f\x90\xd8\xf7\x7a\x11\xee\xca\xc0\x59\xbc\xc8\xcb\x1c\xdd\x50\xc0\x09\xc8\x90\x8c\xc0\x36\xbc\x9d\x0b\xd2\x72\xbd\x8c\x06\x0d\xe3\x6d\xeb\x0d\x2b\xfd\x65\x64\x6c\x88\xb7\xad\x18\xba\xdd\x59\x9e\x2a\xd2\x79\x6d\x96\xa7\xba\xec\xc9\xad\x53\x2f\x8b\x9c\xc8\x4c\xb5\xb7\xb2\xc4\xba\x56\x78\x29\x96\xe7\xb0\x37\x87\x18\xce\xd2\x16\x52\x78\x81\xce\x26\xd8\x42\xc5\x00\x5d\xde\x27\x6e\x6d\xf1\xc0\xad\xdd\x6d\x6e\x4d\xad\xd4\xf9\x37\xed\x49\xf3\xe1\x46\x3c\x69\xce\xdb\x78\xd2\x7c\xbe\x5d\x4f\x9a\xf3\xaf\xe3\x49\xf3\xf9\xde\x78\xd2\x30\x86\x8c\x40\x4c\x7e\xd3\xb9\x46\x29\x7b\x34\xbc\xad\x09\x18\xd1\xa7\x34\x9c\x38\x76\xef\x88\x72\x22\x85\xa3\x1d\x01\x36\x77\xd7\xed\xeb\xee\xe1\xdc\x71\xd7\x76\x0b\x0b\x84\xc9\xbc\x12\x57\x38\xfb\x92\x3c\x17\x7a\xd4\x8f\xde\x52\x85\xcc\x0d\x1c\x4a\x08\x94\x72\x8c\xc3\x72\xeb\xb6\x13\x37\x07\x57\x9e\x73\xa8\x79\x8b\x3a\x2e\x78\xed\x0d\x89\x99\x97\x18\xd8\x7f\xeb\x9d\x0a\x2e\xeb\xcd\x2b\x9b\xfd\xe4\x1a\x6e\xfb\x94\xa7\xe6\xb5\xb9\x96\xeb\xa2\x59\xdd\xca\xe5\xb0\x70\xa5\x1c\x96\x34\xbc\xad\x51\x5d\xb8\x20\x5b\x5d\x98\x85\xed\xb1\xfb\xfe\xe0\xcb\x14\xdb\x2e\xf0\x9b\xf4\xc0\x88\x90\x30\x3e\xa7\x55\x06\x5b\x48\x76\x97\xba\x64\x37\x13\x42\xdc\xa5\x2e\xd9\xcd\x4b\x0f\x0d\x4d\xcc\xa4\xf4\x52\x75\xdf\x06\xe3\xd2\x2b\xd5\x61\x30\xdd\xb9\x54\xc8\x6c\x22\xbf\x9e\xbe\xa5\x9b\x02\xaf\xda\x39\x00\x79\xcf\x3f\x16\xc1\x99\x42\x99\x09\xe9\xa5\xf2\x1f\xc4\x12\x05\xe4\xda\x2f\xc3\xee\x58\x96\x27\x78\x8a\xf2\x4f\x9f\x5f\xbf\x3f\xf9\xe9\xed\xeb\x57\xb6\xab\xdd\x84\xa8\x1f\x17\xee\xb1\xfc\x87\xc0\xe6\x8c\xd3\xeb\x6b\xe1\xec\x4b\x7f\x80\xda\xaa\x55\xb6\xea\xa6\xda\x55\x78\x98\xd6\x88\xf6\x4c\xb4\xa5\x05\x91\xa9\x26\xd5\x33\x80\xda\x0a\xc7\xeb\xe4\xe1\xac\x62\xa2\x95\xcb\x51\x2a\x38\x4e\x82\x85\x66\xd9\xd4\x98\x43\x2a\x61\x49\x1f\xec\xa5\x24\x09\x98\x51\xb1\xaa\x3e\xb4\x20\xc0\xbd\xa3\x47\x9e\xe7\x10\x8f\x48\x70\xc8\x7f\xc4\xb6\x2b\x51\x64\x50\x9f\xe0\x70\xe6\xb8\xae\x00\x88\xa4\xef\xdc\x7e\x18\x07\xe8\xcb\x87\x09\xfd\x49\x1f\xbc\x88\x07\x28\x77\x41\xef\x48\x8a\xcc\xac\x4a\xcc\xe5\x29\x56\xab\x8f\x28\xdb\xd6\xd4\x0f\x11\x0f\xfb\xe8\x90\x47\xc2\x5a\x27\x18\xc3\x45\x3f\x4c\xd9\xbf\x0e\x71\x05\x62\xab\x14\xec\x1c\xc4\x9c\xa2\x11\xe5\xda\x7c\x48\x28\x21\x64\x81\xae\x02\xb2\x5b\xd9\x08\x88\xfc\xee\x83\xf3\x41\xa4\x07\x24\xcc\x5c\x4b\xf7\xb5\x7c\x47\xf2\xdc\x05\xb1\xeb\x82\x61\xcc\x26\x70\x94\xd7\xfb\xab\x97\xf6\xf8\xf0\x90\xf6\x20\x17\xe2\xe7\x47\xc6\xab\xf3\x25\x90\xd1\xc0\x43\x4c\x7f\xc1\x91\xb0\x9f\xd3\x55\x33\x0f\xe6\x30\xa2\x05\xd2\x91\xcc\x43\x11\xf1\xef\xa1\x2b\xd7\xc1\xb2\x5d\x30\x0c\xe9\xb3\x64\xe4\xa5\x62\x01\x2c\xdb\xd5\xd7\x09\x64\xde\x32\xc3\xd1\x20\x14\xeb\x04\x78\x86\xf0\x41\x24\x7f\x0b\x91\x63\xf0\xc1\x59\x52\xca\xfe\xe1\xfd\xd9\xeb\xf7\x67\x9f\xcf\xfe\xfe\xf1\xf5\x68\x60\x6b\x1e\xd6\x07\xff\x4a\x93\xf8\x7f\x2d\x7f\x4a\x77\x1d\xf1\x32\x32\xe9\x3d\xb3\x73\x70\xe5\x24\xae\x0b\x68\xef\x99\x10\x06\xa8\x28\x37\xc0\xcc\x66\x9e\xf5\x39\xb5\x15\xb8\x63\xde\xeb\xd5\x7a\x77\x75\xf0\x32\x29\x81\x0b\x98\xc7\x21\x29\xa5\x77\x34\x4a\x00\x71\xe8\xf4\x67\x0c\x8a\x12\x2c\x73\x4d\x0a\xc7\x2e\xbd\x58\xff\xf4\xfa\xcc\x66\x2d\xf0\x59\x70\xd9\x3e\xd4\xbe\x34\xc7\x5f\x6c\x63\x3a\x76\xdb\x7d\x91\xb1\x65\xf2\xcc\xd0\x73\x27\x63\xfa\x0c\x77\xe0\x54\x30\xe1\xf9\x9b\xfd\x7d\xfe\xaf\x60\x0e\x9f\x1f\x5e\x5f\xeb\x4c\xb1\xf8\x5c\xbd\xa5\x22\x84\x68\x48\xbc\xda\x43\x51\x8a\xd4\x81\xfe\x58\x6d\x7a\x0f\xa9\xaf\xf7\xf7\x1d\x31\xa8\x0c\x47\xc5\x00\x5e\xb0\xde\x67\x38\xf2\xfe\xf9\x87\x25\xfb\x23\xdf\xff\xc3\x12\xe5\xff\x1c\x94\x9e\xbe\x60\x4f\x15\x5b\xd6\x38\x37\xde\xda\xbd\x01\xb2\x7c\x82\x88\x3f\xfd\x2d\x24\xd3\xb3\xe4\x02\xc5\xd5\xd8\x0a\x79\x59\x89\x60\x84\x4f\x51\x76\x5e\x04\x28\x30\x97\x90\xd8\x7b\xce\x2a\x71\x6c\xfb\x8f\x08\x88\x73\x4a\xb8\xf3\xa4\xb6\x73\xed\xbf\xf5\x5e\x72\x81\x99\xb5\x64\x0f\x0a\x3d\x8f\x0a\x65\x78\x61\xdb\x5a\xf4\x48\x0e\x88\x1c\x1a\x83\xcd\x94\x27\xb5\xac\xf2\xdb\xab\xf3\xa6\xd5\x3c\x78\xfb\xe6\x09\xaf\x27\x0d\x2d\x06\x8a\x94\xba\x10\x7a\x62\x98\xb8\x32\xcc\x61\xac\x72\xa0\x9e\x7d\xf8\xe5\xf5\xfb\xd1\x40\x03\x46\xd5\xc7\x89\xb4\x71\x62\x6d\x9c\x20\xf2\x48\x5f\x71\x0f\xb2\xef\x9a\x39\x53\xd7\x60\x3a\x10\xa4\x45\xec\x67\xe8\x91\xb2\x0a\x33\x02\xcb\x64\x8e\x62\xa6\x5a\x25\x7d\xa5\x33\x14\x4a\x56\x37\x07\x33\x94\xa6\xf0\x1c\x0d\x88\xaa\x25\x62\x83\x63\xc3\x13\x67\x00\xc5\x04\x53\x99\x84\xf0\x33\x22\xfb\x5a\x47\x2b\x86\x04\xc4\xa3\x22\x23\x53\xa1\xf3\x23\xee\xf5\xb5\xc3\x19\x7a\x75\xf4\x5d\x80\x4d\xfa\xa3\x3c\x6e\x55\x1a\x59\x95\x69\x76\x34\xc0\xbc\xf5\xc0\x07\x5a\x81\xf7\x27\xef\x5e\x33\xf6\x43\xbd\xa7\x7c\x45\x03\x62\x84\xf6\x9d\x62\x2c\xd4\x77\x1a\x8f\x50\x8f\x43\xc1\xb4\x6d\x75\xa1\xe4\x4e\x04\xc4\xcc\x60\x01\x2d\xe1\xe6\x7b\x9c\xf5\xc4\x59\xcc\x75\x8e\x0e\xc3\x31\x4d\x5d\x37\x07\x4c\x4c\x60\x0b\x52\x53\x26\x75\x44\xd8\x1f\x2d\xc9\xd4\xaf\x62\xe9\x94\xa2\x51\x2e\x1d\x08\x1d\x37\xcf\xdd\xbd\xa8\xcf\x4f\x1f\x8b\x8b\xa5\xd2\x5a\x45\x3d\xae\x1f\x67\x5d\x3f\x59\x2e\x98\x73\x85\x67\xf3\x07\x5c\x9f\x5d\xb2\x01\x88\x2d\xd5\xfc\x95\x2c\x51\x06\x27\xe7\xe3\x69\xfe\x4e\x96\x28\xb9\x32\x81\x99\xb7\x70\x82\xaa\x2a\x35\xdd\x56\x33\x39\x2f\xd7\xcb\x55\xa9\xe1\xb6\xf5\x4e\xca\xf5\x9a\x16\xdc\x64\xdb\xfa\xc7\xe5\xfa\x35\xd1\x63\x98\x6d\x5b\xfb\xb4\x5c\x7b\x21\xbd\x0c\xfd\x6d\x2b\x0f\x74\x65\xf0\x45\x3b\x65\x70\x49\x2e\x5c\xaf\x16\x6e\xa7\xb7\x65\x75\xd5\xbf\x12\x24\xb8\xe9\x35\x3b\xae\xed\x62\x55\xbf\x59\x85\x5b\x7a\x23\x0a\xb7\xa8\x8d\xc2\x2d\xbc\x5d\x85\x5b\xf4\x75\x14\x6e\xe1\xbd\x51\xb8\x19\x4e\x81\x09\x77\xcb\x52\x7a\x08\xd3\xd9\xcb\x95\x60\xf0\x59\x83\xc6\xe6\xcb\x14\x6b\x17\x58\xc2\x0d\x6e\x15\x1e\x90\x32\x44\x4a\xd7\xe1\x20\x21\x38\x00\x44\x99\x65\xb0\x34\x0d\x8c\x03\x64\x72\x1c\x65\xfb\x23\x17\x93\x10\xbb\xce\xaf\xaf\x97\x4c\xb0\xf4\x52\x27\xd5\x52\xd3\x8f\xd1\x24\xc1\xe8\x13\x8a\x83\x81\xce\x0d\x90\xbe\xf0\xc3\xce\xe9\x24\x5f\x22\x4c\x28\x47\xb8\x64\x16\x4c\x8b\x09\x27\x66\x71\xbc\x90\xe3\x62\xb2\x8a\x74\x71\xcd\x7d\xc8\x70\xa5\x0a\xf6\x22\xcf\x73\x90\x66\x2c\x88\x57\xab\x41\x12\x18\x22\xc3\xcd\x1c\xc5\x85\x22\x20\xf9\x90\x41\x0c\x04\x74\x00\x16\x7f\x9c\xa1\x2f\x64\x00\x73\xc5\x86\x94\x2a\x8c\x80\x70\xd9\x0b\xf7\x42\x2f\xb5\x24\xb6\x5e\x32\xe1\xc8\x04\x2f\xd2\x01\x9d\x6c\xa5\x6d\x74\x30\x88\x5d\x40\x38\xc7\xe2\x84\x6c\xe8\xb3\x39\x95\xf5\x74\x3b\x39\x29\xdc\xae\x35\x7e\x9b\x71\x2d\x1e\xe5\x79\xb8\xee\x89\xae\x35\xad\xcc\x05\x44\x77\xd5\x5d\x17\x5a\xe3\x47\xe1\x7c\x9c\x40\x1c\x1c\x44\x89\x0f\xa3\x5e\x4a\x12\x0c\xcb\xbe\xbb\xaa\x50\xd5\x6d\x99\x11\x24\xe6\x0a\xba\x73\x78\xc6\x86\x30\x03\xa9\x30\x61\xba\x47\xc4\x06\xcc\x14\x4e\xfe\xd8\x8b\xf3\x24\x7e\x19\x85\xfe\x85\xb2\x27\x7f\xf6\xc7\x7c\x7a\xe8\x36\x72\x10\xb3\x29\x9f\x43\x82\xce\x18\x13\x48\x59\x55\x3f\xc3\x18\xc5\x84\x3f\x90\x0e\x03\x68\x16\x12\xc7\x16\xbb\xc6\xa6\xbc\x76\x9e\xd3\x65\x4d\x3d\xa7\xc9\x93\xa6\x27\x9d\x26\x98\x3f\xcd\xa6\x1e\xb5\xcc\xd7\x0c\x24\x0d\x7e\xb5\x41\xe2\xdb\x54\xbe\x11\x4e\xb5\xf0\x4e\x39\xd5\x46\x7a\x60\xa9\xa7\xed\x19\xe0\x84\x9e\x7d\x81\x16\x2c\xd2\x23\x5d\x19\xe9\x41\x07\x2f\xb6\x48\xd2\x89\xf2\xa6\xc3\x70\xe4\x25\xb9\x74\xea\xd7\xc5\x70\x7a\xe2\x38\xd2\x05\x12\x09\x68\xfa\x41\xe2\xcb\xad\xf5\xd7\x10\x5d\xf5\xd9\xd6\xff\xc4\x77\x3e\x15\x64\xdf\x10\x34\xe3\xdb\xe6\x02\x2d\x00\x83\xcc\xc9\x41\xe8\x61\x8d\x8f\x4b\xc4\x6a\x64\xde\x30\x1e\x01\x7f\x3b\x17\xd3\x59\xd9\xc5\xd4\x6f\xb0\xef\xce\x86\x68\xe4\xf9\xc2\xbe\x3b\x33\xed\xbb\xfa\x4f\x30\x2b\xdb\x77\x67\x8d\xf6\xdd\xd9\xf5\xf5\xac\x6c\xdf\x9d\x99\xf6\xdd\x99\x97\x75\x77\x31\x0d\x41\xa2\x5c\x4c\x67\x2e\x08\x34\xbd\xf3\xac\x64\x7d\x9d\x09\xfb\xae\xf1\xfc\xc5\xac\xba\xc7\x02\x65\xdf\x9d\xad\xb6\xef\x96\x5b\xa8\xdf\x6e\xb4\x8b\x33\x3a\x3c\x6e\xdf\x85\xde\x0c\x60\xee\x62\xaa\xf9\x14\xec\xb5\x01\x77\x28\x13\xd3\x24\x6d\x4d\x41\x6f\x3b\xd0\x85\x1d\x08\x45\x5a\xb7\x88\x74\x49\x02\xd4\x9b\x85\x8c\x7b\x37\xc6\x1a\x5e\x2e\x58\x24\x1a\x7f\x57\xff\xc1\x7d\x8c\x4e\xd4\xfa\x7f\x10\x85\x31\x69\x4e\x8c\xc2\xa5\x1b\x14\x84\x44\x14\xbd\xe1\x7b\x53\xe8\x9d\x86\xcb\x98\x21\x4b\x53\x86\xc8\x06\xb3\x90\xfe\x5d\x56\x61\xda\x60\x96\x04\x68\x60\xff\x0b\x5e\x42\xce\x38\xdb\x80\xf2\x34\x43\xae\x00\x06\xf6\x0c\xce\xed\x11\x80\x51\x08\x53\xf1\xf0\xa9\x3d\xca\x81\xa8\xfa\xcf\x2f\xdf\xca\x9a\x99\x6b\xd9\x97\x1e\xce\xc6\x0b\x59\x29\xff\x9b\x57\x87\xc7\x7a\x35\xfc\x8d\x3d\x83\xbe\xf8\x0b\xc3\x0b\x44\xff\x19\xb3\xff\x7c\xd1\x9a\xf8\xfb\xc9\xbb\x72\x1b\x0b\x38\x8b\x64\x1b\xfc\x6f\xde\x06\xff\xdb\x5e\xcc\x22\xad\x2d\xf6\x4b\xd5\xf6\xb7\xa2\x32\x7d\x2a\xbe\x14\x15\xb2\x3f\xa7\x64\x16\xbd\xa3\x3f\x1f\x1d\x81\x19\xe5\x20\x5f\x46\x09\x43\xff\x7c\x74\x48\x2b\x3e\x8f\x5f\xbe\x3a\x39\x3b\xa1\x6f\x79\xcb\x5f\x8c\x26\xd9\xaf\x9c\x9b\x80\x57\xb0\x08\xdc\x04\xbc\x05\x73\xd0\xc8\x16\xcc\xee\x05\x5b\x90\xd3\x09\x4f\x8b\xb3\x17\xe5\xf4\x6c\xb4\x8a\xc0\x3b\x47\xe4\x35\x3b\x4e\x65\x85\x5c\x90\xcc\xfa\x28\x42\xcc\x5b\x95\x6d\x17\x88\x11\xb4\xfe\x68\x05\xe1\xa5\x0d\x90\xdb\x7f\x99\x04\xe8\x1d\x3b\xb3\xf5\x57\xf8\xec\xe1\x0a\x7f\xb8\xc2\x0d\x22\x1f\x13\x18\xc6\x26\x6d\x2f\x05\x87\xec\xea\xc6\x26\x2d\x68\x80\xee\x65\x51\xf1\x68\x48\xae\x62\x84\x3d\x24\x7e\x5d\xcd\x98\x28\xff\x1b\x82\x17\xef\xe0\x3c\xe7\xf1\x53\x44\x0a\x42\x57\x33\x16\x51\x45\x28\x3b\x7b\x81\x16\x3f\x27\xf8\x25\xed\x44\xf9\x3c\xd1\x72\x22\xb0\x8a\xff\xb3\x34\x93\x41\x2b\xcb\x32\x4b\x8e\xe7\x49\x26\x59\xab\x4e\x74\x2e\x4a\x92\x8b\x6c\x4e\xeb\x51\x7f\x99\x0d\xb1\xce\x6b\xc5\x84\xe3\xf7\x29\xc3\x6a\xc0\xb0\x64\x25\xd0\xbf\xa9\x2f\x59\x9c\x6c\x9d\x8b\x21\x6b\xd6\x9b\x87\x38\x84\xf1\xc5\x01\xfb\xdc\x4f\x84\x5a\xb2\x4b\x6c\x90\xee\x7f\x5a\x78\x9e\x4e\xee\x93\xe7\xe9\xf8\xc1\xf3\xf4\x6e\x7b\x9e\xee\x26\x4e\x68\xda\x1c\x27\xa4\xb9\x81\x35\xf1\x2f\x18\xcd\x93\x94\x5e\xc2\x8b\x03\x0d\xbc\xa9\x31\x7a\x48\x2b\x7e\x71\xc9\xe2\x86\xd6\x96\x8b\x25\x06\x6c\xb4\xbe\x6c\x91\x7a\xcb\x05\x4d\x4e\x77\x5a\x71\x89\xe7\xda\x3d\xde\x59\x67\xba\x26\x15\x1f\xb4\x44\x78\xa7\xc9\x37\xc5\xcc\x80\xac\xf4\xea\xe2\xd2\x06\x7e\xe9\x99\xcc\x03\x1b\x94\x9e\x6b\x49\xca\x66\xa5\x57\x0a\xe3\x56\x38\xd4\xe5\x73\x8c\xe6\x10\x97\xf3\xe3\xf1\x61\xa5\x88\x68\x4a\xfa\x18\x10\x37\x9f\x23\x9c\x86\x29\xd1\x70\xba\x86\x00\x00\x10\x8f\x3c\x24\xdd\x6a\x0e\xcc\x1c\xb8\xc3\x78\xd4\x97\x5f\x31\x50\x48\xe6\xd0\xd5\xed\x7b\xf1\x91\x48\x9f\x3f\x76\xc2\x06\xa3\xd8\xd6\x21\x1d\x59\xb9\x72\x6d\x45\xb6\x0f\xec\xf0\xcb\xb5\xd3\x45\xdd\x3e\xac\x23\x28\x57\xab\xf2\x03\xc3\x6d\xab\x9e\x95\xab\xd6\xf3\xdf\x45\xdb\x5b\x7d\x2b\x4b\x29\x11\x98\xb7\xb6\x28\x87\xba\x79\x73\xba\xc1\x45\xde\xa8\xd2\x6e\xba\xd1\x77\x20\x8c\xb3\x0c\xec\x2d\xc9\xec\x66\x82\x20\x6c\x14\x04\x8b\x63\x14\x29\xf4\x41\xdc\x5a\x1a\xbc\x0d\xf4\x41\x5d\x1a\x34\xc8\x16\x83\x14\xd0\x70\x71\x3d\xcf\x23\xd7\xd7\x2c\xd5\x3f\x79\x11\x0f\x3a\x10\x33\x2b\x2e\xe8\xd0\xc0\x76\x79\x7e\xef\xbd\x5a\x9f\x2c\xf9\xf1\x72\x18\x8f\x06\x24\xaf\xa1\x6c\x1d\x2a\x13\xe1\x6a\x31\x0f\x57\x8b\xb5\x33\x91\xea\x2b\x13\x7a\x94\xc4\x25\xdb\x49\x9b\x7e\x59\xda\x4c\x1a\xd8\x32\x2a\x68\x7a\x89\x60\xcb\x7c\x93\x2d\xf3\x8d\xf5\x2e\xb3\x65\x7e\x23\x5b\xe6\x5f\x5f\xfb\x65\xb6\xcc\x37\xd9\x32\xdf\x0b\xbb\x4b\x9b\x94\x97\x96\xd2\xa6\xef\x82\x4c\x63\xcb\xfc\x12\xd3\xe4\x0b\xb6\xcc\x78\xfe\xc2\xaf\xee\xb7\x4c\xb1\x65\xfe\x6a\xb6\xac\xdc\x42\xfd\x91\xa1\x5d\xf4\xe9\xf0\x38\x5b\x86\x3d\x1f\xc4\x5c\xda\xd4\x04\x81\xbd\x36\xa0\xe1\x65\xa2\x55\x93\x53\x62\x95\xd8\x51\xc2\xf4\xbd\x2f\x62\x46\xf8\x20\x66\x7c\xeb\x62\x86\x74\x5c\xa8\x7a\xfa\xf5\x8e\x3c\xcf\x73\x90\x87\xfa\x24\xf9\xc4\xb4\x09\x8e\xee\x47\x3f\x38\x38\xe0\xb9\xfc\x3d\x71\x52\xe8\x83\x3f\x22\xda\x84\x24\xc0\xb4\x44\x2e\x51\x7d\x1b\x01\x0f\x9a\x24\xfa\x66\xc1\x66\x3d\xef\xd0\x5d\x6d\xab\xdf\xd0\x69\x11\xf1\xc2\x42\x68\xa1\xe0\xe8\xd3\x8a\x34\x11\xd5\xb3\xf4\xd2\x9b\x1e\x8e\xbc\xc4\x41\x26\x6f\x8d\x47\x7d\x59\x1a\x72\x38\xf2\x1a\x06\x3f\x06\xb8\xe6\x53\x8d\xad\xc7\xa0\x96\xb1\x6f\xfc\x4e\x14\xc5\x1c\xc5\x15\x7a\xa1\x83\x4b\x3e\x7a\x6c\xa4\xdb\xb3\xf3\x51\xb9\x6a\x4d\x56\xd8\x9a\x9b\xc7\x6e\x07\x14\x52\x1d\x0d\xa3\x59\x59\xa4\xdb\x81\x02\xe4\x27\x98\x81\x15\xe9\x1f\xdf\xac\x31\x88\x9e\x8e\x68\x85\x0d\xa2\x71\x10\x07\xe3\x28\xf1\x2f\xc2\xf8\xfc\x46\x6c\x14\x0c\x5e\xe0\x5e\x18\x29\xf8\xe4\x30\xe8\x29\xe5\x03\xcf\x4c\x13\xcc\x2e\xe4\x3a\xc8\x05\xd0\xc3\x7d\x7f\xec\x30\x08\x3d\x38\x4b\x81\x0a\x63\xfc\x70\x15\x23\x9e\x08\xc5\x35\xb9\x44\x3a\xfc\xbe\xa8\x19\xb2\x94\x01\x20\x35\x8c\x11\xa1\x9c\xa2\x84\x59\x23\xb2\xed\xf8\xc3\xa0\xcc\x1f\x66\x0d\xf7\x69\x40\xef\xd3\x4c\xdc\xa7\x81\x79\x9f\xea\x3f\x41\x50\xbe\x4f\x83\xc6\xfb\x34\xb8\xbe\x0e\xca\xf7\x69\x60\xde\xa7\x81\x97\x74\xe7\x0f\x29\x83\x25\xf9\xc3\xc0\x05\xbe\x76\x9f\x06\xa5\xdb\x2e\x10\xf7\xa9\xf1\xfc\x45\x50\x5d\x78\x5f\xdd\xa7\xc1\xea\xfb\xb4\xdc\x42\xb3\xff\x4a\x40\x87\x27\xad\x11\x81\xb4\x46\x68\x6a\xe2\xbd\x36\xa9\x5f\xd7\x91\x9c\xe2\xb4\xae\xb4\x41\x07\xc9\x4c\xc2\x7f\x70\xda\x03\xea\x9a\x29\x48\xea\x5a\x14\x89\x4a\x0b\x33\xb8\x18\xa3\x1e\x9d\xcc\x26\x1f\x5e\x83\x3d\x2e\x18\x57\xff\x3e\x31\xae\xc1\x03\xe3\xfa\xad\x33\xae\xf4\xe2\x9c\x79\x4e\x93\xe6\x59\x3f\x05\xcd\x0a\x67\x4d\xbd\xb3\x8d\x9a\xd9\x97\x0c\x23\x6b\xb4\x50\x32\xfb\x15\x86\x51\xe8\x98\x8b\x5b\x2b\x2a\xf9\xf9\xfc\x24\xe8\xc4\x6b\x4a\x05\x78\x6a\x00\xc7\xa1\x93\xa7\x02\x96\x52\x2f\xe2\x1e\xa6\xfd\x71\x18\x07\x4e\x24\x6f\x2e\x33\x2e\xde\x71\xbd\xe7\xa4\xef\x67\x38\x4d\xe4\xaa\x01\xe6\x9c\x1c\x4e\xde\x27\x44\xb6\xe2\x3a\x86\x52\xc4\x75\x1d\x09\x7c\xec\x7a\xcf\x91\x43\xe4\x2f\xa3\xea\xb4\x4d\x45\x55\x00\x65\x0d\x4a\x93\x98\x29\x7b\x66\x88\x40\x01\x6c\x6c\x44\x5e\xb2\x9c\x94\x7c\x08\x72\x4f\xb3\x47\xcc\x99\xe7\x12\x46\xfb\xfb\xa9\xc3\xa2\xab\xdc\x3e\x77\x23\x66\x51\xe0\x75\x10\x07\xa2\x7b\x7c\x7d\x5c\xd7\xcd\x41\xc4\x15\xdb\x81\xa9\x0d\x95\x0b\xb8\xbd\xa2\x35\x2b\x57\xad\xf1\xc1\xbb\xd5\xb4\xce\x36\xbf\x94\xe6\x3c\xae\xae\xe3\x9d\x74\xeb\x2e\x71\x3a\x8b\xa7\xf9\x9e\x24\xb1\x8f\x5c\x8e\x39\xda\xc1\x0f\xae\x7e\x3a\x56\x79\x53\x77\x9e\x8f\x5b\x94\x0f\x34\x02\xb6\x7b\x21\x00\xa3\x79\x72\x7f\x85\x80\x66\x45\x30\xa7\xb4\xc2\x81\xd8\x20\xb4\x94\x68\x72\x60\xb4\x79\xa2\x47\xc6\x62\x17\x2c\x2f\xd0\x62\x80\x40\x86\xc3\x41\xdc\xcf\x70\x98\xd7\x0a\x05\x7c\xca\x1e\x84\x82\x07\xa1\xa0\x96\xe0\xac\x49\x45\xdc\x28\x04\xcc\x62\x34\x4b\xe2\x30\x25\x07\xb3\x2c\x22\x61\x8f\x7b\x7d\x36\xe7\x90\xd3\xdd\x5c\x0a\x16\x7e\x76\x9f\x58\xf8\xf9\x03\x0b\xff\x7b\x60\xe1\x27\xac\x3e\x91\x7b\x48\xa0\x47\x0b\x76\xe0\xb2\xec\x59\x27\x50\x47\x42\x0f\xe5\x85\x4a\xda\xf0\x38\xa3\x74\x99\x45\xfe\x2c\x9a\xd3\xc8\x71\xb7\xde\x26\xef\x16\x0e\x1d\x84\x57\xf8\xb4\xac\xd0\x2b\x36\x0b\x1a\x6d\xb8\x8e\xed\x64\x90\x99\x0e\xe8\x24\x05\x90\x99\x02\x74\xe2\xa3\x52\x3e\x2e\xb3\x92\x8a\xdb\x2f\x3d\x2f\xb8\xd5\xa0\x25\x68\xd3\x44\x22\xed\xd3\xb5\x14\x7f\x4d\xd9\x5f\x2a\x20\xd2\xf9\x84\x48\x3b\x74\xa7\x1c\xa3\x14\x91\x97\xd0\x9f\x22\xc7\x5d\x4e\x1a\x40\xfc\x0b\x40\x81\xd4\x9f\x22\xba\xe1\x1c\x1b\x4e\x08\xc2\xa7\x28\x66\xa3\xa5\xf7\x79\x33\xbe\xd1\xb8\x9e\x6e\x14\x69\x53\x5c\x36\x2a\x7d\x7b\xf6\xfd\x08\x41\xec\x48\x98\xf3\x26\xce\xc3\x11\xe8\x4e\x6c\xd2\xe9\xa6\x3c\x83\xe7\x8e\x5b\x0f\x69\x61\xa4\x33\x87\xf4\xce\xe7\x0c\x17\x8f\xaf\xa4\xd4\xfc\xd1\xa1\xbb\xa7\x91\x24\xda\xcf\x3e\x46\x13\x0f\xee\x19\x89\x09\xaa\x50\x18\x12\xec\x22\xf6\x9e\x2f\x99\xa4\xc4\x03\x52\x59\xc2\x72\xd7\x89\x05\xb4\x02\x88\x39\x64\x8b\x81\xd5\x50\xe0\x2e\xb3\xb9\x88\x00\x64\xe0\xbf\x02\xac\x21\xcf\xdd\x3d\x8d\x40\x9d\x23\xf2\x92\x87\xe5\x31\x66\xca\x71\xf7\xf7\xa3\x7e\x10\xa6\x73\x2a\x94\xf1\x47\x35\x85\xdc\xdc\xcd\xb3\xf8\x0a\xc3\x79\xd9\x80\xff\x99\x4f\xaa\x9c\xae\x29\xf3\x84\x8d\x01\x71\xc1\x54\xae\x5e\x0c\xe2\xea\x8c\xb8\x40\xa5\xd3\xad\xbc\x03\x71\x9e\xe1\x50\xf3\x50\xa5\x8b\x70\xe9\x20\x57\xe4\x13\x62\x4e\x0d\x8f\x8e\x78\x9e\x04\x07\xe9\xb1\xa0\x97\xee\xfe\x7e\xd5\x9f\xd6\x35\xe8\x4e\x31\x0e\x46\xd5\xf0\xff\x6e\x68\x3d\xa3\x5f\x0f\x21\x88\x34\xe7\x2c\x56\xd4\x58\xea\x21\x1c\xed\x85\x13\x67\x2c\xd3\x37\x60\x6f\x2c\x9c\x80\xc1\xb8\x80\xe1\x05\x63\x91\x93\x01\x0b\xb8\x1e\xda\x31\x42\x2f\xd1\x89\xf8\x70\x7f\xdf\x21\xde\x44\x7c\xea\x02\xc2\x69\x2b\xc0\x5e\x2a\x75\xdf\x11\x1d\x90\x5c\x98\xba\x5d\x86\xc1\x92\xc3\x76\x10\x1d\x5c\x5a\xee\x2c\xe8\xe1\xea\xba\x83\xc8\xc3\xa5\xf5\xe1\x32\x7e\xb1\xa5\x8c\xfb\x6f\x7f\x5f\x44\xdc\xa6\xfb\xfb\xf6\xf1\xe1\x91\xfd\xc8\xf3\xe4\x93\xe1\xe1\x48\x80\x0e\xee\xef\x4f\xc4\x70\x97\xbe\xd6\xdc\x00\x02\x5e\xf9\x80\xa1\x3b\xb0\x81\x63\xf7\xfa\x5a\x9f\xa7\x98\x87\xea\x16\xd3\x25\x02\xd2\x9d\x47\x45\x79\xdc\xc7\x08\x06\x0b\x96\xee\xe9\xf9\xd1\xf5\x75\xec\xee\xef\x63\x7e\x44\x69\xb5\x29\xe2\x26\x39\x80\x45\x1e\x27\xb6\xa3\x11\x4b\xc7\xa0\x59\xe9\x44\x07\x10\x03\x87\x91\x64\x06\x3c\x66\x60\x39\x45\xfd\xfb\xfb\x45\xef\x4a\x13\x95\xe1\xd0\x95\xb9\xa2\x02\x75\xf7\x0d\xfb\xfd\xfe\x58\xc1\xd6\xb8\x23\x05\x89\x30\x44\x80\x8c\x98\x22\x48\xef\x7d\x81\x94\xc6\x32\xa7\xe7\x20\xf1\xe6\xa6\xae\x82\x43\x8c\x6c\xed\x25\x97\x95\xeb\x55\xd7\xd0\xf6\x6e\x72\x7e\xb9\x6e\x65\xc2\xdc\x5a\x75\x13\x94\xab\xbe\x31\xd5\xcd\xa2\x95\xe8\xc0\xee\xfc\x52\x80\x62\x7c\x8e\xe1\x7c\xda\x67\xff\xbd\x7d\x85\x0c\x6b\xb6\x21\x10\xa8\x9b\x32\x86\x6d\xb4\x35\xb2\xd0\xbf\x53\xd8\x9b\x40\xca\xf6\x2c\x1a\x4a\xa4\xe1\x38\x62\xb6\x95\xda\xb7\xec\xb4\xd4\x02\x9a\xd0\xb7\x61\xda\x4b\x32\x92\x86\x01\x6a\x28\x70\x8e\x48\xcf\x97\x38\x92\x6b\x3a\x12\x27\x78\xc6\xd6\xbb\xc7\x04\xb8\xa6\x0e\x71\x88\x16\x45\x49\x1b\xfb\x1d\xfa\x17\x3d\x86\xaf\xda\x83\xb1\x3f\x6d\x82\x5d\x91\xe2\x1e\x17\x93\xea\x65\xbe\xfb\x86\xa4\x31\x2f\x25\x4a\xe2\xd7\xea\x04\x8c\xc5\xfb\x29\x7d\x9f\x14\xef\x0b\xf0\x4f\x56\xf0\xd2\x73\x9a\xf0\x56\xf5\xc0\x7f\xbf\x35\xbf\xad\xf4\x65\xdc\x65\xac\x36\xc6\x87\xeb\xc9\x64\xa4\xb9\x2f\xd4\x66\x99\x17\xac\x50\x9b\x25\x86\xb0\x9d\x35\x0a\xdb\x59\x83\xb0\x9d\x95\x85\xed\xcc\x10\x0b\xb3\x15\xda\x92\x5c\x93\x02\xe8\x4e\xfb\x99\x6e\xb4\x13\xbe\xcf\xc0\x54\x7f\x29\x8e\x4f\x31\xc7\x85\x98\x20\x0f\x5e\x5c\x7d\x17\xa6\x1f\xe4\xb9\x82\xd5\xb7\xea\xa4\xbc\xe6\x07\x25\xad\x16\xd1\xce\x47\x58\xbc\x1d\xeb\x51\x53\x60\xe2\x95\x30\x83\xcb\xa9\x3f\xd6\x80\x98\x4a\xce\x9e\xf3\xf9\x79\x91\x49\xa3\x14\xb5\xe8\xe7\x97\x21\xba\x9a\x57\x01\xc3\x4a\xd8\x04\xf9\x79\x16\x06\x1a\x97\x29\xec\x1c\x59\x18\xb0\x5c\x5c\x6e\x3e\x49\xfc\x2c\x15\x59\x2c\x2a\xe8\x8c\x5a\x90\x96\x0c\x92\xa4\x8c\x59\x01\x00\xeb\x0a\x26\x0e\x51\xb6\xea\x84\x10\x1c\x8e\x33\x82\x1c\x9b\xc0\x31\x63\x2d\x6d\x7a\xbb\xa4\xf5\xaf\x80\x7d\x68\xd3\xf3\xc6\x7b\xe0\x02\xe9\xb6\xfb\x02\x09\x16\xa5\xb6\xbe\x41\x73\x7d\xc4\xcd\xf3\x14\x71\x3e\x8b\xe3\x71\x18\x84\xc4\x50\xc5\x72\x86\xb0\x24\x00\x7d\xa1\x05\x97\x46\xa0\x37\xe4\x98\x2c\x22\x88\x8d\x7f\x65\x7b\x9e\x17\xbd\x28\xbe\xc1\xd5\x6f\x8a\x18\x55\xee\x80\xac\x70\xe3\x86\x64\xe4\x0e\xf0\x30\x1a\xe5\xb9\x3b\x38\x45\x93\x48\x20\x12\x95\xe3\xe8\xdd\xfa\x91\x70\xa4\x24\x43\x38\x69\x3b\x12\x91\xf3\xa0\x32\x12\xa8\x8d\x24\xae\x7e\x53\x05\x1f\x25\x43\x38\x7a\x41\xff\x53\x80\xe1\x0d\xe2\x21\x5c\x3f\x22\x9c\x24\xb5\xbb\x55\xec\xf1\xd7\x7c\x87\xe5\x62\xa7\xfd\xb4\x78\x13\x54\xa3\x75\x7d\x5a\xf5\x6b\xa3\x84\xfc\x20\xfd\x69\x71\x06\xcf\xdf\xc3\x99\x81\xdf\xe1\x48\x42\xce\x16\x42\xd6\x32\x20\xae\x56\x91\xfe\x65\x51\x9d\xa1\x29\xe6\xb2\x54\xae\x4e\x41\xf1\xca\xfe\x2f\x9e\x13\x25\xcd\xc6\x29\xc1\xce\x21\x38\x72\x5f\xe8\x27\x86\xf7\x52\xbe\x3e\x72\xdd\x01\x65\x8f\x79\x7d\xa3\xe1\xe1\x28\xf7\x8b\x4c\xac\x5a\x83\xc5\x69\x2c\x44\xbc\x17\x68\x60\x9e\x45\x06\x58\xa5\xbe\x37\x7a\xac\x92\xc5\x18\xc3\x19\x31\x56\xbb\x26\x8b\xac\x35\xe1\x09\x6f\xaa\xe8\x65\xc8\xf0\xab\x7f\xe4\xa1\xdc\x75\xf3\x30\x7d\x13\xff\x55\x12\x20\x2e\xab\x1e\xba\x4b\x29\xb1\x48\xa1\x93\x51\xc6\x37\x31\x41\x38\xe5\x80\x7b\x1f\xc6\xf4\xda\x43\x58\xe4\xa3\x17\x6c\xbf\x32\xc2\x0a\xa9\x51\xee\xaa\xbd\x9a\x94\xb2\x64\x7f\x9f\x96\xa0\xed\xcb\x6a\xe3\x73\x2a\xb9\x83\x25\xdd\x5e\xef\x20\x3e\x0f\xe3\x81\x7d\x38\xa7\xf4\x60\x8a\x51\x3a\x4d\xa2\x60\x10\x17\xc8\x47\xb8\x9f\xf0\x4e\x50\x49\x8b\xe9\x63\x70\x3f\x8b\xb5\x67\x63\x5d\xdc\x71\xe9\x25\x13\xa6\x02\x32\xd0\x71\x01\xe6\x74\x39\xcf\xc1\xc2\xf3\x35\x9e\xfc\x5c\xdc\xb2\x1f\xbc\x61\x36\x02\x9f\xb7\xb3\xb4\x5c\x95\x2d\x2d\x9f\x1b\x54\xca\x57\x43\x34\xf2\x3e\x0b\x95\xf2\x95\xa9\x52\xd6\x7f\x82\xab\xb2\x4a\xf9\xaa\x51\xa5\x7c\x75\x7d\x7d\x55\x56\x29\x5f\x99\x2a\xe5\x2b\xef\x43\x77\x4b\xcb\x02\x9c\x2b\x4b\xcb\x95\x0b\x3e\x6a\x22\xf5\x55\x49\xe1\x7b\x25\x54\xca\xc6\xf3\x17\x57\x55\xde\xe1\xa3\x52\x29\x5f\xad\x56\x29\x97\x5b\xa8\x67\x7f\x68\x17\xaf\xe8\xf0\xb8\x4a\x39\xf0\xae\x80\xcf\x2d\x2d\xf4\xcd\x07\xf0\x19\x7c\x04\x57\x9a\xb8\x74\xb9\x46\x9a\x28\xc4\xcb\x75\x29\xc9\xdb\x65\x35\xa6\x57\x98\x62\xa4\xf1\xbd\x63\xa4\x19\x6b\x0b\x37\x52\x26\x63\xc1\x82\x65\x38\x54\x10\xfa\x36\xa8\x49\xc8\xa0\x4a\xfe\x2b\xe1\x51\xf8\x2c\xdf\xa8\x6d\x83\xd8\xb3\x6d\xd7\x7b\xce\xae\x34\xef\xb9\x03\xaf\xaf\x39\x34\x3a\x16\xf8\x88\x8c\xf2\x45\x0e\x71\x8b\x8d\x4c\xd8\x8d\xe9\x3d\xff\xe7\x1f\x96\x24\xff\xc3\x12\xe6\x7f\x58\x22\x87\xde\xdd\xd7\xd7\xb1\x9b\xff\x13\xd8\x36\xa5\xbe\x4c\x76\x3a\x45\xe7\xaf\xbf\xcc\x5f\xf3\xf5\x36\xe9\xb8\xb6\x7e\x1e\x53\x72\xb8\xea\x6a\xa2\x7d\x02\xd8\x5b\xe6\xae\xf7\x9c\x41\xe5\xc7\x2f\x62\x95\x4e\x19\x81\xb2\x2a\xb6\xf0\x51\xc1\x20\x2e\xfc\x43\xe9\x58\x6c\xdb\xcd\xdd\x81\x6d\xe7\xfc\x9a\xa2\x7b\xaa\x15\x2e\x06\xdd\x65\x7a\xc1\xb8\xa9\x60\x86\xc3\xbf\x24\x61\x5c\xba\xbe\xf9\x24\x3b\xd2\xd4\x51\x64\x37\xb0\x0f\x6c\x3a\x3d\xd5\x4a\x98\xe2\xd9\xa8\x83\xc0\x73\x55\x01\x6d\x82\x7b\x11\x71\x1f\xd8\x9c\xbe\x44\xc5\x55\xce\xc1\xe1\xbd\xe7\x88\x07\x6f\xe5\xed\x23\x65\x38\x98\x6c\xed\x31\xa4\xaf\x6e\x1f\x55\x29\xbe\x2c\x33\x37\x97\x90\x31\xe4\xfc\x1f\x7d\xed\x50\x7c\xc9\x04\x89\x0e\x7a\x8c\x09\x42\xc1\x18\xfa\x17\xab\x49\x0f\xa5\xa1\xf4\xa8\x8b\xe4\x6d\x8d\x6e\x23\x94\x07\xde\x33\x83\x70\xbe\x59\x28\xd5\xe4\x46\xa0\x54\xc3\x36\x50\xaa\xfe\xed\x42\xa9\x86\x5f\x07\x4a\x35\xbb\x4f\x46\x7f\xff\x76\x2f\xd9\x07\x7f\xe1\xdf\x8f\xb3\x01\xbf\xd5\x67\xb5\x90\xf6\x3c\x48\x6d\xde\xec\x66\x37\x89\x60\x3a\x7d\xc7\xcd\xa9\xe9\x0a\x0c\x8d\x28\x39\x3f\x67\xce\x03\xdb\x24\xdd\xcd\x94\x8a\x8c\x84\x93\x45\x91\x77\x57\x3e\x17\x8d\xc8\xd4\xbb\x39\x2b\x27\x90\xd2\x74\x5e\x68\x29\x61\x74\x63\xe1\xd5\x26\x7e\x3b\x31\x40\x62\x41\x00\x71\x85\xd1\x57\x96\xe1\xd8\xb6\x46\x89\x3c\x97\x1f\x32\xd4\x5c\x6f\x46\x0f\x89\x04\xb1\x33\xb9\x9d\xd8\x05\x69\xe9\x11\x76\xf7\x1e\x1d\x3d\xf2\x3c\x24\x93\x8e\xf2\x61\x71\x4b\xba\x9c\x52\x69\x6d\x16\xef\x60\x10\x38\x89\x93\x38\xcb\x1c\x2c\x49\x38\x43\x49\x46\x06\xdf\xa1\x27\x80\xcf\x26\x0a\xce\xc4\xb3\x27\x87\x87\x20\xe0\x6a\xbd\x0f\x1c\x49\x96\x2f\x3e\xfb\x6e\x31\x47\x83\xb4\x40\x85\x75\x01\x64\xeb\x3e\x88\x1c\x17\x84\x04\xcd\x06\x88\x21\xca\x45\x03\xc8\xb2\x6d\xf0\x81\x6f\x38\xc2\xb5\x03\xe3\x6b\xd6\x57\x80\xa7\x2e\xb0\xcf\x30\x8c\x53\x06\xec\x70\x32\x4e\x30\x41\x01\xd7\x6b\xc4\x70\x86\x5e\xdc\xea\x64\x14\xb3\x30\xb8\xa9\x76\x39\x68\x3c\x40\x46\xbb\xc2\xdb\x40\x6b\x3f\x87\xe9\x22\xf6\x2d\x0d\x16\x96\x5f\x5c\x0c\xa4\x61\x8f\xe0\xc5\x12\x7a\xf0\x0a\x86\xc4\x52\xc9\x9b\xe5\xd6\x84\xa2\xac\x00\x94\x8e\x84\xb7\x10\x5f\xd5\x48\xbe\x64\xb1\xfe\x81\x99\xea\x55\x1e\xb3\xed\xc3\x13\xd3\x72\xd5\xf2\xa4\xee\x38\x8f\xec\x7c\x1d\x37\xca\xd8\xb8\xd5\xbc\xa8\x2c\xa3\xbd\xe0\x8f\x0e\xe6\x18\x05\x94\x9a\xb0\x40\x23\xe1\xae\xd8\xa6\x54\x4f\xba\x4c\xac\x29\x3e\x45\x30\x22\xd3\x9e\x3f\x45\x94\x5f\x5e\x59\x34\x4e\x82\x75\xb5\x5d\x5c\xae\x29\xa0\xc1\xc9\xac\x2c\xc7\x73\xdf\xac\x2e\x33\x4f\xa2\xd0\x5f\xac\x29\x04\x33\x32\xed\x71\x50\xf6\xd5\xf6\x3a\x90\x01\x7f\x27\x92\x0f\x23\x54\x81\xb7\x14\x0b\x31\x60\xe4\x09\xc6\xc1\x07\xec\x3a\x9a\x61\xc6\xae\x2c\x94\x51\x52\x33\xef\xd8\xc6\x1a\x19\xa5\x34\x53\x8e\xad\x8f\xd4\x28\xe4\x17\x85\xe8\x12\x1a\xef\x0a\x63\x0d\xb8\xb8\x34\xde\x68\x26\x20\xb5\x68\x46\x01\xcd\x0a\xc4\x56\xcb\x78\x59\x18\x03\x01\x5f\x26\xe3\x6d\xa6\xde\xe6\x42\x52\x9c\x35\xdc\xcd\x6a\x25\x35\x06\x21\xa0\x8c\x5d\xde\x3e\xe4\x82\xb1\x0b\xbd\x99\xe4\x17\x8c\x83\x88\x68\x6b\x3d\x3f\x0a\x7b\xac\x54\xe3\x47\xf7\x11\x72\x77\x92\xe0\x35\xf6\x7c\x5a\xe2\x60\x9c\x85\x51\x50\x26\x3e\x09\x9e\x55\x4f\x33\x7b\x58\x73\x32\xd9\xf3\xba\xd3\xc8\x5e\xe0\x24\x42\x35\x8f\x0b\x4a\xd0\x78\x2c\x39\xf3\xff\xe0\x3a\xfd\x20\xcd\xdc\x0b\x69\x66\x52\xf6\x92\x00\x63\x6f\x79\x71\x39\x50\x44\x5f\xd0\x49\x45\xda\x25\x69\x54\x54\x1c\xd0\xb3\x32\x50\x34\x59\x23\xbc\x8a\x1a\xe7\x12\x8a\xb0\x29\x19\xae\x86\xda\xc7\x4e\x5e\x73\x62\x5c\x1d\x0e\x90\x1f\x5e\x17\x64\x9b\x86\x2d\xed\xd5\x79\x3f\xf3\xa3\x5f\xf6\x66\x96\x94\x42\xa2\xf6\x61\x6f\x38\x02\x4e\xec\xd9\x8c\x30\xb0\x44\x07\x64\x65\xa2\x03\x16\xdf\x24\xe2\x92\x3a\xa9\x1a\xc8\x30\x1e\x79\x38\x67\x14\xaf\x64\x6f\x34\x75\xb5\xb4\x27\x8e\xb2\xef\x33\xde\x95\x75\x6e\x88\x98\xaf\x67\x61\x53\x65\x4e\x9b\xc6\x7b\x6f\x3c\x44\x23\xae\xc1\x15\x13\x40\x05\x89\xeb\x6b\x39\x6c\xfa\xcb\x2d\x4c\xd8\xcc\x83\x14\x8d\xf6\x88\x70\x66\xae\x35\x3d\xf6\xb9\x9e\x9d\x1b\x29\x01\xe9\xa7\xd9\x78\x16\x92\x86\xb2\x0a\xc0\x44\x57\x41\x91\x3c\x67\x4e\x7a\x99\xce\x10\xf3\xe5\xd9\x3e\xc9\x58\x50\xae\x58\xae\xf0\xf6\xf9\xc5\xb2\x2e\x28\x76\xe1\xd1\xb3\xb8\xee\x7a\x0f\x63\x12\x69\xa5\x62\x52\x89\xb6\xd7\xa3\x04\x1f\xb2\x66\x3d\x64\xcd\xfa\x7d\x65\xcd\x42\x8c\x78\x41\xf2\x61\xce\xf2\x02\xf2\xfd\x59\x86\xa4\xe2\x4f\x1d\x7a\x1e\xeb\x4a\x27\x12\x59\xaa\x49\x69\xc7\x93\xb4\x97\xc3\x62\xeb\xb3\x14\xb5\x0d\x89\x65\x76\xad\xfb\x10\x11\xcb\x67\x4c\xa8\xa1\x4c\xd7\x00\x7e\x03\x24\x23\x87\xc8\x1c\xdf\xd5\xc2\x39\x7d\xaf\x25\x1d\x1b\xca\x14\xe5\x7f\xfe\xf0\xee\xf5\xe7\x5f\x4f\xdf\xda\x40\x3e\x39\x7d\xfd\xf1\xc3\xe7\x37\x9f\x3e\xfd\xfa\xfa\x93\xf9\xe2\xd5\x87\x97\x75\x4f\xde\xbe\x3e\x39\x7d\x5f\xf3\xfc\xe4\xe3\x1b\xf3\xe9\xcb\x0f\x1f\xff\x7e\xfa\xe6\x4f\x7f\x3e\x63\x8f\x47\x8a\x11\xa4\xfd\xf3\x9e\xf3\xec\xaa\x44\x4f\xa3\x4e\x5c\x9e\xb4\x4c\xd9\x6a\x8b\x4c\x66\x0c\xf6\xca\x37\xa2\x75\x03\xb1\x9a\x33\x16\xac\x3b\xdf\xce\x85\x64\x5c\x76\x21\x99\x37\xb0\xd6\xf4\xae\xf6\xe6\x82\xb5\x1e\x9b\xac\xb5\xfe\x13\x8c\xcb\xac\xf5\xb8\x91\xb5\x1e\x5f\x5f\x8f\xcb\xac\xf5\xd8\x64\xad\xc7\xde\xac\xbb\x0b\x89\x0f\x02\xe5\x42\x32\x76\xc1\x44\x63\xad\xc7\x25\xc6\x77\x2c\x58\x6b\xe3\xf9\x8b\x71\x75\x8f\x4e\x14\x6b\x3d\x5e\xcd\x5a\x97\x5b\xa8\x3f\x66\xb4\x8b\x63\xe9\xc5\xe9\x02\xe8\x8d\x65\xb0\xae\x00\x78\x07\x13\x30\xee\x00\x1a\x16\xc6\x3d\xe9\xe8\x59\x7f\xaf\xab\xd7\xf5\xdf\xdc\x47\xa9\x9d\xb1\x27\x1b\x32\x31\x77\x64\x78\x7b\x2b\x86\xa7\x94\xb0\x5f\x2b\x3f\x44\xa1\xf4\x5f\x76\x49\x75\x30\x87\xe7\xa8\x47\x42\x12\xf1\x48\x81\xba\x15\x2a\x8a\x34\x7f\x76\x57\x97\xac\xdd\xd0\xbb\x8f\xfa\x7e\x0e\x38\x99\x67\x25\x58\x42\x92\xe0\xb0\x52\xe2\x3e\x8e\xad\x10\xfa\xcd\x01\x5e\xc2\x28\x0c\x20\x41\x41\xcf\x9f\xc2\xf8\x1c\xa5\x68\x4d\xce\x61\xfd\x25\x1c\x87\x51\x48\x59\xf2\x83\x31\x4c\x2b\x6b\xce\x15\x75\xf4\x16\x30\x94\xed\x7b\x55\x7b\xff\x7d\x50\xe7\xcd\x1e\xd4\x79\xdf\xac\x3a\x0f\xf5\xd3\x64\x42\x5e\x31\xf7\x67\x79\x9b\x18\xcf\x04\xb7\x8b\xfa\x29\x49\x30\xea\xc3\x00\xce\x09\xc2\x2c\x98\x84\xca\x88\xef\x92\x00\x45\xcc\x93\xde\x75\xfb\x78\xee\x3b\x6a\x63\xd3\x6f\x44\xaa\xdf\x9f\x13\xcc\x6b\x3b\x45\x7e\x82\x03\x87\x17\x60\xde\xd8\x04\x10\x50\xa9\x48\x7a\x43\x34\x61\x24\xb0\xae\xac\x40\x48\xe0\x82\x57\x8b\x24\x1f\x73\x84\x67\xe1\x2e\xf2\x7c\x04\x32\x1e\x89\xf5\x4c\xc1\x1f\x04\x0a\xfe\xe0\xb2\x80\x3e\x90\x0f\x8b\xc6\x53\xa5\x31\xcc\xcd\x99\x58\xe6\x2c\x14\x24\x9c\x41\xbc\xf8\x05\x2d\xc4\x83\x4f\x51\x76\x2e\x7e\x71\x7b\x35\xcc\xc8\x34\xc1\xe1\x7f\x90\x40\x0b\x32\xa5\xf0\x98\x25\x40\xca\xb0\x8f\x52\x61\xbc\x66\x42\x8b\xd6\xbc\x8e\x34\x14\x73\xb3\x76\x69\x45\x80\xf0\x58\xe4\x14\xf3\x63\xf1\xa9\x68\xab\xda\x91\x6a\x99\x0e\xfd\x51\xf5\xb0\x14\xc5\xad\x9a\x6e\x2a\x80\x59\xa4\x13\x2e\xda\x14\x9a\x9e\xe7\x87\x52\xb8\x44\x9e\xfe\x96\x4e\x05\x73\xdb\xed\x9f\x30\xc3\xbe\xe7\x79\x84\x29\xbf\xd0\xfe\xfe\xa3\x23\xe6\x21\x71\x12\x45\xc9\x55\xf1\xb5\x09\x31\x71\x7c\xf8\xc4\xdd\x23\x53\x9c\x5c\x59\x02\xad\x20\xf5\x86\x4b\x91\x16\xda\x3e\x3e\x7c\x62\xe7\x23\x80\xf2\x5c\x3a\xf9\x4a\x77\x02\xad\x0f\x4a\x7c\x2c\x1c\x80\x21\xb0\x4f\xe5\x6b\xdb\xdd\xdf\x57\xf9\x0d\xcc\x37\x40\xaf\x05\xc0\x3c\x9d\x26\x59\x14\xd0\x53\x17\xfb\x61\x24\xc4\xf0\x70\xe2\x18\xe8\x77\xaf\x20\x81\x3e\x62\xf9\x29\x5d\x16\xda\x1e\xf8\x02\x5b\xe0\xd1\x11\x1d\xb8\x21\xe2\x4a\xd9\xf8\xfd\xa7\x8f\x27\x2f\x5f\x7f\xfa\xfc\xfa\xfd\xc9\x4f\x6f\x5f\xbf\xb2\x35\xfd\xae\x51\x39\xdd\x3f\x22\x49\x4f\xa1\x46\x7e\xe4\x79\xf1\xfe\x7e\xcc\x1a\x8b\x53\xd5\x58\xde\xd4\xd8\xc7\x93\xd3\xb3\x37\x67\x6f\x3e\xbc\x5f\xdf\xde\xc7\x22\xcb\x4f\x7d\x7b\x2a\x9b\x49\xd1\xac\xf8\xe3\x30\xc7\xc5\x44\x51\x71\x9a\xd0\xff\xf0\x4c\x13\x45\x04\x5c\x3f\x60\x11\xf2\xdc\xf7\x83\x91\xc4\x39\x42\x17\x27\x51\xe4\xd4\x9d\x1b\x75\x1f\xc6\x1a\x3c\x41\xd1\xe1\x18\xd8\x9f\x16\xb1\x7f\x16\xce\xe8\xfc\x3c\x8a\xfb\x61\xca\x09\xa5\x9e\x3a\x0f\xef\xef\xe3\x47\xa5\x86\x4b\xeb\x1a\x03\xe2\x1a\x7d\xca\xe2\x28\x81\x81\x20\xb7\xb1\x9b\xbb\x39\xed\xe5\x87\x18\x95\x9d\x90\x8b\x21\x48\xda\x5c\x1d\x05\x40\xfc\x73\x3a\xc8\xa6\xaf\x9b\x26\x20\xf7\xa1\x3f\x45\x81\xae\xca\x11\xb7\x95\x84\x0b\x40\xa5\xfc\x18\x2d\xe6\x94\xab\x8e\x91\xf7\x9c\xf4\xe9\xb5\xbe\x70\x9c\x21\x01\xf1\x88\x5e\x39\x43\x32\xf2\x3c\x2f\x56\xae\x3c\xf4\x38\x9f\x44\xd1\x4f\x8b\x62\x97\x33\xcf\x7c\x2d\x7d\x08\xb7\x65\xf0\x72\x25\xa3\x88\x51\x47\xb1\x29\x6a\x62\xe4\x14\x4c\xa4\x83\x38\xc8\x86\x7a\xc4\x12\xe3\x87\x1e\x03\xb7\x10\xc4\xec\xdf\x19\xed\x34\x92\xf5\x8b\x9f\x45\xed\xf4\xfa\xe3\x9a\x79\xdd\xe5\x48\x9b\x1e\xfe\x45\xfd\x52\x01\xec\xc1\xfe\x0c\x11\x58\x78\x22\xa5\x57\x21\xfd\xab\xd8\x77\x11\xe0\x1e\x51\x74\xdc\x38\x25\x62\x45\x38\x91\x62\x47\x8b\xf2\xb4\xc7\x87\xc7\xf6\x40\xfc\xf5\xc4\x1e\x60\x6f\x49\x77\xe0\xe0\x7d\xc6\xaa\xf9\xf8\xe1\xd3\x9b\xb3\x37\x7f\x7d\xfd\xf9\xcd\xfb\x9f\xdf\xbc\x7f\x73\xf6\x77\x7a\x54\xa2\xbd\x31\x46\xf0\x62\x4f\x10\xc3\x01\xa7\x83\x51\x9e\xeb\x47\x11\x8b\x9d\x5a\x9c\x36\x0c\x18\x38\x45\x71\x58\x5d\xfe\x61\x2c\x77\x06\xd4\x56\xa2\xb8\xe3\xb4\x95\xb0\xb9\xef\x5a\x18\x70\xcf\x35\x61\x3c\x5a\x16\x8b\x3e\x40\xfd\xc0\x07\x8a\x1a\x0d\x50\x3f\x4e\x81\x22\x16\x03\x54\xd0\x85\xdc\x1d\x38\x1b\xae\x6b\xf9\x1e\x56\x70\x7e\xda\xaa\xad\x3c\x66\x00\xf7\x4f\x5e\xbe\x7c\xfd\xe9\xd3\xe7\xd3\xd7\x27\xaf\x00\x52\xf1\x26\xf5\xc7\x56\xc6\xa2\xac\x3e\xb8\xd2\x36\xa6\x87\x18\x84\xe9\x4b\x29\xf3\xb8\x1c\x88\x05\x29\xdf\x40\x17\x20\x4e\x6d\xa0\x0b\x8a\x7b\x06\x69\xa4\x0a\x48\xc6\x15\xf5\x53\x78\x89\x9c\x22\x13\x80\x8a\x0f\xae\x00\xa9\x52\x96\x93\xf9\xe8\xf1\xee\x32\x2b\x22\x63\xfc\x38\x36\x95\xed\xba\xc0\x4e\xd8\x3e\xa4\x4b\xc9\xdb\x25\x8b\x39\xfa\x30\x71\x88\x5b\xd8\x1c\x5b\xd1\x2b\x32\x94\x4f\x75\xde\x69\xc4\x0c\x89\x46\x2f\x24\xda\x2c\x32\xd6\xc9\x20\x9e\x74\x0d\xc2\x58\x72\x17\x8e\x70\xeb\xd3\x0b\x36\x92\xbe\x1c\x24\xde\xac\x84\xe4\xc1\xf9\xc3\xed\xe1\x47\xb2\x72\xcd\x3c\xe0\x65\x6b\xec\x11\xbf\x5c\xaf\xc1\xa5\xee\x18\x7e\x64\x9d\x1f\xa1\xc6\xa9\xeb\xae\x5e\x0d\x0e\x3e\xb5\x02\xbf\xf6\x9e\xb9\x79\x9a\xee\x71\xdd\x93\x2f\x94\x24\xfb\xbd\x87\x54\x35\xbf\x03\x21\x59\x83\x0b\x4c\xa8\x54\xca\x60\x9e\x95\xd3\x8b\x7d\x30\x50\x97\xc7\xc1\x20\x4e\x0f\x06\x81\xaf\xef\xb2\x94\x49\xaa\xdd\xbe\x39\x18\x84\x01\x15\x49\x1d\x27\x6d\x34\x1f\x96\x44\x45\x71\x11\xea\xdb\xbb\x22\x3d\x2a\x09\xec\xe3\xe9\x9b\x77\x27\xa7\x7f\xff\xfc\xcb\xeb\xbf\x9b\x12\xa5\x2a\xf1\xe9\xed\xaf\x7f\x62\xaf\x9b\xf9\x28\x55\x5a\x18\xf1\x6a\x8a\x34\xb1\x53\xe2\x82\xac\xa9\x41\xbc\x29\x83\x09\xe8\x24\xa9\xa6\x21\x4e\x52\xd7\x99\xae\xd3\x75\xb5\xb8\x40\x2b\x42\xa7\xbf\xf2\x05\xef\x1e\xa7\xb4\x9d\x9b\x13\x1f\x97\x5a\x49\x75\x92\x98\xb4\x27\x89\xe3\x30\x0e\xc2\xf8\xbc\x87\xb3\xb2\x9a\xba\x33\x4d\x34\xab\xda\x8e\x28\xee\x08\x73\x3a\x6d\x79\xd0\xf4\xae\x33\xf7\xce\x9e\x71\x8c\xe8\x0f\x71\x1a\xe8\x29\xec\x76\x96\x8c\x69\xb9\x89\xc3\x74\x92\x91\xe9\x3b\xd6\xbb\x86\xc3\x54\x3e\x07\x20\xf4\x22\x33\x25\x7d\x4d\x5d\x2c\x45\x3d\x1c\x01\xbf\xde\x19\x47\xdb\xa1\x51\xed\x81\xd0\x6a\x72\x41\x60\x34\xf8\x90\xb6\xfe\x4e\xa4\xad\x8f\xb6\x49\x59\xaf\x91\x10\x3f\x49\x70\x10\xc6\x90\x6c\x4c\x40\x1a\x08\x44\xd5\x8e\x42\x92\x59\xc2\x60\xdb\x6a\xa1\xcb\x42\x11\x10\xb0\x2e\x25\xcc\x9e\x1e\xb7\xfb\xc0\x6f\x7d\xdb\xfc\x16\x57\x18\x65\xa5\x5b\x00\x9a\x48\x6b\xbe\xe7\x30\xe6\x2a\x5e\x73\x4f\x14\x5b\x3d\xb5\x45\x08\x5d\x87\x4f\xd8\xc5\x12\x27\x01\x12\x8c\x59\xe2\x38\x65\x73\xc1\xba\xcb\x44\x3b\x6b\xed\x75\x53\x1b\x2a\x22\xd6\x6b\x89\xca\x5d\x78\x9f\x04\xa5\x3c\xb6\x9a\xd2\xa9\xa1\xa3\x12\xf5\xa7\x38\x77\xb1\x54\xae\x1f\x31\x2f\xcf\x8c\xf6\x35\x00\xb1\xeb\x02\xcc\x54\x52\x5e\xcc\xfe\x01\xb8\x15\x47\xd7\x82\xc5\x0a\xd7\x73\x74\xa1\xce\x6b\x25\x0d\x5f\xbc\x67\x81\x5e\x54\xbc\xdd\xac\x45\xf6\x7d\xa9\x2d\x43\xd4\xf5\xdb\x13\xe5\xc0\xdf\x31\x31\x5e\x05\xd4\x5f\x93\x18\xf6\x81\xa0\x7e\xab\x04\x95\x1e\xd7\xd0\x73\x70\x1b\xe2\x17\xa8\x33\xc4\xa2\x75\xbb\x7d\x72\x30\x88\xe1\x8c\x1e\x88\xd4\x71\xba\x32\xdd\x81\x5f\xa2\x8f\xed\x58\xe3\xaa\x82\xb8\xb0\x38\xd4\x18\x16\x68\x33\xae\x10\x38\x1d\x66\xa5\xb2\x01\x8f\x7d\x76\xcd\x70\x07\xd3\xce\xc7\xf5\x92\xaf\x59\x50\xaf\xfd\x11\x9e\x23\x2b\x4e\x88\x35\x49\xb2\x38\xb0\x0b\xb3\x1f\x57\xa4\x7b\x4c\x83\x0e\x96\x5c\xd3\x3e\x60\x21\x7c\x45\x6c\x42\x1d\xfd\xe3\x81\xba\x9b\x30\xed\x54\xb8\x31\x64\xca\x6a\x29\x25\xb9\xb6\x10\x94\x9b\x3e\x2e\xb5\x12\xe9\x14\x2e\xec\x40\xe1\xc2\xd4\x4f\x2e\x11\x5e\xf4\xfc\x29\x0c\xe3\x5b\x24\x77\x0f\x1a\xbb\xdf\x1d\xc1\x4b\x9a\x33\x71\x98\x97\x6e\x5b\x2a\x67\x6e\x5e\xc1\x10\x36\x53\xb9\x55\x5e\xfe\xb0\xc1\xcb\x3f\xf0\x53\x1b\x40\xe5\xe5\x9f\xde\x29\x2f\x7f\xa8\xf9\x88\x35\x90\xf0\xd2\xf9\xce\x6b\xec\x76\x06\xa8\x7f\xe0\xa7\x8a\x32\x57\xa9\x72\xe0\xbb\x15\x73\x52\x7c\x7d\x6d\x98\xd1\xdf\xa1\x74\xfa\x3a\xa6\xc3\x08\x6c\xf7\xc5\x6a\x75\xa2\x48\xd6\xa7\x23\x51\x1a\x3e\x04\x2b\x4c\xa3\x00\x7b\xce\xba\xb2\x01\x22\x30\x8c\x6c\x97\xa1\xb4\xf5\x09\x0e\x67\x8e\xbb\x27\x4c\xb0\x44\xd8\x56\x9f\x1e\x1e\xda\x03\x6d\x4c\x86\xa3\x02\x5d\xc4\x20\xfd\x2d\x24\x53\xc7\x7e\xc9\x91\x28\xad\x59\x96\x12\x6b\x8c\x2c\xc4\xc7\x68\x85\xb1\x95\xe0\x00\x61\x8b\x24\x56\x96\x22\xc6\xa7\x5b\x28\x0e\xe6\x49\x18\x13\xd3\x43\xa4\x34\x3b\xe0\xd1\x11\xf7\x57\xd6\x2c\xb4\x28\xcf\xdd\x81\xc8\x08\xc2\x3c\x48\x22\x66\xd5\xcb\x41\xea\x85\xe6\x65\xc0\x76\xe6\xf6\x70\x12\xe1\xed\xdf\x4f\x1d\x34\xab\x2a\x08\xb5\x57\x58\xbf\x7a\x53\x42\xe6\xbd\x29\x82\x2b\x00\x1e\xeb\x2e\xac\x5b\x40\x9a\x5b\xc7\x51\xad\x1d\x8e\x32\x32\x57\xdc\x22\x74\x3b\xf3\xcf\x18\x9e\x33\x18\xda\xb6\x96\x66\x4b\xb3\x29\x77\x01\xb3\x5b\xb3\x12\x5b\xcd\xbe\xba\xfd\xe3\x6f\x3a\xd4\x11\x77\x09\x75\xc4\x6d\x43\x1d\x63\x19\x56\x88\x57\x84\x3a\x42\xee\x76\x77\x1b\xa1\x8e\xd8\x75\x07\x5a\x9f\x76\x1e\xea\x88\x9b\x43\x1d\xe1\xbd\x09\x75\x34\x88\x46\xb4\x15\xd1\xd8\x05\xa1\xc0\x0e\x16\x21\x71\xcb\x1c\x2c\xff\x7c\x76\xf6\x71\xd0\x5c\x41\x33\xe9\xa2\x7c\x01\xfd\xf8\xfa\x7a\xc9\x02\x00\xda\x53\x9f\x75\xe9\x12\xeb\xa8\xcf\x96\xe6\xb5\x7a\x08\xa0\x8d\x1c\x0e\x6a\xb3\xa2\x7f\xb3\x64\x2c\xf8\x4a\x70\x8c\x0f\x11\x0f\xbf\x0b\xd1\x70\x45\x88\x01\x0f\x21\x68\xe5\xb6\xa1\x4e\xb7\x32\x2c\xb4\xfe\x42\xba\x79\x74\x6b\x86\x19\x23\x44\x4f\xa5\x3d\x62\xa7\xe2\x27\xf3\x25\x2b\xc4\xcf\xec\xae\x8a\x9f\x2a\x94\x62\x06\x63\x78\x8e\x82\x9f\x16\x2f\x4f\x5f\xa5\x4c\xc2\x69\x90\x4c\x0b\x4a\xdc\xce\x9c\x5f\xf1\xbe\x14\x09\xfe\x50\x5f\xb9\x92\x8a\x10\x76\x51\x52\x27\x02\x3b\x87\x9a\xf0\xdb\x40\x4d\x04\xb7\x0b\x35\xe1\xdf\x2a\xd4\x84\xb3\x3c\xe1\xf8\x8d\x36\x8c\xa2\xe4\xca\xce\x99\x8f\x6c\x98\xbe\xd3\x37\x40\xc9\x49\xdd\xd8\x1c\xd7\xd7\x4e\xf5\x61\x9d\x82\xb8\xd6\xf3\x9c\x24\x1c\x44\xde\xed\xa7\xc9\x0c\xf1\x30\x91\x37\x46\xe3\x32\x54\xc6\xa8\x7f\x75\x98\x0e\x3b\xa1\x43\x80\x01\x80\x23\x2f\xee\x87\x81\x96\x37\x5c\xe6\xe2\x34\x82\x63\x58\xe8\xe1\xe2\xe7\x04\xd7\x76\x72\xaf\x26\xcc\x26\xea\x9f\xa3\x18\x61\xca\x5a\x25\xf8\x13\xe2\xcc\x15\x76\xe9\x99\xf4\x21\x4f\x8e\x59\x79\x0d\xdd\xaa\x57\x73\x63\xf4\x8d\xc6\x7d\x49\x95\x0a\xb7\x1f\xf2\xc3\x21\x5f\x1b\x6a\x98\x6a\x94\x0b\x01\x36\x5f\x5e\x71\x44\x4c\x3d\x06\x01\xf6\x47\xc3\x19\x75\xe4\x02\xb2\x2b\x53\x01\x73\x5b\xa6\x1c\x93\xf2\x24\x2f\xa9\xa8\xd6\x06\xc0\xbc\xb0\xff\xc7\x1e\x14\x51\xac\xd8\x53\x7f\xef\x11\xdd\x98\x2a\x7d\xd3\x79\xca\xf7\xf7\x9f\x98\x2b\x3a\x25\x24\xd7\xd7\x31\x78\x85\x52\x12\xc6\x0c\x49\xb7\xf4\x86\x17\xaf\xf5\x58\xbf\xbe\xc6\xfa\x87\xcd\x65\x4a\xde\xf0\x0d\xee\xef\x39\x8a\x52\x64\x11\x6f\xb5\x12\x4d\x05\x6d\x98\xd3\x29\xee\xcf\xb2\x96\x6f\x19\xf8\xbc\xcd\xb8\x70\xbf\x67\xc4\x93\x33\x95\x83\x7f\x8a\xd9\x80\x33\x64\x79\x9e\x65\xff\x61\x49\x97\x20\xb7\xad\x04\x5b\xfa\x9c\xd4\xbd\x2f\x7d\xfa\x3f\x8d\x1f\xfd\x8f\xfd\xcf\x7c\x6f\x85\x61\x3d\x2e\x1b\xd6\xe3\xce\x86\xf5\xd8\xcd\x73\xe6\x9b\x9d\x54\x7d\xb3\xb7\xf6\xf9\x2e\xd5\x5a\x18\x8d\x5a\x18\xca\x6b\xbf\x74\x41\xa2\xab\xcb\x6a\xea\x57\x4a\xb9\x16\x96\xf1\xa6\x8f\x5b\xb5\xa2\xf2\xd2\x87\x9b\x35\x24\xbe\x2f\xb5\x95\x6c\xe8\x6d\x7e\xd1\x98\x3c\x62\x9d\xc4\xc7\xfd\x99\xc2\xf4\xe7\xa4\x82\x30\x29\x84\xc1\x12\xc4\x64\x7b\x29\xf0\xc1\x11\xea\xf7\x2c\xab\x64\xc2\xcf\x09\xae\x11\x13\x2e\x2e\x85\x48\x90\xb6\x2b\x9d\x6e\xee\xd1\x74\x71\xd9\xc8\x45\x63\x83\x8b\xae\x0d\x43\x35\x2e\xea\x72\x09\xe3\xaa\xd9\xdf\x47\xfd\x5f\xd0\xa2\x9f\x12\x88\x09\xb7\x8b\x10\x7a\x41\x37\x07\x85\x31\xbf\x24\x7a\x9b\x9b\xf6\x3c\x76\xad\x17\x1c\xca\x5f\x3e\x7d\x78\xdf\xe7\x49\xd7\xc2\xc9\xc2\x19\x6a\xb7\x20\x60\xf1\x61\xec\xc6\xa2\x1f\x8d\xdc\x3d\xdc\x25\xfe\xc8\x05\xf8\xfa\xda\xc1\x75\xd7\xfe\x2f\x68\x31\x60\x5e\x51\x9b\xc5\xa6\x89\xdb\x19\x7b\x45\xc4\x5b\x4d\x23\x1b\xc6\xbd\xe9\x2c\xdb\xba\x7b\x1f\x97\x3d\xc8\x8c\x05\x40\xfd\x14\xcd\x21\xa3\x6b\x1e\xcb\x0d\x74\x20\xbb\xcb\x1d\xd8\x02\xcf\xb6\xb9\xfb\x58\x9d\xa3\x59\xa9\x45\x19\x37\xcb\x9d\xc7\x14\x7f\xeb\xc5\x52\x25\x45\x28\x1f\x1e\x06\x8f\x3c\xcf\xe0\x25\x7f\x41\x0b\x9b\x29\x9a\x98\xeb\x19\x06\x71\x8d\xd7\x45\x17\x7f\xfe\x8a\xeb\x97\xba\xe0\x5a\xf9\x98\xb5\xbf\x49\x57\x7c\xbf\xca\xc7\x6c\x1d\xb6\x94\x76\xc1\xcd\x10\xc1\xa1\x9f\xde\xaa\xe7\x05\xd0\xdd\x95\xab\x58\xc1\xf7\x01\x09\x65\xf2\x70\xd7\xfe\x1e\xee\xda\x71\xb3\xcb\x48\x16\xf6\xf8\x3a\x30\x77\x91\xd5\xba\xc3\xfa\xb7\x7e\x14\xa2\x98\x30\x5c\xa1\xb6\x8e\xc8\xe2\xb4\x1e\xa4\xd9\x8c\xde\xb4\x3d\x43\xff\x97\x46\xd9\xf9\xc1\x80\xd1\x04\x3f\x89\xa4\x36\xb1\x6d\x95\xd9\x3c\x25\x18\xc1\x59\xaf\x5d\xdd\x49\x97\xba\x83\xe4\x2a\xee\x54\x7b\x19\x8a\xb9\x95\x16\xd3\xd0\x61\xce\x65\xce\x68\xbe\x46\x0a\x88\x79\xae\x03\xb1\x04\xa5\x87\x7c\x45\x6c\x30\x53\xe8\xcc\x2c\x25\xb3\x13\x7b\x22\x6f\xc8\xcd\xe3\x33\xd7\x33\x58\x92\x4a\xe7\xf4\x2c\xa8\x5c\xd2\xec\x47\xdd\x0d\x29\x32\x37\xf3\x06\xe9\xed\xf2\x69\x11\xfb\x94\x1d\xf1\x50\x5f\x54\xf5\x79\x8e\x93\xcb\x30\x40\xf8\x73\xc2\xb1\x4c\xaf\xaf\x97\xf9\x1e\xd1\x5f\x7f\x59\x7c\x16\x4e\x26\xe6\x67\xc5\xf3\xbd\x22\x19\x71\xb9\xda\xeb\x6b\x7b\x8e\x93\x19\x22\x53\x94\xa5\xf6\x1e\xe9\x4f\x10\xf1\xa7\x12\x44\x88\x77\x8f\xcd\x36\x7f\x41\x79\xb9\xb3\xe4\x02\xc5\x8e\x7d\x70\x79\xc4\x54\xdc\x38\x86\xd1\x01\x95\x96\x78\xcd\x3d\xd6\xb2\xfd\x47\xe6\x6e\x4e\xf0\x82\x87\x5f\xcb\xe6\xbc\xab\x30\x0e\x12\x96\xdb\x34\xcd\x22\xc6\x86\xf1\xcf\x3e\x8a\x02\x3c\x6f\x20\xf7\xf7\xc1\x7a\x4a\x16\xee\xcd\xc9\xfd\x38\x45\x53\x96\xac\x95\xf9\x74\x16\xe4\x27\x18\x58\xf6\x1f\xb1\x4b\x17\x32\x4d\x22\x01\xea\xe2\x14\x55\xb9\x39\xf3\x6f\x12\x22\xe8\x27\xbe\xd3\x15\x27\xa4\x30\x4d\x58\x51\x41\x5c\x0b\x57\x1b\xa6\x3a\xd5\x0a\xa8\xb9\x1d\x1a\x03\x95\xe4\xe3\x14\x51\xb6\x4e\xb4\xf1\x09\x71\x00\x8d\x3e\x3d\x48\x92\x59\x65\x6c\xab\x3c\x53\x60\x99\x0b\xc5\xc5\xea\x8a\x08\x24\x6b\xeb\x19\xed\x95\x3a\x4f\xe9\x79\x5c\x04\xd0\x3b\x4b\xca\x66\x0d\x96\x6c\x11\x2f\x61\x34\xa8\x55\x9b\xbd\x7b\x7d\x76\xfa\xe6\xe5\xa7\xcf\x1f\x3f\xbc\x7d\xfb\xf9\xcd\xfb\xb3\xd7\xa7\x7f\x3d\x79\x6b\xbb\xd7\xd7\x47\xe8\x38\x07\x29\x1b\xd1\x00\x0d\x0f\x47\x20\xa5\x9d\x1a\xa0\xe1\xd1\x88\x79\x5f\xa5\x94\xf7\xa5\xf3\xfc\xab\xa0\x58\xe5\x89\xd6\x55\xbe\x6c\x2e\x5f\x34\xcf\xf2\xc0\x9c\x13\x49\x04\xdb\x4c\xca\x32\xd7\x86\x8c\x38\x6b\xb9\xd5\x98\x91\x18\xd7\x2b\x45\x2d\x77\x38\xb2\x82\x04\x7f\xb5\xb1\xe5\xc0\xf7\x26\x26\x58\xba\xa4\xce\xdb\xfb\x91\x05\xe5\xaa\x77\xa5\x6a\xab\x74\x59\xdc\x11\xdb\x23\x2c\x94\x2a\xae\x92\x8e\x76\x32\xc2\xba\x4a\x5c\x90\xe9\x82\x42\x4d\xab\xa5\x83\xd4\x4e\xf7\xb6\xb6\x96\xf5\xed\x56\x36\x3a\x47\xcd\xef\xdc\x72\xb5\x9e\x52\xdb\x06\x92\xfe\xb8\xbd\x70\xc4\xb3\x3e\x3d\xf8\xa4\x3f\x08\x18\x37\xea\x93\xde\x82\x93\xa6\x3b\xb1\x75\xf8\x8d\x16\x9e\xd8\x2a\x22\x32\xe2\xce\x9f\x1b\xa1\x4c\xb0\x23\x72\x27\xa0\x21\xe8\x8b\xb7\x6c\x24\x2b\x62\x27\x31\x9a\x60\x94\x4e\x99\xee\x69\x85\x49\x47\xd4\xd3\xe0\xdf\xda\x26\x64\xb1\x45\xf8\xce\x2e\x41\x28\x36\xc1\xbc\xa8\x07\xa1\xa8\x69\xe5\xad\xf4\x75\xde\x04\xea\xe2\xad\xdc\x5c\x3b\x81\xba\xe0\xc6\xc2\x2d\xbd\xf0\x64\x25\x9b\x44\xaf\x1b\x69\xc3\xd6\xd9\x66\x0a\x35\x17\x87\x7f\x07\x53\x70\x09\x16\xe0\xbc\x20\xf3\x1f\xee\x93\xd2\xeb\xf3\xc3\x9d\xf4\x7b\xb8\x93\x3e\x7a\x4e\x93\xca\x0a\x27\x99\x20\x4c\x4d\x3a\xad\x24\x26\x30\x8c\xf9\x6d\xb2\x52\x2b\xd6\x94\x99\x8b\x65\xee\x73\x41\xd6\x84\xf8\x8b\x08\x09\xe3\x73\x7a\x17\xfa\x1d\x61\x7d\x83\x36\xce\x75\xb1\x34\x90\xd0\x16\x66\x9d\xbe\x10\x57\xee\xbc\x83\xee\x4a\xd7\x58\x7d\x50\x89\xc3\xd8\x1c\x83\x89\x50\x42\x7d\x28\x34\x59\x62\x6a\xc1\xb8\xf4\x8a\xc9\x3a\xd3\xd2\x43\x9e\x02\xf1\xb2\xf4\x54\xcd\x1f\x58\x94\xde\x18\xf8\x6e\xe7\x05\x0a\xf1\xd6\x50\x37\x0d\x8c\x03\x27\xc2\x4d\x6e\x3b\x15\x67\x27\x1f\xc6\x8e\x9d\xa5\xc8\x8a\xe5\xf2\xbc\x58\xe1\xda\x23\x22\xbb\x1c\xd7\x7b\x3e\x1c\xb9\x83\xe1\x68\x85\xaf\x8f\xca\x46\xd3\xc9\x92\x56\x6b\x3a\x03\x27\x2f\xdf\xa6\x83\xe5\x47\x96\x03\xec\x15\x5f\xf6\x74\x30\x1c\x81\xd3\x24\x42\xda\xef\xbc\xa5\x8d\x0d\xe8\x96\x5b\x0d\xa8\x91\xe8\x40\x8b\x1a\x9a\x63\x01\xd7\xed\xf2\x55\x45\x6e\x5e\x40\x28\x1b\x60\x37\x75\x32\xfc\xc9\xcb\xb7\xba\x1f\x93\xc6\x15\x15\x95\xd4\xf1\x44\xcc\xa9\x07\xc4\xe9\x80\xe4\x6a\xe6\x2b\x48\xfd\x43\x4a\xf5\x2b\xb1\x65\xc3\xa5\x04\x2d\x1e\xd8\x94\x5e\xd1\x3b\xd8\x06\x1c\x71\x79\x60\x53\x32\x8e\x6c\xc0\x70\x96\x29\xc5\x1a\x49\xfe\xf0\x1c\x91\x13\x9f\x84\x74\x02\x3c\xdb\x2e\x94\x6b\xab\x77\x8c\xd0\xba\x2d\x69\xb7\x0b\x0f\xad\x7c\x6f\x55\x78\xb8\xd8\xa7\x9a\xcb\xdf\x5e\x38\x71\x38\x90\x25\x77\x4e\x73\x97\xc8\x73\x74\x64\x56\x71\xc4\xf4\x55\xb5\x79\xea\x50\xd7\x2d\xdc\x45\xaf\xaf\x8b\x1e\x88\x45\x39\xf2\x28\x8f\xca\x6b\x7d\x41\x86\x87\xa3\x81\x19\xb3\xc4\xcd\xa4\x88\x43\x53\xd7\x65\xc0\xe3\xde\xa8\xac\x16\xfa\x47\xee\xd6\xc4\x4b\xee\xef\x3b\xab\xea\x50\x9d\x62\x23\x14\xb5\x80\xf2\xe7\xc3\xc3\x91\xeb\x82\x38\x77\x08\xe0\xb3\x89\x72\x37\xcf\xc1\xc4\xfb\xec\xcc\xcd\x34\x7b\x99\x82\xf0\xd8\x4e\x5b\x32\x2e\x57\xad\xd1\xc3\xed\xd1\x28\xa7\xe5\xda\xb9\xfa\x68\xeb\xf4\x80\x97\xe5\x7a\x45\x62\xda\xad\x93\x03\x2e\xca\x15\x17\x84\x7d\x98\x6d\x5b\xf9\x79\xb9\x72\x13\xfb\xd3\xdf\xb6\xfe\xf2\x9c\x28\xff\xb5\x60\xbd\x80\x51\xfb\xa5\x0b\xe6\xba\x74\x51\x53\xbf\x92\x94\x66\x1b\x34\xa1\x24\x25\xa3\x95\xb9\x2e\xc3\x7c\x6c\x2f\xc3\x24\x61\xe0\xf7\xa4\x62\xf6\xab\x18\xde\x1f\xd2\x8f\x3c\xc8\x1f\x77\x57\xfe\x98\x37\x1b\xdd\x59\x2a\xa2\x15\x06\x77\x4d\x3a\x68\xa5\xf9\xa2\x47\xf1\x40\x1e\xc5\xd6\x70\x60\xc6\x57\x7a\xe4\x4e\xab\x0f\x15\x2b\x45\xbf\x3c\x18\xf8\x4c\x59\x97\x12\x48\x50\xc7\xf0\x9d\xba\xb4\x23\x3c\xda\x00\x57\x73\x8c\x14\xd7\x83\x4c\x30\xb2\xc6\x94\x6c\x5a\x0b\x0b\x7f\xaa\x0f\x57\xb1\xd0\x8c\xb9\xfd\x28\x49\x2e\xb2\xb9\x58\x16\x45\xd2\x06\x8c\xc0\x5d\x85\x64\xda\xcb\x70\x64\x37\x45\xe0\x98\x64\x70\xa5\x0a\x51\x5a\xb5\xcb\x2c\xf3\x4a\x4d\x62\x95\x4d\x33\xf0\x7b\xb8\xc5\xf7\xbd\x06\xda\xa3\x78\x28\x8e\xf1\xf0\x32\x09\x90\x77\x7c\x78\xcc\x4f\x85\xce\x0b\x17\x99\x6f\x6a\x63\x43\xb8\x59\x18\x69\xc1\x2a\xab\x20\x89\x5a\x32\x8e\xcc\x3c\xdf\xa4\x08\x5d\xc6\x29\xf3\xe7\xbb\xbe\x26\xb5\xfc\x25\x98\xd7\x47\x02\x90\xfe\xc7\xe2\x47\x51\x5a\xba\xe8\x87\x01\x73\x50\xcc\x4b\x32\x44\x43\xc8\xef\x6a\x11\x01\xb9\x79\x94\x9c\x27\x19\xd1\xd3\xdc\x6b\x91\x01\xa9\xb7\xa4\xcd\xe5\x35\x29\x20\xc4\x77\x75\xb5\xa6\x6e\xee\x47\x49\xaa\xd0\xd8\xc5\xf6\xef\xf3\x87\x76\x79\x23\xd2\x29\xa3\xcb\xfa\xd3\xe2\xd7\xd3\xb7\x1a\xdb\xac\x85\x96\xe8\x9b\x1e\xd8\x63\x98\xa2\x5f\x71\x64\xb3\xc4\x9d\x7a\x03\xc9\x1c\xc5\xe5\xfa\x99\xd5\xb4\x40\x14\xe1\xc2\xa5\x80\xfb\x78\x74\xc8\xf1\x3e\x2c\xd4\x9f\xf1\xe4\xa6\xba\x13\xab\x4d\x85\x39\x82\xac\x2b\x98\x5a\xac\xeb\x81\xed\x0e\x88\xbe\x4f\x4f\xab\x05\x00\x31\x36\xea\x0f\x3f\x94\x53\x2e\x68\xdf\xab\x56\x4b\x5f\x3d\x3d\x3c\xcc\x3b\xef\x6c\xe2\xe6\xb5\xc1\x0d\x8a\xf6\x6c\x6f\xcd\xf5\xcb\x75\x6b\xdc\xed\x0d\x45\x4f\x74\x87\x1c\x5c\x5b\xcb\x5d\x88\xaa\x50\xa7\x72\x83\x88\x8a\xe2\xdb\x1d\x45\x53\x28\xd2\xb3\xa5\x02\x5f\xab\xe7\x56\x75\xf8\x7b\x55\xff\xcf\xfb\xc0\x37\x8f\x1f\xf8\xe6\xdf\x03\xdf\x3c\x6d\xd6\xdb\x6b\x7c\x71\x93\xe6\x5e\xe8\xdd\x9b\x94\xf6\x4d\x4a\xf5\xa4\x8d\x8a\x5c\x3d\x49\x99\x66\xbf\xcb\x17\x82\xbd\xf6\x37\xe4\x8b\x27\x15\xf6\x57\xfa\x7c\x4e\x0c\x35\xf9\xac\xf4\xd4\x50\x78\xcc\xeb\x53\xf2\x09\x3e\xb6\x20\x46\xbb\x07\x86\x6f\xa3\x0f\xd7\x27\xf7\xae\xa8\xc4\x6d\xfb\x36\x15\xdc\xb5\x1a\xe1\x55\x3a\xdd\x62\xc9\x76\xa6\xd6\xad\x63\xa4\xbf\x19\xb5\x6e\xe0\x8d\x1d\xbf\x81\x1d\xdb\x5a\xb1\x3b\x2b\x57\x2e\x54\xa4\x5b\xeb\x74\xe7\xe5\x8a\x4d\x2d\xe6\xd6\xba\xdd\x72\xb7\x95\x16\xb3\x85\x0f\x5b\xed\x97\x2e\xf0\x75\x2e\xab\xa6\x7e\xc5\x2f\x66\x1b\x34\xa1\xf8\x45\xa3\x15\x5f\xe7\xe5\xa6\x1d\x78\xb9\x8d\x60\xd8\x6e\x4a\x85\xf9\xcd\x02\x1f\xcd\x6e\x04\x3f\x24\x68\x83\x1f\x32\xb9\x5d\xfc\x90\xe0\x56\xf1\x43\xee\x75\xd8\xd9\xad\xc3\x60\x3d\x48\x10\xdf\xbc\x04\xc1\xf9\xa5\xa9\xd7\xc6\x20\x9f\x83\x95\x85\x30\x82\x81\x59\x26\x95\xa8\x0e\xcd\x45\xb8\xaf\xf5\xaa\x2a\xc4\x65\xd3\xa1\x48\x4d\x6f\x2f\xd0\x62\x55\x15\xc6\xeb\x9a\xcf\x35\x00\xbf\xe6\x4a\x6a\x0a\xd5\x54\x05\xfd\x68\x55\x25\xc6\x6b\xf1\xf9\x88\xc9\x79\x97\xcd\xf6\x11\xee\x5a\xd5\x64\x1d\xf1\x61\xac\x85\x23\x7e\x26\x18\xfa\x17\x28\x58\x6b\xf3\xe0\xbe\x4d\x54\x28\xd3\xf8\xa7\x6a\x96\xf4\xb6\x22\x99\x11\x81\x97\x94\x22\xf0\x3e\xd3\x3e\x2a\xe3\xc5\xbc\x43\x82\x74\x29\x8d\x69\x18\x95\x53\x98\xd6\xa4\x1b\x96\xbc\x41\x93\x60\xc5\x00\x9d\xe2\x22\xa5\x30\xf1\x9e\xc7\x3c\x99\x30\xa5\x8b\xee\xfe\xfe\x23\xc6\x30\x8b\xe4\xdf\x39\x95\xc3\x4a\x39\x59\xe9\x20\xfa\xfc\x79\xae\x61\x34\xd5\x95\x32\x5e\xe7\x12\x7c\xc9\x00\x84\xb2\xb0\x57\x6c\x0b\x24\xb7\x04\xa9\x02\xd8\x50\x1e\x1e\xf7\x05\x6a\x93\x17\xbb\x00\x97\xe1\xa6\x68\x17\x9a\x52\x6b\x9b\xbe\x3f\x52\x28\x19\x8e\x58\xac\x5d\x5c\xcd\x3c\x5c\x54\xaa\xcf\x39\x95\xc7\xb8\x9c\x49\xdc\x65\xc1\xce\x28\x39\xa6\x48\xaf\x3e\x83\x73\x07\x79\xcf\x67\xce\x4c\x43\x01\x55\x8e\x3e\x6e\x3d\xa6\x83\xe8\x96\xe8\x53\xed\x34\xaa\x28\x3f\xa8\x39\x1e\x15\xc0\x01\x35\xf8\x56\x54\xbc\xed\x93\xe4\x13\xc3\x7f\xd0\x70\xb3\xe8\x32\x63\x29\xb6\x0d\x47\x03\x47\xeb\xbe\x87\x4b\x90\x58\x2c\x3d\xac\xde\x65\x03\x21\xcb\x5c\x79\xfd\xa3\x72\x66\x69\x4d\xe6\x2b\x1a\x9b\x82\xf2\x2e\x2d\x63\x25\x94\xdb\xab\x7c\xa0\xae\x65\xe4\x3d\x5f\x0e\x39\x9d\x13\x34\xb7\xa0\xce\x3a\xe5\x52\xd4\x74\xd4\x0f\x63\x3f\xca\x02\x16\x60\x28\x37\x22\x4f\x14\xcc\x96\x8b\x5e\xb4\x79\xb5\x41\x96\xf4\x76\x5c\x97\x9a\x76\x6b\xeb\x40\x56\xae\x97\x53\x8d\xed\x2d\x03\x7e\xb9\x62\x53\x62\xdc\x5c\xd4\xad\x73\x86\x63\x12\x64\x1d\xc0\xc3\xe6\xd0\x10\x2b\x41\x21\x2e\x3b\xc8\x76\xcc\x7f\x71\x5b\x25\xbd\xa8\x64\x17\x40\xb7\x85\xb4\x97\x3d\x70\xa2\xdf\x3a\x27\x2a\x92\xb9\x35\x71\x31\x42\x51\xdd\x0a\x91\x95\xed\xc1\x10\xb5\xc6\x63\xe5\x7b\x56\xb9\x74\xec\x12\x4a\x95\x6b\xb5\x0a\x2c\xd5\xe4\xae\x62\xa9\x36\x31\x56\xfc\x38\xdf\xf9\x4c\xc2\x37\xe2\xd6\x6d\xc2\x26\xb5\xd5\x6d\xf3\xdb\x39\xc1\x33\xf6\x9f\x7a\x93\x7a\x8a\x08\xed\x82\x43\x5c\xfa\x8a\xfd\x69\x40\x98\x0b\xff\x01\x23\xd5\x08\x41\xb3\x79\xc4\xfc\x85\x44\x12\x11\x95\x41\x44\x4b\xc3\x5f\x82\x17\xe0\xde\xd6\xc8\xcd\x09\x86\x71\x1a\x99\x58\xb6\x1a\x5b\x57\xbc\x96\x2b\x0e\x8c\xb6\x4f\xb3\x88\x79\x52\xb3\xeb\x3d\x2b\xdd\x42\x5c\x71\xbb\x7d\x4a\xfb\xf5\xd9\xfc\x6e\x24\x27\x60\x4d\xbb\x5b\x81\x35\xb5\x40\x6a\xea\x90\x0d\x90\xe3\x5f\x6c\x79\x27\xf3\x3a\x1e\x92\xdd\x3f\x5c\xc7\x37\x92\xec\x9e\xee\xaf\x10\xd5\xe1\x92\xb7\xbb\xae\xe9\xf6\xec\x85\x31\xcf\x01\x7c\x30\x10\x55\xbc\x09\x0e\x06\x5a\x4c\xf3\x06\x51\xca\x7c\xdf\xb7\xbb\xbb\xea\x71\xec\x6e\x3a\x0d\xab\x0e\xb7\xa1\x8b\x6a\x06\x44\xe1\x1c\xd2\x7d\x8a\xfa\x59\x18\xb8\x7b\xa4\x3f\x4f\xe6\x8e\x0b\x08\xb3\x22\x38\xa8\x2f\x70\x1f\x3e\xd2\xb1\xf6\x35\xd8\x5b\xf1\xfc\xcd\xab\x02\x53\xa6\x1e\xc1\x50\x0a\x82\x6a\x05\x6c\x50\x42\x46\x24\xae\xbb\x17\x97\x52\x4a\xb1\xf6\xde\xa8\x2f\x10\x15\x06\x4d\x61\x58\xbe\xd4\xe5\xf8\x55\xc9\x65\x55\xa9\x22\xad\x6c\x38\x71\x8c\x2c\x5f\x12\x16\xfa\xf9\xa1\xb8\xee\x15\x06\xe0\x4f\x0b\xc7\x5e\x3b\x13\x36\x40\x7d\xb5\xb9\xb4\x3c\x63\x49\x80\x54\x06\xc8\x24\x40\xee\x1e\x79\x81\x3d\x32\x70\x78\xf5\xbc\xd0\x9a\xca\xe5\xf7\x61\xe0\x02\x6e\x37\x22\x85\xdd\xa1\x98\x38\x0c\xec\x19\x22\x50\xbf\x5d\x63\xf1\xc8\x75\x9b\xd3\xe2\x6e\x11\xee\xad\x43\x07\xae\x8b\xf8\x36\x57\x6c\xc3\xc8\xef\x52\x25\x3b\x8a\x00\xc7\x49\xb4\x6d\xfc\x37\xaf\xe2\x41\x2e\x7d\xb8\x08\xbf\x96\x5c\x4a\x77\x60\x6b\xa1\x94\x16\x7e\x10\x49\x6b\x6e\x75\x76\x8e\x6f\xd2\xe9\x6a\xb3\xdc\x01\xf7\x58\xf0\xbc\x75\xa1\x6e\x73\x41\xee\x7e\x09\x6f\x55\xce\x6a\xb3\x1b\x8c\x1b\x3a\x28\x8b\x3d\xa6\x82\xff\x83\x24\xf7\x70\x81\xdd\x8c\x24\x57\xde\xb0\x1b\xcb\x74\xe5\x8a\x76\x28\xd5\x55\x0e\xd5\x2e\xf0\xe5\x05\x1b\x2f\xff\x65\x4e\x97\x61\xb0\x32\xb7\xc9\x76\xb2\x61\x39\x19\x10\x6f\x89\x28\xd9\xcf\x90\x91\xb8\x08\x89\x4a\x29\x73\x84\x24\xa6\xe7\x1e\x96\xc3\x90\x06\xbb\xd4\x06\xc4\x05\x71\x0e\xe2\xfe\xc9\xcb\x97\xaf\x3f\x7d\xfa\x7c\xfa\xfa\xe4\x15\x40\x2b\xb0\xf3\xdb\xc1\x6e\xd5\x22\xa9\xab\x24\x1e\x1b\xe2\x52\xa9\x24\x1e\xad\x01\xb0\x36\x11\x50\x76\x2b\x98\x28\x2b\xea\xad\x79\x43\x16\xc4\x3b\x7d\x20\xde\xbf\x07\xe2\x1d\xb6\x44\x0b\x94\x7b\xad\x2d\x60\xe0\x39\x24\xe8\x0a\x2e\x4a\x34\x5e\x3c\xa5\xe7\xc3\x71\x9a\xd3\xda\xaf\xa4\xcd\xdd\xa1\x01\x6b\x50\xfd\xfe\xc4\x3b\x72\xcb\x1a\xb9\x5d\xc1\xfc\x55\x52\x94\x57\xad\x10\x46\xae\xf2\xb4\xfa\x85\x31\x01\x1b\x26\x46\x37\xeb\x58\x95\x1f\x3d\xec\x42\xf3\xbe\x86\x07\xf8\x43\xca\xa3\xdf\x19\xdd\xcb\x9a\x3d\x1e\xd9\x39\x6e\x4b\xe7\xc4\x76\xe5\x74\xae\x2b\x4a\xaa\xf1\xf1\x05\x5a\xa8\xec\x4a\xbb\x54\xc9\xf0\xe1\x68\x3a\x99\xf0\x9e\xe9\x64\x24\x45\xc8\x39\x83\xf5\x3e\x09\x76\xc5\x27\xb7\xa0\xd8\xbc\xcd\x5f\x50\x3d\x62\x7a\x33\x0b\x0b\x42\x2f\x31\xd9\x43\xb1\x0e\xdb\xfb\xaa\x25\x75\x6c\xe7\x7b\x8e\x2b\xbd\x19\x73\xcc\x3e\x2e\xf1\xac\xb5\xad\xfc\x82\x16\x1b\x33\xc6\x2c\x63\xd2\x0a\xbe\xb8\x43\x86\x21\x1e\x22\xb7\x9d\xc6\x5e\xd4\xb1\x9b\x9c\xe9\xc0\x07\xc1\xde\x03\xa8\xd0\xef\xeb\x0a\x59\x91\xe1\xbb\x8b\xe2\x9e\x6d\xc4\xd6\x9a\x7b\x56\xba\x4b\x6a\x6f\xfe\x41\x8a\xa2\xc9\xc1\x20\x45\x3e\x46\xa4\x6d\x88\x35\xef\x18\xbb\x9b\xa4\x13\x9b\xf0\xdf\x69\x19\x71\xad\x55\xc0\x0d\x0e\x4c\xbb\xde\x2d\xf2\xba\xbb\xc9\x21\xb8\x67\xd7\x1b\x27\x44\x0f\x36\x87\x1d\xda\x1c\xe8\x6e\xaf\xf7\x45\x63\x6f\x6a\xf1\x46\xf9\xd9\x18\xd0\x22\xf4\x0f\x89\x58\xa4\xe3\xef\x94\x32\xa3\x20\x97\x41\x05\xc5\x0d\x6e\x6f\xfc\x55\x5d\x5b\xba\xf7\x9b\xb1\xbe\xae\xe4\x37\x38\xda\x6b\xb9\xde\x66\x71\xf6\xa7\xc5\x69\x12\x21\xa7\x4d\xf1\x1c\x04\xde\xac\x36\x3a\x7a\x07\x28\x38\x0d\xd1\xcb\x2d\x18\x86\x36\xd1\xcb\x35\xf5\x77\xb1\xc7\xb4\x8c\x5e\x9e\x95\xe3\xd2\xa3\x49\x3b\xa0\x9b\xea\x67\x6d\xfa\xff\x51\x3a\xc6\x6f\x12\xe2\xad\x3e\x6f\xd3\xd2\x29\x77\x73\xd8\x2c\xce\xfb\x54\x90\xee\xc6\x38\xef\x0e\x98\x3d\x24\x99\x27\x51\x72\xbe\xb1\xe7\xe1\x43\x1e\x94\x07\xf6\xac\x65\x1e\x94\xb5\xc8\x33\x81\xdf\x56\xd2\x97\xbb\x96\x63\x2c\x5e\x84\x31\x17\xf3\x77\xc9\xca\x04\x7e\xaa\x73\x32\xe9\xbd\xe3\x64\xc4\xb9\xce\x6b\x4c\x3f\x86\x9f\x60\xe0\xa7\xcc\x4b\xf0\x03\xbd\x3c\xfb\x81\xaf\x8c\x4f\x74\x0b\x78\x9e\x17\x5f\x5f\x1b\x4e\x6c\xef\x50\x3a\x7d\xcd\x13\x04\xda\xee\x0b\x67\x7b\x71\x7f\x45\x82\x65\xa4\x23\xee\x49\x5f\x49\xc3\x61\x9d\x61\xd6\xd1\xfb\xb5\xb0\x8d\x71\x00\x3c\xdb\x05\xd8\x73\xd6\x95\x0d\x10\x81\x61\x64\xbb\xd7\xd7\xb6\xed\xf6\x09\x0e\x67\x8e\x2b\x41\xfd\x88\x70\xbf\x7f\x7a\x78\xa8\x3c\xf0\xe9\x68\x1d\x8e\xc2\xe0\xc5\xfb\xfb\x74\xad\x03\x01\xf2\xf7\x32\x89\x63\xe4\x13\x6b\x96\xa5\xc4\x1a\x23\x4b\x24\x51\xb4\xc2\xd8\x4a\x70\x80\xb0\x45\x12\x2b\x4b\x11\xe3\x07\x2c\x14\x07\xf3\x24\x8c\x89\xed\x96\xdc\x2d\xf5\xd9\x05\x8f\x8e\x5c\xb7\x00\xfc\x9b\xe2\xe4\xca\x42\x79\x1d\xcc\x3a\x65\x25\x52\x2f\x34\xd5\xc2\x6c\x07\x6f\xaf\xe2\x08\xab\xca\xe6\xad\x34\xd5\x2d\x54\xd4\xeb\xcd\x72\x69\xf8\x1f\xd4\x4b\xc6\xf4\x49\x19\x64\x19\xd1\xe9\xec\x95\x8a\x28\xb3\x47\x63\x1d\xa5\x1b\xab\x19\x8e\xa2\x91\xf2\x35\x7e\xa0\x90\x37\x97\xe6\xc4\x9f\x23\x52\x0d\x1d\x2c\xc8\x56\x9e\xbb\xeb\xe6\x21\xc9\x48\x84\x48\xd3\xdd\xcd\xe1\xf0\x68\xa1\x30\x3e\x3f\xb8\x0a\xa3\xc0\x87\x38\x30\x8a\x08\x00\xf7\x36\xa0\x2c\xc5\xa5\xed\x7f\xd3\x90\x2c\xc1\x8d\x40\xb2\xf8\x6d\x20\x59\xe6\xb7\x0b\xc9\xe2\x7f\x1d\x48\x96\xd9\x7d\x82\x64\x99\x7f\x25\x48\x96\x87\x0c\xe4\xdf\x3c\x63\xcc\xf9\x99\xb1\xc7\x90\xef\x14\xbf\x1b\xf7\x19\x4d\x56\xc9\x9e\xa7\x0c\xe7\x97\x71\xb6\x06\x1f\xab\x20\x91\xe7\xac\xc0\x3b\x38\x17\x8c\x55\x82\x09\x0a\xbc\xe1\x28\xa7\x7f\xc9\x62\xf2\x69\xbf\xdf\x97\x9f\xf1\xed\xe3\x8e\xf4\xcf\xd8\x3f\x8e\xc8\xe2\xbc\x0c\x27\x8e\x4d\x49\x65\xe8\xb3\x08\x08\xa6\x7a\x92\x99\x8d\x8f\xf6\x6a\xde\x12\xf1\xb6\x77\xa4\xa5\x8e\x4e\xe7\x51\x48\x1c\xbb\x6f\xbb\x82\x7a\x02\xec\x91\xea\xd3\x0a\x94\x72\xfc\x1c\x0f\x8a\xea\xd8\x93\xff\x93\x4f\xac\x23\xc5\x16\x49\x34\x07\x7a\x5b\xa6\x8c\xcf\x23\xc5\xd4\xf4\xe5\x93\x62\x90\x0e\xe3\x98\xcb\xea\x1c\x5a\x96\x3f\xce\x03\x86\x3f\x48\x0b\xa8\x37\xea\x91\x51\x0d\x9f\x3f\x53\xdb\xc4\x66\x31\xcf\xd7\x01\xb9\xe8\x79\xb4\x36\xcb\x2e\xaf\xa5\xea\x32\xa5\x1e\x5e\x5c\xb8\x58\xad\xc1\x6a\x99\x55\x73\x4f\x85\x02\x9b\x65\x56\x07\xe3\x32\x2b\xe5\xb0\x12\x40\x2e\x39\x46\x30\x58\x94\xa6\xe2\x33\x0b\x35\x65\x62\x5b\x5e\xfc\xe9\x70\x8d\x26\xda\x6b\x28\xca\xf6\xb2\xe0\x6e\x1d\xe2\x3d\x5f\x22\x8f\xd0\xb3\xc3\xa4\x98\x0f\x8c\xdb\x29\x96\x8e\xee\xe6\xa9\xdc\xc6\x1c\x1a\x91\x78\xcf\x7b\x47\x8f\x98\x8a\x94\x4a\x20\x1f\x26\x0e\xbd\x86\x38\x9b\x24\x40\x5a\xa4\x18\x61\x7c\x0d\x62\x8f\xa8\x4f\x90\xfb\xc7\x23\xd9\xc1\x29\xdb\x16\x64\x18\x8f\xdc\x3c\x4e\xf0\x8c\x91\x89\x8f\x10\xc3\x59\xfa\x73\x52\x49\x45\x39\x76\x90\xca\x1c\xcf\x6a\x26\x35\xb4\x0f\x69\xd7\x49\x21\x3d\x0d\xe3\xd1\x0b\x34\x8c\x47\x5e\x80\xfc\x24\x40\xbf\x9e\xbe\x79\x99\xcc\xe6\x49\x8c\x62\xd1\xfc\x80\xbd\xa5\x7f\x02\x94\xbb\x60\x99\xbb\x03\x92\xcf\x8b\x9e\xc8\x48\xa9\x65\xae\x0e\xdf\x54\xec\xe9\x3d\x1d\x44\xa6\xf8\xbb\x0f\xf1\x79\xda\xe7\x55\xec\xef\xb3\x28\x28\xed\x89\x0c\xcf\x62\x4b\xc4\x57\x9c\x8a\x73\x18\xc5\xe4\x94\xfe\xda\x13\xf2\x21\xe6\x51\x50\x22\x23\x3d\xdf\x47\x2a\x75\x00\xfb\x6e\xa0\x93\x09\x97\xd7\x0b\x41\xe4\x61\x90\xf2\xef\x6a\x27\x36\x52\xfd\xa0\xcc\xd8\xff\x42\x8f\x3d\x40\x31\xf9\x5f\x37\xf5\x02\x27\x70\x96\x39\x68\xfa\x1a\xf6\x63\x38\x43\x00\xca\x2a\x5c\x90\xd2\xa3\x04\xe5\xaa\xd2\xcf\x8b\x0a\x8a\x6e\xd3\xe9\xb2\xa3\x84\x77\x75\x60\xff\xd1\x84\xd2\x91\x2f\xce\x16\x73\x64\xbb\x6e\x9f\xa7\xd6\x87\x11\x6f\xd7\xe1\xad\x10\x37\x67\x56\xcd\xd2\x6e\x53\x4b\x11\x4e\x34\x91\xd9\x55\x3c\x3f\xfb\x26\x87\x41\xc0\xe6\xd6\x0c\xa2\x63\xbd\xd0\xf7\xb0\xb1\x9e\xf2\xc6\xf0\x88\x50\x66\xe3\x2c\xee\xa7\xfe\x14\xd1\x2b\xc8\xb1\xe1\x84\x20\x7c\x8a\x62\x96\x8c\xc6\xa1\x64\x5d\x94\x67\x98\xa3\x88\xb3\x68\xb3\xe4\x12\xb5\x6a\x98\xf4\x3f\xb3\x9e\x8a\x3b\x0c\xe8\x1d\xe9\xd4\xba\xa7\x58\x2d\x18\xa8\x83\x4d\xdb\x9e\x2a\x9a\x2d\xfa\x55\x9c\xfa\x76\x0d\x4c\x0b\x72\x9d\x73\xe3\xff\xc4\x34\x81\xeb\x99\xa5\xb6\x77\x00\x28\xd7\xbe\xa3\xc4\xe4\x59\xb9\xde\xdd\xa5\xda\x4a\xcb\xb0\x31\x7b\x2b\x44\x4c\x3a\xd3\x33\xd8\x24\x61\x0a\xfb\xbd\xc2\x15\xea\xe9\x58\x51\xed\xca\xf5\xa6\x84\xcc\x3b\x15\xee\x4d\x79\xce\xd9\x5a\x67\x00\xc5\x40\xc3\xdb\x65\xdc\x77\xc0\x0e\xb2\x6b\x3c\xda\xe8\x22\x87\xe2\x62\xae\x5f\x08\xd2\xe7\xab\xb8\xba\x9c\x58\x88\xb8\x7d\x61\xb9\x10\x00\xcb\x6f\xf2\xbc\x18\x56\xb4\x46\x79\x91\x22\x88\xfd\xe9\x6a\xdd\x05\x2f\x73\x80\xbe\x40\x9f\x94\xcc\x12\xec\xc5\x1c\xa3\x80\x5e\x2c\x48\xdb\x2e\x6b\xca\x65\x22\x8f\xbd\x16\xab\xb3\xb2\x7c\x35\xb4\x67\x65\xf1\x29\x82\x11\x99\xf6\xfc\x29\xf2\x2f\xd6\x14\x65\x10\x80\x6d\xda\x5e\x53\x4a\xc0\x7c\xad\x2a\x72\x71\xb9\xa6\x40\xd5\x03\xa7\x5a\xa6\x12\x57\x5b\x2d\x52\x03\x0a\x55\x33\xee\x8c\x4c\x7b\x33\x44\xa6\x49\xb0\x6e\x64\x3c\x39\x63\x6d\x0e\x07\x50\x93\x82\x79\x03\xa5\x5d\xa3\x54\xb6\x54\x1b\x6a\xa0\xac\x11\x40\x2c\xc8\x20\x54\x4f\xaa\x51\x2a\x03\x58\xbc\xac\x6e\xb6\x01\x2e\xde\x1a\x7b\x65\x10\x15\x2f\xf4\x19\x1a\xcc\xd5\x73\xba\xd0\x83\x44\xfd\xbc\xb8\x1c\x64\xea\x07\xf4\xa3\x41\xaa\x7e\xb1\xe5\x1c\xf8\xea\x37\x5d\xba\x41\xa0\x7e\xf2\x65\x1a\xcc\x8a\x9a\xb9\x43\xc0\x44\xa9\x1e\x05\x35\x9a\xb6\xa6\x46\x4c\x19\x56\x31\xa7\x70\x16\x02\x60\xcf\xe6\x8b\x4b\x09\x27\x33\xab\x2c\xd9\x91\x1e\x14\xba\x4e\x80\x29\x7d\x8e\x1b\xe8\x33\xad\x59\xac\x1a\xec\x44\x9f\xe3\x21\x1e\x79\x30\x57\x7b\x4a\x93\xfb\xc6\x43\x34\xd2\xe9\xd5\x3a\x70\x6c\x0d\x14\x7d\x15\xc5\x22\x09\x86\xe7\xe8\x80\xf2\x8a\x51\x4f\xfc\xda\x81\x72\xb9\xe8\x27\xea\x87\x93\xf7\x09\xf9\x29\x4a\xfc\x8b\x30\x3e\x37\xf7\x6d\x5c\xd2\x26\x88\xfe\xd9\xf4\xca\x37\x3f\xab\xc5\xa1\xd7\xb1\xef\xfd\x28\x44\x31\xb1\x05\x74\x45\x1d\x6e\xbd\x62\xfe\x50\x7f\x2c\xaa\xdd\xdf\x7f\x54\xfc\xa0\xbc\xa5\xd8\x48\xb8\xd3\x46\x22\x95\x8d\x04\xbd\x18\x38\x98\x3b\xd0\xd2\x09\x75\xc3\xd8\xe1\xb6\x3a\xb7\x61\xcb\x90\x4d\xb7\x0c\xe1\x5b\xa6\x0a\xd9\x58\x36\xba\x28\x3b\x16\x3c\x47\x7d\x18\x45\x8e\x72\x19\x91\xce\x3b\x6d\x3e\x3c\x47\xe4\xaf\xb4\x97\xcc\x85\x45\x43\x86\xaa\x24\x38\x80\xe7\xa8\x4e\xff\x87\x0a\xfd\x5f\xec\x3d\x5f\x12\xca\x3e\xf3\x0a\x63\x80\x98\xd8\xea\x82\x1a\x9c\xa8\x42\xcb\xc1\xf2\x23\xf4\xc3\x94\xe7\x49\x40\xee\xf5\xb5\x83\xbc\x21\x1a\xb9\xd5\xbc\xb9\xf0\x1c\x81\xd8\x43\xab\x45\x5a\xd2\xe7\x7c\xbb\xe8\x84\x2b\xa5\xd5\xbd\x86\xd9\x88\x0d\xae\x01\xaf\x3b\x85\x09\x6e\xb4\x77\xd0\x77\x07\x7e\x32\xa3\x42\x1f\xf3\x48\xa8\xbd\x3f\x1b\x0a\x35\x5c\xf0\xe5\xd2\x6b\xd8\x87\x72\xf1\xf2\xc5\x5b\x7e\xdf\xcc\x2e\x94\x4b\x36\xf0\x37\xe5\x62\x35\x17\x79\xb9\x48\xf5\x1e\x2f\x97\xa8\xbb\xc6\xcb\x65\x1a\x6f\xf1\x72\x41\x71\x89\xaf\x2e\x43\x59\x98\x56\xd7\xfc\x96\xa4\x73\xae\x8c\x24\x26\xdd\x9c\x7b\xc8\x7b\x5e\x6c\x6c\xae\x00\x45\x7d\x3f\x89\x7d\x48\x9c\x21\xf9\xa3\x3d\x80\xa9\x6f\x03\xfa\x47\x80\x52\xdf\x1e\xb9\x60\x38\x72\xc1\xc4\xa3\x87\x65\xe4\x7a\xcf\xf5\x88\xce\x79\x11\xc2\x39\xe4\xc8\x32\x0e\xad\x9e\x69\x48\xaf\xaf\xe3\xe1\xe1\x68\x94\xef\x19\x9d\x99\x14\x7c\x47\xf1\x74\x30\x01\x41\x88\x11\x9b\x91\x70\xb2\x18\xcc\x73\x30\xf5\x96\x92\x07\x31\x09\xfd\xd8\xad\x63\x45\x4c\x57\x0a\x5a\xa6\x86\x23\x31\xbd\x47\x69\x21\x93\x31\x71\x0e\x41\x64\xbe\x37\xf8\x13\xe7\x10\xf8\xc6\xeb\x8b\xcb\x81\x9e\xf6\x85\x3d\x2b\x98\x29\xe7\x10\xa4\xc6\x2b\xce\xab\x38\x87\x20\x34\x1e\x33\x96\xc5\x39\x04\x89\xf1\x54\x70\x2e\xce\x21\xc8\x8c\xe7\x82\x81\x71\x0e\x41\x60\x3e\xa7\x2c\x93\x73\x08\x66\xfa\x53\x79\x29\x5d\x36\x5e\x4a\x72\x67\x6a\x44\x7c\x5a\x62\x17\xd6\xe1\xad\xb2\x94\x9f\x3c\x7b\xa0\x3f\x85\x8c\x54\xad\xf1\xb0\xe2\x49\x42\x0d\x49\x18\xfa\xd3\x30\x46\xe9\xc1\x25\x8c\xc2\x00\x12\xd4\xff\xb2\xa2\xd0\x38\x49\x22\x04\x63\x59\xa6\x56\x3c\xde\x95\x98\x0a\x3b\x78\xd9\x40\x10\xd5\xf9\xd8\x40\x7a\x9b\x43\x82\x5e\x8a\xd9\x89\xbc\xa5\x1c\xa6\xc6\x71\x8b\x41\x15\x6c\x73\x0e\x20\xe5\x14\x49\xe3\xb5\x0f\x65\xff\xa3\x8e\xd7\x3e\x1c\x79\x91\xbe\xc2\xb0\xcd\x0a\x9b\xab\x3a\x89\x20\x95\x53\x7f\xe4\x4b\x70\x30\x49\x67\xab\x23\x7c\x77\xe3\x5d\x95\x36\x1b\x1a\xa2\xe4\xfc\x5c\x58\x19\xba\x99\x09\x34\x07\x29\x81\x85\xa4\x2f\x21\xf6\x96\x39\x70\x62\x73\x05\xdb\xf0\x64\xb1\x1c\x0d\xee\xb8\x38\xf1\xc8\xc3\xd2\x1d\x2b\xf5\xe4\xb8\x40\x22\x1c\xb4\x42\x2f\x6a\x74\xd0\xa2\x03\xd0\x6d\xc9\x61\xa3\x2d\x39\x6c\xb0\x25\x87\x65\x5b\x72\x68\x58\x1f\xc3\xaa\xf5\x31\xd1\x6c\xc9\x51\x22\x40\xd1\xf2\x62\xb6\xaa\x6e\xca\x6a\x1e\x29\x9d\x81\x41\xf0\xa7\x0c\xe2\x20\x35\x20\x0e\xb8\x87\x94\x78\x5e\x67\xf6\x1d\xc6\x00\x8f\xa4\x9e\x94\xab\x51\x63\x6d\xfb\xc9\x8a\x1e\x3d\x22\xfd\x24\x66\x0d\x38\x18\x98\x2e\xc9\xcc\x68\x0f\x86\x08\x90\x51\x2e\x28\x4b\xc9\xc8\xc1\xee\x14\xee\x72\xfe\x8e\x17\x70\x1d\x69\x56\x34\xfb\xed\x52\xb9\x6b\x0e\x71\x65\xc8\x4a\x70\x70\x90\x8e\x7c\x57\x42\xa3\x43\xae\xeb\xf6\x93\xc2\x45\x80\x4d\x7d\xea\xf0\x04\xbe\x28\x6d\x70\x59\x50\x76\x5d\x3a\xc6\x17\xf4\x3f\x1e\xea\x27\xf1\xc0\xe0\x99\xfb\x49\x5c\xf7\x79\x5c\xfa\x7c\x18\x8f\xf6\xf7\x1d\xf1\x17\xab\x86\x33\xd4\x6c\x8e\x50\x3e\x83\xc4\x9f\x22\xb1\x46\x4a\xaf\xaf\x59\x49\x1f\x49\x33\x92\x63\x32\xd9\xc4\x7d\x41\x06\x43\x32\x72\x79\x36\x02\x42\x59\x0d\x59\x19\x9d\x36\x36\xc0\x62\xbe\x96\xe2\xdd\x00\xe5\x39\xbd\x48\xf1\x1c\x4b\x6d\x39\xf2\x44\x4a\x5b\x63\x9e\xf7\x24\x20\x3e\x5b\x2b\xf5\x09\xcf\xa9\xd6\xd7\x96\xb5\x40\xc3\xc7\xfd\x34\x1b\xa7\x3e\x0e\xc7\x2c\x3b\xc2\x32\xee\xfb\x2c\x5d\x5b\x40\x27\x80\x7e\xc5\x77\x71\xec\x02\x3a\x1d\x67\x85\x41\x2f\xa6\xb3\x01\x70\xae\xf6\x65\xc9\x3f\x07\xc5\x04\x87\x28\x75\x4c\x76\x05\xb9\xae\xf2\xed\xa1\xb2\x06\x9d\x81\xc2\x95\x8e\x1e\xc3\x80\xa3\xd0\x86\x1e\xd4\xb4\xe0\x49\x71\xf2\x33\x6f\x88\x47\xc0\xf7\xb6\xd1\x85\x83\x19\xa5\x63\xfa\xce\xf0\x1b\xbc\x29\x66\x43\x34\xf2\x7c\xe1\x4d\x31\x33\xbd\x29\xf4\x9f\x60\x56\xf6\xa6\x98\x35\x7a\x53\xcc\xae\xaf\x67\x65\x6f\x8a\x99\xe9\x4d\x31\xf3\xb2\x36\xde\x14\x06\x91\x70\x28\xb7\x4c\xc5\x38\x2a\x77\xcd\x5c\x10\x68\x26\xbf\x59\xc9\xd7\x61\x26\xbc\x29\x8c\xe7\x2f\x66\x55\x7a\x16\x28\x6f\x8a\xd9\x6a\x6f\x8a\x72\x0b\xf5\x24\x99\x76\x71\x46\x87\x27\xbc\x29\xbc\x19\x80\xee\x1e\xbd\x73\x34\x56\x5f\xb3\x52\xa4\x6b\xaf\x62\x1e\xcf\xa9\x5d\xc5\x3f\x72\x3f\xc0\x00\x12\x28\x5e\x57\x94\x30\x4a\x67\xd5\xe0\x93\x7e\x1f\xfc\x93\x1e\x42\xe4\xbf\x79\x3f\x21\x11\x22\x1f\x37\xb0\x78\x5a\xd8\x85\x52\x78\x50\x0e\xad\xc1\xf3\x84\x69\xf5\x0e\x98\xad\xa7\xca\x15\xb6\x4d\xf2\x13\x0a\xd3\x10\x6d\xfb\x93\xc8\xc3\x1c\x09\x27\x11\xf9\x4e\xe8\x0f\x41\x2a\x9c\x44\xc2\x58\xb2\xf7\x0e\xf2\x8e\x0f\x8f\x84\x7f\x0d\x2f\xd6\x87\xe3\x04\x13\x87\x3e\xe6\x36\xf9\xa2\xe6\x3e\x46\x29\x22\x2f\xa1\x3f\x45\x8e\x78\x49\x17\xc2\x71\x73\x3f\x42\x50\x39\x42\x69\xd5\x1f\xaa\x58\xb0\x32\xf3\xa4\x65\x40\x47\xae\x16\x15\x06\x96\x33\xe9\x75\x3e\x40\x39\x20\xbc\x99\xcf\xec\xe6\x8c\x61\xf4\x4e\x18\xf4\xdf\xf0\x64\x84\x82\xfb\xf9\x14\xc3\x79\x3a\x4d\x88\xb3\xa4\x1c\x01\x8f\x73\xab\x58\xcf\x8d\x16\x81\xf0\x93\x48\x11\x16\xfb\x48\x3c\x87\x9e\xd1\x01\xe5\x81\x5f\xc4\xc8\x01\x08\x88\x0c\x87\x23\x05\x9c\x30\x2e\xbc\x1f\x4e\x51\x3a\x4f\xe2\x14\xc9\xe2\x74\x27\x8a\xd0\x27\x37\x67\x8e\xf6\x6f\x99\xb9\x6e\xf7\x9d\xd4\x2b\x17\x8d\xd3\xdd\xaf\xf7\x93\xa5\xa8\x27\xd0\xd3\xfa\xfb\x0e\x11\x58\xf4\x95\x7d\x60\x47\xdc\xa0\x28\x10\x86\x8b\x3c\x3a\x75\x71\x0b\x5b\x76\xba\xa8\xbd\xa1\xcb\x2b\xa7\x56\x90\x0c\x3d\x87\x3a\x63\xf4\x93\x8c\x54\x7a\x5b\xdb\x81\x9a\xed\x28\x3e\xe7\x01\x28\x80\xf4\xc3\x00\x10\xca\x02\x45\x5e\xe2\x40\xc3\xb1\x5f\x3b\x75\xc3\x78\x6b\x77\x80\x72\xf5\xf2\xe0\x6e\xef\x1c\x01\xbb\x60\x0a\x10\x34\x9b\x27\x18\x46\xe6\x35\x4e\xf9\x56\xb2\xe8\xcd\xd2\x9d\xda\x50\x0c\x5d\x46\xdc\x20\x14\x07\x19\x66\xee\x3e\x3f\xe3\x64\x46\x59\x5f\xb6\xa8\x25\x2f\x45\x3b\xce\xe8\x37\xb6\xe7\xd1\xb9\x4b\x26\x16\x1a\x68\xe9\xa5\xd0\x0b\xfb\xd0\x2e\x29\xea\xd0\xc1\x11\xfa\x0e\x2c\x27\x74\x6f\x91\x4f\xd9\xf8\x5d\x18\x45\x61\x8a\x28\xc7\x9b\xb2\x6e\x4a\xd7\x48\xcb\x76\xfb\xff\x4a\xc2\xd8\xb1\x6d\xcd\x8b\x5a\xd3\x4f\xc4\x6b\x27\xf4\x0b\xe9\xcd\x10\x4c\x33\x5c\x1f\x23\x61\x14\x68\xfa\xee\x3e\xc6\x45\x90\xd0\xbf\x28\x0f\xb9\x6c\xa8\x13\x65\x2a\xc3\xe3\x19\xc8\x76\xb5\xb7\x9a\xec\x5e\xfc\x06\xe3\x77\x2a\xbf\xce\x6a\xc2\xad\xd9\xc5\xe7\xb8\x39\xb9\x42\x28\x3e\xa3\x9c\x1e\xf6\x6c\x9b\xb2\xab\x92\xb8\xa4\x1e\x2e\x28\xda\x14\xa6\x4e\xea\xbe\x70\x1c\x9e\x08\x8d\x38\xa9\xeb\x4a\x2d\x6f\x32\xb1\x48\xff\x8c\xd6\x23\x02\x2b\x52\x92\xcc\x1d\x16\xa7\x7d\x06\x31\x2d\xcc\xa2\x23\x68\x7b\x29\x10\x25\xfb\x24\x71\x30\x40\xac\x3d\x17\x60\x77\xe0\xc8\x02\x88\xc1\xb1\x04\x28\x25\x38\xa9\x44\x46\x8b\x5e\xab\x5a\x64\x31\xba\x89\xd9\x9b\x65\x2c\x3d\x96\xbb\x18\x7e\x48\x38\x43\x49\xb6\x26\xd6\x65\xce\x6d\x4b\xc1\x99\x28\x7c\x13\x34\xa3\xd6\xce\x2a\x8c\x5a\xee\x9a\x65\x47\x5f\x90\xaf\xbc\xec\xe4\xc2\x71\x67\x37\xba\x1f\x35\x20\x01\xcd\x0d\xd6\x60\xd7\x0b\x1f\xb8\x18\x7d\x61\xfe\xca\x6e\x27\xfb\x19\x49\x70\x18\xf6\x6a\x81\xbd\xd8\xab\xa6\x92\xf7\x92\x0c\xd0\x11\xac\x1f\xe3\xbd\x1c\x5b\x16\xf6\xf8\xd5\xdc\x74\x20\xda\x05\x66\x97\x84\xe0\x07\xf0\xb5\x07\xc9\xb2\x1c\x81\x80\xcb\x2e\x25\x4d\xf9\x63\xd5\x96\xa4\x05\xc8\x54\xc6\x72\xb7\xf9\x34\x4e\xc8\x24\xc9\xe2\x40\x7d\x19\x75\x6e\x74\x83\x50\x88\xf5\x41\xe0\xcc\x99\xf7\x3e\xa0\xb5\x19\xa9\x49\x21\x99\x6a\x97\x72\x11\x02\x2d\x23\xac\x1d\xba\x15\xe8\x44\xcb\xef\x98\xfa\xbd\xf4\x19\x2f\x21\x99\xd1\x03\xdb\x2d\x19\xc7\xcb\x9c\xb0\xc5\x02\xaf\x31\x11\x2a\xdc\xff\xcf\x76\x19\xbe\x0c\x5d\x28\x8f\x30\xe5\x32\xc1\xce\x91\xbb\x37\xc6\x08\x5e\xec\xd5\x7c\xf1\x99\x7d\xa1\x56\xb9\xe9\xa3\x42\xc9\xde\x17\xb0\x30\x1e\x29\xd8\x63\xb0\x54\x93\xc1\x06\x6a\x70\x26\xe5\x9c\xb8\xbf\xbe\xf9\xfc\xf2\xc3\xfb\x9f\xdf\xfc\xc9\x66\x31\x41\x9f\x16\xb1\xdf\xe1\x8b\x1a\x58\x39\xee\xfb\xbd\xb5\x44\x56\x0b\xf7\x46\x97\xa7\x1d\x22\x69\xd3\xc7\xab\x41\xe5\xd4\x1e\xd8\x00\xb9\xae\xf8\x76\x75\x1b\xe7\x2c\x56\xb9\x2b\x64\xdd\x39\x83\xc9\xea\x0e\x56\xb7\xd2\x63\xa5\xb8\x34\x8d\x1b\x71\x17\x1c\x62\xf1\xc0\xd1\x9d\x39\x50\xee\x7a\xcf\x1d\xe2\xd9\xef\x58\x17\x98\x3e\x00\xa6\xbe\xed\x7a\xcf\x91\x33\xd4\x9e\xda\xc0\x3e\x4b\x2e\x50\x7c\x76\xf6\xd6\x1e\xb9\x0e\x69\x62\x05\x56\xfb\x12\x7d\xc5\x01\x7e\x62\x00\x0c\x72\x70\xe6\x29\x17\xef\x6c\xf7\x85\xe9\x3c\xc6\xa8\xf3\x10\xe0\x51\x11\x1b\x38\xb0\x55\xa8\xd0\x9e\x4d\x2b\xf3\x3c\x0f\xbf\x70\xa0\x87\xe8\x25\xe8\x0e\x9c\xc8\x43\x00\x7a\xb1\x34\x77\xa5\x1e\xec\xf3\xea\x41\xe8\x45\xe2\x4f\x19\x56\x98\x0a\x79\x7d\x0e\xd3\x34\x8c\xcf\x25\xa0\x83\xfa\xed\x79\x5e\xf8\xe2\x70\xc0\x23\x0d\x6d\x1f\x87\x24\xf4\x61\xa4\x8a\xa9\x07\xa2\x9c\x08\x49\xb4\xaf\x20\x8e\x59\x75\xa2\x99\xb0\xbe\x99\x5e\x43\xbd\xb5\x71\x8c\xea\xaf\x01\xdd\x17\x62\x47\xfc\x12\xc6\x41\xa7\xdd\xa0\xf9\x8b\xdd\xce\x56\xa0\xfb\xd8\x7b\x2e\xd8\xbd\x16\x1d\xbc\xb8\xfc\x6a\x9b\x94\xf0\x23\xc7\x10\x34\xbb\xcf\x2c\xf7\xb7\xff\x8a\xe7\x4b\x27\x1d\x3b\x39\x5d\x62\xf3\x6a\x87\x4c\x1e\xad\x81\x3a\x6e\x40\x5d\xf4\xb0\xff\x92\x92\x98\xf4\xa5\xd8\xcc\xcf\xa3\xd2\x83\x62\x73\xd7\x96\xff\xbf\x86\xf2\xbd\xe2\x30\x94\x79\x0b\x59\xc5\x6f\xfc\xb8\xa9\x16\xc5\xef\x86\x06\xc5\xdb\xff\xab\x2f\xdd\xa2\xb9\x8f\xfc\x14\xab\x0a\xc4\xef\x86\xe6\xc4\xdb\xe7\xf5\xa5\x7b\x47\xda\xc9\x16\x47\x9b\x79\x3d\x76\xd9\x79\xc2\x95\xf2\xeb\x1e\x1b\x46\x91\xba\x74\x5b\xf1\x74\xf7\xaf\xe7\x95\x4c\xe9\x5f\xf5\xb0\x6f\x34\x86\x72\x46\xbd\xbb\x31\x02\x60\xbf\x64\x46\xb4\x37\x71\x80\xbe\x74\x1a\xcf\xaa\x5c\x4b\xb7\xbd\xa9\x96\xe1\xc4\x69\xa0\xc0\x8a\xe8\x22\x93\xe8\x82\xd8\x1b\xda\x1f\x11\xf6\x51\x4c\xe0\x39\x32\x48\x85\x0d\x2a\x6f\x04\xcd\xaa\x79\x23\xa9\xa7\x3d\x12\x4a\x19\x49\xbe\xd1\xfe\x7e\x5c\x68\x3e\x80\xa9\xee\x99\x24\xd8\x61\x71\xdd\x2c\xdc\x86\xab\xbb\xa1\x17\x0f\xf1\x68\x2f\x9c\x38\x68\x08\x47\x2c\x18\x1d\x8e\x64\x68\x32\x7d\xf4\x9c\x3e\x78\xd1\x3b\x1a\x1c\xe5\x8a\x88\x95\xf6\x62\xb7\xc5\xfb\xd6\xd8\xd3\xae\x17\xe8\x3b\x94\x4e\x2b\x97\x68\xf5\x61\xe5\xa2\xa9\x16\xf9\xbf\x15\xdf\xad\xbc\xe1\x8a\xaf\x8a\x4b\xb5\xf2\x6c\x45\x07\x8a\xcb\xb5\xe9\xab\x96\xcd\x17\x97\x6c\xe5\xd9\x8a\xe6\x8b\xcb\xb6\xe9\xab\xba\x0b\xb7\x2b\xed\xac\x80\x9b\x7f\x8d\x5b\x8b\x13\xca\xb3\xb0\x63\xdf\x6b\x22\x55\xbe\xe2\xa1\xd3\x32\xe9\x96\xef\x83\xd2\xab\x55\x83\x94\xa9\xf1\xd3\x03\x1d\x52\xe2\x26\xc7\xc5\x41\xc0\xb8\x0e\xed\xcf\x67\xef\xde\xfe\x04\x71\xda\x97\xdd\x70\x96\x61\x30\xb0\x5f\xf9\xf3\x00\x46\xff\xf9\x8b\x0d\x58\xe0\xdb\xe0\xbf\x97\x76\xca\x91\xcc\xec\xc1\x90\xc7\xed\xdb\xc0\x4e\x6c\xa6\x27\x91\x8c\x90\xad\xc2\x62\x18\x4c\x9f\x1d\xf8\xe6\x9f\x22\x6e\x8f\x7f\x27\x74\xf7\x40\xe8\xc1\x81\x7d\x81\x16\xf6\x08\x70\xef\x6b\x66\x31\xb4\x07\xc3\xe1\x33\x20\x1b\x1b\x8e\xc0\x70\x68\xff\x18\xb3\xd9\x04\xc3\xe1\x93\x63\xf0\xf8\xbb\xd1\x88\x3d\x95\x16\x89\x11\x18\x2e\x4b\x15\x3c\x06\xf6\x3f\xfe\x11\xff\xe3\x1f\x31\x7d\xf9\x0c\x0c\x9f\x3c\x06\x47\x60\x68\x9f\xc4\x71\x92\xc5\x3e\xc2\x36\xad\x81\x57\x4d\x42\x12\xb1\xba\xed\x97\xbc\xa3\xa3\x11\x73\xa0\x18\x01\x51\x0b\x7d\xf7\x1d\x18\x3e\xf9\x1e\x7c\xc7\x7a\x70\x08\x86\x4f\xbe\x03\x47\x3f\xd0\x4f\x32\x7a\x96\xfd\x88\xae\x16\xfb\x86\xff\xb3\xbe\x73\x96\x45\x5f\x1c\x01\x59\xdb\xe3\x27\xc5\x97\x4c\xf3\xcb\x3a\x34\x85\x69\x8f\xd7\xce\x46\x2c\xbb\x33\x62\xd3\x0f\x67\x88\x20\x4c\x2b\x1c\xe5\xec\xf5\xaa\x3e\xf2\x25\xba\xc1\x6e\xaa\x06\xb6\xed\xa9\xda\x58\x37\xd8\x59\xbd\x8d\x36\xfd\x2d\xf6\xc1\x33\xa0\x3b\xa9\xa9\xed\x99\x62\xdf\xd6\x46\xf3\x3d\x6d\x48\x06\xd9\x0e\x0e\x0e\xf8\x09\x18\x90\x29\x62\xbb\x98\x8f\xaa\xdd\x16\x2e\x36\xdf\xe3\x67\x5a\x0b\x8f\xbf\x67\x3f\x1e\x83\x23\xba\xad\x69\x97\xe8\x48\x3a\xcc\x57\x75\x09\x7e\x90\x35\x3e\x1e\x15\x53\xf8\x54\x3e\x7c\xa2\x3d\x3c\xa6\xc3\xf3\x93\x28\xc1\x3d\x06\x96\x20\x82\x78\x08\x86\x29\x31\x17\xad\x53\x97\xd8\x12\xb6\x5a\x44\xf5\x92\x76\xd5\x9e\x63\x34\x41\x38\xed\xd9\x40\xf6\xd4\x96\x7f\x3f\x56\x1d\x58\xbf\xcc\xe5\x87\x47\xac\xae\xda\x37\x47\xc6\xbe\xb8\x09\x12\xb1\x62\x9f\x01\xfb\xc7\x24\xe6\x1e\xed\x6d\xf6\x1c\xbb\xf6\x15\x45\x13\x85\xe5\xb2\x1e\x16\x8f\x8e\xf8\x8e\x7a\x0a\x0e\x8b\x45\x1b\x0e\x05\x99\x1e\x69\x9b\xac\x4a\x1e\xd7\x9e\x9a\xea\xd4\x3c\x56\xbb\x8d\x6e\x25\x0e\xc5\xc4\x6f\xcc\x11\xb0\x13\xa6\xde\x9e\xe3\xe4\x32\x0c\x10\xee\x05\x68\x9c\x9d\x37\xcf\x1e\xb0\x51\x94\xa2\x36\x27\xc8\x58\x9b\x67\x2b\x3a\x10\x72\x49\x6e\xa3\x16\x2b\x1b\xf8\x48\x1f\x36\x9d\x70\x1b\xa3\x79\x04\x7d\x44\xd9\x74\x76\x47\x4a\x33\x65\xca\x61\xbb\xec\x62\x4d\xb4\xb6\x0d\x02\x73\xc4\xea\x11\x96\x9c\x57\x27\x67\x27\x2f\x5f\xbf\x3f\x7b\x7d\xfa\xf9\xed\x87\x97\x27\x6f\x6d\x7d\xcf\x9b\xa7\x70\xc5\x92\x81\xf5\x14\x62\xe5\x9c\x49\xbb\xe7\x66\x54\x7b\xc3\xfd\x7e\xf0\x3f\xec\xff\xca\xe6\xfa\x87\xe5\x1c\x92\x69\x5e\x3b\x83\xcc\x1c\xab\x0d\x80\xe3\x69\xd9\x7a\xcf\x8d\xdd\xdd\xe2\xa8\x1c\x3d\xb9\xa9\xb3\x72\xa4\xcf\x7b\xdb\x8b\xb2\xe8\xe0\xd3\xba\x71\x16\x2c\x1b\x6d\x91\x75\x9f\xbf\x36\x9f\x1e\x82\xa1\xfd\x51\x7f\x68\xab\xfa\xed\x4a\x4b\xad\xb8\x8d\x35\xfd\x92\xd0\x28\x5a\xa7\xcc\x47\xb4\x47\x2a\xd5\x47\x43\x8f\xda\x6e\xb7\xee\xf7\xb8\xd8\x63\x81\xca\x48\x92\x6e\x7c\x85\x1b\xab\x2a\x26\x43\x9f\xc7\xa7\xe0\xe8\x18\xf0\xb3\xae\x4d\x1a\xbd\xe4\x0e\x8b\x9f\x47\x23\x5e\xa4\x6e\x8f\xbf\x57\x6c\xb2\x98\x48\x56\x55\x0d\x21\x28\xad\xcb\x46\x4d\x94\x96\xb1\xbe\xa9\xd5\x55\x6c\x44\xcd\xd8\xd5\xfe\xb4\xcc\xf6\x6c\xc8\xef\xf0\xbf\x25\x61\xfb\x0e\x28\x9d\x1e\x87\xf2\xa4\x0b\x71\xa8\xb7\xfb\x7d\x57\x96\x46\x6c\x00\x8d\xb9\xe9\xb2\xf7\x28\x41\x13\x47\x31\x3f\xf8\x9f\x83\x3f\x2c\x03\x3f\xd7\xb6\xe2\xc1\x1f\x96\x54\x32\xaa\x27\x78\x4c\xf8\x32\xe4\x34\x6d\xe9\xd4\x48\x47\x7c\x5c\x4f\xf8\x3f\xda\x63\x6d\x29\xbb\xee\xf3\xef\x44\x23\xcf\x3a\x2e\x92\x98\x24\x35\x4d\x53\x98\x4e\x43\x3f\xc1\xf3\x9e\x94\x21\x87\xc3\xc7\xc7\xe0\x08\xd8\x57\x18\xce\xe7\x42\x8c\x1b\xda\x3f\x72\x69\xf3\x47\x36\xe2\x1f\xf5\x21\xff\xa8\x64\xd3\x1f\xb3\x14\xe1\xea\x65\xf2\x98\x4d\xb4\xd9\x57\x7d\x42\x8e\x6b\x77\xb0\xe4\xaa\x24\xc3\x34\xaa\xbd\x2f\x6c\x8c\x0a\xa7\xfa\x6e\x73\x59\x33\x9d\x4f\xc1\x71\x77\x5e\xc4\x98\x4e\x38\x9f\xf7\x58\xe2\x00\xb5\xe7\xc4\x2f\xfb\xc7\x28\x39\x0f\x63\x29\x60\x1f\xf3\xa1\xff\x00\x86\x36\x7f\x0e\xec\x64\x4e\xc7\xdb\xea\x3e\xab\x30\x12\xd5\x8e\x28\xac\x77\x4d\xb8\x07\xf6\x8f\x2c\xb8\x80\xdd\x9f\xa6\x4a\xa4\x3a\xff\x70\x3e\xb7\x81\x2d\x56\x54\xe9\x1b\xc4\xcc\xff\xd0\x7e\xc9\xaa\xcb\xfe\xbd\xd8\xf8\x6d\x16\xc9\xb2\xf4\x71\x15\x2c\xdf\x13\x9d\xe3\x13\x3d\xa8\xe5\xc3\x8a\xcf\x2b\x22\xc6\x61\x9d\x88\x51\x9d\x49\x7e\x2e\x0e\xa2\x84\xa3\xd7\xb1\xe3\x71\x08\xec\xcb\x10\x5d\xf5\xc4\x43\x36\x98\x11\x18\x76\xe4\x45\x9a\x7a\xf6\x43\x89\x63\x69\xae\xa4\xfe\xfb\x67\x6d\xbe\x2f\x3f\xa4\xe4\xb0\xee\xf9\xd3\x35\x95\x3d\x01\xc7\xb5\xdf\x35\x3c\xac\xdf\xba\xbb\xda\xb4\x6c\xbb\xea\xd7\xde\xaa\xcd\xd9\x6d\x17\x6e\xbc\xff\xaa\x53\xf6\x78\x93\xf5\x39\xaa\x7e\x34\x85\xe9\xeb\x4b\x18\xd9\x83\x09\x8c\x52\x04\xec\x6c\x7e\x09\x59\x59\x5b\xe2\xfa\x50\xea\x6e\x03\xbb\x27\x27\xd6\xf6\x25\x4a\xb0\x2d\x12\x9c\xd8\xc0\x86\xbe\xa0\xe4\xe1\x84\x9e\x78\x1c\xda\xc0\x3e\xa7\x05\x60\x1c\xd8\xc2\x4d\xcd\xf6\xa1\x3f\x45\x41\x8f\x2f\x05\xb0\x13\xa6\x2a\xed\x31\xfc\x0a\xc5\xdc\xd3\x3f\xe5\x5f\xac\x66\xde\xe6\x2c\x63\xad\xfd\x9b\xd5\x42\xdb\x61\x7a\xc7\x9e\x6a\x36\x08\x83\x5e\x18\xa7\x08\x0b\xd0\x46\x9f\xd5\x1a\x24\x3e\x0b\x6f\xe8\x41\x42\x30\xbd\x7a\x20\xc6\x50\xa0\x0c\x11\x18\xc6\xa9\xac\x48\x30\x13\x3d\x04\xfd\x69\x8f\x51\x52\xfa\x17\xef\x57\x0f\xfd\xdb\x1e\xe5\xff\x0d\x66\x88\xc0\xc1\x72\xc6\x54\xb8\x4c\xa1\xbc\x4e\x4b\xdc\x9f\x8e\x53\x3b\xcf\x75\xc7\x31\xb2\x4e\xc9\xac\xe6\x36\x3d\x18\xc3\x34\xf4\x7b\x01\x4e\xe6\x41\x72\x15\xd3\xab\x95\xf0\x20\xa9\x4a\x54\x8d\x59\xb2\x53\x6d\xf7\xc8\x11\xbd\xcd\xb0\x24\x3e\x72\x8f\xc0\xf3\x1d\xcd\x94\x51\xe5\x5d\x9d\xae\x1a\x3c\xdd\x36\x63\x23\x38\xe4\xd0\x06\x3b\x99\x29\x59\xdb\x5d\x9d\xa4\xcd\xf6\xd4\x6e\x26\xe7\x7e\x4e\x0a\x93\x2d\xbf\xaa\xa5\xeb\x5f\x01\x79\x7c\x7c\xfc\xf7\xd9\x3a\x4b\x57\x37\xd3\xd4\x61\xfb\x4b\xbb\x25\x57\xc1\x6b\x55\x06\x2c\xf1\x7c\x73\xde\xe0\x71\x0d\x03\xb2\x33\xde\xa0\x13\x1b\x60\xdc\x8f\x35\x3c\x40\xfb\xab\x31\xf0\x37\xb9\x11\x03\xff\x80\xa9\xe5\xbf\xf2\x46\x3c\x4b\x3e\x7d\x7c\x1a\xfd\xfb\xc9\xc3\x46\xfc\x16\x36\x22\xdb\x52\x5b\xec\x46\xdd\xb3\x3f\x3d\x90\xe6\x80\xaf\xba\x41\x17\x7f\x8f\xfe\xf3\xc7\xb7\xf3\x35\x94\x52\x4a\xa0\x36\x47\x35\xb5\x39\x22\x12\xbd\xd9\x42\x82\x66\x3c\x9e\x2f\x8a\x38\x00\x64\xc7\xbd\xdc\xc5\xdc\x6f\x6a\xd8\x94\x58\x5c\xab\x61\x7b\x56\xd5\xb0\xfd\x61\xc9\xf5\x45\xb9\xd0\xb4\xe9\xab\x51\xc8\x74\xdf\xeb\x46\x85\x5a\x37\x88\x5a\x05\x69\x49\xd3\xbe\x42\x0b\xbe\x46\xb3\xda\x61\x36\xd4\x7c\xb0\xb5\xeb\xa5\x51\x42\x2a\x73\x2c\x64\xad\xce\x5a\xbe\xe3\x1a\xe3\xf1\x63\x55\x1d\x5f\xe2\x2c\x65\x87\xef\xf8\xf0\x68\x63\x73\x5a\x55\xdb\x01\xfd\xe8\x20\x08\x53\x91\x59\x72\xd8\x41\xbf\xd1\xac\x9b\xea\xa4\x22\xd3\xc7\x39\x2a\xd3\x44\x20\xb4\x53\x1b\xa8\xce\x56\x6b\x4e\xca\x1a\xa1\x96\xab\xcb\x0e\x41\xd0\x7d\x79\x8f\x9e\x99\xda\x68\xb9\x6c\xd2\x71\xa7\x6a\x92\x2b\xec\x62\xdf\x8d\x40\x39\x36\xa8\x6c\x0f\x78\x5c\x63\x57\x2b\x3e\xaf\x37\xab\x11\x16\xdf\xdf\x4f\x11\x25\x24\x48\x19\xec\x6a\x3a\xc9\xf2\xe8\x6a\xde\x46\x1c\xb3\x5d\x78\x73\x2d\xec\xae\x23\x3b\x96\x3d\x7b\x5a\x32\x9a\xc8\x87\x36\x28\x06\xf8\xf8\x87\x8a\xf1\x63\xd5\x60\x9f\xb6\x1b\xec\x1b\x46\x46\x9b\x47\xdc\xa2\xf3\xc7\x75\x9d\x3f\xde\xaa\xf3\xc7\x37\xd2\x79\xa0\xef\x53\x73\x18\xa2\xfd\x27\xb2\x03\x47\xf5\x7d\x2e\xc6\x77\x64\x8e\x8f\x3e\x3a\xec\x34\xc4\xa3\x8e\x43\x54\x6d\x8c\x94\x92\xf9\x71\x77\x3b\x48\xe5\x88\x53\xca\x74\x19\xa2\x2b\x75\xc0\x0d\x7a\xd4\x86\xfc\xb4\x57\x69\xb7\xa0\x2a\x32\x71\x4d\x37\x4d\x39\x63\x01\x0f\x81\x3d\x3d\x62\x7f\x3d\xae\x68\xc2\x65\xdb\x72\x4c\x67\xdc\x39\xaf\xc6\x59\xef\x24\x23\x53\xeb\x9d\xb8\x9a\xcb\xc4\xd5\x68\xef\xc9\x5a\x9d\x76\xad\xe2\x7b\xed\x14\x90\x24\x89\xc6\x70\xcb\x8b\xf3\x89\x58\xc0\xa7\x94\x52\x57\x4c\x8e\xdd\xac\x66\x95\x7b\xb2\xe0\x5e\x44\x46\x92\x1e\xed\xaf\x62\x87\x44\xd6\x1a\xfb\xc7\x24\x2e\xfe\x16\xfc\xdb\x8f\x9c\x81\x33\x38\xff\xb5\x67\xa5\xc9\x75\x48\x1c\x15\xf1\xa0\x6c\x60\xeb\x7a\x33\xee\x6e\x05\x95\xb2\xb2\xfb\x2e\x96\x2c\xa6\xc6\xd5\xaa\x3d\xba\x98\xa3\xea\x4c\x32\x03\x65\x31\xcd\x9c\x2b\x66\x66\x03\x23\x96\x97\x4e\x0c\x50\x73\xa7\xd9\x20\x95\xf4\xf5\x74\x33\xf3\xd4\x33\x65\xdf\x7d\xa9\x31\xe2\x23\x9d\x7d\xea\x56\xe9\xaa\xdd\x16\x85\x69\x31\xdd\x6a\xa8\xb2\x03\xa1\xba\x0d\xea\x4f\x6d\xcb\x05\xae\x8e\xec\xf5\x6c\x4e\x2f\xf7\x5d\x0c\x0a\xd1\xaa\x7a\x12\x17\xfb\xc6\x29\x6e\xa9\xf5\xdd\x53\xde\x0a\x05\x7e\x5c\xa2\xc0\xbb\x21\x4f\xad\xcc\xd1\xfa\xff\xde\x27\x16\xdd\x38\x96\x10\xb2\x2c\x66\xa2\xd9\xc0\xb2\xac\xff\xef\x37\x14\xf9\xc9\x0c\x59\x24\xb1\xf4\x5b\xa2\x15\x69\x29\xcd\x54\xf9\xee\xe8\xbc\x41\x5b\x2e\xea\x38\x09\x16\xdb\x2e\xe9\xfc\x6e\xae\xe8\xd5\x14\x61\xc4\xd7\xd5\x62\xe8\xcf\x61\x7c\x6e\x91\x29\x24\x16\xa7\x86\xc0\x4a\xb0\xb5\x48\x32\x6b\x06\x17\x56\x9c\x10\x6b\x0a\x2f\x91\x05\x7d\x1f\xa5\x29\x5d\x42\xca\xf4\x58\x64\x8a\xcc\x5a\xe9\x07\x10\x23\x51\x07\xad\x72\x92\xe0\xfe\x96\x1b\xe7\x8c\x75\x35\x48\xe2\x7f\xfc\x37\xed\x1d\x9a\xd1\xf6\xc7\xc8\x82\xf1\xc2\x68\xbd\x55\x97\xcd\xee\x22\xd2\xd4\xb9\x3b\xb1\xff\xb8\xbd\x33\xdd\x76\x0b\x46\x21\xfb\x8b\xf9\x20\x04\x89\x9f\xf6\xa2\x30\xbe\x68\x64\xf5\xca\x5f\x43\xf6\xc7\x53\x4a\xca\x9f\x1c\x15\x3b\xf6\xa9\xee\x1d\xf6\xe1\xe5\xa7\xcf\xbf\x9e\xbe\x2d\x1c\x00\x0f\x52\xe4\x67\x38\x24\x0b\xa6\x16\x30\x14\x36\x6c\x42\x8e\x8e\x81\x8d\x19\x95\x8e\x13\x4a\x99\x11\xb6\xe2\x84\x79\x8c\x73\x48\x40\x56\x80\x33\x28\x36\xb0\x3f\x8f\x23\x68\xf6\xf8\x95\x30\xf5\x42\x8e\x24\x15\x1b\xeb\xba\x72\x8d\xd6\x2c\x61\xfd\xac\x45\x08\xe2\xf8\x66\xa6\xed\xe4\xe3\x9b\xd2\xd4\x95\x67\xac\x3f\x25\xb3\x68\x37\xd3\x76\x8a\x60\xc0\x4e\xed\xc9\xc7\x37\xd6\xab\xc4\xdf\x6a\xaa\x3a\xec\xf6\x0e\x9c\x43\xab\x82\xd5\x62\xdf\xb5\x72\x93\xa9\x14\x5a\xeb\xfa\x5b\xe3\xbb\x02\x9e\x76\xd2\x09\xdd\xb8\xa6\x5c\xb1\xaf\xdc\x6b\x42\x39\x49\x30\x87\x0c\xe6\xa0\xc1\xfd\x31\x74\x8d\xba\xf0\xf2\xe0\x9e\x1b\xcc\xcf\x82\xd7\xf2\x51\x45\xd6\x55\xd5\x33\xc0\x66\x81\xa9\x85\x9b\x84\xa6\xc9\x51\x9a\x1d\x4c\x7e\x5a\xe8\xbe\x1c\x9d\xd5\xf4\x35\xba\xf6\x9d\x69\xee\xd3\x69\x72\xf5\xb5\x15\xf7\xd1\xbf\x3e\xfe\xf2\x0b\x5a\xfc\xd6\x52\x71\x4f\xb9\xf2\x0d\x2c\x4d\xdf\x77\xb6\x34\xb5\x50\xcd\x73\x8f\xe0\xd6\xba\xf9\xaa\x1b\xec\xe3\xf5\x2a\x7a\xd3\x1f\x76\x87\x9a\xfa\xea\xe3\x30\xb8\xf3\x0a\xfc\xa3\xa3\x9b\xd5\xe0\xdf\x86\x0e\xff\x41\x8b\x5f\xa3\xc5\x7f\xac\x8d\xb5\xb3\x2f\x76\xbd\xee\xb1\xab\x60\xdd\x46\xfe\xc1\x08\x06\x3e\xce\x66\xe3\x0d\x78\x50\xc9\x08\x25\xd1\x4a\x9e\xa9\xc4\x6e\x3d\xae\x61\x9f\xf8\x59\x38\xe4\xe1\x0f\x7d\x66\xcb\x35\x39\x4a\xa5\xde\x92\xad\x9c\x44\x91\x65\xaa\x22\x05\x1f\x53\xcb\xcc\xdc\xa8\x3e\xf2\x6b\xab\x64\xa5\xee\x4a\xc5\x0f\x74\xd0\xc9\xae\x52\x26\x71\x7d\x9a\xa6\x4c\x52\x8d\x35\xb4\xb1\xab\x09\x8d\xe1\xe5\x86\xaa\x41\x02\xc7\x3d\xfa\x75\x8d\x0a\xac\x1a\x37\xf5\xb4\xc6\x5d\x77\x38\xb4\x23\x38\x66\x74\x68\x8a\xd1\x84\xb1\x48\xd2\xe8\x05\x86\xf6\x9f\x28\x43\x0e\x23\x2b\x8c\x27\x89\xbd\x7e\xdf\xf6\x29\x3b\xa2\x3f\xa9\x46\x66\x75\xfe\x54\xb7\xe4\x94\xf5\x0b\x2b\x83\xc0\x5a\x0e\x51\x05\x7c\x59\x38\x63\x99\x96\x5b\x8e\x92\x37\xdb\xe3\x1f\x75\x1c\x66\xdd\xb7\xa3\x51\x5d\xdc\x5b\xcb\x41\xfc\x14\xc6\x41\x18\x9f\x77\x1c\xc2\x98\x7f\xb5\xd9\x18\x6a\x3f\xae\x46\x80\xdd\xe8\xc1\xd9\x4e\xaf\xde\xc6\x13\xe9\xfb\xda\xa5\x28\x13\x87\x6d\x03\x39\x4a\x21\x62\x9b\x04\x72\x1c\x6f\x22\x2d\x76\x97\x15\x6f\x49\x4e\x5c\x29\x1d\xd2\x03\xd0\x23\x09\xe5\x77\xd3\x9e\x38\x0d\x42\xfa\xe3\xae\xf5\x4c\x42\x2c\x3c\xe5\x67\x73\xe8\x93\xb2\xa3\x7c\x6d\x30\x80\x26\x3c\xee\x40\xd2\x63\xc7\x64\x97\x82\xde\xad\xc1\xb1\xb6\x10\xfa\x7e\x7a\xf3\xef\xbf\x7c\xfa\xeb\xc1\x77\xab\x84\xbe\xf5\x02\x5e\xb1\x24\x9b\xf9\x13\x52\x86\x22\x08\x2f\x0b\xb5\x16\xbd\x10\x53\xe5\xfd\x55\x66\x33\x9a\xef\x7e\xc3\xe2\xad\x1f\x6f\x9d\x53\xe7\xcf\x6b\x68\x5a\x89\xd5\xd8\x99\x9f\xe0\x0e\x36\xa0\xfe\x64\xb7\x9b\xd1\xbc\x00\xbe\xf2\x76\x7c\x76\xf0\xc3\x0f\xe7\xff\xcf\xb3\xc3\x0e\x3a\x88\x54\xad\x68\xf7\x6d\xda\xda\x36\xda\x51\x1f\x51\x13\x8c\x5b\x56\x47\x18\xd3\x7e\x30\x49\x70\x6f\xa5\x82\xe2\xbb\x07\x05\x45\x2b\xa1\xf1\xf6\x44\xf9\x3b\x21\xae\x3f\xdb\x5c\x5a\xdf\x84\xf8\xae\x36\x11\x3e\xd9\x95\x89\xb0\xc9\x42\xc9\x57\xda\x60\x92\x2d\x18\x45\xc9\x95\x05\x63\x8b\x12\x24\x48\x12\x6c\x91\xc4\x42\x5f\xe6\x18\xb1\x5c\xdd\xe9\x22\x25\x68\x06\x49\xe8\x5b\x57\x70\x61\x25\x13\x0b\x66\x24\x61\x0f\x60\x14\x2d\xac\x28\x8c\x2f\x58\x65\x09\xab\x2c\x0e\x2c\x01\xae\x62\x85\x01\x8a\xe9\xa1\x41\xcc\x44\x17\xa3\xab\x68\x61\xf1\xec\x77\x81\xc5\x42\x12\x53\xeb\x2a\x24\xd3\x24\x23\x45\xd3\x2c\x6b\xde\x25\x07\x9f\xee\xeb\x6e\xec\x4f\x2a\xf7\x57\xf3\xf8\x3e\x65\xcc\x30\x38\xc9\x22\x66\x3b\xa2\xb5\xf1\x38\x3e\xd6\x1e\x1d\xaa\x66\x52\xb2\x78\x34\x0d\x1b\x2a\x22\x74\x7c\x04\x67\x29\xed\xa3\xe8\xff\xc2\x82\x84\xe0\x70\x9c\x11\x94\x5a\x7e\x82\x31\x4b\xe8\xc6\x26\x90\x24\xca\x4e\x2a\x1a\xd1\x3e\xeb\x5b\x67\xd3\x24\x45\xfa\xd7\x10\x23\x6e\x91\x45\x81\x05\xcf\x61\x18\xa7\x84\x4e\xbf\x25\x11\xff\x51\x60\x8d\x8d\xb5\x99\xd0\xd5\x98\x42\x62\x74\x98\x24\x56\x40\x4f\xcb\x2c\x8c\x91\x75\x45\xdf\xce\x71\x78\x19\x46\xe8\x9c\xcf\xf4\x39\x86\x31\x61\x1d\xe3\xf8\x6a\xd6\xc9\xcb\xb7\x7c\xc2\xad\x90\x58\x57\x61\x14\x59\x59\x44\xc2\x19\x24\x48\xad\x48\x8b\xb9\x9e\xe2\x42\x8b\xf3\xa4\x66\x43\x97\xe2\x0b\x4a\x7f\x33\xf9\xa0\x06\x13\xa3\x23\x40\x41\x0d\xc7\x22\xef\x81\x8a\x0b\x8c\xa4\x54\x55\x87\xa7\x92\x22\xa6\x61\x60\xf5\x92\x45\x7b\xfd\xa8\xdd\xe4\xd8\x72\x03\xea\xbc\x2d\x55\x51\x86\x6f\xca\xfb\xc4\xdc\x85\x37\xaa\x43\xdb\xc4\x0f\x63\xf5\xe9\xbf\x87\x14\xee\xc6\x35\x95\x1b\x7a\x1b\xd4\xd9\xcb\xd7\x7b\x19\xac\x31\x93\x1f\xb6\x33\x93\x97\xd4\x2a\x3b\x35\x91\x07\xba\x8b\xc1\x0a\xf5\xe8\x26\xeb\xd1\x59\x95\xa0\x6b\x12\xd6\xca\x4f\x4f\xba\xb6\x77\xe3\x26\x6a\x6e\x80\xee\x11\x0c\xfd\x8b\x9e\xd4\x35\x88\x98\xfb\xc2\x4c\xdd\x68\xa0\xde\x91\x7a\xc1\xdc\x2e\xbb\x95\xef\x0c\x25\xe5\x57\x16\xef\xd2\xab\x67\xc9\x2f\xef\x7f\xfd\xd3\x6a\xf1\x6e\x53\x69\xee\x49\x77\xe4\xa1\xe3\x15\xea\x81\x4e\x56\xaf\x8d\x98\xe8\x2a\xcf\xc1\x39\x79\xa5\xcb\x3e\xe5\x8b\x76\x1b\x5c\xf5\x89\xe4\x1f\xf9\xa5\xc3\xd8\x36\x1f\xc6\x16\x03\xea\x4c\x22\xeb\x6a\x1a\xfa\x53\x2b\x56\x5a\x76\x71\x41\xc8\xfb\xe2\x32\x84\x2c\x6f\x94\xc1\xea\x31\x66\x6d\x8c\x54\x21\x7a\x9b\x84\x71\xdf\xfa\x35\x8e\xc2\x0b\x64\x5e\xd3\x80\x91\xb6\x49\x88\x53\x52\xb8\xfd\xc5\x86\x52\xdf\xba\x0a\xe3\x74\x0d\xab\x57\xcf\x64\x89\x33\xd0\xec\x66\x5c\x33\xeb\xdb\xa1\x17\xdd\x63\xee\x29\x2e\x59\x52\xee\x1f\xff\x74\xdf\xf6\xf2\x03\x03\xb5\xda\xcf\xf0\xbf\xd4\xdc\x3d\xb0\x53\x55\x4e\x68\x07\xfc\x4f\x3d\xa7\xb3\x2b\xe6\x46\xe7\x40\xb6\xe1\x6d\xee\x44\x78\xfb\xeb\xf1\xa7\x9f\xdf\xcd\x9e\x4e\xb6\x33\x98\x6c\x81\xbd\xd0\x08\x89\x50\x03\x14\xcc\x6c\xbe\x9c\xba\x55\x80\xb6\x77\x6d\xe4\x58\x05\x85\xd5\x7d\x17\x6d\xed\x5e\xc9\xf2\x17\x85\x28\x3d\xe8\x4d\x12\x3c\xfb\xda\xbb\xe6\x55\x12\x5c\xa1\x7f\xc7\x59\xfd\xae\x11\xb9\xb1\xb9\xe1\xd3\x67\x34\x6d\x86\xd2\x14\xb2\xd0\x56\x3f\x4a\x52\x81\x98\x3e\x09\x71\x0d\x63\x4c\x69\x2d\x1b\x63\x99\x20\x8b\x8b\x81\x67\x72\x92\xd3\xc0\xf7\x1f\xff\xd1\x88\x7d\x59\xe8\x9f\x8e\x45\x0c\xf3\xb1\xc0\x79\x3f\xe6\x9e\x7f\x5d\xb9\x6d\x93\x2b\x5a\x19\x25\x29\xe6\xad\x26\x46\x73\x2d\x31\x95\x7c\xb5\xee\x21\xa3\x07\x99\x6f\xa0\xba\xb3\x37\x02\x9b\x66\x54\x7b\x8d\x01\x88\x1f\x4b\x66\xf9\xe1\x2b\x74\xf0\x87\x65\x18\x34\x61\x51\x37\x99\x7c\xc2\xc0\x96\xe3\x7b\x2c\x42\x89\x8f\x54\x48\x31\x30\xf1\x6a\x9f\x82\x1f\x74\x04\xe4\x51\x25\xac\xf9\x70\x54\x0d\xd5\x94\xd1\xe0\x8f\x3b\x43\x57\xd7\xad\x86\xaa\x6d\x07\xe1\xab\x62\x69\xd8\x3c\x9a\xac\xbd\x0f\xe7\x72\x4f\x17\x71\x93\x27\xf3\x79\x14\x32\xcd\x16\xe7\xce\x92\x28\x4a\xae\xb8\x1a\x9c\x2e\xc4\xc0\x66\xbb\xfa\x71\x5b\x97\xcd\x75\x7e\x9c\xa6\x48\x58\x27\xfd\x19\xbb\xf4\x59\xb1\x4b\x0d\xb0\x6c\x9b\xf3\x9b\x56\x03\x11\xdf\xd8\xb3\xf6\xe8\x08\xd8\xe3\x8c\x10\xc1\xf1\x7c\x47\xbb\xaa\xbc\x6b\x6b\x1c\xcd\x64\xff\x9e\x80\xa1\x1d\xa6\x1f\x71\x98\x92\x30\x56\x88\xdb\xfc\xe9\x9b\xf8\x12\x46\x21\xb7\x62\x69\x86\x50\x59\x40\x41\xbf\x97\x46\xa1\x35\xad\x5d\x4e\xc7\xe0\x18\xd8\x69\x36\x9e\x85\x6c\x17\x1c\x83\xe1\x93\x67\xfa\x06\x15\x13\x63\xf3\xf6\x8b\x45\x93\x53\xfd\x09\x5e\xa2\xb5\x0c\x54\x23\x8c\x7d\x19\x6b\xdb\xbe\xc2\x21\x41\x96\x48\x8a\x37\x32\x9d\x87\x9e\x0a\xe7\xa1\x0d\x82\xaf\xdb\x2f\x43\xcd\x24\x6f\x36\x6f\xd9\x3c\xd8\xc1\xbc\xad\x3d\x01\xf5\x23\xe4\xdd\xc3\x28\x45\x4d\xab\x2a\x2e\xc0\x86\xde\xbd\xe4\xaf\x9b\x8c\x38\x35\x47\xaa\xf1\x16\x30\x8f\x59\x80\x22\xd4\x6e\x81\xb7\x08\xb2\xa7\xf7\x37\x93\x32\x7a\x41\x08\xa3\xe4\x5c\x11\x2c\x79\xdb\x33\x3a\x85\x11\x8b\x15\x4c\x33\xf1\xc7\x15\xb3\x87\x25\x96\xe8\x22\x93\x4c\x3f\xb2\x7e\xbe\xd8\x24\xfe\xae\xb5\xb8\xb8\x55\x70\x5f\x79\xd5\x0f\x81\x4d\x16\x73\xd4\xe3\x83\x28\xb6\x42\x51\xa8\xb2\x17\x78\xf0\x3a\x10\x4b\xd3\xb8\x25\x5e\xa9\x1a\x1b\xe2\xc1\xaa\xdb\xf7\xe9\x8a\x70\xb0\xb5\x93\x23\x96\xae\xb3\xaa\x71\x9b\x6b\xb0\x43\x50\xad\x18\xc1\x2c\x09\x60\x54\xde\x66\x49\x2c\x99\xc9\x1f\x99\x53\x03\xb0\x7f\x84\x38\x84\x3a\xe7\x52\x9a\x7f\x75\xeb\x03\x82\x33\x54\xc7\x9a\x70\x77\x56\x3a\x31\x7c\x4f\x5a\x61\x6c\xfd\x9a\x0a\x40\xf8\x8d\xf6\xcf\x2d\x44\xb5\x9b\x8a\x0a\x53\x03\x56\x1a\xc6\xca\x28\xc4\x8e\x81\xb5\x2d\xc7\xb6\x4d\x70\xb7\xd5\x4a\x41\xa6\xff\xef\xac\xa0\x27\x56\x98\x5a\x22\x4f\x4b\xc4\x66\x20\x4b\x51\xdf\x7a\x33\x61\x64\xc8\x9f\x26\x49\x8a\xea\x09\x11\x50\xa6\xf9\x31\xb2\x30\x9a\x25\x97\x28\xb0\x26\x38\x99\x95\x58\x2d\xd9\xb3\x94\xe0\x24\x3e\x57\xdd\x3b\x02\x95\xc3\x20\x2e\x92\x33\xc9\xf6\xa8\x55\x18\xac\x1a\xf4\xaa\x95\x5a\xc5\x30\x4a\x3f\xb2\x1f\x85\xbe\x48\x88\x3e\x8f\x47\x85\xe2\xa8\x11\x7b\x62\xab\x79\xe7\x94\xd6\xf2\x61\x1c\x27\x84\x4e\x5e\x16\x07\x49\x8c\xfa\x4a\xd2\xe7\x8e\x07\xeb\x1a\xbd\xed\x1d\xba\x65\xf8\xb7\xb5\xe3\x5b\xe2\xa8\x7a\x2b\xfc\x1d\xa5\xc0\x5a\x7b\x35\xb4\xea\x8c\xaf\x78\x8e\x56\x9d\x39\x6e\xc9\xb5\xb4\x59\xa9\x3a\x6f\xf0\x96\xeb\xba\x29\xae\x81\x14\x78\xd9\xd4\xf5\x74\xa6\xa5\xc2\xad\x00\xfb\xc7\x42\x73\xf1\x63\x31\x4d\x1a\x5a\xcf\x91\xba\x46\x3a\x83\xf6\x34\x8d\xf2\x08\xd0\xda\xdb\xc5\x5e\x77\xcc\x3d\x50\xe1\x2a\xcb\x4c\x70\xb3\x1e\x4c\x69\xbd\x84\x79\xd8\xf0\x4c\xd5\x15\xac\xdc\xb5\x9d\xf9\xa6\x33\xb7\xc4\x30\x50\xde\x9b\x52\xb0\xd7\xa5\x7d\x6e\x66\xe6\xf1\xd3\x42\x69\x23\x05\x1f\x3b\x4e\x24\xb0\x7d\x77\xfd\x9a\xa9\x1e\xdb\x89\xa2\x0d\x05\x21\xf9\xda\x7a\xb6\x3f\xff\xeb\x6f\x1f\xbf\x8c\xf1\x87\x96\xfe\xc3\xd5\x94\x37\x72\x0d\xd8\xb2\x88\xc5\x53\x13\xae\xbe\x8b\x13\x12\xfa\x5d\xf5\xbc\x47\x8f\x6f\x22\xf4\xf9\x78\xbd\xa6\xa9\x5e\xbd\xf4\xa4\x8b\x7a\x69\xd7\xfe\xc4\x06\x2c\x5f\x9d\x73\x71\x9d\x9e\xea\xae\xc4\x41\x1b\x59\xb9\x1e\xe2\xa0\xbf\xcd\x38\xe8\xe3\xba\xad\xd9\xe0\x0e\xdf\xfe\x38\x74\xd8\xf7\x65\x24\x48\xf3\x37\xb0\xc3\xf4\x3d\xba\xda\x41\x74\xf6\xd7\x46\x86\xbc\x53\xa1\xdc\xcf\xf4\x60\x49\x79\xb3\x35\x84\x71\x7f\x2c\x5e\xdf\xaf\x10\xee\x15\x41\xdc\x65\x22\xf7\x18\x3c\xdb\x46\x1d\x61\xb7\x04\xe7\x7c\x8f\xae\x84\x24\x59\x11\xb4\x3a\x28\x6d\x75\xba\xfc\xfd\x3a\xa5\xad\x4c\xdd\x75\xf3\x83\x7b\x1d\x84\x64\xab\xd1\x6d\xd8\xee\x5f\xc3\x6e\xb3\xda\x4a\xa5\x7b\xc3\x1b\xba\x63\x24\x70\xfd\x9d\xfc\x43\x69\xeb\x6e\xa6\x99\x2f\x3b\xf4\x31\xc6\x95\x51\xf9\x1e\xa1\xd7\xef\x0a\x82\xa3\xbe\x6f\x47\x95\x02\x52\xa3\x7f\x7a\xf3\x6a\xa5\xbc\xa8\xbe\x0d\xd6\x28\x1b\x14\xfb\x30\x5f\xf4\x84\xe4\x2a\x67\x5d\xa2\x28\xab\x90\xe9\x79\x92\x86\xd2\x09\x86\x9d\x10\x30\xb4\x69\x3f\x46\x7a\xaf\x80\x4d\x92\x79\x2f\x25\x10\x13\x73\x5b\x69\x3a\x0b\xf5\xe1\xaa\xde\x37\x69\x6b\xdb\x38\xe0\x34\xee\xb7\x46\x0e\x4d\x03\x0a\x32\xf2\x72\x2a\xfb\xf8\x0c\xc6\xf0\x9c\x6d\x87\x2d\x18\x36\x31\xdb\x42\x3e\x50\xf9\xf5\x6a\x9a\x10\xa7\x75\x31\x17\xd8\x11\x89\xb0\xa6\x75\xbc\x5a\x19\x19\x38\x04\x43\xfb\xcf\xc5\x55\xb0\x89\x9b\xa1\x76\x27\x3c\xd1\x77\xd4\x3b\x7d\x56\xb6\x3a\xf7\xaa\xa7\x3f\x49\xf5\xe6\x76\xfd\x6c\xd6\xb2\x31\xcd\xda\x79\x94\x8c\x61\xa4\x4d\xb9\x8c\x21\x4a\xad\x71\x16\x46\xc4\x0a\x63\x92\x88\x10\xa3\x7f\xfc\x77\x2a\x6e\x09\x11\x4d\xd1\xb7\xfe\x9e\x64\xcc\x65\x10\xce\xe7\xd1\x82\xab\x3a\xd3\x39\xf2\x43\x18\xc9\x92\x24\x91\x7e\x83\x93\x04\x5b\x93\x2c\x8a\x04\xa2\x63\x9f\x77\x60\xae\x54\xaa\x71\x42\x2c\x2a\x1c\x53\xaa\x61\x25\x58\x28\x48\xe9\x2f\x60\x8d\x33\xee\x9a\x38\x46\x56\x78\x1e\x27\x2c\x86\x8a\x63\x44\xb2\x96\xc3\xf8\xdc\x0a\x99\xf5\x07\xc6\x0b\xd1\x5e\xdf\x7a\x8b\x20\x8e\xad\x59\x82\x91\x15\xc6\x56\x92\xe1\xce\x3e\x77\xa6\xbf\xdd\x79\x16\x06\x28\xa5\xb2\x05\x43\xf4\xfb\x2f\x36\x41\x61\xdc\x2b\x18\xa0\xd1\x0a\x7f\xba\xb5\x7e\x78\x62\x8d\x1a\xfd\xec\x76\xe1\x06\x59\xa3\x27\x3a\xac\x29\xb4\x29\x5d\x5f\x4b\xd1\xeb\x69\xb9\xf4\x4e\x6f\x22\x68\x26\x01\x2f\x68\xa7\x84\xc4\x59\xfd\xa5\xd1\xd4\x5f\x61\x14\x06\xd6\x2b\x23\xeb\x74\x87\x76\x0b\x8f\x32\x1b\x58\x36\x28\x7b\xa5\x7f\x5f\x4d\x0d\xdf\xba\x67\xaf\x50\xea\xe3\x70\xbe\xce\xbb\xb2\x69\x2e\x8c\xcf\x6b\x1b\xae\xa9\xb5\xe1\x51\xbb\x54\xca\x2d\x54\x2a\x6b\x9d\x77\x3a\x6a\x57\x8e\x95\xb9\x53\x4f\xae\xbc\x7d\x4e\x65\x33\xc7\xf0\x0f\x85\xf4\x78\x07\x9d\x6f\xb4\xfe\xed\x42\x61\xb0\x3e\xf1\xec\x3a\x8d\xc8\xd1\x0f\x74\x9d\x4a\x5a\x4e\xe1\x46\xc7\xb4\xd0\xe0\x18\x50\x52\xfb\x3d\xe3\x34\x5b\x2b\xb6\x6f\x00\xce\x45\xeb\xc8\xed\x03\xbb\x30\xcb\x70\xc5\xa5\x58\x1c\x0b\x3d\x0d\x3e\xb0\xff\x95\x84\x71\x39\x84\xaa\xac\x1a\x2f\x60\x61\xb8\x7e\x5b\x54\x44\x39\xa5\x64\x22\x55\xe7\xba\xdb\xe9\x16\x88\x9e\x86\xee\x7a\x27\x4a\xf0\x3b\xe1\xa3\x7c\xfe\x9f\x5f\x8f\x4f\x9e\xfe\x75\x25\xa8\xcb\x8d\xa6\xe0\xfa\xe1\x46\x40\x3e\x8f\x5a\xaa\xba\x43\x1d\x3b\xeb\xe8\x70\x3d\x25\xde\xbd\x8a\xfb\xee\x29\xad\x0d\xd7\xa8\xc7\x37\xab\xb4\xbe\x79\x95\xf5\x83\xc2\xba\x12\x4b\x58\x16\x73\xe3\xb5\x89\x9e\x1e\x1f\x4a\xa7\xb8\x1f\x46\x9c\x57\xed\x9c\x79\xeb\x87\xcd\x32\x6f\xe9\xfd\x13\x00\xcd\xc5\x45\xb1\x32\xfd\x56\xbb\x91\x49\x97\x49\xe6\x03\x28\xbf\xd4\x1f\x6e\x91\xc2\xea\xd9\x16\x29\xac\x3a\xf6\xfe\xfb\xba\xde\x7f\xbf\x55\xef\xbf\xbf\x99\xde\xd7\x66\xe0\x32\x48\xce\x77\xb2\x07\xc7\xf5\x9d\x2e\x06\x78\x5c\xcd\xc0\xf5\xe4\x46\x93\x8c\xa9\x36\xb6\xca\xc0\x55\x22\x4b\x77\xc8\xc2\xf2\xb5\x81\x5e\xed\xc2\x52\xd2\x05\xe3\xf5\x2b\x05\x3f\xd6\x5f\x99\xc7\x9a\x2f\x7e\xd5\x2e\xd4\x4d\xbd\xbc\x36\x44\xf2\x49\x9d\x15\xaa\x2f\xdc\x10\x74\x3c\xd5\x23\xcd\x4b\x49\xbe\x2d\xbc\x8e\x8a\x27\x2d\x14\xa7\x3b\x4f\x96\xb5\x71\xba\xb3\xb2\xef\xfd\x4d\xa5\x3b\x13\x82\x45\x4d\xa6\x33\x23\x2a\xaa\x7d\xda\xb3\xd5\x1c\xe4\x43\x52\xb4\xca\x91\xdf\x5d\x52\x34\x61\xe3\xbb\xcf\xf9\xd0\xc4\x76\xac\xf7\x4b\x4d\xe2\xc2\x25\xb2\x9c\x16\xcd\x08\xb6\xb1\x55\xb9\x15\xb8\xbd\xad\x97\xbf\x3a\xf8\x87\x94\x69\xbb\x48\x99\xb6\x0d\x89\xdb\x24\xc1\x96\xbc\x43\x76\x9d\x2e\x4d\x5e\xec\x77\x39\x55\xd5\xcd\xa6\x4a\xfb\x6a\x2b\xb9\xb3\x34\x69\xaa\xc6\x5b\x4f\x91\x26\x5b\x6e\xd5\xd5\xa2\x9b\x0f\xa9\xd1\x56\xfb\xee\xaf\x60\x2c\x9f\xad\xb6\x03\xfa\xc9\x6c\x06\xe3\x80\x59\x02\x0f\xa4\xdb\xcc\xa8\x95\x8d\xaf\x63\x52\xb4\x79\xd9\x77\x6a\xc5\x64\x7c\xad\x84\x68\xfa\x64\xbd\x7d\x7d\x72\xfa\xbe\x32\x5b\xec\xde\x96\xf9\xe4\x7a\x31\x22\x57\x09\xbe\x08\xe3\xf3\x03\x66\x75\x0e\xe3\xf3\x1e\xf4\xa3\x1a\x2b\xea\x4e\x60\x4b\x98\xd1\x76\x9b\xf9\xeb\xb0\xf1\x3b\x30\x0b\x77\x2a\x4b\xda\x57\x4f\x94\xb6\x51\x7a\xb4\xc2\x02\xa2\xe1\xe0\x9f\x93\x2a\xc2\xc6\x8d\x65\x4f\x33\x94\x71\x3b\xcc\xa0\x66\x9a\x49\xb6\x31\xb8\x30\x34\xcb\xbb\x81\xed\xf1\xd3\xf9\xaf\x1f\xfe\xf2\xee\xe8\xd5\x0e\xb0\x3d\x94\x51\xa6\x33\xc8\x07\x9d\x8f\x7a\x88\x0f\x11\xc4\xf0\x23\xb3\x38\x6b\x18\x1f\x9a\x78\x2a\xe2\x13\x8e\x25\xb0\x07\xc7\xf9\x38\x34\xf1\x3e\x8e\xea\x82\x78\x6a\xad\x0b\x4a\xd5\xf7\xb4\xbb\x03\x5e\x7b\x2b\x7d\x47\x8c\x0d\x3a\x41\x5f\x0d\x61\x63\x07\xc1\xc2\x5c\xfc\xda\x89\xf5\xbe\x5e\x40\xf9\x8d\x71\x6a\x61\xca\x9d\x9d\xe8\x74\x59\x59\x8a\x82\x17\x35\x77\x48\x13\x5b\xcc\xc9\xf6\x6f\xe8\x1f\xff\x8d\x91\x95\xc4\xd1\xc2\x62\x2e\x4f\x24\xb1\xd2\x69\x72\xc5\xb2\x0f\x89\x58\x32\x01\x0d\x8d\xac\x39\x0e\x67\x10\x2f\xac\x82\xe2\x30\x88\x5a\xfa\x4a\x44\xa2\x6a\xaf\x84\x67\x15\x15\x91\x15\xaf\xc8\x6a\x46\x97\x08\x2f\x2c\x1f\xa6\x48\xf0\xc5\xc5\x18\xc2\x94\x79\x52\x85\x28\x58\x8f\x1c\xd8\xd6\x9b\x41\x44\xa5\x02\x63\x55\xba\xda\x8c\xd6\xdd\x81\xad\xc2\xd5\xba\x40\x8c\x7c\x5f\x1c\xcb\x5a\x88\x11\x46\x52\x1f\x10\x46\xbe\x2e\xc2\x08\x5d\x04\x46\x6f\x1e\xf0\x45\xee\x3a\xbe\xc8\xf7\xab\xef\xbc\x5a\x7c\x91\xb5\xcb\x7b\x27\xd0\x45\x4e\x93\x08\x3d\x60\x8b\x3c\x60\x8b\x6c\x88\x2d\xd2\x1a\x53\x64\x25\x9c\xc8\x29\xbb\xbd\xef\x39\x98\x88\x31\x88\xdf\x07\x94\xc8\xa9\xe0\xba\x3a\x02\x89\xd0\xcf\x1e\x60\x44\x36\x9c\xf3\x07\x18\x91\x07\x18\x91\x15\x2b\xb5\x0a\x46\x64\x03\x77\xe3\x07\x20\x91\x7b\x0b\x24\xb2\x4b\x08\x11\x4d\x05\xb7\xbd\x26\xef\x2e\x80\x87\x7c\x38\xfa\xcf\xc1\xaf\xbf\xf9\x7f\xdd\x1e\x3c\xc4\xc0\x0d\xe9\xe6\x3a\xdd\x1a\x56\xb7\x8b\xeb\xf4\x77\xeb\x55\x65\x75\xfa\xb1\xa7\x5f\x1f\x22\xa4\x16\x86\xe1\xce\x23\x84\xe8\xbe\xb8\xdf\x8f\x1e\x00\x42\xbe\x41\x7f\xeb\x67\x75\x1b\x73\x6b\x7c\x90\x07\xc4\x8f\xdb\x46\xfc\x30\x72\xab\x97\x54\xa0\x06\xdc\xc7\x69\x12\x7d\xab\x58\x1f\xe5\x28\xcf\xad\xd4\x03\xed\xd0\x3e\x4e\x93\xa8\x0a\xf1\xbe\x19\xab\xd9\xb6\x59\x86\xc3\xd1\xba\xdd\xfb\x02\x7c\xa1\x5f\x35\x8f\x47\xb5\xd1\xba\xf7\x04\xf8\x82\x29\x0e\xee\x02\xec\xc5\x77\x05\xec\x85\xec\x53\x1b\xd0\x8b\xef\xbe\x1a\xe8\xc5\x8a\xb8\x55\xce\x5d\xd7\x05\xad\x76\xf6\xb6\xd8\x3c\x2c\xf5\x0e\x04\xa5\x16\x3e\x15\x4c\x78\xe2\x72\x4f\x25\x8a\xb4\xea\x3e\xb1\x99\x9f\x43\x21\xd3\x6c\x2f\x19\xdd\x89\x88\xd2\xcb\x67\xaf\xb2\x8b\xbf\x3d\x49\x6e\x3f\xa2\x14\x68\x24\x9c\x87\x96\xf2\x53\xd9\x81\x75\x68\x2f\x27\xb5\x09\x31\xe5\x3c\xc2\x43\x7c\xe9\x43\x7c\xe9\xef\x4a\xde\x39\xfa\x61\xd4\x35\x0a\xb3\x48\x6a\xf2\xfd\xa6\xf1\xa5\x2d\xc3\x15\x57\x45\x2a\x6e\x14\x4b\xfa\x10\xcf\x58\x72\x8d\xb9\x63\x22\xe4\x57\x0f\x69\x54\x57\xd0\x37\x10\xcf\x58\xe3\xf8\xd3\x5d\x64\x68\x13\xca\xc8\x1a\x7a\x88\x63\xdc\x71\x1c\x23\xd3\xdc\xd6\x44\x31\xb6\x0f\x5c\x7c\x08\x4d\xbc\xc1\xd0\x44\xe6\xf2\x73\x9f\x03\x13\xd9\xfe\x7a\x08\x4b\x7c\x08\x4b\xdc\x79\x30\x1b\xbb\x0f\x76\x1d\x93\xc8\x6e\xe6\xbb\x1c\x20\xf6\x6d\x05\x24\xf2\x35\xdc\x59\x34\x22\xaf\xee\xd6\x43\x11\x59\xb3\xad\x3a\x29\x3a\xf8\x10\x84\x78\x2b\x41\x88\xdc\x5f\xf6\x46\x42\x10\x71\xd2\x94\xdc\xbe\xe5\x9a\xdd\x66\xfc\xe1\x8a\x44\xe9\x9c\xa9\x9e\x92\x59\xb4\xe3\x00\xc3\x93\x8f\x6f\xac\x57\x89\xbf\xd5\x1c\xfd\x0e\x62\x0c\x5b\x04\x18\x3e\x84\x17\x9a\xe1\x85\xbb\x08\x25\xd4\x94\xe3\xdb\xe8\xd8\x45\x84\x58\x6f\x12\xa2\x28\x48\x11\x49\x7b\x11\x3a\x87\x0c\x4a\xe4\xab\x2a\xdc\xdf\xfc\x0a\xbf\x0f\x5e\xff\xa7\x21\x91\xd1\xe7\xcf\x10\x9f\x1f\xda\x5c\x64\xae\x6a\xd2\x4b\x11\x42\x72\x6c\x82\xcc\xd4\x84\x80\x1c\x97\xb4\x62\x06\x94\xbe\x88\x4c\x61\x33\xc5\x78\x60\x23\x76\xe1\x50\xcf\xfd\x5c\x17\x31\xb2\x02\x2c\x59\x39\x7b\x1f\x3d\x05\x87\x9c\xf8\x71\x25\x00\x41\x5f\x48\xb9\x77\xac\x88\xd2\x26\xab\x50\x1f\x6b\x0a\x53\xa1\xa3\x35\x34\x0a\xab\x0d\x94\xe9\x1c\xc6\x3a\xd1\x5b\x01\xd4\x6c\x15\x37\x6e\x18\xcf\x33\xd2\x6c\x47\x84\x19\x49\x26\x89\x9f\xa5\x4a\xaa\xae\xc0\x17\x03\x5b\x14\xd6\xca\xb6\xd3\x21\x15\x1c\x1e\x9d\x0e\x76\xd8\xb7\xb7\xee\x0a\xe1\xd4\xc6\x30\x08\x93\x73\x9c\x64\x73\x6d\x35\x9a\x27\xff\x8c\xed\xba\xfa\xc9\x6f\x60\x4b\x9f\x55\x3c\xa2\xaa\x7f\x33\x2f\x35\x0d\x23\x1f\xd8\x7e\x14\x56\xf0\xf8\x37\xb5\x6d\x37\x6f\xbe\xd5\x2e\xd6\xb5\x5b\xe6\xa8\xa2\x2e\x79\xbc\x1a\x1a\xbb\xae\x46\xbe\x9d\xf8\x4a\x3c\x91\xb3\xca\xa6\xff\xb1\xe4\x04\xb8\xc7\xab\x38\xb7\xfe\x14\xf9\x17\x4d\xc7\xf6\x89\xb6\x4e\x72\x7d\xcc\x68\x0b\xf5\xbd\xd6\xd1\xa7\xc0\x56\xf9\xeb\x41\x19\x2e\x9a\xc5\x4b\x49\xad\xbe\xfa\x84\x47\x58\xd1\x0d\x53\xcc\x46\x6b\xee\x60\xe5\x45\xd7\xfa\x9b\x86\x4f\x8c\x45\x2d\x34\x8a\x8c\x98\xac\x26\x09\x4c\xd9\x11\xa0\x1e\x0a\x42\xa2\x19\x7b\xfc\x08\xa6\xa9\x7e\xc2\xd3\x45\x4c\xe0\x17\xfa\x97\x3a\xfc\x49\x7c\x81\x16\xd9\x5c\x96\x0a\x7e\xa2\xe4\x3a\x7d\x13\x4f\x12\x7b\x54\x0d\xca\xd1\x4f\xd1\x69\x26\x54\xc8\xb6\x71\x82\xe4\x0b\x60\x4f\xfd\x88\x27\xa5\xa7\x5f\xa9\xd2\x2b\x56\x49\xd5\x59\xb6\x45\xd4\x05\xd8\x1c\xb6\x09\xaa\x29\x28\x4e\xc5\xb6\x77\x34\x2a\xa6\xbb\xd3\x81\x6c\x38\x15\xac\xeb\xeb\x78\xe2\xa3\x6e\x89\x0c\x70\x16\xa1\x1e\xcb\xdb\x30\x09\x7d\xa8\x41\xc8\x2b\x1e\x79\x8a\xa2\xb9\xb5\x19\xa3\xec\xfc\xf9\xe5\x5b\xeb\x67\x16\xd1\xec\xae\xe5\x91\x5b\x45\x38\x1e\x35\x30\xb2\x2b\x2e\x02\xc3\x9c\xd4\xfd\x2a\xd8\xf0\xbc\xd4\x5d\xa1\x2b\x3d\x77\x56\x5c\xa0\xda\x5d\xc9\xbd\x67\x56\x84\xc8\xc8\xb6\x91\x81\x83\xf0\x1b\xfa\xc7\x7f\x47\x91\x75\x4e\x97\x10\x12\x64\x41\xeb\xd7\x5f\xdf\xbc\xb2\xc2\x09\x8f\x2c\x62\xec\x8f\x15\xa6\x56\x84\x26\xc4\x62\xea\xbd\x7e\x43\x57\x3b\x52\x9e\x52\xf1\xf5\xce\xfd\xc2\x31\x9c\x33\xd6\x3e\x9c\x87\x04\x46\xe1\x7f\x90\x64\xa6\x19\x27\xae\xd8\x6f\x88\x31\xa4\x4c\x72\x8f\x60\xe8\x5f\xf4\xe4\x4f\x04\x19\x53\xcf\x79\x77\xee\xc7\x22\xd8\xf2\x5e\x98\xf6\x18\x0d\xea\x71\xd5\x40\x18\x5f\x26\x62\xd7\x17\xce\xe8\x9d\x19\xed\x26\x0e\x79\xa7\x5c\xf7\xd7\x66\xb7\xe7\x6f\xa2\x57\x8b\x4f\x47\x7f\xa9\x65\xb7\xeb\xc1\x38\xd6\x32\xd5\x47\x0d\xa6\xe3\xe3\xb5\x3c\xf5\x93\x0e\x3c\xb5\x5d\xf2\x04\x7c\x0a\xbe\xeb\xe8\x20\x5c\x71\xf8\xe3\x54\x20\x39\x3f\xaf\xf5\xf5\x5b\xcf\x3f\x35\xf0\x37\x6f\x13\x1f\x4a\x6e\xbf\xca\xcb\x14\x36\xa6\xf6\x8c\xca\xe3\xf5\x8c\x0a\xab\x6a\x9c\x7c\x69\xe6\x55\x9a\xe8\xd9\x29\x4a\x09\x0e\x7d\xc2\x89\x08\x4f\x1e\x44\x12\x0b\x5a\x11\x1d\x87\x86\x4a\xd1\x88\x90\x51\x0f\x9a\x61\xd2\x2e\x36\x29\x32\x91\xd0\x39\x22\x56\x8a\x88\x15\xc6\x4c\x01\x73\x0a\x27\xc4\x4a\x49\x82\x91\x95\x4c\xd8\x13\xde\xf4\xab\x97\x0c\x23\x23\x48\x78\x66\xa1\x4b\x84\xd9\x97\x04\xc3\x38\x9d\x85\x84\x14\x79\x36\x24\xba\xc6\xab\x97\x3c\xef\xd0\x3c\xa2\xd7\x20\x7f\x0f\xe3\x85\x95\x90\x29\xc2\xd6\xab\x97\x55\x7a\xd8\x89\x12\xae\xbb\x4d\x2c\x06\x29\x00\x09\xea\x25\x4c\x10\x82\x75\xfb\xa6\x69\x1d\x34\x01\xca\x72\x3e\x88\xef\xeb\x2e\x5c\x59\x01\x6d\x11\x62\x04\x8b\x9d\x57\xce\x40\xc3\x36\x93\xbc\x8b\x5a\xed\xa5\x22\xbc\xf4\xc9\xda\x94\x34\x35\xf7\x75\xf9\x67\x99\x7e\x1c\x83\x23\x2e\x8b\xa5\x95\x89\xa9\x37\xdb\x9c\xd6\x2a\x2f\x6d\x0d\x0b\x88\x7b\x85\x68\xcc\x6c\x41\xa0\x24\x16\x90\x01\x73\x5b\x00\x03\x29\xd3\xe5\x0e\x88\x17\xbd\xd9\xbf\xe7\xff\x3c\xe3\xff\xfc\x20\x40\x86\x34\x1f\x8a\x3a\x58\xa1\x56\x33\x66\xa0\xc8\xad\x9f\xb4\x4a\xc2\xce\xd2\xbc\x89\x2c\x6d\xf7\x60\xe6\x34\x40\xed\xb5\x93\xb7\x92\x21\xe1\x34\xb9\xcc\x79\xc8\xf8\x35\x8d\xc5\x50\x11\x83\x4d\x51\x6f\x3b\x60\x2c\x76\xc2\x51\xdc\x01\x40\xb0\xcb\x7f\x1f\xfe\xbf\xbf\xa0\x5f\x1b\xe2\x08\x57\x03\x82\x09\x20\xb0\xb6\xf8\x5f\xc5\xed\xff\xb8\x41\xa9\x72\x5c\xf5\xdd\xd8\xcc\xfa\xc7\x5a\xd6\x3c\xcb\x25\xb6\x96\xc6\xc2\x6d\x12\x34\xbc\xae\xda\x42\x1f\xdb\x31\x00\x77\x0d\x34\xd2\xe3\xca\x31\x7d\x0a\xb4\x6c\x11\x4f\x34\xff\x28\x22\xd1\x03\x6e\x11\x19\xe9\x71\xc5\x8c\x5b\x4f\x51\x8c\xa5\x05\x52\xc5\x60\xe0\x27\x55\x5f\x16\x18\x3f\xdd\x01\x92\x8e\x46\xf5\x00\x49\x87\xbb\x06\x48\x7a\x5c\x52\x6e\xb5\x56\x43\xef\x1e\x21\xe9\xb1\xa6\xbd\xd9\x10\x21\x49\x9f\x36\x1d\x21\x69\xf3\x69\x5b\x89\x90\x54\x96\x69\xd7\x83\x24\x19\xeb\xaa\x81\x24\xd5\x74\x70\x0d\x48\x52\xf5\x64\x99\x48\x5d\xcf\x2a\xce\xaf\x4f\x34\x84\xa4\xf2\xfa\x0a\xa0\x8d\x62\x9d\x01\x87\xd9\xbb\x5b\x88\x49\x0c\x60\xe4\x1b\x84\x4c\x3a\x1a\x95\x40\x29\x4c\xc8\xa4\x9a\xcd\xb1\x01\x64\x52\x33\x3c\x45\x8b\xc9\xe9\x06\x99\x54\x9d\x9a\x5b\x80\xa8\x58\x3d\xfa\x3b\x01\x43\x51\x0e\x97\x12\x47\xaf\xe0\x08\x0b\xc4\x09\x76\x1c\x0f\xc2\xe2\x62\x66\xf0\x11\xc2\x96\x5b\x62\x16\xc5\xd1\xdd\x9c\x35\xdc\x12\x5b\x42\xd4\x73\x17\xc0\x25\xfe\xf5\xa7\x2f\x87\xd1\xe4\xbb\x3f\xee\x18\x5c\xa2\xc8\x35\xbd\x21\x63\xb9\x12\x8c\xe2\xe8\xf0\x26\xd0\x28\x5a\x23\xb7\x56\xf0\x5a\x1f\x7f\x7d\x40\x8a\xa3\xa3\xba\xca\xef\x3c\x22\x85\x6e\xd4\x3f\x92\xa0\x1a\x0f\x90\x14\xdf\x56\x88\xd6\xd3\xba\xad\xf9\x80\x49\x71\xef\x30\x29\x7e\xd0\x83\x66\xca\xd2\xa7\x01\x4a\x51\x02\xb6\xfb\xa6\x50\x29\x24\x20\xda\x2d\xa2\x52\x9c\x71\x7e\xe5\xf6\x61\x29\xda\x37\x7c\xcb\xb8\x14\x1b\x07\x9b\x19\x17\xce\x68\x13\x5c\x8a\x6a\x3d\xdf\x6b\x61\x26\x27\xcc\x2d\x3b\xc1\x1c\xa8\x81\xd9\xbd\xca\x4f\xbf\xb2\x7c\x98\xa5\x42\x38\x3c\x79\xf9\x96\x8b\xb5\x1b\x08\x88\x37\x2c\x1e\x36\x29\x07\xca\x72\xe0\x53\x53\x0e\xa4\xe7\xd5\xce\x52\x11\xd7\xf4\x5d\x55\x0a\x5c\x85\x77\x5a\x23\x02\x3d\x5e\x19\xe4\x73\x43\xf2\x9f\x24\x41\xeb\x70\x36\xed\x91\x44\xf8\x38\x3a\x6a\x16\x53\x57\x21\x7b\x6c\x2a\x7d\x97\x66\xfd\x87\x1a\x55\x0c\xdf\xa4\x6b\xf0\x65\x57\x76\x62\x1d\x2e\x65\x79\xe9\xdb\x2a\x84\x56\x2d\xf8\x0f\xe0\xe8\x90\xce\xe6\x2e\xa5\xde\x2a\xb9\x60\x0e\xf4\x41\x26\x8c\x9e\xf5\x9a\x43\xb6\x7b\x77\xa1\x39\x5c\x3b\x79\xb6\x1f\x25\x71\xf3\x89\x79\x25\xfb\xb9\xad\xea\x6f\xb7\xf4\x7f\x63\x5c\x22\x7d\x21\x1e\x17\x53\xbd\xb9\xef\xa6\xe8\xac\x14\x77\xf5\x60\x4c\xda\xd1\x90\x79\xdc\x6d\xae\x05\xa2\xfd\x7b\x06\x86\xf6\x9f\x0b\x86\x66\xb4\x71\x28\xa1\xd5\x18\x6f\xf7\x2b\xd7\xfd\xae\x72\x17\xdb\x20\x16\x48\x76\xfe\x27\x19\x5a\xb6\x9b\xae\xaf\x47\x20\xfe\x0d\xf1\x20\xa9\x6c\x7e\x8e\xa9\xd0\x62\x25\x19\x66\xf7\x5d\xba\x48\x09\x9a\x59\xe3\x85\x05\x25\x6a\x33\xbd\x1b\x49\x62\xc9\xa0\x73\x94\x31\x89\x50\xcf\x68\x17\xfa\x53\x8e\x10\x0d\x99\x03\x44\xcc\x32\x77\x2c\x98\x33\x03\xe3\x73\xfb\xd6\x2b\x1e\xbd\x75\x95\x60\xbc\x00\x16\xba\x44\xb4\x60\x92\x9d\x4f\x75\x2f\x8d\x2b\x98\x5a\x57\x38\x24\x04\xc5\xd2\x95\x22\x89\x02\x2b\x25\x0b\x01\x31\x1d\xa6\x56\x4a\xc2\x28\xe2\x7e\x09\x7d\xeb\xcf\xc9\x15\xba\x44\x18\x58\x57\xc8\x0a\x12\x0b\x23\x3f\x99\xcd\x50\x1c\x88\x61\x89\xce\x63\x56\x8b\x70\xd5\x10\x0e\x16\x31\xba\xe2\xf5\xf6\xad\xb7\x08\xe2\xd8\xe2\x79\x4e\xd8\x34\xd8\xab\x5d\x19\x8f\xdb\xba\x32\xf6\x66\xe1\x39\x86\x04\xf5\xc4\x24\x98\xa1\x3e\x75\x0e\x8a\x6b\x23\x80\xc4\x92\x06\x7a\x4c\x94\xbe\x27\xfb\xb7\x1a\xe7\xf3\x6c\x53\x02\xbf\x19\x5f\x79\x57\xf0\xce\x74\x5e\xf5\x2e\x40\x9e\x99\x1c\xb5\xfe\xb3\x2d\xfa\x59\x89\xfb\x6e\x1e\xce\xda\xb1\x1a\x13\x75\x26\x2f\xee\xaf\x3f\x47\x9f\x90\x8f\x11\x11\x33\xc4\xfb\xb5\x7a\x72\x9e\x01\x3b\x65\xdf\x98\xcd\xb5\xa1\xcd\xff\x3f\x7b\x7f\xb6\xde\xb6\x91\xad\x8f\xc3\xe7\xba\x0a\x18\xbf\x6c\x35\xd0\x06\x29\x91\x1a\xcd\x34\xe2\xc8\xb2\xd2\x51\xdb\x96\xbd\x2d\x25\x9d\x6c\x35\x1f\x07\x22\x8a\x22\x22\x10\x60\x0a\x45\xc9\x6a\x89\xf7\xf2\x5d\xcb\x77\x65\xff\xa7\x26\xa0\x0a\x28\x8c\x04\x25\x39\x71\x0e\x62\x8a\xc4\x50\xe3\xaa\x35\xbc\xeb\x5d\xc9\xb8\x0a\x6f\xad\x7b\x36\x28\x23\x74\x9b\x99\xbc\x81\x2c\x62\x31\xe7\xcc\x4e\x93\x42\x64\x36\x5f\xc3\xbc\x0c\xf5\xcc\x9f\x8e\xc2\x59\xd9\x61\x59\x63\xe6\x7b\x56\xba\x24\x05\x1e\x5d\x86\x4b\x1c\x5a\xba\xcf\xd0\x30\x97\x7e\x78\xe1\xf8\x62\x4c\xb7\xca\xe8\x56\xe5\x21\x6f\x8b\xea\x2f\x1f\x3b\xf1\x97\x67\xfb\x13\x38\xfe\xf2\xc2\x55\x14\x83\x1d\x07\xb8\x10\xdb\xcb\x71\x8e\x22\x0d\x76\x25\xb9\x92\x2b\xe3\x0a\x14\x62\x54\x2d\x84\xba\x9e\x04\x5b\x60\xef\xe3\x87\x5f\x67\xff\x1a\xfd\xd0\x22\x5b\x60\xac\xf8\x3f\x89\x00\x56\xbf\x6a\xe9\x41\x5d\x99\x83\xf3\x57\xe6\x09\xdc\x4d\x07\x02\xbf\xf2\x04\xfe\xa9\x82\x50\x7d\x51\x89\x10\x17\x7d\x3e\x4f\x60\x7f\x93\x81\x7b\x7a\x2f\x86\x9c\xee\xeb\xcc\x9b\x82\x81\x0b\x14\x74\x81\x5b\xc3\x0c\x3f\x55\x3f\xb9\xbf\x19\x5d\xa0\xd0\x4c\x5e\xed\x36\x9f\x35\xb0\x52\x9f\x62\x7a\x40\x01\x53\xd8\x13\xbf\x14\x29\x01\x15\xf4\x81\x45\xbd\xdc\xaf\xc9\x07\x98\xd7\xd5\x2a\x9c\x87\xd2\x76\x95\x2a\x48\xaa\x38\x0f\x85\x2a\x78\x19\xce\xc3\xed\x5a\x7d\xdc\x69\xc4\x79\xb8\xfd\x95\xf3\x70\x85\x9c\x87\x3c\xd8\xf8\x45\x91\x1e\xa6\xc1\xb3\x45\xa0\xde\x3a\x46\x4b\x15\xef\x8e\x1c\xc2\xfd\xcb\x10\x1f\xee\x2a\x42\x76\xab\x20\x3e\xa4\xaa\xfd\x92\xcc\x87\xbd\x6a\xf2\xe8\xcf\xcd\x7c\xa8\x9e\x3b\x5e\xe2\xa4\x41\x19\x6f\xa9\xa1\xed\xba\xec\x13\x69\xb5\xd7\x96\xbb\xbe\x91\xab\xbe\x06\x5f\x91\xd8\xe0\x16\x5c\xf4\x4a\xf7\x7c\xae\x27\xfe\x94\x7a\xe2\x51\x48\x3d\xf1\xb4\xb4\x36\x96\x2c\x84\x07\x6b\xac\x70\xc4\x13\xde\xb6\x91\x13\x10\x72\x34\x5a\x3b\x5b\xf4\xc1\x13\x82\xa8\x69\x08\x81\xe6\x5c\x84\x73\x44\x1f\x48\x54\x88\x88\xe4\x25\x4e\xf0\x4b\x42\xde\x10\x8d\xda\xdd\xdc\x6f\x5e\xcd\x37\xbe\xf9\x94\x7d\xe3\xcb\xae\x88\xec\x65\x7b\xb5\x70\xbd\xc2\xce\x6a\x89\xa2\x94\x39\x3f\x8a\x38\x4a\x7b\x4f\x9b\xa3\x94\x1e\x05\x39\xc5\x38\x99\x6b\xe7\xfb\x30\x98\x47\x40\xa2\x2d\x25\x9f\xfd\xf0\x32\x24\x0c\x59\xb4\x86\x6d\x90\xc7\x66\x2a\xab\x7c\xf3\x88\xf8\x2e\x10\x07\xee\x48\xd8\xad\x79\x04\x32\x76\xcb\x8b\x2c\x0d\xaa\xfc\x1b\x6b\x87\xf2\x37\xde\xae\xaf\xec\xa9\x4f\x97\x3d\x75\x19\xb5\xa7\x09\xf3\x26\x93\xa8\x2d\xd3\xa7\xe2\x23\x83\x2a\xfa\x4f\x99\xdf\x72\xb5\x1c\xaa\x8f\x34\x93\xad\x91\xa8\xb2\xe7\x3d\x38\x8b\x2a\x7d\x6f\xb5\x66\xb2\x26\x3e\x1e\x8f\x6a\x0d\x59\xf9\xa5\xf1\x4d\xae\x30\xea\xa2\x4e\x1f\xca\xe4\x95\xd3\xe8\x4a\x7d\x06\xca\x6c\xb4\x26\xc5\x49\xb9\x02\x36\x4a\xee\xf1\x6b\x81\x94\x52\x0c\xc2\x34\x0c\xe6\x78\xc4\x70\xf3\xc2\x27\x92\xb6\x04\xf6\x7b\xd1\xab\x57\x7b\x55\xd3\x96\x58\x72\x12\x04\x8e\xfb\x3e\xf0\x6f\x6b\x46\x6b\x6a\x68\x97\xd5\x83\x35\x7b\xe5\xb1\x9a\x78\xcc\xd3\x09\x47\x5b\x8f\x9f\x6f\xb4\xab\x7a\x76\xdc\xe0\x4f\x4f\x34\xf1\x28\x75\x94\x3f\x5c\x7c\xa4\x82\xf0\x7b\x80\x44\x9c\x4d\xa1\x3f\x49\xe2\x4c\x36\xb3\x5f\xa0\x57\x8d\xa7\x54\x1f\xa6\x73\xdb\xf7\x1b\x25\x3b\xab\x9d\xd8\x75\x95\xfb\x2a\xba\xd8\xca\x53\x67\xf4\xaa\x89\x33\x3d\xe6\x75\x4d\x84\x68\x4e\xde\xcc\xb1\x78\xc1\x9f\x36\x77\x46\x46\xf2\x6c\x37\xa1\xae\x90\x53\x71\xb6\x92\x12\x97\x8d\xf5\xde\xaa\xd1\x06\x92\x17\x73\x9c\xec\x8a\x16\x92\x72\xaa\xbe\xfa\x04\xdc\xd4\x7c\xb3\x12\x98\xd5\x56\x73\x7e\xf6\x9a\xb4\xe7\x21\xb3\x84\x96\x2b\xb4\xc3\x7c\x38\xc9\x29\xcc\x00\x4c\xf4\x25\x58\xba\x84\x58\x97\x60\x2e\xab\x84\x85\x29\x21\x5e\x92\xf8\x98\xf0\xd3\x38\xf9\x46\xec\xc1\x4a\xb2\xf4\x85\x13\x25\x27\x35\xb2\xe0\x6c\x4e\x1d\xea\x42\xac\x87\xb0\xaf\x91\x9f\xce\x42\xf2\x68\x41\x08\x75\x39\x2a\x27\xab\x56\xe4\xa0\x3e\xb2\xe0\x0d\x85\xc7\x67\x25\x18\xae\x1a\xbc\xf5\x6d\x20\xb7\xb2\x14\x99\x63\xc9\x40\x90\x08\x2e\x0b\x6c\x01\xa2\x4c\x50\x4b\x40\x62\xaf\xaa\xad\xc7\xa7\xf4\xef\xe5\xb5\xf8\x27\x81\xc8\xda\xba\xf9\xd7\xdb\x53\x67\x82\x8a\xd5\x78\x67\xe6\x15\xc1\xb1\x88\xa2\x02\xd3\xb8\x2c\xe2\x74\xad\x89\xca\xea\xaf\x42\xd1\x7f\x51\x43\xd1\x17\x80\x59\xfb\x7f\x65\x5c\xd6\x5f\x59\x4b\xef\xa7\x72\xc5\xca\x41\x3d\xac\x06\x2a\x03\xf0\x1c\x90\x1d\x50\xbb\xa4\x69\x45\xf4\x4e\x1a\xb8\x23\x34\x90\xba\xd2\x0a\x41\x4a\x95\xba\x13\xa3\x75\xf6\x54\x65\x4b\xf7\x4a\x31\x4a\x2d\x14\x6e\x55\x62\x94\xf2\x1b\x5f\x0e\x51\xfa\x6b\x97\x65\x5d\x81\x75\xd7\xba\x91\xd2\x44\x03\x16\xcd\xb5\x6c\xfe\x89\x4c\xaa\xdb\x4b\x95\x47\x48\xb9\xee\x25\x50\xbf\x86\x42\xe4\x14\x25\xae\x16\xfd\x90\x22\xbc\xd5\xc7\x21\x0d\x08\x12\xd4\x4c\x9a\x3f\xf9\xcb\x01\x46\xa9\x6c\xe7\x96\xc1\x51\x5b\x19\x33\xfd\x4f\x8e\x8d\x7a\x14\x78\x54\x62\x4f\xfd\x49\x8a\xc3\x3e\x31\xb3\x95\xa8\xa4\x5c\x27\xe6\xc3\xea\x05\x57\x04\x73\xc0\x00\x18\x72\x81\xd4\x02\x3d\x15\x6b\xa7\x89\xb6\x9a\x4c\xdd\x93\xd1\x53\x05\xa7\x33\x2d\x4a\x52\x27\xb5\x22\x35\x72\x2b\x98\x93\xf4\xbc\x2c\x0f\x8a\x91\xba\xbb\x8a\xe2\xbd\x5a\x06\x1b\xd6\x1a\x38\xa6\x48\x18\xa8\x41\x32\x72\x1d\xdf\xbd\x34\xf2\x65\x57\xc0\xae\x34\xeb\x69\xba\xbf\xfb\xb8\xbf\xf3\x08\x85\xd3\x8f\x20\x0a\xe7\x70\x04\x4e\x58\x82\xcf\x30\x37\x37\xa3\xfc\x89\x67\x34\x61\xb7\xfa\x23\xca\xb2\x91\xcb\xae\xae\x94\x9a\xbf\xd7\x12\xc6\x46\x7b\x74\x9c\x8d\xf6\x10\x58\x1b\xed\x09\xe2\x6d\x34\x8a\xd4\x48\x34\x96\x56\x70\x37\x9a\x8c\xbd\x49\xd4\xdc\x9a\x98\x08\xad\x0c\x17\xa1\xd5\x5d\xbc\x15\x27\x7a\x19\x1c\x8e\xf6\xf4\xb0\x38\xd9\x59\x6e\x0d\x93\x23\x3c\x73\x25\xb8\x1c\xad\x04\x9b\x93\xbc\xbf\x52\x93\xc5\xe6\xd6\xc7\xe8\x3c\xda\x7a\x5c\xb2\xee\xb1\x96\x0d\x36\xd6\xac\x7d\xac\x95\x5b\x3f\xbd\x92\x22\x66\x71\x01\x64\x21\x24\x3c\xac\x04\x5d\xae\x59\x01\xd9\xcb\x06\x41\x4b\x86\xa5\x5a\x5d\xc3\x86\xe5\x90\x1b\x0d\xdd\xdb\xa3\x83\x8f\x27\x99\x01\x24\x2a\xcf\x25\x40\xc8\x0b\x2e\x29\x35\x03\x70\xf1\xd7\x01\x18\xa1\x96\xab\x24\x13\x2c\x7a\x1b\xe3\x57\x73\x3b\xd4\x54\x45\x96\x80\xc5\xed\x7d\x19\xb8\xb8\x47\x87\xc6\x2d\x59\x8c\x79\x4c\x2a\x09\x76\x82\xf9\xf4\x82\x06\x59\x52\xd0\x38\x09\xed\x06\xc1\x18\x82\x68\xd2\xe1\x91\x9b\x6c\xa9\xe6\x46\x50\xb8\xc4\xb3\xbc\x1c\x18\x2e\x1d\xfe\x6a\x18\x45\xbb\xba\x7e\x12\x18\xb8\xdd\x93\xf0\xc3\xcd\x2f\xfd\xdd\xe2\xe0\x59\x04\xf0\x9a\x20\x75\x83\xf0\xea\x00\x01\x7a\x03\x6e\x6b\x51\x7a\xc7\x4c\xde\xf8\x22\x3c\x0b\x09\xb2\x86\x60\xbe\x5c\xf0\xb9\x66\xa0\xad\xbf\x55\x23\xbe\x94\xe8\x5c\x24\x69\x59\xdf\xd0\x6b\xf8\xa4\x53\x37\x2b\x7d\xf3\x49\xa9\x5c\x4b\x2a\x36\xbd\x69\x75\x12\xa7\x6d\x6f\x4f\xe5\xc5\xb8\x02\xb7\xdc\x14\xed\x2b\xf9\x66\x94\xbf\xb5\x1e\x62\xac\xc0\xfb\x70\x75\xbd\xf1\xcd\xdd\x15\xb8\x5d\x48\xa5\xed\xca\x51\x84\xa4\x87\xab\x83\x11\x8a\x25\x81\xfa\xbc\x70\x4c\x7f\x2b\x29\xe2\x12\x1f\x9f\x7a\xf6\x51\x74\xf4\x9f\x24\xc4\xb0\x66\xe8\x72\xfb\xcf\x11\xba\xec\xed\xe7\x82\x46\x96\x63\xfa\xde\x6e\x18\x90\x5a\x36\x1c\x55\x7d\xc8\x1a\xa3\x0d\xf5\x32\xa4\xa1\x9e\x45\x19\xe6\xf8\x2f\x1d\xd9\xb1\x88\xcf\x70\x51\x4a\xf4\x78\x7c\xe3\xea\xba\xcb\xa5\x76\x9d\x0d\x23\xaa\x63\x6f\xc0\xad\xb6\xa1\xfd\x8c\x0f\xb0\xa8\x99\xf6\x95\xc3\x01\xb6\x97\x8d\x6b\xc7\x6e\xf9\x26\x62\x34\xe7\x00\x88\xc5\x79\x3b\x8f\x96\xce\x93\x9d\xec\x1f\x22\x3f\x6d\x9d\x17\x29\xc6\x84\x47\x0f\x7b\xbd\x56\x62\x33\x95\xd6\x57\x93\x15\x36\x0e\x7d\x7a\x62\xc9\xe4\x44\x7a\xba\x62\x85\x74\xe0\x8a\xb1\x08\x4e\xe8\xdc\x13\x4f\x52\x81\xe6\x57\xcf\xa9\xbf\xdf\xd4\xdf\x5d\xc6\xa5\x5c\x23\x85\xb1\x3e\x4f\x6e\xaf\x67\x31\xb6\xe9\xcc\x2f\x9b\x35\xb3\x70\x15\x16\x5d\x6b\x07\x43\xcb\x5c\x1f\xea\x6d\xdf\xe7\xb0\xde\x7d\xeb\x5c\x7f\xc3\x35\xac\x94\x48\x90\x7e\xc3\xdb\xb8\x6c\x77\x55\x74\xba\xe9\x15\x42\xff\x96\xfe\x3d\x04\x81\x4b\x0d\x72\x0a\x08\x16\xe4\xa1\x6e\x11\x2b\xab\x28\x1b\x56\x44\x03\xec\x97\x76\xa8\x31\xb2\xb8\x7e\x5f\x4e\xc0\x8d\xdc\x15\x04\xe7\x99\x9e\x54\xf1\xb8\xad\x72\x11\xd6\x0c\xc5\x29\xd6\x19\x1d\xed\x53\x10\x45\xdc\x8b\x55\x47\x68\xea\xc5\xf4\x11\x37\x0e\x0c\xbc\xa0\x36\xf5\x7b\x32\x59\x2f\xda\xa0\x63\xc8\xf3\x60\x67\xa4\xde\x26\xb6\xdc\x60\x88\x1b\x2c\xb0\x36\xd0\x3e\x48\x9c\x02\xda\xd9\xc4\x8b\xb4\x37\x3f\x6b\x13\x27\xa2\xe5\xa6\xaf\xb4\x88\x0e\x61\x57\xfb\x95\xd1\x23\x03\xb2\x19\x7e\xfe\xcf\xdf\x22\xed\xc6\x43\x13\xe9\xaa\xc8\xd2\x2e\xe6\x48\xbb\x01\x02\x93\xb1\x1b\x7a\xc1\xa5\x16\x85\xf4\xea\x91\x03\x01\x71\x03\x07\x21\x4a\x7e\x72\x90\xe6\xf8\x7e\x57\x3b\x46\xd4\x35\x0c\x2e\x1d\xe4\x5d\x03\xff\x56\xf3\xa6\x33\x67\x44\x99\x1e\xf0\xc9\x74\x0d\xb4\x20\x74\x81\xe6\x21\xfc\x7e\x27\x8a\xc2\x91\x47\xca\x4a\xe3\x87\x77\xb5\x53\x00\xb4\x0b\xe0\x87\x37\xda\x38\x84\x94\x29\xc2\x05\xc8\xf1\xfc\x48\x0b\x29\x1d\xf3\x5b\xdc\x5a\xb6\x2c\x08\x67\x44\x04\x40\x99\xef\x6f\xa7\xd8\x6b\xea\x05\x08\xc0\xc0\xf1\xa3\x0d\x3e\x0a\x2d\x92\x41\x84\x73\xa8\xe5\x12\x42\x24\xbd\xf4\x02\xea\xc4\xc1\x33\x55\x05\x48\xd4\x10\xec\xf0\xa2\xf2\x41\x95\x36\x93\x98\x67\xf4\xea\x5a\x86\xd8\xd7\x83\xd5\xd3\x1f\x88\x60\x60\x7b\xbc\xc0\xfa\x5c\x12\x5a\x2f\x1d\x57\xfd\x1c\x55\x32\x41\xa7\xf4\x72\x14\x6f\xe5\x15\x89\xe2\x94\x3d\xd6\xf8\x97\x29\x89\xac\x96\x72\x8a\xd3\x34\x2d\xf2\x9a\x49\x3e\xe2\x91\xa0\xc1\x71\xc9\x23\x41\xa9\x2a\xb2\x3c\x7a\xe5\xde\x09\xbe\x37\xf0\xfc\x77\xae\xc0\x6d\xa6\xc2\xda\x63\x26\x3c\x66\x86\x6e\x98\x99\xe1\xed\x2c\xfe\x68\xab\x04\x7f\xc4\xcd\xd9\xbc\x1c\x8a\x9c\x38\x73\x9e\x42\x7e\xde\x8f\x85\xc6\x04\xf8\x33\x76\xfa\x50\x0d\x9d\x14\x89\xa4\x62\x48\xcf\x71\x82\x35\x93\x62\xff\x8f\xfd\xd5\x71\x41\xe4\x5d\x06\xf1\x0d\x4c\x6b\xa8\x77\x62\x89\xc2\xb7\xbe\x30\x2a\x34\x27\x69\x89\xdc\x9c\x0c\xb1\xea\x4c\x9d\x54\x27\xa1\x2d\x54\x4b\x2a\x19\x57\x15\xa3\x70\xb6\x09\x6e\x87\xb0\xfa\x3b\x1c\xaa\xd2\x2c\x77\xab\x5e\xec\xa1\x41\xaa\x0c\xa1\x4a\xb6\xf6\x97\x8e\x4d\x6c\x97\xa5\xf4\x28\x3b\x98\x63\x02\x55\x89\x63\xd0\xdd\x99\x8a\x47\xa4\xa2\x1a\x34\x1c\x31\x0a\x83\x91\x83\x78\x10\xc3\x07\x63\xd4\x41\xd0\x23\x75\x45\x5d\x92\x71\xef\x53\x77\xb7\x33\x9b\x01\x92\x82\xff\x7b\xe8\xc9\x31\x11\x12\xf8\xe8\x20\xe8\x8c\xae\x3a\x0e\x84\xce\x2d\x7e\xb6\x43\xe2\x28\x3c\x76\xe1\x03\x39\x82\x41\x1e\x94\x24\x63\xd1\xe7\x90\x9f\xa4\xe8\x08\x82\x5e\x70\xd9\x01\x81\x1b\x75\xb0\xd2\x52\x2f\xbc\xc1\xe2\x12\xcd\xa3\x1a\x4f\x22\x27\xe8\xcd\xbf\x22\x80\xf6\xc2\x5f\x9a\xb2\x34\x33\x25\xa0\x2c\x3f\x48\x11\xc4\xb0\x74\x67\x4c\xaf\x8c\x43\x1e\xe9\x0f\x35\xe3\x1c\xdb\xcd\x12\x8a\x6a\x9c\xad\x9b\xcd\x5c\xff\x2f\x9e\x80\xef\xbf\xaf\xac\x0b\xc9\x42\x2a\x71\x98\x47\x75\xdc\xee\x64\x8f\xdb\x38\x76\xb0\x5b\xfb\xbc\xad\x11\x67\xa9\x34\xda\xd1\x9f\x64\xb8\xbf\xc0\x38\xca\x83\xa4\x80\x49\x2d\x2b\xae\x01\x17\x31\x70\x47\xa3\x3c\xb0\x61\x26\x7f\xa8\x80\x91\x7c\x7b\xc9\xd2\xb8\x59\xb7\x06\x2b\xc6\x86\xff\x1e\x7b\x23\x5a\x6f\x70\x1e\x73\x4f\xd2\x3a\x62\x7d\x21\x65\x38\x42\xde\xe8\x8a\xac\x60\xaa\xfe\x0d\xdb\xf1\x8b\xa4\x1c\x59\xdb\xed\xd5\xc2\x2a\x75\x7f\x3c\xcb\xb1\x8f\x2b\xaf\x11\x65\xeb\x5b\x29\x86\x55\xc5\xbd\xa3\x11\xe8\x1d\xf5\xd9\x84\x50\xa3\xe7\xa2\x16\x8e\x69\x4d\xaa\x37\x3f\x93\x82\x54\x54\x5f\x75\xb3\x95\x95\xda\xe8\xbb\x02\x92\x52\xa6\x17\x2a\x7c\x9a\x4d\xb6\xc3\xd6\x93\xdf\x0e\x8d\x78\x6b\x52\xcb\x69\xeb\x21\x36\xc3\x11\x6e\x68\xfb\x5b\x61\xeb\xa1\xb7\xc2\xaf\xe1\x5c\x0b\x42\xcd\x0f\x83\x4b\x00\xd3\xe0\x52\xb6\x25\x1e\x6c\x1b\x6c\xd5\xdf\x06\x5f\xa0\xb0\xee\x7f\xd1\xc2\xba\xff\xd0\x2b\xf4\x20\xd0\x88\x54\x20\x82\x19\x02\x34\x87\x01\x70\xb5\x9b\x89\xe7\x47\x48\xc3\x9a\x29\x05\x79\x7b\x91\x86\x75\x55\x4b\x63\x68\x3b\xb2\x7e\xe1\xad\xe6\x5c\x3a\x5e\xf0\x60\x2b\x58\x5d\x1b\xb7\xb6\x23\x23\xf7\xf9\xbd\x87\x4e\xbb\x7f\x91\x42\x1e\x94\x27\xaa\xf7\x79\xd2\x76\x7f\x7f\x68\xe9\x6f\xbc\xc0\x55\x66\xdd\x17\x59\x2b\x0d\xb3\xee\xc5\xf6\x11\x9e\xc0\xfa\x6d\xe7\x2d\xd8\x4b\x73\xba\xd1\xef\x4a\x72\xec\x8b\xfa\xd4\x20\xc7\x9e\xa7\xa1\xf7\x77\x1b\x27\xa0\x6b\x2d\x64\x9f\xe7\x28\xdf\xc3\x24\xbd\xe3\x4d\xc6\x5c\x6a\xe2\x4f\x5c\x11\x6d\x99\x5e\x4e\x5a\xa6\x57\xa5\x2c\xdb\x8c\x03\x12\x0a\xaa\x32\x11\xfd\xa3\x2b\x88\xca\x92\x71\x94\xc1\x30\xdb\xb9\x7f\xf4\x28\xde\xb2\x9f\xe1\x17\x2c\x18\xf4\xa5\x0b\xfc\x35\x18\x8c\x2c\xac\x65\x2b\x0d\x6b\xe9\x67\xfb\x25\xa1\x5c\x18\x8c\x45\xc4\xb5\x54\xef\x72\x2e\xea\x45\x60\x19\xa0\x15\xb9\x15\x93\xa2\x2a\x77\x5d\x29\x74\xdf\xc0\x8f\xac\x42\xa5\x3c\x1e\xef\x9c\xd2\x78\xa8\xb8\x9f\x6b\x64\x6b\xe9\x15\x79\x23\x44\x88\x45\x1b\x04\x72\x95\xdf\x2c\xe2\xab\x64\x08\x4a\x4f\x19\xdb\x6c\xb0\x0b\x1b\x80\x45\x0a\x74\x14\xfd\xe9\x30\x5a\x34\xae\x3b\xd3\x57\xe1\x0e\x77\x57\xc0\xac\x70\x75\xbd\x2c\xa5\xc2\x56\xa5\x13\x7e\xeb\x0b\xab\x3a\xd3\x98\x8b\x44\x9a\xb9\x7d\x81\x8c\xe4\xea\xba\x1e\x0b\xc9\xd2\x4a\x45\x0d\xa7\x45\x59\xfd\x12\x7a\x8e\x31\x78\xbd\x25\xb7\xa1\x7d\x9e\x93\x72\x33\xb6\x5a\x7b\x61\x18\xa2\xce\x2a\xd9\x58\x9e\x68\x09\xa4\xd4\x4e\xaf\x42\xee\x41\x65\x65\x0e\xcb\x47\xc5\x80\x51\xbd\xd8\x45\xfb\x51\x0b\x91\xe0\xe3\xea\x9a\xc5\x29\x08\xb1\x45\xbf\xf7\xe7\xe6\xf7\xc0\xbd\x2d\x22\xf6\x60\xf2\x74\x77\x59\x62\x8f\xfd\xd5\x12\x7b\x5c\x5d\xe7\x30\x7a\xc4\xe1\xd9\x14\xb7\xc7\x7e\x9a\xdb\x63\x67\x18\x93\x54\x88\x14\x1f\x05\xb4\x19\x35\x73\x4f\xc5\x91\xf8\x4a\x83\xd1\x36\x0d\xc6\x52\x5a\x4f\x53\x86\x84\x37\x1b\x3f\x6b\x33\xc7\x83\x2b\xa1\xc1\x78\x03\x6e\x37\x88\xce\xfe\xa5\xb0\x0e\xac\x9e\x05\xe3\x91\x27\xb9\x35\x16\x8c\xe4\x91\x2b\x23\xc1\xf8\x35\x9c\x73\x0a\x0c\xda\x8a\xe0\x36\x79\x6d\xa5\x86\x0a\x8d\xfc\x4a\x7d\xd1\x2a\xf5\x05\x81\xf0\x16\xc0\x1f\x9d\x4b\x10\xa0\x8d\xab\xeb\x15\x11\x5e\xbc\xd9\xf8\xb9\x74\x6a\x2a\xcc\x9e\x7a\xa0\xda\x65\xba\xc8\x8e\x54\x0d\xa6\x8b\xb6\x06\xf0\x2f\x44\x72\x91\xc7\xfa\x55\x39\xcd\xb2\x0a\x6b\x46\x85\x87\xd5\xf6\xff\x11\x86\x0b\x6b\xf7\x29\x70\x5c\x48\xac\xed\x14\x8e\x49\x90\x9f\x79\xdc\x17\x1c\xc2\x09\xc1\x35\x80\xa4\x32\xa3\x0b\x43\xac\xa2\x21\xe7\x0a\x94\xa2\x44\xd5\xb0\x50\xf2\x56\x02\x1b\xa5\xfc\x19\x15\x58\x33\xc4\x58\xae\x8a\x55\x3e\x56\xa4\xd3\x85\xa2\x6a\xd3\x62\x70\xe4\x67\x43\xe0\x68\x10\xba\xe0\x89\xf0\xc9\xef\x7c\x7c\xf5\xaf\x5f\x7e\xfc\xd1\x2f\xc1\x8e\x02\x86\x1d\x2d\x21\x96\x8f\xaf\x13\xac\xba\x7a\x00\xd0\xca\x56\x5a\x15\x08\xa8\xa0\x6b\xed\x97\x1b\xf1\xbc\xf1\x82\x5b\xf7\x31\xcd\xf8\x46\x60\xc2\x0a\x90\xcc\x0a\x23\x41\xd6\xe7\x97\x3d\x10\x8f\x8b\xaa\xdc\xfa\x93\xb0\x53\xa4\x38\xfb\xca\x83\xe4\x32\x2b\xfb\x29\x01\x98\xd5\x26\xd6\xaf\xc8\xc7\x9e\x0e\xf1\xef\x89\x60\x1d\x82\x6c\x2b\x22\xd6\xaf\xd4\x9d\xb8\x37\x82\x9b\xbf\xd7\x13\xbe\x5c\x82\x58\xbf\x24\x26\x50\x48\xac\x9f\xdf\x78\x25\xb1\xbe\x14\x52\x8e\x2b\xe1\x6f\xaa\xdb\x9c\xf4\x6f\x33\x43\xac\x5f\xaf\x87\x25\x44\xd2\x6a\x5e\xfd\x17\x22\xad\xfe\x96\x54\x76\xed\xd1\x50\x0e\x92\x0c\x78\xc0\x6c\x7f\x59\x1f\xaf\x54\xf0\x8a\x48\xee\x1a\xd4\xfa\x5b\x2a\x17\x84\x94\x48\x5f\x48\xad\x5f\xf4\xf5\x17\x1e\x84\x14\x37\xcd\x76\xab\x31\xc8\xb4\xe7\x17\x1f\xb7\x4f\x90\xda\x7d\x5b\x20\xc4\x7e\xa4\x38\x64\x0b\xa1\x9f\xe5\xe3\x0b\x78\x7a\xf4\x38\x2b\x51\x8a\x30\xec\x48\xd4\xe1\x0d\x22\x0c\x2b\x8a\x2e\x28\xd6\x97\x3a\xb6\xc0\x74\xde\xbc\x88\xc2\x5e\x41\xfc\xa0\x06\x14\xb2\xed\xb8\xc1\xe3\xc6\x0c\x56\x1e\x2f\xa8\x10\x2b\x58\x46\x38\x35\x29\x6c\x4e\x2c\x82\xb6\x2b\xd4\x93\xc3\xea\xaf\x56\x9c\x3e\x3b\x22\x45\x64\xcf\x10\x5c\x7a\x11\x02\x10\xb8\x74\x0a\x2a\xb9\xbd\xe9\x64\x31\x97\xf7\xaa\x06\x70\x09\x24\x74\x45\xc7\x9b\xca\x93\xb7\x0a\xc7\x1b\x71\xbb\x59\x7b\x35\x1d\x6f\xaa\x4b\xb6\x6a\x3a\xe7\x94\x30\xee\xe6\x14\xb4\x69\xe2\xd9\xcb\x38\x65\x3b\xb7\xd8\x7a\x23\x72\xd9\xc4\xba\x5a\x8e\x5c\x56\x70\x83\x2d\xe5\x48\x8b\x26\xe1\xcd\x63\xfb\xd1\x7e\xf9\x61\xff\xd7\xde\xde\xe1\x0f\xc5\x7e\x34\x14\x4e\xc3\x4b\xe8\xcc\x26\xb7\x8a\x5a\xeb\xd2\x8f\xa1\x38\xce\x4c\x61\x69\x39\xd7\xba\x86\xba\x52\xdd\xcf\xd6\xab\xc0\x5d\x32\x0a\x43\xe8\x7a\x01\x99\xc4\x71\x08\x3b\x44\x3f\xf9\xe6\x0e\xb7\x4d\x48\x01\xee\x57\xc9\x00\x4e\xfa\xd3\x3e\x87\x89\x7c\x07\x79\x51\x7d\xaf\x54\x1d\xcf\x5c\x95\xb1\xfb\x73\x8f\xd5\x57\xf7\x5d\xfb\x59\xd1\x5b\xc3\x14\xba\x5e\xee\x61\xcb\x59\xd1\x7a\x83\x34\xbb\xde\xe6\x03\xa4\xd9\xe9\x2b\x48\xb2\xd3\x9b\xa7\xd8\x35\xb0\x9e\xda\x4a\xaf\xab\xa6\x99\x92\x3c\x68\x42\x0e\x97\xa4\x80\x82\xcf\x5e\x84\x22\xcd\xa3\xdc\x6f\x23\x07\x39\x7e\x78\x99\x56\x32\x97\xed\x72\x69\xe6\x5c\x25\xeb\xa3\xc9\xda\x5f\x36\x05\x7a\xd5\x6b\xbf\x61\x02\xb4\xb0\x82\x7a\xab\x5f\xf9\x25\xc9\xcf\x4d\xd6\x7d\xef\x21\xd7\x7d\x79\xd2\x33\xde\x14\xab\x5f\xf3\xbd\xa5\xf2\x9d\xbf\x04\x31\xbc\xf9\x85\x8a\xe1\xcd\x87\x5c\x8e\xab\xc8\x70\x5e\xc1\x6a\xdd\xac\x6e\xab\x17\xfb\x7a\x14\x39\x77\x0a\xc3\x7b\x75\x11\xcf\x2d\xe1\x90\x68\x21\xf2\xd4\x56\xec\xa9\x62\xb7\x25\x04\xcc\xd2\x7e\x63\x89\xbd\x4f\x7c\x74\x94\x75\xa5\xb3\x73\x54\xe2\x11\xad\xe7\x3d\x96\x38\xf4\xea\x76\x7c\x89\x1c\x60\x79\x37\x16\x64\x02\xa7\x2f\xad\x9c\x04\x4b\xe1\x14\xd9\xa4\xe0\x03\xdf\xd7\x58\xc0\x2e\x9b\x7c\xaa\x78\x67\x0b\x02\x6c\x65\x5e\x6b\xbd\x3c\x86\x29\xb6\xa3\x42\xde\x25\x0d\xb7\xe0\xf1\xa9\x90\xc6\x50\x36\x74\xcb\xc5\x22\xdb\x1e\xe8\xc0\xb9\x6e\x3e\xca\xfb\x96\x8e\x9c\x8b\x0e\x7e\x86\x1c\xce\xc9\x09\xf8\x8b\x59\xe3\x82\x9f\x80\xe7\x3c\x31\xbe\xd3\x04\x54\x41\x4f\x65\x1f\x4d\xb4\xc3\x09\x18\x5d\x09\x38\x20\x69\x3d\x77\xa3\x49\x78\xd3\x9d\x90\x2b\x47\xf4\xc2\x0c\x92\xa0\xda\xf5\x22\xb0\xa1\x62\x03\x4f\x01\xbc\xf6\x46\x40\x3b\x0e\x22\xe4\x04\x23\x50\xdc\xc8\x88\x5e\x5d\xa9\x81\xe9\x6b\xc5\xc6\xf1\xb3\x61\x87\xda\xe4\xec\xcd\xf5\x5b\xff\x91\xc0\xef\xcf\xa0\x37\xd3\xce\xbc\x29\x28\x6c\x3b\x44\xa8\x4a\xb3\x85\xcb\xc8\x09\xab\xc2\xdb\x54\x69\x9a\x48\x29\x5b\x36\xa8\xec\xa2\x4a\x83\x2a\x5f\xdb\x60\xc6\xdf\x01\xe4\x90\xf3\xb7\xa8\x4d\x53\x7e\x51\x85\x36\xa5\xaf\x15\xbc\x55\xea\xbc\xec\xd5\x88\x82\x25\xc0\xfe\xf1\x61\x3d\xbb\xed\x5c\xcc\x11\x12\x22\xdc\x1c\x14\xf4\xbd\xe8\xf3\xc3\xe2\xf4\xc0\x75\x21\x88\xa8\xc1\x2b\x7c\x2e\x7e\x75\xcf\xca\xde\xde\x72\xf4\x67\x95\x68\x00\xe1\xe9\xe1\x1c\x11\x9a\x59\xf1\xc9\x96\xfe\x3d\x75\xed\xc5\x6e\x71\x35\x69\x79\xb2\x4e\xb3\xfe\x7a\x3e\xc2\x09\x62\x22\xed\x37\x6c\xe2\x0b\x4d\x9d\x61\xa9\x5a\x2f\x31\x9a\x93\x34\x2b\x45\x6d\x51\x25\x5e\xa7\xaa\xde\x58\x79\xca\x9a\x44\xd9\x96\x86\xb6\xd7\x8d\xaf\xe5\x45\xd7\xa4\xdf\xab\xc0\xe0\xbd\xa8\xc3\x84\x12\x8b\x9e\x91\xa8\x1a\x47\xac\x8f\x42\x52\x55\x21\x15\x67\x73\x22\xc2\xf0\x6d\xe9\x1d\xbe\xea\xc8\x85\x61\x40\x31\xe8\x29\xb0\x3a\x09\xac\xd1\x98\x5c\xc3\x38\x1a\x3d\x5f\x97\x0c\xa3\x6d\x48\x07\xf4\x23\xc7\xd4\x9e\xff\xf1\xeb\x8b\x9d\xe7\xb3\xdf\x4b\xca\x35\xe6\x81\xd1\x25\xf2\xe2\x08\xc0\x71\xd3\x40\x59\x6f\xb3\xea\xae\x4d\x0c\x49\x89\x1b\x6b\xa7\x12\xbf\xd4\x26\xc7\x4d\xbe\x28\x86\xce\xee\x66\xf1\x5d\x3b\xc9\xad\xcd\xd8\xb1\x76\x14\xd8\x59\x96\x25\x41\xd6\x42\x21\x94\xb6\x5a\xff\x38\xbd\x3f\xa1\x85\x10\xb9\x80\xf8\x97\x25\x58\xda\xa2\x6e\x57\x24\x05\x53\x62\x69\x6b\xb6\x7e\x4f\xd5\xfa\x72\xfa\xaf\xa2\xd6\x37\xa0\xff\x6a\xda\xfa\x5d\x55\xeb\x77\x97\x6a\x7d\x1e\x7d\xf4\x92\xad\x57\x02\x99\x25\x7f\x3e\x27\x57\xa1\xc6\xa6\x02\xc8\xbc\x25\x5c\x90\x02\x32\x93\xa2\x65\xd5\xfb\xd8\x6f\x82\x64\xc6\xef\x18\x2a\x54\x81\x38\xe0\xcf\xec\xab\x26\x1e\x25\x6c\xd0\xba\xde\xb5\x9e\xf0\x79\x38\x17\x9d\x28\xce\xb8\x51\x83\xc6\xc4\xd1\xdb\x13\x94\xc2\x36\x10\xad\x49\xb3\xbc\x60\x36\x47\xac\x61\x3d\xa5\x8d\xbd\x6d\x6d\x33\xb1\x72\x11\x7e\x2e\xb6\xba\xd3\x2e\x29\x7a\x3c\x75\xc8\xcd\xcb\x42\x66\xb7\x2b\xcd\x7d\x49\x32\x82\x0c\x99\xed\xe7\xd5\x9b\xc9\x55\x76\xb2\xa7\x05\xc9\xcf\x39\xa3\x7e\x35\x7a\x6a\x31\x36\xa0\xda\xec\x39\x5b\xc3\x34\x7b\x61\x5f\xd4\x6e\x7b\x02\x6e\xf0\x34\x89\x83\x8d\xa0\x87\xbc\x11\x41\x7c\x67\xd9\xaa\xea\x2d\x89\x6c\x1c\xa2\xad\x30\x82\xf8\x74\xce\x79\xd1\x12\x6f\xaa\x56\x84\xc0\xcc\x5e\x9a\x56\xce\x89\x59\x4a\x74\x89\xa8\x9b\xef\xfb\xe8\xf2\x51\xee\xe0\x29\xee\xd0\xf1\xe9\x72\x07\x5c\x81\x1a\x2f\xbc\x32\x3f\x3d\xb7\x76\x72\xae\x38\x8c\xad\x10\xb8\xb6\x3b\x2e\x14\x87\x89\x9b\x31\x41\x53\xff\xd4\x19\x03\x39\x32\xb5\x92\x9c\xe3\xbd\x2a\x7c\x7d\x05\x36\x55\x7a\x7c\xdb\x82\xa3\x8b\x22\x50\x8f\x63\x13\x12\x2c\x7d\x8b\xc2\xd2\xb7\x05\x22\xb1\xe6\x9c\xc4\x3b\xed\xd2\xde\x14\xc8\x73\x05\x44\x5d\xf0\xb8\x79\xb1\x02\x91\xef\x0a\xae\x85\x5f\x15\x3b\xd8\x0e\x9b\x8d\x9e\x87\x4b\x5f\x9a\x1e\x67\xe5\xa4\x25\x75\xf7\x29\xa0\x03\xc6\xdd\x21\x78\xb5\x8a\x7b\x33\xab\x5a\xac\x78\xb7\xae\x8a\x4e\x60\xa7\x4a\xed\xac\x8c\x17\xc2\xda\xb2\xb6\x9b\x16\x66\x42\xdc\x1b\x40\x2b\x20\x15\x26\xde\x5f\x52\xcb\x37\x70\x3b\x17\xb7\x71\x09\x25\xa9\x3c\x52\x13\x7c\x2f\xf3\x71\x70\xc3\x8f\x67\xcb\xab\x50\xbf\x0d\xfd\x14\x92\x9b\x61\x79\xa7\xc5\x93\xc8\xa4\x9f\xf6\xfa\x7f\x8c\x9d\x3f\x82\x22\x6f\x45\xcd\x62\x48\xf5\xdd\x0e\xdb\x19\x63\xa9\xc8\xf2\xb0\xda\xc8\x17\x91\xc5\x87\x58\xa2\x9a\x8a\x12\x30\xf3\x9d\x11\xf8\xb7\x87\x26\x04\x31\x5a\x18\x6c\x49\x29\x3e\xd5\x51\x2f\x4b\x34\x42\x19\x92\xaa\xd0\x90\xdc\xdd\x5d\xd1\xbb\x48\xe6\xbd\x13\x6f\x65\xd7\x73\x3b\x5e\x10\x01\x98\xde\xc2\x9c\x7e\xa3\xe9\x56\x6b\x07\x5f\xbf\x31\x4d\x02\x30\x8f\xba\xcd\x00\x9a\x7e\xdc\x7e\xfd\xe3\x41\x7b\xdb\xac\x06\x3d\x62\x63\xd3\xbb\x9f\xbf\x17\xdf\x81\x1c\x54\x49\x29\xe6\x50\x56\xa5\xf8\x04\xe5\xaa\x51\xc9\x7e\xa8\xd2\x92\x4a\x26\x6c\x1e\x04\xad\x35\x45\x68\x45\xea\x8f\x5e\x8a\xbd\x4a\xe0\xaf\x13\x07\x7f\xd0\xf8\xf0\x76\xcb\xb2\x9f\x57\x91\xa2\x24\x5a\x15\xa5\xda\x47\x2d\x29\x04\x02\x04\xa9\x5e\x20\xca\x9c\x25\xc4\x4d\x3c\x4e\x6a\x89\xb3\x56\x5d\xe2\x40\x84\x1e\x5b\xd8\x7c\xd8\x87\xc7\xbe\xff\x39\xaa\x9c\xd5\x53\x4f\xf2\xec\xd4\x3f\xe0\x77\x15\xdb\x57\x7c\x7f\x1d\xff\x90\x4a\x59\xe8\xa7\xb0\x0d\xed\x68\x05\x69\x1e\xe7\xa2\x03\xb9\x25\x65\xa0\xba\x94\xd6\xf2\x7c\xaa\x64\x6d\xb1\xe2\xa3\xce\x85\x0f\x94\xc2\x22\xbe\xb3\xbc\x84\x84\x8b\x0a\xbd\x49\xef\xbc\xc0\x9b\xce\xa7\xd9\x5b\x8b\x68\xde\x5d\xb7\xf0\x99\x59\xdb\x8e\x4f\xf2\xd4\xa3\x45\xad\xcf\xcf\xf5\xa9\xf3\x19\xbf\xf8\x07\x48\x95\x91\xd7\xde\xa5\x47\xf6\xdb\x79\x3f\x36\xd8\xa6\x51\xcd\x66\x95\x74\x15\xb8\x9e\x13\x3c\x54\x4f\xc9\xcb\x1e\xb1\xb3\xf4\x8d\x0f\xd5\x5b\xe7\x73\xcb\x5d\x55\x7c\x99\xf3\x55\xa2\x8c\x24\x22\x69\x83\xfc\x13\x8b\x3f\x41\xb6\xe4\x08\x9c\x8c\x7b\xa7\xf4\xc0\xab\x5d\x18\xb9\xe2\xd9\x98\xce\xa7\x2d\xd2\xd8\x83\x50\x99\x6c\xbb\x44\x2c\x1f\x9f\x7f\xcb\xab\xed\xb1\x89\xf5\xc8\x27\xe9\xef\xbf\x9f\xbd\x7e\xbd\x35\x09\x1b\xc6\xf2\x67\x30\xfc\x4c\xd5\x94\xc6\xcc\x72\xfb\xf5\x0f\xdb\x9e\x08\x00\xea\xf5\x2b\x11\x60\xf1\x92\x50\xbd\x9d\xe2\x28\x7e\x41\x01\xfc\xde\x4e\xc3\x28\x7e\x5f\xc5\x80\xc5\xd2\x75\x8b\xe2\xf7\x95\x7a\xc6\x0b\xc3\xf7\x84\xb8\x59\x6f\x53\xf8\xb2\x24\x86\x5c\xd4\xe1\x8a\x8c\x5f\xea\x18\x72\xbd\xd6\x6f\xa9\x5a\x5f\xce\xe4\x55\xd4\xfa\x65\x98\xbc\x0a\x5a\xaf\x8c\x80\x4b\x2b\x92\xd3\xfa\xbc\xc8\x09\x80\x6f\x26\xbf\xa7\xe2\xdf\x3b\x75\x3a\x58\x11\x54\x22\x47\xbf\x77\x4a\x82\xdf\xef\x40\x34\x61\x30\xde\x04\xc5\x9b\x7f\xf9\x07\x18\x7e\xbe\x55\x5c\x5f\x3d\x2c\xd9\xd8\x76\x57\x95\xf7\x69\x23\x6c\xde\x7a\xc0\x5c\x3e\x82\x99\xe4\xc7\x47\x14\x19\x2d\x65\xb8\x9c\x08\x87\x54\xa8\x49\x8a\x9c\x8b\x42\xc3\x63\x57\x2a\xa2\xe9\x6a\xbf\x9b\x14\xb8\xb6\xf4\xa3\xcf\x08\xc0\xc0\xf1\x4f\xd9\x5b\x93\x25\xb8\x4d\x23\xe7\xa5\x2b\xb1\x04\x87\x21\x06\xe3\xb7\x79\x39\x84\xfa\x31\xf9\x74\xee\x4e\x4b\x81\xbb\xf4\x84\x14\x07\xef\xfa\x0d\x83\x77\x49\x5c\x6b\xb7\xbd\xc0\x5d\xc9\xca\x92\x3c\x4e\x94\x2e\x4b\xff\x5e\x54\x83\x84\x62\x16\xec\x20\xcf\xf3\x42\xe1\x39\x71\x47\xb1\x67\xb8\xcb\xb8\x3d\x58\x77\x52\xe5\x2e\xf2\x42\x81\x95\xf3\xd8\xc4\xa1\x5a\x3e\x04\xd8\x72\xf8\x6f\xa5\xa1\xbf\x72\x0f\x18\xfd\x2f\xe3\x07\x63\x33\xa3\x79\x81\xa0\xc8\xaf\x4c\x50\xaa\x6a\x14\x14\xcd\xee\x43\x15\x73\xad\x53\xca\xb5\xcc\x3d\x98\xc6\x61\x57\x0b\x2f\x32\x38\x75\x83\x00\xa3\x84\x8b\xa5\x8c\xf1\xb9\xc4\xde\xd9\xf0\xa1\x9a\x54\xa8\x72\x50\x31\x51\x47\x5b\x25\x11\x92\x6c\x9d\x36\xac\xa6\x38\x03\xe6\x51\xad\xa6\xde\xdb\xc9\xff\xfe\xf8\xcb\xf1\x69\xb1\xd5\x44\x49\xb9\xb9\x88\xe5\xb5\xae\xe4\x79\xe6\xdc\x41\x9c\xf8\x80\xfe\xfd\x20\x84\x41\x25\xa4\x37\xe5\x9c\x37\x7c\x36\x24\xb2\xa0\xd0\x15\x09\x70\x36\x2b\x11\xe0\x84\xee\xd3\x26\xc0\xa9\x9e\xdf\xbc\x7a\x0e\x9c\xfe\xd3\xe2\xc0\x69\x9a\xd0\xbd\x27\xba\x99\x9a\x31\x07\xd7\x74\x25\xcb\x8b\x7f\x99\xca\x73\xca\xad\x81\x37\x44\xb2\x41\x78\x76\x76\xad\x9d\xd0\xfe\x16\x10\x8b\xcf\xb1\x26\xe9\x96\x94\x4c\xc8\x4a\xd1\xd5\xdc\x09\x15\x17\x07\x04\xd3\xf0\xba\xfa\xea\xc8\xd3\x6b\x0b\xf3\xdd\x19\x49\xc6\x76\x32\xbc\x5c\x84\x66\x62\x28\x8c\x0e\x76\x7f\x28\xa6\x16\x4a\xb8\x57\xda\x60\xbd\xba\xfe\xba\xaf\xda\x36\xab\x93\x15\x2b\x1f\x9b\x5d\xf5\xd8\x58\x5c\x1a\x09\x83\x54\x42\x25\xa0\xd0\xa7\xac\xbd\x25\x46\xab\x66\x92\xa1\x6a\xc8\xca\xec\x45\xd1\x24\x8c\x37\x07\xb3\x50\x6b\xbf\xf3\xc1\xa0\x9a\xd2\x0a\x50\xb3\x09\xcb\x42\x4c\x86\x6d\xc6\x39\xa4\x95\x4a\x13\x56\x3b\x37\xd4\x23\xb0\x62\x2c\xe7\x03\xd5\x25\xac\xb0\x54\x97\xad\x4a\xa8\xd7\x41\xb9\x4b\xcc\xbd\x52\x9a\xf8\x0a\x10\xea\x8f\x01\x84\xad\x6a\x11\xe3\xff\x0e\xc9\x96\xd0\x66\x30\xbc\xf6\x5c\x10\x69\x8e\xc6\x36\x86\x36\x05\xa3\x89\x13\x78\xd1\x54\xbb\x99\x78\xa3\x89\x36\x72\x02\xed\x02\x68\xf3\x08\xb8\x84\xd6\x77\xee\xf9\xae\xe6\x7a\x11\x82\xde\xc5\x1c\x01\x57\xc3\xfd\x89\xba\xf1\x60\x6a\xce\x08\x69\x0e\x7e\xe2\x85\x17\x10\x72\x1f\xdf\xb9\x05\x50\xbb\x00\xe8\x06\x80\x80\xb3\x00\x53\xd0\x9a\x46\x51\x6b\x96\xe6\x04\xae\x76\x05\x6e\x37\x88\xb9\x41\x98\x80\xba\x8c\x56\xd8\x81\x40\x1b\xcd\x21\x04\x01\xf2\x6f\x29\xb1\xd5\xe8\x8a\xb7\x36\xd2\x66\x10\x44\x20\x40\x6a\x5a\xe1\x19\x80\x53\x8f\x76\x8b\x53\x0b\x4b\x77\xab\xe8\x85\x1f\x67\xe6\x97\x2e\x99\xa7\x0f\x97\x2b\x98\xc7\x95\x6b\x59\xe0\xb3\x9c\xe1\xef\x01\x73\x7c\x52\x99\xd1\x93\x79\x3a\x0a\xaa\xe8\x79\x01\xbd\x2f\x8a\x4d\xa0\xee\x04\x4d\xfd\x04\x4e\xdd\x18\xf3\xad\x69\x99\x9a\x7a\xe5\x7b\xba\x76\x62\x49\xe9\x62\x50\x0f\x7c\xad\x02\x7c\x6d\x8d\xbc\xaa\x2a\x1f\x9a\xa3\x10\x7a\x78\xfc\xd9\x19\x28\x6c\xdc\x4e\x04\xa6\xce\x6c\x12\x42\xd0\xca\x74\xc8\x15\xfa\x1e\x68\xf8\xeb\xee\xc5\xa5\x90\xf4\xf9\x8f\x2e\x43\xdd\x2f\xef\x62\xdb\x56\x72\x88\x15\x3a\xd9\xb6\x64\xcc\x5d\x4d\xc0\x5e\xbb\x3c\x04\x45\xa5\xef\x62\x5f\x5d\x9a\x50\x80\x94\xc4\x6b\x0b\x8b\x90\xc8\x9f\x66\xae\x35\x62\x3f\x46\x1b\xc0\xf5\x1e\x1d\xd3\x77\x8d\x8e\xff\x6f\x3a\xfd\xdf\x12\x56\x81\x98\x9c\x9b\x78\x8e\x94\x96\x34\x8b\x4c\xc6\x45\xf4\xeb\xb8\xd2\x6a\x84\x75\xaa\xbb\xd2\xf6\x2a\xd0\x47\x3b\x53\x40\xbe\xd8\xf8\xe6\xce\x73\x05\x07\xda\x6e\x15\x07\x9a\xe7\xae\xc6\x7d\x26\x66\xdc\xaa\x5d\x69\x09\xa3\xd1\x57\xa7\xda\xe3\x3b\xd5\xf6\x55\x33\x95\xe3\x0b\xad\xb3\x38\xfa\x79\xa4\x8b\x96\xee\x45\x27\xe0\xa6\x76\xbc\x7f\x59\xe2\xc5\x2a\x46\x47\x53\xe6\x41\xbd\x9c\x71\x50\xaf\xcd\x34\x48\xe5\x6c\x1e\xd7\x20\xdf\xfc\x05\x84\x83\x0a\x8d\xa1\x12\xa0\x7d\x25\xc6\xaa\x5e\x46\x2a\xa8\x57\x25\x13\x94\x93\xe0\xf7\x86\x96\x7e\x02\x6e\x92\x01\xd1\x65\xa6\xb0\x23\xd7\x43\x5a\x12\x75\x3e\x61\xee\xfc\x0a\xf4\x60\x2b\x1b\xbe\x06\x16\x4e\x3b\x2f\x6e\x44\xba\x25\x7b\x8e\xe8\xaa\xdc\x18\x87\x70\x2a\xf9\x8c\xb0\x78\x24\xe7\xca\xf7\xf1\x31\xf3\xbd\x78\xf8\x7c\x8f\x6f\xbf\x98\x7a\x88\x8b\xcf\xdd\x1a\x21\x98\xfc\x53\x27\x25\x91\x12\xff\xa4\xb0\x83\xba\x34\xa5\xb0\x60\xae\x1b\xd0\x57\x55\x2b\x00\x5d\xbb\x12\xcd\x83\xb1\x60\x8d\xc2\x60\xe4\xc4\xe1\x5f\x04\x9d\x20\x62\xe8\xf8\x50\x55\x6e\x59\x52\x5b\xeb\x2b\x9f\x82\xca\xb8\xa4\xd6\xf9\x24\xd2\x43\x37\x7d\xf7\xd7\xe3\xeb\x57\x97\x15\xd5\xce\x5c\x24\x6c\x51\x78\xb7\x66\xde\x5b\xe5\x68\x4c\x1d\x25\xb4\x4a\x79\xe1\xe4\x1c\xfa\x5a\x63\xf8\xaf\xae\x4b\xf6\x5e\xc8\x16\x4c\x05\x88\xf5\xfe\x50\xa0\xdd\x22\x42\xa4\x6e\x85\xe1\x8a\x8c\x5b\x45\x15\x86\x1b\x14\x16\x2e\xaf\xcd\x1b\x83\xc7\xb7\x73\x10\xbd\x52\x79\xe5\x14\xa5\xd5\x56\xad\xe2\xbc\x75\x21\xd7\xf1\x3b\x12\x54\x6f\x83\x98\xba\xbc\x9e\xfe\x0a\x05\x79\x05\x9d\x3b\x37\x82\xb9\xc2\xf2\xb7\x35\xf5\x46\x3d\xb7\xc2\x24\xf3\x73\x68\x19\x13\xa3\x2e\x2d\x94\xae\xb0\x62\x7a\x72\xa0\x58\x54\xc4\x62\xf7\x4a\x10\x33\x07\x33\x14\xc6\xed\x0c\x74\xe2\x5f\xe3\x59\x3a\x4c\xbe\x29\xcd\x19\x92\xa0\xbe\x4f\xa8\xdc\xf0\xae\x10\x3f\x5d\x9e\x9c\x4d\xa9\x8c\x3f\xbd\x72\xc3\x5b\x02\xe0\xb9\x36\x4e\xfb\xc9\x94\x1b\x5e\x06\xef\xa3\x54\x9d\x64\xbc\x0f\x9b\xbd\x27\xa3\x37\x09\x6f\x92\x8c\xe9\x6d\x52\xc7\xbd\x19\xe2\x64\x25\x48\x9f\x9c\x6d\x90\x83\x64\x11\x4b\xe1\x64\xa0\x2c\xfd\xb6\x60\x3e\xe5\x40\x9f\x5a\x63\xf3\x34\x8a\x65\xc7\x4b\x80\xd6\x50\x91\x52\x1b\xb6\xa5\x72\xd9\x95\xb3\xdf\x55\xa7\xee\xde\x0a\xcb\x65\xd3\xa5\x51\x0d\xe2\xb2\x97\x86\xb8\xec\x56\x83\xb8\xd4\xc0\x9e\x8b\x5d\xfe\x5a\x3d\xbb\xed\xea\xd9\x75\xcf\xda\x46\xd5\xb3\x63\x25\xb0\xf5\x12\xda\xf1\x93\xff\x6a\x75\xb4\x9f\xc4\x6c\xde\x10\x8c\x0d\x99\x53\x65\xaa\x4a\xa5\x72\xdd\x68\x02\xc4\x67\xe2\xcb\x1d\x08\xd8\x13\xf0\x03\xc7\x21\xec\x2e\xb9\x64\x8a\x6a\x8c\x27\xef\xae\x56\x5d\x5c\x68\x2a\x2d\x31\xfe\x64\xd7\xdd\x92\xb0\x20\x7d\x29\x50\x50\x89\x9d\x43\x92\x77\x0b\xb0\x3f\xa3\x70\x3a\x75\x02\x37\x4a\xbc\x65\x3a\x37\x7e\x74\x48\x64\x72\x10\x62\x39\x0c\xa0\x16\x84\x10\x8c\x01\x84\x54\x4d\xc1\x17\x50\x05\x5b\xb7\xf4\x4f\x17\xbe\x23\xb7\x35\x83\xfb\x09\xb2\x51\xa1\x82\xe1\x28\xf9\xb9\x39\x92\xa7\xf6\x70\xa9\x00\x3b\xfc\x04\x8f\xbb\xb4\x11\x81\xd1\x1c\x82\x8e\xd8\xc9\x36\x46\x51\x86\xeb\x2c\x33\x70\xed\x61\x6a\x6a\x5f\x98\xbd\x6c\xaf\x2e\x55\x55\x95\x7c\xb6\x8a\x2d\x6a\x16\x2f\x79\x5a\xb1\x92\xbc\x3c\x3a\x21\x86\xe2\x04\x3c\x80\x42\x32\xe9\x0a\xb1\x3d\xa5\x90\x9e\x66\xe5\xfb\x97\x4c\xb8\x13\xa3\x2a\x0d\x23\x33\xb1\xf9\xf9\x34\x20\x41\x47\x27\xb3\xbd\x77\x70\x03\xb6\x03\x09\x5a\x11\x07\x58\xcb\x41\x98\xf8\xa7\x34\x12\xa8\x82\x47\x61\xd5\x48\xa0\xdd\xaf\x48\xa0\x2f\x24\x7a\xf3\x62\xf5\x48\xa0\xaf\x88\x9f\x22\xc4\x4f\x22\x49\x73\x40\x3f\x07\xee\xd4\x0b\xb4\x0f\xe2\x65\x7f\x45\xe8\x4f\xba\x16\x86\x1e\x80\x1b\x4d\x58\x91\x16\xaf\xeb\x16\x43\x4d\x48\x16\xfd\x09\xb8\x49\xc6\xee\xe9\xa3\x84\x9a\x26\xaf\xc9\x0e\xb0\xe4\x68\x78\xd2\x90\x9d\xed\xcc\x16\x28\x46\xed\xac\x1a\xb8\xf3\xb4\x54\x51\x15\x6c\x27\x7a\x20\xec\x4e\x4a\xbd\x5b\x5e\x49\x7c\x12\x08\x9e\x20\xfc\x7c\xf1\x7f\x9b\x3f\x4f\xbe\x22\x78\x84\xa9\x79\x32\x91\xa8\xaf\x3a\xe0\x57\x04\xcf\x57\x04\xcf\x57\x04\x4f\x45\xf5\xb1\x3a\x82\x27\xab\x40\xff\x29\x70\x3c\x2a\xc3\xa1\x3e\xae\x24\x31\x4e\x94\x98\x9c\x5c\x74\x8f\xa0\xb3\xa9\x00\x3e\xaa\xf9\xa2\xc0\x9e\xfc\xf1\xfe\x8a\xf1\x51\x28\xf0\x5f\x61\x3e\x5f\x24\xcc\x27\x99\xc0\x27\xa3\x5f\xc9\x1e\x4f\xc9\x26\x7e\xf2\x60\x9f\x64\x38\xbf\xe2\x7d\xbe\xe2\x7d\xf2\x57\xc7\x57\xc8\xcf\x57\xc8\x4f\x4b\x20\x91\x44\xc1\x69\x1b\xf2\x93\x68\xa2\x4f\x19\x7a\xf1\xe7\x82\xfc\x08\xb3\xf9\xa7\x80\xfc\x24\xfd\xa9\xd4\x5c\xa1\xfb\x5f\x21\x3f\x25\x18\x96\x06\x5c\x34\x65\x50\x20\x10\x20\x00\x67\xd0\x8b\xc0\x86\x83\x8d\xd1\xce\x4c\x32\x46\x97\xe4\x9e\xc9\x00\x82\xd2\x06\x6f\x4e\x57\x6b\x97\x98\xfe\x0a\x81\xf9\x0a\x81\xf9\x73\x40\x60\xd2\x91\x89\x86\x01\x0e\xdc\x0d\x2f\xb8\xec\x8c\xc2\x60\xec\x5d\x3e\x76\x78\x63\x0a\xdf\x5d\x04\x47\xbf\x8e\x2a\x86\x37\x1a\x40\x5d\xea\xb1\xbf\x56\x0f\x58\x6c\x97\x07\x2c\x5c\x2f\x1a\x85\xd7\x00\xde\x76\x46\x13\xc7\x0b\xf0\xef\xce\x54\x24\x90\xde\xaa\x44\x20\x1d\x77\xe6\x2b\x81\xf4\x5f\x25\xba\xb1\x33\x6c\x46\x20\xbd\x9c\x73\xbc\x8a\x86\xdd\x0c\x86\xa2\x97\x81\x50\xf4\xba\x10\x94\x6c\x15\x67\x09\x80\x72\x9a\xfc\xac\x04\x9e\x64\x54\x83\x0a\x27\xd8\x0a\xec\xc9\x92\x88\x41\xc5\x68\x01\x77\x83\x1c\x62\x29\xa3\x5b\x3a\xeb\x3c\xc7\x86\x28\x17\x78\x49\x29\x3d\x5e\x31\x41\x2a\xd9\x83\x77\xdb\x8d\x87\x26\xc7\xc1\x38\x94\x22\x6b\x72\xf5\x7e\xf9\x84\xe9\xb2\x7b\x79\x2b\x98\xe2\x18\xa4\xcb\xed\x2d\x3f\xfc\x0d\x5c\x53\xba\x8a\x69\x1d\x3f\xc7\xf1\x02\x06\xc9\xce\xe1\x59\x4f\xb8\x19\x45\x11\x1f\x37\x8a\xfe\x95\x99\x9b\x8a\xb3\x51\x5b\x25\x2b\xd3\xd8\x9e\x96\xb6\x96\x68\x65\xe9\xb2\xe3\xcb\x21\x40\x52\x0b\xaf\x99\x7e\xc4\x05\xcb\xd3\x80\x7f\xfc\xb8\xd7\xff\xf9\x8f\xdf\x83\xc3\x2a\xb5\x38\xf2\xeb\x18\xaa\x74\x0b\x09\x07\xc2\x5d\xab\xb5\x70\x20\x9b\x2b\xd2\xac\xc8\x96\x2b\xad\xce\x11\x57\x98\x14\xec\xd9\xaf\x50\x90\xbf\x8e\xb2\x94\xeb\x9a\x13\x17\x42\x01\x1a\x24\xae\xee\xd6\x2f\x2e\x99\xb9\x95\x0d\x41\xf6\x93\x5b\x1b\xe1\x41\xc4\x16\xc6\x15\x89\xae\xbc\xc0\xad\x58\x39\xb3\x52\x07\x39\xda\xa5\xdf\x13\x5e\xbc\x27\x7c\x59\x52\x7b\xb2\xa8\xdf\xbd\x65\x6a\x4f\xd6\x6b\xfd\xa6\xaa\xf5\x9b\x4b\xb5\xbe\x24\x72\xdc\x62\xeb\x09\x48\x29\xdd\xfa\xde\x8b\x65\x5a\xdf\xab\x5b\x17\xb3\x62\xeb\x95\x20\xa3\xfd\xa1\x0a\x3e\xb5\x9b\x03\x32\xda\x13\x2e\x48\x83\x8c\xb2\xa5\x3f\x8b\xfa\xb8\xdb\x08\x64\x24\x14\xff\x64\x2d\x22\x36\xfa\x1b\xba\xb1\x46\x61\x10\x80\x11\xea\xcc\x60\xf8\xf9\x56\x57\x03\x91\x84\x5b\xb7\x2a\x9f\x15\x5c\x60\xce\x23\xe2\xa2\x40\xe1\x15\x90\x83\xd5\xa4\xba\x60\x3c\xb8\x55\xde\x93\x3d\x75\x72\x5e\x72\x22\xa4\x69\x66\x5e\x52\x0b\x5c\xa5\x3f\x4c\x1a\xc3\xa3\x03\xab\x12\xc3\x50\x3c\xca\xe2\x37\x50\x2c\x3e\xb5\x3f\x33\x99\x41\x52\xb0\x27\x59\xa1\xf8\x7e\x14\x22\xea\x63\x57\xf8\x9b\x8b\xbe\xc6\x26\x2f\x81\x6d\xb0\xec\xcf\x71\x48\xa7\x37\x53\x8d\x55\x51\x7b\xb5\x1d\xf4\x7e\x63\x5c\x91\x28\x1c\xf6\x96\xc7\x15\xa9\x81\x63\x2c\x84\xdf\x06\x3e\x89\xa9\x8c\x25\x15\x69\x45\x90\x71\x2a\xcb\xa0\x3a\x86\x49\x2e\x46\xfb\xa2\xb0\x0a\x6d\xf6\xda\x0f\x19\x90\x9c\x15\x27\x35\x6c\x5b\xbd\x6a\x22\x74\x45\xe8\xa8\x17\xca\xfa\x8f\x35\xcd\xcb\xd5\x01\x4d\xf4\x55\xd4\xce\x2d\xc6\x99\xf4\x1a\xe2\x4c\x12\x81\xb5\xbf\xe2\x92\xb9\x39\x08\x13\x39\x0f\x89\xb5\x43\x86\x98\x34\xc1\xce\xb4\x57\xb4\x34\x3d\x46\x5f\x31\x29\x6d\x60\x52\x96\x11\xdb\x4d\x50\x0c\xdc\x52\x6f\x1b\x91\xc2\x0f\xf2\xa7\x8c\x0b\x58\x2d\x1e\xe5\xd1\x66\xb2\x35\x34\x4a\xfc\xc4\x07\xc7\xa2\x40\x70\xe9\x45\x08\x40\xe0\xc6\x8d\xa8\xd4\xea\xa4\xc5\x5f\x21\x29\xad\x43\x52\x5e\x54\x24\xa7\x89\x04\x1d\xbe\x6d\x1c\x4a\x94\x88\x15\x55\xbf\xda\xc3\x9f\xa8\xc7\xb8\x26\x77\x4d\x1b\x83\x5c\x40\x69\x73\x09\x10\x71\xa8\x47\xc8\x81\x08\xb8\x6d\x0e\x7c\x85\xd2\x53\x7f\x5a\xb4\x4f\x16\x7e\x5d\xc5\x87\x5a\x7e\x4d\x6e\x92\xb0\xd5\x0a\xbe\xa8\xd5\x18\x50\x71\x09\x78\x29\x38\xe1\x93\x4b\xc7\x21\x9c\x3a\xa8\x13\xcc\xa7\x17\xc4\x05\x92\x94\x84\xcf\xc2\x73\xa4\x30\x12\xb1\xa8\x21\xf8\x1d\x8c\x50\xe7\xe2\xb6\x39\x78\x87\xf9\x65\xb9\x9f\x36\x55\x49\xbe\x56\xa0\x4a\x8e\x31\x2d\x1f\xa8\x8a\x90\x13\x10\x3b\xe5\x51\x63\x55\x27\xcf\x37\xf6\x7f\x8a\x2e\x7f\xaa\x83\xe5\xb1\xf4\x10\xcf\xbb\xeb\x42\x10\xe1\xd1\xc4\x43\x28\x14\x8e\x0f\x42\x44\x0c\xb0\xcc\x87\x9a\xa1\xaa\x95\x54\xbe\xaa\x54\x44\x9e\xcc\x51\x87\x4f\x11\xa5\xbd\xe1\x95\xe4\xb3\x80\xa0\x4a\x15\xe5\x3d\x97\x97\x95\x7f\x40\x70\x90\xe7\xaa\x1f\x44\xaa\xdb\x7f\x05\x13\x3d\x44\x7c\x8c\x60\x0d\x88\x13\xbb\x09\xa4\x68\x37\xe3\xd7\x17\x3b\x18\x0b\x34\xdc\xd8\xed\xcd\xed\x7c\x1f\x72\x25\xcb\x81\xf5\x86\xef\xda\xf3\xf3\x3e\xd1\x6e\x44\x5c\x65\x67\x3e\x73\x59\xc6\x26\x4b\x87\xda\x17\xa3\x62\xde\xe8\x8a\x04\xbd\xa8\x9a\x31\x1c\xca\x39\x4f\x37\x0e\x0c\xbc\xe0\xb2\xbe\x76\x2b\xb8\x89\x37\xad\x73\xfd\xc7\xc4\xda\x5e\xce\xa7\x80\xf5\xb8\x08\xc1\x10\xb7\x29\xd1\xdb\xfe\x4d\x9b\xf9\x2c\x57\x35\x69\x90\x9d\x43\xda\xfd\x8a\x1b\x96\xcb\xb7\xba\xb8\xf2\xf0\xd9\xc4\x8b\xb8\x4e\xac\x4d\x9c\x48\xbb\x00\x20\xd0\x5c\x20\xd8\x4f\x4e\xe0\xd2\x12\xbf\xc1\x25\x80\x1a\xf8\xec\x45\x28\xd2\xbc\x80\x28\x77\x23\x07\x39\x7e\x78\x99\xae\xd9\xbb\xec\x78\x28\x74\x8f\xcd\x52\x84\x4c\xc6\x6c\x6c\xb0\x2f\xb6\x9e\xf8\xbe\x58\xaa\xea\x3e\xf1\x3f\xaf\x7e\x53\x1c\xe1\x36\xb6\xba\x25\x5e\x3c\xe4\x8e\xf8\x35\x9c\x0b\xcb\x3d\xe5\x23\x40\xc2\x76\x59\xf9\x9a\x7f\x51\x7f\xc9\x7f\x49\x4b\x71\xff\xcb\x94\xcf\xfb\x0f\xb9\x18\x0f\x02\x8d\x8c\xb3\x76\xe3\x44\x1a\x04\x68\x0e\x03\xe0\x6a\x37\x13\xcf\x8f\x90\x86\xb5\x57\xea\x99\xf3\x22\x52\x9e\xdd\xd2\x58\xa2\x03\x59\xaa\xf0\x56\x73\x2e\x1d\x2f\x58\xbd\x70\x56\xa5\x1b\xe7\x3c\xac\x6e\x64\x69\xef\xa1\x69\x67\x36\x87\xcd\x90\xd9\xe2\x61\x43\x83\x49\xc7\xd1\x7b\xe8\x5d\x52\x50\x68\xb3\xc0\x26\xb1\x51\xd2\x48\x5d\x38\xa2\x11\x4a\x05\xe4\xa9\x02\xc5\x12\x0c\x3f\xdf\x7e\xb5\x56\x7c\x99\xef\x2d\x15\x63\xe5\xc8\xb1\x9d\x9c\x18\x2b\x5f\x16\x0d\x55\x74\x96\xda\x4d\x2b\xd0\xb2\x28\xc7\xf1\xeb\x06\xab\x64\xa5\x2b\xe5\x8b\xb6\x6c\x73\x06\x38\xfd\xdb\x49\xe8\x72\x10\x7d\xce\x6d\x27\x4d\xd6\x4d\x1e\x6a\x50\x58\x37\x35\x39\x4a\xca\xb3\x01\xcb\x9f\xa1\xb7\xc2\xad\x54\x51\xfc\x36\x66\x33\x4d\x1f\x8f\x05\xac\xa6\xe9\x4b\x4b\x53\x4b\xf6\xda\x49\x2d\x69\xe9\xed\xdd\x68\x12\xde\x28\x9a\xc0\x5e\xaf\x19\x3a\xc3\x28\xd1\xd3\xe4\x94\x63\x15\xe2\x4f\x7c\x7a\xcd\xf2\x86\xb6\xa5\xff\xac\x28\xb2\xad\x97\xc3\xbf\xb4\xfa\xd9\x32\xc9\x88\x51\xe9\x9a\x4b\xa1\x51\x18\x5a\xd0\x25\xc4\x05\x8f\xba\xa4\x65\x2d\x67\x31\x95\xb3\x67\x08\xf2\x46\x9d\x0f\x93\xf7\x02\xea\x7d\x6e\xf6\xd4\x22\x5f\xd0\x0e\x89\x1c\xb3\x21\xf9\x40\x21\x92\xfa\x3b\x76\x5c\x52\xe6\xce\x99\x03\x09\x1e\xa7\x19\x16\x4b\xd5\x19\xe1\xb1\x31\x2c\x33\x11\x3a\xb5\x65\x60\xbb\xcb\x35\x70\xae\x97\x59\xab\x6e\xb1\x60\x8a\x2f\x43\xba\x62\x6f\x9f\xb0\x46\x14\x6f\x58\x7c\xbb\x9b\x2b\x55\x7a\x32\x38\x20\x2b\x5a\x4a\x44\x47\x8a\x18\xad\x54\xd2\x14\x49\x98\x92\xfd\xd3\x78\xbc\xf0\x01\xbd\xaa\xc1\xc2\x6a\x48\x7a\xa4\x4e\xa8\x6a\x72\x42\xf7\x45\xc1\x18\xa5\x2f\x6c\x36\x3a\x6d\x2e\xe7\xc6\x54\x7e\xcc\xe2\x49\x82\xc7\xd9\x75\x70\xc0\xc2\x37\x1c\x4e\x98\x0c\x40\xf2\x4b\x3b\x62\x63\x76\xdb\xb9\x98\x23\x24\xc4\xbb\x39\x8c\xfd\x7b\x51\x5f\xdc\x19\xca\x8d\x2a\x7c\x5b\x2f\xc1\xef\xd5\x4a\xaa\xdb\x59\xb5\x04\x6a\x48\xb5\x25\x3c\x1d\x39\x17\x1d\x2c\xc7\x64\xec\xdf\x30\x93\x05\x23\xe4\x5d\x29\xf4\x75\xce\x2b\xc7\xa0\x05\x49\x56\x0b\x75\xd0\xf8\x68\xa2\x1d\x4e\xc0\xe8\x4a\xa6\xe5\x95\x25\x0e\x37\x13\xba\x13\x72\xc3\x88\x5e\x9f\x41\xc3\xf7\x6a\xdd\x27\x62\xfd\x55\x6e\x5c\x79\x95\x92\x3c\x00\x3c\x3d\x53\x10\x4d\x3a\x97\x0e\x02\x37\xce\xad\x0a\x88\x5b\xa5\xdf\x6c\x75\x81\x4a\x7d\x76\xe2\x8b\x6b\x74\x38\x73\x93\xc2\xc8\xd8\x8d\x2d\x8a\xba\xed\xff\x69\x16\x21\x08\x88\x5d\x54\xde\xfe\x79\x7c\x71\x8d\xf6\x67\x6e\x6a\xb5\xfd\x47\x9f\x67\x61\x04\x5c\xed\x83\x83\x26\x95\xfa\x00\xe8\x0d\x33\x72\x7d\x8d\x6e\xa8\xee\x53\xf4\xa4\x62\xb3\xcf\x9c\xcb\x48\x5b\xd7\xde\x91\x28\x77\x79\xa3\xa7\x00\x39\xd4\x2a\xac\xde\xe0\xf4\x3d\xc3\x61\xa5\xea\x00\x92\xdc\x08\xe7\x88\x80\x2e\x44\x89\x64\xe9\xdf\xd3\xd0\x67\x12\x53\x4f\xf3\x0b\x67\x2d\x7d\xa6\x48\xb2\xa8\x7e\x52\xea\x80\x4d\xf9\x0e\xc1\xfb\x13\x8d\x75\x98\x09\xb1\xd6\x8d\x1c\x2b\x0e\xfd\x74\x6e\x52\x42\x97\x4c\x5a\x28\x8d\x4a\x35\x28\xd0\xf6\x32\x58\xa0\x27\x9b\xb7\x5d\x9c\xad\x2d\x82\x69\xe2\x19\x95\xf1\x3a\x7c\x82\xc7\x12\xe7\x0e\x01\xce\xc4\x64\x37\x96\xee\x45\x1d\xb6\x29\x1c\x08\x9d\x5b\x82\xf3\x99\xce\x9c\x51\x3a\x0b\xdc\x89\x22\xef\x12\x3f\xb6\xc3\x17\x22\xb9\x30\x0c\xf0\x69\x98\x62\xe7\x69\x8a\xbb\xe1\xc7\x4a\x3b\xd0\x9b\x0d\x47\x38\x0f\x1e\x15\x84\x33\x1b\xbd\xd8\x3b\xdc\xf9\xdf\xd3\x62\x10\x0e\x4f\x02\x40\xce\xe5\x25\x70\x0f\x62\xf8\x0d\xcb\x79\x8f\x01\x39\xf5\x60\x36\x7b\xf5\x5d\x9e\x2f\x14\xc7\xb6\x88\xb2\x60\x26\x6e\x72\x8a\x9f\x89\x2d\x06\x8d\x34\x4b\x5d\x45\xfa\x80\x55\xa5\x88\x67\x60\xe4\x00\xae\xb7\x87\x59\x02\xc0\x7e\x7b\x80\xeb\x44\x69\x9b\xfb\x0e\x94\xf3\x57\x58\x74\x8e\xad\x47\x3a\x6d\x1d\x41\x45\xc8\xe8\x77\xfd\xea\xc4\x47\xb5\x94\xd2\xe5\xbd\x38\x78\xa4\x92\x01\x3e\x73\x2e\x2b\x58\x87\xf2\x3d\xb1\x6a\xff\x00\x76\x13\x0c\x6f\xea\xdb\x4c\xa9\xe3\x90\x1b\x86\xcb\x18\x41\xf1\x48\xb8\xe5\x76\xb2\x94\x55\xb6\x99\x7e\xb7\x62\x31\xa7\xeb\x14\xf1\x4c\x02\xc9\xb0\xdb\x21\x1b\x33\x63\xd1\x65\xb8\xba\xf1\x8d\x1f\x42\x88\xc4\xbb\xd8\xdf\x29\x45\xa4\xe2\x30\xfc\xff\xff\x7f\x7a\x36\x3b\xb3\x6f\xe9\x06\xbb\x8d\x3b\x38\x6b\x20\x7c\xcb\x17\x5c\xb5\x61\x4e\x0f\x13\xbd\x7c\x20\xff\x1c\x77\xbe\xbc\x29\x6d\x5a\x99\x4a\x34\xf0\x12\x90\x01\xbd\x24\x22\x4d\xd3\x2d\x1c\x08\xb4\x20\xd4\x1c\xd7\x25\x31\x1a\xc7\xd7\x62\x29\xd5\x95\x70\x78\x95\x49\xf4\x4b\x2f\xee\x2b\x23\xc7\xb5\xd0\xc8\x21\x39\x9a\x3b\xb4\x60\x11\x3d\x72\x88\xf2\xe2\x10\xac\x2f\x51\x6b\x6e\x3c\x34\xe1\xb0\x63\x51\x59\x01\x01\x82\x14\x44\x5c\x9b\xaf\xa6\x40\x8d\x68\x4d\x31\x91\xec\x97\xc7\x26\xb3\xe9\x79\xb7\xf3\xc9\xde\xbb\x72\xdd\x24\xd6\x34\x57\x54\xd6\x32\x1b\x73\x15\x95\x0e\xf6\xea\x2c\xe6\x93\xa8\xb9\x75\x02\xb1\xad\xa8\x1a\x5b\x59\x77\x06\xf7\xd0\x53\x33\x98\xb0\x0d\x90\xf9\x6d\x47\x15\x29\xde\xe9\x67\x13\xa0\x8d\x43\xdf\x0f\x6f\xbc\xe0\x52\xf3\xbd\x08\x69\xd1\x24\xbc\x89\x34\x2f\x70\xbd\x6b\xcf\x9d\x3b\xbe\xf6\xe3\xd9\xd9\x07\x8d\xac\x39\x8d\x2d\x40\x0d\x4d\x60\x38\xbf\x9c\x68\x47\xc1\x75\x78\xab\x8d\x43\xa8\xf1\x60\x49\x92\x54\xe5\x7b\x57\x40\xfb\x00\xc3\x29\x40\x13\x30\x8f\xba\x34\x4b\x64\x1a\x62\xb9\x72\x11\xce\x11\x85\xb2\x78\x81\x16\xce\x61\xad\xfc\x17\xb1\x74\x84\xc0\x23\x57\x94\x6b\x44\x80\xb6\x1b\x14\xe7\x08\x1d\x56\xd7\x82\xc6\xbc\xc5\x2f\xff\x1f\xed\x5f\x87\x74\x96\x31\x4f\xcd\xe9\x4f\x1d\x52\xda\x19\x04\x59\xf2\xb3\xd2\x95\xe3\x8a\x69\x49\x45\xe2\xb1\x9b\x47\x21\x96\x8d\x4c\x91\x69\x20\xed\xcc\x49\x08\x4e\x94\xfe\x8a\xcb\x6d\x98\x3d\xfc\xfb\x45\x8e\xe1\x7e\x91\x63\xb8\x42\xc0\x27\xef\x6c\xd2\xf3\x92\x7a\x57\x50\x19\xa8\x49\x4a\x67\xd9\xc9\x99\x3a\x3b\xbf\xee\xa3\xc7\xdb\x47\xb9\xea\x61\x25\x52\x83\xc6\xac\x7d\x55\xb4\x1c\x6b\xab\x40\xcf\x29\xd4\x6e\x68\x82\x54\x5c\x91\x31\x94\xd3\xa7\x44\x65\xa6\x05\x15\x46\x54\x38\x5a\xd3\x62\x24\xef\xff\x23\x6b\x31\x1f\xdf\xfd\xfb\xf8\x6c\x6f\xe7\xd7\x62\x2d\x26\x97\x8c\x4f\x4a\x6d\x8b\x00\x1c\x37\x4e\x6a\xaa\xcc\xbf\xa7\x76\xb7\xf4\x2a\x55\xcd\xeb\xf3\x7a\x4b\x84\x74\xab\x80\x27\x6d\x37\x0b\x78\xda\x19\xd6\x63\xdc\xca\xd0\x55\xed\x29\x78\xd2\xc8\x22\x28\xe6\x47\xab\xd4\x31\x8e\xc6\x92\x38\xba\x76\x86\x95\x39\xba\x0a\xfa\xbb\x1c\x47\x57\xbd\xd6\xef\xab\x5a\xbf\xbf\x54\xeb\xf7\x57\xd3\x7a\x25\xc3\xd8\x56\xca\x2f\xdf\x66\x19\xc3\xa2\x3e\x2e\x5d\xc6\x50\x11\x32\xed\xf5\xf2\x1d\x98\x2c\x40\xaa\xb0\x29\xb8\x47\x3d\xbe\x42\xe4\xfc\x51\x5d\x98\xa7\x93\xa5\x1f\xb0\x32\x2b\x45\x92\x28\xe2\x04\x72\x12\x8a\xed\xd6\xaa\xcb\xe1\x56\x79\xc1\x6c\x8e\x58\xbb\x7a\x4a\x6e\xac\x6d\x6b\x9b\xc9\x85\x8b\xf0\xb3\x9e\xc3\x96\x95\x55\x89\xe9\xa1\xd2\x21\x37\x2e\x5b\xb3\x6e\xbb\xd2\xb2\x2b\x59\x75\x32\x2b\x53\x3f\x09\x8d\x55\xc7\x42\x15\x3a\xd7\xf5\x33\xca\x7f\x44\x4f\x1d\x46\xf9\x54\x9b\xa2\x4b\xe5\x2c\xdc\x4d\xd7\xe7\xa3\x60\xd9\xd3\x24\x77\x6a\x04\x3d\xe4\x8d\x88\x1e\xd9\xc4\x07\x98\xf1\xd9\xc6\x79\x2b\xc3\x96\x32\x03\x45\xfc\xe0\x5e\x5b\xa9\x27\x5a\x3e\x23\x8f\xa6\xa9\x5d\x8a\x82\x5a\x9d\x50\x6a\x17\xe3\x21\xba\x7c\x70\x3b\x78\x66\x3b\x74\x68\xba\xdc\x53\x5f\x10\xdf\x2c\x71\x85\xd6\x72\xa8\x26\x23\xd7\x42\xf6\xcb\x0a\x86\x83\x1a\x6e\xb8\x25\x13\x34\xf5\x4f\x9d\x31\x59\x2f\x49\xee\xd2\x12\x03\x50\x96\x96\x52\x31\xd7\x65\x37\x07\x92\xdd\x12\x9b\x99\x28\xee\x12\xfe\x4b\x89\xd2\x6c\x8b\x52\x9a\x6d\x0b\x7c\x70\xcd\x28\xcd\x76\x56\x45\x69\x26\xc9\x6c\x85\x1b\x43\x88\x41\x78\xb1\x7e\xa2\xc6\x3b\x54\x4e\x67\x12\x3b\xb5\x3c\x07\x59\x6b\xce\x0a\xe9\x71\xab\x61\xa1\x5a\x66\x13\x02\x3a\x52\xf8\xad\xdc\xf4\x11\x37\x5e\x56\x4f\x58\xd1\x56\x6c\x9b\xbc\x65\x47\xc5\xcc\x52\x6e\xbb\xb3\xd0\xcb\x52\x51\x0a\xa4\x08\x4b\xe4\x31\xa8\x5c\x52\xeb\x33\x70\x29\xe7\x09\x45\x51\x48\x20\x0b\x06\xc1\x98\x02\x78\x09\x3a\xdc\xb4\x6e\x46\x8e\xc2\x20\x22\xb1\x69\x96\xe2\x46\x21\x2e\x87\x25\xdd\x0a\xd2\xda\x6a\xcb\xad\x10\x63\xa5\x1e\xd9\xa5\xf0\xc7\xd9\xe6\xfc\x7d\xf8\xfb\xfb\x0a\x81\x91\x7a\x3e\x82\xad\xfa\x2e\x82\xed\x3c\x23\x66\x85\x71\x0f\x41\xda\x6c\xe2\xf5\x96\x5c\xc3\x6e\xbc\x8c\x72\xb4\x27\xb5\x7a\x75\xc6\x6f\xd8\x52\x68\xc5\xfd\x8c\x27\x93\x9e\x84\xe4\xa6\x96\x22\x28\x9a\x08\xe7\xb8\xec\x64\x0e\x2a\x5d\xc4\x68\x34\xf6\x7b\xb7\x7e\x9c\xac\xf0\x30\x29\xf7\x81\x6b\x69\x3f\x38\x9e\xf6\xd5\x27\x27\x37\x48\x93\x53\x38\x87\x73\x56\xae\x00\xc6\xac\xbe\x7a\x09\x3a\xb4\x78\xf5\xd2\x15\xfb\x2e\x2f\x1c\x59\x67\x7d\x32\xc5\x8a\xb7\x34\x57\xa9\x92\x79\x8a\x33\xaf\xff\xba\x90\x53\x0b\x99\x04\x58\xe8\x39\x43\x88\x53\x82\x50\xe3\x63\xfc\xf4\x17\x75\xb9\x46\xb3\xbc\x36\x93\x00\x27\x56\x16\x8b\x88\x07\xbc\x2d\x85\x61\x2e\xc0\xe6\x1f\x57\x63\x78\xf3\xfe\xf8\x66\x7e\x33\xa9\x19\x84\xc8\x4f\xbd\x56\x40\xb5\x33\xd1\x8a\x15\x87\x29\x96\x80\x4b\xc8\xf8\xee\x9d\x2a\x1e\xf4\x1e\x0f\x6c\x90\x72\x15\xaf\x41\x84\xbc\x80\x84\x09\xc9\x1a\x53\x45\x38\x76\xb2\x8e\xbd\xed\xe4\x19\xcd\x22\x1c\x42\x53\x0b\x02\x1a\xf9\x1d\x2a\x2f\xdb\x11\x37\xb1\x9f\xe3\x54\xdf\x12\x2e\x48\x39\xd5\x77\x33\x57\x17\x8d\x41\xc5\x6a\x38\xb2\x4f\x7d\x37\xe3\x52\x17\xbd\xe8\xab\xac\xbc\xa1\x7c\x4f\x3b\x95\x37\xca\x78\x2a\xaa\x02\x8d\xca\x62\x00\xb8\xb3\xec\x9b\x24\xa1\xa7\x16\x21\x89\x8a\x43\xfa\xc5\x97\xe1\xbe\xe7\xb2\x38\xa1\xa0\xa8\xee\xc3\x17\xb7\x1a\x3d\x83\x72\xfc\xfa\x5b\x95\x96\xfe\x56\x75\xbf\xfe\x36\xf5\x95\x37\x71\xef\x67\x67\x8c\xa7\x63\xee\xaf\x36\x77\x7b\x55\x2e\xf7\xc4\xb5\xd6\xeb\xb5\x4d\xf6\x34\xd9\x2a\xd4\xcf\x6a\x7a\xb6\xe2\x73\xbf\x8b\x28\x45\x0e\xde\x90\x55\x3c\xec\xcb\xaa\x76\x99\x41\x7a\x30\x6a\xa9\x56\x46\x88\x39\xdd\x1f\x70\x7c\x7e\x08\x43\xd4\xda\x22\x2a\x1f\xa1\x7a\xc0\xa9\xb4\xeb\xa1\x02\x70\x2a\xcb\x91\x50\x17\x03\xb5\x7c\xac\x49\x3d\xb7\x63\x36\xd2\x25\xf1\xa5\xe5\x51\xf9\x8d\xad\xa0\x9e\xc2\x1e\xa9\xc2\x81\xd3\x52\xc0\x25\x73\x40\x15\x47\x5d\x58\x15\x9e\x17\xcd\xa3\x2e\x84\x1a\x74\x25\x61\x97\xec\x59\xab\x86\x90\x12\x53\xe2\xfb\xd8\xb2\xc8\xd6\x98\x21\x4d\x4c\x15\x99\x61\xf9\xf7\x39\x35\x88\x6a\xaf\x02\x69\x34\xfe\x82\xf1\x9a\x52\xb9\xa5\x60\x75\x0d\x42\x4d\xcc\xd7\x5e\x9d\x72\xa8\x2a\x17\x52\x15\x97\x59\x22\x26\x1e\x22\xf8\x53\x29\xcd\xa6\x94\x8b\x96\x84\x83\x28\x2f\xbf\xb5\x6f\xbd\xa8\x05\x03\xad\x00\xf7\x44\x31\x27\x7e\x0c\xf9\xcc\x8b\x12\x29\xa2\x3d\x02\xaf\xfe\x1f\x29\x8f\x0c\xe5\xc3\xad\x1a\x0d\x8a\x83\x3f\x2d\x38\x72\x92\x13\x68\x49\x4f\x0e\xe3\x73\x79\x54\xdf\xcd\xff\xfd\xdf\x55\xff\x8f\x0f\x9f\x4b\x52\x74\x25\x9e\xfc\x28\x41\x92\x11\x11\x8b\x9c\x8b\x88\x71\xe7\x53\xa8\xb4\x18\x75\x63\xc7\x14\xcf\x63\x62\x3c\xc6\x2d\x53\xea\xd7\xf0\xea\xc8\xe7\x6a\x09\xa7\xfe\x76\x7d\xea\xc1\x68\x63\x1c\xc2\x0e\x2f\x76\x96\x61\x1e\xec\x57\x61\x1e\x7c\x30\x66\xca\x25\x79\xf1\x2b\x1d\x20\x8d\xa8\x77\xf5\xc7\xe0\xc6\x2f\x95\xb1\x75\xba\xbd\x1c\x3f\xbe\xc4\x73\xd4\xdf\xca\x74\xb3\x65\x86\xfc\xac\x55\x5d\x85\x80\xb9\xbf\x2b\x22\xa2\x57\xc4\x91\x2f\x29\x51\xbb\xed\x43\xe1\x1a\xf0\x30\x37\x44\xa3\x91\xd6\xb7\x07\x47\x6b\xa2\x59\xb5\xc2\x97\xbf\x2a\xad\xa7\x57\x4e\x12\x9a\xc3\x9a\x5f\x73\xb7\x2c\xcb\x9b\xbf\xfa\xdd\xd2\x90\xae\x5c\x5a\x6d\x3b\x0f\xb1\x57\x4a\xe8\xf3\x9b\xee\x94\x9d\x87\xde\x29\x4d\x79\xf4\x57\xb6\x17\x76\x96\xa2\xd3\xff\x52\xe4\xf9\xf6\x17\x2d\xcf\xb7\x1f\x7a\x95\xae\x82\x60\x7f\x65\x2b\x58\x4d\x4e\x55\x11\x7d\x9c\xf5\x85\x65\x9e\xbf\xd5\x58\x35\x6b\x4a\xb7\xdf\xdf\x11\x4e\x16\xc6\x8f\x2d\x97\xee\xb7\xf4\xb1\x07\x23\x44\x0d\x37\x95\x2e\x4a\xf4\xf0\xaa\xfe\x09\x35\xd7\xff\xf6\x32\x6c\xfd\x7a\x33\x06\xf6\x0a\x76\xd0\x0c\x86\x9f\xbd\x2f\xdc\xfa\x49\xc2\xb1\xfb\xd9\xf0\x1a\x8b\xea\xe7\x57\x33\xcf\x67\x4c\x57\x6a\xf5\x49\x82\x59\xe3\x92\xf2\xab\x9c\x4f\x62\xbf\x5c\x03\x78\xdb\x19\x4d\x1c\x2f\xf8\xb3\xce\x65\x85\xb2\x09\x95\xd3\x9d\x24\x81\x9a\x8c\x93\x34\xe9\x2f\x92\xc6\xe8\x64\x60\xf5\x14\x0e\x42\xd5\xdd\x74\x54\xa3\x24\x28\xdb\xdf\x91\xa3\x3c\x7c\x9a\x50\x38\x0b\xfd\xf0\x92\x56\x9d\x64\xb4\xf1\x96\x2e\xa0\x88\xf4\xd8\x89\x41\x3e\x23\x10\x50\x9a\x5e\xea\x7a\xc1\xc7\x7d\x02\x7f\x4d\xa5\xe4\xd2\x84\x84\x77\x20\x9a\x1c\x05\xce\x85\x0f\xe2\x92\x17\x54\x5c\xe1\x1f\x62\x91\xa5\xa4\x49\xed\xc7\xc8\x0d\xa5\x4f\xd7\xca\xa8\xf7\xdb\x6a\x3e\x55\x2f\xb8\x84\x20\x8a\xd2\x94\xaa\xf2\x3f\x95\x9f\x86\x00\x9c\x12\x24\x4e\x70\x99\x4b\xd2\xda\xb0\x45\x24\x64\x66\xa5\x86\x51\x42\xc1\x2c\xd7\xaa\x3e\x09\xa4\x01\xc7\xd5\xe2\x99\x24\x04\x0d\x11\xe7\xc9\xe6\xc9\x10\xba\xe2\x65\xca\x9d\x54\x6d\xaa\x53\x27\x93\xb0\xe9\x76\x8b\x7a\x95\x26\x08\xad\x0d\x08\x78\x98\x5a\x11\x32\xdd\x63\xe3\x88\x0b\xdf\x8a\x9d\x29\x40\xd0\x1b\x45\x1b\xe2\x73\xa3\x6c\x8c\x8f\x7b\x53\x99\xff\x2b\x8e\x5f\xf1\x28\x1d\x15\x1c\x59\x00\x77\x91\x86\xf6\xc2\xea\x6d\x5a\xbd\x1e\xbe\xad\x31\x21\xdd\x92\xa5\x33\xb8\xe2\x5b\x5a\x38\x83\x5f\x58\x5a\xb8\xe2\x45\xbb\x65\x33\x96\x0d\x03\x57\x1a\xc4\xe6\x2c\x86\x02\xc2\xa4\xb8\x1a\x85\x64\xb7\x94\xd5\xa3\xd8\xce\xe3\xd5\x2f\xe0\xea\x2d\x34\x23\xd2\x01\xdc\xba\x85\x29\x64\xc9\x54\x5a\xa4\x22\xfd\xba\x4a\x65\x2a\x6a\xbd\xa3\xcd\xd9\xaf\x51\xda\x21\x4f\x93\x2c\x39\x2e\x54\x14\xe3\x4d\x58\x1f\x85\x2c\x92\x32\x26\x77\x05\x13\x01\xfb\x83\x9b\x31\xbb\x96\xa0\x90\x0c\x87\x2a\xb5\xb2\x90\xbb\x3a\xd6\x65\xf2\x76\x3e\xa9\x96\xd0\x4d\x5e\x91\x3a\x8d\xf6\x2b\x5d\x4e\x2c\xd3\x2c\x5a\x53\xec\x84\x58\x86\xbe\x66\x27\xde\x7a\xc1\x15\x70\x13\x61\x54\xd2\x97\xb4\x4c\x2b\xe9\x4b\x46\x04\x96\xf7\x45\x08\xbb\xd7\xee\x8c\x82\xc4\x5d\xdd\x8d\x7c\x02\x77\x75\x3f\x54\xdc\xed\x65\x1d\x49\x14\xd9\xfa\x1d\x39\x4e\x94\xe0\xe2\x8e\x08\x2f\xa9\xd4\x91\xcc\xf5\x95\x3a\x12\x6b\xe1\x4d\x7a\x92\xa8\xf0\x65\x5d\x49\x5e\x53\xb1\x2f\xe9\x1b\x2a\x74\x86\x5b\x11\xf5\x7b\xf2\x91\xdb\x1f\xc5\xdd\x88\x5f\x50\xa9\x0f\xa9\xab\x2b\x74\x80\x1a\x3f\xf5\x85\x15\x49\xe6\x2b\x11\x54\xd4\xae\xaa\x24\xa4\x84\x4b\xa5\x46\xa7\xfe\x69\x60\xba\xb6\x7b\xb4\xd5\x2c\xf3\xa2\x38\x69\xf2\x1c\x1b\x35\x9d\x19\x73\xaf\xc3\x91\x09\x35\xdc\x17\xed\xfb\x2d\x6a\x07\xda\x15\xfe\xbf\xfd\xc4\xd9\xe8\x3a\xd1\xe4\x22\x74\xa0\xfb\x69\x0e\xfd\x4f\x31\xc6\x24\xb1\xef\x1b\xd6\x69\xcc\xa2\x49\x59\xf8\x20\x56\xdc\xe2\x37\xb3\xb9\x2d\x04\x9a\xee\x35\x6b\xb9\x6a\xaa\x5e\x3b\xc8\x19\x81\x80\x82\x47\x4e\x05\x4b\x96\x59\xa5\x49\x81\xc4\xcc\xad\x0c\x36\x94\xa4\x4a\x48\xb9\x19\xc5\x9a\x6f\x86\x4e\x47\xbe\x50\x4e\xbf\xc8\x25\x23\x93\x6f\x92\x13\x43\xc4\x02\x19\xc9\xce\x5d\x02\x55\xfb\x7e\x06\x02\x2d\x1e\xe6\xba\x50\xd8\x6a\xb2\x42\xf5\x18\x55\x79\xdd\xb6\xe5\x4a\xcd\x5a\x44\x39\x6a\xf3\x6e\xd6\x19\x5b\xe0\xc3\x58\xce\x4f\x1b\x77\xab\x4a\x31\x93\x4c\x95\xce\xcc\x5a\xe6\x28\x2c\xe6\x74\x4f\xf0\x55\x04\x8a\xc5\xba\xb2\xc5\x9a\xcd\xb1\xac\x0c\xe0\x3a\xcc\x84\x25\xea\x0a\xa5\xac\xa8\xe8\xa5\xf2\x52\xe2\x84\x94\xa0\x61\x65\x93\x4a\x94\x35\xcd\x4e\xae\xda\x2b\x7f\x57\x19\xa1\x22\xa0\xc9\xf2\x30\x55\x05\x5e\xce\x16\xaa\xa2\x88\xb8\xc8\x64\x4d\x30\xe8\x63\x49\x01\x13\x82\x8f\x80\x20\x70\x01\xec\x70\x41\x2c\x95\x47\x49\x4a\xa8\x78\xea\x6a\x29\x31\xd6\x92\x56\x65\x61\x6e\x6d\xfc\xb5\x0a\xe3\x89\xff\x74\x3d\xb7\xe3\x05\x11\x20\xc8\x75\xca\x1f\x32\x72\x02\x8e\xf2\x24\xa0\x4f\xda\xd0\x16\xaa\xab\x10\x95\xa9\x05\xa0\xe6\x06\x2b\x47\xf2\xb8\x70\x4d\xe7\xe6\xe0\xbf\x3f\xfc\xbe\x39\x2f\x82\x6b\xae\x9c\x95\xa3\x3f\xcc\xb2\x72\x30\x10\xa8\x60\xd2\xd7\x46\xd7\xc8\x92\x24\xc3\xeb\x0b\xc1\xcc\x77\x46\xe0\xdf\x94\xfa\xbe\xdc\x74\xaf\x10\x34\xc9\xc1\x13\x15\xf4\x6f\x5e\x98\xd9\xb8\xd2\x0e\x66\xed\xe0\x95\xf4\x50\xf0\x67\x3c\x70\x07\xb3\x3e\xdb\x06\xfd\x6b\xa1\x1d\x59\x3b\xbd\x5a\xfc\xad\xf9\x97\xb5\xa8\x0a\xc8\x56\xee\xc4\x12\x55\x92\xa5\x29\xde\x82\xe6\x12\x93\x4a\xbb\x96\xe4\x66\xe2\x4f\x79\x54\xd9\x79\xfc\xf9\xea\xf6\xea\x87\xe0\x43\x43\xae\x64\x92\x6d\x46\x8b\xe5\x89\x4c\x04\xab\xe4\x49\x6e\x46\x3f\xf0\x42\x5e\xef\x15\xd8\x07\x78\xd9\xe5\xde\x5e\x31\xad\x72\x41\x1d\xf9\xde\x5e\x33\xd2\x81\x4d\x11\x73\x16\x33\x75\x51\x83\xbf\x80\x85\xa0\x52\xbf\x5e\x0c\x13\x52\x85\x2c\xc3\xc0\x6e\x29\x2f\x71\x51\x77\x2b\x72\x2c\x28\x79\x89\xeb\x35\x7e\x47\xd5\xf8\x9d\xa5\x1a\x9f\x87\x7a\x58\xae\xf1\x4a\xfa\x87\x17\x69\x57\x4d\x53\xfa\x87\x5e\xaf\x56\x17\x1b\xf1\x3f\xe0\x77\x0c\x15\x16\x92\x25\x67\x09\xa6\x49\x10\xa8\xba\x2d\x43\xbf\x2a\xd9\x88\xf9\x65\xe7\x96\x67\x2d\xd6\xdb\xa5\x3c\x90\x43\x6a\xe9\xac\x17\x25\xdb\x01\xd9\xc5\xa9\x84\xd4\x32\xf2\xe2\xac\x69\xce\x41\x77\x31\x3b\xb0\xa5\x1f\x31\x27\xd3\x29\x7b\x43\xb2\x2e\xb6\x89\xb3\xa9\x7c\x79\x94\x08\xab\x65\xb9\x8f\xc5\x79\xed\x8b\xc5\xec\x99\x7f\xea\x41\x40\x7b\xad\xe7\x2e\x6d\x3e\x36\xe2\x4b\x31\x90\x59\x98\x49\xc1\xac\xe7\xc9\x84\xa6\x60\x2f\xbd\xd5\x0c\xed\xf4\x6c\x14\x27\x68\xef\x35\xa2\xc5\x4d\x50\x00\xbb\x6d\x65\x67\x97\x08\x06\x29\x35\x5b\xf4\x53\x24\x79\xda\x5c\x84\xe6\x55\x11\xd6\xe3\x06\x0b\x52\x78\x5b\x41\x57\x58\xc3\x0f\x24\x0f\xc4\xb2\x89\xd9\xfa\x9f\x8c\x2e\x4e\xaa\xff\x93\x18\x43\xab\x3b\xaf\x96\xcd\xc4\x5e\x16\xa7\xd3\x30\xb9\xba\x82\x77\xaf\x2c\xa9\x89\xa5\x5f\xb3\xab\x2a\x64\x5b\x57\xb4\x12\x33\x85\x92\xa9\x92\x92\x72\xc7\x49\x8c\x6a\x97\x40\xca\xce\x56\x13\xe1\x35\xa2\xe4\x4d\x14\x7a\x15\x19\xef\x32\x49\xd9\xb2\x85\xd9\x92\xbd\x2a\x44\xcd\x1f\xd5\x60\xfd\x17\x70\x7f\x79\xfd\xfb\x59\x54\x6c\xb0\x86\xab\x4b\x96\xae\x1b\xb4\x48\x45\x15\xaa\x0b\x28\xd9\x61\x93\x62\xa6\x29\x0a\x22\x34\x75\xa7\xd7\xf1\xb5\xb0\x95\xaf\x72\x9f\x2f\xb5\x68\xf9\x32\x6b\x79\xd5\x6e\x00\x17\xef\xbe\xc7\x5d\xba\x3b\x07\x33\x34\x1f\x3f\x0f\x8b\x97\x2e\x04\x8e\xfb\x3e\xf0\x6f\xd3\x0c\x03\xab\xaf\xb4\xb9\x9d\x39\xc3\x92\x58\xb5\x7e\x03\x3d\x04\xaa\xc1\xa6\x77\x68\x69\x11\x05\x6c\xba\xba\x8e\xaf\x57\x26\x24\xd8\x2a\xd7\xe9\xe3\x56\x6f\x7c\x73\xe7\xb9\x75\xb5\x77\xcf\x5d\x8d\xee\x2e\xee\xeb\xd4\x25\x71\x83\x3f\x79\x6e\x26\x14\x5e\x2b\x2e\x29\x5b\xaa\xab\xe2\x24\x20\xf7\x4a\x4a\x5e\x1e\x2b\xc1\x56\x2b\xac\x04\xd5\x38\x09\x2a\x74\xba\x69\xda\xdb\xb6\xd0\x1d\x6e\x29\x35\x83\xe8\x33\x1b\x21\x59\xa2\xe3\x10\x4e\x13\xe3\x00\x38\x6e\x48\x85\x41\x8c\xd2\xcd\xa7\x70\xb2\xf4\xef\x9d\x39\x0a\xc7\x9e\xef\x33\xbf\xc2\xfc\x62\xea\x21\x3e\xf6\x7d\x29\xea\x9d\x49\xc1\xab\xb5\x88\x53\xab\x3f\xb3\x9d\x52\x74\xad\xca\x1d\x94\xe4\x27\x49\x61\x89\x22\x60\x5d\x97\x06\x1c\x2b\xa3\xb9\xb6\x65\xea\x9e\x9a\x51\xee\xad\x32\x3d\x75\xf9\xc0\x05\x53\x49\x09\x89\x1c\x19\x4f\x1a\x55\x26\x3b\x87\xea\xa9\xd9\xc2\x10\x6c\x21\xd0\xe8\x70\x10\xb6\x74\xe2\x92\x23\xb2\xed\x63\xf7\x49\xc4\x87\x4f\x67\x27\x3b\xff\xdd\x19\xbf\x29\x3e\x77\x9d\x99\x57\x14\xe9\x60\x83\x4e\x8e\x41\x98\xb6\x12\x88\x41\x5f\x33\xe8\xd1\xab\xad\x72\x56\x38\x0c\xf7\x6b\x1c\x86\x69\xcf\x56\xe4\xcf\x2f\x85\xb3\x71\xaf\xca\xd9\x88\xef\x59\x95\x67\xab\x15\x56\x9e\xd5\x1d\x7e\xa5\x47\xdf\x30\xcb\xc3\xd3\xe0\x2c\x5b\xf1\x41\x26\x05\xc6\x2a\x15\xb6\x94\x03\x63\x07\x64\x0b\x28\x03\x63\xfd\xac\xd3\xb1\xb7\x64\x60\x4c\x68\x20\xa5\xa2\x28\x8c\x87\x55\xea\xce\x8e\x2a\x1e\xb6\x5d\x3d\x1e\x56\xd4\xcb\x65\xe2\x61\x35\xcb\x74\x8a\x18\xb3\xa4\x0a\xe7\x56\x4e\x48\x69\x5b\xb8\x20\x1d\x52\xea\xd7\xea\x62\x09\xb1\x72\x4e\x48\xa9\x2f\x86\x94\xd2\xcc\x01\x4b\xd5\xb5\xd1\x9a\x53\xd4\xa7\x60\x7a\xe7\xfa\x08\x02\xa7\xaa\xcd\xd3\xcf\xb3\x79\x6a\x2b\x84\xf8\x9c\x74\xfc\xc4\x61\x4e\x06\x92\x8c\x29\xcf\xe6\xec\x34\xc6\x90\xeb\xb9\x39\x82\x5b\x65\x8a\x17\x1d\x0c\x31\x75\x90\x0e\xec\xed\x0c\x74\xe2\xdf\xe2\x81\x3d\x4c\xbe\x51\xb1\x84\x37\xc3\xd9\x66\xa7\x69\x57\x88\x26\xb5\x43\x88\xae\xd2\xc8\x97\xac\x3c\xba\x59\x69\x27\x95\x54\x60\x96\xa3\x6f\x5b\x79\x5c\xac\x55\x53\xf1\xb9\x36\xc1\xd5\x19\xde\x2d\x2f\xb8\xc2\x1d\xe0\x51\x9a\x30\x70\x81\x0f\x10\x28\x55\x31\xb0\x62\x91\x28\x1a\xc9\xd0\xd5\x52\x27\xda\xd7\x23\x84\x13\x37\xb1\xa9\x75\x12\x29\xa9\xcd\xe2\xbb\x0a\x14\x76\xda\x5d\xdf\x5e\xe0\x4c\xea\x2d\xb5\x53\xa5\x88\xd9\x36\x8d\x17\x31\x0f\x65\x65\x67\x91\x1c\x14\x49\x02\x46\xfb\xed\xf1\x1a\x17\xef\x45\x35\xab\x31\xaf\x6b\xf7\xbd\xb8\x5c\x69\xab\xa4\xf0\x18\xeb\xee\x1e\x96\x75\xec\xca\x66\x3d\x97\x7b\xff\x02\xf7\x7e\x1e\xa1\x70\xfa\x11\x50\xb7\xfe\x09\x63\xec\x94\xc6\x41\x11\x97\x2b\x78\x1e\xee\xd2\xf2\x8f\x39\x73\x2e\xa4\xa4\x66\x01\x07\x57\x22\xf0\x89\xc7\xb4\xec\x75\x8a\x0c\xfa\x5c\x96\xa8\x5a\x94\x52\xe9\xc5\xb5\x3c\x4d\xb4\xb4\xae\xb2\x51\xc9\x94\x9f\xaa\x8a\x5b\x6a\x99\x65\xb3\xb2\xe4\xf7\xe4\x25\xca\xa2\xc6\x6a\x75\xa7\xee\x39\x5a\x91\x12\x50\xfe\xef\x24\x4c\x54\xa9\x48\x1b\x87\xf3\xc0\x6d\x44\xe3\x26\xff\xf7\x6f\xe0\x8f\xc2\x29\xd0\x50\xa8\x25\xa9\x9d\x35\xb2\x75\xa4\x11\xcb\x4b\xd5\xd7\xea\x2e\xde\x8a\x13\xdd\x9c\x48\x5c\x9e\xe6\x74\xec\xfa\xc9\xcc\xf2\x0d\x09\x9b\x93\xb9\x56\xc6\xb3\x2d\x2d\x84\xda\x6d\x38\xd7\xa6\xce\xad\x16\x84\x28\x4d\x33\x88\xd5\x5d\xc2\xbb\x29\x3c\x13\x5f\xee\x40\xc0\x9e\x80\x1f\x38\x0e\x61\xb7\x85\xa5\x44\x63\xfc\x6e\x18\xfc\xe7\x6f\xb8\x7d\x60\x8a\x5b\x70\x01\x34\x27\xb8\x15\xde\x5f\xa9\xc9\x62\x73\x01\xca\x6b\xdc\x93\x5b\x8f\x4b\x24\xa7\xa6\x97\x24\x63\x25\x21\x46\x82\x1b\x8e\xa2\x8e\x8f\x75\xcb\x62\x3e\x0e\xf9\x09\xa2\x91\xd2\x4b\xb1\x25\x14\xd6\xe5\x98\x4e\x9d\xc0\x8d\x12\xa5\x81\xaa\xcd\xbd\x6d\x4b\x87\x44\x9e\x07\x21\x96\xe1\x00\x6a\x41\x08\xc1\x18\x40\x48\x75\x75\x7c\x01\xb3\xb6\x2c\xfd\xd3\x85\xef\xc8\xed\x7d\x1d\x8e\xe6\xb8\xff\xc4\xa7\xad\x85\x81\x26\xa5\x7b\x17\xcf\x55\x85\xe9\x54\x8f\x9c\x0f\x1c\x18\xac\x70\xe8\xde\x1e\x1d\x7c\x3c\xc9\x16\x36\xc1\x3a\xd7\x25\x40\x84\x4c\x29\x42\x0e\x44\xc0\xe5\xf5\x4e\xda\x19\xcc\x8f\xc0\x71\xc9\xbe\xbe\x9c\x7b\x6e\x9e\x9d\x58\x6b\xfc\x6a\x6e\x87\x9a\xaa\x48\x0d\x2a\xcc\x96\x93\x3f\xcb\xf2\x00\x15\x83\xa3\x08\x64\xd0\x6a\x06\x69\xa4\x5e\x49\x03\x56\x8c\x23\xc8\x2b\x79\x90\xe4\xd6\xd1\x08\x07\x81\xdb\x10\xe0\x8d\x84\xdf\x61\x44\x9e\x1d\xee\xbf\xa7\x05\x15\x96\x86\xe5\x24\x7e\xc5\x76\xd1\x38\x72\x48\xa4\x95\x38\x4b\x4c\x40\xf7\xb8\xe1\x95\xa3\xc3\xe9\xcf\xff\xdc\xd8\x29\x49\x21\x61\x71\x8b\x55\xc3\x72\x2a\xc4\x48\xfa\x2d\x10\x3d\xf6\x1e\x1b\xf6\xdb\x66\xc9\x82\x95\xc6\x47\x1e\xb6\x5c\xc1\x23\x01\x03\xe4\xd3\xb7\x56\x4d\xf5\xb4\xab\x23\xb5\xf4\xe2\x96\xd1\xbf\x84\xc1\x62\xac\x11\x87\xf4\xfb\x5c\xdc\xaf\x22\x69\xe1\x71\xc5\xbe\x28\xa1\x05\x81\xbe\x84\x70\x65\x72\xb0\x15\x99\x9a\x90\x80\x3e\xae\x50\xfd\x5f\xe0\x9d\xbd\xfe\x71\x52\x98\xd3\x2c\x00\xc4\x72\xc3\xd6\x8d\x93\xf2\xf6\x56\x21\x7a\x5f\x94\x8b\x5e\xc6\xc9\x56\x92\x76\xb1\xff\x55\xfe\x7e\x95\xbf\xed\x14\xa6\xde\x95\x63\x1b\xe5\x11\x63\x81\xa3\xba\x30\x31\xb4\x28\x6c\x5a\x31\xd9\x30\x1d\x14\x16\xda\x97\x24\x82\x14\x44\xc0\x2b\xf5\x27\x0e\x06\x6f\x0b\x0d\xed\x0b\x5f\x2e\x11\x01\xdf\x5e\x22\x02\x9e\xdf\x78\x65\x04\x5c\x44\xaf\x26\x39\x93\xbd\x9c\x08\x78\x5f\xb8\x20\x1d\x01\xdf\xac\xd5\xc5\x3c\xea\xf3\xe2\x08\xf8\x66\x4e\x04\xbc\x46\x8a\xa4\xd8\xe1\xad\x16\x03\xa1\x7a\xdb\x75\xa1\x75\x65\xa5\xca\x3f\x57\x58\x35\xcf\x13\xcb\x95\xbc\xb3\x09\xd0\xc6\xa1\xef\x87\x37\x5e\x70\xc9\x41\x04\x11\xf1\x21\x42\x30\x02\xde\x35\xd0\x10\x74\xc6\x63\x6f\xa4\x8d\x61\x38\xd5\x38\x67\x58\x72\x29\x9a\xc0\x70\x7e\x39\xa1\xb5\x2c\xd8\x29\xd9\xd5\xde\x02\x07\x06\xda\x34\x84\x40\x73\x2e\xc2\x39\xd2\x28\xa7\xdb\x1c\xe2\xd7\xf0\xb3\x54\xf3\x02\x2d\x9c\xc3\x94\xce\x59\xe0\x28\xda\xa9\x58\xfa\x56\xc5\xb9\x3d\x2c\xf0\xfe\x94\x7a\x8d\xd8\xc0\x45\x08\xcc\x3a\x17\xb7\x1d\xfc\x6f\xd6\x45\xd4\x2d\x52\x6f\x57\x94\x81\xb8\x9a\x30\xaa\xde\x7e\xea\x61\x4e\xf2\xa1\x1c\x38\xcd\x01\x0f\x67\x38\x6b\x77\x55\xda\x53\x6b\x15\xf8\x0b\xde\xa1\xd4\xd0\x72\x5e\x23\x93\xc6\xa9\x0a\xfd\x8b\x69\x92\x0d\x86\xb3\xbd\x6c\xb9\xb6\x73\x2c\x5b\xce\xb2\x5c\x71\xcc\xaa\x4c\x46\x0a\xb2\x32\xc9\xb5\xf4\x29\x1f\xb0\xc0\x83\xb3\xba\xe3\xef\xaf\x50\xfb\xb6\x2c\xf7\x32\xc3\xe1\xf6\x04\x5d\x08\x79\x9e\x63\xa1\x32\x2e\x71\x06\x53\x1a\x37\xb5\xbf\xa1\xa1\x7b\x58\x54\xbb\x97\x2f\x9f\x2b\xb9\x1c\x5a\xf1\x5f\x20\x4a\xab\xfb\xa8\xbe\x8b\x7f\x8f\xb7\xfc\x9f\x6e\x7e\xff\xa1\xd8\x77\xc1\x18\x7b\x57\x42\xcb\xb6\x84\x3d\x98\xa5\xd9\x10\x10\xa1\x9c\xb4\x58\xcd\x83\x92\x66\xc6\xaa\xac\xc9\xa7\x72\x3b\x63\x7b\xbc\xb5\x20\xbd\xce\x39\xea\x2f\x3b\x19\x00\x95\x78\xde\x0b\x09\x3c\x67\x71\x4d\x9b\xbe\xd5\x1f\x56\x24\x82\x28\x8a\xb6\xb7\x7a\x52\xad\xf0\x9c\xaa\x76\x4a\x49\x67\x14\x5e\xca\x0f\x9c\x7d\x9f\xf3\x73\x81\xd8\xad\x10\x26\x6c\x92\xb9\xa4\xce\x88\x9f\x3a\x58\x7f\xd7\x2d\x7d\xec\x3b\x08\x11\x35\x6d\x49\x29\x49\xc6\xb8\x15\x09\x99\x54\x49\x78\x54\x29\xf9\xeb\xf1\xac\x37\x79\x7e\xd9\xab\xe8\xe1\x4d\xe5\xa4\x32\xf7\xae\x50\xbe\x2a\x2e\x33\xee\x7a\xd1\xc8\x0f\xa3\x39\x4c\x4a\x87\x47\xc9\x27\x5e\x9f\x08\x9f\x91\xfc\x13\x3e\xf0\x88\x53\x05\x39\x9e\x1f\x89\x95\xc7\xc7\x61\x88\x6a\x47\xed\xfa\x35\x08\x58\x6a\x84\xed\x2a\x24\xfa\xf2\xe1\xe0\x0e\xe3\x8d\x6f\xee\xae\xbc\xc0\x6d\x14\xb8\xb3\x74\x52\x23\xe5\x01\xfd\xc7\x62\x1e\x65\x06\x84\xc8\x67\x5c\x64\xd4\xb2\x54\x95\x4d\x9e\x66\xaa\xf0\x5f\xc9\x1b\x2d\x38\x97\x77\xea\x19\xd0\xf2\xfa\x50\xf2\xac\xd5\xf5\x15\x26\x92\xbf\xba\x36\x24\xc2\x4a\x32\x77\xf1\x2a\x5d\x5c\xb2\xa8\x4e\x49\xbe\xab\x05\x49\xc4\xa7\xfb\xf3\xcc\x09\x5c\x5a\x03\xa2\x06\x93\x7b\x66\x48\x99\x4c\x90\x34\xa7\xcc\x1f\x2c\x1e\x06\xdc\xce\xc5\x6d\xc7\x19\xf9\x91\x94\xf9\x7f\x4e\x8f\x34\x6e\x8b\xff\xc0\xae\x7d\x75\x7b\x70\xf8\x36\xab\xce\xc9\xae\x63\xde\xe2\x8e\xe3\xfb\xe1\x8d\xfa\xb1\xac\x89\x5c\xa1\xdb\xb6\xce\xf5\xd7\xf4\xae\x83\xc3\xb7\x1f\x42\xdf\x1b\x11\xfd\x44\xa7\x8f\x50\x29\x8f\xe9\x97\xde\x78\xbe\x3b\x72\xa0\xdb\x91\xd0\xfd\x79\x1d\xe2\x57\x1f\x4b\x38\xb8\x82\xc7\x63\x23\x87\x9e\x79\x15\xdf\x10\x84\xe8\x35\xbd\xbe\xc6\x3b\x3a\x2e\x98\x81\xc0\x05\xc1\xc8\x03\x39\x13\xc2\x6e\xe0\x23\x47\x5f\xf5\x5a\xbc\x4d\x10\x96\xa4\x96\xa4\x3e\x8f\x80\x46\x66\x58\x39\x8e\xea\xb6\xe0\xeb\x3b\xae\x17\xb1\x63\x70\xe9\x96\x48\xc4\xf4\xd5\x5b\x55\xf0\xcf\x32\x7b\x83\x64\x76\xa6\xfa\xc1\x99\xa9\x5e\xb4\xf2\xb6\x3d\xf1\x6d\xbb\xea\x47\x57\xb2\x7f\x78\x31\x8c\x38\x96\x52\x3d\x67\x4b\x36\x08\x78\xb6\xc0\x6b\xa6\xc9\x24\x79\x0f\xce\x1c\x91\xb2\x66\x64\x40\x96\xc5\xee\xa7\x2b\x88\xa7\x2b\x17\x32\xd9\x48\x44\xe3\x2e\x16\xe5\xb8\x6f\x5b\xd6\x39\xa1\x12\x61\xc7\x71\x5c\x36\x5c\x64\x59\x49\xc5\xaf\xfa\x74\xa1\x96\x88\xb4\xcc\x9e\x4a\x2d\x7a\xdd\x0b\xc6\xa1\x6e\x25\xe5\xc9\x6b\x27\x50\xe7\x0f\x76\x9b\xd5\xca\xd3\x06\xd8\x64\xab\xc4\x4f\x28\xdd\x60\xa9\xc8\x55\xf7\x85\xe3\x97\x24\xb3\xb0\xa9\xeb\x7e\x73\x87\x75\xde\x45\x97\x65\x5a\x28\xd5\x43\xac\x14\x27\xd3\x90\x26\xb1\x29\x42\x5a\x17\xda\x7f\xe2\x25\x25\x26\x9e\x95\xda\x1f\xfb\xd4\x64\x61\x07\x68\xe3\xbd\xa2\x9c\xc4\x56\x8a\xb6\x67\x27\xb1\xcc\xd7\xdb\xca\x2c\x12\x53\x7f\x05\x73\x58\x69\x16\x97\xcd\x67\x95\x84\x76\xad\x6e\x33\xe3\x4c\xd5\x71\x62\x9c\x7d\x92\xca\x15\x33\x23\x6f\x82\xa6\xfe\xa9\x33\x56\xd4\xbe\xae\x56\x00\x8d\xca\x24\xaa\xba\x35\xf7\x78\x49\xc2\xae\xa7\x5e\xde\xd9\x72\x63\x84\x01\x39\x23\x00\x9b\x1d\x65\x45\x33\x2e\x6c\x8b\x1f\x98\x01\xdc\xda\xc6\x48\x16\x7a\x9f\xc2\x40\x4a\x57\x60\x1b\x7e\xa0\x5e\xa6\x2c\x4b\xf1\x3b\x7a\xdb\x35\xd1\xf3\xbd\x32\xae\x1c\x75\xb3\x32\x95\x76\xd3\x42\x4f\xe6\xaf\xed\x6d\x4a\x5e\xd1\xfe\x52\x73\x2e\xab\x0c\x07\x49\xe0\xf5\x7c\xdb\x3a\xdf\xda\x27\x9e\x60\x7d\xe4\x7b\xa3\x2b\x3d\xbe\x8a\x83\x1f\x44\x54\x41\xd3\x35\x51\x5f\xe0\x45\xdd\x6f\xee\xf8\x06\x51\xfb\x34\x44\xf3\x4a\x56\x2c\xb2\xdb\x4b\xc7\xb6\x19\x88\x2d\xe8\x8c\xd7\xa0\x50\x44\x36\x95\x79\xb9\xae\xc7\x4d\xe5\x02\x79\x51\x5e\x4d\x68\x3f\xcf\xa6\x17\xe4\x76\xc6\xd8\xaf\x50\x43\xaf\x8a\xbf\x49\x51\x43\xaf\x82\x83\xa9\x7d\x97\xd2\x12\x35\xf4\xf8\xea\xd8\xab\xef\x57\x48\x9b\xfb\x69\x35\x58\x01\x37\xa0\xdc\x65\x31\xa6\x42\xff\x5e\x70\x60\x7e\xcf\x6e\xfb\x91\x95\xcd\xf3\xa2\x8f\x60\x1a\x22\xf0\xfa\x10\xff\x35\x71\xa2\x77\xf4\xf7\x0f\x30\xbc\xf6\xa8\x53\xf4\xfb\x30\x48\xb8\x27\x24\x04\x4f\xcc\x8d\x2d\x33\xd0\xb3\x7a\x5f\x19\xe4\xd0\x5e\xc3\x32\x7c\xc2\x6c\x17\x95\xe1\xdb\x56\x94\xe1\x13\x6e\xad\x52\x86\x2f\xdd\x17\x2b\xf3\xc0\xcd\xc2\x2b\x0b\x6a\xf1\xe5\xdf\x58\xa5\x1e\x5f\x3a\x06\x8f\xfb\xfa\x36\x1c\x39\xbe\xa2\xdc\xfd\x76\x76\xb8\xd9\xa4\x7f\x9a\x25\xb3\x9a\x0d\x7b\x49\xa5\xd4\x18\x2f\x8b\xe0\x72\x88\x97\xbe\xe4\x01\xac\x44\x56\x5e\x96\x5c\x55\x1a\x33\x79\x92\xa9\x55\xc4\xa3\xca\x02\x34\xd9\x32\x66\xb4\x08\xd9\x65\x4c\x2b\x97\xd4\xcd\x09\xe3\x7c\xab\x71\xc0\x38\x5d\xe7\xfc\x16\x96\x1e\x45\x0a\x93\x25\xf5\xce\x02\xe4\x78\x44\xbd\x4c\xb2\xb6\x28\x61\x5d\x07\x38\xa3\x49\x87\x78\x68\xf1\x27\xdd\xa2\xc0\x29\x7c\xe9\x8d\x87\x26\x21\x89\xdc\x0b\x05\xce\xc6\x30\x9c\x76\x40\x80\x20\x8d\xc4\xb3\x1c\xaf\x36\xaa\xf6\x70\x11\xd3\x4a\xf4\x68\x2e\x54\x74\x7e\xd4\xf0\xd1\xcf\x6f\xe0\x07\x1f\x9c\x7c\x6c\x9a\x20\x50\xc0\x77\xba\x6c\xea\xc0\xee\x23\x31\xdb\x55\x4b\x1d\xa8\xc4\x6b\xf7\x35\x75\xe0\xaf\x12\xac\x69\x2b\x75\xa0\x12\xd9\x9c\x58\xbf\xe8\x81\x53\x07\xf6\x6a\xa6\x0e\x54\xea\xcf\x53\x4d\x1d\xa8\x49\x9e\xf7\xc5\xa6\x0e\x88\xab\x6a\x85\x08\xda\x82\xd7\xb4\x06\x06\xce\x15\x97\xed\x25\x47\xec\x7f\x4d\x8e\x78\x4c\xce\x39\xb9\x20\x32\xd5\x1f\xa2\x6e\x7e\x49\xcf\xae\x17\x20\x48\x82\x36\xe7\x92\xd7\x32\xf6\x3d\xaa\xf3\x68\x1f\x01\xf7\xbf\xdf\x94\x4b\x2e\x26\xfb\x6a\x8b\x3a\x2d\x67\x35\xa9\x59\xd3\xf2\x89\xc4\x79\x2c\x4f\xe6\x4f\xeb\xf3\x02\x4b\xbb\x4b\xb0\xc6\xb5\x0d\x83\x4e\x0f\x65\x1b\x44\x61\x7a\xbb\xa0\xfa\x95\x53\x41\x55\x0f\xb6\x48\xb0\x45\xb1\x78\xee\xea\xc4\xe6\xf2\xa0\xfa\x92\x30\x4c\xe5\x85\xf2\x10\x18\xfc\x17\x55\xe0\xf5\xd6\xae\xb5\x67\xed\x7f\xf1\x20\xfb\x34\x2f\xbd\x84\xae\x27\x76\xc2\x53\x81\xd8\x27\x67\x4a\x03\x1f\x00\x37\x81\x1e\xd5\xdc\x7f\xf3\xcb\xde\xbf\xde\xbe\xd9\x38\x53\x9a\xfb\x19\xf3\x9c\xd9\x27\xa9\x63\xbe\x64\xb3\x16\x58\x7c\x43\x81\x8e\xa5\xca\xd9\x5f\xb8\xb0\xb8\x11\xe9\x8d\x6b\x4c\x29\xb9\xa9\xc9\xec\x3d\x89\x0a\x04\xef\x47\xd0\xff\x19\x1d\xfe\xeb\x6b\xd1\xaa\x2f\xbf\x68\x55\x63\xfe\x26\x3f\x74\xdc\x27\x40\xd7\x14\x6e\xed\x1f\xfd\x30\x76\x4e\x2b\x49\x92\xa2\x31\xad\x3e\x64\xac\xe7\x4d\x06\x2d\x08\x11\x61\x8f\x7c\xec\x51\xfb\xe9\x77\xdf\x79\xf5\xfa\xe2\x97\xa2\x1d\xbc\xea\xdd\x9b\x95\xce\xdc\xad\x26\x57\x9c\x28\x75\xbf\xa9\x62\x50\x71\x15\xc2\x29\x88\x22\x87\xba\x79\xb6\x37\xb7\x2d\xfd\x27\x92\x26\xa0\xa1\x50\x1b\x7b\x81\x4b\xb5\xb8\x19\xb9\xa0\x4a\x4e\x50\x2f\xed\xc4\xab\xb1\x4f\x89\x3e\x51\x7d\x95\xf1\xa5\x92\xb3\xcc\xd6\x8a\x96\x59\xe8\xcc\xd1\xa4\xc3\x63\x50\x1d\x17\x5c\xcc\x1f\x7d\xa3\x9e\x5c\x8e\x9f\x7b\xbf\x9f\x6e\x17\x1f\x1a\x0d\x4a\xc3\x2d\x51\x6e\x7f\xc7\xd2\x6f\x3c\x17\x4d\x06\xda\xce\xe6\xff\x7c\x3b\x75\xe0\xa5\x17\x0c\xb4\x4d\xcd\x99\xa3\xf0\xdb\x8c\xf5\x11\x23\xf9\x7a\xf1\x4f\xfb\xf1\xe1\x72\xe6\x21\x89\x99\x1a\xd1\xbf\xad\x73\xfd\x5d\x38\xba\xd2\xde\x1f\xcc\xd1\x44\x8b\x63\xbd\xc9\x4a\x93\xd4\x64\xfe\x86\x29\x23\xc7\x4a\x19\x3f\xfc\x67\x52\x53\x8b\x11\x10\x4c\x01\x9a\x84\xae\x6e\xe9\xff\x3c\x3a\xd3\x29\xfb\x41\xac\xdc\x92\xc2\x3c\xc3\x3c\x7f\xaf\x84\xef\x95\x77\x0e\xf1\x30\x86\x94\xa6\x80\x7e\xd1\xe9\xf5\xb7\xb6\x77\x76\xf7\xf6\x5f\x6c\x38\x17\x23\x17\x8c\x2f\x27\xde\xef\x57\xfe\x34\x08\x67\x7f\xc0\x08\xcd\xaf\x6f\x3e\xdf\xfe\x97\xdd\xd5\xc9\xbf\x62\x23\x7e\x8c\x5e\xbb\xa4\x04\x0f\xcb\x83\xcf\xa8\x43\xfd\x55\xe9\x83\xdf\x77\x2e\x88\x94\x88\x6b\x8b\x4d\x80\x3f\x4b\xfa\xa0\x53\x27\x35\xaf\xba\x3c\xb4\xf4\xb3\x09\xd0\xde\x1f\xbf\x3e\xd4\xc8\xef\x1a\x59\xe1\x54\x24\xdc\x78\xbe\xaf\x5d\x02\x2c\x1b\xa2\x08\xb8\x09\x5d\x45\xa8\x1d\x92\x0d\xa7\xe7\x33\x94\x35\x6d\x24\x19\x71\x4b\x3f\x24\xff\x64\x9a\x88\x7f\x5d\xae\x85\x85\x3a\x89\xd4\x7c\x47\xe1\x6b\x22\xc3\xc8\x0a\xb0\xd5\xb3\xeb\xdf\x62\x71\x5d\x90\xc3\x5d\x46\x00\xaa\x08\x5b\xb7\x99\xf9\x27\xca\x68\x08\x5c\x0f\x82\x11\xfa\x44\xad\x3e\x66\x02\xd6\x33\xd7\x54\xc2\xb7\x89\xae\x10\x51\xc6\xda\x47\x0f\xcd\x06\xff\x0a\xfe\xfd\xfe\xcd\x49\x49\x89\x5a\xb9\xb8\x67\x0c\x2a\xaf\x27\xca\x57\x92\x69\xb7\x43\xfd\x9f\x74\x30\x07\x1b\x8c\x10\x78\x30\xf2\x3d\xa2\x29\x7f\x8d\x53\x3e\x6e\x52\x59\xba\x34\xeb\x79\xa6\x86\x52\x4c\xac\xc2\x4f\x0b\xd2\x0c\x8a\xfd\x3f\x57\x41\x77\xab\xe6\x90\xb1\xc1\xbe\xf6\xc0\x4d\x23\x8f\x68\x85\x51\x69\x52\xfb\x40\xa1\x67\xe4\xb1\xae\x14\x6b\x1e\xa7\x5c\x82\xb4\xc7\xa6\x59\xa9\xd3\x8d\xca\xc6\xe8\xa9\x64\x94\xd4\xd1\x43\xb2\x3e\x6a\x1e\x3c\xc9\x38\xb5\x94\xd7\xa1\x2b\xeb\x50\x10\x78\x98\x76\x8a\x42\xc8\x0c\x8d\xfa\x45\xa2\xd4\x2d\x5e\x3a\x89\xa1\x8a\x27\xfd\x6c\x02\x22\xa0\x71\xf9\x48\x9c\xe9\xde\x74\x0a\x5c\xcf\x41\xc0\xbf\xd5\x22\xe7\x1a\x2b\x17\xa1\xe6\x93\x5e\x46\xb4\x97\x9a\x13\xb8\xda\x0c\xc0\xc8\x8b\x90\xa0\x7b\x5c\xc0\xf0\x26\x02\x50\x9b\x63\x93\xab\x9b\x6d\x4a\xc3\x71\xc9\x5e\xa4\xc2\x73\x67\xb4\x63\x95\xd2\xbb\x99\x89\x08\x08\x2c\xca\x8c\x22\xec\xa7\xe3\x4f\xaf\x8f\x4f\x0f\x5e\xbd\x3d\xfa\xf4\xf1\xe8\xe0\xed\xd9\xf1\xbb\xa3\x25\x51\xf9\x71\xd3\x3c\xe0\xbb\x11\xad\x7f\xa6\x9c\x0e\xf5\x02\x7b\xc5\xe4\x9d\xf6\xbf\x73\x00\x3d\x90\x4f\xd0\xaf\x9c\xef\x37\x00\xcc\xb4\x91\x83\x1c\x3f\xbc\xd4\xf0\x36\xd2\xe6\xb3\x0e\x0a\x3b\x2e\x56\x79\x19\x78\x4d\x63\xf4\xe3\x34\xb0\x01\x88\x45\xdc\xd5\x0e\x82\x5b\x8d\x02\x0d\x22\x6d\xea\xb8\xc4\x6a\xe6\x9e\x68\x4b\x0b\x42\x17\x44\x64\x21\x88\x15\x32\xc2\xb9\xef\x6a\x17\x00\x3f\x90\x86\xfb\x35\x2f\xd0\x20\x70\x7c\x0d\x79\x53\xd0\x2d\x6d\xba\x0c\x5b\xb9\x9d\x01\x31\x08\xad\x5e\xc1\xfc\x56\xaa\x59\x17\xc5\x8c\x74\x45\xb8\x7b\xcb\xd2\xa9\x2a\x70\xce\x8f\x95\x21\xb7\xa3\x48\xb8\x3b\x9d\x4b\xc9\x03\xa8\xc9\x21\x34\x4c\xae\x4c\x1c\x81\xf8\xfe\x30\xe0\x30\x0d\x31\x54\x9d\x60\x37\x98\x0a\xc2\xe2\xd1\xc2\xbd\x15\x83\xed\xe9\x6e\x45\x33\x27\x31\x1b\x7b\xe5\xad\x7e\x8f\x75\x83\xf7\xe3\xb1\xd8\xec\x3c\xb6\xa7\xa2\x69\x53\x6d\xeb\x12\x0d\x5d\x49\x38\xb8\x74\xc4\xa8\x7a\x01\xe4\x06\x77\xb7\xea\xc0\x4d\x28\x46\x12\xb8\x2a\x65\x79\xa2\x70\x56\xd1\x28\x91\x6c\x91\x06\xf4\xfd\x5c\xb6\xd7\x30\x42\xa0\x13\x44\x58\x8e\x46\x1b\x0c\x1b\x9b\x98\x20\x96\x0e\xb0\xb5\xd0\x21\x9a\x37\x51\x37\x3b\x63\xe8\x5c\x12\xb1\x97\xbd\x51\x32\x58\x2c\xd4\x96\xc9\x12\xd8\x88\x7f\x2d\xf4\x26\x28\xed\xcd\x45\x18\xfa\xc0\x09\xe4\xfe\x7c\x9f\x74\x68\x23\x02\xd0\x73\x7c\xef\xbf\x00\x6e\x74\x66\xd0\xbb\xa6\x60\xfc\x65\xfb\x90\x7b\x43\x4c\x7b\x74\x07\x82\xf9\x14\x40\xe7\xc2\xc7\xb7\x58\x97\x00\x0d\xe2\x77\x9a\x77\x10\xa0\x39\x0c\x34\xd4\x7d\x45\xdb\x7f\xc6\x7b\xb4\x58\x98\xa5\x7d\x76\xa9\xcb\xe3\xcb\xec\xf0\x6b\x07\x81\x5a\xbd\xe5\x6b\xb1\xd3\x78\xe1\xa6\x9e\xf0\xc4\x56\x30\x6f\xdd\x32\x3d\x7b\x6a\x7d\x0a\xe6\xb8\xf9\x5f\xec\x1a\x3d\x21\xcd\xaf\xb5\x4a\x23\x04\x53\xb1\xb3\x2f\xaa\xc7\xa7\xa4\xf9\xe5\x3d\x9e\x23\xcf\x8f\x36\x9c\x68\x04\x56\x15\xf2\x92\x47\x04\xbf\x19\x69\x81\x0d\xba\x04\x86\x61\xe8\x1b\xba\xb9\xc6\x5a\x1d\x74\x29\xea\xe7\x3b\xf4\x32\xe8\x46\xbe\x37\x02\xc6\xa6\xd5\x41\x66\x77\x14\x06\x23\x07\x19\xba\x6e\x76\x7f\x0f\xbd\x80\xdc\x34\xd0\xf1\x41\x59\xd0\x25\x14\x5e\xc8\xb3\x77\xe1\x44\x60\x77\xbb\xf3\x7b\xd4\xea\xe6\x12\x1e\x14\xd8\xfa\x1c\x8d\x3b\xfb\x3a\xef\x26\x4c\x76\x5b\x17\x85\xaf\x6e\x11\x38\xc0\x02\xcb\x00\x49\x97\xc1\x8d\x76\x06\x3e\xa3\xd7\x60\x14\xba\x00\x1a\x81\xd9\x75\xc9\x47\x03\x9a\x85\xdd\xbb\x40\xa1\xf3\xb0\xdd\x4b\xe6\xce\xe0\xad\x3e\x0a\x48\xab\xcd\x2e\x20\x1f\x84\x7e\x25\xfd\x1e\xc3\x70\x9a\xf4\x3c\x28\xee\xd5\xc8\xf1\x47\x73\xac\x12\x75\x66\x61\xc4\x12\x25\xb2\x42\xf4\xc2\x89\xbc\x51\xc7\x85\xe1\xcc\x0d\x6f\x82\xfc\x5b\x9f\xd0\x76\x64\xd7\x97\x6c\xc3\x91\xe3\xfb\xf8\x49\x1d\x0a\x1d\x5d\xed\x6e\xe4\xad\xd3\xf9\x57\xfa\x33\x1b\xbf\x37\x1c\x6b\xe0\x65\xb6\x0f\x60\x31\x00\xc5\x73\x47\x92\xe4\x3a\x63\x2f\xb8\x04\x70\x06\x3d\x9a\x98\xb8\x6a\x89\x62\x05\x16\xb4\xff\x75\xfa\xfe\xa4\x4b\x05\xb6\x37\xbe\x8d\x9b\x1c\x5f\xe7\x58\xbe\x15\x59\x9e\x15\x66\x7f\x9a\x9b\x77\xde\xd8\xc0\xb6\x95\x6d\x1b\x91\x4d\x3f\x44\x2f\xe7\xe7\x60\x38\x88\x4c\x13\x4d\x60\x78\x43\x76\xe9\x11\x84\x21\x34\x7e\x4b\x82\xd3\xac\x58\xbb\xd0\x5f\x4b\x9b\x7a\x51\xc4\xea\x43\x02\xef\x32\x78\x03\x6e\x69\x3c\xa8\xab\xbd\x0d\xc3\x2b\xf6\x0b\x0b\x11\x79\x81\xf6\x9f\xdf\xbe\xb9\x03\x8b\xff\xfc\xa6\x5d\x86\x88\xfc\x11\x2d\xfe\xf3\xdb\x6f\xe6\x1a\xdd\x68\x23\xdb\xe7\x42\xd2\xd2\xcd\xee\xd4\x99\x19\x46\x76\x3b\xf2\xd0\xc0\x25\x40\xc6\xdc\x02\xe6\x5a\xdc\x1d\x74\x7f\x8f\x98\x44\xfd\x47\xaf\x69\x4f\x22\x7f\x7e\x59\xb5\xf5\x88\xb6\x9e\x2f\xfa\x85\x19\x7f\xa6\x1a\x88\x6d\xdb\xf3\x73\x34\x5c\x5f\x37\xf4\xbf\xeb\xb6\x6d\x7b\xeb\xeb\x86\x67\xc7\x7b\xc9\xb4\xf0\xaf\xb6\x67\x5a\xc2\xe5\x41\x72\x79\xb8\xbe\x6e\x84\xf2\xe5\xc1\xd0\x0e\xa5\xcb\x01\xbe\x1c\xff\x63\x47\xd2\xf7\x0e\xfd\xde\x19\xda\xd0\x38\xc7\xf7\x91\x77\x59\xd1\x90\x9f\x2d\x23\xd3\x34\xad\xf9\x62\x51\xb8\xc4\x5d\x8f\x03\x05\x57\x7f\x50\x02\x1b\x74\x0f\xc3\x10\xba\x16\xb2\x11\xfd\xb4\xe6\x03\x2c\x7e\x37\xd7\xc6\x21\x34\xf0\xe7\xc8\xde\xfc\x36\xfa\x07\xe8\xfe\x0c\x46\x6c\xa2\xbf\x8d\x9e\x3f\x37\xef\xb0\xa6\x07\x6d\xf2\xfd\x79\x34\xec\x20\xf6\x61\x2d\x78\x6e\xc3\xbf\xc3\x05\xbe\xd5\xb1\xdf\x39\x68\xd2\x8d\xfe\x80\xc8\x08\xcc\xe7\xa0\xfb\x23\xf0\x2e\x27\xe8\x39\x62\x1f\xd8\x1a\xf4\x6d\xe7\x39\xe8\x1e\xb8\xbf\xcf\x23\x84\xf5\xd2\xe7\x48\xf8\x63\xcd\xff\x6e\x73\x7d\xdd\x70\x6c\x3f\x9e\x68\xf2\x50\x18\xce\x03\xd7\xe8\x81\x9d\xbf\x3b\xe6\x46\x6f\x73\xb3\x78\x4c\xc3\xe9\x06\xe1\x3c\xe8\x90\x4c\xe0\x8e\x13\x8c\x26\xab\x42\x3f\x4a\x67\x35\xca\x0a\x03\x64\x41\x5b\x47\x50\x37\xef\xa2\x1b\x0f\x8d\x26\x06\xea\xb2\xcc\x84\x20\x74\x89\xf9\xde\x45\xe1\xdb\xf0\x06\xc0\x43\x27\x02\x86\x69\xde\x8d\x9c\x08\x30\x5f\xd5\x80\x7c\xa6\x1e\x2e\xfa\xd9\x61\xff\x5e\xcc\x11\x0a\x03\x7d\x40\x5f\xb7\xa0\x23\xeb\xd8\xc0\x80\x16\x7f\x81\xd9\xfd\x63\x0e\xe0\xed\x29\x49\xc0\x09\xa1\xa1\x3b\xba\xb9\xe6\xac\xaf\x07\x86\x63\x2e\x16\x6b\x7c\xab\x8b\xe3\x70\xae\x4f\xc3\x79\x04\xf0\x11\xa8\x5b\xf4\xf3\x7c\x46\x5d\x56\xa3\x2b\x7d\x98\x95\x17\x82\xca\xf1\x0e\x5f\x7d\x74\x0d\x02\x64\x00\xeb\xee\x62\x7e\x71\xe1\x83\x08\x9f\x5f\x23\xbc\xbc\x7d\x7e\x9a\x5d\x7b\xe0\x66\x70\xe3\x05\x6e\x78\x43\x0e\xae\xee\x38\x84\x47\xce\x68\x22\x3c\x17\xaf\xd4\xae\xeb\x45\x33\x07\x8d\x26\xf4\x89\x08\x5f\x5a\x61\xce\xc3\x08\x44\xe8\x21\xb6\x12\x82\xb7\xc9\x49\xcc\xde\x6b\x00\x73\x31\xc2\x6d\x36\x02\x3e\x32\x25\x7b\x1f\xb7\x99\x1e\x71\xbe\x17\x21\x10\x90\x54\x8e\xd5\x36\xde\x3e\x1f\x4a\xd3\x46\x5a\xbd\x36\xf2\x9d\x28\xd2\x10\x95\xff\x70\x4e\xd6\x0b\xbd\x14\x4d\xbc\xa8\x1b\xb7\xce\x06\x0b\xc7\x75\xf1\x5a\xb7\xa0\x79\x47\x36\x3d\x3e\x1c\x92\xf3\xde\x8e\xcf\x7b\xd3\xb1\xc1\x1a\xf0\x23\xa0\x79\x63\x03\x0b\x77\x2a\xe7\xc2\xb1\x86\xf0\x4f\x5d\x08\xa6\xe1\x35\xe8\x5e\x78\x81\x8b\x95\x3c\x7c\x25\x79\x20\xb2\x75\xc7\x75\xc9\xb4\xbf\x65\xaf\xd5\x2d\xdf\xd6\xe9\xf5\xf2\xf7\x6b\xb1\x38\x06\xf4\x10\x40\x36\x49\xff\xf6\x6d\x3d\x1c\x8f\x75\x73\x8d\x4a\xb4\x60\x4d\x67\xa6\x57\xdc\xbc\x68\x7d\xdd\x88\xec\xbb\xf3\x60\x38\x80\x0b\x7e\x3a\x7a\x36\x1b\xe2\x2b\x70\x1b\x19\x51\xfa\x7c\x0c\xb2\xbb\x9b\x0c\x03\xd7\x66\xce\xd1\x90\x7c\x61\x29\x34\x9d\x73\x9f\xfd\x06\x17\x0b\x23\xb0\xa2\xf3\x60\x88\x97\xf4\x9a\x63\x1b\xa6\xfd\x9d\x47\xde\x04\xec\xef\xb0\x00\x58\xf0\x75\x25\x8d\x7c\x77\x36\x8f\x26\x86\x63\x5a\xf8\x7a\x76\x4e\x03\x3b\x75\xcd\xd8\x0b\xdc\xe3\xc0\x05\x9f\x95\xbb\x14\xd8\xb6\xed\x08\x27\x68\xea\x66\xac\x17\x8c\x80\x01\xac\x9e\x79\xbe\x39\x34\xcc\xc5\x82\x0e\xb9\x61\xe6\xbd\x4e\x68\x74\xf1\x33\x37\xad\xd4\xf7\xf4\x64\x31\x2d\x50\xbe\x41\x00\x9e\x71\x46\x73\xb2\x11\x3b\xb2\xf3\x77\x09\xff\x8c\x57\x36\xde\xa9\xb1\xee\x02\x4c\xda\xc6\xbb\x05\x75\x5b\x58\xd0\x72\x52\xbb\xba\xf8\xda\xbb\x85\xe5\x4b\x2b\x04\x98\xe4\xd8\x84\xf6\xe6\xb7\xf0\x1f\x3e\x3f\x2e\xe1\xf3\xe7\x66\x60\xfb\xe7\x70\x68\xa1\x2e\x01\xda\xbe\x1f\x1b\x81\xf9\x9d\xbd\x79\x7f\x6f\x38\x58\xbf\x00\x78\xf6\xf9\x88\x39\x0b\xf2\x6e\xbc\x8d\xd8\xb3\x2f\x01\x7a\x7f\x13\xf0\x0d\x7e\x4a\x51\x17\xf4\x04\x8e\xdf\xaf\xbc\xa6\x41\x83\xd8\xe3\x66\x30\x44\x21\xde\x1a\x5d\x9e\xd4\x70\x1c\x1d\xc5\x56\x48\x17\x1b\x11\x78\xd3\x9b\xf8\x68\x8e\x7b\xb0\x88\x7b\xd0\x8e\x58\xf5\xed\x80\x9c\x7f\x64\xb1\x45\xb6\xb0\xc9\x22\xfb\x6e\xc1\x7e\xb8\x1b\xcd\x21\x04\x01\x22\x82\x60\xe0\x2d\xec\xc8\x0a\x6d\x64\x44\xd6\xb9\x2e\xfe\xa2\x0f\xcd\x35\xd0\x75\x66\x33\xff\xd6\xc0\x6b\xcf\x3a\x07\x7c\xdb\xdc\x51\x91\x4b\x1f\x10\x2d\x6c\x60\x79\x36\x5e\x2b\x9c\x93\x23\xbe\x3f\x76\x21\x88\x8f\xf1\xc8\x52\x1e\x9a\x5d\x2a\xe9\x7d\xb3\x8b\x26\x20\x30\x90\xfd\x1d\x5e\x3d\x48\x94\x73\x44\x29\x36\xf9\xc6\x60\x9a\x96\x4a\x56\x46\x2f\xa3\x81\x63\x1a\x08\xab\xda\x41\x17\x7f\x79\x7f\x6f\x04\xf6\x1d\xfe\x34\x88\xb1\xac\x96\xeb\x20\x67\x10\xc4\xd2\xca\x17\xb4\xf4\xa0\x8b\x7f\xbc\xbf\xbf\x5b\x10\x6c\x20\x3e\xe9\xfd\xf5\x75\x03\x74\x47\x73\x18\x85\xd0\x86\x86\xcf\x3e\x5a\xfc\x3b\x3c\x09\x23\x67\x34\x01\x87\x61\x80\x60\xe8\xdb\xbe\xf4\xa7\x05\x08\x75\x1a\xbc\x76\xf0\x2f\xfc\xa3\x69\x75\x7a\xb6\x6d\x1b\xf2\xad\xf7\xf7\xba\x6e\xc6\x2b\x4b\x0f\xc2\x4e\x84\x42\x08\x74\xbc\x5c\xc8\xc6\x17\x67\xc6\x0e\x4c\x2a\x0d\xe4\x13\x3e\x48\x84\xb0\x42\x74\x89\xba\x81\x70\x78\x7d\x80\xe1\xd4\x8b\x80\x2c\xa3\x23\x80\xce\xbc\x29\x08\xe7\x48\xf8\xde\xbc\x0b\x88\x12\x21\x74\xeb\xfe\xbe\x0f\xb6\xa8\x5e\x81\x77\x20\x6e\xd2\x0c\x82\x6b\x2f\x9c\x47\xa4\x49\xb2\x4c\x93\x7e\xb2\x33\xbd\xb2\x3c\xf2\xf8\x85\x15\x0e\xb9\x91\xf0\x8c\x5a\x23\xd9\x01\xf0\xd8\x00\xa4\x8f\x39\x83\x22\x76\xac\x78\xa5\x6a\xc8\x06\x5c\x5b\xbc\x04\xe8\x50\x78\x88\x61\xae\xc5\x6f\x41\xeb\xeb\x8a\x01\x25\xcd\xe1\x5d\x88\x92\x1d\xce\x25\x88\x13\x45\xde\x65\xc0\x65\x0e\x5d\xfa\x06\x48\xae\xb3\x44\x65\x60\xc0\x36\x2f\xb0\x78\x69\x2e\xae\xcf\xdd\x40\x0f\xb1\xcf\x8b\x85\x69\xdd\xa5\xda\xa9\xf2\x5c\xa4\x07\x64\x61\x5d\x02\xf4\x41\x1c\xdf\xbc\xbb\xa4\x49\xc0\xaf\x8b\x16\x16\xe8\x5e\x3b\xbe\xe7\x3a\x08\x1c\xd2\xb5\x0e\x58\x67\xc8\xf6\x7b\xe5\x8c\xae\xc2\xf1\x98\xfb\xab\xb9\xbb\x49\xd0\x87\xb6\xc0\x96\x85\x6c\xb6\x92\xac\xc0\x4e\x96\x4f\x76\xf5\x71\x9d\x47\xd8\x79\xd0\xa2\x70\x2c\x7c\xf8\xc6\xac\x43\x5d\x06\x44\x37\xef\xef\xa5\x2b\xe9\xd7\x04\xea\x49\x04\x7e\x3c\x85\x8e\xc9\xac\x03\xc7\x76\xba\x28\xa4\x9e\x56\xc3\xb4\x9e\x6d\x52\x7b\x80\xe8\x38\x4e\xb2\xc5\x76\xf0\xde\xda\x22\xdf\x51\x21\xbf\xbe\xae\xef\x6c\x6e\xea\xf8\x51\xd4\x40\xd8\xc4\xe6\xad\x33\x90\x34\x3d\x49\xc5\x0e\xa4\xdd\x81\x0c\x48\x76\x07\xd9\x0f\xd4\xae\x87\x8b\xc5\x9a\x72\x2c\x83\x35\xee\x8a\x14\x4f\x4f\xe2\xe7\xa0\xe3\x13\xd8\x33\x07\x46\xe0\x18\x9b\x02\xa4\x9f\xcf\xbc\xe8\xc4\x39\x31\x02\x93\x4b\x43\x7c\x2d\x5d\xb9\xc1\x3f\xd0\xfa\xba\x11\xd8\x9b\xa6\x45\x0c\xbd\xa9\xf3\xd9\x08\xac\x9e\x89\xdf\x9d\x9a\x58\xb8\xc6\xcd\x9c\xac\x84\x50\xca\xca\xba\xda\x05\x91\x69\x0f\xe1\x5f\xe2\xcb\x4d\xb9\xc2\x14\x9e\xa6\xe4\x50\xf4\xb1\xe6\x21\x2d\x1d\x78\x1e\x0d\xd7\xd7\xfd\x6e\x1c\xef\x65\x25\x11\xcc\xb4\x9f\x04\x5f\xd8\x8d\xb7\x2f\x7e\xf4\xfa\xba\x91\xfd\x12\x1f\xb5\x56\xf6\xeb\xf8\xf9\x76\xf2\x2a\x0b\x90\xfb\xcd\xb5\x3b\x2e\xba\x7d\x76\x7a\x21\x2b\x24\xef\xb3\xf1\xc2\xf3\x48\x17\xb8\x28\x02\x46\xc8\x0f\x4f\x95\x92\xea\x02\x1f\x20\xa0\xe1\x9b\xad\xa0\x0b\x01\x1e\x71\x83\x2c\x4b\x7a\xd0\xaa\xee\x49\xac\x80\x54\x9b\xe9\x49\x47\x0f\x42\x6c\xa3\x19\x78\x31\xc4\xcf\xc7\xea\x27\x96\xfe\xb5\x57\x09\xf5\xa8\xae\x7c\xa1\x38\xb1\x54\xf2\x6d\x64\x45\x76\x60\xde\x65\x8e\x48\xbc\x98\xb0\x6e\xc4\x74\x34\x2c\x25\xd9\xe9\x02\x81\xe3\xde\x12\xe4\xbb\xdd\xa7\xdf\xd0\xf6\xdb\x0a\xe7\x2c\x52\x38\x67\xa9\x98\x66\xa3\xe6\x74\x21\x88\x42\x1f\x1b\x03\x8b\x01\xca\xbc\x60\x53\xbc\x80\xcd\x93\x49\x35\xa2\x67\x46\xea\xe2\xef\x7a\xb1\x14\x48\x3f\xa6\xa7\x52\x0c\xd8\xce\x26\x47\xe3\xc2\xb4\x68\x1f\x89\xfd\xb9\xe0\xeb\x08\x1f\x98\x8a\x3b\xb1\x3e\x9c\x3b\x18\xca\x97\x30\x32\x49\x22\xd0\x07\x60\x81\xdf\x90\x74\x26\xf3\x20\xe1\x7c\xf5\x5a\x3a\x5f\xbd\xd2\xf3\x95\x34\x51\x3c\x1f\xb9\x5b\x49\x6e\x1d\x3f\x36\xc8\x61\xa0\xf5\x07\x99\xc6\xaf\x5d\x40\xe0\x5c\xad\xb1\x65\x97\xf9\x7d\x4b\xb4\x42\xf1\x8b\xbd\x45\xb2\x48\x3f\xce\x83\x00\x40\xf9\x4c\x95\x3d\x61\xd8\x2c\xc6\x93\x0f\xf1\x14\xf0\x8d\xcf\x16\x20\x37\xf9\x8d\xc0\x02\x99\x4d\x9d\x2c\x3f\xf6\x18\x6c\xaf\xa6\xbd\x41\xd2\x6c\x2d\xc8\x51\x21\xb7\x0c\x29\x0e\x7a\x49\x71\x24\xe7\x19\x7d\x18\x4f\xe5\xbd\x63\xb3\x6e\xb1\x33\x64\x00\xba\xec\x13\x56\xeb\xa0\xf4\x24\x36\xe6\x20\x3b\xe0\x7d\x3a\xe0\x5b\xec\xe0\x7d\xb6\xc9\xc6\xf1\x59\xaf\x9e\x90\xc9\x64\xfc\x5a\x15\xbd\x47\x05\x8f\xa6\x9a\xe4\x06\x8c\xae\x67\x85\xd7\xc9\xa7\x61\xf9\x85\x33\x18\x7e\xbe\xad\x72\x21\x13\x11\xb0\xda\xdb\xb9\x94\x2d\xbf\x16\xcb\x86\xaa\xd7\x26\x1e\x84\xf2\x6b\x19\xec\x35\x0e\x12\x8e\xc2\x80\xea\xad\x23\xb9\xbb\x20\xb8\x4e\x07\x06\x2d\xe2\x32\xe0\x31\x22\x6b\x6e\x8d\x2c\x97\x2a\x47\xd3\x35\xb6\x7a\x1a\x1c\x12\x61\x30\x02\xd8\x24\x08\xd9\xc1\x60\x03\x12\x0b\x4d\xfe\x22\x73\x66\xf3\x9d\x46\xbc\x6c\x64\xc8\x6d\x22\x78\x3e\xdf\xda\xa0\xcb\x10\xcb\x64\xf1\x9f\xf2\xcb\x38\xd6\x54\xfe\xf6\x3d\x1b\x57\xf9\xdb\x43\x36\x33\xe2\xb7\x54\x14\x58\xc6\xa6\xe5\x76\x41\x70\x6d\x1a\x02\xaa\x96\xa3\x69\x3f\x7d\xfc\xe9\xe4\xe4\xe8\xa3\xce\x5d\xdc\x60\xa4\x0f\xa6\x29\xc5\x28\xde\xa4\x54\x6d\x66\x43\x04\x3e\x23\x10\xb8\xc6\x1d\x72\xa2\xab\x81\xb1\x69\x8d\xba\xf8\x93\x99\x88\x8d\xbf\x1b\xe6\xdd\x38\x84\xc6\xb7\xcf\xf0\xf6\xfc\xd6\xbc\xf5\x80\xef\x66\x05\x0e\xf5\x22\x9b\x5c\x18\x9b\x44\x2d\xd7\xf1\xb3\x74\xb3\x3b\x03\x70\x1c\xc2\xa9\x61\x2e\x98\x68\x24\x8d\xbc\xc4\xdb\xca\x41\x21\xc4\x6d\x75\xa2\xdb\x60\xa4\xa5\x5b\x9c\x56\x86\xab\x37\x86\xb8\x04\x1c\xcb\xb7\xa1\x61\x76\x03\xf0\x19\x5b\x75\xf4\x4e\xbf\xeb\x86\x01\xf8\xd6\x74\x6c\xe7\xc6\xf1\x90\xe6\x53\x1e\x23\xf9\xd2\xd8\xfd\x22\x36\x98\xb4\x31\xbf\xb1\xf8\x8d\x70\x4d\x6c\x1e\x64\xaf\x50\x34\x90\xbf\x01\x2e\x58\x80\x61\x66\x1b\x9b\x56\xc4\x85\xad\x69\x04\xfc\xa3\xc5\x35\x95\x29\x96\xd6\xaa\x15\x32\x63\x22\x79\x8c\x1f\xe1\x25\x8f\x98\xe1\x1b\x54\x0b\x6d\xcc\x6e\xb8\xc0\x37\x84\xc9\x0d\x63\x7c\x83\x6a\xbd\x5e\xb0\x1b\x26\xf8\x86\x79\x41\x23\xf1\x03\x14\xbb\x60\xc2\xee\xbf\xc6\xf7\x3b\xc9\xfd\xe2\x52\xfc\x80\x37\x91\x45\xbf\x21\xe8\x03\xfa\x45\x1c\x8c\xc7\x8f\xa6\x1b\xed\x9a\x3d\xed\x16\x3f\xcd\x4f\x9e\x26\xb4\x81\xef\xcd\x5b\x76\xe9\xa5\xea\xb4\xc2\x12\xc1\xd8\x14\xde\x60\x64\x35\xe1\xc4\x52\xbd\x26\xbe\x44\xbc\xca\xd7\x62\x21\x70\xc9\x1e\xff\x1e\xb7\x04\x26\xcf\xb9\xb4\x2e\xc4\x11\xa1\xa2\xe3\xfd\x9a\x2c\x52\x72\xce\xcf\x99\x74\x64\x73\x0d\x20\xab\x58\xd1\xc5\x44\xb5\xd2\xc0\x4e\xd4\x28\xa6\x57\xc6\xfa\x13\x50\x28\xf7\x81\x61\x5a\xf1\x59\x9f\x36\xec\x88\x41\xa0\xb0\x22\xe8\x4d\x2d\x9d\xfa\x58\x79\x59\x98\x7c\x38\x13\xa9\x9b\x32\xe6\x92\xc6\x41\x9b\x3d\xb7\xc4\x4b\x25\x99\x74\x62\x63\x1d\x03\x10\x4f\x9e\xb9\xb0\x64\x3f\x98\x6f\x80\x2e\x79\x34\x69\x4a\xc6\x73\x14\x58\x11\x3e\x1f\x32\xdf\x43\xcb\xc3\xe3\x21\x4e\x96\x2a\x56\x43\xe7\x63\x7d\x3d\x31\x93\x78\x7c\x46\xf9\x1a\xd5\x4f\xf8\x4d\xc9\x58\x91\x83\x2a\x35\x4c\x63\x69\x50\xa4\xf5\x2b\x08\x7e\x40\xfe\x52\x2d\x07\xb5\x12\x98\x59\x18\x56\x10\xaf\xae\x9c\x25\xa2\x7e\x10\x5b\x10\xb1\xee\x2f\x3d\x67\x61\xe2\x6d\x55\x4b\x83\x4b\x94\x92\x15\x07\xf4\x04\x19\x96\x6c\x45\x85\x81\x28\x78\xb1\x1d\x78\x39\x27\x38\x51\x66\x1e\xc9\x0e\x80\x60\x91\x40\xae\xda\x31\x6b\x50\xa9\x59\x83\x47\xab\xb2\x55\xb3\x95\x31\x57\x7a\xc2\x11\xa8\xf5\x07\xb2\xe7\x5f\x30\x7e\x15\xdd\x1d\x9a\x69\x53\x07\xd5\x9b\x68\xa6\xfe\xae\x1a\x5c\x60\xa9\x5d\x43\x24\x48\x4b\xc3\x9c\xc0\xf2\x6c\x3d\xa4\xb4\xe7\x6c\x06\x79\xdc\x33\xb6\xf4\xfd\xf5\xf5\xd8\x73\x94\xb8\x26\xfd\x98\xaf\xdc\x24\x71\xd1\x00\x3f\x89\x41\xa9\x7d\xdb\xef\x52\x9a\x41\x95\xef\xe5\x59\xf2\x10\x60\xe9\x5e\xf4\x1a\x44\x08\x86\xb7\xc0\xc5\x4f\xca\xfe\xe8\x03\x44\x7f\x4a\xfd\xf2\x96\xa6\x91\xe2\xad\x26\x60\x6c\xd0\xb9\x47\x82\xba\xe7\xde\xd0\x8e\x62\x2d\xd0\x0b\x3c\xc9\x41\x9c\x8a\x50\x43\xc3\x4c\x47\x1b\x1d\x97\x9e\x41\xdd\x4f\x6c\x15\x24\x52\x03\xd8\xdf\xd1\xa6\x44\x00\xd1\xe5\x12\xe7\x31\x5a\x4c\x14\xb3\xc7\x7d\x8a\xe6\x33\x00\x8d\x6e\xb7\x9b\xec\x9e\x85\x95\x96\xb8\x83\x14\x4c\xa0\xa4\x21\xe4\xb4\xb6\x2a\xfa\xcc\xd9\x4d\x99\x50\x40\xaa\x49\x0a\xe9\x5c\xf6\x44\x95\x40\x4f\x3d\x55\x92\x99\x65\xcf\x93\x05\x6c\xea\x49\x19\x0f\x86\xea\x09\x54\xf4\xa6\xee\x4c\x0b\x09\xd5\x8d\xf8\x9a\xf4\x7d\x37\x9e\xef\xb3\x85\x99\x59\x38\xaa\x69\xb5\x24\xdf\x57\x6a\x0e\x79\x50\x9c\x08\x09\xbc\x34\xb9\x10\xbc\x63\x0b\x67\xe0\x5b\xac\x31\x03\xc7\x92\x44\xcd\xc0\x91\x45\xcf\x42\xc4\xe1\xdc\xd5\x93\x3a\x89\x2d\xbd\xe2\xe3\x25\xd7\x55\x2d\xd8\x13\x69\xd4\x67\xac\x59\x64\xe2\x56\xeb\xeb\x06\xb4\x15\xd1\x2c\xd3\xa2\x21\x01\xf8\x32\xd6\x8b\x0d\x48\xf7\x5f\xbe\xdf\x17\xd1\xd9\xa6\x7e\xdc\x01\xd6\x2a\x44\x25\x0b\x60\x89\x19\xd0\x3d\x67\xf1\xe3\x3d\xa5\x09\xf0\xc9\xb4\xe2\x38\x1b\x9f\x75\x98\x28\x5c\xb8\x71\xfc\x31\xb1\xe0\x90\x63\x29\xc2\x83\x0c\xc4\x34\x38\xaa\x0c\xd5\x9b\xd5\xd8\xe3\xb0\xea\x18\x44\x32\xad\x2a\x4f\x99\x37\x36\x8c\xc4\xa9\x7e\x7f\x0f\xba\x57\xe0\x16\x0b\xe4\xcc\xe9\x89\x7f\x30\xd7\xd7\x7b\xfc\x47\xe9\xac\x16\x51\x23\xb4\x83\x46\xf6\x09\xe6\x1a\x8a\x67\x9c\xfb\x03\x63\x87\xae\xca\x9d\xff\xfc\x39\x13\xc8\x52\x50\x35\x47\x1d\x2c\x70\xf6\x2a\x4c\x8a\x45\xac\xf9\x50\x40\x14\x3d\x72\x22\x0d\xc8\xc0\x28\x2c\xd9\x73\xc5\x46\xd6\xd5\x4c\x57\x96\xcd\x71\x79\xf7\xf7\x14\xfe\x46\x7f\x0c\x9c\x29\xb0\xf5\x78\xde\x45\x47\x3d\xd3\x56\x26\x4e\xe0\xfa\x00\xda\x81\x68\x4c\x29\xd4\x36\xa4\xf8\x92\xc7\xff\x99\x67\x9d\x6e\x97\x85\x3c\x1c\x64\xba\x55\x13\xc8\x63\xc7\xb8\xa7\x85\x22\x9d\xed\x99\x3b\xa1\xb7\xca\x23\x25\xee\xb0\xd4\x31\xc5\xb8\x2d\x32\xf2\x41\x96\xf5\x52\xf4\x98\x76\x4a\x5e\x6d\xc9\xc3\xd6\xb2\x41\x86\xde\x33\xdb\x06\x3c\x32\xcf\x9a\x9b\xb1\x9c\x0a\xdb\xca\xfe\x32\x68\xf4\xa8\xd2\x06\x67\xce\x57\xf1\x8f\x4e\x34\xf1\xd8\xcf\xed\x6e\xf8\x1b\xe8\xcc\xe8\xae\x90\xb5\x91\xc4\xfc\x8a\xdf\x80\xed\x2d\x01\xf7\x84\xee\xef\x91\x6d\xdb\x69\x54\x10\x5f\x0a\x3e\xf1\x58\xe1\xa5\x88\x35\x37\x64\xae\xd1\xbb\x20\x91\xea\xea\xa4\x1c\x11\x2f\x45\x51\x4e\x58\xa6\xf0\xb4\x9c\x38\x36\xb0\x16\x37\x08\xd2\x83\x45\x08\x68\x11\xcf\xd5\x02\x66\x6d\x91\x8a\xd6\x07\x2c\xb1\x3e\x62\xec\xb3\x63\x6f\x7e\xeb\xfc\x83\xb7\xed\xdb\xe7\xcf\x1d\xde\x0f\xdf\x0e\xce\x9d\x21\x09\x65\x1b\xbe\xe6\x05\x9a\xf0\x4e\x33\x59\x7b\x8a\x13\x50\x89\xd7\x7a\x0d\xa2\x11\xf4\x66\x58\x98\x20\xcb\x37\xa9\x73\x6f\x4d\x3d\xd3\x42\xbf\x2d\xdf\x02\x2f\x3d\xc3\x37\x07\x91\xe1\x9b\x04\xa0\xc7\xfc\x73\x06\x10\xc0\x63\x1f\xf8\xf5\xef\xc7\x06\xc2\x4a\x0a\x3e\xbf\x88\x7e\x6b\x41\x53\x70\xea\xe5\xdf\x62\x52\x37\x92\x05\xba\x5e\x74\x8a\xc2\xd9\x0c\xb8\x2a\x4f\x10\xc4\x02\x3b\xa6\x8d\x60\x17\xe2\xbb\x22\x40\xf7\xe6\x87\x89\x93\x72\x97\x98\x77\xe4\x26\x90\xfc\x8a\xd8\x0d\x6c\xbf\x9f\x51\x61\xa9\xb8\x67\x24\x5d\xc0\x6f\xfb\x80\x0d\xd2\x6b\xc0\xf7\xad\xea\xc6\x59\xea\x12\x94\x28\x5d\x58\x67\xf8\x37\x70\xae\xde\x39\x33\x2b\x10\xff\x12\xd7\xa3\x70\x48\x22\x6a\xb2\xc4\x83\x88\xbf\x0f\x7d\x80\xad\x62\x00\x91\x41\x75\x98\xc0\xd2\xff\x86\xd7\xed\xdf\x34\x0f\x1f\x21\x33\x4a\x88\xe0\x04\x1a\x19\x13\x8d\x5a\x68\x96\x76\x31\x47\xda\x65\x88\xed\x0c\xd3\x0a\x16\xf1\xfb\x1c\xa2\x99\x50\x14\x62\xba\xe9\x2f\x01\x1d\xb9\x6e\x82\xa9\xa6\xc1\x6d\xf2\x27\x70\xed\x67\x9b\x96\xd2\xbf\x43\xef\x9a\x41\xf2\x2f\x2b\xe0\xbd\xbe\xae\xfe\xde\x30\xcd\x81\x3e\x0f\x58\x11\xed\xc4\x74\x64\x7d\x5d\x5f\x57\xbc\x81\x8f\x03\xd1\x98\xd6\xd7\xa5\x3f\x0d\x81\x7d\x51\x7e\x93\xe6\x05\x91\xe7\x02\x8d\xf5\x52\x23\xbf\x69\x5c\xd5\xd6\xbc\xe0\x3a\x1c\xd1\x63\x0c\x1b\x63\xa9\xb1\x30\x93\x21\xa3\xd8\xc4\x3b\x94\x18\x71\x77\xe4\x51\x74\xa9\x0c\x80\x45\xfe\x1a\x04\x56\xb2\xec\x06\x7d\x4b\x5a\x4f\x03\x60\xf1\x41\x1c\x3c\xeb\x59\x11\x5d\xcb\xf8\x63\x7a\x7d\xe3\xef\x52\x4d\x19\x10\x5e\x10\xe4\x4d\xc1\x29\x72\xa6\xb3\x41\xd0\x8d\x3f\xdf\xdf\xbf\x76\x10\xe8\x06\xe1\x8d\x61\xe6\x26\x7f\x51\xbb\xd3\x8b\xce\xe0\x3c\xc2\xf6\x71\x2c\xce\x7b\x96\x94\x0a\x16\x43\xff\xa0\x24\x56\x83\x44\x82\x21\x7b\xf3\x5b\xf4\x0f\x98\x48\x30\x94\x08\x27\x78\x8e\x86\x6b\x24\xcb\x06\xbf\x2f\x86\x7e\xaa\xda\x02\x2c\x12\x3b\x5f\x24\x43\x1c\x09\x50\x1b\xbc\x05\x04\x19\x40\x14\x12\xba\x92\xce\xc1\x70\x61\x91\x49\xc0\x5b\x4f\xfe\x01\xef\xd8\xb4\x1c\x96\x7b\x97\xbc\xcd\x13\xde\x46\x86\x42\x70\x32\x4b\xcf\x8d\x1d\x55\xe7\x60\xc8\x7d\x3e\x96\x64\x6c\x16\xbf\xd1\x17\x0e\x15\xdc\x2f\x0d\x7f\xca\xe9\x1c\x81\xb6\x10\x63\x5d\xa3\xe7\x77\xce\x75\x74\x41\xd1\x0b\xa5\x35\x96\xbd\x5e\xfa\x19\x37\x76\x3a\x0b\x23\xe0\x7e\x70\xd0\x44\xd0\x68\x94\x57\xaf\x09\x48\x2a\xdb\x06\x2f\xcf\x87\x03\x32\xfa\xf8\xad\x27\xef\x4f\x8e\x92\x97\x6d\xd2\x2f\x0f\x0f\x3e\x9c\xfd\xf4\xf1\xf8\xe4\x9f\x9f\x3e\xfc\x78\x70\x2a\xfc\xde\xa3\xbf\x1f\x9c\x7d\x3a\x3b\xf8\xf8\xcf\xa3\xb3\xe4\x97\x3e\xfd\xe5\xd5\x4f\xaf\x5e\xbd\x55\xdc\xb8\x45\x7f\x4e\x36\x55\xce\x80\x90\xdf\x16\x64\x4f\xe1\x65\xe6\x5c\x3a\x52\xdc\x20\xee\xe0\x1a\xe8\xb2\x7d\x57\x22\xc7\x52\x4f\x4a\x04\x59\xe6\x15\xf4\xad\xc7\x7c\x0b\xd7\x78\x3d\xc8\x1c\x6c\x15\x1a\xa5\x7a\x91\xdc\x3a\x75\x53\xe8\x40\xb2\x9c\x99\x64\x14\x19\xef\x83\x21\x2f\x43\x76\x19\xbb\x29\x39\x09\xca\xee\x4b\xae\x34\x17\x56\x5a\xe4\xdf\x39\xfc\x6a\xf6\x5c\x66\x34\x7e\xa0\xd7\x01\x57\xb1\x78\x99\xbc\x64\xed\x60\x6b\xb7\xb4\x15\xec\x3a\xf6\x9a\x58\x50\x66\x9f\x1f\xff\x44\xaf\x8c\xe0\xe8\xc8\x27\x3c\x4b\x55\xf6\x1d\x69\xdb\x2b\x32\x52\xd9\xcb\x23\xae\xa9\x44\xe9\x4b\xa9\xed\xfb\x8c\x2b\xbc\x6b\x29\xa1\xb3\x86\xa4\x15\xca\x79\x45\x04\x77\x87\x38\xd4\xf4\x99\xd8\xd0\x50\x7c\x6d\x3f\xdb\x64\x43\x40\x5f\xf5\x33\x13\x73\xcc\xad\x9a\x1d\xe4\x28\x75\x29\x30\xef\xc0\xfd\xbd\x38\x6d\x5e\xe0\xc5\xe6\xd2\x62\x91\x73\xd6\x08\x12\x8f\x42\x18\x98\xb2\x1c\x1f\x3a\x7e\xa1\xb6\x6c\x5a\x2a\xd5\x80\x1a\xb4\x82\x6b\x99\x7e\xd1\xe5\x2e\x1f\x8e\x8a\x95\x15\x4d\xb1\x29\xe2\x0d\x82\x6a\xcd\x14\x57\xf5\xaf\x96\x6f\x16\xa6\x3e\xe7\x20\x5f\xca\x30\x35\x95\xec\xb5\x15\x70\x69\x64\x1c\x31\xe6\xdd\x62\x2d\xa8\x18\x81\x49\x5b\x6c\x4a\x43\x28\x28\x0d\xc3\xe4\x78\x79\xc5\x44\xfd\x4d\x0b\x25\x06\xa6\xc9\xf4\x05\xf3\x5b\xf2\x7d\x5a\x8d\x37\x8d\x80\xf8\xf5\x12\xbd\x05\x90\x53\xd4\x72\xec\x80\x98\x92\xbe\x1c\xe4\x04\x14\xf2\xfe\x69\x46\x9d\x53\x87\x8e\xef\x5f\x38\xa3\xab\x28\x3e\xe6\xef\xef\x0d\xe5\x05\x04\xb4\x8a\x16\x74\x2b\x9c\x43\x62\xa9\x31\x30\x32\x48\x29\x47\x71\x5a\x0c\x7a\xfe\xdc\x04\xb6\x7f\x8e\x86\x16\x10\x5c\x2b\x24\x3b\xb2\x92\x5f\x9f\xfd\x51\xe2\x71\x8f\xd3\x05\xe9\x3d\xe3\x31\xbd\x29\x4e\x14\x5c\xe0\x81\xa7\x31\x88\x8f\xa7\x3f\x7f\xa0\x8b\x9c\x0e\x5f\x77\xea\x7d\xf6\x02\x43\x58\x03\xe6\x1a\xcd\xc3\x0d\x04\xa6\x15\x58\xb6\x07\xf0\xd2\x8d\x8b\x04\x74\xc6\x0e\x5e\x12\xab\x0f\x58\x21\x5b\x27\x1c\x9b\x1d\x08\x2e\xbd\x08\xc1\xdb\x01\xe1\xb7\x16\xe9\x3a\xfc\x30\xbc\x9a\xcf\x04\xa0\x49\x76\xc1\xe1\xd9\xbe\x04\xe8\x00\x21\xe8\x5d\xcc\x11\x30\x74\xcf\xa5\xd8\x79\x14\x63\xc9\xcf\xd1\x90\x78\x61\x14\xe4\xe8\xc9\x20\x78\x51\x27\x9c\x23\x6c\x6e\x3c\x08\xc0\xdb\x0d\x47\x44\x07\x25\xe7\x09\x48\x40\x42\xcf\xd0\xfd\xfd\xb3\xa0\xcb\x6b\xce\x1a\xc8\xb4\x1c\x1b\xd8\xc4\xf3\x02\xc4\xaf\xd7\xf8\x41\xb0\xbe\xfe\xcc\xa9\x0e\x22\x0c\x42\x38\x75\x7c\xef\xbf\xa0\x53\xe6\x57\x4a\xe7\xc9\x51\x2a\x9f\x54\x7a\x5b\xa5\xa4\x34\x58\x9a\x94\x46\xdd\xfe\x30\x1b\x47\x4c\x9c\x52\x65\x7e\x12\xdc\xc6\x6e\xa2\xbd\x93\x40\x61\x40\x92\x22\x99\xde\x4f\xc0\xa2\x7c\x49\x24\xa6\x04\xed\x6b\x08\x0d\xda\xbf\xde\xb7\xc1\x3f\x62\xfb\x80\x4b\x82\x80\x27\xb8\x3b\x36\xb5\xe0\xe3\x2b\xce\x83\xe1\x4b\xf1\x8f\x01\x16\xc9\xff\xd3\x7f\x89\xd8\xb0\x18\x0e\xc9\xd1\x50\x27\x31\x93\x46\x5b\xce\x39\x22\xa9\x9e\x83\x92\x1e\x46\x2f\x55\xab\xcf\x03\x91\x01\xac\xb2\x5b\x0d\xc7\x34\x07\x42\x9b\x72\x1a\x94\xb7\xbc\x51\xd9\x0b\x0c\xc7\x42\x34\x9c\x11\x33\x77\x88\xfe\x11\x09\xb9\x87\x88\x7b\x4c\xd9\x19\xfa\xae\xf8\x30\x92\x69\x4e\x0a\xb5\x8e\x01\x38\x47\x43\x3b\xb0\x40\x4b\xa9\x86\xc8\x82\x04\x15\x21\x26\x52\xf0\x10\x50\xe2\x93\xe4\xa9\x25\xd4\x43\x10\x18\x81\x71\xb7\xb0\xa0\x69\x91\x6a\xbc\x03\x60\x31\x70\xc3\xa2\x42\x94\xe7\x8f\xc8\x79\x28\xc9\x2b\xc8\x1e\x45\xc8\xce\x16\x20\x51\x32\x41\xc0\x81\xef\x1b\xa8\x42\x57\x22\xef\xc2\x5f\x59\x09\x18\xf9\xd8\xa4\xc9\x44\xf4\x04\xff\x36\xb0\x03\x82\x7c\x3c\xa5\xef\xff\xd6\x64\x61\x8b\x80\x30\x29\x9c\xdd\xce\xc0\xfa\x7a\x90\xc3\xaa\x80\x05\x6c\x7c\x5e\x14\xf6\x10\xb8\x1e\x0a\xe1\x86\xef\xb5\xed\x94\x57\xf7\x90\x2e\x46\x11\x9f\x45\xce\x3b\x66\x0d\x74\x11\xf4\xa6\x86\x19\xe7\x78\x01\x8e\x52\x7d\xeb\x61\x2d\x1f\x6f\x48\x8b\xa7\x68\x11\x08\x45\x01\x28\x3f\x5e\x16\xf8\xf9\xcc\x92\x8a\x5e\xdd\x9e\x39\x97\x64\xb8\x88\x02\x14\xaf\x1c\x0b\xd9\x87\xa1\x0b\xde\x79\x24\x02\x9a\xc4\x5b\xe9\x59\x0e\xe0\x8f\xc0\x9f\x01\x68\xe8\x74\x98\x74\x38\xbf\xb8\xd5\xad\x2c\x8a\xff\x7c\x88\x87\x5a\x48\xe4\x85\x96\x43\x67\xd5\xb7\xcf\xbb\xdd\x2e\x30\x74\x2a\x62\x74\x73\xb8\x96\xa4\x38\x8d\x71\x5b\x14\x01\xdf\x0e\x89\xdc\x74\x23\x38\x8a\x33\xe1\x7e\xdb\x18\x85\x2e\x98\x92\x76\x6e\x4c\x43\x17\x6c\x7c\x73\x07\x17\xe4\x7f\xdd\xdf\xa3\xdf\x48\xfa\x00\xea\x3a\x73\xbc\x1a\x1c\xf7\x5d\xe8\x02\x9a\x86\x1f\xbd\x74\x0c\x73\x60\x64\x9b\x61\x21\xac\xd7\xf9\xe7\x9b\x43\xca\x6e\x2f\x77\xcb\x21\x83\x6e\x0a\x99\x71\x6c\xd8\x93\x8c\x03\x3a\x2f\xb9\xeb\x8b\x1e\x81\x2a\x7c\xff\x34\x00\xd3\x30\xf0\x22\xb4\x41\xb9\x82\x97\x37\x30\x9c\xc0\x7d\x1f\xaf\x08\xfe\x67\x92\x5d\xaa\xcc\x8e\xe0\x90\x6b\x5a\xc4\xde\x00\x66\x17\x02\x77\x3e\x02\x86\x01\xac\x73\x64\x05\x43\xd3\xfe\xce\x20\xd2\x58\x91\x47\x14\xbc\x0c\xc0\x8d\x76\x0a\xf8\x51\xc4\xfd\x93\x26\xf5\x90\x02\xd3\xba\xa3\xb0\xca\x38\x08\x61\x7f\x27\x47\x8e\x82\x74\x43\xd8\x13\xe2\x56\xe0\x15\x14\xf7\xc0\xb7\x05\x02\x08\x67\xf8\xf2\x7c\x38\xc0\xff\xf2\xa7\x73\x55\x9f\x50\xca\xb0\x94\xc3\x00\x5f\x07\xcf\x9d\x21\x99\xf9\x84\x53\x8c\x64\x05\xb3\x62\xd9\x06\xbe\xc8\xe2\x5d\xf1\x4d\x73\x38\x88\xef\x48\xbe\x1d\x9a\x16\x5c\xd0\x0e\x41\x2b\xc0\x5b\xe6\xbb\x1c\x30\x7b\x6a\x4c\x11\x71\x58\xc0\x5b\xc3\x38\x47\x16\xc4\x03\xca\xb2\x4a\xb1\x26\x9b\x8f\xa5\x70\x5e\x3a\x04\xd3\x30\x80\xdd\x28\x9c\x02\x03\xd9\xdf\x61\xdd\x82\xac\x0e\x13\xb7\x02\x59\xd0\x02\x25\x34\x29\x58\x78\x6c\x5c\xcc\x3d\xdf\x4d\x53\x2f\xb2\x14\x07\x4a\xfc\xcc\x0a\x8b\x29\xee\x15\x2f\x48\xdd\xd2\x61\xf9\x9a\x5e\x18\xa8\x6c\x6b\x6c\x86\xe0\x47\x74\xf0\xe9\xd9\x11\xca\x75\x2b\x12\x27\xda\x3a\x0a\x7d\x0b\xd9\x09\x94\x3b\x4b\xdf\x61\xeb\x3a\xd3\x04\x78\x6a\xe9\xdd\x82\x19\xa6\x78\xbd\xc4\x32\xe9\x8e\xe6\xde\x93\xd2\x6f\xf8\xec\x0f\xac\x4b\x80\x08\xf7\x6e\x0e\x1c\x89\xd4\xeb\xb7\x22\x80\x5e\xe3\x1b\x15\xfa\xae\xbf\xbe\xfe\x8c\x20\xc8\xbb\x5e\x44\x79\xec\x10\x49\x97\xb7\x01\x09\x09\x72\x93\x30\x81\xa5\x91\xca\x08\x16\xa2\x11\x68\xe2\x39\x92\x1f\x2d\xbf\x1f\x5f\x4d\xac\xd8\x81\x62\x8f\x3b\xe7\xe4\x90\xc1\xed\x37\xcc\x21\xc3\x19\x2c\x2c\x1a\xd5\x4e\x9b\xfe\x49\x8a\x83\x13\xab\x48\x96\x6f\x23\x23\xb8\xbf\x77\x48\x3f\x4d\x2b\xb2\x89\xc0\xf4\x6c\xff\xbc\x37\x24\xe3\x17\xda\x10\x1b\x0f\xd1\x33\x06\x2b\x88\x5f\x47\x74\x2e\x16\x44\x8f\x8c\x48\xce\x05\x24\x09\x18\x91\xd9\x15\x5a\x82\x85\x45\x68\x87\xe7\xd1\x90\xe5\x20\xcc\xe3\x07\xe2\xfe\x1b\xa6\x35\x52\x85\x5d\xe7\x5d\x14\xfe\xeb\xf4\xfd\xc9\x4b\xfe\xc1\x30\x07\x22\xa9\x19\x1d\x4e\x33\xfe\x91\x84\x76\x45\x91\x33\x32\xbb\x5e\x30\xf2\xe7\x2e\x88\x0c\x4f\x08\xf1\x26\x6c\x67\xde\x73\x5d\xe3\xab\x58\x73\x43\x10\x05\x7f\x43\x1a\xf8\xec\x45\x48\x37\xd7\x68\x0a\x35\x1f\x2f\xdb\xb1\x00\xa1\xc8\x72\x25\x66\x35\x8f\xbc\x56\x5e\x05\xae\x79\x7f\x1f\xab\xa4\x21\x01\x40\x66\xc8\x6b\xf0\xd7\xc4\x8f\xb2\xbe\xce\x50\x9a\x36\xbd\x96\x7c\x99\xe6\x93\xa2\x11\x02\x77\x7d\xdd\x70\xed\xf3\xa1\xb9\xe6\x9e\x3b\x5d\xc6\x5c\xfe\x52\xc7\x06\x14\xed\xb6\x3e\x60\x14\x3b\xec\xcf\xa1\xe1\xd0\xb8\xb4\xb8\x14\xe7\x96\x67\xb9\xe6\x82\xd0\xfa\xc4\xa2\x37\x7e\xdc\xfd\xbd\x4e\x4e\x03\x9b\xdd\x29\xb7\x64\x7d\x9d\x90\xf2\xe4\xfd\xfc\x52\x7e\x0b\x7f\xf9\x20\xfd\x35\x7b\x97\xcc\xce\xc0\x33\xc5\x0d\xe2\x8d\x89\x54\x8c\x89\x2a\x74\x9a\xb4\x90\xba\x30\xa4\xde\xa4\xd8\xd9\x10\x31\x62\x85\xa2\x4b\x0c\xbe\x21\x47\x3e\x70\x44\xb7\x0f\x91\x2a\xb9\xaf\x06\x2f\x19\xc6\x10\x38\x10\x40\x1b\x50\x44\x33\x93\x17\x86\xf8\x9b\x01\x4c\x33\x69\xc1\xc2\xa2\xd5\x98\xd2\x2f\xca\x23\x61\x12\x07\x89\xde\x89\xf0\xeb\xd6\xe4\x2f\x0c\xb9\x9b\x26\x91\x5c\x3f\xd3\x31\x0d\x61\xa4\x92\x21\x7e\x2c\x36\xf8\xd8\x0f\x32\x19\x21\x20\xb5\x55\xf3\xcf\xb6\x24\xd7\x1f\x2b\xb9\xc9\x6c\xb2\x57\x38\xae\x4b\xf6\x5c\x85\x57\x28\x1f\xce\xef\xc7\x0f\xe7\x9f\xd3\x20\x51\x2c\x7b\x54\x1d\xe5\x01\x36\xfc\x9e\x81\x43\x62\x6c\x13\x47\x39\x24\x09\x9b\x03\xbe\x4a\xe0\xde\xa0\xe3\x6c\xf3\x0f\x54\xd7\x8e\x4c\x2b\xea\x92\xb5\x6a\xb3\x7f\x93\xef\x17\x42\xb2\xed\x21\x3f\x5e\x65\xd5\xde\x97\x32\xc5\x79\x1b\x88\x17\x36\xbe\xc3\xa4\xb9\x43\x42\xce\x8f\x63\x5a\x8e\x75\x17\x9f\xd8\x83\x38\x37\x4a\xca\xa2\x4d\x5e\xe9\x97\xea\x12\x82\x3e\x50\xa4\x4d\xac\xc2\x5f\x4e\x20\x7a\x41\x0c\xd2\x43\x5d\x22\x2a\xe2\xc6\xdf\x25\xb2\x4d\xb0\x26\x13\xca\xb0\x44\x12\xd3\x03\xf6\x13\x6b\x6d\x57\x7f\x0e\xcc\x97\x46\x90\xb9\x00\x1f\x19\xe4\x47\x2b\xb0\x83\x97\x41\x17\x85\x54\x64\x9b\x83\xf3\xa1\x39\x08\xe2\x95\x88\x95\x66\x46\x35\xcc\x7d\x54\x06\x3b\xb7\x89\x1c\xd3\xf5\xe7\x80\x20\x9a\x04\x71\xdb\x7e\x0b\xe3\xa7\x04\x58\x2d\x16\x5a\x9b\xd7\xd4\xd8\x47\x1f\xc4\xd6\x15\x32\xbf\x25\x36\x17\xc4\x96\x35\xe3\xf2\x82\x56\x4f\xd1\x97\x45\x29\xf3\x77\xa2\x04\x82\xe0\xda\x83\x61\x90\xe6\x33\xff\xea\x9f\xfc\xea\x9f\xfc\xea\x9f\xe4\x47\xba\x85\x58\x10\xd5\x82\x82\x43\x4f\x45\x80\x93\x60\xd3\x48\xb1\x26\x96\xd9\x8a\xc7\xea\x18\x81\xa9\x48\x0c\x4e\x4e\x32\x3b\x78\x49\x45\xc3\x20\x58\x10\xca\x35\xe2\xd5\x24\x89\x13\x24\xd1\xf9\x90\xf4\xd3\xb4\x08\x01\x32\xe1\xf1\x31\x60\x8a\x49\xf4\xb7\x73\x52\x73\xe0\x9b\x3b\xd0\xa5\x55\x48\x3e\x40\x30\xf6\x3e\x2f\x3a\x74\x8c\x86\xbf\x99\x5d\x04\x3e\xa3\x43\x9a\x0f\x61\x12\xfb\xa0\xfb\xd3\x31\x7d\x32\x21\x29\xf3\x6c\xa8\x74\x43\x25\x8e\x18\x2b\xb4\xbd\x73\x8f\xed\x80\x4e\x6f\xd8\x8d\xe0\x88\x58\x16\xf3\x98\xca\x58\xb6\x51\x08\x32\xd5\x72\x2c\xcf\x1a\xf1\x0c\x7b\x96\x2f\xc6\x73\xd1\x4f\x4e\x3f\x1c\x1c\x1e\x9d\x7e\x3a\x3a\x39\x78\xf5\xf6\xe8\x35\x27\x4f\x4d\xce\x6d\xbf\x8b\xdb\x10\xcd\x9c\x11\x88\x8e\x28\x8b\xce\xfa\xba\xe2\xcb\x35\xf1\xa9\xa7\xa7\xef\x8b\x9e\x78\x7a\xfa\x5e\x78\x54\xf2\x97\xf4\x8c\x83\xc3\xb7\x85\xcd\x3a\x38\x7c\x2b\x36\x48\xf8\x53\x7a\xcc\x87\x83\x8f\x67\xc7\x67\xc7\xef\x4f\x0a\x1f\xf6\xc1\x81\x88\x90\x99\x8b\x8f\xcc\x7c\x29\x3d\xf8\xf5\xc1\xd9\xc1\xe1\xd1\xc9\xd9\xd1\xc7\x4f\x6f\xdf\x1f\x1e\xbc\x8d\x1f\xeb\x77\x49\x19\x34\xac\x7b\x8d\x40\x80\x00\xcc\xbb\xed\xc3\xc7\xe3\x77\x07\x1f\x7f\x15\x6e\xfc\x00\xbd\xa9\x03\x6f\x73\x6e\xfd\xe9\xf8\xd3\xe1\xfb\x93\x1f\x8e\xff\x19\xdf\xe1\xd8\x77\xac\x0a\xd5\x80\x76\x06\xaf\xa2\x20\x26\x1a\x78\x77\x74\xf6\xf1\xf8\xf0\xf4\xd3\x87\x8f\xef\x7f\x3e\x7e\x7d\xf4\x51\xc7\x86\xa1\xf2\xe7\x5f\x7e\x8d\x47\xc7\xb4\x9c\x2e\x7b\xa8\x70\xed\xe9\xd1\xc7\x9f\x8f\x0f\x8f\x3e\xbd\x3e\x38\xfd\xf1\xd5\xfb\x83\x8f\xaf\x3f\xfd\xf4\xf1\xad\x6e\x5a\xde\xfa\xba\x11\x75\xa7\x00\x41\x6f\x14\x7d\xe2\xa5\x3e\x6d\xcf\xb4\x46\xe9\x5f\x3e\xdf\x7e\x62\x34\x4c\xf6\x48\x78\x09\xb9\xcc\x75\xa2\xc9\x45\xe8\x40\xf7\xd3\x1c\xfa\x9f\xe2\x82\x3d\xb6\x63\x5a\x91\x34\x06\xaf\x0e\x4e\x8f\xf0\x40\xe0\xb7\xf3\x51\x08\x85\x1a\x07\x49\x3d\x83\xbe\x50\xc4\x40\x7a\xc4\x8f\x67\x67\x1f\x70\x9f\xcf\xde\x1f\xbe\x7f\x9b\x5a\x0c\xb6\x6d\xcf\xd7\xd7\x8d\xb9\x24\x4c\x24\x5e\x5b\xe6\x6c\x76\x02\x9a\x74\x76\x44\xfd\x57\xaf\x6e\xcf\x6e\x67\xc0\xd0\x21\xa0\x79\x0a\xba\x49\x1d\xb6\xc8\xfe\x8e\xef\x5e\xdb\xb6\x51\xd7\x0b\x3c\xe4\x61\x89\x42\x5d\xf3\x24\xc8\x49\xfd\x05\x58\x04\xa4\x99\x72\xef\x16\x8b\x85\x11\x9a\xa6\x35\x27\x4e\xfe\x1f\x09\x90\x0b\x85\x23\xc2\x2e\x38\x41\x68\xb6\xd1\xeb\xf6\xf4\x6c\xe7\xde\x1d\xfc\x82\x57\xca\xc9\xd1\x21\x59\xf8\xfa\x80\xed\x7d\x28\x4c\xa8\x3c\x0a\x29\x56\x35\x98\xb0\xaa\x4d\xfa\xba\x39\x50\xfe\xf0\x47\xce\x0f\xd1\xcc\xbd\xd5\x4d\x36\xae\x31\x99\x0e\x1b\xc0\x9d\xc5\x62\x61\x09\xc0\xe9\x58\xc1\x8b\xe9\x63\x04\x4d\x88\x89\x2a\x17\x5c\x03\x3f\x9c\x11\xdd\x88\x12\xb9\x45\xc8\xb9\xc4\xd6\x3f\xfd\x6b\x14\x5e\x03\x92\x29\x42\xff\x44\x20\x42\xfa\xc0\x1b\x1b\x12\xa5\x1d\xec\x8e\xc2\xf0\xca\x13\x98\x5f\xf9\xaa\xf9\x96\x4c\x16\x51\x72\x80\xfd\x9d\x8e\x8d\x71\x60\x72\x1e\x57\x7a\x92\x9c\x23\xab\xdb\xed\x06\x43\x1b\xf0\xe8\x03\xbb\xd7\x8e\xab\x6a\x9c\x23\x2b\x60\x0b\xce\xd6\xcd\xe1\xc2\x5c\x18\x89\x83\x56\x90\xca\xd4\x5f\x1c\xe7\xf2\xca\xd2\xf8\xf8\xe4\xec\x2d\x95\x26\x47\xfa\x00\x74\xb3\xdf\xda\x8c\x05\x2f\x30\x65\x47\x81\xc8\x76\x21\xde\xf5\xfa\xe8\xd5\x4f\xff\x4c\x3f\x8a\x7c\x69\x3f\x7b\x26\x9c\x66\x39\x8f\x55\x3d\x57\x90\xcb\xc2\x83\x45\x69\xdd\xf8\xd1\xf2\x61\x24\x3c\x3d\x75\x4a\x35\x7e\x41\x72\x2e\x09\x0f\x17\x0e\xab\xc6\x0f\xce\x9c\x32\xc2\xf3\xb3\x27\x50\xe3\xd7\xa8\x24\xb6\xf0\x26\xa5\x40\x6f\xfc\x32\xe1\xb8\x89\xdf\x10\x7f\x67\x0b\xcf\x0c\xcc\x14\x71\x16\x55\xfc\x12\xbd\x93\x84\x38\x12\x06\xd0\x00\x6b\xd7\x22\x50\x85\x5f\x88\x3f\xa7\x61\x2f\x34\x19\x47\xbd\x5d\x54\xe5\x29\x07\x39\x17\x1c\x9c\x1c\xfe\xf8\xfe\xe3\xa7\xd3\xa3\xb7\x54\x2a\x72\xc1\xaf\x1a\x1d\xc7\x40\xe6\xfd\xfd\x66\x7a\x8c\xee\xef\x5d\x03\x99\xe9\x31\x4a\x53\xf9\xc4\x67\x33\x79\x88\xea\x0e\x3e\xaa\xc5\xda\x44\x99\xd2\x90\xaf\x2b\x15\xea\x77\xb9\x6a\x5a\x99\xd2\x94\xb3\x0e\xa9\x62\x91\xf7\xab\xb0\x4a\xa5\x17\x2b\xb5\x89\x41\xee\x41\x5f\x70\x7c\x97\x1f\x7e\x6c\x3e\x5c\x32\x1f\x23\xca\x28\x9c\x3a\x95\x5c\x1a\xe4\x2f\x33\xd2\x15\x91\x9a\x95\x17\x8f\xf1\xc6\x06\x0b\xf1\xc6\x07\xec\xb9\x2e\xf0\xc7\x4d\x89\xca\xb0\x61\x74\xff\x6e\xfe\xe7\x9c\xfc\x7f\xb8\xc1\xb5\xa0\x5e\x7c\x38\xe9\xba\x05\x86\x85\xfd\x9b\x90\xe8\x35\xad\x8d\xd3\xf1\xc6\x0f\x5a\x1a\x47\x45\x65\x2c\x06\xc8\x05\xb7\xb1\xc6\xa3\xaa\xe7\x9b\x43\x3c\x2a\x2f\xf1\x87\x01\x32\xf0\x3f\x16\x2c\x9b\x44\xa2\x33\xd1\x2f\xdb\xed\xdb\x8f\x47\x07\xaf\x8f\x3e\x9e\x7e\x3a\xfd\xf5\xdd\xab\xf7\x6f\xed\xe4\x8b\xd7\xc7\xff\x3c\x3a\x3d\x13\xbe\x38\x7b\xff\xe6\xe8\x44\xf8\xfb\xf8\xe4\xf5\xd1\x2f\xe2\x0d\x47\x3f\x1c\xfc\xf4\xf6\x0c\x6f\xe9\x4f\x1f\xde\xbf\x3d\x3e\xfc\x55\xfc\x31\x96\x03\xc2\x97\x27\x07\xef\x8e\xc8\x2e\x17\xbe\x8b\x37\x70\x12\xe9\xce\xfe\xa4\xff\xd2\x39\xa4\x03\x14\x5b\x3a\xfa\x9a\xea\xb9\xc9\x85\xb1\xd9\x27\x5e\x28\xb4\x2a\xb9\x32\xb1\x61\xa4\x4b\xb3\xbd\x13\x6e\xa1\x0b\xa4\x73\x30\xf2\x3b\x1f\x42\xdf\x1b\xdd\x8a\xb7\xd2\x81\x4a\xae\x26\x9c\xfe\xe2\x05\x74\x64\x93\x0b\xce\xc2\x2b\x20\x75\x88\xcd\x45\x72\x05\x33\xc6\x7f\x74\xa2\x89\x78\x1d\x9b\x44\xfd\xd3\x27\xba\x54\x3e\xcd\xbd\x4f\x78\xe5\x7c\xa2\x25\xcc\xa3\x4f\x9f\xf4\xf2\x45\x46\x49\x08\xd9\x1d\x2b\xde\x48\xd9\x4d\x23\xaa\xb9\x0a\x25\x94\x7b\x4d\xce\x03\xac\xd7\xc2\xa1\x8d\xb8\x42\x3b\x48\xca\xc4\x41\x11\x29\x00\xce\x03\xa6\xfa\x0e\x6d\xc8\xf4\xdc\x81\xce\xc1\x38\x84\x6d\x80\x84\xfd\x2b\x6c\x3f\x3a\x32\xc4\x7b\xd2\x21\x65\x63\x57\x5f\xdf\x83\xd6\x4d\xfb\xe9\xe3\xf1\x21\x87\xfc\x66\x86\x4c\x43\x52\xe1\x8a\x14\x3c\x21\x50\xe8\xf2\x81\x75\xee\x58\xfe\x50\x00\xcc\xd9\xb6\xed\xc7\x8a\x0d\xab\xb3\x01\x0c\x27\x55\x9e\x89\xfa\x8e\x8d\xc8\xfe\xed\x9b\x3b\xb8\x38\xff\xe6\x2e\x5a\x0c\x7f\xa3\x5c\x0f\xf8\x01\x2f\x03\x5e\x2b\x29\x32\x07\x9c\xba\x26\x8e\xdb\x08\x3f\x23\xc3\xb7\x22\xd3\x1c\xc4\x5f\x90\xc2\x56\xf6\x37\x77\xc0\xf0\xcd\xc5\x6f\xe6\xc2\xb4\xce\x87\xdc\x08\x5e\xd7\x6b\xcc\xcd\x1c\xb6\x2c\x1e\xd5\x38\xaf\xac\xa4\xc7\x8b\x91\xd3\x89\xf7\x92\x5a\x03\xa9\x92\x23\x96\x6f\xde\x91\xb1\x26\x24\xd9\x74\x5d\x9e\x22\x07\x12\xca\x0c\x72\x58\x26\xde\x7a\xfd\xa5\xce\xa8\x18\x1c\x52\x42\xa9\x9f\xbd\xe2\x3f\xc1\x7f\x02\xc2\xf1\xe3\xd8\xdb\xaa\x5f\xf1\x6f\xdb\xcf\xf8\x03\xb6\x78\x01\x15\x81\x6c\xda\x1f\xbe\xc4\xff\x1b\xe8\x3a\x37\x63\x1d\x66\x4c\xf7\xb8\xe9\xcd\xcd\xeb\x6c\xd1\x95\x01\x5e\x23\x91\xa8\x80\x6b\x72\xf4\x3b\x32\x07\x91\x1d\xa5\x06\x21\x1e\x3e\x5d\x7f\x0e\x28\x8b\xbf\x54\xb6\x71\x21\x71\x3f\x35\x68\x44\x66\xe5\xe1\x6b\xf0\x9a\x14\x9f\xbc\x1d\x73\xa9\x73\xf9\x41\x07\xf3\x7c\x93\x2b\xf5\xbf\x7d\x73\x17\x2c\xf0\xba\xfc\x6d\x61\xf2\xe6\xc5\x62\xa3\xc2\x8a\x64\x14\x25\xab\x58\x8c\x52\xc8\x0c\xc5\x21\x33\x12\x08\xcd\xe3\xb6\x88\x43\x56\x31\x69\xbd\x0d\xc4\x38\x4f\x4e\x15\x69\xa1\x43\x2b\x39\x11\x0e\xdf\x9f\x9c\x1d\x9d\x9c\x7d\x3a\xfb\xf5\x03\xd6\x02\x0e\x0f\x0e\x7f\x3c\xc2\x4a\xf0\xd9\xc7\xf7\x6f\x13\x0d\x40\xfe\x5a\x3f\x74\x46\x13\xd0\x61\xe5\x2a\xf0\xf9\x27\x3d\x45\x67\x87\x63\xe7\x0c\x2b\x82\xa5\xdd\x9a\x02\x34\x09\x5b\xae\x6c\xfa\xe1\x3d\xd1\x9c\x5e\x1f\xbd\x3d\x3a\xc3\xdd\xfa\xf0\xd3\x59\xd2\x19\xfc\x87\xfe\xe1\xa7\x33\xdc\x70\x76\x85\x4e\xff\xc5\xdf\x90\x5b\x75\xfc\xff\xf2\xa6\x43\xf0\xc7\x3c\x55\x21\xab\x2a\x63\x70\x26\x82\x2b\x86\xb0\xfe\xc4\x01\x3a\x28\x06\xe8\x90\xdd\xfb\x16\x65\x03\x74\x28\xa9\x90\x97\x0e\xd0\x21\x31\x40\x87\x48\x80\x0e\xfd\x4f\xff\x25\xcf\xdf\x32\x60\x41\x80\xce\xa1\x48\xf5\x87\x08\xd0\x41\x7c\xb8\x26\x6d\x6a\x3d\x40\x07\xf3\x03\x74\xce\x17\x13\xa0\x93\xa4\xa8\x2f\x00\x0f\xd8\x05\x69\x49\x8a\x3b\x45\x65\x29\xe7\x90\x9b\x43\x9f\xf3\xf4\x7c\xa2\x62\x84\xb3\xfc\x70\x85\xdb\x0e\x52\x7f\x43\x03\x1a\x77\x0b\x2b\xc0\x3a\xa7\x75\xc7\xd9\xe9\xa8\xcd\x3a\xd0\xf1\xd2\xf5\x28\x49\xc2\xc6\xef\x51\x48\x28\xf2\x93\xc2\x30\xe2\x83\xba\x17\xa1\x7b\x4b\xcf\x7a\xce\x7d\xc3\x7f\x3a\x97\x9f\x3a\xb4\x75\x04\x3e\xf3\xdc\xc7\x08\x41\xe0\x4c\x75\x73\xc1\x2e\x4e\x73\xf1\xb0\xaf\x29\x0d\x0f\xe0\xac\x6a\x9f\x27\x90\xf7\xac\x88\xce\x7f\x01\x41\x34\x0b\x09\xdf\xb0\x8a\xc1\x3f\x97\xa9\x89\x12\x4b\x00\xaa\x1b\x01\xe1\x88\x12\x72\x50\x53\x87\x17\x21\xca\x10\xce\xb2\xd4\xcf\xca\xa2\x44\x39\xd4\xa0\x32\xe1\x51\x31\x37\xfd\x28\x0c\x02\xa0\x42\x68\xe2\x21\x5a\x38\x17\x21\x44\x06\xb0\x37\x29\x82\x2b\x3b\xec\x9c\x96\x29\x1e\xfc\xf4\x5c\xb1\x46\x88\x87\xf4\x9a\xc4\xc7\x2b\x36\x80\xe4\xcd\x89\x14\x4f\x71\x4d\xca\xbc\xca\x01\xbd\x01\xea\xd2\x46\x12\x7f\x43\xb2\x17\x0a\x91\x41\xe4\xac\x61\x35\x70\x5a\x3d\x26\x8f\xb1\xe5\x7d\x72\x40\xbd\x6a\x47\x1f\x3f\x1d\x7d\xfc\xf8\xfe\xa3\x0d\xba\x3f\xbc\xff\xf8\xea\xf8\xf5\x6b\xe2\x6d\xf8\xe9\xe4\xe0\xa7\xb3\x1f\xdf\x7f\x3c\xfe\xbf\xa3\xd7\x36\xe8\xbe\x7f\x93\x1c\xa4\xef\xdf\xd8\xfd\x4d\xfc\x41\xba\x66\x7b\xb3\xb7\x26\x3e\x62\x7b\x73\x6b\x2d\xef\x55\x3b\x9b\x9b\xa5\x1d\xff\x3c\x29\xd2\xe2\xbe\xe2\x5a\xbe\xe2\x5a\xfe\xaa\xb8\x16\x95\x25\x0c\x13\x54\x4b\x00\x6e\x0c\x74\x7f\xff\xcb\xbb\xb7\x3f\x22\x34\xfb\x48\x75\x55\x73\xcd\xe9\x86\x01\x91\x4f\x58\xa2\x00\x8a\x81\x13\x1d\x42\xde\xd8\xd8\xce\xe7\x1f\x24\x88\x7a\x06\x77\x3b\xf0\xfd\x8f\xe4\xc0\x89\xc0\x8f\x5c\xa0\x26\xd6\x9c\x6e\x52\x01\x99\xc8\xd3\xef\xb0\xb8\x60\x20\x60\xfa\xcd\x3f\xb6\x37\x37\x05\xe6\x10\x2c\x5d\xaf\x01\x44\xe4\x10\xc5\xd2\x5b\x23\x87\xf0\x90\x13\x17\xd3\x77\x99\x6b\xb0\x1b\xcd\x47\x23\x10\x45\x06\xb2\x80\x68\x56\x89\x9f\xcf\xc0\x67\xc4\xb0\xd5\x90\x51\x27\xc5\xa5\x76\xe8\x83\xf0\x15\x45\x77\xd3\xbf\x29\x6d\xe5\x1a\x24\x5c\x1b\x3e\x40\x40\xec\x92\xb9\xe0\x09\x0e\xb0\x3b\x87\xfe\x9a\xdf\xc5\x3a\xcc\xbf\x3d\x34\x61\xfe\x03\xc3\xb7\xfd\x6e\x34\xbf\x88\x10\x24\xcc\xf5\x1c\x81\x63\x9a\x96\x43\x09\x04\x61\x97\xaa\x2e\x96\x8f\xf7\x60\x42\xd7\x0b\xf9\x29\x85\xa5\x0e\xff\x6c\xdf\xc5\xac\x45\x11\x07\x1b\xc5\x3f\x32\x9d\xe6\x97\x0e\x9b\x6b\xe0\x76\x70\x4b\xf4\x81\x2e\xaf\x01\x7d\x11\xfb\x95\x52\xce\xaa\x48\xd8\x72\xe7\xc0\x42\x43\xd3\xfe\xce\xe9\x46\x00\xb1\x3b\xe9\x34\xd3\x1c\x19\x0b\x76\x2f\xc0\x38\x84\xe0\x14\x04\x2e\x81\xc2\x76\x23\xfc\x09\x12\xd5\xc8\xb4\x9c\x62\x1b\xdd\x0b\x90\xbf\xc1\x6a\x98\x77\x62\x95\x64\xd5\x51\x83\x24\x0d\x9e\xad\xd3\xae\x6e\x76\x67\xe1\x2c\x59\xb8\x9d\xd8\x17\xa2\xc5\x0e\xcd\xdf\xbe\xb9\x43\xc9\x24\xf6\xcc\x2e\x0a\x7f\x9a\xcd\x78\x74\x6f\x21\xfc\xda\x33\x17\xbf\x15\x77\x3b\xfa\x21\x4c\x67\x0b\xad\xc4\x71\xa9\xc7\xac\xf9\xfa\x86\x4e\xd5\x3a\x12\xd9\xe9\xf4\x8a\x53\x9a\xae\xc0\xed\x19\xc5\xb6\x3e\x04\xa7\xc1\x46\xdc\x4a\x83\x20\x5a\x5e\xea\xfa\x00\xf0\xb9\x28\xe1\x88\xf7\xc1\x18\x75\x10\xf4\xa6\x0f\x30\x96\xb8\xad\x49\x19\x02\xaa\x26\x27\xb0\xde\x97\x80\xcf\x3f\x2f\xe7\x6f\x0e\x40\x61\xdb\xa7\xce\xed\x05\xe8\x8c\x1c\xff\x71\xdc\xa5\x42\x0e\x6a\x6e\xf1\x0b\xb4\xbe\x0e\x0c\xd3\x0a\x4a\x69\x77\xa7\x00\x5e\x82\x0e\x49\x24\x89\xf2\x72\x30\xa7\x73\x1f\x79\x9d\xa9\xa3\x70\x7c\x2c\x6f\x41\x26\x5f\x90\x2a\xdb\x56\x60\x3f\xeb\x59\xd0\x4e\x8a\x7c\xc4\x19\x8e\xe4\x50\xd4\xa0\xe5\xe3\xed\x30\xf1\xc6\xc8\x88\xe1\x3a\x86\x4e\x77\xc9\x29\xc5\x96\x9d\x38\x53\xb0\xbe\x4e\x64\x9f\x01\xba\x27\xa1\x0b\x2c\xd0\x3d\xc4\x7d\x3c\x7e\x6d\x5a\xc0\x34\xb9\xeb\x1c\x08\x19\x9d\xf8\x4d\x09\xdd\xfa\x4b\x30\x00\xb1\xc7\x3d\x75\x15\xb1\x4f\x28\xb0\x4b\x78\x21\xa5\x0a\x76\x28\x04\x9d\xbc\xd4\xbc\xbf\x3f\x1f\x0a\xb9\x53\x28\x6e\x43\x92\x57\x4f\x1b\x49\xaf\xb7\x92\x0b\x62\x25\x27\x86\xcc\x83\x85\x75\x3e\x34\x89\x6f\x3f\x41\xb1\xae\xaf\xfb\x02\x86\x49\x22\x92\x3f\xfa\x3c\x0b\x23\x52\x74\x41\x50\xc5\x80\xfd\xdd\x5d\x92\x44\xc4\xaf\x02\xae\x6e\x05\xe6\xc2\xb4\xfc\xe2\xa5\xe2\x05\xde\xd4\xfb\x2f\x78\x17\xba\x60\xe5\x2b\x9f\x8c\xa6\xec\x10\x17\xcb\xa7\x55\x67\xe1\x3f\x01\x37\x84\x4b\x3f\xaf\x60\xff\xdd\xf1\xeb\x81\x74\xcb\xf1\x6b\xdd\xb4\x48\x3e\xa3\xf4\x35\xfe\x46\x27\x32\xad\x70\x90\x82\x30\xe8\x80\xe9\x0c\xdd\x76\x52\x79\x20\x0f\x1d\x48\x8f\x49\x6c\xe9\x4a\x7d\x79\xb7\x18\xdc\x9d\x83\xe1\x00\x95\xc4\xca\x67\x0e\x9a\x70\x46\xf5\x95\x3a\xe0\xc5\x8d\x4f\xb6\xd5\x26\x83\x4a\xb2\x08\xcc\x86\x6e\xbe\x44\x03\x24\x82\x3c\x85\x6d\x48\x8a\x40\xe0\x8d\xdf\xd5\x69\xf1\x54\x43\xef\x76\x69\x4f\x01\xd5\x09\x06\xb4\xe3\xeb\xeb\xc1\x33\xac\x8f\x71\xdd\xed\xfe\x3e\xde\x53\x58\x14\x58\x40\x78\x81\x18\x48\x29\xe0\xd0\x61\x8c\x4b\x2e\xab\x8d\xfb\x50\xb4\xf3\x16\x2a\x2c\xc8\x1b\x88\x85\xf9\x4c\x01\x3a\x41\xc9\xe0\xf1\xd6\x87\x86\x5c\xff\x06\x18\x64\xdb\x07\x24\x67\xba\x70\x55\x40\xef\x72\xf2\xd0\xe7\xb5\x40\x8e\x44\xe7\x8e\x9f\xcf\xd8\x32\x09\xbe\xb3\x37\x13\x71\xe0\x3b\x11\x3a\x8e\x4f\x74\x02\xec\x07\x89\xce\x17\x98\x03\x10\x57\x57\x2a\xee\x66\x38\x47\x5e\x70\xb9\x01\x81\xeb\x41\x30\x42\x1d\x14\x3e\xca\x1e\x8e\xf3\x18\x88\xc5\x13\xce\x11\xe5\xf1\x10\xd4\xde\x18\xef\xdc\xe3\x8b\xb6\x4b\x52\x6d\x89\x85\x34\xf3\x9d\x11\x20\x76\x0c\x89\xc3\x75\xbf\xb9\x03\x8b\xdf\xac\x32\x42\x13\xde\x79\x04\x9d\x20\x22\xb0\x90\x07\x29\xed\x1a\xd8\x84\x49\x86\xe5\xe6\x12\x36\x72\x6c\x4d\x32\x42\x2c\x9d\xf4\x7e\x20\xf8\x76\xb1\x69\xca\x8b\xc5\x91\xca\x98\xa6\x15\x71\x5e\x14\xc7\x8e\xba\x33\x07\x82\x00\x7d\x6b\x92\x2a\xee\x3c\x64\xee\xe0\x45\x6e\x45\xb6\x93\xf0\x21\x40\x70\x0d\x20\xa9\x6f\xa0\xd2\xb7\xce\x81\xd5\xed\x76\xd1\x70\x61\x00\x02\xd4\xbe\xbf\x17\xfd\xcb\xba\xe5\x9b\x0b\x55\xb5\x4f\x24\x60\x96\x0c\xd0\x25\x38\x07\x02\x9e\xa1\xaa\x40\x2a\xa2\x9d\x4d\x97\x44\xe7\xc1\xf0\x25\xfe\xdf\x80\xdd\x1c\x9d\x07\x43\x7c\x7a\xc5\xad\xad\x34\x85\x37\x8e\x7f\xf5\xf0\x0b\xd7\xbc\x43\x52\xb1\x21\x30\x34\x69\xf6\xe6\x7c\x3a\xb3\x41\x17\x37\x2a\x9f\x93\x25\x6e\x15\xf3\xfb\xc5\x3a\x4b\xc0\x14\xae\x4f\xe1\x8c\x24\x65\x60\xa9\x1e\xc8\xa4\x94\xd0\x06\xe7\xc1\xb0\xcb\xaf\xa0\xcb\x63\x4d\x7a\xde\x79\x30\xe4\xdc\x31\xdf\xf5\x48\x44\x3f\xbf\xd9\xe7\xc1\x70\x48\xca\x5c\xc5\xbb\x8f\xd1\xb5\x2c\x04\x0b\x1f\xc4\xf1\x03\xf6\xc9\xbe\xe3\xef\x1f\xdc\xe1\x43\x74\xa0\xeb\x0b\x9a\x4a\x4a\x3a\x8e\xd6\xd8\x40\x90\xca\x6f\xd5\x66\xd1\xf3\xdd\x91\x03\x5b\x0e\xaf\x56\x14\x41\x94\x6f\xe8\x59\x6f\x0d\xc1\xdb\xbb\xc0\x26\xf8\x08\x51\x21\x42\x66\x3c\xde\x5d\xdc\xdd\xe4\xe0\xfe\xbb\xce\x29\xfd\xa0\x79\x97\xb8\x43\x0b\xbb\x1c\x01\x07\x8e\x26\x1b\xe0\xb3\x33\x2a\x89\xc8\xb2\x2b\x67\x58\x44\x8f\x1c\x04\x1e\x26\x9d\x96\x47\xb5\xe2\xd7\x8a\x50\x2b\x3b\x95\xbe\x6f\x19\xe4\x00\xb3\xbf\x23\x83\x86\x84\x22\xf6\xf2\x75\xf1\x90\x81\xea\x49\xa3\xac\xfb\xe3\xf9\x7f\xff\x7b\x2b\x0f\xd4\x78\x1e\x81\xee\xef\xd1\x6a\x6d\x34\x32\x32\xa9\xd8\x5e\xc0\xe2\x2e\xb8\x01\xc4\x44\x8b\x87\xcb\x00\xd6\x1d\xb3\x7e\xde\xe1\x05\x01\xa2\xc1\xb3\x4d\x2b\x9a\x84\x73\xdf\x3d\x0d\x21\x1a\x3c\xeb\x59\x68\x02\x41\x34\x09\x7d\x77\xd0\xdd\xb6\xf0\x5e\x1d\x48\x6c\x37\x24\x9f\x06\xc0\x88\xd8\x52\xd6\x25\x40\x3f\x04\x03\xa6\x2f\x26\x3f\x9e\xa3\xf3\xcd\xe1\xd0\xe0\x06\x57\x32\xde\x0b\x73\x41\x07\x4c\xac\x94\xc3\xdb\xda\x8d\x7f\xe2\x66\x24\xe8\x7a\x08\x4c\x4b\x8e\xc9\xcc\x02\x7c\x18\x25\x59\x35\xf2\x9c\x7d\x13\xb7\x3a\xe2\x31\x46\xb6\x29\x6d\x24\x74\x5d\x8a\x82\x89\x6b\x58\x62\x8e\x20\x8f\x11\xec\xc9\x34\x57\x8f\xf0\xf4\x78\x5a\x28\xff\x8e\x71\x1e\x30\xf6\x1e\x6e\xaa\x43\xe1\xe1\xb2\x19\xe7\x98\x2f\x1d\xc6\xda\x63\x0e\x90\xe1\x94\x97\x06\x62\x23\x0e\xc1\x25\xf8\x5c\x42\x5a\xfb\x84\xa4\x03\xa1\x59\x25\xd2\x93\xd6\x56\xf8\x08\x2e\x8f\x3e\xcf\x88\x51\xaa\x9b\xe9\x94\x2f\x7c\x28\x3c\xeb\xc5\x56\xbf\xfd\x1d\xea\x22\x10\xa1\x5a\x92\x81\x26\xbb\x6e\x90\xcc\xd7\xce\x03\x55\x4f\xa2\xda\x3a\xe3\x24\x16\x73\x6e\xad\x80\xa6\x8a\x50\xc8\x99\x37\xbe\xb5\xa0\x90\x3b\x62\xc9\x69\xbb\xec\x7e\x39\x7a\x4c\xd8\xa5\x84\xd2\xb4\x46\x52\x19\xe8\xee\x0a\xdc\x0e\x00\xa9\x2a\x15\xb3\x5f\x81\xe7\xfa\x80\x97\xfa\xbb\xe3\xb4\x71\x12\x35\x05\x3d\xd1\x50\x9c\x0d\xfc\xdb\x37\x77\xfe\x82\xa8\xc6\xe6\x5a\xa6\x38\x60\x40\x40\x86\x7f\xd3\xf5\xbf\x99\xec\x04\x84\xd8\x58\xa2\xd3\xe6\x98\x77\x81\xad\xeb\xc9\xd9\xc6\x38\x42\xa4\x17\xb2\xba\xef\x4c\xad\x85\xa9\x42\xff\xd3\xf0\x1a\x70\xf2\x6a\xf2\x02\x68\x07\x06\xe4\x2f\xf0\xcc\x3b\x48\x5e\xbe\xe0\xe1\x02\x42\x28\x9c\x6a\xb6\x05\x93\xc2\xc7\x62\x6f\xac\x88\xf3\xf0\x66\x07\x21\xc9\x90\xa6\x57\x64\x46\x42\xf9\xc0\x60\x61\x39\xbe\xaf\x20\x58\x92\x4b\xda\x28\xfc\x64\x29\xa3\x5e\x7f\xee\x9b\x62\x23\x98\x8d\xc6\x43\x2b\xe6\x1a\x56\xbe\x62\x4a\x06\x3a\x40\x81\x10\xf2\x63\x60\xe3\xa2\x7d\xc0\xb2\x48\xbd\xff\xae\x7e\xf1\x9f\x0f\x05\xbc\x35\x3b\x43\x74\x9e\xc5\xda\xd1\x9f\x83\x62\x6d\x1d\x79\xa3\x2b\x35\xff\x5d\x43\x18\x5a\x83\x5e\x9d\xdd\x00\x80\x4d\xec\x33\xd2\x96\x34\xff\xb6\x5c\xfa\x2b\x07\xdc\x63\xf7\xc0\xd6\xc6\xee\x66\x0a\xdf\x13\x01\xf4\x91\x4a\xc2\x05\xee\x67\x21\x42\x04\x5f\xa0\x5b\x8c\x5b\x94\xd0\xdc\xe0\x73\x9b\xdf\x7f\x47\xd8\x7f\x8e\x03\x04\xe0\xb5\xe3\x33\xb8\x8e\xc7\xfe\xe4\x68\x22\xfe\xb7\x8d\xb7\x09\xbf\x14\x4b\x55\x5a\xd9\x8a\xb4\xc0\x02\xe6\xc2\xa5\xb5\x0f\x8d\x92\xa7\xfe\x7f\xdc\x5d\xeb\x6f\xdb\x36\x10\xff\x9e\xbf\xc2\x11\x3a\x47\x4c\x28\xbf\x86\xf5\x61\x94\x09\x82\x6e\xdd\x86\xad\x43\x80\xf6\xd3\x5c\x2f\x53\x6d\xc6\x11\x2a\x93\x1e\x49\x27\xcd\x14\xfd\xef\x03\x5f\x12\x45\x4a\x4e\xfa\x58\xb0\x35\x9f\x62\xdd\x1d\xc5\x3b\x1e\x5f\xe2\xf1\x77\x65\x09\x59\xa7\xf6\x5c\xa4\x22\x5b\xf4\xea\xa2\xea\x98\x60\xcb\xa3\xcd\xf9\x23\xa3\xdb\x8d\x3a\x01\x0c\x1f\x0f\x2a\x71\xb8\x54\xb9\x40\x7b\x6d\x5c\xa0\x6c\x98\x3a\xb4\xb1\xe4\x4d\x35\x5c\x7f\xc3\xce\xe7\xc2\x10\x8c\xee\x65\x93\xd7\x63\x42\xd8\xc9\x34\xda\x14\x5f\x61\x53\x9f\x2a\x52\x2a\x24\x21\x6b\x68\x53\x2f\xc9\xe1\x97\x23\xff\xa9\xa1\xc5\x6b\x02\x28\x57\x4e\xcd\xbc\xb8\x20\xcb\x54\x66\xfc\x34\xcf\xae\x02\xba\x79\x5c\x72\x1d\x06\x5e\x34\x9e\xa2\xfd\x11\xb4\x23\x89\x63\xd2\x18\x84\x19\xce\xac\x07\xda\xca\xef\x8a\x80\x52\xef\x0a\xbc\x55\xd0\x4d\xf8\xfe\x71\xc7\xfb\xdb\x12\xc2\x7d\x5c\x15\xe8\xc6\xaf\x41\xba\x10\xd9\x15\x7e\x41\xb7\x41\x8a\xb8\x50\x7d\x97\xd5\x3a\x86\x25\x57\xbe\xb1\x92\x3f\x11\x2e\x7d\xf1\xc2\xbf\x39\xef\xb0\xf7\xfb\xb1\x73\x04\x7e\xef\xbe\xa0\xd6\x47\x55\x57\xd6\x2f\x6e\xed\x0d\x2e\x87\x02\x1e\x35\xfe\xc7\xf6\x42\x34\x10\xf3\x8d\xb8\x1a\xa0\x87\x88\x41\x72\x18\x27\x09\x3e\xc4\x87\xf8\x68\x0c\x8e\x84\x02\xfd\x80\xdc\xeb\xe8\xe1\x4a\xdb\x9a\xc4\x64\x9d\xb9\x60\xe9\x1a\xdb\x3c\x82\x6a\xbc\x59\x30\x9d\x8d\x63\x0c\xa4\xa7\x0a\x73\x2b\xa1\x35\x51\x9f\x12\x7e\x8e\xc6\x8a\xf1\x07\xb2\xdc\xc5\x76\x6c\x3b\x11\x15\x69\xae\x9e\xf0\x32\xf0\xdd\x8e\xc6\x6e\x73\xf3\x26\xcc\x57\x9b\x17\x76\x17\x76\x77\x5e\x5c\xd3\x07\x1a\x05\x50\x41\x4f\xc9\xf2\xb5\xa4\x84\xea\x81\x72\x93\xa7\x37\xed\x22\x67\x92\xd2\x26\xc2\x5b\x6c\x7b\x97\x8c\x5b\x0d\xdc\xda\x98\x5e\xa0\xa0\xa3\x78\x9d\xff\xbb\x1a\x83\xfa\x7d\x9d\xfb\xc4\x62\xb2\xb9\xaf\xff\x02\xc5\xdf\xde\xca\xe2\x95\x96\xa6\xfc\x9a\xbd\xa3\xf3\x89\x70\x84\xc6\x4c\x1f\x97\x9a\x94\x28\xd0\xa5\xc8\x3e\xff\x52\xb9\x93\xbf\x2f\x76\x5d\xcd\xa2\xda\x35\x3c\xdc\xe7\xcf\x2c\xc5\x72\x97\xe1\xf4\xc8\xea\xb9\xae\x34\x44\x41\x83\x0e\xea\x2d\x25\xc3\xe8\x31\x02\x0a\x31\x23\xf3\x44\x7d\xec\x53\x99\x68\xf1\x75\x8f\x57\xe5\x0c\xb4\x33\x95\x41\xe0\x31\x1a\x4f\x20\x43\x69\x38\x77\xbe\x52\xa1\x3b\x31\xab\x9f\xc8\x35\x13\x77\x01\xca\x4c\xb6\x2a\x5c\x3f\x31\x76\x23\xc1\x54\x77\x41\xd9\x75\xca\x96\xbc\x3c\xdf\x30\xaa\xe2\x9b\x9a\x9f\x34\xb5\xbd\x36\xf2\x0d\xcd\x03\xd9\x86\x6b\x98\x50\xe8\x16\x37\xae\x16\x3a\x99\xc8\xd2\x5c\xc5\x7f\xcd\xf0\x1c\x3a\xc5\xd6\x3f\x9d\x56\x04\x7b\x4d\xf4\xd4\xc1\xb9\xc1\x2d\x55\xa9\x37\x40\x69\xab\xdd\x3a\xc8\x3d\x0f\x07\xa0\x93\x5a\x11\xad\x24\x0c\xc5\x8e\x90\xe7\x1c\x60\xda\xa2\x50\x58\x36\x0c\x46\x1d\xdd\xcd\x40\xf9\x2e\x5d\xbc\xef\xae\x66\xe2\xbf\xaf\xa5\x4e\xc7\x68\x74\xe2\xd5\xdc\x54\x8a\x6d\x49\xb3\x05\x5b\xa4\x91\x3f\x95\x3b\x75\x73\xbb\x7f\x57\x07\x75\x5b\xad\xea\xa6\xee\x43\x54\x54\x59\x8a\x76\x7b\x4b\xab\x17\x20\xb7\x65\x67\x58\xf5\x0e\x9d\xab\xd6\xad\x9c\x37\x5c\x3b\xde\x5d\xb8\xf2\x66\xce\xaf\x68\xcd\xf1\x41\x67\x96\xaa\xfa\x8a\x4f\x57\x35\x76\x46\x0e\xd3\xc7\xaa\x57\xd8\x48\x7f\x3d\x7b\xab\xcd\x07\xdf\xbd\x47\x12\x39\xf6\xf6\x72\x15\xa4\x62\x9e\x25\x7a\xdf\x9e\xd8\x6b\xec\x9e\xd0\xe7\xef\x90\x3a\x05\xcc\xea\x24\x82\x45\x33\x86\x74\xd5\x06\xb8\x5a\x6f\x1e\xca\x72\x27\x24\xba\xa0\x6b\xba\x62\xe9\xe6\xf2\x01\x20\x06\x82\x8f\xfe\x90\xd8\x60\xea\x67\xf6\x0f\xa6\x28\xa9\x7f\xe4\x68\x36\xdf\x23\x2d\x43\x33\xd7\x50\xc6\x08\x71\x1d\xf8\xa2\x8a\xc9\x10\x1f\xbc\xc6\x2b\xe9\x6e\xad\x42\x3a\x21\x8c\x96\xd8\x47\x3a\x04\x46\x4e\xad\x46\x06\xa1\xcc\x46\x84\xe3\x98\x43\x01\xf6\x72\x7d\x70\x5f\x10\xba\xc4\x53\x13\x32\xb3\xcc\xb8\x48\xc9\x02\x4f\x09\xe4\x5a\x6e\x9a\x95\x00\x92\xe7\x3a\x11\x2f\x01\x90\x1c\xeb\x1b\x9c\x44\x6f\xc6\xf3\x01\xa7\x4c\xf8\xd7\xa2\xab\x5d\xbc\x2d\x2f\x11\xd5\xbf\x26\xe4\x43\xa5\x1b\xe2\x30\x43\xf6\x63\x05\xa4\xe8\x55\x2a\x2e\x07\x17\x39\xa5\x2c\xce\x86\x93\x6a\x32\xcf\x8e\x47\x27\x1c\x65\xdf\x4c\x4e\xf2\x19\x9d\x57\x05\x4d\xe3\x7c\x46\x93\x71\xfd\xe0\xa8\x41\x06\xc3\xc9\x34\xe6\x68\x04\x19\x1a\xc1\x14\x8d\x74\x0e\x2a\x45\xe2\xd3\x1c\xae\x33\x32\x55\xef\x13\x6c\x4b\x16\xf1\x78\x34\x3a\x64\x60\x38\x1e\x8d\xa0\x4a\xa3\x17\x10\xb9\x21\xa6\x1f\x7c\x4a\xaa\x28\x77\x7c\x46\xd9\x2e\x2e\x32\xc6\x1f\x2c\x84\xe5\xcf\x47\x05\xde\x19\xa5\x89\xef\x1d\xa5\xb9\xdd\x2c\x53\x81\x13\x85\x06\x9d\x98\xeb\xac\x0f\x90\xe7\x48\x2d\x65\x6a\xa8\x51\x76\xe2\x20\x92\x42\x02\xa6\xf5\x1e\x05\xab\xaf\xe7\x2a\x5e\xa1\x35\x97\xbf\x7b\xcc\x46\x80\x2c\xab\x04\x06\x7d\x54\xba\xb2\xca\x15\xab\xdc\x82\x5e\x18\x5e\xad\xc4\x19\xa3\x1f\x6e\xfa\x7d\x67\xbe\x87\xf6\x86\x4c\x04\xf1\x40\x9b\xe2\x54\x05\xe7\x43\x6c\xc3\x04\xe2\x14\x8e\xe1\x4c\x38\x51\x65\xa2\xc3\xba\x0e\xa4\xfd\x30\x53\xa5\x66\x94\x24\x1b\xcc\x54\x20\x30\x25\xc9\xa5\x10\x1b\x03\x7d\xb0\x13\x01\xd7\x05\xc7\xb7\xa5\x52\xd6\xc6\xb8\xa0\x64\xa9\x23\x11\xf2\x0e\xa1\x21\xa7\x6b\x2c\xb2\x35\x0e\x0e\xbe\xe4\x68\xf6\x45\xa3\x94\x00\x3a\x8e\x0b\x15\x18\x36\x53\xd8\xc2\x16\x9a\xf9\x8c\x61\x8e\x65\xff\x8d\xf7\x47\x60\x0e\xf5\x37\xd7\x78\x04\x49\x8d\x35\xbc\x53\x20\xcc\x15\x12\x69\x0e\x11\x39\x90\xf1\x71\xa4\xe3\xb7\xd5\xbd\x5c\x75\x66\xd2\x31\x91\xdc\xd5\x4c\x5f\x61\xd3\x60\xd9\x32\xd1\x61\xf4\xa9\x56\xf7\xf1\xb3\xe3\xe8\xa7\x37\x6f\xce\x06\x7a\xed\xc2\x23\x7d\xf6\x28\x7c\xb2\x6e\x0f\x43\x25\x3e\xf5\x2c\x15\x97\xba\xad\x6e\x6f\xa3\xdf\xa8\xfc\x19\x41\xd6\xc6\xa5\x38\xec\xd1\xc5\xfe\x4c\xe7\x5f\x32\x53\x8c\x8a\x09\xb1\x3f\x6c\x31\xfb\x08\x91\x7e\x5f\x21\xd6\xb1\x79\x1d\x5e\xba\x3f\x52\x1e\x71\xaa\xb4\xf2\x7c\xf4\x67\xc9\x24\x5b\x1f\xc4\x45\x46\xa6\x78\x16\xb5\xba\xc6\x7c\xa0\xa5\x07\x69\x9e\xd3\x6b\xbc\x54\xbe\xcc\x4b\x30\x87\xb2\xb6\xd3\x42\xbe\x7e\xa7\x91\x5f\x52\xb6\x4e\x05\x88\x0b\x75\x58\x37\x1d\xfe\xf1\x76\x38\x2c\xef\x67\xed\xda\x60\x01\x6e\x06\xee\xf7\x1d\xdd\xcd\x84\xfc\x11\xde\xff\xd5\xb8\xbc\x5e\x9d\x7d\x59\x57\xd7\x2d\xae\x9d\xb0\xe1\xe4\x67\x95\x5f\x98\x2e\x60\x31\xeb\x23\x1d\xa6\xa5\x8f\x76\xb4\x6f\xca\xc6\x78\xad\x20\x30\xef\x1a\x20\x61\x83\xf4\xab\x3e\xf6\x89\x0b\xb9\xba\x19\x4b\x4f\xf9\x1e\x73\x91\x11\x65\xd9\xcf\x2d\xca\x51\x40\x15\xd3\x69\xaf\x50\x34\x1c\x93\xf7\x43\x8b\x95\x00\xcc\xcb\xbb\xb3\x4f\xba\xae\xf2\xfe\xea\x93\x7c\xf1\x5f\x38\xc5\xd6\x2b\xeb\xe2\x17\x7c\xf3\x19\x26\x76\xb5\xef\x38\x9c\x76\x35\xda\x68\x74\xa7\xff\x96\x05\x94\x97\xed\x1e\xc4\x66\xa7\xc9\xef\x69\xf2\xf7\x28\x79\xf6\x36\x39\x9f\x17\x63\x38\x9e\x3c\x2d\x1f\x0d\x1b\x89\x02\xee\xa3\x3f\xa3\x79\xfb\x46\xf6\xff\xa5\xfd\xe4\xbb\xc7\x9f\xa2\xbd\x50\xc0\x5c\x0f\x13\x2d\xd3\x15\x60\xa7\x6f\x78\x0e\x9b\xb0\xfb\xcd\xee\x2e\xd8\x8d\xda\x76\x62\x74\x87\x9c\xa8\xd3\xc8\x35\x31\xc1\x0f\xd6\x58\xa4\x33\x92\xae\x31\x8a\x0e\x8e\xf0\xd1\x41\x34\x3f\x00\x5e\xea\x56\xbb\x2e\x07\x90\xa0\xc2\xc2\x12\x3a\x90\x94\x4b\xec\x43\x57\xc5\x02\x80\xd2\xbb\xfa\xe7\xd9\x8a\x74\xdb\x8a\xd4\x21\x79\x3a\x1f\x4f\x9d\xbc\xe7\xe0\x05\xdd\xe6\xcb\x1e\xa1\xa2\xc7\x70\xba\xec\x69\x5d\x7b\x17\x8c\xae\x7b\x52\x93\x9e\x48\x57\xbd\xeb\x4c\x5c\xf6\xa4\x4a\x3d\xa3\xd2\xe0\x40\xef\xa7\xd9\x96\x90\x8c\xac\xde\x60\x2e\xf8\xed\x2d\xc3\x7f\x6d\x33\xd6\x30\x79\xba\xd9\x44\xc0\x36\x8c\xcd\xd1\xac\xd3\x46\xd6\x5c\x11\xbc\xc2\x4c\x8e\xd4\xd3\x68\x32\x98\x0c\x46\x47\x4f\xbe\x7d\xf7\xf8\xf1\xd3\x27\x8b\xa8\x04\x7b\xff\x04\x00\x00\xff\xff\x20\xb6\x7a\x4f\xbf\xdb\x15\x00") + +func web_uiAssetsConsulUi60e32dd57229711d8752c463a9d423d3JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsConsulUi60e32dd57229711d8752c463a9d423d3Js, + "web_ui/assets/consul-ui-60e32dd57229711d8752c463a9d423d3.js", + ) +} + +func web_uiAssetsConsulUi60e32dd57229711d8752c463a9d423d3Js() (*asset, error) { + bytes, err := web_uiAssetsConsulUi60e32dd57229711d8752c463a9d423d3JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/consul-ui-60e32dd57229711d8752c463a9d423d3.js", size: 1432511, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x51\xcb\x6e\xdb\x30\x10\xbc\xeb\x2b\x28\x1e\x08\x32\x52\x69\xc9\x8d\xf3\x50\xb2\x51\x8b\xa0\x87\x1e\x7a\x52\x6e\x4d\x81\xc8\xd2\xda\x52\x61\x93\x2e\xb5\x4a\x1a\x84\xfe\xb4\xa2\x9f\xd4\x5f\x28\x2c\xd9\x88\xd3\x9e\x86\x33\xe4\xce\x70\x31\x93\x93\x90\x35\x44\x9b\x2e\x9b\x4c\xd6\xd4\x74\x7a\x8e\x93\xaa\xeb\xb0\xab\xca\x0d\xb2\xc7\x54\xcf\x74\xca\xe6\xcf\xec\xc3\xba\xa4\xa6\x2d\x3b\xe6\xd9\x97\xcf\x77\x6c\xd5\x56\x68\x3a\x64\x27\x93\x40\x2e\x7a\x53\x51\x6b\x8d\xc4\x98\xd4\x0b\xb7\xf3\xef\x58\x11\x07\xa0\xe7\x0d\xda\x05\xc3\x9f\x1b\xeb\xa8\xcb\xd7\xb6\xee\x57\xa8\xf7\x14\x48\xa2\xca\xf8\x61\xf6\xf5\x79\x8d\x8b\xd6\xa0\x10\x23\xea\x72\x5d\xe7\xe3\x51\x7e\xfd\x16\x93\x9e\xb7\xa6\x96\x18\xa3\x52\xd9\xce\x61\xab\x24\xef\xcd\xf8\xa0\xe6\xe1\xc1\x64\xb9\xb2\xf3\x72\x95\x8f\x90\x51\xd3\x76\xf1\xd1\x37\xd5\x4b\xbb\x90\xa8\x6f\x8b\x42\x88\x01\xf4\xb8\xae\x72\x48\xbd\x33\xec\x58\x0b\x1e\x4b\xc7\x08\xfe\x19\x4e\x00\x4a\xb7\xec\xd7\x68\xa8\xd3\x2b\x34\x4b\x6a\x14\x35\xce\x3e\x31\x83\x4f\xec\xee\x79\x83\x9f\x9c\xb3\x4e\xf2\x87\x57\xa7\x07\xe6\xf0\x47\xdf\x3a\xec\x58\x69\xd8\x61\x5c\x73\x15\x2c\xac\x93\x43\x4c\x6c\xa0\x20\xd7\x9a\xa5\x44\x15\x3b\x30\x7b\xeb\xd8\xc2\xbb\x34\x2e\x80\xf3\xb8\x04\xa3\xab\xa6\x74\xb7\xb6\xc6\x8f\x24\x13\x75\x15\x45\xf6\xda\x5d\xa9\x24\x04\x49\x6f\x2f\xad\x52\x79\x11\x01\xdd\x40\x2a\x04\x5d\xc3\xfb\xd4\xfb\x74\x7a\x0e\x40\xde\x27\x00\x56\x08\xba\x81\xd3\x8b\xe1\x6e\x76\xee\x7d\xfa\x9f\x26\xc4\xe9\x0c\xa0\xcc\xf9\xfd\x3d\x8f\x48\x93\xdd\xff\x2e\x3d\x53\x11\x67\x3c\x93\x49\x08\xd6\xfb\x34\x04\xe7\xfd\xe9\x2c\x04\x52\x42\xc8\x5d\xe0\xf4\x62\x27\x0c\x51\x97\x23\xbc\xcd\xa2\x1b\x38\x9b\x0d\xec\x32\x19\xd8\xe5\xf9\xc0\xd2\xe9\x54\xe5\xe3\x16\xc3\x06\xd9\x10\x7d\x2c\x14\x11\xf0\x3f\xbf\x7f\xf1\x60\x5f\x56\xb1\x0d\x8e\x6b\xf3\x7e\x6c\x16\x5e\xb6\x2a\x3e\x2e\x12\x28\xa6\xad\x52\xc1\xdf\x00\x00\x00\xff\xff\x8e\x18\x53\xe4\xf1\x02\x00\x00") + +func web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs, + "web_ui/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js", + ) +} + +func web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs() (*asset, error) { + bytes, err := web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js", size: 753, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsEncodingCdb50fbdab6d4d3fdf574dd784f77d27Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x7c\x7b\x6f\xdb\xb8\xf2\xe8\xff\xfe\x14\x8e\x81\xd5\x8f\xac\x29\xaf\xa8\x97\x65\x37\xac\xb1\x7d\xec\x41\xb7\xbb\xa7\x8b\x3e\xfe\x32\x8c\x40\x91\xe9\x98\x8d\x2c\xf9\xea\x91\x34\x37\xf6\x77\xbf\xe0\x4b\xa2\xfc\x48\x53\x9c\xbd\x3f\x1c\xa0\xa8\xf9\x18\x0e\x67\x86\x33\xc3\xe1\x90\x0a\x58\xd5\x59\x52\xb1\x3c\x03\x19\x7c\x1c\xd4\x25\xed\x97\x55\xc1\x92\x6a\xd0\xd3\x1d\x7d\x0a\x32\x44\x51\x01\x1f\x0b\x5a\xd5\x45\xd6\xa7\x97\x24\xb3\xac\xec\x92\x14\xfb\x41\x9d\x2d\xe9\x8a\x65\x74\x39\xb8\x20\xd5\xc3\x96\xe6\xab\xfe\x26\x5f\xd6\x29\xb5\x2c\xf9\x3b\xa2\xdf\xb7\x79\x51\x95\x96\x75\x91\xcd\x07\x34\x4b\xf2\x25\xcb\x6e\x6c\x96\x2d\xe9\x77\x5a\x0e\x16\x96\x05\x4e\xb6\x93\x82\xfe\x9f\x9a\x15\x14\x0c\x46\xbf\x1e\xf6\xda\xe3\x80\xd2\x18\x87\xd7\x6e\x30\x19\xe3\x70\x79\xed\xaf\x96\x38\x74\x29\x75\x23\x6f\xe9\xc6\x34\x18\x7d\x2b\x07\xf0\x14\x56\xd8\xbb\x8b\x8b\x7e\x41\xfe\x8a\xab\xf5\x68\x95\xe6\x79\xd1\xb2\xc9\xb8\x04\xd8\x0a\xdc\xe5\x6c\xd9\x77\x08\x21\x19\x94\x0c\x3f\xee\x7b\x6c\x05\x32\x42\xc8\xc7\xeb\x6f\x34\xa9\x40\x06\x55\x4f\x3f\xeb\x55\xeb\x22\xbf\xef\x7f\x79\xd8\xd2\x77\x45\x91\x17\x60\xf0\x26\xaf\xd3\x65\x3f\xcb\xab\x7e\x92\x67\x77\xb4\xa8\xfa\x71\x71\x53\x6f\x68\x56\xf5\xab\xbc\xbf\x64\x62\xb2\xb8\x78\x18\xc0\x7d\x33\x35\x47\xa9\xa5\xeb\x68\xe9\x62\x77\xbc\xe7\xd4\xe6\xa4\x6a\x89\x2c\x39\x64\xb5\x66\xe5\xa8\xca\x6f\x69\x56\x92\xf9\x62\x54\xa6\x2c\xa1\xa3\x24\x4e\x53\x90\x41\x64\x74\x8e\x0a\x7a\x47\x8b\x92\x02\xb8\x2f\x47\xdb\x22\xaf\x72\xbe\x44\xe4\x91\x66\xcb\x8f\xab\xcf\x55\x41\xe3\xcd\xb4\x59\x7e\x4d\xc0\x85\x89\x20\xa5\xd9\x4d\xb5\xde\xa3\x82\xc6\xcb\x63\xd0\xfe\x31\xe8\xcc\x6c\xda\xe6\x5b\x00\xa7\x36\xde\xa3\x6d\x41\xb7\x34\x33\x50\x48\x51\xff\x56\x14\xf1\xc3\x88\x95\xe2\x97\x8b\x75\x95\x17\x80\xf3\x4c\x49\xf6\x92\x2a\x94\x2f\x61\x07\x67\x5d\xae\x01\x95\xa8\x61\x8f\xa6\x25\xed\x1f\x75\x67\x70\x8f\x78\xe1\x1f\x98\xae\xce\xca\x35\x5b\x55\x80\x8e\xe4\xef\xa9\x39\x35\x4c\x06\xf7\xfb\x76\xa5\x62\x6e\x35\x62\xda\x0c\x1e\x29\xc9\x5b\x9a\xe4\x4b\x5a\xf4\x29\xaf\x0e\x60\x4f\x5b\xd6\x6e\x17\x06\x81\xe7\xb5\x9a\x51\xcb\xf5\x3e\x18\xfe\x65\x4d\xfb\x1c\x41\x7f\x9b\xb3\xac\xea\x0f\x86\xd9\x70\xd0\x4f\x1a\xc5\xbb\xa6\x7d\xa1\xfa\x74\x39\x32\xb5\x2c\x35\xb4\x2c\x23\x9f\xab\x82\x65\x37\x20\x83\xa3\xaa\x60\x1b\x00\x47\x55\xfe\x67\x7e\x4f\x8b\x37\x31\x57\x18\x24\x55\xbd\xd5\x9a\xd1\x3a\x2e\x3f\xde\x67\x7f\x17\xf9\x96\x16\xd5\x83\x54\xb7\x04\x65\x70\x96\xcc\xb3\xc5\x34\xab\xd3\x54\x68\xeb\x8a\xcc\x1f\xb5\xdd\x95\xd3\xf9\x63\x1a\x5f\xd3\xb4\x9c\xce\x07\x75\xc6\x38\x49\x36\xb6\xb1\x5d\x57\x2b\x3b\x1a\xa0\x81\xf1\x1b\x0d\x16\x28\x8b\x37\x74\x3a\xf8\xfa\xe5\x77\x3b\x1a\xec\x17\x68\x4d\x63\x8e\x65\x2a\xd8\x7d\xa7\x70\x0e\xf6\xe8\x34\xfe\x28\x0c\x07\x68\x90\x6c\xd5\x6f\xc9\xae\x37\xb2\xa8\x0a\x1a\xfd\xfb\xd7\x7f\xf1\xea\x1e\xb5\x43\x93\x92\x95\x79\x1a\x57\x2c\x73\x39\x7c\x99\xdb\x51\x14\x4c\x6c\x5d\x61\x85\x8d\x1d\x2c\x2b\x66\x07\x2f\xab\xe2\x95\xd9\xae\x2a\x53\x3c\x89\xc6\x03\x34\x48\x79\xb3\xc2\xde\x10\xf1\xf9\xa3\x9e\xe3\x34\x21\x9e\x49\x88\x67\x12\x32\x31\x08\xf1\xda\xb2\x67\xce\xdd\xad\x70\x42\xb8\x94\x53\x4f\x13\xe2\x1d\x13\xe2\x9d\x21\xc4\x37\x09\xf1\x0d\x42\xb0\x63\x10\xe2\xb7\x65\xdf\x9c\xbb\x5b\x69\x08\xf1\x35\x21\xfe\x31\x21\xfe\x19\x42\x92\x87\x82\xa5\x29\x4b\xf8\xe2\xb6\xc5\x86\xb4\xc0\x20\xcd\x37\xc8\xd1\x1d\xbc\x1c\x98\xd4\x74\x2b\x92\xb4\x23\x62\x82\x0e\x31\x71\x11\x5f\x8b\x59\xe3\x72\x93\xdb\x63\x27\x92\x8a\x26\x91\x87\xb4\x53\x63\xba\x26\x88\x6f\x46\xd2\x64\x13\xdb\x18\x77\xa4\x1a\x76\x2a\x36\xed\x56\x99\xc1\x98\x3b\x36\x18\x0b\xdb\x72\x68\xf2\xd2\xad\x48\x2d\x3c\x62\xec\x9c\x01\xdc\x14\x94\xde\xb6\x74\x72\x0e\x69\x9a\x57\x57\x13\x97\x17\x75\xaf\xf8\x8d\x4c\x3a\xc7\x26\x95\x06\x65\xb6\x41\xf1\xd8\x24\xac\x5b\xd1\xb6\x52\xd6\xd9\x15\xad\xaf\xe4\x3c\x47\x44\x8f\x8f\x89\xe6\xed\x11\xed\xc8\x7a\x4d\xaf\x0b\x7a\x3f\x40\x83\xa6\xd0\x50\xd9\x21\x39\x6a\x24\xcd\x89\xf6\x22\x83\x68\xa3\x1c\x99\x74\x76\x2b\x5a\x9d\xef\x58\x59\xc7\xe9\x31\xb9\xd1\x19\x72\x59\x97\x0a\x5e\x4d\xf3\x1b\x96\x9c\xc4\x61\xbf\x3f\xb3\x52\x1d\xad\xd1\xc6\x28\x58\x09\x4c\x2d\x31\xcd\x54\x94\xd3\x50\x1b\x5f\x78\x3c\x1d\x76\x3a\xb3\xb5\xf8\x3d\x13\xa5\x51\xc1\x27\x5c\x09\xf6\xce\x20\x31\xcd\xd2\xac\xe0\x13\x6e\x00\x9f\xf3\x03\x93\x0e\xdf\x81\x89\xd2\xa8\xe0\x8e\x79\x8b\x5a\x3a\x39\x31\x4b\x70\x86\xd4\x53\xb2\x39\xb4\x99\xdb\x9c\x45\xc5\x00\x0d\x6e\x73\x26\xff\x8f\xd4\x8f\xad\x5a\xa3\xab\xa2\x41\xf3\xe1\xe3\xfb\xc8\xfe\xd4\xc1\x20\x41\x6b\x3d\xa8\xee\xc2\x7e\x3d\x98\x6d\x13\x27\x2c\xab\xf2\x72\x3d\x40\x83\x4d\x9c\xc8\xff\x9b\x96\xef\xf6\x26\x4e\xec\x22\xdf\xc4\x59\x83\xa6\xed\x37\x31\x2d\xf3\xd2\x8e\xc6\x1d\x07\x84\xcd\xcd\xcd\xac\x88\x72\xc5\x4a\x3b\x74\xb9\xea\xdc\xb3\x6c\x99\xdf\xcb\xe1\x7a\x12\xb3\xad\x43\xf0\x16\xbb\x81\x39\x48\x55\xbf\xdb\xaa\xe7\x10\x81\x68\x3c\xc2\x80\xbb\x18\x70\x8b\x01\x9f\xc2\x80\xbb\xfe\x3a\x2b\xd9\xd5\x77\x6f\xe4\xdb\x78\x12\x46\xc2\x6f\x27\x4c\x38\x66\x8e\xc0\x95\xe1\x02\x9e\x74\xbc\x07\x56\x11\x03\xee\xea\x99\xb9\x03\x9b\x1b\x9f\x29\xac\x8e\xc6\x75\x2a\x4d\x28\x80\xb5\xed\xf1\x42\x5d\xda\x9a\x20\x83\x05\xb7\x65\xd1\x3d\xc5\xa2\x7b\x2c\x24\xaf\x8b\xc1\x6b\x31\x78\xa7\x30\x78\xc7\x18\xfc\x8e\x0c\x02\x93\xf5\x89\xb9\xb1\x9a\x4e\xd2\x08\x44\x26\x26\xb7\xdd\x0a\x67\x9d\xb7\xa4\x81\x66\x3d\xe8\x52\xeb\xb7\xd4\x1e\x6b\x95\x68\x3c\xa2\xf6\x00\x43\xd0\x62\x08\x4e\x61\x08\x8e\x31\x84\x5d\x0c\x61\x8b\x21\x3c\x85\x21\x3c\xc6\x30\xee\x62\x18\xb7\x18\xc6\xa7\x30\x8c\x8f\x31\x44\x5d\x0c\x51\x8b\x21\x3a\x85\xa1\xbb\x9b\x48\x7b\x37\x02\x21\xd9\x50\xdf\x16\x31\xcb\x98\xe1\x04\x0e\x00\xcd\xb0\xfa\x4f\x7a\x13\x27\x0f\xfd\x92\x65\x37\x29\xb5\xaf\x1f\x2a\x75\x6c\xe0\x91\xf5\xd9\x30\x3b\x59\xb3\x8c\x96\x72\xc7\xbd\xb9\x76\x3d\xec\x6a\xd5\x09\x22\x59\x8f\xb8\x7d\x34\x5d\x37\xd7\x57\xdd\x92\xad\xfa\x6f\x5b\xbd\x52\xbc\xf3\x36\x4d\xf6\xbf\x5e\x7f\xe8\xf0\x7b\x73\x8d\x23\xc7\x6b\xbd\x86\xae\x9f\xe0\x67\x53\xa7\x15\x93\xec\xbc\x91\xc4\xf6\x41\xc9\x36\xdb\x94\xad\x18\x5d\xc2\x67\xf0\x78\xcd\x6e\xb8\x4e\xf1\x1f\x7b\x7d\x5b\x26\x25\x67\x31\xb3\x55\x73\x52\xaa\xc2\x77\xfb\xbb\x6c\xd3\x44\xbd\xe6\x95\x67\x52\x54\x15\xf1\x92\x89\x54\x40\xfa\x1c\x92\x92\x92\xd6\xc9\xf6\x76\xb9\xda\x54\xdf\xe2\x6d\xac\x96\x80\xd6\x89\xfd\x6d\x2b\x48\x51\x45\x4d\xca\xbb\xaf\x6f\xec\x3f\xfe\x3e\xde\x42\x5d\xc7\x75\xc5\x08\x2e\x7a\x5e\x31\x07\xf1\xad\x4e\xb4\x1d\x8d\x14\x07\xdc\x6f\x8c\x0b\x62\x53\x4e\x3c\x57\xfc\x5e\xdd\xc6\xd9\x37\xee\xbd\x44\xaf\x2d\xbb\x45\xf9\x4a\x95\xe5\x8f\x56\x62\x0f\x7f\x13\xa4\x8a\x66\x3d\xe7\x67\x01\xff\xc7\xfb\xcf\x3f\x10\xdc\x1f\x8a\xeb\xe7\xca\xea\xb6\x10\x4b\x75\x5b\x26\x41\xe8\x60\xe5\x7f\xb9\x90\x44\x47\xe3\xd0\x26\x62\xf7\x2d\x68\x9c\xf1\x42\x79\x95\x5c\x71\x70\x5b\xc1\x77\x1a\x04\xa8\x44\x27\x4b\x57\xaa\xa8\xf9\x9b\xf8\x93\x8e\xfc\x3f\x7c\xfa\x01\x4f\x1f\xc4\xc4\xcf\xe2\x48\x2d\x9d\x20\x7e\xfd\x7f\xed\x9b\x6b\x5b\x59\x55\xb3\x8e\x49\xd6\xad\xd9\xf4\x7b\x65\xb6\xdc\xb6\xb1\x48\x41\xb7\x69\x9c\xd0\x0d\xcd\xaa\xce\x3a\xf3\xe3\x38\x0e\xaf\x69\xe7\x28\x8e\xc3\xd7\xef\x4e\x40\xa9\xd3\x3b\x0e\xd3\x43\xf0\x3f\xdf\x1d\x78\xaa\xba\xa4\x85\xad\xd3\x84\xad\x5f\xea\x34\x9f\x12\x14\x2b\x13\x9a\xa6\x71\x46\xf3\xba\x34\x85\xb4\x40\x09\x79\xdc\xf7\x56\xa3\x55\x5e\xbc\x8b\x93\x35\xe8\xe4\x30\xb3\x51\x03\x7a\x0e\x40\xd2\x76\xa2\x97\xc2\xc7\x64\x4e\x17\x24\xdb\x43\x28\xff\x89\x7c\xe1\x12\xad\xd1\x0d\x79\xdc\xa3\xad\x98\x57\xe7\x53\xae\x64\x86\x47\xe7\x6e\x2c\x8b\xce\xb3\xc5\x6e\x27\x52\x21\x0d\xd0\xb5\x04\x92\x69\x47\x3a\x12\x99\xc8\x8f\x2b\x90\xe9\x9c\x8f\x8d\x09\x21\xc5\x8c\x0f\x9a\x16\xed\xb0\x7b\x20\x73\x47\x17\xe0\x38\x8b\xc9\xb2\x7e\x06\x55\x4e\x49\x25\x84\xde\xcb\x2e\x2e\x33\xee\xce\x47\xfd\xb7\x6c\xd9\x7f\xc8\xeb\xfe\x2a\x2f\x6e\xa8\xc8\x3c\xb2\x2c\x49\xeb\x65\x6b\x3f\x3f\x93\x4c\xed\xaf\x58\x51\x56\xb3\x36\x51\x75\x32\x65\x3b\xa7\x8b\x96\x81\x4d\x93\xfe\xba\x00\xd5\x9a\x95\x7d\x96\x95\x55\x9c\x25\x22\x43\x0c\x8f\x33\x62\x6f\xe2\x34\xa5\xcb\x7e\x5c\xf6\xe3\xbe\x46\x72\xc4\xc6\xff\x64\xf4\xfe\x7f\x38\x19\x19\x91\x59\xda\x0b\x42\xb2\x59\x93\xc9\x9a\xea\x84\x12\x25\x0c\x50\x95\x0a\xbd\xd2\x84\x12\x2e\x63\xd5\xb6\x94\xf9\x37\xb3\x89\xdd\x64\x79\x41\x5f\x7f\xfc\x8b\x5c\x60\xd5\xf4\xfa\xe3\x5f\x25\xa5\x59\xdb\x20\xd2\x75\x57\x9b\x7c\x49\x49\xc7\x88\x34\xd6\xfc\x2a\xcb\xab\xab\x55\x5a\x97\x6b\x72\x81\x55\xae\x39\xe5\x8b\xcd\x56\x80\xcf\xc5\xd7\x7a\xb7\xeb\x8c\xe5\x4d\x23\x6e\x13\x4a\x26\x9f\xe2\xec\x46\x0b\xe5\x6b\x76\x9b\xe5\xf7\xad\x87\x98\xf6\x07\x43\x89\xec\x62\x3b\x97\xa3\x16\x5d\x45\xd0\x89\xc5\x2c\xaf\xfa\xdb\x82\x96\x34\xab\xfe\xbf\x2b\xc3\x81\x98\x0b\xf4\x3a\xcf\x53\x1a\x67\x80\x8e\x56\x71\x15\xa7\xd0\xb2\xc0\xb1\xfc\x44\xd7\x00\x1a\xc0\xcd\x0a\xb4\x03\x8c\x45\x71\x9a\x9c\xa4\xf4\x19\x3a\x13\xb9\xdb\x49\xd8\x66\xfe\x2e\x39\x42\x48\x07\xb9\x4d\x01\x21\xe6\xd7\x64\x10\x42\x0e\x29\x94\x50\x2d\x01\x07\x04\x49\x2c\xad\xbe\xdf\x01\x71\x45\x72\x52\xdf\xef\xfe\x63\x7d\x2f\x08\x03\xc5\x53\x0a\x2d\xf3\xbd\x1d\x85\x3e\xd0\x46\xd5\x2a\xd9\xd6\x42\x2f\xd4\x0a\xcd\x94\x1c\xba\x7b\x03\x57\xb4\x16\xf2\xdf\x1f\xff\xfd\xf9\xcb\x6f\xff\x7e\xfb\xdb\xa7\xb7\x57\x71\x9a\xe6\xf7\xd2\x4f\xeb\xc4\x2c\x94\x4e\xae\x22\x29\xa0\xad\x75\x52\x6d\x9d\xb4\xb1\x4e\xd3\x18\xaa\x63\x63\xa8\x7e\xc6\x18\xa8\x34\x86\x9b\x79\x75\xca\x18\xde\x65\xff\x8b\xc6\x70\xb0\x36\xd5\xbe\xbd\x27\x68\x5b\x53\xa0\x85\x80\x5a\x11\x59\xd6\x20\xc9\xb3\x32\x4f\xa9\x70\xed\x96\xa5\x6a\xa3\xfb\xb8\xc8\xc0\xe0\x0b\xfd\x5e\x69\x4e\x78\x4f\x55\xd4\x49\x95\x17\xfd\x44\x6a\xd0\x3d\xab\xd6\x0d\xe9\x7d\xb1\xb5\xa1\xfe\xfd\x9a\x25\xeb\x3e\xd7\x42\xa1\xaf\xcb\x51\x6b\xad\xff\x90\x11\x1d\xea\xff\x03\xdf\x5a\xa5\xc3\xcb\xa4\x52\x21\x46\x1c\x54\x11\x07\xe5\xc4\x41\x25\xc1\x6e\x84\x6a\x82\x27\x58\x4a\x6a\x1d\x67\xcb\x94\x16\xa4\xdd\x99\x51\x2a\xcc\x47\x6c\x88\xa9\x65\x71\xd1\xe4\xfa\x9e\x8d\xa3\x88\x41\x21\x56\x5b\x02\x40\xbd\x7d\xf2\x26\x87\x70\x58\x3e\x9a\x82\x14\x39\x08\xbb\xe3\xe6\x8a\x2e\xed\xa9\x66\x3c\xf1\x91\xeb\x7a\x10\xe6\x04\x23\x46\x3c\x6c\xa5\xf2\x2e\x47\xf5\xbb\xae\x8f\x5c\x6f\x02\xa1\xeb\xfa\x92\x04\x50\x12\x1c\x3a\x10\xb9\xde\x58\x35\xd4\x04\x07\x13\x88\x72\xe2\x22\x46\x70\xa0\x30\x08\xab\x17\x28\x7c\x07\xb9\xbe\xdf\xcc\x2d\x48\x76\x7d\xa7\x45\xe7\xfb\x90\x43\xb4\xe8\x7c\x8f\xa3\xf3\x10\x23\x63\x2b\xdd\xeb\xed\x95\x87\x10\x1a\x69\x89\xea\x06\x21\x23\x39\xa9\xba\xe2\x44\xd9\x48\xdd\xae\x81\x14\x36\x42\x32\x01\x18\x61\x97\x97\xe1\x2e\xf4\xac\x14\x81\x6a\x48\x30\x34\x45\xcb\xe7\xea\xc9\x9b\x1b\xd6\x3b\x98\x66\xb5\x6f\x17\xf8\xbb\x8c\x9d\xc4\xd2\x9e\x5d\xc2\xa2\x5d\xc2\xa2\xb3\x42\x39\x28\x1a\x26\x0a\x31\x1d\x43\x55\x8f\x82\x02\x71\x3a\x5d\xc7\x1f\xc3\x19\x60\x04\xa3\x8a\xe0\x89\x0b\xa7\xbc\xc7\x75\xfc\x08\x85\x41\xe0\x05\xa2\xcf\x45\x15\x71\x5d\x5f\xf6\xf1\xe6\x10\x61\x8c\x7d\x8c\x31\xdf\x2f\x18\xf1\x78\xbf\xef\xc0\x9e\xbe\xd5\x2b\xc9\x1c\x14\xaf\x5e\x85\x2f\x18\x1c\x56\x8b\x97\xec\x95\xf3\x52\xaa\x68\x4c\x44\x33\x60\x36\x86\x3d\x75\x67\x88\xdd\x88\x4b\x28\x86\x88\xd9\x04\xeb\x85\x28\x0d\x01\x7c\xec\x46\x72\x4f\x09\x82\x22\xd6\x0a\x82\x75\x04\x51\x01\xd6\xae\x66\x4f\xde\xef\x66\x73\x66\x63\x37\x5a\xf4\x8c\x25\xe1\x1a\x3d\xe3\xab\x39\xcd\x0d\x1a\x6e\x25\x0d\x3f\x9a\xfd\x67\x96\x81\x5c\x83\x02\x65\xf0\x60\x6e\x66\x59\x35\xdf\x71\xd8\x10\xbb\x91\x41\xc0\xbb\xd3\x66\x2e\x4d\xdc\x39\xab\x17\x75\x4b\x50\x6d\x59\x8e\x9c\x40\x58\xad\xfc\x29\x5b\x2a\x39\xf2\x54\xda\xf9\x05\x21\xf5\x6e\x77\x02\x7a\xb7\x03\xc6\xac\x42\xe9\x21\xe2\x0e\xa3\x84\x8f\xa9\xdc\x03\x29\xa8\x91\x1f\xa1\x60\xcc\x95\x23\x25\x07\x37\xc1\xd9\x2b\x6f\xe2\xe3\x89\x65\x65\x97\x38\x9a\x50\x6f\xb7\xcb\x5e\x61\xd7\x1b\x07\xe3\xa0\x63\x17\x6c\x05\xc6\x7e\x30\x36\x1e\x03\xf4\x83\x89\xe7\x05\x82\x4a\x8a\x0a\xe2\x28\x2f\x77\x0f\x74\x4a\xc2\x2e\xf8\x9e\x55\x0e\xa4\x1e\x52\xe2\xbc\xa4\x97\x95\xbe\x5b\x1e\x0e\x95\x06\xe5\xa4\x9a\xd3\x85\xd8\xbc\x40\x3e\x77\x16\x97\x24\x83\xf0\xba\xa0\xf1\x6d\xaf\x20\xbc\x01\x31\x92\xcf\xf1\x42\x2b\x22\x1b\x66\x76\xb1\x07\xd8\x79\x01\xb0\x1b\xbe\x10\x05\xae\x34\x13\x38\xcc\x6d\x3f\x82\xc3\x52\x56\x6a\x5e\x81\xca\x9e\xe7\x39\x77\x1e\x8b\xd6\xaa\x5b\x91\xa9\x65\x4e\x67\xa0\x75\x1f\x2b\xe9\x3e\xe0\x54\xf8\x9e\x8e\xff\xe5\xd2\xc4\xee\x04\xb9\x81\x0f\x67\xa0\x24\xb5\x40\x00\xa7\xc6\xe8\x79\x8e\xea\x05\x6c\xb4\x41\x60\xea\x29\x3c\x4c\xf9\x66\xbd\x24\xad\x5b\x97\x88\x04\xbd\x09\x61\x68\x49\xa4\xd8\x89\x23\x9a\xd6\xa4\xbe\xc4\xee\x78\x16\xfa\xd3\x30\x50\x6c\x08\x34\xa1\x8f\xb0\x1b\xc2\xdd\x4e\x12\x16\x09\xc2\xf8\x4a\x2f\x09\x9e\x38\x2f\x40\x22\xa5\x01\x6a\x7b\x0d\xa1\x66\x16\x48\xd5\x20\x84\x2c\xe5\x79\xeb\x0a\x2c\x51\xbb\x70\x03\xc8\x31\x54\xa0\x86\x96\xd5\xb2\x55\xc3\x56\x56\xc2\x1c\x1b\x27\xcd\x21\x67\xf5\x14\xbb\x11\xd7\xea\x59\xe4\x85\xfe\xb4\x2b\x27\xd6\xc8\x89\x8f\x34\xac\xe8\x9b\x34\xe3\x1f\x79\xd3\xb3\x4e\x24\xef\x38\x11\xb6\x02\x41\x14\x05\x9e\x01\xd6\xaf\x01\x13\xd2\xa7\x96\xc5\x09\x33\xbb\xb0\x1b\xf5\x64\xa4\x76\x0d\x58\x97\x7f\x1d\x99\x5d\x10\x52\x49\x3d\x2d\x49\xf5\x0b\x9e\x38\x4a\xf6\xf3\x02\x54\xbf\xe2\x89\x03\x87\x9c\xc9\x72\x08\xca\xcb\xd0\x93\xab\x03\x17\x5c\x69\x68\x67\xfe\xea\xd0\xec\x84\xed\x98\xc6\xc4\x8d\xeb\x1f\xb6\x25\x7c\x68\x4b\x58\xda\x92\x73\x68\x4b\x4c\x9a\x49\x4c\x04\x53\xce\xaf\xd8\x0d\x7f\xc5\x0e\x44\x29\x29\x00\xa8\x6c\x82\x9d\x17\xf1\x0b\x6e\x6c\xd8\x81\xaa\x1f\xa2\x55\xdb\x99\xf2\x4e\xde\xa3\x7d\xe7\x3c\x16\x62\x49\x87\x7e\x84\x56\xa2\x58\xd9\xd8\x79\xb1\x1a\xfa\xd1\xc2\x58\xfc\xd7\x27\x5d\xe8\x59\x25\xc8\x5b\x25\xc8\x65\x54\xc4\xa0\x61\xd0\x9d\xa8\x48\xf9\xc7\xae\xb2\x28\x03\x94\xab\xc9\x50\xdd\x35\xb1\x94\xe4\xda\xc4\x26\x51\xaf\xbc\x67\x55\xb2\x06\x80\x82\xdc\xb4\xb1\x1c\xe1\x10\x37\x36\xc6\x83\xa0\xf1\x0b\xa0\x3c\x0e\xc8\xed\x14\x42\xee\xe1\x93\xb8\xa4\x7d\x8c\x3d\x6f\xaa\xe4\xe1\x3a\x2e\x1a\x8f\xdd\x45\x4f\xf7\x04\x9d\x9e\xc8\x69\x7a\x42\xbf\xe9\xf1\xfc\xce\x98\x30\xec\xf4\x44\xce\x42\x3d\x33\x51\x56\x59\x6b\x53\xae\xb9\x2a\x8b\x74\x2c\x3c\xdc\xcc\x56\xdc\xac\xf3\x8e\x59\xe7\x8d\x59\xaf\xa4\x59\xaf\x5a\xb3\xce\xe1\x2c\x9f\x0a\xa6\x0d\x4b\xce\x4f\x5b\xf2\xe7\xe7\x44\x45\xb4\x5d\x42\x7a\x60\xc7\xb4\xb1\x63\xaa\xb6\x63\xd3\x64\xe4\xdb\xa4\x35\x59\xef\x76\x0d\x73\xa3\x4d\xbc\x35\x13\x5a\x66\x0a\xea\x32\x70\x5c\x5f\x0a\x24\xdb\xb7\x62\x98\x04\x81\xcb\xad\x6e\xb7\x9b\x04\x61\xd8\x94\x26\xba\x34\x8e\x64\xc9\xc5\x1e\xf6\xda\xa2\xd8\xf6\x66\x74\x94\xc6\x65\xf5\xbe\xc9\x5b\x4d\x65\x46\x6b\x0f\xa8\x79\x90\x33\x1c\x0f\x85\xca\xbd\x14\x80\xfd\x8a\x83\xb1\x70\x16\x22\xf4\xb9\xc4\x21\x3e\x82\x2b\x09\xfb\x05\x07\x63\x6d\x43\x95\xe9\x56\x26\x11\x34\x2d\xe7\xcb\x29\xcb\xb9\xc0\x7c\xbf\x39\x2b\xfb\xb2\x95\x7d\xf9\xa3\x43\x45\xa9\xa2\x8c\xce\x1a\x61\xdf\x95\x96\x45\x41\x29\xcd\x80\x9f\x21\x0c\x14\x61\xe0\xe2\x70\x58\x4a\x58\xef\x00\x36\xf0\x8d\xd8\xfd\x82\x6f\x8d\x25\xd2\x91\x85\x24\x46\x30\x54\x93\xbc\x97\x37\x16\x29\x00\xcc\x9d\x57\x61\xea\xe2\x15\x71\xcd\x15\x98\xf8\x2f\x40\x6d\x73\xc9\x0e\xb9\x49\x86\x18\xa2\x7b\xc0\x66\x83\x6f\xac\x74\x5c\xec\x0e\xa6\xb2\xe4\x44\x7c\x7f\x93\xf2\x32\xb1\xec\x76\xad\x51\x94\x4f\xec\x75\x25\x9c\x95\x53\x29\x8b\x72\xb7\x93\x8c\x96\xdc\x37\xb4\xa8\x66\x40\x73\x77\x64\x26\xef\x9f\x63\x26\xcf\xdf\xee\x70\x18\x98\x3a\x37\x71\x79\x63\xe4\x06\x07\xfb\x5c\x28\x8f\x7e\x0c\x85\x81\x37\x1e\xa3\x30\xf0\xf9\xf1\x4e\x29\x1a\xf6\x5d\xc4\x6c\xd1\x33\xc4\x21\x5e\xf4\xa2\xb1\xeb\xca\x50\x13\x30\x12\x06\xee\xc4\x83\xdd\x7d\xb2\x95\xe3\x81\x7f\xa9\x66\x7c\xbb\x9b\x8a\xdd\x71\xe2\x43\x8e\x0e\x55\xbf\x4c\x7c\x81\xd7\x90\xc2\xd7\x73\x67\x64\x2c\x4e\x94\x25\xf1\x50\x4d\x7c\x94\x92\x00\xad\x48\x88\x64\x40\xc4\xd0\x9a\x38\xe8\x86\x5c\x9c\x3f\x38\x6f\xe1\xa3\x72\xdc\x09\x7c\x5c\xd2\x55\x5c\xa7\xd5\x54\xf8\x4f\xa6\x9c\x67\xdf\xe5\xc6\xbc\x9d\x81\x84\xa4\x6a\x85\x28\xd8\xaa\x93\xb2\x65\x61\xff\x82\x90\xad\x65\xe1\x40\xfe\xba\xe3\x0b\x01\xcd\x67\x45\x5b\x38\x15\x6b\xb2\x9d\xd9\x78\x2a\x9b\x64\x70\x27\x66\xa8\xce\xcf\x30\x71\x49\x8b\x05\x87\x01\x9c\x62\x37\x34\x9a\xf8\x82\x3d\x87\x0e\xcb\x9a\xb8\xaa\xdd\x0d\x9f\x4d\x58\xfe\x34\xeb\x9e\x87\x26\xfc\x5c\x29\x86\x85\x81\xe7\xfb\xc3\xa7\xf1\x95\x3f\xc4\xc7\x77\x4b\x85\x70\x4d\xb6\x28\x69\xa2\xbf\x27\xb0\xd6\x53\xb6\x02\x12\xa3\xd6\x5b\x8e\x57\xbb\x25\x03\x33\x7c\x4c\x48\x29\x14\xf2\x5a\x59\xfd\xda\xf6\x3c\x38\xdc\xda\x9e\xf7\xa4\x76\x5e\x4b\x5b\xbe\xde\x1b\x17\x0e\x82\xfc\xd2\x48\x1d\x6c\x75\xec\x2f\xda\x0d\x02\x53\xcd\xb6\x27\x96\x6e\xb7\x13\xd9\x8c\xed\x0c\x48\x16\x57\xc7\x07\x81\x2d\x14\xda\x8a\x12\xb2\x34\x11\xad\xa6\x9c\xf6\x0d\x59\xf7\xd6\xca\xd1\xdd\x11\xed\x09\x05\xce\x8d\x65\x89\xcd\x69\x6b\x59\xe0\x8e\x30\x88\x74\xeb\xd8\x6f\x5a\x2b\xa3\xd5\x6b\x5a\x73\x88\x3c\xae\x18\x9b\xdd\x2e\x54\x1a\x14\x0a\x45\xd9\xed\xc0\x1d\x51\x5e\xed\x82\x90\x3b\x2e\xc3\x84\xdc\x89\xd9\x1f\xc8\x8d\x16\xd4\x0d\xf7\xcc\x0f\x52\x4c\x22\xf5\xa2\x05\xd8\x1e\x6e\x36\x68\xbb\x38\xe0\x6b\x6f\x58\xf6\x1b\xd3\xbf\xc9\x5d\x9b\x47\xb3\x18\x55\xc2\xae\xe9\x59\xd3\x8d\x5b\x9f\x17\x5b\x56\x79\xd1\x46\x08\xc6\xec\x31\xe4\x38\xd0\xdc\x1d\x23\xdf\x41\x61\xb8\xe8\x99\x63\x8e\xa2\x8a\x0b\x50\xca\xb4\x22\xff\x61\xdc\x59\x5f\x08\x48\x61\x55\xb1\xb2\xaa\x18\xb6\x3b\xb1\x78\x73\xac\xd2\x46\x62\x60\x0e\xda\xee\x58\xb7\x73\xc7\xc8\x3b\x94\x39\xc6\xda\x1c\xe3\xdd\x4e\xf8\xe3\x78\xb7\x93\x2e\x38\x86\x82\xa9\x23\x24\xd2\x6b\xc7\x27\xbd\x76\x6c\x78\xed\xbd\x1a\xfc\x73\xf2\xd0\xe8\x35\x15\x44\x23\x60\x67\x10\x30\x8d\x60\xec\x37\xce\x3f\xb6\x2c\x10\x9b\xce\x3f\x25\xd7\x20\x7e\xd2\xbc\xd2\x59\x0d\x62\x38\xe5\x33\x55\xe6\x69\x5a\xcc\x51\x89\x39\xbc\x90\x13\x29\x36\x88\x54\x6c\x10\x9e\x87\x52\xbe\x3f\x78\x9e\xb9\x3d\xfc\xf6\xdf\x7a\x30\x08\xf9\x7e\x54\x5e\xe2\xd0\x99\x61\x77\x32\xc5\x13\x4f\x08\xfc\xf8\x90\x20\x0e\xe2\xae\x3e\x24\x44\x11\x3f\x24\xac\xe0\x90\x9f\x10\x44\x42\x26\x8a\xbc\x10\x61\x67\x8c\x83\x46\x33\xfc\x28\x70\xa2\x61\xad\x32\x00\x27\x83\xfa\xb3\xa2\x4f\x9e\x8a\xeb\x13\x69\xcf\x89\x19\xd7\xef\x76\xf2\xb4\x9e\xeb\x00\x5f\x85\x73\x33\x19\xc3\xb5\x51\x3f\x0e\x26\x8a\x27\x91\x15\x0e\xdc\xa7\xce\x00\x7f\xfe\xc7\xc1\x8d\xa6\x8b\xfd\xd3\x51\x4e\xdf\x88\x70\x9e\x08\x70\xcc\x33\x87\xca\xb2\x2c\xc9\x52\x1c\x3a\x1a\xe1\x1f\x9d\x3b\x8c\x0f\x82\x40\x81\x22\x77\xec\xf2\xf5\x0d\x60\x7b\xfe\x80\xc6\x75\xf7\x5e\x25\x24\x74\xc8\xd4\x49\x14\x48\x15\x14\xe7\xf0\x28\x82\x28\x26\xd5\x2f\x38\x8a\xf4\x91\x40\x1c\x08\x3c\xac\x75\x0f\xa2\x78\x08\x62\x33\xf1\xd0\x2e\xc5\x5f\xff\x2d\x26\x84\x84\x71\x04\x3a\x50\xaf\x65\x5a\xaa\x3d\x32\x87\x01\x84\x46\xb4\x7f\xa4\xf3\xea\xa5\xca\x91\xca\xd7\x4f\xa9\xfc\x71\xd4\xfe\x33\x47\xd9\xbf\xff\xf1\xa3\xec\x35\xa0\x4f\xf1\xc2\x66\xfc\x10\xc8\xbd\x22\x6b\x93\x4a\xec\x17\x3c\x71\x86\x61\x60\xae\xea\x5b\x33\xf3\x9e\xbd\x7a\x15\x21\x46\xdc\x20\xb0\xb2\xe6\x90\x34\x9b\x17\x88\x2d\xa6\x73\x86\x0a\xe3\x0d\xc2\xef\x52\x4b\x25\x31\xea\xaa\x13\x55\x32\x3f\x9c\xcb\xa5\x3a\xcd\x67\x71\x70\x6c\x6c\x92\x62\xf2\x75\x87\x38\xb7\xb5\x77\x3c\xac\x73\x82\xd4\x0a\xde\x94\xba\xc7\xc9\x43\xfd\xaf\xf4\x81\x50\x1c\x03\x39\x44\x4d\xb2\x19\xa8\x2e\x2f\x23\x38\x2c\xa7\xa0\x14\x85\x4a\x93\xdd\x4c\xff\xa8\x7c\x74\xaf\x39\x89\x36\x69\xef\x20\xf4\x5c\x07\x05\x63\xcf\x17\x9e\x2d\xf0\xc2\x21\x76\x5c\xff\x05\x48\xed\x20\x70\x27\xa1\xc8\x8b\x0a\x20\x38\x05\x45\xa3\x47\x6f\x41\x8d\x32\xc8\xe3\x40\x06\xe1\xde\x38\x7e\x8a\x41\x1c\x2b\x9e\x88\x33\x5e\xdd\x84\xbd\x07\x73\xf1\x91\xd3\xda\x58\xb8\x3f\x94\x9b\x78\x52\xa9\x8a\xf3\xbe\x91\x7b\x35\x47\x5d\x01\x69\x81\xbd\x05\x0c\x65\xda\x71\xbd\x05\x82\xb8\x21\xe0\x7e\x2e\xf0\xc2\x57\xaf\xb0\x03\x51\x06\x51\xce\xbb\x38\x6d\x4d\x97\x85\x1d\xd7\x83\xc6\x4d\x47\x35\x4a\xf2\x2c\x89\xb9\x91\x18\x24\x7f\x78\xa6\x15\x18\xc1\x34\xe5\x91\x7d\x05\x28\x9c\xd1\x69\xe8\x79\xa1\x33\xa4\x76\xf7\xd6\xe4\xd3\x33\xef\xce\x3a\x4f\x82\x6c\x3c\xcd\x41\x01\x67\x85\xbc\xf0\xe2\x88\x51\xe8\xf9\xd1\x18\xce\x0a\x5b\xce\x83\xdd\x68\x5a\x0b\x2b\x3e\x79\xab\x6b\x59\xe0\x64\x3b\xd8\xb4\xdf\x75\xa1\xe6\x21\xcf\x00\x3d\xde\xd0\xea\xdc\x57\x7e\x4f\xdd\x05\xef\xf7\x67\xde\x66\x74\x27\x92\x4f\x0c\xce\xcc\x72\xfe\x21\xc6\x33\xb1\x37\x2f\x33\x7e\xc0\x47\x03\xb7\xdf\x43\x88\x0c\x14\x23\xf9\x28\xe8\x60\x9d\x85\xd3\xe9\x15\x64\x90\x0b\x12\x06\x44\x7f\xe6\x9a\x59\x56\x66\x3e\xf2\x10\x1f\x15\xbe\xae\x57\x2b\x5a\xcc\x32\x7a\xdf\xff\xca\xb2\x2a\xd2\x5f\x1a\x4e\x4f\x0d\x1f\x5c\x0b\x68\x75\xe9\x9f\x8d\x64\xf5\xb9\x38\x15\x38\xca\x46\xd7\x0f\x15\xfd\xb8\x5a\x95\xb4\x52\x95\x3f\x45\x82\x1c\x4e\x0f\x86\x38\xb0\xfb\x30\xca\x7c\x20\xa2\x1f\x00\x34\x2f\xa3\xb6\xf3\x13\xcb\xbe\x00\x8f\x62\x99\xa6\x4f\xac\x16\x3c\x7a\x3c\x75\x6a\x3e\xd2\x3e\xfb\x29\xc5\x87\xa8\xed\xb5\x6d\xc5\x7d\x33\xbd\xef\x97\xa0\xe0\xa1\xc0\x7c\xf1\xf2\x65\x93\x24\x1b\x15\x34\x5e\x82\xd6\xdf\xd6\x2a\xcf\xaf\xeb\xa0\x22\x1d\x36\xb4\x9d\x81\x1c\xd5\x50\x5f\x0a\x68\x67\x6e\x59\x07\x5f\x84\x56\x70\x16\x8b\xdb\xe0\x51\xbc\xdd\xa6\x0f\x20\x46\x15\x9c\xca\x16\x50\x41\x28\x6e\xe4\x8f\x59\x81\x8f\xcb\xfc\xf1\x19\x04\x68\xe2\xff\x73\x3a\xee\xd7\x2c\xa5\xe0\x22\x1f\x19\x1f\xf2\x02\xa8\x9f\xa0\x98\x6f\xdb\xb4\x1b\x3f\x4a\x2a\xa3\xa2\xd9\x3b\xc9\x5c\x7d\x72\x89\xda\x07\x9c\xa8\x7d\xfa\xb9\x40\xc5\xa9\xd7\x20\x48\xba\xbe\x26\xc2\x2b\xe0\x6e\x77\x60\x60\xba\x41\x69\xc2\x6e\x07\x32\x75\x77\xf3\xca\xb1\xac\x30\x70\xc7\x22\x03\x3d\x77\x16\x33\x70\xa0\x33\x0e\xca\x9a\x0f\x6e\xa7\xe6\xa8\x23\x40\x08\x91\xc9\x5c\xfb\x45\xef\x60\x80\x0a\xe2\xbc\x2c\x2e\xb3\xf6\xc2\xa8\x09\x06\xb2\x79\xb1\xe8\xb1\x4b\x22\xb6\x96\x19\x1d\xaa\xaf\x61\x47\xab\x22\xdf\xbc\x59\xc7\xc5\x9b\x7c\x49\xf9\x66\x06\x98\x4d\xe4\x53\x83\x33\x30\x7a\xfb\x91\x1b\x8f\xda\x71\xf8\x4e\x63\x31\x68\xec\xa2\x7b\x1e\x01\xcb\x6f\x66\x39\x03\x28\x86\xfb\xd3\x3e\xcd\xb2\x4e\xbb\xba\xbb\x7f\xde\x63\x1b\x28\xe5\xbb\x9f\x43\xd7\xa7\x1f\x59\x8a\x6b\x80\xc1\x60\xda\xbc\xb3\x7c\x86\x1b\xd1\xef\xd1\x6e\x7e\xca\x8d\x88\xea\x1e\xfe\xa4\xc3\x28\x78\x70\x24\x1c\xc6\x69\x4d\x68\xe9\x2e\x88\xfe\xca\x5b\x25\x5e\xe7\x8b\x97\xec\xb2\x78\xa9\xef\x11\xe9\x28\x51\x0b\xfb\x5b\xa5\xc2\xba\xfc\x52\x2c\xf1\x6e\x97\xbf\x92\x51\x4e\x25\xed\x30\x87\xcd\xe3\x21\xb1\xea\x97\xfc\x80\x90\x5f\x92\x0e\x90\x4a\xac\x34\x80\x1c\x53\x03\x28\xe2\x29\xb6\x02\x8c\xef\xf6\x36\x3e\x31\x46\x9d\x2b\xba\x54\x0d\xb1\xa0\x4b\x4d\x5a\x5a\x56\xa9\x27\x55\x6f\x5b\x84\xf6\xe5\xa8\x96\x85\xb2\x67\xe0\x0d\xf9\xc1\xe9\x12\x3b\x70\x58\x43\xc4\x86\x04\xab\x47\x6a\xe6\xcc\x7b\xd1\xae\x15\x89\x2b\x2e\x8f\xa6\x5a\x2f\x1c\x93\xea\xd0\x0b\xc7\x87\x5e\xb8\xe3\x31\x0c\x27\x58\xa1\xb8\xf1\x7e\x5d\x97\x57\xc0\x59\x6e\xba\xbc\x1c\x15\x70\x2a\x5b\x78\x7c\x73\xce\xf3\xf2\x45\x7e\x29\x1e\x8a\x3c\x31\x67\xd5\x38\xde\x97\xf0\x67\x66\xed\x1d\x3f\xad\x6c\x32\x83\xdd\x9d\x35\x87\x7b\x74\xa3\xdd\xe8\xe2\xc4\x71\x5a\x0c\xf8\x2e\xff\x30\xc1\x0f\xe1\x1e\x04\xdc\xe9\x77\xdf\x96\x75\xe6\xd9\xfb\xd3\x5f\xf3\x70\x13\x1e\xa9\x07\xf6\x3c\xd4\xf8\xc1\x13\x79\xf5\x37\x11\xa4\xa3\x2f\xc8\x3d\x38\x7c\xfc\xd7\xdb\xce\xe9\x59\xfa\x3f\x8a\x07\x45\x5c\x22\xe7\x61\x6e\x25\x8c\x7c\x64\x8f\xb6\xa3\x7f\xbd\xfe\x70\x0e\xf4\x9d\x10\xc7\xcd\x53\x20\xdf\x40\x86\x2e\x1c\x01\xa5\x5e\x0e\x3c\x01\xc9\xd7\xe0\x47\x60\x7a\xce\xd7\xec\x26\x38\x07\xf3\x59\xa1\x7a\x0a\xe6\xb5\xc4\x33\xd7\xdf\xe3\x9c\x95\xc7\x7b\xad\x1b\x3f\x02\xfc\xa2\x31\x9a\x1f\xeb\x9c\x85\x7e\xa3\xd1\x3e\x0b\xfa\xab\xe2\xba\xf9\x26\xe7\x1c\xe0\x9f\x8a\xf5\x1f\x02\xfe\x66\xf2\xff\xe1\xd3\xf9\xa9\xff\x36\xf9\x7f\x0a\xf0\x2f\x8d\xb1\x0d\x50\xce\x81\xfe\x01\x78\x1c\xd1\x9a\xdc\xd3\xd0\xbf\x6b\xe8\x06\xf7\x9f\x4f\xe3\xc6\x5d\xdc\x4f\x41\xff\xae\xa1\x6f\x8e\xbf\x87\x39\x37\xe6\x93\x96\xc8\x73\x07\x7c\x10\x03\xb2\x91\xf1\x5e\x58\x84\x5c\x46\x9d\xdc\x41\x05\xa0\xbe\x13\x68\x00\x54\x9d\x6c\x20\xfa\x99\xbf\xe9\x03\xba\x0d\xe4\xd1\x98\x6c\xda\x99\x1a\x19\xb3\x4c\x3b\x73\x22\xfd\x82\x5c\x7d\xc4\x32\x3d\xf9\x71\xc9\x1e\xee\xa1\x88\x2d\x76\xbb\xc7\x3d\xec\xfd\xbf\x00\x00\x00\xff\xff\x22\xb9\xa8\x37\xb7\x48\x00\x00") + +func web_uiAssetsEncodingCdb50fbdab6d4d3fdf574dd784f77d27JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsEncodingCdb50fbdab6d4d3fdf574dd784f77d27Js, + "web_ui/assets/encoding-cdb50fbdab6d4d3fdf574dd784f77d27.js", + ) +} + +func web_uiAssetsEncodingCdb50fbdab6d4d3fdf574dd784f77d27Js() (*asset, error) { + bytes, err := web_uiAssetsEncodingCdb50fbdab6d4d3fdf574dd784f77d27JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/encoding-cdb50fbdab6d4d3fdf574dd784f77d27.js", size: 18615, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsEncodingIndexes75eea16b259716db4fd162ee283d2ae5Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xcd\xce\x2c\x4d\x92\x9c\xb7\xd7\x55\x50\xbd\x18\x0c\x81\x92\x10\xe1\x7f\x11\x21\x60\xae\x84\xd0\x46\x33\xdf\x10\x0d\xb4\xba\x09\x4e\x37\x40\x81\x37\x2f\xd8\x63\xf5\x7e\xe4\x10\x12\xb4\xd0\x82\x5c\x9c\xb3\x88\x37\x4f\x56\x56\x66\x56\x66\xfc\x98\x9b\x9b\xbb\xff\xfd\x3f\xff\xed\xcf\xff\xf8\xd7\x3f\xfe\xe5\xcf\x7f\xff\xa7\x7f\xfb\x9f\xff\xf0\xb7\x7f\xf9\xed\xdf\xfc\xcb\x5f\xff\xe3\x1f\xff\xf1\xaf\x7f\xf8\x9f\xfe\xf0\xb7\x3f\xff\xd3\x6f\xff\xfc\xc7\x3f\xff\xf6\x4f\x7f\xf8\x9f\xff\xe1\xaf\xff\xd7\x7f\xf8\xed\x2f\xff\xfc\x6f\xfe\xcf\xbf\xfc\xd3\xdf\xfe\xf4\xdb\xdf\xfd\x9d\xff\xfe\xaf\xbf\xfd\xa7\xff\xf0\x97\xff\xf8\xd7\x7f\xf9\xbb\xbf\xfb\xfb\x7f\xbd\xe3\x1f\xfe\xf4\x6f\x3f\x7f\xfa\x77\x7f\xf8\xed\xcf\xff\xf8\x97\x7f\xfa\xe3\x9f\xff\xfd\xff\xf2\xc7\x3f\xff\xd3\x6f\xff\xe9\xb7\x7f\xf9\xc3\xff\xfe\x0f\xff\xf9\xff\xf8\xe3\xbf\xef\xff\xed\xdf\xfd\xf9\x6f\x7f\xfa\xd3\xe7\x57\xf3\xab\xf9\xd5\xfc\x6a\x7e\x35\xbf\x9a\x5f\xcd\xaf\xe6\x57\xf3\xab\xf9\xd5\xfc\x6a\x7e\x35\xbf\x9a\x5f\xcd\xaf\xe6\x57\xf3\xab\xf9\xff\xd5\xec\x93\x2f\x3e\xfb\xf5\x9a\xcf\x3e\x2f\xf2\xb3\xcf\xcd\xf5\xd9\xe7\xdc\xfa\xec\x59\xd9\xef\xb3\xdf\xcd\xad\x0f\x2a\x3f\x7b\xe2\xbd\xfc\xec\x37\x37\x3e\x7b\x72\xed\xfc\xec\x8e\xce\xcf\xbe\xa1\x2f\xde\xa8\xd2\x09\xe3\xd0\xae\xcf\xae\xbb\x75\x92\xaa\xb7\x9f\x4e\xd9\xaf\x3e\xbb\x5f\x9e\xad\x3f\xaf\x39\x5c\xa7\x3e\x71\xef\xd6\x19\xba\x75\xb5\xcb\x8d\xdd\xc7\x35\x43\x47\x1d\x9d\xe0\xed\x75\x3f\xfb\x2e\x1d\xda\xb7\xde\xfb\xc4\x8b\xd0\x7f\x6a\xbf\xf9\xec\x3c\x57\xd7\xae\x79\xad\x8b\x9f\x78\xe7\x13\xb3\xef\xfb\x44\xc4\x1c\xff\xee\x8c\x5d\xda\x71\x75\xfb\x33\xb7\x38\xd9\xac\x4f\xde\xa3\xd3\x4f\x1c\x9d\x38\x7b\xf7\x67\xe7\xed\xb7\x3e\x91\xb1\x4a\xff\x19\x3d\x8b\x3d\x6f\xb4\x4b\x67\xc9\x3a\x6a\xef\xaa\x4f\x4c\x9d\xfb\xc9\xda\x4f\x3f\x61\xe5\xd2\xdd\x9d\x97\x9f\x78\x57\xcf\xa8\x4a\x6d\xde\x3e\x7a\x22\xbd\xf4\xe3\xbb\x47\xbf\x65\xf8\x5d\x9d\x37\xe2\xb3\x7b\xbd\xfc\xe4\xae\x5b\x9f\x5a\x57\xcf\xa3\xce\x5d\x7a\x14\xb3\x5b\xbf\x2e\xaf\x7e\x5d\xe6\x39\xfa\x91\xf9\x66\xb8\xa9\xf8\x64\xea\x59\xe9\x4b\xf5\xc9\xf3\xb2\x3f\xfb\x9e\x9c\x4f\x56\x46\x7e\xf4\x04\xae\x7e\x64\xae\x4f\x9e\x5a\xeb\x93\x7b\xdf\xfa\xe4\x8e\x1b\x9f\x98\x58\xf7\x13\x67\x9f\xf3\xc9\x7a\x47\xb7\x7d\x4e\x7c\x72\xcf\x6d\xfd\xb6\x77\x75\xe4\x99\x4f\xec\x75\xf6\x27\xe7\xa5\x1e\x49\x57\x7c\xe2\x4d\x8e\x7e\xcc\x9a\xd6\xaf\x7d\xba\x89\xb7\x74\xc9\xea\xcd\x4d\xf4\x27\x76\xdf\xc5\x03\xf7\xcf\xcf\xfb\x89\xe8\xd6\x15\xb2\x46\x8f\x7d\x66\x7f\xb2\x8f\xde\xe0\x5d\xdf\x8e\x32\x7a\x21\x67\x1e\x67\x4f\x3d\x97\x99\xf8\xec\x5a\x75\x86\x8b\x14\xff\xd1\x43\xd4\x9f\xc7\x9f\x17\x7c\xd4\x9f\xac\xd5\x3a\xba\xe8\x16\xd3\xe3\x1b\xd3\xf3\x9a\x54\xaf\xeb\xd9\xfd\x89\x8e\xbb\x3f\x71\xcf\xf5\xf7\xce\xff\x00\x83\xf3\xff\x7d\xd4\x86\xde\xa8\xda\x43\x7b\x69\x9f\xda\x52\xaf\xd8\xa9\x3f\x71\xd4\xab\xf5\x66\xfd\xe7\x70\x70\x05\x6d\x7a\x97\x7a\xf7\x8b\xef\xd1\xe5\x7d\xc5\x7f\x9a\x96\xab\x94\xbf\x78\x7d\x66\x7f\x9f\x8b\xf5\xfa\x44\xcf\x67\xbf\xfc\x94\x46\xc5\x8b\x8f\xbe\x1e\x4b\x4f\x32\x3e\xa1\xee\x95\xf1\x89\xbd\x3f\xa5\x5e\xb1\x97\xef\xff\xdc\xf3\x5f\xb6\x74\x5c\x7c\xa2\x8f\xba\xc2\xa7\x26\xd4\x63\x3e\xad\x31\x73\xfa\x13\x99\x9f\xb8\xa9\xa1\xf6\x09\x86\xe4\xf9\xd4\xd4\x27\xd4\xa5\xf5\x59\xe9\xda\xf3\x89\x8a\x4f\x4e\x7e\xa2\xd7\xa7\xe6\x7e\x34\x30\xeb\xac\x4f\x9d\xf8\xd4\xa9\x8f\xba\x4a\x74\xfc\x7e\xd5\xfd\xfb\x96\xce\x5d\x9f\x59\xef\xf3\xf6\xb9\x6a\xde\xff\x00\xaf\xf8\x57\xf3\xff\xbd\x74\xc5\xd3\x9c\x90\x5d\x2f\xbd\x2b\xfa\xce\xfc\x57\x87\xc4\x5a\xf1\xd4\x7d\xee\xfe\xd4\x8a\xa3\x39\x2f\x2b\xff\xeb\x93\xcc\xd6\x0a\x13\xad\x0e\x1f\x4b\xbd\x27\x56\xa8\x7f\x2d\x2d\x8c\xb1\x34\x1b\xc7\xba\x4d\xcb\x9e\xa7\x4f\xf7\xee\x54\x3b\xeb\x13\x3b\xd7\x51\x1b\x9a\x16\x4b\xfd\x78\xd3\x43\x43\x7d\x32\xe2\xa8\x37\xc6\xb9\xb4\x6f\x6b\xd1\xc9\xa2\xd5\x02\x92\xef\xaa\xff\x75\xd1\xaa\xbf\x9f\xa5\xde\xbc\xb5\xbf\x46\x73\x66\x6b\xc1\x8d\x19\xdd\xc9\x4c\xdc\x4f\xcc\x89\xfe\xc4\x79\x1a\x63\x97\x55\x6b\x2d\xcd\x74\x51\xb1\x68\xaf\x5a\x8d\x88\xd0\x39\x53\x27\x52\x7b\xde\x27\xa3\xb7\x3e\xed\x39\x9f\xcc\x5a\x5a\x30\xea\x6a\x7b\xea\x7c\xb2\x79\x48\x7d\x4e\x7d\xb2\xef\x5e\x9f\x9c\xf3\x6d\x37\xed\xd5\x92\xb0\x35\x07\xbf\x37\x9f\x8c\x58\x5a\x18\xb4\xd4\xe6\x2e\x8d\xc7\xbd\x72\xff\x3f\xbe\xaf\x3c\xc1\x9d\x6a\xba\xce\x13\xbb\x3e\x19\xaf\xbf\xaf\x2b\x67\x2f\xdd\xc4\xda\x9a\x84\x72\xfe\xd5\xfc\x9b\xf1\xe2\x7c\x6a\xe9\x0e\xf7\xd3\x0a\x51\x2b\x35\xe7\xac\x9a\x25\x8c\xb0\xaf\x16\xbf\xde\x4b\xcb\xc5\xe9\xab\x4f\x5a\xfb\xf4\x7c\x85\x08\xe6\x7b\x4b\x71\x53\xd7\xcd\x64\xc1\x7a\xe7\x7b\x95\x7d\x8f\x1e\xdf\xeb\x0c\xb5\x73\x58\x3f\x8f\xd6\xc6\xad\x95\xb9\xde\x09\x56\xfe\xa7\x39\x30\x5a\x57\xad\xd0\xe2\x1d\x6b\x2d\x5a\x81\x8c\xb5\x84\x09\xd6\xd6\xa2\xb7\x84\x79\x62\x05\xdb\xa1\xd5\x3e\x53\x5d\x60\x15\x80\xe9\x95\xbe\x55\x9a\xd8\xd6\x6c\xa1\x96\xd2\x5c\x9e\x25\xa4\x94\x75\x74\x36\x4d\x92\xea\x38\x3a\xcf\x53\xd7\x58\x8f\x33\x3c\xae\xb5\xf5\xe0\xf7\xde\x74\x43\x75\xa5\x1d\xf7\xf0\x5b\xe9\x80\x5b\xdb\x23\x74\xb2\x4b\xd8\x29\xa7\xb7\xb6\xf5\xc3\x77\xf3\x54\xe6\x70\x8c\x60\x96\x7e\xfa\x27\xb6\x8f\x19\xce\x30\xb7\x68\x75\x86\xb3\xf5\x2d\x2d\x1a\x21\x14\xa8\xf6\xe9\xea\x77\x69\xb5\x39\xa1\x41\x70\x85\x1d\xf3\x24\xad\x7e\xfb\x7e\xac\x2e\x67\x5a\x38\x51\xd8\x49\x5f\xfb\x79\xe2\x59\x5a\x0d\x76\x56\x01\xdd\xf6\xe5\xd2\x5e\xca\xa3\x85\x2a\xea\x06\x2b\x0e\x6b\xf8\xd4\x17\x15\x81\x05\xde\x06\x15\xd6\x68\x41\xaf\x25\x2c\xb3\xfa\x8e\xbe\x0a\x9c\xad\xa7\x1b\xbb\xe9\xa3\x38\xb8\xef\x06\x4d\xec\xa5\x2e\xdc\x57\x57\xcd\x6a\x1e\x4d\x2f\x7d\x29\x2b\x85\xac\xb2\x6b\xb3\x1c\x95\x3a\xbc\xd0\xdc\xce\xba\x8b\x57\xb4\x05\xc4\xb2\xd7\x0e\xee\x72\xe9\x97\x55\x69\xf9\xad\x3b\x6f\xff\xfe\xd3\xb4\xf0\xec\xb3\xfa\x24\xf7\xa7\x3f\x57\x43\x73\xf7\x8e\x75\xfc\x0b\xd7\x27\xdf\x2c\x6e\x56\xf0\x68\x1e\x7d\x79\x72\xb8\x84\x16\xe1\x8e\x18\x9d\xe0\x3d\xad\xcf\xb3\x1f\x3f\x2d\x66\x96\xfa\xbf\x46\xee\x7d\x99\x3f\x93\x61\x1a\x1f\x09\xd0\x46\x9f\xab\x57\x72\x84\xda\xf5\x05\xdd\x60\x04\x2f\xba\xe9\x25\x05\x94\xd7\x68\xd7\x97\x8e\xa6\x01\xfd\x11\xaa\x9a\x00\x03\xb6\x26\xa9\xdd\x7b\x00\x78\x15\x0c\xff\xd2\x62\x9f\xcf\x70\x75\x4e\xea\x84\xf1\xf6\xcf\x3d\xdc\x32\xac\xa8\xa7\xf7\x92\x47\x33\xde\x68\x57\xc5\xf9\xfd\x46\xeb\x3e\x61\x97\x8c\x14\xa0\xe8\x16\xce\xde\x59\xea\xda\x7a\x21\x4d\x5f\xe2\x02\x2d\x03\xe1\x64\xde\xef\x37\xdf\xd6\xdb\xaa\xfd\x42\xdf\xef\x8c\xfe\x64\xea\xad\xe6\x03\x13\xeb\xdb\x5a\xe4\x05\x35\xf4\x0b\xd5\x1f\xf6\x3e\xf9\xc9\x09\x66\x5f\xc1\xda\xe8\x13\x46\x95\xef\xf7\x27\xd7\x2c\x23\x35\x7c\x2f\x96\x9f\x5a\xe7\xef\x5d\xb5\x41\xa0\xd5\x57\x73\x4a\x1d\xbf\x6f\x21\xf7\xa9\x5e\x1e\x43\xfc\x94\x10\x40\xcf\xa7\xc9\x36\x34\x58\xf9\x5d\xe3\xb3\x69\x5e\x9b\x77\xf4\x8e\xb3\xd7\xfa\xc4\x39\x3a\xba\xf7\x7a\xef\x5f\xaf\x47\xbb\x98\x5d\x1e\xa3\xf9\x61\x86\x9d\x1c\xcd\x0b\x9a\x84\x8f\xa7\x07\xce\x8d\xb9\xd3\x47\x3f\x28\x83\x23\xb2\x53\x83\xae\x76\x6e\xfe\x4c\x60\xbe\xc8\x6c\xea\x58\xb2\x05\x64\xab\xf0\xf8\x16\x86\x48\xdd\x00\x76\x33\x54\xeb\x8d\x87\xa4\x1e\x7c\x0a\x6b\x73\x7c\xc6\xef\x1d\x1b\x08\x2d\x40\x7d\x7c\x5c\xf8\xe9\xf0\xa3\xea\x32\xd0\x35\xa9\xd4\x7a\x86\x86\xed\x9f\xab\x4f\xaa\x52\x87\x8f\x6c\x16\x77\xc7\xf1\x08\xfc\xfe\x61\x27\xd3\x56\x05\x73\x42\x5d\x4e\x5f\x57\x66\x91\xae\xc2\x35\x1f\xf3\x7a\x8e\xa6\xfc\xbe\x2d\xcc\x3a\x67\x6b\x72\x50\x7f\xdc\x7e\x48\xf5\x49\x26\xfa\xd8\x32\xe6\x32\x01\x7f\xfb\x55\xff\xbc\x72\xad\x16\x9f\x7c\x4f\xcb\xdc\x1b\x0d\xee\x91\x2d\xab\x6b\xcb\xfa\x8d\xab\xb1\x96\xb9\x65\x6c\x24\x33\x7c\x62\xb8\xf4\x59\x5a\x55\x73\x1d\x4f\x36\x9a\xb3\xb2\x3c\xca\xe3\x09\x5d\x2c\xee\xf9\x79\xbe\x18\x1e\x64\x9d\xef\xd3\xa5\xaf\x9c\xeb\xd7\xae\x77\x92\x97\xe9\xb2\xb2\xe9\x9e\x4f\xbf\x7a\x07\x0b\x41\xe7\xb7\x53\xfa\x21\x9c\x33\x1e\xbc\xd7\x80\x47\x77\x5c\xd8\xe6\x39\x00\x7b\x1d\x72\x74\xe2\x8d\xc9\x1d\x47\x43\x21\xb7\xe7\xb7\xfd\x8e\xff\xf8\xdb\x3b\xfd\x47\x28\xa4\x98\x64\x6b\x98\xaa\x36\xff\x9b\x6a\x4f\x84\xb2\x41\x39\x31\x77\x8c\xa9\x57\xeb\xa6\x3f\xe2\xc4\x32\xdd\x34\x4f\xe9\xd9\x1c\x06\xf9\xae\xf7\xe8\x9d\x07\x43\xa2\x0e\xd4\xc1\x14\xaf\x20\x34\x73\xc4\x5e\xf4\x40\x0c\xd8\x56\x67\xc2\xa0\xd3\xed\x16\xd3\x76\x69\x5e\x79\x51\xb2\xd3\x30\x54\xee\xdb\x4f\x6f\x4b\x90\xe5\x5d\x9b\xfa\xb2\x8c\x77\xb1\x86\x45\x2c\xad\xd2\x29\xb8\x12\x01\x30\x5b\x6b\x19\x74\x71\x21\x8d\xfb\xfd\x6a\x2e\xe6\x3d\x8f\x77\x87\x50\xd6\x5a\x2c\xd2\x9e\xd6\xf5\xfe\xf5\x9a\xcf\x27\xaa\x64\xc1\x54\x6b\x61\x2e\x2d\x2c\xd1\x5b\x88\xae\x9f\xec\xf9\xa3\xc1\xac\xf1\xbb\x69\x07\xab\x71\xc1\x42\x00\x02\xb4\x7c\x3c\xd6\x12\x99\xd0\x47\x60\x4b\x93\xd4\xd6\xf8\x13\x6c\x4a\xf6\xf4\x67\xb7\xcc\x5d\x8f\xc5\x6f\xc7\xec\xa9\xb7\x3f\xa9\xd3\x7e\x32\xae\xc7\x77\x30\x3b\xdf\x05\xba\x4a\x2d\x4b\xf5\xf6\x08\xab\xb1\xb4\xee\x67\xc8\x56\x25\x14\xa5\x49\xf1\xae\xd8\x9f\xbc\x82\xb1\x79\x43\x76\xfa\x4d\xf5\x9f\x39\x95\xef\x93\xf7\xde\xf9\xe4\xa3\xc3\xbe\x2d\x34\xf8\x76\x6a\x20\x84\x86\xd8\xf9\x4d\xcf\x7d\xb1\xc8\x08\x30\x0a\x76\xe9\xe7\x6a\x36\x98\x3c\x5a\xa6\xd7\x0a\x9b\x8f\x82\x6c\xb7\x04\xb1\x7b\x57\xea\xc2\xbd\x7e\x90\xb7\x30\x46\xdc\xcd\x70\xdd\x3b\x84\xd6\x04\x68\xb4\x10\x43\x2e\x40\x09\x9d\xf3\x34\xda\x80\xc5\x29\x70\xb0\x9f\x0c\x3d\x4d\x56\x74\xd2\xd1\x53\xec\x7a\x02\xbd\x25\x6c\xbf\x47\x73\xae\x90\xe8\x69\x0d\x37\x75\x9b\xa7\x05\x36\x26\x61\x59\x46\xf3\x49\xd5\x5a\x5a\x3b\x22\x78\xcc\xf5\x0c\x02\xd5\xbb\x5e\xe8\xd1\xad\x57\x02\xb2\xc2\x73\xb1\x9e\x80\xc8\x34\xe8\xd2\x67\x39\xa1\xa9\x52\x1d\x5a\x9f\xbc\xd4\x23\x4f\x06\x6c\xaa\x43\x7e\x8d\xe4\xb3\x12\x74\x38\x5a\x23\xf3\x0a\x30\xc4\x3d\x40\xae\x50\xef\xcc\x97\x4f\x16\xc7\x3d\xba\x62\x69\x2a\x9e\xc9\xb3\x79\x12\xfb\x93\x0b\x52\x65\x6d\xcd\x22\x0b\x8b\x61\x69\xa9\x56\x0f\xc2\x16\x29\x60\xe8\x01\xb0\xb5\xb0\xf6\xd6\x23\x8d\x91\x85\x6d\x02\x20\xef\x68\x91\x05\x4a\xa9\x3d\x74\x5a\x16\xc9\x75\xe8\xaf\xef\x3b\xf3\x1e\x81\x74\x21\xc6\x23\x44\xba\x6b\x5a\x57\x3d\x6f\xfd\x58\x4e\x6f\x33\xa0\xfc\x2b\x9e\x59\x9a\xa5\x09\xa9\x97\xfa\x6d\x64\xea\xec\x4f\x2b\x73\xb6\x66\xcf\xdd\x75\x58\xf6\x52\x13\x56\xee\x94\x71\xb1\x59\x8b\xb6\x16\xd7\x8c\x54\xff\xd3\x9c\x05\x1f\xf6\xf8\x31\xf9\xf1\x2a\xa3\x6d\xf5\x57\xad\xb2\xda\x16\xc4\xbb\x9a\x93\x8b\x8e\xf4\x04\xe3\xf2\xd4\xf2\xb7\xe8\xbb\xc9\x82\x35\x90\x83\x03\xc4\x38\x4b\xf3\x66\xae\x7f\x65\xf3\xd9\x62\x78\x6b\x0f\x64\x1c\x34\x1c\x33\x5d\xfe\x40\x90\xac\x80\x3e\x7a\xf7\x26\x8b\x83\x5e\xe2\xa2\xc3\xbd\xd6\x52\xa5\x61\x1e\x9f\x48\xbd\xf8\xdd\xb7\xbc\x4f\x8f\x5a\x37\xe3\x1b\xc6\x6a\xab\x61\xfb\xa9\xf7\xe9\xb6\x23\xeb\x7c\xe2\xea\xcd\xe5\xde\x9a\x06\xfb\x68\x86\x3c\xc3\x43\x4f\x16\xaf\x62\xee\xd9\x27\x69\x65\x51\xf9\x0d\x18\x29\xd7\x68\xb8\x67\xb7\x5e\x59\x32\xfb\x37\x18\x4c\xab\xad\x46\x89\xc6\x42\xad\x2b\xd3\xef\xa9\xa3\xec\xc3\x25\xea\x0c\x20\xf6\x9e\x0b\xf1\x0a\x0c\x10\x6e\x97\xdd\x31\x46\x65\x4c\x23\xe7\xb6\x4e\x9f\x32\x65\x0b\x42\x53\x10\xf9\x13\x21\xb8\xae\x25\x0f\x5c\xa9\x95\xe2\xac\x90\xa1\x5a\x89\xf5\xa2\xd9\xe0\x07\x07\x60\x01\xee\x19\x68\xdf\x99\x8a\xcf\xbe\xb2\xdf\xf6\x5c\xa0\xc1\xec\x6c\x6e\x12\x52\xb7\x06\xde\x32\x41\xaf\x5a\x37\xee\xd6\x44\xd3\x57\x83\x7f\xcf\x19\xad\xe1\xdd\x00\xaa\x75\x98\x83\x8e\x96\xa3\x6a\x10\xa2\x47\xe1\x39\xd0\xae\x42\xd9\xfb\xdd\x7a\xfc\x46\x53\xd3\xfa\xf4\xea\x86\x27\xb5\x7c\xf5\xb2\x21\xf4\x82\x2f\xf0\x71\x83\x48\x2f\xcf\x14\xb3\x2a\xef\xa5\xc5\x26\xb8\xc0\xbb\x6c\x1e\xef\xe1\xcd\x3f\xde\x97\xf7\xab\x2f\xd4\x4e\x86\x58\xc3\x38\x35\x6b\x84\x60\x7b\x31\xa9\xd4\x60\x11\x0c\x3c\xed\xcc\xfb\xc8\xd4\xd6\x0a\x72\x35\x9b\xe4\x81\x99\x3c\xcc\x93\x8c\xed\x5e\x1a\x4c\xbd\xd2\x73\x20\xeb\x8b\x5e\x48\xc3\x72\x35\x43\xed\x0b\x3a\x6f\xb1\xa8\x71\x3f\xd8\x48\xdd\xba\xff\xd6\x02\x22\x43\x54\x47\x8e\x9e\x63\xbd\x00\xf9\xd3\x73\xaf\xae\x15\xab\x18\x3e\xe3\x55\xf9\x31\x1f\x68\x06\x5e\x09\x23\xbe\xb7\x5a\x66\xc8\xa5\x69\x78\x42\xdd\xb3\x77\x5e\x66\x53\xcc\x15\x5d\x6b\xe8\x2c\x33\xe0\x66\x38\xbe\x61\xe2\x1c\x61\x8c\xdd\x01\x14\xd3\xe4\x23\x24\xa0\x33\x5f\x19\x8d\xf3\x34\x16\x1e\x64\xf1\x3c\x3d\xed\xa3\xdf\x1b\xe7\xeb\x31\x80\x2b\x34\xc3\x9b\xb0\x19\x9a\x46\xe2\x44\x6b\x3f\xb4\xfa\x61\x75\x14\x42\xd0\x36\xb0\x29\x6b\x3e\xea\x0f\x3a\x92\xa7\x74\x64\x45\xc4\x49\x0d\x87\xd3\x1a\x20\x47\x43\x38\x8e\xd6\x81\x38\x1a\x52\x71\x2e\x77\xd8\x82\xe5\x47\xc8\x2c\x8e\xa6\xfc\x38\x4f\xc6\x30\xeb\xea\xee\xd6\xf3\xb9\x4b\xf3\x2f\xae\x85\xb8\xfb\xdb\x96\x46\xb4\x19\x4d\xdd\xed\x4c\xca\xda\xbe\x1e\xea\x1a\x5b\x71\xd3\x53\x83\xa6\xd4\x4b\x77\xb9\x2c\x23\xb7\xf4\x63\x6e\xe9\x45\xf6\x60\x9f\x1e\xad\xd9\x71\xbb\xd4\x02\x3c\xfb\x60\xd9\x0a\x3b\xc5\xe3\x9d\xe4\x91\x61\xd9\xa7\x75\xe5\xb3\x39\x66\x58\x5b\x38\x1d\xc8\xee\x9e\x9b\x2c\x9c\xba\x6b\x1c\x03\xb9\xd5\xbd\xf7\xc9\x02\xf2\xb3\xcb\x10\xba\x0e\x5c\x44\x60\xde\xf5\x93\x91\x26\x80\x0b\xfa\x6a\xdd\x9b\xb0\x80\x5e\x86\xc6\xf1\xf8\xed\xa5\x8c\xe0\xdc\xc9\x9d\xe4\x65\xed\x7a\xb8\x05\x76\xc2\xc0\xa7\x57\xe6\xa5\xd9\x5d\x36\x99\xda\xc5\x76\x0c\xad\x5e\xfe\x16\xd6\xea\xb1\x93\xe5\x0a\x39\xef\x32\x53\xd4\x78\x37\x58\xd0\x99\x3f\x37\x34\x44\x97\x0c\x16\x4d\x55\x3a\x9f\xcc\xe7\x54\x4f\x51\x77\x49\xcc\xd1\xd2\xc4\x9b\x7b\x38\x89\x5e\x59\x26\xd3\x5e\x7f\xe7\x8a\x7b\x99\x7a\xe7\xcd\x27\xb9\xeb\xc4\x80\xcd\xed\x89\xb4\xde\xe6\x59\xd3\x97\xea\x60\x40\xbe\xd4\x19\x8f\x5b\xce\x0b\x0e\xe9\x02\xa7\xec\xcb\x73\xb8\x4c\xa7\xcf\xe7\xa2\xf3\x0c\x30\xbd\xee\xd5\xca\x8c\x69\xa1\x16\x5e\x4c\x0b\xdb\x86\x95\xdb\x32\xe2\xd4\xea\xe7\xc0\x91\x05\x98\xfd\xcc\x83\x04\xca\xa5\x5d\xeb\x7d\x19\x21\x61\x99\x0b\x60\xdc\x6e\x8f\xde\xfa\xd3\x92\x1b\x1b\xee\x0e\xce\xa4\x0e\xde\xb2\xee\xb9\xec\x63\xd2\x1b\x81\xcb\x08\x5e\xfe\x91\x21\xaa\x0f\xa0\x3f\x8e\x7e\x47\x04\x8b\x58\x3f\xde\x48\x3f\x01\xd2\x10\x7a\xca\xc0\xf8\x3f\x9a\x07\xf2\x7c\x39\x3d\x6d\x47\x0b\xb6\x84\xd6\xa1\x8c\xd6\x4a\xb9\x97\xe6\xd2\x1e\x4d\x4c\x5a\xa1\xb5\xe0\x8d\x26\x97\x66\x39\x4e\x4d\x08\x18\xc3\x0b\x7f\xc3\x3e\xac\x6f\x0d\x86\x0e\xcd\xee\x67\x4c\xd8\x0c\xd7\x3d\x74\xc7\xb9\xdc\xab\x26\x7c\xb5\x7c\xc0\xc9\x64\xf6\xa5\x00\xa4\x96\x90\xef\x82\xf1\x84\x10\x42\x46\xa8\x5a\x3e\x67\xcd\xdc\xd8\x63\x97\x6e\xaa\xf1\xc4\x64\xfc\x00\x29\xa7\x0c\x04\xa0\x47\xf1\x86\xcd\xc8\x6e\xcd\x94\x9d\x9f\x29\xc4\x1a\xea\xfb\x9c\x86\xe9\x05\x73\xad\xe7\x7a\xbe\x2b\x4d\x5d\x8d\x15\x93\x93\xb9\x3e\x99\xc9\xb2\x79\x92\x49\x24\x30\xae\x17\x96\x79\xaf\xad\xfb\x39\xed\xc3\xe0\x98\x04\x45\x74\xef\xc1\x24\x3d\x77\x43\xfc\x1d\xb0\x4c\x15\xee\x29\x41\xf0\x64\x91\xef\x5b\x58\x4d\xef\x61\x0f\x17\xc4\x42\x9e\x45\xf7\x9b\x87\xcf\x43\x23\x48\x60\x0e\x9b\xe6\xb1\x78\xde\x7e\x42\x4e\x01\x9c\xb9\x3a\x5b\x4f\xd8\xac\xe3\xfb\xa6\x14\x16\xc6\x75\xe2\x15\xaa\xc2\x03\x98\xb5\xf4\x9d\x5e\xc3\x77\xe8\x5c\x58\x78\xfd\x04\x36\x75\x3f\xd0\x4a\x77\xe0\x13\x4c\xaa\xf4\x85\xaa\x6d\x3c\x3a\xf4\x98\xd4\x9a\xb7\x0f\xef\xbf\xdf\x96\x89\x92\xb6\xbc\xb5\xe8\x09\x34\x63\xa1\xe6\x75\x3f\x97\x39\x11\xba\xd9\xd2\x5a\xa3\xdb\x64\x62\x8a\xc7\x72\xbb\x60\xa3\x2f\xe6\x76\x35\xa7\x7f\x4c\x43\x90\x0f\x67\xd2\x4b\x80\xee\x1b\x8b\xa0\x66\xe0\xa3\x17\x70\x13\x0a\x43\xf7\x6b\x92\xa7\xb7\xcf\xfc\x78\xce\x3a\xc0\x37\x0f\x85\x75\x34\xfb\x69\x06\xe0\x53\xf8\xb9\xc2\xcd\x38\x3e\x4b\xdd\x4d\x17\x06\xff\xef\x85\x0b\x98\x69\xea\xe5\x05\x78\x2d\x7e\x83\x86\xc0\xd1\xf4\x1e\xd3\xbc\x88\x84\x53\xb1\x9d\x3d\x5d\x1a\x99\x15\x78\x98\x9f\x7e\x56\x16\xd0\x4f\xc6\x0d\x0f\xe4\x81\x66\x4a\x63\x52\xc8\x87\x03\xf0\xc5\x5d\xbb\xb3\x21\xd2\x76\x69\xa1\x9e\xc5\xd8\xa9\xd2\xcb\xb3\xd1\x7e\xb0\xbe\xb3\x0e\x4f\x2f\x52\x28\xae\x30\x3b\xa1\x89\xb2\x58\x96\x62\xeb\x19\x15\xd4\x26\x8c\xfe\xc6\x35\xac\xde\xe2\x16\x0a\x24\x34\x89\xd6\x5c\x93\x01\x5a\x8a\x65\x6a\x2e\x7c\xc1\xc2\x78\xb2\xb3\xb3\x78\xe5\x05\x0b\xdd\xc2\xef\xd9\x5a\xd2\x73\x69\x92\xd8\xb3\xbb\x65\x22\x60\x1b\xb6\xe6\xab\xec\xd0\xe4\xda\x7a\x02\xda\x7e\x58\xae\x78\x81\x8b\x6f\xeb\x5d\xee\x89\x85\xe0\x20\x4a\xf3\x4a\xcb\xbc\xcf\x35\xba\xde\x49\x9c\x11\x90\x4d\x13\x69\xbf\x38\x96\x6f\xc0\x02\x15\x2e\x9d\x7d\x41\x32\xda\x87\x49\xd8\x80\x68\xdd\x29\xee\xdd\xdd\x61\xfc\x12\x4f\xcb\x57\xdb\xd9\x31\x9a\xa4\xdb\x2e\x67\x2c\x0a\xfd\x92\x8b\xff\x99\x96\x7b\x35\x0d\x36\x8c\xc8\xf3\x30\xbf\xaf\x26\x48\x1b\x57\x93\x5b\x33\xdc\x64\xe8\x2a\x4f\xe0\xd3\xb4\xa3\x3f\x92\x5d\x83\x93\x7f\x34\x39\xf3\x47\x57\x1b\x38\xaa\x59\x36\x4c\x19\xb2\x03\x17\x71\x85\x86\xf5\xb1\xc6\xe0\x3a\xcc\xe0\x4b\xef\x77\x74\xfe\x1c\x9b\xfc\x32\xba\x21\x74\x34\x3d\xd4\x03\xfc\x76\x98\xbb\x09\xeb\x36\x16\xeb\x16\x7e\x9f\x69\x2d\x74\xd3\x89\xc1\xa5\x1f\x7e\x9a\x2b\x8e\x1e\xc5\x0c\x20\xbe\xa0\x23\xa7\x64\x58\xc8\xba\xce\x4f\x9e\xf9\x5a\xc1\x3c\x80\x94\x31\x91\x83\x79\x71\x6d\x18\x4f\xb2\x80\xf7\x06\xdf\x8e\x16\xc9\xa8\x04\x0a\x27\xa4\xc4\x5c\xa1\x84\x13\x38\xe0\xa7\xdb\x48\x7f\xc3\xee\xad\x35\xa0\x5f\x86\xdd\x2b\xdd\xd6\x58\x20\xd2\x1b\xeb\x33\x4a\x8b\xd4\x40\xa0\xce\xf7\xd7\x75\x6a\x72\x38\x2b\x39\xdf\xa8\xa7\x9d\x35\x36\xdf\x35\x87\x9d\xa5\xd7\x07\x4d\x9a\x4c\x31\xbb\x97\x7e\x2a\xf0\x51\x33\x36\x8b\xf5\x86\x47\xa0\xbf\xe4\xbd\xfe\x44\x00\xf8\x30\x37\x9c\xd2\x3b\x3e\x4c\xc4\x9d\x8b\x53\x35\x37\x31\xcd\x18\x9b\xd6\x33\x98\x81\x57\xef\x5c\x0d\xc9\x57\xa5\xf3\x8c\x56\xb0\x83\x2f\x7e\x66\x6c\xf2\x5f\x99\x02\x57\x2b\x59\x64\x78\x05\x82\xa5\xd0\x9f\xa7\x87\xc9\x1d\x14\x54\xe6\xdc\x07\x08\x7b\xb6\x99\x1e\x03\xe0\xf0\xce\x9e\x10\xc0\x74\x2d\x48\x9d\x03\xc5\xb9\xb4\x5f\x80\xeb\x6a\x4d\x8a\x8b\x2e\xe2\x2c\x2b\x21\x5e\xf8\xa9\x63\x17\xf6\x65\x89\x1b\x70\xdf\xd5\x79\xc3\x37\x7b\x5b\x33\xf1\xed\xc6\x16\xab\xab\xed\xf9\x02\x12\x4c\x15\xc1\x96\xdb\xea\x16\xeb\xcd\xf7\xee\x8b\x5d\x38\x97\xf4\x6a\x2f\x06\x59\xdf\x67\x7b\xf2\x2c\x70\x02\x8b\xd7\x5c\xbb\xd0\x2e\x2b\x63\xaf\x80\x91\x3e\x85\x41\xc3\xfc\x9f\x76\xbe\x55\x1e\xe8\xb9\xcd\xfd\x81\x92\x04\xd0\xf6\x31\x1c\x5b\x98\x04\x3c\xab\xc8\xd4\x18\xba\x23\x50\x72\xd1\x25\xcc\x65\x81\xbf\xb8\xa8\xb4\xf6\x18\x6f\xea\x21\x1d\x3a\xc9\x93\x89\xb1\xb8\xa3\x4a\xe0\x93\xfe\x70\x71\x4d\x28\xbc\x9d\xbc\x37\xd9\xae\xa1\xd5\xa7\x5a\x61\xd4\x47\x16\x33\x88\x26\xa5\x2b\x9b\x31\x1e\x5e\x84\x79\xcc\x88\x3c\xce\xbc\x2c\xf4\x73\x9f\x15\x4b\x32\x9d\xf6\xdb\x02\xba\xf7\xc1\xc4\xbd\x61\x5b\x3d\xf8\xe1\xe7\xec\xad\xf9\x6b\xbe\xd8\x61\x20\x69\x63\x00\x4c\x87\xd7\xd5\x5a\x9a\x21\xe9\x4a\xdf\xd1\xac\xf3\xb6\x86\x21\x86\xc2\x7e\x5b\xf3\x47\x9b\x06\x48\x00\x8f\x2c\xc5\x81\xd0\xd3\x55\x76\x71\xac\x7e\x09\x2c\x41\x3e\x1e\x7f\x2f\xac\xf4\x97\x1b\x16\x6b\xe1\x67\x59\xc2\x8e\xf9\xb4\x68\xe5\x2b\x4e\x52\x97\x6d\xf5\xb8\xd7\x20\xe7\x4c\x77\xad\x58\x7e\xb3\x5a\x7f\xe8\x15\xf9\x46\x57\x79\x30\xfe\xc2\x2b\xba\x3c\x03\xe4\x95\xde\xeb\x53\x9f\x90\x71\xdd\x8c\x62\x19\x85\xcb\xde\x56\xbc\x48\x7d\x4d\x5b\x37\xbe\x97\x2c\x2d\x4a\x38\x4b\xf2\x21\x4b\x39\xf6\xae\xe7\xc6\xac\x39\x09\x7b\x8f\x50\xaa\xee\x82\x30\x02\xc6\x3f\xd6\xb4\xf7\xea\x5a\x0c\x55\x9f\x32\xc7\x21\x78\xfb\xe0\x22\x84\xb2\x4e\x94\xff\x17\x9e\x9e\x12\xd9\x5b\xf4\xc6\xb1\xbc\x65\xcb\x7d\x77\xc9\xf6\xac\x85\x26\x65\x8e\xfd\x6e\x20\xb2\xa7\x95\x89\xd3\x31\x43\x36\xec\xfc\xe1\xee\x0f\xdc\x6e\xd1\x5f\x75\x89\xcd\x25\x0e\xf7\xd2\x88\x92\xfa\xe1\xcc\x5e\xa3\x56\xdd\xfd\x1d\x34\x49\xc3\x95\x27\x30\xf5\x93\x2f\x0c\xa8\x21\xe0\x18\x4c\x7c\x8f\x75\x0a\xa0\xc4\xa0\x9f\xcf\x6b\x5d\xef\x70\x3e\x18\x9f\x47\xaf\x39\xcf\x8e\x2e\x8d\xb1\x5a\x07\x0f\xfa\x09\x0e\x1a\x10\x81\xa6\xeb\xd8\x0d\xcd\x7e\x20\xdd\x98\xa6\xaf\xd0\xa6\xba\x39\xd8\x68\x43\x21\xac\xa0\xc5\xca\x6b\xb6\x31\x56\x20\xb2\x60\x39\xb5\x0a\xe1\xf9\x79\x36\xfb\x57\x31\x68\xd7\x82\xc3\x08\x88\x6c\x3b\xc9\x1f\x93\xe8\xcc\x3d\x80\x68\xd9\x80\xb9\xb7\xa7\x45\xff\xa0\x83\x84\xee\x80\x61\x0e\x96\xd7\x8c\x6c\xe8\x3c\xa3\xbe\x0f\x13\x94\xe7\x7e\xbf\x02\xf9\x75\x07\xd1\x19\xce\x55\x2b\x09\x56\x63\x29\x86\x0d\xe4\xcb\x03\x84\x74\xaf\x2b\x24\x21\x84\xc0\xf5\xb7\x0f\x48\xcf\x4a\x0b\xf2\x58\x53\xc2\x1e\x86\x45\x9e\x64\x6a\x8b\xb1\x7b\x3b\x96\x97\x77\x3c\xea\xaf\x6d\x6d\x41\x56\xad\x7a\x86\xea\x74\x05\xd8\xde\x6e\x3c\xd4\xb5\x3d\x3e\x05\xe7\x22\x92\xc9\x75\xd9\xfd\x36\xfb\xe1\x21\xbb\x88\xab\x66\xe3\x6c\x1d\x00\x4f\xb1\xae\x54\xaf\x89\xef\x7f\x32\x7f\x1e\xf1\xf2\xb4\xb1\xb6\x67\xf4\x2f\x9f\x82\xbb\xc5\x7c\xce\xc3\xad\x77\x86\x87\xd3\x9c\xf6\xac\x64\x22\x7d\xad\x91\x34\x83\x31\xb0\x61\x38\xf3\x2b\xa5\x3c\x9f\x08\x44\x7c\x79\x64\x11\xc4\x0c\x8e\x67\x08\xd2\x6a\x00\x4e\x9d\x31\x99\xe5\x67\x79\x10\xea\xf5\x3d\xc8\x07\xce\x3a\xf4\xab\x82\xcf\x70\x27\x1b\x03\x15\xbb\x1e\x57\xdb\x2d\x36\x8f\x17\x48\xef\x1d\x88\x7c\xe4\x31\x2b\x84\xdd\x16\xfe\xa6\x4a\x1c\xa7\x57\xa8\x25\x16\x18\x2b\xc3\x7e\xac\xfd\xe6\xe8\x60\xbd\xb9\x95\xd8\x0e\x32\xf9\x35\x3d\x58\xc2\x66\xbe\x3f\x16\xd3\x3c\x4a\xb6\xdc\x96\x4b\xc6\x46\x6b\x91\xc3\x20\xc2\xd5\xbe\x8f\xe9\x65\x28\x5a\xad\x5d\x02\x83\x5d\x50\xa6\x6d\x3d\x47\x2c\xd6\x0e\x7d\x07\x7a\x7f\xc1\xfa\xac\x08\xf7\xf1\xfc\x9a\x4d\x08\xd9\x84\x23\x16\x8f\x78\x35\xbf\x69\x96\xbe\x51\x81\xf6\x03\xdf\x54\x43\xf2\x9f\xb4\xbc\xa8\x69\xd1\x7b\x84\x8e\xb4\xff\x31\x64\x1a\x54\xc1\x54\xd4\xc1\x9b\x51\x47\x4f\x31\xae\xcc\x45\xfa\xe5\xf5\x65\xf7\x27\xd0\xd4\xc4\x82\xaf\xb6\xe1\xbe\x0f\xd8\x22\x23\xda\x7f\x00\x8c\x01\x06\x1f\x18\xbb\x11\x1e\xd3\x3e\xb8\xec\xcd\x79\xb6\x9f\x33\x28\x25\x76\x00\x7d\x10\x0c\xde\x85\x60\x66\x99\x92\xcc\x41\x13\x80\x81\x5f\xef\xa5\xbd\xc0\x7a\x56\x67\x5d\x7b\x2d\x2f\x1a\x50\x50\xf0\x62\xbd\x14\x42\x88\x77\x00\xe7\x07\xf2\x1a\x5c\xf2\xd0\x13\xf6\x42\x5a\x5b\xf0\xb4\xc2\x14\xf4\x41\x19\x5c\x5e\xe2\xea\x0c\xb2\xaa\x67\x75\x23\x5e\xb8\x7d\x4c\x71\xad\xcb\xa8\x5a\x60\x36\x75\xac\x3b\x55\x4c\x1f\xb8\x37\x1f\x02\xd4\xad\x36\xe9\x16\x97\xe3\x65\xd3\x45\x42\xab\xce\x20\xd7\xd0\x70\x2e\x8f\x60\x4c\xfd\xa7\x35\x2a\x65\x94\x44\x3c\x66\x9f\xde\xf4\xb1\xb1\xee\xf7\xe8\x53\x08\xd3\xb4\x20\xe1\xe0\x15\xd1\xe2\xc4\x04\xce\xa2\x5e\x02\xb9\x71\x9e\x65\xc0\x23\x70\x82\x1a\xa4\x3b\xd4\x87\xe9\xb6\xcc\x85\xdb\x9d\x53\x43\xe1\xb6\x79\x20\x3c\x83\x0f\x2f\x9a\x6c\x96\x7d\x35\x0b\xe7\xc1\x28\x9c\x49\xf8\x1a\xd6\x84\x8a\xb2\xe7\x32\x3e\x91\x07\x57\xd0\xee\x0b\x67\xcd\x7d\x8d\xd6\xc9\x3c\xea\xcc\xbb\xc6\x1f\x05\xe3\x25\xad\xd0\xa9\x9f\x3f\x83\x83\xd7\xd3\x9e\xff\x53\x46\x16\xf8\x2d\xf0\x5f\xe2\x6d\xe1\x99\xe1\x72\x85\xb6\x13\xf6\xa5\x47\x09\xfb\x47\x21\xf9\x2c\x08\x3b\x3d\x34\x4e\xb7\xfd\xbc\xe1\x01\xce\xda\x06\x71\x85\xad\x5c\xd8\x9a\x56\x1c\xf3\xfd\x83\x2a\x06\x3a\x51\x8d\x20\x5d\xa1\x58\x1a\xe6\x0f\x2d\x72\x48\x7c\xf5\x86\x59\xae\x30\xc9\x35\x7e\x43\x30\x11\xee\x29\xfd\xa7\x90\x09\x33\xbc\xea\xa9\x4f\xd6\xd3\x0b\x2d\xf8\xb7\x8a\x7a\x16\x67\xd0\xc7\x1e\x7d\x70\x2e\x8f\xa6\xf1\x70\xd4\x5b\x3e\x70\x43\xde\x5e\x46\x63\x30\xfb\x57\xd5\x30\xab\x32\x98\x8a\x2e\x12\x4d\x17\x3b\xfc\xce\x68\xba\x79\xc3\x04\x77\xb7\x49\x78\xc4\x37\x31\x90\xf7\x5e\xba\xa2\x30\xa4\xa7\xe1\xe7\xd5\x45\xe6\x99\x15\x2f\x83\x55\x9e\x86\xdf\x84\x4c\xbd\xe3\xff\x31\xdf\xb2\xf0\x94\xdd\xe9\xa7\x12\xb1\xd0\x0a\x9c\xa1\xdc\x55\xad\xc5\x54\x7a\x4c\xf2\x63\x41\x23\x28\xe9\x30\x71\x34\xb8\x0e\x3a\x2c\xd5\x9a\x67\x42\x9f\x30\x80\x0e\x68\x95\xe5\x77\xaf\x95\x8a\xb5\xae\xbf\x2e\x11\xcf\x00\x98\x7a\xf7\x7e\x79\x25\x9e\x11\x33\xf1\xc0\xf7\x09\x99\x22\x2a\x47\xb6\x0f\x61\x3e\x7b\xac\x65\xb2\x94\x9e\x61\x38\xb1\x61\xa4\x96\xfb\xd2\xb2\x5e\x9f\x79\x21\x0f\xcf\xba\xf9\xf1\x0d\x5f\x5c\x38\x04\x76\x83\xdd\x04\x18\x79\x19\x38\x00\x1e\x67\x85\x6b\x8c\xa1\xe3\xd5\x5b\x9a\x06\xe6\x7a\x39\x6b\x9b\x74\x32\xf5\xd2\x7e\xe2\xe4\xc4\x69\xc5\x10\x3a\xf0\xb3\x2f\x7e\x88\x8d\x5f\x01\x9f\x04\x0b\xa7\x6c\x16\x98\x40\x9c\xcd\x38\x6d\x4e\x18\x14\x6f\x9c\x15\x1a\x57\xa7\x58\xbb\x1c\x54\x21\x43\x11\x6b\x10\x5f\xe6\x78\xd2\xbd\xcf\xab\xde\x4a\x66\x94\xc4\x9a\x3f\x5f\x6b\x1a\xc5\x3e\xd6\x22\xf3\x06\x16\x0c\xae\x9b\xd1\x2e\x94\x63\x27\x59\x75\x50\xd8\xdd\x3d\x9e\x35\xb7\xb1\x31\xfe\x0a\x44\x83\x78\x33\x8e\xa6\xcb\x5c\x07\x17\x85\x7b\xde\x0d\x62\x22\xee\xf2\x3e\x4d\x8b\x0f\xb5\xeb\xe3\x47\xbc\xc4\x49\xf7\x92\x71\xf1\x82\x25\x0f\x1b\xbe\x17\x46\x79\x06\xfa\x88\x77\x4d\xbc\x6c\x7e\x66\xbd\xaf\x9f\xd8\x38\xf0\x5c\x93\xd3\xdb\x8e\x40\xd8\x08\x30\xd4\x0a\x9b\xc5\x42\x88\x32\xfc\xf1\xa5\x21\xf0\x18\xcd\x7c\x7a\x7d\x9a\xf1\x4f\xf3\xd0\x34\x3f\x3e\x19\x6f\xfb\x34\xec\xef\x83\xfc\x3e\x5a\xcf\x73\x41\x52\xce\x77\x05\x66\x89\xef\x65\x77\xa2\xfd\xfb\x4b\xe0\xf1\x8b\xe2\xd3\xc2\xd0\xad\xe5\xf5\x21\x59\xd4\xf3\x37\xcd\x8a\xbd\xf1\xde\xb2\xb8\x10\x23\x36\xbe\x3f\xe6\x3b\x2f\xf1\xf9\x57\xcc\x81\x1d\x9e\x3c\xe1\x0c\x5e\xaa\xe7\xbd\x41\x16\x05\xbd\x10\x0b\xba\xa4\x63\x81\xb6\x62\xe5\x83\x1a\x2b\x0f\x1b\x59\xd1\xc0\x5b\xb4\x15\xfa\x80\x33\x6f\xa0\x0a\x21\x08\xbb\x1e\xb3\x16\x86\x8f\x9e\x40\x10\x3b\x82\x8f\xda\xd0\xd1\x7a\x90\x05\x1e\x1b\xce\xdc\x6b\xe3\x2a\x9b\x05\x72\x1e\xa8\xdb\x78\xc2\xc9\x0b\x9f\xc6\xba\x6c\xe3\xac\x58\x4f\x08\xc3\xf6\xda\x5e\x96\x90\x0c\x1c\x75\xa2\x1a\x63\x98\x68\x0a\x15\xe2\x7c\x38\x6d\x76\x6d\x06\x86\x51\x08\x62\x16\x01\x9d\xdc\x81\x21\x78\xda\xeb\x27\xef\x7a\xd0\x3c\x54\xc8\x56\x88\xfd\xd5\x89\x19\x28\xa0\x16\xdd\x08\x70\xea\x07\xff\x2f\xd6\x5e\xcd\xe8\x9a\x64\x2d\xa6\xd3\x1e\xe6\xc0\xdc\xcd\x8a\x5f\x1b\x31\x6e\xe1\xee\xd7\x7b\x84\xab\x47\x83\x80\xaf\xb7\x2b\x06\x25\x00\xa0\x7a\x03\x29\xd7\x9b\xc5\x02\x6e\xf7\x10\x66\x46\x41\x73\xc2\xf8\x6c\x1c\x2d\x9b\xa0\x9c\x79\xd0\x6d\xd5\x18\x2d\xcd\x92\xd4\x8d\xc2\x72\x3f\x77\xdd\x65\xc3\x53\x2b\x6a\x6e\xf4\x33\xfb\x0a\x14\xec\xe7\x79\x02\x35\x73\xa0\xbe\x0e\xb4\xd6\x08\x26\xa3\x99\x5e\x87\xb9\xaa\xfb\x3d\x87\xb8\xc8\xee\x8d\x0d\x35\xdd\xf8\x38\xcf\xb2\xc4\xa7\x59\x7b\xad\x09\x9f\x46\xaf\xb9\x37\x23\xb6\x8c\xce\xbf\xae\x44\xcf\xda\x33\x0c\xff\x77\xfb\x7e\x12\xf1\x55\x6e\x74\x74\x99\x4c\x0c\x5d\xe9\x67\xf4\x70\x8a\x35\xac\x4c\x6f\x18\x05\x5d\x22\x2b\x31\xfb\x5a\x2b\xc6\xf1\x5c\x52\xc5\xe0\xb4\xc7\x74\x31\xe5\xf4\xd1\xcc\x92\xaf\x1a\x7f\x0a\x7c\x5a\x3e\x5e\xfc\x5a\x76\x12\xbc\x80\xfe\xff\x4a\xe3\xb4\x5d\x5b\x8f\xe2\xe9\xa9\xe7\xb2\x8a\x8e\x7b\x3e\x13\x10\x1a\x9c\xf8\xca\x8c\xcd\x4c\x75\xda\xfc\x1a\x21\x10\x75\x79\x7f\x3c\x09\x09\x44\xe0\x5a\x8e\x02\xc1\xba\x18\x54\x02\x79\x02\x27\xfe\x57\xe3\x8d\xc8\x25\x03\x87\xe6\x29\x3d\x63\x2f\xd1\xaf\x97\xa9\xaf\x0b\x8f\x4f\xf8\xd6\x60\xd2\x46\xa2\xe6\xab\x07\x5c\x8f\x87\x38\x05\xf6\x7a\xc1\x5e\xaf\x9a\x4f\x36\x0a\xd2\xde\xf4\x03\x99\x20\xfa\x4f\x5b\x31\x08\x7a\xdb\xd0\x1c\x7a\x27\xdb\x58\xce\x11\x65\x3b\x0c\xd3\x30\x25\x0b\x4f\xa3\x1e\xa0\x79\xb0\xeb\x89\x85\x49\xa4\x53\x3f\xb9\x93\x73\xbe\x65\xf0\xf4\x20\x22\xc1\x39\x17\xcf\xc3\xd8\x35\xfd\x58\x17\xae\x7f\xa4\xe6\xe7\x5a\x40\xdf\x7e\xef\x7d\x72\x00\x97\x93\x38\xd7\x03\x4a\x64\x01\x2c\x12\x5c\x74\xac\x7b\x59\xea\xc4\x93\xb0\xab\x6d\xef\x15\x34\xfe\x8c\xa6\x87\x01\xd2\xe1\x32\x8a\x73\x70\x75\x5b\xbd\xb2\x98\x2b\x2e\x0b\xc0\xd5\x17\xe2\x86\xf9\xeb\x7d\xe0\x5e\xb6\x8f\x32\x4e\x81\x49\x5d\x26\x68\xe1\xa5\x78\x2e\x77\x74\x55\x1c\xf8\x42\xb2\x61\x24\x89\xa0\x87\x70\xc2\x91\xc5\x9a\x07\xae\x5d\x0b\x05\x4f\xf4\x9d\x8d\x7f\x46\x3f\x33\x51\xb3\xc5\x33\xfd\xe9\xed\xa6\xa5\x5b\x68\x04\x0a\x68\x7f\x5d\x25\x4c\xa3\xed\x01\x0c\xb8\xb8\x84\x05\xcc\xfe\xca\x71\x96\xcc\x05\xd8\xc0\x39\x88\x37\xe6\xa0\x47\xd5\x9f\xb6\x1a\xc5\xeb\xef\xd7\x35\x00\x33\x57\xe9\x18\x08\xac\x9a\x65\x4f\x09\xfa\xaf\x30\xcf\xb9\x2d\x90\xd0\xb3\x7a\xbc\x8e\x6b\x8f\x5a\x12\x72\x81\x40\x2c\x79\xb0\x7b\x26\xac\xa4\x26\x52\x71\xc6\x2b\xc7\x98\xc9\xee\x09\x54\x57\x78\x2b\x2e\x3c\xb1\x35\x6b\x36\x09\x1f\x3f\xfb\xf2\x08\x8e\xcc\x9e\x17\xc6\x64\x28\x6f\xad\x7f\x9b\x61\x7a\xeb\xc5\x94\x7d\x5f\x79\xae\xf3\x1a\x01\x39\xfc\x2a\xf1\xb0\xc0\x55\x8d\x97\x46\x6e\xad\xd7\x86\x8b\x47\xe3\x91\x6f\xa7\x5f\x95\x3b\x7c\x5c\x3a\xe7\xd5\x3d\xe1\x43\xc7\x49\x8e\xfc\x51\xc8\x10\x37\x4c\xb3\x20\x5d\xee\x8c\x65\xf8\xf1\xba\x5e\xc2\xd3\xb5\x29\xf8\xc3\xbc\x98\x17\x44\x16\x5a\x10\x1f\xf1\x33\x19\xa8\xba\xeb\x4b\x4c\xea\x5d\x3c\x5c\x62\x67\x25\x97\x4a\x47\x9d\x5d\x70\x25\x9d\xec\x10\x3f\x36\xf6\x8b\x3c\xc7\x15\x5a\xe5\xf5\x20\x05\xa6\xf4\x92\x16\x92\xb5\xda\xeb\x7e\xd7\x20\xbd\x2b\xaf\xf8\xe8\xfd\xcf\xe3\x8d\x8f\x60\xa9\xc5\x02\xb5\xf7\xb5\x94\x1a\xef\xc6\xcd\xf7\x29\x04\x7a\x6a\xd9\x6e\xb4\xa9\x97\x16\x8e\x95\xbe\xff\x40\xc5\x67\x37\xe4\xa8\xbe\xb6\x85\x78\xbe\x0e\xbb\xf9\xd4\xf7\x67\x59\x75\x7c\x64\x18\xd7\xc2\xc7\xf5\xb4\x3e\x94\x2d\xe2\xe3\x19\xff\x44\x8c\xd9\x44\xeb\xd9\xb4\xe8\xc9\x1c\x3b\x9a\x55\xae\x5d\x9c\xed\xe0\x97\xcd\x2c\x8a\xe0\xb4\x84\x74\xb7\xcd\x52\xcd\xa5\xcb\xc1\x94\x65\x2c\x65\x85\x84\x0e\x43\x89\xdd\x16\x5e\x96\x75\xd6\xdd\x78\x02\x76\xd8\xf8\x40\x32\x5e\x96\x87\xdf\x1f\x95\x2f\x0b\xab\x86\x81\x4c\xd6\x4d\x8f\x05\xb8\x7d\x7d\x00\x5e\x83\x97\xac\xd4\xb2\xb6\x00\xd2\x05\x7f\x41\xca\xba\xcc\xc1\x06\x91\xb9\xd1\xbc\x19\x10\xca\x2a\xbe\x26\x9c\x84\xd5\x92\x07\x2a\xb1\x12\x32\xa1\x1e\x3e\xfe\x7c\xe7\x7e\x62\xa9\x2f\xc5\x9d\xc4\xf3\x41\x9c\xa0\x4c\xc7\x6f\xbb\xdb\x84\xd8\x35\x03\x80\x02\xe6\x9c\x0d\x1b\xb0\xf4\x7c\x2d\x7f\x66\x36\x7b\x40\x8e\xa2\x53\x9c\x2b\x0b\xf1\xe1\xd5\xed\x6b\x6b\x49\x8f\x80\x85\x66\xec\x4d\xdf\x9e\xb7\x84\x5f\xaf\x50\x5a\x46\x41\x16\x80\x56\x97\x85\x94\x44\xf5\x14\x02\x6c\x0f\x00\x2d\x06\x7a\x40\x77\xc3\x7e\xed\xaf\xd1\xc6\x95\x71\x2b\x26\xaa\xf1\xbe\xf4\xbb\xfc\x5a\x45\xf7\x6b\x5f\x26\x8c\xef\xad\x7d\x98\xd9\xc3\xdd\x97\x8e\xdb\x68\x1b\x36\xd0\xc0\x4e\xc9\x6e\x96\x1f\xf5\xfd\xaf\xd5\x68\x05\x1e\x93\xef\x2c\x61\xed\xc1\x8c\x27\x88\xe8\x59\x60\x39\xc7\x74\x26\xa4\xc0\xac\xef\x9c\x27\x4b\xf5\x24\x20\x74\x2e\x02\xdb\xe7\xf5\xd3\x8c\x2e\x1e\xec\x05\x76\x48\xc2\x86\x99\x39\x88\x92\x5a\x0e\x8d\xc0\x71\x57\x0c\x10\xcd\xcc\xd7\x26\x02\x81\x6b\xe9\x37\xca\x7c\xd4\x8b\xc9\x8d\x10\x3d\x48\xc5\x0c\xb3\xd8\xdf\x60\x13\x8b\xf4\x09\x03\x92\x71\x30\x56\x2a\x31\x7d\x80\x04\x11\xae\x0a\xbb\x02\x6e\x09\x75\x50\x67\xb1\xee\x40\xd6\x50\x7c\x0d\x98\x6f\x40\xcb\x0e\x2b\xef\xe3\xca\x90\x1e\x50\x2e\x52\xfb\x83\xcf\x3a\x30\x60\x73\xec\x5a\x5d\x5f\x13\x1b\x85\xc2\x21\x20\xee\x98\x0c\x58\x36\xe7\xda\x51\x47\x4f\x9d\x30\x1c\x45\x71\xca\x72\xff\x2c\x93\x60\x96\x0f\x40\xe4\x2d\x20\xdd\x98\xe7\xfc\x2d\x71\x36\x42\x8f\x7c\xbd\x8c\xf1\x75\x72\x40\x63\x39\x4a\x06\xaa\x92\x79\x76\x3f\x4c\x13\xf4\x1b\xb1\x1c\xcc\x72\xec\x1a\xc0\xd1\x37\x68\x57\x1f\x0f\xe5\x40\xb8\x4c\xe1\x6f\xb9\x9b\x17\x6b\xa3\xf1\x4c\xa1\x86\xe3\x65\xa6\x6e\x35\xae\x86\x6c\x1c\xe2\xb8\xba\x2d\xde\x2f\x63\x75\x5e\xde\xdd\x83\x9a\x0d\xb9\xd1\xf7\x15\xad\x8b\x31\xc6\x8c\x40\x54\x54\xe2\x27\xba\x0b\xa7\x1c\x0f\xc7\x5a\x37\x2d\x95\xfa\x9d\xea\x36\x17\x93\x64\x1c\x72\x30\x70\x7a\x7d\x85\x3d\xf4\xd0\xd5\x32\x0d\xd6\x42\x1b\x32\x04\x14\x5f\x28\xb6\xba\xe9\x28\x30\x9b\x00\x99\xf0\x9d\x7d\xcd\x0a\x45\x6c\x2c\x7d\xb4\x87\x44\x29\xcc\x62\xb6\xaf\xc1\xcc\x0e\x7b\x40\xfb\xbb\xb0\xd9\xd5\xd4\xb8\xb0\xab\xd2\x1d\x79\xb0\xfd\x21\xad\xab\xd7\x7c\x9d\x9a\x48\x4d\x2c\x60\xc2\xc3\xf3\x15\x97\xac\xef\x1f\x16\xb1\x7b\x7f\x26\xe0\xa5\x87\x64\xba\x4a\x56\x43\x66\xbf\x2f\xeb\x85\x20\x06\xfa\x0f\xef\x22\x34\xfd\xf1\xc0\x51\x07\x7d\xe8\x7b\xf7\xd7\x20\x4a\xc8\xc6\x84\x25\xc4\xac\x39\x05\xfb\x7f\x98\x35\x6b\x47\x03\xeb\xf8\x04\x7f\x5c\xc1\xfc\xbc\xe5\x21\x84\xec\x12\xe3\xa2\xee\x4e\x90\x73\xdb\x1e\xfa\xb2\x93\x50\x1d\x66\x2b\x4c\x83\x6e\x8c\x95\xba\x84\x5d\x95\x89\x84\x6b\xcb\xf7\xab\xea\x9d\x1c\xb8\x6c\x0c\x09\x2b\xac\x7f\x58\x1f\xd4\x8d\x43\x30\x07\xb3\x14\x16\x05\x04\xd6\xb5\xa3\xa5\xf5\x9e\x35\xe6\x41\xb1\x5c\xf7\x16\x4f\x4e\x13\x7f\x10\x91\xbd\x5f\xb5\xa7\x1d\x5c\x9d\x81\xce\x36\xcd\x16\x92\x03\x41\x0b\xdb\x27\x50\xb1\xa8\x17\x7c\x6d\xb2\x9b\x4c\x7f\x88\x7b\x34\x28\xf6\xb8\xd7\xf2\x24\x75\x30\x61\x84\xb2\xf8\x23\x92\x10\x18\xfd\xf3\x5c\x00\x5c\x26\xda\xe5\x61\x42\x9f\x38\x01\xe4\xf5\x58\xb1\xcd\xf1\x40\x95\xd6\xc0\x01\xe2\x67\xc8\x32\x30\x84\x09\xc5\x02\x5a\x10\x53\x1f\x60\x92\x78\x30\xd8\x13\x0d\x62\xab\x37\xb4\x4c\x56\xa9\xd5\xea\x35\xf3\x2e\x63\x65\x16\x13\x57\xc8\x90\xcf\x41\x7e\xfc\x36\xc4\xde\x3b\x38\xd9\x46\x08\x22\xed\x1a\x5b\x32\x98\x48\x7b\xa0\x29\x98\xe7\x46\xd0\x0b\x9c\xe5\x43\x20\xfe\xf8\x01\x8f\x01\x3a\x04\xa1\xcd\xe6\x3a\xb8\x3e\x66\x87\x89\xb2\xe3\x70\x1f\x08\x13\x2d\xbc\xf4\xce\xb5\xa0\x09\x84\x9c\x73\x41\x7d\xe2\x5f\xcb\xb5\xdd\x42\x20\xca\x1c\xcb\x15\x8e\xf6\x92\x81\xb6\xcc\xe1\xa6\x10\xc3\x4a\x34\x82\x9b\x58\xd7\xb7\x08\x83\x5e\x5f\x41\xd0\xc2\xbd\x84\xd8\xc4\x7a\xa1\x6f\x64\x90\x86\xad\x05\x3d\x4e\x8e\x71\xee\x41\xfb\x43\x8c\x13\xf3\xab\x00\x44\xe4\xc8\x1c\x5b\xb0\x13\x8b\x18\x55\x87\xc9\x2c\x88\x92\x4b\xbc\xee\xb2\x1a\x80\x8c\x12\xeb\x1c\xf6\x3c\xe3\x0a\x5a\xad\x1e\x79\x0d\x3b\x50\x3e\xed\x85\x62\x79\x04\x5d\xf7\xb2\x2a\xa3\xec\x14\x78\x5a\x12\x64\x74\x6c\x4d\x37\x39\x82\x23\xb9\xd1\x32\x0d\x80\x68\x1c\x0b\x42\xc4\xdb\xc8\x62\xce\x4d\xfc\x75\x96\x85\x00\x70\x05\x44\xdc\x6c\xb4\xe2\x83\x0d\xbf\x04\xcd\x73\x43\x0d\xe2\x60\xd2\xb4\xaf\x3d\x5e\x84\x0e\xd1\x08\x84\x7a\x7a\xc6\x80\x15\xc9\x0d\x79\x72\x30\xdd\xf6\x0b\xd4\xf9\x85\x18\xf5\x12\x97\xdd\x8d\x59\x58\x8e\x26\xdb\x04\x66\x23\xfb\x14\x5c\x26\xa2\x53\x4b\x1a\x8a\x4d\x5d\x38\x86\x45\x02\xe1\x94\xb5\x74\x71\xd1\xa2\x5e\xa2\xb1\x34\x65\x67\x5c\x48\x0d\x64\xb0\x71\x09\xf4\xba\x1a\x08\x61\x55\xf3\x85\xc5\xc0\x5c\x4e\x47\xdb\x60\xc7\xa6\x6e\x31\x9e\xcc\x39\x6d\x6b\xca\xc3\xc8\x5e\x5a\x12\xb4\xad\x69\xb4\x1c\xfa\xa8\xce\x96\x5b\xab\x69\x22\x4f\x4b\x98\xf5\x83\x76\x38\x78\x40\x89\x76\xc1\x12\xab\x83\x5a\x32\x37\x46\x01\x02\xe2\x74\x52\x97\xd6\xe3\x4b\xbc\x55\x49\x77\xc5\xb5\xb0\x0f\x42\x34\x82\x34\x4c\xa9\x64\xfa\xae\x0a\x4d\x61\xe3\xba\x67\xd4\xe5\x58\x02\x43\x7c\xcc\x77\x9a\x7e\xe0\x42\xce\x49\xd8\x7f\x5d\x96\x01\x3f\xfa\xb1\x6e\xf0\xe2\x99\x25\x9c\x69\xd5\x52\x8b\x4b\x63\x2f\x5a\x47\x2d\x58\xe6\x68\x7d\xe6\xe8\x98\xd0\x20\x3a\xe7\x5a\x8e\x77\xd5\x6a\x39\x2c\xee\xad\x9a\x30\x2a\xfc\x58\x35\x38\x13\x58\xf9\x0e\xd2\xe2\x7a\x6f\x7d\xb2\xc9\xbc\xd2\x5b\xef\xd4\x61\x57\x16\xdf\x0f\x94\x92\x03\x07\xb3\xf3\x5a\x34\x37\x28\xd8\x74\xa8\x96\x97\x1c\x84\x71\xb3\x50\x79\x01\x4e\x2f\x10\x08\xff\x76\x4e\x08\x0f\x78\xfa\x5e\x21\x33\x74\x04\x96\x63\xe3\x0c\x8b\x84\x1f\x20\x93\x47\x90\x6f\x60\x5a\x8f\xe3\x92\x3f\x60\xba\x35\x32\x70\xbb\x4f\x23\x59\xeb\x8b\x62\x09\xa2\x81\x61\x88\x34\x38\xc7\x79\x05\x30\x1a\x11\xad\xa4\xad\x92\x3b\x04\xe1\xc3\xb1\x9d\xc4\x80\x3e\xdb\xa6\xe6\xe0\xdc\x2b\x10\x04\xc4\x79\xbb\x5d\x98\x1d\x07\x54\x8b\x62\x0d\xbd\xd4\x80\xb0\x61\x9a\x70\x83\xe6\xd1\xa3\x14\x6c\xc4\x58\x59\x9c\xb9\xd1\xb1\x0d\x01\x6e\x1a\xa3\x07\x4d\xd4\x8e\xf2\x36\x8a\xab\xd4\x39\x31\xce\xef\x01\x3b\x6b\x7a\x96\xb9\xfa\x3e\x79\xd5\xf9\xb4\xe0\xa0\x3c\x6e\x59\xe3\x9a\xf4\xf2\x3a\xdb\x8d\xce\x10\xdf\xe7\xf3\x1c\x78\x18\x28\x9b\xa0\x2e\x2e\x11\x63\x17\xed\xf1\x26\x2c\x4d\x73\x6b\x10\xeb\x9a\x6f\x39\x10\x2e\x78\x1a\x9d\xf0\xf9\x58\xe1\x17\x39\x8f\x0c\x9a\x45\x04\xe0\xdb\xec\x47\x4b\xfb\xe2\x1b\xc3\xb7\x69\xb1\x8f\x6d\x2b\x0f\xe6\x33\x8a\x1c\x64\x95\x6f\x98\xc9\x72\xf4\x2d\xc2\x81\x1e\xd2\x8e\xf7\xe0\xf9\xe8\x27\xcf\x09\x97\x6c\xbd\x12\x74\x5f\x84\xa7\xca\x0c\xbb\xb2\x9e\xfc\x01\x49\x7e\x30\xb7\x42\x10\xb9\x56\x62\x1f\x3b\xdf\x46\x92\xbc\xa8\x34\x4d\x5d\x02\x0c\xe7\x3c\x59\x5e\x4d\x08\x9c\x5e\x8f\xda\xe6\x05\x38\xbd\xc3\xe8\xc8\x85\x0a\xe6\x20\x7f\xb9\xbc\x9e\xe7\x89\x34\x10\xaa\x40\x8a\xc2\x3b\x6b\xca\x04\x85\xfe\x86\xd3\x4c\xdd\x15\xaa\x25\x48\x2b\x21\x03\x42\x6f\x34\x84\xcd\xd3\xe9\xa2\xca\x2e\xff\x30\x9c\x8e\xaf\x8b\xfc\xe0\xbe\xc5\x33\x13\xe8\xf3\x85\x9e\x91\x3c\xa2\xa2\x10\xaa\x70\xd4\xb3\x03\x15\x50\xec\x94\xfd\x61\xb5\x9e\x33\x26\xa0\xb6\x46\x32\x9d\x15\x8e\x9b\x0e\x1b\x1f\x96\xe4\x9b\xa0\xae\xbb\xbc\xef\x22\xbd\xb1\xf8\x39\xb1\x68\xcb\x81\xff\x05\x0d\x9a\x65\xb7\x69\xb5\x03\xbd\x07\x06\xd0\x3a\xab\xc7\xcc\x71\xfc\xa5\x71\xc0\xf6\x9c\xaf\xfd\xba\x1d\x4d\x3a\x26\x82\xbe\x61\xc1\x1b\xe7\xb0\x03\x81\x17\xe4\x10\xde\x3e\x8b\x70\xb3\x03\xa7\x6c\x07\x02\x66\xe3\xa3\x66\x1e\xc8\xb6\xd0\xbd\x71\x26\xe6\xc5\x1c\xef\xfc\x89\x33\x77\xea\x15\x5f\x92\x44\x16\x1b\x04\x90\xcf\x19\x0c\x1c\xed\x3c\xa6\xe4\xdb\x33\xd7\xf9\x06\x75\x9a\xe7\x3f\xb6\x73\x1c\x7d\xeb\x18\x95\x25\xc4\xae\x95\xd9\xce\xc6\xc1\x77\xec\x87\xe0\x98\xb0\xb4\x1c\x30\xaf\xb3\x19\x5c\x24\x4b\x79\x41\x84\xba\x43\x82\xa8\x00\xff\xd7\xf7\x41\x98\x6b\xbc\x75\xf5\x04\x2d\x19\x78\xe4\x0d\x3a\xdb\x7c\x25\xac\x99\x7d\x13\x45\xcc\xa5\xfe\x40\x16\x6e\xd0\x53\x6d\xb4\x3c\xb5\x91\x0c\x27\x14\x4e\x6d\x22\xbb\x8b\x30\x72\x52\x06\x20\x76\x76\x60\xfb\x62\x96\xb4\xa5\x1b\x0b\xe6\xed\x3a\xa4\xdf\x31\xb2\xbc\xc0\x87\x4d\x52\xa1\x1b\xff\xe6\x45\xf8\x9a\x3d\x61\x4a\xf6\x1b\x58\x16\x3f\x7f\xb6\xa3\xba\x09\x04\x70\x62\xa7\x8a\x87\xef\x33\x19\x0c\x95\x89\xbf\x3c\x6b\x5b\x42\x87\x0d\x53\xdf\xcc\x6b\x09\x29\x58\xdf\x4c\x68\xa5\x17\x6d\xd1\xb5\x7f\x9b\xbd\x70\x55\x17\x0b\xdf\x84\xd7\x7b\x86\x5b\xc7\xa9\xdb\xc2\x4a\xa2\x43\xdc\x08\xbd\xc3\x71\x30\x71\x30\xb8\xf0\xbf\x8e\xd3\x77\x0c\xec\xda\xec\x2f\x93\x64\x91\xb6\x75\xbc\x75\x30\xdd\x66\xa3\x6f\xc9\x67\x12\x11\x99\xd1\x03\xa7\x17\xb2\x2f\xc4\x29\x4e\x01\x82\x22\xeb\xfa\xd1\x1e\xb2\xb1\xd5\x8d\x63\x63\x10\xa1\xd1\x22\xbb\x40\x46\x93\x8d\xe5\x21\xdc\x09\x4d\x2b\x11\x10\x9e\x5a\xbe\xed\xe3\xe6\xde\xe6\x9b\xfe\xe2\x4b\xd2\x3c\x48\x20\x9e\x9c\xf3\xca\x15\xb1\x0a\xf5\x88\x1c\x9e\xa6\x7f\x09\x6a\xf9\x75\x5f\x07\x3f\xf6\x27\x9b\xd0\x0a\x19\xb1\x9a\x51\xf3\x3a\x91\x47\xd8\x73\xd7\x16\x59\x26\x31\x50\xef\xeb\xb4\xbb\x9e\x06\x48\xfd\x43\x30\xce\x0e\xc2\x1a\xb6\x39\xa0\x78\x97\x15\x95\x18\x69\x2b\x8f\x90\xc5\x45\xa4\xda\xb7\x2c\x05\xfc\xc6\xd9\x8d\x15\x41\xe1\x47\xb0\x19\x7e\xcf\xe1\x92\x43\x8c\x06\x38\x8f\x0c\x09\xac\xa6\x68\x74\x70\x27\x77\x30\x90\x67\x1b\xa9\x07\xf8\xe2\x22\x31\xec\x78\xdf\x7d\xc4\xa2\x7c\x75\xb2\xcf\x8c\x40\x0e\xeb\x8e\xbd\x52\x28\x84\xeb\xab\xf4\x20\xf2\xa0\x93\x41\x7b\xd3\x24\x72\x10\xb6\xf6\xa5\x16\x8b\x4c\x29\x5d\x70\x9d\xc9\xeb\x8e\x20\x59\xd0\xd3\x52\x1a\x17\x49\x60\x37\xfc\xd7\x90\x1e\x29\xcd\x89\xf7\xd8\x7f\xe7\xb0\xb1\x76\x90\xd8\x0c\xbf\x7a\x30\x8f\xf2\xda\x6b\xeb\xfc\x44\xf3\x13\x53\x64\xed\x89\x20\x6d\x43\x03\xf7\x5a\x90\x6b\x73\xbf\x2f\x19\xc7\xd5\xd0\x5d\x08\x36\xde\x7d\x20\x06\xfa\xe4\x37\xa4\x08\xa0\xf1\x1c\x76\xd8\xc4\x74\x0a\x6b\x87\x1d\x5c\xaf\x8e\xe9\x4c\x96\x18\xd3\x3a\xd7\x29\xea\x4e\x25\xa9\x05\x1c\xc8\x03\xca\xb9\x85\xbf\xdd\xa2\xc8\xfb\x98\x85\xd0\x17\x37\x8b\x6a\x9f\xa6\x93\x9c\xeb\x7b\x84\xe2\x6f\xc7\xc6\x3f\xfb\x09\x0f\x21\x07\xdb\x41\xb2\xd7\x26\x2d\xe9\x7d\x76\x1f\xe6\xd6\x03\x98\x6b\x63\x93\x9d\x4b\x4b\x6c\xe5\x17\xb4\x0b\x06\x38\xc8\xe6\x12\xb2\x8b\xac\x53\x4f\x90\xcc\x11\x7b\x03\xfa\x7f\x7c\x72\x0e\xa0\x69\x72\x51\x5d\x67\xce\xb3\x09\xca\x24\xd1\x77\x62\xe3\xc0\x72\xbc\x1d\x71\x1a\xdf\xb8\x10\xba\xe6\xdb\x8e\xa8\x62\xc2\xf2\x90\x42\x3b\xb7\xfb\x5d\xe7\x7f\x74\xb7\xb7\xde\x1d\x90\xc0\x9f\x07\x09\xc8\x94\x0d\x8b\x3f\xcb\x12\xa7\x71\x28\x3a\xcc\x51\x01\x45\x64\xf6\x91\xe5\xc0\xcc\x9a\xb5\x93\x45\x5a\xa9\x02\x88\xf5\x62\xae\xd9\xe6\x0c\x0b\xb6\x21\x0f\x5c\xca\xc5\x8d\xd0\x0b\xe5\x56\x1e\x07\xbc\x38\x46\x8d\xae\x48\x40\x64\x6e\x96\x70\x78\x48\x81\x04\x04\xc4\x78\xbf\xcf\xda\x7e\x6d\xf0\x3b\xfb\x38\x31\x0f\xb1\xc4\x11\xd6\x33\x7a\xd9\xb3\x6e\xe5\xa0\xfa\x69\x34\x6c\x53\xe8\x6f\x72\xb6\x23\x3d\x85\xb5\x72\x92\x5c\x93\xb0\xfb\x32\x18\x17\x22\x29\xd2\x6b\xd2\x41\x9f\x23\x22\xc6\x8e\x79\x54\x6e\xfa\x43\x32\x99\x80\xa8\x19\x7b\x44\xeb\x30\x6a\xb6\x5e\x9b\x5e\x65\x38\x4a\xc4\x83\xcb\x0a\xe4\x81\xda\x4a\x27\x4e\x22\x2b\x5f\x39\x61\x16\x21\x39\xf0\x7e\x31\xdf\xec\x90\xc5\x51\x96\xd3\x7e\x9d\xb1\xb0\x48\xba\xfd\x63\xdf\x19\x37\x96\x28\xb6\xf2\xc7\x51\xe7\x0c\x46\x0f\x96\x1d\x77\xea\x45\xeb\xa1\xe9\xe0\x10\x5b\xfd\xcc\x46\x0b\x69\x38\xd6\x6e\x69\x52\xc1\xb1\xcf\x34\xb6\xad\x70\x61\xcc\x91\xb3\x80\xb4\x4f\x42\x25\x64\xdb\x71\x88\x50\xc1\x5b\xe4\xb3\x78\xae\x4c\x6b\x56\x98\x59\x08\x1e\x8a\xf9\xbc\x29\x98\xba\x71\x60\xf6\x14\x5c\x95\x33\x66\x4e\x39\x93\x94\x95\x9e\xc8\xd8\xc2\xa4\xe7\xe8\x31\x7f\x72\x1d\x7b\xb9\x4c\xc9\x12\x58\x7e\xf2\x1b\xff\x8b\x13\xc6\x34\xf9\xe4\x97\x3b\x37\x75\x70\x2d\x43\xb0\xb7\xcc\x06\x17\x40\x71\xce\xfd\xb2\x04\x64\xd3\x6c\xbf\x6f\xd6\x84\xb9\x61\xdb\x9a\x5c\x4f\xd7\x33\x26\xaa\x32\x99\x48\xb2\xa5\x13\x7b\x18\x98\x34\x8f\x09\x63\x5e\xf1\x86\x3c\x73\xcd\x83\x91\x9b\x47\x5a\xa0\xb3\x58\x71\xce\x4a\xab\xf3\xc9\xab\x79\x96\x95\xea\xab\x93\xff\x1d\xa7\x0b\x4d\x48\x4d\x87\xef\x46\x11\x6a\xb9\x01\x2e\x67\x5f\x02\x0c\xb0\xa1\x6e\x38\x08\x73\x84\x75\x1f\xa4\xee\x21\x3d\xea\x7e\x90\x2e\x43\xa6\xd6\xe3\x5c\xa9\xcf\xbe\x69\x7c\x4f\x02\xfc\x57\x0b\x93\xac\xb5\x39\xcf\x69\x3a\xc7\x96\x80\x1d\x93\x8e\x9d\x23\xf8\x33\x89\x68\x6e\x42\x91\xf3\x6b\x81\xb2\xd6\xd4\xd7\x39\x6a\xe1\x58\xa1\xfe\x80\x85\xa9\xfb\x4d\x3f\xe6\x98\xa8\xef\x9b\xb0\xb0\xcd\xc9\x52\x09\x71\xd5\x9c\x8e\x13\xd8\x2a\x9a\xed\x09\x7e\x1c\x16\x96\x78\x73\x1a\xa1\x4b\x2c\x12\x09\xb5\x13\xab\xf4\x68\x76\x08\x88\x14\xe1\x68\xcd\x81\x44\x3c\xc5\x97\xe6\x3c\x8b\xb0\x90\x45\xe8\x5f\xf7\x90\x60\xf2\xeb\x28\x58\x8e\xdc\x4b\x44\x7d\x30\x8f\xcc\x49\x5d\x44\xce\xef\xf6\x3a\x4b\x2a\xa4\xbe\xfb\xfb\x16\x86\x04\x14\x1b\xca\x6c\x11\xbf\x4f\x04\xae\x23\x77\xf1\xc1\xc4\xb3\xe6\x9b\x60\x0e\xe7\x06\x42\x1d\x26\x68\x4f\xe7\xae\x72\xe6\x84\x65\xfe\x85\x14\x22\xea\x52\x32\xf6\xa1\xed\xc8\x6d\x87\xf1\xee\xfd\x6b\xec\x8f\x5e\x9b\x34\x23\x85\x52\x03\x7e\x84\x5e\xb7\xe0\x59\xa0\x1d\x53\xbd\x31\xe3\x59\x89\xeb\x8c\x36\xa4\x22\xc1\xe6\xda\xdf\x44\x4e\xc4\x7a\xe7\xf1\x07\xc1\x6f\xd1\xa9\x27\x1d\x65\x66\x2c\x8f\x5b\xd8\x99\xf3\x30\xde\x64\x4f\x91\x7e\xce\x42\x01\x67\x1c\xb3\xbc\x57\xb3\x6f\x98\x34\x69\x26\x5a\x4c\x1a\xa2\x1f\xca\x9e\x9c\xeb\xb0\x09\xfa\x30\x79\x0c\xf6\xfb\xc9\x74\x86\xca\xb2\x08\x0c\x22\x58\x75\x4c\x7e\x54\xc3\xb1\x92\x86\x30\x2f\xc9\x14\x78\x83\x24\x68\x68\x5e\x90\xe3\x8a\x63\xf3\x00\xed\xaf\xc9\x65\x95\xb6\x15\xfb\x16\xb4\x37\x4a\x74\xb2\xdc\x6e\xde\xdc\x66\xd1\xde\x07\x71\x17\xf1\x59\x63\xd9\xbd\xe7\x67\x3c\x17\x7a\x86\x4b\x6b\x55\x10\xc4\xa9\x27\x49\x5a\x88\x4c\x28\x97\xbc\xe1\x2b\x38\xe1\x05\x2a\x30\x16\xcb\x7a\xe1\x34\x91\xb5\xf4\x7e\xca\xa7\xad\xc4\x94\xfc\x6a\xa2\x20\x62\x01\x32\xf5\x0d\x9d\xc8\x8d\x97\x8c\x30\x1e\xad\xa3\x04\xc8\x85\x35\xdb\x83\xcf\x9b\x25\x58\xc8\x98\x4c\x63\xce\x8f\xf4\x4d\xbe\x57\xe4\x8c\x79\xce\xd5\x75\x89\x14\xbf\x96\x76\x6e\x33\xb3\xdf\x0c\x56\x6d\x47\xd3\x24\xb9\x83\x78\x8e\x56\x85\x06\xc9\x49\x4c\xa7\xd7\xc3\xc2\x39\xdb\x31\x34\xbd\xbd\x70\x93\xfa\xa9\xc0\x74\xb3\xb9\x59\xab\x6d\xbe\x19\x91\xfa\xf8\x71\xb4\x0d\x73\xd2\x23\xc9\x4a\xad\x15\xdf\xee\x5f\x6a\xbd\xb6\x5e\xdc\xb4\x24\x69\xba\xa4\xe3\x24\x00\x38\x19\x22\x75\xc9\x62\x98\x98\x91\xe0\xba\xb2\x0f\x23\x0c\x2b\x57\x32\x66\x48\x46\x21\x54\x25\x8c\x8a\x08\xb5\x6c\x87\x66\xfd\x9e\xbc\xb0\xc0\xc9\xb5\x4c\xf6\xa3\xa3\x3f\x1b\xf7\x1b\x1c\x7c\x3e\xa0\x90\x1e\x29\x9f\x5c\x73\x29\xbc\xb0\x6f\xe8\xea\xc3\x78\x39\xfb\xc1\x4b\x5e\xbf\x01\xeb\x40\x17\xfd\xba\x61\xb1\x04\x1e\x64\xae\x35\x99\x84\xb0\x33\xf1\xd7\x38\xf0\x03\xef\x96\xfa\x63\x5a\xc9\xb0\x9d\x10\xce\xa9\xf4\x80\xb6\xe7\x3a\xa8\x0c\xd6\x9a\x07\x16\x19\x5f\x67\x37\xbb\x08\x24\x1d\xe7\xbe\x42\x96\xbc\xa7\x1d\x17\x44\xd4\xd7\xc5\xf7\xf2\x90\x4e\x04\x9c\x74\x9a\x9f\x41\xa9\x46\x22\xc0\x5c\x46\xbf\x89\x66\xe2\x3a\x39\x35\xc3\xbc\x6e\xfd\x64\xe6\x89\xb0\xb3\xa6\x81\x24\x01\xfa\xae\x87\xc5\x70\x98\x39\xc2\x7d\x57\x80\xc7\xfa\x2d\x72\x6b\x45\x10\x90\x85\xda\x8e\x84\x89\xea\x9c\x41\x60\xe8\xce\x83\x22\x2a\x9d\x22\x95\xe5\x6a\x9e\x9d\xe0\x5f\x9d\xca\xda\x0b\x62\xd5\xe9\xd1\xaa\xbe\x5e\xab\xe5\x68\xc2\x30\xcd\xf2\x93\xff\x68\x11\x18\x99\x96\x4f\x27\x03\xf4\x3a\xa5\x1e\xe1\x89\xb5\x48\x84\x80\xb7\x32\x77\x93\x8f\x6c\x2c\xb8\x9f\x4d\x46\x8a\xfd\x09\x27\x47\x69\xc4\x5b\x6f\xc8\x87\x04\xd5\xf6\xf4\x43\x34\x0e\x1d\x02\xc7\xcf\xd1\xd4\xb0\xaf\x85\x53\x88\x1b\x0f\x0f\xdc\x8c\xd7\x41\x49\xf3\xe6\x6b\x7e\x41\x7c\x69\x1e\x24\x0f\x45\x08\x69\x93\x43\xc0\x61\x64\x8b\xec\x51\x3c\x42\xf2\x31\x39\x9e\x83\x8c\x25\x44\x83\xc7\x62\x69\x0a\xa2\x66\x10\x59\x27\x59\x2b\x6a\xc1\x00\xb2\xb0\xc6\x1e\x38\x4d\x7c\x16\x28\x41\xd4\x27\xd5\xa5\xc2\xe4\x37\xf4\x89\xfa\x41\x90\xb5\x23\x61\x07\x0a\x61\xd1\x7e\x4d\xf0\x24\xbc\xf0\x21\xf1\x9a\xa9\xbc\xb5\x1c\x78\xb0\x2c\x02\xba\x58\xb4\x3f\x89\x5d\xbf\x49\x2a\x6e\xc3\xcf\xc6\x0f\x0d\xa2\xdd\x24\xf1\xa3\x17\x9a\x5e\x6a\xa2\x2c\x83\x4c\x90\x11\xa8\x09\x51\xb2\xe5\x72\x92\x2b\x92\xbf\x6b\xee\x27\xaa\x84\x54\x24\xb8\x84\xbb\x48\x1f\xa6\x61\xd8\xbf\x0f\x5c\xf8\xce\x85\x8c\x80\x5c\x1b\x5a\x9e\x96\xbd\x26\x43\xbe\x82\x21\x1c\x3e\x7e\x92\x32\x39\x8f\xcc\x22\x4b\xf5\x41\x7c\x91\xbc\x09\xfa\x49\x2d\x02\x7a\xb4\x94\xc4\x71\xfc\xe6\x26\x3d\xcf\x22\x99\xb8\xac\x01\x2d\x06\xc1\xd8\xd4\x23\x11\xd4\x87\xbd\xfa\x89\x93\xd8\xa9\x9e\xeb\x6b\x11\x72\x2c\x9b\x84\xf4\xed\x3c\x34\x24\x8b\xf7\xb5\x59\xe1\x80\x37\x82\x36\x45\x2e\xd4\x64\x9d\x5b\x4e\x86\xb2\x7e\xf2\x48\x59\x87\x49\xe2\xa0\x44\x6b\xfa\x1d\x81\xf8\xe4\x4f\xf2\x29\xe1\x1b\xb5\xce\xfd\x79\x1b\x93\x0b\x44\x95\xd8\x8d\xa8\x73\xb4\x62\x87\xb3\xfb\x4c\xa1\x2e\x1d\xb2\x72\x31\xba\x72\x93\xeb\xb3\xd7\x26\xa9\x1d\x7a\xad\xf5\x48\xcd\x40\x04\x79\x23\x2c\xfb\x6a\x94\xf1\xe2\xd5\x3a\xea\x50\x87\xbc\xf4\x2c\xe1\xb9\x58\x35\x4e\x30\x3c\x16\x5a\x3a\x99\xa9\x04\xc0\x23\x07\xc1\xf9\xf0\x20\xfb\x7b\xe0\xf1\xca\x89\x7b\x91\x2b\x42\x63\x36\x29\x76\xed\xf4\x8a\x22\x91\x45\x21\xe2\x3a\xfd\x5f\x12\xb2\x9e\xb0\x9e\x34\x7e\x72\x7a\x66\x17\xfc\x12\x5c\xb4\x9f\x4f\xdd\xf0\x9a\xad\xf9\x7b\xa0\xb1\xc9\x57\x4c\x00\x54\x42\x82\x64\xdd\x9f\x4c\x7d\x4e\xab\x90\x50\x5d\x61\x5a\xfd\x92\x8e\xe5\xdd\xfe\xd6\x20\x10\x72\x97\xcd\x4d\x3e\xd0\xdc\x64\xa3\x79\xcc\x3b\xed\x8c\xce\x45\x86\x2a\xf2\xbe\xd6\x02\x76\xc0\xd9\x7e\x5f\x57\x32\x5c\x5f\xf1\x12\xb4\xee\xf7\x26\x1e\xdb\x3c\x16\xde\xf4\x26\xff\xd9\x2e\xc7\x7a\x68\x61\x0b\xcc\xea\x70\x7c\x79\x1e\xb2\x94\x99\xee\x99\x8b\xe8\xc2\xe9\x3e\x4f\xdd\x9f\x9f\xbd\xdc\x6d\x2f\xe2\xad\x45\x46\xe9\x1d\xcf\x7e\x0c\xd3\xc8\x36\xa8\x7e\x86\x50\xae\xdf\x33\x96\xe5\x7e\x64\xf4\x68\xdc\x58\x32\x16\x3e\xce\x32\x9f\x71\x9d\xbf\x70\xb4\xbd\x64\xc8\x31\xc9\x85\xa3\x74\x1b\x9d\x74\x26\x31\x19\x79\x7d\xe4\x58\x2f\x12\xf8\x1a\x1f\x87\xa2\x1d\x0e\x62\x39\x21\x72\x40\x84\x0d\x22\x4a\x92\xd2\x81\x6a\x36\x6c\xf8\x53\x8b\xda\x38\xd0\xb4\x11\x6e\xdc\x85\xbb\x69\x59\x43\xd9\x9b\x33\x71\x1b\x45\x80\x25\x03\x9f\xa4\x60\x64\x92\xd3\x58\xff\x99\x86\xc8\x56\xe1\x68\x81\xb8\xeb\x72\xfa\x76\x38\x21\x55\x11\x9e\xe3\x1e\xbf\xcc\xdc\x10\xc8\xb0\xa0\x88\x2c\xd7\x01\xab\x04\xc0\xe6\xfd\x3c\xb9\xf8\xe6\x03\x00\x6b\x3b\xec\xa2\x30\x53\x9e\x53\x87\x43\x45\xf7\x0f\x1a\x23\x32\xb3\xf3\xc7\x64\x19\xbb\xac\x4d\x88\x23\x8a\xef\xe7\xb0\xce\x28\xe7\x6b\xf1\xda\x8f\xdf\x29\x1d\x11\x31\x0b\xa3\x73\xb0\xec\xaa\x1d\x26\xbe\x93\x15\xd0\x1a\xaa\xf6\xff\xce\xb1\xd8\x94\x1f\x35\x2e\x9d\x70\xae\x63\x92\xcb\x79\x2a\xcf\x67\x47\xdc\xfb\x19\x32\x77\x69\xfb\xa9\x7d\x8b\x3d\xf5\xb9\x91\xfb\x33\x9d\xeb\xd0\x8e\xda\xad\x3d\x9a\x09\x87\xd8\x23\xea\x83\xdc\x88\xf7\x99\xde\xab\x68\x9b\x56\x26\x78\xb2\x75\x69\x39\x62\x2f\x5a\xce\xca\xb7\xb7\x4f\x94\xda\x0c\x36\xfb\xf3\x9a\x7b\x5a\x67\xf8\x62\x72\x41\xee\xf2\x3e\xf6\x1f\xda\xcb\x49\x7c\xaa\x64\x0f\x9f\x0a\x09\x05\xbc\x79\xe4\xf2\x1e\xae\x21\x3c\x18\x38\x3f\x22\xb9\xc5\xc5\xed\x41\x3f\x04\x22\xb0\x88\xe7\xe3\xfd\xe9\xb0\xc7\x2d\x57\xbc\x6e\x7d\x66\x5f\xc5\x67\xe6\x5b\xcf\x7b\x7c\x15\xce\xfc\xf8\xf4\x05\x3f\x99\x47\xb1\x79\x40\x9b\x07\xb4\xf9\x75\xfb\xd0\x5e\xfd\xfe\x51\x73\xf4\x34\x79\xa4\x5b\x67\x12\xe6\x8c\xe4\xf3\x6a\x35\xc1\x73\xf0\x33\x19\xde\x93\x0e\xa6\x47\xf1\x3a\xdf\xfe\x3c\x21\x73\xb0\xca\xd3\x00\x21\x7e\x9f\x4c\x87\xef\x64\xa9\x49\xfd\x97\xe3\xf4\x01\xff\xcd\xf8\x90\x84\xfd\xe1\x7d\x0a\xc1\x94\x8b\x72\xe3\xe8\x66\xdb\x3d\xa0\xf2\x73\xb8\xe1\xe5\x07\xf2\xfc\x66\x37\x2d\x6f\xef\xb9\x1f\xf8\x2d\xb3\x1d\x6c\x07\xbd\xe6\xb9\xc5\xb0\xfa\xe0\x96\x39\xe7\x43\xde\x11\x75\x2f\xde\xe7\xf6\xf6\xfb\xdc\xbb\x46\xcd\x51\xb3\x74\x54\x7d\xee\xb9\xec\xe3\x82\xc1\x73\x0d\x9e\x6b\xf0\x5c\x83\xe7\x1a\x74\xd3\xa3\xa3\xf5\xc4\x4e\xe9\x2b\xf3\x3e\x14\x4c\xa1\x60\xc9\xb5\xd7\xcb\x79\x5a\x63\x38\x48\xf7\xd1\xba\x4c\xb3\x35\x9f\x77\x5e\xa8\xa9\xcf\xbd\x9d\x1f\xa4\x28\xb7\x5f\x7e\x88\x38\xbf\xfd\xe2\x83\x22\x17\x9e\xfb\xf6\x7b\x9f\x3b\x6b\xab\xd1\x59\x6a\xeb\x52\x8f\x9f\xdb\x3c\x3a\xed\xfd\xde\xa0\xbb\x72\xf1\x5c\x1f\xdd\x65\xd8\xf6\x9e\xe6\x53\xbe\xb4\xe3\x83\xe7\x19\x51\xd5\x10\xec\x34\xbd\x79\x5c\xdb\x61\xc1\xe4\x13\x26\x62\x2d\x03\x23\x3d\x88\x62\x27\x26\x20\x1d\xa9\xe3\x04\xc1\xdb\xe1\xd3\x4e\x5c\xf9\xdf\xc6\x28\xa3\x3a\xfc\x89\x54\x4e\x5a\xa7\x81\xda\xcc\x8a\x3f\x89\xce\x9e\x7e\x20\xf9\xcd\x09\xcc\x7c\xb3\x4a\x8d\xfa\xda\x1a\x35\x47\xcd\xfd\xbc\xd9\xda\xb7\xf5\xe9\xd6\x71\x5b\xdf\xd8\xfa\xee\xe6\x2c\xef\x43\x56\xfe\xd7\x51\x1f\x64\xe3\x4f\x48\xe7\x69\x45\x80\x9d\xc2\xa6\x7c\x42\x4e\x6f\x62\x7f\x58\x8a\x5f\xdd\xfb\x79\x9a\xc6\xd0\x5e\xc1\xa9\xbc\xbe\x3a\x8b\x3e\xed\x9b\x9f\xd7\xad\xff\x8e\x3e\x55\x6f\xd7\x8c\x4d\x3a\xd8\x37\xef\x7d\x9e\xa6\x68\x52\x56\x90\x10\xf4\xf5\xe5\x2c\x87\x77\xe4\x91\xe4\x6d\xcf\x87\x8f\x7e\xe8\xde\xe8\x49\x30\x68\x93\xb6\x68\xd5\x0f\x4a\x5d\xa0\xd8\x1a\x35\xea\x25\xa5\x1e\x51\xef\x43\x02\x96\xdb\x7a\x83\xba\xb5\x4b\xc0\x68\xa4\x47\x76\x30\x53\x84\xf7\x30\x2b\x69\x25\x09\x62\x18\x83\x59\x3b\x60\x28\x23\xf5\x62\x36\xec\xd9\x26\x1a\x6d\x27\x83\x30\x99\x53\x92\x39\x25\xb7\x3b\x8c\xa7\x68\x7f\xea\xf1\xc4\xef\x60\x10\x26\x83\x30\x19\x37\xc9\xb8\x49\xc6\x4d\xd2\x2d\xd3\xe3\x26\xf8\x2e\x5d\x34\xe9\x6e\xe9\xd1\xe9\x85\x20\xf9\x6e\xf2\xdd\xe4\xbb\xc9\x77\x93\xef\x26\xdf\x4d\xbe\x5b\xee\xf5\xec\x2f\x4f\x1e\xde\xcf\x39\x9b\x73\x36\xe7\x6c\xce\xd9\x9c\xb3\x39\x67\xf3\xdd\xe6\xbb\x74\xfc\x6c\xbe\xdb\x7c\x77\xf8\xee\xf0\xdd\xe1\xbb\xc3\x77\x87\xef\x0e\xdf\x1d\xbe\x3b\x7c\x77\xf8\xee\xf0\x5d\xcd\x77\xea\x91\xea\x9a\xea\xa3\xea\x7a\xfb\x7c\x64\x9f\xbe\xfd\x3e\x4f\x7d\x4f\x1d\x2e\xe2\xf3\x22\x3f\xb2\x8d\x5e\xf4\xe7\xc5\x7c\x04\x0e\x5e\xdc\x8f\x86\xc3\xcb\xfd\x79\xea\xc0\x9a\x3a\x35\xa5\x66\x7f\x04\x6d\x04\x61\x5f\xf5\x47\x76\xd4\x2b\x6d\xd3\x65\x3f\x0c\x1e\xcd\xc4\xf4\x4f\x75\x54\xf5\x58\xf5\x41\xba\xaa\xba\xe1\xe7\xb5\x3a\xab\x06\x80\xc6\x89\x46\x8d\x7a\xbf\xc6\x91\x86\x96\x46\x16\xfd\xf8\xb3\xa3\xa9\xd3\x43\x6e\x9f\x50\xdf\xda\x14\x5b\x52\x9b\xb4\x45\xdb\xb4\x43\x7b\x68\x2f\x2d\xdf\x65\x8e\x27\xff\x91\x03\x2a\x02\xdf\x5f\x90\xcb\xc9\x42\x0a\xc7\x7a\x50\x51\x44\x2d\xdf\xf5\xd5\x0f\xdf\x3d\x7c\xf7\xf0\xdd\xc3\x77\x29\x31\x44\x8a\x5a\x27\x2b\x20\xcb\xa0\x5a\xbe\x7b\xf8\x2e\x6b\x33\x34\x43\xe0\x73\x24\x07\xe1\x46\x26\xb9\xe1\x44\x05\xfa\xce\xd6\x32\x53\x9f\xb3\xf7\xe7\xe8\x2d\x69\x65\x7c\x9a\xcc\x9e\x0c\x97\x17\xbc\x29\x5e\x95\xdf\x95\x5e\x16\x6f\x8b\xd7\xc5\xfb\xe2\x85\xf1\xc6\x78\x65\x7a\x67\x02\x2a\x4f\x80\x06\x53\xf8\x85\xde\x5d\xe8\xe5\x85\xde\x5e\xe8\xf5\xc9\x94\x78\x91\xfa\x46\xea\x1b\xa5\x6f\x94\xbe\x51\xfa\x46\xd1\x23\xf4\x0d\xbd\xe3\xd0\x4b\xd6\x22\xf6\x42\x43\x5d\xfd\xef\xbf\x7f\xfd\x9c\xff\xb6\x9c\x8e\x7d\x6b\xdf\xd4\x40\x74\x9f\x87\x27\xc7\xf9\x9f\x91\x86\xc6\xd2\xda\xad\xf6\x92\x94\xa3\x64\x14\x3f\xaf\x05\xac\x0e\x85\x34\x49\x56\xef\xb2\x34\x16\x43\x67\x13\x0f\xbf\x11\xa9\xfe\x4c\x4e\x42\xcb\xbb\x64\x92\x52\x86\x45\xad\xaf\x38\xb4\x4e\x83\xed\x5c\xe3\xf8\xf5\xc7\x77\x82\xc1\xae\xef\xae\x35\xe4\x79\x1f\xee\x47\x76\x22\xdc\x6a\x2c\x20\xfb\x7a\xd4\x27\xa1\x00\x0f\xb5\x10\x74\x2d\xd2\x55\x41\x6e\x25\x65\xc9\xc8\xc7\x80\xe2\x31\x02\xef\x57\xdc\xe7\xac\x08\x14\xe6\x21\x9c\x30\xa9\xec\xd6\x04\x79\x40\xf6\x26\xe9\xe0\x65\xf8\xa9\x1d\x61\x13\xf8\xce\xe2\xde\xc8\x02\x13\x08\xfc\x83\x9c\x2d\x51\xdc\x21\xd2\x81\x28\x4d\xb4\xf1\x65\xca\xec\x1b\x20\x1a\xf0\xbd\xeb\x16\x26\x93\x84\x1e\x0b\x07\x08\xf4\xe4\x5a\xac\xbf\x84\xfc\xa7\xb3\x89\x6c\xd2\x7d\x50\xfb\x85\xe4\x51\x6a\xbd\x87\x7c\x25\xac\xd1\xdb\xef\x6b\xbc\xcd\x91\xc3\xa7\x50\xd6\xfb\x98\xb8\xe0\xd3\xe3\x23\x8b\xa7\xc7\x9a\x2e\x0b\x65\xdd\xe4\x79\x92\x70\x88\x7c\x3f\x8b\x60\x97\x75\x2f\xa4\xf7\xf5\xfb\x75\x45\x1a\x3d\x5b\x98\xfc\x28\xb7\x14\xa4\xf1\x6b\x3f\xae\x91\xd4\xd4\x48\x62\x7b\xbf\xef\xca\x14\xd4\x13\x8b\x9d\xd4\x2b\x29\x97\xa8\x69\x6f\xfb\x15\x21\x97\x08\xbf\xa2\x43\x3b\xb4\xbc\x28\xc2\x3f\x31\xb6\x92\x64\x2b\x29\xd0\xa0\xd7\x62\x6e\x86\x07\x4f\x3e\x7f\xae\x58\x74\xba\xca\x72\x6e\x7f\x92\x9b\x41\xfc\x6f\xdd\x43\xf3\x90\x9a\x87\xd4\x30\xfa\x0d\xa8\x99\x25\x93\x71\x56\x10\x84\x89\x58\x79\x51\x0c\x0f\x87\x0c\xfe\xbf\x98\xa2\x6c\x5e\xa9\xab\x3a\x4d\x00\xa1\xfd\x41\x96\x9c\x38\x48\xcf\xd1\x26\xc6\xe1\xde\x0e\x9c\xdb\x3d\xc7\xb5\x0b\x49\xa5\x44\x54\x21\x4f\xef\x45\x43\xba\x63\x68\x52\x03\x8d\x78\xb7\xf8\x26\xbc\x76\xf9\x45\xe8\x4a\xa2\x6a\xd4\x32\x8c\x18\x70\x76\x52\xe0\xe2\x58\xcb\x7a\x63\x5e\xdd\x76\xd1\xa0\x4b\x37\xb9\xbc\x76\x3a\xda\xe6\x35\x22\x20\x71\xb0\xcf\xda\x4e\x7a\xe3\xdc\xf4\xa4\xb3\x61\x88\x10\x9a\x15\xa4\x70\x0f\x92\xb7\xc7\x7a\x4c\x03\xe4\xd5\x58\x8f\x94\x38\x64\xd7\xd8\x8b\xf8\xab\xdd\x6e\x51\x55\x92\x1f\x08\x1a\x63\xc7\x61\x0f\x25\x8e\x36\xf2\xb9\x84\x20\x13\xe6\x50\x7f\xa0\x9f\xa8\xa3\x6d\xb4\x78\x3b\x4d\x72\x00\x33\x09\xd7\xda\x2e\xe7\x01\x0b\x4a\x85\xc4\x20\xb0\x5b\xad\xf7\xa8\xff\x50\x63\x65\x23\xbd\xdf\x65\x27\x33\x6e\xaa\x72\x32\x4d\x78\x0e\xde\xd4\x2e\xe7\xb1\xbb\xec\x3f\x9c\xff\x72\x2d\xa2\x86\x48\x85\x13\xe1\x8a\x5d\x8b\xbe\x07\x57\x7e\x1d\xea\x83\xa8\x9d\xf4\xc9\x04\x30\x07\x1a\x1b\xf5\xc3\x60\x32\x60\x1a\x48\x4f\x0f\x97\xc9\x60\x68\x0f\x53\xc2\xa3\x7f\x32\x25\x04\x53\x42\x91\x6e\xdd\x09\x4f\x9c\x21\x5c\xc3\xab\x19\xa0\x8d\x42\xd4\x19\xb9\xdb\x49\x36\xf0\xaf\x11\x8a\x15\x43\x35\x8f\x71\x7e\x4f\x68\xb3\x41\x9a\x32\x0e\xc5\xe0\x59\x39\xbb\xce\x61\xd2\x3a\x33\xae\x61\x41\xcb\x31\x14\x79\x22\xb8\x49\xfd\x0d\xc7\x06\xc1\x08\x6d\xfe\x06\x57\x34\x91\xd2\x4c\xd2\x81\x10\x31\xdc\xeb\xe8\x93\xf9\x1b\xbc\x0c\x42\xfb\x45\x00\xdf\x5a\x49\x1c\xc1\x26\x2e\x80\x48\x01\xd2\x08\xe6\x7b\x9f\x5c\x65\x7d\xd9\xd5\x7e\x92\x06\xac\xb3\x50\xe1\x23\x64\xd8\x04\xec\xa3\x28\xe4\xdd\xab\x7f\xbb\x97\x23\x13\xa4\x4e\xdb\x72\x31\x0a\x4f\x65\x41\x6f\x26\xa9\xd2\x76\xce\x28\xcc\x13\xad\xf6\xb1\xc2\xdb\x24\x6f\xe2\x5d\x92\xed\x4e\xdb\x64\x92\x62\x41\x81\xf1\x21\x47\x45\x2c\x0a\x2a\x38\x44\x70\x09\x43\x04\xfa\x2d\x6d\x73\x4c\xb8\xf5\x19\x3c\x36\xbc\xf4\xb0\x08\x52\x59\xe4\x72\x3c\xd9\xdb\x17\x4e\x0f\x2a\x07\xc4\x42\x30\xb1\x1d\x12\x8d\xe2\x64\x2f\x14\xd6\x6b\x41\x01\x6d\xd7\x96\x63\xf1\x6a\x17\xf5\x62\xb4\xd0\xa7\xd3\xd5\xe6\x06\x57\x2d\xcb\x28\x29\x89\x36\xf9\x3f\x36\x55\x49\x76\x87\x7b\x3f\x4e\x2c\xae\x42\x64\xdd\x26\x37\xfa\xa6\x57\xed\xe6\x1e\xa0\xc2\x76\x6f\x3e\xe5\x1e\x5a\xe3\x30\x78\x1a\x78\x8c\xd4\xc2\x78\xb3\x38\x32\x77\x07\x29\x7e\xe0\x1a\xd4\xa2\x0a\xd7\x3d\x04\xcb\x7a\xf0\x1c\xc2\x31\x29\x2c\x1f\xe1\xfc\xf5\xf4\x9e\xb0\x23\x9c\x34\x85\x41\x4a\xa4\xc0\xbd\x88\x8e\x31\xa8\x23\xa5\x51\xe4\x16\x47\x27\x49\x83\x4a\xef\x34\xa9\x32\x92\x88\xc6\x92\x28\x31\x6a\x64\x45\x0e\x51\x98\x2b\xad\x6b\x25\xf7\xd1\xf5\xbc\xcf\x5c\x9f\xa4\x24\x2d\x0a\x63\xa4\x5b\xa8\x54\x2a\x4e\xa2\x86\x85\x94\x08\x08\xa9\x68\x56\x8b\x66\x64\x36\xc6\x6f\x3b\xd9\xf7\x22\xa3\x3d\xe2\x54\xc7\xd7\x0d\xc2\x95\x49\x52\xcd\xc8\x0a\x89\xf9\x11\xac\x3c\x5a\x8f\x40\xef\xd9\xac\x0d\xcd\x38\x24\x4f\x3d\xc1\x57\x73\x88\xb0\xb7\xa7\x4b\xf7\x89\xf4\x51\x7b\x18\x8d\x64\x49\x3e\x81\xdc\x29\xbd\xc7\xc7\x3c\xf6\xb3\x1d\xce\x04\x5f\xac\x13\xac\x25\x84\xbc\x24\x23\x48\xb3\x61\x6e\x52\x43\x53\x3a\x2c\xc1\xe9\x19\x24\x4f\x0f\xf2\x9c\x05\x91\xe3\x84\xc5\x66\x1c\x98\xd8\x43\x78\x08\x31\xaa\x08\x05\x93\x77\xa4\xf6\xd0\x5e\x82\x2c\x08\xb8\x68\xb6\xa9\x23\x18\x07\xea\x95\xa2\x49\x04\xf7\x27\x3c\x7a\xe2\xb6\x4c\xe2\x4e\xb3\xe0\xe6\x0b\xa9\x98\xd3\x20\xdf\xe7\x04\xc3\x8d\x10\xee\x7d\xf2\xf2\x7e\x89\x45\x0a\xc2\xed\x83\xec\x06\x6a\x19\xbf\xac\x4f\xa8\xba\x49\xd3\x18\x8b\xea\x02\x0b\x80\xe7\x5a\xbb\xf6\x71\x2e\xb2\xa1\x2e\x30\xc7\x72\x16\x1b\xd7\x23\x65\x1c\xad\x78\x3e\x27\x67\x60\x45\x44\x65\x40\xba\x98\x58\xce\xe2\x42\x6f\x5f\xac\x55\xd4\x5a\xd3\x36\x31\xc7\xdb\xc7\x38\x03\x9d\xaf\xce\xba\xb8\x49\xe7\xc6\xbd\x51\x83\x6d\xdd\xb6\x4e\xdf\x25\x66\x18\xe9\xe1\x96\x7c\x6b\xdf\x5a\x89\xac\x97\xae\x91\x3a\xae\x28\x49\x1e\xb6\xf1\x1e\xd6\x4b\x6b\xab\xc7\x2d\x23\x9a\xef\x36\x80\x96\xfe\xbc\xf1\xf0\xed\x76\x71\x3f\xd6\xb6\x06\x87\x31\x46\x76\x1f\x8b\x3b\xec\xd8\xe6\x48\x30\x19\x35\x60\x08\xf6\xd1\x1e\xe6\x01\xcf\x2d\x5c\xab\x99\x6d\x5c\x90\xad\x11\x7d\x74\x5b\xbb\xc2\x19\xc6\xd7\x65\x4f\xfb\x7e\x38\xc6\x55\x7e\xad\x9c\x41\xc5\xc2\x3c\x16\x32\x86\xb4\x8d\x57\xb2\x1c\x4d\xc2\xac\x92\x6c\xe3\x16\x66\xe5\x23\xec\x37\xc8\xf7\xaf\x6d\x66\x1b\x7f\x8b\x3c\xd6\xc8\xd8\x02\x38\x1a\xcf\x75\x4b\x58\x8f\x9f\xe5\x31\xe5\xd6\x41\xd2\x6e\x99\x5b\xbe\x7a\xe0\xcb\x1e\xbe\x15\x3e\xd2\x38\xd2\xed\xa5\x05\xfc\x23\x24\x40\xc8\x99\x20\x8f\x2c\xe2\x31\x11\x8a\x24\x29\xa6\x73\xb6\x57\x7a\x42\xd3\x36\x73\x91\x3f\x7d\x30\xf0\xc4\xfb\x12\x66\xe5\x6c\x5d\xb5\x0e\x55\x6a\x17\x6b\xbf\x56\xb1\xa2\xee\x6d\xd1\x9f\xc9\x83\x16\x5f\x2f\x16\xb3\x07\xc1\x41\x51\x5c\xb7\xca\x98\x55\xf7\x43\xcd\x42\x6d\x37\xdb\xb4\xc3\xa7\xed\xed\xcb\xb6\x67\x39\xd0\xed\xc2\x6d\xa4\x73\x92\x7d\x3b\xda\xa2\x17\x92\x2d\x36\x75\xb0\x9a\xb5\x8c\x32\x61\xda\x66\x0f\x45\x10\x59\x01\x71\xbc\xa8\xc5\x15\xe5\xf9\x93\x6a\x22\xac\x14\x54\x15\x0b\xc4\xef\x6a\xb9\x56\x72\xa4\x9e\x70\x33\xab\x37\x73\x7e\xb3\xf6\x8d\xf3\x7b\x81\x68\x87\x52\x79\x43\xe5\x83\x21\xc6\x7e\x64\x12\xaa\x65\x16\x1d\x66\x51\xe6\x58\xe7\x60\xfd\x06\x0b\x52\xa1\x84\x8a\x49\x83\xcd\x30\x54\x4e\x25\xa9\xb0\x50\x0e\x33\xa4\x6b\x74\xd9\xe5\xe8\x4a\x5d\x38\x7a\x98\x2d\xcf\xa1\x46\xc8\x37\xf2\x74\x31\xbb\x36\xfb\x3d\x27\x33\x4b\x9f\x61\xfb\x32\x03\x53\x95\x04\x35\xdb\xc1\x13\x4f\x34\x82\x5a\xae\x35\x7c\x8a\x17\xf8\x18\x57\x5d\x9f\x81\x72\x02\x97\x63\x48\x8f\xe8\x4c\x17\xf8\xe5\xee\x4f\xe9\x2b\xe6\x70\xc2\xcd\xb8\xee\x63\xa6\x7a\xac\xfb\x8f\xf9\xea\xa5\x5b\x7d\xeb\x51\x89\xdc\x19\xc1\x1e\x39\x40\x48\xd2\x93\x64\x5a\x4d\x32\x22\x08\x59\x11\x40\xf9\x88\x5d\xc4\x59\xbb\x51\xb5\x6e\x22\x09\x09\xab\xdf\xcf\x35\x1e\x28\xb5\xf0\xa8\x08\xeb\xe2\x0a\x24\x63\x88\x47\x26\xa3\x17\x49\x4b\xa0\xdf\x37\x8c\x8e\x90\xba\xa0\x0e\x81\xd6\x88\x2c\xd2\xb2\x10\x43\xda\x81\xe7\x37\xc9\x9d\xfe\x4d\x91\x4e\xfe\x77\xce\xd9\x44\x3e\x0d\x11\x4b\x94\x19\x4f\xaa\x0e\xe6\x90\x7f\x1a\xbd\x7f\xce\xb1\x22\x81\x50\x58\xd2\x1d\x92\xb9\x4d\x2d\x05\xa2\x34\xab\x97\x05\x00\xe8\x9c\xcf\x0a\x27\xfd\x2e\xda\xc5\x9e\xf3\x49\x22\x9a\xf3\x24\xd1\x63\x49\x76\x16\x04\xe4\x17\xcc\x79\x49\xd5\x7d\xa9\x8f\x7b\xf1\x97\x22\x0e\x17\x9e\x64\xdb\xb6\x10\x58\x6e\x87\xb1\xa5\xcd\x6a\x4c\x6f\x10\x1d\xb8\x82\x30\xa7\x58\x4e\x26\x8a\x39\xbf\x18\xbf\x0b\x59\xfc\x82\x3a\x40\x63\xa1\xfd\xac\x1d\xed\x23\x59\x35\xca\xdf\xe5\x6c\x10\x17\xa0\x94\x95\x58\x56\xcc\x81\x0b\x17\xf0\x72\xd0\x75\xda\x00\x67\x55\xba\xac\x29\x17\x14\x7a\x39\xcf\x6d\x67\x6a\x63\x25\x6a\x2c\xb1\xb0\x55\xc6\x8a\x83\x0d\xb6\x8a\x75\x87\x59\x1a\xfc\xbc\xb1\x4f\x36\x96\x89\x4b\x5f\xec\xc5\x3c\x0f\x82\xda\xa0\x20\xa2\x04\xd4\x62\xa1\xb9\xde\xa1\x39\xe6\x36\x16\xc5\x86\x67\x15\xe0\x3e\x37\xe3\x74\x33\x72\xc9\x3e\x1f\x7b\x58\xfb\x06\xfc\x39\x58\x80\x83\x8e\x64\x5c\x72\x96\x33\x4f\x50\x72\x36\xbc\xc7\x5a\x40\x47\x72\x5f\xf6\xd3\x72\xff\xcc\xba\x9b\x5a\xc8\x1b\x6d\xdc\x1e\x56\xa5\xc1\xe6\x84\x96\xd9\xe4\x36\xd8\x08\x06\xf6\xb0\x52\x04\x0a\x98\x5a\x4e\x03\x6a\x65\xcc\xa5\x05\xc7\x0e\xab\x0f\x9a\xc5\x3c\xac\x38\xa4\xea\x65\x4d\x8f\x4b\x66\x19\x9e\x70\xf0\x6c\x09\x86\x8d\x40\xeb\x1b\x8f\x6f\x59\xf2\xcc\xa8\xa4\x28\xb5\xd6\x23\x3e\x25\xf9\x08\x54\x49\x3c\x27\x65\x22\x64\xf5\x5d\xd6\xa6\xe7\xcc\x08\x7c\x8b\x04\x25\xe4\x7f\x8c\x47\x54\x8a\xa3\x0d\xb8\xdb\xe4\x7e\x32\x09\x83\x76\x2e\x12\x58\x92\x64\xb6\x4c\x02\x72\x93\x39\x33\x99\x0f\xd1\x5f\x45\xf2\x9c\x93\x27\x9f\x3c\xb1\x04\x67\x26\xf6\x5e\x92\xdb\x29\x5d\x54\xec\xa0\x7a\xa2\x42\x55\x92\x93\xb1\xc0\xba\xa4\xb7\x08\xa7\x58\x2d\x58\x0f\x07\xbc\x91\x24\x54\x18\x1b\x6d\xe6\x76\x09\x3a\x7d\xca\x2a\x53\xa1\xf3\x17\x6b\x47\x51\x24\xc5\x05\x2e\xa9\x57\x19\x24\xf6\xd5\x8a\xc6\xea\x56\x5e\xdd\xa8\xa7\x85\xf5\xdb\x5e\xe9\xbc\x0d\xb6\xa7\xce\x48\xa1\x07\xaa\xe6\xea\xac\xc2\x45\x6f\x29\xde\x72\x59\x3d\x31\xdc\x09\x56\x6e\x41\x94\x15\xab\x73\xd1\x67\x88\xd8\xd3\x7e\x58\x9e\x6d\xe4\x0f\xce\xb7\x74\x8b\x82\xa5\xdb\x01\x64\xac\x56\x41\x5d\x70\xf4\x4f\xb8\xe0\x82\x6a\xb9\xc1\x2c\xa7\x6d\xd6\x38\xd6\x3e\xea\x51\x75\xb4\x8f\x7f\xec\x61\xb5\xd5\xdd\xe2\x8f\xd6\xa7\xac\xaa\x54\xa0\x8d\xf3\x23\x15\x0e\x3c\x43\x41\x51\xde\xb0\xbb\xb3\x9d\x7f\x34\xbd\x2e\xeb\xb7\xe3\x43\x0a\xbc\x4a\x81\x57\x29\x1c\xac\x47\x00\x9f\x05\x21\x5a\x5b\xb1\x4d\x10\xf1\x2f\x34\x20\xac\xfe\x83\x45\x3c\xa4\x5f\x25\xde\x37\x66\x73\x24\x84\xe1\x30\xb3\x8d\x53\x56\x6d\xa2\x1d\xb0\x9a\x9d\x25\x60\xf6\x76\x68\x17\xfa\x5d\xaa\xdc\xc1\x8f\x0c\x96\xe3\xb4\xad\x1b\x3e\x05\x93\x0c\x0c\xcb\xc0\xd1\x4c\xeb\x3e\xa9\x3c\x11\x24\x19\xd3\x77\x69\x51\x92\x11\xd0\x3f\x58\xa9\x53\xcf\xe9\x3a\x59\xdf\x61\xd6\xb0\x43\x07\x2b\x09\x31\x82\xbe\xeb\xf3\x07\x96\xd4\x61\xad\x37\xd7\xd6\xd8\x53\x0f\x46\x03\x76\xc3\x49\x4c\xdc\x52\x75\x8c\xf2\x0b\x07\x0e\xf1\x30\x72\x8f\x25\x1f\xf0\x89\x07\xe2\xfa\x90\x96\xe2\x5c\xeb\x97\x58\xc7\x51\x3e\x9e\x3b\x7c\xb7\xd9\x4e\xbe\x8b\x5d\x06\xfb\x73\x98\x7b\x0f\x62\xae\x73\xc7\x7b\x7c\x5d\x1f\xef\xd6\xf7\xc3\xa7\xdc\x21\x51\xbf\x87\x99\xfc\x40\xa5\x1e\x66\x92\x73\xc7\xf7\x46\x70\x7d\xb8\x64\x04\x89\x0d\x36\x21\x91\xe4\x15\xe1\x57\xe0\xa8\x08\x3c\x15\x81\xe3\x41\x8b\x36\x1c\x22\x62\x24\xfa\xed\x83\x97\x24\x35\x7b\x3c\xaa\x99\x3e\xb2\xe0\x10\x31\x10\xf8\x55\x03\x07\xac\x26\x1e\xb6\x85\x42\xf1\xd0\xe6\x72\x39\x17\x8d\x8e\xa4\xcc\xb8\xda\x11\xba\x20\x9f\x28\x35\xe3\x17\xeb\x29\xd9\x9c\x84\x34\x12\x5d\x90\xd9\x1b\xd2\x4a\x22\x93\x5c\x05\x02\x39\xae\x86\x08\x9f\x43\x6a\xc9\x74\xf5\xaf\x4b\x7e\xc5\x47\x35\xfa\x67\xcb\x34\x68\xf7\xef\x05\xa1\x5e\x53\x25\x3e\xd9\x4e\x30\x49\x19\x9f\x20\xa3\x4e\xb7\x60\x98\x02\xc3\x24\x6d\x25\xf6\x29\x2d\xc9\x05\x09\x46\xa1\xb8\x7a\x52\x68\x3d\x61\x12\xb4\x87\x76\xbc\x9f\x96\x50\xa7\x22\xb5\x16\xbf\x2e\x9d\x76\x80\x3a\xfa\x49\xf0\x42\x56\xf9\xbb\xa0\xa0\x43\xc6\x87\x41\x83\x46\x08\x3f\x56\xff\x26\x5d\x5d\x81\xa3\x86\xa0\x1c\x2a\x3f\xe5\x20\xfa\x1e\x92\x2a\x1c\xd2\x02\x1e\x12\x23\x1c\x9e\xd5\x59\x8e\xd6\x23\x7e\x5d\xeb\x6c\x5e\xb2\x49\xde\x20\xee\x9c\xba\xfe\x97\x7b\xb8\x5c\xf1\xf2\x8b\x28\x30\x97\x88\x6d\xf3\xf6\xed\x4f\x5e\x52\x4c\xde\xe3\xea\x1a\x6d\xe7\x08\x78\x06\xb4\x00\xdf\xbd\x98\x7b\x57\x61\x23\xd3\x37\x56\x61\x47\x33\x33\x2f\x5b\xe2\xe5\xda\xa4\xe5\x50\x37\x1f\x3f\xec\x41\x75\x0a\x62\x29\xd0\x51\x19\xff\x3c\x7f\xd7\x59\x51\x38\x06\xac\x52\xbe\x62\xfa\x5b\x1c\x6f\xae\x0c\x7c\x45\x31\xcb\x75\x41\x53\x04\x07\x6d\x98\x9c\x4d\x45\x9c\xbd\xac\x6d\x1d\x6f\x83\x55\x40\x1d\xcb\xf6\x32\x2c\xf0\xb6\x9b\xe9\x1a\xbd\xc0\x9e\x61\xc9\x82\xd3\x76\x62\xff\xd6\x32\x32\x01\x3f\x60\x05\x63\xaf\x51\x1a\x2e\x36\xbc\xe7\x3e\xf0\x66\x03\x17\x0c\x3f\xb3\x49\x7a\xb5\x0f\x0a\x7f\xc7\x6e\x10\x07\xb9\xa9\xc2\xba\xb1\xf5\xb6\x15\xb4\x70\xa9\x7b\x1c\x24\x7e\x7c\x1e\x30\x8f\x43\xc4\x8f\xbf\xe5\x3d\x70\xca\x4e\x46\x46\xf0\xbc\xc3\x08\x79\x6e\xd4\x94\x08\x82\x1b\x22\x60\xab\xa3\x9c\x15\x09\x9e\xed\x8e\x5b\xd0\x88\x1d\x58\x63\x34\xa2\xb5\xde\xa5\xaa\x7f\x23\xcf\x38\x06\x2b\x3e\xb4\x74\xaa\x1e\x7b\x90\xf0\x2c\x25\x14\x4b\x2e\x27\xc1\xc4\x78\xc5\xb5\x91\xae\xf5\xca\x84\xc1\x70\x09\x02\x89\xd5\x02\x37\x48\xc0\x5a\x03\xc4\x68\xfc\x51\x14\x4d\x26\x5f\x5e\xb2\x14\x27\x50\x2e\x0f\x4e\x19\x0c\xa3\x5a\x6d\xe0\xa0\xe5\x1a\xb2\xad\x96\x1e\x00\x75\xf9\x05\x19\x00\x11\x10\x78\x69\xc8\x40\xb5\x5f\x60\x75\x41\x9e\x95\x86\x9a\xda\xa4\x05\x38\x38\x11\x10\x67\xe6\xde\x8a\xc4\x81\xd5\x84\x8b\x90\xe2\xac\x98\xde\x48\xfe\xa4\xfd\x8b\x6d\x80\x03\xe7\xe1\x25\x53\x13\xda\xc1\x07\x51\x40\xc5\x02\x3c\xd6\x38\x4d\xf8\xf5\x76\x70\x0c\xc6\x34\xa2\x58\xa8\x23\xa4\x03\xd1\x96\xc9\xe2\x5a\x72\x21\x4b\x04\x0d\x81\x48\x42\xdb\x9b\x63\x68\x89\x8b\xa0\x4b\x22\x9e\x08\x44\x15\x3a\x86\x85\xdd\xa5\x3f\x87\x23\xcb\xd4\x23\xd1\x43\x2c\xa1\x4e\x53\x83\x5b\x87\x90\xd8\x98\x8d\x89\xbc\xdb\xc9\xb2\x59\xcc\x31\x85\x89\xa3\x9f\x5d\x2c\xe3\xb8\xa8\xa0\x94\x66\x63\x58\x03\xc1\x06\xe8\x34\xc4\x38\x0c\x4b\x01\x09\x3b\xb4\x87\x34\xd9\x8b\x05\x99\x32\x73\xd0\x48\x14\x58\xd3\xfe\x4d\xcb\xf2\x8e\xf1\xdd\x86\x03\xe5\x74\xb5\x14\x40\xc3\xb8\x6f\xae\x0b\x64\x1b\x9e\xfc\xb0\xbc\x0c\xb0\x6e\xda\x8b\xbc\x97\x7d\x88\x55\xe0\xea\x29\xcc\x6b\x67\xa3\x25\x26\xe0\x00\x00\x0f\xd0\xfe\x70\xdd\xc3\xf0\x3a\x10\xea\x07\x52\xe1\x3c\x0c\x77\x02\x88\xce\x73\xb6\x7d\x96\x65\x28\xe7\xf3\x9a\x34\x67\xc9\x31\x2c\xf8\xcf\x65\x40\x71\x82\xbc\xf1\x31\x97\x63\x58\xcc\x9f\x3f\xe5\x0c\x4e\x91\x36\x2e\x15\xea\x6b\xb1\xdd\x9c\x87\xc4\xbf\x50\x4d\x17\xbf\xf7\xbd\xed\xdc\x05\x2c\xdd\xce\x49\xf4\xfd\x94\xe4\x3c\x94\xed\x84\xb8\x42\x66\x1f\x68\x0b\x82\xaa\x77\x41\xb8\x79\x50\x0f\x32\x1e\x0b\xc8\x2b\x2b\xa0\xbd\x50\x93\xd9\x6b\xd0\x3e\x33\xbe\x1e\x50\xf7\x51\x0c\x06\x41\x9e\xf6\xa0\x9a\x85\x24\xc0\xd4\x5e\x14\x38\x5c\x54\xe8\xa4\x48\x45\x2e\xab\x69\xa9\x13\x88\xaf\x38\xf1\x1e\x27\xde\x63\xb5\x4d\x32\x27\x88\x04\x72\xf6\x7c\xd3\x3b\x21\xb8\xa5\xba\x27\xd3\xbf\xda\xa4\x45\x4a\x3f\xb4\x64\x5f\x62\x49\xa4\xb8\xa1\x5a\x7f\x0a\x58\x18\xc0\xc2\xb7\xe8\x35\x79\x38\x91\x7c\x1f\x27\x28\x4f\xb6\xc9\x5f\xcc\x02\xb8\x17\xc9\x97\x96\x33\x54\xbb\x98\xf2\x98\xcc\x20\x4f\x1f\x89\x9b\x36\x09\x94\x28\x8b\x89\xa3\x30\x71\x8c\x24\x2e\xc2\xc4\x85\x97\x1b\x11\x7d\xe0\x8c\x72\xc2\x9a\xf8\x2d\xd9\xf4\x6e\xd4\xc9\xab\x68\x89\xb4\xd3\x3a\x1a\x24\x98\xa2\xe8\x99\x50\x48\xc0\x89\xb3\xe7\x9a\x25\x77\x09\x4a\x38\x91\x4b\x6b\x0e\x05\xde\x9c\x12\x4f\xe4\xd6\xcf\x20\x57\x4c\xb8\xdc\x3b\x45\x9f\xb0\x15\xb5\x07\x1c\x03\xe2\x21\x6d\x28\x39\x8b\x33\xc9\xf7\x97\x4e\x66\xd4\x60\x91\x26\x2b\x64\xc3\xa7\x53\x12\x95\x4c\xe6\x49\x44\xa4\xf6\xb3\x87\x14\x4b\x6d\x8c\x02\xdb\x4e\xb6\xcd\xec\xf0\x79\xc8\x59\xb1\xbc\x1f\x34\xc3\x15\x7b\x39\x11\x92\xcf\x4f\x09\xc8\xed\x2b\x06\x38\xa6\x84\x63\xa2\x69\x0f\x2d\x61\x11\xce\x90\x1c\xa4\x1c\x5a\x66\x7c\xea\x93\x68\xba\x12\xf5\x57\xa2\xfe\xca\x06\xd5\xcd\x6f\xa4\x14\x22\xcd\x0f\x04\xd1\xe0\x26\x98\x6e\xa7\x0b\x82\xd8\x29\xe2\x5c\xd3\x2d\x00\x89\xf8\x04\xb2\x73\x8f\x46\x8e\xda\x64\x8f\x8f\x87\xe4\x21\xd3\xa8\x33\xdd\xad\x76\xa6\xe1\x07\xed\xd3\xb4\xe4\x18\xa6\x12\x3e\x19\xa6\x6f\x91\x80\x87\x1e\x79\x09\x6e\xb8\x75\x5c\x1b\x8c\xc4\xbd\x54\x13\xc3\x51\x72\xaf\xab\x81\xe1\x8c\x78\x94\xc2\xa2\xfa\xde\x23\x1b\xfa\x23\xd8\xe1\x41\x2b\x3d\x5c\xb6\x6b\x41\xb6\x6c\x03\x21\x27\x83\x73\x9a\x04\x43\xa9\xf1\xf6\xa5\xe5\x18\xdc\x13\x38\xe3\x16\xa1\xae\x04\xb6\xc7\x6a\x00\x55\x6f\xef\x07\x20\x19\x4a\x3d\x7f\x8b\xa2\xa1\x38\x2f\x70\x6c\xaf\x36\xb8\x82\x7a\xc2\x15\xb8\x1c\x14\x84\x49\xb5\x1a\xf7\x07\x50\xc7\xc5\xab\x16\x86\xd8\xc2\xb0\x22\xff\xbc\xb6\xf9\xd6\xc5\x35\x69\xc5\x8e\x95\x33\xd6\x7e\x58\xd7\x01\x5c\x24\xd6\x60\x31\x87\x2e\xea\x91\xec\xf5\x2d\x19\x83\xf3\xe2\x38\xf4\x08\x77\x86\xa1\x17\x6e\x75\x42\x8f\x36\x30\x6f\x03\x32\x37\x49\x2e\x37\xb4\x03\x45\x77\x62\x53\x88\x6a\x53\x19\x6f\x53\xd6\x78\xe3\xea\xda\x64\x76\xd8\xd0\xa7\x1b\x62\x76\x1f\x1c\xa0\x38\xc8\x36\x2e\xb3\x0d\x59\xb1\xc1\x19\x1b\x9a\x97\x1a\xbe\x6a\x39\xfe\xf9\x53\x8e\x87\xd4\x22\xbb\x25\x09\x74\xd5\x02\xa8\x4c\x0a\x5d\x03\x2d\x40\x17\xce\x05\x1c\x85\x04\x38\x47\x5c\x40\x1a\x46\x59\x60\x18\xe6\x72\x52\x42\xc3\x2d\x87\x7b\x93\x61\x07\x50\x9a\xeb\x9b\x6d\x9b\x54\x8b\x84\xdb\x2d\x42\xb6\xd6\x37\x75\x84\x8f\x71\xea\x71\xd0\xd5\x02\x45\x51\xc0\x85\xbe\x91\xe5\x10\x2f\x17\x98\x47\x89\x54\xc7\x9f\x42\xfb\x58\x64\x60\xe1\x4b\xe3\x6e\x48\xe3\x30\x9c\x11\xb8\x4a\x5d\x23\x0f\xd1\x46\x42\x6e\x27\x25\x20\x12\xea\x3b\x5d\x20\x1c\x2a\x9b\x2a\xd1\xda\x86\xde\x01\xfd\x40\x89\x14\xe4\x67\x41\xe6\x17\xc4\x7e\x85\x35\x4b\xa4\xc1\xe0\xb9\x55\x19\x9f\x11\xc5\x60\x1d\x94\x33\x24\xcf\x81\x6c\x01\xb1\x0d\x54\x0f\xc5\x80\x0a\x30\x5c\x44\x68\xd6\x01\x99\x41\x46\x39\x8f\x29\x45\x8a\xa3\x0e\x58\x90\x22\x41\xd4\xa3\xd4\x1e\xa3\x2e\x23\x27\x63\x29\x70\x12\x71\x31\x85\x8b\x01\x93\xa4\x21\xca\x1a\xf7\x6b\x23\x80\x68\x24\x11\x5d\x94\x45\x67\x4d\x6d\xc0\x76\x23\xd3\x69\xfa\x64\xe3\xee\xa1\xaa\x64\x10\x79\xa1\x4f\x7d\x9e\x05\xf6\xba\xb4\x38\x7f\xc1\x49\xbc\x35\x92\x1a\xc5\xa0\xe9\x1a\xcc\x8d\xc1\x0c\x19\x28\xd3\xd9\x20\x1b\x84\x1d\x83\xc8\x66\x36\x38\x09\xb2\x77\x70\x33\x0d\x2e\xa7\xe1\x9e\x87\xda\x46\x03\x12\x1d\x4c\x92\x21\x2d\xcd\x50\x4e\x6b\x78\x6e\x64\xfc\xd7\x1e\x7d\x97\xa7\x3d\xbc\xd9\x19\x9c\x26\x18\x20\x83\xf1\x42\xb0\x9b\xf0\x16\x25\xeb\x40\x72\x20\x5d\xc2\x7b\x75\x1e\xce\x36\xbe\x8a\xcf\xe0\xd6\xc7\x08\x3f\x91\x42\xf7\x10\x0d\xed\x30\xbc\x03\x0e\x3e\x4e\x8e\xca\xd9\x5c\xee\xf6\x70\xce\x73\xc9\xd9\x84\x8c\xe1\xf2\x64\x2e\xc4\xf2\xc5\x02\xb9\x50\xeb\x17\x15\xdf\x85\x9e\x3a\x90\xa2\x17\x52\xfa\x52\x20\xe6\x62\x7b\x5c\xec\x90\x03\xf9\x79\x19\x41\xd7\xd9\x61\xa0\xb3\x5c\x81\xea\xa2\x85\xbb\x68\xed\xae\x56\x74\x9d\x07\xc2\x84\x2c\xb1\xbe\x13\xe6\x31\xea\x7a\x6a\xbf\x3f\x35\x55\x02\x0d\x42\x44\x73\x39\x4b\x21\xa9\x38\x8a\x3c\x3d\x18\x5f\xe4\x43\x8f\x87\xdb\xf4\xd1\x93\xdf\x71\xba\x64\x70\x15\xa2\x99\x37\xfe\xd4\x11\x88\x49\xa0\xa3\x6b\x92\x38\x30\xe9\x9b\xed\x70\x13\xdf\x46\xda\xcc\x82\x48\x21\xfe\x68\x83\xc3\x58\x4d\x30\xc6\x13\x87\x82\xf6\x80\xc3\x90\xc4\x90\x00\x0f\x77\x40\x92\x1e\x45\xa6\x19\xf8\x09\x5a\xa6\xc0\x6a\x6d\xec\xf5\xdc\x0e\x7b\xc8\x8b\x09\xf2\x3b\x02\x14\xeb\x68\x45\x5b\xd4\xd4\xa6\x6e\x59\x92\x3d\x4d\x2d\xf9\xb6\x9d\x2f\x73\xbc\xcd\x7e\xee\x90\x9c\x9a\x9b\x44\xa0\x9b\x54\x56\x7b\x91\xb3\x82\xac\x83\x9b\x6a\x74\x98\xe7\x89\x49\x9e\x98\xe1\x89\x91\x9e\x3b\x56\x7d\x93\xa7\xa8\x05\xb7\x51\xc9\x9d\xb8\xf6\x4d\xc0\xe7\xde\x8f\xc2\xf2\x03\x11\x84\x5b\x0a\x77\xcc\xa6\xda\x2b\xc2\x95\xdc\x17\xa8\x85\xa3\x27\x16\x4e\x28\x32\xcc\xc4\xda\x8e\x82\x06\xcf\x25\xc0\x0d\x47\xd5\x22\x33\x01\x94\x4b\xe0\x12\x0a\x50\x6f\x40\x64\xc5\xc2\xa5\x05\xf6\x45\x92\x9c\x31\x40\x3f\xaa\xff\x92\xbf\x4a\x6d\x03\xf7\x00\x7a\xcf\xa0\x8f\xfd\xc0\x37\x92\x17\x22\x3a\xcc\xb8\x2e\x1b\x0e\xf8\xe2\x5a\x89\xeb\x2d\x17\x95\xae\x41\x99\x49\xf1\xdd\x04\x73\x63\x7b\x27\x76\x78\x92\x18\x44\x47\x7a\x9b\x5c\x0b\x84\xc2\x01\x45\x5d\x19\x38\x09\x3a\x24\x48\x3b\x85\x24\x89\x48\x77\x5c\x7a\xd2\xba\xb2\x38\x34\x14\xd2\x0b\x59\x71\x99\xe3\x1a\xe2\x7c\x3a\x06\x89\xc0\xbd\xe1\xea\x63\xa8\x68\xe8\x47\xfd\x8e\x21\xdf\x80\x73\x6c\x36\xe4\x58\x03\x1e\x29\x60\x9d\x03\x60\x84\x4a\x4a\xca\xc0\xe7\x38\xc8\xf2\x92\xaf\x12\x90\x48\xb0\x6a\x95\xfa\x4c\x41\x40\x91\x7a\x22\xa1\xf1\xb5\x07\xd8\x48\xc6\x4b\xcd\xa2\x59\x2e\x37\x0d\x7d\x57\x38\x13\x9d\xf4\xbc\x9e\x6b\x40\x53\xaf\x19\x4b\x03\x7b\x38\xb1\xa8\x93\x20\x80\x24\x50\x20\xb1\xa2\x93\x10\x81\x24\x2c\x20\x59\x05\x12\x7b\x3b\x71\x2e\x67\x13\x84\xd8\x54\xbe\x99\xe5\xe8\xbf\x15\xbf\x57\x4f\x6e\x62\x4b\x5b\xc7\x60\xc1\xa6\x0b\x76\x0f\xa0\x7e\x2e\x19\x3e\xee\xb7\x70\xb1\xf7\x80\x48\x89\x0d\xbc\xe4\x8e\x20\xa4\x71\xa8\xa6\x33\x58\x17\x43\x4d\x9d\x43\x4f\xa3\xfa\x9d\x5a\x68\x3d\xb2\x32\x91\x7b\xe9\xec\x67\xa7\xa4\x53\x71\xd1\x3a\xf3\x82\x9e\xc9\xe1\x97\x52\x6a\x4a\x78\x15\x8c\xea\x00\x4c\x4b\x62\x48\x18\x09\x54\xbf\xd4\xc6\xbe\xc0\xf9\x5b\x4e\x36\xf9\x5c\x8a\x97\x6a\xaf\x94\x56\x48\x97\x6b\x75\xb0\x30\xdb\x10\xb3\xef\x38\x80\xde\xda\x69\xe4\x2e\xd8\xd5\x6b\x8c\x18\x8d\x4b\x71\x5f\x22\xe4\x58\xa0\x8b\xe5\x68\xe6\x76\xdd\x42\x08\x3a\x5c\x2d\x0b\x29\xc8\x6a\xe3\x4f\x30\xaa\x6b\x25\x42\x26\x2f\x72\x35\x30\x3b\x69\x0f\xdf\x32\xce\xa4\x0a\xe2\xb5\x60\xd4\xb8\x11\x4a\x6d\x43\xaf\x21\x87\x60\x96\x50\xeb\x20\x76\x53\x79\xc8\x60\xa0\xfb\x70\xbb\x6c\x24\x13\x3b\x9d\xcf\x61\x5b\x49\x8e\x1c\x8b\x23\x9d\x04\xfa\x82\x1e\x21\xc7\x36\xd7\xdd\xb8\x47\x37\xee\xbc\x0d\xf9\xbf\x2f\x58\x11\x14\xb4\xb1\xcc\x37\xa4\xfd\xc6\x62\xdf\xc8\xf9\x36\xd8\x78\x93\x89\x67\x23\xed\xdb\x38\x11\x36\xce\x68\xe4\x55\x41\xb2\x9c\x20\xc2\x57\xdf\x15\x7a\x0c\xa7\x84\x22\x1b\x25\xae\xfc\xe0\x69\x50\x01\x42\x2d\xf5\x29\xbe\x15\x0a\x49\x7c\x8e\x90\xd4\x02\x3c\xd6\xdf\x70\x22\x18\x5c\x1b\x81\xbd\x10\xdc\x43\x40\x96\x26\x6f\x30\x91\x76\x90\x3b\x37\x12\x52\x37\x77\xb9\x14\x98\x3f\x25\x9d\x54\x52\x34\x09\x9e\x0e\xb7\x17\x59\x76\x85\x3c\x41\x98\x76\x29\x6a\x45\xc6\x40\x0c\x8c\xc8\xa0\x16\x82\xb6\xad\x7b\x87\xef\x1b\x63\x4e\x38\x3e\xdc\x8e\xb8\x5f\x13\x0e\x22\x5d\xdd\x1a\x87\x85\xa3\xdb\x13\xc7\x87\x13\x72\x53\xae\x5c\xfb\xd9\x03\xee\xe5\x8d\x90\x3c\x44\x7b\xf8\x16\x6e\xcd\x6b\xe7\xa3\x9e\x4c\x51\x77\xb3\x70\x57\x51\x42\x55\x2d\x8c\x21\xee\x42\x92\xf3\x14\x42\x73\x72\x6c\x46\x21\x2f\x76\x18\x74\x61\x7d\x14\xd6\x47\x51\x7b\x13\x73\x36\x30\x67\xa3\xb0\x44\xca\x05\x1c\x40\xda\x05\xf6\x2e\xd0\x75\x81\xae\x29\x5a\x25\x14\x4a\x91\x32\x44\x38\xb8\x4d\x0b\xfb\xa5\x90\xe7\x15\xf2\x0f\xd2\x87\x45\xd1\x37\x9c\x15\xae\x10\x87\x14\xf1\x05\x85\xf5\x51\xc6\xd8\x88\x43\x0a\x04\x4e\x69\xcf\x20\x0e\x5e\x7b\xd8\x86\xc7\x44\x5e\x52\x58\x2b\x04\x81\x06\x41\xa0\xd1\x28\xf9\x89\xfc\x8b\xc6\x4e\x6c\x98\xd0\xe6\x1d\x35\x36\x23\x31\x82\xd1\x58\x9d\x0d\x39\xdf\xe5\xcc\x36\x46\xc2\x4d\xc5\x7e\x04\x39\xfc\xd2\x2e\x27\x59\xc0\x65\x89\xe3\xb8\x71\xc3\x91\x36\x58\xc7\x80\xa2\x5d\xe7\x1f\xb4\x8c\xd0\xb4\x5d\x07\x8f\x1e\x42\x55\xfe\xa0\xcc\xad\xae\xc8\x79\x8a\xbb\xb2\x8c\x9e\x3d\x88\xb2\x1a\x39\x56\xc3\xa3\x35\xcc\xda\xc6\xa5\xde\x2f\xbd\x07\x27\x26\x6c\x29\xf6\xe6\xb8\x74\x20\xfc\xf5\x20\x99\xa3\xfc\x59\xb8\x4c\xfe\xac\x71\x4d\x24\xca\x0b\x82\x7b\x99\x3d\x60\x1b\x82\xec\x83\x6a\x8b\xfd\x84\x99\x63\x69\x22\xbe\xa2\x74\x66\x0c\x25\x6b\x87\x27\x3f\xd8\x47\x43\xa6\x54\xa4\x26\xfa\x54\xdb\xd8\x95\x24\x2d\x0e\x12\x18\xeb\x18\x63\x6f\xf0\x36\xb2\x4f\x1c\x79\x83\x80\x67\x8e\xde\x08\x55\x6d\x74\x24\x08\xfc\xfa\xbb\xde\xe6\x8a\xd7\xe7\xc7\x7d\x89\x3c\xc9\xec\x27\xbc\xde\x41\xea\x70\xc6\x35\x00\xe1\x0a\x91\x9b\x5e\x18\x86\x8b\xc8\xf9\xc2\xff\x5e\xa2\x5d\xc8\x96\x1b\x17\x27\xef\x45\x36\x7c\x89\xca\xa1\xca\x94\x3e\x4d\x5a\xd0\xf2\xe1\xf8\x0d\xf6\x46\x80\x84\xf3\xf7\x6e\x23\x76\x90\x33\x0c\xf2\x85\x59\xbe\xdf\x72\x82\xb8\x20\xb7\xd3\x17\x5e\xce\x19\x5c\x0b\x6c\xcf\x08\xbd\xcc\x30\x97\xec\x04\x97\x59\xe8\x22\xdd\xbc\x88\x6c\x5d\xbd\xea\x92\xa9\xe3\x6e\xdb\x05\x8f\x23\xd3\x75\x1d\x36\xf5\x4d\xc9\xb6\xed\xda\x00\x20\x7c\x92\x31\x13\x3c\x25\xc4\x8e\xe3\x92\x62\x85\x42\x1a\x6a\x41\xec\x03\x62\x47\xaa\x8e\x35\xfa\xb0\x56\x9e\xe3\xeb\xcf\x22\x79\x3e\xce\x4d\x32\x14\xbf\x71\xe1\x76\xce\xe6\x94\xfe\xcf\xd9\x24\x08\xba\x78\x88\xac\xa0\xf1\x28\xce\x9c\xc8\x81\x12\xa9\x79\x2e\x32\x7b\xbb\x2c\x01\x91\x32\x6a\xd9\x46\xd6\xbe\x39\x92\x22\x75\x48\x77\x12\xe7\x57\xe2\xfc\xd2\x36\x39\x0c\x36\xf5\xfe\x02\xac\x4e\x42\x9d\xe6\xd3\xe6\xc8\x76\x0a\x0c\x8e\x74\xfe\x7b\x59\xe8\x42\xda\x38\x55\x2f\x78\x1b\x4e\x93\x2a\x4b\x9b\x9a\x69\x3b\x91\xf8\x72\x86\xdd\x42\x59\x48\xbe\x73\x53\x59\x9d\xbc\x3a\x89\x50\x3c\x91\x79\x27\x62\xd1\xdc\x64\x0c\xda\x4e\x28\x09\xdf\x15\xe0\xf9\x58\xa4\x6b\xd8\xc6\xcc\xa4\x1e\x83\x5b\x13\x44\xa0\x05\x6f\xe3\x66\x25\xa3\x7f\x2c\xe8\x52\xf8\xd9\x00\xff\x93\xb6\x4c\x7b\x1e\x48\x9b\x6c\xf3\xc6\xdb\x7c\x7a\xb6\x5b\xaa\xd5\x41\xa0\x1e\x48\x50\x18\xbf\xb8\xce\x15\x7f\xc0\xc6\x88\xcd\xe0\xf4\xe0\x55\xd4\x82\xab\x0f\xf8\xf9\x8b\x90\x41\xc5\xb8\x71\xc1\x51\x94\x56\x50\xab\xe3\xc9\x63\x98\xe4\xd6\xca\x31\xe2\xc5\x5d\x3b\xe4\x5b\x22\x07\x7e\xba\x76\x15\x41\x07\x39\x9c\x6d\x8e\x8f\x4f\xb6\x69\x41\xe0\x83\xf3\x77\x8c\x8d\xb9\x3a\xbf\x2b\xcf\x17\x15\xc3\x8a\x40\x91\x42\xa6\x16\x16\x59\xd5\xf5\x1e\x67\x77\x6f\xb6\xc9\xf1\xbe\xc0\xc6\x17\xe4\x2c\xf4\x4e\x7e\xd4\x2c\x58\xc7\x82\x24\x2e\x2a\x49\x15\xb4\x71\x81\x69\x8b\x5a\x7a\x24\x08\x51\xdb\x88\xee\x1e\x6d\x53\x17\x0d\x3c\xdc\x60\xe3\x01\x15\x8f\xf7\xb3\x87\x12\x76\xb0\xe4\x84\xcc\x26\xe1\xb0\x89\x38\x53\xf0\x7f\x81\x93\x29\x20\x07\x5b\x8b\xb5\x32\xd8\x35\x83\xcd\x45\x10\x54\x0e\xd6\xdc\x6c\xc8\x5d\x67\x95\xe3\x2d\x4c\xeb\xad\xe1\xef\x49\x57\x57\x9c\x4b\xb6\xa4\x6f\x6e\xaa\xeb\x6d\xf6\x3f\x8e\x79\x30\xba\xd7\x9f\x7a\x0f\x48\x1b\x71\xa0\xac\x75\x57\xde\xd1\xa7\xec\x71\xf2\xf8\x8b\xcc\x0f\x14\x4d\xfa\xcc\x83\xf7\xe2\x60\x69\x52\xd0\x35\x49\xde\x9a\xc7\x95\x83\xd2\xe5\x3a\xa9\x4d\xc5\x93\x39\x08\x0f\xae\xf0\x98\x50\x34\xee\x72\x9d\xe1\x3a\x81\x11\xe3\xe8\x36\x09\x5b\xb5\xd2\xa9\xbd\xb4\x24\x2a\x5a\x6c\x93\x4c\x7c\x48\xdf\x3e\x78\x2c\xf0\x79\x6c\xe4\x01\xf7\x6d\xea\xac\x91\xd2\x5e\x76\x74\x31\x4b\x14\x38\xb9\x96\x9e\x4f\xad\xd9\x49\xc6\xf3\x26\x4d\x12\x08\x1c\x36\x18\x1f\xdb\x82\xcd\x23\x2b\xba\x86\x1d\xa9\x94\x70\x9a\xc3\xec\x2d\x4a\x5d\x0d\x72\xbb\xf5\x08\x55\x42\xe4\xb3\x59\x05\xf6\x76\x38\x09\x2e\x69\xd6\xbe\x8d\x10\x6b\x87\xd1\x72\x3a\x57\x0c\x2b\xef\x75\x4b\x72\x46\x23\x61\xb8\xdc\xeb\x74\x8d\x08\x18\x1c\xa8\x72\x9d\x50\x0f\xf4\x8b\xd0\x7a\x13\xf4\xc5\xec\xa1\x16\xf4\x8b\x83\xdb\xcc\x30\x2c\xf1\xb6\xdc\x1d\x1c\x48\x8e\x18\xed\x61\x3f\xe2\xc3\x97\xde\xef\xeb\x82\xa8\x9f\xf7\x73\x9e\x6d\xcc\x0c\x5a\x3e\x6e\x8d\x87\x69\x09\x08\xc4\x4f\x49\xd0\x70\x10\x9a\x1c\x04\x2e\x07\xc1\xca\x11\x08\x7d\x03\x91\x6d\x20\x01\x4a\xf8\xc3\xdc\xc6\xcc\x2e\xbc\x0d\x23\x4a\xc0\x5b\x82\x0a\xc8\x9b\x2d\x54\x8c\xcc\x7b\x11\x60\x02\x7e\x46\xec\x94\xe0\xae\x74\x4d\x3e\xe4\xf1\x89\x37\x94\xcc\x6d\x6a\x41\xb3\x20\x64\xb8\xa6\x22\x5a\xb6\x10\x53\xb9\x54\x0f\x65\x68\x82\x82\xfb\x51\x84\xd5\x15\xa2\xc4\x0a\xf0\x61\x7c\xab\x72\xe3\x05\x37\xfe\x44\xd8\x56\x9e\x5b\x38\x9e\x10\xb5\x02\x3f\x14\x98\xa4\x40\x11\x05\xea\x28\x30\x49\x71\x0f\x85\xd0\xa8\x08\x95\x2c\xc2\x10\x0a\xdb\xa1\x5c\x08\x1b\xc4\x52\x24\x6b\xaa\x0b\xef\x8a\xed\x53\xce\x4a\x85\xa8\xa9\x10\x3b\xd5\xb5\x28\x6e\x3b\x52\x15\x7c\x88\xd4\x0d\xce\xbc\xdb\x88\x31\x41\x98\x08\xdb\x08\x25\x68\xc2\x10\x9a\xf0\x84\xb6\x10\x9d\x00\x84\xc6\x2b\xec\xdc\x38\x8d\xfd\xd8\xd8\x38\x4d\xc0\x42\xb3\x9a\x37\x61\x9c\x0d\x22\x6a\x9e\x73\x7f\x53\xb3\xfa\x53\x04\x72\x78\x61\x1b\xaf\x6d\xe3\xfd\xed\x07\x12\x73\xa2\x49\x8a\x01\x2c\xd7\x95\x46\x47\x86\xc0\x80\x32\x64\x41\x6a\x57\x6d\x27\x25\xaa\xc9\xee\xcb\x90\x42\x11\x3f\x90\xdc\x4e\xf1\x39\x28\x5b\x07\x5d\x0c\x19\x1c\x83\x82\xb5\x81\x63\x2a\x70\x5b\x05\xce\x28\xed\xd1\x31\x18\xb5\xae\xf0\x02\x31\xa0\x16\xf0\x68\x90\x48\xd1\xe8\xeb\x5a\xd4\x9c\x1f\x37\xf1\xf0\x42\x86\x68\x56\x26\xc5\x60\xda\x0b\xa6\x43\xed\xf7\x39\x49\xad\x0e\x01\x6c\x5d\x5b\x19\x3c\xe2\x8c\x46\x14\x71\x70\xac\x9f\x36\x9c\x44\xf5\x86\x24\xe3\x00\x79\xce\x38\x0a\x15\x20\x49\x67\x27\x81\x4c\x5c\x62\x32\x2e\xda\x99\x4b\xc4\x1b\x6a\xa3\xb8\x3c\x93\xbb\x0d\x3c\x51\xa6\x6f\x43\x36\x8a\xe5\x11\xc3\x71\x31\xbf\x2e\xb1\xa2\x17\x23\xec\x12\xe7\x7b\x01\xe3\x97\x98\x80\x8b\xc2\x85\x64\x3d\x41\x06\xf7\xa0\x98\x9d\x8e\xd1\xf9\x05\x64\x82\x2a\x1a\xda\xd6\x31\xe9\xab\xfb\x8a\x80\x4d\xde\xcb\x45\x59\x79\x79\x83\xd7\xe5\xc0\xd0\x45\x5e\xe2\x64\x2f\x2e\xfe\x4b\x47\xb8\x38\xf4\x2f\xd4\xc2\xc5\x89\x7f\xd1\xde\xbe\x65\x68\x69\x95\xdc\xa0\xa6\x77\x6a\xdd\x0d\x84\x04\x18\xe2\x60\x21\x6b\x48\x3c\xcc\xa3\xc7\xf0\x7a\xc7\xf5\x3e\x0b\x32\x98\xea\x72\x38\xa9\xde\x29\xa0\x65\xb3\xa7\x7c\x0c\xfb\x71\xd6\xe3\x86\x7a\x18\x8b\xdf\xda\x77\xf8\x7d\x5d\x2e\x92\xf4\xd3\xb9\xa8\xc4\x49\xf8\xb5\x5a\x48\xe2\x71\xeb\xfd\x80\x4a\xe8\x5b\xbc\xaa\xe8\xca\x13\x2d\x79\xa2\x25\xcf\x05\x21\xb7\xd0\x85\x2d\x4a\xc7\xac\xe3\x42\x47\x50\xc5\x97\xfd\x10\x96\x9b\x34\xa8\x3b\xd0\xe5\x05\x75\x8b\x82\x02\xc8\xe4\xfa\xdb\xd0\xcc\x3b\xa9\x70\x85\x8a\x6d\x97\x9d\xe9\x38\xd6\x9b\xed\x3e\x4e\x30\x0d\x90\x84\xb8\x85\x4c\xdd\xfd\x4d\x69\x0c\xf0\x84\x0c\xa6\x22\x0b\x49\x8e\x73\x53\x3d\x6d\x3f\x7b\xdc\x1f\x10\x92\x38\xb3\x6d\xbf\x3b\xde\xf4\x55\x54\xf0\x82\xdc\x45\x8a\x40\xf1\x6c\x1d\x03\xd1\x8b\x42\x70\x53\xc8\x68\xbb\x94\xac\x09\x5a\x57\xdd\x0a\x13\xb7\x50\xb3\xc0\x4f\xaa\x98\x24\xea\x45\x92\x55\x66\xae\xe7\x6d\xca\x07\xe1\xf9\x5e\x17\x98\x09\x3c\x5c\x2e\x34\x04\xe5\xb9\x01\x83\x50\xf2\x49\x16\x34\xaa\x2a\x24\x72\xa6\xa4\x8c\x7e\xe2\x46\x4b\xdc\x6b\xda\x0f\x0c\x04\x84\xba\x40\x10\xa9\xc8\x12\x8a\x3d\x29\x40\x95\xc4\xd5\xb1\x2c\xe8\x98\x60\x3f\x69\x5e\xf5\x04\x12\x09\x04\x2e\xbb\x24\x5f\x9b\xce\x46\x4a\x50\x6a\x69\x10\xfd\x80\x83\x2e\xf3\x38\x41\x21\xbf\x85\xea\x9c\x09\xc1\x5f\xa4\x49\xaf\xc6\x4f\x8f\xd7\x1f\x0d\x75\x16\x10\xa6\x88\xae\x28\x0c\x82\x02\xda\x14\x66\x41\xf1\x5e\x1a\xd0\xd7\x40\xbc\x42\xa9\x40\x94\x4f\x12\xbb\x93\xb8\xc5\x12\x77\x59\x36\xce\x07\x1c\x6e\xda\x0f\x1d\xcb\xf1\x05\xed\x4a\x2c\x48\x23\x11\x69\x4a\x2d\x35\x79\xdd\x70\xaf\xa9\xf5\x31\x05\xd8\xd4\x39\x1f\x24\x2b\x49\x6f\x31\xee\xb5\x0d\xfc\xa4\xd2\x16\xc4\x3f\x92\x27\x6d\x03\x48\x51\x4d\xe2\x0a\x98\x15\xec\x71\xfa\x3d\x08\x5d\x2a\xdf\x4c\xf0\x5d\xaa\xe6\x0c\xb5\xbb\x27\x05\xee\x26\x00\x9e\xa8\x2b\x26\x97\x3f\x25\x2f\x2f\x57\x27\x73\xa1\xcb\xf1\x0f\xb4\x37\xf2\xa7\x24\x8d\x74\x0e\xf1\x2b\x43\x35\x20\x8a\x84\xe7\x58\xd1\x09\xd0\x1b\xe2\x66\xce\xa6\x24\x25\xfd\x8d\xea\x16\x82\xa5\xe4\xd8\x45\xc5\x19\x01\xfc\x24\x2a\xc5\xf5\x3f\x7f\x6a\x3b\x3b\xf5\x2e\xf5\x51\x29\xf8\xeb\x14\xf8\xa4\x58\x3c\x8c\xc4\xc3\x13\xbe\x44\x55\xde\xb8\xd0\xc3\xd7\x00\x16\x65\xe8\x73\xf9\x63\x32\x74\x5f\xe0\x2a\x7a\x4f\x34\x1c\x17\x05\xc9\x6d\x44\x10\x9d\xd0\xc6\x80\x56\xfa\xc6\x6d\x80\x2a\xbd\x82\x44\x55\x49\x96\x78\xb5\x9c\xe7\x19\xea\x3e\x40\x2e\x2d\xe7\x14\xb8\x48\x17\xc5\xba\xfc\x76\x4a\x6b\xa4\xcb\x74\x3f\x9c\x57\x94\x2b\xd0\xb6\x6b\x17\x15\xdb\xa4\xff\x24\x8b\x62\x16\xa5\x7f\x0a\x08\xdc\x6e\xc9\x51\x00\xa9\x8c\x30\x6f\xe1\x34\x5e\x44\x75\xb8\x78\xf5\xc2\x11\xb7\xd0\x63\xae\x69\x80\xf0\xf8\x48\xf6\x13\xfb\x62\xdd\x25\x50\x65\x6f\x00\x2f\x89\x31\x36\x5a\xfe\xcd\xfa\x42\xd5\x20\xed\x81\x5a\xe6\x48\x64\x57\xfb\xb9\x7c\xc6\x03\x96\x22\x52\x78\x86\xbd\x50\xc8\x10\x03\x9b\xf8\x8c\x8d\xc0\x6c\x13\xbd\xb1\x9f\xe1\x33\x10\x18\xd9\xd5\x26\x13\xc2\xfe\x26\xc8\x6e\xef\xf1\xb7\x9c\x10\x1f\x4a\x98\xe8\x13\xa2\x31\x02\xe9\x5d\x8c\x73\x10\x13\x15\x8d\xac\x2b\x70\xde\x06\x26\x42\xb8\x6c\x21\xee\xfd\x80\xb0\x0f\x32\x92\x52\x10\x46\x7b\x50\x80\x42\xd6\x12\x75\x97\x38\x39\x33\x5c\x95\x16\xf2\x15\x9d\x78\xb2\x7a\x52\xbe\x5c\xfb\xf9\x14\x09\xa8\xa3\xae\x01\xec\x05\x3d\x53\xac\xbc\x54\x4a\x0a\x97\x2b\x29\x4c\x87\x02\x1a\x17\xeb\x63\xb1\x62\xd6\x35\xf0\x84\x8e\x25\xb6\xbb\x50\xa4\x16\xda\xf9\x72\xad\x46\x30\x4c\x41\xf4\x92\x92\x34\x8a\x88\xea\xc2\x8c\x28\x5c\xb5\x45\x2c\x78\x5d\x9f\x13\xe1\x25\xb2\x8b\x82\x86\x27\x51\xb1\xf6\x13\x99\x8d\x73\x1e\x0a\xaa\x11\xbc\xf5\x00\x0c\x31\x92\x1a\x73\xaa\x21\xa4\x9b\x5e\xd4\x50\xd4\xcd\xb3\x6d\xa8\xb5\x1e\x1c\xfb\x18\x5b\x4d\x34\x52\x8f\xcf\x86\x4c\x60\xa0\x51\x1f\xe2\x46\x62\xf4\x99\x7f\xf4\xc8\x41\x8c\x38\xff\xa1\x9f\x9d\x1b\x9e\x84\x91\xda\x06\x43\xf2\x2d\x32\x5d\x0c\x8a\xe3\x63\xda\x92\x3e\x30\x9a\xf1\x84\xe2\xbc\x3d\x94\x73\x2a\xf6\x1c\x32\xeb\x5e\x4a\xcf\x71\x0c\xf1\x8e\x64\xd2\x18\x7a\xda\x10\x63\x34\x16\x2e\x02\x72\x0f\xae\xf2\x79\xa0\xca\x77\x7c\x4e\xa2\xcc\x39\x06\xf3\x85\xd2\x76\x6a\x2d\xa1\xa4\x85\xa2\x4b\x63\xad\x64\x1b\x84\x86\x00\xf5\x12\xcb\x7e\x89\x35\xb9\xc4\x37\x5f\xc4\xa2\x97\x2a\x9c\x17\x69\xeb\x05\x2f\xdd\x04\xfb\x21\x52\xbd\x88\x32\x2e\xc2\x90\x8b\x2b\xe6\x82\xac\x2e\xf1\x9d\x97\x68\xaa\x4b\x0c\xd9\x45\xf2\x7a\x11\xca\x3e\x44\x01\x6f\x21\x74\x5c\x2e\x04\x43\x4c\x03\xbf\xee\x81\xde\x1f\x12\x80\xe7\x72\x82\xcb\x55\x7d\x75\x6f\x3f\x05\x9d\xf8\x15\xa4\x9f\x71\xcd\x7c\xca\xb1\x06\xe9\x97\x82\xfa\x67\xc2\x72\x90\x82\x10\x7e\xc4\xa3\x3c\x24\x57\x14\xe8\x8e\x07\xe9\xfb\x8e\x91\xde\x73\xeb\xea\xf1\xc6\x7e\xa0\xbb\x0b\xa1\x78\x7d\x3c\x42\x4a\x4a\x4e\x42\x44\x91\x13\x22\x17\x0e\xed\x15\x8e\x96\x20\x0f\x2e\xd1\x87\x54\x2f\x50\x8b\x63\x1f\x17\xfd\xb6\xbb\x1e\x09\x80\xf3\xe3\x12\x19\x40\x12\xda\x5c\xce\xc0\x0a\xbe\x5a\xe0\xa8\x85\x03\x16\x17\x5c\xe2\xa0\x4b\x9c\x72\x09\x9d\xa0\xd6\x47\xe2\xba\xe7\x5a\x97\x6d\x48\x94\x75\x39\xe7\x3d\xde\xaf\x33\xb8\x40\xe6\x45\xa4\x80\xab\x73\xe1\xcc\x5c\x17\x81\x25\x28\x0b\x47\xdc\xb7\x1e\x4c\xba\x7e\x25\x34\xe7\xc6\x29\xbd\x89\xf8\xc7\x1d\xa7\x6d\xb2\xbd\x82\xf7\x48\xc6\xbc\x89\x0d\xdd\xac\x5f\x1b\x07\xfb\x1e\x68\x4b\x4a\x2c\x6e\xd6\x94\xdd\x1c\x43\x61\x8c\x8d\x8e\x70\x3b\xde\x74\x43\x22\x52\x6d\x33\x58\x3b\xc2\x89\xf2\x59\x59\xc2\x49\xdf\x07\xca\x70\x28\x47\x89\xbb\x9b\x99\x30\x83\x24\xe4\xc1\xb5\x62\x0e\x84\x22\x0a\x4e\x1c\xb3\xe1\x94\xb2\xcf\xe8\x0e\x6a\x10\x79\x45\x6e\x3d\x07\xfd\x0c\xf6\xb0\x8d\xe6\x12\x69\x46\x6e\x97\x9a\x84\x86\xdc\x38\xf9\x03\x67\x38\x64\x52\x12\x11\x9b\x0f\x97\xfe\x25\x82\xe4\x7e\xeb\x77\x83\xf1\x40\x95\xd0\x5d\xc9\x73\x4e\x5f\xfd\x5e\xd7\x11\xa6\x04\x29\xe7\x87\x2a\x4b\xc8\xad\xbc\x8f\x62\xee\x60\x57\xde\x63\x81\xa3\x0a\xcc\x40\x05\xeb\x2c\x12\x21\x57\x9b\x32\xc4\xe5\x0e\xd2\xae\xc6\xcd\x4e\xcf\x21\x0a\x5c\x7b\x40\x7a\x44\xa5\xd0\xaf\x8a\x5e\x44\x3a\xff\xec\x95\xa0\x3e\xe2\x74\xc1\x5a\x8d\x8c\xa5\xc1\x5a\xed\x62\x66\x08\x58\x9a\x62\x98\x0d\x2a\x6b\xc4\x0e\x1d\x7c\x0b\x4c\xd5\x95\x3a\x1b\x72\x80\x26\x26\xa6\xe9\xdb\x4d\x6c\x4d\x53\xa6\x00\x67\x54\x36\x91\x34\x0d\x11\xde\x38\xae\x9b\xc4\xbd\x8d\x95\xd1\x44\xe4\x34\x04\x6a\x53\x9f\xa0\x8b\xfb\x41\x18\x82\x63\x2a\x9d\x00\xbf\x8b\x3b\x74\x16\x61\xad\xb9\x6a\x41\x89\x65\x4c\x08\x7a\x2c\xb0\x22\x72\x51\xee\x7f\x56\x82\x33\x41\x89\xfc\xba\x49\x4a\xb3\x10\x67\x43\x6d\x97\x1c\x28\xe4\x49\xce\x90\xa4\xea\x46\xcf\x3a\x48\x2d\x06\x72\x91\xda\xe2\x89\x94\x5d\xed\x01\x2b\x0e\xdb\xd4\x84\x45\x1a\x40\xfe\x8c\x21\x32\x69\xb8\xcf\x79\x05\x7a\xe4\xbb\x44\x29\x91\x47\x5d\xdb\x1c\x53\x6c\x73\x75\xe2\x96\xe6\xf1\x5b\x10\x47\x0c\x72\x89\x79\x5c\xfd\x19\x5b\x52\xbf\x81\x71\x71\x78\x17\x27\x20\x3e\xc1\xbd\x87\xdf\x75\x98\x5b\x58\x0b\xb4\x1d\xb4\x60\x4e\x84\x06\xae\x00\x81\x40\xe3\xf0\x6c\x0f\x92\xd8\x83\x84\xfb\x94\xcb\xde\x50\x14\x84\xe8\x28\x97\x5d\x3d\xbc\x53\xca\x66\xe9\xbb\x03\xf2\x04\x2b\x36\x18\xb2\x8c\x3c\xc1\x8a\x14\x67\x02\x51\x93\xe6\x54\x2d\xa4\xa9\x9e\xc3\x25\xba\xeb\x8e\x8f\x24\x1a\x9b\xfc\xda\x17\x69\xd2\x45\x80\x73\x11\x8c\x5c\x7e\xef\x7d\xce\x80\xae\x11\x77\x79\x86\x97\xa7\xf7\x70\xc2\xbc\xdd\x60\x4e\x0a\x23\x92\x31\xe8\x41\xfa\x3e\x24\x21\x8f\xec\x41\x4f\xd7\x2a\x2c\xeb\x5a\x4d\xf1\xca\x43\xc5\x10\xd9\xe9\xb5\xb0\xd0\xd7\x41\x78\x7b\x10\xea\xe2\x20\x5a\x30\x27\xce\xf8\xbe\xc6\xe8\x14\x61\x2f\x22\x38\x0a\x53\xc6\x3a\x26\x6e\xaf\xcf\xe0\x64\xa8\x88\x64\x8d\x45\x89\x66\xde\x46\x9e\x10\x9c\xe5\x7a\x28\x64\xbb\x71\xe5\x09\x42\x72\x02\xa1\x1c\x62\x25\x6d\xb3\x1f\x7c\x88\xd8\x2d\x58\xef\x82\x15\x10\xcd\xba\xb6\x49\x84\x8f\xd0\x00\x61\x1d\x92\xa8\x40\xc5\x1e\xe4\x21\x56\x0b\x6e\xa4\xf6\x3a\x38\x27\xc0\xd2\x81\x48\x13\x87\x8c\x3e\x65\x0f\xe8\x74\x9c\x6f\x0d\xd1\xc1\xfd\xca\x0d\x20\x50\xc9\xfa\xe3\xda\x98\x48\xea\xc8\x82\x1b\xd4\xa3\x56\x0b\xe6\xa4\x56\x98\x8b\x93\x10\x89\x48\x56\x98\x48\xc8\xe6\x44\xfe\xec\x72\x32\xa8\xd2\xd5\x36\x2d\x24\x6b\xf8\x53\x88\x55\xe2\x95\x91\x3c\x24\xd2\x92\x24\x0a\x3c\x71\x08\x27\x6e\xba\xc2\xc9\x59\xe4\x4a\x29\x1c\x95\x85\xd3\xb2\xb6\xe5\x00\xb8\xfd\xc3\xc9\xf6\x1c\x52\x64\xea\x14\x3a\x13\x27\x36\x96\xaf\xd0\xa6\xb7\xc1\xae\x9c\x01\x7a\xbb\x20\xa1\x0b\x52\x9c\xa2\x87\x41\x0c\x5f\x94\x5d\xd9\xc8\x28\x1a\xe1\x6a\x23\x84\x6c\x24\x90\x8d\x63\x9f\x4a\x25\xd1\xb0\x6d\x7d\x8c\x2a\x21\x38\x11\x11\x34\x96\x4b\xd3\xbb\x1a\x8e\xa8\x8d\x09\x41\x41\x83\x88\x78\x88\x7b\x73\xc9\xfb\x41\x42\x32\x44\x03\x53\xf7\x39\x88\x14\x14\xaa\x64\x0f\xa1\x31\x64\x2c\x38\xc4\x64\x1f\x24\xd8\x87\x00\xae\xb3\x8c\x15\xc7\xa9\xcd\xf9\x94\x30\x16\xdc\xbc\x08\x94\xb4\x9f\x63\x40\x89\xdf\x62\x5c\xb0\x8b\xf4\xc9\xe3\x6a\x0e\xb8\x5b\xa9\x9e\x1b\x17\xa7\xeb\x45\x38\x79\x91\xd6\x5e\x22\xd5\x6e\x81\x18\x11\x17\x5c\xc4\x14\x17\x09\xc0\x25\x2c\xeb\x22\xa8\xbc\x44\x01\x92\x83\x41\xdb\x20\x49\x9f\x13\x14\xc7\xb5\x2e\x52\x02\xa2\x18\x83\x4c\xc6\xfa\x2e\xe7\x6c\x5f\x9d\xea\x50\x88\x3d\x11\x3e\x5c\x62\xe2\x2f\xc2\x5e\x2a\xd3\x04\x79\x35\xb5\x0d\xaa\x24\xfe\x15\xd9\xf5\xe3\x97\x3e\xe2\x08\x1f\xcf\xe1\xe1\x8e\x26\x2d\x67\x3c\xfa\xc9\xfb\xa9\xcb\x4e\x44\x2c\xc8\x13\xc9\xc6\x3b\x60\xc8\xfb\xc5\x8d\x97\xb6\xc9\x67\xef\x1a\xe9\x42\x50\x81\x54\x13\x4b\x9f\x6c\x61\x6a\xbd\x87\xa0\x18\x5c\xc4\xac\x95\x88\xa4\x12\x31\x54\x22\x8c\x12\x7e\x53\xfb\xcc\xd7\xc1\x01\xe2\x2e\x5b\xe0\x87\x05\x42\x58\x20\x87\x0d\xab\x80\x85\x9b\xd8\xb6\x49\x11\xcd\x24\x43\x58\x12\xdd\xa8\x96\x6d\x17\x68\x40\xb0\xe9\x3a\xe6\x03\xd7\xe7\x2a\xe7\xcc\xcf\x1b\xbb\x7e\x4f\x79\x9b\x2a\xe4\xf0\x84\x03\x9b\x47\x35\xe8\x8d\x9c\x70\x7f\x93\x3a\xe3\xec\x7a\x88\x2e\x37\xd1\x2c\x30\x93\xc1\x0c\x1c\xd4\x42\x8e\x4d\x64\x0b\x65\xae\x03\xf4\x1b\xdb\x5c\xdf\x81\xc1\xa3\x32\x00\x61\x3b\x41\x20\x4f\x6c\x70\xdd\xbe\x6e\x39\x33\x4e\xe3\x30\x13\xf8\x38\x27\x51\x34\x63\xae\x2f\x71\x20\x13\xef\xab\x31\x98\xc4\x3e\x0a\x9a\x11\xf5\x0b\xff\x06\xaf\x98\xd4\xab\xc7\xd5\xa3\x16\xec\x37\xec\x01\xbf\xc1\x4b\x30\x6b\x65\x12\x20\x92\xb0\x2b\x09\x2f\x94\x54\x6d\x4a\xf8\xd5\x84\x13\x4b\x2a\xb6\x26\xfc\x6d\x3e\x9c\xc9\xac\xcb\xae\x12\x93\x70\x59\xf9\x5c\xfb\x16\x86\xf0\xc1\xef\x3d\xa2\x68\x96\xcb\x86\xa7\xf7\x50\x24\x1c\x8c\x47\x01\x2d\x72\x18\x64\x21\xc9\x24\x3f\x41\x12\xc0\x98\xe4\x30\xd0\x1e\x50\x1c\xe7\xe1\x4d\x91\xcf\x20\x8b\x55\xb5\x61\x92\x9b\xd2\x5c\x8d\x4b\xbc\x71\x92\x37\x8e\xfa\x46\x9c\xdb\xb8\xeb\xc9\x22\xa8\xe3\x41\x6b\x94\x9b\x42\xb0\xd9\x38\xa8\x1b\x69\x61\xd3\x67\x9a\xe8\x20\x64\x41\xda\x0f\x66\xe3\xbb\x65\xae\xef\x71\x3c\xcc\x1e\x62\xcf\x2e\x33\x7b\xce\xf5\xa2\xd5\xbc\xa9\x47\xdf\xfc\xd2\x41\x26\x80\x64\x5e\xdb\x8b\xbc\x2f\x84\x04\xb1\x07\x46\x7a\x58\xa3\x67\xc2\x2d\x68\x0a\x1e\x8f\xbe\x8a\x24\x27\xa9\x2b\x98\x83\x4b\x7c\x18\x77\xd8\xc2\xda\x76\x0b\xa6\x1a\x7f\x0a\xd6\x6a\xc2\x80\xca\x6d\xa9\xc5\x21\x0c\xe3\x7d\xe0\xc0\x8f\x8b\x1e\x06\x62\x4c\x7e\xd7\x41\x40\x7d\x88\xaa\x3a\x88\x29\x08\x42\xd4\xa7\xde\x43\xc5\x71\xd0\x54\x97\x8f\xa4\xfa\xb8\x46\xfd\x85\x57\xc4\x3a\x56\x9b\xec\x39\xb4\xae\x11\x0e\x3a\xc2\xf9\x8c\x05\x47\x75\x4d\xe1\x22\xdc\xc8\xdb\xb5\x86\xc0\x42\xae\x14\x0e\xbf\x87\xe5\x72\x41\x86\x97\xfe\xf3\x16\x32\x4f\x44\xa6\x0f\xaf\xc1\x63\xbc\xbc\xed\x10\xa5\x03\xf2\xa1\xfe\x37\xdc\xdd\x83\xcf\x7c\xc4\xb3\xbd\x03\x22\x3a\xae\xda\x73\x71\x4d\xdf\x50\x7b\x5c\x01\x5d\xfb\xcf\x80\x88\x08\x0f\xb2\x50\xf4\x8b\x8e\x88\x02\x27\xe7\xdc\x22\xec\x66\xe1\x13\x59\x88\xe0\x16\x79\xe9\xd6\x71\xa8\x10\x41\x3c\xc4\x9a\x6f\x1c\x9e\x1b\x99\xd2\xc6\x11\xba\x59\x3d\xf1\x38\x08\x0b\x81\x73\x88\x5d\x66\xdd\x09\x56\x34\x84\x24\xda\x06\xf3\x90\x61\x85\x80\x9b\x58\x84\xe3\x20\x7b\x0c\x64\x4d\xb1\x8d\x79\x70\x0e\xb3\xde\x21\x51\x11\x92\x71\x4d\x2f\x18\x33\x72\xab\x10\x48\x11\xac\xd4\xe1\x62\xe5\xc4\x6d\x87\xab\xff\xe2\x77\x4b\xc2\x02\x32\x9c\x6d\x05\x97\x2f\x2e\x68\xf8\x7f\xb5\x20\x93\x74\x6b\xac\x02\x4a\x71\xe0\x33\x01\x3d\x20\x28\xaa\x5f\x47\xf2\x1c\x6a\x3b\xf5\x2f\x3c\x18\xee\xd3\x0a\x3b\x7e\x09\x28\x26\x5b\x83\x4b\x81\x17\xd7\xad\x70\x2e\x50\x33\x6c\x30\x66\xb0\x16\xd5\x38\x7b\x71\x7b\x22\xa3\x16\x1a\x31\x32\x61\x1b\x17\xee\xe3\x5a\xbe\x2e\x62\xba\xc2\x21\x5f\xf0\x90\x05\xef\x44\x5d\x9c\xe8\xc5\x39\xe1\x94\x1a\x46\xa5\xc8\x40\x53\x64\xaf\x29\xd8\xce\x5e\xce\x1c\x46\xae\x2f\x02\x20\x1a\x84\xdc\x20\xde\xc6\xe1\xdc\xf4\x93\xa6\x87\x34\x3d\xa1\x09\xea\x6a\x24\x90\x8d\xbf\xac\xf1\x91\x35\x41\x5a\x4d\x50\x57\x23\x78\x6c\x04\x92\x8d\xe0\xae\xf1\xb2\x35\x72\xb9\x46\x94\xd7\x84\x8d\x37\xe2\xca\x86\xe3\xea\x87\x50\xd1\xbc\x99\x0b\x95\x23\xad\x1d\xb2\xb3\x0c\x19\x2f\x0e\x59\x52\xcf\x76\x99\x53\x72\x99\x52\xf1\xf5\x90\xd1\xf7\xf0\xfc\xcf\x76\xe5\x6f\x30\x15\x48\xf2\x20\x98\x3d\x60\x75\x6c\x2b\xed\xe1\xc8\xcd\x77\xc1\x48\x20\x93\x43\x18\xd6\x41\x16\x7d\xda\x81\x32\x64\xf0\x22\xaf\xc9\x25\x80\x0f\x3b\x28\x90\x6c\x07\xe2\x91\x40\xac\x1d\x24\xf7\x0f\xd8\x78\xed\xe1\x53\x70\x14\x18\xf8\xe2\x0c\x87\xbd\xd7\x1e\x5a\x38\x34\x12\x4e\xdf\x36\x23\x77\xc0\x3f\xe1\x33\x07\x2d\xd8\x06\x6e\x0a\x91\xdd\x43\x0e\xfc\xc8\x69\xfc\xc0\xe7\x8f\xac\x54\x8f\x3b\x79\xff\x37\x77\x77\x8e\x2d\x39\xac\x23\x01\x74\x43\xcf\x10\x01\x8e\x0b\x2a\xef\x9f\xf6\x7a\xff\x7d\x70\x91\x5e\xef\xe0\x3b\x2c\x16\x53\x52\xe6\x93\x28\x12\x43\x20\xc2\xb9\x0f\x70\xe0\xb5\x70\xcd\xed\x91\x60\xdb\x80\xa4\x7d\x2c\x10\x2b\x24\xb6\xd4\xc4\x87\x5a\x7d\x0a\x70\xca\x53\x42\xd9\x4a\x74\x81\xf0\x6e\x3e\x57\x45\x2a\xca\x56\x78\xc4\x60\xe0\xd5\x57\x92\xf2\x75\xbf\x2c\x1c\x31\x9f\x4f\x06\xe1\x23\xd8\xff\xf1\xec\x3e\x79\x96\x8f\x8d\x81\x55\xb8\xc6\xd9\x36\xaf\xd5\xa5\xc4\x9a\x9e\x22\x92\x27\xe2\xa4\xc8\x57\x06\x44\x89\x61\xb5\x6c\x98\x16\x63\x13\xb3\x52\x68\x3c\xb6\x4c\x25\xc0\xd7\xd8\xb7\xa3\x52\x6d\x17\x19\x77\x65\x3b\x57\x10\x0e\xc2\x53\x98\xe1\xaf\xc6\x56\x58\xd6\x88\x4f\xb3\x8f\x31\xa2\x00\x85\x75\x17\x84\x5a\x43\xbe\x2c\x42\xc1\xca\x60\x8d\xb0\x00\xc3\x5d\x0a\x77\x32\xec\x6b\xc1\xca\xb2\x3a\x95\xe9\xc1\x86\x91\xe3\x93\xff\x4d\x2b\x79\xb2\x88\x92\x45\x94\x6c\xa7\x64\x6b\x4d\xe0\x38\x25\x7a\xd5\x67\x5d\x24\x8b\x02\x8f\xe6\xa7\x3a\x17\x5c\x6e\xb2\x04\x26\x09\x6b\x5c\x4d\x35\x52\x36\x86\x98\x0f\x26\xa7\x9c\x80\x7b\x13\xc8\x71\xe2\xdf\x45\x71\x50\x2d\x6b\x64\xe9\x8b\x23\x89\xad\xcd\xbd\xdb\x0e\x79\x5a\xf6\x49\x3a\x66\xaa\x0a\x06\x6a\x7b\x9d\x4f\x14\xe1\x31\x97\x68\xdd\x24\x7d\x9b\x6a\xc5\x9a\xd8\x0c\xb2\x93\x4b\xc6\x6a\xc9\x5d\xae\xd5\x79\x46\x80\xb5\xa5\x8a\x58\xe9\x09\x68\x73\x12\xe7\xac\xb6\xcf\xd5\xaf\xd9\x05\x6c\x52\xc7\xa7\x71\x7a\xdf\x32\x95\x4b\x99\xc8\xf3\x2d\x72\x55\xab\x63\x2f\xac\x23\xc0\xe1\xe4\x6d\x55\xdf\xb8\xd2\xe4\xaf\xa3\x49\x5b\x7f\x77\xdf\x31\xa7\xcf\x92\x31\x94\x43\x64\x3d\xee\x50\x3e\x22\x03\x0b\x96\x95\xd8\x92\xaa\x15\x41\x72\x05\x59\xbc\x2d\xa3\xb7\xe5\xfb\x88\xe5\xd7\x76\xc1\xe6\x11\x8f\xda\xe2\x3f\x6c\xf2\xed\x0e\x6f\xb1\x91\x8d\xab\x75\xbb\xcf\x7b\xf7\xf1\x1d\x11\x52\x7a\x02\x2a\xb8\x9f\xef\xad\x75\x32\x37\x4b\xf5\xc0\x0f\x1c\x51\x91\x33\xba\x30\x7a\xb3\x76\xd8\x45\x21\xce\xe3\x97\x1f\x33\x1c\xcd\x42\x1e\xd1\xc2\xa3\x20\xe6\xb0\x49\x8e\xa8\x0e\xf6\xf2\xfa\x94\x15\xe4\x0a\x4a\x67\x8e\xe2\x21\x05\x82\x75\xbc\xbe\x72\x6a\x59\xd7\x2b\x12\x75\x81\x25\xaf\x59\x74\x37\xc6\x1a\xef\xe6\x55\x70\x86\xf5\xb0\x5a\x23\x5d\x72\x4d\xac\xf5\x35\x98\x4e\xf1\x8a\x99\xf3\xbc\x05\x6f\x74\x99\xcb\x15\xf3\x51\xe0\x22\x67\x8a\xeb\x28\x9f\xf8\xf3\x93\xb3\x7e\xd9\xb6\xd0\x35\xe2\x5c\x77\x9e\xee\x4c\x76\xe9\xde\xf3\x7b\xde\x21\xe5\xa8\x3c\x0e\x8a\x23\x9f\x5f\x22\x23\x30\xbf\xd1\x42\xa3\x5f\xf7\x1b\xbe\x47\x75\x31\x69\xce\x76\x5c\xe5\xb1\x9d\x3a\x0a\xd4\x92\x08\xca\xa9\x95\x05\x28\xad\x0b\xc5\x76\xf1\xe1\x68\xb1\xee\x95\xa5\xc4\x46\xca\x6e\xe5\x22\xe5\xfb\xac\xe1\x61\x3f\x0a\x9f\x8a\x8a\x47\xa0\xf6\x0f\xc0\xea\x10\x53\x0a\xe0\xeb\xb0\x4f\x89\x96\x57\xdb\x7d\x36\x92\x28\x93\x1d\x3c\xec\xda\x80\xb7\xd5\x07\x8e\x6b\x46\x7d\x80\x38\x99\x9d\xcc\x66\x92\x43\x14\x63\x6f\x4a\x9c\xb2\x93\xda\x21\x84\x40\xd9\x0c\x38\xc9\xdb\x1a\xc1\x43\xae\x10\x73\x89\x68\x2d\x31\xab\xa5\x74\x43\x24\xb9\xec\x07\x3b\xbe\x02\x82\x03\xba\xa5\x68\x75\xc9\xa7\x2c\xcc\x9a\x4b\x94\x69\xf1\xb5\x17\x30\xfe\x52\x00\xb1\x6e\x5b\x1d\x8a\x7a\x71\x5f\x2d\x6c\x7c\x4b\x8e\x66\x3d\xe0\x7a\xf9\xa6\x0d\x18\xbe\xa3\x59\x45\x15\xc8\x2a\x0f\xda\xe2\x60\x4a\xaf\xaa\x65\x0f\x40\x43\xe1\x3a\x3d\x98\xf6\x0f\x6c\x18\xb6\xc8\x38\x50\x49\x47\x6e\xf4\xc8\xa5\x1e\xc0\x49\xf0\xd2\xba\x79\xcf\x78\x8f\xa0\x2b\xc1\x1e\xba\x9a\xd5\x1f\x06\x49\x4e\x56\x3e\x3d\x2e\x40\xdc\x45\x7b\x72\x21\xb2\xae\x6c\xef\x5d\xad\x72\x0d\x4f\x05\xe0\x29\x46\x1a\x72\xee\xf5\xa9\x9d\x1d\x7e\x49\x41\xd5\x53\xfe\xf2\x3c\xdf\xe7\x7e\x2a\xf3\xaa\x11\xad\x92\x56\xa0\xfe\xe7\x59\xcb\xbc\x57\xdb\xc7\x18\x0f\x91\x0d\x3a\xc2\x4a\x97\x5e\x0b\xec\xc1\xb0\x3d\xf8\xb4\xa7\x34\xea\x89\x77\x3d\x79\xc9\xf7\x64\x88\xe4\x7d\x3e\x19\x9f\x2f\xe4\xa7\x44\x80\x3f\xf1\xe4\x8f\x57\xfe\xc9\xcb\x7c\x3c\xd9\xcf\x1e\xf7\xf1\xd4\x3e\xd1\xef\xaf\xe3\x24\x6f\xa1\xef\x98\xf2\x44\xca\x40\x79\xd9\x03\x4e\x63\xf0\x8f\x46\xf6\x3e\x2e\xca\xa1\x1c\x73\xfc\xa4\x55\xeb\x1d\x1f\xc0\xe3\xa3\x19\xe2\x0f\x48\x3b\xa5\xdd\x71\x5a\x7b\x90\x84\xea\xeb\x9d\x17\xd8\x3c\x3a\x92\x00\xb4\x0e\x35\x21\xf3\x5e\x7d\x9f\xc2\x1d\xc5\xd6\x76\x84\xc1\xde\x6d\x1f\xa4\x59\x5c\xad\xd2\x4f\x98\xa2\xdb\xbc\xd7\x1d\x61\x78\xdd\x86\xe8\x81\x18\x82\x98\x40\x36\x8b\x47\xad\x93\x13\x26\x64\xca\x37\x29\x63\xca\x29\x22\x31\x87\x0c\x0e\xa2\x95\x29\xdb\x35\x15\x0d\x4c\x11\x09\xba\xf6\xb5\x17\x93\x34\x14\x0d\xf0\xd7\x4d\x60\xf9\x09\xd9\x35\x1b\xb2\x0d\x25\x25\x0f\x9e\x58\x0c\x53\x91\x50\xe2\xfa\xcd\xc5\xea\xc0\xf2\x9b\x80\x96\x09\x50\x99\x00\x95\x09\x80\x99\x4b\x54\x61\x59\xe1\x49\x2b\x27\x01\xf3\x04\xc6\xac\x76\x69\x8d\x88\x06\xc8\x39\x02\x72\x26\x9d\xfc\xfa\x14\xb7\x6b\xef\xb3\x32\x35\xe0\xea\xfb\xc3\xde\xaa\x00\x62\xb7\x00\xe3\x84\xa8\xf1\x64\xf7\x04\x33\x47\x1d\xb3\xb7\xfd\x11\xb8\x7e\xb3\x2e\xf6\xee\x72\x4c\x7b\xf1\xe9\xdd\xcd\x7e\xda\xf1\x04\x11\x95\x2d\xef\x43\xfc\xb8\x5a\x60\xf0\x7a\x82\xc7\x73\xa7\x6b\x90\xca\xd3\xf3\x98\x9f\x8a\xd7\x13\x71\x50\x7d\xda\xe3\xf6\xb5\xde\xb9\x44\x00\xf6\x32\xd2\xfb\x1d\x5a\x11\xfb\x94\xf7\xba\x46\x8c\x2f\xfb\x9a\x7c\x84\xbc\xdb\x95\x83\xbb\x32\x6b\x77\xf3\xfa\x77\xf7\x4f\xf7\xaf\xfd\x4e\xa6\x43\x59\xe7\xae\xbb\x47\x40\xae\xda\xe6\x66\xab\xd6\xec\xba\xaf\xd1\x35\xae\xf9\x1c\xf9\x7c\x8b\xb9\x7d\xed\xf8\x97\x0d\xf3\x58\x86\x4f\xf6\xf9\x01\xe3\x3f\x99\xe5\x87\x93\xe5\xc9\x41\x3f\x77\xf8\xe5\xaf\xdf\xd1\x00\xd9\x90\x61\xef\x3b\x76\x43\xb1\x82\x03\xc3\x73\xa3\x76\xb7\x00\x4e\x2f\xcb\x76\x7e\x91\x9f\x36\x8c\xeb\x0f\xb1\x82\x4d\x18\x92\x6a\xe9\x9d\x8b\x56\xad\xfd\xae\xe3\x06\x30\x39\x3c\xbe\xde\x13\x47\x6b\x08\x0c\x7c\xa8\x88\xaa\x44\x08\xab\x6f\xcf\xc2\xed\xcd\x47\x0e\x31\x84\x50\x6c\x17\xad\xf4\x0c\x45\x99\x74\x31\x12\x0a\x25\xb3\xd5\x00\xe4\x14\x50\x42\x29\xec\x08\x12\xdf\x21\xaa\x56\xed\xd1\xb6\xf0\x0e\xe2\x0a\xbe\x6d\x97\xc7\xc1\x1b\xc8\x66\x56\xbf\xf6\x17\x51\x88\x25\x72\xbe\xac\xae\x0b\x12\x66\x29\xe9\x5b\x62\xbf\x0b\x80\x7a\x5d\xd4\x11\xb7\x3f\xcd\x6e\x8d\x2b\x5c\x03\xb8\x5e\xb7\x0b\xdd\x10\x4b\x34\x7e\x03\xf1\x97\x1c\x62\x1c\x28\x91\x83\x4f\xf4\x84\xe8\x3a\x02\xa8\xc3\x93\x3d\x18\x82\x0f\x0e\x51\x12\xc7\x75\xe4\xd1\x7e\xc6\xb7\x7d\x07\xae\x83\x57\x6b\xc7\x39\xee\x00\xce\xbf\xb8\xf0\x54\x50\x5b\x71\xd1\x8a\x5c\x38\xa2\x0b\x09\x23\xfb\x56\x2d\x3f\xf4\x37\xe2\x2c\x04\x0c\xf2\x41\x17\x8d\xdb\x65\xdb\x88\x4a\xc5\xf3\x74\x20\xbb\x42\x96\xad\xfa\xf6\x17\x9a\xae\x4a\xcd\xe4\xe3\xe2\xd1\x28\x79\x68\xc7\x28\x64\x45\x4b\xd6\x53\xdb\xab\xd6\x1e\xe4\x78\xc4\x0c\x0f\x46\xfa\xdd\xde\x5f\x4e\x6b\x94\xeb\x37\xed\x01\x1f\x93\x7f\xa1\xf4\xa1\xfa\x9f\x3e\x4f\x13\x82\x82\xfd\xfc\x9d\xf6\x2e\xe1\x19\xc4\x63\x3f\x1c\x4c\xdf\x83\xb6\x7d\xcd\x40\x09\xf5\x2a\xa7\x4f\x81\x28\xc7\x14\xe5\x46\x7b\x80\x24\x26\x11\xc9\xe4\x10\x5b\x46\x48\x53\xfb\x0b\x0f\x71\xb7\xc2\xed\xd4\xd6\xb8\x6f\x19\xbe\x11\xbe\xab\xda\xda\x4d\xec\x68\x54\x38\x93\x3e\x5f\xf5\x49\xd6\x63\x98\x52\xc4\x4f\x3b\x34\x69\x68\x24\x7d\xd1\xa4\xe7\x97\xd4\xfe\x92\x1e\x69\xd2\xd3\x48\xaa\x7e\x49\x9b\x34\xe9\x6c\x24\xe9\xaa\x54\x0c\x51\x9b\x0f\xec\xab\x3d\xae\x29\x13\x68\x2f\x2b\x7a\xc8\xb8\x8d\x89\x15\xbb\xe6\x9f\x42\x7f\x55\x0b\xdd\x8a\x30\x80\x6f\x9b\x4a\x88\x88\x42\xd6\x91\xdd\xef\x08\x79\x23\x1f\x1e\xe6\xef\xda\xb9\x9c\x45\x5b\x23\x27\x7c\xf2\x44\xf9\x30\xed\x89\x13\xca\x65\x86\x98\x76\xab\x32\x8f\xdb\x67\x6d\x7d\x45\x51\xfc\x44\x3b\xec\x84\xaa\x55\x5c\x9b\x13\xed\x84\x52\x86\x1a\xb1\x03\xf2\x31\x0f\xaa\x00\x38\x5b\x05\xb5\x49\xce\x32\x69\x77\xa6\xf7\x34\xc9\x64\xd6\x38\xe4\x2a\x0a\x01\x68\x93\xc5\xda\x5f\xe2\x0f\x4b\xd6\x7e\x89\xae\x2f\xde\x0a\x0c\x58\x2a\x38\xa8\x63\xec\x65\x76\xcf\x46\xc6\xf2\x41\x36\xef\x95\xd6\x47\xd2\xfd\x48\x1a\x20\xd5\x47\x67\xb5\x7b\xa7\x5b\xda\xa3\xed\x11\xfe\xda\xe9\x96\x07\x67\x2f\xdb\xbc\xcb\xdd\x31\xed\xd7\xfb\x1a\x3f\x4e\xd9\x93\x5c\xc3\x96\x17\xd8\xf4\x3a\x8e\x88\xee\x61\xbd\x1c\x6f\xc7\x41\xa0\x75\x50\x56\x60\x9d\xaf\xbd\x29\x68\x54\x1b\x81\x23\x85\x46\x3e\x2c\x25\x2b\x43\x1e\x77\xf5\x40\x1a\x9f\x23\x8e\x7d\x44\xb0\xd9\x15\x87\x65\x05\xcd\x55\xad\x3d\xce\xde\x84\x8c\x01\x36\x2c\x59\xb3\x79\x57\xcb\x5c\x8f\x16\xbb\xee\xb6\xce\xba\xae\x70\x7b\xb7\xaa\x19\xf8\x20\xab\x69\xee\xe5\x73\x7f\x9e\x77\x8d\x9d\x59\xed\xd0\xda\x77\xa0\x40\xcb\x0f\xad\x56\x99\xd4\xe5\x61\xe9\x6f\x45\x54\x7b\xf3\xb6\x76\xef\x3e\x47\xa4\x9a\xcf\x75\x5a\xd2\xad\xf7\x14\x7e\x93\x3c\xb5\x88\x74\x9c\xde\x35\xa8\x80\xc9\x44\xcb\x98\xd4\x0a\xff\xac\xd8\xbd\x92\x5b\xdb\x45\x20\xad\x45\xab\x4b\x5e\x54\x67\xac\xae\xe6\x90\x9d\xdf\xf6\x9d\x8d\x6a\xe8\xd0\x1b\x39\x7c\x8d\x03\xff\x76\x28\x87\x1c\x9a\x21\x47\x3e\xf1\xf0\x4d\x0e\x4f\xe4\x28\x95\x3e\xa2\x76\xa7\x63\x7a\xf2\xc2\x17\xad\x0e\x9b\x21\x58\x0b\x71\xe5\xe5\x09\x89\x57\x6b\x75\x45\x5d\x43\xcd\xe6\xe1\x65\x7f\x74\x69\xde\x6a\x85\x26\x2b\x30\xd4\xe5\x83\x90\x7c\xe2\x00\x5f\xeb\xb1\x8b\x98\x7d\x10\xc2\xb0\xb5\xe9\xae\x56\x6b\xe5\x6c\x2b\x5d\x31\xa8\xfc\x08\x66\xf7\xc4\xf8\x5e\x7d\xd4\x2c\xbf\x96\x05\x2e\x7a\x76\xe4\x22\xa1\x5c\x06\x0b\x6d\xc0\xde\x0f\x58\xf7\xf1\x8e\x75\x8c\xf4\x3c\x8a\x0b\x6a\x1e\x49\xf1\x23\x29\x7e\x64\x20\xf3\x08\x08\x0d\x6a\x8e\xb5\x82\xb5\x16\x4d\x5a\xaf\xe8\x87\xdf\x96\xf2\xb6\x5e\x41\x64\xf9\x2b\xa6\x08\xc6\x14\x5b\x9b\xf8\x7d\xa7\x35\x6a\x8a\xb0\xcd\x96\xfe\x86\x06\x9f\x62\x71\x38\xc8\x53\x79\x7d\x2a\xc1\xcf\x09\x81\x3f\x61\xf8\x69\x5f\xe4\x8a\xa6\x12\xe9\x35\x41\x0c\x6a\xc3\x26\xb1\x12\x97\x3c\xd4\x6a\xd4\xf7\x68\x6b\x16\x32\x07\x72\x86\x36\x45\xb5\x64\xf1\xe1\x7c\x78\x46\x88\x2e\x13\x75\x53\x22\x64\x4a\xc8\xcf\x6a\xcb\xaa\xfc\xe7\x85\xae\x05\xc0\xb6\x9f\xc7\xcd\x3e\x92\x3f\x24\x28\x92\x80\x44\x92\x9a\xc8\x73\x41\xc5\x85\x09\x8f\xa2\x81\xc3\x60\x24\x65\x51\xad\x57\x1c\x30\x3c\x25\x91\x14\x88\x5c\x8c\x2a\xc0\x9b\x79\x25\xd6\xae\x74\xee\x05\x5c\xba\x92\x8d\x97\xeb\x76\x05\x41\x2f\xc9\x9f\x8b\xd8\xf0\xde\x86\xde\x48\x6a\xbd\x4e\x46\x01\x9b\x33\xba\xaf\x29\x73\xfd\x29\x4f\x6a\x91\x5e\x66\x12\xcc\x4c\xb4\xd4\xf9\xdc\xf8\xa7\x3a\xf7\x01\x1c\x3d\xdf\xfb\x18\xe3\xcf\xb2\x01\x62\x59\xad\xa0\x4b\xfd\xce\x67\xfb\x7a\xb6\xb2\x27\x18\xfc\x6c\x65\x8c\x85\xf9\x95\x4b\x37\xc9\xf9\x54\x6b\x49\x30\x7e\x98\xae\x4a\x70\xd4\x4e\x87\x94\x72\x70\xdd\xaa\xed\xbe\xd4\x0d\xf8\x39\xc7\x77\x36\x45\xfb\xd7\x69\x10\xa9\x06\x55\xf1\x24\xc3\x6b\x01\x60\xca\x01\x65\x10\x6c\xd8\x29\x24\x80\x95\x56\x35\x69\xb5\x65\x88\x91\x6d\xb8\x0d\x91\x00\xf4\xb8\x84\xd4\x2e\xd0\xd0\x55\x8b\x7e\x41\x87\xee\x6e\x87\x1e\xc8\x54\x58\xe2\x11\x2b\x7a\x80\xb4\x4f\xed\xe2\x5b\x6d\x10\x81\x9d\x2a\x05\x7b\x1d\x32\x97\xfa\xfb\x94\xaa\x10\x43\x4a\xe2\x46\x09\x08\x9f\x43\x4a\x79\x70\x2e\x07\x08\xdb\x50\x05\x8d\xaf\x24\xf1\x98\x54\xab\xea\xbb\x1d\x6b\xac\x4c\xb7\x0d\x0d\xaf\x5d\xb6\xf1\x22\x45\x2f\x85\x18\x42\xfb\x00\x44\x35\x2e\x68\xad\x7c\x07\xc3\x54\x74\x5d\xb4\x44\xc1\x04\x40\x98\x61\x33\x57\x0f\x3c\x31\x19\x4d\x9b\xd5\x24\x49\x35\x05\xf2\xe7\x6d\xf1\xa7\xe8\xf6\x79\x1d\xb5\xed\xce\x4a\x4a\x4b\xda\x2f\x41\x74\x62\x8c\xf5\x3a\xda\xc0\x05\x83\x6d\x77\x8b\x2b\xb6\x6c\xaa\x00\xe0\xd5\xb6\xc6\xbf\x11\xa1\x50\x40\x00\x24\xf8\xb9\x01\xdc\x36\xd8\x1a\x7a\xfa\x1a\xe1\x9e\x0a\xee\x62\x32\xda\x52\xe2\xdb\xbb\xb0\xcd\x4f\xdc\x0d\x79\xf0\x07\x1d\x69\xfc\x13\x4a\x37\xa2\xdf\x4a\x61\x54\xc0\xcf\x83\x2d\x08\xa1\x7c\xa2\x89\x4f\x44\xf3\xd5\xa6\x63\xbc\xb9\x36\x61\xbc\x96\x47\x71\xcf\x01\xcb\x3d\xe0\xb7\x87\x09\x0c\xc0\x92\xc2\x45\xf5\x6e\x7a\x4f\x95\x62\xec\x0e\x91\x4a\x20\x5f\xfc\x95\xc2\xed\x60\xd4\xf9\xfe\xa1\xa9\xfc\x64\x82\xbf\x7e\x11\xeb\x43\x79\x9a\x47\xf1\xe4\xc1\xf3\x3d\x3c\xed\x0f\x51\xd2\x83\x5e\x7d\xb0\xaa\xef\xbe\xda\x59\x6b\xf5\xaf\x17\x4b\xff\xab\xfd\x35\x44\x3f\xeb\x45\x99\x5f\x59\x4e\x53\x5e\xa7\x5a\x7b\xb3\xfc\x6e\xab\xc5\x51\x82\x80\xd8\xa8\x96\xa7\xd7\x28\x34\xd5\x0b\x22\xa1\x89\xfe\x2e\xd5\xf8\x51\x8d\x09\x6c\xa3\x31\xbf\xf6\xca\x3a\xef\xa8\xd8\x53\xd1\xee\xba\xb2\x89\xb7\xd5\x07\x66\xef\xbe\x5e\x3b\x38\x21\x9e\xe1\x85\xb8\xba\xb0\x56\x2f\xbe\x7e\x81\x90\x39\xfc\x5e\x91\x7e\x5d\xd0\x94\xd5\x14\x1b\xf0\xa0\x43\x35\xd1\xf8\xda\x07\x80\x7a\x99\x90\x34\xb8\xd9\x91\xf9\x54\x9f\x4d\x6f\xb7\xeb\xb8\x83\x25\x39\xc4\x94\x43\x75\x53\x88\xf2\x07\x0b\x32\x50\xae\xa5\xc8\x4b\x36\x0f\x3c\x2b\x7f\x9a\x32\xf4\x1d\xab\x0f\xd1\xab\xda\x4a\xf5\x11\xed\xa7\x44\x7b\x9d\x13\xde\x7a\x9a\x20\xb4\x1e\x6b\x67\x52\x49\x55\xbf\x6a\x79\xe1\x96\xe9\xb9\x4c\x4f\x38\xb3\x9a\xec\x5e\x0e\xd6\xe4\x80\x4c\x1d\x1d\x61\xb9\xdd\xda\xa5\xec\x40\xb0\x1a\x07\xc6\x85\xbd\x92\xc7\x4c\xa0\x8f\x90\x47\x19\x3e\x1c\x7f\xde\xf3\xc1\x56\x8a\x17\xd8\x1d\xc9\x16\xd7\x72\x6e\x2e\xd5\x0b\x4a\x76\xbd\xda\xa7\xad\x11\x16\xf3\x7b\xd0\x96\xab\x6d\x35\x33\x6a\x43\x1b\x1c\x16\xde\x31\x7f\xee\x97\x5a\xa8\x82\xd7\x2d\xe5\x41\xf5\x30\xa2\xab\x30\x40\x11\x48\x96\x50\x2e\xc4\xfc\xda\x86\x83\xb7\xa3\x48\xb2\x2c\x93\x4b\xc5\xc8\x46\x06\xb8\x51\x6f\x1f\x74\x8e\xaa\xad\xaa\xdf\x44\xd2\xe6\x89\x88\xa7\xa8\xee\x43\xc9\xfd\xd4\xa2\xbc\xce\x38\xf2\xb8\x3e\x91\x91\x21\x1b\x1a\xd9\x7e\x1a\x92\x8a\x83\xc6\x41\x1d\xd7\x44\x4a\x06\x5f\x98\x93\x2d\xab\x50\x3a\xe7\x35\xee\x85\x5e\x32\x16\x8b\xa7\xb4\x2c\x87\xcb\x15\x60\x01\x13\x0a\xb0\x9e\x97\xe7\xc2\xc7\x80\xb0\xd9\xb0\x38\xdb\x31\xe8\x62\xea\x79\xd5\xe2\x01\x77\x75\xa0\x8a\xd1\x5b\x27\xc2\xeb\x6a\x7b\xfc\x6a\x21\x51\x44\xa0\x78\xad\x57\x9c\xf4\xf2\x0a\x6e\xbf\xef\x2a\xee\x1e\xb2\x32\x2a\xb3\xf9\x7c\xef\xf3\xbd\x64\xf3\xab\xad\xa7\xcc\xbb\x7e\x7c\x4b\x15\x11\x49\x98\x38\xd9\x97\x93\x32\xd1\xfc\xd2\xf6\x5b\x77\xb8\xfa\xd5\xee\xcf\xca\xc0\x82\x3f\x9e\xfe\x91\x1d\xb9\x5f\xb7\x62\x43\x88\xc2\x4e\x73\xe0\xcb\x6a\xa8\x44\x92\x31\xad\x95\x81\x56\x5a\xf4\x13\x6f\x3c\x84\x6d\x59\xce\xe0\x8a\x92\x40\xfb\x1d\xa5\xf1\x16\xc5\xb8\xe7\xb7\x79\xf6\x86\xd9\x54\x2d\x9f\x67\xda\x4f\x56\x25\xc3\xf2\x64\x55\xc0\xde\x6c\x7d\x43\x9e\xb3\x78\x6e\xf4\x53\xf3\x66\xf1\x5a\x91\xb3\xe7\x72\x27\x69\xa6\x24\x3d\x94\x7a\x46\x36\x10\xf6\x9c\x38\xb5\xec\x42\x1e\x91\x6e\x14\xe4\x79\xde\xef\x29\x88\xf4\xa9\x94\x33\x4f\xae\x19\xf2\xac\x3c\x8f\xfd\xaa\x3a\xa5\xda\xe1\x9e\xbb\xdb\xee\x95\xca\x4c\xc2\xd0\x49\xf9\x34\xa9\x7d\x4d\xd4\xdb\x93\x7a\xc2\x94\x61\x9a\x94\x07\xab\x15\x8f\xa3\x4c\xd4\x2a\x3c\xbf\x7c\x4c\x67\x59\x3a\x8f\x22\xbf\xd2\x15\xe6\xf2\x3d\xa7\x49\xc6\x55\x33\x8e\xd9\xe4\x30\xb3\xdb\xd4\xd6\xe6\x8f\xec\x3b\xe4\xd7\x43\x24\x37\xad\x09\x33\x77\xb7\xf5\x46\xa8\x73\x58\xed\x4f\xa2\x0d\x39\x08\x43\x8e\x88\xf0\xb1\x7e\x9e\x36\x1e\x79\xf2\x4f\x25\xa7\x4a\xec\x7c\x6a\x11\x1f\x0a\x8e\x87\xfd\xfa\xc9\x86\x3e\x51\x9e\xb7\xb3\xfe\xde\x9a\x0f\xd5\x76\xbf\xfe\xde\xda\x41\x6a\xbe\xf1\x15\x7b\xf5\x90\xd3\x52\xbd\xb3\x9a\x02\xf4\xc8\x58\x58\x7b\xbf\xec\x2c\x85\x98\x08\x12\x8f\x10\xed\x9d\xe8\xfe\xe6\x45\x5d\xe8\x3e\x2c\xd1\x87\x85\x2e\x6f\x9d\xa6\x94\x69\xda\x93\x68\x4d\x31\xcf\x1a\xed\x9e\xbf\xf7\x1e\x68\x75\xd5\xc8\xb7\xfd\x5b\x55\xa9\x6f\x75\x66\x71\xf4\x1b\x54\x3b\xe9\x97\xf5\x9b\xe7\xec\x36\xe0\xd1\xbb\x85\xbb\x1a\x8c\x53\x7f\xe3\xed\x99\x6f\xbf\x6b\xac\x2d\x24\x1c\xea\xb9\x44\x64\x57\xbf\x59\xac\xbf\x69\x0c\x47\xff\xb6\x7a\xdf\x19\x2c\xb7\x8d\x02\xae\x77\x74\xba\x93\x15\x7e\x86\x17\x54\xd0\xaf\xd9\x40\x31\xdf\xac\x96\x0a\xf1\xd0\x2e\xcb\xe6\x49\xb5\x3f\x05\xa4\xd1\x45\xbe\x02\x08\xc4\x79\xea\xab\xea\xc8\xaf\xbf\x50\x40\xe0\x33\x0d\x3f\x6e\xfb\x67\x62\xf6\x06\xe5\x75\xbc\x9f\xef\x9d\x0d\xbb\xed\xdb\xd3\x7c\x84\x16\x89\x79\xfa\x53\x9b\xf0\xba\x7f\xea\xf2\x31\x3e\xbd\xda\x1b\x5f\x6d\x96\x2a\xf6\x5f\x7d\x2f\x02\xee\x97\xe3\xfd\xbd\xda\x1b\x31\x71\xbf\xf2\xcf\xf9\x1b\x90\xbc\x2f\xb3\xce\xc8\x3a\x23\xeb\x8c\xac\x33\xb2\xce\x98\x75\xc6\x1c\x7f\xb7\x0c\xee\xbb\xb6\x5e\x54\x93\xd5\xcc\x6a\x56\x35\xfb\x4f\x98\x5f\x94\xff\x62\xad\x30\xf5\xc2\x63\x8c\x0f\x3f\xd6\x37\x9a\xd1\x90\xb2\xfa\x6d\x09\x6c\xac\x81\xca\x30\x07\xd8\x18\xb9\x9b\x18\xc4\x4f\x42\x72\x33\x31\x10\x97\x43\xf3\x37\x02\x6c\x7b\xe2\x0f\x9e\x42\x0a\x73\x7e\x2d\xff\x28\x8c\x2c\xa1\xa9\x64\x5e\x91\x6c\x4d\xe4\xb6\x4d\x95\xf7\xde\xf8\x2b\xab\xf9\x8c\xef\x6f\x44\x79\x37\xd5\xc6\xdf\x88\x39\x97\x76\xff\x8d\x2e\x39\xfd\xc6\x7d\xfa\xa9\x9d\xda\xe5\xf8\xef\x6f\xaf\xba\x37\x9b\x5a\xc5\xc0\x66\x3b\x38\xeb\xd5\x4e\x6d\x8f\x6c\xed\xd1\x5e\x6d\x5d\xb3\x16\x82\xc1\x6b\x18\xbc\x86\xc1\xa7\xa8\xd6\xb9\xdb\xb9\xdb\xb9\xdb\xb9\xdb\xb9\xdb\xb9\xc7\xb9\xc7\xb9\xc7\xb9\xc7\xb9\xc7\xb9\xc7\xb9\xc7\xb9\xc7\xb9\xc7\xb9\xc7\xb9\xd7\xb9\xd7\xb9\xd7\xb9\xd7\xb9\xd7\xb9\xd7\xb9\xd7\xb9\xd7\xb9\xd7\xb9\xee\x43\x3e\xe7\x3e\xe7\x3e\xe7\xba\x33\xe9\xce\xa4\x3b\x53\x1b\x7f\xb5\xce\x7d\xce\x7d\x75\x6e\x3d\x9f\x6a\x87\xd6\xdd\xfe\x52\x3b\xb5\xee\xfc\xb7\xb5\x47\x7b\xb5\xce\xf5\xa4\xe6\x70\xee\x70\xee\x70\xee\x70\xee\x70\xee\x70\xee\x70\xee\x70\xee\x70\x6e\x38\x37\x9c\x1b\xce\x0d\xe7\x86\x73\xc3\xb9\xe1\x5c\x33\x6b\x86\x73\xc3\xb9\xe9\xdc\x74\x6e\x3a\x37\x9d\x9b\xce\xcd\x9e\x2d\x8e\x5c\x8e\x5c\x8e\x5c\x8e\x34\x13\xa6\x99\x30\xcd\x84\x69\x26\x4c\x33\x61\x9a\x09\xd3\x4c\x98\x66\xc2\x34\x13\xa6\x99\x30\xcd\x84\x69\x26\x4c\x33\x61\x9a\x09\xd3\x4c\x98\x66\xc2\x34\x13\xa6\x99\x30\xcd\x84\x69\x26\x4c\x33\x61\x9a\x09\xd3\x4c\x98\x66\xc2\x34\x13\xa6\x99\x30\xcd\x84\x69\x26\x4c\x33\x61\x9a\x09\xd3\x4c\x98\x66\xc2\x34\x13\xa6\x99\x30\xcd\x84\x69\x26\x4c\x33\x61\x9a\x09\xd3\x4c\x98\x66\xc2\x34\x13\xa6\x99\x30\xcd\x84\x69\x26\x4c\x33\x61\x9a\x09\xd3\x4c\x58\x66\xc2\x32\x13\x96\x99\xb0\xcc\x84\x65\x26\x2c\x33\x61\x99\x09\xcb\x4c\x58\x66\xc2\x32\x13\x56\xbf\xb3\x66\xc2\x32\x13\x96\x99\xb0\xcc\x84\x65\x26\x2c\x33\x61\x99\x09\xcb\x4c\x58\x66\xc2\x32\x13\x96\x99\xb0\xcc\x84\x65\x26\x2c\x33\x61\x99\x09\xcb\x4c\x58\x66\xc2\x32\x13\x96\x99\xb0\xcc\x84\x65\x26\x2c\x33\x61\x99\x09\xab\x66\xc2\x37\xbf\x3f\xb2\x5d\xe3\xab\x65\xe4\x9b\x59\x8d\x0f\xd6\xdf\xa8\xed\x84\x42\x07\x51\x0e\xfa\x1c\xa4\x3a\xc8\x49\x52\x99\x1c\x5f\xcd\x98\xaf\x26\xcc\x57\xf3\xa5\xb6\x03\x2c\xd2\x94\x25\xc7\x57\x73\xe5\xab\xa9\xf2\xd5\x4c\xf9\x6a\xa2\x7c\x35\x4f\xbe\x9a\x26\x5f\xcd\x92\xaf\x26\xc9\x57\x73\xe4\xab\x29\xf2\xd5\x0c\xf9\x6a\x82\x7c\x35\x3f\xbe\x9a\x1e\x5f\xcd\x8e\xaf\x26\xc7\x57\x73\xe3\xab\xa9\xf1\xd5\xcc\xf8\x6a\x62\x8c\xcf\x7f\xeb\xb4\x9a\x1b\xb5\x74\x8e\xaf\x66\x46\xf9\x96\x74\x0a\x08\x17\x60\xd3\x1b\xe5\x47\x8c\x32\x2d\x47\xd9\x49\xe3\xab\x19\x51\x96\xe3\xf8\x6a\x3e\x7c\x35\x1d\xbe\x9a\x0d\x5f\x4d\x86\xaf\xe6\xc2\x57\x53\xe1\xab\x99\x50\xcb\xf1\xf8\x6a\x1e\x94\xd7\x3d\x6a\x3f\x18\xa3\x26\xc1\xf8\xf2\xef\x96\xa5\x21\x25\x87\x26\x6c\x08\x43\x8d\x1c\x2d\x58\xed\x3e\xe4\x68\x95\xf9\xb2\x25\xc6\x59\xe2\xe0\x3c\xdf\xaf\xc3\x5d\xe5\xf9\x8e\x0d\xea\xf8\x3f\xff\xfb\x9f\xff\xfc\x37\x34\x1b\x98\xaf\xda\xfb\xb7\x89\x1e\x6e\x72\x8a\x23\xca\x30\xbe\xb5\x04\xdc\xdf\x5b\x3c\xbd\x83\x35\xf5\xc6\xfb\xba\xbd\xd5\xd6\x5b\x33\xca\x99\x19\x18\xca\x06\x66\xb1\x81\xa1\x6c\x60\x2e\x1b\x4a\x8a\x07\x96\xb1\xa1\x6c\x65\x8c\x72\x99\xaa\xed\xbe\x23\xa7\xab\x2d\x57\x5b\xfa\xdb\x75\xb6\x4f\x8f\xfe\x31\x7e\x1d\x73\x5d\xe1\xba\xc2\x33\xf2\x8c\x58\x0d\xbe\x2f\xff\xdf\x9f\x3a\xf3\xaf\xec\xcc\xfd\xd5\xbf\xfb\x0f\x32\x06\x22\x1b\x9e\xf3\x6f\xaf\xef\x0f\xdb\xc3\x07\x31\xf5\x7d\x2d\xc1\xd1\x6a\xff\xb4\xc5\x6c\x75\xef\xd5\xec\x6e\x72\xca\xef\x6b\x05\xda\xf6\x92\xeb\x1a\x13\x49\x6a\xe2\x40\x98\x16\xf1\x87\xcb\x42\xf5\x77\xf5\x99\x2b\xf4\xc9\x31\xe7\x7c\x10\xe9\x6a\x21\x03\xcb\x50\x19\x2d\x1d\xc5\x69\x43\x65\x33\x54\xa8\xa4\x76\xe4\x46\x38\xb5\xc9\x7a\x5b\x59\xfa\x47\xc2\xda\xd8\x27\x88\x6b\x38\xa5\xb3\xf9\x5e\xb8\x11\x3e\x15\x6d\x84\x87\xe2\x13\x95\xf9\x88\x21\xc0\xd1\x85\xea\xf8\x36\x47\xaa\x45\x02\xcd\x4c\xf2\x6a\x0c\x92\x58\xb2\xa5\xd5\xfa\xf6\x6e\x21\xed\x91\xf8\xe6\xec\xdf\xa3\x02\x11\xc2\x2a\x7d\x7b\xe2\x03\x81\x74\xad\x1d\x53\xf6\x1f\xa7\x84\xaa\xc3\x85\x18\x4f\x90\xb1\x7e\x2d\x4d\x66\x7e\xe4\x91\xcd\x81\x6f\x97\x35\x8b\x47\xad\xf4\x65\xfb\x94\xa7\x95\x93\x9b\x59\x88\x74\x0c\x42\x3e\xcc\x54\x1f\x16\x88\x4f\x1e\x1f\x76\x22\x20\xa5\x03\x1b\x40\x7c\xd0\x65\x1f\x06\x12\x38\x8a\xf8\xb0\x43\x7c\x14\xb6\x3f\xbc\x1c\x1f\xe2\xb7\x0f\x1a\xed\x8b\xbe\x63\x94\xe4\xf1\x18\xa8\x0b\x8b\x81\x04\x57\x90\xb7\x5a\x55\x15\xd8\x45\xd4\x11\x8c\x68\x9d\x5e\xe4\xd3\xa2\x1d\x03\x26\x2d\x98\xa0\x90\xcc\x21\x1f\x5d\xad\x7b\xeb\x0e\xcb\x7f\x05\x92\x3f\xaa\xfe\xd5\xa7\x49\xeb\x6e\x8b\x8b\xa8\xa8\xaa\xbe\x9a\x08\xb4\xd3\x04\xb9\x10\xc9\x97\x2d\x47\x7e\x84\x28\x8a\xaa\x52\xa4\x9b\x65\x0b\xb5\x36\x6c\x13\xdd\xc1\x10\xaa\xa3\x14\xe6\x9e\xb3\x35\xcc\xbb\xba\xa1\xab\x32\x49\xa1\xc9\x70\x2d\x19\xae\x65\xb6\x2c\x3c\x24\x4b\xb8\x9c\x5f\x5e\xfb\x60\x1f\x89\x14\xf9\xf4\x31\xc8\x80\x11\xfa\xaa\x0d\xd9\x9e\x8e\x9c\x6c\xc8\xc6\x86\xcc\x6c\xc8\xc9\xd6\xa7\xd4\xc2\xf1\x72\xcc\x56\x0d\x3d\x3d\x07\x28\x7b\xcb\xdc\xa9\x7c\x39\x70\x92\x32\xa4\x35\xae\x95\xe3\x23\x51\x72\x9b\x17\x42\x9d\xe9\x53\x75\xf8\xb2\x09\x68\x65\xe8\x78\x87\x34\xa2\x73\x64\x93\xa1\xb6\xfe\x64\xeb\x30\xf1\xa1\x71\x25\x25\x94\x4e\x76\x4e\x5c\x64\x91\x9a\x7a\x9e\xaf\xf5\x21\x07\x22\xf9\xd1\x04\xf3\xa8\xe5\xc5\x75\x78\xea\x2a\x31\xab\xed\x11\x2a\x8e\xf6\x13\x95\x11\xfc\xdd\xf8\xa0\x22\x3f\xef\xd1\x97\x3d\x1b\x39\x29\xb8\x38\xc4\x47\xeb\x2c\xf3\xd0\xfb\x98\x3d\xf7\xac\x0f\x6a\x69\x3f\xf8\x93\xaf\xc5\x8e\x50\x1b\x7e\x28\x7b\xc5\x50\xab\x0d\x6d\xcd\x3d\x19\xd8\x01\x1f\x32\x70\xeb\x0d\xa9\x91\x91\x28\xd8\xb3\x45\x81\x50\x45\x42\x83\x0c\x19\xcc\xb1\xd0\xae\xa3\xfd\x1b\x66\xd7\x50\x59\x83\xc2\xb6\x3e\x75\xbc\x48\xb3\x8a\xe0\x01\x3f\x89\x5b\xac\x3e\x9d\xda\xcf\xb9\xe2\x49\x10\xb9\xd1\x14\xec\xb2\xc0\x09\x47\x44\x86\x2f\xc4\x3c\x64\x1e\xab\x35\xee\xf8\xd3\xd5\xcd\x3e\x55\x65\x13\xc8\x11\xe3\xf5\x3b\x02\x97\xfb\xa2\x47\xb4\xe1\x48\x48\x5a\xb5\xc3\x54\x49\x23\xe9\xd2\x27\x52\x67\xf2\x0b\xd5\x7a\x3b\x54\x18\xa9\x0b\x46\x46\x5b\x7d\xab\x56\xbf\x47\xaf\x47\xac\x66\x68\x29\x25\x93\xf2\xb4\x54\xa2\x77\x44\x9a\x6a\x4a\x50\x41\x56\x54\xab\x62\x48\xfd\x8e\x35\x76\x62\xde\x9b\xd6\x01\x11\xca\xda\x3d\xbb\xf6\x99\x2a\xb2\xea\xe6\xd5\x6a\xc9\xa8\x28\x57\x0b\x26\xca\x8f\xab\x40\xc1\x17\x51\x76\x3e\xa5\x65\x49\x32\x52\x00\xb8\x23\xea\x18\xe7\xee\x1e\xa1\xc3\x8c\x22\x1d\x25\xe7\x52\x47\x83\x92\x36\x70\x44\x94\x45\x4a\x9d\x18\xc2\x2a\xa0\xa4\xf0\x2e\x52\x0e\x0b\x8a\xf1\xd5\x3a\xa6\xd5\x92\x39\xbc\xd6\xcc\x15\xad\xa8\x3c\xfa\x78\x7a\xcb\x5f\xab\x1c\xab\x92\x26\x92\xa3\xe6\x65\xab\x0b\xdb\xf8\xa3\xe4\x67\x43\x06\xb6\x5a\x6a\xc3\x38\x1e\x71\x24\x6e\xfa\xd2\xdb\x3d\xd9\x24\x2c\x37\x5d\xd3\xad\x9a\x78\x13\x10\x38\x9b\x3e\xff\x6e\xd9\xc1\x9f\x9e\x7f\xeb\xff\xdb\x1d\xa0\xb3\x48\x51\x1d\x3b\xe3\x11\xbd\x3e\x62\x4e\x07\x63\xcc\x11\x8f\x3c\xb7\x77\x16\x69\x42\xb4\xdf\x07\x0a\x5a\xfa\xb6\xc6\x5d\x41\x8d\xb6\x0a\xa9\xa3\x12\xea\x98\x87\x17\x2e\xfa\x0a\x14\x3c\xef\xf2\x43\x66\xff\x54\x00\x3d\x3a\xcc\xcf\x6a\x0c\xe5\x5e\xad\x4a\x1f\x95\xce\x56\xe6\x47\x72\xe1\x2d\x78\x00\x6f\xd6\x5b\x4d\x6b\xad\xca\xe6\xfb\xe9\xfa\x92\x9d\xf9\x9a\x57\xb0\x95\x7b\x65\xde\x5b\xf9\x1f\x36\x09\x4f\x8b\x3d\xa2\x5a\xda\x75\x2d\x3c\xf2\x6b\xad\x69\x50\x43\x78\xe1\xec\xce\xd5\xd2\xab\x83\x2f\xc2\x72\x96\xf3\x27\xcd\x81\xee\x57\xe4\x5b\x02\xf2\x88\x02\x1e\x41\x2a\x55\xed\xd5\x8a\x20\xe2\xaf\xf8\x5a\xb7\x1f\x16\x05\x73\xc5\x95\x61\xbf\xad\x46\xfb\x59\xb5\xa8\x1c\x7f\xde\xeb\x4f\x52\xf6\x33\xf3\x3f\xa8\x8f\x0f\x7f\x11\x29\xc3\xa0\x5d\x1c\x1f\x1a\xf8\x8f\x9d\x43\xdc\x30\x64\xb7\xea\x3a\xad\xcc\xdf\x7d\x57\xf3\x2d\x42\x37\x04\x10\xeb\x5c\xe3\xb7\x8f\x71\xcd\xdb\x3a\xff\x46\x20\xff\x3d\x23\x6c\x8d\xd5\x52\xe3\xc7\x23\xf1\xa2\x5b\xd6\x0e\x71\x09\x72\x46\x1c\xac\xe0\x02\x05\xb7\x2b\x86\x7d\x10\xd3\x4e\xb5\x76\x76\x3b\x3e\x1c\xfe\xc8\x56\xac\x55\x2f\x80\xe1\x73\x20\x0c\x56\xe5\x5d\x7d\x0a\xb4\xd6\x43\x76\xd1\xc0\x15\x36\xb0\x63\xa9\xfb\xae\xf1\xd6\xdb\xef\x11\x9f\xce\x1e\xd7\xb2\x31\xbc\x05\x03\xf6\x6f\xec\x56\xbe\x15\xd4\x6a\x2e\x32\x5c\x58\xb0\xd3\x21\xe0\x12\x82\x2c\x21\x10\x13\x42\x33\x21\xf8\x12\x02\x31\x21\xd4\x12\x82\x26\x21\xf8\x12\xc2\x2b\x21\x28\x13\x82\x32\x21\x0c\x14\x02\x3d\x21\xe0\x12\xa8\xc1\x23\x90\xd7\x86\x9a\xca\x50\x71\x10\xef\xb5\xd2\xbe\xfe\x6e\x45\xfd\xd6\xe1\xb7\x1a\xab\x1e\x55\x1d\x10\x58\x38\x02\x43\x54\x34\x03\x9b\x5a\xc2\x50\x45\x18\xf8\xb5\x28\x35\x56\x5f\x05\x68\x57\x43\xc0\x8e\x5a\x0d\x28\x3f\x07\x51\x9d\x6a\x5b\x21\x9f\x90\xda\xe8\xb6\x15\xf5\x7b\x9c\xe8\xad\x23\x59\x08\xc9\x9e\x4c\xb6\x25\xa2\xf1\xea\x1b\x6f\x1d\xfe\xd1\x2b\xbc\x56\xde\xa3\x91\xae\x87\x65\xcb\x1a\x99\x32\x1e\x53\xbe\x6b\x7e\xb7\x95\xf3\x5b\x4b\x1f\x27\x1b\x1e\x8c\x6c\x61\x5c\xbb\x00\x76\x85\x39\xdb\xca\xfa\xad\xe1\xd6\x76\x7b\x01\x92\xe9\xb9\x47\xcb\xe3\xea\xa3\x07\xb6\x4a\xcc\xdd\x3b\x82\x3a\x50\x12\x2e\x93\x1c\xc1\xc4\x38\x37\xcd\x93\xe9\x3e\x4c\x88\xd3\x69\x9d\x99\xf6\xb8\x89\x3f\x6d\xaa\x68\x98\x6a\x1f\xd4\xb3\x57\xdb\x22\xbc\x76\x87\xaf\x51\xb5\x76\x07\x11\x7a\x36\xf3\x62\x9f\x2c\x76\x94\x6c\x67\xf5\x5b\xd3\x5e\x0b\x91\x85\x4b\x64\x99\x75\x8b\x4d\xb2\x58\x17\x22\xdf\x35\x42\x5c\xa2\x39\x34\xd8\x7b\x5f\x4b\xdf\x06\xe1\xb5\xaf\xb5\xee\x5b\x09\xff\x33\xae\x25\x04\xc1\x27\x12\xd7\xaf\x56\xdf\x75\x78\x58\x5b\xcd\xc5\x16\xe0\xdd\x3c\x82\x6d\x65\xd8\xab\x77\x19\xb5\xa8\x4b\x05\x0a\x79\x8d\x4d\xc8\x51\x06\x2f\x36\x06\x89\x8d\x6d\x6c\xab\x00\xdd\x50\xbb\x7b\xb5\xd8\xae\x5f\x85\xd4\x79\xb3\x7e\xc5\xef\xab\xef\xca\x76\x34\x92\x2c\x72\x4d\x75\xae\xe3\x5b\x2a\x97\xac\xed\x6c\x71\x36\x78\x33\xd5\x9d\xc7\x93\x3d\x98\x12\x8f\xdc\xda\xb9\x3f\x71\x36\xfb\x91\x2c\x28\xe4\xed\x81\x5b\x06\x3e\x88\x83\xe9\xe5\xdc\x16\xd5\x6d\x01\x5c\xf5\xad\x70\x71\x07\x9b\xcd\x21\x6e\x0b\xc4\x10\xb2\xc4\x71\xb0\xc1\x00\x34\xd4\x75\x9c\x8b\xbf\xee\xf4\xb7\x7c\x76\xc9\xd3\x5a\xfa\x8e\x9c\x2d\x9b\xeb\x9a\xbd\x3f\xce\x56\xe0\x77\xfd\xde\x19\x57\xff\xe6\xfe\x0d\x64\x73\xa3\x15\xef\x09\xbb\x61\x15\xc6\x2b\x78\xa1\xb2\xaf\x9d\xf4\xa2\xaf\x06\x5a\xaa\x91\x56\xce\xef\x4f\x93\xa8\xae\x9d\x11\x8c\xc6\x6a\xf3\xac\x42\x6a\xc1\xaa\xcf\x6e\x7f\xdd\xe2\x8b\xc3\xf2\x61\x45\x7a\xf9\x48\xee\x3a\xc6\xfb\xf2\x70\x06\xbe\xdd\xb2\x12\x2d\x28\xe1\x6a\x56\xd4\x47\x04\xe9\x99\x87\xef\xb5\xe4\xee\x68\x2d\xfd\xde\x79\x3b\x27\x49\x0e\x4e\x55\xac\x7a\xc0\x0f\x8a\x8c\x12\x7b\xd2\x5d\xaf\x91\xd6\xd2\xc7\xea\xe6\x5c\x59\xdc\xef\xb8\x9a\x6c\x92\x4c\x51\xda\x41\x6a\xd7\xc6\x07\x72\x40\x7f\x64\x87\x30\x57\x8c\x09\xb9\x70\x1b\x99\xfc\x7a\x67\xef\xdd\x5c\xab\x2e\x55\xc6\x38\x54\xeb\x84\x0a\x8e\x90\x5b\x4e\x39\xae\xb4\xe7\x12\xa5\xcc\xf4\x3b\x93\xdf\x91\x3c\x8e\xc4\x67\x42\x0a\xbc\x8e\x6c\xb5\xfc\x16\x25\xb3\xef\xe3\xb0\x05\xb8\x21\x1d\x5e\xc7\x18\x99\x7d\x3c\xa5\xfd\xd3\x5a\xfa\xda\xd3\x57\xeb\xef\x6d\x15\x7d\x68\x61\x28\x09\x36\xc6\xfc\xf1\xc7\x4a\x7f\x5c\xf9\x58\x48\x8d\x0d\xb8\xb6\x31\x1e\x6f\xf0\xb5\xed\x2f\xdd\xb7\xad\x8b\xc9\xa2\x90\x27\x77\xaf\xf0\xdb\x54\xcb\xa2\x00\x8f\xf3\x57\xe0\xab\x49\xdc\x32\x79\x7f\xd2\xa9\x3c\x74\x58\x95\xaf\x3d\xac\xd9\x92\xad\x98\x10\xf8\x95\xdf\x6c\x59\xd7\x6c\x55\x7c\xb2\xab\x98\x10\xd0\xc9\xcb\xd6\xd6\x88\xb6\x05\x57\xc5\x0d\x08\x54\x7e\xaa\xed\x3e\xbc\x9a\x24\x92\x43\x58\x34\xc4\x40\xcb\x12\x98\x5a\x51\x11\xd4\xfe\xac\x8e\x81\x39\x67\x98\xd5\xf8\x5e\xaa\xb5\x5f\xf3\xb0\x88\x43\x0e\xeb\xc0\xd8\x2d\x8e\xda\x96\x40\xeb\x07\xb7\x9d\x70\x5b\x03\x9f\x5c\x2a\x36\x54\x7e\xc7\xe0\x71\x0c\x51\x91\x41\xea\x70\xe0\x26\x55\x25\x5d\x23\xdd\xef\x71\xe7\xb6\x75\x81\x98\x9f\x8d\x1d\x9d\xe4\xe2\x65\x87\x7b\x22\xc9\x11\x12\x15\x21\x15\x11\x92\x13\x21\x99\x11\x52\x17\x21\xed\x11\x12\x18\x75\x56\x7f\xea\xdc\xae\x5b\xb4\x9b\xb3\x9f\xe3\xb6\xc8\xaa\x7d\x13\x47\x41\xf2\x40\x93\xe0\x64\xf2\x43\x49\xf0\x05\x79\xbd\x6a\x1d\xaf\x9e\x11\x83\x56\x76\xc4\x4c\xf5\x47\x8a\x54\x24\x3e\x84\x14\xb3\x4a\x32\xeb\xa4\xfc\x82\xac\x5f\x1d\xa3\x8d\x6e\xc5\xa0\x48\xbf\xee\xde\xa9\x61\x9a\xf8\x08\xd9\x28\x27\xf5\x2f\xc9\x53\x48\x56\x7d\x62\x3c\xc8\x23\x5a\xc5\x3b\x48\xde\x44\x36\x24\x91\xc8\x6d\xf2\x05\x12\x8b\x14\x56\xe7\x6a\xd9\x09\xab\xcf\x72\xfd\xd3\x82\xae\x72\xfb\x7c\x37\x11\xad\xc9\xf7\x99\xfc\xa0\xc9\x33\x9a\xa3\xfd\x41\xde\x1f\x5f\x6c\x8a\x38\xcd\x68\xf9\x2c\x3b\xbb\xe8\x13\x3c\x4b\x3d\xa8\xb6\x22\x5a\x64\x9f\x85\x20\x86\xc3\xb6\x9c\x8d\xbe\xd9\x2d\xa0\xcf\x13\x64\x31\x4e\x7c\x62\x2a\xc1\x43\x55\x78\x1d\xd9\xd2\xaf\xac\x82\xd9\x47\xb6\x74\x7e\xdb\x1e\x3d\xde\x82\xb1\xda\xd3\x12\xfc\x2d\xf1\xca\x4e\x20\x09\x85\x95\x97\x98\x49\x90\x2b\x89\x05\x7c\xb9\xec\xc2\x04\x00\x63\x41\x5c\x2f\xde\x3d\x61\x93\x6a\x49\xb9\x66\xb7\x2d\xac\xaf\x65\x39\x88\xd2\x10\x12\x0c\xd2\x28\x21\xe5\x59\xd7\x69\x89\x57\xa8\x01\x96\x80\xb9\xb1\xb1\xab\x6d\xd1\x8c\xad\xa6\x72\x8b\x9d\x6e\x51\x8e\xad\x3e\x68\x0f\x12\xf9\x3c\xdf\x8d\x91\x6c\xfb\xfd\x7b\x9c\x1e\x67\x81\x60\x79\x15\x71\xdd\xa3\xad\x08\xcc\x15\xd9\xf6\x00\x3f\x74\xb7\x15\xb1\x59\x17\xab\x65\xf1\xbb\xdf\x52\xae\x2c\x8d\xdf\xf1\x8e\xa4\x1d\x20\x1e\x82\xb9\x3a\xb6\x18\xec\x5e\x6d\x7b\xcc\x96\xd4\x37\xee\xaf\x60\xdb\x6f\x16\x02\xc6\xc2\x3a\x92\x04\xbf\xbf\x88\xb8\xdf\x26\x79\xba\xd9\x7e\x5b\x5d\xea\x16\x99\xd9\xbb\x2d\x99\x16\x8c\x85\xb1\x22\x15\xb8\xd9\x96\x5b\xd5\xea\x66\x43\x62\x41\xac\x23\xfb\xdb\xfb\x2c\xd2\xb2\x6d\x05\x35\x3f\xad\x48\x1a\xb6\xb7\x83\xed\xed\xf8\xde\xe3\x57\x1d\xdf\xab\x96\x3c\xce\x6e\x15\x83\xdb\x42\xfc\x84\x61\x59\x26\xaf\xa5\xff\xb3\xe5\xfb\x8d\x63\xfc\x50\xbb\x7a\xc8\x8c\x9c\xfb\x93\xf5\x77\x8c\x6b\x92\xf0\x3d\xfc\x85\x83\xe7\xed\x78\xe2\x07\x6b\xf1\x79\xa0\xbd\xfc\x8b\xf3\x58\x2f\xcd\xc7\x8b\xf3\xf9\x88\x88\x1e\x0c\xc9\xe7\x89\x06\x88\x42\x1c\x31\xa2\xf3\x66\x8f\xf4\x95\xbb\xef\x6a\x6d\xbd\xa8\xb4\x62\x59\x5d\xf5\x05\x10\x40\xd5\x5e\xe3\xe9\x18\xe3\x70\x4c\xea\xc8\xa0\xed\xe2\xb1\x72\x1f\xab\xf8\xa9\x0e\x7b\xd1\xcc\x1e\x24\xad\xa2\xed\x16\x1c\xb6\xb3\x55\x0c\x46\xf7\xc9\x61\x89\x63\xab\x92\x7b\xf0\x23\xcf\x7e\xf4\xcc\x8a\xe7\x1d\x84\x36\x0a\x12\x91\xd5\xaf\xe3\xc9\xce\x3c\xf6\xfc\xe3\x2f\x3c\x4f\x5f\xb5\x60\x40\x84\x55\xfb\xb4\x7d\x56\x8f\x93\xc6\x8d\xbe\x1a\xf4\x25\x3e\x5e\x52\x30\x8d\x5d\x82\xdc\xa9\x16\x3b\x2e\x86\x34\xb5\xab\x30\xa7\xb5\x78\xab\xf6\x02\x47\x81\x2e\xfc\x58\x11\x1f\x4e\x2a\xa0\x91\xb2\x8b\x70\xe7\xaa\xe7\xb2\x47\x37\xbc\xe4\x83\x8b\xfc\x0e\x59\xad\xd3\xb5\x60\xea\x8e\xe9\x02\xe0\x2f\xaa\xb6\xfb\x6c\x27\xdf\xa8\x0a\xe6\x53\x79\x24\x79\x99\x12\x97\x29\x87\x99\x3c\xf4\x94\xf7\xcc\x81\xd9\x6c\x60\xe4\x18\xa3\x79\xd8\xba\x62\xe2\xb6\x8c\xad\x5a\x89\xd5\x32\xb6\x90\xa4\x57\xdf\x59\x57\xa5\x18\x68\xef\x80\x90\x1a\xb7\x51\x3c\x38\xd6\x60\x8e\xa4\x8e\xaa\x25\xa5\xf5\x81\x59\x7f\x98\x6c\x49\x6f\xed\xae\x41\x56\x53\x46\x53\x20\x1a\x85\x0a\x1b\x18\x18\x89\x83\x9d\xc3\x9f\xcd\x50\x8f\x16\xaa\x87\x78\xc4\x35\x82\x1b\x6d\xf7\x08\x46\x5c\x50\x6f\xf0\xfd\x80\x2f\xe3\x41\x27\xff\xba\xfa\x6c\xc2\xcd\x1a\x3c\xfd\xa9\xeb\xbf\x3e\x06\x56\x0e\x57\x49\xfe\x22\x3f\xec\x3a\xec\xb5\x18\xe6\x31\x23\x95\xa5\x41\x54\x96\x25\xb9\xb0\x9f\xcd\x9f\xcc\xac\x63\x54\x9c\xcd\xee\x47\x8f\x90\xa2\x15\x0f\x07\x31\xc2\x12\x59\xd7\xb9\xae\x30\x8c\x38\x86\xc8\x2d\xd4\x58\x12\x65\x22\xce\x53\xc7\x18\x8f\xfe\x5e\x12\x5b\x2a\xd1\x54\x22\x13\x81\x2c\x1b\x12\x42\x13\x60\x1d\xfa\x6f\x3e\x23\x58\x68\xa6\x78\xd7\x8a\x46\xff\x61\x9a\x6d\x56\x58\x15\x73\xfb\xea\x5f\xda\x04\x20\xdd\xbb\xa1\xde\x6a\xae\xb1\x29\x56\xab\xaf\x6e\x8b\x84\x32\x86\xc6\xc4\xc7\x98\xf8\x18\xab\x9d\xe4\x5e\xc1\xa8\x60\x36\xa7\x5a\x2a\x58\x5a\xe9\xcf\x6a\xd3\x48\x8f\x93\x5a\x6d\x8b\x91\x74\xaa\x7a\xa2\x6f\xb6\xd4\xaa\xec\x9e\x88\xee\x87\x59\xc8\x5b\x13\xde\xa0\xf8\xf0\x53\x7d\x2b\x5b\xfc\x9f\x75\x2a\x5a\x45\x00\xf3\xc3\x2e\xf5\xf1\x46\x3f\xd5\x49\x44\xea\xea\x78\xe3\xec\xdb\xd5\x36\xb0\x28\x16\xdf\xea\xe3\x57\xe2\x24\x0c\x35\xfe\xd5\xca\x55\x65\x8f\x00\x41\x75\x74\x0b\xfb\x3d\x4c\xb7\x54\x7d\xc8\xb7\x87\x84\x7b\xc8\xd6\x87\x6c\x7b\x8c\xd1\xa2\x55\xe2\x60\xec\x90\x41\xa0\x7e\xc8\xc8\xa8\x39\x8a\x71\xda\x5e\xad\xbf\x65\x60\x97\x1a\xf2\x32\xa3\xab\x8c\x59\x4d\x83\x05\x35\xd8\x63\x43\x1d\xb1\xba\xa4\x1a\xe9\xb3\xb4\xc7\x35\x97\xfe\x62\xf1\xca\x47\x88\xbd\xa8\x69\xaa\xe3\xfb\x1b\x65\xd0\x44\x8d\xe4\x64\x01\x50\x22\xc8\x13\x81\x95\x04\xb8\x49\x00\xc1\x04\x08\x4b\x80\xbf\x04\x28\x4c\x00\xca\x04\xe8\x4c\x80\xc2\x04\x80\x4b\x00\xac\x04\x00\x4d\x80\xc5\x94\x7d\x8b\x6d\x95\xa5\xc7\xfe\x4f\x51\xc1\xc4\xd5\x49\xa3\xa4\x46\xd8\xab\xab\x3f\x65\xb5\xb2\x0f\x71\xa0\x25\x16\x50\xd9\xa5\xb2\x51\xc5\xaf\x6a\x26\xf0\xc8\x22\xd9\x12\x69\xad\xce\xcd\x1e\x3e\x2d\x5a\xa5\x86\x5a\xe4\x39\x71\x74\x50\x18\xa9\xf1\xfe\x54\x16\x4f\x66\x61\x74\xae\x41\x3e\x42\xf6\x53\xa5\x55\xb5\x72\x7c\x5d\x67\xbd\x5b\x6a\xb5\xed\xc6\xb6\x09\xc5\x8e\x4e\xdb\x8a\x44\xab\x9c\x2b\x7a\x36\x09\xd4\xe3\x37\xa8\x3e\xe9\x54\x36\xa7\x3c\xec\x14\x37\x53\x0d\x5a\x7d\x23\xa3\xaf\xe0\x78\xcc\x21\xb8\x2f\x94\x8b\x94\x45\xf7\xb1\xee\xc8\x93\x76\x5f\x26\x71\xb6\xa8\xa9\x23\x1b\x4d\x6c\x37\x5c\xab\xc5\x4b\xe5\x23\xec\x9b\xcb\x8e\xb9\xdc\xc3\x25\x4a\xb0\x78\x67\x4b\x7c\x00\xfb\x74\x2c\xd9\x43\x1c\xd7\x75\x4c\x9f\xc5\x9e\x64\xb5\x4e\x96\x27\x5f\x66\xf1\xcb\x16\x6f\x88\x36\x4a\x1d\xa9\x2a\xdc\x6f\x7b\x6d\x67\xb2\xf7\x70\xb4\x6e\x52\xf6\x98\x12\x63\x8f\x66\x39\xeb\x38\x15\x8b\x51\xde\x1c\xb3\x50\xb5\x2c\xae\xb6\x0f\x1d\x8f\xd1\x4e\x9d\x69\xb5\xc6\x9d\xb5\x5b\xe0\xf4\x6b\x91\x7f\x56\x1c\xcb\x90\x95\xae\x22\x35\xf0\x30\x54\xcb\xf6\x53\xf2\xc4\x07\x54\x0c\x13\xea\x58\xeb\xf8\xbe\x82\x11\x99\x14\xa8\x03\xbc\x0d\xa1\xca\xb5\xce\x62\xcd\xde\x1e\xd7\x67\xb3\xf1\x04\x71\x47\x07\x26\xea\x38\x7c\xe4\x33\x5b\xb5\xca\xae\x07\x95\x8c\x77\x31\x0e\x0b\xe4\xb0\x3d\x70\x38\x94\x4d\x28\x57\xdb\x91\x2e\x79\xd8\x4d\x1f\x8a\xad\x7e\x79\x70\x17\x8a\xe0\x7e\x3f\x3b\x90\xe4\xa9\xe2\x2b\xf7\xf3\x60\x03\x80\x8d\x0d\xb0\xd5\x00\x49\x8d\xfb\xb1\xc7\xbe\x9f\x78\xa9\x71\xd6\xda\xd7\xb6\x9c\x22\x2e\xac\xcb\xf7\x9f\x0f\x19\x74\xc8\x9b\xef\xd7\x46\xa2\xca\x2f\xee\xe6\xfd\xda\x44\x55\x64\xcf\x7d\xbc\xdf\xef\x92\x74\x4f\x15\xe8\x37\x95\xef\xeb\x1f\x9e\xfd\x47\xf8\xb1\xca\xee\xbf\x56\x78\x6d\xf3\xd0\x4f\xb6\xd0\x5e\x81\xb1\x8b\xaa\xf0\x02\xfe\x06\x43\xfb\xba\x6d\x57\xe9\xe7\xa5\x0c\x7d\x25\x1c\xee\x45\x8e\x6b\xa9\xbe\x17\x15\xcd\xed\xe3\x15\x42\xa8\x6b\xbb\xc2\x78\xf7\x9e\xfe\xae\x36\x36\x85\xc7\x3a\x30\x26\x84\x96\x02\x5d\x92\x66\xcf\xd4\x7e\xa6\xbf\x9a\xbe\x6a\x8d\xa3\x91\x13\x20\x79\x1e\xec\x43\x33\xf0\x50\x11\x3c\xd3\x0a\x09\x65\x59\x21\x4c\xc5\xe3\x53\x1a\xae\xbb\x0d\x52\x50\x0b\x13\xf9\x71\x2b\x9f\xe9\x89\xa0\xa2\xfa\xce\x42\x54\xd3\x84\x04\x92\xf6\xef\x8d\x06\xaf\x13\xd7\x9a\xad\xe7\xaa\xa8\x83\x6c\x82\x30\xcf\x87\xe4\x0c\x4a\x37\x3f\x84\xa0\x1f\x9a\xff\x6f\xcc\x1e\x61\x90\x3a\x92\x08\xc0\x87\x5e\xfd\x53\xae\x2a\x30\x93\x1f\xb3\xe5\x53\x20\xf1\xa1\x3e\xfd\x66\x87\xee\x2e\x73\x15\xd1\x9d\x4d\xdb\xe6\x5c\x6d\x9f\xe5\x48\xc6\x2f\x4d\xd0\x4f\xb1\xfe\xa7\xa0\x02\x4d\x54\x7e\x47\xa9\x2e\xda\x78\x94\x51\xf9\x35\x60\x5d\x21\xec\x77\x3a\x10\x88\x1e\x18\xf8\xfb\x3b\x2d\xf5\x80\xdc\x17\x2d\x19\x88\x5c\x02\xd9\x25\xa4\x5c\x02\xd7\x25\x9c\x5d\x82\xdc\x25\xf5\xc7\x6a\x51\xe8\xa9\x01\x54\x9b\x49\x1b\xb2\x21\x68\x65\xd2\x2a\x90\x68\x09\x88\x47\x5f\x96\xe9\xaa\x1c\x68\xa8\x0d\x1c\x6a\x00\x85\xa0\xaa\x65\xf6\xfa\x76\x81\xbd\xc1\x04\x1b\x28\x63\xc7\x6a\x22\x1f\x44\x7d\xfe\xf6\x81\x60\x75\xcc\x96\x80\x68\xa2\x62\xdf\xb2\xba\x3e\xf1\x68\xdb\x64\x66\x56\x53\xfa\x1c\x6a\x3f\x87\xc2\xa4\x41\x4f\x14\x09\x7a\x22\x44\xcf\x00\x91\x40\xa6\x9e\x48\xd0\x13\x69\x7a\x8d\xf8\x54\x68\x53\xb9\x57\x08\xc4\x06\xe8\x04\x39\x9d\x24\xbc\x53\x2d\xf9\x08\xa6\x37\x52\x64\x72\x3a\x19\xbb\x2b\x1f\x91\x09\x29\xa3\x0f\x25\x34\xa1\x2c\x0a\x58\x20\xe3\xfa\x25\x97\x89\xea\x5b\x52\x72\x55\x18\xa9\xda\x32\x42\xbf\xdf\xa7\x54\x6c\xa3\x69\x86\x85\x57\x25\x48\x21\xe8\x93\x72\x7f\x2e\xe3\xbb\xcd\x58\x21\xd5\xdd\x9f\xb6\x06\x6d\x9b\xc3\x02\x78\xa8\x7f\x13\x01\x4f\xa2\x61\x03\x83\xaa\x71\xfa\xb5\x6d\x14\x6f\x26\x30\xe2\x40\x85\xc8\xb9\x5a\xc5\xd6\xaf\x42\x08\x94\xe4\x44\x40\xba\xea\x53\xd7\xbc\x7d\x16\x35\xdc\xd6\xc4\x65\x8c\x23\x8c\x49\xf5\xc2\x28\xc1\xea\x48\xdf\x38\xfa\x97\x38\xe6\x53\xd8\x76\x1b\xc6\x22\x70\x4b\x74\x82\x4b\x27\xa4\x94\x52\x52\xd5\x3e\x9f\x1a\x47\xfc\xc0\xb1\x03\x52\xa8\x4f\x19\xec\x48\x20\x14\x52\x4f\x2e\xe0\x14\xa6\x9d\x13\xa9\x21\x5a\xeb\x29\x4c\x3e\x69\xaf\x4a\x79\xd5\xa7\xc6\x15\x75\x28\xc8\x9e\xa8\x2f\x08\x0a\x25\xaa\xd4\xf2\x40\x94\x79\x28\x10\x27\x26\x80\x2a\xb5\x3e\xe5\x04\x34\x91\xa1\x12\x2f\xb4\x46\x68\x56\xeb\x48\x2d\xaa\x89\x6c\x92\x63\x64\x12\xaf\x4b\xc3\x51\x11\x7f\xaa\x4d\xbf\xa6\x37\x26\x0e\x86\xf4\x62\xab\x7e\xdd\x1c\xa6\x8d\xc2\x41\xc8\x27\x85\x46\x92\x44\x64\x6e\x55\xa2\x64\x21\xab\xd5\x47\x83\x74\x55\xa4\xde\x4e\x9b\xb7\x1b\x81\x04\x02\x05\xc5\xf9\xba\x3a\x55\x51\x1f\x3a\x8a\xa3\x46\xf8\x20\xab\x38\x2a\x06\x50\xc2\xd7\x59\xc2\xde\x3f\xf5\x5c\x54\x49\x8a\x00\x1b\x6a\x84\x66\xfb\xa8\xd4\x3e\xfe\xba\xa3\x40\xff\x7a\x97\x2f\x6a\xe7\xab\xc4\xf1\x59\x39\x1f\xea\xc7\xc7\x1c\xa3\x87\x1d\x9f\x34\xe0\x27\x79\xf8\xa1\x3d\xfb\x04\x75\x3e\xf0\x10\x52\x36\x41\xe8\x26\x14\xba\x84\x52\xd2\x1a\x71\x96\xa4\x3d\xc8\x09\x19\x9c\x1a\xe9\x73\xdb\xa1\x31\x22\xa5\x0f\xe0\x43\x12\x27\x50\x44\xd4\x88\x71\x09\x79\x04\xab\x1f\x40\xd0\x87\x96\x55\x91\x6a\x7d\xbb\x23\xa5\xfd\x85\x91\x20\x76\x03\x5a\x37\x00\x77\x03\x68\x37\x06\x9d\xf8\x01\x5c\x83\x64\xb4\x1c\x11\x9a\xb8\x1c\x08\xbb\xa4\x02\xd1\x18\xb7\x95\x6b\xa5\xd9\x6f\xab\xe4\xba\x82\xe0\x8d\xfa\x95\x1a\x77\x6e\xab\xed\xb6\x62\x2e\x97\x88\xd4\xe7\x10\xd2\x1e\x68\xed\xa4\x68\xea\x9a\x7d\x96\x2b\x67\x5f\x93\xd4\xe1\x4f\x49\xd7\xd5\x00\x91\x80\xfe\x02\xe8\x0f\xea\x3b\x02\x54\x07\x2e\x3d\xa0\xc4\x03\x8e\x3d\xa0\xc7\x03\xf6\x3b\x60\xce\x03\x32\x3c\x02\xbd\x1f\x0c\x79\xf5\x8d\x77\x00\xbe\xaf\xe9\x5b\xb8\x9b\x50\xee\x01\x91\x1e\x50\xee\x01\xc1\x1e\x90\xf0\xa1\xd2\x24\x60\xce\xab\xdf\xc7\xf8\x3d\xc2\xfc\x60\x59\x30\xed\x01\x09\x1f\x50\xee\xa1\x4a\x25\x20\xcf\x23\x94\xf8\x12\xe4\x89\x94\x68\x25\xc8\x13\xc9\x10\x23\xcb\x53\x6e\x0d\xd7\x87\x6b\x22\x81\x9c\x52\xb8\x39\xb2\x8f\x1c\xda\x3e\xb7\x8f\xf1\xa9\x40\xbe\x34\x6f\x22\xfd\x4d\xa4\x89\x04\x21\x83\xc8\x4f\x24\x92\xe0\x04\x39\x24\x0b\x59\x23\xc2\xff\x20\x00\x92\xc6\x88\xe4\x83\x1c\x50\x8d\x38\x2b\xba\xf5\xe9\xd7\xbf\xbf\x29\xa9\x3e\xee\x57\x8d\x48\xd5\xe6\x6c\xa8\x97\x5f\xe8\xf9\xa6\xa7\x99\xe6\x4f\x4a\xae\xa6\x59\x94\xe6\x15\xc9\xc7\xea\x3b\xbe\x4c\x75\x32\x41\x35\x52\xbf\x5f\x62\x36\xb9\xe0\x29\x25\x9b\x84\x67\x13\x79\xc9\xf4\x7b\xa6\xdf\x3c\x01\x3f\x27\x20\x2a\x62\x8c\x6a\x39\x6d\x04\x34\x12\x94\x0c\xd4\x62\x4e\x72\x19\xdc\x56\x4a\xe4\xe5\x54\xb5\x43\xf6\xe9\x6b\x39\x70\x5c\xe4\x89\x98\x79\x82\x3e\xcd\xf3\x53\x23\x26\xa6\xd1\x6e\x9c\xe4\xbf\x44\xcd\x94\xfe\x9d\xd2\x1d\x53\x3a\x7a\x72\xd0\x27\x27\x7e\x4a\x92\x4c\xee\xf5\x24\x39\x32\xb9\xec\xab\xc9\x26\x81\x17\x50\xcb\xc7\x52\x31\x86\x9c\x3e\x90\xbc\xc6\x92\x54\x5f\x0b\x58\x6c\xb5\xeb\xc6\xf1\x32\x87\x51\xda\xc7\x9a\x92\x06\xfe\x22\x72\x43\x35\x42\x87\xb8\x9d\xbc\x9f\x92\x31\xe7\x0c\xe1\xf4\x6a\xb7\xcf\x6f\x58\xed\xa8\x7d\xfd\x5d\x69\xdc\x6f\x00\x3e\x9d\xe8\xa8\x67\xbb\x7d\xed\x20\xae\x76\xe9\xc0\xd0\x38\x3d\xd1\x84\x94\x52\xfd\xd6\x93\x0d\xf2\xb6\x41\xd8\x04\x93\x62\x23\xf9\xde\x02\x12\xdb\x9d\xd9\xee\xc0\x06\x2e\xdb\x9c\xe0\x0d\x12\xb2\x05\x06\xb6\x7b\xb8\xc1\x5b\xb6\x10\xc8\xf6\x14\x36\x98\xcc\x76\xe7\x37\xfa\xb4\x7d\x5a\x94\x98\x03\xe7\x3e\x6f\xb2\xb4\xfb\xb4\x8b\x46\xb6\x8e\x4b\xbd\x39\xe2\x1b\xd0\x6c\x7b\xbe\x1b\xe9\xda\x96\x74\xda\xc8\x75\x90\xf0\xd5\x75\x5c\xe1\x76\xdf\xb9\x12\x14\x28\x76\xb6\x60\xcc\x46\xf9\x46\x36\xb3\xda\xfe\xeb\x38\x7c\x80\x03\x0d\xaf\x9b\xb3\x9d\x3f\xae\x1e\x47\xd0\x6a\x73\x3c\xd9\x83\x5e\x1d\xc5\x7e\x1c\xe9\xa6\xeb\xdd\xbf\xe8\xe1\x2f\x20\xcc\x55\x2d\x77\x41\xc5\x2f\x89\x8f\x8b\x24\xf5\x8e\xf6\xb0\xf8\x41\xd2\x32\xd7\xbb\x70\x51\xcd\x5d\xa1\x8b\x6b\x85\xb9\xa3\x65\x87\x91\x73\x83\x0c\x5f\xeb\xc3\x45\x93\x79\xad\x3f\xd7\x4a\x72\x47\x4b\x1c\x83\x1b\x58\x7f\xae\xd5\xe6\x22\xb1\xbb\x02\x57\x77\xb4\xa3\xc9\x0b\xb3\x3e\xdc\xd1\x02\xc8\x38\x40\xa4\x86\x2e\x98\xc9\x45\x96\x76\x09\x54\x5e\x00\x93\x3b\xda\xd1\x7c\x64\x8a\x5b\xce\xce\xf5\x79\x34\xb7\xbd\x48\xca\xeb\xa8\x70\xab\xef\x18\x5e\xe4\x73\x4d\x3b\x1a\x41\xa4\x6a\x8f\x4f\xf5\x71\x92\x48\x62\xdc\x4e\x44\xf0\x95\xae\x59\x4a\x46\xa9\x8e\x01\x76\x18\xed\xf1\x01\x12\x2a\x06\x46\x59\xf4\xbc\x71\x4f\x18\xe9\x79\x6a\x4f\xb0\xea\x79\x17\x1e\xa8\xd1\xf3\x1c\x1f\xb7\xfe\x79\xe3\x9e\x95\xe4\xd9\xf7\x71\xbc\x54\xcb\x77\x6b\x19\xbd\x86\x4b\xf0\x34\x41\x62\x9f\xb0\xc4\x6b\x5e\x14\x4f\xfc\x09\x39\x3c\x50\xd9\x77\xfc\x9e\x86\xe4\x23\xef\x7f\x2c\xf0\x4f\xa8\xfe\x13\xaa\xff\x46\x0b\x29\xf3\x8c\x50\x1d\x7f\xca\xbc\x3f\xb2\x24\xdf\xe0\x3d\x01\xef\x7f\xa4\xdb\xc0\xfa\xf2\x13\x06\xfe\x48\x37\x7c\x4a\x8e\x3f\x65\xd8\x9f\x32\x5a\x21\xd5\x6a\x11\x99\x83\x5d\x08\x45\xb3\x46\xaa\xdf\xc7\xf0\xda\x00\x3a\x50\x0a\x7d\x87\x9f\x88\xd2\xf8\xc3\xdb\xa3\xd0\xbd\xfc\x38\xe9\x88\x16\x72\xe1\x7f\xa1\x9a\x56\x9d\x94\x2a\x93\x52\x88\x34\x15\x32\xa5\x0a\xa5\x54\xde\x54\x5b\x10\x1f\x2d\x10\x9f\x07\xaf\x2d\xf8\x71\x88\xeb\xd2\xf1\xa8\x28\x06\x0a\x64\x70\xe9\x04\xac\x4e\xb0\xe8\xda\xbe\xc8\x32\x13\x78\x11\x56\x1f\xc2\xed\x83\x3c\xec\x10\x9e\x1f\x02\xe7\xc3\x5f\x34\x56\x76\xeb\x3a\x24\x5f\x56\xf6\x15\xf8\x6e\x52\x22\xee\xcf\x70\x1f\x5a\x8a\x79\x90\x1c\x1c\x02\xea\x03\x33\x49\x08\x87\x87\x10\x78\x99\x5f\x5a\x3e\x1a\xaf\x8a\x38\x49\x48\xb0\x04\xa1\xb9\x40\xad\x1d\x08\xce\x89\x42\x24\x49\x87\x1a\xe9\xb3\xfa\x78\x89\x11\x00\x16\xd4\x95\x81\xdc\x3d\x50\x6c\x06\x32\xd1\x00\x90\x09\x60\x99\x50\x7e\x1f\xe8\x2d\x51\x20\xd7\x48\xb7\x4f\x2b\x85\x82\xe2\xe1\x48\x6e\x20\xa2\x8e\x1f\x35\x40\xcb\xcb\x80\xc0\x10\x51\x11\x7c\xad\x3e\x6f\x0e\x1c\xc6\x5f\x21\x1c\x5b\x7d\xc7\x80\xc0\xf0\xbb\x53\x12\x49\x98\xb6\x46\xba\x45\x11\x22\x55\x82\x4a\x23\x85\xff\x11\x5b\x26\x62\xcb\x6a\x89\xcf\xb4\xbf\xd6\x7e\x56\x0b\x3e\xf3\x0d\x77\x7b\x67\xae\x83\xc4\x2b\x91\x4a\x10\xa0\xa8\x4f\x79\x88\x24\x07\x91\x4e\x01\x98\x27\x61\x8a\xea\x93\x9b\x6e\x9f\xae\x7d\x4c\xf2\x38\x78\x75\x40\xd4\x13\x2c\xbd\x8e\x31\xd2\x9e\x1d\x48\x0e\xea\x59\x90\xc6\x1a\xf7\x5d\xfc\xd6\xd3\xbe\xa1\xbf\xf1\xb4\x07\x7a\xfa\xc8\xfe\x55\x7e\x33\xe2\xae\xa6\x0f\x24\xe2\x37\xf9\x14\x13\x0f\xcf\x14\x13\x98\xa2\x01\x64\x2e\xaa\xef\x18\x14\x83\xa2\x0a\x53\x44\x65\x8a\xba\x4c\xe9\xb5\x29\xed\x33\xa5\x4d\xa6\xc8\x0c\x59\xda\x6a\x1d\xe9\xbb\x24\x97\xe6\x75\x7d\x42\x31\x53\xe2\x6b\xb6\x2c\x0f\x12\x59\xc2\x17\x89\xca\xba\x3e\x45\xaf\x8b\xad\x48\xe2\x6b\x4a\x9d\x4d\xe9\xaf\x29\x21\x36\xd1\xb2\x4e\x49\xb6\xd9\x62\x3e\x52\x67\x64\x37\x6a\xdc\x91\x48\x5b\xc8\x1f\x2d\x64\xc3\x0b\x81\xe2\x42\x39\xbc\xbc\xa7\x4b\xe4\x64\x89\xa5\x00\x35\xe4\x22\xff\x88\xa0\x21\xd7\xfb\x89\x1c\xa2\x21\x44\x39\xff\x35\xe5\x3c\x58\x13\x12\xc7\x1d\x2d\x6d\x8d\x98\x06\x35\xda\x16\x5b\xd8\x84\x11\x08\x62\x24\x40\x41\x4a\xec\x27\x38\x40\x4a\xdd\xd7\x38\x8a\x32\x9c\x48\xfc\xfd\x4d\xa0\x72\x8b\x2b\x6e\xc9\xb1\xed\xbd\xde\x22\x33\xdb\x6f\x3b\xa4\x41\xcf\xd7\x3e\x23\x16\x32\x04\x31\x07\xc3\xd2\x21\x9c\x7e\xac\x6c\x87\xdc\xfa\x01\x30\x3f\x5f\x33\x26\x39\x06\x61\xed\x11\x71\x3a\xd1\x7c\x4a\x52\x67\x58\xcb\x4e\x76\x5a\x4c\xd2\x0c\x27\xd5\x41\xa8\x7c\x90\x11\x1e\x91\x28\x8c\x5b\x89\x24\xb5\x46\x48\x6a\xe3\x59\x6a\xc6\xb3\x68\x59\x42\xb4\xbb\x81\x43\xc9\x5a\x77\xad\xed\x64\x37\xf2\x5a\xe1\x49\x67\xe4\x15\xf7\xb8\xa2\x6a\xf6\xd9\x44\xa7\x9d\xaf\x0b\x62\x24\xb7\x51\xd8\x44\x53\x1d\x21\x7d\xaf\x25\xcd\x08\x48\x17\x90\xf5\x27\x50\x8d\x06\x3b\xd0\x91\xd6\x22\x37\xf5\xb7\x71\xad\xf4\x1d\x20\x06\x41\xfe\xf2\x46\x41\xbc\xbb\x5c\x46\x7a\x4a\x9a\x62\x48\x26\x0c\x30\x84\x61\x07\x57\xcf\x18\x2a\x19\xcb\x0f\x25\x83\xd3\x42\xd3\x8a\x6f\x9a\x6f\x40\xbc\x97\xd8\x7e\xa8\x76\x0c\xf1\xb4\x20\xb2\x5a\xe3\x3e\x6d\x2f\xb2\xcf\xe5\xf9\x36\x20\xfd\xb6\x9c\xf5\xd7\xc7\x93\xbf\x26\x92\x83\xa4\xb6\xe3\xcc\xa1\xec\x26\x40\x45\x42\xb1\x48\xf0\xac\x83\x77\x1f\xa0\x2b\xea\x94\x43\xfa\xba\x46\x78\x7c\xd2\x5f\x7c\xff\x58\xed\x5d\x82\x6f\x2b\x93\x0a\x51\x82\xe0\xd1\x23\x02\xac\x11\x57\x03\xf8\x5a\x5d\x7a\x78\xc9\x59\x83\x51\x2b\x0b\x4b\x24\x53\xe4\xbc\x22\xa3\xbd\x36\x05\x34\x2c\xbd\x8c\xf6\xc8\x00\xa9\xa2\x25\x7d\x7e\x5e\x1e\xe9\xc2\xd1\x1e\xa5\xab\x1d\xe3\xa7\xaf\xc9\xa7\x3b\xdd\x3a\xf2\xeb\x6f\xe1\x39\xee\xfe\x76\x7e\x25\x6f\x54\x42\x26\x07\xd9\x6d\xa9\x4b\xc9\xe7\x48\xfe\x48\xf2\x9a\xa5\xa6\x43\x42\xbb\x46\xba\xaf\x24\xa8\xe1\x63\x1f\x8f\xcf\xf5\x2f\x60\x17\x8b\x2e\xaf\x02\x3b\x31\xff\x14\xa5\x4f\xf1\x81\x6c\xe9\x45\x30\xde\x6c\xc1\x22\x24\xee\x09\xea\x92\x22\xf9\x29\xc2\x9f\xc0\xb3\xe4\x64\xeb\x0a\x7c\x4c\xbf\xbf\xef\x24\x09\x82\xbc\x52\x82\x9d\x6c\x04\x4b\x49\x74\xbc\x29\xd6\x31\xf9\xb3\x13\xfc\x79\xce\x66\xa4\x00\x0c\xe7\xef\x58\x6f\xcb\x77\xe3\xc1\xed\xf6\xe0\x3e\x3e\x60\xfb\x86\xda\xba\xda\x04\x6c\x99\x4d\x65\x22\xfa\x31\xdb\x57\xe5\xff\x62\x81\x0b\xf4\x49\xd5\x37\x0e\xaa\x06\x9e\x8c\x1a\xb6\xfa\x04\xc0\x81\xdc\xdd\x87\xd9\xdc\x7d\xde\x20\x84\x59\x35\x22\x01\x08\x2a\x2e\xee\xb1\xba\xdc\x53\x7c\x63\x89\x0b\x2d\xf3\x8a\x9c\x48\x4d\x5e\x7d\xe0\x2f\x05\x3a\xcb\x4c\x5b\xe0\x4e\x6b\xb5\x0f\xf8\xfa\xdc\xfe\xb4\xcf\x22\x36\x0e\xae\x6e\xe6\x2f\xde\x0a\x5a\xf4\x6a\xf5\xd1\x42\x83\x68\x2d\x73\x9e\xbc\x49\x8d\xfb\xc6\xd9\xfd\xfe\x2e\xc7\x2b\x64\x54\x56\xb5\xd6\x8f\xb6\x86\x2f\x69\x04\x58\x69\xbd\xf6\x2e\x9d\xfb\x5c\x99\x70\xc4\x42\x77\xbd\x25\xb2\x76\x8b\x81\xcb\x31\x91\x37\x09\x02\x26\xb1\x25\x66\x37\x32\xa0\x4d\x5c\x62\x83\x04\x6e\x44\x39\x9b\xc4\xc1\x46\xbd\xb4\xc1\x03\x37\x11\x6f\x2b\x7f\x00\x3b\xc4\x6e\x6a\x2d\xa5\xa2\xdb\x6a\x23\x1a\x19\xdb\xcc\xd9\xe6\xd5\x26\xa4\xb9\xc5\x37\x76\xf3\x25\x9a\x99\xdb\xd3\xdf\xf2\x4d\x1b\xf1\xd0\xb6\x46\x6d\x10\xce\x0d\x06\xb5\xad\x3c\xdb\x73\xdf\x0a\x91\x11\xdf\x96\xf7\xea\x7b\xa5\x34\xbd\x23\x80\xbd\x61\x9f\xaa\x6b\xf6\x2f\xec\xeb\x3b\x46\x8a\xd2\x3c\xd9\xa8\x8e\xb6\x37\x62\x5b\x0f\xb7\x19\xb5\xcd\xb1\x2d\xa2\x02\xbe\x11\x62\xaa\x21\xca\x1a\x60\x1d\xf5\x1b\x8c\x67\x7f\x4a\x7a\x9d\xe7\xde\xe5\x05\xe2\x30\xa4\x71\x83\x70\x6e\xb5\x44\x32\x01\xdb\x3d\xfd\xe3\x59\x1f\xf1\xcc\x23\xd2\x75\x16\x08\xdb\x6e\xaf\x96\x87\x6b\x67\x39\xbc\x9e\x3b\x50\x77\x2b\x95\xbb\x4a\xe5\xae\xb5\xe8\x7a\x3a\x24\x76\xe3\x7a\x82\x37\x64\x06\xc1\x36\x2f\x50\xd8\x15\x5b\xb8\x8a\xea\xae\x67\x7a\x95\x17\x5f\x45\x12\xd7\x6a\x79\x95\xd9\x5d\x4f\xff\x2a\xad\xbb\xa2\x43\x37\xda\x0f\x25\xaa\x69\xcd\xbc\x4a\x27\xaf\xa2\x8a\x1b\x20\x69\x00\x68\xd7\x4a\x78\x95\xe8\xdd\xe8\x5f\x4b\x8a\x4a\x59\xc6\x55\xb4\x77\x95\x59\x5f\xc4\x6d\x57\x94\xe9\x2a\xf2\xb8\xd6\x6a\x7b\x71\x8d\x68\x89\x65\x29\xcd\xbc\x21\xa7\x29\x36\x75\x41\x3f\xae\xc8\xc9\xb5\x4a\x5f\xb9\x48\xa4\xf8\xe5\x0b\xf3\x5e\xfd\x5d\x76\xb4\x4b\xbe\xec\x2a\xfa\xb9\x84\xf1\xaf\x22\xa1\xeb\xad\xb9\x4f\x4e\xd3\x7b\x84\x50\x3f\x2e\x3a\x76\xc2\x32\xf1\x94\x55\x3d\x80\x0e\x04\x42\x81\x41\x28\xd0\x0a\x05\x86\xa1\x1a\xe1\xf9\xca\x3c\x7a\xd6\xc8\xd1\xca\xc3\xe5\xff\x2a\xb3\xb3\x12\xa2\xc0\xab\x3e\x8f\xb8\x0b\x0b\x4e\x1f\xa9\xff\xfa\x3a\xe5\xd5\x9e\xd9\x2d\x71\x51\x10\x3c\x10\x95\x07\xc8\xf0\x9a\xc4\x90\xbc\xde\x13\xc9\x21\xd9\x57\xc7\x18\x07\xbe\x03\x88\x78\xa2\x34\x0f\x5c\x85\xa0\x5f\x3c\xfe\xfe\x43\x31\xfb\xf1\x38\xd0\x09\xe4\x07\xb0\xf6\x0d\x84\xe8\xc8\xa4\x89\xfe\x55\xbf\xc7\x79\xca\x72\x9a\x58\x37\x95\xd0\xa5\x52\xb6\xfc\x90\x58\x7f\x20\x5d\x00\x44\xd5\x92\xa0\x27\xff\xc5\x37\xfc\x78\x85\x1f\x09\xa6\x8f\x47\xf9\xad\x26\x68\x57\x6e\xc8\x37\xf9\x90\x43\x7f\xca\x0a\x3f\xc0\x7c\x84\x65\xd5\xe7\x11\xbb\xce\xf5\x5d\x72\x6a\x1f\x50\xd5\x27\xb3\xf6\xb5\x28\x19\x76\x50\x94\x58\x89\x92\x23\xb1\x73\x24\xe8\x50\x22\xee\xc8\x81\xf4\x77\xa0\x5f\x24\xa4\x93\x28\x0d\xaa\x2f\x8f\x29\x87\x28\xeb\x34\xc0\xfc\x07\x81\xf4\x41\x24\x6a\x90\x64\x1c\xeb\x37\xce\xb7\x95\xfd\x24\x6d\x3d\x56\x7b\xd6\x2d\x30\x22\x5f\x49\x98\x11\xfb\x44\xb2\xd3\x32\xfc\x86\x40\xbf\x48\xa8\x30\xb1\x3a\x55\x4b\xec\x54\x56\x91\x9d\x4c\xd8\xb0\xfa\x8e\x01\xd3\x1b\xed\x2f\x83\xf5\x7d\x2d\x82\xfa\xbb\x66\x5f\xad\xfd\xe2\xba\x3e\x4b\x3e\x64\xdc\x42\x2e\x2f\xe4\xfb\x02\x0f\x6a\xec\x96\x31\x01\x2a\x3c\xa4\xc9\x90\xcd\x05\x3a\x42\xc5\xcd\x99\x9d\x21\xe5\xb9\x80\x0b\x55\x8b\x8e\xa2\x25\xc8\xc8\x9b\xf8\x46\xb0\xa3\x1a\x71\xcc\x45\x1e\xdf\xa2\xa9\xbb\x65\x4f\x50\x32\x9f\xee\x83\x04\xf2\x2e\x11\x3f\x67\x76\x11\x09\x00\x60\x36\x30\xd0\x35\x8f\x91\xe3\xca\xb8\x52\x95\xbb\x65\x36\x75\xe6\xe5\x33\xca\x86\x03\xc2\x27\x80\x52\xb5\x04\xf3\x01\xfd\x9a\x8e\x0d\xa8\x13\xb8\x3e\x01\xe7\x53\xf9\x5d\x82\x2f\x65\x62\x12\xce\xc3\x0b\x46\x33\x9f\xa7\xbd\x5a\x3e\x2f\xc8\x67\xa2\xf9\x07\xae\xaf\xeb\xf7\xf8\xf1\x2d\xe4\xf7\x65\x3f\xc5\x6d\x52\xb9\x6a\x8a\x0f\x24\x4a\xb8\x44\x77\x9d\x08\xd7\x13\xf7\x72\x82\x97\x26\x31\x37\x30\xff\xfa\x5b\xfa\x9a\x5a\x77\x09\x55\x76\x1e\x3e\xfe\x69\xdf\xb9\xfd\x77\xf7\x53\x09\x8b\xa2\x81\x04\xc5\xca\x09\xe4\xa8\x68\xbb\x5a\x92\xb0\x4a\x61\x44\x66\xa6\x48\xce\xf4\xf6\x4d\x11\x9e\xe9\xed\x9b\xfc\x9d\xe9\x1d\x9c\x22\x39\x73\xb5\xa8\x2c\x6a\x51\xbe\xcf\xbc\xed\xb1\xa2\xc1\x7e\x2d\x24\xfb\xb5\xec\x7f\xf7\xab\xfd\x47\xa7\xed\xa3\xe2\xf6\x71\x6d\x5b\x41\x96\x3b\x6e\x99\x59\x5c\xd2\x89\xe9\x60\x09\x56\x2d\xa9\xef\x15\x8d\xa1\xc4\x9d\x28\x4c\xb5\x28\xf6\xa9\xe8\xab\x96\xd6\x2c\xde\x6d\xdc\x07\x50\x56\xb9\xa6\x73\xb3\x15\x67\x47\x8f\x70\x94\x5f\xb7\xc7\x08\xdd\xd9\xaf\x5b\x3a\xb5\x7e\x38\xf4\xf0\xc2\xa1\xb0\xa8\xa5\x2e\xce\xfa\x6a\x5d\xb4\x4f\xbd\x10\xe0\xc0\x56\x8b\xb5\xa5\xe5\xf7\xd7\xce\x34\xdd\x59\xbf\x96\x41\x94\x5b\xed\xd3\xa6\x45\xb4\x13\xdf\x77\xb4\xba\x1b\x0c\x28\x26\xc9\x8d\x80\x79\xe3\x95\xa5\x3e\x95\xb4\xa6\x92\xee\x54\xf5\xb9\xda\x98\x3c\x25\xed\x21\xe0\xab\x35\xd2\xda\x6f\x5c\x76\x69\xff\x4d\xeb\x77\x4b\xbf\x43\xf9\x27\x54\x7d\x42\xd5\x57\xbf\xc7\x8d\xf8\x96\xd5\x7c\xe2\xbe\x9d\xdb\xba\xa5\xa3\x0f\x45\x84\x43\x17\xff\x0c\xca\x37\x90\xd6\x67\xe0\x8f\x00\x81\x39\x03\x4f\x20\xde\xd1\x43\x7f\xe8\x50\x27\x3a\x03\x75\xf1\x88\x1e\xe7\x9a\x63\xa0\x08\x9f\xd2\x87\x38\xb4\x1f\x8e\xb4\xf6\x41\x14\x8d\x5b\x35\xcf\x6c\xee\x41\x49\x66\x4f\x04\x63\x61\xbd\x69\x5c\x79\xc9\x6a\x61\x8f\x43\x8d\xe6\x08\x5b\x9e\xa4\x39\x97\xcd\x49\x2b\x59\xed\xb9\x1f\x6a\x6d\xc7\x33\x3d\xea\xc6\x0f\x0d\xa1\x93\x9d\xa6\xbe\xdd\x6f\x77\xff\x70\xf4\x97\x76\x6a\xe9\xf1\x50\xcc\x85\x15\xa6\xb2\x59\x2d\xd7\xbf\x95\x7b\xb0\x35\x42\x21\x5f\x48\x6b\x5a\x5c\x49\x01\x25\x29\xa6\xe4\xb5\xfc\x5c\xcb\x52\x73\x48\x0a\xc9\x27\x35\xf1\x7c\x63\x9e\xbf\xf9\x8d\xdd\x14\x87\x9d\x06\x6f\x5e\x1e\x4c\x37\x12\xd1\x40\x4f\x1f\xa0\xd3\xa7\xca\xa5\xb5\xe2\x3e\x58\x3a\x94\x8b\x41\x41\x27\xb0\xe3\xd6\xb8\x4f\xd5\xa5\x83\x44\x7d\x70\x93\x1f\x08\xd5\x07\xc9\xf7\xa9\x85\xf8\xa0\xee\x68\xf0\x04\x55\xad\xda\x75\xd4\x89\x09\x1e\x48\x35\x0c\xa9\x8f\xc1\xd8\x19\xaa\xa0\x91\x1b\x05\x15\x93\x6a\x85\x04\x60\x6d\x9b\x6f\x48\x65\xe6\x50\x35\x3d\x5a\xc1\xf7\x49\x80\xf7\xf5\xd5\x45\x0c\x86\x30\xbd\x93\x1a\xf1\x29\xdc\x2d\x43\x6c\x30\xd3\x02\xba\x8e\x0e\x4a\x8d\x3b\xb2\xf9\x38\xa4\xa3\x05\x4b\x82\x21\x1c\x02\x2a\xb1\x5b\x97\x57\x72\x58\x8d\x65\xa8\x2e\xb0\xb9\x05\x78\x4e\x1d\x69\xbc\x43\x0b\xd1\x9f\x76\x40\x42\x5f\x2d\xd9\x6e\xdd\x20\x0e\x3a\xbe\x9b\xe4\xfa\x24\x53\x34\x39\x37\xc9\xf8\xcd\xe6\x98\x65\x4a\xd3\x3e\x09\xea\x02\x81\xc8\xbc\xc6\x7d\x2a\x55\xcb\xac\x4e\x68\x57\xac\xce\x35\xd2\xc7\xf4\x88\xd0\x42\x27\xab\x2f\x6a\x79\xe9\x5f\x29\xee\x94\xf4\x06\xa8\x29\x47\x9f\x2a\xb0\x6f\x14\xaa\x49\x30\xbd\x14\x6e\x49\x4e\x55\x4a\xf2\xa4\xa0\x4b\x4a\xf2\x64\x73\xee\x70\x07\x27\x30\xe0\x94\x12\xa7\x10\x56\x0e\x7a\x8f\xc0\xe6\xe2\x94\x8a\x56\x17\x86\xbe\x65\x4a\x4f\xe6\xf9\x54\x35\x3d\xd5\x1a\x09\xbb\x86\xe0\x68\xb9\xda\x34\x80\x21\x6e\xfb\x5b\x04\x21\x6c\x08\x31\xb9\x41\xd3\xef\x9c\x80\x0f\xb6\x8b\xea\x53\x11\x86\xc1\x15\xa8\x98\x5c\xba\xd5\x6b\x48\x33\x77\x48\x9d\x2d\x69\xb4\x25\xa5\xb6\xb8\x41\x14\xc5\xca\x05\xe7\x46\x43\xc1\x42\x73\x52\x67\x89\x65\x56\x2c\x01\xb3\x05\x3c\xb8\xc0\x03\x97\x9a\x93\x65\x0e\xd0\x66\x08\xd4\xef\xd5\x2e\x9f\x1a\xa1\xdb\xa4\xba\x6c\x09\xd1\xad\x3d\xbb\xfd\x5c\xc7\xa7\xd2\xbc\x6a\xd5\x96\x50\xdc\x12\x96\x5b\xde\xa3\x25\x68\xb7\xcc\x3d\x3a\x31\x41\xf3\x2c\x68\x3f\xd4\x59\x8e\x94\x7c\x56\x43\xb5\xbc\x05\xdb\x6c\xa7\x12\x5a\x8e\x35\x57\x9b\xcb\x1b\x9d\x04\x5e\x3d\xd2\x7d\x6e\x37\x77\x99\x1b\xb4\xe3\xa7\x26\xc2\x49\x85\x97\xe5\xdc\x6c\xe8\x79\x8a\xe6\x41\xe7\x2c\xa8\xc2\xc4\x7e\xb3\xdb\xe7\x78\xc7\x48\xd5\xe2\xa3\xd9\xfd\x7b\x9e\x4a\xec\xfe\x55\xde\x68\xfa\xe8\x75\xa4\xb6\xdd\x6b\x89\x5f\x01\x42\xca\x6a\xe5\xfe\x96\x4b\xfa\xaf\x0f\x74\xd2\xf5\x43\xda\xe7\x7f\x7d\x78\xff\x10\x2d\x6f\x19\xdd\xcd\xee\x18\x84\x05\x63\x77\xfe\xdb\x92\xb3\x15\x67\xed\x96\x68\xe4\x83\x6d\xf4\x0b\x5b\xde\x91\x50\x7b\x6c\xd9\x4a\xac\xfa\x75\xb5\xf2\x9c\xa7\xe2\x2c\xb9\xf9\x33\x57\xfb\xd8\x28\x8a\xfd\x40\xd9\xc7\x53\xf6\xfa\x6e\x22\xf0\xb3\x9b\xb0\x05\x84\xd8\x02\x70\x3c\xc0\xd3\xa2\x57\x24\x5a\x2e\xac\xc3\x05\x08\xbf\xf0\xac\x54\x31\xea\xd3\x67\xe4\x68\xcb\x3f\xe4\x07\x5e\xe5\x84\x17\xf5\x07\x15\x8d\x40\xa7\x5d\x23\x8e\xe7\x5d\xf3\x12\x2f\x22\x91\x8b\x42\xe4\x2a\x39\xbc\x8a\x0a\x2f\x91\xaf\x9b\x7c\x63\xc5\x86\x37\xf9\xb1\xca\x18\x2f\xf2\x90\x0b\x7b\x41\x26\xbe\xbe\x5d\x1f\x2c\x39\xc1\x95\xd1\x34\x91\x4f\xad\xb3\xb4\xb2\xb6\xa0\xf5\x17\x99\xd2\x95\xa3\xbd\x8a\x1c\x6f\xb6\x3f\xac\x28\x4c\x71\xeb\x23\xd6\xf9\xa0\x8a\x51\x11\xd7\xa7\xa9\x4f\x30\xba\x7e\xe1\x43\x3f\xf2\x2c\x2d\x0f\x76\x19\x57\x70\x1d\xa9\xdf\x59\x67\x59\x58\xcf\xe8\x29\xb0\x45\xdb\x5c\x23\xce\xf2\x1b\xcc\x81\xf7\xb5\xf0\x34\x3f\xd6\x92\xf3\xd0\x10\x3d\x7f\xcb\x23\x7f\xf6\x14\x5a\x3e\xf7\xe7\xad\xa6\xea\x57\x4a\x2f\x5a\xfa\x44\x48\x1f\xa9\x6b\x84\xd0\xd5\xca\x10\xcb\x37\xc3\x2e\x3c\x78\x91\x07\x41\xf2\xc4\x1f\x1f\xf4\xc9\x6b\xf2\x6f\xe5\xb1\x0f\xee\xe4\x41\x2d\x3c\x28\x84\x07\xbf\xf2\x08\x8e\x3f\x5b\xc4\xb3\x18\xbf\xd7\x04\xf0\xab\x71\xc3\x30\xc4\x50\xbc\x8c\xd9\xef\x53\xae\xf8\xc9\x0d\x0f\xd8\x5f\xc6\xec\x17\xbf\x11\xa2\xd8\xe4\x05\x08\x60\xa1\xb6\x4b\x64\x77\x89\xf6\xad\xfa\x7c\x6c\x08\x60\x45\x64\x1f\x64\xed\x27\xe7\x81\x88\x26\xbf\x6c\xac\x70\xb4\xe7\xac\x95\xc3\xe6\x8b\x7e\x0b\x0a\x79\x2d\x7d\x3e\x39\xe9\x46\x98\xb6\xfa\x94\xef\x0d\x25\x2c\xbb\xf3\xed\x32\x7f\x3e\x5a\x14\xdf\x55\x34\x07\x41\xf8\xc1\x14\xa2\x06\xaf\x3e\xaf\x7b\xf5\x88\x63\xfc\xd5\xe8\xc9\x3f\x6a\x16\x9f\xc2\x34\x2a\x29\xd5\xe7\x93\xb7\x74\x9a\xec\x35\x5f\x11\x7e\x2e\xf1\x60\x96\xa7\xfd\xaa\xe5\x45\x47\x63\x8e\x95\xd4\x21\x98\x1f\x68\xce\xe5\x39\xaa\x0f\x8b\x2c\x3f\x8d\x08\x71\x90\x4e\x46\x6e\x93\x28\xc2\xca\x3f\xe7\x93\xeb\x33\x7b\x07\x03\x19\xf9\x4c\xf5\x53\x9f\x67\x0e\x31\x0c\xb3\x8b\xb8\x26\x11\xd7\xd4\x38\xf9\x6f\xa2\xa2\x30\xbe\x83\x29\x2d\x5f\x92\xb2\x20\xe5\xbd\xf3\xc3\x89\x7a\x43\x7e\x07\x03\x39\x64\x80\x08\xe9\xd6\x38\xbf\x9d\xcf\x4c\x9a\x93\x2c\x6f\x8d\xf7\x31\xce\x92\x93\x86\x26\x8f\x91\x7d\xcc\x32\x02\x5b\x2c\xeb\x0c\x3b\x1b\x7b\xb4\xdf\xde\xe3\x32\xd9\xbc\x7a\x39\xdd\x68\x62\x72\x1e\x63\xf0\x12\xa3\x7d\x51\xdf\x02\xf1\x96\x50\x71\x09\x97\x56\x23\xe4\xc2\x95\xd1\xf9\x85\xc9\x28\x68\xc1\xcd\x44\x57\x9f\x7e\x33\x24\x5c\x42\xcb\x95\x6f\xdf\x23\xfc\x73\x9e\x2d\x49\x26\xe2\xbf\x49\x66\xb1\x5a\x99\x69\x38\xdd\xaf\xee\x40\x9a\x51\x79\xe1\x89\x09\xb5\x27\x11\xd2\xe4\x6c\xe5\xeb\x63\xf8\xde\x66\x0e\xa4\x5a\x26\xa2\x86\xbc\x3c\xff\xce\xa3\x9b\x7b\x89\x5a\x8a\x11\x94\x72\x12\x99\xe4\x17\x18\x47\x35\x42\x9a\xbc\xbf\x91\x77\x2d\x7e\x91\x04\x16\x12\x39\x7d\xa2\xa2\x92\xff\x48\xe6\x52\x8d\x6b\x79\xf8\x22\x4a\x0a\xed\x6b\xc4\xb9\x7c\xfe\xdb\xfe\x7c\xfb\xf9\x3c\xf0\x27\xa7\x2e\x4a\x92\xb7\xfd\xf6\x8e\x44\xf0\xd5\x49\x88\x24\xf5\xa3\x84\x18\x4e\xef\x88\x9c\x4d\xc2\xe7\x25\x1c\x5e\xfd\x8d\xfe\x5e\xf7\x1c\x5a\x37\xa1\x07\x92\xa7\x9d\x72\xa8\x8c\xbb\x94\x65\x49\xe4\x69\x89\x36\x2d\xe7\x22\x1f\xb1\x7a\x7c\xb5\x9f\xcf\xab\x6f\x99\xf5\xf6\xe1\x57\x9f\xe5\x53\x79\x68\x18\xe2\x69\x65\x98\xde\xfd\xd9\xf2\xac\xdc\xdc\x05\x71\xbe\x38\xb8\x44\x99\x6b\x9c\xfb\x9e\x7d\x0c\x97\x9d\xa8\xc8\xd7\x6e\x7a\x8b\xc6\x42\x33\x73\x76\x17\xc7\x77\x91\x0a\x41\xd1\x53\xad\x4c\xb6\x30\x00\xcd\xaa\x95\xed\x7c\xc3\x43\x8b\xac\x41\xdd\xa5\xd2\xa7\x72\xd9\x39\xfa\x44\x15\xe0\xb9\x97\xb8\x1b\x6c\x5f\x8d\x70\xdf\xa9\xf8\x20\x00\x59\x73\xb5\x00\x9f\x56\x00\xa0\xc9\xf8\x11\x92\xac\xc6\x5e\x43\x63\x2f\xa2\xe7\x04\xa0\xab\x85\xbd\x26\xb6\x65\xed\x85\xb4\xcb\x4d\xfa\x46\xfe\xa3\x5a\x2e\x3e\x69\x75\xc2\x38\xbb\xdc\x82\x6a\x9d\x85\xd3\x5e\xdc\x90\xce\x53\x6e\x72\x2b\xe4\xde\xaa\x15\x06\xa8\x3b\xb6\x13\xc2\x5b\xc1\xf2\x26\x9f\xb2\x49\x0a\x6c\x68\xfe\x0d\xc3\xb1\xe1\x39\xb6\x28\x98\x72\xfb\x72\xfa\x49\xfe\x7d\x1d\x06\xa0\x30\x24\x60\x60\x35\x50\xda\x9f\xca\xff\xab\xe5\xd0\x2b\x2c\x85\x2c\x67\x8f\x25\x43\xaf\x46\xb8\xe6\xc4\x6a\xad\x4b\xc7\x1b\x7d\x48\x0c\x1f\x6f\xfa\xb1\x16\x1d\xab\xd3\xb1\xa6\x1d\xba\x5c\x44\xab\x13\xea\x2e\xd9\x54\x79\x10\xb8\x1d\x74\x2e\x67\xb6\xc3\x2d\x00\x40\xc8\xe5\xd0\x46\x3a\xf2\xe5\x07\xb1\xdb\xf1\x74\x20\xf9\xf2\xa8\x72\x21\x42\x9a\xf2\x1f\x75\xbc\x63\x3a\x00\x00\x83\x3e\x7d\xef\xe4\xe2\x43\x6c\x1c\xb3\xe2\x98\x03\x07\xd9\xcb\x81\xdd\x3f\xd0\x1e\x47\x85\x00\xab\x2f\x65\x53\x92\x35\x58\x67\xd1\x33\xfb\x68\x9b\x71\xd6\xcd\xba\x4b\x5a\xe7\xda\x1f\xaf\x18\xee\x5d\x84\xe3\xbd\x4d\xd7\x9a\x7f\x49\xe7\x5f\xd8\x97\x4b\xea\xe1\xd2\xb2\x6a\x21\x85\xab\x98\xfa\x12\x1a\xbe\x62\x76\xf0\x73\xd5\xd2\x3c\xab\xef\x7d\xa2\xb1\xa4\x4e\xcb\x43\x83\x0c\xa8\x99\x43\xaf\xab\x5a\x0a\x67\x04\x3d\xec\x50\x4f\x20\x81\x95\x32\xc5\xdc\xa7\x38\xfb\x14\x5b\x9f\xd0\xf0\xf3\x3b\x2d\x7a\xd3\x68\x00\xb8\x79\x58\x37\x84\x3f\xa1\x2c\xbd\x46\x88\xe7\x2a\xec\xfd\x1d\xaf\x44\x77\xb7\x54\x0e\xd2\x18\x08\xdd\x0f\x8d\xd8\x77\x5a\x56\xe5\xeb\x90\x80\x30\x00\x9c\x3a\xa4\xf2\xe0\xa4\x0e\xae\xed\x90\x4f\x1a\x4d\xbd\xa2\x92\x2d\x10\xa4\x84\x4a\xb6\x60\x07\xaa\x93\x09\xf5\x33\x01\xa1\x15\x2a\x6d\x6a\xc4\xf1\xf0\xe5\x2c\xcc\x50\x34\x17\x5f\x5f\x0d\x82\x1c\x31\x4b\x70\xb9\x42\x05\x97\xa8\x74\x44\x53\xc4\x08\x5d\x28\x6c\xaf\xd6\x31\xae\xcf\xd5\x0b\xd5\x5f\xb1\xe1\x09\x84\x40\x42\x51\x61\x70\xbf\x54\xe3\xd4\xa7\x8e\x47\xb9\x29\x94\x12\x42\x2c\x8a\xe2\x23\x64\xfe\x32\x1a\x07\x20\xaf\x8f\xc8\x34\x65\xc5\x52\xbe\x27\x65\xce\x32\x0e\x47\x5f\xde\x1d\xc5\x62\xc2\x61\x64\x34\x6e\x40\x66\x1d\xc6\x54\xbc\xbb\x5a\x57\x5e\x7d\x56\x8f\x28\xb0\x95\xb3\x97\x69\x56\x78\x1e\x50\x59\x91\xca\xa2\x93\x33\x67\x7f\x8c\x84\xb6\x4c\x1e\x50\x72\xdd\x92\x07\x94\x1c\xb8\x6c\xfa\x50\x3e\x97\xbd\xa6\x5a\xc7\xcf\x0e\x12\x68\xe5\xc2\xe1\xd1\xc9\x88\xc7\x1c\xa8\x57\x64\xd7\xa6\x9c\xdc\x94\x5d\x9b\x28\xd4\x26\xf4\x06\xf5\xb5\xa0\xd0\x56\xfd\x1e\x51\xae\x0b\xbd\xad\x8c\x74\x2a\x50\x9d\xeb\xe7\xe2\x77\x30\x40\x1f\x92\x1b\x46\x64\xfa\x85\xaa\x62\x82\x4c\x4a\xb5\x3d\xd2\x9f\xd6\x37\x0a\x02\x4d\xde\xe2\x14\xd2\x98\xc2\x3f\xf3\x75\xb0\x21\x3b\x60\x30\xf4\x1d\x13\x1d\x4e\x50\xc6\x1b\xa4\x39\x9b\x0a\xb8\x9d\x7e\x59\x73\x05\xaa\xe4\xad\xaa\xad\x11\xf3\x7f\x75\xf1\xaf\x77\x64\x21\xd9\x5b\x72\x63\x0b\x99\xde\x52\xbe\xba\x58\xfe\x4b\xf8\x8d\x9c\x4b\x5d\x81\xbb\x0f\x25\xb0\xdb\xc5\x87\x06\x90\x8b\x5d\x66\xe9\x3a\xed\xf4\x23\x8d\xf1\xde\x2d\xef\xd7\x42\xd6\xba\xbc\x8f\xcb\x7b\xb7\x9e\x6c\x37\x5f\x69\xbb\xff\xdb\xdc\xd8\xd1\xaa\x81\x46\x50\x36\xed\x16\x2c\x42\xda\x73\x94\x75\x9f\x26\xd0\xe6\x55\x1d\xc5\xdd\x47\xfe\xfe\x74\x05\xa9\x42\xe0\x83\xc8\x1a\x3d\x66\x7d\x9a\xfa\xc6\xa1\xa8\x79\x73\x47\xf9\xea\x51\x00\x8e\x7c\xa0\xfa\xc6\xd1\xaf\x7d\x1d\x12\xe0\x23\x7f\xaf\xaf\xe9\x98\xab\x2f\x1b\x0d\x33\x7d\x48\xa3\x9e\xaf\xbd\x72\x05\xb3\xe8\x28\x4f\x97\xc1\xaa\x88\x40\xcb\x19\x68\x39\xeb\xfa\xda\xdd\xbf\xa1\xbf\xb7\xbd\x75\x68\x6f\xdf\x8b\x44\xeb\x40\x60\x1c\x94\x35\x67\x75\xa6\xbc\xe5\x50\xaf\x62\xde\xd9\xfe\x72\xb5\x13\x72\x5a\x39\xf6\x55\x8e\x7d\xa1\xf3\x2f\x0c\xca\x55\x38\x7f\x15\x6e\x5f\xb1\x82\xab\xc8\xfa\xa2\x26\xb8\xea\x4e\x2f\xea\xdd\x2b\x2b\x8f\x32\xb4\xce\xd2\x6f\x4f\xb9\xfe\x8a\x8b\x5a\x0a\xd5\x7c\x08\x09\xd7\xf5\xf9\xd7\x30\xdc\xe2\x0f\x57\x79\xfe\x15\x79\xb8\x4a\xfe\xaf\xbf\xe8\x2a\xf1\xbe\xca\xdb\x9b\x06\x1c\x51\x43\x8d\xf4\x6f\xeb\x5f\xdb\xd7\xd7\x87\xcf\x86\xeb\x42\xe6\x10\x28\x4c\xeb\x78\x7f\x9d\xbf\x1d\x05\xd6\x85\x2a\x78\x8a\xfa\xdf\xa7\xba\xd5\x93\x7a\xe6\xc3\x73\x9f\xdf\x27\x1b\xed\xf9\x3e\x05\xe3\xcf\x5c\x7a\xe6\xd5\xa3\x61\xf9\xa2\xa5\xb7\xd5\xd6\xa6\x8a\x5c\xd4\x49\x0f\x25\xe9\x43\x10\xf1\xe0\xb4\x1e\x94\xcc\x53\x23\xf4\x9a\x6c\xf6\x42\x7e\xdf\xba\x1b\x4f\xe5\xd2\x53\xa1\xf4\x10\x02\x3c\xb4\x7b\xcf\xfe\xf2\xbc\xd7\x2d\xf8\xf6\x21\xbb\xf8\xbe\x96\x9a\x95\xc1\x95\x22\xf8\xa4\x0e\x90\x9c\x57\xbb\x8c\x13\xf8\x56\x8b\x2b\xd5\xf3\xf1\xe6\x3e\x5e\xde\x67\x0f\x55\x1b\x96\xea\xc7\x52\x5d\x59\xaa\xfb\x4a\x35\x5d\xa9\xa6\x2b\x3f\x98\xce\xef\x1a\x79\x9d\x63\x76\x9d\xdb\xfe\x2f\xaf\x99\xa8\xdd\xc7\x67\xf9\xf8\x14\xa4\x15\x6a\x9c\x17\x7c\xbb\x45\xf0\x42\xe2\x76\xc0\x34\xf3\xa7\x86\x44\xca\xe0\xc7\x0d\xfe\xd7\xe0\xf7\x0d\x9e\x94\x40\x7b\xf5\xbb\xe5\xe7\x36\x0e\x9b\xa7\x09\x77\x88\x92\xbd\x5a\xd9\x68\xb5\xb2\xd2\x56\x63\x76\x35\x6c\xd7\xca\x1a\x27\x38\x3b\xb6\x5c\x35\x95\x56\x84\xae\xd5\x86\x96\x0f\x4b\x7e\x97\x1c\xed\x20\x86\x8e\xd0\xb5\x46\xf8\xbc\xb3\xf7\xfa\xbe\x8e\x11\x79\xeb\x2d\x5f\x8e\xe2\x6f\xf0\xd4\x28\x22\x54\xcb\x63\x85\x96\x86\x0f\x88\x41\x06\x0d\xd6\x3c\x60\x05\x82\x9c\x77\x8c\xce\x4f\x23\x0f\x1c\xe8\x68\x44\x3c\x48\x3b\x26\x99\xc7\x1a\x21\x68\xae\x32\x16\x9e\x20\x06\x4a\x19\x82\xc2\x31\x3a\x2f\x0e\xbd\x4d\xcb\x33\x88\x86\xc7\xd8\x3d\x32\x9c\xcb\x47\xe6\x71\xa3\xee\x09\x39\xda\x38\xb3\x7d\x61\x12\x6d\xae\xcf\xbf\x8b\xf6\xb0\x9c\x9b\x6c\xb3\x84\xf8\x4f\xdf\x02\xab\x97\xf0\x7f\x09\xbd\x57\x7e\x2e\x1f\x93\xa7\xf6\xda\x33\x5d\xdd\x37\xde\x5e\xad\xfc\x2e\x34\x70\x12\x79\x4f\x22\xef\x09\xd1\x9b\x30\xc1\xc9\xe3\x48\xb5\xe5\x89\x50\x31\x91\xea\xd8\xc1\xab\x5f\x7e\xd9\x3f\x87\x73\x28\x5f\xbb\xa7\xa7\xfb\x2e\xc9\x09\x26\xa4\x9b\xaf\x5d\xc6\xd9\x97\x31\xb2\xbb\x5f\x2e\x9d\x9c\x2b\x73\xa0\xae\xa0\x7d\x7d\x9d\xf0\xe9\xd1\x4e\xad\x91\xd1\x57\xf0\x47\x74\xd9\x2c\x28\x35\xa8\x3c\x66\xd6\x9c\x42\x23\x18\xda\x72\x9a\x74\x58\x5d\xeb\x53\x4e\x24\xc8\xb4\xc0\x09\x46\xd8\xc4\xff\x9a\xd8\x5b\xab\xef\x0a\x92\xce\xbb\x53\xd2\xe0\xd6\x1c\x17\x1c\xb1\xd5\xf6\x31\xed\x92\x5e\x9f\x6a\x09\xbc\x72\x7a\x30\xce\xd6\xb9\x1c\xdc\xd7\xe3\x3d\xa2\x05\xc6\xee\x52\x62\xb0\xe4\x05\xca\xb2\x94\xf0\x2f\xa0\xfa\x05\x42\xbf\x3e\xb2\xb0\xb5\xe9\xd5\x08\x77\x76\xf7\x38\x67\x77\xf7\x91\x8e\x59\x46\x56\xe7\xa4\xc1\xb0\x5b\x25\x5e\xb2\xdb\x72\xb5\xb2\xf3\xd0\xf2\xc7\xd9\xb9\x64\x19\x6e\x45\xfd\x4b\x38\x4a\x19\x5a\xb5\x46\x28\x3b\x76\xea\xdc\x33\x5a\x65\x1c\xe5\x06\xf2\xc7\x1b\x57\x7d\x80\x6d\xce\x9c\x50\xdf\x06\xaa\xd9\x8a\x50\xb6\x82\xfa\xcd\x75\xd8\x64\x76\x37\x48\xf3\x4e\x65\xbf\xc0\xcc\x1b\x14\x67\x53\xcf\xde\x40\xce\x1b\x4c\x7a\x7b\x76\xdb\x13\xd9\x9e\xc8\xde\x9d\xc7\xe5\x8a\x09\x44\x9d\xc1\x85\x1a\x9c\xaa\xb1\x7c\x4a\x1f\x5e\x50\xea\x28\x8d\x39\xc4\x82\xcf\x20\x3e\xcb\xfd\x3d\xd1\x2e\x23\x75\x49\x10\x1a\x00\xb6\x04\x6c\x2b\x47\xad\x3e\x5d\xed\x4a\x02\x81\xcb\xad\x62\x71\xab\x63\xf4\xe5\x8c\xc1\x81\x0e\xe8\x82\x80\x7d\x1d\x6f\x9c\x8b\x89\x10\xe0\x80\x2b\xe0\xac\x4d\xfc\xb5\x35\xde\x57\xf3\xbd\xd9\x23\xbe\x7d\xf4\xd5\x9c\xfb\x3b\xde\x95\x47\x1f\xff\x7c\x8b\x6b\xca\x3d\x83\x76\x03\xe0\xa5\xb2\xb2\x1a\xe1\x6e\x86\xec\x2f\xa0\xb8\xf0\xc9\xa5\x85\x7e\x29\xe1\x5f\x20\x90\x7b\x40\xc7\x01\x4e\x2e\x90\xc6\x25\xb1\x7d\xc1\x3c\x2e\xe0\x07\x76\xf6\xa4\xff\x50\x2d\x41\x5e\x00\x72\x8b\x93\xf2\xab\x72\x1c\xa9\x6c\xd2\xd1\xb4\xa0\x3e\xd2\xc6\xcf\x02\x29\x34\x9e\x42\xe3\xe5\x21\x70\x28\x57\xb7\xc6\x57\x8f\x87\xfe\xd1\x27\x9c\xdd\x0a\x91\xab\x5b\x8e\x66\xdd\xe7\x07\x54\x23\xec\x9d\x82\xe2\x29\x10\x3e\xc1\xbd\xaa\xbd\xd5\x5e\x5a\x89\xc0\xe7\x8a\x07\x31\x9f\xc5\xa7\xa0\xef\x03\x24\xfb\x80\xd3\x3e\xa5\x82\xd8\xd4\x02\x5f\x5a\x8d\x70\x2e\x5b\x5c\x1b\xc3\x13\xc8\xd9\x60\xa4\x0f\x50\xe1\x01\xac\x38\xa2\x5d\x46\x6c\xdc\x0c\x4c\x00\xa7\x50\xec\x13\xe0\x4c\x35\xc2\x59\xbc\x3d\x52\x0e\x9c\xd2\x3c\xe0\xa8\x1a\xf1\x29\x77\x10\x3b\x54\x7c\x9d\x57\xc6\xb7\xc4\x2c\x52\x40\x14\xca\x82\x22\x42\xc9\x33\x77\x39\x94\x98\xc5\xe9\x5c\xf2\xed\x71\xae\xa1\x92\x64\xa5\x67\xc1\x81\x08\x86\x3c\x06\xb5\x48\x4c\x93\xc0\x4b\xd5\x37\x02\xd4\x4d\x25\x23\x31\xed\x65\x80\x9d\xfb\xae\x8c\x86\x91\x03\x57\x4b\x28\xd9\x5e\x22\xb3\x55\x68\x70\x2c\x49\x76\x59\xff\xc3\xaa\x1e\xd6\xff\x48\x79\xf4\x7c\x7d\x0c\x57\x52\x32\xcd\x86\x13\x36\x90\xb0\xa5\x84\xcd\x27\x26\xce\xc8\xa9\x6c\x70\x02\xb7\x4f\x6f\x6e\x74\x19\x2f\xb7\x75\xfa\x9d\x33\x9a\x1d\x5c\x66\x57\x22\x45\xa1\x4a\x28\x48\x09\xc5\x2f\xb1\x7e\x2a\xcb\xe0\xdc\x92\x3c\x4a\x5a\x62\x3e\x2e\xe0\x6b\x01\x74\x8e\xce\xd7\x59\xe1\x76\xd4\x5a\x12\x9d\x6b\x28\x89\x34\xe5\xfe\x51\x28\xc4\x92\x02\x5a\xca\x27\x97\x90\x06\xb5\xd4\x58\x0a\x48\x97\xb4\xcc\x3a\xfd\xa9\x9c\x2e\x86\xd4\x65\x8e\xad\xd3\x00\x6c\xf9\x5a\x90\xc8\x75\xda\xe5\x5a\xed\x66\x71\xec\x38\x7f\x4a\x53\x85\xfd\xaa\x05\x84\x36\xee\x37\x6f\x4e\xcc\xfe\x1a\xde\x2c\x57\xea\x79\x29\x87\x09\xa5\x31\x01\xc1\x53\x23\x9c\x33\xce\x87\x92\x73\x61\xb3\x38\x83\xeb\xa3\x24\x13\x4a\xa6\x46\x1c\xc3\xc1\x52\x30\x7e\x5a\x35\x48\xc9\x39\x3c\x4d\x28\x7b\xa9\xf1\xd4\x1a\xe7\x4e\xd5\x3b\x5e\xe7\xba\xf2\xe8\xab\x39\x92\x6b\xa5\x44\x14\xfd\x42\x7d\xbb\xe3\x87\x3e\xd7\x4a\x79\xfb\xf1\x4e\xc1\xe8\xd4\x48\xb7\x8e\xc1\xd8\x3d\x68\x53\x0c\xee\x94\xa2\xef\x33\xb8\x62\xf0\x01\x70\x3f\xf5\x29\x57\xcc\x91\xab\x13\xa7\x5c\x43\xd4\x0a\x47\xf9\xc6\xc1\xd8\x7a\x64\xca\x8f\xbc\xf8\x11\x80\xc1\x3f\x57\x2e\x54\x39\x25\x0a\xfc\x05\xd5\xca\xf6\x32\xb2\x7b\xe4\x68\x53\x5b\x4e\x8c\x94\x1d\xb2\x88\x3a\xab\x9c\x1b\xc9\x3d\x2a\x9a\xe5\x66\x39\x37\xfa\x9a\x46\x38\x79\xab\x5d\xa8\x76\xbc\x5e\x8f\xbb\xe6\xee\xef\xd2\xe7\x9c\xe1\xcd\x52\xbc\x53\xd7\xd1\x72\xf8\x14\x74\x53\xf2\xac\x2b\xe8\x73\xfe\x38\x37\x17\x18\x9b\x9c\x67\x1d\xa9\xcd\xfe\xd4\x5f\x01\x7c\xeb\x39\xbe\xd1\x49\x4e\xe9\x44\x2b\xd2\xb3\x8e\x3d\xeb\xd8\xe3\xfe\x3e\x33\xc4\xda\x5e\x23\x7d\x3c\xe7\x4c\xc9\xaa\x35\xed\x29\x04\x16\x38\xac\xfe\x72\x56\xbb\x62\x5b\x2b\xc9\x19\xdd\x62\x0d\x97\x7a\xf5\xab\x1e\x5a\x86\xa7\x14\xfa\xad\x76\xd7\x00\x7d\xdd\xa5\x87\x54\xe1\x29\x28\x78\xca\x1f\x1e\xc8\xfa\x43\x23\xf0\x40\xdc\xdf\x95\x74\x55\x58\xf1\x10\x4d\x3c\x20\xf9\x87\x5e\xe0\xdd\xe6\x26\x97\x2c\x65\x9d\x7e\x60\xa5\x5f\x28\x89\x15\x26\xff\x58\x47\x9f\x30\xf9\x27\x7c\x4e\x99\xaa\xfa\x52\x9a\xb3\x8f\xe9\x04\x26\x16\xf3\xdd\x7d\x3a\xbb\xd2\x8c\xec\x40\xba\xbc\xd5\x0e\x2d\x47\x8d\x0b\x28\xc9\xf3\x09\xb5\x7e\xad\xd3\x8c\x7a\x85\x32\x46\xe2\x11\xac\xbe\xe3\x15\xde\xc2\xb7\x51\x1c\xca\x31\x38\x3d\x02\xde\x43\x20\xdc\xee\x53\x2d\x07\xce\x1b\xc4\x36\x18\xca\xdf\x06\xbc\xa0\xa2\xaa\x6a\x39\x46\x28\x8c\x14\x39\x62\xbf\xce\xb1\x81\x7e\xb7\xf4\xa3\x32\xc6\x01\x40\x8b\x4b\x3b\xf1\x67\xa7\x72\xaa\x6a\xa5\x0d\x25\x2d\xd9\xed\x54\x86\x32\x94\xe3\x85\xfb\x43\x93\xad\x46\xca\x01\xe2\xf2\x86\x54\x67\x48\x87\x06\x6b\x33\xd8\x84\xb4\xb9\xaa\xed\x71\x8e\x94\xd4\x22\xeb\x3a\x94\x6a\xda\xc5\xd2\xbe\x56\xce\x50\xbb\x44\x9c\x24\x57\x38\x52\x8e\x6c\x80\x60\xc3\x84\xe4\x55\x60\x18\x55\x9a\x94\xca\x94\x12\xc1\x45\x26\xc8\x77\xd2\xb7\x4e\x50\xf0\x64\x8d\xa4\x80\x7a\xb2\x3c\x69\xf3\x57\x6b\x84\x9b\xc5\x16\x4d\x16\x2c\x25\x8a\x9c\xa3\xbd\x0f\xa5\x8e\x0a\x63\x69\x53\xd4\x08\x4f\x64\xf5\xa7\x8e\x3f\xc6\x57\x1f\x63\xbc\xac\x94\x89\x98\x6b\x82\x1f\x4f\xec\xec\x93\xad\x3e\xbf\xf6\x7d\x40\x55\x41\xbb\xa7\x54\xd5\x54\x66\x3b\x71\xb7\x93\xcc\xad\xbe\x24\xe1\xec\x4f\x1d\x1f\xdd\x1a\x57\xce\xf9\x21\x05\x02\xcc\x9e\x42\x14\xf3\x53\x10\x8a\xed\x75\x2a\xce\xa5\xa7\x54\x57\xd3\x2a\x41\x65\xb3\x4d\x6c\xb5\x53\x72\x8c\xfe\x52\xd2\x34\xab\xb3\xfa\xef\x32\xa2\xfc\x53\xd8\x63\x2a\x4f\x9e\x80\x03\xf3\xeb\xe2\xd6\xf6\x89\xfc\x86\xed\x53\x33\x0d\x0f\x62\x4e\xd6\xe3\x54\x60\x3b\x5b\x85\x5a\x00\x60\xb2\xee\x70\x66\x57\x9f\xff\xe5\xd7\x72\xeb\xa7\x72\x5a\xac\x8a\x89\x55\x31\x71\x6c\x97\x47\xe6\x0a\x68\x94\xa4\x3b\xf0\x6d\xd7\x31\xc6\xaf\xab\xb9\x27\x02\x03\x53\xf1\xef\xdc\xee\xe7\xbe\x7d\x7c\x7f\x97\xe3\x3d\xd9\xdd\xa5\xb2\x5f\xfb\x59\xfc\xa9\xcb\xcf\x92\xfa\x03\x6e\x5f\xfe\xd2\xe5\x0e\xd0\xd6\xab\x23\x79\x61\x8d\x09\x56\xf4\xea\x7e\x2e\xb8\xc9\xe5\x1d\xa1\x04\x55\x6d\xfb\x5c\x75\x0c\xc4\xed\x4a\x68\x63\xd8\xcd\x05\xbb\xb9\x58\xfe\x0a\xb5\xaa\xad\xeb\xf3\x44\xe0\xc9\x12\xdd\x47\x2a\xad\x4a\xf4\x1d\xa9\xe0\xab\xda\x1e\x9f\xfa\xfd\xa9\xfe\xe8\x2b\x48\x2d\x4a\x5d\x4a\x44\x2f\xe5\xbd\xdb\x1c\xdb\x5f\x53\x39\xf1\xbc\x3c\xe5\x6d\xf6\xa2\xf5\xa8\x11\x49\x45\x5e\x58\xf0\xc8\x80\x1d\x60\xbc\x12\x9f\x77\xe2\x65\xac\x96\x1f\x07\xb3\x0b\xab\x2a\x18\x5c\xad\x71\x05\xb9\x0a\x5a\x37\x1c\xed\x06\x7c\xd8\x52\xa6\x02\xc6\xd5\x1a\x51\x7e\x8b\x78\x6d\xc3\xc8\x6e\xd8\x59\x3a\x24\x89\xc1\x31\x71\x31\xe6\x16\x2e\xda\xf4\xe3\xf7\xee\xf4\xa3\x24\xa7\xf5\x64\xd3\xf2\xdf\x62\x11\x1b\x07\x30\xb4\x59\xc2\x8d\x55\x9f\x87\xa8\x9c\x56\xc8\xe4\x08\xae\x1c\xa4\x0a\x87\xff\xc2\xa2\xa8\x11\x65\xbc\x3c\x47\xe5\x00\x27\x8c\x03\x80\x1c\xab\xdc\x71\x67\x8e\x9d\xe2\x40\x33\x53\x89\xac\x96\x77\xa6\xa4\x57\xb4\x81\x1d\x52\xc7\x24\x4f\x90\x7f\x07\xe3\x2b\xb6\x70\xc4\x0d\x0e\x14\xf5\x59\xed\x3f\x42\x09\x4b\x9c\x1e\xa4\x67\xf8\xc2\xab\xdf\x2d\x7f\xf0\xf6\xb9\xdd\x77\xee\x75\x1d\x89\x4d\x3b\xd1\x11\x7f\x38\x76\xa8\x23\xe2\x21\x20\x9d\x2c\xa5\x1a\xef\x5f\xeb\x97\x2f\x05\xc5\x70\xc0\x90\xdf\x60\x65\x09\x02\x96\x20\x63\xc9\x56\x49\x76\x51\x5e\xf1\x96\xbb\xdb\xbb\x34\xee\x9d\xba\x56\x6c\x8a\x5e\xd5\x1a\x79\xed\x33\xd2\x8c\xaf\x7b\x8e\x8e\x23\x11\x80\xe4\x7d\x52\x97\xc2\x54\x57\xcc\x07\xd1\x47\xa2\xef\x48\xc4\x20\xf9\xac\x90\x6f\xf0\xfb\x3c\xa9\x27\xf0\xf6\x46\x53\x75\xf5\xa7\x0f\x5e\xb9\xee\x00\x55\x93\xa4\x21\x96\xf4\xc4\x92\x92\x58\x8d\x7f\xfa\xed\x75\xf6\x08\xdf\x53\xf2\xd3\xdc\x7b\xb4\x4a\x9e\x99\xf9\xc0\x6d\x10\x36\x26\xaa\xc6\x44\xe4\x58\x2d\xb5\xfe\xcd\x33\x5d\xa4\xdd\x9b\x28\xcc\xb9\xa8\x30\x9e\x02\x8d\xc7\xbf\x7e\xee\xc3\x43\x97\xf1\xdc\x8d\xc7\xd7\x06\xd1\xaa\xb6\xfd\xd6\x6e\xb7\xf6\x55\xfb\x24\x57\xaf\xb4\xea\xeb\x91\x30\xc2\xe7\xbd\xe5\xf3\x96\x75\x3d\x81\xad\xaa\xdd\x52\xaf\x8f\xe8\xfd\xa3\xb2\xaf\xed\xf4\x29\x14\x35\x26\xe0\x8f\xdf\x81\x62\x31\x50\x2f\xc6\x07\x85\x39\xe8\x83\x0d\xb6\x34\x88\x50\x04\xa4\x75\xb0\xbd\x41\x81\x6a\xa4\xc7\x97\x71\x2d\x1d\x0c\xb6\x7d\xf0\x1a\xc2\x75\x82\x47\x19\x3c\x6e\xf4\x14\xd5\x37\x32\xba\xa5\x46\x18\xf4\x2e\x90\x77\xb5\xde\x14\xb8\x62\x82\x04\x26\xb8\x5f\x82\xd4\x65\x8e\xfe\x74\x69\x43\x5b\x1e\x25\x6b\x33\x29\x40\x26\xd8\x5d\x82\xdd\x25\x3b\x33\x69\xc9\x0a\x64\x86\xd0\x66\xb5\x3d\xce\x03\xe5\x0b\xbf\xc6\x28\x4b\xa2\xd2\xcb\x12\x1c\xad\x96\x6f\xcb\x77\x86\x28\x9d\x63\xb7\x7f\xda\x7d\x7e\x2b\x24\x31\x1f\x79\xf2\xbc\x26\xae\xfa\x29\xf9\x3c\xf9\x68\x33\x5b\x2d\xaa\xbd\x51\x89\xb5\x7f\xdc\x4a\x9c\x4f\x98\x50\x97\x3c\x34\x44\x4b\x8d\x2c\xfd\x6d\x9c\x4b\x0a\x66\xfc\x75\x96\x11\x8d\xef\x95\x05\xc4\xbb\xb6\x30\xae\x2d\xd4\xc6\xeb\x76\xc6\xae\xb3\x77\x80\xbe\xb8\x94\x16\x2e\xae\xd5\xd5\xc3\xf7\xa7\xb5\xaf\x95\x11\x74\x93\xb6\xef\x52\x12\x52\x96\x59\xb7\xd3\x48\xb7\x4b\xfb\x8c\xb7\xbb\x89\xf3\xe9\xf5\x59\xe4\xa0\x3e\x6e\x99\x5c\x17\x60\xf9\x51\x4f\x79\xc0\xd4\x0f\x92\xdf\x13\xed\xde\x21\xc0\x55\xdf\x79\xc0\xcb\x2d\xb1\x35\x52\xce\x19\xe0\xfa\x19\xb2\x7a\xd1\x6e\x1f\x91\x27\x15\x96\x07\xbf\x94\x30\x5e\x5d\xd9\x31\xa3\x5b\xd7\x41\xa4\x4b\x14\x53\x78\xaf\x8e\xe1\x62\x12\xee\x55\x7b\x7a\xc0\xda\x0f\x60\xfc\x51\x85\x79\x54\x61\x62\x6e\x08\xb8\x90\x6a\xbb\x8f\xbd\x89\xd3\xcc\x1d\x3c\x1c\x35\xcb\x76\x58\xb0\xcb\x95\x54\xed\xba\xba\xcf\x99\xab\xfb\x7f\x77\xbb\x6b\xa7\xfb\xe5\x8a\x11\x58\xba\xb8\x13\xee\xfe\x39\x79\x9f\xbe\x11\x19\x41\x3c\x01\x17\x5c\xfc\xaa\x99\xbe\x72\xff\x57\x65\xed\x55\xab\x7d\x89\x4c\xe0\x29\xac\x76\xbb\x66\x1a\x3f\x5a\xd9\x3e\x55\xa1\x4a\x09\xae\x1c\xe4\xdd\xed\x26\xbe\x6e\xfd\x4e\xce\x9c\x97\xf8\x71\xe2\x1f\xc6\xa6\xe7\xa5\x7f\x02\x06\x0f\xba\xe2\x09\x0f\x3c\x0b\xc0\xe3\xa0\x3f\x2f\xfd\xe3\xe8\x3f\x2f\xfd\xc3\x0e\xf5\x38\xfa\x4f\xd8\xe0\x59\x36\x1e\x5e\x28\x85\x24\xf1\x48\x93\x3e\x22\x85\x4f\xdd\xf0\x5b\xbf\x3e\x47\x10\x42\x97\xb3\xfb\xd4\x8e\x3f\x0e\xf4\x03\xe0\x7f\x17\x7a\x55\xdd\xf3\x53\xa5\xfd\xd4\xd9\x3f\x55\xce\x4f\x05\xf3\x7b\x5d\x0f\x2a\xfb\x05\x91\x49\x84\xb8\x5a\x4e\x1e\x3c\x28\x37\x85\x8c\x71\xb5\x90\xac\x58\x8b\x18\x3b\x1f\x8c\x26\xe1\xa2\xfc\x04\xf5\x3f\x21\xe7\x4f\x10\x1a\xfb\x45\x62\xc5\x48\x5c\x17\xd5\x72\xfe\x70\x29\xd9\xd8\x85\x1e\xf3\xb3\xb9\x7d\xb6\xb5\x4f\x92\xe4\x93\x18\x41\x16\x5f\x2d\xa7\x50\x15\xa9\x80\xfa\x27\xb3\xf2\x3d\xbf\x53\xfe\xe6\x6b\x27\x0c\xce\xc9\xc2\x5c\x2d\xe4\x68\xe7\xd5\xe4\xf0\x14\x8e\x0d\x45\x49\x43\x99\x18\x46\x8d\x1c\x38\x69\xc6\xf9\xf5\x6b\xfc\x7c\xdd\x0e\x23\x47\xbf\xce\xc5\x18\x34\x54\x04\x0e\x35\xac\xe3\xc8\xf6\xe1\x16\x1a\x07\xae\x94\x80\xc4\xc0\xca\x33\x5a\x8e\xcb\xdf\xa2\x7c\xa6\x5a\x8e\xa3\x3c\x9c\xbf\x17\x7d\x7c\x06\xc7\x14\x77\x63\x86\xbb\x1d\xf8\x5a\x42\xe1\x52\xc8\x23\x86\x7c\x21\xee\x8d\xea\xf7\xa7\xe5\xe4\x29\xa0\x0b\x45\x4f\xa1\xfe\x32\x30\x9d\x84\x27\x18\x41\xda\x41\xe9\x99\x72\x9b\xc4\xb7\x51\x0e\x25\xd4\x29\x9c\x2b\xf3\x50\xf8\x33\xc9\xd1\x67\xa8\xb9\x0c\x35\x8e\xd1\x38\xc5\x68\xfc\xe8\x93\x63\x93\x15\x0b\x38\x51\x18\xc1\xfa\x63\xf4\xfb\xd3\x3e\x5e\x55\x28\x27\x32\x20\x38\x19\x1d\xf0\x34\xb5\x0f\x71\x31\x7f\xfd\x72\x32\xe0\xd2\xe6\x20\xcf\x20\x65\x31\xe5\x59\x27\xd4\xda\xc4\xd0\x3c\x39\xf7\x53\x9e\x75\x42\xb2\x4e\x69\x8d\xa9\x78\x6d\x4a\x62\x60\x3a\x4c\x1c\x15\xd5\xd7\x62\x6c\x1d\x52\x52\x98\x4a\x27\x33\x16\x33\x62\x7d\x97\x2b\xec\xbe\xbe\xeb\xac\xfe\x46\xbf\x87\x9b\x28\x67\xa9\xac\x26\x71\x60\x54\xdf\x75\x9a\x65\xf6\xc3\x2a\xf4\xb5\x7b\x57\x67\x99\x4b\xf3\x18\x37\x07\xd0\xd6\x57\xcb\x39\xe3\x1a\xba\xdb\x98\x14\x13\xe5\x7d\x8d\x70\xbf\xb8\x89\x66\xd1\xc4\xbd\x84\x0a\x3f\x91\xe0\xd7\x91\x1c\x32\x49\x36\xf3\x6d\x92\x82\xc3\xce\x58\xe3\xe5\xb8\x0c\x4e\x8c\xbf\xb7\x0b\x70\x96\xbb\xba\xdc\xb1\xa5\x16\x79\x41\xfa\x2e\x88\x6d\x44\xf9\xd5\xef\x63\x9e\xd6\xf8\x47\xee\xc2\xa7\x90\xa6\x0b\x0e\x75\x31\xb1\x51\xe4\x27\xfe\x8c\x72\x9e\xea\x2c\x29\xc1\xc5\x34\x5e\xf0\x76\x38\x33\xca\xd9\xd2\xc2\x71\x42\xa5\x63\xc2\x48\x7c\x1b\x89\x33\x23\x95\xff\x94\xcb\xc5\x09\xe3\x1a\x62\x63\xda\x12\x26\x9b\xfb\x48\x5a\xbe\x5a\x05\x9b\x9c\x33\x73\x6c\xcb\x3d\x2b\xae\xa9\xb6\xc6\x3d\x91\xed\xad\xdf\xe4\xb4\xb7\x77\x7f\x4b\xf5\x6c\x45\xa6\x5b\xf8\x67\x5b\x0d\xb6\x22\x53\x45\x37\xd5\xaf\x6f\xe4\x4a\x22\xb2\x2f\x77\x8a\xf3\xe4\xfa\xcc\xf6\xcd\x98\xdd\x1c\xe2\xcd\xe0\x55\xaa\x93\x2a\x64\xaa\xe5\x3c\x35\x1f\x92\xc4\xd4\x68\x47\x0a\xea\x51\x9e\xfb\x78\x5b\x4f\xec\xee\x2b\xa2\xe4\x5a\xf9\xfd\x87\x9b\x7e\x7c\xbb\xaa\x95\xea\x1b\x97\xfe\xc2\xb3\x7b\x30\x85\x1f\xa1\xa0\xb3\xdb\x31\x82\x92\x64\x74\x0b\xd9\xd6\xf1\x75\x16\xfe\x2d\x02\x90\x09\x55\x53\x6d\xbb\x4a\x7d\xbc\xef\x52\x22\x2a\x84\x60\x77\xae\x91\xa5\xf5\xbd\xdc\x35\xab\x04\x39\xff\xea\x3b\xe6\xf4\xa7\xce\xe2\x30\xa9\x38\xb7\xcb\xa7\x0a\x9c\x54\x8d\x53\xc7\xfb\x3d\xd2\x86\x5c\xd2\x63\x2f\x60\x03\xe4\x85\xa9\x55\x4b\x93\x6a\x57\xca\x85\xea\x3e\x64\x67\x63\x3d\x15\x6f\x4a\x91\x5d\x9c\xc4\x17\xe2\x99\x3d\x50\x4e\xd5\xa9\x96\x2c\x8a\x7a\xf7\x6b\xed\xba\x2a\xb6\x49\x42\x26\xe6\xfb\xbc\xb0\xdd\x38\x21\x12\x0f\x44\x62\x86\xc8\x67\x2e\x3d\xf5\x1b\xcf\x7a\xf5\xac\x6f\xea\x52\xf2\x99\x33\x84\x21\xf3\x29\x3a\x26\x0c\x59\x23\x9c\x27\xf8\x4e\xa1\x9d\x27\xc1\xfe\x14\xa5\x3e\xae\xea\xb3\xc7\x11\x8c\xac\xbe\x34\x9d\xd4\x9f\x5f\x8b\xe7\x3e\x31\xdf\x27\x2e\x87\xb2\xc2\xeb\x9a\x64\x0b\xdf\x75\xae\xdf\x0f\x67\x53\x6d\x8f\xd7\x15\xd4\xca\x3f\x1c\x09\x0f\x23\xc2\xc3\x38\x28\xc4\x5b\x7d\xe7\x8e\x72\x74\xca\x7a\x9c\x5f\x59\x7d\x53\x15\x4a\xb5\x61\x44\x9b\x69\x64\x18\xe9\xe3\xb5\xdf\x35\xc2\x79\x8a\x3a\xa6\xac\xac\x6a\x43\x5b\x23\xdb\x75\xb6\x73\x6b\x2e\x4d\x85\xa8\xf3\xdb\xef\x72\xa7\xaa\x4f\x64\xe5\x53\x7b\x83\xdb\xbe\x5a\x6e\x16\xb1\x64\xfc\xa6\x5f\xcb\xb1\xb0\x51\x21\x4e\x22\xa4\x47\xe0\x4b\x02\x6a\x24\x54\x53\x54\x6b\x04\xc7\x30\x7b\x29\xa4\x38\x42\x4a\x44\xe0\xb3\xda\x3a\x5e\x4a\x13\x76\x24\x70\x0f\x94\x03\xc4\x49\x82\xad\x84\x7c\xc2\x4c\x50\x7d\xae\x12\x84\xa5\xda\xad\x64\x77\x25\xb4\x59\x0a\xb7\xe7\x6a\xec\xa6\xf4\x17\x8e\xa8\x39\x5a\xfe\xbc\x85\x6f\x3b\x45\x06\x23\xa8\x0e\x0d\x92\x3e\x40\x15\x02\xe8\xa0\xfa\x43\xdb\xe3\x12\x65\xd8\x67\xf1\xf5\x2e\x61\xfb\x75\x5d\x01\xcb\xce\xc2\x7f\xb3\x84\xea\xad\x8d\x61\x55\x8c\x0d\x7b\xb7\xa5\x3a\x61\xcd\xe3\x40\x73\x9e\x68\xaf\x41\xd2\x29\xdb\xf2\x97\xea\xe1\x6c\x9d\x60\x81\x73\xbf\x0e\xc7\xeb\xc0\x23\x1e\x09\xc3\x03\x17\x7b\x82\x8c\x2b\x94\xd8\xe1\xd1\x1c\xee\xe9\x91\x34\xb3\x3a\xd5\x88\x6f\x24\xf5\x0a\x47\x7b\xa2\xbd\x0f\xd8\x41\xb8\xb7\x23\xb5\x72\x20\x7a\x2f\x16\xb4\xab\xcc\xf3\x2a\x6d\xbe\x8a\x7c\x2f\x1c\xe7\x55\xda\x09\x8d\x5d\x23\x8e\x97\x08\x52\xb0\x29\x4c\x52\xfd\x1e\x67\xf9\xb3\x7b\xe1\x5c\x9f\x44\xe8\x93\xfe\x92\x4e\xaf\x71\xf6\xf3\xee\x63\xa4\x50\x30\xbb\xc0\x1a\x3e\x09\xab\x47\x62\xf6\x61\xc0\x7a\x38\x87\x1e\xae\xe5\x87\x31\xeb\xe1\xca\x7a\x8a\x58\x1f\x66\xa9\x87\xbb\xe8\x49\xc9\x3e\xa9\xd1\x27\x61\xfb\x04\xc9\x3e\xe1\xcf\x8f\x85\xf6\x45\xdb\xd2\xea\xa6\xd8\x72\xe4\xc0\x93\xf0\x67\x7e\x56\x5d\xec\x71\xd5\x0f\x2d\x1b\x98\x35\x6b\xb5\xfc\x76\x1f\x29\xdd\xd1\x9c\xa6\x6d\xa5\xab\x67\xf8\x60\x92\x3e\x61\xb9\x0f\xea\xe8\xb3\x76\x7d\x5d\x9f\x06\x69\xf4\x81\x05\x7d\x98\x3c\x06\xcb\x67\xb0\x64\x06\x58\xc1\xc8\xe6\x07\x85\x00\x13\xa6\x1a\xc2\x57\x43\xc5\xc2\x98\xbf\x96\xb5\x0c\xe5\x26\xbd\x40\x42\x29\x49\x2e\xd5\x08\xcb\x16\xda\xac\x65\xd2\xf0\x61\x90\x5c\x4a\xe2\x49\xd5\x67\x39\x4f\x36\xb3\x2a\x2f\x21\x1f\x32\x4b\xf5\xa9\x71\xc9\x13\x01\x21\x02\x4b\xd5\xba\x9a\xc4\xcb\x69\x9b\x99\xed\x0a\xa7\x15\x7e\x67\xf8\x9d\x01\x92\x73\x5b\xd8\x4c\x90\x58\xc2\xbf\x3e\x7d\xda\x4f\xcb\x1e\x86\x51\xb3\xbf\x04\x8f\x20\x04\xea\x02\x69\x43\xb8\x27\x91\xb8\x52\x04\x05\x95\x99\x57\x2b\xc1\x42\xf6\xfe\x48\xad\xfb\x3d\x81\x9f\x26\x55\xfa\x29\xfa\xae\x96\x25\xac\xa2\x09\xc1\x85\xf2\xf0\xc4\x2d\x97\x70\xe1\x99\x42\x65\x29\x70\x9b\xe6\xc3\x1c\x82\xfd\x42\x74\x93\x55\x3c\xa5\x86\x26\x44\xdd\xc4\x86\x38\x25\x6a\xa6\xef\x9a\xec\x87\xe9\x9a\x93\x45\x3d\xd9\x3c\x42\x2c\x69\x2d\xaa\xe3\x97\xf1\xbe\x32\x7b\x55\x98\x5f\x35\xc8\x64\xb7\x4f\x76\xfb\x94\xf6\x99\x82\x7f\x93\x55\x3f\xd9\xf0\x53\xf2\x67\x46\xdb\xc9\xa7\x8f\x6c\x1b\xd8\x6f\xd8\x6d\x39\x6f\xc7\xf7\xd5\xfa\x97\x34\xac\x8c\x2d\xca\x4e\x36\x4f\xc8\x35\xd5\x08\xbb\x97\xdd\x6e\x86\x4c\x73\x60\x7a\xfa\x53\xaa\x6a\x42\xf2\x61\x8c\xab\xe3\x7d\xba\x7a\x44\x2b\x29\x84\x49\x65\x7a\x16\xb8\xc6\x6b\xdc\xb7\x48\x89\xf0\x59\xa6\x99\x39\xcd\x58\x6c\x73\x49\x50\x2a\x95\x9c\xa7\xf2\xf3\x5c\xac\xf7\xc5\xd7\x58\x12\x86\xe4\x45\x13\xbe\xbc\x46\x54\x31\x49\x05\x48\xe2\x2d\x49\xb9\x65\x86\x2c\x33\x47\xa1\x77\xd9\xba\x57\xbb\xb5\x6c\x5d\x69\x0d\x90\x3a\x05\xec\xd5\x6f\xab\x38\xb4\x92\x0f\x6a\x9f\x04\xad\x97\x60\x36\x3e\xb9\x54\xa2\x5e\xc7\xa4\x7e\x57\x3a\xb1\x87\x59\xdd\xfc\xc7\xc5\x5b\x5c\x42\xbc\x4b\xed\xd9\xc2\x30\xba\xa5\x53\xc8\x41\xe5\x56\x5d\xb3\x55\x8d\x6e\x32\xcc\x9b\x24\xf3\x26\x71\xb7\x89\xde\x91\x80\xaa\x96\xbd\xfa\xda\x52\x15\xc8\x17\x26\x8f\xb6\x4e\x05\xcb\xad\x69\x76\x90\x6a\x05\xf2\x05\xce\xf9\x9e\xc7\x5a\x77\x04\x6e\x0f\xae\x9d\xc3\xd6\x3a\x9e\xf2\x39\xa0\x5b\x3c\xa0\xe3\xa9\x1d\xbe\xf3\x39\x40\x61\xe6\xc9\xe1\xd1\x1c\xbe\xcf\xc1\xb9\x7b\xac\x03\xc7\xdc\x38\xea\x70\x0e\x1f\xe7\x78\x8e\xc7\x4a\x72\x78\xe8\x87\x1f\x74\x78\x3d\x87\x87\x75\xcc\xab\x63\x26\x1c\xb3\xe8\x58\x4f\x0e\x01\xc8\x63\x45\x3a\x66\xd1\xb1\xc2\x1c\x9e\xd7\xc1\xfe\xab\x5a\x3b\x55\x6b\xa7\x1a\xef\x54\x59\x5d\x7d\x9f\xaa\xff\x11\xf8\xbf\x92\x09\x97\xef\x73\xd9\xde\x17\xdf\xed\xc5\xc8\x7b\xd9\xc0\x97\x1f\x77\x59\x68\x64\xc8\xab\x65\x91\x0e\x56\xe8\x68\x68\x18\xeb\x54\x02\x01\x8b\x2a\xc6\xb2\x5a\xd3\x04\xf8\xc1\xca\x78\x13\xd7\xda\x7e\xa5\x68\x9e\xf7\xf4\x59\x13\x9e\xd5\xe0\x79\x5b\x9f\x54\xf3\x83\xa2\x7e\x56\x92\x47\xc3\xe7\xa1\x6a\x79\x50\xd7\xf8\xcc\x12\xda\x3b\xd5\x5d\xe7\x9b\x6d\xd9\x3a\x8b\x37\xf4\xf8\x3e\x8f\x37\x44\x34\x34\x49\x84\x26\xe9\xd0\x3a\x7e\x68\x1d\xe9\x6a\x6a\xc3\x9e\x37\xe2\x49\x9b\x3f\x5e\xc6\x73\x07\xde\x6e\xe8\xd9\x62\x91\x82\xbf\xa9\x1c\x7e\x37\xbb\x65\x9d\xaa\x98\x52\x5d\x2c\x36\x95\xa2\x55\x65\xb5\xf6\xf1\xce\x9d\x6c\xdd\xc5\x76\x9d\x2c\xd5\xc5\x22\x7d\x3d\xc2\x52\x4d\x96\x6a\xb2\x72\x27\x3b\x76\x1a\x99\x5f\xb5\xec\xd2\x58\x46\x04\xfb\x63\xb1\x81\x11\xb6\xc4\x72\x85\x16\xd4\xec\x2b\xa7\xba\x2c\xe9\x85\x25\x81\xb0\x24\x19\x36\xcb\x79\xbb\xf2\xfe\xd1\xbc\x48\x1a\x7c\xf5\xab\x8e\xef\x3a\x7e\xc3\xf1\x7b\x3a\x59\x71\x3b\x99\x40\x9f\x84\xa6\xc1\xd7\x55\x49\xac\x94\x60\x49\x42\x5d\x07\x8c\x75\xb5\xac\x59\xe0\x38\x34\x1a\x49\xc0\x38\x59\x53\x38\x9e\x63\x0a\x8a\x3b\x70\x42\xf9\x2c\x05\xfb\x4b\xa1\xc7\x82\xab\x83\x82\x0d\x0c\x4c\x01\x17\x5b\x7d\x81\x73\xfc\x19\xdf\x6c\x83\x94\x99\xe9\x2c\x04\x8e\x8b\xda\xec\x42\xa6\xb9\x84\x09\x17\xd2\xc6\xd5\xa4\x8d\x94\xd4\x36\xda\xfd\x4d\x53\x4f\x61\x63\x19\xa1\x65\x3c\x32\xae\x8f\x6c\xc4\x51\xe6\x8f\xb4\xb7\xc6\x19\x92\x0c\x55\x79\x88\x23\x34\x7e\x18\xdd\x47\x38\xfc\xd0\x31\x3f\xe8\x44\x65\x01\x83\x3b\x1b\x77\x77\x48\xb8\x83\xbb\x6d\x42\x2a\xa0\x50\xfe\x73\x15\xec\xdc\xdd\x61\x5d\x65\x20\xca\xca\xb8\x83\x71\x4f\x07\x8c\xd1\x23\x28\xdb\xb9\xf8\x75\xe4\xc3\xaa\x65\x42\xa2\x0b\x40\xd8\xfa\x6a\xa3\x2b\x23\x11\x92\x06\x21\x00\xea\xc9\x87\x4a\xf2\x21\x5a\x7d\x18\x50\x1e\xee\x93\x87\x8c\xf5\x21\x94\x7c\xaf\x85\xc7\x98\x66\x02\x90\x9f\xbc\xf5\x17\x5d\xda\x7f\xbb\xcf\x30\x14\x34\x65\xb0\x7c\xb2\x6b\x1f\x87\x92\x46\x7c\x7e\xbb\x15\x6c\x95\xf6\xcb\xc5\x7e\x96\xf9\x8f\x2a\xeb\x07\x1d\xfe\xb5\x8c\x19\x2d\xd7\x0f\xcf\xd6\xf7\x14\xbf\x0b\x4a\x8d\xd1\xe5\xf3\x4a\x12\x50\x8c\x0d\xa8\x82\xd1\xf2\x60\xf0\xa0\xc3\xe2\x3a\x50\xcf\x0f\x62\x63\xc3\x86\x39\x64\xda\xe8\x69\x56\x9f\x81\x26\x64\xa8\x0c\x3c\x2c\x90\x91\x90\x25\x30\xa9\xa1\xd4\x31\x20\x53\x03\x82\x39\x14\xc6\x06\x5c\x72\x58\x56\x23\xdb\xa4\x12\x80\x84\xb0\x09\xe6\x64\x58\x86\x43\x09\x46\x42\x17\x25\x1c\x00\x66\x9d\x32\x94\x04\x08\x95\x36\x33\xb2\xa6\xad\x98\x76\x79\x12\x2c\x49\xe2\x25\x49\xb5\x3c\xa9\x96\xe7\x84\x4f\x9a\xb6\x6e\x32\x27\x35\x62\x9c\x81\x20\x33\x3d\x65\xa0\xa7\x4d\x7e\xc2\xe2\x4c\xf8\x9b\x29\xb0\x3d\xb3\xaf\xcf\x54\x81\xda\xa1\x68\x59\x06\x0e\xb3\x82\xb1\xd6\x44\x6c\xb0\xbf\xf3\x34\x6e\xa3\x83\x76\x70\x24\xa7\x03\x7b\x2d\x31\xd5\x21\x40\x41\x44\xcf\x02\x25\x6e\x12\x38\x49\x82\x28\x49\x10\x25\x49\xa7\xe4\xb4\x3d\x4e\x4f\x07\x91\x6e\x4e\x1b\x08\x19\x95\x3a\xbe\xaf\x20\x74\xa7\xa4\x9a\x81\xbf\x04\x2c\x97\xe7\xbe\x14\xfc\x2e\x38\xef\x05\xc9\xbd\x84\x4e\xb1\xda\x54\xdb\x26\x06\xc3\x04\xa2\x82\xab\x81\xe7\x26\x71\xe7\x24\x66\x9d\x5c\xdc\x11\x0c\x37\x89\xe1\x26\x71\xed\x24\x2e\x9c\xea\xf7\x59\x8c\x20\x58\x79\xc1\x7e\xa5\x79\xd5\xba\x4e\x17\x65\x33\x91\x84\xea\x97\x59\xba\xcc\xdb\xa5\xda\x61\x43\x84\x6c\xf4\x11\x1b\xe1\xe0\x86\x1a\xd9\xde\x85\xad\xb8\x78\x2b\x4f\xde\x24\xc1\xb6\x54\xc3\x56\x6e\xbc\x09\x7d\x6d\x85\xc6\x9b\x3c\xd8\x9e\x8a\xb5\x09\x89\x6d\xe5\xe4\x5b\x21\xf9\x9e\xca\xb7\x77\x63\x23\x60\x1d\x6c\xd7\x74\x30\x13\x7a\xb2\xcc\x1f\xe1\x3a\x66\xce\x68\xf3\x47\x68\x0d\x8b\xd8\x11\x8c\xe7\x46\x27\xc7\x37\xcf\x6d\x83\x05\x76\xc1\xfb\x72\x84\x6a\x8e\xe7\x78\xcc\x81\xe3\x8d\x3b\x84\x04\x0e\x9a\xbf\x23\x3c\x73\xcc\x9f\x23\xcf\x7d\x3c\xcd\x83\x51\xec\x78\x4f\x8f\x39\x76\xbc\x95\x47\x10\xeb\x98\x09\xe7\xb6\xc1\x52\xf7\xe7\x90\x8b\x38\xb7\x4d\xa7\xd7\x67\x95\xf9\x90\x1d\x4e\x83\x5f\x87\x1d\x97\x52\x4b\x29\xb5\xec\x44\x59\x57\x86\x48\x82\xa5\xc4\x5a\x4a\x76\xe5\xf5\x6e\x5e\xf8\xb6\xeb\x6d\xbd\x17\x23\x1a\xf2\xcd\x2b\xbc\x74\x05\x9c\x2e\xca\xce\x2b\xec\x74\x91\x6f\x5e\xf4\x9d\xc4\x23\xab\x75\xae\xd2\x69\xb4\x06\xd7\x1c\xb8\x9e\x3b\xc2\x99\x44\x26\x93\xcf\xb3\x7e\xde\xfd\xe7\x1d\x7f\xd1\x26\x09\x39\x31\x06\xec\x9b\x3e\x25\xf9\x46\x60\x32\x09\x49\x26\xc9\xc9\x1a\xe9\x23\x7b\x44\x50\x8d\xd9\x62\xf6\x92\x18\x49\x02\x21\x49\x68\x24\x1f\x73\xef\x71\x4d\x1e\x27\xe3\x31\x4e\x1f\x83\xf1\x5d\x46\x96\xd2\xb0\x87\xf2\x9e\xeb\x9f\x82\x01\x29\x18\x50\x2d\xc3\xe4\x75\x9f\x79\xc2\xcc\xa1\xe2\x2d\x78\x30\xbf\x10\x24\x0b\x68\xfb\x50\xf4\x1d\x8c\x85\x10\x30\x0b\x45\xdf\x01\x79\x1f\x50\xf8\xb1\xb5\xb0\x08\x65\x80\x57\xdb\xc7\xf7\x91\x4c\x98\x0e\xb9\xbd\x8f\x31\xc2\x00\x71\xe5\x32\xa2\xa7\x50\xc1\x84\xce\x2f\x33\xc4\x38\xd3\xe6\xcc\x1e\x71\xcc\x74\x8c\xab\x49\x7a\x33\x4f\xa2\xfb\x43\x38\x6d\x48\x3e\x8f\xd9\x68\x06\x34\xeb\xe8\xd1\x63\xb4\xc1\x82\xea\x7d\x34\x3a\x1f\x92\x1e\xe2\x1f\x06\x31\x60\x10\x23\x90\x7d\x67\x32\x55\x10\x25\x41\x10\xd6\xac\x6b\x5b\x65\x0b\x98\x09\x83\x49\xa7\x23\x71\x5e\xb7\x13\xf5\xec\x96\xdb\x36\x09\xba\x6d\x24\xd1\xab\x19\xaa\x60\xfd\x37\xf4\xff\xfe\x59\x14\x1d\xa6\x82\x7e\x16\xc6\x3b\x08\x9a\x0e\x3a\xa6\x83\x1c\xe9\xf8\x76\x42\x02\xf5\xa9\xb3\x04\xbd\x04\xf9\x8e\xa0\x20\x91\x80\x40\x47\x10\x70\x48\x71\x7e\x61\xaa\xd7\x56\x44\xd9\x15\xa7\xd3\xd1\x52\xc1\xca\x8a\xaf\x8a\x82\x7b\xa0\x99\x15\x02\xdf\x03\x85\xac\x6c\xff\x2a\x10\xbe\xaa\x0b\x2e\xf4\xc6\x93\x54\x7f\x08\x91\xe1\x6f\xca\xde\x30\xc2\xae\x40\x24\xf5\xb2\x65\x56\x85\xb8\xf2\x97\x04\x96\xb0\xed\x42\x4b\xd8\x62\x5c\x6b\x66\x60\xd9\x1b\xec\x07\x81\x22\x49\x09\x66\x69\x62\x10\x4c\x73\x23\xc7\xf7\x6b\x89\xc7\x48\x6c\x7e\x1d\x58\x7a\xdd\x87\x97\x95\x90\x14\x62\x1f\xd9\xe1\x19\xf4\x3b\xf6\x9d\x71\x3b\x11\x8a\x72\xc7\x8e\x36\x3a\xbc\x24\x1c\x15\xf6\xe8\x80\x1f\x8a\xec\x80\xcd\xee\x71\x16\x82\xb4\x64\xfe\x8e\x14\x74\x41\x47\x0b\x45\x8a\xca\xbf\x5a\x49\x48\xd6\xc2\x6e\x7a\x1c\xe4\xb6\xa8\x5a\x03\xcf\x62\x34\x65\x8a\xdd\x3c\xed\xf2\x09\x9f\x94\x70\x72\x09\xb1\xa4\xf2\x21\xd5\x3c\x54\x6b\x67\x97\xd6\xe3\xc2\x2a\x87\xaf\x11\x56\xc4\xee\x11\xf6\x80\xdd\x1c\x8d\xc9\x94\x90\x99\xd1\xe1\x96\xd3\x57\x60\x2d\x08\x63\xd8\x11\xa6\xe4\xea\x8c\x0e\xcf\x08\xb4\x70\x9a\x27\x3a\xe3\x69\x95\x9e\xb7\xd5\xe4\x05\x69\xb8\xc5\x13\x6d\x31\x22\xfb\x6a\x7b\x84\x14\xa5\xa0\x8e\xd5\x75\xda\x41\xa6\x75\x15\x39\x7e\x2e\x81\x1c\x14\xf6\xd5\xda\xcd\x11\xa4\x08\xc6\x2c\xc5\x8c\xcb\xfe\xb5\x24\x30\x97\xc4\xe6\x12\x40\x5a\x52\xfa\x8b\xcd\xb3\x04\xfc\x70\xda\xd5\x2e\x6f\x4f\x57\x2f\x07\x63\x8a\x51\x2f\x97\xa4\xc4\x92\xde\x59\x52\x49\x4b\x3a\x08\x4f\x5e\x8d\xf4\xa7\xce\x55\xed\xf6\x9a\x57\x75\x75\xa0\x42\xe5\xdb\x6f\x37\x0f\x6d\x6a\x55\xbb\xe1\x5b\x75\xe7\xb7\xa4\xf4\x96\xfe\xda\x84\x39\x37\x92\x90\x3d\x7b\x44\x7a\x6d\x76\x12\xef\x74\x22\xce\xde\xfd\x7a\xbf\xee\xbd\x1b\x71\x8a\xe0\x87\x3d\x8b\xe4\x58\xed\xda\x52\x6d\xf6\x74\x4f\xf3\x48\x7a\x9f\x16\xc8\xbc\x02\x00\x08\x7f\x8e\x3b\x7c\x10\x07\x1d\xce\xe5\x41\x37\x74\xb8\xe3\xe7\xaa\x5e\x43\xfe\x73\xcc\xfc\x63\x9d\x3f\x5c\xd8\xc3\x3d\x3d\x76\xb7\x83\x68\xe8\x70\x5b\x8f\x27\x7b\xb8\xb6\xc7\xd3\x3c\x9c\xd7\xd3\x18\x3e\x7f\x35\x8a\xb6\x6a\xed\xbc\x12\x59\x12\xb6\x97\x90\x8f\xb5\xa2\xfa\x76\x64\x88\x40\x2e\xf2\xf5\x9b\xaf\x2b\x13\x6c\x4e\xc2\xcc\xd5\x62\x1e\x95\x1a\x42\xce\x8b\x6c\x2d\x11\xbe\xa5\xba\x85\x6a\x1b\x11\xd8\x23\x02\x06\x9c\x69\xef\xd1\x83\xb5\x7d\x12\x6e\x4a\xc2\x93\x7c\x57\xed\xb0\xfa\xf6\x3b\x56\xd6\x43\xcf\x82\xee\x3c\x51\x9f\x57\x6b\xa7\x56\xa5\x86\x9e\xe5\xa1\x6a\x41\x68\x5e\x57\xe8\x64\x97\xfd\xd7\x5e\xe9\x09\x3e\x7f\x17\x29\xaf\xda\x85\xeb\x5b\x90\xf9\x3c\x98\xfe\x27\x35\xf7\x60\x70\x1f\xea\xa7\x87\x54\xea\xb1\x1f\x1e\xf4\xff\x53\xa6\xfd\x90\x47\xbd\x96\x66\x51\xe8\xfd\x04\x51\x1e\xee\x5b\xeb\x64\xf5\xed\xc8\xd2\x50\x39\x6a\x4f\x4c\x49\xaa\xf2\x5b\xab\x3f\xb5\x3e\xb5\x87\x66\x18\x97\x10\x4b\x3b\x69\xf9\xb6\xd5\x1a\xe9\x24\x18\x77\x3f\xbf\x3e\xab\xfb\xf6\x6b\x98\xc2\xf2\x79\x6b\x44\x7f\xf4\x35\x9d\x2b\x3c\x90\xa3\x5b\x67\x45\x5f\x4d\x80\xe1\xd7\x4a\xa6\x75\x08\x01\x4e\xb1\x76\xd5\x29\x39\x36\x49\x3b\x4f\xc1\x83\xf9\x1d\x36\xc0\x79\xdd\x0f\x48\x44\xfb\xf2\x53\x2f\x47\x80\x13\x04\x2c\xe0\x17\x41\x2d\x42\xe5\x70\xa8\x10\x8e\x29\x81\x33\x9d\x35\xf1\x92\x22\x80\x0e\x68\xec\x5a\x92\xed\xc2\xa7\xf7\x5f\x11\x00\xfe\x3e\x1a\x81\x6d\x0f\xdd\xf6\xd6\xfd\xdb\x73\x8f\x1d\x56\x0a\x08\x29\x22\x79\x9e\x38\x54\xf2\xf1\x01\x57\xdb\x3b\xaf\x9d\x91\x4c\x1d\x52\x8e\x0b\xdd\x78\x11\x6b\xdc\xa3\x0a\xe8\x00\x5e\x49\xd9\x5d\x68\xc8\x2b\x89\x77\xd1\x74\x5c\x98\xc8\x7b\xa4\x8c\x10\xdf\x5f\xc4\x38\xb7\x89\xef\xc9\x1e\x48\xe4\xd6\x4e\x0a\x2a\x85\x2a\x41\xd5\xd0\xeb\xd2\xfe\xfc\xa5\x65\x9a\x6a\xe0\xf2\xbb\x7b\xdf\xe4\x77\x23\xb5\xb3\xbe\x61\xea\xad\x3d\x94\x24\x1b\xd0\x90\x6a\xea\x41\x34\x7a\x60\x8c\x1e\xa4\xa3\x07\x7e\xeb\x21\x90\x3c\x78\xc7\x23\x1b\x88\x24\xc5\x81\xfe\x88\x80\x6b\xb5\xe4\xd0\xa4\x5f\xac\xf6\x84\x60\x6b\x3f\xb5\x27\x02\xe6\x64\xf7\x55\x77\x64\xd7\x7b\xb4\x08\x99\x9d\x94\x18\x36\xfe\xda\x6a\x25\x1c\xc0\x6a\xb2\x69\xd6\xed\x7a\x28\xa7\x3c\xdf\x6a\x8d\x48\x1a\x08\xfe\x4d\xd6\x02\xe4\x65\xf5\x1d\x39\xfa\xc8\xa7\xbf\xf5\xeb\x48\x61\xb9\x89\x76\x7f\x22\x4f\x9b\xd6\x22\xe2\x2b\xd5\xf6\x0e\xc5\xf7\x54\x05\x6d\x97\x5c\xd9\xde\xe5\xb5\x5f\x74\x78\x5b\x9d\x80\x15\x1b\xad\x4a\xb5\xf6\x94\x6b\x1c\x8f\xb5\x9d\x74\xcf\xcb\xb3\xb3\xb6\x23\x92\xda\x56\xc8\x6d\xdd\xd8\xac\x82\xdd\xc7\x5b\x27\xb7\x3b\x73\xac\x7b\x47\xc2\xe4\x48\x83\x1c\x7f\xbb\x14\x68\xed\x02\xfc\x38\x5e\x18\x19\xad\x63\xe7\x3a\x44\xa0\x8f\x55\xe5\xa0\x74\x3b\xd6\x9c\x83\x5c\xee\x58\x49\x8e\x15\xe9\x3c\x6b\x3b\x6a\xbb\xf3\x7a\x47\x68\x8f\xcc\xbe\x63\x1d\x3e\x56\xa4\x63\xed\x3a\x56\xad\x63\xd5\x3a\x66\xdd\x69\xa1\x2c\x44\x13\x07\x49\xc5\x41\x34\x77\x10\x4d\x9c\xd7\xde\x1c\x2f\xd2\xaa\x75\x08\xe6\x21\x3f\x49\xf4\x9e\x89\x38\xb4\xf6\x08\x15\xc8\x68\xaf\x3c\x9d\x8b\x68\xee\xfa\xb5\xb7\x57\x4b\xec\xec\xa8\x3e\x13\x15\x67\x8d\x1c\xeb\x3f\x14\xb8\xb5\x54\x0c\xe4\x89\xa8\x3c\x4f\xed\x89\x96\x3c\xf3\xea\x45\xaf\xf3\xe0\x09\x93\x77\x83\xb0\xeb\x4d\xb5\xca\x04\xbc\x49\x59\x54\xdf\x4e\x01\xce\x40\x98\x8d\x3c\x64\x3e\xde\xe5\x13\x73\x78\x62\x05\xa4\x1c\xab\xed\x1d\xc1\x5a\x3d\xbb\xb5\xe6\x47\xf7\xeb\x7b\xa5\x3b\x5e\xdd\xf3\xf9\x4f\xcf\x6f\x82\x7c\x7f\x00\x81\x5d\xa3\xf6\x00\xea\xde\xe3\xdb\xe4\xb2\x52\xff\xfa\xd6\x6e\xab\x67\x0a\xc3\x26\xcf\xa7\xec\xda\xea\x5b\x9d\x97\x75\xd9\x6a\x9b\xc2\xb9\xb9\x7b\xc4\x1a\xbd\xb4\x7c\xa7\x14\x28\x2e\x6b\xb5\xfa\xdd\xfa\x16\xbe\x5c\xee\xfe\x5e\xe7\x0a\x2f\xa7\xf0\xf2\xfe\x00\x21\xac\xfb\xfb\x03\x87\x50\x75\xbd\xf9\x75\xbb\x51\xe7\x7c\xbf\xe3\x97\x9c\xd5\x6b\x7a\x5d\xf9\xf6\xea\xdf\xf0\x09\xfb\xca\xb1\x37\x10\xc6\x21\x20\x19\x46\x42\x62\xb7\xda\x5a\xfd\xc9\xb9\x04\x61\xab\x68\xa9\x2b\xab\x30\x70\x5d\xe0\x81\xa8\x76\x59\xf7\xc5\x88\xc1\x09\x44\x30\xb1\xaf\x07\x3e\xf6\xea\x5b\xb5\xaf\x11\xd1\x55\xf5\xb8\x17\xa0\x42\xbd\x42\xa8\x8c\xaf\xd6\xba\xac\xda\xb2\x05\x4c\xc0\x83\xa5\x24\x02\x78\xa6\x56\x5e\xd4\x30\xe2\x98\x92\x68\x9f\xc4\xd3\x40\x41\x38\x54\x65\x8d\xaf\xe5\x22\xa5\x80\x59\xc6\xf8\xc3\xcb\xd4\xe7\x57\x88\x18\x66\x47\x21\x79\x05\x6a\x62\x42\xcc\x14\xd7\x77\xaa\xf3\xce\xb0\xb6\x66\xc7\xf5\x32\x3a\x96\x67\x2d\x9b\xbd\xf6\xf5\xca\x68\x8d\xb3\xa2\x49\x82\x4c\x31\xca\x89\x4d\x61\x8a\x5d\x4e\xfe\xcf\xcc\xbe\x8e\xd4\x64\xf6\x3a\xc8\x07\x60\xed\x91\x96\x4a\x92\x53\x49\xcc\xaa\xfa\x2c\x78\x15\x5d\x08\x68\xd6\xe8\x38\x9d\xb5\x4f\x44\x69\x89\x2e\x2d\x29\xec\xc5\x37\x53\xcd\x9c\x38\xa8\xab\xbf\xb5\xb5\xde\x81\x38\xee\xf1\x13\x8a\x67\x25\x5b\x01\x89\x19\xee\xd3\xaa\x01\x14\x04\x80\x54\xcf\xe8\x14\xde\xcf\x0e\xc6\x87\x6f\x1d\x91\x2e\x3c\xde\xb4\xe3\xdd\x39\xaa\x2a\x0f\x90\xed\x51\xb3\x78\x1e\x7b\x17\xb0\xf6\xa0\x80\x39\xde\xb8\xa3\xe6\xf2\x48\x41\x1e\xdc\x21\x97\x8f\x77\xf9\x6f\x37\x9b\x2c\xcf\xba\x73\x3a\xb1\x85\x6e\x8f\x25\x8d\x6e\x38\x1f\x60\xe1\x03\x44\x54\x3b\x5b\x2b\x4b\xaf\x38\x56\x16\x47\x22\x0d\x7c\xfe\xba\xe7\xaf\x23\x98\x93\x84\x74\xaa\x35\x72\x25\x95\xc4\x7a\xfc\xbd\xe4\x61\xb3\x45\x5f\x9f\xbb\xf1\xa4\x08\x11\xfb\xe6\xeb\x64\x19\x88\xd7\x43\xda\xf2\xf8\xab\x1d\x9d\x7f\x40\x05\x4f\xba\x4d\xd4\x3e\x81\x3a\xe6\x97\xe2\x35\x29\xfe\x92\xa2\x24\x29\xf5\x93\x2c\xad\x9a\x8d\xd5\x3a\x52\x2c\x26\x6f\xf7\xad\x27\xa7\xaf\x60\x4d\x68\x8b\xf3\xf4\x78\xaf\x2d\x7d\xae\xb3\xfa\xbb\x76\x5f\xd9\x0a\x73\xfa\xfa\x7d\xbc\xf8\x8e\x76\xb3\x2c\x77\x83\xac\xa4\xa2\xb6\xdf\x73\x58\xa5\x87\xe5\x7a\xd8\xb2\xc7\x7a\x75\xfc\xaa\xfb\xf5\x1a\x52\xe7\x02\x81\x7f\xa0\x32\x01\xb4\x1f\xde\x50\x95\xa9\x11\x2d\x04\x27\x1a\x02\x96\x10\x13\x71\xd8\x44\xea\x37\xd1\x4f\x2f\x39\x8f\x25\x0b\xb2\x2e\x8a\x34\xd9\x8e\xd3\xc5\x0b\x58\xca\xa9\x30\x04\x18\x61\x5c\xb2\x69\xf7\x00\xed\xa8\x9b\xb9\x07\x08\xc7\xb7\x4b\x4d\x06\x4e\x8b\x5a\x19\x40\xd0\x81\xe7\x31\xde\xbf\x67\xf5\xa0\x58\xc1\xda\xce\x2f\x5b\x02\x17\x2c\x04\xd4\x76\x64\x43\x59\xc0\x48\x78\x74\x83\xb7\x36\x58\x27\x64\xf0\xab\x05\x1d\x11\xad\x90\x29\x09\x90\x3c\x02\x83\x19\x20\x37\x19\x4d\x65\xcb\x87\xc7\x9e\x32\x31\x6a\x4c\x91\xd3\x29\xdb\x31\xc5\x52\xa7\x3a\xd7\x89\x5a\x88\xdc\x5c\x92\xaa\xab\xb6\xdf\x7d\x3e\x39\x6b\x46\x4c\x61\x91\xc1\x59\x60\x36\x98\x0f\x12\x2d\x5d\x22\xa4\x4b\xe4\x74\x89\x8a\xae\xda\xe1\x1d\xa7\xe5\xd1\x0a\x20\xe2\xe0\xab\xe1\xa9\xa2\xe1\xb3\x75\x3d\xbc\xef\xf8\x51\xb6\x39\xbf\x4f\x4b\x6b\x8a\x14\x9b\xe1\x07\xc7\xcf\x01\x07\x3a\x20\x43\x07\x3c\xe9\xd8\x2b\x8f\xf8\xfb\xc1\x21\x74\xb0\x0a\x9d\xd7\xf5\x67\x83\x6f\xa9\x12\xeb\x1b\x6d\x37\xb0\x15\x3a\x89\xcc\x97\x53\x02\xf0\xfc\x06\x34\x61\xd5\x5e\xed\xa7\x65\x19\x34\x18\xd2\xee\x3e\x9b\xf2\x92\x9d\xb1\x1a\xf4\x98\xde\xd0\xaf\x23\xb0\xde\x5c\xfe\xa7\xc8\xce\x3b\xde\x85\xf2\x4f\xaa\xe5\xf5\x79\xcb\xda\xb3\x7d\xed\xcb\x79\xcb\xda\xcb\x95\x03\x7b\xf2\x07\xcf\x53\x7e\xf6\x8b\xf7\xda\xaa\xe0\x1d\x4d\xfe\xde\xb4\xf3\xce\x31\xb5\xde\x68\x3b\xec\xfc\xfa\x18\x9f\xda\xa9\x27\x6f\x6d\x46\x7f\xfa\xb4\x57\x5b\xbf\x6a\x4a\x07\x4f\x6f\xd6\xe4\xc5\x6d\xef\xdd\xbe\xbd\x83\xdb\xa3\x59\x05\x87\xb5\x70\xbc\xbf\xd7\x6f\xb8\xde\x4d\xd0\x32\xbb\x79\xed\xd7\x7c\x33\xfc\x25\xde\x91\xb8\x18\x44\xd0\x02\xfe\x6a\x8b\x6f\xab\x33\x3c\x79\x5c\xef\x20\x31\x70\x55\xb6\x41\x12\xb6\x5a\x12\x7f\x1f\x81\xbe\x96\x4f\xef\x1c\xea\xe8\xb7\x12\xbb\x43\xc7\x2b\xe5\x3e\x9b\xf4\x9c\xac\xdf\x5b\x2d\xc7\x0d\xcc\xb6\x3a\x67\xd9\xc5\x1a\xb2\x83\x56\xf2\x21\x35\x1f\x60\xed\xa9\x46\x70\x8a\x5f\x4c\xf6\xe8\xec\xca\x6f\xb5\xfe\x53\xa6\x61\x8a\x6b\x4c\x36\xeb\x14\x25\x9f\xf7\xd7\xb7\x3f\x8a\x31\x8d\xdf\xce\xc8\x73\x60\xfd\x83\xd7\x2e\x79\xaf\x75\x7e\x7d\xef\x4e\x34\xed\x6f\xed\x71\xc0\xea\x7b\xfd\x66\xfe\xd5\x52\x99\x61\xaf\xbf\xb6\xd7\xe5\x4b\x80\x25\x0e\x7b\xe3\xf0\xa9\xae\xdd\xf9\xde\xae\x98\xb4\x2b\x61\x02\x40\x22\x9f\xcf\x1b\xfa\xbc\x89\xef\x98\x0f\xf5\x16\xcc\xef\x13\x1d\xf8\x40\x61\x3f\x33\xe7\xf3\xdc\x3f\xcf\xf4\x8b\x6e\xcd\xdb\xdf\x59\xe6\x18\xeb\x71\x02\x00\xcc\xec\x79\xa5\xcf\xdb\x9f\xac\xcd\x29\xca\x30\xd9\xa5\x53\x4c\x61\x66\x8f\x9b\x8d\xe9\x3a\xd9\xf3\xd6\x31\xd6\xf9\x99\x3d\x0f\x7b\x96\x3a\x06\xa0\x77\xb3\x3c\xf7\x6a\x28\x82\x39\xd9\x71\x81\xd1\x50\x84\x06\xdf\xf6\x1e\x21\x82\xc0\x46\x6d\x22\xda\x63\x67\xb9\x7e\x43\x83\x84\xaf\xbf\x42\xb9\x5c\x28\x2e\x8b\xd6\x43\xe1\xbd\x93\x86\x8e\xd5\xb2\x87\xa2\xd5\x38\xa8\x6a\xbe\x59\xf9\x3b\xe3\x8e\x0c\x11\xdc\x97\x4a\x4e\x80\xa6\x84\xf8\x4e\xbc\x66\x7a\xe0\x0d\x8e\xaf\x19\x1a\x56\xaf\xed\x6c\x3f\x5c\x08\xd4\x9a\x62\x63\x4a\x53\x2d\x3d\x59\x1a\xb3\x09\xb2\x6f\xf7\x77\x5b\x59\x65\x5f\x81\x1b\xe1\x92\xc9\xed\xc9\x6e\x3c\x4f\x5b\x8d\xf8\x26\xf0\x7b\x80\xfd\x20\x0c\xaa\x6f\xb5\x6c\x6f\x0d\x6c\xbe\x33\x52\xac\x8b\x6b\x06\x8a\x29\xa4\xa8\x44\xcd\x1c\x31\x38\x56\xca\xea\x78\x96\x5c\x54\x47\x64\x3e\x4f\xe4\xcb\xee\x9b\x39\x9e\xe0\xe7\x99\x7e\xfd\x1c\xd9\xf6\x93\x37\x31\xad\x12\x93\xb7\x32\xad\x15\xd3\xfa\x30\xf9\x20\x93\xcf\x32\x57\xcf\x96\x6e\xfb\x78\x4f\xf9\xeb\x1d\xbf\x57\x18\x4f\xca\x5c\xba\x66\x23\x19\xcc\x08\x80\xe1\xd7\xfa\x23\x2d\x9e\x01\x5d\x31\x15\x09\x22\xa5\x3d\x53\xb9\x5c\x0b\x27\x28\xee\x6b\x66\x29\x7a\x43\x49\x4b\xa8\x9e\x8e\xfd\x14\x9e\x00\xb9\xf9\x00\x12\x0b\xcc\x19\x01\xec\x17\x98\x33\x62\x76\x11\x10\x9a\x78\xd5\xde\xb3\x73\xf6\xa2\xff\xb3\x45\xad\x91\x06\x2e\x64\x82\x4b\x71\xd0\x1a\x4d\x26\x0e\x74\x07\x1c\xa8\x00\xb3\x9e\x5a\xb7\x76\xbd\xd1\xcf\xc8\x3b\xce\x7f\x16\xd9\xbc\x76\x81\x2b\x9f\x21\x1e\x94\x84\x2b\x92\xbc\xc4\xfc\x3e\x6f\xd9\xe7\x6e\x7f\xbf\xbb\xe7\xae\xf2\xd4\x26\x4b\x6c\x3a\x72\xca\xc9\x4d\xbb\xcf\xb6\xe6\x6f\x7e\xd6\xf1\xa6\x37\x57\xd6\x8d\xbe\xcf\xde\x11\x31\x41\x4c\x2a\xd1\xb2\x1c\x72\xba\xc3\x0c\x99\x2d\x88\x1d\x2d\xa9\x0d\xfc\xd6\x15\xe1\x76\xb1\x6b\x5f\xbb\x72\x2d\x57\xb4\xe2\x2d\xcf\xee\xf3\x64\x3f\xf3\xe1\xf3\xf4\xbf\x9e\x0f\xa2\x7e\x53\xa6\x70\xb3\x3c\x4f\xbf\x9b\xbb\x9f\x1d\x2f\x0c\x6e\xe3\xb5\xc8\x79\x67\x1d\x64\x26\x6e\xe3\x06\xf8\x1a\xa7\x73\xf0\x6d\x45\xf4\x2a\x6a\x25\xec\x42\x03\x9c\x19\xef\x93\x55\xe5\x6b\x3c\xf9\x92\xc7\x4b\x7a\xf8\xdb\x1e\xc6\x85\x87\xa1\xed\x9d\xd1\x77\xcc\xfd\xec\x35\x84\x70\x2e\x3e\x1b\x84\xe0\x35\xa3\xec\x02\xf2\xeb\x78\x17\x2e\xbb\xe2\x8a\x97\xdd\xb6\x2e\x70\xb3\x61\xbb\x29\x7b\xc0\x35\xc1\xad\x1b\x8d\x91\xbf\x5f\x9e\x8e\xef\x7b\xe2\x3e\x64\xef\x53\xee\x9e\xd5\xf5\xb3\x9a\x29\x41\xbd\xe7\xd7\xca\x8c\x5a\x93\x6f\xdb\xc6\xec\x70\x96\xdb\xd7\x31\x7d\x1c\x6f\x5d\x26\x1c\x32\x79\xcd\x6f\x31\x5a\x59\x29\xde\xf7\xf7\xd6\xda\x7f\x6f\x9d\x59\xbd\xf7\xf7\xd6\xbe\x7f\x6f\xdd\xfa\xe0\x8c\xfa\x6f\x54\xef\xfc\x09\x2f\xbe\xb5\xea\xb8\x53\x63\xcb\x98\x73\xeb\x8c\xed\x5c\xa7\xd5\x71\x3b\xff\xa0\xd1\xdf\x3a\x7a\x0e\xa9\x33\x4e\x1d\x77\xea\xb8\x5d\x97\x3f\x75\x81\xed\xcb\x1d\x57\x57\xbe\xf5\xc1\xd5\xab\x0f\x6e\xfe\x6d\xc4\x15\x23\x03\xac\xf3\xac\xb7\xea\x3f\xf5\x4d\x63\x1e\xde\xf1\x1c\x31\xff\xc6\x91\x31\x7d\x70\x54\xdf\x73\x4a\xd9\x0f\x63\xaa\x1b\x19\xbb\x79\x25\xce\xf9\xbe\xbf\x91\xa7\x75\xfe\x6b\x02\x8f\xb9\x7f\x30\x74\x05\xcf\x53\x89\x75\x8e\xe1\xcc\xfa\x67\x2b\x76\x1e\x8d\x08\x1f\x0b\x9c\x7f\x34\x2f\x7f\x30\xb4\xc6\xfc\x56\xbd\x2d\xdf\xbc\xf7\x6f\x2c\xa6\xe5\xd8\x51\x57\x1a\x93\x40\xd4\x58\x5f\xad\x0d\x75\x60\x99\x28\x5f\x4d\xd1\x91\xa3\x59\xce\xe6\x9d\xfd\x9f\xeb\x9f\x16\xb6\x39\xaf\xfe\x4a\x95\xb4\x08\x85\xe2\xab\x85\x63\xe4\x6c\x4a\x3a\x41\xa2\x2f\xbe\xbf\xd1\x55\x7f\x59\x5b\xda\x98\xef\xd5\x9d\x68\x1a\x9e\xa0\x23\x3a\xa6\xd8\x67\x7c\x77\x46\x9d\x3e\xfc\x78\xa4\xb7\xa3\x83\xb2\xf5\xa3\x5e\xb8\xc1\xaf\xae\x91\x2f\xd2\x1d\x42\xee\x06\x3b\x39\xcb\x21\xab\x9b\x9e\x75\x57\xc8\xef\xd5\x2d\xc6\xb6\xee\xf5\x8e\xa9\x4f\xf9\x9d\x50\x93\xfa\xd5\xb1\x16\x69\xb7\x72\xcb\xeb\x0e\xd0\x7c\xb3\x43\x7e\xad\xbd\x96\x7d\x09\xbc\x3c\xa7\x15\x99\xea\x57\xce\x25\xb8\x3f\xcb\xcc\x08\x09\xdd\x18\xaa\xe0\xc7\xd7\xdc\xee\xc4\xd7\x84\xe9\x55\xc2\xd6\x08\x83\xb3\x61\x5e\x5d\xe1\x48\x12\x2e\x3a\xc8\x5b\xcf\x63\x35\x51\x31\x31\x96\xb1\x11\x47\x06\x77\xaa\x6e\xf6\x31\x97\xa2\x1e\x40\xce\x5d\x77\xf5\x98\x07\x43\x39\xbb\xd2\x81\xf1\xbb\xe6\xa9\x6d\x62\xe4\x4f\x0c\x4a\x81\xf7\x53\xd4\x81\xa9\x66\xec\xaf\xff\x82\xf9\x39\x28\xbb\xca\xf9\xfd\x0d\x84\x1d\x31\x00\x06\x46\x99\x93\x63\xb7\x14\xf6\x60\x75\x8c\xda\x47\x46\x0b\x1f\x8e\xdc\x76\x66\x2b\x62\x10\x88\x19\x7b\xab\xef\x18\x98\xa0\x87\x6a\x9d\xd1\x0b\xd1\xfe\xea\xaf\xcb\xb9\x6e\x4d\xba\x26\x36\x6e\x92\x7b\x22\xf8\x13\x52\x40\xb6\xe1\x43\x68\x1d\x8b\xe4\x7d\xed\x07\xa6\x65\xfd\x65\x78\xad\xc7\x3c\xd1\x7f\x79\x4d\xe9\x4e\xaa\x0c\x73\xa2\xf3\xc8\x31\x9a\x77\xac\x63\x72\x97\x70\x55\x17\xdf\x93\x49\x1a\xbb\x26\xd3\xa2\x46\x50\x9e\x2b\x05\x3e\x28\xcb\xa1\xdc\x65\xec\x9a\xe0\x37\xcd\xc3\x5d\x0f\x7d\xf4\x1a\x3e\xd6\x79\xee\x6f\x2d\x70\xf5\xb6\x99\xb6\x3f\x1e\xff\x72\x7e\xc7\x43\x5b\x38\xba\xaa\x45\x2a\x65\x70\xd2\x07\xfe\xf4\xf8\xbc\x4d\x67\x9a\x9d\x28\x32\xc7\x39\xb3\x5e\xbe\xbb\x5a\xe2\xfb\xd5\x01\x0b\xdc\x20\xbe\xe6\x26\xaf\x39\x31\x27\x1a\xff\xad\xac\x67\x2b\x09\x0a\xbc\x66\x2d\x3a\xfb\xe1\x31\x0c\x71\xe3\x7b\xca\x2f\x19\x28\xe2\x03\xc9\x79\x04\x02\xff\xdf\x7c\x2a\x83\x73\x50\x64\xa9\x47\xcc\xdb\xf1\x97\x4e\x21\xf4\x38\x1d\x2a\xc0\x2f\x1d\x99\xb5\xea\xd4\xf6\x3e\xd6\x25\xc4\x1d\x75\xdd\x91\xbb\x83\x17\x5e\xb3\xf4\xab\xc6\x6c\x75\xab\xa8\xd5\x76\xac\x6f\xfd\x54\x00\x9b\xcb\xd1\x54\xd9\x9d\x01\xeb\x62\xb0\xeb\xeb\xbb\x26\x8c\x8a\xbf\x7b\x06\x9a\x38\x0e\xbc\xc2\x98\xf7\xeb\x70\xbe\x95\xa0\xc9\x37\x98\xc2\xfb\xbc\x9a\xf9\xdf\x68\x7d\xea\x67\x1e\x12\x05\x40\xa5\x3e\xfa\x84\x7d\x9b\x3e\x4a\xb0\xe5\x59\x17\xe6\x3c\xb7\xff\x94\xd7\xcb\x5f\xfd\x8a\x33\x90\x6c\xf8\x2b\xf3\xc4\xf0\xcf\x48\x0b\x24\x0c\x8e\x3d\xb2\x3e\x5a\xdb\x84\xa0\x4b\x58\xf6\xd8\x58\xaf\x29\x25\x85\x7a\x73\xd4\x6f\x9f\xdf\xfa\xad\x6f\xf5\x47\x95\x35\x3d\x30\x5b\x85\x42\xed\xc0\xa2\x12\x19\xf5\x6a\xae\x57\x46\xf5\x98\xdf\xae\xf7\x79\x1d\x7f\xc8\x99\xb7\xc6\x46\x7a\x2d\x6f\xf3\x76\x98\xb5\x98\x08\x6b\x5d\x24\x29\xaf\x14\xae\x96\xd5\x1d\x59\x7f\x06\x0a\xa3\x71\x6b\x79\x1f\x2d\xc6\x14\x89\x8f\x6f\x3e\xab\xc5\xa9\x4d\xe3\xff\xd8\xfb\x83\x1d\xf9\x76\x5d\xcf\xf3\x7b\x97\x1a\xa7\x81\x90\x44\x4a\xa4\x5f\xc5\xf0\xc8\xb8\x23\x17\x3c\x30\x50\xef\x6f\xf0\x13\xfb\x02\x9e\x14\x62\x57\xa3\xbb\xd1\xdd\xa8\xc1\xe1\xfe\x9f\x4c\x71\x45\x64\x90\x52\xac\xf5\xd5\x4f\xe4\x4a\x95\xbb\x66\x81\x5c\xdf\xf3\x73\xf3\x26\xe7\x86\x77\x7d\x7b\x54\x9f\xf9\xc2\x5c\xa7\x2c\x5f\x27\x1d\xb3\x72\xf8\x6b\x1e\xff\xe6\x17\xf3\xf0\x39\x53\xe7\xe3\xf9\x63\x5e\xec\x7b\x50\xec\x50\x02\x6b\x18\xbc\x35\xf1\xdd\x2a\x26\xaf\x03\x4a\xaf\xef\xb1\xcf\x7d\x34\x76\x3f\x8e\xcf\x69\x52\x34\xdf\x7c\x0a\xa3\xd8\x5e\xfc\x16\xf3\x9a\xbb\xd0\x59\xdd\xcb\x17\xdb\xbb\x13\x8f\x3e\xbe\x53\x9a\x42\x52\x2b\x87\x59\xfe\xe7\x0f\x52\xc0\x23\xbe\x95\x19\xbf\x4d\x13\x68\x86\x63\x95\x9c\x34\x95\xbf\x14\x69\x2b\x3a\xb0\x3f\xea\x31\x86\x99\xa1\x00\xc1\x3a\xef\xf3\x7d\xd0\x67\xe7\x4b\x68\xdd\x7f\xea\x6e\x6a\xfc\x16\xc7\xeb\xa9\x7a\x18\xdf\x52\x21\xf7\xfb\x84\xfb\xa5\xf7\x93\x09\x67\xf9\xa6\x6c\x47\xc0\x17\xa5\xf7\xd2\xdc\x64\x7d\x45\x18\x3b\x8e\xd4\x7b\xdf\xaf\x3a\x2a\xf8\xed\x8c\xce\xfa\x12\x8f\x1d\xf1\x25\x3f\xbe\x8e\xbe\x35\x26\xe2\xdb\xf5\xe5\xb6\xbb\x02\x75\x1e\x23\xd4\x3c\x6d\x7f\xfb\x3c\x25\xcf\xeb\xce\xb7\xfd\xdc\x2f\xce\x97\x7e\x4f\x6a\xcc\xa2\x64\x9f\xec\x9c\x7f\xee\x07\xb6\x2b\xe8\x42\x39\x51\xdb\x77\x0b\x0b\xc1\xf7\x8a\xb9\xc7\x58\xaa\xb2\x2c\x7d\x9e\xf6\xf6\xc1\xc4\x3f\x2d\xb9\x3f\x65\xba\xcc\x57\x84\xa3\x41\xdb\x51\x9f\xed\x68\xd0\xdc\x7b\x98\x8d\xdd\x9f\x23\x1b\x09\xb7\x49\xd7\xc9\x9d\xb6\x1a\x04\x3b\xc0\xeb\xe3\xfc\x64\xd4\x2c\x08\x1d\x73\xa7\xb9\xb2\x75\x02\x08\x4b\x98\x53\x72\xeb\xec\xfb\x4f\xd5\xd3\xf9\x5b\xe7\xa9\x60\xbe\xf4\xea\xb8\x87\xf8\x1e\xea\x0c\x6b\x99\xbb\x82\xf7\xa1\x72\xcf\x79\xce\x58\x2a\xb2\x4d\x58\xdb\xfb\x4f\xf5\x51\xf5\x89\x8c\xd6\x93\x92\x5a\x3c\xe7\x1b\x76\x9d\x65\x4b\x3a\xb7\xb5\xe1\x7d\xb5\xf8\x33\xa1\x57\xa8\x5f\xbe\x73\x1e\xf3\xe6\x2f\xf3\xd2\x0e\x1d\xd2\xea\xec\xfc\xde\x87\x10\xc0\x59\x33\x54\x52\xb5\x07\x93\xa6\xff\xb6\xed\x58\x2d\xd8\x2f\xdd\x58\x7d\x71\x52\x7a\x5c\x49\xe7\x81\xeb\xf3\xbd\x79\x53\x82\x75\x6e\x79\x57\xe8\x1c\x92\xfa\x6f\x54\x58\x83\x3e\x9f\xbc\xdf\xff\x78\xd8\x87\x9e\xb4\x6d\x75\xf2\x68\xc5\xa1\xd0\xbf\x9f\xf3\xcf\x1d\x64\xfc\xad\xb6\xe0\xdf\xcf\xf5\x75\xfc\xbd\x8d\xd4\x10\xc5\x51\xfd\xed\xa8\xfe\x8e\x9c\xcf\x30\xbe\x0d\x47\xef\x72\x0b\xa8\x61\x96\xff\xf8\xd9\xc4\x62\xf2\xf6\x9f\xff\x2c\x3f\xf3\x9d\xf9\xbe\x2d\x34\x26\x61\x72\x7f\xcf\xbe\xc2\x13\x9a\x34\xaf\xef\x91\x1a\x37\x68\x73\x57\x9a\x6e\x22\x66\x42\xcf\x1f\xf2\x55\x9f\x3b\x98\x3c\x01\x82\x32\x8f\x6e\x96\x67\x26\x4d\x68\xbc\x38\x7f\xaf\x35\xda\xc9\xe2\x67\x35\x8c\x74\x48\xf8\x6a\x28\x71\xb5\x98\xb8\xff\xe4\x86\x9b\xe8\x5b\x6e\xb7\x74\x67\x5e\xdf\x36\x93\xf7\x7b\x58\x75\x7f\xab\x62\xeb\xd7\x69\xcd\x0a\x10\x79\xd6\x77\x3f\x7b\xdf\xaf\xd8\xf8\x56\xe9\xf9\x7c\xcb\xb8\xbe\xef\xcd\x97\xa6\x97\x6a\xd2\xd6\xdc\x81\x84\xed\xa6\x7d\xeb\xdb\x90\xd3\x5b\xbd\xde\x84\xef\x94\xb9\xc6\xf7\x8f\x9c\xf7\x38\xf7\x56\xfb\xf6\xf7\x66\x21\xde\x7c\xdb\xaf\x6f\x7f\xce\x6f\x37\x8f\xc9\x8e\x9c\x07\xbc\x75\xb6\x7a\x85\x47\x7f\x54\x87\x5a\xf6\x5b\xfb\x7b\x41\xd9\xd9\xdf\xf2\x3d\x7b\x96\xdf\x20\x35\xdf\xc4\x54\x73\x3f\xf5\xbc\x94\x4d\xc2\x89\xe2\xad\xb9\x7d\x58\x29\xdd\xd4\xd2\x9e\x7b\x45\x53\xe0\xa9\x5b\xf4\xbd\xd1\x4a\x6b\xcf\xda\xff\x34\xc7\x74\xbf\xec\x1b\xec\xfc\xe7\x6d\x4a\xde\xef\x5d\xfb\xdc\xbf\xa4\xf4\xa2\x18\xdb\x2a\xc0\xad\xf8\xa7\x26\x91\xea\x3f\xce\x95\xad\x2f\x57\x9b\x45\x3b\xbe\xdf\x12\xdf\x3b\xba\xa3\x2e\xa5\x53\x26\xef\xce\xdf\x74\xe7\xd1\x7c\xbd\xeb\x8f\xb9\xf5\xbd\xa9\xf5\xb3\xe8\xe7\xd6\x4e\x9f\x48\xcf\x3b\xdf\xdb\xfe\xf9\x43\xbf\xcf\x53\xf1\x15\x44\x79\xde\x99\x44\xf5\x50\x43\x92\xfc\xed\x53\x44\x4e\xee\xbb\xfd\x7c\x03\x3c\xb7\x6d\x0e\x68\xed\x72\xb4\xfb\x69\x83\xa9\x0b\xf5\x2e\xdf\xa0\xd1\x55\xde\x42\xfe\xb3\xce\x7d\xcb\x51\xb6\xff\x73\xbf\xad\x9a\x9c\x8b\x29\x8a\x53\x37\xef\xa7\x66\x72\x5e\x02\xb8\x5d\xfb\xe3\xd3\x71\x10\xbd\xe7\x76\x66\xd6\xab\x6f\x09\x54\xdd\x49\xbe\x8d\x8e\x57\xf9\xda\x8a\xf3\x3d\x76\x1d\x96\x69\x55\x6f\xe7\x16\x73\xdc\xf5\x1e\x59\xbe\xf9\x8f\xd9\xa9\x4c\xfb\xdc\x23\x12\x34\x38\x48\x13\xde\xb8\xe8\x7d\x7b\xe4\x94\xef\xcb\x5b\xe7\x33\xeb\xbf\x56\x39\xf5\xcf\x43\xa7\x07\xc5\xba\x82\xa2\x5a\xde\xfc\xac\xbf\x7f\xab\x19\xfa\xc2\xa2\xa9\xab\xf7\xfc\xee\x79\xe4\x71\xd3\x42\x0d\xef\x3f\xdf\xff\x37\xe1\xc9\xbb\xbe\x22\x21\xa7\xc2\x65\x13\x31\xdc\x2e\x95\xbb\x4a\x47\x22\x68\x6e\xac\x7f\x7f\x1f\x09\xbe\xcf\xa3\xdf\x73\xe2\xdf\x8e\xa4\xef\x9f\x1b\xbc\xb9\x90\x0a\xd8\xd5\xee\x8c\xe8\x91\x5b\x15\xeb\xb6\xb0\x1c\xdf\xa8\x51\xdf\x2e\xa5\x9f\x7f\x4e\x34\x5a\x29\x96\xdc\x6d\x19\x53\xf3\xd4\x62\x99\xcc\xef\x7f\x9c\x3d\x9f\xaf\xc4\xfb\xbd\x8b\xaa\xef\xd1\xf1\xf5\xa5\x57\xdf\x3d\x30\x7b\xf3\x5f\x45\xa1\x5a\xdf\xfd\xed\xa1\x7e\xdb\x83\xca\xb7\x70\xb0\x9a\x5b\xe4\x19\x93\x28\xee\xbf\xbf\x0d\x57\x1c\xb4\xef\xfd\xdc\xc9\xcd\x6d\x53\x1c\x32\xed\xfb\x3d\x1b\x0f\x82\xb4\x07\x47\x9b\xa6\x63\x8f\xd5\x7e\x26\xd9\xcd\x9e\x7b\xe7\xba\xd7\xff\xa9\xfe\x0e\xf8\xb0\xd7\x5d\x17\x46\x20\x19\x9c\x30\x5e\xf3\xcd\x11\x7e\x23\xcb\xcc\xa4\xd7\xa7\xbe\x8f\x6f\xff\xfc\xd5\xb3\xec\x58\xbb\x6c\x1d\xce\x77\x97\x3c\xea\x76\x0f\x8f\x96\xef\xbe\xbe\xa2\xd5\xb4\xbb\x35\x6f\x6a\x3c\x75\x61\x9d\x89\x76\xb6\x07\xa3\xfb\xf9\x8e\x2a\xcb\x44\x38\xa0\xf5\xe6\x6b\xef\x3e\x05\xbc\x1a\x5f\x6e\x67\xb9\xbe\x87\x03\xcf\xfb\x56\x33\x9e\x3c\x0c\xf5\xf7\xfa\x7b\x1e\xa2\xbe\x75\xb0\xbf\xe7\xb7\xe6\x3b\x5f\x63\xb7\x79\xa6\x4b\xcb\x77\x7d\xbe\x8f\xdd\xc7\x42\xa9\x85\x8d\x42\x44\xeb\xde\x5e\xdf\xdb\x94\x6f\x69\x00\x4f\x5f\x4a\x49\xee\xee\xaf\x90\x61\x7f\xbb\xc1\x7e\xdf\x57\x58\xb7\x3c\xf0\x9d\x44\x44\x7c\xf7\x9e\xe7\x51\xfb\x63\xdf\xf2\x83\x4d\xca\x93\xf3\xf9\xdc\xed\x4b\x06\x77\x59\xd6\xe3\x0f\x3d\xf5\xe7\x43\x15\xfe\xbe\xcd\x60\xd7\x67\x2c\xf6\xe2\x78\xe7\xc7\x3e\xdc\x87\xae\xd9\x99\x80\x43\x45\x78\xa8\x14\x7d\x21\x00\x63\xe9\xc4\xf9\xf7\x2b\xf5\x7b\x8b\xdf\x13\xb5\xf9\xcf\xb7\x08\xf3\x57\xf8\x76\x08\xdf\xc6\x23\xd6\xfe\x3e\x16\x00\x25\xee\xf1\x54\xbe\x5a\xb9\xda\x5d\x66\x39\xac\xf4\x89\x6f\xe7\x9d\x8f\x9e\x3b\x00\xf3\xcc\xdc\xf9\x2a\xee\x6f\x1b\x5a\x38\xe5\xf3\x3d\xbe\x26\xdd\xb4\x50\xf4\x1f\xf9\x42\xfd\xa4\x55\xdd\xf9\xcc\x83\xd5\xdc\xcb\xcc\x8d\x4b\x7e\xbe\x35\xda\xe9\x71\x3f\xf5\x7d\xb6\xf4\x97\xf5\xb7\x23\xff\xfd\xea\x43\xb6\xf9\x91\xdf\x42\xd0\xdf\x1f\x7d\xfb\xfc\x4c\x04\xd7\xfe\x6a\x22\x9c\x8d\xea\xf8\xae\x93\x56\xd3\xfc\xae\x8d\x9f\xfa\xa7\x8f\x8f\xa6\x20\xba\x6e\x11\x65\xad\x65\x09\x3b\x54\x68\x6b\x1d\xf7\x93\xaa\x92\xad\xcf\xb7\x88\x34\x81\x8b\xd9\x70\xd1\xfd\x85\xa9\x9f\xb5\xe6\xcb\xf5\x96\xd3\xb8\x6b\x55\xfd\x3f\xff\xfe\xcb\x7f\xfc\xb7\xff\xd7\xff\xed\xff\xfd\xff\xfd\x2f\xff\xf7\xff\x47\xa8\x4d\x1c\x2a\x11\x8f\x7d\x6c\x8d\x8d\xf3\xf7\xfd\x98\x42\x95\xe1\x50\x89\x78\xac\x31\xe9\xdf\x77\xb3\x46\x5e\x63\xee\xf7\xe7\xc6\xdc\x1e\xfb\x3e\xec\x62\x8d\x7f\xc6\x3f\x57\x7e\xbc\x9e\x57\x2c\xbf\x2d\xbf\xad\xf8\xfb\xff\xfc\xb7\xff\xfa\x5f\xff\xfb\x66\xc6\xf0\x2d\xaf\x58\x5e\xb1\xbd\x56\x7b\xad\x76\x9d\xf6\x2a\x6d\x64\x7f\xc7\x78\xad\x9e\xf7\xb6\x3e\x1f\x76\xb1\x9b\x3d\x6c\xb0\xc9\x5e\x76\xbc\x26\x28\x63\x8d\x5f\xc6\x2f\xe3\x97\xf1\xcb\xf8\xf5\x7e\xbe\xf3\xb5\xbe\x57\xf3\x1e\xb6\xab\x6d\x57\xdb\xae\xb6\x5d\x67\x7b\xdd\xfd\x58\xe3\xb7\xf1\xc7\x7b\x38\xbc\x0e\xaf\xc3\x4b\x1c\x97\x38\xce\x9d\xdb\x58\xbe\xa2\x39\x37\x2f\x31\x0f\x08\x2c\xdf\xe0\x2b\xca\x4b\x64\x97\xc8\xae\x30\x32\x8d\x4c\xbf\x4d\xd7\x14\xf1\x95\xc6\xa4\x6b\xa6\x91\x72\x40\x6b\x48\x25\x1c\xc2\x39\xdf\x70\xce\x37\xd4\xd0\x0c\xa5\x1a\x42\x91\x86\x50\x4c\x22\x3c\x87\x86\xd2\x0e\x63\x8d\x2f\xe3\xc5\x54\xa5\x54\x25\x25\x42\x29\x88\xb1\x7e\x2b\x8e\x6a\xa1\x2a\x3e\x11\x4a\x44\x8c\x9d\x6b\x6e\xb1\xdb\xa2\xb6\x45\x6d\x7f\xfc\x5c\xd4\xb6\xa8\x29\x20\x14\x5b\xd4\xb6\xa8\x29\x32\x14\x5b\x44\x14\x19\x0a\xa5\x83\x42\xd9\xa1\x50\x58\xc8\x99\xcd\x70\x66\x33\x9c\xbe\x0c\x67\x2d\xc7\x1a\xe9\x93\xdf\x3e\x79\x47\xb1\x9d\xc1\x0c\x67\x39\xc3\x09\xd0\xb1\xc6\xfb\xcc\x1d\x0a\x77\xde\x33\x9c\x12\x0d\x67\x3c\xc7\x1a\xef\x93\xdf\x69\x7c\x1a\x2f\x0a\x8e\x80\xc7\x16\x0b\x47\xc3\xc3\xd1\xf0\x70\x58\x3c\xb6\x28\x6c\x73\xd0\x89\xad\xd8\x66\xdf\x36\xfb\x9c\xd2\xd2\x30\x31\xb4\x56\x0c\xa7\x4b\x42\x3b\xc5\xb1\x7c\x45\x61\xfb\xe4\x9d\xe4\x72\x32\x25\x9c\x37\x19\x6b\xa4\x39\xe5\x20\xbb\x13\x28\xa1\x3a\xea\x58\xef\x47\x14\x8e\x79\x44\x67\x4e\x95\x33\xf6\xfd\x7d\xf9\x75\x50\xed\x46\x1c\x11\xa1\x72\x47\x11\xc6\x1a\x2f\x16\xb4\xeb\x71\x44\x84\xfe\x3c\x28\xe1\x83\x3a\x3d\x8e\xe8\xd0\xc3\x07\x05\x7b\x50\xbf\x07\x8d\xba\xaf\x92\x08\x9a\x79\xfa\xe1\xa0\x89\x0b\x7a\xba\xa0\x95\x0b\xba\xb9\xa0\x3a\x0e\x0a\xbb\x5f\xb3\x95\x5e\x92\xf2\x2e\xe8\xec\x82\x52\x6f\xac\xeb\x88\x1a\xad\x65\xd0\x75\x06\xb5\x26\x95\x41\x50\xe5\x04\xc2\xf2\x7d\xac\x8a\xa0\xcd\xa4\x4d\x08\x1a\x84\xa0\x4a\x18\x6b\x8c\xf5\xf3\x88\x20\xed\x55\xd0\x58\xd9\x55\x1e\x6b\xbc\x68\x9e\x97\xbf\xdf\xb9\x79\x47\xd5\x65\x9f\x2a\xec\x74\x05\x7c\x34\xd6\x7b\x10\xf7\x63\xf6\x1d\xd1\x3f\x65\xbc\xe8\x1f\xd1\xa7\x29\x0b\x8a\x30\xdd\x59\xc6\x1a\x2f\x13\x28\xc8\xa8\x3f\x42\xbf\xae\x50\x35\x7e\xec\x63\x8b\xf5\x5b\x71\xa7\x70\x99\xc5\x82\xf5\xf3\xed\xe7\xa2\x4c\x59\x30\x93\x87\x35\x46\x64\x29\x08\x82\xfa\x40\xa3\xcf\xb1\xc6\x88\x2f\xad\x41\xd0\x1d\x04\xfd\x4b\xd0\x2c\x04\x75\x43\xd0\x32\xcc\x8b\xb1\xae\x2f\x9a\x76\xb9\xc3\xde\x75\xd8\xd3\x0e\x7b\xda\x1e\xa3\xc6\x1a\x2f\x8e\x76\xbf\xc3\x7e\x78\x84\x95\xd0\xbe\x77\x84\x98\xda\xb3\x8d\x10\x59\x3b\xb7\x11\xe2\x6b\xe7\x36\xec\xe2\x86\x9d\xdb\xb0\x8b\x1b\x76\x4a\xc3\xae\x69\xd8\x9f\x8c\x10\xe5\xf0\xfd\x18\xa2\x1c\xa2\x1c\xd6\xcf\x30\x73\x43\x34\x43\x34\x43\x34\x43\x04\x43\x04\xc3\xca\x19\x22\x18\xe6\x6f\x88\x60\x88\x60\x88\x60\x88\x60\x88\x60\x88\x60\x88\x60\x88\x60\xfa\x36\x4c\x11\x4c\x11\x4c\x2b\x6a\x9a\xcb\x69\x5d\x4d\x33\x3a\x45\x36\xc5\x34\xc5\x34\xcd\xe5\x34\x97\x53\x7c\xd3\x5c\x4e\x73\x39\xcd\xe5\x14\x6b\x3b\xc9\x91\x62\x9d\x62\x9d\x62\x9d\x66\x74\x9a\xd1\x29\xee\x29\xee\x69\x46\xa7\xe8\xa7\xe8\xdb\x4d\x8d\xf4\xdd\x97\x72\x20\xe5\x40\xca\x81\x14\xf7\x14\xf7\x14\xf1\x14\xf1\x14\xeb\x14\xeb\x14\xeb\x14\xeb\x14\xeb\x14\xeb\x14\xe5\x14\xdf\x14\xd9\x14\xd9\x14\xd9\x14\xd9\x14\xd9\x14\xd9\x14\xd3\x14\xd3\x14\xd3\x14\xd3\x14\x53\xba\x48\x4d\xd2\x43\x63\xf4\x5f\xb3\x35\xc5\x3d\xc5\x3d\xc5\x5d\xab\x65\x3d\xe4\x42\x2f\xba\xb1\xae\x6c\x16\xa7\x59\xac\xb8\x5d\x28\x6e\x17\xca\xdd\xe9\x7e\x17\xba\xd0\x85\x1e\x78\x63\xf9\xca\x07\x67\x72\x23\xe5\x43\xca\x81\x94\x03\x69\x25\x4f\x99\x40\x0f\x1e\xf4\xe0\x3a\xe7\xfd\x7a\xe7\x57\x6e\x5c\xb9\x71\xe5\xc6\x95\x15\x76\xb6\xe3\xca\x84\x6b\xbe\xdf\xf5\xfd\xed\xbc\x93\x2b\xee\x57\xc4\xaf\x88\x5f\x11\xbf\x62\x7d\x45\xf9\x8a\xf2\x15\xe5\x2b\xca\x57\x94\xaf\x28\xd3\x13\xc5\x35\x97\xaf\xef\xd3\x2b\xca\x57\x94\xaf\xc8\x5e\x91\xbd\x66\xf1\x15\xdf\x6b\x16\xdf\xfc\x8e\x71\x1d\x51\xbe\xa2\xac\x28\x60\x28\x0a\xa8\x87\x44\xe8\x51\x11\x3a\x4f\x84\x8e\x14\x63\xfd\x56\xbc\xae\x78\x5d\xf1\xa2\x91\xd7\x1b\x63\x26\xb7\xf1\x62\x74\xc5\x88\x36\xd6\x26\xec\x58\xd7\x14\x1d\xba\x3c\x05\x56\x67\x31\xe0\x25\x3a\xd7\x6c\xa5\xf2\x08\xaa\x0a\xc5\x56\x43\x41\xd6\x50\x3c\x75\x2c\x5f\x6b\xaf\x73\x58\xf1\xc4\xee\x99\xbf\x0a\xbd\x28\xc8\x1a\x0a\xb2\x86\x92\xae\xa1\xbc\x6b\xa0\xf1\x63\xf9\x8a\xd7\x33\x8b\x29\xcb\x82\xae\x44\xa1\xd6\x50\x20\x36\x94\x6e\x0d\x25\x5d\xc7\xf2\x15\xc7\x67\x46\x3f\x33\x5a\x01\x45\xe5\x60\x43\x75\x88\xb1\x7c\xc5\xf7\x89\x2f\x2d\x70\x3c\x51\xa6\x08\x0e\x1a\x61\x45\xb3\xc6\x1a\x23\xbe\x8a\xd3\x28\xbe\x15\x4a\x67\x85\xf2\x5a\xa1\x74\x56\x28\xcd\x35\xd6\x95\x45\xdc\xb9\x04\xe5\xb8\x02\x7f\x0f\x25\xb8\x42\x59\xaf\xb1\xae\x29\xd6\x4f\x7c\x9f\xf8\x52\x74\xc6\x13\xe5\x67\x16\x3b\xc5\x16\x34\x53\x41\x1d\xa9\x02\x46\xa8\x89\x11\xf8\xee\x58\xaf\x22\xee\x54\x1b\x41\xcd\xa1\x62\x46\x28\xe8\x15\xaa\x6a\x8c\x35\x52\xdc\x9f\xb8\x3f\x71\x7f\x22\xee\x7c\x9c\x4a\x1d\x63\x8d\x17\x6b\xa7\x2b\xd4\xdc\x08\x68\x72\xec\x8c\x77\xde\x22\x4a\x94\x4b\x94\x4b\x94\x69\xa8\xa3\x3e\xbf\xef\x0a\x4a\x0e\x94\xb8\x97\xb8\xd3\x7e\x3a\xdb\x3b\xd6\x75\x44\x9c\xda\xce\xd9\xde\x70\x46\x78\xbe\x70\x8c\x17\xeb\x12\xeb\x12\x6b\xca\x23\xa7\x86\xc3\x89\xe0\x70\x6a\x38\x9c\x20\x1e\xcb\x57\xac\x4b\xac\xcb\xbc\x2e\xf3\xba\xcc\xeb\x3a\xff\xe2\x9d\xfb\x7e\x2f\x19\x52\x32\xa4\x64\x48\xf9\x7e\x2f\x79\x52\xf2\xa4\xe4\x49\xc9\x8d\x92\x1b\x65\xb5\x2f\xab\x01\x95\x2b\x65\xf4\x58\xef\x59\x9e\x94\x3c\x29\x79\x52\xf2\xa4\xe4\x49\xf9\x06\x2f\x59\xa1\x66\x42\x94\xac\x28\x59\x51\x32\xa1\x64\x42\x59\xb1\x4b\x3e\x94\x7c\x28\xab\x41\x59\x07\x4a\x56\x94\xac\x28\x59\x51\xb2\xa2\x64\x45\xc9\x8a\xb2\x1a\x94\xdc\x28\xb9\x51\x72\xa3\x64\x45\xc9\x8a\xb2\x02\x94\xdc\x70\x62\x34\x4a\x6e\xb4\x7c\x68\xf9\xd0\xf2\xa1\xcd\xfa\x16\xf1\x36\xeb\xdb\xac\x6f\xd1\x6f\xd1\x6f\xd1\x6f\xd1\x6f\xb3\xbe\xe5\x40\xcb\x81\x36\xeb\x5b\x26\xb4\x4c\x68\x99\x40\x32\x12\x2d\x07\x5a\x0e\xb4\x1c\x68\x39\xd0\x72\xa0\xe5\x40\x8b\x7e\x8b\x7e\x8b\x7e\x8b\x7b\x8b\x7b\x9b\xf5\x2d\xa6\x2d\xa6\x2d\xa6\x2d\xa6\x2d\xa6\x2d\xa6\x2d\xa6\x2d\xa6\x2d\xa6\xed\x7b\xbc\xcd\xfa\x16\xd9\x76\xef\xdd\xe2\xdb\xe2\xdb\xe2\xdb\x22\xdb\xf9\x1d\xef\xfa\x56\xfb\xb6\xda\xb7\x28\xb7\xd5\xa0\xc5\xba\xad\x09\x6d\x4d\x68\x6b\x42\x8b\xbe\xb3\x17\xd1\xa2\xdf\xa2\xdf\xd6\x84\xb6\x26\xb4\x4c\x68\x99\xd0\x32\xa1\x65\x42\xcb\x84\x96\x09\x6d\x7d\x68\xf9\xd0\xf2\xa1\xe5\x43\xcb\x01\xca\x71\x9d\x24\x22\x68\xc3\xf5\x2f\x0c\x3d\x0b\xc3\xbe\xeb\x58\xd7\x97\x03\x2d\x07\x7a\x72\x40\x77\xc3\xb1\xc1\x3e\xf6\xfb\xf3\x1e\x3b\xb1\xd6\xe9\x30\x14\x7c\x1d\x6b\xe4\x44\x59\x03\x8a\xb1\xbc\x16\xaf\xc5\x6b\x1b\xbf\x5d\x79\xf3\xda\xbc\xf6\xcf\xd9\x9a\x9f\xed\x9a\xdb\x35\xb7\x6b\x6e\xd7\x3c\xde\xc9\x71\xe5\xe3\x6a\xc7\x7b\x38\xc6\x1f\xe3\x8f\xf1\xc7\xf8\xf0\xea\xe1\xd5\xc3\xc8\x30\x32\x8c\x0c\x63\xd2\x35\xd3\x35\xd3\xf8\x34\x3e\x5d\x3f\x79\xa5\x6b\xe6\xcf\x27\x3e\x85\x6f\x43\x17\xde\x50\x10\x37\x94\xbf\x0d\xf5\xc7\x42\x75\xb2\x50\x97\x2c\xd4\x2e\x0b\x3b\xda\x63\x79\x3d\xe3\x9f\xf1\xcf\xf8\x67\xe4\xf3\xea\xcf\xf8\x32\xbe\x8c\x2f\xaf\x52\xbc\xca\x95\xcb\xf8\x32\xbe\x8c\x6f\xe3\xdb\xf8\x36\xbe\x8d\x6f\xaf\xd2\x5e\xa5\x79\x7d\x33\x61\x56\x83\x44\xb7\x12\xdd\x52\x64\x3d\x94\x48\x1f\x1b\x6c\xb2\x97\x7d\x6c\xb1\x7c\x65\x0b\xd2\x95\x48\x97\xb2\xeb\x63\xf9\xca\x99\x25\x67\x96\x9c\x41\xb4\x94\x63\x0f\x45\xdc\x43\xc9\xf6\xb1\x7c\x65\x0e\xa2\xa5\x74\xe5\x58\x23\xe5\x00\x7e\x95\xc8\x55\x22\x57\x4a\x5d\x86\xf2\x96\xa1\x42\xd4\x58\xaf\x2b\xee\x38\x95\xfa\x51\xf3\x90\xe1\xb5\xc4\x7d\x89\x3b\x66\xa5\x4c\xe6\x77\x2b\x70\x2c\xaf\xe4\x95\x5f\x2f\xaf\x7e\xf9\x8a\x35\x8a\xa5\x66\x45\xa8\x53\x11\x2a\x54\x8c\xe5\x2b\xd6\xe8\x96\x5a\x16\xa1\xd2\x45\x38\x4d\x3c\x96\xaf\xb8\xa3\x5e\x89\x7a\xe5\x7a\x7c\x45\x1f\xfb\x72\xa2\x2e\x9c\xae\x1b\x6b\x7c\x19\x29\xee\x78\x57\xea\x0f\xe4\xe4\xc1\x58\xd7\x17\xf1\x25\xe2\x38\x18\x3d\xf2\xd8\xb9\xa6\x2e\x41\xb9\xc5\x17\x01\xcb\x2d\xbe\x38\x58\xe2\x60\xb9\xc5\x17\x01\x4b\xec\x2b\xb1\xaf\xdc\xe2\xb5\xc5\x4b\x39\xed\x44\xc0\x12\x01\x4b\xec\xcb\x6e\x6d\xe8\x79\x36\xd6\x2b\x9a\x95\x88\x56\x22\x5a\x89\x68\x29\x44\x1a\x4a\x90\x86\x72\xa4\x63\x8d\x37\x43\x71\xad\xc4\xb5\x54\xf9\x18\xeb\xb7\x62\xb1\xc5\x02\xcb\x72\x26\x29\x9c\x4f\x1a\x7b\x7f\xce\x56\xbc\x2b\xf1\xae\xc4\xbb\x52\x15\xa3\xdc\x22\x82\x7d\xa5\xea\x46\x89\x80\xe5\x16\x11\xb5\x8c\x12\x0d\x4b\x1c\x2c\x71\xb0\xc4\xc1\x52\x4d\xa4\x44\xc3\x12\x0d\xcb\x6d\x3e\x62\x62\x89\x89\x25\x26\x96\x5b\x74\x90\xb1\xdc\xa2\x83\x8f\xe5\xee\x7f\xf1\xce\xcd\xd9\xfd\x8d\xa3\x39\x7b\x44\xf3\x98\xb3\x48\x5a\xaa\xc6\xa0\x9f\x77\xe8\xf0\x3d\xf6\xb2\x8f\x2d\x96\xaf\x39\x8b\xaa\xe9\x45\x17\x9a\x21\x84\x72\xb0\xa1\x1c\xec\x58\xbe\xe6\x2c\xc2\xe6\xfc\x7b\x38\xe5\x39\xd6\x18\x71\xc7\xd3\xf2\x98\xa7\x6a\x4a\xe4\x31\x4f\xf1\xb4\xc4\xd3\x12\x43\x4b\x7c\x2c\xf1\xb1\x74\x76\x39\x51\x32\x8a\x84\x79\x28\xf7\xae\xc4\x1d\x13\x4b\x4c\x2c\x31\xb1\x3c\x66\x25\x32\x96\xce\x22\x27\x3e\x96\x4e\x2a\x27\x4a\x96\x28\x59\x22\x63\x89\x86\x25\x1a\x96\xc7\xbc\xc3\xc4\x12\x13\x4b\x67\x22\x13\xef\x4a\xbc\x2b\x91\xae\x44\xba\x12\xe9\x4a\xa7\x24\x13\xe9\x4a\xa7\x21\x13\xef\x4a\xbc\x2b\xf1\xae\xc4\xbb\x12\xe3\x4a\x8c\x2b\x31\xae\xc4\xb8\x12\xe3\x4a\x8c\x2b\x43\x74\x9c\xb5\x4a\xa7\xaf\x12\xf5\x4a\xbc\x2b\xf1\xae\x74\xba\x2b\x9d\xdf\x4a\xe7\xb1\x12\x01\x4b\xa7\xb8\x12\x07\x4b\x67\x6b\xd2\x19\x9a\xc4\xc4\x12\x13\x4b\x4c\x2c\x31\xb1\xc4\xc4\xd2\x79\x9a\x74\xf6\x2b\xf1\xb1\xc4\xc7\xd2\xc9\x9b\x44\xc9\x12\x25\x4b\x94\x2c\xf1\xb1\xc4\xc7\x12\x19\x4b\x64\x2c\x91\xb1\xc4\xc4\x12\x0d\xcb\x10\x3b\x67\x38\x12\x19\x4b\x64\x2c\xd1\x30\x72\x9f\xb1\xc6\x88\x1d\x0e\x96\x38\x58\xa2\x5e\x89\x7a\x25\xea\x95\x78\x57\xe2\x5d\x7a\xcf\x8f\xf5\x8a\x22\x48\x8f\x9f\x78\x57\xe2\x5d\x3a\xd3\x8f\xe5\x65\x9e\xe2\x5d\xba\xd4\x8f\xe5\x2b\x9a\xa8\x17\x95\xd2\x58\x5e\x62\x8a\x7d\x25\xf6\x95\x21\xa6\x08\x58\x22\x60\x89\x80\x25\x02\x96\x08\x58\x22\x60\x89\x80\x65\xfc\x8b\xd9\x1a\x66\x2b\x56\xa6\xb3\x7e\x24\x62\x96\x88\x59\x22\x66\x89\x98\x25\x62\x96\x88\x59\x22\x66\x89\x98\x65\x9a\xad\xb8\x59\xe2\x66\x89\x9b\xe9\x10\x39\x96\xaf\xdc\x40\xcf\x48\xe6\x43\x57\xc8\xb1\xbc\xe4\x03\x6e\xa6\x2b\x64\xe8\x13\xf9\xeb\x9d\xe3\x69\x89\xa7\x69\x6f\x32\xd6\xd5\xe4\x09\x9e\x96\x18\x5a\xa6\xef\xdf\x94\x27\x48\x9a\xbe\x95\xa1\x63\x65\xe8\x58\x39\xd6\xab\xcb\x19\x54\x8d\x02\x3a\xb4\x55\x09\x8d\x53\x42\x43\x95\xd0\x3e\x25\xb4\x61\x19\xeb\x2f\x92\x33\x29\x67\x10\xb6\x44\xd8\xb4\x58\x19\xeb\xca\xbe\x7f\x51\x35\xed\x56\x42\x63\x96\xb1\x46\xca\x1f\x54\x2d\xb1\xb2\xc4\xca\x12\x25\x4b\x94\x2c\x91\xb1\x44\xc6\xb4\x6d\x19\x6b\xa4\x3c\x41\xc6\x12\x19\x53\xd0\x3a\x28\xd6\xc6\x1a\x23\x1f\x54\xb9\x51\xfa\x7a\xac\x6b\x8a\x38\x32\xa6\x48\x76\x28\x80\x1d\xda\xc8\x84\x82\xd9\xa1\xc0\xf6\xd8\xc7\x16\xcb\x4b\xac\xaf\x58\x63\x62\x79\xc5\xfa\x8a\x35\x3e\x96\xf8\x58\xe2\x63\x0a\x72\x87\xba\x97\xa1\x8e\x65\xa8\x60\x19\xea\x61\x8e\xe5\x65\x05\xc0\xcd\x12\x37\x4b\xdc\x4c\x7d\xcb\x50\x15\x33\x54\xcb\x0c\xf5\x30\xc7\xf2\xb2\x0e\x5c\x51\xbe\xa2\x8c\xa4\xa9\x93\x19\xa9\x9e\x4f\x5e\x51\xc6\xd6\x54\xc8\x0c\xd5\x35\x43\x9d\xcc\x50\x63\x73\x2c\x5f\xdf\xef\x57\xdc\xd1\xb6\x44\xdb\xf2\x5a\x2b\x30\xb7\xc4\xdc\xd4\xea\x1c\xcb\x4b\xdc\x31\xb7\x44\xdb\x12\x6d\x4b\xb4\x4d\xfd\xae\x20\x1b\x0b\x95\xbe\x42\x8d\xaf\x50\xdd\x2b\x54\xfd\x0a\x15\xbd\xc6\xba\xb2\xe8\xab\x54\xa1\x72\xcb\x58\xe3\xad\x18\x28\x5c\xa2\x70\x89\xc2\xa9\xe8\x32\xd6\x78\x39\x80\xbf\x25\xfe\xa6\x02\xcc\x58\xe3\xad\x12\xc8\x5b\x22\x6f\x89\xbc\x25\xf2\x96\xc8\x5b\x22\x6f\x89\xb6\x25\xda\xa6\x46\x42\xa8\x8e\x10\xaa\x23\x8c\x2d\xd6\xc8\xf5\xf9\x39\x5b\x51\x38\x27\xb0\xc7\x26\xeb\x3a\xb2\x02\x73\x73\xea\x34\x9c\x43\x1d\x6b\x8c\x4c\x40\xd8\x12\x55\x73\xd6\x70\xac\xdf\x8a\x38\xb6\xa6\x63\x7d\x24\xaa\xe6\xc4\x55\x38\xbd\x34\xd6\x48\xf1\xc5\xd3\xa8\xae\x43\x17\xfc\xd0\xf9\xfe\xe7\x3b\x17\x77\xe7\xfb\x13\x85\x4b\x14\x4e\xbf\xfc\xb1\xae\x29\xfa\x28\x9c\xce\xfa\x63\xbd\x13\x39\x80\xc8\xe5\xb3\x02\xe0\x72\x89\xcb\x25\x2e\x97\x58\x5c\x62\x71\x89\xc2\x25\x0a\x47\xe0\x11\xba\xec\x07\x15\x45\x24\x0a\x97\x2a\x50\x25\x16\x97\x58\x5c\xe2\x6f\xa9\xd0\x75\x22\x6f\x89\xbc\xe5\xb3\x02\xe0\x6f\xda\x2a\x8e\x9d\xeb\xe0\x6c\x89\xb3\x69\xc6\x38\xd6\xcf\xcd\x68\xac\x2c\x31\xb1\xc4\xc4\x12\x13\x4b\x04\x4c\x6b\x94\x20\x66\x8d\xc4\xbe\x12\xfb\xd2\x38\x65\x2c\x5f\xd1\xc1\xb5\x12\xd7\x4a\x5c\x4b\x8b\x95\x48\x2c\x2b\x51\xac\x44\xb1\xc8\xc4\xc6\xfa\xad\xb8\x20\x5a\xea\x60\x8f\x75\x4d\x9f\x39\xa2\xa5\x26\xf6\x58\x5e\x3e\xf3\xf2\x99\x97\xcf\x1c\xdd\x52\xd3\x72\x2c\x5f\x9f\x79\xf9\xcc\xcb\x67\x8e\x7a\xa9\x75\x19\xea\x5b\x8e\xe5\xeb\xbb\xbb\x44\x01\x01\x53\x77\x6b\x2c\x5f\xb1\x40\xc0\x54\xe8\x8a\x2c\x11\xc1\xc1\x12\x07\x53\xcd\x65\x2c\x5f\x2b\x33\x0e\x96\x38\x98\x2a\x0e\xa1\xa2\x43\xa8\xe2\x30\x96\xaf\x48\x95\x48\x61\x62\x89\x89\x25\x26\xe6\xac\xf9\x58\xbe\x22\xd8\xbe\xa3\x5b\x1c\xf1\xb1\xc4\xc7\x12\x1f\x4b\x7c\x4c\xd5\xdf\x50\x21\x30\x12\x0d\x4b\x1c\x2c\x71\x30\xfd\x95\x23\xf1\xae\x6c\x51\x46\xbd\x12\xf5\x4a\xa4\x2b\xd5\xff\x49\x8c\x2b\xdb\xbc\xc3\xb8\x12\xdd\x4a\x5c\x2b\x71\x2d\x07\xce\xc6\x1a\x63\xde\xa9\x09\x94\xb8\x56\xe2\x5a\x89\x6b\x65\x8b\x32\xba\x45\xce\x1c\x5a\x2b\x84\xea\x85\xa1\x92\x61\x24\x8a\x95\x28\x56\xa2\x58\x89\x62\x11\x41\xff\x9a\xad\xe8\x56\xa2\x5b\x89\x6b\x25\xae\x95\xb8\x56\x22\x5a\x89\x68\x25\xa2\x95\x88\x56\x22\x5a\x89\x68\x25\xa2\xa5\xc5\xe8\x58\x5e\x22\x8b\x68\x69\x8c\x36\xd6\x78\xd1\xc4\xb5\x12\xd7\x52\x51\x39\xd4\x58\x0e\x87\x00\xc6\x7a\x95\xfe\xa9\x9f\xc9\x2f\xef\x52\x77\xe1\xfe\xc7\xf9\x8b\xfb\x99\xf0\x5e\x00\xec\x7e\x3e\xdf\x9f\x04\x9b\xec\x65\x1f\x5b\xec\xb8\x42\x62\x17\x12\xbb\x0e\xc6\x5f\x60\xec\x02\x63\x17\x18\xbb\xc0\xd8\x05\xc6\x74\x51\x1d\xcb\x77\x1b\xbf\x8d\xdf\x46\x6e\x23\xb7\xdf\x1e\xd7\x3c\x7e\x7b\x5c\xed\x18\x73\x5c\x21\xbc\x6e\xb8\x42\xf8\x6d\xf0\x0d\xaf\x12\xae\x90\xc6\xa4\xeb\xa4\xeb\xa4\x91\xe9\x3a\x69\x64\xba\x5a\x1a\x7f\x8d\xbf\xc6\x5f\x57\xbe\xbc\x2e\xaf\xcb\xeb\x7a\x95\xcb\xf7\xf2\xbd\x7c\x1f\xdf\xc7\xf7\xf1\x7d\x7c\x1f\xdf\xc7\xf7\xf1\x7a\xbc\x1e\xaf\xe2\x55\xbc\x8a\x57\xf1\x2a\x5e\xc5\xab\xbc\x62\xf1\x2d\xbe\xc5\xb7\xf9\x36\xdf\xe6\xdb\x7c\x9b\x6f\xf3\x6d\x5e\xcd\x4b\xa8\x01\xad\x0b\x68\x29\xdb\x19\xca\x76\x86\xb2\x9d\x63\x2f\xfb\x58\xe3\xc5\x17\xc4\xba\xf0\xd5\x85\xaf\x2e\x7c\xa5\x5c\x51\x28\x68\x32\xb6\x58\x5e\x22\xbb\xb6\x91\x22\x0b\x5c\x5d\xe0\xea\x92\x62\x5d\xf8\xea\x92\x62\x5d\x10\xeb\x82\x58\x97\x08\xeb\x42\x59\x4e\x0d\x8c\xe5\x25\xee\x44\x58\x97\x08\xeb\x12\x61\x5d\x70\xeb\x12\x61\x5d\x88\xeb\xae\xe0\x2b\x1f\x80\xae\x0b\x74\x5d\xb2\xac\x0b\x77\x5d\xb8\xeb\xc2\x5d\x17\xee\xba\x70\xd7\x85\xbb\x2e\xdc\x75\xe1\xae\x0b\x77\x5d\xb8\xeb\x42\x5c\x17\xe2\xba\xe0\xd6\x05\xb7\x2e\xb8\x75\x61\xad\x0b\x6b\x5d\x58\xeb\xc2\x5a\x17\xd6\xba\xb0\xd6\x85\xb5\x2e\x94\xe5\xfc\xc3\xd8\x9f\xdb\xda\x17\xe8\xba\xe4\x5d\x17\xee\xba\x70\x97\xd3\x12\x63\xbd\xae\x7c\x80\xbb\x2e\xdc\x75\xe1\xae\x0b\x77\x5d\xb8\xeb\x92\x7d\x5d\xb2\xaf\x0b\x7d\x39\xb6\x18\x17\x00\xbb\x5b\x56\xc0\x60\x17\x06\xd3\x6d\x71\x6c\xb2\x97\x7d\x2c\xaf\xdf\x37\x62\x17\x30\xbb\x24\x63\x17\x36\x73\xb2\x2f\x1c\xed\x08\x87\x34\xc7\x16\xeb\x9a\xdb\x3b\xd9\xbc\x64\x11\x90\x76\x49\xc9\xee\x96\x4b\xa0\x9a\xf3\x20\xe1\x3c\xc8\x58\xbe\x72\x89\xac\xec\x42\x6e\x97\xb8\xec\x02\x6f\x97\xb8\xec\x6e\x19\x05\xc2\x5d\x10\xee\x12\x97\x5d\x28\xee\x42\x71\x17\x8a\x73\x80\x69\xac\xf1\xb2\x08\x84\xbb\x20\x9c\x46\xff\x63\x8d\x94\x39\x64\x65\x57\x67\x91\xab\x5b\xc9\x05\xe7\x2e\x38\x77\xc1\xb9\x0b\xcb\xdd\x6d\x3d\x51\x20\x5c\x59\xdc\x50\x2e\x37\x14\xca\x0d\x65\x11\x43\x09\xb0\xb1\xae\x2f\x73\xe0\xb7\x0b\xbc\x5d\xe0\xed\x02\x6f\x17\x78\xbb\xc0\xdb\x05\xde\x2e\xf0\xe6\x10\xe7\x58\xaf\x22\x4f\x80\xb7\x0b\xbc\x39\x08\x3a\x96\x97\x0c\x81\xdc\x2e\x49\xda\x05\xd5\xf4\xae\x0e\x7d\xac\x43\xc7\xeb\xb1\x87\x4d\xf6\xb2\x7e\x2b\xca\x80\xd9\x05\xcc\x1c\x14\x0f\x5d\xb1\xc7\xce\x75\x14\x5b\xd5\xbb\x6e\xac\x31\x62\x0a\x98\x5d\xc0\xec\x02\x66\x17\x30\xd3\x6c\x24\x34\x1b\x09\x07\x61\xc7\xf2\x12\x4d\xf0\xec\x12\xa3\x5d\x62\xb4\x0b\xa4\x29\x53\x1a\xca\x94\x8e\xe5\x2b\xa6\xd0\x9a\x52\xa6\x63\xf9\x8a\x2c\x01\xda\x55\x10\x50\x89\x93\x50\xe2\x64\x2c\x5f\xeb\x03\xe4\x76\x21\xb7\x0b\xb9\x5d\xb0\xed\x82\x6d\x17\x66\xbb\x30\xdb\x25\x40\xbb\x30\xdb\x25\x40\xbb\x47\x64\xc9\xd0\x9c\x3f\x1a\x6b\xbc\x98\x02\x6c\x97\xa0\xec\xc2\x6c\x17\x66\xbb\x30\xdb\x05\xd8\x2e\xc0\x76\xa1\xb5\x0b\xad\x5d\x68\xed\x12\x91\x5d\x80\xed\x02\x6c\x57\x71\xb1\xab\xac\xd8\x05\xdb\x2e\xd8\x76\x61\x36\x3d\x50\x7f\xcd\x56\xe0\x4d\xff\xd4\xb1\x7c\xad\xff\x60\x9b\x3e\xa9\xa1\x73\xea\x58\x63\xcc\x59\x80\xed\x02\x6c\x3a\x4e\x8d\x35\x5e\x64\x01\xb6\x0b\xb0\xe9\x56\x35\xd6\x6f\x45\x90\xdc\xec\x82\x6a\x5a\x3d\x84\xb6\x0f\x71\xc9\xcd\x1c\x28\x0c\x4d\x1e\x7e\xbe\x73\xf1\x85\xdf\x34\x82\x08\x2d\x23\xc6\xba\xb2\xf8\x12\xa6\x69\x31\x31\xd6\x95\xc5\x97\x3c\xcd\xf1\xc7\xd0\x5c\x62\x2c\x5f\xb3\x98\x3c\xed\x92\xa7\x5d\xf2\x34\x45\xac\xc3\x31\xb1\x50\xb8\x7a\x2c\x5f\xd1\x87\xeb\x14\xb7\x1e\xcb\x57\xf4\x41\x3b\xc7\xca\x42\x01\xec\xb1\x7c\x65\x02\x68\x77\x41\xbb\x0b\xda\x5d\xd0\xee\x82\x76\x37\x64\x08\x74\x77\xa1\xbb\x0b\xdd\x29\x98\x3a\x96\xaf\x6c\x81\xee\x94\x53\x1d\xcb\x57\xce\x40\x77\x8a\x09\x8e\xe5\x2b\x73\xa0\x3b\xa5\xc7\xc6\xce\x78\x28\x4e\x01\xb2\x50\x80\x6c\x6c\xb2\xc5\x1a\x23\x2b\x80\xb7\x0b\xb6\x29\x80\x32\xd6\x6f\xcd\x74\x98\xed\xc2\x6c\x17\x3c\xbb\xe0\xd9\x85\xcd\x2e\x6c\x76\x61\xb3\x4b\x80\x76\xc1\xb3\x4b\x80\x76\x21\xb4\x0b\xa1\x5d\x08\xed\x42\x68\x17\x36\x53\x20\x7c\xac\xdf\x8a\x2c\x6c\x76\x61\xb3\x0b\x9b\x29\x7a\x32\xd6\x35\xc5\x14\x36\xbb\xb0\xd9\x85\xcd\x2e\x6c\x76\x61\xb3\x4b\x98\x76\xc1\xb3\x4b\x98\x76\x21\xb4\x4b\x9e\x76\x81\xb4\x0b\xa4\x5d\x20\xed\x02\x69\x17\x48\xbb\x40\xda\x25\x3d\xbb\x70\xda\x85\xd3\x2e\xe9\xd9\x05\xd5\x2e\xa8\x76\x49\xcf\x2e\xe9\xd9\x05\xd8\x2e\xc0\xe6\x48\xe1\x58\xbe\xa2\x09\xb0\x5d\x80\xed\x92\x9e\x5d\xd2\xb3\x0b\xb6\x5d\xd2\xb3\x0b\xb9\x5d\x65\xa4\x2f\xf0\x76\x81\xb7\x0b\xbc\x5d\xe0\x4d\x15\x85\xb1\xe3\x7b\x7d\xcb\xc3\x6f\x17\x7e\xbb\xf0\xdb\x85\xdf\x2e\xfc\x76\xe1\xb7\x0b\xbf\x5d\xc8\xed\x42\x6e\x17\x6c\xbb\x60\xdb\x05\xdb\x2e\xcc\x76\x61\xb6\x0b\xb3\xdd\x2b\xee\x77\xff\x84\x1c\x6a\x4e\x84\xc3\x8f\x63\x5d\xd3\x5a\x01\xc5\x5d\x28\xee\x5e\xdf\xec\x50\xdc\x85\xe2\x14\x27\xf9\x1e\xd9\x1b\xcb\x4b\xb6\x80\x70\x17\x84\xbb\x20\xdc\x05\xe1\x2e\x08\x77\x41\xb8\x0b\xc2\x5d\xf8\xed\xc2\x6f\x17\x7e\xbb\xf0\xdb\x85\xdf\xee\xcd\xdf\xf7\x33\xe0\xdc\x05\xe7\x2e\x38\xa7\x57\xf4\x58\x57\x96\x63\x10\x9d\xa3\xa1\x63\x5d\x59\x8e\x01\x75\x3a\x4c\x87\x4e\xd2\xa1\xab\xf4\x58\x5e\xb2\x0b\xa8\xbb\x40\xdd\x05\xea\x2e\x50\xa7\x7b\xdf\x58\x5e\x72\x0c\xb4\xbb\xa0\xdd\x05\xed\xb4\xbb\x09\xe7\x13\x43\xbb\x9b\xb1\x7c\xe5\x18\x68\x77\xaf\x1c\x23\xa0\x73\xc8\x3c\x14\xd7\x0f\xc5\xf5\xc3\x69\xc3\x50\x7a\x3f\x14\xda\x0f\xa5\x97\x43\x31\xe6\x50\x8c\x39\x94\x67\x0e\x65\x98\xc3\xa9\x9b\xb8\x44\x73\xca\x92\x86\x42\xa5\x63\x0f\x1b\x6c\xb2\x97\x7d\x6c\xb1\x7c\xe5\x18\x5c\x77\x89\xe6\x2e\xd1\xdc\x85\xee\x2e\x74\x77\x89\xe6\x1c\xa2\x1d\xcb\x57\xbe\x11\xcd\x5d\xa2\xb9\x4b\x34\xa7\x58\xc8\x58\xbe\x32\x0a\xd2\xbb\x90\xde\x25\x9a\xbb\x44\x73\x17\xde\xbb\x44\x73\x17\xe4\xbb\x4f\x5e\x29\xb6\x75\x01\xbf\x0b\xf8\x5d\xc0\xef\x12\xd3\x5d\xd8\xef\xea\xfa\x76\xc1\xbf\x0b\xfe\x5d\xf0\xef\x92\xd4\x5d\x08\xf0\x42\x80\x17\x02\xbc\xe0\xdf\x7d\x32\x07\xd8\xbb\xc0\xde\x05\xf6\x2e\xa4\xa7\x6a\xc6\x58\xd7\x97\x2d\x90\xde\x85\xf4\x2e\x8c\xa7\x04\xc5\x58\xe3\xe5\x09\x98\x77\xc1\xbc\x4b\x58\x77\x21\xbd\x0b\xe9\x5d\x48\xef\x3e\x19\x02\xec\x5d\xf2\xba\x0b\xef\x5d\x78\xef\xc2\x7b\x17\xde\xbb\xf0\xde\x25\xb5\xbb\xa4\x76\x17\xea\xbb\xa4\x76\x5a\x2e\x8c\xe5\x2b\x43\x60\x3f\xc7\xb0\xc6\xf2\x95\x27\xe0\xdf\x7d\x56\x21\xe2\xbb\x4b\x7c\xe7\xe0\x5d\x5c\xe2\xbb\x0b\x0a\x5e\x50\xf0\x12\xdf\x5d\x65\x4c\x2f\x61\xdd\x2d\x79\x02\x16\x5e\xb0\xf0\x82\x85\x97\xc8\xee\x12\xd9\x39\x24\xf9\x6b\xb6\x82\x8b\x97\x10\xef\x2a\x78\x77\xc9\xf1\x2e\x39\x9e\x03\xd7\x71\xa1\xc7\x0b\x3d\x5e\xe8\xf1\x92\xe3\x5d\x72\xbc\x4b\x8e\xe7\xb8\xda\x58\xbe\xb2\x08\x92\xbc\x90\xe4\x85\x24\x2f\x24\x79\x21\xc9\x0b\x49\x5e\x30\xf2\x82\x91\x17\x8c\xbc\xe4\x75\xb7\xfe\xc5\xfd\x0c\xf1\xdd\x2d\x19\x55\x32\x0a\xc2\xbc\x10\xa6\xca\x23\x63\x5d\xcd\x5a\x04\x5b\x5e\xd8\xf2\xc2\x96\x17\xb6\xbc\xb0\xe5\x85\x2d\x2f\x6c\x79\x61\xcb\x0b\x5b\x5e\xd8\xf2\xc2\x96\x17\xb6\xbc\xb0\xe5\x85\x2d\x2f\x6c\x79\x61\xcb\x0b\x5b\x5e\xd8\xf2\xc2\x96\x17\xb6\xbc\xb0\xe5\x85\x2d\x9d\xba\xfe\x1e\xb7\x1e\xcb\x57\xa6\xc1\x96\x4e\xb4\x87\x73\x78\xe1\x50\xe8\x58\xbe\x32\x0d\xb6\xbc\xb0\xe5\x85\x2a\x2f\x54\x79\x41\xca\x0b\x52\x3a\x54\x38\xd6\x95\xe5\x12\x30\x79\x81\xc9\x0b\x4c\x5e\x60\xf2\x82\x91\x97\x4c\xef\x92\xe9\x5d\x32\xbd\x0b\x4c\x5e\x32\xbd\x0b\x4f\x5e\x78\xd2\x29\xd0\x50\x78\x65\x2c\x2f\xb9\x01\x55\x5e\xa8\xf2\x42\x95\x97\x34\xef\x02\x96\x97\x34\xef\xc2\x96\x97\x40\xef\x82\x97\x97\x40\xcf\x19\xfc\x70\x70\x36\x54\x3f\x1a\x6b\xbc\x7c\x00\x32\x2f\x81\xde\x85\x33\x15\x7c\x1a\xeb\x55\x44\x1c\xce\xbc\x70\xe6\x05\x32\x2f\x90\x79\x81\xcc\x4b\xa0\x77\xe1\xcc\x4b\xa0\x77\x5b\xdc\xc9\xf4\x2e\xc0\x79\x01\xce\x0b\x6a\x5e\xa2\xbc\x0b\x58\x5e\xc0\xf2\x92\xe3\x5d\xd8\xf2\xc2\x96\x17\xb6\xbc\x80\xe5\x05\x2c\x15\x17\x18\x6b\xa4\x68\x82\x94\x17\xa4\xbc\x20\xe5\x6d\x71\x6c\x71\x04\x2c\x2f\x60\xa9\xcb\x6c\x28\x6e\x30\xd6\xcf\x27\x82\x0f\x63\x7c\x18\xa3\x42\xfe\x63\x2f\xfb\xfd\x6d\x8f\x9d\x78\x3d\x5c\xf1\xe1\x8a\x0f\x57\x7c\xb8\xe2\xc3\x15\x1f\x96\xf8\x50\xc4\x87\x22\x3e\xc2\xba\x87\x25\x3e\x2c\xf1\x91\xce\x3d\x72\xb9\x87\x28\x3e\x44\xf1\x21\x8a\x0f\x51\x7c\x44\x73\x8f\x68\xee\xa1\x8b\x8f\x68\xee\x61\x8c\xef\x13\x3f\xef\x67\x1e\x0e\xf9\xc8\xeb\x1e\x1a\xf9\x88\xec\x1e\x26\xf9\x3e\xe1\x9a\xe9\x6a\xe9\x3d\xa4\xf1\x69\x7c\x1a\x9f\xc6\xa7\xf1\xe9\x9d\xe4\xd7\xcb\x3b\xb9\x7c\x2f\xdf\xcb\xf7\xf2\xbd\x7c\x2f\xdf\xcb\xf7\xf2\xbd\x7c\xef\x4f\x99\xde\xc3\x2d\x1f\x6e\xa9\x40\x49\xa8\x55\x33\xd6\x95\x9f\x2b\x3f\x57\x7e\xae\xfc\x5c\xf9\x79\x57\xc5\xb7\xf8\x16\xdf\xe2\x5b\xc6\x97\xf1\x65\x64\x1b\xd9\x46\xb6\x31\xed\xfa\xed\xfa\x6d\xfc\x37\x37\xda\xf5\x67\x76\x3f\x7c\xf2\x61\x92\x0f\x93\x7c\xe4\x75\x0f\x99\x7c\xc8\xe4\x43\x23\x1f\x1a\xf9\x70\xc8\x87\x43\x3e\x1c\xf2\x11\xd0\x3d\x34\xf2\x11\xd0\x3d\x4c\xf2\x61\x92\x0f\x93\x7c\x98\xa4\x0a\x20\x63\x8d\x94\x1b\x08\xe4\x43\x20\x1f\x02\xa9\x66\xd3\x58\x57\x16\x71\xd4\xf1\xe1\x8d\x0f\x6f\x54\xd7\x63\xac\x31\x22\x8e\x34\x3e\xa4\xf1\x21\x8d\x0f\x69\x7c\x48\xe3\x43\x17\x1f\xae\xf8\x70\xc5\x47\x3a\xf7\xd0\xc5\x87\x2e\x3e\x74\xf1\xa1\x8b\x0f\x5d\x7c\xe8\xe2\xc3\x15\x1f\xae\xf8\x70\x45\x1d\x9d\xc7\x1a\x2f\x52\xe4\x72\x8e\xc6\x8f\xe5\x25\x52\x88\xa2\x06\x4a\x63\x79\x95\xf1\xe2\x85\x25\x2a\x36\x3d\xd6\x78\x51\xc3\x12\x1f\x96\xf8\xf0\xc3\x87\x1f\x3e\xe4\xf0\x21\x87\x0f\x39\x54\x48\x64\xec\x65\x1f\x5b\xac\xf1\x62\x87\x0d\x3e\x3c\xf0\xed\x65\xa4\xd8\x21\x81\x0f\x09\x7c\x48\xe0\x43\x02\x1f\x12\xf8\x30\xc0\x87\x01\x3e\x0c\xf0\xa1\x7f\x0f\xfd\x7b\xe8\xdf\x43\xff\x1e\xfa\xf7\xd0\xbf\x87\xfe\x3d\xf4\xef\x39\x60\xfa\x30\xc0\x87\x01\x3e\x0c\xf0\x61\x80\x0f\x03\x7c\x18\xe0\x73\xc0\xf4\x61\x80\x0f\x03\x7c\xe4\x78\x0f\x09\x7c\x48\xe0\x43\x02\x9f\x63\xa6\x0f\x0f\x7c\x78\xe0\xc3\x03\xd5\xf4\x0a\xc5\x71\xc6\xf2\x35\xa3\xf1\xc0\x47\xac\xf7\x50\xc1\xb7\xef\xcf\xfb\x99\x87\x1c\x3e\x47\x54\x1f\x7e\xf8\xf0\xc3\x87\x1f\x3e\xfc\xf0\xe1\x87\x0f\x3f\xd4\xc9\x3b\x94\xad\x0a\xbd\xbd\xc7\xf2\x92\x21\x28\xa2\x3e\xdf\xa1\xcf\x77\xe8\x02\x3e\x96\x57\x19\x2f\x37\xf0\xc3\x87\x1f\x6a\x86\x39\xd6\x78\xb9\xb1\xfb\x5f\xbc\x73\x99\x83\x31\x6a\xcf\x12\x8f\x4c\xef\xe1\x8a\x9a\xb7\x8c\x0d\x36\xd9\xcb\x3e\x76\x5e\x97\x34\xef\x21\x8d\x0f\x63\x54\xd8\x37\x14\x5d\x1d\x6b\xa4\xfc\x21\xc7\x7b\x78\xa3\xd6\xc4\xa1\x11\xf1\x58\x5e\x56\x00\xbc\x51\xa1\xc3\x6f\x25\x95\xb1\x46\xca\x1c\xa4\x51\x71\xab\x50\xc1\x6a\xec\x77\xa4\x2b\xcb\x13\x5c\x51\x53\xc1\xd0\x84\x70\xac\x6b\xca\x13\x44\xf1\x21\x8a\x0f\x51\x7c\x88\xe2\x43\x11\x35\x27\x0c\x4d\x08\x43\xbb\xc2\xd0\xd2\x30\x34\x4f\x1e\xeb\xca\x56\x03\x44\xf1\x21\x8a\x9a\x1f\x86\x56\x4b\x63\x79\x89\x35\xa2\xf8\x48\xf9\x1e\x29\x9f\x72\x16\xa1\xf9\x52\x68\xd3\x14\x9a\x32\x8d\xe5\x2b\xe2\xa8\xe3\x43\x1d\x1f\xea\xa8\x02\x56\x68\xe2\x34\x96\x97\xb8\x13\xf7\x3d\x04\xf2\x21\x90\x0f\x81\x7c\x08\xa4\x56\x22\xa1\x89\xc8\x58\x5e\x56\xf2\xf3\x8d\xb2\xf5\x41\xf9\x75\x6d\x03\xc6\x6e\xf6\xb0\xc1\x26\x7b\xd9\xc7\x16\xcb\x57\xdc\x09\x00\x1f\x01\xe0\x23\x00\x7c\x98\xa4\x02\xc7\xa1\xe4\x71\x28\x79\x1c\x8a\x1d\x8f\xe5\x2b\xee\x98\xe4\x43\x23\x1f\x1a\xf9\xd0\xc8\x47\xe8\xf7\x30\x49\x25\x13\xc7\x1a\x2f\xfa\x28\xa5\x12\x90\x63\x8d\x97\x03\xc8\xe4\x73\x04\xf6\xa1\x8e\x0f\x75\x54\xf5\x68\xac\xeb\xcb\x01\xa4\xf1\x21\x8d\x0f\x63\x7c\x18\xe3\xc3\x18\x1f\xba\xf8\xd0\xc5\x87\x2e\x3e\x74\xf1\xa1\x8b\x0f\x5d\x7c\xe8\xe2\x43\x14\x1f\x96\xf8\x50\xc4\x87\x22\x3e\x14\xf1\xa1\x88\x0f\x45\x7c\x28\xe2\x43\x0e\x1f\x72\xf8\x30\xc3\x87\x19\x3e\xcc\xf0\x45\xfd\xdc\xd6\xd6\x94\x7b\xac\x77\x28\xfa\x58\xe2\xc3\x12\x1f\x96\xf8\xf0\xc3\x17\x22\x8e\x1c\x3e\x52\xbe\x87\x19\x3e\xf2\xbd\x87\x1c\x3e\xf2\xbd\x47\xbe\xa7\x2a\xd4\x58\xe3\x45\x16\x45\x7c\xe4\x7b\x8a\x06\x7d\xeb\x56\x8e\xe5\x2b\xb2\x44\x7c\x2f\x57\xfd\x7c\xe7\x08\xe4\x43\x20\x1f\x02\xf9\x10\xc8\x47\xe8\xf7\x1c\x90\x7d\x0e\xc8\x3e\x4c\xf2\x61\x92\x8f\xa0\xef\x21\x93\x0f\x99\x7c\xc8\xe4\xc3\x24\x1f\x26\xf9\xd0\xc8\x87\x46\x3e\x34\xf2\x91\xf2\x3d\x4c\xf2\x91\xf2\xbd\x94\x09\x29\x13\x50\xca\x87\x52\x3e\x64\xf2\xa5\xef\x08\x4c\xf2\x61\x92\x0f\x93\x7c\x98\xe4\xc3\x24\x1f\x26\xf9\x70\xc8\x87\x43\x3e\x04\xf2\x61\x8c\x2f\x45\x1c\x69\x7c\x48\xe3\x43\x1a\x1f\xba\xf8\x70\xc5\x87\x25\x3e\x2c\xf1\xa1\x88\x0f\x33\x7c\x98\xa1\x46\xeb\xa1\x49\x40\x28\x20\x3c\xd6\xab\x9b\xad\x38\xe1\xc3\x09\x95\x73\x0a\xa5\x78\x42\x05\xdc\xb1\x73\x35\x3c\x50\x55\xae\xb1\x7e\x2e\x5e\xa8\xe0\xc3\x03\x1f\x1e\xf8\xf0\xc0\x47\x7c\xf7\x10\xbf\x87\xf8\x3d\xac\xef\x61\x7d\x0f\xeb\x7b\x58\xdf\x23\xbe\x7b\x88\xdf\x43\xfc\x1e\xe2\xf7\x10\xbf\x87\xf8\x3d\xc4\xef\x11\xdf\x3d\xc4\xef\x21\x7e\x0f\xf1\x53\xa0\x67\x2c\x2f\x11\x21\xbb\x7b\xb8\xdf\xc3\xfd\x1e\xee\xf7\x70\xbf\x87\xfb\x3d\xb2\xbb\x87\xec\x3d\x64\xef\x21\x7b\x0f\xd9\x7b\xc8\xde\x43\xf6\x1e\xb2\xf7\x90\x3d\xcd\xea\x43\xdb\xd8\xd0\x0a\x65\x2c\x5f\x51\xbb\xbe\xa9\xf1\xbd\x87\xef\x3d\x7c\xef\xe1\x7b\x0f\xdf\x7b\xf8\xde\xc3\xf7\x1e\xa6\xf7\x30\xbd\x87\xe6\x3d\x34\xef\xa1\x79\x0f\xc7\x7b\x08\xde\x43\xf0\x1e\x82\xf7\x10\xbc\x87\xe0\x3d\xd4\xee\x39\xf0\xfa\x90\x3a\x75\x1d\x43\xb1\xa9\xb1\x73\x35\x74\x4e\x2d\xb5\xb1\xc9\x5e\xf6\xb1\xf3\x5a\x88\xdc\x43\xe4\x1e\x22\xf7\x10\xb9\x87\xc8\x3d\x44\xee\xa1\x70\x0f\x73\x7b\x98\xdb\xc3\xdc\x1e\xe6\xf6\x30\xb7\xf7\xf6\x4f\x11\x8a\x3a\x5b\x63\xbd\x96\x28\xe3\x6f\x0f\x7f\x7b\xc8\x9b\xf2\x6e\x63\xbd\x37\x51\x46\xde\x1e\xf2\xf6\x90\xb7\x87\xbc\x3d\xe4\x4d\xbd\xdb\x78\x98\xdb\x23\xa6\x7b\x98\xdb\xc3\xdc\x1e\xe6\xf6\x30\x37\x95\x68\xc7\xba\xb2\x38\x62\x6e\xef\xdd\x9f\x7c\xe6\x11\xd9\x3d\x22\x3b\xc5\x9f\xc6\x7a\x5d\x51\x46\xe7\x14\xa3\x8b\x87\xd1\x3d\x8c\x4e\xf3\xf0\xd0\xe8\x3b\xb4\x07\xff\x56\x44\xfb\x16\x3f\x0b\x4d\xbf\x43\x6b\xf1\xb1\x7c\xcd\x68\x8c\xee\x61\x74\x0f\xa3\x7b\xb8\x9c\x96\xe3\xa1\xb5\x78\x68\x21\x3e\xd6\x6f\x45\x1f\x7f\x53\x8d\xed\x5b\x6a\xed\x5b\x69\x2d\x34\x24\x0f\xa5\xe6\xc6\xde\xbf\x6f\x79\xac\xb1\xc5\x1a\x23\x07\xd0\x36\x6d\xcf\xc7\x1a\x2f\xfa\x18\xda\xc3\xd0\x1e\x86\xf6\x30\xb4\x87\xa1\x3d\x0c\xed\x61\x68\xda\xa2\x8e\xe5\x25\x2b\x30\x34\xad\x53\xc7\xf2\x95\x03\x18\x9a\x86\xab\x63\x8d\x37\xc7\x31\x34\x4d\x56\x43\x2b\xd7\xd0\xbe\x75\xac\xf1\x72\x00\x2b\xd3\xa6\x35\xb4\x66\x1d\xcb\xd7\x4c\x27\xf7\xd3\xdc\x35\x34\x80\x0d\x75\xab\xc7\xf2\x95\x1b\xe8\xd9\x43\xcf\x1e\x7a\xf6\xd0\xb3\x87\x9e\x69\xfa\x1a\x0f\x3d\x7b\xe8\x99\xf6\xb0\xa1\xd1\xeb\x58\xbe\x72\x00\x3d\x7b\xe8\xd9\xc3\xcd\xb4\x8d\x1d\xcb\x4b\xdc\x11\xb3\x87\x98\xa9\x88\x1c\xda\x00\x86\xa6\x82\xa1\x61\x60\x68\x4e\x1b\x1a\x09\x86\xa6\x85\xa1\x6d\x60\x68\x54\x18\x9a\x10\xc6\x43\xc9\x1e\x4a\xf6\x08\xfa\x1e\x56\xa6\x91\x60\x68\x4e\x18\x9a\x10\x86\xf6\x83\xa1\x11\x62\x68\x66\x18\x9a\x16\x86\x16\x88\xa1\xfd\x60\x68\x5d\x18\xda\x24\x86\xa6\x88\xa1\x1d\x62\x68\x6c\x38\x96\x97\xd5\x00\x31\x7b\x8e\xb4\xaa\x8b\x39\xd6\x78\x99\x40\xe2\xf7\x70\xb3\x87\x9b\x3d\xdc\xec\x61\x65\x5a\x91\x85\x96\x63\x63\xbd\xae\x28\x23\x63\x6a\xcd\x8d\x35\x46\x64\x5b\x4c\x71\x30\x2d\xcd\x42\x03\xb3\x78\x38\xd8\x43\xc0\x94\xda\xfb\x35\x5b\xf1\x31\x2d\x91\x42\x1b\xa4\xd0\x24\x29\x34\x46\x0a\x2d\x94\x42\x0b\xa5\xd0\x5a\x69\xac\xf1\xa2\x89\x95\x69\xb6\x14\x0f\x25\x7b\x8e\xab\x6a\x3f\x33\xd6\x78\xd1\x24\xee\x7b\x88\xd9\x43\xcc\x1e\x62\xa6\x45\x4d\x68\x4e\x33\x96\x97\x68\xf6\xbf\xb8\x13\xc3\xd3\x1e\x9e\xf6\x08\x00\x1f\x01\xe0\xc3\xd6\x1e\x01\xa0\xa6\x26\xa1\xa9\xc9\x58\x57\x16\x7d\xcc\xed\x7d\x99\x1b\xb9\x9f\x76\x1a\x51\xff\x71\xfe\x42\x4f\x8d\xb1\x9b\xfd\xfe\x24\xd8\x64\x2f\xfb\xd8\x71\x02\xe4\x14\x94\x1d\x6b\xfc\x32\x7e\x19\xbf\x8c\x9c\x44\xf8\x76\x70\xa8\xcf\x36\x7e\x1b\xbf\xbd\xca\xe6\xb5\x79\x6d\x5e\xdb\xab\x6c\xbe\x9b\xef\xe6\x7b\xf8\x1e\xbe\x87\xef\xe1\x7b\xf8\x1e\xbe\x87\xd7\xe1\x75\x78\x85\xf1\x61\x7c\x18\x1f\x46\x86\x57\x09\xe3\xc3\xf8\x30\x3e\xbd\x4a\xf2\x4a\xe3\xd3\xf5\xd3\xf8\x34\x3e\x8d\x4f\xe3\xaf\xf1\xd7\xf8\xeb\x55\x2e\xaf\xeb\x55\x2e\xaf\xcb\xeb\x1a\xff\x8c\x7f\xc6\x3f\x23\x9f\xeb\x3f\xe3\x9f\xf1\xcf\xf8\xe7\x55\x1e\xaf\x32\xbe\x5c\xbf\x8c\x2f\xe3\xcb\xf8\x32\xbe\x8c\x2f\xe3\xdb\xab\x34\xaf\xe6\xd5\x5e\xab\xf9\x36\xdf\xe6\xdb\x7c\x9b\xaf\x44\x20\x06\x2c\x62\xc0\x02\xdb\x8a\x18\xb0\x9c\x6e\x2d\x92\xc0\x82\xdf\x0a\x7e\x2b\xf8\xad\xe0\xb7\x82\xdf\x8a\x30\xb0\x9c\x6e\x2d\xf2\xc0\x02\xe4\x0a\x90\x2b\xf2\xc0\x82\xe5\x0a\x96\x2b\x58\xae\x00\xb9\x02\xe4\x0a\x8a\x2b\x28\xae\x48\x02\x8b\x18\xb0\xa0\xb8\x22\x09\x2c\x40\xae\x00\xb9\x02\xe1\x0a\x7e\x2b\x72\xbf\x02\xde\x0a\x78\x2b\x80\xad\x00\xb6\x72\x36\x55\x0d\xcf\xb1\xc6\x8b\x17\xa8\x56\x4e\xa2\x16\x9c\x56\x70\x5a\x11\xeb\x15\x9c\x56\x70\x5a\x41\x68\x05\xa1\xd5\xaa\x9f\x18\xb8\xa0\xb5\x82\xd6\x8a\x4c\xaf\xa0\xb5\x22\xd3\x2b\x80\x4d\x75\xd7\x28\x80\xad\x00\xb6\x02\xd5\x0a\x4e\x2b\x38\xad\xc8\xf1\x94\x21\x1c\x7b\xd8\xcb\x3e\xd6\x18\x9f\x3f\x84\x56\xe4\x75\x45\x5e\x57\x70\x5a\x91\xd7\x15\xa8\x56\xfb\x77\x35\xbd\x02\xde\x0a\x78\x2b\xe0\xad\x20\xb7\x82\xdc\x8a\xf8\xae\x80\xb7\x02\xde\x0a\x78\x2b\xe2\xbb\x82\xdf\x0a\x7e\x2b\xf8\xad\xe0\xb7\x82\xdf\x0a\x7e\x2b\xf8\xad\xe0\xb7\x82\xdf\x0a\x7e\x53\xb8\x36\xd4\x4f\x1e\xcb\x57\x64\xe1\xb7\x82\xdf\x8a\x10\xaf\x40\xb8\x02\xe1\x0a\x84\x53\x98\x3f\x0a\x84\x2b\x10\xae\x40\xb8\x02\xe1\xd4\x32\x1d\xcb\xd7\x8c\x06\xe1\x0a\x84\x2b\x10\xae\x80\xb7\x72\x4a\xb6\x40\xb5\x02\xd5\xf4\x6e\x8f\x82\xd0\x6a\xcb\x0a\x20\xad\x80\xb4\x02\xd2\x0a\x3c\x2b\x35\xe0\x0a\x30\x53\xf1\x77\xac\xdf\x8a\x3b\x6c\x56\x80\x59\x01\x66\xe5\x8c\x6b\x81\x61\x45\x64\x57\x60\x58\x11\xd9\x15\x24\x56\x4e\xae\x16\x30\x56\xc0\x58\x81\x61\x05\x80\x15\x00\x56\xa4\x76\x05\x83\x15\x0c\x56\x30\x58\x01\x60\x05\x80\x15\xf4\x55\xd0\x97\xd6\x09\xdf\x12\xb7\x63\x5d\x4d\x04\x01\xb0\x22\xb8\x2b\x18\xac\x60\xb0\x82\xc1\x0a\x00\x2b\xe8\xab\xa0\xaf\x22\xac\xd3\xb9\x62\xac\x6b\x8a\x0e\xf4\x55\xd0\x57\x81\x5e\x05\x7a\x15\xe8\x55\x64\x74\x45\x46\x57\x00\x58\x91\xd1\x15\x0c\x56\xce\xaf\x16\x18\x56\x60\x58\x81\x61\x05\x86\xe9\xa0\x1f\x3a\xe8\x8f\xe5\x2b\x52\x90\x98\x1e\xc9\xa1\x5f\xf2\x58\xbe\x66\x34\x24\x56\x00\x98\xa6\x26\x63\x8d\x31\x97\x41\xaf\x02\xbd\x0a\xf4\x2a\xb5\xdb\x0a\xfa\x2a\xe8\xab\xa0\xaf\x82\xbb\x4a\xd5\xb6\x02\xba\x0a\xe8\x2a\xa0\xab\x80\xae\x02\xba\x0a\xe8\x2a\x88\xab\x20\xae\x82\xb8\x34\x34\x18\x7b\xd9\xc7\x16\x6b\xbc\x98\x82\x5b\x05\x6e\x55\xfc\xde\xd6\x2e\xe8\xab\xa0\xaf\x82\xbe\x0a\xfa\x2a\xe8\xab\xa0\xaf\x22\xca\x2b\x00\xac\x00\xb0\x22\xca\x2b\x18\xac\x60\xb0\x82\xc1\x0a\x06\x2b\x18\xac\x60\xb0\x82\xc1\x0a\x06\x2b\x18\xac\x60\xb0\x22\xd6\x2b\x30\x4c\xf1\xf8\xb1\x7c\x65\x45\xfc\xde\x28\x2b\xd8\xac\x60\xb3\x82\xcd\x0a\x36\x2b\xd8\xac\x60\xb3\x22\xd3\x2b\xf0\xac\xc0\xb3\x22\xd3\x2b\x08\xad\x20\xb4\x82\xd0\x0a\x3c\x2b\xf0\xac\x60\xb3\x82\xcd\x0a\x36\x2b\x72\xbc\x02\xcf\x8a\x1c\xaf\x20\xb4\x22\xc7\x2b\x20\xad\x80\xb4\x02\xcf\x0a\x3c\x2b\x12\x3c\xc5\x95\xc7\x1a\x2f\x67\x48\xf0\x0a\x4e\x2b\x38\x4d\x17\x9d\xb1\xbc\xe4\x0c\x60\x56\x50\x59\x41\x65\x05\x95\x15\xd9\x5d\x91\xdd\x15\x6c\x56\x64\x77\x05\x9e\x95\x33\xb1\x45\x82\x57\x40\x5a\x01\x69\x45\x88\x57\x84\x78\x05\xaa\xe9\x8a\x31\x36\xd9\xcb\x3e\xb6\x58\xbe\x32\x0a\x54\x2b\x20\xad\x80\xb4\x82\xd0\x8a\x4c\xaf\xc0\xb0\x02\xc3\x34\xf4\x18\xeb\x6a\xf2\x01\x00\x53\xf4\x7b\xac\x31\xa2\x4f\x94\x57\xd0\x57\x41\x5f\x05\x7d\x15\xf4\x55\xd0\x97\x8a\xec\x63\x8d\x14\x4d\xd2\xbc\x02\xc0\x8a\x34\xaf\x60\xb0\x22\xd0\xd3\xcd\x60\x2c\x2f\xab\x01\x18\x56\x60\x58\x81\x61\x45\x9a\x57\x90\x58\x41\x62\x45\x9a\xa7\x56\xf0\x58\x5e\xe2\x4b\x94\xa7\x50\xf7\x58\x5e\x56\x6f\xc0\xac\x00\x33\x95\xcb\xc7\xf2\x12\x65\xf0\xac\x48\xf3\x0a\x42\x2b\xd2\xbc\x22\xcd\x2b\x38\xad\xe0\xb4\x22\xcd\x2b\x50\xad\x48\xf3\x8a\x34\xaf\x48\xf3\x0a\x66\x2b\x98\xad\x48\xf3\x0a\x6c\x2b\xb0\xad\xc0\xb6\x82\xd9\x0a\x66\x2b\x80\xad\x00\xb6\x02\xd8\x8a\x04\x4f\x57\x8f\xb1\x8f\x2d\xd6\x78\x91\x85\xdf\x0a\x7e\x2b\xf8\xad\xe0\xb7\x82\xdf\xca\x09\xd8\x02\xe1\x0a\x84\x2b\x10\xae\x40\xb8\x02\xe1\x0a\x84\xab\xfb\xfb\xcc\x73\x41\x74\xca\xbb\x87\x6e\x89\x51\xe0\x5c\x81\x73\x05\xcb\x15\x2c\x57\xb0\x5c\xc1\x72\x45\x8e\x57\xe0\x5c\x81\x73\x05\xcb\x15\x2c\x57\x80\x5c\x41\x71\x05\xc5\x15\x14\x57\x50\x5c\x41\x71\x05\xc5\x15\xfc\x56\xf0\x5b\x01\x6f\x05\xbc\xd5\xfd\x5d\x7d\xa6\x00\xb9\x02\xe4\x0a\x90\x53\x0f\x7f\xac\xab\xc9\x19\x40\xae\x40\xb8\x22\xaf\x2b\xf2\xba\x82\xe2\x0a\x8a\x2b\xf2\xba\x02\xe4\x0a\x90\x2b\x40\xae\xc8\xeb\x0a\x96\x2b\xf2\xba\x02\xe7\x0a\x9c\x2b\x70\xae\xc0\xb9\x02\xe7\x8a\xbc\xae\xc8\xeb\x0a\xa8\x2b\xf2\xba\x82\xeb\x8a\xc8\xae\x88\xec\x0a\xba\x2b\xe8\xae\xa0\xbb\x82\xee\x8a\xd4\xae\x48\xed\x8a\xd4\xae\xc0\xbc\x02\xf3\x8a\xd4\xae\x20\xbd\x82\xf4\x0a\xd2\x2b\x30\xaf\xc0\xbc\x82\xf1\x74\xee\x1e\x6b\xe4\xfa\x8e\x71\x65\x79\x42\x4c\x57\xc0\x9e\x9e\x98\xa1\x3f\xe6\xd8\x79\x0f\x84\x72\x05\xd4\x15\x50\x57\x40\x5d\x41\x74\xba\xc6\x87\xee\xf0\xa1\x3b\xfc\x58\x23\xad\x09\xa4\x70\xf5\xc4\xda\x99\xd8\x82\xe8\x8a\x2c\x4e\xcf\xe8\xd0\x45\x3a\x74\x91\x8e\x02\xe4\x0a\x90\xd3\xc7\x76\xac\x77\x22\x6a\xd0\x9a\x8e\x96\xa1\xd6\x7b\xe8\x8d\x18\xfa\x33\x8e\xf5\x8a\x62\x07\xaa\x7d\xbb\x04\x16\xa8\x56\x40\x5a\x41\x68\x45\xda\x56\xa4\x6d\x05\xa7\x15\x9c\xa6\xc7\xd5\x58\x57\x13\x11\x38\xad\xe0\x34\x8d\x09\xc6\xce\x78\x72\x36\xed\x09\xc6\x6e\xf6\xb0\xc1\x26\x7b\xd9\xc7\xf2\x12\x17\x80\xad\xc8\xd9\x74\x34\x19\xcb\x4b\x74\x08\xd6\x0a\x6c\x2b\xb0\xad\xc0\xb6\x02\xdb\x0a\x6c\x2b\xb0\xad\xc0\xb6\x02\xdb\x0a\x6c\x2b\xb0\xad\xc0\xb6\x02\xdb\x0a\x6c\x2b\xb0\xad\xc0\xb6\x52\x3f\xae\xc8\xd6\x0a\x78\x2b\xe0\xad\x80\xb7\x02\xde\x0a\x78\xd3\x82\x21\x0a\x78\x2b\xe0\xad\x80\xb7\x02\xde\x0a\x78\xd3\x57\x28\xf4\xf0\x0a\x7d\xe1\xa3\xc0\xb6\xaa\xdf\x67\x9e\xf5\xea\x1d\xeb\x3a\xf9\xf5\xf5\xba\x32\x01\x78\xd3\x5d\x61\xac\xd7\x35\xa3\x21\xb7\x82\xdc\x0a\x66\x2b\x98\xad\xc8\xd3\x0a\x6c\x2b\xb0\xad\xc0\xb6\x02\xdb\x0a\x6c\x2b\xb0\xad\xc0\x36\xfd\xeb\xc7\xf2\x32\x8b\xc1\x36\x6d\x26\x7e\xbe\x73\x59\x44\xb6\x56\xb0\x5c\x39\x6d\x5b\xe0\x5c\x81\x73\x05\xce\x15\x38\x57\xe0\x9c\xa6\x15\x63\xf9\xca\x25\x70\xae\xc8\xd9\x0a\xa2\x2b\x88\xae\x20\xba\x02\xe7\x0a\x9c\x2b\x70\xae\xc0\xb9\x02\xe7\x0a\x9c\xd3\xe9\x78\xac\xf1\xb2\x88\xa8\x4d\xfb\xab\xb1\x7c\x65\x11\x50\x57\xe0\x5c\x11\xb2\x15\x38\x57\x84\x6c\x05\xd1\x15\x44\x57\x84\x6c\x9a\x0c\x8d\x75\x65\x79\x02\xdd\x15\x74\x57\xd0\x5d\x41\x77\x05\xdd\x15\x51\x5b\x11\xb5\x15\x8c\x57\x44\x6d\x05\xe6\x15\x69\x5b\x41\x7a\x05\xe9\x15\xa4\x57\x04\x6e\x05\xec\x15\x81\x5b\xa9\x43\x57\x20\x5f\x91\xb9\x15\x8c\x57\x64\x6e\x05\xe6\x15\x98\x57\x60\x5e\xc1\x78\x05\xe3\x15\x80\x57\x00\x5e\x01\x78\x45\xe6\x56\x00\x9e\x7e\x20\xa1\xaf\xc7\x58\xe3\xe5\x09\x8c\x57\xd0\x5d\x41\x77\xe5\x5c\x6e\x41\x77\x05\xdd\x15\x74\x57\xc4\x6e\x05\xce\x15\x38\x57\xe0\x5c\x81\x73\x05\xce\x15\x38\x57\xe0\x5c\x81\x73\x05\xce\x15\x38\x57\xe0\x9c\x9e\x24\x63\xf9\x4e\x0e\xf4\x7f\x9c\xbf\x68\x70\x4e\x93\x92\xb1\xdf\x9f\x04\x9b\xec\x65\x1f\x5b\xec\xb8\x42\x74\x0d\xd1\x35\xcd\x9c\x26\x35\x63\xf9\x2e\xbe\x8b\xef\xe2\xbb\xf8\x2e\xbe\x9b\xef\xe6\xbb\xf9\x6e\xbe\x9b\xef\xe6\xbb\xf9\x6e\xbe\x9b\xef\xe6\x7b\xf8\x1e\xbe\x87\xef\xe1\x7b\xf8\x1e\xbe\x87\xef\xe1\x7b\xf8\x1e\xbe\xc1\x37\xf8\x06\xdf\xe0\x1b\xbc\x82\x57\xf0\x0a\x5e\xc1\x2b\x79\x25\xaf\xe4\x95\x3f\x1f\x9b\x1a\xde\x6b\x4a\xbb\x06\xf9\x1a\xe4\x6b\x90\xaf\x41\xbe\x06\xf9\x1a\xe4\x6b\x90\xaf\x41\xbe\xa6\xb4\x6b\xa8\xaf\xa1\xbe\x86\xfa\x9a\xd2\xae\x01\xbf\x06\xfc\x1a\xf0\x6b\xc0\xaf\x01\xbf\x06\xfc\x1a\xf0\x6b\xc0\x4f\x77\x9a\xb1\xbc\xea\xe7\xa9\x83\x06\x05\x1b\x14\x6c\x1a\xbb\x86\x06\x1b\x1a\x6c\x68\xb0\xa1\xc1\x86\x06\x1b\x1a\x6c\x68\xb0\xa1\xc1\x86\x06\x1b\x14\x6c\x50\xb0\x41\xc1\x06\x05\x1b\x14\x6c\x50\xb0\x81\xc0\x06\x02\x1b\x02\x6c\x08\xb0\x21\xc0\x06\xff\x1a\xfc\x6b\xf0\xaf\xc1\xbf\x06\xff\xf4\xc3\x19\xcb\x4b\x8e\xc1\x7e\xad\x9c\x5d\xc3\x7e\x0d\xfb\x35\x1d\x5e\x83\x7f\x0d\xfe\x35\x1d\x5e\x3b\x1b\xdc\x40\x60\xd3\xe4\x35\x1c\xd8\x70\x60\xc3\x81\x0d\x07\x36\x1c\xa8\xc1\x56\xe8\xc2\x34\x96\xaf\xbc\x72\x42\xb8\x9d\x10\xd6\x64\x71\x2c\xdf\xe0\x2b\xbb\x80\xc3\x06\x0e\xdb\x09\x61\xfd\x49\xa3\xe9\xf6\x9a\x6e\xaf\xe9\xf6\x1a\x56\x6c\x58\xb1\xe9\xf6\xda\x09\xe1\x76\x42\xb8\x69\xf8\xda\x09\xe1\x06\x1d\x1b\x74\x6c\xd0\xb1\x41\xc7\xa6\xea\x6b\xaa\xbe\x06\x20\x9b\xaa\xaf\x61\xc8\xa6\xed\x6b\x30\xb2\xc1\xc8\x06\x23\x9b\xc2\xaf\x21\xc9\x86\x24\x9b\xc2\xaf\x29\xfc\x1a\x9e\x6c\x78\xb2\x29\xfc\x9a\xc2\xaf\x61\xc8\x86\x21\x9b\xc2\xaf\xc1\xc8\x06\x23\x1b\x8c\x6c\x30\xb2\xc1\xc8\x06\x23\x1b\x8c\x6c\x6a\xbf\xa6\xf6\x6b\x60\xb2\xa9\xfd\xda\xc9\xe1\x76\x72\x58\x8b\xa3\xb1\xe3\x0b\x55\x36\xfd\x5f\x03\x96\x0d\x58\xb6\x93\xc3\x1a\x20\x8d\xbd\xec\x63\x8b\xe5\x2b\x8b\x20\xcc\x06\x2f\x1b\xbc\x6c\xf0\xb2\xc1\xcb\x76\x42\xb8\xe1\x49\x8d\xe5\x43\x0b\xa5\xb1\xbc\x64\x14\x48\xd9\x20\xa5\x86\xd2\x63\xf9\xca\x28\x90\xb2\x41\x4a\xbd\x96\xc6\xf2\x95\x51\xf0\x64\xc3\x93\x0d\x4f\x36\x3c\xd9\xf0\x64\xc3\x93\x0d\x4c\x36\x30\xd9\x3b\x7e\xaf\x33\x80\x65\x03\x96\x0d\x58\x36\x54\xd9\x50\x65\x43\x95\x0d\x55\x36\x54\xd9\x50\xa5\x9e\x7a\x63\xbd\xae\x5c\xa2\x11\x6c\x1a\xc1\x86\x2a\xbf\x0d\xcf\x9b\x0a\x50\xe3\xee\xb1\x5e\x45\x2e\x51\x01\x6a\x1b\x15\x4d\x05\xa8\x79\xd4\x58\xbe\xef\x5f\xbc\x73\x99\x06\x70\x36\xa5\x60\x53\x0a\x36\xd8\xd9\x94\x82\x0d\x79\x36\xbd\x60\xd3\x0b\x36\xfc\xd9\xf0\x67\xc3\x9f\x0d\x7f\x36\xfc\xd9\x8a\xfe\x35\xed\x60\x43\xa1\x0d\x85\x36\xed\x60\x03\xa2\x0d\x88\x36\x75\x60\x03\xa2\x0d\x88\xea\x7e\x3a\x76\xb3\x87\x4d\xf6\xb2\x8f\x2d\xd6\x78\x19\x05\x91\xea\x8c\x35\xd6\x48\xf9\x03\x8b\x36\x5d\x60\x83\xa3\x0d\x8e\x36\x38\xda\xb0\x68\x43\xa1\x0d\x85\x36\xe5\x5f\x3b\x63\xac\x3f\xe8\x58\xd7\x91\x15\x20\xa8\x5e\x6e\x63\xfd\xd6\x1a\x02\x7c\x36\xf0\xa9\xcd\xfe\x58\xd7\xb1\x56\xc0\x9c\x0d\x73\x36\xc0\xd9\x00\x67\x03\x9c\x0d\x70\x36\xc0\xd9\x00\x67\x03\x9c\x0d\x6a\x36\x55\x5f\x83\x9a\x4d\xd5\xd7\xd0\x66\x43\x9b\x0d\x6d\x36\xa8\xd9\xa0\x66\xc3\x99\x0d\x67\x36\x9c\xd9\x34\x7c\x0d\x6a\x36\x0d\x5f\x43\x9b\x4d\xc9\xd7\x00\x67\x03\x9c\x0d\x6a\x36\xdd\x5e\xc3\x99\x0d\x67\x36\xc5\x5e\x83\x9a\x0d\x6a\x36\xa8\xd9\x70\x66\xc3\x99\x0d\x67\x36\x95\x5e\x43\x95\x0d\x55\x36\x48\xd9\x20\x65\x83\x94\xad\x40\x5f\x43\x95\x0d\x55\x36\x54\xd9\x20\x65\x83\x94\x0d\x52\xb6\xd2\x7c\x0d\x52\x36\x48\xd9\x20\x65\x83\x94\x0d\x52\x36\x48\xd9\xce\x0c\xeb\xf9\x39\xf6\xfb\x13\xbe\xe6\x20\xac\xd8\xb0\x62\x43\x89\x0d\x22\x36\x88\xd8\x14\x78\x0d\x25\x36\x88\xd8\xf0\x61\xc3\x87\x0d\x1c\x36\x70\xd8\xc0\x61\xd3\xde\x35\x7c\xd8\xf0\x61\xc3\x87\x0d\x1f\x36\x7c\xd8\xf0\xa1\x0e\x6d\xa1\xf5\xda\x58\xbf\x35\x2f\xc0\xc2\x06\x0b\x1b\x2c\x6c\x80\xb0\xa3\x7f\x3e\x7c\x34\x70\xd8\xf1\x8d\x94\xf9\x02\x19\x36\x64\xd8\x90\x61\x43\x86\x0d\x19\x36\x64\xd8\x90\x61\xc3\x84\x0d\x10\x36\x40\xa8\x11\xfa\xd8\xef\x6f\x8b\x75\x4d\xd1\xa1\xa2\x6b\xe0\xb0\x21\xc3\x86\x0c\x1b\x32\xd4\xde\x3f\x1a\x38\xd4\xa8\xff\xd7\x3b\x07\x17\xdb\xb9\xdf\x86\x18\x1b\x62\x6c\x88\xb1\x29\xed\x9a\xd2\x4e\x33\xbb\x68\xa5\xf3\x1a\x6e\x6c\xb8\xb1\xe1\xc6\x86\x1b\x1b\x6e\x6c\xb8\xb1\x21\x46\x6d\xf4\x43\x9b\xfe\xd0\x7f\x3f\x34\xea\x0f\xbd\xfd\x43\x83\xfe\xd0\x79\x3f\xb4\xbd\x0c\x8d\xfa\x43\x1f\xff\xd0\xfa\x3f\x34\xe7\x0f\xcd\xff\x43\xa7\xff\xb1\xae\x26\xca\x90\xa1\x2e\xfe\xa1\x51\x7f\xe8\xd4\x1f\xba\xf4\x8f\x35\x46\xac\x61\xc2\x86\x09\x1b\x26\x6c\x98\xb0\x61\xc2\x86\x09\x1b\x26\x6c\x98\xb0\x61\x42\x6d\xcb\xc7\xf2\x12\x59\x9a\xbc\x86\x0c\x1b\x32\x6c\xc8\xb0\x21\xc3\x86\x0c\xf5\x3f\x1f\x6b\xbc\xf8\x82\x85\x0d\x13\x36\x4c\xd8\x30\x61\xc3\x84\xed\x04\x6f\x83\x85\x0d\x16\x36\x4c\xd8\x30\x61\x53\xe9\x35\x04\xd8\x10\x60\x53\xe9\x35\x10\xd8\x40\x60\x03\x81\x0d\x04\x36\x10\xa8\x81\xf2\x58\xe3\x45\x10\x02\xd4\x54\x70\xac\x2b\x8b\x20\x10\xd8\x94\x79\x5a\x40\x87\xb6\x74\xd1\x10\x60\xd3\xe1\x69\x27\x3f\xd6\x48\x71\xa4\xc3\x6b\x38\xb0\xe1\xc0\xa6\xc3\x6b\xa8\xaf\xa1\xbe\x06\xf9\x1a\xe4\x6b\x90\xaf\xe9\xed\x1a\xea\x6b\x7a\xbb\x06\xfc\x1a\xf0\x6b\xc0\xaf\x01\xbf\x06\xf9\x1a\xde\x6b\x60\xaf\x81\xbd\x06\xf6\x1a\xd8\x6b\x60\x4f\x93\xc3\x68\x30\xaf\xc1\x3c\xbd\xd9\xc7\x1a\xd9\xdf\xdf\xba\x9a\x08\x42\x77\x0d\xdd\x35\x74\xd7\xd0\x5d\xc3\x75\xed\x4c\x6c\xc3\x75\x4d\x75\xd7\x10\x9d\x26\x8a\x63\xbf\xbf\x75\x1d\x6b\x26\x50\xd7\x40\x5d\x03\x75\x4d\x81\xd7\x14\x78\x0d\xda\xb5\x53\xaf\xfa\x6e\x8f\xe5\x2b\x6a\xf4\x76\x0d\xe6\xf5\x3b\xbf\xef\x0a\xa0\xbe\x86\xfa\x9a\x26\xaf\x01\xbf\x06\xfc\x9a\x26\xaf\x61\xbf\x86\xfd\x1a\xf6\x6b\x3a\xbc\x86\xfd\x1a\xf0\x6b\xc0\xaf\x01\x3f\x9d\x20\xc7\xba\xb2\xc8\x2a\x70\xd7\x94\x79\x0d\x04\x36\x10\xa8\x41\xf7\x58\x57\x16\x5f\xaa\xbb\x7e\xbf\xcb\x1a\x6b\x21\x39\xd6\xd5\xe4\x00\x64\xd8\x90\x61\x83\x85\x0d\x16\x36\x4c\xd8\x30\xa1\x06\xab\xd1\x54\x77\x0d\x16\x36\xd5\x5d\x3b\x19\xdb\x4e\xc6\x36\x7c\xd8\xf0\x61\x43\x86\x7a\x57\x8e\x35\xc6\x2c\x86\x0c\x35\x64\x1f\xeb\xca\x32\x01\x26\x6c\x98\x50\x33\xcb\xb1\xc9\x5e\xf6\xb1\x46\xca\x07\x98\x50\xab\xcb\xb1\xbc\xcc\x65\x98\xb0\x01\xc2\x06\x08\x1b\x1a\x6c\x50\xb0\x41\x41\xfd\x9a\xc7\x1a\x29\x2b\x40\xc1\x06\x02\x1b\x08\x6c\x08\xb0\x21\xc0\x86\x00\x1b\xf6\x6b\xd8\xaf\x61\xbf\x86\xfd\x1a\xf6\x6b\xd8\xaf\xa1\xbe\xa6\xae\x6b\xa8\xaf\xe9\xea\x9a\xae\xae\x21\xbd\x86\xf4\x9a\xae\xae\xe9\xea\x1a\xde\x6b\x78\xaf\xe1\x3d\x9d\xbc\xc7\xf2\x15\x65\x78\xaf\xe9\xea\x1a\xe4\x6b\x90\xaf\xe9\xea\xda\xa9\xd4\xa6\xae\x6b\xd8\xaf\x61\xbf\x86\xfd\x1a\xf6\x6b\xd8\xaf\x61\x3f\x2d\x55\xc7\xf2\x15\x5f\xf0\xaf\xc1\xbf\x06\xff\x1a\xfc\x6b\xf0\xaf\x21\x3d\x1d\x7b\xc7\x1a\x29\xbe\x00\x5e\x03\x78\x0d\xe0\x69\x17\x3a\xd6\x48\xf1\x05\xed\x5a\x59\xbc\x06\xed\x1a\xb4\x6b\xd0\xae\x41\xbb\x86\xeb\x1a\xa2\x6b\x58\xae\x61\xb9\x86\xe5\x9a\x72\xae\xc1\xb9\xa6\x9c\x6b\x2d\x21\xda\xb9\xd3\x86\xeb\x1a\xae\x6b\x88\xae\x21\xba\x86\xe5\x1a\x96\x6b\x58\xae\x61\xb9\x86\xe5\x1a\x84\xd3\xa8\x75\xac\x31\x62\x07\xbf\x35\xf0\xd6\xc0\x5b\x03\x6f\x0d\xbc\x35\xf0\xd6\xc0\x5b\x03\x6f\x0d\xb6\x35\xd8\xd6\x60\x5b\x83\x6d\x4d\x33\xd7\x90\x9b\xae\xa9\x63\x5d\x59\xa4\x80\xb7\xee\xf7\x9b\x72\xc0\x72\x0d\xcb\x35\x2c\xd7\xb0\x5c\xc3\x72\x4d\x5d\xd7\xd4\x75\x0d\xd1\x35\x44\xd7\x10\x5d\xd3\xd8\xe9\xd3\xfa\x6d\xa7\x3e\x96\xaf\xd9\x0a\xd4\x35\x50\xd7\x40\x5d\x43\x74\x0d\xd1\xe9\x68\x3f\x96\x97\xf8\x42\x74\x0d\xd1\xf5\xbf\x28\xa6\xd7\xfd\x8d\x7e\xf7\x5f\xfe\x47\xfc\xe5\xe7\xf3\x59\xec\x66\x0f\xfb\xfd\x79\xb2\x97\x7d\x6c\xb1\x3d\x76\x7d\xfe\xbe\x2d\x74\xc7\xf2\x5d\x7c\x17\xdf\xc5\x77\xf1\x5d\x7c\x17\xdf\xc5\x77\xf3\xdd\x7c\x37\xdf\xcd\x77\x1b\xbf\x8d\xdf\x46\x1e\x23\x8f\x91\xc7\x98\xe3\xca\xc7\xc8\x63\xe4\x71\xe5\x63\x7c\xb8\x5a\x18\x19\xc6\x84\x31\x61\x4c\x18\x93\xae\x99\xae\x99\x46\xa6\xf7\x9c\xae\x9c\xc6\xa7\xf1\x69\xfc\x35\xf2\xba\xf2\x35\xfe\x1a\x7f\x8d\xbf\x5e\xe5\xf2\xba\xbc\x2e\xaf\xe7\x55\x1e\xdf\xc7\xf7\xf1\x7d\x7c\x1f\xdf\xc7\xf7\xf1\x7d\x7c\x1f\xdf\xe2\x5b\x7c\x8b\x6f\xf1\x2d\xbe\xc5\xb7\xf8\x16\xdf\xe2\x5b\x7c\x9b\x6f\xf3\x6d\xbe\xcd\xb7\xf9\x36\xdf\xe6\xdb\x7c\x9b\xef\x64\xc3\x67\x7d\x3e\xec\x62\x37\x7b\xd8\x60\x93\xbd\xec\x63\x8b\xe5\x2b\x1f\x96\x7c\x58\x32\x61\xc9\x84\x25\x13\x96\x4c\x58\x32\x61\xc9\x84\x25\x13\x96\x4c\x58\x32\x61\xc9\x84\x25\x13\xd6\xe6\xbb\xf9\xca\x8a\x25\x2b\xd6\xe6\x2b\x37\x96\xdc\x58\x72\x63\x1d\xbe\x32\x64\x1d\xbe\xf2\x64\xc9\x8d\x25\x37\x56\x18\x29\x43\x56\xf8\xad\xdc\x58\x72\x63\xc9\x8d\x25\x37\x96\xdc\x58\xb2\x62\xc9\x8a\x95\xde\x83\xac\x58\xb2\x62\x5d\x23\xe5\xc6\x92\x1b\x4b\x6e\x2c\xf9\xb0\xe4\xc3\x92\x09\x4b\x26\x2c\x99\xb0\x64\xc2\x92\x09\xeb\xfd\xd2\x02\xcf\x18\xaf\x2e\x4f\x96\x3c\x59\xf2\x64\xc9\x93\x25\x4f\x96\x3c\x59\xf2\x64\xc9\x93\x25\x43\x96\x0c\x59\x32\x64\xc9\x90\x25\x43\x96\x0c\x59\x32\x64\xc9\x8d\x25\x37\x96\xdc\x58\x72\x63\xc9\x8d\x25\x37\x96\xdc\xd8\x72\x63\xcb\x8d\xfd\xf9\x75\xe6\x60\xc6\x1c\x36\xd8\x64\x2f\xfb\xd8\x62\x5d\x59\xe6\x6c\x99\xb3\x65\xce\x96\x39\x5b\xe6\x6c\x99\xb3\x65\xce\x96\x39\x5b\xe6\x6c\x39\xb3\xe5\xcc\x96\x33\x5b\xb6\x6c\xd9\xb2\x65\xcb\x96\x27\x5b\x9e\x6c\x79\xb2\xe5\xc9\x96\x27\x5b\x9e\x6c\x79\xb2\xe5\xc9\x96\x27\x3b\x8c\x97\x2d\x5b\xb6\x6c\xeb\xc9\x0e\xe3\x65\xce\xb6\xb6\x6c\xf9\xb3\x65\xce\x96\x39\x5b\xe6\xec\xe4\x65\x6d\xd9\xb2\x68\xcb\xa2\x2d\x8b\xb6\x15\x66\xcb\xa5\x2d\x97\xb6\x5c\xda\x72\x69\xcb\xa5\x2d\x97\xb6\x75\x66\x5b\x67\xb6\xbc\xda\xf2\x6a\x5b\x67\xb6\xec\xda\xb2\x6b\xcb\xae\x2d\xbb\xb6\xec\xda\xd6\x99\x2d\x7f\xb6\x9c\xd9\x72\x66\xcb\x96\x2d\x5b\xb6\x6c\xd9\xb2\x65\xcb\x96\x2d\x5b\xb6\x6c\xd9\xb2\x65\xcb\x96\x2d\x5b\xb6\x3c\xd9\xf2\x64\xcb\x93\x2d\x43\xb6\x0c\x39\x32\xe4\xc8\x90\x63\xf5\x38\x72\xe0\x88\xfe\x11\xfd\x23\xfa\x47\xf4\x8f\xe8\x1f\xd1\x3f\xa2\x7f\x7c\x8f\x1c\x39\x70\xe4\xc0\x91\x03\x47\x0e\x1c\x39\x70\xe4\xc0\x91\x03\xc7\xea\x71\x64\xc2\x91\x09\x47\x26\x1c\x99\x70\x64\xc2\x91\x09\xc7\xba\x71\xe4\xc3\x91\x0f\x47\x3e\x1c\x99\x70\x64\xc2\x91\x09\xc7\x37\xcb\xf1\xcd\x72\x64\xc5\x91\x15\x47\x56\x1c\x59\x71\x64\xc5\x91\x15\x47\x56\x1c\x59\x71\x64\xc5\x91\x15\xc7\xaa\x72\xe4\xc6\x91\x1b\x47\x6e\x1c\xb9\x71\xe4\xc6\x91\x1b\x47\x6e\x1c\xb9\x71\xe4\xc6\x91\x1b\x47\x6e\x1c\x59\x71\x64\xc5\x91\x15\x47\x3e\x1c\xf9\x70\xe4\xc3\x91\x0f\x47\x3e\x1c\xf9\x70\xe4\xc3\x91\x0f\xe7\x27\x4b\x9d\x31\xde\x89\x6c\x39\x56\x9b\x63\xb5\x39\x32\xe7\xc8\x9c\x63\xb5\x39\xf2\xe7\xc8\x9f\x23\x7f\x8e\x6f\xa5\x23\x8b\x8e\x2c\x3a\xb2\xe8\xc8\xa2\x23\x8b\x8e\x2c\x3a\xb2\xe8\xf8\x56\x3a\x56\x9e\x23\xa3\x8e\x8c\x3a\x32\xea\x58\x79\x8e\xbc\x3a\xfd\x4b\x3c\x93\x9f\x90\x75\x21\xeb\x42\xd6\x85\xac\x0b\x2b\x4f\xc8\xbd\x90\x7b\x21\xf7\x42\xee\x85\xac\x0b\x59\x17\xb2\x2e\x64\x5d\xc8\xba\x90\x75\xb1\xbe\x23\xe7\xfd\x87\x1c\x0b\x39\x16\x72\x2c\xe4\x58\xc8\xae\x90\x5d\x21\xbb\x42\x76\x85\x8c\x0a\x19\x15\x32\x2a\x64\x54\xc8\xa8\x90\x51\x21\xa3\x42\x46\x85\x8c\x0a\x19\x15\x72\x29\xe4\x52\xc8\xa5\x90\x45\x21\x8b\x42\x16\x85\xfc\x09\xf9\x13\xf2\x27\xe4\x4f\xc8\x9f\x90\x3f\x21\x7f\x42\xfe\x84\xfc\x09\xf9\x13\x56\x95\x90\x45\x21\x8b\x42\x16\x85\x2c\x0a\x59\x14\xb2\x28\x64\x51\xc8\x8d\x90\x1b\x21\x2b\x42\x56\x84\xac\x08\xf9\x10\xf2\x21\xe4\x43\xc8\x87\x90\x0f\x21\x1f\x42\x3e\x84\x1c\x08\xd1\x0f\x71\x0f\x71\x0f\x71\x8f\xfe\x8e\x71\x65\xeb\x49\x8a\x66\x8a\x66\x8a\x5d\x8a\x57\x8a\x57\x8a\x57\x8a\x57\x8a\x54\x8a\x4e\x8a\x4e\xba\x7f\x48\xd1\x49\x11\x49\xf3\x3d\xcd\xf7\x14\x9d\x14\x9d\x3c\xdf\x31\xae\x20\x2e\x29\x2e\x29\x2e\x29\x2e\x29\x2e\x29\x22\x29\x0a\x29\x0a\x69\x2e\xa7\x58\xa4\x58\xa4\x58\xa4\xcf\x3f\x7d\xfe\xe9\xf3\x4f\x9f\x7f\xfa\xfc\xd3\x27\x9f\x3e\xf9\xf4\x99\xa7\xcf\x3c\x7d\xe6\xe9\x33\x4f\x9f\x79\x9a\x89\xe9\xd3\x4e\x9f\x76\x9a\x83\xe9\xd3\x4e\x9f\x70\xfa\x84\xd3\x27\x9c\xe6\x5a\xfa\x9c\xd3\x5c\x4b\xb3\x2c\x7d\xda\xe9\xd3\x4e\x9f\x76\xfa\xb4\xd3\xa7\x9d\x3e\xed\x6b\x1e\x5d\x9f\xf9\xf5\x99\x5f\x33\xe8\x9a\x41\xd7\x0c\xba\xa2\x70\xcd\xa0\x6b\xf5\xbe\xe6\xd1\x15\x97\xbb\x7e\xdf\xcf\x5c\x33\xeb\x8a\xd7\x15\xa9\x2b\x52\xd7\x6c\xba\x56\xec\x2b\x6a\x57\x74\xee\xf9\xfe\xdb\x6b\x89\xc5\x15\x8b\x6b\x8e\x5c\x11\xb9\xe6\xc8\x35\x47\xae\xe8\x5c\xd1\xb9\xa2\x73\x45\xe7\x8a\xce\x15\x9d\x2b\x3a\xd7\x77\xee\x15\x97\xfb\xb3\x9a\xc5\x8c\x71\x05\xb1\xbb\x62\x77\xcd\x9a\x2b\x5e\xd7\x77\xee\x15\xb5\x6b\xa6\x5c\x33\xe5\x8a\xd7\x35\x47\xae\xa8\x5d\x73\xe4\x8a\xd1\x15\xa3\x6b\x46\x5c\x11\xb9\x22\x72\x45\xe4\x59\xd3\x9e\x88\x3c\x11\x79\x62\xf1\xc4\xe2\x89\xc5\x13\x8b\x27\x16\x4f\x2c\x9e\x58\x3c\xf3\xe2\xf9\xc6\x7c\x3e\xed\x67\x1d\x7b\xbe\x31\x9f\xd5\xec\x99\x2f\x4f\x14\x9e\x4f\xfe\xf9\xe4\x9f\x75\xec\x99\x35\xcf\xac\x79\x62\xf1\xc4\xe2\x99\x29\x4f\x2c\x9e\xef\xbe\x27\x0a\x2f\xbe\x3f\xe7\x2b\x0a\x4f\x14\x9e\x4f\xfe\xf9\xe4\x9f\xd5\xe9\xf9\xfc\x9f\xd9\xf1\xcc\x8e\x27\x0a\xcf\xec\x78\x3e\xe7\xe7\x73\x7e\x3e\xe7\xe7\x73\x7e\x66\xc7\xf3\x09\x3f\x9f\xf0\x33\x3b\xde\xfb\xfe\xd6\x35\xcd\x91\xe7\x73\x7e\x3e\xe7\x67\x8e\x3c\x73\xe4\x99\x23\xcf\xb7\xd2\x33\x53\x9e\x28\x3c\x51\x78\xa2\xf0\xcc\x97\x67\xbe\x3c\xf3\xe5\x89\xcb\x13\x97\x32\x47\x4a\x44\x4a\x44\xca\x1c\x29\x71\x29\x71\x29\x71\x29\xb1\x28\xb1\x28\x2b\x55\x89\x48\xc9\xff\x5a\xdf\x31\xae\x29\x2e\x25\x2e\x25\x2e\x25\x2e\x25\x2e\x25\x2e\xe5\xfb\xa5\x44\xa4\x44\xa4\xdc\xc7\x96\xd5\xac\xac\x66\x25\x46\x75\xbe\x23\x5d\xd3\x0a\x56\x22\x55\x66\x4d\x99\x35\x25\x5e\x65\xd6\x94\xa8\x95\xa8\x95\xa8\x95\xa8\x95\xa8\x95\xef\x94\x12\xaf\x12\xaf\x32\x6b\x4a\xd4\x4a\xd4\x4a\xd4\x4a\xa4\x4a\xa4\xca\x6a\x56\xe2\x55\x66\x47\x89\x57\x89\x57\x89\x57\x89\x57\x89\x57\x89\x57\xf9\xd6\x28\x91\x2a\x91\x2a\x91\x2a\x91\x2a\x91\x2a\x91\xaa\xfe\xbd\xce\x94\xd8\x95\xd8\xd5\x37\x76\xe6\x54\x9b\x53\x2d\x82\x2d\x82\x2d\x82\x2d\x82\x2d\x82\x2d\x82\x2d\x82\x2d\x82\x2d\x76\x2d\x76\xed\x5e\xb4\xd7\x77\x4c\xb1\xae\x2c\x6a\x2d\x6a\x6d\x35\x6b\xb1\x6b\x73\xaa\xcd\xa9\x3e\xbf\xb8\xd2\x8c\xf1\x8a\xe2\xdb\xe2\xdb\xe2\xdb\xe2\xdb\xe2\xdb\xe2\xdb\xbe\xa7\x5a\x7c\x5b\x7c\xdb\x7c\x6c\x51\x6e\x51\x6e\x51\x6e\x91\x6d\x91\x6d\xeb\x61\x8b\x6f\x9b\x95\x9d\xdf\x31\xae\x2c\xca\x2d\xca\x2d\xca\x2d\xca\x2d\xca\x2d\xca\xed\x3b\xab\xc5\xb7\xc5\xb7\xdd\x67\xb6\x35\xb0\xcd\xd0\x16\xf1\x7e\xdf\x91\xae\x69\x0d\x6c\xb1\x6e\x73\xb3\xcd\xcd\x16\xf1\x16\xf1\x16\xf1\x16\xf1\x16\xf1\x16\xf1\x36\x1f\xdb\x37\x57\x4f\x34\xd7\x7f\x9c\xbf\x5c\xc0\xd5\x02\xae\x16\x70\xb5\xc0\xaa\x05\x56\x2d\x98\x6a\xc1\x54\x0b\xa6\x5a\x00\xd5\x02\xa8\x16\x40\xb5\x00\xaa\x05\x50\x2d\x68\x6a\xc1\x51\xeb\xb3\x8d\x39\xc6\x9f\xef\xbf\x8d\x3f\x46\x4e\x10\x16\xe0\xb4\x3e\xe1\xca\xc1\x2b\x8c\x0f\xe3\xc3\xf8\x70\xfd\xe0\x15\xc6\xa7\xf7\x93\xc6\xa7\xf1\x69\x7c\x1a\x9f\xc6\xa7\xf1\xe9\x55\x92\xd7\x35\xfe\x1a\x7f\x8d\xbc\x46\x5e\x23\x9f\xf7\xf0\x8c\x79\xc6\x3c\xd7\x7c\xae\x50\x7e\x52\x7e\x52\x7c\x8b\x57\x7b\x27\xcd\xb7\x8d\xe9\xef\xcf\xe7\x15\xa1\xa0\x05\x05\x2d\x28\x68\x41\x41\x0b\xfe\x59\x30\xcf\x5a\xcb\xcf\x7d\xaa\x60\xcf\x02\x7b\x16\xc0\xb3\x00\x9e\x05\xed\x2c\x68\x67\x41\x3b\x0b\xd4\x59\xa0\xce\x02\x75\x16\xa8\xb3\x40\x9d\x05\xea\x2c\x50\x67\x01\x39\x0b\xc2\x59\x10\xce\x5a\xe1\xb7\x3e\x73\x20\x67\x2d\x9f\xf9\xf2\x39\xc3\x39\x0b\xc8\x59\x10\xce\x5a\x3e\x61\x20\x67\x01\x39\x0b\xc8\x59\xcb\x27\x0c\xe7\x2c\x38\x67\x01\x39\x0b\xc8\x59\x40\xce\x5a\xf7\xe7\x32\xb3\xc0\x9e\x05\xf6\xac\x75\x5d\xed\xba\xda\xf3\x3e\xc5\x05\xec\x59\x4b\x44\xe0\x9c\x05\xe4\x2c\x20\x67\x01\x39\x0b\xc2\x59\x10\xce\x82\x70\xd6\x12\x2f\x20\x67\x01\x39\x0b\xc8\x59\x40\xce\x02\x72\x16\x90\xb3\x80\x9c\xb5\x9a\xaf\x38\xae\xdf\x0b\xe4\x02\x7b\x16\xd8\xb3\xc0\x9e\x05\xf6\x2c\xb0\x67\x6d\x11\x87\x70\x16\x78\xb3\xc0\x9b\x05\xde\x2c\xd8\x66\x01\x36\x6b\xcb\x01\xd8\x66\xc1\x36\x0b\xb6\x59\x50\xcd\xda\xf3\xb5\xb6\xe0\x99\xb5\xcd\x29\x90\x66\x81\x34\x0b\xa4\x59\xf0\xcc\x82\x67\x16\x30\xb3\x80\x99\x05\xcc\xac\x7d\xbe\x63\x5c\x4d\x0e\xc0\x33\x0b\x9e\x59\xf0\xcc\x82\x67\x16\x24\xb3\x76\x18\x69\x96\x81\x31\x0b\x8c\x59\x60\xcc\x02\x63\x16\x18\xb3\x60\x98\x05\xc3\x2c\x18\x66\x01\x30\x0b\x80\x59\x00\xcc\x82\x5e\x16\xf4\xb2\xa0\x97\x05\xbd\x2c\xe8\x65\x41\x2f\x0b\x7a\x59\x70\xcb\x82\x5b\x16\xdc\xb2\xe0\x96\xb5\xcb\x18\xf1\x05\x5d\x16\xe8\xb2\x40\x97\x05\xba\x2c\xd0\x65\x81\x2e\x0b\x74\x59\xa0\xcb\x02\x5d\xd6\x16\xd9\x2d\xb2\x00\xcc\x02\x60\x16\x00\xb3\xb6\xd8\xc1\x30\x0b\x86\x59\x30\xcc\x82\x61\x16\x0c\xb3\x60\x98\x75\xe6\x8b\x6e\x81\x31\x0b\x8c\x59\x60\xcc\x02\x63\x16\x18\xb3\xc0\x98\x05\xc6\x2c\x00\x66\x01\x30\x0b\x7a\x59\xd0\xcb\x82\x5e\x16\xe8\xb2\xe0\x96\x75\x44\x16\x74\x59\xa0\xcb\x02\x5d\x16\xd0\xb2\xce\xf1\x1e\x8e\x9f\x9f\xef\xcf\x5d\x47\xec\x40\x94\x05\xa2\x2c\x10\x65\x81\x28\x0b\x44\x59\xf0\xc9\x82\x4f\x16\x7c\xb2\xe0\x93\x05\x9f\x2c\xf8\x64\xc1\x27\x0b\x3e\x59\xc0\xc9\x3a\xd7\x78\x71\x84\x4c\xd6\xb9\x46\x8a\x26\x70\xb2\x80\x93\x05\x99\x2c\xc8\x64\x41\x26\x0b\x32\x59\xc7\x9c\x05\x45\x16\x28\xb2\x40\x91\x05\x8a\x2c\x50\x64\x81\x22\x0b\x14\x59\xa0\xc8\x02\x45\x16\x28\xb2\x40\x91\x05\x8a\x2c\x50\x64\x81\x22\x0b\x08\x59\x40\xc8\x02\x42\xd6\xf9\x59\x90\x6e\xc6\xb8\x9a\xb8\x03\x24\x0b\x20\x59\x47\xc4\xc1\x8f\x05\x7e\x2c\xf0\x63\xc1\x1e\x0b\xf6\x58\xb0\xc7\x82\x3d\x56\x88\x32\xf8\xb1\xc0\x8f\x05\x78\xac\xf0\x3d\x08\x78\x2c\xc0\x63\x85\x99\x0b\x7b\x2c\xd8\x63\xc1\x1e\x2b\xc4\x17\xf6\x58\xb1\x7f\xe2\x99\x05\x87\xac\x30\xbb\x43\x26\x84\x39\x0e\x90\x2c\x80\x64\x01\x24\x0b\x20\x59\x00\xc9\x02\x48\x16\x40\xb2\x00\x92\x05\x90\x2c\x80\x64\x85\x6c\x01\x48\x16\x40\xb2\xc2\xac\x87\x49\x16\x4c\xb2\x60\x92\x05\x90\x2c\x80\x64\x41\x23\x0b\x1a\x59\xd0\xc8\x82\x43\x16\x1c\xb2\xe0\x90\x05\x87\x2c\x38\x64\xc5\xfb\xfc\xad\x3d\xb3\x72\x6c\x8f\xed\xcf\xdf\xac\xce\x0e\x91\x3b\x43\x3e\x6b\xfe\xfc\x7c\xfd\xcd\x2a\xef\x50\xbb\x33\x45\x37\x4f\x7c\xfe\x6a\x9e\x65\x9c\x6b\x77\xac\xdd\x59\xf5\xda\x7b\xfd\xcd\x9a\x57\xec\xf7\xb2\x97\x7d\xec\xf7\x82\xed\xb7\x1f\xf6\x3b\x7e\xb3\x87\x0d\x36\xff\xe6\x8b\x64\x96\xdb\x1d\xef\xcf\xd9\x1e\x07\x79\x9c\xe3\x71\xe4\xa9\x5e\xde\xbf\xf5\xe6\xf5\x63\xff\x39\xa7\xee\x90\xaa\x93\x9e\x57\xd7\xd2\xab\x6b\xe9\xd5\xa3\x94\x1e\x80\x34\xa0\xde\xb9\x7f\x35\x37\xf2\x0e\x18\x38\xa5\xe5\x60\x96\xb3\x43\x8e\x23\xcd\x97\x9e\x93\xec\x14\x17\xa4\x19\x54\x29\x7d\x5f\xff\x51\xa6\x10\xaf\xd0\xb1\x10\xdd\xf4\x3d\xfb\xaf\xe7\xd1\x9c\x6a\xa6\xef\x9d\x7f\xdd\xcf\x9f\x33\x87\x0e\x21\x3a\x83\xe8\xf0\x61\xa5\x0f\x65\x56\x28\xc7\x8f\x9c\x3e\xaa\x79\x26\xad\x79\x34\x74\xac\xab\xe6\x71\xd2\x51\x2d\x27\xb5\xea\xad\x79\xe3\x2b\xff\x1c\x04\x72\x0e\xc8\x51\x21\x27\x85\x6a\x9e\x52\x9d\xee\x72\xd0\xab\xe6\xd1\xf5\xea\xd5\x3a\x91\x96\x5b\x66\x3b\xcc\xb5\xe2\x7d\x7f\xfe\xcd\x03\x19\x63\xb6\x83\x5d\x0b\xec\x5a\x60\xd7\x02\xbb\x16\xd8\xb5\xc0\xae\x05\x76\xad\xb0\x9a\x87\xd5\x1c\xf8\x5a\x61\xce\xc3\x5f\x2b\xac\xe6\x20\xd8\x02\xc1\x16\x08\xb6\x40\xb0\x05\x82\xad\xf8\x0d\x3f\x57\x9a\xf9\x40\xd9\x02\xca\x56\x5a\xe5\xd3\xfc\xff\xfe\x75\xd0\xd9\x4a\x33\x3f\xcd\x7c\x18\x6d\xc1\x68\x0b\x46\x5b\x30\xda\x4a\x6b\x7d\x5a\x0b\xd2\x8a\x0f\xac\xad\xb4\x22\xa4\x15\x21\xad\x08\x50\xdb\x82\xda\x16\xd4\xb6\xd2\xea\x9f\x56\x87\xfc\x59\x4c\x6b\xc6\xb8\xb2\x7b\x3e\x80\x6e\x01\x74\x2b\xad\x11\x30\xdd\x82\xe9\x16\x4c\xb7\x00\xba\x05\xd0\x2d\x68\x6e\x41\x73\x0b\x9a\x5b\xe9\x9b\x03\xa0\x5b\x69\x45\x48\x2b\x42\x5a\x11\x20\xbb\x05\xd9\x2d\x98\x6e\xa5\x6f\x8b\xb4\x22\x80\x75\x0b\xac\x5b\xe9\x9b\x03\xb2\x5b\x90\xdd\x82\xec\x16\x64\xb7\x20\xbb\x95\x93\xf8\x37\xeb\xaf\x24\xef\x9b\x19\xf7\x3e\xef\x6f\xd5\x67\xe6\xfd\x8b\xbf\x99\x28\x6f\xd7\xdf\x24\xe9\xa4\xec\xdb\xfd\x37\xf7\x73\xef\xac\xbf\xb9\xcf\x9c\x3b\xb6\x37\x6b\xc1\xcb\x31\x7b\x32\x7b\xf5\xdf\xdc\x70\xd6\xac\x52\x4a\x4c\x10\x86\xf5\xbd\xf1\x47\x4c\x46\x57\xd6\xb5\xeb\x8f\x4a\x86\x48\xa6\x6b\xf7\x1f\x59\x0c\x9d\x8c\xd3\x68\xb4\x62\x84\x6d\x74\x61\x7d\x6b\x66\xd9\x9a\xd9\x78\xee\x1f\xad\x5b\x5f\x97\x3f\x33\x4d\xcf\xfc\x22\xe6\x02\x33\x39\x67\x66\x90\x45\xd1\x37\x11\x36\xcd\x3d\xa9\x92\x1a\x2a\x6a\x54\xf6\xfb\x73\x22\xd8\x81\x60\x27\x84\xeb\x7e\x3e\xe3\xff\xfe\x68\x73\x48\x73\xba\xce\x4c\xdf\x79\xf6\x9d\xbb\x9e\xfa\x73\x82\x7d\x6e\x11\xf2\xcf\x81\xf4\xf9\xa7\x1f\xbc\xfd\xe7\x9c\xba\x72\x09\xbf\x77\x44\xff\x37\x31\x13\x53\xd1\x77\x1f\x00\xc0\xae\x74\x07\x00\xc3\xae\xb4\x26\x80\xb1\x2b\xad\x09\x90\xec\x82\x64\x57\x5a\x13\x20\xd9\x95\xd6\x84\xb4\x26\xc0\xb3\x0b\x9e\x5d\xf0\xec\x4a\x6b\x02\x48\xbb\x40\xda\x05\xd2\x2e\x78\x76\xc1\xb3\x0b\x98\x5d\xc0\xec\xca\x7f\xb1\x02\x5c\x2b\x00\x6c\xbb\x60\xdb\x05\xdb\x2e\xd8\x76\xc1\xb6\x0b\xb6\x5d\x50\xed\xba\x66\xfd\x35\xdf\xc1\xd8\x75\xcd\xf7\xbb\xbe\x63\x8a\x9d\x77\x78\xcd\xf7\x6b\xbe\x5f\xf3\x1d\xb0\x5d\x80\xed\x02\x6c\x17\x60\xbb\x00\xdb\x75\xcd\xe8\x6b\x46\xdf\xdf\xa0\x63\x5d\xf3\xfd\x9a\xef\xd7\x7c\xbf\xe6\x3b\xf0\xbb\xae\x7b\x02\xf8\x77\x5d\x73\x1f\x04\x5e\xd7\x3d\xc1\xb5\x02\x00\xc2\x0b\x10\x5e\xd7\x3d\x01\x2c\xbc\x60\xe1\x05\x0b\x2f\x40\x78\x01\xc2\x0b\x0a\x5e\x50\xf0\xba\xf9\xfd\xad\x6b\x9a\xf5\xd7\xac\x07\x84\xd7\x35\xeb\x61\xde\x75\xdd\xf1\xc3\xbc\xeb\xfa\xa6\x98\xaf\xb9\x9b\x73\x4f\x3f\x76\xb3\x87\x0d\xf6\xfb\xdb\xcb\x3e\xb6\xd8\x1e\xdb\x1f\x96\x6f\xf3\x6d\xbe\xcd\xb7\xf9\x36\xdf\xe6\xdb\x7c\x7b\x7c\xe7\x86\x60\xac\xfb\x8b\xcf\x66\x0f\x1b\x6c\xb2\x97\x7d\x6c\xb1\x7c\x17\xdf\xc5\x77\xf1\x5d\x7c\x17\xdf\xc5\x77\xf1\x5d\x7c\x17\xdf\xc5\x77\xf3\xdd\x7c\x37\xdf\xcd\x77\xf3\xdd\x7c\x37\xdf\xcd\x77\xf3\xdd\x7c\x0f\xdf\xc3\xf7\xf0\x3d\x7c\x0f\xdf\xc3\xf7\xf0\x3d\x7c\x0f\xdf\x33\xbe\xf9\x7d\xcf\xff\xdc\x4f\xf1\x0d\xbe\xbe\xbb\xe7\x69\x61\x2c\xdf\xe0\x1b\x7c\xc3\xeb\x26\xdf\xe4\x9b\x7c\x93\x6f\xf2\x4d\xbe\xc9\x37\xf9\x26\xdf\xe4\x7b\xf9\x5e\xbe\x97\xef\xe5\x7b\xf9\x5e\xbe\x97\xef\xe5\x7b\xf9\x5e\xbe\xef\xfb\x2d\xc0\xf7\xf1\x7d\xc7\x9d\x86\x7c\x7b\xdf\x5c\x92\x75\xd6\x0d\xdb\x01\xeb\x5a\x2b\xae\xb5\xe2\x5a\x25\xae\x55\xc2\x36\xc1\xb2\x4d\xb0\xae\x55\xc2\x06\xc1\xb2\x41\xb0\x9e\x27\x3d\xdb\x04\xcb\x36\xc1\xb2\x4d\xb0\x6c\x10\x2c\x1b\x04\xcb\xd6\xc0\xb2\x35\xb0\x6c\x0d\xac\xe7\x1b\xdf\x06\xc1\x7a\x56\x80\xb7\x7e\x89\x53\x67\x8c\xab\x59\x1f\x6c\x25\x2c\xdb\x07\xcb\xc6\xc1\xb2\x71\xb0\x9e\x15\xc0\xf6\xc1\xb2\x7d\xb0\x6c\x1f\xac\x67\x76\x3f\xb3\xdb\x56\xc2\xb2\x95\xb0\x6c\x25\xac\x67\x5e\x3f\xf3\xfa\x99\xd7\x36\x17\xd6\x33\xaf\x6d\x31\xac\x67\x5e\xdb\x68\x58\xcf\xbc\xb6\xdd\xb0\x5e\xfc\x5e\x21\x6d\x46\x2c\x9b\x11\xeb\x79\x7a\xb4\x25\xb1\x6c\x49\xac\xe7\x4e\xc0\xc6\xc4\xb2\x31\xb1\x6c\x4c\xac\x67\x4d\xb0\x3d\xb1\x6c\x4f\x2c\xdb\x13\xcb\xf6\xc4\xb2\x3d\xb1\x6c\x4f\x2c\xdb\x13\xeb\x59\x25\x9e\xef\x11\x5b\x15\xeb\x59\x31\x9e\x15\xe3\xf9\x36\xb1\x79\xb1\x6c\x5e\x2c\x9b\x17\xcb\xe6\xc5\xb2\x79\xb1\x6c\x5e\xac\xe7\x79\xf2\xc9\x8d\x37\x5f\x94\x7b\xee\x89\xc7\x06\x9b\xec\x65\x1f\x5b\xec\x3c\x30\x5c\x0f\x0c\xd7\x03\xc3\xf5\xc0\x70\x3d\x30\x5c\x0f\x0c\xf3\x8d\x30\xf6\xb2\x8f\x2d\x96\xef\xe2\xbb\xf8\x2e\xbe\x8b\xef\xe2\xbb\xf8\x2e\xbe\x8b\xef\xe2\xbb\xf8\x6e\xbe\x1e\x6c\xe6\x9b\x62\x2c\xdf\xcd\x77\xf3\xdd\x7c\xdd\x10\xcc\x37\xc5\x58\xbe\x87\xef\xe1\x7b\xf8\x1e\xbe\x87\xef\xe1\xeb\x66\x62\xbe\x0b\xc6\xf2\x3d\x7c\x83\x6f\xf0\x0d\xbe\xc1\x37\xf8\x06\xdf\xe0\x1b\x7c\x83\x6f\xf0\x4d\xbe\xc9\x37\xf9\x26\xdf\xe4\x9b\x7c\x93\x6f\xf2\x4d\xbe\xc9\xf7\xf2\xbd\x7c\x2f\xdf\xcb\xf7\xf2\xbd\x7c\x2f\xdf\xcb\xd7\x53\xe2\xbd\x7c\x3d\x55\xce\xb7\xc9\x58\xbe\x8f\xef\xe3\xfb\xf8\x3e\xbe\x8f\xef\xe3\xfb\xf8\x16\xdf\xe2\x2b\x37\x66\xf5\x18\xcb\xb7\xf8\x5a\x43\x6c\x7e\xad\xe7\x3e\xc4\x16\xd8\x7a\xff\xfc\x5c\xbe\x59\x55\x6c\x7b\x2d\x1b\x5e\xcb\x86\xd7\xb2\xe1\xb5\x6c\x78\x2d\x1b\x5e\xeb\x59\x67\x6c\x7b\xad\xb2\xce\xd8\xfc\x5a\x36\xbf\x96\x0d\xaf\x65\xab\x6b\xd9\xea\x5a\xe5\xee\xc2\x86\xd7\xb2\xe1\xb5\x6c\x78\x2d\x1b\x5e\xab\x7e\x96\xc4\x9e\x31\x5e\xd1\xbd\x87\xed\xb0\x65\x3b\x6c\xd9\x0e\x5b\xe5\xde\xa3\xdc\x7b\xd8\x1a\x5b\x65\xe5\xb1\x41\xb6\xca\xca\x63\x9b\x6c\xd9\x26\x5b\xb6\xc9\x96\x6d\xb2\x65\x9b\x6c\xd9\x26\x5b\xe5\xee\xc2\x66\xd9\xb2\x59\xb6\xca\xfa\x63\xcb\x6c\xd9\x32\x5b\xb6\xcc\x96\x2d\xb3\x55\xf1\x7b\x85\xb4\xa1\xb6\x6c\xa8\x2d\x1b\x6a\xcb\x86\xda\xb2\xa1\xb6\xca\xca\x53\xee\x40\x6c\xae\xad\xb2\xfe\xd8\x62\x5b\x65\xfd\xb1\xd1\xb6\x6c\xb4\x2d\x1b\x6d\xcb\x46\xdb\xb2\xd1\xb6\x6c\xb4\xad\xb2\xf2\xd8\x6e\x5b\xb6\xdb\x56\x59\x79\x6c\xba\x2d\x9b\x6e\xcb\xa6\xdb\x2a\x2b\x4f\x59\x79\xca\xca\x63\x1b\x6e\xd9\x86\x5b\xb6\xe1\x96\x6d\xb8\x55\xaf\xff\x2a\x3d\x89\xdf\xb9\xa9\xbf\xf3\x24\x7e\xe7\x49\x7c\x9e\x48\xe6\xd9\x47\xe1\x22\x75\x8b\x2a\x6f\xfd\xa9\x5d\xf4\xdf\xfd\x28\x54\x57\x52\x5c\x49\x6d\x25\xa5\x95\x6a\x9e\xc7\x94\x57\x52\x5d\x49\x71\x25\xb5\x95\x94\x56\xfa\x17\xf7\xe8\xbd\xce\x5f\xaf\xf8\xeb\x95\x7f\xbd\xee\x5f\xaf\xf7\xd7\xf3\x58\xb3\xfa\xaf\xf7\xe7\xaf\xf7\xfa\xeb\xbd\xff\x7a\x9f\xbf\x9e\x07\xa4\x79\x3e\xda\xf7\x6f\x1e\x41\x7a\x9e\x9a\xe6\x51\x69\x9e\x94\xe6\x39\x67\x1e\x53\xe6\x29\x65\x9e\x92\xe6\xa9\xe8\xfc\x7a\x5e\xfd\xff\x7b\x1f\x91\x7f\x1d\xf7\xaf\xe3\xfd\x75\xd4\x5f\x47\xff\x75\x7e\xfe\x3a\xd7\x5f\xe7\xfe\xeb\x3c\x7f\x3d\x8f\x6a\xf3\xcc\x36\x0f\x51\xf3\x4c\x96\xf5\xd7\x39\x8f\x5b\xf3\xdc\x35\xcf\x63\x67\x9e\xba\xe6\x99\x6e\x9e\xf0\xe6\x99\x6d\x1e\xd4\xfe\xfa\x67\x0b\x9c\x5c\xe5\xfb\xa1\x7c\x3f\xd8\x38\x5d\x65\xae\xdb\x3e\x5d\x65\xae\xdb\x44\x5d\x36\x51\x97\x4d\xd4\x65\x13\x75\xd9\x44\x5d\x36\x51\x57\xe1\x10\x65\xf6\x97\xd9\x6f\xcb\x74\x15\x0e\x61\xe3\x74\xd9\x38\x5d\x36\x4e\x97\x2d\xd3\x65\xcb\x74\xd9\x2c\x5d\x36\x4b\x97\xcd\xd2\xd5\x9f\xdf\xef\xdc\x86\xea\xb2\xa1\xba\xda\x3a\xd1\xd6\x09\x9b\xab\xcb\xe6\xea\xb2\xa1\xba\xda\xec\xb7\xa1\xba\xda\x8c\xb7\xa1\xba\x6c\xa8\x2e\x1b\xaa\xab\xcd\x72\x9b\xa5\xcb\x66\xe9\xb2\x59\xba\x6c\x96\x2e\x9b\xa5\xab\xcf\x77\xa4\x6b\x9a\xe5\xb6\x4c\x57\x9b\xe5\x36\x4e\x57\xff\x3c\x22\x3d\x63\x5c\xd3\x4a\x60\x5b\x75\xd9\x56\x5d\x6d\x96\xdb\x5c\x5d\x36\x57\x57\x9b\xe5\xb6\x58\x97\x2d\xd6\x65\x8b\x75\xd9\x62\x5d\xb6\x58\x97\x2d\xd6\x65\x8b\x75\xd9\x62\x5d\xb6\x58\x97\x2d\xd6\xd5\xee\x2f\xda\x2c\xb7\xdd\xba\xda\x2c\xb7\xe9\xba\xda\x2c\xb7\xf5\xba\x6c\xbd\x2e\x5b\xaf\xcb\xd6\xeb\xb2\xf5\xba\x6c\xbd\xae\x36\xbf\xfb\x4d\x86\xbe\xfd\xe7\xd8\x67\x47\x31\xb2\x76\x52\xb8\x27\x5f\x3f\x92\x77\x32\xf5\x33\x69\x3a\x73\x27\x0f\x8f\xf3\xe7\x9c\xa8\x23\xa0\xce\x7b\x3a\xb8\xe9\xb4\xa7\x83\x99\x4e\x58\x3a\x90\xe9\x1c\xa5\x43\x8d\xce\x70\x3a\x8c\xd9\xb9\xe6\xf2\x33\xff\xf2\xf0\x30\x43\xe6\xd5\x3e\xf3\xdb\x99\x94\x79\xbc\x97\xcf\x9f\xa3\xa5\x4e\x87\x3a\x28\xea\x5c\x69\x47\xcf\x3b\xa8\x79\xa7\xe5\x02\xde\xee\xbc\xe4\xc7\xff\x9d\xf7\xbc\xbc\xfb\xb9\xf2\xf2\x5e\xbc\xf8\xbc\xe4\xf2\xc7\x78\x49\x6f\x63\x3c\x66\x3d\xc8\x59\x08\xf2\x8c\xdb\x2c\x03\x79\xfc\xbd\xf3\x8b\xe3\x9d\xce\x6f\x63\x7e\x1b\xfe\xa2\xf1\x0d\x53\x7a\xc6\xcd\xe4\xcf\x9f\xdf\x05\xff\xfb\x30\x0b\xdb\xea\xab\xad\x07\x36\xd7\x97\xcd\xf5\x65\x73\x7d\xd9\x5c\x5f\x36\xd7\x97\xcd\xf5\x65\x5b\x7d\xd9\x56\x5f\xb6\xd5\x57\x9b\xfd\x36\xd7\x57\x9b\xfd\xb6\xd8\x57\x9b\xfd\xdf\x8d\x76\xc7\x44\xb6\x3d\xf6\x6d\x8f\x7d\x3b\x1c\xb2\x1d\x0e\xd9\xf6\xdb\xb7\xfd\xf6\xed\x70\xc8\xfe\xfc\x5e\x09\xb6\x3d\xf9\x6d\x4f\x7e\x3b\x3a\xb2\xed\xcc\x6f\x3b\xf3\xdb\xce\xfc\xb6\x33\xbf\xed\xcc\x6f\x47\x47\xb6\xfd\xf9\xed\xe8\xc8\x76\x74\x64\xdb\xab\xdf\x8e\x8e\x6c\x3b\xf6\xfb\xb3\xf9\x6e\xbe\x9b\xef\xe6\xbb\xf9\x1e\xbe\x87\xef\xe1\x7b\x78\x1d\x5e\xe7\xe7\x77\xfc\xb6\xff\xbf\xed\xff\x6f\xfb\xff\xdb\xce\xff\xb6\xf3\xbf\xed\xf9\x6f\x7b\xfe\xdb\x9e\xff\xb6\xe7\xbf\xed\xf9\x6f\x07\x4e\xb6\x9d\xff\x6d\xe7\x7f\xdb\xf9\xdf\x76\xfe\xb7\xdd\xfe\x6d\xb7\x7f\x7f\xae\xf1\xd7\xc8\x6b\xe4\x35\xf2\x1a\x79\x5d\xff\xba\xfe\x35\xfe\x19\xff\x5c\xff\xf1\x7a\xbc\x1e\xaf\xc7\x6b\xee\x29\xcf\x9e\x67\x80\xb3\x3f\xdf\x7f\xbf\x3f\xa5\x26\xe7\x9f\x85\xc8\xe1\x72\x73\x4b\x7f\xf6\x46\xe7\xe6\x96\xfe\xec\xed\xe7\x1f\x3f\x5f\x7e\xbe\xfc\x7c\x7d\xc7\x1f\x36\x58\x97\x5f\x2e\xbf\x5c\x79\x7d\xaf\x3c\x76\xcd\x03\xcb\x59\xfd\xfd\xb7\xab\xcd\x6d\xf3\x59\xbd\x59\xd7\x49\xbe\xdb\xbf\xb7\x6b\x1e\xaf\x72\xfc\xe4\x7c\x7f\xe2\x55\x8e\x91\xc7\xab\x1c\xaf\x72\x5c\x33\xbc\xc3\x79\x28\x38\x6b\x6e\x8c\xcf\x9a\x1b\xe3\xb3\xea\xb2\xde\x43\x19\x1f\xae\x1c\xae\x1c\xae\x1c\xae\x1c\xae\x1c\xdf\x4f\xc6\xd5\x3e\xfe\xde\xcf\xf7\x73\x30\xfe\x13\x7f\xea\x68\xce\xc0\xef\xc5\xda\x1f\xe1\x05\xdb\x0b\xb6\xdf\xfe\xc3\x3d\xbf\x7f\x90\x37\x78\xfc\xe4\xb8\xe4\xf3\x82\xfb\x6b\xbf\x7f\xba\x97\xdd\xae\xf9\xfc\xfb\x7a\x6b\xdf\x40\x25\xaf\xf4\xef\x6f\x44\x7f\x16\x94\xff\x1f\x5b\x56\xb6\xd3\x48\x9b\x74\x64\x3b\x8d\xb4\x9d\x46\xda\x4e\x23\x6d\xa7\x91\x36\x49\xc9\x26\x29\xd9\x24\x25\xdb\x69\xa4\x4d\x58\xb2\x09\x4b\x36\x61\xc9\x76\x02\x69\x93\x97\x6c\x27\x90\xb6\x13\x48\xdb\x09\xa4\x4d\x70\xb2\x9d\x40\xda\x64\x27\x9b\xec\x64\x93\x9d\x6c\xb2\x93\x4d\x76\xb2\xd7\xe7\xa7\xa4\x61\x3b\x9f\xb4\x09\x54\xb6\xf3\x49\xdb\xf9\xa4\xed\x7c\xd2\x76\x3e\x69\x13\xae\x6c\xc2\x95\x4d\xb8\xb2\x09\x57\x36\xe1\xca\x76\x4a\x69\x3b\xa5\xb4\x89\x58\x36\x11\xcb\x76\x4a\x69\x93\xb2\x6c\x52\x96\x4d\xca\xb2\x49\x59\x36\x29\xcb\x26\x65\xd9\xa4\x2c\x9b\x94\x65\x93\xb2\xec\xf5\xb3\xc2\xc0\x8c\x71\xcd\xe3\x9a\x96\x24\xa7\x97\xf6\x3a\xae\x6c\xd1\x21\x83\xd9\x64\x30\x9b\x0c\x66\x93\xc1\x6c\x32\x98\x4d\x06\xb3\x57\xf0\xb5\x0c\x91\xc4\x6c\x92\x98\xed\x84\xd3\x26\x8c\xd9\x4e\x38\x6d\xf2\x98\x4d\x1e\xb3\xc9\x63\x36\x79\xcc\x26\x8f\xd9\xe4\x31\x9b\x3c\x66\x93\xc7\x6c\xa7\x9d\x36\x91\xcc\x26\x92\xd9\x44\x32\x7b\x4d\x72\x76\xfd\x59\x41\xde\xe7\x6f\xff\xa7\xf4\xe4\xfc\x67\x03\xff\xb3\xfa\xef\xec\xf5\x37\xab\xc2\x99\x79\x5a\xf7\x6f\x56\x94\x93\xf5\x77\xfe\x13\x13\xaf\x5d\x98\x46\x61\x1a\x85\x69\x14\xa6\xd1\x98\x46\x63\x1a\x8d\x69\x34\xa6\xd1\x98\x46\x63\x1a\x8d\x69\x34\xa6\xd1\x98\x46\x63\x1a\x8d\x69\x34\xa6\xd1\x98\x46\x63\x1a\x8d\x69\x34\xa6\xd1\x98\x46\x63\x1a\x8d\x69\x34\xa6\xd1\x98\x46\x63\x1a\x8d\x69\x78\xb2\x88\xb9\x3d\x8a\xb9\x99\x88\xb9\x99\x88\xb9\xbb\x89\xb9\x93\x89\xb9\xad\x88\xb9\xad\x88\xb9\x15\x0a\x77\x50\x73\x83\x11\x73\x83\x11\x73\x03\x14\x73\x97\x11\x73\x97\x11\x6e\x7b\xe6\x56\x23\xe6\x56\x23\xe6\x56\x23\xe6\x56\x23\xe6\x56\x23\xe6\x56\x23\x3c\x67\x78\xd0\xf0\xa4\xe1\x51\x23\x3c\xc3\xcc\x03\xcc\xdc\xec\x9c\xb9\xd9\x39\x73\xf7\x75\xe6\xf6\xed\xcc\x6d\xcf\x99\xdb\x9e\xf9\xc8\x55\x8e\x51\x38\x46\xdd\x18\x65\x63\xfa\xcc\xbb\x3f\xf3\xee\xcf\x2c\x36\x35\x4f\x63\x67\x1e\xc4\x66\x8d\x9d\x35\xb1\xe7\xd1\xec\xcc\x8f\x63\xfe\x15\xf3\xbb\x6f\x7e\xf9\xea\x21\x77\xda\xe4\x4e\x9b\xdc\x69\x93\x3b\x6d\x72\xa7\x4d\xee\xb4\x9d\x70\xdb\x44\x4f\x9b\xe8\x69\x13\x3d\x6d\x67\xd8\x36\xe9\xd3\x26\x7d\xda\xa4\x4f\x9b\xf4\x69\x93\x3e\x6d\xd2\xa7\x4d\xfa\xb4\x49\x9f\x36\xe9\xd3\x26\x7d\xda\xa4\x4f\x9b\xf4\x69\x93\x3e\xed\xd5\xff\x62\x6e\x59\x81\x08\xa3\xb6\x73\x6e\x9b\xf4\x69\x13\x3d\x6d\xa2\xa7\xed\x6c\xdb\x26\x7a\xda\x44\x4f\xdb\xb9\xb5\x4d\xfa\xb4\x49\x9f\x36\xe9\xd3\x76\x6e\x6d\x13\x40\x6d\xe7\xd6\x36\x19\xd4\x26\x83\xda\x64\x50\x9b\x0c\x6a\x93\x41\x6d\xa7\xd7\xb6\xd3\x6b\x9b\x24\x6a\x3b\xbd\xb6\xe7\xfb\xf5\xd7\x3b\x77\xc2\x6d\x3b\xe1\xb6\x49\xa8\x36\x09\xd5\x26\xa1\xda\x24\x54\x9b\x84\x6a\x6f\xab\x8e\xd3\x6e\x9b\x9c\x6a\x93\x53\x6d\xa7\xdd\x36\x51\xd5\x26\xaa\xda\x44\x55\x9b\x9c\x6a\x93\x53\x6d\x42\xaa\x4d\x48\xb5\x09\xa9\xb6\x13\x6e\x9b\x9c\x6a\x3b\xe1\xb6\x89\xaa\xb6\x73\x6e\x9b\xb4\x6a\x93\x56\x6d\x72\xaa\x4d\x4e\xb5\x9d\x6d\xdb\x84\x54\x7b\xdf\xcf\xdf\xbc\x8f\xfd\xce\xdf\x7c\x1f\xef\xce\xbf\xf3\x99\xff\xbd\xbf\xc9\xdf\xc9\xcd\xc9\xca\xb9\xee\x39\xfd\x37\x7f\xdd\x5c\xeb\x64\xff\x9d\xb3\xfe\x0e\x34\x58\xa6\x7e\x99\xfa\x65\xea\x97\xa9\x5f\xa6\x7e\x99\xfa\x65\xea\x97\xa9\x5f\xa6\x7e\x99\xfa\x65\xea\x97\xa9\x5f\xa6\x7e\x99\xfa\x65\xea\x97\xa9\x5f\xa6\x7e\x99\xfa\x65\xea\x97\xa9\x5f\xa6\x7e\x99\xfa\x65\xea\x17\x9c\x59\x70\x66\xc1\x99\x05\x67\xd6\x4c\xff\x33\x8f\x57\x67\x1e\x96\xce\x3c\x63\x9d\x79\x62\x3a\x0f\x55\xf0\xdb\x99\x90\x6f\x26\x64\xcd\x84\xac\x99\x90\x35\x1e\x35\x1e\xf3\x40\x76\xe6\xe1\xe6\xcc\x63\xce\x99\x07\xad\x33\xcf\x67\x67\x1e\x87\xce\x3c\x18\x9d\x79\xee\x3a\xf3\xa4\x76\xe6\x71\xe8\xcc\x83\xd1\x99\x27\xb0\x33\x8f\x70\x67\x1e\x96\xce\x97\x69\xcc\x6f\x51\x0d\x58\x03\xd7\x38\x7e\x3b\xd7\x9b\xc5\xe6\xcc\x62\x73\x66\xb1\x39\xb3\xd8\x9c\x80\x41\xc6\x63\x16\x9b\x33\xb7\x3d\x73\xab\xf4\x66\x29\xef\xbf\x3a\x9f\xfa\x53\x9d\x5f\x71\x7e\xb5\xf9\x95\xe6\xaf\xf3\x4d\x43\x5f\x06\xd4\x72\x9b\x42\x6e\x53\xc8\x6d\xda\xb8\x4d\x15\xb7\x1d\x45\xdc\xb4\x71\x9b\x36\x6e\x6f\xcb\xc0\xb6\x0c\xd0\xc9\x6d\x3a\xb9\x4d\x1b\xb7\x29\xe1\x68\x6e\x92\xe6\x26\x69\x6e\x92\xc2\x66\xac\xeb\x98\xbe\x74\x6f\xe4\x32\x49\x2e\x93\x84\x32\x49\x28\xf3\x6b\x62\xd1\xc3\x91\xd1\x24\x19\xcd\xd8\xcb\xce\x35\x69\xe0\x36\xf5\xdb\xa6\x7e\xdb\x8e\x1f\x6e\x1a\xb8\x4d\x03\xb7\x69\xe0\x36\x0d\xdc\x76\xf0\x70\x53\xc2\x6d\x1a\xb8\x4d\xfd\xb6\x1d\x36\xdc\x34\x70\xdb\x61\xc3\x4d\x09\xb7\x1d\x39\xdc\x8e\x1c\x6e\x47\x0e\x37\x55\xdc\x9e\x38\xfd\x7c\xe7\xa6\xac\xa3\x88\x9b\x7e\x6e\xd3\xcf\x6d\xfa\xb9\x4d\x3f\xb7\xe9\xe7\x36\xfd\xdc\x76\x08\x71\x53\xd1\x6d\x2a\xba\x4d\x45\xb7\xa9\xe8\x36\x15\xdd\xa6\xa2\xdb\x54\x74\x9b\x8a\x6e\x3b\x84\xb8\x69\xe9\xb6\x43\x88\x9b\xa2\x6e\x3b\x8a\xb8\xe9\xea\x36\x5d\xdd\xa6\xab\xdb\x74\x75\x9b\xae\x6e\xd3\xd5\x6d\x07\x12\x37\x75\xdd\xa6\xae\xdb\x07\xf1\x3e\x18\xfb\xc1\xd8\x0f\xc6\x7e\x30\xf6\x83\xb1\x1f\x8c\xfd\x60\xec\x07\x63\x3f\x18\xfb\xc1\xd8\x0f\xc6\x4e\x26\xe0\x15\x97\x57\x5c\x5e\x71\x79\xc5\xe5\x15\x97\x57\x5c\xff\xf9\x8a\x18\xfb\xc1\xd8\x0f\xc6\x7e\x30\xf6\x83\xb1\x1f\x8c\xfd\x60\xec\x07\x63\x3f\x18\xfb\xc1\xd8\x0f\xc6\x7e\x30\xf6\x83\xb1\x1f\x8c\x7d\xe6\xea\x58\xbe\xf4\x61\x87\x3e\x6c\xe6\xeb\x58\xbe\xcd\xd7\xde\xcd\xb1\x77\x73\xec\xdd\x9c\xaf\xae\xc9\x7d\xce\x71\x9f\x73\xdc\xe7\x84\xc5\x2e\x2c\x76\x61\xb1\x0b\x8b\x5d\x58\xec\xc2\x62\x17\x16\xbb\xb0\xd8\x85\xc5\x2e\x2c\x76\x61\xb1\x0b\x8b\x5d\x58\xec\xc2\x62\x17\x16\xbb\xb0\xd8\x85\xc5\x2e\x2c\x76\x61\xb1\x0b\x8b\x5d\x58\xec\xc2\x62\x17\x16\xbb\xb0\xd8\x85\xc5\x2e\x2c\x76\x61\xb1\x0b\x7b\x37\x61\xef\x26\x2c\xd0\x61\xef\x26\xec\xdd\x84\xbd\x9b\xb0\x77\x13\xf6\x6e\xe6\x9e\xe7\x7f\xf1\x53\x08\x19\xa6\xb0\xa5\xb0\xa5\xb0\xa5\x50\xa5\x50\xa5\x20\xa5\x20\xa5\x20\xa5\xf0\xa4\xf0\xa4\xf0\xa4\xf0\xa4\xf0\xa4\xf0\xa4\xf0\xa4\x90\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x00\xa4\x0f\x3d\x7d\xe8\xe9\xe3\xfe\xf5\xce\x89\x2b\x05\x23\x85\x21\x85\x21\x85\x21\x85\x21\x85\x21\x85\x21\x85\x21\x7d\xf4\xe9\x43\x4f\x1f\x77\xfa\xb8\xd3\xc7\x9d\x3e\xee\xf4\x71\xa7\x8f\x3b\x7d\xd0\xe9\x83\x4e\x1f\xf4\x58\xe3\x7d\xb3\x93\x4f\x6e\xf2\xc9\x4d\x3e\xb9\xe7\xee\xf2\xe7\x3b\xb7\x94\x10\x57\x6e\x67\x50\x37\x89\xe5\x26\xb1\xdc\x24\x96\x9b\xc4\x72\x93\x58\x6e\x12\xcb\xed\x24\xea\x26\xb4\xdc\x84\x96\xdb\x49\xd4\x4d\x6e\xb9\xc9\x2d\x37\xb9\xe5\x76\x12\x75\x3b\x89\xba\x49\x2f\x37\xd1\xe5\x26\xba\xdc\x44\x97\xdb\x19\xd4\xed\x0c\xea\x76\x06\x75\x3b\x83\xba\x49\xf4\x76\xc8\x07\x42\xbd\x4d\xa8\xb7\x09\xf5\x76\x98\xc6\x61\x63\x2f\x6c\xec\x85\x8d\xbd\xb0\xb1\x17\x16\x9d\xb0\xe8\x84\x45\x27\x2c\x3a\x61\xd1\x09\x8b\x4e\x58\x74\xc2\xa2\x13\x16\x9d\xb0\xe8\x84\x45\x27\x2c\x3a\x61\xd1\x09\x8b\x0e\x6e\xe2\xdd\x2e\xef\x76\xed\xaf\x5c\x34\x2c\x3a\x61\xd1\x09\x8b\x4e\x58\x74\xc2\xa2\x13\x16\x9d\x7f\xde\xad\x45\x27\x2c\x3a\x61\xd1\x09\x8b\x0e\x75\xd4\x0e\x8b\x4e\x58\x74\xc2\xa2\x03\x36\xec\xb0\xe8\x84\x45\x27\x2c\x3a\x61\xd1\x09\x8b\x4e\x58\x74\xc2\xa2\x13\x16\x9d\xb0\xe8\x84\x45\x27\x2c\x3a\x61\xd1\x09\x8b\x4e\x5a\x74\xd2\xa2\x93\x16\x9d\xb4\xe8\xa4\x45\x27\x2d\x3a\x69\xd1\x49\x8b\x4e\x5a\x74\xd2\xa2\x93\x16\x9d\xb4\xe8\xa4\x45\x27\x2d\x3a\x69\xd1\x49\x8b\x4e\x5a\x74\xd2\xa2\x93\x16\x9d\xb4\xe8\xa4\x45\x27\x2d\x3a\x69\xd1\x49\x8b\x4e\x5a\x74\xd2\xa2\x93\x16\x9d\xb4\xe8\xa4\x45\x27\x2d\x3a\x69\xd1\x49\x8b\x8e\xe7\x96\x9d\x16\x9d\x3c\xff\x1e\x84\xa4\x4f\x3f\x7d\xfa\xe9\xd3\x4f\x9f\x7b\xfa\xdc\xd3\xe7\x9e\x3e\xf7\xf4\xb9\xa7\xcf\x3d\x7d\xd6\xe9\xb3\x4e\x9f\x72\xfa\x94\xd3\xa7\x9c\x3e\xdf\xf4\xf9\xa6\xcf\x37\x7d\xbe\xe9\xf3\x4d\x9f\x6f\xfa\x7c\xd3\x67\x9a\x3e\xcd\xf4\x39\xa6\xcf\x31\x7d\x8e\xbf\xde\x39\xc1\xa6\x4f\x39\x7d\xca\xe9\xf3\x4d\x9f\x6f\xfa\x7c\xd3\x27\x9b\x3e\xd9\xf4\xc9\xa6\xcf\x34\x7d\xa6\xe9\x33\x4d\x9f\x69\xfa\x4c\xd3\x67\x9a\x3e\xd3\xf4\x99\xa6\xcf\x34\x7d\xa6\x63\xf9\x62\x11\x64\x98\x9b\x0c\x73\x3b\x27\xbd\x89\x31\x77\xfe\x8b\xf5\x85\x54\x73\xa7\xf5\x85\x60\x73\x13\x6c\x6e\x82\xcd\x4d\xb0\xb9\x09\x36\x37\xc1\xe6\x26\xd8\xdc\xce\x58\x6f\x67\xac\x37\xf1\xe6\x76\xc6\x7a\x93\x70\x6e\x12\xce\x4d\xc2\xb9\x49\x38\x37\x09\xe7\x26\xe1\xdc\x24\x9c\x9b\x84\x73\xa7\x5b\x15\x42\xce\x4d\xc8\xb9\xd3\x8a\xe3\x04\xf6\x26\x00\xdc\x04\x80\x9b\x00\x70\x13\x00\x6e\x02\xc0\x9d\x33\x7b\x3f\xf1\xf9\x73\xdc\xcb\x69\x2f\x87\xbd\x9c\xf5\x72\xd4\x6b\x7d\xb6\x21\xf7\xcf\x69\xaf\xf5\x89\xfa\x73\xe2\xcb\x81\xaf\xf5\x99\xe5\xe8\x33\xab\xd1\x67\x16\xa3\xcf\xac\x45\x9f\x59\x8a\x3e\xb3\x12\x7d\x66\x21\xfa\xcc\x3a\xf4\x99\x65\xe8\x33\xab\xd0\x67\x16\xa1\xcf\xac\x41\x9f\x59\x82\x3e\xb3\x02\x7d\x66\x01\xfa\xcc\xfa\xf3\x99\xe5\xe7\x33\xab\xcf\x67\x16\x9f\xcf\xac\x3d\x9f\xf7\xeb\x61\xf8\x7f\xc8\x38\x4f\xe6\x38\x99\xd3\x64\xeb\xe3\x33\x98\x05\xec\x33\xeb\xd7\xfa\xf8\xbf\xf3\x0e\x66\x09\xfb\xcc\x0a\xf6\x99\x05\xec\x33\xeb\xd7\x67\x96\xaf\xcf\xac\x5e\x9f\x59\xbc\x3e\xb3\x76\x7d\x66\xe9\xfa\xcc\xca\xf5\x99\x85\xeb\x33\xeb\xd6\x67\x96\xad\xcf\xac\x5a\x9f\x59\xb4\x3e\xb3\x66\x7d\x66\xc9\xfa\xcc\x8a\xf5\x99\x05\xeb\x33\xeb\xd5\x67\x96\xab\x35\xab\xd5\x9a\xc5\x6a\xcd\x5a\xb5\x3e\xff\x6a\xe3\xf8\x67\x56\x7a\x14\x21\xe8\xdc\x04\x9d\x9b\xa0\x73\x13\x74\x6e\x82\xce\x4d\xd0\xb9\x09\x3a\x37\x41\xe7\x26\xe8\xdc\x44\x9c\x3b\x11\x06\x22\x4e\x02\x9d\x24\xd0\x49\x02\x9d\x24\xd0\x49\x02\x9d\x24\xcd\x49\xd2\x9c\x24\xcd\x49\xd2\x9c\x24\xcd\x49\xd2\x9c\x24\xcd\x49\xd2\x9c\x5f\xef\xdc\x09\x7c\xc2\x9d\x24\xdc\x49\xc2\x9d\x24\xdc\x49\xc2\x9d\x24\xdc\x49\x92\x9d\x24\xd9\x49\x92\x9d\x24\xd9\x49\x92\x9d\x24\xd9\x49\x92\x9d\x24\xd9\x49\x92\x9d\x24\xd9\x49\x92\x9d\x24\xd3\x49\x32\x9d\x24\xd0\x49\x02\x9d\x24\xd0\x49\xd2\x9c\x24\xcd\x49\xd2\x9c\x9f\xef\xdc\xca\x41\xc4\x49\xb8\x93\x84\x3b\x49\xac\x93\x64\x3a\x49\xa0\x93\x04\x3a\x49\xa0\x93\x04\x3a\x49\xa0\x93\x04\x3a\x49\x9a\x93\xa4\x39\x49\x9a\x93\xa4\x39\x49\x9a\x93\xa4\x39\x49\x9a\x93\xa4\x39\x49\x9a\x93\xa4\x39\x49\x9a\x93\xa4\x39\x49\x9a\x93\xa4\x39\x49\x9a\x93\xa4\x39\x49\x9a\x93\xa4\x39\x49\x9a\x93\x44\x39\xff\x2b\x4e\xb2\xff\x69\xfe\x0f\x63\x92\xd4\x2a\x49\xad\x92\xd4\x2a\x49\xad\x92\xd4\x2a\x49\xad\x92\xc8\x2a\xbf\x22\xab\x7d\xad\x01\x84\x9a\x9b\x50\x73\x13\x6a\x6e\xf5\x1c\xf6\x75\x7f\x40\xb4\xb9\xaf\x55\xe1\x5a\x15\xd4\x79\xd8\x64\x9c\x9b\x8c\x73\x93\x71\x6e\x32\xce\x4d\xc6\xb9\xc9\x38\xf7\xb3\x36\xbc\xcf\xaf\xc7\xa8\x19\x73\xd9\xc7\x16\xeb\xca\xd6\x06\xb2\xcf\x4d\xf6\xb9\xc9\x3e\x37\xd9\xe7\x26\xe9\xdc\x24\x9d\x9b\xa4\x73\xab\x0b\xb1\x09\x3b\xb7\xba\x10\xfb\x59\x0f\x9e\xf5\x80\xd4\x73\x93\x7a\x6e\xf2\xce\xfd\xdc\x2b\x10\x76\x6e\xc2\xce\xfd\xdc\x25\x90\x77\xee\xf7\x2f\x80\x06\xf1\xe7\x26\xfb\xdc\x64\x9f\x9b\xec\x73\x13\x7c\x6e\x82\xcf\x4d\xf0\xb9\x55\x96\xd8\xc4\x9c\x9b\x98\x73\x13\x73\xee\x67\x55\x20\xe9\xdc\x24\x9d\x9b\x98\x73\x13\x73\x6e\x62\xce\x4d\xcc\xb9\xc9\x38\x37\x19\xe7\x26\xe3\xdc\x64\x9c\x9b\x8c\x73\x93\x71\x6e\xd2\xcd\x4d\xba\xb9\x89\x36\x37\xd1\xe6\x26\xda\xdc\xe4\x9a\x9b\x5c\x73\xbf\xf7\x6b\x9d\xfb\x9f\xe6\xff\x9c\x26\x37\x11\xee\x26\xc2\xdd\xaa\x89\x6c\x82\xca\x4d\x44\xb9\x55\x10\xd9\x44\x94\x9b\x88\x72\xab\x1d\xb2\x49\x29\x37\x29\xe5\x26\xa5\xdc\xcf\x8c\x27\xa8\xdc\x04\x95\x9b\xa0\x12\xd9\x4e\x64\x3b\x91\xed\x44\xb6\x13\xd9\x4e\x64\x3b\x91\xed\x44\xb6\x13\xd9\x4e\x64\xfb\xd7\x3b\x27\xc6\xc4\xbd\x13\xf7\x4e\xdc\x3b\x71\xef\xc4\xbd\x13\xf7\x4e\xdc\x3b\x71\xef\xc4\xbd\x13\xf7\x4e\xdc\x3b\x71\xef\xc4\xbd\x13\xeb\x4e\xac\x7b\xac\x91\x66\x3f\x41\xe5\x26\xa8\xdc\x04\x95\xbb\xcc\x7b\xb2\xca\x4d\x56\xb9\x49\x29\x77\xc5\xef\xdd\x5b\x55\x49\x36\x11\xe5\x26\xa2\xdc\x44\x94\x9b\x88\x72\x13\x51\x6e\xc2\xc9\x4d\x38\xb9\x49\x26\x37\xc9\xe4\x26\x99\xdc\xc4\x92\x9b\x58\x72\x13\x4b\xee\x32\xcb\x49\x26\x37\xc9\xe4\x26\x99\xdc\x64\x92\x9b\x40\x72\x93\x46\x6e\xd2\xc8\x4d\x1a\xb9\x49\x23\x37\x69\xe4\x56\xa1\x64\x13\xda\x6d\x42\xbb\x4d\x62\xb7\x49\xec\x36\x89\xdd\xae\xfa\x9f\x2b\xc1\xff\x35\x4d\x6e\x92\xc9\x4d\x32\xb9\x49\x26\x37\xc9\xe4\x26\x99\xdc\x24\x93\xb6\xab\xd3\xe6\x74\xda\x9c\x4e\x9b\xd3\x69\x73\x3a\x6d\x4e\xa7\xcd\xe9\xb4\x21\x9d\x36\xa4\xd3\x86\x74\xda\x90\x4e\x1b\xd2\x69\x43\x3a\x6d\x48\xa7\x0d\xe9\xb4\x21\x9d\x36\xa4\xd3\x86\x74\xda\x90\x4e\x1b\xd2\xbf\xde\xb9\x4a\x34\x9b\x7c\x72\x93\x4f\x6e\xf2\x49\x67\xf2\xc6\xba\xb2\x79\x4c\x44\xb9\x89\x28\x37\x11\xe5\x26\xa2\xdc\x44\x94\xbb\xcd\x6c\x52\xca\x4d\x4a\xb9\x49\x29\x37\x29\xe5\x26\xa5\xdc\xa4\x94\x5b\x0d\x9a\x4d\x2c\xb9\x89\x25\x37\xb1\xe4\x26\x96\xdc\x6d\x4e\xf7\xef\x03\x1b\x9b\xa0\x72\x13\x54\x6e\x82\xca\x4d\x50\xb9\x09\x2a\x37\x41\xe5\x6e\x4f\xff\x64\x95\x9b\xac\x72\x93\x55\x6e\xb2\xca\x4d\x56\xb9\xc9\x2a\x37\x59\xe5\x26\xa5\xdc\xa4\x94\x9b\x88\x72\x13\x51\x6e\xc2\xc9\x4d\x38\xb9\x09\x27\x77\x5b\x03\xc8\x27\xb7\xfa\x35\x9b\xd0\x6e\x13\xd7\x6d\x82\xba\x4d\x50\xb7\x55\xab\xd9\x64\x75\x9b\xac\x6e\xab\xd0\x1c\xba\x8a\x85\xae\x62\xa1\x93\x58\xe8\x1e\x16\xba\x87\x85\xee\x61\xa1\x7b\x58\xe8\x12\x16\xba\x84\x85\x2e\x61\xa1\x4b\x58\xe8\x12\x16\xda\xfc\x87\x3e\x60\xa1\x0f\x58\xe8\x00\x16\x3a\x80\x85\x0e\x60\xa1\x03\x58\xe8\x00\x16\xba\x7e\x85\x1e\x5f\xa1\x7f\x57\xe8\xdf\x15\x3a\x77\xc5\x3c\xa1\x8f\x35\xb2\x8c\x29\x3f\x6f\xaf\xd5\x33\x5e\xd7\xac\xd0\x35\x2b\xb4\xc3\x0f\xbd\xb0\x42\xff\xab\xd0\x8d\x2a\x74\xa3\x0a\x1d\xa8\x42\xd7\xa9\xd0\x75\x2a\xf4\x9b\x0a\x1d\xa5\x42\x47\xa9\xd0\x4b\x2a\xf4\x92\x0a\xbd\xa4\x42\x2f\xa9\xd0\x3f\x2a\xf4\x8f\x0a\xfd\xa3\x42\xff\xa8\xd0\x2d\x2a\xf4\x86\x0a\x1d\x9f\x42\xc7\xa7\xd0\xeb\x29\xf4\x7a\x0a\xbd\x9e\x42\x1f\xa7\xd0\xc7\x29\xf4\x71\x0a\x1d\x9c\x42\xd7\xa6\xd0\xb5\x29\x74\x64\x0a\x1d\x99\x42\x2f\xa6\xd0\x8b\x29\xf4\x62\x0a\x9d\x97\x42\xb7\xa5\xd0\x5b\x29\xf4\x53\x0a\xdd\x90\x42\x1f\xa4\xd0\x88\x3d\x34\x62\x0f\xdd\x8d\x42\x47\xa3\xd0\xd1\x28\xf4\x32\x0a\x5d\x8c\x42\xe7\xa2\xd0\xb9\x28\x34\x5f\x0f\x5d\x89\x42\x3f\xa2\xd0\x8f\x28\x74\x1c\x0a\x1d\x87\x42\x97\xa1\xd0\x53\x28\xbe\x9b\x9a\xfd\x8f\x95\x81\xee\x17\xfa\xbb\xaa\xcc\xfd\xc2\x51\xe8\xe8\x10\x61\x1e\x22\xcc\x43\x84\x79\x88\x30\x0f\x11\xe6\x21\xc2\x3c\xa4\x95\x87\xa8\xf2\x90\x53\x1e\x72\xca\x43\x4e\x79\xc8\x29\x0f\x39\xe5\x21\xa7\x3c\x84\x94\x87\x90\xf2\x10\x52\x1e\x12\xca\x43\x42\x79\x3e\xbf\x0f\x72\x1f\xd2\xca\x43\x5a\x79\x48\x2b\x0f\x69\xe5\x51\x3c\xe9\x10\x58\x1e\x02\xcb\x43\x36\x79\x08\x26\x0f\xc1\xe4\x51\x2a\xe9\x90\x4d\x1e\xb2\xc9\x43\x36\x79\xc8\x26\x0f\xd9\xe4\x21\x9b\x3c\x64\x93\x87\x6c\xf2\x90\x4d\x1e\xb2\xc9\xa3\x60\xd2\x51\x30\xe9\x90\x50\x1e\x12\xca\x33\xf3\xe2\xe7\x3b\xbf\xae\x7c\x5d\xf9\xba\xf2\x75\xe5\xeb\xca\xd7\x95\xaf\x2b\x5f\x57\xbe\xae\xfc\xbc\xab\xc7\xf7\xf1\x7d\x7c\x1f\xdf\xc7\xf7\x19\xff\x8c\x2f\x23\xcb\xc8\x32\xb2\x8c\x29\xd7\x2f\xd7\x2f\xe3\xcb\xf8\x76\xfd\xe6\xd5\xae\xd9\x46\xb6\x31\xf2\x61\xc9\xff\xf3\x8f\x5d\xec\x61\x27\xbb\xfe\x7f\xec\xdd\x41\x92\x24\x2d\x0e\xed\xfb\x0d\xe5\x00\x90\x04\xf8\x82\x7a\xff\x5b\x78\xa6\x1f\x79\xed\x0d\xab\x07\xb7\xad\x6f\x7f\x56\x13\xac\x2c\xcb\x23\xc2\x33\xd2\x01\x21\xfd\x75\x0e\xbb\xfd\xe4\x25\x95\xfc\xa3\x92\x4f\x54\xb2\xc9\xcf\xb0\x2e\xb1\xc6\xcf\xb0\x16\x85\x79\xcd\x0f\x2a\x99\xdc\x27\xf7\xa7\xe4\xfb\x94\x7c\x9f\x92\x69\x7d\x86\x27\x9c\x9b\x53\xf2\x6b\x4a\x4e\x4d\xc9\x60\x3e\x19\xcc\x27\x17\xa6\xe4\xbf\x94\xfc\x97\x92\xff\x52\xf2\x5f\x4a\x6e\x4b\xc9\x3c\x3e\x79\x2e\x25\xb7\xa5\xe4\xb6\x94\xdc\x96\x92\xf5\x7b\x72\x55\x4a\x4e\x4a\xc9\x3d\x29\x59\xb0\x27\x97\xa4\x64\xb2\x9e\x7c\x8d\x92\xd9\x79\x32\x3b\xcf\x34\xcb\xb8\x15\x25\xc3\xf2\xcc\x77\x57\x5f\xff\x2e\xac\xc7\xb3\x7c\x3a\x07\xa1\xe4\xe1\x93\x3c\x7c\x92\x6f\x4f\x72\xec\x49\x8e\x3d\xc9\xb1\x27\x59\x80\x27\x97\x9e\xe4\xcf\x93\xfc\x79\x92\xb1\x77\x72\xc5\x49\xae\x38\xc9\x09\x27\x79\xe0\x24\x0f\x9c\xe4\x7e\x93\x8c\xb1\x93\xd7\x4d\x72\xb9\x49\x2e\x37\xc9\xe5\x26\x79\xda\x24\xeb\xeb\xe4\x69\x93\x3c\x6d\x72\xfb\x1e\xf8\xd8\x24\x07\x9b\x64\x59\x9d\xfc\x6a\x92\x53\x4d\x6e\xf7\xcc\xaf\x26\xb9\xd3\x24\x83\xea\x64\x50\x9d\x7c\x69\x92\x0b\x4d\xca\x80\x05\xb2\x32\x90\x95\x81\xac\x0c\xbc\x64\xe0\x25\x03\x29\x19\x48\xc9\x40\x4a\x06\x46\x32\x30\x92\x81\x91\x0c\x8c\x64\x60\x24\x03\x23\x19\x18\xc9\x40\x47\x06\x3a\x32\xd0\x91\x41\xc3\x3d\xd0\x91\x81\x8e\x0c\x74\x64\xa0\x23\x03\x1d\x19\x84\xbe\x62\xfe\xd1\xd7\xa5\xaf\xf1\x6e\x56\x12\x5c\x64\xe0\x22\x03\x17\x19\xb8\xc8\xc0\x45\x06\x2e\x32\x70\x91\x81\x8b\x0c\x5c\x64\xe0\x22\x03\x17\x19\xb8\xc8\xc0\x45\x06\x2e\x32\x70\x91\x81\x8b\x8c\x69\xb5\xc1\x45\x06\x2e\x32\x70\x91\x81\x8b\x0c\x5c\x64\xe0\x22\xa3\x77\xba\x3f\xde\xb9\x15\x06\x2f\x19\xf3\xfd\x15\xac\x30\x68\xba\x40\xd3\x05\x8e\x2e\x70\x74\x81\xa3\x0b\x1c\x5d\xe0\xe8\x02\x47\x17\x38\xba\xc0\xd1\x05\x8e\x2e\x70\x74\x81\xa3\x0b\x5a\xf0\x81\xa6\x0b\x34\x5d\xa0\xe9\x30\xd0\x85\x81\x2e\x0c\x74\x61\xa0\x7b\xf4\x2a\xab\x0d\x09\x31\x1c\x76\xe1\xb0\x0b\xc8\x5c\x40\xe6\x7e\x72\xde\xe8\xa9\xb3\x0e\x70\x28\x4a\x76\xe3\xc9\x6e\x3c\x39\x0e\x25\x97\x9e\x64\xb9\x9d\x7c\x78\xf2\x78\x62\xb9\xee\x24\x3b\xed\xe4\xae\x93\x7c\x75\xf2\x78\x3e\xb9\xeb\x24\x0b\xed\xe4\x9f\x93\x3c\x73\x92\x25\x76\xf2\xb7\x49\xfe\x36\xc9\xfa\x3a\x79\xd7\x24\xbf\x9a\xe4\x3f\x93\xd7\xfc\xe2\x36\x93\x8c\xa8\x93\xcd\x73\xb2\x79\x4e\xae\x2f\xc9\xf5\x25\xf9\xbd\x24\x17\x97\xe4\xe2\x92\xfc\x5b\x92\x73\x4b\x72\x6e\x49\xce\x2d\xc9\xa1\x25\x39\xb4\x24\xf7\x95\x64\x8d\x9c\x9c\x55\x92\xf9\x71\x32\x3f\x4e\x2e\x28\xc9\x90\x38\xd9\x0f\x27\x57\x93\x64\x21\x9c\x3c\x4c\x92\x6f\x49\x32\x03\x4e\x5e\x1f\xc9\xeb\x23\xf9\x7b\x24\x4f\x8f\x64\xa9\x5b\xff\x8a\x9f\x2c\x96\xba\xc5\x4c\xb7\xd8\xe8\x16\x1b\xdd\x62\x94\x5b\xec\x6f\x4b\x98\x59\xc2\xcc\x12\x5a\x96\xd0\xb2\x7a\x53\xed\xf1\xf6\x58\x5e\xd5\xcb\x55\x09\x15\x4b\x78\x58\xbd\x71\xf5\xe8\x7f\xaf\xeb\xaf\x4f\xe9\x2f\xb5\x84\x7b\xc5\xee\xb4\x58\x9c\x16\x73\xd3\x62\x6b\x5a\x0c\x4d\x8b\x71\x69\x31\x2e\x2d\xc6\xa5\xc5\xb2\xb4\x7e\x27\x99\x2d\x0b\x62\x09\xf8\x2f\xc0\x7f\xc1\xe9\x0b\x4e\x5f\x70\xfa\x82\xd3\x17\x9c\xbe\x74\x27\x94\xee\x84\xd2\x9d\x50\x1a\x13\x4a\xeb\x41\x69\x3d\x28\xad\x07\xa5\xf5\xa0\xb4\x1e\x94\xd6\x83\xd2\x7a\x50\xda\x0d\x4a\x0b\x43\x69\x5e\x28\xcd\x0b\xa5\xa1\xa0\x70\xf6\x7f\x9a\xac\xb0\x4a\x14\x7e\xa1\xf0\x0b\xb5\x5f\xa8\xfd\x42\xed\x97\x36\x84\xd2\x80\x50\x5a\x0f\x4a\xeb\x41\x69\x3d\x28\xad\x07\xa5\xb9\xa0\x34\x17\x94\xb6\x82\xd2\x56\x50\xda\x0a\x4a\xb7\x40\x91\x40\x29\x4c\x7f\xe9\x10\x28\x34\x7f\x51\x49\x29\xad\x10\x85\xf5\x2f\x0d\x14\x7f\xbc\x73\x0b\x12\x2b\x81\xc0\xe6\x05\x36\x4f\x93\x45\xe9\x22\xe8\xd1\x7b\x5a\x72\x28\xd9\x05\x5a\x4f\x97\x42\x8f\x5e\x65\xc9\xc1\xec\xe9\x4f\x28\x9d\x06\xa5\x1b\xa1\x47\xaf\xb2\xe4\xd0\xb6\x0b\xda\x76\x81\xdf\x0b\xda\x76\xb1\x2c\x39\x14\xee\x82\xc2\x5d\xe0\xfa\x02\xd7\x17\xb8\xbe\xc0\xf5\x05\xae\x2f\x04\xc2\xc5\xce\xb6\x84\xff\xc5\x1a\xb6\xd8\xc1\x96\xa3\x40\xcd\xf7\x64\xf6\x66\x5e\xcc\x5c\x4b\xf8\x5f\x82\xfd\x62\xd1\x5a\x2c\x5a\x6b\x99\x23\x6c\x59\xcb\x21\xa0\x1c\x02\x8a\x2d\x6b\x31\x5e\x2d\xe1\x7f\xb1\x5c\x2d\x87\x80\x62\xb9\x5a\x2c\x57\x8b\xe5\x6a\x2d\x33\x8b\xd9\x6a\x39\x1c\x14\xb3\xd5\x5a\x9e\xf9\x65\x96\x31\x46\x2d\xc6\xa8\xc5\x12\xb5\x1c\x1a\xca\xa1\xa1\x1c\x14\x8a\xf5\x69\x39\x28\x94\x23\x42\x31\x25\xa5\x13\x92\xb4\x35\x92\xb6\x46\x52\xd5\x48\xaa\x1a\x49\x43\x23\xa9\x67\x24\xf5\x8c\xa4\x92\x91\x54\x32\x92\x3e\x46\xd2\x18\x4b\xfa\x18\x49\x01\x23\x29\x60\x24\x05\x8c\xa4\x7a\x91\x34\x2e\x92\x72\x45\x52\xae\x48\x9a\x15\x49\xb3\x22\x69\x56\x74\xf4\xe3\x9a\xe3\xe7\xee\x2d\x7c\xf3\xec\x36\x8b\xdd\x66\x09\xf1\x4a\x88\x57\x42\xbc\x12\xdc\x55\xfa\xfe\x05\x68\xc5\xde\xb2\xd2\x7d\xa6\x7b\x63\x6c\x59\x2c\x2d\x8b\xa5\x65\x31\xb3\xac\xf4\x8d\x31\xb3\x2c\x66\x96\xc5\xcc\xb2\xd2\x7d\xa6\x7b\x13\xd6\x95\x30\xad\xca\xb7\x54\xbe\x19\x76\x8c\x05\x50\x08\x87\xa7\x40\x84\x06\x3d\xc4\xc0\x85\x06\x2e\x34\x70\xa1\x41\x03\x31\x30\x9f\x81\xf6\x0c\xb4\x67\xa0\x3d\x83\xee\x61\x60\x3e\x83\xee\x61\x30\xa1\x08\x26\x14\x81\x02\x0d\x14\x68\x20\x3f\x83\xe5\x44\x60\x3e\x03\xf3\x19\x68\xd8\x40\x7e\x06\xf5\xc3\x88\x7f\xe3\xd8\x84\x0e\x0d\x74\x68\xa0\x43\x03\x17\x1a\xb8\xd0\xc0\x85\x06\x2e\x34\xa8\x25\x06\xf2\x33\x90\x9f\xc1\x84\x22\xf0\x9f\x81\xff\x0c\xe4\x67\x20\x3f\x03\xf9\x19\xc8\xcf\x40\x7e\x06\xf2\x33\x90\x9f\x81\xfc\x0c\xe4\x67\x20\x3f\x03\xf9\x19\x68\xcf\xe8\x90\xff\x8f\x77\x6e\x6d\x41\x81\x06\x0a\x34\xf0\x9f\x81\xff\x0c\xfc\x67\xe0\x3f\x03\xff\x19\xf8\xcf\xa0\xae\x18\x50\xbe\x80\xf2\x05\x45\xc5\x00\xf4\x05\xa0\x2f\x68\x29\x06\xac\x2f\x60\x7d\x01\xeb\x0b\x5a\x8a\x01\xee\x0b\x70\x5f\x80\xfb\x02\xdc\x17\xe0\xbe\x00\xf7\x05\xb8\x2f\xe8\x2a\x06\x83\x89\x00\xfa\x05\xe5\xc4\x78\xcf\x30\xf3\xce\x12\xe0\x97\x00\xbf\xca\xf3\x29\xcc\x2f\x46\x9b\xc5\x62\xb3\xca\x7c\x61\xa8\x59\x75\xfc\xc4\x4c\x61\xa5\x59\xf5\x9e\x4f\xab\x13\xb3\xcc\x62\x93\x59\x8e\x02\x25\xfc\x2f\x41\x7d\x09\xe1\x4b\x18\x5e\xdb\x73\xbe\x3d\xe7\x6c\x1d\x8b\xad\x63\x09\xa0\x8a\x65\x63\x6d\xf3\x8e\x05\x63\xb1\x60\xac\x23\x06\x60\xb5\x58\xa7\xc3\x9c\x3a\xe6\x05\x7b\xc5\x62\xaf\x58\xec\x15\x8b\x81\x62\x31\x50\x2c\xd6\x89\x25\x1c\x2b\xe1\x58\xb1\x42\x2c\xe1\x58\x1d\xdf\x80\xa0\xac\x98\x0e\x16\xd3\xc1\x3a\xee\x4a\xf0\x55\x2c\x06\x8b\x95\x60\xb1\x12\x2c\x26\x82\x75\xfc\xbe\xec\x03\x4b\x20\x56\x8c\x03\x8b\x71\x60\x5d\x77\xce\x32\xb0\x58\x06\x16\xcb\xc0\x62\x19\x58\x42\xb6\x62\x13\x58\x6c\x02\x4b\xe0\x56\x0c\x02\x4b\xf8\x56\x6c\x02\x8b\x4d\x60\xdd\xd9\x9f\xc5\x20\xb0\x18\x04\x16\x83\xc0\xba\x7e\xd3\x6b\x35\x60\xfb\x57\x6c\xff\x8a\xe1\x5f\x09\x00\x4b\x00\x58\x82\xbe\x62\x6b\x57\x6c\xed\xea\xb3\x53\x7c\x3e\xfd\xf3\xb9\x9f\xcf\x65\x6e\x57\xcc\xed\x8a\x95\x5d\x7d\x6f\x5e\x5b\x55\xe0\xa2\x01\x17\x0d\xb8\x68\xc0\x45\x03\x2e\x1a\x70\xd1\x60\x3b\x12\xf4\x37\x03\x3a\x1a\xd0\xd1\xa0\xbf\x19\xf4\x37\x03\x22\x1a\x10\xd1\x00\x87\x06\x38\x34\x60\xa1\x01\x0b\x0d\x58\x68\xd0\xdf\x0c\x70\x68\xd0\xdf\x0c\x88\x68\x30\x1f\x89\x5c\x7f\xec\x58\x0d\x18\x69\x40\x47\x83\xfe\x66\x80\x46\x03\x34\x1a\x94\x37\x03\x3a\x1a\xd0\xd1\x80\x8e\x06\xb5\xcd\x00\x84\x06\x14\x34\xa0\xa0\x01\x05\x0d\xf8\x67\xc0\x3f\x23\xad\x27\x20\xd0\x00\x81\x06\x08\x34\x80\x9f\x01\xf6\x0c\xb0\x67\xd0\xd9\x0c\xc8\x67\xe4\x1f\xed\x30\xfb\x1a\x9f\x65\xf5\x00\x81\x06\xfc\x33\xe0\x9f\x01\xff\x0c\x0a\x8d\x01\xe6\x0b\x30\x5f\x80\xf9\x82\x4e\x63\x40\xfa\x02\xd2\x17\x30\xbe\x00\xf0\x05\x80\x2f\x28\x31\x06\x8c\x2f\x60\x7c\x01\xe3\x0b\x18\x5f\xc0\xf8\x02\xc6\x17\x30\xbe\x80\xf1\x05\x8c\x2f\x60\x7c\x41\x6b\x31\x68\x2d\x06\xa4\x2f\xa8\x3c\x45\xbd\x27\x4d\x74\xf1\x99\x89\x8c\x0f\x8b\xf1\x61\x39\x1c\x14\xcb\xc3\xfa\x3c\xb7\x0e\x0a\xf5\xbd\xa7\xd4\xce\xc8\xc2\xb0\x1c\x17\xea\x13\x4b\xb0\x2d\x2c\x26\x85\xc5\x74\xb0\x1c\x23\xca\x31\xa2\x1c\x20\x8a\x05\xe0\x76\x3a\xd8\xa3\xd7\x84\x3d\xfa\x19\xde\xa3\xef\x64\x8f\x9e\x2f\x7b\x84\xff\xed\x59\xb3\x25\xa7\xf7\x08\xff\xdb\x11\xc5\x76\x82\xd8\xa3\x67\xd0\x1e\x3d\x77\xb6\x73\xc4\x96\x90\xde\x4e\x13\xdb\xa9\x61\x3b\x29\xec\xd9\xb3\x7b\xcf\xfe\x7d\xf7\xec\xd9\xb4\x25\x8c\xf7\xf4\xe9\xb3\xe7\xec\x76\x6a\xd8\x12\xc3\x5b\x62\x78\x4b\x09\xef\xb9\xbd\xca\xbb\xf5\x71\xb6\xc7\xbe\x07\xb1\xdf\x16\xf5\x6d\xd1\xdd\x16\xc5\x6d\xd1\xd7\x16\x77\xed\xe5\xae\x44\x5f\x9b\xe5\xfc\x96\x9a\xdd\x62\xad\x2d\xca\xda\x2c\xe1\xb7\x58\x6b\xaf\xf7\x6e\xbd\x32\x6f\x69\xb3\x2d\x6d\xb6\xc3\xfd\xb3\x66\xdf\xac\xd9\x37\x53\xf6\x2d\x79\xb6\x63\xfa\x79\xaf\x06\x5b\x84\xb6\x45\x65\x5b\x4c\xb5\x25\xc9\x76\xf8\xbd\x18\xa2\x6f\x51\xd6\x96\x24\xdb\x71\xfc\xe4\x94\xd1\xf5\x7e\x47\xf6\xe7\x5b\x7c\xb5\xa5\xd0\x76\xb8\xb7\xb7\x67\x51\xe9\x0c\x48\x68\x40\x42\x83\x4a\x67\x80\x3e\x03\xf4\x19\xa0\xcf\xa0\xd2\x19\xa0\xcf\x00\x7d\x06\x7d\xce\x80\x7e\x06\xf4\x33\xa0\x9f\x41\x9f\x33\x00\xa0\x01\x00\x0d\x00\x68\x00\x40\x03\x00\x1a\x00\xd0\x00\x80\x06\x00\x34\x5e\x7c\x05\x00\x8d\xfa\x23\xc9\xdf\xd7\x78\x67\x2b\x09\x48\x34\x40\xa2\x01\x12\x0d\x90\x68\x68\x25\x0c\x18\x68\xc0\x40\x03\x06\x1a\x30\xd0\x80\x81\x06\x0c\x34\x60\xa0\x01\x03\x0d\x18\x68\x40\x3f\x03\xfa\x19\xa0\xcf\x00\x7d\x06\xe8\x33\xe0\x9e\x01\xf4\x0c\xa0\x67\x00\x3d\xa3\xfe\x8d\x75\x06\x06\x1a\xd0\xcf\x80\x7b\x06\xbd\xc7\xa0\xf7\x18\xf0\xc0\x80\x07\x06\x3c\x30\x80\x81\x01\x0c\x0c\x48\x60\x40\x02\x03\x12\x18\xd4\x1d\x03\x18\x18\xd4\x1d\xa3\xde\x5f\xd6\x3a\x03\x12\x0c\x90\x60\x00\x03\x83\xed\x4e\x40\x02\x03\x12\x18\x90\xc0\x80\x04\x06\x24\x30\x20\x81\x01\xf7\x0b\xb8\x5f\xc0\xfd\x42\x12\x71\x8b\xc6\x77\x7a\x9e\xa5\x5d\xb7\xc8\x7c\x4b\xbb\x6e\x09\xd7\x2d\xe1\xba\xf3\x5d\xef\xd9\x66\x66\xbf\xa5\x57\x77\xf6\x1a\xb5\x19\xd5\x6f\x91\xfc\x16\xc9\x6f\x09\xd4\x2d\x81\xba\xcb\xa7\x30\x68\xdf\xac\xd9\x37\x6b\xf6\x2d\x99\xba\xcb\x3b\xb3\x66\xdf\x22\xf6\xcd\x9a\x7d\xb3\x60\xdf\xe2\xf6\xcd\x88\x7d\x97\x4f\x14\xc3\x6f\x09\xd7\x5d\xd6\x1c\x69\xd7\x2d\x2a\xdb\xa2\xb2\x2d\x1e\xdb\xa2\xaf\x2d\x81\xba\x25\x50\xf7\xf6\x89\x4c\xc1\x37\x7b\xef\x2d\x2d\xba\x59\x74\x6f\x91\xd5\x16\x41\xed\xed\xfe\x45\x38\x5b\xda\x69\x4b\x38\x6d\xe6\xcd\x9b\x3d\xf3\x96\x6a\xda\x22\x9f\x2d\x56\xd9\x22\x8a\x7d\xbd\xa7\xb8\x62\x4b\x20\xed\xeb\x1d\x58\x05\xef\x6b\xce\x32\xdc\xdd\xd2\x42\x9b\xc9\xee\x66\xb2\xbb\x59\xea\xee\xcf\xf7\xcf\x52\x77\x8b\x2e\xf6\xe7\x3b\x17\x57\x6c\x89\xa2\xfd\xf9\x9e\xad\xff\xfb\xf3\x29\x76\x81\xfd\x59\x55\x3e\x2b\x1b\xdb\xda\xcd\xb0\x76\x5b\xf9\x37\xbb\xd9\xcd\x62\x76\x33\x94\xdd\xd2\x48\xfb\x73\x3f\x8a\x90\xdb\x8e\xb0\xd9\xc4\x6e\x36\xb1\x9b\xed\xeb\x7e\x05\x25\x70\x68\x80\x43\x83\xfe\x67\x40\x44\x03\x22\x1a\x10\xd1\x80\x88\x06\x44\x34\x20\xa2\x01\x11\x0d\x88\x68\x40\x44\x03\x22\x1a\x10\xd1\xa0\xfc\x19\x40\xd1\x00\x8a\x06\x6d\xcf\x80\x8b\x06\x5c\x34\xe0\xa2\x01\x17\x0d\xb8\x68\x50\xf5\x0c\x28\x68\xec\x3f\x43\xe4\x01\x14\x0d\x6a\x9f\x41\xed\x33\x40\xa3\x41\xed\x33\xa0\xa3\xc1\x0a\x2a\x00\xa4\x01\x20\x0d\x00\x69\x00\x48\x03\x40\x1a\x00\xd2\xd8\x72\x2c\x30\xd2\x80\x91\x06\x8c\x34\x60\xa4\x01\x23\x0d\x18\x69\xc0\x48\x03\x3a\x1a\xd0\xd1\x00\x8d\x06\x68\x34\xf6\x1f\xd9\xeb\xbe\xc6\x3b\x58\x61\xc0\xa4\xb1\xad\x30\x8c\xa2\x02\x7c\x18\xe0\xc3\x00\x1c\xc6\x76\xea\x81\x1a\x06\xd4\x30\x28\x43\x06\xe0\x30\xa0\x86\x01\x32\x0c\x90\x61\x80\x0c\x03\x5e\x18\xfb\xad\x2d\xfe\xd6\xf0\xc2\x80\x17\x06\xbc\x30\xe0\x85\x01\x2f\x0c\x96\x52\x01\x20\x0c\x00\x61\x00\x08\x03\x40\x18\x00\xc2\x38\xbd\x86\x9c\x7f\xc5\x4f\x1e\x89\xc9\x33\xfa\x01\x3f\xa3\x27\xe5\x19\xfd\x68\x9f\xd1\xd3\xfd\x8c\xde\x2a\x8f\x00\xe4\x08\x40\x8e\xa0\xe3\x8c\xe5\xe7\xfd\xc8\x9f\x91\xae\x4c\x3f\xb9\xde\xa7\xb7\xc1\xa3\x26\x7d\x54\xa3\x8f\xfa\xd6\x99\x3e\x6b\xf6\x92\x76\x04\x1a\x67\xf6\x94\x3a\xd3\xed\x08\x37\xce\x9c\xfe\xd7\x3d\x08\x3d\x8e\x84\xe5\x99\x3e\x71\x86\x2b\xc3\x35\xe9\x7f\xd3\x4f\xd2\xbb\xa5\x2b\xcb\x6b\x7b\x33\x3f\xb3\xbc\x6a\xbb\x72\xbb\x72\xbb\xe6\xf8\x2c\xf7\x39\xaf\x2b\x3f\xaf\xea\xa5\xf1\xa8\x46\x1f\x15\xe8\x23\xf9\x74\x96\xbb\x92\x82\x3a\x92\x4f\x47\xda\xe9\x48\x35\x1d\x35\xe6\x23\x48\x39\xc2\x93\xa3\x36\x7c\x04\x29\x67\x79\xe7\xf5\xde\xf9\xeb\xfb\x11\xaa\x1c\xe1\xc9\x51\xdb\x3b\xc2\x93\x13\xbd\xa0\x9e\xe8\xe0\xee\xa8\xf0\x1d\x29\xa2\x23\x45\x74\x24\x87\x8e\xda\xde\x91\x0a\x3a\x7d\xe8\xef\xd1\xab\xfc\xbe\x02\x96\x23\x18\x39\x92\x3d\xc7\xb6\x70\xd2\xdf\x4e\x1d\xee\xd8\x22\x8e\xa4\xce\xe9\xc3\x41\x9e\xf4\x1d\x4a\xea\x1c\x49\x9d\xa3\x1a\x77\xd2\x37\x29\x85\x73\x5e\x98\x7f\x04\x2f\xc8\xd3\x40\x9e\x06\xf2\x34\x8e\x25\x07\x7f\x1a\xf8\xd3\xc0\x9f\x06\xfe\x34\xf0\xa7\x81\x3f\x0d\xfc\x69\xe0\x4f\x03\x7f\x1a\xf8\xd3\x20\x35\x1a\xa4\x46\x03\x8b\x1a\xa4\x46\x03\x91\x1a\x04\x47\x03\x97\x1a\xb8\xd4\xc0\xa5\x06\x2e\x35\xfe\x0d\x2e\x35\x70\xa9\x41\x94\x34\xd0\xa9\x81\x4e\x0d\x74\x6a\x10\x25\x0d\x8c\x6a\x60\x54\x03\xa3\x1a\x18\xd5\xc0\xa8\x06\x46\x35\xd0\xa9\x81\x4e\x0d\x74\x6a\x10\x1c\x0d\x8c\x6a\x60\x54\x03\xa3\x1a\x18\xd5\x20\x38\x1a\x48\xd5\x40\xaa\x06\x52\x35\xce\xfb\x3e\xff\x8d\x70\x86\x10\x69\xe0\x58\x03\xc7\x1a\x24\x48\x03\xcd\x1a\x68\xd6\x40\xb3\x06\x9a\x35\xd0\xac\x41\x7c\x34\x70\x8f\x81\x7b\x0c\xdc\x63\xe0\x1e\x83\x90\x64\x10\x92\x0c\x0c\x64\x10\x92\x0c\x24\x64\xf0\x52\x0b\x3c\x64\xe0\x21\x03\x0f\x19\x78\xc8\xc0\x43\x06\x1e\x32\xf0\x90\x81\x87\x0c\x3c\x64\xe0\x21\x03\x0f\x19\xd7\x73\xde\xc7\xbe\x1e\x3d\x57\xc7\x13\x75\xfc\xc4\x4c\x51\xdf\x3d\xf9\x9e\xd5\xde\xdc\x4e\x1f\xda\x7a\x74\x4d\x6f\x71\xa7\xbc\x4f\x1f\xd4\xf2\x08\x34\x4e\x59\x01\xd4\x7a\x8f\xa0\xe3\x48\xf9\x9c\xf2\xf4\x76\x80\xd9\xa3\x6b\xcc\x7d\x49\xa0\xa3\xbe\x7b\x3a\x84\xec\xf1\x18\xbd\xca\xbd\x75\xc0\xd8\xa3\xff\x75\x87\xd2\x42\xa7\xae\xd7\x5e\x9f\x6b\xc5\x28\x2b\x86\x44\xd1\x91\x28\x3a\x6a\xc6\x47\xb5\xf8\x6c\xeb\xc6\xb6\xb2\x75\xa0\xd7\xe3\x35\xf6\x95\x1d\xee\xf5\xe8\x4a\x2b\x89\xaa\xf0\x51\x03\x3e\x12\x48\x47\x02\xe9\xa8\xc6\x9d\xed\x5b\xda\x3e\x7d\xfb\xc4\xed\x13\x7b\xbb\xe8\xd1\x95\x9f\x77\xb0\xb6\x48\x32\x1d\x49\xa6\x73\xdc\xc9\xf1\xe9\xd2\x4b\xe7\xf8\xc4\x63\x55\x97\x6a\x3a\x52\x4d\x47\x92\xe9\x48\x32\x1d\x35\xbf\xa3\xce\x77\x8e\xb5\x5d\xc0\x75\x04\x5c\x47\x9d\xef\x08\xb8\x8e\x34\xd2\x91\x46\x3a\xd2\x48\x47\x3d\xef\xa8\xe7\x1d\xc9\xa4\x23\x75\x74\xde\x93\x20\x81\x74\xa4\x8e\x8e\x44\xd1\x91\x1c\x3a\x02\xb4\x73\xfd\x4d\x89\x5f\x06\x86\x36\x30\xb4\x81\x9b\x0d\xdc\x6c\x5c\x9b\x18\x26\x36\x30\xb1\x81\x86\x0d\x34\x6c\xa0\x61\x03\x0d\x1b\x68\xd8\x40\xc3\x06\x1a\x36\x10\xb0\x41\x70\x34\x10\xb0\x81\x80\x0d\x52\xa3\x81\x83\x0d\x1c\x6c\x90\x1a\x0d\x22\xa3\x81\x89\x0d\x4c\x6c\xdc\x3f\x0b\x8a\x05\x62\x36\x10\xb3\x81\x98\x0d\x42\xa4\x41\x88\x34\xd0\xb3\x41\x88\x34\xae\x35\x87\x1c\x69\x60\x65\x03\x2b\x1b\x58\xd9\xc0\xca\x06\x56\x36\xb0\xb2\x41\x6a\x34\x10\xb3\x81\x98\x0d\x52\xa3\x81\x9b\x0d\xdc\x6c\xe0\x66\x03\x37\x1b\xb8\xd9\xc0\xcd\xc6\xfd\xb3\xf5\x55\xa0\x6a\x03\x55\x1b\xa8\xda\xf8\xfd\x5b\x08\x8b\x10\xb6\x41\x88\x34\x70\xb6\x41\x88\x34\xd0\xb6\x81\xb6\x0d\xb4\x6d\xa0\x6d\x03\x6d\x1b\x68\xdb\x20\x71\x19\x24\x2e\x03\x79\x1b\xc8\xdb\x20\x71\x19\xf8\xdb\xc0\xdf\x06\xfe\x36\x30\x9a\x81\xd1\x0c\x74\x66\xa0\x33\x03\x9d\x19\xa4\x2c\x03\xa3\x19\xa4\x2c\xe3\x7b\xcf\x98\xb9\x73\xcd\x9a\xeb\x99\xbc\x9e\x49\x41\xfd\x11\xc8\x9f\x77\xa5\x70\xfe\x7c\xf6\x74\xc9\xc2\x23\x84\x3f\xdf\x7a\xff\x76\xa5\x19\x21\xcd\x73\x84\xf6\x47\x68\x7f\xa4\x7c\x8e\x34\xcf\xf9\xec\x9b\x5f\xfa\xb9\x18\x40\x55\xf8\x7c\xe6\x88\xc0\xff\x48\xf9\x1c\xe1\xff\xf9\xac\x33\xdf\xf1\xbf\x3d\xaf\xaf\x88\xeb\x2a\x02\x5f\x71\xd7\x95\xc2\xb9\xca\xbf\x57\xe1\xf7\x4a\xd5\x5c\xbc\xe0\x45\x04\x5e\x25\xdf\xab\xe4\x7b\xc7\x7b\x9f\x1b\x3f\x79\xc5\x4b\x57\xaa\xe6\x2a\xf9\xde\xd9\xb1\xc4\x15\x41\x5d\x25\xdf\x3b\xbd\xff\x0c\x3f\xef\xdd\xff\x8a\xa3\xae\x38\xea\x2a\xf9\x5e\x44\xe0\x15\x4d\x5d\x45\xbc\x3b\xcb\x35\xe5\x1a\xf7\x33\xdd\x8f\x58\xeb\x8a\xb5\xee\x2c\xd7\x97\xeb\xdd\x27\x46\xf0\xce\xed\x7f\xb7\x9f\x1f\xef\x7f\xbc\xea\xf8\xb9\xfb\x57\x18\xbc\x88\xc0\x8b\x08\xbc\x48\x85\x2b\x2a\xbb\xa2\xb2\xab\x3c\x78\x45\x65\x77\xf5\x1a\x72\x25\x93\xf8\xef\xe4\xc5\xf3\x5d\xa9\xa3\xab\x4c\x77\x97\xcf\x55\xa6\xbb\xeb\xf8\x5f\x9f\x8b\xe1\xbb\xaf\xe0\xc9\x3d\x32\x90\xbe\x81\xf4\x0d\x74\x6f\xa0\x7b\xe3\x13\x38\x63\x7c\x03\xe3\x1b\x18\xdf\xc0\xf8\x06\xc6\x37\x30\xbe\x81\xee\x0d\x74\x6f\xa0\x7b\x03\xd7\x1b\x24\x4f\x03\xb9\x1b\x2f\xf1\x8c\xd9\x0d\xcc\x6e\x60\x76\x83\x93\x64\x20\x77\x03\xb9\x1b\xdf\xbf\x41\xcf\x20\x7a\x03\xd1\x1b\x88\xde\xc0\xf2\x06\x96\x37\xb0\xbc\x81\xe5\x0d\x2c\x6f\x60\x79\x03\xbf\x1b\xf8\xdd\x20\x76\x1a\xd8\xdc\xc0\xe3\x06\x12\x37\x90\xb8\x81\xc4\x0d\x24\x6e\x20\x71\x03\x7d\x1b\xe4\x4c\x83\x9c\x69\x60\x70\x03\x83\x1b\xe4\x4c\xe3\xdf\x10\xbc\x0d\x9c\x6e\x10\x3b\x0d\xb4\x6e\xa0\x75\x03\xad\x1b\x38\xdd\xc0\xe9\xc6\xf7\xfe\x46\xd6\x0d\xb4\x6e\x90\xc2\x8c\xcf\xba\x41\x10\x33\xf0\xbb\x81\xdf\x0d\xcc\x6e\x90\xc2\x8c\x4f\xc4\x42\x10\x33\xb0\x98\x81\xc5\x0c\x82\x98\x81\xc8\x0c\x44\x66\x38\x40\x27\x16\x33\xb1\x98\x89\xc2\x4c\x14\x66\xa2\x30\x93\xf5\x64\x8e\xe9\x29\xba\x9e\xb1\xde\x91\xaf\x08\xff\xae\x5e\x61\xae\xa2\xf7\x5d\x9e\x5b\x31\xff\x95\x8c\xbc\x18\xbe\x2b\x25\x49\x81\xa7\xc7\xbe\x5e\xcc\x7f\xa5\x24\xaf\xa2\x31\x19\x9e\xbc\x78\xbe\x1b\xe1\x55\x66\xab\xf8\xff\x2a\x0b\x5f\xf1\xff\x55\x16\xbe\x12\x93\x57\x62\xf2\xc6\xf1\x73\x4f\xb8\x92\xef\x95\x86\xbc\xe1\xde\xe2\xf3\x5a\x33\x4b\x7a\xe9\x4a\x29\x5d\xa7\x83\xeb\x44\x70\xc5\xff\x57\xcc\xcf\xb4\x26\xaf\x12\xee\x15\xff\xdf\xf4\x59\xe9\xb3\xc4\x6c\x17\x93\x77\xa5\x8b\xae\x74\xd1\x95\x28\xba\xd5\xd1\xc5\x55\xe0\xbd\x65\x6e\xd6\x72\x8d\x4f\xa9\xe5\x7f\xc3\xcf\xfd\xa6\x58\xbd\x5b\xe1\x7f\xad\x45\x62\x39\xfa\xd5\x49\x9d\x3a\x99\x47\x25\xaf\x9a\xe4\x4e\xd3\x63\xdf\x83\x08\xea\x8a\xa0\xae\xa2\xdc\xdd\xbd\x56\x5f\x14\xdd\xdd\x56\x33\x14\xdd\x45\xce\xdd\x5d\x7e\xe2\x77\x54\xb8\xbb\xf8\xa7\x8b\x7f\xba\x7d\xe8\xcf\x2b\x5e\xba\xc7\xdf\x48\x81\xee\x8a\x9d\x6e\x9f\x6b\xf2\x1e\x9f\xd5\xe7\x97\x1e\x8f\xd1\x95\x56\x57\x05\x3a\x5e\x5b\x3d\xfa\xdf\x9e\x89\x49\x1a\x35\x51\xbc\x49\x1a\x35\xb1\xbc\x89\xe5\x4d\xfc\x6e\x12\x42\x4d\xe4\x6e\x22\x77\x93\x04\x6a\xe2\x77\x13\xbf\x9b\x24\x50\x13\x95\x8b\x47\xef\xd1\x35\xe1\x9a\x78\xff\xeb\x59\x7d\x9f\x9b\xae\x4c\xef\x99\xae\x4f\xef\x53\xfe\xb7\xfe\x98\xe4\x40\xae\x17\x66\xbd\x30\xeb\x85\x56\x2f\xb4\x7a\xe1\xd4\x7b\x74\xcd\xf6\xfe\xdb\x35\xdb\xa7\x6c\xf7\xb3\x5d\xbf\x5d\x7f\x7c\xee\xf1\xaa\xe3\x3d\x8f\xff\x3d\xfe\xf7\xfa\xdf\xeb\x7f\xaf\xf7\xbc\xde\xf3\x7a\xb7\xeb\xdd\xae\xeb\xff\xd8\xa1\x53\x89\xbb\x4d\xdc\x2d\x26\xbe\x47\xef\xf6\xf9\xdc\xcf\x7d\x7e\xde\xf9\xf3\xce\x9f\x77\xb6\x1a\x50\xad\x4c\x6c\x65\x62\x2b\x13\x5b\x99\x73\xa4\xb1\x8c\xdb\x78\x8c\xd7\xe8\xb5\xd3\x6b\xfd\xc5\xe9\x52\x26\xe6\x32\x31\x97\x89\xb9\xc4\xe2\xf7\xe8\xb5\xfe\xfa\x98\x4b\x74\x7e\x8f\x9e\x22\x33\xbd\x4f\xa3\x79\xa5\x39\x2f\xae\xee\x1e\x3b\xaf\x08\x9c\x61\x5a\x5e\x89\x4f\xde\x74\xc9\x4c\xad\x47\xcf\xaa\x39\x7b\xac\x06\x78\xbb\x7b\xc4\x09\xe2\xf6\x2b\x6e\xbf\x62\xf5\x7b\xac\x0c\xa8\xbb\x2b\x39\x7a\x25\x47\xaf\x42\xeb\xbd\x3e\xf1\xfa\xc4\xeb\x53\x10\x75\xf7\xfa\x94\x6b\xee\x88\xbb\xee\x35\x43\xc5\x57\x57\xba\xf4\x4a\x91\x5e\x44\xdd\xed\x7d\xb0\x47\xff\x6b\x06\x89\x8b\xae\xb4\xe8\x55\x10\xbb\x0a\x62\x57\x2a\xf4\x7e\x76\xea\x5e\xff\xf3\x13\x0b\x7d\x62\x9e\xaf\xff\x8e\xf9\xc9\x29\x7d\x72\x4a\x9f\x6c\xd2\xa7\x6c\xf5\xc9\x1d\x7d\xfd\x7d\xe6\xe7\x9b\xfc\xe4\x70\x3e\xf8\xcf\x07\xf6\xf9\x14\x9d\x3e\x45\xa7\x0f\xe0\xf3\x01\x7c\x3e\xeb\xf6\x27\x57\xf3\x29\x2b\x7d\xd6\x70\x1a\x8d\x49\xa4\x31\x09\x34\x26\x71\xc6\xa4\xbf\x98\x04\x18\x7b\x7c\x3f\xe9\xf7\x04\xf8\x90\x71\x4b\x3a\x6e\x49\xc8\x2d\x09\xb6\x25\xc5\xb6\xa4\xd6\x96\xe4\xda\x92\x5e\x5b\x8f\x7d\xcf\x72\x3b\x9f\xdc\xce\xa7\x30\xf5\x29\x49\x7d\x00\x9f\x0f\xe0\xf3\xc5\xf1\x0e\xbe\x0d\xeb\x3f\x31\xba\x7e\x72\x3c\x6f\x56\x0f\xb4\x6e\x52\x34\x4d\xcc\x6e\x62\x76\x13\xb3\x9b\x98\xdd\xc4\xec\x26\x66\x37\x69\x96\x26\xcd\xd2\xc4\xe6\x26\x36\x37\xb1\xb9\x89\xcd\x4d\x6c\x6e\x62\x73\x13\x8f\x9b\x78\x5c\x3d\x24\x3d\xba\x32\x5d\x99\xae\xb1\xce\xcc\x7f\x63\x9d\x41\xe8\x26\xfd\x52\x9d\x27\x3d\x7a\x4f\xab\x0d\xe2\x56\xff\x49\xe9\x3f\x29\xfd\x27\xa5\xff\xa4\x47\x9f\x68\x6d\xc1\xda\x26\xca\x36\x51\xb6\x89\xb2\x4d\x7c\x6d\xe2\x6b\x13\x5f\xab\x2f\xa5\x47\xd7\x5b\x6d\xf0\xb5\x89\xa9\xd5\xaf\x52\x39\xbf\x3f\x76\x1d\xe8\x66\x29\xdd\x2c\xa5\x9b\xa5\x47\x9f\x6b\x85\x81\x4c\x26\x64\x32\x21\x93\xba\x5c\x4a\x97\x4b\x8f\x61\x2c\xe3\x36\x1e\xe3\x35\xba\xde\x7a\x02\x93\x4c\x68\x64\x42\x23\x13\x1a\xa9\x13\xa6\x74\xc2\x94\x4e\x98\x1e\xbd\xb3\x67\x80\xb2\x64\x42\x20\x13\x02\xa9\x43\xa6\x47\xaf\x0a\xcf\x95\xf9\x25\x67\x48\xaa\x30\x09\x11\x26\x25\xc2\x1e\xfb\x79\x53\x8c\xfa\xa0\x61\x9f\xd2\xd3\xa7\xe8\x44\x3d\x35\x49\xa5\x26\x35\xd4\x24\x87\x9a\xf4\x50\x93\x20\x6a\x52\x44\x4d\x42\xa8\x49\x09\x35\xa9\xa0\x26\x19\xd4\xfc\x64\x1a\x3f\xf8\xd8\x97\xbd\xce\x7c\x22\x90\x4f\x04\xf2\xe5\xf6\xbf\xdb\xab\xb6\xff\x35\x0b\x44\x23\x9f\x0c\xd2\xa7\x4f\xe0\xcb\xeb\x1d\xfc\x16\x79\x5d\xf9\xb9\xc6\x5a\xa1\xf0\x45\x19\x3f\xa9\xe2\x27\xc9\xfa\x24\x34\x9f\x74\xed\x93\xde\x7c\xd2\xb3\x4f\xa2\xf9\x49\xd1\x3e\xe9\xc6\xf7\xf8\xfe\xed\x55\xe5\x1a\x77\x5e\xee\xb6\xca\xff\xba\x4f\x90\xd1\x27\xbf\xf4\xc9\x2c\x7d\x50\xa3\x4f\x66\xe9\x93\x59\xfa\xa0\x46\x5f\xb9\x5b\x51\xcd\x27\x9e\xf9\x64\x8a\x3e\x05\xb1\x0f\x6a\xf4\xed\x5e\x33\x3f\x11\x0e\xbf\xcd\x64\xfb\x97\x2c\xff\x7a\x74\xbd\xbb\xda\x7d\x3a\xe3\xbf\x99\xac\x38\x93\xd7\x60\x8f\xae\xf1\xe9\xd8\x6e\x86\x9e\xc9\x48\xb0\x47\xff\x7b\xfd\xc4\x37\xb6\x3b\x82\xfd\x94\xda\x3e\x19\xa4\x0f\xac\xf4\x9d\x8e\x60\xbf\xf3\x9e\x49\x2b\x06\x1d\xd2\x04\xcf\x26\x1d\x52\x3d\x57\x3d\x7a\xd2\xac\x15\x40\xda\x04\xd2\x26\x84\x36\x7b\xed\x2d\x7d\x59\x3d\xba\xde\x8a\x41\x93\x34\x81\xb4\x09\xa4\x4d\x20\x6d\x42\x68\x13\x42\xab\x77\xab\x47\x57\x8a\x40\x80\xb1\x09\x8c\xd5\xcd\xf5\xa7\xd9\x0a\x9b\x4d\x36\xd0\x3a\xbe\x7a\xf4\x9e\x56\x8f\x75\xbc\x8f\x75\x03\x2a\x9b\x50\x59\x7d\x5f\xa5\xef\xab\x47\x9f\x6b\xdd\x00\xc9\x26\x48\x56\x3f\x58\xe9\x07\xeb\xd1\xab\x44\x2c\x20\xd9\x04\xc9\x26\x48\x36\x41\xb2\xba\xc5\x7a\xf4\xda\x3f\x1b\x7c\x27\x28\x32\x41\x91\x09\x8a\x4c\x50\x64\x82\x22\xf5\x0e\xf5\xb8\x8c\x61\x4c\x63\x19\xb7\xf1\x18\xaf\xd1\xab\xac\x2d\x30\x49\x5d\x46\x3d\x7a\xad\x75\x06\x26\xa9\xef\xa8\x47\xaf\xb5\xe6\x10\xcb\xd4\x89\xd4\xa3\xd7\x5a\x73\xe0\x93\x09\x9f\x4c\xf8\x64\xc2\x27\xf3\xed\x8c\x8a\x4e\x1f\xd8\xed\x3b\xd3\x73\x65\x0d\x11\x2d\x7f\xa2\x9d\xef\xd8\x07\xe5\x1b\x3f\x31\xcf\xa7\x8b\xe0\x13\xd5\x7c\xe2\x99\xef\x98\x4d\x70\xb6\x4f\x6c\xf3\xc9\x3a\x7e\x10\xb6\xef\x7c\x3e\xc5\xac\x97\x7b\xfc\xe4\x1e\x3f\xb1\xcd\x27\xdf\xf8\x01\xd0\xbe\x2b\x36\x00\x9d\xf1\xdd\x4c\x96\x99\xc9\xe9\x32\xd9\x5f\xe6\x07\x3a\xfb\x40\x67\xdf\xcd\xf7\x13\x57\x9a\xb9\xb2\x4c\x9f\xd2\xf1\x77\x7d\xae\xd2\xf1\x77\xad\x99\x72\x4d\x9f\x8e\x82\xef\x1b\x61\xec\xeb\xa1\x6a\x1f\x54\xed\x93\x83\xfa\xe4\xa0\x3e\x25\xe5\x4f\xbc\xf4\xc9\x3e\x7d\x50\xa3\x4f\xf6\xe9\x93\x7d\xfa\x3e\x2b\xaa\xec\xd3\x27\xfb\xf4\x29\x35\x7f\x4a\xcd\x9f\x5c\xd3\x07\x2f\xfa\x44\x56\x9f\xc8\xea\xd3\xd1\x3a\x9c\x26\x86\xd3\xc4\x60\xa2\x30\xf4\xf5\x0d\x27\x88\xe1\xbc\x30\x9c\x17\x86\x2e\xbe\xa1\x8b\x6f\x88\xff\x87\xae\xbc\xc1\xc6\x60\x88\x69\x87\xa8\x60\x88\x0a\x86\x2e\x9d\x21\x12\x18\x3a\x73\x86\x48\x60\xd8\xd3\x87\x3d\x7d\xe8\xb4\x19\xf6\xee\x61\xef\x1e\xf4\xa6\x87\x6e\x96\x61\xf7\x1c\x9a\x00\x86\xbd\x6c\xac\xdf\xa7\xc8\xf3\x66\xb7\x82\xd6\x26\xb4\x56\xe7\x5b\xe9\x7c\xeb\xd1\x95\xd6\x1f\x80\x6d\x02\x6c\x13\x60\xab\x23\xae\x47\xd7\x8b\x55\x48\xab\x26\xc0\x36\x01\xb6\x09\xb0\xd5\x2f\xd7\xa3\x57\x59\x7f\x00\xb6\x09\xb0\x4d\x80\x6d\x02\x6c\x33\xea\x8f\xf8\x8c\xbe\xbb\xd2\x77\xd7\xa3\x77\xb6\x5e\x11\x5e\xd5\x83\xd7\xa3\x77\x16\xd5\x40\x6e\x13\x72\x9b\x90\xdb\x04\xdb\x26\xd8\x36\xc1\xb6\x49\x3d\x33\x21\xb7\x09\xb9\xd5\xb9\xd7\xa3\xeb\xad\x4e\xc0\xdb\x7c\xd1\x20\xe4\x36\xc1\xb6\xba\xfb\x7a\xfc\x63\x06\x5b\x07\x60\x8f\xde\xcd\xaa\x05\xc5\x4d\x28\x6e\xc2\x6f\x13\x7e\xab\x3f\xb0\xc7\xbe\x12\x38\xa9\x4b\xb0\x74\x09\x96\x2e\xc1\xd2\x25\xd8\x63\x5f\x09\x93\xd4\x2b\xd8\xa3\x6b\xac\x30\x34\x34\x75\x0c\x96\x8e\xc1\x1e\xfb\x73\xc1\x92\x09\x96\x4c\xb0\xa4\x4e\xc2\xd2\x49\xd8\xa3\x57\x89\x6a\xa8\x6a\x26\x55\xcd\x21\xc2\x19\x76\xa2\x61\x27\x1a\x76\x96\x61\x25\x1f\x56\xf2\xa1\xd1\x61\x58\xb1\xc7\x7a\xcf\x5e\xaf\xc3\xc3\xba\x3a\xac\x9c\xc3\x3a\x36\x3c\x69\xc3\x5f\x6d\x10\xc7\x1d\x90\xcf\xe1\x9e\x87\x7b\x1e\xac\xd5\x87\x7b\x1b\xee\x6a\xd0\xf4\x1c\xf0\xcc\x41\xd9\x73\x50\xe1\x1c\x34\x37\x07\xc4\x72\xa4\xf7\xa4\x83\x39\x80\x90\x83\xf6\xe5\x00\x3c\x0e\x76\xd3\x83\xdd\xf4\x80\x37\x0e\x60\xe3\x80\x2e\x0e\xe8\xe2\x80\x2b\x0e\xb8\xe2\x80\x2b\x0e\x0a\x84\x03\x74\x36\x40\x67\x03\x5c\x36\xc0\x65\x83\xae\xe0\x00\x97\x0d\x70\xd9\x00\x97\x0d\x28\xd9\x80\x92\x0d\x10\xd9\x00\x91\x0d\xe0\xd8\x00\x82\x0d\x78\xd7\x80\x77\x0d\x60\xd7\x00\x76\x0d\x60\xd7\xa0\xdd\x37\x60\x5c\x83\x5e\xdf\x00\x6d\x0d\x28\xd6\x28\xbf\x23\xfd\xbd\x01\xc5\x1a\x20\xac\x41\x97\x6d\x00\xaf\x06\x45\xb6\xc1\x50\x77\x00\xac\x06\x6d\xb5\x41\x01\x6d\x50\x40\x1b\xc0\x96\x01\x6c\x19\x90\x96\x01\x69\x19\x90\x96\x01\x69\x19\x4c\x6b\x07\x74\x65\x40\x57\x06\x74\x65\x40\x57\x06\x74\x65\x40\x57\x06\x43\xda\x01\x5a\x49\x38\x6d\xfa\xab\xe9\x4d\xed\xd1\xf3\x66\x6d\x81\xd6\x26\xb4\x36\xa1\xb5\x99\xbf\xaf\xf2\x94\x8a\x6d\x00\xb6\x09\xb0\xd5\xd7\x5a\xfa\x5a\x7b\xf4\x2a\x2b\x8c\xbf\x7e\x52\x5c\x4d\xc8\x6d\x42\x6e\xf5\xbe\xf6\xe8\xb5\x56\x18\xc8\x6d\x76\x24\xfc\xa7\xd9\x4a\x95\x35\xc1\xb9\x49\x95\x35\x3d\x57\x49\x9b\x35\xe1\xba\x09\xd7\x4d\xb8\x6e\xaa\xe3\x27\x85\xd6\x04\xe4\x26\x85\xd6\xa4\xd0\x9a\xe0\x5c\x5d\xb8\x3d\x7a\xad\x35\x07\xa2\x9b\x10\xdd\x84\xe8\x26\x44\x37\x21\xba\x3a\x75\x7b\x74\xbd\x58\xa8\x23\xf0\x3f\xde\xb9\x18\x89\x0e\xa7\xfe\xde\x1e\xbd\x9b\xd5\xc6\x33\x9f\x9e\xf9\x04\xf3\xea\xfe\x2d\xdd\xbf\x3d\xba\x5e\xe4\x63\x46\xa4\x19\x91\x60\xde\x04\xf3\xa6\x79\x91\xe6\x45\xc2\x78\xd3\xbc\x48\xf3\x22\xc1\x98\x09\xc3\x4c\x18\x66\x9a\x29\xba\x88\x7b\x74\xbd\xb5\xc8\x7c\x49\x33\x25\x61\x98\x09\xc0\x1c\x34\xef\x06\xd0\x69\xc0\x97\x06\x58\x69\x40\x90\x06\x04\x69\x80\x8f\x06\xec\x68\x50\xa6\x1b\x20\xa3\x01\x32\x1a\x34\xe9\x06\x68\x68\xc0\x85\x06\x5c\x68\x00\x85\x06\x65\xb2\x01\x17\x1a\x70\xa1\x01\x17\x1a\x70\xa1\x01\x14\x1a\x40\xa1\x01\x14\x1a\xd4\xc8\x06\x38\x68\x40\x81\x06\x5a\x63\xa0\x35\x06\x4e\x63\xe0\x34\x06\x06\x63\x60\x30\x06\xee\x62\xa0\x2c\x06\xca\x62\xa0\x2c\x06\xbe\x62\xa0\x26\x86\x1c\xe6\x40\x4d\x0c\xbc\xc4\x40\x4a\x0c\x8c\xc4\xa0\xda\x35\x70\x11\x03\x0b\x31\x90\x0f\x03\xb7\x30\x18\xa8\x0e\xdc\xc2\xc0\x2d\x0c\xdc\xc2\x40\x26\x0c\x64\xc2\x40\x23\x8c\xf3\xee\xbf\xff\xa6\x83\x92\xd2\xa0\x92\x34\xd4\x7c\x07\xed\xa3\xa1\xb6\x3b\xd4\x70\x07\xd3\xc8\xa1\x86\x3b\x54\x6f\x07\xcd\xa2\xa1\x02\x3b\x54\x5d\x87\x1a\xeb\x60\xd5\x38\xd4\x4f\x87\xca\xe9\x50\x33\x1d\xd4\x84\x86\xba\xe7\x50\xeb\x1c\x2a\x9b\x43\x65\x73\xa8\x6c\x0e\xb5\xcb\xa1\x76\x39\x54\x2d\x87\x7a\xe5\xa0\x1d\x33\x54\x27\x07\x8b\xbd\xf1\xf9\xe6\xd5\x8c\xc6\xe7\x9e\x55\x8b\x86\x6a\xd1\xa0\xf6\x92\xd6\xd8\x84\xeb\xa6\x95\x36\xad\xb4\x09\xd7\x4d\xb8\x6e\x02\x75\x13\xa8\x9b\x94\x5a\x75\xb3\xf7\xe8\x7a\x6b\x0e\xfc\x36\xe1\xb7\xfa\xdb\x4b\x7f\x7b\xe9\x6f\xef\xd1\xa7\x58\x73\x20\xb7\x3a\xde\x4b\xc7\x7b\x8f\xae\xb4\xc2\x58\xb7\x75\xbf\xff\x69\xb6\x82\x73\x13\x9c\x9b\x56\xf8\x84\xe8\x26\x45\xd6\x04\xea\xea\x9f\xef\xd1\x3b\x5b\x61\xac\xff\x49\x91\x35\x29\xb2\x26\x2c\x37\x29\xb2\xa6\x7d\x21\xed\x0b\x09\xd4\x4d\xbb\x43\x02\x75\xd3\x1e\x91\x40\xdd\x04\xea\x66\x89\x6a\xec\x1a\x09\xda\xcd\xde\x3b\xfe\x78\xe7\xe2\x1f\x60\x6f\x02\x7b\x13\xd8\x9b\x90\xde\x84\xf4\xea\xf6\xef\xd1\x95\x62\x1b\x5a\x9f\x09\xe9\xd5\xff\x5f\xfa\xff\x7b\x9c\xc6\x65\x0c\xe3\x36\xf6\x95\x60\x5e\x8a\x00\x3d\xba\xc6\x0a\x03\xcf\x4c\x78\x26\x75\x80\x1e\xbd\xa7\x55\xc5\xce\x95\x60\xcc\x84\x61\x26\x0c\x33\x61\x98\x43\x25\x71\xd0\xfd\x19\x2a\x86\x43\xbd\x6f\x50\xf0\x19\x6a\x7c\x83\x16\xcf\x50\xd1\x1b\x14\x76\x86\x2a\xde\x50\xad\x1b\xaa\x75\x43\x9d\x6e\xd0\xca\x19\x34\x71\x86\x5a\xdb\x60\x38\x37\xd4\xd4\x86\xaa\xd9\x50\x35\x1b\xea\x65\x43\xa5\x6c\xa8\x91\x4d\x1a\x25\x53\x75\x6c\x32\x87\x9b\x2a\x1a\x53\xfd\x62\xaa\x5f\x4c\xfa\x23\x53\xfd\x82\x84\x6e\x8f\xdb\x78\x8c\xef\x4a\xef\xc6\xf0\x51\x2d\x63\x3a\x89\xcc\xc1\xc4\xd5\x49\x84\xde\x6e\x91\xd9\x2d\xfa\xb9\x45\x40\xb7\xe8\xe6\x16\xa5\xdc\x22\x95\x5b\xb4\x72\x8b\x9a\x6d\x91\xb3\x2d\x7a\xb6\x45\xc6\xb6\xe8\xd8\x16\x21\xdb\xa2\x64\x5b\xb4\x6b\x8b\x6e\x6d\x11\xae\x2d\x7a\xb5\x45\xab\xb6\x88\xd5\x16\xb5\xda\xa2\x54\x5b\x53\xce\x9f\x3c\x6e\x8f\xc7\xf8\x7e\xde\xaf\x95\xed\x9f\xf2\xf9\x53\x3e\x7f\xca\xe1\x4f\xd9\xd7\x29\xa7\x3a\xe5\x54\xa7\x6c\xea\x74\x6e\x9a\xce\x4d\xd3\x59\x69\xca\x9d\x4e\xca\x05\x53\xbe\x74\x3a\x37\x4d\x0e\x4d\xd3\x59\x69\xd2\x0e\x98\x94\x02\xa6\xbc\xe5\xd4\x78\x3d\xe5\x12\xa7\x66\xeb\x29\x67\x38\x5f\xb6\x50\x14\x44\x63\xa2\x47\xcf\x98\xf5\x44\xcc\x93\x2f\xe6\x01\xea\xd2\x9b\x28\x7a\x13\x3d\x7a\x0e\xad\x27\x20\xdc\x04\xe1\xd2\x9e\xa8\x84\xdf\x26\xfc\x36\x81\xb7\x09\xbc\x4d\xe0\x2d\x4d\x8a\x1e\x5d\x6f\xad\xb0\xf7\x25\xd8\x36\x61\xb6\x14\x07\xfe\x34\x5b\xed\x92\xf4\x08\x2a\xed\x92\x49\xbf\x35\xc1\xb6\x09\xb6\x4d\xb0\x2d\xb5\x82\xa2\x56\xd0\xa3\x57\x59\x25\x28\x7d\x26\xa5\xcf\x04\xde\x26\xa5\x4f\x8a\x06\x3d\x7a\xad\x75\xc0\xae\x9a\x76\xd5\xb4\xab\x26\xd5\xcf\x84\xe2\x26\xd5\xcf\xb4\xc3\x66\xef\xb0\x7f\xbc\x73\xf1\x09\x5c\x37\xe1\xba\x09\xd7\x4d\x3b\x72\xc2\x75\x13\xae\x9b\x70\xdd\xb4\x47\x27\x5c\x37\xe1\xba\x09\xd7\x4d\xb8\x6e\xbe\x3c\x1b\x5c\x37\xe9\x7d\xa6\xdd\x3c\xed\xe6\x89\xbd\x4c\x7b\x7a\xda\xd3\x13\x7b\x99\xd8\xcb\xc4\x5e\xe6\xb1\xe3\x20\x30\x13\x81\x99\x08\xcc\xb4\xfb\xa7\xdd\x3f\x11\x98\xf9\xcc\xde\x39\x1b\x4d\xce\x46\x53\x56\x79\xca\x27\x4f\xf9\xe4\xe9\x54\x35\xe5\x8d\x27\x17\xa2\xe9\x84\x35\x65\xf3\xa6\x6c\xde\x94\xc7\x9b\x32\x78\x53\xb3\xfb\xd4\xbc\x3e\xe5\xdc\xa6\xdc\xda\xd4\x8c\x3e\x9d\xc5\xa6\xb3\xd8\x74\x0a\x9b\xb2\x4f\x53\xf6\x69\xca\x38\x4d\xf9\xa5\x29\xb3\x34\xe5\x01\xa6\x3c\xc0\x94\x01\x98\xce\xfe\xd3\xd9\x7f\x3a\xfb\x4f\xe7\xfd\xa9\xa1\x76\x3a\xf5\x4f\x27\xfa\xe9\x0c\x3e\x9d\xbe\xa7\x73\xf7\xd4\xcc\x3a\x9d\x70\xa7\x13\xee\x0c\xf3\x5d\x0b\xe0\x74\x7a\x9d\x4e\xa9\x93\xdf\xc3\x74\x4a\x9d\xce\x7a\xd3\x29\x6f\x3a\x81\x4e\xa7\xce\x29\xce\x9f\x62\xf8\x29\x86\x9f\xfc\x12\xa6\x38\x7c\x8a\xc3\xa7\x38\x7c\x8a\xb4\xa7\x48\x7b\x8a\xb1\xa7\xe8\x7a\x3a\xf1\x4d\x71\xec\x74\x82\x9b\xce\x5c\xd3\xbe\x3f\x35\xdc\x4c\xfb\xfb\xb4\x8f\x4f\xfb\xf8\xb4\x83\x4f\x7b\xee\xb4\xc3\x4e\xfb\xe9\xac\xf7\x6e\xd6\x34\xfb\xda\xa4\x5e\x3d\xed\x5f\xd3\x3e\x35\xb5\x9e\x4c\xfb\xd4\xb4\x43\x4d\xb1\xeb\x34\xd3\x27\xb8\x7e\x9a\xd7\xd3\xbc\x9e\x66\xf4\xa4\x38\x33\x69\x2e\x4f\xc8\x7c\x22\x75\x13\xa9\x4b\x25\xa4\xa8\x84\xf4\xe8\xe9\x8a\x77\x8d\xa7\xd1\x3a\x23\x86\x4c\xe4\x6d\x8a\x24\x13\x6d\x4b\x49\xa4\x12\x67\x4b\x49\xa4\x28\x89\x14\x25\x91\x1e\xbd\xa7\x75\x06\x61\x9b\x08\x5b\xda\x22\x3d\xba\x52\x04\x82\xaa\xcd\x7f\x83\xaa\xcd\xf3\xee\xdf\x6a\x23\x46\x4d\x84\x6d\x8a\x54\x13\x55\x4b\xaf\xa4\x47\xd7\x58\x5b\x44\xad\xb4\x4b\x7a\xf4\xb9\xd6\x16\x0c\x6d\x62\x68\x13\x3d\x9b\xe8\xd9\x44\xcf\x26\x6e\x36\x71\xb3\x89\x9b\xa5\x75\xd2\xa3\xeb\xad\x15\xe2\xde\xbc\x7f\x36\x3b\x4a\x3c\x24\x9d\x94\xa2\x93\xd2\xa3\xd7\x5a\x2b\x50\x91\x94\x53\x7a\x4c\x63\x19\x5d\x6f\x7d\xc0\x43\x26\x5d\xd0\x44\x45\x26\x5d\xd0\x14\x57\xa7\xb8\x3a\x11\x92\x29\xba\x4e\x84\x64\x62\x23\x13\x1b\x99\x6c\xd8\x13\x21\x99\x08\xc9\x44\x48\xa6\x08\x3c\x45\xe0\x89\x81\x4c\x0c\x64\xe2\x1e\xf3\x19\xb0\x5b\xdb\xa7\xb5\x7d\x5a\xd5\xa7\x55\x7d\x5a\xcf\xa7\xf5\x7c\x5a\xc3\xa7\xd5\x7b\x5a\xb7\xa7\xb5\x7a\x5a\x93\xa7\xb3\xcf\x74\xea\x99\xfb\x3d\xdb\xcf\xe2\xde\xcc\xb5\xa2\x4e\xab\xe8\xb4\x66\x4e\x2b\xe1\xb4\x12\x4e\x6b\xe0\xb4\x06\x4e\x6b\xe0\x74\xf6\x99\xce\x3b\xd3\xf3\x36\x51\xd0\xd3\xdf\x71\x22\x9f\xe7\x79\x26\xda\xde\x9f\x9a\xeb\xf4\xfd\x4f\xdf\xff\xf4\xfd\x4f\x67\x93\xe9\x77\x9f\xce\x1d\xf3\x3e\xeb\x67\xf3\x0e\x69\x36\xe9\x48\x4e\x67\x84\x49\x17\x72\x22\xc7\x26\x66\x6c\x8a\xf4\x26\x5a\x6c\x8a\xf4\x26\x36\x6c\x8a\xf7\xa6\x18\x6f\x8a\xeb\xa6\xf8\x6d\x8a\xd9\x26\xd5\xc2\x29\x72\x5b\xff\x7a\x7e\xbe\xcf\x0f\xf7\x39\xd8\xb2\xee\x24\xea\x28\xad\xbb\x04\x56\x4b\x42\x77\x91\x59\x5b\x02\xab\x25\xa4\x5a\xc2\xa2\x35\x9e\x25\xdf\x7a\x36\x92\xcf\xc8\xef\xd9\xf3\x31\xef\x23\x79\x2b\xf4\x58\x36\x81\x25\xcd\xb6\x14\x79\x96\x0d\x61\x2d\xaf\xa2\x81\xb2\x14\x6d\x96\xa2\xcd\xa2\x5d\xb2\x6c\x08\x4b\x11\x66\x51\x2d\x59\xca\x2f\xcb\x16\xb1\x24\xe7\x96\x02\xcb\x7a\xa5\x15\x90\x6c\x82\x64\x13\x24\x9b\xf0\x58\x12\x40\x3d\x7a\x24\x2d\x18\xf0\xd8\x74\xc8\x4b\x48\x2c\x69\xa0\x1e\xfd\xaf\x45\xc2\x9f\x85\x34\x50\x91\x06\xaa\x04\xb7\x26\xb8\x95\x40\x50\x8f\xae\x11\x68\x00\x5a\x13\xd0\x9a\x80\x56\xf2\x41\x3d\xfe\xb9\xac\x0d\x77\xcd\xfb\x7e\x0b\x01\x88\xe3\x63\xc2\x5d\x93\x97\x7b\xc2\x5d\x13\xee\x4a\x92\xa8\x48\x12\xf5\xe8\x7a\x0b\x06\xdc\x35\xe1\xae\x44\x8a\x7a\x5c\xc6\x30\xa6\xb1\x8c\xdb\x78\x8c\xd7\xe8\x55\x96\x07\x18\x63\x7e\x7f\xb6\x25\x49\xc7\xd6\x04\x39\xa6\x47\x35\xe1\x8d\xe9\x51\xcd\x77\x9c\xf5\xc0\x26\xc8\x31\x3d\xb6\x09\x6f\x4c\x78\x63\x7a\x78\x13\xd8\x98\xc0\xc6\x24\x46\x9a\xd0\xc5\x84\x2e\x12\x56\xea\xd1\xf5\x16\x0c\x00\x63\x02\x18\x13\xba\x48\x76\xa9\x47\x57\xfa\xeb\x9b\x0a\x24\x98\x2a\x01\x8c\x49\x5c\x34\x61\x8c\xf9\x64\x45\x85\x15\x4b\x39\x6e\x29\xc7\x2d\x89\xde\x25\xd1\xbb\x94\xd1\x96\xa2\xd9\x52\x10\x5b\x0a\x62\x4b\x29\x6c\x09\x46\x96\x60\x64\x09\x43\xd6\x73\xc8\x53\xce\x5a\x82\x91\x15\xf1\x5c\xd9\x5c\x4f\x62\x54\x1a\x9e\xdf\x58\x71\x17\x2b\x9e\x61\xc5\x33\xac\xb8\x85\x15\xb7\xb0\xe2\x16\x56\x9c\xc0\x8a\x13\x58\x71\xff\x2a\x5e\x5f\xc5\xc1\xab\x38\x78\x15\xef\xae\xe2\xda\x55\x1c\xb9\x7a\x7c\x66\x4c\xcf\x74\xc9\x95\xfb\x99\xdb\xb8\xde\xfc\x95\x48\x63\x1e\x54\xac\x82\x8a\x01\x50\x31\x00\x2a\xd6\x3f\xc5\xf4\xa7\x18\xfa\x14\xfb\x9e\x62\xd6\x53\x4b\xd0\xb1\x84\x12\xcb\x41\x7c\x09\x28\x96\xd4\xec\xd2\x0d\xbb\x1c\x9a\x57\x3d\x41\xfc\xf1\xec\x2a\x9e\xb5\x04\x11\x7c\x92\xd2\x12\xae\xcb\x81\x63\x49\x8f\x2d\xdd\x7d\xcb\x91\x62\x09\x34\x96\xe0\x62\x59\xf8\x97\x65\x7e\xed\x27\xc5\xed\x7b\x10\xd8\x2e\x8b\xf7\x92\xa6\x5a\xda\x83\x96\x70\x63\x09\x37\x96\xb0\x62\x69\xdf\x59\x82\x88\x25\x05\xb5\x84\x06\xcb\xf6\xbe\x6c\xef\x4b\xf2\x69\xd9\xd2\x97\x84\xd3\xd2\xfe\xb2\x6c\xda\xeb\x6d\xda\x00\xd8\x84\xbe\x26\xf4\x35\xa1\xaf\x49\x7e\x36\x01\xb0\x49\x7e\x36\x1d\xac\xd3\xc1\x3a\x61\xb0\xe9\x78\x9d\x30\xd8\x84\xb8\x26\x27\xff\x84\xb8\x26\xc4\x35\x21\xae\x69\xf1\x4e\x87\xef\x04\xba\x26\xd0\x35\x21\xae\x09\x71\x25\x26\xd6\xa3\x2b\xef\x9f\x8f\x4d\xdf\xbb\x7f\x2b\x09\x00\x96\x04\x59\x8f\x3e\xd7\x1a\xe2\x28\x9f\xa0\xd7\xea\x8d\xa2\x30\xaf\x44\xc9\x7a\x4c\x63\x19\xb7\xf1\x18\xbf\x1e\x7b\xf1\x28\x14\x63\xe1\x17\x0b\xbf\x58\xf8\xc5\xa2\x42\x5a\xb2\x00\x45\x85\x94\xa0\x59\x8f\x7f\x5c\x20\x0b\xef\x58\xf2\x05\x25\x5f\x50\xf2\x05\x25\x5f\x50\xf2\x05\x25\x53\x50\x32\x05\x44\xd2\x8a\x48\x5a\x8f\xee\x21\xbc\x2a\xde\x95\x3e\x3d\x5d\x99\xae\x4c\x57\xa6\x6b\xd2\x3b\xa7\x77\x4e\xd7\xa7\xeb\xcb\xfb\x97\x57\x95\x57\x95\x57\x95\xf7\x2f\xaf\x2d\xaf\x2d\xaf\x2a\xaf\xda\x4f\x5d\x9d\x6e\xb4\x09\x2a\x4e\x5a\x22\xa4\x25\x42\x5a\x22\xa4\x25\x17\xb9\x74\x80\x2c\x31\xd0\xb2\xa1\x2d\x5b\xd6\x92\x97\x5c\x7a\x39\xd6\x7d\xef\xe9\xb1\xd5\x77\xb1\x6c\x4a\xcb\xa6\xb4\x6c\x3b\x4b\x2e\x72\xd9\x4c\x96\x0d\x84\xd5\x72\xb1\x5a\x2e\x26\xcb\xc5\x64\xb9\x98\x2c\x17\x03\xe5\x62\xa0\x5c\xcb\x92\xbc\x3c\xbc\xcb\xc3\xbb\x3c\xb0\x0b\x8d\xbd\x3c\xb0\x4b\x3e\x68\xa1\xae\x97\x87\x71\x89\x33\x96\x47\x72\xbd\x38\x43\x86\x68\x3d\x96\xfa\x5f\x4f\xbe\x96\x98\xa9\xf6\x1c\x8f\x49\x78\x4c\xc2\x83\x10\x4a\xcf\xe1\x8f\x19\x92\x3c\x01\x55\x0d\x7f\xae\x10\xa3\x84\x3f\x5a\xf8\xb3\x84\x34\x4e\x48\xe3\x84\x04\x4e\xb0\x26\x0f\x89\x9a\x80\x71\x86\x44\x4d\x8c\xa7\x48\x37\x9e\x14\x26\xa5\xba\xf1\x24\x2c\x9f\x6c\x25\x31\xc4\xf5\x24\x26\x9f\x04\xe4\x13\x6d\xf4\x73\xc8\xfa\x7c\x1a\x66\x9a\x86\x1c\x7e\x59\xe5\x17\xb3\xfa\x62\x56\x5f\xcc\xea\x8b\x4d\x7d\x31\xa8\x2f\xf6\xf2\xc5\x29\xbe\xd8\xec\x57\x88\x66\x42\x04\x13\xeb\x29\x15\x69\x82\xe3\x62\x1a\x4a\x8a\x61\xa7\x29\xf1\x56\x81\x66\x0b\x34\x5b\x70\xd9\x82\xcb\x96\xa4\x56\x49\x6a\x15\x50\xb6\xc8\xd1\x16\x5c\xb6\xa4\xb9\xe8\xfc\xf5\xe8\xfa\xe3\x3d\x8f\x57\x5d\xef\x79\x5d\x79\x5d\x73\x5d\x73\x5d\x73\x5d\xf3\x79\xe7\xcf\x3b\x7f\xae\xfc\xbc\xe7\xf7\xc7\x55\xa6\x24\xc4\x0a\x22\x5b\xe0\xd8\x02\xc7\x16\x38\xb6\xfc\x15\xca\x5f\xa1\xc0\xb1\x25\x5d\x56\x12\x65\x25\x51\x56\xfe\x2e\x05\x85\x2d\x28\x6c\x49\x9d\x95\xd4\x59\x41\x61\x0b\x0a\x5b\x50\xc6\x82\x32\x52\x2e\x2c\x9a\x85\x3d\xfa\x5c\xcb\x80\xc4\x1a\xfd\xc2\x3f\xdd\xb9\xe4\x5b\xc1\x17\x69\x1c\xf6\xe8\x1d\x2c\x0f\x12\x71\x05\x5a\x28\xf8\x22\xed\xba\x2a\xe9\xb8\x22\x21\x5a\x9e\x9c\x82\x26\x16\x34\xb1\x20\x0d\x05\x50\x2c\xe2\xa1\xe5\xb9\x2a\xa6\xea\x05\x59\x2c\xc8\x62\xc1\x14\x0b\xa6\x58\x9e\xba\x02\x2b\x16\x58\xb1\x24\xf7\x0a\xb2\x58\x90\xc5\x82\x2c\x16\x58\xb1\x9e\x18\xa8\x94\x48\x80\x70\x02\x7e\x13\xc0\x9b\x10\x8b\x84\x22\x75\x88\x48\x02\xde\x10\xf0\x83\x90\xfa\x08\xc5\xeb\x50\xbc\x0e\x36\x9c\x01\x24\x88\x78\x5a\x3b\x66\x8a\x44\x47\x28\x6a\x87\xf8\x23\x24\x37\x42\x49\x3d\x14\x46\x43\x49\x34\x94\x3b\x83\x09\x65\x28\x74\x86\xb2\x66\x28\x6b\x86\xd4\x47\x28\x4a\x86\x72\x64\x88\x51\x42\x1a\x24\x24\x40\x42\x02\x24\x94\x17\x43\xc9\x3b\xd8\xf3\x05\x7b\xbe\x50\x10\x0c\x71\x4c\x88\x63\x42\x04\x13\x4a\x72\x21\x01\x12\x12\x20\xa1\x78\x11\x8a\x11\xa1\x0c\x11\xd2\x20\xa1\xd0\x10\x4a\x0c\x21\x8e\x09\x25\x86\x10\xc7\x84\xf2\x41\x28\x0a\x84\x98\x26\xea\xbd\xbf\x95\xa4\x9e\x9a\x82\x39\x2b\x55\x12\xd2\xf8\x21\xb2\x09\xd1\x4c\x48\x99\xc6\x93\xdf\x95\x0c\x09\x49\xcb\x50\xce\x0b\x47\xd7\x90\x7e\x0c\x89\xc7\x90\x72\x0c\xa9\xc5\x70\x80\x8d\xfd\xda\x66\xd7\x6b\x46\x7e\x2d\xc3\xaf\x41\x58\x23\xad\xfb\x3f\xaf\x99\xce\xba\xe1\xc8\x19\x0e\x9b\xa1\x10\x16\xac\x3d\xc2\x11\x3e\x1c\xde\xc3\x16\x14\xb6\x9d\xb0\xb1\xd0\x5c\xec\xf1\xfd\xdb\xd3\x75\x3d\x57\x56\x06\xa2\xb1\xb4\x18\x7b\xf4\xf4\x5a\x19\xe0\xac\x05\x61\xa5\xd1\xd8\xa3\x6b\xcc\x7a\x69\x67\x4a\x8d\x3d\x2e\xe3\xff\x05\xd7\xb6\xbf\xc3\xff\x85\xa1\x42\xf8\x10\x82\x82\xb8\xe6\x8e\xf3\x64\xdc\xd7\xf4\xe4\x59\x72\x4a\x0c\xe1\x40\x38\xd7\x85\xb3\x5c\x28\x30\x05\xd3\x88\x70\x1e\x0b\xe7\xae\x60\xfc\x10\x4e\x5c\xe1\x94\x15\x0a\x4c\xe1\x94\x15\xec\x19\x42\x7c\x1c\x22\xe3\x10\x44\x84\x18\x37\x84\x12\x21\x41\x11\x2f\x42\xfd\xd7\xeb\xaf\xd2\x93\xe1\xd0\x2a\x70\x48\x6a\xf6\x29\x8e\x4c\x11\x64\xaa\x23\xa5\x90\x21\xd5\x8b\x52\x14\xc8\x8b\xa1\xb8\x30\xf4\xe8\x7f\x1d\x0f\x45\x78\x29\xb6\xe3\xc2\x50\x5c\x18\x8a\xe7\x42\x8f\xaf\xeb\xe5\xf5\xa3\x78\x9f\xfd\xba\x4f\xbc\x9b\x10\xdd\xd6\xca\x67\xa1\xf8\x2c\x54\xda\x48\x93\xba\x7b\xda\x34\x92\x12\x35\xdf\x84\xe2\x98\x50\x49\x47\x3a\x6d\x05\x69\x13\xe0\x98\x50\x1c\x13\x7a\x7c\xf4\xba\x9f\xfb\x2c\x35\x9c\x44\xbd\xe5\x7c\xef\x2c\x6b\x68\x0a\xe6\x7c\x74\xa7\x8a\x81\xaa\x4e\x62\xe2\x92\x30\x2e\x07\x84\xe2\x80\x50\xf9\xf8\x38\xe1\x49\x12\xa8\x4d\xd2\xb4\x29\x18\x49\x89\x17\x7e\x07\xc5\xe9\xa0\xf8\x1a\xf4\x88\x42\x95\xe8\x58\xe7\xef\xc4\xfd\xa7\x0f\x95\xeb\x91\x80\xe3\x51\x93\x8f\x76\x7c\x04\x22\x8e\x6f\x3f\x66\xf0\x71\x82\xae\x71\xfc\x94\xb8\x48\x89\x0b\x5e\x00\x3d\x62\x73\x3c\x99\xe4\x11\x53\xca\x22\xd1\x70\x5c\x00\x8a\xfe\x7f\xa5\xf0\x21\x05\x08\x69\x7b\xa7\xe7\x5f\x94\xfc\x2b\x25\x25\x32\x5f\x8d\xdd\x13\xae\xe2\x41\xc3\xbf\xb2\x7e\x29\x09\xd5\xf8\xf5\xd8\x07\x3f\x8f\x47\x34\xf8\x5f\xf3\x0e\x77\x96\xa4\xc4\xd2\x36\x9e\x52\x13\xd4\xfb\x8b\x6e\x7f\x25\xe1\xad\x24\xbc\x95\x24\xb7\x28\xf6\x57\x4a\x56\x24\x8e\x8c\x4a\x7f\x51\xe6\xef\xd1\xff\xfa\x44\xa4\x58\x92\x37\xa2\xcf\x5f\x29\x89\x41\x93\xbf\x68\xf2\x17\x35\xfe\x4a\xd2\x42\x89\xf1\x49\xa2\x42\x4f\x99\x9f\xca\x7a\xa5\xa0\x20\xf7\xab\x00\x58\xcd\x24\x31\x28\xab\x17\x35\xf5\x1e\xfd\xdc\xfb\x23\x6b\x12\x59\x43\x59\xbd\x52\x42\x23\xe9\x8b\xd0\x54\x2f\x6a\xea\x95\x12\x1a\x89\xa6\x49\xfa\x1f\x49\xff\x23\x25\x37\x52\x72\x83\xbe\x7a\xd1\x57\xaf\xa4\xc9\x91\xc8\x9a\xa4\xac\x90\x82\x8b\x14\x5c\xa4\xb0\x82\xd6\xfa\x7f\xff\xa9\xfd\x3b\xfc\x67\xd7\x04\xc1\x63\x62\xa6\x52\x6e\x22\xe5\x26\x68\xec\x17\x75\xfd\x4a\x59\x89\x94\x95\x48\xb4\x54\xd2\x96\xa0\xb1\x5f\xd4\xf5\x7b\x7c\x09\x76\x3f\xf7\x34\x52\x80\x48\x2a\x0e\x29\x00\x49\xa1\x47\xde\x97\x7a\x1a\x2f\x05\x2d\x19\x35\x5f\x8a\x58\x7a\xca\x4c\x57\xf1\xa0\xb7\x5f\x89\x6a\x49\x3d\xeb\xf4\xf6\x2b\x05\x1d\xf4\xf6\x2b\x05\x1d\x89\x64\x49\x99\x8b\x14\x68\xa4\x9c\x05\x35\xfe\xa2\xc3\x5f\x29\x4f\x91\xf2\x14\xd4\xf8\x8b\x10\x7f\x8f\x2f\x57\xe5\xb8\x3c\x5f\xbe\xc9\x51\x78\xb9\x26\xfc\x24\x5e\x9e\xc8\x71\x39\x5f\x26\xe8\x1d\xd0\xfd\x7b\x3b\x34\xef\x77\xf8\x7e\xc7\x6e\x57\x0a\xba\xf5\xad\x92\xe0\xef\xe3\xb2\xff\xfd\xfc\xe4\x05\xd4\x82\x68\x89\x8a\xd2\x27\x5a\x3a\x44\x4b\xba\xa2\xf8\x6e\x90\xec\xef\xd1\xf5\x72\x61\xfa\xf6\x4a\xdf\x5e\xa1\x48\x0a\x45\x42\xb8\xbf\x48\xf6\xd7\x13\xeb\x2f\x91\x49\xcd\x77\x08\xa8\x77\xf4\xf4\x6e\xee\x59\x34\x52\xe2\x90\xd2\x15\x47\xa2\xbd\x88\xb3\x77\x98\xef\x55\xee\x56\x07\x1b\x89\xf6\xff\xfe\x53\xfb\x77\xf8\x3b\xfc\x1d\xfe\x0e\x7f\x87\xff\x7f\x58\x63\xdd\xfa\x59\x23\xe2\xfb\x59\xa3\x63\xe1\x35\x3a\xba\x5c\x08\xc2\x35\xf3\x9e\x9f\x35\xf7\x9a\x3f\x6b\x9e\x88\x9f\xb5\xc6\xaa\x9f\x25\x9d\xbd\x88\x6c\xaf\xbd\xf2\xfc\xac\x5d\x35\x8c\xf3\x67\xed\x8e\x94\xd7\xc9\x7d\x7f\xd6\xb7\x23\x7f\x42\x37\x57\xcc\xf5\xad\x9f\x20\xa0\x1d\x44\x80\x43\xf1\x39\xec\xcc\x51\x71\xd7\x4f\xec\xde\x2d\x63\x47\xff\x7c\x6f\xe3\x8d\xfb\x13\x7a\x8c\x17\x9a\x73\xcd\x3e\x79\x2c\x9c\xd3\xc2\xe7\x2d\x7b\xfe\x3a\x75\x47\x7f\x62\x9e\x9f\xe0\x14\x17\xb5\xea\xf6\xd8\xef\x4c\x3f\x65\x8d\xa8\xea\xf7\x19\xeb\x67\xf1\xb9\x5e\x9c\x39\x17\x67\xbc\xa5\xbb\x7b\x39\x55\x2f\xd5\xa2\x55\x7d\x6e\x58\x3b\xe3\xfa\xbd\xf2\x67\xed\xd3\xf7\x70\x6b\x9f\x9f\x18\xeb\xee\x9f\x18\x79\xea\x27\x30\xb2\x31\x57\xdf\xbf\xef\x2d\x66\x47\xd3\xc1\x69\x33\x98\x11\x04\x03\x82\x60\x25\x10\x77\x7d\xfd\x6d\x8f\xd3\xf7\xd3\xb1\xcc\xda\x51\xdf\xcf\xba\x7d\x5e\x0f\xa4\x78\x20\xbd\x82\xd6\x55\x48\xc1\x07\xf2\x32\xee\x5d\xfd\x0d\xac\xfe\x06\x56\xf4\x37\xbf\xea\x8c\x9f\x45\x0f\x6b\x81\x14\x96\xba\xd8\x12\x0b\xac\xfa\xaa\xef\xbc\x4e\xff\x5d\x56\xff\x16\x77\xf6\x5f\xf6\xfb\x4e\xdf\xff\x8c\xd9\xbf\x45\xf4\x6f\xb1\xfb\xfe\xd7\xe8\xef\xed\x8c\xf8\x7e\x82\xe6\x54\x9c\xef\x8c\x9f\x44\xc0\xff\xf7\x9f\xda\xbf\xc3\x7f\x74\x4d\x98\xeb\xf6\xec\x3e\xab\x67\x6e\xcf\x94\xe0\x6e\x1a\x27\xfb\xd9\xa0\x4c\xb4\x66\xc7\xa7\x6b\x99\x1d\x9c\x27\x17\x4d\xcf\x45\xf9\x6e\xe9\xc7\x5e\xfa\x09\x97\x7e\xbf\x05\xaf\x58\xe7\x64\xf4\x7b\x1e\xef\xdc\x73\x67\x7e\xfb\xfe\x44\x2f\x37\x3d\x9a\x2f\x7d\x26\x0e\x45\xb8\x60\xb9\x12\x34\x11\x42\xac\x1a\xb5\xe7\xfc\x89\xb3\x57\xcf\x02\x2a\x90\x63\x98\xd7\xf3\xf4\x6c\x5a\xb3\x57\xb3\x34\xb3\xbe\x7e\xda\x97\xb5\xc8\x79\x62\xc1\x61\x16\x60\x64\xd5\xd7\x77\x7b\x66\xcf\xfa\x9b\xd1\x77\x35\x67\xcf\xe8\xc8\x9e\x7d\xb9\xd6\x4f\xcc\xbd\xa2\xd7\xab\xec\xf9\xfb\x7d\xf5\xb3\xa9\x7c\xc6\x39\xbd\x82\x5d\xdf\xd2\xbc\xf7\xf6\x4a\x58\x6f\x26\x86\x6b\x7a\x1d\xf8\xfa\xb5\x9c\xfd\x83\x5a\xeb\xd2\x2f\xb7\x66\xcf\xb2\x45\x42\x79\x51\xd8\x59\xb5\xbe\xfb\xb3\x2a\x7b\x86\xb2\xb7\x58\xe5\x3b\xa4\x65\xb6\x6e\x9f\xa8\x62\x8e\x5e\x6d\x88\xcf\xc7\xee\x75\x72\xd3\x18\x0d\xf2\xce\x7d\x53\xe5\x3b\xc9\x5e\x4f\xfa\x77\x1c\xab\x7f\x2f\xdd\x71\x8b\xb6\xce\xd2\x8f\xbd\x10\x75\x6b\x7f\xfd\x6e\xbc\xf2\x42\x97\x66\xec\xec\xbb\xa5\xcf\x18\x5f\xee\xfe\x3e\xbd\x6a\xec\x5e\xed\x77\xf6\xba\xba\x77\xff\xa6\xfa\x76\x16\x1e\xbd\xc7\xdb\xeb\xc9\xf7\x27\xed\xd4\xbf\xc3\xff\xfa\x10\xc3\xac\x7c\x8a\xc0\x63\xef\x7e\x92\x67\xef\x32\x7a\x4e\x62\xdf\xde\x83\x46\x75\xcc\xe0\x7c\xbc\xca\xb3\x57\xb7\xf7\xd9\xbd\x7b\x57\x3a\xab\xe3\x81\xbb\xcd\xeb\xb9\xed\xce\x3d\xef\x68\x75\xf5\x4a\x12\x3f\xeb\x8b\xf1\xf5\x58\xbb\xf7\xa6\xda\xbd\x26\xac\xf9\x13\x2b\x7a\x6f\xe5\x38\x1d\xb5\x7a\x05\x60\x85\x13\x4f\x08\x7d\xac\xd3\xfb\xdd\xea\x67\xf5\x9c\xde\x07\x6f\x0d\xbb\xd8\xed\xb1\x77\xc6\xa8\xe8\xbb\x1d\xb7\xef\x1c\xe0\x16\x73\xf7\xac\xa9\x3d\xcc\xa0\xed\xf9\x3f\xfd\xcc\xcf\x9e\x95\x76\xc3\xa5\x03\x76\xe9\xb5\xeb\x27\xbf\x23\x22\xb1\xc1\xec\x13\xed\x9a\xd1\x7b\x37\x50\x6b\xad\xdd\x7b\x37\x45\x95\xa5\x43\x72\xc1\xca\x16\x2a\x66\xb1\xb9\x59\x0c\x3b\xd6\x5e\x2b\x7a\xfc\x3e\x3b\x7e\x47\x17\xa7\xdf\xe7\xf6\x6e\xbb\xee\x1d\xfd\x6f\xab\xd3\x77\x3b\x56\xf9\xee\x9e\x3d\x7e\xb7\xd7\xa8\xde\x8b\xc7\xed\xd5\x4f\x7f\x4e\xcc\xac\x5e\x6d\x3a\x12\x8b\x35\xfa\x7f\xd7\xec\xf8\x07\x8e\x14\x48\x92\xe0\x97\x1b\x64\xc3\xa3\x8c\x44\xf2\x63\xdf\xdb\xeb\xc6\xad\xf3\x13\xf7\xeb\x15\x98\x76\x52\x7c\x35\xf3\x27\xe8\x0b\xac\x91\xfd\x1b\xcd\x9b\x56\xfb\xbb\x7f\x16\xef\xfc\xc5\x3e\x69\x11\x81\x5f\x72\x8a\x4b\xc1\x7e\xed\xfd\xf5\x5a\x71\xc7\x9f\x54\x6f\xfe\x0e\xff\xeb\xc3\xda\xb7\x9f\xde\x1b\x31\x7a\x37\xf7\x4c\xc6\x7b\x32\xd7\x8b\xf6\x3b\x82\xed\x7d\xb3\xe7\x6f\xef\x86\x71\xcd\xc4\xe8\xe7\x30\xfb\xf9\x2c\xf1\xff\xad\xec\x55\xa5\x77\xa2\x7e\x78\xb7\x73\x47\xc7\xf9\xd5\xf1\xc3\xdc\x1d\x1b\xaf\xb5\xfb\xd9\xfb\xbe\xf0\xec\x75\xd4\xd1\x91\xc0\xa2\x1a\xd3\x8b\x47\xd9\xd3\xc5\xba\xcb\xbf\x7b\xce\xb2\x7d\x59\x8c\x24\xd6\x19\xbd\x4a\x9c\x1b\xe2\xf6\xd1\x11\x48\xf4\x9a\x36\xaa\x23\xf3\xb9\xdc\x67\xaf\x6c\xb1\xce\x99\xe2\xf6\xcf\x4a\xd5\x7b\x65\xaf\x03\xc1\x00\x25\x94\xd5\x43\xc5\x2c\x64\x31\x43\x76\x30\x2a\xbf\xb7\xfb\xf7\x1e\x7d\x76\xc7\x09\xbb\x67\xe5\xad\x8e\x16\xbe\xd1\xf3\xeb\x69\xee\x8c\xd3\x2b\xc0\x3c\xd9\x67\xa5\xd1\xf7\xbc\x43\x7c\x7e\xfa\xb3\xe6\xf2\x6e\xcc\x23\xc6\xea\xef\x64\xad\xfe\x9e\x3b\x20\xeb\xf8\xca\x8e\x3c\x7b\x56\xee\xdb\x2b\xed\xbe\x7d\x5e\xbb\xd9\xfb\x3b\x25\x94\x80\x0a\xc6\xf7\xf5\xe9\xe0\x9c\x7a\xd1\x82\x79\xdd\x11\xc5\x88\xd3\x67\xbd\x8e\x2b\x7a\x7c\x67\xbd\xd9\xdf\x6a\xef\xf2\x14\x00\x97\x5e\xac\xa5\xd3\x69\x55\xf4\xfb\x57\xbd\xef\xb6\xe3\xab\x6f\xf7\x8a\x31\xfb\x9e\x43\x07\x78\x6c\x51\xe2\xed\xb8\x68\x8d\xd1\xf7\xc6\x74\x66\xc9\x56\x2e\x66\x1f\x8b\x3a\xc9\x7f\xff\xa9\xfd\x3b\xfc\x27\x87\xb0\x3f\xc6\x9b\x05\x65\x57\xad\xea\xdd\x96\x4d\x52\xec\xaf\xa3\xeb\x73\x86\x1d\xc7\xc9\x7d\xf5\xde\xc7\xb9\x21\xa8\x0e\x05\x8f\x87\x4d\x37\x7f\xe9\x8b\x5e\xf0\xa0\xc5\x84\x68\xc1\xc0\xd7\xbe\xa7\x23\x0a\x31\xf3\xed\x67\x7b\x7d\x7d\xb2\x58\xf6\xac\xd0\x83\x14\xbd\x10\xf4\x9d\xf4\x9c\x65\xbb\x19\xe6\x5a\xdc\xe8\x7f\x7f\xce\xce\x73\x84\x1c\xc2\xfe\x3c\xe7\x7d\xcd\xed\x75\x66\x84\xe8\xf7\x76\x34\x32\x57\xaf\x45\x4b\xdc\x4b\x77\x69\xed\x5e\xc1\x16\x45\xe6\x75\xef\xea\x58\xc5\x49\xe7\xdb\x3d\x23\x74\x52\x05\x90\xb1\x4f\xcd\xfd\x0e\x4e\xe8\x25\xef\xb1\xf6\x34\x47\xfa\xce\xc7\x76\x7e\xdf\x2f\x17\xd1\xd7\xe8\xec\x5d\xda\x08\xfa\x5c\xd0\x9f\xe2\xd4\x4f\xd5\x68\x31\x62\x8b\x35\xfa\x3e\xd7\xd7\xd1\xcb\x3e\xa3\xa3\x9a\x19\x62\xf5\xdb\x9f\xb5\xad\x9f\xf2\x21\x60\xc1\x45\x57\x77\xd1\xf4\x5c\x75\x9d\x35\xbe\xe8\xd5\xa6\x67\xf1\x3a\x1d\x4d\xad\x2f\xfb\x6e\x47\xdf\x67\x8c\x7e\xcf\x58\x7d\x8e\x08\x10\x74\xf0\x8b\x0e\x0a\x80\xa1\xf3\x3c\xb6\x53\xd8\x16\x4b\x9c\xb1\xf7\x4f\x7c\x7d\xfe\x0a\x9a\x68\xf1\xdd\x9a\x3f\xf3\xfb\xac\x36\xd6\x93\x31\x3a\x86\x19\xd3\xc9\x42\x74\xa4\x8b\x7e\xcd\x95\x7f\xd7\x84\x7f\xfa\xb0\x74\x66\xf6\xce\x5e\x46\x19\xc5\xec\x1d\x6d\x84\x7d\xad\x9f\xdb\x95\xfd\x4c\xb2\xdb\x5b\x94\xa6\x17\x25\xb5\x05\x45\x5d\x15\xa2\xe8\x8e\xff\x17\x13\xa8\xde\xa8\xa7\xd9\xd1\x7b\x7a\x1e\xd9\xbf\x8e\x3c\x65\x06\x7a\x03\xef\x95\xa1\xcf\xcb\x8b\x3e\xe9\xa2\x42\xb8\x3e\xd7\x7c\xbb\x67\xe2\xd8\x25\xdf\xf5\xbd\xbd\x6c\x38\x6b\x88\x9c\x4f\xef\xf8\xab\x77\x79\x86\xc5\xc1\x98\x38\x18\xfc\x85\x76\x96\xa8\x1d\x3d\xfb\x46\xaf\x30\x0c\xaa\x3a\x96\x9e\x3d\x17\x3a\x2a\xe0\x51\x11\xa7\x4a\xde\xb2\x63\x80\xa7\x21\x28\x7a\xef\x43\xff\xf9\xc9\x77\x12\x59\x2f\xd3\xb2\xe7\xb6\x52\xc9\xec\xf5\xbf\xef\x5d\x7d\x8d\xdf\x65\x56\xc7\xf0\xb3\x4f\x19\xa1\xd1\x21\xb0\xeb\xb1\xab\x77\xe1\x33\x7c\x7b\xd5\x57\xb2\x61\xea\x75\xa6\xa3\xaf\xe8\x95\x8a\x55\xe2\xa2\x63\xd5\xbf\xa3\x8c\x62\xaf\xc6\xec\x23\xe3\xed\xcb\xa3\x44\xf8\xa3\x57\x51\xd9\xcb\x35\x63\x8b\xb8\x3a\x1e\x60\x34\xbc\xd8\xf2\xae\x93\xbd\x52\xdd\xe1\xdb\xab\x5e\xc7\x74\xb7\xae\xcf\x9a\x40\x7f\x33\x76\x7f\x62\xdc\xe8\xb5\x65\x67\xaf\x8d\xc7\x3b\xd0\x6e\x8e\xca\x8e\xbe\x76\xf5\xc9\xe5\x5b\x29\x5e\x92\x37\x5e\x7d\xcd\xa9\x29\x03\xbc\xfe\x9e\x1d\xfe\xe9\x43\xef\x68\xc3\x5f\x7f\x8a\xf6\xfb\x74\x69\xb6\xae\xdb\x3b\x6f\xf5\x89\x60\xf1\x6a\x5a\xdf\x96\x2d\x74\x9e\x9d\x7d\x1a\x8d\x99\x1d\x99\xcf\xaf\x4f\xc4\x30\xc4\x60\xed\x1d\x5b\x66\x60\x7f\xb3\xa3\x8b\xb7\xe6\x2c\xe7\xd6\x78\x59\xc7\xd5\xcf\x7f\xf5\x3c\xe2\xe2\xd3\xc3\x76\x0f\xfd\x59\xcb\x5c\xb8\x53\x95\xa1\x9f\xff\xd9\xab\xc1\x82\x92\x2f\xa6\x6f\x6b\x7f\xbd\x56\xdc\xaa\x90\x13\x70\x4d\xc7\xc9\x73\x2d\x27\xfd\xbe\xde\xd3\xbb\xf6\xee\x98\xe1\xcc\x70\x7e\x97\x4b\x94\xf3\x67\x75\x1a\x3c\x78\xa2\x96\x0a\xc5\xee\x15\x63\xdf\xbe\xe7\xaf\xcf\x14\x9b\x3f\xd0\x1a\xb3\x67\xee\xfa\x9c\x6b\xee\xec\xf7\x9c\x1d\x87\x9f\x75\x5e\xb4\xd3\xdf\xc3\x1c\x7d\xf6\x9f\xde\x33\x3b\xe6\xd1\xee\x16\xa8\x87\x00\x8b\x6f\x3e\x43\x7d\x12\x19\x3f\x6b\x38\x2b\xcd\xfc\x8d\x34\xe4\x4c\xac\xa2\x67\x2f\x71\x85\x7c\xcb\x90\x03\xe9\xdf\x62\x5c\xb5\x9b\x7d\x5f\xbc\xd1\x77\x25\xc7\x32\x56\x47\x4d\xe3\x8a\x61\xae\x5a\xcc\xd7\x6b\xc5\xf2\xaa\x65\xbe\xaf\x5a\xcb\x98\xfd\x37\x1d\xc6\xde\xf1\x97\xf8\x8d\xd1\xea\x02\x31\x2f\xae\x2a\x0b\x6b\xb9\xa8\xe5\x2e\xea\x48\x8b\x51\xfb\xda\xe3\x38\x25\xfd\x51\xa5\xe5\xef\xf0\xbf\x3e\xac\x1d\x1d\x9d\x6e\x3b\xf5\xce\x5e\x07\xf6\x35\xa7\x6e\x3f\x57\xe7\xed\x11\x9e\xde\xb3\xed\xfb\xe7\xbc\xf1\xfe\xac\x3b\x87\x9d\xc8\x5e\x7f\xe2\x9d\x85\xaf\xd9\xb7\x65\xd2\x3e\x75\x87\x65\x94\x43\xeb\xf9\x32\xbe\xfe\xf9\xb4\x6b\xcf\xd1\x67\x16\xfb\x60\xd0\x6d\x89\xb9\x7b\xb7\x5a\xff\xea\x70\x78\x76\xa8\xbb\x76\xff\xe7\x3a\xbd\x20\xad\x3b\xfb\xe7\x7d\xc8\x0e\xbe\xfa\x51\xdb\x71\xc7\x11\x64\x5b\x90\xce\xde\x6f\xec\x10\x60\x2a\x63\xae\x97\x62\xf7\x6f\xe1\xfc\xc7\x03\x73\x94\x70\x7b\x99\x7c\x21\xd1\x58\x26\x68\x2c\x09\xc2\xfe\x14\x86\x6e\x1d\xda\x2b\xd2\x7e\x69\x72\x2b\x4a\x94\x22\x4c\x87\xf9\x7a\x82\x36\x2b\xb1\x3e\x40\x38\xbe\xff\x6e\xb3\xd7\xf8\xf5\xb8\x2d\xbd\xdb\x62\xf3\xae\x97\xfe\xec\x05\x6c\x33\x17\xdb\xcc\xc5\x36\x73\xb1\xad\xa7\x60\x33\x11\x8b\xaa\x57\x7c\xd8\xde\xe7\x78\x9f\xe3\x7d\x24\x5a\xd6\x7b\xb7\xfe\xb3\x7c\x63\x7a\x9f\xf3\xc6\xfa\x89\xbb\xdf\xfb\xf7\x01\xa5\x72\xf5\x6f\x97\x7d\xd8\x22\xbe\xb1\x59\x8f\xad\x2d\xcd\xc0\xc7\x72\xdd\x3e\x1a\x6e\x66\x64\xa1\xc8\xb3\x59\x92\x6d\x96\x64\x9b\x25\xd9\x7f\xff\xa1\xfd\x3b\xfc\x27\x87\xe8\xb3\xad\xbf\xb5\xe7\xea\x0a\xc0\x43\xe0\x2c\xc9\x34\xde\xb3\x7a\xdf\xe8\x69\xb9\x9e\xd8\xeb\x69\x51\xb0\x1a\xef\xe9\xba\xd2\x09\x7d\x08\xd6\x28\xb9\xf8\xc7\xc6\xfa\x7d\x6d\x6f\x3b\x1a\x1f\x17\x51\xf7\x55\xb6\xcd\xf9\x70\x80\x92\xce\x57\xc4\x28\x09\xb9\x52\x22\xe3\x99\xbc\x78\x32\xaf\x39\xdf\x93\xdf\x41\xb7\xd6\xc9\x45\xa0\x75\x11\x04\xdb\xcc\xef\x36\xf3\xbb\xcd\xfc\x6e\x7d\xbf\x77\xfb\x8a\x8a\x9f\x7b\xfe\xdc\xf3\x67\x9e\x7e\xfd\x9c\xdf\x31\x1c\x20\x8e\x7f\x4f\xe3\x32\x86\x31\x8d\x65\xdc\xc6\x77\xe5\x35\x7a\x87\x39\x8c\x1d\x80\xf7\x91\x7d\xeb\xfd\xd9\x2c\xcf\x22\x5e\xd0\xd4\xdf\xd8\x22\xee\xb1\x99\xa0\x6d\x26\x68\x11\x7d\xdc\xdf\xac\xd0\x36\x2b\xb4\xc5\x1b\x76\x33\x44\xdb\x0c\xd1\xb6\x1e\xa2\xad\x87\x68\xdb\xc6\xb7\x4e\xa2\xcd\x22\x6d\xbf\x54\x65\xac\x13\xca\x2f\x0a\x89\xdf\xf4\x37\xf5\x9e\xef\xfd\xad\x09\x77\x79\xcf\xe5\x3d\xc3\x7b\xbe\xc2\xc5\x7b\xe7\xf0\xce\xf1\x8e\x4a\x1d\xac\x5d\xc1\x57\xf8\xbd\xc2\x51\xf2\xbe\x04\xed\x1f\xc5\xf6\xff\x0e\xff\xeb\xc3\x22\x40\xbd\xc6\x54\x72\x5c\x9f\xf0\xb3\x37\x7c\x8a\x0c\xab\x23\xe4\x9f\x45\x34\x78\x71\xb0\xef\xe0\x71\x2b\x3f\x66\x1f\x31\x7b\x6f\xba\x4b\x11\xe0\x8c\xa9\x74\x36\xa1\x3a\xf6\xdf\x0e\xd5\x49\x7d\x86\x5e\xfd\x38\x1d\x86\xf7\xe6\xd6\xbb\x55\xaf\x2a\xeb\xee\x7e\xe7\xaf\xfa\x7f\x49\x58\x07\x97\xe6\x35\xaf\xe7\x30\x3a\x8c\xd5\xc8\xde\x61\x7b\xef\x89\xef\x29\x15\xbc\xdf\xf5\xd0\xa1\xbe\xff\xbb\xfb\xd3\xc9\x56\xc7\xba\x21\xcd\xf0\x60\x87\x29\x61\x39\xa4\x4e\x17\xe4\xe1\x08\xe1\xb7\x60\xe7\xab\xde\x0d\xfb\x7a\x62\x4d\xb1\x43\x02\xfe\xeb\x1d\x7f\xda\x5b\x57\x59\x21\x77\x87\xcf\x6c\x2f\x96\xfe\xdc\x5e\xd3\x14\x0d\xd2\x7e\xda\xbf\xd7\xfc\xea\xfe\x04\x79\xa5\x1c\xbb\xd7\xbd\x31\xfb\x4a\x5a\x12\xab\x23\xf3\x9e\x59\xfd\xbb\xf3\x4e\x5f\xcc\x55\x17\xbb\x99\x45\x6c\x76\xe9\x84\x5d\x65\xa6\x7f\x7b\x7e\x12\x27\x09\xe9\x92\x20\x59\xd9\x07\xa6\xb8\x8a\xc6\xbd\x86\xa4\x77\xa8\x0e\xd6\xc8\x31\xad\x91\x1d\xf4\x91\x0d\x5c\x84\xfb\xfa\xef\x98\x8a\x8d\xd3\x6f\x51\x3e\x5d\xc1\x47\x1a\xb8\x57\xc8\xc5\x80\x6c\xb1\x9f\x58\xa4\x68\x97\x96\x86\x55\x56\xdd\x52\x3e\xaa\xad\xd0\xba\xbf\xbf\x71\xc2\x3f\x7d\x58\xfb\x3a\x0a\x44\x3f\x0f\x4c\x0c\x17\x13\xc0\xc5\xe0\x6c\xdd\x9d\xbd\xe7\xce\xfb\xd0\x9e\x7e\xfe\xeb\x3a\x3a\x4b\x89\xad\xde\x95\xec\xc2\x51\xca\x7a\x7b\x1c\xa0\x4d\xc7\xe7\x3b\x7f\xcb\x02\x47\x92\x2f\xcd\xf7\xd3\x2b\x43\x1f\xd9\xcf\x19\x5f\x3f\xe1\x53\xea\xae\x67\xdf\x91\xce\xbf\xdb\x31\x5d\x0a\xf3\xb3\x43\x7d\xd2\x84\x43\x1a\x60\x2a\x2a\xce\x33\xfb\x4c\x91\x0f\x67\xe8\xb5\x02\x2e\xb4\xb4\xe2\xac\xfa\xcc\xd6\x39\x60\x02\xfd\x9e\xac\x51\xd7\xf5\xf3\xaf\xd7\x93\xa8\x8e\x85\xe2\xbe\x13\x81\x7b\x26\x4f\xb7\xc6\x14\xed\x28\x00\x92\xf7\xec\x93\x79\x39\x53\xf4\x4c\xf9\xde\x01\xab\xe7\xc8\x3e\x90\xc6\xdb\xb3\x89\x31\xe5\x62\xa0\x16\x20\x88\x0e\xaf\x1e\x84\x68\x2f\xee\x73\x0d\x4b\xcd\x38\x35\x44\x53\xab\xef\x10\x7e\xb5\x73\xc3\x3f\x3b\x72\x20\xcb\x1f\x33\xed\xe0\xbb\xde\x0e\x9e\x4e\x46\xc3\x77\xa8\xf8\x53\x22\x8a\xfd\xe2\x10\x29\xc9\xf0\xdd\x02\x13\xbe\x3e\x2f\x1c\x89\x61\x52\xd2\x8b\x5d\xe0\x3a\xd2\x0f\xdf\x7c\xa5\x66\x69\xd1\xea\x7b\x63\xb1\xd1\x67\x93\x3e\x25\xcd\x72\xc2\xea\x6f\x7e\x5e\xeb\xde\x38\xa2\x0b\x78\x23\xa0\x8c\x8e\xcc\x7f\xff\xa9\xfd\x3b\xfc\x27\x87\x60\x82\x10\xe4\x01\x43\xcb\x4d\x9c\x77\x8a\xbc\xaf\x7c\x27\x2d\x7d\xfb\x19\xfb\xf6\x4b\x80\x7d\xa7\x9f\x70\x10\x1f\x4c\xe0\xac\xb5\xfb\x59\x7a\xb1\xb4\xa4\xd7\xe8\xdd\x67\x8a\x66\x0f\x0c\xe1\xe4\xec\xd5\xe6\xa5\x1c\x24\x20\x19\x40\xe4\x00\x47\x93\x99\x8d\x7d\x3c\xc3\x50\xc1\x52\xae\x2f\x67\x84\xa3\x68\x7f\x7b\x8e\xc4\xec\x28\x3d\xe8\x37\x85\xe6\xdb\xa0\xea\x10\xb5\xec\x68\xeb\xda\x5b\x41\xd3\xf7\xed\x7d\xbd\xeb\x6d\x69\xfe\x3b\xfa\x1e\xd8\x27\xad\xaf\xa3\x9a\xf5\x5d\x31\xcc\xfe\x86\x12\x81\x92\x66\xaf\x1b\x62\xf5\xa5\x9d\x32\x9c\x26\xd6\xf8\xa6\xf2\x3e\x20\x62\xbc\xd4\x63\x02\x7f\xbc\xea\x26\x94\x52\xe1\x45\x62\xf2\xbc\x35\xf3\x93\x88\xfd\x56\xdf\xb9\xd9\x1a\x7d\x27\x51\xbd\xd7\xf7\xb4\x36\x7f\x97\x72\x5f\xc7\x4b\xc3\xc9\x68\x76\xdc\xb5\x66\xbd\xa2\x84\x53\xd2\x97\x20\x65\x45\x00\x9f\x7e\xa0\x10\x77\x8b\x4f\x3a\x8e\x0a\x8d\xc7\x41\xa3\x2d\x94\x74\xe2\xab\x8e\xd3\xbe\x8e\x73\x72\xd4\x27\x7a\xe9\x57\xcd\x09\x45\x8f\xfe\x36\x8e\x73\xd9\x7d\x31\xde\xe8\xc8\x64\x9f\xb1\x7f\xe2\x1e\xe9\x46\x19\x06\x48\xf5\xaa\xeb\x3b\xcc\x3f\x5a\x8c\xfd\x1d\xfe\xd7\x87\x3e\x9a\x9b\x1d\xd1\xbb\xc0\x4a\x79\xbc\xf3\xfd\x04\x69\x80\xd8\x1b\x54\x7b\xbf\xcf\xce\xde\xcf\x2d\x98\x68\x8e\x09\xfa\xeb\x78\xf5\x7c\xbd\x87\xde\x6b\x6e\x9a\x77\xac\xa0\x56\x7d\x4e\x19\x22\xd5\xbb\x7b\xa7\x9b\xf7\x9d\x14\x0a\x9e\xdc\x6b\xc5\x90\xbc\xa7\x5a\xb8\x59\x7b\x2f\x45\xbf\xc5\x5e\x76\x69\x36\xee\x28\xba\x67\x16\xd4\x68\xed\xdd\x11\xc2\xe9\x9f\x2c\x6d\x10\xfb\x7e\xbd\x8e\x89\x61\xae\xbb\xbd\xc7\xbf\xbf\xd8\x3f\x49\xf4\x7e\x0d\xa8\xe3\x2d\x0d\x04\x3d\xb3\xe2\xf4\x5c\x0b\x3f\x59\x73\xbd\x33\xbe\xb8\xfd\x40\xa1\x8f\x75\x2c\x7a\xee\x5c\xc0\xe3\x95\x98\xff\x56\xbf\x6a\x3c\xe8\xe0\xec\xfe\x96\x7a\x66\x85\x76\xee\x8e\x8e\x0a\x08\x10\x7d\x0f\x3d\xb3\x9e\x71\xd2\x48\x30\x57\x9f\x17\x42\x91\x33\xe6\x04\x14\x40\x3e\xe3\x58\x57\x19\x90\x31\xf2\xe8\xf9\x5b\xbd\x6e\xe4\x83\x20\x7a\x75\x8a\xd5\x31\x49\x0e\xc5\x5b\x78\x02\x4c\x6c\x5e\xad\x09\x20\x6e\xa6\x00\x8b\xb9\xea\xfa\xb4\x77\x8c\x4f\x49\x73\x88\x22\xb4\x2f\xec\xd1\xd1\xda\xdd\xe9\xfb\xb7\xd6\xed\xef\x81\x24\xa9\xbc\xfc\xa2\x97\x5e\xff\xa7\x42\x87\x93\xcb\x78\x49\xdf\xab\x90\x32\xf2\x4f\xba\x40\x7f\x87\xff\xf5\x21\xf6\xf7\x10\x9b\xd9\xfb\xc8\xcd\x02\xfb\xe4\xcf\xa2\x06\xb6\x62\x2b\x38\x98\xfb\x77\xf6\xde\x71\x45\xb6\x63\x75\x74\xb1\x14\x0d\x68\x3e\x06\x23\xda\xd0\x64\x1b\xc7\x93\x7f\x1f\xf2\xe0\xec\xbf\x87\xfd\x1a\xb4\x78\x46\x47\xcb\x1a\x6b\x16\x13\xe7\x75\xb7\x76\x9c\xd3\x9f\xf8\x9d\x4f\x99\x22\x7d\x8a\x53\xc3\x7d\x79\x80\x7e\xe7\x6f\x8c\xb7\x2f\xf7\x9a\xe3\xb9\x65\x94\xbc\x46\x1c\xc5\xfc\xf5\x9a\x30\x7a\x05\x50\x71\x58\xe0\x9d\xed\xb7\x60\xef\xb2\x34\x51\xaf\xdd\xf3\xa2\xd7\x81\xe9\x84\xfe\xda\x89\xb4\x7a\x68\xa7\xf8\xca\xea\xf7\xca\x9e\x3d\x2f\x08\x71\xc7\x9a\x50\x08\x88\xc4\xad\x69\x7f\x57\xad\x18\x1a\x02\xb2\xdf\x79\x3e\x34\xe0\xf4\xfd\xc4\x2e\x27\xfd\xec\x93\x78\xa6\x5a\x86\xb6\x86\x61\xe6\x06\x7c\x20\x43\xd1\xa6\x67\xe8\xf7\x9b\x0f\xd4\x84\x31\xfb\xfb\x9c\xb7\xfa\xae\xf6\x5b\x0f\x7b\xe5\x89\x2d\xa3\xa8\x9c\x5b\x0f\xb8\x80\x6e\x9d\x78\xab\xa2\x98\xed\x3e\x80\xd4\xf7\x60\x6d\xf9\xa6\xe8\x48\xf6\x83\xed\x5d\x6c\x51\xc4\x2d\x08\x79\xbf\x5b\x0e\xcd\x22\xdb\xfd\xdf\x39\xfc\x45\x34\x93\xad\xea\x95\x16\xce\x39\xce\xfe\xbb\x26\xfc\xd3\x87\xd0\xa6\x13\xb3\x67\x56\xcc\xfb\xd9\x2b\xcd\xcd\x8e\x99\x63\xcc\xde\x85\x9d\xaf\x83\x59\x46\xb0\xe5\x8d\x8f\x81\xf2\xd8\x5a\x7c\x60\x35\x4c\x6c\x17\x63\xf4\xe8\x80\xa0\xe7\x4e\x47\xe6\xe7\x5f\xf1\x33\xbf\xcf\xf2\x10\xd2\xe4\xe3\xf5\xea\xcc\xd7\x31\x75\x91\x8e\xa8\xc1\xfe\xd8\xbd\x5e\x7f\xe0\xd6\xad\xd4\xc1\xc8\x35\x95\x2f\x92\x80\x6f\x55\x38\xd6\x04\xc7\xec\x20\x3b\x1c\x7b\x2f\x54\x41\x6f\x68\xdf\xd7\x47\x61\xba\xd4\xab\xf4\x4b\xec\xb4\x14\xdd\xf9\xba\x31\xcb\x81\xa3\x27\x90\x7a\xea\xb0\x68\x2d\xc1\x0e\xed\x94\xc5\x43\xa6\x0f\x1c\xaf\x53\xeb\x22\x2c\x1f\x4b\xd4\x63\x75\x18\x15\x67\xf9\xdc\xd0\x3d\x88\xe7\xb0\x04\x2e\x4b\x5d\xcc\x0e\x91\x7a\xce\xfe\xac\x8d\x39\x36\x05\xfb\x60\x71\xf0\x5b\xbd\x15\xe3\xc8\xd7\xeb\x4f\x30\xc5\xf7\xeb\x7d\xfa\xbe\x40\x8d\xf4\xa7\x8c\xe8\xe0\xeb\x3b\xaf\x07\xcc\x11\xed\x4a\x31\xce\x47\x87\xf7\xef\x25\xdd\xa8\x97\x29\x46\xd6\x0b\x64\xa6\x43\x4f\x4a\x8d\x48\xf6\x60\x31\xef\xd4\x19\xf2\xdb\xd7\x11\xea\xcd\x3a\x49\x3e\xbd\x9d\x7d\xf8\x18\x98\xaa\x35\x95\x2f\x56\x08\xbb\xca\x9f\x5a\x5a\x37\xfe\xe8\x7e\xf3\x77\xf8\x5f\x1f\x82\x2f\x7d\x3f\x39\x36\x96\xf9\xfa\xa2\x3f\x5c\xce\x56\xfa\xee\x7f\x3b\x4c\xdf\x98\x68\xda\x47\x19\x0e\xf3\xab\x7a\xec\x23\x42\xf0\xd6\x08\xa9\xac\x38\xfc\x81\x87\x85\x81\x3c\xf5\x1a\xe6\xfe\xb8\x17\xbd\x34\xcd\x1d\x9c\xf4\x5c\x7a\x8a\xfa\x73\xeb\xe0\x8d\x4e\x1f\xe5\xf7\xba\x08\x7b\xa9\xc7\xd9\xf7\x70\xea\xeb\xd9\x24\xd0\xf8\xd6\xf9\x04\xc8\xfd\x6f\x2c\xaf\x2e\xc4\x18\xbb\x0f\x07\x7d\x96\xc1\x24\x5d\x2b\x80\xe3\xfb\x45\x37\x2e\xe9\x3a\x5d\x7f\xf9\xba\x08\xbe\x17\x68\x9b\x4d\x7d\xec\x18\x7d\xd0\x89\x19\x43\xe7\xc6\x7e\xf4\xde\xe7\x4a\xac\x8f\xfe\x84\xc7\x1a\x7e\x3a\x06\xf5\x36\xf7\x54\xc7\x00\x49\x60\x74\xc8\x53\xaf\x63\x7c\xea\x8c\xc2\x81\x5d\xa5\x5d\x6e\xcc\x31\xd3\xf6\x9b\x1f\x8c\x42\x4a\x6f\x75\xc0\x9e\x23\x75\x38\xeb\xaa\x1a\x18\x29\x89\x99\x7a\xef\x79\x7e\x99\x21\xc1\x8b\xef\x24\x3f\xc5\x9f\x4f\x6f\x95\x7e\xaa\xed\x77\x19\xa9\x3b\xc5\x0a\x16\xbf\x3d\x1e\x17\xcb\x98\x3a\x3a\x24\x83\x7b\xdd\xb8\xfb\xb7\x1f\xc3\x6f\xf1\x6d\x05\x8d\x54\xbe\x38\xfa\xc9\x77\x3f\x15\x5b\x47\x28\xd2\xfa\xfb\x5b\x76\xf8\xc7\x0f\xeb\x1c\x07\xf4\x31\x75\x1b\x4a\xe0\xdd\xdd\x07\xc7\x0e\x8a\xe3\xae\xd3\xe3\x0e\x5d\x04\x52\xec\xa7\x9f\x96\x6f\x3d\x52\x7f\xda\x13\x3f\x61\xf2\x4c\x09\xc2\xb0\xfb\xf7\x6e\xeb\x89\xdd\x92\x8b\x5b\x22\x61\xeb\x25\xb8\x58\xc3\xbb\xa4\xc0\xf3\x38\x16\x97\xbe\x02\xdd\x38\x93\x52\x40\x09\x6f\x6f\x95\x7d\x4a\x60\x8b\xb7\x3b\x3d\x53\xf8\x9f\xac\x7c\x07\x88\x31\x02\x57\xad\xa7\x48\xf0\x3b\xcd\xf7\x2d\xc1\xa9\x6b\xfa\x7b\xfb\x32\x4e\x71\x59\xb5\xee\xf2\x6e\x7d\x87\x41\x39\x2d\x6a\x0b\xfc\x87\x3d\x34\xc2\x4c\xec\x9d\xb4\x94\xef\x4a\x44\xb1\x13\xc5\xa5\xab\xf9\xe8\x17\xe5\x46\xbe\xbe\x0b\xb5\xd8\xbd\xab\xce\xfb\x49\xcc\xf4\x6f\x11\xb3\xbf\xc9\x88\x78\xbf\x97\xd2\x41\x86\x03\xfd\xd7\x01\x97\x42\xc7\xd2\xed\x10\x0b\x5f\x5e\x8e\x20\xfb\xa1\x4f\xab\x3f\x3d\xf5\x5e\xc2\x3d\xc6\xe3\xc5\xcf\xfb\xbd\xb6\x1e\x51\xe9\x96\x63\x1d\xe8\x4f\x1f\xeb\xf5\x7e\xc7\xdb\xf7\x87\xa4\x82\x10\x4f\x89\x78\x2c\x7f\xe5\x43\xc7\xa1\x57\x48\x3a\x69\x81\x4e\x8b\xab\x14\xf3\x89\x6a\x26\x6d\x85\x92\xe0\xac\xb3\x1d\x1c\xfb\x6f\x7a\xf3\xaf\x0e\xd2\x3f\x7e\x08\x7e\xbf\xa1\xbf\x37\xce\xd2\xff\x9f\xfa\xf1\x14\x19\x1c\x28\x17\x4f\xdd\xc5\x75\x76\xad\x07\xb0\xf4\x31\x62\x05\x7e\x31\x71\xc3\xbc\x61\x17\xe9\xe8\x55\x9f\xfd\x74\xbc\x8e\xc1\x7c\x51\x87\xf8\x99\xd2\x8a\x3e\x8a\xab\x1f\x6f\xa0\x9f\x59\xb7\xc4\xfa\xc2\xb1\x83\x9e\x42\x3c\x2d\x83\x17\x87\x54\x58\xa3\x7a\x8f\x0b\xdd\xd1\xdb\xa1\x44\x12\xf4\x76\xb4\x9c\xa3\x0f\xca\x8b\x63\xf0\x1a\xb9\xdf\xa1\x5c\x0f\xf0\x2b\x20\xe8\xcd\xd0\x5f\x54\xa9\xe3\x37\x7f\x57\xa7\xa3\x44\x19\x3d\x83\xa4\xfd\xbe\xf3\xf4\x23\x5e\x11\x66\x18\x3b\xd2\x50\x6c\xd9\xca\x32\xdb\x8c\x3e\xf3\xd1\xd5\xe3\x25\x4a\x25\x32\x9d\x3b\x86\x9e\xab\xea\x99\xbb\x77\xbd\xd2\x5f\x18\xd3\xf7\xe9\x98\x25\x02\x99\x0a\xad\x52\x11\xdf\x2b\x60\x0e\xd8\x23\x0d\x85\x15\x6b\xc2\x2b\xea\x27\x78\xef\xc7\xf7\xfa\xa6\x9e\x62\x0b\x3d\x97\x25\xf2\xb9\xba\xd0\x87\x38\x21\xc7\x79\x2b\xb0\x13\x81\xc2\xc2\xd1\xd5\x70\x9d\x2f\x02\x3f\x8a\x90\x8e\xea\xbf\xd7\x79\xdd\xda\x07\x1b\x7d\xc2\x6a\xb0\x2e\x2c\x45\x3f\xfc\x84\xa2\x58\x57\xef\xee\xdf\xe2\xcf\xbe\xfd\x7f\x87\xff\xf5\x21\x86\xa2\x77\xc6\xd2\x99\xa0\x43\xe6\x00\x1b\xef\x8b\x8d\x93\x42\xc7\x02\x02\x48\x63\xeb\x31\xde\x80\xc7\x43\xab\x88\xe3\x65\x38\x6f\xe6\x18\xa3\xc7\x33\x97\x2e\x3b\x33\xf4\xea\x57\x2c\x88\x9c\xee\xa9\x8e\x04\xd6\x56\xca\xdb\x7a\x09\x76\x89\xb1\x15\x00\xef\x2d\x69\x75\xf3\x74\xf6\xec\x9b\xb4\x57\xec\xa1\x21\x35\x18\x2f\xfd\xff\x92\x73\x23\xa5\x45\x6b\x23\xfb\x0f\xec\xd1\x3b\xaf\xde\x79\x8f\x55\xe2\x7c\xde\x79\xf5\x9d\xdc\x3e\x4d\xac\x6f\x53\x80\xd2\x01\x0e\x19\x0e\xba\x88\xc1\x3a\x20\x4a\x2f\xd3\xd6\xe3\x34\x16\xfd\xa9\xfd\x29\x50\xe8\x28\x88\x1c\x3a\x3f\x43\xb9\x12\x04\xd1\x73\x76\x4e\xf9\x8a\x49\x93\x45\x89\x23\x95\x58\xd9\x17\x44\x2d\xbd\xa6\xb0\xeb\xbd\x7b\x46\x7f\xd6\x8a\xef\xe9\x1f\x25\x45\x83\x57\x0e\xb5\x82\xad\x0b\x43\xd0\xd1\xf1\xe0\x4d\xa8\xe6\xaa\x54\x48\xbc\x80\x08\x25\xa0\x6f\xe8\x1c\x3b\x8a\x21\xd6\x76\xca\xd2\xc1\xbd\x36\x36\x75\x86\x53\xb7\xcf\x05\xf3\x7c\xfd\x77\xb9\x0f\xc4\x70\x46\xa0\x3d\x21\x3b\x31\x87\xb2\x30\x5a\x7d\xfa\x0e\xf9\xe6\x2d\x26\x3b\x6b\xe1\xdd\xa3\xff\x6a\xff\xfd\xa7\xf6\xef\xf0\x9f\x1c\x56\x84\x6c\x98\x0e\xba\x28\xc5\xf0\xf5\x70\xda\xde\xc5\x3c\xc9\xab\x64\x08\xe5\xc1\xd6\x1d\xaf\xa7\xd1\xd3\xb8\x42\x91\x90\xce\x82\x52\xff\x72\x1e\x67\x63\x12\x0a\x17\x11\x72\x74\xcc\x1c\x82\xf1\x42\xc4\xe9\x9f\xeb\xe8\x8b\xfd\x2f\xa9\xb5\x5e\x8a\xb6\xe9\xb8\xd7\xeb\x5b\xb8\xab\x97\x9c\x6f\xff\xc4\x91\xd3\xbc\xaf\xd6\x28\x49\xf0\xc5\x2d\x6d\x8c\x7d\xe4\x7d\x5b\xf4\x87\x87\x28\xcb\x83\xed\xb4\x63\x6c\x6d\x5c\x17\x51\x9d\x3f\x8b\x25\xf3\x22\x92\xb0\x38\x01\x74\xf0\x22\xa9\x70\x4c\x2f\x61\x8b\x54\xc1\xd4\x44\x39\xbf\x77\xa8\x5a\x8e\xfe\xf5\xaa\x7a\x2f\xf0\x7f\x5f\x0f\x19\xb7\x0e\xa0\x32\xde\xf2\x90\x42\xfe\x4b\x1e\x41\x70\x44\xe2\x60\xbf\x2a\xc2\xff\xd9\xfc\xfb\x18\xd4\x21\x79\x4f\x4d\x8b\x4d\xbc\xc5\xc6\xe1\xec\xd3\xf6\xf8\x9b\xf2\xac\x9e\x82\x1a\xc3\x27\x22\xdc\x66\xce\x91\x69\x71\xe6\xe8\x3f\x4e\xbf\xff\xbf\x42\x04\x46\x5b\xc2\xe9\x4e\x01\xf7\x00\x44\xcf\xd3\xc0\xd3\xe1\x7d\x7e\x01\xe6\xdf\x3e\xf5\x8f\xfe\x44\xdf\x9a\x8e\x4f\xee\xe1\x31\xa7\xfe\x36\x38\xe8\x94\xbd\x5d\x10\xd0\xa5\x60\xba\xbe\xf8\xdb\xff\xf4\x4f\x1f\x22\x28\xa2\xc5\x9a\x57\x89\xcd\xee\xf2\xe2\xe6\xd4\x7a\x03\x0c\xde\xdf\xeb\x91\x85\x20\xe6\x3b\xe1\x3b\x79\xc6\xec\x98\xa0\x77\x9a\x35\x69\x92\x39\x87\x67\x4f\xdf\x55\xdf\x2b\xf1\xf7\xa3\x7d\x3a\xd2\x5d\xc7\x4f\x2e\x0d\x80\x6b\xdf\xfd\x56\xef\xeb\x9f\x82\x3e\xa8\x2f\x36\xdd\xa0\xdb\xa7\xdf\xc5\x6c\x6c\x9d\xa7\x0d\x70\xf5\xef\x26\x0c\x7b\x24\x18\xfb\x69\xb0\x2d\xf8\x90\x9d\xcf\x74\x1c\xcb\xfe\x17\x74\x25\x4d\xd3\x71\x5e\x0f\xa2\x09\x67\xcf\x9b\x47\x13\xd0\x77\xf5\x1c\x87\xf2\xab\xdf\x42\x0e\x34\xc6\xdb\xa1\x75\x0d\x56\xaa\x1f\xd0\x26\xa1\x04\x99\x3e\x37\xf3\x50\xa2\xea\x18\xbd\x68\x45\x6c\xe5\x45\x99\xbb\xb5\xe5\x56\xb6\x6c\xcb\x96\x7f\x39\x4e\x5f\x07\x2c\x71\x68\x25\x5e\xd8\xf3\xd5\xb5\xf9\x34\x0c\x86\x38\x8c\x3e\x44\xc0\x92\x63\xea\x1e\x9b\x14\x98\x38\x81\xf6\x12\x05\x6c\x98\xfa\x23\x7b\x46\xb3\x6d\x8a\x50\x28\xe4\x51\x11\x50\xe7\xe0\x2a\x16\x95\x9a\xc5\xf4\x5e\xd7\xef\xf7\xdc\x27\xa2\x3d\xe5\x6b\xce\xeb\x20\x77\xaa\x99\x34\x2a\x02\x50\xe1\xf7\x9a\x43\x2b\xd6\xef\xf2\x76\x9d\x6a\xea\x6f\xb3\xc3\x3f\x7d\xe8\x6d\xea\x95\xd7\x65\x09\x1f\x68\x04\x43\xa2\xc6\xfa\x6d\xa5\x6d\xea\x8c\x63\x0e\x67\xd1\x70\xc2\xef\x15\xe3\x38\xd9\x5e\x88\xef\x18\x2f\x33\x9e\x20\x25\x70\xf2\xd0\xec\xb0\xe6\x51\x89\x74\xc2\x97\x8b\x4f\x59\x06\x7d\xd8\x57\x3e\xf1\xe9\x8e\x70\x3a\x09\x26\x9d\xab\x0a\x32\xa7\x6a\x78\xe2\xeb\x67\xb5\xdf\xbf\xdf\xa7\xa3\xf9\xfd\xe2\xdd\x6b\xbe\x0b\x16\x6e\x0c\x6d\x1a\x83\xea\xc3\xd7\xab\xd3\xee\xf8\xfe\x9d\x25\xb4\x2d\x24\x6c\x3b\xb5\x40\xf2\x26\x59\xb9\x5e\xa6\xf2\xcd\x5c\x27\x70\xba\xb3\x77\xd9\x49\x57\x8a\x84\xfc\x3b\xe8\x98\x26\x45\xb4\x07\x42\x3b\x03\x2c\x1a\x96\xdc\xf6\x7a\x09\xa1\xd2\xa4\x37\x9a\x92\xdc\x1e\x5b\x7e\xf6\xe9\xb7\x2d\xb9\xc8\xfb\x74\x1d\x3a\x34\xf8\x34\x4b\xc2\x0f\x84\x06\xb1\xcc\xcd\xa0\x67\xf9\x51\x6d\xfc\xbe\x4b\x75\xe6\xbe\x2b\xf5\x97\x77\x3c\xd7\xcb\x4d\xaf\x63\x1d\x86\x84\x95\x36\x97\x95\x6a\xa5\xdc\xee\x86\x7b\xbd\x50\x22\x68\x36\x50\x7c\xe9\x5d\x7e\xed\x45\x3b\x41\x30\xb2\x7d\x4b\xb0\xb4\xf5\x94\x69\x3e\x7d\xed\xdf\xa1\x59\x25\xcf\xdb\x87\x89\x8e\x16\xac\x42\x7b\xfd\xd5\x53\xf9\xa7\x0f\xb1\xe8\x10\x04\x88\x25\x17\x0c\xa6\x03\xd5\x28\x3a\xc4\x5b\x0e\x5d\x2c\x9a\x63\xcb\xfe\xc3\xfc\x96\x1c\xd6\xea\xff\xed\x7d\x53\x60\x4b\x9d\x4b\xd8\xbe\x65\xee\x76\x69\xaf\x3b\xeb\x75\x54\x9b\xe3\x73\x6a\x95\x3a\xb2\x18\xd6\x16\x50\xb1\x7c\xe2\x51\xcf\x1b\x34\x11\xc7\x7e\x39\x08\xba\x4a\xf7\x7b\xfa\x43\x5a\x7e\xea\xe5\x31\x55\xc5\xae\x7d\xf9\x57\xe7\xb8\x4f\xd4\xa0\xdf\x4f\xe3\x03\x7c\x62\x7d\xd4\x4f\x3f\x19\x93\x61\xce\x4e\xea\xd1\x5a\x3e\x83\x5d\x6e\xac\x0d\xa5\xf0\xf3\x10\x27\x47\x3c\x35\xd3\x18\x3f\x91\xaf\x95\x83\x2a\xea\x76\x9f\xfb\xbb\xa9\xda\xda\x3b\x2c\x3d\x66\xab\x47\xa8\x3d\xac\x19\x72\xaf\x0e\x04\x9b\x46\xe3\xa1\x8e\x76\x54\x2e\xef\x7b\x7f\xda\xd5\xf9\xda\xb2\xe8\x25\x57\xc0\x90\xf2\x03\x1d\x45\xc2\x2f\xd5\x02\x65\x2b\xd6\x8b\x34\xfa\x80\xb5\x1c\x6e\x78\xa9\x87\x86\x8e\xd0\xda\xdc\x9b\x79\xaf\xa5\xc8\x83\x2b\xb7\xfb\xcd\xb7\xcb\xf7\x5d\x2d\x00\xf9\xc2\x6d\xa8\xd1\xae\x54\x4d\xe1\xab\xbe\x58\x25\xae\x3d\x81\x55\xd6\x96\x4f\x43\xc7\xb7\xfb\x6f\x34\x72\xa9\xd4\x3a\x59\xd4\xf7\x77\x4d\xf8\xa7\x0f\x1d\x93\x83\x99\x2f\xed\xe4\x7e\xc2\x2b\xb5\xc3\xac\xbd\x65\x09\x07\x9e\xa0\x4f\xa3\x32\xec\xe7\x5b\xb4\x06\x7b\xd6\x38\xbe\x07\x5b\xf7\x7e\xf6\xec\x80\xf3\xa9\x30\xf6\x73\x38\x44\xe3\xbb\x57\x8c\xc8\x97\xfb\x7b\xed\xcf\x5b\x25\xde\xfe\x45\x2d\xde\xfa\xb3\x6a\x53\x40\x99\x76\xb1\x3b\x9e\xe6\xe2\xf6\x84\x0f\x6a\x91\x05\xcb\xef\x7d\xdc\xcf\x09\x23\x2c\x77\x18\x63\xbc\xf6\x46\x78\x15\x75\xd8\x59\x34\x4e\x0e\x5d\xb7\x73\x5f\x6d\x43\xb3\x46\xf5\x7c\xa7\xc0\xc4\x3b\x2d\x12\x84\x59\xf1\x2a\x85\x1a\xb8\xbe\xfd\x34\x99\x90\x16\x1d\x03\x5c\x51\xfa\xa7\x56\x01\x6c\xee\x98\x4a\xf5\xc2\x29\x60\xc8\x84\x82\x8d\xd9\x6c\x47\x6d\xf9\xc4\x39\x1f\x7a\x6d\x26\x6a\x5d\xa4\x67\xf6\x62\xf8\xf8\x5e\x53\x98\x33\xd1\x0c\x15\xd3\xf3\xd4\xda\x54\x5b\xc3\xfb\x7f\x34\xd7\xd7\x26\x16\x61\xad\xfe\x5e\x5b\x19\xd5\x55\x6a\xee\xe3\x01\x99\x34\x35\x8f\xcc\xac\x5a\xf2\x39\xf7\xc5\x5d\x24\x20\xa8\xd2\xd2\xc6\x98\xee\x59\x83\x7c\x9f\x9b\xac\x18\x4f\x49\xae\xd7\x81\x58\x4f\x4f\x8b\x0e\x9c\xf6\x55\xda\xd5\xbd\xf2\x4f\x3a\xd0\x7f\xf3\x09\xff\xf4\x61\x31\xd8\x5d\x0c\x64\x57\xd1\xf0\x86\x10\x2f\x8d\x78\xab\xbe\xc7\x0c\xc9\xdd\x6b\x19\x3e\x47\x53\xd2\xf7\xf4\x44\xb7\x56\xbb\xde\xa9\xbf\x9c\x9e\xea\x2d\x03\x4e\x67\xe5\x42\xe5\xd7\x2f\x09\x24\x2f\xaf\xe9\x0f\xf9\x34\x13\x1b\xa4\x95\x6f\xf5\x0e\x15\x4b\x2b\x13\x7d\xf4\x58\x5a\x7b\x62\xec\x97\xc1\xa7\xad\xfe\xc8\x45\xcd\x05\xeb\x3d\xed\x5b\x43\xdf\x48\x15\x11\x2d\x45\x2a\x85\xaa\xec\x5b\x45\xe1\x60\x20\x8e\x1c\xe8\x71\x0f\xb7\x42\x33\xe6\x56\x47\xdc\xf6\xe5\xa9\x05\x00\xbe\xfb\x2d\x72\x0a\x3d\x97\x3f\x0d\x4a\x9f\x16\x8f\xa9\x75\x11\x3f\xd1\x31\x92\x55\x8e\x6e\x22\xef\x8b\x3b\x27\x84\x58\x2b\xc7\x78\x90\x76\x7f\x3f\x00\xe3\xe0\x8f\x1d\x4f\x5c\x22\xd5\x1d\x33\x4b\xed\x96\x8e\x91\xd3\x19\x95\xb8\x8e\xe1\x17\x05\xa9\x49\x73\x11\xa7\x45\xcf\x49\x23\xe4\xd5\xb8\xf4\xed\x47\x2b\x6a\x2d\x7f\x3c\x84\x36\x8a\x85\x3c\x08\xa7\x18\x9a\x8e\x7d\x78\x1a\x9a\x56\xfa\x7b\x9b\x4f\x6b\xd3\xda\x52\x40\xe8\x55\x4f\x76\x66\xd1\x75\x96\xb8\xed\x53\x12\xd7\xa8\x48\xed\x2d\xaf\x0d\xfc\xbc\xf5\xfc\x4a\x79\xde\xfc\x4b\x27\xfc\xd3\x87\x15\x4f\x59\xfc\x91\x7f\xb3\x9f\x61\x5e\x83\xeb\x62\x19\x8b\xfb\xc1\x92\xfb\xaa\xb7\x5b\xcd\xfb\xe2\x07\xcd\x8f\x9a\x02\xb4\xe4\xcc\xa5\x9a\x15\x9a\x07\x71\x8a\x5b\x65\x6e\x85\x86\xdc\xdb\x91\xf6\xb5\xeb\x0d\xcd\x92\x13\x73\x8c\x9e\x59\xdc\x24\x56\xf0\x21\x61\x91\xdc\xb1\xf7\xa0\x5f\x68\x1e\x69\xe7\x8f\xa7\x43\x2c\xbe\x95\x63\xdc\xd6\xa2\x4d\x92\x65\x97\xe6\x68\x62\x20\xdf\x23\x74\xb5\x3a\xca\x93\xc4\xd2\x94\x1d\x5f\x0e\xa7\x15\x9a\xf1\x7e\xa3\xec\xd5\xa3\xd4\x42\xaa\xb4\x58\x3a\x0b\xd4\xb7\x69\x95\xcd\x47\x27\x23\xb0\xe3\x49\xbe\xe0\x78\x28\x2e\xdf\xb7\x4e\xf6\x2c\xbe\xab\xa3\x9d\x4f\xee\x6e\x6e\xa7\xb0\x5f\x2d\x79\x82\x0c\x62\x86\x6f\x5a\x61\x26\x35\x59\x4a\x8a\x23\x34\x57\x26\xc5\xe5\xad\xce\x37\x28\x3a\x5b\x99\xd3\x89\x69\x8f\x77\x16\x9b\xe2\xa2\x2b\x22\xd2\xfa\xa4\x50\xb3\x9e\x8e\xfb\x7c\x99\xc6\x5f\x4d\x77\x67\xc0\xd7\x26\x89\x00\xd3\x60\x5e\x11\xaf\xc1\x21\x68\x51\xab\x34\x97\x06\xf6\x77\x06\x7c\xee\x3d\x2f\x03\xb3\x88\x27\xbc\x2a\x54\x7f\xff\x81\x62\xcc\x97\x23\x3d\xe7\xef\x9a\xf0\x4f\x1f\xfa\xd9\x70\xde\xcf\x97\x03\x97\xd1\x52\x3b\xe4\x2d\x50\xa5\xb1\x68\xf2\x7c\x88\x47\x2d\x88\xa5\xe9\xb2\x3f\x59\x92\x81\x81\x1e\xf9\x54\x03\x9f\x63\x40\x71\x55\x7a\xf9\x3d\xd2\x49\xda\xa9\x3e\x72\x40\xf1\x7c\x8d\xb4\x0d\x26\x9d\xd4\xfc\x5e\x6d\x92\x17\x01\xdd\xe8\x5b\x3d\x73\xbf\x79\xcf\x4f\x8e\x35\x26\xfa\x16\x85\xa0\x65\x12\x5b\x63\x76\xaf\x94\xc1\xe0\x4b\xba\xb8\x4e\xae\x72\x36\x39\x4e\x16\x17\x57\x74\xe6\x12\x4b\x53\x57\x75\xd6\xf8\xbe\x5a\x7d\x66\x17\x1b\xa7\x19\xf1\xda\x21\xcd\xd3\x3d\x51\x47\x1a\x8e\x46\x3d\x19\x93\x4f\xab\x23\x4a\x89\xe2\xfb\x77\x9f\xbc\xcc\x3c\xc8\xe9\xa2\x6c\xda\xf1\x7c\xc8\xd9\xea\x2b\x88\xf3\x9c\x5e\x34\x1d\xcb\x58\xee\xf5\xb8\x9f\xa7\x43\x79\xa9\xa5\x22\xab\x0e\xde\x0b\xd1\xf8\xc5\x37\xfa\xf7\x7d\x7c\x12\x31\x16\x19\xd4\x94\x77\xdd\xbc\x6e\x8e\xd9\x3d\x17\x35\x59\x42\x28\x93\x27\xc3\xd4\xbc\xb9\x9e\x44\xd5\x7b\xd5\xb5\x72\x92\x92\xbb\xbf\xea\x77\x24\x1d\xe4\x25\x6e\x15\xed\x76\x67\x10\x1a\xf0\xb5\xa6\xd3\x9c\x33\xcb\xe8\x78\x8c\xfa\x7e\x04\xe5\xd7\xfb\xdd\xef\xff\x81\xa7\xf6\xef\xf0\x9f\x1c\xd6\x09\x67\xed\xd2\x57\x13\xfb\x10\x34\x50\x47\x30\xdf\xb1\x6e\x03\x95\xb8\xc8\x1c\xa5\x9e\x99\xa2\xaf\xbc\xfb\xac\xba\x3e\x34\xed\xfa\x95\x05\xdb\x2f\x67\x68\x67\x27\x1e\x78\xc9\x0f\xde\x27\xbc\x80\x5a\xa8\xb7\x6b\xcb\xb6\x7d\x9a\xb2\x97\x53\xfc\xf3\x55\x50\xa7\x1b\x4f\x2a\xf0\x92\x7d\xe3\x43\xb2\x9e\xf8\x61\x3c\x2f\x1a\xf5\x91\x22\x79\x74\x3d\xc9\x64\x43\xf6\xfa\xbd\x1e\x45\xdd\xeb\xd2\x79\x33\x48\xa9\xff\xee\x27\x57\x88\xfa\xc5\x1c\x8f\x45\xd6\x60\x72\x56\x89\x7c\xaf\x7d\xce\x54\x00\x04\xbc\xd1\x7c\x30\x02\xaa\xa9\xd7\xa2\x5e\x90\xb4\x13\x2e\x77\x78\xd4\x64\x5f\xbb\xb7\xea\xc6\x93\x5b\x19\xf9\x3a\xb8\x9e\x07\x05\x0d\xd7\x14\x99\xdc\x2d\x4a\x9f\x7d\x2a\x79\x4e\x6b\x58\xa5\xa3\x4d\x1b\xf9\xc1\x2d\x67\x9d\xf5\xd4\xa9\x7b\x3d\x19\xd5\xa7\x86\x55\xef\xfd\xb5\xa6\x3e\x87\x1c\x8d\x90\xa5\xca\x13\xbd\x26\x47\xc6\x5b\x9f\xfd\x05\x65\x7d\xd7\x7c\xbc\x91\xbc\x8d\x9a\xc5\x9d\x28\x28\x15\x9c\xfd\x10\x89\x4b\x35\x56\xa6\x71\xfc\xae\xfc\xc4\x1e\xef\xf1\x37\x15\xd1\x7d\xaf\x9d\xfc\xfc\xa5\x18\xff\xe9\x43\xff\x95\x3b\x26\x74\x2e\x3e\x27\xdf\x93\xa0\xa9\x16\x43\xff\x91\x2e\xbc\xef\xf9\xec\xd5\x23\x42\xb7\x9e\x7d\x73\xef\x33\x49\x70\xbc\x57\x11\x44\xfd\xde\x53\x64\x35\x20\xe9\x79\x1f\x33\x17\x9e\x28\xe2\x63\xf4\xe0\xf3\x55\x24\x67\x78\xed\xf5\x1c\x5e\xae\x92\xea\xef\x71\x34\x47\x93\x52\x7c\xf5\xbb\x37\xfb\x44\xb0\x0b\x8d\xb0\x5e\xc6\x52\x74\x1d\x14\x85\x23\x8f\x4c\x3b\xf1\xc3\x78\x32\x89\x44\x23\x9f\x48\x4b\x3e\x25\xf5\x27\xb4\x28\x9f\x4f\x46\xe9\x9c\xfb\xf2\x99\x9f\x6c\xa1\xfd\x94\xa4\xdb\x6f\x9b\x67\x78\xcf\x8f\x2f\xc4\xeb\x35\xba\x4e\x0a\x4f\x5c\xf1\x93\xe1\x5f\x8f\x4e\xf6\xbb\x68\xf4\xe6\x26\x37\xee\xfb\xed\x78\xe6\xec\x81\xff\x79\xad\xd0\x84\x61\xe3\xdd\xc9\x57\xce\xef\xd4\xdf\x89\xa3\xde\xef\x7d\xe2\xbb\xd2\x89\xfe\xb1\xda\x44\x51\x26\xd9\xcc\x6f\x0c\xe3\x34\xf2\x6b\x1a\xee\x3f\x8e\x9f\xb8\x1f\x32\x92\x1f\x49\x49\x91\xd8\x0d\x9e\x9f\xb9\xde\xab\xb6\xf1\x5d\xef\xfc\xe5\xaf\xf6\x79\x9f\x8b\x4b\x93\x4d\xfa\xf8\xe3\x45\x50\xe6\xce\xbf\x62\x8c\xff\xf8\x61\x07\x51\xaf\x8b\x29\xfc\x5e\xb5\x91\xc4\xe2\x0e\x32\xa4\x1c\x99\x3e\x1e\x6e\xf6\xeb\xfe\x89\x67\xf2\x55\xc9\x3d\xd5\x6f\x07\x79\xd8\x1d\x19\xc0\xec\x68\xbc\x7f\xa2\x3a\x99\x3c\xd3\xec\xda\xbf\x3d\x3c\xfe\x8d\x6a\x38\x4f\xba\x67\x3d\x17\xc7\x4b\xe6\x14\xb3\xbb\xbf\x27\x0f\xa2\xa3\x78\x10\x4c\x43\x3c\x57\xbd\x4f\x97\xc7\x33\xdf\xc5\x30\xdf\x6b\xe5\xc6\xe7\x4c\x7d\x80\x2b\x7f\xef\xcd\x73\x2e\xff\xa6\x7a\x58\xbf\x72\x70\xef\x9e\xd5\x13\xcf\x9b\x35\xeb\xb1\x04\xe6\x0b\x11\xd4\xef\xf9\x31\xc6\x93\x65\xf0\xb9\xc4\x64\xfe\xa5\x4d\xe9\x7d\x49\x0f\xe5\x78\x10\xd6\x6b\x7b\xd4\xaa\xdc\x61\x7e\x4c\xc5\xcc\x48\xc7\xfa\xf5\xf4\x57\xde\x44\x94\x98\x19\xcf\x50\x81\x32\x84\x84\x47\x7d\x0a\x08\x0a\x3b\xa7\x28\x43\x7f\x4f\x11\xe1\xbc\x22\x83\xb6\xee\x29\x21\xc1\x94\xe5\x01\x5c\xbb\x28\x5a\x31\xa7\xa4\x5e\x33\x8b\x35\x8b\x40\x00\x50\xb0\x16\x3b\x8d\xa5\x1d\x2c\xc6\xaf\xf6\x6d\x2a\x6e\xbc\x4f\xa1\x79\xa9\x10\xf4\x3d\xe0\x9c\x8a\xb3\x63\xc4\x86\x55\x1f\x3a\x37\xb7\xbe\xbf\xba\x6b\xff\xf4\xa1\x1f\x13\x9a\x3a\x63\xb0\x06\x61\xc8\x44\xd9\x54\x4a\xbe\xb2\x37\xbd\xef\x83\xca\x4b\x25\x86\x64\xd8\x01\xcb\x7c\xd2\x6f\x5f\x1d\x6d\x53\xa6\x32\x3b\x81\xcf\xb1\x5b\x9b\x40\xcf\x8b\x0e\xc6\x05\xc2\xcf\xd6\x74\xdc\xfe\xac\x75\x1c\x41\x0e\x98\x91\x96\xe1\xf7\x1d\x8d\x42\x1a\xf7\xc0\xcf\x67\xd0\x2b\xb2\xc1\x7e\xd2\x78\x77\x3e\x90\x07\x4a\x9d\x4f\x11\xf6\x37\xc1\xe6\x9e\x35\x0d\xed\x67\x5c\x57\xc8\xe0\xf9\x12\x06\xe0\x6d\xc0\xd4\xb9\x12\x84\x7d\xe0\xb8\x1a\x2a\x3f\xc5\xd2\xef\x30\x4b\x63\x35\x31\xee\x79\xd2\x01\x90\xde\x67\x50\xfd\x34\x21\x1c\x7a\xf6\xf7\xf4\x11\xfb\x38\xae\xbd\xfa\x7e\x0f\xff\x29\xcb\x61\x3e\x25\x48\x8d\xde\xaf\x11\xa9\x97\xc0\xaf\x94\x31\xeb\xc9\x47\xb0\xb8\x03\x23\x0c\x4a\x2a\x4b\xd3\xe8\x5b\x44\x73\x3c\x9d\x95\xdf\x56\x47\x4b\x14\x95\xe5\x5f\x2d\xf9\xd7\xee\xf4\x92\x2b\x1a\xb4\xef\x23\xa1\x95\x10\xb5\x9f\xc4\x3b\xd6\x7c\x40\x66\x98\x52\x3c\x1e\x3a\x34\x90\x82\xa7\x4a\x6b\x5b\xdd\xb2\x1c\xb2\x98\x8a\xdf\xeb\xa1\x5b\x6f\x43\x78\x25\xdf\xfb\x92\xd0\x56\xb3\xf8\x9b\x62\xfc\xa7\x0f\x31\xe3\x69\x82\x6a\x55\xd0\x06\xb5\x9e\xe5\x12\x57\x81\xfe\x6f\x4f\x02\x35\xe2\xef\x35\xf2\x68\x11\x9a\xf4\x95\x29\x32\x7e\xd4\x58\x3f\xab\xc7\xa2\x66\xf4\x3d\x53\x22\x29\xf9\xd7\x9c\xeb\xd8\x51\xe6\xd4\x9b\x95\x43\x62\x0f\x06\xb5\x34\x61\xad\x29\xb1\xb7\x00\x77\x4b\xc2\x20\x04\x0e\x09\x24\x4c\x06\x69\x67\xac\x17\xe0\xf7\xfa\xb3\xa0\x01\x5a\xb4\xbe\xf1\x82\x5c\x00\xa0\x50\xe5\x93\x08\x5c\x0c\xda\xe3\x19\xce\x11\x2a\xd9\xf1\x5b\xba\x1f\x0c\x56\xcd\x08\xb6\xb2\x93\xa1\x6c\x0c\xe6\xb2\x8a\x2a\x9a\xa3\xa7\x39\x3e\xf3\xd9\xe1\x3c\xeb\xa6\x87\x3c\x43\xa8\xea\xba\x37\x38\xa4\x62\xc5\x7e\xab\x2b\xf3\xbc\x4f\x52\xf0\x3b\x1a\x96\xad\x5d\x73\x00\x21\xe7\x4b\x63\x6c\xa8\xf2\xa0\x24\xa7\x5c\x99\x53\x72\x45\xa1\x26\x5e\xab\x78\xbf\x6a\x7f\x54\x1b\x7d\x7b\x54\x18\xe3\xd6\xeb\xbb\x88\xd7\xc6\xae\x5f\x62\xbc\x64\x83\xb2\x0c\xb1\x14\x1d\x11\x8e\x77\xeb\xf3\x57\x98\xeb\xd9\xc2\x3d\x5b\x59\x89\x8a\x29\x79\xf0\x8e\x50\xbf\x10\x4a\xb1\xe9\x55\x52\x1e\x0f\xd5\xf4\xed\xe5\xd6\xee\x1d\x7f\xc5\x13\xfe\xe9\x43\x3f\x6f\xca\xf5\xa9\x98\x40\x30\xe1\xa3\x5a\xca\x1e\xfe\x95\xd9\xc7\x9c\xaf\xd4\x26\x51\x4d\x43\x11\x52\x64\x25\x59\xd3\x35\x8b\x29\xe3\xd2\xc3\xb3\x9e\xbd\x3a\x9c\x3f\xd6\xdb\xa3\xfb\x7f\xf3\xa9\xa1\x3f\x3d\x60\xb3\xe9\xc0\x64\x8e\x26\xdf\xbb\x74\x22\x31\x99\xfb\x24\xdd\x3f\x6d\x3d\xdf\x79\xf8\xf3\x7d\xd6\x4a\x9a\x0a\x7f\xc1\x22\xbb\xa7\x7b\xb6\xe7\x7e\xff\xe2\x43\x3d\x5f\xf3\x51\x2f\x5a\x2b\x08\x35\x9e\x37\xdd\xf9\xbf\x5b\x84\x6c\xce\x4f\xa6\x79\xbd\x7a\x06\x3e\x38\xf0\x7f\xa1\xc3\x32\xbf\xdf\x33\x0f\x13\x94\x57\x35\x79\x8e\x36\xbf\x41\xc4\xf7\x13\xeb\x23\x9d\x7c\x29\xac\xc8\x11\xe4\x24\x42\xc7\xd5\x2e\x7d\x91\xdc\x57\xa3\xf4\x90\xec\xcf\xd7\xac\x72\xf3\x9d\xe2\x41\x79\x65\x54\x77\xff\xfb\xf5\x2b\xdf\xb4\x5d\x27\x15\x13\x5f\xb0\x30\x24\x78\x40\x47\xba\x37\xbd\x25\x49\x60\x5a\xc5\xb1\x0f\x01\x2a\x88\x5a\xa5\xc8\x4a\x26\xd1\xd8\x2a\xb9\xcb\xef\x89\xe0\xe3\xcb\xdf\xef\x55\x74\x59\x8a\x51\x07\xc2\x72\xeb\x2d\xd9\x0e\x1c\x47\x6d\xf2\x7c\xf9\x16\x0c\xdf\xc0\x7c\x57\xfe\x0d\x13\xfe\xe9\xc3\xba\x1b\x05\xab\xf2\xf4\xa5\x8c\xde\xf7\xba\xe6\xee\x33\x01\x12\xba\xbe\x0e\xba\xcf\x14\xac\x37\x4e\x8c\x11\x4e\x57\xe5\x12\xdd\x52\x7a\xa6\x91\x4f\x51\x85\x92\xc1\xd3\xec\xe4\x1d\xcf\x4b\x6e\x0b\x3a\xb6\xf0\x7f\x53\x29\x40\x44\xc5\x89\x77\xb6\x7f\x33\xe2\x65\x0d\x8a\xfe\xc1\xcb\x9a\xd5\xeb\xf4\x7b\x16\x50\xbc\xe9\xd3\x53\xfa\x8e\xdd\xf5\x16\xaa\x89\xb7\x76\xc4\x21\x21\xfd\xd5\x7b\xad\xa3\xb0\x1a\x3f\xdd\x05\x2b\x40\xec\xf9\x32\x0e\x65\xfb\x55\x69\x5b\x2f\x43\xf1\x16\x1b\xf5\x92\x8f\xcd\x8c\xb9\xbf\xde\x62\x46\xd8\xf4\x72\xc3\x5f\xba\x3f\xf3\xe5\x58\x71\xcc\x0b\xff\x97\xfa\x9a\x52\xa6\xef\x74\x80\x1f\x45\xb0\xfe\xe0\xab\xae\x1e\x8c\xa1\xcf\x6a\x16\x3a\x73\xbe\x7e\x0f\xf5\x4e\x9e\x8c\x17\x33\xf4\x91\x69\x2e\xec\xc5\xd1\xa3\x78\xc6\x3b\x3a\xb0\x9b\xd2\xa4\xd9\x37\x41\x04\x96\x7e\x83\x7c\xee\x53\x74\x38\xbf\x07\x26\xb5\x22\x07\x85\xd7\x91\x82\x01\xe5\x44\xbf\x4e\x61\x97\x29\x43\x8c\xfd\x3d\xce\xbb\x03\x16\x4c\x67\x52\x5f\x4b\x32\xd9\xc9\xad\xbe\xea\xaf\xa3\xf4\x3f\x7e\x88\x52\x83\x3f\x36\xf9\x41\x9d\x68\xcc\xef\x48\x62\x09\xab\x5f\x56\x91\x3b\xfc\x93\x54\x7e\xf6\x42\xdf\x3e\xba\x04\x49\x8d\x13\x4c\xa7\x77\x98\xbf\x33\x71\x3b\x8c\xaa\x44\x7e\x6c\xcc\x74\x39\x7e\xfa\x73\xbe\xfd\xfb\x73\x32\xac\x5b\xa5\xe1\xcd\x5c\x7a\x4b\x2f\x2f\x4f\x14\x75\x09\xf0\x17\x0d\x45\xb6\x4f\x11\x78\xe5\xd8\xf3\x5d\xe3\xde\xc4\x03\xe3\x29\x1a\xce\x77\x88\x79\xef\xff\xae\x51\x0b\x79\xf4\xf0\x7d\x77\xe2\x7f\xa5\x13\xce\xe3\xf8\x65\x24\x8f\x0e\x9f\x67\x1a\xc1\x5f\xbe\xb6\xc3\xc4\xac\xc7\x67\xbc\x76\x6c\x7a\x12\x6f\xc5\x20\x81\xaa\xb7\x73\xf1\x75\x0d\x4a\x69\xa1\xeb\x20\x23\xd9\x53\xb1\xa2\x59\xef\x1b\x78\xd5\x02\xca\x70\x53\x5c\x51\xf7\xdd\x09\x9f\xf7\x92\xfd\x7c\xdf\xcc\xd5\x77\x8a\x5d\x3e\xef\x77\x7c\xbb\xf9\xeb\x01\xdb\x57\xbd\xf0\x75\x7e\x4a\xcc\xd8\xdf\xa9\x43\xdd\xa0\x6f\x21\xa3\x7a\xee\xc0\x26\x8a\x8b\xc4\x4e\x7e\xaf\xb5\x1c\x1a\x42\xb6\x37\xb7\x4a\xc9\xa7\xe3\xf1\xd3\x23\xbd\xde\x6a\x4c\x88\x76\xb3\xb0\xf2\x7b\x8d\x1b\xcf\x14\xea\xef\x9a\xf0\x4f\x1f\xfa\xaf\xef\xa9\xf8\xde\x93\xf0\xfc\x52\xa9\x6b\xf4\xca\x10\x94\x42\xc2\x11\x9f\xb6\xe2\x9a\xd6\x81\x49\x41\x70\x49\x74\xc5\x6f\x17\xe2\x41\x0f\x70\x61\x0e\x91\xed\x7e\x62\x05\xc3\x81\xc0\xd1\xff\x99\x1b\x71\x8a\xff\xb0\x50\x1f\x7f\xd5\x31\xa9\x10\x7d\x0c\x45\x06\xca\xf9\xbc\x08\xa4\xe8\x29\x1e\x4c\xf3\x61\x4f\xd2\x11\x4b\x51\x68\x60\x49\x15\x77\xff\xd6\xd4\xb9\xc7\x92\x3e\x47\x43\xee\xe7\x21\xab\x9b\xe2\xaa\xd3\x5f\xfd\x00\x4f\xc3\x75\xd1\x08\x88\x14\x99\xcc\xef\x1d\x89\xe8\x2f\x4a\xf5\x25\x51\x02\x2e\xab\xa7\xa4\x2e\x68\x19\x8e\x7c\x6c\x65\x7f\x33\x9b\xdf\xf4\x65\x70\x35\xd9\x52\xce\x43\x93\x52\xc5\xf4\xee\x45\x1e\xa1\xbf\x93\x31\x9f\x58\x3c\x5f\x57\x11\xfb\x92\xce\x5c\xfa\x39\xd7\xeb\xef\xaa\x7a\x76\x50\x45\x2a\x41\x25\xf5\x3c\xd6\xdc\xf9\xe5\xe9\x42\x3d\xde\x42\xcf\xf9\xfa\x68\x31\xfa\x6e\xf3\x29\x53\xbe\xd4\x88\x78\x8f\x8c\xf5\xc7\xa6\x65\xbe\x4e\xce\x6f\xe2\x1d\xd5\x14\xd7\xaf\x10\xb3\xd5\xb5\xd7\x5e\x75\xcd\xc8\x41\x03\xc6\xb7\x91\xfe\xb7\x86\xde\x4e\x3a\x4f\x47\xd7\x96\x14\xce\x7f\xff\xa9\xfd\x3b\xfc\x27\x87\xb8\xf5\xa2\x6e\xd6\x80\xba\x85\x97\x5e\xd9\x78\x5a\x65\xf3\x19\x10\x4a\xa5\x6f\x09\x7b\x2a\xa1\x77\x51\x2d\x0a\xff\x56\x64\x58\xac\x56\x6a\x48\x22\xea\xe1\xdf\xbd\x9b\xe7\x38\x87\xea\x92\x8a\xfe\x5a\xaf\xd7\xfa\x59\x9e\xe8\x84\x2c\x3a\x46\xbd\xff\x0e\x76\x4d\x83\xb1\xe2\xd4\xbf\xbd\x5e\x5d\x73\x3d\xcf\xe5\xfd\xec\x97\x9c\x7c\xbf\x27\x2e\x4f\x39\x6c\xbd\x8e\xeb\x9e\xef\xc9\xa6\x22\x19\x1b\x4c\xee\xb4\xd8\xe2\x35\x4a\xa2\x71\xbe\xae\x83\x9e\x0b\xcf\xbe\x62\x31\x51\x90\xd8\xdb\xc3\x9e\x98\xf7\x19\x56\x7d\x3a\xa0\x94\x01\x87\x92\xcb\x47\xf0\x84\x44\x7b\x51\x9d\x5c\x2f\x09\x4a\xe4\x7a\xa3\x1f\x3e\x26\x79\xe6\xe9\x17\x2f\x26\xd1\x97\x45\x10\x66\x86\x3e\x73\x56\x4f\x13\xe7\xbd\xf4\x54\xac\xc3\xc4\x6e\xeb\x6e\xa2\x3c\xbd\x47\x2e\xea\x06\xec\x22\xfa\xca\x4d\xcf\xf5\x09\xb3\xec\x47\x24\x77\x0c\x16\xe7\xd9\xcc\xbc\x18\x8f\x1e\xde\xd8\x72\x14\xf2\x09\xc3\x1a\x38\x07\xa9\x16\x3a\xaf\x6b\xf7\x9a\xbc\x76\x29\x74\x5c\x1c\x33\x9a\x79\xff\x2a\xcb\x12\x9d\xe7\x5c\x4f\xf6\x7d\xe3\xc8\x0f\x03\x8c\xb3\xe5\x55\xea\xfb\xbb\x26\xfc\xd3\x87\xf5\xcc\x12\x3e\x1d\x44\xff\x62\x70\xa4\xce\x3f\x9e\x7e\xe0\xaf\x2f\x3b\xf5\xd1\xf5\x76\x44\x33\x8d\xd5\x73\xbc\x8e\xea\x67\x67\x44\x26\xc9\x59\xf4\xd0\x42\x78\xec\xed\x61\xcf\xc2\x48\x2a\x9e\x89\xd3\x37\xf4\x17\x8a\xf2\xbf\xf9\x6b\x6c\xa8\xfb\x99\x96\xbb\x28\xfc\x28\x10\x0c\x7d\x3c\x93\xe9\xd9\x54\x5e\x5c\x6c\x15\xf1\x86\x2b\x4e\xbe\xf5\x82\xd2\x3b\x0b\x3b\xb3\x65\xde\xef\x19\x11\xc4\x4f\xf0\x95\xcf\xc1\xd9\xbd\x18\xb2\x3d\xed\xb8\xdc\xe7\x8a\xc2\x5f\xfa\x94\x2e\x8b\xd9\x55\x07\x33\xf8\x3d\x0b\x26\x9a\x93\xf4\x09\x9e\x1f\x3c\x49\xa6\x04\x06\xe8\xa4\x5c\xa9\x53\x21\xcf\xdb\xd1\x7b\x45\xab\x67\x15\xf5\xb1\x7a\x66\x61\xb1\x71\xc7\x5b\xca\x74\x2b\x02\xea\xb4\x5e\x47\xb7\xc7\xc9\x57\xfa\x9f\x0a\x34\xa2\x19\xb3\xf1\xce\x47\x6d\x30\x7a\x92\x0f\xbd\xb2\x7e\x5f\x59\x5b\xb7\xef\x47\x37\xd8\xc0\x53\x0f\x3d\xa9\x53\x17\x26\x47\xff\x98\x38\x71\xb6\x9f\xb1\x10\x94\xbd\x28\xea\x7b\x90\xeb\xd9\xf4\xe1\xf1\x50\xdc\xf1\x0f\xc1\xfe\x13\xb1\xe5\x64\x9f\x56\xdb\xf0\x17\xd4\x1f\xa6\x53\xea\xfc\x55\x5d\xfb\xc7\x0f\xfd\x57\x66\x97\x34\x13\x7e\xc0\xa2\xad\xf7\x9b\xa9\x73\x77\x5e\x1d\xcf\x94\x12\xe5\xbf\x56\xd2\x2e\xca\x3e\x75\xaf\xaa\x7a\x40\xcb\x87\x33\xe2\x1c\xcf\x46\xb2\x02\x30\xb0\xec\xc4\xac\x0e\x07\x2e\xd8\x19\x80\xee\x71\x9c\xf5\x3a\x14\x9f\x11\xd3\x53\x66\x9e\x0a\x64\x08\xeb\xe7\xb9\x20\x52\x1f\xf7\x19\x4f\x51\x8d\x76\xaa\x5f\xbf\x1d\x51\x72\xeb\xb9\xa8\xa6\x23\x82\x75\xf3\xec\xa7\x37\x30\xcf\x73\x88\x90\x6d\x57\x92\x0b\x11\xbf\x32\xc7\x96\x19\x39\x93\x7a\x4a\x06\xa3\xa7\xf5\xb4\x52\xf1\x59\x45\x95\xfa\x39\xe5\xef\xd7\xf1\xa0\x8c\xb8\xdf\xa8\x98\xf8\x39\x7b\x5b\x2d\x9f\x12\x23\x1a\x71\x7e\xcf\x06\x67\xd3\x66\x30\x22\xb8\xf3\x69\x24\xe6\x43\x3e\xe6\x92\xad\xeb\xe8\xc4\x59\x88\xf9\x64\x6c\xab\xd9\x96\x55\x61\x3f\x15\x5c\x2d\xe2\xee\x19\x64\xe6\xfc\x76\x0c\x33\x4f\x91\xa8\x93\x73\x7c\x1a\x89\xd1\x7f\xa9\xc0\x7a\x03\xa5\x56\x29\xaa\x7e\x69\xdd\xa3\x45\x1f\xf9\xf2\x3e\x4c\xbc\x8f\xcc\xa3\x6f\x75\xcb\x14\x5c\x0a\xba\x5f\xcf\xfa\x98\xb2\xc6\xbe\xe7\x58\x72\x31\x2b\x9e\x86\xde\xdf\x42\xe4\x3f\x7e\x88\x4d\xc1\x68\x27\x40\xe8\xf4\xe9\xfd\xa8\x5a\x0d\x05\xc1\xf5\x20\x1c\xe7\xff\x5c\x62\xca\xd7\x1b\x01\xd8\x1b\x4e\xec\x03\x06\xa3\x4f\xa2\xf7\x59\xb9\xb6\x57\x15\xa0\x65\x2a\x4f\x37\x75\x3a\xae\xf1\x50\xba\x0d\x22\xca\xd7\x37\x4c\xf7\x88\x32\x8a\x6a\xdf\xd6\x6f\xbd\x41\x44\xbb\x63\x8c\x75\xc4\xb8\x47\xd5\xe1\xae\x67\xd3\x0a\x1a\x74\xda\xff\xec\x62\x14\x9e\x3a\x22\xd7\x29\xc8\xca\x69\x90\x3e\xfc\xd5\x51\x97\x37\x17\xb7\xbc\xfb\x2f\xb6\xae\x5b\x17\xc2\xee\xe8\x3f\xb6\xd8\x7d\xcb\x68\x1c\x9a\x64\x87\x4e\xe1\x79\xda\x06\xea\x9a\x33\x9f\x44\xa3\xbc\x7f\xae\x97\xd9\x67\x18\xf5\x14\x08\x74\x34\xaa\x22\xb0\xa9\xef\xdf\x88\x32\xf3\xf7\x34\xe7\x64\x55\x9e\xc5\x9c\x1c\xc7\xf7\x54\x9a\xcd\x71\x73\x3f\x6f\xd1\x6f\xa0\x0e\xfd\x5d\x91\x55\xaf\x27\x5f\xd2\xaf\xe6\x41\x33\xe0\x4c\x63\xe9\x17\xbf\x6a\x36\x7a\x34\x67\x3c\x13\xe0\x72\xb2\x7a\x94\xfa\x53\x68\xf0\x9d\x6f\xac\xf7\x77\x80\x49\x5b\xa7\x17\xb5\xea\xfb\x80\xb1\x5e\xb1\xc7\x54\x49\xd2\x3d\xf9\xf2\xb6\xb5\x9d\x52\x5e\x0f\x04\xc8\x6a\xf6\xa9\xec\xbf\xff\xd4\xfe\x1d\xfe\x93\xc3\x9a\xcf\xa9\x04\x16\xbb\xe2\xd7\xff\xa8\x74\x48\x1b\xa9\xb2\xc3\x17\x4b\x5d\x6d\xb3\x12\x55\xf5\xef\x63\x69\x3f\x81\xba\x73\x8e\x73\xf5\xa1\xbd\x71\x18\xae\xde\xe7\x2c\xf0\xa2\xdc\x23\x8e\x7d\xba\x23\x66\xc1\x1a\xcb\xba\x01\xfd\x1d\x7c\x49\x18\xcd\x45\xef\xda\x11\x3a\x23\xf3\xb9\xb4\xe4\xab\x61\xfc\xd6\x0e\x07\xf1\xd6\xb7\x9f\xca\xfa\xd1\x2d\x5b\xde\x1f\x16\xb5\xe2\xd9\x27\x82\xa0\x9e\x2a\x9b\x48\x9e\x19\xf2\x2a\xae\x49\x85\x9e\xde\xf4\x9c\x36\x17\x83\x4d\x67\xee\xc8\xb0\x1f\xd0\xef\x81\xf1\x5c\xfd\xd9\x9f\xd7\x7e\xf0\xcb\xcf\x09\xc5\x1c\x89\x31\x19\xec\xeb\xb4\x1e\x94\x4e\x86\x59\x0c\x1f\x0a\x06\x98\x81\x7e\x88\xb0\xa7\x27\xdd\x97\x14\x4b\x54\xf8\x2d\x7c\x27\xbb\x64\x31\x9e\xcf\x42\xcf\xe2\x38\x77\x3c\xe5\xa4\x67\xbb\x5d\xa2\x77\x6b\x6f\x3d\xc5\x9a\x57\x01\xba\x3f\x2b\x96\x0a\xc7\x8b\x8e\x7e\xcd\xe5\xdc\xc9\x7c\x3b\xbe\x2c\x46\x9c\x67\xcc\x75\xfa\x5b\xfd\xb5\xfe\xee\xcf\x62\x98\xb9\xa9\x73\xcb\xa7\xac\x1d\xaf\x16\xf2\xe9\xb8\xe2\xf2\x43\xd9\x71\xe9\x15\xdb\xbb\xfe\x82\xcd\xff\xf4\x21\x8e\xbe\xa5\x0b\xdb\xcb\xa2\xad\x32\xce\xb3\x4c\x77\xe2\xbe\xea\x5e\xb2\xe7\xcc\x87\xe7\xeb\xf5\xa7\x11\xa8\x93\x60\xa5\xb3\xc6\x01\xde\x1f\x20\xf4\xf8\x74\xf1\xee\xc7\x19\x80\xf1\x72\xbd\x4e\x62\xcf\xfc\xd1\x87\xc4\xf5\xc9\x29\x75\xd4\xd2\xa3\xc0\xce\x7a\x9f\x9e\x05\xfd\x7c\xe6\xb8\x34\x5d\x28\x29\xde\x07\x04\x4e\x46\xf1\x97\xa6\x9a\xb9\x33\x49\x39\xcf\xa3\xe7\xd2\x2c\x9b\xba\x16\xd6\xd3\x25\xa5\x46\x0c\x33\xee\xf7\x0c\xf5\xc8\xa4\x94\xf6\xd4\x89\x68\x03\xc8\x00\xdc\xa7\x69\xf4\x5b\xf9\x78\x9a\x10\xc7\xef\xab\xab\x43\x54\xf3\x51\x73\xa4\x09\x5f\xe3\xa9\xbe\xf9\xf4\xcc\xd7\x31\x39\x8c\xd4\xd1\xef\x8b\xd8\x83\x2e\xfa\x87\x3d\xe2\x8c\xf3\x34\xb1\x55\x65\x1e\xc7\xe0\x74\x56\x1f\xb3\xe8\xc9\x24\x96\xbe\xc2\x86\x6f\x9d\xdf\xfa\xa2\xec\x5e\xd2\x4a\x7c\x4a\x2a\x2c\xfd\x67\xf0\xa7\x1b\x8f\x27\x78\xdd\xe7\x45\x1f\x82\x36\xc3\xd3\x6b\xac\x97\x2f\xa6\x9e\x5b\xeb\xa9\xe7\x02\xc6\x7a\xcd\x19\x22\x43\xfd\x64\xfd\x5a\xd5\x9d\xfb\xfa\x3e\x11\x1b\xdc\xc1\xee\x79\x5a\xb3\x94\xab\xfe\xf6\x44\xfe\xe3\x87\x78\x4a\xc3\xe3\x7b\x59\x7e\x4a\xc9\xea\xe2\x19\xef\xa9\x7e\xd0\xbb\x9c\x3b\x78\x38\x9c\x05\xf2\x11\x33\xf3\xf5\xf5\xca\x10\xde\xa7\x15\xf4\xaa\x11\xfb\xa9\x2b\x89\x01\x18\x1a\x33\x90\xbc\x7c\xd0\x6e\xdd\x67\x28\x3d\x55\xbb\xb5\xea\x4c\x79\x70\x0e\x71\xd0\xe5\x7a\x3a\xc7\xd4\x82\xef\x7c\xcd\x02\xd7\xba\xf1\xab\x21\x74\xa8\x86\xb0\x4a\x66\x50\xef\xe4\xbe\xd5\xfe\x4f\x3c\xa3\xf5\x9e\x23\xd7\x0e\x7e\x69\x39\x0c\x99\xbd\x49\x41\x76\xfe\x0a\xbb\x53\x5c\x56\xb3\x7f\x2a\x02\xeb\xf9\x34\xc9\x8d\xa8\xb2\xc4\x8b\x16\x06\x02\x29\x54\x4f\xcf\x7d\xaa\x0c\x4e\x2e\xfa\xbc\xc7\xaf\x01\x3e\xa5\x37\x72\xed\xf5\x56\x09\xee\x90\x0b\x6f\xb4\xac\x84\xc9\xbb\xa1\x28\x9f\x7d\x34\x09\xc6\xa0\x1b\x57\x47\x25\x26\xd9\x3e\x3f\xbd\xa8\xd7\x6b\xce\xd3\x6a\x3d\x3d\x4b\x77\xa8\x7b\x32\x0e\x32\xac\x64\x6e\x29\xac\x8b\x0d\x76\xea\xcd\x1a\x4f\x2e\xa1\x43\xa4\x4b\x9e\xf2\x4a\x06\xaf\x45\x4c\x96\x5c\xc5\xd6\xf6\xb6\xbf\x7a\x62\x52\xca\x13\x1a\x26\xe7\xf3\xbe\x15\x30\x7e\x4f\x4c\x61\xbd\xe4\xc4\x4b\xc6\xfc\x85\x13\xfe\xe9\xc3\x62\x06\xb2\xb6\xfe\x98\x03\x94\xbd\x24\x51\x2e\x51\x33\x76\xa3\x31\xbe\xdf\x96\x69\xfe\xe8\xb6\x62\x82\xa4\x8b\x5c\x57\x00\x14\x81\x3a\x01\x1d\x8c\xc4\xf2\xd7\xa7\x10\x21\xd1\x88\xa3\x8f\xb3\xea\xd9\x4c\xd9\x48\x21\x34\x0b\xae\x20\xed\x3d\x04\x08\x59\x6c\x97\x1c\x65\x02\x18\x90\xfc\x9e\xb7\x49\x76\x34\x45\x4f\xd2\x00\x2f\xa5\xc1\x0a\x72\x25\xe9\x81\xfc\x9e\xd0\xa1\x2e\x87\x60\x2d\x75\xef\x2b\xbb\x13\x55\x1c\xcf\x6e\x31\x15\xec\xf8\x2f\xf4\x54\xb3\x9c\xf4\x81\xdb\xf2\x76\x5e\xc2\x72\xf9\x66\x7a\x01\xe8\x49\x76\xec\xdc\xd7\xd9\x66\xc8\xbf\xcc\x69\x87\xe6\xd8\xca\xc0\xba\xe7\x67\x47\x42\x72\x8e\x9b\x62\x09\x45\x97\x38\xf3\xe9\xbf\xf5\xf9\xfc\x6c\x3a\x66\x14\xde\x0e\x96\xe1\x6e\xd5\x17\x59\xfe\xef\xcb\xe7\xc5\x42\x55\xb2\x57\x16\x55\xc4\x70\x86\x8f\x59\xfb\xb9\x37\xd1\xad\xd2\xf4\xc5\x0a\x9c\x02\x76\x6c\xb9\xcb\xbd\xdf\x49\x00\xb3\xac\xcb\x7b\xe3\xa3\x3f\x1a\xf5\x83\xe9\xff\x4e\xd9\x64\x6e\x37\x43\x4e\x36\x7d\xcd\xe7\xd0\x86\xd2\x5c\x91\x9f\x3f\xe3\xf7\xeb\xc0\xf7\x74\x6b\xf9\xe2\xfc\x6d\x89\xfc\xc7\x0f\xbd\xe9\x3b\x0f\xc8\x56\xd7\x6f\x4e\xbf\xa7\xda\x78\xee\x8f\x94\x96\xef\xa3\xfc\x42\x43\x11\x86\x88\x1f\x5b\xac\x97\xa7\x7b\x13\xbd\xcf\xd8\x5f\xb1\xaa\xcf\xd7\x59\xac\x29\x82\x7f\xea\xa4\x5b\x98\xf2\xe3\xf7\x57\x5d\xad\xe4\x31\xf7\x10\x61\x3f\x9f\x05\xea\x49\xb4\x5b\x71\x07\xb9\x55\x0e\xce\xe1\xcb\xf8\xf8\x5f\xe7\x79\xf5\x36\xef\x1c\x43\x0d\x5f\xdb\x52\x4c\x7c\xd3\xf4\xef\x35\xdf\xc6\x28\x6b\xf6\x5c\xa8\x57\xcf\x1a\x8e\x0c\x1d\x07\x98\x8f\x63\xd2\x36\xc1\x50\xdc\x57\xc9\x17\xeb\x5f\x55\x52\x3b\xfd\x4a\x5e\x56\xe7\x39\xbd\xf5\x62\x49\xcf\x64\x70\xbf\x8e\xe7\x12\xcd\x73\xf7\xd0\x92\xba\x63\xe9\x87\x58\x2f\x87\x22\xfe\x66\x04\xff\xe2\x72\xe3\xec\x6f\x20\x26\xef\xdb\xd4\xd2\x4c\x0f\x61\xe1\x9e\xd6\x44\x5b\xac\xd7\x2a\xf9\x39\xb1\xf0\x66\x2b\xca\x30\x85\xe0\xd8\xf9\x2a\x9a\x94\x2a\xf9\x48\xdd\x7c\xbe\x0c\xb4\xa3\x7f\x23\xbc\xa7\x9b\xc4\xe9\xcd\xe2\x47\x39\x76\x73\x7f\xe8\x77\x7b\xff\xa6\x48\xf3\x7c\x82\xf5\x88\x94\x6d\x41\x86\xf7\x6e\x91\x10\x9d\xd8\xef\x74\x8c\x22\xbb\xf4\xdf\x7f\x6a\xff\x0e\xff\xd1\x35\xe1\xe8\x86\x99\xa5\x07\x88\x3e\xd8\x0a\x31\x6e\x60\x85\xec\x2c\xaf\x7f\xe8\x9e\x4d\x51\x44\x80\x30\x5f\xee\xfe\x3c\x0a\xef\x29\xa9\xda\x60\x07\x07\x84\xf3\x34\x97\x1e\x07\x44\xd7\x74\x3e\x27\xd4\xea\x13\xb2\xd6\x7d\x5e\x6e\xce\xae\xeb\xae\x33\x3d\x9f\x18\xba\xd7\x24\x39\x85\x03\x97\xb2\x93\x18\x5a\xdd\x42\x47\xd1\xa2\xb6\xba\x8e\xfb\x39\xd7\x89\x42\x27\x81\xe8\xbc\x03\x96\xe7\x7c\x99\x98\xa3\xc1\x15\xe2\xf3\xfe\xe9\x4c\x22\x6b\x26\x28\x3e\x72\x8e\x77\x3f\xbd\x38\xdf\xc3\xcb\xb4\xd2\x57\x7f\x7e\x78\x1f\x16\x52\x07\x46\xaa\xa6\x8c\xc9\x87\xf5\x69\xaa\x4f\xfe\x29\xb4\x56\x96\x70\xe6\x0c\x8a\x6a\x32\xf8\x4e\x56\x1d\x33\xe4\x4f\xdc\x47\x42\x70\xa8\x5d\x57\xdb\xa7\xfe\x8c\xc2\x54\x6e\xfc\xd4\x77\xd6\xfb\xc4\x9e\x89\xf1\xf4\x4f\x9c\x3a\xe2\xf9\xd6\x3b\xb3\x0d\x5a\x49\xaa\xa4\xf5\xa8\x08\x2e\xb6\xfb\xe9\xe1\x38\xf9\x1f\x1c\xfa\xe7\xbc\xf1\xc9\x2f\x8c\xe3\x2f\x82\x14\x8b\xe7\xae\x17\xb2\x96\x22\x81\x39\xde\x8a\x11\xfc\x71\x3f\x9d\x5e\x78\xcf\xef\x39\xdf\xbf\x46\xd6\x83\x5d\xf8\xcb\x2b\xfd\xe3\x87\xb8\x9a\x99\xc7\xfd\xad\x33\xf1\x33\xa2\xa9\xc8\x0d\x64\x3a\x69\x27\xff\xd1\x12\x85\x1e\x35\xb6\xfb\xaa\xf8\x4b\x33\xad\x3a\xc1\x7c\x24\xec\xd2\x05\xf8\x34\x12\x53\x4b\xb3\xb3\xf4\xa5\x5b\x12\x9c\x98\x93\xdb\xdc\x48\x7e\xb4\xf5\xeb\xd4\xe0\x74\x8d\xb9\xe1\x92\xbe\x16\xc5\xf5\xa3\x01\xb2\xcf\xf3\x71\xad\x30\x9f\x03\xc4\xfe\x3f\x6b\x97\xbe\x40\xc6\x6b\x85\xd8\x75\x9e\x2f\xfe\x76\xb3\x74\xff\xc4\x7c\x5e\xad\xf1\xb3\x12\x1d\x9c\xaf\x72\xcf\xbf\x66\x7d\xcf\xc1\xfa\xf9\x23\xdc\xa7\x1f\xfb\xa8\x40\x94\x74\x3d\xbb\x36\xda\xb3\xe2\x87\xdd\xb3\x66\xea\x5c\x5c\x1a\xa1\xd3\xfa\x96\xf5\x9c\xe0\xf3\xb1\x96\xef\x3b\x7c\xab\x90\x4a\x2a\xb6\x51\x3b\xf4\x98\x3c\x35\x8f\xf5\xe4\xf5\x13\xe0\xb5\xa3\x9c\x05\x7e\xdd\x2e\x0e\x6f\xfe\x7a\xfd\x94\x4f\x5b\x9e\xba\xf2\xa4\xf0\xb6\xb9\x48\xc8\xbc\xcc\xe7\xde\x42\xc7\x35\x90\x16\x7d\xb2\x58\xdf\xfc\x86\x4f\x27\xb9\x82\x61\x44\x65\xa5\xea\xa9\x4e\xa6\xb5\x35\x7e\x1f\xb4\xc7\xcd\xa7\x48\xf3\x08\x0c\x87\x2d\xdd\x12\x45\xcd\xfe\xd3\xe5\xf9\x4d\x9d\x13\xf9\xd7\x63\xfe\x1f\x3f\xac\xb9\x3f\x33\x7a\x3f\x77\x12\xe7\x62\x3d\x7c\x72\xfa\x9f\x27\xe4\x7b\x3b\x66\xf2\x3b\x77\x52\x18\xb3\xcf\x0e\x23\x9e\x9a\xba\x2a\xda\xf7\x99\x53\x24\x7e\xb0\x32\x49\xed\x33\x5f\x5c\x4d\x09\xf0\xdb\x89\x24\xa8\xe7\xc5\x60\xb7\x7d\xdd\x0c\x5c\xc9\xe2\xd7\xf1\xcd\xbb\xad\x14\xb1\x7f\xe8\x87\x7e\xaa\x53\x95\xfd\xf5\x01\xf3\x70\xdd\xf3\xc5\x09\xeb\xa9\x2d\xd1\x2b\xd6\x9d\xac\x92\x41\xeb\xb8\xd7\x13\x04\x1e\xfd\x43\x59\x51\x8e\x87\x2b\x72\x6e\x59\x54\x7d\x4e\xbc\x6c\xe2\xb1\x05\x04\x08\xb6\x3b\x57\x75\xd8\x7a\x3e\x0e\x5f\x39\xde\xd5\xeb\x12\x46\xb9\x94\x99\x17\x15\xd9\x25\xae\xbe\xc8\xee\xdb\x2b\x4f\x5c\x5d\xa1\x97\x8b\xf3\x9c\xcf\x35\x56\xe5\x86\xf2\xe1\x54\xbb\x9d\x68\x68\xfe\xfa\x6b\x3e\x61\x88\x78\x4e\x9c\x57\xfd\xb2\xef\x30\x7c\xc3\x07\x01\x76\xdf\xb9\x8c\xf6\xec\x94\xf0\x98\x67\x30\xb7\xa4\xcf\xfc\xae\xc1\x7d\xaa\x52\xf4\xfa\x46\x1c\x01\xf5\x45\xdd\x31\xac\xa5\xb1\xce\x8b\x37\x68\x50\x97\xd5\x0c\xb7\x24\xea\xdb\x56\x15\xae\x10\x7d\xca\xfb\xff\xd8\xfb\x97\x1c\x59\x76\x5d\x8d\xf3\x9c\x50\x34\x4c\x0f\x8a\x64\x4d\xa5\x50\x9d\x02\x2e\x72\xfe\x33\x48\xe8\x27\x5f\x27\xb3\x9b\xad\x04\x2e\x4e\x47\xd8\x88\x30\xfa\x8a\x6d\x92\xd3\xec\xff\xf1\xf5\x66\x7f\x7a\x07\x93\x21\xb1\xe6\x7f\xb3\x13\xfe\xb7\x2f\xf7\x69\x52\x56\xfd\x78\x5f\x8e\xaf\x46\x27\xa1\xd7\xba\x1e\xce\xf3\xc9\x81\xde\x4b\x97\x7a\x82\xf5\xe6\xb3\xbc\x1e\xe3\x62\x12\xf5\x26\xcb\x9a\xee\xb4\x4b\x13\xb1\xf9\xf2\x9e\x75\x25\x8d\x97\x0f\x64\xbe\x9b\xec\xa8\xc6\x02\x03\x47\x1f\xdf\xc1\x2f\x74\x14\x34\xe7\xf8\x65\xf7\xaf\xf3\x3e\xed\x77\xb6\x7d\x17\xcc\xb9\x1f\x26\x28\xcb\xa5\x4e\x35\x0d\xd5\xef\x59\x96\xa6\x4d\x07\xa6\x76\xe5\x77\xff\xb6\x79\xde\xcc\x6c\x95\x0d\x8b\x88\x88\x68\x72\xc9\x12\xd6\xe7\xfc\xc8\xff\xcb\x5f\xbf\xe8\x5f\xd7\x47\x55\xd7\xc7\x93\x57\xde\x80\x99\x4d\x95\xea\x23\x5f\xdb\xa6\x7c\xb5\x4a\xbe\x59\x1f\x65\x6f\xbe\x39\x35\xaa\xa3\xbc\x7d\xb5\x6c\xe9\x56\x67\xd0\xda\x33\x7d\x2f\x0a\x28\x4b\x60\x7e\x2f\xeb\x91\x87\x99\x7a\xe9\xaf\xf5\x7a\x33\xda\x17\xc1\x01\xd9\x84\xe9\x1d\xa9\xdd\xe7\xa5\x53\xe5\x58\x9b\x2a\xc8\xff\xe8\x83\xb7\x44\x58\xbf\xd7\x02\x46\xef\xe8\xe9\xad\xcc\x1b\xd4\x8c\xfd\xe9\x33\xe9\x2f\x79\x73\x7c\xd5\x92\xae\x0f\x53\x9c\xdf\xe4\xe9\x85\x74\xd4\x83\xae\x57\x7d\x2e\x6a\x7b\x3d\xf3\xdc\xe3\xbf\xef\x09\xff\xdb\x97\xb9\xbd\x37\xa6\x38\x62\xc9\x6f\x2b\xca\x5e\xc9\x7c\x2d\x35\xf7\x2d\x5f\xa1\x5f\xc7\xe3\xd2\x0c\xc8\x7b\xec\x7e\x95\x03\xfd\x98\x3a\x8d\x80\x36\x57\x25\xdb\xb7\xf2\x9d\xa8\x37\xbb\xd0\x1c\x43\x19\x3f\x4f\xcd\x3e\xce\xff\x96\xf1\x73\x4c\x21\x49\xd5\x48\x95\xfd\xde\x16\xe8\x93\x18\xdf\xf4\x99\x99\xfb\xcd\x46\x14\xd5\x13\xe9\x97\x63\xb4\xd7\xa3\x8f\xfd\xaa\xb5\x5e\x8c\xff\x4d\x43\x88\xbf\x99\x9a\xc4\x95\xf3\x5c\xda\x0b\x96\x5a\xed\xa2\x79\x56\xbc\x19\x16\x26\x4c\xc9\x3f\x50\x9d\x3c\x9b\x96\xd2\x6f\x56\x26\xed\xb1\xbd\x4b\x7f\x0b\xdd\x88\x7d\x8e\x7e\xd3\xe5\x54\x7d\xa8\xcd\x58\x5a\xb0\xe9\xa1\xba\x5e\x3d\xf4\x7e\xef\x51\xc2\x80\xdb\xdc\xfa\x30\x09\x37\xd8\x66\xe9\xa3\xd0\xe3\xd5\x7e\xa8\x3d\xc2\x6e\x26\x33\xa6\x67\xf7\xf2\x94\x3f\xc3\xff\x85\x5e\x94\xa5\x87\xb3\x5e\x2c\xab\x45\x55\xb7\xce\x99\x3b\x45\x43\x34\xa0\x19\x26\xf2\xec\xf5\xa2\x09\x9b\x42\xab\x56\xec\x75\x46\xa1\xc0\x4c\xda\x88\x4c\x85\xfb\x9a\xa6\x6f\xbc\x36\x52\xde\x22\xc6\x51\x4f\xb2\x7e\x59\x98\x2a\x2e\xc4\x5c\xbf\xf3\xdf\x2e\xee\xff\xdb\x97\x85\x34\xd7\x18\xba\xf7\xef\xcb\xb0\x2b\xb1\x83\x08\x57\x9c\xc7\xef\xde\x48\x33\xe9\x6c\x32\x1a\x4d\x3f\x0c\xe7\xff\x6b\xa4\xac\x9f\xd0\x58\xba\xbe\xd3\xde\x47\xff\xf2\x98\xbd\x5d\x9c\xf7\x0e\x90\xaa\xee\x5a\x0f\x76\xf5\x3f\x6f\x12\xe2\xfd\x46\x1c\x63\xe1\x4b\x66\x61\x7f\x6f\x82\xd2\xab\x68\x94\x7f\xfc\xe6\x29\x04\x55\x41\xf5\x61\xf6\x6b\xbb\x76\x5e\x53\x48\xf5\x3c\x4f\x97\xe3\x4f\xfa\x4d\x8c\x7d\x15\x11\xaf\x6e\x3b\x96\xd8\xc7\xcb\x13\xe2\x9d\x74\x2a\x7e\x8a\x84\x2a\x70\x93\xe0\xe6\xab\x35\xac\xfb\xbe\x71\x3f\xff\xcd\xb8\xdc\x6a\xc5\x4c\x9f\xbc\xa4\xf0\x2d\x55\x46\x2a\xbe\xc6\x6b\x02\x75\xc6\x9b\xf3\x82\x7d\xcc\xdd\xbe\x6f\x02\xfb\x53\x59\x38\xd4\x7d\xce\x29\x47\xfc\x8d\xa6\xdf\xf1\xaa\xc9\x9f\x62\xb3\xe5\x8a\xbd\xbb\x21\xff\x58\xff\x79\x5a\x41\xf1\x78\xa5\x73\x7e\x89\x6e\x74\xf0\x48\x5a\xc8\x2d\x59\x1a\x1a\xc0\xad\x1d\x6f\x82\x6d\xbf\x3a\x72\x55\x2b\xba\x49\x87\x59\x1b\x5b\x6e\x99\xfa\xa8\xf4\xf6\x35\x78\x8c\xa9\x6b\xcb\x12\xad\x88\x7e\xf3\xbf\xec\xcb\x7a\xfb\x52\x6f\xf2\xdd\x8b\xfb\xfc\x97\x1d\xfe\xb7\x2f\xb3\x9d\x90\xf9\x9b\x10\x2d\xf7\x45\x2e\xe3\x77\x9f\x6e\xd3\x5b\xee\xd4\x02\x75\xd2\xf6\xa7\x0a\xc9\xcb\xbf\x32\x86\xc3\xbc\x95\x49\xbf\x7a\x93\x13\x7d\x97\xd5\x30\xb4\xfa\xc9\xe3\xdd\x7b\xcc\x37\x25\xca\x3c\xf7\xdf\x73\x5f\xdd\x82\x4c\xa9\xd6\x83\xbd\xc7\xab\x5d\x96\x56\xa3\x47\xcb\x99\xfb\xcd\x33\x12\xa9\x9c\xef\x27\xef\xbb\x49\x91\xdb\x72\x9e\x24\xda\x78\x73\x4e\xd1\x93\xad\xf3\xc1\x7e\x35\x90\xf1\xea\x28\xbc\x03\x74\xbf\xbe\x0b\xb2\x91\x56\xde\x6f\xeb\x52\xa5\xad\x3f\x19\xb2\x2e\x6a\xde\xf7\xd1\x1e\xdf\xbb\xcd\x7b\xbe\x9f\x33\xf5\x31\x7a\x15\x59\x2a\x1c\x44\x0f\xe9\xf3\xd9\x2f\x3e\x3b\x8e\x19\xbb\x7a\x36\xc8\x93\xde\xaf\xa2\x60\x8a\x99\x62\xb1\xd7\xc0\x51\xc5\xe6\x34\x55\x3f\xf4\x44\x49\x1d\xe6\x73\x07\xab\x5f\x5c\xd8\xcc\x38\xcd\xe9\xfa\x37\xbd\x5a\x86\xb4\xbc\xd2\x23\xc5\x43\xef\xa8\xa1\xa9\xeb\xf4\xdd\x97\x7f\x3c\xd7\x27\xb9\xe3\xa9\x3a\xf2\xcc\xb6\x2e\x17\xbb\xdf\xe4\x9d\xe5\x4e\x6a\x20\xfb\x6b\x64\x69\x56\xac\x56\xb6\xed\xdd\xac\x65\x7d\x0d\xd3\xfa\xc6\xd3\x7b\x4d\xd4\x8a\x7b\x07\xfe\xdf\x3f\xb5\xff\x5d\xfe\xbb\xfc\x77\xf9\x7f\xb4\xfc\xff\xfe\xfe\x8f\xff\xff\xa8\x6f\x7d\xff\x9f\xff\xef\xe8\xce\xd7\xd9\xe5\x65\x59\x2c\x2b\xfd\xb6\xfc\xf7\x6f\xc6\xdf\xb0\xf6\xdf\xfc\x1f\xd5\x4e\x9e\x0a\x1a\x5a\x7f\x62\x27\xdf\xeb\xf6\xa6\x82\xed\x53\x15\xf1\x7d\xe3\xd5\x63\xbd\xf7\x42\xd7\x4f\xd7\x6b\x36\x4f\x69\x52\x6d\xff\xaf\x0f\xbe\xb7\x96\x4f\x2d\xdd\xf7\x89\x75\xc9\x2b\xff\xa4\x59\x7e\x14\xcf\xef\x8b\x37\x6b\xd0\xcf\xcd\xcf\x13\xd7\xf9\x64\xcc\xe0\x96\xeb\x48\xfd\x5b\x2a\xda\xbf\x37\x97\xc8\x24\x72\xbe\xef\xfb\x5e\x47\x3b\x35\xb5\xde\xba\x3e\x19\xe8\xdf\x57\xae\xd4\x18\x58\x26\xa9\x9a\xb9\xbb\xba\x52\x3e\xc7\x77\xdf\xc3\x68\xdf\x77\x65\xa5\xbf\xd0\xf7\x68\x56\xb6\x0d\xc5\xf9\xfb\xde\x4c\x44\x4f\x4d\x19\x33\x9f\x2c\x9f\x6f\xb8\x63\xda\x75\xbf\xf6\xa5\x9f\xca\xfe\x4f\x6a\xe8\xa7\xea\xf4\x93\xbd\xfe\x0d\x7a\xfa\x9b\x9d\x36\xd6\x9b\x7d\xe2\xca\xed\x13\xa8\x42\xa6\xb2\x7d\x63\xfb\x79\xbc\x7e\x5f\xae\x94\xd9\xf3\x62\xf6\x43\xe7\x13\x55\xbc\x9f\xac\xff\x6f\xb8\x57\xc3\xfd\x19\x6f\x46\xfb\xeb\xea\xe3\x9e\xe8\x31\xf2\x8d\x97\x47\x5c\xaf\xa3\x9a\x2b\x3d\x63\x5e\xdf\x82\xe1\xff\x4b\xf5\xde\xa7\x2a\xf1\xf3\xfc\xf8\xcc\x1a\xff\xa6\x93\xa0\xc1\xff\x37\xdf\x48\x01\x27\x41\x73\xdf\x4f\xca\xeb\xf7\x66\x14\x4d\xff\xa7\xa2\xe6\x9f\x19\xf3\x9f\xe8\xf8\x37\xb5\x77\x9d\x3f\xed\xdb\xbf\xf2\xa6\x9d\xe9\xe5\xa5\x75\xeb\xa7\x33\xd2\x27\x92\xf7\x3d\x8d\xcc\x04\x35\x73\x67\xe7\xa7\x7d\xfb\x37\x5f\xf7\x30\xff\xef\xd3\x99\x11\x7b\xf8\x44\xfe\xbe\xe9\x3e\xe8\xb8\xf2\xe1\xe1\x4f\x67\x82\x4f\xbc\xf0\x93\x9a\xf8\x4d\x27\x44\x9e\xd0\xa7\x73\xc8\x37\xeb\x4d\x6d\xf4\x5b\xf7\x67\x3a\x1b\x62\x96\x9f\xb7\xf6\x6f\x3a\x15\xaf\xdf\x8b\x08\xe5\x37\x5f\x57\xba\x7e\x7d\x60\x5e\x5c\xe4\x75\x7f\x3d\xd6\xd7\x15\xed\x45\x73\xbd\x6f\xb9\x3f\x6f\x32\xd3\x72\x4f\x44\x43\x3f\xb9\x44\x9f\x08\xe2\xb7\x7c\x6b\xd4\x5a\x7d\xb2\x04\xbe\xf5\x3a\x2b\xba\x27\x74\x81\x4f\x45\xda\xaf\x6b\xca\xf2\x6d\x5a\x2f\xeb\x2b\x5e\x5d\xd4\xeb\xc3\xe6\x13\x9c\x0d\x3a\xcb\xa7\x52\xfc\x5b\xe7\x4d\xe8\x64\xfb\xfa\xb6\xbd\x8e\xb5\xbe\x5f\xea\x29\x3f\x59\x29\xbf\xba\x16\x3a\xec\x27\xd6\xfb\xad\x37\xd5\xd2\x37\x6b\xbd\x5e\xb2\xbe\x59\xcb\xdd\x5b\xaf\x1a\xe6\xf5\xc3\x71\x67\xb6\xbb\x41\x89\xd6\xa6\xfa\xae\x26\x62\xaa\xad\xa4\x72\x7e\xfb\x45\x49\xdd\xab\xfd\x6a\x4c\xdd\x31\xbd\xfb\xbe\xed\xbc\x89\x28\x7f\xa2\x4d\xdf\x1e\x2f\x7a\xcd\xca\xd9\xfb\xe5\x8d\xf1\x42\xde\xb1\x7e\x63\x2e\xbc\x99\x7d\x7b\xbe\x6b\xde\xfc\x6f\xbf\x7d\x13\xb5\x9d\xb7\xfd\xc6\x62\xb8\xcf\xaf\x83\xa5\x8a\x96\xa7\xcc\x7e\x62\x4b\xea\xea\xee\xea\xe7\xfc\xd5\x76\x3f\xbd\x0d\x7f\xdb\xfd\x14\x63\xfb\xcc\xec\x7f\x11\xdf\xef\xf5\x01\x7e\x1d\xc9\x8c\xfe\xf8\x68\xf1\xdf\xce\x37\x97\xcb\xbf\xfb\xa6\x92\xbb\xab\x5a\x92\x7f\xdb\xbd\xdd\xee\xad\x9e\x5a\xdf\x7e\x4d\xcd\xdd\x61\x79\x27\x1f\xfa\xfd\xd5\xd0\xa8\x35\xfc\x5e\xd4\xfc\xcd\x5e\xdd\x4e\xe6\x7e\xf7\xff\xf7\x7e\x3f\xfe\xa9\xf6\x1f\x8d\xe9\xf3\x86\xfa\x79\x7b\xfe\x62\xbc\x4c\x41\xbf\x75\x87\xe3\x65\x06\x8c\xf3\xaf\xaa\xfe\x0b\xf7\x36\xdc\x4f\x55\x32\x9f\xb9\xa1\x9f\x19\xd2\x5f\x38\xbd\xe1\xbb\x1c\x2f\x26\xf1\xf2\x14\xdd\x67\x79\x00\xdf\xab\xe2\x7d\x33\xe4\xe2\xf5\x26\x71\x9f\x65\xcd\x7e\xe1\x3c\x87\xf3\x1c\xee\x7c\x38\xd5\x5a\x86\xff\xba\x28\x23\xde\xef\x65\xf5\xa9\x84\xfe\xe2\xe5\x38\x52\xf9\x45\x05\xbe\x78\x93\xea\xec\x88\xc1\x26\x5f\xbc\xfa\x6c\xfb\x12\xaf\x4f\x40\xbe\xce\x28\xae\x74\xce\x0d\x40\xf8\xe2\x55\x71\xe5\xab\xe7\x76\xfd\x1b\xb6\xf0\x62\x1e\xf6\x45\x37\xa1\x2f\xec\x0b\x0e\xf9\xc2\xbe\xbc\xfa\x8c\x78\xd9\x81\x76\x44\x3d\xd6\x17\xfd\xfa\xaf\xb0\xea\x97\xbb\x19\xff\xc9\xe0\xd4\x97\xe5\x65\x29\x7d\xf2\x41\xbf\x63\x8f\x5e\xa7\xb8\xc3\x03\xcb\x17\xfc\x5e\xd7\xc7\xe3\x1b\x21\xbb\xeb\x3b\x76\xea\xd8\x29\x53\x39\xbf\x57\x9b\x7e\xec\x97\x79\xfc\x9f\xee\x2c\xdf\xb1\x77\xc7\xf7\xe2\xbc\xf1\x2f\xfc\x0f\x75\xf5\xc3\x69\x9f\x29\xbc\x9f\x89\xbc\xdf\xb1\x9b\x7a\x58\x7d\xe7\xb5\xd2\xb7\x9b\xc7\x6e\x2a\x7c\xf8\xf4\x5c\xfa\x91\xd5\xb1\xa7\x74\xd8\xef\xbc\xca\x0f\x3e\x9c\x0a\xf9\x9d\x5f\x67\x27\xbf\xf5\x14\x7b\x8d\xf9\xcd\xde\xfe\xe4\x41\x7e\xba\x33\x3d\xa6\xfa\xf5\x80\x32\xa1\xff\x55\x68\x7d\xc7\xce\xbe\x8a\x4f\x73\x8b\x3f\x2d\xfc\x7f\xb9\xd7\xe7\x65\x7a\xf9\xae\x69\x48\xff\xe9\xf8\xf7\xd1\xbb\xbf\xf3\xd2\xd4\xed\xef\x8b\xf5\xd2\xc7\xbf\x63\x7f\x8f\xfd\x7d\x31\x2d\xd5\x2a\xdf\xb1\xcb\x62\x69\x9f\x54\xf6\x4f\xdf\xb0\x4f\x1d\xf9\x77\x1e\x95\xd9\xe5\x63\x97\x8f\x5d\x3e\x76\x59\xd7\xcd\xef\xd8\x5f\xf3\x38\xbf\xf3\xf6\xd7\x77\x90\xaa\xfb\xe5\x37\xfe\xf5\x03\xff\x4c\x55\xff\xcc\x34\xfa\xf4\x2e\xfb\xf2\x75\xcd\xf5\xdd\x4c\xfe\xf0\x8d\xe9\xc8\x37\x17\x90\x0f\x34\x96\xe7\xd3\x97\xef\x33\xeb\xe8\x4b\x7b\x6d\xe6\xe8\x27\xa7\xed\xa3\x3d\x7d\xf9\x2a\xf5\xed\x72\xda\xe5\xd7\x5e\x5d\xd6\xe9\x97\xf6\x97\x4a\xfe\xbd\x9a\x3c\xd1\xf4\xd7\xb3\xf7\x57\xdf\x6f\x80\xcf\x47\xdd\x7b\x53\x09\x3f\x3a\xfe\xa7\xb2\xf9\x93\xcf\xf7\xe5\xab\x05\xf4\x9d\xcd\xfd\xfa\x8a\xbb\xd2\x5e\x8b\x43\x7c\xf9\xba\xa0\xdb\xeb\x7c\xf3\xa4\xed\x75\x7a\x36\xbd\xce\xe4\xf2\x0b\xbf\x17\xb1\x4b\x3b\xfe\xb2\xed\xe5\x3f\x7d\x94\xfd\x2f\x7d\xa3\xd5\x31\x7f\x79\xde\x20\x05\x56\xf6\x5d\x36\xf3\x27\x4b\xef\x7b\xe5\x09\x69\xdf\xd5\x47\x7e\xfa\x91\xfe\x7a\xae\x18\x3b\xf3\xa5\x7d\xd7\x2b\xe5\x75\x78\xfb\xe8\x62\x1f\x3d\xee\x7b\xa3\x24\xc4\x0f\xbe\xf4\xed\x4e\xbb\x6f\xee\xfb\x97\x76\xdf\x98\xa3\x2f\xed\xbe\x11\x34\x9f\x31\x11\xdf\x8b\x82\x88\x38\x7e\xaa\xb2\xbe\xec\x57\x27\x30\xff\xa3\x2c\xa8\xdd\xfc\x4d\x7c\xac\x37\xd0\xc6\x9e\xca\x48\x7e\xf3\x74\xbf\xb2\xbf\xa6\xd5\x7e\x65\x4f\x65\x1d\x7d\xb2\x2b\x3e\x03\x5b\xbe\x7a\xfd\x63\x7c\x67\xcb\x9e\xea\xab\xf4\xd5\xaf\x3f\xaa\x4f\xb3\x8f\xfa\xc1\x7c\xaf\xeb\x5a\xfd\x72\xce\x7c\x4e\xbc\x7e\x6b\xae\x71\xe7\xdf\xdc\x4d\x79\x12\x5f\xbd\x0a\x07\xf7\x59\x26\xe5\xab\x77\xfc\xcc\x05\xfc\x2a\xdf\x6f\x7d\xb2\xfb\xf9\xe6\xf9\x89\xaa\x7e\x6a\x37\x3f\xd3\xf5\x3e\x59\x9b\x9f\xbe\x0b\x9f\x92\x90\x4f\x2f\xeb\x8f\xc6\xf4\x95\xef\x88\x49\x75\x9f\xda\xfa\x4f\x37\xce\xaf\x7d\x2f\xfa\x75\xc7\x79\x7d\xa7\xdd\x37\x6a\xc8\xa7\xde\xf4\x53\x6f\xfa\xbd\xa1\x13\x3d\xdf\xcf\x69\x37\xee\x4f\xbb\x3f\x6f\xe8\x8d\x21\x36\x9f\x71\x34\x5f\xbb\x27\xaf\x52\xcd\x00\xab\x4f\x6e\xee\xd7\x4f\x6b\x76\x67\xf4\x21\xff\x64\x8a\x7f\x2a\x50\xbf\x76\xaa\xdb\xa9\xd6\x1b\xfc\xeb\x57\x27\xe7\x54\x53\x6a\xbe\x76\x9e\x8d\xec\xf8\xfa\x55\x8c\x38\xbd\xf2\x44\x3f\x3d\x8a\xbf\xd7\x2f\xf7\x65\xa9\x2a\x1a\xfa\xd4\xe5\x7f\x2a\xde\x14\x0a\xdd\xd5\x35\xee\xaa\x7a\x62\xa5\x43\x77\xf5\x39\xb4\x39\xbc\x36\xf0\xda\xf8\x7e\xd1\xdf\xf7\x73\x5d\x8e\xe8\x71\xaa\x15\x87\x18\xd5\xa0\x19\x0d\x19\x27\x03\xb5\x0d\x31\xe6\xf1\xcd\x57\xce\xc6\x56\xde\x21\x75\x6f\xc8\x32\x34\x61\xfd\xae\xae\x11\xdd\x37\xb9\x60\xa0\xb9\xf1\xfd\x6a\x85\x7d\x4e\xf8\x49\xf8\x89\xe9\xd1\x9f\xec\xbd\x8f\xda\xf5\x6a\x00\xbe\xf3\x7e\xeb\x7a\xb9\x38\x26\xc4\x0f\x7c\x37\x90\xdd\x40\x76\x03\xd3\x0d\x34\x27\x2b\xee\xae\xae\xa1\xca\x99\x65\xa0\x1b\xd3\x5d\x5d\x29\x77\x07\xcd\x0d\x34\x37\xd0\xdc\x50\x71\x31\x70\xdc\xc0\x6e\x03\xbb\x8d\x57\xa1\xa1\x9b\xfa\xd0\xed\x63\x98\x57\x3d\xc6\xf7\x32\x84\xea\x3f\xd5\xc9\xb2\x81\x87\x18\xe4\xc0\x77\x63\xbc\xda\x65\x31\x4e\xdd\x50\x87\x31\x6b\xe3\x75\x74\x1b\xee\x33\xb5\x6e\xe0\xbe\x81\xfb\x06\xee\x1b\xb4\xd4\x31\xdc\x67\x31\xc2\x81\x04\x87\x99\xd6\x83\xaa\x38\x86\x7b\x3e\x64\x0c\xbf\x3e\x55\x38\x71\x88\x7f\x0c\xdd\xdd\xcc\x91\x9d\xf4\xbb\xbb\xba\xde\x2e\x8c\xd7\xdd\x4a\x6e\x01\x4e\x1c\x38\x71\xe0\xc4\xa1\x02\x44\x7c\xe8\xae\x7e\xae\x3a\x02\x39\x8e\xd7\x53\x77\xd8\x05\x14\x39\x50\xe4\xd0\x6b\x6a\x60\x49\x55\x5b\x73\xbc\x2e\xbb\x66\x6d\x0e\xb9\x20\x43\xa4\x47\x69\xdb\x5d\xeb\x57\xef\x31\x87\x2c\x90\x81\x37\x07\xde\x1c\x3a\xc7\x0e\x1d\x62\x06\xf6\xd4\x6b\x6a\x0e\xec\x39\x64\x66\xa8\xe5\xb8\x6b\x58\xd3\xfa\x54\xe6\xef\xff\xd2\x9a\xed\x85\x68\xd3\x10\x65\x19\x4f\x47\x46\xa6\x03\x99\xfe\xfa\x5e\xd2\x4c\x07\x3e\x1d\xd3\xbe\xa0\xd4\xa1\x74\x6e\x60\x55\x5d\xbe\xef\xca\xca\xee\xbc\x19\xdb\x58\x75\xcc\x37\x0c\xc7\xbe\x20\xd6\x81\x58\x87\xfe\x79\x43\x1c\x68\x88\xfb\x0e\x3d\xff\x74\xad\xbb\xab\xeb\xed\x0b\x85\x7a\x18\x64\x34\x7e\xf1\xda\x78\xfa\xb2\xdf\xda\xa3\x69\x8f\x50\xed\x90\xdd\x3b\xa6\xef\x0e\xb6\x1d\xd3\xae\x4d\xbb\x86\x73\xc7\xb4\x6b\xd8\x76\x98\x3a\xac\xaf\xd5\x5d\x7d\xc2\xd3\xaf\xed\x8e\xc9\x23\xfa\x82\xdc\xd5\x35\x76\x47\x07\xce\x81\x70\x07\xc2\x7d\x91\xad\xf1\xcb\xc1\xb5\x47\x08\x77\x20\xdc\x81\x70\x87\xe8\xf2\x58\x6f\xb2\x89\xfd\xd2\x39\x69\x60\xde\xf1\xb2\x03\xf5\x62\x1d\xba\x82\x8f\xd7\xf7\x78\xbd\x7e\x87\xee\xff\x7a\x55\x34\xaf\x8b\xcf\xfc\x4f\x1e\xcc\x90\x79\x60\xe0\xdb\x7c\xd1\xc7\xb1\x5e\x0c\xc0\xdd\xc3\xb9\x03\xe1\x8e\xd7\xff\x03\xe7\x8e\xf5\xba\x82\xbd\x4c\x47\xd1\x08\x3c\x3b\x64\x10\xbe\x2e\x41\x03\xd5\x0e\x54\x3b\x50\xad\x0e\x01\x73\x20\xd9\xa1\xbb\xd8\x40\xb2\x63\xf5\x9b\xad\xee\x13\xdc\x99\xe5\xce\x2c\xa7\xf7\xcd\x5c\x5f\xfd\xae\xf4\x97\xbb\x33\xfb\x55\x7c\xfd\x86\xd5\xbc\xea\xac\xf3\xaf\x46\x6b\xec\x5f\xc6\xa4\x5a\x0b\x1e\x03\xbd\x0e\x39\x5b\x43\xce\xb7\xd9\xab\x77\xf5\x09\xee\x0f\x92\x1d\xf2\x86\x07\x9e\xd5\xd1\xe1\xae\xac\x9c\xcc\xfd\xca\x39\x9d\x4f\x84\x3b\xb0\xed\xc0\xb6\x03\xdb\x0e\x51\x8d\xd7\xad\x61\xc8\x19\x1d\x6a\x42\x86\x08\xe2\xd0\x35\x6d\xe8\xdb\x3c\x10\xae\x6e\xcc\x77\x7d\x23\xaa\xfc\x5b\xe7\xd5\xb3\xf9\xb9\xb3\xf7\x32\x9b\x71\xee\x1b\x6e\xf9\x4a\x4a\x07\xaa\x1d\x32\x1d\xc7\x76\x7f\xe2\xc5\x96\xdc\x99\x70\x67\xe4\x74\x0e\x04\x3a\x5e\xe7\x0c\xd4\x39\x5e\x6d\x15\xc6\x1c\x18\x73\x60\x4c\xfd\xf6\xee\xea\xe7\xfe\x5f\x50\xe4\xc0\x8c\x43\x97\xbe\xdf\x10\x4b\xf9\xee\x43\x5e\xfb\x88\x5f\x94\xc5\xcf\x7d\x6b\x7e\x99\x9a\xfe\x66\xf9\x5e\x03\x09\x0e\x0c\x38\xd0\xdf\x40\x7c\x23\x78\x36\xdc\x37\x70\xdf\xab\xdb\x19\x38\x6e\xfc\x7a\x6a\xbe\xff\x3b\xbb\x8f\xe3\x06\x8e\x1b\xc7\xff\x29\x82\x1b\x87\xef\xc2\x71\xff\xba\x82\xf9\xff\xc5\x71\xc6\x24\xde\xf5\xf5\x0c\x73\xbd\x6f\x0a\x82\x1b\x78\x6d\xe0\xb5\x81\xce\xf4\x1f\xbe\xeb\xcb\x86\xf7\x5b\xbb\x8c\xc2\x06\x0a\x1b\x28\x4c\x7f\x91\xbb\xba\xc6\x77\x07\x7f\x0d\xcc\x35\x30\xd7\xc0\x59\x03\x61\x8d\xf3\x32\xec\x5f\xf7\xb2\x97\x53\x78\xde\x35\x6c\x79\x15\xac\x34\xce\xab\xa9\xab\x97\x77\xe8\x9a\x7a\xb9\xb3\xae\xf4\xdd\xc1\x44\x43\x04\x6b\x20\xa0\x81\x7d\x06\xc6\x19\xf9\x46\x39\x39\xff\xf8\x65\xa4\x33\x8f\x53\xde\x88\xa7\x81\x53\x86\x8e\xbe\x03\xad\x0c\x24\x32\x90\xc8\x48\x27\x19\x89\x0c\x24\x32\x30\xc8\xc0\x20\x03\x83\xe8\x20\x78\x57\xb6\x6a\x09\x30\xc8\xc0\x1d\x03\x71\xe8\x8c\x72\xd7\xf5\xaf\xd6\x62\x60\x8d\x81\x2f\x06\xbe\x18\xf8\x62\xe0\x8b\x81\x2f\x06\xbe\x18\x6f\x8c\x1b\x9a\x18\x38\x62\xe0\x08\xd9\x03\x77\x75\x8d\xbb\xf4\x6a\x20\x11\xc4\x40\x10\x03\x41\x0c\x04\x31\xb0\xc3\x40\x0a\x03\x29\x0c\xb9\x56\xc3\x34\x99\xf1\x86\x5f\xc9\x0b\x1c\xa8\x61\xbc\x7a\xad\x72\x72\x5e\x25\x15\x6a\x18\xe5\xa9\x87\x1d\x06\x76\xd0\xab\xf9\xae\xae\x71\x8a\x50\xc3\xa8\x57\xbb\xe8\xae\x22\x85\x81\x14\xc6\x9b\xa7\x80\x17\x06\x5e\x18\x2f\xfe\x8a\x17\xc6\xab\x51\x91\x29\x32\xb0\xc3\x28\xf7\x5c\xcf\x89\x81\x23\x46\xb9\xe7\xe5\x6e\xeb\x21\x31\xf4\xab\x1b\xaf\x9f\x33\xca\xf8\x97\x5d\xfd\x62\xcc\xee\xf6\xcb\xc9\xc6\x17\xa3\xdc\x67\x35\x1b\x03\x6b\x0c\xac\x31\xcc\x1d\x1f\xf8\x62\x98\x14\x3e\x4c\x90\x19\xaf\xbb\x15\xb2\x78\x3d\x2a\x46\xbb\x7b\xed\xee\x61\x8a\x81\x26\x06\x8e\x18\xfd\xa6\x5c\xf9\x3e\xa2\x09\x3d\xe7\x7f\xd9\x2d\xa3\x7f\xdd\x35\xc4\x5c\x9d\xcc\x7e\xb1\x67\x6f\x0e\xed\x94\xf6\xcb\x86\xf1\xdd\x44\x1c\x43\x8e\xc5\x9b\x9c\x35\x10\xc7\x40\x1c\x43\xe4\x7b\xe0\x0e\x9d\x6b\xef\xca\xca\xdd\xc6\x20\xc3\x90\xc0\x81\x41\xc6\xab\x0f\xc4\x20\x03\x7d\x0c\xc4\x31\x10\xc7\x40\x1c\x03\x71\x8c\x7e\x03\x7b\x5f\x6c\xd8\xfd\x94\x09\x3a\x70\xc7\xc0\x1d\x03\x71\xe8\xd6\x79\x57\x57\xba\xab\x9d\x6f\xd8\xaf\xdf\x66\xfe\x1b\xfc\x3b\x64\xf6\x8f\x17\xf3\x7e\x9d\x3f\x54\x24\x8e\x76\x4a\xcd\x5c\x18\x8f\x3b\x5a\x47\xee\xff\x59\x7f\x73\x42\x90\x09\x3e\x4c\x1c\x9c\xd2\x7b\xee\xda\x5a\x1f\x7e\x56\xd7\x68\x59\x22\x88\x34\xb5\xeb\x9a\x82\x48\x13\x94\xcc\xef\xa5\x01\x2b\x2c\x82\x26\x13\x94\x4c\x50\x32\x41\xc9\x14\x5c\x9a\x82\x4b\x13\x94\x4c\x4d\xca\x26\x34\x99\xdf\x72\xe5\xf2\xc9\xcb\xf5\xd2\x0e\x61\x8a\xc6\x88\x77\x75\xfd\x76\xcd\x76\x8d\x71\x25\x82\x51\x13\xb8\xcc\x2f\x7c\x9a\xc2\x04\x81\xa9\x29\x30\x35\x41\xcc\x04\x31\x13\xc4\x48\x09\xbe\xab\xdf\x2a\x33\x14\x9e\x9a\x20\x66\x0a\x4c\x4d\x10\x33\x05\xa6\x26\x88\x99\x20\x66\x82\x98\x09\x62\xa6\x20\xd5\xfc\x5e\x59\x68\xb1\x2a\x56\xf5\xac\x7c\xbe\xb2\x47\x58\x33\x05\xa6\x26\xa0\x99\x02\x53\xf3\xb5\x48\x7f\x49\xd4\xb0\x66\xc2\x1a\x43\x5d\xee\x9a\x56\xbf\xb5\x23\x50\x66\x42\x19\x65\x95\x77\x35\x3a\x7f\xb8\xd2\xee\x08\x5e\x4d\xe0\x32\x81\xcb\x04\x2e\x53\xdb\xe8\x09\x5c\x26\x70\x99\xc0\x65\x02\x97\x09\x59\xa6\x84\xe4\x09\x5c\x26\x70\x99\x90\x45\xe3\xe6\xbb\xba\xd2\x8e\x40\x96\x09\x59\xee\x9b\x83\xd5\xf5\xe1\xfa\x78\xe9\x4c\xae\xb7\x3b\x9a\xc8\x68\xd8\x7a\x57\xd7\x1f\x7f\x89\x12\xfb\x61\x8f\x94\xc6\x4f\xc9\x18\x13\xe8\x4c\xa0\x33\x81\xce\x7d\x1e\xdd\x35\x59\xd9\x35\xe8\x63\x98\xd8\x5d\xd9\x6a\x05\x08\x7d\x26\xf4\x99\xd0\x47\xb3\x9b\xa9\x21\xd4\x5d\x59\xd9\x41\x00\x34\x01\xd0\x04\x40\x8a\x76\xef\xfa\xac\xfa\x5f\x32\xfc\x84\x41\xf7\xbb\x6f\x65\x65\x37\x21\xd1\x84\x44\x13\x12\xdd\xaf\x90\xd5\xd8\xc0\xef\x0d\x0c\x91\xfe\x61\xd0\x81\xd0\xdc\x04\x46\xf7\x88\x58\xf5\x02\xb1\xbf\xf0\x68\xc2\xa3\x09\x8f\x26\x3c\x9a\x12\x6b\x95\xb1\xdc\x95\xed\xaf\x83\xc8\xf7\x2f\xb1\x64\x82\xa4\x39\x7f\xa9\x26\xfb\x5f\x7f\x91\x09\x92\x26\x48\x9a\xf3\x4d\x61\x74\x06\x04\xf1\xcc\x39\xbe\xab\x6b\xf6\x1b\x40\xc4\x6a\xbf\x9f\xb0\xb2\xb3\x30\x68\xc2\xa0\x09\x80\xe6\x7c\x05\x7d\x76\x16\x00\x4d\x00\x34\xa1\xcf\x54\x06\x35\x85\xf8\x26\xf4\x99\xd0\x67\x42\x9f\x29\xb8\x37\xb5\x03\x33\x1f\xfa\xae\x6c\xed\x0b\xf4\xf9\x0d\x5d\x14\xe2\x33\x2f\xf6\xae\x3e\xa1\xfa\x3f\x53\x24\xff\x4d\x94\xf4\x99\x6f\x80\x92\xdd\xf9\xa5\xf9\xd9\x1d\x30\x34\xe7\xdb\x1d\xdf\x35\x18\xa4\x91\xc8\x5d\xb5\x8e\x7d\x63\x28\xec\x0e\x18\x9a\x60\x68\x0a\x03\x4e\x6d\xd6\xa7\x74\xc1\xf9\x0a\x1f\xd6\x2b\xa5\x74\x9f\xc1\xd0\x14\x1e\x34\x31\xf7\xae\xaf\x58\xd8\x35\xee\xf0\xf2\xfd\x82\x47\x13\x1e\x69\xf2\x78\x57\x9f\xe6\xfb\x25\x48\x38\x05\x09\xa7\x24\xab\x09\x98\xa6\x36\xa9\x13\x36\x4d\xd8\x34\xff\x95\x3c\xfb\x04\xdf\x20\xc1\xc0\x09\x9e\x26\x6c\x9a\xeb\xb5\xc5\x74\xf2\x85\xfe\x26\x54\x9a\x42\x7f\x9a\xca\xdd\xd5\xe7\xb8\x9f\x80\x69\x02\xa6\x09\x98\xa6\x60\xe0\x84\x4a\x9a\xec\xcf\x29\x30\x38\x01\xd3\x14\x00\xd4\x90\xee\xae\xaf\x78\xc1\x6f\xc7\x2b\x69\xd1\x64\xd6\x1d\x13\xfa\x9b\x42\x7f\x13\x30\x4d\xc0\x34\x05\x00\x27\x6c\x9a\xb0\x69\xc2\xa6\x09\x9b\x26\x60\x9a\x80\x69\x6a\xb7\x3d\x61\xd3\x84\x47\x13\x18\x4d\x45\xb8\x13\x18\x4d\x30\x34\x05\x00\xa7\x76\x7e\x53\xa9\xe6\x14\x00\x9c\x20\x69\x82\xa4\xb9\xdd\x43\x90\x34\x41\xd2\x14\x12\x9c\x50\x69\x4a\xf1\x9a\x1a\x57\xcd\xfd\x46\xf3\xf1\x48\xe0\x69\x82\xa7\x09\x9e\x7e\x93\x89\x35\xd2\x9d\x40\x6a\xbe\xde\x3c\x42\x85\xf3\x15\xfe\x0b\x12\x4e\x41\xc2\xb9\x5f\xb1\x8f\x3b\x2f\x24\x38\xf7\x9b\x70\xec\xce\x0b\x03\x4e\x01\xc0\x09\xbf\xa6\x30\xe0\x14\x06\x9c\x50\x6c\x42\xb1\x09\xc5\xa6\xf4\xbf\x09\xc8\xa6\xc0\xe0\x34\x91\x7d\x0a\x0c\xbe\x06\x79\x53\xab\xbe\x29\x3c\x38\x81\xda\x54\x42\x38\xa5\x0b\xbe\xe6\x98\x53\x90\x70\x02\xb8\xa9\x69\xc0\x14\x30\x9c\x30\x6e\x0a\x12\x4e\x18\x37\x05\x09\xa7\xc0\xa0\xe1\x8a\x77\xf5\x39\xf6\x22\xec\x85\xf0\xe0\x14\x1e\x9c\x20\x6f\x2a\xd0\x9b\xc2\x83\x53\x60\x70\x86\x7d\x01\x7f\x53\x78\x70\x42\xc0\x69\x2c\xcc\x14\x24\x9c\x40\x70\x02\xc1\x29\x3c\x38\xe1\xe0\x14\x1e\x9c\xa0\x50\x31\xdd\x5d\x5d\x69\x2f\xa0\xe1\x84\x86\x53\x90\xf0\x37\x25\x1d\x20\x4e\xe1\xc1\x29\x3c\xf8\x1b\x94\x04\x13\x27\x4c\x9c\xf1\x1a\xca\xbf\xd9\xea\xf6\x48\x78\x70\x9a\x41\x3b\x05\x09\x67\xbc\x26\x06\x76\x4d\x90\x70\x0a\x12\x4e\x70\x39\x05\x09\x95\x31\xde\x95\xd5\x2b\x8f\xf2\xad\x81\x98\x53\xa8\x70\x02\xcd\x79\xec\x1d\xd0\x9c\xaf\xe5\xf4\xf9\x35\x82\x70\xa5\xbd\x3b\xaf\x21\xb2\xbd\x13\x30\x7c\x9d\x9f\xa6\x80\xe1\x84\x9b\xf3\xf8\x36\x09\x18\x4e\x01\xc3\x7f\x43\x57\xec\xa6\x80\xe1\x2f\xb1\x13\x8c\x6a\x71\x70\x57\x7f\x89\x3d\x15\x2a\x9c\x90\x74\x0a\x0f\x4e\x60\x3a\x81\xe9\x04\xa6\x13\x98\xce\xf3\x6b\x1c\xb9\xff\xb5\xa3\x9d\x42\x85\xf3\xd8\xe5\x63\x97\x61\xeb\x14\x3c\x9c\xe0\xf5\x37\xfe\x45\x08\x71\x02\xd9\x29\xa5\x73\x02\xd9\x09\x64\x27\x90\x9d\x40\x76\x42\xd8\x79\xec\xf2\x79\x1d\xaa\xec\xb2\x80\xe1\x3c\x6f\x22\xf8\x6b\x89\x6b\xaf\x05\x09\xa7\x20\xe1\x84\xbc\x53\x90\x70\x02\xdf\xf9\x8a\xec\x04\x06\x27\xfc\x9d\x42\x82\x13\xf8\x4a\x9e\xbc\xab\xcf\xb4\xa7\x6f\x10\x1f\x08\x9e\x02\x83\xf3\xbc\x51\x36\x76\x53\x48\xd0\x7c\xee\x7f\x4d\x69\x84\x04\xa7\x90\xe0\x7c\xe3\x8c\xe0\xf2\x84\xcb\x53\x48\x70\x0a\x09\xce\x1c\x6f\x3c\x17\x5b\xdf\x50\xe1\x41\x03\x03\xff\x33\xb6\xcb\x2e\x83\xec\x99\x6f\xd4\x9e\x5d\xce\xd7\x06\xc7\x2e\x0b\x15\x4e\xa1\xc2\x29\x54\x38\xf3\x25\xee\xfa\xce\x42\xf0\x09\xc1\x27\x04\x9f\x02\x86\x2f\xad\xd7\xf0\x9f\xa9\x79\xd1\x5d\x5f\xba\x2f\x2b\x7b\xfd\x12\xd1\x61\xfa\x84\xe9\x9a\x09\xdc\xd5\xf5\x76\x19\xb2\x4f\xc8\x3e\xf3\x8d\x0d\xb4\xcb\x90\x7d\x42\xf6\xf9\x8a\xfd\x81\xfb\xcc\x57\x2c\x6c\xc7\x85\x0d\x27\x88\x9f\xc2\x86\x13\xca\x4f\xf8\xfe\x1b\x59\xa6\xe5\xd1\x04\xf1\x13\xbe\x1b\xd7\x76\x57\xd7\xd8\xeb\x57\x94\x04\xe2\x8d\x76\xbc\xab\x4f\xf3\x8d\x86\xf2\x13\xca\x4f\x28\x3f\x05\x03\x27\x88\x9f\x20\xde\x14\xf3\xbb\xba\xb2\x5f\x41\xb4\x2b\xbd\x33\x00\xfa\x59\xaf\x15\xc9\x1b\x0f\x6b\xaf\x61\xfd\x14\x0c\x9c\x65\x67\xeb\x95\x31\xda\xc7\x7a\xa5\x16\x9e\x77\xb0\x7e\xc2\x7a\x63\x27\xe7\x7c\x8d\x8c\x60\xfd\x7c\x0d\x88\xea\x95\x10\xda\x17\x40\x3f\xa1\xfc\x84\xf2\x13\xb8\x4f\xad\x8d\x5f\x99\xe1\x84\xef\x13\xbe\x4f\xc8\x3e\x21\xfb\x84\xec\x5a\x51\xdd\xd7\x25\x7f\xf3\x19\xff\x8a\x3e\x66\xbd\x91\x9b\x6f\x1c\x9c\x3b\x09\xcd\x27\x34\x9f\xf5\x1a\xd4\xb8\x9f\x42\x82\x13\xac\x9b\x94\x7f\x57\x9f\xc0\x1f\x42\xf6\x59\xaf\xe1\x8c\x3b\xf9\x9a\xba\x18\x9c\xfb\x06\xcd\x69\xda\x78\x57\x56\xee\x67\xb9\x9f\x02\x86\x53\x69\xf6\x84\xf8\x86\x4f\xdc\xd5\x78\x1b\xf7\x53\x19\xc8\x04\xf7\x13\xdc\xcf\xd7\x2e\x53\xd9\xec\x04\xf4\x4a\xa7\xef\xfa\x86\x4f\xb2\x9d\xef\xb7\x6c\x9d\xff\x5f\x8b\x4f\x67\x1e\xb2\x4f\xc8\x3e\x8d\x94\x98\xc0\x7d\x0a\x21\x4e\xad\x39\x26\x7c\x9f\x06\x5c\x1b\x0e\x7c\x5f\x1e\x5d\x13\xff\x69\x41\x33\x5f\xc1\x3b\x58\x9f\x3a\xed\x19\xeb\x3d\xdf\xd8\x80\x29\x54\x38\xdf\x68\x53\xe0\x3e\x81\xfb\x14\x24\x9c\xaf\x79\x37\x88\x9f\x20\x7e\xf6\x6f\xa8\x8f\x2b\x5f\x79\x9d\x3b\x2f\x6c\x38\x8d\x03\x9d\x82\x87\x13\xd0\xbf\x41\x88\x53\x43\xb0\xa9\x24\x44\x13\x8c\xbb\xba\xd2\xbd\x05\xf7\x6f\x14\xe7\x12\x5a\x5c\xb8\x7e\x09\x2d\x2e\x74\xbf\xd0\xfd\x42\xf7\x0b\xd7\x2f\x29\xa2\x0b\xdd\x2f\x29\xa2\xbf\x96\xdc\x18\x7f\x7d\xbf\x94\x75\x57\xce\x57\xf6\xee\xfa\xe9\xfa\xe9\xf3\x0d\xf9\x90\x46\xaa\xdc\x75\x6a\x86\x36\x15\xbd\xde\x95\xed\x62\xa5\xa4\x17\xef\x2f\xbc\xbf\xbe\x37\xec\x74\xbb\x46\xf1\xcb\x17\xac\xc2\xbf\xa5\x58\x46\xaa\xe9\x42\xf7\x0b\xd7\x2f\x21\xca\x25\x44\xb9\xd0\xfd\x42\xf7\x4b\x70\x72\x49\x44\x7d\xad\x96\x16\xc6\x5f\xdf\x1b\xf3\x90\xae\x51\x64\xfd\x1a\xbc\xa2\xfb\x25\x50\xb9\x30\xfe\x42\xf7\x0b\xdd\x2f\x74\xbf\xbe\x37\x82\xb2\x5c\x5f\x3e\xb3\x5e\x3b\x38\xff\x7a\xbb\xd2\x0c\xfb\xef\x0d\x87\x37\xd6\xf2\x7b\x7b\xd1\xaf\x39\xf2\xb0\x4e\xeb\xb2\x9a\x7c\x6f\x77\x30\xfe\x12\xb4\x5c\xe3\x35\x53\x1e\xae\xb7\x3b\xe8\x7e\x09\x51\x2e\x8c\xbf\x30\xfe\xc2\xf8\x4b\xb8\x72\x49\x53\x5d\x0a\x30\x97\xd0\xe5\x12\xba\x5c\xd8\x7f\x61\xff\x85\xfd\x97\xd0\xa5\x41\x29\x77\x75\xbd\x56\x06\x82\x96\x6b\xbc\x79\xfc\xf6\x88\x02\xb0\xc6\x2b\x87\xb4\x47\x74\x80\x45\x07\x30\xe6\xf1\xae\xae\xdf\xae\xdc\x3e\x5f\xe3\xe9\x57\xc4\x44\x07\x58\x74\x80\x45\x07\x58\x74\x80\x45\x07\x58\xd8\x7f\x61\xff\xa5\xc9\xcc\xc2\xfe\x0b\xfb\x2f\xec\xbf\x50\xff\x1a\xaf\xad\x93\x1d\x44\xfd\x0b\xf5\x2f\xd4\xbf\x50\xff\x42\xfd\x0b\xf5\x2f\xd4\xbf\x50\xff\x12\xf0\x5c\xd8\x7f\x61\xff\x85\xfd\x17\xf6\x5f\xd8\x7f\x61\x7f\x6d\xe5\xef\xca\x4a\x63\x7a\xd4\xbf\xb4\xee\x7d\xed\x77\x16\xf6\x5f\x78\x7f\xe1\xfd\x85\xf7\x97\x10\xe8\x42\xfd\x0b\xf5\x2f\xd4\xbf\x50\xff\x7a\xcd\xfd\xb0\xff\xc2\xfe\x0b\xfb\x2f\xec\xbf\xb0\xff\x42\xfd\x0b\xf5\xaf\xf9\xca\xcc\xdf\xb8\x3f\xbb\x8f\xfa\x17\xea\x5f\x78\x7f\xcd\xd7\x7a\xc2\x5e\x63\xfc\x85\xf1\x17\xc6\x5f\x02\xa1\x46\x1c\xcd\x25\x04\xba\x90\xfe\x12\xfc\x5c\x48\x7f\x09\x7e\x2e\xc1\xcf\xf5\x8a\x5e\xdf\xd8\x61\x69\xbc\x8b\x0e\xb0\xe8\x00\x8b\x0e\x60\xa4\xe7\x5d\x5f\xb3\x7e\xd7\xdb\x5f\x29\xbd\x46\x7d\xde\xd5\x35\xbe\xa1\x74\x00\xed\x10\xef\xea\x33\xed\xb2\x40\xa8\xc6\x83\x77\x75\x8d\x3d\xa5\x09\x2c\x6a\xc0\x12\x0e\x5d\x34\x01\x23\xe2\xef\xea\x4a\xfb\x28\x34\xba\xa8\x04\x8b\x4a\xb0\xa8\x04\x8b\x4a\xb0\xa8\x04\xaf\x0c\x67\x51\x09\x16\x95\x60\x51\x09\x16\x95\x60\x51\x09\x16\x95\x60\x51\x09\x16\x95\x60\x51\x09\x16\x95\x60\x51\x09\x96\x90\xe9\x2b\xc8\x5d\xb4\x82\x25\x64\xba\x28\x06\xeb\x8d\x72\xd5\x2d\x78\x51\x0c\x16\xc5\x60\x51\x0c\x0c\x71\xb9\x2b\x2b\x7b\x2a\xa0\xba\x68\x08\x4b\x58\x75\x2d\x7b\xfa\xba\xbd\x52\x15\xb4\x04\xb9\xab\xeb\x7d\x8b\x69\x0b\x8b\xb6\xb0\xd6\x1b\xa7\x64\x7f\xb5\x99\x5a\xd2\x90\x97\x34\xe4\x45\x6d\xd0\xfc\xf0\xae\x6c\xed\xf8\x7a\x0d\x9d\xec\xb8\xc4\xe4\xb5\xde\x40\x5d\x3b\x4e\x7f\x58\xf4\x87\x25\x55\x79\xbd\xb1\x76\x54\x88\x45\x85\x58\x42\xb8\x6b\xbd\xe2\x44\xdf\x68\x09\xcb\x8b\x3a\xb1\xa8\x13\x8b\x3a\xb1\xa8\x13\x8b\x3a\xb1\x24\x2f\x2f\xea\xc4\x12\xe6\x5d\x86\xf4\x2e\x89\xcc\x4b\x13\xf6\x25\xf0\xbb\xf4\x6f\x5e\x92\x9a\xd7\x6b\xe3\x46\xcd\x58\xd4\x8c\xf5\x9a\xc9\xd0\x34\x96\x50\xf0\xa2\x6c\x2c\xa9\xcd\x9a\xba\xcc\x25\xf0\xbb\x28\x18\x8b\x82\xb1\xe8\x15\xba\xf3\xde\xd5\x08\x1f\xdf\xc1\xfd\x1b\xc0\xfb\x1a\xd7\xf8\xed\x6b\x25\x6f\x77\xe8\x15\x1a\xda\xdc\xf5\x5d\xe3\x73\xec\x11\xbd\x62\xd1\x2b\x16\x8d\x62\xbd\x81\xbd\x82\xb7\xc6\x7e\xdc\xb5\x14\x78\xfa\xb9\x7b\x4b\xa3\x58\x34\x8a\x57\xf8\xb9\xa8\x10\x06\x84\xdc\xf5\x95\xe5\xbe\x9f\xb0\x75\x07\x28\x0c\x6f\x30\xf2\xa2\x2d\xac\xfd\xda\x83\xbc\x41\x80\xf5\xda\xdf\xfb\xb9\x6f\xc1\x6b\x85\xff\x86\x6a\x50\x15\x96\x84\xe2\x45\x4f\x58\xf4\x84\x45\x4f\x58\xf4\x04\x8d\xb3\xee\xba\xac\x5a\x77\x3a\xc3\x42\xbb\x8b\x86\x60\x78\xe9\x5d\x5d\xe9\x0c\xbf\x31\xa4\x94\x84\x25\xd1\x78\xc5\xeb\x55\xec\xce\x50\x12\x16\x0d\x61\xd1\x10\x16\x0d\x61\x09\x05\x2f\x4a\xc2\xa2\x24\x2c\x4a\xc2\x6f\xf8\x10\x25\x61\x51\x12\x96\x44\xe3\x45\x4f\x78\xbd\x8d\x17\x55\x61\x51\x15\x56\xbc\xc1\x06\xce\x21\xf5\x60\xbd\x72\x5a\xea\xc1\xa2\x1b\xbc\x41\xc7\xbf\x11\xa3\x74\x83\x25\xad\x78\x51\x0f\x16\xf5\x60\xd1\x0d\xd6\x1b\xfe\x44\x37\x58\x54\x82\x45\x25\x58\xf4\x81\x45\x19\x58\x94\x81\x15\x6f\x80\x19\x3f\x43\x13\x58\x74\x80\x15\x6f\xb4\xb2\xf3\x46\x01\x58\x14\x80\x45\x01\x58\x14\x80\x45\x01\x58\x14\x80\x85\xfd\x17\xf6\x5f\x82\xcc\x8b\x02\xa0\x0d\xcb\x5c\x88\x7e\x21\xfa\x25\x05\x78\x21\xfa\x85\xdc\x97\x54\xdf\x85\xd3\x97\x00\xf2\x92\xd2\xbb\xd0\xfa\x42\xeb\x0b\xad\x2f\x9c\xbe\x70\xfa\x7a\x2d\x05\x70\xfa\x42\xe8\x0b\x95\xbf\x66\xb3\x5a\x3c\xdd\xd5\xe7\xc4\xfb\xad\x4f\x73\x0f\xcf\x1b\xd3\xea\xfb\x8b\xca\x17\x2a\x5f\xa8\x7c\xa1\xf2\x85\xca\x17\x2a\x5f\xa8\x7c\xa1\xf2\x25\x75\x77\x9d\xd7\x46\x3f\x5f\x59\xa5\xeb\xf9\x70\x3c\xbe\xf0\xf8\xc2\xe3\x4b\x38\x7a\x09\x47\x2f\x54\xbe\x50\xf9\x42\xe5\xeb\xbc\xd6\xbb\xee\x2d\x12\x5f\x48\x7c\x61\xf0\x95\xaf\x31\x85\x13\x8b\xac\x17\xb2\x5e\xc8\x7a\x19\x07\xb8\x30\xf5\xc2\xd4\x0b\x53\x2f\x4c\xbd\x30\xf5\xc2\xd1\x0b\x47\x2f\x1c\xbd\x10\xf4\xc2\xce\x0b\x35\xaf\xd7\xea\x0a\x2f\x2f\xbc\xbc\xf0\xf2\x1b\xff\xb9\xf2\x37\x0a\xd4\xe7\xb8\xcf\xe8\xd8\xe0\x8a\xbb\xfa\xab\xdc\x73\x74\xbc\xd0\xb1\xd1\x14\x77\x75\xbd\x3b\x8f\x8e\x17\x3a\x5e\xe8\x78\x09\x71\x2f\x21\xee\x85\x91\x97\x74\xda\x85\x94\x97\x70\xf7\x42\xca\x4b\xb8\x7b\xe1\xe5\x85\x97\x97\x70\xb7\x36\x02\x77\x65\x95\xef\x7a\xff\x8a\x5d\x40\xc7\x0b\x1d\xaf\x7c\x0d\x87\xdd\x79\x21\xee\x85\x8e\x17\x3a\xd6\xfe\xfa\xd7\x90\x67\x09\x7a\x2f\x8c\xbc\xb4\x11\x5b\x48\x79\x21\xe5\x85\x94\x97\xb6\x36\xaf\x31\xce\x32\x28\x71\xa1\xe6\x85\x9a\xd7\x1b\x1c\x22\x24\xbe\xb0\xf3\x42\xcd\x0b\x35\x2f\xd4\xbc\x50\xf3\x2a\x3b\x25\x24\xbe\x24\xd5\x2e\x04\xbd\x24\xd5\x2e\xe1\xf1\xf5\x06\x0d\x0a\x92\x2f\x41\xf2\x85\xac\x35\x27\xbf\xab\xeb\x7d\x5f\xf0\xf5\x12\x24\x5f\x46\x16\xbf\x52\xe5\x25\x54\xbe\x10\xf7\x42\xdc\x0b\x65\x2f\xe1\xf1\x85\xb5\x57\xbd\xbe\xe9\xbe\x35\x02\xe3\xab\xec\x1d\xee\x5e\xc2\xe3\x0b\x77\x2f\x09\xb9\xeb\x8d\x8e\x7b\x8d\x17\x04\xcc\x17\x12\x5f\x48\x7c\x49\xd1\x5d\x82\xe7\x4b\xf0\x7c\x61\xf3\xf5\xda\x40\x21\xf4\x85\xd0\x17\x42\x5f\x08\x7d\xbd\x11\xca\x08\x7d\x09\xa4\x2f\x6c\xbe\xb0\xf9\xc2\xe6\xda\x21\xce\x85\xcd\x17\x36\x5f\x6f\x08\x3c\x36\x5f\xd8\x7c\x61\xf3\x85\xca\x17\x2a\x37\xa4\xfd\xae\xd3\x6a\x10\x8e\x1d\x94\xcc\xbb\x70\xfa\xc2\xe9\x0b\xa7\xaf\xd7\x10\x06\xad\x2f\xb4\xbe\xd0\xfa\x1b\xe1\xb6\x30\xfb\x12\x90\x5f\x02\xf2\x0b\xbf\x2f\x01\xf9\x85\xe2\x97\x50\xfc\x42\xf1\x0b\xc5\x2f\x14\xbf\x50\xfc\x12\x90\x5f\x02\xf2\x0b\xd1\x2f\x44\xbf\x04\xe4\x97\x80\xfc\x42\xf7\xab\xed\x29\xba\x5f\xe8\x7e\xa1\xfb\x25\x38\xbf\x30\xfe\xc2\xf8\x0b\xe3\x2f\x8c\xbf\x24\x0b\x2f\xe1\xfa\x25\x59\x78\xa1\xfe\x85\xfa\x97\xd0\xfd\x12\xba\x5f\x42\xf7\x4b\xe8\x7e\x51\x03\x16\x35\x60\x09\xe3\x2f\x61\xfc\x45\x19\x58\xc2\xf8\x8b\x32\xb0\x28\x03\x8b\x26\xb0\x68\x02\x8b\x26\xb0\xa4\x0f\x6b\x56\x79\x57\xff\x96\xdd\xa7\x0f\x2c\xa9\xc4\x8b\x4a\x60\xac\xdd\x5d\xd9\xda\xfd\x37\x06\x98\x4a\xb0\xa8\x04\x4b\xd8\x7f\xfd\x06\x17\xf1\xa8\xb4\x82\x25\x05\x60\x19\xad\xb7\x5e\x23\x71\xba\xc1\xa2\x1b\x2c\x43\xce\x97\xd4\x80\x37\xd2\xdf\xd8\xf0\x69\x44\xd9\x7c\xa3\xb3\xd6\xd3\x13\x14\x99\x1a\xb6\xf1\xfa\x64\xbf\x0e\xd9\xfa\x10\xcf\xd7\x2d\xf8\x75\xeb\x7c\x5d\x33\x75\x3b\x9b\xba\x9d\x4d\xbd\xb5\xe6\xeb\x53\xb2\x89\x0d\x9b\xd8\xb0\x89\x0d\xfb\x1b\xac\xf4\xd7\x24\x39\xec\xef\xcd\x5d\x32\x8d\x88\xf0\xb0\x09\x0f\x9b\xf0\xb0\x09\x0f\xfb\xfb\x4d\x4e\x61\x6b\xee\x0f\x99\x61\x93\x19\xb6\xb4\x82\x4d\x66\xd8\x44\x85\x2d\x7d\x60\x7f\xaf\x8f\xf2\x76\xbd\xee\x23\xa4\x85\x4d\x54\xd8\x52\x06\x36\x69\x61\x4b\x19\xd8\x04\x86\x4d\x54\xd8\xdf\x9b\x30\x7b\xfc\xd6\xd4\x18\x42\xc2\xfe\xde\x94\x93\xd7\xcd\x34\x7d\x82\xbe\xaa\x24\x84\x4d\x42\xd8\x04\x83\x2d\x8f\xd9\xdc\xb4\xbb\xfa\x17\xfb\xfd\xdc\xf5\x6e\xf0\x9b\xa0\x44\x2a\xd8\x72\x9a\x37\x91\x60\x13\x09\x36\x91\x60\x13\x09\x36\x79\x60\x93\x07\xb6\x3c\xe6\x4d\x24\xd8\x44\x82\xfd\xfa\x95\x8e\xd7\xbd\xd5\x3d\x24\x0c\x6c\x62\xc0\xaf\x1b\xc4\x9b\x1f\x4d\x0c\xd8\xc4\x80\x4d\x00\xd8\x04\x80\x4d\x00\xd0\x23\xea\xae\xae\x5c\xae\x34\x6a\x82\x00\xb0\x25\x02\x6c\x32\xc0\x26\x03\x6c\x89\x00\x9b\x18\xb0\xc7\x9b\x52\x6d\x1a\x2f\x01\xe0\xf5\xab\xde\x04\x80\x2d\x05\x60\x8f\xd7\x9d\xc2\xdd\x26\x06\xfc\x7a\xcd\x92\x01\x36\x19\x60\x93\x01\xb6\x14\x80\x4d\x0c\xd8\xe3\xf5\xc2\xd7\x73\x91\x18\xb0\x89\x01\x9b\x18\xb0\x89\x01\x9b\x18\xb0\xc7\xeb\x3a\x63\x5f\xa0\xff\x06\xfd\x1b\xee\x6f\x70\xbf\x01\xfd\x16\xcc\xdf\x82\xf9\x1b\xd6\xef\xf9\xa6\x59\xd9\x0b\xf8\xbe\xe1\xfb\x86\xef\x5b\xa0\xfe\xf5\xbd\xd8\x82\xf0\x5b\xf8\x7d\x03\xf1\x0d\xc4\x37\x10\xdf\xf3\x37\xa7\xdb\x7c\x70\x7d\xb3\x64\x21\x6f\x20\xbe\x81\xf8\x9e\xbf\x59\xa5\x3e\x47\x8f\x9c\x37\x0b\x6f\xbe\xa9\xe2\xee\xb0\x90\xfb\x06\xdc\x5b\xe0\x7d\xc3\xee\x0d\xbb\xb7\x2e\x17\x1b\x7c\x6f\xf0\xbd\xc1\xf7\x96\x85\xbc\x21\xf8\x86\xe0\x7b\xbe\x6e\xbe\xee\xb0\x80\xfc\x06\xe2\x1b\x88\xef\xd7\xc9\x12\x8e\x6f\x38\xbe\x81\xf8\x06\xe2\x1b\x82\x6f\x08\xbe\x5f\x9f\x7e\x20\xbe\x21\xf8\x86\xe0\x1b\x82\x6f\x08\xfe\x9b\x05\x06\xc1\x7f\xfd\x83\x21\xf8\x86\xe0\x1b\x82\x6f\x08\xbe\x21\xf8\x9e\xef\xce\xfb\x2e\xac\xd7\x49\xcb\xfd\x87\xdd\x1b\x76\x6f\xd8\xbd\x7f\xfd\x50\xbf\xff\xcc\x0c\xda\xb0\x7b\x43\xed\x0d\xb5\x7f\x7d\x7d\x40\xf6\x06\xd9\x1b\x46\xef\xf5\x26\x0d\xcd\xf7\x13\x56\x76\x67\xbd\xae\x66\x76\xe7\x4d\x90\x5c\xaf\x3f\xd0\x7e\x3d\xbd\x5c\xe3\x9c\xab\xdd\xdd\x6b\xbf\xdf\xfa\x04\xbb\x03\x88\x37\x20\xde\x80\x78\x03\xe2\x2d\x44\xbf\x81\xef\x06\xbe\x7b\xbd\x09\xd1\xee\x3c\xcc\xdd\x30\x77\xc3\xdc\x0d\x73\xf7\xaf\xbb\xbc\x93\x2c\xef\x79\xcb\x78\xde\xcb\x9d\x87\xbc\x5b\xf6\xf3\x16\xcc\xdf\x82\xf9\x7b\xb9\xf3\x42\xfa\x6f\xa6\xd5\x5e\xaf\x73\xb3\x3b\xff\x7a\xd5\xaf\x37\x29\xbb\x5f\xf7\x7a\xb6\xaf\xc3\xa2\xfb\x2f\xd4\xaf\x77\xda\xdc\x82\xfc\x5b\x3e\xf4\xaf\x6b\x0b\x5c\xde\xfb\x4d\x9c\x77\xb7\x41\xf3\xde\xaf\x8b\x92\xbb\x0d\x97\xb7\xf0\xfe\x06\xca\x5b\x60\xff\xcd\xc2\xde\x70\x79\x0b\xe3\x6f\xd0\xbc\x65\x3c\x6f\xe8\xbc\xa1\xf3\xde\xaf\x53\xd4\xaf\x4b\xae\x4f\x7e\xdd\xec\xde\x84\x68\xdf\x02\xc1\xfc\x2d\x5c\xbf\x5f\x47\x2b\x30\xbd\x61\xf4\xde\xe7\xf5\xbc\xf1\x69\xee\x30\x74\xde\xea\x78\xb7\xb0\xfc\x6f\xd2\x34\x98\xde\x42\xf4\x1b\x52\x6f\x48\xbd\x21\xf5\xde\xaf\x63\x8d\x7b\x2b\x5c\xbf\xe1\xf5\x86\xd7\x5b\xd0\x7e\xeb\x04\xbf\xa1\xf6\xde\xaf\x7b\xb7\x7b\x08\xb5\x77\x38\xc9\xaf\xef\xa6\xa0\xfd\x9b\xc3\xb5\x5f\x67\x5c\x41\xfb\x0d\xb5\x37\xd4\xde\x50\x7b\x43\xed\x0d\xb5\xb7\x10\xfd\x06\xd9\x1b\x64\x9b\x0b\x7c\xd7\x37\xe7\x94\x95\x33\x0c\xa9\x37\x8c\xde\x30\x7a\xc3\xe8\x0d\xa0\x37\x80\xde\xf1\x7a\xd7\xb9\x93\x60\x7a\x83\xe9\x0d\xa6\xb7\x7a\xdd\x2d\x08\xbf\x61\xf4\x7e\x7d\x6e\x04\xe1\x37\x98\xde\x6f\xde\x3a\x8c\xde\xf1\x7a\x78\xf3\x1e\x60\x7a\x0b\xbf\x6f\xd0\x6c\xf2\xe9\x5d\xfd\xff\xba\x7b\x02\xe9\x1b\x34\x6f\xd0\xbc\xe1\xf2\x86\xc8\x1b\x22\x6f\x88\xbc\xcf\xeb\x1c\xfc\x7a\xfc\xb8\x3f\x42\xe2\x5b\xee\xf5\x86\xc8\x5b\xd0\x7b\x03\xe5\x2d\xe8\xbd\x05\xbd\xf7\x9b\x26\x26\xe8\xbd\xa1\xf3\x16\xf4\xde\x82\xde\x5b\xd0\x7b\x0b\x7a\x6f\x30\xbd\x05\xbd\x37\x8c\xde\x00\x7a\x83\xe6\x0d\x9a\xb7\xe0\xb6\x5e\x62\x77\x7d\xd7\xf8\x6b\xdd\x37\x18\xbd\xd5\xc4\xee\xf3\xeb\x01\xec\xca\x37\xad\xe5\x75\x09\x72\xf7\x04\xb7\x37\x8c\xde\x00\x7a\x03\xe8\x0d\x9d\x37\x74\xde\xd0\x79\x0b\x68\xbf\x49\x2f\x1b\x34\xef\x37\x0d\x19\x16\x6f\x58\xbc\x85\xa9\xb7\x30\xf5\x86\xc5\x5b\x20\x7a\x0b\x41\x6f\x21\xe8\x2d\x04\xbd\xc1\xf1\x06\xc7\x1b\x1c\x6f\x70\xbc\x05\x9c\xb7\x80\xf3\x86\xc5\x1b\x16\x6f\x58\xbc\x55\xa5\x6e\xa1\xe6\x9d\xee\x2a\x38\xde\xe0\x78\x0b\x32\x6f\x70\xbc\xc1\xf1\x06\xc7\x1b\x1c\xff\x86\x51\xe5\x6f\x30\x95\x4f\x70\x27\x5f\xdf\x44\x40\xfc\x9b\xf0\x2e\x38\xbc\xe1\xef\x86\xbf\x1b\xfe\x6e\xe0\xbb\x85\x85\x4d\xe8\xbb\x2b\x5b\xf7\x0d\xf2\xee\x37\x15\x07\xf8\xee\x7c\xb3\xfc\xdc\x3d\xb0\xbb\xc1\xee\x56\x3b\xba\xf3\xf5\x9f\xe6\x39\x05\x87\x37\xf0\xdd\x82\xc3\x5b\x86\xf7\xce\xd7\x0f\xcf\xf9\x84\xbf\x1b\xfe\x6e\xf8\xbb\xf3\xdd\x61\xdf\x6b\x80\x6b\x4e\xd4\x5d\xf5\xb1\x73\xcf\xdf\x2c\x29\x79\xde\x1b\xc2\x6e\x08\xbb\x61\xeb\x86\xad\x1b\xb6\xbe\x99\x3f\x5b\xf8\x77\x03\xd6\xad\x16\x74\xc3\xd6\x0d\x55\xb7\x50\xf0\x06\xac\x1b\xb0\x6e\xc0\xba\x41\xea\x06\xa9\x5b\x3e\xf7\x06\xa9\xbb\xde\x54\x1c\xf7\x16\xaa\x6e\xa8\xba\x85\x85\x37\x60\xdd\x80\x75\x03\xd6\x0d\x55\xb7\x40\xf1\x06\xac\x1b\xb0\x6e\x90\xba\x41\xea\xd6\x1b\x6c\x03\xd3\x0d\x4c\x37\x30\xdd\x90\x74\x43\xd2\x0d\x49\xb7\xa0\xf1\xaf\x93\x1f\x30\xdd\xf2\xbc\xb7\x00\xf2\x9b\x04\xba\xa1\xaa\x09\xe0\x77\x65\xeb\x6e\x43\xd5\x0d\x55\x37\x54\x7d\xdd\x88\x37\x54\xdd\x6f\x76\xa1\x00\xf2\x86\xaa\xba\xf6\xde\xd5\xdc\xd2\xd7\xd9\xd4\x8e\xc0\xd6\x0d\x5b\x37\x60\x7d\x53\x50\xcc\xf2\x9a\x1b\x9e\x6e\x78\xba\xe1\xe9\xeb\xe5\xbf\xd5\xa3\x6e\x90\xba\xdf\xd4\xd7\xff\xdb\x2c\xd4\xdd\xbf\x49\x23\x3e\xd3\xde\xf5\x9b\x03\x60\x07\xa1\xea\x86\xaa\x1b\xa4\x6e\x90\xba\x41\xea\x06\xa9\x1b\x98\x6e\xc1\xe7\x0d\x4f\x77\xbf\x51\x6d\xbe\x1d\xfd\x66\xa7\xd8\x4d\x60\xba\x81\xe9\x06\xa6\x1b\x98\x6e\x48\xba\xc1\xe8\x06\xa3\x1b\x8c\x6e\x30\xba\xc1\xe8\x9b\x50\xb9\xc1\xe8\x06\xa3\x1b\x8c\xbe\x81\x70\x1b\x92\x6e\x48\xba\x21\xe9\x16\xac\xde\xc0\xd4\x1c\xe7\xbb\xb2\xb5\xe3\xc0\x74\x43\xd2\x0d\x49\x37\x18\xdd\xaf\x8f\x23\x18\xdd\x60\x74\x83\xd1\x0d\x43\x37\x0c\xdd\x30\xf4\x75\x32\xfb\x4f\x57\xb3\xd7\xe1\x8c\x95\x1d\x07\xa0\x5b\xe0\x7a\xf7\x9b\x9f\x63\xaf\x61\xe8\x86\xa1\x1b\x86\xee\x37\x0d\x03\x86\xc6\x9b\xcb\x84\x3a\xe3\xd3\x6b\x19\x75\x06\xea\x0c\xd4\x19\xa8\xf3\x75\x9e\x8e\xd7\x1d\x13\x75\x86\x1a\xda\xc0\x9e\x81\x3a\x03\x75\x06\xea\x0c\xd4\x19\xa8\x33\xbe\x37\x03\x77\xba\xfe\x75\x82\x34\x55\x56\x88\x3b\xf0\x66\xbc\xa9\x9d\x42\xdc\x81\x3d\x43\x62\x7b\xa0\xce\x10\xdc\x0e\xc1\xed\x90\xcc\x1e\x42\xdc\x61\x1e\x7d\xe0\xd0\xd0\x67\x37\xbe\xed\xca\xed\xca\xed\xca\x70\xa5\x79\xe5\x6f\x82\x0d\x56\x0d\xac\x1a\xc2\xe0\x81\x58\x03\xb1\xc6\xf7\xba\x62\xeb\xc5\x8b\x58\x43\x48\x3c\x70\x6b\xe0\xd6\x10\x12\x0f\x21\xf1\x78\xd3\x87\x90\x6c\x08\x8c\x87\xc0\x78\xa0\xda\x90\x02\x1f\xd8\xf6\xcd\x4a\x8e\xef\xf5\x20\x4f\xb6\x59\xff\xfa\x62\xbe\x3e\xdc\x21\x1d\xfe\xcd\x0b\x0e\xb4\x1b\x02\xe6\x21\x60\x1e\x6f\xfa\xa7\x50\x79\x48\x84\x37\x91\xe3\xae\xac\x9a\x55\xb3\x6a\xd7\xb7\x29\xab\xdf\x5b\x4b\x47\xde\x65\x35\xe9\x6b\xbc\x19\xac\x7e\x6e\xa7\x04\xba\x03\xd5\x06\xaa\x0d\x54\x1b\xa8\x36\x50\x6d\x08\x6e\x07\xaa\x0d\x54\xfb\xba\xeb\x05\xaa\x0d\x3c\xfb\xaf\x87\xb1\x2e\xaa\x48\x36\x90\x6c\x20\xd9\x10\xd6\x0e\xdc\x1a\xb8\x35\xc6\x9b\x06\xeb\xce\x4b\x5a\x0f\x7c\x1a\xf8\x34\x70\x68\xe0\xd0\xc0\xa1\x81\x40\x43\x38\x3a\x04\xa2\x03\x8d\x86\x40\x74\x60\xd2\x18\xaf\xf3\xdf\xeb\x43\xec\xbe\x09\x44\x87\x40\x74\x08\x3e\x07\x1a\x0d\x81\xe5\xc0\xa4\x81\x49\xcd\x8d\xb9\xab\xc9\x03\x4e\xbe\x60\x72\x08\x23\x87\xa0\x71\xa8\xa7\x0d\xac\x1a\x58\x35\x04\x90\x43\x00\x39\xa4\x8a\x07\x62\x0d\xc4\x1a\x42\xc7\x21\x49\x3c\x04\x90\x03\xc3\x06\x62\x8d\xd7\x91\x71\xbe\xf9\x15\xee\x98\x10\x71\xe0\xd3\x90\x12\x1e\xc8\x34\x30\x69\xcc\x37\x15\xc1\xc9\xc4\xa1\x81\x43\x03\x87\x86\x80\x70\xa0\xd1\x40\xa3\x81\x43\x03\x87\x06\x0e\x0d\x61\xe1\x10\x0a\x8e\xf9\x06\xb5\xba\x87\x82\xc0\x81\x2b\x03\x45\x06\x8a\x0c\xe4\x18\xa8\x30\x04\x63\x03\x1b\x06\x36\x0c\x54\x18\x02\xad\x21\xd0\x1a\x02\xaa\xf1\xe6\xdb\x20\xc1\xc0\x80\x21\x64\x1a\x48\x30\x84\x4c\x43\x68\xf4\xf5\xbf\x0c\x0c\x18\x18\xf0\xf5\x89\x0c\xf4\x17\xe8\x2f\xd0\x5f\x08\x87\xc6\xeb\x96\x8d\x04\x43\x20\x34\xf0\x60\xe0\xc1\x10\x08\x0d\x21\xd0\x40\x85\x21\x04\x1a\x78\x30\xb0\x5e\x60\xbd\xc0\x7a\x81\xef\xe2\xf5\x88\xc5\x77\x81\xec\x02\xd9\x05\xa6\x0b\x4c\x17\xeb\xdd\x0d\xfe\x13\xd3\x85\x70\x68\x08\x87\x06\xb2\x7b\x1d\xeb\x43\x38\x34\xa4\x72\x07\xd6\x0b\x7c\x17\xc8\x2e\x90\x5d\xa8\x7a\x8d\x37\x65\x5b\xf0\x33\x30\x5d\x48\xd3\x0e\x64\x17\xc8\x2e\xd4\xb5\x86\xba\xd6\x40\x79\xa1\x73\x53\x60\xbd\xc0\x7a\x7a\x55\xde\xd5\x6f\x9d\x22\x94\x17\xd2\xb7\x43\xff\xa6\xc0\x7a\xa1\x8b\x53\x08\x99\x86\xea\xd6\x90\xb8\x1d\x12\xb7\x43\xe2\x76\x20\xc1\x10\x4a\x8d\xfd\xe6\x08\xb9\x93\x42\xa9\x81\x01\x43\x28\x35\x84\x52\xe3\x4d\x57\x90\xa6\xfd\xe6\xb3\x05\x1e\x0c\xf4\x17\xbf\x69\x4e\xee\x30\xd6\x0b\xac\x17\xdb\x1d\x46\x7c\x81\xf5\x02\xeb\x05\xd6\x0b\xac\x17\x6f\xd6\x3c\xe2\x0b\xc1\xd5\x78\x93\x97\x05\x57\x03\xeb\x85\xf0\x69\xbc\xf9\xec\xe6\x2d\xbc\xe9\xc9\x11\x6f\x82\xb9\x7b\x2b\x70\x6a\xea\xf1\x5d\x7d\x8e\x7b\x28\xf9\x3a\x84\x4c\x03\xeb\x45\xbc\x2e\xce\xbe\x95\x28\x2f\x24\x5f\x07\xd6\x0b\xac\x67\xda\xf2\x0c\x7c\x17\x82\xa5\x81\xf2\x42\xc8\x34\xde\x2c\x29\xac\x17\xba\x32\x05\xe2\x7b\x9d\xa1\x03\xf1\x85\xf0\x69\xc4\x9b\x5f\xe7\x7e\x62\xbd\x90\x6a\x1d\x52\xad\xcd\xba\xb9\xab\x4f\xce\xd7\xe1\xf5\xfb\xd7\xe7\x35\x50\x61\xa0\xc2\x40\x85\x81\x0a\x43\x62\x75\x48\xa9\x0e\x54\x18\x42\xa9\x81\x0d\x43\xc7\xa5\x78\x73\xa2\x04\x4e\x4d\x98\xb9\xeb\xb1\x9a\xb6\xff\xbd\xdf\xde\xcf\x41\x8b\x21\x75\x3a\xa4\x4e\xc7\x79\x13\xf9\x9d\x5e\xcc\x18\x98\x31\x04\x57\x03\x39\x06\x72\x0c\xe4\x18\x02\xad\x81\x16\x03\x21\x86\x70\x6b\x08\xb7\x06\x5a\x0c\xe1\xd6\x40\x8b\x71\x5e\x87\x5a\x77\x1e\x2d\x06\x5a\x0c\xb4\xa8\x6f\xf7\x0c\xb4\x18\x52\xa1\x43\x12\x74\x60\xc6\xc0\x8c\x21\x00\x1b\xc8\x31\x90\x63\x20\x47\x7d\x6d\xef\xea\x4a\x7e\x12\x39\x06\x42\x0c\x21\xd6\x10\x62\x0d\xb4\x18\x68\x31\x24\x3e\x87\x40\x6b\xe8\x8e\x14\xc2\xad\x21\xd0\x1a\x58\x32\x04\x5a\x03\x51\x06\xa2\x0c\x81\xd6\xc0\x95\x81\x2b\x03\x57\x1a\x27\x7c\x57\xd7\xbf\x5d\x70\xda\x25\x41\x87\x00\x6c\x60\xcf\xc8\x37\x39\xd0\xbe\xe4\x1b\x36\x6c\x5f\xb0\x67\x60\xcf\xc0\x9e\x21\x30\x1b\x08\x34\x10\x68\x08\xd2\x86\x20\x6d\xa0\xd1\x40\xa3\x81\x40\xe3\xf5\xe4\xc6\xa1\xf1\x26\xaa\xa1\xd1\x40\xa3\x91\x6f\x8a\xba\xfd\x42\xa3\x21\xb5\x39\x30\x69\x60\xd2\x78\x9d\xce\x91\x69\x20\xd3\x10\xb6\x0d\x7c\x1a\x82\xb7\x21\x6c\x1b\x52\x9b\x43\xc0\x36\x50\x6a\x08\xd5\x06\x56\x0d\x01\xdb\x40\xac\x81\x55\x43\xa8\x36\x10\x6b\x20\xd6\x10\xb0\x0d\xdc\x1a\xb8\x35\x70\x6b\xe0\xd6\x40\xac\x81\x58\x03\xab\x06\x4a\x0d\x81\xd9\x10\x98\x8d\x7c\x73\x17\x7d\x6b\xde\x74\x02\x7c\x1a\x92\x97\x03\x9f\x06\x3e\x0d\x7c\x1a\xf8\x34\x04\x66\x03\xa5\xbe\xf9\x8d\x21\x24\x1b\x88\x35\xea\xcd\x35\xf5\x0d\x42\xac\x21\x18\x1b\xc2\xb0\x51\xaf\x97\xbc\xdd\x11\x8c\x0d\x89\xcc\x81\x64\x03\xc9\x86\x60\x6c\x08\xc6\x06\xaa\x0d\x54\x1b\xa8\x36\x04\x63\x03\xdb\x06\xaa\x0d\x3c\x1b\xc2\xb0\x21\x0c\x1b\xd8\x36\xb0\x6d\x60\xdb\xc0\xb6\x21\xd9\x39\x10\x6e\x08\xc9\x86\x90\xec\x9b\xb3\x1f\x68\xf7\x5f\x9f\xfb\x37\x8b\xd2\xb7\x4c\x2a\x74\xe0\xdf\xc0\xbf\x6f\xc6\x63\xe0\xdf\xc0\xbf\x21\x39\x3a\x50\x70\xa0\xe0\xc0\xbf\x21\x60\x1b\x28\xf8\x4d\xb6\x0c\x14\x1c\x28\x38\x84\x6d\x43\xd8\x36\xb0\x70\x08\xd8\x86\x80\x6d\xe0\xe2\xd0\x59\x29\x04\x6f\x03\x23\x47\xbd\x39\x93\xf6\x14\x23\x07\x46\x0e\x8c\x1c\x18\x39\xd0\x71\xa0\xe3\x40\xc7\x81\x8e\x03\x1d\x07\x3a\x0e\x74\x1c\xe8\x38\xd0\x71\xa0\xe3\x40\xc7\x81\x8e\x03\x17\x87\x10\x6e\xa0\xe3\x40\xc7\x81\x8e\x03\x17\x07\x2e\x0e\x21\x5c\xfd\xf8\xef\x6a\x1a\xa1\x7d\x47\xc4\xe6\x92\xdd\xd5\xcf\xed\x35\xfe\x0d\xfc\x1b\xf8\x37\xf0\x6f\xe0\xdf\xe8\x37\xcf\xd0\x2e\xf7\x9b\x07\x68\x97\x31\x6f\x60\xde\x10\x92\x0d\xcc\x1b\x98\x37\x30\xef\x9b\x82\x18\xc2\xb0\x66\x71\xdc\xd5\x35\xf6\x0b\xe1\x06\xc2\x8d\x37\xf3\x13\xd5\x06\x9e\x0d\x3c\x1b\x6f\xc0\x39\x9e\x0d\x0c\x1b\x18\x36\x30\x6c\xa0\xd7\x10\x50\x0d\xdc\x1a\x42\xa9\x81\x5b\x03\xb7\x06\x6e\x0d\xdc\x1a\x6f\xe4\x3f\x7a\x0d\xf4\x1a\xe8\x35\x5e\x1f\x6e\xf4\x1a\xe8\xd5\xcc\xc3\xbb\xfe\xa7\x1f\x7f\x60\xd8\x40\xaf\x81\x5e\x03\xbd\xbe\xf9\x8d\xf1\x88\x55\xe0\xf4\xe0\xd6\x23\x4e\x7a\x70\xeb\xc1\xad\x26\x39\xcc\x37\xf7\xf5\xe0\xd3\x83\x4f\x0f\x3e\x3d\xc8\xf4\x20\xd3\x37\xb3\xf1\xa0\xd1\x23\xee\x79\x70\xe8\x41\xa0\x07\x7b\x1e\xe9\xd5\x47\xf4\xf3\x4d\x1b\x38\x38\xf4\xe0\xd0\x83\x43\x0f\x0e\x3d\xa2\xa2\x07\x8d\x1e\x1c\x7a\x70\xe8\xc1\xa1\x07\x81\x1e\xa4\x79\x90\xe6\x41\x9a\x07\x69\x1e\x74\x79\x70\xe5\xc1\x95\x07\x51\x1e\x44\x79\x10\xe5\x41\x91\x07\x45\x1e\x14\x79\x50\xe4\x41\x91\x47\x9c\xf4\x60\xc9\xf3\x66\x2c\xa0\xc8\x83\x1f\x0f\x7e\x3c\x38\xf1\xe0\xc4\x23\x42\x7a\x44\x48\x8f\x08\xe9\x9b\xce\x7d\x44\x48\x8f\x08\xe9\xc1\x8c\x67\xbc\x09\x12\x9f\x2b\xdd\x55\x71\xd2\x83\x22\x0f\x8a\x3c\x28\xf2\x48\x9d\x3e\x28\xf2\x88\x90\x1e\x2c\x79\x14\x4c\x1f\x14\x79\x50\xe4\xf9\xcd\x81\x71\x6f\x51\xe4\x41\x91\x07\x3f\x1e\x51\xd1\x23\x39\xfa\xa0\xc8\x83\x1f\x0f\x7e\x3c\xf8\xf1\xe0\xc7\x23\x1e\x7a\xc4\x40\x0f\x96\x3c\x92\xa0\x0f\xa2\x3c\x58\xf2\xfc\xa6\xe8\x1c\x9f\x63\x7e\x20\xae\x3c\xb8\xf2\x88\x7b\x1e\x71\xcf\x23\xee\x79\x90\xe6\xc1\x98\x47\xac\xf3\x60\xcc\x37\x3d\xe3\x60\xcc\xf3\x66\x7f\x61\xcc\xf3\xa6\x7e\x61\xcc\x83\x31\x0f\xba\x3c\x22\xa1\x07\x63\x1e\xf1\xd0\x23\xfa\x79\xf0\xe6\x9b\xb5\x75\xf0\xe6\xc1\x9b\xbf\xce\xf4\x78\xf3\xe0\xcd\x83\x37\x7f\x93\x43\x24\x2c\x1f\xd4\x79\x50\xe7\x6f\x86\xb6\xb4\xe5\x83\x3d\x8f\x38\xe9\x99\x6f\xc2\xf6\x9b\x1b\xe0\x6e\x63\xcc\x33\xdf\x64\xce\x37\xad\xc8\xdd\x9e\xaf\x23\xbe\xbb\x2d\x42\x7a\x10\xe8\x91\xa4\x7c\x10\xe8\x41\xa0\x26\x12\xfc\xe6\x09\x1c\x31\xd3\x83\x49\x8f\x68\xe9\x41\xa6\x07\x99\x1e\x31\xd3\x83\x4c\x4d\x6b\x9f\x47\xb4\xf4\xa0\xd4\xf3\x26\x22\xea\xdc\x74\xf0\xe9\xc1\xa7\x07\x9f\x1e\x7c\x7a\xf0\xe9\xc1\xa7\x47\x29\xf3\x41\xa9\x47\x47\xa7\x23\x72\x7a\x44\x4e\x0f\x6e\x3d\x88\xf5\xcc\x37\xf1\xc0\x8e\x88\x9c\x1e\x91\xd3\x23\x66\x7a\xc4\x4c\xcf\x7c\x93\x58\xec\x0b\xb6\x3d\xf3\xed\x4b\xbb\xbe\xdf\x1c\x27\x9f\xef\xdb\x21\x66\x7a\xc4\x4c\x0f\xf2\x3d\xa2\xa5\x47\xb4\xf4\x88\x96\x9e\xf5\xe6\x09\xf8\xa6\x48\x55\x3e\xe8\xf8\xa0\xe3\x23\x55\xf9\x60\xe4\xdf\xa4\x91\xf5\x26\x9f\xd8\x4d\xbc\x7c\x44\x51\x8f\x3e\x50\x67\xd9\x53\x69\xcb\x47\xda\xf2\x41\xd3\x07\x4d\x1f\x69\xcb\x47\xbc\xf5\x88\xb7\x1e\xf1\xd6\x83\xb2\x0f\xca\x3e\x22\xad\x47\x7a\xf2\xc1\xda\x07\x6b\x9f\x37\x5d\x19\x6b\x1f\xb1\xd7\x23\x3d\xf9\x48\x4c\x3e\xe8\xfb\x88\xc0\x9e\x37\x83\x02\x83\x1f\x0c\x7e\x30\xf8\x59\x76\x5c\x34\xf6\xa0\xef\x23\x19\xf9\xa0\xef\x83\xbe\x0f\xfa\x3e\xb8\xfb\x60\xed\x23\x0e\xfb\x26\xbd\x1c\xdc\x7d\xc4\x61\x8f\x38\xec\x11\x87\x3d\x0a\xa9\x0f\x1e\x3f\x78\xfc\xe0\xf1\x23\xf6\x7a\xc4\x5e\x0f\x1e\x3f\xeb\xcd\x95\xb5\x6b\x22\xad\x07\x8f\x1f\x24\x7e\x30\xf8\x11\x5d\x3d\xfb\xcd\xae\xb7\x5f\x78\xfc\x48\x52\x3e\x78\xfc\x20\xf1\x23\xc6\x7a\x30\xf8\xc1\xe0\x47\x8c\xf5\x37\xf1\x5e\x8c\xf5\x88\xb1\x1e\x6c\x7e\x50\xf9\x41\xe5\x07\x95\x1f\x54\x7e\xf0\xf8\xc1\xe0\x07\x83\x9f\xfd\x26\x55\xf2\x5d\x3a\x4c\x1d\x24\x7e\xf6\x9b\x95\x1d\x7e\xee\x4e\xa2\xef\x83\xbe\x8f\xe2\xe9\x83\xc1\x0f\x06\x3f\xe8\xfb\xe8\x30\x75\xc4\x5e\x0f\xfa\x3e\xb8\xfb\xe0\xee\x83\xb8\x0f\xe2\x3e\x58\xfb\x28\x89\x3e\xfb\x4d\x23\x74\x0f\xa5\x30\x9f\x37\x89\x48\x7f\xe4\x83\xbe\x0f\xee\x3e\x62\xac\x67\xbf\x7b\xe8\xcc\x63\xed\x83\xb5\x8f\xe8\xea\x11\x57\x3d\x58\xfb\x48\x64\x3e\x88\xfb\x88\xae\x1e\x71\xd5\x23\xae\x7a\x30\xf8\x91\xc2\x7c\x14\x43\x1f\x24\x7e\x44\x57\x8f\xe4\xe5\xa3\x9b\xd5\x41\xe2\x47\x8c\xf5\xe8\x8f\x7c\xd0\xf7\x11\x5d\x3d\xa2\xab\x47\x1f\xe4\x83\xb8\x0f\xd6\x3e\x58\xfb\x48\x4f\x3e\x88\xfb\x20\xee\x83\xb8\x8f\x5e\x57\x07\x77\x1f\xdc\xfd\xa6\x23\x1e\x94\x7d\x44\x57\x0f\xd6\x3e\x52\x95\x8f\x18\xeb\xc1\xdd\x47\xc2\xf2\x41\xdf\x07\x7d\x1f\xf4\x7d\xf4\xbd\x3a\x6f\xa6\x0a\xd6\x3e\xf8\xfa\x20\xeb\x83\xac\x0f\xa6\x3e\x98\xfa\x60\xea\x23\xf6\x7a\xc4\x5e\x8f\xd8\xeb\x41\xd9\x47\x7a\xf2\x41\xd9\x07\x53\x1f\x4c\x7d\x30\xf5\x51\x8e\x7c\x74\xbc\x3a\xf8\xfa\xe0\xeb\x23\x85\xf9\x88\xcf\x1e\x94\x7d\x90\xf5\x41\xd6\x47\x4c\xf6\x88\xc9\x1e\x31\x59\x93\x5e\xe6\xc1\xd1\x47\xda\xf2\x11\x7b\x3d\x62\xaf\x07\x41\x1f\x04\x7d\x10\xf4\x41\xd0\x47\xd4\xf5\x20\xe8\x83\xa0\x0f\x82\x3e\x92\x97\x0f\x82\x3e\x08\xfa\x48\x5e\x3e\x38\xfa\x88\xc0\x1e\x34\x7d\x70\xf4\x11\x81\x3d\x52\x98\x8f\x38\xec\x11\x87\x3d\xe2\xb0\x07\x65\xbf\x49\xb3\xe7\xbc\x69\xae\xce\xed\xf9\x4d\xd4\xf4\x5b\x77\x18\x29\x1f\x5c\x7c\x10\xf1\x51\x10\x7c\xb0\xf0\xc1\xbf\x07\xff\x1e\xfc\x7b\xf2\x4d\x73\x72\x27\xf1\xef\xc1\xbf\xe7\xcd\xc8\xc5\xbf\x07\xff\x1e\x69\xc8\x47\xa4\xf5\x28\xe1\x3d\x08\xf7\x28\xe1\x3d\x38\xf7\xe0\xdc\x83\x73\x0f\xce\x3d\x08\xf7\xa0\xda\x23\xf6\x7a\xc4\x5e\x0f\xc2\x3d\x08\xf7\x48\x4f\x3e\xa2\xb1\x07\xed\x1e\xb4\x7b\xd0\xee\xc1\xb9\x07\xe1\x1e\x84\x7b\x10\xee\x41\xb8\x07\xe1\x1e\x29\xc9\x07\xe7\x1e\x9c\x7b\x10\xee\x11\x99\x3d\x38\xf7\x88\xc9\x1e\xc9\xc8\x66\xe3\xdf\xd5\x95\xee\x27\xe6\x3d\x98\xf7\x60\xde\x23\x4a\x7b\x90\xef\x9b\x76\x75\x44\x69\x0f\x0a\x3e\x28\xf8\x88\xd2\x1e\x2c\x7c\xf0\xef\x91\x9e\x7c\x50\xf0\x41\xc1\x07\x05\x1f\xe4\x7b\x90\xef\xc1\xbc\x47\x1a\xf2\x41\xbe\x47\x1a\xf2\xc1\xbf\x47\xdc\xf6\xa0\xe0\x83\x82\x0f\x0a\x3e\x28\xf8\xe8\xf0\x7b\xb0\xf0\x41\xc1\x07\x05\x1f\x14\x7c\x14\xf5\x1e\x2c\x7c\xb0\xf0\x91\x92\x7c\x44\x78\x8f\xd8\xee\xc1\xc2\x07\x0b\x1f\x2c\x7c\x50\xf0\x41\xc1\x07\xff\x1e\xfc\x7b\x90\xef\xc1\xbc\x07\xf3\x1e\xcc\x7b\x30\xef\xc1\xbc\x07\xed\x1e\xb4\x7b\x70\xee\xc1\xb9\x07\xe7\x1e\x9c\x7b\x44\x7b\x0f\xda\x3d\x68\xf7\xa0\xdd\x83\x76\x0f\xda\x3d\x38\xf7\x20\xdc\x83\x70\x0f\xc2\x3d\xd8\xf6\x60\x5b\x13\x26\xa7\x39\xea\x77\x75\x4d\xbe\x6b\x7c\x9a\x5d\xc3\xb3\x07\xcf\x1e\x3c\x7b\x90\xec\x41\xb2\x07\xc9\x1e\x24\x7b\x90\xec\xc1\xb0\x07\xbd\x1e\xdc\x7a\xc4\x73\x0f\x6e\x3d\xb8\xf5\x88\xe7\x1e\xf1\xdc\x83\x61\x0f\x86\x3d\x18\xf6\x60\xd8\xf3\xa6\xc6\x89\xf0\x1e\x69\xc8\xc7\xa4\xa9\x83\x6a\xcf\x9b\xd6\x8e\x6a\x8f\x08\xef\x11\xe1\x3d\x08\xf7\x20\xdc\x83\x70\x0f\xc2\x35\x25\xfb\xae\x3e\x9f\xa7\x12\xdb\x3d\x38\xf7\xe0\xdc\x83\x73\x0f\xce\x3d\x6f\xa2\x26\xda\x3d\x68\xf7\xa0\xdd\x83\x76\x8f\xd8\xae\x89\xd9\xd3\x0c\xba\xbb\xfa\x4c\xdf\x3e\xe9\xc6\x47\x6c\xf7\xe0\xdf\x83\x7f\x0f\xfe\x3d\x22\xbc\x47\x84\xf7\x60\xe1\x83\x85\x8f\x08\xef\x41\xc4\x07\x11\x1f\x44\x7c\x10\xb1\x79\xe3\x77\x65\x65\x4f\x45\x75\x0f\x2e\x3e\xb8\xf8\x88\xea\x1e\xf1\xdc\x83\x88\x0f\x22\x3e\x58\xf8\x60\xe1\x83\x82\x0f\x0a\x3e\x28\xf8\xa0\xe0\x83\x7f\xcf\x9b\x47\x27\x7a\x7b\xf0\xaf\x99\xc3\x77\x75\xa5\x6f\x1f\x0a\x3e\x28\x38\xf1\x6f\x8a\xdb\x26\xfe\xcd\x37\xdb\x5f\xdc\x36\x45\x6c\x53\xac\x36\x51\x70\x22\xdf\x44\xbe\x29\x26\x9b\xf8\x37\xc5\x64\x13\x05\xa7\x98\xac\xa9\xa7\x77\xf5\x39\xcb\x95\xcb\xe7\x98\xee\x85\x88\x13\x05\x27\x0a\x4e\x14\x9c\x28\x38\x35\x18\x4b\x2c\x9c\x58\x38\xe5\x09\xff\xa6\x0e\xe2\xe2\x14\x93\x4d\x44\x9c\xa2\xb1\x29\x0e\x9b\xe8\x38\xd1\x71\xe2\xe2\x14\x81\x4d\x74\x9c\xca\x91\x13\x23\x27\x46\x4e\xb1\xd7\xc4\xc8\x89\x91\x53\xd4\x35\x45\x5d\x13\x2f\x27\x52\x4e\xa4\x9c\x48\x39\x91\x72\x22\xe5\x44\xca\xf9\xbd\xb9\x88\xc5\xaa\xfc\xcd\xe5\xfa\x72\xa5\x49\xe3\xd8\x39\xb1\x73\x8a\xae\xa6\xdc\xe3\x14\x63\x4d\xb9\xc7\xf9\x66\xb0\x23\xeb\xc4\xd4\x39\xde\xc4\x51\x3b\x85\xa9\x53\xd6\x71\x22\xeb\x44\xd6\x89\xac\x13\x59\x27\xb2\x4e\x19\xc8\x89\xaf\x53\x1e\x72\xca\x43\x4e\xac\x9d\x62\xb5\x89\xb5\x13\x6b\x27\xd6\x4e\xac\x9d\x0a\x94\x13\x71\xa7\x18\x6e\x8a\xe1\x26\xfa\x4e\xf4\x9d\xe8\x3b\x45\x72\x53\xb1\x72\x22\xf1\xc4\xe0\x29\x92\x9b\x48\x3c\x91\x78\x22\x71\xd3\xaa\xef\xea\x7a\x3b\x2b\xb6\x9b\xd8\x3c\x51\x79\xa2\xf2\x54\xac\x9c\xd8\x3c\xe5\x2a\xa7\x5c\xe5\xc4\xe9\x89\xd3\x13\xa7\x27\x4e\x4f\x91\xdf\x44\xeb\xa9\x70\x39\xd1\x7a\xa2\xf5\x94\xb7\x9c\xf2\x96\x53\xde\x72\x22\xf7\xc4\xec\x89\xd9\x53\xae\x72\x22\xf7\x14\x23\x4e\xfc\x9e\x62\xc4\xa9\x58\x39\xdf\xf4\x4b\xfc\x9e\xf8\x3d\x91\x7b\x62\xf6\x54\xa6\x9c\xa2\xc3\x89\xdc\x53\x81\x72\xe2\xf7\xc4\xef\x6f\x72\x6c\xca\x67\x4e\xc5\xca\xa9\x40\x39\x71\x7d\xe2\xfa\x14\x47\xce\x37\x49\x1b\xd7\x27\xae\x4f\x5c\x9f\x8a\x92\x13\xdd\x27\xba\x4f\xa5\xc9\x89\xf1\x53\x69\x72\xbe\x49\xbf\x48\x3f\x91\x7e\x22\xfd\x44\xfa\x89\xf4\x53\x94\x39\x45\x99\x13\xef\xa7\xf8\x72\xe2\xfd\x14\x5f\x4e\xf1\xe5\xc4\xfe\x29\x3b\x3a\xb1\x7f\x62\xff\x94\x1d\xfd\xa6\xf2\x26\xf6\x4f\xec\x9f\xb2\xa3\xcd\xcf\xbc\x2b\x2b\xfb\x3b\x7f\x73\x35\xfd\x55\x76\x99\x0e\x90\x74\x80\x94\x3b\x9d\xd4\x80\xa4\x06\x24\x35\x20\xdf\x9c\x40\x6a\x40\x52\x03\x92\x0e\x90\xa2\xd5\x29\x5a\x9d\xd4\x80\xa4\x06\x24\x35\x20\x65\x4d\x27\x35\x20\xe7\x9b\x11\x6a\x7f\xa9\x01\x49\x0d\x48\x6a\x40\x52\x03\x92\x1a\x90\xf2\xa8\x93\x0e\x90\x74\x80\xa4\x03\x24\x1d\x20\x65\x50\x27\x1d\x20\xe9\x00\x49\x07\x48\x3a\xc0\x9b\x41\x9a\xd4\x80\xa4\x06\x98\xde\x7c\x57\x9f\xec\x1b\x4d\x0d\x48\x6a\x40\xbe\x49\xc2\x32\xa8\x93\x26\x90\x34\x81\xa4\x06\x24\x05\x20\xd7\x9b\xd3\x6e\x97\x29\x00\x49\x01\x48\x0a\x40\x52\x00\x92\x02\x90\x14\x80\xa4\x00\x24\x05\x20\x29\x00\x49\x01\x48\x0a\x40\x52\x00\x92\x02\x90\x14\x80\xa4\x00\x24\x05\x20\x29\x00\x29\xef\x3a\xe9\x00\xa9\x70\x39\xe5\x60\xa7\xc8\x7b\x52\x06\x92\x32\x90\x94\x81\xa4\x0c\x24\x65\x20\x29\x03\x49\x19\x48\xca\x40\xca\xcd\x4e\xfa\x40\xbe\xd9\xcb\xf2\xb4\x93\x4a\x90\x54\x82\xa4\x12\x24\x95\x20\xdf\x44\x47\x2a\x41\x2a\x65\x4e\x5a\x41\x8a\xdd\xa7\xd8\x7d\x8a\xdd\x27\xf5\x20\xa9\x07\x29\x82\x9f\x34\x84\x54\xd0\x9c\x94\x84\xa4\x24\xa4\x38\x7e\xd2\x13\x52\x76\x77\x8a\xe6\xa7\x68\x7e\x52\x18\x92\xc2\x90\x6f\x96\x2c\x85\x21\x29\x0c\x49\x61\x48\x0a\x43\xca\xf4\x4e\x1d\xae\x53\x71\x73\xca\xfa\x4e\xca\x43\xca\xfd\x7e\x13\xf5\x93\xfe\x90\xda\xb9\x25\x15\x22\xa9\x10\x49\x85\x48\x19\x02\x29\x43\x20\x29\x12\x29\x03\x3c\xe9\x12\x49\x97\x48\xba\x44\xca\x16\x48\xea\x44\xca\x16\x48\x1a\x45\xca\x16\x48\x4a\x45\x52\x2a\x92\x52\x91\x94\x8a\xa4\x54\x24\xa5\x22\xe5\x0f\x24\xbd\x22\xe5\x0f\x24\xd5\x22\xe5\x8a\xa7\x5c\xf1\x94\x4b\x90\xda\xc2\x25\x35\x23\xe5\x15\x24\x4d\x23\x95\x59\xe7\x9b\x88\x4e\xd9\x48\xc5\xd6\x29\x87\x3c\xa9\x1c\x49\xe5\x48\xad\xe0\x92\xa6\x91\x72\x0c\x72\xbf\x49\x9e\xce\x8c\x1c\x83\xa4\x6f\x24\x7d\x23\xe5\x93\x27\x95\x23\xe5\x1b\xa4\x82\xec\xa4\x75\xa4\xdc\x83\xa4\x78\xe4\x9b\xc7\x2b\xf7\x20\x65\x1d\x24\xf5\xe3\xdf\xcc\x4f\xa7\x82\xfa\x91\xd4\x8f\xa4\x7e\xa4\xdc\x83\xa4\x7e\xa4\xdc\x83\xa4\x81\x24\x0d\x24\xe5\x1e\x24\x0d\x24\x69\x20\xa9\x51\x5c\xca\x40\x48\x19\xe9\x49\x15\x49\xaa\x48\xca\x43\x48\xda\x48\xca\x4b\x4f\x79\xe9\x29\x2f\x3d\x65\x26\x24\xb5\x24\xe5\x27\x24\xcd\x24\xe5\xa5\x27\xe5\xe4\xcd\x70\x4e\x3a\x49\xca\x4f\x48\x3a\x49\xca\x4c\x48\x6a\x49\x52\x4b\x52\x66\x42\xd2\x4c\x52\x7e\x42\x52\x4e\x52\x46\x7a\xd2\x4f\x92\x7e\x92\xf4\x93\xa4\x9f\xa4\xec\xf4\xa4\x9f\xa4\x36\x72\x49\x39\x49\x99\x0c\x29\x47\x3d\xe5\x30\x24\xe5\x24\x69\x26\x49\x33\x49\xd9\x0b\x29\x7b\x21\xe9\x27\x49\x3f\x49\x79\x0b\x29\x6f\x21\xe5\x2d\x24\x2d\x25\xa9\x28\x29\x47\x3d\xe5\xa8\xa7\xa6\x71\x29\x53\x3d\xe9\x2a\x49\x57\x49\xba\x4a\xd2\x55\x92\xae\x92\x74\x95\xa4\xab\xa4\x7c\x86\x7c\x33\xae\x65\x32\x24\x8d\x25\x69\x2c\x49\x63\x49\x1a\x4b\xd2\x58\x92\xc6\x92\x14\x95\x94\xc9\x90\x8a\xc2\x53\xeb\xb8\x94\xd5\x90\xb2\x1a\x92\xde\x92\xf4\x96\x94\xd5\x90\xf4\x96\x94\xe5\x9e\x0a\xc4\x93\xf6\x92\x32\xde\x93\x02\x93\x72\x1b\x92\x02\x93\x14\x98\xa4\xbd\xa4\xe6\x70\x29\x93\x21\xe9\x2d\x29\xd7\x3d\xa9\x2e\x49\x75\xc9\xf3\xa6\xeb\xfb\xd6\xd0\x5b\x92\xde\x92\xf4\x96\x94\xdb\x90\x54\x97\x94\xdb\x90\x72\x1b\x92\x02\x93\x54\x97\x94\xdb\x90\xb4\x97\x94\x09\x9f\x32\xe1\x53\x9e\x43\xca\x70\x48\x99\xf0\x29\xc3\x21\x29\x33\x49\x99\x49\x19\x0e\x49\x9f\x49\x79\x0e\x29\xcf\x21\xa9\x34\x49\xa5\x49\x2a\x4d\x52\x69\x92\x4a\x93\x94\x99\x94\xdb\x90\xf4\x99\xa4\xcf\x24\x7d\x26\x29\x33\x29\xb7\x21\x69\x2f\x49\x6f\x49\x7a\x4b\xd2\x5b\x52\x26\x43\xd2\x5b\x52\x0e\x43\xca\x55\x48\xb9\x0a\x29\x57\x21\xe5\x27\x24\x05\x26\x65\x23\x24\x05\x26\x65\xc2\x27\x1d\x26\xe5\x24\xa4\x9c\x84\xa4\xc9\x24\x4d\x26\x29\x30\x49\x81\x49\x0a\x4c\xca\x81\x4f\xb9\x07\x29\xf7\x20\xe5\x1e\xa4\xdc\x83\x94\x7b\x90\xb2\x0e\x92\x3e\x93\x72\x0f\x92\x32\x93\x34\x99\xa4\xc9\x24\x4d\x26\x69\x2f\x49\x7b\x49\xaa\x4b\x52\x5d\x92\xea\x92\xf2\x0a\x92\xde\x92\xf2\x0a\x52\x26\x7c\xd2\x5e\x92\xea\x92\xf4\x96\xa4\xb4\xa4\x5c\x82\xa4\xb4\x24\x8d\x25\xe5\x12\x24\xa5\x25\x65\x14\x24\x8d\x25\x29\x2a\x49\x45\x49\x59\xee\x49\x3f\x49\xca\x49\xca\x22\x48\xfa\x49\xd2\x4f\x52\x49\x77\x52\x4e\x52\xfe\x40\xca\x1f\x48\xfa\x49\xd2\x4f\x52\x96\x7b\x52\x51\x92\x7e\x92\x94\x93\x54\xba\x9d\x54\x91\xa4\x84\x24\x25\x24\x69\x20\x29\x1f\x20\x29\x21\x49\x09\x49\x99\x00\x29\xd6\xff\x66\xbc\xa7\x58\x7f\xd2\x3d\x92\xd6\x91\xb4\x8e\x14\xdf\x4f\x31\xfd\xa4\x72\x24\x95\x23\xa9\x1c\x49\xdf\x48\xfa\x46\x8a\xd7\xa7\x0c\xf6\xa4\x69\x24\x35\x23\xc5\xeb\x93\x9a\x91\xe2\xf2\x49\xc1\x48\x0a\x46\x8a\xc8\x27\xd5\x22\x45\xe1\x93\x46\xf1\xa6\xb2\x27\x75\x22\xa9\x10\x49\x85\x48\xfa\x43\xd2\x1f\x92\xf2\x90\x94\x87\x94\x5b\x9e\x6f\xd2\x35\xfd\x21\x29\x0f\x49\x73\x48\x9a\x43\xd2\x1c\x92\xda\x90\xd4\x86\x54\x00\x9d\x34\x87\x94\x4f\x9e\x72\xc8\x93\xce\x90\x14\x86\xa4\x30\xa4\x4c\xf2\xa4\x33\x24\x9d\x21\xe9\x0c\x49\x67\x48\x3a\x43\xd2\x19\x92\xc2\x90\x14\x86\xa4\x2d\x24\x6d\x21\xfb\x3f\xd3\xb0\xef\xea\xb7\xbe\x83\xd4\x83\x14\x43\x4f\x8a\x41\xca\x00\x4f\x5a\x41\x52\x09\x92\x3e\x90\x34\x81\xa4\x00\xa4\x08\x78\xd2\x01\x92\x0e\x90\x14\x80\xec\x77\xc7\xee\xf9\x29\xf5\xc2\x45\x01\x28\x11\xf0\xa2\x00\x14\xf6\x2f\x11\xf0\xc2\xfe\x25\x4f\xbb\x28\x00\x25\x02\x5e\x32\xb4\x8b\x1a\x50\xd4\x80\x92\x9b\x5d\xd4\x80\xa2\x00\x14\x05\xa0\x28\x00\x25\x2b\xbb\xe8\x00\x45\x07\x28\x15\xc1\x45\x0d\x28\x91\xf1\x12\x19\x2f\x6a\x40\x51\x03\x8a\x02\x50\x14\x80\xdf\x5c\x7d\xd1\xf0\x12\x0d\x2f\xec\x5f\xa8\xbf\x50\x7f\xa1\xfe\x12\x13\x2f\xec\x5f\xf2\xae\x0b\xe3\x17\xba\x2f\xfc\x5e\xf8\xbd\x30\x7b\x61\xf6\xfa\xde\xf4\xfe\xf2\x69\xe5\x9a\x7a\xd7\xb0\x6a\x57\xb6\x2b\xdb\x5f\xd5\xae\x6f\xd7\xb7\x2b\xdb\xbf\xe8\xde\x8a\x80\x17\x5a\x2f\xb4\x5e\x08\xbd\x10\x7a\x21\xf4\x42\xe8\x85\xcd\x0b\x9b\x17\x36\x2f\x71\xf0\xc2\xe6\xa5\x3a\xb8\x50\x79\xa1\xf2\x42\xe2\x85\xbe\x0b\x7d\x97\x3c\xea\x12\x01\x2f\xf4\x5d\xe8\xbb\xd0\x77\x21\xee\xc2\xda\x85\xb5\x4b\x04\xbc\x50\x76\xa1\xec\x42\xd9\x85\xaf\x0b\x59\x17\x9a\x2e\x34\x5d\xaa\x80\x4b\x04\xbc\x90\x75\x21\xeb\x42\xd6\x85\xac\x0b\x53\x97\x98\x78\x21\xeb\x12\x13\x2f\x64\x5d\x38\xba\x44\xc0\x0b\x47\x17\x82\x2e\xec\x5c\xa2\xde\x85\x9d\x0b\x3b\x17\x76\x2e\xec\x5c\x78\xb9\xb4\xf2\x2a\xa4\x5c\x48\xb9\x30\x72\x89\x7d\x17\x3a\x2e\x74\x5c\xe8\xb8\x70\x71\x21\xe2\x42\xc4\x85\x88\x0b\x11\x17\x16\x2e\x2c\x5c\x58\xb8\xb0\x70\x61\xe1\x92\x71\x5d\xe2\xe0\x85\x8b\x0b\x11\x17\x22\x2e\x44\x5c\x88\xb8\x44\xc3\x0b\x17\x17\x2e\x2e\x5c\x5c\x88\xb8\x10\x71\x21\xe2\x42\xc4\x85\x82\x0b\xff\xd6\x9b\xab\x8f\x7f\x0b\xf9\x16\xf2\x2d\xe4\x5b\x98\xb7\x64\x68\x17\xf2\x2d\xe4\x5b\xe2\xe0\x85\x7f\x0b\xff\x16\xfe\x2d\x31\xf1\x42\xc1\x85\x82\x4b\x34\xbc\x50\x70\xe1\xdf\xc2\xbf\x85\x7f\x0b\xff\x16\xfe\x2d\xfc\x5b\xf8\xb7\x44\xc3\x0b\x05\x97\x5c\xee\x12\x19\x2f\x44\x5c\x88\xb8\x10\x71\x21\xe2\xc2\xc2\x85\x85\x0b\x0b\x17\x0a\x2e\xe4\x5b\xe2\xe0\x85\x7c\x0b\xf9\x16\xf2\x2d\xe4\x5b\xc8\xb7\x44\xc0\x0b\xf3\x96\x08\x78\x89\x80\x17\xfe\x2d\xfc\x5b\xf8\xb7\x90\x6f\x21\xdf\x42\xbe\x85\x79\x0b\xf3\x16\xda\x2d\xb4\x5b\x38\xb7\x70\x6e\x21\xdc\xc2\xb6\x85\x6d\x0b\xd5\x16\xaa\x2d\x54\x5b\xa8\xb6\xf0\x6c\x61\xd8\x42\xaf\x85\x58\x0b\xb1\x16\x4a\x2d\x7c\x5a\xf8\xb4\xf0\x69\x61\xd2\xc2\xa4\x85\x49\x0b\x93\x16\x1a\x2d\x34\x5a\x68\xb4\x70\x68\xe1\xd0\xc2\xa1\x85\x40\x0b\x7b\x16\xd2\x2c\x8c\x59\x18\xb3\xd0\x65\xa1\xcb\x42\x97\x85\x1f\x0b\x2d\x16\x42\x2c\x84\x58\x08\xb1\x10\x62\x21\xc4\x42\x88\x85\x10\x0b\x21\x16\x42\x2c\x84\x58\xd8\xb0\xb0\x61\x61\xc3\xc2\x86\x85\x0a\x0b\x15\x16\x2a\x2c\x54\x58\xa8\xb0\x50\x61\xa1\xc2\x42\x85\x85\x07\x0b\x0f\x16\x1e\x2c\x24\x58\xe2\xdd\x25\x0b\xbd\xc4\xbb\x4b\xbc\xbb\x10\x62\x21\xc4\x42\x88\x85\x10\x0b\x21\x16\x1e\x2c\x3c\x58\x78\xb0\xf0\x60\x89\x80\x17\x2a\x2c\x54\x58\xa8\xb0\x50\x61\xa9\x3b\x2e\x0d\xc5\x4b\x64\xbc\x10\x62\x61\xc3\x52\x89\x5c\x08\xb1\x10\x62\xa1\xc2\x52\x95\x5c\xa8\xb0\x50\x61\x89\x89\x17\x2a\x2c\x3c\x58\x78\xb0\xf0\x60\xe1\xc1\xc2\x83\x85\x07\x0b\x0f\x16\x12\x2c\x24\x58\x22\xe6\x85\x07\x0b\x0f\x16\x1e\x2c\x3c\x58\x18\xb0\x30\x60\x89\x9e\x97\xac\xf5\xd2\x56\xbc\x64\xad\x17\x36\x2c\x6c\x58\x22\xe9\x85\x10\x0b\x21\x16\x42\x2c\x84\x58\x08\xb1\xb0\x61\x61\xc3\xc2\x86\x85\x0a\x0b\x0f\x16\x1e\x2c\x51\xf5\x12\x4f\x2f\xf1\xf4\xc2\x86\x85\x0a\x0b\x15\x96\xd8\x7a\xc9\x72\x2f\x11\xf6\xd2\x6e\xbc\xc4\xd9\x0b\x2d\x96\x38\x7b\xc9\x78\x2f\x19\xef\x85\x1c\x0b\x39\x16\x66\x2c\xb9\xee\x85\x19\x4b\xe4\xbd\x90\x63\x21\xc7\x42\x8e\x25\x0a\x5f\xf2\xde\x0b\x3f\x16\x7e\x2c\xfc\x58\xc8\xb1\x90\x63\xe1\xc4\xc2\x89\x85\x13\x4b\x14\xbe\xd0\x62\xa1\xc5\x42\x8b\x85\x16\x0b\x2d\x16\x5a\x2c\xb4\x58\x68\xb1\x44\xe4\x4b\x2c\xbe\x90\x63\xc9\x84\x2f\xfc\x58\xc8\xb1\x90\x63\x21\xc7\x42\x8e\x85\x1c\x0b\x39\x96\x7c\xf8\xd2\x74\xbc\x50\x64\xa1\xc8\x92\x1b\x5f\x58\xb2\xb0\x64\x61\xc9\xc2\x92\x85\x25\x0b\x4b\x96\x96\x63\x25\x9a\x5f\x88\xb2\x44\xf3\x4b\x34\xbf\xe4\xcc\x97\x98\x7e\x89\xe9\x97\xcc\xf9\x92\x33\x5f\x6a\xab\x0b\x6f\x16\xde\x2c\xbc\x59\x78\xb3\xf0\x66\xe1\xcd\xc2\x9b\x85\x37\x0b\x6f\x16\xde\x2c\xbc\x59\x78\xb3\x44\xf9\x0b\x6f\x16\xde\x2c\xbc\x59\x32\xea\x0b\x75\x16\xea\x2c\xd4\x59\xb2\xeb\x0b\x7b\x96\x7c\x80\xc2\x9e\x85\x3a\x0b\x75\x16\xea\x2c\x59\x01\x85\x3d\x0b\x7b\x16\xf6\x2c\xec\x59\xd8\xb3\xb0\x67\x61\xcf\x92\x69\x5f\x08\xb4\x10\x68\x21\xd0\x42\xa0\x85\x40\x4b\x86\x40\xe1\xd0\x92\x21\x50\x32\x04\xca\x24\xad\x42\xa6\x25\x5b\xa0\x64\x0b\x94\x6c\x81\x92\x2d\x50\x88\xb5\x64\x0b\x94\x6c\x81\x32\xb7\xb8\x64\xe6\x17\x92\x2d\x24\x5b\x48\xb6\x64\xe6\x17\x9e\x2d\x99\xf9\x25\x97\xa0\xb0\x6d\x69\x87\x56\x08\xb7\x64\xe9\x97\xec\x82\xd2\xaa\xbc\x64\xe9\x17\xf2\x2d\xe4\x5b\xc8\xb7\xb4\x46\x2b\x19\x08\x25\x57\xbf\xb0\x70\xc9\xcf\x2f\xd9\x08\x85\x88\x0b\x11\x97\x2c\xfd\xc2\xc5\x85\x8b\x0b\x11\x97\x3a\xf1\xc2\xc5\x85\x8b\x4b\xae\x42\xc9\x55\x28\xb9\x0a\x85\x94\x0b\x29\x17\x52\x2e\xb9\x0a\x25\x57\xa1\x50\x73\xa9\x1c\x2f\x6d\xd5\x0a\x41\x17\x82\x2e\xec\x5c\xd8\xb9\xe4\xed\x17\x76\x2e\xec\x5c\x32\x1c\x4a\x86\x43\xe1\xe8\x92\xe1\x50\x68\xba\xd0\x74\xa1\xe9\x92\xe1\x50\x32\xf9\x4b\x9e\x43\xc9\xe4\x2f\x99\xfc\x25\xe7\xa1\xe4\x3c\x14\xee\x2e\xdc\x5d\xb8\xbb\x70\x77\xc9\x73\x28\x6d\xd8\x4a\xb6\x43\x61\xf0\xc2\xe0\x85\xc1\x0b\x83\x17\x06\x2f\xf9\x0f\x85\xc4\x4b\xfe\x43\xe1\xf1\x92\xff\x50\xa8\xbc\x50\x79\xa1\xf2\x92\xff\x50\xd8\xbc\xb0\x79\x61\xf3\x92\x05\x51\xb2\x20\x0a\xa7\x17\x4e\x2f\xb9\x10\x25\x17\xa2\x64\x3e\x94\x6c\x87\xc2\xec\x85\xd9\x4b\xce\x43\xc9\xf9\x2f\xcc\x5e\x98\xbd\xe4\x3c\x14\x72\x2f\xd9\x0e\x85\xd6\x4b\x9e\x7f\x61\xf6\x42\xeb\x25\xe7\xa1\x30\x7b\xc9\x73\x28\x79\x0e\x25\xcf\xa1\x64\x38\x14\x8a\x2f\x79\x0e\x25\xcf\xa1\xb0\x7c\x61\xf9\x92\xd5\x50\x32\xfc\x0b\xcb\x17\x96\x2f\x59\x0d\x25\xab\xa1\x70\x7d\xc9\x6d\x28\xb9\x0d\x25\xc3\xbf\x64\x38\x94\x0c\x87\x42\xfd\x85\xfa\x0b\xf5\x17\xc6\x2f\xf9\x0c\x25\x9f\xa1\x90\x7e\x21\xfd\x42\xf7\x25\x33\xbf\x64\x2c\x14\xae\x2f\x5c\x5f\x72\x15\x0a\xdd\x97\x0c\xfc\x92\xab\x50\x48\xbf\x64\x2c\x14\xde\x2f\xbc\x5f\x32\x16\x0a\xf5\x97\xbc\x85\x92\xb7\x50\x14\x80\xa2\x00\x94\xec\x85\x92\xbd\x50\xd4\x80\xa2\x06\x94\x9a\xf4\x92\x7b\x5f\xb2\xee\xab\xde\x9d\xf7\x24\x95\xc3\x50\xb2\x17\x8a\x4a\x50\x94\x81\xa2\x0c\x14\x65\xa0\x28\x03\x25\x33\xa1\x64\xdd\x17\x95\xa0\xe4\x27\x14\x95\xa0\xe4\x24\x14\x95\xa0\xa8\x04\x45\x1f\x28\x39\x09\x45\x25\x28\x99\x09\x25\x33\xa1\x64\x26\x14\xdd\xa0\xe8\x06\x25\x3f\xa1\xa8\x07\x45\x3d\x28\x8a\x41\x51\x0c\x4a\xed\x79\xd1\x0d\x4a\x4e\x7e\xd1\x0d\x4a\x4e\x7e\x51\x0f\x8a\x6e\x50\x32\x10\x8a\x6e\x50\x32\x10\x8a\x7a\x50\xd4\x83\xa2\x1e\x94\x0c\x84\xa2\x21\x94\x0c\x84\x52\x63\x5e\xf2\x10\x8a\xaa\x50\x54\x85\x92\x87\x50\xb4\x85\x92\x8d\x50\x14\x86\x92\xab\x5f\x72\xf5\x4b\x36\x42\xc9\xcf\x2f\x9a\x43\xc9\x49\x28\x39\x09\x45\x7f\x28\x39\x09\x25\x27\xa1\x64\xe6\x97\xcc\x84\xa2\x4b\x14\x5d\xa2\xe8\x12\x45\x97\x28\xf9\xf9\x25\x4b\xa1\x68\x14\x25\x4b\xa1\xe4\x27\x14\xa5\xa2\xff\x67\xfd\xcd\x26\x57\xb4\x54\x85\x26\x54\x34\xa1\xa2\x09\x15\x2d\x55\xa1\x25\xec\x37\xd1\xa2\x89\x16\x4d\xb4\x68\xc9\xfb\xad\xb1\x59\x13\x30\x9a\x80\xd1\x04\x8c\x26\x60\x34\x01\xa3\x25\x32\xb4\x44\x86\x26\x63\x34\x19\xa3\xc9\x18\x4d\xc6\x68\xa2\x45\x4b\x61\x68\xd2\x45\x93\x2e\x5a\x3a\x43\x93\x2e\x5a\x22\x43\x4b\x64\x68\xc9\x0b\x4d\xc0\x68\xc9\x0b\x4d\xc6\x68\x29\x0c\xad\xa0\xbc\xa5\x30\x34\x31\xa3\x89\x19\x4d\xcc\x68\x62\x46\x13\x33\x5a\x22\x43\x4b\x64\x68\x89\x0c\xad\x94\xbc\xa5\x33\xb4\x74\x86\x96\xf2\xdf\xd2\x19\x9a\xe0\xd1\xd2\x19\x5a\x22\x43\x4b\xfc\x6f\xe9\x0c\x2d\x9d\xa1\x09\x21\x2d\x91\xa1\x25\x32\xb4\x92\xf1\x26\x87\x34\x39\xa4\x25\x32\x34\x51\xa4\xc9\x21\x4d\x0e\x69\x72\x48\x93\x43\x9a\x1c\xd2\xe4\x90\x96\xce\xd0\x44\x91\x26\x8a\x34\x51\xa4\x25\x32\xb4\x44\x86\xd6\x69\xbd\xc9\x24\x4d\x26\x69\x32\x49\x4b\x67\x68\x32\x49\x93\x49\x9a\x4c\xd2\x64\x92\x26\x93\x34\x99\xa4\xc9\x24\x2d\x91\xa1\x89\x25\x2d\x91\xa1\x25\x32\x34\xe1\xa4\x49\x26\x2d\x91\xa1\x25\x32\x34\xf9\xa4\x25\x32\xb4\x44\x86\x26\xa5\x34\x29\xa5\x25\x32\x34\x41\xa5\x09\x2a\x4d\x50\x69\x82\x4a\x13\x54\x5a\x3a\x43\x4b\x61\x68\xb2\x4a\x93\x55\x5a\x0a\x43\x13\x57\x5a\x22\x43\x93\x58\x9a\xc4\xd2\x24\x96\x96\xc8\xd0\x52\x18\x9a\xd0\xd2\x52\x18\x5a\x0a\x43\x93\x5b\x9a\xd0\xd2\x84\x96\x26\xb4\x34\xa1\xa5\x09\x2d\x2d\x85\xa1\x09\x2d\x4d\x68\x69\x42\x4b\x4b\x64\x68\x72\x4b\x4b\x64\x68\x89\x0c\x2d\x91\xa1\x09\x30\xad\x10\xa1\xc9\x30\x4d\x86\x69\xe9\x0c\x4d\x8c\x69\xe9\x0c\xad\x1c\xa1\x09\x33\x4d\x98\x69\xa9\x0d\x4d\x9e\x69\xf2\x4c\x2b\x4d\x68\xf2\x4c\x4b\x6d\x68\xa9\x0d\x4d\xaa\x69\xa9\x0d\x2d\xb5\xa1\x35\x6c\x6b\xe2\x4d\x13\x6f\x9a\x78\xd3\xd2\x1c\x9a\x84\xd3\xd2\x1c\x9a\x90\xd3\x92\x1d\x9a\x9c\xd3\x4a\xe7\x9b\xa8\xd3\x44\x9d\x96\xf2\xd0\xa4\x9d\x96\xf2\xd0\xa4\x9d\x26\xed\xb4\x96\x6f\x4d\xe0\x69\x29\x0f\x4d\xe6\x69\x32\x4f\x93\x79\x9a\xcc\xd3\x64\x9e\x26\xf0\xb4\x12\x87\x26\xf0\x34\x81\xa7\x09\x3c\x4d\xd4\x69\xa2\x4e\x13\x75\x9a\x84\xd3\xd2\x19\x5a\x22\x43\x4b\x61\x68\x42\x4e\x13\x72\x5a\x22\x43\x93\x73\x9a\x9c\xd3\xe4\x9c\x26\xe4\x34\x21\xa7\x09\x39\x4d\xbc\x69\xe2\x4d\x13\x6f\x9a\x78\xd3\x92\x17\x9a\x78\xd3\xc4\x9b\x26\xde\x34\xf1\xa6\xc9\x36\x4d\xb0\x69\x52\x4d\x13\x69\x9a\x30\xd3\x84\x99\x26\xcc\x34\x61\xa6\x49\x32\x2d\x3d\xa1\x09\x33\x2d\x3d\xa1\x09\x33\x2d\x31\xa1\x09\x33\x4d\x98\x69\x92\x4c\x4b\x46\x68\xc9\x08\x4d\x92\x69\x92\x4c\x93\x64\x9a\x00\xd3\x04\x98\x26\xc0\x34\x01\xa6\x25\x1d\x34\x19\xa6\xc9\x30\x4d\x80\x69\x02\x4c\x13\x60\x9a\x00\xd3\x04\x98\x26\xc0\x34\x01\xa6\x09\x30\x2d\xad\xa0\xc9\x30\x2d\xad\xa0\xa5\x15\x34\x49\xa6\xa5\x15\x34\x61\xa6\xa5\x15\x34\x79\xa6\xc9\x33\x2d\xa1\xa0\x25\x14\x34\xa9\xa6\x25\x14\x34\xc1\xa6\x09\x36\x4d\xb0\x69\x09\x05\x2d\xa1\xa0\x89\x37\x4d\xb0\x69\x52\x4d\x93\x6a\x5a\xe2\x40\x93\x6a\x9a\x3c\xd3\x52\x03\x5a\x6a\x40\x4b\x0d\x68\x82\x4d\x4b\x0d\x68\xb2\x4d\x13\x69\x5a\x0a\x40\x4b\x01\x68\xc1\xff\x16\xfc\x6f\xe2\x4d\x0b\xfe\x37\x09\xa7\x85\xfa\x9b\x84\xd3\x24\x9c\x26\xe1\x34\x09\xa7\x89\x37\x4d\xb6\xe9\xfd\xad\xbf\x80\xb9\x01\x73\x03\xe6\x06\xcc\x0d\x98\x1b\x30\xf7\xae\xd3\xea\xfa\xdc\xd6\xb0\xb2\x4d\xb6\xc9\x36\xd9\x16\xdb\x62\x5b\x6c\x8b\x6d\xb1\x2d\xb6\xc5\xb6\xd8\x16\xdb\x62\xdb\x6c\x9b\x6d\xb3\x6d\xb6\xcd\xb6\xd9\x36\xdb\x66\xdb\x6c\xfb\xda\x5e\x08\xbe\xeb\xb0\x4e\xeb\xb2\x6e\x6b\x58\x8f\x35\xad\x65\x65\x3b\xd8\x0e\xb6\x83\xed\x60\x3b\xd8\x0e\xb6\x83\xed\x60\x3b\xd8\x0e\xb6\x93\xed\x64\x3b\xd9\x4e\xb6\x93\xed\x64\x3b\xd9\x4e\xb6\x93\xed\x64\xbb\xd8\x2e\xb6\x8b\xed\x62\xbb\xd8\x2e\xb6\x8b\xed\x62\xbb\xd8\x2e\xb6\x9b\xed\x66\xbb\xd9\x6e\xb6\x9b\xed\x66\xbb\xd9\x6e\xb6\x9b\xed\x66\x1b\x6c\x83\x6d\xb0\x0d\xb6\xc1\x36\xd8\x06\xdb\x60\x1b\x6c\x83\xed\x61\x7b\xc6\xdf\x30\x9d\x71\x98\xce\x38\x4c\x67\xbc\xbe\xfe\x02\xe4\x05\xca\xfb\x2c\x19\xa6\x35\x0e\x73\x1a\xeb\x3a\xd8\x13\xf7\x90\x13\xd0\xa9\xdf\x75\x7d\x2c\x0d\x9d\x78\x4e\x3b\x1f\xc6\x31\x0e\xe3\x18\x87\x81\x8e\xc3\x40\xc7\x61\xa0\xe3\x30\xd0\xf1\xfe\xf6\xb3\xbe\xeb\xa7\x75\xdd\x75\xf8\xf9\x78\x3f\xdf\xd6\xf8\x1b\x6f\x5e\xf8\xdf\xdc\xf9\x07\xf6\xf0\x23\x7c\x44\xb0\x90\x16\x41\x82\x49\x2c\x0c\x07\x51\x2b\xf4\x40\x9f\x00\xd5\x5b\x6b\x55\xdc\x8f\x7a\x9f\x77\x2f\xf9\xee\x6f\xeb\xfb\x43\x79\x30\x11\xdf\x56\x7d\xf7\xb7\xf7\x7f\xf8\x42\x17\x46\xab\xfa\xfc\xf6\xfe\xe3\x3e\x25\xce\x5f\x5f\xc0\xeb\xec\xf9\x77\x1f\xaa\xe4\xfd\x9a\xf7\x6f\xdc\x31\xfe\x4e\x5c\x4f\x7c\x9f\xd7\x27\xe2\x7b\x6b\xfc\x89\x07\xdc\x07\x77\xed\xfc\xfe\xfa\x7e\x5e\xdf\x7f\xb2\x4f\xc6\x5d\xfa\x2e\x75\x97\x71\x97\xef\xaf\x8f\xdf\xae\xf9\xd7\x77\xef\xfb\x1e\x83\xba\x4f\x18\x5f\x30\xdf\x38\x5f\x38\xdf\xb4\x7b\xe3\xec\xfd\x71\x3e\x8e\xf3\x71\x9c\x8f\xe3\x7c\xf0\x1d\xe7\xbc\x6b\x9c\x0f\xbe\xe3\xf0\x1d\x87\xef\x38\x7c\xc7\xe1\x3b\x0e\xdf\x71\xf8\x8e\xc3\x77\x1c\xbe\xe3\xf0\x1d\x87\xef\x38\x7c\xc7\xe1\x3b\x0e\xdf\x71\xf8\x8e\xc3\x77\x1c\xbe\xe3\xf0\x1d\x87\xef\x38\x7c\xc7\xe1\x3b\x0e\xdf\x71\xf8\x8e\xc3\x77\x1c\xbe\xe3\xf0\x1d\x87\xef\x38\x7c\xc7\xe1\x3b\x0e\xdf\x71\xf8\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xdd\x93\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x92\xef\x48\xbe\x23\xf9\x8e\xe4\x3b\x9c\xed\x38\xdf\x1f\xb1\x95\xd6\x4a\x6a\xa5\xb4\x12\x5a\x3d\x80\x3c\x7f\x3c\x7e\xde\xd3\xa7\xe7\xfd\x4b\x7b\x2e\xff\x7d\xff\xd2\x9e\xf7\x2f\xf5\xbe\x74\xd7\xf5\xe7\xc1\xeb\xb9\xeb\xb1\xeb\xa9\xdb\xeb\x7e\x8b\x56\xe4\x9f\xc7\x6f\xaf\xe8\xbf\x5e\xe7\xfb\xf3\x1c\xf6\x18\xf6\x14\xee\x75\xae\xc5\xb9\x16\xe7\x5a\x9c\x6b\x71\xae\xc5\xb9\x16\xf7\x7b\x72\x9f\xcd\x5e\x27\xbc\x4d\x78\x99\xf0\x2e\xe1\x55\xc2\x9b\x84\x17\x09\xef\x11\x5e\x23\xbc\x45\x78\x89\xe8\xe5\xef\xdb\xd7\x62\x5f\x8b\x7d\x2d\xf6\xb5\xd8\xd7\x62\x5f\x8b\xb8\x16\xf7\x1b\xb8\xc6\xb5\x18\xd7\x62\x5c\x8b\x71\x2d\xc6\xb5\x18\xd7\x62\x5c\x8b\x71\x2d\xe6\xb5\xb8\x8e\xea\xfe\xf5\xf7\x26\xdc\x2f\x68\xad\x69\x5d\xd6\x6d\x7d\x3f\x3f\xd6\xb4\x96\xf5\xfa\xcc\xba\xfe\x62\xd6\xef\x66\x1e\xeb\xbd\xf5\xd7\x0b\xc6\x75\x7b\x71\x1d\x60\xbc\x9f\xdd\xed\xd8\xfd\x47\x4c\xa7\xa5\x57\xc4\xdd\xc0\xb8\x1b\x18\xd7\xe2\x6e\xb5\x57\xd6\xf0\xca\x1a\x1c\x6b\x70\x9b\x41\x45\x0b\x2a\x5a\x50\xd1\x82\x8a\x16\x54\xb4\xe0\x1e\xef\xea\x98\x70\x21\xc9\x85\x24\x17\x92\x5c\x48\x72\x21\xc9\x85\x24\x17\x92\x5c\x48\x72\x21\xc9\x85\x24\x17\x92\x5c\x48\x72\x21\xc9\x85\x24\x17\x92\x5c\x48\x72\x21\xc9\x85\x24\x17\x92\x5c\x48\x72\x21\xc9\x85\x24\x17\x92\x5c\x48\x72\x21\xc9\x85\x24\x17\x92\x5c\x48\x72\x21\xc9\x85\x24\x17\x92\x5c\x48\x72\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x14\x17\x52\x5c\x48\x71\x21\xc5\x85\x38\x4b\x54\xbd\xbb\xb2\xe5\x42\x8a\x0b\x29\x2e\xa4\xb8\x90\xe2\x42\xca\x39\x29\x2e\xa4\xb8\x90\x8a\xf9\x7b\x91\x38\xba\x7c\xdd\x75\x5a\x97\xc7\x5c\xfb\xef\xb0\x1e\x6b\x5a\xdf\xf5\x7e\xdb\x9f\x95\x6d\xb3\xed\x65\xdd\x56\xb6\xcd\xb6\xd9\x36\xdb\xbe\xb6\xf7\x2d\xe2\xe8\x1f\x76\x57\xef\x27\xdf\xb2\x6e\x6b\x58\x8f\x35\xad\x65\x65\x3b\xd8\x0e\xb6\xef\xdd\x66\xb0\x1d\x6c\x07\xdb\xc1\x76\xb0\x1d\x6c\x07\xdb\xc9\x76\xb2\x9d\x6c\x27\xdb\xc9\x76\xb2\x9d\x6c\x27\xdb\xc9\x76\xb2\x5d\x6c\x17\xdb\xc5\x76\xb1\x5d\x6c\x17\xdb\xc5\x76\xb1\x5d\x6c\x17\xdb\xcd\x76\xb3\xdd\x6c\x37\xdb\xcd\x76\xb3\xdd\x6c\x37\xdb\xcd\x76\xb3\x0d\xb6\x5e\x47\xae\xff\xbd\x2b\xdb\x60\x1b\x6c\x83\x6d\xb0\x0d\xb6\xc1\xf6\xb0\x3d\x6c\x0f\xdb\xc3\xd6\x2b\xcd\x75\xc6\x77\x65\x7b\xd8\x1e\xb6\x87\x6d\xb2\x4d\xb6\xf9\xde\x21\xdf\xd9\x70\xae\x3c\x76\xca\x63\xa7\x3c\x76\x2a\xde\xcf\x9d\x37\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf8\xa2\xe2\x8b\x8a\x2f\x2a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xf7\xb0\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xde\x38\x22\x50\x43\x20\x85\xf0\xda\x1b\xc7\x9a\x56\x24\x12\xae\x3c\xc8\x02\xf8\xdc\x33\x7c\x57\xb6\x87\xed\x61\x7b\xd8\x1e\xb6\x00\xe8\x9e\xe1\x61\x58\xfb\x30\xac\xfd\xae\x6c\x93\x6d\xb2\x4d\xb6\xc9\x36\xd9\x26\xdb\x64\x5b\x6c\x8b\x6d\xb1\x2d\xb6\xc5\xb6\xd8\x16\xdb\x62\x0b\xca\x16\x28\x5b\xcd\x16\x84\xad\x66\xdb\x6c\x9b\xed\x7b\xcd\x47\x58\x0b\x61\x2d\x84\xb5\x10\xd6\x46\x58\x1b\x61\x6d\x84\xb5\x11\xd6\x46\x55\xfb\x52\xd5\xdc\xdf\xb1\xa6\xb5\xac\x6c\x51\xd8\x46\x61\x7b\xb0\x1d\x6c\x07\xdb\xc1\x76\xb0\x1d\x6c\x07\xdb\xc1\x76\xb2\x45\x82\x7b\xb2\x9d\x6c\x27\xdb\xc9\x76\xb2\x9d\x6c\x27\xdb\xc9\x76\xb1\x5d\x6c\xbd\x1d\x6d\x6f\x47\xdb\xdb\xd1\x5e\xde\x58\xc2\x2b\x65\x78\x0b\x0a\xaf\x94\xf7\x05\x96\xb0\x76\xd7\x77\x8d\xb7\xa3\xeb\x49\x88\x6c\x41\x64\x8b\x9e\x3c\x49\xc7\x5b\x9d\x37\xaf\xc0\xed\x15\xb8\xf9\xa2\xe6\x8b\x9a\x2f\x6a\xbe\xa8\xf9\xa2\xe6\x8b\xfa\x7d\x02\x5f\xd4\x7c\x51\xf3\x45\xcd\x17\x35\x5f\xd4\x7c\x51\xf3\x45\xcd\x17\x35\x5f\xd4\x7c\x51\xf3\x45\xcd\x17\x35\x5f\xd4\x7c\x51\xf3\x45\xcd\x17\x35\x5f\xd4\x7c\x51\xf3\x45\xcd\x17\x35\x5f\xd4\x7c\x51\xf3\x45\xcd\x17\x35\x5f\xd4\x7c\x51\xf3\x45\xcd\x17\x35\x5f\xd4\x7c\x51\xf3\x45\xcd\x17\x35\x5f\xd4\x7c\x51\xf3\x45\xcd\x17\x35\x5f\xd4\x7c\x51\x5f\x5f\xd4\xff\x73\x6f\xed\x77\x5d\x51\x7f\xd7\x15\x89\xb7\xdc\x75\x5b\xc3\x7a\xac\x69\x2d\xeb\x35\xfd\xae\x2b\x12\x7b\x09\xb1\x97\x10\x7b\x09\xb1\x97\x10\x7b\x09\xb1\x97\x10\x7b\x09\xb1\x97\x10\x7b\x89\xfe\x26\xdb\xc9\x76\xb2\x9d\x6c\x27\xdb\xc9\x76\xb2\x9d\x6c\x27\xdb\xc9\x76\xb1\x5d\x6c\x17\xdb\xc5\x76\xb1\x75\x88\xbe\xc5\x76\xb1\xc5\x2b\x1f\x5e\xf9\xf0\xca\xe7\x15\xfb\xc3\x2b\xdf\x66\xbb\xd9\x7a\x6d\xdf\x1c\xcf\x0e\x47\x35\x1c\x55\x2f\x41\x9b\x2b\xda\x5c\xd1\xe6\x8a\x36\x57\xb4\xb9\xa2\xcd\x15\x6d\xae\x68\x73\x45\x9b\x2b\xda\x5c\xd1\xe6\x8a\x36\x57\xb4\xb9\xa2\xcd\x15\x6d\xae\x68\x73\x45\x9b\x2b\xda\x5c\xd1\xe6\x8a\x36\x57\xb4\xb9\xa2\xcd\x15\x6d\xae\x68\x73\x45\x9b\x2b\xda\x5c\xd1\xe6\x8a\x36\x57\xb4\xb9\xa2\xcd\x15\x6d\xae\x68\x73\x45\x9b\x2b\xda\x5c\xd1\xe6\x8a\x36\x57\xb4\xb9\xa2\xcd\x15\x6d\xae\x68\x73\x45\x9b\x2b\xda\x5c\xd1\xe6\x8a\x36\x57\xb4\xb9\xa2\xcd\x15\x6d\xae\x28\xb8\xa2\xe0\x8a\x82\x2b\x0a\xae\x28\xb8\xa2\xe0\x8a\x82\x2b\x0a\xae\x28\xb8\xa2\xe0\x8a\x82\x2b\x0a\xae\x28\xb8\xa2\xe0\x8a\x82\x2b\x0a\xae\x28\xb8\xa2\xe0\x8a\x82\x2b\x0a\xae\x28\xb8\xa2\xe0\x8a\x82\x2b\x0a\xae\x28\xb8\xa2\xe0\x8a\x82\x2b\x0a\xae\x28\xb8\xa2\xe0\x8a\x82\x2b\x0a\xae\x28\xb8\xa2\xe0\x8a\xc2\x29\x9a\x87\xfb\x39\xdc\xcf\xe1\x7e\x1e\xd8\x1d\xee\xe7\x70\x3f\x87\xfb\x39\x4e\x17\x5c\xfb\xb6\xf3\xb6\xdf\x4f\x9c\x37\xce\xec\xe3\xcc\x3e\xce\xec\xe3\xcc\x3e\xce\xec\xe3\xcc\x3e\xce\xec\xe3\xcc\x3e\xce\xec\xe3\xcc\xbe\xc3\xd6\x5f\xf2\xf9\x4b\x3e\x7f\xc9\xe7\x2f\xf9\xfc\x25\x9f\xbf\xe4\xf3\x97\x7c\xef\x2f\xc1\xe8\x5f\xb2\x4d\xb6\xc9\x36\xd9\x26\xdb\x64\x9b\x6c\x93\x6d\xb2\x4d\xb6\xc5\xb6\xd8\x16\xdb\x62\x5b\x6c\x8b\x6d\xb1\x2d\xb6\xc5\xb6\xd8\x36\xdb\x66\xdb\x6c\x9b\x6d\xb3\x6d\xb6\xcd\xb6\xd9\x36\x5b\xae\x68\xdc\xd7\x22\x31\xc3\x10\x33\x0c\x31\xc3\x10\x33\x0c\x31\xc3\x10\x33\xbc\x6b\x5a\xcb\xca\x96\x2f\x1a\x7c\xd1\xe0\x8b\x06\x5f\x34\xf8\xa2\xc1\x17\x0d\xbe\x68\xf0\x45\x83\x2f\x1a\x7c\xd1\xe0\x8b\x06\x5f\x34\xf8\xa2\xc1\x17\x0d\xbe\x68\xf0\x45\x83\x2f\x1a\x7c\xd1\xe0\x8b\x06\x5f\x34\xf8\xa2\xc1\x17\x0d\xbe\x68\xf0\x45\xc3\x29\x1a\x7c\xd1\xe0\x8b\x06\x5f\x34\xf8\xa2\xc1\x17\x0d\xbe\x68\xec\xf1\x77\x5f\xe1\xee\x0b\xdc\x7d\x7d\xbb\x2f\x6f\xf7\xd5\xed\xbe\xb8\xdd\xd7\xb6\xfb\xd2\x76\x5f\xd9\xee\x0b\xdb\x7d\x5d\xbb\x2f\x6b\xf7\x55\xed\xbe\xa8\xdd\xd7\xb4\xfb\x92\x76\x5f\xd1\xee\xab\x59\x3f\x49\xe4\xaf\x09\x22\x14\x94\x3f\xaf\x63\x22\x4b\xd1\xd3\xa9\x98\x4e\xc5\x74\x2a\xa6\x53\x31\x9d\x8a\xe9\x54\xcc\x3c\x7f\xf7\x95\xec\xbe\x90\xdd\xd7\xb1\xfb\x32\x76\x5f\xc5\xee\x43\xf5\x3e\x52\xef\x03\xf5\x3e\x4e\xef\xc3\xf4\x3e\x4a\xef\x83\xf4\x3e\x46\xef\x43\xf4\x3e\x42\xef\x03\xf4\x3e\x3e\xef\x63\xf3\x3e\x34\xef\x23\xf3\x3e\x30\xef\xe3\xf2\x3e\x2c\xfb\xf7\x97\xf8\xab\x9c\xba\xe9\xd4\x4d\xa7\x6e\x3a\x75\xd3\xa9\x7b\x88\x79\xcf\xe7\xd1\xee\xfc\x68\x71\x7e\xb4\x38\xbf\xab\x9f\xd7\xfb\x79\x58\x8f\xf5\x42\xc9\x07\x3a\x3f\xd0\xf9\xce\xe1\x74\x7a\xe7\xef\x4a\x9f\x5c\xdb\x27\xbb\xbe\x5c\xff\xee\xc6\xfb\x9c\x74\xa5\xef\xc8\x74\xce\xa7\x73\x3e\x9d\xf3\xe9\x9c\x4f\xe7\x7c\xbe\xcf\x77\xce\xa7\x73\x3e\x9d\xf3\xe1\xf9\x32\x3c\x5f\x86\xe7\xcb\xd8\xef\xe7\xce\x03\x5f\x31\xf8\x8a\xc1\x57\x0c\xbe\x62\xf0\x15\x83\xaf\x18\x7c\xc5\xe0\x2b\x06\x5f\x31\xf8\x8a\xc1\x57\x0c\xbe\x62\xf0\x15\x83\xaf\x18\x7c\xc5\xe0\x2b\x06\x5f\x31\xf8\x8a\xc1\x57\x0c\xbe\x62\xf0\x15\x83\xaf\x18\xf6\x62\x38\x15\xc3\xa9\x18\x4e\xc5\x70\x1f\x86\x53\x31\x9c\x8a\xe1\x3e\x0c\xbb\x36\xec\xda\xb0\x6b\xc3\xae\x0d\xbb\x36\xec\xda\xe0\x2b\x86\xbb\x3d\xf8\x8a\xc1\x57\x0c\xf7\x70\xb8\x87\xc3\x3d\x1c\xee\xe1\x70\x0f\x87\x7b\x38\xdc\xc3\xe1\x1e\x8e\x77\x0f\xf9\x8a\xc1\x57\x0c\xbe\x62\xf0\x15\x93\xaf\x98\x7c\xc5\xe4\x2b\x26\x5f\x31\xf9\x8a\xc9\x57\x4c\xbe\x62\xf2\x15\x93\xaf\x98\x7c\xc5\xe4\x2b\x26\x5f\x31\xf9\x8a\xc9\x57\x4c\xbe\x62\xf2\x15\x93\xaf\x98\x7c\xc5\xe4\x2b\x26\x5f\x31\xf9\x8a\xc9\x57\x4c\xbe\x62\xf2\x15\x93\xaf\x98\x7c\xc5\xe4\x2b\x26\x5f\x31\xf9\x8a\x39\x9f\x6e\xca\x96\xaf\x98\x7c\xc5\xe4\x2b\xe6\x7b\xe2\xbc\x97\x5f\xbe\x62\xae\xfc\x1b\xf7\x55\x65\xdc\x37\x95\x71\x5f\x54\xc6\x7d\x4f\x19\xf7\x35\x65\x78\x4b\xb9\xaf\x48\xe3\x3e\x75\xc6\x7d\xe8\x8c\xfb\xcc\x19\xf7\x91\x33\xee\x13\x67\xdc\x07\xce\xb8\xcf\x9b\x71\x1f\x37\xe3\x3e\x6d\xc6\x7d\xd8\x8c\xfb\xac\x19\xf7\x51\x33\xee\x93\x66\xdc\x07\xcd\xb8\xcf\x99\x71\x1f\x33\xe3\x3e\x65\xc6\x7d\xc8\x8c\xfb\x8c\x19\xf7\x11\x33\xee\x13\x66\xdc\x07\xcc\xb8\xcf\x97\x71\x1f\x2f\xe3\x3e\x5d\xc6\x7b\xb8\x4c\x1b\x34\x6d\xd0\xb4\x41\xd3\x06\x2d\x1b\xb4\x6c\xd0\xb2\x41\xcb\x06\x2d\x1b\xb4\x6c\xd0\xb2\x41\xc2\x18\x02\xce\x21\xe0\x1c\x2d\x46\x74\x9f\x5a\xe3\x7e\x21\xc7\x7d\x66\x8d\xfb\x75\x1c\xf7\xdb\x38\xae\x43\x18\xf7\x69\x30\xae\x53\x18\xf7\xfb\x3b\xee\xd7\x77\x5c\xef\x30\xae\x73\x18\xf7\xfb\x3d\xee\xd7\x7b\x5c\xcf\x30\xae\x63\x18\xd7\x5f\x8c\xeb\x2e\xc6\xf5\x10\xe3\x3a\x88\x71\xfd\xc3\xb8\xee\x61\xdc\xa7\xd4\xb8\x0f\xa9\x71\x9f\x51\xe3\x3e\xa2\xc6\x7d\x42\x8d\xfb\x80\x1a\xf7\xf9\x34\xee\xe3\x69\xdc\xa7\xd3\xb8\x0f\xa7\xf1\x9e\x4d\xcb\x29\x5a\x4e\xd1\x1a\xef\x27\xfe\x07\x9d\xa2\xe5\x14\x2d\xa7\x68\x39\x45\xcb\x29\x5a\x4e\xd1\x72\x8a\x96\x53\xb4\xe6\xfa\xcb\xb1\xff\x72\xc4\x5f\xce\xfe\x53\xcf\xa2\x9c\x45\x2d\x8a\x42\x12\x19\xee\xb5\xa9\xf6\x5d\x7f\xe2\xaa\xc2\xaa\xa2\xaa\xc2\x11\xe2\x0a\x82\x08\x44\x54\x8a\x26\x41\x93\x22\xd1\xc1\x77\x73\xde\xcf\x7b\xfb\xd9\xf5\xdf\x1c\x38\x0f\x7e\x5d\x78\x5c\x1f\x1e\xd7\x89\xc7\xb9\x16\xd7\x95\xc7\xf5\xe5\x71\x38\xfc\x6b\x71\xdd\x79\x5c\x7f\x1e\xe7\x5a\xe4\xb5\xc8\x6b\x91\xd7\x22\xaf\x45\x5e\x8b\xbc\x16\xe9\x19\x71\x2d\xf2\x5a\xe4\xb5\xa8\x6b\x51\xd7\xa2\xae\x45\x5d\x8b\xba\x16\x75\x2d\xea\x5a\xd4\x7d\x64\x7c\xf7\x59\xf2\xcd\xbb\xdc\x27\xca\x77\x1f\x29\xdf\x7d\xa6\x7c\xf7\xa1\xf2\xb9\xe4\x3e\x56\xbe\xfb\xec\x19\x1e\x3e\xd7\x62\x5c\x8b\xfb\x5c\x3d\xf7\xc1\x7a\xee\x93\xf5\xdc\xc7\xe9\xb9\xcf\xd3\x73\x1f\xa8\xc7\x93\xca\xa3\xaa\x3d\x97\xfa\xaf\xf3\xfb\xee\x32\xfe\x3a\xd7\xbd\x6b\x4f\x7d\xf0\xea\xba\xbc\x7e\xfe\xb6\xd1\xd7\x7d\xf9\xba\x2f\x5f\xf7\xe5\xeb\xbe\xe6\xfb\xad\x4d\xf6\x75\x5f\xbe\xee\xcb\xd7\x7d\xf9\xba\xaf\xd7\x13\xfb\xef\x3a\x0b\x55\x09\x2a\x0f\x0d\x50\xff\xfb\x8d\xd1\xff\x7b\xe3\xee\xf3\xef\x0d\x23\x3f\x7f\xbf\x79\x78\x7f\x2a\x17\xf6\xfc\x7b\xf3\x0a\xbe\xbf\x37\x53\xad\xff\x2e\x34\x5c\x58\xb8\x90\xf0\xba\xe8\x1b\x47\x7e\xff\xb5\xbf\xcc\xbd\xfe\xee\x1f\xec\x8f\xfb\xe2\xef\xbc\x2f\x99\xf7\x82\xe5\x7d\x64\x79\x1f\x59\xc2\x0f\x81\x7e\x02\xfd\x04\xfa\x09\xf4\x13\x6e\x45\xa0\x9f\x40\x3f\x81\x7e\x02\xfd\x04\xfa\x09\xf4\x13\xe8\x27\xd0\x4f\xa0\x9f\x40\x3f\x81\x7e\x02\xfd\x04\xfa\x09\xf4\x13\xe8\x27\xd0\x4f\xa0\x9f\x40\x3f\x81\x7e\x02\xfd\x04\xfa\x09\xf4\x13\xe8\x27\xd0\x4f\xa0\x9f\x40\x3f\x81\x7e\x02\xfd\x04\xfa\x09\xf4\x13\xe8\x47\x66\x83\x38\x50\x08\x04\x85\x48\x50\x08\x05\x85\x58\x50\x08\x06\x85\x68\x50\x08\x07\x85\x78\x50\x08\x08\x85\x88\x50\x08\x6d\x85\xd8\x56\x08\x6e\x85\xe8\x56\x08\x6f\x85\xf8\x56\x08\x70\x85\x08\x57\x08\x71\x45\xff\x64\xa9\x17\x3e\x47\x2a\x0b\xa9\x2c\xa4\xb2\x90\xca\x42\x2a\x0b\xa9\x2c\xa4\xb2\x90\xca\x7d\x93\x1a\xeb\x3e\xfd\xee\xda\x7f\x63\xdd\xa7\xd6\x5d\x97\x75\x5b\xf3\xae\xe1\xe7\xe7\xad\x61\x3d\x56\xef\x38\xc4\xd9\x20\x97\xc7\x73\xb7\x67\xfe\xd5\xc3\xc5\x7a\xff\xa3\xe7\x3a\x9c\xdf\xef\xfc\xbf\x79\x73\x78\xb2\x59\x38\x1f\x7b\xa3\xc2\xed\x9e\x6e\xf7\x7a\x0b\x11\x3c\x4e\xfc\x11\xb4\x37\x28\x72\xfe\x47\xce\xff\xc8\xf9\x83\x9c\x3f\xc8\xf9\x83\x9c\x3f\xc8\xf9\x83\x9c\x3f\xc8\xf9\xc3\xdf\x37\x08\xf9\x83\x90\x3f\x08\xf9\x83\x90\x3f\x48\xf8\x83\x84\x3f\x48\xf8\x83\x84\x3f\x48\xf8\x83\x84\x3f\x48\xf8\x83\x84\x3f\x48\xf8\x83\x84\x3f\x48\xf8\x83\x84\x3f\x48\xf8\x83\x84\x3f\x88\xf7\x83\x78\x3f\x88\xf7\x03\x15\x2e\xdf\x81\xe9\x14\x4e\xa7\x70\x3a\x85\xd3\x29\x9c\x4e\xe1\x74\x0a\xa7\x53\x38\x9d\xc2\xe9\x14\xce\x7a\xf9\x17\x2f\x78\xc2\xd6\xfb\xcc\xf2\xbe\xb4\xbc\x2f\x2d\xef\x4b\xcb\xfb\xd2\xf2\xbe\xb4\xde\x19\xf5\xbe\xb4\xbc\x2f\x2d\xef\x4b\xcb\xfb\xd2\xf2\xbe\xb4\xbc\x2f\xad\x9e\xf7\xed\xdc\xb2\xee\xb2\xef\x72\xdf\xda\xbd\xbe\x5f\x57\xbb\xaf\xab\xdd\xd7\xd5\xee\xeb\x6a\xef\x36\xf7\xbe\xae\x76\x5f\x57\xbb\xaf\xab\xdd\xd7\xd5\xee\xeb\x6a\x77\x79\xd3\xbf\x16\x75\x2d\xfa\x5a\xf4\xb5\xf0\x0f\xf5\xb5\xe8\x6b\x71\x1f\x23\xbb\xaf\x45\x5f\x8b\x06\x07\xe8\xe0\xba\xf3\xeb\x38\xe3\xfa\xea\xcb\xff\x7d\xf1\xbf\xaf\xc7\xe9\x7b\xe8\xfa\xb2\x7f\xdf\x83\xd7\x97\xfc\xfb\x82\x7f\x5f\xee\xef\x8b\xfd\x7d\xa9\xbf\x2f\xf4\xf7\x65\xfe\xbe\xc8\xdf\x97\xf8\xfb\x02\x7f\x5f\xde\xef\x8b\xfb\x7d\x69\xbf\x2f\xec\xf7\x65\xfd\xbe\xa8\xdf\x97\xf4\xfb\x82\x7e\x5f\xce\xef\x8b\xf9\x7d\x29\xbf\x2f\xe4\xf7\x65\xfc\xbe\x88\xdf\x97\xf0\xfb\x02\x7e\xc7\xa5\xa3\xb8\x78\x14\xeb\x5a\xac\x6b\xb1\xae\xc5\xbe\x16\x97\xc9\xee\xb1\xee\xd8\x48\xe7\x5a\x5c\x26\x8a\x0b\x45\xf1\xfc\x83\x77\xd5\xe5\x5d\x75\xbd\xbd\xf5\x2a\xb4\xfa\xfd\xd6\xbe\x79\x15\xda\x5e\x85\xb6\x57\xa1\xed\x55\x48\x76\x57\x6f\xaf\x42\xdb\xab\xd0\xf6\x2a\xa4\x34\xcf\xcf\xa7\x9f\xcf\x7f\x3f\x91\x07\xa9\x4c\xaf\x95\xe9\xb5\x32\xbd\x56\xa6\xd7\xca\xf4\x5a\xc3\x96\x56\xa0\xd7\xca\xee\x5a\xd9\x5d\x2b\xb8\x6b\x0d\x58\x5a\xc1\x5d\x2b\xb8\x6b\x05\x77\xad\xd4\xae\x15\xd9\xb5\x22\xbb\x56\x64\xd7\x8a\xec\x5a\x03\x96\x56\x6a\xd7\x8a\xec\x5a\x1b\x96\x56\x6a\xd7\x8a\xec\x5a\x91\x5d\x6b\xc3\xd2\xda\xb0\xb4\x82\xbb\xf6\xe8\x6a\xc3\x5f\xda\x63\xab\x15\xd9\x39\xb4\xd3\x59\x9d\x0e\xeb\x74\x50\xa7\x93\x3a\x1d\xd5\xe9\x5c\x4e\x67\x72\x3a\x94\xd3\x81\x9c\x4e\xe4\x74\x1a\xa7\xe3\x38\x1d\xc0\xe9\x04\x4e\x47\x70\x3a\x83\xd3\xd1\x9b\xce\xde\x74\xf8\xa6\xd3\x37\x1d\xbf\xe9\xfc\x4d\x07\x70\x3a\x81\xd3\x11\x9c\xce\xe0\x74\x08\xa7\x53\x38\x1d\xc3\xe9\x08\x4e\x67\x70\x3a\x7f\xd3\xd9\x9b\x0e\xdf\x74\xfa\xa6\xe3\x37\x1d\xbd\xe9\xec\x4d\x87\x6f\x3a\x7d\xd3\xf1\x9b\xce\xdf\x74\x00\xa7\x13\x38\x9d\xbe\xe9\xf8\x4d\xe7\x6f\x3a\x80\xd3\x09\x9c\x8e\xe0\x74\x06\xa7\x43\x38\x9d\xc2\xe9\x18\x4e\xe7\x70\xb6\x62\x3a\x6f\x76\xd3\xab\x5d\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\x52\x68\xbb\x14\xda\x2e\x85\xb6\x4b\xa1\xed\xd2\x5d\xd9\x4e\xb6\x93\xed\x64\x3b\xd9\x4e\xb6\x8b\xed\x62\xbb\xd8\x2e\xb6\x8b\xed\x62\xbb\xd8\xbe\x13\x28\x3b\x56\x19\x26\x22\x98\x90\x60\x62\x82\x09\x0a\x26\x2a\x98\xb0\x60\xe2\x82\x09\x0c\x26\x32\x98\xd0\x60\xc2\x82\x89\x0b\x26\x30\x98\xc8\x60\x42\x83\x09\x0b\x26\x2e\x98\x98\x60\xe2\x81\x89\x05\x26\x18\x98\x40\x60\x22\x81\x89\x02\x26\x0c\xb8\xeb\xbb\xd2\x67\xf2\x03\x4a\x2f\x5b\xe9\x65\x2b\xbd\x6c\xa5\x97\xad\xf4\xb2\x35\xf3\x69\xa5\x97\x18\x62\xe2\x87\x09\x20\x26\x82\x98\x10\x62\x62\x88\x09\x22\x26\x80\x98\xe0\x61\xa2\x87\xbb\xfa\xad\x2c\x67\x25\x96\xad\xc4\xb2\x15\x57\xb6\x66\x3e\xad\xb8\xb2\x15\x57\xb6\xe2\xca\x56\x5c\x29\x9f\xef\xae\xae\x91\xe5\xac\xa0\xb2\xb5\xf4\x69\x65\x95\xad\xa0\xb2\x15\x54\xb6\x52\x4a\x69\x7f\x53\x06\xe0\x5d\xfd\x5b\xfc\xad\x06\xcb\xad\xc1\x72\x2b\xa2\x6c\xe5\x93\xad\x7c\x12\xcd\x4c\x38\x73\x57\xd7\xdb\x11\x25\x93\xad\x64\xb2\x95\x4c\x4a\x35\xbc\xab\x4f\xb6\x17\x0a\x24\x5b\x81\xa4\x94\xc4\x29\x3b\x71\xb6\xd2\xc8\x56\x1a\xd9\x8a\x22\x5b\x51\x64\x2b\x8a\x6c\x45\x91\x2d\xd3\x4f\x6b\xaf\xd0\xda\x2b\xb4\xf6\x0a\xad\xbd\xee\xea\xec\x6d\x67\x8f\x5f\xda\xfc\xd2\xe6\x97\x36\xbf\xb4\xf9\xa5\xcd\x2f\x6d\x7e\x69\xf3\x4b\x9b\x5f\xda\xfc\xd2\xe6\x97\x36\xbf\xb4\xf9\xa5\xcd\x2f\x6d\x7e\x69\xf3\x4b\x9b\x5f\xda\xfc\xd2\xe6\x97\x36\xbf\xb4\xf9\xa5\xcd\x2f\x6d\x7e\x69\xf3\x4b\x9b\x5f\xda\xfc\xd2\xe6\x97\x36\xbf\xb4\xf9\xa5\xcd\x2f\x6d\x7e\x69\xf3\x4b\x9b\x5f\xda\xfc\xd2\xe6\x97\x36\xbf\xb4\xf9\xa5\xcd\x2f\x6d\x7e\x69\xf3\x4b\x9b\x5f\xda\xfc\xd2\xe6\x97\xf6\xbb\x57\xfc\xd2\xe6\x97\x36\xbf\xb4\xf9\xa5\xcd\x2f\x6d\x7e\x69\xf3\x4b\x9b\x5f\xda\xfc\xd2\xe6\x97\x36\xbf\xb4\xf9\xa5\xe0\x97\x82\x5f\x0a\x7e\x29\xf8\xa5\xe0\x97\x82\x5f\x0a\x7e\x49\x2a\x86\x36\x62\xa1\x8d\x58\x68\x23\x16\xda\x88\x85\x36\x62\x77\x65\xcb\x2f\x05\xbf\x14\xfc\x52\xf0\x4b\xc1\x2f\x05\xbf\x14\xfc\x52\xf0\x4b\xc1\x2f\x05\xbf\x14\xfc\x52\xf0\x4b\xc1\x2f\x05\xbf\x14\xfc\x52\xf0\x4b\xc1\x2f\xbd\x67\xa2\x42\xda\x36\xf4\xaa\x95\xd3\xb6\x72\xda\x56\x4e\xdb\xca\x69\x5b\x39\x6d\x2b\xa7\x6d\xe5\xb4\xad\x9c\x16\xb1\x4f\xb4\x7e\xd7\x65\xdd\xd6\xb4\xbe\xdf\xde\x4f\x56\x42\xdb\xca\x66\x5b\xd9\x6c\x2b\x9b\x6d\x65\xb3\xad\x6c\xb6\x95\xcd\xb6\xb2\xd9\x56\x36\xdb\xca\x66\x5b\xa9\x6c\x6b\x36\xd5\x0a\x66\x5b\xc1\x6c\x2b\x98\x6d\x2d\xa7\x5a\xc1\x6c\x2b\x98\x6d\x45\xb2\x94\x83\xbb\xfa\xad\xe7\xb8\x62\xd8\x56\x06\xdb\xca\x60\x5b\xb3\xa9\x56\xfa\xda\x4a\x5f\x5b\xe9\x6b\x2b\x7d\x6d\x45\xaf\xad\xe8\xb5\x15\xbd\xb6\xa2\xd7\x56\xee\xda\xca\x5d\x5b\xb9\x6b\x2b\x77\x6d\xed\xbe\x5b\xd1\x6b\x2b\x7a\x6d\x45\xaf\xad\xe8\xb5\x15\xbd\xb6\xa2\xd7\x56\xf4\xda\x8a\x5e\x5b\xd1\x6b\x2b\x7a\x6d\x45\xaf\xad\xe8\xb5\x35\x00\x6f\xed\xaa\x5a\x01\x6c\x6b\xfa\xdd\x1a\x55\x49\x81\xbe\xab\xcf\xb1\x3b\x8a\x5e\x5b\xa3\xef\x56\xfa\xda\xf9\x76\xc7\x5b\x99\xa6\x55\xad\x18\xb6\x15\xc3\xb6\x62\xd8\x56\x0c\xdb\x8a\x61\x5b\x31\x6c\x6b\xfd\xdd\x1a\x58\xb5\x92\xd8\x56\x12\xdb\x4a\x62\x5b\x31\x6c\x2b\x86\xed\x7a\xa7\xd1\x73\x2d\x3c\xd7\x44\xed\x34\xb5\x0b\x4d\xed\x42\x53\xbb\xbb\xbe\x2b\x9d\x3d\x7e\x29\xf8\xa5\xe0\x97\x82\x5f\x0a\x7e\x29\xf8\xa5\xe0\x97\xbc\xe1\x6b\x79\x17\x5a\xde\x85\x96\x77\xa1\xe5\x5d\x68\x79\x77\x57\xb6\xfc\x92\x54\x4b\x8d\xef\x42\xe3\xbb\xd0\xf8\x2e\x34\xbe\x0b\x8d\xef\x42\xe3\xbb\xbb\xb2\xe5\x97\x82\x5f\x0a\x7e\x49\xa5\x87\xf6\x77\xa1\xfd\x5d\x68\x7f\x17\xda\xdf\xdd\x95\x2d\xbf\xa4\xd2\x43\x43\xbc\xbb\xb2\xe5\x97\x54\x7a\x68\x8b\x17\xda\xe2\x85\xb6\x78\xa1\x2d\x5e\x68\x8b\x77\x57\xb6\xfc\x12\x3d\x24\x55\x7a\x68\x94\x17\x1a\xe5\xdd\x95\x2d\xbf\xa4\xd2\x43\xbb\xbc\xd0\x2e\x2f\xb4\xcb\xbb\x2b\x5b\x7e\x49\xa5\x87\xd6\x79\x77\xbd\xb6\x2a\x3d\x34\xd0\xbb\xeb\xb4\x2e\xeb\xb6\x86\xf5\x58\xd3\x5a\x56\xb6\xfc\x92\x4a\x0f\x0d\xf7\x42\xc3\xbd\xd0\x70\x2f\x34\xdc\x0b\x0d\xf7\xee\xca\xd6\x49\x50\xe9\xa1\xed\x5e\x68\xbb\x17\xda\xee\x85\xb6\x7b\xa1\xed\x5e\xbc\xb6\x7b\xad\x8c\xba\x35\x46\x6b\xed\xe2\x5b\x49\x75\x2b\xa6\x6e\xed\xd1\x5a\x7b\xb4\x56\x52\xdd\x8a\xa9\x5b\x31\x75\x2b\xa6\x6e\x65\xd4\xad\x8c\xba\x15\x50\xb7\xd2\xe9\x56\x3a\xdd\x1a\xa6\xb5\x46\xf1\xad\x51\x7c\x6b\x9e\xd6\x9a\xa7\xb5\xc2\xea\xd6\x2e\xbe\x95\x57\xb7\x46\x6a\xad\xbc\xba\xb5\x50\x6b\x8d\xe2\x5b\x23\xb5\x56\x6a\xdd\x1a\xc5\xb7\x46\xf1\xad\x51\x7c\x2b\xbe\x6e\x4d\xd5\x5a\xa3\xf8\x56\x82\xdd\x4a\xb0\x5b\x09\x76\x2b\xc1\x6e\xed\xe2\x5b\x21\x76\x1b\x17\xde\xca\xb1\x5b\x39\x76\x2b\xc7\x6e\xe5\xd8\xad\x1c\xbb\x95\x63\xb7\x72\xec\x56\x88\xdd\x0a\xb1\x5b\x21\x76\x2b\xc4\x6e\x85\xd8\xad\x8d\x7c\x6b\x23\xdf\x8a\xb2\xdb\x40\xb4\x56\x9a\xdd\x4a\xb3\x5b\x69\x76\x6b\x2c\xdf\x0a\xb4\x5b\x81\x76\x2b\xd0\x6e\x05\xda\xad\xc9\x7c\x2b\xd3\x6e\x4d\xe6\x5b\x7b\xb7\xd6\xde\xad\x35\x99\x6f\xed\xdd\x5a\x7b\xf9\xd6\xe4\xad\x95\x72\xb7\xa1\x69\xad\xa0\xbb\x15\x74\xb7\x82\xee\x56\xd0\xdd\x4a\xb9\x5b\xc3\xb7\xd6\xea\xad\xb5\x77\x6b\x85\xdb\xad\x70\xbb\x15\x6e\xb7\xc2\xed\x56\xb8\xdd\xfd\xe4\x57\x3b\xae\x58\xbb\xb5\x7a\x6b\x09\x6d\xa9\x52\x28\x55\x0a\x69\xe1\x18\x5a\x38\x86\x16\x8e\x77\x75\xf6\xf8\x25\x95\x42\x1a\x39\xde\xd5\xb9\xe5\x97\x54\x0a\x69\xea\x18\x9a\x3a\x86\xa6\x8e\x77\x65\xcb\x2f\xa9\x14\xd2\xda\xf1\xae\x6c\xf9\x25\x95\x42\x1a\x3c\x86\x06\x8f\xa1\xc1\x63\x68\xf0\x18\x1a\x3c\xde\x95\x2d\xbf\xa4\x52\x48\xcb\xc7\xd0\xf2\x31\xb4\x7c\x0c\x2d\x1f\x43\xcb\xc7\xbb\xb2\xe5\x97\x54\x91\xa4\x2a\x92\x54\x45\xa2\x15\xe4\x5d\xd9\xf2\x4b\xaa\x48\x52\x15\x89\x16\x91\x77\x65\xcb\x2f\xa9\x22\x49\x55\x24\x5a\x47\x86\xd6\x91\xa1\x75\xe4\x5d\xd9\xf2\x4b\xaa\x48\x52\x15\x89\x66\x92\x77\x65\xcb\x2f\xa9\x22\xc9\xf7\x6e\xa9\x8a\x24\x55\x91\xa4\x2a\x12\x0d\x27\x43\xc3\xc9\xd0\x70\xf2\xae\x6c\xf9\x25\x55\x24\x5a\x50\xde\x95\x2d\xbf\xa4\x8a\x24\x55\x91\x68\x4a\x19\x9a\x52\xde\x75\x5b\xc3\x7a\xac\x69\x2d\x2b\x5b\x7e\x49\x15\x49\xaa\x22\x49\x55\x24\xa9\x8a\x44\xcb\xca\xd0\xb2\x32\xb4\xac\xbc\x2b\xdb\x77\xf6\x78\x09\x65\xfe\xad\x31\x60\x2b\xf0\x6f\x05\xfe\x6d\x0c\x41\x2b\xf3\x6f\x4d\x02\xdb\x18\x82\xd6\x24\xb0\x0d\x20\x68\x03\x08\x5a\xf9\x7f\x2b\xfc\x6f\x85\xff\xad\xf0\xbf\x15\xfe\xb7\xc2\xff\x56\xf8\xdf\x0a\xff\x5b\xe1\x7f\x1b\x3d\xd0\x4a\xfe\x5b\xb1\x7f\x2b\xf3\x6f\x65\xfe\xad\xcc\xbf\x0d\x20\x68\x65\xfe\xad\xc0\xbf\x0d\xe0\x6b\x05\xfe\xad\xc0\xbf\x15\xf8\xb7\x02\xff\x56\xe0\xdf\x4a\xfb\x5b\x69\x7f\x2b\xe7\xef\xee\xfa\x5b\xdf\xf7\x6d\xeb\xb1\xf6\x5d\xc7\xb4\x2e\x6b\x58\xd3\xea\xfa\xe1\x9a\xf9\x59\x5d\x39\x5d\x39\x5d\x39\x7d\xce\xff\x49\xd3\xdd\x65\x49\xaa\xc3\x30\x00\xde\x50\x3f\x10\x3b\x3f\xb0\xa0\xbb\xff\x2d\xdc\x93\x4f\x35\x2f\x9c\x39\xd3\x50\x5d\x0d\xd8\x71\x2c\x59\x2a\xe7\xb4\x9f\xb6\x9f\xb6\xdf\xd2\xce\x69\x9f\xd6\x3e\xad\x9d\x39\x7d\xda\xf4\xd3\xe9\x13\xa6\x73\xa6\x73\xa6\x73\x96\x73\xd6\x70\xf4\xc9\xcb\xf9\xcb\xf9\xcb\xf9\xcb\x99\xdb\x99\xdb\x99\xdb\x99\xdb\x77\xd8\xbe\xc3\x76\xd5\x76\xfe\x76\xfe\x71\xfe\x71\xfe\x71\xce\x71\xce\xf1\xc9\xc7\x99\xc7\x37\x79\x9d\xf9\x3a\xf3\xf5\xc9\xaf\xf3\x5f\xe7\x7b\xff\x4d\x21\x1d\x53\x48\xc7\x14\x12\x29\xd4\x45\x0a\x75\x91\x42\x5d\xa4\x50\x17\x29\xd4\x7b\xf4\xee\xc9\x4b\xa6\x90\x08\xa2\xde\xa3\x6b\xe5\x25\x53\x48\xc7\x14\x12\x89\xd4\x45\x22\x75\x91\x48\xbd\x47\xd7\xca\x4b\xa6\x90\x8e\x29\x24\x48\xd2\x3d\xba\x56\x5e\x32\x85\x44\x4c\xf5\x1e\x5d\x2b\x2f\x99\x42\x22\xa9\x7a\x8f\xae\x95\x97\x4c\x21\x11\x59\x5d\x44\x56\x17\x91\xd5\x45\x64\x75\x11\x59\x5d\xc7\x68\x0a\xa9\xd5\x7b\x74\xad\xbc\x64\x34\x85\xec\xea\x3d\xba\x56\x5e\x32\x9a\x72\x8c\xa6\x90\x60\x5d\x24\x58\x17\x09\xd6\x7b\x74\xad\xbc\x64\x34\x85\x1c\xeb\x3d\xba\x56\x5e\x32\x9a\x42\xa0\xf5\x1e\x5d\x2b\x2f\x19\x4d\x39\x46\x53\x8e\xd1\x14\xc2\xad\x8b\x70\xeb\x3d\xba\x56\x5e\x32\x9a\x72\x8c\xa6\x1c\xa3\x29\xa4\x5c\x17\x29\xd7\x7b\x74\xad\xbc\x64\x34\x85\xac\xeb\x22\xeb\xba\xc8\xba\xde\xe3\x70\x2c\xc7\x76\x9c\x8e\xcb\x71\x3b\x1e\xc7\xd7\xd1\xb5\xf2\x92\xd1\x94\x63\x34\xe5\xbc\x89\xb2\x37\x6f\x97\xb7\xf1\xf3\x8e\x7d\xde\xae\xcf\x4f\x3f\xef\xd8\xe7\x6d\xfc\xee\x39\xe3\x19\x8e\xd3\xf1\x38\xde\x4f\x18\xe3\x71\xf4\xff\x23\xff\xe3\x7c\xd1\x3a\xca\x55\x62\x76\x88\xd6\x21\x2a\x47\xe7\xdf\xce\x17\x8f\x63\xb6\xa3\x9f\x8a\xca\x21\xfa\xc6\xca\xbf\xb7\xa3\xf3\x45\xdc\x10\x71\x43\xc4\x0d\xb1\x36\xc4\xd7\x10\x5f\x43\x7c\x8d\xe3\xf7\x1e\x3f\x15\x5f\x43\x7c\x0d\xf1\x35\xc4\xd4\x10\x47\xc3\xdd\x18\xee\xc6\x70\x37\xc6\xe7\xa7\xee\xc3\xf8\x9c\xf3\xb9\x4a\x06\x1b\xee\x49\x3d\x8f\x63\x39\xb6\xe3\x72\xbc\xbf\xa5\xdc\x99\x92\xd9\xca\xfd\x29\x99\xad\x46\x7e\x7a\x1c\x7d\x8e\xbb\x54\xee\x52\xc9\x6c\xe5\x5e\x95\xcc\x56\xe5\xcc\xba\xbf\xb7\xda\x67\xba\x87\x60\xdf\xa7\x64\xb6\x72\x27\x6b\xfa\x1c\x77\xb2\x64\xb3\x92\xcd\x4a\xee\xaa\xe5\x2a\xf7\xb3\xe4\xae\x72\x3f\x4b\xbe\x2a\xf7\xb0\x64\xaa\xda\x3e\xd9\xfd\x2c\xf7\xb3\xdc\xc3\x92\xa9\x4a\x74\x18\x6d\x3a\x46\x9b\x88\x09\xdf\xa3\x77\xcf\xba\x66\xb4\x89\xbc\xf0\x3d\x7a\xf7\xe4\x25\xa3\x4d\xa4\x86\xef\xd1\xb5\xf2\x92\xd1\x26\xe2\xc3\x8b\xf8\xf0\x22\x3e\xbc\x88\x0f\xdf\xa3\x6b\xe5\x25\xa3\x4d\xc7\x68\xd3\x31\xda\x74\x8c\x36\x1d\xa3\x4d\xc7\x68\x13\x99\xe2\x45\xa6\x78\x91\x29\x5e\x64\x8a\xef\xd1\xb5\xf2\x92\xd1\x26\x92\xc5\x8b\x64\xf1\x3d\xba\x56\x5e\x32\xda\x74\x5e\x79\xe9\x95\x97\x8c\xa9\x10\x31\xbe\x47\xd7\xca\x4b\xc6\x54\x8e\x31\x95\x63\x4c\xe5\x18\x53\x39\xc6\x54\x8e\x31\x15\x42\xc7\x8b\xd0\xf1\x22\x74\x7c\x8f\xae\x95\x97\x8c\xa9\x1c\x63\x2a\x44\x8f\xef\xd1\xb5\xf2\x92\x31\x95\x63\x4c\x85\x18\xf2\x3d\xba\x56\x5e\x32\xa6\x72\x8c\xa9\x10\x46\xbe\x47\xd7\xca\x4b\xc6\x54\x88\x24\xdf\xa3\x6b\xe5\x25\x63\x2a\xc7\x98\x0a\xf1\xe4\x7b\x74\xad\xbc\x64\x4c\xe5\x18\x53\x39\xc6\x54\x8e\x31\x15\xd2\xca\xf7\xe8\x5a\x79\xc9\x98\xca\x31\xa6\x72\x8c\xa9\x10\x5e\x5e\x84\x97\xef\x71\x39\x6e\x47\xef\xd2\xc9\xd1\x5b\x77\xbc\x57\x56\xb7\x12\x89\x65\x75\xab\xd7\x9b\xf6\x7a\x03\x5f\xe7\x8b\xcd\x12\x9b\x25\x36\x4b\x6c\x96\x4c\x55\x62\xb3\x64\xaa\x12\xa1\x25\x42\x4b\x84\xb6\xac\xd5\x62\xb3\xe5\xae\x16\xa1\x2d\x42\x5b\x06\x6b\x15\x48\x8b\xd6\x1e\xce\x17\xb3\x2d\x4f\xb6\xc8\x6d\x31\xdb\x62\xb6\x65\xb9\x96\xdf\x5a\xe4\xb6\xc8\x6d\x91\x8b\x47\xf1\xb4\xf8\x6d\xf1\xdb\xe2\xb7\xd5\x27\x2d\x7e\x5b\x95\xd2\x72\x60\x8b\xe2\x16\xc5\x2d\x13\xb6\x28\x6e\x39\xb0\x55\x26\x2d\x8a\x5b\x4d\xd2\xaa\x91\x16\xd1\x2d\xa2\x5b\x6e\x6c\x11\xdd\x72\x63\xcb\x8d\x2d\xae\x5b\x5c\xb7\x3a\xa4\x45\x77\x8b\xee\x16\xdd\xbd\x7d\xb2\x18\x6f\x39\xb3\xd5\x24\x2d\xde\x5b\xbc\xb7\xcc\xd9\x32\x67\x7b\x82\xed\x09\xb6\x27\xd8\x9e\x60\x7b\x82\xed\xd9\xb5\xfa\xa4\x3d\xbb\xf6\xd4\xda\x53\x6b\x4f\xad\xad\x32\xed\xd9\xb5\xec\xda\x9e\x60\x7b\x82\xed\x09\xb6\x27\x38\x65\xd7\xe9\x09\x12\x29\x1d\x37\xf6\xfb\x9d\xb7\x76\xc5\x8b\xaf\xc5\x50\x63\xe8\xe0\x0d\x1d\xad\xb1\xf3\x39\x2b\x6f\xd1\xfc\xeb\x99\x75\xea\xd6\xf3\xdd\xd3\x73\xcf\x1e\xb9\x6e\x95\x68\x26\xb6\x23\xc8\x66\x1f\x51\x0d\x0f\x7d\xc8\x7b\xae\xd8\x92\xd2\x64\xe9\x83\x66\x13\xa3\x67\xbf\xa5\x62\x19\x96\xb5\x0f\xd2\xfa\xfc\x4c\xa8\xa3\x04\x74\xbf\x7f\xdd\xaa\xa6\xa7\xea\xfd\xd1\x8d\xaf\x58\x87\x3f\x91\xca\xbc\x7f\x7b\x43\x4b\x17\xd1\xd4\x45\xb5\x67\xc0\x37\xc7\xba\x99\x7c\xc0\x31\x9f\x37\xeb\xe3\xd8\x7f\x35\x29\x43\x19\x7d\x6c\x66\xb2\x1d\x91\xba\x65\xbd\x28\x9d\x37\xe3\x4c\x6d\x9e\xbd\x2b\x98\x45\xcd\xbc\x7b\x31\xa0\xcc\xbb\x77\xaf\xd2\xed\xcf\x7b\xb8\xe9\x1c\x19\x92\xec\x11\xe3\xdd\x68\x6c\x11\x45\x5c\x30\x88\x65\xa5\x6b\xef\x79\xd4\xac\x36\xa9\x52\x23\x37\xb5\x28\xfb\x18\xe3\xac\x27\xaa\x34\x84\xd1\x06\xbb\x99\x61\x4d\x37\x09\xd1\xb1\x00\x9b\xb1\x7e\x8e\x84\xfe\xe3\x0e\x8f\xfb\x44\xcc\x40\xd4\xf6\xc4\x9f\xbb\x4f\xef\x39\x6f\x6d\x10\x11\xe6\x67\xdf\xb8\x63\xda\xde\xbd\xee\x93\x2d\x7b\x8d\x51\xf7\x6e\xe3\xf6\xd6\x48\x25\x33\x45\xfd\x94\x7f\xa6\x48\x9f\x62\x7c\x8a\xf1\x69\xfd\x9d\xa2\x78\x8a\xd9\x29\x66\xa7\xd5\x76\x8a\xd9\x29\x66\xa7\x98\x9d\x76\x16\xd3\xb7\x9a\xe2\x77\x8a\xdf\x69\xfd\x9d\xe2\x77\xba\xcf\x53\x14\xcf\xe9\x2a\xcf\xce\xf7\x7f\xa6\xb8\x9e\x22\x7a\x8a\xe5\xe9\x5d\x9d\x62\x79\x5a\x9d\xdd\x9f\x67\x8a\xe5\xa9\xc2\x99\xa2\x78\x8a\xe2\x29\x7e\xa7\xf8\x9d\x22\x77\x8a\xdc\x29\x5a\xa7\x38\x9d\x22\x74\x8a\xd0\x29\x42\xa7\x08\x9d\x72\xec\x14\xa7\x53\x9c\x4e\xf5\xcf\x94\x6f\xa7\x98\x9d\xf2\xed\x14\xad\x53\xb4\xce\xdc\x49\xd1\x3a\x45\xe8\x94\x5d\x97\x08\x5d\x22\x74\xc9\xb1\x4b\x7c\x2d\x77\x7b\x89\xbb\x25\xaf\x2e\x77\x7b\xc9\xa8\x4b\xbc\x2c\xb5\xd0\x92\x57\x97\xfb\xbf\xe4\xcf\xe5\x29\xac\xca\xff\xfb\x1c\xf7\x7f\xb9\xff\xcb\xfd\x5f\xee\xff\x72\xe7\x57\xe7\x1c\xbf\xcb\xfd\x5f\xee\xff\x72\xff\x97\xfb\x2f\x8e\x9e\x25\x97\x2e\x75\xd1\x72\xff\x97\x8c\xba\xd4\x99\xcb\xb3\x90\x0d\x9e\xe5\x89\xac\x9b\x57\xe7\xb8\x77\x2f\x82\xa5\x9e\x5d\xe1\xad\x35\x1e\x7a\xfd\x22\x97\x4e\xd3\xfa\x99\x56\xdf\x3b\xc6\xf8\x7e\x3e\x51\x52\x8b\x61\x77\x9e\x05\xb3\x83\xa9\x93\x3f\x28\x1f\x8d\xba\xf9\x96\xf5\x67\xd7\xdd\x77\x37\x5b\xf3\x7e\x9f\xfc\xc6\xe8\x01\xdd\x2c\x57\xc4\x24\x67\xa4\x20\xbf\x64\x95\xbb\xd7\xae\x5b\x45\x74\xaf\x58\x0c\xdf\xfb\x3c\x70\x0c\xfa\xd6\x33\x6d\xce\xe6\xee\xbb\xd9\x2e\xdc\xe7\xb8\xbd\x69\xec\x26\x9b\x85\xe2\x7c\x62\x57\xb1\x6f\xa4\xb0\x5d\xeb\x81\x05\x91\x88\x7b\x6e\xcd\xd0\xd3\x6e\x7d\xc6\x54\x0e\x36\xaa\x1f\x5b\xfa\xb4\x35\x29\xcd\xcd\x7f\x55\xf1\xf8\xeb\xc8\x53\x2f\xfd\x8a\xc9\x3a\x6a\xae\x1b\xc5\x1b\x06\x51\x77\xaf\xda\x5d\x77\x25\x65\x4d\x78\xbf\xec\x3d\xde\xda\xaf\x99\x84\xb6\x39\x9b\x8e\x5d\xfb\xa2\x8f\xf6\xe0\xb1\x0c\xbc\x91\xd1\x48\x8e\x77\xa7\xd6\xcc\x49\x9b\x2d\x69\x6f\x5d\x94\x0d\x5d\x9d\x62\xb9\xd5\xfc\xf3\xab\xe7\x6f\xda\x53\xd4\x24\x66\x38\xd2\x19\xa0\xd2\x35\x89\x51\xaf\xc8\x0c\xee\xc8\x83\x7f\x08\x92\xef\x96\x21\x6f\x36\xd3\x83\x7d\xf4\x12\x37\xa6\xe2\xf7\xdd\xef\x39\xec\x26\xa2\xa5\x65\x24\xfe\xbe\x39\xde\x31\x51\xbc\x44\xf1\xb2\x22\x2f\xf1\xbb\x44\xee\x12\xb9\x4b\xe4\x2e\xab\xed\x12\xbf\xc9\xcc\x4b\x14\x2f\xab\xed\x12\xcb\xcb\xfb\xb3\xc4\xf2\x12\xcb\x4b\x2c\x2f\xb1\xbc\xc4\xf2\x12\xc5\x4b\x14\x2f\x51\xbc\x44\xee\x12\xb9\xd6\x9a\x67\x7d\xf9\xff\xfb\x69\x5b\xfc\x6e\xf1\xbb\xed\x62\xb6\x28\xde\xe2\x77\x8b\xdf\x2d\x5b\x6e\xf1\xbb\xc5\xef\x16\xbf\x5b\xfc\x6e\xf1\xbb\xd5\x45\x7b\xe4\x7c\x9f\xac\x3a\x92\xa5\x9f\xad\x3a\xda\xe2\x7a\x8b\xe8\x2d\xbb\x6e\x71\xbd\xc5\xf5\xf6\x2c\xb6\x58\xde\x9d\x9f\xfa\x1c\x51\xbc\x45\xf1\xf6\x36\x6e\x51\xbc\x45\xf1\x16\xc5\x5b\x14\x6f\x51\xbc\xc5\xef\x96\x4b\xb7\xba\x68\x7b\x16\xdb\xb3\xd8\x9e\xc5\xf6\x2c\xb6\xbc\xba\xd5\x48\x5b\x76\xdd\x9e\xce\x56\x23\x6d\x39\x76\x7b\x52\x5b\x8d\xb4\x3d\xa9\xad\x3a\xda\xf6\x95\xdb\x53\xdb\x9e\xda\xf6\xd4\xb6\xa7\xb6\x3d\xb5\xed\xa9\x6d\xcf\x6b\x7b\x5e\xdb\xf3\xda\xf2\xed\xf6\xa4\xb6\x27\xb5\xdf\x9c\xe9\xbb\xc9\xb7\xf4\x01\x67\xd4\xf7\xdc\xb1\x86\xee\x2d\xd8\x1c\xe9\x81\x8e\x75\x85\xdd\x41\x0d\x9a\x68\x83\x1e\xdf\xf2\x5c\x5e\x9d\xa2\x81\x51\xf0\x50\x8b\x9b\xcf\x8d\xaf\xbe\x2b\x7e\xb7\x7e\x57\xff\x2c\x1b\x18\x1b\xdd\x5d\x4f\x87\x5f\xb4\x70\xc3\x06\x6d\xb5\x71\x33\x55\x4f\x7d\xf2\xcc\xf6\xa5\xfb\x37\x9f\x18\x66\x79\xff\xdf\xfb\xb6\xc4\xaa\x72\xe2\x54\xac\x20\x23\xf3\xde\xb7\xf5\xc4\x12\xfd\xd6\x3f\x6b\xdc\x7b\xbb\x47\xf2\xb9\x5c\xa7\x0e\x8c\x39\xdd\xb4\xfe\xf6\x91\x75\xf5\xbb\xa2\x39\x38\xac\xa1\x33\xc6\x5e\x70\xe1\x09\xef\x9b\x91\xc6\x3d\xf7\x4d\x6e\xab\x58\xcb\xa8\x4f\x6c\x19\xef\xce\xb4\xa7\x1a\x66\xbd\xb7\xe6\x1f\x5f\x2c\x20\x3b\x56\xf2\xf7\x6e\xc8\x60\x43\xcd\x39\x70\x4e\xd4\xa8\xf5\xc4\x74\x46\xb7\xb3\xbd\xd5\x31\x4c\x5f\x38\x30\x63\xde\xf7\xad\x45\x62\x13\xfa\xde\xcb\x9a\x08\xa7\x58\xf8\x15\xc9\xc6\x0d\x7d\x9e\xee\xf6\x22\xd8\x4b\x02\xa3\xb6\x68\x5a\x3a\xb1\x0b\xff\x64\x59\xe3\xe6\xbe\xab\x9b\x71\x87\x5e\x77\xe7\xd8\xb5\xd4\x3c\xf4\x28\xd3\x33\x21\xb6\xdf\x26\xf3\x6a\x47\xcb\x72\xe6\x1d\x16\xe3\xa9\x7e\xf7\x97\x8a\xb7\x1d\xa7\xe3\x72\xdc\x8e\xf9\xe9\x7d\xdf\x8e\xe8\x3e\xe2\xfa\x88\xeb\x23\xae\x8f\xb8\x3e\x56\xe4\x63\x47\x73\xc4\xef\xa9\xfc\xff\x71\xf4\x39\x9e\xe6\x69\x9f\x63\x5d\x3e\x62\x59\xb5\xfc\x1c\x51\x7c\x44\xf1\x51\xf9\x1c\x91\x7b\x44\xeb\x11\xad\x2a\xe4\xc7\x9b\xf6\x78\xfa\xcf\x11\xa1\xc7\xdf\x75\xc4\xe6\xd9\xf9\x7f\xd7\xca\x9c\x47\x3c\x1e\xf1\x78\x44\xe2\x11\x89\x47\xac\x1d\x59\xf1\x88\xb5\x23\xd6\x8e\x58\x3b\x62\xed\xd8\x8f\x1c\xb1\x66\xad\x79\x8e\xbb\x77\x64\xc8\xe3\x69\x7a\xaf\x9e\x57\x6e\x7c\xdd\xc9\xd7\x9d\x7c\xdd\xbd\xd7\xdd\x7b\xd5\x36\xaf\x7b\xf8\xca\x90\xaf\x7b\xe8\xdd\x7b\x5e\xf7\xf0\x95\x1b\x5f\xb9\xf1\x95\x1b\x5f\xb9\xf1\x95\x1b\x5f\xb9\xf1\x75\x9f\x5f\xf7\xf9\x75\x9f\x5f\xf7\xf3\x95\x1b\x5f\x35\x4f\x2a\xe1\xb7\xf3\x53\x9f\x2c\x5b\xbe\xb2\xe5\xab\xe6\x79\xdd\xe7\x57\xb6\xcc\x7e\xe1\x75\xcf\x5f\x39\xf3\x75\xe7\xdf\x99\xf3\x7d\x13\x4f\x01\xc2\x58\xd6\xe8\xc6\xb0\x9a\x7a\x77\xb1\x08\xc9\x5a\x50\xb0\xb0\xc1\xe2\x70\x7d\xe9\x8a\xd7\x5d\x43\x21\xf2\xa9\xeb\x36\xc5\xcc\x55\xc9\x4e\xcc\xaf\x69\x17\x56\xac\x76\xb0\x1f\xa7\x5d\xcf\xc0\x1c\x23\x82\xd3\x31\x5b\x5f\x94\x40\x17\xc6\x02\x59\x90\x5b\x7b\x10\xcc\xbf\x6f\x08\x43\xdb\xee\x5a\x2a\xa5\x9b\x13\x1a\x37\x6c\xd3\xf7\x9c\x31\x8c\xf3\xac\x19\x34\xdc\x6f\xb2\xac\xf8\xc6\x28\xd4\x33\xce\xac\x58\xf5\xd9\x41\x60\x94\xd7\xf0\x39\xe9\xe7\x0f\xe6\xa4\xf3\x8d\x5d\xc2\xbd\x4b\x0b\x1b\x61\xe9\xda\xed\xf7\xbe\x21\xf8\x6c\x3d\x2a\xd7\xa6\x0b\x7a\xf3\x1e\xe1\x95\x5b\xcb\x31\xe7\x9a\xea\x2b\x99\xaa\xef\x3d\x47\x23\xee\x7a\xeb\xfc\x4d\x4f\xb6\xec\xd0\x6f\x6e\xb9\x3b\xb8\x61\x2f\x89\x8b\xb2\x63\x99\x64\x7f\xfa\xb0\xee\x7a\xbe\xfb\x46\x4d\xcc\xde\x96\x43\x1a\x9f\x76\xe9\xa5\x9c\x74\x05\x9f\x9b\x69\xb7\x3d\xfe\xa0\x1c\x3a\xbd\x33\x43\x7e\x4b\x5f\xd4\xa4\xf5\x5d\xf7\x8f\x1c\x7e\xb3\x25\xcb\x98\xe1\x37\x3e\x5f\x6c\x4c\xef\xba\x33\x64\x98\x6d\x2f\xc0\x12\xa8\x7f\xd6\x03\xf6\xd4\x31\x9e\xd8\xdf\xc9\x9b\xe3\x4d\x13\xbf\xaf\xf8\x55\x55\x3e\xaf\xd5\xf6\x5d\xa9\x78\xfd\xd4\xda\xfa\xee\xec\xbe\xfd\x54\x14\xbf\xf9\x1c\xf1\xfb\x5a\x37\x5f\xeb\xe6\x6b\xdd\x7c\xad\x98\xef\x9b\x2a\xd4\xb5\x6f\x7e\xea\x5a\x51\xfc\xda\xa7\xbc\x62\x59\x7d\xfb\x78\x52\xcf\x2b\x96\x3f\xf1\xfb\xa9\x6d\x3e\x51\xfc\xb9\x0f\x9f\x4c\x98\xae\xd4\x27\xa2\x3f\x11\xfd\x89\xe5\x4f\x2c\xbb\xf3\xcf\x27\x96\x3f\xb1\xfc\x89\xe2\x4f\x14\x7f\xa2\xf8\x13\xb3\x9f\x98\xfd\xe4\xc6\x4f\x6e\xfc\xec\x1c\x3f\xb9\xf1\x13\xcb\x5f\x76\xb2\xe2\xf7\x13\xbf\x9f\xc8\xfd\x64\xc8\x4f\xfc\x7e\xe2\xf7\x13\xbf\x9f\xf8\xfd\xd4\x3c\x9f\x28\xfe\x44\xf1\x27\x8a\x3f\x51\xfc\x89\xe2\xc4\xe3\xa7\xf2\xb4\x2f\x78\x3e\xcf\xe2\xb3\x97\xfc\xd4\x3f\x9f\x27\xf2\x79\x22\x9f\xec\xfa\xa9\x7f\x3e\x4f\xe7\x53\xf3\x7c\x9e\xce\xe7\xe9\x7c\x9e\xce\x27\xbb\xda\x95\x3c\x9f\x67\xf4\xc9\xb1\x9f\x6a\xe7\x53\xed\x7c\x9e\xd7\xa7\x3a\xfd\x3c\xb5\xcf\x53\xfb\x64\xe0\xcf\xb3\xf3\xbe\x79\xc7\xee\xd1\xf7\x49\x1e\xbe\xb1\xfc\xaf\x8a\xbb\xab\xed\x52\x4f\x12\x72\xaa\x22\xa1\xbf\x56\xaa\x97\x7b\x3f\x47\xc7\x48\xfd\x56\xf8\x4f\x2d\x43\x4f\x7d\xfe\x6a\xa8\xc9\x7f\x58\xe1\xb8\x4f\x61\xd0\x5a\x9d\x2a\x9c\xa9\x3f\xff\xfa\x9f\x41\xd7\x7b\xc4\x3a\x04\x8f\x68\x59\x3d\x5f\xaa\xc7\x44\x52\x6a\x8f\x58\xbd\xdf\xfb\x1f\xbb\xe1\x11\xb3\x80\x71\xef\x3c\x69\x92\x5b\x6e\xc8\x5a\xf7\xd9\xa9\x8b\xfa\xb9\x75\x45\x77\xea\xf6\xef\xe6\x43\xba\xa5\x77\xbf\x73\x73\xd4\x8f\xab\x70\x3f\x73\x9d\x9f\xe9\x67\xdd\xef\xb3\x64\x80\xd8\x89\xde\xb7\xa8\x6e\x45\xd7\x8d\xd5\x50\x86\xc0\x06\xbd\xe0\x67\x9c\xec\x38\xe4\x04\x39\xcd\x1b\xce\xfe\xb8\x07\xb6\x58\xba\x19\xd9\x69\x0e\x6b\xfa\xa0\x2d\xbb\xf0\xdf\x1a\x77\x25\x15\x72\x3f\xc1\x11\xee\x3b\x3f\x22\x4d\x7f\xf7\x59\x5d\xec\x1b\x36\x3e\x7f\x77\x32\x6d\xde\xc0\x6a\xf5\xa7\x7e\xd1\xbd\x87\x0b\x07\x7e\x75\xb2\xc4\xf6\xec\xee\xb7\xda\xe7\xd6\x1e\x43\x75\xf7\xc8\x27\x8b\x02\x75\x61\xd1\x8c\x9f\x4d\xe7\xad\xdf\x1e\xbc\xd6\x65\x7f\x37\x63\x65\x6e\x8d\x08\xda\xb2\xc7\x7d\x9f\x27\x44\x5b\xed\xd7\xfb\x1b\x79\xbb\xbc\x69\x62\xdf\xce\xf1\xf9\xc4\xbe\xbd\xd8\xf3\x89\xfd\xcf\x13\xf9\x52\x95\xa9\x85\xbe\xbb\x9a\x8f\xff\xee\x2d\x79\x6e\x4a\x18\xcf\x7d\x29\xc6\xf3\xe4\x7f\xa6\xe3\x72\x3c\x8e\xaf\xe3\xbd\xe8\xb9\xbf\x76\x3c\xc3\x55\x6e\xea\x33\x9c\x3f\x9c\x7f\x5f\xd8\x01\xac\x1e\x5e\x40\xaf\x58\x0f\x60\xb5\xe4\x7a\x8f\x7e\x57\xb9\xb6\x5c\x5b\xae\xf5\xaa\x3e\xe5\x5a\x2f\xb8\xc7\x32\x9e\x76\x55\xbb\x4a\x22\x07\x5f\x0f\xc0\xb5\x59\xdf\x36\xec\xdb\xa6\x7d\xdb\xb8\x6f\x9b\xf2\xed\xbc\x50\xa6\x7b\xdb\x78\x6f\x9b\xef\x6d\x03\xbe\x6d\xc2\xb7\x47\x96\x3b\xf0\xb5\x21\xdf\x36\xe0\xdb\x26\x7c\xdb\x60\x6f\x9b\xec\x6d\xd3\xb5\x6d\xb2\xb6\x8d\xd6\xb6\x89\xda\x36\x48\xdb\x23\x9b\x8c\xe7\x75\xce\xeb\xaa\xd7\x39\x6f\xce\xf1\x6d\x3f\x9f\xfc\x39\xff\x73\xbe\x4d\x03\x80\xd1\x00\x6d\x1b\x9e\x6d\xd3\xb3\x6d\x7c\xb6\xcd\xcf\xb6\x01\xda\x7b\xdc\x8e\xf7\x4c\x60\xe3\x18\x9e\xc5\xd0\xea\x18\x9e\xc8\xf0\x2c\x86\x67\x31\x46\xce\xbc\xdf\x41\x21\x33\x80\x90\x83\xfc\xfb\xb4\xa9\xad\x37\xa5\xca\x7b\x83\x89\xa4\xff\xe8\x7b\x9f\xe3\x90\xbf\xd6\x5d\x54\x0b\x2d\x62\x93\xb8\x47\x1e\xa9\x87\x83\xf7\x7c\xe3\xce\x77\x9f\xd7\x42\x4e\x9c\x9a\xe2\xf3\x57\xb6\x3c\xb6\x68\xe7\xdc\x05\x5c\xfb\x01\xc5\x7b\x73\x56\xf1\xaa\xde\x9a\x5e\x1b\xe6\x96\x27\x8f\xf1\x94\x3e\x79\xeb\x6e\x70\x37\x1f\x5d\xb3\xdd\x3d\xc8\x74\xcf\x5b\x16\xf5\x4e\xe2\xe7\xa6\x35\x35\x75\xe6\x4c\xab\xfe\x9e\xb9\xe3\x61\x95\xb2\xb7\xbd\x3f\x2b\x1b\xdc\xd6\x96\xbe\x29\xe1\x30\x41\x30\x64\x59\x4f\xff\xbc\xbf\x94\x2a\xf3\x7e\xab\xcf\xfb\x96\xa1\x96\x38\x8c\x29\x2b\x0a\x65\xb5\x7f\x2d\xae\x1b\xe8\x93\x87\x5e\xd9\x86\xf6\xe7\xdd\x36\xbc\x32\x09\xfe\x4f\x00\xc5\xb6\x74\x93\x4d\xe9\x18\x0d\xac\xf8\x65\x05\xa0\x40\x3a\xa3\xf3\x56\x29\x19\xe2\xfa\x52\x69\x94\xb2\x72\xf8\x81\x3c\xac\x1c\x66\x94\x7f\xdd\xed\x8a\x1f\xc8\x13\x3f\xde\x37\xa5\x07\x6d\xe0\x47\xa3\x4e\x6a\x41\xa8\x91\x12\x6a\xf1\xe0\x1a\x9a\x8e\x5c\x25\x7b\x29\x8d\x77\xe4\xcd\x03\x99\xbe\xf7\xfe\x4c\x5b\xf6\xad\x64\x5e\x9a\x3d\x43\x39\x39\x86\xc8\x1d\x22\x57\x73\x6e\x64\x91\x19\x22\x77\x54\xde\x34\xef\xb0\x3b\x3f\xdc\x49\x0b\xc2\x00\x77\x0f\x5b\xb7\x31\xda\x55\x62\x19\xf4\x3d\x2c\x20\x43\xea\x1d\x63\xba\x56\x74\x83\xc1\x47\x5a\x71\x63\xba\x4a\x74\x2b\xc7\xc6\x5d\xa0\x3a\xad\xf4\x21\x4d\x0e\x2d\xf3\x31\x44\xfa\x10\xe9\x00\xf3\x31\xc4\x38\xd8\x7c\x80\xcd\x07\xd8\x7c\x0c\x31\xae\x30\x1c\xa0\xf2\x31\xf2\x97\x9e\x34\xb4\xfc\x5e\xf1\x3e\xc4\xbb\x26\xe8\x18\xe2\x7d\x88\xf7\x21\xde\xc7\xeb\x13\xc4\x3b\xd8\x7c\x80\xcd\xc7\x48\x63\x4c\x8c\x4b\xe7\x43\x91\x3b\x40\xe8\x03\x84\x3e\x80\xe7\x43\xb3\x70\x58\xa2\x07\xf0\x7c\x54\xc0\x07\x91\x0e\x3c\x1f\xc0\xf3\x01\x30\x1f\x5a\x86\x03\x6c\x3e\x6c\x35\x06\xf0\x7c\x00\xcf\x07\xf0\x7c\x28\xff\x07\x30\x64\x28\x90\x07\xd8\x7c\x94\xa7\x03\xf6\x19\xc0\xf3\x01\x3c\x1f\xe5\x29\x54\x22\xce\x53\x30\x41\x3d\xca\x53\x00\xa4\x0f\x40\xfa\x28\x77\xbe\xdc\x79\xdb\x91\x00\x0e\x96\xe8\x7b\xf4\x99\xee\x79\x96\xe5\xda\xcf\x5d\xb4\xd3\xa4\xbf\x6f\xf8\xd0\x68\xe7\x86\xda\x64\xaa\xe6\x73\xee\x5f\xf4\x32\x50\xb8\x49\xe4\x16\x08\xd3\xa6\xe4\x29\x0b\xfe\xfd\xb7\x12\xb5\xd1\x27\x17\xf3\x11\xcf\xb1\xb6\xc1\x11\x00\x5d\x4d\xe3\x17\xcf\xcf\xab\x56\xd4\x5b\xf0\x57\xf5\x0b\xc6\x39\x9a\xac\xe7\xaf\x97\x85\x74\x6b\xeb\x3e\xe3\xc6\xf8\x91\x33\x9f\xf5\x6b\x03\x13\xab\x37\xc2\x32\xef\x1d\x5e\xdc\x81\xea\x5f\xd3\xd1\xe2\x7c\xe3\x57\xce\x69\xc3\xc0\x77\x83\xa8\xd4\x8a\x07\x29\x00\x4a\xf1\x3b\x92\xa3\x8e\x96\x70\xc5\xc3\xfc\x6e\x92\xb6\xf5\x8e\xf4\x52\x69\xf4\x56\x36\xca\xef\x2d\xaf\x6e\x0e\xbc\xbf\x11\x91\x7f\x28\x40\xb6\x01\xc1\xa5\x8c\x8d\x9d\x4a\x79\x3a\x6f\x08\x5c\x8a\xb8\xad\x90\x59\xc6\x04\x07\x07\xad\x52\xe2\x95\xfc\x46\x6b\xae\xb7\x91\xbb\x0d\xf0\xd9\xc0\xd5\x06\x88\x59\x0d\x6f\x6e\xf7\x7d\xee\x53\x9e\x06\x9b\xfa\x96\xa8\xf3\xe1\x8f\xf7\xb8\x1b\xe4\x93\x6e\x9d\x77\x9f\x97\x06\xff\xb4\x3a\x0c\x39\x73\x79\x63\x7f\xc5\x23\xda\x0b\xa9\x97\xfb\x74\xc6\xcd\xa5\xf7\x9c\xb4\x16\x0a\xd1\xb8\x15\x4a\x31\x68\x38\xa8\x7c\xa1\xd5\x8c\xb2\x16\x57\xb6\x9b\xd6\x62\xa4\x8c\x51\x3b\x3f\xf5\x76\x89\x5c\x00\xc2\x28\xf1\x8b\xa6\x31\xd0\x34\x46\x89\xe2\x12\xc5\x36\x8b\x03\xf0\x3e\x00\xef\x03\xf0\x3e\x00\xef\x03\xf0\x3e\x80\xa5\xe3\x7e\x93\x7b\x74\x95\xb8\x06\xb9\x8f\x12\xcb\x60\xf6\x01\x66\x1f\x95\x28\xb6\x76\x83\x22\x07\xb0\x7d\x00\xdb\x07\xb0\x7d\x00\xdb\x07\xb0\x7d\x68\x6b\x8d\x40\x8b\x20\xf7\x01\x72\x1f\x20\xf7\x01\x72\x1f\xc0\xf6\xd1\x56\x73\x90\xfb\x00\xb9\x0f\x90\xfb\xb0\xe2\x0c\x90\x3b\x38\xf1\x1e\xfd\x2e\x99\x19\xe4\x3e\x3a\xe5\xbf\xcc\xdc\x95\xab\xfc\x2e\x6f\x63\x56\x46\xf0\x7b\x56\xfc\xa1\x21\x3a\x40\xf1\x03\x04\x3a\x40\xf1\x5a\xaa\xf7\xe8\x5a\x99\x01\x2c\x1f\xd8\x61\xb4\xea\x0b\x44\x3f\xbc\x45\xc3\x46\x7f\x80\xe8\x47\xab\xb2\xc0\xf2\x03\x2c\x3f\x5a\x06\x06\xc8\x0f\xc0\xec\x00\xbf\x0f\xc0\xfb\x00\xbc\x0f\xc0\xfb\x68\xcf\x11\xf0\x3e\x00\xef\x03\xf0\x3e\x80\xed\xde\xb1\x7b\xf4\xff\x6f\x36\x3a\x3e\xc7\x33\xd2\x4c\x1d\x40\xf5\xcd\x80\x66\xcc\xfb\xdb\x4b\x6b\x7f\x18\xbc\x7b\x38\xd0\x86\xea\x18\x2f\xd0\x13\x30\xdc\x26\x6c\x56\x9a\xbb\x21\x27\x2e\xab\xbf\x9c\x60\x0d\xfa\x65\x2a\xb4\x4a\x42\x05\xf5\xfc\xbc\xa4\x6e\xac\x8d\x14\xe9\x9a\x5b\x0d\x88\xdb\xb1\xc8\xb1\xe2\x93\x73\x2a\xb4\x97\xaa\xc4\xdd\xb4\x99\x7b\xee\x5d\x2d\x2e\xd9\xcb\x5a\x16\xc7\xce\x42\x6e\x0d\x19\x6a\x9d\x7b\x1f\x6a\xa6\x4a\xb9\xdf\xa1\xcf\x7d\x93\xe3\x0e\x37\xee\xea\xdf\xe4\xb4\xee\xe7\xdc\x58\xf6\xc6\x2e\x04\xfc\x91\xd6\x0b\x7a\xec\xac\xf8\x9c\x37\x90\xed\x7e\xdb\x9e\xda\x4b\x4c\x64\x86\x9c\x83\x98\x5c\xd9\x34\x94\x31\x68\x5a\xa0\x45\x19\xb2\x90\x04\x7b\x20\xbf\x17\xd2\x3d\xea\x56\x4d\xee\x91\x53\x63\x63\x20\x98\x3f\x2c\xa5\x7a\x81\x04\xdd\x8d\x69\x20\xb2\x35\x1d\x5f\xa4\xb6\xef\x47\x97\xfb\xb9\x84\xa5\xc9\xf4\x6a\xf9\x0c\xad\xdf\xe1\x6f\x6f\xbf\xeb\xb8\xdb\x2a\xb7\x11\x6a\x80\xfc\x76\xaf\x5d\xb6\xe3\x85\x96\xde\xc6\xbe\x17\xbb\x1c\x3a\xcc\xbd\x8d\x10\x4d\x6d\x6f\xf4\xea\x1e\xd9\x66\x71\x24\x06\x56\xd7\x46\xdf\x18\x88\x18\x03\x11\x63\xb4\xb8\x46\xbe\x18\xd3\xfb\x33\xc5\x35\x02\xc5\x00\xa7\x8f\x29\x96\x81\xea\x63\x8a\xe5\xc0\x8f\x53\x4d\x3e\xc5\xf2\x14\xcb\x5a\x4a\x63\x8a\xe5\x29\x96\x6d\x55\x87\x8c\x3a\x64\xe3\x31\x45\xf4\x14\xcb\xb6\xc2\x03\x7c\x37\xe4\xed\x01\x90\x1f\x00\xf9\x31\xb3\xb2\x88\x65\xb0\xfc\x00\xcb\x0f\xb0\xfc\x00\xc8\x8f\x29\x8a\xc1\xf2\x03\x2c\x3f\xc0\xf2\x03\x2c\x1f\x48\x61\xcc\xd0\x2b\xac\xf2\x60\xf9\x31\x45\x31\x70\x7e\x58\x8b\x07\x88\x7e\x78\x4f\xf2\x86\x27\xa6\x06\x88\x7e\x58\x01\x07\x70\x1e\x2c\x79\x8f\x3e\x47\xae\x06\xd1\x0f\x30\xc8\x00\xd1\xff\xea\xc9\x29\x4b\x83\xeb\xc7\x14\xe3\x40\xfb\x31\x65\x69\xd0\xfd\xc8\x26\x1e\x74\x3f\xc0\xf5\x03\x5c\x9f\xfa\x61\x80\xe8\xc7\xb4\xc3\x9a\x62\x3f\x50\xcc\xf4\x04\x67\x00\x0d\x39\x19\x38\x3f\x56\x32\x80\x9c\x0c\xa2\x4f\xf3\x72\x00\xe7\xc7\x92\x81\x57\xa0\x63\x4f\x0d\x2c\x3f\x00\xb6\x63\x8d\xbc\x33\xce\x49\xb5\x2f\xeb\x02\xe7\xc7\xf2\x44\xe2\xfe\xca\x52\xed\x45\x67\x1e\x48\xa0\xf3\xcb\x8e\x60\x06\x82\xb6\x83\x08\x6c\xab\x85\xe3\xbe\x1d\x40\xd3\xb6\x3b\x6e\x84\xe8\x66\xfe\x35\x55\x77\x8d\x70\xba\x59\x3b\x65\x3f\xe8\xdd\xbe\x15\xc8\x00\x89\xdf\xb8\x48\xcd\xaf\x22\x8d\xab\x30\x03\x82\x6e\xf5\xf3\x16\x5f\xed\x6e\xac\x93\xbc\xb7\xdf\x9b\x61\x86\x0a\x04\x74\xc6\x95\xb4\x6e\x0e\xa9\xb2\x07\x5f\x20\xa6\x65\x64\xe4\xe8\x00\xbc\x4f\x08\x1d\x71\x05\xbf\xbf\x77\xc6\x36\xeb\xd3\x8a\x26\x9c\xb0\x57\x9e\xe0\x9b\x96\xf9\xf2\xcd\xed\x19\x77\xea\xea\xa9\x86\x91\x9f\x35\x72\xec\x83\xd2\x37\xe0\x5d\xdf\xa4\x6e\xee\xb5\x04\x79\xee\xf7\xe9\xb8\x80\xb2\xbe\xda\x79\xc7\x02\xe6\xa4\xb5\xbc\xa7\xbb\xa4\xc5\x0b\xd8\x1c\xe8\xff\x0b\xb8\xca\xb7\xfc\xae\xd1\x32\xc6\xfd\xb6\x83\x63\xa7\xc1\xd6\x5a\x86\x9e\xd7\xdd\x49\xcd\x67\xdd\x28\x6e\x5d\x8e\xc7\xfd\xcf\xbe\x9b\xfe\x7f\xb7\x41\x9f\xbd\xd1\xa9\xec\xe9\x38\x48\x77\xda\xe4\x71\xa1\x7f\x9e\x64\x51\xd5\x20\x87\xe4\xad\xe6\xd9\xed\x3e\x6b\x7a\x6d\x9e\xd8\x53\x0d\xaf\xba\xbb\x6f\x0e\xba\x81\x98\x45\xe2\x18\xe8\x1b\x43\xf6\x93\xe5\xfa\x47\x83\x5a\x21\x26\x88\x50\x15\xda\x40\xd9\x18\x20\x82\x81\xb2\x31\x96\x3a\x7c\x59\x7f\xd1\x37\x06\x10\x7e\x80\xdf\xc7\xda\x59\x07\xfd\x54\x84\x2e\x6b\x2e\xf8\x7d\x00\xde\x47\x9e\x20\x70\x6f\x00\xd8\x87\x3d\xe6\x50\xf7\x0e\xd0\xfa\x00\xad\x8f\x25\xfa\x96\xe8\x5b\x76\x3d\x4b\x7f\x03\xe4\x3e\x40\xee\x03\xe4\x3e\x96\x8c\xba\xf2\xf7\xca\xab\x80\xf7\x01\x6c\x1f\xda\x84\x63\x8b\x4a\xdd\x89\x01\x16\x18\x40\xc2\x01\x72\x1f\x40\xdd\x01\x66\x1f\x00\xc9\x01\x66\x1f\x60\xf6\x01\x60\x1f\x5b\x54\x6e\x4f\x1c\xd8\x3e\xb6\xfc\x09\x40\x1e\x20\xf7\xe1\xad\x18\x5b\xe6\xdc\x81\x08\xe4\x4c\xf0\xfb\x00\xbc\x0f\x6f\xd4\x00\xbc\x0f\xc0\xfb\xd8\xee\x3f\xe0\x7d\x00\xde\xc5\x4b\x8f\xed\xfe\x6b\x28\x8e\xed\xfe\x83\xd3\x07\x38\x7d\x80\xd3\x07\x20\x7d\x00\xd2\xc7\x56\xed\x00\xd2\x07\x20\x7d\x80\xd0\x07\x08\x7d\x80\xd0\x07\x08\x7d\x80\xd0\x87\xfd\xf8\xc8\x9a\x05\x48\x1f\x3b\xb0\xb6\x27\x62\xd0\x9c\x48\x6e\x17\x50\x65\x1b\x57\x9d\x2c\x17\x97\x01\x2f\xbb\xe3\x5b\x7b\xaf\xbf\x09\x94\xa8\x90\x16\x37\x59\x8e\xc7\x10\x5e\x23\x12\x4e\x86\x62\x13\x9d\xcd\x28\x43\xd1\xea\xbf\xd9\xe3\x73\xe6\x27\x42\xb5\x63\x27\xc0\xfc\xe6\xcf\x0e\xb9\x86\xb3\x7a\xa2\x75\xcb\x33\xfb\xee\xe5\xef\xee\x43\x43\xf4\xde\x87\xd6\x45\xf9\x77\x97\x7c\x26\xfb\x36\xe4\xe5\x6a\x56\x5f\x75\xb3\xe5\x04\xba\x56\x56\x84\x29\x57\x93\x31\xe8\xa5\xdd\x5b\xd9\xe3\x7c\xbf\xfd\xe3\xcd\x5a\xf6\x05\xf1\x91\x1e\xfe\xe7\xe3\x53\x4a\x1e\xaf\x9a\x18\x09\x47\x80\x5e\x4c\x1e\x1f\x86\x92\xfc\x14\x6a\xf2\x88\xde\x48\x04\x81\x01\x1b\x50\xff\xbc\xf7\x8d\x5d\xd9\x71\xa0\x57\x50\xe8\xeb\x22\xa8\x30\xe3\x3d\x7b\xee\x3b\xb0\xd9\x1d\x82\x43\x6b\xda\xfb\xef\xdf\x90\xdf\x7d\x93\x17\xd3\xba\x0a\x6d\x56\x06\x98\xb7\x96\x98\x01\x85\xde\x54\xaa\x28\x8a\xdf\x99\xb2\x6e\xa8\xb8\x15\x8a\x25\x68\xfd\x05\x6d\x75\xee\xaa\xbf\x51\x9d\x19\xaf\x60\x80\xe4\x46\x1a\x7a\x75\x45\x0e\x43\xc9\xd2\xa7\xf2\x94\x7b\xe9\x64\x6e\x03\xc4\xe3\x24\xd6\xc4\x32\xda\xc5\x40\xbb\x18\x5b\x14\x6f\x51\xbc\xc5\x2f\x38\x7d\x6c\xf1\x0b\x54\x1f\x40\xf5\x71\x44\xae\xfd\xac\x3d\xe6\x3d\xb6\x63\x32\xf3\x71\x74\xa6\x28\x06\xb0\x0f\x7f\xe3\x00\xb0\x0f\x00\xfb\x00\xb0\x8f\x23\x8a\x8f\x28\x46\x89\x1a\x20\xf7\x01\x72\x1f\x20\xf7\x01\x6c\x1f\xc0\xf6\x01\x6c\x1f\xc0\xf6\x71\x54\x3e\x47\x14\x03\xde\x07\xc8\x7d\x1c\x95\xcf\xe9\x9c\xef\xf3\xc5\x32\x91\xb7\x01\x9c\x1c\x01\x45\x8f\x88\xb6\x26\x0e\x4f\x73\x9c\x19\x30\xc1\x6f\x11\xd7\xc0\xf9\xd0\x40\xc6\x51\xf9\x1c\x19\x15\x44\x3f\xac\x0e\x03\x50\x3f\x00\xf5\xe3\x64\x85\x92\x63\xc1\xf5\xe3\xec\x9c\xef\x93\xc5\x3e\xd0\x7e\x1c\xb5\x10\xe8\x7e\xa4\xae\x46\xe6\x1a\xc8\x5c\x43\x85\x3f\x4e\xa0\x0c\xb1\x0f\xd8\x1f\x47\x15\x04\xec\x1d\x20\xfd\x01\xd2\x1f\xc7\x73\x04\xec\x8f\xe3\x39\xaa\xb4\x07\x78\x7f\x80\xf7\x07\x78\x7f\x1c\x4f\x13\xc8\x3f\x02\x56\xd8\x8f\x0f\x50\xff\x78\x3d\x53\x80\xff\x00\xf8\x8f\x90\x47\x5e\xf9\x19\xe0\x1f\x21\x90\x9e\x7c\x83\x99\xc3\x1a\x46\x2c\x10\x50\xb5\x8a\x8e\x20\xca\xdd\x59\xdc\x68\xfd\xaf\xb1\x5d\xef\x4b\x6a\x1a\x76\xc4\xea\x9e\x87\x6a\xd3\x1e\x82\x6a\xd4\x78\x6d\x3b\x2c\x14\xa5\x6c\x5f\xc1\xc0\x6e\x81\x5c\x9b\x7b\xea\x7a\x34\x5a\x62\xe6\x6d\xdb\x64\x46\xab\x4c\x7f\xd5\x2f\x11\x2a\x24\x5b\x0b\xa7\x94\x5a\xa5\x05\xb8\xcc\x13\x9a\x4d\xed\xe3\xb7\x17\xd4\x33\xcc\x42\xc5\x63\xbd\xf8\x3a\x83\x8e\xc9\xc0\xbb\xed\xbd\xf0\x72\x66\x96\xf4\xb4\x0f\xb7\xa2\x29\x8d\x64\x7f\xd1\x8f\x4d\xeb\xb7\x9c\x6c\x2e\xa5\xb7\xca\x5f\x7a\x83\x18\x6f\x98\x1e\xef\x0c\xff\x72\xf3\x3b\xad\xe7\x7c\x7f\xf3\xc7\xd3\xe2\x65\x3a\x7f\x8a\x51\x5a\xbf\x14\x46\x06\xab\xef\x87\xf3\xea\xd1\x92\x9c\x4a\xb3\x89\xd7\xb5\x29\x32\x8c\x18\xa8\x43\x88\x71\x89\xe6\x43\xb9\xe9\xf8\xab\xdb\x66\x6e\x36\x9e\x25\x25\xac\x61\xd2\xf8\x91\xbc\xbf\xa0\x71\x5a\xe3\xb6\x3b\xf5\x50\x86\x1a\x74\x9d\x2c\x9e\x65\x4a\xf0\x6e\xf5\xe8\x1a\xdc\x07\x5e\x5e\xdb\x7e\xb5\x73\xe0\x4f\x33\x0a\x29\x38\xee\x23\xf6\xcc\x35\xf3\xe2\x78\xb9\xa4\x01\xf3\x57\x03\x53\x64\x58\x22\x06\xa6\xc8\xd0\x00\x1b\x58\x11\x03\x53\x64\xd8\x4c\x0f\x1c\x91\x81\x23\x32\x70\x44\x06\x8e\xc8\x00\x2f\x8c\x57\x7a\x78\xa5\x07\x89\x70\xbc\x92\x04\x06\xc9\xb0\xd9\x1d\x61\x03\x60\x90\x0c\x0c\x92\x81\x41\x32\x30\x48\x06\x06\xc9\x78\xa5\x0a\x3c\x92\x81\x47\x32\xf0\x48\x86\x66\xf9\x78\xa5\x8d\x37\xb8\x63\xfe\x22\x69\x03\x9b\x64\x58\x1e\x07\x36\xc9\xc0\x80\x1c\x98\x01\x03\x33\x60\x60\x06\x8c\x57\x51\xa6\xd9\x9f\x2d\xfb\xc0\x12\x18\xaf\x14\xf2\x4a\x21\x29\x93\x71\x05\xc6\x2b\x85\x60\x0c\x0c\x2c\x81\xf1\x4a\x1b\xaf\xb4\x81\x31\x30\xde\x6c\xc7\x15\x0e\xb8\xe0\x03\x87\x60\xe0\x10\x0c\x4d\xfd\x81\x49\x30\xc0\x11\xe3\x55\x38\xe0\x13\x8c\x57\x0a\xc1\x2a\x18\x5a\xa1\xc3\x9b\x33\xf0\x09\x06\x3e\xc1\xc0\x24\xf0\x9e\x74\x62\x73\x78\xd6\x03\x87\x60\x7c\x61\x95\x49\xf9\x5a\xaa\xc3\xc6\x1d\x1a\x7d\x8f\xed\xe8\x1c\xcf\x57\x34\x0d\xdb\x8e\x81\x3d\x30\xb0\x07\x86\xc5\x7c\x60\x0f\x0c\xec\x81\xf1\x79\x9a\x69\xa0\x7e\xe1\x91\xdc\x74\x32\xf9\x88\x4a\x4b\xb5\x08\x78\x9a\xbb\x2b\x33\x57\xb5\x4c\xd0\x35\x9d\x35\x0b\x4b\x8d\xf8\xac\x2e\x50\x4f\x66\x3c\x40\x40\x23\xa5\xba\xf6\x21\x6e\x5c\x9d\x1b\x95\x37\xee\x5e\x6f\xf8\x86\x07\xdf\xec\xc1\x25\x95\x86\x54\x51\x48\xad\x6d\x89\xdb\xde\x43\xda\xf8\xb5\x34\x66\x26\x35\x93\x24\xd7\x67\xdc\xbb\xba\x64\x27\x26\x2d\xf5\xe2\x0b\x36\x31\xd3\x09\x34\xc0\xab\xab\xf9\x3d\x37\x1b\x84\xd9\x89\x53\x32\x53\x60\xfe\x80\x2c\xc5\x85\x0d\xd6\x7c\x35\xa4\x9f\xfb\xb7\x6f\x0c\xbf\x19\xe4\x58\x49\xb5\x62\x3c\x8f\x4f\xb0\x34\x33\x36\x2d\x95\x49\xc7\x6d\x2a\x30\x27\xa5\xb6\xd2\x0e\xa7\x6d\x51\x93\x7a\xcb\x64\xbb\xae\xad\x58\x93\x16\x89\x4d\xdb\xcd\x4e\x01\x19\x14\x6b\xac\xee\xa1\xf2\x66\xb6\x7b\x59\xee\x96\x18\xe4\xc2\xd0\x8d\x6d\xf9\xdb\x6e\xe2\x38\x46\xc9\xe5\xc4\xfe\x5c\x73\x6b\xe5\x13\x4c\x5f\x07\x1d\x67\x7a\xd6\xed\x79\xd1\xb1\xac\x19\x26\x93\x62\x79\x07\x38\x7a\x02\x02\x60\x7b\x9b\xd9\xe0\x65\x50\x3b\xb3\x0a\x4f\x5a\xbf\x16\xba\xca\x46\x41\x5c\xe3\x9a\x0c\x5c\x93\x81\x6b\x32\x70\x4d\x06\xae\xc9\xc0\x32\x19\x61\x12\x80\x16\x07\x1e\xc9\xc0\x23\x19\x9f\xf8\xc5\x26\x19\x36\xac\x03\x9b\x64\x7c\xe2\xf7\xcb\x46\x53\xcc\x62\x90\x0c\x0c\x92\x81\x41\x32\xc0\x1d\xc3\xd3\x1c\x18\x24\x03\x83\x64\x60\x90\x0c\x0c\x92\xa1\x65\x35\xac\x14\x03\x83\x64\x80\x28\x07\x06\xc9\xf8\x2c\xf5\x78\x24\x03\x83\x64\x60\x90\x0c\x0c\x92\x81\x41\x32\x30\x48\x06\x36\xc0\xc0\x06\x18\xd8\x00\x23\x9c\x6c\x3c\x80\x81\x07\x30\xf0\x00\x86\x96\xde\xc0\x03\xa8\xbb\x20\x17\x1e\x40\xe1\x01\x14\x1e\x40\xe1\x01\x14\x1e\x40\xa1\xbb\x17\xd4\xa4\xb0\x01\x0a\x1b\xa0\xec\x90\xcb\xb8\x7a\x61\x03\x14\x36\x40\x61\x03\x14\x36\x40\x61\x03\x94\x5d\x7d\x61\x03\x14\x36\x40\x61\x03\x14\x36\x40\xe9\x77\x14\x36\x40\x41\x83\x0a\x1b\xa0\xb0\x01\xea\x81\x40\x07\x23\xd1\x8f\x28\x9c\x80\xc2\x06\x28\x28\x66\x19\x96\x29\xcc\x80\x32\xd8\x5e\x30\xe3\x4a\x47\x15\x4b\xa0\xf0\x03\x0a\x46\x52\x68\xa8\x65\xbc\xbd\x8c\xb7\x57\x3a\x0e\xb8\x02\x85\x2b\x50\x6a\xeb\xc2\x15\x28\x98\x13\x5b\x80\xde\xfa\x8f\x0c\x77\x7b\xdd\x1a\x71\x1a\x27\xa9\xce\xdf\xa5\x0f\xc5\x64\xe3\x2e\x98\x6d\x20\xe8\xdc\xba\x1c\x32\x9d\x0a\x12\xdd\x91\x2a\x75\xe9\xac\xdd\xbd\x47\x06\x7e\x6f\x99\x40\xb6\x68\xd0\x2c\x6e\x08\x1c\xc7\xa0\x1b\xca\x8f\xbe\xe7\x83\xb2\x32\xed\xd0\x6e\x22\x7c\x42\xa6\xbd\x01\x8d\x5a\x76\x77\x50\x30\xe3\x0e\xf3\x60\xd9\x27\xbc\xb0\xf3\x47\x08\xea\x8d\x86\xd2\xff\xa5\x13\xb4\x04\xb1\xde\xd3\xfd\xe9\xb4\x5b\x78\xe7\xdd\x39\x14\xca\x56\xa5\x8f\x23\xf9\x79\x46\xb5\x17\xaa\x24\x39\x17\xc3\x7a\xb7\xda\x43\xbd\x46\xaa\xb1\xdf\xfe\x7e\x94\x9e\x15\xa1\x83\xba\xfb\xc6\x7b\x4e\x06\x4c\xc6\x6f\x30\x6a\xe4\xd3\x90\xae\xef\xdd\x68\xda\xce\x27\xe3\x30\x13\xdd\x9a\xed\x74\x1b\x0a\x18\x46\x57\xde\x18\x45\x3f\x4f\xfe\xea\x47\xcf\x57\xa1\x77\x3f\xb3\x2c\x4a\x8c\x50\xba\xf5\xa3\x37\x34\x6b\xef\xd0\x56\xbf\x90\x45\x6f\x9a\xd1\x41\x5e\xe9\x84\x6e\xf7\x70\x86\x0a\x98\xee\xb3\x65\xc4\xff\x1f\xcc\x0c\x54\xa5\xde\xf0\x8f\xad\xa7\x66\xe0\xa5\xdf\x20\xbe\x08\xcf\x19\x70\x2e\xfc\x92\xc2\x2f\x29\xfc\x92\x0a\x8a\x40\x24\xa1\xb0\x4c\x0a\xcb\xa4\x88\x24\x14\x91\x84\xc2\x38\x29\xfb\x34\x64\xd1\x7b\x74\xad\x5e\x18\xbc\xad\x60\x12\xa5\x3f\x58\x12\x5e\xe1\xa6\x94\x6e\x63\x61\xa8\x14\x86\x4a\x11\x4f\x28\x3c\x15\xa5\x65\x17\x09\x85\xc2\x59\x29\x9c\x95\xc2\x59\x29\x9c\x95\x22\xa4\x50\x98\x2b\xf5\x78\xe2\xca\xd5\xc2\x5f\x29\xfc\x95\xc2\x5f\x29\xfc\x95\xc2\x5f\x29\xfc\x95\x7a\xec\xc9\x8d\xc9\x17\x2e\xcb\xcd\xd2\x8e\xf7\xda\x0c\x00\x62\xb4\x14\x46\x4b\xe9\x60\x96\x9e\xe6\x7d\x41\x1d\xb7\xe3\x71\x7c\x1d\x5d\x2b\xcf\xe0\xb8\x14\x8e\x4b\x19\x33\x2c\x4c\x97\xc2\x74\x29\xa8\x6d\x41\x11\x0a\xd3\xa5\x30\x5d\x0a\xee\x58\x58\x0b\x85\xb5\x50\x58\x0b\x85\xb5\x50\x58\x0b\x85\xb5\x50\x58\x0b\x65\xb1\x2a\xdc\x85\xc2\x5d\x28\xdc\x85\x0a\xa6\x62\x09\x2a\xdc\x85\xc2\x5d\x28\xdc\x85\x0a\xf9\x2d\xb4\x31\xdc\x85\xc2\x5d\x28\x65\x48\x61\x30\x94\xb7\xa5\xa0\x47\x15\xfa\x1c\x06\x43\xd9\xab\x57\x86\x01\x2d\x8c\x35\x94\x33\x30\xe6\xb6\xff\x0f\xf7\x88\xf5\x47\xbd\x08\x72\x2f\xa3\xfa\xf7\x41\x08\x64\x39\x8f\x94\x5e\xad\x28\x68\x78\xed\x21\x57\x12\x41\xf3\xc7\x33\xed\x2f\xbd\xa1\x32\x7a\xa9\xe4\x49\xb6\x81\x80\x9e\x0c\x81\xda\x30\xcd\x61\x9b\xf5\x86\x30\x76\x6c\xb0\x76\x46\x3e\x11\xf0\xee\x9d\x39\xc8\xcc\xe7\xfb\xed\xf1\xee\xc6\xe2\xc1\x5c\x41\x09\x5e\xfb\x11\x17\x19\x6f\xb9\x1b\x8b\x0c\xc0\xf6\xb3\x62\xdc\x7e\x0b\x07\xa8\x0c\x7b\x90\xc6\xc5\xe9\xfa\xe5\x10\x25\x80\x05\xf9\xe0\x25\x6c\x44\xfa\x9d\xc2\x2a\x18\x80\x02\x70\x21\x69\x73\xd6\xbc\x49\x31\xbc\x07\x63\x1a\x8f\xbf\x45\x7f\xc7\xc8\xc0\x20\x8c\xd0\x33\x23\x96\x77\x3b\xb5\xc9\xe7\xae\x8c\x13\xa6\xfb\x29\xe3\x19\xd6\x6e\x43\xb5\xcd\x59\xb3\x2a\x5c\x25\xef\xe7\xc4\x7b\xe8\x8c\x2e\x3e\x36\x43\xb6\x56\xcf\x80\xee\x7b\x0f\x57\xf0\xec\x1d\x9a\xf7\xaf\xd3\x1a\xa4\xff\xde\xe7\x7f\xa3\x19\xb2\x31\x64\x2b\x3d\xeb\x6c\x8b\x8d\xba\xd8\xfc\xf5\x52\xb0\x6f\xdb\x1a\x0e\xb2\xb5\x7f\x2c\x93\x47\x1f\x27\x1b\x5f\xa3\x1f\x59\x3d\x21\x79\x85\xf5\x52\x70\xb5\xc2\x7d\x29\xdc\x97\x6c\x7c\x4b\x29\x57\xb8\x2f\x45\x32\xe2\xee\xe9\x1c\x5d\xeb\x29\xf8\xed\x95\x6f\x85\x15\x51\xa4\x24\x0a\x3f\xa6\xfc\xa5\x85\x25\x53\x58\x32\x85\x25\x53\x58\x32\x65\x04\xac\x6c\x4c\x6f\x0d\x7c\x8f\x72\x0e\x89\x89\xc2\x9b\x29\xbc\x99\x82\x52\x14\xd1\x89\x52\x26\x97\xbf\xae\x70\x68\x8a\x00\x45\xc9\xab\xa5\x9b\x56\x43\xce\xc1\xa7\x29\x7c\x9a\xc2\xa7\xa9\x90\xc6\xf1\x69\x0a\x9f\xa6\x0c\xdf\x15\x56\x4d\x61\xd5\x14\x56\x4d\xd9\x76\x7b\x3f\xef\x71\x39\x6e\xc7\xe3\xf8\x3a\xba\x76\xb8\x56\xe6\xc1\x63\xa8\x92\x79\x92\xdb\x95\x96\x45\xbc\xa2\x70\x71\x2a\x7d\x7c\x5c\x9c\x82\xd6\x14\x2e\x4e\xe1\xe2\x14\xec\xb6\xbc\x99\x85\x91\x53\x19\x4f\x26\x67\x51\x78\x39\x55\xf2\x0f\x76\x4e\x61\xe7\x54\xc9\x3f\xa2\xb2\xc8\x5c\xdc\x3d\x88\xa3\x6b\xe5\x1f\xab\x7c\x61\xed\x14\xd6\x4e\xa5\x66\x80\x2d\x15\xf9\x8b\xb0\x43\xaa\xe4\x1f\x5b\xf0\xc2\xe3\x29\x3c\x9e\xf2\x3e\x97\xa2\xbe\xa1\x47\x61\x41\xf5\xce\xda\x6a\x48\xea\xdf\x58\xe8\x5d\x49\x0b\x53\xe7\xe6\xd8\x5b\xee\x29\xd2\x53\xb4\x76\x36\x70\xd0\x1a\x45\x7d\x62\x41\x3f\x68\xbb\x03\xcc\xbe\x9a\x25\x77\x15\x21\xd6\xf5\x6d\x83\xcc\x77\xbb\x30\x21\x8b\x8f\x77\x98\x91\x77\x0f\x23\xc0\x43\x14\x3f\xc6\x2e\xde\x6c\xb5\xd1\x71\x97\x61\xc0\xd1\x19\xa3\x8e\xf4\xf4\x7d\x5b\x78\x8b\x16\x99\xa3\xe2\x7c\x5c\x11\x23\x3a\x15\x6c\x7e\xe8\x89\xdf\x9f\x6e\x6b\x5c\xe3\x85\x34\xde\x89\xce\x7e\xf5\xfe\x09\xbc\xdc\x4a\x43\xe5\xc0\x43\xb7\xbe\x0c\xe0\xeb\x68\xb7\x81\x3e\x12\xd3\xdd\xe7\x6e\xa4\x52\x27\x8c\xdf\x10\x9f\x86\x8a\xb1\x6e\x72\x1f\xf7\xe3\x33\x0c\xae\x89\xb5\x52\xbf\x3d\x7a\xcd\x0b\x32\x74\xb3\xdc\xcd\x69\xb7\x96\x08\x22\x68\xc0\x13\xab\x46\xc7\x96\x1b\x71\x85\x19\xb9\x66\x85\x8b\x23\xe7\x1b\x4e\x59\x23\x23\xc6\x36\xbb\x22\x77\xca\x90\x50\xae\x45\x3e\x6e\x65\xdc\x63\xda\x42\x45\x00\xdc\x5b\xb4\x0c\x6b\x84\xde\xbf\x74\x1e\xd9\xe5\xdd\x97\xae\xb5\xbb\x60\x7e\x0b\x4a\xa7\x3d\x66\xb3\xdb\x6f\xa2\xc9\x9a\x45\x56\xa5\x30\xc0\x0a\x03\xac\x88\xab\x14\x1e\x18\xf2\xf6\x3d\x7a\xdf\xe4\x9f\x92\x7f\x30\x7b\x8a\xe8\x4a\xe1\xf7\x54\xc9\x3f\x6a\xaa\x74\xf3\x8b\xf4\x4a\xe1\xfa\xe8\x65\x77\xd9\xac\x17\xae\x0f\xc3\x81\x66\x38\xd0\x0c\x07\x9a\xe1\x40\x33\x1c\x68\x86\x03\xcd\x70\xa0\x19\x0e\x34\xc3\x81\x66\x38\xd0\x0c\x07\x9a\xe1\xc0\x3d\xba\x56\x2e\xc2\xf8\x29\x82\x1b\xbc\x9c\xef\xd1\xb5\x72\x11\x2e\x66\x19\x6d\x2e\x1b\x4d\x66\x0e\xcd\xb2\xe0\x1e\x5d\x2b\x17\x61\x05\x15\x56\x50\x61\x05\x15\x56\x50\x05\x3f\xc0\x0d\x2a\xdc\xa0\xc2\x0d\xe2\x9c\x72\x8f\xc7\xf1\x75\x74\xad\x5c\x84\x1b\x54\xb8\x41\x45\x8e\xa3\x30\x84\x0a\x37\x28\xb8\x02\xbf\x95\x7b\x74\x95\x2c\x84\x1b\xc4\x3e\xa3\x2b\xb6\x26\xb8\x41\xec\x33\x9a\x71\x46\x33\xce\x68\x43\x4f\xf7\xe8\xb7\xc8\x3c\x58\x41\x36\xd9\xf7\xe8\x2a\x99\x07\x2b\xa8\xb0\x82\x0a\x2b\xa8\xb0\x82\x4a\x55\x5c\x56\xe1\xbc\x39\x95\x16\x23\x6e\x50\x98\x2e\x05\xa9\x2d\x22\x1e\x77\xfb\x81\x49\x06\xc5\x5f\x56\xde\x7b\x27\x8f\x6a\x33\xe2\xd8\x1a\x51\x77\x39\xca\x98\xb3\x08\xd5\xf0\x68\x02\x11\xeb\xbe\xa5\xfb\x53\x5d\x90\x65\x9b\x44\x08\x31\xda\x8b\x3d\x4a\xe1\x50\x16\x7b\x8a\x7e\x4e\x24\x0b\x9c\x79\x73\x60\xcd\xdf\x16\x1f\x06\xac\x95\xb2\xc2\x05\x51\x33\x70\x22\xef\xb2\xf2\xf2\xa2\x2e\x6e\xc4\xfd\x6a\x48\x73\xa2\xed\x26\xa7\xbf\x8d\x05\xed\x0c\xf2\x7c\x46\x17\x9f\xe0\xdc\x5a\xcb\x3e\x01\x56\x57\x10\xf1\x7a\xa1\xf8\xc6\xe5\x0a\x43\xfd\xde\x24\x63\x56\xee\xea\xdd\x77\x94\x76\xe6\x4d\xe1\x5a\xbf\x9f\xc1\x34\x4c\xdc\xf5\x63\x56\x4d\x2d\x9f\x6d\x3c\xc1\xdd\xb8\x9f\xb6\x0a\x67\xda\xdf\xb8\x8c\xc1\xb6\x66\xf6\x26\x8c\xff\xc3\x3f\xf2\xcd\x31\x1e\x8e\xbf\x77\x5a\xe9\xd6\xdd\x23\x17\x67\xfd\x62\x4b\x52\x7c\xaf\x7b\x7b\x4f\xfa\x79\xe4\x84\x15\xd4\x36\x0d\x63\x0c\xec\x65\x14\x0b\x6f\x4f\x66\xfb\x71\xe9\x22\x6c\x1e\x5c\x2a\x23\x99\xda\x45\x32\x55\xed\x5b\xff\x17\x39\x8b\xbb\x52\x84\x4f\x70\xd7\xa0\x60\x33\x06\x51\x9b\x7c\x65\x69\x88\x46\x10\x38\x83\xd8\x79\x9a\x1a\x72\xf7\xe8\x7d\x93\x79\x88\xc0\x70\x3e\x6e\xce\xc7\xcd\xf9\xb8\x39\x1f\x77\xbe\x39\xe7\xe3\xe6\x7c\xdc\xf6\x95\xcd\xf9\xb8\x39\x1f\x77\xa4\x42\x38\x1f\x77\x25\x8b\x92\x85\xe1\x7c\xdc\x9c\x8f\x9b\xf3\x71\x73\x3e\x6e\xce\xc7\xcd\xf9\xb8\x39\x1f\x37\xe7\xe3\xe6\x7c\xdc\x9c\x8f\x9b\xf3\x71\x73\x3e\x6e\xce\xc7\xcd\xf9\xb8\x39\x1f\x37\xe7\xe3\xe6\x7c\xdc\x3c\x8f\x9b\xe7\x71\xf3\x3c\x6e\x9e\xc7\x9d\x37\x8d\xe7\x71\xf3\x3c\x6e\x9e\xc7\xcd\xf3\xb8\x79\x1e\x37\xcf\xe3\xe6\x79\xdc\x3c\x8f\x9b\xe7\x71\xf3\x3c\x6e\xe3\x3c\xcd\xf3\xb8\x79\x1e\x37\xcf\xe3\xe6\x79\xdc\x3c\x8f\x9b\xe7\x71\xf3\x3c\x6e\x9e\xc7\xcd\xed\xb8\xb9\x1d\x37\xb7\xe3\xe6\x49\x7c\x8f\xae\x8a\x55\x52\x60\x84\x93\xee\x87\x7f\xfb\x9e\xcb\xe7\x63\xc9\x54\xa6\x08\x30\x18\xd8\x18\x35\x03\xa3\x66\x5d\xd4\xac\x8b\x9a\x75\x51\xb3\x2e\x6a\xd6\x45\xcd\xba\xa8\x59\x17\x35\xd3\xa2\x66\x54\xd4\x8c\x8a\x9a\x51\x51\x33\x2a\xba\x47\x67\xba\x7b\x50\xd2\x5a\xe9\xc3\x64\x67\xe1\xee\x61\x21\x14\x16\x02\x5f\xb5\x9a\x44\x5f\xdf\x4a\x64\x9d\xc8\xd7\x58\x9d\xef\x1e\xa7\x22\xe1\xd2\x06\x27\xb1\x78\xa7\x95\xe5\xf5\x96\x56\x66\x1b\xea\x07\x55\xad\xbf\x9e\xb8\x0e\x6d\xcf\xbb\x13\xef\xde\xdb\x3e\xe9\x02\xa5\x85\x79\xbf\xff\x7c\xee\xff\xdc\xcd\x06\xd6\x72\xba\x10\xb0\xb7\x9b\x09\x5f\xf5\x89\xd1\xd4\x7a\xdd\x99\xf5\x66\xf8\xeb\xcb\x4a\x7d\xd7\xf4\x74\xb4\xc4\x11\xaf\xf7\x7a\x3b\x72\xd3\xcf\xf8\xab\x63\x57\xf2\x4d\x35\x95\x35\xf4\x3c\x07\xb3\xed\x83\xd2\x65\xd4\x2b\x63\xf2\x64\x6f\xb3\x0e\x62\xf1\x92\x63\xba\xcb\x94\x81\x2f\xe2\x0f\x60\xba\xf7\xd1\x15\x51\x41\x45\x16\xf2\xd5\x9c\x7e\xad\xf8\x73\x64\x14\x2e\xdd\xbc\x9b\x57\x0d\x26\x57\xc0\xa5\x05\x71\xac\x80\x03\x58\x8f\x84\xb9\x6e\xb6\x5c\xc6\x27\x55\x77\xea\x16\x2c\xcc\x1d\xd1\xec\xbb\xc6\xcd\xc8\x17\x8c\xf3\xb3\x68\xc1\xb9\xbf\xb5\xe5\x3b\x23\x1e\x6e\x48\xed\x66\xaa\xbb\xab\xba\x15\x51\x26\x67\x22\x9e\x83\x51\xd1\xcc\x08\x46\x24\x41\xb6\xef\xf6\x64\xa8\x5f\xbd\x17\x89\x3c\xc2\xdd\xd9\x51\x9a\x32\xaa\x27\xbd\x20\x5d\xb8\xc8\xdd\x14\xb1\x88\x52\x19\x16\xb6\x4a\xe9\x26\x95\x7d\x6e\xe1\xac\x54\xb2\x13\x99\x88\xda\x3f\xb9\x21\x67\x8a\x1d\xcc\x95\xc2\x56\x29\x6c\x95\x52\x43\x16\xb6\x4a\x61\xab\x14\x40\xb2\xb6\x15\x19\x43\xa5\x30\x54\x4a\x55\x59\x18\x2a\x85\xa1\x52\x5b\x0c\x6a\x6f\x17\x81\x88\xc2\x56\x29\x3c\x95\xc2\x53\x29\x60\x42\x19\x46\x2b\x9c\x95\xf2\xd4\x0a\x67\xa5\xb0\x19\x0a\x73\xa5\x40\x07\x05\xde\x2c\x62\x11\xb5\xc3\x97\x95\x39\x89\x45\x14\x99\x88\xc2\x6b\x29\xbc\x96\xc2\x6b\x29\x32\x11\xb5\x7f\xbc\x2b\xe7\x8b\x68\x50\x43\xe1\xb2\x14\x16\x4b\x61\xb1\x14\xe0\xb4\xc2\x02\xc7\x62\x29\x2c\x96\xc2\xa9\x2a\x8c\x84\x22\x0a\x51\x18\x09\x85\x8b\x50\xe4\x20\x0a\x23\xa1\xac\x26\x85\x91\x50\x3b\xcf\x45\xc6\xc3\x42\x28\xfc\x83\x32\xe0\x5f\x20\x9a\xc2\x42\x28\x2c\x84\xc2\x42\xa8\x88\x41\x19\x0c\x2c\x2c\x84\x3a\x2a\xa8\x13\x86\x96\xa7\x73\xb2\xfa\x7b\xab\x71\x11\xea\x44\x54\xca\x33\x3a\x9e\x11\x16\x42\x61\x21\x14\x16\x42\xa9\x31\x0a\x0b\xa1\x30\x0f\x2a\x83\xff\x99\x1e\x99\x81\x1c\x3f\xfb\x02\xa3\x91\xcb\x5b\x37\x22\x79\x5d\x00\xab\xc6\xb0\x77\xff\x81\x87\x8d\x2d\xb1\xdf\xf0\xd8\xc2\x1b\x03\x0e\xb3\xe7\x78\x6f\xa5\x71\x93\xb7\x81\xf4\xfb\x7c\x5b\x97\x2f\xb0\xd5\x64\x8d\xf1\xa6\x47\x1a\x06\xe7\x37\xf4\x36\xed\x80\xd2\x91\xfe\x48\xd0\x44\xf0\xe1\xc9\xa8\xe6\x7d\x8b\x4e\xdf\xef\xb3\xc1\x44\xba\xd3\xbd\xc8\x74\x63\xfc\x77\x66\x09\x7e\x02\x0b\x56\x73\xcc\xe3\xbb\x20\x67\xf8\xf1\xd6\x39\x72\xd4\x63\xa4\x71\x9d\x7c\xff\x99\x5c\x9a\x49\x0c\x2c\x16\xfb\x0e\x79\xe9\x0d\x0b\x70\xfc\xcc\x92\x08\xe6\xdf\x3b\xb3\x57\x06\x8d\xef\x3b\xf6\x32\xdd\x88\x04\xee\xb9\xb5\xd3\x24\x86\x59\xef\x50\x93\x00\x67\xf6\xd8\xd9\xa7\xc8\xd2\xb1\x45\xf8\xb1\xa5\x7d\xc2\xdc\xc6\xcf\xcd\x9f\x98\x15\xc9\x1e\x81\xfd\x87\x01\xe4\x7a\xb1\x28\x5e\xd3\x0e\x7d\xc2\x31\xba\x19\x1b\x27\xb5\x32\xea\xfe\x76\x6c\x11\x02\x1b\xee\x48\x19\x9c\xbb\xbe\xa8\x67\x30\xa8\x32\x15\xf9\xdc\x3d\x78\x9d\x0f\x17\x67\xeb\x17\xdd\x3b\x39\xcd\x6b\xdd\x3b\xd9\xaa\xdc\xf0\xf9\xc2\xee\xf5\x16\x65\x10\x75\xe6\xdf\xde\x28\x51\x8c\xa7\x52\x78\x2a\x85\xa7\x52\x47\x14\xe3\xa6\x14\xe1\x88\xc2\x50\xa9\x13\xe6\xba\xf8\xc5\x53\x29\x3c\x95\xc2\x53\x29\xdc\x94\x22\x28\x51\x18\x2a\x85\x95\x52\x61\x99\x67\x27\xe8\x8e\x95\x3d\xfe\xdd\xca\x3a\xfa\x3e\xe2\x14\xef\xa4\x92\xe1\x71\x4a\xf0\x50\xef\xd1\xf9\x99\xee\x90\x33\xb3\x5b\xc4\x23\x29\x14\x80\x42\x01\x28\x51\x50\x28\x00\x61\x89\x15\x0a\x40\x01\xff\x0b\xec\x5f\x6f\xc6\x81\x2b\xd2\x01\xfe\x5f\xdc\x81\xf4\x0b\xa4\x5f\x6f\x84\x05\xe4\x43\x00\xbe\x3a\xb6\x21\x14\xf7\xe8\xa7\x33\x77\xdb\x27\xb8\x6f\x20\xfa\x02\xce\x17\x70\xbe\xec\xc7\xeb\xf7\x5c\xdc\xb7\xc4\x0e\x70\x3e\xb5\x68\x45\x90\x04\x38\x5f\xc0\xf9\x7a\xc3\xbd\x73\x0f\x71\xdf\xeb\x4d\x8c\xb8\x9f\xe0\xfa\x02\xd7\x17\x88\xbe\x40\xf4\x05\xa2\x2f\x10\x7d\x81\xe8\x4d\xf4\xdd\xa3\x33\xdd\x67\x10\x3d\xa1\xbc\x7b\x74\x95\x7b\x0e\xa2\x2f\xe3\xff\x65\xfc\xbf\xc0\xf5\x05\xae\x2f\xe3\xff\xaf\x69\x22\xf5\xde\xad\x31\x60\x3a\x47\x85\xa0\x4b\xac\xda\x5f\x99\x88\xd0\xa1\x35\x71\x74\xcf\x21\xc4\xe7\x6d\xb7\x6b\x63\xf5\x5f\xd3\x4e\xea\xc5\x6f\x5b\x2b\x42\x76\x26\x25\x6e\x1d\x3b\x09\x3b\xcf\x9f\xb0\x92\x3b\xf6\xca\xc0\xdb\xce\x71\x8f\x5d\xf7\xa7\x77\x57\xf2\x86\x69\x3d\x22\xab\xf5\x44\xaa\x22\x23\xe4\x64\x25\x88\xed\xc8\x21\x2f\x89\x2d\xf2\x89\x77\x99\xbd\x55\xd3\xce\x31\x72\x5e\xf7\xb9\x4f\xeb\x38\x31\xf3\x9a\x33\xd6\x4b\x7e\x4b\xaa\x68\x7b\xa2\xb6\xbe\xaf\x5b\xb7\xdf\xad\x2a\x0a\x00\x59\xbc\x5b\xed\x17\x41\xe9\x5a\x11\x85\x78\x22\x62\x36\x49\x6f\xc9\x5d\xb5\xf5\x63\x33\xb3\xf1\xab\x81\x61\x7f\xba\x64\x76\x88\x33\x51\x89\xcf\xba\x75\xc0\xde\x11\xa6\xa6\x79\x0c\x35\xea\x82\xec\xb4\x59\xca\x03\x53\x63\x17\x75\x2b\x67\x7c\x47\x92\x5c\x31\x3f\xca\x3d\xb4\xfa\xcc\x99\x7b\x62\x76\x74\x85\x22\x24\x57\xac\xec\x0d\x4f\xbe\xbf\x6b\x47\xe4\x8f\xac\x14\x66\xe4\x22\xfd\x8d\x41\xcb\x68\xb7\xa7\x49\x89\xd7\x5e\x23\xb2\x45\x84\x32\xee\xae\xf9\x66\xbc\x99\xb7\x5d\x2c\xc3\xc8\x2a\x24\x2c\xc2\x11\x3f\x4c\x8d\x58\xc4\x8f\x2a\x85\xe8\x51\x99\xd0\x40\xf4\x28\x44\x8f\x22\x16\x51\x88\x1e\x85\xe8\xf1\xe3\x97\x5b\x65\x0a\xb9\xe3\x87\x2a\x7e\xbf\x49\x95\xcc\x6c\x44\x46\xd2\x67\x46\x02\x4e\xb4\x12\x76\x28\x80\xbc\x49\x98\x7b\xf4\x5b\xc4\x29\xb0\xbd\xac\x0b\xf5\x85\x2f\x2e\xee\x40\xee\x05\x72\xaf\xdf\x4c\x88\x88\x03\xb3\x17\x98\xbd\xc0\xec\x05\x66\x2f\x30\x7b\x01\xd8\x0b\x78\xae\xe7\x7f\x8f\xf9\x1f\x9f\xf0\x65\x17\x1c\x1c\x44\xb5\x7f\xf3\x55\xc3\xb8\x1b\xba\xdd\x10\xed\xfe\x31\xf8\x8b\xc0\x14\x29\x27\x58\x76\x3f\xd9\x47\x97\x33\xef\x1d\x68\x93\xed\x0d\xc5\xee\x54\xad\x10\x6a\x48\xca\x3d\x06\x31\x71\x66\xc4\x0a\xcc\xea\xc0\x16\x1b\xb6\xd8\xb0\xc5\x86\x2d\x36\x6c\xb1\x9f\x60\xc4\xd8\xea\xd0\x87\xd6\x8b\xe8\xbc\x81\xb0\xc5\x7e\x82\xe6\x6c\xd7\x6e\x57\x79\x9f\xe1\x89\x0d\x43\x6c\x18\xa2\xb9\xbe\x7b\x74\x0e\x4c\x0a\x6e\xd8\x70\xc3\x86\x1b\x36\xdc\xb0\x75\x53\xd7\xeb\x9c\xc8\xcd\x45\xa8\x0d\xc6\xcd\x16\xa1\x26\x89\xc2\x8e\x49\x10\x1c\xa7\xb1\xdb\xdf\xa0\x21\x3f\x81\xb5\xfb\xff\xaf\x69\x73\x32\x17\xdd\x26\x13\x48\xa0\xdc\x2d\xe9\x8d\x26\x4f\x6d\x07\x29\xd3\x47\x65\x64\x5c\x3b\x64\x10\x6b\xdf\xd1\x1b\x7f\x63\xec\x65\x4f\x74\xc2\xa9\xc5\xc8\x6f\x88\xc3\x5b\x84\xfb\x44\x6e\xe9\x32\x11\x5b\xa8\x66\x89\xe8\x5d\xaa\x86\x35\xbc\xf6\xf5\x6f\x6a\x24\x08\x42\x5b\xcb\x9a\x3d\xc1\x89\x7c\x6e\xf2\xe7\xb0\x7f\xc1\xa5\xde\xe7\xe6\x99\x8e\xdc\xab\xd9\x92\xa3\x4b\xf9\xfe\xea\xae\x1d\xf9\x41\x58\x0f\x77\xe2\xfe\xd1\xc1\xcc\x27\xe3\x3a\x57\xc4\xcd\xee\xd3\x9f\x2b\xa2\xac\x66\xef\x75\xa8\x76\x24\x92\xc8\x6e\x14\x33\xc7\x87\xa4\xea\xf3\xa6\x93\x7f\xf7\xad\x79\x6a\x65\x82\xe5\x55\x21\xa4\x23\xb4\x7e\x32\x8f\x1f\x54\x2b\x33\xd2\x2f\x6c\x71\x64\xce\xfc\x40\xff\x09\x1e\x6e\x2c\xe7\x9b\x27\x59\x5d\xd4\x8a\x64\x31\xc2\xe0\x42\x1a\x9a\x2a\x90\x97\xcc\xd1\x86\xae\xce\x5b\x4b\xcf\x08\x6c\xbe\xa3\x42\x21\x3c\x28\x84\xf4\x02\xf4\xf0\x55\xda\x0d\x65\xee\x27\xf8\xe0\xe7\x7f\x74\xa8\xa0\xcc\xfd\xfc\x76\xd6\xde\x31\x7d\x21\x38\x72\xc3\x91\x1b\x8e\xdc\x7a\xf5\x4d\x13\xa1\x75\x93\x1a\x5e\xdc\x30\xe2\x86\x11\x37\x3c\xa2\x61\xc4\x6d\x26\xa7\x61\xc4\x0d\x23\x6e\x18\x71\xc3\x88\x7b\x44\x2c\x51\xb4\x42\x84\x1b\x22\xdc\x70\xcf\x86\x02\xf7\xc8\x5c\x4d\xfb\x9c\xe9\xa7\xd3\x4f\xf5\xcc\x61\xbe\x9d\xc9\x3a\x48\x5c\x43\xe2\x1a\x12\xd7\x90\xb8\x86\xc4\x35\x0c\xae\x83\x4e\x42\xdf\x1a\xfa\xd6\x63\x47\x98\xce\x99\x62\x73\x64\x22\x48\x84\xc2\xdd\xda\xbe\xbb\xa1\x6f\x0d\x77\x6b\xbb\x8c\xd6\x67\x68\x28\x5b\x43\xd9\x1a\xca\x96\x77\xbe\xe1\x6b\x0d\x5f\x6b\xc8\x5a\xc3\xd4\x1a\x9a\xd6\xd0\xb4\x1e\xb9\xcf\x32\x1e\x34\xad\xa1\x69\x0d\x4d\x6b\x68\x5a\x27\x0a\xe0\x68\x0d\x47\x6b\x38\x5a\x57\x24\xaa\x4c\xd1\xc0\xce\x98\x2f\x37\xf3\xe5\x7b\x74\xbe\xe7\x5e\x91\xbe\x74\xe7\xa1\x63\x0d\x1d\x6b\xb8\x58\x43\xc4\x1a\x22\xd6\x10\xb1\x86\x88\xe1\x87\xdc\xa3\xf3\xdb\x7e\xc4\x5a\x89\xb6\x76\xec\xe8\x7b\x44\x7e\x27\xc4\xe1\xfb\x0d\x63\x01\x16\xa4\x63\x93\xbd\xa5\x34\x51\xb5\xcd\xfc\xdc\x9d\x6c\x91\x6a\xaf\x17\xef\xbf\xe1\x29\xaf\xd9\x83\x15\xe3\x21\xf8\xfb\x5e\x71\x0c\x67\xed\x61\x46\xf4\x31\xdb\x59\x78\x35\x0c\x9e\xca\x9e\xb7\x36\x81\xbb\x19\xa6\x7e\x54\x1b\x74\x3b\xf7\x4c\xae\x88\x04\x2b\xc3\x91\xca\xe4\xaa\x5d\x52\xa7\x4f\xab\x3f\xa3\xc7\xf5\xea\xb7\x9c\x07\x99\x2e\x3c\x10\xdd\x8f\x13\xb1\xe2\xa7\x43\x5e\x4e\x65\xae\x7f\xbb\x64\xce\x98\x7d\x98\x75\x27\xcd\x07\xa3\xbc\x55\x50\x56\x19\x6a\x1a\xba\xd9\xba\xb8\xef\x08\xbd\xf7\x09\x22\xaf\x07\x25\xfb\xc1\x56\x9a\x34\x56\x99\x39\x7f\x33\x17\x2a\xd3\x12\x60\xaf\x66\x01\xb9\xda\xbe\x46\x67\x3e\x93\xcc\x8d\xe7\xb0\x59\x2c\xbd\x2a\x49\xd2\x8b\xf7\xee\xbd\xc8\x8f\x9e\x91\x7e\x94\xdc\xb2\x32\x7f\xc2\x1c\x33\xab\xd5\xa9\x79\x6e\x0e\xf9\xc9\x0f\x06\xf9\x4a\xb5\x6f\x5e\x25\xc2\x6b\xc7\xbe\xd2\xf3\x32\x83\xfa\xc2\xfe\xe6\xdd\x31\xd5\x8e\xf1\xe5\x0c\xb5\x7c\xe9\x87\xe7\x1d\xb3\xda\xc2\xbf\x3a\x33\x72\x50\xd4\x86\xa2\x86\x79\xd5\x50\xd4\x86\xa2\x36\x14\xb5\xa1\xa8\x0d\x45\x6d\x28\x6a\x43\x51\x3b\xac\x00\x6a\x08\x8c\xc5\xef\xd1\x55\xf2\x6d\x04\x9a\xa0\x60\x0d\xff\x62\x3b\x7e\x8f\xce\x11\xf5\x30\x2f\x16\xe4\xcd\x82\xbc\x1b\xce\xd5\x70\xae\x86\x73\xfd\x9e\x85\x15\xa4\x61\x5b\x2d\x0f\x37\x0c\xab\x2b\x68\xa6\xe8\x86\x58\x35\xc4\xaa\x21\x56\x0d\xa5\x6a\x28\x55\xc3\xa7\x1a\x32\xd5\x30\xa9\x86\x49\x75\x47\xce\x5a\x5c\xc3\xa4\x1a\x26\xd5\x70\xa8\x86\x3d\x35\xbc\xa9\xe1\x4d\xad\x6f\xd9\xf0\xa6\xee\xf4\x10\x2a\x3a\x02\x8f\xa3\x9f\xba\x9f\xb0\xa1\x0e\x9e\x08\x15\x6a\xa8\x50\xff\x74\x07\xdc\x49\x13\xe3\xad\xb7\xdf\xba\xfa\xad\x9f\xdf\x1d\x79\x2b\x77\x4f\x27\xbf\xf5\xf0\x3b\xc2\x95\x7a\xf8\xad\x87\xdf\x7a\xf8\xad\x87\xdf\x7a\xf8\xad\x87\xdf\xba\xf7\xad\x6f\xdf\xfa\xf6\xad\x6f\xdf\xfa\xf6\x9d\x88\xe8\x0c\x0a\xc8\x9f\x3a\xf6\x50\x95\x7b\x74\x95\x8c\xaa\x63\xdf\x76\x1c\x8b\x50\xe7\x89\x7d\x58\x05\x6d\xb9\x77\xf5\x0d\x9b\x6b\xfe\xaa\x38\xd5\xfe\x2b\x9a\xcc\x0b\xe9\x27\x17\x79\xcc\x11\x49\x2e\x66\xac\x05\x9f\xdd\xde\x8a\x19\xd1\xf8\x01\xcd\x69\xa2\xbb\xe1\x90\x90\x11\x5b\xde\x7c\x53\x2e\xc5\xb2\x76\x3e\x41\x5e\xf4\x8a\x67\x84\xec\x18\xbf\x92\xb7\x2d\x46\x27\x15\xf2\xf8\x8e\x08\x79\xdd\x5a\x68\x62\x06\xce\xd8\xbf\x9a\x1e\x5f\x15\x8d\x18\x46\x45\xb5\x49\x01\xd3\xa6\xb9\xd9\xb8\x0e\x0d\xa0\x25\xb7\xbc\xd9\x2b\xcd\x9f\xe0\x9b\x6c\x16\xd3\x9f\xa0\x6f\x38\x4b\x62\x99\x61\x50\xcd\x52\x95\x85\x69\xf9\x66\xd7\x60\x47\x56\xe9\x7b\xc8\x75\xb7\x12\xbe\x9b\x5d\x02\xc5\x0b\x1a\xae\xaf\xc2\x8e\x2d\xb3\x7c\x45\x9a\x0f\xbb\xf2\xee\xa7\x54\x80\x3a\x5d\x66\xc3\xce\xc8\x10\x43\x79\x2e\x44\xf2\x23\x1c\x17\xa1\x7b\x56\x8f\x4b\xf7\xec\x65\x70\xf6\x62\x49\x4d\x73\xd4\xd3\x77\xde\xff\xe4\x22\x33\x41\x94\xd5\xf0\x7e\xf3\x36\x96\x61\xcf\xb5\x66\xa4\x23\x4d\xa9\x45\xe4\x5f\x97\xef\x3d\xbf\x69\x73\x18\xe2\xdd\x87\x52\xc3\xa9\xef\xcc\x48\x43\x7b\xbb\xac\xbf\x50\x9e\xb6\x3f\xed\x70\xa2\x60\x3a\x1d\xcc\x0b\x82\xd3\x1d\x29\x57\x6b\x2e\xd4\xa6\xa1\x36\x6d\xed\x68\x18\x4d\x67\x15\x83\xce\x34\x74\xa6\x4d\x98\xb7\xd9\xf2\x36\x4f\xde\x9e\x51\x9b\x1b\x6f\x73\xe3\xed\xef\x6d\x38\x4e\xdb\x5d\xb6\x9e\x64\xdb\xd5\xb6\xc9\xf0\x36\x13\xde\x33\x24\x7a\xb1\x09\x9d\x6c\x02\xec\xa8\xeb\xf7\x48\xb9\x40\x7c\x99\xeb\x6e\xfa\x26\x1d\x02\xb8\x89\xee\xfe\x75\x12\x44\x96\x59\xee\x9e\xd9\x1d\xf8\xdb\x89\xa8\xb7\x09\xed\x9e\xfe\x6a\x13\xda\xc6\x80\xba\x55\xcb\x6d\x98\xa6\x89\x6a\xb6\x79\xec\xfe\xb1\x3a\xfd\x8d\xd6\xe8\x5e\xd1\x59\x50\xc5\x99\xc7\x4e\x07\xb2\x57\xf6\x20\xfe\x6a\xa2\xb2\x6d\x1f\xdd\x2b\xf2\x74\x61\xb6\xf8\xdb\xcd\xdc\x36\x66\x69\x9b\xaa\xed\x15\x61\x5b\x59\xc8\x24\x6d\x9b\xa4\xc5\xac\xbb\x09\xc9\xa7\xb9\x1b\x66\x68\xdb\x0c\x6d\xc3\xb6\x7a\x45\x84\x5c\xce\x21\x6a\xdd\x70\xae\xe8\x9b\x34\x9c\x2b\x5c\xd6\x86\x6d\x35\x1e\x4b\xc3\xb6\xda\x8a\xdf\xf0\xac\x5e\x41\x69\x65\x6c\x71\x3a\xde\xec\xec\xde\x88\xec\xc5\x6c\x02\x72\xf1\xc4\xd0\x07\x0f\x10\x37\x63\x87\x7b\xf3\x65\x46\xf4\xe0\xdc\x7e\x8c\x09\xb0\xf5\x70\xf6\xbc\x9f\x6f\xac\xf0\xa3\x5d\xf5\xc0\x91\x23\x5a\x6b\x32\x73\xc9\xde\x9f\x3d\xe6\x1e\x1d\x53\x89\x74\xc6\x22\x16\xfa\xc0\xce\xf2\x14\x3e\x7b\x22\xe2\xe7\x27\x88\xbc\x59\x77\x7d\x63\x6a\x2f\x4d\x8a\x1c\x96\x5a\x0c\x53\xfa\x83\x16\xa5\x6e\x7f\x4c\xc1\x7d\x99\xa5\xfc\x8d\xda\x7c\xf4\x68\x4e\x04\x93\xb1\xe3\xd2\x8b\xde\xc1\x77\x74\x60\x44\x90\x8e\x74\xb3\x6c\x83\x42\xd6\x0e\x4e\x57\xa9\xc4\x4c\xaa\xdb\xb9\xaf\x37\xd3\xd7\xa6\xf4\x77\xfe\xfd\x11\x21\x5c\x54\x84\xa0\xde\x46\x49\x74\x0f\xc6\x47\x20\xfd\xa1\x28\xf1\x9a\x78\xdf\xa6\xc7\xd9\x57\x15\xa9\xcf\xda\x41\xea\x59\x52\xb2\x21\xee\x4c\x96\xf6\x9b\x6e\xc0\xa4\x6d\xe4\x5b\x61\xed\x0e\x15\xdd\xc0\x4e\x67\xfc\xdd\x5b\x7d\xd8\xfb\x0d\x5b\x29\x7a\x1f\x76\x4c\x61\x59\xef\xc8\x08\xd7\x5f\x61\xb7\x16\x7b\xc1\xde\xc6\x5f\x66\x9b\xbb\xa3\x8e\xc1\x1c\xa7\x17\x63\xdc\x95\x28\x5b\x89\x2c\xf9\x04\x7a\xd5\x6a\xbc\x86\x5e\x35\xf4\xaa\xe1\x56\x91\x60\x6d\x7b\x70\x15\x5d\xe3\x83\xdd\xa3\x33\xad\xf2\x10\xab\x36\x65\xdd\x70\xab\x96\x99\xdb\x94\x75\xdb\xd9\x35\x94\xaa\x61\x4c\xe9\xd4\x35\x41\xf2\x86\x34\x75\x44\x17\xe1\x4d\x0d\xdd\x6b\x5d\xb2\x86\x34\x35\x74\xa9\xa1\x4b\x0d\x5d\x6a\xe8\x52\xef\x3c\x71\xf1\xe5\x6f\x6f\x53\xd3\xbd\x33\x6e\x22\x9a\x20\x4d\x6d\x6a\xba\xe1\x4d\x6d\x5e\xba\xe1\x4d\x0d\x6f\x6a\x18\x53\xc3\x98\x1a\xc6\xd4\x3b\x23\x38\xde\x22\xb3\xaf\x0d\x63\x6a\xe8\x52\x7b\xdb\x1b\xc6\xd1\x30\x26\x42\xd6\xf7\x98\x1d\x04\x74\x46\x7e\x86\x31\x35\x29\xe9\x86\x34\xf5\xc9\x2e\x63\xa4\xe3\xe1\x1c\x19\xe9\x44\xc6\x5c\x46\x82\x1c\x35\xe4\xa8\x61\x46\x3f\x6b\x95\x93\x3e\x89\x8a\x14\x67\xa3\x21\x32\x0d\x05\xe8\x13\xd6\x99\x7c\x05\x0b\x68\x28\x40\xdb\x83\xb7\xde\x42\x67\xa7\x7f\x32\xb0\xe8\xde\x9e\xe0\xd1\xee\xed\x6f\x12\xdb\x5d\xd5\xf9\x6f\xb3\xa9\x6d\x1e\xb5\x45\x62\x7b\xa3\x26\x23\x98\xf3\xe9\xa2\x34\x95\x04\x9c\xcc\xd7\x2c\x46\x06\x37\xa3\x52\xb4\x33\x35\xba\xc3\x10\xfe\x62\x4a\x02\xa9\xf9\xa6\x1d\x56\xa4\xda\x49\xb2\xe3\xf6\x90\x6d\x7f\xa9\x24\x6c\x63\x40\xc7\x58\xcc\x52\x29\x15\x0d\x9a\xd6\x25\x60\xe2\x5f\x27\x36\x28\x51\xa9\x48\x56\x0c\x4b\x9c\xed\x7b\xf0\xc4\x09\x87\x9a\x11\x67\xc6\x69\x3c\xf6\xa4\x6f\xf9\xe6\xf2\xc3\x0c\xfb\x37\x22\xde\x32\x12\x43\xc3\x62\xc7\x53\xf3\x37\x9c\xfa\x40\xae\x4f\xb0\xbf\xa8\x5f\x61\x2b\x45\x35\x29\x7c\x39\xef\xc3\x9a\x74\xcd\xec\x68\xa2\x3b\xa0\x16\x7d\x65\x80\x67\xd2\xef\x8b\x6e\x1d\x25\x1a\xf9\xad\xa2\xd7\xd6\xfe\xa2\xf5\xa6\x1f\x6e\xd7\xa3\x43\x72\x82\x52\xa9\x2b\xb6\x7c\x7e\x92\x19\xf4\x6f\x69\x21\xd5\x3b\x72\xed\x13\x76\xe5\xab\x07\xbe\xb1\x31\xb1\x8f\xda\xfd\x37\x30\x37\x62\x30\xfd\xd3\x60\xa2\x49\x77\x3e\x7a\x6a\x58\xdc\x33\x36\xe2\x9f\x71\x2e\xcc\x87\x66\x7e\xf1\xa9\xbe\xe8\x86\x54\xc6\xc2\x9e\xcc\xe1\xab\x88\x28\x77\xa8\x88\x92\x01\xbe\x85\x6f\xa9\x67\xd5\x19\x06\x85\x22\xf5\x6f\xa8\x4b\x0c\x9a\x5b\xd6\x8d\xbf\x47\xef\xa1\x18\x84\x22\xb5\xe9\xe5\x36\xb7\xdc\xe6\x96\xa3\x10\xd4\xd0\xa5\x86\x2b\x75\x24\xee\x5f\x31\xe8\x7d\x6b\x53\xca\x9d\x8e\xb7\x3b\xd9\xd0\xa5\x86\x2e\x35\x74\xa9\xf5\xed\x49\x46\xdf\xe3\x71\xcc\xf9\x3e\x4d\x36\x33\x54\xda\x86\xf9\x5a\x57\xad\xa3\x59\x09\xd1\x6b\x18\x53\x87\x0d\x6b\x6c\xb4\xe1\x4d\x0d\x6f\x6a\xac\xad\x86\x3a\x35\xd4\xa9\x55\x92\x6d\x15\x6b\xf5\x64\xbb\x93\xad\xbe\x6d\x38\x54\x4c\x49\xda\xa8\x68\xc3\xa1\x1a\x02\xd5\xfa\x81\x6d\x3c\xb4\xe1\x50\x6d\x3c\xb4\x75\x05\x3b\x35\xc0\x1b\x2d\x12\xb1\xfc\x06\x59\x90\x27\xd5\xf9\x0d\x87\xea\x98\xa1\xc0\xa1\xfa\xcd\x5a\x29\xba\xe1\x50\x1d\x71\x5d\xeb\x45\xc7\x3c\x08\x1a\xd5\xd0\xa8\x86\x43\x35\xd4\xa9\xa1\x4e\x0d\x75\x6a\xa8\x53\xc3\x9b\x1a\xd2\xd4\x90\xa6\x86\x1a\x34\x26\x4c\x53\x4c\x68\xd8\x41\xeb\x4b\x34\x36\x7e\x7f\xe9\x97\xaa\xee\xa2\xe2\x07\x3b\x68\xa8\x41\x63\x9f\x76\xf4\x1a\x0c\x47\x76\xf2\x46\x14\x2a\x53\x51\xeb\x7b\x84\xc3\xf9\x3d\xba\x31\x6a\xd7\x63\x95\x67\x5a\x57\x3f\xf9\x77\xe3\xd4\xab\x99\x14\x53\x5a\xb1\xe6\x56\xf4\x22\xc3\x0c\x7c\x23\x3e\x5f\xb1\x50\xd9\xf8\xb4\x7a\x1a\xb1\x2b\x0d\xda\x1e\xbd\x89\xcc\x9a\x19\x68\x7e\x63\xf6\x3a\x68\x98\xda\x9b\xec\x15\x2b\x58\x3b\x3b\xc3\xd9\x78\xfb\x15\x16\xfa\x92\x8d\x3f\xbd\xa0\x15\x46\xba\x29\x83\x79\xdf\xb1\x7a\xc3\x70\xd3\x9b\x62\xe0\x58\xf9\xe6\x33\xf8\x17\xf3\xe8\x18\x23\x2e\x79\xe3\xa1\x1c\x54\x61\xda\x4c\xfb\x11\xfa\x83\x8c\x1d\x6b\xcb\xc6\x2b\x7d\x51\xdf\xbc\xbf\xac\x65\xf7\x2e\x4d\xec\xa0\xd8\x25\xbc\x3d\x63\xe9\x82\x1b\x06\xf5\xf6\xbb\x96\xac\xbb\x57\x30\x91\x27\x95\x67\xff\xf5\xa4\xcd\xc1\x98\xa0\x5a\xc5\x18\x94\x67\x9f\xe8\xc6\xbe\x11\x7b\x57\x11\x61\x14\x9b\xdc\xd9\xd8\x14\xaf\x4e\xd7\xa4\x39\xfb\x89\xee\xd7\xf4\xc1\x8b\xc5\xfd\x06\x77\xc8\x70\xaa\xca\x70\xfd\x46\x45\x13\x95\xbf\x8e\x2b\x6e\x8f\xea\x51\xed\x61\x0e\xe2\xd6\x66\x74\x24\x67\xde\x22\x8c\xc1\x91\xf7\x4a\x35\xf8\x53\x65\xf5\x53\xd1\x6d\xc8\xb8\x0d\x19\x37\x1c\xaa\x0d\x16\x37\xc6\x66\xc3\xa1\x1a\x0e\xd5\x99\x26\x33\x2a\xda\x46\x45\x1b\x32\xd5\x5f\x7e\x97\xe8\x86\x52\x35\x29\xf2\x0e\xef\x02\x56\xd5\xb0\xaa\xc6\x2c\x6d\x88\x55\x1b\x1b\x6d\x88\x55\x1b\x1b\x6d\x3b\xdc\xd6\x4f\x6b\x52\xe4\x9d\xc9\x3e\x52\xe4\x6d\x9c\xb4\x8d\x93\x36\x8c\xa0\xe1\x5c\x9d\x19\x1c\x38\x57\x7f\xbf\x8a\xd7\xf9\xf6\x14\x5f\xe4\xb2\x45\x34\x6c\xab\xa1\x24\x6d\x78\xb4\x61\x5b\xfd\x65\x0e\x48\x2c\x1b\x18\x6d\x03\xa3\x0d\xf3\xea\xef\xf7\xce\xf8\x04\x51\x1c\xcc\xcb\x4a\x37\x4d\xf0\x4d\xfc\x90\x69\x32\x74\xea\x2e\x4e\x33\xa1\xd3\x4c\xe8\xa4\x0f\x35\x4d\x86\x4e\x93\xa1\xd3\x4c\xe8\x84\x91\x4d\x73\xa0\x13\x73\x63\xc2\xc8\x26\x8c\x6c\xc2\xc8\xa6\xa9\xcf\x09\x29\x8b\xc8\xf9\x54\x63\x4c\x6b\xd9\x14\x83\x4c\x13\xee\xd1\xf9\xed\xfc\x20\x14\xed\x93\xa9\xcb\x99\xfd\xa4\x5f\x73\x8f\xbe\xc3\x74\xed\x74\x55\xfa\x90\x90\xeb\xdf\x04\xe5\xad\x13\x58\x82\xd6\x22\xb2\xbd\x31\x3a\x46\x2a\x7f\xac\xd7\x85\xaf\xf5\xad\xec\x44\x68\x13\x17\x83\xfb\xac\x53\xfd\xe5\x4d\x6e\xac\xb6\x1b\x8f\xa9\xfd\x62\x7c\x73\x32\xa0\xdc\xd8\x65\x33\xdd\x09\x71\x17\xa6\x59\x78\xce\x94\x07\xa3\x8e\x2d\x9f\xec\x11\xd6\xca\xcc\xfe\x77\xe1\xb9\xd9\xd9\x99\x0b\x78\xd8\x9d\x3c\xb1\xbe\x82\x38\xdb\x85\xbd\x7a\x41\xcb\x5a\xb9\xd3\xd5\xaf\xd8\x05\x7e\x66\x4b\xf1\x61\x32\x01\xa4\xfb\x81\xa3\x55\x8f\x6e\x4f\xc4\x12\xf6\xb0\x63\x1a\xef\x2b\xbe\x74\xc2\x0f\xf3\x1a\x1a\x85\xc4\x1e\x56\xf4\xe9\x6a\x26\x83\xe9\x12\xe8\xc4\xea\x97\x46\x03\xd1\xfe\xb7\xa2\xc3\x72\x32\x75\x6b\xb2\x32\xdc\x86\x0d\xd1\xa0\xdd\xdc\x8d\x4b\xdf\xb8\xf4\x3b\x96\x79\xb7\xc2\xaf\x36\x53\x16\x71\x8b\x28\x8e\xd1\xf4\xe9\xf5\x33\x37\x89\x49\xf4\x93\xee\x90\x3c\x09\x13\xc4\x4c\x78\xc7\xcc\x64\x84\x3c\x19\xd5\x6f\x08\x63\x2c\x33\x08\x03\x40\x61\xea\xfb\x61\xc1\x7a\x41\x7a\xd1\xef\xb8\xd9\xac\x4e\x4c\xc0\xd9\xfa\x93\x24\xf9\xcc\x6e\x8c\xb0\xeb\x67\x22\x82\x30\x3b\x64\x76\xe6\x59\x98\x17\x9e\xf0\xd9\xf9\xc4\xbe\x67\x79\x3f\x97\xf7\x8d\x74\x01\x64\x36\x73\x61\xd3\x5a\x33\xf5\xba\x27\x4c\x76\xea\xf0\x4f\x98\x6c\xd4\x27\xa7\xbf\x62\x9a\x01\x9c\x90\xd9\x09\x99\x9d\x90\xd9\x69\xba\x73\x62\x7c\xcd\x27\xfc\xd2\xd7\x99\x14\xca\x9e\x60\xfd\x6f\x8c\x84\x9c\xff\xe6\x7c\x9f\xff\xb9\x4a\x86\x37\xc5\x39\xa1\x6c\xd3\x14\xe7\x84\xb5\x4d\x8c\xd6\x69\x8a\x73\x62\x57\x4e\xe8\x1b\x99\xfa\x66\x59\x78\x8f\xfe\x67\xe4\x7f\x30\x42\x45\x3d\xdc\x6d\xc2\xdd\x26\xdc\x6d\x46\x0b\x0f\xd6\x36\x61\x6d\xc1\x73\x67\x10\x43\xf3\x98\x13\xee\x36\xcd\x63\x42\x39\xef\xd1\xe7\xb7\xcf\x97\x07\x60\x70\xd3\x24\xe6\x84\xc4\x4d\x48\x1c\x21\x84\x7b\x74\xbe\xa8\x87\xc4\x4d\xd3\x97\x73\x64\x25\x9a\x7e\x8b\xd8\x37\x77\x39\x23\xb0\x3f\xc2\x65\xf5\x04\x61\x76\x73\xc4\xf6\xce\x13\x84\xd9\x4d\xb1\x33\xad\x5f\x13\x72\x37\x21\x77\x13\x66\x37\xf5\x25\xa6\xb9\xb9\x09\xb9\x9b\xd0\xba\x09\xad\x9b\x70\xba\x19\x0b\xb6\xd8\x2e\x53\x48\x7c\xac\xe3\xd1\x7f\x2f\xfb\x08\x33\x20\xe5\xb9\x17\x76\x53\x7d\xf3\xd7\x41\xbd\x11\xa7\xcf\xbf\x6e\x25\x5c\xd9\xb9\x4f\x9c\xe1\x11\x93\x56\xa8\xd6\xea\xd8\x71\x3e\x99\x25\x7c\xa8\x82\x2e\x7c\x12\xeb\xfe\xfd\x1b\x57\x58\xaf\x66\xc0\x1f\x0a\x53\x0c\x55\xab\xf1\x4e\xbf\xa8\x6a\xea\x5d\xcf\x68\xc2\x9a\x3a\xa7\x82\x3a\x62\x67\xbf\x77\x45\xa5\xd7\x6f\x84\xcb\xeb\xf8\xed\xf4\x6d\xc4\x11\xe9\x88\x22\x66\x50\x99\xc0\xdd\x18\xcb\x2c\xa7\x2b\x36\xac\xa7\xa3\x0e\xfc\xa6\xb3\x81\xcd\xc8\x2a\x82\x2d\x42\xeb\x2d\xaf\x48\x74\x60\x15\xae\x60\x46\xee\xfc\xd7\x23\x46\xa5\x72\xce\x82\x22\x91\xc9\xb1\x33\x8a\x1e\xe5\x43\xa7\x8c\xd5\xe9\x7d\x93\xf5\x70\x82\x9e\x47\x85\xb9\x75\xbf\x31\x67\x74\x4e\xa2\x65\xd9\xe2\xfd\x1d\xb1\x08\x37\x53\x2f\x1e\xb7\x3e\x9b\x4e\x6c\x7d\x89\x29\x6a\xaa\x9b\x45\xc5\xce\x34\x8d\xf9\xf7\xb9\x36\x66\xce\xa2\x65\xd6\x26\xcb\xb0\xbe\x67\xf6\xcb\xd3\x64\x44\x6c\x43\xb7\xcc\x1c\x8d\xd1\x7b\x0e\xb6\x6d\x4d\xdf\x7c\x99\x4f\x79\x67\xde\xb1\x93\xf7\xca\x7b\x28\xde\x47\xac\x5d\x45\x3a\x84\x37\xb2\x22\x13\xce\x3b\xe1\xbc\xd3\x9e\x7d\xda\x9d\x4d\xeb\xc2\xc4\x6a\x98\x30\xdf\x09\xf3\x9d\xf0\x0b\xbb\xc5\x8e\x7d\xe1\x54\xaf\x4e\x98\x6f\xac\x43\x26\xb4\x77\x56\x26\x61\xad\xfe\xd0\xde\x09\xed\x9d\xa6\x26\x33\x4b\x42\x19\xff\x1e\xa7\xa3\xab\xe4\x01\xd5\x6c\x14\x2d\x27\xfc\x77\xc6\xa2\xc8\x44\xe4\x84\xfc\x4e\x13\x91\x13\xfe\x4b\x47\xfb\x1e\xfd\x76\xab\xbf\x29\xc8\x09\xbf\x9b\xf0\xbb\x09\xbf\x9b\xf0\xbb\x09\xbf\x9b\x56\xa2\x09\xb9\x9b\x90\xbb\x09\xb9\x73\x3f\xdb\xec\xcf\x3d\xba\x4a\x06\x30\xc5\x36\x21\x77\x33\x9c\x76\xc8\xdd\x84\xd9\x4d\x93\x6b\xd3\xcc\xda\x0c\x46\x03\xb9\x9b\x90\x3b\x5c\xdc\x0e\xd3\x7e\x9a\x56\x9b\xf0\xbb\xe9\x8d\x9d\xf0\xbb\x59\x41\x67\xe4\x01\xf8\x5d\xa6\x09\x26\x14\x0f\x1b\xf6\x1e\x5d\x25\x93\xe3\xe4\x4f\xb8\xde\x8c\x75\xaf\xd9\xb4\x69\x36\x6d\x56\xde\xba\x37\x3a\xc5\xae\xf2\x7c\x21\x7d\xd3\x7a\x3a\xad\xa7\x13\xea\x37\xa1\x7e\xf3\xa7\x73\x17\x7d\x83\x30\x48\xa1\xae\xd1\xb2\x34\x5f\xf9\x45\xa5\xf4\x09\x4f\x95\x29\x89\x59\xb0\x77\xc7\x7e\x6e\x15\x9f\x80\x38\x07\xd0\x07\x8c\xed\x69\x14\xba\x31\x06\x33\x2b\x8a\x9d\xfe\xa9\xd6\x1a\x37\x66\xe1\x6d\xc6\xc8\x69\x53\x6f\x78\xc3\xff\x7f\x08\xe7\x40\x49\x28\x1b\xd4\xd4\x93\xc4\xcc\xbf\xd9\x89\xd1\x1e\xcb\x4e\x36\xa9\xf5\xab\x2e\xfc\xae\xc8\xc0\xe8\x4e\xb0\xcc\xae\xd8\x1c\x9b\x68\x28\xab\x73\xed\x19\x3e\x1b\x79\x1b\x95\xcc\xa7\x26\xcc\xf4\x41\xb0\x8f\xf4\x79\x56\x9c\x30\xa8\x43\x76\x43\x8b\x08\xed\x44\xdb\xa4\x29\x60\x1c\xf8\x72\xcc\x6d\x0b\x77\x6b\xdb\xf3\x8e\xcf\x34\x13\xbd\xc2\x62\x35\xf5\x9a\x17\xcb\x55\x2b\x5c\x59\x82\x49\xa7\x7e\xfb\x88\x68\x50\x7e\x04\xba\x30\x8d\xf5\x9d\x56\x66\x6a\xee\xf9\x5f\x8c\x20\xd5\x93\xe9\x5e\xa6\xf6\xd8\x5f\x76\xa6\x14\xe5\xcc\x7e\xfe\x10\xc9\x9f\xb6\xef\xaf\x56\x37\xe9\x0f\x35\x08\xbf\x97\xfe\xf2\x17\xde\xbb\xe7\x92\x1a\x69\x8d\x74\xcf\x1e\x3b\xd0\x68\x83\xe8\x66\xc7\x76\x47\x1f\x78\xc2\x8b\xa7\x79\xc6\x69\x92\x71\x42\x8d\x27\xd4\x78\xc2\x8b\x27\x0c\x62\xa6\x47\x64\x86\x71\x7a\xee\xd3\xf4\xe2\xc4\x07\x98\x10\xe4\x69\x9d\x9a\x61\x24\xea\x1c\x4e\x98\xf2\x84\x29\x4f\x98\xf2\xf4\x97\x9a\xf2\xbb\x47\x57\xa9\x19\xcc\x30\x4e\x6b\xcd\xa4\x6c\x3e\xcd\xa6\x4d\x59\x97\xb9\xea\x3d\xfa\x5d\x32\x46\x87\x23\x2a\x6f\x58\xc5\xa6\x19\xc6\x69\x86\x71\x42\xa8\xe9\x5d\xf6\x84\x74\x4c\x38\xf5\x34\xc3\x18\x81\xb4\x19\xde\x02\x84\x7a\xfe\xf8\xae\x2a\x07\x38\x75\x1c\x3e\x26\xb4\x7a\x9a\x41\x9b\x3a\x63\xd3\x0c\xda\x84\x5c\x87\xd3\x35\x21\xd7\xff\xc4\xab\xac\x44\x1d\xb4\x57\x26\xb1\x0e\x4e\x98\xf5\x84\x59\x4f\x73\x67\x76\xc4\x3d\xcd\x9d\x4d\xf8\xf5\x84\x5f\x4f\xf8\xf5\x84\x5f\x4f\x73\x67\x13\x8a\xfd\xf3\x5f\xb1\x17\x98\x50\xec\x09\xc5\x9e\x90\xc7\x09\x79\x9c\x30\xc7\x69\xb2\x6c\x62\xa6\x4d\x93\x65\x13\x0a\x39\xcd\x94\x4d\x33\x65\x13\x22\x39\x61\x91\x13\x16\x39\x4d\x93\x71\x76\xb9\x47\x76\x6c\x9e\x3b\x8c\x75\x9a\x23\x9b\x33\x35\x89\x15\x81\xde\xc2\xb7\x98\x1f\xf9\xb6\x3b\xde\x03\x99\xad\xcb\x8e\x95\x16\xcd\xca\x1e\x64\xea\x36\xeb\x32\x1d\x7a\xc1\x58\xdf\x37\x72\xf5\x45\x37\xbc\xc9\xa7\xe9\xf9\x6f\xb5\xdf\x53\x66\x1c\xfa\x67\xf6\x7d\xd7\x74\x99\xf9\x81\xde\xbe\x7a\x29\x4b\x2f\x6b\x59\x73\xcd\xeb\xdd\x42\x86\xad\xd2\x8e\x5d\x1a\x56\x73\x6a\x86\x2f\xd3\xd6\x04\xae\x9c\x6f\x1a\x68\x6d\x15\xd1\xaf\x72\x98\xe1\x65\xd9\xe3\x90\x5b\xb3\x83\x78\x20\xe3\xe9\x51\xbf\xba\xd3\x9b\x6d\xd6\xfb\xa9\x91\x32\xfb\x69\x27\xf5\x66\x7e\x70\xa6\xff\xf9\x99\x05\x8b\x66\x68\x0c\xb6\x58\x07\xc2\x37\x57\xa6\x4d\x4d\xab\x7d\x89\xb2\x4c\xac\xab\x5d\xcd\xe0\xdf\x74\xb8\xc5\xbb\x79\x0a\x46\xc0\x9e\xf8\x3b\x7e\x66\x9d\xbc\x67\x76\xee\xbf\xea\xe8\x8d\x60\x61\x38\xc0\x87\x2c\xe2\x47\x70\xcb\xb4\xd7\x8a\x0f\x44\x54\x2c\x96\xa7\x10\xe1\x2e\x39\xe1\xc6\xd1\x7f\x4c\xbc\x5e\xf9\xfa\x4d\x96\x0f\x6f\x4f\xdf\x6d\xa7\xa6\x51\xe5\xc4\xa0\x5a\xd7\xa6\xa3\x85\x6f\x7e\xec\x89\xbe\x7e\x58\x9e\xf1\xa5\x99\x59\x15\xbc\x43\x72\x84\x3a\x69\x52\x4c\x9f\x04\x15\x27\xad\xf4\x09\xdb\x9e\x33\x0c\x69\xd9\x01\x2b\x68\x42\xbb\xe7\xfc\x55\xba\xae\x12\xe7\xb0\xed\x39\x93\x6d\xc5\xb9\x9e\xd1\x4c\x67\x0a\xc2\x3d\x29\x9d\x4f\x86\xa6\x93\xde\x79\xf4\x08\xa6\x5a\x79\x52\x22\x20\xc6\x78\x8f\xce\x17\xcf\x38\xd3\x13\x22\x3e\xd5\x9a\x93\x2e\xf5\x4c\xad\x06\x23\x9f\x66\xff\xa6\x09\xc9\xa9\x3e\x9e\xd1\x58\x81\x88\x4f\x36\xe4\x13\x4b\x72\x5a\x2d\xe6\x8c\x6c\xa3\x28\x65\x05\x3d\x4d\x54\x4e\xba\xe6\xd3\x7a\x36\xa1\x8c\x13\x76\x3e\x61\xe7\x33\x79\x1f\x82\x3e\xbd\x85\x13\xb2\x42\xf6\xad\xe7\x0a\xff\xdb\xfd\x84\x9d\x4f\xef\xd6\x34\x57\x33\x3d\x9d\xa8\x3e\xa5\xf3\x38\xa1\xe6\x13\xa6\x3b\x63\xc8\xba\x44\x4b\x38\xf7\xb0\xf3\x09\x3b\x9f\xb0\xf3\x49\xaf\x7a\xfe\xd4\xfd\xdd\x61\x2b\xd9\xfc\xe7\x1f\xe2\x7f\xe4\x4a\x68\xba\x99\xe1\x7b\x74\xad\xfb\x49\x25\x94\x81\xe5\x3d\x3a\xc7\x3d\x84\xac\x4f\x08\xfa\x0c\xc7\x65\x45\xc2\xce\x9d\x5c\xd1\x06\x8e\xeb\x94\x4c\x67\x9e\xea\xdc\x75\xae\x66\x18\x69\x2b\x1d\x52\x8c\xb7\xa2\x88\x3c\xc3\x76\x8a\x3b\xd3\x17\x45\x18\x6c\xb3\xd8\x30\x87\x61\x3f\xc4\x4f\xa6\x14\xa2\xcd\xef\xad\x8e\x22\x72\x74\xfd\x57\xa6\x5e\x4f\xe6\xbb\xfc\xae\xe8\x2c\x60\x04\x42\x08\xf6\x1b\x2c\x3c\x1e\x41\xf1\xb5\xd0\x07\x29\xb5\x8e\x37\x64\xbf\xe9\x84\xe2\xb4\x45\x7f\xbd\x9f\xb0\xfc\x29\x44\xdc\xe3\x9b\xcf\x2c\xbf\x1d\x2b\xe2\x0b\xdb\x3b\x7b\x57\x6a\x41\x70\xeb\x9b\x41\x58\x72\xe6\xd3\xc2\x30\xfb\x69\x58\x50\xb1\xf9\xb1\xba\x9b\xd2\xb9\x79\x8f\x1d\xfc\x26\xd3\x17\x77\x4f\xf2\x89\x79\x72\x85\x51\xc0\x21\xbc\x79\xe3\x7a\x13\x17\xf5\x64\xb1\x2d\xf9\x30\x84\xe7\xf4\xe9\xa8\xce\x8f\x96\x33\x2f\xaf\xa2\x14\xbb\xf4\xf4\x67\xbc\x23\xf4\xc1\xbf\x5b\x21\xdd\xea\x30\xd3\x98\xf7\x6f\x37\xff\xd9\x33\x66\xae\xe6\xed\x21\x67\xdb\xae\xe3\xe9\xe8\x97\x9d\xf8\x02\x0d\x8c\x01\xbb\xd0\x30\x5f\x71\xb8\xf5\xa6\x3f\xbd\xb3\x87\x52\xf5\xfe\x4d\x20\xab\x68\x71\x3a\xf7\x78\x62\xc5\x8a\xf9\xd4\xe6\x2e\x46\x74\x8b\x72\x0f\xbd\x51\x6f\xde\x25\x6f\xa3\xe8\xd3\x49\x9f\xe1\x49\x43\xd3\x27\x34\x7d\x52\x2e\x9f\xd0\xf4\x69\x22\xd4\x3c\x5e\xa7\x7e\x9d\x18\x3f\xf1\x58\x9b\x90\xf5\x09\x59\x8f\xd6\xdb\x84\xa9\x4f\x16\x8f\x13\x57\x83\xfe\x74\x4f\x7d\xc6\x09\x65\x9f\x70\xb5\x09\x59\x9f\xd9\x4f\x9a\x0e\x9d\x2a\xd4\x09\x6b\x9f\xfb\x67\x96\xec\x4c\xf1\x68\x22\x74\xa6\xb2\x34\x11\x3a\xe9\x97\x4f\x9d\xc4\x69\x22\x74\x9a\x08\x9d\x26\x42\x67\xdc\x4e\x20\xf4\x66\x05\xef\xd1\x99\xaa\x19\x08\xfd\x34\x17\x3a\xe1\xf4\x91\x99\x9d\x70\xfa\xe9\xed\x9a\x70\xfa\x09\xa7\x9f\x70\xfa\x09\xa7\x9f\x70\xfa\x49\xbc\x71\x42\xeb\xa7\x89\xdc\x9f\x04\x25\xb4\x7e\xc2\xe9\xe7\x8e\xe7\x98\xf8\x0d\x8e\x6b\x2e\x74\xc2\xe6\x21\xd0\xf7\xe8\x1c\xcf\xc2\xfc\xe7\x84\xd0\x4f\x08\xfd\x84\xd0\x87\xcf\x3a\xa1\xf2\x33\x6f\xa9\xb8\x9e\x18\xc0\xd3\x3c\x12\xf4\xf7\x1e\x3f\x0c\x75\xe7\xab\x4a\xcd\x82\x4e\x93\x96\xd3\x44\xe8\xa4\x4b\x4d\x5e\xf8\x1e\x5d\xe5\xe9\x84\x6d\x6c\x2e\x74\xc2\xf5\x7f\xe2\x99\xe6\xba\xe5\xe7\x12\xe3\xfd\x42\xce\x68\x72\xdf\xd5\xbd\xa9\x71\xa7\x37\x81\x9f\x4a\xb7\x82\x87\xd5\x3b\x63\xf3\x1f\xbe\xd7\x09\xc6\x19\x1d\x74\xfe\x24\xb4\x57\xee\x0e\xb3\xc2\xc6\x28\xde\x0e\x7b\xa6\xdb\xce\xf8\x3c\x66\xf3\xd1\x46\x84\xa6\x9b\x32\xed\xef\xf0\x66\x81\xdc\xbf\x76\xef\x8b\x5b\x0b\xf6\x52\xcd\x8f\xa6\x8c\x6a\x35\x2e\x28\x6f\x76\xfb\x3f\x87\x99\x2f\x9c\xfe\x78\xce\x58\xa3\xe3\xc2\x14\xcd\xb8\x11\x14\xa7\xec\xc4\xcc\xfe\xdd\x98\xfd\x38\x6e\xad\x54\xa8\xeb\xd5\xbd\x8d\xcf\xcf\x4b\xd8\x53\x5c\x3f\xe9\x58\xe9\xd7\xe8\x14\x1f\xd1\x3d\x7f\xd3\x4d\x9f\xc9\xcc\x70\x8c\x66\x54\xcc\x7c\x73\x0a\x11\xba\xbd\x5b\xc7\x53\xc6\xb8\x75\x4f\xbe\x5b\xf6\x9f\xdc\xf0\xbe\x70\x71\xec\x6a\x64\x3f\x95\x68\x7c\x93\x6e\xca\xa0\x90\x18\x0d\x0b\xf9\x16\xbb\x51\xaf\xf3\xcd\x1c\x08\x85\x8e\x2f\x13\xfe\xb4\x42\x78\xca\xd5\x3c\xf1\xcd\xd3\xf1\x19\x4d\x88\xf5\x35\x79\xc2\xc8\x7c\xfc\xac\xb2\xd9\x69\x63\x7b\x57\x45\xd8\x19\x9b\x07\xee\x65\x96\xec\xcb\x4e\x09\x0b\x61\x9e\xcc\x4b\x88\x6e\x73\xc5\x13\x3b\x64\x62\x84\x4c\x3d\xf4\x89\x11\x32\x71\x02\xa6\xb9\xd0\x89\x11\x32\x4d\x87\xe2\x3a\xdf\xa3\x4f\x53\xcf\xe0\x51\x4d\xfa\xe5\x99\xcd\x98\x90\xc8\x19\x1b\x7b\xbc\x90\x19\x83\x79\xd3\x32\xd3\x8c\x28\x8d\xc8\x7b\x74\xbe\xb8\x36\x23\x3a\xed\x21\x27\xa6\xc8\xc4\x14\x99\xf6\xcc\x61\x1b\x4c\x1d\xf9\xa9\x23\x3f\x55\xc3\x13\x83\x21\xca\x50\x13\xf6\x3f\x61\xff\x13\xf6\x3f\x61\xff\x11\x77\x9d\x18\x00\x13\x03\x60\x62\x00\x4c\x18\xe1\x84\xac\x4c\x0c\x80\x49\xb9\x7c\x9a\x2f\x9d\x64\x75\x27\x84\x43\x04\x35\xa1\xda\x7b\x64\x46\x2b\xf6\xcd\x9a\x4e\xf3\x39\x93\x66\x39\xbf\xc4\xa6\xa3\xd4\xcc\xf2\x7b\xe2\x0a\x4c\x5c\x81\x89\x2b\xc0\x4a\xbf\x67\xcc\xf2\xcd\xa0\x4e\x5c\x81\x89\x2b\x30\xa1\xc5\x33\xf3\x7e\x18\x03\x13\x63\x60\x62\x0c\x40\x73\xef\xd1\xf9\x95\xf3\x7d\x37\xcf\xf1\x8d\x51\xae\x1d\x29\x26\xc1\x54\x15\x4f\x15\xc2\xc4\x1b\x98\x70\xeb\x69\x5a\x75\x62\x0f\x4c\xbc\x81\x89\x37\x30\xc3\x8b\xc5\x1b\x98\xf6\x1e\x33\xe2\xd2\xc5\x6d\x12\xc3\x0f\x2a\x50\xc9\x63\x3d\xe2\xcb\x84\x8d\x67\x77\xf1\x3d\x5c\x31\xbf\x61\xa7\x44\x97\x0a\xaf\xe5\xbb\x7b\xf2\xbb\x5f\x22\x24\xce\x97\x20\x53\x97\x8f\x95\x9d\x6a\x7b\x44\x9b\xdf\x31\x08\xf6\x46\x96\xf9\x3e\x8b\x57\x4f\x61\x45\xc9\x51\x9d\xfc\xec\xec\x03\x29\xee\xc9\x12\x2f\x96\xd5\x3e\x77\x05\xdf\xe2\xc8\x0c\x76\x3d\xd0\xdf\xef\xd6\xf0\x77\x1d\x8f\xd9\xb6\xfe\xb2\x7a\x03\x8a\xb3\x70\x49\xdf\x61\xaf\x82\x91\xf3\x0c\xfe\x15\x51\x9f\xcc\x4e\xc6\xea\xb0\x83\x0d\xe0\x14\xb6\x7d\xfe\x8b\x39\x1d\xf3\x75\x7b\xef\xc2\xe0\x2f\xdd\xdb\x7e\x49\x9a\x7f\xf6\x75\xdf\xb4\x07\x99\xbf\x49\x9e\x4d\x1f\x84\xe2\xc0\x49\xf7\x99\xa7\x44\x90\x6c\xb8\x78\x18\xc0\x84\xd9\xe3\xf5\xf4\xea\x09\x7e\x71\x63\xb3\x0e\xc6\xca\xf7\xa5\xc5\xf3\x44\xcd\x33\x3e\x06\x30\x9b\xf5\xc6\x09\x67\xc4\x9d\x2f\x7a\x43\xa9\x88\x74\xdf\xf0\x08\x2b\xe8\xe0\xcb\xb9\x0b\xe3\xf9\xfb\x71\x4d\x62\xb1\xef\xde\x5a\x4d\x9e\x54\x65\x76\xa7\xfa\xc2\x2f\xc7\xb3\xd7\x5c\x1c\xf6\xed\xdd\x8b\xc2\x03\x44\x50\x66\xc9\xcc\x3c\x4f\x8c\x93\x89\x71\x32\x31\x4e\x26\xc6\xc9\xc4\x38\x99\x18\x27\x13\xe3\x64\xa6\x7b\x6e\xfe\x39\x1e\x3e\x13\xef\x64\xe2\x9d\xcc\xec\xda\x30\x4e\x26\xc6\xc9\xc4\x38\xa1\xb1\x72\x8f\xae\x92\x25\x30\x4e\x26\xae\xc9\xc4\x35\x99\x71\x1c\x35\x37\x38\xa1\x83\xd3\xe4\xf3\xb4\x7a\x4e\xbc\x93\x19\x29\x7b\x5c\xcf\x69\x5d\x9b\xa6\x9d\x27\xde\xc9\x8c\x02\x0b\xde\xc9\x34\xb9\x3a\xb1\x4f\xa6\x8e\xdb\x34\xbf\x3a\x31\x51\x98\x4f\xdf\xa3\x4a\x55\x36\xc0\x44\x99\x26\x5a\xe1\x7f\xf7\xe8\x7c\x39\x01\x9f\x60\x7e\x71\x70\x12\xf5\xdf\xcf\x50\xdf\xb5\x62\xfc\x4b\x1f\x21\x6f\xa0\xe8\x36\xd7\x4a\x8b\xea\x1e\x9d\x29\x6f\x63\x12\x4c\x4c\x02\x2b\xef\x3d\xfa\xa9\x2c\xfd\xfd\x6c\x9e\x7d\x82\xe7\x82\x2b\x30\xb1\x04\x26\x96\xc0\xc4\x12\x98\x58\x02\x13\x3f\x60\xe2\x07\x4c\xfc\x80\x69\x0e\x76\x7e\x89\x65\x4f\x21\x42\xe2\x58\x02\x13\x4b\x60\xea\xb9\x4c\x95\xf3\x34\x13\x3b\xcd\xc4\x4e\x8c\x81\x69\x0e\x76\x62\x0c\x4c\xf3\x06\xf3\x4b\x77\x58\xae\xc6\xbf\xc7\x72\x2e\xcc\xf5\xda\x51\x09\xf9\x62\x22\x10\xa7\xa0\x1b\x59\x4b\x37\x79\xc7\xa5\x0d\x57\xe6\x64\x77\xbc\xc3\x95\xff\x22\x33\x0e\x37\x32\x3b\xa1\xaa\x3c\x76\x40\x3b\x8a\xd2\xfe\xc6\xcc\x1b\x3c\xe1\xec\x12\x24\x1f\xe9\x8b\x65\x0a\xdd\xcc\xc0\xa1\x8b\x77\x3c\xeb\xc5\xbf\x85\xcf\x70\xc7\x5b\xa9\xed\xdc\xdf\xb1\x62\x2b\x4e\x4b\x34\x5a\x9c\x32\x67\x2c\xd5\xe1\xeb\x4f\xf6\xfe\xe6\x27\xf7\x6f\x8a\xef\x37\xa7\x4a\x0e\x9d\x53\xdc\x8d\x9d\xe2\x86\x5d\x35\x6f\x2e\x4d\x5f\xe2\x84\xbb\x80\x11\x75\xd4\x69\x50\x99\xda\x9c\x4e\xa7\xc9\xa5\x8a\x61\x39\xce\x6e\x8c\xe1\x9b\x33\x1e\xaf\xd4\x3a\x18\xcc\xef\xfa\xe5\x6a\x55\xdf\xcf\x19\x2c\x5a\x2a\xf1\xea\x94\x8d\x17\xa3\xf1\xf8\xdc\xfe\x9e\x35\x3d\x26\xb8\xb5\x8c\xb1\x46\x1c\x80\xd3\x7f\xfc\x32\x37\x8e\x35\x65\x56\xd3\x8e\x6f\x85\xf1\xf9\xa5\xd7\xc6\x13\x26\x0c\xcb\x78\x17\x43\x77\x52\x7d\xb1\x72\xe8\x22\xc9\xfe\xf3\xd7\x82\x1a\x96\xaa\x75\x9b\x7c\x20\xd7\x5f\x71\x32\x54\x7b\xd4\x7e\x7e\xd3\xf8\x79\x97\x7c\x4f\x91\xab\xaa\x9c\xb8\x26\xd3\x7c\xf5\xb4\x9a\x4c\x8c\x93\x49\xa2\x7c\xe2\x9d\x70\x0b\x59\xc4\xc9\x17\xf2\xc9\x7a\xe2\x9b\xa1\x8c\x0d\x9d\x1b\x05\x65\xa1\xa0\xac\x27\x22\x66\x0a\xb1\x7f\xa2\x22\xce\x19\xf9\xe9\x7d\x41\x90\x4f\xd6\x93\x11\x12\x96\x8a\x4f\xac\x71\x34\x09\x91\x4f\x56\x6c\xcf\x42\xa1\xd4\x2a\x5f\x31\x4b\x46\x38\x59\x08\x27\x2b\x54\x04\x37\x75\xd9\x3e\xae\x27\xc6\x42\xd3\x4f\xa7\xdf\xc5\xc2\x16\x49\x60\x21\x09\x2c\x24\x81\x85\x24\xb0\x90\x04\x16\x62\xc0\x42\x09\xc8\x98\xcf\x42\x09\x58\xc8\x00\xcb\x80\xf6\x8a\xcd\x2a\xea\xf8\x42\x06\x58\xc8\x00\x0b\x19\x60\x69\xf7\xad\x2c\x2c\x4f\xa8\x1a\xc7\xf9\xaf\xdf\xae\x31\x80\x12\xb0\x50\x02\xd6\x13\x39\x02\xbe\x04\x19\xd9\x46\x06\x58\x4f\xa8\x6e\x9f\x33\x3f\x67\x7e\xce\x64\x80\xe4\x85\x0a\x40\x19\x82\x59\x96\xfd\x45\xc0\x39\xd2\xb8\x8b\x74\xf3\xd2\xf6\xa4\xdf\x7f\x8f\x69\x4b\x38\x7f\x38\xdf\x13\x89\x34\x28\x4a\xc0\x42\x09\x58\x46\x71\x97\x51\xdc\x85\x1e\xb0\x32\xe8\x8d\x12\xb0\x79\x5c\x68\x57\xf6\x93\x6d\xfd\xcc\x18\x75\x60\x35\x9e\xfe\x06\x67\x22\x49\xf1\x66\x43\x8c\x86\xc7\x74\xb9\xbe\x48\x25\x1b\x6e\xda\xf9\x4b\x19\xe2\x66\xdc\xe3\x5b\x1d\xbb\x2c\x70\xb0\x01\x22\xd4\xeb\xa5\x34\x5e\x4a\x63\xd6\x50\xbd\x95\x54\xac\x46\x6b\xd5\xd9\xc6\xaf\x1c\x41\xde\x24\xef\x38\x4b\x74\xa3\xf9\x7d\x81\xfc\x58\x92\x77\x8a\x41\xc0\xca\xeb\x19\xbd\x19\xeb\x38\x31\xed\xf3\xb7\x1f\x72\x5e\xc4\x79\x62\xbf\xf4\x4e\x70\xd2\xfb\xa5\x01\x6b\xa0\x69\xc4\x14\xd9\x50\x40\x9a\x6d\x88\x3a\x7c\x6f\x02\xb8\x2c\xb0\xc8\x87\x4c\xf2\x2a\xac\xde\x37\xfe\x18\x8c\x3c\xa5\xb1\x65\xac\xe6\x49\xdb\x0f\x64\xff\x6a\xc0\x44\x40\x9e\xfc\x5a\x7d\xda\x66\xc3\xb0\xd2\x83\x70\xfe\x6a\xa8\xb0\x3b\xaa\x19\x0b\x40\xae\x14\xfd\x1b\x95\xdd\x6c\xba\x8c\xd3\x2a\xe2\x48\xb5\xdc\xfb\x13\x43\x6b\x03\xb0\x44\xcc\x48\xe8\x3c\x19\x53\x8d\xac\xf7\x46\xd8\x46\x04\x7d\xb5\x79\x4e\x46\x57\x40\xcc\x8f\x71\xb9\xc7\xe6\x75\x13\x81\x7c\x35\x50\x77\x48\x6b\x23\xed\x1c\xa4\x2c\x74\xdf\x85\x46\xb2\x62\x4e\x8f\x46\xb2\xd0\x48\x96\x52\x71\xa1\x91\x44\x72\x64\xa1\x46\x2c\x64\x92\x05\x50\x58\xca\xb1\x35\x22\xce\x6c\x80\xc5\x82\xb0\x90\x49\x56\x84\xdf\x95\x8a\x0b\x99\x64\x69\x69\x2f\x94\x92\xa5\x2d\x1f\x03\x57\xe0\xda\x3d\xba\x56\xd4\x23\x96\x2c\xc4\x92\x85\x58\xb2\xe2\x47\x84\x58\xb2\x50\x35\x16\x62\xc9\x22\xcb\x1c\x92\xc3\x32\x18\xbe\x22\x0a\x2d\xe5\x67\x1c\x66\xa1\x51\x2d\x6d\x45\x44\xd0\x7b\x74\xbe\xcc\xa0\xd5\xb7\x50\x4d\x16\xda\x00\x89\xcb\x5e\x86\xe6\xd6\x48\xcb\xf0\x75\x95\xfc\x80\x48\xb0\x10\x09\x56\x7c\x4b\x10\x09\x16\x22\xc1\x42\x24\x08\xf9\x7f\x85\xde\x1f\x81\x02\x74\x82\x85\x4e\xe0\x99\x76\x06\x21\x17\x22\x41\x28\xaf\x4b\x1b\x6f\x19\x18\x5f\x69\x42\x58\x5e\x56\xc5\x1a\x2d\x62\xe0\xde\xdb\x08\x51\x1a\x1b\x5f\x28\x04\x0b\x85\x60\xa1\x10\xb0\x39\xb8\x47\xd7\xca\x1e\x21\xc7\xa2\x13\x2c\x74\x82\x45\x72\x79\xc5\x2e\xd7\x50\x39\xd9\xdb\x7b\x74\xad\x0c\x8f\x60\xb0\x10\x0c\x96\xa6\xef\x32\x60\xbe\xd0\x0c\x96\xd2\x7b\x6d\xd0\xaa\x16\xe0\x8e\xa7\x47\xa7\x78\x3f\x11\x5a\x2f\x62\xa4\x91\x0e\x36\x36\x32\xf3\x17\x45\x5e\x29\x6d\xd4\xf7\x2e\xbc\x3f\x00\x5a\x3b\xe1\xbe\x57\x87\x17\xcd\x13\x19\x2e\xd9\xfe\x7b\x62\xd7\xfd\x4d\x60\x37\xa8\xfd\x1e\x77\x47\xe8\x83\x08\xb9\x41\xce\xf7\x79\x59\xa1\x33\x93\xb3\x91\x62\x26\x5d\xcb\x60\xda\x1b\x8b\x3e\x70\xca\x13\xb2\x84\x68\xfa\xb4\x52\x22\x8b\xb4\x23\x79\x5a\xa1\xcc\x69\x84\x5b\x3d\x1f\x9e\x5a\xe7\xc8\x24\x80\xfe\x94\x27\xa0\x98\xda\xe0\xb3\x19\xca\x22\x98\xec\x47\x9b\x44\x6f\x7b\xc8\x93\x3e\x11\x0d\x20\xb0\x93\x7b\xb8\x45\xdc\x51\x2e\x91\xe3\xab\x27\x30\x53\x28\xbb\x9e\xd4\x46\xd3\x35\x12\xdb\x29\x15\x9f\x44\xa5\x91\x4c\x5b\xde\x3a\x06\x5a\x67\xc4\xc4\x7e\xe6\xa3\xa8\x7a\xa0\xe1\x65\x13\xbf\x4e\x04\x54\x63\x1b\x1f\xb3\xd5\x48\xb7\x91\x69\xd2\xcc\xab\x8c\x2e\xae\x0c\xfb\x4c\x0d\xb9\xbb\x49\x3a\xc0\x84\x57\x09\xf9\xfe\xfe\x76\x23\x0f\x20\x8e\x97\xac\xd9\x3b\x62\x72\xf1\x45\x8a\x9f\xe0\x73\x48\xcb\x33\xf6\x9f\xde\xb4\xce\xd1\xfb\x26\x9f\xfc\x04\x96\x65\x15\x4f\x7f\x21\x00\x2c\x03\xe6\xb1\x80\x35\x06\x7b\x8f\xae\x8d\xa9\x84\xdc\x52\x79\xa3\xe4\x16\x03\xe6\x46\x5a\xee\xd1\xb5\x72\x0b\xb2\xca\x42\x56\x59\x86\xfb\x8c\xb8\xde\xa3\x6b\xdd\x13\x23\xe7\x00\xd6\x7b\x74\xed\x8e\xb4\x88\x6b\xe5\x96\x8a\xdc\xbd\x37\xdc\xc6\x7d\xa1\x52\x2c\xb4\x93\x15\xca\x19\xc2\x09\xd1\xcb\x5e\xa8\x26\x46\x86\xef\xd1\x39\x31\x4a\x8c\x4c\xa5\xd8\x07\x09\x2e\x43\xe5\x04\xb4\xef\x71\x39\x6e\xc7\x9c\x73\x3f\xed\xb7\x66\x89\x7a\xf4\x80\xc8\x55\x2d\xc4\x80\x85\x18\x10\x91\x4c\x63\xd7\x77\x75\xcb\x1a\x37\x1c\x5d\x25\xde\xd1\x03\x7e\x54\x34\xa3\xe8\x0b\x49\x20\x06\x96\x0b\x3d\xc0\x50\x40\x87\xd6\xb2\xd0\x03\x16\x7a\xc0\x42\x0c\x58\x88\x01\x0b\x31\x60\x81\x2b\x33\x02\xb9\x3c\x65\xb4\xba\x26\xd1\x70\x8f\xae\xf2\xbc\x62\x2a\x89\x24\xb0\x54\x20\x0b\x49\x60\x21\x09\x2c\x40\xd3\x42\x12\x58\x48\x02\x0b\x49\x60\x89\xee\x85\x24\xb0\x9a\x57\x55\x06\xdb\x03\xad\x90\x0e\x26\x1b\x32\x9f\x65\x1c\x3b\x42\xf4\x19\x4a\xd5\x84\x6e\xad\xa6\x7e\x7f\x63\x77\x01\x04\x80\x5a\x71\x6d\x22\xba\x1b\xef\xb8\xf9\x13\x25\x06\x76\xdb\x9c\xc5\x16\xfd\x64\x13\x36\x32\x3a\x1d\xb0\x08\x9c\xc5\x2a\xbb\x52\x4d\xb1\x1b\x08\x5d\x41\xcb\x87\xf5\xe9\xdd\x72\x11\x5b\x48\x83\xd6\x28\x22\x83\xde\x41\xc0\xdc\x78\x51\xa1\x9f\xdd\xad\x0c\x00\x87\x24\xe9\x8a\xc0\xce\x1b\x53\x18\xf9\xa1\x03\x08\x3f\x7f\xf5\x65\x38\x14\xe9\xf1\x95\xed\x0f\x11\x9b\xdd\xa1\xfa\xaf\xb8\xf3\xa1\x0e\x3e\xa1\x0e\xda\x26\x1a\x96\x04\xf2\x84\xf6\xb6\x5f\x32\x5f\x1a\xb4\x4f\xc6\x4b\xe3\xc2\x17\x3a\xba\xa6\x6f\x9a\x1c\x0d\x92\x7a\x5a\x0d\x06\x10\xde\x5f\x6d\x82\x66\x8f\xfc\x33\x50\x82\x59\x6f\x64\xd8\xbc\x43\x7a\x04\x7c\x11\x09\xdc\x2d\x27\x23\xcf\xc4\xa2\x15\xec\xde\x33\x43\x58\x91\x91\x34\x7c\x81\xc6\x50\x6a\xa1\x06\x65\x9f\x18\xa9\xaa\x69\x77\xdc\xb7\xbe\x34\xc9\x88\x87\xfc\xb6\x9e\x72\x94\x96\xfc\x47\xbc\xa2\x0c\x1d\x2c\x20\x73\x24\x9a\x17\x62\xc9\xf2\xfe\x80\xdf\xef\xd1\xfb\x26\xc6\x09\x23\xac\xce\xf9\x76\x16\x08\x18\xcb\x66\x7a\x21\x99\x2c\x24\x13\x22\x69\xf7\xe8\x5a\xb5\x04\xda\x86\x6d\x7a\x47\x3c\x64\x65\x1d\x44\x32\x59\x48\x26\xcc\x89\x3a\x6e\x63\x8b\x54\xc2\x32\x1a\xbf\x48\x19\x2c\x82\x63\xa4\x0c\xee\xd1\xb5\x32\x09\x22\xca\x42\x41\x59\x28\x28\x0b\x05\x65\x11\x37\x5e\x60\x87\x85\x88\xb2\x10\x51\x56\x27\xab\xd8\xe8\x23\xa2\x04\xc8\x5d\xe8\x28\x0b\x1d\x05\x6c\x78\x8f\xee\x8f\x1a\x03\x1d\x65\xc5\x70\x44\xbb\x6e\x19\x9c\x5f\xc4\x8d\x03\xe4\x92\xfc\xbd\x47\xd7\xca\x39\x86\xe8\x57\x5c\x1c\x3d\xa9\x05\x04\xe6\x3f\xd9\x21\xc0\x47\x8a\x84\x14\xff\x3d\xba\x56\xce\xd1\x66\x58\xc6\xed\x17\x72\xd7\x32\x6e\xbf\xf2\x3e\x90\x93\x5d\xe2\x71\x19\xc0\x5f\x21\xa1\xa9\xbd\x17\xc2\xc2\x8a\xc4\x9c\x96\xe4\x9a\x21\x78\xc8\x3f\x06\xf3\x97\xc1\xfc\x45\x78\x79\x11\x9a\x58\x33\xef\x83\xfc\x83\xc8\xb0\x50\x18\x16\xc1\xcf\x85\xc8\xb0\xd0\xe0\x57\xa8\xbf\x9a\x22\x4b\x0b\xf3\x7d\x80\x2a\x2b\xfb\xe8\xd2\x86\xf4\xc9\xdf\x6f\x67\xd4\xaa\xf7\x58\xcf\xb0\xa0\x7a\x80\xd2\x37\xd2\x2b\x54\x0b\x12\x58\x8c\xf0\x6b\xc5\xa4\xf6\xee\x9b\x8a\x1d\x40\xb1\x82\x2e\x22\xfc\xf5\x31\x09\x7e\x23\x7a\xbf\x02\x8f\x47\x94\xc0\xfa\x6e\x8f\x13\x50\xf4\x05\x20\xef\x88\x7b\xbb\xdb\x3b\x04\x5d\xeb\x4e\x08\x2a\x19\x9e\x1d\x0c\x50\x76\xa7\xf9\x3d\x63\xc8\x1d\x21\xca\xc4\x3e\xc7\x51\x0d\xa7\x64\x33\xd2\x5e\x0f\xb8\x60\xa7\xcd\x3f\x22\x35\xa3\xce\x89\x88\xc7\xf7\x84\x56\x67\xa8\x01\x55\xfb\xfc\xac\xcd\x27\xe7\xcf\xa5\x71\x4b\x14\xeb\x53\x2f\x1d\x56\xee\x9d\xa1\x30\x32\xe9\x64\x37\x36\x82\xa5\xa6\xd4\x8e\xdd\xbb\xfa\x79\x47\xee\xe9\xc9\x60\x11\x9b\xe4\x9f\x23\x1c\xd1\x8c\xef\x47\xe3\x04\x62\xb3\xec\x79\xe4\x9f\xd0\x1c\x88\x2d\x6c\x99\x21\xf6\x46\x5b\xe3\xf3\x69\xa4\x23\x82\x63\xdf\xf8\x0d\xec\x93\x10\xa9\xc8\x90\x12\xf1\xf0\x57\x6b\x86\xcd\x88\x02\xb1\xe7\xd0\x14\xac\x2d\x33\xec\x11\xb3\x1b\x4d\xe5\x0f\x24\x68\x07\xbd\x45\xca\x3e\x89\x1d\xd5\x45\x24\xeb\x51\x60\x56\x48\xda\x04\x22\x96\x2a\x2b\xc6\x3a\x2b\xad\xa6\x98\xe9\xf8\xe6\x0b\x1d\x66\xa1\xc3\x2c\x92\x11\x69\xf3\xaf\x29\xdb\xd8\xd7\xaf\xec\x25\xd1\x64\x96\x5d\xde\x02\x8a\xa2\x76\xdf\xa3\xab\xe4\x19\xc4\x99\x45\x78\x7c\xa1\x4d\x2e\x94\xaa\x15\xe2\x25\x2a\xcd\x42\xa5\x59\x31\x3b\x43\xa8\x59\x08\x35\x4b\x2d\xa7\xea\xbe\x47\xd7\xca\x36\x68\x35\x0b\xad\x66\xa1\xd5\xac\x58\xe6\xa3\x4b\xac\x25\xe7\x18\x5d\x89\x68\xe4\x92\xbd\x91\xc7\xee\xf1\x38\xbe\x8e\xae\x95\x73\xc8\x59\x84\xb8\x91\x7d\xf7\x42\xc9\x59\x28\x39\x0b\xd9\x64\x21\xe6\xac\x90\xbe\x00\x0e\x8b\xb4\xc5\x4a\xfb\x1f\x49\x87\xf0\xe6\x3d\xba\x56\xce\x21\x73\xb1\x96\x9c\x83\xb6\xb3\xd0\x76\x16\xda\xce\x42\xdb\x59\x84\x2f\x16\xf2\xce\x42\xf4\x58\x2a\xdb\x25\x06\x17\x51\xbe\x85\xc2\xb3\x50\x78\x16\x0a\xcf\x22\xcd\xb7\xc8\xb6\x2f\x74\x9e\x95\x2a\x97\xe9\xc9\x22\x97\xb1\xf4\x4f\x16\xd1\xda\x85\xec\xb3\x90\x7d\x22\x2e\x17\xe2\xd9\x62\x48\xbf\x10\x7f\xd6\x4a\x3b\x76\xc4\xf4\xba\xf4\x73\xc4\x94\xae\x4b\x86\x34\x55\xe6\x4f\x86\x1d\x80\x12\x2b\x6e\x96\x3b\x12\xc7\xc6\xaf\xe4\x55\x63\x9b\xf5\xa0\xdb\x45\xe8\xe3\xd9\xe9\x1b\x24\x7b\xc7\x8b\xf5\x63\x52\x8e\x28\x38\x0d\x52\x3d\x11\x28\x06\x83\xbf\x11\x14\x0d\x1d\x94\x05\xde\x36\xa8\xd5\xc4\x51\x75\xae\xc6\xe4\x4e\x19\xa3\x13\x83\x8a\x47\x13\x74\xc8\x9f\x19\xa9\x78\x7f\xd6\xe9\xfa\x2a\xf3\x37\xd8\x68\xec\x6b\xd9\xd3\xc9\x4e\x4f\x44\x0b\x3b\x54\x5b\x22\x96\x3b\x23\xa8\xea\x8a\x08\xce\xeb\x90\xdc\xf8\x2d\x3b\xdf\xfb\xcd\x49\xf7\xdc\xec\x94\xb1\xee\xda\x91\x88\xff\x49\x71\xc6\x54\x62\xca\x21\x24\xce\x08\xa8\xea\xd5\x4c\xcf\x6b\xff\x24\x7f\x0f\x21\xbe\x9d\xa1\x21\xd9\xaf\x00\x7a\xb7\xbe\xfa\xf6\x0c\x2c\x1f\x39\x41\x30\xfe\x22\x9b\x13\xb9\x2a\x63\x1d\x86\x74\x58\x4d\xd5\xd3\xb1\x24\x67\x67\xce\x0a\x6d\x01\x72\x5f\xe3\x1b\x59\xd3\xdf\xfa\x75\x72\x32\x9c\xe8\xaf\x43\x95\xd2\x61\x43\xb5\xbb\xf5\x8c\xbb\xf1\x44\x8c\xc8\xb0\xc3\x89\xe5\xfc\x01\xe0\x1b\xdb\x4f\x2c\x78\x13\x90\xc5\xb2\xdb\x5d\x28\x63\x0b\xa8\xbe\x10\xc7\xd6\x92\x79\x90\x14\x16\x12\xd9\x42\x22\x5b\x48\x64\x0b\x65\x7a\x91\x67\x41\x3a\xe8\x85\xc0\xb5\x90\xcb\x56\xc4\xf6\xc9\xb3\x2c\x14\xb3\x65\x57\xb8\x50\xcc\x58\x8d\x74\x2c\x87\x16\x59\xcb\x85\x6e\xb6\x42\xbc\x22\xde\xb2\x18\x13\x2c\x12\x2e\x2b\xa2\xaf\x84\x5c\x16\x4a\x51\x56\xc6\x65\xef\xb9\x18\x13\xac\x0c\x17\x1b\xb0\x5d\xec\x09\x16\x59\x83\x85\xfe\xf0\x13\xfc\x47\x38\x5a\x08\x47\x0b\xe1\x68\x11\xf1\x88\x6c\xef\x42\x3b\x5a\x68\x47\x31\x5c\x5b\x00\xd8\x85\x7c\xb4\x62\x52\x89\x6c\xb5\x50\x90\x16\x0a\xd2\x42\xea\x5e\x88\x48\x0b\x9d\x64\x91\xa6\x5f\x56\xde\xf5\x93\x8e\x91\x85\x90\x4a\x32\xfc\xb8\x90\x92\x16\x89\x83\x85\x9a\xb4\x50\x93\x16\x6a\xd2\x42\x4d\x0a\x79\x7e\x45\xe0\x11\x35\x69\xd9\x8f\x2c\xf2\xf5\x0b\x2c\xb3\xf4\x66\x17\xb2\xd2\x32\x26\xb0\x44\xdf\x02\x0d\x2d\xbb\x98\x85\xb8\xb4\x10\x97\xd0\x6e\xef\xd1\xb5\xf2\x0f\xfa\xd2\x42\x5f\x5a\xe9\xba\x20\x31\x2d\x62\x23\x0b\x95\x69\xa1\x32\x2d\x54\xa6\x45\x34\x98\x34\xc4\xdd\xd7\xd8\x71\x78\xca\x27\xc2\x44\x84\xd0\x17\x6b\xa4\x44\x93\x7c\x35\x3d\xc7\x27\x82\xf3\x19\x13\x46\xd5\x39\xe9\xd6\x3e\x21\xea\x47\x2c\x9a\x67\xaf\xbe\x41\x46\x9f\x8e\xe1\xa9\x15\x23\x27\x82\xc6\x8f\x21\x74\x06\x3a\xb5\x7e\x4e\xc2\x2a\x81\x0a\xf8\xcc\x10\x21\x66\x8b\x93\xa9\x96\x8e\xb4\x9a\xbc\x92\xdb\xdb\x0e\xbd\x63\x84\xb4\x39\x9f\x1b\x65\x22\x7d\x53\x03\xd0\x9d\x1a\x69\xe8\xa7\x0d\x7b\xff\xad\x2f\xfa\x46\x26\xf4\xd6\x39\x15\xc2\xce\x89\xf7\x75\x47\xa0\x63\x44\x26\x4b\x0c\xce\x48\x0e\x06\xb4\xd4\x69\xff\x49\x83\x22\x16\xad\xf4\xaf\xd0\x91\x42\xa2\x89\x74\x1b\x23\x1b\x66\xf0\x33\xa6\x57\xdf\x6f\xc4\x8c\x35\x58\x86\xc1\x23\xe1\x75\xab\x4d\x83\x87\x35\x3c\xa9\xc7\xf0\x42\xcb\x06\x5b\x0f\xf3\x23\x73\xfa\x91\x64\xdc\x21\x94\xe9\x24\x6f\x63\x6e\x5f\xd6\x7d\x64\x8a\x85\xe8\xb1\x03\x3c\xaa\x88\x5e\x7b\xd2\xef\xee\x28\x2b\x1d\x8c\xe7\xbe\x75\xc5\x52\xb3\x9e\xc8\xf0\xa2\x64\x6e\xdd\x9b\x91\x21\x3e\xeb\xfe\xd6\xe9\x7d\xf5\x81\x47\xf2\x03\xfa\xdb\x42\x7f\x5b\xc0\xb4\x05\xf0\x0c\x5c\xb9\xd8\x22\x2c\xc2\x26\x8b\x39\xc2\x42\x8b\x5b\x68\x71\x0b\x2d\x6e\x85\x0e\xe0\xaf\x58\x68\x71\x86\x5b\xef\xd1\xb5\xf2\x0f\x72\xdc\x22\x65\xb3\x50\xe4\x42\x6e\x5f\x28\x72\x4b\x8f\x71\x21\xca\x2d\x03\xc5\xcb\x1e\x73\xa1\xcb\x2d\x74\xb9\x85\x2e\xb7\x08\xe7\x66\x9c\x67\x91\xb8\x59\x08\x74\xd6\xcd\x7b\x74\x95\xcc\x83\x6a\xbe\xbc\xdb\x0b\x99\x6e\x21\xd3\xad\x2d\xf3\xa0\xd4\x2d\x94\xba\xb5\x23\x62\x20\xf3\x10\xbd\x59\xe8\x75\x0b\xbd\x6e\xa1\xd7\x45\x60\x73\xa1\xd7\x2d\x86\x0b\xeb\xc4\x1e\x57\xe6\x41\xb2\x5b\xa9\x1b\x51\xed\x16\x8a\xca\x42\xb5\x5b\x27\xa6\x63\x32\x0f\xaa\xdd\x3a\x21\xbd\x47\xf4\x40\xe6\xd1\xeb\x58\x27\xf8\x88\xfc\xe3\x5d\x5a\xc8\x53\x0b\x79\x6a\x21\x4f\xad\x23\xff\xa0\x50\xc5\x6e\x60\xd9\x23\x2c\x02\x3b\xac\xd0\xee\xd1\xb5\x19\xfc\x91\x7f\x4e\xd6\xaf\x0c\x17\x07\xf7\x99\x31\xc6\x75\x6d\x04\xac\xe4\x9f\x93\x6a\xc4\xb3\x26\x95\xb3\x50\x99\xd6\xf9\x21\x4a\x3a\x90\x33\x40\xb4\xa8\x37\x60\x98\xf7\x13\x8a\xf7\xdd\x7a\xa9\x74\x08\xeb\x63\xb0\xa2\xb3\x34\x3e\x23\xf9\x8f\xdf\xb5\x0f\xc2\x1a\x22\xd5\xd6\x87\x1f\x31\xd1\x63\x83\x92\x61\xbd\x85\x6c\x18\xe0\x5d\xe7\xb3\xc8\xf8\xd7\x87\xc8\xb6\xd1\x22\x5e\x31\xbb\x11\x37\x36\x38\xfa\x67\x66\x94\x2a\xf4\x35\x14\x19\xb2\x5e\x4c\xf1\x3a\xd8\x56\x4c\x42\xd9\xc3\x9d\x9f\x6c\xda\xd1\x87\xd9\x88\xc0\x6c\xe6\x2a\x7b\x8d\x18\x80\x12\x67\xd6\xc7\xf0\x0e\xef\x11\x52\xb0\xbd\x83\x71\x8c\x77\x3c\x64\x90\x63\x26\xab\xba\x1b\xf1\xa2\xdf\x19\x85\xb0\xdb\x4a\x2f\x3d\x56\x0e\xa8\x37\x7a\x08\x1f\xdb\xac\x4d\x56\x62\x83\xb2\x23\x49\x57\x4b\xb6\x89\x19\x8a\x5d\xf3\x81\xba\xee\x18\x7e\xbd\xea\x90\x58\x65\x21\xe5\x6d\x22\x21\x03\xf5\x69\xc7\x9c\x2b\x78\x2b\x62\xda\x4f\xfc\xdc\x4e\xf9\x8d\x85\x2e\x02\x51\x8c\x77\xcf\x6f\xb4\x33\xb9\xd7\xc0\xa9\x4a\x63\x7f\xa8\x7f\xe9\x95\xc9\x39\x0f\x6b\xa1\x6d\x6f\xf5\xac\xbc\x03\xbc\xd6\x3b\xfd\xb4\x1e\x7f\xeb\x9b\xcf\xeb\xf8\xdd\xe3\x78\x1c\xfd\x7f\x9e\x8b\xe7\x8b\xc6\xb2\xd0\x58\x56\xa8\x0d\xf6\x89\xcb\x0e\x6e\x21\xb3\x58\xad\xee\xd1\x6e\x3d\x54\x6b\xd1\x87\xd2\xb2\x64\xdd\x85\xc6\xb2\x88\x75\xac\x18\xfc\x11\xca\x58\x88\x2d\xbf\xca\x4a\x07\x7e\x7d\x21\x19\x89\x32\x92\x02\x8b\x5c\xc6\x42\xeb\x5e\x08\x2f\x68\x1d\xf7\xe8\xaa\x0e\x29\xc9\xf9\x22\x0b\xed\x85\x1c\xf4\x3d\xc6\xf7\xde\x99\xa2\x29\x56\xa7\x91\x83\x23\xcc\xb8\xbe\x5f\x9f\xc1\xf9\x56\x70\x02\x1a\x0b\x1d\x66\x7d\x71\x89\xb7\x82\x23\xc5\xac\xac\x29\xea\xd2\x85\x04\xb1\x50\x63\x96\x55\x69\xa1\xc3\xc4\x50\x72\xc1\x6b\x16\x5a\xc4\x42\x8a\x31\x42\x7b\x8f\xce\x14\xb9\x9c\xd8\x17\x3a\xcc\x42\x87\x59\xe8\x30\x0b\x11\x66\x21\xc2\x2c\x34\x8d\x15\xe1\x4d\x44\x98\x85\x08\xb3\xbe\xb8\xfa\xcb\xae\x64\x34\x16\x6a\x43\x08\xb3\x8b\xe8\xca\x42\x6d\xb0\x5b\xb9\x47\xe7\x7b\xa6\xa1\x36\x90\xd4\xd8\xff\xdd\xe5\x4b\x13\x74\x23\x38\x6c\x04\x87\x1d\x0f\x16\x00\xef\x46\x73\xd8\x68\x0e\x1b\x50\xc3\x35\xa5\x37\xf6\xed\x06\x35\x87\x31\xb3\x9f\xc0\xc8\x0f\x6d\xa7\x37\x4d\x9a\x68\x53\x51\x89\x8b\x33\xe4\xa0\x9b\xf2\x86\x25\xef\xa7\xf7\xeb\x08\xf4\xa2\x31\x59\x9c\x93\xeb\xf1\xbb\xa2\x51\x8a\x55\x5c\x83\x12\xf9\xf3\x04\x40\xe6\xc8\x14\xfd\x4e\xec\xba\x63\xb9\xfe\x39\x91\xfa\x73\xbf\x28\xa4\x2a\x51\x9f\x1b\x10\xf3\xd1\x6c\x7e\x9e\xd2\x98\xa9\xe3\x7f\x80\x48\xdb\x31\x00\xd1\x4f\xc3\x32\xbe\x76\xd1\xc6\x00\xa3\x51\xea\x1a\x51\xeb\x79\xe3\x16\xa5\xed\xa4\xf4\x00\x52\x0d\x8d\xa2\xf7\xa4\xf9\x11\xe6\xee\x09\x98\xd6\xf8\x88\xd8\x36\xe1\x67\x8f\xa8\x87\x52\x74\x58\x78\x45\x33\xad\x97\xfb\xd3\xff\x8c\x3f\x19\x06\x33\xa4\x30\x42\x4b\x46\xcc\x1b\x4f\xe4\x84\x36\xd1\x52\x1f\xa9\x3b\x33\x22\x85\xaf\x83\x33\x06\x7a\x33\xc9\x9b\xe1\x76\x0e\x75\xd8\x80\x21\x3d\x31\x0b\xb1\xdb\x79\x8c\x54\x3d\x23\x86\xa9\x6e\x70\x6e\x79\xe9\xb2\xe9\x7d\x3f\xf8\x0d\xcf\xf8\x22\x53\x12\x8b\x71\x47\x23\x67\x24\x65\x1f\xfb\xc3\xa7\x62\x40\xee\xd3\x42\x20\x2c\x1d\x25\x43\xf2\x4f\x08\x57\x1f\xeb\xc1\x98\x46\xc7\x76\x54\x4f\x3c\x7b\xbf\x8d\x31\x83\x9e\x7d\x8f\x5e\x37\x43\xa7\x78\x33\x1b\x6f\x66\x93\x29\xd9\xd8\x33\x1b\x7b\xe6\xb7\xa3\x46\x82\xda\x6a\xac\xcd\xea\x60\xeb\x27\x6e\x7c\x1a\x83\xbe\xbd\x33\x34\x4b\xcc\x65\xe3\xd6\x6c\xdc\x9a\x8d\x5b\xb3\x71\x6b\x36\x3c\x60\xeb\x8e\x6d\x0c\x9b\x0d\xf3\xdb\x19\xdc\x55\x79\x6f\x3d\x4a\x82\x08\xf7\xe8\x5a\x62\xd3\x84\x5d\x22\x35\xbb\x63\x3f\x8f\x7f\xb3\xf1\x6f\x98\x88\xdc\xa3\x6b\x19\x05\x11\xe9\xd8\x11\xb8\xc4\xc5\x41\x5b\xea\x1d\x79\x59\xbc\x9c\x6d\x9d\xc8\x9a\xb1\x33\x44\x87\xd2\xb9\x71\x74\x36\x8e\xce\xb6\x4e\x6c\x6b\xfc\x8e\x4c\x40\xf6\xd8\xf8\x3a\xdb\x7e\x63\x33\x68\xdf\x56\x97\x9d\x21\x3d\xac\x9d\x8d\xb5\xb3\x31\x42\x42\x6b\xdf\x58\x3b\xcc\xf8\xef\xd1\xb5\x76\xf8\xb8\x3b\x1b\x77\x27\xe6\xb5\xd9\x33\xe8\x0f\xf6\x26\xe7\xb1\x49\xe7\x87\xe3\x82\xca\x75\x8f\xae\xfd\x5c\xab\xd2\x25\x36\xb1\x63\x56\x47\xda\x63\xe3\xf7\xec\x91\xfe\xa0\x54\x64\xbf\xb4\xf1\x7b\x76\x0c\xa7\xb1\x7c\x36\x96\xcf\xce\x70\xe3\xcf\xa0\x65\xe4\xe8\xdd\x8b\xa0\x0c\x59\x28\x22\x14\x4f\x67\xff\x13\x7b\x39\xef\x67\x7b\xe7\x3b\x6f\x26\x14\x39\xc1\x67\x75\x7f\x1a\x69\xb6\xc3\x0e\x31\xba\x15\x03\x60\xdd\x96\x67\x7a\xe7\x67\xc6\xb0\x67\x7e\x9a\x7f\x3b\xa7\x83\xe2\x30\xd0\x72\x2d\x2c\xed\x59\xb9\xd6\x6f\x5c\xe2\x45\x8f\xe3\x59\x90\x78\x7b\xbf\x27\xc6\x4e\xaa\x8a\xc7\x48\xea\x43\x8c\xef\xc9\x10\x56\xec\x90\x55\x6f\x0f\x81\xf2\x67\xc5\xa6\x3d\x63\x9f\x37\x91\x3c\x5b\x9c\xee\x18\x55\x3a\x73\x93\x24\x8b\xad\xd4\xf6\xd7\xa1\xe9\x66\x34\xe0\x51\xe7\x3d\xc7\x3e\x2a\x66\x33\x47\x6d\xc4\xf2\xea\x91\xc0\xce\xf9\xdd\x61\x77\x32\xdf\x13\x9f\xc6\x90\xd7\x51\x2b\x93\x85\xad\x47\x3d\x47\x5c\x66\xfa\xbd\xfd\x75\xc6\xc7\xb6\x01\xce\x87\x31\xe7\x4c\x22\x0f\x02\xaa\x27\xae\x83\x46\xea\xa8\x90\x2a\x9f\xd7\x1d\x23\x0e\xfb\xbc\x49\xd5\xd9\x0d\x66\xbc\xeb\x8d\xf1\x33\xab\x86\x19\x9c\xde\xfe\x10\x1e\x96\x01\xe9\x37\x16\x77\x9e\xe0\x17\x53\x2e\xd9\xc9\x58\xd9\xa3\xaa\xd8\x23\x09\xd8\xf2\xa5\xcb\xb6\xf5\x04\x77\x46\xd8\x2c\x02\x1b\x57\x6c\xe3\x8a\xb1\x66\xbc\x47\xef\xaa\x5c\x84\x31\xb6\xd3\x01\xc7\x18\xdb\x91\x17\xc1\xfb\xd9\x58\x2f\x1b\xeb\x65\xeb\xb5\x6d\x9c\x95\xf4\xf7\x37\x56\xca\xc6\xd5\xc8\x88\xd9\xc6\x4d\xd9\x84\x2d\x36\x6e\xca\xb6\x8b\xde\x58\x29\x1b\x12\xb9\xf1\x4e\x36\xde\xc9\x86\x92\x6e\xbc\x93\x8d\x77\xb2\xc3\x66\xc0\x3b\x31\xf4\x71\x8f\xae\x92\x0f\xb1\x4c\x36\x96\xc9\xc6\x32\xd9\x6c\x0c\x76\xa5\xbb\xd7\x39\xc7\x27\xcb\x7b\x58\x02\x3f\xcc\xa0\x22\x81\x17\x29\x46\xb9\xce\xae\x7b\xc3\x33\x76\xcc\x8a\x30\x03\xb6\x1e\xe5\xc6\x0c\xd8\x98\x01\x1b\x33\x60\xe3\x04\x10\x28\xb9\x47\x57\xc9\x6f\xde\x84\xc8\x8e\x6f\x6c\x80\x8d\x0d\xb0\x49\x5a\xec\x8a\x68\xb8\xfc\xa6\xef\xb0\x2b\x62\xb5\xf2\x1b\x61\x8b\x4d\xd8\x62\x93\xb4\xd8\x64\x2c\x36\x19\x8b\xcd\x02\x76\x63\x12\x6c\x1c\x82\x8d\x3d\xb0\xb1\x07\x76\xa5\xf7\x21\x3b\x61\x0f\x6c\xec\x81\x5d\x79\x3a\xf2\x12\x12\xfe\x86\x15\xed\x8e\x95\xd4\x13\x59\xf0\xd8\xd7\x21\xd3\xc2\x6e\x6f\x95\x7c\xdf\xb4\xec\xd6\xec\xee\xc2\x02\x59\xe1\x85\x84\xec\x9a\xa3\x5d\x9f\x8a\xd0\x70\xca\x22\x4f\xb9\xce\x4f\x52\xc7\xf9\x5f\x18\x24\xce\x57\xbd\x19\x39\x59\x27\xb5\xb8\x2a\x1c\x7a\xb4\x0c\x98\x2c\x43\x25\xeb\x8d\xc8\x45\x2a\x78\xbb\x59\xc3\x23\x24\x24\xee\xd1\x99\x6a\x68\x2c\xc0\x65\x0c\x64\xe9\xed\x2e\xbc\x9c\x65\x00\x64\xbd\x3f\x9b\x3d\xe7\xeb\x6d\xa1\xeb\xaf\x9f\x49\xcc\xca\xff\xf8\x5d\xfa\x0e\x6f\x68\xd2\x76\x32\xa8\xf8\x0b\x15\x7f\x21\xe7\x2f\x54\xfc\x85\x84\xbf\xde\x88\x5c\x44\x62\xf5\xc7\x64\x8a\x11\x4b\x4c\x46\xfd\xff\x1b\x89\xe4\xec\x3d\x7c\x7e\x84\x5c\xbf\x08\xb3\x66\x58\x4c\xd1\xc7\x74\x21\xd2\x15\x50\xcc\x17\xa2\xf9\xea\xb9\xbf\x33\x38\xdc\xce\x78\xa9\x33\x8d\x51\xc0\x78\x5e\xdd\xea\x77\x66\x84\xe4\x61\x54\xf6\x40\xe6\x58\x94\x65\xf0\x16\x32\xf1\xc6\x1c\x08\x96\xf0\xea\xc3\x1e\x55\xca\x79\x82\x9d\x97\x5e\xde\xb0\xf7\x8b\xd0\x58\xf9\xe9\x64\x23\x3d\x21\x7f\xcc\x41\x53\x09\xe0\x9a\x6c\x2c\x93\x8d\x65\xb2\xf1\x4b\x36\x36\xc9\xc6\x24\xd8\x9d\x41\x75\xf5\x0c\x06\xc9\xee\x08\x16\xa8\x64\xf0\x45\x76\x4c\xb6\xf0\x45\x76\x67\x5f\x2a\x72\x31\x45\x36\x8e\xc8\x96\x09\x77\xe7\xf7\x8a\x4a\x58\xe6\xc6\xff\xf8\xc9\xa7\x76\xac\xdf\xc5\xe6\xcf\x68\x59\xed\x01\xc5\xdf\x90\xfb\x0d\xb3\xff\x21\x73\xf6\x9f\x1b\x5a\xbf\xdd\xff\x0d\xad\xdf\x70\xfa\x1d\x79\x05\x38\x3d\x34\xb4\x71\x26\xee\xd1\x55\xa2\x12\x4e\xbf\xa1\xf2\x1b\x2a\x4f\x8a\xe5\x1e\xfd\x54\x54\xea\xdd\x6f\xd8\x8c\x51\xd9\x7b\xbc\x9f\x43\x00\x62\x43\xdc\x37\xc4\x7d\x43\xdc\x37\xac\x7d\xc3\xda\x63\x6d\x12\x7b\x95\x6d\x37\xbb\x21\xeb\x3f\xc1\x23\x38\xfa\x86\xa0\xef\x60\xba\x30\x72\xb4\xf6\xde\x30\xf2\x0d\x23\x27\x96\xd7\x11\xf7\xdc\x70\xf1\x6d\x87\xbf\xe1\xe2\x1b\x2e\xbe\xe1\xe2\xdb\x9b\xb6\x21\xe2\x1b\x22\xbe\x21\xe2\x31\x85\x45\xbf\xbf\x47\x57\xc9\x93\x70\xf1\x0d\x17\xdf\x76\xfb\x1b\x3e\xb1\x75\x72\xb7\x5e\xe7\x86\x6b\x6e\x1d\x81\x0d\xcb\x8c\x94\xc1\xf9\x19\xb1\x4c\xc6\x93\xc7\xbb\xb7\x1d\x97\xf7\xed\x90\xd3\xdd\x7e\xba\xbd\x7b\xc7\x55\x31\x35\xff\xfc\xff\x9b\x33\xbd\xbd\x6f\x90\xe9\xfb\x6f\xb5\xd6\xb1\xc6\x1d\xab\xd8\xc1\x16\x3d\xb8\xa4\x07\x67\x34\xc6\x36\x41\x9e\x8e\xd5\xed\x60\x67\x1e\xfb\x82\xf1\x90\x6b\x79\x6d\x65\x48\x88\x8e\x6c\x95\xc8\x04\x0f\xc2\x2e\x03\xe2\x35\xec\x2c\x22\x46\x9c\xf1\xb1\xc1\x14\xf0\x23\x5e\xf6\x6c\xe2\xa4\xbf\x1c\x8b\x47\x88\xba\xff\xd9\xba\x0d\x83\x5d\x8c\x76\xfa\x79\xd8\x8b\x12\x70\x67\xe8\x5e\x19\x11\x8d\xac\x61\xcc\xb4\xb0\xee\xaa\xd8\x7d\x15\x5b\x53\xd6\xf5\x55\xbf\x9e\x88\x81\x2f\xf2\xe5\x4c\xe8\x8b\x81\x7d\x31\xb0\x2f\x86\xdc\xc5\x90\xbe\x98\xcd\x17\x53\xed\x62\x5c\x5d\x4c\xb5\x8b\x7d\x75\x31\xc0\xae\x0a\x6b\x19\x0f\x80\xcd\x76\x31\xcf\x2e\xa6\xda\xc5\x90\xa3\x18\x57\x17\x5b\xeb\x2a\x82\xef\x86\xf7\xef\xff\x3b\x12\xda\x98\x23\xff\xe3\xdf\xec\xdb\x89\x92\x18\x79\xb8\xff\xf6\xd3\x37\x9f\xc0\x8e\x62\xe4\x38\x58\x53\xdc\x73\xd6\xe3\x4c\xab\x1b\xe4\xfb\x67\xff\x0c\xed\xde\xe1\x0a\xc8\x84\x7b\x46\x12\x45\xcc\x42\xbb\x77\x38\xcd\x70\xee\xad\xd3\xbd\x21\xdc\x3b\x08\x1f\x6c\x7b\x43\xb5\x37\x54\x7b\x07\x45\x80\x6a\x6f\xa8\xf6\xfe\xfd\x5e\x35\xff\x4c\xe4\x5a\x4f\x21\xd9\x1b\x86\xbd\x61\xd8\x5b\xee\xdd\x3f\xc9\x12\x15\x3e\x0c\x7b\xc3\xb0\x37\xf4\x7a\xc3\xad\x33\xdc\xba\xe1\xd6\x5b\x96\xde\x70\xeb\x2d\x57\x07\x05\xdc\x70\xeb\x18\xb5\x6e\xb8\xf5\x86\x5b\xef\x48\x7f\xc4\x14\x16\x56\xbd\x21\xb5\x1b\x4a\x8d\xdf\x70\x8f\xce\x91\x5d\xe1\xd3\x1b\x3e\xbd\xc3\x11\xd1\x7f\xdc\x90\xe9\x0d\x99\xde\xd6\x85\x0d\x99\x66\x6c\x7f\x8f\xae\x12\xfb\x90\xe9\x0d\x99\xde\x90\xe9\xad\x0f\xb8\x21\xd3\xdb\x6a\xb2\x21\xd3\x1b\xd2\xb3\x57\xc4\xac\x65\x00\x28\xe3\x86\x32\x6e\xf8\xe2\x86\x2f\x6e\xf8\xe2\x4e\xd7\x0f\xbe\xb8\xe1\x8b\x1b\xbe\xb8\xe1\x8b\x1b\xbe\xb8\xe1\x8b\x3b\xb2\xfe\xf0\xc5\x0d\x5f\xdc\xf0\xc5\x0d\x5f\xdc\xf0\xc5\x0d\x5f\x64\x28\x75\x8f\xae\xf5\xf4\xe1\x8b\x44\x78\xab\x96\x37\x73\xcd\xbc\x5d\x78\xf9\x86\x8f\x74\x60\x7f\x22\x9e\x38\x79\xe9\x27\x14\xa6\x20\x03\xe9\x62\x11\x5d\x8c\x9c\x8b\x49\x73\xb1\x5b\xae\x18\x3c\x7f\x77\xfd\x9a\x8f\x9e\x72\xe6\x40\x1a\xa7\xaa\xb1\x67\x5a\x3e\x6f\x0c\x27\x82\xbf\xdd\xb2\x68\xcb\xea\x2d\x7b\xff\x8c\x94\x64\xec\xb6\xfa\x13\x67\xe8\xc6\xf9\x68\x0c\x8f\x96\x51\x7b\x66\x58\x3b\x16\x17\xf9\xe4\x8e\x89\x48\xae\x72\xfe\x1b\x99\xad\x5c\x1b\xeb\x11\x56\x25\x3b\x96\x24\x3e\x79\x65\xe8\xdb\xff\x9f\x7c\xb2\x23\x29\xde\x15\xc1\xe2\x19\xf3\x0f\xd6\x1a\x64\xa6\x3d\xf1\xf6\x9e\x74\x46\xec\x57\x6c\x51\x48\xdf\xc2\x7e\xda\x7b\xd2\x2b\x7f\x4b\x8c\x37\xe0\xd6\x2b\x8c\xe1\xc8\xb0\xfa\x5b\xbc\x1b\x0c\x02\x3b\x6c\xe0\x5e\x31\x2a\x20\x40\x0c\x07\xed\x88\x88\x79\x27\x99\x3a\x74\xaf\xfc\x96\x58\x32\xc4\x7e\xc0\x6f\xd9\xe9\xb0\xbf\x31\x5a\x88\x19\x83\x4f\x78\x22\xdc\x1c\xc3\x06\xe7\xac\xb0\x3c\xc3\x60\x8e\x35\x48\xcc\x42\x9c\x4f\xaa\x78\x27\x52\xd4\xde\x30\xe9\xed\x93\x37\x2c\x73\xfb\xbd\x1b\x26\xbd\x5d\xb5\xc3\xd6\x82\x49\xeb\x59\xdf\xa3\x6b\x65\x12\xc8\xf4\xf6\x5b\x36\x64\x7a\xfb\x2b\x36\x64\x7a\x43\xa6\x77\x4c\x4f\x7d\xc3\x0d\x99\xde\x90\xe9\xed\xfb\x6f\xc8\xf4\x0e\x7f\x14\x32\xbd\xfd\x75\x1b\x32\x0d\x81\xeb\x0d\x99\x66\x8a\x7c\x8f\xae\x95\x67\x20\xd3\xdb\x3d\xd9\x90\xe9\xed\x0e\x6f\xc8\xf4\x86\x4c\x6f\xc8\xf4\x86\x4c\xef\x08\x43\xc3\xa7\x37\x7c\x7a\xc3\xa7\x37\x7c\x7a\x7b\x2e\xdb\x73\xc1\x35\xe9\xed\xce\xef\xf0\x65\xdd\xd5\x0d\x9f\xde\xf0\xe9\x0d\x57\xd8\xf0\xe9\x9d\xbb\xea\x0e\x33\xec\xef\x0d\x9f\x26\xdd\x78\x8f\xae\x95\x85\xe0\xd3\x1b\x3e\xcd\x4a\xa4\x59\xce\xdf\xa3\x6b\x65\x21\xa8\xe7\x86\x4f\x6f\xf8\xf4\x26\xb5\xb1\x61\x8d\x1b\xd6\xb8\x45\x68\x86\x2b\x37\xac\x71\xc3\x1a\x37\xac\x71\xc3\x1a\x37\xac\x71\xc3\x1a\x37\xac\x71\xc3\x1a\x83\x98\x6e\x58\xe3\x8e\x4d\x08\xac\x71\xc3\x1a\x37\xac\x71\x07\xa7\x81\x35\xee\x08\x69\xc1\x1a\xf7\xcf\x3c\x63\xc6\xde\xc6\x1b\x28\xee\x76\xde\x64\x51\xe0\xaf\x23\x64\xd9\x7d\x62\x13\xb2\xf2\x6f\x72\xff\xec\x79\xe0\x88\x0d\x11\xec\x9d\x77\xfb\x8b\xb1\x87\x77\x78\xc7\x1e\x23\x86\x19\xb1\xf7\x20\xf7\x5f\xb1\x09\x89\x69\x47\x2c\x37\x48\xff\x8b\x35\xf8\x5f\x43\xfe\x1a\xc2\xd7\x64\x01\xda\x9e\xae\x23\x92\x15\x3b\x1f\xfb\xaf\x7e\x63\xcb\xb1\x62\x2d\x10\x7b\x8c\x58\xf6\x46\xa0\x1f\x73\x3a\x76\x1d\x44\xae\x09\x26\x74\xf8\x2e\xf6\x74\x6d\xf7\xd7\x47\x46\x22\x56\xd0\x31\xfd\x85\x23\xf6\x09\xf7\x3a\x36\x1e\x27\x46\x1a\x38\xd9\x6f\x84\xf5\xc9\xe2\x8b\xfd\x58\xa2\xc2\x66\x1a\x8e\xd2\x70\x94\x86\xca\x34\x34\xa5\xbf\xd8\x15\xe0\x76\xdb\xcd\x35\x04\xa8\x8d\x24\x37\x94\xa5\xbf\xd8\x0f\x44\x82\x5c\xae\x86\x46\x74\x46\x26\xff\x8b\x9e\x76\xb4\xbe\x29\x9d\x46\x75\xff\x8b\xee\x77\x48\x38\xb4\x7c\x47\x14\xc8\xf3\x3f\x7e\xc9\x89\x9e\x79\x3e\x21\xda\xdd\x51\x2a\x7e\xfe\xea\xcb\x6c\xf1\x88\xee\x77\x34\x78\xa3\xfe\x1d\x0d\xd2\x84\xb5\xe5\x0b\x3c\x6d\x38\xab\x37\x78\x7a\x83\xa7\xb7\x14\xb8\xbd\x08\x1b\x3c\x8d\x42\x79\x8f\xae\x95\x8a\x32\xc7\x0f\xa4\xde\x40\xea\x9f\x1e\x9a\x17\x87\x7a\xca\x3d\xba\x56\x2a\xf2\x8a\x6d\x50\xf5\x06\x55\x6f\x50\x35\xe0\xf2\x1e\x87\x23\x38\x55\x2a\x3a\xf1\xb5\x97\x8a\xe2\x4c\x0d\xaa\xde\xa0\xea\x7d\x7e\x7a\xf5\xce\x11\xf4\xf1\x21\xd2\x3c\xd8\x5e\xb1\x6d\x5e\x76\x9b\xd3\xdd\x5e\x84\x7d\x42\xfb\x14\x46\x34\x30\x36\x0d\x8c\xad\xb5\xb0\xe9\x5e\x6c\xf0\xe2\xa6\x7b\xb1\x81\xc5\x34\xb4\xef\xd1\x6f\x0f\x5d\xd6\x5f\xad\xfd\xb0\x41\xc9\x5b\xfb\x61\x7b\x01\xb7\xf6\x03\x6d\xb7\x36\x03\xdd\xfb\x47\x7b\xf0\x57\x78\x85\x37\x35\x8b\x6d\x10\x66\x6b\x42\x6c\x0a\x01\xfb\x8d\xd2\xac\x94\xf9\x86\x2c\x2a\x41\xf2\xb6\xd8\x6f\x14\x2c\xa5\x3d\x84\x90\x9d\x11\x21\xed\x87\xfd\xc6\xbd\x51\xd2\x32\x56\xb3\xbd\x9e\x9b\x72\xc0\xa6\x1c\xb0\xb5\x22\xf6\x9b\x01\x49\xc9\xc9\xcb\xbb\x29\x04\xec\x37\x34\x33\x77\x89\xc7\xc4\x36\xf1\xbf\x35\x1b\x32\x52\xb4\x33\xd9\x6f\xe4\x67\x8e\xe8\xc9\xcf\x1c\xfd\x4f\x47\x11\x3a\x2a\xcd\xde\x3d\x2d\x46\x54\x8d\x69\xfc\xed\x89\x36\x92\x96\xe1\x34\x34\x37\x47\x34\x57\xa3\x5d\x19\x8a\xef\x1b\xcd\xdb\x28\x36\x47\x81\x36\xa3\xa3\xd1\xce\x75\x7e\xa6\xc6\x3b\x9a\xb4\x51\x7f\x8d\xa2\xac\xff\x89\x1e\x23\x65\x11\x03\x20\x53\x3b\x61\x1a\x00\x99\x5a\x05\x33\x6e\xda\x36\x31\x74\x29\x0b\x35\xa8\xfe\x79\xcd\x67\x1c\x72\xc3\xcf\x8e\xff\x3f\xa5\x05\xdb\x06\x22\xcc\xd6\xbf\xb4\x79\x3e\x4a\x3f\x7c\xdb\x6d\xe3\x8c\xd7\x95\x81\xa0\x5a\x71\x1b\xac\xbb\x1d\x31\x4a\x53\x46\x6c\xca\xc0\x4b\xad\x78\xdf\x74\x60\x7d\xae\x37\x36\x34\x48\xef\x85\x62\x5a\xe8\x67\x85\xc4\x5b\x51\x0e\x44\x9a\x2d\xb4\xd2\x42\x14\x2f\x94\xd4\x42\xb2\x2d\x44\xca\x42\x4c\x2d\x54\xd2\x42\x6c\x2b\x04\xb6\x42\xa8\xab\x15\xe5\x33\x64\x27\x74\xbb\x42\x04\x2d\xd4\x94\x5a\x21\x44\xd1\x24\x43\x7d\xa9\x15\x1f\x61\xae\xcd\xc8\x63\x85\x24\x56\x2b\x5e\xa2\x3c\x01\x11\xc6\x0a\x41\xa5\x50\x38\x0a\xa5\xa4\xd2\xde\xdb\xd4\x20\xb6\x99\xfb\xfd\xc6\x7b\x3d\x54\x6a\xb1\x0f\x1c\xdf\xc0\xf1\xfd\x65\xbc\x42\xbc\x48\xc3\xfb\x8b\xeb\x90\x48\xe1\x3f\xb2\xe3\x67\x01\x22\xdf\xf4\x4e\xf6\x17\xb5\x55\xc5\xc5\xf7\x1b\x55\xf3\x53\xa5\x84\x14\xbe\x81\xe0\x1b\xfc\xbd\xa5\xe7\x0d\xf8\xde\x54\x1f\x36\xd5\x87\xfd\x65\xec\x4e\xc9\x00\xfe\xde\xc0\xee\x0d\xec\xde\xc0\xee\x2d\x1b\x6f\x00\xf7\x06\x70\xef\x78\x20\x02\xb8\x37\x80\x7b\x23\x8b\x6e\xba\x08\x3b\xce\xd1\x00\xee\x0d\xe0\xde\xa0\xed\x4d\xef\x61\x03\xb8\xb7\xac\xbe\x41\xdb\x1b\xb4\xbd\x65\xfb\xfd\x65\x6c\x56\x96\x06\x70\x6f\xab\xc3\xfe\x42\x22\x15\x95\x00\xee\x0d\xe0\xde\x1a\x00\x1b\xc0\xbd\x41\xdb\x1b\xbe\xbb\x2d\x3b\x1b\x7e\xbc\xc1\xd9\xe7\x37\xce\xf3\x68\x84\x50\xd4\x83\x61\x1f\x18\xf6\x81\x61\x1f\xb8\xf2\x81\x5e\x1f\xb8\x75\x46\x72\x8e\x55\xe9\x3c\x3f\x35\x05\x3f\x2d\x3f\x2d\x6d\x12\x4d\x11\xa0\xe2\x01\x2a\x9e\x27\xa3\x85\xed\x9c\x76\x0e\x2f\x98\xe7\x47\x05\x89\xb7\x91\x7f\x2f\xff\x5e\xce\xd1\x4a\x01\xe1\x22\x14\x15\x02\x4f\xfd\x08\xc6\x67\xe5\xdf\x7e\xea\xdd\x8e\x0f\xd4\xcb\x79\xd6\xd8\xd4\xa2\x03\xa1\xd5\x5a\xda\xa2\x85\x8c\x51\x54\x67\x8b\x56\x62\xc5\x97\x84\xc6\x6c\x8d\xf8\xf9\x6a\x1b\x0c\x0e\xdd\x21\xaa\x8d\xa8\x94\xcf\x9f\xda\x4d\x39\xd2\xaf\xa2\x53\x45\xc7\x6e\x88\xb2\xb1\xa2\x01\xf3\xc6\xf7\x2a\x3f\xa5\x77\xe5\xf3\x57\xb4\xaf\x32\x7e\xce\xa1\x6f\x69\xff\x6c\x3e\xa1\xbc\xb1\x06\x9d\xf6\xb1\xe3\xbe\xfd\xe4\xff\x11\xad\x35\x84\x6c\x13\x07\x4a\xe1\x00\x73\x8d\x68\x44\x9f\x8c\x30\x9c\x8c\xa2\x3b\x9f\x0a\x34\x97\xa8\x61\x3c\x76\xd0\xa5\x18\xb7\xf4\xbb\x47\xd7\xc6\x47\x78\x67\xb0\x3d\xd7\x3a\xf3\xcb\xd0\xc4\x6b\xe8\xcc\xe7\xfb\x8d\xb4\xd3\xc6\x8e\xcb\x67\x94\xcc\x76\xce\xc9\x67\xe6\x4c\x0a\x37\xee\xc3\x01\x5b\x79\x3a\xc3\x98\xc9\xe0\x2d\x38\x80\x66\xe3\x68\x51\x47\x5f\xe4\x9c\x1c\xf3\xff\x54\x0c\x9f\x78\xa1\xd2\xab\xf8\x39\x84\x72\x10\x6e\x7a\x69\x3b\x4a\x87\xf7\x2a\xea\xaf\x43\xc6\x1e\xc6\xaf\xc6\x9b\x77\x32\x3a\x25\x68\x90\x60\xe1\x13\x9f\xe2\x27\x0d\x42\xcd\xb9\x50\x86\x40\xc1\x07\xe4\x7b\x9e\xb4\xae\x35\xed\x80\xbd\x07\xcc\x7b\xc0\xbc\x07\xcc\x7b\x80\xba\xc7\x46\xfc\x00\x75\x0f\x20\xf7\x3c\x71\xe9\xfa\xd2\x2c\xf4\xd3\x4f\x9b\xf0\xd1\x1a\x14\x6b\x6a\xb3\xa3\x2a\x3b\x23\x5e\xa8\x62\x8d\x0b\xcf\x01\xb5\x1d\x50\xdb\xc9\x38\x0c\x90\xed\x58\x31\xcf\xc8\x90\x9d\x86\xba\x75\xf6\x00\xd6\x0e\x48\xed\x10\x61\x38\x88\xdf\x87\x14\xc3\x01\xaf\x1d\x63\xf5\xc7\x58\xfd\xc9\x90\xaf\xb1\xfa\x63\xac\xfe\x8c\x38\x88\x89\x47\x74\xca\x33\x42\x21\x6b\xd7\x1a\x82\xa6\x5b\x7b\x8c\xd8\x1f\xab\xf9\x31\x62\x7f\x8c\xd8\x1f\xc3\xf5\x07\xf0\x78\xac\xf8\x07\xe4\x78\x42\xdf\x55\x09\x1c\x63\xf5\xc7\x28\xfd\x31\xf0\x72\x8c\xd2\x1f\xa3\xf4\xc7\x28\xfd\x41\xef\x3c\xaa\x82\x63\xe8\xe6\x64\xd8\xc7\x28\xfd\xd1\xf2\x3c\x06\xea\x8f\x5a\xe2\xa8\x1c\x0e\x1a\xea\x31\x4a\x7f\xe8\x45\x1d\x03\xf5\xc7\x40\xfd\x01\x2a\x1e\xa3\xf4\x07\x8d\xed\xa8\x1f\x8e\x51\xfa\xa3\xd2\x38\x46\xe9\x8d\x70\xde\xa3\xab\xc4\xaf\x4c\x32\x40\xb5\xc3\xa0\xd0\xe0\x91\x37\x50\x52\xc7\xeb\x6d\x97\x73\x46\x94\x66\xe8\x12\x0f\xbe\x75\x03\xb5\x75\x44\x1a\x22\x23\x57\x6f\x28\x79\x6f\x34\xba\x7c\x82\x8c\x61\x10\x60\x10\x9a\x18\xb7\xd6\x2a\xde\xc1\xf7\xaa\xe8\xc7\x3c\x7e\xfa\xba\xca\xff\x47\x21\x86\x06\xcc\x47\x9d\x54\x5b\x77\x7c\x22\xc2\xc0\xc5\xa0\x44\x38\x90\xf3\x07\xf7\x87\xa1\x3d\x3c\x3e\x74\x98\xff\xd9\xfb\x97\x55\x8b\x62\x65\x4d\xd0\x7b\x97\x6a\x2f\xc3\x50\xe8\x12\x52\xbd\xca\xe1\x34\x6c\xd8\x14\x36\x45\x35\x5c\xf8\xfd\x4d\x7c\x31\xf7\xb1\xc1\x09\x75\x2a\x33\x4d\x76\x76\x47\x8c\x35\xd7\xd0\x9c\xe3\x22\xfd\x0a\xc5\xe5\xff\x5f\x5f\x27\xe7\xa8\xd2\xf8\x68\x65\x16\x0c\x40\x83\x7a\xe0\x50\x10\x1a\x5f\x6b\xeb\xfc\xca\xc4\xa4\xd8\xd1\x3b\xf8\x9a\x27\xaf\x4b\xe6\x0b\x37\x82\x2a\x5f\x60\x71\x8f\x8f\xab\x58\x41\x7a\x48\xc3\x89\xcf\x75\x0a\x3b\x87\xcc\xa1\xa0\xfd\x17\xf6\x2c\x81\xc3\x26\x5a\xc7\x53\x71\x41\x60\x72\x0d\x29\xd3\x21\x1d\xb1\xe0\xd8\x39\x47\xce\xd3\xd3\xea\xc5\xe5\x86\xc1\x2b\xa8\xb7\x87\xf4\x9c\x90\xce\x1d\xb4\xf6\x22\xb8\xa5\xff\xc9\xc9\xea\xb8\x59\x5d\x77\x1f\xd3\x29\xcb\xe6\x79\x3d\x34\xcb\x14\xc1\xb5\x5b\xfa\x93\x02\xdd\x7c\x87\xb7\x5b\xfc\x91\x8a\x3d\x07\x16\x49\x57\xb2\x7e\xa1\x80\x6b\xa4\x41\x83\xd1\x0c\x43\xd6\xd9\x10\x34\x88\x66\xae\x35\xf7\x85\xaf\x13\xa9\x42\x0a\x5f\x27\x3a\x85\x64\x09\xa7\x72\x8c\xec\xa2\x5a\xd6\x6f\x0a\x56\x27\x5b\x37\x85\xa9\x13\x25\x42\x46\xab\xaa\x99\x95\x82\xcf\xa9\x38\x3d\x05\x9c\x53\xc0\x39\x05\x9c\x53\xc0\x39\x05\x9c\x53\xa8\x39\x85\x9a\x53\x90\x39\x05\x96\x53\x60\x39\x85\x91\x9b\x67\x2e\x85\x91\x53\x18\x39\x85\x91\x53\x18\x39\x91\xa5\x24\x76\xeb\x54\x76\x97\x42\xca\x29\xa4\x9c\x68\x16\x52\x60\x39\xa5\x76\xa7\xc0\x72\xd2\x44\xc8\x68\x7e\xfe\x66\x33\xf2\xc4\x94\x0a\x66\xf4\x13\x7b\xce\x81\x9f\xc2\xcb\x49\xfd\x3c\x31\xd8\x27\xab\x3e\x85\x9a\xf3\x57\x56\x0c\x3f\x95\xa8\x27\x3b\x3f\x65\x8c\x25\x1e\xfb\x14\x42\x4c\x21\xc4\x54\xa8\x9e\x78\xec\x53\x38\x31\x25\x55\xa5\x72\xf5\x14\x5a\x4c\x85\xd5\x89\x92\x25\x15\xa1\xa7\x22\xf4\x54\x84\x9e\x82\x8a\x29\xa8\x98\xe8\x50\x52\x68\x31\x85\x16\x53\x68\x31\x67\x13\x47\x40\x4b\x01\xc6\xb4\x07\x49\x45\xe8\x69\x0f\x92\x8a\xd0\x53\x11\x7a\x0a\x3f\x26\xa6\x74\x9a\x3b\x41\x3d\x27\xec\x9e\x82\xba\x4d\x50\xb4\x89\xd5\xa5\xca\xe7\x75\xf1\x32\xf6\xac\xa7\x24\xca\x1e\x24\xbf\x56\x1f\x40\x2f\x23\xc5\x43\xd9\x23\x5d\xd4\xe0\xe0\x09\xca\xa7\xc1\x29\x12\x93\x6d\x40\xb1\x34\xb8\x6a\x82\xf2\x69\x70\xd8\x04\x17\x51\x50\x2f\xad\xf3\xfb\x58\x5f\x1a\x07\xad\x11\x4c\x81\x85\x52\x64\xcc\xa6\xe8\x81\x8a\x34\x13\x83\x7e\x62\xd0\x49\x0c\xba\x8a\x41\x7b\x31\x28\x3c\x06\x65\xc6\xa0\x3f\x18\x14\x0f\x83\x5a\x62\xd0\x40\x8c\xd6\x16\x9c\x10\x75\x36\xdf\x70\x97\x79\xbe\xd1\x4a\xa3\x53\x1b\x3e\xa9\x63\x8a\x7e\x34\xe0\x82\x2e\x5b\xcc\x5f\x5a\xa9\x2b\x7c\x0f\x7f\xb9\xa2\x89\xd5\xac\x5a\x53\x59\xd3\xc6\xeb\xec\x09\xdb\x61\x35\xf9\xcf\x6a\xd5\xbf\x45\x53\x75\x65\x17\x77\x2b\xcc\x47\x55\xc1\x32\xfc\x31\x76\x3f\xec\x80\x5d\xec\x80\x16\xe0\x29\x4c\x7b\x76\x97\x4f\xda\xd4\xa3\x4f\xf1\x04\xc1\xde\x6c\x3e\x51\x85\x9f\x32\x23\x9f\x44\xaa\xb7\x9a\xdd\x30\xe8\x07\x75\xe9\x44\xf4\x27\xd5\x77\xd1\x46\x14\xb2\x7b\x14\x1f\xde\xc2\xe2\xbc\x7a\x1c\x9a\xdd\x02\xd7\x29\x70\x9d\x02\xd7\x29\x70\x9d\x02\xd7\x29\x70\x9d\xd4\x0d\x52\xf8\x3a\x67\x97\x87\x58\x79\x15\xa1\xa7\x22\xf4\x14\xca\x4e\x45\xe8\xf9\x53\xfc\xb1\xf2\x2a\x42\x4f\x61\xed\x14\xd6\x4e\x61\xed\x14\xd6\x4e\x45\xe8\x29\xb8\x9d\x82\xdb\x29\xb8\x9d\x82\xdb\x29\xb8\x9d\x82\xdb\x29\xb8\x9d\x82\xdb\xa9\x08\x3d\x15\xa1\xa7\x04\xf2\x14\xee\x4e\xe1\xee\x54\x84\x9e\x8a\xd0\x53\xe8\x3b\x85\xbe\x53\xe8\x3b\x85\xbe\x53\xe8\x3b\x95\xa2\xa7\x52\xf4\x14\x06\x4f\xa5\xe8\x29\x18\x9e\x4a\xd1\x53\x29\x7a\x0a\x8c\xa7\xe0\x49\x0a\x8f\xa7\xf0\x78\x0a\x8f\xa7\x70\x4a\x0a\x92\xa7\xa0\x4a\x0a\x92\xa7\x82\xf4\x54\x90\x9e\x02\xe6\x29\xb4\x92\xca\x6c\x53\xd8\x3c\x85\xcd\x53\x41\x7a\x2a\x48\xcf\x66\x9b\x6b\xea\x00\x05\xe9\x29\x9c\x9e\x02\x32\x29\x5c\x43\x2d\xb7\x5a\x7d\x59\x6e\x0a\xd2\x53\xb0\x3d\x05\xdb\x53\xb0\x3d\x85\x6e\x52\x28\x26\x05\x70\xb2\xdf\x7e\xab\x6a\x0a\xbc\x67\xa7\xd6\x0b\xbc\xa7\xc0\x4b\x0a\xbc\xa7\x80\x0c\x52\x82\x6a\xf5\x85\x45\x02\xad\xcf\x8c\x78\x54\x8d\x1e\x4e\xb8\x67\xe4\x3f\xb3\xe3\xad\xd4\x22\xc8\xc2\xaa\xfe\x56\x1a\xb1\xcf\x38\xcc\x2e\xf3\xe9\x4f\x9a\xa1\x13\x93\x5c\xd0\x92\x30\x92\x29\xcf\x3e\x1c\xde\xcd\x59\xfe\xd0\x4a\xbc\xd6\x61\x57\x44\x19\x88\x17\xde\x40\xf3\x82\x39\x38\x78\xde\x9e\x95\xe8\x59\x77\x9e\x75\xa7\x49\xba\x9e\x24\xa6\xa7\xd4\xf1\x59\x83\xde\x3f\xd5\x64\x9c\xdf\xc4\x2f\x9d\xd9\x4c\xbb\xdc\xaa\xd1\x3c\xbe\xcf\x1a\x81\x4b\xb5\xda\xd6\xa5\xda\xda\xce\x84\x4e\x85\x1b\x4a\x00\x90\xc6\x48\xe9\xa5\x8e\x14\x74\x8e\x82\xc7\x29\x56\x40\x6c\xca\x7a\x14\x88\xa2\x35\x8c\x0e\xa5\x09\xca\x41\x41\x45\x28\x68\x03\xc5\x4f\xd3\xc7\x8a\x36\x15\x64\x2d\x7e\x9b\x66\x67\xc7\xd3\x5f\xc7\x89\xe9\x10\x85\x0e\xcc\x17\x5a\x5c\xb4\x3e\x97\xa7\x87\x53\x3f\xb0\xc8\x47\x33\xe8\xe3\xe9\x0f\xdc\xfc\xb1\x78\x78\xd6\x81\x51\x42\x8b\xf8\xcb\x03\xeb\x79\x60\x49\x8f\xd5\x14\x3d\xf6\x98\xeb\x58\x71\xec\x5e\x31\x91\xd7\x99\xda\x56\x20\x7a\xce\x79\xfd\x89\x6f\xfe\x8d\x22\xe3\xcd\xfa\x25\xd8\x98\x02\x80\x94\xd9\xab\x35\xde\x60\x91\x94\x8d\x14\x36\x4c\x89\x1b\x29\xcc\x98\xca\xd2\x53\xfa\x46\x4a\xdf\x48\xc1\xc3\x94\x88\x94\x52\x39\x9a\x87\x32\x85\x28\xb3\xd3\x3a\xa4\x26\xa5\x40\x7d\x2a\x51\x4f\xe1\xfa\x14\xc0\x4c\x41\xfb\x14\xb4\x4f\x61\xc9\x14\xb4\x4f\x41\xfb\x14\x84\x4c\xa1\xfb\x14\xba\x4f\x85\xea\x29\xe0\x99\x0a\xd5\x53\xd8\x33\x85\x37\x53\x78\x33\x15\xaa\xa7\xd0\x65\xb6\xae\x90\x90\x7e\x0a\xe9\x77\x61\xa0\xd2\xd7\x6a\xf5\x82\x42\x12\xa6\x52\xb8\x32\x05\xf6\xb1\xec\x57\x5b\xbd\x04\x36\x53\x78\x3f\x85\xf7\x53\x78\x3f\x05\x2a\x53\x68\x34\x85\xf7\x53\x00\x36\xad\x35\x29\xc8\x9f\x4a\xd4\x53\xa8\x3f\x85\xfa\x53\xa8\x3f\x85\xfa\x5b\x77\x29\x85\xfa\x53\xa8\x3f\x05\xf9\x53\x90\x3f\x05\xf9\x53\x90\x1f\xe1\x5b\xb5\x7a\xc1\x1f\x01\xff\x14\x8c\x4d\x61\x7f\xf4\x7a\x93\xe6\x5a\xb5\xfa\xc2\x1f\xc1\xff\x14\xfc\x4f\x61\x9c\x14\xfc\xcf\x2e\x3e\x52\x9c\x9e\x52\x00\x52\x0a\x40\x4a\x01\x50\x68\x59\x6d\x2b\x95\x07\x0a\x9a\x1a\x8d\x3c\x06\x58\xb4\x63\xd1\x96\x5a\xec\x93\x95\xcd\xbc\xae\x7c\x92\xbf\x62\xd1\xd7\xc6\x00\x1d\x0b\x33\x28\x9e\xec\xc0\x30\x1d\xf8\xa7\x03\xbf\x75\x1d\x6b\x15\x7d\x4b\xbf\xc5\x71\x1b\x98\x74\x03\x03\x6e\x60\x89\x0e\x4c\xcf\xb1\x3a\x21\x17\x5d\x18\xc6\xd9\x58\xad\xa8\xf0\xa1\xca\x69\xed\x14\xfb\x26\x64\x95\xb1\x11\xe9\x20\x72\xac\x59\xd9\x29\x6f\x8f\xb2\x67\x6a\x1d\xdf\xe6\x36\xf6\x09\xf2\x19\x2b\xd7\xb5\x36\x5d\xab\xd2\xb5\xfa\x5c\xab\xcf\xb5\xee\x5c\x2b\xce\x6d\xae\x62\x6b\xcd\xb5\xd6\x5c\x6b\xcd\x5d\x5d\xa6\x3d\x9c\x13\xfe\xab\x8e\xc2\x6a\x72\xad\x23\x97\xe5\xf0\x7d\xcd\x89\xbe\x9a\x61\xb4\xd3\x93\xa9\x80\xe1\x61\xcd\xd5\xac\xd2\xca\x4b\x87\xcf\xaf\xb6\xb5\x47\x15\x8b\x25\x7d\x1f\xc1\xba\xf4\x9c\x33\x3b\x91\xf9\xf4\x7f\xbb\x2f\x72\x21\xac\xa8\xec\xb7\x94\x92\x9c\xb7\x15\xc9\xbb\x9c\x5f\x72\x34\x4f\x4e\xf2\xc8\x25\x5f\x7a\x52\xcb\x4a\x09\xa1\xc9\xa2\x4b\x3b\xe2\xec\x52\x77\xe4\x81\x49\xe9\x38\x5f\xcf\x11\x6b\x96\x94\x81\x94\x36\x92\xd2\x46\x52\x3a\x40\x4a\x1b\x49\xe9\x03\x29\x61\x24\x25\x05\xa4\x84\x91\x94\x30\x92\x92\x02\x52\x52\x40\x2a\x4b\x4f\x81\xfa\x94\x36\x92\xd2\x46\x52\x12\x41\x0a\xa8\xa6\x64\x81\x94\x36\x92\x56\xab\x94\x36\x92\xd2\x46\x52\xda\x48\x4a\x1b\x49\x69\x23\x29\x6d\x24\xa5\x8d\xa4\xb4\x91\x26\x2b\x4b\x09\x23\x29\x61\x24\x8d\x93\x54\x90\x9e\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x8f\x5a\x6d\xa6\xe0\x7f\x0a\xfe\xa7\xe0\x7f\x0a\xfe\xa7\xe0\x3f\x36\xfd\x6a\xf5\x85\x3c\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x5d\xf3\x93\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x4d\xe9\x90\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x62\x43\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\xad\x00\x95\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xf8\x9f\xc2\xe3\x49\xb7\x31\xed\x0b\xf2\x15\xfe\xa4\xfd\x45\x4a\xa5\x4f\x74\x07\x89\x6d\x3d\x79\x5a\xf2\x21\xb8\x50\xb0\x99\x28\x9e\x92\xff\x24\x5f\x93\x5e\x6e\x9f\x74\xe9\xb4\x71\x8b\x6b\x39\xe9\x81\xa6\x1d\xc7\xa5\x1d\x7c\x61\xc5\xfd\x0e\x32\x40\x73\xe7\xd1\xa9\xe4\x27\xb9\x7c\x26\xc9\x57\x73\xff\x41\x7a\x41\xa5\x26\x67\xcc\x1d\x28\xd1\x47\x1f\x13\x84\x18\xc4\x27\x08\x5a\xde\xaf\x19\x46\xa3\xeb\x2f\x91\x86\x37\xef\x5d\x4b\x3f\x45\xf3\x60\xf9\xd9\xf4\x49\xf6\xf1\x25\x1a\x81\xaf\x2b\x5b\xa8\xc6\x27\xe4\x5e\x9a\x93\xa6\x25\xb0\x14\x5e\x5d\x25\x63\x17\x15\xfb\x8d\x96\xdb\x25\xb7\xc5\xad\x72\x27\xb9\x08\x8e\xf3\xab\xe6\xe1\x27\x12\xce\x48\xfc\x51\xba\xab\x82\xb8\x6a\x99\xae\x0d\xee\x55\x3d\x72\x39\xda\x2f\x3a\xe9\xab\xe6\xe4\xb6\xe4\xcc\x6c\xce\xa1\xad\xf6\x7d\xe0\xd1\xc1\x87\x2a\xe4\x75\x5b\x92\x4b\xe6\xdf\xc5\x04\xf0\xe3\x5b\x65\xba\x5e\x86\xea\xc5\x42\x71\x77\xf3\x7c\xa8\x4f\x5d\xae\xc1\xf6\xae\x49\xf0\xef\xfe\x1d\x1f\x67\x76\x5b\x7d\x05\xc4\x6e\x0b\x82\xfd\x86\xa4\x25\x4b\xbe\x48\xca\xab\x48\x19\x15\x29\xa3\x22\xe5\x8b\xa4\x7c\x91\x94\x2f\x92\xf2\x45\x52\xbe\x48\xca\x17\x49\xf9\x22\x29\x5f\x24\xe5\x8b\xa4\x0c\x8c\x94\x2f\x92\x4d\xa5\x2d\x8b\x22\x65\x5a\xa4\xec\x8a\x94\x2f\x42\x5e\x75\x2a\xd6\xab\x56\x5f\x20\x24\x5f\x24\xe5\x8b\xa4\x2c\x8d\x94\x2f\x92\xf2\x45\x52\xbe\x48\xca\x17\x49\xf9\x22\x29\x5f\x24\xe5\x8b\xa4\xe0\x7f\x0a\xfe\xa7\xe0\x7f\x0a\xfe\xa7\xe0\x7f\x0a\xfe\xa7\xe0\x7f\x0a\xfe\xa7\xe0\x7f\x0a\xfe\x63\x78\xad\x56\x5f\x50\x24\xf8\x9f\x82\xff\x29\xf8\x9f\x82\xff\x29\xec\x9f\xc2\xfe\x29\xec\x9f\xc2\xfe\x29\xec\xdf\x42\x94\x96\xa3\x6a\x43\x3b\xb5\x4b\xbb\xb5\x47\x9b\xda\xab\xd5\x17\x08\xa9\x50\x27\x1c\x35\x71\x3c\x54\xab\x2f\x10\x92\xd7\x92\x2a\xd4\xbb\xea\x26\x55\xa8\xa7\x9c\x95\x54\xa1\x6e\xe9\xab\x56\x5f\x20\xa4\x42\x3d\x55\xa8\xa7\x0a\x75\xa2\x0b\xd5\xea\x0b\x84\x54\xa8\x5b\x42\x27\x81\xee\x6a\xf5\x05\x42\x2d\xa0\xad\x42\x1d\x27\x71\x5c\x26\xf6\x6d\x61\x15\x26\xf9\xdd\x00\xe0\x98\x4d\x60\xa9\x25\x4c\xee\xe9\x51\x67\x04\x1e\x73\x90\xb9\x7d\x19\x41\x97\x01\x7e\x39\x66\xae\x60\xcb\x4d\x10\x62\x29\x9e\x78\x59\x26\x57\xc1\xb4\xa5\x9b\xeb\x27\xc6\x8b\xd9\x0e\x57\x9f\xa0\xdf\xb3\x5d\xc0\xb4\x11\xf2\xea\x62\x36\xc3\xd0\x68\x5e\xb1\xce\xde\x6e\xd6\xa2\x5f\x82\x43\xa7\x2a\x08\xde\x0a\xae\x76\x6d\x37\x89\x8b\xf3\x13\xcd\x5a\xfd\x79\x27\x17\x38\x5e\x9d\x5c\xd0\x89\x06\x3e\xef\xc0\xa6\x14\x8f\xdb\x95\xee\xc2\x9b\x3f\xd1\x9d\x0e\x4e\x8e\x6e\x85\x28\x25\x4a\x20\xf7\x3f\xf2\x69\x8e\xca\xe3\xf3\x9a\xf3\x6f\x75\x40\xb5\xc3\xad\xfe\xdb\x15\xde\x04\xe1\xbb\x2e\x85\x9c\xfe\x51\xef\x7b\xa4\xd5\xe4\x3f\x3a\x1a\xda\x31\x4e\x9e\x1d\xbe\x5d\x54\x68\x34\x11\x83\x1a\x62\xcc\xd3\x04\x19\xa8\x63\xc5\xb9\x25\x56\xc5\x5c\x4d\x8d\xda\xba\xcb\x1b\x51\xa9\x6f\x98\x47\x4c\x11\xc9\x32\x8f\xc9\x94\xe4\xdc\x6a\x8e\xcf\x40\x98\x35\xa1\x23\xde\x8f\x08\x00\xc3\x7c\xeb\x76\x49\x07\x7d\x12\xb0\x91\xb8\xb1\xcc\xaa\x35\xd0\xc0\x0f\x3a\x83\x54\x2c\xd3\xda\x3a\x89\x30\x28\xf3\x77\xbe\x41\x0a\x7e\xc4\xda\x53\x29\x0d\xbb\x6d\xb2\xdb\x26\xbd\xad\x6a\xf5\x05\x3f\x52\xad\x12\x0d\x6b\x4a\xa3\xa2\xd7\x58\xad\xbe\xe0\x27\xc1\x8f\x62\x9c\x94\x55\xc3\xf2\xab\x56\x5f\xf0\x23\xc3\x26\x65\xd8\x24\x92\x85\x94\x67\x93\xf2\x6c\x52\x9e\x4d\x4a\xb8\x4a\x04\x2e\x28\x6b\x27\xfd\xa0\x99\x72\x6e\xd8\x9d\x93\x35\x59\xad\x5e\x80\x47\x12\x57\xf2\x02\xa4\xfc\x1b\xf6\x68\xb5\xfa\x02\x1e\x59\x38\x6c\xd6\x6a\xf5\xf5\xaa\xe5\xe2\xb0\x62\xab\xd5\x17\xfc\xc8\xcb\x49\x79\x39\xad\xeb\x9f\x34\x68\x52\x8e\x4e\x2a\x11\x4a\x1a\x34\x29\x5f\x27\xa5\x96\xa5\x72\xa1\x94\xbb\x93\x72\x77\x58\xcc\xd5\xea\x0b\x7e\x90\x78\xa6\x0c\x9e\x94\xd2\xc6\x32\xae\x56\x5f\xf0\xd3\x51\x49\xd3\x28\xe5\xf7\xa4\xfc\x9e\x54\x70\xc4\xea\x9d\xec\xe3\x6a\xf5\x05\x3f\x08\x43\x53\xea\x5a\xd2\x13\x49\x99\x40\x68\x37\x67\x53\xc3\x34\xed\x54\x5e\x11\x0e\xc5\x56\xc1\x22\x09\x13\x22\x5e\xab\x83\x4b\xfb\xef\xe8\xd1\xeb\xd1\x58\x16\x76\xd8\xd5\x50\xf7\x8c\xf9\xb5\x12\x3f\xbf\x2d\x6f\xe9\x44\xf2\x35\x3f\x5e\xdd\xb2\x51\x26\xde\xf5\xf9\x35\xef\x6e\xad\xe8\x13\x3f\xcc\x6c\x7e\x1b\x0c\x99\xf3\x6b\xd6\x65\x9c\x5d\x5d\x6b\xc8\xb1\x33\x85\x78\x5a\xa8\x61\x36\xcb\xc4\xe0\xb0\x15\x10\x9c\xb6\x5a\xed\x18\x99\x58\xec\xe6\xe8\x6f\xe0\x70\x0e\x45\xef\xd2\x69\x66\x60\x75\x88\xed\x13\x57\xc2\x21\x33\xa3\x65\x70\x48\x5e\x08\xdf\x4c\x6e\x99\xc9\xd6\x99\xa4\x1b\x26\x51\xaf\x89\x3d\x63\xb2\x30\x66\x8b\x92\x4f\x37\xdd\xa2\xea\x5c\xb8\x73\x67\xa7\xfa\x34\x1b\x86\xff\x72\xa4\x4b\xce\x99\x1c\xb9\x93\x53\x77\x72\x3c\x3e\xdb\xc0\x27\x73\xf9\xd9\xaa\x3c\x9b\x14\xce\xae\x49\x56\xb5\x8e\x71\xe6\x6c\xe7\x6c\x9c\x8d\x04\xdf\x6d\x3a\x9e\x6d\xc5\xb3\xa1\x78\x36\x14\xcf\x26\xe2\xc9\x3a\x27\x97\x57\x08\xee\xbf\xd7\x7f\x71\x6e\xd8\x32\x3c\x9b\x85\x67\xb3\xf0\x6c\x13\x1e\x04\x0f\x1b\xc6\xe0\x90\x54\x2d\x31\xc3\xb6\x31\x38\x1e\xa3\x1d\x8f\xb0\x1b\xdb\xfc\x4c\xd8\x9d\x30\x3d\xd5\xb7\xe5\x05\x3f\xd2\xcc\x92\xc0\x51\x4a\x36\x4b\x59\x99\x29\x5d\x2a\xa5\x9c\x25\xf4\x4f\x89\x67\x29\xf1\x2c\x25\x9e\xa5\x7a\x38\x9b\xc4\x6a\xf5\x05\x3c\x52\xd1\x6c\x1b\xab\xd5\x17\xf0\x48\x48\x4b\x55\x71\xa9\x4e\x2e\x55\xe1\xa7\x6a\xb9\xb4\xa2\xa4\xd5\x25\x09\xd7\xa4\xd4\x35\x9b\xca\x6a\xf5\x05\x3c\x56\x9d\x94\xcc\x96\xd6\x9b\x94\xd2\x96\x6a\xe9\x9a\xe9\x25\xad\x46\x29\xf7\xd3\x26\xb4\x5a\x7d\xc1\x8f\xf5\xc9\x26\x74\xfe\x84\x6e\x25\x32\xa5\x7a\x3b\x9c\xba\xd5\xea\x0b\x7e\x70\xb9\xd8\xfc\x4e\x9b\xdf\x6a\xf5\x05\x3f\x2d\x2a\x2d\xf1\xa9\xd9\x1d\x7f\x1b\x5b\xe9\x4f\x29\xfd\x29\xa5\x3f\xa5\xf4\xa7\x94\xfe\x64\x4b\x52\xad\xbe\xe0\xc7\xba\x98\x12\xa2\x52\x42\x54\x4a\x88\x6a\x36\x7e\x5b\x9b\x6a\xf5\x05\x3f\x92\xa3\x12\x73\x48\x4a\x91\x4a\x29\x52\x89\x39\x24\xd5\xf8\xa6\x74\xa9\x54\x37\xdc\xb2\x51\x29\x69\xca\x56\x68\xda\xec\x54\xab\x2f\xf8\x91\x46\x95\xd2\xa8\x82\x9b\x5a\x15\xce\x0c\x8e\xc1\xe0\x12\x0c\x2e\x41\xb5\x3b\xd5\x1a\x81\xcd\xdc\x72\x7c\x82\xeb\x9b\x13\x2f\x38\xee\x82\x9b\x2e\x7e\xc2\x4d\x38\xac\x56\xb3\x6c\xf5\x48\xc6\xcd\xbe\x5a\xe0\xee\xb5\xb0\x09\x86\x1c\x2c\xbb\xdc\x68\xc1\x69\x16\x9c\x66\xc1\x51\x16\x9c\x63\xc1\x39\x16\x2d\x4a\xce\x21\xa6\xfa\xa7\x5a\xff\x35\x17\x38\xbe\x82\xcb\x8b\x70\xf0\xec\x0c\xe5\xe0\xd4\x0a\x8e\x2c\x15\x1e\x75\xac\xd7\xf2\x5f\xf7\xbb\x9b\xe5\xc6\x5d\x9b\xe9\xa1\x7e\x25\x76\xf3\x10\x32\x16\xb8\x20\x82\x0b\x22\xcc\xfd\xe0\x7c\x50\x05\x52\xad\x33\x09\xc8\x70\x3e\x84\xca\xf5\x25\x21\xe1\xfb\x05\xa0\x83\xcc\xcb\x2f\x05\x6b\xfe\x45\xdb\x73\x6f\xdf\x16\xc8\x5a\xe4\x3a\x7d\x52\xa0\xfe\xd4\xb5\x3f\xc9\x45\x4f\x75\xfb\x93\x5c\xf4\xb8\x7c\x1f\xd3\xe6\x31\x6d\x1e\xbb\xf3\x49\xf6\x7b\x76\x26\xef\xe3\xae\x17\x34\x7c\x12\x7e\x9e\x24\xa2\xc7\x90\x79\x47\x70\x8a\x13\xef\x49\xfb\x79\x59\x48\xfe\xa4\xfd\xbc\xf4\x8b\x9c\x78\x2f\xfb\x7b\x96\x4f\xb0\x22\xb7\x81\x83\x79\x26\x25\xe0\xa5\x04\xbc\x94\x80\x97\x12\xf0\xf2\xf5\x39\x50\x48\x1a\x9e\x6d\x7b\xb5\xc6\x2a\x14\x62\x0b\x66\x1b\x4d\x92\xf4\x52\x92\x5e\xe2\xa2\x49\x76\x61\x4a\xd5\x6b\x7e\x33\x1b\xf3\x6a\xf5\x82\x42\x12\xf6\xb2\x79\xd2\x24\xec\x71\x11\x54\xab\x2f\x14\x92\xbc\x97\x82\x89\x29\x85\x2f\xa5\xf0\x25\xeb\x33\x25\xf2\xa5\x44\x3e\xce\x84\x6a\xf5\x85\x42\xf8\x6a\x52\x52\x1f\x27\x43\xb5\xfa\x42\x21\x49\x7d\xc9\x4e\xe5\x5e\xa8\x56\x5f\x28\x24\xc1\x2f\x25\xf8\x71\x2f\x54\xab\x2f\x14\x62\xd7\xa6\x34\xbf\xc4\x63\x93\x94\x35\xf0\x43\x56\xab\x2f\xfc\x91\xf8\xc7\xed\x50\xed\xfb\x9b\xb7\xec\xe0\x2b\xfb\xef\xca\xfe\xe3\x70\xa8\x16\x99\x5c\xc1\xcf\x95\x03\x78\xe5\x00\x5e\x39\x80\x17\x8f\xcd\x6d\x15\x49\x3c\x36\x57\x3e\xe0\x45\x47\x77\x0d\x49\xde\x8e\x6a\xf5\x1d\xfa\xf2\x53\xca\x4f\x47\x5d\x3c\xaf\xec\xbf\xfb\x23\x11\x5f\x3e\xe1\x1f\x45\x78\x71\x15\x58\xde\xd6\x43\x92\x1b\x75\x95\x59\xa2\xf3\x9f\x9c\x18\xd5\x1a\x50\x06\x32\xff\xe5\x23\x6f\xf2\x78\x2b\x9f\x0c\xc1\xc7\x97\xf9\xd2\xb4\x90\xc5\xf3\x48\xc1\xbc\x16\x76\x90\xad\xf3\xc4\xa2\x5f\xd9\x5e\xd5\xfa\xaf\x28\xab\xb8\xf4\x13\xb5\x7e\x3c\xc7\x4f\xfe\xe0\x93\x59\xf6\x78\x31\x1f\x0f\xf1\xb3\x68\x5c\x4b\x01\x2a\xbb\x6a\xd1\x88\xd2\xae\x43\x75\xa1\x24\x35\x94\xbf\x86\x32\xc2\x50\x38\x17\xca\xf9\x42\x49\x61\x28\x1a\x0c\x65\x78\xa1\x94\xae\x3e\xd9\x8e\x8f\xcf\xb5\x8b\x6e\x65\x4b\xb2\x5c\xad\xdf\x42\xe3\xa7\x18\x26\x14\x0e\x85\x92\x98\x50\xde\x13\x0a\xed\x42\x61\x4c\x28\x28\x0a\xc5\x75\xa1\xac\x28\x14\xdd\x85\x82\xa2\x50\x84\x13\x8a\xe5\x42\xb9\x5d\x28\x25\x0a\x85\x34\xa1\xa0\x2e\x94\xee\x84\x12\x94\x50\x82\x12\x07\x23\xd0\x91\x21\x28\x7f\xbf\x8e\x5d\xd5\xeb\xe3\x3a\x53\x8e\x80\xb2\x99\x90\xb9\x5f\x9f\x53\x50\xbf\x7d\x9c\x8e\xdd\xc5\x6d\x65\x75\xc7\xcf\xe7\x34\xae\xbc\xbb\x53\xbb\x8e\x38\xfc\xd6\x07\xf5\xc6\xa9\xfd\x46\x1c\x31\x01\x59\xf3\x21\xef\x35\x64\xaf\x87\xcd\x63\xc8\x1a\x8e\x96\x24\xba\xb2\xbd\x10\x24\xcf\x56\x57\xbd\x32\x6e\x9a\xba\xfe\x22\x89\xb8\x72\x6a\x2e\x6a\xc6\x8b\xd6\xe1\xca\x94\xb9\x4d\xfb\x8a\x82\xe1\xca\x91\xb9\xc8\x17\x2e\xf2\x85\x8b\x7c\x81\x1b\xad\xda\xab\xf5\x3d\x0a\xef\xc5\x2d\xaf\xb8\xe5\x15\xb7\xbc\xe2\x96\x57\xdc\xf2\xca\x9d\xb9\x72\x67\xae\xdc\x99\x2b\x77\xe6\xca\x9d\xb9\x61\x8c\xb5\x3a\xa3\x08\xe7\x95\x47\x43\x9b\xb9\x5a\x7d\xaf\xbe\x22\x0c\xc8\x1a\x6e\x13\x6f\xcb\xa6\xb9\x62\xa1\x1c\x7a\xd5\xea\x2b\xfe\x60\x9b\x7c\x45\x23\xaf\xfc\x9a\x2b\x52\x7a\x51\x39\x5c\xb9\x36\xdc\x71\xb3\x29\xc0\xaf\x5c\x9b\x2b\x82\x7a\x65\xdc\x5c\x19\x37\x57\x34\xf5\xce\xd6\x97\xf5\x3c\x45\x56\xef\x6c\xda\x60\xc8\x20\xbe\x7a\xc5\x57\xaf\x8c\x9b\x2b\xe3\x86\x8b\x6f\x5e\x79\x37\x57\xa1\x72\x8b\x84\x5c\x39\x38\x97\x40\x04\x17\x62\xb5\xfa\x86\xbe\xa1\xaf\x37\x25\x43\xe7\xca\xd0\xb9\x32\x74\xae\x0c\x9d\x2b\x43\xe7\xfe\xd4\x25\xd1\x13\xc8\xd0\xe1\xe4\xac\x56\x5f\xef\xb7\x25\x41\xe4\xe9\x70\x4b\x56\xab\xef\xd2\x97\x8c\x12\xa7\xa5\x4c\xf3\x68\xc5\xee\x23\xbf\x8f\x2b\x23\xe4\x74\x07\xd7\x47\xa0\xf7\x0e\x99\xd7\x21\xaf\x3c\x64\x73\x07\xc7\x45\x20\x0e\x0f\x99\xd4\x21\x5f\x3b\x64\x58\x47\xb6\x36\xde\x3f\xba\x13\xe5\x83\x9a\xca\xf8\x13\x42\xb2\x75\x48\x39\x0d\xfc\x09\x21\x11\x3c\x24\x85\x87\x34\xee\x90\x4e\x1d\x52\xa8\x43\x62\x6b\x24\x17\xb3\x44\xea\x90\x96\x1a\xad\x5e\x80\x4d\x35\xa4\xb1\x86\x4a\xf6\x90\xa2\x1d\xd2\x52\x03\x4b\x43\x48\x06\x0d\xc9\x91\x91\xd8\xb1\xa4\x69\x86\x34\xcd\x48\x89\x74\x89\x2f\x4b\x42\x5b\xe4\x10\xc2\x11\xde\x96\xb2\x16\x12\xd4\x22\x9b\x15\x07\x9b\x7c\xb3\xf2\x25\xff\xb1\xd4\xcc\x90\xca\x16\x19\xfd\x9d\xdc\xeb\x35\xf0\x43\x52\x57\x48\x11\x0b\xa9\x5d\xf1\x9a\xe3\x58\xe2\x75\xb6\xde\xc6\x3f\x8f\xe9\xcd\xf8\x1e\x5e\x5b\x41\xc7\x10\x9e\x0c\x21\xa2\x10\x22\x0a\xa1\xa0\xe8\xd0\xce\xe1\x23\x3c\xbc\x83\xa0\x6b\x02\xad\x6a\x15\xfc\x34\xdf\xb4\x92\x1b\xfe\x3f\x10\x35\xf1\x39\xce\xc3\x0b\x78\xf8\xff\x0e\xcf\xdf\xe1\xed\x3b\xf8\x28\x81\xd3\x04\x4e\xd5\x1a\x6e\x58\xec\xe9\x8b\x5c\x69\x3a\x57\x9a\xce\x95\xa6\x73\xa5\xe9\xf0\x76\x57\x6b\xb8\x6d\xc3\x8d\x68\xa0\x34\x9d\x2b\x4d\xe7\x4a\xd3\xb9\x2d\x54\x2d\x4d\x07\x57\x63\xb5\xfa\x02\x21\x69\x3a\xfc\xe8\xd5\xea\x7b\x3a\x24\xa9\x6f\xea\x0b\x8a\xa4\xe9\x5c\x69\x3a\x7c\xf0\xf3\x72\x55\xdd\xd9\x9a\x3a\x26\xf7\x6a\x11\x55\x53\x50\x4a\xca\x95\x86\x72\x59\xf9\x57\xd2\x49\x2b\x90\xf1\xc4\x57\x2b\x24\x39\x9b\x51\xc4\x99\x26\x96\x74\x93\x2b\xdd\xe4\x62\x7b\xb8\x92\x06\xae\x1d\xc2\x6d\xc1\x47\x09\x01\x3c\xf4\x93\xcf\x7e\x5e\xe1\xff\x2b\xe4\x8f\xad\x7b\xde\xd6\x90\x13\xb6\xbf\xc2\xf6\x77\x35\x17\x24\x80\x14\xb0\x17\x25\x98\xa2\x04\xd5\x3a\x13\x28\x0a\xd2\x5f\x15\xf7\x2d\xde\x7d\xed\x25\xae\xf0\xfc\x15\x92\xbf\x2d\xaf\x6f\x17\x71\xed\x1f\xae\x70\xfb\xb5\x8b\xb8\xc2\xed\x57\xb8\xfd\xda\x51\x5c\x7b\x89\x6b\x17\x71\x85\xd5\xaf\xb0\xfa\xb5\xa3\xb8\x76\x14\xd7\xce\xe4\x0a\xab\x5f\xbb\x8b\x2b\xac\x7e\xed\x31\xc4\x1c\xaa\xd5\xd7\x53\x6d\x05\x23\xfb\x0d\x51\x88\x1a\x45\x46\x9d\xb2\x13\x6e\xbd\xc3\x4d\x77\xb2\x6b\xdb\xf7\x25\x84\x4d\xaa\x5b\x71\x0e\xd9\x5f\x2a\x7d\x41\x9f\x2f\x68\xf5\x05\x7d\xbe\x6a\x95\x27\xa9\x4f\x14\xe7\x79\x9c\x45\xef\x31\x6d\x9e\xa4\x1c\x60\xf6\x24\x13\x3f\xe1\xb1\xdd\x9a\x0d\x1f\x73\x40\xdc\x09\x2f\x59\x60\x73\x8a\x33\x66\x9b\x24\x8e\x31\xb6\x8f\x56\x93\x12\x11\xea\xa5\x7b\xd2\x81\xa3\x4e\xd7\x7c\xa3\x47\x22\xe3\xa1\x5b\x70\x46\x4b\xee\xb6\xee\x42\x33\xaa\xf7\xf7\x67\x1f\x3b\x93\x51\x20\x1d\xe7\x0c\x5a\x0b\x92\x7a\x4f\xcb\x04\xf3\x01\xe1\x32\x0a\xac\x47\x71\x26\x63\xa4\xd9\x51\x6b\x59\x08\x4c\x2f\xd5\xe2\xaa\x5a\xcd\x20\x8c\x75\xca\xb3\xc5\xda\x71\x7e\x4a\x0c\xa7\x55\x1f\x7c\xd2\x2a\x0b\x3c\xcd\x4a\xd1\x0e\x4e\x8f\x23\xdd\xfc\x34\x67\x6b\x6b\xb0\x49\x51\xda\x96\x77\x45\x5f\x93\xe2\x60\xb5\x74\x98\xb0\xf7\x58\xd8\x37\xac\x7b\x22\x6c\x4f\x1c\xec\x85\x24\x2a\x94\x87\x2f\x60\x1d\xd1\xf3\x87\xa5\x4d\x5a\x52\x3c\xcc\x1b\x4f\x3c\xed\x89\xa7\x3d\xec\xa8\xbb\x59\xec\x25\x11\xee\xdf\x68\x5c\xdd\x1a\x51\x66\xdc\x6e\x2d\x40\xf3\xce\xee\xf4\xda\x9d\x5e\xfb\xd2\xdb\x2c\xff\x76\xa4\xb7\x95\xc9\xec\x4b\x6f\x0b\xa0\xdb\x97\x5e\xc8\x79\xed\x4b\xaf\xa0\xf8\x15\x14\xbf\xbb\x05\x97\xa1\xcd\x6e\x51\x54\x68\xc3\x7b\x75\x85\xc3\xaf\x70\xf8\xdd\x2d\xe5\x0c\x6d\x84\xc3\xaf\x70\xf8\xdd\xad\xd3\x63\x2e\xf3\x67\x5d\xfe\xac\xcb\x9f\x75\xf9\xb3\x2e\x4f\xd6\x15\xde\xbe\xc2\xdb\xf7\xb4\x64\xaa\xd9\x2a\x80\x7d\x05\xaa\xaf\x40\xf5\x15\xa2\xbe\x42\xd4\x57\x70\xfa\x0a\x4e\xdf\x56\x2b\x11\x9c\xbe\x82\xd3\x57\x70\xfa\x0a\x4e\x5f\xc1\xe9\x2b\x38\x7d\x05\xa7\x3b\x06\x78\x85\xa5\xaf\xb0\xf4\x15\x96\xbe\xc2\xd2\x57\x58\xfa\x0a\x4b\x5f\x41\xe8\x2b\x08\x7d\x05\xa1\x6f\x8b\xe7\x0a\x3f\x8b\xf3\x54\xeb\x9b\x21\xa1\x28\xe2\x3d\xad\xd8\xb4\x5b\xfe\xd5\x39\xd6\x05\x31\x43\x51\xa0\x6a\xfb\x1c\xbf\xe8\x5d\x88\x01\x5e\x31\xc0\x2b\x06\x78\x45\xfc\xae\x88\xdf\x15\xf1\xbb\x62\x7d\x57\xac\xef\x8a\xf2\x5d\x51\xbe\x2b\xca\x77\x45\xf9\xee\xf9\x49\x7e\xfb\x15\xcf\xb9\x35\x1b\x5a\x15\x80\x13\x3b\x52\xa2\x86\xdd\xbe\x40\x7b\x88\x7f\x86\x40\x7b\xfc\xc2\xea\x4c\x7b\xb1\xcd\x10\xe7\x0c\x31\xcc\x10\x99\x0c\xd1\xc8\x10\x8d\x0c\xd1\xc8\x10\x69\x0c\xf1\xc3\x10\x63\x0c\x51\xc4\x10\x21\x0c\x4c\xb8\x81\x7f\x36\xb0\xc4\xc6\x93\xac\xff\x08\xf5\x3e\x9e\xdc\x87\x93\x6d\xd1\x88\x1a\xb6\x9e\xc1\x63\x15\xaf\x59\xcb\x79\x79\x94\x3a\x34\x9f\x52\xbc\x16\x3e\xe6\xaf\x79\x4d\x7a\xba\x30\xa4\xaf\xfe\xaf\xe3\x5a\x05\xe6\x3f\x48\xbd\x28\xd7\xb6\x37\x0e\x9b\x6e\xfe\xf2\x6a\x7d\xfd\xf5\x35\x89\x6a\xde\xce\x4d\xce\x6a\xd8\x92\xcf\xae\xe3\xb6\x5b\x9e\x76\xc8\xfc\xe8\x73\xaa\x74\x9b\xf6\xbd\xd3\x2e\x7a\x92\xf2\x69\x32\xa7\xf9\x35\xd1\x6e\x13\xd7\xa7\x73\xd0\x6c\xa8\x4e\xe2\x83\xaf\xcf\x7d\xa2\x58\xdf\x0e\x79\xaa\x1b\x9a\x6a\x73\xe6\x68\x25\x79\x45\xea\xea\x77\xa6\xfa\xa0\xa9\xf6\x67\xaa\xca\x99\x4d\x04\xa8\xea\x67\x8e\x40\x34\xc2\x0d\x8e\x12\x6f\x82\xbd\x89\xca\x68\x8e\x1f\xd5\x73\xab\xd3\xfb\x36\x95\xe9\x02\xff\x4d\x22\x35\x11\xe6\xcd\xde\x41\x9d\x96\xd6\xb2\xcc\x0a\x06\x5f\xc1\xe0\xdb\xa2\xa8\x2a\xc1\xef\xe9\x89\x6b\xc9\x15\x12\x16\xd4\x9c\x57\x30\xf8\x0a\x03\x5f\x61\xe0\x2b\x00\x2c\xf0\x59\x2d\x0d\x6a\xd3\x5a\xe8\xf7\x0a\xfd\x5e\xe1\xde\xcb\x94\xbb\xc2\xbd\x97\x41\x77\x05\x7a\xaf\x40\xef\x65\xdc\xdd\x6c\x9e\x59\x13\x5a\xa0\x57\x00\xb5\x5a\xbd\x4c\x6b\x86\x9e\xf0\xea\xbc\x4c\xbc\x2b\xd0\x7b\x19\x7a\x57\xa0\xf7\x32\xf7\xae\x40\xef\x15\xe8\xbd\x4c\xbf\xcb\xe8\xbb\xe2\x75\x97\xe9\x77\x45\xea\x6e\x0b\xb0\x8a\xce\x5d\xcb\xb8\x90\x6d\xb5\xbe\x81\xc9\x23\xfe\x76\xc5\xdf\xae\x85\xfd\x5a\xd8\xaf\xc8\xdb\x15\x79\xbb\x22\x6f\x02\xbd\xd5\xfa\x45\x93\xbe\x35\xa8\x45\xde\x6e\xcb\x85\xa8\x67\xbf\xa2\x6d\x57\xb4\xed\x8a\xb6\x5d\xd1\xb6\xdb\xd4\xd9\xe2\x6c\x57\x9c\xed\x8a\xb3\x5d\x71\xb6\xdb\x82\x20\xe2\x6c\x57\x9c\x8d\x38\x51\xb5\x7a\x79\x9b\x22\x6c\x57\x84\x0d\x9d\xf8\x24\xa8\x54\x6d\x7d\xbf\xa8\xda\x15\x49\xb3\xec\x57\x7b\xb4\xa9\x75\x8e\x37\x28\x7a\x76\x45\xcf\xae\xe8\xd9\x44\xd6\x38\x91\x63\xc9\x7c\x0e\x99\xa5\x21\xa7\x34\x64\x87\x86\x8c\xd0\xe8\x2c\xcd\x37\x3a\x5b\xb8\xde\xec\x53\xfb\xf6\xd4\xbe\x3d\xa3\xfd\x8d\xd9\x32\x91\xe2\xb1\x00\xa6\xa5\x3d\x26\xf3\xe4\x1f\xf3\x6f\x7d\x5c\x43\x08\x9c\x03\x3b\x6d\xe0\x99\x0d\xcc\xb3\x81\x85\x36\xb0\xca\x06\x3e\xd9\xc0\x1e\x1b\xb8\x62\xc3\x8d\xc6\x55\x60\x7a\x39\x94\x2e\x82\xe5\x2b\x61\xed\xda\x1e\xde\x2b\x82\x7f\x65\xb9\x5c\x79\x2f\xef\xf3\xb9\xec\x9d\xb7\xba\xcd\x6a\xf7\x47\x95\x77\x6b\x6b\x5d\xc7\x5f\xfc\xc0\xc3\xb3\x31\xbc\xef\xf5\xe7\x51\x2d\xff\xae\xb0\xdc\xa3\xea\xf9\x5a\x8b\x6f\xd8\x29\x49\xf4\x7b\x5f\x0b\x93\x73\x88\xe1\x3b\x7f\x0a\xa4\x9e\x5d\xdc\x1b\x6d\x6d\xf0\x1f\xdb\x83\x5d\xc5\x1c\xf7\x39\x93\x22\xc4\x53\xd8\x44\x1d\x37\x28\xe5\x06\x2d\xdc\xa0\x79\x1b\xad\x79\x3b\x94\xf0\x0e\x4e\x3c\x8a\x16\xd5\x3e\x4c\xed\xa9\xbd\xd5\xee\xfe\xc4\x7f\x0b\xc0\xc6\x8f\xcd\xbd\x56\xac\xc1\xf5\x37\x50\x53\x0c\x85\x92\x43\x11\xe4\x00\x63\x43\xc1\xe2\x50\x68\x38\xba\x08\xa6\xb5\x68\xda\x86\x16\x70\xbd\x02\xae\x57\xa8\xf5\x0a\xb5\x5e\x41\xd6\x2b\xc8\xea\xed\x54\x6b\x48\x9a\xfa\x82\xac\x57\x90\xd5\x1b\x9c\x57\x60\xf5\x0a\xa9\x5e\x21\xd5\x2b\xa4\x7a\xe5\x39\x5c\x91\xb1\x2b\x32\x76\x45\xc6\xae\xc8\xd8\x15\x19\xf3\x7e\xab\xf5\xcd\x56\x74\x79\x11\x57\x7c\xec\x8a\x8f\x79\xfb\xf3\x8a\x8f\x5d\xf1\xb1\x2b\x3e\x76\xc5\xc7\xae\xf8\x98\xd1\x32\x5b\x3d\xe9\x8a\x8f\x5d\xf1\x31\x23\x6a\x5e\xf1\xb1\x2b\x3e\x76\xc5\xc7\xae\xf8\x98\x91\x56\xad\xbe\xe0\x41\x7c\xec\x8a\x8f\x5d\xf1\xb1\x2b\x3e\x76\xc5\xc7\xae\xf8\xd8\x6d\x57\x98\xf8\xd8\xbd\xad\xa4\x0a\x30\xc4\xc7\xae\xf8\xd8\x15\x1f\xbb\xe2\x63\x57\x7c\xec\xfe\x5c\x9d\x60\x43\x7c\xec\x8a\x8f\x5d\x31\xb1\xdb\x0a\x06\xa2\x5e\x57\xd4\xeb\x8a\x7a\x5d\x51\xaf\x2b\xde\x75\xc5\xb8\xcc\x82\x6a\xb7\xf6\x68\x5b\xc3\xad\xcf\xac\xdf\x15\xe3\xba\x62\x5c\x57\x8c\xeb\x8a\x71\x5d\x31\xae\xdb\x8a\xd3\x62\x5c\x57\x8c\xeb\x8a\x71\x5d\x31\xae\x2b\xc6\x75\xc5\xb8\xae\x18\xd7\x15\xe3\xba\x2c\x83\x2b\xc6\x75\x5f\x74\xaa\xbb\x56\xa1\x0f\xce\xdf\x45\xa7\x7a\xb1\x69\x16\xc7\xe3\xe2\xe4\x5c\x8a\x95\x17\x77\xf1\x52\x6a\xbc\xa4\x6e\xd0\xba\x8f\xa5\x8c\x92\xe6\x7c\xd0\x96\x8f\xfd\xd3\x10\xae\xe7\x10\x9d\x06\x9b\xbf\x64\x58\x19\x7a\xad\xd4\x44\xe5\x52\xfe\x12\x5a\xf5\x89\xdb\x6b\xe2\x14\xae\x76\x55\x6b\x67\xd5\x31\x1f\x8b\xc0\x67\x31\xf9\x2c\x26\x5f\xfe\x94\xee\x7c\x42\xa9\xc9\xf2\xf2\x49\xaa\xf8\xa4\x77\x7c\x16\x90\xcf\x82\xf3\x49\xec\xf8\x00\xf6\x27\xa5\xa0\x35\xa9\x3e\xf0\xfc\x59\x88\x50\xd0\xd7\x39\x7d\xa6\xff\x86\xb6\xc6\xc9\x67\x74\x7d\x46\xce\x67\xc4\x7e\x46\xce\x67\x84\x7c\xc6\x06\x76\xd7\xf9\x79\xbf\x9f\x11\xf2\x89\x16\x7e\x22\x3c\x9f\xf7\xf2\xb5\x56\x15\x93\x0a\x6b\x61\x1d\xd7\x77\x4a\xcd\x19\x8c\x26\x7c\xee\x73\x7c\x71\xff\x16\x15\xf1\xf5\x95\xc9\x50\x6d\x1d\x33\x19\x3e\xd1\xc5\x4f\xfc\xf0\x93\xd4\xff\xf1\x20\x7c\x62\x89\x18\xa5\xe7\x67\xe7\xff\x89\x13\x7e\x7c\x01\x9f\x5d\xfd\x67\x9f\xff\xb5\x22\x96\x5d\xd3\x27\x62\xff\xd9\x2f\x7d\xf6\xe1\x9f\x9d\xf9\x67\x8f\xf4\xf5\x0e\x87\x95\x79\xc5\x45\xaf\xb8\xe8\x65\xb2\x5d\x71\xd1\xeb\x4e\xaf\xb8\xe8\x15\x17\xbd\x62\x5c\x57\x8c\x8b\x4a\x7c\xb5\xfa\xc2\x13\x31\xae\xcb\x12\xbd\x62\x5c\x57\x8c\xcb\xea\x50\xad\xbe\xf0\x44\x8c\xeb\xb2\x56\xaf\x18\x97\x55\xa3\x5a\x7d\xe1\x89\x48\xd7\x15\xe9\xba\x22\x5d\xd7\x73\xbe\x6c\xdf\x2b\xd2\x75\x45\xba\xae\x48\xd7\x15\xe9\xba\xde\xc2\x15\xe9\xba\xde\xc2\x15\xe9\xba\x22\x5d\x57\xa4\xeb\xbe\xbe\x77\x78\x22\xd2\x75\x45\xba\xae\x48\xd7\x65\x08\x5f\x91\x2e\xab\xd8\xa4\x30\x3f\xad\x65\xd5\xea\x0b\x4f\x44\xba\xae\x37\x7e\x45\xba\xae\x48\xd7\x15\xe9\xba\xcc\xea\x2b\xd2\x75\x19\xdd\x57\xa4\xeb\x32\xab\xaf\x48\xd7\x15\xe9\xba\x22\x5d\x57\xa4\xeb\x8a\x74\x5d\x23\xe7\x8a\x77\x59\x2b\xab\xd5\x57\xce\xdb\x3f\x88\xe9\x96\x4d\x6f\xf1\xac\xb6\x3f\x59\x5a\x92\xdb\xea\x82\xc4\xbb\x9e\x78\xd7\x63\xc1\x3f\x96\xfa\x13\xef\x7a\x06\xe6\x13\xef\x7a\x36\x1d\xef\x6b\xb9\x6e\x55\x43\xe2\x5d\x4f\xbc\xeb\x89\x77\x59\xc0\xab\xd5\x37\x0c\xb7\xd3\xad\xc1\x65\x92\xc9\xb7\xfe\x76\x0f\x4c\x02\x7b\xf2\xb0\x3f\xdb\xd8\xcf\x26\xf4\x93\x21\xfd\xd9\x48\xa2\x2b\x9f\x9f\xed\xe1\xe7\xda\x3e\xbf\xfe\x21\xed\xff\x7e\xe1\x61\xe7\x23\xd4\xfd\x2c\xbc\xb4\x1a\xe6\x87\xc2\x34\x6c\x9c\xc3\xf7\xc7\xf9\x49\xae\xfa\xc4\x76\xcf\xf6\x36\x6c\x7b\x43\x8e\x75\xd8\xba\xc6\xf9\x09\xf2\x91\x9e\xc2\xf2\xd3\x0b\x8e\xbb\xbb\xee\xee\xe2\xfe\xb8\xae\xe1\x7e\x3f\xf1\x39\x51\x3e\x13\x05\x03\xc8\xc5\x00\x72\xd1\xff\x5e\x92\x01\xd7\xbe\xe8\xda\xff\x5c\xd7\x4c\xa2\x78\xca\x90\x9e\x32\xa4\xab\x75\xa6\x21\x8c\xc4\xf5\x22\x6e\xbd\x4c\x09\x79\xd5\xd5\xfa\x4e\x43\x15\xa5\xff\x45\xfa\x4a\xd8\xaf\x5a\x67\x1a\xa4\xf8\x1d\x2e\x7e\x87\xcb\xf4\xb8\x88\x5e\x2f\x1e\x87\xdb\x22\xc1\x08\x60\xef\xd7\xf2\xa5\x86\x1b\x4e\x87\x0b\xda\xaf\x3d\xd8\xc5\xef\x70\x99\x2d\x12\xb4\xab\x15\x9f\xb4\xd0\xe1\x77\xb8\xb8\x1e\xae\x7d\xda\xc5\xec\x70\x31\x3b\x5c\x24\xea\x97\x99\x73\x71\x3a\x5c\xc4\xe9\x17\xb3\xc3\xb5\x73\xbb\x6d\xdd\x7a\xaa\xcf\x3b\x7d\x08\x93\x9f\x67\xfb\x3c\xe7\xe7\x09\x3f\xcf\xea\xd9\x31\x3e\x4f\xe9\x79\x4a\x0f\xcf\xc5\x43\x6c\xcb\x48\xac\xd6\xe7\xd7\x37\x4b\x1e\x72\xef\x8f\x54\xc1\xc3\x6a\xf1\x18\x65\x8c\xc7\x6a\x8d\xe4\xa7\xef\xd3\xf7\xe9\xab\xbe\xce\xd3\x78\x22\xb7\x4c\xce\x6a\xf5\xa5\x52\x22\x96\xfb\xec\x54\x9f\xe7\xf3\x3c\x9f\xe7\xf9\x3c\x4f\xe6\x79\x4a\x4f\xa4\x97\x01\x5b\xed\xd5\xea\x6b\xf6\x79\x62\xcf\x13\x63\x96\x56\xab\xaf\xd9\xe7\xe9\x3d\x4f\xef\x79\x7a\xcf\xd3\x7b\xaa\xf1\x1f\x2e\x8c\x87\x0b\xe3\x61\xbe\x78\x9c\x9f\xcf\x1e\xf8\x61\xbb\x78\x76\xcb\x0f\xdb\xc5\x13\x67\x66\x2c\x57\xdb\x15\x89\xce\x5f\x7e\x4b\x3a\x17\xb7\xe1\xb3\xa3\x7e\x76\xd4\x8f\x0b\xf1\x61\xbb\x60\x6e\x57\xeb\xfb\xbd\x11\xae\xc5\x67\xd9\x6f\xa9\xd7\x87\xf9\x82\x31\x3e\x9f\x5d\xf7\x63\x50\x3f\xcc\x17\x0f\xf3\xc5\xc3\x7c\xf1\x38\x21\x9b\xec\xf7\x71\x3c\x3e\xae\xc8\xc7\x15\xf9\xb0\x60\x3c\x2c\x18\xaf\xc5\xd8\xb8\x25\x1f\x16\x8c\x87\x05\x43\x29\x40\xb5\xc6\xa4\x59\xe9\x69\x5c\x4f\x83\xe4\x76\xb5\xfe\xfb\x93\xcf\xf7\x5f\x4b\x93\x27\x70\x19\xe0\xd7\x5d\x5f\x4f\xe0\xba\xdf\xeb\x7e\xaf\x3b\xbd\xee\xf4\xba\xbb\xeb\xee\xae\xbb\xbb\xee\xe8\xba\xa3\xeb\x8e\xae\x3b\xba\xee\xe8\xba\x97\xeb\xfa\x89\x48\x4d\xc5\x0d\xd5\x3a\xc7\xd2\x21\xfd\xe5\xf2\x41\x5c\x8e\xd6\x4b\x32\xfc\x8e\xd7\xb1\x5c\xe7\x9b\x8f\xa3\x67\xa2\xbd\x28\xc9\x80\x8b\x6d\xe1\xe2\x59\xb8\x64\x02\x14\x31\xcc\xdb\xb2\xc1\x78\x16\x6e\x30\x2d\xc3\x4c\xb4\x0b\xbd\x64\x02\x2e\xce\x85\x8b\x73\xe1\xf2\x74\x5c\x9c\x0b\x4a\x1f\xe6\x25\x10\x70\xb1\x8f\x5d\xce\xa8\x8b\x8f\xec\xe2\x62\x50\x54\x51\x6d\x47\x92\xf5\xf2\x24\x71\x34\x28\xa7\xa8\xd6\x99\x9e\x27\x81\x80\xdb\x82\xc7\xf8\x1a\x2e\xbe\x86\x16\x31\xbd\xf8\x1a\x94\x65\x54\xeb\x4c\x4f\x18\xdf\xd9\x25\x88\xf0\xf1\xad\xb4\x59\x24\xcd\x7c\x0e\x3c\x14\xc3\xdd\x0d\xdc\x13\x83\xa7\x66\x44\x57\xe0\xdb\x72\xb9\xda\xf1\x93\x21\xac\x37\x35\xa2\x47\xaf\x74\x43\xb4\xd5\xcf\x5b\x78\xf8\x53\x1e\xfe\x94\x87\x39\xe5\x89\xa5\x3f\x6f\xe4\x79\x47\xcf\x3b\x7a\xde\xce\xf3\xeb\x8f\x7c\xf2\xc3\x85\xf1\x70\x61\x3c\x6f\xed\x79\x6b\x4f\x1c\xfe\x79\x77\xcf\x1b\x79\xde\xe0\xf3\x06\x9f\x37\xf8\x70\x67\x3c\xf7\xf8\xdc\xc5\xf3\x4e\x9f\xe8\xfd\xf3\x66\x9f\x37\xfb\xf0\x68\x3c\x3c\x1a\xcf\x5b\x7e\xee\xf7\x79\xcb\x36\xbb\xd5\xea\x05\x31\xbc\xeb\x47\x1e\xe2\x89\xfc\x3f\xef\xfd\xf1\x85\x3d\x6f\xff\x79\xfb\xb6\xc8\xd5\xea\x0b\x4f\x8c\x84\x67\x24\x3c\xf9\x02\xcf\x78\x78\xc6\x43\x3b\x27\x9f\xf1\xf0\x3c\xdb\xe7\x39\x3f\xe2\x11\xcf\x78\x78\x46\xc8\x33\x42\x9e\x2c\x83\x67\x84\x3c\x23\x84\x52\x53\xb5\xfa\x42\x1e\xe3\x44\x2d\x5f\xb5\xfa\x42\x1e\xe3\xe4\x19\x27\x4f\x9e\xc2\x33\x4e\x1e\x5e\x8f\x67\xb4\x3c\xa3\xe5\x19\x2d\x4f\x16\x03\x87\x6a\xb5\x7e\x0b\xda\xc8\x65\x78\x72\x19\x38\x5a\xab\xd5\x0b\xc2\xc8\x3e\x78\xb2\x0c\x9e\x2c\x83\x27\xbf\x40\x08\xa3\x5a\x9f\x7b\x6b\x72\x04\x46\xf4\xd8\xb3\xb9\x9f\x63\x96\xd9\xee\xaa\x44\xe6\x89\xf5\xce\xef\xd7\xb6\xa8\xa4\xcd\x84\xe0\x66\x8b\xc8\x3c\x95\x57\x8f\xfc\xe4\x2b\xb3\x6e\x7d\xeb\x7e\xda\xd0\x5e\xed\x23\x76\xee\xf3\x37\xb4\xfe\xfb\xfc\xd7\x76\xa1\xcc\xfc\x45\xb4\xb8\xda\xa9\xdd\xda\xfa\xce\x3d\x3e\xad\xcf\x87\x73\x46\x7f\x7e\xb5\xf5\xfd\xb5\x39\x58\x84\x69\xaa\x75\x66\x38\x33\x9c\x19\xce\x21\xbb\x5e\x9b\x86\x45\xde\xb8\x5a\x9f\x2f\x7d\x97\x6b\x58\xae\x67\xfb\x64\xfb\xb6\xed\xf3\xad\xef\xf6\x9d\xdb\x37\x6c\xdf\x7c\xfa\x1c\xbd\x0e\xfb\xcd\x26\xc6\x7a\xfa\x59\x49\x3f\x6b\x22\x0d\xb1\xf9\x59\xef\x5a\x8f\xeb\x83\xed\x1f\x6c\xff\xac\x71\x9f\xd5\xea\xe3\x1d\x23\x16\x33\x5b\x26\xe6\x83\xe7\x5f\x93\xc9\x43\xef\xcf\x4c\xff\x30\x22\x7d\x66\x7a\x8b\xff\x7d\x66\x77\x0b\x21\x13\xb4\x9a\xe4\xae\xe6\x67\x3e\x7e\xe6\xe0\x67\xa6\x7c\x66\x22\x89\xab\xfa\x84\x64\xb2\xeb\x31\xd7\x3e\xe3\xf9\x33\x47\x3e\x73\xe7\xeb\x99\x22\x97\x44\xd8\x6b\x3e\x39\x20\x02\x5e\xd5\x2e\xad\xf1\x63\xf6\xc9\x01\x79\x72\x40\x9e\x1c\x10\x81\xb0\x6a\x87\x56\x5f\xf3\x4e\xf6\xc7\x93\xf7\xf1\xe4\x7d\x3c\x79\x1f\x4f\xde\xc7\x93\xf7\xf1\xe4\x7d\x08\xc3\x55\xab\x97\x19\x27\xef\xe3\xe1\x67\x79\x82\xf8\x6f\xb6\x4c\x8f\x19\x27\x88\xff\x04\xf1\x9f\x20\xfe\x13\xc4\x7f\xb3\xc7\x79\x53\x76\x9b\x7d\x82\xf8\x4f\x10\x1f\x33\x48\xb5\xfa\x9a\x7d\x82\xf8\xb8\x42\xaa\xd5\xd7\xec\x13\xc4\xc7\x1b\x52\xad\xbe\x66\xa2\x20\xfe\x13\xc4\x7f\xbc\xf3\x4f\x10\xff\x09\xe2\x3f\x5c\x1b\x18\x46\xaa\xd5\x17\x6e\x77\x1d\x0a\xae\x8d\x87\x6b\xe3\xb5\x58\xa3\xb8\xc5\x53\xa5\xfc\x70\x6d\x3c\xb5\xca\x0f\xd7\x06\x76\x92\x89\xa9\xa4\x5a\x7d\x61\x38\xae\x8d\xd7\x29\xef\xb8\x36\xde\x6c\x9e\x05\x18\xae\xaa\xf9\x49\x24\x78\x76\x16\x0f\xd7\xc6\xc3\xb5\xf1\x54\x3b\x3f\xd5\xce\x0f\xd7\xc6\x13\x4b\x78\x52\x0e\x48\x2d\x4e\x52\x8b\x93\xd4\xe2\x24\xb5\x38\x5b\x6a\xf1\xd9\x7d\x3c\x5c\x1b\x4f\x52\x3b\xce\x94\x89\x2d\xa5\x46\x91\x71\x75\x7a\x8c\x19\x5d\x76\x4c\x72\xaf\x3e\xf2\x3a\x1f\x54\xfc\x04\x6a\x89\xaf\xd5\xb1\x5e\x98\x49\x21\x24\x31\xac\xf9\xc9\x7e\xfa\xe4\x4f\x7d\xb2\xa2\x3e\x58\xf7\xc9\x63\x22\xa1\x35\x43\x04\x62\x48\x54\x18\x46\x02\xb1\x95\x39\xbc\xe5\xe1\x3d\x0e\x6f\x70\x78\xf2\xc3\x93\x19\x9e\xe1\xf0\x04\x86\xe7\x43\x19\x6f\x52\xc6\x9b\x8b\x5b\x6b\x71\x93\x2c\xae\x85\xc5\x3d\xb0\x9a\xed\x97\x33\x60\xd9\x52\x6f\x3b\x50\x15\xe9\x53\x8d\x7a\x7d\x52\xbb\xb9\x8e\x24\xd9\x91\x6d\xfb\xa9\x4d\x76\x6d\x13\x4d\xdb\x30\x64\xdb\x25\x6d\x51\xa5\x6d\xaf\xb4\x09\xab\x6d\xd6\xf8\x66\xc3\x6f\xd6\xbe\xd4\x82\xb9\xed\x17\x24\x0f\x4c\x09\x06\x75\xec\x7c\x52\xac\x6c\xb6\x6d\x35\xff\xf4\x0a\x5b\xf0\xcf\x88\xfa\x8c\xa5\x4f\x29\x61\x33\x7a\x84\xe8\x42\x88\x2e\x44\xb6\x93\xcc\x0e\x54\x25\x4e\x88\x1c\x44\xcb\xa5\x73\x4d\x11\xba\xaa\xb6\x7a\x71\xf4\x06\x77\x57\x33\x86\x04\x67\x6d\x70\xd3\x06\x17\x2c\x59\x8d\x19\xdc\x9c\xc1\x35\xb5\xdb\x72\xb0\xf7\x7c\xdc\xd5\x5c\xec\x35\x72\x8c\x37\xab\x3f\x7e\x96\xa7\x34\xe2\xa9\xa8\xc7\xc5\x33\x49\x9e\x57\x6b\xbc\xc1\x1f\xc9\x30\x78\x79\xaa\xd5\x17\xfe\xe0\x67\x79\xd2\x63\x1e\x7e\x96\x66\xe7\xc1\xae\x52\xad\xbe\xb0\x48\xaa\xcc\x93\x2a\xf3\xa4\xca\x60\xf6\xa9\x56\xdf\xbe\x36\x58\x24\x61\xe6\x49\xa9\x7f\xd2\x66\x9e\xb4\x99\xc7\xf5\x85\x9f\xa5\x5a\x7d\x61\x11\xae\x8d\x87\x6b\xe3\x49\xad\x79\x52\x6b\x1e\xc7\xd8\x93\x5a\x83\xe1\x65\x3e\x29\xf8\xf8\x5c\xaa\xd5\x17\x16\x49\xca\x7f\x12\x6f\x1e\xae\x8d\x27\xfd\xe6\x71\xb3\x61\x81\x99\x18\x61\xaa\xd5\x17\x16\xe1\xda\xc0\x0b\x53\xad\xbe\xb0\x88\x5b\xee\x49\xda\x79\x92\x76\x9e\xe4\xfe\xd7\x51\x1c\xa9\x3b\x4f\xea\x0e\x06\x99\x6a\xf5\x85\x45\xd2\x78\x9e\x34\x1e\x9c\x32\xf3\x71\xe6\x3d\xc5\x00\x4f\x32\xcf\x93\xcc\xf3\x24\xf3\x48\x12\x9b\x38\x68\x26\x6e\x9a\x6a\xf5\xed\xc2\x47\x58\x24\xc9\xe7\x71\xfe\x3d\x8c\x1b\x0f\xe3\xc6\xc3\xb8\xf1\x14\x0f\x3c\xc9\x3f\x0f\xe3\xc6\xe3\x2c\x7c\x52\x80\x9e\x14\xa0\x27\x05\xe8\xed\xf6\x02\x79\x0b\x7c\x14\x0f\x63\xe9\xc3\x58\xfa\x78\x27\x1e\x8f\xc4\x13\x0c\x79\x66\xd9\xe3\x91\x78\x7c\x11\x8f\x2f\xe2\xf1\x42\x3c\x11\xdf\x05\x25\x96\xf9\xb2\x20\xde\x82\x75\xcb\xb8\x5a\xc6\xde\x32\xea\x96\x11\xb8\x3c\xf9\x65\x84\x2c\x63\x06\x53\xd5\x5c\xab\x45\xb2\xb1\x2a\x7b\x77\xcb\x7b\x59\xc6\x09\x4e\xab\xb9\x3c\xe1\xe5\x99\x2c\xcf\x7c\xb9\xc7\xe5\xed\x2c\xcf\x79\x79\x47\xcb\x5b\x5b\x9e\xcf\xf2\x04\x96\x37\xb5\x24\x29\x61\xa5\xa9\xd6\xb7\x41\x2a\x49\x26\xcb\x53\xc2\x62\x33\x97\xf4\x27\xcc\x35\x13\xbb\x4d\xb5\x9f\x73\x08\xb7\x9f\x6e\x7d\x8e\x33\x9a\xab\x75\x49\x23\x59\x52\x47\x96\xc4\x92\x25\xf1\x03\x5b\x4d\x1d\xfb\x2f\x2a\x75\x6c\x05\xf8\x6b\xe6\x92\xbc\xb1\x70\x04\x2c\xe9\x1f\xb8\x6c\x26\x36\x9c\xfa\xc4\x37\xd4\xbc\x5e\xe7\xf7\x0d\x75\x2f\x52\x20\xd6\xe9\x6f\xc0\x3d\xad\x44\x7b\x49\xab\x10\x28\xa8\xe3\x4f\x2f\xdf\xb6\xfa\x1c\xc7\x9e\x86\xd2\xed\xa5\x04\x7c\x49\xd2\xc0\x5d\x32\x97\x68\xf1\x12\x5d\x5e\xd9\x65\x5d\xd6\x2f\xc9\x63\x0f\x4b\x0b\x8e\xa4\x6a\x8d\x37\x58\xe4\xf9\x3c\x49\x65\x92\x1e\xab\x35\x56\x61\x91\xa4\xb2\xe7\xa9\x62\x56\xaa\x56\x5f\x58\x24\xa9\xec\x71\x5d\x3f\x29\x64\x4f\x7a\xcf\x93\xc6\xf3\xf8\x1e\x9b\x77\xe9\xed\x96\x6f\x37\x1a\x25\xe4\x3c\x4f\xf5\xe1\x92\x78\xbb\x4b\xda\xcc\x29\x5c\x12\xcf\xd3\x7e\xb8\x24\x94\x97\x4c\xa5\x26\xd5\x12\x7e\x36\x8f\xf8\x33\x9f\x67\xfe\x24\xe1\x3c\x0c\x11\x4a\x53\xaa\xf5\x5f\xf7\x28\xe5\xe6\x79\x5f\x8a\x52\xaa\x75\x8e\xbb\x93\x72\xf3\xa4\xd9\x3c\x69\x36\x4f\x9a\x8d\x92\x95\xa9\xa0\xa5\x5a\xe7\x40\x54\xfe\xc9\x87\xf1\x41\x41\x4b\xb5\xce\x84\xa5\x52\x6e\x1e\xdf\xe9\x53\xb8\xff\x24\xde\x3c\x89\x37\x4f\xe2\xcd\x93\x78\xf3\x78\x56\x5f\xef\x56\x5a\x78\xa5\x8b\x61\x24\xe1\x3c\x6f\x59\x01\xcc\x24\x78\x5f\xad\x33\x3d\x4f\x09\x39\x4f\x42\x8e\x42\x9a\xf9\x8c\x19\x65\x33\xd5\xea\x65\xd6\x4b\xce\x79\x92\x73\x9e\x42\xfc\x27\x45\xe7\x49\xd1\x79\x52\x74\x94\xd6\x54\xeb\x7c\xa8\xd8\xe3\x53\xa0\x06\x37\x53\xb5\xd3\x18\xd3\x9a\x9b\x72\x2f\xb0\xe4\xcc\xa5\x4e\x76\xc9\x60\x58\xb2\x13\x16\xb9\x74\xbc\x39\x35\x1a\x7d\xb2\xfa\x13\xad\xd9\x27\xff\x60\x59\x61\x71\xe8\xd4\xf7\x68\x1f\xb1\xc8\xd9\xed\x26\x1c\x59\x9f\x0b\x10\x2d\x81\xd0\x25\xd4\xb9\xac\xbc\x4b\x68\x28\x76\x8b\xe7\x4a\xc2\x91\xe8\x15\x2d\x86\x22\x03\x7d\xc0\xff\x01\x7f\xc6\xea\x4f\xea\xfa\x07\x6c\x1f\xb0\x77\xc0\xf0\x61\x3c\x0f\x88\x3d\x24\xa7\x0d\xe1\x9a\x61\xb4\x0f\x48\x32\x14\xb2\xe3\x59\x9e\xc3\x0c\x1a\x66\xca\x30\x6b\xb0\x2d\x57\xdf\x3e\xdf\x77\xd6\x15\x0e\xd7\x36\x24\xbf\x0d\xa3\x77\x48\x6f\x1b\xae\x73\x48\x45\x1b\xc6\xfc\x30\x9e\xb1\x3c\xd7\x99\xa1\xad\x4f\x8c\xc9\xa1\x1e\x7c\x18\x39\x2d\xac\x3e\x8c\x96\x61\xd4\x0d\x63\x69\x48\x30\xc3\xe6\x5c\x9f\xf7\xf9\xce\x71\x47\x46\xce\x90\x19\x33\x8c\x81\x21\x87\x66\xc8\x7d\x19\xe8\x10\x70\x34\x57\x5b\x67\xca\x6b\x19\xf2\x48\x86\x3a\xf1\x21\x13\x85\x70\xd8\x1c\xf2\x45\x46\xf6\x48\xb6\x92\xca\xd1\x79\x70\xef\x19\x27\xcf\xf7\x3f\xa3\xe8\xc9\xd1\x79\xc6\xd5\x73\x0d\xef\xb4\xd6\xb4\x75\x13\x55\xc3\x93\xa3\xf3\xe4\xe8\x3c\x54\x0d\x4f\xa6\x8e\x22\xb1\x6a\x53\xdb\xbd\xea\xb7\x04\x39\x9f\x20\xe7\x43\xd2\xf0\xd8\xcc\x4f\xbe\xce\x73\x2f\xcf\xbd\x3c\x59\x3b\x4f\x20\xf4\xc9\xda\x51\xd9\x33\x55\xf9\x54\xab\x17\x64\x90\xb5\xf3\x20\xea\x13\x32\x7d\x46\xfb\x33\xce\x95\x9c\x4d\xe5\x67\xd5\x3a\x1f\x4a\xc8\xd4\x51\xa2\x36\x9f\xb9\xa0\x14\xad\x5a\xe7\xc3\x07\x49\xb6\x4f\xa5\xfc\xeb\xe7\xe6\xd9\x3e\x33\xee\xc9\xce\x79\x66\xc7\x33\x83\x9e\x90\xec\xf3\x9c\x9f\xbc\x9c\x27\x2f\xe7\x99\x4d\xaf\xd1\xde\x2c\x7b\x2a\xe2\x9f\x1c\x9d\xa7\x22\xfe\xc9\xd4\x79\x32\x75\x9e\x40\xee\x13\xc8\x7d\xe6\xdd\xcb\xe6\x0d\x80\x03\xf2\x75\x54\x35\x55\xab\x2f\x34\x68\x76\x3c\xf9\x3a\x2a\x9f\xaa\xd5\xd7\xfb\x15\xc2\x7d\xb2\x76\x9e\xac\x9d\x67\x2e\x3f\x75\xf1\x8f\xd5\xfd\xd4\xc5\xbf\xec\xb7\x0c\xcf\xd9\xe1\x4f\x5d\xfc\x63\x8d\x3f\xd9\x3c\xb8\xb9\xe7\xf0\x8b\xc3\xf5\x0c\x67\x0e\x96\x39\x06\xe4\x39\xa5\xb9\x2a\xba\xae\x56\x82\x31\x69\x15\x1e\xa7\xd5\x32\x2b\x2a\x42\xa6\x8a\x90\x69\x27\x35\xed\xeb\xa7\x1d\xfd\x54\x05\x32\xed\xfa\xa7\x8a\x8d\x69\xb7\x3e\xed\xeb\xa7\x7d\xfd\xb4\x5b\x6f\xe1\xda\x69\xb7\x35\xed\xb8\xa7\xfd\xf5\xb4\x47\x9e\xf6\xc2\xd3\xde\x76\x09\xab\x62\xf2\x9a\xab\xc5\xe9\xed\x02\xb6\xd8\xd3\xe6\xf7\x08\x58\x1d\x50\x3a\xe0\x70\x98\x2f\x81\xe6\x24\xcc\x97\x56\x35\x6f\x29\x7d\x0c\xce\x73\x28\xdf\x1d\x52\x1b\x86\x22\xde\x21\x9d\x61\x48\x3a\x18\x42\xc1\x43\x28\x18\x07\xf4\x1c\x76\x70\x43\x08\x17\xb3\x73\xb5\x4b\xeb\x7b\xcc\x59\x81\xd3\x89\x1b\xf4\x48\x15\x0e\x73\x2d\xcc\x11\xc2\x7c\x33\x8c\x5e\xf2\x7c\x75\x1c\x5a\x9f\xdb\xf5\x18\xb7\xb8\x9b\x67\x88\x86\x44\xdf\xa3\x3d\x5a\x78\xce\x51\x3b\xcd\xf5\x15\x6a\xad\xaf\x25\x96\xf8\x73\x4e\xf4\x31\x6a\x0d\xde\xc8\x13\x9d\xe4\x4c\xad\x81\xc7\x75\x4b\xca\xd8\x5d\x72\xcc\x8b\x9b\xd1\xcc\xe6\xcd\x72\xae\xbc\xb9\xfd\xa8\xb8\x14\x54\xdd\x55\x7b\xb4\xa9\xbd\x5a\xe3\x0d\x3e\xc8\x06\x7b\xb2\xc1\x9e\x6c\xb0\x67\x65\x51\xb7\x57\xad\xbe\xb0\x42\x82\xcf\xc3\xa5\xf0\x6e\xff\x0a\xac\x90\xe6\xf3\xa4\xf9\xa8\xe7\x9b\xea\xf9\xaa\xd5\x97\x8d\x24\xd9\xe7\x49\x7c\x78\x52\x7e\x54\xfb\x55\xab\x2f\xdc\xb8\x70\xc3\xea\xf6\x30\x2a\x3c\x49\x40\x2a\x05\xab\xd5\xd7\x7e\x4d\x12\xd0\x93\x04\xf4\xac\x7d\x4f\x12\xd0\xb3\x03\x7d\x92\x80\x9e\x24\xa0\x27\x09\xe8\x59\x19\x9f\x9d\xe9\x93\x04\xa4\x06\xb1\x5a\x7d\x61\x8e\x94\x8a\x27\x09\xe8\x49\x02\x7a\x92\x80\x9e\x24\xa0\x27\x09\xe8\x49\x02\x7a\x92\x80\x54\x22\x4e\x15\x8a\x53\x85\x62\xb5\xfa\xc2\x22\x49\x40\x4f\x12\xd0\x93\x04\xf4\x24\x01\x3d\x49\x40\xcf\x1a\xfd\xa4\x72\x3c\xc9\x1d\xcf\x7a\xfd\x24\x01\x3d\x49\x40\x4f\x8c\xe0\x49\x02\x7a\xf6\xd1\x5d\xef\xf8\x24\x7a\x3c\x33\xfa\x49\xf1\x78\x8a\xe4\x9f\x22\xf9\x27\x21\xe8\x99\x23\x4f\x65\xe4\x53\x19\xf9\x14\xc9\x3f\x45\xf2\x4f\xba\xd0\x93\x2e\xf4\xa4\xc9\x3c\xe9\x42\x4f\xf2\xc8\xeb\x22\x79\xde\xc2\xe4\xa5\x4f\xde\xc2\xe4\x81\x4f\xbe\xc4\xe4\x45\x4c\x5e\xf1\xe4\x63\x4f\xde\xf5\x34\x6e\x95\x14\xcd\xe4\xf3\x49\x9e\xed\xe4\xed\x49\xfe\xed\x84\x4e\xc9\xa7\x9d\xaa\xe5\x52\x85\x5c\x46\x8f\xe7\x66\x8f\x55\x9c\xcf\xf3\x93\x2a\xde\xf6\x0b\xbe\xd9\x96\x4e\x6e\x61\xd6\xd9\x42\xb1\x2d\x5a\xda\x12\xa5\x04\x91\x11\xdb\xf0\x7e\x1f\x18\x78\xfc\xe2\x89\x16\x69\xa5\xfd\xa3\x4e\xee\x40\xc2\xa3\x12\x4e\xc1\x42\xb5\x2d\x74\xdb\x22\xcb\x2d\x5c\xdb\x02\xb5\x3e\x37\x37\x21\xe4\xaf\x90\x81\x7f\xf2\xf0\x91\x1e\x7e\xc5\xc3\x4b\x79\x78\x08\x8f\x1d\xe5\xe1\xeb\x3b\x7c\x74\x67\xb6\x58\xb3\x6b\xe3\xa3\x3b\xfc\x6c\x87\x27\xed\xf0\xbc\x1d\xfe\xa8\xc3\xdb\x76\xf8\xee\x0e\xef\xc7\xe1\x67\x3b\x7c\x26\x87\x7f\xe3\xf0\x6f\x1c\x3b\xd3\xc3\x6f\x70\x78\x06\x8e\x7d\xe8\xe1\x4f\x38\xfc\x06\xea\x59\xe7\x59\x2d\x4b\xd7\xd2\xb4\x2d\x4e\xf7\xb5\x0c\xe5\x57\x4f\x98\x44\xb2\x04\x93\xdd\x3e\x2e\xa9\x25\x1b\x9a\x6d\xdc\x6a\x47\x26\xc6\x56\xfb\xb8\x3d\x1f\xca\x3a\xd5\xd6\xe8\x82\xc6\x0f\x32\x3f\x98\xfc\x24\x9d\x3d\x49\x67\x4f\x52\x92\xca\xdd\x6a\x53\x7b\xb5\x35\x56\x25\x9d\x3d\xf8\xf6\x24\x9d\x3d\x28\xf7\x24\x9d\x3d\x49\x67\x8f\x77\xee\x49\x3a\x13\xa1\xa8\x56\x5f\x58\xc4\x6b\xf7\xe0\xff\x93\x74\xf6\x24\x9d\x3d\x49\x67\x0f\xb1\xc2\x93\x40\xf4\x24\x10\x3d\xab\xc9\xe3\xe5\x7b\x12\x88\x9e\x55\xe3\x59\x35\x9e\x04\x22\xe5\x39\xd5\xea\x0b\x8b\x24\x10\x3d\x09\x44\xca\x76\xaa\xd5\x17\x16\x59\x65\x9e\x95\xe5\x49\x20\x7a\x7c\x86\x4f\x02\xd1\xb3\xfa\x3c\xab\xcf\x93\x40\xa4\xe4\xa7\x5a\x7d\x61\x91\x04\xa2\x27\x81\xe8\x49\x20\x7a\x12\x88\x9e\x04\xa2\x67\x9d\x7a\xde\xd4\x93\x40\xf4\x24\x10\x3d\x09\x44\x4f\x02\x51\x2b\x90\x3d\x09\x44\x8a\x89\xaa\xd5\x17\x16\x79\xbf\x0a\x8b\xaa\xd5\x17\x16\x49\x20\x7a\x12\x88\x9e\x75\x90\x2e\x4b\xb5\xfa\xc2\x22\x09\x44\x4f\x02\xd1\x93\x40\xf4\x24\x10\x3d\x09\x44\x4f\x02\xd1\x93\x40\xf4\x24\x10\xbd\x16\xc3\x95\x40\xf4\x24\x10\x3d\x09\x44\xef\xf5\x68\x81\x45\x12\x88\x9e\x04\xa2\x6d\xd6\x6f\xb5\xad\xdb\x0c\xdd\xbc\xdf\xbb\x4b\x42\xec\x9e\xae\xac\x98\x6b\x5f\x79\x4f\x7f\x72\xba\x64\xa3\xcb\x31\xba\xf8\x42\x06\x7c\x76\x36\x7c\xe7\xaf\xcb\xa2\xfe\x3a\x67\x5d\x52\x9b\xf5\xf7\x8a\x19\xd5\x2a\x53\x6d\x7f\xfe\xaa\x15\x39\xaa\x55\xa6\x5a\x67\xae\x25\xf1\xad\x8e\x73\x6c\xad\xd2\x18\x31\x71\xec\x90\x77\x77\x16\xfe\xd7\x45\x2e\xf2\x85\xba\x84\xa4\x39\x5e\x47\xf3\x5d\x36\x5b\x65\x13\xb3\x35\x75\x59\x93\xbf\x34\x53\x53\x53\x24\x34\xad\x40\xfd\xca\x77\xa6\xf6\x68\xeb\xda\xbe\xfc\xb4\x43\x2b\x6a\x7c\xd2\xb1\xf3\xb3\xee\xe2\x13\xad\xfb\xae\x73\xc4\xec\xbe\xbb\xb4\xce\x11\xb3\xfb\xc4\xec\xbe\xe7\xf3\xfe\x2d\x91\xbe\x4f\xe4\xee\x13\xc5\xfb\xa4\xfb\x8d\x6f\x68\x43\x3b\xb5\x4b\xbb\xb5\xa9\x75\xa6\x88\xde\x18\xce\x14\xd7\x1b\xe2\x7a\xc3\x13\x1b\xa2\x7b\x63\x38\xdf\x5b\x18\x62\x7c\x23\x9c\x2f\xba\x37\x44\xf7\x06\xb4\x1f\xde\xd1\x10\xdd\x1b\xd3\xe7\xb3\x3f\xd7\xb7\xe7\xa0\xf5\x8b\xc7\xfb\x49\x3a\x43\xb4\xb6\xfe\xe1\xae\x5c\xf7\xe7\xba\x3f\xd7\xfd\x7d\xfd\xb9\xbb\x15\x83\xfc\x5c\xfd\xf7\xb9\x5b\xf7\xf0\xb9\x87\x8f\x95\xf6\xb9\x93\xcf\x9d\x7c\xee\xe4\x73\x27\x9f\x3b\xf9\xdc\xc9\xe7\x4e\x3e\x77\xf2\x89\x56\x7e\xa2\x95\x9f\xbb\xfa\xdc\xd5\xe7\xae\x3e\x77\xf5\x89\x5c\x7e\xa1\xaf\x04\xcb\x4f\x14\xf3\x9b\xfa\x4e\x7d\xdd\xf9\xe7\xce\x3f\x77\xfe\xb9\xf3\x8f\x0c\xed\x67\xbc\x7e\x9e\xc2\x67\xbc\x7e\xc6\xeb\x67\xbc\x7e\xc6\xeb\xb7\xf4\x35\x6a\xbf\xa5\xef\xd2\x57\x1c\xf4\x5b\xfa\x2e\x7d\xc5\x44\x3f\x31\xd1\x4f\x4c\xf4\x13\x13\xfd\xc4\x44\x3f\x31\xd1\x4f\x4c\xf4\x13\x0d\xfd\xb6\xbe\x92\x42\x3f\x51\xd2\xef\xe8\x75\x9c\xdf\x63\xf1\x38\x27\x7d\x4f\xfa\x3c\x7d\x43\xea\x75\x7d\x7e\x7d\x72\x9d\x7f\x7b\xd4\xfa\xef\xeb\x11\x66\xac\x7c\x3d\x4a\x8c\xbf\xe8\xd6\xe7\x9e\xde\xf0\xf4\x86\xa7\x37\x3c\xbd\xe1\xf9\x0c\xcf\x67\xb8\xeb\xe1\xae\x87\x7b\x19\xee\x65\x1c\x67\xba\xf2\xe1\xb9\x8d\xd5\xc7\x46\x9b\xe7\x36\x3c\xb7\xb1\xfa\x7b\xfc\x8a\x67\x35\x3c\xa5\xe1\x29\x0d\x4f\x69\xec\xfe\x7e\x67\x7a\x26\x9d\x73\x63\x0f\x79\xed\x09\xaf\x1d\xdd\xb5\xa3\xbb\xec\xf2\xcb\xf6\xbd\x2c\xe3\xcb\x9e\xbe\xe6\xff\x6d\xab\x97\x5f\xe3\xc9\x14\x7c\xc7\xf8\xdc\xbf\xcf\xb5\x56\x4a\xde\xd5\xa7\x94\xee\xc9\x1d\x7c\xbc\x1b\x4f\x59\xdd\x53\x2c\xf7\xec\x2e\xde\xe9\x3d\xb9\x55\x47\x51\xf4\x93\xa8\xfc\x30\xd3\x3d\x5e\xa7\x27\x5d\x19\x8f\xc7\x7c\x34\x85\x9e\xd2\xca\x27\x2f\xe7\xb1\xe4\x5e\xe7\xa6\xa0\xdc\x44\x66\x33\x1f\x9f\xcb\x43\x92\xf9\xf8\x50\x1e\xa2\xcb\xc7\x03\x8b\xb4\x66\x3e\xbb\xb8\x27\x3f\xe6\xf1\xde\xa2\xab\xa9\x76\xdb\x05\x49\x2a\x16\x3d\x9a\xa3\x2d\x3c\xf1\x7b\x23\x64\xc3\xac\x6d\x84\x34\xb7\xee\xf5\x36\x8f\xf9\xdb\x4f\xe6\x9c\x6e\xaf\x56\xa2\x72\xda\x59\xc1\xc7\x63\xec\x9d\xdb\xc7\xfd\x5f\xe7\xc3\xc4\xe3\x9b\xd3\x3c\x4a\x6f\x39\xbd\xdf\x34\x36\xd2\xdb\xcc\x03\xeb\xe1\x6f\xfa\xe6\x01\x91\x87\xd1\x3e\x4e\x8f\x28\x63\xc0\x95\x0c\x57\x32\x5c\xc9\x80\xd4\xc3\x95\x8c\xee\x6b\x46\x0c\x57\x35\xe0\xf5\x30\x2f\x86\xab\x1a\xee\x7d\xb8\xce\x01\xc1\x87\x2b\x1f\xae\x76\x78\x26\xc3\x33\x19\x70\x7c\x98\x41\xc3\x5d\x0c\x33\x68\x98\x41\x03\xbe\x0f\xf8\x3e\xe4\x64\x8c\x9e\x53\xb0\x7e\xc0\xfa\x01\xeb\x07\xac\x1f\xb0\x7e\xc0\xfa\xda\x4f\x56\x3b\xb4\xa1\x9d\xda\xa5\xdd\xda\xa3\x4d\xed\xd5\xea\x0b\x39\xc3\x6c\x0d\xc8\x19\x90\x33\x20\x67\x78\xbf\x01\x39\x03\x72\x06\xe4\x0c\xc8\x19\x90\x33\xcc\xf1\x80\x9c\x01\x39\x03\x72\x06\xe4\x0c\x73\x3f\xcc\xfd\x30\xf7\xc3\xdc\x0f\x73\x3f\x20\x67\x40\xce\x80\x9c\x01\x39\x03\x72\x06\x64\x08\xe3\x2d\xbc\xf1\x80\x9c\x01\x01\x02\x02\x04\x04\x08\x08\x10\x10\x20\x60\x48\x18\x75\x01\x0d\xc2\x38\x09\x68\x10\x90\x33\x8c\x99\x80\x09\x01\x13\x02\xda\x04\xb4\x09\xf8\x10\xf0\x21\xf6\xfd\xdb\xe8\xc4\x36\x3a\xb1\x8d\x4e\x6c\xa3\x13\xdb\xe8\xc4\x36\x3a\xb1\x8d\x4e\x6c\xa3\x13\xdb\xe8\xc4\x36\x3a\xb1\x8d\x4e\x6c\xa3\x13\xdb\xe8\xc4\x36\x3a\xb1\x8d\x4e\x6c\xa3\x13\xdb\xe8\xc4\x36\x3a\xb1\x8d\x4e\x6c\xa3\x13\xdb\xe8\xc4\x36\x3a\xb1\x8d\x4e\x6c\xa3\x13\xdb\xe8\xc4\x36\x3a\xb1\x8d\x4e\x6c\xa3\x86\xda\xa8\xa1\x36\x6a\xa8\x8d\x1a\x6a\xa3\x86\xda\xa8\xa1\x36\x6a\xa8\x8d\x1a\x6a\xa3\x86\xda\xa8\xa1\x36\x6a\xa8\x8d\x1a\x6a\xa3\x86\xda\xa8\xa1\x36\x6a\xa8\xcd\xb2\xd9\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x08\xa2\x36\x82\xa8\x8d\x20\x6a\x23\x88\xda\x2c\xbc\x8d\x26\x6a\xa3\x89\xda\x68\xa2\x36\x9a\xa8\x7d\xff\x31\xff\xf6\x6d\x13\x26\x40\x51\x58\xb8\x02\x38\x85\x25\x37\x40\x51\x80\xa2\x00\x45\x01\x8a\xda\x20\x0c\x50\x14\xa0\x28\x40\x51\x80\xa2\x00\x45\x01\x8a\x02\x14\x05\x28\x0a\x50\x14\xa0\x28\x40\x51\x80\xa2\x00\x45\x01\x8a\x02\x14\x05\x28\x0a\x50\x14\xa0\x28\x40\x51\x80\xa2\x00\x45\x01\x8a\x02\x14\x05\x28\x0a\x50\x14\xa0\x28\x40\x51\x80\xa2\x00\x45\x01\x8a\x02\x14\x05\x28\x9a\xa0\x68\x7a\x02\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\x51\x27\xc2\x4d\x50\xd4\x4b\xcd\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\x4d\x50\x34\x41\xd1\x04\x45\x13\x14\xcd\x9a\x58\x68\xc6\x36\x9a\xb1\x8d\x66\x6c\xa3\x19\xdb\x68\xc6\x36\x9a\xb1\x8d\x66\x6c\xa3\x19\xdb\x68\xc6\x36\x9a\xb1\x8d\x66\x6c\xa3\x19\xdb\x68\xc6\x36\x9a\xb1\x8d\x66\x6c\xa3\x19\xdb\x68\xc6\x36\x9a\xb1\x8d\x66\x6c\x2b\x4c\xd8\x0a\x13\xb6\xc2\x84\x6a\xf5\x0d\x7d\x43\xdf\xd0\x37\xf4\x0d\x7d\xa7\xbe\x53\xdf\xa9\xef\xd4\x77\xea\x3b\xf5\x9d\xfa\x4e\x7d\xa7\xbe\x53\xdf\xa5\xef\xd2\x77\xe9\xbb\xf4\x5d\xfa\x2e\x7d\x97\xbe\x4b\xdf\xa5\xef\xd2\x77\xeb\xbb\xf5\xdd\xfa\x6e\x7d\xfb\xe9\x6d\x7d\xb7\xbe\x5b\xdf\xad\xef\xd6\xf7\xe8\x7b\xf4\x3d\xfa\x1e\x7d\x8f\xbe\x47\xdf\xa3\xef\xd1\xf7\xe8\x7b\xf4\x4d\x7d\x53\xdf\xd4\x37\xf5\x4d\x7d\x53\xdf\xd4\x37\xf5\x4d\x7d\x53\xdf\xab\xef\xd5\xf7\xea\x7b\xf5\xbd\xfa\x5e\x7d\xaf\xbe\x57\xdf\xab\xef\xd5\xf7\xe9\xfb\xf4\x7d\xfa\x3e\x7d\x9f\xbe\x66\xe5\xdc\xdd\x1a\x6f\x96\xaf\xc9\xf0\x9f\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x9a\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x9a\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x9a\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x9a\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x9a\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x9a\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x9a\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x9a\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x9a\x7d\xd7\xb0\x68\xc2\xa2\x09\x8b\x26\x2c\x5a\xb0\x68\xc1\xa2\x05\x8b\x16\x2c\x5a\xb0\x68\xc1\xa2\x05\x8b\x16\x2c\x5a\xb0\x68\xc1\xa2\x05\x8b\xda\xed\xbf\x60\xd1\x82\x45\x0b\x16\x2d\x58\xb4\x60\xd1\x82\x45\x0b\x16\x2d\x58\xb4\x60\xd1\x82\x45\x0b\x16\x2d\x58\xb4\x60\xd1\x82\x45\x0b\x16\x2d\x58\xb4\x60\xd1\x82\x45\x0b\x16\x2d\x58\xb4\x60\xd1\x82\x45\x0b\x16\x2d\x58\xb4\x60\xd1\x82\x45\x0b\x16\x2d\x58\xb4\x60\xd1\x82\x45\x0b\x16\x2d\x58\xb4\x60\xd1\x82\x45\x0b\x16\x2d\x58\xb4\x60\xd1\x82\x45\xab\x67\xd3\x33\xf6\x9e\xb1\xf7\x8c\x3d\xcb\xda\xf8\x3e\xed\xd0\x86\x76\x6a\x97\x76\x6b\x8f\x36\xb5\x57\xab\x2f\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x06\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x06\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x06\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x06\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x06\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x06\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x06\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x06\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x06\x5c\x1a\x70\x69\xc0\xa5\x01\x97\x86\x27\x39\xe0\xd2\x80\x4b\x03\x2e\x0d\xb8\x34\xe0\xd2\x80\x4b\x03\x2e\x0d\xb8\x34\xe0\xd2\x80\x4b\x03\x2e\x0d\xb8\x34\xe0\xd2\x80\x4b\x03\x2e\x0d\xb8\x34\xe0\xd2\x80\x4b\x03\x2e\x0d\xb8\x34\xe0\xd2\x80\x4b\x03\x2e\x0d\xb8\x34\xe0\xd2\x80\x4b\x03\x2e\x0d\xb8\x34\xe0\xd2\x80\x4b\x03\x2e\x0d\xb8\x34\xe0\xd2\x80\x4b\x03\x2e\x0d\xb8\x34\xe0\xd2\x80\x4b\xbd\x71\x59\xd6\xaf\x65\xfd\x5a\xd6\xaf\xc5\x94\x5e\xb0\x68\xc1\xa2\x05\x8b\x16\x2c\x5a\xb0\x68\xc1\xa2\x05\x8b\x16\x2c\x5a\xb0\x68\xc1\xa2\x05\x8b\x16\x2c\x5a\xb0\x68\xc1\xa2\x05\x8b\x16\x2c\x5a\xb0\x68\xc1\xa2\x05\x8b\x16\x2c\x5a\xb0\x68\xc1\xa2\x05\x8b\x56\x76\xea\xbb\xff\x42\x98\x05\x3d\x16\xdc\xd8\x50\x62\xf7\x96\xfd\xeb\x24\x76\x49\xe6\x1d\xbc\x88\x4e\x4d\x77\x8e\x59\xb9\xcd\xca\x6d\x3e\x6e\x73\x70\x9b\x71\xdb\x5c\xdb\xe6\xda\x36\xd7\xb6\xb9\xb6\xcd\xaf\xed\xde\xb7\x7b\xdf\xee\x77\xbb\xd3\xed\x4e\xf7\xe9\xf4\xf5\x4e\x5c\x77\xa6\x3b\xdd\xee\x74\xbb\xd3\xed\x4e\xb7\x3b\xdd\xee\x6e\xbb\xbb\x0d\x63\x37\x8c\xdd\x30\x76\xc3\xd8\x0d\x57\x37\x5c\xdd\xb7\x37\xe8\xce\x84\xa8\x1b\xa2\x6e\x88\xba\x21\xea\xee\xa7\xd1\x25\x00\x50\x74\x43\xd1\xe3\xf9\x1c\x28\x7a\xa0\xe8\x81\xa2\x07\x8a\x9e\xaf\x37\xf7\xb6\xf2\x90\xf3\x40\xce\xd3\x01\x53\x4f\xf2\x74\x39\x43\x3b\x0f\x60\xe6\x81\x99\xa7\x67\xba\x75\x6d\x58\xd7\x86\x75\x6d\x58\xd7\x86\x75\xad\x36\xbe\x5b\xb1\xd2\x56\x82\xb4\x95\x2c\x6d\x25\x4b\x5b\xc9\x52\xb5\x43\x1b\xda\xa9\x5d\xda\xad\x3d\xda\xd4\x5e\xad\xbe\x70\x29\xe0\x52\xc0\xa5\x80\x4b\x01\x97\x02\x2e\x05\x5c\x0a\xb8\x14\xae\x36\xe0\x52\xc0\xa5\x80\x4b\x01\x97\x02\x2e\x05\x5c\x0a\xb8\x14\x70\x29\xe0\x52\xc0\xa5\x80\x4b\x01\x97\x02\x2e\x05\x5c\x0a\xb8\x14\x70\x29\xe0\x52\xc0\xa5\x80\x4b\x01\x97\x02\x2e\x05\x5c\x0a\xb8\x14\x70\x29\xe0\x52\xc0\xa5\x80\x4b\x01\x97\x02\x2e\x05\x5c\x0a\xb8\x14\x70\x29\xe0\x52\xc0\xa5\x80\x4b\x01\x97\x02\x2e\x05\x5c\x0a\xb8\x64\xe3\xab\x60\x6a\x23\xf2\xdc\x88\x3c\xab\xd5\x17\x2e\x05\x5c\x0a\xb8\x14\x70\x29\xe0\x52\xc0\xa5\x80\x4b\x01\x97\x02\x2e\x05\x5c\x0a\xb8\x14\x70\x29\xe0\x52\xc0\xa5\x80\x4b\x01\x97\x02\x2e\x05\x5c\x0a\xb8\x14\x70\xa9\x77\x31\xc7\x3a\x7b\xac\xb3\xc7\x3a\x7b\xa2\x43\xf3\xfe\x6b\x9d\x3d\xe6\xef\xb1\xce\x1e\xeb\xec\xb1\xc2\x1e\x73\xf9\xcc\x0e\xe8\x3b\xdf\x5c\x3e\x56\xd5\x63\x25\x3d\x56\xd2\x63\x5e\x1f\x2b\xe9\x31\xbb\x8f\x79\x7d\xda\xa1\x65\x0d\x3d\xd6\xd0\xc3\x92\x3f\x90\xf0\x40\xc2\x03\xf7\xce\xee\xff\xfa\x4e\x58\x77\xcc\xfd\x03\xeb\x8e\xb9\x7f\xcc\xfd\x63\xa6\x1f\xb3\xfb\x40\xb0\x93\xfd\xb9\x6f\x30\xbb\x4f\xdf\xfb\x6d\xf7\x98\x73\xcc\xee\x73\xfb\x9c\xae\xf8\x77\xa6\xd9\x7d\xcc\xee\x63\x76\x1f\x88\x77\xd8\x4b\xc7\x4c\x3f\xe6\x78\x9a\xd7\x69\x46\xe7\xd7\xe1\x12\xce\x33\xf3\x3a\xa1\x62\x7e\x7d\x26\xd7\x9a\xd9\x9d\x66\x77\x8e\x0e\xac\xe8\xcb\x2e\x4a\xb3\x3b\xbd\x9d\xf4\x5e\xd2\x7b\x49\x6f\x24\xbd\x91\xf4\x46\x12\xae\xa6\x77\x91\xde\x45\xc2\xd5\xf4\x46\xd2\x1b\x49\xd6\x4e\xce\x76\xf8\xf9\x4e\xef\x25\xbd\x97\xf4\x5e\xd2\x7b\xc9\x0e\xf4\x78\x3b\xe9\xed\xa4\xb7\x93\xb0\x37\xbd\x9d\xf4\x5e\xb2\xc7\xbc\x75\x2d\xac\x6b\x61\x5d\x0b\xeb\x5a\x58\xd7\x82\xbd\x1d\x70\x29\xe0\x52\xc0\xa5\x80\x4b\x01\x97\x02\x2e\x05\x5c\x0a\xb8\x14\x70\x29\xe0\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\xd3\x3b\xea\x5d\xf0\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\x4d\xb8\x34\xe1\xd2\x84\x4b\x13\x2e\xf5\x8e\x26\x59\x35\xc9\xaa\x49\xb3\x3b\x77\x7f\x6e\x24\xb3\x67\xd2\xec\x4e\x2b\x7b\x5a\xcd\xf3\xf4\x7f\x8d\x43\x73\x3c\xad\xe6\x69\xa6\x27\x8b\x25\xcd\xf7\xcc\x76\x57\xeb\x65\xd6\xa7\x95\x3d\xcd\xfd\xb4\xb2\xa7\x95\x3d\x6f\xb3\x31\x39\xbf\xdd\xe1\x10\x20\x21\x40\x42\x80\x84\x00\x09\x01\x12\x02\x24\x04\x48\x08\x90\x10\x20\xad\xf5\xd9\x38\x60\xad\xbf\xd6\xfa\x0b\x13\xae\xb5\xfe\x42\x86\x0b\x19\x2e\x64\xb8\x90\xe1\x42\x86\x0b\x19\x2e\x64\xb8\x90\xe1\x42\x86\x0b\x19\x2e\x64\xb8\x90\xe1\x5a\xfd\x2f\x7c\xb8\x56\xff\xdb\x21\x5d\x58\x71\x21\xf9\x85\x18\x17\x62\x5c\x48\x7e\xe1\xc6\x85\x1b\x17\x6e\x5c\x48\x7e\x9b\xe3\x04\x9e\x5f\x18\x72\xe1\xc6\x85\x1b\x17\x0e\x74\xd8\xe1\xc2\x81\x0b\xa5\x2f\x34\xb8\xd0\xe0\xc2\xea\x0b\x13\x2e\xab\xf5\x7a\xbf\xd7\xfb\xbd\xde\xef\xf5\x4e\x2f\xdc\xbe\xde\xec\x85\xd8\xf7\xf4\x7f\x7d\xb3\xf7\x7b\xcf\xfb\x3b\xb3\xde\xc2\x99\x75\xce\x99\xf7\xcd\xbf\x33\x5f\xd6\x31\x77\xe3\x9d\xd6\xb5\x69\x5d\x9b\xd6\xb5\x69\x5d\x9b\xd6\xb5\xc9\xde\x9e\x70\x69\xf6\xf9\x70\x69\xc2\xa5\x09\x97\x26\x5c\x9a\x70\x69\xc2\xa5\x09\x97\x26\x5c\x9a\x70\x69\xc2\xa5\x09\x97\x26\x5c\x9a\x70\x69\xc2\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\xea\x1d\xf1\x82\x4b\x0b\x2e\x2d\xb8\xb4\xe0\xd2\x82\x4b\x0b\x2e\x2d\xb8\xb4\xe0\xd2\x82\x4b\x0b\x2e\x2d\xb8\xb4\xe0\xd2\x82\x4b\x0b\x2e\x2d\xb8\xb4\xe0\xd2\x82\x4b\x0b\x2e\x2d\xb8\xb4\xe0\x52\xed\x6e\xce\xfa\x46\x68\xa7\x76\x69\xb7\x36\xb5\xaf\xda\xf8\xb4\xfe\x3b\xf5\x9a\x7a\x4d\xbd\xa6\xf3\xe7\xd1\x3a\x7f\x39\x7f\x8d\xbf\x31\x5e\xbd\x71\xe5\x81\x5b\x79\xe0\x56\x1e\x58\x9f\xdf\xbf\x31\xeb\x5d\x8c\x59\x23\x73\x8c\x37\x42\xeb\x9c\x88\xbf\x31\x6b\x1d\x1f\xb3\x66\xd3\x20\x51\x5f\xff\xd5\xb7\x7a\xad\xfc\xe2\x6f\xac\xb2\xf6\xb7\x52\xaf\xb1\x0a\x61\xc6\x2a\x1c\x18\xeb\x9d\x59\xc7\x35\x1a\x95\x7a\x6d\xa5\x5e\x63\xd7\xde\x73\xec\x7a\x02\x63\xef\xbb\xea\xdb\xea\x7d\x29\xf5\xda\x4a\xbd\xea\x93\xf3\x37\x24\x4d\x8d\x53\x16\xc2\x18\xaf\xae\x21\xcb\xc2\xaf\xe3\xfe\xc4\xf5\xd4\xbb\x50\xea\x35\xb2\xd6\xb8\x6a\x7d\x67\xfd\x3a\xd9\xf5\x41\x56\x73\xf0\x88\x8e\x76\xea\x2b\xf5\x1a\xf6\x05\x83\xe5\x3f\xac\xe6\xc3\x6a\x3b\xc6\xcb\xfb\x37\x90\x0f\x0e\xc4\x7c\x03\x19\xdf\xc0\xa3\x36\x84\x85\x07\x1e\xb5\x81\x47\x6d\x60\x35\x1b\x38\xcf\x06\x46\xb1\x81\x5d\x6c\x2b\xf5\xda\x4a\xbd\x86\xe2\x8e\xa1\xd0\x63\x08\x0b\x0f\x21\xe2\xf1\x76\xf6\x27\xf7\x6f\x48\xd8\x1e\x12\xb6\x87\x84\xed\x21\x61\x7b\x48\xd8\x1e\x12\xb6\x87\x84\xed\x21\xb1\x70\x2b\xf5\xaa\x51\xd4\xad\xb1\x67\x5d\x5b\xd6\x35\xbf\x7e\x17\x7b\x7b\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x7e\xbf\x0e\x97\x16\x5c\x5a\x70\x69\xc1\xa5\x05\x97\x16\x5c\x5a\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x0d\x97\x36\x5c\xda\x70\x69\xc3\xa5\x7d\xf6\xbf\xff\xfd\x4f\xff\xcb\xff\x6d\xdc\x6f\x7e\xff\x97\xff\xe7\xff\xf5\x7f\xfb\x5f\xfe\xf1\xbf\xff\x4f\xff\xf3\xbf\xfd\xdb\xf7\x37\xe2\xfe\xfb\xdf\xbf\xd5\x20\xab\x53\xfe\xad\x66\xfb\x79\xff\xfe\xf7\x6f\x6b\xff\x8d\xac\x7f\xd5\x0c\xbc\xeb\xdf\xff\xfe\xed\x52\x01\xac\x83\xf7\x17\x51\x07\x44\xc9\xaa\xd7\x3b\x7f\x31\xeb\xe4\xd1\x12\x82\x8e\x08\x4b\x3b\xc2\xb2\xed\x68\xff\xc5\x9e\x8e\xde\x5f\x6c\xff\x6d\x2e\xdd\x3a\x9a\x54\x4b\xeb\x48\x79\xfe\x57\x47\x49\xff\xc7\x11\x9a\x59\x47\xef\x6f\xce\x3a\x4f\x69\xfd\xa9\x23\x71\xa7\x33\x1d\xe5\xdf\xea\x5b\x29\x0b\xe6\xa4\xa3\xf7\xb7\xdc\x95\x38\x54\x0e\x47\xe3\x6f\xa5\x1e\x65\xd1\xa4\x1e\x65\xd5\xa4\x1e\xf5\xfe\xbe\xba\x2a\xeb\xd5\xab\xdf\xa8\xf5\xe5\x8c\xba\xaa\x7a\x97\x39\xc2\xd1\xfe\x4b\x0f\xa5\xde\x45\xce\xfa\x6f\xed\x61\xde\xef\x28\xfe\x9e\xe7\x52\xbb\x95\x77\xaa\x47\xed\x58\x5e\xd6\x7f\xcb\xe6\x1a\x9f\x07\x09\x5c\xc6\xe7\x29\xc7\x57\x87\xf5\xa9\x30\xf2\x8d\xef\xf5\xf1\xfa\xbb\x31\x76\x1f\xef\x3a\xbe\x7d\x9c\x7f\x37\xc2\x57\xbf\x59\xe7\xcc\xe1\x78\xcd\xbf\x1b\xeb\x77\x5c\x9f\x7b\x2d\x02\xc2\x37\x56\x7f\xff\xfe\xfe\x6e\xec\x70\x31\x27\xfe\xca\xac\x76\x35\xeb\xfe\xd5\xc2\xd8\xc7\xaf\x8e\x7b\x00\xec\xa8\xe3\xeb\xf8\xac\xbf\xdb\x8f\x92\x1f\xb2\x40\xc5\xe5\xcf\xf3\x57\x83\xd4\xf1\xfa\xfe\xee\xee\x9b\x8d\xfa\xfe\xfd\xfa\xf3\xea\x7b\x3e\xe7\x97\x4d\x7e\x73\x4c\xc7\xf7\xfb\xbb\x19\x5f\x1f\x8f\x3a\xee\x73\x6e\x9d\xd3\x4f\xaa\xec\xa5\x9b\xee\x91\xbd\x74\x73\x66\x1f\xc7\xdf\xcd\xd5\x7d\xdf\xac\xe3\xee\xfb\xaa\xaf\x81\xc8\x76\xba\x69\x28\xb2\x94\x6e\x9e\xaf\x8f\xeb\xf3\xe3\xfb\x6b\x95\xbc\x69\x10\xb0\x70\x6e\xde\x3e\xbf\x9e\x7f\xde\xfe\x7c\xe6\xdf\xbd\x7d\xfd\x65\x8d\xdc\xfb\xf9\xfe\xb2\x3a\xee\xed\x39\x52\x18\x7b\x6f\x3f\xb7\x42\xd7\x7b\xfb\xb9\x15\x4e\xd6\x42\x51\xc7\x85\x4e\xf7\xf6\x33\x39\xdf\xfc\xbb\x2f\x9f\xf9\x35\xcf\xdf\x9b\x7d\xef\xb5\x26\xbe\x99\x75\xfc\xbe\x3a\xde\xee\x05\xd7\xe9\xdb\xb7\x8f\xcf\xfc\xab\xe5\xa5\x8f\x4f\x8d\xb4\x3e\x3f\xeb\xd8\x54\x41\x54\xf5\x8e\x77\x8a\x84\xea\x9d\xf3\x3b\xbe\x7f\xef\xf4\xf7\x8f\x31\xea\xf8\xf4\x71\x7d\xe7\xfd\x1c\xcf\x51\x63\xb6\xcf\x39\xf1\x57\x4b\x53\x1f\xaf\x3a\x76\x0d\x31\xee\xdf\xcb\x37\xfb\xf8\xd5\xb1\x69\x3b\x2c\xcf\xe3\x19\xd1\x63\xd4\x26\xb4\xfe\x7a\xbf\xbf\x2c\xda\xde\x7e\xfd\xc5\xc8\x18\xd9\x7f\xad\x36\x39\x6e\xff\x75\xf4\x6b\x68\x19\xb5\x15\xac\xbf\x7e\x67\x1e\x67\x36\xc4\x8c\xda\xfc\xd5\x5f\xbf\xdf\x4b\x86\x85\xf7\x5c\x7f\x31\x21\xce\xef\x5b\xae\x2b\xcb\xbe\x96\x53\x06\x4a\xfc\x00\x68\x9c\x7b\xea\xaf\x17\xbf\xbf\xf2\x6f\xc4\x1c\xbf\xbf\x5e\xf8\xeb\xd7\xef\xad\xfa\x6b\xf6\x2f\xe4\xf0\xd7\xef\x5a\xb2\x96\xfc\x58\xb3\xaf\x25\x63\xd6\x5f\xbf\xab\xce\xd8\x7f\x23\xf6\xec\xa7\x94\x65\x48\xc5\x5e\xf3\xf7\x57\xf5\xdb\xb7\xfb\x3d\x57\x76\x57\xfc\xfe\x7a\xf5\xd7\xf6\x7b\x31\xca\x18\x8b\xdf\x1d\x85\x27\x38\xa3\xa1\x33\x6a\x2b\x3e\x66\x63\x46\x5d\xd3\xe7\xaf\x06\xdd\x9a\x52\x63\xfe\xc0\x38\x6a\xc2\x8c\x19\xe7\x9f\x7f\x6d\x7f\xe5\xef\xaf\x32\x15\x23\xfb\x3b\x6b\x49\x2e\xc3\xb1\x7f\xaf\x96\xa7\x32\x26\xfb\x3b\x6b\xe3\x55\x0f\xbc\xfb\xbd\x13\xcc\xc7\xd7\x7f\x95\x49\x36\x6f\x3f\x97\x99\xb5\xcc\xac\xd3\x6f\x7a\xd6\x86\xb0\xcc\x4a\xbf\x3e\xdf\x60\x4c\x7e\x7d\xe6\x9b\xcc\x49\x63\x7b\xd4\x7e\x94\x89\xd9\x8b\x44\xbc\xcb\xb0\xd4\x6f\xed\xbb\x19\x98\xfa\xad\xe3\x7f\xfb\xba\xf7\xbd\xcb\xd0\x3d\xbf\xff\x6d\x86\xdb\xc9\x7e\x2b\xea\x0d\xca\xc4\x74\x0f\x72\xf8\xcb\x98\xdc\xbf\xbf\xea\x7f\xbf\x77\x7b\xca\x78\x2a\xe3\xd2\xaf\x13\x40\x29\x23\xd3\xaf\xa7\xf7\x90\xef\x65\xff\xf5\x33\x3d\x7d\x67\xce\x32\xff\x6e\xf4\xe8\xc9\x59\x00\xff\x43\xef\x91\xb5\x55\x2b\x33\x74\xf4\x5f\x4c\xcd\xf9\xfb\xdf\x65\x8a\x36\x46\x0d\x19\x4a\x65\x86\xf6\x99\x8f\x11\x7b\xc7\xfa\xfd\xb5\x99\xa5\xbf\x33\x6b\xd4\xdd\xfb\xbb\xb2\x02\x93\x32\x53\x7f\x67\x4e\xdf\xd2\x0b\xb3\xec\x9d\x32\x5b\x5d\x99\x6c\xed\x32\x4d\x3d\x17\xdc\xe3\xe3\x9d\xfe\x4e\xf4\xc2\xe3\x37\xd7\x07\x9a\xcc\x32\x47\xdd\xed\xeb\xdc\xd6\xc6\xb4\x39\x6d\x75\x5e\xaf\x36\x73\xda\xf2\xbc\xe9\x59\xd7\x5f\x65\xec\xcf\x5e\x94\x27\xd3\xf3\x2d\xb3\xbf\xfe\xea\x4d\xca\xef\x7f\x8f\x29\x1d\xbf\xff\x95\x59\xf9\x16\xd4\x9f\x93\x31\xf9\xd6\xcc\xdf\x5f\xfa\xad\x3e\x93\x81\xf8\x7a\xed\x9a\x93\x11\xf8\xd6\xe9\x2b\x63\xb2\xbd\xc5\xaa\x99\x93\xb1\xf5\x16\xc4\x6a\x21\xcf\xda\xe6\x33\x12\x64\x71\xd5\x76\xff\xf4\x5f\xcb\xe6\x9f\x11\xd0\xfc\x8d\xb5\xfd\x3f\xfd\xd7\xbc\xdc\x00\xbf\xbf\x4e\x6f\xe4\xfe\xf9\x57\x6f\xe8\xee\xef\x2f\x1b\xb5\x18\xbf\xbf\x7a\x83\xd7\x36\xd7\x97\xbd\x95\xfb\xfd\x42\xf6\x96\x2e\x7f\x7f\x5d\x9b\x3a\x77\x04\xae\xcf\xfe\x8c\xc1\xe6\x05\x3c\xfb\xeb\x7b\x00\xd9\x67\x8f\x2f\x7f\x7f\xad\xfa\x6b\xfc\xfa\xd5\xe6\x72\x8f\xf8\xe7\xff\x4e\xfd\x35\xfb\x7f\x51\xd7\xb9\x67\x9b\x40\x98\x6c\xce\xde\xa3\xdf\xfb\xfb\x47\x7d\xe7\x9e\xe7\xdf\xff\xfd\xef\xff\xf1\x7f\xff\xdf\xbf\xf8\xee\xff\xfc\x6f\x05\x93\x17\x58\x3e\x20\xf9\xfd\x1d\x25\x27\x47\x11\xca\xa0\x0a\x79\x76\xd9\x64\x47\xf9\xc0\x51\x3e\x70\x28\x7d\x14\x00\x36\x0c\xae\x9a\x22\xf5\xbf\x3a\x3a\xd7\x51\x7d\xc7\xee\x1e\xce\x2a\x3b\xba\xda\xd0\x63\x6b\x1b\x98\xc7\x5f\x48\xaf\xac\xe3\xa9\x5d\x5a\xa0\x5a\x76\x47\x8c\x32\x80\x3c\xae\xfa\xb4\xbe\xd1\xaf\xb1\x37\xd6\x70\x58\xe6\xd5\xac\x73\xe3\xfd\x89\x08\xd9\x16\x8a\x01\x09\x01\xd5\x25\xfb\x02\x3f\x54\x06\x65\xb5\x6e\xae\x6f\xf1\xf7\x3d\xdd\xf6\x65\xf4\xe5\xa5\xd6\x43\x7a\xdd\xf7\xd3\x0e\xad\xf5\xa3\xe6\x57\xcc\xcf\x7a\xf1\x6d\x97\xe9\x17\xeb\x76\x32\xff\x62\x20\x5b\xf6\x08\x99\x18\xae\xde\xfd\x94\x15\x8b\x4d\x1e\x99\x3c\x26\x7e\x04\xfa\xaa\x5a\x95\xb9\x8e\xac\x7b\x59\x75\x7f\x65\x07\xd6\x46\xb9\x1e\xec\x73\x2f\xde\xef\xd7\xad\xdf\xbd\xdd\x4e\xed\x71\x0d\x7e\x6c\x44\xe1\xe4\x9f\xfd\xa8\xad\xa9\x84\x62\xd5\xf9\x0a\xf5\xd5\xf2\x2b\xeb\x97\xd5\x8c\x8e\x00\x7f\x00\x2a\x01\x79\xc7\x48\x02\x84\xa6\xea\x2e\xcb\x34\x2c\x7b\x6c\x3f\xc6\xe0\xfc\x23\x5f\x52\xff\xc9\xbf\xff\xed\xff\xf5\xbf\xfe\xaf\xff\x15\xcd\xcd\x51\x86\xdf\x28\x0b\x6b\xde\x3f\xdc\xe4\xb2\xb7\xf1\x96\x53\x1d\xb8\xb9\xf6\xff\x89\xef\x5b\x8c\xc7\x7e\x3c\xe7\x8f\xe0\xc8\x75\x17\xf9\xd5\x73\xfe\x6f\xb9\xd4\xb2\x8d\xef\x79\x7f\x78\x80\x6f\x32\x3b\x47\xd9\x80\x8c\xd1\x5b\xff\xf5\x6a\xeb\xb3\xb2\x08\x88\x1d\xd0\x5b\xb8\xb9\xeb\x4d\x2f\xcd\xfd\x4f\xfd\x5a\xed\xd7\x99\xe0\x4a\x35\xd5\x6e\x2a\xe9\x14\xca\x14\xc9\x1c\x37\xfe\x8b\x5d\xe5\x84\xff\x57\xde\xe4\x7f\xa9\xa9\x01\xd5\xc3\x2a\xb5\x3d\x27\x1b\x23\x7a\x54\x9b\x40\x5f\x68\xa7\x76\x69\xff\x53\xef\xad\x46\xaa\x4e\x10\x6f\x42\xba\x09\xe1\xe6\x68\xf0\xe9\x49\xe3\x07\xc3\x0f\x9a\xdb\x33\xfc\x60\xe8\x1b\xfa\x86\xbe\xa1\x6f\xe8\x1b\xfa\x46\xcf\x79\x7d\xa7\xbe\x53\xdf\xa9\xef\xd4\x77\xea\x3b\xf5\x9d\xfa\xce\xff\xa3\x17\x55\x08\xd2\xd0\xa4\x57\xcf\xf6\xd5\x50\xe8\x17\xb7\x5f\x34\x7b\xe7\xf6\x8b\xdb\x2f\x6e\xbf\xb8\xf5\xdd\xfa\x6e\x7d\xb7\xbe\x5b\xdf\xa3\xef\xd1\xf7\xe8\x7b\xf4\x3d\xfa\x36\xe6\x1f\x7d\x8f\xbe\x0d\xc1\x47\xdf\xfc\xfe\x8b\xd7\x5b\x56\x24\xd4\xda\x6d\xe5\x9a\xbb\xfb\x68\x59\xc8\x1b\x42\x6e\x88\x77\x20\xde\x31\xf3\x0f\xc4\x3b\xfa\x1e\x7d\x8f\xbe\x47\xdf\xa3\xef\xd1\xf7\xe8\x9b\xfa\xa6\xbe\xa9\x2f\x74\x2d\xf0\xae\x56\xdf\xd4\x37\xf5\x4d\x7d\x53\xdf\xab\xaf\xa5\x66\xb2\x9c\xb9\x39\xdb\xe2\x8d\x79\xf5\x65\xdd\xcf\xb6\xea\x2d\x65\xb3\x11\xfe\xe9\xfb\xf4\x6d\x2b\xdf\xe2\x32\xdb\xc6\x6f\xac\x82\xf0\xac\xe2\x98\x10\x7e\x42\xf8\x05\xe1\x17\x84\x67\xd5\xc5\x82\xf0\x0b\xc2\xaf\xcf\xe2\xf5\xd9\x0f\x7c\xa9\xbd\x5a\x7d\x87\xbe\x43\xdf\xa1\xef\xd0\xd7\x6e\x62\x0d\x7d\x7b\x2f\x31\xf4\x1d\xfa\x0e\x7d\x43\xdf\xd0\x37\xf4\xed\x7d\x46\xe8\x6b\x97\xb1\x42\xdf\xd0\x37\xf4\x0d\x7d\xed\x3a\xd6\xd4\x77\xea\x3b\xf5\x9d\xfa\xce\xff\x3c\x6c\xfe\xff\x0c\x94\xb5\xfc\xc0\xf6\x03\xe0\x7f\x6d\x3f\x60\x00\x2d\x03\x68\x19\x40\xcb\x00\x5a\x06\xd0\x32\x80\xf8\x69\xa9\x62\x57\xab\xaf\x01\xb4\x0c\xa0\x65\x00\x2d\x03\x68\x19\x40\xcb\x00\x5a\x06\xd0\x32\x80\xf8\x90\xa9\x68\x57\xab\xaf\x01\xb4\x0c\xa0\x65\x00\x2d\x03\x88\x9f\x36\x96\x01\xb4\x0c\xa0\x65\x00\xad\xb6\x55\x0c\xa0\x65\x00\x2d\x03\x68\x19\x40\xcb\x00\x5a\x06\xd0\x32\x80\x96\x01\xb4\x0c\xa0\x65\x00\x2d\x03\x68\x19\x40\xcb\x00\x5a\x06\xd0\x32\x80\x96\x01\xb4\x0c\xa0\x65\x00\x6d\x03\x68\x1b\x40\xdb\x00\xda\x06\xd0\x36\x80\xb6\x01\xb4\x0d\xa0\x6d\x00\x6d\x03\x68\x1b\x40\xb6\x65\xb1\x0d\xa0\x6d\x00\x6d\x03\x68\x1b\x40\xdb\x00\xda\x06\xd0\x36\x80\xb6\x01\xb4\x0d\xa0\x6d\x00\x6d\x03\x68\x1b\x40\xdb\x00\xda\x06\xd0\xee\x6d\xaa\x01\xb4\x0d\xa0\x6d\x00\x6d\x03\x68\xf7\xb6\xd5\x00\xda\x06\xd0\x36\x80\xf6\x5c\xff\xe9\xb1\xf2\xc6\xfc\x7b\x63\xfd\xd5\x26\xa6\xb6\x2e\x6f\xe4\xdf\x1b\xf7\xaf\x36\x82\x2f\xbe\xbf\x32\xc6\x5f\xc4\xdf\x8b\xf9\xf7\x62\xfd\xbd\xd8\x7f\x2f\xce\xdf\x8b\xfc\x7b\x71\xff\x5e\xbc\xbf\x37\xc7\xdf\x2b\xeb\xa3\xcc\x90\xb2\x56\xe6\xfe\x6b\x2f\xca\x7f\x7e\xb5\x7e\x6b\xff\xf1\xb6\xac\xfc\x2b\x93\xff\xad\xf7\xf7\x78\x59\xc6\xdf\xdb\xf1\xf7\xf6\xfc\x7b\x7b\xfd\xbd\xbd\xff\x5e\x59\x5b\x3b\xff\xde\xbe\x7f\x6f\x97\x39\x54\xf6\x4e\x99\x3b\x65\x06\xad\x32\x80\xca\xf4\x29\xe3\xe8\xef\x9d\xb2\x94\xde\x7f\xcf\x05\xf5\x7f\x40\x43\xd8\x66\x88\x2d\x7d\x65\x8e\xd7\xa6\x6f\x7c\x65\xba\x7f\x8b\x1f\xb3\x9a\xb2\xcd\xbf\xda\x5d\x7f\xeb\xfe\x91\xbf\x19\x5f\x21\xc0\x57\x00\xf0\xd5\xfc\xff\x6a\xfa\x7f\x35\xfb\xbf\x9a\xfc\x5f\xcd\xfd\xaf\xa6\xfe\x57\x33\xff\xab\x89\xff\xd5\xbc\xff\x6a\xda\x7f\x35\xeb\xbf\x9a\xf4\xb5\xb1\x1a\xb5\x9f\xa2\x9d\x43\x52\x87\xa2\xce\xa8\x7d\xd4\xf8\x6a\xb6\x7f\xf9\xdf\xd5\x66\x21\xc9\x33\xbe\x42\x8d\xaf\x40\xa3\xb6\x68\xa3\x76\x66\xe3\x2b\xc4\x18\x9c\xb7\x85\x1a\x5f\x81\x06\xc7\xc4\x57\x90\xf1\x15\x62\x7c\x05\x18\x5f\xe1\xc5\x57\x70\xf1\x15\x5a\x7c\x05\x16\x5f\x61\xc5\x57\x50\xf1\x15\x52\x7c\x05\x14\x5f\xe1\xc4\x57\x30\xf1\x15\x4a\x7c\x05\x12\x5f\x61\xc4\x57\x10\xf1\x15\x42\x7c\x8f\x7f\x98\x67\x78\x54\x13\xd5\xcc\xff\xf6\xbb\xc4\x57\x88\xa8\x10\xe3\x20\x7a\x41\x9c\x81\xa2\x4c\x58\x02\xd1\xb2\xe1\xff\x43\xb8\xf6\x6a\x9a\x23\x38\xc4\x6c\x88\x96\x10\x07\x21\x62\x41\xac\x83\x28\x03\x71\xb4\x21\x76\xc3\xbe\xf6\x76\xcd\xaa\x82\x32\xa4\x6e\x78\x03\xd1\xb5\xbd\x3d\xf5\x30\xc7\xea\xd7\xbe\xfa\x6f\x4d\xeb\xfd\x7f\x68\x3e\xfd\xab\xf9\x57\xf3\xaf\xe6\x5f\xcd\xbf\x9a\x7f\x35\xff\x6a\xfe\xd5\xfc\xff\xbb\x79\xb3\xac\x96\x59\xfb\x95\x59\x1b\x96\x59\xd6\xcd\x2c\xf3\x68\xd6\x9e\x65\xd6\xa6\x65\x96\x75\x33\xcb\x92\x99\x61\x4f\x52\x3d\xca\x14\x9a\x65\x3c\xcd\xda\xbb\xcc\x10\xde\xad\x1e\x65\xe7\x4c\xfb\x97\x59\x3d\xe6\xf8\x93\x28\x22\x4f\x44\x9a\x88\x2c\x11\x49\x22\x72\x44\xa4\x88\xc8\x10\x91\x20\x22\x3f\xc4\xa5\x0d\xca\xb6\x63\xb2\x50\x27\xe3\x92\xb2\xed\x98\x4c\xd3\xc9\xaa\x9c\xec\xeb\x39\x46\xff\x37\xab\x5d\xce\x39\xfa\x96\xf9\x39\xd9\xa4\x93\xc5\x39\xc7\x74\xe6\x10\x0f\xac\x6d\xe5\x8c\x21\x52\x58\xdb\xca\x39\xca\x34\x9d\xc3\x99\xb1\xfb\xbf\xff\xf9\xed\xd6\x98\xa3\xfd\x35\xa3\x63\xab\xef\x4f\x7e\xdc\x98\x71\xc6\xdf\xed\xed\xf7\xb3\xd5\x7f\xb6\xfa\xcf\x56\xff\xd9\xea\x3f\x5b\xfd\xbb\x7e\x91\x50\xad\xbb\x29\xe3\x7b\x8e\xea\x3b\x87\x64\x02\x3e\x55\xde\x55\xae\xd3\x2d\xc1\xe0\x9f\xde\x55\xae\x58\x4e\xd9\x9c\xfb\x8f\x60\xe3\x3f\xfd\xac\x3f\xd7\xf1\xff\xf8\x31\xf7\xaf\xe6\x5f\xcd\xbf\x9a\xff\x73\x4d\xa0\xad\x0a\xe4\xac\x31\x5b\x46\x6f\x9d\xf9\x17\xe3\xbc\xf3\x17\x8b\x32\xf1\x26\x85\x3c\x49\x05\x1e\x54\x8b\x13\xf5\xdd\x6c\xc2\xe3\x82\xfa\x58\x85\x01\xb1\x37\xf9\xef\xf1\xe8\x8f\xbe\xf9\x37\x27\xca\xc6\xd9\x42\x04\xd4\x4f\x4f\xe6\xf8\x8b\x98\x83\x52\xf2\xc8\xbf\xd8\xf1\x8d\xbf\x98\x6b\xd7\xe7\x28\xd6\x9a\xa8\xbe\xa5\xcf\x82\xf4\x44\xb4\x24\x14\xd5\xe4\x4d\xde\x6d\xa0\xe8\x23\x64\x11\x73\xcd\xf9\x17\x2b\x96\xac\xb9\x3d\xff\xe2\x44\xdd\xc5\x69\xd1\xf0\xd9\xe2\xda\xae\x8a\x3c\x34\xfa\x98\x40\xb3\x12\x78\x1a\x42\x65\x76\x10\xd5\x89\x88\x7d\xff\x22\xee\x7c\xae\xe7\x78\x32\x75\x85\xfb\x8c\xba\xd3\xfa\xc5\x75\x69\xbb\xd2\x63\x3e\x63\xd6\xbd\xdc\x4b\xb9\x99\x1e\x2a\xd1\x42\xc4\x52\x73\x10\x7d\x0a\x32\x65\x11\xad\x21\x7f\x3c\x19\xf4\xf3\x08\x02\x37\x72\xe8\x83\x60\xef\xbc\x7b\xfe\xa2\xd6\xa7\xba\xce\xa1\xad\xbb\xe3\x13\x9d\x81\x96\x2f\x89\x72\x7c\xaf\x16\x29\x24\x79\x11\xd9\xc2\xeb\x11\xf5\x0d\x48\xac\x9b\x4c\x17\x61\xdb\x6c\xa9\x0a\xa2\xf3\x2a\x1b\x82\xd8\x48\xbd\xe5\x7a\xd7\x19\x75\xa7\xb1\x3e\x6f\x79\xff\xc5\x6a\x89\x9b\xb1\xe9\xce\xf6\x35\x23\x0e\x6f\x31\x43\xd4\xda\xf2\x4c\xa7\x6c\xca\xd6\xe2\x8d\xb1\xc7\xfe\x0b\x54\xdc\xf5\x46\x06\xd5\x6a\x82\x27\xc8\x20\x9b\x46\xea\xcc\xa8\x5f\x6f\x5e\x10\x24\xd9\x5c\xf4\x4d\xc2\xd7\x4a\xb1\x33\xf2\x18\x45\x75\x5f\x5f\x5d\xd5\xc8\xb3\x08\x7c\x8f\xba\x86\xfc\x27\xf1\x5e\xcc\x6f\xd4\xf5\xaf\x7a\x4a\x38\x21\xa2\xa9\x16\x55\x32\x45\x7c\x35\xaa\xd1\xb9\xcd\xd3\xca\xa9\xc8\xdd\x67\xd3\xc9\xd7\xb2\x17\x63\x65\x7d\xc3\x5b\x35\xfe\x67\xbd\xcd\x65\x2c\x9d\xe1\xcd\xce\x5d\x23\xf6\x10\x16\xcf\x6f\xd1\xe2\x1d\x7f\x21\x37\x30\x9a\x44\x59\xc5\x7c\xcd\x82\xef\x9f\x4a\xa8\x73\xb7\x0c\x4b\x8b\x64\xa2\xd0\x3b\x75\x9d\xd8\x0e\x26\xba\xb8\xf9\xb5\x4c\xcd\x3c\xad\x13\x1c\xc6\x00\xf2\x4e\x74\x5a\xf5\x1e\x23\xbf\x6a\x47\xdd\x75\x7c\x37\xbf\x7a\x47\xaf\xda\x7a\xa7\x11\x77\xd7\x35\xaf\x3a\x5e\xf5\xeb\x21\xd3\x3c\xf6\xa6\xc0\xbd\x6f\x5d\xb3\x31\xac\x32\x20\x24\xa6\x04\x2d\xd8\x20\x3a\x1a\x84\x0a\xa3\xe5\x2c\x82\xe4\xd7\x44\xf3\x39\x89\x66\xac\xa6\xef\x45\xd9\x98\x5d\x7f\x1c\x43\x3e\xeb\xfc\x0f\xed\x73\x14\x80\x81\x28\xb1\xa6\xe9\x36\x6b\xea\x0a\xcd\x85\xb5\xea\xb7\xd6\xae\x37\xb8\xbd\xd3\x33\xea\x1d\xe5\x48\x42\xed\x35\x42\x72\x93\xed\xda\xbf\x71\x42\x22\x66\xdf\xff\x0f\xed\x51\x57\xd6\xd6\x6f\xcd\xac\xfb\x4a\xb4\xd3\xf3\x14\x2e\xa9\x84\x8b\x79\xa2\x30\x84\xac\xcd\x8c\x7a\x62\x27\xe9\x9d\x87\x19\x5d\x33\x25\x54\x45\x07\x51\x9d\x58\xa7\x3e\x57\x2f\x5b\x6f\x0d\x9d\xd9\x33\x8f\xf2\xfd\xc5\x88\x7a\xce\x7e\x37\x30\xb2\x04\x9e\x98\xc0\xd0\x10\xf8\x4e\x62\x50\x46\x1f\xab\xc7\x58\x61\x5a\xc0\x84\x19\xf5\x64\xe6\xaa\xbb\xeb\x31\x30\x06\xb5\xf8\x28\xac\x38\xbb\x90\xf6\x94\x59\x1a\xb9\x8e\xb7\x53\x57\x4e\x64\x3f\x5a\x9a\x60\x90\xa3\x1c\xa8\x97\x07\x6a\xd2\x41\xe2\x60\x22\x88\x9d\x04\x49\x66\x3d\xcf\x7a\x02\xfb\x6f\x4e\xb4\x8b\x13\x39\xda\x42\x27\x29\x12\x1f\x01\x1f\x0e\x41\xda\x83\x84\xf8\xb4\x4e\x70\x4b\x01\xac\x7a\x3e\x18\x1a\x62\xe6\x95\x73\xfc\xd5\x78\x8e\x96\x7b\x1d\xa8\xb8\x91\x64\xaf\x16\xd0\x28\x4c\x3b\x2d\xc1\xda\x62\x0e\xe3\x27\xf7\x24\xb7\xa4\xf0\x1c\xa5\xd4\x14\xab\x8e\x20\x15\x18\xe7\x8b\x7a\x32\x35\x1e\x16\x01\xfd\xb5\x69\xb1\x9f\x51\x6f\x21\xeb\x69\xac\x53\xef\x65\x9b\xe3\xdb\xd8\x10\xff\x8e\x26\x8a\x7e\x65\x5c\xc6\x29\x13\x3a\x4e\x6b\xe7\x7f\x31\xa9\xce\x13\xaa\x25\x47\x86\xd8\x3b\x3c\xb7\xd9\x92\x26\x28\xa2\xd5\xc8\x4e\x79\xe5\x73\x53\xc1\xff\x68\xe4\x8f\x32\x7c\x83\x4c\x50\x8c\x73\xfb\x7d\x15\x92\x18\xb7\xeb\xd5\x4c\xc9\x6f\xf8\x2d\x82\x66\x88\x93\x27\x9a\xcf\x65\xc5\xd9\xc4\x76\x32\x7f\x42\x16\xb7\xce\x1c\x2d\x1d\x46\x4e\xa4\x66\xab\x80\x60\xe1\xc6\xfc\xa7\x40\x4a\x22\xe7\x1e\x35\xf7\xa3\x80\xb2\xd0\xb2\xfa\xae\x48\x6b\x96\x39\x9b\x46\xcb\xa9\x37\x72\x4e\xa1\x53\x6e\x63\xa3\x95\xa4\x9b\x26\x1c\xb5\xf9\x26\x27\xb8\x7f\xf4\xc0\xa8\x7f\x89\x0c\x64\xcb\xc9\x22\x22\xb5\x15\x9a\x37\x6b\xcd\x32\xaf\x63\xa6\x19\xf7\xb5\x86\xfa\x7f\xa8\x23\xc7\x36\xae\x48\x1f\xd4\xdc\x7c\x7f\x91\xbd\x7a\x36\xfd\x76\xad\x4a\xa1\xb6\x20\x86\x77\x34\x5e\xa1\xc7\x3a\x85\x30\xd2\x01\x02\xa1\x55\xe0\x63\x08\x95\x85\x73\x22\x7b\xde\xc4\x60\xcf\xa9\xad\xd6\x3f\x49\x55\xad\x38\xeb\xd5\x3d\x5a\x35\x9a\x0e\xfc\x26\x9a\x5e\x7a\xea\x2a\xdb\xe6\x60\x03\x4c\xb4\xaf\x49\x78\x2d\xb3\xb0\x22\x9a\xb6\x33\x6a\x1d\x39\x24\x11\x26\x01\x99\x79\x9b\x10\xbd\xe6\xec\xf8\x87\xc1\x5b\x2f\x1c\x7f\x6e\x60\x0b\x0d\xd4\x30\xf1\x5d\x4b\xba\x89\x32\xbe\x1a\xa4\x23\xea\x55\x8c\xa8\x97\xb3\x6a\xe7\x57\xb7\xb8\x00\xad\x25\xb1\x8e\x27\x10\x9d\x20\x6d\x5a\xe8\x16\x18\x5b\xa6\x38\x85\x8c\x58\xb7\x1e\xc3\x7a\x93\x98\x3b\x53\x65\xd7\x27\xfb\x6d\x53\xbf\xae\xe7\x64\xdd\xf4\xb9\x69\x41\xdb\xda\x24\xf5\x5e\x43\x46\xc1\x55\xdc\xed\x41\xae\xfa\x66\xbc\xdb\xd1\xcc\xb6\xa8\x4f\x26\x72\x87\x09\x7e\xe6\xc0\x67\x38\x28\x01\x04\x3d\xbc\x9f\x72\x06\x76\xc4\x78\xcd\x92\xcf\x10\x38\xcd\x7a\xbc\x47\x81\x04\x6e\x68\x13\xfd\x58\xd8\xb3\x45\xba\xa9\x33\x2a\xfd\x9d\x4a\x73\xa7\x72\x94\x79\x9b\x19\x5c\x11\xc1\x9c\xb5\x0c\xe2\x05\x8d\x51\x5b\xee\x1a\x56\xb5\x04\xd5\x24\x88\x56\x70\xe9\x85\x9d\xde\x61\x4c\xaa\x0c\x01\xa2\x4e\xeb\x19\xef\x16\xe0\x6e\x19\x74\x2c\xa8\xff\x28\xbb\x24\x0a\x49\x51\xdc\x85\x24\xe6\x50\x4b\x15\xf5\x76\xea\x55\x84\x79\x5b\x2f\x70\xce\x42\xab\xb9\x5e\xad\x7f\x6d\xa7\x7e\x56\xc1\xb2\x11\x63\xf9\xd9\xbd\x6b\x9e\xa3\x98\x8e\xf3\x25\x5b\xd3\x27\xb3\x10\xea\x40\xde\x73\x8d\xf8\xa8\xd7\xb5\x46\x5d\x7e\xee\x5a\xc9\xf2\xd4\xf9\x99\x8d\x86\x04\x4f\x3f\xaf\x9d\x68\xdd\x40\x2a\x1e\x75\xc9\x8b\xd2\xc8\xa6\x0e\x2a\xeb\x64\x1e\xda\xdd\xc7\x27\x67\x97\xf9\x7a\xce\xff\x97\x4a\xf0\xfa\xe9\x48\x7c\x46\x64\x8d\xcb\x53\xb7\xf2\x79\x82\x61\xdc\x14\x82\x14\x18\xd6\x68\xd8\x61\x41\xbf\x40\xc9\xc8\x68\xa5\x41\x4c\xb7\x53\xfc\x70\x06\xc5\x8f\x85\x0b\x7f\xd3\x05\xda\x1e\x49\x1f\xcb\x1f\x9e\xf7\xd6\xf7\x50\x3b\x29\xd8\x29\x18\xf4\x5b\x27\x6b\xdc\x27\xf5\xc5\x4d\x4f\x0c\x77\x64\x60\xdd\x5e\xd4\xc2\xeb\x55\x18\xfd\x26\xda\x57\x20\xbf\x28\x24\x9c\x32\x48\x06\x46\xe4\xc0\xeb\x1a\x78\x24\x03\x23\x61\x0c\x57\x3b\xca\x38\x0c\x99\xad\xb1\x2c\x9d\x8b\x21\xb4\xdf\x64\x8a\x97\xd9\x99\x39\x18\x12\xa7\x1e\xff\xad\x99\x70\xf3\x19\x49\x40\x89\x6a\xe2\xa0\xf5\xd7\x4a\x2f\x41\xc5\x7a\xbc\xde\x14\xd4\xec\x3d\x5f\x2d\xc4\x0f\x90\x0e\xc0\x5b\x2f\xa0\x06\x45\x1b\x1e\x0f\x4c\xd5\xeb\x95\xb3\x13\x08\x36\xe6\xa2\x43\xb8\x69\x1e\x9e\x89\x2d\xfe\xd4\xc0\x51\xb8\x39\x47\xab\x37\x27\x63\x60\xd4\xf3\xc7\xda\x1b\x78\x57\x03\xa5\x53\xa0\x6e\x0a\x94\x03\xa1\x14\x78\x0e\x4b\xbf\x12\xdb\x32\x87\x18\xba\xcc\x5d\xa6\x88\x9c\xfa\x32\x1b\x18\x9c\xf5\x79\x30\x63\x0a\xd7\xea\xf9\x24\xc3\xfb\x59\x16\x21\xd1\xd9\x07\xcc\x5a\x20\x2c\x13\xcc\xce\x8c\x82\xe2\xbc\x8c\xb7\x59\xbf\xd8\xea\x73\x08\x0c\xe6\xa4\xeb\x3e\x69\xa7\x4f\xca\xab\x8b\xe6\x5e\x52\xc3\xce\xdb\xa2\xfe\xad\x70\xdb\xfa\x4e\xf5\xfc\xb1\x61\xc6\xf7\xca\x58\x9a\xdb\x46\xc9\x7b\x3c\x4c\xbb\xc9\xb0\x3c\x13\x8a\x59\x4c\xdf\x3f\xb1\xac\x8c\x96\x5b\x26\x34\x7e\xd2\xc2\xd0\x9a\xac\xb5\xe1\x8a\xf5\x95\x41\x92\xa7\x9e\xa1\x79\x51\x06\x7c\x1a\xc9\xb3\x8c\x67\x8a\x16\x94\x03\x07\x6d\xe7\x41\xd1\x2b\x68\xf6\x4e\x3a\x72\x93\x2e\x4d\x6b\x18\x6e\x2a\xd6\x9b\x46\xd3\xa1\xea\xa0\x9c\x31\xc6\x2e\x4c\xcc\xdd\xa8\x74\x6c\xe2\x6a\x5b\x37\xa0\xff\x98\x36\x05\x26\x7d\xab\x54\x7d\x34\x6a\xa6\x45\xf9\xb4\x0a\xd6\x3f\x95\x33\xef\x4f\xfd\x32\x14\x40\xd7\xe6\x97\xba\x5a\x8d\x9f\x81\x49\x7d\x78\x02\x88\x61\x6a\xfd\x48\xdb\x0a\x2c\xda\x65\xf8\xe1\x53\x8e\xa4\x2b\x92\xb3\x96\xf8\xc9\x54\x9e\xc6\xd5\x6e\x9d\xa2\x69\xfb\x40\x4d\xe5\x52\x77\x39\xd9\x2a\x8e\x35\x92\x5b\xf9\x4d\xc1\x5c\x3d\x55\x66\x80\x39\xce\x70\xed\x33\x13\x7a\xd0\x5e\x8e\x56\x37\x5a\x54\x88\xe5\xc4\xcd\xa0\x10\x75\xa8\x12\xe5\x57\xef\xae\x67\x50\x6b\x98\x48\x4a\x08\x34\x5d\x81\x6c\xa3\xd6\xbf\x1e\xbd\xf5\x6d\xb7\xde\x1a\x2f\x63\xd0\x9b\x0a\x79\x56\x11\xd7\x26\x45\xaf\x05\x9d\xe8\x47\xd5\x7e\xb4\x4d\xa6\x1a\x99\x5f\x6d\x2a\x37\x90\xde\xb5\x28\xc7\xae\xad\x50\x1c\x6b\xea\x39\x05\xcc\xb7\x15\x62\xa9\xcd\x0f\xca\x09\x83\x59\x15\x74\xf5\x83\x1e\x78\xd0\x46\x08\x4a\x5f\xf2\xce\x6b\xb3\x46\x6f\x0d\xd2\x32\xb1\x36\xc3\x60\x33\x65\xcf\x69\x63\xe6\x47\x46\xb8\x8d\x1c\xe8\xf4\x63\xdf\x0f\x46\x57\x72\x1a\xbc\x32\xb1\x6c\x4b\xcb\x6c\x9b\x5c\xc2\x65\x68\xd5\x13\x38\xb5\xf8\xe4\x62\xcc\x98\xf5\xca\x31\xe7\xa0\x18\x13\x34\xf0\x17\x45\x0b\xb9\x81\x71\x66\x2d\x38\xf8\x61\x03\x01\x52\xd0\xfe\x0d\xe4\x43\xa1\x68\x3e\x7a\xd1\x90\xb9\x10\x0a\x82\x23\x7a\x5b\x6a\xb4\xcc\xb0\xd9\x9c\x83\x01\x5c\x06\xe7\xae\x5f\x09\x59\x93\xb1\x0b\x6f\xcb\x40\xba\x4c\xb2\x7a\x23\x36\x23\x14\x62\xa3\x75\x0e\x6d\x7f\xe6\x87\x91\x39\xa8\xb5\x23\x7c\x9a\x81\xef\x7f\xd3\x66\xd9\xd6\xe3\x63\x5c\x9d\x7d\x38\x07\x6a\x96\x25\x56\x65\xe5\x9e\xb5\x06\xe7\x4f\x3d\xb2\x89\x97\x02\xe1\x41\x8c\x65\xa5\x30\x67\x57\x19\xfc\x65\xd5\x96\xb9\xeb\x18\x8d\x47\xbc\xde\xbe\xb1\x2d\x82\x62\xe1\xf4\x16\x64\x83\xce\x4d\x23\x4b\x41\x6d\x60\xf1\x0e\x7a\xcb\x35\x37\x99\xdf\xb5\xad\x8e\x38\xd6\xbe\x1a\x51\x73\xf6\x62\x5e\xf8\xb9\xa2\x1d\x11\x1c\x50\x36\xe3\xbb\xdd\x47\xbb\x46\x29\x82\x9f\x68\x5d\xd9\xf1\x53\x37\xb5\x3a\xb0\x2a\x7c\x5b\x6d\x8e\x8e\xd5\xaa\xb6\x00\xad\x29\xe1\xaa\x6c\x3c\xcb\x0a\xa1\xc1\xd8\x8c\xf8\x35\x4a\xb1\xbc\x07\xde\xf7\xc0\xb7\x1b\x63\x86\x55\xac\x73\xcc\x0f\x47\x90\xe7\xb0\x8e\xe2\xcd\xcb\x1d\xc4\xd4\x4f\xf3\x3a\xa0\x31\xbd\x23\xab\xc0\xdc\xde\xd4\xa6\x4b\xb6\xe1\x33\x5d\x91\xc0\x3c\xde\xea\x28\x81\x2d\x3e\x90\x62\x06\xd2\xbe\xa0\x35\x1d\x34\xa8\x03\xb1\x44\x60\xf1\xaf\x8d\x27\x23\xbc\x91\xb6\x9e\x40\xe3\xc6\x60\x41\x0e\x5b\x0f\x1a\x65\x31\x6e\xa1\xb4\x1c\xd4\x90\xa3\x18\xc1\x30\x9e\xb3\xde\xc5\x9c\xb7\x9d\x66\xf5\x9c\xad\xdd\xca\xe2\xcb\xf6\x65\xd7\xd6\xba\xb6\xc6\xab\xe3\x30\xeb\x6d\x60\x57\xbb\x47\xcc\xee\x65\x64\xee\x98\xdc\x83\xca\x56\x6d\x10\xf6\x2b\xcb\xf8\x78\x86\xc7\x56\xe2\x18\xb1\x07\x1a\x9f\xb3\xad\x1a\xec\xdd\xef\xda\xce\xd7\xdb\xc4\xba\x1b\x28\x3c\x03\x49\x55\x28\x34\x9f\x18\xf0\x27\x32\xd1\xf9\xdb\x14\x50\x59\x19\x74\x21\xc2\x46\xa6\x0c\x0e\x4e\xc2\xc5\xc9\x46\xdd\xe8\x72\x26\xd0\x65\xb2\x76\x04\x45\x8b\x39\xd8\xaf\xa3\x47\x69\xb4\x23\x88\x2a\x1d\x7b\xc0\x96\x73\xdb\x46\x1d\xbf\x7b\xbe\xfa\x3c\xcd\x9d\xa4\xbe\x9e\x1c\x23\xa8\x47\xca\x5a\xb8\xac\x64\x23\x3c\x7b\x55\x6d\x7d\xe9\x56\x11\xfc\x27\xc3\x72\xc8\x71\x8a\x31\x4e\x6f\x7c\xbc\xa9\x61\x6b\x5c\x68\x2c\x1b\x3a\x6e\x9d\x3f\xb7\x91\x7c\x9a\x88\xc8\xda\x81\x4a\x24\x64\x85\x05\xc5\xb9\x9a\x2f\x34\xd2\x5f\x5f\xd5\xfb\x0f\xda\x5a\xef\x45\xf6\x51\x20\x93\x98\x93\xdd\x42\x3d\x23\xe8\x61\x46\xeb\xf2\xbd\xcd\xbe\xa2\xa8\x7c\xf2\xb1\x2d\x1f\x1c\xa8\x77\x87\xfb\x3b\x22\xea\xad\xc9\x28\x0e\x2a\x52\x21\xc2\x55\xd6\x08\xa4\x62\x3d\xc2\xd5\x33\x86\x8d\xdb\xe5\x02\xad\x55\x00\xed\xdf\xc4\x30\x3e\x0b\x10\x7f\xca\x54\x65\xf7\x9a\x5f\xe6\x9a\x31\x33\x56\xcd\x74\x8a\x73\xa1\x9a\xad\xc6\xe1\x85\x00\x35\x66\x6a\x15\x88\xf4\x9d\xad\xf5\x84\x48\x69\x6e\x0e\xb7\xa4\x27\x46\x8f\xab\xc6\x79\x40\x0c\xcf\xb3\x66\x28\xa2\xa9\x40\x43\x15\xdf\x35\xf6\xac\xa1\xa3\xd6\xd0\xa8\x65\xa9\x66\x44\xb2\xb7\xeb\x1e\x57\x3d\xb1\xd8\x75\xcd\xa1\xd6\xa3\xee\xa8\x46\x29\x6b\x19\xc5\x60\x70\x20\xd7\x1e\x1a\x0e\x53\x50\xa7\xa9\x85\xfc\x66\xca\x5f\x8b\xdd\x76\x29\x85\xe4\x49\x05\x6e\x7f\x10\xf8\xb4\xe6\x46\xcd\x2f\x69\x6c\xb5\xce\xda\xa0\x58\x5f\x8c\xc3\x63\x0d\xfd\x7a\xd3\x43\x75\x1c\x5d\x47\xc4\xbe\xed\x94\xb8\x46\xf2\xe5\xb8\xa8\xad\x0f\x67\xb8\xe4\xd3\x89\x7c\xa5\x09\x2f\x03\x3d\x70\x48\xff\x8b\x71\x6a\x7e\xed\x53\xd6\xf5\xe1\xb6\x3a\xb3\x37\xda\xa3\x15\xa7\xa9\x14\xd2\xf8\xfa\xe8\x78\x1c\x73\xb6\x75\xf6\x68\x4c\x8d\x5d\x36\xe7\x08\x36\x1e\x9b\xc4\xbe\xa3\xf6\xc0\xe6\x7e\x61\xcb\x4e\x6e\x1c\x2e\x14\xfa\x3f\x91\x90\x7f\x51\x61\xba\xbd\x27\x6c\xcd\xf3\xfb\xd8\x42\xb5\x4b\xca\xd6\xde\xa4\x6a\xd5\xb8\x77\xc6\x5b\x1c\x71\xde\x20\xcb\xd9\x1d\xcd\xc3\x02\xb9\x30\xa7\x03\x0d\x8f\x63\x36\xbd\x8b\x61\xe4\x1f\x4e\xbf\xd7\xbb\x62\x2e\xeb\xd9\xce\xae\xba\x8b\x9d\x76\x64\xb5\xb7\x9f\x49\xdf\xfb\x41\xb9\xf3\xd5\x1a\x74\x02\x16\x95\x35\x15\x98\xeb\x03\x8b\x7d\x20\x8d\x0e\xe4\xc4\x21\x3d\x33\xec\x41\xaa\xad\xe3\x67\x35\xb7\x4e\x45\xd6\xec\x8e\xfe\x84\x23\x74\x1a\x99\x93\x9d\x30\x4f\x18\xdb\xc7\x26\xb5\x46\xd4\xda\x56\xb7\xd3\x65\xfe\x1b\x72\x7e\x56\xc0\x56\x2b\x32\xbf\x3e\xee\xaf\xcf\x27\xbb\xed\x93\xc7\x29\x54\xf3\x34\x4f\xfd\x62\xeb\x0c\xcb\x1f\x2d\x2b\xfa\xfd\x87\x86\xdb\x47\xf3\xed\x6b\xf4\x9b\x9f\x1d\xc1\xa1\xaa\xc7\x36\xe8\x79\xd4\xed\xe4\xd4\xaa\x73\x36\xcd\xa5\xcd\x83\x70\x28\xdd\x1d\x8a\xc4\xb7\x35\x5a\x07\x27\xfc\xfe\xac\x95\xc2\x13\x61\x07\xc4\x89\x8d\xd6\x28\x10\xa5\x44\x7d\x91\x35\xa2\xde\xf5\x74\x17\x3f\x97\x6f\xdd\x05\x7a\xaa\xc8\x3b\xb9\x1c\xad\xe3\xd4\xc0\x28\x13\xcc\x0f\x0e\x0f\xa3\x31\x68\x51\x04\x9d\x89\x19\x90\x84\x72\xd1\x81\x18\xd9\xf4\x69\xbb\xf7\x4d\xac\x8e\x56\x50\xa0\xe8\xde\x1a\xa1\xe7\x7c\x76\xa0\xd3\x38\x44\x13\x62\xd6\x8f\x85\x9a\xc1\x18\x8e\xfb\xb3\xc7\xa0\x81\x95\x9d\xab\xb9\x83\x08\xa8\x7a\x26\x8d\x8d\x79\xbe\xec\xbd\xf0\xfe\x9b\xcb\x1c\x1f\x59\xb3\x98\xc6\x43\xcd\x29\x3b\x97\x5a\x4f\x67\x2b\xfa\x8e\xea\x1b\x54\xa7\x6a\xea\xd6\x53\xb2\xf2\xee\x42\xd7\x6d\xee\x1f\x61\x8e\xd3\xde\x93\x42\xbf\xba\x77\x18\x12\x14\xfc\xb2\x57\xa5\xc9\xaa\x2f\xcb\x96\xde\xd1\xe2\xb4\xcf\x4f\x00\xab\x5d\x73\xd1\x33\x65\x98\x83\x35\xa2\x2e\x6c\x7f\xbd\x72\x0d\xeb\xc5\xec\x79\xc7\x69\xbc\xd9\x03\x46\xd4\xb2\x2f\x5e\x97\x03\xe6\x0b\x56\xdf\x11\x5c\x98\x7c\x11\x2c\x5e\x41\x96\xdc\x35\xc7\x29\xe7\x47\x2b\xd9\x8e\xd6\x6f\x1c\x34\xcd\xa2\xe7\x17\x05\xad\xc9\x1e\xce\x0d\xe7\x3b\xa4\x58\xd7\x36\xb7\xd1\xce\x26\xcc\x51\x76\x5a\xa0\xae\xb8\x76\xbb\xd1\xfb\x1a\x7e\xb1\xc1\xb9\x3a\x05\xec\xe6\xf9\xec\xe8\xeb\xd7\x51\xa5\xc6\xf2\xd6\x14\x42\x06\x16\xfe\x1a\xff\x76\x94\x42\x09\x56\xed\x98\x3c\x62\x56\x0d\xc9\x12\x73\x72\xf8\x4f\xbb\xb9\x45\x7d\x6e\x0f\x2d\x5d\xd0\x9f\xe6\x18\xd7\xfa\xf9\xa7\x56\x21\xe5\x37\x6b\x3d\x35\xd7\x14\xc8\xa0\xc5\x12\x68\xdd\x03\x25\x58\x0c\x2e\x5c\xba\xd9\xb1\xdb\x2f\xb1\xdd\x63\x8f\x25\x4e\xf2\x47\x4b\x36\x5a\x2f\x8e\x82\x65\xaf\x2f\xc3\xa8\xa3\x57\x1f\x53\x58\x01\x3d\xf0\x94\xb3\x3d\x55\x41\xce\x71\xb9\xd6\x4f\x3d\x99\xc7\x0a\xfd\x28\x56\x2d\xaa\x77\xe7\xb2\x1e\xb9\xbb\x26\xeb\xfd\x8c\x1a\x81\x08\x1d\xe7\x58\xad\x72\xf9\xdd\x9f\x3a\x7d\x7c\x6f\x0a\x75\x51\x8c\xb4\x1e\x9d\xc7\x82\xdd\xc1\x43\xb2\xda\x06\xb3\x0f\x1a\x3c\x8f\xa7\x51\xe5\xf3\x16\x04\xd4\x2e\x65\x3c\x3a\x51\xcf\xbb\x7e\x56\x9c\xaf\xac\xd0\xdd\x6b\x4d\xb0\xf7\x66\x7f\x67\xad\x62\x8b\xf2\x5e\x44\xed\xe9\xe2\x70\xce\x4d\x3a\x9f\xc1\x55\xce\xba\xdb\xc2\x5b\x63\x70\x01\xae\x23\xa8\x24\xe4\xca\x32\x5c\xb5\xbf\x8b\xd6\xca\x4e\xb8\x64\xa7\x16\xe8\x24\x03\xe1\x5c\x6d\x86\x26\xaf\xcb\xe7\xbd\x3c\xf3\x5d\x98\xbb\x2c\xa2\x61\x9d\xa2\x41\x1a\xd1\xf6\xc3\x2d\x8c\x8d\x67\x76\x8f\x46\x8c\xb4\xc6\x6d\x3b\xfd\xe3\xf8\x98\xb9\xed\xf3\xb5\x4f\xa9\x71\x1e\xab\xac\xaf\x58\x3d\x53\x54\xa2\x6e\x3e\x10\xe5\xbc\x35\xce\xad\x77\x66\x90\x1d\xe8\x11\x70\x3f\xc3\x93\x89\x5e\x31\xa1\x47\x5a\xe5\xf9\xd0\x72\x70\x43\xf2\xfb\xa1\x87\x0f\xf4\xc6\x81\xca\x34\x2e\x45\xbb\xeb\x69\xbf\x0e\x34\xb7\xc5\xc5\x67\x82\x70\x6e\x0a\x76\x4c\x09\xf8\x73\xc4\xe8\x31\x40\xb5\x98\xb7\x81\xff\xa7\x83\x44\x41\x8f\x6e\x52\x01\x9d\xd4\xe4\xd6\xf8\x85\x2f\x6b\xff\x62\xc5\x54\x27\x37\x37\x85\xf9\x4d\x61\x7e\xd3\x8d\xe7\xc7\xab\x35\xa2\x75\x11\x6b\x54\x53\xec\x4f\x16\x11\x5d\x90\x89\x86\x67\xde\x5a\xbb\x07\x4d\xb6\xc1\x97\x3d\x68\x5e\x05\x95\xa6\x42\x45\xa1\x99\x8f\xcf\x81\x95\x6b\xee\x44\x4e\x61\x59\x96\x27\x37\xf0\x2a\x3c\x8c\x7d\x79\xa2\x8c\x8d\xd3\x3e\xf4\x67\x1f\xca\x93\x43\xc9\x69\x8e\x56\x7f\xe5\x37\xdf\xb4\xd4\xb2\x6c\xce\x99\x85\x5a\x51\xa6\x21\xfc\x3f\xd6\xb5\x23\x90\x51\xdf\x76\x1f\x4b\x80\x2d\xd1\x16\xac\xd0\x43\xd0\xa8\x9c\x3f\x9f\x21\x7c\x1b\xb4\xac\xa9\x34\x1f\x81\x9b\x59\x7b\x87\x20\x3a\x11\x08\xc5\x03\xbd\x7a\xd9\xb7\x35\x7e\xbe\xba\xc2\xb9\x87\xb1\xc4\x1e\xe8\x28\xc2\xb3\xf7\xe7\x17\x12\x62\x2b\x63\x90\x73\x9a\x47\x54\x38\x9e\x04\x41\xa0\xdc\x9e\xf4\xc0\x26\xa5\xa8\xf9\x49\x09\x50\xd4\x31\x47\x7c\xbc\xa3\xbb\x83\x77\x43\xd0\x70\xb3\xc1\xea\xad\x85\x40\x18\x8b\xe8\xd0\x84\x3f\xb4\x88\x0f\x95\xc2\x14\xee\xbf\x3d\x83\x04\xfd\xa9\x4c\xc5\x27\xc8\x5e\x8f\x98\x85\xb3\xcc\x82\x29\x1a\x71\xdd\xef\xb4\xab\xf2\xcd\x82\x8c\x54\x5b\xd1\x59\x4d\x05\xb9\x3f\x25\xed\xcd\x47\x77\xa5\x25\xd0\xe7\xac\xfd\x85\x59\x49\x3d\xb2\xdf\xbe\xe4\x0a\xf5\x80\x65\x23\xf1\x26\x71\xc9\xa7\xc0\x1f\xc5\xd7\x8f\x16\xfd\x10\x5a\x0a\xfa\xcc\x8b\x22\xe2\x61\xe1\x64\xf4\xfb\xad\x55\x35\xe9\x66\x23\x94\x8a\x9f\xb2\xf1\x11\xee\xbc\xf5\xcc\xeb\xe5\xf1\x50\xb1\xac\xa4\xb5\x44\xeb\xef\xb1\x69\x57\x8f\xae\xf6\x7f\x7e\xfc\x90\xb4\xfb\x7e\xbe\x3e\x7b\xf9\xaf\x7d\x44\x8b\x45\x1a\xde\xec\x62\xbb\xf2\x74\xb1\x9f\xbf\xb6\xdf\x86\x50\x35\x7f\xaf\xb2\x9f\x42\x27\x68\xf3\x3a\x44\xde\x5e\x71\xbb\x0f\xf6\x92\x7d\xd0\x36\x9e\xcf\x58\x52\x59\xd8\xa8\xf7\xd8\x13\xad\xde\xaf\xd9\x67\x1d\x16\xd4\xeb\x10\xbc\xa4\x82\xa0\x18\xcc\x76\x32\x47\x82\xb2\xf4\xb6\x8e\x6c\x01\xfd\xbd\x7a\x16\x67\xbf\x17\xde\xd4\x56\x31\xe5\x7b\xec\x78\x81\xc0\xeb\xe6\x45\xe1\x67\x98\x9d\xfc\x73\x37\xef\x07\x4a\xaa\xc5\xba\xd8\xbd\xd3\x87\xf9\x87\x1f\xe3\xec\xde\x19\xf1\x87\xcf\xd6\x79\x16\x01\xa2\x56\x3a\xd9\x75\xac\x9d\xb2\x7c\x28\x8b\x06\xa5\xd0\x55\xe3\xf9\x76\x22\xc1\x6b\xaf\x42\xef\xc5\x9e\xfd\x8b\xd0\xb0\x3d\xf2\xcc\xde\xb9\x4c\x6a\xe7\x9f\x90\x37\x1b\xd5\x5d\x0f\xbf\x22\x74\xbe\x7a\x07\x2d\x3e\x87\xa4\xb3\xd6\x02\x2b\xf5\x6a\x2b\xae\x2d\x31\xa3\xba\x90\x7f\x7d\xc1\xd7\x14\xee\x8b\xdf\x29\xb3\x9f\x39\x3f\x61\x1d\x27\xdf\x3e\x0d\x9e\x40\x28\x15\x47\x88\x16\x19\x5b\xbc\x4e\x41\xf9\xf8\x15\x21\xa7\x44\x97\x39\xac\x56\x61\x26\x46\xa1\xd9\x0c\x57\x3e\x87\x67\x2b\x5c\x3b\x67\xcd\xe8\x45\xb7\x6c\x8b\x13\x9d\x8f\x37\xc0\xdc\x3c\x94\x2a\x8f\xb7\x9c\xbb\x56\xf6\x94\x60\x80\x3a\xba\x75\x80\x83\xb5\x10\xe3\xd6\x6a\x8e\xf4\xae\x56\x0a\xfb\x5f\xea\xee\xf5\xd6\x0a\xcd\xe0\x03\x75\x6e\xfe\xdb\xe8\xdd\xe8\x61\x7b\xa4\x95\x4b\x44\xe0\xcc\xd3\xab\x73\x8d\xe1\x97\xac\xbe\x4f\x52\xd3\x83\x42\x8f\xad\x4e\xe3\x1a\xfe\x0f\xa3\x6b\xdc\xf6\xe8\x0a\x91\x7d\x87\xff\xbc\xf5\x30\xa9\xca\xb1\x43\xce\x6b\x95\x32\x51\x95\xfc\x85\x95\xa1\x41\xa7\x55\xd4\xbb\xf8\xd8\xe7\xe3\x49\x26\x61\xed\x87\xd8\xea\x93\xe2\x35\x7f\x51\x1e\xe7\x87\xe8\xc9\x6d\x12\xb5\x9e\xbf\x93\x75\x2d\x62\xc2\x87\x69\x9c\xd7\x92\xd2\xfb\x29\x5e\xa9\xd3\xf6\x64\x7b\xa2\xaa\xfd\x91\xaa\x4d\x89\x31\x92\x46\xc4\x26\x8c\x9f\xf9\xf5\xea\x39\x05\x03\x69\x93\x46\x59\x23\x33\x3a\x45\x8d\x8a\xf2\xb4\xcf\xe5\xed\x9f\x93\xa2\xec\xa4\x3b\xba\xc2\xbc\xfb\xd8\xf0\x4d\xc4\xe6\xfc\x43\xbf\x34\x79\x93\xee\xa1\x44\xda\xfb\xf7\x63\x17\x69\x27\xbe\x58\xfb\xd3\x8e\x06\x2a\x96\x81\xcf\xbf\x2d\x7a\xb8\x06\x6f\xe1\xeb\xfd\x7e\x47\xeb\x44\x8e\x2e\xdb\x63\x88\xb2\x09\xcd\xc3\xc6\x63\xb4\x9c\x7a\x47\x41\x2e\xa3\xf6\x29\xf6\x7a\x4b\x1c\x4d\xfc\x05\xfe\x0f\xa3\x74\xbd\x0e\xc7\x6f\xfe\xbd\xde\xcf\x4a\x05\x5c\xf6\xaa\xfb\xf0\xf6\x0f\xbb\x83\x4e\x5d\xdb\x6c\xe3\x4e\xb1\x18\x6c\x5a\xa4\x75\x34\xf0\xf7\xf2\x96\x7f\x5e\x8b\x25\xb9\x0e\xfa\xd9\x39\x6e\x16\xf2\xd9\x6d\xa5\x4b\x31\xa2\x07\x8b\x2e\xb4\x0c\x76\xcf\xe7\x74\xc2\x5e\x7b\xd1\xcd\xdc\x56\x2f\xbf\x1d\x69\x7e\x02\xb9\x43\x9c\xc2\x73\xf8\xda\x57\xc9\x26\x2f\x3b\xea\x4c\xf6\x15\x7b\x0f\xe9\xec\x8c\x7e\xc2\xa3\x57\xcc\xf6\x04\xb2\xff\xf9\x15\x0f\x95\xec\x43\xe3\x17\x79\x61\xeb\xf6\xb5\xd6\x74\x50\xa4\x2b\xdb\x52\xba\x60\xf0\x96\xb4\xe2\x74\xdd\x05\x3b\xad\xa5\x48\x02\x49\x5b\xdc\x1e\xed\x3c\xfc\xe3\x86\xdd\x4d\x63\x4e\x36\xbe\x75\x02\x0c\xdb\x8f\xed\x5d\x3b\x91\x78\x69\x6f\x3e\xeb\x0a\x11\xd4\x45\x7b\x54\x84\xb8\xe7\xe4\xcd\xfb\x8c\xc9\xb5\x7f\x89\x49\xdd\xb2\x46\x68\x41\xd3\xef\x3d\x9e\x52\xd0\xd6\x9e\x5f\x76\x84\xae\xd6\xd3\x65\xbf\x9f\x1d\x18\x67\x27\x18\x21\xaf\xa5\x57\xbe\x8e\x41\xbc\x84\xb4\x1d\xfb\x87\xa2\x62\xd6\xb2\x1c\xb0\x0d\x04\x76\x94\xe8\x04\xa4\xf3\xb1\x66\x45\x7e\x49\x91\x04\x66\x93\xb8\x74\xce\x11\xae\xcf\xb1\xb2\x5a\x29\x1c\x21\xa1\x28\x6e\x7b\xef\x8f\x44\x9a\x4e\x9f\x2b\x0b\x36\xf9\xe7\x23\xc4\xa7\x52\x3c\x62\x0a\xe6\x43\xec\x13\x2c\xa5\x68\xef\x44\x07\xed\xf5\xdd\xd1\x71\x99\x23\xea\x27\xb6\xc5\x86\x9c\xbc\xd9\xe2\x95\xd2\xed\x22\x53\x54\xdd\x7a\x34\xf8\x19\x78\x08\x6b\xcf\x58\x08\xb6\x1b\x7b\xa9\x51\x8a\xb2\x8d\xc3\x0f\xfc\xd1\xe1\xaf\xe7\x3c\xc7\x96\xf4\x22\xc5\xe5\x88\x13\x8d\xb0\xf6\x4d\xbb\xe3\x5d\x56\xc1\xa4\x22\x4e\x4c\x23\x28\xb3\x06\xdd\xc1\xda\xe1\xb2\x06\xc5\x38\xa0\xd9\x19\x56\x7f\x98\x9c\xbe\x6d\xad\xc1\x26\xef\xd8\xca\xcd\xff\x50\xce\x17\x29\x7b\xbc\x4c\x69\xcd\xba\x39\x60\x75\x8f\x0d\xbb\x5d\x49\x98\xe7\x43\xad\xca\x1b\x8c\xbe\xba\x6c\x92\x5e\x2f\xac\x83\x0b\x1e\xda\xa3\x8d\xce\x6e\x11\xe3\x2b\xeb\x37\xd6\x34\x5a\x3a\x12\x64\xb7\xb5\x79\x42\x70\x66\xc4\x09\x91\xca\xf9\x6a\xcf\xb8\x83\xcf\xa1\xed\xf0\xb6\xd9\xf8\x40\xa8\xbe\xd7\xe6\xc4\xaa\xb7\x6a\x75\xa6\xd4\xbd\xc5\x2e\xa5\x2a\x9d\x08\x0a\xe4\xd3\xea\xc6\xde\x88\xc3\xee\x1a\xff\x54\xac\xac\xe5\xbd\x11\xde\x7e\xe7\xe7\xcf\x94\x45\x50\x63\xfb\xb5\x35\xfe\x89\x08\xdf\xce\x5f\xe1\x2b\x7b\x75\x77\xd1\x89\x55\x3c\x90\xf9\x75\x0e\x83\x5d\x64\xc7\x6b\x0a\x7f\x0a\x1b\x0b\xb5\x4e\xfb\xb4\x59\x02\xd2\x49\x52\x8a\x2f\x39\xb8\x40\x6c\x5c\xbb\xfb\x65\xd6\xf0\x05\x5d\x11\xcc\x2b\x49\x49\xac\xfc\x89\x52\x79\xd7\x38\x37\x22\x44\x3d\x66\xef\x26\x24\x4f\xbe\x88\xce\xca\x68\x0b\x3c\x7f\xa2\x52\x41\xd5\x35\x08\xc7\x05\xc1\x93\x20\x48\x12\xa3\xf7\x62\xf6\x4d\xa3\x53\x40\xf7\x2f\x37\xc3\xae\xdc\xfb\xb2\xf3\x5d\xa2\x57\x56\xde\x58\xbc\x8b\xcb\x55\xed\x38\x9e\xde\x27\x33\xc9\xd3\x33\xeb\x33\xd9\x6c\x77\x8b\xc5\x0f\x71\x16\x9e\x43\x99\x21\x13\xf2\xe0\x74\x99\xbb\x53\x01\xf9\x6f\x0f\x3b\x3c\xf9\xc1\xd2\x5e\x29\x5b\x20\x4e\xbc\x20\x79\xdd\x77\x27\x89\x59\x05\xa8\xb2\x07\x9a\xed\x49\x32\x6e\x4a\x18\x2e\x7b\xe0\x51\x48\x85\x93\x2c\x64\x3e\xde\xc5\x0f\xbf\x13\x02\x1f\xc9\xb1\xd0\x23\xd7\xe2\x49\xe3\x2f\x3a\xbc\xaf\x3c\x57\xf3\xb8\x6b\x7b\x70\x12\x43\x33\x3a\xee\x6f\x15\xe6\xe9\x9d\x87\x5f\xfa\xd5\x1e\x2a\xee\xb5\xca\xc7\xb6\xe3\xbb\xde\x57\x59\xbc\xff\xb0\x13\xd8\xe2\xb8\x43\x94\xbd\x13\x90\xae\x31\x54\xdf\x1e\xd6\xb9\x79\xa4\xb7\x2e\x76\xd2\xf7\xf5\x5a\x0b\xef\xea\x5b\xbe\xde\x7f\x26\x8b\xc7\x3e\xfc\x98\x03\x29\x55\x31\x93\x4f\x9c\x7a\x2d\xa2\xfb\x18\xe3\x74\x0c\x43\xfe\xc4\xc7\x9b\x8c\x22\x96\x6f\xf1\x5b\x76\xcb\x9e\xe3\xf7\x3a\x57\x63\xf5\x0e\xad\xb0\x9e\x9d\x1a\x47\x54\x49\xae\x46\xc1\x00\x64\xa9\xe7\x92\xf2\x15\x1e\xd4\xb3\x8b\xdb\xc6\xc7\xb6\xaf\xc3\xd5\x17\xe7\xd8\x7f\x5e\x31\x89\xcb\x16\xe7\x27\x22\x3e\x15\x84\x4b\x82\x6c\x5c\xdc\xb2\x57\xe2\x8d\x70\xef\xbd\x17\xe5\x77\x63\x17\x8e\xde\xa1\x6d\xea\xde\xdb\xbe\xf4\x35\xbe\xf3\xc8\x7c\x52\x57\xef\xe3\x65\xd8\x3c\x3e\xf6\xe7\xf3\x97\x00\x4d\xbb\x5f\x66\x46\xad\xd3\x35\x3f\xb5\x85\x5f\xf4\x45\x27\xe2\xe2\x79\x5b\x59\x7e\xf1\x1b\x4a\x64\x27\x05\x12\x23\xbe\x8e\xae\x99\x1b\x93\xb7\x91\xcf\xbd\x77\x14\xb9\x6b\x5c\xda\x1d\x91\x32\xa9\x95\x6f\xc8\x98\x29\xac\xcc\xd7\x29\xf8\xc9\x2b\xd7\x79\x39\xe7\xa7\x2e\x1b\xa3\xe7\x52\xad\x58\xf1\xff\x66\xef\x5e\x76\x6d\xc9\x71\x34\x30\xbf\xd0\x1a\x48\x22\x75\xf3\xab\x18\x1e\xd6\xc0\x9e\xfa\xfd\x01\x43\x1f\xd7\x3e\x99\x6d\xb8\x81\x6e\xc3\xee\xaa\x02\xf6\x20\x99\x71\xb4\x23\x62\x29\x74\xe3\xfd\x67\x3e\xfd\x76\x28\x9f\x37\x6e\x90\x11\x45\xae\x74\x9e\x45\x48\x96\x63\x0b\x7e\xbd\xf6\xc9\x9c\xcd\x08\x8b\x7d\x11\x22\xdc\x48\xf3\x15\xe4\xb6\x68\x86\x51\x25\x5a\xfa\xf7\xd4\xae\xf0\xb6\xb2\x3f\x0a\x78\x15\x4a\xcb\x9f\x17\xb4\xf4\xdc\x15\x0f\xe4\x8b\x76\x8d\x1b\x3d\xf6\x1b\x55\x47\xc2\x98\xc2\x49\xc9\xdf\xdb\x29\x39\xde\x9e\x89\xcd\xc2\xcb\x63\x34\x4a\x47\x6d\x82\x2c\x53\x48\xf4\x14\xdd\x72\x9e\xc4\x36\x26\xc9\x60\x57\xc4\x62\xd5\xd3\xaf\x78\x88\xf1\xe4\x39\x95\xdc\x9f\x1c\x50\x1a\x02\xcb\xc2\xae\xaa\xf1\x1b\x4f\xe5\x47\x69\x65\x29\x18\x6c\xf4\xb4\x7d\xf1\x61\xc2\x85\x17\xbf\xc5\xa0\x63\x97\x07\x2e\x59\xeb\x16\x89\x5c\xb5\xed\xa1\xc6\xfd\x18\xe2\x31\x2b\x70\xff\x38\xc1\xbf\xc1\xe8\xf7\xc9\x1f\x59\x56\x86\x64\x23\x13\x21\x24\x44\x3b\x7a\xd9\xeb\x67\x05\x92\x0a\x71\xce\x5a\xbd\xad\xfc\xdc\xf6\x17\x9f\x5f\xd9\x6d\x59\xab\xaf\x00\xfd\x5e\x12\xf6\x37\x1d\x42\x64\x40\xcb\x4a\xc3\x30\x17\xec\x80\xf4\xe4\xb3\xca\x9a\xc6\x1a\xf2\x34\xe1\x27\x5d\x3d\x7d\xa0\xa2\x00\x71\x97\x59\xf6\x4d\x61\xdf\xd9\x44\xf8\x39\xfd\x67\xd9\xf7\x47\x9d\x1e\x87\x6c\xba\x2b\xa0\xf6\xf1\x51\x56\x39\xd5\x9b\x87\x5c\xc4\x27\x97\x80\x74\x9e\x25\x8b\x94\x35\xdc\xa9\x57\x89\x3a\xb4\x65\x56\xdd\x89\x03\xad\x14\x73\x43\x5e\xbf\x66\x6d\x5c\x40\xd1\x2c\xe6\x8b\x97\x62\x57\x32\x4c\x92\x90\xc4\x10\x04\x5b\xed\xda\x6c\x94\xec\x14\x97\x9f\xec\x66\xd9\xfb\x48\x63\x7b\x9b\xc1\x55\x16\xd8\xb2\xe3\xdc\xc7\xd7\x79\xe0\xe8\x1b\x4a\xed\x44\xb0\xd4\x2b\xe1\x3a\xa0\x77\xbc\x35\x23\x7a\xe0\x5d\x5b\x33\x63\x1f\x5f\xca\x5e\xdf\xcb\x66\xcd\x2a\x11\xf1\x76\xab\x99\x7a\x2b\x47\xe4\x4d\xe9\x69\xd2\x18\x24\x05\x0d\xa1\xde\xc1\xe2\x70\xab\xb0\xe3\x12\xc3\x21\xc4\xb9\xaf\xb2\x8a\x0a\xaf\x5f\xf5\xed\xb4\x5f\xb1\x89\xbb\x52\x02\x3a\xfd\xfc\x9d\xab\xa1\x76\x7d\xa8\x33\xff\x34\xe7\x60\xd3\x4c\xf1\x2e\xd5\x43\x96\xa6\xcd\xc7\xff\x76\x9f\x3a\xcc\x6f\x5e\x9c\xab\x24\xc2\xf9\xce\x81\x53\xe5\x5c\xd9\x6d\x47\xaf\x80\xf8\x4e\x46\xaf\x30\xfa\xe3\xd9\x5d\x16\x73\xb6\x89\x4a\xf6\x10\x73\x59\x73\xca\xc6\x34\x25\x3f\x94\x6f\x78\x89\x1e\xd8\x24\xbc\xbd\x4b\xd2\x12\x0f\x24\x4a\xe6\x3e\x89\x36\x54\xda\x8f\xc1\xaa\x12\xf1\xf8\x77\x8e\x53\x31\x0d\x46\x03\x0f\xe2\x9b\xb9\xed\x6b\xd5\xe2\x0d\x2d\xaf\x4c\xab\x80\x7b\xef\x91\xc8\xf4\x74\xe9\x68\xac\x6c\xe4\xc2\x48\xb6\xd1\x2e\x11\xa5\x7f\x23\xf0\x78\xa9\xef\x57\x6a\xbc\xac\x5a\xf9\x76\x07\xbd\x91\x25\x71\x0e\x2b\xd3\x2a\x5d\xff\x08\x07\xa4\x6c\x9a\xc9\xb9\x16\x86\x56\x76\x0c\xd5\xb8\x0b\xd1\x1c\xcc\x14\xef\x04\xe3\xc4\x94\xed\x75\x08\xf6\x54\xe9\x77\x8c\x05\xb7\x45\x48\x57\x0d\xe8\xcb\x63\x77\x22\xfa\x29\xa7\x40\x05\xe0\xf5\x72\x76\x08\xc2\x6e\xf5\xeb\x02\x75\xb8\x48\x52\x66\xd6\xaa\xca\x36\xab\x96\x24\x01\x9e\xb3\xbe\x0e\xf8\x76\xfb\xb7\x3c\xfc\x13\x83\xdf\x21\xad\xcc\x7c\x54\xe0\xf5\x2d\xb5\xa2\x8e\x93\xef\xe0\x11\x6f\x08\x4b\x97\xc1\x9f\xda\xf2\x74\x8c\xb7\xbd\xca\x48\x42\x31\xb1\xc0\xa7\x50\x28\x95\xfd\xde\xfb\xcb\x11\x20\x50\x90\xa0\x22\xf4\xee\xbe\xa3\x2e\x7a\x85\xa2\x31\xa5\xce\x14\xb2\x72\xf5\x8a\xb3\x72\xce\x0a\xbd\x28\x77\x30\xb7\x23\x13\xf1\xb6\xf0\xb7\x30\x83\xa0\x0c\xa6\x98\xf9\x7b\x0b\xaa\xfe\x72\xac\x0c\x61\x7b\x02\x42\xd0\xf3\x94\xa6\x20\xda\xc4\x62\x58\x3e\x9c\xa7\x53\xc8\xdf\xbd\x39\x44\xf5\x97\xbb\x9c\xe9\xfe\x12\x3d\x7c\x69\xe7\x8e\x2c\xd7\x0c\x47\x70\xb6\x3a\xa8\x46\x09\x35\x0e\x80\x56\x62\x21\xb3\xcc\x28\x53\xe7\x90\x4f\x41\x3c\xe6\x0c\x9d\xdc\xd6\x8c\x1e\xd1\x29\x53\xe5\xb0\xae\x40\xc7\x7f\xe8\xe0\xae\x98\xeb\xb7\xaf\x92\xa7\xce\x39\xab\x0c\xea\x3b\x61\x3b\x8b\x29\x49\xb6\x93\x3f\x2a\xbd\xe9\x9d\x80\xbb\x55\x2e\xc0\x2c\x7b\xc3\x3b\x55\x0d\x70\xb0\x8b\xa7\x28\x6c\xf5\xd6\x47\x2f\x98\x7e\x76\xa9\x64\x2b\x5a\x41\xf3\xeb\xbc\xd3\x6c\xf3\x53\xb0\x78\x7d\x16\x38\xf8\xa7\x3f\x05\xfd\xbe\x3c\xde\xa4\xfb\xcd\x6a\xfb\xfa\x70\xbf\xf2\x5c\x49\xf4\x22\x08\xd8\x50\x07\x8e\x2b\xa2\x6d\x4c\xfe\xe1\x23\x83\x60\x48\xa6\xec\xc7\xef\xd2\x92\x87\x4d\x20\x7a\xe8\x4d\x5d\x67\x8b\x32\x2d\x57\x94\x0d\x1e\x7c\x44\x81\xb1\x13\x24\x5f\x6e\x8a\xcc\x4a\x7e\x95\x35\x2b\x1e\x4d\x32\x62\xff\xa6\xce\x74\x56\x7c\xb6\xf6\x49\x9e\xa0\xad\x8a\x9d\x1c\xe2\xf9\xcb\xae\xf0\xf5\xdb\x88\x35\x56\x58\x2e\xb2\xd9\xbe\xe2\x6b\x14\x7a\x1c\x4f\xe0\x72\x4e\x69\x3f\x95\xa7\x20\xee\x95\x65\xe2\xd0\x24\xee\x37\x2e\x95\x86\x27\x12\xb0\x89\xad\x73\x8a\x9d\x33\xf8\x52\xc4\x70\x05\xbf\x37\x4f\xf2\xa8\xd4\x99\x8a\x22\x4f\x51\xc9\xe2\x49\xa7\x13\x50\xd2\x5e\x74\xd6\xf1\x4e\x27\x78\x0c\x8d\xbf\x45\xba\xd8\xad\xb8\x8f\xb7\xd8\xa5\x34\x75\x11\xdc\x21\x8d\xb2\x91\xc0\x94\xd5\x7c\x92\x8a\xa8\xf9\x5d\xf9\x20\x9b\x14\xb5\x69\x5d\x41\xb6\x1e\xe8\xe3\x9a\xa7\xe2\x16\x45\x74\x8e\x92\x2a\x9e\xcc\x3d\x79\x47\x97\xd8\xdb\x25\x72\x7c\x1f\x9b\x5b\xdc\xf4\xb9\x15\xbb\xbd\x71\xb2\x5b\xd1\x8b\x0d\x8f\x97\x46\xf3\x16\x7e\xd2\x5d\x52\xfc\xe6\x6c\xb7\xac\xe0\xe2\xc5\xe8\x8e\x6c\xf3\x5b\x0a\x29\x9f\x55\xb6\xbe\x7f\xca\x90\x3f\xa9\x85\x2d\x73\x54\x94\x2b\x1e\x4c\x1f\xa5\x69\x8d\x2b\x72\xaa\x93\xbd\xa6\x3c\x0e\xd1\xac\x13\x3f\x58\xe3\x56\xca\x84\xb8\x4b\xb6\xf0\x13\x15\xc5\xc0\xbe\x1b\x15\x5d\xc2\xff\x7f\x4b\x82\x7f\x87\xd9\x57\xdf\x7a\xc7\xf6\x9e\x92\x3e\xbf\xd9\x00\x6f\x5e\x0e\xdd\xa9\x93\x06\xca\x2a\xd3\xc9\x31\xa3\xb2\x16\xe8\x42\xf4\xcb\xb7\x47\x36\xd9\x9a\xe5\xf5\xbd\x67\x87\xf7\xf4\x92\x93\x58\x47\xd8\x1b\x00\xed\x8d\x64\xe1\x1b\x87\x57\x87\x97\xb2\xa2\x72\xda\x3b\x20\x43\x91\xe3\x31\xc5\x50\x37\xd1\xd0\xb7\x4a\x94\x95\x06\xc9\x5a\x3c\x58\x47\x56\x7d\xbb\x58\xe6\xed\xa0\xea\xfb\x8d\xc9\x6e\x8e\x49\x87\x2b\xcc\x84\xb1\x1c\xf6\xf7\xc9\x2e\x4f\xbe\x67\x2d\x33\xd7\xfb\x9b\xb6\x4b\x73\x13\x3d\x44\x5e\x99\xa2\xa8\x56\x56\xfc\x7e\xe7\xb7\x67\x51\x8b\x5b\x51\xde\xf3\x5b\x7c\xb1\xdf\x5b\x6b\x35\x68\x5f\xac\x95\xd6\x43\x1d\xa2\x9d\x9f\x6a\x55\x0a\xe9\xce\x8a\xdc\x64\x4b\x13\x7b\x22\xb5\x2e\x9c\x78\x49\xce\x50\x56\x33\x5e\xe7\xb0\xb5\xc1\x0f\x83\x67\x87\x95\x7f\x2a\x9e\x88\x9d\x9b\x2d\x19\xb7\x1e\xa7\x97\x9f\xb9\xcb\xae\xb0\xc7\xcb\x56\x5d\xc5\xef\xd9\xd1\xa5\xc3\x8a\xa9\x1c\x4f\xa9\x72\xd8\x57\x14\xaa\x7e\x8e\xf2\x78\x57\xee\x12\xfb\x8a\xe8\xf8\x2a\x28\x6b\x0c\xc3\x88\x5d\x76\x2f\xc5\xed\x06\x0f\xf6\x58\x47\x04\x53\x77\xa6\x0d\x2b\xa7\x8a\xcf\xad\x8a\x38\xab\x64\x35\x56\xb7\x49\xba\xba\x15\x7f\x24\x8a\x81\x27\xf6\x3e\x29\x2a\x14\x75\x0e\xf2\x7a\x8c\xb7\x4f\x1f\x03\x94\x73\x43\xc6\xad\x72\xd7\xdf\x6f\x17\x75\x48\x9f\xef\x23\x65\xed\x6c\x76\x6e\x36\x8c\xaf\x58\x51\x52\x6f\xaf\x38\x02\x7e\x30\xfa\xad\x5c\x2a\xa5\x3d\xdf\xb3\x34\xab\x5a\x7b\x7c\x7d\xf4\xea\xcb\x07\x3b\xce\xb0\x92\x87\xb4\x5d\xfa\xff\x2a\x59\x8a\xf8\x90\x49\x97\xb0\xeb\xc7\xa8\x9d\xfe\xd6\x09\x6d\xf0\x48\x6c\xad\x54\xbf\x14\xc3\xb5\x31\xe4\xa4\x53\xe5\x79\xeb\x7f\x1f\xf2\xeb\x70\x4a\x4c\x7e\x06\x1e\x6f\xe7\xdb\x68\x51\xf9\x46\x65\x71\xa8\x58\xec\x59\x71\x4f\x92\xa0\x70\xb7\xca\xe7\xba\xab\xac\x44\xc7\xa9\xc5\xd3\xf5\x46\x8c\x4d\x6e\x9c\xb2\x60\x11\xa9\x20\xd9\x45\xab\xd5\xd5\x2a\xe6\x71\x94\xa7\xd1\xd9\xfe\xce\x87\x4d\xfa\xdc\xc5\x5f\xa6\x54\xf2\xdd\xe4\x16\xe8\x4f\xaf\x5d\xd0\x83\x40\x51\xf1\xda\x7a\xbe\x09\x1d\x84\x23\xd9\x48\xd9\x2b\x52\x83\xed\xbf\xe2\xaf\xc5\x44\xcc\xf2\x45\xb0\x95\x4c\x1c\x67\xc9\xbc\x59\xf8\x66\x71\x79\xd8\xff\x43\x69\xc6\xa1\xe0\xc7\x90\xbd\x14\xe2\xdc\x9f\x00\xc8\x93\xb0\xde\x69\x56\xfe\x1c\xfe\xcf\x59\x5a\x31\xd9\x7d\xc5\x37\x82\x9e\x1f\x78\x48\x22\xa7\x07\xd2\xc3\x27\xdd\x7e\xf3\xe1\x6c\x49\xbd\x47\x36\xd8\xe0\x0d\x2e\xff\xb9\xe2\xe2\xc1\xa3\x1e\x20\x13\x62\xda\x35\x4b\xa2\xad\x14\xe7\x27\x64\x89\x87\x7a\xe7\xf6\x16\x91\x31\xe4\x7b\x85\x78\xcc\x3d\x2a\x9f\xb1\x32\x8a\x96\xd4\x55\xa9\xde\x51\x22\xdb\xb4\x36\xd8\x56\x42\x04\x7a\x49\x2f\xef\xac\x7e\xbb\x92\xcf\x67\x96\xc7\x86\x8e\x27\x16\x98\x7d\xe1\x3e\xc1\x2d\x9a\x9d\x32\x45\x9f\xcd\xc7\xb3\x42\xc1\xb0\xa7\xd5\xb3\xa7\x12\xdf\xf8\x4e\x95\xe6\x0a\x19\x57\x11\xd2\xd3\xf9\x07\x9e\xf0\x2b\xde\x19\x5f\xbe\x05\x4b\xd0\x69\xb3\x25\x4a\x8b\x99\xf5\x5b\x9d\x2f\x42\xb1\xa8\xe8\x55\x3c\xfb\xd8\x9b\xce\xea\xbc\xe5\x95\xaa\x6f\xa1\x8d\x8b\xab\x12\x8b\x37\x94\x6e\x1d\xed\x1b\x33\x2b\x11\x9c\x47\x88\x9e\xf3\x58\xbd\x55\x5a\x91\xce\x9b\xc4\xb2\x69\xa4\x4e\x3c\x9a\x70\xbf\xb4\xf4\x77\x62\x3c\x01\x90\xa8\x7e\xc4\x89\x90\xa9\x9c\xed\x0a\xcc\x8c\x6e\xef\x0f\xa7\x62\x9b\xa3\x72\x23\xea\xfc\x17\xd9\xd4\xf8\x0c\x45\x5b\xcb\x73\x8c\x51\x99\x7f\xd3\xd7\x29\x73\xdb\xaa\x28\xaf\x3b\x8d\xf9\x93\xa2\xd9\xd4\x36\x7b\xf0\x66\x95\xf4\x8d\xbe\x54\x26\x41\x8b\xef\x19\x42\xfe\x14\x7f\x74\x2b\x3f\x4c\xee\x05\x71\xbe\x93\x76\x82\xb4\xb6\x4b\xfa\x9d\x75\x4a\xbf\xd5\x75\xaa\xb0\xee\xfc\x16\xb6\x14\x93\x25\x12\x93\xbf\xba\xb7\x92\xb8\x26\xe0\x8a\x4d\xba\x00\x24\x40\x7a\x49\x36\xd0\xbc\xc0\x18\x9c\x12\xb7\xf6\x38\xcb\xfa\xa0\xeb\x0e\xb6\xb9\xfc\x81\x06\xb9\x54\x0d\x56\xed\x8d\x37\x39\x8d\xf9\x5b\xce\xa9\x4c\x14\xfe\x7f\xd1\x9a\x50\xdd\x47\xef\x65\xdd\x60\x91\x91\x0b\x92\x52\x8a\x57\x9d\xe4\x8d\x9a\x48\x43\x3e\x95\x96\x0d\x36\xe0\x8a\xcc\x55\x30\x2f\xd4\x87\x09\x00\x18\x51\x12\x72\x2e\x1e\x00\xfa\xf3\xb7\x10\xe6\x64\x9d\x94\x01\x30\x00\x33\xec\xe5\x9c\xa1\xbb\x2a\x73\x3e\xfa\xd3\xb4\x63\xf2\xd7\x6d\x10\x17\xab\xc6\x56\x34\x6e\x56\x72\x76\x71\x2e\x19\x15\xad\x03\x66\xe8\x6f\x8f\x5f\x12\xc5\xb4\x17\x72\x64\xd9\x37\xd9\x52\x4f\x71\x70\x19\x21\x9b\xf7\xa3\xfd\xbb\x03\xdc\xfe\xe7\x68\x32\x19\x51\x3a\xa1\x50\x18\xc1\x1c\x26\xad\xc1\x9b\x68\x9c\x85\xf2\xf6\x07\x84\x94\x47\x29\x1f\xb3\x68\x25\x6a\x1f\x1b\xbd\x4b\x87\x28\x37\x7c\x85\xcf\x1e\xef\xaf\x44\x1d\x69\x99\xa3\xd2\x09\x4a\xbc\xf5\x94\xf0\x50\xc9\x42\xad\xd7\xb3\x53\x8b\x90\x02\xcc\x5c\x90\xf1\xa3\x15\xc4\xe9\x38\x61\x66\x94\x3b\xdc\x46\xb1\x23\x35\x33\x28\x0d\xad\x0c\xb6\x51\x49\x41\xbb\xc2\xeb\x21\x41\xf8\xa2\xa8\x90\x2f\x0e\xf5\xa8\xe0\xfb\x0a\x0c\x95\x0a\x5b\x49\x62\x96\x7f\x63\x2a\x69\x9c\xa6\x4d\xb8\xad\x74\xb5\xd1\xa4\x54\x35\x0e\x54\xf5\x73\x07\x93\xcb\x53\x77\x18\xe5\x2a\xe0\xb5\x0c\x7d\x4f\x95\x6c\xd0\x49\xbe\x81\xfe\x82\x0e\xcb\x0d\xd6\xa8\x23\x8d\xf3\xb5\x39\xa4\x5b\xe9\xde\xb3\x54\x31\xbd\x95\x50\xde\x46\xdd\x6f\x73\x48\x09\x6e\x8c\x7e\x95\xae\xdd\x2a\x85\x55\xd0\x40\xcb\x32\x0c\x1e\xef\xd4\x1f\xc1\xbb\x2b\x08\xef\x0c\xa7\x8d\x19\xad\x71\x26\xa9\xd4\x3f\x08\xec\xa3\x95\x81\x6b\x95\x15\x86\xc3\x82\xe0\xa6\x0e\xfe\x68\xab\x8c\xf6\xbe\x5d\xea\x48\x93\xd2\xd0\x0a\xd7\x43\xf2\xa1\x6a\xdd\xa3\x61\x4d\xea\x6e\x8f\x56\x62\x35\xe5\xb8\x9c\x4c\x8d\xcb\x5f\x4d\xed\xa1\xf2\xf5\x50\x29\xfb\xd1\x0a\x3e\x2e\xaa\xc5\xea\x92\x66\xdc\x4a\xc9\xdb\xf5\x7e\x73\x2d\x98\x49\x5d\xe0\xa1\x0a\xf0\x68\x65\x3f\x22\x02\xab\xe4\x3b\xd4\xe7\x1d\x5f\x43\x62\xa5\xb4\x9d\x52\xaf\xb3\x82\x6c\x84\x4a\x58\x5d\x42\xb5\xa8\xb9\xa3\x1d\x6b\xe0\x7c\xd3\x27\xbc\xb9\x52\x04\xcb\xb8\x5d\xc1\x49\xa7\xdc\x3a\x65\x2b\xf1\x94\x5d\xc0\x64\x0d\xf7\xe1\x51\x21\xbf\xd6\x5e\xa9\xe3\xb7\x8c\x9c\xfa\x46\xa9\x6d\x12\xe4\xda\x2d\x17\x83\x71\x90\x26\xd1\x60\xb8\x64\x54\x70\x95\x6f\xe7\x8a\x6b\x8e\xf6\x56\x16\x1c\x81\x6b\xed\x56\x28\x89\xf4\x3f\x21\xe9\xbd\x15\x4c\x02\x87\x82\xdd\x2a\x3c\x7d\x40\xb5\x1e\x12\x0f\x46\x2f\x47\x40\xab\xa4\x47\x0a\x4a\x93\x6c\xc3\x9d\x0c\x0a\x7a\x40\x67\x1e\x0e\xe0\x01\xae\xf9\x5d\xa3\xc5\xdc\xa8\x0b\xcc\x2a\x9d\x1a\xd7\x99\x4c\xa5\x07\x3f\x51\xc2\x35\xe3\xb3\xa4\xbe\x4a\x21\xeb\xf6\x72\xff\x71\x0c\x7b\x0a\x9a\x8f\x90\xaf\xce\xac\xdd\x99\xd6\x3b\xa5\xbc\x73\x19\x74\x82\xf3\x65\x9e\x11\x1a\x3b\xba\x14\x8e\x5e\x29\x7f\xa3\xd2\x6b\xbf\x4e\x0a\x4f\x4d\xce\xec\x82\x88\x10\x94\x2c\xd4\xa0\x13\x84\x3b\x97\x6a\xe7\x02\xef\xd2\x48\xa4\xa8\x3d\xea\x6d\xe5\x3c\x92\xec\x24\xe1\xa7\x33\xbd\x76\x50\x7e\x57\xc8\x75\x8f\x51\xd4\x4c\x51\x70\x9d\x24\x3d\x2a\xfd\xbe\xb0\xa8\x2a\x7c\xad\x1c\x2e\x46\x98\x53\xb9\x57\x72\x72\xfa\x6b\xfa\xc6\x2c\x44\xa4\x2f\x72\x90\x16\xe1\xce\x02\x76\xfb\x5b\xff\x71\x96\xd1\xe6\xcc\x5a\xd2\xfb\x2b\x04\xb6\xdb\xe9\xb5\xb6\xbb\xb3\xa2\x67\x99\xa6\xca\xad\xb6\x8a\x6a\xc9\xa2\xcc\xbf\x46\x63\x96\x8a\x3f\xab\xdd\x9d\x25\x72\x0a\x46\x21\xcc\xf6\x32\x3f\x08\x61\xec\xd3\xc8\xac\xaf\x9a\x58\xe9\x01\x12\x96\xbc\x87\x0b\xa9\x57\x0a\x10\x63\x12\xa7\xc0\x7b\x56\xfa\x53\x54\x2a\x97\xa7\x2a\xcd\xe9\x68\x37\x17\x25\x80\x08\x1b\xed\x30\x9b\x98\xfd\x1f\xc5\xe4\x6f\xdd\x89\x5e\x7f\x2d\x17\xaa\x54\xcf\xad\xcf\xdb\x3a\xaf\x35\xb6\x8d\x86\x33\xa4\x53\xbf\x3a\xc7\x56\xaf\xc4\x86\x5d\xa1\xe4\xbe\xe2\x18\x6d\x88\x69\xfd\x54\xa0\xb9\xbd\x03\xa7\xa9\x33\x62\x75\xa7\x44\x87\x1d\xd6\x0b\x94\xa1\x12\xfc\x98\xe8\xba\x7d\xdd\x4f\x7d\xcb\xae\xe0\x0c\xc9\xe7\xd6\xad\x13\xa3\x3b\x2b\x7a\x25\x36\x53\x2e\x85\x7b\xbe\x76\xf4\x9b\x6c\x5c\xcf\x4e\xd7\xee\xb1\x5a\xa4\xf7\xf7\x5b\x00\x04\xcc\x30\xf7\x54\x22\x53\xdd\x33\x04\xc4\x0b\xeb\x11\x62\x65\xa7\x0f\xd6\x58\xee\xad\x31\xca\x05\xd6\x2a\x74\xfe\x6a\x97\x64\xc2\x64\x22\xe0\x6f\x0c\x62\x97\x04\x8c\x77\xcd\x59\x56\xa8\x37\xdc\xb2\xad\xcc\x9c\x6f\xac\xde\x56\x84\x86\xf3\xee\xc7\xb5\x2b\xf8\x6c\x08\x87\x1a\x76\xf7\x10\xd4\x32\x24\x65\xc1\x80\x7b\xf4\xa0\xce\xd8\x32\x04\x0a\x1c\x2f\xa3\x05\x70\x84\x01\xce\x60\xd8\xdd\x83\x4d\x79\x40\x17\x19\xa3\xd2\xb0\x19\x32\xed\xee\x41\xd4\x1d\x38\xfb\x60\x94\x1a\x9c\x32\x03\x64\xc3\x10\xcc\xcd\xc1\xf4\xa8\x3b\xaf\xf6\xfa\x75\xeb\xe7\xea\x21\x63\xdb\x90\x32\x31\xc2\xaf\x44\x05\x7f\xf8\x3a\x21\x5f\xa3\x42\xa6\x04\x64\x28\xc7\x32\x54\xe8\x18\x0a\x9c\x0c\x05\x5d\x46\x85\x2c\x28\x76\x32\x94\x2d\x19\xca\x8d\x8c\x51\xe8\x78\x64\x83\x51\x69\x81\x4c\x4a\x2a\x7a\x0c\x55\x3c\x86\xba\x1b\x43\x25\x8e\xa1\x12\xc7\x18\x65\x1a\xb1\xaf\xd5\xce\x18\x2a\x8e\x8d\x51\x38\x77\x73\x0a\x34\xac\x24\x43\xe1\xd7\x42\x5e\xc6\x12\x7e\xc0\xa8\xbc\xa7\x77\x96\xc1\x75\x56\x3d\x5b\xa1\x7b\x7c\x21\x43\x72\xcb\xf8\x06\x2c\x7a\x3f\x38\x8f\xa7\x5f\xb8\x16\x38\x5e\xc9\xae\x85\x06\x55\x68\x59\xfa\x80\x53\x8f\x5d\x41\x5d\x15\x62\x9e\xf5\x6c\xb5\x0b\x9a\x11\xe4\xb1\x7d\xbb\x30\xfa\xb1\xbf\xc1\x34\x75\xed\x3d\x95\x2a\x60\xbe\x18\x75\x06\xce\x3e\x70\xf0\x61\x7f\xad\x7d\x2b\x18\x91\xc9\x61\x54\xb8\x5e\xa5\x7e\xb9\xb3\x0c\x87\x29\x4d\xc2\x68\x70\x8e\x0f\xdc\x9c\x41\x7d\x0c\x6e\xd9\x01\x8c\x67\x9c\x0a\x70\x3c\x85\x74\xc6\x24\x7c\xab\x85\x4b\xda\x6a\xb4\x97\x47\x19\xb6\x2b\x15\x8a\x19\x75\x90\x69\x95\x7c\x1c\xe3\x16\xea\x22\xc3\x55\xab\xa7\x04\xb2\x50\x6a\x03\x34\x51\xb4\x5d\xc9\x03\x5a\x66\x99\xd9\x0e\x44\xc2\xeb\x7a\x51\x9e\x24\xae\xc0\xa8\x11\x68\x11\xad\x8c\xe8\x57\x7b\x68\x4f\x77\x6a\x11\x50\x1e\x42\x4d\x42\x50\x5d\x08\x83\x8b\x31\xa0\x98\x31\xe6\xf1\x7e\x05\x34\xb4\x60\xb6\x0c\xfb\x25\x46\x85\xb2\x31\xfb\x05\xe7\xbe\x70\xcc\xf0\x8d\xc1\xa8\x1c\xa3\xd0\x72\xfc\xae\xf5\x1f\xb8\x58\x50\x67\xa3\x8c\x16\xe4\xe4\xb0\x0b\x42\x70\x64\xc4\xa9\x04\x42\x2d\x97\x89\xbd\x70\x21\x2b\x0d\xac\xbb\xf6\x75\x29\x98\x49\xe8\x4b\xf0\x8d\x45\x96\xc9\x93\xe7\xe9\x9b\xba\xc6\xb8\xf8\xc5\x22\xbc\x15\x50\x21\xf5\xa2\x15\x78\x47\x05\x06\x14\xe5\x02\xaa\x20\xfe\x5e\xd8\x6d\xca\x35\x83\xe3\x61\x14\x8f\x59\xde\xac\xa8\x90\xf1\x4a\x0d\x72\xbd\x2a\xc8\xc4\xfd\xe6\xc8\x7e\x09\xa6\xb2\x0a\xcd\x8c\x4a\x63\xab\x00\x6b\xfc\x2e\x70\xb4\x58\xc6\x7f\x55\x28\x73\x05\x81\x14\x00\x50\xdd\xe9\xcd\x12\x77\x5b\xcd\x32\xc0\x8e\x58\xe6\x62\x7d\xb1\x8f\x98\x7b\xad\x73\xc1\x7c\x21\x50\x32\x76\x5d\x9b\xd3\xc2\xc8\x03\x52\x10\x4c\xc5\x81\x8b\x85\x3d\x55\xee\x8e\xa8\xf4\x15\xa6\xb8\x60\x24\x88\x2d\x4d\x51\xb2\x71\xd8\x53\x21\xb4\x3a\xec\x9a\x38\xfa\x49\x5e\x0d\x46\xd0\x90\xcc\x19\x15\x86\x55\x81\xad\xa4\xe2\xb0\xbf\x2a\x00\x20\xb8\xbf\x02\x9f\x0a\x61\x76\x71\xea\xcd\x52\x46\xcb\x7c\x7b\xf5\x1f\x64\x57\x08\x60\x88\x32\xed\x5c\x6b\x49\x18\x7a\x5c\xa3\x8d\x73\x45\xed\x20\x90\x34\xc1\x95\x11\x64\xaa\xb8\x05\x24\x21\x51\x01\xe7\xca\x56\xe9\xe5\xe0\x0c\xe8\xa1\x29\x0c\x26\x5b\x41\xd5\x54\x08\x1d\x13\x63\x63\x7a\x6f\x12\x23\x05\x8b\x67\x39\xa3\x00\x79\xa4\x74\xf7\x24\xb5\x26\x67\x5d\xf6\xc2\x8f\xfa\xba\x20\xb4\x30\x9c\xd8\x8f\x89\x7f\x65\x05\x77\xe1\x68\xe5\x54\x4c\x1c\x2d\x85\x4a\x67\x3f\x50\x0e\xa3\x30\xac\x18\x35\xa1\xe3\x49\x9f\x4b\x68\xa4\x49\xe6\x4c\x7c\x2a\xf1\xa9\x64\xc8\xc9\x51\xf7\x03\x21\x63\x14\x49\xdc\x2a\xed\xd3\x64\xa4\xcf\x51\xe9\x6a\xdc\x17\xf8\x54\x32\x03\xa7\x9d\x9b\xa4\xd3\xb4\x97\xb3\xb0\x5c\xed\xe5\x0c\x20\x44\xf4\xd6\xcc\x4a\x6e\xfc\x86\xf1\x70\xcd\x55\x88\xa1\xef\xad\x60\xfa\xc2\xb2\x8c\xc2\xa3\x3c\x05\x66\xe4\xaf\x7e\x3d\x4a\x7f\xe7\x03\xb6\xaf\xb3\x8c\x7c\x59\x49\x7d\xad\x7e\xa5\xfc\xd0\xae\x8d\x52\x41\x54\xe0\x7d\x59\x61\x8e\xf4\xe2\x04\x8f\x92\x09\x20\x29\x0b\x9e\x06\x74\x05\xed\x35\xb3\xc2\x55\x2b\xb1\xbf\xcc\xea\x95\xa4\x77\x0b\xb4\x0b\x2a\xa5\x04\x48\x7b\x36\x67\xe1\x54\xae\xa2\xd5\xc2\xe4\xe3\x9d\x95\x60\x6c\xff\x26\x49\x32\x2b\x19\xb5\x1c\xaa\x76\x74\x0a\xf0\x4d\x20\x32\x89\x7b\xa6\x90\xcd\xe4\xa8\xc9\x8a\x3f\x98\x66\x8a\x16\x9c\xa4\xd6\x5c\x7e\x85\xe6\x9b\x4b\x3a\x10\xe4\xb1\x24\x03\x27\x39\x39\xcb\xec\x5d\xae\x4b\x89\x28\x49\xbe\x4d\x5c\x3b\x85\xb4\x26\x1c\xc3\xac\x24\x79\x00\x07\x49\x53\x4e\x26\xff\x2c\x67\x72\xe1\x30\x02\xfc\xca\x5d\x06\x2d\x2e\x88\x0a\xa7\x96\xc2\x94\x78\x71\xe2\xda\x09\x76\x21\x59\x24\x12\x27\xcd\x2d\xf9\x07\x47\xce\x59\x69\xd2\xf5\x8b\xbb\x82\x3d\xfc\xd5\x98\x80\x1a\x49\x32\x6d\x1e\x80\x0e\x82\xfe\xf3\x8c\x6a\xa9\x6b\x6f\xd6\x07\xa7\x47\x16\xcc\x90\xe8\x81\x3c\xd5\xff\xd4\xf2\x4d\x26\xf7\x2c\xf3\x27\x2e\x9c\x42\x1c\x93\x76\x9c\x64\x5d\x40\x1e\xaf\x5d\x8b\x91\x91\xce\x97\xa4\xe8\xac\x70\xca\x0a\x83\xbc\x65\xda\xd4\x87\x3b\xea\x5a\xcf\xad\x37\xe7\x1e\xd8\xa9\xd7\x82\xea\x89\x84\x9f\xc4\xa3\xb3\xc2\x5d\x2a\x81\x41\xc2\x7f\x3a\x8b\xf2\x0a\x24\xc3\xcd\xd3\x19\x95\xf0\x7c\xd3\xd9\x95\xa0\x0d\x26\xfd\x7a\xd2\xac\x39\xab\x1f\x05\x03\x24\xa5\xb9\x3d\xa9\x66\x72\xd0\xcd\x56\xd8\xa6\x21\xe4\xfa\xed\xca\x29\xb8\xb9\x30\x58\x27\xe8\x96\xd9\xb8\x3e\x04\x67\x4e\xae\xdd\x09\xe9\x6e\xd2\xbb\xa7\x54\xe1\x59\xe0\x14\x4d\x32\x2a\xad\x1c\x32\xe3\x98\xa4\xf7\x49\x1f\x9f\x95\x74\x27\xfd\x75\xd2\xd3\x67\xaf\xb4\x34\xbf\xdb\x2b\xad\x57\x4f\x38\x36\x27\x83\xf7\x24\x5d\x4c\xe0\x68\xb3\x4f\xc1\x0e\x92\xb5\x9c\x6c\x93\xab\x76\x0a\x37\x98\xbd\x90\x46\x6f\x25\xca\x16\xe5\x36\x19\x05\x75\x57\x81\xa9\x45\xb5\x78\xb3\xf3\x6a\xd2\xdc\xe7\xf0\x8b\x82\x63\x55\xc8\x1c\xb3\x42\x00\x68\xdc\xb3\x42\x2d\xb8\xf4\xe7\xa9\xf7\x17\x42\x65\x41\xd5\xd4\xef\x0a\x8d\x73\x4e\xce\x8a\x98\x19\xdf\xa7\x84\xcf\xcd\x4a\x04\x2d\x5a\xc8\xd7\x95\x64\xae\x45\xd8\x1e\xd9\x5e\x39\xcb\x01\xdb\x77\xcc\x72\x2c\x43\xe9\xad\x38\x9e\x29\x74\x76\x66\x41\x5d\x9c\x4a\x46\xe2\x9e\xea\x15\x6a\xe8\xfa\x9b\x1e\x5c\x54\xba\xa3\xef\x22\x7b\xcc\xac\x70\xac\xb7\xba\xa6\x93\x6a\x0a\x3d\x98\xa4\x91\x32\x5a\x4f\x67\xd7\xa4\x6b\xcf\x59\x29\x3a\xbe\xae\xf0\x76\xd7\x17\x8a\x0b\xd5\xc3\x4a\x6e\xa4\x3b\x4f\x69\xe4\x93\xf5\x69\xd2\xbe\x67\x85\x90\x54\x22\x22\xcd\x7a\x4a\x56\x99\xec\x6c\x73\x59\x57\xa7\x02\x6a\xf4\x6a\x0b\x6d\x70\x02\x4c\x52\xc4\xe4\x36\x9c\xbb\x02\xbe\x7b\xd1\xc6\x1d\xe7\xce\x0a\xc1\xf5\xbd\x95\xf0\x43\x4a\x9f\x6c\x68\x13\x88\x55\xd4\x2c\xd0\xa3\xe7\xa9\x55\x21\x0c\xd5\x99\x30\x49\x1a\xd3\x2e\x9e\xce\x84\x09\x14\x69\x92\x34\x26\x27\xfc\x14\x14\x3e\x9d\x3c\x93\x7c\x3e\x9d\x03\x53\xc0\xc5\x74\x3e\x4c\x3a\xf2\x94\xf6\x30\x0b\xc6\xc8\x79\x35\xef\x17\xc0\x48\x28\x8d\x80\xf8\xda\x7d\xb7\xe2\xa2\xfc\x0a\x79\x7e\x3a\x13\xe6\x2d\x50\xaa\x59\xc1\x96\x95\xb4\xe9\xda\xbe\xb3\xeb\x67\xc5\xab\x39\x5d\xc1\x6d\x0e\x69\x18\x43\xec\xda\x00\xb1\x31\x44\x56\x3d\xca\x79\x95\xd5\x52\xe9\x58\x92\xf3\x2b\xbc\xbc\x62\xa4\x84\x0f\x80\x09\x5b\x64\x92\xd5\x0a\xd3\x5c\x32\x0c\x6d\x7a\xf5\x02\x60\xfa\x06\x94\x4a\x3b\x97\xc2\x67\x57\x2e\x12\xc8\xaa\x54\x28\x92\xc6\xaa\x40\x86\xc2\x29\xee\x95\x12\x23\x81\x67\x7c\x43\x01\xb9\x8c\x7a\x5d\x57\xbb\x7b\xc0\x4c\x90\x52\xd6\xa8\x24\xd5\x14\x50\x33\xab\x45\x5a\x8e\xc0\xc5\x51\x30\x70\x02\x2b\xa2\xde\xa9\xcf\xe0\x12\x96\x24\x87\x65\x8f\x2f\xfb\x74\x91\x55\x56\x14\x34\x80\x00\x25\x5a\xf3\x12\x36\xb5\xc8\x1b\xab\x20\x45\xa2\xd2\x3f\x0a\x62\x40\x60\xa1\xdd\xba\x20\xed\x2e\xf2\xc6\xb2\x37\x17\x07\xaf\xf2\xc7\x63\xb1\x92\x2d\x4e\xa4\xc5\x4a\xb6\x0a\xef\xdb\x5e\x5e\x76\xae\x62\xf6\x63\xd9\xa7\x2b\xcb\x3d\x3b\x2b\xbc\xbf\xa8\xb4\xe1\x56\xc1\xf3\xdc\x80\x05\x67\x29\x58\x46\xb0\xe8\x22\x63\x2c\x7b\x7c\x95\x5b\x52\xca\xf7\xaa\x50\xf0\xb2\xa2\xaf\xfa\xab\x71\xe3\xd0\x5b\x6c\xec\x6b\x7d\xef\x91\x4c\x6b\x34\xec\xeb\x45\xfb\x5e\x5f\xa8\x11\xdf\x55\x61\x6b\xb3\x7e\x71\xd5\x9d\xd0\x7b\x6f\x61\xe3\xba\xb3\xee\x5f\x05\x69\x54\x30\x82\x7e\xdd\x53\xb4\xf2\x55\x80\x11\xcb\xd7\xd1\xe8\x17\x3d\x62\x91\x07\x16\x4d\x61\x09\xfb\x5f\xbb\xee\xb9\x05\xe3\x25\x81\xc4\x3a\xdc\x05\x1b\xf4\xe4\xa5\xcd\x06\xb2\x4e\xb9\x61\xb3\xae\x81\xf5\x54\xfa\x4d\xfd\x55\x48\x91\xd3\x63\xb1\x15\xac\x53\x00\x52\xe6\x9d\x05\x6c\xd1\xca\x25\xa8\x3f\x5a\x2d\x15\x72\xa2\xcf\xc6\x93\x9d\x4d\x50\xc9\xbb\x16\xae\x1c\x95\xe4\xe3\xfe\xfa\x45\xbb\xec\xf8\x0a\x76\xf2\xc5\x1a\x5f\x90\x19\x4b\x5a\x29\xc4\xfc\x47\x85\x0c\x18\xdb\x02\x32\xbb\xdf\x50\x14\xa9\xf8\xc6\x4d\x2a\xc1\x62\x2b\xdb\xff\xf0\xa8\x6c\x7d\x68\x87\xbb\xd5\xa3\xa6\xab\x30\x4e\x29\x22\x15\xdf\xb6\x2a\xba\xc8\x71\xb2\x08\x02\xb0\x5c\xc6\xaa\x6c\xe2\xf2\x5b\xdf\xc2\x7a\x12\xd7\xdf\x2a\x76\x81\x77\x9f\x01\x60\xb7\xba\xb3\x3c\xa3\xef\xb0\xd9\xad\x14\x4d\x00\xf5\xd8\x3e\x08\xe8\xb1\x99\xe1\x77\x2b\xa4\xb5\x2c\x4c\x89\x82\x94\xaf\x16\xcf\x16\xd8\x35\x3f\xbd\xc3\x66\xf3\xaf\xef\x82\xc2\xc5\xd8\xb7\x78\xc1\x4d\x65\xd9\x59\x7f\x75\xbf\xc3\x06\xa6\xe8\xd8\xf2\x95\x94\x24\x78\xf7\x0b\x5e\x85\x15\xd3\x67\x5d\xcb\xae\xcd\xca\x50\x7b\x5f\x14\xf5\x06\x5f\xc4\xf7\x2c\x73\xff\xdd\x03\x8d\x76\x16\x32\x0c\x68\x5e\x6f\x70\xe4\xec\xca\xd4\x23\x2c\x6c\xa2\xc1\x1e\xdf\xcc\x44\x3d\x31\x1a\xcc\x75\x5b\x2c\xd1\x76\x90\xec\x01\x68\x9d\xf3\x70\x57\x66\xa5\xa8\xb2\xc4\xc6\x37\x15\x67\x53\x68\xb6\xc3\x06\x42\xce\x5b\xc2\x16\x72\x2b\x3c\x4f\x14\xf2\xaa\x63\x66\xc3\x14\xdd\x51\xdf\xe2\x77\x19\x2d\xb6\x28\xae\x74\x74\xed\xa8\xfc\x47\x91\xda\x09\x8b\x72\x57\x9c\xe2\xa8\x18\x11\x68\x48\xdf\x3c\x9b\xba\xbe\xa2\xb0\x0b\x1c\xde\x3d\x7e\x8b\x72\xb3\x89\x0f\x9b\x98\xb0\x61\x27\x6e\x47\xfb\xae\x8c\x01\x31\xa9\xbb\xd0\x12\x66\xa1\x6f\xf5\x8a\x8d\x63\xc0\x93\xbf\x26\x6a\x61\x33\xc9\x6f\x99\x86\x9b\x8a\xb3\x0b\x8e\x1e\x1e\xd1\x16\x43\xb3\xc5\xa1\x6e\x98\x27\x9b\x43\x6f\x43\x3e\xd9\xc4\x8d\x5d\xd1\xfa\x85\x6c\x33\x0b\x8d\x4a\x4c\xfa\xaa\xb0\xea\x42\xa6\xf2\x45\x95\x05\xc2\xbc\xb1\x57\x88\xca\x37\x6b\x70\x7e\xb6\xc3\x66\x33\xc3\xc3\x23\x1a\x9b\x2a\xb3\xd7\x17\x15\x50\x0c\x4d\xd4\xb5\x0c\xe2\x59\xc8\x9c\x95\xef\x52\xb8\x70\x15\x67\x53\xb1\x80\xee\x94\x39\xb1\xa7\xf6\x55\xc5\x02\xb4\x58\x21\x84\x85\x7d\xea\xd9\x59\xf8\x2a\x9e\x2d\x34\x2a\xf3\xcb\xec\xb7\x6b\xbb\x13\x40\x36\xf5\x65\x33\x63\xec\xf3\xcd\x1d\xae\xa7\xfc\xd5\x9e\x92\x95\x59\xaa\xc6\xae\x8c\x9c\x5b\xb1\x3b\xee\xb9\x76\xd6\xad\x68\x18\x7b\x84\x53\x6e\x3b\x6c\x36\xb3\xc7\xa9\x7c\x34\x82\xc0\xa9\x88\x07\x71\x1e\xa7\x76\xeb\xad\x48\x91\xc2\x48\x14\xd7\x22\x27\xe0\x10\xff\x0f\xa1\xfb\x30\x27\x1c\xbb\xe0\x10\xf6\x8f\x78\xe5\x43\x54\x3f\xce\x90\x63\x77\x9f\x5e\x78\x32\x43\x8c\x32\xb4\x40\x82\xfc\x81\xe4\x70\xfa\x17\xc1\xcf\xf5\x70\x1d\x9e\x52\x62\xc3\x99\x70\x18\x39\x0e\x01\xe1\x30\x10\x9e\x6f\xc4\xf3\xa9\x96\x94\xed\xeb\x5a\x38\xb7\x2c\xe9\xc3\xac\x78\x86\x5e\x31\x5d\x9c\x51\xfd\x97\x53\xc9\x30\x7f\x28\x04\x67\xd4\xaf\x88\x67\xca\xca\xe6\x3b\x32\x88\x8d\x15\x11\xfe\xd8\xad\x87\xb9\xe2\x30\x3f\x28\xf2\x32\x0e\x17\xd9\x09\x90\xf5\x85\xac\x48\xa8\x3f\x8c\x91\x47\x7e\xe5\x91\xcd\x7a\xa8\x11\x27\x0a\x91\xcc\xf7\xca\x3d\x52\x4f\x6b\x1c\x42\xc1\x61\x84\x3e\x15\x59\x95\x85\xac\x68\x94\x52\x74\x97\xf3\xf0\xd8\xa1\x87\xd9\xfe\x88\x1d\x3c\x5c\x6a\x87\x29\xe2\x64\xa1\xba\x43\x11\x9c\x85\xed\xae\x27\x04\x79\xc5\xcb\x86\x3a\x66\xe3\xc8\x56\x3e\x85\x37\xc8\x0d\x2e\xc2\x6c\xa8\x6d\xf6\x68\x61\xd2\xba\x13\x0a\x2b\x43\xc5\x59\x5f\x8c\x26\x2d\xc6\xf9\x8b\x47\x21\x9e\xd2\x3e\x3d\x04\x8a\xc3\x08\x71\x2a\x86\x6f\x29\x0b\x22\x3a\xf3\x50\x11\x8e\x3d\x5b\xc5\x59\x0e\x94\xce\x43\x7c\x80\x99\x36\x4e\x95\xcc\xb0\x37\x45\x14\xbd\x6b\xcf\x1a\x49\xe6\xff\xc3\x3c\x79\x38\x01\x0e\x27\xdb\x99\xde\xb6\xeb\xd7\x8d\x61\xa5\x33\x70\xb5\x1d\xe6\xc9\x43\x34\x3e\x15\xad\x25\x52\xff\xd8\x77\xa7\x62\x4f\x39\xca\x2a\xfa\xfc\xd8\xbf\x87\x80\x7f\xce\x37\x97\xdc\xf5\xad\xe8\x25\xd4\x4e\xb1\xc7\x0f\xfe\x7b\x28\xeb\x15\x73\x7c\x2e\xdc\x69\xfc\xee\x32\x0a\x5e\xb1\x77\x97\x7a\x7d\x9b\x7c\x1a\xbb\xef\x56\x02\x02\xfe\x78\x71\xde\x4b\x85\xbd\x95\xf3\xc7\x24\x7f\xbf\x8e\xaf\x27\xba\x5e\x38\x2d\x97\xe9\xfd\x52\x97\xe1\xbd\x8f\x8b\x57\x5e\x3b\xee\xda\x89\x57\x54\x50\x21\xe9\x5d\xa6\xc1\x8a\x31\xad\x62\x34\xb7\x90\x7e\x7b\xe5\xa8\x89\x68\x1f\xde\xcf\xa9\x75\x89\xdb\x97\x91\xfe\x32\xe1\x5f\x21\x06\x17\x67\xbc\xc4\xf0\x3b\x2a\xb3\x38\x3d\x2b\x47\x8a\x48\x7e\x65\xde\xdc\x51\x28\x49\xde\x49\x4c\x53\x9d\x6f\x28\xd4\x37\xee\x17\xd9\xd2\x68\xc0\x75\xbc\x51\x28\xbb\x62\xbf\xb8\xa7\x6e\x2c\x6f\x30\x1a\x72\xf0\xaf\xb8\xd5\x4b\xe8\xbe\x51\xf1\xa0\x95\x81\x2e\xc5\x86\x61\xef\xda\x4d\x97\xd0\x0d\xb3\x68\x5c\x3c\xee\x16\xa6\x3d\x81\xfa\x12\xb7\xaf\x14\x18\x25\x95\x87\x82\xc9\x8f\x8a\xe5\x35\x32\x10\x71\xaf\xd5\xae\x38\x72\x36\xb1\xad\xca\x23\x8f\x6b\xa7\x5c\xbb\xe9\x12\x9f\x2f\x33\xd5\x65\xb0\xbf\x85\x5c\x84\xc7\x41\x67\x1d\x97\x42\x7c\x99\xd9\x2e\x6e\x75\xad\xff\xcb\x8d\x7c\xa9\xbc\x97\x01\xfe\x1e\x08\x93\xbb\x90\x48\x2b\x86\xcf\x17\x11\xa8\x0b\xd7\xf4\x56\xee\x20\x71\xf8\x42\xd1\xaf\xe8\xb7\xcb\xb8\x7e\x95\xe1\xb8\x94\xe3\xfb\x45\x34\xad\x14\x24\xa3\x71\x2a\xfe\xd2\x5c\xe0\x3e\xb7\xd0\x11\x21\x6f\xdc\x42\x3e\x39\x85\xf3\x23\x93\x8f\xda\x7a\xed\xca\x4b\x74\xbd\x0c\xe7\x97\x81\xea\xe2\x35\x97\x20\x7c\x6f\x15\xe8\x29\x24\x58\xd8\x26\xd4\xd6\xcb\xb8\x75\xed\x8b\x8b\x1f\x5d\xbc\xe9\x92\x63\x6f\x65\x1f\xe2\x5f\x97\x74\x5a\xa8\x89\x62\x73\x47\x61\x1c\x5d\x78\xcb\xad\x7d\x15\x65\xf9\xa0\xf2\x40\xe0\x4c\xc2\x88\x08\x19\x93\x21\xec\xeb\x5d\xa3\xb3\xd2\xa3\xea\xda\x3d\xd3\x53\x62\xf4\xdb\xd6\xbe\xbd\x4d\xcc\x5c\x93\x03\x00\x49\xa6\xc9\x7c\x68\xad\xb0\x17\xaa\x94\x92\x9c\x3c\x01\x62\x4d\x6c\xb1\x82\x59\x8f\x42\x6e\x49\xed\x85\x90\x46\xd6\xea\x62\xa3\xbb\x08\xd4\x2e\xb3\xad\xc3\xd0\xee\x7a\xde\xf5\x4d\x5e\x90\xd0\xb0\x90\xbd\x17\xad\x70\xcb\xbb\xf8\x51\x28\x5b\x0d\xf6\x4b\xab\x1c\xc7\x51\xbf\x7b\x87\x6b\x4f\xdd\x42\x93\x78\x7d\x80\xcd\xde\x46\xe5\xcc\xe8\x9b\x12\x60\x4d\x7c\x79\xe5\x0e\xaa\x98\xf0\xa8\x37\x40\xa2\xa8\xfc\xda\x0a\x3c\x81\xd8\xd9\x2a\xfe\xfe\xc9\xb7\x21\x36\x34\x5a\xe5\x23\xc2\x01\x6e\x95\xa4\xa6\x62\x47\x2b\x64\xda\x80\x02\xf7\x76\x77\x08\x52\x0b\xa8\xb0\xd1\x20\x40\x36\xe8\xc7\x2d\x46\xb5\x78\x5b\x68\x89\x4a\x49\x83\xd7\x9a\x95\xa7\xbf\x61\xb7\x7a\x4a\x46\x20\x7c\xfb\x16\xe6\x4b\x3c\xb4\x3a\x08\x8f\xfa\xab\x71\x88\xca\x80\x37\x0e\x69\x4c\xa4\xaa\xb5\xc2\xd2\xcc\x5e\x99\x85\x0d\xd5\x5e\x68\x66\x7e\x57\x79\x1d\xa8\x05\xd1\xe4\x3c\xc8\xc3\x79\xb4\x30\xee\xde\xb3\xb3\xb2\xae\x8d\x80\x3c\x87\xa6\x4e\x09\xc4\xec\x80\x31\x1e\x0d\xb2\x84\x50\xb8\x68\xf0\xc7\x5a\x95\xd1\x99\xf5\x06\x6f\x9b\xb3\xb2\xb7\xd1\x7a\xca\x1a\x53\x8a\xab\x2d\xe3\xb9\xe4\xb8\x17\x86\x2d\x6c\x9f\x06\x1b\xa4\x41\x6c\x6e\xa2\x6c\xdb\x2a\xac\x45\x6f\x5b\xd6\xf6\x9a\x9e\xf2\x15\x6b\xb9\xb6\x96\xd6\x37\x8f\xc2\x3d\xa7\x72\x64\xab\x76\x03\xd4\x2c\x73\xb4\xcd\xc5\x2e\x2c\x50\x33\xb8\x2b\x9b\xd9\xb8\x41\xb7\x6e\xc7\xc8\x1f\xf3\x75\x7c\xd7\x31\x5f\x67\x17\x1a\x30\x64\x78\x98\x60\xd7\xc8\x88\xb4\x6e\xd0\x99\x9a\x1c\x71\x99\x09\xef\xda\x3d\x7e\x51\xe6\x7d\xab\x2c\x58\x58\xd6\x4d\xca\x61\xbb\xd6\xe1\xf5\x2d\xa2\xf9\x85\x8f\x45\xbb\x85\xd7\x5a\xbf\xf2\xc5\x83\x82\x5a\x59\x99\x00\x8a\xd0\xb5\x5e\xf8\xb4\xae\xa1\x02\x40\x19\x12\x32\x16\x30\x8a\x1f\xad\xcc\x01\x77\xde\xaa\x0a\x21\x9f\xbe\x43\xf5\x94\x13\xdc\xa1\xd3\x6f\xf8\x4b\xf6\x75\xef\x52\x2c\x7b\x61\x56\x78\x43\x2f\x1c\x2a\x98\x87\x5d\xee\xaf\x7d\xda\x65\x06\xf6\x2a\xf8\x55\xc8\x57\xf6\x5d\x1f\xa9\x9c\xcb\x2c\xd4\x97\x8a\x0b\x87\x68\x5a\xd9\xfc\x6a\x5b\xc8\x85\xeb\xea\xe2\x74\x39\x6f\x7d\x54\x7e\x73\x55\x27\xf1\x75\x76\x9f\x5c\xd8\x28\xdc\xa4\x1e\xb1\x3f\x59\xa5\xa3\xa0\x8d\x85\x60\xae\x47\xa1\xa2\xc1\x4b\x88\xa3\xc5\xfb\xa3\xf0\x00\x4e\x65\x23\xc0\xc6\x89\xba\x56\x08\xc9\x38\xa4\xf7\xe7\xb7\x34\x12\xec\xbe\x5b\xf1\xf7\x75\xbf\x7b\x44\xb7\xdb\x47\x5d\xbe\xdc\x37\xec\x8b\x76\xa9\x26\x4b\xc8\x30\x7e\xd4\x9d\x90\xab\x61\x7b\x76\x19\x08\xdd\x5e\x83\x6f\x1c\x1d\xc6\xac\x10\xb0\x50\xb0\x29\x3a\xfc\x52\xe8\xe5\xa1\x9a\x4c\x40\x9b\x8f\x2e\x99\xb4\xcf\x51\xd7\xfe\xea\x1b\xd5\x6e\xe8\x50\x95\x84\x8f\xbd\x6b\x6f\x28\xdc\x69\x7d\x50\xc1\xa1\xcf\xca\xd5\x36\xe6\x76\x62\x5f\xea\x2f\x2c\xa3\x21\x63\xa4\xc3\x5f\xed\x72\x27\xba\xdd\x27\xac\x2c\x64\x19\x45\x45\x6f\x77\x05\xfe\x84\x8f\x45\xaf\x92\x6a\xd2\x87\xfb\x34\xce\x85\x0d\xb0\xea\xfd\xd5\x52\x45\xd6\x8c\xe4\xaa\x3e\x1f\x31\xe5\xb2\xa5\xe5\x3a\xf6\xbd\x8a\x26\x74\x87\x42\xfd\x95\xbd\xa0\x0f\xb0\x83\xfa\x9e\x75\x8f\x20\x3b\xbf\xb8\xa1\x10\xef\xc2\x84\xf0\xa5\x5b\x7f\x6a\x0d\x43\xfd\xea\xbb\x7e\x4b\x1e\x85\x82\x62\x5d\x49\xc1\x0e\x47\xb1\xcb\x8d\x14\x20\x16\xbd\xd0\xef\x0b\x63\xea\xb4\xba\x96\x0b\x6a\x9d\x1c\xf3\xe2\x04\x80\x6e\xfa\xae\xbd\xc1\xb9\x51\xeb\xf0\xf8\x95\xf3\x4e\xe9\x6e\x8f\x2b\xe3\xf5\xae\xd5\xd3\xe9\x70\x41\xbf\xe8\xa0\xaa\x2a\xf8\xad\x4a\x3a\x96\xa3\x28\xdc\x2c\x04\x97\x45\x97\x8e\xfd\xad\x8a\x72\xab\xf0\x96\xf3\xea\x56\x66\x05\x3c\x5e\xe7\x43\xbf\x95\x09\xa0\x87\xce\x8a\x0e\xb7\x56\xd0\x59\xf4\x42\x90\xbb\x55\x3f\xa2\x10\x2c\x5b\x21\xcd\x16\x06\x72\x21\x2b\xc0\xcc\x11\xdf\x0f\x59\x61\x40\xc6\x1b\x92\xac\x47\xa1\x96\xc9\x12\x11\x7a\x16\x03\xf7\x1f\x85\xc9\xd3\x76\xa1\x8f\xc0\x06\x6c\x85\x10\xe8\xa9\x42\x09\x96\x6f\x59\xd9\x1d\xc2\x4b\x87\x44\xef\xd1\xa1\xdf\xf4\xca\x40\x83\x24\xd3\x0b\xe1\x07\x52\x7a\x2f\x9c\xb4\xe3\xce\x7a\x83\x8a\x03\x10\x84\xd4\x4f\x79\xf7\x28\x4b\xa7\xb7\xf2\xb8\x46\x3f\x9e\x9d\x75\x67\xa1\xe0\xa2\xbe\x11\xc2\xb0\x50\xb5\x18\xd0\x3b\x47\x65\x8b\x0d\x7d\x18\x85\x1f\x28\xe3\x77\x54\x46\x9c\x5f\x94\xd3\x32\x9c\x3f\x6a\x8b\x84\x70\xb6\x47\x5d\x43\x47\xc0\xe5\x07\xde\x3d\xc2\xc8\x44\x21\x01\x76\xf5\x56\xa0\x4c\x93\x10\x06\xf9\x61\x90\x19\x06\xdc\xc2\x21\x83\x68\x54\x89\x3d\x32\xc0\x88\x2c\x4c\x54\x77\xee\xca\x5a\xf4\x57\x3d\x84\xf2\x37\x64\xac\x8d\xa8\xfe\xd4\xaf\x40\x20\x80\xd8\x3f\x9c\x7b\x83\x9c\x30\xc8\x09\x23\xe4\x44\x91\x13\x46\xbe\x5d\x3f\xe0\xca\x0c\x48\x41\x23\xab\x57\x70\xf5\xa1\x60\x8d\xca\xed\x74\xc2\xa8\xd0\x16\xb0\x79\x1e\xd5\x62\x64\xf0\x71\x39\xcf\x21\xd3\xe6\xd1\x8d\xca\xbf\xf2\x2b\xab\xf2\xbe\x5a\x21\xf0\x6b\x37\x77\x50\x46\xc6\x82\x61\xe8\x3c\x19\xb8\xfc\x80\x19\x33\x56\x21\xf6\x57\xb5\x1d\x55\xd6\x16\x5c\x8d\xa5\x27\xb8\xfc\x58\x66\x0a\xce\xf6\xa8\x9c\xe7\xa5\x3f\x6a\x0f\x0d\x27\xcc\xa8\x9a\x29\x0a\xd4\xce\x6a\x77\xe6\x8c\xdd\x2b\x67\x0c\xfe\x79\x65\xb6\xa8\x70\xb1\xad\x4f\xa5\x42\x85\xcb\xc5\xd8\xb3\xf2\x5e\x94\x6a\xd5\xdb\x6d\x3d\xa8\x2b\x24\x38\x2e\x04\xc4\xc5\xd8\xc6\x61\x1b\x07\x38\x37\xe3\xe9\x20\x21\xac\x38\x46\x55\x90\x91\x91\x35\x4e\xe5\x28\x42\x20\x87\xc9\x51\x98\x31\x43\x2d\x24\x18\x8c\x8f\x6a\xd9\x85\xeb\xa5\xe5\xd4\x75\x21\xe5\xfa\xeb\xa9\x6c\x1c\x7f\xad\xc2\xb5\xc6\xfc\xb6\x42\xe0\x00\xe9\x60\xed\x39\x79\xe0\xb8\xc4\x37\x5c\xae\xde\x03\xe9\x1d\xa2\x7e\x0c\x15\x6a\xe0\xea\x3f\x5a\x18\x71\xe9\x5a\xcd\x97\x53\x19\xad\xf0\x57\x64\x71\xcb\x36\x8c\xc2\xc2\x95\x91\xae\x9e\x7b\x08\xa3\x0b\x15\xdb\xe3\xe0\x65\x42\xe4\x22\x9c\x15\xa1\x3a\x9d\x4c\xa4\x08\xd2\x8b\xca\xef\x8f\x02\x1f\xa8\x9a\x1a\x05\x47\x00\xc7\xc8\xc9\xf0\x58\x14\x0a\x14\x62\x16\x75\xff\x29\xc8\x02\x18\xb9\x47\x8e\x34\x0c\xe1\x2f\x5e\x40\xe5\x02\xc1\x38\x19\xb0\x22\x47\x2b\xcc\x18\x78\x8f\x2a\x95\xd8\x3b\xe1\x94\x88\x51\xb8\xa6\xf0\x0b\x9c\x09\x82\xf5\x42\xc9\xd1\x80\x5d\xff\x68\xfd\xd5\x1b\x14\xba\x1d\x95\x8d\xa6\x1a\x85\x0c\xfc\x18\x85\x27\x59\xf8\x34\xe0\x14\x48\x38\x51\xc5\x82\xc7\xd1\xae\x9f\x4e\x8f\x18\xd5\xc3\x5b\x38\xa5\x03\xa6\x48\x21\x8b\x14\x3a\x8b\x76\xce\x5b\x72\x4e\x54\xf1\x47\x12\x4e\x40\x6a\x0d\x99\xea\x11\x95\x6b\x77\xea\xda\x5f\x8d\x0f\x44\x62\x41\x7f\xef\x9d\xae\x0b\xf7\x45\xa9\x53\xa7\x41\x38\x01\x42\x8d\xb3\x48\xf7\x64\xa1\x35\x9a\x41\x59\xbe\xaa\xe6\x45\xd0\x0b\xaa\x32\x57\x90\x5e\xe0\xdb\x87\x40\xbf\x47\x43\xb6\xb0\xaa\x52\xa7\xae\x2b\x7f\xb8\xfb\xab\x6b\xdf\x48\x86\x01\x5e\xf1\xae\x55\x95\xaa\xaa\x61\xc7\x3d\x66\x73\x56\xe9\x49\xfd\xa7\x2f\xc4\xaa\xfb\xf5\xdf\x79\x12\xab\xfa\x53\xbf\xb5\xab\xa6\x55\x15\xce\xd6\x07\x63\xe5\x64\x88\xed\x1b\x0b\x2f\x67\x55\x89\xdb\x7a\xb3\x75\x02\x2b\x2f\xd6\xf7\x3a\x3d\xeb\x29\x65\x4f\x69\x19\xb2\x3a\x43\x39\xc4\x10\x24\xf8\xde\xf9\xee\x54\x43\x21\x48\x11\xa1\x26\x8e\x00\xc0\x10\xe2\x17\x01\xbf\x2e\xe8\x17\x70\xe3\x03\x8a\xe6\xfb\xab\x6b\xb3\xb0\xeb\xb7\xf4\x81\x64\x12\xc7\x2c\x90\x40\xc2\x19\x15\x07\xa8\x88\xda\x5e\x41\x86\x09\x7b\x5c\x00\x60\x04\x39\x24\xd5\x40\x8c\x5b\xf8\xa8\x85\x4c\xe8\xfd\xb7\xb2\x6d\x8d\xbc\x73\x20\x4e\xe5\xbb\xda\x53\x74\x9c\x80\xd9\x03\xb7\xf9\xfd\x56\x65\xe7\x7a\xb3\xd1\x83\x76\x1e\xa4\x8b\xa0\xa7\x64\x9d\x00\xce\x8d\xb8\x95\xa3\xa8\x8e\x98\xc2\xa0\x0e\x92\x20\x7a\x24\xa1\x23\xae\x24\x53\xf0\x84\x29\x19\x33\xa5\xfe\xa5\x03\x23\x29\x2e\xa9\x1c\x50\xb6\x7a\xd9\x2a\xea\xa3\xc1\x19\xf6\xee\x13\x3d\xcb\xb4\x00\xb0\xfc\xb5\x4b\x5f\x2d\x78\x0d\x20\x50\x14\x9a\x24\x02\xe4\xa8\xa7\x8e\x37\x5c\xed\xa7\xda\xdd\x3f\xbd\x4d\xba\x34\xc5\x45\x84\xdf\xbb\xc7\xb5\x24\x71\xa0\x63\x49\x30\xc9\x2a\x6c\x38\x94\x9e\xa8\x94\xff\x51\x10\xe0\x7e\x91\xa2\x93\x44\x89\x54\x44\x28\xc7\x06\x39\xec\x2b\x46\x39\xaf\xc0\x9e\xd8\xdc\x6a\xf6\xbe\x9e\x7b\xe7\x2d\x28\x5f\x79\x44\xe1\x1a\x40\xac\xa2\x2e\xa2\xfa\x22\xe3\x5b\x6f\xd9\xb3\xa7\x4a\xe7\xbd\x5f\xe1\x7d\x17\xdb\x17\x22\xf9\x42\x91\x84\x10\xa5\xf7\x68\xaa\x48\xec\xda\x48\x66\x95\x6d\x31\xce\xb6\x60\xda\x94\x22\xf9\x02\x28\x60\xe4\xa9\xf7\x6c\x80\x44\xbd\xea\xee\xa2\x40\x94\x55\x48\x4e\xb0\x5f\x39\xab\x06\xaf\xf7\x57\x51\x9a\x59\xf0\xa2\x05\xed\x29\x33\x0a\x7c\x9b\xea\xc4\xef\x1e\x4f\x55\xdd\xe3\x5d\xed\xf5\xec\xbb\x53\x89\x8f\xac\xba\xbe\xc4\x04\x11\x7e\x21\xda\x2f\xc4\x05\x46\x3a\x12\x14\x6f\x7c\xd4\x3d\x7a\x0e\xd6\x2a\x15\xbd\x11\xc3\x17\xb9\xbe\x75\x9b\x0b\x0e\xd3\x3d\xe6\x8e\xa0\x91\x0b\xe0\x03\x51\x22\x41\x68\x8b\xd2\x8b\xdc\x7e\xd1\xb1\xa1\xf8\x58\x24\xb5\x23\xa1\x19\xa5\xad\x9c\xd2\xd8\x99\xfc\x43\xb4\x5f\x88\xdb\x0b\x65\x6a\xdf\x75\xd1\xe3\xa9\xd7\x07\x1b\x3d\x55\x68\x4f\xd5\x95\x93\x50\x90\x00\x59\x53\x31\xbd\xac\x7a\xf5\x60\x52\x92\x92\x91\x40\x4b\x14\xe2\x08\x71\x7e\x8f\xfa\xab\x92\x83\x0a\xa0\x89\xea\x8b\x3c\x75\xa7\xf1\x04\x01\x91\xd4\x11\x51\x7a\x8f\x0e\x0e\xb4\xa3\xec\x80\x4a\xcb\x56\x5a\x81\xf0\x10\x13\x44\xe0\x85\x94\xf0\x28\x50\xe4\xfc\x22\x42\x49\xb6\xb5\xd1\xc1\x65\xbc\x16\xc0\xf0\xd6\xd8\x5d\xee\xbf\x05\x66\x7c\x3d\xeb\x57\xec\xac\x82\x67\xbe\x05\xe8\xee\xbb\x2a\xe5\x1f\x98\xc3\x64\xda\x9c\x14\x11\xd1\x78\x21\x3e\x2f\x44\xdd\xc5\x24\x56\x80\x41\x7d\xd7\x05\xb2\xde\xa4\xcc\xbb\x9e\x28\x70\x43\x50\xa3\x62\xf2\x62\x52\x2f\x44\xcb\xc5\x2c\xe0\x7c\x66\x4b\x30\xea\x21\xde\xee\xfd\xf5\xbd\x9f\x88\x31\x19\x2f\x41\x92\x3f\x7a\xb4\xa3\xf2\x63\x01\x2f\x8a\xb7\x8b\xe9\x04\x98\x4a\xa9\x4c\xaa\xc9\xac\x44\x7e\x67\xc5\x24\x80\xcc\x5e\xbf\x7e\x15\x04\x68\x05\x6e\xe0\xba\xab\xdd\xdd\xab\xb2\xb4\x32\xc1\xbe\x94\x58\x21\x0e\x2f\x0a\xda\x6c\x12\x28\xe6\xb7\xd6\xb7\x6f\x74\x9e\x4c\x26\x93\xc9\x7c\x32\x0b\x7a\x02\x04\x3b\x88\xb7\x10\xb1\xf7\xb8\x2c\xa8\xc7\x02\xb5\xf0\x5d\x54\x8a\x49\x70\x98\x51\xe0\xee\xb3\x4a\xe9\x6e\x85\x16\x0b\xec\x56\x79\x01\xef\x49\x3d\x04\x7b\x32\x29\x04\x93\x80\x30\xf3\x9b\x7c\x0d\x30\xf8\x5b\x22\x12\xd5\x37\x46\x8e\x99\x05\x41\x4d\xdc\x56\xc6\x6d\x3a\x7f\x66\xd6\x9b\x15\x76\xc8\x82\x9e\x28\x40\x00\xe3\x30\x8d\x03\x08\xdb\x39\xc1\x35\x38\x2b\xc4\xde\xc5\xc4\xcc\xa7\x02\x17\xd3\x89\x31\x19\x30\x40\xab\x86\x98\xbc\x77\x27\xa0\x7d\x5f\x3a\x8d\x1e\x15\x64\x32\x72\x4c\x06\x92\xe9\x84\x11\xa5\xf7\x68\x43\x95\xb8\xac\x72\xbe\x92\xe5\x4f\x15\xbd\xd4\x93\x55\xd7\xfa\xc3\x24\x39\x9d\x1b\x93\x50\x30\x99\x1b\x67\x55\x83\x5f\x46\xd2\xd9\x32\xa9\x23\x93\xf8\x30\x57\xfd\x3a\xb8\x2a\x26\x90\x49\xf4\x98\xdb\xaf\x53\x44\x26\x50\xd8\x49\xf9\x98\xdb\x78\x16\x10\xb5\xf3\x64\x32\x66\x4c\x4a\xc9\x64\xaa\x14\x1d\x18\xd3\xfe\x9d\x55\x29\x9d\x21\x61\x5e\x5f\xc1\x78\x30\x0b\xb7\x4c\x59\xea\xc9\x60\x30\xa1\x91\x4d\x66\x83\x69\xb7\x8a\xa2\x7b\x74\xa3\xde\x63\x25\x2b\x38\x33\x0b\x1e\xe4\x16\xe4\xa5\xf5\x26\x0f\x64\x32\xfc\xaf\x02\x59\xc7\xea\x81\x43\xbf\x6b\x89\xfc\xbd\xae\x15\x1f\x18\x4a\x39\x65\x81\x14\xb9\x5f\xd9\x1f\x65\x43\x56\xab\x5a\xf7\x85\x7c\x76\xdd\x73\x0b\x76\xbd\xa1\x75\xbd\xd0\x77\x8f\xb2\xba\xcb\x2e\x5e\x4f\x06\xc8\x46\xcd\x15\x87\x17\x4a\x78\xbd\x6b\xf7\xf7\x2a\xf7\x74\xc1\xc0\x4f\xd4\xb5\x37\x10\xea\x45\xce\xc5\xb2\x83\x80\x53\x3d\xfa\xde\x66\x07\x2d\xdc\x79\x45\x01\xa4\xea\x0f\x1e\xbd\x18\x23\x45\xcb\x3d\xda\xb5\x6b\x61\x26\x04\xd9\x59\x65\x76\xc0\xde\xc7\x62\x5c\x2f\xf8\xb2\x15\xf5\x7e\x23\x40\x35\x5f\xcc\xf3\x2b\xf5\xd0\xfe\x5a\x14\x71\xb5\xb4\x63\x95\xe9\x51\x81\xc1\x95\x55\x34\x09\x9c\x57\x82\x4b\x07\x5f\xb3\xec\xc7\x2a\x6d\xb7\x38\x01\x14\xa4\x7a\x77\xbe\x11\x4e\x10\x3a\x05\x3a\xae\x60\x29\x08\xda\x00\x7f\x19\x4a\x4f\x3f\xea\x29\x23\x4f\x84\x5f\x0c\x87\x8b\x18\xbe\x48\x05\x22\xf0\x02\x4c\xd3\x93\x80\x15\xc8\xd2\x87\x59\x40\xbf\xb3\x0a\xfc\xbe\xa7\x88\xf3\x4b\xd9\x04\x71\x75\x8f\x7a\x16\xe4\x33\xc1\x5c\x04\xde\xa3\xde\xa3\x27\xf6\xe3\xaa\xd2\x7c\x55\x80\x8b\xa1\x11\x2c\x74\xac\x15\xd5\xe2\xce\x02\x1c\x53\x30\xcd\x6e\x5d\x0b\xac\x59\x81\xeb\xe3\xe3\xa2\xeb\x42\x1c\x5e\x2c\x40\x8d\x22\xf0\x1e\x75\xe7\x29\x90\xe3\xae\xc5\x2f\x56\x79\xdb\x0b\x42\xd4\xf7\x52\x11\x94\x8f\x0f\x85\xbb\x63\x15\x34\x32\x13\xe3\x22\xda\x8b\xc6\x0b\xb1\x7a\xa1\x24\x69\x88\xa8\x0b\xb1\x71\x01\xbc\x2b\x0a\xe2\xbd\x40\x7e\x45\xb3\xc5\x22\x9e\xaf\xb3\xea\xda\x9d\xb3\x80\xcc\xbd\xa1\xa0\x97\x6f\x41\xf1\xa2\x05\xdd\xa6\x87\xf8\xf8\xb2\xdf\x45\xe9\x85\x18\xbb\x58\x4c\x86\x8b\xf1\x00\x18\xf6\xa3\x05\x45\xef\xfe\xac\x67\xab\x78\x4b\xdd\xef\x4e\xb3\x06\x4c\x63\xdd\x42\x4f\xb4\x32\x6f\xfd\xca\x01\x9d\xf9\x6d\x41\x0b\xde\xfe\x28\x3e\x70\xcb\x28\xae\x68\x67\x2b\xda\x51\xc5\x90\x01\xf3\x2b\x6a\xb7\x0b\xd6\xc6\xde\xdc\xf6\xf8\x6e\x75\x86\x2c\xd7\x60\xad\x95\x6e\x13\x04\x17\x1b\xb8\x9f\x10\xb3\xd8\x78\xee\xe6\xe2\xdb\x9c\x81\xc2\xd0\x62\xe3\x9e\x9b\x31\x4f\x90\x5a\x6c\x45\x1b\x84\xad\x3d\x1d\xc9\x5f\x95\x65\xc6\x3d\xb7\x7d\xbd\x19\xf3\xf6\xa8\x22\x63\x7a\x12\xfa\x6c\x77\x0b\x34\x8b\xcd\xa1\xb7\x99\xeb\x36\xe5\x5b\xd8\xda\xa3\xc0\x6a\xa2\xe0\xc3\xb5\x64\x81\x70\xbf\xdf\x0a\x88\x8f\x51\xb0\xdc\x60\x7c\xb3\xde\xb6\xb5\x28\x07\x57\x65\x18\xa3\xca\x5a\xde\x82\x3a\x7d\x2d\x8a\xe5\xee\xfc\x82\x6d\x5f\xed\xee\x07\xf5\x0d\xf8\x68\x53\xbe\xb7\x7d\xbd\x15\xc7\xd8\x55\xfa\x80\x1c\x2e\xdc\x2c\x14\x54\x7c\x6f\xd3\x52\xa5\x4b\x00\xae\xe3\x9b\x9b\x4b\x6d\x93\x81\xb7\x3d\xa5\xd4\x4f\x6c\xeb\x7f\xe3\x5c\x9b\xf4\xbb\x95\x08\x10\x32\x16\x9b\xdc\xbb\xc1\x81\x6f\x5c\x6c\xe3\x50\x8a\x01\xc6\x26\xe5\x0a\x1f\x7b\xba\xee\x01\x03\x5f\x34\x51\x05\xb4\xc1\xb4\x57\x09\x71\x39\x9f\xdb\x5e\xd8\x4a\x3d\xec\x82\x84\xa7\xce\x6e\x3c\x77\x17\xec\x12\x63\x3f\x08\xc7\x77\x4f\x03\x48\xfd\xee\x67\x4a\xdf\x05\x29\x03\xd8\x7a\x33\x77\xed\xeb\x17\xc9\xab\x05\xe2\x04\x84\x3e\xb6\x7d\xa1\xe0\xed\xd3\xbd\x03\x84\x97\xb7\xe9\xf9\x2d\xa8\x6b\x20\xad\x8c\x5b\xdb\x9a\x17\x0e\x16\x9b\x0e\x75\x9e\x0a\x7b\xd4\xbe\x3d\x96\xf6\xc1\xf4\xb6\x0d\x71\x08\xad\x00\x34\x1f\xad\xbf\x4e\xc8\x64\x89\x16\xbe\xe3\xbb\x87\x80\x76\xf8\xb4\x0e\xfb\xce\xa1\x02\xaa\xeb\x1c\x22\xab\x1e\xed\xa8\x76\xb8\xb5\xd8\xcb\xe1\xeb\x3a\x96\x5e\x21\xb6\x1f\xe2\xc6\xb1\xf4\x44\x5f\x3d\xaa\x3e\xae\x7a\xf3\xa1\x1a\x13\x1b\xb4\xe8\xa8\x47\xdd\xf3\xd8\xfb\x61\x21\x12\x71\x15\x27\xd3\x35\xec\x22\xf1\x91\x62\xaa\xe2\x58\x80\xe2\xae\x1e\x85\xbf\xd5\x5d\xfb\x0a\xe2\xdb\x29\x8c\x34\x68\x64\xa7\x70\x07\x61\xeb\xab\xcd\x13\x87\x8f\xea\x38\xfe\xcf\xac\xea\xd7\x20\x4d\x29\x76\xa7\x30\x7b\x29\x7f\xa7\xaa\x56\x4f\xbf\x38\x4f\xd5\x3d\x2a\xcc\x5e\x6f\x3b\x30\xae\x55\x17\xc0\x2e\xc4\x57\x3d\x4a\x78\xf7\x66\xc7\xff\x61\xdf\x39\x58\xc7\x59\xd5\x5e\xd5\x34\x0b\x84\xa1\x2a\x4e\x15\x62\xb6\x3e\xb0\xda\x9c\xc2\x3c\xb3\x09\xc4\x5d\xc5\x21\xa0\x89\xa9\x8a\xc3\xa6\x73\x0a\x27\x8c\xf5\xe7\x58\xe6\xc7\x26\x38\xc4\xb4\x63\x2b\x88\xac\x7a\x54\x2d\x2e\x73\x41\x35\x3c\xb6\xc8\xa1\xfc\x15\xca\x77\x17\xb5\x70\x28\x91\x07\x8a\xd2\x01\x6b\x7b\x58\x88\x8e\xed\x72\xf6\xa9\x8a\xf5\x9e\x82\xda\xf5\xad\x61\xcf\x96\x7a\x54\x60\x3a\xd6\x0c\xab\xd0\x81\x72\x77\x60\x1c\x9e\x53\x02\x2c\x0c\x3f\x8a\xfb\xe1\xb1\x16\xcb\xf5\xa8\x7b\x8c\xf6\xb9\xbc\xbc\xf0\xab\x4e\xf9\x1d\xab\xbe\xa0\x1e\xb2\x28\x9d\x0b\x9d\x8b\x15\xe9\x60\x0e\x87\x08\x79\x30\x96\x43\xed\x3b\xc4\xc6\x53\xec\xa2\x00\x82\xd9\x91\x2f\x31\xf0\xc2\x36\xbb\xea\xbb\x5c\x71\x2a\xd0\xad\x1f\x75\xcf\x7b\x4a\x85\xc5\x47\xdd\xaf\x6a\x32\xec\xa8\xcb\x46\x7c\xf9\x90\x2e\xb6\x70\xfb\x17\x29\x90\x15\x7e\xbb\x2e\x24\xce\xe3\xfe\x37\x77\x97\xef\x59\x44\xd7\xa3\x47\x4b\xa2\xef\x3d\x8c\x40\x97\xe5\x57\x74\x57\xdc\x01\x93\x19\xeb\xb8\x94\xb0\xaa\xe2\x29\xa2\x2b\x44\x7a\x3d\xea\x4e\xc0\xc7\x94\xb3\x3b\x0a\x15\xbc\x2a\x82\x40\xa5\x8a\x6f\xcd\x92\x8e\xaa\xca\xf9\xc6\xfc\xc2\x3c\xbb\xac\xae\x37\x7c\x23\x6b\xec\xe5\xd1\xb9\x44\xbf\x8b\x5d\x88\xdf\x8a\x5b\x48\x93\xd4\xaf\xab\x66\xdb\x25\x00\x5e\x4c\xe0\xf2\x4c\x8b\xfd\x8a\x5b\x71\xcc\x0c\x3c\xd7\x6e\xbd\x76\xe5\x25\xc4\x5d\xb5\xc7\x2e\xb1\xae\x6a\xd8\x57\xfd\xda\x2b\x7a\xe3\xaa\x06\x71\xd5\x2c\x11\xdd\x15\x97\x70\x77\x0b\x69\x8f\x70\x77\x09\x74\x17\x63\xb9\x2c\xb9\x97\xe9\xe5\x52\x9b\x2e\xf3\xcc\xa5\x36\x5d\x7e\xdf\x4b\x4c\xbb\x84\xb2\x4b\x4c\x13\xef\xf5\xa8\xa7\x8c\x1e\xfb\xe9\x5d\x6f\x4d\x5e\xca\xd3\x25\xb2\x89\xfd\x7a\xf4\xa0\xde\x50\xb8\xdf\x6a\x6e\x11\xd0\xae\xfd\x78\x89\x66\x77\xeb\xf9\xae\x68\x6f\xdf\x62\x87\x5e\x06\x9b\xbb\xcd\x08\x8f\xf2\xb5\x37\xaf\xdd\x7a\xb7\x55\x47\xb5\xba\xf6\x69\x61\xc8\x89\x21\x7b\xb4\xae\xb5\xf3\xf4\x30\xed\x5c\x5e\x9c\x42\xec\xab\xda\xd8\x17\x5e\xe6\x65\x98\xb9\x8c\x37\x97\x57\xf8\x62\x5c\x17\x43\xbb\x18\xd7\xe5\xb9\xb9\x8c\x2e\x97\x79\xe6\x12\xc4\xae\x1a\x87\xf7\x14\x32\xb1\xf9\xc2\xd6\x2e\x0f\xb1\x98\xb3\xd7\x3e\x5c\xbf\xa7\x30\xa5\x82\xa5\xbe\xd8\x9a\x58\xb4\xb8\x55\x9d\x01\x43\xbb\x76\xa5\x08\xb3\x77\x7d\x50\xf7\x5b\xb1\xfc\xc4\x17\x33\xbc\xfc\x3d\x85\xfe\x78\x0b\x89\xd9\x2e\xbe\xd0\x10\xd5\xad\x09\xc0\x62\x59\xd5\x7d\xee\x95\x34\xdd\xaa\x6f\xf7\xc0\xd8\xd3\x52\x55\x8b\x54\x46\x6f\x10\x43\xdb\x54\x5b\x61\x6d\xc8\xb8\x03\x7d\x2d\x6f\x57\x3e\xda\xb4\x74\xb5\x1e\xa0\xe7\x7a\xdb\xdb\x7d\x8f\xbe\xbf\x86\x67\xc7\x28\xfa\xce\xa8\xb1\xd4\x77\xef\xae\x7b\xd5\x7a\xf7\xd7\x09\x1b\xd5\xef\x8e\xa5\x1a\x31\x94\xd9\x71\x0a\x33\xd5\xef\x5e\xed\xdb\xb3\x55\xb1\xf8\x74\x78\xbd\xef\xaf\x8f\xb7\x3e\xaa\x1e\x0c\xec\xc0\x50\x0f\x3e\x54\xc1\x79\xdc\x36\x5b\xf8\xa2\xc2\xba\x7f\xdc\x33\x45\x5f\x3d\x3a\xb5\x78\x83\x6f\x8c\xad\xfd\xba\x07\x0a\x60\xe8\x43\x42\xa7\x4f\x6f\x4e\xb5\xea\x13\x7e\x6d\xfa\xf5\x14\xaf\x9f\x90\xf3\x72\x27\x5a\xd7\x2a\x2e\xc3\xa9\x9d\x2a\x8e\x4f\x5f\xf1\xf8\x66\xb6\x69\x76\x9e\xf2\x94\xe0\xbf\x52\x5d\xe4\x54\xbd\xe6\xd1\x42\x40\x84\x71\x6b\xdc\x56\xdf\xb2\x02\x86\x6b\x38\xac\xa3\xc0\xdc\xfd\x15\x1e\x64\xc1\xb2\x2f\xa3\xba\x7c\xf5\x32\xf2\x6f\x57\x66\x5b\xbb\xae\x45\x82\x1a\xc9\xa5\x27\xeb\x68\xd7\x93\x65\xb4\x97\x9e\x14\x72\xed\xba\xd5\xfe\x9e\xda\x66\x7f\x5b\x09\x6f\xff\x3e\x5a\x11\x6c\xae\xc7\x54\xa9\xee\xdd\xff\xf6\x66\xb6\x0d\x4f\x71\x1b\x87\x6d\x24\xb7\x2f\x3d\x46\x72\x7f\x71\x16\x1b\xda\xd1\x85\x8a\x07\x62\x1e\x38\x56\xcb\xb1\x8a\x8e\xaf\x3e\x46\xfe\xf8\xea\xe3\xeb\x0a\x78\xa4\x72\x2d\x38\x1c\x56\xc5\x2e\x17\x4c\x59\x45\x6d\xb6\xd3\xff\x05\x20\xff\x7e\xc9\x2f\xf9\x25\xbf\xe4\x97\xfc\x92\x5f\xf2\x4b\xfe\xb9\x24\x46\x55\x68\xe7\xac\xd9\x74\x33\x79\xb1\x91\xc0\x4c\x5b\x56\x6e\x19\xb0\x00\x05\x76\x16\x6b\xc5\x06\xdc\xb3\xaa\x76\x6e\xc1\xa4\x82\xfb\x6c\x6a\x91\x34\x25\x6b\x9a\xec\x2b\x3a\xc0\x20\xaf\x8f\x26\x83\x8a\xfc\x3d\x64\x42\x0c\xd2\xf6\xf8\x56\x71\x04\x63\xd4\x64\x23\x35\x15\x95\x9b\xac\xc1\x36\x7b\x01\xe6\xa2\x6a\xb7\xca\x5b\x6a\x55\x02\x48\xed\x86\x26\x5b\x8e\xa4\x38\xc4\xf8\x8f\x26\xb3\xad\xdd\xaa\x17\x03\xce\x52\x06\x5b\x97\x33\xdd\x3b\xd8\x4d\x00\x2b\x5d\xae\x58\x97\xfb\xf5\x2d\x61\x34\xb4\xeb\x61\x8f\xaa\x58\xab\xf2\x64\xae\xfb\x59\x29\xd7\xad\x83\x1b\x13\x3d\x3d\xba\xac\xbe\xbe\x0b\xc8\x12\x94\x9e\x0c\xcb\x21\x6f\x72\xa8\xed\x34\x64\x24\x8f\xdc\xdd\x1b\x26\x0a\x3a\xb0\x00\xf8\x5a\xc1\xf0\xa9\xcd\x08\xb6\x4f\x7e\xde\x38\x55\x3f\xe5\x14\x34\x1e\x24\x7f\x90\x5e\x32\xc9\x02\x48\xd3\xbd\x55\x8f\xb4\x17\xe0\x1a\xea\xaf\x80\x48\x02\xb0\x6f\x00\x20\x08\xd9\x81\xaa\x09\xbe\x5f\x77\xad\xde\x9b\x24\xff\x28\x78\x38\xb9\xb3\xd5\xb7\x04\xa8\x9a\x51\xb0\x50\xa3\xa0\xa0\xd0\x82\x52\x52\x7c\x69\x57\x6d\x73\x80\x4d\xea\x26\xa6\x6c\xe3\x24\x91\xa7\xac\xc4\xac\x3a\x2f\xf2\x80\xf3\x7c\x21\x7e\x40\xdb\x80\x74\x19\x05\xc5\x02\xca\xe4\x5b\xd3\x64\x82\x2f\xa9\x62\x47\xe0\x09\x64\xd8\xaf\xaa\x22\x54\x75\x8f\x7b\x55\x50\x57\x6d\x41\x7e\xed\xea\x05\xa8\x01\x80\x40\x55\xad\xf5\xf4\xd5\x55\x10\x66\xcb\x3a\x5c\xc0\x2b\x97\xac\x3e\x4e\xc3\xc1\x51\x38\xd4\x29\x18\x5c\x7b\xab\xc0\xdd\x38\xdd\x06\xb7\xd7\xe0\x48\x1a\x4b\x6e\xdc\xaa\x95\xbf\x0a\x52\x21\xea\xfd\x85\x43\x90\xef\x7a\x14\x4e\x40\xe1\x0a\xc8\xe0\x97\xa5\x2d\xd7\x90\xfb\x63\x6c\x75\x7d\x77\xd5\xe0\x8d\x2f\x95\xc9\xed\xaf\x40\x64\x36\x18\x88\xbd\x65\x4b\xef\xca\xbd\x86\x13\x20\x8f\xed\x80\x41\x61\xa7\x1e\x07\xe6\xc1\x01\x5d\x74\xa0\x0b\x1c\x19\x93\x07\x7e\xc0\x81\x28\x70\x86\x5c\xe4\x51\xed\xf2\x4d\xed\xd0\x23\x4f\x91\x85\x77\x1c\xf0\x5b\x67\x55\x8e\xec\xae\xfc\xd4\xaa\x8e\x3b\x60\xd1\x3b\x07\x64\x0c\x57\xa5\x56\x55\x18\xaf\xef\x3d\xb7\x2a\x2e\x5d\xbb\x63\xc8\xfe\x2c\x5a\xf9\x8e\x32\xf9\x00\x76\xdf\xdc\xcb\x3d\x72\x0d\xab\x06\xdb\xa8\x9c\xc2\x77\x8f\x0c\xda\x2b\xd3\x9d\xa5\xe9\x2d\xf6\xca\x1a\xac\xaa\xce\xf2\x05\xe5\xe7\x81\xc2\xbc\xb2\xde\xaf\x9c\xf5\x0b\x32\xef\x9e\x6f\x66\x9e\x2c\xba\x55\x55\x45\x65\x59\xc9\xbc\xe1\xd6\x61\x23\x08\x00\xe2\xaf\x27\x21\xdb\xa9\x60\x91\xd5\x16\xf5\xec\x5b\xc9\x01\xc0\x3a\xc0\x55\x47\x6f\xa3\xee\x2f\x6a\xff\x0e\x59\x35\xdf\x16\x39\x34\x95\x59\x92\x55\x23\x3a\xb4\x57\xbe\x88\xec\x8a\xac\x6f\xaf\xa8\x7c\x31\xfb\xa2\x8c\x05\x9c\x0c\xae\xb4\x31\x2a\x96\x3c\x2a\x2e\x5b\xf4\xf4\xf6\x1e\x31\x98\x82\xb5\x42\x96\x86\xaa\x96\x01\xa6\x30\x82\x03\x3d\xb8\x63\x82\xf5\x07\xc4\xde\xa3\x42\xdd\xa6\xde\x46\xd5\x40\xd1\xdb\x18\xa8\xe0\xa2\xaa\x5b\x21\xf0\x43\x94\x3a\x08\xa7\x00\xa5\x14\x93\x6f\x60\xca\x59\x51\x2a\xed\x3d\x55\x41\x1a\x82\x22\x96\x60\x06\xee\xf8\x56\x35\x8c\xb8\x65\x05\xe7\xac\xf7\x2d\x4b\xc5\xf8\x58\x6f\xae\x97\x10\xc1\x47\xb9\x2f\x39\xa7\xda\xa9\x96\x72\x1a\xf6\x47\xb9\xba\x8c\xc0\x56\xf5\x60\xb3\xc3\x6e\x7e\x11\xd8\x12\xaf\xa5\xa8\x3b\xb9\x7b\x44\xc7\xc3\x90\x88\x2d\xb3\x67\xf3\x8b\x6c\xc1\x2d\x3b\x55\x2e\x53\x21\x65\xcb\xe3\xd9\x7c\x27\x9b\xbd\x75\xcf\xaa\x59\xc8\x09\x25\xdc\x65\x0b\x26\xd9\x02\x4e\xb6\xe8\x54\xa0\xae\xaf\x9f\xee\x3f\xe5\x8c\xab\x1a\x52\xe5\x74\xd3\xe2\xfd\x6b\xec\x77\xa7\x5f\x67\x0f\x85\xe5\xf0\xae\x51\x7d\x93\x01\xb3\x59\x39\x37\xbb\xe4\x66\x85\xdc\xac\xfc\x55\xbf\x7a\x73\xf2\xc2\x3f\x08\x88\x08\x21\x8f\x7f\xc5\x5d\x7a\xf2\xf5\xcd\x94\xf7\xa5\x6a\x43\x94\x6f\xc3\xf5\xe0\x99\x88\xa2\x5a\xc2\x5f\x3d\xc5\x85\x2d\x9f\xfb\xbd\xc7\x4a\x28\xfb\x78\xab\x9e\xb3\x6b\x8f\xb2\x35\xb3\xe7\xb2\x86\xcb\x16\xba\x9b\xed\x58\x25\xb2\x6b\xe5\x5c\xee\xef\xab\xee\xac\xac\xd9\xb7\x54\xd9\xef\xea\x34\xf8\x5a\xc4\xca\x3e\xb5\xff\x26\x79\x9c\x77\x9c\xca\xc9\x3f\x73\x8d\x8f\xaa\x1f\x67\xae\x7c\x64\x3e\xb2\x3e\x7c\x4c\xbc\xd7\x67\x3e\xce\xab\x52\xfa\xa3\xe7\xb3\x80\x91\x2d\xc0\x64\xff\x7c\x29\xea\x97\xfc\x92\x5f\xf2\x4b\x7e\xc9\x2f\xf9\x25\xbf\xe4\x97\xfc\x92\x5f\xf2\x4b\x7e\xc9\x2f\xf9\x25\xbf\xe4\x97\xfc\x92\x5f\xf2\x4b\x7e\xc9\x2f\xf9\x25\xbf\xe4\x97\xfc\x92\x5f\xf2\x4b\x7e\xc9\x2f\xf9\x25\xbf\xe4\x97\xfc\x92\x5f\xf2\x4b\x7e\xc9\x2f\xf9\x25\xff\x8a\xe4\xbf\x1f\xad\xa8\x48\x91\x7a\x45\x0a\x12\x9d\x99\xef\xaf\xf9\xfe\x9a\xef\xaf\xf3\xbd\x6f\xbe\xf7\xcd\xf7\xbe\x19\xff\x69\x7c\x63\x1f\xe7\x3d\x91\xbb\x7d\xd4\x5a\x3a\x52\xdc\x7f\x13\x37\x7e\x13\x37\x7e\x13\x37\x7e\x13\x37\x7e\x13\x37\x7e\x13\x37\x7e\x13\x37\x7e\x13\x37\xfe\xc7\x12\x37\x7e\xc9\x2f\xf9\x25\xff\x3f\x93\xff\xed\xf3\x7f\xfc\xef\xff\x67\x1b\x7d\xfc\x2f\xff\xeb\x3f\xbd\x2f\xbf\xe4\x5f\x96\xec\x71\x3e\x8f\x8b\x3f\x59\x75\x8f\xfb\x79\x9c\xa3\xef\xf9\xd9\xd1\x3f\x3b\xda\x67\xcd\x27\x2d\xdd\xd6\x3e\xb7\xfd\xd7\xc1\x8f\x9e\xbe\xd8\xd7\xfa\xf4\xfb\xef\x0e\x98\xd4\xcf\xfa\xf4\xdd\x3e\x7d\xdd\x4f\xdf\xf9\xf4\xe7\xf1\xe9\x4f\x6d\x7f\x5a\xc2\x3f\xbf\x7f\xbf\xe4\x97\xfc\x92\x5f\xf2\x4b\x7e\xc9\x3f\x85\xdc\x36\x3e\xb7\x3d\x11\x61\x7e\x6e\x5b\x9f\x1b\xe7\xe7\x0f\x3f\x17\xbd\x7d\x6e\xdc\x9f\x7f\xfc\x3f\x4b\x04\x37\xdb\xe7\x66\xff\xdc\x1c\x9f\x9b\xf1\xb9\xbb\x7d\x6e\x1f\x9f\xbb\xc7\xe7\xae\xf7\xff\xd7\xf6\xfe\x9e\x9f\xbb\xf3\x5f\xe0\xc3\xff\x5b\xa4\xb7\xb1\x1e\xd9\x8f\x9c\x47\xee\xa7\xb7\x68\x8f\xf4\x47\xc6\x23\xf1\x48\x3e\x32\x1f\x79\x4f\xc4\xbb\xf9\x67\xf0\xfe\x7d\x48\xef\x6d\x3d\xb2\x1f\x39\x8f\xdc\x4f\xef\xbd\x3d\xd2\x1f\x19\x8f\xc4\x47\xc1\xe1\xde\xfb\x7c\xe4\x3d\xd1\xdf\xcd\xfd\xdf\xee\x7b\x7f\xc9\x7f\x6d\x59\xdc\xf3\x19\xfb\x0b\xb8\x31\xee\x77\x1b\x47\x5b\xdf\x8b\xaa\x79\xfb\xfd\x47\xf0\xb2\x7c\xe2\xe7\x40\x89\x79\x3e\x63\xfc\x7f\x8f\xd6\x31\xde\x0f\x6d\xae\x8f\x8f\xb2\x10\x2a\x9d\xab\x38\xfd\x51\xb5\x5d\x2d\x59\x15\x24\x3f\x55\xd7\xf1\x7e\x06\xd3\xe9\xfd\x8c\xf9\x6f\x77\x14\xfd\xbf\x9e\xba\xf8\xf4\x3b\x3e\xfd\x3e\xb5\x2e\x3f\x63\x9e\x4f\xae\xfe\x19\x73\x7d\xc6\x6a\x9f\x7e\xf7\xa7\x5f\x2e\x96\xcf\x58\xf9\x19\xeb\x7c\xca\x15\xb3\x3e\x83\xdb\x4f\xa9\xba\xcf\x68\xdc\x84\x9f\xc1\xc1\xf1\x96\x03\x27\xc6\x77\x2a\xce\xfb\x07\xa8\xdd\xcf\xe0\xe1\xe2\xf3\xfb\x8c\x96\x9f\xd1\xf6\x67\xb4\xf5\x51\x29\xa3\xb1\xfb\x7f\xe2\xbd\x48\x39\x7e\x85\xdb\x3f\x2a\x76\x28\xb1\xac\x64\xee\x27\x14\x58\x7d\xcf\xdf\x4f\xf9\xfa\xde\x9a\xe2\xf9\xfb\xb0\x09\x2b\x74\xc8\xd7\xf7\x51\x0d\x4b\x35\x3c\xf5\xe6\x3e\x2c\xcd\xaa\x4a\xa9\xe4\xf4\x89\xf9\x9e\x3b\x1f\x1e\x95\xf1\xde\xa3\x3a\xce\x87\x85\x5f\x7d\x14\xd5\x4e\x3e\x3c\x0d\xab\x7d\x72\xf7\x0f\x08\xe7\x1d\x1f\x85\xbe\x79\x01\x59\x82\x3f\x4f\xa7\x06\xfc\x7e\x54\xa6\xf8\x2f\xad\xd2\xf7\x19\x23\x3f\x63\xbc\x5d\xc0\x3d\xf6\xc9\x37\xd6\x73\x7f\x06\x97\xe3\x5b\x95\xef\x3a\x3e\xe5\xea\xba\x9f\xf1\x56\xec\xda\x9f\xb1\xfb\x67\x44\x7c\x46\xb9\x08\x3f\x23\xde\x30\xc7\x67\xec\xfb\x19\x7b\x7e\xc6\xe9\x9f\xd9\x38\x84\x3e\xe3\xec\x9f\xb9\xb8\x9f\x71\xdf\x43\xfb\x33\x62\x7d\xc6\x5b\xf6\xf1\x26\x3d\x7f\xf6\xef\xfd\x70\xa1\x5d\x75\xeb\x3f\x2a\x57\xa8\x9b\xae\xa6\xf7\x27\xd4\xd0\x55\xb9\xf7\x33\xf2\xed\x9d\xb7\xc7\xb8\x0f\x3f\x23\xdf\xc0\xbd\xc1\x57\x85\xf4\xa3\x2e\xbc\xb2\x72\x0a\x20\x7e\x42\x89\xbc\xfb\x51\xc3\x7d\x2a\x7e\xf5\x89\x39\x3f\x63\x72\x21\x7e\x38\xb4\x14\x38\x9a\x9f\xac\xe2\x34\x1f\xce\x9d\x2a\xc9\xf3\x81\xd3\xbd\xc7\x27\xf7\xfa\x40\xd3\x56\xf0\x23\x3e\x63\xbe\xff\xe6\xa7\x4a\xb2\x9c\x0f\x17\xc2\xf9\x55\xe4\x7f\xc9\x2f\xf9\x25\xbf\xe4\x97\xfc\x92\xff\x61\xd2\xef\xd3\xf5\xbb\xa2\x23\x5d\x01\x92\x7e\xef\xd1\x72\x9e\xa8\x29\xc6\xa9\x35\x62\x63\x23\x07\x56\xbc\x59\xeb\x04\x4a\xd1\x62\xe2\x61\x9a\xc8\xa5\x26\x0a\x45\x49\x92\x47\x3d\x25\x2a\x4c\xe4\x4c\x6b\x89\x4e\x6f\x58\x0d\x7d\x72\x65\x13\x87\xd6\xb6\xfb\x8f\x77\x1e\xef\xac\x08\xb7\x27\xd8\xb6\xa7\xc4\x8e\xf6\x54\xd4\x47\x5d\x93\x2d\xfb\x13\x6c\x5a\x9f\xe8\x42\xf7\xfb\xc5\x7e\x8a\x6e\xd1\x71\xe3\x4f\x8c\x1c\xf1\xb9\x95\x30\x5c\x52\x2d\xf9\xb4\x91\x50\x15\x38\x19\x6d\xf8\x8a\xa7\xee\x0c\xe5\x4f\xfe\x8a\xa9\x5b\x7f\x45\xd6\xf9\x46\x02\x5d\x23\xa1\x35\xe2\x55\x7b\xc2\xd4\xa3\xd5\xe2\x4e\x5f\x5d\x62\x38\x55\xa7\x45\xc5\xe9\x6d\x77\x6e\xf7\x88\xb8\xab\x68\x3d\xc2\xa1\xd2\x29\x8f\xbe\xef\x25\x91\xb7\x21\xd6\xee\x09\x7c\x83\x97\x7f\xb4\x28\x91\xbe\x2d\xf4\xfc\x15\xe9\x27\x86\x30\x8c\x52\xe8\x3f\x7d\xae\x91\xb6\x5b\x3c\x01\xb4\x3d\xe1\x6f\xb4\x30\x7a\x21\xf6\x2f\xf4\x5c\x79\xb3\x16\xfa\x1c\x62\xff\x44\xa3\x35\x12\xb8\x42\x2c\x8f\x7a\x76\xf5\xbf\xe2\x09\x97\xbf\x2e\x7f\x5d\xe7\xaf\x68\xc3\xdd\xff\xc4\x19\x86\xef\x0d\xdf\xfb\x8d\x3f\x3c\xda\x7d\x6f\x36\xb1\x88\x66\x24\xcd\x48\x9a\x91\xac\x78\x48\xf3\x92\x15\x9d\x68\xa5\x65\x77\xa7\x99\xca\x51\x71\x8c\xf9\x13\x39\xd9\x72\xd4\x5f\xcf\x9f\xf8\xc6\x0c\x77\xfa\x76\x91\x81\x2d\xd3\x5f\x7d\x63\xea\x7f\xea\x7f\xee\xa2\xfb\x4f\x24\x64\x1e\xf7\x98\x9d\xb4\x3e\xd3\xba\x4a\xf3\x92\x56\x57\x5a\x57\x69\x8e\xd2\xec\x88\xd9\x6b\xd3\xae\x99\xbe\x6b\x9a\xa3\xd9\xfe\x16\x5d\xd9\x2b\xea\x52\x8b\xd5\x35\xf5\x79\x9a\xaf\xa9\xcf\xd3\x3e\xfa\xc6\x67\x9a\xa3\x8a\xc3\x9c\xe6\xe8\x1b\x9f\x69\x76\xa6\xd9\x99\xf6\xd7\x34\x3b\xd3\xec\x4c\xfb\x62\xda\x6b\x73\x79\xca\x5c\x4c\x5f\x3a\xcd\xc5\xac\x98\x4f\x33\x32\xcd\xc8\xb4\x02\xc5\x07\xfe\xc4\x7f\xda\x41\xd3\x5e\x5e\xbe\x62\x99\xa3\x65\x8e\x96\x6f\x59\x76\xe8\x32\x23\xcb\xda\x5b\x15\x29\x3a\x2a\x76\x74\xff\x89\x20\x5d\xbe\x71\xd9\x41\xcb\x0e\x5a\x51\xed\xde\x9c\xfe\x9a\xde\x6f\x67\x89\x4c\x53\x1a\x67\x28\x8d\x33\xda\x5a\xae\x57\x5d\x7b\xca\x4a\x5b\xbe\x6e\xf9\x3a\xd1\x74\x6d\x99\x35\x31\x9f\x6d\xd9\x53\xeb\x7a\xb3\xef\xaa\x28\xd6\x6d\x37\x6d\xaa\xb2\xf8\xb7\x26\xfe\xb0\x6d\xb3\xb6\xcd\x97\xa8\xbc\xb6\xad\xc6\x6d\xd6\xb6\x15\xb8\x7d\xdd\xf6\x45\xe2\xe5\xda\xf6\x15\x22\xe5\xda\xb6\xcb\xb6\x19\xdc\xce\x84\x6d\xed\x6d\x33\xb8\x7d\xd7\x36\x62\x7b\x16\xd5\x6e\x06\xb7\xb9\xdb\xd6\xe7\xf6\xbd\xdb\xf7\x6e\x3b\x6b\xfb\xd2\xed\x4b\xb7\x55\xba\xad\xd2\x6d\x06\x45\x54\xb6\x6d\xad\x6e\x5f\x2d\x46\xb4\x6d\x5f\xbd\xcd\xe6\xb1\xef\xbe\x11\xbc\x4e\xf2\xe3\xbb\x8e\xef\x3a\x66\xf0\x98\xc1\x63\x35\x7e\xa3\x7c\xcd\xd4\xb1\xba\xc4\xcd\xb6\x63\xd7\x8b\x9e\x6d\xc7\x8a\x3a\x7e\xb1\xe2\x81\x8f\x53\xeb\xd8\x17\xd7\xca\xb9\xce\xc0\xeb\xab\xaf\xf7\x7f\x63\x86\xad\x90\x6b\x24\xaf\xdf\x12\xf7\xd8\xae\x95\x7f\xb3\x5a\xdc\x63\xf4\xae\x11\xbb\xd6\xfc\xd5\x9f\x6b\x94\xee\xf6\x4e\x3d\xb9\xd6\xc0\x35\x3e\xd7\xc8\xdc\x8a\x52\xb6\x67\xef\xeb\x5b\x6f\xac\x13\xad\xec\x14\x22\x96\x2b\xde\x18\x5f\x63\x41\x1e\x2c\xc5\xa3\xb7\x74\x4f\xd6\xf5\x7c\x74\xba\x5e\xda\x97\x96\xed\x9d\xef\x77\x7b\x3b\xde\x7c\xdc\x23\xc2\xb9\x1d\x7f\x7d\xe3\xd3\xf1\xb8\xde\xae\x48\xc8\x37\x17\x8c\xb4\x83\x95\x76\x30\xd3\x8e\xde\x59\x3c\xfa\xd0\xf2\xce\xb7\xde\xd9\xe7\xba\xfe\xf4\x60\x5f\xd1\x2b\x11\xb9\x1d\x4f\xec\x3d\xbd\xf3\x8d\xd8\x9f\xe8\x6b\xd7\xef\xf4\xfe\x89\xc4\x16\x3b\xdd\x97\x96\xa5\x65\x7b\x6a\xfb\x95\xed\xfe\x5d\xed\xee\x3c\xfd\x4f\xfc\x76\xd7\xff\x7e\xf5\xe4\xfa\xdd\xeb\xfe\x37\xcb\x9d\xc9\xa9\xb3\x1d\x75\xf1\xb7\x3f\xf1\xde\xbe\x8b\x1d\xa7\xe3\xb3\x1d\x6f\xed\x4c\x2c\x1d\x87\xed\xcc\x2c\x1d\x87\xed\x4c\x27\x1d\x87\xed\x23\xaa\xfd\xfe\x2d\x6e\xdc\x1b\x66\x5d\x6b\xaf\x12\x8f\x66\x81\xf9\xa5\x8b\x3a\xee\xb8\x6d\x1f\xbe\x88\xe9\xab\xe3\xb9\x9d\xd9\xa5\x0f\x33\x82\xdb\x76\xb6\x97\x3e\xae\x37\xfb\x2e\x96\x98\x8e\xff\xf6\x71\xdf\x3d\xe1\xeb\xf0\xdc\x1e\xec\x5b\x38\x6f\x0f\x6b\x26\x46\xd1\xf7\x14\x3e\xdb\x99\x2d\x3b\x0e\xdb\x23\xb5\xa4\x16\x33\x82\x9f\xfe\xc4\xbd\x2f\xed\x66\x21\xf4\x10\x7f\xec\x51\xb1\xf1\x46\xbb\x62\xe3\x43\x7f\x52\x4f\xb2\x89\x96\xd7\x13\x1c\xb3\x27\x6b\x59\x76\x2d\x7a\xf2\x8d\xa5\x37\xb6\x78\x62\xc7\x13\x7b\x1a\x67\x9c\xb1\xa7\xde\x66\xb2\xd4\xe9\x6d\xce\xa2\x9e\x32\xc2\x0c\x8f\x1d\xaf\x14\x99\x3f\xba\x98\xed\x2e\xd2\xbe\xa7\xb1\xc5\x37\x7b\x1a\xb7\x69\xf6\xa7\x3e\xe0\x6b\x7d\xfa\x95\x69\x95\xe2\x6b\x1d\x47\xeb\xd3\x6c\xce\xa9\x7d\x56\x8b\x3b\xb7\x76\xef\xc7\xb9\xfa\xb4\x0e\xf1\xa9\x3e\xcd\xc8\xb2\x77\x96\xf5\x26\xa2\xbb\xaf\xc7\x73\x3b\x3e\xd5\xf1\xa9\xbe\xec\xa6\x55\x79\x04\xf6\xd4\x32\x02\xcb\x1a\xc3\x89\xfa\xd2\x37\xdc\xa7\xe3\x3e\x7d\x19\x87\x65\xbe\x96\xbe\x89\x97\xfe\xc9\x44\x58\x5a\xac\xb7\x65\x1c\x96\xde\x56\x6e\xc2\x32\x8f\xe2\xba\xfb\x32\x32\x4b\xcf\x97\xf5\xb6\xac\xb4\x65\x4e\xf1\xa3\xbe\xcc\xec\xf6\x2d\xb8\x4f\x17\xe7\xdf\x71\x9f\xbe\xcd\x9d\x48\xec\x2e\x52\xbd\xe3\x2c\x1d\x07\xe9\xdb\x88\x6d\x33\x55\x39\x11\x55\xee\x14\x1f\xe9\x78\x47\xdf\xf6\xf8\x36\x6b\xdb\x78\xee\xca\xa1\xd0\x4f\xbc\xa3\xe3\x08\xfd\x3c\x0e\xd8\xf1\x85\x7e\x7a\x5d\xb3\xc1\x5a\x51\xc7\xe8\xe1\x11\xfd\xd8\xb9\xb8\x43\x17\x0d\xde\x8f\xb5\x74\x8c\xe4\xd1\xcf\x63\x24\x8f\x3d\x7b\xf4\xf6\x98\xeb\x53\x76\x5d\x3d\x3f\xe6\xfa\xe8\x33\xce\xd2\x65\x2e\xf4\x73\x2a\xbf\xa3\xfd\x64\x79\xf4\x63\xe5\x5f\xfd\xbc\xfa\x79\xad\xff\xdb\xaa\x7d\xa3\xef\xb7\xae\x79\xbf\xd6\x1e\x2e\xd3\xaf\x1e\x5e\x63\x78\xf5\x41\xa9\xb9\x7e\xad\x73\x7c\xa4\x5f\x23\x76\xcd\xec\x5d\x9e\xb2\xda\xaf\x71\x93\x09\xd2\xaf\x59\xbe\x56\xe3\x75\xaa\xe0\x32\xfd\x3a\xe7\x9f\xf6\x34\x3a\x2e\xf3\x94\x9c\x47\x1f\x6f\x1d\xf4\xa3\xa7\x12\xa0\xda\x99\x8e\xdb\xdb\x17\x4f\x64\x47\x07\xea\xd9\x70\x67\x6a\x5f\xee\x51\x2a\x8f\xde\xf4\x04\x97\x47\xb7\xbf\xca\x79\x69\xb2\x57\x64\x25\x0c\x3c\x68\xe0\x41\x03\x0f\x7a\xac\x1d\x75\xe7\xf1\x1e\x59\x30\x78\xd0\x68\xd7\x5f\xab\xcf\x32\x62\xfa\x93\x88\x1e\x5b\x42\x59\xd0\xdf\x4a\x78\xec\x04\x75\xcf\x3b\x67\x86\xbc\x83\x81\x37\xbd\x83\x15\x7d\xef\xc4\xa7\x86\xfc\x91\x81\x07\xbd\x43\xe1\xd1\xe9\x6d\xd3\xfd\x6f\xf6\xdf\xa6\x42\xfd\x75\x7b\xca\x17\xe1\x47\x03\x3f\x1a\xf2\x1a\xc4\xed\x3f\xaa\xfd\x54\xbb\x5f\x3c\xde\xef\x5b\xe8\x7a\xa3\xd7\x57\x3c\x7e\x34\xf0\xa0\x41\xbf\x1b\xe5\x45\xe0\x4f\x78\x7f\x7e\x74\x68\x37\x2f\xfc\x0b\x03\x6f\x1a\xb8\xcf\xc0\x7d\x06\x5b\xfc\xc0\x7d\x06\x93\xfa\x18\x32\x8c\x68\x7c\x83\xc6\x37\x68\x7c\x03\x6f\x1a\x9c\x03\x03\x87\x1a\x4c\xdf\x83\x7b\x66\x70\x12\x0c\x9a\xe0\xe0\x80\x19\x38\xd1\xe0\x94\x19\xbc\x30\x03\x0f\x1a\xf8\xce\xc0\x71\x06\x8d\x6f\xe0\x3b\x83\x07\x66\xd0\xfb\x46\xbc\xd5\x3e\x70\xa2\x81\x13\x8d\xf0\x8d\x38\xd1\x08\xb9\x4e\xe1\x4b\xe9\x83\x03\x57\x1a\x38\xd4\x60\xfc\x1f\xf4\xc1\x11\xef\xf4\x1b\xe1\xbb\xe2\x49\x11\x23\x7c\x05\x3e\x35\x68\x7f\x83\x4e\xf7\xcd\xae\xa2\xcd\x8d\xb0\xd2\xf0\xa9\x11\x56\x17\x9d\x6e\xe0\x59\x03\xcf\x1a\x61\x8e\xc2\x1c\x85\x39\x92\xb9\x36\xc2\x7a\x0b\xdf\x18\x95\xbd\x65\xbe\xf0\xb5\x11\xbe\x1a\x77\x1b\xd9\xe4\x73\x59\x81\x69\x76\x70\xb4\x91\xe5\x96\xb1\x8f\xf0\xb5\x81\xaf\x8d\xb4\xea\x70\xb7\x91\x51\x77\xd6\xb5\xbf\xa6\xbf\xfa\xd2\x6f\x8e\x98\x15\x88\xaf\xc9\x14\xfb\x2b\x6b\x4c\xbb\xaf\x4b\x5f\x81\xa3\x0d\xba\xde\x98\x76\xc7\x7c\xa7\xd0\xa0\xeb\x8d\xf9\x4e\xa1\x41\xbf\x1b\xf2\xc2\xc6\xb4\xd2\xa6\xf1\x9f\x7a\x3e\xf5\x99\xae\x37\xa6\x9d\x42\xcb\x1b\x32\xc8\xc6\xb4\xd2\xf0\xc7\x91\xd7\x5f\xf5\x76\xea\xad\xac\xa8\x41\xbf\x1b\xb2\x78\x86\xdc\xa8\x31\x97\xa7\x9c\x09\xd3\xec\xd0\xe9\xc6\xd4\xe7\x69\x9c\x57\x2b\x9a\xe8\x44\x37\xca\xa5\x65\xcd\xd0\xd7\x86\x4c\xab\xb1\xca\xd5\xa5\x6f\x4b\xdf\x96\xf5\xb0\xec\x5c\x5a\xd8\xa0\x85\x8d\x65\x9d\xe3\x83\x63\x39\x9d\x70\xc3\x41\x2f\x1b\x6b\x79\xca\xbe\xc6\x19\x07\x1d\x6d\xd0\xce\x06\x9e\x38\xe4\x19\x0d\x7a\xd9\xc0\x13\x07\x9e\x38\x96\x71\x5e\xc6\x61\xeb\xf3\x37\x5f\xcf\xea\xdd\xbd\xae\x07\xfa\x9e\xdd\xe6\x9a\xfe\x35\xb6\x91\xc4\x2b\x07\x5e\x39\xe8\x62\x63\xdb\xa7\x34\xaf\xb1\xed\xca\x6d\x6d\xe3\x92\x83\x56\x35\x68\x49\x63\xeb\x43\xe5\x06\x2a\x44\x3a\x70\xc6\x81\x33\x0e\x15\xf6\x93\xb4\x36\xf0\xc7\x71\xcc\x35\xfe\x38\xf0\xc7\x71\xca\x65\x68\x0c\x8f\x31\x3c\x76\x19\xce\x38\xe8\x50\x43\x6e\xe0\xc0\x0d\x07\x6e\x38\x64\x9c\xfd\xc9\x46\x8c\xff\x7b\x4e\xa2\x11\x3b\xd6\xe4\xb1\xe3\x2a\x4b\xf1\x98\x65\xda\xd6\x38\x95\xcf\x68\x07\x5d\xf3\x8e\x57\x0e\x5c\x72\xe0\x8f\x03\x7f\x1c\x38\xe3\xc0\x19\x07\xfd\x6b\xd0\xbc\x06\x2e\x39\xae\xde\xd2\xbf\x7e\xb2\x20\xf5\xf3\x9a\x71\xbc\x72\x5c\xeb\xf0\x5a\x87\x38\xe6\xb8\x7a\x8e\x4b\x0e\x19\xa0\xe3\xee\x6a\x71\x27\x4e\x24\x0f\x71\xe0\x92\xe3\x1a\x6d\xba\x58\xb4\xd7\xc3\xc0\x31\xa3\xbd\x7e\x06\x8d\x2c\x64\xc5\x06\x1e\x1a\xb2\xd8\xa2\xbd\x9e\x47\x1b\xd5\xe2\xfe\xb7\x06\x02\x0f\x8d\xf6\x66\x3c\x5a\x7a\xe7\x74\xff\x74\xff\xac\x16\x77\xbe\x9e\x47\x93\xd7\x89\x6f\x06\xbe\x19\x38\x66\xe0\x98\x41\x6b\x0b\xd6\xc8\xa0\xaf\x45\x6f\x45\x39\x78\xf5\x0d\x67\x8c\xfe\x56\x63\xd0\xd4\x02\x1f\x8c\xfe\xd6\x61\xd0\xce\x82\x76\x16\xf4\xb2\xc0\x01\x83\xe6\x15\x7d\x79\x76\x69\x5f\xde\xe0\xd7\x71\xb7\xc0\xd7\x82\x86\x15\x38\x5a\xd0\xb0\x42\x24\x47\xe0\x6b\xc1\x92\x19\x9c\xfa\xc1\x9e\x19\x34\xac\xc0\xe3\x02\x8f\x0b\x3c\x2e\x70\xb4\xc0\xe3\x82\x9e\x15\x2c\x99\xc1\x51\x1d\xe5\x65\xa6\x61\x85\x60\x8c\xc0\xcb\x82\x6e\x15\xb4\xaa\x10\x5a\x10\xe5\xdc\xc6\xb9\x82\x26\x15\x74\xa8\x60\xb1\x8c\xf2\x5a\xd3\x95\x82\xad\x32\x70\xab\xc0\x7d\x02\x4f\x89\xd0\x13\x9c\x28\x44\x08\x44\x0c\x7f\xe5\x26\xc7\x83\x22\xcc\x1a\x1b\x63\x44\xb9\xd0\xb7\x16\xbf\x58\x79\xb8\xb4\xa1\xc8\x56\x74\xa1\xef\x17\xf1\x88\x70\xe6\x07\xdb\x60\xe0\x17\x81\x5f\x04\x4e\x11\x78\x44\xd0\x7a\x22\x7d\x35\xbe\x10\xf8\x42\xa4\x99\xc2\x1d\x22\xd3\x9b\x7d\x7b\x2e\x6f\x58\xee\x37\x0e\xf8\x45\xe4\x76\xbf\x31\xc1\x2f\x22\xbf\x99\xc2\xf9\x93\x2f\x1c\x79\xe4\x0b\xbf\xfd\x18\xf8\x45\xb0\x01\xc6\xb4\x8a\xbe\x79\xc4\xbd\xda\xdf\x53\xf8\x45\x4c\x21\x03\x38\x42\xe0\x05\xc1\xee\x17\x53\x7f\x68\x43\xdf\xbc\x63\xda\x50\x4c\x6b\x66\x1a\x19\xf6\xba\x98\xd7\x3d\x66\x84\xae\x14\xcb\x88\xd1\x98\x02\x2f\x08\x1a\x53\xd0\x77\x82\xb5\x2d\x96\x6f\x67\x73\x8b\x35\xb5\x4f\x77\x4e\x77\x4e\x71\x09\x66\xc7\x99\x1f\xce\xf9\x70\xce\x07\xad\x27\x58\xe1\xc2\x39\x1f\x34\xa0\xa0\xf5\x84\x73\x3e\x9c\xf0\x41\xdf\x89\xa5\x57\x34\x9d\x90\x87\x1b\xec\x6c\x21\xbb\x39\xb6\x5d\xff\xcd\xaa\x36\x9b\xec\x6c\xb1\xa3\xae\xe3\xaf\x6c\x6b\x7b\x7c\xeb\xe7\xb6\xb3\x68\x37\xb1\xdf\x89\x14\xce\xf3\xd8\x15\x55\xe1\xb4\x71\xaa\xc7\xf1\xbb\xb4\x9b\xa0\xd1\xc4\xb1\x3b\x9c\xc9\x21\xf7\x36\x8e\xd1\x38\x56\xc2\x37\x9b\xdb\x08\xd0\x56\xe2\x58\x15\xc7\xb7\x1f\xeb\xa1\xf2\xbb\x9d\xdb\xe1\xc4\x0e\xf9\xd7\xe1\x7c\x0e\x1a\x4d\x9c\xca\x0d\x37\x77\xb4\x98\xb8\x76\x8a\x53\x3a\xe8\x32\xe1\x94\x8e\xdb\xff\x96\x2d\x6e\x55\x5c\xfb\xc5\x59\x1d\x32\xb5\xc3\x59\x1d\xd7\x3a\xb9\xce\x9c\xab\xcf\x2c\x66\x71\x9d\x7b\x74\x9c\x50\x4e\x3b\x9c\xe1\x41\xd3\x09\xe7\x76\x38\xb7\xe3\x9a\x47\x7a\x4d\x38\xb1\xc3\x59\x1d\xd7\xac\xfd\x87\x5c\xf5\x56\x74\xcb\x5b\xef\x7f\xb2\xd7\xd9\xcd\x64\xec\x0e\x19\xbb\x43\xde\xeb\x90\x85\x3a\x64\x50\x8e\x6c\xd3\xf5\xf4\xac\x8c\x75\x5a\x4c\xd2\x59\xd2\xa9\x9b\x34\x94\x74\xf6\xa6\xb3\x37\x69\x25\xd9\xae\x90\x96\xb7\x77\xb2\xbf\x11\x4b\xfa\x48\xf6\x37\x3e\xd9\x2b\xe0\xe5\x8d\x40\xb2\x80\xc9\xc6\x7d\xd7\xef\xd9\x2e\x84\x85\xf6\x21\x3f\xf7\x51\xf7\xbf\x53\x2e\x59\xc0\x92\xf6\x91\xb2\xdd\xb3\xcb\xc1\xa7\x89\x24\x4d\x24\xd9\xc4\x92\xbd\x2b\x85\x53\x25\xcd\x22\x9d\xa8\xc9\x72\x95\xc2\x81\x92\xfd\x2a\x85\xfb\xa4\xd3\x35\x2b\x10\xe7\x1b\x8a\x33\x8b\xfa\xab\x9e\xd0\x0e\x72\xe8\x03\xcb\x55\xf2\x19\x65\x85\xc7\x39\x6f\x93\xfd\x2a\xf9\x8c\x92\xa6\x90\x4e\xdd\x74\xea\x26\x1d\x21\xe3\xed\x91\xac\xc0\x9f\x78\x27\x7c\x86\x5e\x91\xf3\x93\x0d\x2a\x9d\xc3\x49\xb6\xff\x41\x1b\xd0\x13\x61\x3e\xc9\x2a\x95\xf1\xd6\x76\x7e\xb1\x26\xcc\x11\xff\x4e\xf2\xef\x7c\xd1\x09\xd8\xa9\x92\xfc\x9f\xe4\xff\x24\xf9\x27\xc9\x3f\x49\xfb\x85\x53\x91\xa4\xfd\x8c\xb7\xe6\xd3\x89\x9d\x69\xee\xf2\xad\xf0\xe4\xeb\x49\x9e\x9d\x64\xb3\x4a\x67\xf8\x17\xfd\x80\x24\x9f\xce\xea\x4c\x23\xc9\x4e\x95\x4e\xec\x4c\x61\x4d\xac\x55\x99\x15\xde\x64\x5d\x91\xe7\x33\xf5\x9f\x85\x2a\xc9\xf3\xc9\xb3\x93\xce\xe7\xe4\xc7\xc9\xd4\x37\x67\x75\xf2\xe6\x64\x5a\x69\xbc\x39\x49\x0e\x4f\x7e\x9c\x9c\x7a\xc8\x5f\x93\xce\xe7\x9c\xef\xc4\xc8\x59\x28\x0d\xc6\x79\x9a\x7d\x96\xae\x24\xdb\x27\xd9\xfe\x8b\xde\xc0\x83\x93\xec\x5d\x09\x01\x20\xd9\xbb\x92\x07\x27\x59\xbd\x92\xd5\x2b\xc9\xf9\x49\xce\x4f\x7e\x9c\xe4\xc7\x49\xd2\x7e\x4e\x5f\xc4\x26\x96\x4e\xfe\xe4\xaf\x49\xfe\x9a\x74\xe6\xa7\x33\x3f\xa7\x55\xe1\xcc\x4f\x67\x7e\x92\xfc\x93\xd7\x26\x97\xfe\xf3\xcb\x24\x4c\x80\x64\xfb\xca\x95\x5a\xac\x13\xb6\xaf\x24\xf9\xa7\x93\x3f\xd9\xbe\x72\xad\xc2\xa3\x88\x3f\xa8\x14\xac\x5e\xc9\xe7\x92\x24\xf9\x64\xcb\x4a\xfe\x94\x24\xbd\x27\x5b\x56\x3a\xe1\x7f\xf0\x2b\xa0\x55\xf0\xa4\xe4\x36\x92\xdb\xb9\x41\xaa\x4f\x27\x7c\x92\xea\xd3\x39\x9f\xe4\xf9\xdc\x76\x13\xaf\x4a\xf2\x9b\xa4\xf3\x3f\xd9\xbe\x92\xdf\x24\xf9\x4a\x72\x1b\x2b\xf6\xae\xe4\x2b\xc9\x6d\x0d\xec\xed\x6d\x7a\x0b\xf3\x21\xf9\x4d\x92\xaf\xe4\x8b\xa7\x81\x5f\x24\x2d\x20\xa1\x79\x7c\xd1\x36\xe8\x02\x09\x9f\xe1\x07\x6d\x43\xff\xc9\xfc\x79\x46\xb5\xc0\xdf\xd0\xf3\xe3\x44\x3a\xd6\x00\x6e\x92\xac\x61\x3f\x18\x1d\xce\x25\x1c\x27\x8f\x6f\xa1\x0b\x24\x5c\x85\xc4\x6b\x12\xaf\x49\x96\xb1\xa4\x23\x24\x2e\x93\xb8\xcc\x17\xdf\x83\x46\x90\xe7\x54\xcb\xfa\x1b\xfa\x87\x5f\xd1\x7f\x1a\x41\xd2\x08\x12\xaf\x49\x92\x7f\x5e\x7d\xbe\xc6\x16\xd7\x48\xbe\x95\xc4\x35\x12\xd7\x48\xd2\x7e\x92\xf6\x13\xef\x48\xbc\x23\x59\xc9\x92\x4d\x2c\xaf\x35\xc0\xf3\x92\x38\x48\xf2\xb9\x14\xf6\x48\xe2\x23\x49\xe6\xcf\x6b\xdf\xe1\x29\xc9\x0b\x33\xff\x11\x9f\xa7\x57\x0f\x54\xc4\xe1\xdb\x70\x13\x68\xca\x04\x7a\x31\x31\x96\x89\xb1\x4c\x82\xff\x6c\x6f\x51\x4c\x21\x06\x93\x43\x66\x12\xf9\x27\x91\x7f\x12\xf9\x67\xab\xf8\x45\x00\x27\xc4\xff\xd9\x96\xbf\x2e\xed\x62\x69\xdb\xaa\x76\xef\xd9\x5a\x80\xa3\x30\x8c\xcd\x76\xbd\xf3\x2d\x84\x2f\x80\x0a\x25\x60\x12\xfc\x27\xc1\x7f\x72\xd1\xcc\xfe\x96\xf0\x64\x06\x9b\xcc\x60\xb3\xbf\x63\x60\x62\x41\x93\xf8\x3f\xbb\x5e\x61\x41\x13\x0b\x9a\x58\xd0\xec\x4b\xfb\xaa\x6b\x77\x6e\x6f\xde\xde\xbc\xfd\x75\xfb\xeb\xd1\x7e\x5c\x1b\x3c\x0a\xc1\xc4\x94\xa6\x60\xdb\xc9\xdc\x35\xb1\xa3\x29\xd2\x7a\x12\xf6\x27\xd6\xf4\x05\x80\x11\x43\x3c\x31\x9c\x89\xe1\x4c\x11\xab\x13\xc3\x99\x04\xfc\xc9\x40\x35\x31\x9c\x39\xc4\x1f\x33\x44\x4d\x21\xc0\x93\x21\x6a\x62\x3b\x53\xa0\xc1\x14\x68\x30\x23\x5d\xa7\x3b\xdf\x71\x32\xb1\x9d\x89\xd5\xcc\x8a\x28\xe5\xfa\x98\x58\xcd\xc4\x6a\x26\x26\x33\x31\x99\xc9\x74\x34\xe3\x68\x31\x17\x18\xc8\x64\x1c\x9a\x8c\x43\x13\x1b\x99\x5c\x1f\x33\x7d\x35\x66\x32\x99\x8b\xa6\x90\x81\xc9\x19\x32\x31\x96\x49\x21\x98\x8c\x46\x53\x98\xc0\xa4\x10\x4c\x6e\x90\x99\x4f\x8c\x9a\x98\xc9\xc4\x4c\x66\x5a\x4b\x69\x2d\x61\x2c\x33\xf5\xb6\xe2\xaf\xa9\x05\x93\x42\x30\x29\x04\x93\x42\x30\xa9\x02\x13\xc3\x99\x14\x82\x89\xe1\x4c\xaa\xc0\xc4\x64\x26\x63\xd2\xc4\x5e\x66\xfa\x22\xc6\x24\x08\x52\x63\x52\x0e\x26\x03\x12\x20\x90\x47\xdf\x7b\x84\x03\x4c\x0a\xc1\x64\x16\x9a\x5c\x28\x53\x20\xc0\x9c\x15\x63\x6b\x6c\x31\x93\x89\x99\x4c\xea\xc2\x9c\xfa\xc9\x44\x34\x99\x88\xe6\xb4\x8a\xb0\x8e\x49\x75\xf8\x02\x02\x71\xf8\x4f\x0a\xc4\xe4\x42\x99\x4b\x7f\x96\xd5\xce\xc9\x3f\xb9\x50\x26\xf7\xfe\xe4\xcc\x9f\x0c\x45\x73\x45\xb5\xb8\x53\x3f\x29\x16\x93\x62\x31\x31\x96\x89\xb1\x4c\xee\x94\xb9\x2a\x92\xdd\xec\x53\x1a\x26\x06\x32\xb9\x4a\xe6\x32\x6e\xeb\xf8\xab\x15\x48\x75\x98\x1c\x26\x93\x03\x7f\xae\xea\xa7\xbd\x59\x50\x46\x8c\x46\x73\xd9\x11\x14\x8b\x49\x8d\x98\x8c\x46\x13\x93\x99\x98\xcc\xc4\x5e\xe6\x36\xef\xdc\x29\x13\x4b\x99\xdb\x1a\xc0\x58\x26\xc6\x32\x29\x16\x5f\x90\x24\x4c\x66\x32\x1a\x4d\xac\x66\x62\x35\x93\x83\x65\x62\x35\x13\x63\x99\xd8\xc8\xa4\x7c\xcc\xad\xcf\xd4\x8e\x79\xac\x5e\x6c\x64\x32\x29\xcd\x63\x25\x17\xfc\xd2\xb1\x06\xa8\x26\x93\x79\x69\x72\xce\x4f\x8c\x65\x62\x2c\x93\xb3\x65\x62\x2f\x93\x49\x69\x72\xb6\xcc\xa3\xe7\xd4\x94\x89\xa5\x4c\x6c\x64\x9e\x82\x77\xb2\x7a\xc1\x44\x4d\x8a\xcb\xc4\x4c\x26\xc5\x65\x62\x26\xf3\xec\x6a\xf1\x5b\x66\x81\x91\x69\x62\x29\x13\x4b\x99\x1c\x32\xf3\x54\x36\x82\xd1\xc6\x52\x26\x96\x32\xa9\x2c\xf3\x1a\x6d\x8a\xcb\x64\x6a\x9a\xdc\xfb\x93\xfa\x32\xb9\xf7\x27\x57\xcc\xc4\x76\x26\xf3\xd2\xc4\x76\x26\x56\x33\xb1\x97\x89\x99\xcc\xab\x27\xd7\x99\x80\x81\x4c\x46\xa3\x85\x5f\x2c\xfc\x62\x09\x4f\x5b\x1c\xf8\x0b\xef\x58\x05\x13\xc5\x68\xb4\xb8\x59\x16\xa7\xca\x6a\xe1\xfe\x70\xcf\x1b\xab\xd5\xa6\xbf\x56\x4e\x85\xc8\xfe\x26\x9f\x82\x82\xb2\x70\x87\xc5\x5c\xb4\x04\xac\x2d\x86\xa2\x45\x1d\x59\xed\x02\xc4\x7a\x42\xd6\xea\x0d\x44\x96\xfe\x50\x53\x16\x43\xd1\x0f\x98\x96\x5e\xe1\x17\x3f\x60\x5a\xa0\xad\x70\x8a\xc5\x61\xf2\x03\xb8\x55\x10\x5c\xd9\xff\x06\xb5\xe5\xce\xf4\x06\x7d\x2e\xf0\x2d\x6a\xcd\x12\x04\xb7\x70\x96\x85\xb3\x2c\x9c\xe5\x07\xac\x0b\x8c\x56\x81\xc9\x31\x38\x2d\xfc\x65\x71\xfe\x2f\x6a\xcd\xe2\xde\x5f\xdc\x2c\x4b\x00\xdd\xc2\x5f\x16\xe3\xd3\x62\x88\xfa\x03\xf1\xd5\xbe\x40\x5f\x8f\x06\x9a\x28\xd0\xaf\xb7\x6e\x0b\xa6\x6e\x8d\x82\x01\x33\x0b\x5c\x2b\x8b\x91\xe9\x07\x18\xcc\x57\x73\xaa\xac\xca\x98\xc0\x9b\x16\xc7\xcb\x12\x5e\xb7\x98\xa3\x16\x15\x6a\x71\xa7\x2c\x19\x08\x8b\x0a\xb5\x2a\x07\x86\x99\xea\x07\x66\x6c\x69\x59\x05\x3c\xa6\x1d\x74\xd9\x17\x7e\xcc\x97\x32\x59\x2d\x6e\x96\x2f\x20\x19\x15\x6a\x51\xa1\x7e\xc0\xc9\x7c\x11\xee\xb6\xb8\x59\x96\xc0\xba\xc5\xa9\xb2\x38\x55\x16\xb3\xd6\xe2\x4e\x59\x72\x94\x16\x47\xca\x12\x52\xb7\x70\xbd\x85\xeb\x2d\xc1\x74\x3f\x80\x67\xdb\xfb\xf7\xfc\x82\x9f\x3d\xea\x4e\x7d\xe0\x00\x59\x94\xa4\x25\x2c\x6e\xe1\x5c\x8b\xc9\x6a\x51\x7d\x16\x57\xc6\xa2\x00\x2d\x66\xaa\x85\x4f\x2d\x7c\x6a\xe1\x4d\x5f\x28\x35\x3c\x68\x71\xcb\x2f\x2a\xce\x4a\x33\x4b\xe9\x59\xb8\xcf\xe2\xca\x58\x38\xce\x62\x8e\x5a\x0c\x51\x6b\xbe\x33\x67\xe1\x3e\x8b\xba\xb3\xa8\x3b\x8b\xba\xb3\xf0\x9d\x45\xa1\x59\x14\x9a\xc5\x34\xf5\x05\x6f\xc3\x7d\x16\xee\xb3\x56\xdf\x7f\x80\xdc\xa8\x32\x6b\x56\xa6\x8c\xf9\xc2\x95\x96\xc0\xb4\x85\x2b\x2d\x0a\xcd\xe2\xbe\x58\xd3\x0a\xc4\x89\x16\xf3\xd5\xe2\xb2\x58\xf8\xd1\xe2\xcc\x5f\xab\xff\x05\x17\xc7\x70\xb5\xa8\x2c\x0b\x7f\x59\x0c\x57\x8b\x99\x6a\xe1\x32\x8b\xb1\x6a\x51\x59\x16\xa7\xc4\xe2\x94\x58\xd4\x97\x85\x07\x2d\x1c\x67\x31\x59\x7d\x61\xe7\x70\x99\xc5\x58\xb5\x04\x8b\x2d\x9c\x65\x31\x59\x2d\x0a\xcd\xda\xd5\x93\xca\xfd\xb1\x7f\x71\x96\xc5\x1d\xb1\xc0\xa7\x2d\x4a\xcc\xa2\xbe\x2c\x5c\x66\x71\x4a\x2c\xa1\x61\x4b\x68\xd8\xe2\x94\x58\x5c\xfa\x8b\x4b\x7f\x71\xe6\x2f\x8e\xfa\x45\x89\x59\xd4\x97\x25\xec\x6b\x15\x78\x9e\x50\xaf\x85\xe3\x2c\x8a\xcb\x62\xe8\x5a\x54\x96\x85\xd7\xac\xd3\x0b\x4e\xf2\x07\x54\xf2\xd1\xf3\x05\xd5\x7b\xb4\x00\xf6\x02\x9d\xa8\xbf\xea\x2d\xc5\x65\xe1\x2f\xeb\x18\x5b\xae\xfb\x75\xf4\xb0\xe0\x2a\xf1\x97\x75\x0a\xb4\xb2\x72\xd1\xcc\x32\xf3\xd8\x3a\xd6\x24\x2e\xb3\x70\x99\xc5\xad\xb1\x70\x96\x45\x4d\x59\x38\xcb\xe2\xe4\x5f\x38\xcb\x12\x38\xb6\xf0\x97\xc5\x54\xb6\x70\x90\x75\xf5\x99\xb3\x62\xe1\x26\x8b\xe9\x6b\x51\x5f\x96\x00\xb1\xc5\xbd\xbf\x38\x2b\x80\x9f\x8d\x45\x4d\x59\x54\x93\xc5\x1d\xb1\x70\x96\xc5\x75\x0f\x50\xf0\x51\x59\x5c\xd6\x1e\x05\x65\x31\x7a\x2d\x1c\x67\xe3\x38\x9b\x01\x6c\x33\x80\x6d\x7c\x67\x73\xef\x6f\x5a\xc9\xc6\x6b\xbe\x90\x84\x8c\x5e\x9b\x6e\xb2\x5b\xfa\x6b\xba\x1f\x24\x21\x3d\x65\xd3\x50\x36\xad\x64\xe3\x38\xbb\x55\xf6\xde\x72\xe7\xf6\x2b\xc7\x3b\xdf\x28\xed\x56\x3d\x79\x32\xcf\x0f\xe4\xe1\x5b\x8d\x9b\x43\x7e\x0b\x91\xde\xf8\xcb\xa6\x8f\x6c\x5c\x66\xe3\x29\xbb\x87\xfb\x43\x76\x5a\xb8\x53\x4f\x70\x90\x2d\x40\x6c\x73\x4d\x6c\x6e\xf9\x4d\x1f\xd9\x74\x90\x8d\x53\x7c\xe1\x15\xf1\x88\x8d\x47\xec\x7e\xbd\xa1\xfa\x73\xab\xe5\x02\x5f\x9c\x7f\x41\x30\xea\x21\xdd\x64\x4b\x05\xdc\xa3\x6b\x7f\xe7\xc3\xc6\x29\x36\x37\xc5\x16\x7c\xbd\xf1\x88\xed\xe4\xdf\x78\xc4\x16\x64\xbd\x85\x54\xff\x07\x40\x47\x27\xff\xae\x7c\x3b\x5a\xcc\x76\xe6\x6f\xc6\xb3\x2d\xf8\x6b\x0b\xaf\xde\x02\xbb\xb6\xd3\x7e\xd3\x65\xf6\xd0\x67\x1a\xcd\x76\xce\xef\x00\x06\xe9\xb4\xdf\xdc\xe9\xdb\x99\xbf\x39\x2b\x36\xd3\xda\x66\x5a\xdb\x8c\x6a\x5b\x90\xd7\x0e\xfd\xa4\xf5\x6c\xe7\x3f\xc0\xbc\x01\x30\x6f\x6c\xe7\xff\x66\x5a\x03\xaa\xf7\x03\x3f\x19\xfa\xcc\x9c\xb6\xb9\xd3\xb7\x10\xe9\xcd\xd1\xb1\x99\xd0\x36\xdd\x67\x73\x92\xef\xa8\xde\x1a\xe1\x30\xc2\xf4\xa0\xcd\xf5\xb1\x99\xd3\x36\x6d\x68\xe7\x3b\x8b\x36\xde\xb1\x69\x3d\x9b\xa6\xb3\x69\x3a\x9b\xa6\x03\xa8\xef\x51\xf7\x58\x9f\xb4\x9e\x9d\xc6\x56\xf0\xd7\x96\xe9\xb8\x05\x7c\x6d\x3a\xce\xa6\xdd\xec\xac\x0c\x52\x6b\x92\x7b\x7c\xd3\x6e\x40\xfa\x3d\x2a\xbf\xd1\x4e\x61\x3c\xdb\x1c\xe3\x9b\x46\xb3\xf1\x94\x3d\xf5\x8a\x4b\x1c\x1c\xe0\xa3\xfe\xea\xd7\x99\xc7\x36\xc3\xd8\xc6\x53\x36\x0e\xb2\x85\x36\x6f\x1a\xcd\xc6\x41\x36\x93\xd8\xc6\x47\xb6\xa0\xe6\x3d\x8d\xa1\x30\xb1\xcd\x3d\x02\x32\xf0\x51\xf7\x98\x7d\xe6\xb1\x2f\xfc\x27\x6e\xb2\xf1\xa9\xbd\x8c\x98\x10\xe6\xcd\x25\xbe\x69\x37\x5b\x98\xd8\x16\x9e\xbc\x69\x34\x9b\x2e\xb3\x39\x49\x36\xf3\xd8\xc6\x71\x36\x23\x19\xe8\xc1\x01\x8c\xf0\x51\x50\xa3\xfa\x89\xcb\x6c\x3a\xce\x16\x92\xbc\x71\x99\xcd\x31\xb2\xf1\x9a\xcd\xf5\xbd\xe9\x2f\x5b\x48\xf2\x66\x48\xdb\xbb\xc0\x4a\xcd\xf5\x17\xb2\x54\x3f\x69\x34\x9b\x46\xb3\xb7\x95\xc9\x49\xb2\x39\x49\x36\xbe\xb3\x85\x24\xff\x40\x9c\x1a\x4f\xba\xcc\x17\xe8\x54\x88\xf1\xa6\xc5\x6c\x5a\xcc\x16\x26\xb6\xb9\xc4\xb7\xd0\xb0\x1f\x60\x54\xd9\xab\x38\x0e\x18\xc5\x47\xbd\x47\x6f\xcf\xe3\x8c\x9b\x2e\xb3\x8f\x7e\xe2\x32\x9b\x53\x65\xe3\x35\x9b\x19\x6c\x73\xa7\x6c\x7c\x64\xd3\x50\x36\x6e\xb2\xe9\x29\x1b\x4f\xd9\xb8\xc9\x66\xf4\xfa\x42\xb1\x0a\x34\xde\xc7\x7e\xe1\x06\xdf\x34\x94\x4d\x43\xd9\xc7\xb9\x84\x9b\x6c\x7c\x64\x1f\xe3\xc9\x91\xb2\x85\x83\x6d\xba\xc9\xbe\xbd\x5a\xde\x1b\xae\x33\x87\x86\xb2\x39\x55\xf6\xd5\x43\xae\xef\xcd\x91\xb2\xb7\x35\x79\xcd\xf5\xfd\x5e\xfb\xab\x59\x66\x00\xdb\xf8\xcb\x66\xd6\xda\xc0\x59\xb7\x04\x9a\xd3\xe4\xf7\xd2\x50\x0e\x7e\xf1\x03\x22\xfb\x4e\x95\xc3\x71\x7d\x68\x25\x3f\x10\xb3\x89\xbe\xdf\x3a\x6c\x59\x3f\x70\xb3\xb3\xa0\x67\x3d\xb5\xff\x02\xa0\xe5\x2a\x39\xc2\x8a\x0f\xee\x70\x84\x71\x1d\xdc\xe1\xd0\x4a\x0e\x57\xc9\xc1\x29\x0e\xad\xe4\x07\xb6\xf6\x8d\xc3\xc1\x23\x0e\x1e\x71\x58\xae\x4e\xd7\x2b\xfa\xc8\xa1\x8f\x1c\xfc\xe2\x70\x62\x1f\xae\x95\x43\xfb\x38\xb4\x8f\x2f\xe4\x2d\x2d\xe3\xb0\x62\x1d\xfa\xc2\x91\x70\xf3\x03\x7f\xeb\x77\x9d\xfc\x3f\xe0\xb8\xfd\x2f\x58\x5c\xce\x93\x43\x23\x38\xb4\x80\x43\x0b\x38\xb4\x80\xe3\xfc\x3f\x5c\x28\x07\x17\x38\x1c\x29\x47\x10\xd6\xe1\xac\xfe\x42\xed\xd2\x0b\x0e\xeb\xd6\xa1\x17\x1c\xa1\xc1\x87\xfb\xfa\x54\xce\xb5\x24\x9b\x53\x39\xd7\x4e\xfe\xe3\xe4\x3f\x4e\xfb\x13\x05\xd3\x6b\x1c\x38\xa5\x4f\x54\xd6\x76\x54\xcb\x7b\x1b\xd9\xfe\x0b\xe5\xcb\x59\x7d\x38\x52\x0e\xbb\xd6\x81\x4f\x70\xd8\xb5\x0e\x99\xff\xc4\xd2\xfe\xd6\xf0\x71\xe6\x1f\x27\xf9\x61\xd1\x3a\xce\xf3\xe3\xdc\x3e\xec\x57\x47\xca\xcb\xe1\x06\x39\x52\x5b\x0e\x9b\xd5\x71\x86\x1f\x81\x4e\x87\xe3\xfa\xd0\x02\x0e\x37\xc8\xe1\xb8\x3e\xe9\xdb\x59\xab\x8e\xd0\xdd\xc3\x0d\x72\x58\xab\x4e\xfa\x75\xda\xc1\x49\xa3\x41\x47\x38\xb4\x86\xe3\xf4\x3e\xf4\x82\x93\xd5\x2b\x73\xc7\x65\x7d\x84\x38\x1d\x21\xbd\xc7\x79\x7e\x68\x0d\x87\xbe\x70\x38\xae\x0f\x4d\xe1\x4c\x7d\x66\xa1\x3a\x5c\x1f\x30\xd4\x07\xd4\xf4\x3f\xe0\xc7\xc6\x8a\xa6\x00\x54\x75\x00\x6a\x1f\x40\xda\x07\x94\xf6\x01\xa6\x7d\x80\x68\x1f\x87\xd3\x03\xf0\xea\xa3\x5a\x8e\xb7\x1d\xf7\x9b\xd3\x69\x2f\x70\x80\x1f\xa1\x4f\x87\x2d\xeb\x0b\xb4\x4c\x83\x38\xc2\xa0\x8e\xa0\xa7\x43\x77\x38\xec\x5a\x87\x5d\xeb\xb0\x5f\x1d\xc9\x28\x87\x9d\xea\xd0\x26\x0e\xd7\xf7\x0f\x54\xb3\xd9\xa4\x47\x1c\x7a\xc4\xa1\x41\xfc\x81\x70\x3e\x7f\x80\x9c\x05\x37\x1d\xb6\xa9\xb3\xfd\xae\xd3\xfb\x48\x1f\x39\x42\x99\x8e\x13\xfb\x6c\x73\xea\xc4\x3e\xce\xea\xe3\xac\x3e\xec\x51\x87\xa6\x70\x68\x0a\x87\xa6\x70\x68\x07\xe0\xe4\xc7\x11\xde\x7b\x9c\xde\x47\x38\xf0\x61\x83\x3a\x1c\xe0\x87\x8e\x70\x9c\xde\x87\x76\x70\xd8\xa3\x0e\xbd\xe0\xb0\x44\xfd\x40\x4d\x9b\x59\xe1\x4b\x87\x8e\x70\xce\x00\x44\xed\x7c\x70\x92\x9f\xa3\xb7\x12\x41\xbe\xd0\xd4\x5c\x19\x87\x2b\xe3\x70\x5f\x1c\xe7\xf9\xe1\xa0\x38\xce\xe7\xe3\x7c\x3e\xce\xe7\xc3\x41\x71\x9c\xd2\x47\x9a\xc8\x71\x4a\x9f\xeb\xa4\x92\x14\x72\xc8\xf6\x05\x77\x7d\x48\xf8\x87\xa3\xfb\x70\x74\x1f\x72\xfe\x61\x35\xfa\x01\xc6\xb6\xce\xb9\x26\x0e\x09\xff\x70\x44\x1c\xae\xec\x23\x44\xf7\x08\x44\x3a\x24\xfc\x43\x9e\x3f\xdc\x0e\x7f\x03\xd2\x1e\x97\x6c\x7f\xc9\xf6\x97\x54\x7f\xa5\x86\x5c\x27\xf6\x05\x6a\x5e\xf0\xdb\xb7\xe0\xb4\xf9\x23\x6e\x2b\x58\xee\xf4\x86\x09\x44\x03\xfc\x36\x79\xfe\x92\xe1\xaf\x13\xfb\x72\x6e\x5f\x41\xb8\x97\x5b\xfb\xb6\x37\x17\xb7\xfb\x45\xa7\xf4\x75\x4a\x5f\x5e\x86\xcb\xb9\x7d\xc9\xf3\x97\xd5\xe8\x07\xe4\xdb\xef\xf2\x2c\x5c\x89\x20\x97\x24\x7f\x59\x8a\x2e\x4b\xd1\x65\x29\xba\x4e\xe9\x4b\x6e\xff\x42\x83\x93\xde\x2f\x89\xfd\x72\x65\x5f\x16\x9e\xcb\x92\x03\x90\x78\x5c\x67\xf5\xe5\x41\xb8\xc3\xb7\x3b\xa5\x2f\x99\xfc\xb2\xd5\x5c\x92\xf9\x2d\xec\x16\x27\xf3\x25\x99\x5f\x48\x11\x97\x7c\x7e\x9d\xc6\x97\x94\x7e\x85\xbe\x5e\xe7\xf0\x25\xab\x5f\xc1\x44\x97\xc4\x7e\x79\x1c\x2e\xfb\xcc\xe5\x77\xb8\xe3\x68\x37\x56\x5f\x48\x12\x7d\x26\xb7\x5f\x72\xfb\x15\x64\x74\x0b\x0b\xa3\xa0\x49\x9c\xe4\x57\x48\xec\x25\xc9\x5f\xd2\xfb\x15\x76\x74\xc9\xf0\x80\x96\xc7\x65\xb1\xb9\xce\xf3\xeb\x0c\xbf\x24\xf3\x0b\xed\xe6\x07\x40\x5d\x6f\x0b\x46\x9d\x64\x7e\xb9\xb8\x2f\xdf\xc4\x25\x9f\xdf\xa8\x3e\xbc\x55\x74\xd9\x6d\x2e\x69\xfc\x3a\xc3\x2f\x2f\xc3\x75\x6e\x5f\x4e\xec\x4b\xf6\xbe\x4e\xef\xeb\xdc\xbe\x6c\x38\x97\x04\x7e\x33\xdd\x6f\xf4\xd8\x73\xae\x33\xfc\x4a\xbf\xb8\xce\xf0\x2b\x10\xe9\x3a\xc3\x6f\xfe\x81\x78\x7f\xd4\x3d\xc6\x8d\xb5\xe7\x0a\x3b\xba\x52\x15\x2f\x8f\xc3\xcd\xea\xa7\xd5\x2e\x1c\xe9\x4a\x4f\xbc\x24\xf3\xeb\xf4\xbe\xb3\xa0\xe2\x8d\x12\xb7\xf6\xe5\x77\xb8\x20\xdb\xaf\xa0\xa4\x2b\x58\xf5\x3a\xdb\x2f\xe9\xfd\xb2\x05\x5d\xe7\xfc\x9d\x56\x1d\xaf\xc4\x75\xe6\x5f\xbe\x89\x2f\xfc\x3c\x19\xfe\x3a\xdb\x2f\xb9\xfd\xb2\xff\x5c\xa9\x1e\x97\x87\xe2\x4e\xdf\xe5\x6c\xbf\x4e\xf5\x4b\x86\xbf\x3c\x14\xd7\xd9\x7e\x9d\xed\x97\x24\x7f\x9d\xed\x97\xbb\xfb\x72\x77\xdf\x55\x10\x35\xef\x64\xbb\xe4\xfc\x4b\xce\xbf\xd2\x41\xae\xf3\xff\x72\x80\x5f\x72\xfe\x15\xfa\x7a\x85\xbe\xfe\x00\xe4\x5b\x21\xbc\x18\x17\x47\xf8\x81\xcc\xf7\xbd\x6c\x4d\x97\x16\xf0\x05\xce\x17\x2a\xf5\x03\xa8\x6f\x2d\xe1\x17\x17\xbf\xf8\x81\xd8\x37\x6b\xec\x4e\x97\x2e\x70\xf9\x35\xbe\x70\xfb\x74\x81\xcb\x79\x7e\x79\x3a\x2e\x4f\xc7\x65\x7d\xba\xf8\xc8\xe5\xe3\xb8\x7c\x1c\x97\x25\xea\x0b\xd8\x4f\x3b\xb8\xd2\x13\x2f\xbd\xe0\xd2\x0b\x2e\x9e\xf2\x07\xc8\x7f\xfd\x05\xe4\xff\x05\xf5\xbf\x40\xfd\xbd\xc7\xd7\x7d\x01\xfe\x7d\x23\xee\x73\x71\x9f\xcb\x0f\x72\x59\xa2\x2e\xaf\xc7\xa5\x35\x5c\x7c\xe7\x0a\xb3\xba\xf4\x85\x8b\xef\x5c\x6e\xf6\xcb\x4e\x75\x69\x0d\x17\xf7\xf9\x96\x0e\xc0\x7d\x2e\xad\xe1\xd2\x1a\x2e\x3f\xc8\xc5\x89\x2e\x4e\x74\x79\x40\xae\x34\x94\x8b\xfb\x5c\xe9\x26\x97\x07\xe4\x9e\xd0\x6e\x8e\xbe\x85\x08\x7c\x0b\x3f\xc8\x65\xb3\xba\x74\x8d\x8b\x43\x5d\x1c\xea\x72\xb6\x5f\x7c\xea\x5b\xb8\x80\xde\x01\x52\xfd\x51\xf7\x38\xaf\xd8\xaf\x2e\xfb\xd5\xa5\x7d\x00\x5c\x1f\x97\x15\xeb\xf2\x98\x5c\x21\xba\x17\xa7\xbb\x6c\x59\x17\xbf\xbb\xf8\xdd\xe5\x2b\xb9\x6c\x59\x97\x2d\xeb\xe2\x71\x57\xa8\xd7\x15\x8a\x7b\x6f\x1f\xa8\x16\x27\x2d\xdd\xe4\xd2\x4d\xae\xe0\xdc\xcb\x39\x7f\xe9\x26\x17\x67\xbc\xf8\xe0\xc5\x01\x2f\x7b\xd7\x95\x16\x79\x05\xea\x5e\x1a\xca\xc5\x13\xa5\xf8\x3f\xea\x3d\xdb\x53\xd6\x1b\x1b\xd7\xbd\xdf\x62\x26\xee\xb7\xc6\xd8\xb8\xa4\xfe\x47\x6b\x6d\xa1\xae\xbb\xf2\x0e\x3d\xd1\x89\xfa\x6b\xf7\x57\x25\x1d\x1e\x37\x8c\xa6\x6c\x02\x18\x80\x47\xab\xc5\x3d\xe9\xfe\xdc\xe8\xfd\x53\x2c\xa2\x2d\x6f\xdb\xae\xb7\xfb\x77\xb5\xb8\x7f\xbb\x7f\x9f\x47\x4f\x47\xfd\x15\xf8\x54\x03\x45\xd5\xf4\xb6\xb7\x8e\x4e\xf4\xb5\x2b\x89\xd0\xba\x7e\x76\xfd\xe9\x0a\x53\x3c\x2d\xe6\x51\x7f\x4d\xf7\xa7\xf6\xd9\x50\xf7\xcf\x6a\xf1\x66\x45\x2a\xfa\xf6\x06\x7d\xeb\xfa\xd6\xf5\xad\x1f\x4f\x1d\xef\x3c\x9e\xba\x5a\xae\xfe\xdc\xd7\x3e\xf4\x6d\xe8\xd5\xe3\xad\x01\x72\xe0\xd1\x81\x4e\x74\xa1\xee\x51\x04\x03\xd6\x19\xe0\x81\x00\x3c\xf0\xe8\xeb\xcf\x30\xc2\x4f\x3f\x0a\x20\x04\x01\x84\xe0\x51\xf7\xf8\xc6\xe1\x1b\xa1\x3b\x01\x24\x08\x50\x04\xd1\x86\x52\x1b\xc3\xd7\x0d\x5f\x37\x96\x9e\x28\xd6\x31\xcc\xc5\x50\xb2\x63\x2c\xf7\x1c\x3d\xdc\x45\x3d\x6b\x04\x86\x11\x18\x46\x60\x98\x97\x61\x04\x46\x7d\x2f\x64\xaa\xc7\x97\x03\x38\xc1\xa3\x30\xab\xba\x76\xdf\x18\x56\x0e\xe4\xb9\x06\xb1\x0a\x2c\x41\x34\x68\x54\x0d\x08\x18\x28\x82\x00\x39\xf0\xa7\x84\xc8\xb7\xa8\xc8\x44\xab\xdd\x9d\xbb\xa1\x9e\xd5\xdb\xd8\x3f\x25\x47\x02\xfc\xc0\xa3\x4a\x91\x58\x4b\x00\xc0\x5a\xe8\x67\x9a\x9d\xb4\x72\x52\x3f\xd3\xec\xa4\xd9\x49\xab\x28\xcd\x48\x0e\xf7\x58\x4b\x69\x9c\x95\xbc\x00\x2a\x10\x40\x05\x1e\xf5\x86\xa9\x45\xcf\x73\xb9\x47\xcf\xe1\x61\xb5\xdc\x75\xed\x7e\x23\xfc\xf8\xf5\xa3\xde\x7f\x3c\x75\xbc\xc7\x5a\xca\xeb\x1e\xab\x7d\xb6\x44\xdf\x5f\xa7\xb5\x34\xf5\x76\x5a\x3f\xd3\x08\x2b\x1e\xd2\xa6\xb1\x9d\xfa\x3c\xad\xa2\x69\xe5\xcc\xf8\x29\xc0\xf2\xa8\x3b\x8d\xf9\xe3\xe6\x8f\xfa\xab\x35\x33\xed\x88\xc7\xc1\x03\xc0\x40\x00\x18\x78\xd4\xaf\xfb\xae\xa7\xaf\x3d\xea\x6d\x66\x64\xfa\xc6\x69\x16\xa6\x31\x9f\xbe\x74\x6e\x4f\xd9\x2f\xf3\x68\xf7\x8d\xd3\xd7\x4d\x3b\x7a\xf9\xba\x65\x2e\x96\xf1\x5f\x4e\x9e\x65\x16\x96\xef\x5a\xf6\xc5\xf2\x45\x0a\x7d\x34\x25\x3e\x40\x08\x04\x08\x81\x00\x1e\xf0\xa8\xf7\x98\x8b\xa5\xcf\x0a\x86\xb4\x65\x6d\x2c\xb3\xb0\xac\xe1\x65\x3d\x2c\xbd\x5a\xa7\x5a\xbc\x4d\xdf\xd6\x75\xa7\xf1\x7f\x3c\xf7\xd1\x44\x21\x16\x5a\xe1\x5b\x6f\x15\x03\x69\x7b\x14\x5d\xe8\xfb\x5d\x85\x41\xc0\x03\x3c\xaa\xe8\x8d\x75\xf2\x2d\x7d\xa3\x87\x7b\x7a\x6a\x15\xf5\xac\xb5\xbd\xf5\x76\x5b\xc3\x5b\xdf\xb6\xbe\x6d\x27\xcc\xd6\x43\x25\x4d\x7e\x4a\xe8\xb4\xd7\x72\x7a\xd1\x44\x41\xf5\x59\x1b\xc7\xbe\xfb\x96\xd9\xb1\xef\x8e\x7e\x2a\x87\x52\x85\x77\xda\x31\xfb\xc7\x5c\x1f\xfb\xee\xe8\xc9\x31\xa7\xc7\x58\x1d\xe3\x76\x76\xb5\x7b\xa7\x35\x7c\xf4\xed\xe8\xd5\x71\x1a\x9c\x02\x0a\xb4\xd7\x4e\xf5\xd0\x89\xfd\x38\x60\x80\x04\x88\x76\xad\xe1\xab\x6f\x57\xdf\xae\xd5\x7b\xf5\xf0\xea\xe1\xd5\xc3\x6b\xc6\xaf\xf1\xbc\xc6\xf3\xda\x77\xd7\xbc\x5f\xab\xf7\x66\xb5\xbf\x11\xbb\xd6\xf0\x35\xc2\xd7\x5a\xbd\xbe\xe8\x5a\x99\x77\x15\xd5\x13\xeb\xf6\x3a\x43\xae\xd1\xbe\xf6\xe6\xf5\x45\xf7\x2a\x49\xd4\x8a\x26\xba\xd0\x8d\x02\x42\x04\x83\x88\x3f\xf6\x06\x0e\xb1\x41\xd6\x6c\x43\x8b\xc2\x44\x8a\x11\x41\x9a\x7d\xd4\x3d\xa1\x25\xbd\x33\xb5\xa7\x37\xbf\x9e\xf7\x36\xbd\x61\x6a\x9f\xee\x5f\xda\x97\xfb\x57\xb5\x78\xf3\xf6\x9e\xe3\xfe\xa3\x27\xd7\x9d\xd7\x3d\x17\x52\xe0\x5b\xbd\xc0\x06\x02\xfa\x6b\x80\x7f\x8d\xde\xf5\xb3\xbf\x9d\xa5\xbc\x52\x00\x1b\x78\xb4\xfe\x7a\xfe\x94\x5a\xc2\x49\xbb\x32\x47\x60\x06\x1e\x75\x67\x6a\xd1\xdb\x3e\xbd\x67\x7a\x56\x6f\xfb\xd2\xb2\x5d\x6f\x6f\xd8\x9e\xda\xee\xd9\xde\xaf\xcf\x78\x28\x68\x81\x47\xbd\x5f\xff\xfb\x5b\x39\x7d\xe8\xff\xd0\xff\xf1\x76\x5f\xc7\x4f\x01\x0c\x3c\x1a\x28\x0c\x51\x5f\x31\xf4\x7c\x84\x6b\x63\x3e\x8c\xf6\x50\x30\x6a\x28\x33\x35\x7c\x05\xfe\xd8\xf1\x47\x70\x02\xd1\x9f\xde\x1a\xe0\x04\xa2\x8f\xed\xfe\x5d\xd7\xde\x6f\xb4\x9f\x96\x1a\x8a\xd7\x05\x38\x81\x00\x24\x10\x80\x04\xa2\x0f\x5f\x11\xad\x68\x47\x03\x4d\xf4\xdd\x59\xb0\x99\x85\xdd\x58\x38\xac\xb8\x61\x0f\xe3\x0f\x48\xb3\x43\x73\xec\x11\x9e\xf5\x15\x8a\x35\x75\xbc\x12\x9c\x40\x74\x90\x99\x5d\xb1\xa6\x1e\xc6\x1c\x30\x66\xc7\x2b\x3b\x70\xcc\x8e\x4b\x76\x5c\xb2\xe3\x86\x1d\x18\x66\x0f\x5f\x11\xd5\x5b\xeb\x3c\xee\x7b\x2a\xf5\x33\x0b\x5f\xd2\xd8\xa6\xde\xe6\xdb\xa7\x1d\x4f\xec\x19\x45\xfd\xf5\xc9\x21\x1d\x67\xfc\x29\xc9\x35\xab\x30\x97\xf7\xe8\x49\x15\xe6\x82\x1d\xd9\x73\x7b\x4a\x4f\xd2\xec\xe3\x80\x3d\x8f\x16\x7d\x98\x46\x69\xfa\xc5\x69\x7d\x4e\x63\x32\xed\x23\x1c\xad\x4f\x2b\x13\x5f\xeb\xf8\x5a\x9f\x46\x69\xea\x8f\x12\x5e\x7d\xa6\x3b\x8d\x15\x8e\xd6\xa7\x11\x9b\x66\x1c\x47\xeb\xd3\x28\x4d\xbd\x9a\xe6\x74\x9a\xcd\x69\x64\x94\xa5\xea\xd3\x9a\x9c\xd6\xe4\xb4\xa7\x96\xd5\xb8\xcc\xac\x32\x56\x00\x06\x1e\x7d\x7d\x58\x7a\xb8\xec\x9a\xa5\x87\xf8\x54\x7f\x5a\x64\x15\x28\x7b\x54\x8b\x9e\x2c\x73\xa7\xd4\x58\x5f\xc6\x6d\xe9\x95\x82\x57\x60\x06\x02\xb4\xc0\xa3\xde\x6f\xf4\x70\xb1\xbe\x8e\x5f\x31\x86\xf8\x17\x80\x81\xe8\x78\x16\x68\x81\x47\x41\xb5\xda\x3b\xdb\x09\xa6\x8c\x55\xdf\xfa\xfc\x34\xc7\xe8\x5b\x9f\x77\xd4\xb5\xfb\x8d\x24\xce\x05\x84\x20\x80\x10\x3c\xea\x1e\x27\xc0\xf6\x2d\xdb\x39\xb0\x7d\xd1\x76\x82\xe1\x71\x1d\x77\x03\x54\x10\x80\x0a\x02\x50\x41\x00\x24\x88\xbe\xad\xc9\xed\x5b\xb6\x13\x4c\x81\xb5\xbe\xcd\x02\x7e\xd7\xb7\xf1\xdf\x56\x05\x7e\xd7\xf1\xbb\x7e\xec\x2c\x5c\x0f\x50\xc1\xa3\xda\xad\x90\x63\x16\xf0\xb8\x7e\xac\x9c\xe3\x8b\x8e\x75\x72\xac\x93\xe3\xeb\x4e\xd4\x5f\x3d\x6b\xf5\x1e\x73\x74\x7c\xd1\xb1\x72\x8e\x6f\x51\x34\x0c\x74\xc1\xa3\xee\xb7\xb6\x71\xc9\x7e\x7c\x11\xce\xd8\x71\x46\x60\x06\xd1\xf1\x44\xd0\x05\x8f\xbe\x37\x5c\x67\x17\x7e\xd7\xf1\xb8\x7e\xf5\x10\xa7\xeb\x38\x5d\xbf\x66\xe1\xea\xe7\x35\xe6\x78\x5c\xc7\xe3\x3a\x1e\xd7\xaf\xbe\x5d\xab\xfa\x1a\xe7\xab\x6f\x4a\x99\xf5\x6b\x9c\xef\xf2\x57\x67\xc2\xd5\xdb\x6b\x15\x5d\x2b\xe7\xea\xe7\x3d\x0a\xe5\xbd\x15\x32\xf0\xb5\x81\xaf\x0d\x3a\x20\x18\x83\x47\xb5\x77\xed\x5d\x7b\x61\x35\x57\x91\xbd\xd7\xf3\x81\xbb\x0d\x25\xe6\x46\x4b\x7f\x4d\x2d\xe9\x1e\x65\xf7\x94\xbf\x1b\x6d\xf9\xeb\x5b\xe7\x83\x26\x08\xd2\xe0\x4f\xb1\xbe\xed\xb7\x8e\x16\xa5\xf9\xda\xa9\x16\xef\xb9\xed\x4f\x41\xbf\x76\x15\xf4\x7b\x2b\x61\xf4\x56\xd7\xeb\x51\x58\xd2\x1d\x92\x74\x1f\x75\xed\xaf\x00\x8a\xbb\x3e\x77\x7d\xc6\xdd\xc0\x15\x3c\x9a\xa8\x37\x84\x7b\xd2\x3d\xe9\x1e\xdf\x42\x5b\x1c\xf8\xdd\xe8\xca\xba\xd2\x19\x47\x5f\x9e\x5a\x5a\xb6\x7b\xb6\x37\x9c\xbf\x15\x1e\x3c\xde\x70\xfd\xca\xad\x6b\x4f\x5d\x4f\xbd\x55\x3d\xc6\x5b\x21\x03\x8f\x03\x60\x10\x83\x9e\x08\xc0\x20\xc6\x98\x5a\x46\xd1\xf7\x7e\x5a\xe1\xc0\xe9\x06\x4e\x07\xb4\x20\xc0\x15\x04\xa0\x82\x00\x54\xf0\xa8\xfb\xf5\x9f\xde\x37\xe8\x77\x60\x09\x1e\xf5\x94\x3e\xe3\x6b\x03\x5f\x1b\xf8\xda\x80\xd3\x3d\x40\x3f\x0f\x7c\x0d\x2c\xc1\xa3\x81\x2a\x6f\xdb\xb5\x5b\x1b\x85\x45\x8c\x97\x8d\x02\x85\x8e\xa8\x72\x8b\xeb\x4f\xd1\x45\xe0\xcf\x03\xda\xf0\x80\x3b\x0c\x72\xe0\x51\xf7\x2f\x2d\x46\x95\xc6\x37\xf0\x2f\xf0\x03\x01\x72\x20\xc0\x0c\xc4\xc0\xbf\x40\x0b\x7c\x4b\xec\x0e\xfa\x1d\x20\x81\x47\x27\xfa\x7e\x31\xf5\x10\x47\x1b\xf4\xbb\x41\x5b\x19\xd3\x9b\x9d\xff\x43\xb9\xc5\xa1\xd0\xdf\xa0\xb9\x0c\x9a\xcb\xb7\x44\xa4\x42\x85\x03\x2f\x18\xd3\x98\x38\xff\x25\xd9\x87\x24\xfb\x47\xdf\x53\xeb\x71\xcf\x41\x97\x91\x6a\xff\xa8\x7b\x86\x76\x23\xb3\xcc\x14\xbe\x30\xe8\x2f\x63\x59\x6f\xcb\x98\xe0\x0b\xd2\xee\x43\xda\x7d\x48\xbb\x8f\xa1\xd4\xa1\xe4\xfb\x90\x6a\x5f\x85\x2b\x1f\xf5\xfe\xad\xc5\xf8\xe0\x08\x83\x2e\x33\xf0\x82\x81\x0b\x0c\x5a\xcc\x70\xfe\x0f\xfa\xcb\xd8\xf6\xb5\x32\x89\x63\xdb\x11\x8a\x19\x8e\xad\x57\x8a\x19\x0e\xa5\x14\x87\x13\x7e\x38\xe1\xc7\xd6\x4f\x5a\xcc\xd8\x7a\x45\x8b\x19\xb4\x98\xb1\xcd\x1a\xfd\x65\x38\xe1\xc7\xd6\x37\xe7\xfc\x70\xce\x8f\x6d\x54\xb7\x7e\xd2\x71\x86\x33\x5f\x22\xfe\xa3\x5a\x6e\xb5\xbc\x9e\x1c\x5f\x21\x11\x7f\x1c\xbb\x83\xbe\x33\x9c\xff\x83\xbe\x23\x11\xff\xd1\x8e\x06\x3a\xd1\xfa\xeb\x7b\x1b\xad\x47\x82\xfe\xa3\xda\xed\x08\x27\xf9\x38\xf6\x2f\x4d\x47\xc2\xfd\xa3\xde\xa0\x3f\xce\xf0\xe1\x0c\x97\x46\x1f\xd2\xe8\x63\xd0\x4a\x24\xd0\x3f\xfa\x7a\x7b\x9f\xa4\x31\x94\x48\x1d\xd7\x9b\xaf\x99\xa2\x65\x8c\x6b\x34\xae\xd5\x75\xfd\xca\x35\x1a\xd7\xee\xa3\x77\x48\x8e\x0f\xc9\xf1\x8f\x9e\x47\xdf\xef\x4a\x91\x7f\x34\xd1\x8d\xfa\xeb\xf0\xd4\xd0\xa2\x60\x29\x9d\x22\xd8\xdf\xa2\x41\xd3\x6f\xd3\x3d\xd3\xb3\xd3\x5f\x97\x77\x2a\x73\x4a\xa7\x08\xe7\x70\x38\x87\x25\xc4\x3f\xea\xfe\xeb\x9e\xeb\xcd\x6f\x5e\x82\x66\x11\x4e\x5d\xc9\xf1\x21\x21\xfe\xd1\xba\xde\xa8\x3b\x0b\xd3\xff\x9d\xb4\x4f\x60\x7d\x34\x5d\x4f\xd4\xef\xd2\x1d\xc2\xb9\x1a\xce\x55\x89\xf2\x21\x51\x3e\x9e\x78\x81\xd6\xb5\xb7\xe9\x5b\x3f\x5a\xf4\x87\x8e\x10\x4e\xd1\xa0\x1d\x48\x79\x0f\x09\xf1\x21\x21\x3e\xa4\xc2\x47\x38\x39\xa5\xc2\x3f\xea\x9e\x70\x8f\x5e\x39\x39\xc3\xc9\x19\x4e\xce\x18\xc6\x8d\x8e\x20\x39\x3e\x24\xc7\x3f\xea\x4e\x3d\x1c\xcb\x5f\xb7\xbf\x1a\x43\xa7\x6b\x38\x5d\xc3\xe9\x1a\x74\x87\x60\x37\x0b\xe7\x6a\x40\x76\x0f\xe7\x6a\xa8\x86\xf0\xa6\x01\xd5\xfe\x4e\x8f\x80\xf4\x1e\x6a\x23\xbc\x3f\xa0\x03\x7d\x5f\x0d\xbf\x5d\xaa\xfd\xa3\x9e\x9a\xee\x99\xde\x66\x24\x43\xcf\xe3\xf1\xdf\x70\xae\x4a\xaf\x7f\xb4\xae\xfd\x55\xaf\xe2\xb8\x7e\xa7\x7d\xe4\x3b\x31\xc2\x29\x2a\xd5\xfe\xd1\x83\xbe\x7b\xe8\x08\xc1\x62\x16\xd9\xdd\x63\x35\xa6\xd5\x98\x56\x23\xeb\x99\x14\xfc\x90\x82\xff\xa8\x76\xc5\x75\xd3\x4a\x60\x4f\x93\x88\x1f\x12\xf1\x43\x22\xfe\xa3\xde\xe6\xbb\x58\xd8\x22\x7d\x17\x3b\x5b\xa4\xd5\x92\xbe\x8e\xb5\x2d\x14\x2b\x88\x42\xba\xa7\x6b\x04\xcb\x9b\x94\xfd\x47\xb5\x1c\xd4\x4a\x66\x5b\x0b\xb6\xb5\x98\xc6\x9c\xde\x21\x35\x3f\x24\xe5\x3f\xba\xd1\xf7\xeb\xec\x69\x41\x13\x09\x7a\x47\xd0\x3b\x82\xc6\xf1\x2d\x1a\xcc\x92\x16\x53\xff\xd9\xd3\x62\xfa\x0a\xda\x41\x4c\x3d\x9c\xd6\x0c\xbd\x23\x58\xcf\x62\x5a\x39\x6c\x68\x81\xe3\xc4\x7c\x67\x82\x44\xff\x47\xbd\xed\xb8\xf3\x6a\xbf\x5a\xcc\x11\xad\x44\x72\xff\xa3\x81\x2a\x5c\x6c\xbe\x70\x9f\xc0\x7d\x62\xf5\xea\x49\x47\xdd\x3f\xfc\xd5\x08\xe3\x32\x52\xfc\x7f\x8a\x1e\xd3\x44\x82\x26\x22\xdd\x3f\x82\x26\x22\xb9\x3f\x02\x97\x89\xa5\x6f\x78\x8d\x44\xff\x47\xdf\xb7\x2c\xfd\xc4\x7d\x62\x19\x6d\x9a\x48\xe0\x41\x41\x13\x09\x36\xb4\x60\x31\x8b\x6d\x54\xb7\x75\xf2\x2d\xb6\x6c\x3c\xb7\xf1\xc4\x7d\x82\xc6\x11\x78\x50\x28\xaa\x1f\xcb\xbc\xb0\x98\xc5\xd6\xb7\x2a\xd1\x4c\x83\x50\x60\xfc\x51\x7f\xad\x3e\x98\x71\x5a\x43\x1c\xe3\x73\xac\xe4\x63\x94\xd8\xca\xc0\x12\xbc\xad\x80\x5a\x75\xc7\x98\xb0\x89\x7d\x8b\x3f\x1f\x63\x42\xe6\x07\x00\xf0\xa8\xbf\x3a\xa3\x68\x01\x00\x00\x1e\xf5\xd7\x2a\x1c\xad\x57\x6c\x65\x41\x2f\x00\x0f\xf0\xe8\x44\x55\x3b\x31\x77\xac\x64\xc0\x00\x22\xf0\x9a\xb8\xd6\xe4\x55\xa2\xe5\xea\x27\x5b\x59\x5c\xfb\xeb\x3a\x07\xf0\x9d\xb8\xf6\x11\x0b\x58\x5c\xbb\x43\x59\x63\xa9\xff\x8f\x7a\x8f\x55\x77\xf5\x5f\x21\xeb\xc0\x8f\x02\x27\x0a\x16\x30\x30\x00\x8f\xfa\x45\xb3\x59\x5c\xe9\xde\x6a\xb9\x9f\x00\x09\x10\xd9\x5e\xdf\xaa\xc4\x77\x15\xeb\xfe\x16\xc1\xe6\x0f\xfa\x96\xbf\xe6\x15\xaa\xc2\xce\x89\x77\x28\x89\x1c\x55\x12\x59\xf9\xe2\x77\xcc\x34\xd4\xb3\x53\xcb\xd2\xb2\xdc\xb9\xbc\x61\x7b\xff\xf6\x86\xa3\xfd\x78\xc3\xf1\xd7\xe3\xa9\xb7\x53\x92\xa6\x90\xed\x7a\xdb\xd5\xae\xcf\x78\x56\xb2\x86\x25\x9e\x95\xfd\x9d\x57\x89\x5b\x25\x6e\x95\xb8\x55\xd2\x11\xfe\x94\xf8\xce\xbf\x0a\x7d\x2b\x5e\x42\x2f\xc8\xee\x2b\xf0\x32\xf0\x03\x01\x78\xe0\xd1\x85\x9e\x6f\x61\xf0\x47\xbd\x73\xa1\xdb\x1b\xb6\x37\x6c\xcf\x6e\xf7\x6c\xef\x3f\xda\x7d\x1d\xad\x21\xfb\xa9\x76\x6f\xf3\x45\x34\x88\x64\x19\x4b\xfa\x42\x8e\xb7\x66\x92\xbf\x29\xd9\xc7\xb2\x0a\xad\xd0\x20\x00\x15\x44\xe2\x7a\x39\xaa\x44\xb9\xd9\xe1\x45\x4a\x1c\x30\x79\x91\x12\x1f\x4c\x56\xb2\x1c\x2a\x83\xd0\x1a\x52\x05\x10\x00\x06\xef\x6d\xae\xcd\x08\xde\x97\x6c\x65\x89\xeb\xe5\x30\x3b\x38\x5d\xd2\x23\x72\xe8\xf3\xb8\x20\x94\xf4\x99\xee\x90\x51\xa0\x4a\xfa\x8c\xdf\x25\xcb\x58\xb2\x8c\x25\x7e\x97\xec\x63\x40\x0e\x02\xb0\xc1\xa3\xee\xf4\x15\x34\x8b\xe4\x45\xca\xaa\x65\xf2\xad\x6a\x32\xdd\x69\xfd\xb0\x89\x81\x34\x78\xd4\x5f\x97\xbf\x9a\x05\xde\xa2\x54\xd2\x3c\xc3\x38\xd3\x29\x00\x18\x3c\xea\xd9\xeb\xcd\xef\xa4\x05\x66\xf0\x68\x47\x07\x1a\x68\xa2\xaf\x6f\x78\x62\xe2\x89\x99\xfa\x8f\x1b\x82\x37\x78\xf4\xfd\x56\xea\x27\xbe\x96\x38\x5a\xe2\x68\x89\xa3\x25\x8e\x96\xac\x67\xc0\x0c\x1e\xf5\x1e\x23\x9c\xd6\x49\x5a\x27\x6c\x68\xc0\x0c\x1e\x75\xff\xa9\xbf\x7a\xcf\xf1\x7e\xab\x45\xd1\x75\xf0\x06\x8f\xbe\xf6\xe9\x2b\xa6\x75\x82\xdf\x25\x7e\x07\xf0\x20\x72\xea\xf3\x1c\xda\x8d\x3c\x9b\x5b\xe2\x7d\xc9\xda\x06\x92\x21\x80\x19\x04\x30\x83\x00\x66\xf0\x98\xb3\x16\xfd\xc7\xe3\x92\x9e\x95\x34\xac\xa4\x61\x25\x3f\x51\xd2\xb3\x12\xd7\xcb\xa9\xff\x2c\x6f\x89\xd3\x25\xfb\x1b\x78\x83\x00\x69\xf0\xe8\x42\x37\xfa\x9e\x5d\x56\x3b\xee\x96\xbc\x45\x89\xdb\x82\x3a\x78\x54\x89\x21\x5f\xb1\xec\xf1\x65\xfd\xd0\xbf\x00\x1e\x44\xd2\xb6\x40\x1d\x04\xa8\x83\x47\x3d\xbb\x8b\xfa\xab\x9e\x2f\xa3\x8d\xbb\x25\xee\x96\xb8\x5b\xf2\x16\xe5\xaa\x7e\x1a\xe7\x65\x9c\x97\x71\xa6\x7f\x25\xcd\x2b\x69\x5e\x89\xcb\xa4\x92\xfe\xa0\x11\x1e\x55\x89\x47\xff\xd9\xe5\x40\x23\x3c\xea\x7e\xbb\x95\x5d\x0e\x34\xc2\xa3\xda\x9d\x42\x34\xb2\xa4\x91\x01\x45\x88\xdc\xbe\x62\xfb\x0a\xda\x19\x68\x84\x48\x7e\xa5\xdc\xbe\x65\x5b\x45\xf4\xb2\xdc\xc6\x9f\x46\x96\xdb\x5e\xa0\x91\x81\x46\x88\x54\x88\x1e\x28\x42\x00\x45\x88\x64\x7f\xcb\x63\xe5\x1f\xfb\xf7\x98\x85\x63\xcd\xe3\xa4\xc9\xeb\x94\xc7\xf8\xd3\xc2\x92\x16\x96\x2c\x72\x49\xff\x4a\x36\x37\x90\x09\x8f\xba\xc7\x89\x74\xac\x2b\x9e\xa9\x64\x91\x03\xa2\xf0\x68\xfd\xd5\x1b\xac\x37\xdc\x19\x4c\xc2\xa3\xee\x59\xd5\xee\xd7\x7d\xe9\xb1\xd2\xf0\xe2\x3c\xbe\x91\x4e\x97\x78\x31\xb0\x84\xc8\x63\xd5\x1d\x33\x7b\x7c\x2f\x8d\x0f\x7c\x42\x80\x4f\x78\x34\xd1\x85\xbe\x67\xf9\xb0\x12\x77\x4e\xdc\x39\xf1\xe5\xbc\xd6\xd8\x35\x47\xf8\x72\xb2\xdd\x25\x4d\x30\x79\x9d\xc0\x27\x3c\xea\x59\x3b\x82\x7f\x0a\x70\xc2\xa3\xeb\x13\xb0\x11\x02\x36\xc2\xa3\xd5\x72\x1e\xed\x45\xef\xa3\x6f\xb5\x4c\x5e\xa7\x49\x07\x84\x96\x10\xd0\x12\x1e\xdd\x8f\x86\x96\xf0\x54\x6a\x99\x5a\x14\xdb\xe2\x63\x82\x8a\x10\x70\x12\x62\x8a\xcd\x98\xf8\xec\xc4\x55\x67\xab\xfe\x1c\x77\x5e\x7f\x7d\xa3\x34\x45\x65\x4c\xfe\xa6\x89\xb3\x4f\x1c\x76\xf6\x37\x56\xb3\x77\xd7\x6f\x94\x26\xbb\x1c\xe4\x84\x47\xb5\x8c\x6a\x99\xe8\xfb\x16\x3c\x77\xe2\xb6\x93\x2d\x6e\x8a\xdf\x98\xb8\xed\xc4\x6d\xe1\x2a\xc4\x64\x85\x83\xab\xf0\xa8\x67\x97\xbf\xea\x7f\x5f\xda\x97\xf6\xed\x9d\xdb\xfd\x5b\xcb\x71\xe7\x71\x8f\x2f\xea\x47\xbb\x2f\xc2\x5b\x27\xeb\x1c\xa4\x85\x98\xe3\xed\x56\xe8\x0a\x8f\xbe\x76\xd1\x1a\x13\x1f\x9c\x74\xcc\x89\xc3\xc2\x5b\x08\x78\x0b\x8f\x6a\xaf\xd2\x66\x8a\x9b\xf1\x34\xc1\x61\x78\xf4\xfd\x0a\x5d\x12\xd2\xc2\xa3\x5a\x8c\xf3\xd0\x2b\xf6\x37\xd8\x0b\x8f\x4e\x74\xa3\xaa\x75\xe9\x8f\xf2\x6b\x13\xc7\x9c\x78\xe5\x64\x79\x9b\x2c\x6f\x90\x19\x1e\x75\xa7\x35\x80\x4b\x4e\x5c\x72\x2a\xbd\x36\xab\xf8\xda\xb7\x02\xd8\x74\xad\x57\xf8\xe6\xc4\x37\xa1\x34\x3c\x15\xc7\xfb\xb7\xf6\xed\x0d\x47\xcb\xf1\x4e\x63\x88\x7b\x4e\x7c\x73\xf2\x28\xc1\x70\x78\xf4\xfd\x15\xdf\x9c\x34\xca\x99\xd6\x33\x2d\x12\x6e\xc3\xa3\xda\x8d\x30\x4f\xd3\xc4\x3d\x27\x2d\x72\xa6\x15\x92\x46\x18\xf7\x84\xd8\xf0\xe8\x46\xfd\x55\x01\x39\x1e\xa8\x89\xab\xce\x34\xce\x59\x45\xe5\xac\x93\xf4\x5d\x7c\x52\xd0\x1b\x1e\xd5\xb2\xdd\x6f\xcd\xa7\x75\x82\xc3\x4e\xfc\x74\xe2\xa1\xd0\x1b\x02\x6e\xc3\xa3\x81\x6a\xb1\xce\x45\x65\xcc\xe9\x2b\xc4\x63\x4c\xde\xab\x49\x73\x9c\x78\xe8\xe4\xc3\x9a\x7c\x58\x50\x1d\x1e\xd5\x92\x5a\xac\x73\x5a\xe4\xe4\xb7\x9a\xfc\x56\xf0\x1c\x02\x9e\x43\x4c\x76\x4b\xa8\x0e\x8f\x6a\x3f\x9e\x35\x0b\xe2\x2b\x26\x1e\x3a\xf1\xcd\xb9\x8c\x39\x6b\xe4\xa4\x09\xce\x55\x3d\xb4\xda\x71\x43\x48\x0e\x8f\xba\x4e\xed\x55\x8a\xcf\xaf\x2f\xab\x17\x97\x9c\x22\x2b\x26\x6d\x71\xd2\x0d\xe7\x32\x92\x34\xc4\x89\x57\x42\x78\x78\xd7\x5a\xf4\x0a\x97\x9c\x74\xc0\x89\x0f\x4e\x3a\xe0\xa4\x03\xce\x6d\xf4\x70\x40\x88\x0d\x8f\xbe\x77\xe2\x80\x70\x1b\x1e\xd5\xa2\x9f\xf8\xe0\xe4\x8d\x9a\xbc\x51\x90\x1c\x62\x8a\x3a\x80\x4e\x10\xd3\xb9\x0d\xa3\xe0\xd1\xf7\x5d\xce\xea\x79\xfd\xca\x35\x02\x62\x0f\xa6\x13\x1b\x5e\xc1\xa3\x89\x7a\x83\xf9\xe2\x91\x99\x62\x0f\xe0\x18\xbc\x6b\xd4\xaf\x5f\xbf\xee\x6c\x9f\xfc\x32\x93\x5f\x66\xf2\xc8\x4c\xbe\x98\x49\x0b\x83\x6c\xf0\xe8\xeb\x21\x2f\xcc\x74\xe6\x4f\x5e\x98\xe9\xcc\x9f\x75\xe6\x5f\xeb\xed\x1a\xb1\x6b\x06\xe9\x5c\x4b\x04\xc2\x72\xb6\x2f\x67\xfb\x12\x4b\xb0\x9c\xea\xab\xbd\x95\xb3\xe8\x53\xf0\x0d\x62\xb1\xf2\xad\x36\xb5\x4c\x2d\xff\x17\x7b\xe7\xb6\xab\xc9\x6d\xdc\xfb\xfb\xfd\x18\xba\xda\x06\x28\xa0\xc9\x22\xeb\xa0\x57\x11\x74\xe1\xad\x1d\xc0\x83\xc8\x16\x60\xd9\x70\x82\xd8\xef\x1e\xfc\x7f\xec\xef\xb0\x4e\xe3\x35\x1e\xc1\x59\x49\xbe\x9b\x9a\x35\x6c\xb2\x3f\x76\x77\x75\x9d\xfb\x5f\xce\x1c\xe7\x0c\xe2\x22\xc7\x9f\x02\xd9\xc0\xfc\x10\x17\x39\x5e\x95\x23\xf3\x1d\x69\xef\x47\x72\xfe\xe2\x6c\xc5\x78\x31\xae\x37\x1a\xdc\x03\x73\xea\xee\xbc\xd3\xa6\x91\x6c\x8b\x23\x39\x41\x0c\x30\xb0\x02\x44\xf5\x5b\x54\xb8\x39\x51\x38\x47\x66\x82\x00\x20\xca\x7c\xdd\x55\x27\x7f\xe1\x44\xe1\x1c\x69\xe9\x48\x4b\xbe\xfd\x37\x27\x47\xcf\xf7\xfe\xc6\xf7\xfe\xc6\xf7\xfe\xa2\xcc\x0c\xc6\xb9\x22\xaa\xd4\x9c\x68\x9b\x23\x4b\xf9\xea\x5f\x94\x99\x5c\x0b\x79\x0d\xa7\xc1\xa5\x9b\xb8\xc5\x91\xb4\x8e\x57\xe2\x48\x5a\xa7\xdb\xa2\x23\x6f\xf9\xf6\x5f\x94\x39\xe2\x13\x47\xc6\x3a\xd9\x0d\x47\x92\x3b\xfe\x88\x13\x9d\x73\x5a\x5d\x3a\xd2\xd5\xc9\x74\x38\x0d\x2e\x9d\x4c\x87\x23\x6f\x41\x4e\x10\x65\x0e\xcf\x05\xaf\xc4\x6d\x9f\x8d\x67\x81\x87\x02\x6e\x80\x39\x32\xd6\xf1\x50\x1c\x89\xea\xf8\x20\x8e\x44\x75\x22\x75\x4e\xa4\xce\xf1\x47\x9c\xac\x87\x23\x57\x9d\x18\x9d\xcf\xb1\x29\x47\x25\x8b\x1c\xb9\xea\x64\xf3\x9d\x28\x1c\x38\x03\xa2\x0b\xba\xc7\x99\xbf\x98\xcf\xfe\xf1\x53\xc0\x1f\x10\x65\x95\xb3\x0a\x1e\x23\xd7\xef\xc8\x55\x9f\xc1\x08\xdc\x85\xcf\xe2\xf8\x26\x8e\x57\xe2\xc4\xe2\x1c\x7f\xc4\x89\xc5\x39\x72\xd5\xa9\x79\x03\xa9\x40\x74\x42\x19\x19\xcc\xe4\x29\x20\x5d\x1d\xdf\xc4\xf1\x4d\x9c\x0a\x37\x47\xae\x82\x5a\x60\xa0\x16\x88\x72\xce\xc9\xd1\xdd\xd1\x72\x31\x87\xfd\x23\x63\x1d\xe9\xea\xc4\xdc\x1c\x29\xea\xd4\xaa\x81\x48\x20\xaa\xf9\x48\x54\x27\xe6\xe6\xc8\x5b\x30\x0a\x0c\x8c\x02\x03\x9d\x40\x54\xbb\x22\xc2\xe6\x78\x1f\x4e\x55\x80\x53\xbd\xe6\xc8\x5b\x27\xfb\xe3\xe4\x7d\x9c\xea\x35\xa7\x42\xc0\xa9\x61\x73\x67\xb7\x78\x28\x8e\x04\x06\xdf\x40\x94\xb3\x71\xe7\x91\xb4\x4e\x56\x08\xac\x03\x51\x7e\x97\xab\x40\x1a\x83\x6f\x20\xca\x3e\xe1\x1f\xdf\x7b\xe6\xea\xf0\x65\x40\x3c\x30\x10\x0f\x44\x75\x86\xe0\x1a\x91\xd8\xe0\x1e\x98\x93\xdf\x71\xa2\x6d\x4e\x06\xdf\x83\x5f\xc1\xa7\x00\xa9\xc0\xc0\x22\x30\x27\x83\xe3\x54\xa9\x81\x45\x60\x4e\xee\xc6\xf1\x1a\x9c\xdc\x8d\xe3\x2f\x80\x4e\x20\x6a\xd0\x3d\xce\x7c\x9e\x32\x79\x1c\x30\x0a\x0c\x74\x02\x51\xe6\x70\xc7\xf0\x05\x9c\x18\x1d\xe8\x04\xa2\x13\xca\x08\xf7\x04\x5f\xc0\xc9\xec\x38\x95\x6c\xa0\x10\x98\x63\xf9\x3b\xd6\xbe\x63\xd5\x7b\xf1\xd6\xa3\x23\x1c\x0b\xdf\xb1\xf0\x1d\xdd\xe1\xe8\x0b\xc7\xc2\x77\xb4\x86\xa3\x23\x40\x24\x10\xd5\x99\xd1\x08\x8e\xe4\x77\x24\xbf\x13\x6d\x73\x64\x3e\x58\x04\xe6\x58\xfb\x8e\x9d\x0f\x16\x81\x81\x3c\x60\x5e\x92\x96\xf1\x2f\xd6\x0c\x98\x01\xd1\x09\x75\x68\x8a\x76\xc6\xb5\x91\xa0\x10\x3b\x48\xfe\x04\x4e\x40\x50\x88\x1d\x28\x07\x00\x09\x44\x19\xd7\xa6\x82\x60\x5b\xa0\x1c\x82\xa2\x33\x60\x09\x0c\x28\x02\x03\x72\x40\x7f\x33\xbe\x58\xe5\xac\x12\x73\x01\x51\x60\x40\x14\x18\xb0\x04\xa2\xcc\x49\xe6\xd0\x55\x97\xf0\x5b\xa0\x34\x02\xa5\x11\xb8\x08\x41\x71\x77\xe0\x04\x04\xea\x22\x48\xd4\x07\xce\x41\x50\xb2\x0d\x80\x81\x01\x60\x60\x81\x73\x10\x14\xa3\x01\x60\x20\xea\x50\xe6\x18\x6b\x8d\x11\xae\x0b\x87\x20\x08\xbf\x05\xe1\xb7\x20\xf0\x16\x04\xde\x82\x74\x7d\xf4\xc5\x1c\x3d\x90\xc0\x5d\x08\x02\x72\x81\xd3\x10\x9d\x6b\x24\xc5\x14\x24\xf0\x03\xa7\x01\xf0\x03\x51\xe6\xd3\xc0\x96\xe0\x5c\x50\xb6\x16\x14\x80\x07\x81\xba\xc0\x81\x00\x0e\x41\x94\x55\x5c\xe9\xe0\x4a\x09\xcb\x01\x84\x60\x00\x21\x88\x76\x28\xe3\x5c\x2f\x2a\x31\x48\xe9\x03\x7e\x60\x81\x02\x04\xfc\x40\x94\xa3\x93\xa3\x8b\x71\x9e\x1a\x8a\x31\x28\xeb\x06\x14\xc1\x00\x45\x30\x40\x11\x44\xf7\x38\xab\xb8\x16\xc2\x72\x80\x22\x88\xf2\x2b\xc9\x08\x7b\x46\x31\x02\x90\x20\xca\x51\x58\x12\xc5\x18\x24\xa9\x02\xf5\x08\x64\x82\x68\x42\x19\xe7\x8a\x48\x52\x05\xee\x48\x10\xc6\x0b\x42\x74\x81\x7a\x0c\x9c\x0f\x80\x13\x44\x59\xcb\xd5\xe1\x7c\x00\x99\x60\x81\x7a\x0c\x0a\x01\x00\x4e\x30\x80\x13\x44\x99\xc3\xf3\xc2\x35\x09\x12\x59\x40\x29\x88\x32\x1e\x8c\x04\x67\xa0\xeb\x33\x65\x6e\x41\x99\x5b\xec\xde\xcf\x14\x0e\x04\xce\x4a\xa0\x54\x03\xa5\x0a\xe8\x82\x05\x2e\x0b\xa0\x0b\x06\xe8\x82\x01\xba\x60\x41\xc0\x2f\x08\xef\x05\x8e\x4b\xe0\xb2\x04\x41\xbe\x40\xb5\x06\xee\x4b\xa0\x60\x81\x5e\x10\x65\x1c\x4e\x46\xd9\x06\xca\x36\x50\xb6\x40\x32\x88\x32\xc7\x98\xc3\x73\xa7\x8c\x2e\x08\xaa\xc5\xe4\xfe\xa0\x8a\x01\x69\x10\xe5\x3c\x70\xf5\xe4\x5e\xe1\xe2\x00\xdb\x20\xca\x51\xde\x53\xd4\x6f\x90\x04\x8b\xdd\x0f\x1b\x17\x27\x50\xc8\x41\xf8\x30\x70\x71\x80\x73\x10\xe5\x8a\xb8\x1b\xb8\x3b\x40\x3b\x58\x90\x28\x8b\xc9\x3d\xc1\x01\x0a\xd4\x75\xe0\x06\x01\xf9\x60\xb1\xb8\x3f\xa8\xee\xc0\x25\x0a\x12\x68\x41\x58\x31\x50\xda\x80\x40\x18\x20\x10\x06\x08\x84\x28\x23\xdc\x13\x42\x89\x41\x1a\x2d\x70\x83\x02\x37\x08\x88\x08\x51\xce\xc0\xb5\xa3\xb4\x81\x88\x10\xe5\x6c\xf0\x03\x05\xe9\x41\x7a\x0d\xa0\x08\x03\x28\x42\x94\x55\xbe\x67\xf2\x5b\x34\xa7\x26\x18\x19\xb8\x50\x81\x0b\x15\x84\x24\x01\x93\x10\x65\x26\x77\x86\x44\x1c\x90\x12\xa2\xcc\xe4\xfe\xa0\xf6\x83\x20\x65\x60\x20\x00\x32\x61\x80\x4c\x88\x32\x87\xfb\x43\xd8\x32\x30\x19\x82\x04\x5d\x50\x2a\x12\x84\x30\x03\xc3\x21\x70\xce\x02\xe7\x2c\x30\x1c\x82\x22\x91\x20\x60\x19\x98\x0c\x81\xc9\x10\x94\xbd\x07\x26\x43\x60\x26\x84\xf3\xee\x60\x20\x00\x47\x61\x81\x69\x00\x1c\x85\x01\x47\x21\xba\xc7\x99\xcf\xdd\xa0\xb4\x30\x08\x70\x02\x50\x21\xca\x99\x79\x3b\x48\xeb\x01\x56\x61\x80\x55\x58\x90\xb8\x0b\x5c\xb7\xc0\x75\x0b\xc2\x96\x81\xd3\x16\xc1\xce\x71\xda\x82\x42\x92\x20\x84\x09\x58\x85\xa8\xce\x83\xeb\x16\xb8\x6e\x41\x8a\x0f\x98\x0a\x51\xed\x87\x40\x66\xe0\xc6\x05\xe9\xbe\x20\xdd\x17\x94\x16\x06\x49\xbf\x20\xcc\x19\x94\x9c\x00\x65\x61\x40\x59\x58\x10\xec\x0c\x82\x9d\x41\xb0\x13\x40\x0b\x0b\x52\x82\x00\x5a\x88\x72\x66\x9e\x32\x21\x4f\x20\x2e\x44\x39\xdb\xbe\xc6\x62\x3e\xcf\x91\x60\x27\x70\x17\xa2\x9a\x8f\x09\x13\x84\x3c\x83\xc2\x93\xc0\x6c\x09\xca\x4f\x02\xb3\x25\x30\x70\x82\x60\x27\xd0\x17\xa2\xda\x21\x25\x27\x91\x3c\x47\x4a\x11\x83\x90\x67\x60\xd4\x04\x46\x4d\x50\x8a\x18\x04\x3b\x03\xa3\x26\x92\x67\x8a\x51\x03\x60\x86\x01\x92\x61\xc0\x63\x88\x32\x93\xab\xa0\xe4\x30\x48\x39\x06\xc9\x46\xe0\x31\x44\x59\x05\xaf\x12\xe0\x04\x1e\x43\x94\x5f\x84\x4b\x71\x94\x03\x47\x39\x8a\xab\xc3\xe4\x09\x12\x8f\x40\x68\x18\xb0\x19\x16\x14\xb9\x04\x45\x2e\x41\x68\x33\x48\x3c\x06\x0e\x71\x60\xfe\x44\xf1\xbc\x28\x4b\x0c\x5c\xe1\xc0\x20\x0a\x0c\xa2\x20\x15\x19\x98\x45\x40\x68\x58\x50\x14\x13\x14\x24\x06\x06\x51\x50\x08\x13\x98\x45\x81\x2b\x1c\x24\x1e\x03\x57\x38\xb6\xa1\x54\x3c\x11\x92\x90\x80\x6d\x88\xd2\x5c\x5e\x5c\x97\x58\x44\xc0\x3f\x88\x2e\x51\x71\x42\xf2\x01\x53\x92\x98\x4a\x1c\x35\x00\x21\x44\x35\x4e\x98\x2d\xd1\x71\x49\x7a\x2a\x71\x04\x93\xd2\x36\x80\x22\x44\xf7\x08\xf3\x25\xdb\xd3\x06\x7f\x1b\x73\x8c\x39\xc6\x9c\xc9\x79\x26\x73\xe6\x1e\x09\xd1\xc5\xf8\x62\xe6\xe2\xe8\xe2\xa8\xf3\xeb\xce\x51\xdf\x23\x9c\xd9\x59\x25\x7e\x4e\x5c\xc3\xc4\x35\x04\x10\xc2\x12\x6d\x92\x68\x90\x44\x83\xe4\xd4\x73\x01\x28\xc2\x12\x07\x2e\x71\xda\x92\x90\x58\xa2\x29\x92\x60\x18\x70\x11\x06\x5c\x84\x25\x6e\x1c\x80\x10\xa2\xcc\xa1\x59\x3f\x69\xa5\x44\x2f\x24\x7a\x21\xd1\x0b\xc0\x45\x18\x50\x10\xa2\x3a\x4a\xa0\x0b\x10\x08\xd1\x3d\xc2\x1c\xf6\x49\xb8\x2b\x71\xd1\x72\x49\x0e\x24\xa1\xaf\xc4\x2d\x4b\x3e\x39\x4a\xa4\x3a\xb0\x10\xa2\xac\xe2\x09\x22\xc9\x01\x84\x10\x65\x9c\x3b\x80\xc4\x4e\x64\x75\xf2\x69\x51\xe2\x90\x25\x9f\xfc\xee\xc4\x35\x30\x0f\x06\xcc\x83\x25\xe9\xa0\x24\x1d\x94\xb8\x65\x49\x69\x76\x12\xf4\x4a\xdc\xaf\x24\xe8\x95\xce\x3d\xe1\xe3\x21\xe0\x1f\x0c\xf8\x07\x4b\x4a\x1e\x12\x09\x09\xcc\x83\x28\x73\x8a\x55\xc5\x4c\xbd\x59\x89\x84\x04\xf8\xc1\x32\xf8\x5d\x42\x59\x49\x91\x75\x92\xc0\x49\x64\x60\x22\xf7\x12\xb9\x07\xf0\x83\x01\xf9\x60\x40\x3e\x58\x52\x40\x9d\x48\xb9\x44\xb2\x01\xf9\x60\x89\x4c\x4b\x5c\xae\x44\xa6\x25\x45\x76\x19\xdc\x0d\x24\x5b\x92\xcc\x49\xe4\x5b\x22\xd3\x80\x7c\x30\x20\x1f\x44\x03\xaa\xf9\xb8\x62\x89\x1c\x4b\x12\x38\x89\x34\x4b\x24\x58\x22\xbb\x12\xa9\x95\x48\xad\x44\x52\x25\x45\xd3\x89\x2b\x96\xa4\x71\x92\x74\x4d\x92\xa8\x49\x9c\xb3\x24\x51\x03\x50\x84\x01\x14\x21\xca\x79\xb8\xae\xe4\x59\x23\xd3\x32\xe1\x40\x92\x39\x89\x7c\x4b\x92\x39\x49\x91\x75\xe2\xc0\x25\xa5\x16\x89\x1b\x97\x14\x5c\x24\x65\x7a\x49\xc1\x45\x22\xfd\x32\xb9\x1b\x48\x45\xc0\x27\x2c\x29\xaf\x48\x64\x1d\x80\x13\xa2\x06\x9d\x50\xed\x13\xf9\x06\x10\x85\x25\x92\x2d\x29\xac\x48\x8a\xfb\x00\xa5\x30\xe0\x28\x0c\x08\x0a\x51\x46\xe6\x1e\x61\x3e\x9c\x83\xac\x03\x9a\x42\x94\x73\x72\x5d\x48\xbc\x24\x04\x98\x14\x62\x27\xb2\x31\x09\x04\x26\x72\x2f\x91\x7b\xb9\xf9\x96\xe0\x5f\x56\x71\x94\xfd\x23\xf1\x80\xac\xb0\x42\xe2\x01\x5c\x61\x80\x55\x88\x32\x22\x19\x55\x14\x06\x02\x5c\x61\x00\x57\x18\xe0\x13\xa2\x0b\xea\x50\x8e\x16\x67\x28\xc6\x8b\xf1\xda\xe3\xfa\x15\x3c\x35\xa0\x29\x44\x19\x91\xd6\x2b\x3e\x1e\x2a\x4a\x21\x80\xa0\xb0\x22\x39\x03\x10\x85\x28\xab\x26\x73\x74\x37\x8a\x52\xbe\x22\x09\x53\x78\x52\x40\x53\x58\x51\xda\x50\x24\x5e\x8a\x4f\x7f\x00\xa8\x10\x9d\x50\x8e\xb2\x2b\xfc\xa9\xa2\xb8\xaf\x08\x22\x02\x59\x61\x85\x27\x55\x78\x52\xc5\x47\xb4\x45\xa1\x1f\xc0\x15\xa2\x1c\xd5\x73\x2c\xc2\x8d\x40\x59\x88\x32\xd3\x38\x9b\xb8\xba\x28\x7c\x28\x0a\x1f\x00\xb7\x10\x65\x15\x57\x41\xea\xa6\x08\x3d\xd6\x58\x9c\x61\x31\xd3\x99\xe9\x1c\x75\xce\x23\x8e\x2d\xd3\x9b\x0e\xec\x84\xa8\xe6\x53\xa4\x50\xe8\x82\x42\x17\x14\x89\x97\xc2\xeb\x29\x74\x41\xa1\x0b\x80\xa3\x10\x65\x9c\x73\xe2\xdd\x14\x05\x7a\x85\x2f\x03\x10\x85\x28\x67\xe0\x39\x12\x0e\x2c\x12\x2c\x45\x49\x42\x11\x0e\x2c\x7c\x96\x22\x10\x58\x78\x2b\x00\x54\x88\xea\x57\x48\xad\x14\xde\x4a\x51\x92\x00\x70\x85\x01\x5c\x61\x40\x56\x88\x32\xce\x3d\xa1\x40\xaf\xf0\x44\x0a\xbf\xa3\xd0\x23\x80\x55\x18\x60\x15\x56\xe8\x91\x22\x10\x58\xf8\x1d\x40\x56\x88\x72\xb6\xe0\xfc\xc1\x7c\xae\x05\x9f\x02\xc8\x0a\xfd\xcd\x4e\xe0\x40\x3c\x8b\xc2\xb3\x28\x92\x2d\xb5\x24\xbb\x8a\x02\xbd\x42\xef\x00\x5f\x61\x45\x12\x03\x40\x08\x03\x10\xc2\x00\x84\x30\xa0\x20\x44\x27\x74\x41\x1d\xca\x51\x38\x07\x7b\xbb\x08\xd7\x15\xe5\x03\x45\x41\x59\xa1\x23\x8a\xa0\x5d\x11\xb4\x2b\x6c\xef\xc2\xf6\x06\x1c\xc2\x00\x87\x10\x65\x3e\x3c\x4f\xda\xa4\x08\xd7\x15\xd6\x78\x61\x8d\x17\x45\xdc\x80\x43\x58\x61\x99\x17\x21\x3a\xc0\x21\x44\x39\x43\x30\x33\x38\x03\x77\x89\x70\x5d\x39\x77\x89\x0f\x55\x0b\xed\x53\x68\x1f\x00\x24\x0c\x00\x09\x51\x7e\x91\x7b\x88\x0e\x2a\x82\x79\x00\x48\x88\x32\x93\xfb\xc3\xc7\xac\x45\x48\xaf\xd0\x50\x85\x86\x2a\x92\x30\x85\x3d\x5f\x14\x20\x00\x23\x21\xca\x1c\x69\x6d\x20\x25\x44\x19\xb7\x3d\xce\x5a\xee\x03\x5a\xac\x82\xab\x46\x67\x15\x1f\xfd\x14\x21\x43\xe0\x22\x0c\xb8\x08\x03\x2e\x42\x74\x42\xf7\x88\x76\x8e\xce\x2a\xca\xf7\x0a\x9d\x55\x94\x21\x14\x96\x79\x51\x86\x00\x98\x84\x15\x56\x7a\x61\x9f\x17\xc5\x08\x40\x4a\x18\x90\x12\xa2\x1d\x1a\x50\xad\xc2\x56\x2f\x6c\xf5\x42\xc7\x15\x3a\xae\x28\x52\x28\x34\x5d\x11\x6e\x2c\xc2\x8d\x45\xd9\x38\xe0\x13\xa2\x1c\xe5\xb9\xa3\xf5\x0a\xad\x57\x68\xb7\x42\xbb\x01\x32\x61\xc0\x4b\x18\xc0\x12\x06\xb0\x84\x28\x33\x79\x17\xd0\x65\x80\x49\x88\x32\xce\x7b\x81\x46\x03\x52\x42\x94\xf3\xf0\xc4\x93\x6b\x27\x48\x59\xe8\x2f\x20\x25\xac\xb0\xd5\x0b\xfd\x55\x58\xe9\x85\x7d\x0e\x98\x84\x01\x26\x61\xc0\x48\x58\x91\xce\x2a\x82\x94\x80\x49\x88\x32\x0e\x3f\x93\xce\x02\x52\x42\x94\x33\x73\x5d\xe8\x32\xc0\x24\x44\x99\xc3\x55\xa0\xc5\x8a\x12\xc2\x42\x97\x15\xd6\x7b\x11\xda\x04\x70\x42\x94\xa3\x3c\x59\x52\x5b\x45\x98\xb3\xb0\xed\x8b\x02\x43\x20\x28\x44\xd9\x09\xcf\x91\xd2\xc2\x92\x55\x3f\x0f\xe9\x35\x51\x83\x4e\xe8\x82\x96\x68\x3f\xa0\x8c\x77\xc6\xbb\x43\x39\x3a\x38\x3a\x06\x94\x39\x83\x73\x0e\x8e\x1a\x47\x8d\xf3\x1b\x6b\x27\x7f\xcf\x3d\x3f\xf9\x9b\xdf\x9d\xcc\x9c\x9c\x79\x32\xbe\x18\x59\x1c\x5d\xac\x5d\x3a\x67\x77\xcd\xe9\xa1\x39\x3d\x0d\xaa\xa3\x83\xfd\x4b\x8b\xe9\x6f\xcd\x1c\xec\x76\xb0\xdb\xc1\x3e\xa5\x9b\x44\xf5\xeb\xd2\x3b\xf3\x18\xfc\xee\x60\x3f\x83\x9d\x8c\xc9\x19\xf8\x75\xe9\xa0\x09\x6c\xc3\x04\xce\x61\x02\xe7\x30\x81\x73\xd0\x38\x23\xec\x67\x04\xbf\x15\xfc\x9d\xba\x03\xa3\x58\x55\x9c\xa7\x98\x59\x7b\x9c\x33\x94\xce\x60\xdc\x6d\xe3\x0e\x5b\xef\xd0\x05\x75\xa8\x66\x4a\xaf\x4d\x60\x1b\x44\x19\xe7\xae\xca\xeb\x11\x65\xdc\x98\xc9\x15\x19\x77\xd8\xb8\x22\xe3\x8a\x8c\x2b\x32\xf6\x2f\x4f\x67\x02\xed\x20\xca\xd9\x9c\x55\xc1\xd1\xd0\x0e\xa5\xef\x44\x19\xe1\x5a\x8c\x6b\x31\xae\xc2\xb8\xc3\xf3\xd8\x74\x41\x1d\xaa\x99\x93\x6b\x99\x70\xcb\xe4\x5a\x26\xd7\x32\xb9\xf3\x93\x6b\x99\x83\x71\xf8\x64\x72\x2d\xd3\x06\x94\x71\x63\x3e\x9c\x30\xb9\xdb\x93\x67\x31\xe1\x81\xc9\xfe\x27\xfb\x97\xc7\x24\xca\x4c\xae\x42\x5a\x4f\x94\x5f\xe1\x59\x4c\xae\x68\x31\xbe\xa2\x43\x07\xd4\xa1\x09\xd5\xda\xc5\x55\xaf\x64\x0e\xd7\xbe\x78\x76\x8b\x6b\x5f\x3c\x35\x3f\x0e\xa8\x41\x75\x06\xef\x03\xca\xdf\xf0\x98\xc3\x5d\xce\x95\x3a\x4f\xcd\xb9\x52\x87\xdb\x9d\xf7\xc2\xb9\x3a\x87\xcf\x7d\xe9\xfc\x0e\x8f\x79\x6c\xca\x51\x76\x25\x8d\x23\xba\xa0\x8c\x27\xab\x92\xa3\xec\xd0\x79\x2e\xd2\x35\xf3\x08\xf6\x16\xc7\xfe\x5b\xbf\x1b\x9d\x11\xde\xd6\x60\x87\xc1\xb3\x08\xf6\x19\xec\x30\xe0\xab\x60\x9f\xc1\x0e\x83\xe7\x12\xbc\xb9\xc1\x73\x09\x78\x2c\xe0\xab\x60\xff\xf2\x95\xe6\x11\xec\x3f\xe0\xae\x58\x9c\x6d\x71\x94\x77\x24\xb8\xae\xe0\xa9\x05\x4f\x2d\x78\x6a\xd2\x4a\xa2\xcc\xe1\xaa\x83\xe7\x12\x3c\x3b\xe9\xa9\x09\x0c\xc3\x04\x86\x41\x94\x99\x5c\x6f\xf0\x44\xa2\x98\x0f\x37\x06\x6f\x56\xf0\x8c\xa4\x7d\x44\x35\x3f\xb9\xf6\x84\x1b\x13\x6e\x4c\x9e\x94\x74\xd0\x04\x9e\x61\x1e\xc9\xdd\x48\xee\x40\x72\xed\xc9\x75\x25\x4f\x47\x5a\x66\x1e\x09\x07\x26\xd2\x20\xb9\xc6\x84\x1b\x93\xeb\x4a\xdf\x7f\x73\x06\xae\x2b\xbd\xda\x1f\xfe\xfc\xd3\x4f\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x20\x0f\xf2\x5f\x47\x7e\x68\x9f\xfe\xdf\xef\xd3\xfd\xbb\xef\xfb\x31\x8f\xd6\x8f\xd9\x45\x86\x88\x35\xfa\x07\xd0\x3e\x80\xee\x01\xfd\x98\x21\x92\x22\xd5\xe8\x25\x40\x2b\x81\x7e\x2c\xad\x58\x5a\xb1\xb4\x62\x69\xc5\xd2\x8a\xa5\x15\x4b\x2b\x96\x56\xb8\x56\xb8\x56\xb8\x56\xb8\x56\xb8\x56\xb8\x56\xb8\x56\xb8\x56\xb8\x56\xb8\x56\x84\x56\x84\x56\x84\x56\x84\x56\x84\x56\x84\x56\x84\x56\x84\x56\x84\x56\x84\x56\xa4\x56\xa4\x56\xa4\x56\xa4\x56\xa4\x56\xa4\x56\xa4\x56\x64\x34\x0a\x32\xcb\x7b\x36\x8a\x32\x69\x7a\x46\xf9\x27\x8d\xc3\x6a\xc5\xd1\x6a\x2d\xfd\x77\x45\xa3\x8d\x18\xfd\xc6\x68\x37\x56\xcb\x57\xa3\xd9\x58\x2d\xb7\x56\x33\xb3\x51\x5e\x5a\x6b\x68\xac\x7b\xa3\xb6\xb4\x66\x68\xcc\x44\x5c\x63\xae\x53\xb9\xfe\xbb\xf4\xdf\xe0\xcc\x9c\x85\x1f\xd2\x81\xd4\xef\x86\x4e\x1f\x4c\xd1\x58\xe8\x77\x5d\x3b\x70\x76\xa5\x15\x8b\x29\xec\x94\x1f\xf7\x46\x7f\xb6\x72\x5d\x82\x1f\xfa\xab\x0f\x11\x6f\x34\x2f\xeb\x47\xea\x0e\xa5\xee\x50\xe9\xbf\xa5\x3b\x54\xba\x43\xa5\x3b\x54\xba\x43\xa5\x3b\x54\xba\x43\xa5\x7b\x5a\x5a\x51\xd5\xe8\xf0\xd0\xfb\xd1\x1b\x5d\x1e\x7a\x3f\xb4\x62\x2c\xfd\xa5\x15\x23\xf5\x97\x26\x9b\xa6\x74\x9d\xd9\x34\xd6\xb3\xf5\xf0\x46\x27\xca\x9e\xd6\xf8\x3e\x81\x4e\xa1\x5d\x37\xcf\x6d\xb4\xee\xc7\x0f\xed\x9b\x4f\xbf\xfc\xfc\x6d\xe6\xaa\x6f\xc7\x37\xdf\x7d\xdf\x75\x3e\xad\xb0\xa3\x75\x9d\x51\xd3\xcc\x5a\xb7\xd9\xba\xad\xd6\xcd\x5b\xb7\x68\x5d\xbf\x61\xd5\xba\x38\x57\x8c\x2b\xbe\x15\xdb\x8a\x6b\xc5\xb4\xe2\x59\xb1\xac\x38\x56\x0c\x2b\x7e\x15\xbb\x8a\x5b\xc5\xac\xe2\x55\xb1\xaa\x38\x55\x8c\x2a\x3e\x15\x9b\xd2\x71\xfe\x68\xa0\x45\x8e\xce\x5e\x37\x6e\x9c\xb7\x2e\xf6\x04\x89\x04\x1c\xa4\xb6\x3f\x23\x8d\x06\xca\x1e\x9f\x4a\x15\x97\x3c\xbc\xb7\x8d\x75\x3c\x1a\x1f\xf3\x6e\xdc\xad\x16\xba\x39\x60\x71\x80\x22\xd4\xf6\x07\xa8\xd9\x28\x7c\xe5\xf3\x0f\x50\x05\x5b\xd7\x43\xa9\xd9\x86\xf6\x04\x2e\xbd\xb5\xa1\x77\x86\xce\xf5\xd9\xc6\xee\x00\xdc\xe8\xb0\x98\xa3\xd1\x15\x9d\x5e\xce\xf4\x2a\x6f\x14\x89\x8f\x68\xa3\xf7\x46\x47\x28\xf3\x46\x9f\xdc\x8d\x19\xd7\xe8\x1b\xbb\xbf\x84\x6f\xf4\x61\xdc\x38\x38\x8d\x4f\x85\x67\x6f\x63\xac\x36\x86\x37\x3a\xdd\xd2\x29\x62\x36\xba\x2d\xee\x0e\xf9\x6d\x77\xd2\xed\x6d\xf7\xd2\xd5\x78\xb4\x61\x74\x69\x6f\x1b\xf3\x1b\xc4\xe3\x46\x4f\xdd\x8d\xae\xd9\xc6\xf4\xb6\x11\xff\xf8\xce\xbf\x81\xfb\xa7\x73\xad\xd1\x36\x72\xd1\x6a\x31\xea\x9e\x1d\xec\xa3\xb0\x43\x4d\xd8\xa1\x4b\x62\xf9\xdc\x02\x74\xe8\xed\xb9\xf0\x03\x98\x33\x47\xe3\x53\x2f\xbd\x0a\x61\x7b\xd2\x95\x21\xf4\x6e\x49\x48\xe9\xff\x12\x51\x34\x75\x33\x5e\x0b\x18\x02\xb8\x1a\x3d\x54\xda\xc6\xb4\x9e\x67\x65\x95\x38\xa2\xeb\x97\x4e\x8e\x60\x50\x2c\x31\xf4\x08\x25\x3c\xc5\x12\xc7\xb1\x59\xe2\x18\x9b\x25\x8e\x79\x63\x89\x23\xce\xfd\x1e\xd5\xe8\xc2\x79\xf2\x04\x1d\x30\x4f\x9e\x18\xa9\x7f\x03\x9e\xa0\x87\xf2\x00\x77\xa3\xd1\x71\x7e\x58\x1b\x63\x5e\x79\x62\x9f\x4c\x0f\x57\x0f\xd1\xd7\x66\x0a\x1b\x9b\x29\x6c\x6e\xa6\x10\xc3\x5d\x98\xc2\xce\x6b\xa1\xa7\xe7\x1c\x57\xae\x18\x59\x57\xae\xa0\x77\xf2\x2c\xb8\x82\x4e\x9f\x20\x52\x80\x5a\xf6\x9c\x2b\xe6\x47\xe1\x0a\xda\x6a\x00\x49\x09\x57\xf0\x5d\x7b\x5f\x4f\x84\xc4\x6e\x42\x2a\x41\x91\x57\x21\xd1\xa5\xbb\xee\x85\x84\xf6\x43\x8b\x4d\x1a\x6e\x3c\x11\x12\xb4\x97\x2e\x20\x82\xda\xfe\x0a\x10\x50\xea\x36\xb4\x9f\x93\x25\xba\x78\x4b\x62\x5b\x52\x9b\x66\x48\xe3\xa5\x90\x88\xbc\x71\x04\xad\xc4\x01\xa7\x6f\x7c\x3d\x0f\x53\x8c\x46\x73\xd6\x0b\x43\x6c\x04\x88\x67\x0c\x01\x78\xce\x66\x88\x15\x37\x21\x21\x41\x23\x7e\x18\x12\x0c\x34\x4d\x7b\x29\x24\xa2\x6e\xfc\x40\x63\x77\x60\xe5\xdb\x6e\x40\xd3\x37\x3b\xcc\x75\x63\x87\x8d\xb0\xf0\x8c\x1d\x80\xc9\x79\xce\x0e\xeb\x83\xb0\xc3\x56\x89\xc7\x90\xfe\x1c\x71\xea\xc5\x43\x9b\x3a\xb4\x2b\x94\xe3\xa1\x7d\x1d\xda\xd8\xa1\x9d\x1d\xda\xda\xa1\xbd\x61\xd8\x18\x3a\x54\x0b\xfe\x77\x19\x63\xbf\xb6\x71\xb2\x4d\x0c\x8c\x93\x7e\xb8\x48\x9c\x16\x4a\x97\x68\xed\xfd\x38\xcd\x94\xde\xb5\xa2\x9b\xc8\x6c\x74\xaf\xa2\x79\x15\x6f\x30\xe6\x4b\xef\x4f\x78\xcd\x3f\x08\xaf\x3d\xb3\xe5\xaf\x3a\xe9\xf3\xa4\xaf\x79\xa7\x9a\xbe\x86\x74\x19\xbe\x2f\xc7\xe2\xfa\x97\x2e\x47\x0f\x41\x96\x73\x97\x19\x4b\x0b\xa4\x2e\x73\xb7\xcb\xbe\xed\xb2\x6f\xbb\x4c\xe0\x2e\x0b\xb6\xcb\x96\xed\xb2\x7e\xfb\x12\xbb\x2c\xb1\xcb\x12\xbb\x2c\xb1\xcb\x12\xbb\x2c\xb1\xcb\x4a\x6e\x84\x56\x88\x5d\x96\xd8\x65\x89\x5d\x96\xd8\x65\x89\x5d\x56\x7d\xe6\x66\x74\x8c\x61\x17\xbb\xf8\x81\xf9\x29\x8d\x7e\x4c\x11\x49\x6e\xb1\x8b\x8b\x5d\x64\x48\x77\x17\xbb\xb8\xd8\xc5\xc5\x2e\x32\xa9\xbb\x8b\x5d\x5c\xec\xe2\xc8\x7a\xd8\xa5\x6b\x45\xcf\x5f\xc1\x21\xbb\xf1\x5a\x7c\x10\x5e\x4b\xe9\x82\x1c\x5c\xa2\xb5\x94\x59\xc0\x67\xe3\xdd\x6f\xf6\x70\xf7\x6a\xa9\x67\xa1\xc7\xad\xa7\x7d\x61\xb2\x94\x52\x91\xb2\xeb\x58\xc9\xdb\x00\x2a\x39\x47\x47\x6f\xa5\x27\x90\xd6\x4a\xfe\xca\xb1\x5a\xe9\xee\xcb\x39\xd3\xbd\xcf\x6a\xd5\x8f\x56\xbd\xb7\x92\x2b\xd3\xad\x55\x9f\xad\xfa\x6a\x25\xaf\x46\xfe\x9b\xdc\x37\x79\x6f\xe3\x68\x35\x7a\xab\x31\x5a\x0d\x6b\x25\x37\x6c\xac\x56\xc3\x5b\x8d\x68\x35\xb2\xd5\x38\x8d\x90\xb2\xde\x4a\x3e\x99\x59\x2b\x9b\xad\x6c\xb5\x32\x6f\x65\xd1\xca\xb2\x95\xc9\x1d\x94\xf7\xd6\x5b\xcd\xd1\x6a\xca\xc5\x9b\xad\xe6\x6a\x35\xe5\x67\x85\x7c\x2d\x39\x5d\x72\xf3\xe4\xef\xc9\xf1\x93\xa3\xd7\x6a\xfb\x66\xf2\xd4\xe4\x99\xc9\x9f\x6b\x25\x8f\x51\x8e\x9b\x3c\x38\x39\x7f\x72\x19\x71\x7f\x56\x2b\xb9\x85\xf2\x0a\xe5\x00\xca\xef\x94\xdb\x29\x5f\x53\x7e\x9f\xdc\xbe\x98\x2f\xd8\x22\x3f\x08\x5b\x9c\xaf\xd3\xb8\x1a\xc5\x5d\x7a\xe3\x19\x4f\xc8\x94\xb8\xe7\x89\xae\xf7\xff\x34\x7f\xee\x39\xe2\x62\x12\xf7\x1c\x57\x93\xb8\x63\x11\x06\x1c\xd1\x73\x73\x44\xaf\x17\xb2\xef\xc3\x91\xe4\xa2\xa7\x76\x3c\xb5\xe5\xa9\xf7\x62\x4a\x46\x4d\xc9\xa8\x29\x19\x35\xa5\xd2\xa6\x54\x9a\x5c\xf7\x3e\xa5\xd2\x66\xf1\x10\x78\x0a\x7a\x0c\x92\x51\x4b\x6f\xc8\x92\x8c\x5a\x92\x51\x4b\x32\x6a\xe9\x2d\x59\x92\x51\x4b\xef\xc9\x92\x8c\x5a\x9d\x07\xa7\x15\x92\x51\x4b\x2f\xdd\xea\xf3\xc9\xae\x0e\xbd\xc5\xa7\x33\x70\xcf\x50\xfd\xf8\x20\x1c\x25\x7b\xfa\x62\x2f\x63\xa3\x62\x4f\x1f\x30\x94\xec\x6a\x6c\x56\x1c\xef\x3c\xed\x68\xc0\x16\xb1\x8b\x2f\xf6\xf4\xc5\x5e\xc6\xc6\xdc\x4d\x1e\xdb\x6e\x02\xe9\xdb\xe6\xc4\xd1\x04\xbf\x63\xcb\x26\xdb\x3d\x60\xbe\xce\xa0\x3e\xa2\x81\x8c\x7f\x1a\xd4\x57\x0f\xeb\x34\xa8\x65\x38\xbf\x66\x50\xcb\xeb\x1e\xe3\x57\x30\xa8\x4d\x7e\xd4\x71\x35\xa8\xaf\xfe\xd5\x69\x50\xcb\x70\x7e\xcd\xa0\x96\xd7\x0d\xcc\x57\x1f\x4f\x18\xe2\xa3\xb8\xdd\x39\x08\xbf\xdc\x44\x4c\xea\x6e\x5d\x64\xcc\x40\xf3\xd6\x76\xbf\x9e\xcb\x98\xca\x17\x32\x26\x75\xcb\xef\x85\x8c\x6e\xc9\x6e\x80\x60\x2f\x84\x8c\x6e\x3b\xfe\x9d\x1e\xfd\xf2\x33\xf8\xb2\x59\x02\x16\x10\x9f\x9e\x2c\x61\x11\x9b\x1d\x76\x6b\x54\x78\x77\xc3\x26\x5f\x02\x31\xab\x9d\xed\x82\x9e\xf8\x58\xb6\x5b\xb9\x11\x58\xda\x7e\x15\xf8\x34\xf0\x36\x2c\x41\x1b\xed\x93\x35\xdc\x6e\x2c\x91\x27\x9f\x9f\x2c\x61\xfa\x6d\xb1\x43\xf5\xed\x4b\xed\x16\x92\x9b\xd7\x09\xc4\x78\xdb\x8d\x87\xec\x89\x8f\xb5\x9b\x9e\x01\xde\xce\x6b\x80\x8f\xb5\xd1\x6b\xd0\xf7\x4f\x78\xe2\xa3\x38\xdd\xe1\x39\x1a\x30\x52\x62\x8a\x1d\x04\x89\x16\x5e\x5b\x4e\x44\x1e\x5b\xf3\x44\x76\x4d\xae\xde\x42\x66\xc1\x85\x31\x2c\xbc\x45\xe8\x90\xbc\x6c\x42\x20\x59\x0d\x48\x28\x10\xa1\xc4\x1b\x11\xee\x3a\x91\xc6\x39\x65\xef\x2d\x42\x0b\x65\x5c\x00\xce\x04\x36\x53\x84\xb8\xeb\x2e\x36\xf3\x5c\x6e\xbc\x27\x34\x63\x31\x5e\x46\x66\x4e\x26\x89\x48\x87\xcd\x9f\x87\x66\x08\xd7\xc5\x7c\x11\x9a\x79\x2e\x38\xde\x13\x99\xb1\xb0\x97\x81\x99\x93\x4b\x00\xae\xd2\x6b\xf2\x3c\x32\xb3\x21\x02\x57\x1b\x6b\x3d\xe1\x92\x0f\xe3\x8b\xfb\x4d\x70\x60\xb1\xca\x38\xd1\xfb\x88\x2e\xd1\x62\x79\x28\x71\xbc\xcb\x38\x41\xd7\xdc\xc9\x0d\xe3\x5f\xf1\xca\x36\x57\x77\x9b\x2c\xf0\xce\x5a\x97\x9e\xff\x4a\x96\x90\x2a\x79\x8b\x25\x2e\xb1\x99\xd7\x38\xe2\xaa\x4a\xbe\x92\x23\xa4\x4a\xde\xe2\x88\x4b\x6c\xe6\x35\x86\x90\x2a\x79\xce\x10\x1f\xc5\x61\xc6\xb6\xa0\x3d\x68\x3f\x5d\x98\x31\xc6\x0b\x8e\x58\x84\x62\xfa\x2d\xa4\x0f\x92\x5b\x5d\x39\x02\xd4\x4b\x50\x7c\xfa\xa9\x9c\xee\x58\x62\x70\x82\x78\xc1\x12\xcf\x23\xb8\x97\x98\xfe\x56\x29\xef\x64\x89\x33\xa6\x7f\xcf\x12\x97\x98\xfe\x56\x1f\xf9\x92\x25\xf2\x68\xcb\x5e\xc6\x6f\x2f\x31\xfd\x1d\xcf\x7f\x27\x4b\x9c\x31\xfd\x7b\x96\xb8\xc4\xf4\xb7\xfa\xa8\x97\x2c\x91\xbd\x2d\xad\x85\x25\xfe\xf5\xe7\x4f\xf9\xed\x1f\xbf\xf9\xee\xfb\x9d\x15\x23\xdf\x46\xc6\xea\x96\x3d\x23\x8b\x45\xe2\x6c\x27\xe2\xc8\xa3\x91\x51\x93\xbb\x26\xc7\xfd\xcc\x6c\x91\xe3\xba\xa5\xb7\x9e\x64\xf2\xb2\x6a\xec\xd4\x12\x69\xa7\x9d\x72\x92\xf0\xce\x3c\x66\x03\xa3\x0a\xd3\xa2\xea\xe2\x97\xe6\x69\x0c\xc4\x25\x07\xb7\xf3\x7c\x73\x47\x90\xce\x54\x1b\x0e\x1d\x1e\xdd\x4e\x0a\xd6\x25\x1b\xb7\xf3\x72\xe3\x4c\x05\x9e\x49\xc1\xf5\x34\xe3\x77\x66\x15\x09\x10\x9e\xa9\x45\x12\x8a\xb7\xec\x1e\x59\xc0\xbb\xb4\x5f\x9c\x89\xbd\x9d\xe2\x13\x03\x79\x9d\x01\xae\xbb\xd8\x1b\x71\xb1\x5b\xd8\x8d\x80\x19\xa1\x38\xa2\x66\xef\x8c\xbd\xed\x6c\xde\x6b\x01\xb8\x1d\xc6\x9b\x67\x88\x8d\x60\xdb\x8e\xea\x95\x9f\x11\xb7\x33\x14\xb7\x2e\xf1\x38\x02\x84\xb7\xd8\x25\x71\xc5\x5b\xd8\x92\x80\x23\xa1\x4c\xa2\x8e\xef\x8d\x5d\x12\x70\x7c\x2d\x80\xb9\xc3\xa0\xe3\x1a\xa2\x8c\x4b\x54\x74\x47\x31\xeb\x1a\xca\xe4\x27\xfd\xc2\x84\x7f\xfe\xef\xc7\x84\x04\x2f\x61\xc2\x5b\xf0\xf2\x4d\x26\xec\x9b\x57\x7a\xbe\xcd\x84\xc4\xa6\x61\xc2\x5b\x6c\xfa\x4d\x26\xec\x38\xf3\x04\xa7\x1f\x4c\xf8\xf5\x4c\xf8\xfb\xdf\xfe\xf8\xe9\x0f\x7f\xfa\xf9\x97\xdf\x7d\xf7\xfd\xcd\x30\xa8\x53\xfa\xd7\x56\xf2\x28\xf4\x75\x4a\x6d\x3f\x15\x78\x9c\x4a\xbc\x9f\x92\x7a\xdc\x49\xeb\x38\x25\xf6\x45\x81\xf7\x53\x4a\x8f\x53\x79\xfb\x56\xe0\x92\xce\x48\xe9\x2d\xa1\x53\x3f\x00\xff\x5d\x7d\xac\xd0\xa0\xa3\xd7\xa4\x37\x30\x89\xbc\x1a\x78\x8d\x04\x69\x3c\xc5\xbf\x07\x9a\x8b\xc0\x60\x48\x8b\x47\x3c\x61\xed\x85\xbd\x94\x71\x90\xfc\xd7\x5f\x7d\x07\xc1\xc0\x1d\xc4\xee\xca\x1d\x71\x43\x01\xe9\x21\x54\xdf\x46\x5b\x8c\xfd\xba\xcc\x63\x9c\xaf\x8c\xac\x75\xcc\xb4\xd4\xe6\xec\xd8\x06\x1e\x0a\x75\x61\x17\x5d\x94\x6d\x4a\x33\xa6\x54\x23\xae\x1e\x0a\xfa\x16\xbc\xe4\xdd\xf2\xc0\x44\x41\x2f\xa7\x6c\x82\xd3\x16\x98\x5a\xbd\x8e\xe6\x53\xce\x96\x68\x6a\xfd\xda\x65\x0b\xd2\xaa\xd8\x0b\x39\xc8\xcd\x4f\xf4\xb4\xf4\xf9\xd6\xd5\xc7\x33\xf3\x6d\x5e\x75\xb4\xd3\x61\x72\x6b\xed\x53\x33\xf7\x20\xd9\x8b\x0f\x22\x43\x28\x16\xa9\x65\xc9\x09\x5d\x77\xcf\x49\x35\x40\x58\x6f\xd1\xfb\x0f\xed\x9b\xbf\x7c\xfa\xc3\xff\xff\xf9\x2f\xbf\x7c\x9b\x21\x1f\x6c\x5b\xb3\xcf\xac\xa9\x7d\x5b\xbe\xc0\x9c\xba\xdd\x96\xfb\x5b\x35\xfc\xee\x1e\xbe\xc7\xaa\x32\x3a\xaa\x81\x8e\x09\x6c\xf1\xa2\xa1\x10\x1d\x62\xc8\x79\xee\xc4\x25\x2d\x4c\x08\xbb\xd0\x84\x84\x8e\x23\xbb\x4d\x09\xdd\x48\x68\x40\x42\xff\x11\x11\x3a\x88\xd0\x22\x64\x77\x1a\xa1\xb9\x08\x5d\x45\xda\xee\x39\xba\x5b\x21\x1c\xbb\x37\x08\x4d\x41\xe8\x09\xd2\x76\x2f\x52\xdf\x8d\x42\xe8\x19\x42\xe0\x43\x2b\x28\x74\x00\x55\x9f\x2c\x26\xa8\xff\x63\x37\x05\xa1\x0f\x08\xad\x3f\xe8\xf6\x41\x6b\x0f\xfa\x6c\xd0\xb4\x83\x0e\x1d\xb4\xe6\xa0\x1b\x07\x4d\x37\xe8\xb6\x41\x6b\x0d\x7a\x6a\xd0\x4c\x83\xce\x19\xb4\xcc\xa0\x27\x06\x6d\x30\xe8\x7f\xf1\x6a\x80\xd0\x76\xe7\x05\x1a\x2f\xd0\x5d\x60\xed\xf6\x13\xf4\x9a\xa0\xb1\x04\x5d\x24\x68\x1f\xd1\x76\xe3\x54\xe0\xdd\xc0\x0d\x05\x36\xf4\x6c\xce\x40\x67\x85\xdd\xe8\xa1\xed\x76\xaa\x00\x89\x5e\x5a\x34\xb4\xdd\x56\xd5\x77\x2f\x05\x5a\x26\xd0\x73\x81\xb6\x09\xf4\x54\xa0\xa5\xc2\x7a\x23\x11\x71\xe1\xbb\x3e\xd6\x71\xcf\x78\xbc\x0e\xe2\xbc\xf3\x95\xb0\x63\x0b\x92\xfd\xbe\x98\xef\xb7\xc4\x90\x2f\xb4\x1f\xf4\x5d\x26\x93\xa7\x5d\xfd\x7e\xf6\xdb\x28\xb1\xcb\xf6\xbb\x89\x9d\x09\xa4\x27\x10\xc3\x3b\x1a\x20\xd7\xfc\xae\x4e\x67\xe0\xfb\x3d\x8d\x41\xdb\x7a\xe9\xe6\xdd\x1b\xf5\xf7\x75\x3a\xcf\x63\xd0\xb8\x0c\x6b\xcb\x1e\xeb\xb1\xeb\x74\x00\x2f\x7d\xd4\xe9\x3c\xe1\x90\x2e\x3f\xef\x9a\xfb\xde\x2c\xd2\x8f\x78\x95\x47\x2e\x32\xf7\xd8\xa9\x70\xb8\xe4\x92\x0f\xf7\x6b\x52\xbc\x76\xf2\xf6\x4b\x58\x85\x54\x2e\xbc\x72\xc9\xe7\xfa\x35\xa9\x7b\xc9\xd1\x5f\x0b\xd3\x48\xc5\x8b\xa5\x37\x9f\x9c\x3c\x83\x75\xb4\xcd\xa4\x7c\x19\x1c\x20\x87\x7f\x89\x0e\x60\x39\x6d\x73\x4c\x0b\xee\x39\x47\x36\xdb\x25\x09\x9d\x3b\xb6\x48\xaa\x99\x6a\x80\x33\x07\xdd\x1f\x69\xfe\xaf\x4b\xf3\x3f\x65\xc0\xf1\x42\x44\x61\x41\xbc\xc2\x7e\xd2\xbc\xcf\x44\x94\x98\x02\x88\xe1\xfe\x25\x1a\x52\xea\xfb\x99\x88\x32\xf2\xde\xa7\x88\xf2\x17\xa1\xa8\xb7\xd2\x64\xef\x8d\x44\xbd\x95\x26\xbb\x44\xa2\xee\x23\xd8\x8f\x48\xd4\x7a\xca\x21\xf6\x6e\x0e\xb9\x2a\x31\x99\x50\x5b\x3c\xfd\xe3\x36\xd4\x96\x4c\x6b\x9e\x82\xe9\x15\x2b\xea\x9a\x0a\xff\x0c\x87\xec\x6c\xeb\x33\x16\x79\x33\xb9\x7e\xcf\x23\x8f\xe4\xfa\xdf\x4f\xae\xdf\x71\xc9\xfc\x15\xe4\xc8\x17\x72\xc9\xdb\x72\x04\x6c\xeb\xff\x09\x72\x24\xfd\x8b\xe5\xc8\xb5\xa4\xf6\xd7\x90\x23\xa4\x31\xbe\x4c\x8e\x5c\x2b\x72\x9f\xcb\x91\xf5\xe5\x1c\xf2\xb5\x72\xe4\xca\x21\x9f\x95\x23\xcf\x92\x1e\xe3\x9f\x56\x91\x01\x8b\x4c\xed\x68\x6a\x4b\x53\x7b\x9a\xda\xd4\xd4\xae\xa6\xb6\x35\xb5\x9d\x29\xd6\x9d\xba\x73\xd3\x09\xe7\x6b\x85\xf6\x36\xb5\xb9\x29\x06\xc6\x68\x9a\xda\xdf\xd4\x06\xa7\x76\x38\xb5\xc5\x49\xd1\xd8\xd0\x95\x0f\x42\xfe\x48\x57\xb9\xa7\xe3\x7d\xb5\x6f\x1f\xbe\x20\xe3\x8e\xc5\xfc\xca\x62\xf2\xef\xde\xc9\x63\xf2\x11\x6f\x62\xc8\xf9\xca\x22\xf9\x8b\xfc\x78\x7f\x97\xc2\x0a\x2c\x57\x3d\x73\x27\xc7\x71\x0a\xa3\xd4\x1b\x9d\x7a\xa5\x7b\x90\x82\x3f\xce\x62\xc2\xbf\x2b\x90\x86\x7f\x9d\x44\x22\xa2\xf9\x9c\xdf\x96\x7e\x82\xaf\x4a\xfe\xa9\x95\x86\xbc\x3b\xaf\x54\x1b\xbe\x56\x54\x48\x68\xcd\x8f\x1d\xc0\x7b\xad\xb8\xf0\x35\xb9\x75\x2b\x38\xbc\x48\xae\xd7\x0a\x0f\x25\xbd\x6e\xc5\x87\xbc\x90\x4e\x80\xab\x76\x11\xe2\x2d\xbc\x77\xe1\xb0\x1e\xd3\x9f\x72\x58\x7c\xb9\x47\xff\x54\x88\x79\x5e\xeb\xd4\xbf\xce\x18\x8a\x85\x07\xfe\x66\x59\xd9\x39\xf0\x8f\xd5\x7c\x3c\x67\xab\x47\xc9\xc7\xdb\x25\x1f\x2f\x7c\xfa\xfc\x0a\x45\xf7\xb5\xa6\xd0\x95\x47\x3e\xb2\x29\x74\x89\xfa\x7c\xce\x14\x0a\xcf\x17\x99\xdc\x41\x69\xc9\x2d\xea\x33\xbb\x7f\xd6\x14\x9a\xd6\x5b\x44\x7f\x3b\x93\xfb\x19\x53\x28\xbc\x5e\x64\x72\x65\x0a\xe5\x71\xab\x13\x9b\x3d\x3e\x6b\x0a\x4d\x3d\x95\xcd\x2e\xb2\x85\xfe\xed\xdb\xdf\xff\xf6\xc7\x6f\x7f\xfc\xf7\x3f\x7e\xfa\xe9\xa7\x4f\x3f\x7e\xf3\xf1\x3f\x1e\xbd\xe5\x39\x36\x77\x3c\x4b\x74\xec\x48\xce\x93\x4c\x07\x91\x2c\xc2\x4f\xe4\x3a\xf8\x9e\x83\x70\xd6\x2b\xd9\x0e\x42\x40\xe2\xa0\x1d\x37\xe2\x0b\x8f\x57\x3f\x89\xb4\xf3\x5b\x03\x42\x5d\x67\x80\xea\x12\x14\x7a\x6f\xda\x83\xe0\x18\x21\x2d\x62\x65\x3b\xc2\x75\xbc\x27\xf7\xb1\x6b\xe7\xee\xe3\x5f\xb5\xe3\x62\x3b\x50\x75\xfb\x9e\x73\xe7\xe2\x3e\x6c\xe8\x47\x12\xe9\x87\xbf\xfd\xed\x37\xff\xf7\x4f\xbf\xfb\xf4\xcb\x5f\xff\xfa\x1f\x7f\xfb\xcd\xff\xf9\xcf\x00\x00\x00\xff\xff\x18\x7c\xac\x1b\x46\x15\x08\x00") + +func web_uiAssetsEncodingIndexes75eea16b259716db4fd162ee283d2ae5JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsEncodingIndexes75eea16b259716db4fd162ee283d2ae5Js, + "web_ui/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js", + ) +} + +func web_uiAssetsEncodingIndexes75eea16b259716db4fd162ee283d2ae5Js() (*asset, error) { + bytes, err := web_uiAssetsEncodingIndexes75eea16b259716db4fd162ee283d2ae5JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js", size: 529734, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsFaviconIco = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x58\x6b\x88\x1c\x45\x10\x9e\x44\xcf\x27\xe8\xa1\xc1\x47\x40\x3d\x91\x1c\x07\xfe\xf0\x11\x8d\x5d\x3d\x9b\x73\x35\x51\x3c\xd4\x28\x62\x50\x13\x15\x7c\xe0\x1f\x51\x10\xed\x9a\xdd\xbb\x88\xa3\xe0\x0f\x3d\x54\x14\x94\x04\xfd\xa1\x7f\xf3\x43\xcc\x43\x12\xf0\x81\xe0\x03\x22\x3e\xa2\x20\xa8\xf8\xa3\xab\x67\x6f\x93\x8b\xe6\xa2\xf1\xd4\xe0\x23\x23\x35\xbb\x73\x3b\x37\xd7\xbd\x77\xb3\xae\x88\x61\x0b\x86\xdb\xe9\xa9\xaa\xaf\xba\xba\x5e\x7d\x9e\xb7\xc8\x5b\xec\xf5\xf7\xf3\xdf\x01\x6f\xa8\xcf\xf3\x06\x3d\xcf\x1b\x18\x68\xbe\x2f\xf1\xbc\x35\x7d\x9e\x37\xe4\x79\x5e\x3f\xaf\x7b\x8d\xf5\x84\xfa\xbc\x7f\x9d\x46\x57\x4d\x9e\x8e\xd2\x8c\x21\xd0\xa7\x28\xf4\x8f\x4a\xd0\x34\x0a\xbd\x1b\x25\x85\xe3\x57\xef\x3d\xb1\x9d\x2c\xfa\xd1\x4d\x0a\x68\xbf\x12\x3a\xb6\x3d\x08\x9a\xd0\xa7\xab\xec\xb2\x66\x8d\x02\xfa\x33\xe1\x13\xf4\x17\x0a\xda\x82\xa0\x55\xf2\x24\xbf\xe9\x0f\x04\x9a\x0a\x4a\xb5\x0b\xf2\xb2\x21\x44\xa7\x34\x6c\x65\x0c\xaa\xa3\x6f\x2e\xc9\xf3\x54\x4a\xb4\xbc\x22\xcd\xa5\xfc\x3b\x80\x68\xdd\xb3\x10\x1d\x9f\x7e\x0b\x80\x1e\x4f\x71\x99\x6f\x3e\x1f\xa1\xa0\xc7\x18\x73\xe6\x1d\x68\x57\x13\x7b\x5b\xba\x16\xc7\xf1\xa2\x00\xe8\xce\x40\xea\x6b\xb3\xb2\x81\x34\xb7\x86\xe5\x7d\x67\xa0\xd0\xeb\x33\xf2\x3f\x37\x7c\x64\x46\x5b\x6b\xfa\x9e\xd4\x6f\x15\x41\xab\xd3\x75\x05\x66\xbc\x5a\xaa\x0d\x06\x82\x1e\xc8\xf0\x1e\xcc\xcb\x2b\xa1\xef\x6d\xf9\xdd\xdc\x98\x95\x57\xc3\xd1\xb2\x00\xf4\xfd\xad\x35\xfa\x38\x6f\xff\xe6\xb5\xf1\x51\x28\xe9\x0e\x94\x74\x73\xd6\x7e\x05\xe6\x36\xf4\xcd\x52\xde\x5b\xde\x7f\x4a\xd0\xe1\xd4\xc7\xed\x88\xf9\x39\xce\xd2\x77\xf6\xa5\x02\x7d\xa0\x69\xef\x1e\x84\x68\x45\x5e\x86\xf5\xa6\xeb\x1c\x67\xf9\x58\x0c\xa4\xb9\x61\x56\xfc\x00\x6d\x0b\x80\x2a\xfc\xf0\xef\xe4\x1b\xe8\x03\xa3\xb2\x76\xa1\xcb\x2e\xd6\x8b\x82\x7e\x70\xc5\x6f\x12\xdb\x40\xd7\xb5\xdb\x5b\x28\xf7\x9e\xd6\xc8\x1f\xfd\x59\x73\x4f\x3f\x25\xb9\x24\xcd\x58\x76\xcf\x3d\xea\x0e\x0d\x35\x6b\x64\x39\x5b\x27\x97\xfc\xd7\x56\xfd\xbf\xa9\x0a\xf5\xa1\x40\xea\x27\x15\xd0\x56\x25\xf4\x17\x69\x1f\x50\x40\xdf\x21\xe8\xf7\xb8\x17\x54\x4b\xd1\x65\x5c\xe3\xba\x89\x1b\x48\xba\x5d\x81\xfe\xc8\x99\x7f\x73\x1e\xfa\x4a\xf9\xe6\x96\x30\x8c\x17\xff\x13\xdc\x66\x3d\x7e\x73\xe1\xb8\xf9\xbe\x46\xbb\xc6\x64\xfd\x9c\x4e\xb0\xb9\xb6\x2b\x41\xdf\x77\x8a\x9d\xad\x4d\x15\x98\xb8\xa8\x10\x76\x89\x96\xb7\x7a\x8f\xb3\x67\x1f\x54\xa0\xb5\x02\xaa\xa5\x3d\xd6\x81\xbf\x75\xd3\x7d\xf1\x82\x27\x94\x4a\x79\xcf\x00\xd7\x7a\xc7\xb9\x4e\x2b\x49\x4f\x29\xdf\xac\x0c\xcb\xf1\xd1\xa9\x0c\x9f\x73\x00\x5a\x22\xd0\xd3\x99\x7e\xc1\xd8\x6f\xbd\x30\x12\x1f\x5b\x64\xef\x28\xe8\x7d\xc7\x59\x6e\x0f\x4a\xf5\xb3\xe7\x95\xf7\xcd\x52\xe6\x65\x3d\xe1\xf5\xf5\x13\x8a\x60\x57\x20\xba\xc6\xe1\xc3\x8d\x45\xf4\x30\xe5\xf7\x9d\xf4\x77\x3e\xaf\xe1\x68\x99\x8d\x9f\x73\x16\x05\x7d\x62\xdb\x37\xf7\xfc\xa2\xf8\x79\x42\xa0\xb7\x59\x5f\xe0\x47\x23\xb6\xef\xdc\xc7\x2d\x31\xf6\x5b\xb7\x7a\x63\x38\xb2\xff\xa4\x76\x33\x1c\x4a\xf3\xb0\x65\xef\x9b\xda\xe9\xec\xa4\xce\x65\xe3\x76\x16\xbe\xa0\x2d\x96\xb3\xbf\xd8\xc6\xcb\xf9\x84\x40\xaf\x2a\xa0\x5f\x11\xf4\x3e\xae\xc9\x2e\xbd\x4a\xe8\x97\xf8\x5c\x79\x96\x6a\xcc\x42\xfa\x90\x12\xe6\x21\x0b\x7e\x94\xcb\xb5\xc3\xd9\x59\x78\x96\x4e\xa0\x8d\x96\xb3\x7a\xd4\xba\x2f\xd0\x5f\x37\xbe\x47\x2b\x14\x98\xbb\x9b\x73\xd8\xf3\x73\xf9\xa8\x9e\xc3\x37\x36\x7d\x3c\xdf\xf1\x1c\x37\x07\x5f\xd0\xb7\x36\xfe\xb1\xe1\x89\xb3\xd0\xaf\x89\xf4\x7d\x83\x34\xe7\xd9\xe2\x19\x81\x26\x72\xfa\xa2\x22\xf8\x9c\x5b\x2e\xfc\xec\xec\xbb\x61\x58\x9f\xeb\xf0\x13\x15\xf0\xff\xe6\xa2\xfe\xe7\xf9\x16\xa5\xb9\xab\x61\xab\x19\x9f\xc3\x67\xe9\x73\xae\x7c\x09\x56\x4f\x9d\xac\x80\x5e\xe3\xfc\xe4\x7a\x1b\x80\x7e\xc4\xc6\xd7\xd4\xfb\xa2\x02\xfd\x39\xe7\x71\x12\x7f\x42\xff\x9e\xbd\x8f\xcc\xf0\xd9\xf2\x4f\xd2\xcb\x2e\xbd\x9d\x92\xab\x96\x71\x8f\xb4\x9c\xe9\x21\x9e\x01\xba\x81\x5b\x5d\x55\x3b\x15\xfd\xda\x15\xae\x99\xa4\x51\x7f\xf5\x6e\x8b\x0d\x3b\x5c\xb9\x5d\x84\x14\xd0\x1b\x49\xfd\x85\x68\x9d\x8b\xc7\xd5\x7f\x10\xcc\x2b\x45\xf1\xf2\xb1\x8b\x92\x1e\x44\xa1\xbf\xb1\xdd\xd3\x67\xf1\x09\xfd\xae\xa3\xff\xee\x74\xe5\x4e\x96\x92\x7c\x07\xda\x89\x40\x1f\xce\xf7\x7f\x09\x1b\x71\x7d\x50\xa0\x27\xad\x36\x08\xfa\x05\x85\x7e\xa6\x22\xf5\x95\xe1\xda\xf8\x98\x54\x86\x63\x4a\x41\x74\x39\x02\x3d\xc7\xf7\xba\x4c\xdf\x7e\x27\x2c\xc7\xc7\x15\xb5\x81\xeb\x7e\xeb\xee\xee\x98\xbf\xd8\x16\xae\x59\x89\xad\x34\xed\x9e\xd3\x68\x7b\x91\xf9\x2b\x25\xde\x23\x02\x4d\xb5\xb3\x61\x41\x0f\xe8\xc9\xf9\xce\xdc\x45\xa3\x2b\xf5\x99\xc9\x1d\xbd\x73\xec\x1d\xdd\x98\x1f\x50\xe8\xf5\xe9\xff\x72\x16\x86\x4b\x1f\xb0\x4c\xb7\xef\x41\xd5\x52\x6d\x10\xc1\x3c\xc1\xb5\xba\x51\x2b\xf8\x7e\x40\xd3\x08\xf4\xa5\x02\xfd\x3a\xcf\x01\x81\x4f\xe7\x77\x13\xb3\x47\x3d\xea\x51\x8f\x8e\x54\xfa\x3b\x00\x00\xff\xff\xbf\x30\x60\x6f\x76\x19\x00\x00") + +func web_uiAssetsFaviconIcoBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsFaviconIco, + "web_ui/assets/favicon.ico", + ) +} + +func web_uiAssetsFaviconIco() (*asset, error) { + bytes, err := web_uiAssetsFaviconIcoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/favicon.ico", size: 6518, mode: os.FileMode(420), modTime: time.Unix(1645446280, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsFaviconSvg = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x59\x4d\x6f\x5c\x59\x6e\xdd\xf7\xaf\x78\xa8\x6c\xab\x29\x7e\x7f\x0c\x2c\x0f\x10\x21\x59\x4d\xaf\x92\x6c\x7a\xd7\x18\x6b\x6c\x61\xdc\x92\x61\x2b\xb6\x91\x5f\x1f\x9c\xfb\xca\x76\x3d\x8f\x76\xa5\x53\xb7\xf8\x78\xc9\x43\xf2\xf0\xe9\xd5\x5f\xbf\xfe\xf9\x7e\xfb\x7c\xff\xf1\xd3\xc3\xd3\xe3\xed\x49\x88\x4f\xdb\xfd\xe3\xdf\x9f\xde\x3c\x3c\xbe\xbd\x3d\xfd\xcf\x7f\xff\xe7\xaf\x7d\xfa\xeb\xeb\x5f\x5e\x7d\xfa\xfc\x76\xfb\xf2\xf0\xe6\xf9\xdd\xed\xc9\xf4\xc3\xd7\xd3\xf6\xee\xfe\xe1\xed\xbb\xe7\x6f\x7f\x7d\x7e\xb8\xff\xf2\xef\x4f\x5f\x6f\x4f\xbc\xf1\x66\xba\x99\x9e\xae\x8d\xca\x69\xfb\xfa\xe7\xfb\xc7\x4f\xb7\xa7\x77\xcf\xcf\x1f\xfe\x72\x73\xf3\xe5\xcb\x17\xfa\x62\xf4\xf4\xf1\xed\x8d\x32\xf3\xcd\xa7\xcf\x6f\x2f\x47\xfe\xf2\xf5\xfd\xc3\xe3\x3f\x5f\x3a\x28\x33\x73\xb3\xbe\x3d\xbd\xfe\x65\xdb\xb6\xed\xd5\xf3\xc3\xf3\xfb\xfb\xd7\xff\xf8\xe3\xf3\xc3\xdf\x9f\x1e\x5f\xdd\xec\x7f\xee\x5f\xbd\xdd\x1e\xde\xdc\x9e\x2e\x5f\x9d\xb6\x4f\xcf\x1f\x9f\xfe\x79\x7f\x7b\x7a\x7c\x7a\xbc\xff\xf6\xd7\xaf\x97\xfb\xc8\x69\xfb\xc7\xc3\xfb\xf7\xdf\xbe\xc4\xe7\x5f\x3f\xfe\xef\xfb\xfb\xdb\xd3\xfd\xe7\xfb\xc7\xa7\x37\x6f\x2e\x8f\x5b\x76\x3f\xfc\xf1\xfc\x6e\x7b\x73\x7b\xfa\x4d\x86\xa2\x26\xd2\xeb\xac\xe4\x19\xe6\x95\xb2\xdd\x49\x91\x55\x4e\xca\x9c\x85\xba\xb5\xc5\x2b\x36\x09\xe2\x0c\x17\x4b\xa0\x9e\xe9\x91\xb5\x89\x52\xe3\x83\xcd\x59\xc9\x62\xa6\xd9\x62\xbb\x13\xa6\xd4\xe8\xe6\x38\x2b\x75\x99\x49\xca\xd6\x14\xe9\x63\xa3\x71\x36\x1a\xe5\xb4\x1e\xd9\x92\xda\xa5\xa4\xf3\x1c\xe4\x22\x1c\x2c\xb6\xdd\x05\x89\xb4\xb7\xb4\x9d\x93\x86\xc5\x53\x2c\x36\xa3\xea\x60\x93\xea\x73\x53\xf5\x8c\x4a\xd8\xa6\x34\x51\x3c\x16\x73\x16\xa6\x11\x0d\x73\xdd\xee\x94\x44\x47\x52\x6d\xce\x62\xc4\x16\x3c\x26\x9b\x50\x9b\x54\x8e\xf5\x59\x82\x4c\x2b\xab\x37\x25\x1e\x2e\x63\xce\xb3\x14\xc5\x32\xd1\xb0\x60\x3e\x39\xa2\x75\x96\xa1\x0e\x6f\x9d\xdc\x8c\x24\x4a\x5a\xca\xcf\xaa\xc4\x2a\xcc\x53\x9b\x93\xbb\x89\xb0\xe7\x59\x0d\x1e\x57\x49\xe1\x1e\xa5\xc3\x36\x52\x67\x0d\xaa\xd6\x30\xab\xad\xc8\xc3\xc3\x54\xe5\xac\x45\xa6\xc2\x2e\xb2\x0d\x79\x4e\xa7\xc7\x9c\xb5\xc9\xda\xca\x1d\xe9\x10\xf2\x0e\x99\x3a\xeb\x90\x7b\xba\x97\x6e\x62\x30\xec\x66\x76\x36\x26\x66\xd1\xf2\xda\x24\x89\xb9\xaa\x55\xcf\xc6\xdb\x1d\xf2\x2b\x93\x99\xb2\x1f\xb2\x68\xcf\x4d\x95\x86\xad\x63\x7f\x4c\xe2\x4e\x1d\x9b\x06\x9e\xc2\xf8\xa9\x26\x19\x4b\x5a\xce\xf6\x37\x55\x92\xf2\x0c\xc1\x5d\xdb\xc5\xd4\x67\xbb\x53\xa6\x0e\xb3\x61\x39\xab\x13\x9b\xa6\x85\x6d\x32\xa4\x12\x2c\x09\xb0\x25\xd4\x3a\x37\xc1\x5d\x9b\x35\x03\x01\xe0\x71\xd7\xc0\xa5\x82\x8a\x85\x6d\x85\xc5\xca\x32\xc3\x71\xa9\x61\x2e\xef\x04\x2a\x56\xce\xb2\x28\xa6\x15\xa6\xb2\x1e\xe6\xe2\x86\xab\x2e\x8a\xf9\xb4\xcd\x20\xe0\xc8\xd2\xf8\x36\xa4\xd9\xe0\x13\xdc\x0d\x51\xf7\xac\xad\x49\x07\x51\xf0\xb3\x0a\xb1\x72\x64\xcf\x76\x57\x64\xc6\x3e\xc2\x83\xe4\x86\x76\xb9\x0f\xd8\x28\x9e\x31\xde\x60\x42\x75\x75\x49\x1e\x50\x84\xb8\x9b\x75\xb6\xbb\x6b\xd8\x49\x75\xaa\x6b\xb6\x6b\xc3\x4a\xde\x3d\xe2\x79\xe5\x04\x38\x3a\xc5\x96\xbd\xdd\xfd\xf0\x77\x28\x38\x24\x86\x7d\xbb\xba\x59\x13\x62\x2b\xd2\x72\x1d\x86\xa2\x64\xd3\xf6\xde\xee\xae\x42\x96\x04\xb7\x34\x62\xd5\xea\x25\xba\x49\xe9\x36\x03\x7a\x5d\x65\x22\x69\xd4\xa4\x73\x51\xe4\x92\xb3\x22\x65\xb5\xaa\xd9\xae\xb2\x5b\x34\x1d\xac\x2e\xb1\xfd\x60\xc2\x90\x54\x9a\x79\xf4\xf6\xb7\x2b\xda\xe0\x99\x8a\xbe\x01\x82\x18\x35\xca\xad\xfd\xec\x24\x31\x52\x3e\xb5\xa9\xa0\x02\x24\x0b\x0d\x80\xbd\xba\x05\x59\x7f\xb1\x0b\xfd\xbe\xfd\xa6\x45\x1c\xc2\xce\x7d\x56\xa6\xd2\x08\xc3\x95\x35\xa9\x57\xb6\x62\xc1\x39\xa0\x83\x26\xa5\xba\x4f\x3b\xc0\xae\x1e\x2e\x07\xea\xe9\xea\x13\x2b\xf5\x36\x12\x69\xcb\x82\xb1\x8d\xe7\x00\x96\x19\x8f\x1e\x1c\x96\xf1\xea\x5c\x87\x9d\x2d\x43\x6c\xa1\xc1\x51\x6e\x40\x53\x93\x57\x7f\x02\xcc\x69\x89\x72\x41\x3b\x6c\x9d\xca\x75\x18\xe5\xae\xb6\x5a\x43\x75\xc5\x04\x50\x95\xa8\x91\x85\x6a\xb7\xa4\xf6\xc5\x0b\x8d\x60\x05\xec\x53\x29\xd3\xcb\x65\x1f\x57\x4d\xa0\x59\x99\x52\xba\xae\x67\x35\xda\x0b\x6d\x46\x7f\xca\x4b\x28\xd2\x1a\x11\x52\x1a\x6d\x8f\x99\x0d\x71\xf3\x9a\xea\x1d\x9d\x40\xaf\x06\xaa\xe5\xa9\xe9\xd7\xe8\x9d\x16\x45\x75\x9a\xcc\x4f\x87\xbb\x58\x14\xfd\x1b\x0d\xdc\x27\x5c\x36\x6d\xe2\x46\x30\x96\x6b\x88\x44\xc1\xc2\xa2\xf6\x8c\x2d\xdf\xdc\x83\x7b\x1d\x75\xe5\x8a\x5a\x67\x25\x2c\xac\xeb\x80\x22\x6a\x13\xbd\xd8\x72\x80\x53\xb5\x3b\x02\x87\x2d\xcc\x67\x7c\xcf\x87\x98\x23\x1f\x4d\xaa\x15\xd5\x02\x54\x45\xdb\xc2\x97\x09\x61\xc9\xc8\xda\x8b\xdc\xad\x4d\x70\x8d\x51\xcd\x18\xdb\x59\x51\x1e\x05\xb0\xc4\x34\x72\xd1\x67\xb8\x02\x8d\x1a\x71\x60\x2b\x74\x13\xa6\x62\x9b\xd1\xde\x63\x86\x4a\x58\x0c\xcc\x16\x45\xeb\x78\x99\x97\x20\x6c\x93\xe5\x88\xa9\xa0\x4d\x34\x67\xf2\xc8\xee\x9b\x67\x5b\xac\xee\x81\x6a\xa9\x15\xe1\x71\x8d\x9e\x02\x38\x98\x9c\xb2\x1e\x58\xad\x06\xd3\x52\x24\xca\xda\x6e\xcb\xb9\x54\x65\x6b\x05\xac\xcd\x2b\x6e\x70\x59\xb4\xab\xd6\x61\x6f\xaf\x1a\x07\xea\xd9\x99\xb1\x66\x59\x71\xad\xc6\x08\x13\xae\xee\x61\x01\x78\x14\x0f\x5f\xb1\x70\x2f\x51\x0c\xf5\x46\xa1\xf6\xc5\xb7\x30\xeb\xd6\x85\x5a\x8e\x0e\xf7\xc5\x0b\x4e\x97\x00\x0c\xd6\x8c\xaf\x18\x57\x56\x08\xc6\x6c\x53\x45\xe5\xc8\x7e\xbd\x48\x96\x59\x68\xb7\x65\x66\x5e\x42\x81\x01\x26\x68\xba\xcc\x13\xe8\x98\x2b\x6e\xc9\xc5\x3b\x5a\x59\xa3\x2b\xff\x31\x5a\x52\x75\x8d\xc2\x44\x4f\x9a\x97\xee\x70\xa4\x70\x6d\x3a\x24\x5d\x32\x22\x78\xde\x84\x87\xba\x02\x75\x96\x8e\xdd\x35\x9b\xde\xcb\x7f\x28\x25\x03\x53\xbd\x29\x34\xc4\x30\x15\x87\xca\x2a\x13\x66\x9b\xd4\x5c\x67\x37\x5b\xd6\xed\xb3\x82\x66\x5c\x12\xeb\xf7\x3f\xc0\x62\x30\x73\xfd\x3e\x4b\xd2\xdd\xf7\x64\xa0\x67\x2e\x34\x3c\x32\x67\xa1\x3a\x06\xcf\x97\x05\x97\xa9\x7d\xc8\x08\x47\x88\x08\xce\xaa\x73\x05\x44\x08\x18\xd1\x81\xb1\x3c\xc4\x26\xe6\x65\x8b\x3b\x25\xad\xb9\x53\xaa\x55\x7a\x78\xc1\xd5\x21\xca\xbd\x47\x4c\x1c\xcd\x18\x28\xa4\x4f\x6d\x2f\x93\xf2\xf7\xed\x37\x29\xe2\x86\xee\x11\xe8\x23\x99\xf6\x28\xcc\xd5\xa4\xd0\x2c\x75\xc3\xf8\x9a\xec\x49\x1d\x4c\x94\x91\x1c\xe7\x58\x28\xe3\xd1\xb2\x2d\x05\x05\xc5\xb2\x14\x96\xc6\x30\x86\x9a\x38\x95\x33\xa4\xd3\x32\xec\x3a\xc2\xb1\x89\xa3\xd3\x0e\x2e\x62\xe4\xd0\x60\xd9\x4b\xc6\x54\x34\x02\x61\xd4\x11\x3d\xb2\x0f\x35\x0b\xc9\x1c\x5b\x73\xb5\x99\x65\x3f\xcb\xa9\x9d\x59\x40\x5b\x19\xcc\xc5\x58\x44\xfb\x66\x9c\x0d\x72\xee\x6c\x4c\x77\xe8\x52\x85\xfe\x4c\xc0\x33\x39\x28\x24\xa0\xdd\x9d\xe1\x88\x45\x72\x56\x62\xb2\xda\x12\x9b\x8b\xc1\x45\x92\x3c\xc1\xb3\x7b\xe1\x35\xa9\xab\x62\x4a\x42\x20\xdd\xe0\xb1\x65\x76\xec\x15\xd3\x18\x35\x8a\xcb\xa9\x85\xa3\x3f\x2f\x4e\x29\x4b\x5f\x22\x61\x2e\xd2\xab\x08\x22\xd4\xdb\xf6\xa0\xa1\x41\xc7\x22\xb0\x99\x48\xe5\x0a\xb0\x32\xe4\xd5\x35\x8a\x6c\x94\x7a\x9a\xf8\xe1\x70\x91\x4f\x32\x2f\x06\x97\x58\x34\xe2\xd3\xc4\xe9\xcd\xb2\xd8\x2e\xee\x48\xe8\x76\x27\x4d\x69\x16\x48\x27\x5a\x7d\x42\xa2\x6e\xab\x46\x8c\xcb\xf6\x96\xc4\x5e\xda\xf3\x13\xca\x0c\x8d\xb2\x5b\xf8\x0e\x23\xc4\x0c\x9e\xe0\xc1\x15\xca\xc8\x3d\xd4\x9e\xab\x40\x78\x34\xb9\xcb\xa8\xac\xcc\x99\x84\x97\xfa\xb2\x20\xdc\x09\x15\x8c\x3c\x4b\x42\xbb\xe2\x16\x69\xc1\x96\xba\x28\x81\x3c\xa7\x6d\x2f\xd3\x12\xdd\x35\x28\x65\xac\x57\xee\xca\xa6\x9a\xd1\x51\xe0\x11\xd6\x8e\x55\x35\x19\xc6\x2a\x09\x35\x2b\x35\x21\xbd\x6e\x92\xc6\x16\x68\x4a\x8e\x4d\x41\x15\x19\x4d\xca\xf2\x48\x83\x89\x95\xa5\xae\x1d\x2e\x69\x50\x12\x87\xc3\x38\x9b\xf7\xba\xd1\x1a\x4b\x05\x6a\xc5\x56\xb5\xce\x4e\xb7\x1a\x12\xad\x4e\x2a\x2c\x2b\xff\x45\xe2\xed\x5d\x85\xc3\x58\x0e\xb2\x05\xa8\x05\x66\xc9\x32\xcc\x91\xc5\x7a\xc9\x48\xb0\xb1\x2c\x13\x2c\xea\x50\x5d\xa0\xdb\x94\x35\xaf\xe7\xb1\x85\x22\xfd\x4d\xac\x55\xdd\xb6\xec\xaa\x4c\xe9\xec\xbd\xaa\xd4\xc3\x76\x27\xb8\xb3\x7a\xb5\x30\xc7\x8a\xd6\xb9\x3c\x8e\x48\x06\x01\x1a\x5b\x59\xfa\x02\xc3\x9d\x23\x63\x6f\xda\x12\x59\x7e\x89\x84\xc6\xa2\x7c\xaf\x79\xd9\x5d\x7b\xd8\x5c\x38\x17\xdd\xc6\x7d\x09\xae\x20\x69\x6e\x6e\xb9\x02\x57\x36\xda\x2b\xf6\xb6\xff\xe3\x68\x55\x22\x31\xcb\xaa\xda\xb4\x0e\xd0\x19\x51\xeb\x65\x35\x79\xd8\x2f\xda\x4c\x39\x45\xf7\x21\x63\xe3\xc2\xbb\x2a\x32\x28\xe5\x58\x87\x85\x35\x55\xf4\x80\x22\x64\x9d\x02\xc6\x1f\xe1\x28\x41\x06\x96\x0a\x0b\x7c\xba\x24\x83\xad\x78\xa1\x28\xeb\x98\xda\x6b\x5f\x46\x6a\x96\x09\xe6\xea\x0b\xd9\x66\x15\xf1\x72\x19\xca\xb3\x2f\xcd\x58\x33\x6c\xd6\xe6\xf4\xaf\xbc\x3c\xf2\x15\x5d\xb0\x94\x5b\x8f\x7c\x45\x43\x63\xf7\xd1\x03\x5f\xb1\xab\x56\xd5\xc8\x81\xaf\x46\xdc\x82\x80\x1d\xf9\x6a\x24\x9a\xca\xe6\x07\xbe\x1a\xba\x91\xa5\xcd\x81\xaf\x46\x06\x79\x97\x71\xe4\xab\x51\x44\xcc\x5a\xa4\xaf\xf8\x6a\x54\xc9\x92\x7b\xd5\x7c\xe7\xab\xd1\xb4\x7a\x54\x1f\xf9\x0a\xe2\x79\x73\xf5\x35\x5f\x9d\x1c\x9f\x62\x0e\x7c\x75\x4a\x2c\x65\x58\x9f\xae\xf9\xea\x58\xaf\xb9\xd2\x0e\x7c\x0d\x74\x3c\x2e\xab\x03\x61\x83\x24\x7a\x26\x8e\x7c\x0d\xd2\xf6\x91\xdd\xc2\x77\xbe\x06\xca\x4e\x7e\x26\xec\x0f\xf4\xc0\xd8\xc3\xe1\xef\x94\x0d\x52\x13\xc7\x08\xbb\xa6\x6c\x10\x4b\xfa\x2a\x9a\x2b\xc6\x3a\x35\x4b\xd8\xbe\x7a\x7c\x27\xa1\x53\xf0\xcc\x84\xfc\x84\x2a\xd2\x6f\x7e\x64\xac\xd1\xd4\xd8\x44\x1d\x18\x6b\x50\x56\xd0\xf4\x07\xc6\x1a\x05\xc4\x99\xf4\x91\xb1\x46\x58\x09\x6c\xf2\xc0\x58\x90\xc2\x26\x4b\xb6\x17\x99\xf9\x93\x7e\xc5\x58\x9d\x54\xf3\xa3\x7e\xc5\x8a\x60\xdd\x63\x07\x01\x6b\x24\x8c\x9d\xf7\x28\x60\x8d\x34\x4d\x67\x2d\x2a\x57\x02\x16\xad\xde\x92\x51\xbf\x57\x02\xd6\x28\xb5\xd0\x63\x0f\x02\x16\xa2\x80\xb1\xf1\x1f\x05\xac\x13\x97\xba\x1f\xe4\xab\x63\x9b\x1a\xde\x45\xf4\x77\xf9\xea\x78\x82\x71\xc8\x51\xbe\x3a\x95\x4a\xa5\xea\x41\xbe\xfa\xda\xa5\x39\xfa\x20\x5f\x83\x58\x33\x9b\xe7\x28\x5f\xc1\x42\x4d\x86\x89\x2b\xf9\x1a\xa4\x82\xe2\xee\x83\x7c\xfd\x81\x1e\xe4\x2b\x60\xf0\xff\x28\x5f\x83\x78\x2a\x6c\x17\x7f\xdf\xe4\xab\xaf\x17\x71\xb5\x26\xde\x0f\xf9\xea\x94\xd9\xe2\xd8\x49\xae\xe4\x2b\x4a\xbe\x8c\xe3\x5a\xbd\x22\x62\x56\x3a\x7a\x90\xaf\x46\xed\x58\xda\xe7\x20\x5f\x91\x8a\xf0\xb6\x3a\xc8\x57\x88\xb6\x9c\x82\x44\xbc\x92\xaf\x46\xea\x1d\x1a\x7e\x90\xaf\xe0\x83\xc4\x80\x25\x57\xfa\xd5\x88\xe1\xab\xff\xa4\x5f\xd7\xe2\x2a\x16\x72\xd0\xaf\x10\x99\xe1\xb2\x6f\x7c\x2f\xb0\x72\x7f\x3f\x20\x52\x66\xaa\xe7\x21\x1e\xc5\xec\xbf\xbc\x1f\x98\x60\x8b\x39\x0f\x89\x65\xf9\x5a\x05\x92\x72\xb8\x7a\xfa\x0c\x47\x63\x58\xd7\xca\x1f\xc6\x68\xa5\x67\x84\x3a\x95\x23\xf6\x6a\x44\xbb\x6b\x3b\x0f\x45\x66\x40\x8f\xac\x6a\xc4\xaa\x51\x30\x50\xc5\xc5\x7c\x59\xed\xb3\x33\xea\x3c\x34\xa3\x33\x79\x19\x1f\x52\x18\x0f\x71\x16\xc6\xf2\x6f\x9e\x7b\xe5\x4e\x98\x5a\x01\x75\xa8\xd6\x5e\xef\x0c\xb4\x51\x81\x09\x34\x23\x74\xf5\xf8\x24\x5b\x6f\x86\x16\xda\xe9\xb9\x1a\x74\x52\x48\x14\xba\xab\x10\xbb\xa5\xe8\x6a\x13\xc5\x2e\x09\x19\x25\x24\x39\x71\x69\x29\x3d\xd0\xf1\x0b\xd5\x89\x80\xec\x5f\x21\x73\x5d\x54\x15\xb2\xd4\x12\x5b\x5b\xa0\x39\x8f\xa0\x0e\x7f\xa0\xab\x60\xdc\x3b\x21\x54\x0f\x87\xc7\x72\x17\xb5\x42\xea\x32\x3e\x6b\x59\x83\x40\xf6\xde\x5d\xc3\x13\x6c\xa5\xd9\x32\x75\x71\x8d\xa9\x45\xb9\xd2\xd7\x5b\x80\xce\x99\x58\xef\xc2\x42\xf9\xdb\x12\x78\x85\xaa\x64\xda\x65\xd3\xf9\x06\x0f\x4d\xcf\x18\x54\x3f\x50\x99\xc2\x62\x3e\x54\xd9\x66\xb9\x9b\xd0\x31\xac\xa5\xe7\xf5\x4e\xa9\xdb\x63\xdf\x18\x25\x6b\xbc\xe5\x3c\x64\x23\x56\x7d\x29\xf1\x06\x51\x6a\x11\xc2\x83\x53\x56\xf3\xc1\x16\x3d\x96\x20\x4f\x54\x79\xa9\x5e\xde\x92\x30\x83\xaf\xd8\x39\x19\xc2\x6f\x99\x40\x47\xd5\x0e\xa0\xde\x26\x2d\xbe\xbd\x4c\xcb\xdf\x4f\xeb\x6d\xfe\x7f\xbd\xfb\xe3\xc3\xfd\xb7\x97\xf5\xff\xf6\x1f\x6c\x5d\x71\x78\x5f\xff\xf8\xf4\xf8\x7f\xf7\x1f\x9f\x4e\xaf\x5f\xdd\x7c\xf8\xe3\xf9\xdd\xe5\x5f\x01\x37\x6f\x5f\xff\xf2\xea\xe6\xd3\xe7\xb7\xaf\xff\x3f\x00\x00\xff\xff\xf0\xab\x2d\xb3\xed\x18\x00\x00") + +func web_uiAssetsFaviconSvgBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsFaviconSvg, + "web_ui/assets/favicon.svg", + ) +} + +func web_uiAssetsFaviconSvg() (*asset, error) { + bytes, err := web_uiAssetsFaviconSvgBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/favicon.svg", size: 6381, mode: os.FileMode(420), modTime: time.Unix(1645446280, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsInit21ea65714d133467454b601efc15e2ddJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x92\x4f\x6f\x1a\x31\x10\xc5\xef\x7c\x0a\x77\x0e\xc4\x56\x16\xa7\xe7\x48\xdb\xaa\xa2\x39\xb4\x6a\x9b\x2a\x34\xa7\x88\x83\xf1\x0e\x8b\xd1\x32\xb3\xb5\x67\x03\x08\xf8\xee\x95\x97\x94\xfc\x11\x52\xd5\x9b\x77\xa4\x79\xef\xcd\xef\xad\x9e\x77\xe4\x25\x30\x69\x34\x3b\xcf\x94\x44\x49\x49\xb8\x56\xdf\x5d\xab\x6f\x67\x4b\xf4\x62\x91\x24\x06\x4c\xfa\xeb\xe4\xf6\x87\x6d\x5d\x4c\xa8\xd1\xfe\xee\x30\x6e\x27\xd8\xa0\x17\x8e\x1a\x1e\x2a\x27\x6e\x94\x05\xba\x66\xd4\x85\xd1\x3c\x4d\xc1\x58\xc1\x8d\x8c\x99\x04\x49\x8c\x31\x05\x95\x27\x37\x31\xbb\x47\x17\x15\x95\x68\x7d\x44\x27\x78\xd3\xe0\x0a\x49\x34\x24\x1f\x43\x2b\x60\x06\x64\x53\xf4\xa5\x14\x68\x67\x5c\x6d\xad\x6b\x5b\xa4\x6a\xbc\x08\x4d\xa5\xc9\x1c\x06\xf0\x0b\x37\xf2\x19\x3d\x57\x18\x21\x90\x5a\x07\xaa\x78\xbd\xdf\x6b\xd2\x62\x6b\x14\xfd\x00\xd9\x7e\x84\xe4\xb9\x0a\x54\x43\x01\x7f\x9f\xa3\x40\x15\x6e\x30\xc1\xd4\x2e\x39\x90\x86\x2b\x30\x97\x60\x97\x09\x72\xc8\x7f\xae\x9f\x5b\x33\xc5\xd1\xdf\x8e\x27\x93\xe1\xf0\xf9\x6d\x31\x79\xd7\xe2\x7e\xff\x2c\xeb\x53\x7a\x9a\x42\xf1\xf2\xe3\x8c\xea\x40\xe2\xf6\xd4\xca\x5b\xe6\x17\x0f\xe4\x56\x58\xc2\x09\xfa\x95\x67\x9a\x87\xfa\x0a\xe9\x31\x44\xa6\x8c\x13\xa6\x17\x19\xfb\xff\x34\x77\x14\x79\xdb\x5e\xc1\x2f\x45\xaa\x1e\xfb\xfd\xdd\x97\x31\xaf\x5a\xa6\xdc\x5b\x7f\xdd\x27\x91\x18\x66\x9d\xa0\xce\xa9\xf2\x62\x8f\xc6\x97\x90\x24\x66\x72\xef\x4a\xd9\xb6\xc8\x73\x45\xf6\x49\xf9\xa7\x93\xc5\x47\x80\xeb\x57\x83\x81\xb7\x0d\x52\x2d\x8b\x0f\xef\x87\x43\xcd\x36\x32\xcb\xfd\xdd\xb7\xd2\x9b\x42\x6c\x3a\xeb\x53\xf4\xed\xbc\xce\xd4\x27\x3e\x3a\x87\xf9\x56\xb3\x31\xe6\xe0\x9d\xf8\x85\x66\xb3\x93\x45\xe4\xb5\xca\xbf\xfa\x4d\x8c\x19\xc4\x3d\xb9\x59\x83\x4a\x58\xf5\x47\xaa\x13\x12\x95\x50\x24\x50\x9d\xae\x15\x5c\xb2\x5d\x61\x4a\xae\x46\x73\x38\x18\x5d\xb1\xef\x32\x67\x33\xf8\x13\x00\x00\xff\xff\x11\x4d\xbd\x22\x49\x03\x00\x00") + +func web_uiAssetsInit21ea65714d133467454b601efc15e2ddJsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsInit21ea65714d133467454b601efc15e2ddJs, + "web_ui/assets/init-21ea65714d133467454b601efc15e2dd.js", + ) +} + +func web_uiAssetsInit21ea65714d133467454b601efc15e2ddJs() (*asset, error) { + bytes, err := web_uiAssetsInit21ea65714d133467454b601efc15e2ddJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/init-21ea65714d133467454b601efc15e2dd.js", size: 841, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsLoadingCylonPinkSvg = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\xd3\xcf\x6b\xdb\x30\x14\x07\xf0\x7b\xfe\x8a\xc7\xdb\x65\xbb\xd8\xb2\xe2\x05\xb3\x58\x81\x6d\x97\x5d\xb2\xc3\x56\x72\x57\xec\x17\x5b\xd4\x96\x84\xf4\x6c\x27\xfd\xeb\x8b\xdd\x1f\x94\x52\xe8\x2d\xed\x41\x42\x42\x7c\xbf\x48\x1f\x50\x19\xc7\x06\xce\x7d\x67\xa3\xc2\x96\xd9\xff\x48\xd3\x69\x9a\x92\x69\x9d\xb8\xd0\xa4\x52\x08\x91\xc6\xb1\x41\x18\x0d\x4d\xbf\xdc\x59\xa1\x80\x2c\x87\xb5\x84\xac\x40\x98\x4c\xcd\xad\xc2\xb5\x44\x68\xc9\x34\x2d\x2b\xcc\x11\x4e\xa6\xeb\x14\x7e\xa9\x37\x85\x3e\x4a\x04\x1f\x28\x52\x18\xe9\x67\xf4\x54\xf1\x3f\xcd\xc6\x29\xb4\xce\x12\xee\x56\x00\xa5\xd7\xdc\x82\xf3\xba\x32\x7c\x51\x28\x92\x02\x81\x83\xb6\xf1\xe4\x42\xaf\x70\x59\x76\x9a\xe9\xab\x00\xf1\x0d\xa1\x56\xb8\x97\xf3\x0d\x0e\x59\x01\x7f\x36\x70\xc8\xf2\xbb\xa5\x07\xa0\xd4\xd6\xf4\x9a\xe9\xe6\x29\x0d\x9a\x39\x98\xe3\xc0\xf4\x57\xf7\xf4\xd8\x35\x1f\x20\xf0\xc5\xd3\x8b\x72\x84\x51\x77\x03\xc5\xf9\x75\x62\x0b\x32\x9f\x67\x01\x02\xa1\x1e\x82\x42\x19\x11\x8e\xd4\x18\xab\x50\x20\x04\xf2\xa4\xf9\xb7\x1b\x2c\x2b\x34\xb6\xa6\x93\xb1\x66\xee\xb8\xa5\xcb\x7f\xdf\x19\xbb\xf4\x24\x12\x1e\x46\x0e\x22\x29\xb6\xaf\xf6\x08\x95\xee\xaa\xbd\xab\x49\x61\x5c\x32\x08\xe9\xc2\x91\xce\x1e\x6f\xc2\x7c\x7f\x17\x46\x3c\xc3\x14\xd7\x87\x49\xb2\xf8\x71\x36\xf2\xb3\xe3\xc8\x6b\xe1\x94\xf3\x77\xdd\xad\xee\x03\x00\x00\xff\xff\x70\xd5\x10\x78\xd7\x03\x00\x00") + +func web_uiAssetsLoadingCylonPinkSvgBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsLoadingCylonPinkSvg, + "web_ui/assets/loading-cylon-pink.svg", + ) +} + +func web_uiAssetsLoadingCylonPinkSvg() (*asset, error) { + bytes, err := web_uiAssetsLoadingCylonPinkSvgBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/loading-cylon-pink.svg", size: 983, mode: os.FileMode(420), modTime: time.Unix(1645446280, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsMetricsProvidersConsul31d7e3b0ef7c58d62338c7d7aeaaf545Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x92\xdd\x8a\xf2\x30\x10\x86\xcf\xbd\x8a\xb1\x08\x26\x50\x7a\x01\x1f\xf4\xe8\x63\x0f\x97\x95\xf5\x50\x04\xb3\xe9\x54\x67\xb1\x89\x4c\xa6\x16\x89\xb9\xf7\xa5\xfe\xac\x74\xab\xa7\xf3\xe4\x7d\xf3\x30\x8c\xaa\x5b\x67\x85\xbc\x53\xac\xa3\xf5\x2e\x08\x60\xb9\xca\xc8\x91\x64\x79\x16\x90\x8f\x64\xf1\x13\x2d\x3a\x59\xb6\x4d\x63\xf8\xb4\x44\x26\x0c\xaf\xa0\x18\xe9\x59\x7b\x08\xc2\x68\x9a\xa7\xb0\xf2\x9d\x7b\x89\xd7\x13\x2e\x7a\x8f\x76\x5f\x3a\xec\xc0\xee\x4d\x08\x57\x31\x6e\xad\x78\x56\x3a\xca\x8e\x42\xc1\xb8\xa5\x20\x7c\x2a\x63\xca\x2f\x83\x03\xfb\x23\x55\xc8\xa1\x8c\x29\x5d\x29\xf2\x3b\x0a\x93\x0d\x8b\x1b\x53\x9c\x8b\x8e\xb5\x67\x75\x34\x0c\x04\xbe\x06\xd4\x54\xab\xec\xbe\x85\x6c\x5a\xca\xe9\x80\xbe\x06\x59\xd1\x5a\xcb\x8e\x7d\x07\xbd\xc7\x1b\xb3\x67\xb5\xf9\x6f\xdc\x5c\xe0\xde\x0e\xcd\xb5\x1e\xee\x7f\xc3\x7c\x16\x39\xcd\xff\x41\x43\x21\x90\xdb\xc2\x2c\x52\xea\x5f\xed\x7c\x55\x6c\xf4\x64\x60\xbe\xe2\x75\x29\x69\x8b\x32\x96\x44\x1d\xa9\x56\x53\xc5\x40\x0e\x06\x21\x3d\x76\xba\xc5\x61\x31\x94\x00\x0a\xe0\xfc\x43\x16\x2f\x06\x8c\xd2\xb2\x83\x47\xf1\xef\xda\xce\x67\x35\x1c\xf4\x7e\x1f\x5f\xdf\x68\xa5\xb0\x8c\x46\x50\xfd\xd5\xd7\xf9\x28\x51\xf4\x97\xa3\x50\x3f\x41\x29\x25\xad\x3a\x72\x95\xef\xf4\xe4\x27\x00\x00\xff\xff\xda\x1a\x7e\xe5\x78\x02\x00\x00") + +func web_uiAssetsMetricsProvidersConsul31d7e3b0ef7c58d62338c7d7aeaaf545JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsMetricsProvidersConsul31d7e3b0ef7c58d62338c7d7aeaaf545Js, + "web_ui/assets/metrics-providers/consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js", + ) +} + +func web_uiAssetsMetricsProvidersConsul31d7e3b0ef7c58d62338c7d7aeaaf545Js() (*asset, error) { + bytes, err := web_uiAssetsMetricsProvidersConsul31d7e3b0ef7c58d62338c7d7aeaaf545JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/metrics-providers/consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js", size: 632, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsMetricsProvidersPrometheus5f31ba3b7ffd850fa916a0a76933e968Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x5d\x73\xdb\x36\xd6\xbe\xd7\xaf\x40\x30\x79\x15\x22\x42\x69\x29\x69\xf2\x36\x8c\x59\xcd\xac\x9b\x76\x33\xb3\x4d\xbc\xb6\x3b\xb3\x33\x1a\x2d\x0d\x91\x47\x12\x1a\x09\x50\x00\xd0\x96\x47\xe6\xfe\xf6\x1d\x80\x1f\x22\x29\xc9\x76\x9a\xb8\xbb\x17\x7b\x25\x91\x78\x80\xf3\x81\x07\xe7\x1c\x00\xf4\xa6\xa9\x88\x0d\x97\xc2\x23\x9b\x2b\xa6\x10\x84\x9b\x54\x70\x73\x9e\x4e\xa7\x7c\x1d\x60\x4c\x17\x6c\x02\x0b\x1d\x6c\x32\x9a\x30\xc3\x82\xd1\x38\xa3\x26\xdc\xc8\x95\xed\xe3\x5e\x73\xc1\x4d\x50\x8d\x02\x64\xc3\xa7\x9e\x99\x73\xed\x17\x98\x10\xe8\x93\xfa\xb3\xbf\x04\xa3\x78\xac\xa3\x95\x92\xeb\x9b\x08\x04\x9b\x2c\x20\x21\x66\xae\xe4\x35\x12\x70\x8d\xde\x29\x25\x95\x87\x57\x4a\x2e\xc1\xcc\x21\xd5\xa8\xe8\x81\x56\x4a\x5e\xf1\x04\x14\x8a\x53\xa5\x40\x98\xc5\x0d\x52\xf0\x39\xe5\x0a\x34\x32\x73\x40\x29\x8f\x62\x29\xa6\x7c\xd6\x94\x81\x8c\x44\x13\x40\x79\x53\xaa\x20\x41\x5c\x38\xfc\x89\x14\x3a\x5d\x20\x36\x03\x61\x7c\x4c\x32\x3a\x37\x66\xf5\x0b\xd4\xcd\xa1\x86\xaa\xdc\xa4\xdc\x3f\x3a\xfc\x6e\xf0\x24\x0c\xc1\xe7\x22\x81\xf5\xc7\xa9\x87\x87\x98\x0c\x71\x17\x07\x78\x88\x3b\x10\x42\x4f\xf7\x3e\x4e\x7e\x87\xd8\xf8\x9f\xe0\x46\x7b\x86\xf8\x4b\xb6\xf2\xbc\xba\x83\x14\x98\x54\x09\x04\x22\x96\x09\xfc\x76\xf6\xfe\x44\x2e\x57\x52\x80\x30\x1e\x90\x1e\x0e\x71\x6f\x4f\x8b\x19\xc1\x98\x64\x84\xf8\xbf\x4b\x2e\x3c\xdc\xc5\x24\x2b\x86\x69\xf8\x76\x0a\x26\x9e\x7b\x40\x37\x73\x60\x09\x28\x1d\xa8\xdb\xdb\x4d\x96\x11\xdf\xcc\x41\x34\xb5\xe0\x53\x0f\x7c\xf9\x89\x94\xda\xf8\xbf\x6b\xcb\x82\x8e\xb5\xd2\x84\xb5\x89\xf8\xeb\xc5\xc5\x69\xfe\x3f\x40\xb8\x07\xbe\x36\xcc\xa4\xfa\x02\xd6\x86\x74\xf2\x59\x33\xc5\xbb\x13\x99\x40\x58\x02\xa8\xc9\x08\xc9\xa8\x06\x75\xc5\x63\x38\x83\x18\x84\x39\x4f\x97\x4b\xa6\x6e\xce\x41\x71\xd0\x2d\x2f\x53\x4d\x45\xee\x63\x16\x7a\x56\xfc\x4f\xcc\x00\xf1\x67\x60\x2e\xf8\x12\x3c\x72\x34\x80\x97\x9d\x42\x59\x61\x65\x28\x13\xb2\xef\xde\xf4\xfb\x54\xf8\x20\x92\x90\x51\xe7\x89\x39\xd3\x7f\xfb\xff\x5f\xf3\xe9\xf7\x34\x19\xba\x97\xce\x2d\x67\xf0\x39\x05\x6d\xce\x98\x81\x5c\x81\x42\xae\x20\xc1\x16\xf4\x13\x33\x6c\x0f\xe2\x80\x1d\x86\x99\xbb\xcc\x18\x8d\x3b\xf5\x49\x6a\xab\xe6\x31\x7f\x95\xea\xb9\x57\x53\xf1\xf4\xbc\x18\x05\x17\xf2\x30\x15\x84\xd0\x1d\xe0\xbb\xb3\x87\xe1\x4e\x41\x59\x7d\xf9\x02\xbc\x57\x7d\xfa\xa5\x5d\xde\xbc\xd9\xd7\x85\x04\xbb\x8a\x9f\x48\x21\xac\xdb\x1e\xa6\xd5\x79\xe1\xcb\xf5\x17\xc1\x2f\xbe\x0c\xfe\x41\x9e\xc9\x74\xbf\x46\x84\xd6\xd0\x76\x0e\x3d\x46\x32\x9a\xae\xb4\x51\xc0\x96\x0f\x98\xe2\x6a\x0d\xd7\xd9\xd5\xee\x55\x4a\x2e\xc7\xc5\x54\x93\x8c\x26\xf2\x5a\x3c\x8e\x9c\xed\xc8\xb9\xa4\x03\xf0\x07\xf1\xf5\x0e\x66\xea\x7b\x18\x79\xa0\x7d\x1f\x13\xef\x87\x56\x0c\x3c\x00\x6d\xf1\xee\x00\xaa\xcd\xb7\xbb\x61\x17\x0f\x83\x35\xf9\x95\x63\x5b\xb4\xfa\x45\xc9\x74\x05\x89\x63\x57\x7d\xf1\x07\xbb\xd9\x00\xdb\xd4\x83\xc3\x30\x84\xdb\x5b\xf7\xff\x45\xf9\x30\x53\xab\xd8\xfd\x2f\x66\xb4\x3d\x89\x15\x47\x4e\x95\x5c\x72\x0d\x3e\x5b\x2c\x3c\xd8\x89\xf8\x86\x6c\xa6\x52\x79\x76\xa2\x55\xb8\xd1\x6e\x10\x9b\xcc\x75\xd8\x7f\xab\x8f\xc1\x5f\x80\x98\x99\xf9\x5b\xdd\xeb\x11\x33\xd2\x63\xff\x8a\x2d\x52\xe8\x76\x95\x8b\xe6\xba\xf0\xc1\x48\x8f\x49\x49\x11\xe5\xc2\xfb\x8e\xb1\xdf\x46\xb3\x4d\xb6\x57\x33\x9b\x87\xad\x0e\x25\x5e\xb8\x4c\x6e\xdf\x38\x9d\xe7\x4c\x7f\xbc\x16\xa7\x4a\xae\x40\x99\x1b\x4f\x90\x6e\xd7\x2b\x0c\x18\x89\xf1\xed\x6d\xed\x21\x1c\x8d\x09\xdd\x3e\x6e\xed\x1b\x89\x31\x69\xd9\xa8\x60\x2a\xd5\x92\x99\x76\xda\x72\xa5\x41\x81\xac\x5e\x6a\x97\x59\x9f\x68\xdf\x96\x4b\xb7\xb7\xc5\x1f\x5f\x81\x4e\x17\xe6\xf6\xb6\x1f\x86\x8d\x37\x85\x75\x6d\xe0\xa8\x5f\xcc\x80\xde\xed\xb2\x6d\x2b\x3a\x57\x29\xbc\xb3\x00\x83\xc4\x41\xf4\x81\x42\x64\x63\xf8\x12\x82\x5f\x99\x99\xfb\x4a\xa6\x22\xf1\x06\xf0\xf2\x39\x8c\xfa\x63\x92\x65\x5b\x57\x34\xb5\xde\x19\x0a\xf6\x0b\x71\x2e\x12\x23\x35\x1e\x41\x51\x93\xf9\xae\xa0\x1c\x87\x2b\xa6\x34\xfc\xbc\x90\xcc\xd6\x36\x03\x57\xdb\x64\x84\xd0\x7a\xf5\x69\xca\xe2\x53\xe5\xb5\xa7\xc8\xb2\x2a\xaa\xb5\x52\xf9\x9e\xc8\xe9\xf8\x11\x5e\xea\x74\x89\x26\x37\xc8\x73\x43\x91\xe2\x37\x52\xb0\x5a\xb0\x18\x5a\x4f\x5c\xb9\x50\x22\xae\xe4\x4d\xb4\xe0\xda\x80\x00\x15\xd9\xc5\x18\x6d\x63\x6b\xa4\x3e\x47\xeb\xf5\x26\x76\xa5\x63\xa4\x65\xaa\x62\x88\x8a\xe4\x12\xe2\xa7\x1b\xc8\x30\x6d\x36\x5a\xdd\x6d\x3c\x03\x65\xdb\xcd\x4e\xbb\x60\x4b\xd0\x2b\x96\x77\x57\x19\xa6\xb9\x02\x4e\x6e\x2c\x85\x88\x96\x4c\xb0\x19\xa8\x68\xa5\x60\xca\xd7\x21\x5e\xa5\x93\x05\x8f\x2b\x0d\x71\x36\x1a\xf4\x97\x63\x42\x11\x76\xe6\x60\x8a\xf0\x79\x1a\xc7\xa0\x35\x68\xfb\x90\x8f\xa7\x40\xaf\xa4\xd0\x10\xd9\xda\x32\x8a\x17\x4c\xbb\xc6\xd1\x3f\x5f\x8d\x71\xa3\xaf\x2b\xf5\xee\xef\xf8\x0a\x13\x72\xd9\xd9\xc9\x4f\x45\xe1\x24\xa8\x2e\x16\xba\x6b\x6a\x2e\x21\x0f\x23\xb5\xd2\x98\x6e\x2e\xa4\x61\x8b\x00\xbb\x1f\xc4\xc5\xc4\xd2\xcf\x95\xf4\xa0\x8d\x46\x2b\x50\x48\x43\x2c\x45\x82\x69\x65\x50\x50\xda\x36\x4d\x17\xa8\x54\x4d\x23\xef\x9a\x9b\x39\x62\x02\xb9\x6a\xb5\x7c\x8f\xac\xca\x48\x48\x53\x56\xfc\xaf\xd6\x6b\xa4\x98\x98\x01\xa9\x8d\xee\x63\x9a\xdb\x1c\xe4\xb6\x3f\x70\xd8\xbb\x87\xdc\x46\xc7\x66\x49\x79\x98\xa9\x3f\xa0\xe7\xe8\x6e\xb6\xd6\xf9\x69\xe2\x06\x2b\xe3\x75\x64\xd6\xd1\xe4\xc6\x80\x8e\x8c\x75\xe7\x9f\xc0\x50\xab\xc2\x17\x70\xf2\x63\x6a\xdc\x04\xdb\xff\x91\x1b\x33\x8a\xec\x7f\xff\x39\x26\x48\x2a\xf4\x25\xb6\xaa\xff\x72\x5b\xdf\x8b\x83\xa6\xfe\xf1\x45\x33\xd9\x5d\x33\x13\x26\x92\x6b\x9e\x98\x39\xa6\x85\xc8\xa0\x94\x8d\xac\xa5\xc8\x7a\x11\x79\xf9\x5f\x88\x39\x5c\x41\x42\xd0\x54\xc9\xa5\xe3\xae\x00\x73\x2d\xd5\x27\x4b\xe5\x09\x6f\xac\x38\x1f\xd3\x72\xbe\x82\x6a\xe6\x76\x86\x34\x8a\x09\xbd\xe4\xc6\x3c\x78\x54\xb7\x2c\x96\xec\x13\x9c\xa7\x6e\x97\x7c\x78\x39\x58\xef\x1f\xd9\x19\x44\x9e\x9d\xa7\xca\x6d\xdb\x7a\x3a\x0c\xf5\x50\xf4\x30\xea\x2a\xa6\xd4\x5b\xb4\xd9\xfc\x72\xf6\xf1\xb7\xd3\x2c\xc3\x41\xbd\x16\xb6\x28\x5c\xb5\x95\x60\xdc\x13\x81\xc8\x35\xb1\x4b\xfb\x1c\x16\x10\x1b\xa9\xf6\xa8\xc3\xa7\x5e\x6b\xb8\x22\xdf\x5e\x16\xc4\x49\x40\x1b\x2e\x98\xed\x75\x80\x7a\x75\xc4\x41\xfe\xd5\x41\x6d\x12\x5e\x76\x0a\xa7\x3c\x22\xd1\x2b\x5a\x8a\x5e\xd8\xf4\xf1\xb3\x7b\x33\x52\x05\x7f\x16\xdc\x0f\x6e\x2f\x9f\x67\xf9\x34\x5c\x9c\xfc\x6f\x16\x1e\x32\x0b\xb5\x48\xf4\xaf\x0a\xe1\x3f\xaf\xb9\xfe\xae\x58\xf5\x2c\xa3\x33\x5b\xa8\xff\x3d\x05\x75\xd3\xf0\x73\xb5\x13\xa9\x49\x85\xa1\xe9\x85\xd8\x65\xa4\x42\xed\xb2\xb1\xb4\x9a\xb6\xdf\x6f\x0d\xde\x69\xaa\x6c\x25\xed\x15\x0a\xdd\xae\xd7\x96\xd4\xf4\xee\x41\xb7\x1e\xf2\x27\xc1\x84\x9a\xc2\xd8\xbf\xdc\xbc\x17\xb6\xa0\xdc\xb3\xed\x6a\x18\xbb\x7d\xda\xd5\x0f\xe7\x02\x70\x46\xf3\x3a\xf6\xd4\x39\xd8\xc6\x8e\x7d\xc3\x36\x7b\x0f\x8b\x4a\x2a\x5e\xa4\xda\x80\xda\x7a\x44\x7d\xc6\x01\xae\xad\x97\x46\x99\xd9\x12\x75\x71\xf2\x35\x92\xe2\x75\x25\x69\x27\x9b\xe2\xb2\xaa\x3e\x3d\x6f\xae\xbc\xda\xd1\x80\x4b\x48\xed\x68\x59\x81\x68\xbc\x05\x14\x81\x7d\xdb\xc6\x5d\x11\xee\xb9\x7c\xfe\x74\x93\xe3\x5a\x2e\xf4\x04\xc9\xa2\x58\x2e\x57\x0b\x30\x90\x6c\x9e\x6e\x58\x96\x8d\x06\xaf\x96\xe3\xfd\xd9\xd2\xd8\x4d\x83\x7d\xdc\x52\xd9\x13\x94\x13\x8a\xcf\x4e\xcf\x31\xbd\x3c\x9e\xfc\xf8\x74\x13\x67\xc7\x47\x93\x1f\xcb\x6a\x32\xcf\x5a\xec\x0a\x14\x9b\x41\x82\xe4\x15\x28\x97\xab\x16\x4c\x1b\x34\x78\x85\x96\x5c\xa4\x06\xf4\x25\x55\x74\x3b\x72\xc1\x1b\x4f\x54\xb5\xdc\xbb\xb3\xc7\xf1\x10\xc6\x9d\x3a\x15\xc5\x90\xff\x29\xeb\x4e\x74\xbb\x5e\x5b\xd2\xd7\xaf\x3b\x17\x26\xd3\xf0\xd0\x4c\x53\xd9\x20\x44\x9a\xd9\xfd\x94\x9d\x72\x7a\x70\xbf\x11\xe2\x57\xb8\x24\xc4\xd3\x0d\xcf\x8e\xf6\xf6\xaf\x23\x0e\xd1\x46\x52\xfc\xee\x0c\xd3\xcb\xe2\x8c\x89\xcd\x00\xc9\x29\xda\x43\x18\x8d\xae\xe7\x3c\x9e\xa3\x6b\x50\x79\x8d\x9f\x9f\x6a\xdf\xc1\x9c\x7d\x67\xfc\xca\x1d\xe9\xff\x1f\xce\xc8\x9d\xb4\xda\x9e\x78\xb5\x53\x9f\xa0\x2c\x27\x58\x7c\x80\x60\x25\x88\xf2\x5d\x82\x55\x6d\x69\x88\x17\xd0\xa4\x18\x1b\xa6\xbd\x10\xef\x70\xe5\x6b\xe8\xd5\x66\x17\xeb\x76\xbd\xba\x90\xaf\x64\x56\x41\x2c\x19\x5e\xce\xb9\x36\x72\xa6\xd8\x32\xfa\x9c\xb2\xfc\xa0\xf0\xe9\x06\x8e\x06\xfd\x7e\x46\x8b\x2d\x94\x23\x06\x41\x77\x47\x1d\x46\xb2\xc8\xf0\x25\x44\x93\x34\xfe\x04\x66\x63\x39\x50\x92\xe8\x60\xe0\x91\x14\x9f\xe2\x1e\x14\x51\x86\xe7\xa4\xb1\xa9\xdf\xcc\x6d\xa5\x5b\xcc\x63\x15\x77\x0a\x6b\x91\x95\x73\x07\x79\xf4\x1e\x7e\xb0\x8a\x1f\xe5\x31\xe7\xfd\xc1\xa7\x56\x45\x7d\x93\xe8\x7c\x71\x92\x07\xe7\x7c\x9f\xf5\xc7\x03\xf3\xc9\x59\x2b\x2e\x97\xbb\xfd\x8b\x93\x53\x64\xcb\x44\x70\x76\xd5\x37\x0b\x5f\x1f\xad\xab\x73\xdf\xc7\xf1\x5b\xb1\x61\xbf\xd7\x77\xad\xcd\xea\x57\x64\xb7\x7f\xec\x24\xb7\x18\xf8\x15\x24\xed\x7d\xd6\x37\x73\xdd\xc5\x7f\xd8\x75\xe6\x5b\xb9\xee\xa2\xed\xba\xda\xd6\xf5\xd1\xbc\x57\x5c\x11\x3c\x8a\x0b\x71\x24\x64\xa4\xec\xf0\xb8\xb3\x27\xa9\x87\x38\x2a\x56\x55\x34\x65\x7c\x51\x25\xe5\x87\x2c\x76\x1b\xd5\xfe\xa0\xab\x53\x42\xf1\x87\xf6\x52\x4f\x85\xd5\x93\x4d\x16\x80\x3c\xab\x0c\x24\xe4\xf1\x96\xbc\x61\xbb\x67\x0a\xd6\xe3\xe2\xf6\xd6\x03\x5b\xea\x7c\x3c\x43\x52\x78\x04\x5d\xe5\xee\xee\x97\x05\x0b\x0b\x37\x9f\xdd\xa6\x08\xa8\x3b\x10\x3f\x74\x07\x9d\x35\xef\x74\xf3\x2f\x06\x3c\x7c\xc4\x56\xfc\xe8\x6a\x70\xe4\xc6\xc0\x94\x1d\xb8\x72\x7f\x52\x4d\x7e\xed\x00\x1c\xf6\x1e\xd8\x8f\x06\xd5\x65\xcb\xc6\x1d\x2c\x05\x86\x26\xa0\xe3\x40\x51\xd7\x1e\x70\xfd\x81\x7d\xf0\x18\x19\xe2\xef\x70\xe0\xee\x30\xb3\xf2\x62\x24\x0e\x37\x19\xe5\x61\xff\x2d\x3f\x86\x3d\xd7\x0d\x6f\x79\xaf\x97\xeb\x91\x86\x4d\xe1\x7c\x4c\x65\xe8\x35\xb4\x4b\xb7\xea\xd0\xcb\xa7\x9b\xb4\xa0\xcc\x08\x17\x79\x1a\xf7\x44\x0f\x97\x59\x1d\x8f\x33\xff\x20\x66\x9b\xca\xef\x42\x6d\x2b\x01\x3c\xce\x2e\x49\x27\x1e\xc9\x71\xd8\xf2\x80\x5f\x1e\x13\x6e\x4f\x76\x30\x95\xe4\xb0\x63\x8a\x39\x8b\xb3\xfa\x1a\x6d\x1f\xc7\xe6\x2e\x51\x5b\x22\xb8\xaf\x0c\x02\x93\x7f\x6d\x40\x41\x24\x81\xf1\x41\x24\x54\x1b\x58\x05\x78\xd0\xd7\xd8\x71\x45\xa6\x26\xc0\x3f\x68\xfc\x10\x6a\x44\xee\xac\x18\x53\x45\xb2\xac\x53\x0a\x77\x75\x62\xf5\x5d\xc8\xf1\x00\x5e\x0e\x3f\xa4\xcb\x09\x28\x9f\xeb\xf7\xc2\xc0\x0c\x2c\x60\x88\x71\x0f\x82\xbc\xc1\x83\x1f\xc3\x41\xbf\x3f\x04\xdf\xc8\x53\x05\x31\xd7\xd6\x86\x97\x24\x80\xe3\x81\x7b\xf9\x33\x5f\x43\xe2\xbd\x20\x41\x13\xf1\x82\x90\xc0\x76\x85\x97\xdd\xae\x15\xf4\x7a\xd8\xf3\xc0\xd2\x9a\xb4\x06\xea\xe1\x4f\x38\x47\xbe\xce\x91\x6f\x0a\xe4\xeb\x5d\xe4\xb2\x40\xbe\xc9\x91\x83\x17\x05\xf4\xcd\x2e\x74\x56\x40\x2b\xcc\xe0\x05\xa9\xb4\xed\x93\x1e\x36\x38\xb8\x92\x3c\x41\xfd\xac\x72\x8e\x2e\x3f\x57\xb1\x8e\x29\x2f\xbb\x6a\xf7\x55\xb6\xc4\x5e\x6a\x5c\x7c\xb9\xe2\xac\xe9\xf0\xa9\x67\x8e\x5f\xf7\x4b\xb4\xa9\x64\x0c\x48\x0f\x17\x58\x15\x9a\xa3\xd7\x7d\x0b\x55\x35\xa8\x6a\x40\x97\x39\x54\x87\xca\x42\xcb\xbb\xb0\xe3\x17\xdf\x0f\x75\x03\x37\xc7\x81\xa7\x8f\x5e\x7c\x4f\x1a\x6f\x13\x9c\x5d\x73\x91\xc8\x6b\x3f\x67\xb8\xaf\x60\xc6\xed\xc6\xbc\xb8\x08\x3e\x2d\x3e\x68\xaa\x7f\xed\x84\xa9\x21\x19\xf1\x48\xe7\xdf\x01\x00\x00\xff\xff\xde\xa6\xb5\x3b\x9b\x25\x00\x00") + +func web_uiAssetsMetricsProvidersPrometheus5f31ba3b7ffd850fa916a0a76933e968JsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsMetricsProvidersPrometheus5f31ba3b7ffd850fa916a0a76933e968Js, + "web_ui/assets/metrics-providers/prometheus-5f31ba3b7ffd850fa916a0a76933e968.js", + ) +} + +func web_uiAssetsMetricsProvidersPrometheus5f31ba3b7ffd850fa916a0a76933e968Js() (*asset, error) { + bytes, err := web_uiAssetsMetricsProvidersPrometheus5f31ba3b7ffd850fa916a0a76933e968JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/metrics-providers/prometheus-5f31ba3b7ffd850fa916a0a76933e968.js", size: 9627, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsVendor69ef69e98b7d14d1513f8056b6c6b48dCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\xfd\x4f\xe3\x38\xf3\xff\x57\xfa\xd5\xea\x74\xb7\x5a\x4a\xdd\x37\x4a\x1b\xdd\x57\xe7\xbe\xc0\xb6\x94\x42\x0b\x05\xca\x6f\x4e\xe2\x26\xbe\x26\x76\xd6\x71\x9a\x42\xc5\xff\xfe\xc8\xce\x0b\x4d\xeb\xc2\xee\xe9\x1e\xe9\xd1\x8a\x85\xd8\xe3\xf1\xcc\x67\xc6\x33\x1f\xfb\xb4\xc7\x6c\x7c\x4d\x38\x67\x7c\xbb\x64\x54\x94\x97\xc8\x27\xde\x4b\xc7\x67\x94\x85\x01\xb2\xb0\xe1\x62\xe2\xb8\xa2\x53\x07\x20\xd8\x18\x16\xf3\x18\xef\x7c\x01\x00\xbc\xed\xac\x2c\x7b\x84\xe2\x70\x1b\x20\xdb\x26\xd4\xe9\x34\x82\x4d\xa9\x30\x5f\x0a\x38\xce\x67\x41\xa9\x11\x6c\x0a\xab\x9d\x48\x08\xcc\xcb\x4b\xe2\x79\x98\x9f\xec\xce\x84\x16\x67\x9e\x67\xa2\x6c\x72\x6b\x22\x6b\xe5\x70\x16\x51\xbb\x9c\x9a\xb2\x5c\x2e\x35\xca\xc2\xad\xc9\xb8\x8d\x79\x99\x2b\xe3\xab\xc1\xa6\x14\x32\x8f\xd8\xa5\x2f\xb6\x6d\x1b\x1a\x2d\x2d\xf9\xcf\x88\x5d\x22\x70\x59\xf9\xdd\xa1\x2c\xe6\x28\x38\x70\x93\x46\xbe\x89\xf9\x8e\x37\x75\xe9\x6d\xa9\x19\x6c\x0c\x9f\xd0\x72\x4c\x6c\xe1\x76\x6a\x12\x2b\x81\x37\xa2\x8c\x3c\xe2\xd0\x8e\xb2\x22\x03\xaf\xdd\x6e\x7f\xb6\x51\xe2\x84\x8f\xf8\x0a\xf3\xed\x11\xcc\x77\x65\xca\x61\x64\x0a\x0f\x6f\xdf\x77\x28\x88\x5a\x11\x0f\x19\xcf\x20\xf1\xf0\xb2\x80\x08\x00\xc0\x28\xa0\x45\x19\xc5\x46\xe2\x48\x31\x8c\x36\x59\x17\xa2\x83\x2d\x46\x6d\xc4\x5f\x3e\xd4\x1f\x12\x6f\x8d\xf9\xdb\xa9\xe5\x97\x97\x48\xa4\xb6\x94\x34\xe6\x25\x3b\xa2\x48\xb0\xd4\x9c\x0e\xf8\x3f\xe2\x07\x8c\x0b\x44\xc5\x4e\xcc\x3a\x5f\x5a\xb8\xb5\xaf\x6f\xcf\xb4\x64\x34\xdc\xbe\x96\x09\xb5\xf1\xa6\x53\x55\xf2\x88\x12\x1f\x09\xbc\xb3\x4e\xb7\xa9\x51\x8e\xb1\xb9\x22\x22\x15\x27\x8c\x76\x4c\x8f\xd0\x55\xa9\x7a\x0a\xce\xc2\x52\x28\x70\x10\xfe\x51\xfd\x5a\x22\x74\x49\x28\x11\xd8\x28\xfb\xec\xf5\xa7\x85\x7f\x56\xee\x30\x47\xa5\xd7\x7f\xa9\xbd\x56\xf8\x65\xc9\x91\x8f\xc3\x92\xd2\xb1\x6d\x82\xdf\x0e\x4f\x86\xe0\x88\x86\x01\xe2\x98\x8a\xb7\xb7\xbf\x32\x9f\xfe\xc1\xd2\x5f\x5f\x22\xb1\x16\xc8\xdc\xda\x24\x0c\x3c\xf4\xd2\x21\x54\x9e\x9c\xb2\xe9\x31\x6b\x95\x1c\x0b\x1b\x5b\x8c\x27\x30\x10\xea\x62\x4e\x44\x21\x61\x79\xa4\x0e\xbb\x3e\x5f\x2d\xcb\x32\x02\x16\x12\xb5\x1a\x99\x21\xf3\x22\x81\xd5\x9e\x61\xd9\xc6\x4b\x14\x79\xa2\x24\xbf\x5c\x8c\xec\xdd\xe3\xb3\xd4\xc8\xfc\x88\x98\xc8\x8f\x0d\x68\x03\x25\x42\xb1\x83\x04\x59\xe7\xe3\x76\xa3\xa1\xc6\x93\x4d\xdf\xc7\x6b\xed\xda\xdb\xfb\x46\x27\x4a\xbb\xe0\x8c\x3a\x49\x25\x8d\x93\xc2\xd9\x02\x89\x56\xec\x27\xc3\xa1\x78\xf1\x70\x87\x08\xe4\x11\x4b\x4d\x28\x50\xf7\x51\x89\xa8\x8d\xb9\x44\xed\x2d\x55\x4b\x56\x58\xb8\x9c\x45\x8e\x7b\x20\xab\xc0\x4d\x27\x35\x3e\xae\xf0\x4b\xcc\xb8\x9d\x59\xdd\x02\xe7\x1a\x21\x24\x98\x9f\xfb\x55\x6d\x6b\x24\xd2\xc2\x97\xca\x54\xcf\x1a\x1a\x19\x1b\x2f\x3f\xc6\x7b\x8d\x38\x41\xa6\x87\xcb\xb5\x5c\xae\x89\x3e\x92\xab\xe7\x72\xe7\x4d\x8d\x9c\xc5\x7c\x1f\x53\x91\x09\xa1\x26\xd0\x08\x49\xf4\xa8\x93\xcb\x54\xab\x47\x65\xde\xcd\x5a\x6a\x35\xf9\x58\xa0\x13\x5d\x16\x21\x8f\x2c\xc9\x3b\x3a\xcd\xa6\xce\x58\x33\x22\x9e\x20\x34\x13\xaa\x03\x9d\xe7\x26\x47\xd6\x0a\x8b\xf7\x52\xde\xd2\x08\x09\x94\xbb\x53\x6d\xe9\x0c\x45\x42\x70\x62\x46\x3b\xb9\x0d\x2c\xdd\x11\xe1\x85\x96\x71\x30\xaf\x52\x73\x4f\x03\xa1\x6b\xe4\x11\xdb\x72\x11\xd7\x40\x81\x15\x93\x48\x96\x70\x6c\x17\xdb\x10\xf3\xe5\x11\xa2\x4e\x76\xb2\x4d\x26\x04\xf3\x3b\xb5\xec\x6c\xbf\x15\xab\x78\x29\x0c\x10\xdd\x55\xe0\x23\x61\xb9\x84\x3a\x7b\x18\x81\x25\xf8\x6c\x25\x65\xf4\xc8\xe2\x65\xad\xf6\xa6\xdb\x43\x42\xbc\xd3\x73\xb8\x63\xa2\x3f\x6a\xcd\xe6\x49\xb5\x09\x4e\xc0\xc9\x69\xfd\x6b\x61\x15\xb2\x64\x61\x48\xaa\x5c\xbe\x68\x77\xfd\x17\x7c\xbe\xac\x15\xa9\xca\x36\x2f\x62\x1c\x7b\xaa\xe0\x18\x6c\x8d\xf9\xd2\x63\x71\xc7\x25\xb6\x8d\x69\xa1\xe9\xed\x13\x9d\x84\x1b\x6d\xf3\x25\xc9\xf7\x4e\xc7\xf4\x11\x77\x08\xcd\x40\x2e\xd7\x25\x27\x49\xc7\x92\x3e\x9f\x0c\xa5\x4c\x26\x93\x53\x63\x29\xe7\xab\x02\xf0\x9b\xc1\x22\x21\xfd\xea\x00\xe3\xc0\xde\xa2\x3d\xe4\x15\xeb\x7c\x2a\x50\x0b\xa9\x3d\xad\xe3\xbb\x1d\xe3\xe7\xd8\xa0\x9b\xd3\xc1\x0f\x49\x62\x61\x72\x9d\xcf\x6e\x0f\x7a\x86\x91\xb1\x83\x33\x23\xeb\x54\x92\xfa\xbc\x1d\x59\x9f\x78\x00\x0c\xc1\x82\x0e\xc8\x43\x55\xde\x64\xc1\xca\x47\x5e\xd2\x58\xbc\xe9\x8d\xdf\xa6\x48\x03\x43\x75\x36\xb0\xbb\x70\x5f\xd5\x46\xa7\xea\x80\x15\x67\x96\x65\x8a\x8f\xe3\xb9\x4d\xb7\xfc\x40\x32\xd4\x00\x95\xae\x4a\x3c\x97\x34\x77\x37\x41\x32\x14\xeb\x1a\x65\xdb\x22\xd1\xe5\x3e\xf2\x0a\xc9\xa5\x65\x08\x6b\xcc\x05\xb1\x90\x97\x92\x67\xc1\x02\x5d\x2e\xeb\x9c\x94\x44\x3a\xc0\x1f\x85\xba\xb1\x7b\xa6\x40\xa9\xc0\x30\x13\xfe\x27\x53\x60\x67\x34\x23\x4e\x51\x28\x69\x36\xf6\xb0\x95\x12\x64\xc5\xc4\x0e\x46\xf7\x07\x74\x56\xee\x54\x88\x43\x43\x13\x8c\xf3\x14\xc9\xed\xd6\x29\xc2\x9e\xd0\x68\x48\x98\x6d\x27\xad\xca\x47\x34\x24\x37\xb6\x54\x54\x12\x8a\x42\x58\x8b\xe8\xaa\xeb\x9b\x72\x37\x3b\xcb\xc8\x26\x51\xb8\xc3\x94\xf7\xc7\x8f\x7c\xa7\x77\x8a\xbd\x10\x18\xbb\xf7\xce\x94\x0d\x26\x63\xb2\xa4\xe4\x23\x49\x0a\x74\x40\xe1\xee\x14\x70\x6c\x48\x72\xa3\x22\x9f\x25\x98\x4a\xa5\xd4\x95\x6c\x75\x52\xed\xb3\xaf\x0c\x93\xda\x61\x4d\x7b\xaf\xc1\x6b\x12\x12\xd3\xc3\xb9\x93\x02\x05\x65\x97\x38\xae\x27\x15\x1f\xd2\xde\x5c\x4e\x99\xae\x08\x0c\x15\x65\x8f\x38\x48\x44\x1c\x87\x49\x7a\x7c\x30\x57\x08\x8f\x74\x47\xc1\xfe\xee\x9c\xc9\x31\x5a\x95\xe5\xf7\x3e\x02\x6a\x3e\x81\x41\x09\xa5\x38\x1c\xc4\xfb\xc3\xbc\x4b\x8f\x78\xb1\xc8\x1d\xa4\xe1\xe1\xb5\x3f\x26\xb6\x83\x85\xa6\xee\xbf\x63\x9c\x23\x2a\xaf\x59\x7b\x8c\xc0\xc6\xdb\xbc\xc1\x68\x52\xfc\x44\x53\x9f\x4e\xf4\x57\x72\x4d\x4f\x38\x39\xec\x4f\x69\x1a\x6f\xe4\xa7\xbc\xbf\x5b\x8c\x0a\x4c\x65\x06\x6f\x0c\xfd\x70\x91\x1d\x60\x14\x46\x1c\x6b\xf0\x4b\x72\x5b\x15\xb5\x34\xf5\xc0\x41\x3b\x57\x19\x45\x3c\x22\xb2\x42\xaf\xbb\xa5\x6b\xae\x36\x87\x06\x24\x2f\x2a\x99\x64\x28\x90\x20\xd6\xdb\x91\x3b\xf0\xc1\xae\x9a\xa4\xd7\xd7\xf0\x25\xb3\xa2\x10\xdb\x47\x2e\xd7\x27\x7b\xc3\x36\x47\x8e\x66\xcf\xf4\x18\x15\x3b\x98\x2a\x90\xb8\xc8\x90\xec\xb6\xfc\xa7\x35\xe0\xf3\xb5\x2d\xbb\xb1\x2c\x26\x90\xc5\x59\x18\xba\x88\xf0\xac\xca\xe5\x03\x07\x39\xdc\xe9\x24\x4a\x09\xa3\x07\xc9\xf5\xff\x92\x4a\x7e\x2a\xb0\x2f\xf5\x99\x71\xc9\xae\x2a\x19\x3f\xdd\xfa\x67\xa4\xb4\xa2\x5a\x23\x24\x63\xc7\x88\x2b\x8e\xbb\x2d\xf2\x4b\x64\xe8\x08\xaf\xfc\x01\x27\xa7\x8d\xaf\xc9\x93\x0b\xe3\x16\x4e\xeb\x7d\xf6\x08\x96\x72\xbb\x53\xd9\x36\xfe\xf2\xb1\x4d\x50\x29\xe0\x84\x8a\xed\x07\x6f\x47\x47\x93\x33\x7f\x3d\x50\x55\xad\xec\x22\x6b\xd5\x41\x4b\xa1\xee\x56\xea\x4c\x76\x7e\xff\xfd\x6d\x9f\xde\x67\x39\x21\x1b\xd9\xb6\xd8\x5d\xf6\x61\x17\xe5\xe4\xc9\x2c\x4c\x9f\x7e\xaa\x67\x7b\x54\x42\xc9\x08\xc6\x3c\x41\x02\xed\x7b\xa3\x9d\x31\x85\x23\x6f\x68\x49\xd3\x6b\x14\x5e\x4b\x0d\xfd\xdb\xea\x7b\x97\xab\x82\x40\x1c\xd4\x8b\xec\x91\x51\x5e\x90\x9a\x92\xaa\x67\xe7\x76\x49\x36\xf8\xa0\x0d\xe8\xdb\x42\xfe\x02\x06\x80\xe1\xa3\x4d\xda\x83\xcf\xd4\x6b\x2e\x0b\x90\x25\x91\x07\x86\xea\x63\x89\xee\x74\xb0\x74\xda\x08\x13\x8e\x73\x6c\x2e\x6b\x8b\x47\xa6\xd9\xd1\x19\x3f\x3c\x32\xa5\x8f\x55\x72\xa7\xdc\xcf\xfb\x74\x2e\x46\x9c\x16\x33\xb9\x9c\xa3\x24\x5b\x5a\x29\x69\x61\xbb\xcf\x69\x1c\x07\x18\x89\x4e\xf2\xab\xac\x09\xfe\xfb\xa6\xbb\x6a\x89\x8f\x1c\xdc\x89\xb8\xf7\x87\x8d\x04\xea\xa8\xcf\x4a\x40\x1d\xc3\x44\x21\x3e\x6b\x9c\x90\x87\xee\xcd\x2c\x06\x57\x97\x0e\x83\x10\xc2\xc9\xdd\xdc\x1d\xcc\x1d\xf9\xe7\x54\xfe\xd7\xef\xc1\x05\x84\xb0\x07\xda\x57\xad\x4b\x39\x00\x9f\x26\x77\x33\x30\x84\x3c\x6c\x58\x67\x4a\xe4\x99\xdc\x01\x7b\x00\x6f\xcf\x61\x25\xee\x57\xd8\xb8\x46\x57\xb1\x1c\xf7\xe2\xbb\x0b\xef\x15\x42\x38\x1e\xc4\x10\xf6\x36\xd7\x5d\x38\xfa\x61\x25\x4a\x6c\x70\x37\xaf\x5e\x74\xdb\xe1\xa8\x1f\x37\xac\x9b\xde\x63\xb5\x72\x35\x54\xca\xec\xc1\xc3\xc2\x1e\x4c\xd6\xe6\x63\xd5\x33\xe9\x14\x4e\xeb\x23\x6f\xf1\x34\xf3\x9e\x7b\xdd\x3a\x7a\x9a\xb1\xe1\xc0\x1e\xdd\x3f\x74\x9f\x9c\x69\xe3\x49\x2e\xf8\x3e\xf0\x06\xd3\x87\xe9\xb0\x5a\x9b\x38\xce\x70\x5c\xe9\xc3\xd7\xca\xa5\x0d\x9b\x95\xcd\x6a\x51\xf9\x71\x7b\x75\xdd\x87\x31\x84\xfd\xf1\x73\xbc\x6c\xf2\xb5\xff\x6d\xac\x6c\xee\x8e\x66\xf3\xe6\x80\xaf\x46\x8e\xe3\xfc\xf9\xe7\xd7\x23\x60\x6a\xa2\xf4\xbf\x0e\xe7\x85\x3b\x7d\x1a\x98\xee\xbd\xd3\x5a\xfc\x23\x38\xaf\x57\x39\x9c\x2b\x67\x38\x5c\x8f\xea\xd3\xa7\xeb\xbf\x61\x6c\xf7\x27\xdf\x6e\xd0\xc0\x7c\x09\xfb\xb0\x71\x7d\x0b\xe3\x49\x7f\x12\x5f\xf7\x62\x72\xf3\x7d\xdc\xb3\xab\xaf\x4f\xa0\xc5\xce\x56\xdd\x87\xcb\xe9\x00\x5e\x75\xe1\x44\x30\x33\x5c\x4d\xae\x95\x75\x77\xf3\x87\x9b\xd9\x55\xb3\xb7\x18\x0e\x8f\x41\x2d\x6f\x05\xc7\x8f\x8b\xe4\xe0\x1f\x1c\x18\x0b\x53\x81\x79\x29\xf9\xa5\x39\x32\x94\xa5\x7f\x65\x77\x8c\x80\x11\x25\xaa\xbd\xc6\x65\x97\x89\xb3\x60\x63\xbc\xd7\xda\xfd\xdb\x9d\x4f\x6c\xdb\xc3\x9f\xbc\x2d\x24\x0e\xe0\x30\x44\x0e\x3e\xea\x5f\x3a\x9d\x39\x98\x35\xa7\xe4\xf9\xf8\x3c\xd8\x18\x3a\x97\x05\x0b\x4a\x52\xe2\x23\x6f\x7f\x19\xe9\x5d\x43\xff\x95\x9c\xef\xaa\xf0\x4f\x7b\x50\xe5\x01\x1b\x4f\xdb\xf7\xea\xc8\x7a\xdd\xeb\x87\xc1\x63\x0b\xc2\x9e\xfc\xd9\xa4\xbf\x5b\x4a\x1a\xf6\x1a\x10\xf6\x9a\x10\xf6\x2b\x95\xca\x37\x39\x36\xb7\x2d\x2f\x50\x87\x96\xce\xee\xee\xbd\xeb\x27\x7a\x33\xbb\x23\x71\xef\x0a\x3c\x5f\xdd\xc9\xf1\xfb\xb9\xcc\xd9\x59\xa3\xe6\x3f\xde\xde\x4c\x5b\x70\x0a\x9d\x7e\x34\x1d\x6f\x2a\xaf\xe7\x56\xb8\x98\xf9\xb7\xb3\xe1\xc5\x30\x9e\x5d\x52\x16\xce\x78\x80\xfc\xf5\xea\x8a\x80\x8b\xfb\x21\xb9\x86\x77\xb3\xba\xeb\x5e\x3d\x7e\x73\xe1\xe4\xac\x22\x86\x8f\x6e\xd4\xbe\xed\x3f\x92\xfb\xcb\xc9\x60\x75\x2f\x86\x37\x91\x05\x9b\x37\x2f\xbc\x6d\xad\x6e\x1d\xf8\xe8\x83\xcb\xdb\x2e\x73\xce\xd6\x8d\x5f\xc8\xeb\x34\xb0\x9f\x47\xfe\xbf\x88\xf8\x44\x21\xfe\x54\x89\xe2\xfe\x9a\xc7\x7d\xf9\xfb\xd8\xcf\x99\x50\xbf\x55\xb1\x8a\x78\xdc\xaf\x89\x69\xbf\x15\xc1\xfe\xb7\x48\x55\x31\x25\xe3\xfa\xf8\x7e\xa6\xbe\xbe\xab\x88\x8c\xce\xfd\x49\x75\xb0\xb0\x4c\x9f\x90\x8d\x03\x7b\x7e\xeb\xd1\x8c\xe4\xfc\xc3\x2a\x8d\x0c\xad\xdf\xce\xa7\x3f\xe0\xb0\xdb\xbd\x98\xcf\xab\xe3\xb1\x55\x8f\x2a\x7f\xdb\xe6\xcd\x88\x3d\x56\x6f\xc1\x79\x1f\xb6\x2f\x4d\x74\xfe\x6d\xf1\x38\x3a\x73\x26\x23\x36\x59\x0c\xbb\xaf\x10\xd6\x2c\xb7\x2b\xdc\xe6\x6a\xec\x5f\xb6\x17\x73\x76\x09\x26\xdf\xe1\x3c\xbe\x78\x8a\x6f\xda\xe3\xa8\x3b\x1d\x57\x1d\xd2\x9b\x9a\xe7\x4e\xaf\x7d\xc3\x59\x6d\x1d\x34\x39\xb5\x7a\xc3\xc5\xf9\xf8\x3c\x1a\x6c\x9a\xcf\xab\x5f\x88\x92\x1f\x49\xe2\xe4\xe1\x7f\xa7\xd6\x5b\x2a\xcd\x93\x28\xf4\x5f\xff\xbe\x5a\xba\x2a\xb3\x1f\x64\x14\xe6\x30\xcd\xf3\xca\xba\xd5\xae\x36\x56\x2f\xdf\x93\x3e\xa0\x90\x84\xd3\x1b\x73\xf1\x2c\x75\xf4\x26\xa3\xd9\xe0\x62\x8e\x27\xac\x4a\xd8\x60\x04\x21\x1c\xc6\xfe\x6b\xe5\x7b\x1b\x90\x8b\x8b\xbb\xcb\x91\x73\x71\x8d\xeb\x0e\x1a\x3f\x03\x66\x7f\x6b\x57\xe0\xf4\x19\xc0\x3e\x0b\xcd\x05\x47\x4a\xdf\xc0\xbb\xb8\x5f\xdd\x45\x53\xbf\xd7\xfb\xfa\x61\x4d\xd4\x95\x17\xc5\x8c\x33\x0e\x72\x78\x45\x94\x7f\xbf\xfd\x27\x00\x00\xff\xff\xa3\x1f\x3f\x9d\x83\x1f\x00\x00") + +func web_uiAssetsVendor69ef69e98b7d14d1513f8056b6c6b48dCssBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsVendor69ef69e98b7d14d1513f8056b6c6b48dCss, + "web_ui/assets/vendor-69ef69e98b7d14d1513f8056b6c6b48d.css", + ) +} + +func web_uiAssetsVendor69ef69e98b7d14d1513f8056b6c6b48dCss() (*asset, error) { + bytes, err := web_uiAssetsVendor69ef69e98b7d14d1513f8056b6c6b48dCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/vendor-69ef69e98b7d14d1513f8056b6c6b48d.css", size: 8067, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiAssetsVendorA8ab945788d03426b8cd1080cb42495fJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\xfd\xd9\x76\xe3\xc6\x9a\x28\x08\xdf\xeb\x29\x48\x9c\xfd\x63\x47\x24\x3f\x21\x11\x41\x12\x24\x43\x0a\xf1\xa4\xd3\x4a\x57\xd6\x76\x0e\x95\x29\xdb\xe5\xe2\xe6\x51\x41\x64\x50\x84\x13\x02\xb8\x01\x50\x4a\x99\x64\x2d\x9f\xbf\xfb\xf4\xb8\x56\x3f\x40\xdf\xf4\xb9\xed\xab\x7e\x87\x7a\x93\xe3\x7e\x91\x5e\x31\x60\x22\x41\x65\x6e\x77\xeb\x42\x04\x02\x31\x0f\xdf\x14\xdf\xf0\x10\x44\xf3\xf8\xc1\xb9\xbc\xbb\x11\xc9\xe5\xdb\x1f\xf9\x62\x1d\xcd\xb2\x20\x8e\x90\x80\x0c\x6f\x16\x71\x82\xee\xfd\xa4\x95\xb4\x82\xa8\x95\x61\x31\x49\xa6\x3c\x9b\x24\xd3\x93\x44\x64\xeb\x24\x6a\x89\x1d\xda\xab\x60\xbb\xdd\xec\x60\xf3\xea\xf2\xc5\xd5\x0f\x1f\x2e\x3f\xb2\xcd\x0e\x2e\xff\xf9\xea\xf2\xed\xb7\xd7\xef\x3f\xbc\xbb\x7a\x77\xf5\xf3\x7b\x99\xf8\xad\x9f\x09\xd6\x26\x3b\xb8\x7e\xf1\xfe\xfd\xf7\xaf\x5f\xbe\xb8\x7a\xfd\xee\xed\xf5\xd5\xe5\x9b\xf7\xdf\xbf\xb8\xba\xbc\xfe\xe9\xc3\x8b\xf7\xef\x2f\x3f\xb0\x36\x81\xeb\x6f\x2f\x5f\xbd\xf8\xe1\xfb\xab\xeb\x17\x1f\x7f\x7e\xfb\xf2\xfa\xdd\x37\x1f\x2f\x3f\xfc\x78\xf9\xe1\x23\x6b\xbb\x70\xfd\x8f\xff\xf4\xc3\xe5\x87\x9f\xaf\x5f\xbf\xbd\xba\xfc\xee\x83\xaa\x43\x15\x29\xea\x79\xf7\xf6\xfb\x9f\xaf\xbf\xfb\xfe\xf5\x9b\x37\x97\x1f\xae\x5f\xbe\x7b\xf3\xfe\xdd\xdb\xcb\xb7\x57\xb2\xec\x0e\x9f\xc8\x61\x85\xb1\x3f\x17\x09\xcc\xc5\x22\x88\x04\x24\xe2\x6f\xeb\x20\x11\x6f\xe2\xf9\x3a\x2c\xde\xf2\xdf\x5f\x52\x48\xd6\x51\x14\x44\xb7\x57\x22\xcd\x52\xde\x26\x67\xa8\x9c\x2b\xbc\xb1\xd6\xa9\x68\xa5\x59\x12\xcc\x32\xeb\x24\xff\xd0\xca\x10\xde\xc8\x86\x04\x7f\x77\xf3\x8b\x98\x65\xce\x2c\x11\x7e\x26\x50\xb4\x0e\x43\x5c\x4c\xa2\x73\x7d\xcd\xef\xe3\x60\xde\x72\x61\x2e\x42\x91\x09\x95\x04\x62\xa7\xa6\x9e\x6f\x74\x37\x59\xad\xb7\xac\xa9\xd3\xac\x71\x08\xec\x60\x28\xac\x78\xda\x9d\x14\x8f\xdc\x3c\xf1\x5a\x25\xbc\x3a\xc8\x7c\x3b\x64\x7c\x32\x85\x84\xcf\x90\x00\x0b\x99\xec\xd8\x82\x0c\x43\xc4\x33\x27\x14\xd1\x6d\xb6\x3c\x25\x67\xd1\x05\x77\xcf\xa2\xd3\x53\x9c\x4d\xa2\xa9\x23\x3e\xaf\xe2\x24\x4b\x51\x31\xee\xc4\xb9\x53\x4d\xe4\x5f\x76\xa0\x47\xc8\x37\x51\xfc\x32\x8e\x16\x61\x30\xcb\x58\xd1\x7c\xa6\x67\x32\x82\xe0\x44\x76\x23\xd2\x3b\x32\x73\x96\x7e\xfa\xee\x21\x7a\x9f\xc4\x2b\x91\x64\x8f\x28\xc2\xb6\x9d\x34\x25\xa2\x80\xcb\x6e\x80\x98\x04\x53\x2e\xf4\x53\x34\xe5\xc9\x24\x9a\xe2\x1d\xdc\xf9\x9f\xc4\xb7\x62\xe1\xaf\xc3\xec\x52\xf5\x46\x6e\x12\xb5\x47\x22\x9e\x21\x0c\x01\x47\xf2\xc7\xc5\xe5\xda\xc6\x72\x46\xb2\x65\x12\x3f\xb4\x22\xf1\xd0\xba\x4c\x92\x38\x41\x96\x1f\xb5\xd6\x51\xba\x5e\xc9\x3a\xc4\xbc\xa5\x47\xd8\x7a\xf0\xd3\x96\x5e\xb0\x39\xb4\xc4\xe7\x95\x98\xc9\x8f\xff\xaa\x93\x50\x30\x87\xd6\x5c\xac\x52\x30\xd9\xf1\xbf\xb6\x82\x28\xcd\x84\x3f\x6f\xdd\xc6\x19\x6b\xfd\xab\xd5\x11\x1d\xeb\x5f\x5b\x7e\x72\xbb\xbe\x13\x51\x96\xb6\xb2\xd8\x54\xf7\xaf\x16\x56\xbb\xc4\xe7\x13\xcb\x2c\x84\x05\x96\x99\x50\x0b\x2c\x5d\xa1\x35\x2d\xbb\x9d\xca\x93\x0d\x09\x44\xb2\xf3\x41\xea\xac\xd7\xc1\x9c\x07\x9d\x0e\xa8\xb7\x60\xce\x85\x7e\x92\x1d\xe2\xed\x7c\x35\xe5\xa4\xea\xa7\xb1\xcf\x32\x9d\x43\xd7\xcd\x37\xa6\x35\xb6\xd9\xed\xf4\x87\x99\x1f\x86\x37\xfe\xec\x13\x4f\xf4\xfb\xd2\x4f\xf5\xa4\xa6\x2f\xd2\x6f\xc5\x8a\xb7\x89\x69\x2c\x7d\x11\x06\x7e\xca\x23\xfd\x9a\x88\x60\x11\x88\x39\x97\xb3\xf9\x22\x49\xfc\x47\x94\xb7\x8e\x75\x86\x34\xf3\x33\xc1\xad\x48\x3c\x58\xbb\x62\x3c\x21\xc2\x9b\xf2\x6d\xad\x17\xc5\x8c\xa4\x4c\x9f\xe9\x51\x97\x5b\x38\xe0\xd1\x44\x4c\xb7\xdb\x68\x22\x3a\xd6\xf3\x20\x9a\x8b\xcf\xd6\xf4\x2c\xb0\xed\x20\xef\xd6\x19\x96\x79\x02\x27\x98\xab\x6c\xf2\xa1\xcc\x99\xef\xe1\x60\xbb\xad\x43\xcc\x83\x0d\xf1\x32\x5e\x87\xf3\x56\x14\x67\xad\x45\x10\x15\x1b\x22\x5f\xd2\xe0\xce\x6c\x94\x45\x12\xdf\xc9\xd4\xac\x63\xc9\x35\x55\x95\x41\x62\xdb\xd6\x4a\x44\xf3\x20\xba\xb5\xda\x9c\x07\x7a\x06\x6c\xdb\x5a\x04\x91\x1f\x06\xbf\x8a\x79\x2d\x19\x05\x8e\x6c\xe3\x5b\xb1\x4a\x51\x82\x21\x71\x56\xeb\x74\x89\x02\x8c\x21\x28\x67\x62\xae\xfb\x19\x2c\x90\xe5\xc8\xd2\xc2\x99\x2d\xfd\xe4\x45\x86\x5c\x8c\x73\x80\x74\x52\xc0\x7d\x2e\x9c\x74\x15\x06\x19\xb2\x9e\x5b\xfa\x74\x97\xaf\x4e\x1a\x06\x33\x81\x5c\x38\x25\xf2\x80\xb8\x10\xf3\x7c\x93\x9c\x05\xe7\xf1\x59\xd0\xe9\xe8\x33\xeb\xf3\x64\x12\x4c\x4f\x54\x93\x8e\xc5\x39\xf7\x55\xfb\x2e\xe7\x3c\xca\x57\xf8\x70\xde\xfc\x48\x4e\x9a\x3f\x9b\x89\x34\x6d\xad\xfc\x44\x44\x59\x3e\x7b\xf1\xa2\x95\xc4\x71\x66\xe1\x93\xc8\x59\xc5\x2b\x84\x77\x22\x4c\x85\x19\x93\xaa\x7f\x16\x47\x59\x10\xad\x85\xcc\x20\x27\xc1\xc7\xbb\x9d\x19\x5d\xe4\xfc\x12\x07\x91\x1a\x41\x39\x2b\x4b\xb9\x6f\x74\x86\x36\x6a\xcb\xad\x61\xdb\xed\xda\xde\xc0\xbb\xd4\x59\x25\x71\x16\x67\x8f\x2b\xe1\x1c\xc0\x8b\x12\x4e\xe6\x10\xbf\x72\x46\x72\x08\x77\x22\xe1\x3e\xe7\x5c\x6c\xb7\x56\xac\x10\x82\xd5\xe6\xb2\xbe\x78\xd1\x52\xcb\x6a\xea\xa8\xa4\x6e\xb7\x1a\x33\xa8\x95\x9a\xeb\x16\xb7\xdb\xb6\x41\x27\x41\x7a\xf9\x39\x13\x51\x1a\xdc\x84\x02\x09\xbc\xdd\xa2\x22\x13\x17\x78\x07\xd5\x2e\x9b\x3e\x54\x3b\x2a\x27\xac\xdc\x4a\x9c\xf3\xf2\x98\x6d\xb7\x96\x3c\x8f\x8f\x72\xeb\xd5\x3e\xe4\x9b\xa4\x69\x78\x1a\x7e\x3b\x0f\x89\xbf\xd2\xd8\x23\xb5\x6d\x54\x07\x09\x87\x59\x90\x39\xae\x75\xd8\x81\x71\x09\x14\x1e\x91\x46\xd7\x66\x4e\xf3\x2c\x8e\xbf\x5a\x85\x8f\xaa\x78\x0d\x80\x14\x08\xa6\x9a\x68\xf6\x19\x77\x6b\xa0\xa4\x1c\x7c\x23\xa4\xb2\x6d\x3d\xf9\x7a\xc9\x50\xc3\x90\xb9\xc0\x06\x6b\x1d\x6e\x09\xdb\xd6\x05\xf6\xd3\x11\x86\x86\x9a\xea\x8b\xb5\x8e\x52\x21\xaa\x4b\xb5\x0f\x00\x8f\x82\xe0\x7a\x3d\x6a\xfa\xf6\x97\xdc\x4c\x89\x3c\xfd\x95\x75\xad\x35\x51\xac\xfd\x49\x96\x3c\x6e\x6a\xe0\x59\xbd\x5c\x9b\x75\x81\xfd\x42\xb2\xde\x9d\x9a\xd6\xf0\x71\x73\x64\x0b\xe5\x9b\xc2\x14\x13\xf2\xc0\x8b\xb9\x85\xf7\x3b\x7f\x7d\xd0\xfb\x1c\x2e\x99\x9d\x90\xaf\xad\x06\x44\x18\x32\xee\x9e\x65\xe7\x22\x07\x42\x59\x0e\x80\x12\x2e\x26\xd9\xf4\x44\xfe\xe3\x49\x3e\xe1\xe3\xe2\x89\xed\x53\x22\x08\xef\x0a\x02\xb7\xd6\xa3\x1c\xbc\xd6\xa8\x22\x39\xa5\x72\x49\xf8\xf1\xe9\xcc\x81\xf8\x49\x49\x41\x15\x48\x16\x12\xee\x9e\x25\xe7\x39\xae\x3b\x4b\xf2\x5e\x47\x8a\xd4\x86\xa0\x36\x56\x49\x81\x17\xcb\x6d\x88\x46\xdd\x79\xf3\xb6\x3b\x29\xd0\xbf\x84\xaf\x63\xd4\x8c\x82\x5d\x08\x8a\x3d\xdc\xb0\x1b\x31\x2b\xc8\x09\x55\xcb\x7e\x66\xff\x93\xf8\xa0\xbf\x23\xcc\x72\x2a\xa3\x31\xa7\xee\x5b\x90\x6f\xd5\x19\x9a\xa3\x28\xa7\x35\x70\xfe\x00\xe2\x60\xf1\x2b\x4d\x1c\x81\xad\x12\x64\xf0\x2a\x7d\x98\xd3\x95\xa6\x63\x73\x94\x81\xc0\x78\x57\x80\x83\x02\x34\x66\x90\x99\xfe\xbc\x56\xf4\x8e\x9c\x9e\xa6\x9a\x96\x45\x1d\x90\xed\x00\x69\x92\xab\xc6\x22\x49\x92\xa2\x24\x27\x4e\x02\xdb\x56\x5b\xa1\xc4\xca\xdb\x2d\x2a\xc8\x36\xb3\xc2\xe7\xd4\xb6\xe3\x83\x54\x0c\x8a\xe6\x91\xd4\x87\xa6\x7d\x24\x34\x4f\x64\x57\xf9\x64\x8a\x41\x56\xcf\x13\x45\x17\xfa\xd1\x4c\xa2\x86\xf5\x58\x62\xcb\x14\x25\x6a\x22\x20\x81\xb6\x8b\x99\x4e\xd2\x14\x5e\x9b\x60\xbc\xc3\x87\x70\x5f\xe1\x7f\x7d\x2c\x74\xa7\x17\xa8\x9d\x6c\xb7\xf9\x1e\x4e\x6a\x70\x1e\x25\x3c\xaf\x73\x32\x85\x10\x14\xe7\x82\xf7\xa1\x60\x06\x49\x03\x48\xd5\x7d\x86\x64\x67\x78\x16\xc7\x57\xe4\x5e\xbd\x23\x66\xaa\xa9\x44\xdb\x7b\x53\x32\x36\xf4\x71\x06\xb2\x0b\x92\xb4\xd3\x03\x94\x4f\xbb\x92\x9b\x71\x44\x94\x25\x81\x28\x18\x98\x5f\x52\xe7\x5a\xf8\x9f\xae\x53\x21\x22\x1e\x55\xf2\xc9\x55\x5e\x56\xde\xf7\x80\xac\xc0\x1b\xcd\xd1\xa8\x74\x6c\xc9\x09\xd4\x79\x50\xad\xb9\x59\x28\xfc\xa4\xba\x27\xbf\xb2\x27\x8a\x91\xc8\x64\x5d\x66\x5c\xd6\x22\x8e\x2d\x40\x95\x9a\x76\x18\x57\x3f\x3e\xbf\xf1\x13\x4b\xce\xfb\x53\x79\xfc\x74\xbe\xb0\x60\x92\x1f\xc2\x2a\xf5\x9f\x1f\xe1\x6a\x05\x66\xd3\x2a\x1e\xa9\x6c\x44\x72\x4d\x95\xb7\xc3\x7e\xfc\xaa\xfa\x51\x5d\x47\xdd\xfd\xbd\x8c\x7f\x5b\xff\x6a\x3d\x95\xab\x9a\x08\xa6\xc4\x67\xab\x69\xd0\x26\x8b\xa3\xab\xb4\x1c\xdd\x07\xcb\x31\xe3\x55\x09\x89\xfc\x75\x9e\xcb\x9c\x4f\xcf\xd1\x9d\x1f\x44\xa6\x4e\x55\xec\x58\xee\x02\x01\xa8\x9c\xc5\x44\x6e\x76\x38\x5f\xff\xfa\x97\xbd\x64\xd5\x4c\x91\x66\xf6\x4e\x39\xab\xfb\x7b\x08\x61\xc8\xc9\x40\x5e\x10\x7c\xba\x66\xdb\x3e\xf8\xa2\xd7\xd7\xb6\xeb\x47\xcf\xb6\xd1\xde\x59\xdc\xec\xb3\xfd\x35\x81\xc1\x0e\xef\xb0\x42\x09\x18\x0a\xe2\x57\x9e\x30\xc5\x10\x16\x29\x01\xf2\x21\x55\x98\xad\x9d\x4c\xfc\xa9\x7e\xca\xd4\x93\x92\x9b\xf0\x92\x54\x2d\xfa\x67\x9a\xb3\x6d\xf3\xa0\xe0\x4a\x6a\xdb\x61\x4e\x31\x86\xc8\x97\x30\x4a\xa6\xc7\x79\x5a\x6c\xd2\x64\xad\x6b\x7e\x48\xfe\x57\x79\xa6\x3f\x5b\x1d\xbf\x63\xfd\xd9\xc2\x27\x9a\x59\x58\x3b\xb3\x78\x2e\xb8\xf5\xe6\xdd\xb7\x3f\x7c\x7f\x79\xfd\xf6\xdd\xd5\xf5\xab\x77\x3f\xbc\xfd\xd6\x82\xb5\xe2\x89\x67\x5c\xf6\xbd\x46\x1c\x9d\xc8\x31\x4c\xdc\xa9\xa2\x21\xd1\x2c\x9f\x33\xa8\x89\x72\x72\xd6\x0e\xa9\xcc\x64\xaa\xf8\x44\x81\x77\x18\x66\x50\x16\xc9\xb9\xe8\x9c\x52\x90\x6d\x15\xb4\x5c\x8e\xe6\xe3\xaf\x99\x28\xf0\xb9\x7b\xe6\x9f\xe7\xac\xd0\x99\xdf\xe9\xe0\x00\x45\x72\xb6\x0b\x36\x73\x87\x36\x84\x4d\xea\x90\x53\x20\x3a\xf0\x30\x08\x44\x09\xd5\x3f\x3d\xfd\xd3\xd5\x3f\xe6\xdb\x50\xfd\x50\x93\x38\xd0\x3f\x7d\x9d\x68\x7e\x74\x39\xea\xea\x1f\xa2\xb3\x8c\xf4\x8f\x7e\xa3\xba\x05\xaa\xeb\xa4\xaa\x16\x32\x50\x55\x93\xa1\xab\xdf\x74\x01\x6a\x7e\xf4\xb7\x91\x7e\x73\x4d\x65\xba\x05\xd7\xfc\xe8\xaa\x5d\x5d\xb5\xdb\xc5\x27\xf2\x47\xf7\xc5\xd5\x3d\x73\x75\x7b\xae\xee\xb5\x6b\xda\xa3\xfa\xa7\xab\x7f\x7a\xfa\xa7\xaf\x7f\x3c\xfd\xa3\x3b\x38\x34\x05\x46\xba\x2f\xba\x9f\x23\xa2\x7f\x74\x2d\x23\x5d\xcb\x48\xd7\x32\xd2\xb5\x8c\x74\x2d\x23\x5d\xcb\x48\xcf\xa0\xa7\x67\xd0\xd3\x6f\x03\xdd\x41\x4f\x77\xb0\xaf\x13\xfb\x7a\x98\x9e\x1e\x83\x37\x52\x23\x1a\xe8\x61\xf6\x75\x62\x5f\x97\xeb\x9b\x72\x7a\x60\x9e\x9e\x10\x4f\xe7\xf4\xf4\x84\x78\xa6\x05\x9d\x65\xa0\xb3\x0c\xf4\xb7\x81\xee\xcb\x40\xf7\x5a\xbf\x11\xdd\x25\x92\x27\x9a\x35\xd2\x43\xd1\x55\x13\xdd\x41\xe2\x99\x44\x5d\xce\xd3\x89\x03\x93\x45\xcf\x99\x6e\x9d\xf4\x4d\x9d\x7a\xea\xfa\x6a\x8d\x88\x67\xb2\xe8\x16\x74\xe7\x89\x1e\x34\xe9\xeb\x69\xed\x9b\x37\x9d\x45\x8f\x96\xe8\xce\x13\x33\xbe\x9e\x1e\x5f\xcf\xcc\x84\x49\xd4\xa3\xed\xe9\xf9\xec\xe9\xf9\xec\xeb\xb1\xf7\xf5\xf4\x74\x75\x7b\x43\x33\xad\x7a\x26\xf4\x4a\x53\xbd\xd2\x74\x60\xe6\xcc\x24\x9a\x2c\xba\x21\xbd\x35\xa8\x29\x3e\xec\xa9\x35\xd2\x5b\x8a\xea\x4d\x44\xcd\x4e\xd6\xfb\x9a\x76\x4d\xb3\x3a\x4b\x57\x57\xd6\xd5\xab\xd9\xd5\x05\xba\xba\xa1\xae\x6e\xa1\xab\x5b\xe8\xea\x5a\x7a\xba\x96\x9e\xae\xa5\x67\x86\xa9\x8b\xf7\xba\x18\xb2\x92\x95\x44\x7d\x17\xef\x60\x43\xfa\x94\x91\x3e\x05\xd2\xef\x32\xd2\xef\x02\xe9\xf7\x18\xe9\xf7\x80\xf4\xfb\x8c\xf4\xfb\x40\xfa\x1e\x23\x7d\x0f\x48\x7f\xc0\x48\x7f\x00\xa4\x3f\x64\xa4\x3f\x04\xd2\x1f\x31\xd2\x1f\x01\xf1\x5c\x46\x3c\x17\x88\x47\x18\xf1\x08\x10\x8f\x32\xe2\x51\x20\x5e\x97\x11\xaf\x0b\xc4\xeb\x31\xe2\xf5\x80\x78\x7d\x46\xbc\x3e\x10\xcf\x63\xc4\xf3\x80\x78\x03\x46\xbc\x01\x10\x6f\xc8\x88\x37\x04\xe2\x8d\x18\xf1\x46\x40\x06\x2e\x23\x03\x17\xc8\x80\x30\x32\x20\x40\x06\x94\x91\x01\x05\x32\xe8\x32\x32\xe8\x02\x19\xf4\x18\x19\xf4\x80\x0c\xfa\x8c\x0c\xfa\x40\x06\x1e\x23\x03\x0f\xc8\x60\xc0\xc8\x60\x00\x64\x30\x64\x64\x30\x04\x32\x18\x31\x32\x18\x01\x19\xba\x8c\x0c\x5d\x20\x43\xc2\xc8\x90\x00\x19\x52\x46\x86\x14\xc8\xb0\xcb\xc8\xb0\x0b\x64\xd8\x63\x64\xd8\x03\x32\xec\x33\x32\xec\x03\x19\x7a\x8c\x0c\x3d\x20\xc3\x01\x23\xc3\x01\x90\xe1\x90\x91\xe1\x10\xc8\x70\xc4\xc8\x70\x04\x64\xe4\x32\x32\x72\x81\x8c\x08\x23\x23\x02\x64\x44\x19\x19\x51\x20\xa3\x2e\x23\xa3\x2e\x90\x51\x8f\x91\x51\x0f\xc8\xa8\xcf\xc8\xa8\x0f\x64\xe4\x31\x32\xf2\x80\x8c\x06\x8c\x8c\x06\x40\x46\x43\x46\x46\x43\x20\xa3\x11\x23\xa3\x11\x50\xd7\x65\xd4\x75\x81\xba\x84\x51\x97\x00\x75\x29\xa3\x2e\x05\xea\x76\x19\x75\xbb\x40\xdd\x1e\xa3\x6e\x0f\xa8\xdb\x67\xd4\xed\x03\x75\x3d\x46\x5d\x0f\xa8\x3b\x60\xd4\x1d\x00\x75\x87\x8c\xba\x43\xa0\xee\x88\x51\x77\x04\x94\xb8\x8c\x12\x17\x28\x21\x8c\x12\x02\x94\x50\x46\x09\x05\x4a\xba\x8c\x92\x2e\x50\xd2\x63\x94\xf4\x80\x92\x3e\xa3\xa4\x0f\x94\x78\x8c\x12\x0f\x28\x19\x30\x4a\x06\x40\xc9\x90\x51\x32\x04\x4a\x46\x8c\x92\x11\x50\xea\x32\x4a\x5d\xa0\x94\x30\x4a\x09\x50\x4a\x19\xa5\x14\x28\xed\x32\x4a\xbb\x40\x69\x8f\x51\xda\x03\x4a\xfb\x8c\xd2\x3e\x50\xea\x31\x4a\x3d\xa0\x74\xc0\x28\x1d\x00\xa5\x43\x46\xe9\x10\x28\x1d\x31\x4a\x47\x40\xbb\x2e\xa3\x5d\x17\x68\x97\x30\xda\x25\x40\xbb\x94\xd1\x2e\x05\xda\xed\x32\xda\xed\x02\xed\xf6\x18\xed\xf6\x80\x76\xfb\x8c\x76\xfb\x40\xbb\x1e\xa3\x5d\x0f\x68\x77\xc0\x68\x77\x00\xb4\x3b\x64\xb4\x3b\x04\xda\x1d\x31\xda\x1d\x01\xed\xb9\x8c\xf6\x5c\xa0\x3d\xc2\x68\x8f\x00\xed\x51\x46\x7b\x14\x68\xaf\xcb\x68\xaf\x0b\xb4\xd7\x63\xb4\xd7\x03\xda\xeb\x33\xda\xeb\x03\xed\x79\x8c\xf6\x3c\xa0\xbd\x01\xa3\xbd\x01\xd0\xde\x90\xd1\xde\x10\x68\x6f\xc4\x68\x6f\x04\xb4\xef\x32\xda\x77\x81\xf6\x09\xa3\x7d\x02\xb4\x4f\x19\xed\x53\xa0\xfd\x2e\xa3\xfd\x2e\xd0\x7e\x8f\xd1\x7e\x0f\x68\xbf\xcf\x68\xbf\x0f\xb4\xef\x31\xda\xf7\x80\xf6\x07\x8c\xf6\x07\x40\xfb\x43\x46\xfb\x43\xa0\xfd\x11\xa3\xfd\x11\x50\xcf\x65\xd4\x73\x81\x7a\x84\x51\x8f\x00\xf5\x28\xa3\x1e\x05\xea\x75\x19\xf5\xba\x40\xbd\x1e\xa3\x5e\x0f\xa8\xd7\x67\xd4\xeb\x03\xf5\x3c\x46\x3d\x0f\xa8\x37\x60\xd4\x1b\x00\xf5\x86\x8c\x7a\x43\xa0\xde\x88\x51\x6f\x04\x74\xe0\x32\x3a\x70\x81\x0e\x08\xa3\x03\x02\x74\x40\x19\x1d\x50\xa0\x83\x2e\xa3\x83\x2e\xd0\x41\x8f\xd1\x41\x0f\xe8\xa0\xcf\xe8\xa0\x0f\x74\xe0\x31\x3a\xf0\x80\x0e\x06\x8c\x0e\x06\x40\x07\x43\x46\x07\x43\xa0\x83\x11\xa3\x83\x11\xd0\xa1\xcb\xe8\xd0\x05\x3a\x24\x8c\x0e\x09\xd0\x21\x65\x74\x48\x81\x0e\xbb\x8c\x0e\xbb\x40\x87\x3d\x46\x87\x3d\xa0\xc3\x3e\xa3\xc3\x3e\xd0\xa1\xc7\xe8\xd0\x03\x3a\x1c\x30\x3a\x1c\x00\x1d\x0e\x19\x1d\x0e\x81\x0e\x47\x8c\x0e\x47\xd0\x77\x59\xdf\xdd\x4d\x81\x36\x10\x10\x12\x27\xee\x41\x20\x47\xf3\xa1\x8b\xd0\xcf\xde\xf8\xab\x1d\x6c\xe8\xc8\x65\x74\xe4\x16\xf5\x74\x9b\xea\x21\xc7\xea\x09\xa2\x59\xb8\x9e\x8b\x54\x55\x44\x18\x1d\x91\xa2\xa2\x5e\x53\x45\xf4\xb0\x22\x23\xec\x34\xcc\x95\xaa\x88\x32\x3a\xa2\x45\x45\xfd\xa6\x8a\x0e\x61\x6b\x5e\xd1\xad\xc8\x2a\xb7\x43\xdf\x8a\x74\x96\x04\xab\x2c\x4e\x74\xd5\x5d\x46\x47\xdd\xa2\x6a\xaf\xa9\xea\xde\xd1\xaa\xef\xfd\x70\x6d\xba\xd8\x63\x74\xd4\x2b\xea\x19\xec\xd7\x53\xbb\x30\x2c\xd0\x1a\x95\x14\xc8\x7e\xdd\xef\x93\xf8\x2e\x48\x95\xf4\xc9\x0f\xc3\x47\x59\x7b\x7e\x64\x47\x7d\x46\x47\xfd\xa2\x95\x61\x53\x6f\xbd\xc3\x1a\x3f\x66\x49\x10\xdd\x3a\x2b\x7f\x7e\x19\xcd\x55\x6f\x3d\x46\x47\x5e\x51\xcf\xa8\xa9\x9e\xc1\x53\xf5\x7c\xcc\xfc\x24\x53\x35\x0d\x18\x1d\x0d\x8a\x9a\x88\xdb\x54\xd5\xe8\x68\x55\x59\x12\xdc\x7d\x08\x6e\x97\xba\xae\x11\xa3\xa3\x72\x03\x93\x26\x12\x58\x52\x67\x4f\xd4\xf5\xbd\x58\xe8\xaa\x86\x8c\x8e\x86\x65\x55\x0d\x87\xa1\xeb\xee\x1d\x06\xd2\x1b\x61\x67\x81\x2c\x3f\x7d\x8c\x66\xaf\x33\x91\xf8\x59\x2c\x99\x63\xd8\x90\xde\x88\x91\xde\x08\xba\xae\xcb\xba\xae\xaa\xb0\xe1\x54\x74\xf7\xeb\xf3\xb0\x73\x1b\xc6\x37\x7e\x28\xab\x90\x48\x17\xba\xb2\xbc\x2c\x7e\x70\x16\xb2\x06\xc1\x8d\x91\xd8\x1f\xde\x12\x98\xeb\x93\xab\xc7\x95\xd0\xfc\x93\xe8\x58\xad\x20\x55\xd7\x4e\x7e\x2b\x2f\xd0\xb6\xca\x3b\xe7\xdd\x0e\x36\xb2\xdd\x83\xa3\x63\xe4\xa5\x88\x7a\xf8\xe4\x68\x1f\xda\x09\x12\xf8\xc9\x46\xa3\x96\xe6\x5f\xf7\xdb\x94\xb8\xc8\x93\x0d\x1f\x1c\x2c\xdd\x70\xd9\xe4\xe6\x5e\x24\x69\x10\x47\xcc\xa2\x8e\xe7\x10\x62\xed\x4e\xac\x68\x7d\x77\x23\x92\x92\x95\xba\xbe\x16\xb6\x8d\xae\xaf\x05\x4f\xb0\x19\xd0\xc1\x41\xcb\x07\x44\x7a\xcd\x03\x82\x4c\xb2\xbe\xc1\x02\xc9\x31\x41\x21\xf0\xcf\xca\xdb\xb0\xf4\x21\xc8\x66\x4b\x14\xe1\xcd\xcc\x4f\x45\x8b\x30\xf3\xa5\xa8\x23\x29\x98\x46\xa1\x39\xcb\x0c\x12\xbc\x3b\x51\xb9\xe9\x61\x6e\xd9\xde\x41\x7e\xc9\x4a\xea\x12\xdd\xa6\x12\x10\x34\x96\x81\xa0\xbc\xd8\xaa\x49\xa4\x4c\x4e\x73\x45\x02\x85\x68\x4d\xc9\x59\x37\xa4\xc7\x48\x4f\xce\xd6\x01\xc0\x28\x67\xa8\x2d\x19\x36\x8c\xd0\x61\xb5\x83\x76\xae\xce\xa0\x65\x0a\xc5\x3d\xfb\x66\x07\x96\x6f\xc1\xe6\x56\x54\x2e\xee\xcb\x62\xbb\x1d\x76\xfc\x1d\x96\x2b\x25\x49\x17\x22\x3b\x70\x00\x69\x2a\xfb\x0f\x22\xf9\x4b\xb1\x33\x8f\x67\xaa\xf7\x10\xf0\x44\xdf\xf0\xa3\xc8\xa8\x52\x5c\x86\x42\x7e\x39\xb6\x57\x73\xfe\x79\xbc\x97\x1f\x09\xac\x2f\x4b\x36\x8a\x78\x82\x7c\x5b\xd2\x03\x70\x55\xf4\x87\xea\xfe\x48\xb6\x3a\x90\xbf\x03\x0c\xb1\x4c\xef\x61\xf0\xe5\x6f\x17\xc3\xde\xb6\x0a\x75\xe9\x35\xcc\x60\x0e\x4b\x2e\xec\xd4\x79\x05\x0b\xf5\xfb\x1d\xac\xd4\xef\x47\xb8\x53\xbf\xef\xe1\x5e\xfd\x7e\x03\xb7\xea\xf7\x27\xb8\xe1\x8b\x71\xc4\xa2\x49\x36\xdd\x6e\x91\xfc\xe1\x9b\x1d\x86\x47\x7e\x53\xca\xc8\xe1\x9a\x2f\xc6\x09\x5b\x8d\x93\x49\x36\x65\x28\x51\x79\x37\x3b\x5c\xe6\x50\xf7\x0d\xeb\x56\x10\xb5\x16\xb6\x8d\x42\x9e\x61\x08\x31\x9a\xf1\xf6\xd2\xb6\xaf\xf3\xdb\xad\x36\xe7\xd7\x93\xf5\x14\xdb\xb6\x8f\x6e\x60\x8d\xb7\x5b\x34\xe7\xb3\xb1\x4c\x63\xe1\x64\x3d\x85\x9b\xc9\x7a\xca\x17\x8d\xf7\x93\x32\xd3\x58\x66\x62\xf7\xb6\x3d\x1b\x07\x68\x0e\x09\x66\xb7\xb6\x2d\x3f\x70\x3e\x1f\x57\x17\x43\x5f\x7c\x94\x72\x76\x2d\x74\x0a\x16\x4a\x1e\x55\x15\x6d\x0b\xbc\x31\x67\xee\x40\x4a\xae\x8f\xa0\x9b\x1f\x91\x48\x3c\xb4\xc4\x49\xfd\x58\xaa\x34\x94\xe1\xbd\xf3\x67\x92\xe5\xc9\xdc\x4f\xa9\x88\x71\x44\xf5\x56\xb1\x72\x6a\xca\x4b\x84\x62\x72\xb9\xa8\x2c\x45\xb6\x43\x73\xcc\xee\xaa\x93\x54\x40\xa9\xf9\x38\x40\xaf\x4c\xaa\x3a\xbb\x30\xc7\x6c\x0e\x77\xb6\x8d\xd0\x8d\x73\x1f\x24\xd9\xda\x0f\xb7\xdb\xf2\x59\x2e\x35\x96\x13\x38\x07\xb9\x19\x3e\xd8\xf6\xa3\x6d\xb7\x1f\x27\xeb\xa9\x6d\xc7\xe8\x11\xd6\x30\xc7\x18\xef\x4e\x52\xe7\x15\x27\x90\x3a\xdf\x71\x0a\xa9\xf3\x91\xf7\x20\x75\xde\xf3\x21\xa4\xce\x37\x9c\x78\x90\x3a\x3f\xf1\xae\xfc\xf2\x03\xf7\xe4\xa7\x0f\x9c\xd0\x61\x05\x23\xa5\x05\x1a\x22\x92\x53\x03\x73\x14\x24\xd5\x0f\x92\x87\x90\x10\x82\x1e\xe0\xdc\xe6\x83\x96\x25\x8f\xf9\xfd\x79\x5b\x20\xbc\x9b\xf9\x72\xf9\x0a\xf9\x7e\xdb\xdd\x19\x8c\x43\x0f\x30\xef\x3e\xe0\xb7\xd6\x91\xd1\x95\x29\xf7\x99\xd6\x32\xb3\x6d\xa3\x6d\xf6\xc6\xcf\x96\x9c\xcb\xff\x63\x9d\xc2\x9a\x0a\xa5\x22\x5c\xd8\xb6\xfc\x5f\x2d\x20\xdf\x59\xbe\x1c\xc8\xaa\xdc\x15\x5b\x18\xe1\x26\x1c\x73\xab\x70\xcc\x6d\x81\x63\xe8\x01\xae\x37\x8a\x5a\xbb\x3d\xc5\xa3\x23\xf8\xa6\xbc\xa9\xd2\x90\x5c\x26\xe5\xb3\x73\x40\x07\x14\xf0\x67\x60\xe0\xe1\xb0\x0a\xeb\x04\x22\x43\x3c\xae\x41\x9d\xa0\x52\xfd\x42\xa3\x37\x44\x20\xc0\x78\xc7\x0e\x2e\x01\xcc\x9e\x57\xf7\xa2\xa0\xf0\x33\x91\xbc\x35\x48\x4e\x51\x32\x12\x8c\x0e\x65\xa7\x0e\x88\x84\x1a\x96\x20\x43\x6c\xdb\x7f\x00\x5b\x08\x44\x46\x18\x59\xf3\xe0\xde\xc2\x5f\x8b\x37\x74\xf7\x88\x64\xd4\x21\xc7\x21\xf4\x80\x94\x78\x0a\x17\x1c\x4a\xdc\xc7\xd1\x3a\x0c\xdb\x9c\x0b\xd6\x70\x76\x73\x42\x89\xee\xd1\x15\xf9\xc5\x9f\x42\x09\x7d\x8d\x12\x68\xdf\xa0\x84\x91\x44\x09\x8d\x83\x3e\x49\x9c\x85\x59\xb4\xc6\xef\x07\x4b\x14\x2c\x90\xec\x3c\x64\x3c\x46\x19\xb4\x5d\x0c\x92\xdc\x80\x00\x97\x07\xae\xe5\x9b\xcc\xe6\xd0\xa5\x78\xb3\x93\x74\xe2\xad\xc8\xac\x20\x6a\x25\xdb\xad\x95\x9a\xc7\x03\x92\xcd\x7a\xa1\xf4\x6b\xe2\x44\x93\x6d\x85\xe2\x5a\x49\xb6\x59\x8a\xa5\x51\xa5\x6d\x1b\x99\x2b\x74\x95\x86\xcd\x8e\xe9\x33\xd2\x07\xb3\x6f\x24\x07\x0e\x54\x92\xed\x72\xce\x9e\xa0\x2e\x9a\xce\xc3\x46\x44\xeb\x3b\x91\xf8\x37\xa1\x60\x6d\x44\x6c\x81\x61\x16\x47\x8b\xe0\x76\x9d\xa7\x51\x99\xf6\x90\x04\x99\x79\xef\xc9\x77\xd5\x19\x96\x15\x00\xe6\x29\x92\xe2\xe8\x89\x2c\x88\xda\x82\xea\xcb\xb5\x0d\x25\x7e\x6a\x02\xeb\x28\xe2\xc2\xc9\x62\xcd\x6b\xc8\x13\x90\xa0\x80\x47\xe6\x44\xe3\xa2\x22\x55\xc1\x91\xd2\xaa\xe7\xef\x16\x5f\x28\xdc\xfe\x7f\xd7\xfc\xc1\x92\xbf\xf4\xa3\x3f\x67\xad\x59\x1c\xdd\x8b\x24\x33\x64\x7a\x2b\x8b\x5b\xab\x24\xb8\x0b\xb2\xe0\x5e\xb4\xf4\x92\xe3\x2a\xbd\xde\xad\x11\x46\x39\x2e\x17\x88\xba\xf8\x24\x43\x99\xf3\x1d\x6c\x34\x6b\xc3\x14\xa9\xb4\x53\x44\x9e\xcb\x94\x98\x8a\x51\x2a\x6b\x20\x87\x27\xa8\x40\xb0\x93\xde\x74\x42\x7a\xea\x6a\x46\xe3\xdf\xa4\x8a\x7c\x4b\x82\xb5\x7b\x04\x7b\x08\xd4\x7b\x7a\x71\x73\xb0\x5e\xd3\xb7\x7a\x9b\xa7\x35\xb2\x33\x59\x7e\x04\x3a\x6a\x9f\xf7\x3c\xd6\x53\x33\x71\x04\xfa\x4b\x38\xe0\x62\x64\xad\xa3\x74\x16\xaf\xe4\x06\x4d\x95\xca\x9c\x16\x83\x94\x24\x99\xd6\x01\x8b\x26\xc9\xd4\xb6\x05\x1a\xb8\x18\x45\x90\xa8\x2b\xc6\x66\xb0\x25\x73\x4e\xc4\x94\x4b\x14\x2a\x4f\x9b\xcb\x48\xdf\x85\x81\xcb\x06\x4a\x18\x73\x80\x30\x6a\x82\x85\xa2\x6b\x74\x80\x51\xdb\x7d\x8a\x03\xca\x11\x61\x07\x45\xe3\x44\x55\x65\x68\x2e\x46\xd4\x4e\x20\x74\xc0\x08\x1d\xc8\x36\x9f\xc0\x07\xf5\x15\x36\xf4\x5d\x1b\x89\x2a\x79\x97\xe1\x8a\x56\x5b\x64\xdb\x4a\x97\xf7\x90\x87\x4d\x3a\x16\x6b\x05\xd1\x2c\x4e\x12\xb9\x43\x83\xe8\x3e\x9e\xf9\x47\xf8\xd8\xae\xf7\xa5\xcd\xd5\x7f\x62\x73\x29\x08\x36\x18\xb1\x81\x84\x5a\xdd\xa7\x45\x35\x25\x3b\xe9\x1a\x86\xa0\x6b\xc0\x3f\xe9\x8e\xaa\xf3\x3b\x99\x3a\xb3\x78\xf5\xf8\x53\x90\x2d\x83\x68\x5f\x4d\x54\x5f\x0e\x26\xe6\x26\xd6\xe7\x01\x8a\x0b\x3d\x90\x94\xcb\x4c\x3e\x86\x90\x4b\x22\xd9\xc7\xb0\x3e\x50\x8d\xb8\xa0\xe3\x72\x78\x74\x9a\x6b\x02\xcd\x14\x89\xe3\xdc\x05\x11\x42\x05\x27\xbb\x1e\xfb\x2c\x42\x6b\xf0\x31\x3e\x0d\xc1\x3f\x4d\x31\xcc\x39\x51\xac\x41\x78\x9e\xda\x76\x7a\x1e\x76\x66\xb6\x8d\xe6\xfc\x94\x40\xd8\xe1\xb3\x53\x02\xa9\xfa\xc1\x67\xb3\xd3\xd3\xd6\x85\x7b\x86\x43\xb9\x44\xf1\x38\x9e\xa4\x53\x1e\x4f\xc2\x29\x33\x8a\xea\x32\x41\x66\x9e\xcb\x82\xf3\x7c\x55\x62\xb5\x5f\xba\x7d\x46\xba\x7d\x20\xdd\x11\x23\xdd\x11\x90\x9e\xcb\x48\x4f\xed\xd9\x03\xbc\xf0\xc7\x66\xb8\x59\x35\x3d\x9f\xd4\x98\x07\x15\x05\x62\xff\x60\x0a\xd5\x3c\xfb\x17\xa4\x32\x91\xa4\x98\xc8\x58\xce\xbe\x7f\x64\x96\xd7\xbc\x98\xdb\x70\x1c\xb3\x08\x85\x10\xe3\xb3\xf5\x45\x7a\x86\xb3\x49\xda\xe9\x4c\xb9\x28\xd8\x85\x2f\xcc\xc4\x51\x5c\x45\xba\xc3\x7c\xf0\xa3\x7c\xf0\xfd\x2f\x70\xb9\x15\xce\x2a\x06\x5f\xd7\x95\x42\x28\x67\x44\xee\xa1\x08\x85\xc5\x74\xcc\x78\x80\x7c\x58\xab\xcb\x78\x61\xdb\x71\x9b\xc7\x7a\x0e\xcf\xd6\x17\xb3\x33\x1c\x2c\x10\x4a\x79\x38\x99\x75\x3a\x53\xdc\xe6\x29\x2e\xa8\x78\x11\xa6\xa2\x55\x64\x9c\x75\x3a\x2a\xaf\xd8\x6e\x67\x72\x87\x84\xd8\xb6\xc3\xc9\x6c\xca\x39\x2f\xae\xf8\xe5\xb7\xed\xd6\x35\x33\xd2\x16\xb6\x7d\x4a\x76\xf5\x69\x19\x32\xd2\x1d\xe6\xd3\xb3\x9b\x42\xef\x28\x17\xde\x37\x5c\xf8\x20\xdf\x11\x72\x8f\xc4\xf9\x34\x49\x3e\xbc\xd7\x3d\x8e\x07\xd4\x84\x70\xc2\xb9\x80\x90\x53\xf9\xb3\xe6\x5d\xf9\x33\xe3\x3d\xf9\x33\xe7\x9e\xfc\x59\xf2\xbe\x52\xf8\x9c\xc3\x82\x67\xdb\xad\x7f\x72\x38\xbf\x3e\xac\xca\x3d\x77\x07\xf7\x70\x2b\x77\x1b\x86\x1b\x1e\xa1\x5b\xc9\xa6\x27\xc8\x87\x15\x74\x31\x5c\xf3\x18\xdd\x14\xf3\xfe\xc0\x5d\xb8\xe4\xe9\x78\x81\x32\xb8\xc6\x2c\x54\x0f\x2e\x36\x3b\xeb\xec\xfa\xe2\xe1\xec\xc1\xcc\xe9\x72\xbb\x7d\x90\x73\x7a\x83\x6d\x1b\xdd\xf3\x47\x74\xc7\x6f\x26\x0f\x53\x78\x80\x5b\x0c\x02\xcb\x3c\x29\xbe\x9c\x3c\x4c\xf9\xfd\x89\x5a\x95\x60\x81\xee\xb1\xe1\x9b\x85\x61\x94\x73\x59\x52\xdb\xd5\xdc\x70\x3f\xe7\x86\xef\xf4\xbb\x97\xbf\x3f\xe4\xdc\xf2\xa5\x56\x98\xbe\xd3\x3a\xd5\xb2\xd2\x59\xbe\xfa\x24\x9f\x88\xf9\xf8\x94\xb0\xf5\x76\x3b\x1b\xcf\xd8\xa5\x59\xcb\xda\xd6\x86\x5e\x97\xf5\xba\xd0\xa7\xac\x4f\x61\xd0\x67\x83\xbe\x5c\xd5\x03\x56\x32\x5f\xd5\x2e\x31\x7b\x5d\xae\x66\x60\x96\x37\x7e\xea\xc0\x83\x5c\x82\x14\x42\xbc\x51\x78\xda\xa8\x8f\x48\x42\x59\xee\xec\xb5\x84\x70\x31\x5a\x17\xd3\xbe\xe4\xe1\x78\x7e\x4a\x98\x0b\x0b\x1e\xca\xce\x13\xb9\xf1\xfd\x73\x8a\xd5\x56\x3e\x53\x58\x6a\x29\x67\x7b\x86\x37\x29\x9f\x4d\x96\x53\x58\x76\xf8\xe2\xe4\x26\x11\xfe\x27\x49\x4d\xcb\x37\x08\xc7\xcb\x73\x97\xcd\xcf\xf9\xf2\x90\x90\xfe\x20\xe6\xeb\x99\x52\x4d\x17\x77\xab\xec\xb1\xe5\x4b\xb4\xdf\x7a\x08\xb2\x65\x2b\x8a\x5b\x41\x14\x64\x81\x1f\x16\x94\x95\x6a\x36\x1c\x2f\x2f\xb8\xcb\xe6\x17\xcb\x33\x59\x3d\xd6\x1d\xb0\x6d\x94\xf2\x0c\xa5\xa0\x7b\x01\x6b\x5c\x60\xbb\xb4\x69\xaa\xbb\x84\x75\x49\x39\xc9\x47\x09\xa4\xc1\xc8\x1c\x9d\x81\x39\x3a\x8a\x5a\x49\x57\x62\x16\x48\x4a\xe5\x08\x68\x51\x30\x35\x6f\x5f\xa6\xd8\x76\x83\x04\x1a\x65\x5c\x38\xb3\x38\x4a\xb3\x64\x3d\xcb\xe2\x04\x6f\xb7\x59\x9b\x6b\xd2\xc7\xb6\xdb\x11\xaa\x88\x4d\xf0\x76\x8b\x32\x03\x41\x31\xc8\xe5\xb3\x6d\xa3\x17\x8f\x32\x9e\x4d\x82\xa9\x6c\xa3\xc8\x51\x15\xc9\x8e\x55\x85\x2c\xab\x11\x42\x03\x36\x18\x14\xc8\xbb\x77\x94\x38\xeb\xd1\xe3\x70\xa1\x94\x07\x29\x21\x30\x46\x9a\x1f\xef\x51\xd6\x93\x94\x6b\xef\xeb\x68\xac\x7c\x17\x0f\x0c\xc0\x1e\xf4\xe4\x26\x9e\x4c\xb5\x7a\x32\xf8\x7c\xb3\xdb\x97\x10\x26\x86\x3c\x92\xd4\x4d\xcb\xc7\x25\x48\x89\xf8\x64\x0a\x01\x77\xcf\x82\xf3\x4c\x19\x52\x44\x93\x60\xca\x2d\x7f\x62\x75\x82\x8e\x35\xb5\x4e\x7c\xc9\x88\x95\x52\x8c\x57\xe0\x2b\x7d\xbf\x42\xae\xf5\x0a\x59\x9d\xdc\xd2\x01\x2c\xdc\xb1\xb0\x55\xc8\xb8\x64\x59\x24\x94\x88\xba\x9c\x91\x42\x40\x75\x13\x44\xf3\x2a\xb9\x92\xd3\xfa\x25\xb1\x12\x6b\x2e\xa3\x40\x8d\x40\x24\xb6\xdc\x53\xd2\x4d\xb8\x2f\x77\xc4\xcc\xcf\xd0\x7e\x7e\x5c\xd3\xd0\xaf\x52\x86\xe1\x38\x45\x19\xe4\x56\x24\x90\x60\x16\x28\xf9\x9c\x28\x05\x70\xf5\xbd\x64\xdb\x28\xac\x48\xe4\xaa\x9f\x20\x94\x6b\x68\x4e\x47\x8f\x0d\x7a\xe5\x26\x39\x7a\xe9\xd1\x33\x42\x67\x7d\x36\x72\xee\xea\xca\xbf\xb5\xe4\x92\x5a\x2f\xf2\x11\x58\x9c\x27\x0d\xa2\x8e\x62\x84\x3b\x84\x9f\x3c\x50\x12\x3f\xe7\x03\x2a\x4d\x0c\xc6\xd6\x0f\x85\x10\x8b\xe5\xa6\x22\x63\xeb\xed\x3a\x0c\x2d\x66\xa5\xaa\x2f\x25\xff\x17\xef\x6d\xe2\x8a\x40\x40\x72\xe9\x46\x18\x90\xe0\xcd\x6e\x87\x32\x23\x8d\x90\x00\x32\xc2\x78\x1c\xb3\x60\x2c\x4f\x1e\xb3\xde\xe5\xd2\x10\xe4\x2b\x3a\x01\x37\x4a\x30\x33\xb5\x82\x42\x8c\x2b\x53\xc0\xfc\xea\x31\xcc\xb9\xa3\xde\x91\x7b\x9d\xcd\xae\x60\x56\x9f\x26\x62\x72\x99\x58\x6e\x5e\x34\x84\x53\x92\x4b\xc7\x7a\x5f\x47\x9a\x8f\x06\xd8\x59\xa8\x75\x1c\xe5\xc2\x7a\x62\x10\x8a\xa4\x1f\x24\x95\x20\x29\xca\x94\x0b\xe4\x79\x72\xeb\x0a\x34\xec\x4a\x0a\x49\xa0\x61\x5f\x62\x10\xc9\x2f\x11\x89\x43\x04\xea\x7b\x12\x7b\x08\x34\xa2\xd8\x59\xf8\x69\xf6\x17\xf1\x08\x4a\x82\xd3\x1b\x60\x58\xf1\xf9\xd8\xba\x4e\xe5\xe2\x04\xbf\x0a\x0b\xee\x9a\x94\xac\x21\xe2\x4b\x89\xa3\x24\x13\xfa\xca\x92\x1c\x0f\x2e\x0d\x3f\x83\x49\x34\x55\x94\x78\xc2\x85\x73\xbd\x38\x4b\xce\x12\x9e\x38\x91\x44\xee\x89\xf3\xa9\x72\x0b\x95\x54\xcf\xea\xe6\x56\x64\x2f\x4b\x68\x5b\x17\x1a\x85\xb0\xd6\x2d\xcb\x71\x54\xf5\x7e\x25\x4b\x84\x04\xcc\x20\x03\xeb\x3a\xb0\x30\x08\xe7\x3a\xe3\x99\xfc\x09\x78\xa4\x6d\x52\xe5\xcb\x22\x37\x46\x15\xce\x75\x58\x3c\x4f\x56\x53\xee\x82\x16\x95\x25\xb6\x9d\xa2\x04\x42\x10\x93\xf5\x54\x1e\xce\xf2\x44\x07\x68\x56\x91\x8a\x6f\x94\x9e\x2b\x6b\xb4\xe0\x58\x18\xcb\x1d\x0c\x6a\xec\x81\x5c\x30\x39\x05\xd1\x59\xc4\x23\x27\xc2\x91\x93\xf0\xb6\x0b\x91\xb3\xb2\x6d\x14\x39\x2b\x1e\x39\x2b\x27\x2a\x10\x87\x61\x40\x92\x49\xe4\x04\xd3\x13\xd5\xed\xc3\xfe\xee\x4c\x36\xb6\x7f\x02\x93\x4a\xf3\x11\xbf\x43\x12\xc4\xc8\x15\x8a\x0a\x75\x7e\x27\x82\x58\x36\x79\x92\x37\xa4\x16\xcb\x09\xa6\x60\x3a\x16\xdb\x36\x8a\x9d\x88\x07\x18\x02\x65\x7b\xb7\xe2\x31\x86\x44\x76\x44\x32\xb5\x48\x3d\x05\x2a\x25\x2c\x52\x42\x95\x67\xb2\x9a\x9e\x9e\xee\x72\x71\x79\xb4\x83\x45\x9c\x5c\xfa\xb3\x65\xad\x9b\x45\x07\x4b\x6b\x3c\x88\x78\x2c\x59\xc3\x7d\x66\xb0\x99\x87\xe9\x62\xb9\x99\xc6\x89\x13\x31\x6d\xb3\xb3\x38\x53\xe4\x4e\x84\x12\xe7\x1e\x12\xe7\x93\xb2\xbe\xc0\x67\x89\x6d\x27\x4e\x72\x86\xe5\xce\x5b\xed\x60\xe9\xa7\xec\xf0\x5c\xb6\xdb\x77\xa8\x9c\x32\x81\x77\x3b\x0c\x73\xdb\x4e\x6a\xcb\x6d\x8e\xc1\x11\x39\x6e\x51\x7c\xb2\x9a\xca\xe2\x33\xa5\x08\x7f\x20\xf1\x34\x72\x37\x88\xf9\x9d\x3a\x45\x05\x53\x39\x8e\x9d\x7b\x9e\x30\xa4\x96\x39\xe6\x9b\x80\x05\xf2\x64\x29\xa1\xe8\x27\x96\xc1\x3d\x4b\x60\xc5\xd4\x2e\x0a\x21\xca\x67\x21\x51\x86\xe6\x72\x7f\x28\xeb\xb8\xeb\x85\x5c\x81\x48\x6d\xa9\x48\x3e\xca\x8d\xd2\xe9\x80\x3e\x9a\x72\x21\xd5\xa9\x0c\xa6\x3c\xc6\x18\xc4\x0e\x6e\x45\x76\x19\x65\xc9\x23\xbb\x83\x54\x64\x1f\xb3\x24\x8e\x6e\x0f\xfa\xac\x64\xf8\xb0\x77\xd8\xf4\xa4\x67\x7c\xa1\x8d\x39\xf5\x6b\x61\x14\x5b\x6c\xd5\x1d\xae\x29\xa3\xef\x99\x38\x5d\x7f\x02\x63\x2b\x74\x1d\x9e\x65\xb6\x9d\xc9\x95\xca\x24\xa2\xab\x59\xb9\x5d\x67\xb9\x51\xd5\x75\xc8\x33\x9e\x8d\xb3\x62\xd5\x33\xe7\x7a\x81\xc7\x6b\xe4\x82\xf5\x49\x3c\x4a\xd4\x25\xc6\x99\xf3\x89\x69\xc1\x6e\xfe\x7e\xcf\x26\x99\xdc\x11\xce\xfd\x14\x33\x94\x77\x3d\x67\x78\x91\x32\x25\x81\x64\x6c\x19\x25\x1c\xab\x28\x0e\x6d\x65\x79\x02\x33\x45\x34\x49\x8c\x40\xfa\x8c\x90\x3e\x10\x4a\x18\xa1\x04\x48\x6f\xc0\x48\x6f\x00\xdd\x3e\xeb\xf6\x0d\x4b\xd0\xf7\x58\xdf\x03\xcf\x63\x9e\x07\xc3\x2e\x1b\x76\x61\xd8\x67\xc3\x3e\x8c\x28\x1b\x51\x18\x79\x6c\xe4\xc1\x68\xc0\x46\x03\x09\xf4\xbf\x52\x5a\x20\x41\x7c\x64\x20\xf5\xad\xc8\x7e\x12\xfe\x27\x05\xfb\xbb\x9e\x06\xfd\x83\x51\x33\xe8\x97\x3c\x87\x04\xfd\xde\xc8\x80\x7e\x09\xd9\xe7\x3c\x44\x7d\xc5\x37\x20\x0f\xc3\x82\xbb\xb0\x6a\x42\x56\x72\xab\xe9\x6d\x15\x2a\xe5\xf5\x3b\xbc\xab\x22\x01\xb3\x07\x7c\x3e\x99\xee\xe0\xbe\x99\xe8\x9c\x23\xe1\xf8\x8d\x0a\xe8\x62\xe2\x4a\x46\x3a\xdb\x61\xbc\x3b\xb9\xab\x50\x39\xf5\xf3\x55\x10\x68\xf7\xfa\x7c\x69\x40\x56\x20\x8e\x6c\x42\xa6\xc7\x0f\x75\x51\x66\x27\x77\x37\x6b\xc2\xdc\x65\xb5\xc9\x38\x99\x90\x29\xcf\xf4\xc6\xf2\x35\xa3\x38\x11\x90\x4d\xf1\x51\x40\x9b\xc9\x23\xaa\xb2\x57\xc6\x58\x8e\x3e\xd3\x63\x14\x25\x06\xf9\xb7\xdc\x6e\xd2\x57\xa6\xc6\x33\x81\x32\x49\x5f\xb6\xdb\xff\x26\xc9\xfe\xaf\xc4\x81\x41\x7e\xf7\x3e\x6f\xc6\x81\xf3\x46\x1c\xb8\xe8\x74\x6a\x38\xaf\x86\xec\x02\x10\x93\x70\x0f\xd9\x25\x68\x5e\x45\x76\x0d\x53\x20\xa9\xfb\xb8\xbc\x56\x68\x13\xb3\x5f\xe5\xc7\x5c\x22\x22\x69\xbf\x64\xbc\x42\xb3\x1c\x3e\x62\x47\xd7\x84\x04\x66\x89\x6d\xaf\x51\x0e\x32\x02\x6c\xdb\x05\xde\x33\x49\x0d\x8b\xfb\x07\x1b\x5d\xfa\x69\x43\x8b\x0a\xd0\x1f\x87\xd4\x31\x8f\x90\x92\x7c\xb4\xdd\x5a\xdd\xf1\x78\xa5\x68\x38\x91\xa9\x2b\x77\x16\x4f\xe4\x14\xeb\x6b\x46\x58\x2f\xd2\x2c\x4e\x04\x5b\xd5\xe0\x45\x0d\x4e\x74\x3d\xd6\xf5\xa0\xe7\xb2\x9e\x6b\xe0\x84\x37\x62\xde\x48\xd3\xf0\x1a\x4e\x48\xd8\x70\x20\x3f\x6b\x84\x0d\x9e\x91\xa5\x79\x6e\x4e\x0e\x1a\x98\xa0\x80\x86\xaf\x81\x46\x0d\x28\x48\x20\xb1\x36\x40\x43\x02\x05\x8f\x6a\x72\x70\xd8\xd3\xe4\x20\xa1\x14\x2b\x3a\x70\x70\x54\xdc\x04\x2b\x50\x82\x21\x3d\x4f\x37\x3c\x99\x88\x29\x3c\xf2\x1b\xb8\xe6\xf7\x63\x75\x23\xc7\x2c\x7f\x3e\xb7\xe0\x81\x3f\xda\x76\xe5\x86\x00\x2e\x25\xa7\xf8\xf9\x90\x6b\xe0\x0f\xca\x5c\x0f\x3d\x80\x00\x4b\xef\x03\x4b\x1b\x93\x2f\x7d\x0d\xc7\x1b\x8e\x38\xba\xb5\xed\xb6\xb2\x9d\x93\xc8\x43\x6b\x0e\xc9\x15\xd7\x1c\x87\xcb\x04\xde\x31\x75\x55\xd8\x5c\xbe\x95\x17\x1f\xeb\x43\xc1\x8e\xd6\x21\xc7\x72\xa4\x8e\xe6\x32\x6a\x8b\xd5\x2e\xa5\x93\xa7\x4b\x40\x62\xca\xe0\x5d\xf3\xa5\x5a\xeb\xd1\xb6\xd1\xed\x76\xfb\xe0\x18\x82\xca\xb6\xdb\xb3\xda\x9d\x34\x92\x50\xfa\x11\xe7\xba\xa4\x08\x3b\x91\xf8\x9c\x21\x79\xa8\xb1\x9e\xe5\x77\x0a\x90\x3f\xc2\x47\xfe\x6e\x72\x3d\x45\xb7\xe3\xcd\x8e\x9d\xba\x40\x70\x9b\xbf\x83\x2b\x5e\xaf\xee\x9d\x3a\x34\x44\xd9\xcb\xbd\xe1\x73\x54\x03\xe3\xaa\x1e\xa4\x00\x06\xbc\xe7\xed\x5b\xdb\xae\x17\x2e\x31\xbd\x6e\x31\xe3\xfd\xb3\xec\xf4\xf4\x0c\x0b\xd9\x70\x56\x92\x3e\x6d\xa1\x9a\x39\x75\x15\xec\x79\xb3\xdd\x22\xf4\xc8\xb3\x4a\x5d\x86\x06\xc9\xe0\x51\x82\x69\x2d\x3f\x58\xa8\xa1\xde\x40\x06\x8f\x05\xbc\xaa\x01\xb4\x7b\x88\x26\xd7\x53\x88\x30\x44\x72\xf4\x15\xfc\xf2\x00\x0f\x55\x61\x0e\x7f\xc4\x80\xae\xb6\xdb\xf7\x92\xdb\xfe\x8c\xf2\x9d\x87\xe1\x33\x52\x1b\x0f\xc3\xbd\x6d\x7f\xd6\xf7\xcd\x18\x03\x7a\xbf\xdd\x7e\xc4\x32\xe5\x1a\xc3\xad\x6d\x3f\x68\x63\xb7\x02\x72\x99\x77\x2d\x5e\x7c\xe4\x77\x4e\x1d\x90\xa3\x0c\x04\xdc\xc3\x35\x86\x18\x55\x0f\xc5\x0a\x83\xef\xbc\xbd\xbc\xfc\x96\xb7\x73\x59\x72\x6b\x89\xe4\x80\xe1\x72\x22\xa6\xfc\x11\x22\x14\x39\xdf\x75\x22\xe7\xa7\x4e\xe4\xbc\x7a\x86\x1e\xdb\xfc\x06\xc3\x25\x86\xdb\xed\xf6\xce\x29\x68\x37\x59\x04\xee\x31\x3c\xd6\x60\x0f\xf1\x18\x21\x1e\x10\x4a\x19\xa1\xd4\xc0\x20\xcf\x65\x9e\x0b\x1e\x65\x1e\xcd\x61\xd0\x90\x79\x43\x18\x74\xd9\xa0\x6b\x20\xd1\xb0\xc7\x86\xbd\x02\x1e\xf5\xdd\x2f\x5d\x43\x79\x4f\x5c\x43\x79\x8c\x48\x16\xba\x7f\x20\x27\x3d\xc6\xe5\x6a\x59\xc5\x13\x8a\x8d\x01\xde\x28\xd1\x92\x18\x97\xba\x20\x2e\x04\x18\x33\x75\x91\x1f\xe8\x39\xe8\x31\x42\x7a\x05\xbd\xd5\xa7\x5f\x1a\xc3\xe0\x89\x31\x28\x45\x22\x25\x74\x91\x55\x1d\x48\xe3\x9a\xc1\xb3\x12\xea\x7f\xeb\x67\x15\x85\x2a\xb9\x2b\xae\x82\x3b\x01\xc1\xfe\x87\x2c\x7e\xfd\xf1\x9d\x96\x24\x40\xdc\x48\x94\x5d\x8c\xc6\x82\x59\xae\xd5\x11\x55\xa6\x39\x69\x50\x4e\xb1\xdc\xee\xb0\x7f\xea\x0e\x4e\x69\xff\xca\x1d\x30\xd7\x63\xdd\x91\x33\x1a\x8d\xfe\xc5\x6a\xf3\x40\x83\x20\x79\x8a\x64\x0f\xd0\x69\xdf\xad\xfc\x29\x82\x18\x6f\xb7\xed\x7a\xb5\xfb\x85\xde\xfa\x6f\x55\xc6\x71\x35\xcf\x02\xb5\x83\xf4\x55\x10\x05\x99\x40\x51\x09\xe8\x70\x7e\x05\xfd\xc1\x8f\x6e\x73\xb1\xf2\xeb\xe8\xde\x0f\x83\x79\x2b\x0b\xee\x8a\x7b\xf9\x8a\x33\x0c\xc8\xb8\x9a\xaa\x1f\xae\x5e\xbe\x5a\x87\xe1\xcf\xda\xaa\x34\x29\x12\xdf\x04\x61\x18\xa4\x62\x16\x47\xf3\x54\xb9\x31\xca\xce\xdd\xb1\x75\x6a\xb1\xec\x62\x34\x1a\x8d\xc6\x56\xc7\x62\x96\x55\x30\xef\x1d\x64\xa9\xd1\x59\x1d\x75\x8f\xe8\xdf\xa4\x48\x52\x06\x5a\x12\x13\x8c\x4f\x3d\x76\xda\xc3\x1d\xeb\xd4\xea\xc4\xa8\x68\x22\x8e\xb2\x25\xc2\x1d\xb2\xff\x41\x4d\x00\xc6\x1d\xeb\xaa\x9a\xfa\x0f\xf1\x3a\x49\x55\x32\xab\xd5\x12\x44\xeb\x4c\x34\x7c\xf8\x98\x77\x1e\x77\x2c\xc7\xea\xa0\xe4\x62\x34\x1a\x27\x6a\x79\x63\x94\xc8\xd4\x7f\xb1\x76\x2c\xd8\xc1\x46\x1d\x54\xb9\xeb\xbe\x52\x5c\x9b\xcb\xfa\x7a\xe4\x09\x4d\xe7\x5c\xec\xd6\xe6\x5c\xd8\x76\xa9\x45\xa0\xde\x8c\x3f\x01\xf5\x7a\x78\x23\xf0\xba\xb8\xba\x5e\x06\x51\x56\xde\x59\x47\x28\x17\xa5\x96\xd5\x09\x7d\xc5\xde\x23\x8c\xf4\x88\x26\x7e\xe4\x48\xbe\xea\xa2\x5d\x2b\x09\x29\x71\x61\x43\x2f\x8c\xb6\x87\x1f\x86\xad\x3b\x91\x2d\xe3\x79\x2b\x8e\x5a\x2d\xab\x23\x0e\xee\xd0\xfb\x5f\xbc\x43\x1f\x3e\x71\xf0\x95\xfe\x4f\xb1\x04\x0d\xda\x52\xf5\xaa\x46\x4f\x54\xa5\xb4\xbb\x0c\xa8\x35\x22\xdb\xfe\x13\xaa\x44\x56\x05\x57\x41\x5d\x01\x0f\x82\xf4\x7d\x0e\x38\xde\x2d\x60\x65\x92\x5f\xa7\x97\x85\xa6\x11\x64\xf1\xf7\xf1\xcc\x0f\x85\x01\x29\xb9\x94\x12\x8c\x72\x8e\x95\x7b\x3c\x02\xcb\xa8\xff\xf5\x8f\x5f\xda\xba\x86\x07\x25\x2e\x35\x94\xa6\x7b\x54\x8d\x3e\x97\xaa\x0b\xac\x04\x4d\x0b\x6d\x17\x9d\x13\x05\x3e\xa4\x5c\xd2\xf0\x10\xf2\xc0\x59\xc0\x9a\xbb\x67\x85\xb8\x67\x7d\x86\xc3\x5c\x73\xd0\xe7\xe9\x64\xdd\xe9\x4c\x15\x75\x67\x5c\x1d\xd5\x2f\x9f\x5d\xca\x88\x4b\x81\xb8\x7d\x46\xdc\x3e\x10\xd7\x63\xc4\x95\xbb\xcb\x3b\x7a\xcb\x9a\xd3\xcb\xfd\xfc\x3a\x2e\xbf\x64\x95\x74\xb3\x6f\xc4\xa8\x4f\x2a\x3b\x1b\x35\xe7\x57\x46\xcd\xf9\x3b\xa3\xe6\xfc\xd1\xa8\x39\xbf\x37\x6a\xce\xdf\xc0\x0d\x5f\x8d\x13\x76\x37\xd6\xca\xcb\x4a\x87\x99\x6f\x76\xb8\x51\x9b\x19\x1e\xf9\xaa\x41\x27\xfa\x9a\x57\xe8\x84\xed\xb6\x4a\x35\xc8\xef\xa5\x0e\xf4\xaa\xd4\x81\x9e\x73\x84\x66\xbc\xbd\xb0\xed\x9b\x8a\x1a\xf4\xcd\x64\x3d\xc5\xe3\x1b\x16\xe2\xc9\x7a\x0a\x4b\x2e\x49\xb6\xb1\xaf\x75\x9a\xef\x8f\xa8\xf6\xfa\x4d\xaa\xbd\x37\xb6\x1d\xa3\x1b\x58\x83\x56\xe0\xfd\x01\xc3\xe3\x64\x3d\x6d\xf3\xb9\x6d\x07\x4a\x7f\x77\xa9\x88\xa6\xeb\x3c\x11\x29\x75\xe9\x39\xde\x9d\x24\xce\x2c\x4e\x04\x8f\xe0\xff\x0b\xdd\x5e\x43\xd5\x28\xa3\x17\x23\x79\x31\xc7\xca\x68\x0f\x79\x47\xaf\x64\xf5\x0d\xc8\x9d\x9f\xcd\x96\x4f\xdf\x0d\xf2\xe7\xce\x73\xe5\x24\xc8\x7a\xee\x3c\xb7\x26\x62\x8a\xb2\x5c\x11\x31\xaa\x5d\x4a\x64\x93\x64\xca\xdb\x04\xda\x87\x19\x03\xbc\xc9\xad\x18\x6a\x5a\x4e\xb2\x87\x5f\xa2\x46\x28\x39\x0e\x49\x72\x0d\x51\xef\x69\x3a\x44\x5b\x21\x57\x24\x49\x06\x33\x0c\xcc\xf6\x97\xf4\x89\xba\x3c\x30\xcc\xa2\x9c\x1b\xc5\x2d\x12\x32\x54\x7a\x22\x95\x6b\x54\x58\xf3\x76\x50\x23\x09\x34\xb2\x96\xb3\x54\x08\x8d\xc4\x67\x31\x3b\x74\x6a\x33\x29\xdd\x6a\x3a\xb7\x49\xbc\x5e\xa5\x7c\xe3\x33\x6b\x60\xed\x24\xcf\x6c\x0d\x24\x9a\xb1\x2c\x27\x11\xab\xd0\x9f\x09\x24\xc0\xfa\xd3\xb9\x7f\xa1\x9d\x75\x34\x54\xf7\x1c\x8d\x19\x7e\xae\x08\x04\xd9\xde\xc9\x61\xb3\x05\xaf\x75\x44\xe5\x5d\x4f\x88\xe5\xdf\xe4\x30\xb0\xc4\x19\x54\x39\x8a\xc9\x7d\x03\x5a\xbe\x72\x1c\x33\x71\xa7\xb6\x6d\xdd\xe8\x67\x32\xdd\xa1\xa3\x74\xe9\x5c\x77\x72\xc9\x7d\x09\xe2\x16\x4d\x53\x96\xf1\x4d\xa9\x74\x3f\x59\x4e\x1b\x3a\x3e\xd8\xc1\xa0\xcd\xad\x7c\x2f\x61\x0c\x2b\xbe\x18\x37\xd6\xd5\x26\x90\xf0\xe7\xfe\xf3\xd2\xf7\xe4\xb1\xc9\x50\x77\x0e\xeb\x30\xdc\x81\xa5\x06\x2d\x47\x23\x94\xf0\xbe\xca\x12\x6d\x76\x50\x4b\x98\x84\x4d\x1d\x4c\x76\x18\x92\xc9\x72\x8a\x2c\x0b\x43\x3b\xdb\xe1\x5c\xd1\x43\xa9\x75\x2e\xb6\xdb\xf6\x4a\xf9\x59\x53\x0b\x6a\x1a\x6a\xaf\xb7\xdb\x5a\xcb\xed\x99\x1e\xc4\x9d\xdc\x43\x93\xe5\x14\xee\xf9\x1c\xc5\xb0\x04\x35\xf0\x7d\xcf\x2e\x35\x4b\xa1\x4c\x8f\x92\xf3\x74\xbc\xb0\xed\x76\x30\xde\xcc\xe3\x48\xb0\xb6\x6b\x74\x66\xef\x6a\xd6\x47\x6c\xef\xab\xb1\x33\x4a\x94\x7a\x60\xf1\x95\xec\xe4\x44\xdf\xf2\xfb\x89\x3b\x85\x1b\x7e\x3f\x21\xd3\x93\x04\xe5\x86\x80\x05\xa8\x16\x70\x8b\x21\x42\x1f\xc4\xed\xe5\xe7\x55\x25\x7d\x09\x94\xf3\x6c\xdc\x28\x0a\xbd\x29\xd4\xe1\xb5\x48\x6a\xd7\x20\xb2\xac\x67\xc2\xbb\x5c\xe6\x6c\xf8\x37\x49\x86\x90\x21\xe4\xb7\x92\xb9\x69\x71\xbf\xcf\xfa\x7d\xc3\xc9\x15\xb0\xef\xab\xc9\xc4\xa6\x5d\x9c\x9f\xb2\x9c\x94\xcb\x78\x49\x46\x0b\x63\xe5\x67\xdb\x28\xeb\x70\xeb\x56\x89\x19\x83\xdb\x28\x4e\xc4\x4b\x3f\x15\x26\x59\x4b\x1f\xef\xd6\x61\x16\x84\x41\x94\xa7\xde\xa9\xd4\x75\x14\xcc\xe2\x79\x9e\xb6\x56\x69\x69\x16\xcc\x3e\x3d\x9a\xa4\x47\x0b\x83\x42\xef\x39\xa9\xe8\x1d\x90\x8a\x8d\xa3\x19\x0c\xea\x3a\x0a\x4a\x6d\xaa\x7a\x31\xaa\xe1\x7e\x90\xbe\x54\x57\xf7\x1f\x57\x89\xf0\xe7\x92\x4c\x6a\x44\x02\xca\x7a\x26\x85\x10\x0a\xac\x5f\x4a\x35\x94\xf4\x8b\xcf\xe0\x96\xbb\x70\xc3\xdb\xed\xa5\x44\x89\x4b\x58\x40\x17\x9f\xdd\x9e\xaf\xb5\xca\xcd\xad\x56\x1a\x93\x8f\x2b\x7e\x33\xbe\x41\xe1\xe4\x76\x0a\xb7\x90\x62\xa6\x9e\xee\xe4\xc1\x8d\xd0\x0a\xdb\x36\xba\xe3\x05\x9e\x46\x77\x7c\x35\xf1\xa7\x78\xdc\x6e\xdf\xb1\x04\xad\x30\x86\x3b\xdb\x9e\x5f\xb8\xf8\x9e\xeb\x2e\xad\x20\x40\xab\x42\xfd\xe7\x1e\xe6\xa7\x04\x9f\x92\x93\xdc\x4d\xe4\xfd\x05\x1f\xb9\xee\x80\x8c\x46\xb4\xdf\x1b\xf4\xdc\xd1\x88\x1c\x50\xce\xf8\x24\x9b\xdc\x4f\xf9\x6a\x77\xdf\xe9\xec\x6e\x3b\x9d\x5c\x7b\xe2\xbe\xa6\x84\x63\x36\x9a\xd1\x74\xaa\xe9\xa2\x78\x0d\xf4\x74\x6e\x32\xd0\x37\xf4\xe1\x90\x98\xcb\x09\x43\x58\x49\xa6\x24\xcd\xd7\x25\x54\xeb\x41\x24\x4e\xd9\xec\x60\xc6\x37\xbb\x33\x54\x35\x94\xd9\x3b\xf9\x73\x58\xea\x06\x16\xb9\xe8\x91\x2f\xc7\x87\x40\x49\xec\x58\x28\xa1\xee\x0d\x8f\x90\x2c\x94\x8d\x29\x23\x18\x1e\xb9\x7b\xd2\x6c\x5d\x7a\xfb\x94\xa1\x67\x90\x69\x32\xba\x6d\x69\xc7\x3e\xe8\xd6\x68\xb1\x2c\x78\x8a\x72\x4f\x7c\xf8\x6c\x71\xf1\x78\xf6\x68\x14\xdb\xee\x79\x36\xbe\x41\x3e\x5a\x71\x31\x79\x9c\x62\x09\x47\x56\x13\x32\xc5\xec\x06\xa9\x04\xcc\x39\x5f\x6f\xb7\xf7\x9c\xf3\x5c\xf5\xac\x75\x5f\x2a\x1e\xde\xf1\xdb\x5c\x45\xe0\xac\x8d\x56\xfc\xce\x88\xf0\xb0\x23\x01\xd4\x99\x69\x22\x40\x77\x70\x03\x2b\xad\x62\x0f\xd9\x91\x4a\xb1\xf3\xcd\x87\xcb\x17\x7f\xe1\x6b\x48\x9c\x0f\x97\x57\x3f\x7c\x78\xcb\x67\xb5\xd5\x25\x8c\xf4\x0d\x3f\x96\xaf\xb1\xc7\x06\x1e\x0c\x09\x1b\x2a\xca\xe2\x40\x23\xa1\x66\x9b\x43\x7b\x18\x59\x91\x9f\x05\xf7\xe2\x34\xcf\x76\x9a\xc5\xa7\x86\xa9\x84\x82\x74\x2c\x14\xf9\x95\xa2\x75\x8f\x11\x65\x7c\xe5\x0d\xbf\x44\xfc\xd0\x27\x88\x1f\xa3\x77\xef\x8d\xbe\x54\x49\xf7\x89\x4a\xba\x8c\x76\x77\x53\x09\x34\xbf\x50\xc9\x53\xca\xfb\x46\xc2\xa4\x6c\xca\xcc\xdd\x5f\x2e\x6d\x1a\x1c\xa5\x40\xbd\x61\x69\xf8\x59\x15\xe3\xd8\x76\x52\xa4\x1b\x6b\x4e\xc9\xfc\x4b\xba\x56\xd6\xf7\x45\x7a\xf1\x09\x45\x70\x6d\xbe\xa2\x3b\xd8\x1f\xb0\xfe\xa0\x60\x68\x07\x47\xf5\xca\x72\xb5\x3a\x42\x5d\x75\xdd\xf1\x84\x28\x4e\xdd\x97\x80\xcf\xb3\x2a\xe5\x90\x23\x0d\x5f\x5f\x3f\x37\xf0\x18\xbe\x6d\xa3\x98\xfb\x15\xd5\x26\xe5\x5e\xb0\x78\xb5\xed\x04\xc5\xd8\xb6\x23\xdb\x96\x4d\xc5\xb9\x5d\x0e\x75\x19\xa1\x6e\x01\x8e\x06\x5f\x65\x62\x5e\x05\x53\x85\x66\x52\x92\x9b\x40\x67\xc7\xcc\x30\xc7\x02\xe1\x82\x60\xc0\xfb\x06\x99\x63\x81\xb2\x89\x3b\xc5\x15\x92\x42\xbe\xee\x1b\x68\x9a\x6c\x90\x29\x68\x50\xcb\xab\xd3\xf6\xec\xa3\x6b\x05\x20\x9b\xd0\xc6\x52\xfa\x83\x2e\xda\x3b\x5e\x14\xb2\x49\xf7\x78\x79\xfd\x75\xdf\x48\x34\x29\x0d\xf7\x06\x4f\xe9\x94\x55\xf6\x84\xd1\xc3\xb2\x7e\xb5\x14\x63\x7b\x20\x8e\x40\x6e\x6e\x19\xd6\x40\xfc\x58\x1f\x73\x1d\xb0\x04\x09\x3c\x2e\x7c\x33\x5b\x98\x15\xfa\x5d\x55\x53\x95\xc1\x11\x65\x2c\x81\x86\x35\x45\xb7\xa0\xf0\x6d\x00\xc1\x81\xbd\xca\x93\xda\x5a\xa5\x73\x62\x45\x22\xab\xb2\xda\x5b\x6e\x30\x89\xd4\xcd\x2e\xae\x6a\x89\x0d\x3d\x36\x54\x1d\x3b\x6a\xa5\x5f\x9f\xad\x9a\x4b\xcc\xba\x52\xa2\x99\x11\xf5\xc5\x4c\x48\x6d\xe8\x07\x02\xa3\xfa\x81\x55\xf2\xcd\x45\x18\xc7\xc9\x93\x03\x54\x36\x61\xb6\x5d\x88\x6b\xe5\x8b\xfc\xac\xee\xac\x77\xb0\x29\x0e\xd7\x17\x81\xec\x13\x82\xff\xdc\xc6\x6a\x78\x54\x20\x93\x03\x99\x9e\x57\xd5\xdd\xfd\x0a\xee\xbc\xbc\xa9\x56\xba\x92\x25\x05\x95\x71\x31\x09\x14\x05\x95\x31\x4b\x53\xe9\x16\x57\x37\xc4\xf8\x40\xad\xaf\x00\x21\xc3\xe3\x1a\xdc\x47\xad\xaf\x34\x43\x52\x91\x03\x04\xe3\x0c\x25\x28\x52\x78\x3f\x52\x27\x3d\x43\x51\x2e\x09\xf0\xf3\x5b\x65\xe1\xe8\xec\xc6\x7c\xad\xe8\x78\xac\xa0\x5d\x61\xe6\x06\xfe\xae\x4a\x05\x0f\x0f\xb4\x9f\x9b\xaf\x4e\xbc\xf2\xea\x44\xcf\x27\x55\x2c\xfe\x66\x77\xa2\x2d\xb2\x62\x68\x38\x1a\x0d\x0a\x9f\xfa\x36\xb2\xd9\x72\x0b\x32\xf0\xf1\xa6\x72\x73\xc1\x13\x14\xc3\x46\x12\x2b\x2c\x42\x04\x7c\xbc\xc3\x10\xc8\x7c\x1d\xab\x55\xf1\x2e\x52\x41\x98\xf9\x75\x54\xcd\xe8\x4b\xab\xc7\xc8\xc1\x7e\xdd\xed\xca\x70\x70\xe4\xf2\x7b\xe0\x6a\x9a\x73\x68\x68\xce\x21\x35\x24\xa7\x9c\x8c\xb5\x12\x5e\x76\x8d\x4a\xcc\xfe\x54\xcc\x79\x1b\x4d\xa6\xce\x27\xf1\x98\x2a\x8f\xb7\x9f\x33\x2b\x88\x4c\x02\xc2\x18\x96\x4d\x9c\xb5\x9c\xab\x63\x9b\x64\x51\xde\x96\xa7\x68\x01\x19\xac\xb4\x3c\xe6\x06\x1e\xe1\x1a\x1e\x0e\xfc\x8f\xcc\x6d\x5b\x48\xde\xe1\x63\x4e\xcb\x7d\x9c\x88\xe9\x49\xdd\xf8\x41\xab\x3b\x31\xf5\x68\x94\x95\x0e\x3c\x6b\x54\x75\xbf\x73\x05\x35\xf1\x94\x4b\x8d\xbd\x7c\x70\xc9\x6b\xcb\x07\x9f\x79\xa9\x57\x75\x07\xef\x24\xff\xf2\xb1\xe6\x28\xe0\x8a\x7f\x9c\xcc\xa6\xdb\xed\xc7\x89\xf5\x1f\xff\x63\x31\xa5\xd3\xed\xf6\xce\xb6\x3f\x4e\xee\xa6\xf0\x86\x5f\x6d\xb7\x0f\xe8\x0e\xc3\x7b\x7e\x37\xfe\x3c\x7e\x40\x85\xd2\x15\x66\x6f\x72\xb5\xb6\x17\xbc\x00\x7d\x99\x6d\x7f\xcc\x2f\xb4\xb7\xdb\x2b\x49\x86\xbf\xb0\x6d\x74\xcd\xd7\xe8\x45\x79\x1d\x25\x30\x96\x74\x83\xb1\x3a\xae\x10\x0f\xd7\x8a\x7e\xb6\x6d\x14\xa2\x6b\xb8\x54\xba\x5c\xc9\x76\xdb\x40\x87\x5c\xab\x7e\xc7\xe8\x1a\x66\xb0\xc4\x18\x3e\xdb\xf6\x95\x6d\xe7\xc3\x6d\x73\x7e\xe5\x44\xfe\x9d\x44\x04\xef\x78\xdb\x85\x37\x0d\x7b\xe0\xaa\x72\xdb\xb5\x53\xf1\x0d\xda\xb7\xdb\xad\x5c\xcd\xf6\x3b\x39\x7c\xdd\xc0\x47\x98\xc1\x1b\x0c\x4a\xc5\xfd\x0d\xf8\x93\xcb\x29\x5f\xc2\x9d\x24\xec\x6f\xf8\x46\x37\xc7\x3e\x8f\xdf\xb0\x07\x94\x37\x8e\x41\xae\x35\xbb\xd7\x89\x6a\xdd\x31\x98\x29\x61\xef\x77\x70\xab\xe4\xea\x8f\xda\x9c\x46\xfd\x7c\xdc\x6e\x03\xf4\x11\x1e\xe1\x46\xb2\x1c\xda\x80\x26\x42\x91\xf3\x5e\x5f\x1e\xcf\xb7\xdb\x77\x18\x32\xb8\x29\x24\x5e\x37\x5a\x98\xde\x65\xc4\xed\x1e\xdc\x17\xe7\x07\x54\xdf\x18\xeb\x63\x3a\xa4\x6c\x48\x35\xc6\x83\xe1\x80\x0d\x25\xb5\x3b\x3c\x6a\xde\x7f\x70\xc4\x22\xde\x26\x4a\xae\xaa\xf5\x51\x27\x83\xe9\x24\x99\x22\x7c\x12\x18\xc0\x58\x9d\xdd\x88\xb7\xdd\x9d\xf1\x1f\xbd\x48\xe2\x3b\x14\xd4\x80\x95\x06\xa1\x74\x87\x73\x28\x1b\xe3\xcd\xee\x29\x43\xe8\xcc\xb6\xdb\x51\x5d\x7b\x28\xa8\x76\xc7\x97\xdd\x81\x94\xfb\xba\x4b\xa9\xda\x41\x87\xcb\xad\x25\x46\x81\xb6\x5c\x95\x79\x1b\x76\x44\xba\x03\x81\xfc\x6a\xc7\x72\x34\x51\x97\x03\x0f\xbf\xd2\xe6\xb4\x68\xdb\x58\x85\x83\x96\x5a\xb5\x45\x6e\x1e\x3e\x7c\xc2\x5b\xc0\x26\xcf\xf3\x04\x57\xd7\x26\x26\xcf\x11\x02\x43\x11\x16\xe2\xf3\xea\x8e\x54\x60\x5d\x3b\xd9\x6e\x13\x44\x5c\x7c\x41\xa9\x4b\xfb\x4e\xcf\xeb\x0f\x46\xbd\xa1\xeb\x0d\xc8\xd0\x7c\x39\x6f\xfa\x72\x4a\xc5\x29\x19\xb4\x79\x82\xf4\x13\x6e\xd2\xae\x71\x39\x47\x82\x77\x24\x41\xc8\xc4\xc5\x29\x11\xa7\x9e\x6d\x8b\x73\xf9\x3b\x16\x1d\xf1\x4c\x3c\xa7\x2c\xef\x15\x12\xf8\x94\xec\x58\x62\xc6\x70\xf4\x26\x6b\x44\x0a\x22\x69\x15\x3f\x40\xc0\x23\x44\xe1\xb4\xaf\xb0\xa4\x7a\xa4\x5d\x89\x3c\xe4\x23\xa1\x03\xfc\x0c\xd1\xd3\x58\x5b\xae\x52\x38\x25\x75\x43\x7b\x4d\x6a\x25\xf1\xba\xd1\xae\x04\x22\x08\x79\x71\xdb\x2c\x24\xe6\x49\x2a\x82\xe6\xf0\x3c\x1d\xaf\x9f\xa1\xf0\x79\xfa\x3c\xee\x90\xe7\xc1\x29\x79\x1e\xe0\x67\xe9\xb3\x98\xa1\x48\x52\x31\x88\x74\x62\x99\x12\xe2\x53\x94\x9d\x86\x18\x5f\xf8\xdb\x6d\xd4\xe6\x91\x2c\x45\x9e\xbb\x98\xad\x9f\x45\x72\x59\x47\x84\x8d\x24\xc7\x3e\x3a\x20\xb2\xf6\x7a\x1a\xc6\xb7\x64\xd5\x44\x6b\xea\x49\x56\x13\x3c\x34\x13\x3c\x1c\x8b\xd3\xca\x04\x87\xf1\x2d\x22\x1d\x91\xf3\x04\xa3\x27\x7c\xa7\xa8\xfc\x69\x70\x1b\x35\xb5\x54\x2e\xe9\x76\x2b\xda\x5c\xc8\x85\x3d\x77\x95\xdd\x5a\x5e\xf5\x51\x33\x2f\xd2\xeb\x4b\xd2\x50\x64\xbe\x55\x17\xf5\x79\x46\xd2\xa7\xad\x23\x7c\xee\x42\xce\x8d\xd4\xc2\x88\x54\xfa\x53\x71\xde\x02\x21\x6f\xab\x8b\x90\x26\x0f\x1f\x29\x2a\xb0\x8a\xb8\x97\x5c\xb9\xae\x2c\x8e\x52\xb4\xd9\x29\xf5\x07\x58\xd7\x30\x78\x8c\x04\x24\x60\x8e\xe8\x26\x60\xd6\x3b\xab\xd3\xea\x74\x7c\x78\x50\x4e\x99\xf0\x0e\x66\x55\x47\x60\x7f\xb9\xfc\x99\x25\xf0\xf6\xf2\xf2\x5b\xd6\x26\x60\xac\x30\xd8\x21\xd8\x8a\x4a\x9d\x47\x2b\x7d\xbc\xbb\x89\xc3\xaa\x97\x0f\xc1\xd0\xbe\x0d\x4d\x4b\x8c\xad\x8f\x16\xb3\xde\x5b\xb8\xa3\xfd\x55\x07\x4a\x0b\x4d\x57\x97\x56\xaa\x7b\x65\x69\x4f\x0c\xf9\xfb\xa5\x75\xa2\xbc\xd0\x17\xaa\xba\xc9\xd4\x09\x94\xb2\xf8\x4f\xc2\xff\xd4\xd0\xb7\x23\x15\xb7\xdd\x5a\xbd\x6d\x72\x58\xed\xc3\x0e\xe2\xe8\x55\x22\xc4\xaf\xa2\x49\x1e\x1e\xda\xf6\x4c\xe9\x45\xd9\x76\xaa\x88\x7c\xd3\x94\x6d\xcb\x9a\x40\x18\x7f\x5f\x7d\x46\x7a\xb9\x04\xbc\xa6\x49\x69\xe4\x30\xa3\xa3\x02\x0e\xaf\x30\x44\xee\x29\x01\x07\x04\x3c\x71\xde\xac\x33\x65\x8a\xff\xee\x26\x15\xc9\xbd\x90\xe0\xcd\xf9\x49\xdc\xfc\x25\xc8\xf6\xbf\xa8\xa8\x40\xab\x24\x9e\x89\x34\x05\x9f\x27\xb9\x37\x43\x48\xb9\x65\x92\x2d\xae\x59\x1b\x14\x3f\x25\x6a\xd7\xa6\x2d\x07\x66\x66\x10\xa9\x0b\xde\x54\xf2\x9f\x3c\x76\xe6\xf1\x9d\x1f\xe8\x20\x60\xe2\x73\x90\x21\x7c\x26\xce\x24\x82\x14\xce\x22\x02\xc1\x85\x42\x55\x0a\x91\x45\xa8\x72\xfd\xa8\x51\xa4\x18\x87\x08\xb3\x42\xed\x3d\xd8\xed\x8a\x67\x25\x76\x12\x51\x26\x12\xa4\xb5\x0f\x53\x5c\x33\x79\x8b\x55\xc5\x57\xc1\xec\x13\x5a\xe3\x5d\x61\x90\xdb\x0e\xe4\xcc\x44\xfe\x7d\x70\x2b\xf1\xba\xac\xa4\x78\x71\xd2\xcc\x8f\xe6\x7e\x18\x47\x42\xd2\x36\xbe\x6d\xfb\x4e\x22\xd2\x38\xbc\x17\xb9\x01\x4f\x91\x60\x38\x37\x7c\x52\x6b\x74\xe6\x64\x4b\x11\xc9\x06\xb5\x78\xb4\xf6\x31\xca\x25\x19\x79\x7f\x8c\x42\x74\xdb\x85\x25\xcf\x05\x68\xc6\x2b\xda\x95\xf8\x9c\xbd\x8d\xe7\x02\x59\x16\x3e\x91\xd4\x62\x80\xd6\xd8\x89\xf5\x12\xa2\x25\x6c\x66\x4b\x3f\xf1\x67\x99\x48\xbe\xf5\x33\x5f\x05\xd0\xab\x5b\xfc\x2d\x9d\xb9\x9f\xf9\x7c\xce\xdb\xf3\x43\xe2\xb9\x10\x28\x6d\x16\x11\x4b\x40\x71\x40\x79\xb0\x12\x65\xb7\xa0\xe9\x87\x08\x83\xd8\x6e\x91\xe0\x11\x84\x92\x89\xc8\x78\x64\x6c\x8b\x7b\x8c\x74\x7b\x86\x17\xcd\x05\x7d\xa3\xaf\x36\xca\x2c\x63\x9f\x55\xb1\xce\x89\x52\x70\x5e\xe9\xcd\xc8\xb5\x2b\xb0\x3d\x4d\xf1\x60\x51\x32\xcc\x59\xd5\x65\xc5\xa1\x96\xcd\x37\xfe\xbc\x65\x36\x76\xab\x22\xdc\x93\xcc\x39\x17\x10\xf1\x64\x57\x06\x34\x52\x0b\xaa\x8d\xf2\x4d\x8a\x04\x9e\xca\xb3\x5d\x49\x95\x39\x8b\x26\x71\x8b\xec\x66\x64\x24\x1d\xb9\x92\xdd\xe8\xeb\x6e\x7e\xfa\x39\xcf\xeb\xe6\xa6\xf3\xae\xb9\xd6\x26\xae\xb9\x7c\x50\xe6\xd7\xa9\x31\xbf\x0e\x73\xe4\xe0\xa7\x12\x4d\x55\x89\x99\x70\xbb\x3d\xc4\x05\xfa\x3a\x6c\xb3\x83\x4c\x5d\x8e\xf2\x8f\x0a\x00\x23\xd9\xa8\xe5\xdf\xcc\xe6\x62\x71\xbb\x0c\x7e\xf9\x14\xde\x45\xf1\xea\x6f\x49\x9a\x95\xb7\x65\x92\x30\x1c\x40\x54\x0a\xb3\x72\xed\xdd\xba\x3a\x6d\x36\x11\x53\x65\x28\x00\x83\x36\x0f\xd1\x66\x07\x02\x4f\x92\xe9\x76\x6b\xfa\xa9\x78\x4f\x95\x9e\x61\x6c\x2c\x5f\x2d\xdc\xe6\x51\x4d\xfd\xae\xe6\x2a\xc2\xd7\x0a\x36\x07\x9e\x21\xd6\x9c\xc0\x4c\xe9\xdd\xcc\x79\xec\x2c\xce\xc2\x8b\xf5\x59\xa1\x99\xb3\x84\x05\x4f\x4b\x63\x56\xad\x7d\x03\x2b\x3e\x1b\x47\x68\x81\x73\x9b\xd7\x19\x5a\x60\xcc\x64\x0a\xdc\xf1\xfc\x26\x0a\xee\xb9\x7b\x76\x77\x71\x7f\x86\x97\x7c\x35\xb9\xef\x74\xa6\x8a\x05\x9a\xeb\x93\xba\x80\xa5\xb2\x8d\x56\x97\xdd\x93\xe5\xb4\xa2\xc7\xc3\xc2\xe3\x9a\x3c\x85\x21\xb8\x31\xaa\xd1\x97\x9c\xc6\x1c\x7c\x74\x54\x02\x98\xab\xbf\x8d\x86\x7a\x3b\xf4\x87\x66\x37\xd0\x2e\x46\xd6\xeb\x4b\x1d\xb0\xd3\x92\x3b\xa3\xb2\xca\x35\x0b\xe6\xfc\x2c\xa9\xed\x35\x90\xec\xcb\x22\xf1\xef\x84\xa2\x3b\x02\x33\x64\x6d\xdc\xe8\xa4\xd9\x63\x28\x9c\x79\x90\xae\x42\xff\x91\x5b\x51\x1c\x09\x0b\x04\x1a\x10\xec\xf8\xab\x95\x88\xe6\x2f\x97\x41\x38\xd7\x51\xeb\xd2\x64\xc6\xad\x5f\xfc\x7b\x5f\xfb\xe5\x65\x16\xa0\x8c\xab\xdb\xf6\x4c\x44\xd9\x4f\xda\x03\x5c\x0e\xc0\xb0\x13\xaf\x44\x84\x30\x64\xce\x43\x12\x64\x02\x59\xe7\xba\xd8\x45\x01\xe2\x5e\x99\x9d\x7c\xfe\xd7\xe7\xe6\x93\x25\xb3\xcf\xc2\x38\x15\x48\x6e\xf8\xcc\x79\x75\x16\x9d\x9e\x9e\x61\xa3\xa1\x5c\x09\x43\x34\x09\x26\xd1\xb4\xd0\xcb\x48\x51\xcd\x64\xba\x16\xd3\xb3\xc9\xc3\x4b\x50\x57\xbc\xe6\x62\x8c\xfc\x9a\x3c\x48\xc8\xb9\x97\x87\xda\x87\xea\x07\x99\x1d\x82\x49\x3c\xe5\x02\xb3\x80\xa7\xa8\x66\x04\x1f\xb0\x08\x05\x46\xf2\x4c\x68\x97\x11\xda\xcd\x6f\xa8\xd4\x9d\x45\x7f\xc8\xfa\x43\x18\x10\x36\x20\x30\x1a\xb2\x91\x82\x96\x5f\x52\xc8\xa3\x4f\x29\xf5\x1a\xb5\x44\xed\x15\xce\x34\xa5\x36\xdb\x80\xb2\x01\x95\xd5\x1f\x95\xb6\xe6\x5a\xca\xdd\x5c\x72\xe9\xf6\xeb\xfe\xeb\xfa\x5e\xb3\x2b\x34\xc9\xb9\xd7\xab\x54\xe6\x2b\x45\x64\x0d\xe5\x34\x27\x93\xcb\xe7\xe7\xa7\x2b\xe4\xee\x59\x7a\x11\x9e\x61\xad\xec\x1c\x73\x7f\x12\xca\x33\x96\x4d\xe2\x69\x5d\xdb\x31\x3f\x42\xd5\xb1\x14\x94\x50\x83\x28\xb7\xf0\xf4\xe6\x16\x06\xc5\xbd\xdc\x43\xc5\x30\x07\x9e\xc4\x98\x90\x98\x9b\xdb\x81\x92\xa2\x7d\xc1\xe5\xb4\xf1\x07\x27\x27\x61\x7d\x48\x35\x0a\xad\x02\x28\x01\x95\x36\x73\x0c\xab\x6e\xdf\xd6\xda\x71\x60\x69\xe7\x2d\xa9\x12\x95\x56\x38\xff\x42\xed\xc8\x59\x94\x4e\x06\x41\x4c\xb2\xa9\xde\x37\x39\xec\xc8\x25\x8d\xb9\x0f\x16\xb3\xd4\x06\x96\x68\x42\xd1\x2c\x32\x71\x8f\xca\xa7\x4b\x6f\x35\x2e\x91\xdc\x45\x50\xb5\xf7\x86\x98\x1f\x38\xdd\xab\xfb\x73\xb4\xed\xc6\x69\x7a\xeb\xdf\x89\x74\x7c\xfc\x93\x89\x3d\x8c\xd9\x64\x7a\xf2\x05\xc4\x19\xdb\xb6\x35\x31\xae\xce\x34\x04\x99\x5a\x3c\x57\xf1\x16\x75\xfc\x50\x99\x62\x85\x6b\xf7\x5c\x59\xb6\xe2\x3c\xde\xdc\x6e\x87\x84\x84\xf1\x49\x21\x35\x77\x09\x23\x2e\xc9\x67\x53\xcd\x59\x83\xd7\xb3\x72\x37\xf5\x0a\xd8\x9b\xe3\x0d\x4b\xef\x65\x0b\xac\x02\x1c\x58\x58\xed\x92\xe3\xf3\xd0\xc8\x42\xca\xd6\x02\xd3\xab\x1e\x23\x6e\x4f\xc3\x05\xd5\xa7\x86\x3b\xd2\xa3\x2d\x68\x3c\x9e\x1a\xef\xca\xee\x71\x36\x61\xb4\xe7\xc3\xe5\x00\x91\xc4\x07\xc2\xc7\x43\x58\x7a\x2b\xb2\x8a\xc2\x6e\xe3\xc0\x84\xf6\xf3\x92\xa8\xf1\x8d\xc5\x24\x98\x36\xfa\x6d\xac\xde\xb1\x6a\x61\x71\xe9\x5e\xb6\xfa\x6d\x5c\x7b\x2b\xfb\xc6\x6a\x45\x74\xf7\xc6\xb1\x72\xcb\x50\x05\xbc\x39\xf2\x55\x47\x45\xcd\xd0\x51\x11\x5f\x31\x43\x5d\x83\x72\xbb\x23\x8c\xda\xa4\x19\xed\x3e\xe9\xc3\xc8\xd7\x3e\xc2\x24\x9c\x71\x61\xcd\x27\xda\x85\x80\xdf\x0a\xa2\x56\x8a\xfd\xb6\xbe\x24\x49\xc1\x97\x4c\x60\xa1\x14\xac\x5c\xce\xe4\x17\xb8\x0a\x4a\xca\x2c\x3c\x53\x30\x12\xdb\x36\xfa\xb7\x40\x39\x09\xdb\x6e\x8b\x32\x05\xd0\x5c\xd7\x86\x6c\x60\x45\x77\xc4\xba\xa3\xca\xc0\x8f\xde\x80\xaa\x7d\x1e\xe9\x7d\x7e\xb8\xe4\x92\x6e\x6b\x5c\x68\xb9\xc2\xd1\x91\x1d\xdc\xa0\x5a\x23\x77\xf0\x66\xd7\x78\xa9\x9a\x6f\xde\xa3\xb7\x8e\x9e\x5b\x57\x78\xf6\x9e\x70\x16\xa3\xef\xa7\x50\x64\x5c\xfe\x2b\x1d\x65\x15\x22\x4a\xbf\x4f\xc4\x54\xb9\x7a\x39\xf1\x25\xbd\x9a\xa1\x58\x6e\xd5\xc4\xf9\xd8\x49\x9c\x57\xcf\xea\xaa\x89\xb1\xb1\x1c\xcb\x9d\x70\x80\xaf\x46\xab\xd5\x75\x2b\xc6\x47\xaa\xef\x47\x31\xec\x21\x61\xdf\x1d\x96\x84\xbd\xb3\xf8\x5a\x9f\x61\x25\x61\x2c\xb7\x97\xc2\xad\x21\x8f\x50\x2a\xb1\x58\xee\x38\x0c\x66\xdc\x85\x39\x9f\x4c\xb5\x9b\x30\xdf\xb8\x08\x53\x54\xac\xb9\x94\x4b\xd5\x16\x9a\xeb\x2d\x24\xc6\x13\x1f\xd2\x89\x3f\x9d\xb2\xb4\x1a\xcf\x6a\xbe\xab\x62\xe1\x02\x19\x99\x8d\xa5\x90\x8f\x1a\xf4\x13\x9a\xf6\x64\x4f\xd3\x3e\x37\xf3\xf6\x86\xd8\xf9\x20\x16\xa1\x98\x55\x55\x31\x62\xdb\x8e\x9d\xf8\x21\xfa\xcb\xc1\x66\x33\x6a\xf8\xce\x02\x05\xea\x42\x51\xeb\xe2\x17\x3e\x07\xb2\xc2\x89\x8d\x0a\x3f\x98\xd5\xc0\xbc\x21\xc8\x35\x15\x91\x33\xa6\xe4\x30\xe4\x41\x55\xa5\x65\xe5\x27\xa9\x78\x15\xc6\x7e\x66\x80\x01\xc5\x2a\x50\x41\xa5\xb3\xe4\x79\x82\xe4\x97\x2e\xee\x58\xa7\xae\xe4\x61\x4e\xc9\x73\xb7\xc1\x95\x76\x64\xf4\x2e\x25\x28\xe8\x62\xe5\x1d\xbd\xf4\x97\x20\x89\xc5\xc0\xb6\xad\x53\x09\x14\xcb\x20\xcf\xe3\x53\x97\x05\x5a\x02\x4c\xba\x94\x91\x2e\x05\xd2\xed\x32\xd2\xed\x56\x46\xf0\xa4\x52\x8e\x1a\xc1\xeb\x68\xaf\xff\x66\xeb\x75\xe5\x0c\x3e\xff\x4f\x93\xd3\xce\x74\xec\x4e\x3e\xff\xf3\xf4\x79\x65\x60\xc3\x36\xe7\x09\x0a\x3a\x96\x3b\xb4\xf0\x76\x4b\x69\xf1\xfe\x99\x78\x16\x1e\x37\x50\xd0\x7b\x63\x2c\xef\xb3\x03\xc8\x2e\x2e\x2e\xdc\xed\x16\xc5\x4e\x26\xd2\x0c\x05\x78\x4c\xe4\x3e\xc2\xf8\x4b\xa3\x3b\x90\x9d\x7e\xc9\xa5\xf5\x46\xb0\x36\x81\x7b\xa6\x70\xfe\x1e\x39\xb0\xd1\x1a\xb3\xca\xff\xac\x81\x33\x87\xb1\x20\xf6\x99\xae\x5c\x26\x3b\x3a\x6a\xba\x57\x46\x24\x88\x94\x87\xac\x9a\xce\x90\xd2\xab\xc8\x99\xc3\x13\x0d\x90\x02\x49\xf3\xe6\xf3\x83\x5c\x88\x0b\x59\x92\x3c\xc9\x71\x2e\xe9\x28\x6e\xcb\x73\xf9\x5f\x8f\x8d\x54\x24\x80\xfd\x08\x14\x87\x1c\xc2\x13\xd6\x3f\xb9\xa7\x68\x72\x3c\x9e\x04\x21\x4f\xa8\x08\x54\xe2\xb2\xeb\xb8\xfe\x0a\xbb\x43\x36\x09\xa6\x10\xed\x91\xee\xfa\xea\x4d\x35\x76\x94\xb9\xcd\x65\x96\x85\x06\xbf\x91\x7d\x6b\xe1\x78\x9a\xcc\x2c\x4d\xb4\x7b\x03\x49\xb3\x23\xcb\xea\xf8\x38\x97\x3f\xe4\x64\xab\x85\x4f\x74\x34\x91\x20\x4a\x57\x62\x96\x7d\x8c\xd7\xc9\x4c\x34\xc1\x50\x3f\x27\x23\x77\x80\x8e\x3a\xab\xcb\xed\x63\x9a\x22\x02\xfa\x27\x6b\xdb\x46\x01\xf2\xc1\x8a\x14\x03\xbd\xdd\x46\xc5\x8b\xa4\xe7\x15\xe1\xde\xe6\xdc\xb7\x6d\x94\x67\x8d\x4d\xae\x58\x7d\x1c\x5b\x56\x47\xfe\xb2\x54\x8b\x3e\xcc\xa1\xc9\x30\x96\xa5\x95\xb1\xbf\x32\xf9\xf4\x59\xa8\x1e\xf2\xb7\x5c\x51\x81\x21\xc3\xfc\xca\x74\xc8\x53\x31\xde\xe1\xd2\xbe\xa5\xe2\xe8\xa5\x98\xa4\x06\xad\x88\x26\xff\x51\xcb\x20\xd5\x6e\x1d\x26\xf1\x74\xbb\xf5\x6b\xd7\xc0\xb8\x22\xa0\x36\xb8\x6f\xc0\xbc\x81\x31\x55\x31\x3c\x88\x51\xda\x26\x87\xf1\x3d\x1a\xa5\x5d\x3d\x65\x88\xb5\xaf\x7d\xae\x0d\x21\x9e\x42\xec\x41\x6e\x2d\xd1\x6c\x5f\x9e\x2b\xf1\x15\x9c\x03\x18\xc7\x4e\xfb\xd1\xdc\xe3\x4a\x40\xfb\x9a\x93\x40\xd9\xa1\x96\x6c\x21\xb7\xc6\xd3\x73\x26\xe6\xad\x34\x96\x29\x41\x74\xdb\x8a\xb3\xa5\x48\x5a\xd9\xd2\x8f\x5a\x7e\x64\x48\xcf\x56\x9c\x28\x29\x42\x69\x46\x18\x2b\x27\xdf\x46\x75\xa7\xcd\xab\x3e\x8c\x1b\x5b\xfd\x0f\xaa\x55\xe5\xc7\x4b\xd9\x00\x06\xd1\x2c\xbe\x5b\xf9\x59\x70\x13\x8a\x56\x22\x66\x22\xb8\x17\x49\xc5\x4a\xb1\xee\x9b\xbe\xd7\x67\xbd\xbe\x5a\x80\xaf\x70\xc7\x02\x91\x3e\x75\x8a\x47\x6e\x5c\x04\xf0\xf9\xbe\xc9\x40\x6e\xd8\x02\x29\x8f\x21\xe4\x48\xd9\x6b\x40\xc4\x9f\xdf\x3c\x7b\x7e\x0b\x71\x2e\xcd\xb6\x7c\xc9\x4a\x18\xbd\x06\xfd\xe6\xb6\x95\x31\x8a\x9f\x66\xaf\xa3\xb9\xf8\xbc\xdd\x2a\x21\x6d\x99\x80\x0b\x8f\xad\x6d\xce\x9f\x23\x3c\x1e\x3f\x57\x9d\x40\x96\x85\x27\x64\x7a\x86\xc2\xed\x76\x8d\x95\xdf\xc5\xc3\xeb\x49\x39\x98\x14\x66\xca\xda\xb6\x20\x87\xd5\x65\x83\x9c\x65\x3d\x38\x64\xfd\x27\xab\x33\x73\x52\x05\x21\x3a\xd6\x9f\xd0\xb8\xfd\xd7\xbf\xa6\xd8\x02\xb3\x4d\x66\xf2\x10\x2a\x73\x00\x3e\xab\x76\x2b\xca\x5d\xe9\xcd\x40\xa8\x0c\x91\x6d\xa3\x4a\x0e\x3e\x33\x96\x04\xe3\xc8\x09\x64\x42\x27\x92\x20\xd8\xb8\x65\xce\x30\xac\xb5\xd6\x67\xe1\x07\xca\xb6\xcd\xd1\x92\xf9\x20\x39\x70\x2c\x94\x72\x72\x96\x9e\xef\xcb\x3b\x4f\xe9\x59\xda\xe9\xe0\x42\xc4\x54\x82\xfd\x74\x6a\xdb\x28\x9a\xa4\xd3\xdc\xed\x96\x24\x57\xa3\x9a\xab\x6a\xc9\x19\x7a\x3d\xe6\x69\x24\x72\x40\xb0\x1d\x90\xfb\x41\xba\x2f\x29\x2b\xf8\x3a\xce\xb3\xb1\xd2\x25\xdc\x6e\xc9\x73\xc1\x39\x79\x9e\x31\xd1\xe6\xc2\xb6\xb3\x36\xcf\x72\xec\x7a\x3c\x44\x4b\xae\x25\xa7\x65\x4d\x07\xd8\x54\x71\x4c\xed\xd2\xe1\x64\x9b\xf3\xec\xd0\xe9\x77\xc7\x62\xad\x99\xb2\x99\x4d\x45\xd6\xf2\xd3\x56\xb1\x41\xdb\x56\x4d\xfa\xb7\x49\x45\x66\xd4\x2e\x9d\x74\x8f\x6d\x45\xd6\xf5\xb5\x2a\x77\x7d\x6d\x05\xd1\x66\x57\x52\x36\xc6\x29\xb6\xa4\x2d\x90\x31\x04\xd8\x33\x20\x14\x68\xa4\xc2\x4e\xed\x33\xcb\x50\xa9\x53\x5f\xc4\x51\x8c\x51\x06\x93\x29\x86\x84\x6b\x1f\x92\x05\xbf\xaa\x74\x41\x2a\x5a\x15\x09\x6f\xbb\x07\xf7\x32\xd5\xd9\x0f\xb4\x80\x48\xb2\xc3\x45\x33\x3c\xd3\xe8\x41\xdd\x22\xa2\xcd\x0e\xda\x24\x37\x60\xc2\x30\x5b\x8a\xd9\x27\x16\x94\xf4\x84\x51\x8f\xd7\x54\xc5\x88\x8d\x14\x53\x78\x18\x3e\xe4\x49\x07\x2d\x23\xe3\x9b\xb4\x9f\xfb\x67\xf9\x7a\x1f\xa5\xca\xbf\xca\x49\x60\xdb\x99\x6d\xb7\xb3\x49\x3c\x95\xe7\x62\xa1\x5c\x21\x6f\xea\x51\x04\x5c\x68\xf6\x4f\xa6\x14\xd4\x76\x35\xf5\x47\x23\x06\x53\x88\x28\x97\x0f\x92\x63\x11\x4c\xaa\x8e\x07\xbd\x51\x55\x51\xb3\xe6\x48\xf2\x18\x11\x14\xe3\x8d\x50\xbe\x52\x05\x8f\xc7\x82\x55\x75\xc6\x02\x15\xf2\x48\x52\x44\x07\x43\xc9\x83\x1f\xd4\xba\xad\x71\x66\xd9\xe1\xe3\x1e\xeb\x95\x81\x82\xd1\x97\x8a\x0c\x81\xf4\x05\xff\x8c\x8a\xd7\x45\xf2\xa7\xa2\x2e\xaa\x4d\x16\xc0\xa0\x71\xd5\xe8\x51\x39\x48\xdf\x30\xdb\x9e\x12\x83\x44\x13\xeb\xfa\x7a\x16\x27\xe2\xf4\x97\xf4\x3a\x5d\xfa\x89\x98\x5f\x5f\x5b\xda\xc0\xb7\xf1\x0b\xdf\xec\xf0\xd9\x11\x3a\xab\xdc\xce\xba\x97\xf2\xa7\x04\xfd\xd9\x38\x63\x1b\x15\x00\xdb\x32\xb1\xc5\x52\x4b\x1e\x1f\xcd\xab\x16\xf1\xc6\x12\xc7\x3c\xc1\x5d\x3c\x17\x4c\x69\x50\x8e\xad\xd5\x3a\x11\x16\xb3\x34\x3c\xb6\x60\x16\xaf\x1e\x93\xe0\x76\x99\x31\xeb\xdf\xff\xcf\x16\x75\xc9\xa8\xf5\xad\x88\x82\xb4\xf5\x7e\x9d\x2e\x3f\xf9\x89\xb8\x6f\xa1\x5f\xc3\x38\x48\xe2\xd9\x27\x27\x59\x63\x4b\x45\x44\x30\xe4\x8d\xda\x4f\xb9\x4e\x18\x39\x0c\xaf\xb2\xcf\x2e\x74\xc9\xd7\xbb\xec\x2d\x44\x14\xe0\x2b\x92\xa0\xc9\xd6\xa0\x84\xf4\xdb\xad\x76\x1c\x80\x62\x9e\x20\x1f\x2b\x95\x60\x79\xea\xe3\xda\x7e\xd2\x4e\x54\x73\x25\x5b\x72\x18\x70\xe5\x98\x5b\x8f\x2f\x78\xdc\x6d\xb7\x95\xf1\x42\x4d\x57\x6d\x6c\x34\xf0\xd5\x1d\x48\x3d\x4a\x3b\x90\x42\x3f\x5f\x39\xab\xdc\xe9\xcd\x57\xc8\x48\xf6\x63\xb4\x54\xe5\xd3\xe6\x1a\xa2\xff\x77\xf8\x50\x2f\x2d\x36\x20\x35\xd4\x0a\x92\xcc\x18\x56\x2e\xd5\x03\x49\x55\xe4\x18\xb4\xd4\x56\x72\xb7\xdb\xf0\x82\xaf\xc7\x62\x6c\x59\x06\x56\x32\x14\xf3\x54\x31\xe0\x2f\xe3\xb9\x78\x91\xa1\x10\xe3\xf3\x7e\x9f\x8e\xbc\xed\x36\xbe\xe8\x7b\x5d\x32\xda\x6e\xc3\x0e\xd1\x16\x4a\xc8\xdf\xcb\xdc\x21\x32\xbb\xd7\xa5\xee\x76\xeb\x5f\xf4\x07\xdd\x5e\x77\x2c\xc6\x69\xce\xd1\x87\x98\xc5\x4c\xbe\x6b\xa1\x74\x08\x61\x87\x62\xe6\x9f\xaa\x12\x1d\x14\x9f\xaa\x96\xce\xcf\x89\x8b\x3b\x5e\xbf\xdf\xf5\xcc\x9d\xfa\x80\x91\xee\x40\x1b\x46\xaa\xb9\x3b\x2a\x5f\x1a\xba\x4f\x4f\x9d\xb6\x6d\x51\xdc\x6a\x76\x18\x44\xc3\x98\x2c\xfc\x07\xe5\xb7\xb8\x35\x8f\x45\x2a\x51\xab\x3f\x9b\x89\x55\xd6\x4a\xc4\xad\xf8\x5c\x89\xe6\x50\x4c\xb2\x01\x2b\xda\x6c\x73\xe8\xb2\xa1\x8e\xd9\x78\x54\x1c\x94\xcb\xef\x3c\x23\x0c\xea\x2b\x77\xaf\xcf\xad\xe7\xb7\xd5\xeb\xcb\x22\x24\x85\xd6\x61\x34\xad\x69\xb1\x4f\xca\xad\x73\xab\x93\xeb\xcb\x5b\x8a\xa0\x96\x14\x61\x87\x5b\x2d\xab\x93\x74\xfe\xcc\xad\x3f\x77\xf2\xfe\xe1\xc2\x08\x3b\x06\xcb\xfe\xdb\x3a\xce\xce\x2c\xdc\xf9\xb3\xf5\x67\x0c\x69\xc7\xba\x50\x71\xea\xcf\x9f\x5b\x9d\x4c\xbe\x1c\xd3\x79\xce\x19\x8e\xcd\xee\x24\xd0\xa2\x42\x5f\x8b\x0a\xdf\x2b\x51\x61\xd4\x60\xc5\xac\x4d\x9d\x65\x3b\xc5\xd5\xb0\x04\x6b\x4e\x16\x7f\x1f\x3f\x88\xe4\xa5\x9f\x0a\x84\xb7\xdb\xcc\xb0\xb2\x32\x63\x4e\x1a\x76\x95\xa0\x31\x67\xda\x82\xca\xf4\xee\x09\x1a\xbb\x4f\x5c\xf2\x14\x02\x6c\x52\x4c\xf3\x51\x6c\x56\x04\x20\xa8\xcf\x73\xc8\x2b\xb7\xec\x05\x1c\x8a\xc7\x56\xcb\x62\x26\x63\x8c\x61\xa6\x25\x59\xc1\x02\xcd\xce\x79\xb8\xdd\x5a\x16\xe7\xeb\x5c\xe2\x91\x9e\x68\x45\x96\xd9\x69\x08\xcb\x3c\xe4\xcd\x1a\x94\x46\xdd\x4c\x04\x21\x9a\x3f\x2f\x3c\xbf\x17\x13\xb5\xcc\x27\x62\x6e\xdb\x68\xc9\x97\xe6\xb8\xb8\x30\xc7\x18\xfc\xf1\xb2\x93\xb2\xb4\xb3\xd4\x47\x83\x30\xd2\x25\x45\xb4\x86\xe2\x88\xec\x07\xb0\x39\xe6\x88\xf2\xcb\xb0\x46\xaf\x66\x09\x52\x94\xf3\x1f\x08\xb8\x65\x41\xac\xb5\x1f\x83\x05\x8a\x25\x2c\x89\x25\x15\xec\x36\xf8\x05\x7a\x19\xaf\xa3\xcc\x10\xaa\x37\xa2\x15\x89\x5b\x65\x65\x68\x19\x39\x7f\x7c\xe1\x9e\xa1\xf8\xe2\xe2\x82\x13\xac\x4d\x86\x33\x8c\x89\x1d\xdb\x36\x0a\xe4\xf3\x49\x4d\xcb\x76\x1f\x18\x1c\x8f\xb2\xe3\x95\xc0\xa0\xe6\x1a\x41\x09\xfe\x7c\x6e\x4d\xac\x4e\xdc\xb1\xa6\x16\xa4\xbc\xc2\x1a\xf9\xf2\x40\x3c\xb3\xe4\xea\x9b\x54\x9d\xf2\x27\xab\xae\x19\xa8\x45\x41\xfa\x74\x2a\x55\x83\xa0\x41\xdd\xb0\xdd\x8e\xe5\x29\xc0\xdb\xad\xf5\xfb\x6f\xff\xeb\xbf\xff\x17\xab\xcd\xcd\x83\x4a\xde\xa9\x4d\xa6\x84\xef\xe9\x38\x43\x33\xe5\x7a\x70\x7a\x22\x39\x2b\x7f\x12\x4d\x79\x58\x3d\x64\x69\x79\x24\x7c\xa5\x75\xb8\x56\xb2\xcc\x66\x9a\x42\xf0\x2a\x7c\x02\x22\x29\x4d\x24\x78\xc1\xb8\xa2\x14\x2c\x0b\x63\xa0\x07\x1f\x42\xfd\xa1\xe6\x8e\x6a\xad\x26\x5e\x8b\x26\x9b\x0f\xe2\x01\xd5\x56\x71\x79\xf3\xd7\xec\xaf\xd1\x5f\xef\xff\xba\xf8\x6b\xd2\xfa\xf7\xff\xfa\xdf\xfe\xf7\xdf\xfe\xdb\x7f\xfd\xdf\x7e\xff\xed\xb7\xdf\x7f\xfb\xcf\xbf\xff\xf6\xff\xff\xfd\xb7\xff\xee\xf7\xdf\xfe\xfb\xdf\x7f\xfb\x2f\xbf\xff\xf6\x3f\xfc\xfe\xdb\xff\xf8\xfb\x6f\xff\xd3\xef\xbf\xfd\xcf\xbf\xff\xf6\xbf\xfc\xfe\xdb\xff\xf5\xfb\x7f\xfe\x3f\xfe\xef\xdf\x7e\xfb\xeb\x9a\xba\x74\xa8\xfe\x8f\xfe\xba\x5e\x88\xc5\xc2\x32\xbc\xd5\x61\x34\xa1\x82\x9f\xaf\x59\x89\x0f\x7a\x46\x51\x88\xe8\xbb\xee\xfe\xc0\xf8\x50\x1d\x62\x35\x89\xb9\xbe\xdf\x9c\xaf\x25\xa7\xf2\xfa\xee\x4e\xcc\x03\x3f\x13\xb0\xe4\x6b\xed\xfe\xad\x4c\x5a\xf0\xb5\xf3\x46\xa4\xa9\x7f\x2b\x5e\x2e\xfd\x28\x12\x21\xac\xf8\xda\xf9\x36\x48\x57\x92\x7b\x81\x3b\xee\xc2\xbd\xdc\x0e\xb7\x87\xd6\xf7\x1d\xc5\x95\x07\x0b\x74\xbf\x17\x79\x4f\xae\x50\xee\x16\x55\x2e\xbf\x11\x6e\xc9\x67\xc8\x90\x84\x7e\x37\xb5\x13\x99\x9b\x14\x2b\x35\x36\xbc\x3b\x99\xdb\xf6\x52\xc5\xc1\x6c\x56\x1c\x9a\x4c\x21\xe2\xe4\xec\xc0\x11\x73\x74\x86\x73\x2f\x3c\x05\x0f\x1d\x75\x3a\xe5\xc5\xc7\xfd\xa4\xd3\xb9\xab\xe9\xc1\xfb\x4d\x72\x26\x31\x16\x65\x88\x42\x81\x21\xc3\x3b\x48\xd0\x1d\x86\xbb\x5d\xd5\xb6\x46\xe0\x4d\x65\x60\x3b\x38\x50\xa8\x9c\xe1\x71\x52\xcb\x3e\x2b\xd5\x14\x63\x74\x0b\x02\x08\xc6\x3b\xb6\xb2\xed\x95\x13\xc5\x0f\x7b\x99\x55\x5a\x35\xdf\x62\x8c\x02\x8e\x22\x25\xf9\x58\x60\x47\xee\x45\x0a\x91\xfa\x25\x4e\x1c\xdd\xe9\x55\xe4\x37\x90\xf0\x18\x05\xce\x2a\x4e\x33\xb3\xb2\x10\xc8\x1a\xd8\xda\xf1\xe7\xf3\xcb\x7b\x11\x65\xdf\x07\x69\x26\x22\x91\x34\x5a\xbc\x56\x0a\xda\x76\x7b\xed\x04\x77\xb2\x89\x8f\x4a\x67\x22\x1d\xa3\x7a\x2f\xd7\xd5\x76\x90\xe8\x58\x16\x48\x58\xb3\x83\xc3\xc6\x90\x65\xba\x68\xc1\x8d\x64\x66\x31\x4b\xb8\x15\x47\x89\xf0\xe7\x8f\x69\xe6\x67\x62\xb6\x94\x20\xd6\x0a\xa2\x56\x88\x2c\xad\xa3\x61\xd5\x95\x03\xd2\x9a\xbe\x52\x25\x17\x76\x0e\x2b\xaa\xae\x73\xea\x24\xe2\x2e\xbe\x17\xba\xa0\x76\x1a\x51\x18\xb2\xef\xea\xae\x2e\x52\xed\xfb\x2e\x5e\x67\xc5\xec\x83\x8b\x6b\x62\x17\x25\x7d\x98\x83\xf6\xaf\xbe\x2c\x2c\x1f\x73\xff\xca\xda\x78\x59\xfb\xfa\x51\x8a\x40\x2a\x02\x82\x3a\xe2\xc7\x25\xf4\x1a\x71\xe9\x08\x52\xfe\x67\x08\x8a\x60\x52\x5f\x20\xe3\x91\x56\x65\xc2\xe7\xee\x38\x42\xa2\xa3\x02\xda\x04\x85\xe4\xd0\x60\x17\xd5\xf6\x51\x81\x7d\x81\x34\x9f\x08\xf1\x54\xa8\x63\x56\xaf\x3f\xdc\x93\x8a\x1f\xad\x80\x47\x86\x6c\x90\x74\x51\xd0\x80\x36\x7f\x4a\xe2\xe8\xb6\xa5\x4f\x6b\x85\xf0\xac\xa1\xc1\x32\x0e\x11\x39\x8c\x05\x56\x31\xf2\x90\xb4\xc6\xd7\x5b\x92\xb6\x82\xf4\xad\xff\xd6\x18\x6a\xb8\x0c\x89\x0b\x77\x1c\xb1\x04\xa3\xc2\x5c\x80\x1c\xc6\xc5\x2a\x24\x5b\xfd\xaf\x64\x5f\x92\x7d\xe2\x39\x57\x04\x24\x4f\x85\x9a\xaa\xac\xfb\x91\xc5\xae\x38\x57\x94\x8b\xac\x66\xfb\xc0\x83\x06\x73\xf7\xd6\xfb\x89\x38\x4e\x5f\x1a\x88\xb1\x67\x4e\x6a\xa3\x51\x75\x7e\x29\x8c\x20\x7d\xc2\xb5\x9c\x8a\x4c\x59\x98\xb3\x92\xc3\x60\x39\x35\x8a\x2e\x58\x20\x25\x8a\xaa\xf0\x42\x83\xaa\xe8\xa2\x24\x7f\x3c\x37\x57\x02\x33\x88\x91\xf4\xba\x06\x33\x1a\x5b\xca\x6e\x1e\x58\x82\xf4\xb4\x27\xe1\x81\x6b\x3c\x09\x93\xbe\xf6\x24\xac\x96\x61\x95\xd3\xd9\x77\xea\xc1\xc3\x70\x9f\x07\x40\xbb\xcd\x95\xcc\x6e\x8c\x7c\xe9\xd1\xdc\x73\x5c\x1b\xd1\xe7\x43\xae\x7d\x73\x69\x1c\x8a\x7c\x36\xa6\xae\xef\x72\x5b\xce\x8f\xa5\x86\xd6\x55\xee\x5b\xe4\x8d\x91\xfa\xc0\xfb\xdc\xb3\xd5\x0b\xe3\x14\xfd\xa5\x56\x51\x81\x4f\x4a\x50\xd4\xc7\xf0\x41\x85\xbf\xa6\x18\x7e\x31\x56\xa3\xdf\x1a\x8f\xc8\x6f\xf3\x88\x19\xaf\x65\x91\x21\x86\xef\xe5\xef\x00\xc3\x2b\x23\xd3\xfb\x95\x2b\xa9\x26\xfc\xc0\x5f\x39\x0b\xf8\x86\xff\xea\x2c\xe0\x1f\x78\xe4\x94\x47\x13\x7e\xe4\x91\x53\xb0\x8d\xf0\x27\x1e\x39\x3f\x04\x51\x36\x54\x82\x4c\xf8\xdb\xbe\x55\x3a\xfc\xc4\x53\x6d\x6d\xfe\xcd\x7a\xb1\x10\x09\x7c\xc7\x53\xe7\x5b\x3f\xf3\x7f\x0c\xc4\x03\xfc\xcc\x5f\x20\x17\xc3\x5f\xf8\x0b\x44\x31\xfc\x23\x7f\x81\xba\x18\xfe\x89\xbf\x40\x3d\x0c\xff\xcc\x5f\xa0\x3e\x86\x7f\xe1\x2f\x90\x87\x41\x08\xfe\x12\xb5\x5d\x0c\x99\x7a\x20\x18\x12\xc1\x3f\x68\xaf\x21\x29\x44\xf2\xf9\x93\x78\x4c\x21\x90\x4f\xc6\xa0\x10\x62\xc1\xff\x56\x0a\xe9\xdf\x2d\xc0\x97\x09\x89\x0a\x00\x05\x69\xf9\xfc\x21\xb8\x5d\x66\x10\xca\x84\x5f\xe2\x20\x82\xb5\x7c\x4a\xe3\x24\x83\x99\x7a\x52\x61\x81\xe6\xf2\xb1\x50\x95\x5b\xea\xb7\x9a\x47\xc2\x85\xe0\xef\x6b\xa6\x81\x2b\x95\x50\x8f\x4e\x73\x27\xf8\x1b\x64\xc9\xa9\x99\x5f\xd7\x14\xd0\xe1\x5e\x7d\x99\x8b\xc5\x5e\xfa\xad\xe0\xbe\xf3\xf2\xdd\xdb\x8f\x57\x1f\xe0\x46\x3e\x5f\xfd\xfc\xfe\xf2\x5b\x78\x94\x8f\x3f\xbe\xbe\xfc\x09\xae\x05\x7f\x81\x48\xdd\xc1\x54\x71\x3e\x3f\x0a\xf4\x09\x09\x10\x93\x7b\x31\x55\xf4\x09\xc6\xf0\x20\x1a\x09\xf6\x16\xe1\x5c\x91\x0c\x7f\x52\x86\xa8\x72\x59\x89\xa7\xd6\x0e\x4d\xc8\x14\x3b\x37\x6a\x05\xf1\xc4\x9d\xca\x4a\x2e\x05\x6f\xb7\xff\x64\xdb\xed\xf6\x9f\x2a\x77\x43\xa9\xc8\x6c\xbb\x5e\xb9\xae\x91\x68\x1f\xe3\x4a\xac\x87\xe1\xb3\x68\x8a\xc0\xc2\x17\x86\xa5\x4a\x24\x4b\x95\xfc\xff\x72\xa9\xff\x3f\xe4\xf8\x20\x5e\x2c\x52\x91\x55\xf0\x41\xb2\x83\x77\x62\x1f\xf9\x5c\x2b\xf3\x9a\x1b\xa1\xa3\x55\xe6\xf0\xd0\x18\xa8\xff\x58\x75\x8a\xe3\xb7\xd4\x42\xe8\x18\x60\x6d\x49\x8b\x7c\xdc\xef\x58\xb0\x40\x6d\x59\xe1\x76\xdb\x46\x77\xa6\x4a\x9c\x57\x65\xbd\xce\x1a\xab\xaa\x9a\x16\x54\x7a\x9b\x07\x3c\xdf\xc1\xd5\x7e\x33\x26\xc7\x9b\xfd\xd5\x82\x37\xfb\x39\x8b\x20\x23\xdc\x85\x88\xe7\x7a\x62\x10\xf0\x8f\x42\xe9\x61\x9d\x45\x17\xc9\x19\x0e\x26\xc9\x94\x67\x93\xa4\xd3\x99\x96\xb8\x13\xde\x8b\x03\x0f\x22\x3f\xa8\x87\x23\x91\x40\xb4\x6f\xf9\xf9\x24\x99\x2a\x63\xaf\x17\xe2\xc8\xbd\x5b\x00\x5a\xf8\xf6\xa0\xed\x02\x0f\xf4\xf4\x67\x7c\x7d\x24\xf6\xc9\xbc\x94\xfa\xce\x60\xc9\xaf\x50\xaa\xc3\xbb\xa8\x6b\x9f\xa5\x6d\xb7\x2f\xd1\xd2\x38\x2a\xf2\xf9\xd2\x68\x2e\x49\xd8\x3e\x99\x42\xc6\xdd\xb3\xb6\xf2\xb8\x52\x73\x2c\x94\x75\x3a\x38\xd2\xc4\x7d\x6c\x02\x20\x9f\xa4\x3c\x52\xa1\xdc\xe6\xb6\xbd\xbe\xa0\xb6\x8d\x66\x3c\x44\x33\xa8\x06\x8d\x04\xaa\x4c\x59\x5c\x48\xf8\x0a\x15\x61\xec\xf5\xbc\x2a\x33\xf2\x04\x9f\x25\x17\x99\xaa\x3e\x98\x64\x53\x3e\x1f\xcf\x50\x3a\xc9\xa6\x90\x61\x26\x7f\x2b\xf3\xfc\xb2\x46\x51\x96\xfe\xc3\x5d\xc8\x0e\x27\x27\x29\x5a\xc8\xf0\x59\x76\x21\xce\xb0\x92\xd9\x97\x7d\x13\x95\x45\x4c\x76\xf0\xc9\x1c\xbc\xfa\x29\x5b\x8a\xd2\x84\xfc\x4f\x3a\x0c\x08\x86\x0f\xa2\xc1\x92\x77\x99\x7b\x45\xf9\x24\xc6\x33\x53\xea\x9d\x30\xc2\x0d\x96\x3f\xd5\xf0\xf1\x2f\x82\x6f\xca\x18\xa9\xac\x71\xeb\x7e\x5f\xaf\x09\x94\x62\xc2\x57\x45\x43\xc5\x3b\x10\xf7\x22\x79\x6c\xb2\x9a\xfb\xa7\x6a\x85\x5f\x17\x4f\x07\xef\x60\x11\x84\x61\xc3\x76\x7e\x6d\x06\xde\x38\xc6\x45\x10\x66\x22\x69\xea\xc3\x95\x59\x9e\xbf\xfc\x81\xbe\xa8\x8a\xa3\x79\x53\xb5\xff\xfc\x07\x87\x16\xcd\x15\x3a\x6b\xaa\xf2\x5f\xfe\x58\x95\x0d\x41\x8d\x7e\xfe\x43\x35\x05\x1a\xcf\x36\x75\x2d\x13\x7f\xb0\xc6\x59\xb8\x9e\x8b\xa6\xa0\x28\x2d\xf1\xc7\xaa\x94\x28\xbe\x61\x73\x84\xe2\xa9\xdd\x51\xa1\x22\x1a\xca\xc6\x4f\x96\xbd\xf3\x57\x4d\xdd\xbf\xfe\x63\xdd\xd7\x24\x4b\x43\x27\xfc\x27\x3b\x51\xa1\x74\x1a\xca\xa6\x5f\x28\x7b\x2f\x92\x54\x34\x86\x07\x83\x8c\xe7\x65\x4a\x80\x56\xb2\x5a\x28\x7b\xae\x9c\xc6\xbb\x67\xd1\x79\x72\x86\xb5\x33\xf4\x49\x34\x05\xfd\xdb\xe9\x4c\x75\xca\xe9\x69\x66\xd2\xb2\x6a\x54\xde\x65\x90\xee\x20\x8d\xef\x1a\x2d\x6a\xff\xf1\x0f\xcd\x9f\xa4\xeb\x9a\x6a\x5b\x8b\x7d\x00\x26\x33\xaf\x6f\x14\x42\x6f\x0c\xb8\x53\xe4\x8c\x0a\x17\xab\x10\xf0\x7b\x85\x85\x2b\x28\x1f\x7d\x42\x09\x24\x0a\xa3\x63\x94\x18\x2a\x0a\x12\xe7\xe6\x31\x13\xef\x14\x41\xd3\x09\x9e\x25\xce\x37\x3f\x5f\x5d\x7e\xbc\x7e\x7f\xf9\xe1\xfa\xf2\xfb\xcb\x37\x97\x6f\xaf\x60\x55\x89\x0d\x9d\x8d\x23\x76\x8f\x32\x88\x30\x3e\x0d\x14\xa7\xf5\xed\x11\x12\x22\x87\x56\xfb\xa0\x1d\x94\xc1\xc9\x0e\xde\xd6\x91\x78\xfe\xd9\xb0\xe7\x9f\x05\xaa\x4e\x1b\x48\x42\x5b\x87\xb5\x32\x03\x8c\x34\x92\x0f\xf8\x0a\x45\x05\x92\x8c\xb5\x4f\xc2\xa0\x93\x5d\x24\xfb\x34\x5b\xc9\xc3\x6b\x81\xf7\x79\x70\x86\xf5\x42\x77\xe2\x29\x8f\x26\x71\xa7\x33\xdd\xc1\x6b\xc1\x37\xb9\x1f\x90\xc3\xed\x19\xec\xa3\xa9\x9d\xf6\x23\x72\x98\x33\x3a\xcc\x69\x1c\x91\x1c\xe6\x4d\x0e\xf2\xee\xe0\xfb\x23\xb3\xaa\x69\x4a\x31\xb9\x11\x53\xdb\xce\x8d\xd6\x0b\x2d\xb2\xcc\xb6\x75\xf8\x06\xdb\x36\xa2\xe7\x4e\x86\x39\x2f\x74\xfb\x76\xf0\xea\x48\xbd\xdf\x4b\xa2\x2d\xe3\xb7\xda\x6e\x08\x8f\x67\x88\x6a\xe3\x1f\xf6\x8d\x16\xcc\xc0\xaf\x87\x34\x9b\x91\xaf\xa3\xbd\xc2\xb6\x7d\x8d\x12\x49\xf9\xa2\x04\x2c\x13\x82\x00\x6f\xb7\xea\x55\xc5\xfc\x30\xcf\xa9\x7e\x56\x96\x7a\x85\x8e\x82\xf9\xf6\x90\x04\x99\x76\x23\x6a\xdb\xed\xc4\xc9\x5f\xcd\x57\x51\x68\xea\x9b\xef\x65\xc2\xf8\x07\xd3\x3b\x86\x94\xc6\x62\x62\x3c\x3a\x0a\xbc\x3b\xb9\x15\xdb\x2d\xfa\xd5\x59\xf0\x57\x02\x5e\x39\x0b\xfe\xab\xc0\x10\xa3\xd8\xf9\xd8\x89\x9d\x57\xcf\xda\xb7\xa2\xd4\xac\xdf\x1c\x33\xc0\x62\xaf\x24\x0b\x56\xb1\x3b\x7b\x64\xbf\x0a\xe5\x98\xa9\x4a\x05\xcd\xcd\x92\x6a\x36\xc3\xb6\xd1\x5c\xf0\x65\x13\x11\x14\x8a\x9a\x6a\xa3\xda\xfd\x3f\x08\xbe\x44\x1b\x49\xed\xe0\x93\x25\xfa\x41\xc0\x6b\x81\x61\x2e\x1f\x16\xf2\xd9\x30\x9b\x18\xd4\xb7\x8d\xe2\x0a\xd9\xb7\x42\xc5\xe3\x7a\x2b\x60\xd6\x14\xe3\x0a\x6f\x76\x85\xa3\x7a\x36\xdf\xf7\x61\xcf\x3e\xc8\x11\xbc\x17\xb2\x3e\x4b\xc3\x05\x0b\xac\x1b\xab\x4c\x2b\x40\x84\x05\x56\x5c\x4f\xff\x3e\xb7\x3f\x0a\xcb\xf4\xc2\x26\x49\x58\x18\x7e\x90\x49\x2b\xf1\x14\x6d\x2f\xb7\xf3\x6e\x77\xd4\x2d\x56\x9a\x2b\xc3\xce\xb8\xe8\x20\x14\xf2\x76\x3b\xc4\x63\xeb\x65\xe8\xdf\xad\xc4\xdc\x62\x96\x85\x3b\xc6\xbb\x11\x2c\xb9\xda\x63\x1d\x01\x0b\xae\x76\x58\x47\xc0\x3d\x8f\x26\xb3\x29\xdc\xf2\xfb\xed\x76\xb3\x83\x1b\x7e\x6f\xdb\xef\xd0\x3d\x86\x07\xde\xbe\xdf\x6e\xdb\xbe\xf3\xe2\x9b\x1f\x75\x14\xa5\x2b\xf9\xed\xbe\x22\x37\x78\x53\xed\x8a\xe1\x53\x92\xa3\x11\x0b\x6b\x59\x8d\xd9\x96\x73\x3d\x2f\x75\x24\xef\x27\xcb\x29\x4a\x9e\x65\x9d\xc8\x89\xe1\x41\xe0\x5d\x4e\xd3\xef\xc7\x53\x6b\xac\x13\xa2\x52\xeb\xf4\x7a\x7e\x12\xda\x36\x8a\x38\x32\xa2\x38\xe5\x30\x05\x45\x4a\xac\xea\xb2\xe8\x82\xf6\xfb\x63\xda\xef\x33\xda\xef\xdb\x11\x86\xc0\xb9\x9f\x2c\x74\xdb\x81\x13\x43\x54\x6d\x5d\xe1\x98\xf2\x0c\x29\x7b\xfd\xdd\xc9\xc3\x18\xdd\xf3\xb4\x6e\xe4\xae\xbd\xb3\xad\x91\x80\x7b\x98\x81\x75\x3d\x37\xd1\x45\x62\x1d\x5e\x1b\x96\xdc\x85\x85\x86\xc2\x12\x08\x98\x70\xc5\x49\x55\xd5\xec\xa7\xed\xd6\xaa\x48\x62\x2c\xce\x51\xc8\x1f\x65\xe6\xed\xd6\xfa\xa8\xd4\x76\xea\x9f\xc3\xc2\x3e\x51\xf3\xd2\xc9\xf8\x8d\x40\xf7\xf2\x88\xbf\x30\xa7\x47\xbe\x9c\xc4\x3c\x81\x85\x44\x1c\x11\x98\x08\xdf\xb7\x5c\x63\x37\xbd\x45\x4f\xaa\xf2\x60\xad\x81\x70\x7b\xc8\xda\x97\x68\x22\x58\x20\xe4\xf3\xdb\xd3\x05\x3e\x77\x8f\xe6\x2a\x82\x9e\x23\x9f\xaf\x50\x80\x9f\x65\xb8\xb3\xb8\xb8\x3d\x5e\x6b\xca\xfd\xe7\x99\x2e\x95\xf2\x3b\x94\x28\x03\x12\xf1\xd0\xfa\x09\xf9\x3c\x7d\x66\x82\x77\xce\x91\x50\x73\x0b\x9b\x1b\x16\x43\xcc\x16\x10\x32\x1f\x04\x4b\xe1\x9e\xc9\xcc\xdf\xa1\x18\xef\xf0\xd9\xf2\x3c\x3d\xc3\x6f\x90\x80\x65\xa7\xa3\xf8\xac\x2b\x5e\xd9\xba\xfc\x33\xfa\x41\x01\x8e\x2b\xa8\x46\xbc\xb0\xe0\x1e\x63\xb6\xe7\xf3\x5c\x1b\x16\x35\x49\x4c\xee\xd1\xa9\xf9\xf6\xed\x61\xb4\xaa\x7b\xd0\x59\x74\x28\x58\xfd\x4c\x9c\x7e\xfe\x28\xf0\x4e\xc5\x79\xdb\x6e\x8f\x6d\x24\xb5\x75\x4e\x2a\xf6\xa9\xf7\x30\xc3\x20\x77\xce\xf8\x4b\x7b\x26\x7e\x72\xcf\xc4\xe3\x82\x9f\x0f\xc6\xb2\x37\xb7\x28\x01\xb3\x37\x20\xc8\xb5\x12\xdb\x9c\x47\xfb\x5f\x31\x33\x09\x98\x3d\xb5\xdd\x4c\x2e\xb9\x82\x6a\xea\x7f\x46\x37\x6d\xce\x0f\x55\xdf\xc7\x1f\xd1\x6d\x61\xac\xf9\x11\xdd\x60\xcc\x64\x4a\x3d\x80\xa3\x6a\xe7\x7e\xbb\x9d\xa3\x7b\x10\x70\x3b\x11\x53\x55\x67\x75\x31\xaf\x20\xd9\x6e\xd1\x55\xcd\xaa\xe3\x1e\xeb\x7d\xfe\x9e\x5f\x4d\x16\x62\x0a\x2f\x78\xbb\xfd\xde\xb6\x51\xe9\x51\xee\xbd\xf2\xb0\x96\x2b\x6d\xe9\x37\x0c\x2f\x79\x81\x45\x4e\x64\x93\x77\x42\x19\x0b\xcb\x9d\x72\x23\xe4\x02\xc8\xa7\xc7\x32\xf1\x5e\x05\xc0\x42\xe1\xd8\xac\x30\x9e\xac\xc4\x94\xf3\x19\x5b\xa9\x8e\x5f\xe1\xed\xf6\x07\x74\xf5\x04\x8c\x9f\x49\xe0\x7e\x39\x99\x4d\xf9\xbd\x42\xb8\xdf\x75\x62\xe7\x27\x85\x74\xd1\x7d\x9b\xdf\xaa\xa8\x5b\x0a\x11\xc3\x0c\x36\x07\x04\x28\xcb\x76\x55\x3c\x5d\xdf\xa3\xb7\x4e\xbc\xc8\x57\x45\x5b\xc7\xcd\x60\xb3\x48\xe2\x3b\xf6\x42\x40\xbc\x60\x2f\x25\x6a\xb3\x0e\xea\xb4\x64\xbf\xe5\x84\x5f\x35\x7d\x94\x9b\x44\x36\xf8\x1e\x66\x12\x0b\xc3\x5b\x34\x33\x09\xaa\x07\x97\x42\x36\xa2\xf1\xed\xae\xfa\xa1\xfd\x02\x66\x0a\x5b\x27\xdb\xed\x55\x21\xa4\xe5\x7c\x2e\xd4\xda\x15\x09\x73\x51\x2d\xd5\x74\xe8\x08\x2e\x8c\x86\xf5\x90\x72\x34\x5f\x6b\x0f\x35\x89\x4f\x27\x04\xe8\x74\x4f\x26\x8c\x70\x9b\xeb\x8a\xd5\x57\x7c\xf0\x59\xc7\xa6\xaa\x57\x77\xb5\x97\x4b\x4f\xb3\xae\x60\x87\x75\xb7\x9a\x08\x89\x5f\xe4\x42\xbf\x18\xbf\x67\x2f\xe5\x3c\xbc\xd0\xb3\xbc\x10\xf0\x32\x77\x3b\xd3\xe8\xb3\xa7\x6e\x28\x97\xbb\xcd\x33\xd6\xe6\xfb\x21\x62\x69\x9f\x11\xda\x57\x97\x93\xa4\xdb\x57\x17\x85\xa4\xeb\xc1\xde\x8d\x5c\x61\x6c\x9b\x5b\xa9\x93\x5e\x97\x91\x5e\x17\x48\xaf\xc7\x48\xaf\x50\x3f\x2d\xdc\xf1\xe5\xfe\xbb\x89\x47\x19\xf1\xf2\xb0\x6e\xdd\x01\xeb\x0e\xa0\x3b\x64\x85\x0d\xab\x0e\x33\xa9\x4c\x1c\xea\x01\x6a\xab\x01\xe0\xf6\xad\x51\x8c\x27\xf0\x6a\x18\xb8\x8a\xb3\xbf\x6a\x10\xdb\x52\x1d\xba\xd7\x3d\xbc\xbc\x3a\x50\x22\xaa\x5e\x30\xe5\x8a\xd0\xc3\xc1\xde\x05\xd3\xc0\x35\xce\x3a\x89\x89\x54\xe9\x51\x7d\xc1\xd4\xed\xeb\xfb\x25\x75\x9d\xb4\xcc\xaf\x93\x16\xf9\x75\xd2\xaa\xbc\x02\xba\x2b\x34\x96\xef\xcd\xb5\xcd\x6d\xee\xfd\xf3\x86\x47\xb5\xdb\x95\x47\x1e\x95\xb7\x2b\xd7\x3c\x72\x24\x85\x02\x0f\xf5\x1b\x9c\x4b\x1e\x39\xaf\xa3\x45\x10\x05\xd9\x23\x7c\xe6\x37\xf0\x8e\x5f\x3b\xfe\x4d\x0a\x1f\xf9\xb5\xf2\x22\x77\xc5\xaf\x35\xf7\x0e\x6f\xf8\xb5\x13\xc6\xb7\xf0\x9e\x5f\x3b\xdf\xbf\xa5\xf0\x82\x07\x63\xeb\xfa\xc6\x62\x05\xb9\xfa\x52\xa5\x84\x32\xa5\x42\x94\x7e\x52\xa9\xb1\x49\x35\x24\x6c\xe9\xdf\xe7\x03\xda\x8f\x21\x0d\xbe\x3a\x27\xfa\xb6\x21\x91\x53\x37\x7c\x96\x9c\x66\xa7\x04\x42\x8e\xc8\xf9\x79\x8a\x4f\x09\xac\x79\x78\x71\x41\x60\xc6\x69\x57\xb1\xc4\x1f\x95\x83\xbb\x1e\x3e\x55\x0f\x83\x01\x66\x2e\xcc\xb9\x2b\x67\xf3\xdc\xdd\x6e\x5d\x1d\x97\x83\x3c\x17\xe7\xee\x98\x30\x57\xa1\x78\x24\xf8\x3b\x24\x30\x6e\x73\xb1\xdd\x0a\xce\xf9\xe5\x18\x05\x5c\x39\x6f\x23\xcc\x85\x88\x87\x98\xa1\x88\x5f\xa1\x37\x48\xe0\xe7\xef\x31\x88\x67\x28\xe6\xaa\x01\x49\xe2\x11\x49\xfa\x9d\x9e\x42\xfc\x8c\x53\x0c\x48\x74\x78\xd4\x59\x5f\x70\x32\x9e\x3d\x8f\xd9\xec\x99\xcc\x47\x4e\xd7\x18\x3f\x8b\x2f\x38\x95\x79\x3b\x1d\x88\x9f\xcb\xbc\x2a\x5f\x28\x1b\x33\xad\x98\x82\x28\xe0\x48\x3c\x8b\x4f\x09\x56\xa5\x33\x99\x93\xaf\x31\x93\xbd\x52\x29\xeb\xea\x27\xee\x62\x7c\x96\x5d\xf0\xe1\x99\x3f\x99\x77\x3a\x53\x2e\xa9\xcc\x00\x82\xe7\x9c\xf6\x3d\xc8\x4e\xf9\x10\x9f\xa9\xd8\xe1\x3c\x3a\x3f\xcf\xb6\x01\xa4\x1d\x9e\x9d\xa5\x17\x6e\x35\x7f\x04\x91\xce\x9f\xaa\xfc\xb9\xfc\x68\x72\x7a\x3a\x9f\x6e\x39\xa1\xc3\x67\x4b\xf0\x77\xc5\x6a\xfd\xb2\xb7\x5a\xc5\xd2\xc4\x6a\x69\x02\xb9\x34\x3e\x8f\xe5\xd2\xa4\x3c\x38\x1d\x40\xc8\x13\xb5\x5a\x62\x12\x9e\x9e\x4e\x61\xc6\x09\x1d\xd8\x6b\x1d\xdf\xe9\xe2\x82\x0f\x54\x7f\x66\xb2\x07\xcf\x66\x1d\x15\xad\x37\x3c\x3d\x35\x9d\xd1\x9d\x9f\xd9\xb2\xe6\x53\xb5\xea\xb3\x8b\x0b\x7e\x9a\x96\x03\x89\x54\xc1\x68\xbf\x60\xb0\x40\xae\x0a\x1a\x30\xe3\xe4\xd4\x2f\x22\x48\xcc\x38\xe7\x71\x4e\xc7\x46\xe3\xb7\xfe\x5b\xb6\x1e\x9f\x5e\xb2\xcb\x93\xa8\xc3\xcd\xac\xce\x4e\xb9\x6f\x8c\x2e\xd0\x5a\x79\xef\xc3\xcf\x22\x35\xe5\xb3\xd3\x0c\x97\x13\xf1\x6d\x2d\xe8\x73\x77\x7a\x7e\x4e\x7b\x5b\x31\xa1\xd3\xf3\x73\xe2\x6d\xc5\x84\x4c\xcf\xcf\x87\x5b\x31\x71\xa7\x65\x99\xb7\x65\x99\x89\x9c\x7b\x51\xf9\xf6\x7a\xff\x1b\x88\x8b\x8b\xa1\x4d\xfb\xfd\x4a\xa6\xef\x8f\x66\x92\x0f\xc4\xcb\x9f\x68\x6f\xaf\xe0\xab\x4a\x6f\xe5\x81\xeb\x53\x18\x56\x06\xf3\xeb\xde\x67\xda\x85\x5e\xe5\x73\xce\xce\x6f\xee\x50\xd5\xc2\xe1\xc9\xab\x22\x73\x4f\x54\xd4\xf1\x4d\x5d\x93\x37\xe0\x0b\xd4\x49\x70\x2e\x29\x12\x93\x97\x53\x43\xaf\x3f\xe4\xf4\xba\x12\x20\xb7\x73\xde\x86\x8b\xc9\x8b\xa9\x73\x7d\x03\x3e\x0f\x3a\x62\xf2\x69\x0a\x29\xcf\x9d\x7a\xf8\xe0\x77\x4a\xf5\xc8\x68\x9c\xb2\xd4\x31\x72\x4a\x54\xe9\xc2\x3f\xa0\x22\xda\x0e\xc4\xb9\xca\x62\xd1\x0d\xff\x4b\xdd\xc8\xc5\x9c\x69\xd1\x95\x90\xfb\xba\x2b\x6b\x1e\xa1\x4e\x20\x61\xb9\x7b\x36\x3b\xcf\xce\x66\x9d\x0e\x4e\x27\x61\x67\x36\xe5\xeb\x49\x3c\x9e\xb1\xec\x74\x76\x4a\xa6\x3b\xd9\x8c\xe4\x73\x35\x4b\xb6\xae\x61\xfa\x1b\x4d\xff\x6f\xb7\x7b\xe9\x2a\x22\xac\x61\x00\xb6\xdb\x75\xd3\x5d\xad\x0e\x1a\xab\x33\x16\xa4\xff\x8d\x8a\x63\x09\x35\x92\xbd\xcd\x6f\x14\xf9\x29\x29\x87\x42\x6c\xfb\x23\xfc\x89\xa3\x9b\x26\x7d\x0e\x13\x67\xfa\x46\x57\xf8\x19\x2d\x94\x62\x47\x35\xea\xec\xe7\xca\x76\xf8\x1b\x5f\xa1\xcf\x18\x7e\xe2\xee\xd9\xdf\x72\xc1\xeb\x4f\x67\x18\xfd\xc8\xff\x36\xf9\xa9\xd3\x99\xe2\x20\x6a\xdd\x6c\xb7\x29\xba\x81\x1f\xe1\xf3\xe4\xc7\x29\x3e\x89\xb7\x5b\xf4\xa7\x1a\x39\x7d\x83\x77\xb2\x4f\xdf\xe9\xf0\xba\x3a\x1c\x2e\xa2\x92\xb6\xaf\x06\x8c\x53\xfa\x89\x51\x36\x3c\xf9\x2e\x7f\x42\x2e\x50\xd2\x1b\xf4\x86\x5d\xaf\x37\xc4\x50\xa6\x93\x32\x7d\x84\xa1\xfd\x9d\x73\x9b\x17\xc0\xb6\x5d\xbe\x11\xbc\xdd\x86\xb5\xd8\xb5\x1b\x53\xc3\x9e\xb8\xf7\xe7\x4a\x90\x63\x01\x99\x3c\xf6\xf2\xbc\x69\xd9\x81\xd2\x7e\xf8\xda\x02\x3b\x49\xdb\x6b\x62\xac\x3e\xfb\xf9\xb4\xd7\xd7\x2e\x97\xca\xaa\x7b\x71\x7d\x19\x7b\xc3\xef\xcb\x8b\x3e\x8d\x2e\x33\x0c\xae\x76\x51\x37\x79\x39\xe5\xd9\x0e\x1e\x0f\x24\x86\xa6\xfa\x47\xb0\x72\xea\xc0\xc2\x30\x43\x42\x36\x58\xa6\xe4\x54\xcd\xe4\xe5\x14\x02\x3e\x37\x2a\x5a\x81\xc4\xa5\xc1\x45\xb4\x7f\x48\xca\xcb\x78\x75\xa0\x51\x52\x89\x43\x31\x8e\x4e\x03\xb6\x94\x3c\xda\x61\xb9\x92\x27\x57\x5d\x7e\x31\xe5\x3a\x46\xd4\xe4\xd3\x94\x07\xc5\x30\x92\x1d\x04\xb6\x8d\x7e\x40\x37\x7b\xe2\xae\xeb\x50\xc9\xb6\x1e\x2b\x12\xb3\xeb\x9b\x22\xe9\x48\xce\xaa\x1c\xed\x3a\xb6\x30\x86\xbd\x85\xbf\x3d\x58\xf8\xe2\x44\x7c\xa3\xe7\x8e\x80\xc0\x13\x77\x9a\xaf\xa5\xf2\x21\xba\xbf\xf6\x47\xca\xa8\xbc\xaf\xa3\x8c\x78\x0d\x61\xf7\x4d\x56\x5a\xbd\xc3\x50\x31\x34\x0c\x42\xca\x0c\x5a\x51\x91\x38\x24\xa2\x91\x40\xbf\x68\xfd\x8f\x54\xd9\xaa\x56\x99\xf7\xad\x4b\x9b\xc6\xf1\x2d\x32\x75\xf5\xf6\xeb\xc2\x45\x17\xfe\xee\x92\x17\x17\x17\xae\x2a\xad\xbc\x6b\x34\x17\xff\xe5\x68\x71\x83\xa8\x8a\xf2\x5e\xef\xc9\xf2\xc3\x83\xf2\x1a\x0f\x42\xf3\x51\xff\x87\x62\xe1\xe0\xad\x12\xbf\x1f\x39\xe1\x4d\xf9\xf6\x57\xb8\x92\x4f\x2e\xc5\xeb\xea\x85\xf8\x44\xf2\x72\x79\xe5\x7f\x7f\xa9\xfd\x05\xab\x14\x92\x13\xf6\xfd\xd1\xa6\xfe\xfe\x52\x87\x8b\xb4\x57\xec\xd7\xe3\xc5\x6a\x6b\x53\x29\x26\x17\xe5\xd5\x41\xb1\x1d\x3e\xb9\x45\xfb\x10\x10\x6e\x51\x1d\x6a\xa5\xb5\x83\x6b\x54\xa0\x94\x33\xfc\x2a\x27\xc4\x6f\x20\x29\x38\x21\xfe\x58\xe5\x71\x0b\x9e\xd6\xb8\x84\x3f\xca\xc3\x6a\x5e\xd5\xf0\xa2\x8a\x0b\xad\x7a\x6e\xac\x04\xe8\xcc\x39\xc9\xdc\x8e\xb3\x77\xa0\x9d\x5f\x28\xed\xd4\xb4\x12\x8b\x70\xad\x3d\x15\xb0\x32\xce\xf5\xc2\xd4\x95\xa3\x1c\xaa\x4c\xba\xd7\xc3\x0e\x79\x1b\xb5\x6b\xcc\xde\x76\xdb\x2e\x99\x3d\xe5\xfc\xc7\x78\xfd\xb1\x5e\x17\xfa\x78\x15\xd5\x3c\xf5\x68\x44\xf7\x3a\xe5\x75\xa1\xdf\x05\x15\x5d\x2f\x50\x7b\xab\x4c\xce\x9f\xcd\x3e\xa8\xbc\x78\x3d\x2d\xfb\xaf\x04\xde\x3d\x9b\x9d\x8f\xce\x30\x4a\x78\x34\x99\x2b\x8f\x43\x53\x3c\x46\x01\x4a\xaa\x2b\xa6\x16\xab\x9e\x96\xaa\xfb\x2b\xb6\x56\xbe\xeb\x4b\xd5\xe9\x17\xdf\xfc\xc8\x42\xd0\xaa\x6f\x6c\x0d\x4a\xef\x8d\xf9\x20\x57\x9c\xa5\x35\x77\xc9\xb5\x60\xa9\x32\xb5\x51\x9d\xd5\xcd\xb5\x67\x13\x3f\x9a\xc7\x77\x47\xc2\x5e\x96\x41\x7c\xb4\x67\x54\x2b\x97\x22\x96\x4a\xcd\x63\xcb\x62\x02\x2c\x7c\x6d\x01\xea\x74\x92\x4e\x84\x0b\x19\x13\xea\x7a\xb8\x50\x14\xee\x3d\xe5\xf8\xa4\x74\x30\xbc\x1f\x35\x6b\x9d\x8a\xe4\xc5\xad\x88\xb2\xed\xd6\xb2\x2a\x31\xb3\x48\xef\xa8\xe1\xe4\xe0\x88\x36\x76\xae\xc2\x96\x28\x15\x36\xe1\x5c\x67\x8d\xd6\xf4\x2a\x06\xf6\x81\x93\x09\x68\x29\xd3\xb8\x56\x22\xfe\xb6\x0e\x12\x31\xaf\xa8\xb2\xd5\x82\xea\x90\xde\x51\x85\xe8\xfd\x08\xc5\xc3\x41\xbe\xe5\x47\x5a\x50\xa2\x04\x1b\x4f\x9a\x5f\x45\x8e\x5e\x88\xed\x16\xe5\x8f\x3c\x18\x6f\x76\x2c\x29\x3e\x6c\x76\xf8\xc4\xba\xb6\x38\x17\xa5\xff\xa4\xed\x56\x09\x49\xb3\xed\xd6\x47\x19\x88\xdc\x8b\x79\xac\xdc\xef\x18\x33\xec\xde\x88\x91\xde\x08\x0e\xac\x7d\x2b\x47\xb9\xc1\xc9\xa4\x76\x05\x49\xfa\x2e\xae\x45\x3e\x90\x4f\x4f\x9a\x6f\x3f\x7c\xaa\x5a\x6f\x6b\xbd\xe4\x21\x36\x83\x80\xb8\xc9\xe1\x4c\xd0\x6c\x40\xdd\x68\xe4\x1d\xdb\xb6\xb1\xa6\x8e\xc7\x01\x8b\x30\x32\x1b\xd8\xb1\x3a\x9a\x84\x4f\xb3\x38\x11\x3c\x39\x34\x03\x2f\x5d\x2e\xf5\x8f\x3a\x94\xea\xf5\x8f\x06\xa2\x52\x3a\xc6\x75\x5f\xa1\x2e\x56\x54\xb6\xc9\xf5\x46\x79\x50\x69\x8a\x84\xde\x2e\x0d\x04\xc4\x24\x9a\x6e\xb7\x62\x3f\xda\x4a\x30\x91\x5b\x77\x5a\x8b\x75\xa4\xe5\x7f\x6a\xd1\xf2\x40\x55\xa4\x5f\x53\x11\xcf\xf7\x8e\xd2\xf8\x3e\xc9\x50\xe6\xbc\x87\xfc\xa6\xb2\xaa\xc9\xa6\xb4\x9f\x77\x18\x04\xea\x76\x31\xb2\xca\x2f\x2a\x86\x78\xb7\xcb\xba\x5d\x23\x86\x54\x22\x46\xd5\x50\xb7\xde\xd0\x81\x58\xd0\xb4\xaa\xbc\xed\xf6\x5c\x8c\x7a\xa6\x03\x9d\xcc\x79\xf5\xac\x2d\x37\x83\x87\xd1\x64\xea\x28\x9d\x37\x05\x0c\x8b\x9e\x1d\x55\x83\x4b\x72\x5e\xa2\x46\xca\x28\xa5\xcc\x0d\xa1\x1e\x23\xd4\x33\xc2\xd1\xb2\x9f\xbd\xaf\x9e\x10\xa5\x2e\xa7\x24\x8b\xe5\x54\xc8\xb4\xea\x24\x28\xfc\x57\x56\xde\xff\x3b\x27\x81\x1e\x99\x04\xad\x75\x57\x9f\x85\xe3\x9a\x78\x7f\x64\x1a\xbc\xbf\xb3\xa7\xca\x94\xdf\xfa\x7f\x88\xfb\xf7\xfd\xb6\x71\x24\x7f\x00\xfd\x5f\x4f\x21\xf1\xf4\x72\x81\x08\xa6\x49\x49\xbe\xd1\x81\x35\x6e\xc7\xc9\x64\x26\xb1\xb3\xb1\xbb\x7b\x66\x35\x1a\x37\x2d\x42\x16\x27\x14\xa9\x21\x21\x3b\x6e\x89\xe7\xd9\xcf\x07\x57\x82\x14\xe5\x4b\x4f\xef\xef\xf4\xee\xc4\x22\x08\xe2\x5a\x28\x14\x0a\x55\xdf\xd2\x66\x76\x16\x8a\x70\xc7\x6d\x25\xed\x28\x19\x8d\x6d\x5b\x9c\xb8\x3c\x38\x4a\xc6\x95\x53\x79\x84\x3b\x1e\x87\x0e\xd7\x9d\x8c\xcc\x0e\x3d\x61\xb3\xb7\xd9\xa7\x67\x2c\x98\xf4\x1c\x25\xe5\xf4\xd4\x3b\x7d\xf0\xca\x4e\xf3\xc5\xdd\x71\x5b\xbc\xdf\x56\xb5\xab\x0e\x4b\xab\xaa\x27\x36\x3a\x9b\x54\x3b\xfb\xc7\xf6\x53\x34\x6a\x7b\x67\x0f\x5f\xd9\x59\x57\x05\x82\x94\x24\x28\xcc\x1f\x19\x0d\x9a\x34\x6a\x76\xa9\xc1\x40\xf2\x3f\xa0\xc8\xa3\x17\xb4\x77\xaf\x27\xda\xab\xfc\x78\x35\x5a\x6b\x3d\x10\x2d\xbf\x35\xe0\x3c\xd7\x2b\x03\xd1\xb6\x4a\x24\xcb\x0e\xf7\xfc\xa8\x5e\x21\x1b\x01\x88\x88\x00\xb6\xd4\x3d\xcd\xd2\xf9\xc6\x81\x32\x53\x61\x83\x05\x96\xe9\xb4\x69\xa3\x62\xa3\x30\x64\xff\xf8\x42\x40\x5c\x6c\xda\x39\xcf\xf1\x62\x8b\x11\xf8\x7d\x69\x04\x3e\x97\x71\x88\x63\x30\xe3\x7a\x85\x7b\x1e\x50\x98\x82\x39\x5a\x34\x1b\x0f\x73\xb3\x6d\x71\xcd\x7a\xbb\x5e\x4f\xb1\x70\x40\xe1\x61\xfd\x21\x87\x82\x5f\x0a\x2f\x48\x90\xe1\x00\xcc\xb4\xbb\xf9\x71\x76\x72\x77\x7c\xd7\xed\xc2\x1c\x2c\xd1\x1d\xba\x1f\xce\xc1\x8c\x87\x34\x86\x3e\xfb\x2b\x03\x4d\x71\x9b\x00\x2c\x23\x59\xcf\x98\x8c\xcd\xcb\x3a\xee\x80\x09\x0e\xab\x56\xe7\x66\x59\x11\x08\xd1\x1c\x8d\x26\xd2\x04\xea\x6e\xcc\x68\xcb\x9f\x28\x63\x74\x75\xed\x2e\x1b\x83\xef\xd0\x52\x12\x4c\xfd\xfa\x4c\x5e\x8b\xed\x79\x3e\xfb\x97\x5f\x78\xc9\xc8\x55\x65\x70\x5b\x71\xa5\xc5\x08\x6b\xdf\x7d\xc5\x42\x50\x98\xb6\x09\x1e\x8d\x1d\x69\xb7\xcb\x58\x5d\x27\xb1\x6d\x6f\x77\xe4\xe9\x44\xe0\xa1\x1d\x17\xbe\x75\x8d\xb5\x01\xa2\xf5\x5a\xf1\xf0\xc4\x24\x9f\x27\xec\x7f\xa3\x61\xd2\x1c\xbe\x7e\xbd\x76\xfd\x97\xac\x22\x89\x62\xab\x56\xd1\xbe\xf7\xf4\xf6\x76\x65\xb4\x4a\x84\xa5\xf4\x79\x54\x6d\x5e\xa6\x1c\xc4\x03\xff\x80\x0b\x79\xfb\x2f\x8b\x46\xd8\xef\x8b\xb5\x78\xb8\xa7\xa5\x1e\x0d\x2d\x5e\x11\x7f\x0e\xfb\x10\x88\x65\xa0\xda\x50\xf3\xcd\x11\xaa\x3c\x2a\x51\xc3\xf9\x43\x84\x5d\xf9\xeb\x1b\xa6\x45\x35\x88\xa1\x70\x1e\x90\x1f\x21\x2a\x7f\x7d\x53\x96\x99\x37\x51\xb7\x2b\x89\xaa\x43\xd6\xeb\xec\x04\xab\x78\xce\x43\xa0\x6a\x92\x8b\x25\x01\x1e\x8f\x76\xe0\x22\x01\x26\x84\x31\x1d\x66\x7e\x69\xb7\x40\x87\x64\x94\x8d\xfd\x51\x86\xd8\xdf\x31\x93\x07\xca\xd0\x6d\x91\x73\xaa\xa6\x07\x47\xe2\x24\x8a\x32\x8d\x4a\x94\x19\x41\xde\x32\x23\x14\x1e\xa7\x6b\x09\x44\xcc\xd9\xf7\x61\xdf\x3f\xec\xa3\xc3\x3d\xff\x70\xaf\x14\xdf\xf6\x5f\x23\x55\x49\x14\xf3\xd1\x98\xbb\x6b\x99\x84\xc9\x3d\x30\x3b\x58\x21\xfe\x36\x12\x69\xd5\xfe\xdb\x00\xe2\x96\xc8\x75\xd2\x5c\xd6\x3c\xed\x21\xcb\x27\x35\x72\x54\x7d\x92\xa4\xa4\xbc\x37\xf7\x07\xaf\xef\x87\xbc\x03\x36\xc2\xbc\x8f\xc6\x55\xb7\x35\xdc\xe9\xa4\x6a\x59\x1a\x2f\x9a\x96\x66\x50\xf6\x3a\x35\x7b\xdd\x68\xc0\x2e\x04\xf1\x00\x6a\xc0\xf4\x6d\x2b\x54\x3b\xef\x8a\xb1\xe1\xb0\xc3\xda\xfa\x37\xc6\xf9\x8e\x27\x90\xad\x37\xb6\x76\xdb\x06\xb1\xf6\x58\x05\x31\x4a\x40\x55\x17\x08\x51\xfc\xd6\xe5\x99\xf2\x6e\x0c\x8f\xe3\x13\xec\x1e\xc7\x3b\x3b\x30\x9a\x82\x98\x1f\xdf\x6c\x9b\x8e\xe2\xb1\xe9\x49\x1c\xb3\xf6\x88\xdf\x3b\x5e\x7d\x52\x94\x0e\x47\xa2\xe4\x4b\x86\x5a\x72\x8d\xd7\xca\xad\xde\x16\xb9\x75\x1e\x2c\xaa\x42\xeb\x16\x23\xff\xdf\x21\x1f\xec\xbf\x46\x62\xdd\x93\x0d\xbc\xe2\x0d\xdc\x8c\xf6\xa2\x2f\xc2\x08\xd0\x21\xfb\x3a\x82\x39\x69\x03\x1e\x02\x4d\xcc\xf5\xaa\x40\x90\x4e\x1b\xad\xfe\x9b\x3d\x99\x38\xe0\x40\x13\x4c\x42\x4d\x3a\x80\x40\x7b\x3a\x81\xa4\x32\x36\xc4\xc4\x60\x50\xf6\xe5\x98\xa2\x44\x8c\x98\xd8\x08\x6b\xf8\x1b\xfb\xaf\x12\x76\xb7\x4d\xa8\xe9\x09\x5a\x99\xd8\x46\xc7\x89\x17\x88\xb5\x95\x19\xe7\xd7\x3e\xd5\x49\xf7\xfc\x81\x67\x4c\xfa\xab\x84\xd8\xa7\x3b\xd1\xd4\xfe\xff\xa4\xe9\xde\x33\x4d\x7f\x89\x3c\xab\x9a\x7e\xe0\xd5\x02\x24\xf7\xf7\xd4\x26\xca\x15\x42\xa3\xb1\xb8\xdf\x35\xfa\xd7\x10\xce\x4e\xc3\x67\x66\x55\x6a\x15\xc6\x5a\x4d\x0a\x8c\x14\x18\x4e\x0c\x22\x00\xa2\x70\x7b\x88\xa6\x80\x62\xc3\xcd\x22\xf3\x29\xd2\x11\x5b\x73\x58\x45\x0e\x56\x17\x7a\xe5\xc5\x70\x8c\x45\x14\x37\xb4\x64\x2c\x91\xfd\x98\xe0\x14\x2c\x77\x62\x88\x42\xc3\xa2\x65\x02\xd1\x0c\xbb\xc7\xb3\xb7\x93\xe3\x59\xb7\x0b\xc3\xd1\x6c\x8c\xcb\x20\xe1\x62\x6d\x68\xa0\xb0\xee\x0c\xfa\xfc\x1a\x2c\xee\xce\xc6\x06\x12\xbb\xd8\x4a\x95\xe5\x95\xe0\x6c\x32\xd6\x96\x61\xff\xc4\x61\x24\xd8\xbc\x1c\xbc\x46\x1c\x64\xbc\xae\xbf\x85\xaa\xf2\x74\x5e\xa3\xa9\x6d\x1e\x39\xbf\x83\xdb\x1d\x78\xaf\x11\x5a\xbd\xda\x69\x48\xf8\xf5\xf3\x36\x66\x94\x91\x8f\x87\x7a\xa8\x3f\xae\xc8\xaa\x15\xd2\x09\x78\x4e\x50\xa2\xa4\x6e\x58\xdf\xc9\x1c\x0a\xb8\x6e\xcb\x76\xba\xcd\x8b\xc8\x90\x1a\x14\xf6\xad\xf2\xac\xac\x3e\x23\x89\x98\x50\xd9\xbe\xa4\xdc\x2f\x60\xfc\x6a\x6c\xee\xa0\xa6\xe0\x12\x9e\xfc\x40\xb6\x48\x14\xc3\xad\xf4\x78\xe6\xfe\xb3\xd2\xf1\xbb\x80\x12\x0b\xad\x92\xf4\x61\xd3\x9a\x83\x5f\x2e\xb3\x0c\x5c\x8d\x77\x1d\xcd\x39\xa0\xba\x96\x9c\x79\x0d\xdb\xd5\x4b\x62\x63\xaa\x50\x13\x60\x85\x19\x77\xf9\x34\xfd\x78\x75\x29\xe8\xbf\x83\x71\x06\x75\x73\x8c\x17\x7e\x26\x78\x7e\xdf\xdf\xeb\x1b\xf4\xf2\x9a\x1d\x9c\xd3\x49\x22\xf1\x18\x9e\x66\x29\x72\xcb\x11\x70\xb3\xaa\xfb\xdc\x9c\xc2\xa1\xe9\x5f\xae\x2e\x2f\x00\x5c\xaf\xbd\x0e\xc6\x1b\x3d\x61\x2f\xa5\xd7\x89\xd9\xfa\xcd\xc2\xb9\xb0\x02\xcd\xbe\xb2\x4f\xfd\x0d\x41\x5f\x49\x59\x94\x9f\xb7\x15\xd2\x5d\xb2\x9c\xdf\x72\x73\x0e\xb5\xa7\xae\xd7\x3a\xda\x3d\x85\xc3\xca\x98\x02\x28\xe3\x9f\x08\xc8\xee\xaa\x31\x66\x9d\xae\xf6\x9b\x27\x52\x21\xa2\x7e\xc9\xa2\x79\x24\x20\xcb\x50\x56\xeb\x7d\x8b\x7b\x3d\x65\xeb\xb5\x88\xc6\x9e\x21\x8a\x08\xd8\x1b\x40\x68\x42\xb3\x0e\xfc\xbd\x41\x79\x37\x73\x70\xd0\x54\x5d\xb5\x58\x76\xb0\x29\xa1\x16\x12\x4c\x15\x15\xb6\x2a\x13\xd3\xb5\xac\x0e\xb6\x3e\x26\xf7\x41\x1c\x85\x3c\xd9\xb2\x6d\x01\x60\x0f\xe8\x36\xe8\x73\x31\xc4\x89\xe1\xfd\xd3\x2a\x71\x8d\xc9\x30\x33\x5e\xf8\xd5\xb2\x25\x00\x7a\x09\x6b\x7f\x70\xf8\xac\x86\x55\xd9\xa5\x5b\x68\x75\x1b\x25\xa1\x4f\xc0\x60\x20\x8e\xa0\x83\x81\x3f\x18\x18\x64\xfd\x92\x4d\xf4\xe0\x48\x92\xb5\xdb\x37\x95\xf1\xb3\x20\xff\x28\x05\x38\xae\x8f\xdf\x34\x86\xe7\xea\xcb\x76\xc4\xe6\x89\xdf\xb7\x80\x08\x25\xea\x42\xa4\x76\x18\x28\xa5\xb7\x8e\x29\xbd\xad\xd7\x1d\x6a\x44\x43\xf5\x44\x34\x54\xa0\x62\x33\x8a\x6a\xb4\xbf\x48\x25\x24\x0f\x87\xfe\xe2\xbe\x7f\x02\x7e\xe8\x98\x09\xf7\xd5\x0f\x0d\xf1\xbe\xa3\x64\xfb\x8e\x92\xed\x95\x4d\xb2\x8a\xad\x5f\x09\x87\xea\x1d\xba\xcd\x93\x20\x0c\x66\xb3\x86\xc1\x40\x09\xde\xfd\xe7\x3f\xf2\x37\x5a\x34\x06\xa3\x7f\xb6\xc1\xf8\x0d\xdc\x6d\x09\x20\x7f\x45\xd2\x7b\xfb\xd0\xb6\x29\xc8\x14\xbe\xff\x73\xf0\xc4\x65\x1c\x0a\x60\x59\x5d\xe1\x12\x3b\xe7\xc0\xce\x09\x1c\x79\x63\x09\xf2\x5c\xde\x2f\x5a\x85\x94\x6a\x2b\x61\xcd\xbc\xc3\x97\xc1\x17\x0e\x14\x10\xd3\xe0\xa0\xaa\x7d\x18\x1c\x41\x60\x7d\x0e\x16\x56\xd5\xd7\xa1\xee\xd6\x54\x5a\x32\xd6\xce\x7b\xea\xec\xe6\x1a\xea\x36\xb7\xa2\x96\xad\x9a\x00\x1a\xb1\x59\xee\x08\x3d\x4f\x68\xf6\x28\x37\x39\xc4\x9b\x01\x51\xa9\xf3\x62\xc7\x39\xe7\xbe\xee\x73\x65\xf8\x43\x66\x4e\x48\xa6\xb5\xcf\xc5\x76\xea\xfa\x12\xa8\x8a\xdf\x16\x70\xbe\x76\xe0\x7b\x83\x03\x34\x38\xf0\xd9\xbf\x47\xfe\x80\xdf\x45\x1e\x6e\xbf\x08\xe2\x8b\xe7\xc8\xd5\x20\x4a\xf9\xbf\x33\xaa\xd0\xb3\x82\x49\x9a\xcf\x8c\xa3\x54\x07\x44\xb6\x7d\xe0\xb9\xd8\x74\x66\x8e\xc0\x05\xe7\xc2\xce\xe7\xd3\xbf\xdd\xfc\x7c\xfa\xe9\xa7\x73\xe1\xbc\xe3\xed\xba\x50\x00\x40\xb2\x36\xd3\x99\x85\x56\xbc\xbc\x06\x09\x41\x00\x4b\xbd\xf5\xb8\x25\x2a\x39\x39\x1a\x1c\xb9\xfb\xbd\xfd\x3d\x67\xbf\x37\xe8\xed\x79\x7b\xfb\x43\x1d\xa0\x9a\xc0\x2e\xff\xfd\xe9\xa2\xe7\x67\x80\xec\x78\xdd\x84\xfd\x0b\xdf\x24\x80\x74\x3d\x68\x6e\xc8\xe8\xc8\xf5\x8f\x38\x1f\x39\xdc\xbe\xf1\x2b\xbf\xec\x20\x8f\x92\x6a\x4f\x33\xdb\xf6\x76\x33\xe0\xc2\x13\xb3\x03\x2c\x9b\x6f\x9c\x1f\x0d\xd0\x66\xbd\xef\xe0\x2e\x85\xb6\xed\x76\x30\x1d\xd2\xb7\xee\x70\x87\x80\x1d\x0a\xcb\x18\xdb\xb4\xab\xc7\x19\xd0\x37\x94\xb5\xda\xa7\x35\x41\xe2\xf0\x49\x41\x42\xb4\x98\x06\xcd\x2d\xe6\xda\x0f\xa3\xc9\x2c\x5f\x93\x54\x66\x46\x5e\xd7\x8d\xe3\x11\xc0\x77\x81\xb7\x43\x20\xdc\xed\xd5\x5b\xb5\xf7\x0c\x15\x79\x5a\x90\x92\x95\x4f\x6e\x9b\x25\xc2\x4c\xd4\xfc\x46\xc5\x68\x07\x66\x0c\x75\x6f\xb7\x5f\x9d\x47\x19\xfc\xdc\x3b\xdc\xb2\x2b\x1b\x02\x9c\xaa\x37\xfe\xad\xd1\x84\x0a\x90\x93\x93\x13\xec\xc2\x61\xdf\xdb\x31\x48\xb8\x24\xaf\xae\xb3\x27\x5b\xf5\xe9\xf2\x43\xef\x1c\xfa\xfd\x8d\x41\x68\xdc\xab\x2b\x53\x43\xbe\x2f\xea\xed\xd9\x42\xf7\x72\x1c\xba\x19\x68\x1e\xf0\xed\x9b\x29\x1f\xf0\xc3\x43\x53\xd1\x01\xb2\x8e\x11\xc0\xbf\xa4\x00\xfe\x28\x05\x47\x31\xa2\x87\x87\xfe\x21\xbf\xda\x3e\x3c\x7a\xe9\x88\x8a\x10\xf8\x3e\x01\x87\x47\xa6\xba\xf8\xf0\xc8\x3f\xe4\x1c\xe6\x68\xcb\x96\x63\x52\xec\x6d\x5e\x2b\x74\xf6\xb8\x48\xeb\x3c\x4f\x1d\x22\x05\x6a\xa7\x2b\x63\xbd\x6f\x9c\xc6\x63\xec\x1e\x07\x6f\xf3\x63\x18\xbf\x05\x09\x36\xb4\x6c\xa3\xa0\xdb\x1d\x43\x38\x04\x29\x4e\xdf\x80\x08\xc7\xbb\x09\x7c\x13\x75\x3d\x14\xe3\x04\xfa\x69\x17\x27\x27\xee\x10\x44\x38\xd9\x8d\xe1\x9b\xc8\x4f\x34\xfa\x35\xe6\xcc\x6a\xe8\xed\xba\x7e\xfc\xa6\x5c\xa2\x69\x5d\xc8\x3f\xda\xae\x64\x57\x3d\x8d\xe6\xcb\xf8\x49\x0d\x94\xd4\xd4\xed\x75\x70\x06\x06\xbd\xa3\xc1\xd1\xfe\x41\xef\x68\x0f\xed\xc1\xf5\xba\xd7\xd1\xc0\x09\x5c\x2e\x96\x43\xc5\x8a\x6c\x3c\xc4\x77\xd9\xde\xdd\x65\x2c\x7b\x7f\x6f\xaf\xbf\x67\x67\x28\x95\xbf\x74\xd7\xdc\x75\xf4\x26\xed\x02\x20\x33\x9c\x9c\x9c\x78\xfb\xf0\x4d\xda\x8d\xde\xc8\xa4\x44\x24\x09\x43\xca\x13\xb7\xb2\xfa\xb4\x4c\x7c\xf4\x8c\x31\x41\x39\xad\x71\x7a\xe7\xb9\x4d\xcb\xde\x60\xe3\x7a\x91\x79\xee\x79\x7d\x80\x9f\x3f\xa7\x19\x15\x2d\x7c\xbe\x7d\x35\xf1\xfd\xa3\x67\x6e\xfb\x2b\x05\x35\x5a\x5c\x1a\x0d\xde\x55\xfb\x4e\xbd\xb5\xdb\x99\x62\xad\x92\x3c\xba\x4b\x7c\xce\x25\x9b\x98\xdb\xd1\x76\xe6\xa6\xd6\xba\xda\xa2\x35\x7f\x79\x9a\xba\x7a\x64\xc7\x3b\xe8\xe0\x8e\xa0\xe5\x28\x99\x01\x91\x04\x4d\xba\xaa\x6c\x68\xf5\x9e\x73\x86\x2c\xb7\x66\x8e\x66\xb8\xa3\x18\x95\x0f\xc4\xbe\xbb\x93\x80\x1d\xf6\x17\xbe\x11\x4c\xf4\x7c\xb7\xb7\x49\x3d\x25\xbf\x39\x7a\x92\x79\x36\x77\x52\x37\x75\x63\x23\xd3\xe0\x99\xac\x89\x3c\x80\xdc\x8e\x21\x55\xc9\xe5\xec\x47\xe2\xc7\x8e\xe7\x03\xba\x13\xc1\x5d\x0e\x32\xd9\x4d\x78\x47\x8a\x26\xa6\x78\xf4\xcc\x11\xc6\x68\x51\xb6\x4c\x26\xcd\xdb\x8c\x3b\x2c\xf7\x17\x5f\x23\x6e\x0a\xc0\xcc\x2a\xfd\xbc\x48\x53\x78\x28\x6f\xbe\x8f\xaa\x9a\xc2\x83\xbe\xb2\x1c\xf3\x64\x4c\xb0\x9e\x84\x70\x14\x5e\x72\x31\x96\x01\x59\xb8\x97\x9d\x10\xff\x27\x95\xc0\x77\x21\xa6\x8e\x90\xdf\xd0\x0c\x87\x68\x8a\x43\xe3\x50\xb0\xc0\x96\x78\x67\x61\x76\xec\x06\x47\xfb\x10\x4c\x21\x44\x73\x6c\xb1\x8f\xd9\xa1\xa0\x1e\x08\x09\xdd\x37\x58\xab\xa5\x80\xa0\x8e\x27\x82\x4d\xe5\x4a\xc1\x67\xc0\x84\x68\x24\x2c\x13\xb2\x39\xc0\x80\xe2\xf9\x90\xf2\x76\x02\xe8\x4f\x00\x45\x7d\x08\xcd\xf0\x02\x2e\x2f\x72\xd0\x17\xc1\x20\x06\x7b\xec\x2f\x3f\xb0\x1d\x1e\x62\x8c\x41\x26\x43\x07\xca\xdc\x3d\x08\xd7\x6b\xaf\xc7\x6d\xf1\xd5\xa1\xec\x22\xb8\xd0\x5e\xf3\x83\x43\xf1\x7d\xfe\x10\xf1\x20\x79\xe6\xb7\x1e\x84\xab\x49\x90\x93\xf6\xfe\xbe\xcf\xff\x1e\x1d\xfa\x09\xee\xa1\x08\x0f\x8e\x5a\xb7\x19\x09\xbe\xb5\x78\xf2\xc1\x91\x78\xed\x79\x9e\x9f\xe0\x43\x14\xe1\xbd\x3d\xf9\x3e\x24\xd3\x60\x19\x53\x5f\xd4\xdc\xa5\x85\xf6\xa3\x41\x31\xa6\xd2\x83\x87\x03\x6e\xba\x28\xd4\x41\x2b\x8f\x97\x6f\xc3\xe3\x65\xb7\xcb\xce\x87\x20\xc7\xb1\xd9\xa8\x25\x84\x6f\x07\x87\xeb\x75\x7e\x12\x19\xfd\x51\x0b\x40\x45\x3a\x04\x31\x0f\x44\xaa\xab\xe5\xa7\xd4\x10\x58\x6d\x37\xf5\x2c\xb8\x5e\xb3\xdf\xee\x2d\xff\x19\x02\xab\xeb\x7e\xf7\x2c\x08\x57\x61\xc3\x34\xd6\x37\xe1\xb7\x1e\x3f\x80\x64\x95\xf0\x52\x15\x57\xf9\xd0\xb6\xc1\x62\x18\x54\x6f\x5f\xc4\x95\xff\xe5\xd4\xd0\x56\xfb\x8a\xce\x3a\x38\x01\x19\x84\xc3\x88\x6b\xdb\x66\xe0\x9e\x87\xac\xc8\x50\x08\x7d\xf6\xb3\xd0\x3a\xe6\x3b\x8e\x24\xba\xb7\x0f\x87\x39\x98\x41\xdf\xd2\x87\x0f\xf4\xf9\xe3\x85\xfc\x75\x11\x5c\xa0\x8b\xf3\x0f\xa7\xd7\x1f\x7f\x3e\xbf\xf9\x78\xf1\xfe\xe3\xc5\xc7\xeb\xbf\xa3\x2f\x97\x57\x1f\xab\x29\xe7\x5f\xae\x3e\x7e\xba\xbc\x40\x4a\x84\x47\x51\xfe\x31\xa1\xe4\x8e\x64\x88\xe3\xde\xa2\x28\xbf\x0a\xa6\x44\xa5\xb1\xaa\xae\x4e\xdf\xb3\x02\xae\xcf\x3f\x9c\x7f\xe5\x35\x56\x12\x8c\x30\x99\x3a\xde\xa4\x2e\xd3\x34\x0d\x46\x8f\xd8\x3d\xbe\x55\xe4\xff\x78\xfc\xd8\xed\xc2\x0c\xcc\xd0\x1d\xbe\x1d\x3d\x8e\x39\x9c\x0c\x08\xd1\x1d\xb4\xed\x25\xfb\x8b\x62\xf6\x0e\xc2\x96\xb1\x48\xf1\x14\x4d\x2b\x9e\x43\x21\x2a\xd5\x3d\x72\x54\x51\x58\x8d\xf0\x2c\xd4\x35\x48\x07\x99\x94\x4a\x30\x09\xc2\xbc\x61\xcf\x2d\xfd\x86\xfb\xfe\x41\xbf\xd1\x33\xb8\xe7\x6e\x17\xfe\x14\xc7\x54\x2d\x59\xc9\xc1\xf6\xb5\xe8\xdf\x43\x3b\x7b\x3d\x58\x61\x8a\x3d\xf7\x49\x19\x4b\x98\x88\xaa\xd9\xda\xa8\x41\xbd\x68\x60\xcc\x4a\x61\x58\x62\x95\xf3\xd8\x44\xd5\x2d\x4b\xda\x7d\xf6\xdc\xe7\x05\x1e\xa3\x4e\x39\xbb\x3e\x01\x07\x87\x15\x83\x8a\x43\xff\x40\x14\xf7\xbc\x58\x63\x14\xc7\x4e\xc2\x0d\xdb\x32\xe9\x60\x52\xd4\xc6\xea\x19\xa5\xf3\x41\xb9\xa7\x1a\x12\xb8\x51\x95\x41\xdb\x5b\xce\x6a\xd0\xb6\x59\xca\x5b\x5c\x47\x4d\x2e\x1a\x3b\xfa\xbc\x44\xa4\x6b\xaf\xaf\x25\x7f\xa3\x86\x6a\x5f\x9f\x3f\x01\x96\x45\xd7\x56\xa5\xbf\xf3\x4c\xd9\xcf\xc8\x26\x9e\xe7\x56\x4e\x5b\x52\xeb\x51\xae\xf5\x0e\xd7\xd9\xeb\xfa\xcb\x17\xf2\xec\xe5\x79\xae\xef\x79\xe5\x35\x4f\xcf\x7d\xe6\x78\xe7\x79\xde\xd6\x1a\x3f\x26\x8d\xf5\x7d\x4c\xca\xda\x3c\xdf\xf3\x3c\xa3\xb6\xd7\x5c\x49\x6a\x48\xf3\x7e\x4f\xdd\x49\x72\x1b\x3b\xcf\x71\x68\xfa\x3e\xfa\x4e\x42\x14\x18\x4a\x20\x94\xe3\x91\x8b\xf4\xff\x8d\x51\xac\x24\x07\x95\xdd\xe7\x21\x1b\xb3\x8c\x4c\x68\x3b\x4a\xee\xd3\x49\xc0\xda\xd1\xb1\x6a\x21\x34\x4c\x28\xd7\x1d\x0f\x25\x98\x1e\x77\xbb\xd9\xdb\xfd\x63\x98\x74\x31\x79\x93\x8f\xb2\x31\x62\xff\xe0\xe4\xbf\x3c\x72\x80\x12\x1c\x80\x64\xd7\x23\x07\x3c\xfe\x85\xd9\xbb\x32\xdc\xc1\x3e\xca\xb0\x7b\xbc\xb3\x43\x4f\xb0\x7b\x0c\xb3\x2e\xe6\xf8\xa4\x1c\x53\x2f\x00\xd9\x2e\x61\x1d\xce\xfe\x8b\xbc\xf1\xc8\x41\x81\xc2\x66\x8c\xd2\x7d\x44\xb1\x65\x1d\xef\xec\x10\x5e\x08\x93\x63\xac\x0e\xc6\x54\xfa\xd3\x8b\xa0\x8d\xf9\x88\x8c\xd5\xa9\x4c\x5e\x39\xf0\xa4\x16\xfb\x56\xdd\xa3\x76\x65\x54\x45\xcb\xb5\xd0\xc1\x8e\x3a\xe9\xc1\x6e\xa6\x02\xdc\xd1\x6a\x90\x04\x13\xdc\xac\xbc\x8d\xfd\xaf\x1e\xc6\xde\x70\xc6\x5e\xef\x78\x28\x7b\x43\xa0\x3f\x03\xe4\x0d\x41\x74\xb7\x87\x32\x58\x98\xb7\x4c\xdc\x4c\x06\x58\xae\xe3\xba\x2e\x6b\xf4\x21\xd9\xd9\x53\xb3\x02\xfa\x70\xbd\xb6\x3c\x96\xec\x1c\xe9\x44\x97\x27\x3a\xbd\x3d\x96\xce\xfe\x96\xf9\x7b\xfc\x95\x5b\xfd\xcf\xeb\x1d\xb2\x9c\xc0\xfd\x1e\x12\xf7\x76\xff\xb6\x1f\x1c\xec\x0f\x5c\xf7\xd0\x85\x46\x91\xe2\xd2\xb0\x7e\x54\x49\x4d\x68\x32\x93\x9a\x15\xd9\x6c\xac\x0f\x81\xaa\x8b\xa6\xf2\xb2\x1a\xc5\x10\x2d\x04\x80\xfe\x1c\x5b\x16\xba\xc7\x96\xcb\xc1\xcf\x17\x6f\xdd\xf5\x7a\x71\xd2\x6b\x88\x3f\x13\x73\xb1\x71\xda\xc1\x53\x29\x36\x59\x17\xc1\x05\xff\x68\xfa\x16\xef\x78\xa4\xe7\xad\xd7\xd3\x13\xcc\x7e\x28\xb9\x4a\xce\xe7\x54\x7c\xc9\xad\x73\xe6\xd8\xda\xb1\xd0\x14\xef\x4c\x21\x9a\x9e\x78\x64\xa7\xe7\x31\xc2\x48\x99\xd8\xda\x4c\x89\x2e\x5b\x5a\xc7\xd9\x09\x1e\xb8\x47\xfb\xc7\x90\x76\xb1\xd7\x43\xd9\x2e\x7f\x14\x97\x01\xd9\x09\xee\x89\x17\x2c\xbd\xa7\xcf\x32\x05\x98\xbe\x99\x81\x1e\xda\x3f\x42\x1e\x84\x3b\xfb\x47\xf0\xad\x3b\x14\x49\x3b\x14\x79\xd0\x9f\xee\xb2\xdf\xec\x27\x4a\xdf\xe0\xc1\x9e\xdb\xdf\x3b\x3a\xda\xef\x1d\xf4\x0f\xdc\xc1\xd1\x3e\x02\x14\xef\xf5\x76\x28\x3c\x71\x45\x7b\x96\xc0\x45\x29\x3b\x31\x2c\x8e\x83\x13\x7c\x70\x0c\x97\x80\x2d\x27\x17\xa2\x60\x07\x1f\x08\x50\x02\x30\x03\x9e\x8b\x02\x11\xbe\x01\x05\x98\xee\x78\x2c\x73\xaf\x7f\x0c\x27\xc0\x7b\xfb\xb6\xd7\xe7\xb9\x7b\xfd\x16\x7f\x0c\x20\x5a\x02\x8f\xe5\x9e\x30\x29\xf6\x1e\x87\x40\x3a\xf5\xca\xca\x96\x1c\xbd\x80\xb2\xc2\xf8\x4b\x73\x25\x2c\xca\x18\x23\x78\x71\xe2\x0e\xe7\x5d\x26\xec\xde\xab\xd5\xf1\x16\x2f\x86\x96\xeb\x58\x95\x4f\x76\x72\xd8\xbd\xf7\xef\x75\x2c\xa4\x7c\x67\x01\xbb\x96\x63\x75\x55\x12\x4b\x80\xfe\xbc\x7b\xaf\xac\x04\x54\x68\x24\x61\x0f\xd5\xef\xf9\xfd\x5e\xed\xe2\xaf\xe7\xbd\xc6\x3e\x60\xbf\x67\xf2\x48\xce\x1a\xbf\x64\x64\x12\xe5\x51\x5a\x31\xc0\xcb\x1a\x4e\xe7\x62\xd1\xc9\xfe\x78\xa8\x72\xf7\x5e\xcd\x1f\x6d\x5f\x22\xba\xb6\x86\x63\xb1\xba\x2e\x10\xd9\xff\x3f\x66\xe6\x2d\xac\x18\x6e\x44\xd8\x23\x43\x59\x39\x85\xbe\xfa\x85\x94\xb4\xd4\x3c\x7e\xcf\x59\xa0\xb2\x11\x31\x90\x0d\x83\x5c\x69\x45\xf6\x2a\x5a\x91\x3d\xff\x68\x8f\x97\xf7\xbc\x0c\xa6\xcb\x9a\x64\x24\xa0\xc4\xe7\xc7\x54\xb3\x2c\x26\xb1\xf2\xb2\x9e\x13\xc0\x94\x8d\xc7\xde\x3e\x34\x8a\xad\x00\x2c\x46\x24\x67\x15\x48\x09\xcf\x04\xda\x39\x3a\xf4\x8f\xb8\xf8\xe3\x3d\xa7\x75\x7a\x41\x35\x8f\xbe\x3c\xad\x6f\x56\x23\x6f\xc4\x7a\xde\x16\x29\x4b\xdd\x87\x1e\xf5\xa0\x93\x26\xef\x33\x42\x7e\x23\x2d\x02\x3c\xf7\x00\x02\x6b\xca\x1f\x9f\xb9\x04\x4b\x4a\x69\xd3\xb6\x29\x48\xe0\x90\x80\x0c\x24\x10\xfa\x49\x21\xef\x7b\xdd\x03\xdf\x73\x0f\xd4\xb5\x63\xcf\x3f\x12\x93\xbf\xed\xd6\xbc\x2f\xd5\x17\x5c\x15\xa1\x1b\xb3\x0d\xd5\xb2\x29\x2c\xb7\x89\x3c\x98\x98\xa6\x35\x3c\xc8\x3c\xac\xb5\x4b\x99\x3a\xea\x03\x8a\x77\xb0\x61\x27\xd2\xd0\x84\x8b\x60\x4e\xf2\xc6\xda\x59\x7e\x97\x4f\x87\xa8\xc6\xf5\x3d\xd7\x45\xb2\x3a\x5e\xc1\x16\x51\x8e\x1b\x5b\xa8\xeb\x69\xb3\xe7\x46\xc4\xdd\x67\xfa\x5b\xeb\x6d\xd9\x57\x79\x05\xac\xfa\x2c\x2c\x1a\x78\x63\xb6\x68\xf5\x0f\x8e\xca\x26\x44\xf9\xf9\x77\x4a\x92\x3c\xba\x8d\x9f\xa3\x87\x12\x5c\xb5\x43\x39\x96\x2a\xe8\x90\xf5\x9a\x70\xb0\xb9\x06\x7a\x60\x2d\xe8\x6d\x39\x10\x56\x5b\xf0\x3e\x4b\x7f\x23\xc9\x8b\x6b\x67\x95\xaf\xd7\x3c\xec\x26\xab\x7c\x6b\xdd\x5b\x58\x50\xb5\xee\x2b\x12\xc4\x24\xfc\xc3\xeb\x7e\x05\xbb\x8a\x18\x27\xf1\x3c\x79\x9d\xe2\x79\x47\xbe\xe7\x95\x56\xb9\xbd\xde\x16\x6e\x65\x50\xd4\x5e\xd9\x21\x6e\x6f\xfe\x3b\xe9\x68\xcf\xf7\xdc\xbd\x26\x3a\xea\x6d\xe1\x64\x4f\xb2\x98\x45\x46\xee\x49\x42\x25\x75\xf1\x28\xb5\xff\x37\xdc\xa6\xf7\x7b\x18\x60\x4e\x82\xf8\xff\xac\x41\xcf\x1f\x4e\xf5\xe4\x57\x63\x6e\x33\x42\xe8\xb9\x3c\x18\x88\xb4\x7d\x73\x7d\xaf\x67\x9c\x14\x7b\x2f\x31\xe7\x1d\xec\xb1\x8e\xaf\x8a\x56\x36\x6a\x8c\xdd\x3c\xc6\xd6\x6f\x16\xca\x84\x85\xd0\x48\x04\xfd\x6f\xff\x36\x2e\xed\x83\x36\x83\x76\x37\x9b\x0b\x49\x09\x46\x15\x61\x75\x85\xcd\x0b\xec\x5a\x63\x4b\x80\x6c\x96\x36\x41\xa8\xe2\xa0\xca\xfb\xf2\xec\xa9\x57\x8e\xd7\x07\x21\x3d\xd5\x0e\xd8\x2f\x38\x57\xf7\xb6\xdf\x6a\x56\xcf\xd5\x66\x0d\xea\x40\xfd\xec\x39\xba\xff\xac\x88\x88\xca\x98\x83\x0a\xfa\x6e\xff\x50\x3a\xa4\xf5\x84\x43\xda\x40\x01\xdf\xb9\x02\xf8\x8e\x11\x6d\x28\x8d\x39\x67\x12\x08\x6f\xca\xde\x2b\xd4\xbb\xde\x9e\x0a\xab\x34\x10\xf1\xd3\xef\x19\x89\xf7\x21\x10\xc0\x77\x47\x03\x11\x5a\xc9\xf3\x7a\x22\xb6\x92\x37\xd8\x17\xc1\x95\x3c\xaf\x0f\xd1\x03\x0e\x8c\xf8\x44\xe7\x38\xd0\x41\x0e\xbf\xe3\x73\xdb\x3e\x57\x41\xa3\x73\x74\x89\xbf\xdb\xf6\x77\xe7\xfe\x70\xbd\xb6\x2c\x74\x85\x03\xe7\x4b\x96\xce\xa3\x9c\xa0\x6b\x6c\x44\xe8\x8b\xc1\x39\x34\xe1\x88\xe1\xaa\x40\x5f\x70\x86\xef\x9c\x29\x47\xfe\xac\x59\x00\x89\x19\xb8\x72\x32\x92\xa7\xf1\x3d\x01\x1c\x41\x1d\xd0\x8a\xde\x72\x55\xc0\xd1\x46\x94\xe8\x31\xae\x6e\xdb\x9f\xd1\x67\x58\x28\x14\x98\xeb\xf5\xba\xc1\xae\x5e\xb6\xf7\x2b\x61\xc4\x19\xa5\x09\x0f\xa2\x07\x6d\x9b\x3a\x74\x46\x12\xf0\xd9\x34\xec\xcf\xb8\x9d\x06\xbe\xd4\x7e\x5d\xd6\xbe\xb3\x6f\x41\xdb\xde\xf1\x30\xc6\x8f\x65\xf2\xd9\x2c\x4b\xe7\x64\x77\x7f\xdf\x52\x71\xe9\x13\xb8\x2a\x0a\x00\xd1\xd9\xa6\xa2\x5c\x19\x6b\x81\xce\x84\x23\x0c\x6c\x9a\x8f\x01\x8a\x09\x6f\x0e\x64\x0d\x2b\xd0\xb7\x06\x74\x02\xe2\xdc\x24\x70\xc5\xfe\xc5\x1d\x57\x59\x38\x39\x37\x93\xd6\x7d\x55\x9d\xae\xee\xcb\xd9\xcb\x7b\x76\x0e\xc1\xec\x57\x2e\x2f\xcf\x75\x4e\x1d\x0e\x53\x44\xa5\x89\x86\xd4\x49\xbf\xf9\xd4\x99\x06\x51\xcc\x2f\x20\xe4\xdc\xa0\x25\xff\xcd\x06\x0f\x4d\x30\x75\xc2\x74\x1e\x44\x49\x8b\xcd\x62\x3e\x04\xd1\x7a\x0d\x7a\xbc\x82\x99\x6d\xbf\x63\xc2\x17\xfb\x89\x3d\xb6\xea\x31\xc6\xf9\x30\xc3\x89\x0f\x26\xb6\x3d\x71\x48\x42\x49\x06\xd8\x44\xe7\x20\x81\x68\x62\xdb\x60\xe2\x90\xef\x11\x05\x6c\x49\x74\x5c\xc8\x5e\x61\xcc\xf9\x0d\x9b\xb0\xe1\x12\x3c\x00\x4b\xce\xde\xce\x64\x16\x44\x49\x7b\xf2\x38\x89\x89\x05\xa1\x0f\x52\x7c\xc6\x2f\x06\xa4\xc2\x20\x43\x31\x5a\x42\x3f\x66\x69\xfe\x12\x24\x6a\x56\x42\xb8\x9a\xd8\x76\x27\xe0\x0d\x10\x75\x2d\x41\x08\x8b\xe2\x58\xa9\x5a\x4e\xd2\x63\x18\x80\x8c\x43\xec\xc3\x16\x1b\x50\x3c\x1a\x23\x31\xcc\x1e\xa2\xb6\xdd\x11\x9d\xfb\x2a\xdc\x40\x8b\x02\x7d\xad\xcc\xf0\x5c\x34\x20\xd8\x30\xa0\x94\xcb\x5e\x4c\x43\x8a\xff\xa5\x22\xe1\xda\x36\xa0\xf8\xb6\x0a\x66\x3a\x3c\x77\xc8\x3c\xa2\xc0\x5a\x26\xb3\x20\x09\x63\x12\x6a\x72\xb5\x50\x84\x08\xf4\x41\x86\x03\x27\x4d\xf4\xfb\x4c\xbd\x87\xc3\x0c\xac\xe4\x90\xf9\x04\x65\x24\xc8\xd3\xc4\x8f\x0a\x8e\xd0\x18\xf0\x15\x95\xc6\x5c\x63\xeb\x10\xb6\xda\xf5\x0f\x60\xfd\xa4\x0a\x6b\xcb\xef\xdb\x99\x51\x2b\xbf\x16\xe6\xb3\x79\xbd\x5e\xb3\xd6\x0f\x7b\xbe\xc7\x53\x02\xe5\x29\x97\xb2\x55\x44\xa4\x42\x85\x3a\xf7\x7c\x3b\xfc\x57\x13\x06\x83\xd7\x51\x44\xc2\xc8\x02\xb0\x42\x38\xd2\xc6\x44\x05\xc4\x28\xd0\xbb\x17\x0e\x6b\xab\x1c\x2d\xdd\xdc\x3f\x8b\x7e\x58\x7c\xa4\x28\x1f\x29\xfd\x4e\xf6\x91\x9b\x29\x6e\x0e\x14\x9b\x1d\x7e\x92\x2e\xd0\x45\xc3\x15\x17\xbf\xc9\xa2\xce\x4d\xb8\x5e\x03\xf6\x07\x77\x5c\x04\x28\xa6\xce\xcd\xc3\x7a\x4d\xa1\x73\x73\x8f\x09\xa2\xce\x4d\x8e\x7b\xec\x4f\x20\xb2\x05\x2c\xc3\x44\x81\xe4\x42\xf4\x4d\x06\x1f\x28\xd0\xc7\xa6\xe0\x50\x58\x05\x7e\xed\x64\xce\x4d\x08\x57\x99\xac\x28\xc3\x19\xaf\x27\xe3\xab\x2d\x9a\x82\x8c\xdb\x80\x6a\xa8\x30\xb9\x36\xca\xc0\xc9\x72\xc9\x86\xed\x88\xe6\x24\x9e\x5a\xf0\x18\x50\x7c\xc6\x84\xbb\xe1\xfd\x46\x04\xee\x04\xaf\x6e\x1e\xfc\x0c\xdd\x84\x7e\xc7\x2b\x78\x15\x54\xfa\x3a\xa1\x1c\x7c\x44\x09\xf2\x20\xca\xc1\x05\xff\xa1\xd6\x53\x04\x57\xd2\x8e\x3b\xe1\x71\xb7\xd9\x52\xcc\xc4\x28\x64\x6c\x14\x3c\xf4\x0d\x64\x3c\x1a\x69\xc9\x16\x95\xe1\xb7\x51\x1b\x3f\xa2\x15\xad\xd3\xf5\x1a\x5c\x55\x46\x64\x26\xb4\x14\x57\x48\x75\xce\x42\xd6\xcd\xcc\x82\x28\xe4\x5e\xa0\xa6\x45\x32\x6b\x30\x01\xac\xa5\x02\x65\x4a\x34\x56\xfe\x56\xd5\x67\xba\x7a\x05\x65\x5f\x20\x53\x1f\xa7\xdc\x4c\xf9\xa2\x17\x3f\x35\x75\x8b\xc7\x5c\xfb\x9c\x86\x9c\x21\xf0\x9f\xf7\xd5\x3c\x33\x9d\x47\x78\xfd\x1b\xb7\x71\x02\xd4\x16\x5c\x99\x38\x6a\x8c\xd1\x37\xda\xee\x7c\x01\x0b\xd9\xff\x32\xd6\x77\xe6\xa4\xdf\x70\x83\xc1\x31\x3b\x72\xa1\x8c\xb3\xeb\x46\x5f\x73\xdb\xa6\x28\x93\xdc\x1a\xb3\x25\x23\x7e\xfa\x95\x86\x4f\x44\x08\xb0\x4c\x39\xd8\x06\xb6\x2d\x7f\xd4\x5e\xe4\xb6\xfd\x4d\x34\x8d\x87\x15\x54\x3c\xba\x40\x7c\x98\x1b\x63\x19\xb1\xef\xf8\x0e\x2b\x6b\xe4\x7a\x22\x94\x6c\xc6\x3d\x4e\xc8\x43\x9b\xb6\x94\xb1\x33\x2b\x56\x82\xdd\xa9\x2d\x08\xb3\x49\xe6\x71\x63\x65\x2a\x5b\xd9\x98\xcd\x36\x4b\x2c\xd0\x9d\x33\xc5\x5f\x1a\xe3\x7b\x62\x8c\xaf\x04\x82\xad\x00\x5a\x67\x2f\xfd\x4c\x60\xbf\x2f\xc1\xd2\xf9\xd0\x5d\x3a\xbf\x74\x97\x02\x1d\x7b\x25\x49\xce\xbf\xe2\xa8\x0a\x5e\xaf\x07\x81\x41\x88\x22\xcd\x83\xc0\x48\x89\x24\x8e\x8b\x92\x89\x58\x99\x57\xaa\xbc\x92\x84\x57\xa2\xc9\x0d\x5a\xb9\x2f\x15\xf3\x7a\xe0\x22\xb5\xd7\x42\x41\xef\x6a\x9c\x65\x7b\x45\xd9\x20\x5d\xaf\x3b\xa7\xb0\x5a\x01\x1f\xa9\xc6\x10\x4a\x6c\xcb\x61\xb5\xf0\x51\xb8\xf2\x85\xf7\x11\xac\x16\xd9\x01\xa7\x4c\xec\xdf\x40\x41\xb8\x72\x84\xf3\xa3\x23\x96\xd3\x67\xa9\x73\x2c\x2b\x0e\xcc\x20\x62\x15\xb6\x89\x18\x3d\x53\x11\xf8\x47\xc9\x12\x11\xff\xcd\x65\x89\xb4\xb6\x07\x8a\x15\x30\x1a\x4b\x39\xc5\x6b\x4d\xb9\x91\x48\xf5\x6c\xc6\xcd\x23\x70\xda\xed\xa2\x18\x77\xbc\x56\x26\xa8\x54\x2a\x4b\x51\xd0\xed\x22\x2d\xb7\xb0\x46\x73\xf2\xab\x14\x10\xaf\xd7\x20\xe6\xbc\x75\x94\x8f\x31\x41\x3b\x3b\xc1\x7a\x9d\x08\x9c\x7c\xb9\xe5\xe9\xa4\xa2\x5c\x84\xa9\x43\x6c\x3b\x02\xa9\x73\x5f\x21\xfe\x2c\xa8\x39\x0d\x6e\xeb\x3d\xef\x71\x54\xeb\x71\x53\x07\x37\x9b\x5f\x0e\x5e\xc2\xb7\xa9\xb2\x51\x11\x6b\x54\x02\xa2\x6a\xa3\xe4\x21\xa5\xe7\x7b\x5e\x0f\x79\x5e\xdf\xf7\xbc\x7e\x03\x46\xb9\xc4\x75\xd3\x58\xe5\x03\xdf\xeb\x0f\x38\x18\x97\x37\x28\x0f\x69\xc2\xc9\x4a\xa0\xbb\x99\x88\x42\x26\xcc\xc2\xfe\xbe\xbf\xbf\xaf\xd0\xc5\x4c\xfc\x70\x01\x12\xd5\xf7\x8f\xfa\xe8\x68\xe0\x1f\x0d\xf8\x61\xe9\x99\x8b\x7c\xe5\xbc\xd6\xe7\x06\x4d\x40\xdc\xec\x7f\x25\xd3\x98\xbb\xaa\xaf\x0a\x28\xbc\xaf\x51\x5a\xfa\x2c\xf0\x84\xaa\x26\xb5\x7e\xab\x54\x75\x5e\x13\xa3\x88\x2c\x59\x2c\x23\x62\x56\x44\x85\x23\xa3\x40\x11\x1b\xbf\x4a\x8a\x71\x02\x82\x72\xe0\x87\x11\xc8\x11\x45\xb1\xf6\x57\x13\x4f\x52\x0f\x2e\xc6\x6c\xdf\xef\x37\x60\xae\xf3\x31\x78\xce\xf8\x7e\x5f\x8e\x81\x27\x18\x4c\x5f\x42\x28\x1c\x1c\x55\x6d\xba\x06\x03\xd6\xb0\xa6\x31\xd2\xc7\x28\xb4\xc4\xc1\x0b\x5c\x9d\xe3\xda\xf8\x20\x26\x01\x6f\x3a\x3c\x4f\x70\xa7\x5a\x5a\xfd\x3b\x4e\x9d\xc6\x05\xf5\x72\xbd\x9e\x54\x06\x5a\x37\xac\xb6\xfd\x25\x3c\x5c\x16\x90\xa1\x51\x82\x4d\xcb\xa2\xfe\x90\xf8\xa6\x5b\x7c\x6f\xcc\x85\x69\x26\xdb\x2f\xb5\xcf\xbb\x9c\x38\x1e\xea\xb8\x6a\xb9\x25\xef\x8d\x84\xc9\x96\xeb\x1b\xf0\xc0\x44\xd8\x69\x79\x95\x34\xc0\x71\x44\xc5\x9b\xde\xe6\x1b\x44\x39\x50\x28\x7f\xdd\xdf\xf2\x1a\x51\xde\x46\x9e\x67\xf0\x54\x1e\x44\x47\xfd\xb1\x00\xf7\x0d\xf1\x28\x59\xc6\x71\xe9\xce\xca\xd9\x9b\xc4\x1b\x08\x39\xb4\x39\x79\x00\xb9\x4c\x20\x28\x84\xe2\xbb\x99\x38\xbf\x4b\xf1\x62\x8a\x33\x90\x82\x19\x1c\xce\xfc\xba\x02\x07\xa2\x45\x6d\xdd\x28\x81\x6f\x8a\x4a\x9c\xe8\x14\x2c\xe0\x70\xe1\x4f\x37\xc9\xd9\xf0\xc7\xaa\x02\x3c\x0a\xc5\x97\xba\x58\xe9\x6f\x51\x55\x1e\x1d\x54\xf1\x7a\xfa\xca\xbf\x79\x50\x41\xe3\xd9\x5c\xbf\x92\x80\x9c\xea\x9d\x08\xa0\xce\x14\xac\x0a\xe4\x29\x2f\x2d\xaf\x80\xe5\x43\xaf\xa8\xaf\xf2\xda\x8d\x8a\x41\x81\x19\x4a\x25\x0d\x66\x38\x02\x02\x69\x2b\x01\xa9\x90\x31\x95\x3c\xe3\x4c\x65\x4e\xd4\x71\xa5\x74\x19\x68\x7d\xb0\x57\x28\x3f\x42\x61\x3a\xb5\xb9\xfc\xf5\x45\x4d\xff\x19\xfb\x1c\x61\x9f\x29\xc7\x47\x29\x0a\xcd\x5e\xc4\x84\x36\xf6\x82\x2a\x04\x71\x11\x37\xbd\x9c\x51\xee\xa6\xd3\x89\x2a\xa1\xcc\xa0\x6d\x8b\x92\xda\x64\x44\xc7\x72\xaa\x8d\x46\xeb\xab\x92\xfe\x6b\x7c\x49\xfb\xfb\x15\x09\x8f\x94\x28\x2e\x59\x05\xc5\x45\xea\xc5\x12\x85\xd2\x82\x47\x63\x7e\xc9\x2c\x02\xc4\xa9\xc8\xb4\x14\x16\x2d\x02\x0e\x7b\x10\x24\xa5\xaa\x74\xc3\x4f\xb1\xc4\x7a\x69\x85\xe9\x4a\xb9\xcd\xdd\x44\x27\x3a\xee\xaf\x64\x10\x92\x30\x54\x50\xdd\x34\xe1\xb1\xa4\x8a\x87\x59\x14\x13\xd0\x01\x80\x60\x3a\xd2\x58\x31\x1c\x95\x5b\x36\x5e\x6f\xb9\xb2\x04\x22\x3f\xf6\x0a\x05\xf0\x55\x99\x21\x19\xab\xaa\xd1\xe0\xac\xad\xa4\xd0\xcd\x11\x3f\xec\xf9\x87\x5c\x6f\xdc\xdf\xa2\x37\x3e\x3a\xda\x58\x3e\x62\xd5\x98\x95\x6f\x0d\x0d\x67\x92\x3b\x34\x89\x5a\xd0\x7d\x43\x83\x4a\x12\x78\xce\x12\x4a\xb9\x5a\x36\x12\x6c\xf5\x72\xab\xd9\xa2\x2c\x31\xfc\xbc\xe5\x3d\x96\xd1\x12\xde\x86\x2d\x5a\xe2\xa3\xba\xbb\xe7\xfe\x91\xf4\x7a\x77\xab\xbb\x26\x6b\x5b\x04\xa2\x8d\xb6\x99\xde\x5b\x11\xca\x45\xc9\x31\x5a\xa2\x49\xd3\x2e\x14\xf9\xe6\x1e\xa4\x38\x66\x00\x22\x88\x31\x9e\x0c\xa3\x51\x3e\xf6\x41\x8c\x29\x77\x1f\xcd\x21\x1c\x26\x20\xd6\x71\x06\x87\xb1\x63\x92\x60\x07\xe3\xd8\xb9\x23\x74\xc8\xff\x15\x9c\x78\xa2\xa2\x3f\xf9\x29\x58\xe2\x0c\x44\x10\x0e\x09\x58\xa2\x1c\xe9\x37\x5b\x87\x49\xd9\x65\x0a\x66\xac\x27\xef\x79\x97\x9e\x72\x3c\x66\x41\xde\xec\x72\x28\x16\x66\xcd\xd2\x70\xf0\xa4\x8f\x8f\xe2\x06\x72\x13\x32\x2f\x18\x37\x2b\x36\xdf\x6e\x33\x3a\x44\x9d\x84\x09\xe6\x0d\x6b\x87\x37\xe6\x79\xac\xab\xb2\xba\xf4\x21\xf9\x2b\x79\xe4\x17\x6e\xae\xba\x70\x73\x8f\x7c\xcf\x35\x2e\xdc\x06\xcf\x88\x69\x95\xde\x6d\xdc\x72\x6d\xd6\xb9\x91\xa5\xda\x4f\x8e\x5e\x5f\x6e\x37\x89\x30\xb1\x2c\xf7\x1a\xba\xb1\xd7\xd4\x07\xe0\x49\xaf\x46\x71\xa3\xd4\xca\x6c\x7b\xa3\x61\xf9\xb6\x05\xca\xe7\xdf\x99\xcc\xc8\xe4\x1b\x7f\x30\xdb\x97\xf1\x48\xf5\x2c\xb5\x6c\x62\xb2\xb9\x1d\xd6\x2f\xae\x06\x5b\x36\x3f\x25\x1a\x1c\x49\x87\x06\xbe\x9c\x23\xb9\x9c\x53\xd9\x0b\x0e\xe5\xe7\xc9\x98\x41\x6c\xf8\x63\x79\x8d\x2b\xc2\x73\x55\xbb\x64\xae\xeb\x94\x2d\x67\x51\x59\x88\x66\x68\xba\xb9\xb2\x07\xc3\xd4\x58\xd9\xfd\x31\x5a\xe0\xcc\x99\x82\x1c\xa4\x10\x2d\xb9\x44\xd9\x59\x70\x35\x7c\x0c\x66\x98\x89\x06\xa5\x1b\x37\x98\x71\xe8\xbf\x29\x6c\x2d\x70\x00\x5c\x58\x44\x53\x10\x81\x45\x19\x5d\x94\x6b\xef\x3d\x8c\xf1\xc2\x08\x15\xda\x89\xc1\xb4\xea\x29\x1e\xf2\x1a\xa7\x68\x29\xbe\x08\x19\x53\x58\xaf\x43\x36\xce\xeb\x35\xff\x3e\xd4\xdf\x97\x1f\x86\x82\xa5\xe0\x09\xa2\xe2\x6b\x14\x42\x15\xc8\x4a\x3c\x07\xc0\x45\x13\xbd\x85\x75\xdc\xa2\x62\xd5\xd3\x61\xcd\xca\x09\xb5\x6d\xc0\xff\x0a\x36\x34\x45\x13\x68\xc0\xf1\xd4\x22\x5e\x6d\xe5\x39\x55\x2b\xf0\xc1\x36\xbb\x5f\x69\xfd\x71\x20\x39\xb6\x70\x43\x89\x4a\x2f\x15\x7e\x51\x26\xe7\x7b\x9f\x4f\x37\x75\xbe\x92\xbb\xf3\xef\x0b\x14\xe3\x1c\x2d\xb1\xe1\x15\x8f\x26\x78\x37\xd8\xbd\x43\xa1\xf8\x33\xe3\xda\xa4\x1c\x4c\x60\x07\xe3\x09\x3f\x09\x08\x17\x75\xd0\x99\xad\xd7\x5b\x21\x2d\x42\x7d\xd3\xc4\x7d\xd1\x2d\x38\xc6\x1d\x0f\x89\x62\x26\xeb\x75\x0e\x42\x88\x71\xb8\x5e\x5b\xbb\xc1\x6e\x64\x75\x70\x0e\x26\xc8\x8a\x2c\xae\x0d\x81\xab\x3a\x96\xb4\xd0\xae\x32\xe1\xc1\xf4\x7d\xc8\x51\x24\xb0\xec\x26\x06\x94\x8e\x9a\x95\xc4\xb6\x23\xdb\x26\x95\x0b\x30\x8c\x73\xdb\x9e\x0c\x89\x9f\x81\x19\xd7\x5e\xc5\x5c\x8e\x9b\x0c\x89\x93\xa7\xcb\x6c\x42\xb8\xb3\xb7\x1f\x03\x10\xe1\x0a\x98\x40\x0e\xcd\x2c\x11\x2b\x24\x50\x28\x56\x3e\x3b\x45\x08\x98\xa9\x25\xca\x0d\x07\x8a\x69\xf5\x66\x8d\xf1\xfb\x9c\xb1\xdb\x1c\x91\x67\x9d\xfa\xd5\x01\x6c\x44\xc6\x35\xb7\x75\x0a\x57\x2c\x15\x0b\x87\xe6\x05\x8e\x40\x0c\xd1\x1c\xbb\xc7\x0b\x75\xfd\x32\x3f\x86\x53\xb0\x18\xcd\xf9\xf5\xcb\xb2\x32\x00\x39\x32\xe1\x0f\x96\x86\x1f\x83\xa0\x06\x8b\x75\x40\x29\xe5\x64\x12\x6c\xf2\x6b\x50\x5a\x0f\x85\xb6\x61\x7a\x34\x0c\xfc\xfd\x81\x3a\xc6\x70\x8f\x86\x43\xd7\x3f\x34\xec\xaa\x06\x2f\x41\x1a\xf3\xbc\x43\xd8\xe2\x4c\x0a\xac\x68\x90\xb1\xe1\xd1\x6d\xe4\x3d\x60\x83\x36\x4d\xb3\x09\x09\x7d\xda\xc1\x78\xd7\xd9\x75\xc8\x77\x32\x29\xd0\x8a\xfd\xf1\xe5\x35\xbf\x77\xe8\x7b\xde\xa1\xc1\x2d\x37\xcc\x94\x38\x2d\x5b\x77\x56\x87\x15\x71\xe7\x4c\xe3\xe0\x2e\xb7\x6d\x85\x58\x21\xaa\x34\x2f\xec\x79\x86\x2d\xa8\x0c\x7c\x71\x99\x06\x65\x7c\x28\xca\x8e\xbf\x04\x6d\x8b\x71\xe1\x4c\x21\x53\x71\x11\x70\x20\xcf\x74\xde\x01\x1f\x91\xbe\x5e\x53\xa8\xa2\xea\x12\xd7\x8e\x3a\x68\xd3\xc6\xb5\x24\x2e\xe3\x86\x0b\xe0\x52\x2a\x83\x66\xfa\x74\x94\x8e\x5b\x75\x1e\x96\x0c\x15\x5a\x89\x0a\x7f\x29\xc6\x02\x50\x38\x4a\xc7\x40\x9a\xeb\x66\x10\x16\xa8\xce\x92\x52\x9c\x83\x00\x09\x8d\xb3\xb8\xa1\xe3\x60\xa5\x25\xde\x1f\x67\xb0\x2d\x01\x64\xc5\xed\xcb\x96\x3a\x68\xb5\xfa\xa4\x13\x3b\x77\x71\x7a\x1b\xc4\xea\xab\x08\xc4\x6c\xdf\xb8\xe7\x71\x81\x63\x67\x99\x44\x93\x34\x24\xad\xb8\x44\x26\xc4\xae\x5e\x7a\x21\x9a\xe1\xd1\x18\x4d\xb1\x7b\x2c\xb1\x75\x40\x88\x45\x09\xf0\x58\x34\x72\xa1\xaa\x0c\xb9\x66\x62\x36\x9a\x8e\xf1\x02\x71\x33\xf2\x85\x6d\x03\xb3\xdc\x04\x2c\x51\x66\xa6\x40\xc6\xfe\xd1\xb4\xdb\x2d\x0c\xb3\xf1\xe9\x90\x55\xe5\xcf\x8a\xb1\x82\x6c\x39\xf0\x3d\xaf\x8c\xec\xd0\x1f\xf8\x7d\xcd\xe9\xfb\xfe\x7e\x9f\x93\xc4\x4b\x5c\x06\x34\x49\x68\x5c\xa1\xfe\x91\xf2\x19\x90\xc0\xf6\x8c\x48\x02\x49\x24\x28\x97\xd0\x87\xc1\x77\x54\xa2\x20\xa2\xa5\xe9\x4d\x30\xc1\xbb\xff\xf8\x01\x8c\x7e\xb0\x7f\xfd\xef\xf1\xfa\x1f\xe1\x3f\xc2\xe1\xfa\xed\xe8\x9f\x27\xe3\x37\x27\x50\xb0\xfe\xda\x5b\xb8\x7b\xa7\x68\x2f\x23\x8b\x38\x98\x10\x0b\xf5\x2a\xd4\x37\x43\x53\xb4\x68\xa0\x3e\x23\x34\xb2\xa4\xbf\x68\x93\xfe\x66\x9b\xf4\x17\x69\xcb\x58\x94\x30\x0a\x94\xce\x6c\x72\xd2\x12\xc8\xcd\xf6\x4d\xda\x53\x15\x2d\xf1\x02\x4c\x25\xf5\x21\x11\x70\x6b\x59\xa1\xbf\xa5\x41\x7f\x13\x41\x7f\x61\x85\xfe\xd0\xac\xe9\xfe\x27\x6b\xcd\xd6\x6b\xa0\x1d\x0f\x32\x19\x8d\xf5\x1e\x4f\x24\xa5\x72\xe0\x60\xd1\x86\x3b\x3c\xd1\x14\x3a\x31\x29\x54\xbb\x24\xde\xe2\xd1\xf8\x58\x92\xe2\x23\x0e\xc0\x04\x85\xbc\xa9\x62\x68\xf0\x23\x14\x2e\x8d\xd1\x14\xdc\x8a\xa3\xfb\x23\x44\x9d\x7b\x99\xca\xa9\x54\xb6\xe3\x91\x91\x2f\xbf\xf9\x2f\xab\x49\x41\x88\x12\x33\x05\xa2\x3b\x08\x75\xdd\x37\xe8\x01\x5b\x16\x3a\xc7\x2e\xfa\x8e\xdd\xe3\xef\x6f\x95\x7f\xdc\xf1\xf7\x6e\x17\xae\x1e\xf1\xed\xe8\xfb\x58\xaf\xa5\xcb\x4a\x4d\xe8\x0a\xe7\x20\x06\x11\x90\xa6\x1b\x10\x85\x1a\xde\xce\x85\xe8\x9a\x2d\xbb\xcf\xd8\x3b\xfe\xfc\xf6\x51\x15\xfa\xb9\xdb\x85\xd7\xe6\xbd\x02\xc6\x18\xdc\xe0\xc7\xd1\xe7\x31\x1c\xde\xf8\xb2\xf4\x1b\x1d\xdd\xf6\xd1\xb9\xcb\xd2\xe5\x82\xdf\xdf\xce\xc4\x08\x9d\xe2\xd1\xe5\x58\x05\xc4\xb8\x46\x57\x6c\xb0\x34\xa5\x7c\xb1\xed\x53\x51\xfc\x17\x51\xc4\x99\x9e\x23\xa9\xd8\x93\x0a\x8a\x53\x28\x05\xb9\x33\x3c\x07\x97\x28\x44\x57\xe8\x1a\x7d\x61\x34\x72\x75\x82\xcf\x6d\x1b\x3c\x74\x71\x28\xef\x98\xcf\xd1\x15\xec\x9e\xa1\x73\x7c\xd5\xbd\x54\x1d\x54\xab\xfd\xa1\xab\x73\xc1\x62\x5c\xc6\x97\x9c\x73\x75\xa9\x0c\x2c\xa9\xb4\xdd\x49\x97\x94\x88\x0a\x91\xfa\x39\xc3\xe1\x06\xc5\xa7\xb6\x0d\x52\x9c\x31\x01\x79\x86\x27\x10\x4d\xd5\x85\xfd\xcc\x58\x68\x99\x2a\x79\xd2\x92\xba\xd8\xa0\x0c\x3e\x21\xd4\xb1\xd6\x0f\x96\x54\x8f\x5a\x3f\x58\x5c\x5f\x6a\xd9\x2a\x45\x6a\x67\xad\x5f\x75\x02\xd5\xe6\xfd\x89\x50\xae\x5a\xff\xbd\xf1\x2e\x97\x6f\xde\x5a\xfe\x04\xa7\xa3\x40\x26\x7b\x68\xc7\x83\xe3\x9a\xf3\xad\x50\xbb\x76\x83\x96\x8c\x8c\x18\xaa\x65\x97\x71\x91\xfc\x44\xc6\x76\x9f\xe1\x25\x08\x77\x3d\x57\xeb\x48\x59\xde\xd9\x30\xf3\x67\x6f\x71\x3c\x2c\x03\x77\x8f\x66\x3b\xde\x78\xa8\xfb\xe8\x41\x5f\x24\x75\xcd\xa4\xac\x98\xe0\x68\x14\xee\x78\xe3\xa2\x6e\x60\x3f\x19\x5a\x96\x3f\x29\x4a\x63\x4c\xcd\x95\x9b\x63\xc7\x36\x72\xe9\xbd\x97\xf8\x2c\x68\x2e\xed\xa9\x13\x97\xb1\x61\xe7\x24\xc8\x36\x77\x6c\x49\x28\xbf\x67\xc7\x8e\x5e\xb7\x63\x47\x4f\xef\xd8\x11\x0e\x40\x6a\xee\xd8\x51\x85\x63\x46\x06\xc7\xcc\x05\xc7\x8c\xab\x1c\x93\x9d\x20\x34\xb7\x69\x65\x60\x89\x78\x1c\xf0\xdc\xe4\x7d\x6a\xf3\x66\x12\x70\x5c\xde\xc6\x9b\x99\xd0\xb2\xfe\xd5\x52\xc1\xac\xe3\xc9\x70\xc7\xf3\x27\x82\xeb\x6c\xec\xb1\xd2\xb6\xb7\x3e\x6f\x2f\x41\x79\x3c\xac\x68\x1f\xa4\x21\x60\x24\xf7\x54\x03\x23\x54\x6f\xae\x42\x38\xe5\x47\xe5\x7d\xee\x4d\xae\xb7\xd8\x09\x1e\x8d\x39\x27\x42\x21\xb6\x62\x19\x10\x6e\x86\x3b\x71\x4d\xf7\xce\x67\xc5\x40\x25\xb1\x1e\xf9\xc1\x47\x13\xcb\x22\x8e\x68\x7d\x7f\x8d\xc5\xfe\xca\x5a\x3d\x57\x63\x37\xc7\xd6\xc4\xc2\xd8\x0a\x6e\x6f\x27\xca\xe9\x79\x17\xdc\xc2\x37\xbb\x70\xe4\x8d\xd7\xeb\x41\x07\x5b\x94\xe4\xb4\x7c\x37\xf4\xe1\x2e\x5b\xb5\xa3\x70\xcc\x81\x50\xac\xe0\xd6\x7c\x19\x88\x6f\x43\xf9\xad\x53\xbe\x73\x86\x90\xfd\x4f\xbe\x34\xdf\x40\x20\x52\x4f\xbc\xf5\xda\xd2\xc9\xce\x90\x27\x0e\x37\xf7\xe7\x64\x43\xd6\x2b\xbd\x61\x84\x31\x93\xc2\x0e\x18\x8d\x25\xde\x5b\x09\xf1\x36\x55\xa6\x32\xac\x38\xbd\x45\xf1\x75\x84\x62\xb6\xf7\x2c\x31\x20\x4e\x74\x97\xa4\x19\x39\x0b\x72\x32\xb4\x22\xcb\xb7\x2c\xd8\x05\xc4\x99\x2f\x63\x1a\xc5\x51\x42\x86\xd6\x5c\x27\xca\x5d\x7a\x68\x2d\x75\x52\x4e\xa3\xc9\xb7\xc7\xa1\xf5\xc8\x53\xd0\x0c\xbb\x68\x61\x06\x19\x2c\x27\xce\xcf\x4e\x4e\x4e\x5c\x34\xc7\xc6\x62\x53\xe7\x44\xb4\xec\x5a\x77\x16\x3c\x06\x11\xce\x45\xa3\xe7\x88\x1b\x23\x76\x00\x48\xf1\xdc\xd8\x9b\x4f\x66\x5c\xde\xe4\x3b\x58\x22\x59\xeb\x0c\x45\x72\x7f\x85\x28\xe2\x83\x6b\xdb\x32\xe5\x6d\x32\x0a\xc7\xb6\x3d\x91\x7b\x5b\x8c\x22\xc5\x8e\x21\x23\xd3\x68\xe4\x8e\x47\xe1\x18\xcd\x70\x8a\x62\xf6\x25\x5e\x30\x99\xd7\xa8\x90\xb1\x55\x51\x94\x6d\x1b\xc9\x1a\xcd\xbd\x3d\xc3\x18\xb3\x4a\x86\x9d\x80\xe5\x60\x14\x04\x2c\x0b\xae\xd7\xb2\x91\x96\x05\xfd\x7a\x7b\x21\x14\xb5\x2d\x86\xb1\xde\x50\x16\xd0\x8f\x0b\xdf\x72\x15\x51\xc8\x6d\xd8\xad\x13\x06\x6d\xc0\x31\x15\x94\x40\x87\xa3\xb1\x92\xfc\x34\x0a\x6e\xe1\x4f\xd1\x6b\x05\xcc\xf8\x79\x01\x73\xfe\xac\x80\x49\xd5\x9e\xbe\x00\x73\x25\x60\x52\x34\xef\x60\x2c\xbc\x16\xf3\x0a\xd3\xcc\x2b\xc7\x9c\x4c\xe8\x29\x2a\x4c\x33\xc4\x09\x88\x91\xa0\x1b\x88\xee\xcb\x53\x0d\xba\xc3\x20\x6e\xa4\xe2\xb8\x89\x8a\xe3\x4d\x2a\x9e\x09\xf2\xbd\xb3\x78\xb0\x6e\xf2\xd0\x0e\xc1\x6c\x18\xfb\xd6\x3f\xc1\xd0\xb7\xba\xb1\xa4\xd1\xae\x05\x2d\x74\x07\xd1\xa3\x09\x45\x6c\x90\x37\x65\xe4\xad\x36\xf2\xc7\xca\xaa\xe4\x7b\x6b\xf5\x36\xa8\x2d\x19\x75\x00\x6e\xd1\x04\x0e\x47\x93\xb1\x3f\x2a\xc5\xc8\x1b\xec\xa2\x07\xec\xa2\x73\x26\xf8\x3e\xbc\x55\xdf\x1e\xc3\xd5\xad\x41\x9a\xb3\xe1\x83\x2f\xee\xb2\xbe\xa3\x4b\x5e\xd2\x6c\x38\xf1\x95\xe1\xdf\x03\x34\x65\xe4\xcb\xf5\x1a\x7c\xc7\x4b\x90\x02\xa3\x04\xd6\x75\xd7\x7f\x80\x10\xe9\xd6\x41\x8c\xf1\x0d\x7c\xc0\x11\x98\xa0\x07\x74\x0f\x75\x90\xe6\x73\x41\xc3\xaa\xf4\x1b\xc4\x3e\x3b\x57\xf0\xdf\x65\x8f\xdb\xe7\xba\x17\x57\xd8\x3b\xbe\x7a\x8b\x95\x48\xb8\xe3\x1d\x5f\x09\xe4\x10\x59\xd6\xe5\xe8\x6a\xbc\xad\x8c\x07\x7c\x83\xbf\x2b\x98\x90\x76\xbd\x72\x56\xf5\xe6\xb6\x26\xd4\x17\xa5\x51\x49\xc3\x51\x52\x28\x5d\xd8\x96\x27\x14\x2d\x7c\xe3\xeb\x3d\xb1\xf1\x11\xd0\x1b\x1c\xc0\x0d\xb9\x65\x7f\x20\x63\xa6\xf1\x3b\xe4\x5d\x67\xb7\xc4\x42\x4d\x2b\x46\xce\x52\x69\xb4\xa9\x1a\x29\x7d\x19\xb8\x71\x66\xd1\xda\xa6\x1d\xb4\x76\x83\xdd\x5b\xab\xa3\x9c\x33\x57\x52\xb3\x66\x05\x16\xe2\xea\x15\xdf\xba\xb5\xf8\x65\xf3\x30\xdd\xb0\x68\x22\x98\x56\x2c\xbc\xac\x5d\x1d\x29\x4f\xb3\x5e\x6b\xd7\x52\x8a\x9a\x28\x69\x93\x21\x11\x6a\x1d\xbf\x93\xd8\x76\x45\xaf\x27\xfa\xa0\xe0\x57\x09\xf4\x4b\x2f\x51\xbf\xec\x0e\x6b\x68\x12\xcc\x89\x6d\xa7\x4d\xaa\xce\xc8\xb0\xa1\xac\xa0\xb5\x72\x75\x53\x6f\x70\x20\x67\x6a\x43\x49\xc6\x67\xaa\xff\x07\xc0\x6e\x5e\x11\xfa\x7f\x08\xbb\x19\x84\xcd\x91\x95\x2a\x98\x99\xac\x09\x10\x11\x5c\xa2\x66\x12\x8e\x9a\xb9\x1d\x32\xb3\x57\x0f\x15\x56\x23\x52\xaf\xc7\xba\x16\x24\x93\x59\xd5\x61\xb1\xa1\x77\xb4\xde\x3d\x46\x49\x12\x3e\x95\x6a\xc9\xbf\x77\xe4\x7b\x3d\x51\xf3\x53\x37\xf0\xaa\xe6\xdb\xe8\xee\x95\x83\x2a\x3e\xb1\xd8\xff\x37\x55\xfa\x94\xda\x53\x57\x1a\x47\xc9\xb7\x57\x57\x2b\x3e\xda\x5a\xf1\x53\xae\x4d\xba\xe2\x34\x7e\xce\x57\x6f\xb3\xde\x27\xea\x7c\x4d\x60\x01\xaf\x77\xc0\xa3\x02\x29\xf8\x62\xc5\x45\x56\x6c\x4f\xfb\x92\x46\x09\x3d\x7d\x32\x08\x82\xc6\x33\x3f\xf0\xbd\x5e\x19\x33\xaf\xf7\xa2\x90\x57\x25\x1e\x87\x3a\xb6\xf5\x78\x9c\x54\xcb\x72\x48\x12\xe6\xbf\x44\x74\x56\x85\xf0\xf6\x20\xb0\xd4\x1b\x0b\x1a\xad\x55\x89\xdb\x5d\xc5\x09\x32\xbf\x4c\x37\x2e\xcd\xb6\x04\xaa\x0a\x70\x66\xc4\x3d\xc9\xcb\xcd\x3a\x1d\x06\xbe\x8e\x72\xc2\x15\x07\x81\x71\x32\x23\xa6\x79\x9d\x12\x75\x62\x94\x43\x5f\x9f\xeb\x77\x14\x08\x16\xca\xd9\x2e\xa9\xa0\xbb\x7b\x87\xbe\xd7\xab\xc5\x31\x41\xfb\x9e\xbf\xef\xb1\x61\x7d\x32\xe0\x93\xa2\xa7\x69\xf4\xfd\x59\xe7\xcf\x0d\x82\xa2\x74\x3b\x45\xd5\x23\x2f\x35\xd7\x9a\x26\x74\x92\xc6\xbf\x83\x61\xb0\x2f\x2d\x64\xc9\x8f\x9b\x98\xc6\xfe\xd3\x7b\x6a\xd9\x80\x3c\x7a\xd6\x01\x7c\x6b\xfd\xe2\xdb\xc6\xea\x9f\xbb\x8c\xee\xf3\x68\x7a\x12\x2d\x6e\x9a\xa5\xf3\x33\x89\x63\x86\xa2\x4a\xaa\x5a\x53\xa6\x59\x61\xa7\x13\xd9\xb6\xd7\xd1\xfa\x29\x93\xac\x2b\x1f\x55\x68\x5b\xe3\x6e\xa0\x48\x98\x19\x6f\x46\xf4\xc0\xee\x71\x7a\x12\x1c\xf3\xfb\x57\x8a\xbb\x55\x0c\x51\x94\x01\x8a\x3c\xcf\x1b\x78\x9e\x07\x8d\x00\xb1\x06\x90\x08\xed\x5a\xed\x28\x6f\x27\x29\x6d\x07\x6d\x81\x8a\xce\x98\x42\x7b\xc1\x1a\x63\xc1\x56\x24\xed\x9a\xde\xee\xef\xed\xf5\xf7\x87\x6c\x64\xfd\x04\xec\xed\xf5\x8e\xf6\xbb\x00\xd0\x1d\x0e\xd4\xb9\x0f\x4f\x4e\x3c\x17\x22\xfa\x5f\x9e\xdb\x1b\x74\xf7\xf6\xfb\x3d\x17\x6a\x6d\x5e\xc4\xc3\x39\x01\x41\x74\x46\xac\x0b\xcd\x46\x5e\x17\x5c\xa9\x77\x08\x37\xf9\x45\x94\x4c\xe2\x65\xc8\x83\x54\x95\x03\xab\x12\x1b\x58\x5b\xa7\xf3\xff\xd5\x41\x2d\x8c\x8f\xb5\xb7\xdc\x6b\xc2\x19\x1a\x0b\xba\xbe\x90\x5f\xb2\x0d\x46\x34\x88\xa3\xc9\x73\x3e\xc6\x1b\xf4\x1c\x3d\xb1\x92\x5f\x74\xff\xc7\xf7\x04\x17\xb6\x44\x5c\x33\x29\x88\x5a\x9b\xce\xb2\x86\x45\x9c\xe6\x7b\xa5\x59\x5c\x53\x48\x33\x1d\xc0\xac\x34\x97\x8b\x74\xf0\x9f\x13\x8d\x0d\x3b\x6c\xb6\x6e\xf3\x01\x93\x40\x33\x94\xe8\x5a\xba\x3a\xf0\x19\xda\x30\x67\x53\x02\xa1\xdc\x9a\x78\x10\x32\x3e\x06\x2f\xd9\x93\x5f\x20\x0b\x34\x4b\x3e\xb3\x8c\x4c\xb7\x70\x91\xe7\x5c\x83\xcb\xd8\x60\x47\xda\xca\x47\x53\x6c\x16\x3c\x34\x33\x00\x76\xbc\x75\xb2\xe0\x81\x9f\xbd\x8d\xbd\xaa\x91\x25\x8c\xc6\x28\xc7\xee\x71\x74\x92\x1f\x43\xe9\x15\xa3\x8e\xc5\xa3\x9c\x43\x0b\xa3\xfc\x6d\x6a\xdb\xd5\x77\x25\x75\xe7\xe3\xd2\x62\x3f\xd8\x58\xbc\xcd\x21\xb8\x7a\xf5\x70\x41\x75\x63\x26\x53\xec\xc8\xc8\x82\x04\xd4\x17\x90\x5c\x15\x64\x1b\x5d\xdc\x93\x51\x6e\xd4\xfc\xe5\xf3\x20\x7e\xce\x17\x7e\x63\xfe\xe4\x47\xdb\x16\xcf\xab\x02\xd7\x34\xc8\x34\x39\x0d\x32\xba\x45\xaa\x29\xdf\x55\xf8\x54\x99\xfc\xa4\x64\x53\xf9\x3a\xc5\x12\xf3\x9b\x49\x26\x2f\x14\x73\x34\xd9\x40\x14\x3c\x29\xc3\x04\x28\x2d\x65\x98\x14\xa5\xdd\x40\x7d\x89\x31\x0e\x5e\x24\xc3\xd4\xc3\xda\x34\xcf\x1f\xcd\xa2\x6f\xcf\x6d\xe5\x9b\x13\x28\xbf\xda\x3a\x83\x4f\xc5\x1c\xd4\x55\x2f\x6f\x5f\x5d\xef\xf2\x09\x79\xbc\x1e\x37\x67\x4b\xa5\xaf\x8d\xde\x20\x3e\xd9\x5a\xe9\x33\xfb\x4b\xbf\x07\x81\x80\xb9\x7d\x5d\xad\x7d\x5d\x97\x80\xd7\xe4\x75\xbd\x28\x7c\x5d\x0d\xe4\x77\x6f\xbf\x6a\xd9\xea\x79\x32\xbc\xed\x51\x0f\x3a\x7f\x3d\xff\x3b\x57\xf6\xef\x4b\x40\x01\xaf\x37\x10\x88\x02\x5e\xaf\x27\x20\x05\x78\x3c\xf5\x50\x06\x44\xe1\xa0\x02\x3c\xbe\x3c\x0f\xd3\x3e\x38\x14\xb0\x02\x7b\x47\x02\x55\xe0\xe0\x00\x72\x40\x81\xfe\xbe\x80\x13\x38\x38\x92\x70\x02\x03\x57\xc2\x09\x30\xce\x7b\xa3\x90\x86\x1f\x94\x61\xde\xb9\x74\x5f\xf9\x8e\x05\x42\x0e\xba\x94\x36\x7d\x57\x3c\xa1\x07\xd1\xb5\x34\xf6\xfb\x2c\x11\x4b\xd0\x17\x7c\xc9\x31\x02\xae\x9d\x29\x3a\xc3\xdf\x9d\x29\xfa\x86\xa9\x8a\xf7\xfe\x15\x53\xe7\x2f\x57\x97\x17\xe8\x5f\xf8\xab\x6d\x7f\x75\x04\x58\x70\x34\x7d\x44\xef\x70\x08\xac\x9b\x59\x14\x86\x24\xb1\x20\xba\x60\x8f\xd5\x38\x3c\x1f\xf1\xaa\x70\x16\xd2\x10\xfa\x63\x7e\x2e\xac\xb2\x6f\x63\x82\x3e\xe1\x18\x58\x39\xaf\x61\x27\x23\x77\x51\x4e\xb3\x47\x0b\xa2\xf7\x65\x32\x13\x7d\x7e\x63\x8f\xe9\x62\xa7\x4c\xf9\x09\x6f\x20\x62\xfc\xd8\x74\xf7\xfe\xcd\xb6\x3b\x9d\x2b\x67\x8a\xfe\x8c\xa9\xf3\x3f\xe2\x1b\xf4\x33\xee\xfc\x79\xbd\xee\xfc\xb9\xfc\xb8\xfa\xc4\x23\x48\x9f\xcd\xa2\x38\x44\x3f\xe0\xc4\xb6\xf3\x26\xe5\xcd\x41\x07\x9f\x83\x53\xb0\x2a\xf8\xce\xb9\x6a\x36\xc3\x3a\x2d\xf7\x56\xb9\xc3\x1f\x14\xd0\x61\x9c\x86\xfd\x0b\x61\x45\x99\x5d\xea\xa3\xbf\x80\x9f\x10\x85\xad\x44\x3b\x06\xfc\x34\xa2\x63\x74\x2a\x33\xa1\xc4\xb6\x49\x07\xe3\x9f\x6c\xfb\x94\x65\x44\x09\x2c\xfc\x53\xf4\xef\x06\x9f\xe9\xf7\x23\x32\xc6\xe7\xe0\x9b\xe1\x77\xa2\x81\xeb\x9c\x9b\x6f\x98\x20\x5a\xa0\x5f\xf0\x8f\xb6\x2d\x47\xdb\x18\x39\x47\x85\xb5\x1f\x6e\x2e\xb1\x8d\xdc\xa4\x68\x84\x44\x35\x55\x66\xdf\x0a\xf4\xa1\x8a\x9e\x98\x54\xbc\x43\x7f\xb2\xed\x0f\xe0\x37\x9e\x8c\xee\xb9\x2c\x86\x6f\x84\xb3\x36\xba\x07\x09\x44\x19\x78\x8f\x28\x1c\x82\xc4\x21\x9a\x7e\x38\xf4\x39\x7a\x07\x6d\x9b\x8c\xde\x8d\x47\x74\x6c\xdb\x40\xfe\xc2\x22\x5a\xf0\x39\x48\xb4\x1b\xc0\x6d\x4c\xfc\x07\xe0\xf2\x08\x81\xdc\x5b\x9a\x7f\xbb\x5e\xb3\x81\x7d\x87\x1e\x80\x87\x56\xdc\xd1\x5e\x15\xe0\x42\xf4\x83\x6c\x28\xf4\x4f\xe5\xaf\x02\xfd\xbd\x6e\x63\xc8\x36\x1b\x8d\x8d\x89\x12\xbc\x00\x14\x3f\x72\x74\xe4\x08\xbb\x28\xc5\x2a\x30\xe4\x71\x7a\x12\x1d\xc3\x0f\x80\x09\x92\xc9\x28\x62\x07\x19\x3a\xca\xca\x00\x92\xa4\x40\x7f\x6d\x98\xc4\x8f\xe6\x35\x06\xbe\x01\x3c\xb8\x5d\xe9\x50\x22\xfd\x49\x7f\xb2\x6d\x36\x42\x44\x20\x13\xff\x86\x08\xe4\xa6\x96\x80\x72\xd4\x3a\xa9\xef\xe0\xbf\xdf\xf3\x1f\x32\x8d\x8d\x1d\x0f\xde\xf7\x6e\x3c\x22\x63\xb8\x5e\x53\x58\xa0\xbf\x6c\x62\x5e\x10\xfc\x58\x9d\x13\x4e\x81\xb2\x3c\xca\xcb\xfb\x0d\x51\x58\x52\x30\x31\x9c\x5e\x92\x4a\xbe\xca\x84\xad\xd7\x95\x09\xe5\x83\x9e\x14\x05\xfa\x9f\x66\xa0\x46\x94\xe0\x33\xc0\x5a\x02\xd5\xd1\xd1\x3d\x4e\x0c\xf8\x08\x5e\x0b\x4e\x04\x84\xc4\x7a\x4d\x31\x7e\xc7\xff\x0d\xd6\x6b\x75\xe2\x2b\x05\x83\x02\xfd\x6d\x6b\x2d\x9c\x22\x51\x84\xcf\x40\x32\xfc\xcd\x17\x35\xa6\xac\x46\x76\x32\x55\xa7\x5d\x76\x40\x15\x1d\xc3\x91\x08\x6e\xb1\x5e\x27\x7c\xfc\x7f\xe2\x7d\x4d\x45\x95\xef\x47\xb4\x9c\xe4\xb4\x68\xfd\xb8\x5e\x83\x14\x80\x6f\xa6\xff\xb5\x74\x96\xa9\x2c\x18\x79\xaa\xd5\xe8\x30\xc0\x12\xbc\xb8\x3c\xd8\x1a\x26\x9a\x1d\x4b\x68\xe6\x09\x9e\x6c\xca\x4d\xcd\x4a\x5a\x64\x78\xdf\x27\xe2\x34\x24\x08\x49\x9a\x1e\xff\x86\xf8\xb2\xd3\x74\x22\x7e\x8e\xde\x8d\x39\x95\x81\x92\x6c\xf8\x5a\xfb\x41\x09\x74\x6c\x21\x25\x50\x63\xc1\xb4\x13\xdb\xfe\xd9\xb6\x7f\x00\x3f\x35\x99\xaf\xe6\x84\xfa\xb4\x80\xe8\xdf\xdc\x13\xfc\xa5\x00\x47\xd2\x1d\xe8\x1b\x5b\xae\x97\xce\x14\xff\x05\x5d\x3b\x53\xfc\x01\x29\xbb\x65\xb6\x79\xe1\xff\xe1\x8f\xfb\xec\xf1\xaf\xe8\xca\x99\xe2\xbf\x31\xce\xd9\xe1\xc8\x3f\xb6\x9d\x82\x9f\x90\xd5\xb4\x27\x59\xe8\xaf\x9c\xc0\x67\xce\xb4\xc9\x91\xfd\xdf\x20\xe4\x1e\x32\x10\x45\x20\x72\x3e\x74\x23\xe7\x97\x6e\xe4\xbc\x7f\xd3\xf9\x11\xad\xc4\xf4\xf8\xdf\x8a\x92\x1f\xfc\x2f\x36\xe3\x9d\xa1\x28\x3f\xe3\x57\x0e\x57\x8b\x8c\x04\x21\xdf\x02\x15\x9b\x45\xdc\x36\x13\x49\x2b\x39\x24\x0c\x3f\x90\x84\xdb\x41\xfc\x22\x14\x19\xdb\x2a\x32\x00\xa4\xd0\x32\xc9\x27\xe9\x82\x15\x97\x57\x30\xcc\x09\xc1\xee\xf1\xff\x2a\x2a\x20\xe4\x18\x86\xe0\x7f\x47\x44\x84\xad\xd5\xe4\x4e\xf0\x67\x10\x3a\x39\x4d\x33\x02\x51\xc6\x3e\xa1\xea\x60\x7a\x92\x91\x63\x38\x05\x94\x8c\x32\xf1\x11\xf7\xdb\x51\x1d\x96\xf4\x68\x21\xb6\x74\x9a\x15\xad\x9f\x10\xe9\x62\xcb\x82\xc3\x4f\x23\x32\xf6\xd9\x3f\xf8\x1b\x9b\x6a\xf4\x8d\x3c\xbe\xaf\x7d\x14\x4d\x41\xe7\x17\x36\xb8\x75\xba\x27\xa6\x32\x47\x6c\x3d\x8c\xdc\x75\x07\xda\x51\xd2\xfe\x04\xa3\x29\xf8\xc4\xf8\xb6\x11\x7b\x99\x16\x68\x99\x93\x2b\x42\xa9\x09\xa0\x0d\x57\x3f\xe3\x8e\x2b\x5e\x45\xf3\x85\xe9\xe6\xc2\x5f\x79\x85\x9c\xdd\xb2\xa3\x75\x24\xcb\xa7\x2f\xa1\xe9\xf0\x1c\x10\xe8\xff\x1d\x9c\x0b\xe7\xbf\x02\xd5\x1c\x1e\x3f\xa0\x0d\xe8\xca\xbf\xa3\xad\xfe\x62\x7f\x41\x0d\x60\x88\xfe\xff\xd4\x52\xc5\x5c\xe4\xfe\xdf\x0a\xc1\x08\x12\x82\xab\x82\xcb\x95\x33\x05\x7c\xe7\x33\x26\x31\x21\x46\xdf\x9a\xcb\x6b\x98\x56\x56\xd2\xad\xf4\x13\x43\x5f\x6d\xbb\x2c\x0f\x74\x7e\x5c\xaf\xf3\x86\xbb\xb7\x6f\x40\xdf\xbb\x09\xcf\x5a\xab\x83\xff\x05\xc4\x96\x63\xad\x0a\xfe\xb4\x0a\x7c\x52\x18\xcf\xa2\x61\x62\xb5\x41\x88\x2c\x26\x7e\xf2\x63\xa5\x94\x3c\xb7\xe8\x14\xd9\x16\x3c\x22\x63\x14\x61\xef\x78\x83\x13\x46\xc7\xca\xa5\xb1\xe4\x88\x91\xa0\xec\x29\xc8\x30\xdb\x3b\xbc\x31\x02\x77\x80\xf1\x6f\x7d\xe5\xcf\x77\xd5\x5f\x0c\x73\x92\x39\x7f\x5f\x81\x13\x96\x1b\x65\x93\x01\x28\xc7\x19\xca\x6a\xd6\x08\x10\x75\x7e\x61\x42\x82\x26\x55\x88\x58\xdd\x98\xa2\x7f\x49\x0b\x8d\xaf\x02\x3e\x13\x19\xe2\xdb\xe8\x62\xac\xa2\x57\x1a\xa9\xe8\xc2\xcc\xa3\x82\x38\x40\xb4\x04\xdf\xf4\x1a\x65\x4f\xec\x60\xad\x22\xa4\x30\x16\xb7\x04\x52\xa6\x97\x43\x2b\xe1\xe1\x34\x86\xa6\xb4\xdd\x77\x7b\xbe\xe7\xf6\x50\x09\x47\xb8\xef\x7b\xee\xbe\xf6\x41\x29\x6d\xfb\x15\x92\xc1\xc0\xf7\x7a\x83\x32\xaa\x79\x2d\xa0\xa7\x37\xd8\xf3\xbd\xc1\x1e\xf2\x06\x87\xbe\x37\x60\xef\x8f\x7c\x6f\x70\x54\x22\x1d\x18\x97\x9e\x7b\x47\xfe\xde\x51\x83\x9b\xb3\xf4\x75\x71\xfd\x03\x17\x1d\x1c\xf8\x07\x0a\xf1\x4f\x22\x1d\xf4\xfc\xa3\x5e\x73\x3c\x84\x7a\x3c\xcf\x67\xe2\xb1\x0e\xd4\xed\x69\xbf\x0a\x00\xc0\x95\xe6\x81\xd2\x94\xe4\xf2\x5c\x16\xcb\xf8\x07\x3c\xc6\xed\x8f\xcb\xe9\x94\x64\xf2\xe0\xb7\xc7\x0e\x7e\x49\xe5\x45\x88\x13\xe7\x5d\x40\x83\x9f\x23\xf2\x80\x66\x38\x73\x4e\x7f\xfc\xd9\xb6\x63\x27\xca\x79\xca\x14\x4f\x8c\x29\xe5\x2a\x0b\xee\x09\xf5\xf3\xc7\xf3\x5f\x34\x42\xde\x2f\x42\x0b\x1f\x77\x30\x9e\x40\xb4\x32\x8a\xf7\x27\x85\xf4\x87\x15\x48\x0c\x99\x73\x76\x79\x71\x75\xfd\x55\x86\x04\x16\x99\xb8\xb7\x1f\xab\xad\x69\x91\xcf\x6c\x7b\xc6\x31\xd2\x72\x1e\x65\x60\xa1\xdc\x0e\x91\x52\xff\xfc\xf4\x64\x8c\xa3\x4e\x42\x1e\xda\x13\xd0\x83\xda\xe6\x53\x4a\x1d\xce\xed\x23\x25\x9f\xca\x28\x5a\xd5\xf6\x34\x85\xc4\xd6\x96\x5e\x1d\x8c\xa7\xb6\x5d\xb2\xd9\x9a\x71\x57\x24\xcd\x63\x4c\x71\x1c\xcb\x44\xa3\x56\x94\xf0\xa8\x37\x19\x9b\xb7\x14\xd4\x62\x69\x67\x1c\x61\x82\x3c\x80\xa5\x58\xa9\x13\x08\x41\x00\xf2\x9d\x04\x42\xe9\xd1\x14\xca\x5a\x16\xf2\x49\x7a\xd1\x24\x6f\xf3\x63\xc8\xfd\xb6\x7e\x8a\x12\x7a\x08\xe6\xdd\x2e\x9a\x39\x77\xea\x31\xe9\x76\x4b\xe5\x63\x5c\x14\x25\x84\x8d\xd9\x7f\x23\x2c\xb2\x61\xbb\x51\x0d\xa1\xed\x0d\xfa\xbe\x37\xe8\x23\x6f\x30\xf0\xbd\xc1\x60\x1b\xbc\x45\x89\x7c\xfa\x5c\xdc\xd7\x92\x90\x3a\x82\xe4\x19\x25\xa2\x95\xa2\x4d\x5f\x90\xbf\xa6\x55\xe9\x5c\x5f\x6d\x44\xa9\xdf\x3c\xda\x80\xf3\x1d\xf4\x20\xb0\x38\x2a\x64\xbf\x67\xa1\xc1\x33\x7a\x69\xc6\xbe\xeb\x7a\x1b\x91\xa8\x74\x37\x83\x9e\xef\x0d\xb8\xee\xa6\x1e\x4c\xb5\x52\xd9\xfe\xc0\x42\x87\x7f\x64\x65\x5e\x73\x65\x1f\x13\xea\xed\xd7\x8c\x2e\xff\xd3\xaa\x36\x63\x67\xab\xaa\xfe\xf0\x21\xec\x6f\xad\xea\xb0\x66\x75\xfc\x9f\xd6\x34\x68\xae\x89\xad\x8f\x3f\x7c\x00\xf7\xb6\xd7\xf5\x87\x8f\xe0\xfe\xf6\xba\xfe\xe8\x21\xdc\xc4\xca\xfe\xc3\xaa\xd2\x51\x6a\xcb\xda\x0e\x9f\xb7\x30\x12\x7e\xfe\x87\x62\x73\x1c\xb8\x10\x34\x28\x44\xf9\xf6\x78\xb4\x27\xd1\x55\x0f\x85\x2e\x94\x6d\x97\x13\x69\x97\x24\x54\xa1\xec\xc7\x0c\x77\x12\xe7\x74\xc2\xce\x37\x7f\x13\xd2\x9f\x6d\x5b\x95\x67\x2b\x4a\xda\x09\x9a\xe2\x80\xb1\xd6\x5f\x48\xf0\x0d\x2d\x9a\xdc\xda\xd1\x1c\xc7\xce\x72\xca\xcf\x34\xb5\xb8\x67\x7f\x98\x85\x13\xba\xc3\x1b\x91\x85\xa3\x29\x58\x32\x31\x51\x32\xd9\x69\x79\x0f\xd1\x11\x7b\xcc\x1c\x4c\xa4\x4e\x90\x35\x9e\x07\x0c\xe6\x41\xeb\xb9\x3f\xe8\x50\xa3\x5e\x8c\x35\xc2\xc0\xf6\xd8\xc3\x31\xb7\xa3\xda\x28\x0e\xc9\xb8\xc3\xb7\x78\xc3\xdc\x4b\xe5\x41\xf7\xe8\x0e\xc5\xa8\xe3\xb2\x49\x6f\x85\xb6\x3d\xb3\x6d\x90\x03\x90\x09\x14\x84\xb3\x52\xab\x00\xee\x2b\x0d\x2d\x25\xce\x3b\x88\x02\xe7\xe2\xfc\xfc\x1d\xee\xb8\x28\x02\x23\x4b\x68\x2a\x2d\xc4\x8e\xbb\x16\xb2\xee\x08\xb7\x4a\x20\xd4\x1a\x6f\xe2\x86\x51\x7c\x5b\x89\x6f\x4d\x47\x64\xdc\x4a\x01\x45\xc4\xc8\x4b\x51\x24\xc7\x93\x32\xe9\x7b\xc1\x64\x65\x79\x63\x3b\x65\xa2\xb7\xf8\xc5\x37\xe1\x4c\x9c\x78\x52\x79\x29\x3b\x1d\x91\x31\xff\x5c\x9d\x38\x58\x33\x30\x26\xc2\xd7\x36\x55\xf7\xf7\x46\x50\x75\x44\x05\xe2\x18\x3b\x67\x98\x00\xc9\xca\xfe\xcc\xf5\x07\x2e\x1a\x1c\xfa\x83\x43\x61\x85\x56\x05\xdb\x11\xd2\xa6\x8a\x8b\x50\x0f\xdc\xda\x0c\x08\x7d\xa8\x24\x4c\xee\xea\xa1\x67\xe7\xff\x2f\x06\x79\x1c\xcd\x07\x64\x06\x21\x49\xa3\x3c\xe1\x77\x8e\x28\xea\x78\xf5\x20\xd6\xe5\x58\xb0\x3e\xd7\x43\xcc\x3e\x1d\x9b\x63\x4f\x09\xd5\xae\x72\x46\x94\xc8\x02\x7d\x19\x2a\x71\xd0\xd7\x77\xab\x5c\x3a\xb2\xd0\x6a\x1a\x07\xf4\x73\xb0\x68\x08\x3a\x93\x73\x48\x30\xd3\xb2\xb3\x9d\x0a\x55\x65\x04\x62\xc3\xf8\x29\x00\x31\x62\x2d\x00\x39\x8a\x51\x8c\x28\x72\x91\x87\x0c\x7b\x88\x91\x37\x86\x28\x17\x92\x59\xbf\x0f\x81\x25\xab\x14\x42\x59\xdd\xdb\x47\x40\x31\xf5\xfd\x7e\x1f\x0d\xfa\xfe\xa0\xaf\x04\xb0\x3d\x7f\x9f\x53\x41\x3d\x14\xed\xd3\x58\x3d\x47\xc2\x64\xa1\xd6\xe7\x27\xec\x3c\xb4\x09\xdb\x2b\xec\x39\x54\xbf\x4a\xb3\x90\x02\xad\x44\x17\xfa\x47\xbe\x79\xe7\xfd\x44\x3c\x59\x89\xf0\x72\x58\x36\xd8\xc4\x4e\x27\x09\xcd\xa2\x6d\x0d\xd6\xe6\x76\xee\xa1\xef\xb9\x86\x6f\xf5\x13\x51\x65\x65\x75\xea\x36\xba\x2f\x77\x9a\x23\x49\x30\x7b\xde\x66\x1b\xb6\xa9\x51\xf2\x2d\xea\x82\x00\xe5\x38\x11\x9e\x49\x11\x8f\xc6\x99\x81\x9c\xed\x4d\xab\x02\x85\xd8\x3d\x5e\xaa\x71\x0d\x8f\xa1\x3e\x85\x80\x00\x73\xa4\x39\xbc\x1c\x85\xdc\xf0\xc0\xb6\x53\x30\x11\x90\x67\xb2\xbf\x93\xa2\x82\x65\xa2\x0e\xc3\x7b\x9e\xbf\xe7\xd5\x51\x7d\x9e\x88\x86\x6b\x8c\x77\x43\x5f\xf9\x49\xff\xd5\xc3\xfd\x1a\x18\xa9\x3d\xe9\x39\xac\xf6\x78\x7e\x94\x4d\x25\x78\xb9\xb6\x04\xf8\x6a\xe2\x50\x4e\xa3\x24\x88\xe3\xc7\x86\x3b\xff\x48\x42\xbf\x2a\x90\xce\xf5\x3a\x51\x3f\xd9\xc2\x6f\x50\x9d\x90\x96\xa9\xf0\xe5\x28\x8c\x41\x79\x1f\x55\xa2\x27\xf1\xcd\x03\xc0\x0d\x9c\xc9\x72\x3c\x18\x77\xf7\x09\x7a\xe5\xd7\x42\x13\x29\x3f\x56\x03\xaa\x90\x1c\xe5\x01\x4d\xe0\x30\xd6\x22\x14\xd6\x63\x06\x3f\x63\x6e\xa1\xfc\xb3\x45\xf4\xd8\xdd\x9f\x05\xe6\xfb\x3f\x76\x3d\xf7\x1f\xce\x3f\xc2\x2e\xe0\xff\xc2\x21\x68\x7f\x4e\x6f\xa3\x98\xfc\x63\xf7\x1f\x0f\x5d\x38\x6c\x5f\x05\xd3\x20\x8b\xfe\xb1\xbb\x2b\x7c\x6d\x12\xd3\x82\x2c\x32\x2c\x31\x16\x41\x78\x9e\x34\x1b\x63\xbf\x8e\x8f\xf0\xbb\x33\x69\xd9\xe2\xfa\x5e\xdf\xd5\x38\x95\x25\x79\xbd\x4a\xc3\xf2\xff\xa0\xe7\x57\x34\xd8\x16\xea\xfe\x95\x7d\x77\x9f\xed\xfb\x53\xd6\xcb\xa6\xe1\xc2\x27\x32\x7d\xed\x46\xcf\x07\x1e\xf1\xaf\x79\x8f\xac\x9a\x21\xc3\x93\xd1\x8a\xcd\xba\xbf\x46\x77\xb3\xd7\x56\xde\x2b\x2b\x3f\x4f\xc2\x5a\xd5\xfd\x7a\x90\x51\x61\xc6\x00\xac\x20\x7f\x4c\x26\x1f\xe5\xfd\x86\xf8\x48\xe8\xfc\xf8\x47\xb5\x1d\xb2\xb4\x09\x23\xc0\xdb\xef\x95\x91\x54\xa4\x4f\xac\x32\xb9\x38\x94\x60\x62\x12\x95\xe6\x70\x5f\xba\x56\x32\x4e\x15\xe3\x1c\x58\x91\xae\x10\x2d\xd9\x73\x25\xd2\x06\x9a\xe0\x40\xa8\xe1\x50\x88\x57\x67\x57\x57\x5f\x97\x31\xf9\x14\xe5\xd4\xef\xb8\xe8\xec\xea\xea\x8a\x3e\xc6\xe4\x1d\x99\xc4\x41\xc6\x63\x6f\xf9\x1d\x8f\x25\xff\xcc\x18\xad\xc8\xe6\xa1\xb3\x38\x22\x09\xfd\x4a\x26\x54\xa5\xbc\xbb\xfc\x5c\x7b\x14\x55\x1a\x09\xd7\xe9\x37\x92\xa8\x8a\xde\x05\x34\xb8\xce\x82\x24\x9f\x92\xec\x23\x25\x73\x95\xef\x7d\x14\xeb\x5a\xfe\x7c\xfd\xf9\xd3\x69\x1c\x9f\xa5\x71\x2c\xd0\xd3\x55\xe2\x66\xca\xfb\x34\x9b\x9f\xc7\x84\xd1\xab\x4a\xba\x22\x2c\x8f\x91\xf8\x99\x84\x51\xa0\xea\xff\x1c\xcd\xc9\xf5\xe3\x82\xf0\x81\x60\x6f\x2f\x82\x39\x09\x2f\xd2\x90\x30\x19\x8b\x3d\xa7\xa1\x1e\x95\x2f\x41\xc4\x7a\xfb\xef\x25\xc9\x75\x0f\xbf\xc4\xcb\xbb\x28\x29\x7f\xe9\x82\xae\x7e\xfe\x20\xb4\x6c\x2a\xe7\xd5\xcf\x1f\x44\x9c\x33\x23\xe1\x4b\x40\x67\x57\xe4\xce\x4c\x49\xa3\x84\x1a\xcf\xd5\xe1\xbb\xfa\xf9\x83\x18\xad\x34\xd3\x43\x75\xc5\x3d\x76\x84\xde\x4c\xa7\xb1\xc9\xbb\x9a\x11\x42\x55\xdb\xaf\xc9\x77\x7a\x9d\x05\x93\x6f\x67\xe5\xf4\xe9\x34\x9d\x90\x2e\x27\xaa\xbd\x05\x9a\xe1\x0c\x84\x90\x43\x80\x4c\xdf\xce\xd4\xd5\xfd\xb4\xdb\x95\xf0\x1f\x68\x8e\x67\xa3\xe9\x18\xdd\xe3\x70\x34\x1f\xa3\x3b\x1c\xb1\x3f\xb7\xf8\xce\xb6\x8d\x60\xdb\x1c\x80\xc1\xb6\xc1\xed\x28\x1e\xaf\xd7\x29\xb8\x45\x31\x9a\x40\x74\x3b\x5a\xca\xc7\x25\x9a\x43\x14\x8c\xe6\x63\x3c\x41\xf7\x10\x32\xea\xe7\x2a\x56\x0a\x6f\x47\x8b\xf1\x7a\x9d\x80\x5b\xb4\x40\x74\xb4\x18\x4b\x29\xbc\x0c\x07\x54\x0b\xdf\xe2\xed\xf7\x7c\xaf\x54\xfb\x71\x9d\xf8\xe1\xbe\x7f\xb8\xcf\x57\xd9\x73\xa2\x5c\x7f\x50\x6a\x01\x7f\xe4\x70\x5d\x1f\xe7\x73\x46\x2b\x94\xf8\x1c\x59\x0c\x4d\x62\x12\x64\x66\x22\x4f\x90\x8c\x50\x80\x15\x2b\x06\xd8\xdf\x1a\x49\xf7\xb0\x0a\x98\x28\xd9\xfd\x68\x2c\x35\xdb\x29\xde\xfd\x7c\xf5\xf1\xbc\xed\xfc\xc3\xd1\x1c\xdd\x0c\x91\xd1\xac\xce\x50\xd6\x06\x1b\xfc\xbb\x87\x52\xdc\xe1\x48\x4e\x12\x0a\x41\x65\x40\xbd\xd2\xda\x02\x24\x43\x83\xdf\x35\x5d\xdc\xd0\x21\xf5\xdf\x97\x16\xb3\x12\xf1\x58\x70\xc4\x14\x16\x5c\x5d\x5c\x14\x1c\xf9\xf1\x43\x37\x73\x7e\xe4\x98\xa9\x29\x1f\xc4\xeb\x68\x4e\xd2\x25\xf5\x03\x40\x9d\xf2\x11\xb2\xd3\xfc\xc7\x84\x92\xec\x3e\x88\xd5\x3b\xf5\x2c\x2d\x46\xcd\x3d\x45\xcb\x13\xfd\x6a\x28\x61\xc4\xbd\xe9\xfa\x6e\x9f\x0b\xf5\x6e\x4f\xfc\xf1\x20\x32\x8f\xfc\x7b\xfc\xc4\xc6\xf8\x6c\xdf\xf5\x38\x25\xf4\xdd\x1e\x9f\xa2\xbe\xdb\x17\x52\x0b\x2f\x79\xaf\x5e\xb2\x50\x9c\x3f\xb3\x87\x6f\xd8\x5f\x65\x98\x3a\xb3\x20\x37\x64\x6f\x94\x34\x89\x74\xe2\x3e\x6a\x28\xef\xca\x57\x05\x8a\x70\xa2\x6d\x8d\xd6\x6b\xeb\x4f\x7f\xd2\x0c\x9c\xdb\xce\x54\x36\x11\xfe\xbe\xba\xad\xa0\x00\x27\x8e\xc1\xe3\x79\x16\x93\xe7\x97\x38\x1b\xb9\xb0\xa0\x42\x89\x02\x2f\xe0\x11\xee\x75\x17\x4c\xe3\x8b\xc9\x90\xfa\x13\x94\xaa\x6e\x8a\x6b\x5f\x10\x99\x00\xbe\x01\xd7\x3d\x9c\x83\x64\xbd\x1e\x19\xf6\x1d\xce\x4d\x94\xdc\xa7\xdf\xc8\x46\xa4\x58\x41\xab\x56\xbe\xcc\x17\x24\x09\x89\x90\x4b\xac\x56\x9d\xae\x23\x94\x8a\x8b\x44\xf2\x9d\x4c\x96\x54\x44\xe4\xc7\x89\xbc\x14\xe7\x55\x0a\x63\x90\x0f\x24\x11\x43\xd0\x8e\xf2\x76\x10\x67\x24\x08\x1f\xdb\xd9\x32\x49\xd8\x27\x22\xa2\xff\x24\x9d\x2f\x62\x42\x49\x28\x8a\xe0\xc5\xf2\x72\xd8\x73\x24\x8b\x4c\x55\x13\x2e\x81\x80\x7a\xc9\x9c\x39\xa1\xb3\x34\xc4\x11\xca\x9c\x20\xbb\xc3\xa9\x02\x9c\x09\x70\xe6\x84\x24\x26\x77\x01\xe5\x1c\x4e\x83\x95\x3c\x82\x40\x42\xe6\xe4\xbc\x96\x1c\x63\xbc\x84\x93\x34\xa1\x51\xb2\xd4\x42\x7c\x5e\x14\xac\x05\x09\xf9\x4e\x59\x03\x54\x3d\x90\xf1\x99\x84\xe2\xcc\xb9\x91\x7f\x83\xec\xae\xa5\x62\xff\x97\x0d\xd6\xf9\x79\x3f\x6a\xe3\x68\x8e\x11\x36\x3a\x2e\xba\xd0\xca\x9c\x30\xca\x17\x01\x9d\xcc\xce\xbf\x4f\xc8\x42\x1c\x00\xd8\x1b\x81\xec\x62\x49\x4d\x91\x51\x8b\x6d\x67\x4e\x70\x9b\x2d\x17\x3c\xba\x09\x7f\x2b\xca\x82\xad\x04\x1b\x93\xa3\x90\xa5\xe4\x34\xf3\x71\x4f\xd2\x6c\x1e\xc4\x16\x77\x75\xe6\xc4\xc2\x5a\x9c\xb0\xc1\x4b\x13\x32\x34\x5a\xe7\x97\xdd\xf8\x7b\x44\xe2\xd0\x42\x13\x3e\xe2\x0d\xa3\x27\x0d\x08\xf9\x7b\xe1\x26\x20\x8a\x2b\x8a\x72\x84\x44\x6d\xb6\x0d\xea\x43\x20\x27\x54\xe6\x94\xd3\x3a\x11\xfd\x2f\x0a\x8e\xa6\x1c\x40\x94\x16\x7a\xa9\xa8\xee\xac\x4a\xa0\xc9\x15\x2b\xdb\x57\x7d\x63\x42\xb3\x4f\x4a\xdc\x90\xa2\x8e\x3c\x29\xb3\xcb\x1a\x59\xee\xa4\x28\x0a\xe2\x3c\x64\xc1\x02\xe7\x2d\x81\xb8\xb4\x2a\xca\xd5\x39\x01\x70\x55\x36\x20\xac\x3c\xcd\xd8\x93\xc0\xc6\x63\x9f\x8c\xa2\x31\x6e\x36\x0a\x2a\x5a\x02\xa3\x4b\xae\xdb\x2a\xe2\x2d\x9a\xe3\x85\x6d\x2f\xc0\x02\x7c\x07\xa3\x31\x84\xb0\x35\xb7\xed\x79\x07\x33\x3e\x90\x29\xac\x85\x08\xda\x36\x98\xe2\xb9\x42\x69\x9a\x19\xc0\x77\xc6\x95\x6c\x8d\x33\x4c\x61\xd9\x91\x3b\xc6\x32\x47\x82\xcc\x91\x1a\x00\x45\x43\x63\x67\x9a\x66\xe7\xc1\x64\x66\x9c\x33\x19\x37\x1f\xd1\x71\xd3\x76\x27\xf5\xc1\x9c\xa3\xa8\x08\xaf\xb0\x1c\x97\x5b\x03\xe6\xb0\x65\xe6\xc5\x55\x7e\xa2\x3f\x08\x40\x05\xff\x98\x1a\xad\x48\x50\x00\x57\xfa\xb1\xcd\xbf\x14\xc8\x70\x62\xae\x62\x40\x46\xd1\x18\x11\x94\x0a\x22\x17\x1d\xeb\x60\xbc\x94\x34\x2e\x16\xc2\x52\x10\x28\x9e\x48\x18\x03\x59\x5b\x68\xdb\x96\x88\x4a\x57\x6e\x05\xa1\x1e\xf6\x10\x59\x37\x37\xc1\x43\x10\x51\x0b\x0e\xcb\xc8\x0b\xa1\x23\x53\x9b\x02\x48\x24\x92\x93\xb0\x03\x1c\xca\x61\xc5\x63\x47\xbc\x96\x43\xaf\xde\x43\xdf\x28\xb9\xa9\x44\xd9\x64\x4c\x50\x00\x26\x1b\x05\xaa\x61\xdb\x2c\xb7\xc8\xc1\x52\xac\x25\xc8\x07\x8d\x8d\x64\x51\x3a\x8a\x25\x1c\x61\x47\x28\x2f\x50\x00\xfd\x00\xc0\xa2\x9c\xc2\x47\x73\xd3\x25\x7a\x27\x1c\x51\xb9\x68\xc7\x15\xa4\x93\x4c\x98\x0a\x6a\x2e\xcc\x11\x2b\x50\xc9\x01\xa8\xc9\x23\xcb\xd2\x1c\xd1\x14\xdb\x06\x54\xf3\x02\xc5\xd4\x28\x67\x06\xf2\x8c\x2b\x5a\xd3\x54\xa0\x46\x41\x6b\xd1\x3a\x3b\x11\x25\x30\x7a\x32\x6c\x15\xaf\x67\xa4\xad\xaa\x6f\x87\x29\x11\xf6\x5b\x8b\x2c\xbd\x8f\x42\xd2\x0e\xda\xff\xcd\x3f\xfe\xef\xb6\x28\xcb\xd2\xa3\xb5\x2c\xc4\x46\x19\x83\x0c\x95\x1d\x10\x75\x98\x84\xc7\x18\xbe\x20\x3c\xad\xc6\x6e\x6e\x16\xa7\xc7\xfa\x88\x2d\x5b\x42\x02\x48\xc4\xee\x50\xba\x8a\x70\x0e\x0d\xe8\x88\x30\x52\x59\xc6\x94\x9d\x8c\xc6\x58\x02\x19\x21\xea\x30\x92\xc3\x84\xff\xf9\x94\x4e\xf4\xb2\xee\x94\x23\x55\x19\x64\x41\xa1\xe6\x10\xc3\xcd\xb6\x40\x3f\xf2\xc1\xcb\x46\x55\x8f\xa8\x68\x9d\x36\x8b\x4b\xda\x72\x71\x35\x15\x5f\x12\xdb\x4d\x29\x94\x33\xce\xfe\x29\x9d\xf8\x64\xe4\x8e\x8b\x96\xc7\xcd\x3b\x78\xd3\x39\x1f\xff\x94\x4e\x30\xe1\x2a\xf1\x5e\xf9\x46\x6a\xf6\xc4\xbb\xde\x98\xb5\x70\x4a\x49\x26\x9e\xfb\x63\xe9\xd8\x46\xb3\xc7\x73\xa1\x07\xd6\xd8\xf1\xba\xfe\x07\xe3\x50\xe0\xc8\x1d\x2a\x4a\x93\xf5\x7a\x55\xb4\x28\x9f\x4d\xac\x37\x18\x69\xfb\xce\x87\x01\x99\xb9\x31\x2d\x0b\x3c\xd7\x7e\x7c\x65\xb5\x78\xa4\xfa\x66\x65\x69\x4a\xad\x62\x8c\x88\xe6\xba\x37\x02\xab\x4a\x47\x35\x22\x14\xb0\xf3\x95\x2e\xf0\xbb\xbc\xc6\x2b\xdb\x39\x8a\xf8\x12\xa4\x25\x9d\x49\xd0\x87\x56\xb3\xb9\x97\x20\x0e\x0d\x4a\xcc\xa1\x88\xa2\xfc\x22\xb8\x00\x44\x3b\x2a\x49\x61\x70\xc7\x33\x20\x32\xda\x54\xc6\x0c\x3c\xee\x76\x93\xb7\x44\xe3\x9c\x44\x53\xa0\x70\x26\x50\x52\xda\x8b\x29\x5e\x35\x4a\xd8\x44\x30\xb2\xe5\x41\xb1\x5a\xb5\xf7\xda\x47\x4a\xe4\x70\x11\x2d\x4a\x51\x95\x13\x73\xaa\xa0\x45\x56\xec\xd1\xbf\x34\x78\xd3\xa5\xde\x2d\xb6\x20\xf6\x2b\xe6\x6e\xec\x8b\xf7\x15\xe0\xd8\x19\x9a\x55\x9e\x43\x34\x1b\x05\x63\x1c\x72\x71\x2c\x0e\xb8\x2d\x23\x2e\x45\x59\x75\xda\xb2\xd8\xd2\xcf\x37\x92\x1b\xac\xe3\x9b\x26\xa0\x06\xdf\xab\x6e\x60\x3b\x94\x1b\xe2\x09\xf8\xe0\xcd\x2a\x31\xc6\x8c\xb1\x96\xed\x5a\xaf\x29\x87\xef\x80\xb0\x40\xc4\x99\x07\xd9\xb7\xa6\x1d\x5a\xca\x01\x55\xe8\xee\x61\x63\x2a\x20\x68\x06\x7d\x40\x9c\x9b\x1b\x3e\x5e\x37\x37\x78\x86\x02\xbe\xbe\xd6\x6b\x40\xd8\xc0\x34\xb4\x8b\xc7\xfe\xdb\x26\x77\xdc\x43\x44\x58\xeb\x02\x2e\x56\x6d\x36\x6f\x25\x37\x50\x9f\x14\x05\xba\x03\xb7\xe6\x01\xc6\x78\x18\xa5\x5b\x05\x2a\x44\x9c\x53\xf3\xc0\x85\x6f\x59\x75\x2c\x05\x57\x4d\x0b\x10\x97\x34\x4a\x8c\x01\x8e\x4a\xa8\xd4\xfb\x32\x9a\x0c\xe3\x66\xb7\x20\x57\x1f\x40\x26\x4b\xa8\x85\xd2\x34\xe1\x20\x83\xc3\xc0\x0f\x38\xa1\x82\xa6\x2d\x5b\x7f\xcc\xf9\xb6\xb4\x7d\xd4\x1f\x70\x0b\x8a\x3b\x36\x48\xf7\xd5\xc1\xb5\xd0\xfd\x13\x32\x24\xba\xd7\x07\xca\xcd\x2c\x3a\xb8\xae\x2e\x6c\x6c\xb1\x41\xfa\x46\x1e\xf3\x06\xfa\x34\x90\x8c\x32\x11\x52\x83\xaa\x80\x6e\xe5\x52\xcd\xc8\x3d\xc9\x72\x02\xa0\x46\x8d\x6a\x67\x8a\x19\xd0\x12\xf0\x48\xa2\x59\x3b\x8b\x74\x01\x04\xa0\x91\x28\x51\xe9\xb3\xe5\x92\x4f\x50\xa6\xf9\x41\x56\xe8\x97\x8a\x01\x64\x05\x6b\xae\xb8\x3a\xc2\xdf\xd1\xb9\x41\x5b\x2b\x63\xd5\xf8\xe7\x88\xb3\xc7\xba\x7d\x83\x8c\x0e\x47\xee\x55\xa4\x3d\xce\x44\xe4\x6f\x7e\x7e\x93\x71\xea\xd8\x4f\x33\xc4\x9d\x66\x51\xfc\xa1\xb2\x45\xf1\xa4\xda\x96\xc9\x92\x0c\xc1\xa4\xbe\xb5\x28\x7e\xfe\x00\x51\x87\xc0\x8a\x29\x38\x67\xf0\x16\x15\xd2\x8b\xc6\xb8\xd4\xb2\xa6\xb8\xf0\x87\xb6\x2d\xb9\x72\x97\x96\x38\x68\xca\xad\x81\x8e\xd5\x6e\x5d\xa0\x9c\xa6\x0b\xbf\x72\x27\xa4\x3b\xe3\x4a\x97\x8b\x5a\xe3\x46\xee\xd8\xd8\xae\xaa\x32\x0b\x11\x32\x8b\x38\xa9\x12\x53\xfa\x10\x3b\xd2\x7d\x10\x17\x68\xe3\xac\xda\x38\x09\x1c\x34\x4c\x16\x24\xb5\x32\x2c\xbd\x65\x88\xf0\xa6\xc5\x4f\x20\xf7\x57\x75\x22\xe3\xa3\xab\x45\x9a\x0c\x25\xcf\x0a\x2e\x9d\x4e\xa2\xb1\x60\xa3\x7a\xa7\x4b\x64\xab\xe8\x04\xbb\xc7\x3b\x3b\x91\x02\x75\xae\x8f\x4e\x34\x46\x01\x4e\xeb\x23\xc4\xb7\x6a\xc6\x37\x1c\xb1\x79\xc3\x52\xde\x26\x49\x68\x49\x3c\x68\xf1\xee\x2d\xd6\x54\xa8\x83\x83\x89\xc9\x4d\x91\xa5\xe4\x17\x0b\xa2\xd8\x48\x2e\x85\x17\x51\x56\x6e\xdb\x71\x95\xa0\xdf\xa6\x5a\xf6\x29\x2b\x2f\xd3\xb8\xb1\x4c\x2d\x7f\x59\xa8\xf9\x85\x91\x5a\x28\x35\x46\xfe\xea\xba\x0a\x05\x37\xd6\x89\x37\x95\x3f\x34\x7b\x6c\xe7\x34\xa0\x5c\xbf\xdf\x7e\x88\xe8\x2c\x5d\xd2\x36\xff\xbc\x9d\x66\x6d\xd9\x02\xeb\x77\x34\xb8\x28\x0a\x24\xf4\x1e\x35\xb3\xa3\x32\x9c\xf1\xd6\x99\x4f\xc4\xcc\x97\xfa\xb5\xda\xcc\x27\x63\x81\x11\xba\x31\x8b\x7a\x71\x46\xd5\x89\x92\x41\x30\x79\xe3\x23\xb3\x99\x92\xb4\x22\x01\x22\x5b\x14\x6c\xb7\xb1\xf8\x6f\xbe\xc8\xd6\x6b\x4b\xa9\x4f\xf8\x33\xb4\x6d\x83\x76\x6c\x9b\xbe\xc5\x66\xaf\xf9\x56\xc5\x38\x91\xda\xa7\xd2\xa1\x49\x9f\xfe\xaa\x68\x55\x17\x11\x91\xcb\x87\xa2\x74\x08\xb6\x71\x2f\x21\x5d\x19\xd5\x30\x49\x9f\xbf\x51\xba\x19\x10\xc0\x02\xa9\x87\x4d\xab\xe7\x17\x70\x0d\xa3\xcf\x8e\xf0\x64\xad\x76\x9c\x27\x0e\xcb\xe6\xf0\x6f\x7d\x43\xdd\x25\x73\x00\xcd\x7d\xb0\xe6\xbc\x44\x9c\x9c\xcc\xde\xe9\x33\xa3\x2e\x50\x2c\x4e\xdf\x50\x79\x11\xa9\x84\xa2\x92\x99\x8a\x7c\x14\xa2\x65\x81\xa6\x51\x12\xe5\xb3\x2d\x58\x10\x5b\xc9\x8a\x0a\xb2\xd2\xa7\xe4\x3a\x59\x51\x4e\x56\x99\x79\x3e\x31\x9d\x80\x2a\x23\x9e\x19\xf3\x8a\x32\x7d\x80\x81\xe8\x01\x64\xac\x89\x4d\x71\x54\xff\xc0\x26\x0a\x1a\xe4\xcd\x93\xdb\x79\xb6\x75\xab\x48\x0c\xbd\x8a\x3a\xa9\xb2\x56\x6a\x00\x9a\xa2\xd8\xe0\x0b\x51\xcc\xf6\xd5\x58\x72\x82\x80\x52\x32\x5f\xf0\xab\x62\xb5\xe1\x72\x35\xa3\x5f\xd7\x4d\x9b\x43\xa5\xb7\xe6\x95\x3a\x6c\xfa\xdf\x79\x60\x2a\x7d\x1e\xf6\x29\x92\xe7\x5f\x3f\x2b\x90\xd6\xe7\x1a\x94\xa2\xa6\xde\xdc\x3d\xd8\xd8\x92\x02\x6c\x68\x81\xe8\x50\xdf\x5a\xf8\xab\x42\x85\xb6\xb9\x53\xd2\xd5\xd7\x65\x42\xa3\x39\xc1\x59\xa9\x60\xd4\xd2\xa1\x95\x71\xc5\x5a\x3d\x6f\x1b\xb7\x33\x0b\x02\x1e\x62\x78\xc5\xef\x38\x9e\x86\x50\xeb\xbb\x0a\xd6\x90\xc7\xbe\xe7\xd7\x62\x3c\xfc\xbb\x73\x73\x43\xf2\xcf\x69\xb8\x8c\xc9\x90\xfa\x2b\x05\x55\xcd\x8e\x50\x8e\x7c\x70\x6e\x6e\x83\x5b\x12\x7f\x49\xe3\xc7\x69\x14\xc7\xb6\x6d\x2d\x13\xe1\xdc\x15\x96\x11\x82\x65\xe8\x6f\xdb\x96\x3f\x9c\x87\x20\x4b\xaa\x4f\xc0\xfa\x13\x2f\x68\x77\x21\x4b\x62\x47\xfb\x38\x0d\x42\x12\xb6\xe7\x69\x46\xda\x74\xc6\x0e\xf9\xc9\x84\xb4\x53\x31\x51\xed\x45\x70\x47\x9c\xf6\x35\x77\x1b\xcd\xdb\x8b\x2c\xbd\x0d\x6e\xe3\x47\xae\x0f\x08\x49\x1e\x71\x6f\xc6\xdd\x28\xa1\x5c\xbd\xdc\x0e\x92\xb0\x3d\x0f\x1e\xdb\xb3\xe0\x9e\xf0\x06\x91\x7f\x2f\x49\x32\x21\x79\x3b\x9a\xb6\xc3\x68\x3a\x25\x19\xdb\x4a\xee\x85\x01\x46\xde\x66\x33\x33\x23\x6d\xd5\x9c\xbc\x1d\x64\xa4\x1d\x2c\x16\x71\x44\xc2\xb6\xf8\x98\x46\x6c\xb9\x39\xed\x8f\xd3\xf6\x63\xba\x6c\x87\x69\x3b\x21\x24\x6c\xd3\x94\x37\xbc\xf2\x79\xad\x0f\xa8\xcd\x66\xa0\xd6\xe3\xdd\x24\x3d\x4b\x93\x69\x1c\x4d\x28\xbf\x8a\x21\x01\x2f\xeb\xf6\x71\x11\xe4\x39\x2f\x8d\x0d\x54\x94\xdc\x39\x16\x44\xdb\x26\x80\x7b\xf6\xad\xbc\xbe\xef\xf5\x51\xdf\x3d\xf0\xfb\xee\x01\xa7\x80\x67\x70\x73\xf8\x0d\x1a\xfb\x87\xdf\xa5\x1d\xb1\x7f\x0e\xb9\x8f\x06\x7f\xe3\xb9\xc2\x5f\x83\xfd\xbb\xc7\xfe\xd9\x67\xff\x0c\xd8\x3f\x07\xe2\xee\x6d\x20\xfe\xec\xf1\x2b\x3c\xdf\x43\x9e\xeb\x7b\x2e\xf2\x3c\xdf\xf3\x90\xd7\xf3\xbd\x1e\xea\xf9\x3d\xd4\xf7\xfb\xfc\x2a\xaf\xef\x0e\xf8\xc5\x5b\xdf\xdd\x43\x03\x7f\x80\xf6\xfc\x3d\xb4\xef\xef\xa3\x03\xff\x00\x1d\xfa\x87\xe8\xc8\x3f\x2a\xc6\x8c\x76\xd1\xa8\xef\xee\x8f\xcb\x63\x01\x80\xab\xd6\xee\x9b\x4e\xab\xfd\xa6\xfd\xa7\xf4\x9e\x64\xf7\x11\x79\x68\xb7\xcf\xe7\xb7\x24\x6b\xef\xb4\xff\x12\xdc\x07\x57\xdc\xdc\xad\x7d\xca\x26\x6a\xc2\x4d\x18\xda\xef\xb3\x60\x4e\x1e\xd2\xec\x1b\xff\x6c\x92\x2e\x1e\xb3\xe8\x6e\x46\xdb\x67\xfa\x57\xcf\xf5\xbc\x9d\x9e\xdb\x73\xdb\xd7\x51\x1c\x92\xf6\xc7\x64\xe2\x70\x82\x61\x7b\x49\x16\xdd\x2e\x69\x9a\xe5\xec\x6b\xe3\xbf\x2f\x69\x46\x39\xa1\x98\xc5\xb8\xfb\x3b\xac\xac\xf6\x15\xcd\xd2\x5b\x51\xce\x8b\x3e\x3b\x14\x9f\xb1\x56\xcb\xda\x4f\xe3\xb8\xcd\x5f\xe7\x6d\x76\x0c\xc9\xee\x49\xc8\x8b\xfa\x13\x13\xd5\x93\x9c\xb4\xdb\xed\x4f\xe2\x57\xd8\x66\x2b\x2e\x6b\x7f\xfe\x78\xdd\x96\x2f\x6b\x75\x5e\x11\xd2\x9e\x51\xba\xc8\xfd\xdd\xdd\x2c\x78\x70\xee\x22\x3a\x5b\xde\x32\xbe\xbb\x4b\xd8\xd0\xfd\x2b\x17\x7f\x9d\x7f\xe5\xbb\xf3\x20\xa7\x24\xdb\xfd\xf4\xf1\xec\xfc\xe2\xea\x9c\xd7\x28\x97\x44\xbb\xdd\xee\x3b\x3d\xd7\xd9\x6f\xb5\xdf\xec\x0a\xc1\x9f\x31\xcf\xd6\x3c\x88\x92\xb3\x34\xa1\x7c\x97\x63\x67\x0b\x63\xb2\x38\x8b\x47\x51\x29\x92\xa7\x25\x9e\x75\x80\x09\xca\x71\x32\x0a\xc6\xad\x7c\xbd\x06\xfc\x67\x17\x5b\xbb\x1c\xab\xcb\x1a\x43\x09\x00\x1c\xb1\x0c\xa6\x0b\x94\x8e\x6c\x12\xb7\xc4\x5b\xbc\x2a\x50\xbe\x5e\x57\xc5\x07\xb1\x33\xd0\xa1\xb1\x37\x9c\xa5\xcb\x38\xe4\xec\x61\x1a\x31\x66\xc0\xf9\x5a\xdb\xea\x92\xae\xd5\xce\xc8\xbf\x97\x51\x46\xc2\xf6\xed\xa3\xdf\xb6\xba\x54\xe0\xc0\x3f\xf7\x21\xe4\x57\x47\xa5\xbb\xd5\x12\xb3\xed\x63\x91\xa3\x89\xc4\xae\xbe\x0d\x26\xdf\x50\xc8\x8f\xfd\xdc\x44\x04\x2c\xb5\x45\xee\x0c\xbb\xc7\xb3\xb7\xea\xf9\x78\xd6\xed\x42\x4b\x6e\x03\x6c\x33\x59\x8e\x66\xe3\x61\x38\x9a\x8d\x71\xcc\xc4\x15\xde\xba\x6a\x3a\xf5\xf9\x9f\x14\xb0\x24\xd3\xf2\xd2\xbc\xa6\x0f\x21\x8a\x0b\x83\x25\xeb\x5d\xe7\x21\x4a\xc2\xf4\xa1\x99\x5d\x2f\xb2\x74\x42\xf2\xdc\xb6\xf5\x59\x5f\xa6\x8c\x59\x0b\x56\x85\xd6\x0e\x08\x99\x55\xbe\x84\x3c\xca\x07\xdf\xf6\xf8\x82\x34\x7e\xf2\x58\xc0\xa8\x54\xe2\xdb\x36\xc8\x70\x35\xc9\xb9\xb9\xe1\xdc\x3e\x1b\x82\xa4\xa6\xe3\xe1\x82\x29\x8a\x1a\x53\x9b\xaf\x99\x23\xcc\x24\xd6\x21\x88\xf8\x6c\x60\x8a\x22\x3d\x1b\x38\x83\xbe\x4a\x1f\x8d\xcd\x17\x14\xa2\x64\x44\xc6\x38\xaa\xc6\xe5\x27\x86\x99\x24\xe1\x98\xfa\xb0\x80\x8a\xf9\x62\x8a\xf8\xad\x7f\x53\xf6\x1f\xd3\x34\x26\x41\x02\x12\xe1\xe5\x6b\x3c\x76\x4b\x22\x2f\x10\x75\x6e\x48\xf0\xed\x26\x27\x24\xe1\x9a\x0b\x35\x0e\x58\x46\x89\xf5\x09\x92\xd3\xef\x53\xa4\x30\x62\xfc\xa4\x80\x3e\x20\xc6\xb0\xc9\x88\xb4\x88\x9a\x69\xf2\x43\x58\x00\xc6\x9e\xad\x3f\xf1\x55\xbe\xbb\xc3\xf6\xc4\x2c\x09\xe2\x7c\xf7\x36\x4b\x1f\x72\x92\xed\x90\xe4\x3e\xca\xd2\x84\x1d\xa6\x64\xd3\xd0\x48\x53\x63\xcd\x83\xa1\xb2\x75\xc8\x39\xa9\x85\xc3\x25\xc8\x2a\x25\x07\x8d\xfd\xd2\x71\x0b\x88\x08\x1b\xae\x77\x97\x9f\x31\x71\xa2\xfc\x7d\x94\x91\x69\xfa\x9d\xff\x3e\x9b\x65\xe9\x9c\x60\xe2\x2c\x73\x92\x9d\xde\x91\x84\x09\xeb\xb3\x28\xa7\x69\xf6\x88\x89\x13\xa7\x82\x9b\x63\xe2\x08\xd2\x95\x72\x95\x3c\xf8\x6f\x48\x55\x39\x89\xa7\xb6\x2d\x83\x18\x89\x07\xf6\xaf\x23\x1a\x8c\x31\xd6\xfe\x35\x0d\x0b\xe0\x17\xb9\x38\xf8\x17\xd5\x40\x68\xea\xd5\xe6\x65\x5e\x3a\xe1\x36\x36\xba\xd2\x32\x81\x17\xa3\x1e\xb1\xf9\x66\xa3\x14\xd5\x4d\x5d\x4a\x99\xc0\x4b\xd1\xc3\x60\xbe\xd9\x28\x45\x0e\x9b\x2e\x44\x3f\xf3\x32\xd4\xa0\x1a\xe9\x1b\x25\x24\xc1\x7d\x74\xc7\x44\x4a\x5d\x86\x91\xc2\x4b\xd1\xcf\xb8\xf2\xce\x12\xee\xe9\x0d\x25\x95\x13\xdb\xd2\x44\x40\x25\x50\x33\x1d\xb2\x32\x7d\x56\x55\x4b\x4f\x70\xd6\x92\xc7\xed\x61\xa5\xeb\x2a\x97\x1e\x8a\x44\xde\x65\xc9\x7c\xb2\x53\x2a\x9b\xea\x6d\xa4\x7c\x64\x86\xd5\xe6\x97\xcd\xf2\xad\x4f\x8f\xc9\xf7\x36\x60\x3b\xd9\x3c\x0d\x09\xb4\x5a\x26\x35\xa6\xf2\x6c\x2c\xf4\xe8\x6a\x39\x67\xce\x84\x13\x2e\xc7\x9d\x71\x18\xfd\x07\xb0\x65\xd0\x73\x20\x83\x7f\xf0\xaf\x9a\x68\x8d\x63\x63\xc4\xf1\x75\x16\xdd\xdd\x91\xac\x65\x2e\x8b\x9c\xc3\xf1\x34\xad\x5b\x29\x39\x6f\xae\x55\xa4\x32\x87\xe4\x76\x79\x67\x3e\x2e\x32\x32\x09\x28\x09\x77\xa6\x24\xa0\xcb\x8c\xd4\xd6\xb5\x60\x9e\xff\xe9\xda\x56\x6c\xd1\x58\x9b\x49\x2b\x73\x3e\x5d\x7e\xf8\x70\xfe\x95\xdb\x65\xac\xe2\xf4\xae\x54\x37\xab\x13\x00\x4b\x74\x1c\x47\xdb\xa9\xc1\x02\xf1\x43\xc1\x46\x46\x9e\x5a\xcb\x49\xf8\x2e\xbd\x91\x55\x24\xd7\xf2\x46\xc9\x34\xdd\xcc\xca\x53\x6b\x39\xf9\x00\x6e\x66\xe5\xc9\xc3\xca\x53\xf5\x4b\xff\xa9\x42\x83\x3c\x27\x19\xdd\x2c\x55\xa6\x57\x73\x4b\x20\x8b\x08\x27\xad\x72\x64\xa3\xa7\x68\x82\x06\x51\x42\xb2\x27\xa8\xc2\xc8\x9e\x3e\x24\x24\x6b\x7c\xb3\xa4\x51\xbc\x9d\x92\xf4\x81\x68\x93\x7e\xf8\x95\xc6\x7f\x4c\x43\x8b\x2c\xba\x0f\x68\xf4\x9b\xb1\xb5\xb3\x1d\x54\xde\x27\x3c\x8e\x48\xed\x3a\x92\x0d\xd2\x28\x41\xd1\x18\x13\x85\xfd\xe2\x5b\x5a\x1a\x62\xf9\x31\x70\x51\xe6\x88\x0e\x42\xf0\xeb\x0f\xab\xa4\xf0\x7f\x58\x45\xc5\xce\x0f\xab\x9b\xe2\x57\x7e\xbb\x75\x47\xe8\xfb\x80\xb1\xf8\xc7\xf7\x69\xd6\xb4\x9b\x93\xd1\x62\xcc\x32\xe6\x95\x8c\x73\x44\x9c\x8f\x17\x1f\xaf\x6f\xde\x9f\x9e\x5d\x5f\x7e\xfd\x3b\x26\xce\x99\x9a\x06\x4c\x9c\xaf\x72\xbb\x56\xeb\x61\x12\xb3\x93\x5c\x6a\x5e\x33\xb0\x91\x63\xa2\xd0\x4a\x5e\xc8\xca\x0f\x44\x94\x0c\x87\x4f\x12\xa6\xe2\xef\x7a\x5d\x5e\x16\x4c\x82\xc9\x8c\x88\x7e\x85\x11\x6f\x6b\x90\x3d\x42\x7e\x7b\x3d\x99\x11\x91\x53\x5e\xf2\x4e\x45\x73\x3f\x07\x49\x70\x47\xb2\xb3\x6d\x1f\x36\x64\xab\x14\x13\xe5\xef\x48\x4e\xb3\xf4\x91\x84\xfa\x16\x43\xa7\x45\xc9\x1d\xee\x78\x45\x9c\xa6\xdf\x96\x0b\xad\xbf\xab\x7f\xb7\xa9\xc6\x3d\x0b\x12\x2e\x57\x33\x21\xac\xfd\xab\x23\xbe\xff\xb5\xcd\xb5\x52\xfc\xc4\xcb\x3b\xde\x9e\x05\x79\xfb\x96\x90\x84\x9d\xeb\x45\x51\xe5\x04\xab\x0b\x0d\x73\xf8\x1c\xa1\x8d\x8b\x7e\x23\x12\x80\x46\x7e\xa7\x6e\x2f\xaa\xed\x76\xd1\x4c\x06\x21\xe0\x0a\xb4\xe8\x37\xf2\x4e\x67\x9f\x02\xe3\xba\xbc\x32\x04\x6e\x21\x6e\xcf\x49\xbd\x4c\x12\xae\xd7\x46\x68\x9e\x21\x90\xa5\x23\x59\x16\x6c\x88\x94\xcf\x88\x85\xcf\xdc\x88\x8e\x5b\x2a\x1a\x7e\xd3\x94\x8c\xe8\x18\x31\xf1\x59\xe7\x99\xe8\x54\x47\x76\xd2\xb6\xf5\x4f\x00\x61\xf1\xdc\xf0\x40\x58\xf0\x41\xfe\x98\xfc\x8b\x98\xc7\x36\x82\xb5\xd6\x17\xb8\x88\x5f\xe5\x5e\xb2\x7c\x10\x98\xb4\x09\x11\x29\xa6\x7a\x3d\x68\x62\xfe\x3d\x93\x5f\x16\xf3\x42\x02\x30\x34\x8d\x8d\x3d\x13\x41\x90\x64\x6c\x0b\xdb\xee\x88\xdb\xec\x7c\x11\x4c\x48\x79\x54\xd1\x5f\x92\xef\x8b\x20\x09\x3f\xa5\x93\x20\xfe\x54\x92\x71\x69\xf6\x23\x7d\xb7\xb8\x09\x9a\x61\x4e\x66\x78\x24\x77\xbc\x0e\xc6\xa4\x2c\xf1\x8e\xd0\xcb\x85\xbc\x1f\xb6\xf2\x28\xb9\x8b\x09\x4d\x13\xcb\x30\xb6\xc8\x5f\xfc\xb9\x30\xcd\xa5\x51\x40\x89\x59\x80\x34\x53\xe4\x63\x2e\x85\x25\xde\xeb\xac\xec\x75\x56\xe9\x75\x62\xd6\xb0\xd9\x65\x26\x04\xa8\x30\xd1\x1d\x76\x2a\xd3\xcd\x56\x07\x2b\x45\x71\x49\xf5\x50\x1e\xe9\x90\x67\x45\xdd\xa0\xb7\x66\x73\xbc\x34\x0c\x45\xcb\x70\x75\xf2\x73\x96\x58\xf9\x70\x65\x74\xdc\xcf\x90\x6e\x0e\x3b\x00\x99\xe3\x96\xd8\xb6\x68\xb1\x6d\x8b\x39\xb1\x6d\x31\xb8\xc2\xb8\x33\x81\xea\xc6\xa4\x5c\x31\x38\x52\x47\xc9\xca\x1d\x7c\xc9\x19\x6c\xbb\xc1\xb8\x22\x2d\x97\x59\x5a\x2e\x33\x94\x16\xbf\xb7\xe5\x6c\x35\x8b\x2e\xac\xd7\xa2\xe9\x9b\x6d\x57\x63\x5b\x36\xf8\x3f\x19\x27\x63\x8c\x3a\xd5\x8a\xaa\x4a\x94\x17\x15\x2a\x09\x65\xbd\x56\xc5\x8b\xa2\x39\x6c\x0e\xeb\x4b\x43\x1f\xd8\x26\xd8\xda\xe4\x06\x5a\xc9\x22\x3a\xd9\x96\xfc\xc0\xe2\x45\x24\x22\xaa\x54\x49\xf9\xcb\xaa\x59\xf9\x36\x66\x59\x21\xd2\x44\xdf\xf9\xb5\x14\x31\xeb\xb5\xa0\x0c\x23\x29\xac\xd1\xf5\xca\x95\x07\x07\xd6\xd6\x7b\x1e\x7c\x30\x2b\xb1\x1d\xb7\x72\x69\x9c\xa2\xd4\x68\xee\x44\x35\xb7\xbc\x45\x64\x12\x89\x64\xb9\x39\x8a\xb0\x7b\x1c\xbd\xd5\xb6\x0e\x91\x74\xb7\x59\x29\x84\x3e\x3f\x15\x50\x78\xd3\x88\x64\x7e\x8e\x64\xe0\x9f\x65\x81\x79\x44\xc3\x64\x94\x8e\xf1\x72\xc8\xb8\x41\x8e\x56\xfa\x25\xf4\x79\x0a\x64\xc2\x4f\xfe\xee\x31\x09\xe6\xd1\x84\x71\xbe\xf2\x09\x77\x02\x9e\xc3\x1c\xd9\xd0\x0c\x39\x57\x8e\x10\x1a\x45\x63\xc6\x10\x36\x24\x2c\x83\x64\x8c\x65\xbe\x2a\x8e\x6b\xdb\x46\x84\x88\xdc\x33\xe4\x80\xae\xca\xfe\xfb\x11\xd2\x6d\xf2\x3b\x5e\xb1\x11\x74\x2c\xb3\xed\x09\xaf\x20\x55\x4a\x23\x41\x6d\x13\x4e\x1b\x29\x5b\x80\xec\x17\x63\x9a\xd7\x8f\x0b\xa2\x37\xb3\x1c\x44\x50\x24\x1b\x49\x99\x69\x42\x3c\xab\x39\xdf\x09\xfe\x80\x32\xa5\x6e\xfa\x46\x1e\x73\x40\x21\x4a\x38\xc8\x91\x02\xb9\x3f\x4e\x94\x43\x54\x84\xe9\x28\x1b\x25\xe3\x71\x2b\x2a\x59\x43\x54\xb2\x06\x63\x64\xb9\x55\x1d\xd9\x26\xbb\x49\x85\xd6\xcb\xe4\x35\xa1\x87\x32\xa5\xcd\x54\x5a\x7e\xf3\xac\x02\x24\x10\x02\xcb\x14\x4e\x2d\x58\x0b\xb9\x0a\x57\x4c\xaa\xc5\xb4\xa8\x09\xb1\x0b\x29\xa8\xde\xd7\x05\x55\x31\xc1\xf2\x42\x51\x8b\xb9\xa6\xa8\x2a\xa7\x58\x0a\xa9\xac\x14\x4c\xa5\x18\xba\x8c\x63\x6e\xed\x26\x5f\xea\x9d\x3a\xe4\xa9\x89\xbc\x68\x0d\x42\x72\xad\x6c\x8f\x4c\xd3\x97\x92\x56\x54\xf2\xbc\x94\x6c\x60\xa1\x34\x92\xa0\x01\x8d\xb0\x5e\xae\xba\x9c\xab\xd4\x55\xed\x54\xc9\x17\xe6\xc1\x37\x9d\x09\x94\xbd\xaa\xf6\x09\xc2\xcd\xd6\x17\x92\x57\x8b\x0b\xcc\x95\x2e\xda\xa7\x85\x30\x53\xe1\x76\xcc\x4f\x09\x48\xbf\x6a\x01\x49\x30\x44\xf6\x46\xb9\xe8\xe4\x2f\x10\x91\xda\xe0\x31\x5d\xaa\x3b\x50\x71\x2f\x25\x4b\xfa\x61\x55\x69\x7e\x01\x7f\xad\x48\x53\xe5\x58\xd7\x6d\xaf\x59\x4f\x8c\x55\x9b\x18\xab\x36\x2d\x70\x08\xaa\xa3\xd8\x34\xd1\xb0\x35\x07\x89\xb4\x41\xcd\x70\x82\x52\x85\x65\x62\x4c\x70\x02\x8b\xfa\xfa\x27\x5c\x65\x0c\x5c\x14\xb1\xb3\x72\x74\x97\x40\xb0\x2a\xb8\x34\x06\x0d\x5a\x53\xfb\x23\xdb\x29\xee\x79\x38\xe9\xdd\x7f\x8e\xfe\xe9\x8f\xbb\x3e\xff\xf7\x87\x5d\x49\xd8\xb7\x55\xc2\x2e\xcf\x5f\x53\xa5\x0c\x26\xfa\xa7\x79\xea\x92\x9b\x44\xc6\xd9\xa2\xf8\x59\x7d\xcd\x89\x26\x10\xbd\xd8\x58\xb3\xa4\x9a\xa1\x72\xba\xba\xa1\x15\xae\xb5\x8d\x3b\x28\x17\x87\x97\xe5\x8b\x4b\xc9\x4e\xb0\x91\x26\x0d\xba\xc8\xaa\x27\xe9\x29\x7e\x23\xf3\xca\xae\xbf\x20\xe7\x34\x88\xe2\x2b\x42\xf9\xd6\x79\x45\x24\x23\xb8\x49\x17\x2f\x68\x3b\xb7\x18\x7d\x32\x63\xa1\xe9\xcc\xf4\x4e\x20\x0f\xed\x54\x87\xb7\x12\xe3\x4d\xb2\x4d\x29\xb9\x42\x98\xec\xac\x50\x69\xb0\x23\x8e\x57\x20\x81\x0d\x13\x3b\x4a\xc6\xb8\xd6\x15\x96\x94\x15\xcb\xa4\xac\x4f\xa9\x2b\xb6\x55\xf4\xa2\xa9\x51\x16\xe0\x9b\x4d\xa0\xe3\xca\xcb\xca\x94\x6c\xbc\x54\x8d\xa4\x63\xd4\xd8\x4b\xca\x06\x4a\x48\x3f\x8d\xfe\x8f\xa6\x9c\x45\x2b\xd2\x11\xbf\xc8\x91\x47\x8d\xf5\xda\x38\x69\xf0\x70\xad\x4c\x7a\xd8\x76\xc4\x90\xe2\xfe\xbd\x08\x42\x8b\x49\xad\x0b\xb5\xd3\x45\xaa\x04\xb7\xb4\xc5\xdd\x3a\x74\x0f\x66\x41\x0e\xb4\x6c\xd9\x2a\x57\xa5\x6d\x83\xc8\x58\xa4\x5a\xba\x4b\xa0\x8a\x7f\xce\x0e\x1d\x3a\x57\x75\x76\xcd\x2c\x43\xa3\xb2\x20\x0c\x41\x02\xfd\xcd\xb6\xe2\xa8\xc4\xd4\x36\x8e\xdb\x35\x25\x44\xab\xbe\x31\x95\xba\xf5\x0a\xef\xe1\x9c\xae\x92\xa2\x9b\x5f\xd1\x0f\x42\x94\x15\x21\x87\x77\xb9\x25\xe6\x0a\x30\x8a\x2c\x87\xa3\xf2\x28\xf5\x2c\x0a\x1b\x26\x4a\x93\xe1\x33\xef\x01\x81\x7e\x53\x5b\x87\xd5\x76\x1a\xcd\xf1\x49\xa1\xfb\xff\x5e\xee\x33\xaf\x6c\xa5\xfe\x7e\xb8\x25\xfd\x85\xad\x6a\x6a\x87\xd9\xbc\x0d\x77\xb3\x2a\x33\x1c\x91\xb1\xc6\xdb\xda\x78\x53\x5b\xe0\x46\x0d\xb0\xa8\x88\x0e\x26\x72\xd9\x4b\x3a\x6f\x7e\x3c\xdc\xfe\x8a\x97\xfb\x92\x41\xd8\xfc\x88\x38\xa5\xd0\x54\xb0\x85\xa4\xd4\x76\x1d\xa9\xba\xf9\x39\x88\xa3\xd0\xec\x91\x3a\x47\x2a\x59\xc1\xb6\x4b\xed\x4a\x8d\xe2\xd5\x0b\x26\x37\xf3\x7c\x86\x12\x42\x2a\x43\xb7\xea\x09\x36\xf6\xfe\xf2\x70\xa6\x0f\x37\x19\xd2\x05\xb2\xd3\xe8\xd6\x65\xc7\xd1\xfd\x24\x03\x7c\x9f\x66\xec\x6c\xa0\xec\x03\x6a\xbb\x0c\x9f\xcc\x42\x2b\x5d\xca\xdc\x15\x56\x5e\xfb\x62\x63\x4d\xd3\xad\x6b\x9a\xd6\xd6\x74\x53\x4d\x10\x51\xd5\x58\x93\x15\x6f\xdb\x44\x14\x63\xcf\xaa\x2d\x7f\x62\xf7\xd1\x21\xbc\xca\x3d\xe1\x3f\x60\x4b\x95\x2a\x19\x3b\x2a\x55\x56\xf5\xd6\xeb\x0a\xc9\xb8\xbe\x83\x94\xbf\x47\x74\xac\x6d\xf9\x59\xcb\xd4\x11\xb4\x3c\x73\x8e\x5c\xd5\x5e\x90\x35\x4c\x48\x32\x86\xb5\xf2\x86\xec\x9f\x97\xac\x8f\x6a\xd3\x15\xfc\x60\x45\x2a\xd3\xc6\x82\xd5\x06\x1d\x83\x26\x09\xce\xe4\x1a\x1b\x6f\xf0\x68\x0c\xa1\x70\x83\x28\x4f\xf8\xd4\x38\xe1\x67\x05\x2c\xa2\x7a\xbd\x8d\xa2\x8b\x50\xa4\xed\x78\xdc\xf0\x54\x85\xb9\x63\x2d\xab\x98\x7f\x6e\xf6\x23\x51\x97\x4b\x1b\x34\xa2\xfa\x53\x4a\x99\xa3\xa8\xec\x4b\x25\xf5\xd9\x7e\xb0\xa5\xf9\x2d\x49\x1f\x12\x63\x35\x19\x61\x26\x50\xba\x4d\x08\x0c\xaa\xc7\xef\x0d\x09\x08\xf2\x50\x68\xf9\x5b\x15\xc1\xea\x38\x57\xe7\xf1\x18\x07\xa3\x7c\xdc\x8a\xab\x93\x24\x42\xa3\x83\x74\x14\xf3\xc0\x26\x45\x03\x27\x7e\x62\xad\xd6\xba\x00\xd1\x4b\x38\xb8\xf9\x11\xbf\xfa\xdc\xfe\x9a\x97\x59\x3f\xdc\x50\x94\x32\xe6\xb5\xc9\x87\x15\x83\xbc\x13\x48\x21\x04\x16\x55\xf5\x46\x8d\x63\x45\x26\xe5\xa9\x30\xe0\xf5\x4e\x57\x16\xab\xb9\x28\x2a\xe5\xb6\x2a\x92\x1f\xc5\x55\xf0\x68\x15\x4e\x3a\x2b\x5d\x7f\x39\x5b\xaa\x29\x64\x1a\x18\xea\xc7\xff\xa8\x89\x1b\xe5\xff\x8e\x66\x36\x6b\xff\x5f\xb3\x61\x6f\x94\x30\xdc\xa6\x01\x27\x9b\xe2\x3f\x4a\x71\xc4\x38\x1e\x3b\x0d\x8b\x9f\x4d\x07\x02\xed\x45\xb6\x5e\x67\x28\xc7\x69\xdd\x32\x2e\xd7\x21\xf4\xa5\xed\x1c\x79\xa2\x79\x12\x0f\x57\x3b\x43\x8e\x82\x31\x8e\xb7\x8b\xaf\xdb\xb6\x77\x63\x67\x7f\x91\x1c\xd2\x3c\xd0\xfc\xcb\xa2\x30\x6e\x4c\x6f\x79\x17\x1e\xb7\xf1\x87\x1b\xfc\xeb\x0f\x2b\x1e\x28\x2f\x0b\x92\x30\x9d\x03\x58\xfc\xb0\x7a\x17\x50\xe2\x24\xe9\x03\x80\xc5\xaf\x8e\x0c\x24\x02\x2c\x47\x44\x59\xdb\x76\x6d\xfe\xa4\xe9\xd3\x6b\xec\x27\x6a\x37\xdf\x86\x27\x9b\x71\x8b\x6c\xdb\xa4\x6e\x82\x34\x54\x6e\xa5\xc5\xef\xb8\x2c\xbf\x23\x54\x0c\x63\x83\x2f\x5f\x2a\xe5\x78\x79\x6d\x5d\xcf\x47\xe0\x4a\xe5\xc0\x44\xde\x81\x9f\x5f\xfc\xdc\x50\x50\xc0\xde\xb2\x57\xdc\xad\x94\x0a\x3f\x8a\xbb\x38\xbd\x0d\xe2\x8a\xa5\x07\x8a\x70\x06\x40\xb2\x69\x8c\x25\xf2\xda\xb6\xf8\x0b\x0d\x0c\xfb\xc4\x49\xd2\x90\x63\x71\x0d\x13\x85\xd5\xb9\x5e\x67\x9b\x56\xf2\xa5\x09\x57\xf3\x7b\x65\xcf\x28\xfe\xc2\xf5\xba\xc9\xd6\xc6\x30\x55\xb5\x6d\xe3\x61\xbd\x4e\xc8\x43\xdb\x30\xab\x2f\xb7\x4e\x0b\x02\xd8\xd2\xbd\x55\x46\x44\xd5\x79\xdf\x10\x02\x87\xab\x68\x2e\x0c\xfa\x09\x52\xa6\xfd\x04\x89\xb1\xf6\x49\xe1\xeb\xd7\xd4\x91\xbf\xd6\xeb\x32\xa7\x76\x07\x60\x89\xf2\x23\x2a\x67\x6a\xbd\x26\x45\x01\x22\x14\x09\xc3\x4a\xd6\x34\x35\x25\xca\x3e\x69\x75\x7e\x71\xfa\xe3\xa7\xf3\x9b\xcb\x2f\xd7\x1f\x2f\x2f\x4e\x3f\xdd\xbc\x3f\x3f\xbd\xfe\xe9\xeb\xf9\x95\xdf\xf1\xd0\xf9\xdf\xae\xcf\x2f\xde\xdd\x7c\xf9\x7a\x79\x7d\x79\xfd\xf7\x2f\xe7\x57\xfe\x4a\x62\x97\xb9\x48\xf5\x9f\xfd\x16\x07\x03\x46\x65\xe8\xd3\xe5\x87\x9b\xab\xeb\xd3\xb3\xbf\x5e\x7f\x3d\x3d\x3b\xbf\xb9\xbc\xb8\x79\x77\xfe\xe5\xeb\xf9\xd9\x29\x2b\x9e\xe5\x65\x19\x7e\x3e\xff\x7a\x25\x1f\xbf\x9e\x7e\xbc\xda\xcc\xe6\xa1\xab\xeb\xaf\x3f\x9d\xb1\x86\xf0\xea\xdf\x7f\xfc\x74\xce\x52\x6f\x4e\xbf\x7c\xf9\xf4\x51\xe4\xba\xb9\x3e\xff\xfc\xe5\xd3\xe9\xf5\xf9\xcd\x2f\x5f\x4f\xbf\x7c\x39\xff\xca\x8a\x2b\x13\x2f\x2f\x3e\xfd\xfd\xe6\xc3\xa7\x8f\x9f\x3f\x9f\x7f\xbd\x39\xbb\xfc\xfc\xe5\xf2\xe2\xfc\xe2\x9a\x77\xeb\xe6\xdd\xf9\x8f\x3f\x7d\xb8\xf9\x7a\x7e\xf1\xee\xfc\xeb\xcd\xf5\xd7\x73\x51\xf6\x5f\xfe\xe7\xa7\xf3\xaf\x7f\xbf\xf9\x78\x71\x7d\xfe\xe1\xab\x6e\xef\xcd\xbb\xf3\xf7\xa7\x3f\x7d\xba\xbe\x39\xbd\xfa\xfb\xc5\xd9\xcd\xe5\x8f\x57\xe7\x5f\x59\xfb\xf9\x27\x5f\xcf\x65\x21\x9f\x2e\x2f\xbf\xdc\x7c\xfa\xf8\xf9\xe3\xb5\xef\x91\x3e\x3a\xff\xfc\x23\x4f\x3c\x7d\x77\xf3\xe7\xcb\xcb\xbf\x5e\xf9\xab\x02\xe9\x81\x5d\x15\x45\x4b\xac\x90\x00\x01\x82\x4f\xb8\xf3\x52\x9d\x42\x89\x96\xab\x0d\x21\x48\xfa\xc4\x46\x53\x50\x07\x94\xaa\x81\x49\x29\x0f\xf8\x0c\xda\xb6\xb5\x31\x8b\x96\xd8\xeb\xac\x7a\x2b\x79\xba\x86\x09\x1b\x65\xe3\x16\xc7\xe1\x4e\x86\xec\x37\x16\x37\xce\xa3\x6c\xec\x77\x98\xfc\x98\xd8\x36\x10\xe9\xdc\x70\x61\x94\x8d\x61\x71\x1f\x64\xab\x4d\x9a\x89\x0a\x4c\x6a\xd7\x64\x4d\x3d\x8e\x74\x8f\x23\x18\x38\x1b\xc5\x38\x52\xf5\xce\x9b\x11\xc9\x27\x44\x9d\xf7\x3f\x5d\x9c\x71\x72\xd0\x59\x6f\xf8\xb7\x8c\xc0\xae\x58\x1b\x1b\x8a\xd2\x1e\xf2\xb2\x30\xf5\x0c\x51\x53\x6e\x4e\xf2\x2a\x2b\x7f\xe0\x70\x4b\xf2\x8a\x58\xa4\xb7\x9e\x68\x71\xfa\x9f\xb6\x32\x7d\xaa\x5d\xa9\x18\xf5\x3a\xc1\xe5\x72\xd0\x37\x59\x63\x69\xe7\xaa\x1d\x81\x63\x46\x57\xf9\x8b\xe9\x2a\x47\x31\x54\x38\x37\xf9\x28\x1e\xb7\x78\x4b\x9c\x28\x97\x56\xeb\x50\x74\xa8\xd6\x24\x26\x4c\x2f\x9d\x69\x14\x73\x95\x27\x3e\x69\xc2\x22\x80\x82\x86\xf4\x52\x99\x6c\xeb\xc5\x44\xf7\x62\xa2\x7b\x11\xb2\x5e\x4c\xe0\x8b\xba\x30\x41\xa1\x68\xa5\xaa\x6a\x14\x4a\x4a\x9e\x8c\xc2\x31\x6c\xb9\x45\x01\x81\x64\x9b\xe7\x17\x3f\x3f\x21\x10\x64\x59\x9a\xed\xcc\x82\x24\x8c\xa3\xe4\xee\x75\xe6\xd0\x5c\xb0\xfd\x3d\x46\x6f\xec\xf8\x99\xf0\x9a\x9b\x9c\xf2\xe5\x0e\xbe\x91\x83\xc0\x15\xd5\x7b\xf7\x3b\xe9\x34\x7d\x79\x4f\xb2\x2c\x0a\x49\x43\x41\x99\x2c\x68\x7b\x56\x26\xaa\x88\x12\xd3\x84\xdf\x42\x5d\x07\xd9\x1d\xa9\x18\x74\x66\x28\xe1\xc0\xff\xed\x34\xa9\x59\x5e\x52\xce\x06\xab\x1f\x26\xdb\xc7\x59\x44\x2b\x48\x93\x9d\x7c\xb9\x60\x43\xfb\x32\xbb\xc5\xcd\xcf\xe2\xe8\x76\x37\x0c\x68\x70\x13\x84\xc1\x82\x6e\x31\x6a\x6c\xfe\x4c\x5f\x21\xdc\x70\x2b\x47\x5d\xc2\x1f\x6e\x1a\xbb\xf5\x83\x77\x01\x0d\x4e\x55\xbb\xcd\x48\x9d\x1d\x17\x35\x07\x55\xa5\xca\x16\xb4\x78\xaa\x5c\x7d\x31\xfc\x8e\x75\xec\x75\x35\x64\x46\x0d\xaf\x98\xbe\xa7\x06\xb4\x69\x52\xa5\xa5\x78\xd3\x6c\x65\xc2\x91\xf1\xff\x95\x89\x32\xce\xa4\x50\xee\xf0\x5e\x85\x60\xa5\xce\x4d\xfc\x60\x82\x26\x41\x72\x16\xd0\x20\x4e\xef\xa4\x3f\xeb\x8f\x8f\x4c\x64\xf5\x19\xcf\x9b\xa7\x21\x89\x2d\x71\x45\x69\x51\x32\x5f\xc4\x01\x25\xfc\x19\x4d\x1a\xbe\x01\xda\xf1\x95\x9f\x6c\x4e\x21\xc8\x9c\x0b\x75\x82\x72\x2e\x4e\x3f\x9f\x5f\x7d\x39\x3d\x3b\xbf\x82\x28\xd2\x39\x20\x12\xd6\x27\x5f\xc9\xdd\xf9\xf7\x05\xe0\x76\x15\xfc\x22\x33\x9a\x3e\x42\x40\x60\xd7\xfa\xa1\x34\xc7\x48\x34\x34\x04\x13\x44\xb4\xb9\xc9\x6b\xe5\x8c\x44\xb8\x8c\x0b\x28\x52\xed\xb0\x35\x4a\xc6\x2d\x8b\x57\xcd\xe1\x62\x58\xfb\x04\xb4\x0b\x04\x01\xb4\x6d\x19\x63\x94\x37\x30\x0c\xf2\x19\xc9\xa2\xdf\x08\x04\x89\x3e\x8c\xa5\xec\x28\x26\xe2\xe6\x45\x45\x01\x0d\xbb\xe6\xd7\xf0\x89\xcd\x05\xff\x2a\x53\xe7\x6c\x99\xc4\x69\xba\x68\xcc\x3a\x27\x34\x88\xff\x33\x12\x55\x48\x30\xff\x07\x84\x1a\xe0\xb4\x4e\xa8\x51\x12\x51\x65\xd6\x7a\x93\x2f\x17\xa4\x66\xf2\xae\x2e\x30\x63\x12\xe4\xe4\x33\x77\x4e\xe6\x17\xaa\x29\x27\xac\x02\x4d\x9a\xf8\x84\xc2\x39\x0a\xa8\xf0\x7e\x24\x9f\xa2\x79\x44\xfd\x3e\x0a\x26\x13\xb2\xa0\xac\xc1\x84\x6b\xa3\x18\x0f\xa9\x96\xed\xeb\xb2\x19\x73\x79\xcf\x65\x83\xdc\x07\x10\x9f\x94\x2f\x1e\xd8\xde\xc3\xcb\x60\x2b\x62\x53\xd5\x7d\x47\xa8\xf1\x16\xa2\xa4\x6c\x70\x8b\x80\xcc\x99\x07\x0b\x4e\xdc\xca\x72\xf6\x1b\xb7\xc8\x90\xaa\xcc\x87\x2c\x58\xe8\xaf\x39\x86\x1a\xc7\x30\x2a\x97\x87\x00\xe5\xe2\x26\x2b\xb7\xdc\xb1\xb2\xcc\x2d\xf2\xf2\xe0\x84\x51\x01\x95\x86\x94\x35\x7e\x55\x59\x56\x04\xc0\xc6\x81\x75\x32\x32\x4f\xef\x89\x0c\xdc\x18\x95\x31\x60\x9b\xf2\xb2\x76\xe8\x9c\x28\x2a\xd0\x0d\xab\xfc\x3a\x3d\x63\xbd\x91\x38\x27\x1b\xde\x34\x44\x0d\x14\x5f\x63\x77\xda\xb8\x8a\x1b\x54\x18\x26\xb4\x40\xf0\x25\xdf\xea\x12\xd8\x22\xec\x6c\x90\x09\x96\xa1\x54\x5e\xa4\x10\xd3\xf0\x95\x4c\xd2\x2c\x54\xc8\xb0\x12\xb3\x24\x40\x06\x8d\x20\x09\x89\x50\x6b\x1e\x5a\xea\xc9\x52\x65\xc4\x3c\xf4\x9c\x61\xf2\x06\x57\x19\xb7\xdd\xe7\xc6\x18\x21\x5e\xaa\x99\x03\xf9\xe6\x2c\x88\x42\x00\x41\x13\x35\xb6\x6c\x26\x55\x2a\xe4\xf1\xe7\x56\x61\x14\x9e\xcd\x82\xe4\x8e\xf8\xc2\x18\x0c\x05\xd0\x60\x72\x31\xce\x8e\xe3\xb7\x59\x37\x38\x8e\x95\x36\x78\xc9\xfa\x91\x38\x42\xd8\x3c\xa5\x10\x10\x14\x43\x14\xe2\x7a\x05\x4b\xd8\xda\xde\xa6\xa5\x68\x13\x60\x72\x64\x91\xda\x76\x04\x32\x94\xc2\x02\x3d\x44\x71\x2c\x9a\x53\x03\x50\x32\x0c\xa7\x13\x27\x08\x43\x2e\x45\x5f\x8a\x32\x33\x08\x96\xbc\x7f\x68\x06\x51\x20\x88\x2b\xdf\x20\x2e\xfe\xa5\xa0\xa6\xad\x1f\x3f\x4b\x80\x01\x2c\x10\x05\x61\x73\x4e\x83\xfc\x02\x88\x02\xd1\x9b\x77\x55\x3b\xf9\x97\x32\x94\x7a\xf3\x0b\x14\x12\x4a\x26\x94\xaf\xfb\x8e\x87\x26\x69\xbc\x9c\xeb\x8b\xae\x1a\x37\xd8\x5c\x85\x8a\x1d\x44\xcd\x84\x97\x6e\x10\x5e\x54\x21\xbc\x80\x35\x1f\x8c\x1a\xb8\x01\xcb\x27\xa9\x31\x37\x88\x49\x5c\x88\x30\xe2\x07\xc9\x89\xbb\x5e\x47\x27\x2e\x3b\x4a\x70\x43\xba\xc9\x8c\x30\xe6\x7c\x99\x4c\x08\x04\x56\x20\x74\xcc\x02\x00\x04\x05\x4f\xd2\xc0\xf1\x96\xd9\x4f\xc5\xc7\x3a\x5c\x8f\x1c\x8d\x2d\xd3\xad\x73\x17\xa8\xda\x97\x06\xa6\x69\xac\x65\x55\xf8\x2a\x11\x78\x15\x93\x74\x99\x50\x9f\x57\x73\x47\x28\x04\x19\xb2\xc4\xc5\x89\x05\xd5\xec\x28\x68\x16\x73\xaa\xf8\x70\x73\x22\x11\x00\x6a\x55\xc6\xbc\x92\x4e\xe0\xba\x01\xc0\x6a\xdc\x4e\x4a\xe1\x84\x60\xea\x6c\x11\xa6\x24\xc7\xe2\xf8\xa7\x8d\x82\x93\x7a\x2f\xda\x79\xc3\x78\x1f\x6f\x59\x7e\x99\x68\x01\x8a\xed\x16\x44\xb3\x2e\x02\x35\xc3\x59\xf1\x3d\xc2\x6f\xa4\x27\x3e\x44\x84\xcb\x1f\xe6\xa7\xe5\xb9\x96\x7f\x25\x28\x1a\xc8\xdd\x46\x2c\x51\x99\xb5\x40\x5b\x5b\x23\x5d\x29\x54\xde\x74\x8b\xac\x47\x8d\x1d\xae\x34\x2c\x6e\x90\xe3\x7e\x97\xbe\xa8\xd2\xfe\x51\x36\x86\x86\x08\x1a\x99\x82\x5a\x06\x5b\x12\x9d\x4d\xc4\xc4\xa3\x7c\xca\x25\x59\xd5\x37\x71\x93\x3b\x2b\x4c\x4d\x4d\x2b\x25\xb6\x9b\x20\xa8\x9f\x05\xdc\x5a\x95\x52\xcf\x8c\x57\xfc\x92\xc1\x11\x51\xbf\xff\x4a\x1e\x1f\x58\x8d\xb5\xec\x2a\x59\x64\x15\xd3\xd3\x58\xee\x7b\xe3\x95\xc8\x3c\x49\xe3\xb4\xbe\x4e\xce\x58\x1a\x7f\x6d\xf4\xd2\x6c\x92\xe8\xf0\xaa\x80\x68\xa3\x09\xb5\xb1\x68\xac\xb9\xe1\x73\x5e\x25\x4f\xe7\xc7\x8a\xca\x2e\xc3\x93\x8d\xb3\x58\x55\x3c\x0e\xb6\x8a\xc7\x77\x71\x34\x9f\x3f\xe9\xf4\x57\x7a\xec\x21\xeb\x4f\x2a\x7b\xba\x98\xa4\x21\xd9\x99\xa4\xf3\x45\x14\x6f\x39\x33\xd7\x84\xe1\x17\x39\x0f\x2a\xb1\xf8\x05\x8e\x85\xc6\x9b\xfb\x88\x3c\x34\xb9\x1c\xaa\xd6\x66\x84\xc3\xb3\x4c\x48\x25\xb1\xac\x4a\x25\xdd\x07\x71\x14\x0a\x80\xc3\x97\x79\xbb\x97\xf9\x22\x6e\x10\xca\xd2\xf8\x0d\xb3\x71\x06\x20\xd9\x7d\x34\x21\x2f\x3b\x3f\xd4\x8a\x56\xed\x62\x3d\x7f\xfa\x32\xe9\x25\x47\x0e\xcd\x5c\xcd\xa2\x93\x34\x6c\x1e\xed\x2c\x15\x00\xed\xfa\x1d\x9b\xeb\x34\x21\x09\xdd\x55\xc7\xd4\x9d\x34\x89\x1f\xcb\x0c\x5c\x9d\x63\x21\x2b\xcb\xef\x17\xdb\xce\x35\x28\x40\x39\x8a\xd1\x12\x4d\x50\x88\x66\x68\x8a\x16\x68\xce\xe3\x29\xde\xa2\x47\x74\x83\x1e\xd0\x39\xfa\x8e\x2e\xd1\xd5\xb6\xdb\xb0\xeb\xf2\x36\xac\x49\x5d\xf8\x7b\xee\xc0\x54\x6f\xf0\x17\x44\x9c\x19\x89\x17\x24\xc3\x7f\x45\xc4\x21\xf9\x24\x58\x90\xf3\xef\x8b\x8c\xe4\x79\x1d\x3d\xd5\x10\xae\x3b\x86\x70\x1d\x4d\x01\xbf\xa3\xa3\xe9\x9f\xaf\x3f\x7f\xd2\x20\xb6\xf2\x59\xa2\x4e\x2e\xe3\xb8\xc4\xd7\xb2\x2c\xee\x71\xa5\xe1\xb6\x94\x89\x15\x13\xbb\xf5\xef\x82\x65\xf9\x9b\xba\xaf\x2f\xb1\x71\x75\xf9\xea\x80\xfc\xbf\x88\x10\xee\x90\x3a\xa3\xf3\xf8\x2a\x98\x12\x4c\x09\xc7\x82\xe5\x41\x6d\xd8\x73\xc6\x9e\x6f\xb8\xef\xe1\x57\x92\x84\x24\x23\x59\x6e\xaa\xfa\x7e\x53\x2e\x0a\xd8\x65\xe5\x64\x3c\xcf\x15\xa1\x34\x26\xa1\x99\x4f\xf4\x02\xff\x39\xb3\x6d\xf0\xe7\x0c\x5f\x69\x3c\xa1\x90\xad\x35\xc0\xf7\xb7\x39\x0f\x87\xb9\xcc\x32\x92\xd0\xaf\xcb\xe4\x53\x9a\x2e\x20\x80\xeb\xf5\xdc\xb9\x0d\x26\xdf\x6e\x97\x59\x42\x4a\x11\xc9\x90\x8e\x38\x77\xfb\x31\x2b\x23\x3e\xff\x39\x63\x1b\xd5\x3c\xca\x95\xb2\xf2\x5a\xcd\x59\x6d\x4e\x5e\xb4\xab\x7d\xe0\x76\xdf\xb2\xe8\x0f\xd9\x88\x28\xcf\xdc\x86\x52\x8d\xfb\x39\x9e\x13\x73\x65\xea\x2c\xc8\x1b\x5b\x50\xc5\xb4\x7d\x41\x2b\x6a\xdd\xc9\x1b\x94\xae\x1f\xb2\x5a\xeb\xaa\x68\x21\x1f\xa4\xbe\x35\x27\x74\xb9\x38\x4f\xee\xa2\x84\xe8\x4b\xf0\x4a\x50\x29\xa7\x66\xc6\x56\x2a\x9b\xaa\x8e\x5a\x1d\x8f\xaf\x0a\x6d\x8b\x6c\x31\xe6\xea\xef\xa4\x4b\x1a\x13\x6a\xa1\x2c\xa9\xbe\x55\xa5\x94\x39\x28\xcf\x51\x9a\x1f\xd5\x0a\x30\xea\xdd\xfc\xb8\x52\xf6\x4d\xe9\xcb\xfd\xab\xce\xa9\xb9\x50\xbe\xbb\x23\x49\xee\x57\xf4\xbf\x19\xfb\xb0\xde\x41\xb1\x96\x9f\xeb\x9e\xc8\xe5\xc7\xe9\xc4\x42\x7f\xcb\xaa\xef\x74\x65\xfe\x0e\x25\xdf\xe9\xce\x54\x04\x99\xf8\x6d\x6b\xae\xc9\x8c\x4c\xbe\xdd\xa6\xdf\x2d\xf4\x69\x5b\x9e\x38\x4a\xbe\xed\xd0\xd4\x42\x3f\x6c\xcb\x11\x25\x8b\x25\xb5\xd0\xff\x64\x5b\x46\xda\x18\x02\x99\x95\x24\xdb\xca\x62\xcd\x0e\x32\x12\x58\xe8\x27\x88\xee\x9d\xf3\x8b\x9f\x9d\x67\x6f\x44\xd7\xeb\x2d\x93\x60\x74\x54\x0f\xfd\x05\xd4\xd4\x67\x80\x66\x6d\x21\x41\x83\x28\x32\xc9\x7c\x2c\x64\x91\xe4\xde\x42\x96\xb9\xad\xfa\xf3\x20\x4a\xaa\xc4\x60\xc9\x7d\xd4\xdf\x09\xd3\xf9\xce\xed\x32\x8a\x43\x3e\xb7\xd2\xc0\x65\x75\x9b\xa6\xca\x9a\x90\x09\xe3\xdc\xd5\xe4\x46\x54\xc2\xce\x1c\x3e\x2d\x30\x69\xe5\x0f\x11\x9d\xcc\x00\x85\xab\x49\x90\x13\x56\x64\xc4\x0d\x52\x2c\x5f\x2e\xb6\x07\x47\xa7\xfd\x28\xaa\x70\x6e\xa3\x24\x14\x56\x23\x2d\xfe\x51\x46\x66\x8f\x61\xc6\xe8\xd7\xd7\x88\x49\x2a\x2d\x4a\x93\x86\xcf\x14\xee\x9d\xce\x3e\xe1\x11\xd0\x36\x73\x16\x3c\xcc\xa8\x39\x4a\xcd\x9d\xb6\x8c\xce\x6e\x1d\xb9\xe6\xb1\x2e\xcb\x68\x2c\xfa\xf9\xf5\xb7\x93\xa5\x29\xfd\x15\x9d\x6e\xaf\x82\x65\xb8\xd6\x6b\xfc\x89\x42\xaa\xf3\xab\x4a\xe0\x0d\xb2\xd0\x2f\xd9\xb6\xd7\x4c\x82\xa1\x16\xfa\x77\xb6\xbd\x09\x0a\x21\xa7\xda\x4d\x99\xc6\x09\xf6\x46\x95\xfc\x39\x98\x64\x69\x95\xa5\xbe\xcb\xc4\x21\x46\xb0\xe7\x49\xb0\x08\x6e\xa3\x38\xa2\x51\x85\xf3\x4a\x4f\x75\x7e\xa8\x52\xdb\x54\x86\xad\xbe\xe3\xf5\xb9\xf6\xbe\x44\x6c\xa2\xce\x72\x11\x06\x94\xfc\x39\x4d\xbf\x41\xb4\xe2\xd8\xdf\x9f\xa2\x29\x39\x7b\x9c\xc4\xe4\x4c\x1a\x36\xe5\x7e\x99\x5d\xe7\x98\x54\x72\x40\xc4\x5d\xb3\x04\xba\x74\x99\xbb\x4c\x84\xa8\xac\xc8\x17\x30\xd5\x39\xa1\x67\x6a\xd1\x4a\x8f\x40\xdc\x00\x1f\xd0\xca\xf0\xad\xa3\x19\xc0\xcd\xe7\xd3\x8b\xd3\x0f\xe7\x5f\x6f\xae\xae\xbf\x7e\xbc\xf8\x70\xf3\xe9\xf2\xf2\xaf\x3f\x7d\x69\xc0\xe6\x21\x43\x33\x06\x8b\x3e\xb2\x49\x18\x87\x92\x0b\xed\xcc\x45\xd5\x5c\x9d\x58\xf8\x5a\x6e\xb9\xca\xc0\x4a\xea\x1c\xfd\x0c\x29\xd1\xd3\xef\x78\x48\x04\xbf\xd1\x05\x58\x05\xa2\x6a\xaf\x7c\xa2\x3f\xea\x1c\x79\x9d\x95\x81\xc3\xdb\x94\xbb\xee\xab\xc2\x6d\xdb\x28\x95\x23\x5c\x0b\x84\x57\xa5\xfb\x54\xb6\x54\x62\xec\x3e\xa7\x21\x37\x44\x6d\x1e\xba\x86\x5e\x90\x86\x5e\xcc\x65\x21\x66\x27\xea\x05\x7f\xce\x10\x71\x54\xc6\xb3\x27\x29\x4e\x2a\x66\xc2\x28\x0f\x6e\x63\x72\xba\xa4\x29\x8f\xc6\x17\x25\x77\x26\x51\x6c\xbe\x85\x1b\x04\xf1\xb4\xb8\x73\xc7\xc3\xd7\xf1\xa0\x39\x88\xd6\xc7\x5e\x7f\xfa\x98\x3d\x71\x37\x79\xf9\x59\xa8\xb6\xf2\x17\x5e\x1c\x4e\x9c\xf2\x93\x27\x6f\x27\xdf\x5d\x7e\xbe\xce\x08\xd1\x91\xd6\xf9\x81\xeb\xe5\x55\xd4\xbf\x7d\xb2\xae\x28\xbf\x92\x5b\x02\xe7\xef\xef\xa3\x2c\xa7\x17\xfc\xd0\xf4\xc2\x0a\xb7\x15\xf0\x64\xad\x2c\xc3\xef\xef\xe5\x83\xb3\xe5\x7b\xb1\xc1\x5c\x72\x61\xeb\xe7\x88\x3c\x60\xe2\x7c\xbc\xf8\xf9\xf2\xaf\xe7\x98\x38\xa7\xb7\xf9\xff\x8f\xbb\xbf\x7f\x6b\xdb\xe8\xf6\x46\xf1\xdf\xfd\x57\x18\x3d\xb9\x7c\x6b\xbe\x0c\x8a\x69\xf7\x77\xef\x7d\x94\x4e\xb8\x09\x90\x86\x36\x01\x0a\x24\x6d\x6f\x6f\x1f\x2a\xec\x31\x9e\x46\x48\xee\x68\x4c\x42\x6c\xfd\xef\xe7\x9a\x35\xef\x92\x0c\xa4\xed\xfd\x9c\xe7\x3a\xbf\x80\x25\xcd\xfb\xcb\x9a\x35\xeb\xe5\xb3\x04\xcf\x26\xed\x0d\x46\x93\x2b\xfa\x79\x41\x39\x83\xdb\x6d\xae\x29\x26\x4d\x20\xf2\x9e\x64\xda\xef\xa8\xb9\x4a\xc0\x5b\xca\x85\xf7\xec\xfd\x94\x17\x10\x6d\x02\x43\x93\x37\xea\xa6\x45\x13\x5b\x1f\xa1\xc9\x5b\x56\x7c\xf4\x9f\x2f\xe9\x67\xb1\xcf\x69\xa6\x7f\xbe\x96\xfc\x97\xcc\xa2\xd9\x2c\xe2\x6e\x6f\x60\x07\x7b\x50\x2e\x65\x9b\x64\xe3\xce\xbd\x53\xc8\xd7\x81\xbd\x23\x2b\x70\xa0\x7e\xc3\x44\x3a\xc4\xf0\xf3\x1d\xab\xaa\x74\xe8\x85\xd2\x3a\x6b\x68\x59\x4d\x1d\x1a\xb9\x07\xc5\x14\x61\x06\x2a\x55\x1d\xdc\x1f\x22\xed\xdd\x52\x91\xe1\x8c\x38\xcd\x12\x03\x99\x26\xed\xf0\xdc\xda\x8b\xdf\x25\xb6\xea\xed\x6d\xcc\x49\x61\x2c\x75\x41\x31\x63\xcd\xb8\x41\x50\x92\xd2\x1a\x97\x08\x61\x06\x1b\x92\x62\x8e\x50\xaa\xf3\xbf\x61\x42\x66\xf7\xf0\xb5\xaf\xae\xd8\x94\x14\x09\x9b\x62\xf9\x5b\xb6\x89\x94\x38\xab\x37\x0d\xd4\x3b\x18\x94\x7d\x72\x16\xaf\xd8\x34\x8d\xaa\xff\x7f\xf9\x7f\x5d\x7f\xbe\x28\x22\x7c\x9d\x97\x93\x8f\xe9\x3f\x56\x91\xf2\x05\xaf\xa2\x74\x34\xc6\x91\xc5\x4c\x97\xcf\xa3\x5d\x3c\xfa\x76\x88\x47\xdf\xfe\x27\x1e\x8e\xf1\x68\xf4\xed\x37\x78\x38\x1e\xc3\xed\x6d\x3c\x1e\xe3\x68\x9e\x55\x47\x77\x59\x1e\xa5\xb3\x2c\xaf\x28\x8e\x96\x8b\xbb\x8c\xcb\x8c\x1e\x09\x1e\xd7\xff\xc0\xb2\x91\xe9\x4a\xc1\x62\x82\x56\x30\x5a\x64\x93\x8f\xd9\x0d\xad\x9e\x6f\x96\x57\xe5\xec\xda\xca\x21\xaa\xe7\x92\x9f\x48\xe6\xd7\x55\xa4\xc4\x5e\xc1\xe4\xef\x43\x17\x0f\xe4\x54\x66\x89\xdb\x3d\x17\xc6\xc7\x7d\xff\xfc\xfb\x8b\x08\xe1\x8f\x1b\x13\xbc\xd9\xbf\xb8\x7a\xf5\xf6\xf4\xe0\xc7\x08\xe1\x73\x95\xca\x3a\xc8\x1f\x1e\x9f\x5f\xfe\x7a\x75\xb9\xff\x7d\x84\xf0\xef\x8d\x6f\xc7\x17\x57\x87\xc7\x17\x67\xfb\x97\x07\x6f\xe4\x31\xba\x7f\x79\x79\x2e\x2b\x3a\x6c\x24\x7b\x75\xfa\xfe\xe4\x50\x7e\x38\x21\x55\x72\x50\x72\x2a\x37\xa6\x51\xd0\x56\xc9\xc1\x9c\xe5\x53\xf9\xaa\xba\x50\xfa\x6b\x5c\x25\xf2\xf1\x42\x4e\x85\x7b\x05\xe2\x68\x90\x0e\x9b\x77\x65\xa2\x6c\x68\xf6\x61\x51\xbb\x94\xcd\x67\x59\xd8\x3b\xf6\x99\x15\x78\xc5\x2a\xbb\xf9\x24\x71\x79\x92\x72\x78\xf4\xfb\xd8\x00\x3a\x8d\xce\x01\x2b\x6b\xaa\xd7\xf2\x65\x76\x83\x62\x9d\xe8\x70\x0c\x00\xf1\x35\xe6\x54\xf1\x69\x31\x5a\x41\xd2\x29\xe3\xe2\x1e\x52\xea\x12\x8c\x07\xaf\xaa\x0f\xd5\x78\x54\x24\x67\xe7\xa7\x67\x47\x72\xa0\x0f\x8f\x0f\xaf\x0e\xde\xec\x9f\x7c\x7f\x34\x0e\xfd\xcd\x46\xbf\x8f\x7d\x75\xc6\xe8\x60\x8c\x19\x71\x76\xfc\x7b\xf2\xee\x9e\x1a\x32\x60\xcd\x0e\x3d\x6f\x1f\x36\x5a\x26\xef\xcf\x0e\xe5\xb5\xe8\xfc\xe8\xf5\xd1\xf9\xd1\xc9\xc1\xd1\xe1\xd5\x87\xfd\xb7\xef\x8f\xc6\x83\xc1\x43\x5f\xe3\x6f\x08\x69\xc5\x50\xdd\xf3\xb5\x25\xda\x9f\x18\x29\x15\xc8\xbe\x10\xbc\xe9\x33\xa8\x08\x85\x1c\x9d\x6c\x7a\x78\xfa\xce\x24\x51\xec\x4c\x3c\xc4\x90\x42\x4e\x94\x0e\x49\xac\x35\xb6\x98\x13\x81\x0b\x12\xcd\x85\x58\xa4\xcf\x9f\x7f\xfa\xf4\x29\xf9\xf4\x6d\x52\xf2\x9b\xe7\xdf\x0c\x87\xc3\xe7\xd5\xdd\x8d\x0a\xc9\x68\x6d\xec\xdf\x9f\x1f\x63\x15\x59\x90\x61\xe7\x58\x9f\x96\xb5\xac\x64\xe2\x2c\xf4\xcd\x51\x84\x62\x8e\x3d\xe5\xf7\x7a\x1d\x65\x42\x70\x08\x7f\xb9\xc7\x13\xdd\x19\x50\xf1\xc7\x25\x4a\xf9\xa8\x1c\xd7\x78\xca\xa6\xe7\x74\x42\xd9\x1d\x95\x1f\xab\x18\xad\xf4\x3b\x3d\xed\x4a\xe9\xe5\x3d\x4e\xd9\xf4\x3d\x30\xae\x2e\xbd\x4c\xa1\xde\x85\x29\xac\x60\xdb\x1d\x12\x27\xf8\xc4\x85\x9b\x89\x11\x79\xd9\x92\x57\x46\xf8\x24\xe1\xb4\x5c\xd0\x42\xe9\x6c\xfc\x65\xae\x49\xba\x5c\xed\x8b\xb2\x62\xe0\x26\x90\x9f\x65\x3c\xbb\xad\xd2\xd1\x58\x43\xe8\x1d\x1b\xf2\x78\xf1\xf3\xf5\x1f\xd5\xdb\xf9\x87\x27\x91\xc7\x87\x28\xe0\xdf\x44\xf6\xe8\xed\x42\xdc\x1b\xba\x87\xdf\x92\x13\x6b\xd7\x91\x67\xf7\xe5\x52\xa4\xc7\x78\x62\xe9\x42\x3a\x8a\xa0\x58\x27\xa4\x18\x63\x91\xdd\xa8\xaa\xb5\x20\xc1\x5a\x6c\xbc\x62\xc5\x94\x15\x37\x32\x93\x5c\x2e\x11\x8e\x20\x17\x9d\x46\x38\x62\xc5\x94\x0a\xca\x6f\x59\xa1\xa4\x38\x9a\xd9\x94\x9f\x44\x76\xad\x15\x09\x91\x5c\x73\x11\x8e\xb2\xa5\x28\x67\xe5\x64\x59\x01\xd4\xbc\x42\x49\x8e\x70\x34\x2b\xf9\xad\xac\x5f\xf1\xf9\x56\x6a\x62\x8a\x92\xdc\x73\x50\x8d\x7c\x31\x65\xd3\xe3\xa2\xa2\xdc\xc4\xe5\x7e\x5c\xcd\x4c\x55\xc2\x24\x28\x8a\x58\x36\x59\xe1\x46\x78\x9f\x50\x8d\x27\x46\x19\x0b\xdb\xb7\xb2\xdb\xd7\xf5\x3f\x28\x59\xbf\x45\x7a\x55\x1a\xbe\xe4\x2d\x7e\xfb\xc8\xa2\x7c\x6e\x3b\x0d\x4b\xec\x35\x99\x6b\x50\xd3\xbd\x0e\xcf\x1d\x05\x46\x2a\xd3\x7d\x71\x73\x5c\x01\x4b\x64\xe8\xf8\x83\x33\xee\x09\xaf\x9e\x36\xe7\xca\x50\x47\x4f\x9f\x09\xfe\xa0\x1f\xab\xec\x4e\xcd\x3a\xd7\xf3\x98\x69\xd6\x14\x1e\x68\x31\xd1\x0b\x46\x3e\xe9\xe8\x84\xea\xa1\x28\xb5\x7e\xc5\x7c\x15\x70\x3e\x45\x38\x9a\x53\x15\x54\x5f\x35\xe9\x56\xa9\x24\xf2\x0c\xb4\x0f\x39\xab\x40\x6a\xa8\x0a\xbd\xcd\xe4\xda\xba\x65\xb2\xba\xdb\x65\x2e\xd8\x22\xa7\x6e\xb1\x2d\x32\x21\x37\x8c\xbc\xf6\xb3\x2f\xf2\x45\x25\xe8\x22\xc2\x11\xc8\xfb\x23\x1c\x7d\x62\x53\x31\x8f\xc6\x58\xc9\xff\xa3\x48\xad\x3f\x98\x69\xd9\xc9\xa5\xa0\x53\x14\xaf\x24\x4f\x0d\x73\x26\x20\x18\x89\x62\xba\xac\xb6\x5c\xbd\x6d\xbb\x1f\xab\xb3\xc8\xcc\x22\x6a\xa0\x38\x2b\x38\x39\xda\x67\x45\xff\xb5\xf9\xf6\x7a\x44\xc7\x1a\x7f\xd8\x08\x27\xf4\xac\x9b\x05\xae\xa7\x48\x05\x75\xd0\x01\xfe\xa8\x0e\xe4\xc0\xd1\xaa\xf6\x0a\xd2\x37\x59\x42\x08\xad\x63\x81\x94\xbb\x2d\xc2\x5c\x12\x06\x39\x18\xca\x12\x51\x0f\x90\x7a\xb8\x65\xe6\x47\xf6\x59\x79\x50\xc9\x35\xec\xf8\xec\x2f\xf8\xcb\x63\x8b\xd8\x5b\x58\xd0\x93\xf7\x1b\x97\xe7\xa6\x55\x09\xc2\xc9\x31\xb6\xab\xd7\xae\x4e\x27\xb9\xec\x5a\xa0\xbc\x04\x85\xdf\xa4\x04\x8d\xa0\x9e\xfe\x8a\xea\xc8\xfe\x47\xc5\xd4\x7f\x54\x21\x8e\x5b\x8b\xf9\x13\xcf\x16\x6e\x9d\xa9\xf5\xac\x56\xca\x18\xcb\xf2\xb5\xf1\x66\x99\x57\xe1\xe8\xc0\x85\xe4\x3d\x7e\xff\xa4\xc1\x81\x2e\xc0\xd8\xbc\x32\xa7\xc8\xf2\xf0\xc7\xcf\xf9\x7f\x17\xb4\xf3\x14\x89\x06\x5a\x5c\x18\xb5\xd8\xed\xff\xc4\xa3\x6f\xff\x4b\xb1\xda\xdf\xfc\x17\x96\xec\xf6\xee\x58\xf3\xdb\x78\x34\x8a\x4c\x3e\x1c\x41\x48\xe6\x31\x1e\xad\x9a\xfc\xfa\x7f\xe3\x5d\xcd\x9e\xcb\xbd\xc2\xb3\x5b\x49\xfa\xd4\x79\x84\x5b\x89\xa1\x86\x21\x1e\x45\x39\x2b\x3e\x5e\x32\x91\xd3\x68\x3c\xee\xc8\x39\x7e\x84\xd9\x67\xb3\xbf\x8b\xcb\xd7\xa2\x73\x7b\xe0\xbd\x31\x5e\x8e\x33\x4e\xe9\x17\x1a\xaf\xcc\x84\xa8\xed\xfb\xfe\xe4\xf0\xe8\xf5\xf1\xc9\xd1\x61\x54\x23\xfc\xa1\x99\xb6\x46\xf8\x59\xfb\xc0\x7c\xe5\x16\x60\x16\x61\x5e\x2e\x05\x4d\xdf\x60\x65\x0c\xa7\xff\x57\xe9\x1b\xfc\xc7\x92\xf2\xfb\xf4\x0d\x8e\x26\x4a\xbb\xb5\xf3\x69\x4e\x8b\x48\x2d\x18\x21\x87\x4a\xfd\xe4\x34\xd7\xef\xf4\xb9\x68\x9e\x24\xdd\x53\xbf\xd5\xfd\x19\x18\x93\x34\x52\x0f\x11\xce\xcb\x4c\x2e\x74\xfd\x56\x3f\xb9\xd3\x51\xbf\x77\xe7\xae\x56\xff\xc9\x43\xb2\x6b\xb3\xcc\x39\x9d\x49\x12\x0a\x73\x28\x8f\xe1\x3c\x3c\xaa\x35\x1d\x1e\xbb\xa3\x23\x38\x0a\x54\x9b\x5c\x33\x82\x03\x9f\x67\x85\x62\x9b\x58\x71\x73\x5c\x34\xdf\x9c\x2e\x65\xb1\xf4\x8e\x16\x2a\xf2\x4d\x34\xc9\xd9\xe4\x63\xf4\xe8\xcd\x42\x6e\x98\x95\xcb\x46\x35\xe6\x95\x32\xae\x2b\x34\x84\xa8\x85\x33\xba\x2b\x3f\x82\x15\x8d\x56\x59\x4b\x82\xbe\xd0\x92\x61\x14\x47\x3b\x46\x93\x8d\xf0\x95\x9e\xae\x73\x98\x57\x65\x60\x95\xb3\xac\x42\x71\x64\x32\x27\x7e\x12\x59\x79\x33\x1b\x87\x8b\xd7\xc3\x99\x21\x89\xcc\xa8\x46\xf6\xf1\x7c\x2a\x9d\xcd\xc6\x5d\xfb\xdc\xb9\x14\xc1\xdb\x08\x47\x1d\xcd\x89\x3c\x6d\xbb\xd2\x7d\xa8\x22\xcc\xc0\x59\xfb\x29\x42\xde\x28\x8f\xda\x70\x28\xc0\x7c\xe9\x4a\x2f\xef\x66\xbd\xca\x70\x0a\xab\xff\x55\xbb\x2a\xb5\x3b\xa8\xd9\x1d\xa2\x51\xe7\x96\xac\x53\x5e\xbf\x04\xfc\x12\xc0\x57\x23\x7c\xa5\xf6\x50\xb3\x32\x78\xdb\xae\x43\x25\xee\xec\xce\x87\x34\x94\x99\xd4\x98\x82\xdb\x81\xe5\x25\x37\x9d\xef\x5b\xbb\xee\x6c\x0f\x00\x5c\x58\x75\xa8\xf3\x12\x81\x01\x79\x5d\x99\x40\xf9\xdb\x4f\xd2\x1f\xb5\x35\x5a\x5d\xf0\xb6\xb4\x9c\x2d\xb3\x81\xe2\x96\x9c\x6e\x4b\x41\xa5\xe8\x14\xba\x16\x2f\x37\x0c\xd3\x86\x4a\x3a\x17\x81\x5a\x50\xf0\xc3\x4c\x56\x74\xa5\x47\xd4\xdb\xbf\x01\xd1\x6a\x0d\x75\xd7\x6a\x0f\x07\x7e\x6b\xcb\x34\xf6\x8a\x55\xfb\xd0\xbe\x58\x8d\xb9\xbc\xb7\xbd\xa2\xfb\x5f\xd5\xe4\xd6\x1e\xf9\x77\xf6\xa3\x6b\x4b\x7a\x88\x7a\x72\xb1\x0a\xd4\x58\x0c\xba\x87\x02\x7a\xe8\xf7\xd8\xe2\x14\xeb\x26\x85\x08\x37\xca\xae\x71\x14\xb6\x12\x3c\xee\xa3\x6b\xc5\x15\x7a\x41\xbc\x02\x38\xf2\x3e\x77\x77\x14\xd4\x13\x84\xef\x09\x03\x47\xd1\x8f\x50\xaa\x4c\x53\xd5\x10\xd9\xf0\xa8\x2b\xb3\x7b\x0b\xb3\xb3\x98\x23\x88\xa5\xea\x21\xce\xc8\xf0\x45\xe6\x60\x42\xb3\xed\x6d\x04\x61\x21\x4d\x9f\x5e\x97\x1c\x06\x26\x2e\x30\xc3\x62\x94\x8d\x31\x48\x1b\x75\xb7\x0c\xe6\xce\xd6\x6e\x8d\x1b\x74\xbf\x3d\xd7\xf6\xd8\xf0\x97\x44\xe7\x26\xb0\x20\x8b\x7e\xca\xc1\xa0\xb1\x37\x0c\xcf\xe8\xd7\xbb\xc3\x8a\x48\xce\x49\xf3\xc8\xf9\x2b\xad\x51\x80\xb4\xad\xf6\xac\xd7\x41\x7b\xd0\x86\x06\x95\x4b\x11\xa9\x55\x02\x87\x92\xb9\x15\x80\x04\x87\x55\x17\x4c\xf2\x9e\x07\xf2\x08\x44\x1e\x20\x12\x08\xa6\x57\xd7\xcb\xeb\xeb\x9c\x56\xa9\xc0\x0b\x0e\x27\xdf\xa1\x51\x1b\xeb\xc9\xd3\x08\x20\xe6\xe6\xa9\xd6\x31\x66\x64\xab\x58\xaf\xa3\xab\x8a\xe6\x33\x88\x7a\xd7\xb3\xe8\xcb\x83\x01\x1b\x0c\x68\x12\x16\x17\x23\x0c\xde\xba\x42\x7e\xaa\x44\xb9\x38\xe3\xe5\x22\xbb\xc9\xd4\x28\xe0\x26\x01\x74\x4b\x7a\xe3\x5a\x87\x00\xdd\xc1\xd2\x5f\xe9\x03\xac\xb4\x47\x4a\x66\x16\x65\x6e\x79\x95\xa5\xee\xd6\x84\x28\xe2\xae\x85\x2e\xb9\x62\xba\xe0\xd8\x2f\x3d\x43\xf8\x59\x32\xcb\xb3\x9b\x1b\x3a\x3d\xb6\x86\x76\x48\xde\x8f\xb4\x0a\xa2\x2c\x12\x6b\x58\x31\xc1\xc6\xc4\x17\xe2\xda\xd1\x4b\x3b\x45\xf1\x04\x2c\xd0\x72\xbc\x44\x72\x18\xc0\xf0\xb6\x95\xc6\x8b\x45\x60\xfb\xe2\x6d\x22\xcf\xec\x7a\x45\x13\x37\xfd\x10\x79\xd5\x3c\x5c\x96\x36\x46\x73\x5d\x63\xc9\x7f\xfd\x0d\x04\x5c\x73\xa6\x01\x09\xd4\xbf\xde\x00\x87\xe7\x2f\x67\x49\x66\x32\x1b\x56\x50\x67\xdd\x44\xb1\xfa\xfe\x3b\x59\x96\x3f\x8b\xd4\xce\xa2\x30\xb3\xc8\x1d\x69\x29\xc2\x23\xb9\x48\xcc\x88\xbe\x3f\x7f\xab\x7d\xee\x6a\xb9\x23\x74\xe1\xed\x61\x68\x74\x78\x9f\xd3\xb7\x10\xb6\xcf\x75\x4e\x9f\xa4\x2d\xfa\xde\x68\x9e\xcd\xe9\x13\xf4\x2d\xa1\x70\x32\x9b\x01\x2d\xfd\xa2\x3d\xde\xc7\x95\xd1\x6a\x67\x17\xf7\xd3\xa4\xbd\xfa\x98\xc4\x82\x0c\x5f\x08\x17\x83\x5e\x18\x77\x12\x4e\x0c\xa8\xb4\x6a\x13\xb7\xdb\xa6\x36\xb4\xc0\x1b\x2b\x39\x11\x69\xf4\xbf\xa2\x0e\x89\xaa\xac\xd4\xb0\x23\x3f\xcf\x69\x61\x0f\x68\x1f\xf1\x14\x3a\x2a\x39\x1c\x8f\x61\x57\xa1\xc4\x57\x0b\xb5\xd9\x7c\x2c\xd9\xc1\x40\x66\x33\x67\x03\x5a\x09\x62\x02\x3b\x6b\x11\xfe\xc7\xf1\x7a\xed\x8a\x74\x97\x42\x2c\x92\x6a\xce\x66\x22\x46\x16\x05\x76\x24\x6c\x68\xcf\x71\x0f\x9c\x87\x58\xf5\x93\xdb\xe4\x7b\xae\x18\xbd\xb6\x75\x50\x6e\x1d\x56\x5b\xdb\xe8\xfb\x09\xde\x20\x0c\xe7\x84\x15\xaf\xdb\x04\x7a\xfd\xbc\xf1\x33\xe9\x77\xae\x61\xd8\x7d\xd3\xdc\xec\x9b\xd6\xbb\x2a\xc2\x42\x47\x0d\x0e\xce\x53\x37\x46\x85\xae\xfd\xe5\xd0\x46\x15\x1d\x15\x5e\x4f\x1f\x42\x30\x18\x0c\x58\x38\x08\x06\x46\x18\x3a\x48\x98\xee\x3a\x2e\xd4\x48\x40\x20\x61\xd4\x6b\x6a\x44\x9f\xe1\x67\xdd\x52\x07\xbd\x1d\xd5\x15\xd9\x93\x7c\x3f\x0b\x25\xdf\x2d\x19\xb7\xba\xcc\x57\x91\x96\x74\xff\xd1\xd0\x4d\x9d\x1f\x1d\x9c\xbe\x3b\x7b\x7f\x79\xa4\x54\x5c\x4e\x45\xfa\xb3\xa7\xc1\xf0\x90\xf6\x34\x78\x30\xb8\xc8\x7c\x4f\xca\xc4\xc6\x4e\xfc\x33\x6e\x87\xa3\x3f\x3a\xd4\x49\x35\xe6\x54\x6f\x4b\x25\xa4\xbd\x4d\x7e\x2f\x59\x81\x62\x6d\x52\xdf\xd2\x28\xfd\x31\x46\x5a\x3a\xab\x35\xce\xdf\xe3\xef\x13\x56\xa9\x07\x2d\xfe\x27\x5b\x26\xb8\xca\xaf\x21\xb4\xaf\x45\xab\x86\x0a\x0d\x56\x75\x3b\xb7\x41\x6b\xb6\xe6\x19\x3a\x47\xea\x67\xaf\x3d\x2c\xef\x1f\x1b\xa0\xb3\xbf\x4a\x06\x5a\x35\xe1\x87\xce\x26\x54\x5a\x6f\xde\x86\xaa\x8e\xa2\x6d\x2f\x45\x6d\x4c\x8d\x83\x2b\x8d\x07\xd5\x58\x07\x7a\xf8\x1f\x60\xda\x7f\x22\xab\x68\x10\xa5\xd1\x20\xbb\x5d\xbc\x88\x70\xf4\x9d\xfc\x9d\x0b\xf9\xf3\xa5\xfc\x79\x23\x7f\xfe\x23\xfa\x47\x1a\x0d\xfe\x58\x96\xf0\xfe\x1f\xf2\xfd\xff\xfa\xfc\xcd\x7f\xc9\x87\xdf\xd4\xc3\x7f\x0e\xe5\x03\x51\x0f\xdf\x1e\xbe\x88\x6a\xfc\x0b\x79\x3e\x1a\x7c\xf7\x32\xfa\xc7\x6f\x64\xfc\x1c\xff\xcb\x7f\xba\x71\xab\x89\xfa\xb8\x64\x3f\x8d\xe8\xd8\x0d\x94\x68\xc2\x7e\x12\x42\xf7\x28\x89\xa2\xb4\x6d\x7f\x3d\x18\xc4\x9e\xd1\x34\xc2\x72\x60\x7f\x90\x03\xeb\xc0\x94\x3a\x40\x44\x69\x47\xfc\x32\xda\x19\xbc\xc1\xd8\x71\xeb\x89\x2a\x68\xe7\x4c\x39\x94\x67\x1d\xd0\x46\x2d\x96\xf6\x3d\xb3\x81\x97\xea\x25\xd3\x19\x8d\x95\xd0\xa3\x59\x83\x84\x3a\xb3\x25\x1a\x2d\x57\xaf\x46\x66\x9b\xf0\x4d\x56\x4c\x73\xe5\x19\xe6\x8e\x28\x7b\x46\xf5\x8d\x0e\x62\x65\xac\xb9\x0a\x0c\x12\xc3\x94\xd5\x8d\x72\x0d\xde\x26\x07\xcf\x73\x30\x1c\xf2\x4c\x9a\x62\xd6\x85\xfd\xef\xe2\x98\x88\x64\xaa\x30\xc1\xdf\x82\x48\xae\x8e\x87\xb8\x44\x7b\x2b\x40\xd4\xa0\x29\xc7\xbe\x41\x5e\x5a\x62\xe5\x82\x02\xf6\x30\x50\xd5\x0f\x0c\xe4\x28\x26\x7b\xcc\x42\xec\x6d\x54\xa7\x4f\x2a\x0a\x00\xc5\xd4\x00\x9d\x65\x5c\xb0\x2c\x7f\x74\x16\xfc\x74\x0e\x12\x79\x43\x16\xf7\xbd\xd6\xcb\x89\xd1\xd5\x82\xd3\x45\xc6\xe9\x3e\xbf\xa9\x5a\x00\x72\xf5\x94\x4d\x0f\x02\xed\x80\x46\x34\xa8\xad\x72\x55\xf7\x18\x72\xba\xe4\xb2\x09\xb5\xb2\x0c\x74\x9f\x94\x3a\xb5\x99\x41\x2b\x59\x65\x06\xb7\x67\x4a\xaf\x13\xc6\x43\xeb\xb7\x67\x2b\xe5\xec\x5c\xa7\xf2\x97\xb2\xde\xae\x7f\x93\xc4\x65\xa3\x19\x11\xa3\xca\x09\x9d\x92\x55\x30\xc1\xa0\xda\x53\x2f\x2e\xb3\x1b\xf9\xe4\x0d\x83\x7c\x54\xb4\x15\x9e\xb4\x05\x73\x0b\xae\xc9\x89\x3d\xc1\xf8\x71\x6b\x17\xeb\x6b\x92\x79\x54\x65\x1c\x64\x79\x4e\xb9\x57\xe1\xc5\xa4\x5c\x80\x1d\x95\x67\x39\xb9\xb1\x0e\x55\xc6\xb1\x86\xd0\x97\xb9\x3e\xf1\x6c\xb1\x50\xda\x4a\xcf\xfd\x15\x22\x50\xa8\x39\xad\x68\x5f\x1d\x79\x30\xbd\x06\xd2\x3f\xc4\xf3\x2b\xf4\xf0\xc1\x15\x00\x97\x44\x24\x92\x01\x0f\xde\x3a\x70\x2e\x15\xe7\x90\x7e\xea\x2f\x9d\x0a\xfc\xbc\x2c\xc5\xb9\xf1\x70\x8a\x01\xa0\x50\xf0\x52\xf6\x14\x53\x84\x7d\xe3\x60\x8a\x4d\x88\xaa\x14\xae\x54\x57\xce\x6b\x09\x74\x24\xc8\x58\xd1\x26\xc6\x5a\xbf\x84\xc5\x0c\x60\x4d\x1b\x86\x05\xad\x32\x9d\x9a\x68\x6f\x51\xb3\x1c\x30\x95\xe7\x3d\xcf\x54\x98\x3b\xb5\x44\x2f\x39\xa5\x46\xb5\x69\xf2\x69\x8b\x84\xc8\xd4\x09\xa5\x98\x8f\xca\xa5\x3e\x93\x93\x3f\x49\x8e\xde\x9d\x5d\xfe\x7a\xb5\x7f\xfe\xfd\x05\x36\x91\x0c\x0c\xd6\x80\xb5\x2d\xd6\x06\x9c\x48\x07\x4e\xd4\x8c\x15\xf8\xa1\x57\x83\x41\xa5\x3d\x5a\xdc\x2f\x1d\x71\x62\x4a\x4a\x93\x32\xf8\x20\xbb\x9e\x0f\x06\x10\x91\x53\xcd\xd8\x9c\x4c\xf1\x82\xcc\x93\xdb\x72\x59\x88\xb3\x92\x15\xa2\x97\x25\x14\x3c\x2f\xc8\xca\xbd\x4c\x17\x4f\x18\x00\x95\xcd\x0c\x80\x7a\xd2\x03\xb0\x78\xa8\xd3\xf3\x76\x7f\xeb\xc7\x2a\x33\xb5\x00\x73\xbc\xe3\xbc\x30\xf4\xa4\xb9\x71\xe6\xc9\x24\x5b\x88\x25\x97\x83\x66\x6b\x0c\x96\x95\xad\x5c\x58\xb3\xb2\x1a\x3c\x7e\x26\xd6\x62\xfb\xd0\x99\x25\xc7\x19\x86\xdb\xb2\xec\xae\x5d\x8b\x1b\x1a\xeb\x7b\x91\x67\x08\x9b\x11\x1a\x0c\xbe\x3a\xb3\xce\xa9\xca\xf8\xba\x9c\x6a\xe5\xa1\xda\x02\x7c\x66\x75\xc7\xc1\xb2\xb2\xa3\x40\x6b\x47\xab\xe3\x21\xbe\x49\x96\x85\xa4\x0c\xc6\x02\x0d\xdc\x81\xb3\x4a\x67\x03\xb8\xd5\xe0\x3c\x74\x40\x89\x54\x7e\xbb\xa0\xf9\x2c\x56\x1b\x9d\xd6\x0e\xfa\x11\xa0\x50\x33\x3f\x42\xc9\x86\x0d\xb9\xd7\xe2\x99\xd3\x69\x72\x70\x7a\x72\x71\xb9\x7f\x72\x29\xf9\xf8\xee\x03\x83\x26\x86\x36\xc4\xd6\x53\xa4\x55\xb6\xe4\xb0\x9e\x30\x9c\xce\xdc\x47\x16\x2d\xb7\x81\x9e\xc5\xaf\xcc\x6c\xf6\x87\x2e\xe3\x6b\x72\x6a\xd2\x22\x10\xb2\x67\x1f\x5a\xfd\xc5\x6e\x99\x82\xcc\x02\xf9\xca\x8e\xd9\xec\x66\x65\x7e\x4d\x26\x84\xba\x8f\xed\xff\x4f\xcd\xd4\x0d\x15\x7a\x17\x4a\x26\xcc\xbf\x62\x6e\x5a\xeb\x86\x53\x03\xfc\x0e\x0a\x36\xb9\x15\xd5\x87\xef\x92\xb6\x22\x65\xe6\xee\x3a\x95\xb9\xfb\x9c\x66\x68\x89\xf0\x23\x6e\x81\xad\x99\x2a\x68\xda\x2a\xc8\x08\x08\x95\x44\xd6\x75\xd7\x94\x68\x6f\xe0\x26\xd4\x87\x24\xac\x26\x74\x91\xd9\x67\xdc\x44\x2d\x9a\x67\xd5\xcf\x8a\x93\xd0\xac\x1d\x61\x5e\x54\x9a\x73\x3a\x23\x5e\xe4\xce\xf6\x2b\x59\xf6\x39\xbd\x63\xe0\xa4\x6a\xb8\xf6\xbd\x61\x0a\x74\x00\xce\xb4\xd7\x25\x07\x4a\xc0\x13\x91\xdd\x18\x08\x0e\xc5\x35\x90\x87\x99\x09\xc9\x41\x6c\xa4\xeb\x20\xeb\x92\xa4\xdd\x8a\xcb\x2d\x00\x08\xde\x1a\x3e\x39\xa3\x1d\x2c\x3f\xee\x64\x08\x27\xa2\x42\x20\x19\xd3\x54\x1a\x30\x35\x8d\x80\x48\x9e\x55\x3a\x02\x01\x2d\x04\x46\x8e\x23\xaf\x40\x3d\xca\xe0\xed\x14\x7c\x3f\xc8\x69\xc6\xd5\xc2\xb4\x01\x22\x3b\xad\x2f\x29\xea\xf1\xc1\x20\x86\x6f\x13\x99\x49\x7f\x91\x89\x90\xbc\xf7\xb8\x2f\x8d\x7c\xf2\x9c\x36\x9e\x4a\x49\x10\xf2\xa5\x76\xf4\x17\xfa\x6b\x97\x89\x15\xee\x19\x51\x9c\xb7\x82\x26\xd4\x5c\x1f\xe6\x8e\xd5\x5c\x6a\x51\x47\x30\x97\xed\x25\x6c\x21\xe1\x8d\xc5\x3a\xf6\xe4\x43\x69\x01\x8c\xc1\x14\x6e\x77\x70\x8d\x33\x7c\x54\xe6\x78\x2a\xe7\xf8\x44\x8d\x90\x23\x2e\x71\x86\x30\x1d\xfd\x31\x06\x08\x94\x29\xc4\x3f\x5f\xde\xaa\x93\x48\xbe\x46\x98\xd7\x3d\x25\xf2\x31\x51\xf9\x54\x07\x66\x7e\x07\x1e\x69\xba\xe4\x9e\x55\x19\xc2\x04\x57\x2d\xbc\x60\x62\xb4\xb8\x23\xa2\xd6\x8d\x0c\xee\x5f\x90\xac\x56\xe6\xb6\x3e\x8e\x78\xd8\x21\x10\x82\xb1\x4a\x09\xad\x50\x2c\xd0\x9e\xdc\x25\x0b\x1a\x8b\x11\x1d\xdb\x2a\xb0\xb6\xeb\x4d\x27\xc9\x19\x67\xb7\x4c\x39\x42\xe8\x36\x1b\xb6\x4b\xd8\xfe\x2d\x5c\xff\x66\x74\xe5\x28\xcd\xad\xbe\x96\x59\x8c\x0e\x42\x75\xb4\x38\xe1\x47\x8b\xe3\x04\x0c\x6e\x63\x01\x21\x66\x2c\x22\xa3\x2d\xc6\x84\xdf\xb1\x3e\xe1\x90\xd8\x93\x7d\xdc\x04\x09\xc0\x90\x17\x60\xd8\xc4\x68\x28\xe7\xca\x0a\x4b\xf1\xae\x27\x68\x45\x7b\xaa\xdc\xd1\x70\x8c\x52\xdd\x52\x20\xb6\xd7\x14\xdf\x53\x7c\x45\xc9\x6a\x91\xf1\xca\x8b\x73\x11\x86\x11\xb0\xd1\x05\x8c\x86\x73\x44\x31\xc5\x5b\xc3\x71\xcf\xa0\x6f\x55\xcb\x6b\x25\xc8\x89\x87\x18\xe2\xe4\xf9\xaf\xc4\xf6\xae\xe9\xeb\x48\x92\xdc\xad\xdd\x71\xad\x78\xd2\x3c\x37\x98\x53\xb8\x84\xaa\x47\x80\x2c\x30\x26\xc0\xb1\x47\x6c\x2a\xbb\x56\x05\x28\x4e\x60\x8b\x4d\x71\xe6\xec\x99\x81\x56\x2e\x07\x83\x78\x49\xa8\x51\xac\x1d\x4f\x11\x5e\x92\x87\xa6\x74\xa9\x63\x08\x82\x3f\x86\x33\x80\x96\x75\xe2\x25\xde\x1a\x62\xe5\xcc\xa9\x40\xab\x32\x37\x1c\x49\x84\x5e\xee\xec\xe2\x39\x99\xee\xdd\x48\xd2\x9a\x19\xa5\x6e\x12\x21\x94\x42\x7c\x92\x0c\xf5\xae\x35\x4e\xaa\x73\xc7\x3b\xbe\xb8\xfa\x70\x7c\x71\xfc\xea\xed\x11\xf8\xe0\xdd\xe7\x14\xfa\xe6\x19\xaf\x5f\xd3\xc1\x20\x9e\x03\x29\xbf\x96\xc5\xcc\x31\x94\x16\xb1\xea\x03\xab\xd8\x75\x4e\x23\xe4\x3c\x48\x5c\x8b\x2b\x3c\xc7\x5b\xbb\xba\xb9\x35\xfe\x44\x89\xec\xc6\x94\x55\x8b\x3c\xbb\x4f\xfb\x45\x59\xd0\x17\xd1\x63\x2d\x8a\xaf\x29\x81\x05\xfe\x40\xb4\x3f\xb5\x39\x85\x91\x9e\xea\x46\x99\xf3\x50\xee\x56\x7d\x12\x8a\xec\x46\x8b\x7c\xcb\xdb\x6b\xc9\x23\xc5\x23\x21\x5f\x62\x38\xb9\x00\x7b\x49\xed\x69\x85\x8b\xe3\x0a\xb7\xd4\x49\xef\x67\x5b\x89\xdd\xd9\x46\x2d\x2a\x1c\x7c\x02\x9b\xc5\x16\x10\x8d\x6e\x47\xfd\x46\xcf\xed\x26\x93\xab\x7b\x0f\xe2\xc2\xa5\xdc\x5c\x09\x3e\x01\x43\xee\xfb\x79\x59\x73\x33\xe7\x22\x50\xd7\xf8\x9e\x12\x4d\x6d\xc9\xcb\x95\x68\xac\x18\x35\x99\x58\xcf\x1b\xc5\x9d\x85\x28\xd7\xbb\x38\x98\x4c\x8e\xdc\xc4\xa9\x83\xea\x88\x92\x55\xb8\x31\x94\x80\x61\x04\xa0\x1b\x8d\xd0\x9b\x72\x87\x80\x11\x3f\x2a\x1a\x2d\x52\xe0\x8c\xf8\xa1\xe5\x5f\x22\xbb\xc6\x1d\xec\x71\x85\x73\xc2\x5a\x4b\x7d\x49\xf2\x3d\xe6\xad\xf2\x74\x34\xc6\x53\x92\xab\xe5\xbf\xd4\x6b\x9e\xa1\x5e\xe5\x62\x2c\x94\x40\x6a\x3f\xd3\x78\x8a\xf3\xbd\xe5\x68\xe9\xd4\x2b\x29\x43\x20\xf9\x38\x95\xdf\xe0\x94\xd9\xd0\xf8\xca\x5b\xd4\x46\x10\xf3\xb9\x75\x88\x04\x4b\x53\x9f\x1b\x8b\x4c\xcc\xcd\x32\x95\x4b\x91\xc2\xda\x53\xc6\x3f\x06\xe6\x68\x7a\x26\x13\x01\xd7\xf9\xd8\x62\x84\x35\x07\x60\xd8\x3a\x1a\x6b\x26\xe6\xa9\xc0\x61\x51\x46\xbf\x6f\x57\x9b\x89\x95\xd2\xa8\x31\x1e\xe2\x7b\x1f\x6c\x49\xb8\xf8\x13\x74\xbd\x56\xb1\xc2\xad\xec\x5b\x73\xc5\xaa\xef\xa7\x6d\x3e\x58\x59\x27\xc2\xbf\xae\x71\x10\x7c\x29\xe6\xf7\x36\xf4\x66\x96\x57\xf7\x66\xb3\xda\x61\xf1\x7b\xbf\x82\xdc\x29\xc5\x2a\x63\x2a\x30\xe4\x69\x76\xcd\x6e\xc6\x3d\x91\x72\xc5\xb3\x5f\xd0\xa6\xd3\x14\xb8\x23\x46\xa8\x67\x3d\x13\x2f\x94\xdc\xf0\xb2\x99\xf2\xe2\xf4\xfd\xf9\x81\x4c\xa9\x7a\xf9\xee\xc9\xec\xc3\x83\xac\x43\x38\xed\xa3\x4b\x3a\x26\x74\x33\x27\x61\x3a\x64\x38\x8a\x76\x02\xed\xd9\xf3\x90\xff\x50\x57\xbe\x87\xd3\xd7\xa3\x0b\xfa\xa7\xf2\xc1\x98\x9f\x35\x47\x72\x1f\x90\xc8\x7d\xf5\xde\xbe\x7f\xf9\xa2\x8e\x87\x38\x68\x4a\x2f\x31\x84\xd4\xeb\xd0\x95\x70\xd9\x44\xc4\x08\xc7\x25\x81\xdf\x8e\x56\x64\x36\x4d\xcf\xb9\x94\x93\x6c\x2f\x66\xc0\x69\x8a\x44\x03\xc1\x0c\x06\xf6\xe7\x88\x8f\x51\xea\xd7\x42\x32\x15\x7d\x4f\x96\x6e\xf6\x41\x9c\x24\x09\x45\x9a\x99\x15\x64\xa5\xcd\x6c\x99\x92\x6a\x51\x9c\x67\xd7\x34\x4f\x1d\xf4\xd1\x24\x2f\xab\x25\xa7\x3b\xda\x7f\xe1\xab\x8c\x4d\x94\xf1\x8f\xf1\x7c\x10\x58\x6b\x1f\x8d\x32\x52\x12\xdd\x24\x49\x0a\x15\x20\xdf\x8d\xdf\xc7\x80\x51\x02\xb7\x2c\x2c\x99\x20\x73\x7a\x15\x9d\x81\x1c\x59\xd7\xdb\x5e\x31\x3a\x18\x13\x66\xec\xbf\xfa\x25\x19\xbe\x28\x1d\xcb\x58\x1a\x9b\x83\x8c\x88\x51\x39\xc6\x15\x51\xc7\x48\x86\x70\x4e\xf8\x28\x1b\xf7\x3a\x26\x2d\x1f\x0c\xf2\xd1\x19\x1d\xef\x71\x08\xe7\x92\x56\x0f\x3a\xc5\xc5\x90\x4a\x92\xe4\xdf\xa9\x82\x80\xc7\x4c\xbe\xa9\x70\xa1\xa2\xc1\x58\x9b\x10\xe0\x35\x09\xc7\x05\xac\xbf\xf3\xe6\xfa\x3b\x3f\x7a\x6d\xb7\xf1\xef\x1b\x08\xf5\xa8\x4a\xde\xbd\xbf\x84\xc8\x14\x07\x47\x6f\xdf\x8e\xc9\xd6\x50\xfb\x1c\xca\x1d\x8a\x1d\x13\x4f\x84\x27\xf0\x31\x29\x9e\xb2\x2d\x0e\x9b\x8e\xf0\x8a\x31\x58\xd5\xbd\x06\x0a\xf2\x57\x40\x20\x0b\x7b\x24\x16\xe8\xbb\x21\x0c\x59\x31\x06\x1c\x64\xe4\xe2\x14\x75\x2b\x1b\x75\x2d\x0a\xa3\xd5\x94\xad\x7c\x52\x2b\xa3\x3a\x18\x42\xd3\xec\xa2\xe9\x4c\x1b\x53\xf4\x82\x7d\x57\xf8\xa1\xc1\xbd\x56\x8d\xd8\x18\x1a\xd6\xea\x93\x89\xc7\x75\x5c\x1d\x59\x8f\x58\xdb\x33\x99\x4b\x75\x66\xc4\xc6\xd0\x1f\xf9\xdf\x9e\x47\xbc\x06\x8a\x7d\x42\xc9\xd3\x21\x7c\x8e\x29\x19\x8d\x5f\xc4\x43\x9c\x2b\x61\xd1\x6b\x30\xd3\x47\xf1\x31\x35\x2b\xe3\x6d\xa0\x4b\xb1\x3e\xd9\xa5\xf3\x94\xb4\x4e\x50\x5c\xfb\x93\x80\x15\x59\x51\x03\x99\x00\xb0\x42\x87\x78\x4b\x51\x23\x38\x71\x18\xe9\x7d\x65\xf0\x92\x0d\x98\x85\x6d\x7d\xb4\x5d\xa0\x9e\x20\x19\x58\x8a\xf4\x85\x4b\x72\x42\x35\x3f\x24\x4f\xfd\xcb\xd8\xda\x4d\xf6\x79\x4f\x10\xcb\x37\x8a\xb8\x44\x5d\xd2\x64\xfa\x98\x08\xd9\x4a\xda\x9b\xb2\xe4\x1f\x98\x38\xf4\xf5\x69\x3e\x85\xb1\x43\x6d\x22\xf7\xf9\xc3\xe6\xc5\x14\xdd\x28\x44\x7c\x8a\x30\xcf\xc3\xa6\x02\xef\x74\x15\xc9\xef\x52\x99\x9c\xb9\x00\xd6\x16\x92\x08\xb7\xe4\x5d\x92\x51\xb0\xa8\x20\x7c\x0f\x22\x3e\x6a\x93\xb5\xf5\x3a\x9a\xb2\x3b\xe5\x5a\xd1\x92\x9c\x7b\x67\x54\x80\xd3\x52\x87\x8a\x54\x0e\x76\x6f\xca\x0d\x76\x0a\x41\x5f\xa3\x2b\x50\xa8\x5c\x5d\x45\x16\xcc\xd2\x7c\xb6\xba\x8f\xe4\x36\x5b\xe0\x95\x49\x98\xb2\x9a\x14\xb8\x24\x87\x34\x2e\xf0\xc8\xe5\xb7\x77\x71\x5f\x76\x72\x4c\xb5\xf0\xa4\x69\x99\x5e\x62\x2b\x3b\xd1\x54\x27\xc3\x6d\xa3\x9c\xaa\xf6\x61\x11\x0e\x54\x68\x6a\xf9\xd7\xa9\xe5\x2b\xc5\xf2\xf1\xc4\x65\x36\x37\x76\x5f\x5d\xdf\x85\x01\x5d\xa1\x8c\xac\x46\xd5\x38\x0d\x32\xdb\x6e\xd7\x38\x68\x74\x86\x3b\x07\xc6\x5b\xea\x71\x18\xec\xa3\x42\x83\x41\xe5\x0c\xa5\x9a\xd6\x03\xfd\x9c\x40\xdc\xad\x5b\x56\xc4\x26\x19\xee\xea\x46\x2f\x23\xab\xa7\xb6\xc5\x10\xe8\x25\x19\xbe\x58\x7e\x97\xbf\x58\x9a\xc3\x6f\x42\xaa\xd1\x72\xdc\xcb\x46\x93\x71\x38\x56\x99\x88\x97\xa8\xae\xdb\x53\x77\x63\xf5\x6d\xe7\xfb\xbf\xea\x59\xcc\xea\x3a\x54\xdd\x5a\xa1\x43\x3f\x23\x45\x72\xc7\xe8\x27\x9c\x13\xd1\x98\x32\xbc\x6c\xaf\x29\x3c\x25\x1f\x69\xbc\x44\x2f\x1a\xa1\xbf\xa8\xbf\x36\xd9\x34\x42\x20\x90\xb1\x12\x09\x22\x12\x36\x45\x35\x8a\x39\x9e\x22\x3c\x4d\xe4\xda\x56\xc2\x46\x92\xe1\xe9\xe8\xe3\x98\x94\x78\x9a\x68\xd3\x76\x4f\xe5\xe9\xd4\x73\x83\x41\x3c\x4d\x14\x51\x24\xee\xad\xba\x3a\xce\x49\x6e\x38\x8b\x29\xc2\x0b\xf2\x88\x6a\xd8\xb3\x2e\x7b\x4d\xf1\x1c\xf5\xd4\x08\x90\xb9\x0e\x6b\x98\x81\xe0\xaf\x4a\xb2\xe9\xd4\x62\x17\xc8\xb9\x9b\x23\x3c\x77\xe2\xd6\x86\x4d\xa3\x16\xb7\xde\x92\x28\xda\x22\x64\x6e\x76\x7f\xef\x76\xbd\x8e\x69\x28\xd5\x1d\x0c\xe6\xa1\xd4\xd6\x08\x6c\xf1\x3c\xb9\x0a\x4c\x70\xc1\x29\xcd\x93\xf5\x3e\x5c\x4c\xe0\x5b\x1c\x69\x63\xc6\x1b\xe0\x6f\xa6\x72\xe6\xe7\x78\x89\x17\xf8\xd6\xc9\xde\xfc\x39\x53\x57\x4f\x39\x6d\x37\x4e\x44\x6f\x52\x28\x68\x63\x95\xa2\xa3\x1d\xb7\x9b\x7b\xf4\xb0\x76\xe7\x21\x75\xef\x8d\x51\xf7\x7a\xd3\xf5\x34\x4d\xef\xfc\x6b\xd5\xbb\x37\x58\x1b\x43\x3f\xae\x5b\xbd\x01\x1f\x8a\x1b\xa7\xe6\xd4\x5a\x88\x50\xd3\xd9\xb2\x74\x09\x64\xff\x66\x78\x53\x11\xa8\x01\x38\x36\x65\x15\xb5\xda\x9f\xb0\x0a\xab\xa6\xe4\x1e\x33\x2d\x9d\xaf\xa8\x08\xa4\xf6\xcc\x18\xc7\xb6\x5d\xe8\x72\xdf\xa9\x7a\xd9\xe1\x26\x37\xd5\x61\x89\x24\x03\x6d\x08\x58\x07\xfe\xa9\x13\xf2\x96\x64\xa4\x78\x72\x23\xde\x78\xb1\xb3\xbb\x45\x48\xf5\xc2\x44\x21\xa5\xa3\x6a\x8c\x97\xe4\x8a\x26\x4a\xbe\x0a\xb0\xf3\xcb\xd1\xee\xf8\x05\x88\x53\x4b\xcb\xc2\x41\xd8\xa2\x52\x21\x96\x4d\x11\xbe\xa2\x89\x11\x03\xc9\x4a\x97\x50\x2d\xc2\xd5\xce\x4e\x6d\x44\xb1\x2e\x2f\x90\x1a\x63\xd5\xe0\xd1\x9b\x3d\xef\x77\x0a\xbc\xfa\xcd\x92\x4d\x5f\x83\xea\x46\xee\xf7\xb6\xdc\xf3\x21\x81\xd1\xdc\x13\x56\x3d\x2c\x4b\xb4\x0c\xd8\x3d\x1d\x0c\x9a\x6d\x55\xc2\x32\x34\x18\xdc\xd3\x58\x9b\xd6\xa3\x38\xc7\x14\x17\xb8\xc4\xdc\x93\x45\xcd\x7d\x61\xee\x1e\xdd\xd8\x15\x8a\x7a\xe5\x9f\xef\x0a\x7e\xb8\x2b\xf7\x92\x4f\x90\xed\x92\xc3\xae\x2f\x13\x4a\xd9\xf6\x99\xc6\x02\x0b\xcb\x60\xff\x48\xef\xdb\xed\xd0\x92\xac\x99\x1b\xb8\xe5\x60\x60\x64\x61\xf2\x97\x0f\xee\xbd\x21\xf3\x43\xfd\xa0\xbe\xfc\x10\x4f\x07\x83\xa9\x2d\x7b\x1a\x94\x7d\xe4\x96\x13\xc3\x05\xa6\xb8\x94\x19\xfe\x44\x8d\xda\x5d\x46\x9e\x14\x91\x37\x88\x51\xc6\x59\x76\x5e\xe6\x34\x62\x10\xde\xb2\x59\x32\x97\x9f\xf0\x9d\x1c\x4c\x97\xd4\xcb\x4f\x1f\x24\xf9\xbc\x49\x6a\xe9\x83\x24\x7f\x93\x61\x84\xa5\x3e\xa3\xc3\x31\x11\xf8\x89\x96\x12\x5f\xaf\x7e\x37\x26\x1e\x2b\x2d\xb0\xf0\x78\x66\x8f\x3c\xee\x35\x04\xe4\x5a\x5a\x35\x3a\x1f\x8f\x51\x2a\xff\x79\xa6\x7f\x0f\x28\x4d\xd1\x4a\x34\x47\x27\x6e\x8d\x26\x2b\x0e\x4f\xdf\x85\x7a\xd2\x26\x0a\x47\xeb\xab\x39\xbc\x02\xc3\x8b\xc6\x0d\x40\x9d\x3e\xd8\xd7\x5c\xa7\x45\xd0\x40\x1b\x23\x70\xe3\xf8\xb2\xc7\x2c\x26\xbc\x89\xe2\x5f\xc1\xd4\x7c\x01\x2b\x06\x3e\x18\x6c\x19\x05\x3a\x60\x56\x38\x05\x3a\x36\x11\x8d\x4a\xc9\xcc\x41\x10\xcd\x40\x05\xbf\x59\xef\x0e\x58\x49\x43\x00\xaa\x17\xfa\x9a\x2e\xaf\x31\xa5\xf9\xb4\x2b\x39\x36\x6f\x28\x3d\x58\x9c\x08\x35\xbe\x85\xdc\x53\xcd\x5a\x93\x29\xc2\xb5\xae\xca\x0a\x8b\xf1\x79\x8d\x0d\xf6\x25\xff\xbe\xc5\xee\xec\x4d\xbf\x7a\x95\xb6\xc7\xe8\x81\x55\xb8\xd1\xa8\x84\x7a\x82\xb9\xd7\xc1\x87\xc4\xad\x93\x43\x2a\x32\x96\x57\xca\x65\x81\x65\x7a\xb8\x00\x3b\xdc\xe5\xfe\xf2\xb5\xb9\x77\x6b\xa5\x1f\x7c\xdf\x36\x86\x1d\x06\xc6\xb0\xc3\xd0\x18\x76\xe8\x1b\xc3\x6e\x0d\x9b\x66\xaf\xc3\xd0\xec\x75\xd8\x30\x7b\x1d\x3e\x64\xf6\x6a\x53\x77\x1a\xb8\x0e\x43\x03\xd7\x61\x8d\x5f\x29\x6b\x9b\xb7\xc6\xda\xe6\xcd\x06\x35\x3d\x88\x1d\x24\xcb\x69\xa4\x74\xe1\x2d\xc9\xaa\x5b\x0c\x5c\x1b\xf7\x0c\x66\x8a\xd0\x3e\xe7\x95\x2e\x41\x19\xef\x28\x6b\x53\x8a\xc3\xf2\x52\xe1\xd8\xd7\x86\x81\xf7\x7b\x5a\x1b\x95\xc8\x07\x27\x4b\x7a\xdb\xb2\xe2\xd7\xc8\x63\x4d\x4b\x1e\xda\x29\xb6\x09\xac\x08\x02\xe9\x4a\x90\xdb\xb3\x2c\x68\xcb\x76\x04\x4a\xac\x44\xc4\x4a\x76\xba\x8d\x85\xc3\x52\x95\x58\xeb\xe9\x97\x35\x66\x2f\x6b\x4c\x1b\x14\xc3\x75\x8b\xd9\xeb\x56\xd6\x75\xdd\x62\x1b\x2e\x27\xec\xeb\xae\x5b\xec\x09\xd7\xad\xca\x5d\xb7\x98\x02\x36\x29\x3d\x7d\xfd\x83\xe4\xe7\xa1\xcb\x50\xf5\x94\xcb\x50\xb7\xa5\x2d\xdb\x70\x1b\xaa\x94\xf8\xe6\x19\xc5\x7f\x50\xfc\xf3\x63\x36\xed\xc3\x07\x6c\xda\x7d\xd0\x8e\xff\xcd\xdb\xd8\xda\xa9\x7f\xdf\xed\xca\xe2\x2d\x7e\xed\xd2\x2e\xa7\xe7\x83\xa4\x76\xbd\xd0\x72\xce\x19\x4b\x5d\xc9\xeb\xee\x6b\x1b\x49\x0c\xd9\xb4\xfe\xae\xe5\xc9\x6c\x99\x43\x08\x38\xed\x63\xb8\x3b\x44\xe1\x66\xfd\xb9\xb5\xb1\x79\x6d\xf9\x23\xef\xbc\xf0\x18\x23\xc9\xfa\x38\x9a\xfc\xab\x4f\x93\xff\xa0\xeb\x75\xfc\x07\xdd\x88\xb3\x94\xc9\x8b\xf9\x1f\x34\x99\x73\x3a\x23\x72\x4a\x95\x24\x7c\x52\xe6\x9e\xcb\x96\xa7\xbb\x01\x69\x96\x36\xa4\x69\xa1\x22\xcb\xb3\x97\x3c\x33\x17\x37\x8a\x6c\x59\x08\x6b\xeb\x3c\xb1\x17\xa5\x51\x2a\x60\x05\xfd\x40\xc9\xd0\x29\xde\x7e\xf2\x5a\x0d\x48\xda\x11\x21\x84\x02\xb4\xd3\x7a\x1d\x19\x07\xb9\xe0\xa5\xb9\x48\x04\x2f\x99\xdc\x78\xa2\xe4\xee\xa5\xa6\x7c\xbf\x74\xcf\x34\x9b\x92\x1f\xe8\xf6\xb6\xaf\x47\x69\x18\x38\xb8\x2f\xb5\x8e\xde\x65\x1c\xf8\x54\x72\x10\xd0\x7a\xce\x69\x4a\x29\x1e\x9d\xd3\x59\x5f\x3b\xa8\xb1\xa9\xe7\x56\xe4\x72\x5a\x7b\x8c\xed\xa8\x1f\xeb\xa2\xa7\x28\x02\xcc\x2b\xf5\xe9\xb7\x67\x2b\x5a\xa7\xfd\x67\x5e\x75\xf5\x6f\x1a\x06\x4b\xf8\xc7\x39\x0c\xe8\xbf\x8c\x0f\x98\xa7\xcd\xe0\x74\x41\x33\xb1\x5e\x77\x04\x6b\x90\x2b\x5a\x49\x2e\xe9\xf6\x2e\x02\xfd\x9d\x02\x57\x34\x7b\x83\x8a\x60\xc4\x9c\x01\xe9\xe4\x23\x6c\x87\x9b\xe4\x42\xfe\x36\x6e\x46\xb3\x2a\x40\x86\xb5\xb6\x96\xea\xf5\x05\xd5\xe7\x5d\x51\x4e\x69\x47\xca\x45\x26\xe6\x27\xcd\x4f\xf5\x35\xbd\x61\x45\xec\xfc\xcb\x68\x70\x40\x70\x0f\xac\x36\x90\x36\x73\xbc\xba\x2e\x97\xc5\xb4\x32\x68\x44\xb3\x2a\x35\x8d\x90\x15\xd9\xa7\x5a\x6f\x51\x68\x94\x46\x99\x2d\xf4\x01\x28\x29\x47\xa1\x24\x79\x71\x01\x60\xd0\xca\x66\x47\x1b\x2d\x86\xba\x36\xf7\x3e\x54\x0a\x18\x6b\x0b\x59\x81\xd2\xd8\xb8\x03\x5f\xd4\x21\x63\xd8\x4a\xa9\xfa\x60\x18\x05\xfa\x99\xc9\xde\xfb\x52\x25\x0a\xb2\x9e\x9b\x84\x7e\x5e\x28\x7b\x3d\x33\x13\x5a\xfb\x8e\xa3\x57\xef\xbf\x4f\xfb\xb7\xac\xaa\x58\x71\xd3\xe7\x74\x16\xa1\xc4\x2e\xe2\x7a\x52\xde\xde\x3a\x77\x54\x3b\xbc\x46\x32\x16\x6c\x00\xfd\xf6\x9c\xce\xaa\xd8\x4d\xad\x99\x8c\xb3\x4c\xcc\x83\x13\x7b\xa5\x9d\xfc\xad\x8f\x1c\x2c\x1b\xa7\xfa\x23\x3a\x62\x62\x89\x33\xd2\xee\x82\x9a\x0e\xd9\x07\x66\xfa\xb0\x2f\xe4\xb8\x09\x3a\xed\x8b\xb2\xaf\x2a\xed\x67\x7d\x39\x99\xb8\x7f\xbd\x14\x7d\x31\xa7\x9c\xf6\x59\xd5\x2f\xca\xbe\xae\xbb\xaf\x58\x81\x3e\x44\xfa\xf1\x3d\xfb\x0a\x54\x92\xcc\x8a\x4d\x56\x4a\xd6\x5d\xd5\x24\x03\xe6\x0b\xe7\x04\x06\x51\x5d\xe3\x2b\x4f\x91\xa9\x44\x55\xf9\x5e\x09\xb6\x7f\xb2\x77\x99\x06\x72\xb4\xf4\x49\x9d\xae\xd1\x3f\xa3\x6d\xc5\xfb\x55\xa3\x7c\xdc\x58\x72\x69\x1c\x2e\x78\x90\xa3\x16\x48\xfb\x98\x7b\xe3\x59\xe0\x48\xbe\xd2\x91\x05\x22\x7d\xf1\xd7\x51\xfc\x5c\x76\x39\x4c\x85\x0a\x17\xde\x5f\x1a\x57\x24\xd5\x2e\x8e\x75\x3b\xcb\x46\x1b\x7a\x25\x14\x00\xb2\xea\x78\x89\x1a\x5b\x50\x6f\x84\x25\xaa\xeb\xbc\xd4\x5c\x05\x6c\xf5\xd7\x25\x57\x33\xed\xe4\x79\xa2\x63\xfa\xc2\xb6\xd1\x87\xa7\x30\x2f\x6f\xfa\xb3\x92\xeb\xc9\xec\xdb\x81\x57\xd3\x5a\x94\x30\x7d\x7d\xfa\x99\x55\x02\xd2\x89\x79\x26\x5c\xaa\x08\x61\x4e\x46\xe3\x17\x56\x80\x26\x06\x83\x9f\x68\x2c\xd0\x0b\x85\x04\xe1\x1f\x07\x0a\x28\xd0\xd0\x8c\xdf\x9e\xad\x84\xd6\x27\x28\x87\xbe\x91\x7c\x01\xbf\xc6\xbf\xf5\xb8\x09\xe7\x86\x05\x31\xc9\x94\xe2\x93\x27\xcb\x42\x19\x8c\x0a\x1d\x21\xd5\x4b\x61\x46\x85\x91\x11\x57\x14\x35\x4a\x22\xe4\x37\xef\x05\x32\xee\x5e\x5b\xa6\x45\x83\x41\xb4\x23\xca\xc5\x4e\x4e\xef\x54\x44\x64\x55\xf0\x5e\xcc\x9a\x55\x79\x8d\x41\xa9\xfb\x6d\xd8\x44\x06\x61\xfb\x80\x96\x90\x97\xee\x08\xe1\x24\xea\x47\xb8\x20\xdf\xfc\xff\x04\xfe\x97\xd6\x65\xcb\x7d\x5a\xcb\xd3\xe5\x37\x13\x9b\xbc\xd6\x47\x40\xf4\x3f\x45\x04\x5e\x9c\x70\x06\xb2\x59\x3c\x34\xb0\x30\xb0\x85\x93\x8a\x7d\xa1\x10\x68\xfe\xc5\x96\xf7\x96\x55\x47\xb7\x0b\x71\x1f\xa3\x17\xc8\x7b\x0b\x1e\xfd\xb5\x21\x8d\x2b\xff\x8b\x8e\x33\xa1\x88\xda\xaa\x95\xc7\x51\x41\x5f\x37\xbc\x81\x48\xb4\x08\x9d\xda\xf1\xb5\x4f\xc1\x9b\xbe\xc0\xaa\x32\x4d\x29\x70\x01\xa7\xce\x2f\x72\xe1\x58\xbc\x17\xa0\xa3\x2a\x12\x40\x81\xcc\x59\xa3\x2f\x22\xa6\x79\x1c\xf5\x98\x4a\x28\x37\x12\x04\xa3\x51\x53\x42\x98\x56\x93\x5b\x52\xa9\x53\xd4\x3e\x21\xb5\x6c\xd5\x68\xdc\x0e\x5f\xc8\xb5\x41\x4f\xa1\xed\x9f\x51\xaf\xd8\x13\x5e\xac\x55\x5d\x90\xdc\x68\xe6\xd6\xb3\x23\xdb\x95\x46\xdb\x3c\x61\x53\x5c\x20\x94\xd2\x64\x4a\x73\x0a\x16\x9c\x10\x96\xd0\xcf\xd3\x1c\x11\xd3\x27\x81\xf4\xa5\x41\x19\xc2\x1b\x33\xa2\xd2\x5d\x0d\x32\x75\xa2\x56\x35\xe1\x26\xc8\xad\x2e\xd8\x9e\x7c\xdc\xc6\xb9\xd5\x5f\x5e\xc1\x59\x26\xdf\x4f\x48\xeb\x40\xb1\x31\x3d\x57\x6c\x9a\x52\xdc\x55\xbb\x55\xed\x79\xad\xb0\x17\x94\x1c\xeb\xe3\x7e\x89\x27\x72\xb6\x39\x2d\xd2\x49\x5d\x37\x1b\xe5\x3b\xae\x39\xee\x09\xb4\x76\x9d\xae\x6b\x40\x65\x38\xe5\x89\x03\x6f\x54\xa0\x2a\x75\xd8\x29\x1f\xb0\xda\x2d\x52\xaa\xcf\xef\xc6\xda\x54\x2f\x23\xa7\x3d\x87\xf5\x62\xec\x01\xcc\x96\xb6\x48\xbf\x78\x66\xc2\x26\xa4\x22\xb1\xbf\x63\x84\xf3\xcc\xbe\x36\x3f\x63\x64\xef\xf9\x42\x74\x73\xbb\xbe\xc5\x1f\x8c\xe8\xa5\x35\x3c\x06\x82\x0c\x42\xa5\xec\x3a\xf7\x31\xcc\xbb\x8c\x93\x3d\x03\x51\x53\xcc\xd3\x8c\x94\xc1\x20\x5d\x64\x37\xaf\x4b\x6e\xbc\x0c\x68\xc3\xfb\xe0\x8c\x97\x9f\x21\xd6\x00\xc0\x1a\x40\xb4\xc8\xab\x49\x59\x08\x5a\x08\x7d\xaf\x02\x45\xd6\x54\x0b\x3c\x2d\xe2\x85\x6d\x09\x98\xd3\xd3\x4f\x7d\x0e\x16\x88\x8f\x59\x28\xea\x11\xe3\x0f\x8e\x98\x77\xbf\x2a\xfc\xe2\x68\xdf\xac\xc7\x72\xd6\xe7\x62\xaf\x01\x8b\x2b\x08\xb5\x57\x9f\xf5\xda\xa0\x2d\x58\xe0\x06\xe1\x1b\x40\x6d\xb5\x30\xd1\xac\xe9\x80\xa5\xf0\xa1\xc5\x01\x45\xeb\xb5\x1e\xb3\xa3\xdb\x6b\xca\xe1\xad\x1c\x9f\xbd\x4a\x24\x33\x5e\xde\x1e\x4b\xd6\x45\x0b\xff\xd2\x2c\x79\xb3\x7f\x71\x75\xb2\x7f\x79\xfc\xe1\xe8\xea\xe2\xd7\x77\xaf\x4e\xdf\x0e\x06\x73\xd9\x99\xbd\x89\x4a\x2e\x53\x4d\x85\x97\xff\xb5\x22\x45\xa6\x84\x8e\x52\xeb\x98\xaa\x21\x42\x69\x13\x11\xb8\xe1\x4b\x42\x43\x8b\x88\x0d\x1d\xda\x2b\x5d\x53\xba\xbb\x96\xb9\x04\x0f\xf4\x68\xd9\xec\x51\xd9\xd9\x23\xd8\xcc\x0e\x81\x84\x75\xaf\x01\x1d\x17\xd0\xd8\x4a\x6b\x9b\x09\x32\xac\xed\xa9\xb7\xb2\x70\x46\xb7\xf4\xb6\x0c\x0e\xae\x3e\xad\x0b\xfa\x59\x68\x7b\x61\x55\x54\x4a\x2d\xe8\x7a\xe0\xc5\xf5\xd2\x81\x35\xd9\xb9\xe7\xde\x8d\x51\x93\x67\x0d\x88\x66\xaa\x72\xe6\x4c\x41\xfb\xb6\xb7\x4d\xbc\x47\x8e\x65\xd2\xb4\xb0\xd4\xa1\x14\xce\xa2\xac\xd5\x65\x25\x05\x34\x0a\x5a\x73\x19\x92\xe3\x4f\x68\x5d\x81\x0c\xb0\xaf\xc7\xd6\x49\x7e\x8d\xd9\x0b\x18\xb1\xcb\x1c\x76\x74\xbd\x1c\xe1\xe0\x3f\x70\xf4\x51\xf2\x52\x18\x16\xc1\x78\x7e\xc9\x1a\x85\x26\x31\xe1\x00\xbb\x06\x8e\xe8\xd8\x74\x31\xfb\xdf\xd8\xc5\x76\x9b\x1a\xc1\xd3\x5d\xf9\xd8\x11\x9c\x6a\x73\x0b\x3d\x53\xed\xb0\x8d\x1f\xe9\x7d\x15\x90\xef\x8a\x08\xbf\xc1\xfe\xd6\xd4\xe3\xab\x0d\x1c\x65\x4e\xc9\x28\x99\x15\xc8\x6b\x22\xe4\x9a\x1b\xb6\x90\x4e\xac\xd1\x27\x19\x8d\x31\x23\xc3\x17\xec\x3b\x0e\xd6\x93\xf6\xc2\x26\x46\x6c\xdc\x2b\x09\x1d\x65\x63\x45\x88\x59\x65\x83\x2d\xc5\x48\xb9\x07\x86\xfe\x6f\xf0\x42\x51\x7d\xe5\x89\x84\x70\xb8\xf3\x4b\xd4\xe1\x35\x17\xe4\x2a\x71\x34\x1a\x47\x08\x21\x5c\xa8\xa5\x51\x5a\xb3\x4b\x3b\x21\x92\x53\x7b\xc2\x82\x83\x2b\x03\x2e\xc8\x10\x33\xb2\xb5\xdb\x5e\x7e\xbe\x01\x43\x89\x56\x31\x23\x6c\xbd\x6e\x06\xba\x78\x49\xbe\x01\x3b\x57\xdd\x16\x6c\x63\xa7\xe1\x62\x7b\xbb\x46\x0a\xb6\xab\xd8\x93\x43\x9a\xb2\x3d\xaf\x89\x5c\x79\x73\x94\x42\x32\x65\x9b\x96\xb3\x9a\x5c\xb9\x9e\xdb\x04\xc5\xae\x04\x6f\xb9\xe7\x1d\x2b\x48\x9d\x5f\x42\x99\xb0\x9a\x55\xc3\x69\xb5\xcc\xad\x77\xae\x47\xcb\x1a\xcb\x5e\x1b\x52\x8e\x94\x31\x6d\x62\xee\x51\xe3\x18\x62\x6f\x24\x8a\xa4\xe1\xd5\xb4\x2c\xc0\xd0\xd4\x86\x82\xd3\x3d\x0e\xfa\xdb\x45\x27\x3d\x9a\x68\x9a\x98\x52\xac\x5a\x97\x0a\x47\x1e\xb9\xef\xe4\x2a\x6b\x6b\x11\xc8\xa2\x49\x20\x31\x47\x98\x35\x48\x24\xe6\x1b\x89\xa4\x3f\x2c\xd4\x76\x4c\x51\xce\x42\x51\x4e\x66\x29\xe7\xd2\x6d\xda\x5c\xac\x3a\x66\x4f\x9b\xb4\xbb\x69\xf3\xb1\x73\x4c\x29\x93\x27\x96\x32\xda\xed\x9a\x7f\xf3\x71\xe8\x4b\x7d\xa7\xe2\xe1\x00\xc1\x66\x71\xbb\x1c\xf3\x47\x72\xb4\xa6\xde\x65\x9d\x89\x80\xd4\x05\x4c\xdb\x5e\xe7\xee\x37\x3c\x9f\x8b\xaf\x42\x71\xa4\x99\xba\x08\x21\x6c\x60\x5f\x7d\x7f\xc5\x48\x92\x95\xa5\x98\xdf\xcb\x5d\x9f\x02\x1f\xa8\xc9\xc5\x57\xd6\x03\x74\x03\x2b\xa0\x36\x4d\x4e\x53\x17\x9f\xa0\x86\x72\x9c\x62\xfa\xfe\x90\x4d\x55\x2c\x36\x85\xad\x16\x04\xed\xa5\x45\xb5\xe4\x56\xc5\x10\x23\x6d\x1d\x56\x51\x71\xa1\xc3\xf9\x6a\xd9\x1c\xb2\xf7\x70\xf0\x8e\x30\xc1\x7e\x51\x33\xda\xaf\x00\xd0\xe6\x4d\xa5\xd0\x29\x02\x6b\x94\x66\x19\xda\x5f\x5c\x97\x21\x4b\xd0\x32\xdb\x45\x37\x07\x03\x88\x2e\x84\x3e\x64\x56\x07\xe9\xae\x1a\x7a\x24\xb8\x16\x53\x65\xa0\xd1\x6f\x7c\x53\xd2\x81\x8d\xe8\x38\xfe\x6e\x6b\x16\xdb\x13\x73\x5e\x7e\x02\xba\x7d\xc4\x79\xc9\xe3\xe8\x20\x2b\xfe\x21\xfa\xd9\x64\x42\x01\x76\xe0\x7a\x79\x63\xa4\x77\x82\x53\xda\x2f\x97\xa2\x62\x53\xda\x97\xdc\xf1\x1c\x78\x6e\x79\xc7\x2a\x79\x3f\x6e\xd7\xdc\x9f\xe5\xd9\x4d\x9f\x55\x7d\x03\xfe\x88\x22\x64\x05\xc9\x9b\x07\x40\xb9\x9e\x35\xd4\x68\x3a\x9b\x93\x94\x7e\x65\x7e\x93\xcf\x6c\xfc\xdb\x4d\x64\x5a\x94\x72\x41\x92\x99\x51\x0a\x97\xc7\x7a\xd7\x91\x42\xbf\xba\x51\x0b\x94\x14\xc9\x95\xfe\xe9\xde\x83\x63\x9e\xfc\x65\xa1\x1d\xf5\xab\x8a\x5a\xe1\xb1\xe0\x19\xcc\xe6\x02\xe4\x25\xea\x6c\xf0\xf5\x94\x44\xe0\x56\x40\x49\x49\x75\x4d\x60\x0f\x50\xee\xfc\x6a\x5d\x21\xa2\x59\x59\x5e\x67\x3c\xbd\xce\xbe\xc8\xcd\x65\x1e\x41\xce\x86\x9c\x16\xe9\x75\xc9\xdf\x9f\xbf\x25\xbf\x52\x10\xb7\xf6\xd9\x2c\x6e\x41\xce\xbd\x3f\x7f\x8b\x9e\x51\xf2\xfe\xfc\x2d\x6e\xe5\xfb\x91\x5a\x73\xeb\x68\x59\xa8\x68\x81\x53\x97\x55\xdd\xcb\xd7\xeb\x8e\x4b\x94\xfa\x94\xe8\xc8\x3b\xa8\xbd\xe0\xca\x65\x3e\xed\x17\xa5\xe8\xcf\x58\x31\xed\x83\xb1\x8b\x6c\x4a\x7f\x91\x71\xb8\xa7\xdf\xd2\xc9\x3c\x2b\x58\x75\x0b\x52\x47\xf9\xe5\x22\x2b\x98\xd0\xc1\x0c\x23\xd4\x7b\x46\x49\x58\x49\x1c\x2d\x79\x0e\x0a\xe0\x56\x2f\xea\x5a\xab\x56\xc2\x2f\xc1\x2d\xc1\x0b\x87\x2d\x67\xef\x50\x2e\xa5\x03\x49\x21\x3f\xfb\x84\xfa\xe7\x39\xcb\xa9\xde\x1b\xac\xb8\x49\xff\xa7\xf8\x9f\x42\xab\x99\xba\x35\xc1\x9b\x24\xb8\xbe\xa2\xa2\x5d\x9f\x0f\x93\xa0\xc4\xcf\xbd\xe0\xaa\xbb\x4c\xd4\x02\x65\x65\x71\x2c\xe8\xad\xb5\x7a\xdb\x2b\x88\x93\xb9\xa6\x8d\x2c\x86\xc0\xda\xd4\x83\x41\x5c\x10\xa7\xc7\x43\xf8\x81\x7e\x34\x14\x0d\x85\xe4\x2b\xca\x02\xe0\x8b\x15\x45\x7d\xe5\xeb\x8a\x54\x19\x66\xfb\x06\xe9\x0e\x02\xad\x87\x4a\xe8\xf6\xa9\xec\xf2\x9d\xf8\x0b\x48\x6d\x6d\xe3\x94\xbf\x82\xc9\xf6\xb0\x56\xbb\x8d\xbe\xe6\x40\x0f\xc4\x46\x27\x91\x64\x43\x24\x5e\x77\xbe\x5f\x3f\x90\xd9\x35\x0e\xc6\xea\x5e\xa9\xc6\xb5\xc6\xb0\x1b\xf2\xcd\xb8\x4c\xae\xa6\x34\xa7\x37\x99\xa0\x00\x29\x8d\x2b\xe2\x9b\x61\xe7\x44\x69\x4c\xa6\x78\x49\x56\x35\x9e\x13\x4a\x5e\xe6\x5a\x46\x23\x0f\x75\x49\x8b\x82\x0b\xff\xd9\xf9\xe9\x2f\xbf\x1a\xfb\xd2\xd5\x8d\x09\x68\xc0\x66\x71\x0e\x2a\x15\x81\x8c\x78\x33\xd7\x90\x10\x4e\xcc\x14\xf2\x0d\xda\x4a\xcd\x39\xb5\x82\xe4\x86\x90\x22\x39\x78\x7f\x71\x79\xfa\xee\xea\x72\xff\xfb\xab\xd7\xa7\xe7\xe6\x4c\x9b\xd7\x78\x9e\x55\xa9\x3e\xe0\x4d\x6d\xb8\xfc\x54\xfc\x48\xef\x2b\x08\xb1\x90\x6b\x1f\xc7\xd0\x33\xed\x90\x56\x13\xce\x16\xa2\xe4\x90\x28\x6e\xc4\x34\x9d\x94\xc5\x8c\xdd\x2c\xcd\x73\x8d\xea\xde\x10\x2f\x61\x7c\x81\xbd\x8a\x97\x78\xa6\x80\x7a\xfb\xdd\xf1\x53\x97\xb8\xd9\x64\xbc\x0a\x0b\xdd\xc5\x7e\x95\xbb\x3a\x20\xd4\xbc\x46\x58\xb7\x38\x30\x82\xdd\x54\x0b\x6d\x46\x63\x6d\xb4\x1c\x2b\x05\xba\xba\x43\xe4\x61\x34\xd0\xd6\xe8\x0b\x6d\x23\x68\x47\xbf\x96\xec\x0c\x23\x5a\x2f\xb7\xf4\xe2\xd3\xa5\x95\xef\xca\x62\xd2\xc3\x2d\x60\x41\x4a\x4d\x22\x1c\xfe\x67\xd3\x31\x45\x39\x28\x60\x86\xf0\x2d\x0c\xea\x95\x88\x4b\xbc\xc0\x15\xa6\x78\xf9\x04\x5b\x9b\xc7\x3c\x0f\x6e\xff\xb4\xe7\xc1\xe2\x6b\x3d\x0f\x6e\x9f\xee\x79\x70\x0b\x9e\x07\xb7\x4f\x02\x03\x03\x63\xc6\xc7\xac\x4b\x7b\xda\xe5\xd0\x6e\x66\xee\xd9\xeb\x16\xaa\x97\x4c\x39\x10\x49\x82\x08\x2b\x57\x6e\x78\xda\x13\x66\x4e\x4b\x7f\x4e\x59\xd7\x9c\xe2\x6b\x79\x3d\x1e\x0c\xb8\xae\xd7\x4d\x6a\xa1\x4d\x28\x8d\xa1\xaf\x6d\x46\xd3\x6c\x18\x28\xa0\xec\x93\x4d\xec\xad\x8c\xc0\x0a\x73\x63\x11\x71\x87\xd9\x84\x2e\x16\x48\x64\x8d\x5c\x15\xef\x1b\xed\x54\x4c\xb3\x39\x50\x37\xd7\xa1\xe3\x4b\xab\x64\x2a\x93\xf2\x10\xa1\xc5\x5d\x4a\xb1\xcd\x27\xbc\x7c\xbc\x0e\xac\x38\x1e\x80\xc4\xf4\xca\xe6\x08\xd3\x07\x8d\x42\x9b\x4e\x86\x5e\x9b\x6b\xef\xb6\x17\x58\x5a\xdc\x09\xbc\x7a\x02\x84\xe8\x7a\xbd\xf9\x14\x69\x5a\x7f\xfb\x75\x4d\x13\x56\x41\x18\xe7\x4b\xf0\x4a\x57\xf7\xbe\x16\xca\x9f\x82\x65\xe8\xb4\x61\xff\x73\x6b\x7d\x93\xc1\xee\xdf\x5e\x72\xb7\x61\xe5\xd7\x7b\xc3\x1a\x93\x9d\xab\xd6\xfd\x22\x00\x6c\x33\x13\xfa\x24\xb4\x36\x0f\x9d\x26\xdc\xcc\x84\xe1\x8e\x7d\xd1\x98\x60\x17\x9d\xbf\x56\x9a\x9c\x47\x21\xd1\x2c\x88\xba\xbf\x87\xec\xcd\xe9\x53\x67\xcf\x9e\x6c\x65\x6b\x7b\xce\x1b\x56\xb7\x0d\x4b\xdb\x7b\xf1\x75\x96\xb6\x85\xdb\xa0\xdc\x0a\x89\x8e\x3a\xda\xaa\x5b\x6a\xea\x09\x0d\x7a\x5b\xe5\x1b\x77\x6e\x5b\xe4\x67\x11\x30\x57\x0f\xd8\xed\xea\xab\x7e\x27\x70\xa7\x2e\x36\xd8\x62\x8f\x81\x76\x02\x97\x77\xfa\x57\x38\xe2\x7f\x13\x76\xf1\xee\xdf\x8f\x5d\x0c\xc0\x2c\x1b\x18\xda\x47\x80\x50\xff\x0e\x18\xd4\x53\xe1\x6c\xdb\xac\x1d\x8f\xb5\xe9\xae\xe5\x72\x7f\x10\x8f\x58\x19\x28\xac\x02\xe0\xe3\xda\x89\xb7\x1f\x64\x5e\xd8\x46\xe6\x45\x9d\xe8\x45\x17\xdf\xa2\x24\x58\xae\x85\x0f\x70\x2c\x4c\x71\x2c\xec\x2b\x31\x69\x19\xaa\x11\x66\xb5\x0f\x07\x6e\x0e\x48\x0f\x81\xea\xe4\xfd\xdb\xb7\x1e\xf8\xd4\xdf\x07\x18\xfb\xa7\x71\x39\xff\xcc\x61\xf4\x75\x5e\x24\x4f\xe6\xe7\x9e\x8a\xb3\xfa\xa7\x8e\xb9\xaf\x6b\xb3\x39\xa6\x2e\x37\x89\xc1\x7c\x42\xee\xec\x24\x43\x12\x7d\x21\x40\x1a\x09\xa4\x33\x34\x52\x54\xb4\xea\x9d\x90\x57\x47\xda\x70\x7a\x1f\x22\x7c\xb6\xe1\x83\x87\xfe\x23\xfc\x48\x21\xde\xae\x76\x91\x9a\xc1\xac\x18\xb2\x59\x4c\xa7\xc8\x05\x96\x4e\x23\x3f\xe4\xb0\x07\x1f\xd4\x2e\xd8\x20\x55\x04\x65\x79\x90\x61\xb8\x11\x4e\x06\x00\x02\x33\x11\xef\xa2\x06\x66\xe3\x96\x52\x34\x35\x61\xb2\x38\x4a\x0b\x85\x95\x50\x18\x78\xac\x02\xa5\x51\xa4\x0f\x94\x8f\xff\x07\x1b\x88\x84\x66\x03\x7b\x0f\x89\xf5\x1b\x1b\xd6\xbf\x63\x3e\x64\x1d\x42\x1f\xb7\x0a\x01\xc0\x1e\x58\x31\xf2\x2a\xac\x03\x70\x74\x8a\x1a\xa9\x8d\x32\x02\xcd\x8d\xa2\xd4\xc2\x91\xb9\xa5\xf5\xfb\xa6\xa5\xe5\xc0\xc1\xc0\x7a\xef\x5c\x18\x3b\xbc\xc8\xf3\xb3\x3a\x14\x76\xd0\x7c\xeb\x09\x0a\xad\x3c\x11\x44\x7e\x77\x75\x1d\x3f\xb2\xda\x7a\x0e\x36\x8a\x6b\xd8\xa8\x51\x81\x93\x24\x61\x63\x07\xc9\xd4\xdb\xa8\x19\x12\xa3\x0b\x3a\xde\x83\xbf\xb2\x08\x86\xa1\x1c\x38\x21\xf2\x3c\x3e\x11\xd8\xbd\xf4\x14\x54\x6f\x9f\xb8\x05\x7a\x6c\x16\xb7\x60\x48\x2d\x58\x61\xe7\x0e\x70\x4a\x23\x81\xf5\xd0\x73\xc7\x39\xbe\x16\x5f\x87\x0f\x6b\xf8\xa9\xb7\x02\x83\x43\xa4\x62\xd4\xca\x25\x9f\x38\xe7\x5e\xd2\x41\x5e\xac\xe9\xeb\xe6\x54\xbb\x8f\xe2\xa1\x79\x3e\x55\x8d\x2a\x9f\x34\x3e\xba\xf7\xed\xa6\x58\xf0\x95\x17\x5e\x78\x77\xcc\xc1\x1c\xc1\x73\xe7\x0b\xe5\x7e\x0d\x0c\x0f\x97\xee\xfd\x23\x73\x89\xed\x4c\x19\xaa\xf5\x4d\x40\xad\xc0\xa2\xd5\xb4\x68\xcf\xee\xfe\xd4\xe1\x10\xed\x15\x8d\x97\xae\xf2\x57\x4f\xac\xfc\x1b\xe4\x48\xe6\xe6\xca\x6d\x95\xbc\xd5\x8e\xd4\xb6\xc1\x55\xfe\xa6\x5d\xb9\x5c\x3e\x65\x0e\x82\x76\x00\x62\x73\x38\x37\x36\xd7\x87\x46\x2e\x0d\xaf\xd2\xb8\xc6\x1f\x25\x5e\x94\xac\xb8\xe5\xd3\x60\xcb\x35\xd6\x4a\xcf\xc4\xdf\x0b\xfc\x27\x69\x22\x6c\xea\x2e\x78\xbd\x0b\x3a\xfe\x1b\xd0\x00\x81\x5e\xfd\x21\xc8\x28\xca\x20\x60\x37\x58\x37\x47\x38\xba\xa5\x22\x8b\x70\x34\x11\x3c\x8f\xc6\xf8\x67\x41\x9e\xff\xdf\x10\x30\x79\x7d\x5b\x2e\x2b\xba\x16\xe5\x72\x32\x7f\x0e\xec\xf9\xf7\x82\xac\x0c\x7f\x49\xa7\xfb\x4a\x97\x9a\x56\x89\xfa\xa5\x43\xae\x24\xad\x14\xd8\xbc\xd9\xf7\x35\x5c\x2b\xa5\x11\x38\x86\xc8\x79\x16\x87\xe9\xd1\xc2\x46\x02\x90\xd7\x6a\xec\x60\xac\x1f\x2a\x56\x99\xe0\x3e\xa9\x58\xcb\x21\xfd\xba\xe1\x22\x0f\x61\x1c\x2b\x6c\xc0\x2b\xf5\x85\xc9\x4c\xa5\xa9\xd7\x5e\xe7\xe1\xf9\x44\x32\x55\xdc\x7f\xb3\xef\xf9\x98\xda\xbb\xbd\xc1\x5e\x77\x0b\x95\x94\x7a\xb9\xdc\x2e\x72\x36\x61\xe2\x52\xc1\xec\x64\xfa\x4a\x5d\xde\x12\x1d\x8a\xda\x06\xac\x26\x46\x25\x79\x64\xde\xf8\x2c\x42\xfe\x04\x60\xf4\xef\x45\xd2\x1a\x55\x50\x9d\xc1\xe2\xf2\x8a\x0d\x16\x99\xed\x84\x82\x9c\x29\x8b\xc8\x9e\x11\xeb\xb5\x8e\xbd\x2d\xf3\xef\xdb\xee\xbb\x20\x86\x7d\xa5\xe5\x56\x76\x48\x8d\x41\x72\xd6\x57\x10\xd8\xb0\xfb\x2b\x84\x39\xa4\x72\x51\x34\xbe\x8f\xc4\xb8\x09\x18\xae\xa3\x59\x70\x2b\x20\x5f\x85\x83\x6b\x68\x03\x5c\x9c\x1b\x01\xa5\x85\x42\xdc\xd1\x41\xcb\xd1\x9e\x50\x9d\x35\xcf\x96\x7a\x59\x0a\x54\xab\x78\x4f\x3c\x5c\x96\x27\xea\x56\xe7\xaa\x71\x71\x56\xd5\x3e\x8d\x74\x44\xd6\x08\x61\x66\x5e\x85\xb1\x54\x23\x84\x4b\xf3\x25\xcb\xf3\xf2\x13\x9d\xfe\x48\xef\x65\x86\xcc\xae\x00\xd3\x49\x9c\x13\x80\x1f\x2e\x9a\x6c\x6b\x08\x04\x65\xbd\x73\xd4\xef\x9f\x45\x22\x68\x25\x62\xe5\xc2\x67\x4c\x47\xbb\xc3\xc9\xf6\x04\x89\xa2\x5a\xa1\xe0\x1b\xcc\x94\xac\xb8\x8f\xd0\x4b\x32\x74\xa1\x66\x1d\xca\xf8\xf0\x05\xff\xee\x0f\x8b\x17\xc9\x55\x2c\x60\x3a\xfa\x43\x8c\xf8\x78\x3b\xfa\x91\xde\x47\x63\x0d\xc2\xe2\x0a\x84\x8f\xc8\x05\x7b\x35\xc5\xd6\x31\xc5\xd6\x36\x1d\xad\xd7\x0a\x6a\xd9\x02\x51\x75\x86\xa1\xcd\xd7\xeb\xae\x08\xb4\x8d\x90\x7e\x3e\x8f\xdc\x58\xb9\x98\x13\x83\x94\xa1\xa1\x3e\x33\x75\x57\x87\xab\x67\xaf\xcb\xa4\x18\x58\xb6\xae\x0f\x7b\x1a\x1e\x8e\x00\x2c\x37\x2d\xa6\x7b\x7f\x02\x06\x94\x9b\x38\x37\xb2\x80\x24\x5b\x2c\xf2\xfb\x38\xc3\x23\xe0\x04\xe9\x18\xd5\x28\xfd\x0b\x85\xca\x5d\x64\x8a\x84\x60\xdb\x7f\xa1\x30\x11\x94\xf4\x57\x0a\x92\x03\xaa\x0b\x53\x26\x3c\x35\xc2\xb9\xe5\x39\x7f\x14\xab\x26\x70\x9a\x31\x9f\xac\x70\x8e\xbb\x54\x5b\x13\x2c\xb2\x9b\x74\x5a\xfb\x4a\x51\xc9\xeb\x4d\x8c\xbd\xe1\x2e\x84\xac\x26\x13\xcd\xe5\xc4\xb9\xfa\xb9\x8b\x10\x20\xce\x56\x24\x57\xb6\x12\xb9\x8f\xb0\xd3\xab\x88\x53\xaa\x98\x2d\x30\x27\xa3\x31\x9e\x91\x6f\x5e\xcc\xbe\x33\xa5\xbf\x98\x6d\x6f\xa3\xb9\x32\x61\x84\x62\x67\xda\x31\x7d\xa1\x2e\x64\xcb\x25\x9b\xca\xeb\x9e\x52\x9c\xfd\x2a\x62\x0a\x8a\xb3\x39\x5e\xe2\x09\x2e\x31\xc3\x53\x4b\xe2\x6e\x6b\x0b\xc7\xad\xe3\xb5\x96\xb7\xa9\x30\xb2\xbd\x94\x63\x7b\x3a\x16\xf2\x74\xfc\x5e\x24\xad\x43\x14\x37\xf0\xc2\x39\x8e\xe4\xad\x73\x27\x9c\x8a\x28\x7a\x52\xc2\x9d\x68\xbb\xc0\x45\x13\x94\xc5\x1b\x79\x79\x48\x83\x51\xa3\x66\x15\xe5\x70\x02\x1c\x80\x7f\x7c\xda\x3d\x8e\xa9\x77\xdc\xd1\xc6\x59\x67\x44\x4f\x3e\x17\xad\x39\xab\x8d\x50\x1c\x3a\xf8\xe5\x53\xe5\xdb\x26\xe4\xe1\x83\xe2\x6d\x2d\x57\x0e\xd2\x6a\x9a\xef\xeb\x94\x78\x1d\x8a\x56\x8a\xbd\x5f\x44\xfa\x2f\x6b\xa6\xf8\xd3\x43\x6d\x6a\xb0\x1e\xb6\x05\x46\x5a\xa3\xab\xee\x82\xb5\x10\x0f\x8b\x14\x9e\x10\x3d\xc5\xa8\x0a\x6c\xfc\x47\x8e\x0b\x8f\x3f\x06\x36\xf3\x17\x4f\x90\xdb\x36\x47\x70\xca\xad\x02\x87\xc3\xa4\xe3\x7e\xf8\x8a\xda\x8c\x08\xdb\x41\xdd\x68\x5b\x33\xf3\xe8\x7f\xcf\xe3\xe6\x7f\x02\x5f\x62\x9c\xe1\xb2\x05\x6f\x24\x37\xba\x08\xd5\x5c\x1e\xec\x3f\xa6\x1a\xf2\xbf\xb1\x8d\xcc\x06\xb2\x20\x42\x5e\x0f\xcc\x68\xa7\x0c\x0a\x2f\xe5\x8a\x5e\x05\xb0\x02\x59\xad\x23\xa4\xcb\x2b\x50\x96\x68\xdb\xb8\xfd\xa5\x28\x9d\xe9\x36\x48\x4d\x0a\x21\x9f\xd5\x19\x54\x18\x0c\x2c\xaf\xb7\xc2\xbf\x89\x78\x38\xf8\x6a\x46\xbf\x22\x33\xde\xda\x85\xdb\x68\x20\xa9\x29\x71\x85\xea\xc6\x56\x85\xee\x0a\x6f\xd5\xba\xee\x16\xd0\x5d\xd6\xee\x6e\x59\xab\x78\x18\xd0\xdd\xf2\x89\xdd\x35\xca\x66\xdb\xe0\xc2\x59\x25\xf8\x7d\xcd\x5a\x7d\x7d\x30\x67\x67\x47\x19\xce\x50\xfd\x20\x5d\xc0\xff\xea\x58\xc0\x61\x64\xcc\xa6\xa0\xbb\x21\xbd\x36\x0b\xc8\x85\xc1\x44\xab\x66\x95\x61\x81\x35\xa6\x1c\x84\x49\x58\x70\xa2\xd8\x10\xc1\xef\x15\x2b\x82\xc5\x46\x14\x89\x29\xbb\x03\x81\xe5\xd0\xb1\xaa\xd9\x74\x0a\x74\xf1\xad\xdc\xc5\x05\xe5\xb1\xe6\xc2\x61\xff\xf2\xed\x6d\xbc\x2a\x95\x3e\xa6\x46\xb8\x43\xc6\x04\x79\xf7\x14\x67\x0e\xbf\x4d\x7e\x94\xc6\x6d\x34\x0b\x95\x00\xfe\x45\x08\x25\xac\x60\x22\xc8\x84\xb7\x86\x10\x97\x49\xc8\x85\xb0\xc8\xc4\x64\xae\x3e\xd3\xce\x57\x92\xf3\xe3\x1a\x65\xa1\xf0\x4c\xd6\x6b\x14\x1b\x33\x5b\xce\x37\x6a\xf8\xaa\x79\xb9\xcc\xb5\x20\xdd\x60\x75\x5b\xfb\xdb\x80\x72\x76\xe8\x5c\x25\x65\x04\x6b\x24\x3d\x61\xaf\x79\x79\xab\x6f\x2b\x6a\x0e\xf4\x66\xd0\x1c\xbb\x1a\x43\x8e\x17\x59\x55\xb1\x3b\x49\x08\x34\xcd\x02\x22\xa6\xe5\x37\x96\xed\x36\x7e\xbc\xa5\xb2\xbc\xb3\xbf\xed\xa1\x11\xb6\x1c\xe1\xc2\xe4\xd0\xe5\x9b\x4c\xfa\xd1\x90\xf3\x56\x3e\x66\xf2\xe9\xd6\x98\x7c\xfa\xd1\x5c\x34\x5b\xf9\xf8\x7a\x5d\xac\xd7\x6c\x4f\x73\xbd\xe5\x02\xae\xc5\xe4\xa1\x5e\xa6\x41\x4a\x25\xb7\xe9\x29\x88\x32\xd1\x12\xd1\xd9\xa1\x28\x4d\x03\xed\x49\x6e\x9a\xe8\x8e\xf6\xb2\xbb\x91\x1a\x3e\xa8\x59\xf8\x2e\xc2\x15\xc9\x6c\x05\x95\xa9\x60\x59\x51\x7e\xc6\xcb\x3b\x36\xa5\x53\x63\x68\x67\xea\xea\xfa\x66\x6e\xd4\x9d\xd5\xca\x9b\x94\xbc\x95\xf0\xc1\x80\xaf\xd7\x5b\xbb\xd6\x55\xd9\x4f\x2d\xb9\xc4\x1c\x29\x30\x00\x3d\xea\xba\x68\x7b\xe1\xf2\x42\x0e\xcb\xa2\x06\x03\x8d\xda\x84\x4b\xbc\xc4\x14\xe1\x4a\x1b\xf9\x72\x08\x81\xea\xfc\x98\x6d\x49\x5a\xd3\x52\x70\x32\xc4\x8c\xfb\x30\x2e\x3e\x9b\xc0\xe4\x36\x17\x7c\x8f\x26\x9c\xde\x96\x77\x34\xa4\x07\x2a\x91\x27\xf2\x1b\x0c\xac\x8e\xf1\x81\x2c\x5b\x43\x79\xc1\xdd\xf0\xd5\x13\xb9\x65\x5e\x43\x0a\xdb\x90\x16\x55\x7a\xa4\x15\x9d\xe9\x55\x13\xba\x3e\x19\xc9\x5c\xd5\x22\x0f\x9a\x38\x5c\xbc\x3f\x3b\x3b\x3d\xbf\xbc\xb8\x3a\xfa\x70\x74\x72\x79\x75\x7a\x76\x79\x7c\x7a\x72\x41\x04\xef\x36\xc8\x6e\x2a\xf4\xfb\x93\x72\x29\x13\x38\x9d\xf1\x2a\x9b\x4e\xab\xb4\xe0\x58\x8d\x48\x95\x32\x1e\x62\x36\x2b\x5f\xcc\x76\xe9\x1d\x6e\x34\xfe\xc5\xc3\x63\x64\xb8\x86\xf4\x52\xe1\x62\xa9\x64\xa5\x5b\x5c\xae\xf6\x71\xa5\x7b\xe1\x09\xa4\x2d\x73\x3c\x46\xc6\x01\x80\x40\x90\xba\x26\x95\xeb\x85\x8c\x8e\xdd\x8d\x80\x68\xa6\x16\x5f\x5a\x60\xbd\xdd\x15\x54\x62\xa6\x27\x51\xc3\xdb\x76\x73\x8e\x14\x8e\x9d\xd2\x25\x95\x6c\x7c\xb8\xc7\x76\x7d\xb6\x23\x68\xe6\xd7\xb7\xa9\xdd\xb1\x46\x75\x83\x41\xec\x35\x06\x67\x10\x48\x52\x55\xe1\xdf\x2f\x30\xb5\x7b\x0e\x53\x43\xe5\x3a\x9a\xfe\x08\x27\x01\xb4\x83\x3f\x02\xb8\xf7\xb7\xda\x34\xff\x05\xa4\xae\x6e\xab\x8c\x25\x7f\xc8\x2a\xa3\x11\x06\xc0\x01\x1b\x98\xf0\x9c\xed\x68\x06\xf2\xea\xce\x26\xda\x96\xdf\x85\x26\xfd\x37\x04\x06\xf0\xe3\x07\x9b\x18\x01\xdd\xf6\x1f\x39\x6f\xd9\x7f\xd4\xce\x0c\xdf\x18\x70\xc0\x3e\x4c\xae\x97\x2c\x57\xd0\x16\x47\xd0\x72\xeb\x92\x04\x38\xc5\xd7\x65\x29\xd4\x6e\xea\x5b\x91\x31\x29\x92\x99\x45\x27\x8b\x23\xd7\xaa\x70\x2c\xc0\xa5\xfc\x28\xb9\x91\x34\x0d\x0c\x1a\x4d\x32\x0d\x6d\x86\x00\x91\xd6\xcf\xd1\x6b\xc6\x18\xb8\x2d\xa7\x34\x07\x4c\xf0\x2a\x84\x02\xd7\x1f\x74\x18\xb9\x21\x04\xaa\x63\x0e\x84\x1d\xa2\xe6\x3f\x64\xcf\xc8\xe4\xe9\x94\x91\x95\x9a\x2c\xc9\x08\xb8\x4e\x30\x0c\x91\x83\x4b\xdc\x30\x7f\xb1\x5c\xfb\x94\xb8\x68\x87\x5e\xa5\x2b\x68\x54\x3a\xad\xff\x9e\xda\xa1\xb4\x73\x3a\x4b\xab\x46\x43\xea\xbf\x6c\x5f\x9c\x75\x86\xcb\x16\x0f\xd8\x15\x17\xed\x68\xd9\x8f\x85\xe6\x66\x0f\x46\xcb\x0e\x26\xfe\x81\x8a\x59\x47\xc5\x1b\x89\x73\xf1\x74\x63\x66\xb6\xb9\xfd\x61\x00\xed\x1a\x21\x9c\x3d\x21\xa8\xb4\x55\xb9\x76\xda\x11\xf4\x69\x62\xe6\x13\xdc\x9f\xdc\xa3\xb2\x59\x7f\x60\x2e\x43\xdb\x55\x14\x0b\x88\x6c\x40\x5a\x16\x47\x08\x8b\x07\x68\xb7\x26\x4b\x5f\x6b\x4e\xf4\xb5\x11\x90\x83\x10\xe7\x5f\x1d\xc8\xb8\x19\x6b\x1a\x20\x8f\xed\xce\x68\x82\xd5\xdb\x0d\x02\xd2\x3f\x9f\xf1\x02\x59\x9e\x21\x12\x9e\x3c\xe7\xa1\x61\xe6\x8f\x62\x21\x3f\x96\xc2\xeb\xfb\xbf\x3f\xd4\xf4\xdf\x30\xd0\x46\x43\x38\xe1\x9d\x06\x3c\x46\x94\xb7\xe4\x1d\x86\xac\xd6\x9c\x74\xba\xf9\xfe\x2a\x53\x9e\x03\x18\xa4\xb5\x02\xee\xb8\xa8\x5e\x01\xe6\x8c\xbc\x27\xb9\x70\xcc\xf0\xee\x30\x88\xd0\xdc\x1d\x34\x4f\x59\xb6\xeb\x8a\x2c\x01\xb3\x5a\x28\xd1\x34\x41\x69\x02\x4d\x16\x7b\x8d\x36\x10\xe2\xbf\x3a\xa4\xb3\x34\x3c\x2c\xe7\x59\x75\x0e\x84\x47\x79\xac\xc5\x9a\x82\x42\x48\xa3\xbd\xb8\xd9\xa1\x46\x6f\x80\x6e\x4d\x96\x1c\x8e\x3e\xc9\x83\xf0\x18\xf0\xa0\xc2\x64\x0a\x0a\x22\x8d\x37\x8d\x44\x63\xc0\x14\x02\xfd\x53\x02\x69\xea\x20\xc7\xdd\xb3\xad\xa0\xc4\x2e\xfc\x98\xde\x0d\xe1\xaa\xa2\x32\x0d\xc5\x3c\xf8\x81\xea\x3b\x1f\x45\x9d\x7a\x7d\xaf\xe4\x26\xd4\xa1\xf7\x49\xff\x96\xcb\x8e\x15\x84\x2a\x34\x88\x29\xe3\xe2\xde\xd9\x5d\x49\x4a\x69\x43\x1d\x6f\xba\x18\x29\xd4\x23\x28\xd3\x5b\x7c\xaa\xf4\x13\xbd\x22\xc5\x63\xc6\x66\x9b\x43\xa5\x86\xc5\x7b\xd6\x66\x96\x11\xa1\xda\x12\x24\xb5\x7d\xb2\xac\xa0\x49\x22\x4c\x12\x31\x6a\xb7\xce\x94\x39\x7e\x78\xa8\x4d\x48\xe4\x87\xc7\xc1\xf4\xff\x23\xbd\x6f\x45\xe5\x7c\xda\x54\xb6\xfa\xde\x52\x44\x0f\x06\x74\x64\x2a\xb1\x30\x12\xb7\xfc\xcf\x9a\x94\x84\x0d\xef\xdc\xf7\x1b\x1a\xe4\xc7\x1f\xd3\xc7\x87\x72\x6f\x55\xd6\x13\xfe\x67\x8b\x8c\x24\xd4\x41\x6c\xe9\xd9\xdd\xa6\xf1\x54\x73\xd4\x4d\xcf\xc0\xad\x4d\xc1\x5f\xb8\x7d\x2a\xb7\xa9\xda\x4f\x8f\x50\xb1\xbe\x1f\x35\xcf\x99\x20\xb5\x7a\xe5\x85\x80\x0e\x40\x7d\x74\x30\xf4\x46\x30\xb6\xae\x5b\xb9\x61\xa5\x82\xa4\x45\x90\xf4\x32\x2e\x10\x38\xd3\x16\x31\x57\x34\xcf\x2a\x23\x56\x5c\x92\x43\xac\xd1\x87\xc1\x11\x4d\x0d\x4a\xca\xf5\xe8\xf8\xde\x0c\xde\xc1\xcd\xfd\xc3\x4a\x31\xc9\xdc\x0c\x7b\x1c\x0e\x2e\x74\x77\x83\x3e\x3f\x84\x34\x92\xa3\xe1\x83\xe1\x36\x35\xea\x7d\xe7\xe0\xa2\x10\x1b\x6d\x18\x27\xff\xec\x84\x4f\xee\xb1\x8e\x69\x63\xf2\x50\x00\x3f\xe0\x26\xba\xd7\x98\x63\x8d\xee\xec\x6c\x6b\x88\x89\x1e\x16\x5c\xff\xfb\x15\x89\xb5\x55\x9e\xed\xb3\x09\x2c\x47\x8b\x3b\x38\xb3\x24\x05\x62\x70\x81\xb8\xd5\x18\x24\x71\xa9\x00\xe1\xa6\x6c\x22\x24\xa7\xa7\x06\x8f\x48\x0e\x3b\xbb\x49\x8b\x40\xf9\xeb\x41\x70\x7b\x92\x45\x6d\x27\xa6\xd3\xdf\x66\x8b\xb4\x84\x57\x55\x3a\xd2\x6c\xd2\x18\x3b\xa4\xd2\x74\xc4\xc6\x58\xc3\xfb\xec\x82\x87\x2a\x25\x2f\x75\x3a\x39\x0f\x18\xec\x4b\x82\x57\x7b\x2c\xed\x0e\xbd\xac\xfc\x42\x95\x93\xaa\x9a\x7b\x6b\xd3\x50\xa3\xda\xd5\x12\x1e\x1d\x5a\xaf\xed\x4c\x72\x2c\xa5\xf5\xd5\xad\xa1\x91\x91\x73\xfb\xac\x51\x2f\x6b\x9d\xb6\x4b\x60\xe2\x2a\x8b\xf5\xd3\xdc\xb9\x59\x83\x1e\x6e\x38\x45\x21\xa4\x15\x0f\x60\x87\xaf\xb9\x17\x3e\xf2\xcc\x20\x26\x9f\xce\x9c\x30\xf3\x9e\x87\x48\xa7\xf4\x85\x5a\x15\xe2\x85\x91\x2f\xdc\x70\xe3\x5a\xec\x93\x29\xee\x07\x40\xbc\x96\x34\x32\x70\x60\x90\x59\xaf\x38\xfe\xc4\xf1\x11\xc7\x9f\xc3\x46\x9d\x3e\xda\xa8\x8b\x10\x53\xe6\x33\xd7\x18\x95\x54\xde\x24\x6c\xaa\xcb\x47\x9b\xfe\xf9\xf1\xa6\x9f\xb6\x9a\x6e\xcb\x7f\xe7\x82\x4f\x12\xa8\xcb\x6a\x7e\x06\x83\x2d\x91\x80\xfd\x44\x91\xe5\x83\x41\x64\x74\x75\x0e\x81\x75\x4f\x18\x41\x44\xcb\xb6\xf3\xcc\xc3\xb9\x59\x29\xa0\x08\xcf\x23\x25\x8d\xb6\x7d\x20\xbe\xfd\x60\x24\x56\xca\x5e\xd6\x89\x72\xe9\x9e\x1f\xbb\xd2\x7c\x50\xfb\x67\x91\x4d\x68\x2a\xbc\xb2\x0e\x78\x88\x79\x10\x86\xb0\xb2\x48\x08\x41\x53\x9c\xb2\xcb\x93\xab\x14\x98\x23\x0d\x12\x29\x27\x05\x73\x2f\xde\xa9\xbc\xe4\xb8\x0b\x8f\xf2\x46\x36\x5e\x3b\xf7\x3c\x36\x6f\x02\x94\x64\xdd\x39\xdf\xc3\x56\x7b\x71\x31\xb5\xaa\xcb\x4d\x6d\xed\x0a\x3b\x1a\xb4\x5a\xcb\xc4\x3a\x5a\x1c\x12\xec\x62\x30\xd0\xbf\x4a\x05\xee\xd4\xd5\x9a\xb2\xae\xaf\x93\xb3\xfd\xf3\xcb\xe3\xfd\xb7\x17\x83\x41\x7c\xc5\x49\xe7\x81\xe0\x68\x2a\x27\x9f\x24\xa1\x3c\xe2\x10\xb1\xc6\x45\x97\xab\x6b\xfc\x89\xb7\x3a\xc5\x66\xb1\x2b\x5f\x09\xb5\xcd\x5a\x05\x3d\xaf\x0f\xf1\x71\x9a\xe8\xe8\xaa\x71\x74\x50\x16\x22\x63\x05\xe5\xfd\x4f\x59\xa5\xe0\x3e\xca\x65\x31\xed\x7f\x9a\xd3\xa2\x2f\x07\x80\x15\x37\xfd\xe5\xa2\x9f\xf5\xef\x18\xfd\x54\xf5\xcd\xa0\x25\xfd\xcb\x39\xab\xfa\xac\xea\xdf\x96\x95\xe8\xe7\xec\x23\xcd\xef\xfb\xd3\x25\xed\x8b\xb2\x7f\x9b\x15\xcb\x2c\xcf\xef\x35\xba\x85\x60\x99\x90\xc5\x64\x45\x1f\xb0\x0a\x93\x0f\x8c\x7e\x4a\xfa\x17\x94\xa6\xfd\xb9\x10\x8b\xf4\xf9\xf3\x1b\x26\x12\x56\x3e\x3f\xfa\xf1\x6c\x51\xec\x47\x8e\x09\xeb\x8a\xb2\x2a\xd0\x7a\xdd\xf9\x81\xa3\xba\xc6\x47\xbc\x93\xed\xd0\x7e\x23\xcf\xdb\x7e\x23\x76\xbe\xfd\x97\x24\xba\x8a\xb6\x39\x16\xda\xd5\xe0\x79\x64\xa2\xe9\x7f\xe4\x64\xc5\x66\x69\x38\x75\x81\xab\x71\x87\x05\x7d\xfc\x5e\x80\xa4\xda\x88\x81\x84\x3c\x14\x51\xad\x0d\x7d\xd2\x8e\xe0\xc2\xc6\x02\x8a\xf9\x07\x03\x58\x2d\x64\xa4\xf4\x4a\x1a\x55\x38\xc7\x49\x92\x2c\xc7\x24\xf3\x30\xb9\xf1\x84\x04\x56\x4e\x78\x4e\x58\xc3\x38\x92\x85\xc6\x91\x69\x85\x67\x5d\x51\x8e\x31\xeb\x09\x8b\xec\x37\x18\xc4\x9c\x00\xf6\xe0\x6d\xb6\x88\xc1\x57\xc8\xc8\x20\x24\xb7\x31\xc9\xe4\x41\x83\x7a\x14\x22\x70\x0b\x6d\xa2\xc7\x5b\x2e\x13\x7d\x3e\x18\x04\x85\x8a\xd1\x70\x4c\x3c\x27\x85\xd1\x70\x8c\x39\x48\x7e\xfc\x2c\x6c\x8f\x92\x97\x2c\x96\xdb\x01\xa5\x7c\xbd\x66\xeb\xf5\x3e\xad\x63\xdd\x31\xa8\x22\x42\x83\x81\xee\x98\x7e\x76\xc0\x05\x31\x27\x5d\x81\xad\xc1\xf0\xef\x80\xc6\x39\xce\x31\x3c\xe0\x19\x9e\x80\xe5\x5b\xcb\xb7\x7a\x8e\x5a\x72\x2b\x78\x9f\x23\x59\x80\x15\x9e\xe2\xb9\xfd\x65\x0f\x6f\x55\x68\x57\xdc\xbf\xa1\xe7\x6c\x52\x22\xf2\x52\x05\x52\xb7\xf9\x9c\xe7\x8f\x4c\xad\x12\xd5\x7e\x5d\x38\x87\xb2\xd1\xe8\x8c\x42\x08\x29\xb9\x08\x67\x34\xe6\x6e\x91\x71\x9e\xdd\xa7\x9d\x0e\xc9\xdd\x51\x5e\xd5\x4c\x7e\xed\x12\xff\xbd\x7b\x89\xcf\x3a\x97\x37\x39\x16\xbd\x47\x4b\xe4\x9d\x05\x4a\x1e\xad\xab\xc4\x0e\x87\x93\xa2\xc3\xbf\x44\x7b\x87\xb4\xe6\xd0\x44\xee\x62\x2d\x3b\x5c\x4d\xe5\xd9\x7a\x1d\xc9\x23\x9a\xed\x35\xdd\x29\xd3\x96\xfc\x85\xc9\x55\x68\x4d\x6d\x93\x08\xbd\xdc\xd9\xdd\xbb\x95\x3d\x62\x9e\x03\x1b\x4a\x15\x87\xa1\x7d\x52\x18\x0a\xf0\x1a\x5f\x8b\xb8\xab\xfb\xf3\xac\x9a\xa7\x5f\x04\xce\xcb\x9b\xaf\x9d\xa1\x37\xdd\x33\x74\xbb\x7c\xea\x80\x6e\xf6\x78\x02\x93\xc0\x3d\x0e\xa8\x86\xef\xfc\xc5\x17\xfd\xb1\xa4\xfc\x7e\x67\x01\x2e\x1b\xd1\xd7\xb6\xf8\x43\x77\x8b\x39\xcd\xa6\x65\x91\xdf\x77\x36\xbb\x6b\xa1\x8f\x2e\xe9\x78\xbd\xa6\x75\xdc\xee\x53\xa0\xc9\x7d\x26\xbc\xa6\x2f\x0b\x40\xa2\xde\xdc\xe6\x19\xed\x28\xcf\x8b\xb0\x6b\x8a\xc9\x69\x55\x7d\x6d\xcf\x5f\x75\xf7\x3c\xda\x91\xf3\x1f\xc9\x05\x10\xed\xd0\x6c\x32\xdf\x61\x45\xd4\xb5\xb7\x01\x5e\x52\x74\xf5\x57\x16\xc2\x8a\xc5\x52\xec\xc8\xb9\xfb\xea\x29\xd9\xdf\xd4\xb0\xa2\xe4\xb7\x10\x0d\x6e\x47\xc5\x7c\xfc\xda\x82\x0f\x36\x15\x0c\x56\x64\x3b\x40\xc5\x36\x76\xf5\xe3\xc6\xae\xde\x50\xb1\xa3\x55\xad\x3b\x77\x19\x8f\xd2\x89\xdc\x73\x5a\x1f\xfa\x21\xe3\x38\xda\xb9\x2d\x97\x85\x68\xb6\xd7\x08\x21\xd4\xed\xb5\x83\xb8\x30\x7b\x13\xa6\x1d\xaa\x3d\x13\x06\xb0\xe5\x23\xa6\xee\xb6\x59\x4d\xca\xde\x10\x33\xa2\x9e\x9e\x7e\xd3\x2d\xff\x4d\x37\x4b\x9f\xf2\x4c\x81\x49\xc7\x0c\xc6\x4f\xc7\x62\xe8\xe4\x51\xe4\xad\xde\x57\x63\x7b\x07\x3c\x01\x91\x61\x3b\x78\xf7\x9e\x51\x20\x16\x95\x37\xf7\xd1\x6d\xc6\x8a\x08\xa5\x5d\x34\x9c\x7e\xea\xdf\x71\xb8\xe9\xce\xe4\x0d\xc0\x93\xad\x82\x88\xd9\x2e\x93\xac\xaa\x28\x17\x3b\xc6\x5b\x64\xc7\xb2\xe0\x3b\x73\x58\x6d\x3b\x36\x04\x49\xfa\x4e\xc0\x1e\xd8\xa1\xf9\x8e\x9c\xc3\x28\x3d\x13\x46\x69\x70\xbe\x49\x4e\xa6\x3c\x45\x2a\x32\x52\xf7\x93\xb1\x96\xbf\x5e\xff\x7e\x59\xbe\x81\x4f\xed\x88\x3d\xd7\x4b\x96\x8b\xe3\x42\x2d\xf6\x8a\x7c\xe4\x0d\x4c\x91\x43\x7b\x49\x3f\xc8\x26\x73\x55\x80\xcd\xdc\x95\x4a\xae\x53\xa2\x0d\xe6\x54\xa7\x36\x7c\xec\x34\x93\xd1\xcd\x31\x16\x98\x15\xd1\xee\x2e\xe9\x4a\xab\x44\x80\x7a\xff\x28\x30\x68\x44\x94\xab\x04\x6e\x7e\xae\xd4\x98\xf8\x69\xea\x5a\xb1\xe2\x0e\x95\xa4\x19\x38\xa1\xf1\x5d\x8d\x17\xa4\x6a\x5c\xa4\xb8\xba\x3e\x41\x26\x4e\xab\x32\xbf\x83\xc0\x0c\x9b\xf3\xfb\xb5\xe8\x19\x32\x91\xe3\x0b\xff\xad\xd1\x3a\x84\x05\xb9\xd1\x53\xaa\x23\xb7\x7a\x95\xba\xed\xa1\x79\xd8\xde\xc6\x45\x6d\xda\xd8\xf0\xe8\xd3\x2d\x19\xd1\xb1\x6e\xba\x5a\x02\x4f\x6c\xf1\x55\x2b\x8f\x7f\x41\x0e\xa2\x6c\xe8\xce\x15\x41\xcb\x99\x6e\x79\xe7\x0a\xd9\xde\x6e\x80\x45\xa8\xca\xac\x59\x6e\x80\xc6\xbb\x61\xfc\x82\xc4\x66\x76\xce\x32\x2e\x58\x96\xdb\xab\xac\x7f\x17\xf5\xba\x7c\xd5\x4e\xdd\xeb\xa8\x8e\x87\x52\x15\x39\x09\x2c\xd7\xe6\xb8\xda\x69\xcb\xb3\x42\x22\x1d\xa8\xf0\x46\x1a\xe9\x36\x68\x88\xb2\xe6\x69\x2d\x40\xef\x1c\x4c\x88\x06\xaa\xde\xd9\x6d\xed\x72\x1d\xf9\x47\xc0\xe5\xa4\x3d\x53\x7e\x57\xc3\xed\x3f\xa2\xe3\x4d\x72\xa4\xbb\x8c\xaf\x5c\x00\x8d\xb4\xa8\x89\xc0\x8c\x08\x6d\x4f\x56\xc2\x9d\x6f\x5f\xd2\x64\x95\x19\xe1\x8a\xb0\xc0\x52\x45\xcd\x74\x1a\x6d\x97\x38\x43\xeb\xf5\xa6\x8f\xb6\xeb\xed\x43\xb4\x85\x39\x4a\x95\x48\x63\x8b\x10\x25\x59\x96\xc4\xd1\xfe\x48\x58\xa5\x7a\xa5\x2d\x5e\xea\xb8\x42\x7b\x06\xcd\x57\x8d\x40\x65\x4d\x56\x64\xaf\x7f\x8e\x39\x32\x62\x97\x55\xfd\xe2\x11\x43\x07\x6e\x9c\x17\x62\xa4\x8d\x92\xb3\xaa\x2a\x27\x2c\x13\xd4\xb7\x02\x28\x34\xd2\xdf\xd0\xe7\xe0\xe6\x1b\xae\x0d\x8a\x54\x75\xac\x3e\xdd\x2a\x33\xda\x8c\x5c\x71\x08\x71\xe6\x6d\x2a\xb0\xf1\x4b\x74\x26\xb7\x9f\x8e\x6f\x17\x39\x04\x8d\xaf\xbb\xf6\x45\xc7\x4a\xb0\x94\x37\x58\x0b\xa0\xd5\x68\xb5\x22\x34\x45\xb2\xe6\xfc\xd1\x36\x0d\xc5\x91\xc6\x6b\x8a\xbc\xe3\x31\xd3\xe2\xb1\x46\xd3\x7f\x10\x10\x33\xb3\xec\x38\x1a\x90\x3d\xf7\x79\x7d\x05\x41\x09\xe5\x0a\x7c\x5d\xf2\x13\x23\x03\xf4\x44\x28\x98\x13\x23\x21\x24\xd4\xdd\x6e\xd2\xd4\x8a\x6b\x20\xfa\x57\xa1\x0d\x41\x54\xf4\xc6\x62\xfb\x1b\xe5\x6f\xae\x1e\x87\xb8\x40\xc8\x42\xf7\x38\x49\x23\xaf\xeb\x47\x88\xb3\x61\x39\x30\x23\x14\x97\x76\xa4\xfc\x8d\x93\x29\xcc\xcc\x0e\xc1\x18\xd7\x58\x01\xeb\xb5\x52\xf0\x40\xa5\x66\xd0\xad\x64\x33\x20\xb3\x66\x00\xcd\x00\x1d\x68\x84\x96\xb8\xc4\x0c\xef\xf3\x38\x33\xbb\xd1\x8f\x9b\x56\x05\x64\x48\x69\xcd\xe4\x6b\x77\x8a\xec\xc9\xad\xa1\x24\x82\x71\x89\x52\xef\x8b\x36\x60\x7e\x90\x45\xd0\xa1\xcc\x82\x15\x90\x9b\x3a\xf3\x9e\x5b\x50\x76\xf7\x9a\xca\x40\x72\xe3\xd5\xac\x84\x59\xcb\xc7\x82\xc4\x02\x3a\x5e\xab\x2d\x11\x3e\x93\xec\x21\x9e\x04\xca\xa0\x46\x47\xb5\x4d\xc8\xe5\xd1\xbb\xb3\xb7\xfb\x97\x47\x57\xa7\x27\x6f\x7f\xbd\xfa\xfe\xed\xf1\xbb\x77\x7e\x64\xfc\x8b\xc1\x20\x9e\x00\xe7\x73\x29\x62\x86\xb9\x72\x5e\xfc\x9c\xb0\xca\xd8\x07\x9e\x16\xb9\x03\x3c\x43\xb1\x57\x85\x5e\xee\xad\x12\xb0\xed\xbb\x0b\xb2\x6b\x0d\xdc\x1a\xb9\xf1\x9c\x5c\xf2\x78\xea\xcf\xfd\x7c\x30\xf0\x30\x9e\x08\x21\x73\x17\x16\x6d\x65\xe4\xf2\x8b\x9a\xcc\x7b\x13\x32\xb7\x82\x7c\x60\x6c\x8f\x44\xbc\x88\x4b\x84\xa7\x26\x86\xc1\x27\xd9\x24\x3f\x2c\x2f\x7c\xf6\x21\x15\xd2\xd2\x48\x32\xaf\x92\x05\x67\x77\x99\x60\x5f\xe8\x6f\x5d\xa2\xe9\x1d\x2d\xb3\xfd\x0d\xc9\xf9\xab\xeb\x90\x75\x9a\xd8\x61\x78\x43\xc3\x3a\xd7\xeb\xd2\x27\x26\x7e\x35\x4e\x4c\xed\x0a\x87\x11\x5c\xb6\x82\x1c\x37\x57\xa2\x3c\x07\x0b\x3c\x41\x78\xe2\x29\x09\x7e\xe7\x5d\x26\xcf\xc0\xd3\x8d\xe8\x68\x38\x36\x62\xc3\xe8\x9f\x92\x90\x61\x3a\xda\x1d\x8f\x41\x46\x7f\xc8\xc9\x68\xec\x54\x38\x27\x5c\x43\x18\x5b\xf2\xc6\x0c\x3f\xc8\x9b\xdc\xa4\x24\x6e\xc9\x2d\x15\x99\x8d\x46\x15\x70\x95\x5b\x84\x94\x7b\xf1\x10\xf3\x44\xc5\x6f\xf0\x96\x52\x89\x47\x36\xea\xea\x68\x9c\x0a\xfc\xbb\x32\x5c\xd1\x17\xb0\x57\x6f\x4f\x0f\x7e\xbc\x18\xa3\x94\x27\xef\x4f\xde\xec\x9f\x1c\xbe\x3d\x3a\x74\x5d\x3d\xb6\x4d\xc4\x25\xd2\x4e\x4f\xe5\x43\x8d\x2c\x1f\x6e\x64\xb6\xa1\x91\xe0\x25\xac\x1a\xc6\xa0\x2d\x27\xa7\x27\x47\x35\x4d\xae\xe8\xe7\x05\xe5\x4c\xee\xd9\x2c\x7f\x97\x4d\x78\x59\x91\x43\xae\x6f\x31\x6f\x37\xdd\x62\x20\xc2\x73\x60\x3b\xa2\xd4\xbc\xa2\x86\xb0\x60\x71\x70\xa9\x7e\xab\xed\xda\x65\xa6\x56\x96\x4e\x28\x0b\xdf\x26\xc6\x30\x4a\x9b\x12\xc8\x6b\x89\x45\xa0\xe9\xb0\xb6\xb2\x60\x0e\x06\xca\x81\x97\xa5\x35\x9f\xe0\xcb\x42\xb0\x5b\x7b\xb5\x61\x53\x02\x9e\xef\x37\x54\x7c\x60\xf4\xd3\x31\xe0\x60\x06\x71\x2b\xf4\xc9\xa5\x95\xa3\x3a\x74\x00\x84\xd5\x57\x89\x24\xb5\x23\xce\xab\x1c\x57\xa4\x13\xa7\xae\xf0\x71\xea\x12\xc5\x96\xea\x58\x6e\x9a\xa9\x91\x05\xfd\xc0\xc4\xbb\x8c\x15\x0a\x40\x86\xe1\x3c\x56\x62\x04\x6b\x23\x5f\xe2\x82\x7e\x16\x17\xec\x3a\x67\xc5\x8d\xe2\x4c\xc0\xfa\xd3\xd4\xa7\x58\x4d\x14\x57\x08\x67\xa8\x37\x2d\x57\x94\x2c\x75\xdc\x8d\xfa\xd3\x5c\xd6\xb8\x45\x55\xa8\x8f\x9e\x22\x6b\x7e\x4f\xb5\xb0\xbd\xd7\xec\xd8\x34\xe1\x54\x3d\xc6\xab\x2c\xff\x94\xdd\x57\xe7\x14\x40\xdd\x25\x99\x81\xb0\xf3\x35\xab\x3a\xe2\xa8\xc0\xb0\x13\x42\x6b\xcb\x94\x69\x0b\x14\x08\x44\x42\xb1\x9e\x8a\x14\x8c\xd6\x44\xad\x11\x19\x9a\x03\x3d\x0c\xe7\xcd\x9f\x0e\xa8\xc0\xd9\x92\x74\x4c\x98\xee\x85\x7e\xe5\xf4\x97\x1a\x34\x93\xf9\xe0\xe5\x72\xd0\x41\x2b\x2f\xbf\x4c\x4d\xa8\x09\x6a\x7c\x5e\xbf\x84\x84\xe6\xbd\xa7\xa5\xfd\xc2\x2d\x53\x43\x51\xef\x0b\x07\x49\xed\x84\xc6\x02\xef\x7a\x6e\x33\xaf\xb8\xbc\x82\xc8\x1c\x6f\x38\xb1\xb7\x8d\x0f\x9c\x0c\x7b\x41\x1c\x8c\xb2\x88\x23\x40\x57\x8f\xb0\x33\xfc\xf0\x21\x35\x86\x2f\xe8\x77\x5f\xb8\xf1\x2e\xa7\xdb\xdb\xe8\x0b\x1f\xd1\x71\x72\x65\xa2\x58\xb8\xe9\x89\x15\x42\x71\xb3\x78\x5a\x4c\x9f\x5e\x38\x9b\xc5\x5b\xba\x02\x56\x7d\x90\x05\xc7\x08\x78\xa3\x0f\xfc\xa5\x3e\xaa\xcf\x8f\xb4\xe9\xe6\xdb\xd3\xd3\xb3\xab\xb7\xc7\xef\x8e\x2f\xb5\xce\x50\x76\x0f\xab\xdc\x8e\x35\xf7\x62\x05\xb0\x02\x0e\x07\x0f\x76\xbf\xcf\x0a\xdd\x7a\x88\xbd\x42\x05\x9d\x08\x3a\x75\x8a\xbd\x0f\x7c\x7b\x3b\xec\x11\x28\xda\x60\x19\xbc\xe2\xa8\x86\x1a\xbd\xae\xb9\xe3\xf9\x0d\x37\xd6\x45\x6f\xb8\xa1\xb7\x3d\x3d\x17\x9b\x4a\x94\x8c\x2e\x0c\xa2\xa6\x8f\xcf\xda\xf4\xc6\x98\xb7\x6c\xed\xe2\x8a\x4c\x92\x49\xce\x68\x21\x5e\x2d\x59\x3e\xa5\xc6\xf0\xf3\x8a\x15\xc6\xec\xd4\x2e\x37\x4b\x42\xc0\x7c\xf1\x9c\xde\xb1\x4a\xbe\x35\x37\xc7\xab\x36\xad\xb9\x92\xeb\xdd\x50\x14\xc2\x2c\xa1\xba\x92\x64\x56\x1b\x61\xde\x1b\xe7\x3a\xc8\xcf\x0a\x3a\x7d\x5d\xf2\xc3\xd3\x77\x06\x59\xe6\x4a\x85\x8d\x1e\x8d\xcd\x23\xf8\x36\x4d\xcf\xc3\xb7\xd7\xaa\xf5\xa4\xf2\x59\xcb\x2b\xbd\x05\xcf\xf5\x49\x05\x2c\xc3\x39\xdc\x79\x1a\x77\x03\x0d\xac\x5e\xd0\x38\x47\x58\xd3\x18\x15\x66\xf0\x33\x98\x69\xf3\xe4\x07\x66\xb0\x93\x51\xbc\x44\x2f\xe2\x86\xde\x75\xc5\x8a\x9c\x15\xb4\x4a\x05\xbe\xce\xcb\xc9\x47\x30\x61\xa5\x3d\x70\x7d\x7d\xa7\x82\x3d\xc6\x27\x5c\x1e\xb8\xde\x8b\x63\x8e\xbc\x00\x5b\xc3\x17\xc5\x77\x87\x76\x1d\x17\xdb\xdb\x10\xcf\xf9\x90\x8f\x8a\x31\x8a\xc1\xfb\xae\x46\xf1\x34\xb9\x85\xf3\x4f\x51\xc3\xb9\x32\x31\x12\x1d\x3d\xea\x05\x23\xa0\x28\xf6\x0f\x4c\x9c\xab\x67\x14\xaf\x54\x3c\xd4\xd3\x85\x0e\xdc\x50\xa5\x85\x8e\xed\x01\xdc\xdd\x24\x39\x3c\x7d\x77\xc9\x29\x3d\x30\x6b\x47\xf9\x0a\x2a\x4e\x2f\x39\x29\xa7\xb4\x3b\x81\xf6\xed\xf1\xcb\x35\xc5\xa9\x38\x3a\x55\x2c\x50\x8d\xe7\x78\x8a\xf3\x4d\x91\x64\x7c\x92\x6c\x7a\xb0\x19\x46\x59\x47\x76\x3d\x85\xe3\x56\x1e\x89\x7e\x30\xf0\x46\x1c\x42\xbd\xfb\xf7\xcf\xce\xde\x1e\x1f\xec\x5f\x1e\x9f\x9e\x38\xa6\xfd\xe7\xf3\xfd\xb3\xb3\xa3\x73\x73\x9b\x6d\x42\x6e\x65\x14\xaf\x7c\x17\xa9\x61\xe8\xf4\xe4\x39\x2d\x0d\x6b\xa4\x63\xc8\x86\x1e\x4a\x15\x78\x28\x5d\x66\x37\x00\x0f\xe1\xe4\x11\x53\x76\x17\x75\x22\xf4\x7e\x15\xa2\xec\xcf\xaa\xfa\xc7\x81\x65\xb9\x03\x4c\x37\x3e\xdb\xc6\xe4\x3b\xc4\xcf\x88\x94\x72\x03\x47\x0a\x40\x43\xee\xd9\x36\xc8\x46\xc4\x24\x61\x1e\xe2\x2c\xb9\x59\xb2\xa9\x09\xc9\x59\xd7\x81\xca\x93\xc6\x54\xd9\x9e\xe3\x22\xd0\xfb\xb9\x0f\xa8\x8e\xed\x9a\x55\xf3\x19\xdc\x89\x03\x43\x30\xc9\xb6\xeb\x49\xbf\x2c\x7d\x01\x84\x2c\xf2\x7b\xfa\xe4\x82\x38\x92\x9b\xaa\x2b\x95\x67\x39\xa3\x95\x5f\x02\xb7\x56\x23\xd2\x16\x7e\x6f\xb9\x22\xbc\x9d\xc6\x66\xc6\x8f\xe8\x35\x37\x66\x89\xa6\x08\x1c\x10\x99\x0e\x7a\x89\x41\x31\x11\xd2\x37\xbb\xad\x61\xf5\x4b\x1a\xa8\x22\xdf\x69\x66\xc7\x10\xef\xce\x63\xd5\x08\xa1\x82\x08\xb5\x0d\x3e\xb2\xd7\x26\xcf\x80\x6f\x56\x3b\x18\x2e\x99\x5d\x83\x98\x75\x24\x6e\x17\x39\xae\x15\xc5\x8e\xc1\xc7\xf3\x4a\xc8\xf3\x04\xc6\xf9\xb2\xb4\xa1\xab\x58\x71\x63\xe2\xbd\x4c\x72\x9a\x15\xcb\x85\xec\x9a\x62\xd0\x3a\x0f\x87\xc1\x80\x26\x82\xb3\x9b\x1b\xca\xe3\x68\xca\xa6\x5a\x56\xa6\xd7\x73\x84\xea\x56\x31\xce\xf3\xd5\x9d\x53\xc8\x99\xc4\x79\x47\x8d\xb1\xe5\x54\x4f\x16\x19\x6a\x67\xe7\x85\x15\x5d\x8d\xf8\xb8\x27\x09\xae\x2a\x7a\x30\x88\x0b\x8f\x57\x10\x86\x99\xe2\x78\x57\xee\x04\xc7\x4b\x36\xaa\x5f\xaf\xe3\xd6\xc1\x39\x34\xcb\x22\xa7\x19\xdf\xcf\x73\x38\xe6\x62\x85\x77\xd6\x0c\x30\x4c\x47\x87\xe3\x7f\x53\xe0\xe0\x10\xd2\x81\x3e\x40\x92\x6f\xa8\xd8\x6f\x9c\x24\xf2\xb6\xd0\xc8\x5f\xfb\x2b\xd6\x74\x00\xaf\xd4\x10\xdb\xb0\x7e\x2e\x6a\x22\xa0\x2e\xe8\xa1\xb7\x22\x6b\xfc\x45\x27\x10\x26\x0e\xa8\x57\x6a\xe5\x31\x2a\x71\x50\x9f\x87\x97\xa0\xeb\x13\xd8\x74\x21\xe5\x38\x60\x28\x40\x20\x2d\x9b\x02\x17\x11\x63\xb7\x83\xbb\x58\x6f\x0e\xf7\x1c\xb8\x46\x85\x68\x62\x01\x98\x98\xd1\x60\xc8\x15\xc3\xdc\x25\x61\x4f\x87\xad\x64\x28\xe5\x2f\x09\x5d\xaf\x59\x62\xb6\x70\xdd\xc1\x62\x81\x11\x87\x89\x0c\x08\xce\x14\xd3\xe4\xe0\xfd\xf9\xf9\x91\x72\x50\x43\xb5\xb9\x2b\x59\x4b\x23\xaa\x38\x8b\x17\x85\x69\x8c\xb3\xf8\x80\x98\xea\x20\x56\x34\x57\x00\x86\x7a\x76\xd1\x96\xf2\x06\x00\xaa\x82\xd6\x1e\x18\x0c\xde\x73\x1d\xb9\x6a\xe3\xc0\x7b\xdb\xac\x83\x83\x7c\x90\xb9\x54\x50\x0d\x94\x6c\xed\xf6\x04\xbf\x5f\xb5\x26\x38\x46\x98\x92\xad\x61\x3d\x63\x45\x96\xe7\xf7\x2b\x6a\xf7\xcf\x57\x8d\x95\x59\x3a\xdd\x0c\x6e\x5d\xd7\xcd\xbd\xe7\x5d\x35\x7c\x2a\xa1\x40\x00\xa9\x0f\xfb\xb7\xa2\x23\xe1\xdd\x1a\xea\x36\xc3\x6a\xa2\x07\x0f\x9b\xbc\x2d\xed\x18\xe3\x2e\x2a\xbe\x0a\xb8\x7e\x93\xe2\x14\x14\xcb\x6a\xac\x22\x28\xda\xee\x0f\x93\x15\xd5\xee\x2e\x14\xee\x66\x8f\x1e\x75\xcf\x3b\x38\x01\xc3\x98\x32\x8b\x58\x13\x8c\x69\xc7\xad\x00\x96\x88\xd7\x6c\x3d\xe6\xa6\x05\xeb\xf5\x23\xfb\xb7\xa6\x89\x9a\x1e\xca\xc9\x33\x23\xea\xf9\xc3\x39\xa4\x3c\xe3\x2b\x1d\xa3\xd4\x38\x49\x1b\x78\x31\x05\x06\xa3\x3c\x0d\x53\x8e\xfd\x13\x35\x2d\x70\x70\x5a\xa5\x25\xd6\xe7\x6a\x9a\x79\x90\x9f\x36\x5c\x69\x3c\xc4\x60\x60\x77\x0a\x3e\x14\x70\x16\x81\xac\xa6\xc4\x5b\xbb\x38\x53\x18\x94\x8e\x44\xb6\xa2\xca\xed\x43\x00\x43\x79\x41\xfc\x4d\x39\x07\xa8\xb4\xbf\xf5\x99\x32\x3e\xd5\x60\x89\x7d\x56\xf4\x8b\xb2\xd8\x61\x8e\x7b\xef\x7b\x9e\x80\x55\x3f\xae\x96\x93\x79\x3f\xab\xfa\xaf\xb3\x4a\xbc\x2a\x4b\x81\x92\x08\x46\xe8\xb8\xa0\x5c\xd8\x61\xfa\xc3\x0c\xd3\xcf\xff\xe7\x0c\xd3\xb0\x3d\x4c\x96\x8f\xb5\x7c\x82\xfe\x88\x00\x13\x56\xf6\xca\x8e\x83\xed\xdb\xcf\x5c\xe1\xbd\x72\xb2\x52\x10\x00\xbf\xb6\x11\x0c\x1e\x8c\x41\x31\xfc\x5b\x11\x0c\x76\xff\x02\x82\x01\xfe\x91\x93\xd1\xf8\x45\x3c\xc4\xb9\xba\xc9\xbc\xe6\x94\x7e\xa1\x28\xfe\x91\x9b\x2b\xfb\x0f\x6e\x02\x3f\x8b\xd5\x46\x46\xfe\x57\x5e\x7b\x7d\x0c\x4d\x79\x1a\x96\x38\xc9\x6d\xb6\xb0\xac\x82\xb3\x91\xf9\x91\x1b\xa7\x92\x2b\xb0\xc1\xb9\xba\x4a\x3b\x6d\x56\x24\xa7\x7c\xbf\x30\xb1\xab\xb4\xff\x3e\x98\x54\xa1\xda\x43\x18\x79\x20\x74\x49\x28\x3c\x2e\xda\xe5\xe0\x8a\x08\xeb\x85\x3f\x51\xe3\x5e\x3a\x03\x33\x59\x7b\xe6\x9c\x4e\x70\x4e\xb4\xe3\xa8\xfa\xe2\x9c\xcd\xab\xfa\xaf\xc7\xee\xca\x37\x85\xbf\x88\xc0\x98\x2c\x7a\x20\x08\x46\xf5\xc4\x08\x18\x26\xca\xcd\xe3\xee\xeb\x39\x42\x08\xe7\xcd\x48\x50\xb6\x42\xf1\xd4\xe8\x4f\x3a\xde\xd3\xdf\x14\x0b\xe3\xdf\x17\x5f\xc9\xf9\x97\x3a\x70\x72\x9a\x98\xfe\x62\xb5\x5c\xb0\x82\x82\x7d\x8a\x57\xf8\x93\xc2\x98\xfd\x7b\xa3\x3a\x6d\xf2\xe7\x37\x9d\x52\xe2\xda\x9f\x38\x29\x13\xed\xef\xa3\xb6\x7f\xbc\x62\xd5\x81\x8e\x26\x91\xc2\x68\xc8\x05\xb9\x14\x74\x8a\xf4\xb6\x09\x44\xa2\x5a\x9c\xe0\x47\xa7\x50\x1e\x8b\xf7\x0b\x5a\x23\x54\xa3\xde\x05\x8f\xad\x56\x8f\x92\x97\xa0\x31\x87\x3b\x96\xd1\xec\x49\xd2\xd5\x5c\xfa\x35\xfe\x89\x23\xfc\x13\xb7\x81\x0d\x40\xc4\x1e\xfd\x13\xa4\x02\xcf\x6d\xba\xe7\x6a\x6f\x00\x75\xfe\x85\x93\x1f\xe3\xae\x78\x69\xf7\x49\x5e\x4e\x34\x52\xaa\x8d\x56\x8c\xf0\xbf\x38\x39\x8b\x57\x6c\x9a\x46\xe7\x6f\x67\xbb\x0b\x7a\x34\x8b\x94\x18\x2d\xfd\xc7\x2a\xaa\x20\xf2\x74\x15\xa5\xa3\x68\xa0\x35\x77\xd1\x18\x47\x20\x36\x80\x03\x32\x4a\x47\xa3\xdd\xff\xc6\xbb\xa0\x0b\x1d\x8f\x71\x34\xcf\xaa\xa3\xbb\x2c\x8f\xd2\x59\x96\x57\x14\x47\xcb\xc5\x5d\xc6\x65\xb2\x71\xfd\x0f\x7c\x4b\x45\x96\xfa\xaa\xf4\x68\x91\x4d\x3e\x66\x37\xb4\x7a\xae\xbb\xb4\x63\x46\xa3\x7a\x7e\x93\xb3\xdb\x5b\xca\x9f\xe7\xec\xfa\xb9\xd9\xd8\x95\xeb\x73\x32\xbf\xae\xa2\xba\x46\x98\x16\xa6\x03\x47\x9f\x8b\x2f\x47\xdf\x9e\x5e\x74\x77\xc0\xcc\x66\x84\xa3\x4b\xfa\x59\xbc\x86\xc8\x20\x38\xfa\xa7\x21\xbf\x11\x8e\x06\xf2\x68\xaa\xda\x3d\xfc\x4f\x3c\xfa\xf6\xbf\xf0\x37\x63\x3c\x1a\x7d\x3b\xc4\xa3\x6f\xff\x13\xef\x8e\xf1\xc8\x0b\x37\x32\x56\xfd\xc7\xe1\x67\x2f\x02\xc9\xd8\x0c\x10\x8c\xfc\x68\x14\xb9\xd1\x1c\xad\x3a\x6b\x1b\x42\x6d\xdf\xe0\x21\x1e\x45\x6e\x29\x46\xe3\x8e\x32\x70\x44\xf3\x8a\x76\x15\xf5\xdf\x58\x16\x21\x5b\x33\xda\xfd\x2f\xfc\x1f\x63\xf9\x23\xfa\xa7\xf6\xc5\xf0\xfb\xee\x55\xa6\x0e\x80\x48\xa6\xfd\xf6\x1b\xfc\xad\xa9\x50\x4e\x2e\x98\x57\x53\x41\xf5\x84\xe2\xee\xea\xbe\xf9\x37\x55\x37\x1e\xb7\x5e\xee\xe2\x6f\xcc\xfb\x8d\x0b\x2f\x62\xb3\x08\xfb\xc7\x49\x94\x53\x11\xfd\x4d\xcb\x11\x36\x9e\x5d\x8a\xc2\x2e\xc5\xbb\xfd\xed\x83\xe1\xcf\x53\xda\xb9\x14\xdb\x3b\x28\x58\x38\xe6\xf7\x50\xcf\xb4\xb7\x72\x1e\xe9\xa9\xb1\xa2\xf5\xbb\xfb\x37\x75\x54\x95\x6c\x7a\x6a\xd0\x17\x8b\x07\x70\x69\xaf\x3c\x46\xda\xea\x53\x0d\x53\x19\x40\xaa\xb5\x42\xc1\xf5\x3c\xdb\x43\x4e\x67\x20\xc5\x9b\xf3\x78\xa5\x01\x01\xd2\xd5\x6d\xc6\x0a\xe3\xb3\x88\xb5\x93\xfa\x0a\x0a\x4b\xb9\x24\xa8\xa5\x71\x32\xd4\x1e\xd6\xca\xf0\x57\x33\x12\x3b\xa2\x5c\xec\xe4\xf4\x8e\xe6\x91\xef\x66\xad\x73\x28\x27\x5b\xa3\x16\xb4\x6c\xb9\xec\x34\xb4\x47\xe3\x78\x70\x3a\xd3\xc1\x35\xc3\x02\xc3\x0a\xbb\x1d\xba\x3b\x6a\xaa\x6b\x7d\x57\xd0\xa7\x8f\xe7\x47\x1b\xc8\xb1\x79\xd1\xb8\x54\x70\x27\x5b\xde\x03\x20\x00\xc3\x48\x35\x65\xe8\x14\x8c\x5e\x82\x24\x10\x73\x44\x17\xc7\x69\xb9\xa0\x05\xf0\x8e\xfa\xfc\x77\xb9\x85\xc6\x34\xe8\xbc\xce\xf8\xd3\x9c\x0a\x6c\x66\x38\xe5\xfe\xe0\x81\x2d\x55\xfb\xae\x92\x91\x22\x2e\x43\xfb\xb7\x02\x94\xd9\xa5\xbc\xbb\x38\x31\xb3\x89\x82\x6e\x64\x85\x3e\x58\x8b\x09\x8a\xde\x72\x8e\xa1\x7b\x16\x9d\x14\x9c\x43\x2e\x68\x4e\x35\x66\x47\x4a\x71\x33\x90\xbf\x7f\x81\xb7\xcb\x14\xf0\xb5\x02\xfd\x86\xb9\xe1\x07\x82\xdf\xba\xa2\xe2\xd4\x59\x1c\x58\x7c\x0e\x4e\x67\x3e\x9b\x63\x65\x91\xf2\xa6\xe5\x8a\x24\xbc\x90\xe7\x30\x8d\xa3\xf6\x5e\x94\x1b\xf7\x39\x88\x8a\x22\x3c\x8a\xe8\xe7\x45\xc9\x45\x25\x29\x69\x77\x4a\xb9\x65\x21\x82\xc7\x18\x37\x50\x00\xa2\x65\x45\xfb\x72\x84\x26\x22\xea\x75\x47\x13\xa6\x38\xba\xba\xa2\xd5\x3b\xa0\x12\x11\x5e\x29\xcf\x73\xd0\xa8\x6c\xcc\x60\x60\x10\xa3\x66\x1c\xe2\xc0\x7b\xca\x09\x3d\x12\x93\xa1\x7e\xa8\xd4\x77\x10\x84\xe4\x89\x25\xca\xc4\x0f\x96\x76\xfb\x35\xa5\xdd\x3e\x56\xda\x82\xd2\x8f\x5f\xd5\x3e\x93\xe1\xc1\x52\x2b\x2a\xbe\xaa\x50\x9d\xfe\xc1\x32\xad\x46\xe4\xc9\xa5\xda\x1c\x10\xf9\xf9\xa1\x25\x69\x17\xda\x23\xab\x72\x29\x58\xee\x7d\x01\x76\x5d\x3e\x9a\x33\x46\x8b\x82\x9b\xeb\x55\x9d\x22\x7f\x6d\xcd\x52\x33\x48\x64\x8a\xa9\x9d\x05\x32\xc7\xd4\x2e\x42\x42\x61\xbe\x09\x85\x45\x44\xa8\x1b\x00\x1f\xc0\x96\xe1\xd2\x40\x01\x2c\x0c\x0e\x40\xcf\x2b\x84\xf5\x2c\x14\xb5\x48\xd4\x21\x8f\xe2\x68\x59\xa8\xa6\x4e\x23\xd4\xf3\x0b\xce\x7a\x0a\xc6\x62\x57\x1f\xa1\x79\x27\x9c\xd0\x55\xae\xc1\x4c\xab\x0f\x94\x83\x68\x75\xd7\x8a\x4e\xe7\x94\x33\x41\xa7\x47\xc5\xd4\xa9\xff\x67\x79\x26\x64\xfa\xa9\x49\x6e\x84\x9c\x1a\x0d\xc6\xb7\x72\xb9\x9a\xda\xe0\xe7\x55\xf8\xe1\x96\x7d\x66\x45\xe3\x5d\x9e\x7d\xb9\x3f\x98\x67\xad\xf7\x30\xd2\x8d\x77\x22\xbb\x69\xbc\xe1\x5a\x24\xd9\x78\xcd\xaa\xe3\x82\x09\x6b\xaa\xa0\x8c\x66\x0d\x8f\x00\x83\xec\xe1\x01\x25\xde\x00\x39\x6c\x20\xef\xa5\x9b\x16\xdc\x18\x3c\x5d\x0a\xa8\xba\xd5\x48\x84\x00\x38\x7a\x78\x02\x23\x69\xab\xe2\x59\xc6\x5e\xe3\x8c\x76\xce\xa0\xeb\x18\x93\x5b\xb1\x5e\x0b\xe7\x8f\x3f\xf3\x60\x1a\xc0\x32\xed\x02\x32\x1f\x5a\x4d\x9b\x3e\x2c\x82\xd7\x74\x2a\xdf\xb2\xaa\x23\xad\x95\xd7\x15\x09\xab\xdc\x17\x14\xb4\xac\x99\x95\x4e\x37\xe4\x94\x57\xd7\x20\x63\x45\x85\x9c\x07\x96\xe5\xec\x8b\xaa\x30\x9c\x9e\x61\xbd\x2c\x1e\x4b\xb3\x5b\xab\x5f\x5e\x82\x40\xc2\xad\xbe\xd6\xac\xb2\x18\x1a\x72\xaf\x35\xd5\x5a\x6a\xce\x89\x1f\x6f\x4d\x7b\x97\xe8\xb5\x41\x08\xad\xaf\x24\xef\xc0\x95\xf6\xfc\xf4\x53\xf1\x2e\x5b\x34\x8a\x19\x41\xb8\x08\xfd\xcb\xec\x59\xcd\xad\x00\xce\x17\x6a\x96\x71\xd1\xb2\x2d\x0c\xcb\x90\x2c\xc9\x05\x15\xa8\xbe\x9a\xb1\x62\x7a\x6c\xf6\x1e\x54\x2d\x8f\x55\xa7\x7d\x92\x39\x34\xb4\x07\xe1\x56\x5b\xc9\x9b\xee\x18\x85\xd3\x05\x75\x80\x7e\x18\x94\x89\x3e\xab\x39\xe1\x5a\x91\x58\xd7\x57\xf3\xac\x3a\x2e\x6c\xed\x17\xc6\xe2\xf1\xeb\x6b\x1f\x0c\xc0\xd2\x24\x16\xc8\xc5\xe3\xf1\x6a\x32\x18\x40\xb5\xd1\xe1\x34\x22\xe1\xe9\x5d\x1f\xba\xb6\x6c\x11\x22\xf6\xc4\x88\x8e\x0d\x2b\x5b\x51\xf1\xc1\xe6\xb7\x26\xa1\x1d\xb3\x17\xe9\xf2\x22\x24\xc7\x5a\x56\xaf\xa8\x45\x47\xc5\x96\x90\x3c\x5e\xf7\xb9\x5f\xca\xc3\xd5\xdb\x52\x4d\x0b\x3e\x71\x06\x01\x30\xde\x5a\xaa\xd7\xd1\x96\xae\x92\x1c\x99\xd4\xc0\x0f\x74\xdc\x72\x00\xe2\x60\x1c\x2f\x3f\x91\xd1\x18\x61\x5e\x73\x9a\x4d\x1f\xad\xcd\x95\xbc\x01\x81\x6b\x44\xc7\x35\x18\x36\x7d\x66\x85\x3b\x40\xda\xeb\x3c\xd2\xf4\x3d\x42\x49\x36\x95\x37\x8c\x7a\x9e\x55\x36\x57\xb0\x69\xdb\xeb\xcd\x66\x96\xf7\x80\x59\xc9\x8f\xb2\xc9\x1c\xf2\x56\x01\xbc\x0d\xde\xb8\x14\xcd\xe9\x12\x00\x4d\xc6\x1e\xee\x9b\xd8\xd3\x9b\x2d\x15\xb8\x48\x74\x15\x31\x87\x58\x41\x72\xc9\x72\x24\xf7\x25\x34\x9d\x4b\xd6\x84\x23\xe0\x51\xfc\x7d\x22\x67\x4f\x52\x41\x73\xba\xa9\xe9\x8f\x5b\xa7\x9e\xaf\xfc\xb7\x27\xa1\xf6\x8a\x44\xc8\xba\x5e\xd5\x92\x69\x08\x8a\x0b\x67\xa6\x45\x12\x22\xbf\xc0\xc8\x83\x52\x91\x47\x44\x66\x41\xeb\xb4\x51\x46\xa3\x64\x28\xb3\xa3\x07\x99\x1d\xef\x46\x86\x27\x0d\xba\xd7\xa0\xaf\x1c\xf9\x58\xf2\x60\x76\xf4\x0b\x37\xfa\x05\xc2\x7c\x8b\x90\x6c\x30\xa0\x00\x59\xd3\x9a\x86\x6c\x3a\xbd\x2c\x0d\x1a\x7b\xd5\x8a\x7d\xbf\x58\x56\x73\x8b\xd5\xae\x3f\xee\xed\xa6\x43\xcc\x90\x1e\x99\xd7\xbc\xbc\x6d\xe4\xdf\x9c\xf7\x1b\x54\x77\x95\x88\x19\xd9\xda\x35\x56\xfd\x76\x6c\x61\xb7\xd9\x92\xe5\x05\x74\x11\x97\xd8\xb9\xe5\x80\x67\x51\x36\x18\x64\xdf\xb5\xb9\xad\xc1\x20\x2e\x8d\xa6\x3e\xc3\xbb\xa8\x83\x21\xdb\xd9\xc1\x19\xd9\xd9\x45\x18\x82\x96\x65\xa8\x54\x96\x06\x2b\xc0\x11\x77\x41\xc2\x04\xbe\xa5\x62\x5e\x4e\x53\x8e\x3f\xb2\x62\x9a\x16\xb8\xba\x2f\x26\x29\xab\x83\x30\x2e\xe5\x28\x1b\xf7\xbe\x51\x2e\xa2\xdf\x80\x9b\x89\x4c\xbc\x17\xb4\x21\x8d\xd5\x5b\x52\xe0\x2a\x91\x85\x10\x86\xea\xba\xa3\xa7\xe1\xfe\x6e\xb2\x8b\xb2\x74\xad\x16\x56\xe7\xad\x8d\x37\x21\xcf\xe5\xc1\x00\x86\xa5\xdd\xdd\xf5\xba\xda\xde\x56\x7d\xed\x1c\xae\x0e\x8e\x75\xd8\x62\xd1\x24\x29\x6c\xbc\xab\x6d\xfb\xfc\x1e\x98\x18\x0b\xad\xd6\x7f\x57\xa1\x95\x31\x60\x50\xad\xb6\x5c\x5d\x08\x74\x24\x08\x4d\xba\x8a\x6e\x10\xd6\x00\x31\x30\x6c\x19\x6a\xb6\x5e\xb8\x19\xe3\xcd\xc4\xbd\x76\xff\x15\xb4\x8d\x99\xc1\x61\xc7\x12\xea\x5a\x56\x64\xd8\xb4\x55\x15\x81\xa9\xaa\xb1\x73\x29\xc6\x2f\x60\x32\x16\x00\x00\x02\x8b\x0e\xb3\x44\x2d\x3a\xe5\xbc\x32\x2f\xa7\x08\x5a\xb0\x2c\x20\xe2\x67\xcc\xba\xea\xdb\xde\x46\x75\x5d\x6f\xb8\x59\x54\x01\x00\x9c\x37\x69\xb7\x99\x98\xcc\x59\x71\xe3\xed\x5c\x63\x6c\xa4\x87\xe6\xd1\xb1\xe7\x28\xec\x26\xef\xe8\x26\x1f\x15\xe3\x9e\xee\xdd\x16\x44\x82\x06\xce\x09\xb6\xc1\x60\xb0\x6b\x7f\xaf\xd7\x71\xc3\xf5\x16\x56\x9a\xb6\xfd\x69\x8e\x0a\x58\x3d\xa9\x8c\x0e\x1e\x45\xd4\xe5\x75\x45\xf9\x1d\xe5\x10\x60\xc2\x19\x33\x89\x27\xf6\x47\xa0\xc7\xcc\x93\xb4\x41\x9b\xc2\x21\x73\x5d\x28\x74\x17\x60\x3a\x0b\xd5\x59\xcf\x15\x72\x02\xd6\xbc\x00\x11\xef\xee\x2d\x83\x41\x4c\xa1\x8f\x54\xf5\xb1\x40\xde\x5d\xa4\xd6\x77\xdc\x5c\xfb\xe3\x75\x62\xdb\xe1\x89\x0f\x2e\xe0\xbc\x17\xa6\xea\x20\x9d\xb8\x93\xd1\x7e\x9a\xbb\x43\x71\x62\x1c\x9f\xbb\xd9\x14\x2f\xee\xe3\x32\xa6\xc8\x3f\xad\xfc\x0c\xb1\x29\x88\x23\x87\x1d\xa9\xe8\xd0\x96\x62\xa1\xf4\x13\xe1\x08\x8b\x9e\x2c\x8c\xb7\x51\xfd\x66\x1d\xd8\x5c\x73\xdd\x36\x5d\xb1\x00\x9c\x6b\x7b\xbb\x70\xed\x74\xf6\xac\xb9\xe7\xc6\x3d\x05\xcb\x66\xcc\x6b\x37\x2c\x0b\x27\xaa\x30\x7d\x63\x84\x5a\x6c\xaf\x17\xec\x25\x19\xbe\x60\x3b\x3b\x16\xa3\x63\xc4\x80\x1d\x2f\xd5\x7c\xaa\x75\x59\xea\x95\xa8\xf8\xc3\x52\x2f\x47\x1f\x57\xd4\xf8\xd1\xef\xec\xd6\x5a\x5e\x31\x7b\x50\x38\x93\x3f\x5d\x60\xf8\x55\x32\x9b\x56\x42\x4f\x0a\xeb\xbe\xf3\x65\x91\x97\xe5\xa2\x4b\xc8\xe3\xbd\xd2\xd6\x49\x25\x77\x19\x17\x65\x7e\x3f\x63\xb9\x5f\x35\xe5\x1c\x52\xa8\xa7\x3b\x45\x80\xfc\x96\x2d\x38\x9d\x64\x82\x4e\x77\x66\x34\x13\x4b\x4e\xbb\x7b\x0a\x7a\x81\x2e\x11\x93\x8b\xe2\x0b\xd1\x13\xa7\x78\xfe\xd7\x85\x4e\x46\x4b\x4c\xce\x28\xa6\x49\xb6\x14\xe5\x81\x79\x63\xab\x4f\x92\xc4\x71\xdc\x8c\x02\xe8\xc8\x25\xc0\x6b\xbe\xa3\xa8\xc6\x14\x30\xa3\x9a\x99\x7c\x1f\xb7\x57\x65\x99\xd3\xac\x88\x33\xaa\xb1\x11\x30\xb8\xec\x82\xc7\xe4\xd4\xdc\xbd\xfc\xac\xd6\xa4\x1a\x84\x54\x46\x18\x86\xcc\x8e\xb0\xee\xc4\xd6\x78\x4f\x6e\x2a\xd9\xfe\x9c\x65\x55\x17\xd4\x91\x6e\xf5\x47\x68\xf5\x81\x6a\xb5\x9d\x0f\x33\x52\x2d\x17\xe9\x4d\xe3\x29\xf0\x6a\x52\x16\x33\x76\xb3\xb4\x32\x4a\x5f\x62\xb9\x8b\x2b\x75\x4f\x3f\x52\x00\x11\x2a\x5c\x3a\x0e\x40\xbb\xaf\xcd\x27\x54\xd7\xd0\x1a\x79\x03\x3a\xcb\xc4\x9c\x5c\x51\x35\x3a\xe4\x5a\xff\xf8\x99\x89\xb9\x0e\x02\xbb\x01\xb2\xf1\x9a\x5a\x3c\x8c\x36\xce\x2f\xb7\xfa\x0a\x5b\x0d\x2f\x17\xe4\x9e\x2a\x91\x23\x39\x92\x3f\x04\xbf\xbf\xa0\xed\xe2\x75\xce\x23\x13\x8e\x74\x6b\x08\x6d\x55\xa8\x08\xfb\x82\x3c\xc3\x34\xe1\x74\x91\x67\x13\x4a\x9a\xab\x95\x7c\x40\x2b\x88\x8d\x9c\xb0\x4a\xc5\x48\xa6\x68\xef\x0f\x4b\x83\x52\x9b\x53\xc7\x52\xaa\x5d\x59\xc7\xc5\x49\x26\xd8\x1d\x85\x6c\xe4\x0f\x0c\x41\x93\xe0\xe1\x54\x1f\x70\x9b\x5a\xfa\xb3\x2e\x7f\x86\xb7\x76\x75\x89\x92\x43\xff\xaa\xbc\x0b\xd3\x4d\xc0\x56\x02\x4f\x9e\x42\xfc\xcc\xf2\x5c\x39\xa5\x90\x57\x8d\x4f\x87\x6c\xaa\xbf\xbc\xc1\x34\xa1\xd9\x64\x7e\xc6\xcb\xcf\xf7\x50\xa7\x97\xad\x2d\x30\x56\x14\xf8\xd0\x22\x70\x38\xb9\xca\x60\xc0\x54\x15\x2e\xbf\xcd\x56\xb7\x2a\x71\x0d\xf8\x53\x75\xd8\xec\x41\x15\xd9\xd4\xb2\x09\x64\x86\xa9\xbc\x55\x59\xb6\xe1\x2b\xb6\xaa\x46\x02\x75\x70\xcd\x46\x9c\xd4\x66\xbf\x38\x6a\x09\x4b\xa0\x91\x06\x10\x11\x56\x5e\xd1\x24\x4b\x86\x51\x56\xa6\xca\x85\xb5\x39\x54\x6e\xc3\xd4\x86\xd9\xaa\x50\x2c\x70\x81\xb0\x70\xab\xc2\xf6\x6f\x01\x5b\xa1\x50\x71\xb9\xc8\x2d\x50\xb4\x93\xb2\xa0\x5d\x94\x44\x03\xab\x28\xb2\x77\x74\xbb\x10\xf7\xe4\x84\xc2\xc3\xab\x3c\x2b\x3e\x92\x63\xea\x4e\xdc\x99\x1c\x1f\xe7\x42\x37\x44\x2b\xb6\x5e\x77\x04\x53\x2e\xd6\xeb\x98\x91\x02\x2b\x64\x04\x30\x05\x53\xaa\x1d\xe5\xaf\x13\xde\x4f\x55\x81\x2a\x3e\x25\xdc\xb6\xfd\xf3\x3d\x88\x18\x9c\xf5\x5a\xf8\x25\xc5\x5e\x5c\x92\x02\x67\x84\xa1\x54\xfe\x5a\xe6\x39\xce\x48\xd1\xac\xb2\xeb\x5e\xab\xb5\x9c\xb6\xba\x5b\xd7\x39\x8f\x25\x22\x16\x7b\x23\x73\x37\x76\xf0\x34\x0f\x17\x47\x5a\xf6\x14\x52\x18\xf8\x78\x67\x9d\xcb\xc1\x08\xc9\x82\xc2\x95\xe5\xb1\x59\x15\x6e\x5d\x19\x96\xa6\xb2\xdf\x76\xbe\x7d\x51\x49\x96\xa6\xda\x21\xdf\xaa\x26\xe5\x84\x8d\xaa\x31\x5e\xca\x7f\xdb\xbb\x63\x3c\x81\x1f\xdf\x00\x97\xb3\x44\xab\xc9\x60\xa0\xc6\x30\xc7\x4b\x88\xb6\x1d\xe7\xc4\xf9\x12\xab\x01\x5c\xf6\x8c\xe2\x76\x8b\x90\xe9\x60\xa0\xcd\x24\xe0\x69\xbd\x8e\x97\x24\x1f\x2d\xc7\x08\x2f\xb5\xe1\x52\x2e\x77\x93\x91\x53\x0e\x6b\xb9\x4c\xce\x38\xad\xe4\x32\x6b\xaf\xad\xad\x63\x50\xbc\x62\x9a\x80\x87\xac\x39\x70\xb4\x2f\x1c\x79\x2d\x8f\x6b\xf8\xad\xbf\x30\x5a\x91\xf7\x10\x0b\x64\xda\x4c\xfb\x05\xd3\xa4\x28\x05\x9b\xdd\x87\x5f\xc8\x5b\x38\xf8\xfc\xf3\x8c\xcc\xd5\xf2\xd5\xa6\xb5\x4e\x6a\x43\x7e\x91\x85\x00\x21\x96\x2f\x0f\xe9\xa4\xe4\x92\x07\x22\xff\x82\x32\x4c\xb2\xd7\x25\x77\x9f\x2a\xda\xfc\x66\xab\xc9\x54\x35\xa0\xb2\x67\x5e\x69\xb9\x3e\x88\x5a\x1f\x96\xfa\xfc\xf3\x7a\xdb\x85\x45\xb7\xaa\x71\x41\x0c\x88\x59\x85\x19\xd9\x05\x29\x84\x7d\x63\xad\xe5\xc3\xc3\x08\xe2\xea\x30\x32\xf4\x33\x8f\x76\xc7\xda\x17\x82\x7d\x67\xbd\x21\xd8\xf6\x36\xe2\xa3\x62\xc4\xc6\x63\x75\xd0\xca\x9f\x1e\xea\xb0\x6a\xfd\xc6\x46\x7a\x98\xf5\xeb\xb5\xd9\x8f\x2e\x8c\xba\xe3\xe3\xf5\x8f\xf7\x71\xe8\x27\x82\x0b\x73\xf9\xf9\x48\xef\xab\x58\x20\xcc\x24\x9b\xde\x68\x1f\x91\x8d\xc2\x70\x4e\x73\x0c\x21\xe7\x6b\x4d\xea\xe8\xe7\x45\x66\xd7\x87\x6c\xde\x94\x2a\xea\x6e\x8f\xc3\x2b\xac\x22\x56\xdf\x65\x82\xda\x97\x9f\x2d\x95\xb4\xaf\x3e\x61\x9a\xcc\xf2\x65\x35\xdf\xaf\xee\x8b\x89\x79\xed\xf7\x17\x48\x9c\x75\x89\xac\x42\xd7\x8a\x2a\x70\xad\x90\x5b\xee\xcc\x8b\x5c\xd0\x3b\x23\x1c\xdf\xb7\xa4\x79\xea\xb4\x68\x50\x8f\x02\xf5\xb8\x9f\x32\x93\x29\xd9\x2c\xde\x32\x95\x3a\xdf\x03\x88\x89\x8a\x79\x12\xf8\x1b\x18\x62\x60\xc3\xd4\xde\xc6\x05\xce\xf0\xa8\xc0\x3c\x59\x64\x62\x3e\xd6\xbe\xf4\x98\x21\xeb\x41\x02\x05\x91\x1f\x62\x93\x06\x43\x5d\x22\xbb\x91\x4d\x02\x57\x46\x43\x44\xfd\x76\xa2\x46\xd5\x1d\xc3\xc2\x75\x9c\x93\x1e\x95\x44\xb2\xf4\x6d\x3c\x94\x87\x43\x15\xe1\x1c\xa5\x79\x0c\x8c\x22\x50\x07\x90\x4c\xfb\xcb\x2c\x49\x12\xc7\x6c\x67\xea\xce\x8b\xa9\xe2\xd4\x9a\x3c\x8f\x77\x6a\x82\xdd\x7d\x66\xce\xce\x5e\x07\x7e\x69\xb6\x17\x0b\x92\xc9\x53\x15\x97\x64\x8b\x19\x1b\xd7\xd7\xfb\xef\xdf\x5e\x5e\xed\x5f\xfc\x7a\x72\x70\x75\xfa\xea\xe2\xe8\xfc\xc3\xd1\xf9\x05\x4a\x65\xda\x64\x26\x8f\xb1\x4c\x32\xd7\xb4\x98\xd2\x42\xfc\x48\xef\x2b\x5c\x92\x0c\xc4\x7d\xc8\x23\xd3\xa3\x31\xce\xc9\xf0\x45\xee\x56\xf2\xf6\x76\x8e\xa6\x34\x2e\x46\xf9\x18\x53\xf2\xd2\xe2\x8d\xa1\xc6\x91\x6e\x97\x9e\x3c\xd2\x57\x72\x36\xaa\xb4\x52\x32\xc9\xd2\x2c\x7b\x20\xbf\x20\xf1\x27\x99\x90\x84\xa7\x90\x7b\xa8\x3d\x68\x6a\xb5\xfe\x22\xf7\x55\x41\xb8\x0b\xd4\x32\x1c\x63\x46\x62\xbe\x5e\x8b\xd1\xee\x18\xfb\x11\x50\xed\xfa\x9e\x7b\xc6\x41\xe0\x86\xa3\x45\x92\x13\x03\x1d\x6e\x69\x84\x81\xb2\xf9\xed\xd9\x8a\xd6\xe9\xb3\x55\xb1\x5e\x8b\xfa\x37\x1c\x22\xcf\x7b\xb0\x4f\x26\xf4\x59\x8d\x7a\x26\x28\xed\x19\x8d\x57\x37\x54\x40\xbc\x38\xad\x4e\x9b\xeb\x2b\x04\x55\x66\x77\xe0\xf4\x6d\xab\xdc\x2b\x15\x5c\x34\x34\x5f\x8c\xbe\x19\xa3\xb4\xac\x55\x84\x70\x9f\x28\xff\x6e\x5f\x29\x22\xd3\x74\x82\x86\x21\x67\x95\xfa\x08\xee\xba\x9e\x4f\x86\xca\x88\x62\x8a\xcf\x6d\xc5\x55\x68\xfb\x2d\x57\x6b\xc6\x3f\xaa\xfc\xfb\xd5\x21\x93\x95\x1e\xc2\x85\x23\x9b\x7c\xa4\x53\x72\x2b\x14\x35\xb2\xc8\x5a\x41\x0b\x5e\xd1\x64\x59\x2c\x78\x39\xa1\x55\x45\x5d\x9a\x8a\x6c\x0d\xf1\x07\x6a\xd6\x87\xac\x05\xac\x13\x2e\x8d\xd5\xf1\xaf\x92\xc6\xcd\x58\xb1\xa1\xd8\xf7\x74\xbd\xfe\xde\x83\xe5\x7c\x46\x47\x74\x5c\xf7\x1a\x59\x2a\xf2\x87\x2c\x46\x57\xef\x4a\xfa\xd9\x7b\xbb\x9f\xe7\x5e\xfa\xef\xa9\xa5\x9a\xdd\x15\x5b\x5f\x5a\x80\x90\x92\x69\x80\x51\xd6\x3e\xb2\xcf\xe8\x48\x8c\x65\xbf\xb4\xbc\xf5\x03\xf5\x90\x37\x40\x82\xdf\x67\x45\x9f\x25\xda\x0f\x58\xaf\xaa\xc1\x80\x02\x43\x14\xbe\x1d\x89\xb1\x3c\xdf\xda\x6f\x35\x57\xa6\xef\xed\xb6\x99\x17\x34\xe3\x93\xf9\xa1\x0a\x77\xee\x5d\xe3\x2d\x59\x79\x4f\xf5\x49\xf7\x68\x16\x18\x60\x62\xee\xfc\x72\x7a\x36\xdb\x63\x69\xd7\x99\xc9\x9c\x3e\xd1\xea\xc7\x00\xe8\x41\x9e\x07\xed\x89\x6e\xb4\x5a\xf7\xc9\x05\x9b\x0c\x0f\x96\xaa\xe1\xb1\x9f\x5c\xa8\x4e\x0f\x86\xdf\xc9\xc9\xfe\xbb\xa3\x8b\xb3\xfd\x83\xa3\x8b\xab\x57\xbf\x5e\x1d\x1f\x12\xff\x15\xa1\xc9\xc1\xfb\x8b\xcb\xd3\x77\x72\xe3\x5c\xbd\x3e\x3d\x27\x34\x51\xee\x04\xc7\x27\x3f\x1c\x1d\x00\x00\xc1\xeb\xf7\x27\x07\x2a\xf2\xaf\x96\x75\xbc\x53\xe2\x37\x9a\x28\x52\x47\x93\x90\x26\x13\x9a\xec\xb7\xde\xbc\x65\xd7\x3c\xe3\x92\x15\xa0\x49\xee\xfd\x3e\x3b\x3f\x3d\x3b\x3a\xbf\xfc\xf5\xea\xf0\xf8\xf0\xea\xe0\xcd\xfe\xc9\xf7\x47\xea\xed\x2f\xbf\x5e\x1d\x9c\x9e\x5c\x1e\x9d\x5c\xca\x36\x6a\x49\x8f\x25\x21\x34\xb9\xba\xc9\xcb\xeb\x2c\x77\x42\x20\x6d\x8d\x64\xaf\x0a\x77\xbe\x2b\xc3\xb6\x95\x07\xab\xe0\x2a\x8f\x9d\x2b\xf8\xda\xe8\x3a\x7b\xad\xee\x5d\x03\x75\xbc\xb7\x09\x6c\x8d\x57\xee\x72\x42\x6e\xec\x7d\x44\x5e\x31\xe5\x9d\x2c\x53\x57\xa8\x5d\x5c\x22\x6d\xde\xd4\xbe\xbc\x1a\xb0\xb4\xc1\x20\xae\x92\xb6\x39\xc8\x7a\xad\x30\x03\x7d\x4b\x12\xb4\x5e\x7f\x86\xd2\x4b\xef\x9a\xf4\x69\x53\x4b\xf0\xdf\x57\xeb\xa5\xae\x15\x2f\x4c\xe7\xbc\x06\x1c\xf9\xcc\xf2\x96\x52\xa0\x5e\xa7\xf7\xee\x70\x9a\x67\x15\x14\x1d\x73\x2d\x30\x37\xaa\x65\x85\xd5\xb0\x39\x2c\xb2\xbf\xe3\xaf\x93\x8a\x7d\xa1\x2f\x87\x83\xc1\x75\xa2\xc8\x99\xec\xce\xbd\x7d\x7b\xef\xde\xd6\x92\x9a\x6d\x0d\x81\x39\x52\x52\x09\xd7\xd8\xcf\x6a\xb4\xac\x2e\x94\x91\x23\x80\x9d\x94\xec\x22\xd3\x7a\x75\xc4\xb4\xc0\x5d\xd9\xb4\x6d\x6f\x5b\x9d\xd6\xa8\x1c\x13\x6e\x90\xe4\xd3\x08\xe1\x8c\xfc\x10\x53\x5c\xb6\x99\x35\xda\x62\xd6\x24\x9b\xc1\x60\x00\x38\x5e\x41\xc1\xe9\x2e\x96\xbc\x45\x5a\x62\x05\x46\xed\x33\x72\x69\x9b\x91\xcb\x10\xae\x96\x15\x70\x3d\x53\x0d\x1c\xd5\xde\x7d\xf7\xb0\xde\x4e\xc9\xd6\x2e\xbe\x08\x10\x97\x2e\x95\xf0\x05\x3a\x2e\x59\xd9\xe1\x16\x21\xa7\x46\xb4\x02\xb3\xc6\xe5\xac\x61\x63\x89\xb3\x09\xef\x92\x19\x3b\x9d\x52\x8d\xce\xce\x0e\x86\x1b\xb8\x7a\x82\x23\x41\x4f\x84\x40\x58\xdd\xa4\xe5\x14\x0d\x06\x85\x9b\x20\xd9\xf2\xbc\xa2\xfd\x0b\x75\xc0\x8e\xa0\x65\x63\x6f\x96\xde\xc9\x19\xbf\xd7\x0b\x47\xce\xad\x6a\x51\x60\x05\x61\x18\x66\xba\x91\x61\xee\x9c\x83\x27\x33\xcc\x08\x5f\xdb\x06\x5c\xff\xbf\xd2\x00\x20\x5f\x67\x7e\x10\xfb\xfd\x58\x6e\x04\x7b\x33\xa1\x98\x9b\x3b\x4c\x4b\x3c\xc6\x91\x64\x37\x5c\x4a\x66\xee\x30\x34\xb1\xab\x68\x30\xe8\xb8\xd1\xa8\x90\x85\xb4\x71\xa3\x91\xb7\x18\x2f\xa7\xe4\x8f\x6e\x63\x8e\x19\x1e\x71\xc9\xac\xf8\x97\x9a\xc2\x5d\x6a\xa8\x1e\x22\x93\xa6\x3d\x44\xbc\x35\x44\x1c\x42\xa0\x3f\x32\x44\x54\x85\xb9\x0d\x5a\xb4\xab\xee\x2f\x2e\x72\x52\x43\x86\xed\x2d\xeb\x86\xd5\xd9\x5d\x2c\xe4\xe6\x84\xc5\xeb\x0a\xe4\x1a\xba\xec\xa3\xe2\xa7\xdc\x71\x7c\x61\x6c\x5a\xc3\xe3\x14\x0c\x5b\x1b\x27\xec\x47\xd8\x8e\xe7\xaa\x04\x6b\x0b\x7b\x71\xf4\xf6\xb5\x4c\x12\x21\x37\xb5\xbf\xdb\xfd\x89\x0b\xd8\xa1\x1d\xb7\x25\x3a\xfa\x38\x36\xf7\x79\xf9\x1b\xa2\xb9\xf5\xec\x15\xd6\x67\x98\x05\x76\x60\xb4\xcc\x8d\xc9\xa1\x36\x01\x92\x89\x4d\x34\x4c\x93\x03\xe1\xae\xd7\xe7\x6a\x19\x9e\x6c\x1c\x84\x8e\x53\x1d\x46\xa2\xeb\xb4\x3f\x81\xc6\x1e\xfb\x4b\xfa\x6d\x43\xa8\xe8\x84\x7a\x45\x87\x50\xaf\x30\x07\x58\x09\xd6\x27\xcd\xa3\x6a\xbd\x2e\x3b\x0e\x35\x79\xf4\x1c\x2a\x75\xe5\xf1\x77\x64\x38\x18\xec\xc7\x08\x9f\x48\x56\x97\x0e\x06\xf1\x7f\x74\xc8\x72\xf6\xe8\xe8\x64\x2c\x97\x37\x4a\xd5\x2f\x84\xbc\x85\xf5\x3a\x46\xab\xe3\xed\x6d\x7c\x0a\x08\x10\xe6\xed\x97\x18\xad\x76\x76\x54\x05\xb1\xac\xa1\x0d\x10\xa7\x09\x5d\x39\x8b\x15\x81\x46\xe8\xd2\x40\xe0\x4a\x62\x5d\xc7\x7e\x2d\xef\x25\x0d\x7c\x1d\x23\x00\xa0\xa0\xb1\xdb\x54\x5f\xe4\x4d\xdd\xe1\xe2\x39\x51\x7c\x0b\x60\x5b\x5e\xae\x87\x98\x93\x82\xec\xec\xa2\x34\x6e\x18\xde\xed\xec\x7a\xe1\xce\x0b\x08\xd2\xb8\xb3\x8b\x10\xbe\x95\x6c\xe8\x3f\x55\xf4\x9a\x6b\x3a\x2b\x39\x8d\xf0\x48\x57\x32\x96\xd7\x7e\x5b\xf7\x1b\x8f\xf5\x00\xc9\x8c\xad\x60\x2f\xe6\x20\xf9\x62\x8d\x9a\x6d\x35\xae\x66\xd8\x76\x50\xb3\x6f\x37\xde\x94\xf3\xcb\xf9\x8e\xd9\x77\xc3\xf5\xba\x90\x7f\xd8\x4e\xb1\x45\x86\x68\x30\x90\xcb\x27\x52\x93\x16\xe1\x0c\x61\x78\x1e\x8d\xe5\xef\xb0\x27\x9a\x25\x94\x3d\x81\x26\x8f\x2d\x5c\x6d\x66\x22\x29\x2a\xe3\x82\xbd\x61\x5a\xe0\xdc\xe9\xad\xe3\x18\xde\xb3\xbd\x61\xca\xd0\x4e\x85\xf0\x92\xf0\xef\x86\x7b\xf9\x36\x4f\x79\x70\x44\x4a\x4e\xc6\x59\x5a\x46\x80\x6c\xa3\xd8\xfc\x08\x0d\x06\xb2\xab\x4b\xdd\x5e\xff\x93\x6c\xf4\xa6\x22\x24\x11\x34\x25\xa0\x7c\x67\xf7\xbb\xe5\x76\x65\xba\x9c\xf9\x25\x38\xbb\x06\x00\x45\x34\x02\xbd\x19\x78\xf3\xc7\xa3\xb1\x47\x67\x9e\x05\x8a\xd3\x96\xfe\x4c\xde\x10\x53\xa7\x80\x8b\x7d\xdb\x06\xa7\x5b\x93\xf4\xc9\x2e\x3c\x23\x29\xb7\xbf\xbe\x23\xff\x49\xff\x03\x51\x87\xe3\xc8\x71\x92\x24\x85\x36\xe6\xf2\xdf\x3b\x71\x4d\x4b\xe6\x08\x65\x68\x92\x50\x68\x14\x6b\x86\xd9\xb6\x7c\xdd\x73\x65\x6c\x33\x3c\xc4\x2a\x38\x53\xfd\xa6\xd9\x22\xd7\xf4\x9f\x7d\xab\x3b\x55\x28\x1f\x0c\x38\x38\xb7\x2b\xc1\xf5\x7a\x1d\x35\x14\x62\x11\xce\x54\xa2\xa9\xd1\x5f\x99\x34\x56\xa1\x15\x61\x79\xaf\x99\x67\x55\xa0\xff\xb3\x36\xb9\x45\xc7\x4e\x12\x92\x8d\x2e\x3a\x16\xa6\x90\x2b\xa1\x52\x1b\x02\xa6\xb8\x55\x6c\x24\x37\x1f\x40\x4f\x28\x6b\x8c\xe4\xea\x67\x9a\x7d\xbc\xa0\xc2\xcd\xee\xaf\x92\x99\x75\x7d\xa4\x49\xb7\x49\x6d\x03\xca\xba\xec\x12\xc5\x30\x64\x8d\x75\x32\x32\x7c\x91\x7d\x57\x9a\xc9\xc9\xb4\xb1\xce\x28\xc7\xcb\x31\x98\xe5\xbd\x80\x93\x43\xb9\x76\xc1\xf9\x9c\xe3\x1f\x62\x86\x97\xed\xf3\x9e\xb5\xce\x7b\x26\x69\x6b\x69\xc1\x68\x3c\xd2\xf6\x63\x97\x3d\xc9\x68\x8c\x4b\x32\x7c\x51\x3a\xdb\xa1\x72\x7b\x1b\xfd\x14\x33\x4c\xb1\x18\x95\x63\x48\xdf\xf3\x84\x48\x36\x18\xb3\x7f\x67\xf9\xa1\x49\x35\xc3\xa4\x3f\xc5\xa3\x31\x36\x29\xbc\x6c\x3f\xa9\xe1\x05\x45\x95\x6d\x13\x18\x4b\x90\x02\x4f\x49\x89\xe7\x24\xc3\x33\xab\x20\xc2\x0b\xb2\xb3\xfb\x42\x9b\x9f\xde\x92\xc5\xf6\xae\xb2\xa9\x24\x84\xc4\x0b\x12\x44\xaa\xc2\xb7\x08\x0d\x06\xf1\x82\xcc\x10\x8e\xfe\x49\xb3\xc9\x3c\x92\xa9\x72\xc9\x3e\xc3\x4a\xbf\xc5\x0b\x99\x62\xb1\x45\xc8\x0c\xad\xa0\x30\xdc\x2e\x03\x48\xe8\x1d\x99\xe8\x06\xc8\xea\xa2\x62\x79\x7b\x4d\xb9\x53\x09\xdc\xad\xd7\x5b\xe1\xbe\x9f\x20\xc9\x09\x46\x66\xd3\x47\xac\xe8\x4f\x10\xba\xe6\x34\xfb\x28\x4b\x90\xa4\xeb\x0e\xad\xb4\x38\xec\xf7\x78\x02\x14\x16\xa1\x1e\xa4\xa8\x73\x45\x38\x17\x7b\xb6\xa9\x28\xf5\x5b\x6d\xf7\xf8\x0d\x19\xbe\xb8\xf9\xee\xee\xc5\x8d\x31\xf6\xba\x26\xcf\xe2\x09\xbe\x41\xbd\xeb\xc1\xc0\x96\x7e\x8d\x73\xb8\xbc\xd5\x8d\xfa\xf0\xd6\x10\x4f\x6d\xa5\xea\x5a\x2e\xbf\xe5\xea\x03\xa8\xd8\x8c\xc2\x6f\xbe\x37\x4f\x9a\xc6\xca\xb9\x51\xf7\x19\x7b\xb0\x7b\x84\x17\x04\x46\xf3\x7b\x60\xf4\x97\x68\x30\x98\x8c\xf2\xb1\xae\xc1\x57\x0a\x2e\xd1\x84\xe4\x92\x61\x98\x74\xaa\x57\x27\xc9\xb2\xf8\x58\x94\x9f\xac\x46\x6d\x4f\x96\x93\xb6\x5e\xc7\xb9\xa2\x81\x7d\x36\x8b\x4d\x9d\x68\x42\xa0\x52\x6b\x36\x79\x45\xe6\xce\x0c\x6b\xb2\x37\x4f\x3d\xcd\xe9\x04\xe1\x4f\xe4\x2a\x38\x24\xf2\xd0\x2a\xe3\xd3\x7a\xdd\xc1\xd3\xdf\xe3\x4f\x5a\x29\x71\x44\xae\x92\x6e\xa3\xfe\x1c\xe1\xcf\x72\xb5\x2d\xaf\x2b\xc1\xe3\xc5\xf6\x2e\xc2\xa7\x8a\xab\x54\x02\x31\x80\xa4\x90\xd9\x14\x08\x47\xef\x48\x5f\xde\x4e\xf1\x67\x67\x63\x77\x6a\xe6\x67\x42\xae\x9c\xed\x4c\x8e\x6a\xad\x3d\xf1\x09\x8c\x5d\x62\x53\xd2\x22\x13\x13\x84\xe7\x4d\x46\x60\xe2\x1d\x73\x76\x47\xfe\xa2\xa5\x9e\x23\xc5\x9e\x38\x44\xa0\x6f\xc1\x55\xca\xa2\xb6\x75\x70\xd3\x9e\xba\xcc\xbd\xb3\x00\xfe\x02\x75\xb8\xd0\x4a\xc6\xa9\xad\xf2\xb6\x79\x8a\xf5\xda\x33\x8f\x71\x8d\xfc\x97\x13\xcd\xb6\x45\x78\xd4\x82\xc4\x2c\xe1\xce\x2c\x34\x36\x37\x0d\x23\x9b\x6b\x83\x6f\xc7\x80\x5b\x7c\x3e\xdf\x52\xc8\x81\xf6\x05\xfa\x91\x86\x5b\x1b\x15\x46\x77\x5e\x57\x54\x2c\x3d\xbb\xbd\xa2\x6d\x71\xaf\x3c\xd3\x51\x2d\x68\xc6\xa7\xe5\x27\x67\xd4\x92\xb4\xcd\xf6\x85\xcf\x99\x0a\x1a\xb0\x1a\x5d\x0e\x96\x20\x4a\x30\x01\xe8\x6d\x46\x4e\x3b\xe3\xca\xf1\xd0\xdf\xd3\xe8\x26\x38\xf2\xf0\x3d\x8d\x3b\x04\x07\x02\x51\xd0\x8d\x07\x25\xa3\x9d\xc8\xac\x3c\xc4\x06\xfa\xb6\xeb\x6e\xe0\xed\x47\x8e\xd2\xb2\x07\x42\xeb\xe5\x42\xe7\xcd\x8c\xc4\xcf\x97\xdf\x52\x6f\xde\x70\x60\xd9\x45\x83\xe9\x03\x29\xaf\xa0\x71\x81\x29\xc2\x15\x15\x29\x57\xbf\x6d\x0f\x2b\x7f\xb1\x40\x2a\xcd\xea\x55\x81\xe1\xaa\xd2\x22\x9a\x67\x84\x0b\x15\x90\x97\x76\x9b\xb3\x66\x4a\xab\x6b\x2f\xc5\x8f\xdc\xc0\xda\x41\x80\xfb\xac\x45\x6d\xb9\xb7\xfc\x2b\x1f\x69\xa6\xa4\x2d\x99\x9c\x8f\x44\xd3\x75\xeb\x1d\x0c\x4a\xaa\x45\x31\x2e\xd3\x12\x16\x09\x5c\x3b\x4a\x17\x1d\x08\xfa\x39\xa1\xe4\xf9\xff\x24\x70\x88\x3e\x7b\xee\x59\xed\xd2\x30\xca\xa2\x3d\x39\x57\x11\xea\x49\x96\x5e\xc4\xce\x64\x6c\x42\x71\x94\xc0\x29\x67\xa5\xee\x7d\x6d\x48\xe6\xd9\xbf\xe0\x8a\x38\xf0\xf2\xa8\x8e\x10\xce\xc9\x50\x5e\x10\x34\x19\x95\x97\xd2\x62\x7b\x17\x57\xc8\x08\x0d\x71\x84\xf0\x24\xf8\x5e\x6d\xef\xa2\x9e\xd8\x0e\xde\x0d\x71\x81\x70\x46\x96\xe6\x18\x07\x93\x81\xfc\xbb\xec\x05\x8a\x4b\x32\x09\x5a\x8e\xbe\x1b\xee\xb1\x38\x16\xdb\xcb\x51\xbe\xbd\x3d\xde\x9e\xa0\xae\x3e\x50\x9b\x00\x4f\x70\x89\x19\xaa\xe3\x28\xc2\xa0\xcb\xf7\x8d\x97\xa9\x6f\x72\xd3\x6d\x63\x73\x6b\xed\x6b\x70\x45\xf4\xca\xc9\x64\xbf\x2d\x37\x59\xf5\xf2\xc1\xa0\x4a\x3c\x7a\xa1\x52\xd0\xb8\x40\x7b\x33\x53\x45\x86\x52\x65\xb6\x50\xec\x2d\xd4\x3b\xa6\x0e\xfe\x74\x93\x6a\x84\xc3\xa0\x74\x0a\xad\xdf\x05\x4b\x63\x46\x1b\xe6\x69\x56\x10\x42\x94\x3b\x8c\x15\x54\x6d\x54\xc3\x08\xcc\x24\x11\x71\xa6\x4f\xd4\xf7\xa3\x19\x5a\x83\x1a\xd8\x25\xeb\xf5\x96\xba\x21\xfe\x39\x73\x4e\x86\xcd\x81\x2c\x3f\x28\xe3\x59\x5e\xa3\x54\x5e\xc5\x08\xd7\xa4\xec\x56\xed\x5d\x9e\x80\x5e\x2a\xde\xa5\xdf\x62\x08\x03\xec\x07\x3b\xf5\x6e\x79\x7e\x6c\xb4\x36\x10\x84\x76\x60\xb9\xb5\x5b\x11\xb8\x33\xda\x90\x52\x05\x8a\x19\x5f\x54\x75\x1d\x12\xf6\x3b\x79\x6c\xed\x5d\xa9\x97\xe9\x3d\x6d\x58\xc4\xdf\x7b\xdb\x4e\x8e\x9e\x69\x04\x2e\x89\x3b\x4a\x89\x9d\xa3\xd2\xe7\xb0\x60\x54\x1d\x73\x13\x17\x44\x0e\x0a\x1a\x0c\x4a\xc9\xb0\x82\xb6\x92\xca\x73\xba\x83\x68\x34\x79\x2f\x10\x3c\xb4\xde\x02\x7c\x2b\x70\x1f\xac\xba\xe4\xd9\xe4\x23\x78\x13\x4b\x4e\x5c\x5f\x08\x8a\x6a\x79\xab\x38\x9e\xa6\x80\x4d\x66\x0c\xd9\x68\xf0\x09\x53\x3c\x0e\x84\xdb\x86\xb7\x60\xa5\x01\x01\x13\x1e\x28\xae\xd0\x1c\x35\x42\xa9\xea\x22\x2e\xdc\x00\xea\x91\xf5\xbc\x5b\x29\x2e\x48\x6b\x56\xc5\x9e\xf0\x62\xdc\xa6\xa2\xcb\x8c\xc7\x19\x0b\xf1\xf5\x9a\x07\x9e\xd0\xda\x4a\x86\x93\x7b\x2a\x4f\xb2\x11\x1b\x23\x17\xa3\xaa\xa9\xa5\xbb\xa1\xf8\x9e\xc6\xd1\xac\x2c\x23\x1c\x65\x11\x72\x4f\xbb\xf0\x7b\x55\xdb\xd7\xab\xda\xbc\x5b\x16\x1f\xcb\xc2\x1b\x7a\xb4\xaa\xbd\x64\x9d\x5f\x77\x11\xbe\x56\xa5\xc9\xc2\xfd\x87\xe4\x3a\xe3\x91\x3a\x6a\x3f\x51\xb2\xf2\xbc\x10\xb4\x2d\x31\x90\x69\x25\xef\xf6\xbb\x09\x86\x84\xd4\xf9\xfb\xf6\x3f\xbb\xe4\x3d\x4d\xd5\xd5\x3e\x50\x0a\x6d\x77\xa6\xa1\x56\xe0\x44\xe5\x1a\x57\xa8\xb3\x29\x03\x74\xb8\xbd\x18\x76\x6d\x81\x0b\x2b\xf5\xda\x22\x24\x2e\xd5\xba\xed\xb0\xcf\xa2\xeb\xb5\x5a\xc6\x9d\x17\x0b\x38\xd8\xde\x37\xee\x16\xa6\x8a\x52\x79\x2e\xbe\x55\x8b\x31\xed\x4a\xab\x2c\x52\x0b\x9f\xb9\xfa\xdc\x24\x8e\xc4\x5f\x36\xb8\x24\x4c\x5b\xba\x66\x04\x16\x1e\xf3\x7c\x44\x32\xe4\xec\xb5\x33\x5c\x6a\x1f\xc1\xad\xc2\x8b\x70\xbf\xb4\x11\xee\x7f\x33\x8d\xe8\x57\x54\xf4\x67\x19\xcb\xe9\x34\xed\xab\xfe\xcb\x1e\x2f\x32\x31\xef\x47\xcf\x56\x4c\x87\x7a\x4f\x22\x54\x47\xfd\x49\xb9\xcc\xa7\x80\x48\x7a\x4d\x55\x44\xfc\xe4\x37\x54\x1b\xc3\x1c\x30\x49\x46\xf1\x27\xaa\x37\x2d\x18\x79\x20\x30\x68\x73\xab\x6e\xd3\xb7\xdd\x0d\x5f\x32\x80\xee\xda\x9c\x33\x4b\x3f\x51\xfd\xdd\xad\xb2\x53\x88\x88\xa8\x38\xf5\x0b\x6a\xe1\x88\x1a\x4c\x3b\x45\x2b\x00\x18\x8a\x6d\xac\x89\x32\xcf\x04\x93\x7c\xba\x8d\x4a\x41\xb3\xe9\x69\x91\xdf\xbb\x37\xf3\xac\x3a\x80\xd3\xc2\xbd\xba\xa1\x42\xb8\x40\x2c\xea\x5d\xe5\xbf\xd3\xa1\x17\xe9\x88\x7a\xf1\xf5\xbb\x95\x08\x62\xbd\x76\x1e\x3f\xed\x0b\x90\xf1\x97\xf6\x5a\x31\xec\xdd\xd9\xc0\xd4\x0b\xe5\xd1\xd5\x15\x8a\x1a\x05\x6d\xe5\xee\x46\x5b\x10\xde\x0b\xbe\x81\xd6\x65\xbd\x3e\xa5\x61\x57\x00\x60\xb1\xae\xa9\x17\xa1\x5e\x83\x4c\x98\xe5\x0c\xb6\x65\xcd\x3b\x0b\x9b\xc5\x0a\xc5\x29\x7c\x8f\xb7\x9c\x1f\xa6\xed\x8c\x82\x68\xb2\x76\x4e\x69\x59\x13\x1e\x98\xac\xc7\x41\x43\x99\x27\x9b\x2d\xed\x47\xdd\xdc\x2e\x5b\xd1\x32\x99\x64\x79\x1e\x6b\x4c\xa4\x2e\x73\x73\x4f\x46\xce\x5c\x62\x24\x4f\xfc\xba\x6e\xf4\x54\xdf\x19\x7d\x35\xae\x82\x44\xb1\x86\x49\xa1\x7b\x20\xf5\xdd\x03\x25\xbb\x3b\x2a\xc6\xd8\xe2\xf4\x87\x37\x42\xa1\xe2\x48\xe9\x40\x7d\xe1\xea\x44\x81\x47\xa3\x1a\x0b\xd5\x56\x6a\x14\x4e\xf2\x24\x0f\xf8\x41\x85\x67\xd5\xd2\x7f\x66\x4d\xc5\x14\xc7\xa5\xe4\x16\x59\x20\xc4\xe0\x8d\xd0\x7a\xfa\xbc\x0c\x64\x18\x19\xce\x11\x2a\x08\xf3\x5d\x72\xec\x1a\x5b\xe9\x56\xa6\x4b\x1c\xf6\x33\x9d\x28\x10\x75\x2d\xa1\x2c\xbc\xbd\xbd\x2a\xc8\xd2\xf5\xaa\xfe\x7f\xb8\x7b\xd7\xf6\xb6\x91\x2b\x4f\xfc\x3d\x3f\x85\x88\xf1\xc3\xa0\x86\x65\x98\xca\xce\xce\xee\x42\x5d\xd6\xaa\x6d\x39\x71\xd2\xbe\xc4\x72\x27\xd3\xcb\xe6\xd0\x10\x59\x14\x2b\x06\x01\x76\xa1\x28\x59\x21\xf1\xdd\xff\x4f\x9d\xba\x03\x20\x45\xb9\xdd\x99\x79\xfe\xfd\xa2\x2d\x02\x75\x43\x5d\x4e\x9d\xeb\xef\x78\x4b\x3d\xd3\xfd\x7b\x0a\xcd\x0c\xff\x39\xa6\x9a\x77\x46\x18\xec\xf8\x16\xd3\x01\x76\x1b\x3c\xf2\xa1\x16\x38\xee\x32\xe1\x23\xfc\x53\xcc\x54\x0c\x44\xa0\x78\x74\x8c\x41\x86\x70\x93\xad\x38\x96\x7d\xc0\x85\xce\xfe\x65\xce\x45\x48\x62\xcc\x71\x02\x6a\xfd\x41\x3f\x54\xf8\xd0\x60\x1c\xeb\xfb\xdb\x3b\xd8\x03\xb3\xbc\xbc\xbe\xa6\xfc\xca\x36\xde\x3b\xbc\x67\xcc\x43\xaf\x82\x41\x0e\x0a\x36\x4d\xaf\x6d\xc2\x33\x27\xc4\x06\x58\x07\xcb\x69\x3e\x21\x78\xe8\xd1\x8b\x4e\xa3\xe9\xdb\xc9\x60\x60\x62\xc8\x00\x03\x70\x30\x50\xee\x3b\xb0\x0b\xb4\x81\xaf\x36\x52\x41\x7f\xa4\x4c\x6e\xaf\x62\x84\x35\xe4\xde\xd4\xce\xaa\xdc\xbc\x3f\xc5\x25\x64\xe9\x76\xe6\xaa\xd6\xae\xcf\xdb\xbb\x3e\x43\x78\xdb\xd8\x9a\x1b\x8d\xef\x6f\x3f\x78\xd3\xde\x77\x39\xec\xbb\x0d\x78\xdf\x20\x5c\x1e\xb3\xc9\x72\x14\xda\x0a\xad\x15\xb8\x7b\xe1\x85\x8f\x16\xee\x5d\xdf\x2f\xb2\x42\x5e\xc3\xf2\xf2\x96\x1b\xe8\x69\x59\xe4\xf7\x27\x86\x3e\xc9\x8b\x5b\xd4\xd1\x49\x59\xe8\x1b\x3d\x3d\x79\xb2\x55\xbc\x6f\x51\xad\xb5\x2b\x67\xfd\x09\xd5\xad\x9d\x63\xa4\x06\x23\x6b\x6e\xf2\xbc\x11\x1b\xe2\x9d\x6f\x64\x3c\xce\x0b\xd0\x61\x04\xbb\xca\x8f\xac\xf2\x37\xae\x39\xd2\xf2\x7d\xad\x57\xce\xe7\x77\x70\xe9\x44\xd5\x22\xa0\x42\x02\x00\xf8\x5c\xff\x42\x2e\x99\x6a\x34\xad\xf4\x5a\x29\xa7\x02\xb3\x47\x18\xa9\xbc\xee\x20\x7a\x45\x4f\xbc\x2e\x77\x6a\xa7\xbf\x1c\x0c\x32\x15\x5e\x12\x17\x01\xf5\x00\x51\xf3\x07\xcd\x84\xca\x4f\x66\x2d\x55\x5b\x78\xd2\x8c\x92\xb1\x4f\x08\x6f\x8c\x5f\x05\xd3\x87\x5b\x44\xd8\xf4\xc5\xbc\xd1\xaf\x49\xa4\x8a\xd5\xf5\xd9\xe8\x55\x5e\xc4\x2d\x5f\xbc\x2b\xaa\x61\xba\x3e\x3a\x9e\xe7\x0a\x52\x09\xfd\xff\xf0\x2a\x51\x4b\x8e\x67\xa4\xc9\x15\x36\x6f\x8e\x96\xf9\x2b\xc3\xb3\xff\xa6\x97\x04\x90\x91\xc2\xe4\x7f\x7c\xe3\x56\xf1\x95\x26\x9c\x5b\x73\x5b\x58\x64\xb0\x4a\xb9\x81\x5b\x6e\x86\xfa\x4c\xab\xe2\x46\xed\xd1\xf4\x3c\x53\x75\x2d\x9f\xe7\xd5\x85\x1b\x4c\x4e\xab\x42\xf8\x5e\xd5\x59\x69\x90\x2c\xc5\x11\x35\x87\x34\xea\xd2\xd3\x0a\xa5\xe9\xde\xed\xb6\x75\x1a\xeb\x1f\x1a\x53\x4d\x25\xfb\xd2\x0b\xdd\x35\x66\xf5\x46\xde\xa6\x27\x4e\x53\x03\xec\xbc\x29\xe2\x29\xe2\xa9\x27\x5e\xbd\xa7\xe1\x57\xfd\x47\x4c\xd1\xb9\x0e\x0e\xbe\x02\x53\x3c\x7e\x43\x51\x4c\xc7\xa3\x09\xa4\x61\xc5\x14\x5c\xe7\x5d\x09\x1d\xf4\x2c\xbf\xf3\x82\x92\xf7\x34\xb9\x66\xc5\x5c\xa1\x75\xf5\x3a\x3c\x61\x2f\xcc\x81\x7c\x71\x78\x29\x9b\x5f\xe8\x5e\xa9\xf9\x2d\x0b\xfa\xb7\xac\xab\xa0\x79\x71\x70\x19\xb4\x91\xb0\xb9\x04\x0e\xaf\xc0\xae\x44\xcf\x2e\x84\xd9\x83\x9f\x8f\x96\x9e\xb2\x5c\xde\x9b\x84\x36\x05\x80\x4e\xee\xff\x0f\x60\x0a\xb0\x8b\xed\x69\xfb\x7f\x0d\xb9\xe9\x66\x23\x95\x42\xcc\x0d\x11\xd5\x48\xa7\xfe\x6b\xd1\xa6\xa6\x44\xb0\x97\x3e\xed\x76\x71\x9b\xaa\xfc\x29\xec\xc7\xe7\x46\x1f\x43\x55\xb4\x9c\xdb\x20\x28\x86\x79\x6c\x07\x66\x7b\x3d\x02\xb6\x84\xdd\x55\x0a\x21\x87\x0a\xf2\x81\xba\x1d\x64\x1f\xfe\xdd\x3f\x18\x1f\xe8\x57\xf3\x1a\xbf\x93\xbc\xc6\xef\x1e\xe6\x35\x9c\x2f\x1d\x6d\x7c\xc6\x52\x2b\x79\x20\xf8\xd5\x04\x9b\xab\x43\xf6\x72\x8f\x51\xe4\xad\x97\x82\x5d\x87\xe4\x02\xd3\xeb\xe2\xe9\x3c\xdb\xba\xa7\x76\xac\xd8\x3f\xcc\xa5\xd7\x57\xbf\xb4\xf4\x6c\x4a\x40\x3d\xa7\xf8\x0c\x63\xec\x23\x59\x21\x42\x9d\x6d\xdb\x18\xe7\xa2\xee\xee\xda\x18\x3b\x7d\x45\x92\x8d\x7f\xeb\x53\xdf\x27\xa0\xd5\x3f\xd3\xfd\x6b\x57\xaa\xee\x11\x18\x7b\x4f\x9f\x39\x64\x3c\x97\x98\xd9\xb7\xf2\xc0\xec\xed\x76\x5d\xaa\x67\x10\xcb\x9f\xfd\x7c\xf5\x2c\x11\xb4\x02\xed\xb3\xce\x9d\xdc\x69\xef\x9c\x72\x93\x99\xd3\xa6\xd7\x9c\x95\x9c\xfe\xc0\xae\x5f\x17\x73\xfa\x85\x8c\x00\xc1\x50\x45\x1c\xdc\x7f\x7f\x6f\xb2\x19\xb6\x92\xa9\xe9\x56\x30\x77\x89\xb4\x34\xa4\x0e\x08\xcb\x72\x65\xc7\xc5\x04\x52\x81\x04\xe8\x27\xe3\x62\xe2\x25\xab\xf3\xfd\x49\xc3\x86\xcd\xe4\x5a\x3e\xa7\x39\xa4\xdd\x2e\xe6\xa0\x83\x6e\x7f\xc4\x70\xe8\x52\x88\xe9\xd6\xb4\x7b\x53\x81\x47\x3a\x69\x3f\xc5\x1a\xee\x23\x15\x35\x72\xf9\xf3\x5e\xa8\x66\x64\x4f\x1e\xb6\x5f\x30\xe0\xfe\x08\xd5\x73\xfa\xa1\x99\x70\xcf\x66\x96\xeb\x18\x6b\x8f\xdb\x3c\x67\xde\x98\x8c\xa9\x81\xef\x1b\xad\x50\x39\xe6\xfc\x00\x90\x1f\xd4\xee\x7f\xa5\x0e\xd9\x0f\xb4\xe7\x47\x84\xbc\xa2\xf8\x15\x4d\xba\x3e\x25\x02\xfd\x79\x04\x99\x84\x81\x44\x28\x7a\xfa\x0f\xda\x02\x9e\x4d\x96\x59\xf5\xce\x29\x3c\xf1\x8f\xa0\x5a\xfb\x9e\x12\xe0\xdc\xd3\x11\x9e\x76\xc6\x77\xa5\xfd\x53\x2c\x59\x80\xce\x97\x4d\x74\xb0\xce\x42\x35\xae\xf6\xd6\xb7\xa0\x83\x15\x15\xc3\x21\x3e\xd0\x8a\xbc\x06\xf1\x1f\x61\xcc\x7f\xa5\x64\x3c\xe9\x05\x01\x3b\x7f\x55\xb3\xf7\x84\x76\x61\x77\x3a\x52\xf5\x0b\x55\x68\x60\xfb\x82\xd9\xac\x1f\x17\xc5\xa2\x15\xc7\xd5\x0e\xff\x55\xee\x55\x85\xef\x5e\x65\x52\xe5\x8c\x4b\xd0\x2a\xc6\x94\x64\xc9\x6c\x99\xf1\x17\xe5\x9c\x5e\x88\x78\x84\xd0\x73\xf2\xef\xff\x73\x30\xa0\xdf\x91\xff\x33\x32\xee\x94\x7f\x96\x3b\x22\x43\xbd\x0a\xae\x38\x6e\x42\xbb\x50\x5c\x49\x41\xc9\xbb\x1a\xfe\xa6\x32\xac\x04\x76\x56\xcf\x89\xcd\x1e\xd8\x8c\x08\xa7\x2b\x76\x81\x9e\x27\x0c\x02\xec\xb2\x09\x29\x70\xd8\x51\x21\xa5\xee\x42\x1e\xee\x7f\x50\xc5\xaf\x17\xb8\xb2\xd1\xb9\xc5\xb8\x82\xaf\x11\xe3\x72\x42\x2a\x9c\x0f\x06\xb9\x4b\x2b\x42\xc8\x4f\xd4\x53\xd6\x85\x11\x75\x39\x42\x61\x47\x39\xf6\x46\xe6\x7c\x7c\xa0\x49\x2f\x06\x0e\x56\x49\x45\x99\xe4\x08\xc9\x75\x60\xc5\x86\xf6\x18\xb0\x2a\x39\xc2\xf2\xc3\x73\xcc\x50\x5d\x9b\x6f\x26\x65\x8d\xe2\x31\xb5\xe3\x8a\xd1\x04\xab\xf8\x19\x40\x61\xb5\x53\xf6\x07\x6a\xd9\xf5\x7d\xbb\x40\x7e\x2a\x1d\x0c\x62\xb9\x5b\xf0\xfe\xb8\xc7\x53\x84\xe9\x6e\xf7\xc7\x80\x86\xfe\x95\xe2\x0e\xbc\xae\xbf\xd1\x18\x02\xc1\x7b\xb0\x7f\xbd\xf5\xfc\xc9\x0d\x26\x9c\xb7\x80\x67\x77\xe9\xc4\x77\xbb\xb8\x23\x8a\x11\x4c\x0b\x3f\xaa\x39\x93\x9f\x87\x7d\x48\xac\x66\x84\x23\x0a\xe1\xaa\x0a\x42\x7b\xf3\x12\x9c\x1a\x8b\x6e\x68\xaf\xb8\x40\x88\x10\x62\x58\x65\x47\x50\x76\xbb\x82\x90\x16\x99\x71\xce\x70\x87\x47\xb1\x15\xe4\x53\x5c\x6d\xae\xd5\x95\x56\x2e\x4e\x24\xeb\x82\x3e\x69\xa7\x28\x9d\x18\xd1\x39\x68\x3b\x64\xb5\xdd\x2e\x8a\xb5\x6d\x12\x45\xb5\x9a\xa9\xc6\x6e\xd6\x8e\x32\x81\x07\xf6\x9f\x0d\x57\xc5\xef\x8d\x5f\xc3\x58\x18\xa4\x55\xe3\xa6\xc1\x3b\xf4\xfc\x3c\x34\xb3\x5a\x1d\xfe\x60\xc0\xfd\x1d\x3b\x18\xf0\x7a\x96\x89\xd9\x32\x2e\x14\x4c\x7f\x2b\xc2\xf0\x89\xa2\x51\x7f\xa2\xf8\x2f\x94\x28\x99\xd4\x11\xe7\x59\x59\xcc\x32\x81\xb7\x5a\x4a\x4d\xff\x83\xd6\xaa\x8c\x23\x5e\xff\xaf\x65\x8f\xe2\x00\x39\x5c\x78\x88\xb1\x62\x4c\x21\xd8\x94\xb0\xf3\xbf\xe8\x83\xcc\xb0\x7c\x88\x52\xf8\x3f\xf6\x22\x1c\x34\x0b\x6b\xcd\x7f\x01\x54\x91\xe8\x19\x87\x62\x2d\xe1\x05\xbe\x73\x65\x58\x2c\x23\x6c\x4c\x27\xb8\x22\x9d\x71\xeb\x15\x8d\x33\x94\x66\x41\x03\xd5\x6e\x07\xfd\x55\x61\x43\x39\xa9\x3a\xfb\xcb\xc3\x62\x1b\xa5\x69\xe0\xc9\x1d\xcf\xd6\x28\x2e\x31\xa4\xff\x2e\x8c\x5e\x0b\x2f\x89\xd5\x71\x29\x67\x47\xbb\x15\x97\xe7\xf6\xcf\xf9\xb9\xd7\xc4\x1c\x2f\x51\xba\x4c\xe7\x78\xd6\x27\xa4\xdc\xed\x36\xb2\x80\x9a\xe6\x85\x6c\x38\x50\x47\xee\x76\xe3\x09\x5e\x13\x23\xa8\x26\x49\xb2\xc0\x60\x29\x99\x81\xa5\x64\x53\x3b\x4c\x8a\xb5\xa7\x01\x28\xdc\xdf\x78\xed\x09\xfb\x85\xfb\x5b\x3e\x07\x99\xaf\x50\xff\xe2\xb5\x2f\x3d\x17\xbe\x6f\x14\xa3\xf1\x1a\x5f\x51\x0f\x71\xd0\xb9\x93\x85\x0b\xeb\x6c\x2a\x72\x07\x34\xd7\xd7\x6d\x9e\x8e\xc5\x2b\xfd\x39\x12\xb8\x44\xa9\xd7\x0d\xd7\xdd\xd8\x08\x21\xb9\x07\x4a\xb5\x30\xab\xec\x33\xd5\x46\x7d\x86\xf4\xe6\x8e\x9b\x6f\x84\x85\x13\x38\x29\x5d\xb3\x45\x47\xb3\x40\xe1\x58\x1b\x10\x10\x7a\xcb\xfd\x5c\x25\x0c\x99\x0c\xf9\x8d\xbb\x7a\x43\x46\x67\x9b\xef\x6c\x62\xe0\x8d\xb9\xab\x67\xa4\x1a\x6f\x26\x78\x4e\xc4\x78\x36\xe9\x02\x5e\x98\x9f\xc7\x19\xe9\x8f\x70\x39\x9e\x4d\x88\x10\xf1\x0c\xcf\x31\xc3\xdb\x1a\xa1\x14\x1e\xcd\xcd\x0a\x64\x10\x68\x33\x05\x19\x9b\xf0\xe4\xc3\xbb\x77\x1f\x11\xf6\x3e\x8c\x89\x10\x3d\xce\xdd\x1b\x15\xf9\x7f\x34\x8e\xd4\x2c\xd1\x22\x73\x6a\x44\x46\xab\x48\xaf\x24\xce\xa1\xd0\x8a\xf2\x9b\xce\xd7\x9b\xe6\x07\xcf\xc8\xe8\x6c\xf6\x9d\x71\x8c\x3a\x9b\x99\x0f\x9e\x93\xcd\x78\x36\xc1\x4b\x22\xc6\xf3\x10\xe3\x7b\x09\xdb\x05\x5c\x94\x4b\xcb\xc3\xce\x11\xda\x6a\x30\xda\xb9\xe2\x2d\x17\x84\xb6\x9c\xd8\xe6\xa1\x6f\xed\x42\x75\xb5\x26\xc5\x78\x3e\x21\x4c\x76\xd4\x31\xb3\xeb\xc1\xa0\x14\x31\xc3\x73\xbc\x06\xfd\x2f\x30\x03\x5c\xd6\x58\xe0\xcc\x74\x89\x17\x4e\xdd\x2a\x8b\x6a\x8d\xcf\xaa\x8b\xd6\x80\xc4\xb6\x52\x7d\xdf\x92\x8a\xc6\xcb\x50\xc5\x79\x8b\xb6\xd0\x3c\x15\xf2\xc0\xe3\x5b\xcc\x11\x86\x11\x6a\xd3\xb0\xe1\x33\xea\xba\x1a\x0c\x2a\x6f\x0a\x9e\x93\xd1\x6e\xb7\x6f\x81\x08\xe0\x0d\xb5\x57\x46\x3e\x3f\x5f\x12\xae\x3a\x2b\x50\xaa\x98\x1c\xd7\xe8\xd3\xd3\xf3\x25\x29\xec\xeb\xd5\x60\x10\x2f\xe5\x0e\x83\xdf\xa0\xe0\x86\xc1\x2d\x31\x77\x63\xf4\xb9\xc1\xd2\x3b\xe7\xf6\x34\x70\x0b\x34\x62\xf0\x9b\x3c\x58\x94\x66\x2c\xc3\x6d\xc6\xb7\xa6\x78\x95\x66\xd8\x42\xb2\xa6\x55\x4d\xca\x30\x66\xc7\xf2\xc6\x39\x61\xe7\xd3\xf4\x4e\x9f\xa8\x0c\xc2\x15\x83\x73\x95\xc7\x14\xeb\xc7\xf2\x68\x29\x48\x0c\x6c\x60\x47\xfc\x46\x1d\xc3\x3d\x23\xec\x7c\x91\xae\xf1\x9c\x8c\xce\xe6\xee\x98\xce\x87\x43\x34\x8b\x29\xae\xc6\xf3\x89\xc3\xd6\x70\xfe\x98\x42\x85\x19\x78\x80\xcd\x1d\xfc\x3f\xce\x3a\x9f\x56\x0d\xe5\x56\x2e\x05\xe7\x8d\x12\x2d\x82\x53\x8c\xdb\x7e\x8d\x0a\xfd\x31\x88\x6c\x80\xd9\x10\xfe\x3c\x48\xbe\x96\x08\xa0\x2e\xc2\xb0\xb2\xf2\x84\x41\x9c\xb7\x82\x4f\xf7\x99\x5b\x9e\x58\x2c\xf6\x1c\x4e\xda\x76\x6d\x37\x53\x3a\xc3\x0a\x04\x3d\x9d\xd7\x24\x77\x76\xb0\xd9\x39\x13\x31\xc7\x33\x6f\x4c\xa9\xbb\xe1\x06\x83\x98\xc6\xf3\x60\xc4\x8e\x37\xcc\x93\xe9\x1d\x13\xcb\x72\x23\xe4\xb6\x34\x7f\xdb\x40\x58\xaa\xc3\x65\x05\xc9\x3c\xe8\x8b\x33\x85\xe7\x3c\x18\x64\xbe\x28\x2b\xe5\x6c\xc5\xc9\xcb\xc1\xe4\x5e\x77\xb5\x94\x23\xe0\x6f\x0a\x50\x5e\x3d\xb7\xde\x92\x3a\xe5\x2d\xea\xb4\x24\xb9\xa4\x4e\x0b\x92\x8d\x97\xf2\x92\x2d\xc7\x4b\x20\x52\xf3\xe4\xe2\x87\xd7\x17\x57\xd3\x37\x97\x1f\xff\xf8\xee\x25\x6c\x9b\x33\xfb\x29\x8b\xc1\x20\x17\xf1\x02\xd9\xf8\x91\x3f\x49\x56\x69\x01\x44\xb6\xb7\x26\x2b\x80\xc1\xc2\x0b\xb2\x52\x8a\xbe\xda\x55\x3c\xef\xf2\xcf\x58\x00\x5d\xa2\x78\x89\x17\xb8\x3f\x42\x18\x5c\x1a\xe5\x0f\xf8\xf8\x8d\x9d\x8e\x25\xc2\x7d\x86\xbc\x09\x5f\x0f\x06\x0b\x55\x76\x2d\xbf\xdd\x43\x9e\xe8\x76\xc4\xc4\xb4\x0e\xbf\x6b\x30\x88\xff\xb4\x17\x3a\x10\x92\x7f\x2b\x90\x57\xc9\x75\xe2\x8c\xf0\x71\x29\xb9\x2e\x10\x36\x9b\xb2\x42\xe6\x19\xbf\x2a\x8b\xf6\x2b\xb9\x71\xa6\x9c\x51\x4b\x84\xe4\xcd\xc6\xb0\xf1\x79\x47\x69\x6c\x9c\x58\x71\x45\xe8\xb8\x9c\x20\x84\xb7\x72\xea\xd2\x4c\x3b\x5b\x56\xb5\xd6\xd7\x56\x02\xe7\x02\x6f\x04\x9e\x09\x3c\x17\x4d\xdf\x71\xc5\xd3\x2f\x45\x33\xc5\x1b\xda\xce\x85\x53\x36\xdb\x9c\x2d\x6d\xb4\xae\x90\x6f\xa1\x5e\xc6\x7f\xff\x92\xa3\xa8\x4b\xd8\xf2\xc0\x91\x31\xf3\x44\x1a\x4f\xf7\xe1\x6e\x2e\x85\x68\xe0\x22\x2c\x65\x41\x4f\x98\x05\x7d\xf1\x6e\xb7\xcf\x5b\xb5\x30\x08\xae\xff\x2f\x66\xa8\xf6\x82\x2e\x20\x3a\x41\x7e\x9d\xce\x8b\xb3\x10\xb1\x36\xcf\xa8\xbc\x75\x2f\xdc\xbc\x84\xae\x4a\xfa\x14\xda\x98\x83\x20\x6d\x9a\x32\x97\x48\x19\x72\xd4\xca\xe6\x4c\x8d\x8d\xd2\xd4\x59\xd9\x14\x0b\xb7\x06\x25\x29\xf4\x4f\xc7\x85\x24\x75\x01\x94\xa2\xf2\x75\x6c\xe4\x68\x20\xcf\xb7\xd4\x5b\xa5\xdd\xae\xb0\x3e\x35\x08\x17\xb5\xca\xfe\xa6\xc7\xc6\x16\x31\x2c\x98\xb1\x6a\x58\x2b\xa7\xab\x6f\x35\xc5\xf4\xee\x64\x29\x62\xff\xeb\xbd\x42\xbd\xe6\xde\xf0\xcb\xe9\x49\x1d\x8b\x89\xa2\x3a\xde\x43\x93\x9f\xc1\x14\x71\x9c\xb8\xff\xd8\xfb\xdb\xf0\xa6\xb0\x42\xda\x74\x53\x2b\xc0\x40\x70\x9a\x3f\x0d\xc1\xbc\xc6\xb2\xc0\x44\x5e\x42\x50\xe6\x7d\xc6\x05\xcb\x72\x4f\x9d\xeb\x95\x42\xf5\x9c\x0a\x3a\x13\x7a\x3b\x77\x39\x34\xea\x69\xa7\x0e\x3b\x51\x92\x3a\xa1\x5d\xf8\x51\x23\x1e\xc4\x5c\x3f\x36\xb7\x0c\x38\xa9\x36\xb2\xb2\x40\x13\x85\x3a\x65\x08\x0b\x0f\xd7\x4d\x7b\xa7\x31\x49\x45\x54\x42\x0d\xb6\x88\xbd\xc0\x84\xaa\x5c\xd1\x58\x90\xe7\x06\x05\xd6\x4c\x5d\xff\xb4\xd6\xa6\x0d\xd4\xdb\xb3\x97\x1a\xbe\x9e\x10\x0b\x6a\xef\x38\x65\x59\xd2\x3b\x3b\x70\xd7\xd2\x7b\x40\x4f\x57\xcf\xd9\xc0\xcc\x31\xa0\x58\xd4\x70\xd4\x5b\xb1\x31\x6a\x2e\xcc\x4c\x1c\x9e\x93\x70\x46\xfc\x6d\xe6\x82\x25\x03\xe6\xd9\x2f\xa2\x95\x7c\xcc\x57\xf2\xc1\x4d\x1d\x33\x49\x21\x95\x06\xcb\xcc\xe8\x60\x60\xfe\xb2\xf7\x68\xc7\x84\x9e\x70\xad\xb6\xa8\x9d\xb2\xca\x78\xa0\x1b\xd5\x86\x3a\xbf\x28\xf2\x98\x1d\xd8\xa2\x06\x64\x75\x30\xa0\x36\xcf\xff\x08\x5b\xe7\x46\x79\xde\x9e\x8f\xd0\x56\xcd\x8c\x81\x57\x6c\xa6\x00\xf0\x41\xf1\xe9\xb8\x98\xf4\xf4\x96\x63\xe8\x9c\x8f\x8b\x09\x61\x29\xfc\x13\x1e\x51\x66\xd1\x33\x4f\x78\xcd\x16\xb1\x01\x3a\x5a\x0a\xbc\xf4\xd5\xcc\xc2\x43\xfe\x6a\xdc\xda\x4a\x28\x68\x5d\x17\xb9\x20\x94\x3c\x5f\x9b\x6d\x8f\x2b\x41\xe0\x06\xe9\xcc\x6f\xe6\x2e\x40\x42\xf1\xda\xbb\x4e\x7c\xce\x78\x25\x1c\x41\xea\xff\x87\x3c\x4a\x66\xde\xc6\xa3\x09\xe6\x44\x9c\x8b\x84\x19\x67\x2a\x97\x56\xb3\x80\x17\x8a\xa4\x9b\xaf\xee\x86\xd1\xbe\x15\x0a\x8b\x65\xeb\xb7\xc2\x77\x3b\xb0\x73\x16\xa8\x9e\x20\x3f\xfc\x88\x21\x6c\xec\x40\xb2\xa6\x1f\x81\xa1\x1a\x82\x28\x7b\xe3\x70\x29\x28\x4f\x4b\xac\xbd\x69\xb2\xda\xf3\xa9\xa0\xf3\x97\x19\xa0\x19\x62\x76\xce\x3a\x3e\xc0\xd3\x74\xe7\x56\xb1\x58\x06\xca\xc4\xb8\x19\xc7\xde\xe9\x88\x4f\x1f\x76\xc4\xa7\xc6\x93\xce\xd3\xb1\x6d\xe4\x2a\x65\x46\xfd\xd6\x01\x92\x01\x6f\x34\x4e\xc6\x8c\x34\x70\xbb\x9a\x81\x1f\x3a\xce\x80\xce\x0d\xa8\x57\xae\xd5\x2b\x8d\x20\xb6\x4d\x13\x32\xb7\x15\x98\x57\x80\x1e\xf8\x46\xc4\x92\x05\x45\x78\x56\x87\x90\x5d\x1b\x81\x5b\x6c\x58\xb3\x44\x27\xfe\x30\xbd\x3b\x51\x76\x39\x84\x0f\x01\x84\xcd\x0c\x47\x74\xd3\xc1\x11\x59\xd3\x12\xf1\x7c\x7c\x89\x68\x5b\xe5\x1b\xa6\x96\x1b\x2a\xb4\x63\x0d\xf2\xad\xd1\xb6\x09\xcf\xeb\xa6\xde\x0b\xfa\x0f\xcc\xc8\x71\xa0\xff\x9d\xd8\xfe\xdf\x38\x59\x28\xb5\x30\x8e\x1d\x50\x7d\x40\xa8\x1a\x79\x39\x28\x68\xd5\xad\x06\x4c\xa1\xe2\x35\x1b\x90\xe3\x92\x95\x89\xc0\xb2\x3c\x81\x72\xef\xfe\xf6\xf6\xf2\x03\xa1\xc9\x0f\x97\x7f\xb8\x78\xf1\xd3\x54\xfd\xf4\x3c\xc4\xf5\x25\xd7\x81\xe2\xe2\xd7\x00\xf8\x96\xa0\x09\xae\xb5\xea\x61\x4a\x47\x57\x58\x95\xda\x9f\xb6\x95\x97\x1b\xc1\x8a\x9b\xe3\xd6\xc4\x14\xce\xd9\xf5\x33\xfa\x45\x3c\x73\x89\x82\x1f\x2c\x9e\x97\xb3\x4c\x4e\xcf\xb3\x6c\xcd\x8e\x2f\x5c\x94\x05\x9d\x9a\x5f\xc7\x57\x5b\x66\xd5\xf2\x6b\xaa\xb1\x4a\x94\xfc\xfe\x2b\x6a\x66\x1b\x51\x1e\x5f\xad\xba\xaf\x04\x5d\x3d\xbb\xa1\x05\xe5\x99\xa0\xd3\x47\x4c\xa3\xae\xea\x6a\x4c\x17\xe5\xd1\xb5\xe6\x55\x7e\x6c\x51\xf9\xe8\xf8\xe1\x40\xe9\x63\x0b\x43\x86\xe3\x29\xe4\x46\x7f\x78\x97\x55\x94\xdf\xb2\x19\xb5\x0f\x1f\x57\xe1\x11\x13\x0a\x38\x94\x47\x25\xde\xc0\x0b\xbc\xc6\xab\xdf\x2c\x4f\xf1\x0f\x76\x17\x1d\x05\x33\xc9\x8d\x1d\xfe\x20\x74\xe5\xdb\xb2\xa0\x8f\x6c\xb8\x38\xaa\xe1\x3f\x66\xd5\xf2\x91\x0d\xb3\xe3\x1a\x56\x67\xf1\x91\x6d\x97\x47\xb5\x7d\xb1\x11\xe5\x23\x1b\xce\x8e\x6a\xd8\x9c\xe8\x17\xde\x81\x3e\x12\x2c\xf4\xeb\x9a\x7f\x95\xc9\x8b\xfd\xfe\x11\x38\xa7\x7b\x5a\x38\xd8\xaf\xa3\x36\xaf\xca\x63\xbf\x28\x3f\xea\x8b\x3e\xc0\x21\x7d\x79\xf5\xc3\x91\xad\x6e\x1e\xd1\xea\x91\x4d\xce\x8e\x6f\xf2\xc8\x16\xe7\x47\xb5\xf8\x17\x49\x06\xdf\x6b\x2a\x78\x54\xbb\xcb\xa3\x47\xca\x8a\x9b\x2b\x45\x07\x8f\x6c\x7a\xf1\x88\x79\x7d\x5c\xcb\xeb\xa3\x5a\xfe\x7e\x33\xfb\xac\x93\x02\x1d\xd9\xee\xca\x6b\xf7\x41\xe6\xa6\x8b\x5f\x79\x38\xe5\x94\x77\x59\xba\x8a\xd0\x96\x77\xfd\x82\xd8\xfc\xe0\x2d\xa3\x98\xd9\xdf\x24\x75\xb8\x9e\x06\xa3\xb0\xb2\xf7\x41\xa2\x15\x65\xdb\x6e\x2b\x52\x3a\x8e\x7e\xf1\x76\xe0\x04\x7b\xbf\x20\xfc\x1f\x4f\x7f\x59\xbf\xa4\x39\xbd\xc9\x04\xb5\x0f\x14\xb6\xd6\xdc\x07\xe8\xf0\x50\x16\x00\xd1\x00\x33\x83\xd6\xc6\x53\xae\xb1\x86\x46\xb8\x00\xff\x5c\x9a\x78\x8d\xa2\x98\x29\x39\xea\x86\x0a\x04\xe1\xac\xa8\xc6\x82\x67\x45\xc5\xe4\x0c\x7d\x2c\x61\xbb\x79\xfa\x1b\xcd\x22\x43\x71\x10\xec\x22\x95\x8f\x2c\xb2\xb2\x26\x4f\x5a\xf5\x77\xbb\xf0\x21\xd2\xd9\x39\xc0\x11\xb7\x48\xd6\x9c\x2e\xd8\x17\x28\x29\x45\xfc\x0b\x7e\xe3\xbc\x39\x6a\xac\xe1\x1a\xbe\x66\x20\x7e\x55\x39\x06\xfd\xfb\x6f\x4c\x2c\x1f\x33\x84\xda\x80\x48\xda\x75\xed\xb9\x25\x67\x47\x6d\xfc\x90\xf3\xee\xd8\xf6\x1d\xa2\xd5\xb7\xde\x96\x3a\x08\x76\xab\x15\xcb\xa1\x5a\x89\xad\xd6\x2a\xff\x08\x0c\xd3\x78\x3f\x86\x4f\x2b\xe7\x3b\x73\xc2\x13\xa7\x9f\xb6\x7e\xed\xa8\xc6\x8d\x1a\xe9\xb6\xae\xbd\xc9\x12\x8f\x9c\xac\x90\xa3\x3f\x4c\x2d\xae\x79\x79\x57\x51\xfe\xb4\x33\xcd\xdc\x7e\xaa\xd2\x4a\xfc\xd6\x49\x46\x5c\x4a\xba\xaf\xcf\x7f\xd7\xf9\x89\xb2\xf6\x21\x96\xf7\x9b\x48\xd7\x9a\x8f\x83\xf4\x66\x33\xfd\x28\xab\x96\xf0\x7b\xde\xde\x27\x4a\x6f\x91\xdb\xb8\x03\x96\xa8\x6e\x1b\x0e\xc8\x2a\xf8\x20\x58\x7f\xdc\xb1\x6b\x48\x24\x97\x31\x32\x7a\xf1\x20\xa1\x3e\x2f\x4b\xf1\xe3\x87\x1f\xb0\x68\x8a\xfe\x5b\x33\x41\xa9\xc0\x9b\x8a\xf2\x8b\x1b\x5a\x88\x94\x63\x2d\x1d\xa6\x05\x9e\x97\x33\xe8\xf4\x4d\x39\xa7\x29\xc3\x2a\xf0\x23\x2d\xb1\x6e\x32\xcd\x6a\x42\x71\x4e\x22\x29\xbd\x46\x78\x43\xfa\xa7\x0a\x32\x0b\x70\xe6\x5f\x6d\xf2\x5c\x7e\x3d\xd2\x19\xd5\xe1\x79\xb5\x59\xc3\xee\xd2\xb3\x85\x20\x26\xc9\xb8\x03\xcd\xe2\x0c\x0b\xd4\x5b\x12\x42\x16\xe7\x39\x89\xf4\x40\xa2\x34\x7a\xf6\x2f\x11\x21\x64\x69\x90\xc1\x46\xf8\xf7\xe8\x3c\x2e\x0c\xad\xb9\x12\xf2\x90\x40\x92\x8c\x74\x51\xe3\x28\xc2\x0b\x84\xbd\xfa\x28\x8d\x37\xa4\x3f\x52\x6a\x33\x5d\x47\x8f\x0c\x2f\xac\x85\xb5\x39\xc2\xac\x5a\xaa\x5b\x40\xd2\xef\x12\x19\xc7\x8b\xb9\x1b\xe4\x7a\xb7\x8b\x9e\xc1\xc0\x06\x83\xe8\xd9\xbf\xc0\x9f\x6b\x18\x78\x56\x2d\xa3\x03\x9d\xae\x11\xa0\x91\x6d\x9c\x69\xc1\x30\x93\x75\xec\xad\x8a\x5c\x3d\xf3\xcb\xae\x0a\x3c\xd5\x3f\xbc\x65\x83\xc7\xf6\xa7\x5d\x21\x1a\xae\x21\x94\xf2\x9f\x98\x35\x85\x17\xea\xef\x1a\xf5\x54\xd8\xba\x42\x20\x01\xef\x3f\x43\xfe\x67\x59\x31\xa3\xb9\x61\x8f\xc4\x66\x1d\x81\x1d\x57\xe8\x2d\xe0\x01\x01\x17\xcd\xc4\x21\x26\x3f\x48\x64\xbf\x2f\x1a\x0a\xb8\x2c\x75\x0f\x0c\x47\x7a\xd4\x91\xd6\x71\x86\x5d\x97\xc5\x8c\x53\x41\x5f\x07\x1b\x3f\xc2\x0c\xd5\x77\x2c\xcf\x35\xbc\x86\xda\xfa\xdb\xee\xc2\x29\xd5\x11\x94\x40\x8d\xe7\xa6\x46\xdd\xd0\xb3\x36\xc1\xc2\x6c\x12\x95\x7d\xcd\x72\xdd\xac\x0d\x94\x2b\x13\xc1\xef\x5f\x17\xb7\xe5\x67\x2a\x77\x38\x0d\x7d\x2b\x66\x5e\xb4\x3e\xd6\xa1\x40\x70\x62\xcc\x69\x31\xd1\x40\x9a\x84\x20\x15\x15\x6a\x1e\x01\x3f\xad\x0e\x95\xe7\x3f\x60\x5c\xcd\xd4\x2e\x2c\xc3\x93\xc2\x49\x5c\xb8\x67\xa7\x16\x09\xea\x5f\x22\x84\x12\x95\x74\x18\x61\xb5\x95\x19\x38\x55\x5f\x88\xd8\x66\x18\x3b\x85\x90\x4e\x8b\x0d\x15\x9f\x22\x84\xd9\x90\xf0\x61\x66\x51\x4e\x07\x83\x98\x0d\x49\xf4\x2f\xd1\xb0\xd0\x3e\xc8\xb2\x65\x94\xb2\x21\xc9\x86\xa5\xef\x1a\x39\x0f\xf0\xaf\x70\x41\xd4\x64\x98\xb6\xad\x7d\xd3\x7c\x4e\xa4\x53\xa3\x47\xcf\xe0\xaf\xf1\x68\x02\x01\x0c\xd1\xb3\x68\x58\x20\xcc\x75\xa7\x08\xf3\xda\x51\xd8\x1c\xe7\x96\x27\x34\xe7\x20\x7a\x16\x61\x56\x30\x01\xa4\x22\xdd\xc4\x91\xfd\x11\x21\xc9\x78\xcb\x32\x9b\x38\x52\x7f\x45\x00\x7c\xa6\x1f\x55\xe6\x91\x3e\xc3\xfa\xb1\xfb\x15\x21\x5c\x16\x80\x4c\x68\xde\x79\x3f\x23\x84\x17\x25\x5f\x65\xa6\x35\xfb\x23\x42\xd8\x1d\xf4\x8e\x53\x6e\x8f\xb8\x39\xa0\xc9\x1d\x2b\xe6\xe5\x9d\x7f\xe4\xbd\xf3\xde\x3a\x98\x0a\x9d\xff\x51\x9c\x40\x43\x99\xf8\x28\xb9\xe1\xd0\x3d\xee\xa5\x9f\xfd\xb5\xf7\xf5\x37\x67\xd7\xb4\x93\xb4\xbd\x86\xf9\xaf\xbc\x86\x81\xf2\xd7\x72\x73\xc5\x00\x71\x2e\x7c\x12\xe6\xe6\x56\x19\x13\xcc\xef\xdd\x4e\xad\xad\xdd\x06\xc8\xc1\xb0\x2c\x15\x36\xef\x1f\xb3\x62\x9e\x5b\xa8\x95\x5a\x53\x86\xd8\x83\x8e\x65\x1e\xb9\xf0\x2f\x0e\x30\x72\xfc\xf8\xe1\x87\x90\x29\xb0\x0d\xb8\x53\x8d\x85\x45\xae\x54\xa7\x4d\xa8\xd3\x26\xe4\x69\xc3\x54\xfe\xa5\x8e\x1b\x98\xf3\x6b\x75\x2e\xac\xf5\xd0\x74\x97\xc8\x31\x13\x8a\x5b\xdf\x9e\x55\xe2\x8a\x1a\xea\x5e\xbb\xe3\xd3\x6e\xc1\x60\xc7\xa9\xbe\x1e\x6a\xc9\x3b\x6c\x2e\xe8\x45\xc1\x42\x42\xaa\x4b\xe3\xac\x17\xef\x9f\x54\xb8\xae\xae\x59\x31\xd7\x5d\xc4\x9e\x14\x7e\xeb\xb2\xc8\x9b\x79\x54\x2e\x14\x6e\x18\x3a\x07\xf6\xa1\x71\x2a\xbf\x38\x1a\x73\x04\x67\x52\x2f\x77\x36\x9f\x87\x43\x8c\xdc\xd8\xa2\x7d\xa3\x05\xc0\x15\x45\x43\x3c\x7c\x35\x39\x55\x8d\x7b\xf0\xc0\x4c\xd4\xdd\x8f\xb7\x7b\xba\x1c\x0c\xf4\x80\xbb\x6a\x1d\x37\x66\x8f\x3c\x97\x8f\xa4\x4a\x2d\x5b\xc5\x37\x23\x4c\x5f\x4b\x87\x7e\x13\xa1\x91\x91\xfe\xa9\xb3\x32\x97\xce\x71\xe1\x8b\xfe\xef\x29\xfc\xef\xdf\xe4\xff\xee\xcd\x4f\xf3\x5f\x64\x0f\xcd\xb3\xf1\x97\xfb\xc9\xb3\x9b\x50\xc6\x55\xc1\x2c\xc6\x9a\x47\x4e\xff\xfd\x5f\xdf\x64\x62\x99\xf0\xac\x98\x97\xab\x18\xed\x46\x38\x8e\xbe\xc8\xdb\x9f\x9e\x8b\xf4\x7f\x0c\xc4\xee\x7f\x23\x17\xee\x73\xfa\xef\xe0\x86\xa8\x28\x65\xf6\xed\x28\xa5\x66\xce\xb1\x2f\xa4\x48\x52\xd3\x45\xdc\x8a\xbd\xc4\x4d\x93\x5a\x6d\x9d\x6d\x77\xde\x53\x44\xcf\xf0\xbc\x09\x68\x7f\xae\x68\x4e\x61\xbc\xd1\x75\x56\x49\x0e\x80\x93\x28\x32\x69\x1d\x80\x39\x5c\x66\xd5\x85\x10\x9c\x5d\x6f\x04\x8d\xa3\x25\xa7\x8b\x48\xb1\x41\x20\xd8\xb5\x5e\xb5\xa9\x94\x6c\x18\x8e\x3e\xef\xa0\x60\xe1\x3d\xf0\xe0\x35\xb0\x2e\xd7\x95\x64\x55\x1a\x97\x80\x65\x61\x42\xd2\xae\x27\xd6\xb6\xa6\x7f\x9f\x35\x47\x61\x17\x40\xa5\x7f\xdd\x42\x17\x92\x97\x95\x6c\x19\xb4\xe4\x08\x4d\x40\xff\x20\x36\x53\xe5\x9b\x01\xf5\x97\x1e\x24\xa7\xb7\xac\xdc\x54\x72\x15\x83\xe2\xa9\x8e\x07\xf5\x44\xb5\xc6\xa5\xe4\x44\x1e\x6a\x05\x17\x81\xf5\x0c\x1a\xee\x1a\x17\x44\x25\x70\x29\xb2\x15\xed\x09\x22\xdc\x96\xff\xf9\xd9\x93\x67\x38\x82\x65\xe4\xed\xa7\x36\x1b\xb3\x79\x53\xd0\xbb\x93\x0f\xf4\xe6\xf2\xcb\x3a\xfe\xf4\x9f\x4f\xb6\xbc\x8e\xcf\xc9\xb3\xdd\x13\xf4\x09\xc9\xe2\xfb\x8a\x89\x3d\xc5\x9e\xfd\xfc\xec\xe7\x67\xcf\x6e\x24\xfb\xec\xb2\x9d\x0c\x49\x4c\x93\x0a\x72\xc7\xed\x76\x51\x84\x86\xe1\xa5\xeb\x5d\x9e\x6e\xe6\x45\x1d\xac\x5f\x8f\x36\x17\x81\x22\x2c\x06\x03\x61\x26\x9e\xea\x54\x8c\xeb\x4d\xb5\x54\xd3\xda\xba\x57\x7f\x7d\xe3\xc1\xb2\x51\x54\xfb\x9d\x69\xd5\x96\x92\xbb\x29\xde\x6c\xd8\x3c\x2d\x63\x54\xf7\xfc\x9e\xbc\xe1\xa9\xe0\x77\x4c\xed\xb6\xde\xb7\x63\xea\x46\xaf\xc7\x75\x14\x54\x3a\xbe\xaf\x47\xf3\x0f\xcd\xd3\x08\x00\x0c\x31\x83\xf4\xd6\x06\xfa\xda\xb4\x6e\x11\xa4\xbc\xfe\x11\x1a\x0c\x68\xe3\x44\xd5\xfb\x59\x02\xd3\x5d\xd4\xdd\x7d\x83\x1d\x90\x2b\xbe\xf7\x08\xf9\x42\x15\x3d\x8f\x1f\x71\x86\x50\xaa\xa4\x43\x0e\x2c\xa1\xfa\x5b\xb3\x87\xdd\xe5\x31\x1f\x8a\x6f\xc7\x91\x34\xbe\xf9\x30\x3f\xf2\xe0\x84\x79\xbc\x48\xf6\x38\x5e\xa4\xe1\xa5\xf1\xcd\x18\x91\x4e\x9f\x1f\xcc\x7f\x23\x69\xa7\xf8\x66\x77\x38\x28\x7d\x02\xa5\xa3\xdd\x7c\x5a\xd5\x12\xd2\x79\x7d\x80\xed\x06\x0d\xb6\xe5\x49\xf7\x7e\xa4\x47\x12\x64\x8f\xa6\x36\x6f\x3a\xd9\xed\x5e\x59\x41\x81\x9b\xbc\xc8\xf2\xfc\x3a\x9b\x7d\x26\xb4\x5e\xc2\x3e\x79\xa0\x29\xdc\x51\x57\x83\x21\xee\x39\x8c\x1d\x47\x50\x21\x1c\x74\x9d\x1e\x79\x76\xbc\x6d\x5a\xe0\xc2\x6a\x34\x60\x0e\xa3\x08\x7b\x9a\x8d\xc7\x0a\xfa\xc0\xd7\x7a\xbb\xf7\x90\x45\xc4\xc5\x3e\x7a\xc6\x0c\x77\x0f\xef\x93\x17\x87\x90\x45\x20\x84\x8c\xb4\xd8\x4d\xea\x62\xf4\x02\x13\xbd\xb7\x2e\x36\x01\x24\xc9\x73\xf5\x8f\x55\x67\xa1\x34\x8a\xbc\xc0\x3f\x7f\x4c\x25\x67\x37\xac\xe8\xb9\x68\xe6\x58\x90\x4f\x4f\x94\x8b\xbd\x28\x67\x65\x5e\x3f\x7b\x26\x7f\x2e\xcb\x4a\xc8\xb1\xd7\x9f\x30\x4d\xe4\x04\x68\xc9\x36\x8d\x86\xea\x37\x88\xb7\x5f\x67\x04\x00\x6d\xbf\x50\x7f\x83\x9e\x8e\x70\x67\x0a\x20\x85\xfa\xdb\x28\xc6\xbb\x3c\x1f\xe5\x2c\x0f\xe5\x6c\x0d\x0b\x9d\xf4\xf7\x86\x8a\x77\xf0\x65\x84\x41\xae\xb9\xa6\x76\xba\xdb\x8d\x16\x70\x55\x0b\x4f\x34\x63\xf0\xcc\x05\x12\xd2\xdd\x8e\x3e\xff\x5f\xd0\x43\x43\x27\xdf\xce\xed\x1e\x43\x78\x8e\x07\xf4\x7d\x51\xcc\xb9\x6c\xe8\xf7\x49\x84\x76\xbb\x7d\x6f\xff\x2d\x19\x45\xf2\xb2\x6b\xbe\x7f\x53\x5e\xb3\x9c\x9e\x5c\x65\x8b\x8c\xb3\x08\x0a\x90\xa0\xc0\x8b\x25\x2f\x57\xb4\xeb\xcd\xdf\x80\xee\x57\x27\xef\x97\xa0\x6e\x6e\xe9\xcf\x4d\x42\x5e\xf9\xf9\x96\xf1\x80\x6f\x87\x2f\xf5\xd4\xf0\x4d\x37\x46\x7b\x0a\xe5\x9e\x1a\x42\x9e\xe9\x23\x8e\x54\xcb\x09\xeb\x01\xb7\xc2\x6e\xc2\x6f\x7f\xaa\x40\x86\x67\x33\x8d\xac\xe5\x5e\x54\xc6\x15\x21\xfa\xbf\x37\x39\x5b\xad\x28\x7f\xa6\xd1\x9a\x8e\x70\x8a\xdb\x6b\x93\x37\xd1\xb2\xdd\x07\xbe\xf2\x37\x94\xbe\xf2\xcf\x69\x4a\xcd\x59\xb4\x98\x18\x56\x69\xfb\x35\x87\xe6\x41\xb3\x98\x2e\xb0\xd5\x82\x9e\x02\xda\x82\x1f\x1d\x17\xd4\x54\xad\x43\x52\x16\x71\x04\x7f\xfa\xa9\xb4\x28\x79\xae\x48\xbe\xe0\xec\xe6\x46\xb2\x0a\xed\x22\xa8\xde\xd7\x92\x97\x70\x6b\x4f\x43\x7e\x09\x54\xa3\xda\xb7\xc6\x3b\xaf\x79\x9d\x6f\xb6\xa2\xab\xeb\x9c\x02\x3f\x08\x48\x6c\x28\x44\x29\xd4\xbd\x4f\xe7\xe5\x8f\x1f\x7e\xf8\x68\x1b\x8a\x23\xbf\xd1\x08\x43\xcd\x9e\xba\x67\xb4\x59\x3d\x15\x78\x55\xce\x69\x5e\xa5\x3c\x74\x75\x00\x7f\xf7\x2c\xa1\x5f\x04\xcf\x66\x02\x54\xc5\x17\xfc\xa6\x82\x88\x25\x03\x32\xea\xba\xf5\xfa\x54\x7b\xa5\x3f\x72\xe2\x4d\x32\xfd\x4c\xe9\xfa\xa5\x5a\x19\xe7\xdf\x03\x40\x83\x90\xb7\x9c\xd5\x9e\x1b\x40\x03\xcb\xa6\x39\x2d\x6e\x0d\x75\x08\x82\x55\xae\x47\xa8\xde\xf0\xfc\x15\x38\x74\x07\xe9\xff\x83\xc1\x1a\x57\x2f\x53\xa8\x66\xd5\xc5\x4c\xb0\x5b\xcf\x91\xe1\x1b\xcf\x8e\xfa\xf7\x0d\x9b\xf1\x32\x67\xd7\xbe\xd9\xa7\xe1\xd4\x5f\x5a\xa7\x7e\xbf\x01\x1c\xcd\x36\x9c\xd3\x42\x99\x01\x10\xee\xf7\x59\x62\xc6\xfc\xba\x10\xb4\x10\x90\x97\x6e\x30\x88\xfb\xb1\x1f\x3d\x53\x20\x8b\x32\x8b\x4c\x38\x96\x1d\xd3\x9a\xd3\x75\xc6\xa9\xe7\x6c\xe5\xd6\x4d\xe5\x38\xae\x96\x59\x9e\x97\x77\x97\xbf\x6c\xb2\x1c\x22\x1d\x12\x60\x8b\x13\x6f\x1a\x10\xc0\x3a\xcd\xca\x9b\x82\xfd\xc3\x13\xbc\x2a\x03\xc0\xa6\x79\x8e\x30\xf4\x6b\xcf\xb4\x24\xae\x21\xe1\xb5\x7a\x51\xcc\x7f\x28\xb3\xf9\x37\x6b\xdc\xb4\x27\x02\xbe\xde\x33\x01\x89\x04\xe4\x03\x3a\xc7\x5b\x3d\xed\xd6\x03\x25\x05\xcd\x92\x81\x8e\x40\x71\x64\x7a\x6b\x16\x8c\x10\x76\x4b\xf6\x50\xad\x86\x71\x67\x5f\x69\x2b\x46\x20\xcb\xca\xed\x2b\x6a\xcc\xa2\x76\x14\x30\xb0\xa3\x46\x1f\xa1\x23\x99\xc3\xb6\xff\x71\xc7\x55\xb6\xf7\x7e\x5a\x97\xf9\xfd\x82\xe5\xbe\x8f\x86\xb9\xb2\xfe\x19\xfa\x53\x75\x6b\x30\x7b\x6b\x58\x97\xde\xed\x32\xab\x94\x53\x53\x23\xca\x43\x4f\x95\xf7\x3a\x24\xd7\xcd\xfc\x04\x5e\x9d\x90\x38\xea\xdc\xa9\xc6\x97\x78\x30\x60\x6d\x2a\x86\x59\x5d\x48\xb9\x20\x67\xff\x08\x0e\xa8\x1f\x59\x72\xe0\x1c\x6b\xa4\x40\x43\xe7\x40\xb8\xf0\x71\x3c\xbc\xfa\x2a\x85\x78\xe3\xb0\x98\x00\xfe\x6d\xed\x0d\x53\x99\xf6\x0d\xbe\x47\x89\x8d\xb2\x71\xef\x40\x4b\x40\x79\x6c\x10\x5b\xbc\xf5\x89\x68\x59\xa3\xda\x52\xdf\x57\x25\xd7\x53\xdb\xcc\x7a\x19\x7c\xef\xbe\x73\x2d\xd7\x06\xe4\xf5\x4a\xa1\x56\xe2\x8c\x94\xe3\xd2\x65\x16\x30\xaf\x71\xd5\xe0\xe4\x5c\x8a\x92\x91\x86\xd7\x13\xce\x4a\xcd\x87\xc4\x62\xec\x19\x28\x04\x0c\x4f\x74\x73\x10\x14\x0d\x51\x7c\x67\x2e\xa4\x90\xe3\xd2\x43\x9e\xd5\x34\xb8\x02\xdd\x47\x86\x70\xd1\x24\xde\x60\xf0\xc7\x7d\x16\x50\x24\x86\x99\x15\xe1\x94\x13\x9d\x32\x45\x83\x80\xe9\x1d\x62\x3d\x2f\x5e\x11\x77\xec\x0f\xd6\xf0\xcb\x34\x28\x85\xa1\x75\x07\xaa\x75\x90\x3a\xc9\x25\x3f\x50\x4b\x16\x39\x9e\xc2\xf8\x01\x08\x47\x4a\x9f\xbf\x9e\x34\xb8\x07\xed\xc8\x47\x7d\xf4\x60\x44\x10\x3a\xf9\x26\x5b\xd7\x2a\x54\x32\x20\x16\x50\xc0\x64\xff\xaa\x44\x56\x2d\x3b\x60\x18\x55\x21\x9d\xdf\xbb\x91\x6c\x58\xb7\x8d\xbd\x82\x2a\xb2\xac\x40\x72\xff\x40\x26\x39\x79\xc4\xb5\x8b\x8c\x6e\x9c\x2d\x62\x05\x87\x1f\x06\x2d\x9b\x40\xa8\x76\xaf\x36\xa0\x41\x05\xe9\x9e\x17\x3a\x4f\x7e\xca\x0f\x44\xaa\x1d\x11\x74\xf3\x9b\xaf\x55\x53\xed\xe5\xce\x9a\xf6\x19\x72\x23\x4a\xa3\xa1\x42\x06\x7f\xc4\xf7\x40\x38\xd0\x5e\x7f\xd0\x8e\x4b\xec\xb7\xd7\xc4\xe9\x98\xe1\x5e\xa8\xca\xd8\x0b\x17\x45\xb5\xf9\xad\x0c\xc3\x1c\x89\x06\x6e\xd1\x79\x19\xbf\xac\x73\x36\x63\x42\xa1\x92\x9a\xc4\x2d\xf2\x36\x29\x6c\x0c\x24\x2d\x20\xeb\x66\x99\xcd\x59\x71\x73\x25\x05\xb9\x4c\xd0\x8a\x78\x72\xb3\xd8\x53\xc6\xe0\x2e\x64\x62\xb6\xa4\x95\x85\x42\x2d\xd7\xe0\x83\x4a\x44\xcd\x1d\xb5\x37\x28\xc7\xb9\x1a\xe0\x86\x7c\x7a\x36\xdd\x14\x9b\x8a\xce\xa7\xf3\xcd\x6a\x75\x3f\xa5\x9c\x97\x7c\xba\xce\xc4\x52\x5d\x00\xd3\x27\x5b\x5a\x3f\x4b\xe1\xf1\x27\xb8\xc4\xe4\xfe\x8d\x0b\xb2\xad\x71\x4e\x04\x4a\x59\xcc\xe1\xb7\xc0\x39\xe1\x28\x2d\x88\xd8\xed\xb6\xf5\xa1\x6f\x1a\x0c\xe2\x4a\xbb\x17\x0f\xa3\x69\xae\xde\x46\x78\x2b\x45\x2f\x61\xc1\xe5\xd2\x22\x09\x1f\xd4\x08\x7b\xd5\x60\x40\x0f\x57\xc2\xa0\x94\xdb\xc8\x3d\x99\x1b\xf0\x2b\x13\xad\x8b\x9b\x85\x01\x51\x8d\xde\x9d\x94\xf1\x2c\x98\x42\xd4\xab\xe2\x39\x8e\xcc\x48\xe5\x38\xe6\x38\x32\x23\x30\x3d\xe0\x5c\xc5\x9f\xce\xdd\x38\x71\x81\xe7\xee\x62\x36\xfe\x8c\xee\xad\xb2\xda\x34\x11\x8d\xfc\x94\x4b\x36\x95\x86\x1e\x4a\x42\x8b\x1b\x56\xd0\xd7\xc5\xc2\xe6\xe0\x13\xda\xc3\x7d\x4f\xb1\x64\xb1\xc9\x73\xf9\x89\xfa\x7a\x1c\x9e\x6a\x18\x20\xc7\x63\x80\x95\x2f\x7f\xa5\xcb\xa5\x59\x8d\xf7\x75\xd9\x63\x72\xf1\x92\x8a\x72\x15\x85\xad\x63\x85\x19\x0a\x6b\x64\xf3\x39\x5c\x5b\xaf\x4a\x7e\x09\x95\x63\x81\x2b\xe7\xcd\xc9\xbc\x94\x50\x2a\xd1\xc4\xa7\x97\xf2\xc0\xb2\xe2\xe6\x24\x3b\x81\x6d\x77\x62\xbb\xe0\x27\x65\xa1\x9f\x19\xa8\xe7\x8d\xa8\xd8\x9c\x9e\x64\xc5\x89\x6a\xfd\x84\x55\x90\x14\x0a\xa4\x28\x3a\x4f\x3e\xa1\x9e\x51\xe3\x2a\xfd\xa7\xfc\x43\x45\x97\xf6\x49\xc8\xac\x18\x69\xad\x71\x42\x47\xe1\x99\x4a\xdc\x32\x39\x6e\x2f\xb4\xed\xea\x92\x81\x88\x14\x34\x6a\xcc\x76\x70\x16\xf5\x68\xf4\xe6\x01\x45\x31\x16\xe4\xb9\xcf\x22\x9d\x71\x97\xb1\x87\x0f\xc9\xff\x40\x22\x86\xd0\xdf\x44\x94\xf2\x8f\x21\xa0\xc3\xf3\xe1\xef\x27\xa8\xae\x57\xe5\x46\x41\xc8\x91\x6d\x1d\xf0\x9e\x66\x41\x38\xad\xca\xfc\x56\x85\x02\xbc\xc9\xd6\x0a\xfa\x89\xf6\x44\x92\xc9\xd3\x98\x13\xf9\x07\xb2\x38\x83\xfa\x80\xe4\xc0\x60\x34\x0f\x88\x41\x1c\x66\x45\x25\xb2\x62\x46\x5f\xcf\xd3\x62\x38\xc4\x30\x84\xf7\x25\x2b\x44\x3a\xc3\x66\xcb\xa5\xb3\x1a\x2f\x89\x32\x5d\xf6\x0c\xdc\xb3\x05\x03\x59\x02\xf8\x57\xf4\x2c\x1a\xe6\x06\x65\xed\x08\x6a\x94\x87\xd4\xc8\x38\xff\xf6\x4f\xf1\x8a\xec\xd9\xb6\xbd\x15\x24\xcf\x36\x26\xc0\x76\x01\x32\x37\xb9\xb1\xc3\x73\xe1\x4a\xa4\xf3\xf0\x50\x20\x7c\x63\x49\xc5\xad\xa4\x0f\x37\x21\x7d\xb8\x69\xd0\x87\x45\x2d\x79\x74\xb8\x2a\x14\x95\xb8\x41\x78\x43\x6e\x3c\xe2\x80\xd7\x26\x85\x54\xc7\xf8\x56\x0a\x3f\xe0\xfa\xe0\xb9\x8d\xb2\xb5\xdc\x6f\x4a\x76\xad\x75\xd6\xeb\x03\x74\x58\x4d\xdd\x3d\xc9\x7d\x2a\x3c\x25\x7e\x33\xee\xf9\xdd\xc1\xae\xa7\xd0\x9d\x26\x6c\xf7\x2d\xaa\xdc\xdc\x47\xf5\x83\xf4\xe2\x1e\xdf\x21\xac\x86\xa6\xe7\xb1\x31\x30\xfd\xf4\x88\x61\xe1\xa3\x87\x85\xed\x52\x1d\x31\xba\xfa\x81\x32\x33\x7c\x6d\xe0\x9e\x24\xf1\x58\xe2\x19\xde\x04\x38\x6e\x0d\x96\xaa\x6d\x72\x08\xd6\x13\x14\xf5\x8a\x63\xa8\x63\x8a\x06\x83\x3e\xa4\x78\x39\x57\x76\x14\xf5\x3c\x91\xf4\xf1\x93\x8f\x57\xa9\x45\x54\x79\x59\x5b\xa1\x54\x77\xdc\x3c\xda\xed\xf3\xa9\x1c\x49\x20\x6b\x0c\xf8\x1e\x68\xe3\x91\x4e\xe6\xad\x1e\x62\x86\x0b\xf0\x06\xd7\xd4\x1a\x3d\xda\x9d\x4c\x73\x82\x6a\xb3\x57\x11\x1e\x4f\x02\x2f\xbf\xc7\xb4\xd1\x19\xcd\xfe\x28\x53\xf0\xc3\x71\x48\xbe\xd5\xcd\xcf\x17\xbc\x50\x41\xac\x52\x24\xf6\x79\xe2\xeb\xac\x62\xb3\x08\xa9\x93\xdf\xe3\x84\x27\x4a\x13\x12\x6f\x8d\x17\x57\x1a\x23\xf2\xfc\x53\x6c\xc6\x3e\x07\x50\xe0\x13\xd7\x04\xfa\xa4\x03\xb0\x0a\xd2\x60\xb6\x9d\xe0\x6b\x21\xdd\x0b\xcc\xe5\x02\x79\x83\x29\xbe\x4a\xf7\xbf\x37\x48\x17\x4c\x68\x1d\xc2\x01\x47\x5b\xe1\x25\xed\x69\x0c\x95\x63\x46\xac\xc8\x50\xa0\x9e\xc5\xf2\x62\x52\x5a\xe8\x1d\xbb\xbe\x61\xd8\xfe\x7f\x07\x39\x55\xf1\xf9\x9a\xcb\x67\x95\xa7\x99\xb1\xb7\xcd\xad\x52\xbd\xd3\xc7\x09\x7a\x70\xdb\x3d\x65\xc5\xa2\xfc\x55\x27\x42\xa3\x22\x74\x9c\x81\x0e\xbd\xe0\x7f\x59\x94\xd8\x9c\xae\x39\x9d\xc9\xcd\xff\x74\x41\x33\xb1\xe1\xb4\x5b\xb3\x99\x89\x03\xae\xeb\x9a\x7a\x61\xad\x08\x99\xfe\xfd\x61\x64\x87\xc6\xa8\x1e\x4f\x5c\x8e\x04\x6b\xf8\x66\x5b\xf2\xca\x90\x59\x72\x8b\x41\xed\xf1\xb2\xf9\xbc\xc3\x70\x4d\x1d\x75\x26\x84\xdc\xd6\xde\x0e\xa7\xc9\x87\x77\x3f\x7e\xbc\xfc\x30\xbd\xfc\xeb\xe5\xdb\x8f\xd3\x97\x97\xef\x3f\x5c\xbe\xb8\x50\x08\x3e\xfa\xdd\xf4\xc5\xbb\xb7\x6f\x2f\x35\xaa\x8f\x27\x22\xaf\xf1\xaa\x3b\x35\xca\xad\x35\x4e\xf7\xad\x21\xf2\xbb\x53\x34\x18\x50\xa3\x94\xd9\xd6\x92\x31\x81\x40\x26\x0b\x9a\x77\x9b\xf1\x31\x9b\x10\xd1\x63\x90\xef\xf6\xbc\x90\xbf\x0c\x82\xba\x0a\xcd\x4d\x9f\x4d\xd9\xfc\x89\x4e\x0c\xc2\xd0\x60\x10\xb7\x0a\x45\x6c\x1e\x19\x29\xab\xb0\x6f\x5c\xc4\x71\x23\x4b\x6f\x5d\x77\x7d\xe4\xca\x20\x17\x7d\x75\x04\xa0\xce\xa1\x40\xb6\x35\xa4\x98\xb3\x1a\x3c\xeb\xd9\x62\x8d\x5e\x46\xf8\x97\x0c\xb3\x2d\x46\xee\xe2\xae\x30\x2d\x4c\x51\x3d\x05\x1d\x17\x5c\xda\x6e\x9a\x95\x39\x06\x14\xa7\x61\xfa\x11\x78\x44\xa8\xfe\xa3\x57\x58\xf4\xb4\xb8\x20\x31\x25\x42\x2e\x8a\x7e\xb9\xdb\x8d\x27\x0e\x33\x8d\x79\xb3\xaa\xbc\x6b\xa6\xbf\xac\x93\x5f\xd6\x15\xe4\x00\x76\x30\x6b\xa6\x45\x84\x33\x32\x3a\xcb\x5c\x5a\x88\xe1\x30\x43\xe5\x38\x9b\x28\x37\x0f\xf0\xe9\x48\x9e\x6c\x8b\x71\x36\xa9\x3f\xb9\xdc\x0c\x64\x74\x56\x39\x94\xb9\xe1\xb0\x32\xc9\x17\xd8\xb8\x9a\xf4\x22\x30\x07\x46\x84\x90\x3c\xa9\x66\xe5\x9a\x4a\x49\x45\xb2\x3a\xa2\x22\x25\xaa\xeb\x7a\x9a\x81\x6e\xf7\x2f\xef\x5d\x48\xb8\x05\x97\x32\x4a\xec\x56\x11\xd5\x94\xcd\x59\x07\xa8\xa2\x02\xd5\x53\x70\x18\x62\xc5\x8d\x57\xb4\xd9\x56\x47\x91\x64\xc3\x73\x48\xe9\xa4\x2e\xa5\x57\x25\x0f\xd0\x27\xf7\x87\xda\x41\x9b\x69\x34\xa4\x21\x88\xb4\xc1\x2d\xdc\xd6\x3d\x4f\x8a\xdb\x67\x6a\x53\x1f\xe7\x4c\x1e\xb8\x24\xec\x9c\x8d\xe7\xc9\xd5\xc7\x8b\x8f\x97\xd3\xab\x9f\xde\x7c\xff\xee\x87\x49\x7a\xb0\x0d\x10\x05\x70\x46\x78\xb8\x07\x0d\x52\xb0\x07\x33\x5e\x26\xea\x23\xc7\xd9\x44\x4a\x8f\xf7\x81\xf2\xdd\xb7\x86\xe6\x28\xe1\x74\xbe\x99\xd1\x18\x56\x84\x3c\x57\x39\xa9\xf3\xb1\x98\x60\x8a\x70\x85\x6a\x4b\x90\xdc\x85\xf9\x67\x7a\xef\xd3\xac\xae\x22\x9d\x69\x1d\xcd\x67\x75\x97\xe7\xa8\x9e\xd3\xc7\x36\xb5\xaf\x06\x47\xf5\x54\xf3\xfb\xaf\x4a\xee\xbf\xf2\xfc\xe1\x83\x53\xe3\x99\x60\x92\x68\x68\x77\x8b\xc6\x9f\x3b\x50\x70\xcd\xcb\x35\xda\xed\xb6\x75\x0d\x5c\xba\x63\xc3\x3a\x06\x5e\xd3\x2f\xce\xd1\x7e\x4e\x61\x53\x28\x89\x32\xf4\x84\x70\xaf\x22\xf3\x4a\x83\x8c\xff\x95\xd1\xbb\x2a\x46\xf5\xd4\x5c\x80\x1f\xa8\x86\x57\x0b\xf5\xe8\x76\x14\xbd\xc2\x47\x51\xe8\x24\x16\x4a\xc4\x4c\x58\xa1\x36\xa9\xe9\xb2\xf9\x39\x85\x0a\xc1\xa4\x85\x4a\xb5\xb7\x52\x1a\x77\xd9\xca\x78\x62\x12\xbb\xed\xfb\x20\xf7\x39\xb5\xff\xd9\xdb\xda\xff\xbb\xc3\xd5\xa3\x6b\xd1\x9b\xc5\xe2\x11\x5e\x1e\x86\x45\x80\xb9\x5a\xd1\x39\xcb\x84\x77\x04\x6d\x27\xf2\x42\x13\x38\x49\x12\x0e\x57\xd4\xc1\xc6\x7a\xc1\x50\xf6\x36\xac\x9a\x43\x35\xa7\x0b\x4e\xab\xa6\xf3\xc6\x7e\x7b\xbc\x2a\x0d\xf4\x27\x70\xfe\xd8\x3f\x1b\x8d\x52\x0f\x4f\x86\x4d\xaf\xe7\xb2\xe8\x35\xb6\x8c\xac\xe3\xab\xc0\x34\x9c\x73\xa3\x94\x24\xa0\x0c\x1c\x5a\xd8\x22\x2e\x48\xa6\x6b\xb4\xc5\x91\x98\x99\x8c\xc4\x9e\xa4\xa4\x53\x0b\x75\x6c\xc7\x08\x61\x2f\x23\x46\x75\xee\x8a\x54\x38\x5a\x7b\x77\x41\x15\xa1\x74\x3c\x39\x6b\x40\xfc\x09\x1f\xda\x74\xeb\x13\xec\x58\xc1\x9d\x18\xdc\xc5\x57\x25\x37\x37\x8b\xe2\x35\xcc\x01\x02\x97\x13\x45\xfc\x1d\x4a\xa3\x66\x47\x34\x22\x6e\xd1\x99\xe4\xbf\x50\xf0\xcc\x9d\x6f\x00\xa8\x59\x8f\xc0\xe7\x25\xa1\x5d\x0c\x69\x22\xfc\x24\x1e\x2f\x80\x85\x46\x31\xe4\xed\x80\x76\x01\x5c\x52\x25\x56\x47\x3a\x8f\x7e\x36\x9f\xbf\xd3\xe8\xf8\xd0\xcc\x10\x20\x55\x30\x55\xc0\x29\xfa\xe2\x83\xd4\x05\xa8\x46\x71\x81\x37\x1e\xcf\xa3\x96\x81\x14\x1a\xeb\xb2\x7b\x1d\x16\x64\xa6\x89\x83\xc2\xa8\xf5\x09\xc9\x22\x01\x15\xee\xbb\x5b\xca\x39\x9b\xd3\x4a\xce\x3d\x6c\x3e\x60\x7b\x80\x3e\xc2\x22\x35\xbc\x76\x44\xf3\xca\x53\x5b\xec\x75\xb1\x28\xb5\x56\x73\xad\x2f\xd2\x6b\x07\xf2\x83\x57\x44\xd6\x7b\x7f\xf1\xe1\xe2\xcd\x95\xa9\xd8\x9b\x25\xc1\x6e\xe8\x80\x86\x9f\x25\xab\x6c\x3d\xa6\x93\x9e\x30\xa2\xdd\xca\xc5\xd6\x2f\x93\x59\x96\xcf\x36\x39\xf8\x1e\xcf\x96\x54\x52\xfb\x58\xa8\xe1\x34\x2e\x58\xa1\x58\x19\x6c\x9a\x91\x9c\xd5\xda\xf0\x07\x4c\x92\xc5\x64\x53\xcc\xe9\xac\x04\xad\x80\x66\xf4\xc1\x8f\xcb\x0f\xcd\x97\xf4\xb3\x34\x19\x25\x6f\xc9\xbd\x4e\x2e\xdf\x9c\x10\x57\xc5\x67\x86\x0b\x7c\xab\xd5\x58\x70\x7e\x5b\x64\x59\xfb\xdb\x79\x90\x22\x56\xdf\x55\x2d\xcb\x4d\x3e\xff\x20\xf7\x16\xd7\x69\xb7\x39\xfc\xf8\x48\x57\xeb\x1c\x22\x89\x2c\x54\xc0\x22\xdf\x54\xcb\x8b\xea\xbe\x98\x99\x9d\x55\xa1\x58\xee\xa0\x00\xcd\xc7\x18\x56\x1b\x29\xf4\xfc\x15\xdb\x3f\xc5\xbc\x73\x8a\xb9\x9e\x62\x6e\xa6\xb8\x57\xa8\x9d\xa4\xe6\x17\xd5\xf5\x35\x5d\x94\x9c\xbe\x91\x8c\x26\x5c\x1c\x0b\x49\x39\xcd\x2f\x4e\xe7\x8c\x2b\xff\xf9\x5a\xb3\xf4\xd6\x91\xd0\x5a\xa8\x95\xb9\x1d\xea\x10\x9f\xf9\xaf\x81\x7b\x05\x43\xb2\x81\xb2\x97\x62\x61\xe7\x5d\xb9\xca\xd6\x5e\xca\xb2\x1c\x24\x20\x04\x02\x54\x00\x90\x24\x39\xe1\xdd\xae\x1a\x0c\xa0\x84\x49\x55\xb6\x21\xb9\x32\x3e\xc4\xcf\xfe\x33\x4e\xfe\x15\x81\x90\x84\x4c\xc8\xdc\x06\x32\x23\x6d\xc6\xa7\x13\x9c\x11\x3a\xce\x27\x72\x9b\xf5\x47\xb5\x4a\x2e\x23\xe7\xdb\xe4\x35\x6a\xb2\x7b\x8a\x33\x2d\x8c\xe9\x00\x6c\x18\xdf\x9d\x1a\x78\x69\x23\x42\x1d\x38\x79\xe3\xb0\xee\xd3\xd3\x89\x9d\x1b\xff\xce\x59\xb0\x62\xae\xa6\x9c\xe1\x2c\x60\xd7\x42\xb7\x69\x30\xb2\x40\x39\x1d\x3c\x62\x39\xee\xc6\xa5\x42\x91\x5c\x5a\xd7\xac\x7f\xcd\x35\x67\xbf\x12\x25\xa7\x11\x82\x41\xa8\x82\x75\xf3\x28\x68\x87\x1e\xea\xa7\x9e\x77\x39\xeb\x40\xea\x54\x82\x8a\xec\x35\xbc\xc9\x3c\x05\x61\xa7\x40\xc7\x08\xef\x14\x08\x06\x03\xd6\xb8\x39\x07\x83\x98\x92\xe6\x43\xa4\xf3\x19\xf1\x6e\x63\x3c\xf5\x32\x0d\x75\x5c\xa0\xd6\xcd\xaf\x6b\x68\xce\x73\xd2\xc2\xb2\xa1\x58\x48\x09\x14\xbe\xd5\x93\x73\x04\xde\xfb\x71\x3e\x8d\x36\xa9\xf9\xbb\x99\x94\xf3\x47\x89\x39\x1a\xf9\xb9\x27\x88\x3a\xf6\xd9\x75\xee\xaf\x0e\x3b\xbf\x8b\x39\xa6\x28\xa5\xad\xf9\x31\x93\xac\x60\x6f\xd4\x11\x61\xc6\x8e\x5a\x0e\x06\xa5\xdb\x46\xbb\x1d\xe4\x98\x7b\x20\xa3\xa4\x4e\x37\x66\x36\xba\xda\x71\x15\xce\x90\x83\x98\x0f\x5f\x49\x09\xd8\xac\x8a\xec\xcf\xa7\x1f\x75\x83\x82\xfa\x29\x3b\xe5\x0b\x08\xbf\x83\x3f\xbc\x8d\xd5\xf4\x86\x30\x69\x33\xfa\x62\x30\xe8\xf3\x5e\xb9\xdb\xb5\x51\xf8\xc5\x6e\xc7\xcf\x19\x11\x69\xcc\x08\x4d\x84\xee\x4f\x7d\x35\xf5\x4e\x12\x27\x02\xa9\x4d\xe6\x29\xb4\x9a\xab\x4d\x11\x5e\x1a\xc5\x10\x07\x63\x22\xb0\xb0\x25\xe4\x8a\x2b\x44\xe9\x07\xd1\x3c\xbb\xc1\x51\x02\xbc\x18\x4f\xca\x8d\xc8\xa9\xc0\x4b\xc2\xbd\x6d\x8d\x67\x84\xab\x53\x8e\x7a\x1b\xb2\xd9\xed\xa2\x55\xc6\x8a\x08\x97\xe7\x71\x46\xfc\xa1\x55\xad\x81\x67\x90\xcb\x83\x75\x75\x57\x91\xcc\x73\xfc\x51\x66\xc7\xf2\x9c\xb6\xb8\xd3\x79\xf7\x41\xca\x50\xba\xf7\x8d\x9c\xb0\x66\x33\xde\x38\x55\xa6\xdc\x66\x9e\xdb\xa5\x81\x55\x5a\xf6\x96\x64\x4f\xd3\x0b\x54\xdb\x11\xcf\xce\x67\x84\x06\x5b\x25\x5d\x82\xa0\x64\x28\xcf\x0c\x59\x9d\x9c\x6b\xce\x4c\x4f\x1a\x0d\x2b\xd4\xcb\xc1\x04\x7a\xad\x60\xce\x25\xbb\xb9\x76\xa3\x84\x55\x33\x70\xea\x8a\x91\xd8\x82\x9e\x37\x9d\x63\xb9\x84\x69\x8e\xd5\x6a\xa5\x1b\x0c\xd6\xdf\x0c\x7b\x63\x5d\x2a\xbf\xed\x74\x86\x6d\x8f\xf6\x2c\xae\xce\x57\xf1\x1c\xa5\x34\x99\x8a\x72\xfd\x03\xbd\xa5\xb9\x94\x35\xed\x0e\x9f\x3b\xc8\xf8\xdb\xda\x78\x45\x08\xd4\x5b\x29\xf7\x28\xd0\x98\x28\x63\x13\xb0\x12\x9b\xa4\x2c\x66\xb4\xe9\xb2\x3d\xad\xa8\x78\x07\xc3\xab\xa4\x24\xc8\xaa\x59\x59\x14\x74\xa6\x9f\x79\x74\xaa\x27\x3f\xb4\x9d\x74\xf8\x5c\x10\x9a\xc6\x10\xa7\xa4\xb6\x24\xb7\x96\x36\x39\xd8\x73\xff\x47\xc7\xee\x32\x38\xf4\x08\x0b\x22\xec\x86\x55\x43\x6c\x0d\x06\x3c\x52\x5d\x66\x82\x83\x64\xcf\xf7\xff\x83\x0b\x15\x33\x32\x3a\x63\x4e\xc9\xc6\x86\x43\x54\x8c\x99\xbe\x73\xf7\xf4\x56\xb7\x1f\x7b\xd4\xe3\xda\x90\xfb\xc1\x00\xd2\x66\x04\x7b\x42\xd8\x3d\xe1\x46\xec\xad\x4c\xd7\x70\xb6\x26\xc3\x1e\x9b\xf4\x4a\x3d\x9f\x04\xfc\x2f\x4a\x20\x06\x1a\xbc\x0a\x14\xb7\x7a\x8b\x95\x2a\x3d\x8c\xda\x68\xaa\x94\xd9\x6d\xa6\x05\xb5\xe9\x4a\xd0\x23\xfa\x3b\xcf\x24\x48\x09\xb7\x9d\xde\x8e\x3a\x14\xff\xc8\x7d\x83\xea\xae\x88\xd8\xa6\x82\xa4\xf1\x5b\xfb\x7f\x78\x73\xe2\xb2\x54\x79\xd9\x2a\x9e\x8f\x06\x83\xb8\xa1\xd9\x38\x76\x54\xd7\x1b\x96\xcf\xed\x16\x78\x43\x45\x36\xcf\x44\x26\x39\x52\x67\xe4\xbd\x76\x77\x79\x78\x1b\x90\x91\x56\x10\x1b\xae\xad\x91\x13\xc3\xac\x9c\x9f\xe3\x1a\xc6\xd1\x48\x72\x3d\xe4\x06\xf8\xb0\x8e\x41\x10\x3c\xa4\x4b\xf4\x38\x40\xfc\xf4\xd4\xc5\x0c\x0c\x06\x5a\x0e\x72\x03\xbf\x57\xec\x71\xe1\x07\x3a\xbc\x2a\x39\x69\x3e\xd8\xed\xac\x3e\xb4\xc1\xe2\x2b\x16\x35\x2c\x3d\x66\x36\xe3\x63\xc7\x2b\x2f\x8f\x62\x68\xbe\xb4\xc8\x8e\xb2\x03\xcf\x90\xb7\xdb\xc5\xad\x67\x64\x5b\xe3\x80\x5f\x6e\x95\xc0\x3c\x88\xde\x90\x93\xd6\xa9\x56\xac\x8c\xe8\xa2\x26\xac\xd5\x0e\x42\xed\x67\x75\x6c\x97\x00\x17\x08\x67\xad\xf9\x82\xd3\x55\x07\xc2\x06\xf5\x55\xf8\x39\x19\x9d\xe5\x2e\xe1\xdc\x70\x98\x1b\x51\xa2\x1a\xe7\x13\x3c\x23\x1b\x90\x82\xa5\x94\x51\xf6\xb2\xb1\xfa\x35\x21\xb3\xf3\xd2\xfc\x9d\x4e\x63\x8b\x83\xac\x64\x52\x9b\x11\xd2\x2d\xef\xd4\x53\xe8\x36\x53\x70\x9c\x03\x2e\xd2\x05\x8a\xa9\xf6\x5e\x43\x28\xf5\x76\xc6\x9d\xb5\x6e\x50\xcb\xe2\x39\x5b\xbb\xf3\x35\xea\x75\x78\x4a\x40\x34\x1c\x4f\x3f\x3d\xd9\x72\xed\x11\xe1\xf2\x85\xde\x68\x4f\xef\x17\x79\x56\x55\xf1\x96\xa9\x18\x03\x6d\xdb\x56\xc6\xb6\x1b\x8f\xd9\xab\x3c\x7b\x9b\xa9\x1a\xb3\xe4\x02\x06\xa9\xa3\xd6\x31\x73\x61\x2c\xcd\x7c\x88\x07\x11\x6e\xb7\x35\xf6\x39\x18\x0d\x70\x0b\xd6\x18\xf5\x77\xc8\x57\xa8\x67\x20\xb0\xa4\xb0\xae\x26\xd6\x43\x29\x74\xfc\xa4\xca\x6d\x76\xbe\x21\x22\xb5\x84\x50\x7d\xa0\x0b\xe3\x0d\x62\x01\x33\xb6\x20\x19\x79\x1e\xd5\xa1\xa7\x83\x22\xb5\x96\xa1\x36\xa2\x64\x41\x0a\xe5\xf1\xa0\x25\x2b\x48\xc8\x81\xad\x4e\xb9\x53\x65\x65\x7c\x22\x4d\xc2\x43\x84\xa7\xbf\xac\x9b\x5f\xda\xc4\x7f\xa2\xb8\x3c\x52\xd1\xd8\x29\xa3\x54\x24\xeb\xe6\xbe\x4a\x79\x48\x0e\x28\xe9\xa3\x66\xf2\xd1\xdc\x45\x80\xc9\x99\xa8\x8c\xaf\x69\xa0\x68\x0c\x1a\x00\xa2\x46\x1b\x44\xc8\x18\x48\x31\x23\x5b\xff\x78\xa5\xfd\x11\x96\x3b\x52\xfe\x0b\x06\x2c\xf9\x47\x56\xc9\x1d\xeb\x08\x9a\xd5\x1b\x1c\x25\xb4\x50\x8b\x9c\x99\x91\x6d\x7d\x16\x90\xb3\x0c\xd3\x71\x39\xc1\x7c\x5c\x4e\x10\x2e\xc6\xe5\x84\x64\x98\xc9\x7f\xfa\xa3\x3a\xc8\xac\xce\x8f\xee\x8e\xe3\x0a\x0d\x06\x7d\x36\xae\x26\xc6\xca\xd7\xec\x35\xc7\x7c\x5c\x4d\x30\x95\x45\x70\x31\xae\x26\x24\xaf\xad\xa9\x36\x06\xd5\x8f\x8d\x81\x71\x82\xac\x4f\x2c\xe3\x19\xc2\xb9\xb6\xff\x6e\x06\x83\x18\x28\xa0\x27\xc1\x66\xb8\x44\x98\x12\xed\x6e\x38\x27\x90\xd3\x78\x5b\xe3\x15\x19\xbb\x8b\xe1\xf6\xb1\xf3\x78\x8b\x06\x83\x48\xe7\xb0\x32\xef\xa2\x3e\x21\xb7\x83\x41\xa4\x80\x8f\x22\x95\x88\x55\xb6\x7e\x43\xe8\xf8\x76\x82\xaf\xc9\x8d\xb2\x44\x4a\x8e\x51\x31\xf1\xf7\x46\x8a\xf2\xb6\xa2\x24\x66\xd7\x83\x41\x7c\x0f\x69\xdd\x64\xfd\x3b\x72\x93\x64\x95\xde\xe0\x7b\xec\x68\xb7\x08\x5f\x06\x3b\xef\x16\xf5\x2e\xc9\x34\xbe\x54\x4d\x7c\x21\x37\x89\x4a\x66\x0e\x44\x58\xa5\x3c\x47\xf1\x25\xc2\xef\xc8\xbe\x66\xe3\x4b\x7c\x87\xbf\x20\x7c\x45\x3e\x3d\xd9\x96\x75\xfa\x64\x7b\x5b\x7f\xc2\x1f\xc9\x76\x8f\x8e\x32\x0d\xbb\xc7\xc1\x66\xbe\xc4\xb6\x87\xb0\xd2\x3b\xef\x85\x79\x02\xdb\xfe\x0b\x56\xa6\xb3\xf4\x0e\xcb\xfb\x27\xbd\xc5\x6d\x33\x6e\x7a\xd5\xa4\x98\x25\x56\x02\x3f\x1c\x5f\x50\x05\xa6\xf7\x2a\xab\xa3\xa6\xb0\xea\x28\x5d\xd7\xbd\xf5\xf8\x76\x42\xd6\xe3\x3b\xf9\xbf\xab\x09\xf9\x88\xe7\x4a\xee\xf8\x88\xf0\x4a\xfd\x75\x6b\x6e\xb8\xed\x2f\xeb\x2a\x9d\xe3\x55\xb6\x4e\xd7\x38\x50\x16\xa7\x2b\xac\x14\xdb\xe9\xd6\x98\xbd\x52\x6d\x01\xd5\x57\x97\xd2\x1b\x03\xbf\xd7\x54\x7d\xd6\x78\x7f\x8d\xc0\x44\xd3\xac\xa8\x45\x8d\xa6\xa1\x9b\x4b\x22\x8a\x43\x75\xfa\xd7\xb6\xdd\x36\x7c\x03\x41\xaf\x11\xc2\x15\x35\x8a\x33\x9b\xf7\xf0\x28\x8d\xcf\x6e\xd7\x87\xd0\x57\x56\x7d\xa4\x95\x6c\x1b\xc5\x08\x05\x15\x5c\xcb\x90\x6f\xce\x82\x49\x18\x50\x54\x0d\xfd\x97\x01\xf5\x04\x6c\x6e\x50\x1e\x5b\x36\x4e\x01\x9c\x6b\x0b\x55\xad\xa6\x17\x20\xb9\x3d\x2a\xec\xd4\xb9\x5a\xcb\x77\xd0\x01\x22\x42\xc9\x2a\x5b\xe3\xb2\x91\x90\xd3\xa4\x53\x0c\x03\x82\x8d\x4b\x44\xe9\xbb\x44\x68\x03\x15\x1b\x97\xe3\x6c\x02\x03\xae\xb4\x2a\xd1\xf6\x94\x74\x9b\x98\x2b\x84\x23\x6d\xc9\x03\x05\x40\x84\x1a\xf3\xeb\x07\x99\x59\xad\x91\xb6\x13\xf6\xae\x39\xcd\x3e\x9b\x54\x76\xfd\x51\x8d\x17\xac\x68\x1c\xf0\x70\x1e\xd8\x22\x6e\x7a\x9f\xb6\xfd\x54\x5c\x8e\x45\xb8\xfb\xad\xea\xe9\x90\x52\xd8\x98\xfc\x0c\xff\x2a\x6f\xe0\x69\xc8\xbd\xc6\x70\xf9\xca\xc7\x6b\x85\x09\x53\x01\x7e\xf5\x59\xb7\x21\x48\x92\xf4\x46\x86\xdd\x4a\xb2\xb9\x6e\xda\x67\x46\xdb\x02\xcf\xc7\x33\x49\xf3\x17\x6a\x48\x78\x45\xd6\xbe\xf6\xe9\x96\x2c\xb4\x8d\x1e\xee\x80\xc1\xc0\xfc\xc4\x37\x26\xb9\xc1\xb5\x97\x76\x30\x87\x70\x2e\x53\x06\x9d\xc7\x37\xde\xb6\x59\xe1\x85\x32\xe3\xe3\x6b\xb2\xee\x24\xa9\x37\xd8\x36\xbf\x00\x2a\x8c\x50\x7a\xeb\x92\xf5\xc7\xd7\x70\x55\xa0\xc1\x20\xbe\x21\xeb\xa4\xdb\x2b\xe1\xba\xa3\x8d\xf8\x9a\x2c\x92\x6e\x0a\x8b\x6f\xc8\x34\x5e\x84\x9c\xbb\x24\x71\xdd\xd6\xfc\xf5\x3e\x53\xfe\x75\x9f\x04\x5d\xa8\x86\xb6\x4d\x61\xec\x5d\x91\xdf\x0f\x06\xfd\xd3\x3e\x31\x5a\xd6\x7b\xb2\xde\xb3\xc1\x17\xc8\xf8\x72\x43\xd7\xf7\xd8\x05\xe9\xf6\xee\xce\x19\xe9\x8f\x52\xc0\xbe\xbe\x03\x83\x46\xff\x54\x9b\x2b\x2b\x7f\xaa\x31\x38\xd5\x4b\x1e\xa5\x39\x36\x22\xe7\xa9\x7b\x4a\xd4\x0d\xdb\x2f\x0e\x22\x27\xec\x76\x42\x5d\x03\xda\x2d\xef\x1a\xdf\xb2\x8a\xe9\xec\x20\x9f\xe9\x7d\x7a\xbb\xdb\x99\x85\xa8\x51\xdd\x1f\x11\x65\x7a\x39\x64\xfe\xc2\x6c\x30\x28\x3a\x42\x92\xd5\xf6\x6d\x1b\x1e\x3d\x61\x4e\xef\x5e\x45\x94\x7a\xfa\xa7\xb7\x91\xf7\x79\x67\xe0\x48\xaf\xa5\x59\xc9\x1a\x61\xff\xa0\x25\xb3\x9c\x66\x3c\x56\xc4\x1d\x1f\xf2\x0e\x5c\xe3\x2a\x78\x7b\x05\xf9\x03\x0f\x94\x27\x5b\xe5\x94\xa8\x4e\x7f\x87\xeb\x5c\x5d\x3b\x11\x6b\x8d\xb7\x9e\x7d\x27\x48\x42\x69\x6d\x30\x8f\xb1\x18\x28\xfb\x82\xef\xa3\x95\x0a\xf0\x3c\x96\x33\x7b\x49\x6e\x3c\x1f\xdf\xcb\x47\xbb\xd7\x3e\xd6\xc7\xfc\xeb\x9c\x69\x1f\xe3\x32\xab\x63\x23\x0e\xb8\xfa\x3e\x1a\xf8\xf9\x98\x94\x79\x8f\x72\xa7\x7d\x6c\x22\xb8\xc7\x65\x8d\x9b\x6a\x9c\x39\xcf\x19\xf8\xe8\xc4\x6a\xfb\x1c\xfe\x57\x31\xda\xbe\xf1\xd3\x78\x4f\x15\xb4\xf7\x55\x5e\xde\x79\x7e\x3a\x6c\xe5\x10\x09\x8b\x52\xb0\xc5\xbd\x61\x52\xf5\x15\x1b\x6d\x78\x6e\xdc\xa1\x40\x89\x1f\xc4\x87\x6b\x1f\x27\x17\x64\x8e\x94\x23\x87\xd3\x15\x06\x5e\x50\x38\x9a\xb3\xb9\xeb\x3d\xf2\xd3\xac\x1a\x93\xd0\xe1\xfa\x77\x2c\xcf\xbd\x06\x24\x2b\x6a\x9b\xb8\x09\x7d\x8c\xbe\x26\x92\x40\xf7\x03\x2a\x12\x72\xd5\x19\x6e\xbb\x05\x0d\x50\x7a\x5d\x13\xa5\x25\xb2\xf2\x96\x76\xc4\xbd\xf7\xd0\x23\x1e\xe9\x88\x6b\x71\x3f\x74\x3c\xae\xf7\xd0\xb9\xdb\xb6\x5e\x01\x0a\x55\x77\x05\xef\xb1\xe4\x96\x21\x3e\x5d\xcf\x8a\xce\x08\xa3\x00\xa5\x4d\x09\x4d\x58\x6d\xd2\x66\xfd\x7c\x43\x37\x74\x6e\xd8\x69\x50\x27\xaa\x17\xa2\x5c\xe7\xc6\x4a\xe2\x77\xa5\x30\x10\xe6\x10\x2c\xd9\x6c\xcc\x84\x89\xa9\x70\xbc\xea\xc0\x70\x5c\x40\xd9\xf7\xf7\xea\x6b\xf6\x96\xf5\xf7\xa4\x37\x10\x6f\x5f\xfa\xc3\x03\xaf\xbe\xbf\xa8\x8f\xb2\x37\x27\x15\x94\xeb\x0f\x54\xbe\x85\x4c\x4d\x21\xff\x53\xe5\x2b\xab\x82\x24\x46\x1e\xf4\x8a\xb2\x8e\x60\xc7\x89\x07\x9a\x9b\xac\x6b\xe8\x7a\xbf\x54\x76\xbf\xd8\xcc\x5f\xdb\x1b\xed\x86\xed\xc1\xd2\x61\x4e\x80\x5b\xed\x98\x17\x29\x4d\x94\x80\x22\x51\x40\xd6\xd9\xcb\x60\x8a\x25\x83\x2a\x48\x99\x04\xb1\x66\xea\x2e\xa9\x88\xb3\x31\xe3\xdc\x59\x9e\x2b\xd0\x8f\x65\x63\x6a\x55\xd3\xb9\x79\x40\xfa\x23\xdc\xb7\x0a\x58\x1e\xa8\xd7\x54\x5b\x8d\x18\x22\x17\xed\x53\xe1\x8d\x09\x27\x42\x28\xec\xae\x06\xf6\x34\xf4\x3e\x17\x08\x97\x83\x41\x1f\xf8\xe8\x8e\xd8\x01\x14\xe7\xa8\x15\x98\x1b\x79\x81\xb9\xb3\x4d\x25\xca\x95\x8b\xcc\x3d\x51\xbc\xcb\x49\x59\x78\xa1\xb8\x2a\x52\x57\x07\xe4\x6a\xfc\x3a\x3a\x4f\x1c\x02\x6f\x5e\xcb\x1d\x64\xa3\x7b\xdd\x82\x74\x2e\x04\x05\x29\x49\x58\x63\x44\x33\xf4\x78\xb7\x5b\xb6\x82\x23\xea\x8d\x85\x92\x0c\xa9\x1f\xe0\xc1\x02\xc0\x83\x7a\xe7\xc1\x3f\x17\x01\xf4\x93\x24\x82\xa8\x0e\x28\xab\x1c\x67\xd9\x64\x79\x8a\x24\x28\x83\x1b\xbf\x63\xaa\x32\xa0\xb4\x40\x69\xba\x5a\x0a\x0b\xe2\xe6\x03\xa3\x26\xf0\xe9\xa9\xbe\xc7\x98\x25\xd2\x57\x80\x95\x1f\x17\xc8\xbe\x51\xb1\xff\x0e\x48\x4d\x7e\x46\x71\x18\x66\x0d\x9e\x79\x92\xb1\xac\xe0\xdf\x53\x3a\x0f\x21\x4d\x44\x19\xdc\x4d\x30\xbb\xcd\xb6\xf7\x23\xaf\xbd\x64\x8a\x9c\x05\xec\x1d\x4d\xee\xb2\xea\xe2\x1a\xf6\x8c\xe4\xb9\x99\xf9\x71\x1e\x8f\xf0\x3a\xc9\xcb\x1b\xf8\x8d\x62\x81\xd2\x58\xd8\xbe\xfa\xa7\x36\xdc\x96\x26\xf0\x07\x16\x58\xb3\xc5\x08\x17\xc9\x94\x55\xd0\x97\x52\xd9\xcf\x63\x5d\x08\x9d\x83\x6f\x9e\xc6\x08\x35\x1e\xca\xe1\xe7\x43\xc0\xa3\x2a\x2d\x7b\xcc\x64\xf7\xb1\x7b\x16\xe0\x3a\x73\x63\xb1\xb0\x8f\xba\xb6\x5f\x50\xe1\x81\x2d\xa8\x32\xed\x2f\x2d\xa0\xa9\xaa\x54\xd7\x8a\x58\xf8\x3c\xb0\xe1\x7d\xe1\x72\xa8\xf0\xcc\xaa\xc5\xcd\x3d\x99\xcc\xab\xdc\xe0\xa1\x56\xbb\xdd\xf8\x66\x82\xe7\xd6\xc7\x8e\xe5\xf3\x97\x57\x3f\xc4\xa8\x37\x37\x01\xea\xbe\xf4\xef\xc2\xd4\x71\x23\x82\xb6\x3f\xc2\xa5\xd6\x2e\x81\x53\x70\x55\x51\x0e\x2e\x3a\xfd\x51\x1d\x04\xad\x19\x09\x9d\x92\xd1\x19\xfd\x6e\x66\xa4\x73\x3a\x1c\xa2\xd9\x98\x4e\x94\x2a\x55\xb9\x28\x23\x84\x37\xc9\x2a\x5b\xc7\x21\x74\x82\x37\x4a\x3f\xee\x7e\xba\xcc\x34\xe7\xf1\x7d\x56\xd1\xf9\x07\xe5\x6d\x03\x1c\x98\x01\x27\xef\xbc\x40\x18\xd9\x76\x47\x45\xa7\x14\x37\xa2\xe5\x53\x4a\x9e\x17\x6d\xba\xfc\x74\x95\xad\xc1\xcd\x0a\xb7\x83\x7f\x55\x40\x64\x37\x41\xdb\xed\xe2\x3d\x6f\x88\x5c\xda\x9e\x97\x69\xdd\xa6\xf1\x84\xfb\x4d\x1e\xe7\x23\xae\xda\xed\x3e\x1e\xa3\xde\x3b\x57\xee\x36\x6e\x4d\x94\x24\xbf\x7d\xea\xe0\x3c\x6f\x5d\xaa\x6f\x63\x58\xf4\xb6\x4a\x32\x9d\xaa\xdb\x89\xdf\x4f\xa7\xc6\xf5\x09\x3c\x7a\x9a\x9d\xba\x0b\xc1\x20\x9c\x14\x80\xe0\xc3\x85\xce\x1e\xba\x97\x47\x90\x8c\x04\xcb\x72\x80\x5d\xb3\x11\xee\xe0\xb5\xa7\xd8\x8b\x18\xa1\xad\x03\x53\x05\xcf\xb9\xfd\x6c\x86\x07\x9d\xef\xe5\x13\xf1\x81\x86\x41\xad\x38\x18\x70\x7d\xe0\xd5\x05\xa9\x7f\xd5\x75\xd0\xaf\xcb\x44\xbf\x59\x9b\xe4\xbe\xb1\xc9\x73\xb0\x7f\x0c\x7a\x22\xfa\xc1\xa4\xb6\xf3\x79\x21\x83\x0f\xd0\x60\xa5\x30\x4d\x02\xf4\x64\x03\x81\xe9\x7f\x44\x8d\x70\x7f\x84\x6a\xcf\xb9\x20\xf6\x62\xc7\x58\xa5\xfd\x1e\x58\x71\x33\x18\x34\x9e\xd1\x79\x78\xde\x1e\xf2\x52\x91\xf3\x45\xdd\x81\x17\xb8\x50\x9c\xa2\xf2\x16\xa1\x1d\xde\x22\xd4\xfa\xb0\xe0\x8c\x2c\xdb\x11\x79\xe0\x5e\x51\x22\x5c\x79\xaa\x37\xb9\xb6\x99\x89\x3e\xab\xc8\x87\xb8\x00\x20\x34\x50\x15\x9f\x58\x4f\x5a\xb0\x73\x9b\x62\x67\xb9\xe9\x72\x43\x3e\x43\xf9\x6c\x9c\x4f\x50\xaf\x20\x9b\x24\x67\xfa\xb8\x57\x20\x90\x80\xbf\xc9\xcc\xb8\xa1\xcc\x6b\xb2\x49\xca\xbb\xe2\x4a\xb9\x37\x80\x0b\x5e\x6f\xd6\x27\xa4\xf4\xdd\x65\x94\xe3\x4f\x9f\x90\xf9\x6e\x17\x57\x5e\x0d\x54\x0b\x52\xd5\xa0\x22\xb5\x2a\x72\x9f\xcf\x47\xed\x47\x89\x5d\x27\x93\x95\xc1\xe9\xc0\x17\xdd\xf4\x6c\x4d\x16\x01\x89\xba\x65\xf4\x2e\x7d\xaa\xbe\x20\x32\x11\x26\x81\x78\xb1\x36\xbc\x33\xea\x10\x3e\xda\x23\xc0\x0b\x6b\x2a\x7d\xea\x9d\xf8\xa7\x06\x07\x24\x85\xef\x47\x92\x03\x7a\x01\xed\x7e\x28\x4b\xf0\x99\xea\xfa\xe4\xba\xae\x43\x34\x6f\xab\xdd\x07\xe4\x9b\x67\xff\x12\x27\x43\x74\xfe\x0c\x8d\x47\x0d\x0b\x45\x0b\x75\xd5\xb6\x02\xfe\xb7\xad\xf7\x9e\xaf\x53\xd7\xf6\x1d\xd3\x49\x2c\x20\x57\xa0\x25\x47\xef\x63\x8e\xd5\x94\xf2\xfd\x38\xb1\xb3\x87\x71\x62\xbf\x35\x3e\xec\xac\x13\x01\xb5\x39\x3b\x4d\x70\xd8\x03\x71\x4a\x06\xb9\xb5\xf3\x58\x3f\x54\x0b\xbf\x39\x2a\xa0\xa8\x3d\x81\x1d\x48\xb2\x4d\x98\xd8\x03\xeb\xd5\x82\x94\x0d\xbe\xdf\xe6\xa9\x72\x58\xef\xdc\x03\x9d\xed\x0e\x76\x72\x9f\xec\xca\xd5\x0d\xdc\xc0\x8e\x68\x41\x5f\x40\x6e\xc2\x0c\x6a\x56\x1d\x2c\x58\x07\x67\xd9\xf0\xaf\x06\x1f\x77\x1f\x26\x66\xb3\x9e\x0f\x8e\x09\x0c\x41\xdc\xdd\x41\x68\x23\xf2\x42\xc2\xa0\x4a\x67\x0e\x08\xff\x98\xda\x0b\x27\xa0\x0c\x36\x3b\xe3\x3e\x9d\x85\x79\xb1\x57\x2d\xa3\xfb\xef\xf9\xd7\x4a\x43\x8b\x61\x4d\x3a\x42\x59\xe3\x2d\x30\x12\xfc\x1c\x8b\x09\x02\xc6\x9a\x6f\xa4\xac\x33\x16\x93\x31\x9f\xe0\x48\x8f\x2c\x42\x07\x43\x83\x1b\x8c\x91\xe4\xbb\x44\xb7\x8e\x6d\xba\x60\x3e\xde\xa7\x3b\x07\x87\xe3\x85\x9d\x3a\x3d\x9b\xcb\xc7\xf5\xde\x76\xac\x9f\xa1\x7f\x4c\x02\xe0\xce\xce\x21\x3b\x24\xec\x23\xf4\x2e\x0d\x6e\xc4\xbf\xcb\x6d\x6e\xc3\x22\xcc\x47\xdb\xad\x73\xe9\x74\x65\xa6\x83\x81\xc5\x2d\x63\x5d\x89\x44\xfd\x00\x67\x79\x65\x22\xcd\x09\x75\x26\x5d\x2a\xbd\x7b\x2e\x23\x5b\xd6\xcc\x11\xda\x3b\x54\xd9\x3a\xa4\x99\x7b\x2d\x43\xa8\xae\x5d\xea\x28\xe3\x06\xef\x8f\x3d\x2e\xc0\x48\x23\x6c\x28\x87\xcd\x73\x5a\x20\xdc\x85\xf6\x97\xa8\x94\x1a\x2a\x4b\xa9\x4a\xae\xd1\x5d\xce\xa6\x80\x82\xf4\xd2\x2e\x1f\x14\xac\x48\x87\x1b\x20\x6c\xd0\x0b\xeb\x03\x8d\xa5\x08\x81\x19\x52\xe1\x86\x0c\xcd\x69\x4e\x05\x3d\x11\x63\x3a\xc1\x62\xcc\xb4\xa9\x69\x42\x98\xb6\xfd\x74\xd9\x06\x39\x36\xe5\xb4\x97\x87\x9e\xdd\xae\x80\xf3\x9e\x80\x73\xa0\xf9\xd7\xae\xb6\xc0\x81\xca\xf8\x8a\x70\xc8\x0b\xde\xf9\x29\x81\x3c\xaf\x42\x1b\xe9\x39\x4d\xa3\x8c\xf3\xec\x5e\x39\xe7\xfd\xe9\xea\xdd\xdb\x44\xed\x24\xb6\xb8\x8f\x29\x4a\xa3\x68\x48\xeb\x7d\x1e\x92\x9d\x53\x53\x80\xb6\x61\x30\x88\xc3\x99\x29\xb4\xaf\x62\xa1\xe7\xa5\xdb\x6a\xca\x71\x61\x66\xa6\xd0\x56\x53\xf9\x35\x7b\x43\xc5\xbb\xbe\xe7\x5a\x89\x2d\xea\x8b\x22\xc1\x37\x14\xd2\xb4\xa5\x51\xb1\x59\x5d\x2b\xcf\x1d\x71\xfe\x16\xfe\x8e\x29\x52\x11\x68\xef\x16\x31\x0a\x66\x02\x26\xf5\x02\xc5\x30\x23\xeb\x8c\x57\x92\xa4\xa3\x94\xd6\xd3\x35\xdf\x14\x74\x8f\x35\xb2\xcd\xd5\x34\x2c\xe8\xd4\x73\xd9\x3e\x81\x1c\x0b\x1a\xfb\x89\x43\xf0\x62\x31\x51\x31\x46\x7b\x0d\xa2\x62\x5c\x4c\x06\x03\x3b\xb3\xc5\xa4\xae\x3b\xb0\x95\x1d\xa4\x94\x72\x25\x9a\x41\x02\x36\x65\x7a\x03\x3d\x31\xe8\x45\xe3\xae\x2b\x08\x61\x00\x3d\x56\xaf\xd6\xbc\x9c\xd1\x4a\x5f\xa1\xae\x13\x7f\x0b\x30\xc9\xdd\xeb\x84\x6d\x95\x87\x8d\xcc\xbd\x2c\x52\x4d\x70\x66\x55\xc7\x49\x97\x3a\x92\xa5\x9b\xaf\x08\x28\x30\xeb\x46\x50\x76\x1c\x62\xa6\x39\xc4\xac\x3e\x66\xf0\x76\xb2\x1a\x1e\x32\x7b\xcd\x95\x66\x5a\xb7\xb5\x71\x6f\xf4\x7c\x21\xf6\x7c\x40\xb3\x8d\xf1\x3a\xf9\xcb\x8f\x97\x1f\x7e\x9a\x36\x02\x5c\x83\x28\xc3\x0c\x95\xe0\xc2\x90\xa3\xdd\x2e\x66\xe3\x7c\x42\x94\x48\xa4\x6f\xbf\x4d\x9e\xdf\x5f\xcd\xca\x75\x0b\x71\xda\xe6\xbf\xdb\x5f\x84\x35\xd6\x0a\x94\x91\xf5\x5e\x10\x6d\xb7\x97\x3e\x7a\x71\x20\x5a\xc3\x73\x3f\x07\x74\xed\xa2\xda\x48\xb9\xc3\xbf\xeb\xe4\x2a\x73\x7f\x8d\xf1\x5e\x12\x56\xc5\x2c\xf0\xb4\x46\xb8\xd0\x5e\x74\x87\xcf\x5a\xa3\x56\x3d\xbd\xa1\xe2\x2f\xef\xdf\x50\x91\xc5\x9e\x4b\x32\x94\x31\x1b\x84\xeb\x4b\x05\x64\x79\xae\xcd\xf4\x75\xfb\x90\x5a\xa9\x47\xc3\x5d\x73\x42\xc7\xe2\xe9\xa9\x02\xc1\x36\x97\xb2\x31\x33\x8d\xf9\x24\xb8\x49\x0b\xeb\xe4\xee\x60\x5b\x70\x89\x33\xd2\x1f\xe1\x5c\x6e\x9d\x0d\x19\x4f\xb0\xf2\x88\x11\xe0\x06\x23\x2f\x12\xdd\xa6\xf7\x0d\xe3\xd9\x04\x39\x71\x7d\x4e\x46\x67\xf3\xef\x98\xef\x41\x33\x1f\x0e\x91\xbc\xdc\x7f\x59\x57\xe3\xf9\x04\x6f\x94\x23\x44\x09\x21\xc5\x95\xe7\xbc\xc9\x24\x6d\xd1\x2a\xcb\x8c\x68\x55\xd1\x92\x80\xbf\xdc\x06\xfc\xe5\x72\xab\xdc\xca\x2c\x6b\xe9\xbe\x8e\x2c\x11\x5e\xd6\x07\xb6\x14\x77\xc3\x2c\x70\xb0\x51\xfc\x25\x2a\xc9\x08\x67\xc4\xa2\xca\x94\xdf\x65\x67\xc3\x61\x89\x00\x4f\xa0\xf9\xf1\x6c\x5c\x4e\x10\x72\x78\x34\xda\xc7\xc7\x04\x43\xe1\x0d\x19\xe1\x19\x29\xfc\xd9\xd8\x7c\x37\x3b\x1b\x0e\x37\x28\xce\x49\x5c\xa9\x57\xe3\xcd\x04\x59\x87\x79\x3e\x18\x54\xf0\x63\xb7\xab\x3a\xb0\x66\x6c\x91\xf6\x2b\x59\xc1\x39\x1f\x41\x21\xed\x58\x34\x18\x48\x16\xa6\xab\xce\x60\x10\xf3\x71\xd7\x8b\x09\xe1\xe3\x7c\x82\x35\x09\x97\x7f\xa3\xfa\xf0\x41\x6a\xcf\x30\xec\xa6\x20\x9e\xa3\xea\x08\xca\x6e\x28\x59\x86\xc3\xbc\x7b\xae\x81\xb2\xd8\xb9\x96\x33\x3b\x6f\xce\xec\x1c\x66\x16\xb6\xa9\x99\x58\x2c\x77\x9e\x99\x5b\x21\x2f\x2d\x35\xb7\x6c\xcf\xdc\x42\x91\xae\xb9\x65\xde\xdc\x42\x21\x3d\xb7\x65\x9f\x90\xae\x1a\x72\x83\x8e\xbb\x5e\x4c\x88\x18\x97\x76\x66\xe5\xdf\x1e\xd3\xba\x54\x92\x7a\x47\x84\x3a\xeb\x8c\x50\x67\x3a\x42\x9d\x6a\xe7\x14\xd4\xdb\xd7\x69\x65\x98\xeb\x25\x56\x73\x80\x59\x23\x00\xa3\x9e\x56\xb3\x25\x9d\x6f\xac\x4a\xdb\xda\x88\x8c\x60\xf2\xa0\xbf\xc2\xb4\x6a\xbf\x23\x20\x1a\x99\xa6\xdf\x81\x88\xa4\xdd\x2a\x5c\xc9\x4a\xf9\x2d\xe0\x48\x5b\xaa\xc3\x3e\x22\x15\x6d\xdf\xf9\xce\x06\x7a\x3c\xe2\x66\xe4\x60\xe4\xb0\x6e\x6c\xbe\xc4\x16\xd6\xef\x7c\xd8\x75\x55\x86\x60\x09\x3d\xe7\x9b\xe1\xa3\xfd\x2b\x6c\x45\x6b\x73\x1a\x39\xc4\x57\x8d\x26\x70\x68\x82\xb7\x7b\x27\x18\x2e\x8b\x3c\x51\x75\x0d\xbb\xd4\x51\xee\xd0\x1a\x49\xbe\xb4\x9e\xae\x32\xfe\x19\xec\x5c\x17\x95\xb5\x74\xb9\xd4\xd1\x9e\x07\x81\x15\x4c\x9b\x76\xb1\x86\xda\x21\xac\xa4\x61\xf6\xa7\xe0\x24\xf6\x47\xef\xd5\xbe\x5e\xd4\x19\x81\x3a\x6d\x23\x7a\x07\x8e\xb0\xf0\x51\x84\x8b\x10\xc9\xb8\xa5\x20\x60\xca\x94\x22\xff\xe9\xf2\x05\x30\xc1\xf1\xf2\xbd\x76\x0e\xee\x5b\xc8\xec\x2e\xf1\xf6\x2c\x2e\x49\x96\x80\x91\xe9\xc5\x92\xe5\xf3\xc6\x70\x29\xde\x9a\x40\xa4\xb4\x3f\x6a\x0c\x14\x25\xd7\x65\x29\x45\x41\xdd\x1b\x29\x6d\x90\x77\x1d\xc4\x43\x85\x69\x30\xa8\xc5\xa1\x3e\xe3\xcf\xc9\xe8\xec\xe9\x53\x17\x66\x33\xe6\x13\xcc\x8c\x18\x13\x5c\xfc\x4c\x63\xbf\x8a\x98\xe1\xc2\x28\x1d\x95\x49\xf0\x8e\x6c\xef\x58\x9e\x6b\x1b\xcb\x1b\x8d\x40\xe1\x52\x99\x74\x53\x08\xe5\x7e\x4e\x8d\x31\x36\xcc\x9e\x80\x19\xa1\x63\x37\xd0\x49\x4f\x7e\x05\xd8\xb7\x94\x68\xca\x9d\x73\x67\x49\xbe\x48\x11\x5a\x19\x62\x41\xec\x2f\x5d\x20\x5e\xd7\xe6\x14\x90\xa2\x63\x9f\xa6\xb1\xc4\x02\xe1\xfe\x69\xad\x96\xec\xd2\x6f\x5a\x1b\x4c\xb2\xdd\x2e\xfe\x9a\x96\x33\xd5\x32\xaa\x11\x0e\x71\x7e\x60\x59\x70\x41\xc6\x93\x1e\xdf\xa7\x32\x68\x3f\x53\xb6\xa0\x8f\x4b\x5e\xde\x15\xe7\xc1\xaf\x94\xf6\xc4\x60\x50\x28\x8e\x49\x40\x98\x6d\xcc\x93\x15\xad\xaa\xec\x86\xda\x17\xf6\x09\xc2\x3c\xa9\x44\x36\xfb\xec\xbd\x82\xdf\x08\xb7\x14\x2f\xdc\x95\x41\xa8\x37\x2b\x8b\xaa\xcc\x75\xdf\x71\x92\x24\x05\xaa\x63\x81\x23\x98\x96\x93\xbb\x25\xcb\xe9\x89\x96\x54\x58\x71\xa3\x9c\x34\xd2\x93\x68\x68\xd2\x99\x80\xa4\x56\x63\x4d\xcf\x9a\xf2\x25\x2e\xba\xf7\x80\x55\x4f\x00\x3b\xea\xef\x01\x0b\x85\x1d\xec\x82\x03\xd8\x56\x65\x73\xa9\x5d\x0b\x86\x65\x3c\x8f\x0f\xd4\xcf\x60\x41\x53\x91\xac\xd9\x6d\x29\xfe\xe8\x52\xc6\xd4\xa8\xae\x9d\x0f\xdf\xa5\x0f\x6a\xd6\xa0\x02\x14\x61\x4f\x17\xcf\x70\x70\x53\xa7\x25\xd6\xd7\x48\x9a\xd5\x84\xe2\x4a\xc5\xc1\x4c\x21\xbe\xd0\x82\xe0\xc5\x05\xce\xf0\xa7\x27\x5b\xa6\x5f\xe0\x0a\x9d\x57\x41\x5e\xcc\x2f\xdf\x6e\x00\xcd\xa0\xc7\xf2\x5c\xa4\x30\xa8\xa4\x63\x50\xcd\xc2\x4c\x15\x66\xba\x70\x7b\xa0\xef\x5a\x89\x96\x9c\xd6\xb9\x90\xe2\x3b\x44\x43\x7d\x50\xc6\xde\x4c\x5b\x38\x1c\xe2\x00\x07\x64\x84\x56\x09\xe3\x1c\xe5\xf2\x32\xb1\xc1\xa0\x74\xbd\x5e\x05\xc2\x72\x5f\x47\x95\x58\x1d\x95\x75\x4e\xca\xec\xdd\xff\xe9\x45\x56\xfc\x4e\x9c\xe8\x5b\xf9\x44\x45\x79\x9c\xfc\xee\xc9\x96\xd7\xbf\x3b\xb9\xa6\xb3\x6c\x53\xd1\x93\xfb\x72\xc3\x4f\xb2\xf5\xfa\x64\x99\x55\xb2\xf4\x82\x15\xac\x5a\xd2\xf9\x89\x13\xfb\xe5\xb1\x60\x85\x28\x4f\x98\xa8\x4e\x16\x8c\x57\x42\x9d\x92\xe4\xe4\x63\xe9\x5a\x2f\x4c\x07\x65\x71\x32\x87\xc0\x15\xf8\x30\x55\xb4\x3a\x99\x6f\xb8\x72\x95\x72\xed\x62\xd9\xf9\xc9\x2c\x2b\x4e\x66\x59\x9e\x9f\xfc\xfc\x49\x05\xb6\xa0\x9f\x3f\xc9\x36\xc4\x92\x9e\xfc\xfc\xc9\xed\x64\xf9\x14\xc8\xcb\xc9\x3a\xab\x2a\x39\xc0\x52\x97\x01\xcb\xd0\x33\x0f\xaf\xe8\x99\x03\x2b\xfa\xf9\xd3\xc9\xb2\x2c\x3f\x57\xc9\x27\x54\xfb\xb2\x60\x45\xfa\xa7\x38\xf7\xaf\x99\x5c\x5e\x33\xf9\xd3\xa7\x92\xc9\x2e\x49\xcc\x00\x12\x48\xfb\xc9\x48\xa6\x58\x07\xc9\x78\x7f\x8e\xf9\x44\xad\x05\x68\x6f\x75\x54\x8d\x77\xf1\x80\x47\x76\xac\x29\x33\x21\x84\xcb\xba\xd6\x2f\xbb\x83\x34\x17\x60\x2a\xeb\x55\xa4\x3f\xd2\x6e\x2c\x77\x5a\xb4\xdd\xa0\x8d\x1f\xb5\x33\x06\xab\x48\xa1\xd9\xeb\x13\x39\x86\x6a\x30\xe8\x0b\xd4\xb9\x0d\xde\x96\x62\x29\xe7\x5e\x73\x20\x30\x6b\xc1\x66\x48\x4e\x5e\x2f\x60\x2d\xe6\x6c\xae\x4b\x79\x85\x30\x70\x3c\x27\xf0\x19\xb0\x5a\xd7\xf4\x04\xf6\xce\xfc\xe4\xfa\xfe\x44\x7d\xaa\x6c\x5e\xf0\x0d\x3d\x59\xf0\x72\xe5\xed\x05\x9d\xa0\x0a\x14\x2a\x1e\x70\x37\x86\x06\xa0\x92\x1b\x8b\x28\x4f\xae\x37\xd7\xd7\x39\x85\xb5\x32\xdb\xfe\x63\x4b\xfa\x22\xb4\xcd\xb6\xca\xa9\xf1\xb2\x10\x6a\x62\x01\x92\x59\xca\xf0\xda\xe8\xa9\x48\xa1\x43\x8f\x58\x67\xe8\x51\x36\xe9\x55\x09\xab\x34\x8f\x30\x3f\x2f\xc7\x15\xe8\x1b\xa4\x88\x61\xda\xf0\x1e\x39\x34\x26\x0b\x6d\x85\x5c\x54\xa6\xfd\x82\x37\x31\x75\x11\xc2\x47\xf9\x08\x80\x0e\xc3\xc7\xff\x3d\x61\xe4\x5e\x57\x7d\x9f\x89\x65\xac\x42\xdb\xc7\x85\x97\x59\xac\x30\xd0\x2f\x37\x92\x37\xef\xf0\xe2\x38\x0b\x94\xf9\x7e\x2e\x2c\xad\x90\x6a\xbd\x74\xe9\xb5\x70\xd6\x5d\x02\xcc\x01\x1a\x47\x2e\x6f\xd3\xec\xae\x00\x62\x9f\xd8\x02\xf4\x4a\x99\x5c\xbc\x7f\x3f\x7d\xf1\xf1\xc3\x0f\x53\xed\xf8\xf7\xfe\xc3\xbb\xf7\x57\x83\x41\x1c\x0c\x92\x15\x27\xf9\x6e\xd7\xed\x65\x9d\x37\xbe\x07\x50\xfc\x62\x44\x9e\x87\x6e\x23\x61\xfa\x2f\xf5\x41\x5d\x6e\xe8\xa8\xd9\x20\xea\x98\x92\xe3\xc6\xe3\x4d\xe1\xc1\x41\x79\x99\xcc\x8e\x1d\x99\x57\xc5\xcf\x9d\xf0\xde\xe7\x50\x1a\xb2\x20\x16\x2d\x29\x90\x76\x48\x78\x81\x01\x77\xb7\x13\x5d\xae\xf8\x52\xe4\xda\x27\x06\xae\x79\xb9\x62\x15\x25\x34\x99\x01\xf8\x1a\x55\xac\x50\x5f\xb4\x9d\x0d\x8d\x57\x2d\xed\x89\xa4\x53\x78\xaa\x71\xe4\xae\x00\xe5\x78\xeb\x3b\xf2\x5f\xb4\xd4\xed\x2d\x85\xbf\x40\x61\x18\xb8\xf2\x44\x3c\x32\x30\xbb\x44\xa8\x88\x4b\x88\xf6\x56\x4a\xbc\x71\x39\xf1\x67\xfb\x85\x03\x63\x70\x76\x58\x32\xa6\x93\x33\x6e\x83\xde\xcf\xcc\xe9\xe7\x26\x40\xd3\xa0\xc7\x15\x73\x0d\x2c\x40\x08\x11\x4e\x67\xa9\xbe\xa4\xd0\x08\x2f\x55\x38\x7c\x86\xb8\xe2\x6d\x59\x63\x28\x9f\xb5\xed\xc7\xc6\x1a\x6e\x55\x07\x69\xa1\x9d\x75\xaa\xb4\xcb\xa5\xfd\x2e\xab\x7e\xac\xe8\x3c\xed\x9f\x1a\x0d\x24\xa8\x98\xe4\x7d\x7f\x2e\xbf\x4e\xfd\x89\x52\x0e\xb8\x14\x9a\x02\x30\x33\x36\x6c\x46\x89\x4b\x94\x52\x52\xe2\xad\x73\x17\x4a\x29\x36\x7e\x3e\xa9\x2f\xeb\x7d\x80\x35\xf3\xd8\x39\x5e\x9b\x19\x7a\xa1\xf2\x24\x98\x99\x00\x77\x40\xdd\x53\xb2\xca\x58\x61\xbf\x49\x49\xc8\xdc\xb8\x21\x29\x07\xa3\xda\x7e\xe8\xb6\xae\xb1\x40\xf5\x7d\x08\x69\xb1\x82\xec\x3e\x81\x18\x1f\x3a\x7e\xc6\xad\x67\x36\x63\x58\xd0\x90\x5f\x22\x6d\xd5\xa9\x8d\xaa\xdd\x7f\xa8\xd3\x24\xa9\x37\x35\xf6\x68\xb9\x03\x61\x52\xd2\x95\x9f\x5c\xad\x91\x1a\xd2\xcf\x7b\x34\x1c\x02\xc0\x80\x14\x86\x21\x8b\x3d\x9f\x34\xf3\x8a\x7b\x80\x04\x25\x39\x3d\x2b\x5d\xdd\x72\x38\x54\xed\x0a\x42\xc7\xa5\xba\x3b\xbc\xc4\x5a\x98\x93\x6b\x75\x00\x0a\x64\xf7\xf1\x60\xd0\x67\x10\x39\x7d\x86\xdc\x3e\xd6\x62\x56\x92\x24\x26\xd3\x96\x29\x8e\xdc\x4d\x98\xfc\xbd\x64\x05\x34\x5c\xd7\x08\x9b\x35\x89\x0b\x87\x0d\x12\x78\x86\xa7\x2b\x1c\xba\x77\xa7\xb7\x36\xd7\x6c\xf4\x2c\x72\x39\x6a\xa3\x65\x56\x2d\x23\xbc\xe1\xb9\x4a\xf8\x78\x00\x0a\xe3\x90\x87\xa1\x67\xba\xb7\x28\x70\x16\xe1\x87\xda\xeb\xb3\x46\x92\x32\xb7\x9c\xd3\xed\xe7\x2c\xf7\x47\xf8\xa9\xfb\xf1\xef\xe4\xde\x8b\xa5\xfb\xfb\xe3\x63\xe9\x4c\xe0\xd6\xa3\x33\x56\xb4\x03\xd1\x7e\xfb\x54\x81\x07\x33\x83\x78\x6a\x17\x18\xac\x72\xd8\x24\xd4\xf3\x32\xe7\x44\xf8\xbf\xfe\x54\xa9\xc0\x1a\xde\x76\x3f\x02\x6d\xbc\x4d\xf8\xd6\xaa\xd2\xb3\xae\x9c\x9a\xf1\xee\x68\x40\x9b\x34\x32\x2f\x35\xbf\x14\x02\x06\x03\x3f\x6e\x9d\x79\x89\xac\x1d\x9a\x72\x80\x0b\xca\x42\x9f\x2b\xef\xdb\xf6\xa4\xc8\x2d\x70\xa5\x81\x60\xc3\x3c\xd7\x15\xce\x02\x8c\x24\x17\x9e\xfe\xa8\x4c\x29\xc2\x53\x33\x7f\x4d\xa6\x14\x1d\xb5\xf8\x8d\x42\x38\x0f\x84\x5e\x3e\x18\x8a\xf8\xeb\xf7\x67\xd3\x43\x30\x48\x07\x72\x6b\xd0\x3a\x25\xd3\x62\x40\x97\x02\xb5\x8e\x90\xd2\xdb\x91\x4c\x43\x08\x66\x73\x4e\x93\x75\xb9\x8e\x51\x12\x02\x1c\x19\x10\x21\x77\x0d\x3a\xfc\x06\xed\xea\x48\x03\x57\x47\x51\xd7\x90\x7d\xa8\xe5\x46\xd0\xfe\x12\x42\xdb\x61\xbe\xed\x47\xe3\x72\x2f\x14\x81\x1c\x4b\x03\xb0\xcc\xee\xec\xb1\x68\x48\x1d\x72\x58\x0d\xec\x81\x46\x76\x63\xb6\x88\x85\x4e\xa6\x71\x25\x0b\xd2\x79\x13\x75\x4d\xde\x7d\xed\x96\x21\x35\xd2\x91\xc9\x96\x41\xf1\x32\x3a\x2b\x1d\x74\xdb\x70\xe8\xc8\x82\xe4\xdf\x00\x5c\x42\x67\x51\xee\x55\x5e\x7a\x65\x92\x41\xa8\xb7\x4a\x09\x22\x8f\x9e\x06\x0d\xf4\x12\x8a\x64\x10\x5f\x14\x7e\x83\x94\xd2\x31\x6d\x1b\xb4\x02\xdc\x22\xc9\x40\x04\xe0\x19\x51\xa4\xc7\xc9\x5b\xe3\xcc\x09\xf0\x99\x1b\xc8\x2e\x9f\x23\x3c\xf3\x9c\xba\xc1\x41\x7a\x33\x18\x6c\x24\x0f\xa8\x99\xbc\x39\x19\x41\x06\x10\x48\x98\xf8\x6e\x11\x6f\xd0\x79\x9e\x54\x9b\xeb\x4a\xf0\x78\xe3\x52\x5a\xa6\x79\x6f\xe6\x5d\x80\xc5\x78\x33\xc1\x73\x6d\x8c\x0e\x5e\xe0\x1c\xf5\xd8\x90\x7c\x4a\xd3\x27\xdb\xbc\x4e\x9f\x6c\x67\x0e\x1f\x8c\x0e\x1d\x7c\x68\x86\xa3\xa7\x11\x92\xdf\x7e\x18\x73\x28\xd8\x98\xd6\x69\x91\x6c\x6b\xdc\xc1\xcb\xe4\xc0\xca\x78\x29\x68\x84\xec\xc0\x77\x25\x26\x1b\x90\x2d\x9a\x50\xfb\xa4\xad\xa7\x66\x44\x8c\x47\x13\x5c\x76\x68\x11\x33\x52\xfa\x18\x69\x92\xcc\x7b\x40\xb9\x2d\x55\xb2\xc2\x81\xde\xc4\xcc\x0f\xff\xb3\x89\xda\xe3\xe8\x3d\x2f\x6f\x78\xb6\x5a\x65\x82\xcd\x3c\xcd\x56\x75\x72\x7d\x7f\xf2\xe3\x87\x1f\x4e\x66\x59\x51\x94\xe2\xe4\x9a\x9e\x80\xbe\xe4\x8e\x89\x25\xf3\x42\x02\x93\x93\xf7\x39\xcd\x2a\x78\x0b\xaa\x10\x15\x22\x58\x28\x8b\x6d\x25\x68\x06\xe1\x81\x8c\x7c\x7a\xb2\xcd\xea\xe4\xc9\x96\xd5\x9f\xb0\xfc\x36\xc2\x6a\x7f\x9a\xfc\xdb\xa3\x63\x3e\xe4\xe9\x1a\x61\x46\x46\x70\xde\xf8\x63\x41\x9c\x38\x52\x12\x4e\x17\xab\x59\x0c\x87\xb5\x6d\x54\xa0\xa3\x5a\x94\xb7\xff\x60\xc0\x86\x43\xcb\xe8\x13\x42\x58\xad\x7d\x90\x9e\xfd\x9c\x3c\xbb\xe9\x85\x69\xfa\x42\xcb\x90\xc7\xa9\x16\xf2\x3c\xa9\xf0\x09\xde\x11\x3e\xc1\x35\x31\x1f\x61\x36\x3c\x45\x8e\x11\x35\x4a\x16\x61\xcf\x4e\x89\x10\x20\xc1\xf4\x0a\x67\xa0\xf2\x74\x38\x79\x38\x99\x34\x90\xc9\x5a\xbb\x06\x32\xd5\x73\xb2\xad\xd1\xb8\x98\x90\x6d\xa6\x20\x95\x6a\x5c\x10\x8e\x8c\xfe\xf6\xa8\x99\x2a\xa4\x00\xaa\x49\xa5\x9a\x9d\x62\x5c\x4e\x7a\xad\x0e\xb3\xc1\x20\xce\xa0\xa3\xac\x06\xf8\x9f\x71\x39\xd9\xed\x4c\xc7\x1a\xcb\x49\x83\x69\x01\x3c\x23\xf3\x9c\x8f\x32\x84\x65\x79\xc2\x3d\x19\x6d\xe3\xa5\x5a\xec\xf0\x6b\x8d\x23\x70\xe8\x83\xe8\x00\xf9\xc7\x78\x34\x39\x94\xdc\x5a\x01\x36\x3c\xd3\x89\x5d\x0f\xb3\x13\xa6\xb0\xc7\xc6\x68\xab\xd2\x43\xa5\x57\xec\x0b\x2b\xaa\x67\x36\xc8\x6a\xcd\xcb\x2f\xf7\xc7\xd6\x9a\x95\x85\xc8\x58\x41\xf9\x91\xd5\x66\xe5\xfa\x98\x42\x2b\xc9\xf3\x3d\x58\x8e\x55\x4f\xa9\x3c\xba\xc7\x0e\x56\x79\x49\x1e\xfd\x65\x72\x10\x92\xbe\x1d\x3b\xdf\x0e\xea\xf0\xc8\x0a\x30\x9e\x23\x27\x2e\x58\xd3\xc7\xd5\x99\x95\x9c\x4e\x1f\xb7\x19\x94\x6a\x59\xdb\xde\x0f\xc2\x89\x84\x53\xb6\xbe\x3f\x6a\xc2\x74\x79\x5a\x6c\x56\xf4\xb8\x29\xd6\x35\x9e\x3e\x6a\x73\x96\x00\x8e\xf3\x98\xf6\x57\xea\x46\x9b\x3e\x7e\x64\x4a\x9d\x37\xd5\x13\xa7\xa3\xd4\x8f\x9e\x08\x25\xd1\x1f\x5b\x5c\x2b\x0a\x8f\xdc\x05\xf4\x8b\x78\xc6\xab\xdb\x3d\xc8\x2c\x5e\x41\x49\xa7\x9e\x96\x8b\xa3\x1a\xb4\xfe\xe9\x47\x63\xa0\xe0\x15\xbe\xc5\x37\xf8\x1a\xdf\xe3\x29\xbe\xc3\x97\xf8\xcb\xaf\x15\x4e\xf6\x56\x78\xa7\xf7\xfa\xd6\x2d\x63\xda\x1f\xe1\x1b\x2a\x52\x4f\x94\xb3\xf1\xff\x9a\x2b\xa9\x0f\x35\xf9\x8a\x67\x2b\x7a\x57\xf2\xcf\x8f\x6c\xbb\x51\xef\x60\x1f\xda\xae\x79\xff\x5e\x2e\xeb\x1b\xb9\xd4\x47\x76\xc3\x8f\xfa\x84\x17\x86\x54\x3f\xba\xfd\xe2\xa8\xf6\x15\x69\x3f\xaa\x41\x76\x64\x83\xfa\x1a\x38\xaa\xcd\xf2\xa8\x36\x59\x75\xa9\x6e\x8c\xa3\xda\xcc\x8e\x6a\xf3\x42\x5d\x2b\x47\xb5\x58\x1d\xd5\xe2\xdb\x4c\x8a\x9c\x8f\x6b\xd7\xab\x73\x78\xb4\x47\xb7\x78\x71\xb0\x9d\x37\x8a\x54\x3e\x6e\x90\x7e\xa5\x83\xad\x73\xba\x2a\x6f\xe9\xc5\xb1\x07\xad\x4a\x4c\x85\x83\xad\x6e\x0a\xf6\xcb\xf7\xc7\x8f\x56\x15\x7f\x60\x3f\x3d\x6e\x02\x74\xf9\x07\x0e\xaa\xe3\x3c\x8e\x6a\x36\x3f\x72\x53\x59\xf6\xe4\xa8\x56\x37\xc7\x6f\xfe\xf7\xea\x22\x3a\xaa\xd9\xd9\x51\xcd\xaa\x17\x8f\x69\x77\x7e\x24\x11\xe4\xf4\x51\x24\x7c\x79\xdc\x2c\xf8\xf0\xdd\x47\xb6\xbc\x38\x72\xc0\x86\xa7\x3a\xaa\xd1\xf5\x51\x8d\x5e\x7a\xec\xcd\x51\xcd\xae\x8e\x6a\x76\xfa\xe8\x9b\xe5\xf6\xb8\x76\xc1\x4b\xa0\x10\xaf\xca\x63\xe7\xf6\x36\x71\x55\x1e\xd8\x67\x8e\x45\x3c\xaa\xe5\x9b\xa3\x46\xac\xe9\xdc\xa3\xe7\xf9\xfa\xa8\xd6\x95\x0e\x53\xed\xb9\x2b\xc3\x69\x1e\xd5\xfe\xfd\x71\xdb\xc3\xb0\xa3\x47\xb5\x39\x3d\xaa\xcd\xf7\x8a\x67\x7d\xf4\x0e\xb9\xf3\x5a\xdf\xcf\x22\x7e\xb8\xfa\xeb\xfb\x23\x1b\xbc\x3c\x6a\xb8\x65\x01\x6a\x77\x1d\xc1\x73\x74\xd3\x61\xb5\x83\x3d\xa8\xb8\xc7\x23\x5b\xfe\xa2\xc3\x24\xeb\x1a\x3d\xa8\x2e\x08\x24\xe8\xe3\x95\x06\xc7\x72\xff\x6d\xf1\xf8\x37\xb4\x8a\x59\xc5\x0a\x8d\x4b\x9c\xa9\xe4\x72\x84\x90\xcc\xd8\x19\x47\x3d\xcf\xa2\x64\x22\x49\x0d\xd2\xbe\x7b\x92\x29\x73\xa5\xf1\x0b\x8f\x08\x21\xd5\x60\x60\xd9\x66\x13\x77\x5b\x22\xc8\x9f\xe5\x01\x1c\xe9\x79\x44\x96\xc7\xec\x78\x09\x23\x6b\xb5\x9f\x77\xb4\x9f\xa1\xc1\x20\x3b\xd0\xfe\xd3\xd3\x7f\xed\x7c\xad\x10\x89\x95\x67\x1b\x8b\x8b\x71\x35\xc1\x05\x04\xd5\x69\x75\xdc\xc6\x8c\x6f\xd3\xab\xee\x98\x98\x2d\xe3\x0a\x6d\x67\x59\x45\x6d\x44\x69\x0a\xbf\x74\x18\x69\x6a\xb8\x70\x35\x72\x78\xa5\x95\x55\xde\x2b\x85\x45\x47\x5f\x98\x21\x20\x3c\xd2\x65\x95\x1a\x25\x75\x08\xc9\x06\x90\x1a\xcf\x2d\x80\x0a\x5e\x92\x37\x99\x58\x26\x2b\x56\xc4\x33\x3c\x47\x78\x41\x46\x67\x8b\xef\x96\x67\x0b\xa3\x65\x5c\x13\x1a\x97\xe3\xc5\x04\x67\xe3\x85\xfb\x94\xb5\xf9\x94\x75\x6d\x87\x22\xeb\xab\x9e\xed\x04\xa7\x4d\xc9\xc7\x2d\xe1\x79\x19\x2c\x4c\x3a\x52\x55\xe7\x99\xa0\xc1\xe7\xdd\x50\xf1\x91\xad\x68\x8c\x70\xe6\xfe\x46\x3d\xdd\x9e\x29\x39\xaa\x6b\x8d\x4f\x04\xb0\xf4\x72\x07\xcf\xd3\x11\xa4\x94\x48\x4f\xb1\x9e\xde\xf4\xf7\x58\x4d\x6d\xfa\x3f\xb0\x9a\xc8\xf4\xdf\x30\xcc\x52\xfa\x3f\xb1\x52\xbc\xa4\xff\x6e\xa3\x12\xd2\xff\x65\x5d\xc4\xd3\xff\x8d\xc1\xcc\x9b\xfe\x1f\x2c\xc7\x97\x9e\x8e\xea\x96\x1f\x83\xd6\xde\x3e\x35\x89\x49\x62\xfe\x7c\x84\x9e\xc6\xfc\xbb\xd1\x11\xaa\x43\xa7\x72\xeb\x20\x04\x0d\xfc\xd7\x6f\xa9\x4c\xb4\x9a\xa0\x0e\xf5\xc0\xb7\xa7\x0e\xd6\x5a\xd6\x4a\x4b\x47\x77\x3b\x9d\x0a\xd7\xb9\x26\x80\x65\xbb\x99\x3c\x06\x80\xf7\xc2\xad\x44\x91\xf3\x66\x90\xdf\x13\x3b\x1b\x8b\x47\x96\x00\x13\x0f\x97\xdd\xdd\x0b\xdb\xbd\x83\x1b\x34\xc9\xef\x34\x08\x54\x5c\x11\x66\xb5\xe9\x02\xa1\xe7\x64\x64\xa9\xcd\xb8\x9a\xf4\xc0\xf9\xd5\x38\xfb\xb3\x45\x1c\x0e\x5c\x28\x13\x43\x46\x8c\x1f\x09\xc2\x1c\x1c\xaa\x4a\x55\x27\xd3\x09\x49\x94\x86\xff\xe9\xd3\xea\x39\x19\x9d\xa1\x6c\x5c\x4d\x08\x8d\xe5\x3f\x7a\xf4\xb5\xf1\x87\x6d\xcd\x82\x40\x48\xb6\x0e\x13\xa0\xca\x62\x2e\xa9\xa4\x6e\xde\x3a\xd2\x8a\x13\xb3\xbf\xcb\xc5\xc9\xcb\x4c\x50\x94\x81\x1b\x9d\xfc\x33\x16\xde\x09\x6b\x57\x57\x46\x3c\x30\x0d\xa8\x10\x62\x30\x75\x79\xa5\xf0\xd1\x06\x92\x1c\x0d\x06\xd1\x74\x1a\xf5\x21\xc3\x3f\x98\xf4\x58\x71\x13\x8f\xf0\xef\xd1\x60\x00\xf1\x82\x84\x9f\xd3\x58\x8c\x73\xf3\xe5\xa9\x80\x40\x46\x9b\x6a\x08\x76\xa9\x38\x1f\x4f\x94\x09\xc0\xfe\x75\xe4\x61\x0b\x74\x63\x78\xdc\x51\xda\x4b\x7d\x7b\x8c\x5f\xc0\x11\x20\xcd\x0f\x9f\xb1\x22\x79\xf5\xe3\x5b\x40\xbe\x9a\xbe\xff\xf0\xee\xe3\xbb\x8f\x3f\xbd\xbf\x9c\x5e\xfe\xc7\xc7\xcb\xb7\x57\xaf\xdf\xbd\xbd\x1a\x0c\x68\x72\xf9\xf6\xaf\x09\x3c\x79\xe9\x8a\x5c\x25\xaf\x74\xbb\xd6\x86\x1f\x1c\x53\x46\xab\xd8\x94\x70\x4b\x83\xb7\x26\x85\x45\xba\x9d\x95\xc5\x82\xdd\x6c\x2c\x77\xe3\xf3\x3a\xa7\xf8\x8e\x33\x1b\xfd\xa4\x0e\x78\x8b\xf3\x69\x78\x28\xf9\xc8\x2f\x2a\x60\xbe\xae\xb1\x52\xf3\xd2\xea\x5b\x75\x57\xda\x64\xd5\xdd\xdd\x15\xdf\xac\xa3\xa2\xbb\x8b\x23\x99\x3c\xa7\xd8\xf5\x89\x7b\xa8\xea\x3d\x84\xca\x0d\xac\xea\x53\xd0\xf1\x43\xc4\x61\xb8\xe5\x1e\xde\x55\xfe\x4d\xd5\xce\x16\x67\xc2\x2d\xb4\x19\x0e\x50\x2c\xbd\x38\x26\xd4\x20\xa5\xbe\x13\x86\x57\xac\x6d\xb3\x13\x90\x46\xd0\xc1\xc9\x0a\x64\xc9\x72\xf7\x55\x22\xe4\x55\xc2\x69\x56\x95\xc5\xf4\x8e\x89\xe5\x14\x9a\x9f\x82\x5d\xba\x98\x4e\xed\xe5\x42\xc3\x55\xac\x11\x16\xb5\x06\xeb\x8b\x7e\x2c\xac\xfb\xc4\xfc\xc7\x0f\x3f\x5c\x9a\xd0\x04\x0a\x6e\x11\xde\x37\x7a\x5e\xb7\x1a\x66\xb4\x5d\xcc\xdc\x2a\xa6\xf5\x56\x46\xdf\x97\xac\x5a\x67\x62\xb6\x34\x59\x56\x90\x72\x7d\xed\x1b\xa8\x40\xd1\x93\x9f\x5d\x7f\x0d\x76\x76\x28\xa0\x10\xd6\xf2\x40\x83\xe3\xa6\x36\x37\x8d\xa3\xac\xba\x2f\x66\x11\x36\x49\x5e\x78\x72\x9d\xcd\x3e\x5f\x6f\x78\x41\xb9\x8d\xdf\x8d\x23\x1d\xd7\x11\xa9\x4c\x5b\x10\xb8\x8a\x1a\xed\x2c\x00\xd4\x9e\xee\x6d\x83\x27\x53\xb9\x71\x61\x62\x01\x7d\x48\xb7\xa5\x5a\x2a\x0b\x13\x0e\x82\x99\x89\xc2\x14\x9e\xaf\x5c\x79\xd4\x79\x71\xe6\x42\x77\x5e\x82\x5d\xfe\x1b\x72\x26\xd4\xcf\xb7\xef\x63\xfa\x28\x7d\xb4\xe3\x34\xf4\x03\x7d\xdb\xd3\xe6\xad\x3a\x18\xb4\x2f\x5a\xdf\xe7\x52\x5d\xb2\x92\xe1\x70\xbf\xec\x86\x93\x8f\x8f\xbb\xc6\x1a\xe6\xb6\x87\x3d\xd9\x1e\xe9\xe2\xd6\xc0\xf5\xb7\x97\xdc\x4d\xce\x56\x2b\xca\x9f\xdd\x66\x39\x9b\x67\xa2\xe4\x47\x3a\xb6\x59\x52\x94\x05\x49\xa8\x5d\xa6\x42\xad\x0e\x8a\xbc\x34\xd4\xa5\x06\xc0\xfd\x98\xdd\xa0\x18\x0a\x8b\xec\xe6\x55\xc9\xd5\xb2\x83\xd7\x4b\xc7\x53\x81\x24\x5d\xf8\x8a\xad\xe1\x14\x52\x24\xeb\xc4\xac\x3f\xa9\x08\x4f\x40\x35\x62\x3c\xcd\xb7\xba\x8e\x62\x45\x58\xc1\x1c\x28\x5b\x17\x10\x1a\x90\x0f\x95\x8f\xff\xcb\xbd\x01\x71\xec\xfa\x04\xb8\x65\x70\x07\x54\x9b\x0a\x58\xd0\x53\x85\x1f\x00\x5e\xab\x31\xab\x3e\xf2\x8d\x58\xde\x37\x53\xea\xb9\x26\xe2\xb6\x2a\xc3\x20\xab\x34\xb3\x21\xd9\x15\x82\xcb\x6f\xcc\x93\x17\x3f\x5e\x7d\x7c\xf7\x66\xfa\xf1\xe2\x0f\xd3\x57\xef\x3e\x4c\x7c\x37\x25\x58\x3d\x91\xdd\xbc\xa1\x22\x7b\x55\x7a\xb9\xf7\xcc\x0b\xfb\x10\x53\x49\x31\xf4\x49\x02\xf7\x52\x73\x5c\x2a\x1d\x7d\x33\xae\x70\xbb\x96\xfb\x02\x86\x26\x78\x43\xb2\x66\x0e\xf3\x22\x61\x95\x99\xcf\x0d\x1a\x0c\x72\xc5\xab\x7a\xb3\xed\xd2\x10\x6e\x80\x24\x22\xd5\xcd\xac\x5c\x5d\xb3\x02\x90\xd1\x6b\xdc\xc8\xf0\xe6\xf6\x6e\xe6\xf0\xd1\x84\x4b\xa6\x6f\x73\xae\x50\x04\xa9\x0f\x7f\x6c\x56\x77\xf1\x1c\xc0\x5f\xc8\xf3\xe7\x21\xad\xb1\x84\x55\xaf\x15\xd2\x2d\xfb\x07\xc0\xe1\xee\x76\xf2\xd9\x7b\xc3\xb9\x01\xa8\x06\x14\xf7\xfb\x3c\x94\x55\xb1\x40\xb8\xd0\xf4\xb8\x35\x45\x3a\x93\x4e\x29\xcb\x4a\xee\xd9\xa3\xd7\xd5\x63\x88\x50\xd3\x17\xe1\x51\x6e\xb5\x9d\xbc\xcc\x37\xf7\xda\xd6\x71\xcd\x8d\xd3\xdb\x91\xba\xd3\xdc\x94\x13\xec\x90\x1c\xb9\xc3\xaa\xb0\xb1\x92\xfe\xaf\x31\x9d\x0c\x06\xfd\x18\x12\x00\x35\x9e\xfb\xb1\x8d\x1c\x05\x2e\x4f\x45\xcb\x77\x5f\x79\x28\x44\xa8\x57\x48\x61\xd7\xe4\x42\xf3\xb3\xe5\xf8\x4b\xc4\x1f\xb5\x44\xca\x06\xf6\xb5\x0e\xcf\xfb\x6e\x83\x6f\xec\x43\x72\xc8\xad\xe8\x21\xa9\xec\xbf\xca\xbb\xc4\x68\x65\x1f\x70\xb3\xf8\xf5\x3b\x5a\xd9\x3a\xc9\x12\x9c\x47\x95\x29\x95\xdc\x63\x6a\x34\x0d\xe4\xce\xdb\xf5\x34\xb0\xe3\x12\xea\xdb\x9e\x09\x4d\x2e\xfc\x63\x31\x33\x48\x1a\x0b\x4e\xe9\x3f\x68\x3c\x9e\x20\x3c\x27\x94\x3c\xa7\xee\xd2\x5e\x82\xc7\xef\xdc\x44\x33\xbd\x89\x11\x66\x36\x23\x49\x49\x3a\x18\x27\x7e\xce\x53\x1a\x86\x04\xba\xf8\x27\xda\x91\xe9\xaa\x04\x5e\x1b\xf0\x46\x04\x20\x93\x01\x5e\x09\x60\x3a\xe8\x08\x23\xc9\x69\x7a\x9e\x8b\x0b\x3f\x7b\xea\xef\x09\x21\xf6\xa0\x68\x6d\x8a\x75\xc2\x3c\x2f\xc8\x73\x4e\x48\xe0\x11\x4c\x51\xca\xc9\x73\xef\xaa\xb3\xc8\x5d\xb2\x23\xdb\xc9\xda\xc4\x9e\x39\x3f\x67\x8b\xdc\x55\x92\xe2\xac\xfc\x8e\xa9\xa0\x23\xb6\x88\x79\xac\x85\x53\x39\x9b\x17\xf0\xc9\x25\xc2\x25\x76\x6a\x2a\xe3\x80\xf9\xf4\xb4\xf6\x32\x0c\xf9\xd1\x6d\x04\x3a\x34\x19\x1d\xf0\xc8\x4c\xd9\xd3\x53\x88\xdf\x57\xcb\x96\xb6\xfa\x61\x5d\x29\x80\x4c\xcd\x3e\x81\x56\x85\x6a\x95\xcb\x56\xfd\x6c\x3f\x21\xfa\x87\x29\xe4\xf7\xbb\x56\xc8\x0f\x02\xf0\x3f\xfa\xc6\x84\x10\x34\x73\x6d\x92\x8f\xfb\x01\x8b\xe1\x32\xf0\xef\x46\x83\x41\xcc\x87\x84\x21\x2c\x5b\x2c\x06\x03\xd1\x27\xe2\x5c\xee\xb4\x3e\xa1\x72\xb7\x00\xff\x1b\x24\x23\xba\x57\xb3\x43\x4e\x03\xb1\x5c\xfb\x6b\x23\xf5\x12\xcf\x10\xa6\x21\xe2\x0a\x4c\xe8\xbe\x0a\x23\x3c\x2e\x26\xc1\x56\xba\xf3\x64\x5b\x15\x56\xa3\x83\x43\x5f\xcb\x23\x7f\x6b\xb9\x7f\x15\x3e\xd3\x54\xf0\xed\x76\xef\x3c\x5d\x9c\x09\x68\xe9\x59\x89\x71\x63\xad\x1c\x4a\x64\x70\x58\x90\x3c\x2c\x2d\xa7\x3f\x98\x33\x07\x2b\xe9\xfc\x6f\x0b\x42\x0a\x1f\x90\x84\xf0\xda\x43\xba\x08\xc2\xc2\xba\xb5\x32\xde\x29\x74\x64\x8e\xf4\x4f\xfd\x39\xfc\xd2\x0c\x27\x5c\x65\xeb\x98\xfb\xc7\x59\x9d\x13\xd9\xd9\xbb\xe6\xb5\x6a\x7d\x87\xf0\xf6\x18\x8e\x18\xb8\x90\x4b\xf9\x9d\x30\xa1\x96\xfb\x55\x5f\x58\x5d\x08\x6f\x2c\x14\x06\x62\xe8\x8a\x3b\x01\x8a\xe3\x41\xa8\xc6\xd1\x78\x12\xa5\x97\x26\x3b\xb6\xf7\x09\x5e\x2a\x6a\xff\xc3\x8c\xeb\xff\x48\xb1\xd1\xfa\x68\x0b\x1d\xce\x58\x23\x0c\xb0\x10\x8a\x42\xa6\x97\x71\x9b\x5d\xee\x1a\xc9\x48\x72\xc8\x09\xa7\xd9\xfc\x5d\x91\xdf\xc7\x08\xe7\xd9\xa3\xdb\xf0\x86\xf3\xf4\xb4\xd9\x9e\x52\x25\x53\x32\x72\x27\x57\xd1\x64\xaf\x16\xa8\x6b\x29\x1c\x3a\x4a\xd8\x90\x22\xec\x00\x60\x77\x3b\xfe\x9c\x9d\x73\xc2\x52\x7d\x2a\x09\x1b\x72\x74\x46\xbf\xe3\x67\xc8\x45\xdf\x4f\x48\xe7\x34\x0f\x87\x2e\x90\xb5\xc6\x46\x33\xee\xcf\xec\xb5\xc3\x6d\xed\x9f\xa2\x1a\x3e\xff\xb5\x2d\x17\x40\x0d\x19\xcd\x77\x1c\x0e\x8e\x14\x48\xa5\x62\x7a\x7a\x8a\xb0\xa5\x1c\x85\x8b\x78\x66\x84\x9f\xb1\xe7\x64\x74\xc6\x14\xb0\x45\xd7\x48\x19\xf2\xcd\x0a\xcc\x92\xb4\x1a\x67\xf3\x39\x6c\x36\x93\x9c\x51\x8d\xca\x5b\x8c\x66\x01\xcb\x54\x73\x54\x63\x7d\xfd\x1e\x6c\xa0\xa3\x4c\xd0\xc6\x32\xab\x82\x97\x95\x22\xea\x05\xdc\xd3\x2f\x69\x35\x7b\xa9\x32\x2c\x4b\x81\xe7\x01\x65\xa6\xbf\xd5\xa1\x91\x65\x56\xfd\xc0\x2a\x41\x0b\xc8\x3a\xa9\x78\xcb\xff\xab\xac\x5d\x33\x95\x97\x07\x01\x76\xeb\xc1\x92\x0a\x75\x44\x85\xb6\xc2\x93\x17\x4a\xe0\xf2\xd3\x0a\xb5\xe8\x6c\x77\x41\xf7\xe1\x52\xce\x08\x5a\xf3\x93\xf1\x1e\x6a\xcc\x96\x6b\xb4\x65\xf9\x08\x2c\x14\x0c\xb9\x17\x4f\xe1\x1f\xe8\x82\x8c\xce\x8a\xef\xf8\x59\x61\x8c\x9b\xfa\xa8\x98\x1d\x03\xd9\x16\x8c\x8d\x82\xe1\x42\x2b\x7a\x03\xfa\x71\x43\x85\xec\x2b\xfd\x22\x29\x89\xee\xb5\x01\x10\x6f\x86\x53\x68\x0a\xa5\x73\xfc\x40\xa4\x49\x8d\x81\x76\xd9\x81\xaa\x41\xbe\x89\xc3\xd0\x4a\xd3\x42\xac\x94\x28\xe4\x39\x1f\xb3\x09\xb1\x43\x53\x4f\x11\xe6\xd0\xda\xf7\xf7\xe9\x17\xbc\x60\xb9\x80\x0d\xf8\xc8\x86\xb7\x8d\x46\x07\x03\x1d\x7f\x5f\x48\x46\x8b\xcb\x6d\xfe\x77\xb0\xb2\xd9\x86\x83\xe6\x54\xaf\x6d\x5a\xd6\xa7\x46\xe6\xc1\x9e\xe4\x22\x3f\x5f\x55\xf9\xfe\x3e\xee\x6c\x69\x11\xde\x0c\xc8\xf4\xdf\x2a\xaf\x87\xd5\x2e\xbf\x60\x20\xb0\x35\x46\xbb\x72\x88\xa1\xaa\x88\xdf\xa0\x7e\xd9\x6e\x8b\xde\x52\x7e\xdf\x6e\xec\xc6\x6f\x8c\x55\x97\x50\xaa\xf9\xb6\xdd\x5a\x56\x74\xb4\x75\x1b\xb6\x75\x51\x78\x2d\xdd\xee\x6b\x89\xd3\xf9\x06\x80\xe9\x1c\x56\x57\xf7\x2a\xdb\x75\x81\xd4\xce\x9c\xd0\x98\x63\x61\xf7\x35\xb2\xd9\x2e\x30\x2b\x6e\xcb\xcf\x61\x1a\x86\x62\xef\xe6\x61\xe4\x79\xe1\xeb\x51\xf8\xfd\x6b\xa8\x8e\x62\xa6\x54\x28\x92\xad\xc2\xa2\x54\xac\x51\x9b\x85\x90\x3c\x1e\xaa\x31\xc8\x79\x33\xd1\xbd\x11\x28\x79\xae\xf0\xdb\x65\x49\x56\xcc\xf2\xcd\xdc\xa0\x5f\x7b\x1c\xad\x7f\xc5\x8c\x50\x8d\xab\x92\xab\xad\xa2\xf8\x1f\x3b\x69\xc1\x67\xd8\x81\x25\xb2\x78\x1c\x6b\x44\x71\x77\xa7\x74\x67\xab\xc9\x20\x5b\x0d\xae\x88\xcf\xfe\x64\xd6\x87\x45\x4b\x14\x19\xc2\x1b\xa5\xde\xd2\xec\x0f\x8a\x2b\x08\x3c\x5c\xc4\xce\xfd\xa3\xb6\x5e\x0b\xa0\x5c\x62\xbf\x78\x7e\x8c\x86\xf1\x51\x82\x9e\xc7\xf5\x2c\x6d\x46\x73\x7c\xc7\xc4\xb2\xdc\x08\x63\xbc\x81\xaf\x72\x73\x14\x64\x23\xe9\x69\x86\x96\x10\x7a\x2e\xc8\x73\xd1\x27\x96\xc9\xa6\xbd\x8e\x79\x17\x40\xea\xaf\x9a\xdc\xdc\x3b\x9c\x3b\x7e\x4e\xa7\x0a\x0e\xf2\x09\x04\x4c\xfe\x48\x45\x4f\x35\x58\x2b\x2a\x59\x74\x45\x44\x59\x51\x51\x2e\x09\xae\xcf\x2f\x4c\xdd\x51\xd0\xc5\x8c\x84\x1b\x14\xbb\xf7\x4f\x8c\xdc\x85\x8a\xa5\xf2\x66\x6a\xda\xe2\x9d\x60\xd6\x5c\xd9\xaa\xc9\xd8\x9a\x41\xfa\x55\x46\xd8\xc2\x59\xac\xcb\xb5\xee\xa4\xeb\xa3\x75\x4e\x22\xcb\x62\xc8\x7d\xeb\xf8\xfe\x36\xe7\xf4\xf4\x34\x3c\x56\xee\x2b\x9f\x9e\xe2\x53\x38\x8e\x10\x29\x6d\xbb\xd4\x1d\x78\x7d\xb6\xba\xa2\x9d\x5d\x8d\xf6\x74\x34\x92\xa2\x12\xde\x14\x7e\x37\xad\xe9\x1b\xc1\xa4\x05\x85\xf6\xce\xdb\xc8\x9f\x2d\x2e\xc9\x66\x45\x4d\x95\x63\xa6\xcc\xdb\xa9\x8d\x23\xaa\x1b\x8b\x9b\x5f\xe2\x36\x95\xdd\x2d\x15\xf5\x87\x69\xba\x68\xcc\x18\x54\xd7\x1b\xd8\xef\x31\xdc\xc0\x4d\xa1\xc0\xff\x38\x39\x87\x6e\xce\x3a\x19\x8d\xdd\x0e\x10\x3d\xc1\x89\x63\xdb\xb5\x30\x1c\xa9\x04\x65\xe1\xb2\xf0\x06\xab\xe1\xf7\x05\xdf\x04\x4d\x5d\xd3\x1b\x56\x84\xb8\x49\x15\x8a\x1d\x4f\xdc\x06\x17\xe5\x4f\x9f\x22\xaf\x27\x33\xf8\x31\x9f\x78\x6a\x60\x91\xd0\x62\xde\x6e\x56\x7f\x76\x36\x9f\xb7\xf6\x49\x93\xec\xe8\x03\x1f\x1c\xc9\x66\x75\x6f\x07\x1d\xfa\x18\x1c\xe8\x86\x94\x36\xd5\x1b\x81\x86\x90\x3a\x30\x60\xd0\x91\x06\xda\xaf\x2b\x58\xed\x8f\x4d\xc2\x76\x85\x2b\x47\xd8\x2c\x1f\x18\x7e\xe4\x98\x4e\xe4\x62\xa8\xdd\xa0\x34\x11\xb3\x2e\xc5\xc2\xeb\xc2\x53\xb0\x05\x2c\xaa\x37\x28\x5f\x07\xf7\x11\xc6\xf4\x06\xbf\x27\xe3\x48\x2d\x59\x34\xe9\x7d\x54\x78\x1c\x28\xd0\x8e\x35\xd2\x23\x83\xae\xf9\xbd\x51\x89\x81\x62\x30\x68\x97\x7c\x4c\xcc\x1d\x91\x24\xc9\x7b\xf9\xfe\x82\xbc\xc1\xd9\x1e\xf7\x11\xa8\x75\x1e\x7f\xd4\x3c\x5b\xa3\x33\x79\xb5\xaa\x06\x02\xb7\x01\x23\x8c\xef\x76\xe3\x49\x8d\xd2\x43\x05\x62\x4a\xc6\x13\x84\xdf\x39\x97\xad\x73\x9a\x9a\xde\x28\x52\xae\x7b\x17\xe4\x9d\xa7\xd7\xbe\x78\x8c\x5e\xdb\x8f\x01\x3d\x46\xb9\xfd\x5f\x63\x67\xd0\x7a\x6d\x15\x2c\xfd\xd5\x3a\xfc\x56\x24\x6f\xc7\x07\x1f\xf2\x26\xe9\x9c\x81\xdf\x00\x21\x47\x7b\x63\x4e\xa7\x6e\xc0\x53\x65\x20\x05\xdc\x94\xd7\x85\xec\x20\x8c\xc2\x03\xfd\x90\x5f\x3e\x69\x16\xad\xb1\x86\xdc\x6b\x69\x70\xc2\x7a\x5e\xa9\x1a\xdb\xac\x55\x41\x32\x43\xbf\x7c\x8f\xea\xb4\x0d\x7f\x2f\x59\x61\xb3\xb5\xba\x6c\x57\x4a\x8a\xd3\x3e\x10\x28\xb6\xd9\xa6\x30\xc5\xd1\x82\x15\x00\x11\xf1\xd2\x66\xa0\x0a\x6d\xb1\x52\xde\x70\xc9\xf9\x24\xff\xbf\xad\x0f\x0d\x3d\x2c\x8c\xea\x1a\xb3\xa6\xbd\xb9\xf0\x37\x0f\x7b\xdc\xe6\x31\x51\x2a\xff\x9d\x8f\xc9\xfa\xfe\x57\x9e\x11\xdf\x70\xf3\xdf\xf6\x43\xbf\xfe\xeb\x4c\xd8\xc7\x7f\xdb\x4f\xdb\x2a\x70\x98\xa6\x26\x67\x3e\x37\x6a\xa6\x8e\xcb\x11\x97\x45\xa7\xfa\xa7\xbb\x12\xdc\x49\xaa\x5e\x90\x49\x8f\x6b\x26\xa9\xa2\xc5\x1c\xc2\x63\x02\x75\x5b\xb9\x58\x74\x9a\x05\x24\x57\x74\x68\x68\x0a\xfe\xfe\x01\xe5\x1a\xfd\x35\x96\xd9\x2e\x93\xe3\xf1\x31\x21\xc7\xd9\x58\xff\xb9\x94\xbf\x41\xb3\x6c\xf8\xb6\x3f\x45\xc5\x63\xa6\xc8\xb7\xe3\x7e\x1b\x47\xa7\x3d\x0e\x94\xff\x9c\x09\x01\xdb\x84\xbf\xa9\x7c\x2f\x1b\x29\x79\xdd\x80\x87\x90\xf1\xdf\xf5\x13\x6c\x9a\xc2\xee\x35\xd8\x76\xc6\xb2\xea\x24\x99\x95\xc5\x2c\x03\x2e\xb9\x65\xec\x70\xde\x1e\x9e\x08\x5d\x05\xfd\xd0\x66\x59\xbf\x13\x3b\xb6\x2e\xb6\x3d\x0e\x6a\xee\x63\xec\xd5\x81\x6a\x73\xee\x61\xed\x43\xa2\x48\x17\x70\x6c\x63\xd8\xdd\xd8\xb2\x7a\xf4\xbe\x48\x62\xd5\xf6\xa0\xfe\x0c\xda\xf0\xde\xbb\xe9\x82\x52\x0d\x49\xf0\x40\x1b\x61\x91\xee\x66\x96\x59\x65\x0a\xe8\xd4\x50\x5e\x03\x5d\x64\x66\x18\x59\xfd\x3d\x6c\x92\xbf\x31\xb1\xd4\x7e\xa2\xad\xb5\x0e\x5f\x07\xcb\xce\x8a\x19\x87\x0c\x8b\xde\x96\x16\x81\x85\x35\xdc\x2a\x31\xe4\xa8\x7b\x95\x97\x99\x68\xfa\x84\x51\x84\x76\xbb\x11\x1a\x2a\x66\xeb\x91\xcd\xb6\xda\x92\x4d\x3d\x95\x4d\x89\xf2\xe6\x26\xa7\xbe\xd3\xd5\x9e\x36\xfa\xed\xf1\xd4\x78\x96\xcd\x96\xd4\x4b\xb6\xa5\x95\x31\x6b\x4a\x3f\xbf\x09\xfd\xad\x74\x9e\x48\xee\x72\x15\xc0\x61\x56\x75\x43\x9a\xfe\x28\x82\xd5\x80\xff\x78\x94\xd7\x8d\xf2\xa2\xfd\x67\x91\xa6\xe6\xf5\xad\xbc\xb0\xb5\x3b\x63\xf5\x9e\x16\x73\x56\xdc\x34\x51\x48\x23\x56\x5d\x51\x21\x72\xc9\x89\x74\x18\x00\x5a\xb9\xdb\x6d\xe9\xa6\x19\xd3\xbe\xe9\xe8\xe1\x03\xa8\xf9\x01\x72\x85\x55\xaf\x36\xf9\x82\xe5\x7b\x3a\x6c\xf7\x67\xeb\x1a\x3b\x57\xf0\xd6\x35\xd6\x1e\x8f\xa9\x99\xf6\x4f\xb1\x57\x52\xfe\xd4\x8b\xda\x1c\xaa\xb6\x34\x3b\x10\x35\x1e\x80\xa8\xd9\x90\xda\xdf\x55\x27\xba\x85\x93\xd5\xa6\x02\xe4\xb4\x8a\x8a\xc8\x92\x6a\x67\x49\xf2\x51\xf6\x82\x6f\x6c\xd0\x64\x8a\xb7\x8d\x21\x06\xe3\xaf\x11\xe6\x89\x58\xd2\x02\x0c\xf7\xd4\x4f\xee\xbe\xdb\xd1\x20\xff\xbb\x9e\xa5\x76\xfb\xc6\xbd\x95\x87\x93\x21\x37\x14\x47\x98\x43\xd6\x79\x40\xb9\xfe\xaa\xd6\xf5\x66\xe3\xc1\xb8\x47\xca\xf8\x14\x81\x47\x40\x7a\xe2\x4f\x61\x84\x6a\xa3\x44\xab\x41\xd6\xa2\x45\xca\xe2\x48\xfe\x1b\x21\x0c\x90\xdc\xf2\x37\xfc\x11\x21\x0c\xf2\x59\x7e\x2f\x1f\xe9\x3f\xe5\x82\x37\x82\x22\x9a\x73\x1e\x90\x0c\x6f\xdb\xe8\xb5\x73\xa9\x49\xf8\x98\x4e\x9a\xee\x79\x5f\x49\x2e\x9a\xc0\x5e\x8f\x8a\x04\xfc\x2f\xe5\xed\xb6\xd3\xa9\x1d\xbc\x96\xf1\xb9\xca\x31\x10\xa4\x00\xe9\x90\xd9\x5d\xb5\x44\xd7\xd0\x32\xbb\x7a\x41\xb9\x5c\x36\xf3\x77\x84\xf0\xa6\xf0\x5f\xb8\x5f\x11\xc2\x8d\x84\x23\xf2\xfd\x32\xab\x22\x64\x9b\xa2\xf3\x77\x6b\xf3\xe6\x86\x0a\xf5\xc3\x7b\xaf\x1e\x54\xf2\x75\xa9\xfe\xec\xa8\x5c\x05\xb5\xab\x76\xf5\x57\x25\xff\x78\xbf\xa6\x5e\x2b\xfa\x49\x57\x63\x5e\x61\xd7\xa6\x2b\xcf\x40\xf1\x21\xdf\x32\xa3\x02\x39\x6a\xef\xee\x9b\xe3\x6f\xb7\x57\xf7\xa0\x68\x1d\xbe\xe2\xbe\x2a\xa2\xee\xbf\x6a\x4b\xab\x2f\x54\x9b\x59\x7d\xa6\xff\xf7\x0b\x95\x0e\xa3\xe3\x91\xf6\xef\x69\x7a\xda\x07\x65\xc2\xeb\xcb\x9a\x6f\x02\x37\xfb\xb0\xc2\x9e\x0c\xdc\xcd\x6c\x42\x96\xff\x31\xe4\xc9\xba\xd3\x14\x83\x41\x1c\x94\x33\x19\x3d\xb4\xaa\x4c\xf2\x4c\xb8\xb0\x68\xa8\x80\xf1\xae\xe4\xea\x0b\x3d\xf7\xa0\xb6\xba\xcd\xf8\xd6\xcc\x06\xd6\x53\xc4\x1a\x73\x52\xd6\xca\x7d\x2e\x2e\x48\x01\x44\xbf\xe3\xbb\xe4\xe6\x26\x6c\xb7\x6b\x46\x95\x15\x61\x34\x88\x75\x85\x06\x84\xd8\x6d\xd7\x1c\xf8\x9e\xf4\xb6\x62\xd1\x9e\x00\x36\x18\xc4\xec\xd0\x04\x14\x08\x61\xe6\xa0\x31\x21\x0e\x6e\xaa\x06\xe0\x22\x77\xf4\x83\x9e\x67\x7e\xab\x75\x50\x83\xed\xa9\x1c\x0c\xe2\xf2\xf0\x7a\x6a\x64\x1b\x6d\x31\x41\x98\x0d\x06\x05\x1a\x0c\xfa\xa7\x7d\x42\x62\x06\xca\x8b\x73\x66\x5d\xbf\xc7\x85\x15\xea\x4a\x84\x52\x36\x2e\xe0\x18\x8f\xfd\xa7\x9e\xc7\xa1\x71\x52\xfc\x1a\xce\xb5\x0b\xf0\xf0\x1b\x79\x8b\x7f\xcb\xb0\xf5\x06\x40\xe4\xe3\xc3\x92\x70\xf6\x9b\x90\x91\x4a\x25\xe1\x53\x02\x67\x1a\x4d\xe5\x38\x8b\x1b\x3a\xd7\xee\x4b\x60\x57\x71\x0e\x51\x11\x9e\x1b\x7f\xa6\x3d\x65\xad\xbf\x53\x54\xf7\x00\x80\xe0\x24\x3f\xa1\x5f\x04\x2d\xe6\x95\x03\x7b\x33\xee\x95\xa0\x6e\x86\x7c\xf3\x0d\xef\x4a\x75\x0f\x68\x47\xca\x97\x8c\x8b\x7b\xf0\xc2\x23\xa3\xf0\x0d\x51\x81\xd4\xf0\x48\x19\xa3\xa0\x2c\xe9\x8f\x82\x87\xb6\x5a\x63\xc0\x7e\xf5\xc6\xab\xd7\x15\x64\xb0\x66\xc5\x0d\xe9\x9f\x76\x17\xf9\x98\xdd\x1c\x68\xe0\x03\xbd\x65\x15\x2b\x8b\xf6\x10\xdb\xf5\xcc\x93\x7a\x2c\x92\xf7\x1f\xde\xbd\xbf\xfc\xf0\xf1\xa7\xe9\xcb\xd7\x2f\xa7\x2f\xfe\x78\xf1\xf6\x0f\x97\x13\xeb\x88\xca\xa9\xde\x26\x34\x46\xb2\x70\x2b\x8e\xc9\x22\xc4\x8e\x27\x10\x1c\x7a\x1e\xb7\x2b\x06\xfd\xa2\xd4\x58\xf1\x1e\x28\x6e\xc7\x8e\xe4\x45\x91\x35\x22\xa1\x50\xdd\x11\xf2\x35\x75\xae\x84\xcd\x5d\x62\x55\x10\xa8\x36\x06\x4c\xfd\xba\xa1\xb4\x74\x46\xe8\x26\x5f\xdb\x98\xef\x08\xc9\x51\x38\x8b\xa7\xcb\x67\xa0\x9f\xd9\xf6\xe1\x55\xdd\x7a\x0a\x2a\xd6\x66\x27\x36\x72\x2c\x09\x6c\xa9\x6e\xd4\xda\x6c\xdf\x31\x6d\x06\x9d\xc1\xdf\xaf\x36\x8f\xb4\xd9\xbf\xe3\x09\xc2\xe0\x15\xb4\x67\xc3\x0f\x06\xf4\xf9\xbe\x77\xfb\x18\xfe\xd6\xc4\x00\x1c\x04\x72\xc9\xba\x82\xf6\xb4\xdd\x3d\xf0\x10\x32\x5b\xc2\xfa\xe5\xb6\x3b\x3f\x63\xdf\x15\xe0\x67\x14\xbc\x1f\xb3\x49\xe8\x9d\x68\xa6\x97\x69\x34\x87\xce\xae\x47\xbd\x7d\xc7\xfd\xe9\x69\x1d\x30\x86\xa6\x1b\x3a\xa9\x6f\xa8\x38\x51\xf5\xe3\x7d\x2b\xd0\xa2\x0b\xfb\x52\x8f\xb4\x67\x2c\xa0\x1e\xf4\x3c\xc8\x0f\x65\x26\x27\x1d\x75\x51\x1e\x33\x62\x38\x24\xb3\xb2\xa8\x36\x2b\x15\x06\xda\x3c\x46\x41\xe5\xba\x72\x9f\x43\x1d\xa8\xb5\xe7\x9f\xf1\x94\xda\x34\x64\x68\x5b\x68\xdf\x67\x29\xb5\x2b\xaf\x93\xa7\x05\xc2\x05\x19\xa1\x9e\x17\xa3\xd7\xb5\x8f\x7b\x92\xa9\x08\x23\x0b\x18\xa6\xb8\xc0\x36\x61\x2f\x2b\xdc\x14\xa2\xba\x9e\xaa\x48\xd6\xae\x43\xec\xd4\x54\x5d\x7b\xfd\x7c\x94\x76\xad\x36\x2e\xf6\xcf\x67\xef\x78\xb2\xa1\x06\xbb\xc7\xbd\x77\xe4\x0c\x21\xe1\xf7\xb4\x6b\x39\x37\xde\xa0\x92\xf6\xa2\xde\xdb\x3f\x45\xf5\x11\x65\xb6\x74\x30\xe8\x07\x1a\x06\x33\xf9\x6d\x2f\x6d\x95\x69\x05\x57\x68\xcf\x55\x25\x7b\x3c\x66\x62\xb6\x9d\xd5\xb5\xad\x78\xaf\x6f\x77\xab\x82\x19\x4d\xfd\x00\x43\x10\xa3\x6d\x77\x91\x86\x7f\x34\x66\x7a\x64\x7b\x96\x4c\x15\xd1\xf1\x9e\xbc\x57\xc2\x06\x2f\x87\x8d\x8d\xdc\x1e\xa6\xdd\x3d\xc3\xe2\x29\x43\x67\x31\x84\xfd\xec\x21\x27\xda\xd9\xa7\xfd\xe2\x79\x89\x9a\x94\xd9\x23\x42\x65\x07\x25\xb1\x1c\x46\xf7\x5e\x52\x5f\x53\x07\x7b\x6f\xfb\x10\x4f\x13\x36\x5f\x07\xb4\xcc\xe6\xb4\x7c\x80\x59\x91\x22\x93\x7f\x16\xdb\x2c\xcb\x6e\xd7\x07\xd2\x64\xda\xf6\x68\x53\xbb\xf0\x61\xd6\x06\xa1\xc0\x3d\x01\xb2\x1c\xb6\x49\xe9\x03\xe3\x39\x3f\xf6\xc0\xa5\xdd\xa3\xf4\x19\x35\x33\x93\x07\x49\xd6\x11\xfc\x1e\xea\xf9\x17\x65\x07\xdb\xd7\xe6\x80\xf6\xde\x21\xfb\xd8\x42\xb3\x08\xa0\xb4\x3f\xb8\x08\x3a\xd6\xc8\x05\x85\x53\x74\xde\xbc\x4d\x88\xbe\x6e\x74\x00\xf8\xb8\x50\xfe\x1f\xcd\x70\x71\x8f\xda\x4e\x42\x3e\xf0\xf8\x06\xc6\x13\x59\x19\xa5\xcd\x11\x84\xdc\x6c\xed\xeb\x69\x72\x9c\x9b\x9c\x5c\x2c\xf0\x70\xc3\xdb\xc6\xe7\x2a\x1d\x75\x96\xb3\xac\xf2\x62\xfd\xd1\xb7\x8b\xbc\x80\xb0\x9e\x23\x41\x70\xba\x30\xee\x0f\x4b\x96\xd6\x29\xe6\x98\xe4\x4b\x87\x33\x84\xed\x17\x45\xbf\x02\x13\xe3\x11\x30\xfc\x2d\xc1\x54\xd7\xfd\xed\xc3\x84\x3b\x84\xd3\x19\xc9\xb4\x8e\xcb\xa1\x73\xa9\x8d\x84\xe7\x44\xe5\x7d\x99\xfe\x8d\x66\x9f\xaf\xa8\xc0\x4b\x78\x20\x7f\xbd\xc9\xd6\x78\x61\x82\x7c\x7b\x7e\x44\x2c\xda\x2e\x12\xe5\x18\xb1\xdb\x79\xce\x52\x61\x4c\xab\x8f\x99\x53\x6a\xa0\x03\x85\xa6\x63\x93\xda\x0b\xcb\x4d\x57\x84\x6a\x95\x06\x2d\x32\xe1\x87\xe4\x43\x2a\xe3\x66\x9c\x3e\xde\x10\xdb\x48\x35\x18\x54\x36\x7f\x99\xcd\x2c\xd4\x07\x7c\xc7\xdc\xbd\x98\x13\x3f\xe5\x99\x40\x78\x49\x46\x67\xcb\xef\xe6\xc6\xd9\x7f\x69\x9c\xfd\x17\x64\x3e\x5e\x4e\xf0\x9a\x88\xf1\x62\x82\x57\xea\x44\xcf\x69\x35\xe3\x6c\x2d\x4a\xde\x38\xc7\x0b\xc9\xf1\xdd\xba\x4e\x57\x10\x3e\x7a\xab\x92\xeb\xc8\x91\x99\xf0\xb8\x05\x7a\xfe\xf4\x54\xf5\x70\x43\xe8\x78\x31\xe9\xad\xc9\xcd\x39\x24\x2c\x59\x65\x9f\x8d\xe3\xe8\x0d\x32\x9a\x9d\x35\x08\x88\xc1\xcb\x35\xaa\xd9\x22\x9e\xc9\xcf\xea\x68\xf5\xda\xb4\x0a\xd8\x17\x5e\xee\xb6\x6b\xbc\x46\x75\x7d\x7b\xbe\x4a\x94\xa1\x69\x81\xd7\x28\x75\x11\xdb\x0e\x89\x2f\x69\x03\x56\xec\x76\x0b\xc8\xa9\x73\x2e\xdb\x26\xeb\xb4\xab\x4c\x2c\x1b\xac\xa9\xd2\x3f\x08\x84\x79\xb2\x29\x20\x74\xd6\xc7\xb1\x80\x7d\x78\x4f\xb8\x85\xee\x02\x17\x9d\x2a\x0e\x37\xc4\xbd\xdd\x10\x53\x32\x3a\x9b\x7e\x77\x6f\x56\x67\x3a\x1c\x22\x58\x08\x48\xf5\x95\x09\xea\x73\x7c\xf7\xe3\xe9\x24\x01\xd7\x28\xf5\x67\x75\x5f\xcc\x20\x29\x70\xe6\x3b\x03\x51\x1c\xc9\x11\x46\x26\x27\x5e\xf8\x0f\x47\xb5\x52\xb3\xdc\x86\x09\xfd\x14\xbf\x31\xe6\xc9\xbb\xbf\xbd\xbd\xfc\x30\x31\x99\xfc\x7c\x08\x50\x38\x53\x81\x4b\xf9\x19\x04\xfd\x1a\x9d\x3f\x70\xad\x50\x14\xc5\x02\xaf\xc1\x7f\xe9\x40\x81\x18\x91\xe7\x22\x09\xf4\x00\x1a\x98\x44\x83\x85\xa0\xa4\x35\xbb\x52\xee\x19\xf3\xe4\x87\xcb\x3f\x5c\xbc\xf8\x69\xaa\x86\x2a\xc7\x5e\xeb\xeb\xa2\xe1\x42\x92\x29\xff\x5b\x20\x09\x0d\xe7\x08\xad\x51\x02\xb9\xd0\x63\xb8\x7d\x5b\xeb\xc6\xe7\xc4\x4d\xb4\x6e\xd5\x28\x4f\x9b\x6d\xc0\x38\x3b\x1b\x61\xc5\x4d\x67\x2b\xb2\x86\x6c\xc6\x39\x71\x2e\x14\x24\x00\x58\xef\x05\xbf\xdf\x42\x3b\xfa\xb5\x69\x42\x5b\xfa\xb6\x8b\x64\x4e\x73\x2a\xa8\x7e\xec\x7b\xd7\x87\x3a\x96\x5a\x94\x57\x0a\x83\xd0\xb0\x61\x1d\x68\x06\x42\x85\x26\xa8\x82\x97\x5f\x04\x2d\x24\xf7\x71\x1e\xa5\xd1\xb0\xfb\x55\x8c\xd2\x28\xd2\x0a\xd9\x4f\xdf\x3d\xd9\xc2\x59\xd6\x69\xed\xf4\x50\x9d\x69\xfa\x95\x75\xfc\xb4\xaf\x5a\xbb\xcc\x8d\xb2\x4e\x4d\x73\x1b\x36\x77\x75\xea\x27\x5b\x5a\x3f\xff\x54\x57\x02\x52\x76\x29\x65\xa1\xfd\x26\xb5\xb9\xb5\x06\x51\x55\xb0\x99\xfa\x4e\x66\xc6\x1f\x3b\x71\x40\x33\x72\x6f\x78\x01\x7c\x98\x9a\x86\xb5\x99\xc4\x21\xd9\x84\x0a\xf7\x3e\xe8\xbf\x14\x38\x84\xec\x26\x6e\x65\x2a\x73\x09\xb7\xfd\xef\x66\xb8\x6b\x36\x28\x42\x28\x75\x8d\xe1\x55\xcc\x9c\xba\xbd\x38\xa7\xe9\x8d\x0f\xb0\xe2\x45\xca\x61\x66\xc6\xab\x8f\x40\x68\x1b\x93\x5b\xe0\x83\x7e\x81\x67\x5e\x1b\x07\x66\x00\xf6\x8e\x6e\xd4\xaf\xef\x33\xef\xf6\x7e\xed\xcd\xf5\x0d\x39\x18\xc4\x73\xb3\x15\x29\xc2\x4b\x05\x70\x21\xe7\x7f\x30\x58\x02\x45\x56\x43\x6f\xf8\xcc\xb5\x87\x82\x10\x0a\x3f\x49\xa5\xec\x3d\x7c\xac\xf7\x0c\xdf\x3a\xe3\x83\x61\xa5\xe3\x2a\x70\x78\x07\x92\x20\x9f\xd1\x33\x05\x91\xa6\x05\x10\x67\x71\x80\xac\x92\x9b\x35\xe5\xb0\xbf\x6a\x6b\x80\x08\xfa\x79\xad\xd1\xd0\xfc\xc8\x00\x1f\x22\xcd\x1f\xd9\x4a\xe1\x45\xb5\xf1\x96\xdc\xf4\xc6\x08\xf3\x83\xb7\xb2\xf0\xcc\x60\x3c\x99\xca\x26\x77\xbb\x6d\x6d\x4f\x46\x36\x5b\xbe\xd0\xf6\xb9\xc0\x55\x49\x9d\x0a\xbf\x23\xed\xe3\xba\xad\xcf\x7c\x02\x1c\x2c\xb4\x0d\xd6\x78\x69\x07\x53\x41\x8c\x2d\x52\xb9\xc1\x99\x07\xb2\x60\x92\xb7\x31\x33\x28\xde\xf3\x62\x70\x4b\xe0\xa8\xf5\x20\x25\xed\x0c\xd7\xdf\x6e\xb4\x25\x88\x88\xc2\x83\x72\x72\xb6\x2e\x3a\x18\xc4\x31\x25\x8d\xdd\x84\x90\x72\xa7\x7f\xe1\xe8\x09\x7c\x2c\xf6\x36\xa0\x3c\x97\xd4\xef\xdd\x2d\xab\xed\x59\x73\x50\xca\xff\x50\x0d\xed\xdd\x22\x1c\x09\xed\x13\xd2\x06\x1c\x3d\xa7\xa9\x1a\xa2\xe9\x40\xcf\x6f\xf7\xd1\x91\x1c\x94\x39\x3e\x68\x3b\x07\xa2\x4f\x83\x90\x2d\x37\xb6\x9e\x18\x0c\x84\xdd\x17\xc1\xe9\xea\x38\x43\x2e\xee\xc4\x9a\x3b\x7d\x24\x14\x75\x4d\x6a\x16\x64\xdb\xcd\x8f\xa6\x02\xb7\x50\xa3\x78\xad\xa6\xb3\x74\x7c\x20\x0c\xcb\x32\x9f\x99\x7b\xc1\x07\x03\x97\x40\x1d\x57\x64\x5b\xe3\x9c\x8c\xce\x72\x17\x76\x9a\x0f\x87\x96\x0d\xda\x10\x3a\xce\x27\x78\x16\x30\xaf\x1b\x84\xe7\x64\x84\x97\x64\x66\xaa\xcc\xbf\x5b\x9e\xcd\x1d\x03\x3b\x1b\xcf\x25\x03\xbb\x91\xfc\xa0\x4a\xf7\x2b\xba\x38\xc6\x15\xa9\x14\xc7\xb8\x6a\xf1\xa1\xab\x87\xf9\xd0\x4c\x7e\x48\x47\xab\xb7\xa6\xd5\x26\x1f\x7a\x2b\xd9\xc4\x0a\xf8\x48\x33\xfd\x95\x6c\xe8\xd6\xde\x6d\x24\x4b\x60\x51\x3f\xea\xdf\x2a\x9f\x5f\x65\x6e\xcd\x5b\xed\x14\x94\x78\x29\x42\x10\xbe\x4d\x58\x05\xa4\x90\xf4\x47\xf0\xe3\x0d\x15\xcb\x72\x4e\xfa\xa7\xb8\xcf\x92\x3f\x5e\x5c\x4d\xdf\x5e\x7c\x7c\xfd\x57\x93\x0c\xd6\x30\xcb\xbe\x94\x73\xef\xff\xda\x23\x73\xdd\x7a\x51\x51\x9a\x1b\xc4\x21\xc8\xc8\xb5\x3b\x97\xda\xa7\x0b\x6d\xaf\xfd\x03\xb6\x3f\xd9\x80\xdf\xb8\x48\x5e\xbf\x7d\xfd\x71\xfa\xea\xe2\xc5\xc7\x77\x1f\x7e\x6a\xf4\x71\xdf\xd1\xc7\x7d\xa3\x8f\x5a\xf1\xcf\xb7\x9e\x09\x78\xfa\x18\x41\xdd\x4b\x92\xf7\xcf\x34\x00\xff\xa6\x38\xe4\x5a\x18\x56\x5c\x10\xdb\x6f\x49\x35\x5a\x65\x9b\x89\xc7\x30\x57\x2d\x26\xb1\x69\x1a\x90\xb3\xd6\xe5\x6e\xb8\x82\x71\xbd\x87\xe4\xae\xce\x79\x8c\xee\x76\x4a\x83\xbd\x60\x85\xeb\x0c\x5c\x9d\x2d\x2d\x8f\x9d\x6b\x88\xc7\x35\x22\x80\x73\x51\x2f\x02\xfe\xcf\x42\xe9\xb8\xc2\x8a\xa8\xa3\x5a\x8e\x0d\x8e\x08\x38\x5b\x2b\x67\x58\x5e\xce\x68\x55\xb5\xbe\xd3\x31\xdb\x9e\xa6\xbb\x59\x0a\x2b\x83\xb3\x13\xfc\x3d\x25\x15\xc3\xcc\xd3\x32\x30\xd7\x83\x3c\x9e\x2c\x79\x7b\xf1\xe6\xf2\xea\xfd\xc5\x8b\xcb\x2b\x22\xbc\x1f\xc1\x9b\xe9\xf7\x3f\x4d\x5f\xbf\x0c\xde\xab\x47\xaa\x69\x39\xee\x8b\x3c\x27\xc2\xfb\xe1\xa6\x10\xb3\xe4\xfa\x1e\x92\x47\x37\x26\xf7\x31\x47\xe0\x5b\xa8\xa9\x0e\x6b\x9e\x1e\x56\x30\x7d\x7d\x6a\xc8\x2e\xd8\xbb\xbd\x88\xd1\xdf\x26\x07\x79\x23\x89\x1e\xd9\x73\xf2\x32\x7b\xf2\x2c\x46\x94\xa4\x6f\x27\x53\x18\x9e\x4d\x7f\xf7\x67\x7a\xdf\x3a\x67\x2d\x19\xa9\x2d\x76\x0c\x06\x34\x59\x6c\xd4\x66\xa8\x81\x0a\x56\x1e\x0d\xcc\x1a\x07\x24\x33\xb7\x89\xbd\x49\x2c\x70\x83\x66\x13\x32\x8f\xcb\xeb\xf8\xc6\xaa\xeb\x59\x28\x68\xfd\x13\x3e\xb3\x35\x6a\x9f\x37\xad\x11\xea\x3d\x6e\xcf\x1f\xe7\xfa\xf3\xab\xdd\x78\x34\x6c\xf1\x6f\xef\xe2\xa7\x96\xa3\xb0\x0b\x62\x83\x91\xb6\xbe\x03\x24\x2e\x9a\x8c\xa2\x96\x1a\xad\x2f\xf7\x71\xaa\x6e\x9b\xa1\xe7\xd1\xd3\xe7\x1f\xf3\x6f\x1e\xb8\xa7\x18\xf5\x26\xf2\x7b\x23\xed\x46\x24\x7f\x47\x4e\x1d\xe7\xbf\xb2\x89\x55\x22\x6d\x18\xe7\xe3\x42\xe7\xd0\x46\x93\xdd\xce\x80\xd1\xf5\x7c\xcd\x09\x61\xe7\xa2\x9d\xb0\x03\x7c\xf1\x22\x58\x95\x08\xa5\x1e\x8a\x1d\x93\xf7\x9a\x2f\x15\x02\xd0\xf8\x39\x23\x1a\x56\x3c\x0d\x45\x46\xd3\xb2\x2c\xe0\x72\xce\x74\x80\x71\xcb\xee\x20\xb3\x8c\x03\xa1\xd7\x09\xb9\x39\xd9\x46\x63\x35\x00\x03\x79\x3c\x89\x52\x9b\x90\x07\xdb\x97\x6f\x01\x84\x4f\xbe\xd3\x70\x7c\xee\x95\x62\x0a\xe4\x2b\xed\x9d\xe8\x5e\x19\x29\x48\xbe\x74\xf9\x26\xec\xeb\x8b\xea\xbe\x98\x3d\x54\x46\xf2\xdb\xf2\x9d\xf1\x7a\x33\x2f\xe4\xa7\xc9\xe7\xf0\x61\xee\xf1\x07\x7a\x73\xf9\x65\x2d\x5f\x70\x7a\x43\xbf\xac\xbd\x57\x6a\xd7\xc8\x57\xf6\xa0\xda\x81\xb2\x1c\x42\x20\x61\x10\x2c\xa7\x39\xab\x44\x54\xe3\xad\x61\x79\xd2\xa2\x26\xcd\xe4\x1e\x7b\x4f\x03\xdc\x7a\x07\xf2\x61\x77\x58\x6b\x8e\x01\x00\xb6\x42\x1a\x77\x1a\x81\x6d\xed\x80\x2f\x00\x3a\x7a\x4c\x27\xe4\x14\x0b\xc4\x16\x31\xf7\x21\x46\xb8\xc3\xf3\xb7\xed\xf8\x30\x05\x3a\x0a\x08\xb2\x7f\xdb\x0d\xe9\xd2\xd3\x74\xa1\xc2\xa3\xaf\xc1\x17\x77\x8a\x80\xab\xfb\xd5\x75\x99\x93\x39\xa0\xb7\xbe\xd6\x93\xa7\x1f\xb6\x71\x14\xc0\xb3\x69\x66\x65\x2d\x8a\x6a\x49\xe7\x18\x94\xca\xf8\x3d\x69\x27\x68\xd0\x83\x33\xaa\x3a\x87\xa0\x92\x4c\x65\x3d\xe5\x37\xa7\x94\x52\xe6\x19\x86\x74\xfb\x9b\x0d\x9b\x93\x12\xd3\xe4\x86\x16\x94\x67\x82\xfe\x41\x3e\xf0\x17\x86\x44\xb0\x6a\x91\x85\x9f\x1a\x96\x31\xea\x15\x70\xb4\xb3\xc4\x84\xb2\x58\xf5\x8b\x6c\x54\xf3\xa9\xed\x71\x82\x73\xaf\x14\xf2\x1d\xcf\x2b\x08\xe4\x7a\x92\x0f\x21\x8b\x84\xee\x4d\x76\x82\x4d\xf3\x02\xb9\xa4\x36\x7e\xcd\xca\xd4\xb4\x63\xd3\xab\xd5\x13\xc4\x79\x0f\x13\x7e\x1e\x55\x02\x5a\x4c\x1d\xbe\xa6\x7c\x5a\x6c\xf4\xd3\x0a\x56\xc2\x94\xbd\xd7\x4f\xe3\x68\x48\x87\x11\x8a\x70\x65\xc7\x61\xd5\xca\xf2\x33\xd5\x21\x20\x1c\xd3\xe4\x8e\x67\xeb\x76\x86\x81\xfe\xd4\xcf\x58\x04\x6a\x8e\x77\x1a\xef\x76\x30\x98\x3a\xec\xd0\x93\xab\x98\xe2\xab\x58\xe0\x7b\x47\xb3\xae\x74\x74\x04\xb5\x06\x14\x13\x1d\xa8\x11\xd6\xbb\xf0\x37\x2e\xf5\x84\xc8\x6a\x00\x91\xa3\xa1\x06\x1b\x43\xfb\x12\x53\x64\x9b\xad\x88\xd0\xc5\x6d\xf8\x61\x57\xf1\xdc\xbe\xd4\xdf\x5e\xad\x25\xff\xd3\xb8\x62\x5a\xf8\xa5\x74\x30\xe8\x42\xea\x0d\xc0\x80\xf4\xdf\x1f\x62\x8a\x47\x30\x74\xe5\xa6\xed\xf4\x6b\xe4\x25\xa6\xc9\x2c\x2b\x14\xf4\x18\x79\x2b\x6f\x38\x03\x44\x46\x9a\xfc\x04\x5b\xc4\x6f\xd5\x9e\xb1\xba\xc7\xb1\x30\xb0\xdc\x10\x1b\x2e\xbb\xb0\xda\x8d\xee\x4b\xd2\x90\x92\xf1\xc4\x8c\xee\xb5\x42\x32\x01\x7c\x18\x6a\x44\xb4\xae\x35\xf8\x21\x5c\x83\x46\x31\x39\x9f\xea\xec\xfc\xe0\x36\x95\xfc\x1e\xa3\x11\xf1\xf3\x58\x75\xbb\xc1\x7b\x79\xab\xdc\xa5\x2e\xf6\x5f\xea\xa2\xe3\x52\xef\xcc\x5a\xe5\x50\x85\xa2\x48\xe3\x27\x1a\x95\x16\xc0\x28\x16\xcf\x35\x2a\x67\x84\x23\x84\xff\x11\x8b\x71\x31\x91\x02\x30\x1f\x12\xaa\x7e\x78\x64\x20\xd0\x33\xbb\xb1\xdb\x0f\xb5\x1f\xe1\x19\x3a\x4c\xed\x57\x5a\x47\x0a\x33\x63\xfc\x37\x48\x01\x3f\x20\x2e\xac\xb5\x68\xde\x39\xfb\x5e\x2b\x12\x9d\x73\xbc\x5a\x88\x76\x45\xb5\x0e\xdf\x6b\x75\xa3\x2e\xe6\x70\x69\x83\xb2\xbf\x78\xa5\x58\xb5\xa7\x90\x1e\xc1\x2f\x7a\x04\xba\xc5\xbf\x31\xb1\x7c\x93\x15\xe0\xa4\x7e\x7f\x45\x85\xa0\x9c\xd0\x44\xd0\x8c\xcf\xcb\xbb\xa2\xfd\xa6\xa2\x62\xb3\x6e\x3f\x7e\x91\xcd\x96\x94\x50\x5f\xc1\xf5\xfe\xc3\xbb\xff\xf8\x29\x7c\xa4\x74\x5e\x84\x26\x1f\xde\xbd\xfb\x48\x68\x32\x5b\xd2\xd9\xe7\x3f\x66\xd5\x95\x14\xe0\x09\x4d\xfe\xf0\xe3\xeb\x97\xd3\x3f\x5f\xca\x5a\x37\x54\xbc\x94\x37\x31\xec\x50\x9a\x28\x1a\xe8\x7b\x11\x30\x32\x72\xf7\x70\x69\x75\x52\xc3\x21\xab\x15\x48\x9e\xaf\x52\xab\xe0\x97\xfc\x2b\x27\x3c\x96\x97\xa2\xa2\xe3\x92\x73\x49\x8a\xf2\x2e\x96\x34\xdc\x75\x9f\xeb\xdc\x89\x1d\x7b\x44\x5d\x8b\x83\x81\xa3\xca\xc1\x0b\x00\xd3\x68\x7f\xf1\x46\x3b\x3e\x8c\x27\x6e\xcc\x73\x77\x41\xf2\xf8\xd3\x74\xfa\x64\x4b\xeb\x27\xdb\x7c\x08\x69\x10\x17\x79\x59\xf2\x18\xfe\xe4\x59\x31\x2f\x57\x31\xfa\x57\x6f\xb0\xf5\x74\xfa\xc9\x5d\xa3\xf0\xc1\x4b\xbc\x20\x9b\x73\x35\x8a\x74\xde\xb3\x53\xb6\xe8\xa9\xe4\x89\xcb\x5e\x63\x52\xd7\x3d\xa5\x75\x7d\xf6\x73\x12\x2b\x88\x98\x9d\xdc\xd8\x3f\x83\xa0\xb7\x03\x8a\xa4\xfe\x46\xcf\xf0\x6d\x87\x16\xdd\x1e\x0d\x7c\x43\x6e\xd5\x99\xe8\xc8\xde\x01\xd6\x14\x84\x2c\xbb\x10\x79\xcf\x23\xf4\xfc\xe9\xe9\x79\xc7\x1e\x5d\x25\x82\x56\x22\xbe\x35\x4c\x3d\xaa\xdb\x09\xb1\xfa\xa3\xba\xd7\xdc\x41\x37\xbd\x2e\x6d\x6a\x88\x27\xef\x8f\x51\x0a\xa4\x3e\x50\xb7\x59\x8f\x6b\x4d\x25\x5b\x06\x0d\x95\x4b\xea\x26\xa6\x08\x5f\xbb\xeb\x1f\x8b\x5a\x6f\xe9\x7b\xfd\xf8\x1e\xf7\x4f\x91\x96\xf6\xee\x02\x13\xbe\xb6\xe8\xb8\x0b\xcb\x64\x51\x52\x0e\xd6\xe6\xd6\xd3\xf6\x09\x58\xd9\xcb\x40\x1f\x1c\x82\x62\xab\xf1\x5e\x1e\x1e\xaf\xac\x7e\x87\x2f\x83\x01\x2b\xa8\x6c\xb0\x64\x5a\x6f\x1b\xd7\xb6\xba\xdf\xb7\x1e\x9f\x6b\x99\x18\x87\x28\xd4\xf3\xfe\x26\x42\x7b\xd7\xd1\x6e\x0b\x68\x80\x67\xa7\xab\x70\x5c\xd4\xef\x80\x72\x71\xe3\x9b\xd7\xfd\x21\x7d\x08\x1b\x53\xe3\x07\x77\x5e\x2e\x87\xef\x24\x82\x8f\x6d\x89\xc0\x93\x17\xde\xd4\x1d\x9b\x17\x6f\xf5\xdd\x92\xbe\xaf\x89\xf6\x5a\xfb\x4c\xef\xab\xf4\xc2\xb4\x85\xb7\xea\x6a\x63\x8b\xfb\xf4\x45\x4d\xfe\x74\xf5\xee\x2d\xfe\x4c\x9e\xfd\xe7\xf8\xe7\xbb\x27\x93\xe1\x93\x67\x6e\xb2\x3e\x84\x90\xf9\xfd\x53\x93\x54\xd5\x45\xc7\x41\x46\x51\x77\xc3\xa5\xed\x3b\x0f\x4a\x68\x76\x3f\x3d\x24\x0e\xbf\x07\x33\x14\x23\xfd\x51\xef\x9a\xd3\xec\xb3\x0a\x10\xb3\x37\x34\x21\x1f\x77\x3b\x27\x32\xbb\x1b\x0d\x0a\x3b\xac\x75\xef\x5e\x83\xae\x2d\xa5\x4b\x5b\x45\x08\x21\x6f\xce\x55\x46\xb2\xf3\x4f\x63\x33\x97\xe9\x93\xad\x7a\x56\x4f\x3e\xa5\xd1\xd8\x93\x1d\xdb\x8d\x37\x92\xc5\xbe\x90\x2b\xac\x5e\x28\x22\x9a\x1e\xc8\x3d\xdb\xc8\xaf\xea\x37\x5e\xfb\x8c\x44\x81\x8a\xe6\x76\x76\x39\x2a\xb5\xf5\xce\x84\xd1\xbc\x60\x7c\xb6\xc9\x33\x3e\x89\x6c\x00\x9d\xbe\x41\x31\x3b\xef\x60\xd9\xc4\xf3\x7f\xb3\x75\xb5\x14\xdc\x73\x91\x17\xd1\x38\xc2\x5d\x58\xad\xb2\xe7\x21\x81\x98\xbf\xf3\xe8\x24\x4a\x23\x7c\x12\x61\xf6\x9c\x9c\x8e\x46\x68\x5b\x0c\xc9\xa7\x24\x49\x4e\xe4\x2c\x1a\x90\xc4\xd1\xa8\x3e\x59\x95\x9c\x9e\x30\x41\x57\xd5\x27\xbd\xbe\xc5\x90\x7c\x88\x01\xf1\x55\x87\xb8\xa8\x01\x0f\x49\x74\x32\x89\x6a\xb9\xf7\x86\xa7\xb8\x40\xff\x1f\x73\xef\xde\xdd\xb6\x8d\x3c\x0c\xff\xef\x4f\x21\xf3\xcd\x6a\x89\x35\xcc\x48\x49\xda\xa6\x4c\x19\xff\x9c\xc4\x69\xbd\xeb\x4b\xd6\x76\xba\xdb\x47\xd5\xcf\xa1\x25\xd8\x42\x43\x11\x5a\x10\xb2\xe3\x95\xf9\xdd\xdf\x83\xc1\x95\x17\xc9\x72\x2e\x7d\x9e\x73\x72\x62\x8a\x04\x06\x83\xc1\x6d\x66\x30\x97\xf8\x1e\xbc\x8d\xc8\xed\x23\xbe\x90\x88\xef\xca\x6e\xb3\xa4\xf7\x82\xfd\x44\x0d\xfe\xac\x8a\x3f\x73\xf8\xb3\x06\xfe\xb4\x89\xbf\x5c\x49\x06\x7d\x75\x18\xd3\x01\x1b\x6e\xe4\x5b\xc9\x1f\x61\x8a\xb6\x82\xb8\x13\x6c\xc9\x3e\xa5\x2d\x7d\x2a\xbd\x3e\x39\x01\xf9\x0f\xef\x74\xf8\xa8\x4e\x07\xe0\x78\xe5\x54\x72\xa5\xde\x54\x32\xe0\x6e\x8c\x99\xf6\xe5\x74\x37\xc5\x5e\x0a\x50\xc7\xc1\x87\x1c\x8b\xaa\xe5\x97\xcd\x36\x98\x6f\xf0\x25\xf7\xcc\x1c\x95\x37\x13\x9a\x11\x17\xb5\xa3\xe2\x8c\x69\x71\x3a\xaa\xb8\x9b\xeb\x50\xc2\xed\xc9\xdd\x06\x62\x08\x1b\x9b\xd9\x9a\xf6\xf5\xd6\x04\x9b\xe3\x41\xe5\x14\x90\x6f\xde\x36\x76\x3d\xbb\x36\xdc\xe6\xf4\xdf\x9a\x66\x21\x49\x08\x0c\xc9\xfb\x36\xe6\x06\xb8\xd0\x8d\x16\x2e\xee\x3d\x34\xf8\xaa\xb1\xc0\x34\xdf\x07\x07\x5d\xd5\x52\xcd\x73\xd5\xca\xe8\x94\x0a\x63\xaa\x26\x1b\x4d\x94\x23\x42\x54\x08\xc6\x49\xc2\xf5\x0f\xfa\x5f\x62\xac\xe6\xa7\xb4\x28\x48\x61\x7e\x4d\xa8\xb0\xcf\xba\xca\xdd\x9d\xe6\xe7\xca\x4a\xf0\xa2\x8e\x2b\xa3\x97\xbc\xb6\xa9\x96\x20\xb6\xb6\x3c\x10\x46\x36\xd7\xf6\xe7\xaa\x41\x5b\x42\x9d\x93\x06\x5d\x90\xe1\xcb\xd6\x74\x0d\xd0\xb5\x97\x16\x7f\xe3\x6f\x20\x9f\xab\xcd\xf9\x47\xef\x6c\xce\xaf\xac\xeb\x80\xfa\xac\xe3\xc0\x36\x29\xe1\xf7\xdd\x50\x45\x67\x98\xfe\x05\xff\x8a\x1f\xe1\xff\x34\xc7\xa4\x95\x45\xff\x05\x2f\xe7\xea\x7f\x5d\x2e\x0a\x3c\x5a\xaa\x5a\xbb\xa6\xe4\x66\x95\x6a\xad\x51\xd4\x53\x2f\xff\xf1\x9f\x39\xe1\xb7\xeb\x95\x5d\x7e\x71\xd5\x28\x0a\x46\x97\xe7\x63\x9d\x0c\x73\xc9\x45\x98\xab\x35\x62\xd3\x19\xcb\x65\x15\x25\xd2\xdf\x53\xdc\x44\x1c\x20\x9f\x84\x0b\x34\xb0\xb2\x86\x7a\x02\x5d\xba\x7c\x5c\x0f\x3e\xac\xa5\x73\xb8\xf5\x5e\xb3\x19\x53\x71\x42\xb3\x31\x34\xf4\xc0\x8a\xf2\xc5\x79\x21\x52\x41\x3e\xa7\xde\x43\x6a\xd4\xc3\x34\xdc\x3b\x3c\xa9\x78\x9c\x0a\xc1\xd7\x1c\x7f\x0d\x7e\x9a\xe6\xe9\x15\x59\xe1\x72\xad\x6c\xdb\xf1\x08\x8f\xf1\x04\x5f\x7e\xe9\x85\xc6\xd2\x0a\x7f\xfc\x53\xcd\xf2\x85\x9f\x1f\xa3\x87\xaf\x88\x68\x4a\x33\x1d\x11\xa9\xe2\xcb\xad\x32\x2c\xc4\x37\xb4\x90\xb0\xc6\x0f\x84\x6c\xaa\xad\x6c\x21\x1d\x8f\x5f\xcb\x79\xf4\x2b\xcc\xd7\xb5\xe0\x43\x84\x32\x5b\x69\x25\x74\x5a\x9c\xd2\xe9\x2c\x23\xaf\x33\x3a\xfa\xb8\x36\xf8\x4a\xad\x95\xf0\xaf\x88\x90\x38\xbc\x62\xf3\x7c\x5c\xac\x0d\xbf\x52\x6b\x1d\xf8\xaf\x33\x0a\x4e\x3f\x23\xf1\xe0\x46\xbc\xaa\x6b\xf7\x84\xe6\x57\xae\xda\x67\xf5\xaa\x02\xe1\xbe\x76\x4f\x18\x83\x9a\x0f\xea\x9b\xad\x74\x1f\x74\x3b\x51\x1e\x04\xde\xd5\x5a\x87\x6a\xfb\xeb\x2e\x0d\x4b\xa5\xfd\xd5\xab\xe2\x8a\x88\xbd\x0c\x82\xc9\x3d\x68\x5d\x54\xab\xad\x83\xb9\x2e\xfe\x50\xf4\x75\xb5\x95\x2d\x14\x9f\xd7\x87\x62\xfd\x3e\x14\x9f\xd7\x87\x62\xfd\x3e\x00\x9b\xf4\x39\xbd\xa8\x57\xbc\xbf\x95\xcf\xe9\x49\xbd\xe2\xea\x56\x0c\xb7\x7c\x2a\x6e\x33\xf2\x46\xa7\xe9\xa7\x2c\x3f\x24\x45\x91\x5e\x91\xf5\x5b\xbd\x07\xd0\x4a\x2c\xc0\x1b\xe5\x8d\xc7\x31\xad\xd5\xa8\x35\x54\x5b\x09\xfb\xb5\xe1\xaf\x0e\x34\x7b\xb5\x16\x6c\xba\x16\xec\x33\xf2\x49\x9c\x1a\x36\x62\x2d\xb8\x6c\x4d\x9c\x39\x79\xc0\xcc\x4a\xd7\x03\x2a\x59\x3a\xb0\xfc\x7a\x18\xca\xc5\x7a\xd0\xed\xde\xf8\x30\xe8\xd9\x5a\xd0\x25\xe0\x53\xc9\x1b\x3e\x0c\xf8\x7c\x6d\xe0\x60\xe0\xb2\x26\xd4\xd1\x5a\x50\x55\xa0\xa8\x87\xe1\x3b\x5e\x0b\xf2\xe1\xfb\xb3\xdd\x57\x07\x7b\xe7\xaf\xf7\x0e\x0e\xd6\x04\x3c\x89\xfc\x4a\x6b\xe0\x7d\xa8\xb9\xd7\xf5\xc0\x5f\x7a\x78\xdf\x23\xaa\x35\x79\xea\xd5\x52\x9b\x12\xbc\xbe\xba\xf5\x8f\x4f\x8e\x6a\xec\x6e\xe5\x87\x03\x1a\x41\x14\x56\x69\x0d\x49\x34\xfc\x8a\xcb\x63\x5a\x37\x3a\x7b\x99\x66\xd9\x45\x3a\xfa\xb8\x2d\xbf\x6c\x9b\x20\x74\xff\x97\x7a\xdf\x1a\xb4\x1c\x3a\xee\x2c\x28\x10\xa8\x94\xd6\x8b\xe0\xbd\x4a\x9a\x5d\xcb\xea\xeb\x4f\x8b\xcb\xae\x21\x69\x47\xb0\x85\x45\xf7\xad\xd3\x16\x69\xad\xa4\xfd\x14\x07\x5b\x2e\x35\x94\x9f\x8f\x20\x87\x20\xea\x59\x7a\xcb\xe6\x2d\xf5\x05\x99\xce\xb2\x54\x90\xd8\x02\x2a\x1e\x57\x20\xe9\xa4\x0c\xb9\x0a\xdc\xf9\x40\x3a\x2f\x11\x65\xd7\x99\x4d\x6b\xc7\x1a\xfc\x1c\xc1\x78\xac\x0f\x7e\x32\xde\xbe\x24\xa9\x98\x73\xd2\x98\xbe\x5f\xcf\xc0\xb6\x65\x8c\xd3\x64\xe1\x52\x94\x8b\x4a\x4e\xcd\x65\x59\xca\xc1\x42\xc0\xa6\x2a\xcf\xfd\x9b\x23\x51\x4d\x4e\x4e\x1b\x61\xec\x5c\x44\xbe\x6e\x97\xb6\x26\x27\x07\x5f\x93\xe8\x74\xef\xe8\xcd\xf9\xee\xeb\xb3\xfd\xe3\x23\x85\x53\xdd\x7e\xc4\xcc\x8a\x6e\x57\x0c\x68\x65\x93\x19\xc2\xe5\x99\x50\xf1\x1c\x10\x16\xe5\x86\xf2\xe0\x55\xfb\xb4\x0f\xc6\xeb\xf1\x46\xc5\xf9\x89\x24\x2e\xce\x60\x23\x3a\x62\x00\x23\x18\x05\x5b\x04\x35\xc2\x13\xda\xf4\xa8\x9b\x49\x12\xe6\x89\xf2\x22\xc2\x39\x98\x21\xb5\x28\x6e\xf3\x1d\xf0\xaa\x15\x3a\x80\x43\x35\x62\xa2\x0b\x94\x58\x8d\x8f\x28\x4a\x84\xd4\x0d\x63\x56\x8f\x3a\x99\xfa\xab\x22\x5b\x7f\x55\xb4\xea\xa0\x3e\xd7\x6d\x63\x89\x2a\xf0\xff\x56\x2c\xea\x91\xe5\xb3\xd6\xcf\x8d\xda\x5f\x9d\x1b\xb5\x26\xdb\x1a\xaf\x87\x12\xe1\x74\x36\x23\xb9\xd2\xaa\xe8\x7c\x5b\x55\x35\xcb\x92\x54\x0f\xcb\x83\x2b\xae\xa7\x67\x7c\xd0\x50\xad\x63\x29\xf9\xb5\xce\x8f\x66\x4e\xf8\x96\x01\x6a\xf7\x90\x1b\x28\xfb\x5e\xe0\xbf\x03\xec\x7e\xbc\xa2\xa0\x18\x91\x13\xea\xbe\xbc\xd0\x25\x76\x20\x62\x8e\x1b\x20\x62\xfe\xb9\xa3\x50\xd5\x26\x7f\xee\x4a\x31\x67\xf9\xb2\x63\xa4\xed\x6c\x58\xba\xe2\xfe\xec\x53\xa3\xff\x34\x0e\x54\x1a\xc6\x23\x72\x93\xd1\x9c\x04\xf8\xc9\x0f\x71\x30\x4a\xf3\x11\xc9\x82\x12\x17\xf5\x81\xe6\xd1\x19\x6c\xfe\x15\x3e\xdf\x34\x15\x04\x58\x6e\xab\xf4\x62\x2e\xdc\xf0\x0c\x82\x74\x2e\xd8\x28\x9d\x51\x01\x29\x92\x02\xac\x5e\x30\xce\x95\xf1\xb1\xfc\x75\xc9\x46\x73\x49\x96\xb1\x55\xaf\x06\x97\x8c\x4f\x03\x1c\x4c\xd3\x4f\x3a\xc0\x0e\x0e\xa6\x34\xb7\xcf\x10\x6a\x6d\xc2\xb2\x31\x5c\x35\x70\x92\x8e\x59\x9e\xdd\xc2\xe3\x7f\xe6\x94\x03\x88\x82\x64\x2a\x60\xf2\x1b\xca\x89\xb1\xa8\x2e\x66\x24\xcb\xc0\x74\x25\x90\x27\xd9\x85\xbe\x45\x09\x04\x15\x99\xe4\xc8\x3c\xc0\x2a\xb2\xaf\xc1\x49\xee\x21\x16\x1b\x1d\x16\xff\xbe\x9c\xe6\xca\xb2\x24\x0f\x83\x59\x5a\x08\x12\xa8\x18\x60\xaa\x38\xd1\x1a\x11\x49\x39\x17\x58\xc7\xd5\x18\xcd\xc5\x83\xca\xd3\x7c\xb6\x56\x8d\x12\x5f\xcc\x2f\x2e\x32\x52\x40\x94\x78\x39\xfd\x66\x9c\x88\x7f\x90\x5b\x1d\x86\xc3\x1a\xb6\xa4\x03\x12\x7d\x24\xb7\xaf\xd9\x58\x71\x0b\x2b\x80\x86\x08\x0b\xdf\x70\x73\x20\x86\x60\xe5\xb6\xac\xf4\xc2\x65\x44\x56\xa7\x31\xcc\x1f\x85\x7c\xa4\xeb\xe8\xa3\xbf\xc4\x23\x9b\xdc\x63\x15\x06\x2a\x43\xac\x37\x93\x65\x85\x2c\x0c\x88\xec\xa1\x26\x0b\x41\x38\x0b\xf5\x7c\xdf\xce\xcd\x84\x37\x9b\x39\x56\xb3\xde\xd4\x2b\x46\xe9\x8c\x6c\xcf\x38\x29\x0a\xaf\x0c\x4c\xd4\xfd\x5c\x17\x82\x5f\xdb\x52\x84\xae\x16\x38\x56\x69\x59\x57\xe3\x8b\x2d\x00\x66\x07\x4e\x42\xf8\x48\x6e\xdf\xc9\x56\x75\x1b\x1f\xc9\x6d\x03\x8b\x8f\xe4\xf6\xfd\xcc\xb6\xd0\x3a\x88\x58\x57\x95\xc2\x88\x5f\xef\x0d\xbb\xc9\x3d\xc8\x63\x76\xe3\x61\xef\x87\x15\xcf\x7c\xcb\x9a\xb4\x1a\xcd\xd2\x31\x4f\x1b\xfa\x06\x3e\xed\x76\x1b\x06\xf3\x69\xb7\x0b\xcc\x65\x3a\x60\x0d\xde\x2e\x4d\x52\xc3\xdb\x59\xa6\x2d\x85\xf7\x7e\x43\x04\x21\x1d\x52\xb7\xd2\xbc\x9a\x2d\x60\x35\x40\x7d\x26\xb3\xdb\x6d\x98\xc4\xa6\x68\xc1\x97\xb0\x64\x69\x8d\x25\x1b\x14\x38\x1f\x96\xa8\x24\x99\x6f\x92\xe3\xf7\x26\x0d\x25\x1b\xb8\x21\xfb\x55\xc1\x47\x2f\xa8\x00\x75\xbb\x79\x54\x08\x36\x93\x5b\x72\x7a\xa5\x02\xde\x23\xcf\xbb\xa8\x58\xff\x70\x6a\xbb\x18\xfc\x7f\x37\xd5\xd7\xb9\xe0\x69\x5e\x50\xd9\xea\x19\xab\x45\x6a\x38\x1f\xcd\x39\x27\xb9\x00\x4d\x16\xe6\x2d\x2f\x8d\x61\x9b\x7c\x06\xd9\xc4\xfb\x9d\x10\x0c\x0e\xf4\xe4\x13\xb5\x7f\xb5\xeb\x29\x8f\x60\x71\x77\xbb\xfa\xc1\x72\x70\x9f\x27\x55\x56\xaf\x54\xbf\xb9\x4c\x79\xc1\xd9\x4d\x41\xf8\xf6\x7d\x01\xf1\xbf\xe4\x52\xbe\x7e\xd7\xff\x00\x39\x15\xa7\xb8\x58\xe6\x79\x93\xd5\x4c\x4c\xbf\xce\xac\x9a\x27\xcb\xb9\xc8\x06\x5b\x11\x0c\x71\x4e\x52\x4e\x0a\x71\x7c\x79\x76\x3b\x23\x7e\x16\x5e\x13\x21\x24\xe5\xfa\xc6\x01\xe7\x49\xc5\x1d\x4c\x0b\x5c\x3b\x22\x79\x49\x8c\x3f\x9a\x14\xdf\xfc\x9f\x7e\xc4\x1d\xf4\x42\xbc\xd0\xd6\xe4\xce\x33\x43\x6c\x48\xf9\xd4\x35\x52\x96\x06\xa3\x7f\x51\x31\xf1\xa3\x96\x2c\xc5\xcb\x80\x25\xe0\xb3\xb4\x02\x30\x27\x9c\xe4\x63\x08\x46\x5a\xb1\xe5\xf4\x17\x51\x64\x0b\xe9\x98\x00\xfa\xdc\x51\x59\x08\xbe\x54\x60\x32\xc9\x90\x65\x03\xc4\xbf\x5d\xab\x8b\x4d\xde\xf2\xb7\x4a\x9f\x84\x46\x93\xb4\x78\x73\x7c\xd8\xb2\x41\x93\x9d\x31\x1b\x01\xbb\x14\xc1\x64\x3d\x05\x9e\x0d\xe2\x6d\xc5\xda\x0e\xc8\xb6\x6a\x5b\xd0\x6a\x0a\x93\xc4\x0b\x5e\xd7\x50\xb5\x65\x2d\xf8\x0b\x36\xbe\x75\x64\xd9\x1f\x2b\x16\xee\x86\x66\xd9\x3e\x70\x04\xba\x43\xb1\xe4\xf8\xc6\xf5\x57\x10\xd1\x3d\x23\x29\x3f\x01\x64\x64\xa1\x5a\x68\xee\xa5\xec\x5f\x75\x94\x4c\x35\x3d\x48\x5e\x00\xaa\x4a\xfb\x8d\x77\x6e\x3e\x58\x1e\x22\xce\xb0\x48\xc1\x9e\xfc\x21\xdc\xa8\xed\xff\xdd\x5d\x10\x98\x30\xa2\x1a\xce\xdd\x5d\x58\x2d\xa3\xcf\xdd\x4a\x74\x01\x54\x62\x15\xe3\x10\x78\x8d\x96\x84\x2e\x95\xfe\xfa\x45\x85\x4d\x3c\x56\x6e\x14\xd1\xdf\xff\xf9\x7e\xef\xe4\xb7\xf3\xfd\xa3\xb3\xbd\x9f\x4f\x76\xd5\xf9\x1d\xce\xa3\x47\x75\x17\x0e\x1f\x23\xeb\x32\xb5\x03\x51\x7f\x94\x71\x85\x09\xf5\x6b\x0b\xc5\x95\x8f\x95\x4f\x25\xd2\xde\x00\x35\xa5\xcb\xdc\x3f\x34\x46\x6b\x1c\x1a\xed\x66\x2f\xde\xb1\x51\xd9\x57\x97\xed\xa4\x10\x60\xed\x0b\xb6\x4f\x01\x81\x19\x4c\x42\x19\xc5\xe0\x14\xc9\xa2\x5c\xbf\x03\x4d\xbb\xad\xd5\x27\xdf\xfd\x21\x37\xef\xcb\x4f\xb4\x96\x10\xdd\x10\x8c\xbf\xba\x6d\x5b\x7d\xe4\xd6\x87\x7f\xae\x69\xe6\x6e\x7b\x3f\xeb\xe0\x7e\xe0\x61\x6c\xcc\xa6\xbe\x09\x47\x37\x49\x16\x53\x36\x2f\x08\xf0\x51\x71\x00\xcf\xec\x5a\x92\x05\x1e\x33\x92\x5e\x13\xf3\x7a\x2e\x82\x12\x5f\x26\xac\x7e\xab\x00\x54\x29\xd4\x71\x63\x63\xfd\x08\x36\x1f\x4d\x0a\x91\x72\x11\x07\xf0\x7c\x2a\x9f\x03\x0c\xcf\x53\x26\xa1\xc2\xe3\x21\xbb\x26\xfa\x2d\xc9\xc7\xfa\xe5\x5e\x3e\xd6\xef\x94\x68\xa6\x5f\xbf\x56\xda\x09\x29\xcd\x48\xf1\x25\x0e\xb4\x58\x03\x6f\xe6\x33\xf8\xfd\x7e\x06\xbf\x40\x70\x82\x17\xef\x94\x08\x05\x5d\x50\xb5\xe0\x51\xd5\x83\x47\x59\x13\x1e\x64\x5d\x9d\x17\x66\x4a\xf2\x79\x1c\xe8\x1f\x87\x24\x9f\x07\x78\x94\xd1\xd1\xc7\x38\x18\x29\x33\xaa\xf1\x45\xa6\x5f\x8c\xd9\xfc\xc2\x5a\x57\x81\x5c\x47\xf3\x38\xd0\xf2\xa2\x7e\xc3\xe6\x42\xbf\x3a\x96\x22\x5f\x31\xbf\x98\x52\x11\x07\xea\x6f\x80\x41\x84\x8f\x8d\x24\x3f\xd2\x49\x41\x46\x26\x4f\x08\x4f\xaf\x34\x25\xe5\xa3\x26\xa4\x7c\x54\x2f\xd4\xb3\x1e\x41\xf9\xb8\xa7\x44\x5f\xf9\xa8\x07\x50\x3e\x1e\xc8\x47\xf5\x56\x8e\xb0\x7a\x79\x7c\xad\x4a\xb2\x99\xfc\xcd\x66\x06\xd6\xd8\x40\x1a\x07\x25\x1e\x47\x87\xc7\xef\x4f\xf7\xce\xf7\x8e\xce\xf6\x4e\xce\x0f\xf6\x76\x7f\xdd\x3b\x3f\x3c\xfe\x75\xef\x7c\xef\xd7\xbd\xa3\xb3\xd3\x9d\xe6\x14\xd2\x18\x34\xe6\x90\xc6\x01\x9e\xd5\x24\x80\x47\x98\x04\x65\xbc\x28\x11\xe6\x8c\xd9\xd3\x37\x90\x27\x77\xd0\x76\xbc\x99\x13\x16\xa6\xde\x2f\x2a\xf0\x6e\x51\x73\x79\x86\xfb\x3c\x88\x90\x64\x32\x86\xfb\xa1\xa8\x21\x46\xa4\x12\x9a\x93\xea\xcc\x2d\xb1\x09\xd4\x68\x94\x14\x6a\x82\x43\x5a\x0c\x2d\xf6\xaa\x28\xf0\xd4\xd7\x64\x78\x88\x07\x58\xe8\xf8\xeb\x18\xc4\xda\x0a\x30\xbf\x1c\xd2\x71\xce\x9a\x27\xe2\xdd\x5d\x51\xb3\x20\x44\x21\xb3\x1e\xcc\x36\x48\x5f\xba\x93\xc6\x4b\xd8\xa8\x14\x21\x15\x49\xeb\x80\x16\x10\xcf\x28\x54\x7e\xd4\xdb\xe9\x6c\x96\x51\xbd\x7d\x39\x27\x6a\x95\xb4\xa8\xb0\x87\xa7\xac\x9e\x8e\xc7\x2a\xc0\x60\x5b\x4d\xbc\xc9\x22\x5a\x84\x41\xd4\xf2\x0d\xb9\x4c\x88\x92\x47\x87\x30\x0e\xe1\x87\xf7\xb9\xec\x48\x47\xb0\x4e\x3a\x1e\x77\xfe\xda\xa8\xf7\xd7\x8e\xf2\xdd\x12\xac\x23\x89\xd4\xd1\x47\x77\x27\x7c\xb4\x60\x51\xa1\xfb\x75\x77\xc7\x06\xbd\xa1\xe1\x5b\x4a\x14\x75\x0e\xd3\x8f\xa4\x53\xcc\x39\xe9\xdc\xb2\x79\xa7\x20\xa2\xe3\x91\x58\x02\x13\x13\xd2\x91\x33\xa9\xc3\x78\x27\xcd\x2d\x58\xc9\x7a\xeb\x2f\xd1\x07\x64\x3d\x34\x32\xf9\x21\x47\x0d\x2b\xff\x49\x5a\x78\x7e\x0c\xca\x49\x2e\xc7\x99\x09\x32\x07\xd3\x4c\xcf\xc4\x90\xe1\x0c\xe7\x83\x6c\x68\xa6\x9f\x79\xef\x9c\x44\xac\xff\xc2\x03\x26\x80\xc9\x91\x25\xe7\x72\xf2\xd2\x65\xcc\x4a\x6b\x36\x6f\x08\x5c\x6a\x12\x9b\x0c\xaa\x93\x43\x08\x8c\xbc\xc2\x92\x71\xb0\x8b\xa7\x25\xa6\x35\x80\x60\xa5\xbf\x6b\xc4\xae\x30\x18\xa7\x22\xdd\xd6\x63\x65\x6e\xd5\x68\x62\xed\x58\x9a\x5c\xc8\x20\x07\xad\x21\xf0\x98\xb9\x09\x77\x48\x22\x2b\xc9\x15\x38\x4d\x98\x76\x5f\xd9\xa0\xe0\x9d\x69\x23\x40\xf7\x5e\x14\x3f\xa5\x2f\x0a\x13\xc6\x6e\x9e\xb0\x88\x0a\x32\x0d\x0b\xb4\xd1\x4b\x92\x64\x0e\xbe\x4f\xce\xad\xb1\x81\xdb\x76\xa0\xa2\x8b\x50\x13\xba\x6e\x15\x9e\x73\xa5\x88\x1a\x22\x54\x96\xf4\x32\xa4\x4e\x60\x1b\x25\x9b\x3d\x3c\x4e\x7a\x2f\xc6\xce\x3b\xc7\xc6\xd6\x9b\x24\x74\x30\x1e\x6e\x4c\xba\xdd\x89\x8a\x38\x0c\x8e\x9d\x10\xd5\x2f\x1c\x25\x13\x4d\x65\x0e\x1e\xfd\x23\xeb\x66\x33\x52\x77\xa3\xf7\x6c\xa5\xdd\xae\xbd\x80\x9c\x0c\xc4\xd0\x50\x4f\x3e\xe3\xcb\x44\xe0\x59\x65\xb0\x78\x62\xd7\xbe\xda\xf3\xd4\xd0\x06\x87\xb0\x05\x5f\xab\x1d\xc6\x59\xf4\xe6\x54\xb8\x2f\x21\xc1\x9b\x7d\xf9\x4f\x44\x92\x5f\xc1\x10\x9f\x25\xa5\x19\x16\x51\x31\xe2\x84\xe4\xff\xb6\x4f\xbf\x61\x11\x8d\xc0\x92\xf5\xdf\xf6\x09\xde\x09\x9e\xfd\x83\xdc\x42\x94\x79\xa1\x1e\x8a\x09\xbd\xd4\x8f\x92\xe7\x53\x4f\x17\x73\x21\x58\x0e\x0c\x6b\x26\xb9\x1e\x75\x91\xb0\xcc\x26\x87\xdb\x6b\x66\xc3\xbd\x88\x48\xbd\xa8\x48\xa9\x3a\x45\xe8\x34\x69\x39\x08\x06\x6c\x98\x90\xe4\xa5\x27\x7f\x13\x03\x82\x27\xa4\x8a\xc6\x0b\xd1\xed\x42\xa2\x8b\x28\x67\x63\x22\x77\x2b\x97\xf8\x81\xdf\xdd\x71\x15\xc7\x71\x33\xec\xe1\x51\xa4\x83\x7d\x15\x28\x94\xcb\x18\xbd\x40\xad\x8b\x4f\xa0\x9d\x3c\x14\x78\x16\x5e\x62\x82\x50\x0c\xd9\xe2\x57\xaf\xa7\x6e\x97\xba\x0a\xd8\x29\x01\x8e\xd8\x98\x94\x1b\x44\xee\xc3\x30\x66\x26\x1a\x43\xc8\xf0\x54\xa9\x2b\x75\xb4\xc5\x36\x1a\x08\x45\x83\x6a\xff\x37\xc6\x4c\xee\x3e\x4b\xf0\x56\x11\x2a\x24\x35\x72\x08\xa0\x8a\x16\x24\x9a\x71\x00\x6b\x52\x4c\x4b\x36\xb2\xa1\xe8\x74\x3e\x91\x9b\xca\xff\x51\x71\x6d\xaf\x40\x3b\xaa\x7c\x20\x4b\x73\xce\xb4\x46\x00\xf0\x29\xd4\xed\xae\x45\x31\x40\x93\x2a\x34\x95\x97\x65\x8d\x6e\xca\x4f\xac\x31\xba\xa8\x95\xa0\x02\x5f\xa3\x52\xe1\x48\x22\x96\x87\x62\x4b\x9f\x6b\x01\x36\x07\x9c\x72\x26\x09\x9b\x81\x56\xda\x89\x09\x8a\xca\xdc\xdb\x84\x05\xe4\x60\x14\xb5\x4d\x58\x87\xaf\xd6\x09\xba\x09\x82\x3c\x8c\x52\x86\xab\x63\x31\x68\x50\x61\x18\x60\x7f\x80\xb5\xf0\xad\x66\xb5\xbf\xdb\xe6\x72\x8b\x85\xe8\x62\x95\x96\xec\xae\xab\xbc\x28\x45\xc5\x8b\x52\x6d\x3b\x42\x6d\xbe\x14\xd8\x14\x88\x40\xc3\xd4\x06\x9c\xa5\x85\xd8\x5f\xb1\x09\xe3\x1e\x32\xd7\x07\xab\x36\x60\xa6\x37\xe0\x8d\xb4\xdb\x4d\xeb\x7b\x29\xa4\x9f\xc9\xed\x5e\x9f\xca\x8d\x3d\xb5\x9b\x2b\x41\x38\x8f\x66\xf3\x62\x22\x19\x95\xb2\x2c\x21\xf7\xb8\xd1\xcb\x40\x38\x35\x2c\xee\x67\xbd\x88\x37\x31\x76\xc4\x32\x4e\xca\x2c\x8c\x35\x8f\xe9\x6a\x40\xa2\xe6\xca\x44\x44\x87\x54\xac\x4e\x41\xde\xc6\xd2\x0e\xf8\x50\xb1\x68\x15\xde\x4c\xa0\x88\x5d\x5e\x86\x6e\x72\xfc\xed\x6f\x5e\x58\x49\x8f\xeb\x53\xed\xb4\xb3\x6f\xcb\xef\xdd\x4b\x6c\xdd\xb8\x43\x94\xbc\x0c\xc2\x9a\xbd\x32\x0a\x2a\x9a\xf6\xcb\xf5\x75\x0e\x46\x4c\xff\xb2\x4c\xb1\x2b\x15\xe8\x6b\x0a\xd7\x35\x61\x5a\x05\x31\xff\x0c\x91\xba\x3a\xf6\x89\x79\x61\x02\x0c\xd8\xdf\x54\xe7\x63\xda\xcc\x5b\x27\xd1\xa6\xda\xa4\xf6\x8e\x7e\x8d\xce\x9b\xdf\x37\x1a\xed\x30\xdc\x06\xa7\xdb\xe5\x56\xdf\x1a\xba\xa6\x13\x97\xed\x94\x4e\x81\xec\xfa\x13\xde\x64\xdd\x2e\xdd\xa1\x6a\xe9\xc9\x5d\x51\x76\xba\xfe\x5b\xad\xf0\x33\x9e\xe6\xc5\x25\xe1\x01\x8a\x07\x81\x95\x48\x03\xac\x25\xd0\xc0\x8a\xa0\xfa\x39\x53\x92\x5e\x60\xc4\x4d\x78\x94\xf2\xa5\x2e\x39\x0e\x86\x26\x6a\x76\x28\xb7\x31\xd3\xe8\x25\xfd\xf4\x0b\x63\x1f\x8b\x01\x19\x26\x8b\x19\x67\xb3\x42\xb6\xe7\x23\x30\x2c\x4b\x14\xfb\xdd\xab\xd1\xda\x11\x29\xd9\xec\xa1\x75\x0c\x74\xef\x55\xf2\x3c\x28\x19\xf7\x7d\xd3\xf7\xa1\xda\xa0\xaf\xa7\xf7\x69\x09\xfa\x41\x1e\xa0\x31\xd4\x88\x3f\x48\x4d\xb8\xaa\xdf\xeb\x24\x78\x6e\x0b\xd6\x16\x04\x9b\x10\x64\x41\x89\x80\xdd\x2e\x71\x6a\xeb\x1d\xef\x39\xae\x06\xc8\xfd\xbc\x78\x6d\x15\x37\xb8\x96\x28\x6b\xc4\xb2\xbc\x77\x77\xc4\xf0\xbc\xf2\x51\xb1\xc4\xf2\xc9\xb0\xc9\x92\xf5\xbc\x99\xd0\xd1\xe4\x65\xdf\x04\x22\x92\x9c\x25\x84\x47\xbb\xcf\x9d\xa4\x65\xe8\xfe\xaa\x6f\xc4\x3a\x85\xac\xd2\x71\x07\x7e\x67\x9a\xde\x76\x68\x2e\x38\x1b\xcf\x47\xa4\x33\xe2\xac\x28\xb6\x0b\x2a\x48\x47\xb9\xde\xcb\x3a\xd7\xf3\x2c\x97\x9c\x34\xcd\xa8\xa0\xa4\x78\xd1\x99\x65\x24\x95\xcc\x4f\x0e\x82\xb4\x98\xa4\xa2\x03\x74\x28\x3a\x17\x44\x56\xb8\x60\xf3\x7c\xdc\x49\x39\xe9\xcc\x80\x6e\xd9\x6d\x47\x19\x4a\x8c\xa3\xce\x5b\xc6\x75\x04\x85\xfc\x92\xf1\x29\xe0\x8d\x3b\x34\x1f\x65\x73\x40\x70\xc2\x6e\xa4\x18\xae\xcd\x69\xe0\x48\xec\xdc\xa4\x3c\xa7\xf9\x15\xee\x14\x84\x74\x26\x42\xcc\x8a\xf8\xf1\x63\x98\x18\x7f\x14\xd1\x88\x4d\x1f\x7b\xeb\xaf\x78\x7c\xdd\x8f\x3e\x3d\xfe\xff\x04\x1b\x9d\x5f\xa8\x4e\x6f\x43\xa7\xb7\x5d\xa7\xa3\xce\xa9\x22\xc3\xe5\x25\x19\x09\x32\x8e\x3b\xc1\x5f\xb7\xc8\xd6\x5f\x83\xbf\xea\xd8\x5c\xd6\x57\xae\x75\x10\xb5\x71\x72\x50\x35\x57\x8f\xa7\x29\x85\x1c\xf1\x89\x0b\xfa\x55\xcd\x20\x54\xd9\xc2\xb4\x7a\x69\x40\x86\x26\x53\x5b\xee\xdd\xe6\xc9\xcd\x19\x18\x96\x1c\x29\xd1\x85\x38\x3f\x38\x08\x64\x55\x65\x21\xdb\x16\x2b\xd5\x0e\xf4\x77\x77\x10\xed\xc0\x41\xd0\xf5\xda\xea\xb0\x46\x9d\x62\x59\x3b\x10\xa2\xae\x12\x82\xac\x58\x06\x5e\x16\x65\x95\xa2\x75\x67\xaf\xea\x65\x8e\xcb\x7e\x61\xcb\x2e\xc3\x9b\x55\xcb\x56\x6c\x35\x1b\x63\xe7\x52\xb6\xda\xd4\x22\xab\xc7\xd2\x0c\x63\xa6\xe2\xbe\x61\x95\xb2\xc8\x6b\xa1\xc0\xa4\x62\xf3\x59\xeb\xb4\x6a\xd4\xc4\x27\x74\x76\xc7\x1c\x92\x88\x42\xbc\x93\x0d\x30\x1a\x55\x57\xc6\x6a\x6d\x67\x92\x91\xf4\xda\xc8\xdc\xc8\x29\xff\xd7\x64\xee\xde\x9c\xa4\xf9\x15\x49\x46\xee\x85\xe7\xbd\xda\x36\xc0\x23\xd9\x67\x49\x25\x57\x2c\x44\x65\xad\x85\x8a\x2f\xea\x2a\x28\xcd\xd2\x0a\xd8\x14\x58\xbf\x25\x66\xdc\x63\x1d\x32\xca\x4c\x05\x2d\x26\x37\xa3\x1f\xba\x00\xc6\x4e\x96\x76\x6c\xab\x7e\x13\x0a\x64\x8d\x4d\x9c\x3c\xa7\x92\x90\x28\x32\x73\xef\x3d\x7a\x51\x8f\xf5\xe9\x27\x41\xc7\xf2\x3c\x38\xd4\xb8\x57\xe2\x98\xf9\xd1\xaa\x58\x23\xca\x47\xda\x1e\xfd\xc9\x33\x92\x33\x39\xd1\xac\x4f\x9a\x59\x0c\x58\x94\x15\x53\x2a\x3b\x69\x06\x43\x9c\xbb\x99\xd3\x12\x6b\x29\x5f\xb6\x9b\x6c\xe6\x77\x77\x79\x25\x59\x52\xe5\x37\x19\xdf\xdd\x55\xf7\x16\x8b\xc0\xdc\x3f\xea\x2b\xb7\xf8\x6a\xe2\x55\x02\xb9\x8c\x5c\xef\x64\x3d\xdc\x50\x2f\x9d\x28\x23\xbe\x0d\xdf\x8b\x14\x6e\x23\x5e\x91\x4b\xc6\x49\x28\xb9\x37\x5e\xa8\x61\x51\x61\xb6\xf7\xf2\xf1\xee\x25\x58\xe8\x80\xcc\xa8\xbf\x80\xf9\xfb\x38\xf1\x22\x31\x59\x85\xb6\xde\x11\x76\xf4\x5f\x4f\xff\xaa\x67\xe0\xdd\xdd\xd2\x4f\xa7\x56\x45\xdc\x52\x84\xfd\xf7\x70\x8d\x52\xc5\x1a\x85\xd8\x1a\x65\x6e\xc8\xc5\x47\x2a\x6a\x05\x75\xfe\x93\x0d\x7f\x4e\x8e\xd7\x60\xbf\x1a\x11\x2d\xd6\xf3\x31\x5a\x27\x4c\x86\xb2\xbc\xfa\x13\xad\xfb\x6b\xc1\xd2\xcd\x1d\xa2\x88\x40\xc6\x24\x63\x2c\x22\xa5\x1d\xd0\x12\x30\x5e\xd0\x42\xee\x62\xf1\x66\x0f\x6b\x3b\xb1\xd8\x06\xe4\x36\x37\x43\xd6\x46\x75\xb9\x29\x86\x32\x29\x0b\x66\x9c\x28\x3b\x8e\xa0\xc5\x44\xa3\x62\x8d\x16\xd9\xa2\x78\xb3\x62\x8c\xe2\xdd\x6d\xe8\x7b\x8d\xd7\x69\x9e\x33\xa1\xed\x8c\x04\x4d\x05\xe9\xa4\x1d\xeb\x06\xd5\xb9\xa1\x62\xc2\xe6\xa2\x93\x76\xec\xfa\xeb\xbc\x6b\xb2\x5b\xb7\x6c\x0e\xfc\x15\x2c\x35\xc9\x36\x3d\x82\x1b\xaf\x12\xea\x77\x52\xcd\x77\x75\x6c\xc2\x81\xc7\xe6\x64\x8b\x3e\xa0\xd2\xb3\x12\x31\x26\x21\x92\x9f\x9c\x82\xe6\x4e\xa4\x34\x2b\x2a\x1b\x81\x32\xd8\xd4\x16\x20\x36\xb2\x97\xdb\xba\x21\x2e\xbd\x26\x47\x23\x5e\x3d\x26\xa0\x31\x56\xe9\x6e\x48\x89\xb5\x91\xa5\xf5\xc8\x59\x3a\x14\x1b\x2e\x98\x9d\xf6\x43\x6a\x51\x06\x72\xe4\x22\x5c\xf8\x9e\x49\x25\x56\xb1\x85\x8c\x0c\xd0\xa2\x46\x54\x70\x4d\x6a\x62\x85\x80\xb2\x6d\x35\xb1\xdc\xd5\x6d\x96\x9e\x52\x3a\xcc\x3e\x4c\x58\x73\x28\x78\x6a\x0d\xba\xf6\xca\xd4\x8b\x68\xed\x78\x3c\x7e\xad\xc7\x33\x4e\xce\xb9\x9e\x92\xeb\xd7\x9a\xa4\x85\x31\x2f\x7e\x48\x35\x9a\x9f\x8f\xd9\xf4\x21\x35\xc6\xf6\xc8\x69\x37\x51\xf8\x26\x1b\x05\xab\x79\x9e\x2c\xec\x5a\x8c\x85\xb7\xf6\xdf\x1c\x1f\xc6\xd6\x29\x5e\x4e\x0f\x73\x6f\xec\x36\x08\x87\x7e\xec\x5c\xdc\x7d\xe5\x15\x7b\xe0\x28\x3f\xd6\x15\x5b\x47\x5b\x45\xa9\xff\x73\x0c\x71\x17\xbe\xb3\x92\x5c\x74\x66\x53\xb2\x14\x0a\x83\xdf\xd8\xbc\x33\x4a\xf3\xbf\x8a\x8e\xc4\xc0\xab\xd0\x61\x73\x51\xd0\x31\xe9\xc0\xb2\x21\x7a\x63\x92\x9b\x8e\x4e\xa7\x12\x54\x6d\xbd\x40\x0f\xb8\xd9\xf3\xcd\x11\x7d\x7d\x6b\x59\xe2\xbc\x36\x64\xfc\xa1\xae\x39\xcb\x66\xdd\x9a\x01\xe4\x15\xe9\x1f\x34\xb1\xd5\x38\xfe\x19\x29\x87\xac\x33\xa5\xf0\xad\x0c\xdc\xd4\x5d\x3a\x96\xbc\x6d\x2c\x25\xaf\x5d\x1d\xcc\xbc\x93\x76\x64\xe7\xb4\xac\x3e\x36\x6c\xa1\x1c\x45\x6f\xc8\xd6\x81\x6b\x8a\xaf\x04\x5a\x22\x5c\x5f\xa2\xf4\x8b\x16\x55\x65\x3b\x5b\x6f\xc0\x1f\xb0\x52\x4d\x15\x3e\xcf\x33\xc6\xbc\x88\x63\xee\x90\x54\x7a\xbe\x3f\x73\x87\xab\xcf\x06\xb7\x67\x2d\xec\x90\x11\xb4\xf0\x98\x76\xef\xb5\x5b\x7c\xf5\x22\xa0\xef\x27\xf5\xd5\xab\x78\xba\xe4\xe5\x26\xd1\xb1\xe6\xc1\xf5\x95\x46\x97\x59\x7a\x75\x45\xc6\xfb\x96\x0e\x28\x0c\x80\xae\xea\x22\x27\x0a\xb6\x04\x56\xe6\x5d\x31\xc7\x92\xb8\x31\x29\x21\x39\x2d\xe4\x75\xfb\x83\xd1\x1c\x85\x04\x42\xaf\x03\x0b\x00\xad\x48\x09\x24\xad\xcd\x0e\xe6\xcf\x8e\xf4\xa1\xb3\xc3\x9c\x5a\x0f\xb2\xcc\xff\x1a\x7b\x84\x3f\x2d\xff\xe4\xb9\x51\xb1\x47\xa2\x6e\x6e\x28\x7f\x87\xfa\xa8\xab\x8b\x35\xc5\xec\x7c\x65\xe2\xfb\xfc\xc9\x67\x31\x38\x8d\x65\xe8\x46\xe6\xcf\x12\x3b\xea\xf4\xb4\x47\x24\xc2\xb4\x46\xac\x1c\x2d\x67\x01\xbd\xfb\xb3\xc7\x57\x19\xbb\x48\xb3\x62\x9b\x93\x82\x65\xd7\xf7\x13\xe7\x73\xfd\x46\x6c\x4a\x99\x87\xc9\x79\x3a\xe3\xfc\xd7\x72\x00\x01\xbb\xa8\x2f\x1f\x0e\x5c\x44\x3f\x1f\x1c\xbf\xda\x3d\x38\x3d\x3f\xd9\x3b\x3d\x3e\xf8\x75\xef\xa4\xdb\x0d\xb3\x5a\xbe\x2c\x63\x5f\xba\xa8\x25\x1b\x76\x11\x7a\x20\xf3\x9c\x7d\x5d\x56\xec\x03\x67\x29\x2f\x20\x59\x9d\x0a\x92\xda\x1e\xe5\xa3\xcc\x19\x9f\x82\x53\xaa\x56\x79\x0c\x04\xe6\xc3\x84\x44\xc5\x2c\xa3\x22\x0c\x62\xab\x28\xb4\x71\x2d\x82\xcd\x24\x11\x3b\x1f\x1e\x2d\x44\x19\x3f\x5a\xc8\x45\x07\xfe\xa2\xe1\xe3\xf0\xf7\xe8\xee\xfc\x6e\x1b\x45\x8f\xaf\x30\x49\x5e\x92\x68\x34\x49\xf9\xae\x08\xfb\x28\x12\xec\xfd\x6c\x46\xf8\xeb\xb4\x20\x21\x42\xe5\x87\x98\x94\x7a\xbe\x58\x4d\x8b\x71\x8b\xb2\x68\xc3\xcd\x76\x22\xe1\x43\x41\x95\xc8\x52\x7e\xf0\x83\x79\x0f\x72\x1d\x26\x41\x3d\x87\x5c\x99\x8d\x68\xd1\x47\x57\x3d\x16\x13\xc2\x43\x8e\x4a\x1f\x76\xd5\x60\xbf\x4a\x2c\x10\x9e\xc2\x25\x5f\x92\xda\x7b\x08\x10\x5f\xf9\xa9\xe9\x98\x57\xe9\x88\x59\x92\x2b\x2b\x48\x5e\x4f\x95\xa8\x12\x4c\x22\x5c\x24\xac\x6a\x51\xf0\x38\x40\x38\x4b\xc0\xe0\xa0\xd8\x61\x51\x91\xd1\x11\x5c\x80\x23\x90\x6d\x41\x70\xac\x0c\x4b\xb7\xab\xca\x3a\xa3\x31\xdd\xfe\xe3\x00\x6d\xb0\x64\x3e\x98\xdb\x68\xc9\x43\xed\x05\x00\xc7\x9f\xf3\x4d\x46\xe1\xdc\x36\xb3\xdd\x47\x70\xb4\x85\x41\x14\x20\xb4\xa1\x71\xaf\xe4\x11\x44\xe1\x08\x19\x25\x16\xe8\x95\x21\x13\x75\x70\x28\x1f\x55\xaa\x54\x98\xd2\xf4\x12\x2e\xeb\xc1\xc8\x93\xdd\xdd\x6d\x8a\x76\xbb\xc8\xfd\xfc\x3a\xcd\xe8\xb8\x63\x12\xba\xc5\x9d\xdf\x3f\x3c\x5a\x90\xf2\xf7\x0f\xb8\x33\x9d\x17\xa2\x73\x61\x19\xf5\x4b\xc6\xa7\x9d\xdf\x3f\x48\x89\x37\x96\x24\xfc\xfd\x43\xc7\xa6\x24\x58\xd8\xfa\x04\x43\x01\x81\xcd\x9b\x7f\x29\x15\xc4\x19\x54\xc3\x63\xca\x65\xdd\x38\xc3\xf0\x87\x81\xcd\x6d\x9c\xe2\xc6\x94\x8b\x03\xfd\x2a\xd8\x1a\x97\x65\x35\x05\x8b\x7f\x81\xd2\x36\x89\x1b\xeb\x27\x49\x12\x0e\x59\xc8\x76\xec\xbb\x4e\x2a\x3a\xc1\x16\x8f\x5a\xd0\x74\xeb\xeb\x77\xb9\xb0\xe4\x48\xc6\xa1\x48\x3e\xc0\xd2\x63\x4c\x94\x91\x4e\x80\xee\x08\xcd\xc1\x36\x05\xd5\x6b\x06\xa8\xfc\x00\x29\x38\x49\x26\x27\x8b\xc2\x41\xae\x9e\xad\xa4\x01\x00\x12\xe6\x21\x2c\x50\x39\x4d\x3f\x12\x93\x82\xb6\xa2\x3a\xf1\x02\xa1\xcf\x0b\x72\xc2\xe6\x82\xf0\xa3\x74\xaa\x8b\x05\x17\x69\x41\x47\x01\x18\x41\x41\xe8\x76\xf5\x27\x09\x82\x58\x3f\xa9\x3f\x75\x24\xcf\x03\x64\xb6\x86\x33\x4d\x1c\xff\x7a\x6a\x3d\x02\x6d\xd8\x10\x17\xa0\x65\x36\x80\x90\xe1\xf7\x6a\x6f\xa1\xf7\x63\x32\x4a\xa7\x44\x2d\x01\x81\x2c\x12\xbf\x52\x72\x53\xdf\x2d\x9a\xdd\xc5\xcd\xed\x86\x58\x10\xaf\x59\x2e\x38\xcb\x94\xb1\xce\x97\x00\x82\xb2\x5f\x08\xe3\x50\x0e\x7f\xc5\x64\xcb\x1f\x78\x35\x26\x1e\xfd\xf4\x56\x45\x60\xaa\xa9\x1c\x4f\x00\xe6\x17\x92\xcd\x9a\xfd\x59\xd2\xa6\xf9\xbd\xb2\xcd\xad\xc6\x6b\x98\x83\xf7\xa3\x22\xf7\x9a\x15\xc0\xef\x83\xf2\x31\x67\x37\xf9\x5b\xc6\xeb\x2e\x94\xcd\x78\x39\xfe\x4e\xcd\x1a\x0d\x49\x76\x53\x6e\x67\x2a\xed\x5c\xc8\xb6\x82\x47\xb0\xa3\xb7\x9f\xbb\x38\xab\x24\xb1\xce\x11\x9e\x27\xbd\x17\xf3\x9f\x32\x63\x7c\x36\x37\xc6\x67\xa3\x24\x1b\xcc\x41\x47\x98\xaa\xc0\xf3\x23\x84\x8a\x81\x8e\xb3\x93\xe6\x85\x9c\xc2\x67\xcc\xaa\x25\xdf\xce\xb3\x2c\x87\x8d\x07\x8f\xd0\x30\xd9\xec\xb9\xec\xd2\xf7\x14\x17\xde\x45\x62\xad\x67\x79\x22\xbc\x43\xe1\x6f\x26\x65\xb7\x21\x2b\xec\xd1\xb1\xde\x86\xc6\x69\x31\x21\x1c\x96\x51\x8e\xca\x0f\xa5\x56\x29\xce\x93\xcc\xe3\x27\xe7\xcb\xf9\xc9\xb5\x42\x7a\xd7\x6c\x2b\xfc\xfa\x92\xed\xce\xd2\xff\xde\x9e\x67\x2c\x1d\x2f\x2f\xe2\x9b\x80\x7d\x03\xcd\xc7\xaa\x48\xab\xc7\x0a\xf9\x35\xa3\x27\x9b\x0a\xf7\xc5\x3e\x7d\x18\xd4\x62\x1d\xa8\x2c\x3f\x00\x1a\xae\x19\x09\x54\x15\x5f\x09\x91\xcf\xa1\x0c\xd8\x35\xad\x0d\xd7\xaf\xb4\x12\x3a\x0c\xf9\xda\x81\xa9\x79\xa4\xcb\xaf\x84\x69\x85\xb6\x07\x47\x26\x5d\x35\xc5\x75\x8a\xce\x87\x6b\x78\x96\xfb\x0f\x3e\xc8\x99\xde\x53\x05\xe4\x57\x34\x27\x1e\x4a\x2b\x64\xa8\xa5\x62\xd2\x37\x91\x56\x25\x33\x6c\x2c\x66\x8d\x83\x9d\x47\x45\x75\xbb\x33\x9a\x17\x82\x4d\x95\xf7\x92\x7a\xe3\xbb\x4d\x3d\xc0\x27\xd8\x83\x1c\x9d\xdf\xa4\x62\x34\xd9\xd7\x24\xd1\x16\xcc\xfa\x80\xd3\x0a\x86\xc0\xb7\x21\xdd\x36\xd4\x53\xa6\x15\x2a\x96\xc8\xc2\xbb\x05\x8b\x37\xfb\x25\x2a\xf1\xf9\x05\x63\xe2\xf4\x16\x52\x3a\x54\xc5\x0f\xf9\x81\x8c\xef\xee\x42\x02\x67\x48\x66\x4f\x71\x70\x9a\x39\xd1\xf7\x5b\x21\x64\x5e\xf6\x3a\xb8\xa3\x90\x72\x2f\x92\xca\xe7\xb8\xf1\xb9\xd1\x55\xef\x23\xe4\x16\x54\xaf\xc1\xa7\x8b\x3b\x9f\xae\x88\x03\x87\x81\x03\x53\x20\xf0\x0a\xb7\x10\x90\xcf\x73\x43\xbd\xfd\x9c\x0a\x0a\x92\x05\x2f\x34\x25\x6d\x9a\xcf\x74\x24\xe8\x35\xf1\xdd\x86\x6a\xf6\xb5\xd6\xbb\x4d\xd1\x27\xd9\xec\x19\x87\xf7\x3a\x5d\xd4\xf0\x7a\x01\x0b\x6a\x94\x53\x60\xce\xcd\x4d\xe1\xf9\x39\x04\x83\x51\xdd\x52\xe6\x71\x23\x36\x9d\xcd\x05\x19\xa3\x65\x69\xc4\xac\x39\x8d\xae\xa5\xcc\x68\x4a\x24\xf9\xec\x74\x7c\x9c\x67\xb7\x21\xc2\x63\x3a\x7e\xad\x2c\x04\xb4\x95\x95\xd2\x50\x55\xdc\xf6\x7d\xa2\xa3\x12\x83\xf9\xa8\x64\xe1\x54\x42\x7d\x8f\xde\x51\xf5\x93\xa6\xc5\x98\x8e\x4f\xa1\x6f\x50\x46\x9e\xf0\x9a\x1a\xf0\xdb\xce\xf4\x6a\x31\x2b\xce\x36\x6a\xe3\x4a\x83\x3e\x20\xab\x3b\x7d\x7f\x72\xd0\x48\x72\xe2\x17\xac\x80\xf0\xab\x68\xcc\x1a\xa3\xaa\xd3\x7c\x57\xa8\x5a\xf7\xc2\x36\x26\x67\x75\x3e\xcc\x9f\x68\x38\xf0\xd7\x3f\xb8\x63\xd5\x99\xb6\x5a\x81\xa6\xba\x39\xc7\xd4\xb3\x18\x57\x3e\x92\x0c\x37\xc6\x09\x93\x52\xee\xf9\xb2\x5f\x35\x9e\x57\x75\x7b\xce\xb3\x12\x5f\xd3\x82\xba\xb0\x47\x15\x1a\x6d\xf8\xe1\x60\xce\xed\xed\xf2\xf9\xb9\xb3\xd2\xf2\x76\x6e\xd7\x79\x7f\xf9\xd1\x24\x44\xc9\x4b\x11\x31\x10\x3a\x8b\xa8\x98\xb0\x79\x36\x56\xf7\x81\x2a\x1a\x80\xd2\x4f\x9e\x12\x21\xc0\x4f\x12\x45\x62\x42\xf2\x10\x6a\xc9\xa5\x07\x1b\x02\x66\xe0\x0e\x03\x79\xbb\x40\x11\xac\x65\x71\xfd\x0b\x94\x0a\x67\x36\x96\xcd\xee\x05\xe3\x82\x8c\x9d\x20\xd7\xed\xe6\xd1\xb9\x42\xe8\x90\x8e\x38\xcb\xe8\x45\xa4\x16\xb2\xab\x64\xd3\x17\xdd\x5b\x52\x21\x48\x31\x43\x1b\x80\xc5\xaa\x96\x77\x9c\xa5\x01\x89\xa6\xca\x1c\x14\xc5\xa4\xc4\x85\x37\xea\xb9\xb7\x49\xd9\x71\x85\xb1\x50\x53\x12\xe7\xde\x0c\x85\x1c\xb9\x30\xa4\xc8\x21\x52\x89\x48\xf1\xc0\x83\x63\x9e\xb7\x1c\x1d\x92\x05\x2e\xaa\xf7\xee\xb5\xed\x0b\x8b\x64\x51\xa2\x85\x88\x04\xdb\x73\x93\x40\xae\x59\x7d\x1c\x08\x70\x84\xf1\x4e\x9f\xc6\x5c\xc1\xb5\xca\x21\x6a\x9e\x40\x15\x10\x05\xe1\xd7\x74\x44\xe2\x6d\x63\xda\x24\x41\x98\xe7\x96\xba\x15\x5b\x02\x08\x60\x61\x32\x0c\x66\xd5\xd4\x4b\xaa\x2b\xb2\xb4\xb1\x4b\x37\x46\xf6\x2a\x54\x97\xbf\xf7\x83\x2b\x66\xf1\xe6\xf8\x50\x83\x57\xf3\x57\xca\xa8\x09\xf1\x7f\x61\xcf\x5e\x8e\x16\xaf\x14\xab\xb3\xa3\xe1\xe9\x9f\x89\x4e\x5b\x1e\x7a\x45\x74\x40\x52\x57\xa6\xda\x9e\x7d\x6f\xb6\x47\x8d\x31\xf0\x0d\x2d\xd8\x6e\xf6\xb1\xde\xb3\xd4\x80\x27\x41\xce\x72\x29\x0e\x7a\xe8\x55\x16\xa5\xda\x07\xbc\x37\x1e\x92\xfe\x6b\x8d\x67\xa5\xa4\xd9\x9a\xfd\x97\x6b\xe3\x09\x3c\x95\x1e\x4c\x85\x85\xf9\x95\xb8\x0f\x71\xf5\x43\x9b\x15\x9a\x85\x61\xeb\x40\x9b\x15\x36\xc3\xa4\x9d\x5a\xca\x87\x54\xe8\xe3\xf1\x18\x55\x5a\xfa\x1c\x85\x57\x5e\x75\xd5\x94\xd6\x1d\x37\xaf\x51\x75\x62\x54\xb8\x8a\xb0\x85\x30\xfe\x14\xf1\xde\x23\x54\xd6\x16\x8f\x3e\xa1\x1a\x87\x85\x77\x54\xa8\x89\x94\x54\x27\x52\x9d\xb9\x49\x9a\x48\xe0\xca\xcc\x4e\xea\x13\x1f\x13\xb3\xbf\x1b\xbb\xa2\x52\xc9\xcf\xc5\x7a\xf2\x73\x5d\xb8\xfd\xec\xeb\x98\x2f\x74\x3e\xaa\x5c\xde\x34\x2e\x9c\x97\x8b\x34\x6b\xc8\xf2\x5f\x1c\x35\x85\x2b\x96\xaa\xbd\xd1\xa6\x28\xa4\x64\xa4\x56\x48\xf6\x20\xff\x26\x97\x4f\x7e\x9e\x28\x3c\xc3\xd3\x6f\x22\x67\x5d\xcb\x6d\xed\x2a\x99\x34\x84\xad\x96\x00\x14\xa4\xca\xc9\x2d\x93\xc1\xd2\xb9\x60\x92\x65\x07\x5b\x45\x7d\x41\x28\xe7\x36\xfc\xf6\x68\x6d\xce\xc9\xe2\x21\x92\xda\x23\xb3\x09\x3e\x4a\xe6\x6e\x1b\xb8\xbb\x0b\xaf\xe5\x96\x39\x6d\xf5\x06\xcb\xad\x37\xd8\xe6\xbc\xe6\x1c\xd5\xed\xa6\x51\x46\x2f\x78\xca\x29\x71\x02\xde\x6b\xc6\xc9\x01\xbc\xbd\x0d\x6d\x26\x2d\x70\x1c\x35\xae\x87\x28\x52\x5e\x52\x08\xd9\xb3\x2b\x1d\xd3\x9c\x14\xc5\x1b\x72\x49\x38\x4f\xb3\x22\xe9\xd7\xc4\x17\xf3\xbb\x8d\x04\xc6\x8e\x5a\x73\x15\x9a\x82\x7a\x7b\xf0\x68\x68\xf7\xb0\x4a\x39\x83\x84\x57\x50\xcb\x55\xe7\x33\x4e\x66\x29\x27\x6f\x19\xff\xd9\x7d\x34\x4c\xbb\xa9\xaf\x0b\xdf\xa4\x54\xbc\x65\xfc\xcd\xf1\xe1\x09\x49\xc7\xb7\x21\x84\x4a\xa5\xd9\xd8\x32\x34\xea\x74\xb7\x7b\xe0\x45\x5a\x10\xbd\x4d\xf9\x8c\x90\x7a\x65\x93\x5a\x78\x37\x94\xb8\x26\x5b\xdb\x10\xa1\x6d\x24\xb1\x69\xc5\x1b\x7c\x55\x5d\x7e\x6e\xad\xed\x79\x4f\x2c\x23\x82\x6a\x5c\xcb\x42\xa1\xf7\xe3\xee\x6e\xa4\x9f\x90\x59\x0f\x56\x16\x95\x04\x79\x63\x17\xb2\xc5\x09\x04\xfc\x65\xdf\x7c\x89\xa7\x4a\x51\xa4\x43\x3d\x9e\x8f\x1b\xd5\xce\xcf\x4d\xda\xca\x8a\xc4\x20\x59\x23\xff\x77\x89\x1b\xc3\xb6\xd8\x34\x4b\x45\xfd\x8d\x68\x01\x5f\xa4\x94\xc0\xa2\x62\x34\x21\x72\x73\x40\xa1\x0e\x0f\x6f\x02\xab\x06\x63\x36\x85\x72\x81\x66\x48\x1e\x85\x4a\xba\xbd\x0d\xa1\xe2\x05\xcd\xc7\x46\xb0\x72\x45\x51\x89\xcd\x0f\x43\xd1\xaa\x85\x7e\xf5\x15\x19\x1b\xc3\x54\xab\x0e\x01\x33\x9e\x4b\xc2\x4f\xcc\x12\xb2\xbb\x40\x73\x51\x6d\x6d\x95\x38\x1d\x5f\x4b\xfa\xac\x53\x7c\x7b\x1b\xf7\x4c\x88\xb7\x96\xcf\xa0\xe9\x60\x11\xcb\x47\x44\x77\x4c\xf1\x44\x74\xfc\x8a\x8c\xd8\x14\x9a\xb8\x95\xab\x80\xb1\x8a\x7d\xb5\xfc\xfd\x8e\xb3\x29\x2d\x08\x6a\x68\x72\xf4\x87\x0d\xc1\x6f\x17\x8d\x9e\x8e\xe4\x44\x96\x13\xb8\x5c\x56\xcf\x57\x14\x29\x7f\xeb\xb0\xaa\x25\x5a\x83\xc4\xa8\x32\xe3\xa0\xe6\x89\x36\xd0\x48\xb2\xe8\xe4\xf4\xd7\x77\x11\x50\xdc\x4e\x3f\xaf\xfd\x84\x44\xb3\x7a\x0f\x40\xa3\xe3\x69\x72\x10\x06\x3f\x6c\x5f\x35\x2b\x67\x93\xcf\x77\x78\x6a\xb3\xe6\x78\x69\x32\x08\x63\x8b\x27\x25\x93\x3f\x54\x10\x4a\x2c\x4a\x88\xf7\x58\x10\x51\x5d\x37\xed\x4b\x64\x63\xad\xdd\xd7\x74\xcd\x71\xcc\x55\x9a\xd4\xde\xab\xcd\x1a\xa6\x86\xb2\xed\x82\xa9\xe1\x2b\x86\xe0\x1b\x9f\x83\xd9\x57\xa0\x6d\xd0\x82\x7b\xb7\x08\x7c\xcf\xfa\xb3\x03\x0f\x8a\xa5\x12\x57\xe7\xa1\x9e\x0d\x8d\xe1\xef\x76\x37\x1b\xe3\x2f\x47\x0e\x68\xb7\xa1\xa2\x5c\xd0\x88\x16\x67\xa4\x90\x6c\x0f\x0a\xd1\xdd\x9d\x8a\x7c\xa1\x8d\x5c\x77\xd5\xa5\x2a\x5c\x6e\x15\x48\xa1\x09\x7e\x3c\xf6\xed\x29\x49\xf9\x68\xe2\x22\x30\x6d\xf6\x50\xed\x04\x41\x21\x69\x1e\x56\x3b\x2b\x06\x2e\x6e\xdb\x0c\x91\xbf\x56\x8c\xce\x15\xba\x0e\xe1\x36\x7c\x75\xd8\x46\x73\x18\xcd\x05\xa4\xaf\xb2\x75\xba\xc3\xfa\x9c\x6b\xad\xef\x4d\x42\xac\x5b\xae\x04\x7a\x5d\x5b\x39\x70\x3f\x09\xfb\x08\x17\xe6\x0e\xa2\x72\x7a\xaa\xed\xaa\xdb\x0d\xdb\x3f\x2b\xde\x0d\xad\xe0\x25\x2a\xd9\x80\xdb\x4b\x78\x0e\x56\x2e\x22\x27\x5a\x09\x54\x67\x09\x46\x56\xcf\x55\x0f\x7b\xa9\x36\x49\xa7\x73\xf2\x73\xf6\xd7\x0f\x3d\x7b\x09\x03\x95\x84\x57\x8b\x47\x46\x8d\x86\x22\xbd\x59\x26\x2f\xd5\x90\xb9\x45\xc7\xfd\x45\x47\x4a\x54\x82\x3e\xe2\xaa\xaa\x65\x81\x36\xad\x96\xa5\xba\x97\xb4\x79\x65\x98\xa4\x56\x9e\x53\xa0\xaf\x31\xf1\xf5\xbe\xd8\xb0\x07\x96\x3b\xa8\x29\x68\x5a\x5c\x2e\xf1\x42\xf1\x41\xb1\xb6\x1b\x6d\x33\xc7\xaa\x42\x81\x16\x63\x65\x49\x61\x5a\xac\x96\x68\xd7\x9a\xe2\x79\x54\x8f\x54\x01\xfe\x9d\x7f\xa8\x14\x00\xb5\xae\x78\x17\xdb\xd8\xdf\xc2\x8d\x12\xd2\x6f\xcf\x88\xe8\xb1\x5c\xf6\x12\xa7\xdd\xb9\x60\x07\x56\x6e\x6f\x2d\x3a\x49\x8b\x89\x2c\xfa\x4b\x5a\x4c\xee\x2b\x4a\x0b\xc1\x24\xab\x3d\x8a\x7e\x51\x8f\xf7\x54\x00\xfd\x0b\x1e\x45\x47\x2c\x27\xad\x45\x2f\xa3\x19\xa7\xd7\xa9\xa0\xff\x25\x1f\xb6\x2f\xe6\xa3\x8f\x44\x6c\x8f\xd2\xd1\x44\xdd\xd5\x7c\xa8\x8c\x89\xe4\xc0\x47\xd1\x2b\x28\x04\xd6\x5e\x4b\x54\x66\x8a\x7a\x6e\x0e\x9c\xaa\xf7\x35\x1a\xd7\x4b\x07\xe7\xf6\xa9\x7a\x83\x10\x12\xd8\x2d\x66\x4a\x61\xbc\xeb\x06\xc0\x4c\x5d\xb8\x83\x27\xe6\x26\xfd\x22\xb9\xf2\x34\x01\x17\xab\x35\x01\x9e\xf4\xfc\xf5\x43\x8d\x7c\x03\xab\x55\x75\x87\xdc\xea\x6a\x4c\xc1\x9d\x7c\x40\x86\x49\x0e\xf6\x79\x83\x21\x96\x0f\xca\xdd\x53\x20\xcc\xbb\x5d\x11\x2a\x4f\x66\x9f\x2d\x69\xfa\xde\x52\x30\xe2\xc3\x3c\xba\xa1\xf9\x98\xdd\xb4\x26\xc3\x7f\xed\x64\x5a\x13\x03\x48\xce\x0e\xef\x75\x48\xf0\x42\x05\x0a\x8b\x85\x32\x1f\x23\x25\xda\x30\x40\x23\xb3\x24\x55\x59\x86\x4a\x89\x6b\xb7\x0b\x18\xfb\x7b\xaf\xf1\x8d\xd6\x1b\x7d\xdd\x4b\x70\xef\xe8\xd7\x68\xef\xf0\xd5\xde\xc9\xf9\xc1\xf1\xee\x9b\xf3\x5f\x8e\x8f\xff\x71\x7a\x77\xb7\x28\x31\x4d\x16\x25\x66\x09\xdd\x70\x55\x59\x89\xd0\x86\x9b\x0a\xa3\x54\x6e\x2c\x56\xcf\xb0\x9e\x61\x45\xeb\x34\xf8\xa6\x76\xca\xb4\xd8\xcb\x55\x94\x92\xa6\x4b\x3b\x0c\xb9\xf1\x65\x56\x61\xc8\x20\x3e\x0c\xdf\xe1\xf1\xe6\xa6\xa6\xce\x11\x64\x55\x38\x7e\x27\x25\xfd\xdd\x83\xf3\xb7\x7b\xbb\x67\xef\x4f\xf6\x4e\x25\x51\x15\xe5\x5e\xef\xbe\xfe\x65\xef\x7c\xf7\xdd\x7e\x62\xde\xfc\x7c\xb0\x7f\x78\xb8\x77\x72\xbe\x7f\x74\xbe\x77\xb0\x77\xb8\x77\x74\x66\x3f\x9d\x1c\xbf\x3f\xdb\x3f\xfa\xf9\xfc\xf0\xf8\xcd\xde\xc1\xf9\xee\xc9\xcf\x8d\x4a\xa7\x7b\x67\xe7\xaf\x8f\x0f\xdf\x1d\x1f\xed\x1d\x9d\x9d\x9f\xed\x1d\xbe\x3b\xd8\x3d\xdb\xb3\xc5\x5e\xbf\x3f\x3d\x3b\x3e\xf4\x4a\xec\x9e\xfc\x7c\xfe\xee\xe4\xf8\xdf\xbf\xd9\x22\x87\xc7\x6f\xde\x1f\xec\x9d\xbf\x3f\xda\x7f\xbb\xff\x1a\x34\x14\xf6\xd3\xd1\xee\xe1\xde\x9b\xf3\x57\x07\xc7\xaf\xff\x71\x6a\x5f\xee\x1f\xbe\x3b\x39\xfe\x75\xef\xcd\xf9\xfe\xd1\xe9\xd9\xc9\x7b\x89\x6f\xb5\xd6\xc1\xfe\xab\x93\xdd\x93\xfd\xbd\xd3\xf3\xfd\xd3\x93\xbd\x9f\xf7\x4f\xcf\xf6\x4e\xf6\xde\x24\x24\x32\xc4\x48\x48\xf4\x66\xef\xed\xee\xfb\x83\x33\x4b\x9f\xea\x4c\x5b\xac\x02\x14\x6f\xf6\xf1\x6a\x4c\x5c\x09\xbf\x03\xee\x6d\xb3\xc7\xee\xdb\x72\x82\xc5\x9b\x3d\xbc\x0e\xed\x5d\xb9\xc6\xe8\x35\x41\xb8\x31\x77\xdf\xec\x0c\x89\x37\xfb\xe5\x46\x0b\xad\x2a\x69\xe0\x8c\x3e\x38\xc7\x6a\x06\x9a\x52\x5e\xe6\x10\xe6\x34\x14\x9b\xe1\x3d\x13\x55\xc5\xa3\xd8\x4c\x12\x82\xee\xee\x48\xe9\x0d\x1a\xd5\x1e\xf8\x2c\xa4\x2b\x07\x1a\x6d\xdc\x33\x11\x52\x63\x50\x61\x01\x2d\x1b\x48\x07\x6a\xe9\xa4\x2b\x94\x11\xbc\x07\xcc\x1f\x73\x07\xa0\x32\x95\x33\x6d\x04\xe6\x2a\x35\xa7\x84\xab\xda\xb2\x40\xe6\xda\x5c\xd9\x01\x58\x3e\x6f\x1c\xa0\x15\x8b\x71\xb4\xa1\xcc\x96\x1d\xc0\xd5\x93\xcc\x01\xbd\x67\x23\x18\xeb\x70\xd2\x0e\x70\x63\x56\x3a\x58\xcd\xed\x66\x02\xd5\x2f\x5b\xf0\x72\x33\xb7\x89\x8b\xb7\x93\x5d\x02\x80\x99\x4f\x29\x33\xbd\x3d\xc2\xd8\x3d\x71\x56\x65\x20\xac\xb7\xf6\x7a\xe7\xc5\x12\xd3\xa0\x6f\x66\x3e\x67\x93\x3a\xaf\x6d\xe9\x66\x6b\x34\x4c\xb2\x5c\x57\x8d\x19\xf6\xb6\x4a\xa0\xb5\x5e\x04\xfb\xaf\x1b\x7e\x0a\x1c\x56\x75\xa4\x17\x29\xa9\x2b\x84\x8e\xf3\xec\xd6\x76\xa0\x35\x6a\x95\x9f\xd4\x43\xc8\xca\xed\x55\xf5\x66\xaf\xc3\x0a\xd7\x2e\x6c\xef\x23\x88\x16\x73\xa7\xd0\x27\x88\x4b\x48\x4a\x67\xfd\x5d\x11\x01\x5d\x99\xb2\x5c\x86\x8b\xa8\x0f\x83\x31\x8f\x5e\x6f\xca\xad\xba\xf2\xa9\xdd\x25\x79\xa0\x55\xe6\x52\xf3\xf3\x1c\x12\xde\x7c\x1b\x97\x57\x25\x02\x24\x8d\xb9\x08\x67\x87\xfa\x88\xc2\xc0\xe1\x12\xe0\x5a\xb2\xbf\x25\x5e\xb3\x4b\x43\x46\x58\xa3\xc3\x15\x1e\x5b\xf7\x51\xe2\xeb\xe5\xfe\xbb\x2f\x89\xf1\xb7\xf5\x2b\xce\xbd\x0c\xce\x72\x4b\x05\x93\x9f\x46\x02\xbf\x46\x60\x0d\x67\xa2\x2f\xb7\x12\x15\x21\x56\xdd\x49\x49\x21\x54\x27\x17\x01\xcf\x09\x95\x7c\xd3\x19\x8b\x2d\x1a\x29\x62\x06\x74\x08\x76\x4f\x0d\xfd\xc8\x80\x0e\x13\xb5\x0b\x2d\xf7\x10\x86\x7b\xd3\xf5\xd6\xc1\xca\xfb\xd7\x9a\x87\xa7\x02\x2b\x47\xde\x6a\xe2\xda\x3e\x0a\xa5\x20\x6c\xfb\x74\x93\xf2\xbc\xed\xfd\x28\x9d\x49\xf1\x62\x5b\x5d\x60\x6f\x0b\x4e\x1a\x39\x9d\xbf\x9e\x9d\xe8\x72\xbb\x62\x2d\xa3\x7b\xf1\xe2\xf4\xe8\xae\x6d\xb8\x6b\x40\xe8\x7a\x2b\x8d\x82\xad\x2a\x75\x4d\xe8\x9e\xf2\xf5\x3e\x33\xee\x87\x02\x76\x55\x56\x1b\x5e\xeb\xde\xfd\x2b\xe5\x0f\xa4\x0c\x7b\x10\x65\xf4\x74\x50\xd6\x2a\x67\x72\x32\xac\xd7\x4a\xea\x27\xc0\x27\xd1\xb9\x9c\x6e\xfb\x97\xef\x0b\x9a\x5f\xc9\x73\x66\x36\x23\xe3\xb7\x4a\x90\x7d\x9b\xa5\x57\x85\x8a\xcd\xfe\x46\xce\xc2\xb7\x1a\x56\x02\xc6\x7b\xf5\x57\x76\xba\xcb\x77\x09\x51\xf7\x18\x50\x08\x3e\xca\xc2\xe0\xee\x6a\x7e\x9d\x92\x34\xf3\xab\x99\xf7\x09\x89\x24\x4a\x89\xdc\xde\x2f\x21\x88\x7b\x51\x10\x5e\xb3\x57\x06\x9d\x67\x89\x33\x30\xd5\xd0\x05\x0c\xe3\x2b\x5f\x41\x55\xc3\xc8\xca\x17\x00\xd2\x30\xa2\xca\xbe\x43\xb6\x65\x38\x48\xf5\xc6\x60\x62\x18\x43\x5b\x0e\x70\x35\xdc\x9e\x7d\xab\xfb\xa3\xa2\x77\x4d\xe1\xbd\xd7\xe9\xa9\xbe\xf2\x97\xaf\x1b\xe4\xba\x86\x8f\x57\xf0\xb1\x41\xde\x2b\xad\x7c\x6a\x19\x3b\x73\x76\x0d\xec\x93\xf3\x32\x2c\x37\xea\x83\x70\xb1\xce\xf8\x2a\xba\xb6\xed\x8d\xcb\x36\x9d\xea\x6e\xa9\xf9\x52\x38\x82\xbe\x5d\x1c\x92\x25\x41\xf8\xc8\xa7\x19\x1c\xf2\x64\xa5\x6d\x67\xf0\xea\xfd\xcf\x71\x07\x3c\x59\x3a\xb4\xe8\x4c\x69\x21\xa9\xd1\x69\x29\x5a\xb5\x1f\xda\x09\x8c\xbf\x7b\xbc\x3d\x66\xd3\x20\xf6\x7e\xd3\x9c\x70\x11\x38\x6f\xa7\x16\x5c\xf8\xd2\x96\x83\x2d\x8e\xd4\x1c\x72\xcb\x37\xd2\xa4\x0e\x51\xb9\x6c\x30\xbc\x13\xe5\x33\x74\x4b\x95\x03\xaf\x09\x5c\x47\xb9\xfe\xea\x9c\xb8\xee\xf3\xb1\xb2\xb4\x7a\x9f\x0b\x9a\x79\x67\x47\x52\x2f\xb0\x3f\x5e\xf5\xb5\xfa\xad\xb6\x5d\x26\xad\xcc\x8a\x3e\x14\xf5\x96\xb1\xd1\xac\x45\x1b\x48\xfa\xad\x88\xc6\xd7\x2a\x86\xfc\xfe\x2e\xe6\x26\xc4\x82\xda\xb4\xd2\x84\x2d\x0f\x8e\xd0\x32\x1e\xdf\x4e\x48\xa2\xf9\x35\xfb\x48\x5a\x09\xf9\xcb\xee\xd1\x9b\x83\xbd\x93\x8a\xee\x4a\x24\x40\x3f\xfb\x49\xe8\xb0\x40\x4b\x29\xcb\x4d\x2c\x04\x53\x40\x37\x98\x2f\xeb\xb3\xe5\x8a\xbe\x5d\x97\x0d\x77\xd0\xb2\xbb\x0a\x1d\x7e\xb4\x51\x82\xa0\x85\x70\x06\x8d\xa8\xd4\xd4\xd8\xec\x2f\xeb\x87\x62\xe1\x96\x45\x70\xfe\xbf\xbd\x06\x1f\xb2\xfc\xd6\x5b\x62\xcb\xa7\x80\x9e\x23\xd5\x15\xb8\x1c\x9d\xe6\x6a\xaa\x22\x64\x96\x12\x5d\xc5\xd7\x37\x0c\xff\x9a\x5c\xfe\x57\xa6\x6f\x3d\xc2\x44\x42\xa2\x77\xbb\x27\x67\xfb\xbb\x07\x4e\xb5\xec\xf4\x57\xfb\xa7\xe7\xbf\xee\x9f\xee\xbf\x3a\xd8\x4b\xc8\xea\xd4\x2c\x09\x89\xde\xbe\x3f\x82\x74\xc3\xe7\xef\x4e\x8e\xcf\x8e\xcf\x7e\x7b\xb7\x77\xbe\xf7\xef\xb3\xbd\xa3\xd3\xfd\xe3\x23\xf9\x7d\xf7\xdd\xbb\xf3\xd7\x67\x27\x07\xa0\xdf\xda\x3b\x91\xc5\xde\xc1\xfb\x83\xfd\xdd\xd3\xf3\xc3\xbd\xb3\x5f\x8e\xdf\x24\xa4\xc5\x54\x2f\x21\x91\x43\xe9\x70\xf7\x68\xf7\xe7\xbd\x93\xf3\xd3\xb3\x93\xfd\xa3\x9f\xcf\x0f\x8e\x8f\xff\xf1\xfe\x5d\x42\x22\x0d\xd4\x62\x73\xb8\x77\xf2\xb3\xc4\xfa\xe0\xf8\xe7\x9f\xa1\x9b\xaa\x6f\x80\xd1\x1b\x87\xa2\x2c\xea\xa5\x4a\x4e\x6c\x10\x4a\xff\xe5\x66\x6f\x63\x79\x7d\xf8\xa8\x5b\x81\x67\xd5\x32\x3c\x56\x91\x82\x57\xf7\xf5\x04\x0a\xb5\xd0\x00\xde\x57\x48\xa5\xde\xb4\x12\x15\x3e\xad\x1e\x0f\x85\xea\xca\x21\xf5\xba\xdd\x3a\x25\xe0\xbb\x9d\x3d\xf0\xab\x31\xbd\x36\x6b\xfc\x9a\x75\x2d\x5c\x26\xcc\xea\x02\x72\x8f\x51\x8f\xdb\x2a\x78\xe3\x3a\x86\xca\xbe\xfe\xe4\x81\x6a\x09\xdf\x66\x77\x9c\x5e\x6d\x4f\xd3\xd9\x67\xa4\x6e\x5c\x1d\x03\xe7\x21\xee\x95\x0d\x6b\x64\x9f\x67\xfa\x24\x48\x5e\x50\x96\x6f\xdb\xb4\xcc\x0f\xb2\x74\xbe\xd7\x75\xb3\x6e\x64\xfc\x2d\x1d\x9f\xf7\x80\x18\xef\xf4\x18\xaf\xef\xff\xec\xd7\xbb\x4f\x7e\xfe\xac\x36\x8a\x66\x1b\xad\x47\xca\x34\xa1\x91\xb5\xe7\x31\xea\x37\x1a\x99\x7b\xfa\x77\x9c\x7d\xba\x05\x55\x13\x5e\xac\x67\xcb\x5c\xb3\x50\x29\xf1\x39\xf5\xac\xec\x4e\xd2\x5c\xa5\x24\x2e\xe6\xbc\xea\x48\x69\x00\xd7\x4a\x1b\xcb\xe8\xa6\xb5\x5e\x6b\xf1\x64\xb3\xb7\xda\xc0\x17\x6a\xb5\x35\x8f\x7d\xd3\xdf\x51\x9b\x9d\x6f\xdd\xf6\xa6\x62\xec\xe8\xf9\x61\x2a\x73\x1c\xdf\x71\xb3\x5a\x53\x79\x50\x61\x0f\xf3\x56\x6f\xcf\xea\xf7\x12\xd3\xa6\xfb\xe9\x92\x7a\x6d\xe5\x4a\xdc\xa0\xa0\x31\x30\xad\xbc\x0f\x03\x9f\xa2\x01\x36\x29\xc9\x84\x87\x8f\xee\x81\x81\xd9\xe2\x15\x4b\x96\x03\x6f\x96\x0e\x70\xa8\x22\xd8\x2d\xfc\x4e\x4b\x9c\xe5\xec\xa9\x41\x00\x61\xd7\x66\xe1\x51\xae\x94\x99\xe7\x4a\xe9\x51\x02\x43\xa6\xbc\x66\x46\x00\x2f\x29\x1d\xa4\xf1\x21\x48\x28\x8b\x0b\x6e\xed\xa5\x44\x19\xe6\x48\x87\x0e\xb7\x7a\x1c\xac\x52\xd8\xd9\xa4\x71\xc5\xd6\x16\xe2\x49\x3e\xa0\x83\x62\x38\xc4\x0c\x4c\xbb\x55\x9c\x1a\xcc\x31\x8f\x2e\x20\x6e\x36\xe6\x51\x7a\x29\x08\x47\x1b\x2c\x12\x6c\x56\x30\x2e\x42\xe5\x69\x66\x6f\x56\xaf\x1d\x6a\x0b\x6b\xb7\x14\x93\xd2\xc8\xbc\xae\x87\x04\x07\xc6\xae\x2f\x40\x77\x77\x2e\xe5\x93\x99\xa6\xc2\x8b\xf8\xed\x87\xb6\xb1\x44\xa8\x85\x6a\x57\xde\x58\x72\x29\xc3\x35\x0a\xd8\x73\x34\xdf\x69\xeb\xbd\x01\x19\x1a\x9d\xc0\xa2\xdc\xe0\xf2\x43\x35\x29\xa7\x29\x64\x8c\x1c\x9d\xdd\x1a\x47\xa5\xfe\x38\x10\x40\x21\x50\x1b\x4f\x6b\x91\x7b\xbd\x39\x11\xb7\xa4\xfb\x6c\x5b\x01\xcb\x0a\xda\x02\xf1\x55\x7d\x46\xfb\x3f\x83\x56\xa0\xaa\x4e\xdb\x44\xb5\xaf\x3b\x55\x20\xd5\x05\x5e\x89\x23\xcf\xec\x5e\x1a\x2e\xcc\x61\x1a\x5f\xc3\xec\xde\xf0\x77\xeb\x24\x93\xff\x7b\x99\x9f\xc3\xa6\xe1\x1a\x26\x2d\x5e\x8c\x55\xdb\x3e\xed\x68\x65\xa2\xbf\x04\x23\xef\x76\x51\x72\xfb\x19\x11\x2c\x37\xae\x93\xf5\xc2\x2a\x02\x79\xb3\x9c\x43\xc9\xf1\x28\xc6\x86\xcf\x8b\x74\xda\xe2\x9c\xe9\x19\x8f\x29\xe0\x01\x84\x39\x37\x24\x09\xf0\x92\xac\x1c\x55\xd3\x3e\xad\x0c\xfa\xcc\xda\x6c\x0e\x57\x03\xe7\x82\xcd\x0e\xc8\x35\xc9\x7e\xa5\xe4\xc6\x5c\xe3\x05\xd8\x06\xac\x8a\xb7\xd9\x5c\x64\x44\xd4\xeb\x43\x68\x4c\xf3\x6d\x0d\xcb\x42\xaf\x6a\x85\xa3\x33\x89\x0f\xab\xa6\x72\x2b\x2a\x3c\xa4\x25\x67\x91\x77\xe1\x6c\xfd\x02\xcc\x56\x9b\x0a\x2e\xa3\xd4\xd7\x80\xd1\x6e\x19\xd8\xee\xaf\x6b\xd9\xc5\x71\xa4\x6d\xa1\x57\xdb\x1f\xba\x0a\xc1\x1a\xcd\x98\x55\xb7\x7d\xc9\xf8\x36\x30\xc3\x57\x34\xbf\x32\x2b\xca\x18\x58\xf3\xfb\xe6\xaf\xe5\xb1\x15\x8c\xed\x74\x9c\xce\x3c\x8b\x53\x8f\x51\x5e\xd5\x60\x0d\x28\xe4\xd7\xab\x41\xb2\x0d\x81\xb6\x7a\x57\x7d\xf4\xdf\xb7\x21\xd0\x5c\xa6\xcb\x71\x9d\x44\xaf\xdb\x9a\xa8\x83\xd0\x1b\xc7\xb6\xd2\xb2\xea\xba\x97\xce\xfa\xe0\x00\xde\xa3\x32\x14\xbe\xb1\xa7\xe2\x3a\x9d\x9d\x27\x18\x9e\x63\xbb\xf3\xc1\xb5\xe3\x89\xff\xcb\xda\x80\x4e\x97\xdb\x80\x36\x64\x8e\x07\xde\xa7\xd7\x44\xa0\xe5\xc1\x62\x57\x3b\x3f\xd6\x04\xb6\xa5\xc2\xde\x9f\x1d\x55\x46\x44\xf5\x8c\x0b\x2d\xfc\xbb\x70\xa3\xee\x73\xf5\x92\xe9\x5d\xd3\x57\x11\x6c\xd5\x6d\xce\x2d\x60\x02\x37\x7c\x27\xb0\xb4\x20\x1b\x04\x22\xbe\x88\x7a\x54\x0b\x5b\x20\x21\xb5\xb8\x11\x1e\xdf\x2c\x8f\x4b\xea\x1d\x97\x97\x69\x96\x5d\xa4\xa3\x8f\x31\xa9\x94\x2b\xad\x7f\x99\xef\x41\x26\x5c\x7e\x83\x70\x01\x17\x01\xe0\x8d\x51\xd6\x7d\x26\xfa\xda\xf3\xa9\x2d\x5e\x8d\x76\xa9\xb1\x91\x45\x2a\x6e\x36\x10\x7e\x1d\xdc\x8c\xf4\xab\x50\x24\x2f\x45\x58\xf3\x86\x22\x08\x21\xd4\xf4\xd2\x59\x2b\x52\x8e\x62\x60\x33\x66\x84\xb6\x37\x64\x26\x4f\xbe\x7c\x44\x89\x15\x78\x1a\xd1\x73\x2c\x65\xef\x09\x51\x53\xf3\x1c\x59\x12\x75\xe6\x81\xd1\x3c\x3e\x33\x48\xcd\x3c\xf7\xc2\x1a\x2f\x5a\x9a\x54\xae\x52\x64\x55\x22\x4b\xc5\x73\x41\x90\x74\xb5\xe5\x38\x79\x4f\xc7\x9e\xf0\x5c\x35\x6c\x44\x16\x28\x19\x07\x5b\x44\x05\xee\xf4\x13\x7e\x58\x46\x26\xfc\xf0\x1b\x9b\x77\x52\x21\x19\x03\x41\xc6\x1d\xc1\x3a\x53\x36\xcf\x05\x04\xe9\x54\x10\x3a\x7f\x7d\xb4\x20\xe5\x5f\x71\xe7\x62\x2e\x3a\x54\x74\x68\xd1\xc9\x99\xe8\xb8\x2c\xa8\x2a\xb1\x07\x15\x45\x47\x6d\x09\xd1\x07\x93\x86\x82\xd7\xfc\x46\x44\x25\xb4\x63\x4d\x6c\x47\x21\xd5\x4e\x67\xb4\xc4\x4b\x67\x86\xf3\xec\x4f\xeb\xba\x05\xbd\x4c\x5f\x0c\xaa\x8e\x17\xcd\x93\xd4\x99\x70\x0b\x15\x59\xc5\x1d\x05\xc2\x1d\x92\x7a\x5c\x53\x2d\x4b\x20\xb3\x96\x57\x5e\x0b\x6e\x54\xc1\xb5\x46\xfa\x68\x1e\xbe\xfa\xce\x63\x50\x75\xec\xa0\xf7\xf8\x3e\xb4\x7b\xa9\x78\xd7\x89\xc1\x56\x28\xea\x97\x8f\xea\xca\x51\x5d\x34\x22\xdc\x12\x46\x64\xb8\x21\xea\xa1\x18\x74\x4e\xa6\xa5\x31\x7e\xf8\x6a\x7a\x6a\x72\x89\x96\x90\x26\x7a\xd2\x2b\x26\xc1\xb1\xcd\xd5\xab\xc6\xb6\xdb\xd7\x4a\x35\xcb\x87\xdd\x5b\x6f\x9d\x58\x2e\x68\x21\x20\xeb\x68\x0b\x3b\x7f\x3f\x5e\xed\xfc\xe1\x1a\xfd\xa9\x8d\x53\x6b\xfb\x9e\x6c\x50\xbd\x43\x6e\x70\x6f\x56\x0e\x5a\x51\x07\x72\x8f\xae\xd9\x88\x99\x2f\x0f\x6b\x46\xd7\x42\xc8\xf8\xbe\x64\x95\x28\x18\x59\x2b\xdf\xd3\xa2\x4e\x5e\x27\x04\xc6\x57\x37\x12\xa8\x6d\x2e\xad\xd6\x9b\x03\x3e\x34\x89\x08\xdb\x8b\x4a\x44\x64\xa9\x44\x94\x1b\x9e\x85\x81\x35\x72\xdb\x3b\xfa\x79\xff\x68\xef\xfc\xdd\xee\xc9\xde\xd1\x59\x50\x33\x70\x05\xce\xed\x9b\x5f\x33\xb5\x5e\xbd\x41\x98\x26\x6f\xa8\x6a\x36\x9f\xb5\x7c\x13\x0f\xf7\x4d\xf9\xea\xa3\xe5\x30\x82\x14\x84\xe7\xee\x37\xe4\x75\x4b\x26\x72\x98\xe6\x17\xc5\x88\xd3\x0b\x52\x1b\x20\x9b\x3f\x1c\x33\x17\xf1\x3b\x0a\x10\x4e\x93\xc1\x50\x2b\xc2\x98\xaf\x08\x0b\xfe\x16\x24\x49\x12\xd2\x84\x0d\x8a\x21\xda\x49\xf5\xf6\x38\xf8\xdf\xdf\x7f\x8f\x86\x7f\x0b\x50\xac\xdf\x50\x33\xeb\x53\x1d\x87\xfb\xf7\xdf\xa3\x00\x6d\x64\x5b\x49\x10\xfe\xfe\x7b\x14\xfd\x0d\xed\x04\xda\xbe\x68\x31\x93\x67\x30\xcf\x63\x82\x39\xb9\x22\x9f\x62\x2f\x16\xed\x87\xff\x7d\xb4\xc8\xca\x47\x1f\x10\x56\xe9\xae\x62\x51\x3a\xff\x4b\x68\x68\x8e\x70\x9e\x2c\x4a\x3c\x97\xb3\x71\x9e\xb7\x75\xd4\x75\x53\x24\x3d\xac\x52\xa5\x73\x3f\x55\x3a\x1f\xd0\x61\x92\x24\xe0\x77\x9a\x50\xb4\xc1\x81\x12\xf2\xd0\xc6\x7d\x05\xbe\x54\x67\x23\xa9\x1a\xc7\x6a\x18\x49\xcf\x96\x69\x24\xe3\x48\x3c\xda\xf3\xa2\x9a\xfe\x67\x30\xdc\xa8\x7e\x35\xf7\xfb\x0b\xb5\x62\xf4\x2d\x87\xa4\x76\x5b\x80\x23\xe3\x03\xa6\xdd\xb6\x66\x84\x43\xe6\xd6\x7c\x44\xc0\xcd\x2a\x64\x09\x8d\x72\x76\x73\x77\x47\xa3\x29\xfb\xef\x91\x7a\x52\x49\xed\xf4\x8f\x69\xa1\x1f\xd8\x11\xbb\x41\x3b\x2a\x4a\x42\x48\x51\xfc\x26\x15\x44\xd6\xf5\xb4\x97\xd9\xca\xbc\x5d\xa4\x92\xae\x10\x0b\x95\x58\x03\xee\x96\x65\x17\x20\x06\x70\xcd\xc2\xea\xa7\xe4\x69\xb7\x9b\x85\x02\xed\x84\x69\x22\x70\x91\xe4\x28\x0e\x59\x22\x70\x9a\xe4\xb8\x48\x28\x82\xe8\x07\x36\x60\xaf\xb5\xb6\x83\x34\x95\x85\x09\xcd\xcb\xa0\xaf\x97\xc9\x24\x24\x90\xd4\x64\xee\x7c\x61\x93\x24\x19\xef\xd8\xf2\xf1\x28\x4c\xf1\x25\x9e\xe3\xa2\x9a\x2d\xd1\x98\xf5\x0a\x7e\xeb\x82\x83\x40\x9d\xdc\xb8\xfa\x53\xe3\x76\xcd\x23\xf2\x69\x44\x40\x99\x96\x50\x4c\xcb\x4b\x9a\xa7\x59\x76\xbb\x10\x21\x2a\x1d\xd0\x71\x88\x16\xee\x97\x44\x8c\x62\x06\xfa\xd8\xb6\x0e\x8d\x4d\xae\x4a\x9d\x4e\x2d\xbd\xbb\x0b\xd3\xf6\xc9\x8b\xa9\x5c\x94\x2c\xe9\xbd\x60\x6e\xfe\xb2\xad\x2d\x14\x8a\x84\x0f\xd8\x10\x45\xb0\x7e\x54\xac\x65\x82\xba\x5d\xaa\x3d\x0c\x75\xae\x38\x4b\x1a\x70\x45\x94\x1d\x90\x62\x0c\x90\x39\x6d\xc5\x2a\xc3\xf3\x84\x86\x0c\xe1\x91\xf6\xe7\x3b\x3d\x3b\x79\xff\xfa\xec\xfd\xc9\x1e\xdc\x2d\xbf\xdd\x3f\xd8\xdb\x18\x41\xf6\x07\x15\x47\xb9\xf3\x68\x31\xd7\x6d\x95\x1f\xb0\x94\x16\x58\x46\x22\x29\xa2\x87\x19\x42\x56\x1b\x3f\x91\xdd\xb8\x4c\xa4\xac\x33\x4b\x7a\x2f\x66\x3f\x99\xd6\x5f\xcc\x4c\xe8\xe8\x69\x92\x0e\x66\xc3\x8d\x89\xea\xc0\x54\x2b\xd9\x43\x22\x47\x10\x22\x9c\x57\xd5\xdd\xfe\x0a\x97\x60\x79\xd2\x7b\xc1\x1d\x58\x6e\xc0\xe6\x49\x3a\xe0\xc3\x8d\x96\x09\x9c\x2b\xf5\x7d\xb7\xab\x1f\x60\x62\xcc\xf1\x64\xc0\x87\xa8\x1c\x75\xbb\x7e\x67\xf6\xf2\x71\x98\xa1\xb2\x6c\x5b\xee\x69\xeb\x26\x90\x26\x75\xdf\x43\xb3\x89\x35\xac\xd3\xa6\x6c\x4c\x2f\xe9\xba\x1e\x05\x7f\xb6\x13\x4b\x41\xc4\xa1\x46\xf0\x30\xcd\xd3\xab\x87\xc5\x6d\xae\x55\xbd\xcf\x1c\x37\xbd\xa0\x99\xa0\x64\xdd\x70\xcb\x22\x32\xb4\x7b\xad\xea\x42\x5a\xec\x86\xef\x8c\x9a\x9f\xe0\x31\x92\xde\xcb\x60\x2d\x4b\xec\x62\x8c\x34\x21\xe9\x43\x2a\x9a\x19\xe3\xbe\x96\xaf\x80\x92\xff\xc4\x3f\x08\x78\xa1\xa4\x22\x61\x5a\xbe\xac\x4f\xa8\xeb\x94\x2f\x24\x5d\x68\x99\xf0\x46\x62\x5a\xda\xed\x86\x10\x65\xd2\x3f\xbe\x40\x9a\xc4\x5c\xf9\x1e\x88\xf4\xca\x6a\x7b\xb0\xd0\xd1\x46\xf3\x48\xf0\x74\xf4\x11\xa9\x90\x08\x24\xa1\x6a\x63\xd4\xd7\x82\x4e\x9e\xcd\xa3\xf9\x6c\x9c\x0a\x72\x96\x5e\xa1\x90\x63\x06\x2a\xa4\x1c\xd4\x05\xf3\xa9\x7a\xcb\x20\xd6\x01\xe6\x65\xc5\xd3\x50\x51\x09\xe2\xc4\xf4\x40\x0e\xd0\x41\xbb\x4c\x82\x0a\x89\xd1\x00\x4a\x0d\x11\x5a\xe4\x09\xd1\xe6\x4a\xad\x19\x8c\xa9\x84\x81\x73\x54\xfa\x46\xa4\x05\x11\x20\xec\xd0\xd1\x1b\x32\x62\x3c\x05\x90\x0c\x61\x56\x7a\xb5\x24\x16\xe5\xaa\xe2\x4b\x67\xd0\x5c\x90\x76\xff\x74\x5d\x46\x79\xac\xa8\x72\xf6\xe1\x7c\x9a\x8e\x38\xbb\xa7\x30\x27\xe3\xf9\x88\x9c\xd7\xeb\x7c\x75\x37\xe6\xa5\x15\xc8\x74\x26\x6e\xd7\x5e\x7a\x50\x7a\xe5\x82\xce\x99\xd8\x7b\x10\x48\x53\xe1\x1e\xa8\xf9\xba\x86\xfa\x12\x62\x4e\xee\xc3\xf1\x21\xe8\xad\x84\x75\xc1\x58\xb6\x36\x30\x59\x78\x25\x34\x48\x8f\xbc\xfe\x46\x28\x4b\xaf\x84\x47\xfe\x33\x4f\xd7\x47\x0f\x4a\xaf\x84\x77\xf5\x00\xb3\x98\xd5\x74\xbb\x12\xeb\x0f\xe8\x95\x58\x3d\x9e\x6b\x47\xbf\x17\x51\xb6\x1a\xab\xec\x01\x58\x65\xf7\x60\xc5\x72\xf2\xaf\x74\xfd\x75\xa0\x8a\xdf\xe3\x23\xa3\xc2\x78\xaf\x0d\xd3\x54\xb8\x27\x81\x80\x36\x14\xcd\xaf\x76\x33\x9a\xae\x7f\x0e\xd7\x2b\xae\x6c\x25\xcd\xd7\x4d\x7b\x20\xa2\x34\x5f\x9d\xf2\x80\xad\xcf\x8e\xb0\x7b\xd2\x52\xcc\xa7\x6b\x27\x63\x28\xe6\xd3\xd5\x6b\x17\x22\xe8\xac\x07\x6b\x4a\xf3\x7b\xf6\x81\x4f\xeb\xc3\x4a\x3f\xdd\x03\x6b\xf6\x00\x58\xb3\xd5\xf4\x02\x03\xbf\x75\x09\xc6\xf8\xbd\xd6\x70\x6f\xe8\xe5\xe5\xfa\x00\x55\xf9\xfb\x7a\xfb\x6a\xdd\x05\x02\xfd\x7d\xb5\x7a\x75\x5c\xd2\x4c\xac\xcd\xfe\xf2\x48\x15\x5f\x03\xe2\x03\x90\x34\x15\x56\x42\x9d\xe7\xf4\x3f\x6b\x43\x94\x85\xef\x85\xf6\x00\x0c\x55\xf1\xfb\x20\xb2\xf5\xd7\x07\x94\x5e\xed\xe1\x28\x99\xf7\x82\x8c\xd6\x9f\x8e\xb6\x46\x59\xa2\xe5\x0c\xd4\x88\x65\xd9\x43\xa0\xea\xf2\xcb\xe4\x8f\xe5\xe2\x5d\xed\x12\x7b\x9d\xac\x2a\xdf\x44\xf8\x50\x01\xfe\x74\x04\x0e\x0a\x17\xa3\xff\x22\xe9\xc7\xc3\x74\x56\xe5\xe1\x85\xe6\xe1\xbd\x78\xd6\xde\x45\x61\x6b\x8c\xa2\x4a\x89\x68\xc6\x99\x60\xdd\x6e\xcb\xcb\x10\xe1\x4d\x8d\x39\xfc\x96\xd5\xa3\x49\x5a\x1c\xdf\xe4\xa6\x0f\x4a\x24\x91\xe7\x08\xb4\x51\x04\xc8\x44\x3d\x32\x3d\x00\x97\x46\xf5\x94\xb0\x9d\x7a\x1e\x51\x86\xe2\x45\x59\x5a\xcd\x8f\x2e\x38\x10\xc3\x24\xc7\xda\x43\x5a\x5d\xbb\x51\x29\x3f\x99\xdb\x70\xe8\xaa\x56\x19\xaa\x3b\xe3\xc3\x74\x86\xc1\xa7\x55\x89\x50\xc4\xbb\x33\x93\xf5\x5c\xf8\x6d\x5b\x17\xa2\x8f\x27\xb9\x52\xba\x09\x9d\x5f\x44\x02\xc8\xb1\x40\x2a\x96\xa4\xa5\x73\xea\x89\x79\x1d\xba\xa1\x25\xa6\x7c\xa9\xc4\x24\x30\x97\x12\x13\xd5\x12\x53\xda\x2e\x31\xa9\xd1\xa3\xbe\xc4\x94\xb7\x8b\x40\x29\xc2\x69\x59\xad\x95\xf0\x08\xa6\x0b\x48\x4e\x4b\xab\xb5\xce\xfd\xd5\x52\xd1\x67\x48\xe4\xab\xd5\x1f\x96\x8a\x5c\x4a\x9c\x36\xa8\x41\x14\x45\xc4\x84\xfa\xcb\x7d\x02\x71\xa3\x2c\x1a\x0c\x5d\x5d\x1a\x12\xb4\xc8\x95\x3e\x8a\xa0\xd2\xe8\x9b\x5a\xb4\x71\x0b\x45\x71\x3e\x60\xc3\x17\xc6\x91\x31\xcd\xc7\x7a\xc2\x52\x52\xa0\x30\x95\x44\x37\xca\x38\x49\x3f\x3f\xcf\x9b\xef\xa3\x1f\x45\x51\x5e\x09\xde\x69\xda\x25\x49\x6e\x3d\x55\xb5\x4a\x9b\x80\x2e\x7b\xe1\xa5\xa6\x76\xc9\x44\xf2\x01\x1d\xea\xab\xf0\x90\x21\xa3\xe5\x33\x42\x70\xa3\x30\x19\x42\x10\xcf\xf2\x33\x76\x0d\x10\x04\x5b\x6e\x8c\x6a\x1d\x23\x5b\x81\xc6\x3f\xc0\xcd\xac\x35\x46\x1b\x20\x61\x41\x92\x43\x1f\x3d\x82\x54\x84\x51\x62\x25\xc4\x2f\x6d\x6e\x73\xed\xf6\x72\xb2\x46\x5b\xcb\x3b\x74\xc4\x72\xb2\xba\x3f\x9f\x07\x7e\xb3\x01\x52\x43\x94\x72\xe5\xe7\x81\xec\x18\xff\xbc\xa5\xd8\x82\x90\x59\x5b\x37\x6b\x80\xb7\x19\x0a\xab\x50\xdd\xb5\x0e\xa8\xaf\x73\xd3\x0a\x88\x9e\x0f\x6f\xa5\x75\x62\x13\x94\x24\x09\xd7\x80\xaf\xc4\x57\x83\xfa\xd2\xc1\x24\x5f\x0f\xa8\xc5\x34\xfb\x7a\x98\xfe\xe4\x60\x7e\x3d\x4c\x7f\xb2\x98\x2a\x51\x75\xd9\x84\x4b\xa5\x2c\x88\x42\x82\x74\xb9\x50\x45\x3c\xd4\xa2\xe8\xfd\xb5\x5c\xb2\x2a\x15\x69\xa6\x2a\x64\xae\x33\xcd\xe1\x40\xe7\x4b\x3b\xa2\x82\x9f\x00\xf3\x54\x55\x21\x9a\x12\x38\x47\x58\x72\x9f\xd0\x57\x2e\x39\x8c\xbc\x16\xf7\x90\xcb\xcd\x3c\x79\x49\xd0\x86\xfa\x68\xc2\xaf\xe9\xf7\x9b\xf0\x81\xf1\x7a\x90\x9b\x07\x68\x00\xd7\x60\x19\x1f\x14\xfe\xe6\x7e\xde\xd1\x3f\x03\x15\xb7\xe7\x85\x05\xaa\xee\xb1\x83\x61\xd0\x58\xec\x8d\xcc\x56\x6e\xb1\xe7\xf3\x2c\x4b\x92\x84\xde\xdd\x05\x8a\x02\xee\x76\x93\xee\xe4\x31\x8d\x14\x0d\x42\x81\x95\x69\x61\x2d\x67\x59\x59\xe3\x43\xcd\x95\xa3\x06\xff\xf8\x7f\x48\x3a\x9a\x3c\x36\xf7\x61\x3b\x2c\xa9\x64\xdc\x85\xaf\xd1\xdf\x1e\x3d\xc6\x41\x00\x57\x8f\x04\x93\xad\x04\xfa\x00\x0a\xec\x4a\xdf\x70\x14\x45\xa2\xd1\x35\x52\xef\x1a\xab\x68\xc5\x69\xb1\xcb\x79\x0a\x41\x50\x77\xe0\xc5\x2e\x0a\x3d\x1d\xba\xdc\x4b\x63\xf3\x7e\x69\xd7\x52\x17\x49\x94\x26\x72\xd7\x9d\x41\xf4\x4d\x45\xec\x4a\x7a\xd8\x0a\xdb\x40\xdb\x57\x2e\xb4\x25\xaa\x38\x2c\x6b\xb9\xa8\x5d\x56\x59\xce\xb5\x9d\xa9\x97\xfc\x2c\x4f\x04\x16\xc9\x60\x88\xb0\x1a\x91\xb0\xcd\x74\x04\xfa\xc0\xed\x80\x96\xfe\x1d\xf3\xb7\x69\x50\x09\xca\xad\x6d\xce\x15\x1f\x68\x23\x82\x54\xb6\x3c\x3f\x37\xaf\x1a\x25\x4c\x4d\xb6\x0b\x97\x4e\xc7\x0b\x8a\xea\xb8\xaf\xea\x84\x7f\x51\x9d\x0f\x0c\x75\xbb\xac\x52\x8f\x4a\xb1\x26\x24\xe8\xee\x2e\xa4\x3a\x79\x04\x16\x86\xdb\x44\x52\x86\xc4\x42\xe2\xfd\x19\x1c\x59\x31\x9f\xb6\x59\xf0\xc8\xc5\xac\xbd\xbe\xc8\x96\xc0\x3d\xa5\xf3\xd2\x27\xfb\xa7\x7b\x6a\x1c\xa6\x62\x22\x8b\xc1\x4f\xbc\xdd\x7f\xdc\x53\xaa\x29\x55\x9d\xe6\x6b\x55\xa7\x8a\x59\xc7\xaa\x36\xd8\xa8\x41\xe3\xb3\xa4\x50\x7f\x5f\xdd\xb6\xcb\x2d\x45\x08\xf7\xcd\x7a\x05\x3f\x5a\x88\xf2\x83\xdc\x5c\xbd\x1c\xc9\x58\xc7\xa6\x55\x03\x9f\x64\xf6\xb1\x06\x52\x6e\x66\x5a\xa4\x4a\x9e\x24\x49\x52\x37\x52\xd8\x69\x80\x8d\x1b\x6f\x92\x24\xc9\xcd\x64\xc8\x5a\x30\xa3\x48\x99\xa6\xd0\xff\x80\x7d\x8e\x52\x89\xb4\x76\xec\x8b\x37\xd4\xea\x2c\xa3\x7a\xd7\x51\x2d\x82\x8d\xe9\xf2\xfd\x06\x0c\x89\xb4\x1e\xc4\x21\xb7\xce\xda\xb0\x7b\x92\x5b\x2b\x6b\x20\x27\xd0\x8e\x88\x07\xc3\x52\xae\x28\x11\xcd\xd8\x2c\x44\x66\x99\x4a\x50\xd6\x73\x0f\x6e\xf2\x45\xe5\x26\xdf\xe5\xb9\xde\x94\xb2\x8f\x18\x70\x63\x15\x41\x7d\x39\x0c\xe2\x25\x33\x30\xec\x41\x8b\x3c\xd9\xec\x6d\x5c\x70\x92\x7e\x2c\xa5\x14\xd4\x97\x83\xa6\xc5\xa0\xcd\xbe\x16\x83\xe4\x7a\xd9\xa8\xee\x94\x54\x2e\x3c\x4f\xa5\x84\xb4\xcd\xdb\x1b\x7a\x79\xf9\x90\x21\x14\xeb\x0f\x25\x6e\x6c\x1f\x62\xf5\xf0\x7a\xbb\xca\x0e\xf5\x68\xb8\x2d\x3b\xc9\x22\x50\x34\x1d\x5f\x86\xfe\x61\x43\x57\xce\x03\xad\xb9\x5a\x6b\x16\x3c\x74\x12\x78\xea\x8f\x1d\x79\xfa\xc7\xa2\x41\x73\x01\x34\x37\xea\x36\x45\x71\xc6\x45\xf3\xc6\xdb\xe8\x9b\xf8\xdd\x1d\x50\xc0\x50\x42\xe5\xca\xb7\x27\xc3\xc6\x52\xab\x25\xbe\x33\xd6\xc0\xe2\x09\x30\xc1\x7a\xa1\xda\x4c\x05\x3a\xe0\xd5\x7c\xc3\x33\xee\xa9\x1e\x51\xab\x4e\x1d\x95\x77\x1c\x01\xf6\xa1\xde\xf9\xb8\x7f\xf4\xc2\x2e\xe5\x1f\x46\x93\xc6\x54\x4a\xe7\x82\xbd\x6e\xcd\xef\xda\x3a\x7d\xe0\xe6\x3e\xf8\x1f\xf9\x0c\xd9\x27\x71\xda\x6a\xbc\xe9\x0f\xd6\x40\x60\x3e\x74\xc6\x7f\xb1\xe5\x29\xe4\x07\x49\xdb\x20\x2d\x46\xc1\xb0\x44\x65\x48\x11\x2e\x12\x06\x99\x31\xe2\xf5\x56\x79\x81\x76\x7c\xf3\x22\xcb\x05\x15\x86\x38\x28\x5e\xb2\x8a\xa0\x58\x93\x86\x14\x79\x9b\x83\x5a\xf4\xa2\xae\x7c\x19\xa4\xb8\x18\x26\x62\xc0\x86\x38\x4b\xb4\x25\xc2\x74\x96\x72\x25\x7a\xdb\x9d\x3b\xd5\x5c\x1e\xfc\xa4\x38\x45\xa0\x20\x91\x13\x2a\xd3\x3b\x43\x30\x26\xc5\x48\xd2\xb1\xd8\xd9\xee\xff\x2d\x8b\x33\xa3\xb3\xe9\xc9\x51\x0b\x0b\x9c\x2e\x5f\x47\x66\x22\x8d\xaa\x8c\xbe\xd5\xe6\xae\x54\x00\x37\x53\xad\x35\xd5\xc1\x20\x2c\x4c\x09\xbf\x22\xcb\x3e\x2a\x2d\xe7\xb2\xaf\x37\x24\xfd\x78\x5e\x90\x25\x5e\x4c\xdf\xcc\xac\xc0\x20\xf5\xe0\xa4\xe4\xf7\x81\x7c\xa7\x7b\xb7\x36\x68\x55\x6d\x75\x5a\xf6\x7f\x91\xf4\xe3\x29\x59\x57\xe9\x4f\xab\xa1\x00\x61\x70\xfc\x9d\x04\xe2\x79\xee\x9d\xfc\xbc\xb7\xc3\x4d\xc9\xd8\x86\x72\x51\xa5\xd9\xb2\xe9\xe2\x0f\xe8\x7a\x06\xd1\x76\x57\x11\x55\x13\xd8\xfe\x0b\xf1\x53\x9d\xcf\x79\x21\x8c\xea\x90\x3b\x1e\x68\x20\xc0\x22\x91\x23\x77\xe0\x6a\x4a\x7d\x24\xb7\x45\xc8\x91\x56\x3c\xe6\xbe\x2d\xad\x49\x39\x30\xa0\xc3\x0d\x22\x8f\x5f\x3e\x60\x43\xa7\x60\xff\x1c\x06\x56\x75\x1b\x22\x87\x35\x2d\xb6\x17\xea\x6b\xcc\x4b\x8d\x1c\xce\xe5\xa6\x25\x3c\x0b\xee\x7c\x15\x4d\xf5\x0a\x5a\x2a\x54\x7f\xf3\x38\xca\x3a\xb5\x83\x16\x85\x45\x8b\x28\x2c\x8c\xbe\x96\x6c\xf8\x11\x11\xfc\xb1\x10\xad\x63\x01\x51\x0b\x86\x58\x59\xe1\x0f\xf8\xd0\x8a\x2c\xe5\x2a\x8a\xd8\x8d\xe1\x4f\x36\xbc\x6f\x39\xa0\xf5\xf2\xdb\xd1\x7f\x63\x88\x54\x50\x09\x01\x6d\xdc\xca\xa4\xd4\xe0\xdd\x50\x95\x4a\x84\xaa\x3a\xe0\x4d\x53\xf0\x5d\x0d\x09\xb6\x7e\x71\x36\xd1\x5e\xb3\xa4\xcb\xc1\xa7\x24\xb3\x66\x09\xf5\xbe\x2c\x97\x3b\x0b\xe8\xe4\xa1\xeb\x5f\xf6\xf9\x3e\x03\x9c\x33\xbe\x0d\x11\xcc\x96\x85\xd8\x31\xca\x9d\x8b\x74\xf4\xf1\x62\xce\xf3\x65\xd1\x72\xbe\x8a\x47\xc8\xeb\x39\xe7\x24\x17\x27\xf3\xfc\x80\xb1\x59\x4b\xb8\x37\xa6\xf3\x97\x80\x94\xf3\x07\xa3\x79\x32\xc6\x24\xba\x20\x57\xbe\x38\x88\x16\x99\x7a\xa5\x58\x4d\x92\x8f\xab\xdf\x20\x21\x11\xb0\x7c\x3a\xd3\x58\x4b\x43\x99\xfd\x58\xf7\x15\x84\xcb\xc1\x53\xfd\x71\x7c\x46\xa7\x84\x17\xad\x00\x26\x69\xa1\xbe\x6a\x8e\x37\xcd\x47\x24\x6b\x96\xcf\x2a\x5f\x54\xd9\x2c\x95\x12\x65\x1b\x50\xf8\xd2\x44\x89\xe5\x23\xb2\x84\x97\x06\x8f\x85\x09\xbd\x14\x2e\x9d\x1a\xc2\xae\x7b\xc7\xf9\x88\xa8\x0a\x3e\x45\x8e\x2b\xf0\x5a\xa8\x62\xaa\x55\xd1\xc8\xc9\xa7\x65\x2c\x3d\x51\x8a\x86\xbe\x6c\xdb\x76\x82\x78\x94\x69\x63\x22\x0d\x6d\x74\xe4\xf7\x31\xb9\x60\xf3\x65\x98\x99\x8f\x4d\xac\xc4\x84\x33\x21\x96\x0c\xb3\xf9\xd8\xac\x76\x41\xf3\x71\x42\x6c\xc2\xb6\x93\x79\x9e\x90\xc8\x2d\x83\x84\x44\xff\x99\x93\x39\x29\x20\x17\x77\x71\x3d\x03\xa7\x9e\x7f\xca\x57\xd5\xf3\x58\xee\xba\xfa\x86\xf4\xc3\xa3\x05\xa8\x25\x78\x9a\x8f\xd9\x34\x44\xe5\xa3\x85\x71\x83\x08\x51\xf9\xc1\x6a\x0e\x83\x28\xc0\x41\x80\x36\x9a\x90\x4d\xae\x8a\x81\xcb\x8d\xa7\xbd\x1a\x5d\x6a\xf8\xc2\x7a\x89\x05\x38\x00\x4b\xf3\x13\xf3\xcb\x64\x05\xc3\xe9\x70\xc3\xe2\x6f\x52\x56\x28\x9f\x69\xe3\xb9\x5a\xe0\x85\x7e\x84\x96\x63\xd7\x20\xcb\x5f\xc9\xd5\x15\xfb\x03\xc6\x12\x52\x62\x96\xef\xe5\xe3\x1a\xb3\xcd\x12\xa1\x2c\x75\x2f\xb3\x79\x31\xd9\x2d\x6e\xf3\xd1\xf1\x45\x41\xf8\x35\xe1\x85\xe4\x68\x65\x25\xd9\xbd\x33\x15\x55\x9c\x47\x95\xdf\xe6\xeb\x21\x11\x13\x36\x8e\x03\x96\x6b\x7f\x7b\x80\x56\x6b\xca\x74\x7a\x13\xee\xcc\xc9\x66\x92\xa4\x77\x77\x2b\xda\xc6\xe0\x53\xe1\xf9\x9f\xcc\xfd\x89\xc1\xe7\x79\x6d\x4e\x54\x46\x3f\x33\x72\x9b\xba\x5b\x87\x60\x31\xbe\x08\xe7\x41\x02\xe7\xa4\x3a\x28\x7f\x5a\x8d\x36\xf4\x6c\x33\xf7\xc5\xf2\xaf\x94\xe4\xc6\xf0\x22\x1a\xb1\x7c\x94\x8a\x50\x49\x72\xde\xd6\xaf\xbd\x4b\xbf\x56\x62\x80\x6f\x91\xbe\x68\xad\x68\xff\xba\x1f\xeb\x85\xfa\xcf\x97\x87\xfa\x47\x1b\x79\x2d\x0c\x50\xa1\x83\x7f\xbc\x4d\xe5\x49\x7e\x0b\x68\x19\x5b\x93\xe5\xe9\x00\x0a\xc8\xdd\xb0\x82\xac\xba\x80\xe4\x64\xd4\xa3\xf5\x4a\xff\xac\xec\x61\xdf\x30\x13\x40\xc6\x46\xc9\x0d\x26\xd1\x4d\xb2\x07\xe4\x1c\xa5\x53\x92\xd1\xff\x92\xe4\x93\xfc\x99\x16\x13\xc2\xe5\xaf\x63\xd8\x86\xf5\xa7\x53\xf9\x03\xec\x2c\x2e\x6f\x93\x33\x50\x57\x8c\x09\x2f\x46\x8c\x93\xe4\x10\x0a\xce\xa8\x48\xa1\xe8\xbb\x15\x72\xcd\x15\x11\x2a\x09\xc6\xfa\x46\x9d\xae\xca\x6a\x91\xa9\x78\x38\xe8\xc2\x07\xad\xa7\xc0\xe3\x41\xe7\x7c\xf8\xf8\x4a\x07\xe7\xca\x23\x88\x52\x13\xf6\xc9\x53\x4c\x92\x97\x9f\xd4\x75\xa0\xda\x90\x29\x0e\xb6\x03\x84\x70\x9a\x3c\x0e\xb7\xef\xce\xef\x7e\x8f\xee\x7e\x2f\xd0\x56\x18\xa1\x9d\xc7\x57\xb8\x48\x1e\x87\xff\x7b\xf7\xfb\x63\x14\x0e\x76\xb7\xff\xcf\x10\x3d\xbe\xc2\x59\x1b\x48\x77\x35\x94\x62\xbd\xc2\x92\x97\x7c\x87\x47\x82\xbd\x9f\xcd\x08\x7f\x9d\x16\x24\x44\x71\x10\xb8\x86\x0b\x55\x4f\xb0\x03\x76\x63\x0a\x20\x84\xe7\xc9\xe3\xff\x95\x88\x68\x14\xf0\x28\x79\x1c\x46\xa8\x05\xb5\xb1\x46\xed\xee\xf7\x08\x85\x83\x74\xfb\xbf\x80\xdd\xa4\x0d\x3b\x4f\x7c\xf3\x90\x0b\xce\x83\xad\x26\x82\x98\x27\x76\x8e\x26\x2f\xc5\x56\x98\xef\xe4\xcd\x5e\xe0\xdc\xe9\x7c\x1e\x07\xad\xe2\x83\x14\x1e\x40\x82\xb0\x3d\x9e\x63\xe1\xba\x3f\xc2\x2e\x90\x5a\xae\xbd\x3c\x1f\x7b\xe4\x19\x1b\xf2\x78\x2d\xa3\x12\xe1\xcb\xe4\x31\xf4\xf6\xf7\xf1\x50\x0f\xca\x96\xec\xf7\x2c\x79\xbc\x7d\xf7\x7b\xb1\xf5\xf8\x0a\x4f\x57\x0f\xd0\x25\x0e\x1e\xf5\xcf\x1f\x3d\xf1\xda\x9a\xe1\xe0\x3c\x40\xb5\xa1\xc0\xd7\x6e\xec\x65\x7b\xf3\x5e\xef\x75\x6f\xfb\xf7\x79\xef\xc9\xb3\xb7\x40\xea\xab\xd5\xed\x5c\xb7\x75\x00\xe1\x8b\x06\xfe\x12\xd6\xed\x6a\x58\x17\x0e\xe7\x2a\x92\xee\x5c\x3a\xf7\x53\x06\xf6\xdc\xf5\x92\xbd\xb2\xfc\xcb\xff\x84\x83\xde\xf6\x8f\xc3\x2d\x98\x3d\x21\x81\xf1\xd5\x7a\xc0\x7c\x67\x96\xf2\x82\xec\xe7\x22\xcc\x71\xbf\x87\xb6\xfb\x31\xdf\xda\xc2\x2c\xa1\x56\x3f\xb6\x23\x06\x74\x68\xf4\x0d\x5a\xc1\xa5\x76\x48\x27\x70\xb1\x1d\x16\x6b\x49\x94\xed\x04\xea\xe4\x0c\x62\xab\xb3\x65\x3b\x41\x10\xeb\xec\x39\x0c\x95\x9e\xe6\xf2\xa6\x62\x44\xb0\x59\xd5\xc7\x72\x74\x77\x57\xd7\x38\xbc\x7c\x82\xe0\xfa\x4e\x95\x74\xd6\x7d\xa0\xf0\x53\x4a\x52\x5b\x05\xf7\x11\xc2\xe7\x21\xb1\x56\x23\x0a\x05\x04\xf7\x65\xa0\xb7\xb5\x78\xec\x55\x35\xb0\x30\xbf\x1f\xcb\x59\xe5\x95\xf9\xe4\x95\xb9\x05\xeb\x3c\xe2\x7d\x3d\xf6\xbe\xb2\xc6\xd7\xd3\x0a\x07\x5c\xff\x7a\xe6\x7d\x9d\x34\xbe\x1e\x7a\x5f\xa7\x8d\xaf\xef\xbc\xaf\x57\xe6\x2b\x57\xf9\xd7\xea\xe1\x7c\x23\x45\x80\x6e\xb7\x6d\x1b\xa6\xa4\x08\xd5\x77\x47\x56\xbc\xb8\x89\xa5\xdc\x7c\x49\xaf\xe6\x76\x3b\xf6\x37\xe7\x3e\xbe\xe1\x54\x10\xf3\x09\xce\x29\xb7\x45\xef\x69\x9f\xaf\x12\x67\x6c\xf4\x19\x80\x2a\xd2\xc6\x8d\x35\xb7\x28\xb1\x39\xd7\xbe\x04\xb9\x53\x8b\x9c\x3b\x42\xbf\x04\xde\x27\x07\xcf\x9c\xc1\x5f\x02\xee\xd8\x82\x73\x47\xf5\x97\xc0\x3b\xb4\xf0\x0c\x1f\xf0\x25\xd0\xce\x1c\x34\xcb\x39\x7c\x09\xbc\x77\x06\x1e\x98\x3d\x6f\x34\xf8\xb6\x56\xb6\xec\x9b\xe9\x99\x1c\x63\x51\x0b\x3e\x4f\x4a\xa5\xd4\x68\x7c\x75\x5c\x49\xa5\x44\x9b\x00\x2c\x06\x64\x58\xda\x40\xfe\x86\x4b\x35\x9e\xa1\x24\x1f\x31\x90\xeb\xbe\x59\xe7\xf6\xb5\x16\x8c\x4a\xd1\x0e\x1a\xdb\x9f\xce\x32\x17\x1b\x7c\xc9\xf7\xa6\x0e\xcd\xc4\x66\xba\x98\x5f\x5e\x4a\xd9\x59\x47\xa0\x92\x3c\x64\xaf\x54\xfd\xb0\x6a\x4a\xf2\xf2\xc9\x77\xdf\x79\xd1\x94\x40\x02\x0c\x3f\x1c\xcf\x64\xa9\x8e\xdc\x6a\x3a\xec\x9a\xf0\xce\xf3\xed\x0b\x2a\x8a\xa8\xf3\x33\x13\x1d\xb8\x11\xff\x60\x22\xfd\x90\x3b\xd1\x38\x0c\xb6\x9f\xfc\xf4\xd3\xf3\x0d\x0f\x09\x1b\xa8\xd5\xa9\x9e\x9f\xbc\xc8\x9b\x6a\xeb\xdc\x68\x9c\xa9\xa7\xb6\xce\x41\x6d\x1d\xe4\x73\x39\xf1\xdc\xd9\x46\xbb\x5d\xfa\xf2\x49\xff\xd9\x0f\xcf\x9e\x3f\xfd\xfe\xd9\x0f\x6d\x9d\x20\x52\xf8\x57\x1d\x78\xfa\xa4\xd2\x03\x0a\x3d\x68\x60\x48\x55\xc0\x53\x45\x2c\xff\xab\xc2\xaf\x9c\xa9\x2c\xe0\x9a\x78\xdb\x7d\x13\x8b\x55\x95\x1a\x90\xad\xfe\xb0\x81\x47\x70\xc6\x6f\x69\x7e\xd5\x11\xac\x03\xd5\x3b\x4c\xe3\x45\xf3\xce\x8c\xcd\xe6\x59\x2a\xc8\xb8\x53\x64\x4c\x40\x06\x3d\x92\x8e\x3b\xec\xb2\x93\x76\x38\x01\xf1\x59\x7d\x8a\x82\x0a\xb6\xd0\x52\x22\xca\x96\x69\x7a\xfd\x0d\xa7\xe8\xeb\x7d\x48\xdf\xfa\xea\xfd\xcf\x6e\x5a\xaa\x9f\x9b\xfd\x0d\xf8\xec\x72\x3e\x18\x8c\x32\x76\xb3\x9d\x91\x6b\x92\x7d\x43\xbc\x4e\x45\x3a\xfa\x98\xc8\xbf\x8c\xa7\xee\x8e\xc6\xbd\x58\xaa\x68\x4e\x25\xbb\x92\x0c\x86\x6a\x8d\x80\x4e\xad\x67\x94\xcd\xd7\x29\x5f\xc8\x37\xb1\xc0\x50\x2c\xe6\x25\x8c\xb6\x9c\x8d\xc2\x0f\xfd\x60\xeb\x6e\x6d\x6d\x90\xac\x20\xda\x26\x96\x0f\xc4\x70\xc3\xc1\xcd\x4b\x5f\xe3\x0c\x10\x07\x62\x28\x97\x67\x39\x26\x9c\x5c\xd6\x75\xd2\xaa\x04\x19\x96\x63\xce\x66\x76\x51\x9b\xb7\x89\x05\xec\xa1\x4e\xca\x72\x49\x62\xc5\xc1\x50\xd7\xbf\x26\xa3\x84\x94\x10\x93\xcc\xbb\x3c\x83\x94\x8f\xe6\xbb\xbd\xcb\x2d\xe1\xe1\x2d\x67\xd3\x46\x7a\xc8\x5a\x59\x62\x0a\xfb\x6c\xe3\x92\xa2\x98\x23\x54\x8e\xd8\xcc\x44\xa8\xd2\x9f\x25\x2d\xec\x33\x19\x96\x70\x2a\x9d\xa4\x37\xb5\x52\x10\x82\xf8\x8a\x08\xf8\x52\x25\x98\xae\xa8\x82\xd0\xb9\x2a\x36\xaa\x4b\x99\x91\x3c\x6c\x54\x31\x4b\xbb\x34\xd3\x48\xd4\x67\x70\xce\xc6\xcb\x92\x3a\x79\x8a\x9e\x82\x4e\x67\x19\xd9\x1e\xb3\xe9\x63\x17\x80\xec\xeb\x6b\x79\x0a\xc2\x55\x84\xc0\x57\x73\x9a\x8d\x7d\xcd\x75\xc5\x13\x24\xba\x64\x5c\x47\x13\x54\x0a\x49\xf8\x2c\xcf\xc0\x23\x36\x26\x6f\x8e\x0f\xcf\x38\x21\xaf\x99\x3b\x52\xaa\x79\x39\xf3\x8e\x52\xf3\x14\x1d\x11\xb5\x14\xae\x1f\x37\x2a\xd0\x1f\x01\x0d\xa0\xbd\x0a\x45\x30\x83\x88\x98\xcf\xde\x17\x24\x23\x85\x71\x6d\x09\xd1\xa2\xa4\x79\x41\xb8\xf8\xe5\xec\xf0\xe0\x95\x89\x04\xc2\xad\xed\x96\x9a\x06\x86\x88\x3a\x44\xf4\x49\x7a\x23\x8b\x9f\xea\x88\x5d\xce\xff\x06\x02\x26\x11\x2e\x34\x20\x8a\x39\xc2\x2a\xe8\xe3\x6b\x96\x8f\x38\x11\xe4\x15\x9b\xe7\xe3\x02\xe2\xb6\x50\x54\x2a\x70\x06\x97\xda\x14\xaa\x35\xea\x4a\xc9\x8e\xec\x0a\xc1\xe9\xc5\x5c\x10\x33\x96\xc0\x90\xb8\xb7\xf2\x9d\x9c\x46\xcb\x28\x9c\xb7\x78\x5e\x29\x72\x33\x8f\xdc\x47\xe4\x46\x37\xab\x47\xb8\xb6\x6d\x2d\x8d\xe0\xef\x66\x46\xc6\x46\x1f\xdf\x90\x19\xcc\xf9\xf3\x73\x36\x23\x39\xbc\x52\x46\x26\x0b\x91\x5e\x1d\xa9\x24\xf1\x8a\xd0\x44\xb5\x06\x67\xec\xd9\xfe\xd9\xc1\x9e\x56\xea\x06\xa7\xaf\x4f\xf6\xdf\x9d\xd9\x5f\x67\xbf\xe9\x4f\xc6\x46\x68\x59\xab\x5b\x5b\x26\xd0\x67\x3a\x9b\x91\x7c\xfc\x9a\x4d\x81\x8a\x1f\xfe\xb2\x75\x11\x3f\x5a\x88\xf2\x2f\x1f\x50\x09\xdd\x88\x2a\xd8\x95\xe7\xe7\xa3\x8c\x15\x64\x4d\x64\x0d\x04\xbf\x0e\x7e\x58\x0f\xb6\xb7\x97\xf5\x61\x59\x0f\xb6\x5d\x0f\x4a\xf3\x55\xce\x4b\x73\x5e\x18\x7c\xf9\x52\xe2\xaa\xe4\xf1\x06\x35\xf3\x0b\x50\x93\x3f\xcc\xdd\xb0\xe9\x5d\xa5\x09\xa3\x94\x6d\xc3\x2d\xf8\xcb\x55\x36\xe5\x7f\x09\x90\x6a\x6b\xf7\x95\x01\x68\x4d\x8d\x8d\xe5\x58\xf0\x93\x2a\x44\x5f\x6e\xf7\x51\x20\x38\x58\x16\xe9\xdd\x99\x6e\xf5\x31\xdd\x7a\x8a\xc0\x0f\xee\xc3\x4f\xe2\x82\x8d\x6f\x5f\x4a\x86\xef\xa7\xc7\xea\xf9\x03\x2a\x03\xa8\xb0\xb3\x04\x8b\xce\x5f\x02\x14\x2f\xc7\x9e\xdd\x87\xbd\x7f\x76\xd4\x97\xb0\x4f\x52\x9c\x63\x86\xec\x18\x9c\x91\x4f\xa2\x3e\x06\xa2\x3a\x06\x98\xd7\x93\x0a\x2c\xf4\x97\x58\x60\x79\x7c\x9e\xd2\x8b\x8c\xe6\x57\x72\xec\x48\xcd\xa2\x9d\xef\x88\x28\x4b\x0b\x01\x71\x4b\x63\x1e\xcd\x38\xb9\xa6\x6c\x5e\xe8\x2a\xa5\xf6\x23\xd4\x5a\x18\x3b\xd0\xa2\x32\xd0\xc2\x1f\x68\xb1\x53\xa5\x91\xee\x40\xbc\x06\x71\x43\xde\xed\x3e\x05\xfe\x43\x9e\x4c\x67\xb7\x33\xa2\xa3\xff\x37\xcb\xdf\xfd\x25\x40\xb8\xb5\x21\x54\xc2\xba\x71\x7b\xb2\xb5\x79\x99\xa4\x55\x42\xcb\xb9\x40\xcd\xf5\x79\xe5\x83\x86\x5c\x05\xd4\xfe\xb6\x94\xeb\xbc\xb1\xe9\x9a\xc9\xd7\xed\x06\x67\xaf\x8e\xdf\xfc\x16\x18\x7e\x5a\xb7\x10\xe9\xa1\x94\xdf\x7f\xd9\xdb\x7d\xb3\xea\xfb\xdb\xe3\xe3\xb3\xe5\xdf\x15\xe2\x3e\x12\x01\xcc\xe7\x00\x79\x5e\x9e\xce\x61\x95\xe6\x57\xd6\xa8\x40\xdd\x68\x99\x6a\xa0\x42\x33\x7d\xac\x76\xaa\x94\x22\xc4\x09\x99\x32\xef\xe0\x90\x07\x05\xdc\x4a\xaa\x09\x37\x66\xd3\x38\x57\xd3\x12\xd3\x24\xaf\x1d\x33\x81\xf2\xf9\x74\x8b\x80\x56\x0f\x98\x40\xae\x91\x00\x0b\x84\xf3\xea\xa1\x27\x8f\x36\x6e\x90\x5a\x82\x05\x6a\x0a\x0b\x0c\xa4\xbc\xed\x11\x9b\xce\x68\x56\x95\x6d\xfd\x98\x48\xd3\x46\x1a\x4b\xef\xf7\x8c\xb3\x2b\x9e\x56\x8a\x18\x51\x79\x1d\xdb\x05\xdf\xe3\xc3\xcc\x8a\x85\x14\xf0\xe2\x00\x38\xdd\x40\x29\x24\x62\x52\x75\x9e\xad\x15\x55\x1a\x88\xed\xa5\x35\x8a\x46\x0d\x9b\x56\x7c\x4a\x44\xda\x56\x25\x6b\x54\x61\x62\x22\x69\xd4\x2c\x3a\x6f\x14\xcd\xd2\x0b\x29\xef\xd8\xa2\x9f\xc1\xe7\xe9\x41\x39\x15\xa9\x80\x41\x2c\x92\x7f\xda\xb7\xe9\x45\x46\x92\xbf\x4b\x66\x50\xa4\x82\x8e\xda\xd2\xb2\x6b\xcd\xf3\x00\x68\x3e\x4c\xe0\x00\xd2\x7b\x19\x31\x47\xcc\x09\xd8\x5b\x39\x90\x31\xc3\x23\x2f\xd2\x56\x9c\x62\x95\x6f\x2f\x2e\xbc\x0d\x91\xed\x0c\x0a\x12\x3e\xef\xe1\x02\xe1\x4b\x12\x2e\xaa\x35\xee\xee\x46\x38\x4b\x6f\xd9\x5c\xc4\x0c\xa7\x42\xf0\x42\xc5\x28\x9f\xa5\x3c\x9d\x16\x31\xc7\x93\xb4\x98\xc4\x39\xbe\x90\x07\x6d\x11\xd3\x12\x0d\x63\x07\x6f\xda\x0a\x6f\x05\x98\x54\x40\x0e\xa4\x78\xb3\xe7\x43\x2c\x6d\xea\xc6\x53\xa0\x0f\x9c\xea\xff\xa2\x62\xa2\xf8\xfb\xf3\xb6\xcf\xc9\xad\x4f\xf3\x71\x72\x43\xc0\xe0\x4f\xa4\xc9\x48\x3e\x99\xe9\xa2\xef\x36\x93\x77\xf2\xe5\x0a\xba\x77\xf2\xe4\x1d\x09\xff\x7e\x7a\x7c\x14\x81\x1e\x5f\x6e\xb8\xbe\x6b\xcf\x3c\xbf\xe1\xe9\xcc\x64\xb3\x40\x61\xee\x32\xc1\xa0\x28\x2d\x0e\x80\x84\xc6\x9f\x0e\x42\x38\xab\x57\x6f\x19\x3f\x4b\xaf\x54\x08\xd0\xdb\x5c\xa4\x9f\x5e\xab\xd1\x93\x8d\xbf\x66\xb9\xa8\xd8\x84\x78\x02\xc1\x42\x2f\xd3\x98\x60\xe5\x76\x16\x0b\x88\x6f\xd9\xac\x93\x2c\x4a\x2c\x92\x20\x65\x22\x90\x3b\x17\xb9\xe9\xfc\xb7\x01\x44\xbe\x3d\x26\xa1\xfc\xa3\x1c\x5b\x90\x81\xca\x01\xea\xdf\xa9\x58\x06\x78\x39\xc0\x53\x07\x10\x55\x91\xdc\x65\x9f\x01\xce\xc7\x0f\x7a\x53\x03\x6a\x46\xb4\x85\x80\xbf\x60\x12\xbd\x51\x32\x8c\xfa\x4a\xce\xe8\x94\x98\xe4\x07\x6f\x48\x46\xae\x54\x3e\xe6\xc3\xfd\xa3\xfd\xc3\xdd\x83\xf3\xd7\xbb\xef\x76\x5f\xed\x1f\xec\x9f\xed\x43\x66\xbf\x37\x7b\x6f\x77\xdf\x1f\x9c\xd5\x5f\xff\x9d\x8a\x77\x0a\xc1\x96\x36\x49\xb4\xea\xdb\xde\xe1\xbb\xb3\xdf\xce\x5f\x1d\x1c\xbf\xfe\x87\x84\xf4\x2f\x2e\x8f\xf2\xb1\x91\x00\x49\xf4\x2e\xe5\x52\xd2\x7b\x23\xf7\x17\x30\x4b\x01\xcd\xa0\x14\x68\xc7\x07\xf4\xc2\x64\x8e\xd6\x9d\x91\x15\x8e\x8e\x8f\xf6\x12\x12\xbd\x3f\x52\xc9\x4a\xdf\xc8\xce\x00\x75\xaa\x2a\xc7\xd6\x9e\x2c\xc6\xb7\x79\x3a\xa5\x23\x35\x23\xe5\xda\xd3\x2f\xce\xd2\x2b\xf9\x6b\xc6\xc9\x2c\xe5\x64\x97\x5f\xc1\xc2\x54\x13\xdb\xfc\x4a\xcd\x61\xf6\x0b\x63\x1f\x21\xa5\x98\x3a\xa3\xcc\x4f\x0d\xea\x74\xc4\x66\xc4\xd5\x7e\x9d\xaa\x84\xf8\x7d\xac\x02\xd3\xa9\xd2\xe6\xab\x89\xc9\x2e\xdf\xdc\x28\xd2\x80\x5a\x9b\x66\xd9\x1b\x65\x83\x13\x6f\xf6\x4b\x6d\x43\x52\xc7\xbe\x5f\xc1\xbe\x5f\xc5\xbe\x5f\xc1\xbe\xff\x40\xec\xfb\x2b\xb1\xef\x37\xb0\xef\xaf\xc2\x7e\xc9\x6c\x1b\x69\x09\x72\xdc\xaa\x01\xa6\x39\x18\x4f\x95\x2a\x6c\xf9\x2f\x24\x9b\x99\x54\x5c\xf4\x32\x74\x25\x22\xff\x7b\x25\x00\x7f\xf3\x33\x54\xdf\xb0\xe1\x41\x40\xc2\x68\x68\x5e\xdf\xe7\x2a\xd9\x33\x19\x77\x26\x50\xab\x13\x4a\x19\xa2\x73\xc9\xd9\xb4\xf3\x68\x01\xfb\xa2\x3a\xb3\xe9\xe5\x2d\x38\x88\x74\x42\xbf\x91\x8e\x5a\xd0\x64\xdc\xb1\x71\x72\xd1\x07\xe7\x52\x5e\x36\x54\xac\xaf\xd3\xfc\xaf\xa2\xa3\xf7\xef\x8e\x32\xf7\x31\x4d\xcb\xbd\x5e\xa5\xb3\x28\x20\xbc\x3f\x9b\x8b\x4e\x9a\x77\x40\x5d\x63\xe3\x3e\x77\xd8\x65\xc7\xc7\x20\x40\x9a\x68\x26\xc6\xe5\x72\xb2\x99\x12\x4b\x09\x57\x01\xf1\x00\xd2\x99\xf0\x97\x6b\x13\xcf\x34\xf4\x75\xc8\x67\x9b\x7f\x20\x01\x0d\x16\x96\x84\xf6\x9c\x5c\x4e\x43\x5b\x64\x29\x11\xab\x40\x1e\x40\x45\x1b\xda\x7d\x6d\x32\xda\xa6\xbe\x0e\x1d\x1d\x02\x0f\x24\xa4\xc5\xc3\x52\x52\xef\xf3\xcb\xe9\xa8\x0b\x2c\xa5\xa2\x0f\xe0\x01\x34\x9c\xa9\x6a\x6b\x53\x50\x37\xf3\x75\xe8\x67\x1a\x7f\x20\xf5\x34\x0e\x01\x2a\x35\x07\x25\x77\xc5\x2a\xcd\xf4\x07\xe4\x6b\x00\x2b\x5f\x42\x82\x36\x9a\x48\x2a\xf4\xb6\x05\x9d\x92\x8e\x4d\x13\xd5\xe1\xe4\x3f\x73\xca\x49\xd1\x8e\x93\x06\x18\xf8\x81\xa5\x27\x21\xc1\x2e\xb7\x9c\xc0\x92\xdd\x8c\x17\x9c\x5c\x12\xce\x09\x97\xbc\x94\xe1\x25\x45\xcb\x22\xe0\xc8\xe3\xe9\x8d\xef\x63\x07\x74\x8c\x0b\xcd\xb7\x53\xbc\x82\xb9\x2f\xad\x97\xeb\x5a\xc5\xef\xee\x46\x1e\xea\xde\x65\xc5\x60\x26\x59\xac\x82\x84\x4f\xfb\x68\xe8\x4a\xcc\x3c\xd5\xaa\xfc\xd8\xc3\x8d\x0b\x3c\x29\x96\x83\x6d\x62\x71\x3a\x4d\xb3\x6c\x3f\x17\xe0\x59\xaf\x65\x28\x29\x4b\x8e\x29\xe4\x7a\x33\x72\x54\xdc\xbc\xb5\xd5\x85\x67\x9c\x4e\xa9\xa0\xd7\x5e\x61\x08\x86\xed\xf0\x99\x86\xa6\x9b\xa4\x2e\x46\xd8\x2c\xa3\x52\x12\xe9\x41\x5f\x82\x53\x18\x42\x79\xee\x07\x78\xb1\x54\xec\xe8\x97\x50\xba\xff\x3d\x56\x24\xe8\x2b\x42\x7c\x8f\x45\xf4\xe8\xba\xe7\x93\xe3\xda\xe7\xc6\x65\x3b\xdf\xfd\x08\x65\xbf\x7b\x8e\x53\xe0\x78\x45\x08\xbf\xbf\xaf\xd4\xba\xaa\xd7\x6a\xc5\x4b\x68\xbc\xa4\x84\xe4\x24\x22\x85\xda\x93\x67\x1a\xb5\x27\xdf\xa9\x8e\xa9\xb4\xe1\x01\x3c\x03\x9f\x0e\x93\x19\x64\xa0\x00\x29\x14\x9e\xc1\x9f\x67\x3d\xdd\x25\x0f\x9f\x0b\x6f\xd8\x6f\x42\xd2\xed\x12\x9d\xff\xe1\x4c\xce\x19\x55\xfb\x89\x6a\xe7\xdd\xbc\x98\xbc\xb6\xd3\x29\xc0\xc4\x87\x73\xeb\xc1\x71\x34\x6f\x56\x69\xc7\x12\xba\xd3\x44\xee\xdc\x86\x7a\x52\x84\x21\x82\x48\xb9\xb1\x4c\x2a\x48\x82\xda\x45\x5d\xf9\x60\x96\x58\xc7\x75\x8e\xa9\x72\x17\x4c\x92\x84\x99\xc5\x74\x6b\x94\x96\x69\x32\x50\xc1\xdc\xd5\x2d\x31\xa0\x8c\x30\x43\x0b\xf7\xe2\xe9\x8f\x5e\x44\x74\x9d\x68\x01\x32\x2c\x78\x45\x9e\xca\x79\x71\x39\xc3\x7c\xbb\x40\x08\xbb\x0f\xfd\x1f\x71\x3e\x28\x86\x2e\x10\xba\xfb\xd4\x42\x14\xbf\x66\xdb\x10\xba\xaf\x4f\x24\x92\xdd\xae\x7b\xf1\xac\x57\x6d\x57\xfe\xaa\xd8\x7c\x39\x5b\xab\x1d\x39\x96\x4f\xb1\x51\xb0\x68\x0d\xb9\xc2\xc1\x2c\x31\x14\xcf\x94\x3e\xac\x66\xaf\x65\xf2\xb5\x62\x9e\xf4\x36\x48\xe8\x6b\x81\x72\xb4\xd0\x61\x10\x16\x10\x6f\x28\x26\x78\x64\xd2\x85\xe5\x18\xf4\x26\x71\xf0\xfa\x60\xf7\xfd\xe9\x5e\xb0\xc5\xb7\xb6\x94\xd9\x89\x0e\xdf\x25\x51\xfa\x11\xab\xa1\xff\xfe\xb9\x5a\x6b\x7a\xba\x41\x6a\x8c\x03\x59\xbd\x08\x90\x4b\x14\x4b\xe5\xde\x2b\xb4\x6e\xbb\x87\xb7\xfb\x08\xe5\xb6\xfb\xdf\xff\x80\xe7\x21\x8d\xa0\x51\x84\xa9\x0a\x80\xe4\x8d\x22\x4b\x84\x8d\xc9\xf5\x82\xbd\x4c\x7a\x2f\xd8\xf6\xb6\x09\x07\x26\x06\x6c\xb8\xe1\x60\x05\x07\x4a\xe5\x93\x1a\x70\x12\xb7\x67\x12\x57\x95\xb1\x40\x76\x30\x44\x08\xf7\x36\x93\x84\x75\xbb\xae\xe2\x33\x3c\x0f\x83\xbd\xa3\x37\x90\x5b\xc6\x5a\x5f\xd6\xc1\xaa\x12\xba\xa7\x6c\x66\x3a\x2a\x5f\xfc\x20\xc7\x34\xf7\xad\xe1\x16\xa9\x14\x57\x08\xbe\x60\xe3\xdb\x58\xa8\x43\x64\x31\x62\xf3\x5c\xc4\x1c\x6b\xcf\x02\x58\x17\xa1\x75\x0d\x6e\x90\x10\xdb\x65\xf9\xbd\x46\x70\xff\x68\xff\x6c\x7f\xf7\x40\xce\xb0\x1c\xab\x91\xe0\x76\xdb\xb2\x78\xbe\xdd\x3f\xda\x3d\x38\xf8\xcd\xa2\x06\x7b\x5c\xb5\x88\x0f\xcb\x6d\x9a\x95\x7e\x0d\x7d\xf3\x3d\xd3\x1d\x7a\x79\xc6\xe7\x24\x16\x98\x5e\xbe\x4d\xb3\x82\xc4\xbc\xf4\x6c\xbc\x2a\x9d\x0e\x8d\x21\x25\x51\x93\x46\xf5\xe1\xe0\x74\x2f\x70\x3b\x2d\x10\xde\xa2\x5b\x43\x11\x8a\x5a\xff\x3a\x2e\x37\x3a\x65\xc1\x22\xc7\x90\x94\x65\xd5\x82\x50\x2b\x7d\x16\x5a\xf1\x19\xe7\x58\x29\x67\x62\xab\x91\x58\x4c\xd9\x58\x1d\xb0\x2a\x6b\x54\x11\xb3\xb2\x2c\x13\xb2\x51\xdc\x50\x31\x82\x94\x0e\x33\xb4\x18\xa5\x05\x31\x1b\x74\xac\xdb\xde\x0f\x09\x6e\x8b\xd1\xc0\x66\xfd\xda\x1d\x85\xd8\x39\x89\x45\x19\x0a\x84\x36\x00\x90\xea\x4c\x6c\xe7\x14\x4c\x4c\x68\xa9\xaf\x4b\xf8\x23\xee\xca\x15\xee\x6d\x68\x0b\xda\xb1\xf1\xcb\x99\x97\xa6\x58\x7d\x33\x5a\xd6\x07\xad\xfc\xff\x83\x0a\x75\xd9\x21\x87\xa8\x8f\xe2\x93\x32\xa4\x06\xf9\x9f\x89\x70\x09\x2b\x41\x54\xf7\x5a\x86\xa1\x60\x6d\x20\x53\xa6\x41\xfe\xf8\x2c\xfe\xf1\x3b\xf0\x70\xaf\x74\x98\x88\x2a\x66\x6b\xc1\x7a\xd2\x8b\x9f\xf4\x7d\x58\xc6\xd7\xd7\x53\xe8\x91\x4f\x93\x74\x5e\x80\x53\xbf\xf0\x79\xbc\x33\x35\x3b\xde\x56\x28\x20\xdf\x34\x07\xbe\x95\x74\xad\xb7\xfb\x4d\x35\xaf\x49\x55\x39\x84\x10\x01\x82\x84\x0c\x0b\x50\x5f\x22\x5c\x24\x9c\x84\x5c\xff\xc4\xc1\x9e\xe1\xe9\x41\x61\xda\x99\x90\x14\x32\xe5\x5d\x90\x4e\xda\xd1\xd6\xc3\xea\x06\x51\xff\xb0\x5e\xab\x85\xbd\x99\xf4\xf2\x1f\xc3\x34\x8f\x94\x62\x2d\x52\x2a\x58\xa3\x45\x0d\x0b\x9c\xdf\xdd\x0d\x86\x98\xe2\x14\x0b\x54\xaa\x99\x87\x09\x2a\x95\xf4\xe1\xf7\x79\x3f\xcf\x68\x4e\x96\x74\x5a\xae\x2c\x0a\x05\x62\x8e\xe9\xe5\xfb\x5c\xf1\x71\x63\xb8\x48\x01\x98\xb4\xdd\x08\xa2\x8e\x9f\x02\xe2\x10\x04\x8b\x88\x90\x7b\xc1\x2c\x8e\x42\x8a\x76\x68\x9c\x87\xbc\x82\xe5\xbe\xa7\x2d\x5e\x8e\xa4\x94\xb7\x60\x59\x4a\xea\x99\xc9\x13\xe9\x1d\x20\x92\x1b\x80\x61\xe7\xb9\x43\xc1\xde\x19\x6a\xe6\xd8\x92\x3b\x97\xab\x22\xd8\x53\x1e\x58\x72\x1f\xb9\xc8\xc8\x34\x96\xa8\xa4\x19\xd5\xa3\x17\x60\x58\xab\x71\x0f\x93\x7c\x1c\xf7\x4a\x14\xcb\x53\x07\xe7\x49\x92\xfc\xb6\x13\xaa\xe8\x14\xb6\xa1\x38\x37\xe7\x8b\xdc\x12\x9f\xfc\x88\xcd\x5e\xa0\x76\xf9\xbe\x66\xab\x86\x65\x68\x74\xcb\xb6\xff\xc0\x6e\x36\xfa\x6d\xd8\x4f\xa2\xd8\x4f\x61\x54\xf0\x8e\x3f\xa6\x25\xf2\x62\x3b\x40\x02\xaa\x1c\xd2\x88\x17\x38\x4b\x7a\x2f\xb2\x9f\xac\xdd\x5f\xb6\xb5\x85\x98\x5a\x8b\x17\x61\x0e\xd6\xd2\xc5\x20\x1b\xea\x4c\x85\xfa\xf0\x9a\xdb\xc3\x6b\x54\x26\x73\x20\x9e\xae\x33\x52\x2c\xc2\x38\x99\xff\xf4\xd3\xb3\x0d\xda\xed\x86\xe3\xbb\xe4\x39\xda\xc8\xd5\xd3\x0f\xea\xf3\x24\xe1\x5a\x93\xba\x7b\x72\xb2\xfb\x1b\x98\x71\xa1\xc5\x24\x11\x83\x9e\xe3\x18\x2e\x13\x31\xe8\x0f\x75\x22\x9b\x4b\x3f\x91\x0d\x73\xa7\xf2\xde\xa7\x19\x0f\xf0\xe5\x60\xe6\xf1\x6c\xee\xf3\xf3\x67\x38\x0d\x27\x08\xa7\x61\x81\xf0\x58\xf2\x60\x65\x65\xdb\xad\xb1\x74\xed\x13\xaa\xe5\xbe\x46\x33\x5b\xfe\xfc\x12\x2d\xf3\x8b\x27\xf6\x26\xc3\x65\xa9\x6c\xcc\x2f\xde\x3e\xbf\xf4\x82\x54\xb2\x6e\x27\x3c\x3b\x7e\x73\x1c\x77\xc4\x84\xcb\x6d\xe2\x82\x08\x41\x38\x6a\xce\xba\x99\x5c\x2f\x4e\xd6\x83\xb9\x25\x85\x2f\xb3\xe4\xf5\x7c\xd2\xdd\x7f\xa3\x94\xa4\x4e\xbb\xb1\x7c\xd9\x8f\xad\x42\x5b\x72\x2e\xea\x1e\xc8\x48\x6f\x14\xc3\x89\xcf\xcc\xb4\x4b\xed\xb4\x2b\xcc\xbe\x90\x25\xb9\x64\xb5\xb4\x83\x42\x6f\xe7\xdf\x61\xae\x6f\x75\x90\x92\x96\xe6\x49\xd5\xb1\x21\x45\x77\x77\x9a\xea\xe9\x8e\x20\x61\x6a\x8b\xa7\x66\x8b\x98\x91\x50\xbd\xc3\x6d\xd8\x65\x0e\x3b\x58\x14\xcc\x21\x65\xf0\x9c\x97\xd5\xbd\xe5\x52\x5f\x2c\x8c\xd7\x21\x48\x0e\xb6\x25\x96\x14\xe6\xd2\x0b\xab\x8b\x40\x73\x9f\x14\x33\xab\xd4\x36\x6f\x52\xcc\xf8\x9e\x64\x9a\x3c\xe2\x4c\x42\xee\xe9\x1f\xcc\x28\xd9\x19\xc5\x6b\x17\x1e\x4a\x3f\xa1\x3a\x5f\x22\xbc\x80\x9f\x73\xc9\xc4\xe8\xb9\x0a\x91\x56\x16\x9e\xfe\x61\x54\xd5\x21\x8c\x7d\xfd\xc2\x65\x99\x64\x78\x96\xc8\x21\x99\x23\x3c\x95\x67\x16\xc5\xf3\x4a\x24\xc1\xcd\x24\xb9\xdc\x61\xe1\x08\x8f\xf1\x25\x5e\xa8\x3e\xcf\x4c\x9f\xa7\x25\x8a\x53\xf8\xd6\xf2\xa5\xa4\x97\xa1\x3b\xaf\xc2\xe5\x4a\x1c\xf5\x33\xee\xbc\x4e\xf3\x9c\x89\xce\x25\xcd\x7d\x85\x61\xb0\x65\xcf\x81\xfb\x8f\x7c\x1d\xa4\xcc\xf7\x0e\xa9\xc7\x35\x8a\xd8\xec\xe9\x8e\xe6\x24\x05\x96\x3f\xe1\xbf\x3e\xfc\xff\x04\xfe\x7f\x8a\xe2\x4a\xf9\x27\xcb\xcb\xd7\x4a\xf6\xdb\x4a\xa2\xb8\xf2\x12\x95\x6b\xdd\x6c\x8d\xf5\xa5\xc2\xbb\x36\x8b\x59\xd8\xbf\xe1\xf6\x0d\x6c\x23\xe6\xf9\xa8\x48\x06\x43\x65\x33\x6b\x2d\x35\xa1\x90\xb5\x52\x85\x42\x1a\x0f\xb4\xdd\x2f\xfd\x03\xd8\x6c\x59\x83\xde\x10\x6b\xcb\x26\x55\xd9\x86\xb7\x08\x7b\x5e\x53\x83\x7c\xa8\xa2\xb4\x95\xa5\xac\xb8\x0b\x37\x80\xef\x9c\x19\xc1\x6b\xbb\x7b\xba\xc0\x54\x77\x77\xf0\xa7\x96\x12\x8d\x6c\x54\xd7\x3e\xc4\xea\x23\xc9\x80\x0c\x9d\x04\xd8\x12\xad\x8c\x38\xe9\xfa\x29\x16\x03\x3e\x44\xce\x12\xd1\x0d\xfe\x47\x97\x34\x4f\x33\x7a\xb9\x63\xf4\x3c\x1d\x4e\x7c\x00\x05\x5b\x43\xd8\xc9\x03\x53\x9f\x7c\xcc\x9e\x7c\x85\x39\xf9\x74\x2e\xb8\xc2\xe4\x65\x64\xf2\xe4\x93\xe7\x5d\x06\x27\x9f\xca\xa6\xd7\x76\xde\xcd\xab\xe7\xdd\x48\x9d\x77\xe3\xa4\xf7\x62\xfc\x93\x31\x86\x7d\x31\xde\xda\x42\xb4\x7e\xde\x8d\x06\x63\xef\xbc\xa3\xd5\xf3\x6e\x2e\xcf\xbb\x4a\x7b\x08\x67\x08\x61\x5a\x42\xd7\xfb\x91\xda\x18\xb1\xfa\x21\x37\x47\xfd\xa8\x37\x48\x84\x29\x52\x01\xdd\xd4\xbe\x08\x4d\x6a\xf2\x84\x93\x04\xca\xe2\xcb\x44\xb3\xb1\xd5\xa1\x9b\xa0\x9d\x5d\x7b\xe4\x4d\xf0\x25\x8a\x07\x33\x79\x00\x6b\xa5\x64\x1d\xb4\xdb\x72\x5b\xe8\xbf\x60\xb3\xbe\x15\x9a\x3f\xd2\x7c\x1c\x73\x0c\xbb\x6e\x8e\xd3\x7c\x7c\x36\x21\x79\x4c\xcd\x5e\xca\x70\x31\x4b\xf3\x38\x2d\x21\xdf\x61\xd3\xa1\xd8\xf0\xf8\x7a\xdc\xed\xc5\x48\x6c\x4d\x57\x6b\x17\x44\xb2\x96\xc2\x51\xdf\x42\xd5\x4b\xea\x3b\x38\x57\xce\x1e\x1a\xee\xee\x37\x88\x8d\xc1\x5f\x5d\x69\x0c\xd5\xcc\xf0\x75\xbb\x34\x52\xfb\x74\xe9\x58\xbe\xe5\x9b\xbf\x14\x30\xd4\xde\x1f\x19\x0d\x75\x7d\xb3\x2e\x76\x68\x58\xa0\x98\xed\xb0\x10\xc5\x29\xa9\xdc\x20\x3c\x5a\xf0\xb2\xf3\x68\x91\x97\x1f\x70\xaa\x24\x4c\x9c\x46\x24\x1f\x4b\x26\x01\xe7\xf5\x11\xd2\xe3\xf3\x96\x13\x12\xc4\x8d\xbd\xfb\x7d\x6e\xf5\xeb\x64\xdc\xf9\x85\x5e\x4d\x0e\xc8\x35\xc9\xa0\xd2\x5c\x52\x40\x79\xaf\x44\x3e\x14\x54\x01\xac\x6f\xd6\xe7\x69\xa6\x9a\x90\x63\x7d\xc9\x09\xf9\x35\xe5\x31\x93\x42\xba\xfc\x2a\xd7\x5a\x6e\x18\x7a\x35\xef\xa2\xb4\xb0\x37\x2c\x6a\xe6\x48\x5e\xba\xdf\xfb\x4e\x8b\x57\xd1\x7c\x76\x9d\xf2\x62\xc0\x86\x68\x68\xbb\x54\xea\x69\x50\xa8\x69\xd0\xe9\xc7\x6a\xc5\xd6\xab\x6c\x38\x88\x4f\x9e\x60\xa5\x3a\x79\xf2\x14\x67\x1e\x28\xe8\x44\xa7\x17\xab\xd5\x2d\xee\x1d\xb4\x51\xa3\x11\x3c\x4e\xe6\xd5\xb9\x34\x32\xb8\xbb\x61\x55\x88\x8c\x77\x9c\xce\x7c\x6c\xf8\x1a\x60\x9b\xac\xba\xb9\x44\x71\x1d\xdd\x91\x8f\xae\x39\x35\x1b\x43\x38\xf7\x87\x10\x8e\xdf\xbf\x8a\x0e\xb9\x4e\xb3\x79\x2a\x48\x87\x7c\x9a\x71\x52\x14\x10\xa2\x38\xef\xe8\xe1\xe8\x04\x5b\x05\x2a\xab\x70\xdb\x4f\xe3\x1c\xc1\xd9\x30\xc1\x97\xe5\x2e\xc4\x5e\x7d\xda\xc7\xe1\x00\x93\x21\xb2\xe1\x0c\x07\x6e\x03\xe4\x1d\x76\xd9\x21\x48\xd4\x77\x3b\xee\x36\x76\xf7\xed\xc9\x73\x4c\xcc\x39\x02\x11\x5c\xb1\x6e\xa1\x07\x2d\x40\x66\x3b\x15\xd3\x8e\x5e\x86\x0d\x86\x7e\xb3\x7e\xe2\xd8\x88\x95\xc0\x42\x25\x04\xe7\x83\xde\xf0\x65\xf2\xf4\x99\x3b\x16\xfb\xe6\x18\xdc\x0c\x37\x85\x1e\xc7\xbb\x3b\x2f\x61\xf5\xa6\x3c\xda\xf4\xf8\xf2\xa1\xea\xba\xb9\xd9\xd9\xec\x97\x10\x63\x4f\xb5\xce\xd5\x41\x58\xcf\x58\xda\x2a\x07\x38\x26\x68\x62\x6e\xe4\xcd\xf5\x96\xe8\x64\x24\x2d\x44\x87\xe5\xa4\x63\x6c\xd0\x1b\x32\x81\x3c\x80\x06\x0c\x82\x4c\x0c\x5d\x02\x43\x27\x3b\x7a\xbc\x73\xe3\x3e\xc6\x93\x1f\x31\xfb\xdc\xbb\x19\xaa\xee\x3f\x9e\x2b\x35\xb1\x1e\x53\x75\xa3\xf0\xc3\x8f\xb8\x08\x19\x6a\xbf\xb1\xa9\xa0\xc6\x0c\x6a\x69\xcb\xd5\x0f\xa6\x6e\xc9\x94\x6a\x49\x6b\x53\x4c\xa7\x64\x19\xa5\x59\xb6\x44\xc7\x52\xf5\xd8\xb6\x72\x59\xb6\x93\x49\x29\xde\x3f\xa4\xb0\x3a\x87\xcc\x99\xa0\x8e\xa3\xcc\x1e\x47\x24\x79\xb9\xf2\x72\x4b\x1d\x52\x8b\xea\x00\x41\x04\x62\x3d\x77\x9f\xa8\xb9\x2b\xe4\xfa\x78\x1d\xaa\xf5\x0c\x56\x5d\xb6\xc4\xd3\x7a\x89\xca\x0e\x5d\x2b\xfc\x6c\x59\xe1\xda\xae\x8b\xed\x96\x4b\xec\x96\xdb\x2b\x2b\xa0\xbe\xfb\x02\x50\xfd\x2a\xa8\xef\xbf\x00\xd4\x93\x2a\xa8\x1f\xbe\x00\xd4\xd3\x2a\xa8\xe7\x5f\x00\xea\x59\x15\xd4\x8f\x5f\x00\xea\xbb\x0a\xa8\x27\x3f\x42\xea\x65\xc3\x42\xbb\xf7\x3f\xd8\x6d\x74\x50\x5f\x53\x4f\xbe\x97\x7c\x96\x2e\xf7\x7c\x45\xb9\xef\x56\x5d\xea\xfd\x80\x86\x8a\x75\x3d\x49\x16\x41\xce\xb6\x15\xd7\x1b\xc4\x9b\xbd\x72\x43\x1b\xad\x81\xd1\x6a\xe7\x0f\xf8\x2e\xb6\xb5\x2a\x50\x95\xb0\xdc\xf7\x1b\xff\x22\xab\xdb\xdd\xdc\x24\x03\x0f\x9a\x77\xb9\x70\xe4\x0a\x6e\x92\xbb\x3b\x55\xce\x41\xf5\x4a\xee\xbb\x4d\xfc\x4d\x28\x10\xa2\x97\x61\x3d\x46\x2d\xaa\x9c\x28\x02\xed\xab\x4b\x7a\x92\x59\x96\x5f\x69\x6c\xe4\x42\xdf\x51\xb7\x06\xf1\x61\x48\x22\x7d\x6b\x80\x1b\x3c\x98\xbd\x2c\x90\xe2\x8e\xc5\xe4\xc0\x89\x16\x0a\x9b\xbc\x05\x9b\xdc\x61\xc3\x24\x36\x39\x52\xd5\x98\x3c\x9b\x25\x46\x1d\x7a\x19\x06\x47\xe6\x42\x3e\xc9\x01\x2b\x74\x08\xdb\x57\xee\x15\x71\x4c\x95\x57\xcc\x49\x37\xae\xa0\xeb\xa1\x2e\x74\x0a\x8c\x9d\xf2\x87\x94\x05\xd4\x11\xb3\x69\xbf\x03\x4f\x60\xb2\x37\x11\x2e\x8e\xc8\x35\xe1\x28\xcc\x71\x30\x77\x6c\x63\xaa\xc5\x29\x9a\x8f\x21\x44\x17\x44\xa4\x0a\xed\x31\xa5\x25\x0b\xf5\xab\xb2\xcf\xa9\x2f\x8a\xd1\x94\x3b\x9e\xfa\x4d\x20\xdf\xa0\xa7\x9e\x7f\xfb\x80\x61\xcd\xd5\xb0\xbe\x85\x5b\xcc\x36\x22\x0a\x4b\xc4\xf5\xc6\xd4\xc1\xd0\x4b\xc1\x03\xa2\xee\x0d\x96\x8d\x83\xb0\xe3\xe0\x5a\xc2\x62\x45\x6b\xad\x03\x25\xcc\x40\x55\x9b\xb2\x03\x25\x56\x0e\x94\x68\x1b\x28\x59\x21\x40\xa5\x6f\x59\xfa\x87\x56\x26\xfc\xb7\xa6\x4c\x90\x3c\xb7\xd6\xd8\x10\xac\x55\xf3\x31\x2f\x5b\xb3\x98\x74\x08\x6c\x2c\x01\xbd\x0c\x5c\x30\x1f\x18\x35\x72\x77\xd7\x87\x14\x65\xd6\x15\xb7\xc6\x69\x9e\xfe\x76\x74\xb6\xfb\xef\xce\xde\xc9\xc9\xf1\x49\xdc\xf9\xff\xe8\xa5\xc7\xc9\x74\x0a\x9a\x5f\x65\x1e\x17\x63\x39\x3e\x73\xeb\x28\xf7\xc1\x50\x0b\xe1\x7d\x2b\x84\xfb\xbb\xda\xa0\x37\x54\x4c\x45\x1f\x41\xf0\x73\x75\x49\x29\xeb\xdd\xaa\x14\xcd\x61\xa0\xb9\xd5\x40\x4a\xc3\xfa\xea\x52\x29\xe7\x27\x69\x11\x06\xb0\x3f\xa0\x1d\x5b\x5a\xfd\x46\xf1\x09\x1c\xd1\xba\xe3\xf3\x3c\x23\x45\xf1\xa5\x9d\x57\x50\xfe\x34\x02\xdc\xd7\xc1\x0a\x35\x5a\xa8\xe5\x13\xe0\x86\x42\xaa\x27\xa2\xa3\x20\x7d\x56\xf7\x25\x8c\xcf\xee\xfc\x93\x95\x9d\x57\xa6\x1d\xc5\x4c\xcb\x41\x4d\x5a\x9c\xeb\x5b\x0d\xd7\x3d\xdc\xaf\x4e\x87\xbc\x46\xad\x7c\xc5\x74\xc8\x88\x68\xcc\x05\xc3\xce\xa7\x04\xbe\x7b\x1d\x35\x7e\xa2\x01\xee\xe1\x9e\x7f\xa1\x92\xdb\x3e\x51\xa3\x56\xd2\xcc\x36\xc5\xe7\x8d\xf1\xc0\x39\x74\x4a\xa3\x40\xd2\x91\x3f\x20\xfa\x02\xde\xc4\x8f\x37\xaa\x3b\x01\xa9\x3e\x3e\x92\x5b\x70\x45\x1c\xf4\x86\x83\xde\x70\xc7\x23\x20\x1f\xf4\xe5\x2b\x34\x8c\x07\x4a\x87\x8c\x86\xa8\x2e\x88\x01\x91\x11\x6e\x8c\x83\x28\x4b\xb8\xed\xb7\xb9\x5b\x24\xdc\x1f\x94\xf1\x52\xf5\xc6\xdf\x8a\x0e\xd6\x02\xa7\xef\x4c\x1b\xf6\xcf\xf6\x4e\x74\xa1\x1f\x9e\xc8\x17\xe0\x88\x56\x33\x08\x50\x85\xa0\xcc\x77\x50\xe6\x64\x6f\xf7\x1f\xf5\x42\xaa\x22\x6e\x19\xea\x27\x9e\x3d\xc8\x3d\xa6\x07\x1a\x32\x34\xf5\xd4\x13\x51\x1e\x60\xae\x50\x99\x49\xd6\x74\xa1\x3e\xa3\x94\x1d\x83\x1d\x4f\x9a\x6f\x6b\x63\xf6\x2f\x5d\x66\x0e\xd2\x43\x16\x9b\xcb\x85\x37\x00\x8f\x25\x8e\xe1\xc6\x30\x4d\x7a\x2f\x52\x17\xc6\x2c\x35\xf1\x41\x8a\x24\x1f\xa4\x2a\x2e\xc8\xd5\x9c\x8e\xe5\x71\x55\x74\xbb\x81\xef\x15\x07\xef\x9a\x66\xad\xcb\xb1\x1d\x33\x52\x74\x72\x26\x3a\x22\xfd\x28\x45\xb5\xdf\x3f\x3c\x5a\x48\x81\xbc\xfc\xfd\x43\x87\x81\x55\xc6\x07\x7b\xe3\xe8\xa6\x27\x1d\xa4\xad\xb7\x80\x2b\xb6\x08\x3b\x99\x9f\xd9\xc9\xcc\xca\xd2\xdf\x2e\xc0\x42\xb0\x87\xf0\x6d\x63\x2e\x29\x8b\x9a\xef\xe5\x52\x74\x8b\x71\x5b\x6e\x6d\xdb\xfa\xce\x67\xfb\x3a\xe5\xf5\xa3\x42\x9b\x09\x28\x5f\x30\xbc\x70\xad\xca\x65\x4f\xed\xb2\x67\xf8\x3a\xcc\xf1\x92\xed\x18\x0d\x4b\x6b\x17\xd7\xb2\x57\x1b\x5c\x9c\x66\x02\x7b\x61\xeb\x16\x9e\x49\x81\x33\x00\x95\xb4\xd1\xca\xee\x09\x09\x73\x20\x96\xac\x52\x87\x2e\xc7\xf9\x28\xa4\x36\xd1\x21\x2d\x7d\xf5\x82\xf5\x4d\x93\x54\x6f\xdc\x2e\xe2\xaa\x40\xdf\xf4\x26\x4b\xd5\x45\xa2\xf0\x64\x7b\x73\x95\xc4\x81\xc8\x7c\x65\xc7\x74\xc8\x82\x6e\x17\xd4\xea\x6d\xdd\x34\x69\xac\x54\x1f\xa9\xac\x68\xee\x71\xd9\x66\x92\xfc\xe1\xd2\x37\xaa\x64\x07\x51\x14\x15\xc3\x44\x78\x37\x8e\x79\xf3\xc6\x31\x6d\xe9\x49\xa1\x64\x7e\xde\xd2\x13\x42\xa0\x2b\x6d\x1c\x57\x09\x8e\x52\xef\x21\x68\xc2\x2b\x13\x65\x06\x8a\x99\xd0\x41\xba\x6c\xc2\xcb\xb2\xe2\x27\xf4\x5f\xcd\xda\xbd\x5f\x7e\x4f\xa4\x02\x42\xd0\x91\x80\x18\xb0\x2b\x6e\x8c\x2a\x77\x44\x78\xe9\x25\x92\xb1\xc7\x93\xb5\x0f\x69\x21\x77\x15\xeb\xed\x32\x55\xbf\x13\xe2\x5f\x30\x19\xaf\x53\xcf\xf7\xdc\xc0\xc5\x69\xe2\xae\x3f\xe9\x7a\xd7\x9f\x54\x5d\x7f\x36\xb2\x9f\x40\x22\x5a\x1f\x0b\x64\x1b\x57\x49\x25\xbc\x2b\x2c\x36\x94\xdc\xb3\xfa\x54\x96\x8a\x84\xaf\xfe\x1f\x26\xa1\x56\x46\x82\x85\xd1\x00\x6c\x8c\x36\x9a\xca\x4c\x97\x85\xf4\x0f\xf9\xf5\x29\x10\xc5\xae\xef\x34\xe1\x24\x64\x83\xfe\xb0\x69\x87\x34\xd1\x01\x8f\x40\x55\xb6\x96\x25\x52\x6a\x59\x9d\x0d\x9e\xa4\x38\x4f\xd8\xe0\xc9\x10\xd3\x84\x0d\x9e\x0e\x4b\x23\x6f\x6e\x52\x52\xc1\x49\x1f\x1a\x9e\x65\x94\x67\x3e\x5f\xb8\x72\x3c\x29\x70\x0e\x1e\xdb\x98\xc2\x1f\xad\xda\xab\xdc\x4c\xe2\xb9\x37\x73\xee\x57\xc3\xc3\xcc\x11\x4b\x66\x4e\xa6\x9d\xf7\x35\xe9\x9b\xf3\x48\x11\x7e\xee\x5d\xf7\x66\x3b\xd5\x09\x95\x0d\xbd\x52\x7f\x78\xe2\xed\x2f\x15\x1f\x50\x6d\x94\x48\xb0\xb5\x53\x24\x37\x9d\xcc\xa0\xa7\x2e\x54\x7f\x55\x17\xaa\xf8\x51\x32\x08\x60\x66\x06\x38\xa0\xe3\x00\x07\x60\xf3\x1b\xe0\x40\x92\x20\xc0\x01\x08\x7a\x38\x28\xc4\x6d\x26\xff\x4e\x38\xb9\x0c\x86\xf8\x3f\xc9\x20\x18\xd3\x6b\xf9\x61\x96\xe6\x01\x0e\x66\x01\x0e\xd2\xc0\x4b\xbb\xfb\x2f\xcf\xc0\xae\x71\x1c\xec\x90\xf8\x3f\x03\xe2\x69\x5d\x7e\xbe\xa7\xf4\x23\x59\xfa\x57\xa5\xff\xc2\x24\x79\x29\xf9\xa4\x27\x98\x0c\xfa\x92\x61\x54\xef\xfb\x4f\xe1\x3c\x93\x87\xe6\x77\xee\xe5\x13\xfb\xf2\x99\x7d\xf9\xcc\x64\x33\xf3\x2c\xea\x86\x09\xc1\x4c\x1b\xd0\x79\x73\xd6\xba\x46\x3d\x48\xb5\xcb\x76\xd8\x32\xd5\xae\xbd\x1a\x54\xca\x5d\xe6\x2b\x77\xef\xd1\x7c\xe7\x6a\xd3\xa7\x0d\xaf\x84\xef\x7e\xb0\x5e\x09\xc3\xe5\x3a\x60\x4d\x10\xa3\xb4\xc5\x7c\xa8\x09\xd3\xc7\x3f\x83\x6f\x2f\x56\xb7\x7b\x7c\x87\xc7\x3a\xf6\x81\xaa\xf2\xa4\x51\xa5\xdf\x7b\x7e\x4f\x9d\xfe\x77\x95\x3a\x9e\x20\x20\x14\xca\x4f\x14\x80\xcd\x7e\x1d\xc2\xd0\x36\xfb\x64\x4d\x10\xbd\xa5\x20\xfa\xdf\xdf\x03\xe2\xe9\xfd\x58\x3c\x5d\x13\xc4\x0a\x2c\x7a\x56\x4b\x2a\xa7\xed\x73\x2c\x97\x86\xa3\x54\xbf\xa2\x43\xfd\x51\x0b\x01\xba\x94\x05\xf2\xdc\xa2\x81\x73\x59\xb6\x65\x95\x54\x67\x9c\xcf\x17\xc1\x54\x23\x9a\x8f\xf0\xcc\xf7\x6a\xc6\x44\x5a\xd9\xb7\xb0\xc6\x46\xaa\x02\x2b\x35\x6e\xcf\x7b\x72\x9e\x35\x62\x01\x08\x13\x08\x20\x37\x15\x9a\x77\x88\xdc\x77\xdb\x6f\xd8\x2c\x41\xc3\x8b\xba\xad\x53\xb5\xd9\x46\xc8\x00\x51\xb7\x13\xf3\x5b\x5b\x12\x2f\x00\xec\x26\xef\xe1\x1c\x1d\x9d\x7c\xb8\xc0\x39\xf2\xa6\xe5\xe3\x66\xaf\x74\x43\xa9\x35\xf3\x7c\x08\x0c\xe3\xfa\xca\x85\xba\xd8\x50\x53\x29\xa8\xab\xe7\x67\xb8\x08\x73\x77\x11\x85\xd3\x30\x8f\xc8\x75\x9a\x9d\x82\xcb\x4b\x81\x30\x0b\x39\xaa\x3b\xf4\x38\xdc\xfc\x0b\x08\xe5\x6d\x64\x3f\x39\x6d\xbf\xfc\x50\x35\xed\xb0\xeb\x40\x2d\xa5\x21\xec\x9b\x80\xcf\xf7\x38\x0d\x45\x1d\x03\x7f\x62\x63\x93\xa7\x0c\x8b\x1a\xeb\x5e\x35\x06\xc6\xc6\xe8\x97\x54\x8c\x7e\x4d\xcf\x7b\xfe\xbd\x9e\x5a\x74\xce\x5b\x45\x8c\x33\x7a\x61\xfc\x54\x82\x51\x3a\x17\x94\xcd\x8b\x6d\x15\x00\x27\x28\x1d\x1d\xec\x06\xf8\xa4\x15\xad\xc6\x72\x12\x72\x39\x3d\xeb\x63\xa1\x2e\xbe\x1f\x80\x84\xe0\xf3\x42\x40\x90\x92\x06\x12\x1a\x85\xef\xf5\x09\x56\x35\x04\xc7\x44\xfb\xbf\xfc\x96\x6c\xf7\x35\xbf\xfd\x8f\xaa\xb3\xb7\x32\x33\x53\x91\xac\x5c\xb8\x10\xcd\xbb\x43\x0c\x0b\x1d\x23\xd0\x73\x83\x4a\x54\xee\x54\x63\x35\x33\x56\xac\x8e\xb3\x16\x6e\x37\x35\x77\x86\x7e\xd6\xc4\x74\x6c\xed\xa9\xec\x9b\x0d\xf7\x98\xfc\x06\xea\x26\x87\x56\xcc\x35\x1f\x5d\xc2\xc9\xfa\xcf\x90\x63\x5a\x4b\x88\x08\x41\x32\x4f\x81\x7a\x05\x0a\xad\x85\xab\x17\x14\x65\x9c\x30\xb0\xa9\x35\x61\x87\x2d\xbf\xf0\x77\xdf\x43\x02\x16\xa5\x1f\x4e\xea\x1f\xa1\xf0\x08\x84\x21\x6c\x21\x5e\x28\xa2\x14\xc0\xc6\xc1\x93\xdc\x2c\xf6\xae\xd3\x2c\x16\x91\x7e\xf2\xdd\x3d\xfe\x69\xe8\xed\x22\x99\xfe\x8a\x69\xf2\x8b\xe4\x10\x90\x4e\x5b\x49\xfc\x0c\x76\x6f\x43\xaa\x33\xd6\x01\x65\x07\x6c\x88\x95\x10\x81\xbc\x30\x3f\x9a\x23\x93\xc5\xa6\x54\x84\xdc\xf2\x92\x13\x92\xce\xb0\x80\x78\xa4\x1e\x12\xff\xf6\x03\x8d\xd4\x8d\x0a\x76\x7c\x72\xeb\xfb\x60\xe5\x0b\x57\x59\xc3\x65\x4c\xaa\xc4\xc9\x7d\xe2\x08\x5c\x71\xa2\x8b\xdc\x8f\x12\x69\x91\xe5\xff\xb4\x07\x9d\xad\x48\x8e\x4a\x82\x21\x3b\x7e\x6e\x2b\x82\xe2\xc1\xb0\x54\x01\xb1\x2b\xc1\xf7\x54\x55\xcd\x0e\xab\x1f\x03\x32\x54\x16\xb9\x26\x69\x93\x77\x6b\xa0\xc3\x7b\xd5\x8c\x90\x44\xb7\x4b\x3a\x34\xef\x88\xf2\x86\x8a\x89\xb3\x9c\x35\x5b\x74\xad\x12\xb9\xe9\xfc\x9f\x30\xdf\x31\xd7\x1b\xf4\x2a\x47\xe1\xa2\x94\xc7\xdd\x80\x0c\x63\x51\xa2\xd8\x3c\x48\x8c\x3b\x93\xb4\xd8\xcd\x6f\xbd\xc0\x99\xba\x51\x87\xb1\x62\xa3\x09\x49\x34\xe8\x6a\xae\x12\x41\x96\x5a\x77\x13\xe2\x05\xc7\xad\xc8\x7c\x03\xeb\xd8\xd1\x7b\x91\xba\x9c\xa8\xa9\x0a\xe9\x3f\x48\x87\xc3\xe4\xdf\x21\x1b\xa4\x43\xb7\x90\x4c\xc7\xbc\x39\xc3\x6d\xd8\x42\x29\x1d\x19\x93\x11\x4f\x6b\xcc\xb7\x02\xdc\xb9\x98\x8b\x8e\x98\x10\x4e\x3a\x37\xf2\xbf\x9c\x75\x2e\x39\x21\x9d\xeb\x94\x53\xb9\x6d\x14\x40\xda\x09\xe9\x98\xf0\x29\x5a\xa7\xdc\x6a\xdc\xd2\x50\xbd\x3d\x5a\xf0\x12\x77\xae\x20\x00\x6f\xcd\x7b\x9c\xa0\xf2\x83\x0a\x4a\x07\xb1\x72\xf4\xd4\xce\x89\xf5\x54\xd7\x94\x76\x8e\xce\x0d\xef\xf1\x7b\xc1\x3b\x5a\x68\xb8\x66\x14\x9f\x26\x4e\xbd\xd9\xed\x92\xc1\x93\xa1\xb3\x19\x87\xa4\xa6\x2d\xd1\xa2\x89\xb2\xd4\x79\x5a\xca\x15\x67\x0d\x70\xa4\xe8\x31\x54\xa6\x51\xb6\x31\x4a\x2a\x31\xec\x35\xe4\xe4\x89\x6c\x09\x60\x3c\x29\xeb\x11\x5e\x08\xae\x87\x6c\xa9\x44\xe7\x64\xa4\x4d\x5b\x00\xfe\x5d\x6d\xea\x02\x01\xe9\x7d\x40\x61\xa0\x7c\xc0\x9c\xca\x40\xd5\x51\x41\x55\x55\x31\xef\xa3\xae\xa7\xdd\x35\x53\x11\x13\xac\x5e\xc1\x72\xd0\xa1\x90\xed\x46\xb8\xd0\xc5\x81\xf1\x93\x50\x4d\x0c\x44\x9c\x27\xbd\x17\xb9\xb3\xa2\x35\x31\x9e\x25\x44\x6a\x20\xb2\x32\x11\x83\x7c\x88\x53\xc8\x2f\xb8\x4d\x37\x88\x3a\x07\x20\x91\x67\xe9\x07\xff\x22\xb5\x8c\xad\x6d\xe6\x4b\x44\x9b\x23\xa9\xbb\x5f\xee\xef\xdf\x05\x71\xf6\x99\x6d\x51\xa5\xed\x7a\xb4\xd2\x76\x6e\x3c\xd2\xf5\x4d\x2f\x66\xb3\x98\x60\x30\x13\xc5\x6c\xf6\x24\xe6\x98\xcd\x9e\xc6\x79\xe9\x99\x63\xdf\x57\xc3\x2b\x2b\x96\x97\x2d\xe3\x96\x4f\x2a\x8e\x0d\xdd\xa8\xd8\x97\x59\x21\xb9\xca\x42\xc9\x69\x7d\x77\x57\xe5\x27\xf4\xbb\x8a\x4b\x93\x7e\x57\xf3\x4b\xd1\x6f\x41\xda\x34\xb5\x5a\xe4\x08\xfd\xa9\xc1\x3d\xcb\xf7\xe0\x83\x4f\x13\x7b\xbf\x6d\x2f\x99\x5b\x50\xf7\xa4\x62\x0d\x12\xd8\x2a\xfd\xec\x49\xbe\xfa\x8d\x6f\x81\x54\x7d\x55\x33\x78\xf1\x11\xf1\xae\xd1\x57\xe1\xa2\x2e\x56\x34\x54\xed\x90\xa9\x7f\xb5\x38\x26\x1a\x14\x3d\x6f\x4a\xfb\xca\xfa\x4d\x2e\xed\x47\xdd\x12\xc6\x14\x34\xae\x8a\x3e\xfa\xfa\xee\xde\x1a\x55\x6c\xb6\xe0\xae\xd6\x82\xad\xd5\xb8\xad\xd9\x33\x86\x92\x9d\x60\x8b\xa0\x0d\x9a\xe8\x1a\x65\x5d\x31\x65\x66\x26\x75\x53\x52\x7d\x33\xf3\x92\xfa\x73\x55\x33\x05\xd9\x8a\xad\x49\x85\x5f\x93\xa8\x70\x15\x6a\x59\x6d\x4f\x9a\xf7\xd1\x29\xd1\xda\xa3\xdc\x87\x83\xa1\xde\xcc\xc0\x02\x04\xf6\x32\x65\x0b\x62\xf8\x0e\xc3\x41\xe9\xf8\xf6\x4f\xe5\xb1\xe4\xd7\x30\xb9\xf7\x4b\xcd\x62\xb9\x6d\xae\x56\xf3\x3b\xdc\xef\x3d\x79\x66\xa2\xdb\xd7\xc3\x37\xbb\x23\x9a\x44\xd3\x34\xcb\xd8\x28\x34\xb9\x76\x78\x4b\xda\x54\x3e\xa0\xc3\x8d\x96\x44\x98\x4c\x3b\x6b\xbc\xcb\xd2\x11\x99\xb0\x6c\x4c\x78\xc8\x50\x6c\x52\x85\x36\xca\x29\x76\x58\x16\xd1\xb7\x79\xcc\xde\x38\x91\x48\xca\xa8\xc5\xe4\x50\x61\x93\x43\x78\x48\xf0\x46\xa9\x90\x57\x07\x8e\x77\x36\xad\x1e\x69\x74\x3e\x99\x85\xfa\x19\x7b\x9f\x4c\x04\x40\x5e\xc6\xbc\x54\x14\xc4\x1c\x47\x51\xa4\x76\x4f\xc8\xdf\x42\x8b\xc3\x74\x34\xa1\x39\x39\x9e\x21\x29\x6b\x9a\x0c\x36\x90\x94\x3a\x54\x77\x50\x26\xfa\x26\x4f\x73\x93\x71\xbb\x86\x49\x75\x10\x38\x0c\x82\x6c\x88\x2a\xdb\x4a\xf6\xa5\xf0\x7a\x12\x18\x83\x38\xa4\xb6\x52\xee\xf8\xcf\x6e\xb7\x41\x7b\xf9\x2e\x33\x1b\x81\x36\xdb\xd2\x61\x42\x55\xea\x4c\xb5\xb2\xf5\x31\x19\x56\x9a\x95\xfc\xfa\x56\x8e\x45\x04\xd2\x1f\xc2\xdb\xfd\x7a\x62\xec\xb6\xb3\x47\xdc\xdd\xb5\xcc\x15\x9b\x2e\x56\x45\x11\xbe\x60\x2c\x23\x69\xcb\xf7\x4d\xb5\x68\xfb\x71\xaf\xf5\x16\xca\x65\x9d\x55\x48\x85\xc2\xd7\x80\xdb\xaf\x3d\xe7\x92\x0e\xd6\x3f\xca\x75\xa1\x12\x60\xd3\x39\x25\xa4\xca\x46\x4a\xf7\x52\x99\xd8\x57\x42\x45\xb8\xa2\xfe\xeb\x7a\x0d\x25\x29\xc7\xb6\x9b\xf0\xd6\xc5\x7f\xa9\x98\x79\x03\x81\xf7\xcd\x37\x54\x03\xe5\xe2\xc0\xc4\xf0\xbb\x1a\xe6\x53\xbd\xd3\x9d\x80\x67\x15\xd3\xb3\xd9\xc0\x2f\x30\xed\x51\x68\x69\xa5\x5b\xd1\xcd\x28\x03\x7a\xed\x9a\xa0\x03\x3a\x72\x92\x8e\x26\x10\x06\x25\xd4\xdf\xe1\x2e\xd9\xbe\x0e\xd6\x76\x22\x03\x49\xa3\x32\xc7\x6a\x51\xeb\xbd\xed\xd4\xcc\x45\xc3\xd9\xe9\x3d\xad\x3a\x43\x2d\xd7\x57\x9f\xa2\xa8\xac\x38\xfb\x37\x36\x6b\xb5\xd7\xc8\x8d\x99\x41\x59\xe7\xf0\xdf\x52\x94\xcd\x42\xa4\x99\x36\xbf\x21\x5f\x3e\x9f\x9b\x20\x4c\xd6\x5c\x45\x2b\xc0\x7a\x56\x01\x76\x52\x6e\xb8\xdc\x68\x2a\x84\xc8\x0b\xee\x24\x6a\xbe\xb5\xd5\x34\xd5\x27\xbe\x1b\x96\x86\x68\x6a\xf8\xe6\x22\x16\x8f\x91\xc7\x92\x2f\xac\x4f\x47\x4c\x9c\x7f\xc7\xdd\xdd\x66\x1f\x7b\x5a\xac\x78\x0c\xda\x02\xc5\xe6\xc7\x5a\xb9\xa0\xb9\x7e\x6c\x43\x36\x11\xab\x88\xc3\x92\xbc\xb6\x9c\xd6\x2c\xd8\x54\x03\x2e\x77\x25\xa9\x08\xb5\x52\xa6\x25\xce\xeb\x40\xab\x1f\x76\xac\x6a\xa2\x26\x59\x4c\x3c\x5e\x56\xdf\xa2\x87\x02\x13\x5f\x5e\xa2\x26\xfa\x87\x17\xd8\x49\xef\xe9\x69\xd5\x3b\xb3\x28\x13\xe0\x2a\x19\x0c\x90\x4b\x12\xae\x3c\xb5\xb9\xf3\xd4\x4e\x9e\x20\x3e\xc8\x86\x83\xde\x30\x09\xfe\x27\xd8\xd2\xcf\xda\xe3\x4c\x6b\x66\x53\x67\x8d\x32\x57\xa3\xd5\xd0\x0f\x17\xab\x02\xc5\xb6\xa8\x88\x95\x44\x6b\xf2\xa4\xc6\x39\x44\x86\xc1\x73\x9b\x8a\xfc\x0f\x2f\x3a\x55\xbd\x2d\x62\xda\x6a\xf1\x22\xd6\x7e\xba\xc6\x8b\x58\x7b\x7e\x79\xaa\x32\x49\x19\x0e\x01\xe7\xcd\x80\xdc\xdd\x91\xc8\x8b\x13\x69\xb6\xce\x86\x2e\x9a\x2c\x6d\xad\xa9\x88\x4e\x2d\x8a\xa5\x71\xe9\x1b\x58\xcf\x84\xa2\x57\xd5\x05\x6b\xaf\x85\xef\xf4\xb7\xa1\xd3\x62\xcd\xcb\xa4\xd8\x20\x91\x0b\x5b\xd9\xed\x66\x5e\xd0\xa2\xa5\xb7\x48\x2d\x98\x49\xf2\xba\xba\xfd\x5e\x0f\x8c\x85\xfc\x10\x97\x3e\xec\xef\x7e\x84\xcf\xd5\x98\x96\x7e\x81\xe7\x3f\xe2\xde\x5d\xaa\x4c\x93\x9c\x65\x94\xea\x80\xab\x59\x47\xb9\x5f\x41\x42\x75\xe0\xc7\x9e\xa9\xa6\x63\x7a\x0e\x86\x1b\xae\xcc\x8f\x4f\x2c\xd0\x91\x16\x5d\x15\x71\xe2\x1e\xa6\x05\xf0\xd4\x70\x45\x66\xb7\x19\xe5\xfa\x38\xf7\x5d\x1f\x17\x2a\x5c\xc0\x7c\x30\x1e\x9a\xe3\x70\x12\x8d\x26\x29\xdf\x15\x61\x0f\xe9\x33\xb1\xab\x1c\xed\x2e\xb5\x6c\xfe\x22\xbc\x4c\x82\x2e\x0c\xb8\x64\x18\x26\x3b\x79\x9c\x82\x1d\xcb\x44\x87\x1f\xea\x23\x84\x76\xc2\xcc\x44\x39\xb8\x6c\x22\x38\xde\xea\x3b\x14\x25\xfd\x63\x57\x5c\xdf\xa3\xdd\x57\xc3\xf7\xa2\xfb\x9f\x20\x96\x5b\x2d\x43\xea\xdd\x75\xca\x07\x33\x3c\x1d\x26\x0c\x5f\x27\x13\x7c\x95\xcc\x6c\x46\x80\x6b\xf4\x02\x72\x19\x5d\x75\xbb\x61\x56\xdf\x5d\xa7\x83\xab\xe1\x3d\x2d\xf7\x4b\x84\xca\xd2\xd5\x7c\xfa\x03\x36\xf4\xdc\xea\x63\x5f\xf9\x97\x22\xa7\x5a\xe9\xc7\x3d\x2f\xda\xd2\x6d\x32\x72\xd1\x96\x6e\x5f\x26\xbd\x17\xb7\x3a\xda\x92\x69\xf2\xdc\x36\x78\x53\x26\xa3\xc1\xed\x70\xe3\x66\xc7\xc3\xd6\x4a\x4c\xf8\x1c\xa1\x38\xf3\xa3\x6b\x9d\x3b\x03\x2d\xaf\x42\x45\x06\x96\x1c\xe4\xca\xf9\xdb\xef\x3d\xb5\x13\xcb\x9f\x9f\xd8\xc4\xd5\x5a\xbe\x36\xbe\xaf\xd5\xe9\xd5\xd6\x2f\xc2\xde\xa6\x3e\x93\x9b\xfa\x3d\x91\x0f\x6a\x6b\x35\x35\x9b\x48\xd6\x8c\x88\x74\xef\x35\x13\x6f\xbb\x66\xb2\x51\x94\x9a\xe1\x93\xe4\x52\x7e\x8a\x8b\xd0\x9d\x75\xfa\x65\xbf\xe5\x36\x4e\x47\xfc\x5d\x17\xf9\x36\xab\x46\x5f\x79\xb3\x74\x87\xe5\x78\xd9\x6d\x38\x6b\x6c\xb0\x85\x0e\xab\x98\x25\x9b\x9b\x29\x9e\x27\xc0\x37\x93\xda\x9e\x7e\x77\xb7\x19\x6e\x52\xe5\x30\x47\x07\x3d\xa3\x10\x44\x78\x94\xa4\x11\x68\x96\x03\xb5\xd4\x5d\xd2\xd4\xb5\xb7\x6b\x67\x8f\x1a\x2c\xb9\xca\xd7\x28\x8f\x5c\x2f\xb4\x37\xdb\x0f\x06\xc4\x35\x09\x47\xf5\xbd\x34\xc3\x73\xec\x22\x5f\x99\x2b\x15\x92\x14\x3b\x83\x9b\xb0\x68\x44\xea\x6b\x84\x96\x2b\x96\xb8\xe6\xa8\x10\xed\x6d\x9a\x0f\x73\xfe\x38\x9b\xdd\x1f\x9f\xbb\x2d\xbd\xac\x9d\x52\x5e\x34\x44\x9d\xf0\x47\x9b\xd8\x18\x69\x79\xa0\xcf\x19\xec\xe2\x23\xc2\xa9\x41\x0c\x04\xcf\x79\x59\x1b\x5a\xd2\x10\x21\xec\x8c\x2e\xed\xd1\x80\xfd\x93\x00\xd0\x78\xee\xfd\xe8\xff\xa8\x0d\xb5\x7f\xb4\x04\x85\x78\x3b\x7d\xf3\x33\x3e\xc1\x10\x20\xa5\xff\xdc\xbd\x50\x16\xbc\x6a\x2c\x7f\xfc\xd1\x87\x66\x77\x06\xec\xef\x08\x3a\x9c\x23\xd6\x2b\x1e\x61\xe6\x05\x76\xf4\x75\xc2\xff\x0e\x2d\x9f\x58\xbb\x9d\x32\x57\x2d\x17\x64\xe9\x8d\xdf\x34\xa5\xb9\xb9\x6d\x31\x77\x8c\x3f\xcf\x53\x3e\x26\xe3\x5d\xb8\x69\x34\x97\x7f\xe6\x16\xb4\xfa\x91\x4b\x61\xa3\x71\x39\x59\x93\x37\x5a\xe1\x42\xc5\xfa\xd5\x6a\xad\x62\x6b\x9b\xb2\xa2\x7a\xaa\xc4\x1b\x5c\xde\x52\xbc\x02\x96\x17\x53\xd2\xe5\x33\x03\x43\xf0\xef\xbd\xa5\xb2\xd9\xc7\xf2\x5f\x65\x0e\x9e\x93\x6a\x10\xca\x1f\x9e\x23\xbc\x17\xf2\xe4\xe5\x82\x87\x7d\x58\x47\x04\x2c\xd5\x75\xa0\xc1\x67\x4f\xd1\x30\x96\x7f\x7f\x40\x08\xf3\xb0\x87\xcd\xee\xf8\xfc\x89\xdd\xfe\x3e\x63\x07\x78\xfe\x5d\x73\x61\x1b\x6c\x6d\x13\x2b\x96\x1e\xf6\xd7\xdc\xb0\xb6\xe0\x86\x12\xd3\xa7\x16\x8c\xe9\xc9\x33\x04\x1f\x9e\x35\x3e\x7c\xa7\x3e\x7c\xd7\xf8\xf0\x3d\x1a\xa2\xd2\x27\xde\x0d\x71\x37\xad\x9f\xe4\x62\xbe\x25\x08\x73\xf5\x08\xee\x0e\x24\xdc\x84\xb8\x84\xd5\x57\x7d\x54\xb9\xa0\xba\x20\xca\x0e\x12\x95\x36\x54\xfd\x05\x01\x9e\x6e\x8f\x24\x9e\x5c\x56\x13\xc5\x54\xe8\x1e\x25\x89\xc1\xb3\x95\xbf\x16\xa5\x92\xbb\x7c\x67\xc0\x4f\x95\x38\x23\xda\xe4\x2d\x57\x99\x03\x36\xf6\x43\x1b\xb4\x4f\x5f\x4c\xef\x11\x1b\xbc\x4f\xe7\x0b\xc8\xb1\x4d\x9e\x50\x96\x58\x84\xc8\xa4\x34\xb7\xd7\xb5\xe4\xff\xa7\xee\x5d\xbb\xdb\xb6\x95\x46\xe1\xef\xfa\x15\xb2\x56\x1e\x2d\x62\x1b\x56\xa5\x24\x4d\x53\x39\x88\xb7\xe3\x38\xa9\x53\x5f\xb2\x6d\xa7\xdd\xad\xaa\xe3\xd2\x12\x64\xb3\xa1\x48\x6d\x10\xb2\xe3\xca\xfc\xef\xef\xc2\xe0\x0e\x92\xb2\xd3\xee\xe7\xac\xf7\x7c\x68\x6a\x11\xb7\xc1\x00\x18\xcc\x0c\xe6\x22\x9f\x69\xe5\x3b\x58\x25\xd2\x52\x52\xd5\xc1\x3a\x81\x11\xa4\x9e\x4d\xc5\x3c\x4e\xb2\xab\x76\xc1\xa7\x4e\x02\x18\x45\x00\x4e\x2a\x04\x40\x1f\xff\x7c\x4a\xcd\x09\xd7\xde\x5e\x2a\x75\xf5\xcf\x2c\xe1\xf4\x24\x4b\xef\xf6\xac\xd3\x99\xa8\x27\x80\x55\x55\x7e\xa0\xf1\xe2\x60\xbe\x48\x65\x41\x68\xb8\x68\x52\x87\x82\x82\x86\xdc\x52\x9d\x0c\x76\x5d\xb6\x82\x13\xaa\x5e\xa9\xce\x68\xed\x03\x71\x08\xa5\x4c\x16\xf1\x28\xf8\x60\xb2\x10\x36\xf0\xab\xe1\x5d\x9b\x7c\xe1\x8c\xb6\x9a\x72\x28\xd4\x64\x57\xf5\x82\xdc\x18\xd2\xab\x14\x4d\x32\x39\xa1\x09\xb3\xad\xcf\x48\x6d\xd2\x0f\xaf\x21\xb2\xba\x87\x48\x9c\x1b\x5e\x8d\x11\xe7\x09\xa5\xdc\x0b\x6a\xab\x44\xfa\xac\x34\x09\x20\xcf\xeb\xb1\x2f\x79\x20\x0d\xb5\x67\xfd\xd1\xf2\xd5\x10\x98\x11\xa3\x77\xd0\x19\x21\x71\x46\x98\x4d\x23\xa6\x84\x1d\x65\x32\x0e\x3f\x80\x63\x90\xcf\x55\x64\x6b\x40\x08\xc9\x76\x54\x66\x55\x53\x7b\x98\x6d\x0e\xaa\xe6\x28\xab\x8a\xd1\x05\xd6\x22\x2d\x2b\x5d\xbb\x14\xab\xda\xf0\x66\xe0\xc5\xf0\x36\x86\x28\x70\x4e\x71\x8e\x63\x5c\xe0\x94\x4c\x54\xfa\x2a\x89\x03\xc1\xca\xfd\x10\x51\x9c\xa2\xd6\xbb\x68\x82\x23\x95\x76\x50\x16\x62\x65\x2a\x1e\x4e\x0a\xd7\x44\x4a\x8d\x62\x22\xe8\xed\x00\x17\x44\xd3\xcd\xef\x5d\x86\xe0\xd9\xa0\xc2\x61\xeb\x9b\x22\x46\xb8\x88\x34\xd1\x8e\x15\xfd\x96\xec\xb6\xe3\x85\xa4\xae\x14\xc5\x79\x28\xfe\xe2\x7b\xc5\x58\x18\x1e\xe7\x2a\xca\x03\x23\x2d\x2c\xed\x5b\xeb\x7c\x94\xee\xa2\x2b\x1a\x25\x35\xdd\xbf\x78\x61\xe3\xd1\x62\x69\x34\x1b\x06\x6f\xed\xb8\xb7\x4c\x5d\xf0\x56\xa4\xa3\xf1\x4d\x42\xbb\x96\x49\x68\x2a\x0d\x74\x33\x95\xba\xc8\xa6\x48\x75\xd3\xfb\xfb\xc8\xdf\xad\x53\x5c\x63\x28\x14\xf6\x8d\x10\x9e\x8a\x93\x1f\x24\x4b\x39\x97\x17\xcc\x11\x25\x7d\x7b\x47\x7c\xa4\xd1\x2a\x99\x0e\xb5\x29\xb4\xe4\xbf\x21\x30\xb8\xda\x41\xf0\x24\x37\x49\x13\x9a\xf1\xad\xce\xe6\x11\xdd\xdc\xd4\x67\x32\x99\x0e\x73\xdd\x4c\x0a\x8f\x43\x65\x49\xd6\x8e\x09\xad\x18\x96\x80\xd7\xb7\x71\xed\x48\xee\xef\xa3\x84\x38\x69\x82\x32\x24\x93\x57\xee\x4a\x80\x94\xf0\x32\x4c\xec\x15\x17\x97\xa8\xd4\x8f\x6d\xbb\xf5\x67\x1c\xba\x9a\x1e\x7a\x27\x9d\xd1\x62\x99\x72\xd2\xc9\x3f\x2b\xda\xa9\x08\x01\xdc\x9f\xba\x95\x20\x3e\xce\x17\x95\x8d\xe4\xd0\xd6\x0c\x48\x44\xcb\x39\xc6\x85\xa5\x16\x8a\x8a\xcb\x63\x4c\xec\x81\x56\x80\xc8\x89\x10\x47\x57\x2a\x9d\x4c\xa6\x84\xf6\x92\x69\x88\xe7\xd2\x66\x43\x0a\x74\xe0\xe2\xe3\x8e\xf3\xf7\xd0\x9d\xd7\x87\x28\xc4\x7c\x05\x35\xd8\xe3\x30\x4a\x84\x4a\x87\x02\x7b\x63\x29\xd4\xec\xb8\x3f\xfe\xd6\x68\x7d\x39\xda\xcf\x2e\x82\x83\x31\x3d\xe4\xef\x54\x3f\x0d\xeb\x96\x88\xde\xb6\xcf\xe9\x5f\x99\x79\x25\x35\x9c\x49\xeb\x56\x9b\x12\x0e\x92\xc0\x05\xe9\xdd\xfe\x7e\x6a\xdb\xeb\xbb\x29\x8b\x39\x15\x77\x7e\x5d\x7e\x76\x31\xbb\x49\x44\x21\x29\x96\xaa\xaa\xae\xf4\x30\xaf\x63\x5b\xa2\x62\xa2\x18\x33\xa4\x12\x59\xc5\x11\x75\x3d\xe2\x9d\x6e\xa7\x60\xbd\x27\x3a\x76\x69\x8a\xd7\xad\xec\xca\x2b\x8f\xa8\xe2\x34\x64\x4b\x09\xcb\x2e\xe3\xc9\x2c\x9e\xf0\x82\xcc\x31\xed\xc5\xe6\x57\xcd\x84\xe6\x91\x69\x05\x3d\x9c\xca\x64\xc2\x27\x0b\x95\xbd\x49\xfd\x56\x93\x54\x1f\x35\x47\x64\xcb\x9d\x2f\x2e\x2f\x65\x2b\x98\x4f\xaa\x56\x95\x2f\xd4\xe6\x45\x92\x47\x56\x4b\x37\x63\x94\xfe\x49\xe1\xe5\x1d\x0c\xd2\xb8\x83\xbc\x88\x21\x08\xa4\xaf\x79\x01\x86\xb4\x69\x52\xdd\xf3\x3f\xac\x72\x41\x32\xc3\x46\x28\xaf\xb2\x29\xfd\x72\xa4\x58\xbd\xa3\x78\x11\x39\x75\xe5\x5b\xaf\x74\xc7\x18\x81\x79\x32\x2a\xe5\x4b\x9c\x9f\x7d\x56\xf7\x01\xcc\x8a\x34\x29\xac\x38\xd8\xb0\x6e\x37\x52\xa9\x50\x54\xe7\xca\x14\x60\x6b\x80\x39\xe4\x7e\x84\x94\xd4\x98\x95\xb1\xb2\x5c\x5b\xa9\x44\x00\x34\x88\x94\x94\x38\x4f\x53\x40\xa5\x65\x7d\xa3\x1b\xaa\x7b\xab\x1a\xb1\xb1\x33\x76\x04\x4f\x55\xde\x4b\xb5\x7e\x8c\x2d\xbd\x17\x52\x33\xcd\x8a\x21\x5b\x7d\x63\x9e\x7f\xcc\xf3\x90\x6e\xc9\xe9\xca\x4b\xb0\xb2\xe4\xb9\x5a\xb1\xb8\xf6\x0e\x51\x4b\x46\x05\x37\xfb\x93\x46\x7c\xb5\xef\x11\x05\x4b\x4e\x6d\xf2\xb7\xb2\xf8\x81\x4a\x4e\x63\x75\x06\x55\x54\x0d\x83\xb2\x06\xdb\xb0\x76\x02\xe6\x60\x2d\x36\xca\xc6\x41\x57\x89\x51\xe5\x82\xee\xe2\x2c\xc0\x9a\x2a\x73\xee\x54\x1f\x5c\x90\x06\x6a\x0f\x46\xdc\x0a\x0e\x90\xc4\x8f\xce\xcc\x1c\xee\xec\xc6\x3c\xcc\x8c\x26\xb3\x84\x4e\x77\x19\x2b\xc8\x6a\x94\x8c\x05\x03\xab\xb9\xfc\x23\xca\xe3\x5a\x4c\x0a\xba\xf6\x75\xa8\x76\xd0\xec\x8c\x28\x0e\xc2\x88\x8e\x83\xdc\x3e\x2b\x27\x6f\xb0\x33\x4a\xcb\x5d\x13\xed\x63\x6d\x35\xf2\xd2\xac\x25\x73\xcd\x5a\xd8\x28\x09\xd7\x23\x1b\x25\x63\xd4\x12\x83\x12\xf6\x57\x56\xc6\x81\x07\x19\xe9\xa5\xa8\xdd\x94\x20\x18\x2a\x86\x26\x9f\xcd\x0a\xca\x49\x1f\x1e\xcb\x05\xff\x68\xf7\xfe\x60\x33\x8a\xbe\x7b\xf1\xb2\x6b\xda\x88\x31\x2e\xef\xe2\xe9\x94\x45\x4e\x5b\x84\x5e\xbf\x7e\x29\x1f\xdb\x8d\x09\x8b\xd3\x49\xff\xe9\xf3\x07\x7b\xd8\x19\x0c\x25\x00\x82\x55\xb5\x6d\x9f\x7e\xfb\xed\x83\x4d\xa1\x59\xbe\x18\x04\x47\xb6\xb9\xc5\xe6\x40\xb7\x79\xfa\xf8\x36\x4f\x75\x9b\x67\x8f\x6f\xf3\x0c\xf9\x69\x50\xdd\x88\xea\xf7\xf4\xd5\xab\xa7\x5e\xe6\x53\xa7\x94\xde\xf3\x57\xaf\x9e\xf5\xcb\xf0\x26\x2b\xd4\xa2\x4e\xc2\x45\x05\x6e\x12\xcc\x92\x86\x1c\x73\x10\x6b\x99\x61\x2b\x8d\x16\xe0\x20\xe3\xcf\x9e\xea\x68\x3c\xda\xa2\x15\x5c\x18\xc4\xdc\x00\xfc\xe0\xc0\x40\xb1\x3a\x2f\x6a\x82\xb4\x3a\x7d\x51\x41\x6c\x9c\x7c\xe6\xfa\x3b\x44\xb6\x07\x4c\x51\x59\x4c\xf2\x05\xad\xd4\x5a\x04\xb5\xca\xea\x65\x3c\x69\x39\x77\x75\x55\x8b\xa0\x59\x75\x6b\xff\x55\x90\xd1\xd8\x55\x5f\xd8\xdf\x7a\xab\x6b\xbe\x5a\x88\xfa\xfa\xd7\x24\x5e\xc4\x93\x84\xdf\x91\x41\xff\xf9\xcb\x6f\xbf\x7b\x81\x1b\x71\xa7\x2a\x78\x18\x1c\x8d\x95\x51\x97\x76\x1f\x49\xfe\xa4\x7b\xd7\x14\x32\xa9\x5b\x3c\xb9\x9b\x63\x73\x4c\x68\xe9\x54\xd3\x57\xa5\x07\x8c\x0e\xc8\xa1\x0c\x41\xa4\x72\xcc\x9d\x0b\x6a\x5e\x62\x6a\xde\x0d\x3d\x78\x61\xbf\xca\xbb\x5a\xdb\xf5\x85\x53\x2f\xbd\xaf\x5b\x5b\x8f\x58\x7d\x5b\xc1\x28\x75\x54\x19\xe1\xa5\x36\xef\x5b\x59\x84\x29\xe7\x6a\x3b\x11\x13\x51\xa5\x4d\x89\xb3\x3a\xde\x1d\x2d\x3f\x6d\x92\x67\x98\x96\x9e\xa9\x9e\x6b\x69\x0d\x1b\x76\x73\x30\x26\x69\xc4\x71\x1f\x95\x3e\x45\x73\x46\x7c\xcc\x9e\x97\x23\x9a\x55\x75\x40\xa7\x38\x8d\xfa\xf8\x19\xd2\x50\xf3\x47\x40\xcd\xff\x5b\xa7\x44\x30\x94\xc1\xcd\x65\x27\xde\x0a\x11\xb1\x8c\x38\x1e\x80\xb9\xe6\x22\x9e\x70\x1b\x1e\xa4\x2d\xf6\xfe\x4a\x52\x0b\x4d\x35\x56\x72\xcf\x0c\x59\x89\xc5\xfa\x39\x29\xb6\xc1\x30\x73\x3b\xd9\x24\xcf\x4c\x08\x80\x51\x32\xc6\xb1\xf8\xdf\xe6\x60\x8c\x0b\x12\x77\xcf\x92\x3f\x69\xef\xec\xe0\xd7\xfd\x8b\xa3\xdd\xb3\x1f\x71\x4a\xfa\xdd\x58\x5c\xa0\x4f\x21\xa0\x79\x32\x8b\x06\x44\xfc\x21\x5b\x90\x65\x14\xe3\xa7\x08\xd3\x4d\x52\x18\x13\x62\xf0\xe3\xb6\x10\x4e\x48\xbe\x3d\x79\x45\x92\xcd\x62\x7b\x02\x4e\x1a\x93\x2d\x3a\x26\xd9\x68\x32\x6e\x89\xd1\x49\xbe\x45\xc1\x4f\x1d\x1c\x0f\xd2\x6e\x37\xd2\x5f\x51\xe9\x1e\x78\xe7\xef\x2d\x5a\x86\xe6\xa2\x35\x67\xd6\x5d\x52\x7d\x5e\x5b\xce\x39\x1e\x93\xa7\x83\xe7\xdf\x3d\x7f\xf9\xec\xc5\xf3\xef\x70\x85\xfe\xc8\x1d\x32\xe2\x58\x30\x49\x8e\xd1\xe9\x7f\x65\x20\x45\xd3\xfc\x31\x84\x2c\xe5\x4c\xc9\x89\x01\xb3\x72\x01\x1b\x52\xb5\x9c\x9c\xf4\xb7\xb9\xe5\xaf\xb9\x62\x16\x47\x0c\x67\x63\x42\x47\x5c\x6d\x22\x7b\xac\x19\xce\x22\xc1\x55\xf8\x52\x9b\x1d\x45\x41\xa5\x5d\x89\x70\x4d\xbc\x6f\x15\x37\x45\x49\xaa\x49\x39\x26\x82\xa5\x0f\x07\xca\x30\x15\x6c\x50\x19\xd0\xef\x72\x12\x2f\xf8\x52\x7a\xde\xb8\xd8\x32\x8a\x9a\x0a\x02\xb0\x2d\xb0\xf0\x2a\xb9\x2c\x20\xa7\x48\x99\xf4\x06\x59\xfc\x9c\xd3\xab\x4e\x87\x73\x0a\xd5\x6d\xcb\xac\x9e\x78\xda\xa0\xdc\xb6\x6a\x7a\xea\xdc\x29\xea\xa5\xe1\x42\x66\x8e\x07\xda\x5d\x58\xa8\xc0\x9c\x90\x27\x93\xb6\x12\xcf\xff\xa6\x38\x2e\x07\x09\x09\x9d\x1a\x5b\x1f\x12\xea\x41\x14\x64\x57\xd4\xee\x4e\xc6\xdb\x82\x4a\x11\xd4\x9a\xc2\x4a\x89\x54\xd4\x73\xbc\xaf\x82\x2b\x89\xa1\x6d\xfe\x8a\xc1\x76\xcb\xc4\xde\x86\x9d\x66\xdc\x90\x9c\x9c\x88\x1a\xd0\xad\x81\x97\x07\xd1\x65\x91\x46\x7c\x73\x30\x7e\xfd\xfa\xa9\x9b\x98\xd0\x9a\x22\x02\xf1\x52\x9a\x06\xb3\x75\xb4\x92\xc1\x49\x1e\xe5\x20\xae\xa7\x25\x3f\x87\x09\x71\x35\x06\xd3\x50\xb3\x03\x5a\x37\x9a\x4d\xe8\x3a\xdd\x8e\xf3\x1b\xf2\xcd\xc4\x3c\x67\xa1\xc2\x47\xe0\xf6\xef\xaa\x7c\x92\x42\x45\x3e\x98\xd6\x29\x48\xe8\x06\x21\x59\x89\x69\xef\x80\x53\x06\x2f\x36\x07\x9c\xce\x4f\xf5\x04\x64\xd2\x6c\x18\xc5\xfd\x26\xc3\xe4\x9e\xe6\x39\x77\xbf\x9a\xf7\xd3\xb0\x20\xfc\xfd\xe9\xe3\xdb\xdd\xf3\xfd\x8b\xd3\xfd\x77\xfb\xa7\xfb\xc7\x7b\xfb\x6f\x2f\x7e\xda\x3d\xfc\xb4\x4f\x14\x14\x97\x29\xf5\xbb\xcd\x0a\xbf\x3b\xfd\xf7\x5e\x3c\xb9\x86\x1a\xe2\xff\x53\x5b\xc5\x24\xd7\x0e\x0b\x1a\x99\xc4\x34\x16\x43\xdc\x24\x45\x92\x67\x8e\x7a\x56\x7c\x06\xc9\x49\x87\x29\x11\x42\x94\x64\xaa\x79\x7c\x05\x36\x8f\xb6\x1d\x78\x65\xa9\xfa\x15\x27\x48\xe3\x39\x09\x9a\x43\xb5\xe0\xf4\x3c\x96\x41\x6c\xd0\xfd\x7d\x94\x91\x60\x48\xa3\x90\x5f\x72\xa3\xd0\xf1\xe0\xd4\x5d\x2d\xa9\xcc\x59\x8f\x20\xcb\x65\x56\x26\x99\xee\xbf\x71\x7a\x65\xd9\xaa\xe0\xb1\xe6\x1d\xce\x69\x6e\xd1\x50\x03\x89\xfd\x0c\x0f\x7b\x42\x24\xa5\x53\xb2\x31\xd0\x8c\xf0\x15\xa1\xe2\x5f\x47\x3d\x2d\x97\xb2\x5c\x50\xfa\x39\xe0\xc1\x9c\x1e\x76\xfc\xd1\x87\x41\x79\x84\x4a\x46\x9d\xa9\x82\xd3\x65\xd0\x05\xaa\xef\x5a\xde\xaf\x2b\x03\x4a\x65\x29\x0d\x77\x03\x80\xb7\xa4\x23\x46\xb0\x70\x09\xe6\xc8\x4f\x0a\x6b\x41\xcd\x55\x07\x31\xd1\xf6\xed\xbe\x56\xe9\x81\x85\x4c\x10\x8e\x21\xe4\x51\x36\x8c\x82\x25\x88\x71\x8c\x4a\x77\x26\xab\x60\x26\xe6\x26\x0f\x1a\xfe\x25\x40\x60\xfa\xa8\x66\x6d\xfb\x98\x97\x65\xcb\xb8\xd2\xea\x97\x09\x14\x75\x8e\x4f\xce\x2f\x8e\x4e\xde\x1e\xbc\x3b\xd8\x7f\xdb\xd1\x0f\xf9\x70\x3b\x35\x6e\x30\x95\x44\xdd\x6e\x17\xd6\xdb\x3b\x39\x3e\x3b\xdf\x3d\x3e\xbf\x38\xdf\x7d\x6f\x0e\x9e\xbf\x98\x19\x65\x81\x8f\x73\x52\x96\x3a\xa2\x72\xab\x42\x38\xfe\xaf\x0c\xdf\x92\x1c\xb0\x8f\x91\x06\x7a\x07\xe1\x76\x9b\x68\xe1\x7a\xdd\x21\xcd\x6e\xcc\x03\xf3\x75\x92\x4e\x19\x55\xab\x10\x78\xa5\x56\xa6\xa2\x00\x76\x98\x4b\xdd\x7e\x44\xc7\x15\xbd\xae\xa0\x57\xd5\x6a\x0e\x4f\x82\x8d\xc7\xc3\x0d\x04\xeb\x2f\x43\x62\x1f\xb7\x1a\xef\x05\x5f\xf7\x17\x57\x99\x24\xa9\xfe\xe3\x66\xf7\xc9\x44\xfb\xcd\x8b\x51\xb6\xea\x6f\xa6\x07\x06\x52\x39\x64\x60\xb0\x4c\x87\xff\x32\x06\x5f\x31\xbb\x2a\xac\xf5\x07\x10\xe3\x1a\xb2\xa7\x4a\xce\xe3\x2b\xf9\x51\x25\x5d\x86\x1d\x78\x1e\x5f\x5d\x49\xe7\x13\xe5\x77\x6f\x68\x7a\x4b\x5f\x24\x39\xb6\x1d\x40\xae\x13\x71\x75\xd8\x67\xf8\xd8\x64\x71\xd6\x1d\xa2\x28\x46\x28\x27\x0d\xab\x5c\x0f\x6d\xf5\x70\xe7\x2a\x76\xb4\x0c\xdc\xc5\x8d\x22\x54\x4c\x03\x6a\xcb\xd7\xd6\x4f\x8b\x69\x0c\xbc\x2d\x34\x42\x2d\x67\x5c\x59\x2b\x9f\x5f\x26\x19\x45\xd1\x88\x03\x95\x2f\xc6\x08\x3b\x90\x4b\xc3\x8c\x85\x21\x9b\x05\x8e\xd1\xe3\x21\x44\xd2\x34\x61\x69\x2f\x33\x07\xd7\xd0\x80\xb3\x78\xf2\x19\x45\x60\x96\xe9\x56\x70\x6e\xd1\x59\x16\x99\xc5\x44\x25\xde\x18\xa0\x9a\xbb\x3c\x80\xa6\x39\xf8\x41\xe3\x15\x1e\xdc\xd8\xe1\xc4\x3d\x04\x87\xfb\xe6\xd1\x28\x81\x4c\xd6\xe1\x34\x9b\xb4\xba\x72\x6f\x2b\x81\x87\x89\x23\x68\x2f\x5f\x25\x07\x29\xf6\xee\x47\x7a\x47\x32\x73\x98\x49\xf2\x20\x71\xa9\x30\x00\x2d\x27\xfe\xdf\x23\xb6\x11\x5c\x8d\xe2\x6e\x6d\xda\x4c\x31\xce\xc7\x75\xeb\xe4\x5d\xd4\x99\xc3\x73\x25\x38\x98\xe3\x30\xc7\x1a\x90\x61\x8c\x9d\x99\x42\x8a\x36\xe7\x8c\x11\x42\xb2\xfb\xfb\x8d\xba\x85\xcd\x90\x36\x65\xce\xcd\xfd\x69\xdd\x32\xdf\x02\x46\x52\x55\x67\x59\xdd\x90\xca\xe4\x85\x66\x37\x3d\x30\x5a\xe2\xd7\x51\x8a\xd5\x1e\xdc\x0e\x37\x48\x8c\x97\x48\x6a\x2d\x12\xcd\xc3\x06\x77\x78\xf2\x48\x36\xd0\x64\x90\xfa\xdf\x26\xf8\xa3\x7c\xac\xd5\xcc\x21\xf2\xb9\x87\x71\x1b\xa9\x80\x1b\x3c\x1a\xd4\x14\x0a\x35\x19\x66\x4a\xd7\x5b\x95\x3a\xb4\x8a\x3b\xad\xee\x70\x9c\xaf\xdf\xe3\x09\xa7\x73\xc5\xbf\xda\x1d\x9e\xe3\x60\xe3\xd5\x6e\xd2\xe6\x53\x50\x7f\x11\xe9\x91\x4a\xb9\xac\x1a\x37\xe6\xbb\xa1\x2a\x54\xd1\x12\x15\x4b\x82\xf1\x3b\x4b\x23\x1c\x96\xcb\x40\x2e\x1f\xaf\xfe\x97\xef\xee\x06\x21\x30\x55\x9e\x67\xab\x12\x4f\x88\x7a\x32\xe6\x78\xaa\xff\x3c\x83\xa7\x53\x71\x51\x5f\x13\x4a\x5e\xeb\xa8\x2b\x3b\xcb\x21\x6d\x39\xa2\xbb\x9b\x93\x57\x3b\xbd\xfe\xf3\x33\xb5\xce\xae\x37\xd1\x44\x39\x7f\xfe\x13\x1e\x9d\x9d\x82\xa9\x29\x98\xd2\x8c\x27\xdc\x6d\x74\x1d\x7a\x7d\xd6\x67\xf4\xbd\x89\x18\x79\xcd\x21\x17\xad\xca\x38\xa8\x6d\x7c\x16\xab\x2b\xca\xdb\xb7\x34\xfe\x7c\x14\x2f\xec\x82\x5a\x4c\x82\xf6\x43\x95\x0b\xac\xba\xbf\x01\xa1\x3f\xcb\xbf\xd5\xa2\xe9\x22\x78\x17\x32\xee\xb2\xeb\xfa\x76\x2b\x99\x01\xdc\x8f\xfa\x01\x5f\x8f\xe0\x96\x95\xfa\x7d\x7d\xa5\x88\x92\x54\x12\x20\x48\xb7\x57\xe3\xec\xac\xec\xc0\x15\x90\xe6\x75\x7e\xa8\xae\x03\xdb\xb1\x29\xf2\xd9\xdc\xbf\x34\x8a\xec\xa1\x66\x0c\x59\x20\x43\xfa\xcc\x61\x9a\x0b\xbb\x69\x6e\x7c\xf5\xd6\x42\x3b\x5c\x78\x71\x81\x29\xfc\xc4\xb9\x32\x4f\x48\xd0\xfd\x7d\xdf\xc9\x9f\x2c\x3e\xe1\x7c\x73\x80\xb0\x0c\x22\x9b\x0c\xeb\xd2\x0a\xcf\xb5\x69\x43\x60\xd3\x30\x1a\xe3\xb9\x35\x60\x50\xf2\x0e\x73\xb4\x53\xa6\x7e\xd6\xed\x46\x19\x51\xba\x17\xc1\x4d\x2c\x33\x3e\xe4\x25\x16\x95\x49\x06\x01\x03\x04\xa1\x32\xc7\xcc\xd3\x72\xd4\xda\xc0\x1a\x07\x04\x43\xd6\x34\x41\xfb\x4c\xef\x08\xb7\xa4\x8c\x19\x62\xc1\x62\x9e\x33\x87\x2f\x35\xa2\x77\x40\xad\x94\x9c\x5c\xec\xcf\x17\xfc\x2e\x42\xa5\xf9\x4b\xaf\xb1\xdf\xa1\xa4\x22\xd2\x6f\x4b\x7d\x8b\x10\x72\xda\x67\xf4\x0b\x37\x41\xe2\xbd\xb6\x3d\x59\x14\x24\x52\xa7\x7a\x97\x7b\x30\x23\x4c\xcb\x70\x14\xff\x6a\x19\x52\xfc\x59\x5c\x26\x98\x66\x37\xce\x13\x84\x11\x6d\x71\x4e\x66\x62\x3b\xe8\xcb\x16\xee\x6a\x3f\x6a\x92\x0d\x71\x0d\xf6\xf1\xb0\x28\x2d\x69\x4b\x98\xf5\x78\x6e\x46\x4e\x42\x98\xe3\x1d\xd9\x80\xbb\x16\xa0\x60\x77\x0f\xb0\x83\xf7\xec\x55\x14\x8b\x35\x06\x82\x7b\x4a\x67\xef\xb4\x28\xe3\x4f\xc2\x03\xdf\xd5\xca\xa6\x32\x08\x6a\x07\x67\xf6\x9d\xfe\xaa\x41\x7b\xec\x09\xad\x9f\xe9\xdd\x3b\xb1\x4e\x95\x85\x74\xe4\xa3\xf5\xcb\x05\x35\xaa\x6b\xb5\x21\xd7\x8a\xca\x2d\x67\x87\xd2\x6e\xfb\x90\xb0\x70\x9e\xcb\x50\xf7\xca\x93\xa6\x09\x60\xbd\xd4\x01\xcc\x8a\x0f\xcd\x0b\xd2\xc7\xae\x49\x90\x24\x20\xca\xcd\x9e\xa8\x28\xae\x54\xcc\xa0\x53\x0e\xeb\xca\x66\x09\x2b\xb8\x8e\x06\x48\x47\xba\xdb\x71\x59\xc1\x8a\xea\xc6\x3c\xaa\xca\x7e\x7a\xa2\x1b\x0f\x37\x5a\x89\xa2\x2a\x80\xef\x81\x1c\x05\xe2\x55\x88\xfa\xa8\x0e\x12\x30\x39\xa3\x45\xd1\x29\x31\xd5\xfc\x8e\x89\x28\xa3\xe1\x7a\x1d\x1c\x14\xed\x99\x89\x1c\xf4\xb7\x82\xd3\x34\xda\xdc\xb4\xd3\x82\xf4\x99\x80\x44\xcd\x5d\xe9\x77\x0a\x38\x23\x3a\x1a\xc1\x22\x2f\x90\x46\x0a\x16\x8b\x35\xd4\x9f\xcb\xaa\x51\x22\x93\xea\xed\x47\x2a\xae\x1d\x45\x77\x9d\x36\x1b\xd7\x18\x3b\x3a\xf5\xbc\x5f\x69\x7e\xbb\x95\xd2\x1b\x5a\x31\x7a\xd4\x79\xf7\x71\xfc\xf7\x75\xe1\x93\x94\xc6\x8c\x5c\x8a\xbf\xb4\x8b\xe3\xdd\xbb\x34\xbe\x2a\xde\xb1\x7c\x4e\x18\xc7\xb4\x77\x1d\x17\x7b\xa6\x8c\x24\xe2\x13\xa3\x05\xe5\x6f\xe9\xe5\xf2\xea\x8a\xb2\xbd\x38\x4d\x2f\xe3\xc9\x67\xab\x4c\x47\xab\x8f\x9c\x1c\xf1\x12\xd3\xde\xda\x7a\x14\x2a\x52\x51\x4f\x6c\x97\x3b\x2f\xf0\x8d\x72\xd2\x73\x68\x41\x21\x03\xe8\x94\xa0\xc2\xdf\x5b\x32\x96\x38\x21\xa1\xac\x0b\x05\x89\x39\xd4\xf8\xf9\x3a\xe1\xb4\x58\xc4\x13\x5a\xa7\xe6\xff\xa5\xc7\x69\xc1\x95\x65\x67\x96\xb3\x39\xa8\xf1\x34\xd2\xc8\x42\x9c\xe3\xdd\x9c\xab\xc7\x8d\x20\x24\x8f\xe0\xfb\x32\xb2\x32\x8e\xaf\x2b\xa0\x5e\xf4\xb6\xfd\x86\x82\x80\x84\x4d\x9c\x6e\xf1\xf1\x17\x1a\x31\x64\xfc\x79\x92\x9a\x07\x13\x6d\x5a\x0a\xe1\x38\x30\x58\x84\xd5\x0d\x2c\x86\x65\x6b\x06\xe6\x76\x14\x19\xd7\xa8\x3a\x92\x13\xe5\xd1\x66\x85\xf2\x23\x3f\x56\xa1\xcf\x24\x54\x49\x76\xce\xe2\xac\x90\xee\xbc\xa4\x12\x59\x86\x8e\xde\xd1\x31\x12\xd4\x12\xce\x35\xed\x5d\xd2\xab\x24\x13\x42\x0d\xbb\x5b\xf1\x08\x95\xb3\x24\x8b\xd3\xf4\x6e\x45\xb5\x65\x3e\x2a\xa1\xdf\x2b\xca\x55\x20\xaf\x9f\x62\x46\xea\x78\x11\xee\x79\x39\x83\x4b\x08\x15\xc7\x15\xd6\x3b\x4e\x7b\x31\x8f\xfa\xde\x63\xde\x5b\x99\x77\xb6\x84\xbd\x9a\x4d\x29\xdb\xcd\x79\x25\x57\x2e\xc9\xa8\xb6\xfb\x3b\xec\xcd\x72\x76\x20\xb5\xb9\xa7\xd0\x00\xb2\x5c\xdd\x60\x26\x2e\x50\xd1\xe3\x1f\x1c\xc7\x24\x65\x5a\xe5\x1b\x51\xbc\x2a\x68\x3a\x1b\x66\xd8\x05\x6d\x98\x63\xce\x28\x55\x76\xff\xe0\x77\x2c\xdf\x47\x4b\x0f\xbc\x6b\x16\xc5\x3e\x70\x66\x1f\x57\xa0\xc4\x89\x58\x76\x0d\x84\x8a\x6c\x8f\x0b\x01\x0b\xd0\x6c\x01\x89\x3b\x26\x37\xe1\x93\x02\xc8\x4a\x84\x53\x92\xf2\xa8\xe8\x29\x92\x66\x5c\x99\xc4\x8e\x5d\xcd\xe3\x2c\xbe\xa2\x6c\xb8\x84\x50\xcc\x74\x38\x29\x49\x0a\x21\x16\xf7\x79\xc4\x78\xb4\x14\xcb\xb4\xe7\xb8\x41\x47\x13\x84\xf0\xb2\x26\xd6\x97\x4a\x6b\x9e\x80\xa3\xbb\x4d\x6c\x5e\xb4\x21\x15\x92\x82\xa9\x2d\x8d\xd8\x8b\x76\x5c\xb4\xe3\x36\xcb\x73\x6e\x6b\xf6\x3a\xa8\x15\x13\x18\x70\x37\xe7\xd2\x55\x5e\x99\xab\x4f\x70\x15\x7a\x83\xd9\x05\x8b\x0a\x1c\xe3\x14\x27\x3e\x6e\x8f\xe2\x24\xab\x43\xab\x8b\xd1\xbc\x6e\x6d\xb9\x8f\xc1\xc4\x5b\x5b\x66\xfd\x9f\xc2\xb5\xcd\x9d\xf1\x95\x63\x73\x65\x6d\x0d\x0d\x17\xab\x5b\x78\xb0\xa4\x78\x49\xa6\x0d\xab\x6b\x46\x4d\x7c\xd8\x8a\x52\x2c\xe2\x44\xac\xef\xb2\xba\xbe\xb9\xb3\xbe\x53\xb5\xbe\xd7\x25\x99\x38\xeb\x3b\xad\xac\xef\x35\x42\x78\xfa\xbf\xb5\xbe\x32\x88\x05\x0c\xfa\x21\xf1\xd7\xf8\x1a\x57\x67\x80\xf0\x42\xaa\x1a\xa4\x3b\x9b\x8e\x94\x34\x33\xfe\x6a\x19\xaa\x61\x6c\x17\x4a\x0b\x35\x27\x8b\x51\x7f\x5c\xc9\xc7\xff\x7b\x90\x8f\xff\xc9\x6a\xae\xd3\xfa\x95\xf0\xa3\x58\xc4\x99\x4c\xe7\x57\xf6\x7a\xe6\x03\xcd\xa6\x65\x7b\x38\x6c\x9f\x9f\xbc\x3d\x69\x47\xfc\x9a\xd1\x78\xda\xbe\xa4\x9c\x53\x86\x7e\x47\x65\x4a\xb4\x51\xc4\x02\xbb\xbe\x73\x33\xd7\xf5\xac\x74\xf6\xec\x12\xa7\x78\x82\x63\x7f\xcf\x34\xec\xd9\x90\x0e\x88\x7d\x62\x77\x2d\x57\xfb\x36\x3c\xf9\xde\xbe\xcd\xcc\x0e\x5a\x4b\x93\xce\xee\xb2\x09\x99\x31\x1b\x60\x62\x97\x73\x96\x5c\x2e\x39\x25\x47\x14\x18\x87\x84\x66\x5c\x3b\x38\xd5\xea\x17\xea\x88\xaa\xb9\xbf\x8d\xa1\xae\x68\xf6\x4e\x70\x90\xc7\xf9\x94\x92\x39\x03\x08\xe4\x7d\x98\xe4\xd9\xda\x01\xae\x58\xf3\x08\x53\x5a\x70\x96\xdf\x91\xcf\xd0\xdf\x55\x52\x70\xca\xde\x52\xcd\x84\x93\x33\x4c\x21\x7c\x56\xa5\x20\xb8\xe8\x37\x06\x68\xd5\x57\x42\xee\x97\x88\x22\x9c\xc8\xd0\x0d\x6c\xa7\x43\xc5\x71\xb2\x2d\x8b\xce\xb0\x33\x75\x7e\xb5\xb2\x51\x32\x26\xfb\x60\xaa\x8c\x39\x68\xd8\x31\xed\xc5\x45\x91\x4f\x92\x98\xd3\xb7\x12\x3e\xb1\x19\xf6\x84\x6c\x44\x4e\x00\x2d\xea\x73\x92\x5d\x91\x3f\xdc\x0f\x81\xad\x82\xd4\x00\xdc\xd5\x7a\x1f\x48\x35\x9a\x8a\x3a\xfd\x9a\x3c\x2d\x5b\xc0\x86\x9d\x4d\xae\xa9\xe0\x00\x55\x87\xb6\x3b\x8e\x56\xb4\x77\x51\x04\xc5\xe7\x44\xf3\x6f\x41\x43\x17\x92\xda\xa6\x74\x4a\xf6\x64\xe3\x0b\xb5\x08\x7b\x5a\x5b\x78\x8a\x69\xef\x7c\xff\xe8\xe3\xe1\xee\xf9\xfe\xc5\xc9\xf1\xe1\x2f\x17\x7b\x27\x47\x1f\x4f\x8e\xf7\x8f\xcf\x09\xed\xc9\x10\x41\x86\x5a\x1e\x49\x82\x45\x6a\x47\xa8\x81\x98\xaa\x54\x91\x0e\x66\x0b\xb7\x01\xcd\xc4\x27\xa7\xf4\x9c\xc5\x93\xcf\x90\x78\xa6\x77\xb6\x7f\x7a\xb0\x7b\x78\xf0\xeb\xee\xf9\xc1\xc9\xf1\xc5\xbb\x83\xd3\xb3\xf3\x8b\xe3\x93\xb7\xfb\x17\x67\xe7\xa7\x07\xc7\xef\xc1\xc4\x42\xf1\x68\x7a\x47\x8a\x4f\xf3\x9c\xd3\xc3\xe4\x46\xc6\xac\x20\xb4\x67\x74\xa5\xf0\x41\x79\xbe\x1c\xd3\xdb\x7d\x99\xec\xcb\x36\x95\x53\x7d\x1b\x9e\x2c\xda\xab\xf9\xb4\x27\x6d\x72\xa6\x1f\x0d\xbf\xb3\xab\x8d\xff\xd5\x08\xba\xc6\x71\x3c\xa7\xd3\xa6\xc2\xf0\xbb\x16\xd9\xdf\x9f\x11\xda\x3b\xcc\x6f\x21\x9d\xfd\x4f\x47\x7a\x16\x49\x76\x25\x7f\x1c\xbf\xdd\x7f\x77\x70\xbc\xff\xd6\x3e\xc8\x82\x09\x8c\x52\x58\xb9\x56\x28\xc7\x9f\x0e\x0f\xbd\x5a\x7b\x79\x36\x55\x20\xbb\xf5\x80\x2a\x69\x28\xb2\x9b\x84\xe5\x99\x00\x4c\x7d\x79\x2b\x35\x97\x6f\x1d\x0a\x26\xbe\x9e\x1c\x9d\x33\x2a\x9d\x27\x54\xa4\x4e\x42\x7b\x07\x6f\x4f\x8e\xf6\xae\xe3\xec\x8a\x16\xb2\x8e\xfd\x71\x74\x70\x7c\x70\xb4\x7b\x78\xb1\xb7\xfb\x71\xf7\xcd\xc1\xe1\xc1\xf9\xc1\xbe\x98\xe8\xdb\xfd\x77\xbb\x9f\x0e\xcf\xc3\xcf\x6b\xa4\x09\x28\x2c\x72\xa6\xd1\x99\x67\x13\x46\x39\x7d\x93\x2f\xb3\xa9\xe7\xc3\x54\x04\x6f\xdc\x07\xc7\xc7\xfb\xa7\x17\x3f\x1d\x75\x04\xdf\xe5\x17\xbd\xdd\x3f\x3b\x3f\x3d\xf9\x65\xf7\xcd\xa1\xd8\x61\xbb\x7b\x3f\x76\x10\x5e\x06\x75\xe0\xfb\x59\x47\x5c\xea\x7e\xc1\xe9\xfe\xfb\x83\xb3\xf3\xfd\x53\x51\x36\x0d\xca\x7e\xd8\xdf\xfd\xd8\x41\xf8\x3a\xf8\xac\x9f\x42\x45\x93\x59\x50\x26\x76\x40\x07\x5e\x5e\x9c\x8f\x1f\xf7\x3a\xda\xb9\x6a\xd1\xa0\xbc\x50\x09\xec\x4c\xd0\x75\xfa\x85\x9f\x25\x97\xa9\x38\x4f\xa0\x39\x77\xb0\xb6\x50\x5d\xcd\x1f\xd0\xe7\xc1\x0d\xa0\xfa\x03\xa5\x82\x56\x85\xa4\x71\xc1\x09\x2b\x65\x2d\x75\x98\xaa\xee\x92\xaa\x87\x72\xa6\x6f\x93\xa0\x0a\x7c\x2f\x45\x5f\x35\x85\xe2\x33\x80\xed\xaf\xef\x5c\x81\x7e\xd3\x80\x85\x2a\xe0\x19\x04\x47\xf8\xbb\xb0\x8a\x5e\x9a\x40\xcd\x7c\x9b\x43\x99\x41\xc3\xd8\x01\x0b\xf2\x12\x0c\x0e\xe2\x92\x33\x12\xe8\x07\x6d\xe7\x82\xa9\xd8\xde\xd6\x1c\x45\xee\x2e\xa5\xe0\xa9\x04\x87\x61\x13\x1c\x46\xb9\x4c\x39\x40\x48\x62\x33\x62\xe5\x24\x76\x00\xba\xf4\x9d\xb2\xaa\xe0\xb0\x00\x9c\xcc\x07\x27\x21\x4c\x83\x93\x93\x24\x04\x87\xf7\x18\x9d\xe7\x37\xf2\xd6\x8c\x12\x51\xdd\x89\xd0\x9e\xb7\x12\x92\x4b\xdd\xf9\x9d\xfb\x10\x61\x35\xe8\x17\x1e\x0b\x61\x9e\x66\xf8\xb0\x92\xd2\x20\xa2\x26\xaf\x19\x45\x43\xf0\x08\x74\x82\x91\x18\xb9\xb7\x12\x82\xde\xae\x44\xd5\x33\x4f\xf9\xe2\xc1\x93\xa6\xd5\x26\x82\x1e\xc2\x74\xbd\xdf\xd8\x75\xb7\x6b\x42\xb9\x0f\xb4\x6c\x4c\x8d\x3f\xa4\x0d\xc4\x4f\x7b\xc5\x02\x6c\x4c\x19\x1e\x20\x4c\x4b\x67\xb2\x76\x98\x2f\x0f\x31\x12\xe6\xc9\x4c\x29\x6a\x55\xe0\x13\xfd\x76\x26\x7f\x85\x5c\x90\xfc\x3a\x0d\x3f\x48\x99\xa3\x5f\xe2\x3b\xf5\x76\xc0\xe1\x85\xcd\x00\x73\xe2\x8a\xfb\xc0\x68\x09\x7e\xcb\xce\x88\xd9\x27\xc7\x8b\xc8\xfe\x80\xb8\xc3\x6a\x7f\x15\xe4\x22\x32\x7f\x63\xea\x75\x7f\xe6\xb0\x73\x7f\x89\x99\xd3\x18\x14\x3c\xdd\x85\xe2\xe9\xc4\x08\xa2\xb3\x73\x08\xc1\xb0\x12\x7c\x56\x95\x8d\x92\x8e\xff\xf8\x23\xde\xc5\x7b\xba\x9e\x01\xeb\xb3\x13\xd0\x26\x92\x21\x34\x37\x22\xc3\xb9\x0d\x90\xab\x26\x2f\x86\xcc\x41\x7d\x15\xef\x89\x87\xf4\xbc\x24\xbc\xa5\x7a\x22\x03\x7c\x1b\x65\xf8\x33\xc2\xb7\x51\x82\x39\x79\xcd\xc1\x64\xe2\x56\x1c\x65\xf2\xfa\x5c\x2d\xc6\x9e\x7c\x9e\xbf\x8d\x98\xf8\x5a\xa7\x85\x81\xf5\x00\x7c\xc9\x7e\xbb\x5d\x67\x25\xc8\xbe\xbb\x2c\xe6\x45\x11\x61\x0d\xc4\x53\x2f\x07\xfa\xa9\x7e\x07\x36\x53\xe2\xa5\xc4\xc1\x6d\xc4\xf1\x67\xe7\x34\xfc\xf1\x95\xfc\xee\xa0\xac\x67\x49\xf1\x3a\x0e\xf0\x08\xaf\xe7\x1e\x3f\xaa\x6b\xe0\x6d\xad\xed\x19\x90\xfc\x07\x68\xb9\x7a\x0a\x38\x5e\xd7\xc1\x5a\x7a\x2f\x50\x70\x10\xde\xeb\x9f\x4e\xcf\x4e\x4e\x35\x0b\xa1\x60\x3c\x0c\xae\x2a\x88\xd4\xaa\xec\x63\x34\xf7\x94\x5d\x39\x4f\x62\x10\x9d\x1a\x42\xf4\xd9\x8f\xa3\x5d\xf9\x30\xce\xdd\xa0\xe9\x3a\x03\x9d\x8d\xa9\xee\x15\x43\x8c\x86\x86\x32\x41\x48\xf5\x05\x00\xfa\xa6\xd0\x68\x6f\x9a\xcf\x09\xa8\x02\x65\x8c\xad\x13\x03\x93\x36\x39\x90\xe6\x03\xf6\xbb\xac\xfd\xf6\xe4\x28\x32\x1e\x00\xb5\xc2\xa0\xab\x41\x16\x1d\x89\x8f\x9a\x79\xc1\xdc\xbd\x5d\x90\x6f\x49\xab\x3a\x65\xb4\x58\xce\x2b\xe1\x9c\x4c\x4f\xe1\xdd\xc6\xa5\x72\x5c\x9c\x30\xdf\xba\xd6\x10\x32\x81\x0a\x23\x34\x88\xcb\x85\xf9\xc6\xab\x1e\xa7\xb0\x2c\xae\xa5\xac\x20\x6b\x4b\x5c\x94\x90\xa6\x03\xbe\x84\x51\x9a\xed\x1a\xf4\x78\x2e\xaf\x0d\xe9\x8d\x49\xeb\x38\x91\xd1\xc1\xd8\x3c\xf5\xa8\x0a\x50\xd9\x41\x4a\x73\x03\xa7\x92\x4e\x53\xf3\x10\x48\x45\xf2\x27\x7d\xdd\x2f\x2f\xe5\x5c\x9a\x6a\xe9\xe8\xd2\x8b\x7c\x61\xf9\x27\x3d\x3a\x44\x7c\xc6\x01\x2c\x65\x05\x4f\x15\x2c\x5a\x8c\x8b\xe5\x7b\x17\xb9\x3c\x2c\x92\xae\x47\xbe\xf4\xf6\x60\x1f\x9f\xea\xfa\x80\xe2\xc3\xa4\xa8\xe4\x19\xaa\xb6\x7f\xe3\xb5\x07\x92\xe9\x57\xa2\x98\x9b\x0b\x8b\x91\x06\x2c\x05\x4f\x93\x4c\x5c\xd8\xf7\xf7\xac\x37\x4d\x54\xb4\x3a\xc9\xc8\x5a\x23\xb9\x8b\x8b\x7c\x41\x33\x77\x3b\xb9\xbd\x2a\xcf\x4c\x4c\x05\xf6\xeb\xf0\xa0\xd6\xae\x07\xca\x7c\xb1\x61\xc5\x57\xd3\xf5\x24\xcd\x0b\xda\xd8\xb7\x58\xba\xd2\x1b\x7f\x55\xfa\x6d\x56\xa5\x28\xd4\xab\xee\x9b\xf6\xc8\x86\xb6\xcc\x33\xda\xf6\x48\x1b\xc7\xbc\x0c\x6b\x7b\x93\x98\xe6\x73\xf5\x78\x6f\x2a\x60\x6f\x31\xcb\x59\xea\x10\x2c\x1f\x0e\xbd\x60\xda\x08\xc0\x19\xb9\xa5\x00\xf5\x5a\x0b\x29\x07\x7f\x2d\xfd\x85\x85\xd0\x09\x3a\x0b\xc8\x6f\x59\x43\x46\xc1\x42\x40\xce\x28\x11\x24\xd3\xcc\x97\x09\x3c\xfb\x73\x30\x22\x8b\x98\xbc\xc7\xd1\x9b\xac\x0d\x2e\x2d\x2c\x61\x59\xea\xe5\x97\xdb\x24\x4d\xf7\xbc\x62\xfd\xae\xba\xa8\x7e\xb1\x93\x90\xfb\x5b\x6a\x4d\x1c\xb0\x9c\xb4\x3a\x0a\x7d\x4d\xd5\xca\xe6\x22\xfb\x8c\xec\xcd\x99\x21\xec\x44\x24\x10\x8c\xf9\xb6\x14\x35\x40\x7a\xd8\x46\xd4\x13\x26\x9c\x22\x6d\xd8\x02\x11\xfb\xc2\xcd\x16\x9c\x65\xbc\xd1\x47\xe2\xb8\xf8\x70\x69\x01\xd1\x1c\xa3\x2a\x8e\x4a\x1f\x58\xfd\xe4\x69\x48\x9d\x8e\x83\x2f\xdd\xb9\x64\x75\x77\x4f\xac\xaa\xb7\xb2\xc9\x38\xe2\x63\xde\x43\x70\xd0\x00\x4e\x65\x95\x5c\xd4\x9e\xfa\x6a\x35\x4c\x6d\xdb\xe3\x1a\xcf\xb9\x4a\x4b\x55\x49\xb6\x3b\x69\x3e\xa3\xba\xa1\x7f\x8c\x31\x2d\xab\xbb\x6f\xe5\x35\xf0\x37\x6e\x29\x83\x84\x9e\xd3\x2f\x55\x2a\xe0\x81\xa4\xf6\x9e\x57\x5d\xec\x38\xbf\xbd\x60\x59\xa7\xf9\x7c\xc8\xb1\x22\x03\x43\x86\x9d\x63\xe3\x58\xe0\x70\x45\x61\x44\x4b\x35\x67\x6b\x83\xe5\x9d\x3f\x86\x13\xc1\x11\x25\x66\xb0\x3a\x3c\x56\x4e\xad\x7f\x79\x54\x0f\x30\xa6\xa6\xbf\x77\x2c\xbe\xf2\x09\x99\x92\xbf\x61\xab\xb7\x4c\xaa\x7e\xc5\xdb\xcc\xfd\xbe\x39\xf6\xce\xc5\xdf\x03\xca\x44\xeb\x10\x03\xdd\x04\x03\xb9\x2b\xb0\x97\xcf\x01\xe4\x4e\xc7\x59\x85\x1f\xce\x8f\x0e\x9b\x11\x23\x4a\xeb\xe0\x08\xa1\xc0\x54\xef\x0a\xa5\x64\xd4\xdd\xba\x3e\xe2\x0c\x12\x64\x40\xb0\x46\x79\xdb\xf8\x5b\x46\xed\x7f\x1e\xf4\xe4\x6c\x13\xdd\xd3\x32\xab\xf6\xb5\x66\x17\x0a\xa1\xd2\xeb\xb2\xba\x78\x1e\x9e\x9c\xe2\xc7\x81\xa8\x37\x57\x4d\x5f\xfa\x68\xca\x6d\x10\xae\x4e\x43\xff\x0c\x95\x95\x09\x06\xf4\xdc\x5b\xbc\xb2\x06\x21\xb5\xf5\x15\x2e\x4b\x7f\x3f\x3c\xfe\x0c\xdb\x16\x76\x03\x39\xbd\x7c\xfd\x49\xb6\x8d\x1f\x3e\xc8\x05\xe5\x46\x87\xef\x69\x3a\xc5\x76\xf5\x0a\x2b\x9c\x01\x36\x97\x5d\x41\xb9\x63\xc5\xc3\x6b\xa4\x38\x19\x34\xa2\xa0\xea\x05\xb5\x7e\xc8\x5a\x68\x44\xa3\xf0\xb1\x21\x4c\xec\x51\x05\x2d\xb7\xc6\xfb\xb1\x6e\xf5\x2e\x67\x51\x82\xa5\x9c\xa9\x11\x93\x83\x96\x07\xf0\x67\xad\x32\x11\xce\xcb\xb2\xee\x3d\xe4\x10\xef\x92\x03\x25\xbd\xbe\x6b\x8a\x2e\xe8\xe8\x9a\xa5\x6e\xd8\xf7\xbc\x74\x7e\x66\x14\xc2\x39\x93\xfe\x23\x94\xb0\xeb\x95\xc5\xae\x96\x72\x9d\xe2\xd8\xd1\x5e\x86\x0c\x6c\xcd\x2e\xd5\xcc\x9c\x82\x73\x73\x33\xe4\xb5\xdc\xd2\xad\xad\xea\xfd\x6a\xcc\xa4\x55\x1d\x6d\x3a\x0a\xd0\x6a\xaf\x1b\x85\x24\x7a\xdb\x7e\x6b\x99\x7f\x89\x29\x7a\xdb\x3e\x86\x63\x51\x73\xeb\x7f\x45\xdf\xd4\xed\x94\x2a\xfb\x1e\x21\x12\x50\xb4\xd2\x19\x9e\x4c\xed\x6e\x97\xf6\x2a\x94\x5d\x6b\x45\xfe\x34\xbe\x68\x95\xe5\x97\x5e\x68\x14\xe1\x33\xb9\x9d\xac\x53\x53\xb0\xb8\xde\x68\x72\x2d\x1c\x45\x7b\xb7\x7b\xa9\xe2\xf2\x4a\x9f\xf5\xe0\xe9\xee\x4f\xb5\xfb\x3e\x39\x80\x48\x39\x1e\xad\x3e\xcb\x86\x2a\xe0\x8a\xea\xa6\x55\xd9\x2b\x8f\xd8\x8f\x98\x8a\xb1\x6b\x1e\x09\x3f\xa9\xe1\xdf\xac\x7d\x65\xd0\xdb\xff\x52\x2c\x96\x90\x31\x8d\xa5\x68\x53\xf1\xdf\x39\x00\xa6\x9b\x51\x7f\xdc\x74\x0e\x1c\x73\x59\x53\xdd\xe8\xa0\x47\xd4\x18\x70\x8e\xd7\x1c\x90\x70\xf3\x57\xb7\x7b\xdd\x36\xf5\x36\x9b\x54\x8e\xfd\x40\x56\x82\x0a\x27\x57\x99\xb4\x83\x1c\x0e\xf0\x94\x16\x93\xe1\x00\xf3\x84\xa7\x74\x38\x28\xf1\x4f\x3a\xcc\xa0\x24\xe8\x2a\x51\xae\xc4\xfd\x93\x5a\xc2\x33\xcd\x27\x4b\xf7\x99\xab\xa0\x7c\xb9\xf8\x54\xd0\x94\x16\x85\xe5\x31\x6b\xbf\xca\x0e\x96\xde\x57\xe2\x75\x1a\xc8\xa0\x9d\x69\x72\xd3\x41\x65\x45\x30\x55\xbc\x19\xce\x80\x53\xdb\x89\x18\xe9\x5c\x73\xbe\x18\x7e\xf3\xcd\xed\xed\x6d\xef\xf6\x59\x2f\x67\x57\xdf\x3c\xed\xf7\xfb\xdf\x14\x37\x57\xd2\x0e\x17\x52\x20\x2f\xe2\x09\xfd\x74\x7a\x70\x7f\xdf\x51\xdf\x29\xce\xc8\xc6\xc6\x0f\xd2\x29\xf1\x38\x9e\xd3\x31\x1a\x8a\xde\xdc\xe2\x01\xc2\xac\xdb\xdd\x90\xa9\xf6\x7e\x1a\xd1\x71\x35\xa3\xae\x32\x00\x92\x70\xb6\xe3\xf6\x93\x15\x2d\xdb\x49\x56\x24\x53\xda\x8e\xb3\xf6\xd9\x4f\xef\xdb\x13\x19\xe4\xfa\xf7\x90\x5d\xac\x9b\xf7\xf1\x59\xb4\x6e\x3e\xd8\xfa\x6e\xad\x43\x1e\x45\x65\x45\xa8\x65\x68\x45\x03\xfe\x54\xdc\x7c\x15\x6e\xd1\x8a\x90\x9d\x4e\x25\x74\x9d\x7f\xf7\x77\x3a\xce\x23\x8b\xd7\xb5\x7c\x8b\x00\xf6\x99\xe2\x0c\x67\x32\x85\x60\x22\xae\xcc\x1d\xde\x5b\x30\x7a\x93\xe4\xcb\x42\x73\x17\x0e\x4b\xed\x25\xc4\xd3\x9d\xee\x4e\xff\x88\x27\x34\x03\x28\xa3\xce\x25\x0c\x41\xb3\x29\x64\x4e\xd1\xaf\x77\xb2\xb5\x0e\x07\xc4\xc5\x12\x40\x02\x99\x7c\xd6\x16\xcd\x14\x66\x10\x5f\xd3\x25\x98\x68\xaa\x4e\x2b\x40\x1a\x57\xd8\x95\xbf\x89\x8d\x3f\x6e\x80\x81\x58\x60\x20\x7e\xe4\x68\x71\x38\x1a\xf6\x65\xf1\x58\xe2\xaf\x20\xf9\x8e\xf7\x22\x39\xf4\x44\x17\x47\x98\x10\x68\x2f\x70\xa2\xcf\x8f\x23\x76\xad\xd6\x6c\x1f\xa7\x5a\x19\x72\x79\xeb\xda\xd9\x5a\xce\xa3\xc6\x7f\xb4\xb6\xdd\x4d\x36\xd7\x86\x34\x5e\x1b\x75\x0f\x2a\xb4\x72\x10\x38\x86\xc3\x28\x6d\x66\xd9\x43\x7b\xa1\xf3\x6a\x92\xb0\x49\x4a\x5f\xbf\xfa\x46\xfd\x21\xc8\x07\x24\xc3\xcb\x34\x89\x4c\xef\x4c\x70\xc1\x0d\x42\xd4\x13\x8d\x98\xb1\x4e\x0c\x77\x7f\xbf\xee\xf4\x41\x1b\x8b\x70\x8f\xb0\x40\xe6\xc0\x0c\xd9\x79\x2a\xef\xa3\x5a\xb2\xa6\x97\xca\x77\x3d\x67\xab\x9a\xc3\xc8\x70\x6e\xdc\x12\xc4\x79\xcc\xef\xef\xa9\x37\x30\xe4\x47\x06\xc6\xa0\x2a\xf9\xc9\xe6\xc3\xd0\xd2\x52\x3d\x27\x83\xbf\xc2\xbb\x93\xd3\xfd\x83\xf7\xc7\x27\x6f\x3e\xec\xef\x9d\x03\xe1\xd3\xf4\xb0\xc7\xf3\x4f\x8b\x05\x65\x7b\x71\x41\x23\xa4\x5f\xc4\x3b\xaf\x8a\x9b\xab\xd7\xaf\xbc\xcb\xe5\x75\x67\x33\xdb\xec\xbc\xfa\xc6\xff\xf8\x4a\xe0\xec\x75\x47\x1a\x53\x80\x69\xbd\x3e\x84\x11\x43\xb8\x7e\x3d\xe3\x19\xa7\x4c\x9d\x8c\x18\xe1\xdc\xc7\xb7\xfd\xb3\x74\x1c\xd3\x25\x44\x0a\x84\xbf\x37\x64\x11\x0e\x59\xd6\xb8\x0c\x86\x49\x68\x6d\x6d\x9c\x90\x0c\xec\x07\xf2\x06\x03\x02\x1e\x5a\x0f\xc0\xe9\xcf\x71\x4e\xe2\xd2\x3b\xbd\x32\xea\x40\x19\xe5\x98\xc2\xff\x29\x98\xc7\x32\x2f\x0f\xf7\xcf\x7e\x5c\xa3\x6e\xb7\x6a\x13\xd7\xb0\xfb\xc0\x70\x40\xf1\x9f\x4a\xd7\x17\x10\x00\xe5\xc6\x02\x2f\x96\x0f\x9d\xbb\x82\x4e\xf2\x6c\xda\x41\xf8\x29\xdc\xb6\x95\x33\xa5\x93\xa3\x0e\xd4\xae\xdf\xe8\x43\xc6\x76\x7f\xef\xf3\x46\x56\xd7\x65\x1c\x14\xa1\x31\xf3\x72\xb9\xe7\x87\x2f\x32\x85\xa9\xc6\xb3\x02\x31\xa8\xe4\xaa\x6e\x0c\xc4\x1d\xf0\xd0\x55\xd5\xed\x26\xee\x3d\x23\xb0\x07\x5e\x7e\x1b\x7d\x1c\x5e\xb5\xd5\x49\x60\xae\x1c\x06\x73\xb2\x1e\x22\xbd\x31\x84\xd0\xe0\x5e\x0a\x35\x7d\x82\x50\x39\xe4\xe5\xa8\x73\xd9\xc1\x9d\xcb\xe4\x4a\xfc\x2b\x18\xeb\xff\x2c\x73\x4e\xc5\x8f\x7c\x7a\x27\xfe\xc7\x3a\xb8\x23\x56\x93\xc2\x1f\xf9\x54\x94\x4d\xc5\x62\x8a\x0d\x82\x3b\xd3\x54\xfc\xc3\x3b\xb8\x43\xe7\xf0\xcf\x25\x15\x85\xd7\x03\xf1\xcf\x53\xf1\xcf\x33\xf1\xcf\x73\xf1\xcf\xb7\xe2\x9f\x17\xe2\x1f\x1a\x43\x25\xd1\x65\x22\xfe\x9b\x8b\xe1\xd3\x04\xfe\x01\xa6\xbf\x83\x3b\xf3\x58\x9c\xb3\x0e\x24\x83\xc5\x9d\x2c\x07\x48\x72\x31\xdc\x42\xfc\xc7\x04\x20\x6c\x79\x29\x80\x2c\xc4\x7f\xf3\x38\x15\x85\xc5\x22\x16\xcd\x0a\xce\x72\xe8\xa6\xe0\x2c\xf9\x2c\xea\x16\xcb\x4b\xf8\x57\xb4\xe6\x32\x89\x56\x87\x0b\xc0\x97\xe2\x3f\xd1\xf4\x26\x66\x9d\x71\x6f\x96\xb3\xfd\x78\x72\x1d\x51\xf2\x5a\xf0\x71\x64\x20\x71\xff\x1e\xff\x42\xbe\x19\xfd\xc6\xb7\x7e\x63\xed\xdf\xbe\xec\xf6\x7f\x5b\x0e\x5e\xbc\x14\xff\xbe\xec\xef\xff\xb6\x14\x84\x7f\x0b\xfe\xb7\x2b\xfe\x7d\xfa\x12\xfe\xfd\x1e\xfe\x7d\x27\xfe\xfd\xf6\xdd\x6f\xcb\x67\xfd\x7e\xff\xb7\xe5\xbb\xfd\x77\xef\xc6\xdf\xe0\x1f\x49\x67\x99\x49\x97\xa3\xa9\x75\x76\xd5\xd7\xe5\x8e\xe0\x6c\x86\xfa\xd7\xb6\x97\xf7\x5c\x1e\x07\x6e\x0e\xc4\x93\x55\x78\x1d\x7a\x61\x60\xd7\x72\x90\x60\xf6\x5b\x55\x73\xe0\x4c\xe9\xd4\xb3\x1d\xea\xa9\x5d\x8e\xcf\x04\xc3\x86\x19\x1a\xd2\x40\x1d\x03\x24\x87\xf6\x2a\xd6\x86\x5c\x05\xc4\xe3\x2d\x46\x7e\x8e\x7e\x14\x74\x8c\x91\xff\x88\x3f\xf0\xba\x0b\x14\xe1\x7a\xe3\x45\x56\xa2\xe8\xfd\xfd\x7d\xf4\x9e\xac\x4a\xa4\x65\x90\x0f\x2e\x2e\xd6\x11\x87\x50\x2c\x31\xb7\xa3\x8c\x65\x55\xa7\x7d\xaa\x9b\xa7\x3c\x5b\x5e\x55\x51\x31\xfc\xcc\x35\xa9\xd9\x15\x17\x87\xa7\x5b\xaa\xf2\xdc\xfe\x2b\x52\xe9\x1b\x69\x7e\x00\x24\xfe\x8b\x7c\x68\xfd\x0b\x90\xf8\x2f\xb9\x27\xff\x4d\xfe\x05\xa8\xfc\xd7\x7a\x54\xb6\x3c\x1b\xcf\x7f\x43\xd3\x5f\xc9\xfb\x3a\xfc\xb6\xea\xb1\xfe\xab\x42\x34\xa5\x96\x05\x09\xa2\x22\xad\xd4\xbb\xbf\x12\x11\x69\xd5\x43\x9d\xee\x64\x74\x68\x0c\xc7\x12\x3a\x94\xc9\xfc\x76\x72\x3a\xdc\x18\xc0\x5f\x31\x1d\x56\xf2\x6c\x53\x70\x96\x15\x58\x92\x8e\xb1\x5c\xf2\x9c\xf5\xab\x1c\x84\x51\xca\xa8\x8c\x00\x51\x35\xba\xd5\x79\x8f\xb8\x9d\x10\x0d\xb3\xe1\x37\x06\x0d\x97\x97\x95\xed\x0d\xf6\x8e\x1a\x59\xdc\x21\xb2\x1c\x38\x24\xa9\x2f\x0d\x1a\xd4\x05\x84\xf1\xe3\x2c\x54\x46\x90\x28\x50\x5b\x27\xa3\xda\xc7\x13\x8c\xc1\xbc\xcb\x4a\x7b\xc1\xcb\xe9\xb1\xc6\xe9\xb9\x48\x03\x89\x21\x33\xa3\xd8\xb8\x57\x75\x46\xcc\x99\xcc\xc9\x92\x98\xea\x52\x19\x50\x31\x63\x4e\x64\xbd\xdc\xd4\xdb\xe8\x23\x1c\xdb\x5f\x03\x7d\x78\x8b\x4a\xba\x2c\x92\xd6\xc7\xd3\xca\xdf\xe4\x79\x6a\xc2\x5a\xaa\x78\x1b\xd9\xba\x78\x1b\xb6\x8e\x09\x06\xe3\xc4\x8f\x13\x5d\xf8\x81\x61\xda\x14\xaf\xe4\x30\x43\x8e\x61\x70\x13\x6e\x24\x91\x1d\x39\x21\x59\x28\xe1\x11\xd3\xfe\xe2\x26\x59\x1a\xd4\x0a\x63\xf5\x88\x91\x70\x02\xae\xcd\x36\x5a\xb7\x73\x48\x36\x36\x68\x98\x78\x5b\xf3\xfd\xe2\xc7\x4e\xa7\x33\x54\xb1\x31\x5c\x83\x47\x37\x33\xb6\xda\x44\xd4\x0d\xa1\x60\xb2\xf2\x08\x06\x5d\xb6\x0f\xb3\x59\x2b\x71\x21\x4c\xa7\x4f\xbb\x5d\x6b\x65\x59\x17\x93\xa1\xc7\x73\xc1\x7e\xf8\xe9\xad\x1f\xd9\x5d\xe5\x84\x83\xa5\xd6\xf9\xdd\x82\x7a\x59\xa1\x6d\x77\x61\x76\x7c\x1a\x24\x60\xb5\x9a\x1e\xe9\x1a\xd6\x52\x62\x7d\x9b\xa2\x8c\x70\xcc\x48\x67\xc1\xf2\x45\xc7\x0b\x51\xd5\xe3\xf9\x61\x7e\xab\x45\x96\x56\x01\xd5\x41\x47\x04\x75\x71\x46\x0a\xa9\xe4\x89\x39\x67\xe2\x27\xd7\xea\x14\x59\x41\xc5\x75\xe8\x14\xfc\x2e\xa5\xe2\x57\xe6\xf7\x08\xc9\x82\x8c\x80\x24\x58\x7d\x1c\xc5\x64\x4e\x47\x89\x2f\x2c\x8d\x51\xb7\x1b\x8f\x72\xbf\xf1\x18\x21\x88\x19\x21\x07\x47\x78\x65\x1c\x6d\xa7\xc3\x0c\x0b\x2c\x0c\x99\x32\xba\xae\x3a\x0a\x14\xf2\xe0\xcd\x29\x59\x1d\x1c\x7f\xfc\x74\x3e\x14\x22\xc8\x1c\xb2\xbb\x2e\x79\x3e\xc9\x19\xa3\x13\x2e\x7e\x0a\x56\x6b\xb8\xd1\x2f\xf1\xd9\xfe\xe1\xfe\x9e\xad\x57\xe2\x93\x8f\xe7\x07\x27\xc7\xce\x87\xf3\xfd\x7f\x9f\xef\x9e\xee\xef\x3a\x9f\x0e\x77\xdf\xec\x1f\x3a\xbf\xdf\x1d\xec\x1f\xbe\x3d\xdb\x77\xbb\x39\xdc\x7f\xbf\x7f\xfc\xd6\xed\x17\x44\x47\xe7\xc3\x9b\x4f\xe7\xe7\xee\x40\x32\xea\xdd\x0d\xc5\x57\x94\x8c\x3a\x7f\xc4\x37\x71\x31\x61\xc9\x82\x0f\x05\x77\x76\xa9\xff\x1e\xe3\x4b\x51\xbc\xab\x53\x64\xe1\xce\xe1\xc1\xf1\x8f\x1d\xdc\x39\x38\x7a\x2f\xfe\x7d\x77\xba\x7b\xb4\x2f\x0a\x77\xcf\xc4\xff\xde\x9d\x9c\x1e\x75\xc6\xf8\x4e\xb4\xd9\x3f\x7a\xb3\xff\xb6\x33\xc6\x17\xe2\xc7\x35\xa3\x33\xc1\x12\xb2\x89\x60\x74\xe3\xc9\xe7\x2b\x96\x2f\x41\x50\x91\xbe\xba\x9d\x31\xbe\x15\xf5\x44\x85\xb1\xb5\x3e\xdd\xa7\x2e\x83\x05\xb9\x98\x5d\x63\xe2\xb2\x92\xcd\x50\x11\x06\x7d\xf5\xdd\xdf\xef\xd3\xe8\x92\x62\x2a\x56\x79\x9f\x46\x17\xc0\x84\x59\x93\x5e\x5a\xb1\xb4\x56\xb1\x13\xf6\x69\x74\x27\x9a\x41\xab\x5b\x69\xdb\x60\x4d\x75\xfd\x66\x6a\xec\xfb\x7b\xd5\x9d\xad\x78\x5e\x79\xaf\x82\xf8\x00\x46\x9b\x96\xd9\x48\x94\xc9\x2c\x9a\x82\x8f\xa0\xfe\xa2\x8e\x7d\x84\x5a\x52\xe6\xa9\x95\xff\x87\x4e\x0c\xaf\xa5\x68\x2e\xfa\xf9\x42\xa3\x04\x33\xa3\x1b\x80\x64\x3a\x62\x37\xa6\xef\x72\xf6\xe9\xf4\x30\xca\xa1\xd6\x3e\x8d\xae\x28\x8e\xf5\x80\x9d\x65\x56\xc4\x33\x3a\xec\x6c\xe6\xfa\x96\x3b\x91\xfd\xec\x38\x45\x43\x27\x57\xeb\x91\xe1\xdb\x54\x98\x2f\x01\xde\x30\xc3\xae\x1a\x64\x98\x94\x44\x9c\xc8\x95\x7e\xc0\xa4\x50\x3c\xe4\xb6\xd6\x90\x95\xa0\xf2\x58\xaf\x2f\x36\x96\xfc\x1f\x41\x8d\xa9\xc2\x7f\xac\xe0\x7c\xc6\xd8\x39\xb3\x45\x49\x14\xa1\xd2\x79\xd3\xe0\x60\x43\x28\x10\x68\x5b\x04\xba\x17\x2d\x8e\xaa\x45\x75\xe3\x8c\x9c\xaa\x08\xc8\xc9\x2c\xaa\x73\xee\x8b\x3a\x70\xe8\x3b\x72\xa3\x75\xf4\xc1\x95\xcc\x48\xb7\xdb\x81\xeb\x0a\x94\xdd\x65\xa5\xeb\xb7\xeb\xbb\xee\x48\xb2\xd0\x91\x51\x57\x3a\x42\x9c\x9c\x70\x10\x5e\xea\x3a\x3b\x56\x9d\x39\x9f\x3e\x2b\xf6\x59\x4d\xb8\x74\x53\xba\xf9\x06\x4d\x6a\xde\xc0\xfa\xfd\x41\x23\x26\x59\xbf\x3d\xf1\xd7\xfa\x74\x6a\xb1\x75\x00\x13\x04\xb2\xe2\x16\xb6\xab\x19\xbf\x3d\xcb\x19\xed\xd2\x95\xb2\xad\xc7\x46\x85\x7d\x20\xb8\x77\x27\x70\xa2\x3c\x2b\x2b\xd8\x27\x89\xb3\x4f\x54\x74\x56\x3b\x6e\x8b\x86\xef\xc6\x09\xce\x20\x5a\x8f\x8e\xe3\x65\xf5\x98\x07\xf0\xa6\x69\xb6\xa1\xdc\xa5\x62\x77\x06\x5d\x2a\xc2\xc1\x76\xb2\x8a\x88\x91\xa0\x61\xd6\x0b\x86\x93\x82\x58\x83\xab\xdc\x9e\x46\xc0\x67\x0f\x01\x0f\x84\xcc\xb4\x7b\xf9\x18\xf2\x68\x96\x0e\xc2\x24\x86\xb8\x7e\xf0\xbc\x91\xc1\x12\xb1\xc2\x83\x79\x88\xaf\xe9\x07\x08\x58\x80\x16\x83\x0d\x56\x41\x83\xed\x5e\xd1\x43\x36\xaa\xe9\xd4\xcd\xe0\x44\x28\x56\x6c\x91\x0a\x98\x19\xa2\x0f\x55\x65\x39\x1f\x0a\xea\xac\x35\xaf\x42\xb4\x53\x11\xfa\x40\x19\x5d\x03\x96\x10\x98\x2b\xf2\x61\x4d\x35\xcd\xb9\x9f\xda\xe5\xf9\x1c\xee\xcf\x07\x77\x0c\xce\xc9\x39\x04\xb3\xc2\x89\xa0\x39\x52\x32\x90\x7d\x80\x6a\xb0\x11\xe7\xb2\xbf\xac\xd2\x5f\x22\xfa\x93\xbe\xd4\x54\xf7\xa7\x3a\x49\x9c\xf8\x67\x7f\x58\xa0\xf7\xfe\x9f\x01\xfa\x6d\x1d\xa6\xc1\x41\xd7\xdb\xbf\x8a\x72\x62\x48\xe1\x85\xfc\xa8\x7c\xda\x20\xc8\x8c\xed\x1a\xbb\xaa\xf0\x46\x19\x51\x69\x9c\x36\x64\x84\x2f\xf5\x9d\x64\x06\x90\xe3\x7a\x40\xcc\xf9\xda\x18\x48\x97\x8d\x0a\x64\x86\x12\x83\x45\xe5\xe3\x20\x6b\xf1\x9e\x6e\x46\x84\xf4\x61\x89\xf1\x81\x2b\x97\x0c\xe4\x3d\x62\x84\x0b\x2b\xcc\x1b\x91\x42\xaa\xaa\x94\x2c\xdf\xe9\x0c\x6b\x43\xb8\x41\x1d\x2b\xc2\x28\x8f\x8b\x9a\x4c\xe9\xc6\xe9\xa2\x48\x73\x9b\xcf\x60\x12\xa7\x29\x65\xd2\xa9\x55\x1b\xc6\xdc\xc4\xa9\xfc\xc0\xcc\x6b\x3e\x4f\xe2\x14\x62\xdc\x19\x27\x84\x3c\x97\x16\xa2\x7d\xd7\xd1\xcf\xc9\x6d\xb6\x39\xd0\x69\xcd\x08\x87\x84\x66\x90\xc4\x2c\xa3\xee\xb5\x75\x48\x95\xcd\xb0\xfd\x47\xfa\x28\x44\x32\x6c\x00\x2d\x8d\xd3\x43\x21\xce\x71\x44\xdd\xe1\xbc\xec\x73\x62\x38\xe9\xde\x46\xa8\x4d\x39\x57\x19\x8e\x87\xc3\x95\xfe\x70\x9e\x6e\x0f\x10\x35\xea\x8f\x15\xae\x64\x36\xaf\x74\x16\x98\x25\x5c\x51\x1e\xf5\x41\x3f\x22\x33\x73\x87\xef\x74\x4a\x6f\x70\x45\xb9\x32\xa2\xf7\xb6\x8f\xef\x3f\xc4\x85\xb8\xa3\xd6\x14\x1c\x1f\xf6\xf5\x5a\x04\x83\x9a\x35\x72\xf2\x2c\x7b\xd1\x0b\x83\x85\x2b\x2f\x93\x6c\xea\xd8\x6f\xe8\x33\x00\xdf\x61\x52\xd4\x29\xe9\x63\xaa\x4a\xd4\x8c\xea\xdb\x19\xa7\x80\xba\x42\x0b\xb9\x09\x88\x6d\xf6\x15\x85\x1a\x0e\xd8\x8e\x55\x95\xde\x69\xb2\xce\x9e\xdd\x9e\x36\x75\xb6\xb3\x65\x61\xfe\x6e\xa5\x30\xf3\xbe\x29\x91\x01\xdf\x22\xcf\xfb\xe6\x50\xdd\x14\xb0\xd0\x7e\x5a\x46\xa7\x65\x70\x2a\xc2\x33\x81\x1c\x05\x15\x55\x01\xc3\x64\x87\x4a\x93\x64\xcd\x15\x4e\xe3\xec\x8a\x2a\x9b\x85\x37\x9f\xde\x0f\xdb\x13\x69\xb8\x70\x45\x79\xfb\x09\x18\x2d\xcc\x58\x3e\x6f\x43\x1e\xa1\xed\xb6\x6c\x4e\x9e\xac\x2a\x5d\x96\x81\x19\x83\xdc\xa8\x32\x95\x93\x8d\x7e\xf4\x7f\x0f\x16\x0f\x08\xe9\x6c\x6d\x5d\xea\x0f\xa5\xd4\xfc\x8e\x06\xae\x62\xe7\xa7\xbb\xc7\x67\xbb\x7b\xc0\xf8\x6a\x8d\xd5\x9f\xa1\xa6\x50\xf6\xac\x7c\xe7\xa6\x07\x59\xc1\xe3\x34\x55\x71\x18\x9c\x54\x61\x61\x05\x6d\x67\x5e\xad\x01\xca\x2c\xaa\x2b\x34\xf7\xe4\xd7\xb3\x15\xa4\x4a\xcc\xfa\xe5\x57\x4a\x2a\x5d\xca\x5b\xa3\xae\x85\x2a\x71\x5a\x94\xd3\x64\xba\xa7\xd4\xbc\xd6\xbc\x32\x1c\xd2\xf8\xc4\xd4\x8d\xab\x3d\x84\x45\x57\x9f\x9c\x8b\xbd\x1e\x16\xbf\xab\x00\x20\xd3\x95\xc6\x4a\x80\x5e\xf7\xe8\x37\xad\x80\x3f\x40\xd3\x4a\x56\x46\xf2\xd1\x5f\x37\x50\xb0\x40\x0d\xe3\xd4\x2f\xb7\x19\x4e\x87\xfd\x32\xa9\x90\x2a\xb8\x1e\x52\x1c\x20\x38\x48\x93\x44\xc3\x34\x49\xed\x8c\x50\xc8\x8d\x34\x62\xe3\x9e\x5d\xcf\x0c\x95\x7a\x90\xca\x2a\x0c\x13\x1c\xa0\xde\x49\x4e\xd1\xdf\x8e\x5f\x25\x7a\x90\x58\x0f\x52\x90\x64\x14\x8f\x5b\xf9\x28\x86\x41\xd4\x4a\x17\x76\x90\x26\x54\x0f\x53\xdc\xb8\x58\xc3\xa5\x1a\x75\x42\xfa\xdb\x93\x57\xa9\x1e\x75\xa2\x47\x9d\x92\xe5\x68\x32\x6e\xa5\xa3\xc9\xb8\x97\xc8\xc6\xd1\xb4\x66\xcc\x7a\xb4\x0f\xaf\x71\xd3\xf2\x0d\x67\x6a\xe4\x05\xe9\x6f\x2f\x5e\x5d\xeb\x91\x17\x7a\xe4\x39\x99\x8d\x16\xe3\xd6\xf5\x68\x31\xd6\xac\xe6\xdc\x7b\x89\xff\xe4\x09\x80\x36\xd5\xd1\x0e\xb5\x89\xc6\x99\x62\x8f\xde\xd4\x88\x65\xf2\x15\x8b\xa6\xf4\x2a\xe6\x9a\x15\x1a\xdd\xd0\xb1\x63\x36\x49\xbf\x70\x16\x13\xaf\xa2\xfc\xa6\x62\xbb\x16\x07\x19\xa7\x2c\x9e\xf0\xe4\x86\x92\xce\x65\x9e\xa7\x34\x76\x74\xc5\x7e\x43\xaf\xf6\xfd\xfd\x9a\x42\x13\x04\xde\xd1\xea\x90\x4f\xea\xea\x32\x4d\xfc\x72\xfc\x83\x3e\x0a\xae\x55\x74\xb5\x95\x5b\x8a\x7f\xd2\x6d\xae\x24\x0f\x5c\xad\xae\x0a\xf0\x13\xb7\x66\xcc\xaf\xeb\x6b\xc6\xfc\xda\xd6\x2c\x9a\x6a\xaa\x02\xfc\x1f\x5d\x53\xbd\x46\x54\x2a\xca\xef\xf8\x67\x5b\x4f\x07\x82\xad\xab\xab\xcb\xf0\x7b\x8a\xb0\xb6\xf4\xb5\xce\xba\x3b\x2a\xdb\x40\xf0\x99\x54\x6b\x36\x3a\xfb\x86\x9f\x84\x20\xaa\x9f\x41\xb5\xcc\x5e\xe9\x5f\x5c\xbd\xbf\x46\xb6\x62\x93\x2f\xb1\xa8\xf7\xc1\xad\x07\x6c\xc6\xb9\x4a\xa0\x2b\x10\x06\x51\x2c\xf7\xa4\x59\x63\xe5\x51\x70\x83\x90\xca\x7a\x34\x35\xde\x79\x74\xcd\x88\xa2\x61\xa7\x23\xb8\x8c\xe6\x1a\x4a\x2c\xad\x87\x62\x4d\x4b\xa5\x47\x78\x4c\x55\xed\x30\xc0\xf3\x3a\x35\x7d\x90\x2b\xbd\xa0\xda\x95\x32\xd8\x48\x80\xd0\xaa\x6f\xb7\xc7\x3f\x86\xcb\x57\x6a\x07\x6f\xaf\x56\xb8\x78\xa5\x8a\x33\xd9\x84\x85\xdc\x0d\x5b\xf9\x46\xd4\x0d\x27\x5f\xad\xa1\x5d\x8c\xdf\xa9\xf8\xf0\x7f\x52\x99\x71\xd7\x56\x0b\xfc\xa2\xdf\xd1\x7a\x6e\xc2\x69\xd1\xf3\xcb\x6b\x39\x86\xa0\xba\x53\xfe\x08\xae\xc0\x23\x63\x6a\x8e\x6e\x87\xeb\x7a\x78\x98\x15\x78\x6c\xef\x35\x1d\xd8\x8b\xdf\x31\x18\x77\xda\xb6\x2c\xae\x21\xa4\x88\x89\x0f\x8a\x1f\xb3\xa4\x7b\x50\x79\xed\x9a\xee\x99\x78\xa3\xe6\x02\xfb\x61\xdd\x3b\xdf\xa7\xd3\xc3\xfb\xfb\x3a\xb3\x96\x4f\xa7\x87\x3b\xae\x09\x4b\x32\x8b\xea\xaa\xdd\x26\xd9\x34\xbf\xd5\x92\xe7\x37\xff\x27\x1a\xc5\x5b\x7f\x8e\xc5\x3f\xfd\xad\xef\x7b\x9b\x5b\xe3\x7f\x0c\xd1\x4e\xf4\xdb\x37\xbf\x7d\x83\x76\xa2\xd1\x6f\x67\xbf\x15\xe3\x7f\xa0\x6f\x92\x1e\xfd\x42\x27\xae\x7c\xda\xed\xf2\xd1\x60\xbc\x23\xfe\xf1\x1f\xd6\x04\x5d\x90\x57\xaf\x1c\xaa\xd1\xa4\x3c\xee\x38\x91\x07\xae\x19\x04\x4c\x67\xe6\xf6\x2a\x81\xc4\xd8\x09\x6c\x54\xcd\x77\xe8\xad\x98\x74\x44\xb1\x19\xe1\x32\x2e\xe8\xa7\xd3\x03\x64\x7a\x19\xda\x4a\xf0\xd0\x50\xa8\x97\x06\xfa\x25\x9e\x2f\x52\x58\xcd\x8e\xad\x6d\x97\xe0\x27\xe7\x01\x47\xc1\xa8\x9e\x3d\x32\x47\xa7\xfe\xc4\x7f\x0f\xa2\x23\x37\x0a\xcf\x7f\x42\x85\xbb\x28\x26\xcc\xb1\x18\x74\x09\xd4\x1b\xc9\x23\x78\x6f\xcf\xef\xdd\x0a\xb4\xdb\xa5\x23\x29\x85\x9b\x00\xd3\xe3\x9d\xea\x27\xf5\x36\x54\x56\xe3\x97\xbd\xa1\xf8\x86\x92\x77\x5a\x39\xfd\x4b\xbd\x76\x5f\x67\x6e\x4a\xf3\xfc\xf3\x72\x61\x38\x53\x23\x4c\xba\xf6\x11\x7e\x15\x2f\x1a\x40\x6d\x0d\xf9\x3c\xe3\xa7\x62\xaf\x98\xf0\x7f\xca\xe8\x97\x05\x28\xcd\x6c\x58\x4e\x69\xc7\x1f\x81\x1c\xfa\x64\xc5\x4b\xd4\x8e\x82\xae\xdb\x12\x4d\x74\xda\x36\x5b\x06\x59\xd9\x98\x95\x95\x50\xa1\x61\x7b\x88\x1b\x2a\xf6\x84\xc0\x17\x9d\xb6\xf3\xac\xad\x42\x14\x9f\xaa\x40\x9f\xbd\x0e\x52\x58\x51\xfa\x8a\x66\x9c\xa8\x0a\x8d\x18\x71\x3b\xf8\x0a\x7c\x28\x55\x43\x23\x36\x54\xb7\x7f\x11\x17\xba\xf5\xe3\x30\xa1\xc2\x9f\x2a\x4a\xe3\xcc\x50\x15\x78\xba\x2d\xaf\x44\x45\x13\xb2\x81\x9c\xd6\xce\x59\x46\x04\x55\x53\x56\x3d\xac\x9f\x20\xaf\x4e\x50\xb7\x7b\xdc\xd4\x64\xe0\x56\x9d\xa6\xdf\x9f\x9d\x2d\xab\x99\xa0\xd7\xf0\xe1\x39\x8a\x8a\x6d\x9e\xb7\x55\xa0\xd8\xf6\x13\x78\xfb\x2a\xdb\x91\xed\xe7\xab\x67\xea\x34\x7d\xdc\x64\xaf\x28\x3f\xc8\x6e\xf2\x49\xec\xdc\x1b\xce\x94\xbc\xe2\x9a\x29\x87\xcd\x1f\x3f\x6b\xc1\xb4\x24\xa6\x69\x7b\x96\xb3\xf6\x93\xd5\x87\xb3\x93\xe3\x9e\xb4\x45\x49\x66\x77\x82\x1a\xb6\x23\x6f\x88\xaf\x46\x88\xdf\xfa\x71\x38\x81\xfb\xeb\x47\x8a\x3f\xd0\x86\x54\x88\x8e\x1e\x73\x09\x0c\x1f\x64\xff\x05\xad\xd6\x2c\x49\xd3\xe3\x65\x9a\x16\x28\x1a\xf4\xbf\x43\x5a\x97\x58\xc6\xd3\xa9\x0a\xf4\xd5\x29\xee\x8a\x49\x9c\xa6\x9d\xda\x5e\x46\x74\x4c\x56\xaa\xc6\xb0\x33\x8f\x27\xd7\x49\x46\xc1\xd7\x01\xeb\x8a\x43\x5e\xaa\x30\x3b\xc6\xb6\xd1\x04\x5d\x2f\x16\x43\x89\x7e\xbc\x98\x0c\x69\x6f\x46\xf9\xe4\x1a\x72\x12\x45\x79\xef\xc9\x62\x82\xe4\x43\x8e\xae\x12\xb3\x78\x5e\xe8\x5f\xf0\xa6\xce\x7b\xe2\x7f\x38\x29\x8e\xe4\xc8\x43\xde\x33\x7f\xe3\x22\xf9\x53\x7c\x10\xff\x53\x51\xd3\x64\x53\x05\x8e\x31\xc1\x44\xab\x52\xc3\xea\x3f\xf9\xd6\xcd\x97\x8d\x5b\x59\x4f\x4d\x78\x27\xeb\xb9\x0d\xd1\xd0\xfd\x3d\x2a\xc6\xf0\xa4\xa4\xee\xaf\x7f\xd9\xa7\x9c\xba\x05\x92\x89\x6f\x4c\xf0\xa2\xf7\xcb\x64\x8a\x94\x9b\x65\xb9\xb2\x77\xec\xbf\xa9\x1f\x11\x70\x34\x6e\xd4\xe6\x24\xa0\xcd\x91\x19\x46\x37\x08\xc9\xbc\x2c\x7e\xdd\x2e\x97\xba\xa4\x44\xdb\x30\x39\x76\x73\x7b\x60\x19\x27\xae\x67\x69\xae\xa6\x1f\x67\x7e\xf5\x4c\x3d\xfd\xf4\xb7\xf5\x96\x84\xc8\xea\x9c\x0b\x37\x07\xe6\xbf\x95\xc5\xa6\xce\xbd\x67\x73\xc3\x9b\x97\x11\x95\x2d\xdc\xb6\x0f\xd3\x86\xeb\x8b\x0a\x0a\x47\x7c\x6c\x32\x7f\xc9\xd7\x31\xd6\xed\x46\xc0\xc2\x50\x1e\x31\x64\x1c\xdf\x4c\xd4\xbf\xfe\x0e\xed\xfd\x91\x27\x59\xd4\xe9\x28\x16\xc4\x62\xd9\xb5\x18\x5d\x6b\x3b\xd7\x60\x85\xc7\x5d\xb9\x96\xc2\xd3\x88\x2d\x64\x6e\x61\xff\x3e\x32\x61\xa1\x65\xd0\xee\x9d\xc1\xb0\x8f\x9c\xaf\xe7\xf1\xd5\xce\x53\xf5\x69\xc1\xe8\x22\x66\x74\x97\x5d\x15\x3b\xcf\xd5\x37\xb9\x64\xf0\xe9\xa5\xfa\x64\x74\x23\x3f\xe4\xf9\xe7\x9d\xc1\x0b\xf5\x59\x3d\xf3\xc1\xc7\x67\x4f\xfd\x51\x40\xeb\xbd\xf3\xc2\xef\x54\x3e\x4f\xec\x0c\x9e\xea\x8e\xa5\xbc\x08\x1d\x3c\xfd\xf6\x85\x57\xf7\x40\x79\x32\xec\x7c\x3b\xd0\x5d\xdf\x32\x21\x85\x4e\x77\x06\xfd\xa7\xba\xdf\xdb\x24\x4d\x55\x28\xb8\x9d\xa7\xfd\xe7\xa2\x5f\x8b\x98\x30\x86\xcd\xc6\x46\xc4\xbb\xcc\xa9\x90\x70\x97\x76\x6c\x6c\x44\xb4\xcb\x51\xf9\x81\xf6\x04\xb1\x1a\xbc\xc0\x11\xc5\xab\x7c\x31\x18\xf2\x52\x27\x70\x62\x84\xf6\x0a\x08\x9d\x96\x11\x5a\x09\x85\x6e\x6e\x78\x8e\x22\xd6\x5b\xe4\x8b\x0f\x45\x84\x30\x45\x2d\xda\x4b\xf3\x78\x6a\xe8\xd0\x4d\x5f\xb0\xd1\x08\xab\x91\x9e\x3e\x6d\x18\xc9\x64\x2c\x79\x97\x33\xf5\x00\xc5\x45\x67\x85\x09\x27\xf3\x01\x82\x3c\x98\x9e\x06\xdf\xaf\x83\x59\xc6\x93\x11\xed\xe5\x03\x51\xcf\x79\xd8\x02\x35\x82\x85\x68\xf0\x50\x3f\x30\xb3\xac\xf2\x25\xa9\x7c\xc9\x49\xb2\x33\x82\x17\xf7\xb1\x34\xda\xf2\x87\x57\x91\xd6\x70\x8e\x4a\xdc\xf9\x23\xe1\x1d\x0b\x43\xff\x21\x18\xce\xe6\x71\x9a\x1e\x98\x28\xaa\xff\x3d\x48\x2c\x3e\xfb\xdf\xd6\x03\x31\xba\x1e\x8b\xab\x5f\xae\x28\x57\xe3\xab\xce\x82\x77\x48\x41\xe0\x83\xbc\x5b\xa0\x5a\x92\x0f\xa8\xf0\xec\xc9\x10\xc2\xc1\xaa\xba\xfb\xe3\xd9\x77\x01\x10\x32\xf8\xe9\x69\x9e\x73\xf9\xd4\xc7\xdd\xa5\x7b\xf6\x15\x10\xbb\xf8\x09\xf7\x55\xa6\x41\x73\xfa\x7e\x5e\xed\x7b\x05\x8d\x86\xac\x04\x1f\x65\x0f\x0b\x3a\x8a\x9e\x36\x2e\xca\x76\x64\x84\x3d\xc1\x1e\x44\x68\xc8\xea\xe6\xfa\xf4\x5b\x4c\xbd\x8e\xb9\xe8\x98\x11\x6e\xc0\x4c\x66\x11\xeb\x76\x37\x38\xc0\x26\x2a\x8e\xc0\x24\x77\x4c\x58\x8b\xeb\x1e\x73\x84\xcd\xdf\x09\xc2\x15\x73\xe0\x6c\x47\x16\x9b\x1d\x94\xa1\x21\x77\xc0\x01\xc7\x5d\xee\x00\x8b\x1b\x7f\x38\xa0\xbf\x58\x03\x7a\x84\x5a\x06\xea\x1d\x0b\x27\x75\xc6\x8d\xa9\xdb\xd9\x77\xd0\x99\x77\x72\x71\xb8\x62\xda\xad\xce\xdf\xe7\x4c\xc6\xdc\x04\xe6\x86\x72\xca\xf4\x45\x57\x21\x1c\x3b\x39\x1d\xfa\x83\xbe\x0c\xd6\xb7\xd6\x9e\x41\xec\x1d\xbe\x9d\xbd\xee\x6f\x67\x5b\x5b\x68\xc5\x46\xd9\xd6\x60\xec\xd3\x98\x32\xdc\x4b\xf4\xb6\xfd\x2b\x95\x9b\x49\x5a\x6d\xf2\x6a\xb8\xcc\xd3\x83\xfd\xb7\x6d\x13\x74\xbe\x0d\x6e\x01\x07\xea\x51\xd4\x90\xec\xd8\xb9\xec\x36\xa2\x0d\x7a\x7f\xbf\x41\x47\x39\x1f\x6b\x96\xa2\xe0\x8f\xc9\x40\xe6\xe4\x49\x1e\xfd\x48\xc7\x64\xa3\x5f\xca\xec\x15\xa2\x73\x41\x77\xe3\x34\xcd\x27\x52\x0e\xc8\x67\xb3\x82\x72\xd4\xb2\x3c\x92\xf8\xac\xa2\x20\xaf\x44\x4f\x43\xa6\xec\xf8\xb3\x92\x70\xb5\x3f\x23\x2f\x09\x8e\xb8\x67\x69\x36\x85\x4b\x41\x7f\x14\xcb\x29\x98\xd1\x69\x6f\x4e\xd9\x15\x8d\x98\xfc\x85\x10\xde\x88\xb9\x6b\x10\xdb\xe2\x24\x2b\x41\xc7\x29\x41\x51\xe6\x63\x72\x48\x8a\x01\x02\xfb\x12\x07\x6e\x82\x76\x64\xb9\xf4\x43\x93\x63\x10\xf0\xb7\xc3\x36\xa9\x9a\xd7\x90\xb9\xee\x02\x61\xd0\x37\x5a\xd1\x60\xc0\x3d\xb1\x36\x28\x7b\xc1\xf1\x8f\x94\xe4\x5c\xb1\xa9\xcb\x8a\x2f\x25\x60\x35\x4d\x0a\x5e\x61\xe0\xb0\x53\x64\x5c\x26\x2c\x2b\x37\x1a\xe3\x15\x18\x94\xfb\xef\x8e\xbc\xe6\xdd\x51\xd0\x38\xc1\xac\x6a\xcf\x89\x16\xf8\x2b\xca\xa8\x6d\x86\x75\xf3\xf2\xb7\x81\xa5\x89\xe6\xe0\xda\x36\xfe\xc9\xa4\xb2\xa1\x1c\x03\x22\x6f\x53\x69\x2e\x40\x5b\x0f\xcd\x29\x8f\xb5\xe1\x10\x6c\xb8\x2c\x48\x73\x68\x23\x92\xa8\x7c\xaf\x5e\x94\x12\x07\xa5\xc0\x4d\xba\xb9\x85\xf5\xda\xdb\x74\xc2\x16\x25\xd4\xcd\xfc\xcb\x40\x0a\x0d\x63\xe2\xd8\xae\x75\x28\x3d\x65\x9d\x1d\x03\x51\xcd\x08\x33\xa1\x0b\x2a\x8e\x11\xac\xdb\x65\x3a\x8b\xbf\x4a\x45\x95\x60\x31\x55\xfd\x50\xdb\xca\x48\xca\xa3\x04\x7c\xbd\x8d\x1b\xb1\xcd\x4c\x77\x67\xd2\x96\xdb\x89\xb3\xfa\x59\xe3\x0c\x0c\x4a\x5c\x57\x2b\xd9\x03\x75\xce\x9e\xef\xe7\xb4\xc1\xbb\x5d\xb9\xc5\xe9\x50\x7a\x75\xa9\xcc\x64\x8a\x23\x97\x6b\x3a\xb5\x8e\x8d\xff\xaa\xb1\x0f\x0b\x84\x8d\xcc\x89\x20\x6f\x38\x32\x37\xfc\xbd\x37\x09\x81\x26\xd2\x51\x5c\xf0\x16\xa7\x5f\x78\xc7\x2e\x3b\xf7\x97\xdd\xcd\x8a\x9c\xf9\x59\x91\x75\x13\x64\x25\x49\x8d\x75\xed\xe1\x45\x31\x8f\xaf\xf4\xfc\xb7\x75\x17\x36\x1d\x34\xaf\x0e\x64\xf2\x7e\x3f\x34\xba\xf7\x18\x17\x51\xeb\x81\x14\x9a\xfe\xe1\x95\xdd\x83\xcc\xc9\x16\x2c\x48\x60\xc4\x89\x71\x2d\x02\x67\x9b\x1d\x6a\x85\x1b\xa4\x23\xa2\x6a\x14\xc3\x3f\x4e\x1a\x74\x8b\x59\x8e\xcc\x69\xbc\xae\xa7\x26\xbe\x0f\x57\x25\x8d\xa8\x97\x1e\x51\xea\x6d\xf4\x19\xa9\x78\xd4\x9b\xdd\x06\x10\xdf\xdf\x4f\xe4\xff\xcc\x23\xb6\x35\x38\xbc\xbf\xaf\xba\x19\x95\x11\x47\x3b\x83\x61\x24\x80\xee\x76\xe1\x66\xda\xe9\x0f\x21\x78\xdc\xce\xb3\x61\xcd\x28\xe0\xd3\xd4\xed\x0e\xc0\x08\xd2\x3a\x29\x89\xfa\xcf\x87\xd7\xd0\xee\xdb\xe1\xa0\xd4\x42\xc9\xf3\x67\x9a\xc7\xa8\x5e\xfc\x26\xad\x28\x13\x68\xe7\xae\x47\x17\x48\x0d\x4a\x5c\x13\x35\xab\x21\xf6\x5c\xee\xff\xf9\xf3\x87\x07\x31\x5e\x1a\xee\x68\xfc\xab\x46\xf9\xae\x79\x14\x6b\xd3\x0a\x9c\xfc\x44\xb0\x0e\xce\x74\x20\xf3\x5b\xf3\x50\x10\x9d\x2e\x41\xf2\x48\x24\x05\xf8\x90\x9e\xc7\x57\x57\x74\x2a\x76\xf6\xfd\xbd\x96\x3b\x7f\x4e\xb8\x0c\xe2\x39\xe5\x51\x8e\x39\x4e\x5c\x5e\xf7\xf9\xb7\x0f\x23\x61\xcd\x74\x4d\xec\x3f\x97\x37\x7f\xfe\xe2\x6f\xf5\xa9\xa2\x10\x3a\x82\xc1\xf7\xa2\x3f\x79\xaf\x81\x17\xbe\xb2\xfc\xb3\x03\xf6\x55\x85\x7c\x11\x16\x7d\xeb\xb4\x7d\xeb\x65\xf0\x33\x55\x5e\xd8\xd6\x0d\x35\x9e\x5a\x79\x93\x29\xc9\xc4\xe3\xfb\x7c\xa9\x43\x26\x24\xa7\x93\x7c\x4a\x75\x96\x30\x86\x5c\x9c\x3f\xeb\x07\xdd\xe9\xa0\x16\xd0\xa9\x93\xc9\xfe\x38\xcf\x8c\xc7\xad\xd3\x95\x51\x53\x3d\x3c\x6a\x2b\xb3\xf2\x81\x64\xf7\xe5\x87\xd3\xf8\xd6\xdb\xa5\xcf\x06\xd5\x25\xb3\x72\x06\xd5\xda\x8a\x48\x31\xf9\xde\x6c\x9e\x36\x36\x35\x72\x07\xef\x2d\x28\xfd\xec\xae\xbf\xdb\x81\x23\xca\xe1\x7c\xf1\x34\x40\x8a\xa3\xdb\xe4\x68\x8b\x19\xf6\x7e\xba\x5c\xf8\xe2\x63\x28\xb5\xb9\xac\xba\xb7\x9d\x42\x61\x57\xaa\x2d\xfc\x3a\xa1\x56\x44\xc1\xe1\x55\xfa\x36\x94\x23\x7c\x19\x54\xcb\x11\x2d\x0a\x82\xb7\xb7\xb7\x5c\xdc\xbf\x08\xb5\x19\xb4\x07\x41\x22\xbc\xb1\xbe\xeb\x2b\x41\x89\x7e\x81\x67\x64\xdb\x3a\x14\x84\x1b\xf6\xa6\xc9\x76\x76\x99\x4a\xb3\x7b\xdb\xc3\x53\x5f\x06\x53\xed\xb4\x88\xeb\xd6\xac\xd9\x25\xae\xe4\x17\x8a\x9b\xd4\x24\xc7\x63\x48\x4b\x80\x4a\x9c\x0c\xb4\x20\x2f\x9e\xaf\x15\x2a\x85\x28\xe6\xa8\x3c\xb8\xa3\xec\xd0\x83\xdb\x10\x56\xc6\x97\x4c\x9e\xfa\x77\x42\x3e\xd4\x0f\xf9\xf2\x93\x5c\x83\xcc\xa4\x98\xc6\x05\x49\x1c\x41\x12\xa7\xc4\x08\x93\xc9\x2c\x4a\x5f\xf7\xd1\x2a\x26\x71\x4f\x19\x14\x1b\x11\x69\x49\xfa\xdb\xcb\x57\xe9\xf6\x72\x73\x13\xc5\xae\x96\xa9\x18\x2d\xc7\x38\xef\xc5\x3c\x5a\x22\x21\x46\xb8\x60\xb8\x10\xc4\x90\xff\x36\x4e\x53\x7f\x3f\xd4\x29\x63\x2a\x7a\x1e\x45\x26\x2a\x94\x3f\x41\x28\xd1\x87\x4c\x08\x03\x57\x39\xcf\x61\x13\x6a\x8f\x5d\x99\xbf\x8f\xf5\x8c\x0a\x1a\x34\xd2\x51\x82\x5a\x39\x9c\x52\xaf\x19\xae\x5c\x22\x33\x1e\xe5\x82\x51\xb1\xe0\xd6\x29\x10\xff\x12\xb8\xe2\xca\xfa\x0b\xe0\x3a\xcd\x1e\x03\xee\x77\xb5\xd4\xc6\x80\x4b\xe9\x67\xab\x70\x93\xae\xc9\xa6\x7b\xa7\x97\x97\x75\x57\x9c\xa2\x71\x8f\xbb\x91\x67\xee\xbb\x45\x54\x3b\x49\xee\x11\xda\xef\xcc\xe9\x83\x9c\xbb\x1c\x5b\x95\x54\xcb\x28\x99\x78\xaf\xc1\x48\xca\x28\x6a\x41\x39\x21\xd9\xcc\x59\xb3\x80\x10\x08\x07\x92\xdd\x97\xf9\x49\x3a\xb5\xf2\xdd\x44\x40\x4c\xa8\x76\xdf\x70\xa6\x66\x9e\x50\xd5\x7a\x50\x27\x7e\x9d\x5c\x41\xcc\x9d\x87\x24\x95\x94\x45\x74\xe7\x72\xfd\xac\x97\x14\xca\xa4\x47\x60\xb3\xc7\xa8\x96\x02\x22\x04\x3b\x16\x9e\x04\x23\xc3\x42\x2f\x1e\x3d\x37\xf0\x37\x36\x5c\x35\x4c\xf4\x8f\xe5\x7c\xb1\x95\xcc\xb6\xb2\x9c\x6f\xa9\x58\xe5\x53\x67\xda\xfe\x9b\x50\x8d\xa0\x93\xf5\x40\xa7\xb3\x7b\xe8\x04\x89\xb4\x16\x56\x02\x71\xba\x33\x76\x45\x39\xa9\x4e\x1f\x44\x1e\x2c\x8b\x87\x0c\xbb\x9d\x6b\x77\xaf\xd6\x06\xed\xc5\xe9\x6d\x7c\x57\x9c\x1a\x54\x74\xbb\x75\xf2\x51\x62\x4f\x34\x03\xa3\x2f\xc0\xe3\x9d\x7e\xde\x7c\xb4\x88\xa6\x30\x3b\x7f\xfc\xae\x91\xd3\xf3\x50\x3b\x4d\xa6\x12\xa5\x77\x8d\x08\x75\x65\x41\xa7\x9f\x9e\x03\xb9\x95\x14\x42\x15\x7e\x0d\x5f\x29\xc3\x38\x07\x9a\x61\x97\x5f\x0d\x1f\x26\x6a\xfa\x30\xd1\xf6\xd6\x74\x13\xb2\x03\x5e\x37\x5e\xcc\xd1\x35\x9d\x7c\xff\xb5\xbc\xb3\xdb\xb1\xc7\x9d\xf4\x6d\x4f\x90\xb6\x35\x14\x3e\xe2\xca\x97\xa2\x71\xc4\x06\xea\x9d\x23\xc4\x49\x6e\xe1\xd2\x44\x3b\xad\x27\xda\x39\x6a\x71\x92\xea\x43\x5f\x47\xab\x53\x84\x4a\x63\x5a\xb0\x41\x48\x6c\xf8\xc5\x06\x08\x62\x84\x12\x5b\xcb\x42\xb0\xac\x87\x20\x46\xad\x84\x2c\xd7\x41\x20\x6e\x6c\xd1\xc1\xc4\x97\xbc\xaa\x59\x1f\x38\xc4\x7a\x6c\x4d\x20\xac\x70\x4d\x4e\xd5\x68\xe2\x2e\xc6\x0b\xcd\xbe\x39\x5d\x56\xf2\x35\x38\xf5\x7d\xd9\xd4\x7f\xdf\xe7\x7d\x08\x90\xbe\x4c\xd3\x16\x87\xe0\x16\xbc\x07\x89\x36\x20\x39\x81\xff\x04\xc7\xfb\xd2\xeb\x4d\x14\x38\x43\x7b\x79\x39\x5c\xde\xe3\x5b\x5f\x1c\x74\x9a\xf8\x31\x72\x5b\xa0\x7b\xd7\xf1\xbd\xa2\x11\xc7\x6c\xac\x59\xd7\x9b\x46\x33\x4f\x86\xb9\x8e\xf5\xc6\x21\x75\x92\x83\x2d\xa6\x94\x97\xb5\xa8\x14\x7c\xbe\x03\x64\xf8\x50\x24\x28\xa6\x4e\x2e\xcd\x94\xc9\x42\x52\xae\x7f\xb9\xac\xd9\xfe\x2b\x37\xd0\xf8\xb0\xc0\xa1\x99\xef\x30\x2d\x3d\x9c\xe0\x25\xa1\x61\x5a\xf8\x09\x61\x5a\x56\x2a\x70\x82\x63\xbc\xc4\x10\xd2\xa7\xb2\x82\x62\x26\x0e\x62\x26\x12\x31\x53\x02\xb6\x36\xe7\xf1\x55\x34\xa9\xf0\x11\x28\x9a\xd6\x89\xf5\x37\x3c\x9a\x62\xd1\x83\xbd\xd8\x6f\xbe\x4a\xf3\xe7\x5c\x48\x0a\x8b\x46\xb7\xab\x00\xf4\xb5\x7e\x72\x7c\x7d\x31\xb2\x8e\xbd\x00\xa5\xe5\xed\xb4\xe6\x16\xa1\xa8\x72\xc7\xe9\x15\xe3\x58\xf7\x34\x64\xa0\xeb\x4b\xb0\xd3\x97\xd6\xb7\xd6\x68\xfe\x12\x9c\xa3\xfb\xfb\xc8\xdf\x73\x81\xf1\x2f\xc3\x1c\x3d\x06\xbe\x04\xd9\x3b\xe5\xdb\x41\xc8\x22\xe2\x7c\xf1\x6c\x98\xb9\xdc\x6d\xf8\xce\x98\x07\x9f\x98\xd8\x60\xd9\x8e\xff\x31\x43\xfa\x45\xd6\x39\x58\x35\xa1\xf3\x21\xf4\x8e\xbb\xe1\x9f\xd6\x02\x94\x18\x80\xc2\xd1\x6b\xb7\x77\x61\xe9\x24\x4e\x49\x12\xc0\x96\x48\xd8\x60\x4f\xfb\xd0\x55\x62\xf4\xe7\xb8\xc0\x1b\x1b\x0c\xa7\xf5\x9c\x6e\x5c\xb7\x49\xaf\x78\x14\xe3\xa5\xb3\x45\xaf\xd6\x6d\xd1\x60\x83\x5a\x75\x34\x0d\x7c\x5c\xf4\x46\x95\x1b\x73\x11\xf3\xc9\xf5\x96\x82\xbe\xd3\xd2\x8c\x14\x70\xc8\x66\xa7\xb3\x47\x29\xa6\x59\x75\xbf\x9a\x41\x87\x1c\x5b\xf5\xb4\xda\xb2\x6b\x36\x69\xbd\x7a\x5a\x2b\x9d\x8d\x8e\x16\xb2\x03\xde\xa0\x47\x41\x07\xbb\x55\x2c\xfc\x65\xe5\x81\x51\x3f\x2c\x5e\x1c\x00\x43\xb5\xb7\xdf\x41\x2d\x2d\x40\xd4\xa8\x22\xbd\x37\x67\xee\x3e\x64\x16\x34\x62\x38\xf6\x98\x93\xef\x6a\xa4\x1e\xd9\x81\x92\x7c\xfc\x1e\xae\x83\x77\xf5\xef\x42\x35\x9a\xa7\xf7\xc2\x09\xc9\x1c\xde\x24\x73\xb9\x92\x47\x68\xba\x70\x5a\x43\xef\xeb\x2c\x52\xe8\x6d\x7b\xc2\xa3\x04\xa7\xb8\xc0\xb1\x0b\xde\xcb\x26\x4b\x8c\x75\xb7\x88\xa1\x62\x59\x49\x18\x4e\x08\xe3\xd2\xa2\x60\x2f\x5e\xc4\x97\x49\x9a\xf0\x84\x16\x91\xca\x56\x89\x04\x99\x58\x8d\x2e\xf9\x78\xb8\xd1\xc7\x53\xf3\x04\x34\x64\xd8\xf4\x82\x27\x4e\xc3\x61\xa2\x2e\x33\x38\x99\x2a\x69\xbe\x7c\x3e\x83\x84\xfe\xf0\xa7\x7c\xba\x94\x0f\x3f\xe1\xdb\xb7\x6b\xe4\xf1\xf2\x59\x1d\xf6\xad\x01\x09\x8e\x49\x52\xd1\xb1\x3f\x0e\xf7\x82\x3d\x0c\x19\x8f\x81\xca\x0d\x56\x79\x59\x8b\xd1\x0a\x9e\xce\xaa\x78\xc5\x31\x2e\xa4\x96\x12\xc2\x57\xc7\x5c\x70\x77\x52\xac\x13\xc3\x2e\x33\x46\xe3\xc9\x35\x18\xe5\x46\xa8\x95\x91\xb8\x4c\xea\x6c\x2b\x5e\x3a\x5a\x2a\xcc\xb0\x52\x28\x65\x25\xa1\x7a\x8b\x45\xa8\x15\xf3\x28\x41\x3b\x8c\xc8\x2c\x09\x43\x2e\x16\x2e\x62\x24\xd1\x37\x20\xaa\x2c\x62\x62\x16\xd1\xe8\x54\x57\xce\x1a\x26\xfe\xca\x71\x1c\x32\x24\x6b\xd6\xd0\x65\x6e\x5e\x5a\x75\x2a\xc3\xb5\x87\xc3\x65\xca\x37\x60\x1e\xcd\x48\x62\x24\xb1\xe0\xba\x8c\xde\x4b\xab\x2d\x65\x70\xa5\x64\xd5\x2b\xc5\xec\x0b\x5f\xa3\xc9\xc4\xb6\x48\x5e\xbf\x7e\x8e\x53\xf2\xb2\x9b\xe0\x25\xf9\xae\x6b\x6f\x13\x59\x07\x0c\x4d\x74\x7e\xf7\xd3\xdd\x5f\x5a\x74\x34\x1b\xcb\xd4\x05\x51\x0e\x5c\x91\xb8\x42\x52\x84\x73\xab\xa7\x9c\x8d\x5d\xf8\xea\x0c\x64\x1c\x8d\xb4\xe8\x8e\xce\x17\xfc\xce\x17\x9f\x5e\x36\x52\x28\x85\xbb\x89\xcc\x45\xef\x92\x2a\x0f\x2d\x35\xac\x65\x60\x0d\xe7\xe9\xa3\xc5\x89\xb7\xfc\xa3\xb3\x1d\xf2\x92\x64\x62\x93\xe5\xa8\xdb\x8d\x72\x12\x06\xa4\xd2\x94\xcf\xb6\x20\x62\xed\xc0\x36\x83\x39\x54\x45\x13\x00\xe8\xce\x68\x4d\x34\x97\x96\x80\xfa\xd0\xee\x3a\xb1\x89\x93\xca\xc6\xcd\xc5\x96\x2d\xa3\x0c\xe7\x38\x91\xd1\x8f\x4d\xf7\xb1\xea\xbe\x28\x09\x04\x26\xcf\xb8\x34\x67\x75\x9a\xe3\xe7\xea\xc1\x21\x25\x89\x4c\x70\xa6\x22\x02\x15\x78\x69\xbf\x40\x68\x1f\x3c\x91\x31\xf5\xb5\xad\x65\x04\x02\x52\x32\x8b\x26\x68\x95\xc8\xc8\xe0\x8e\xf6\x74\x4a\xfa\xdb\x53\xeb\x72\x3c\xd5\x56\x0d\xd7\x24\x1d\x4d\xc7\xad\xca\xa3\xe3\xb5\x32\xab\x32\xda\xb9\x6b\xc7\xb6\xea\xda\xfa\x24\x5b\xab\x90\xe1\x0c\xcc\xa0\xa7\xc3\x45\x49\x26\x78\x4e\x66\x6a\x2c\x7c\x43\xfa\xdb\x37\xaf\xe6\xdb\x37\x9b\x9b\xc8\x74\x31\x1b\xdd\x8c\x2d\x74\x57\x3a\x4f\xc7\x67\x7a\x57\x44\x0b\x84\x2f\x49\x7f\xfb\xf2\xd5\x95\x06\xf7\xd2\x6d\xba\x18\x5d\x8d\x2e\xc7\x63\xd4\x4a\xd4\x16\x67\xf8\x0a\x2f\xf1\x1c\x6f\x0c\x50\xc9\xc2\x17\x18\xf7\x83\xdd\x78\xdf\x37\x3e\x82\x24\xfe\xa6\x63\xc1\x46\x33\x84\x26\x2e\x49\x02\x9a\xec\x70\x4b\xc4\xd5\x2d\xa1\x69\x19\xd0\x10\x58\xf5\x02\x7f\x3b\x78\x8a\x2a\x96\xfc\x9d\x37\x9f\xde\x77\xa4\x6c\x92\x4a\x91\x53\xd5\x7e\xf1\x5c\xec\xec\xb4\x22\x01\xc9\xba\x4b\x32\xe8\x72\x3c\xf1\x5a\xbc\x14\x0d\x26\x15\x6d\xa9\x16\x7c\xdc\xaa\x83\xa7\x50\x79\xea\x9a\x10\xca\x7a\xd7\x24\xd6\xf2\x15\xf0\x4b\x58\x4d\x05\x4f\x70\x8a\xa7\x78\x63\x63\x09\xab\x00\xf9\x9e\xaf\xa1\xc5\x8c\xc4\x5a\xa4\xba\x46\x7a\x80\xa7\xdf\xbe\x40\xdd\xee\x46\x45\xc0\x9a\x81\xaa\x2c\xe0\x5d\xcf\x78\x34\xc3\xd7\x38\xc6\xa9\x4b\x6a\xbe\xaf\x61\x17\x2a\x52\x68\x78\x9f\x97\x15\x02\x92\x4b\x89\xcf\x97\x76\x5b\x79\xa3\x28\xec\xdb\x6d\xea\x57\x21\x70\x40\x05\x15\xc7\x7b\x96\x2f\xa5\x11\x5d\xa0\xbd\xf0\x92\xd3\x3a\xd3\x18\xa8\x2e\x2a\x7a\x03\x7a\xdb\xbe\xf3\x14\x4a\x95\x77\xba\x87\xc5\xa2\x3a\x29\xa4\x59\x2a\xaa\x0a\xc9\x41\x3c\xb6\x18\xe4\x8e\xc2\x43\xc1\xcb\xbf\x04\x55\x28\xac\x7d\x35\x58\x55\x99\x0d\xb8\x17\x2d\xde\xdc\xf1\x3a\x4f\x12\x23\x42\x14\x92\x6d\x9f\x26\x13\x6e\x22\xec\x42\x43\x6a\xa3\x85\xcc\x9d\x58\x24\xb5\x81\xc5\xf5\x43\xf0\xea\x46\xda\x46\x39\x01\xd6\x32\x0c\x19\xee\x92\x4c\x48\x3f\xad\x0e\x74\xad\xa2\x0d\xba\x63\xe9\xb8\x18\x81\x54\x05\x51\x5d\x92\x35\x49\xdd\xe4\xf5\x55\x33\xee\x5f\x1d\x2c\x2b\x5d\x75\x88\xd5\x95\xcf\xfd\x70\x1f\x23\x8a\xf9\x58\xa5\xc6\xb5\xb6\x39\x2c\x08\xcc\x55\x18\x2a\x9e\xb5\x13\xed\xd8\x6d\x0a\x51\x32\x8b\x3a\xe2\x4e\xe9\x98\x60\x84\x3a\xd1\x9c\x03\x53\x36\x76\x26\x92\xed\xdc\xf2\x88\x62\xf5\x01\x5f\xf0\xc8\x9d\x17\xc2\x89\x8d\x7e\x8e\x93\x9e\xc6\x3c\x1a\x42\xab\x0c\xab\x07\xae\xa6\x6a\xca\x0c\x97\x30\x31\x68\xc5\xa9\xbf\xdb\x95\x63\x03\xc4\x58\x87\x40\x73\xf2\x2b\x61\x6e\xbb\x0a\x36\x8e\x63\xf3\x78\xe1\x79\x4f\xb8\x16\x81\x9d\xce\x70\xe0\xfe\xa6\xa3\xfe\xd8\x33\xe1\xb1\x16\xa1\xfd\x6d\x6e\x1d\x66\xf8\xe6\x26\x72\x2c\xe7\xac\x97\xc7\x88\x8f\x1b\xb2\x4f\x38\x76\x87\x8f\x1d\xc1\xbc\xa9\xf3\x71\xab\xce\x48\x4f\xf9\xaa\x18\x03\x05\xc7\x65\x45\x10\xb0\x25\x84\xe2\xf2\x9c\x4c\x6e\x95\xf5\x27\xe8\xc4\x37\x06\xd2\x83\xba\xd2\x33\x7a\x48\x47\x03\x3d\x38\x0a\xe7\xf8\x61\xbd\x09\xc7\x56\xd8\x17\xbc\x58\xad\xf6\x84\x35\x68\x4f\x18\x08\xab\x76\x1a\xfb\x3c\x88\x2d\x07\x37\x1b\xc5\x03\x37\x6a\xae\x5b\xa7\x5f\x5f\xe7\x44\xa3\xc3\xa6\xa8\x21\xac\x07\xb2\x89\xd2\x2a\x14\x26\x22\x2f\x95\x82\xf9\x15\xe5\x11\x47\xdb\x10\xae\x37\xef\x76\x93\x1a\xff\x82\x7c\x73\x80\x63\x84\xb5\x23\x6c\xb7\x1b\xe9\x3f\xc5\x69\x8f\xad\xf7\x49\xbf\xc6\x29\x64\xe5\x89\xc6\xea\x22\xad\xde\x9c\x96\x49\x16\xa2\x77\x5c\xa7\x26\x6f\x25\x36\xe4\x81\xd6\x5d\x67\xfe\xd5\xe8\x25\x97\x74\x95\x6e\xdf\xff\x97\x20\x0b\x65\xf2\xc4\xb0\x34\x99\xc7\x4e\xd4\x38\x34\xfc\x25\x44\xe4\x24\x51\xfc\xce\x71\x3c\x07\x66\x62\x8d\x52\xe0\xfb\x6f\x1b\x95\x02\x3e\xcb\x99\x5b\xd1\xd8\x63\x3f\x81\xe9\x54\x22\x5a\x21\x44\xec\x95\xc7\xf0\xa4\x25\x49\x20\x1a\x31\x8f\x52\x9c\x23\x94\x91\x5c\x00\xf7\x21\x51\xe7\x49\xfa\x6e\x45\xb1\x62\xe2\xaa\x3a\x01\x75\xc2\x04\x9b\xfa\x45\xf5\xd1\x28\xec\x4a\xc6\x53\x95\x08\x51\x4a\xc7\x13\x41\x91\x1e\xf5\xad\xeb\x32\xa6\x45\xfa\xba\x61\x51\x2b\x23\x89\x18\x70\xd0\x7f\xfa\x1c\xed\x2c\x7b\x71\xf1\xb3\xf4\xcb\x52\x6d\xd1\x50\x7c\xd3\x3f\xd4\x93\x51\x66\x0c\x5e\x68\x4f\x25\xa0\x43\xad\xc2\xba\x9a\xc8\x03\x75\x0e\x00\xe3\xc2\x17\x67\x26\x15\xa3\x98\xef\x9f\x3f\x72\x71\xcc\x06\xc8\xf1\xda\xa5\x91\x3b\x28\xf5\x79\xd2\xa5\xae\xc6\xe9\x70\x52\x92\x58\x2d\xd7\xd2\x59\xae\xdd\xdc\x5f\xae\xc9\x83\x0b\xb5\x5c\xbb\x50\xb6\x5b\x7f\x3d\xd2\xba\x7e\xcb\x47\xe2\x2f\xeb\x49\xe5\x8a\xab\x70\x5c\xeb\xdb\xb6\xc6\xbf\x2b\x3c\x51\xb5\x72\xb5\xd5\xea\xc5\x0f\x68\xf5\x02\xdd\x50\x5e\xa7\x11\x52\xd0\x6b\xad\x90\x3b\xd5\x50\xc5\x67\x39\x75\xee\x53\xac\x1a\x7b\x34\xdf\x6f\x89\x05\xfe\x64\xae\xf6\x22\x0f\xe9\x4a\x2b\x57\x30\x91\x0c\xe7\xf2\x46\x20\x89\x63\x22\x57\x3b\x9a\xbc\x31\x60\x3c\xbf\x37\xd9\x41\x2b\xf4\xe9\xd2\xe9\x37\x36\x07\xee\x44\xbe\x6b\x50\x14\x7b\xdb\x1e\x14\x16\xea\xa6\xba\x8e\x8b\xfd\x1b\x1d\x89\x21\x21\x99\xba\x6c\x3c\x2e\x3b\x70\x84\xb3\xf1\x2a\x13\xd7\x3e\x68\x10\x6a\x80\xac\x73\x50\x48\x77\x1d\x3f\x30\xd7\x0f\x4f\xc9\xb5\x40\x32\xa5\xe7\x4b\xcc\x8f\x41\x3f\x12\x93\xdc\x24\x24\xdd\x8e\x5f\x93\xfe\x76\xbc\xb5\xa5\xc3\xbb\xe5\xa3\x78\x8c\xd3\xc6\xbb\x57\x14\x23\x50\xb9\xc8\x3e\xc5\x25\x5c\xe0\x8d\xbe\xba\x87\xd3\x6e\x37\x73\x4d\xd0\xd2\xcd\x01\x5e\xd6\x5f\xc0\xc5\x98\x2c\xbd\x19\x37\xbb\x43\x55\x6e\x1a\xa9\xee\x91\x97\x50\x30\xdd\x84\xf4\xb7\x93\x57\x99\x64\x4c\x35\x0b\x97\x6c\x6e\xa2\x13\x6e\x4e\x2e\xa0\x61\x94\x8c\xb1\xaa\x26\xfe\x94\x41\x85\x9d\xc5\x6f\x72\xee\xf4\x37\xa7\x36\x9c\xab\x9e\xfa\x41\xbf\xee\x2a\xfd\x2b\x92\x79\xf8\x5c\xaf\x84\x67\xab\x34\x49\xd6\x2a\x4d\x98\x60\x3e\x4e\x69\x36\xa5\x4c\x11\xb8\x0c\xe7\xea\x9d\xc7\x0d\x14\x88\x59\x8d\x29\xc2\x39\x87\x00\xce\x39\xf2\x66\xa6\x85\x75\x19\x9e\xc8\x15\xf8\x8d\xe4\x79\xb6\xfe\xed\x57\x88\x8d\x4d\xaf\xbf\x26\x10\x8b\x79\xff\x55\x8a\x46\xf5\x66\xe6\x6a\x7a\x8c\x9b\x8f\xfb\x24\x6c\x3a\xe8\x54\x0d\xba\x74\x91\xa7\x1a\x77\x7b\xd4\x71\xa7\x5b\x26\xb6\x34\x84\xe1\x51\x56\x47\xe7\x5f\xf5\xa4\xad\x01\x6f\x9a\x18\xe4\x0a\x2e\x02\x67\x96\x64\xba\xa5\xe6\x91\xc2\x72\x3d\xc2\x40\xa9\xf2\x94\x6d\xa7\xc9\xb0\x1c\xc4\x4c\x8b\xdb\x78\x5a\x6a\x3b\x88\xc5\xb0\xdb\x41\x85\xda\x62\x10\xfd\xc0\xa6\x61\x50\xce\xdb\x62\xc6\x79\x4a\x7b\x49\x36\xcb\xa3\xce\xa7\x82\xb6\x7f\xd7\x29\x6e\x71\x3b\xce\xa6\xed\xdf\x05\x45\x78\xb5\x88\xf9\xf5\x6b\xf4\x7b\x9b\xe7\x6d\x08\xd6\x00\xd2\x6f\x9b\x2b\x46\xa8\xd7\x41\x98\x47\x1d\xf1\xad\x23\x79\x96\x8f\x9c\x1c\x69\x1f\xb6\xdd\xd0\x07\xcc\x09\x21\x2d\x83\xef\xaa\xc7\xc9\x7c\x12\xa7\xbe\x06\xc3\x48\xdc\x9a\x0a\x38\xe7\x5f\x9b\x71\x8a\xc3\x1e\x13\x36\xca\xb7\x06\x63\x30\x35\xb2\x11\x94\x73\x15\x52\x56\xf6\x3c\x8a\xc7\xa4\x28\x75\x94\x5d\xe5\x7f\x03\x10\x0c\x19\x96\x55\x9c\xdc\xf8\xb4\x57\x2c\xd2\x84\x47\x1d\x31\xb9\x51\x8e\x7b\xbd\x5e\x3c\xf6\xbf\x16\x52\xc7\xe6\xc4\x56\xd6\xc9\x23\x00\x13\x84\x90\x7c\x87\xcb\x3a\x52\xd7\x38\xcc\x46\xf9\x78\x87\x13\xf1\xbf\xa1\x10\x9c\x72\x43\x87\x3b\xff\xec\xa0\x6e\xb7\x90\xe5\xe2\x7f\x43\x9d\x69\x0a\x20\xb4\x7d\xe0\x98\x24\x08\xc7\x3d\x46\xa7\xcb\x09\x8d\x60\x15\xc9\x6b\xaa\xa4\x27\x58\x64\x73\xac\x5f\x84\x8f\x31\x35\xda\x2b\xf3\xf8\x12\x3e\xf6\xd7\xbc\xc9\x65\xc0\x94\x80\x33\x2b\x8f\x9c\x4b\x0a\xe7\xa8\xf5\x51\x7c\xb1\x8e\xd9\xe6\xf5\x99\xbc\x8e\x55\x70\xea\x1a\x1b\xfd\x41\xff\x81\xf7\xa2\xd5\xe8\x7a\x2c\x19\x9b\xc9\x67\xc1\x79\x52\x30\x37\x08\x9f\x13\x53\xc9\xf8\xad\x7d\xc7\x5d\x2a\xe6\x50\xbd\x23\xe1\xc9\x03\x6d\x12\x84\xf0\xb4\xee\x95\xd6\x8f\xc1\x54\xe0\x14\xe1\xd9\xba\xd7\xdc\x29\xc2\x2b\x87\xeb\x1a\x2e\x34\x6f\x36\x2f\xc9\xcc\x71\x77\x77\x78\x7b\x7c\x43\x16\xfa\xa6\xc6\x57\x0e\x3b\x70\x49\x42\x46\xe7\x46\x47\x64\xc6\x77\xe4\x2a\xdc\x8d\x97\x01\x47\x72\x87\xb0\xfc\x04\x8b\x74\xe5\x2a\xc1\xf5\x41\xbb\x08\x12\x89\x5f\x85\x0e\xf9\x08\xdf\x92\xfe\xf6\xed\xab\x89\x3e\x8b\xb7\xfa\x2c\xee\x93\xc9\xe8\x76\x8c\xbf\x90\xe5\x68\x5f\x9c\xc5\x13\x09\x90\x3a\x8b\xfb\xa8\x75\x31\xfa\x32\x26\x27\x65\x32\x8b\xee\x90\x1e\xef\x8c\xf4\xb7\xcf\x5e\xe9\x59\x6c\x9f\xe9\xce\xce\xc9\xd9\xe6\x00\x1f\x91\xbb\xd1\xcd\xe8\x6c\xac\x63\x00\x6c\x10\x72\xd4\xed\xca\x39\x44\xe7\xf8\x08\x95\xf2\x6f\x07\xc0\x0b\x6d\x0b\x6f\x2d\xe3\xe1\x46\x77\xe4\x37\xbd\xc4\x73\x54\x91\x8d\xbe\xab\x71\xde\x6a\xf2\x12\xb0\x4a\x17\xa2\x5d\x04\x76\x3a\xff\x4c\xa6\x34\xe3\x09\xbf\x33\xee\x56\x89\x3e\x33\xac\x07\xb1\x44\x2f\x53\x9b\xe6\x0e\x5e\xcf\xa4\x81\x86\x7d\x38\x8c\x1d\xf7\x7b\x97\x0f\xff\xae\xc6\x9e\x34\xe3\x94\x1d\x26\x85\x6f\xa2\xf9\xdd\x33\xc7\xa9\x03\x4a\xdd\xc2\x86\x98\x0c\x21\xdf\x25\xb8\xfa\x8c\x7e\xe1\xca\x07\xc2\x78\x07\xc9\x31\x0f\x38\x9d\xc3\x3d\xd3\x12\x3b\xfe\x2a\x29\xf4\x37\xfd\x1a\xe5\x18\xb7\xb7\x68\xef\xed\xfe\xbb\xdd\x4f\x87\xe7\x17\x7b\xbb\x1f\x77\xdf\x1c\x1c\x1e\x9c\x1f\xec\x9f\x91\x95\x17\x68\x05\xa4\x1c\x13\x63\x45\xfc\x72\x9e\xfc\xc4\x4f\x1b\x59\x05\x32\x65\xb9\x41\x55\x86\x1b\x03\xec\x84\x53\x11\x3f\x3d\x0e\xc0\xb4\x96\x21\x54\x44\xb9\x8d\x9d\x62\x4b\x75\xd0\x14\xf1\x45\x45\x4b\x11\x55\x9d\x28\x29\xc3\x8d\x81\x4c\x80\xb5\xc7\x2b\xe0\x0f\x3c\xf0\x07\x3e\xf8\x03\x0f\xfc\xc1\x57\x82\x3f\x58\x0b\xfe\xa0\x02\xfe\x60\x1d\xf8\xb4\x77\x74\x70\x7c\x70\xb4\x7b\xe8\xaf\xc6\x9e\xbe\xae\x3f\xf3\x55\x28\x92\x5a\x15\xef\x1e\x2f\xdd\x97\x58\xa5\x51\x0f\xd8\xd4\x4f\x99\x1b\x24\xcb\xa9\xdf\x4e\xb2\xb6\x7c\x2f\x32\xae\xef\x2a\xa6\x73\x47\x27\x29\xb7\x5a\x43\x9c\x3f\xd8\xb5\x4a\xd4\xbf\xae\x57\x4d\xe2\xbc\x94\x93\xea\xdd\x8e\x3e\x38\x80\xac\xb8\x76\x80\x90\x17\x7f\x0c\x4a\x82\x36\x0f\xf5\xbf\x67\x12\x76\x3e\xdc\xef\xde\xc3\x28\x59\x7a\xb1\x59\xd7\x76\x28\xab\x3e\x04\x9f\xc7\x7c\x3e\x72\xfe\x6e\x9b\xc7\xf5\xff\xb8\xf9\x7f\x7a\x18\xe2\xe0\x59\xd4\x4f\xd0\x68\x13\x33\x85\x2d\xc9\x67\x99\x28\xf7\x94\x93\x95\xa3\x68\x31\x26\x56\xf4\xb6\xfd\x99\x8b\xe3\x75\xbe\x7f\xf4\xf1\x70\xf7\x7c\xff\xe2\xe4\xf8\xf0\x97\x0b\x63\x39\x47\x4e\xf5\x09\xfb\xa3\xde\x0d\xfb\x72\x39\xf9\x4c\x39\xa1\x3b\x70\x55\xc5\x45\x91\x5c\x65\x28\x5a\x95\x98\xa2\xe1\xaa\x0c\x12\xa7\x3a\x2d\xbc\x84\x0d\xb5\xc5\x84\xd7\x65\xad\xf8\x43\xbd\x37\xc9\x6a\x90\x92\xea\x2d\x9d\xc5\xcb\x94\xbb\x3e\x85\xe4\x0f\x0d\xf6\xdb\xa6\xe0\x20\x1e\x17\x2f\x04\xf0\x53\x3a\xb3\x59\x85\xaf\x21\xd7\x13\x3b\x5f\x9b\x0c\xd4\xda\x51\x06\xc9\x40\xa5\xcf\x3f\x73\x92\x80\x06\x39\x51\x7e\x8a\x99\xbd\x8a\xeb\x90\x64\xea\xd8\x04\x2a\xf0\x5b\x85\xec\xd5\x3e\xde\x0e\xec\x86\x51\xc5\x21\x0b\x6e\x9d\x8c\x6a\x93\x88\xca\x69\x62\x80\x19\x61\x6e\xd2\x06\xd5\x3e\xda\xc2\x7d\xeb\x44\xad\xb0\x06\x26\xc0\x2d\x1c\x70\x8b\xcf\x29\x7c\x79\xa7\x85\x4c\x50\x96\xc0\xa7\x37\xbc\x94\xd6\x4a\x36\x4b\xfc\x68\x32\x1e\xe5\xbd\x27\xc5\x62\xbc\x39\xf0\x92\x7b\x48\xfd\x8e\xaa\x6e\xcc\x97\x9d\x60\x27\x61\x91\xb2\xc1\x09\x3e\x97\xd2\x14\xc5\x79\xdc\x71\x66\x43\x95\xeb\xa3\x1d\x10\x17\x44\x47\x18\xc1\xa9\x0b\xdd\x56\xb1\x39\x68\xc5\x3d\xdd\x5b\x8a\x0b\xf0\x21\x57\xda\xf6\x74\x4b\xc6\x4e\x76\xe1\xd3\x55\x97\x38\xd3\xc6\x1d\x0e\x9c\xf8\x9a\x68\xa5\x1f\x9e\x91\xe5\xd6\xb3\x7f\x5c\xb7\xa6\xa6\xcd\x0c\x5f\x63\x86\x64\xa8\xeb\xf8\xca\xee\xa2\x7f\xd3\x68\x14\x8c\xe3\xa0\x7d\x2c\x5b\x5c\x42\x64\x62\xff\x68\x49\xdc\x88\x12\xa8\x22\x07\x0e\xd3\xe6\x84\x81\x64\x36\x9d\x85\x50\x5f\x9e\xfd\xc3\xed\x4f\xa5\x42\x89\x2b\x9b\xd8\xe9\x0a\x0a\x4b\x1d\x64\x47\x69\x0a\x8c\x31\x1b\xa8\x04\x20\x6b\x4b\xdf\xa4\x74\xe5\x36\x2f\x85\x63\xc5\xc4\x94\x15\x93\x15\x79\x19\xcc\x67\x93\x0a\x71\x5a\xc3\x97\xd5\x68\x16\x79\x6f\x92\x2f\xee\xa2\x78\x53\x36\xc0\xf1\x66\x82\x5a\xaa\x31\xa1\x38\x33\x7f\x71\x67\x33\x12\x5a\x96\xc6\x4a\x4e\x9d\x3d\x88\xf2\x59\x8b\xa9\x9d\xf7\x7c\x18\x96\x98\xd6\x98\xdb\x96\x2e\x32\x77\x7e\x56\x8d\xe4\x47\x6b\x93\xe7\x10\xbd\x9f\xb8\xf1\x3c\xc3\x62\x0f\x4b\xfd\x80\x14\xa1\x4a\x65\x4b\xe6\x60\x94\x62\x15\x02\x48\xa3\x96\x3b\x78\xa5\x10\x15\x47\xba\x81\xab\xa3\x7e\x50\x7b\xd4\x05\x3e\x48\xdf\x1d\x4b\xff\x0a\x89\x00\xe4\x4c\x76\x7e\x1a\x83\xf0\x42\x86\xb1\xd1\x87\x91\xf9\xc7\x0e\xdb\x61\x58\xdd\x30\x17\x4d\xee\x85\xee\x00\x9e\x65\xa5\x39\xe6\x2c\x3c\xe2\x8d\x63\x25\xb8\x0f\x32\x50\xf4\x17\x87\x44\xc3\xe8\x31\x38\x70\x4f\xb1\x13\x75\x5d\xb4\x32\xa6\x8c\xf7\xf7\x91\xf3\x99\xfc\x5b\xa5\x75\xb0\x3d\x21\x84\xa9\x3a\x66\x62\xb1\xc5\x6c\x86\x5c\xaf\x35\xc3\xc6\xb6\x97\x3b\x49\xc0\xe9\xab\xfe\xfd\x3d\x7d\x4d\x18\x64\x49\x97\xd7\x01\xc4\x80\x37\xbb\xda\x4d\x09\xe5\xec\xb3\x70\xec\x52\x07\xb4\xb2\x54\xdb\xf1\x0b\xe7\xaf\xfb\x0e\x50\x4c\x03\x95\x29\xa0\xb4\x9b\xa6\xb3\x0a\x5b\xc4\xdb\xc7\x24\xdb\xe4\x46\x9e\xcf\x49\x7f\x3b\x7f\xc5\xb7\xf3\xcd\x4d\x94\xc8\xcc\x5a\x3d\xb0\x1f\x85\x94\x7d\xad\x47\x6d\x3a\x40\xb8\xfd\x18\xe0\xdd\x16\x80\x02\xdb\x27\x48\x38\x98\x84\x8e\x71\x53\x69\x4b\xb8\x8a\x75\xcb\x30\xdb\xb4\x41\xa6\xa8\x3e\x58\x87\x35\x81\xa4\xcc\xcd\x52\xf5\x80\x75\x3b\xf6\x70\xc3\xb4\x27\xb1\x3c\x49\xe1\x9a\x85\x1b\xd6\xdd\x9f\xb8\x8f\x6a\x28\xb3\x1d\x49\xf0\x61\x75\x4c\x8a\xad\xd1\x9b\xc7\x0b\x27\x07\xe7\xc9\x0c\x39\xda\x48\x1b\x9b\xa8\x70\xb6\xa2\xa5\xe8\x5e\xd2\x7a\x8d\x1e\xc7\x40\x45\x79\xc0\x2d\x62\x56\x50\x88\x92\x80\x07\x7d\x4b\xfa\xc4\xde\xcd\xd4\xde\xe5\xa3\x4c\x41\x7a\xe2\x0a\x46\x26\x4e\x11\x24\xae\x96\x9b\x7a\xfa\xd1\xd0\xdf\x5d\x9d\x63\x5f\x66\xe3\xd2\x5c\xe1\xbb\xaf\xa4\x78\xe1\xee\x52\x5f\xe1\xdd\xc6\xa7\x07\xaa\x44\xbd\x72\x05\xe4\xe9\xaf\x12\xc2\x26\xe2\xf3\x17\xc1\xb0\x54\xd2\x48\xac\x8f\x00\x26\x03\x4a\x99\x69\x4a\xf9\xdf\x85\xc9\x90\xd1\x10\xd1\xb9\x1e\x4f\x76\xe8\x20\x5f\xf7\x93\x98\xb6\xb2\x4a\x12\x94\x4b\x9f\xcf\x5a\x2e\xaa\x42\xe3\x44\x25\xe8\x25\x20\x17\xf0\xad\x8e\x50\xab\x69\xba\x03\xda\xf3\xc2\xf3\xb3\xbb\x8c\x5f\x53\x9e\x4c\x20\x09\xab\x20\xdf\x62\x04\x55\x31\x18\x43\x7d\xad\x1b\xc5\xa0\xcc\x8e\xe9\x8e\xb2\xcb\x4d\xf7\xd7\xb1\xa3\xf8\x80\xc7\x50\xc3\x5b\xb8\xa6\x4b\xa5\xba\x07\xc0\xe6\xcb\x21\xdb\xde\x15\x82\x13\x12\xa9\xfc\x38\x0a\x00\xcb\xa8\x14\xc8\xe9\xad\xa5\x87\x83\x9b\xd4\xdc\x33\x90\x32\xb8\xf6\x9e\xf9\x33\xbc\x67\xa4\xc9\x7c\x65\x39\x64\x94\x44\x45\x69\x2c\x4f\x43\xcd\x8d\xa3\x39\x44\x68\xdf\x78\xed\x60\x55\x9e\x97\x44\xb2\x89\x3a\xd9\x61\x41\xfa\xdb\xc5\x2b\xbe\x5d\x68\x05\x6e\x4a\xf2\x51\x31\xde\x86\x99\xc4\x66\x86\x29\x82\x10\xae\xb1\xb4\xbb\x4c\x11\x4e\x6c\x60\x18\x87\x92\x16\x63\x84\x4a\xff\xc4\x3c\x4c\x3c\xe2\x9a\xdd\xfa\x97\xee\xae\xf5\xdc\x40\xcd\xdd\x95\x29\x34\x70\xcc\x37\x99\x73\x77\x05\xbb\xd6\xa3\xb5\xb2\xc5\x00\x95\x7a\xd3\x39\x31\xae\xff\xd9\xd9\x34\x17\xdf\x9f\x35\x17\x5f\xf5\xbe\x53\x87\xa7\x72\xf9\xf9\x74\xc7\x48\x62\x72\x06\xf3\x78\x21\x91\x24\x70\x34\x87\xac\x9f\x2e\x72\xe6\xf1\xc2\xc5\x8a\xde\x18\xce\x35\x15\xa2\x44\x74\xb8\xe6\xf9\x8e\x79\xcf\x77\x74\xc4\x46\xc9\x78\x0c\x0f\x78\xa5\xc5\xd9\x57\x1d\x3b\x17\x32\xee\x42\xa6\xee\x4d\x50\xdd\xd7\x9f\xae\x4c\x9c\x2e\x66\x6e\xc2\x28\x3c\x01\xb4\xbe\x3b\xcf\xbe\x5a\x4e\x8b\x7a\xd3\xca\x46\x14\xa6\x25\x26\x67\x2e\x54\x7d\x60\xdd\x3c\x73\x6e\x50\xf3\xae\x58\x70\x7b\xe9\x8a\xed\x30\xf5\xef\xdb\x3f\xf5\x7d\xfb\xa6\xf6\xbe\x4d\x32\x4e\x59\x16\xa7\xf0\x9c\xe5\x9d\x0d\xc7\x42\xc2\xf9\xac\xeb\x9f\x7b\x9c\x5f\xe3\x4d\xe3\x5f\xa2\xf2\x72\x5f\x7f\x05\x37\x76\xb5\xe6\x6e\x7e\x04\xa8\x35\xf2\x44\x30\xf5\x46\x29\xa6\xfe\x76\x96\x70\xe6\x6b\x84\x9a\x06\xd8\x5c\x59\xe7\xef\x80\xa8\xaf\xdc\xfa\x15\xa9\x59\x57\x79\xb5\x4a\x5f\x29\xff\xc4\xfa\x95\xbf\x9a\xa2\x85\x63\x39\x44\xed\xd9\x3f\x5c\xb2\xf6\xf5\x47\x54\x67\xfd\x08\xab\x08\x18\xe1\x34\x9a\x28\xab\xe0\x1b\xb1\xe6\x1a\x95\xf7\xe1\xb3\x7f\x08\x2a\x88\x73\xfb\x73\x73\x80\x99\x35\x23\x16\x1f\x9e\x0a\xf9\xc6\xe9\x55\xdc\x43\x32\x4e\xed\x28\xc6\x39\x4e\xc6\xf5\x17\xea\x0f\x3c\x0a\xef\x51\x89\x6b\x89\x77\x67\x1f\x04\xe4\xd2\x29\x09\x86\xa5\xdd\x6e\x54\x53\xcb\x45\x89\xa0\xbe\x9f\x38\xf0\x1d\x8a\xee\xff\xd0\xa4\x6d\x95\x3b\x96\xba\xa0\x05\x32\x8e\x26\x48\xff\xcd\x85\x72\x28\x27\x57\x58\x74\x00\x18\x01\xc2\xc7\x38\xfc\x34\xa8\x7c\x1a\x8f\xf5\x04\x7f\x5a\x17\x1a\xd8\xb9\xda\x1c\xbd\xa8\xa7\x12\x0d\x58\xea\x40\xf4\x5a\x49\xe5\x96\xad\x6f\x5e\x6b\x1d\x15\x58\xd0\xbf\x95\x7f\x1c\x5a\xec\x93\xe1\x9f\xa4\x5a\xfb\x09\xc7\xff\xe1\xf8\x67\x19\x7b\xea\xcf\x07\xc4\x46\xff\xb8\xe3\xf7\xb2\xd5\x03\xc2\x26\xc2\xbf\xc8\x7a\x3f\x55\xea\xbd\x17\x23\xe3\x3e\x6a\x51\xd3\xe0\xfd\x19\xf9\x45\x5f\x10\x3f\xd6\xe2\xb5\x5e\x8b\x73\x4d\xe3\x85\xc6\xea\x82\xe5\x57\x2c\x9e\x6b\xbc\xd2\x2f\x82\x1a\x98\xb0\xcb\xfa\x91\xd7\x08\x05\x93\x25\x63\x34\xe3\x27\x8b\xb3\xe4\x4f\x71\x1b\x80\x91\xdb\xa9\xaa\x55\x15\x92\x55\x6b\x21\x23\xa7\x79\x3c\xb5\x15\xcd\xbe\x76\xeb\x10\x2e\x28\xf7\xc7\x89\x79\x1b\xb1\x85\x90\x88\x66\x4c\x68\xe9\xbc\xf1\x3b\x33\x0b\x02\x44\x56\xda\xb2\x78\x8c\xf0\xe3\xab\xcf\x16\x63\x84\x6b\x3f\x93\xea\xd7\x62\x31\xde\x1a\x94\x8b\x7c\xe1\x81\x15\x56\xa9\x69\x38\x13\x0d\x6b\x86\x61\xb1\xaa\x2d\x61\x95\x19\xe2\xd7\x81\x63\xeb\x0d\x50\x69\xa6\xf6\xd7\xb0\x54\x6a\x9b\xde\xe6\xd9\x04\xf0\x79\x46\xc0\x25\xbc\xff\x3b\xd9\xe0\x3f\x4e\xb4\xa4\xc2\x24\xbd\x41\xa5\xf9\xb3\x61\xb3\xc8\xb5\xde\xa4\x5b\xd5\x1d\x57\x82\x51\x47\xed\xf6\x30\x50\x85\x1d\xe1\x10\x14\xb1\xfd\x05\xb6\xe2\xe9\x94\x01\x40\x12\x8c\xf3\xfc\x81\x8e\x0d\xdc\x3a\x59\x4f\x75\x96\x55\x74\x66\xf4\x0b\x98\xbb\xab\x50\x47\x4a\xe5\xa3\x6a\x0d\x29\x56\xe7\xcf\x8d\x45\xae\xe0\x36\xb7\x24\x0b\x6f\x49\x88\x78\x94\x43\x26\xa4\x88\x81\x71\x4a\xf5\x68\x66\x90\x71\xa9\xb5\x16\xc3\x24\xc1\x99\xb1\x3e\x3c\x59\xfa\x07\x53\x7f\x3f\xc8\x32\x9d\xf6\xb2\xfa\x69\x45\x6d\xa6\xa7\x1d\xaf\x99\xfa\x18\x51\x34\xf4\xbe\x9f\xc9\xa4\x4d\x7e\x87\xb6\xf2\xaa\xb8\x4d\xf8\xe4\x3a\xa2\x60\x46\x89\x56\x93\xb8\xa0\xed\xfe\xd0\x7b\x14\xb1\x14\xa0\x05\xc5\x03\xbf\xd8\x1c\x44\x59\xfa\x6c\x18\xa6\xf4\x8f\x68\x2f\x5f\x0c\x54\xf1\xd3\x6a\x71\xd3\xde\x56\x2d\x9e\x7b\x2d\xe4\x7e\x77\x3a\xfc\x76\xe8\xe3\x5c\xee\x14\x59\xf6\xa2\xa6\xec\x5c\x37\x2f\xcb\x3a\x1c\xad\x3e\x50\x9b\xce\x8a\x63\x8a\x15\x66\xf4\x7d\xfa\x21\xa4\xfb\xab\x30\x8c\xdf\x90\x91\x8d\x41\xa9\x56\x75\x26\x50\x73\x26\x9f\x1f\xe8\x6d\x9b\xf7\xe0\x6f\x45\xfb\xb3\x1b\x7d\x43\x4c\xf3\xb9\x34\xa9\x84\x74\xb5\xca\xc7\x32\xe8\x97\xb0\x92\x7e\xa1\x93\x25\xb7\xa9\xb3\x57\xb6\x7b\xa3\xc3\x14\xf2\x95\x3c\x3e\x4c\xbe\x27\x6e\x6f\xb0\x5e\x52\xec\x4b\x45\xec\xb6\x97\xe5\x0b\x9a\xf7\x82\x23\x63\x8d\xc0\x32\x37\xd5\x97\x68\x00\x3e\xfb\x90\x3b\x03\xb8\xb4\x99\x22\x59\x2e\x92\x2d\x44\xfa\x80\xf8\x24\x4a\x0e\xa9\x3e\x95\x1a\xc6\x10\x59\x2a\x0b\x02\xbd\x6d\x33\xb9\xf1\x51\xa9\x22\x44\xba\xbd\x48\x0b\xbf\xfd\x2f\x13\xba\x90\x29\x75\x71\xa5\x1b\x09\x2c\xed\xc1\x43\x78\x92\x5d\xfd\x74\x44\x3e\xe8\x2b\xfc\x5f\x8d\x2f\xed\xe0\x80\x6e\x33\x26\x2c\xe7\x60\x13\x74\x29\x56\x91\x97\xf2\x43\xd5\x0e\xc0\xaf\xa8\xd3\x18\x4b\x1f\x25\xfb\x74\xf5\xef\xaf\x34\xf0\xf6\x61\x91\xd6\x8f\x7e\xdc\x24\x78\xd4\x54\xd6\xce\x60\x7f\xc0\x68\xa6\xf9\x09\x6d\x29\x5d\x2e\x62\xb1\x14\x26\x02\x9c\xff\xca\x0a\x95\x7a\x41\x95\x72\x96\xb0\x82\x43\x38\xef\xda\xea\x4e\x71\x99\xc6\xeb\x6a\xda\x52\xcf\xf4\x9a\xc2\x0e\xf5\xc0\x96\x51\x67\x34\xaa\x7e\xb5\xa8\xfa\x77\x1d\xb7\x95\x68\x54\xe9\x9f\x2e\x56\x38\x73\x43\x54\x4a\xa9\x80\xaf\x35\x8e\x28\xa7\xc9\xf4\xc0\x04\x3e\xdd\x53\x20\xc9\x2c\x75\x55\x23\x04\xd1\x19\xd6\x1a\x59\x0d\x3f\x7a\x78\x86\x70\x8c\xca\xca\xce\xd5\xaf\x39\x9c\x0e\xa9\x36\x3d\xe7\x58\xad\xb7\x39\xdb\xa7\xf2\x14\xaa\x3b\xe9\x50\x6d\xb9\x88\x41\x2c\x05\x2e\xfd\x58\xf4\x37\x9c\x09\xc9\x6d\x34\xc6\xca\x4e\xc0\x6c\x8d\xd1\xb8\x75\x12\x49\x39\xaf\x67\x08\x8a\x49\xd8\xa4\x0f\x4a\x94\x07\x6e\x0d\x30\x32\x0e\x2a\xc5\xa8\x44\xbd\x29\xcb\x17\x66\xd1\x28\x33\x8b\xf6\x6b\x03\x8b\x8c\x73\x7f\xe1\x46\x9a\xf9\xfb\x4c\xef\xf4\xc6\x9d\xd3\x79\xae\x79\x60\x90\x17\xb4\xf2\x80\x51\x1e\x27\x19\x9d\x92\x8d\x81\x96\xdd\xa7\xf4\x0b\xd9\x1a\x28\x83\xab\x53\xab\x84\xb4\xdc\x85\x6e\xd2\x77\x3a\x0c\xf2\x46\x20\x3b\xae\x2d\x11\xbf\x50\x59\x5c\xe7\xcb\x74\x7a\x4a\xe7\xf9\x8d\xdd\xe1\x1b\x5e\xd7\x82\x28\x40\x16\x90\x10\x46\x8d\x16\xce\x1e\xd8\xcb\x21\x52\xf4\x6e\x4e\xac\x31\xab\x46\x81\xdc\xe0\x69\x52\xf0\x2d\xf7\xec\x8b\x63\x26\xd3\xe8\xd3\xa9\x8d\x61\x2b\xcb\x24\xf3\x72\x14\x2f\xe0\x16\x3a\x8a\x17\xda\xd1\x82\x7d\xa6\x2a\x18\xa5\x63\x52\xf2\xc0\x41\x69\xb4\x22\xca\x41\x3f\x2e\xb8\xb0\xc4\x3f\x47\xf2\x30\xc8\x95\xf2\x36\xa3\x31\x7b\x08\xc0\x54\x4f\xa8\x9f\xe9\x1d\xa6\xcd\x07\xb3\x3a\xed\x35\x01\x70\xf1\x5f\x3e\xc6\x90\xcc\xc6\x2e\xc3\x90\x63\x77\x4c\xf7\xf1\x70\xa3\x26\x80\xaf\xb4\xac\x42\x4a\x43\x24\x4f\xb6\x51\xf3\x4f\xf3\xb9\x56\xf2\xbb\x0b\x92\xdb\x9c\x94\x32\x0d\x77\x07\xb5\xf2\x5e\x92\x15\x94\x71\x99\xc0\x33\x09\xc9\x35\x8e\x71\xe2\x50\x5a\x49\x23\x94\xf2\xa3\xb8\xcb\x26\x7a\xd9\x82\x66\x3d\x06\xdb\x5a\xae\x52\x8c\x2a\xdb\x02\x17\x2a\x2a\xf1\x23\x11\x57\xb3\x15\x1b\xd6\xc4\xc1\xa8\x0c\x50\x0c\xbb\xdf\x49\x25\x8a\x4a\x09\x77\x05\xff\x14\x9b\x7d\x32\xe4\x58\x8f\xed\x68\x8f\xfb\x38\x21\x7d\x88\x0f\x60\xb9\x21\x43\xfe\xdc\x9b\x09\xfe\x77\x98\x14\x9c\x8c\xc6\x2a\x59\x16\x84\x02\x70\x2c\xb2\x95\x4a\x0b\x5d\x32\x1a\x7f\x36\x9a\xf6\x02\xe2\x3d\xe0\xd5\x67\x7a\x37\x4c\x4b\x12\x6f\x1b\x9e\xa9\xe8\x76\xc1\x59\xdf\x52\x81\x6d\x24\x6a\x6f\x6e\x66\xe3\x96\x1b\x1c\xb7\xe8\x76\x25\xc5\x23\x24\x45\x0e\xd9\x00\xfb\xee\x02\xc7\x08\x67\x9b\x9b\x26\xc5\x11\xef\x5d\xc7\x45\x94\xaa\x68\x4e\x4b\x19\x81\x35\x4a\x01\xc6\xa5\x3c\x59\xaf\x12\xd9\x8d\x58\x4f\xe8\x64\x09\x41\x4d\x94\x67\x2f\x51\xb5\xcc\x14\x26\x82\x82\x4e\x49\xb6\x39\xd8\x9e\xbe\x4a\x20\x82\x93\xd8\xc1\x20\x00\x8d\xa6\x63\x03\x3e\x5a\x4d\xc8\x46\xbf\x05\xf3\x2f\xa1\x78\xb2\x13\x85\xf0\x2e\x01\x5e\x92\x6c\x0e\xb4\xa2\x35\x80\x42\x4c\x46\x30\x62\x62\x3a\xb9\x21\xc4\x72\x47\x43\x35\x88\xbf\xa2\x61\xbb\x26\xfd\xed\x6b\xfb\x90\x71\xad\x5f\xbb\x66\x84\x8d\xae\xc7\x2d\x80\x62\x66\x20\xdc\x89\x6c\x8f\x53\x9a\x52\x2e\x07\x9e\x21\x34\x14\x95\x80\x30\x6b\xb5\x6a\x5e\x3a\x50\x1b\x36\x3a\xdc\x43\x2d\xea\x5d\x04\x5c\x5e\x04\x98\xfa\x37\x07\xd7\x37\x07\xf5\xae\x18\x4d\xe8\x8c\x9d\x9c\x0c\x19\x25\x36\xb4\x33\x5f\x33\xb6\xdd\xcb\xd6\xe7\x4c\x47\xc1\x35\x0c\x40\x8e\xdd\x03\x10\xdb\x4d\x5f\x68\x4a\xa2\x76\x22\xc5\x4b\x62\x53\x3b\xef\x38\xc7\x79\xc8\x5d\x96\x0d\x4f\xc8\x61\x6f\x96\x33\x45\x57\xa5\x9d\x74\x94\x03\x23\xb1\x52\x56\xf2\xc3\xac\x42\x64\x40\x54\x48\x2e\xd3\x24\xbb\x1a\x2e\x4b\xd4\x4a\x34\xbb\x91\xe3\x09\x32\xdc\x04\x27\xaf\x57\xdc\x67\x14\x6c\xe4\x60\xeb\xd8\x10\x63\x8a\x5a\x99\xc2\x96\x56\x31\x2a\xc7\xf0\x28\x43\x98\xc1\x2d\x90\x0a\x46\x46\x31\x2c\x10\x49\xd8\xec\x2c\x37\x9c\x0d\xb6\x6b\x98\xfc\x17\xd6\xd0\xe6\x7a\xdf\xb9\x8a\xa8\x4b\x15\xd1\x90\x3a\x64\xb6\xe7\x20\x64\x83\x90\x28\x23\xcc\xc5\x32\xea\x76\x45\x73\xf0\x13\x94\xd3\x4c\xf4\x34\x13\xb3\x29\x9c\x2d\x4b\xd1\xea\x73\x44\x11\xbe\x34\x79\xe6\xec\x8d\x28\xab\xc9\x4b\xd1\x70\x5b\x8c\x35\x88\x30\xf9\xc2\x28\xaf\xa9\xe6\x32\xa5\x43\x8e\x09\x0f\xac\xc4\x33\xd2\xf7\x05\x34\xfd\x99\x56\x54\x29\x2e\x6b\x9f\x2f\x8a\x91\x5b\x7d\x73\x73\x5c\xc3\xd4\xd6\x8e\xaf\xe2\x0a\x85\x9f\xab\xd2\x9c\x9e\x64\x56\x99\xa4\xa3\xc2\x76\x84\xe8\xa5\xda\x6c\xf5\x6e\xa2\x82\x4b\x25\x99\xdd\x49\xf8\x4c\xfe\x15\x21\xf2\xfa\x32\x72\x1a\x80\x82\x8a\xc9\x03\x51\x15\xee\xa9\x60\xea\x48\xf5\x3b\x88\xfc\x36\xbb\x83\x86\xc5\x50\x14\xc1\x77\x7d\xe0\x11\xaf\xd1\x17\xd0\xd2\x1e\x1d\xa6\x04\x84\xff\x9f\xc8\x6b\x75\x4b\xca\xf2\x5b\xf0\xbc\x6c\x4b\xbe\xb8\x9d\xd1\x1b\xca\xda\xd7\x10\x69\xbf\xa3\xd7\x2c\x09\xd6\x0c\xf8\xce\x58\x69\x3f\x58\x5d\x46\xb4\x3f\x94\x4f\x2a\x34\x8b\x33\x5e\x20\x9d\xf6\xa5\xef\x66\x61\xfb\x43\xf1\x34\x7f\x14\xa2\xe6\x44\x26\x03\x2c\xe5\x1b\x9a\xa6\xa9\x6d\x26\x84\x1c\xad\xce\x33\x66\x5c\xcc\x46\x96\x22\x74\x3b\x7b\xc5\xb7\x33\x13\x07\x50\x76\x2e\xee\xd4\x0c\x99\xf7\x2c\x56\x82\x05\x6e\x90\x9f\xb3\x67\x3e\x96\xb7\x2c\xe1\xf4\x43\x21\x5f\x67\x1d\xbd\xca\x1f\x26\x03\x8d\xfe\x09\x63\x30\x93\xb3\x42\x74\x03\x8d\x4f\xe3\xdb\x88\x62\x98\x38\xcd\x02\x27\x50\xd9\xbd\xcd\xc7\xe3\xe3\xad\xa1\xfd\xc1\x7c\x4e\xa7\x09\x84\x4d\x61\xba\x8b\x73\xb6\xa4\x7e\x1a\x3a\xb7\xf1\x40\xd5\x7a\x17\xa7\xc5\x9a\x6a\x7d\x55\x0d\x52\x00\x35\xd6\x7a\xaa\x6a\x7d\xd2\x89\xff\x9b\xab\x3e\x53\x55\xe5\x2f\xde\x54\x8d\xc3\xc3\xd9\x87\x42\x3f\x9d\x31\x37\x43\xde\x15\xe5\x50\x0b\x79\x8a\xd7\x3f\x8a\x51\xad\x7b\xea\x18\xfc\x94\x0c\x3e\x1f\xd1\x9f\xd3\x8d\x87\x58\xf7\x2d\x8f\x91\xfe\xfd\x43\x5d\x24\x85\x85\x62\x67\x3d\x8c\xc3\xc6\x31\x3d\x19\x53\x0e\xa6\x3e\x61\x7f\xd7\x09\x92\xde\x64\x2d\x2f\xdb\xa5\xd4\xa1\xaf\x39\xab\x75\x9c\x90\x71\x02\x42\xa5\xa5\x1f\x45\x20\x2c\x35\x24\xb8\x52\x22\x33\xcc\x54\x3e\x43\x1e\x55\xe7\xab\x86\x29\x0e\x69\xfe\x6a\x31\x19\x32\x2c\xfd\xc8\x33\xdf\x71\x2f\x31\x8e\xcb\x78\xa1\x25\x70\xa5\x28\xd3\x57\xa0\x24\x92\x52\x0f\x2b\x65\xdf\xd1\x13\x3e\x86\x81\x73\x49\x72\x47\xff\x51\xbf\x3d\xf0\x8a\xbe\x63\x25\x50\x0c\x9c\x1f\xdc\x2d\xe1\x6e\xc9\x4d\xdf\x0a\xd4\x73\x02\xd3\x69\xd6\x33\x9a\x47\xc2\xd1\x04\x9e\xe3\xa4\xd5\x2c\xa3\x05\xcf\x19\x75\xa3\xab\xc9\xec\xc6\x09\x13\xe2\xcd\x76\x66\xad\x61\x32\xcd\x1b\x27\x84\x42\xdc\xbb\x30\xf2\x6a\x02\x02\x9c\xd8\x82\x7a\xe7\x23\x08\x9e\x6c\xcf\x58\xd6\x40\x3f\x12\x84\x86\x1b\xd2\x00\x43\xd5\x06\x42\x92\xa1\xe1\xc6\xc0\xfd\x2a\x09\x87\x8a\xb8\xe8\x16\x00\xa9\xc8\xd0\xd0\x70\x53\xa6\xc4\x92\x87\x0c\x0d\xd5\xb7\x0f\x45\x94\xe1\xc4\x0b\x00\x27\x10\x13\x31\x3c\xea\xe3\xad\x01\xa6\x56\x59\xd0\x1f\xcb\x77\xb7\x0f\x56\xc9\x23\xdf\x0f\x74\x47\x9b\x9b\x0a\xa7\xea\x35\x10\x53\xe7\xa1\x4e\x1d\xfe\xb0\x99\x29\x6b\x6a\x0c\xb3\xaf\xb6\x83\xcf\x61\x1b\xd9\x42\x62\xa6\xda\x44\x7e\xaf\x6f\x23\x53\xac\x55\x9a\xc0\xe7\xfa\x16\x16\x99\xd5\x66\xb6\xac\xbe\xad\x24\x55\x95\x66\xe2\x73\x1d\x1a\xa6\xcb\x85\xb2\xb1\x70\x3a\x72\x5b\xab\xbb\xb1\x3a\x58\x70\x93\x7a\xb5\x39\xbc\x82\x8a\xc5\x24\x03\xcf\x3e\xc2\x3c\xb4\x7e\x28\xa2\xa0\x43\x97\xe0\x3b\xee\x4e\xe2\x34\x95\xee\x2b\x52\x63\x97\xde\xbb\xec\xe3\x3b\x6e\xee\xf0\xab\x3a\x92\xfe\xdf\x94\xf4\x7d\xea\xdc\x3c\xe1\x2d\xb1\x09\xdd\xf4\x66\xcd\x6d\x1b\x66\xa6\x7b\x58\xd3\xb2\xa6\x85\xb6\xbb\x75\x4a\x66\x62\xcd\x1b\xda\x6f\x52\xa4\xbd\x24\x55\x64\x4f\xb7\x51\xcd\x49\x65\x9b\x5c\x6c\x2c\x87\x81\xab\xf6\x6c\x0b\x8d\x31\x91\x67\x47\xe3\x3a\xe3\x89\x51\xb7\xfc\x77\x58\xb7\x13\x88\xcf\xe2\x5d\xa4\xb2\x54\xab\x09\x78\x2e\x43\x57\x18\x30\x74\xe4\x96\x34\xbf\xd2\xd8\xf1\x2c\x1b\x94\xf5\x96\x37\x51\x1c\x02\x85\xca\xb2\xa7\x69\x7a\x8c\x5a\x73\x55\xb6\x98\x8c\x09\xc3\x73\x5b\x93\xc4\x96\xc6\xcd\x6d\x7f\x44\xe9\x47\x47\x53\xf5\x32\xae\x1e\xb1\xe1\x65\x5d\x96\x5c\x07\x25\x86\x8b\x6e\xbe\x00\x97\x63\xe5\x71\xa9\xe5\x6d\xfd\xd5\xbd\x5c\x65\xa1\x52\x46\x8f\x66\xf2\x8a\x3c\x56\x59\xe9\x0b\xf9\xf3\x47\x1e\xcd\x35\x7c\x98\x6a\x10\xf0\x0a\x42\xd8\xbc\xa1\xb3\x9c\x09\xb1\xe9\xf5\x07\xda\x73\xbe\x48\xe1\x8b\x22\x0c\xdf\x40\xa9\x29\x2a\xad\x74\x2d\xa9\xe6\x54\x95\xca\x12\xd0\x81\xb4\x8e\x47\xdf\xa5\x64\x55\xca\x81\xd3\xb1\xc3\xc5\xdb\x72\x65\x4c\x26\x66\xed\xb3\x41\xa3\x62\x2c\xd7\x0f\x2a\x2c\x26\xd5\x52\xdf\xd0\x06\x16\x0b\x49\xeb\x9b\xc0\x86\xcb\x09\x3b\x45\x95\x8e\xd5\x0b\xd8\xc8\x11\x98\xe2\x04\xad\x6c\x72\x53\x13\x3c\x47\x87\x85\x83\x7d\xee\xf5\xba\x92\xe9\xb3\xf2\x5e\x52\x1c\xe6\xb7\x87\xf4\x86\xa6\x1a\x32\x14\x51\x84\xd6\x82\x4e\x51\x4b\xbf\xf1\xab\xe7\x7d\xb1\xd7\xfc\x27\xfe\xa2\xdf\x32\x25\xfe\xeb\x7e\x31\x30\x25\xdc\x6f\xc3\x6d\x1b\xee\xb7\xe1\xb6\xcd\x8d\xdf\xe6\xa6\x5f\x96\xfe\x44\xb5\xfd\xc1\x9a\xe9\x49\x7d\x81\x98\x58\xc5\xa4\x09\xfb\x53\xd2\x2c\x1b\x97\xda\x4a\x77\x4e\x9a\x81\x0b\x8b\xb8\x6a\xc5\xab\xad\xb8\x6a\xc5\xab\xad\x6e\x54\xab\x9b\x3e\xe1\x65\xc5\x44\x4a\x80\xea\x7c\x0b\x4d\x95\xa0\xd8\x7c\xf2\x94\x2f\xa2\x48\x3f\x8d\xbb\x96\x37\xe2\xbb\xfa\x5d\x31\x9e\x11\x65\xce\x37\xdf\x56\xc6\x16\x4a\xaf\xed\xb6\x3a\x9c\xa1\xef\x94\x8a\xaa\xa3\x4a\xa1\x26\xcd\x6e\x1a\x6a\xd1\xec\x46\xd3\x61\x50\x0f\xd9\xfb\xa1\xe1\xdc\x18\x6b\xc1\xc5\x64\xc8\x7d\xde\xbd\x22\x53\x44\x48\x31\xf9\x56\x08\x11\x9f\xa4\x9f\x9b\xc3\x39\x98\x7b\xa0\x2c\x2b\xe1\xd3\x5d\x83\xd1\xa5\xd1\x40\x62\x29\x68\x2c\x78\xa4\x39\x49\xa4\x02\x1a\xea\xb0\xd6\x82\xf8\x81\x9c\xa2\xbf\x96\xd5\x48\x6d\x8d\x7d\x07\x1d\x40\xe2\x5b\xe6\xa5\x8e\x70\x99\xf9\xd1\x18\x27\x84\x57\xcc\xda\x75\x3a\xa8\x64\xdc\xe3\xf1\x55\x2b\xdf\x20\x81\xa5\x73\xb7\xab\xf4\x15\xb9\x59\x69\xfb\x4e\xb7\x07\x2f\x71\x31\xb7\x59\x90\xc4\xb0\x52\xf3\x68\xe6\x2a\x70\x30\xe7\x11\x47\x08\xf3\x9e\x49\x70\xc9\x0c\x7b\x8d\x4a\x99\xbf\xd8\xa7\x57\x16\xdf\x3a\x60\x77\x10\xa0\xde\xbc\x11\xaa\x30\x7b\x38\x03\x6c\xff\xca\x75\x8a\x7f\xb5\x7b\xe4\x7b\xaf\xa4\x79\xd3\x64\xba\x0f\x63\x65\x6a\x50\xa5\xd6\x05\x65\x36\xc7\x32\x40\x39\xc3\x73\x3a\xcf\x87\x59\xe9\x7a\x3c\xea\x07\xb4\x9c\x50\xf9\xb2\x73\x4a\x67\xef\x72\x16\x71\x69\x9e\x1c\x7e\xcc\x50\x2b\xb1\x01\x74\xad\x37\x4c\xec\x3d\x93\xe9\x39\x3e\x45\x38\x7d\xdc\x1c\x65\x9e\x42\xca\xa2\xc2\x9f\x63\x8a\x39\x8e\x71\xee\x6b\x25\xcc\x6c\x97\x08\x2f\x4b\x2f\x9c\x8f\xe6\xc0\x85\x34\xac\xfa\xee\x55\x9f\x50\x4b\x1b\x87\xc8\x2c\xce\x68\xac\xd9\xac\x62\x6c\x0d\xe6\x70\xe6\xcf\xa8\x8f\xad\xd9\x5a\x30\x27\x18\x4e\xc5\x36\xc2\xb9\x77\x39\xe9\x18\x45\x32\xae\x12\x67\x51\xe6\xcf\x32\xc1\x1c\xab\xd8\x6f\x62\xe3\x0b\xe0\xe5\x16\xd3\xef\x88\x66\xc6\x31\xbc\xe1\xee\xeb\x7d\x05\x85\xb5\xf9\x11\x94\xda\xdb\xdc\xe7\x5a\x0d\xee\xd8\x21\xe8\x4f\xde\xf3\x02\xb5\x4f\x90\xa5\xcc\xb1\xbd\x32\xfd\xc0\x49\xac\x4c\xdd\xc4\x83\xd4\xe6\xcf\x8b\xe0\xad\xa2\x72\xc6\x5b\x74\x64\x45\xd0\x71\xaf\xe1\x51\xba\xb4\xd1\xa0\xb4\xfa\x3b\xd1\x1a\x1a\x8b\x25\x30\x4b\xf2\x67\x40\x46\x8a\x41\x16\xb5\xf4\xa8\xe6\x91\xc0\x83\xcf\xe3\x55\xbc\xda\xd0\xaf\x87\xac\x55\x30\x0b\xd3\xa3\xb3\xd7\xc2\xfe\x00\x46\x6d\xbd\xd5\xb0\x4e\x2b\xa9\x48\x17\x18\x56\x35\xb1\xb4\xe7\x7a\x04\x98\xba\xeb\xe5\xe3\xab\xda\xa5\xf3\xae\x24\x97\xaf\x2d\xd5\x65\x11\xf6\x25\x99\x5c\xdd\x91\x7f\xd7\x84\x75\x3d\xd6\x57\x37\x11\x18\x83\x05\xd6\x8d\x6a\xd8\x67\xf7\xb6\xd2\xa9\xc6\xe5\x0a\xbf\xf5\x07\x74\xb6\x96\x0f\x8a\x49\x50\xbe\x0e\x24\x7d\x28\xa4\x5d\xb6\x8d\x4f\x67\xe8\xc1\x21\x05\x3b\xd4\x69\xa0\x12\x0d\xa1\x45\x58\x4e\xcb\xb4\xae\xa9\x24\x77\x5d\xc3\x9c\xe5\x06\xce\x17\xc1\xec\xea\x81\x86\xca\x26\x0a\x9e\x2f\xe0\xa9\xc9\x9b\xd2\xd2\xf8\x83\xbd\xcb\x99\x0a\x6a\x47\x9b\xdb\xe8\x0a\xd6\x34\x52\x61\xa2\x45\xbb\x5d\x65\xb4\xd8\xe2\xec\x0e\xae\xde\xed\x0d\x1d\xed\x51\x3e\xf0\xa3\xde\x34\xcf\xe8\x36\xda\x96\x89\x9e\xd3\x3b\xe7\x82\x0e\x08\xc6\x36\xeb\x5d\xc7\x05\x9c\x97\x62\x1b\x31\x87\x7e\x68\x7d\x95\x7a\x49\x2c\x65\xd7\x72\x9d\xb1\x7a\x0d\x72\xb7\xa9\xeb\x34\xa7\xe8\x76\x68\x80\xe9\x98\x1f\x6f\x18\x07\x66\x51\xd1\xb7\x1d\x56\xc6\x64\x98\x92\x95\x98\xc7\x70\x63\xa0\xae\x4c\x99\x95\x6c\x18\x55\xe5\x5b\x5b\xb7\xaf\xeb\xd2\xdb\x76\xc6\xf4\x25\xed\x91\x19\xcc\x2a\x64\xd2\x15\xad\xc4\x2e\xbc\x4c\xb2\xa9\xb7\x05\xbc\x7c\x10\x75\xcc\x1d\x23\x96\x88\x6e\xb3\xd7\xa4\xbf\xcd\x74\x14\xe5\x8c\xd0\x11\x1b\xb7\x38\x3c\xfb\x66\xd8\x97\x93\x20\xd9\x50\xe9\x78\xf6\x15\x20\x02\x88\x0d\xcf\xf2\x9c\x47\x19\xc5\x7d\x84\x99\xcb\x6a\x52\xcd\x49\xfa\x2c\xa7\xf6\x76\x1a\x8d\xcb\x92\xf6\xb4\xc4\xf1\xd3\x11\x89\x19\x7e\xc2\xc9\x12\xff\x87\x93\x54\x99\x88\xa6\xd6\x6c\x4b\xd9\xe7\x99\x98\x06\x14\xaf\x54\x84\x49\x8e\x39\xa3\xf4\xcd\x32\x49\xa7\x75\x61\x71\xb5\x7a\x76\x29\x00\x16\x50\x7b\xe2\xbb\x31\x8c\xe7\x08\xfb\x73\xc9\x90\xe3\x5a\x95\x04\xcf\xe9\x38\x09\x72\xb5\x7b\xf0\x14\x34\x9d\x0d\x99\x07\x56\xa8\x33\x2f\x0d\xb3\xe9\x83\x03\x28\x13\x24\x24\x9f\xc9\x64\x3b\x1a\x28\x86\x73\x99\x63\xba\x09\xfa\xd4\xcc\xb0\xc0\x31\x4e\xc4\x04\x34\xf4\x69\x08\x7d\x6a\x15\x39\x8f\x94\x1d\x40\x1f\xfc\x2f\x9d\xbb\x25\x90\x3e\x10\x5e\x32\x37\xec\xee\xd2\x78\xf0\x3a\x8d\x53\xfd\xd1\xd6\x9b\x38\x2e\x34\x91\x7c\x55\x26\xaf\x45\xdd\x29\x93\x3f\xc5\x9d\x26\x77\xc2\xd4\xdb\x09\x6b\xec\x76\xe5\x18\xea\xd1\x43\x46\x1a\xb5\xde\x3d\xc5\x72\x4e\xc9\x44\x9b\x24\xa9\x38\xa4\xd5\x95\xe4\x66\x2d\x99\x5c\xcb\xca\x8b\x87\xbb\xb4\x79\x69\x2d\x97\x1a\xd7\x12\xb2\x24\x99\x0d\x86\x63\xb1\x5e\xcd\x9b\x51\xd4\x16\x4b\xb8\x04\x60\x11\x44\x8e\xb2\xec\xec\x32\x5c\xce\x65\xf9\xd7\x8e\x86\x4d\x5a\x32\x61\x51\x82\xfe\xc6\xf9\xc8\x43\x90\xf2\xff\xf6\x0e\x73\x56\x10\xe4\x42\x99\x28\xc2\xec\x9e\x6a\xdc\x53\x6a\xd2\x49\x78\xab\x6d\x9e\xdd\xae\x59\x6d\x7c\xba\x9b\x39\x31\x97\x88\xa7\x3b\x99\xab\x5b\x4b\x9b\xc5\xa9\xc2\x99\xda\x4d\x37\x73\x57\x40\x57\x66\x04\x76\xab\xcf\xf4\xc3\x13\xbb\x93\xaf\x96\x2d\x95\x77\x2c\x42\xad\x69\xbe\x62\x84\xeb\xee\x6f\xaf\x05\xcc\x1b\x0c\x2e\x47\xfb\x16\xae\xae\x37\x7d\x53\xea\x28\xe6\x91\x3b\xc8\x82\x85\xd9\xad\xdc\x3c\x7c\x19\x02\x07\x4c\x4a\x5e\x8f\x28\xce\x46\x74\x3c\x06\x0b\xe5\xce\x3c\x4e\xb2\x0e\xee\xd0\xb4\xa0\x1d\xdc\x89\x39\x67\x45\x67\x0c\x09\x4d\x45\xf5\x68\x44\xc7\x88\xbc\x06\x6f\x7d\x2d\xc4\x6a\x87\x13\x6b\x8e\xd7\xdf\x2e\x5e\x3d\xfb\x87\x0e\xd0\x0f\xf1\x11\xdc\xc4\x29\xf2\x51\xc5\xe6\x60\x0c\x4b\x70\xe2\xa4\x43\xc7\x5c\x65\x43\x0f\xf5\x78\x08\x3b\x89\x30\x4d\x82\x4d\x9c\xe3\x3e\xde\xe8\x23\x1c\x34\x80\x9c\x98\xe1\x47\x5e\xf9\xc2\x10\x24\x6b\xbb\x66\x5e\x9e\xa3\xb9\x43\x99\x3a\xff\xb3\x79\x39\xec\xff\x0f\x84\xa4\xe9\x65\xf9\x94\x82\xfa\xac\xa4\xbd\xb3\xfd\xd3\x83\xdd\xc3\x83\x5f\x77\xcf\x0f\x4e\x8e\x2f\xde\x1d\x9c\x9e\x9d\x5f\x1c\x9f\xbc\xdd\xbf\x38\x3b\x3f\x3d\x38\x7e\x4f\x74\x43\x9d\x57\xdc\x92\xb0\x45\x73\x0c\x76\xbb\xd9\x0b\x1e\x33\x71\x9a\x80\x03\x78\x4b\x17\xfc\x5a\xdb\xd2\x4c\xe2\x6c\x2a\x7d\x52\x5c\x1f\x6a\xb1\xd2\x74\x7a\x32\x4f\x38\xa7\xd3\xe3\x7c\x4a\x8d\x8d\x76\xbe\xa0\x99\xdb\xcb\x96\xb1\x8b\xbe\xb2\x30\x1d\xd6\xc1\x94\xcc\xa2\x2a\x59\x5d\x66\xf3\x98\x4f\xae\xe9\x74\xd7\x66\x64\xb3\x80\x5c\xda\x81\x84\xdc\x5b\x09\x66\x79\x4a\xaf\xef\xa6\x32\x29\x7c\xfb\x36\xe1\xd7\x6d\xc7\x86\xab\x9d\xe5\xbc\x5d\x2c\x17\x8b\x9c\x71\x3a\xed\x20\xc7\x62\x44\x4e\x5c\x8a\x04\x7b\x4b\x56\xe4\x4c\xb3\x87\xd2\xb4\x06\x24\x84\xed\x0d\x6d\x31\x9a\xdd\xdf\x5f\xb2\x28\x43\xdd\xee\x5c\xfc\x0f\x6d\xa3\x8c\x64\xae\xb9\x58\x2b\xc4\x24\x68\xdd\xbc\x01\x02\xf9\xe4\x60\x6c\x5d\x6a\x44\x55\xdd\x34\x20\x14\x5e\x17\x3b\x35\x60\x9b\x86\x92\x51\x2c\xbc\xbe\x02\x33\xb0\xb0\x09\xa1\xe5\x34\x29\xa4\x21\xa2\x41\x63\xa8\x2b\x72\x9b\xb6\x78\x65\xb7\xb8\x58\x20\xb4\xa4\xd9\x5f\xed\x8e\x06\x7d\xc1\x74\xc4\xb1\xd2\x46\x51\x82\xf4\x83\x4b\xc9\xca\x3e\xa1\xdf\xc8\xbd\x14\x6c\x95\xfb\xfb\x3e\x6a\xe9\x40\x7e\xde\xc2\x40\xf2\x0d\x67\x4c\x67\xb5\xc3\xc3\x40\x5d\x68\x94\xc8\x7f\x30\xd6\xb6\x3f\x32\xee\xdd\x51\x52\xc0\xe6\x75\xa2\x92\x69\x8d\x9a\x3f\x51\x65\x7c\xbc\x41\x88\xb1\x2d\x62\xc1\x41\x82\x3a\xaf\x09\xab\x39\xa9\x10\xf9\x7b\x9b\x6f\xc3\x09\xba\x13\xb7\x27\x92\x95\x2f\xe0\x6f\xa9\xce\xe6\xda\x81\x13\x3c\x1b\xb8\x8a\x29\x0d\x2d\x35\x2a\xb6\x51\x58\x49\xab\xee\x2a\x9b\x80\xa3\xb2\xbc\xb8\x30\x10\x2a\xc3\x6d\x6f\x52\x43\x6a\x6d\xe5\x75\x74\x3f\x6f\xad\xed\x82\xb4\x82\xdf\x9b\x9b\x10\xaf\xc0\xee\x5d\xa6\xc2\xea\x04\x48\xc2\x2b\x2e\x73\x67\xc9\xa4\x20\xea\x88\xb6\x5e\x12\x69\x9d\x89\x80\x80\x9e\xdf\x2d\x68\xb7\x0b\xd1\xa1\x2c\x41\x95\x56\xeb\x3a\x51\x80\x20\x9d\x1d\xdc\x47\xdd\xee\x85\x60\x87\xc0\x9a\x36\x0a\xd6\xdb\x45\x0c\x64\x01\x09\xe8\x1c\x47\xc3\xce\xf9\xc1\xf9\xe1\x7e\x67\x83\x90\xa4\xdb\xed\x9c\xed\x9d\x1e\x7c\x3c\x37\xbf\xce\x7f\x31\x45\xb2\x67\x6f\x83\x08\x8e\xb6\xbc\xb8\x98\xa4\x79\x41\xff\x12\x46\x43\x78\x42\x94\x6e\x6d\xd5\xa0\x14\x67\x64\x63\xe0\xe1\x55\xfc\x4d\x36\xfa\xf8\x4e\xe0\xc1\x41\x87\x97\x7c\xd1\x60\x21\x24\x6b\x49\x05\x2d\x5b\x5b\x2a\x67\x62\xdd\x94\xcd\xf0\x32\x2b\x9e\x15\x52\x5c\xca\x69\xa1\xcb\xbb\xdd\x3b\x06\x69\x9a\x2f\xc4\xff\x74\xb8\x4a\x3b\x47\xcd\x19\xbb\x40\xea\x7c\x15\x55\xc2\x13\x57\x17\x71\x6b\xab\x84\x65\x00\xf3\x46\xb8\xd5\x4c\x4e\x14\x83\x37\xee\x47\x30\xe4\xf7\xf7\xd2\x97\x21\x68\x65\x7a\xf9\xe1\xfc\xe8\x30\x20\x72\xd2\xb8\xf8\x0d\x18\x60\x4a\xcf\x03\x63\xca\xe8\xdb\x6d\x67\x84\x3b\x06\x9a\x38\x01\x9a\x36\x8f\x5c\x75\x05\x66\x2e\xb6\x70\xd6\x5b\x30\x7a\x93\xe4\xcb\xc2\x50\xa6\x3c\x5c\x34\xdf\x8f\x11\xbe\x66\x08\x5b\x24\x7f\x91\x48\x5e\x77\x00\x72\x53\x3f\xa4\x9f\x35\x0b\xed\x57\x41\x42\x9c\x55\x20\xf8\x98\x53\x98\x2a\xd5\x18\xce\xd6\x96\xd6\xaf\x02\x0b\xa0\x52\x70\xb7\x87\x51\xc8\xb8\xbe\x2d\x14\x61\x56\xfa\x58\x76\x75\x71\x06\x16\x88\xea\xda\xed\xee\x83\xa7\xba\xa3\xcb\x00\x2a\xed\x0e\xb3\xcd\xba\xdd\x8d\x7d\x71\x18\xb6\x11\x23\xac\x0e\x82\x9a\xa5\x01\xf9\xd3\xd1\xef\x98\x3d\x71\x4e\xbf\xf0\x87\x77\xd6\xce\x33\xb1\xc5\x0d\x0d\xdb\x89\xb8\xa5\x5f\x32\x54\xaa\xfb\x85\x68\x5d\xb9\xb3\x62\xde\xd6\xe0\x7e\x26\x4f\x35\xca\x4b\xc3\x68\x4a\x3a\xd9\xf9\x9f\xfb\x0a\xf3\x19\x71\x74\x7f\xff\x45\xdc\x25\xdd\x6e\x07\x0a\xd7\x52\x47\xcd\x52\x06\xb3\xd5\x3a\xaa\x60\x73\x20\xec\xef\x02\x53\xbb\xf6\xb3\x41\xa1\xf6\x96\x0a\x5f\xae\xf4\xca\x6a\x24\x76\xbb\x97\x02\xf0\xff\x02\xf2\x22\x5e\xbf\xbb\xc3\x09\x58\xc8\x90\xba\x22\x0d\x87\xd2\x00\xab\x20\x00\xdd\xee\xad\x44\xb0\xff\x88\x98\xcc\xa2\xce\x35\xe7\x8b\xe1\x37\xdf\xdc\xde\xde\xf6\x6e\x9f\xf5\x72\x76\xf5\xcd\xd3\x7e\xbf\xff\x4d\x71\x73\xa5\x16\x4a\xe7\x97\xfd\x74\x7a\x60\xa2\x58\xf6\xd4\xcd\x28\xb6\x50\xab\xee\x63\x8f\xe7\x9f\x16\x0b\xca\xf6\x20\x12\x73\x19\x71\xec\x1b\x17\xd4\x32\xde\xa3\xb1\xb4\x81\x51\xbe\xfc\x6e\xae\x5e\xcc\x15\x21\x4b\x66\x91\x9a\x4a\xe7\xfc\xcd\xc9\xdb\x5f\x3a\x72\x34\x39\x32\x0a\x83\x0d\x68\xdc\x70\xe9\x0e\x8c\x6b\xf8\xd1\x5a\x61\x43\x07\xb8\x0a\x10\xdc\xaa\x5d\xa1\x90\xde\xf8\x6d\xca\x8b\x8b\x6a\xce\x66\xcf\xc4\xbb\x06\x15\x5e\x06\x8f\x13\x16\x65\x58\x86\x5e\x4a\x90\x51\xe2\xdd\xa8\xbd\xc6\xbb\xdd\x48\xfd\x22\x5c\x99\xb9\x67\x90\xf4\x68\x42\xa3\xcc\x44\x04\x4a\x10\x1e\x54\x20\xad\x01\x4c\x82\xfb\x91\xe5\x0b\xca\x54\x14\x71\xd7\xb6\xb9\x01\x56\x33\xa1\x13\x16\x31\x05\x6b\x66\x62\x5f\x78\xb0\x66\x01\xac\x4c\xc3\xca\x0c\xac\x59\x03\xac\x1e\x54\xe5\xc5\x05\xa4\x7f\x76\x18\x74\x49\xf2\x6a\x40\x74\x1d\x2b\x99\x25\xc5\xd2\xfe\x95\xb9\xf6\xaf\x5a\xbf\x62\x52\xc1\x2a\xb2\x63\xd1\xc4\x46\xd9\x18\x0e\x85\xda\x0d\x4d\x12\xa4\xe4\x4c\x34\xf4\x15\x50\xcb\xdb\x24\x4d\xf7\x04\x43\x66\x3d\x33\x7c\x82\x4d\xb1\xcf\x9e\x69\x02\x6e\x63\x59\xd7\xec\x46\x41\x69\xba\x5d\x5e\xb7\xab\x55\xfd\x45\xbe\xb0\x4e\x58\x12\xbc\x2a\x28\x42\x2a\x3c\x82\x1b\xce\xdd\x01\xb4\xf7\x9f\x25\x65\x77\x67\x34\xa5\x20\x58\xff\x5e\x4c\x58\xb2\xe0\xa3\xab\x74\xce\x48\xe7\xc9\x8a\x97\x9d\xf1\xef\x56\xcd\x73\x7f\xaf\xae\x25\x78\x60\xa2\xf3\xdc\xe6\xde\xad\x1e\x02\x7f\x40\xeb\xde\x08\x41\x54\x56\xae\x20\xe1\x8a\x4d\xdd\xae\xfb\x6b\x83\x90\x6c\x1b\xb9\x97\x85\x5b\x8a\x5a\xd2\x0f\xb5\x54\xa9\x21\xb5\x00\x57\x27\xee\xab\xa7\x68\x2d\x71\x25\x92\x21\x81\x20\x84\x4d\x32\x0b\x53\xd1\x52\xea\x6f\x2d\x15\x00\x3f\x97\xf1\xa7\x42\x2f\x03\x31\xc8\x61\x72\xa3\x78\xf3\x1c\x6f\xf4\xe1\x95\x7b\x17\x28\xbe\xe2\x31\xa8\xd5\x60\xf4\xaa\x65\xc1\xfd\xe2\x84\xa9\x36\x0c\x5e\xc8\x4e\xc3\x3e\x71\x6e\x21\x27\x82\xb3\xd1\x1d\x5d\xb2\xc6\xcb\xdc\x56\xba\x6b\xae\x24\x25\x23\xda\x28\x19\x6d\x49\xc9\xc8\x49\x4f\xee\xf6\x65\x23\x23\x3b\x1d\x48\x2b\xc9\xe7\x08\x0f\xdc\x76\xb7\x6e\xbb\x41\x03\xa0\xfb\xeb\x00\xed\xfc\x8f\xd8\xc6\x15\xee\xc4\xe6\xd0\x5e\xdf\xb8\xdd\xdc\xf2\x84\x85\x26\x3b\xfd\x6d\x66\xad\x75\x98\xb6\xd6\x51\x8f\x56\x90\xcd\x34\x53\xf7\x28\xb2\x81\x28\x69\x4f\x6f\x37\xad\x05\x27\x57\xac\x44\x08\xd3\xa8\xf3\xcf\xab\x34\x99\xcf\x29\xfb\x66\xc9\x93\xb4\x83\x47\x1d\xfa\x65\x91\x33\x5e\x74\xc6\x38\x72\xd9\xb2\xce\x52\xd0\x24\xce\x92\x09\xef\xb4\x94\x42\x55\x5a\x75\x3b\xb4\xb5\x73\x71\x41\x8b\xa3\x7c\xba\x4c\x69\x07\xab\xdc\xfe\x1b\xfd\x52\x08\x34\x71\x51\x50\xc6\x8f\xe9\x0d\xf5\xed\x91\x48\x67\x99\xd1\x2f\x0b\x20\x39\x6d\x27\xc9\x6f\xfb\x92\xc5\xd9\xe4\xba\x63\xd3\x16\xa6\xf9\x55\xd4\x71\x6a\x74\x30\x45\x58\x17\x72\x16\x4f\x68\xf4\xbb\xa0\x24\xed\xe1\xb0\xfd\x64\xf5\xe1\xec\xe4\xb8\x27\x73\xb2\x27\xb3\x3b\x71\x9b\xb6\xa3\x27\x2b\x5a\xa2\xdf\x51\x69\xc0\x21\x15\xa6\x66\x83\x56\x74\x75\xfc\xfe\xbe\x23\xab\x83\x0a\x3b\x4e\xd2\x25\xa3\x1d\xe8\x65\x4a\x17\x8c\x4e\xc4\x91\x70\x51\xa5\x61\xba\x8d\x59\x16\x75\xde\xee\x7f\x3c\xdd\xdf\x03\xed\xe8\xb0\xdd\xd9\xa4\xb2\x61\x32\xe1\x24\xc7\xb4\x97\x14\x6f\xc5\x9f\x35\x0c\xb0\xa4\x59\xb4\x84\x4a\x12\xe1\x35\xd5\x3a\x39\x94\x58\x4f\x0b\x6a\x53\x16\x94\x90\x6e\xac\x58\x32\xfa\x7e\x99\x4c\x41\x08\xb6\xf6\x3c\xf0\x29\x83\xce\xcf\x28\x83\x6f\x40\x8d\xde\x69\x31\xaf\x6e\xb0\x7a\x1d\xb0\x44\x67\x72\x95\x91\xfa\x8c\xfc\x83\x6d\xfe\x2a\xd6\xa1\xf5\x6a\x32\xf3\x9b\xb2\x11\x1f\xbb\x42\x7f\xb7\x5b\x99\x1d\x43\xf6\x06\x8e\x65\x18\xac\x75\xc9\x22\x5b\x74\x94\x8f\x09\x1b\xe5\x6e\xd4\x59\x2c\x48\x7b\x9a\x1e\x2f\xd3\xb4\x68\x80\x18\xd2\x1e\x82\x09\x36\x98\x9a\xc1\xa1\x83\xd3\xc6\x47\x6c\x2c\x1d\x6b\x34\x11\x2e\xb5\x33\xaf\xdf\x97\x36\x8c\x32\xba\x5b\xd6\x4e\xb2\x36\x45\xca\x38\x49\x1c\x57\xe4\xf5\x01\x97\xb1\xba\xe4\x6a\x7a\x72\xaf\xa3\x96\x51\xab\x69\xd9\xdc\x15\xfb\xa8\x27\x71\x0a\x99\x87\xb0\x52\x8c\xf0\x99\xde\x15\x75\x1b\xcd\x7d\x1d\x91\xbb\x53\x3e\x21\x79\x75\x4d\x14\x82\xea\xf9\xe8\xec\xeb\xe3\x0b\x78\x68\xf3\xbc\x7d\x49\xdb\x0b\x46\x0b\x9a\xf1\x8e\x7d\xef\x80\xed\x08\x55\xab\xc7\xae\xa9\x6f\xee\x37\x77\x4e\xbf\xd3\x07\xf1\xa8\x82\xf7\x92\x26\x7b\x91\xb3\xa2\x5f\xae\xe3\x65\xc1\xe9\xd4\x9b\x58\xcd\x6c\x54\x35\x73\x58\x05\x15\x71\xb1\x81\x7b\xbd\x9e\x47\x94\x3b\x9d\x07\x1c\xa2\x70\x4e\x8c\x13\x29\x1f\x65\xe3\x1d\x9d\x89\x68\x94\x8d\xd1\xb0\xd3\x69\xb1\x4d\xf2\xfb\x93\x55\x52\x3e\x59\xe5\xe5\xef\xa5\xd4\x16\x31\x9d\x7f\xf4\xb7\x4c\xbd\x01\x6c\x6b\xcb\xfc\x6e\x37\x1e\xf5\xc7\x3d\xc9\xb8\x7d\xf3\x7f\x7e\x2b\xfe\xf1\xe4\x1b\xb4\x8d\xe2\x5e\x71\x9d\xcc\x78\x54\x53\x3b\x76\x8c\xc6\xaa\xcd\xa4\x09\xb8\x7c\xc4\x1a\x7c\xd3\x37\x9b\x36\x6d\xe7\xb3\x76\xac\xc3\x3d\xa4\x6e\xcb\x6f\x90\x80\x40\x39\x98\x16\xe4\x28\xe6\xd7\xbd\x79\x92\x45\x05\x5e\xea\x54\xf6\xce\xee\x9f\xca\x8e\x26\x72\xf7\x4f\xd5\x55\x5c\x58\x2f\xd7\x49\xef\x8f\x3c\xc9\xe4\x5c\x25\xc9\x93\x2f\x98\x75\x1b\x96\xbe\x26\x7d\x59\xe7\x38\xcf\x3e\xb2\x64\x9e\xf0\xe4\x86\xae\xab\xff\x0c\x4e\x98\xf6\x46\xb0\x75\x7a\xbd\x9e\xa9\x36\xda\x18\xe0\x8d\xbe\xe4\xe9\xe4\x62\x89\x75\xa6\x63\x39\x92\x76\x67\xa9\xed\xff\x7f\x06\x84\xf4\xbb\x5d\xfa\x8a\x7c\xfb\xec\xc5\xcb\xef\xfa\xdf\x0f\x06\xdd\x2e\x7d\x4d\xb6\xf4\xcf\xa7\x92\x14\x4f\xf2\x29\x3d\xa6\x57\xb1\x00\x97\x2c\xe1\xfe\xf0\x3e\x4d\x4c\x2d\x99\x8a\xe1\x86\x92\xa9\xa9\x65\x3e\x5d\x9b\x5a\x6b\xa6\x5c\x9a\x76\xeb\x2a\xb5\x68\xe8\x70\x47\x66\xa6\xa1\xfd\xb6\x30\x34\xa1\xa6\xb3\x64\x16\x55\xdc\xfd\x6c\xd2\x8a\x96\x26\x5f\x54\x9c\xae\x62\xd4\x1f\xb7\xc2\x13\xf7\xfb\x9e\x7c\xa1\x96\x3f\xc5\xdd\xcd\x7b\x0b\x96\x5f\xa6\x74\x5e\xb6\xff\x09\x3f\x8b\x45\x9c\xc9\xf7\x85\xb2\xd7\x33\x1f\x68\x36\x2d\x7f\x77\x08\xd6\xb9\x4a\x51\x5c\x01\x0f\xc6\x96\xb7\x16\xa3\xc5\x32\xe5\x15\x3a\x53\x85\x81\xfa\x30\xd0\x10\x06\xea\xc2\x10\xd0\x38\xc1\x8c\xf0\x46\xbc\x57\xb1\xb5\x43\x87\x3a\x8e\x9c\xba\xee\x3f\x7f\x45\x6b\xd9\x64\x9f\xb1\xaf\x6c\x23\xc3\x13\x13\xda\xe3\xcb\x45\x4a\x09\xed\xdd\x50\x96\xcc\xee\xce\x38\x5d\x14\x04\xd8\x2d\xf1\x27\x64\x01\x9d\x9e\xd3\x82\xeb\x02\x78\xb0\x77\x3f\x80\xab\xcc\x79\x2e\x69\x1a\x79\xf8\x45\x98\x4a\xe7\x56\x42\x7b\x82\xf7\x39\xa3\x62\x7b\x38\xe1\x70\x15\xa9\x54\x3b\x47\xdd\x4e\x33\x46\xe9\x9f\x34\x1a\x8d\xdd\x50\xb8\xa2\xb2\xce\x3d\xd7\x6f\x19\xae\xd9\xdb\xe3\xbd\x8b\x2b\xc1\xe9\x6c\x6e\x32\xcb\x56\x27\xd5\x0a\xf7\xf7\x99\xf7\xf4\x9d\x47\xe1\xfd\xa8\x92\xaf\xc8\xe0\x70\x16\xf4\xaa\x6b\xad\x7a\xbb\x94\x2c\x5e\x84\xca\x78\x3a\x75\x96\x42\xb2\xa4\xee\xe2\x9b\xda\x23\x3a\x26\xda\x19\x41\xfc\x14\x60\x8e\x95\x67\x6e\xa9\x23\x6f\xa0\x55\x4d\x17\xb2\xb0\xed\xf6\x34\x54\x13\xeb\x76\xab\x85\xb2\x64\x5c\x8a\xf3\x2f\x97\xa2\x71\x16\xd2\x3b\x78\x34\xf6\xa3\x75\x98\x4c\x02\x45\xf2\x67\xf8\xf2\x2b\xed\x0a\x54\x54\x6a\x65\xc3\xf9\xff\x31\xf7\xa7\xed\x6d\x1b\x69\xc2\x28\xfc\x9d\xbf\x82\xe2\xa4\xd9\xa8\x61\x09\x26\x65\x77\xa6\x43\xb9\xcc\x57\xb6\xe5\xc4\xef\x58\x96\x5b\x92\x93\x93\x8b\xe1\x28\x10\x51\x14\x2b\x86\x00\xa6\x50\xd4\x46\xe2\xf9\xed\xe7\xaa\xbb\x76\x00\x94\x3d\xfd\x4c\xcf\x75\xbe\x90\x40\xa1\xf6\xe5\xde\xea\x5e\x6a\x4e\x3d\xea\x4e\x79\xb5\x96\x67\x28\x0c\xf7\x8c\x93\x70\x60\xaf\xa4\x71\x4e\xcb\x6d\xb3\x0a\x15\xa6\x5c\x56\xbb\x02\x53\xb1\x3f\x9a\x39\x67\x2a\x54\x7d\xa7\x55\x2e\xea\x56\x54\xad\xf5\xbf\xa4\x2d\x15\xd2\x59\x65\xbd\x59\x9a\xd1\xdb\x38\x65\xc1\x0c\x34\x6c\xf9\x5c\x16\x35\xff\xdf\xaa\x3e\x71\x9b\xf0\x8d\xa4\xd1\xc6\x49\xa5\x0f\x45\xc7\x1c\x5d\x85\xc7\xc8\x2b\x05\x6d\x4b\x9c\x49\x8a\x48\x9b\xdc\xf6\xf6\xcc\x36\x51\x6a\xaa\x13\xf5\x37\xa6\xe4\xd5\xef\x97\x97\x92\x23\xfa\x6e\x03\xc8\x7b\x91\x15\x05\x8f\xe0\x91\x27\x79\x5a\xdc\x44\xe8\xdf\xdf\x26\x42\x12\xfa\x77\x11\x88\x8c\x7f\x77\x47\x6c\xed\xf9\x1a\x37\x48\xee\x79\xdf\xe3\x5c\xe7\xde\x11\xb3\x58\x70\xeb\x65\xf0\xce\xc4\xff\xf1\x92\x97\xed\xc9\x5e\xec\xa2\x88\x6e\xc9\x10\xbd\x1c\x4e\x64\x1f\xc6\x69\x70\x6a\x57\xf5\x6c\xaf\x5c\xef\x26\xb2\xea\xf1\x1c\xd4\x74\x0d\xec\xcb\xf0\x74\x84\x25\x49\x64\xf4\x6e\x28\x79\xb5\x8a\x64\x63\xda\x77\xd9\x0d\x29\x3b\x75\x00\x77\x83\x1b\x30\x50\xd3\x0b\x35\x50\x69\x53\x7d\xc0\x6a\x13\x0d\x7c\x55\x09\x75\x6e\x5c\xfb\x65\x29\xb8\xcf\x92\xe3\xde\xff\x8f\x4a\x40\xfe\x6c\x55\x64\x0f\x92\x87\xf9\x1f\xe7\xd2\xaf\xd6\x37\x1e\xa5\x8b\x36\xc9\x60\xa0\x48\x27\xf0\xae\x47\x8e\x31\x6d\xb3\xf2\x21\xf7\x36\x5d\xbe\x79\xe5\x3d\x52\x7c\x19\x0d\x01\x57\x37\xbd\xf9\xc1\x8c\xb2\xf2\x8d\x84\x3e\x17\xc9\xf5\xb5\x4f\xa1\x6f\x44\x72\x3d\xa6\x95\x03\xd7\x84\x90\xdb\x2a\xc8\x4f\xae\x15\x0b\x66\xdc\xdd\x01\x65\xe5\xb9\x7a\x23\x19\x30\xdc\x5c\x3c\x5c\x24\xd7\xef\x0a\x4e\x8e\x30\x5c\x38\xc8\xc7\x2f\xea\xf1\x84\x8a\x44\xbe\xbe\x91\x68\xd1\x49\x8b\xdf\xb2\xf4\xcd\x32\xc9\xaf\x43\x9c\x7a\xa2\x38\x6b\xb5\x05\x78\x32\xff\x02\x8a\x60\xe4\xa3\x5e\x7e\x97\xf2\x5e\x13\x9d\xeb\x1b\xe8\xd6\x07\xe8\x35\x7c\x97\xdb\xa8\x65\x96\x14\xdf\xfb\x87\xac\x5d\x92\x10\x5f\x9a\x7c\x60\xe7\x63\xa4\x34\xc9\x29\xf8\xda\x51\x5a\x70\x82\xbc\xf7\x34\xc0\x65\x69\x70\x5c\x19\x32\x59\x0a\x4b\xfe\xac\x34\xab\x72\x12\x21\xf2\xea\x3b\xef\xd2\x35\x9f\xbe\x9b\x11\x8e\x73\x45\x4d\x35\x5b\x7f\xab\x00\xf5\x1f\x08\xff\xa1\xf8\xdf\x7a\x27\xfe\x20\x6f\x8d\xa3\x5b\xb7\x3a\x27\x61\x3f\xac\xdb\xca\xbd\x16\x6a\xf4\x1d\x30\xc8\x15\xd8\x5a\xfe\x19\xd1\xe9\xbb\x99\xb7\x5d\xc0\xf8\x8d\xfc\xec\x6a\x26\x7f\x62\x6a\x63\xfa\x93\xef\xcc\x8c\xd1\xf4\x6d\x22\x92\xd6\xa1\xcb\x3d\xf8\x0b\x4d\xbe\x9c\x24\x2b\x9c\x93\x9e\xc9\xe2\xd0\xa8\xb9\x8e\xda\x5c\x53\x21\x28\x77\x97\x92\x46\x3f\xd4\xcc\xd5\x87\xe8\x4b\xc4\x30\x45\x08\xe7\xfd\xfe\x1e\xe8\xe4\x47\x0c\x4d\xa2\x82\x08\x75\xff\xc4\x8c\xdb\x30\x86\x0b\x84\xc6\x05\xe1\x2a\xb2\x13\xc2\x45\x85\xcb\x5a\xed\x02\xe7\x68\x73\x04\xd7\x5c\xba\x94\x4c\xa9\xaa\x40\xbe\x74\xb2\x16\x20\x9d\x29\xdf\xe7\x47\x6b\x51\x08\xbd\x89\x2e\x78\x92\x97\x09\xd4\x23\x69\xdb\x75\xfe\xd4\xe7\x92\x8a\x1d\x1f\x8f\xf3\x5b\x42\xe3\x9f\x4f\x3f\x1c\x5d\xbc\xff\x70\xec\x3d\x5e\x5e\x1c\x49\x72\xed\xe7\x22\x4b\x04\x53\x67\x95\x3a\x27\x8c\x84\x1a\xff\x9e\xc4\x1d\x30\x42\xe3\x37\x9f\xcf\xce\x8e\x95\xa5\xa0\x7c\x53\xb8\x59\x7f\xd2\x56\x84\xde\xa3\xc9\x76\x7a\xf2\xe9\xf3\x85\x6c\xfc\xe8\xc3\x87\xd3\x5f\x2e\xdf\xfc\xfa\xe6\xc3\xf1\x79\x40\x0b\x2a\xc7\xad\xff\x22\xdc\x86\x8b\xaf\x57\x2c\xd1\x84\xac\xbc\x77\x79\xf9\xe3\x87\xf7\x27\x27\xc7\x67\x97\x3f\x1f\x7d\x78\xff\xf6\xe8\xe2\xf4\xec\xf2\xfc\xd7\x93\xd7\xa7\x1f\x2e\xdf\x9d\x9e\x5d\xf6\x06\xb4\xf3\x95\xe5\x10\xff\xcd\xd5\xe5\xf8\x6b\x0b\x98\x77\xbc\xe9\x1d\x76\xdc\xda\x8c\x3a\xde\xda\x7e\x4c\x3e\x6a\x27\xab\x23\xcd\xef\xb3\xa8\x77\x71\xf4\xe3\xa5\x9e\xff\x1e\x72\x48\xde\xb7\x79\xa1\xd3\x72\x16\x79\x98\x76\x1d\xba\x49\x78\x45\x74\x06\xb7\x90\x25\xd4\x3f\xc7\xa9\x69\xe1\xe2\xd7\x4f\xb2\xfa\xda\x02\xcf\xb5\x5e\xe8\xb2\x55\x0f\x99\xd3\x5b\x56\xca\xf1\x8f\x9c\x4f\xcf\x37\x4b\x2a\x0f\xba\x9f\xa4\xa0\x80\xf1\xc5\x5b\x1a\x0d\x6c\xab\xfa\x59\xae\xaf\xc2\xb8\x97\x2a\xe1\xf5\x7a\xb1\xa0\x5c\xc1\x16\xfb\x6d\x9a\xce\x08\xad\x60\x34\x2a\x80\x9a\x6b\xd2\xd7\x73\xda\xb3\xe4\x9e\x6b\x0f\x35\xfa\x38\x18\x24\xd6\x7b\x26\xdd\x23\x24\x31\x8e\x93\xbc\x3e\x0e\x9b\x43\x4b\x3a\x5a\x43\x7a\xa3\x3a\x0a\x01\xaf\xd4\x4c\xf8\x17\x92\x36\xe6\x2f\x5b\x44\x40\x65\xc6\xac\x54\xd4\xa6\x40\x28\xbc\xaa\x14\x2d\x92\x29\x31\xcd\x67\x30\xce\x0e\xd7\xf2\x9b\xe4\x5e\x85\x9f\x03\x6f\x9d\x4a\x8c\x2a\x54\x8e\xc2\x12\xb7\xf5\x99\x9b\x78\x85\x79\x6d\x49\xac\xf9\x4f\xfb\x74\x07\x25\x0b\x1b\x06\xce\x2e\x28\x77\x28\xae\xb1\xb0\x56\xa0\x1b\x96\x31\x36\x00\x16\x48\x05\xb7\x90\x38\x27\xa2\x93\x4b\x12\x62\xc2\xfd\x4d\x31\x8e\x78\x5b\x1f\x61\xe8\xd8\xe5\xb4\x46\x12\x06\xd8\x29\x97\xc2\x76\x93\x0e\x06\x49\x55\x29\x17\xa1\x4b\x0b\x10\x3b\x1e\x6c\x5c\xc0\x99\x58\x91\xa5\x03\xa2\xee\xb8\xdd\xd4\xe9\xa5\x91\x3c\x4e\x0e\xda\xae\xa0\xf0\x2d\x51\x1f\x9f\x7b\x07\xf5\xda\x3f\xa8\x40\x20\xd5\xc0\xeb\xad\x3e\x64\x57\x1b\xb5\xaf\x75\xde\x8f\xc9\xc7\xaa\x0a\xc1\xfb\x15\x34\xf2\x00\x8d\x5c\x75\x6a\x98\xe0\x41\x57\x73\x19\x56\x93\x40\x0c\x1d\x07\xe6\x2f\xa1\x8e\x3b\xa8\xe3\xd2\xf5\xf2\x38\x94\xb1\x83\xd1\xf0\x10\xe7\xc4\x5d\x67\xbd\xcc\xdd\x95\x16\xd3\x57\x5a\x7b\x84\xdc\xf6\xfb\xc2\xdc\xa6\x9a\x55\xbf\x8f\x84\x07\x8d\xee\x83\x20\x12\x26\x50\x6c\x18\x46\xe2\xb6\x16\x37\x82\x4e\x87\xb3\x4e\xaa\x82\xe0\x8f\x9d\xd8\x7f\x19\x1d\x38\xc1\xbc\x59\x79\x8a\x05\x8c\xd1\x43\x6c\x77\x30\xc8\x53\x72\x13\x21\x7c\x0e\xbf\x17\xf2\xb7\x93\x45\xa7\x08\x2f\xe4\x0f\x3c\xad\xa2\x53\x7c\x1c\x4d\xcf\xf1\xc5\x0c\xe9\xa4\x45\x74\x6e\x9f\x2e\xbc\x6c\x17\xf5\x54\x68\xe1\xc4\x27\x14\x2b\x48\xfa\xe4\xd3\x32\x6e\x7e\x8f\xfc\xad\xfe\xc9\x84\xb0\xf7\xbd\xfd\x7a\x3a\xbc\xe0\x27\xc7\x8f\xb2\xd0\xef\x47\xa0\x3e\x71\x02\x16\x6e\xb6\xd2\x37\x8e\x45\xfe\x14\x46\xc5\xef\x3a\x0f\xaf\xfd\x7e\x24\xac\x4f\xef\x4f\xb1\x76\xbd\x83\x10\x16\xae\xa2\x2f\xe1\xcd\xbd\xe7\xdb\x54\x36\x31\xe6\x36\xde\x97\x68\x36\xc0\xfa\xfd\x88\xc1\x1c\xe7\x9a\x40\x62\xa0\xad\xa7\x76\xe3\x59\x9b\xdc\x42\x24\xd7\x2a\x6c\xfe\x39\x15\x0e\x28\x29\xc1\x85\x16\xc8\xd8\x7c\xb1\x4a\xf0\xb2\xd1\x4a\x73\x3c\x1a\x07\xc8\x5c\x3e\xf0\x57\x57\xd3\x25\x7b\xb4\x82\xce\x5b\x99\x3c\x6a\x24\xdb\x2a\x3b\xf6\x42\xc8\xca\x9d\x3c\x9e\xd3\xdc\x0a\x21\x84\x8f\x41\x85\x59\xe6\x56\x84\x36\x7e\x0b\x72\x74\x33\x8d\x1f\xa3\x1a\x2d\x4e\xef\xba\x67\x6e\x96\xdf\x5b\x19\xca\x1f\xa6\x21\x4b\x98\x3b\x3e\xce\x47\xe4\xa0\x03\x6a\x38\x8f\x7e\xff\x0f\x3d\x19\xd0\x83\x77\x12\x75\xbf\x39\x7a\xf3\xd3\xf1\xe5\x7f\x1e\xff\xda\x53\x1b\xf2\x51\x26\xbe\xfb\xd8\x43\xf8\xb3\x7c\xfa\x70\x74\x7e\x21\xa9\xa0\xcf\xc7\x3d\x84\x5f\x6b\x5c\xdf\x43\xf8\x27\xf9\x78\xfe\xf1\xe8\xd3\xf9\x4f\xa7\x17\x3d\xd4\x61\x51\xef\xed\xf1\xeb\xcf\x3f\x5e\x7e\x38\x7a\x7d\xfc\xc1\x27\x33\x7e\x76\x5b\x6c\x33\x7d\x9c\x8d\x29\x9e\x7e\x9e\x69\x77\x6d\x78\xfa\xda\x3d\xfe\x34\x1b\xef\x8f\x2a\x77\x6b\x66\x6b\xf8\x4e\xd6\xf0\x8b\xe4\x6c\x0d\x47\xa0\xfb\x2a\x08\x9d\x3e\xce\x20\xbc\xce\xeb\x99\x04\x35\xd3\x9f\x42\xff\xd7\xbc\xdf\x5f\x43\x94\x02\xf4\x41\x32\x43\x80\xf7\x2c\x8b\x35\xfd\x3c\x23\xc2\x63\x71\xb8\xe4\xb3\xb0\xac\x4a\x92\x63\xd3\x9f\x66\x24\x8b\x38\xc2\x1f\x40\x49\xda\x42\x95\xcf\x33\xd7\xb1\x3f\x6d\xc7\x34\xdb\xe2\xf5\xeb\xb5\xdd\x0a\xd7\x01\x2c\xfb\x25\x42\x9b\x21\x4c\xff\x8f\xfe\xd1\x67\x8b\xa8\x8d\x3e\xbd\xce\x8a\xab\x24\xbb\x58\xb2\xd2\x6c\x39\x97\xd2\xd9\x51\xa6\xa4\xd9\xc2\xe4\x96\xcf\xbb\xf2\xdd\xb1\x3c\x2d\xee\x4c\x4e\xf5\xb6\x2b\xaf\x6a\x35\xec\x43\x43\xd2\xdf\x5b\x83\xb2\x73\x57\x14\xdd\xac\x90\x84\xaf\xce\xd8\xd5\xd7\xbc\xa8\x8a\x10\xfe\x95\x14\x51\xaf\x49\x5e\x9f\x1d\xff\xf8\xfe\xfc\xe2\x0c\xc4\x64\x3d\x64\x29\xb0\x1f\xa7\xbf\xce\x9a\x37\x92\x17\x4b\xda\xfd\xbd\x29\x4b\xf9\xbd\x9b\xb1\x2b\x9e\xf0\x87\xee\x32\x29\xbb\x57\x94\xe6\x5d\x96\xcf\xb3\x75\x4a\xd3\xae\xb8\x63\x73\x2a\x59\x50\x79\x64\xbb\xc9\x6a\x95\xb1\x39\x10\xe5\x71\xf7\xbd\xe8\xce\xc1\xc9\xec\x15\xed\xa6\x6c\x01\x96\xe1\xa2\x7b\x4b\xb9\x44\xfa\x65\x57\xb2\x8e\x4b\xda\x5d\x25\xf3\x2f\xc9\x35\xc5\xdd\x82\xc3\x7b\x99\xdc\x50\x93\xa9\xde\xcc\xd5\x43\xf7\x86\x95\x22\xf9\x42\xe3\xf6\x7e\xa6\x10\x34\xbe\xec\x16\x79\x77\x99\xdc\xb2\xfc\xba\x9b\x74\x4b\x96\x5f\x67\xb4\x3b\x2f\x56\x0f\xb5\x36\x65\xb7\xd7\x25\xed\x26\xa2\x9b\xe4\x0f\x5d\xc1\x6e\x20\x29\xc9\xfd\x71\xe0\x2e\xbd\x95\x03\x86\x92\x0f\xdd\x84\xd3\x46\x37\xe3\xee\xaf\xc5\xba\x7b\xb3\x2e\x45\x37\xa5\xe9\x7a\x45\xbb\x0f\xc5\x9a\x77\xaf\xd6\x2c\x4b\xe5\xa2\xa9\x8b\x65\x28\x96\xae\x55\xc5\xb6\x0f\xa5\x6c\xb1\xe0\x29\xe5\x32\xe7\x8a\xcb\xc6\x84\x9a\x4c\xb8\x7e\x89\x7b\xa8\x23\x17\x8b\xec\x35\x65\x5d\x37\xff\x42\xbd\x13\x1b\xa9\xea\x74\xb5\xeb\x2e\x11\x6e\xee\x46\x7f\xd3\x57\x2f\xbb\xb2\x8d\xbe\x57\x19\xea\xde\xa1\x5a\xb3\xbf\x24\x70\xe5\xf8\xdd\xed\x90\xd0\xf8\x3b\x31\x82\x5f\x78\x2e\xe1\xb9\x54\xcf\x2b\xf9\xcb\x13\xf9\xbb\x80\xe7\xd5\x9c\xd0\xf8\x82\xde\xac\x0a\xb9\x4d\x6d\x13\x34\x3e\x4f\x6e\xa9\x75\x3b\x65\xb8\x62\x55\x00\xfe\x79\x02\x7c\x9e\xac\xe6\xa0\xa3\xaa\x7e\xde\x51\x0d\xbd\xe8\xa8\x66\xff\xd6\x51\x9d\xf8\xbe\xa3\xba\xf4\x1f\x86\xab\xee\xa8\x8e\xfe\x1d\xd7\x9b\x11\xd8\x1f\x1b\x9d\xd2\x58\x56\x37\x23\xbd\x72\xd8\xc3\xf0\x3a\x22\x7f\x93\xaf\xa3\x5e\x15\x89\xed\x36\x6a\x54\x40\x36\xb0\xd8\x2d\x43\xe2\x8d\xba\x65\xd7\x66\xa4\x27\x74\xdd\xb2\x87\xf2\x55\xd6\xcd\xa1\xee\x96\x4a\xa0\xfe\xfa\x7e\xba\x63\x9c\xee\x2f\x0a\x7e\x93\x88\x6f\xdd\x58\x16\xfa\xfa\x11\xea\x9c\x88\xc6\x26\xd5\xb9\xac\x7e\x5f\x4c\x87\x33\x89\xf6\xab\xea\x9f\xda\x9c\x20\x08\x60\xa5\xd5\x00\x6d\xdb\x4d\xa3\x17\xb2\x81\xe9\x70\xb6\xdd\x8e\xfe\x66\x1f\x0f\x0e\x5c\xea\xf7\x2e\xd5\xe5\x3d\x78\xee\x32\xfc\x87\x7d\x34\xdf\xd5\x66\x36\x11\x2f\xdb\x9a\x3d\x18\xb9\xaa\x86\x41\xa9\x9f\x68\xb6\x6a\xdf\xf8\xe1\xfc\x50\xd4\xef\x3f\x0f\x8b\xfe\x08\xb7\x7d\xac\x7c\xe7\x69\xb5\xfa\x42\x1e\x4e\x44\x34\x3a\x40\x9d\x46\x1e\x6e\x7c\xf7\x47\xcf\xf5\x67\x59\x55\x6e\xd6\xbe\x64\x37\xab\x8c\xee\xa7\xc5\xcd\xb3\xb4\x98\xc3\x98\xfe\x85\x40\x45\xb3\x0d\xe1\x4d\xa5\x4f\xa6\x59\xd3\xd1\x90\x0b\xdf\xe9\x30\x97\x2d\x22\x16\xe8\xcb\x2b\xb2\x9a\xc5\x12\x4f\x66\x5a\x35\xde\x85\x04\xd4\xd4\xc6\xfe\xa8\xf2\x2f\x3d\x9d\x40\xa6\x45\x35\x7f\xf4\xc3\x0f\x3f\x3c\xbb\x5f\x8a\x9b\x4c\x19\x4a\x88\x58\x14\x1f\x8a\x3b\xa3\x67\x3f\x16\xc1\xf5\x28\x16\xce\x7a\x9a\xeb\xd7\x5a\xbc\x7a\xb8\x44\xb3\x81\xaf\xfd\x9b\xd3\xd6\xd2\x87\x10\x93\x96\xf5\xfb\xd4\x68\x6d\x33\x3c\xf2\xc8\x9e\x24\xa2\x2a\x2c\x13\x4e\xdc\x15\xa7\x25\x2f\x92\x7e\x3f\x4a\x48\xaf\x37\x50\xce\xb2\x36\x4e\xbf\x7f\x5c\x6a\x13\xbc\x12\x94\x1e\x4b\x42\x3d\xe5\x7f\xb9\x26\x56\x96\x91\x11\x1e\x95\x38\xc7\x85\x0e\x45\xbc\x47\x88\x25\x58\xe4\x42\x46\xe0\x47\x48\xa9\x98\x27\xa8\xd2\xee\xd2\x37\x76\x05\xc6\x05\x96\x2b\xe4\x1c\x0c\x17\x63\x36\xe8\x8d\x7b\x03\x95\x6e\x56\x6e\x9c\xe3\x15\xa7\x0b\x76\x3f\x66\xb8\x5c\xd1\x39\x5b\x30\x9a\x3a\x57\x27\x49\x65\x9c\x39\x94\xad\x12\xaf\xbc\x48\xa9\x77\x43\x9a\x79\x26\x05\xed\x7e\xb5\xd9\x22\x72\x99\xdd\xad\xad\x2c\x38\xb2\xfa\x37\x94\x0c\xcd\x25\xaa\x6c\xc0\x37\x16\xb6\x46\x96\x54\x2b\xb1\x43\x4c\x56\x99\x3b\x50\x2b\xf3\x34\xf9\x75\x47\x5c\x58\x1b\xd3\x33\x7a\x48\x5f\x72\xa8\xc7\xbb\x73\x9e\xd2\x59\x20\xaa\xd1\x99\x2b\xa6\x7d\x8e\x59\x94\xa9\x78\x25\xf8\x38\xd1\x05\x95\x6d\x70\xe5\x4b\x24\x1d\x0b\x59\xbf\x1c\xe1\x9d\x51\x4d\xb7\x36\xe2\x75\x2b\x14\x0d\x44\x14\xa3\x4f\xe3\xe2\x2e\xa7\xfc\xad\x86\x17\xd8\x15\xd5\x8f\x72\xd5\xb1\xa7\xe9\x88\x39\x6a\xb6\x91\xfb\xfb\xad\xa6\x79\x12\x28\xe2\x8a\x4e\xe0\x79\xef\x2b\x10\x81\x37\xb6\x9f\x07\x0c\xd4\x46\x54\x10\x23\xdc\x7c\x21\x14\xb1\x3b\x31\x56\x0f\x6d\x1b\x52\x5b\x80\x54\x56\xb4\xc2\xab\xc8\x3f\x43\x4e\x47\x2b\xaf\xb4\x40\xc1\x69\x61\xb2\xd0\x14\xb9\x20\xcc\xec\x27\x76\x88\x0a\xc2\x6a\x36\x80\xda\x10\x09\x34\x13\x59\x3c\xcf\x8a\x9c\x82\x86\xf9\xde\x50\xf2\xf3\xa4\x70\x2d\x85\x82\x66\xb9\xe8\xc0\xa2\xfb\x17\x3b\xca\xc3\x83\x64\xbb\x47\x81\x3d\x9a\x7f\xa6\xbb\xcd\x02\xcd\x6e\x7b\x21\x96\x8c\x95\x4c\xc7\xff\xae\xf8\x70\xaa\x25\xb4\x26\x41\x6b\xe5\x33\x9c\x10\xd6\x61\x75\xf3\x46\xc2\x8d\xde\x3f\x9f\xf8\xb6\xf9\x84\x8d\x03\x2b\x3d\xc2\x3a\xbe\x85\x42\x02\xda\x78\xd6\xaa\x90\x08\x5c\x90\x04\x27\x24\x09\xce\x62\x11\x1a\x9c\x7b\x16\x06\x5e\x1f\x8b\x71\xc3\xe6\x92\x14\x60\x4e\x05\xf3\x60\xed\xcc\xbd\xe6\xfa\xfd\x79\xe4\xbf\x63\x81\x3a\xfe\x3b\xd8\xba\x37\x07\x2a\xda\xbb\xc3\x27\xc1\x24\x8a\xda\xc0\x45\xc7\x76\xdb\x9f\x5a\xd1\xd2\x6d\x51\x29\x24\xe2\xea\xb5\xf9\xc7\xbc\x9e\x3b\xf4\xad\xa3\xb0\xe2\x8e\xbd\x13\x8c\x4d\xbb\x05\xa8\xb7\xdd\xe2\x2d\x00\x92\xda\x07\x99\xd7\x06\x99\xb7\x0f\x92\xb7\x0c\x92\xab\x41\x36\x7a\x10\x36\x8e\x6a\x1a\x14\x46\xbd\xee\x12\x1c\xb7\xc9\x81\x94\x4e\xa8\x07\x82\x39\x8b\x45\x0c\xde\xa9\xdd\xb4\xb8\x70\x88\x00\x80\x03\x90\x68\x10\x91\x39\x5a\xc6\xf5\x86\x01\x8e\xc6\xa7\x90\xb3\x57\xd4\xd1\x12\x03\x52\x46\x47\x0c\x6c\xcc\x35\x24\xb6\x4e\xf7\x52\x7b\x47\x6b\xa6\xd6\x4f\xa5\x77\x75\x12\xa6\x79\x40\x59\x0b\x00\xbd\x29\x32\x4a\x17\x12\x91\x6a\x03\xc0\x9a\x82\x8e\x19\xa1\x72\x72\x61\x0b\x86\x2a\x4a\xfe\xa4\xd7\x65\x96\x12\x35\x34\xb3\x01\xe6\x51\x5e\xd5\x25\xe1\x5a\x39\x10\xe8\x30\xa1\x8a\x45\x8c\x41\xbc\x41\x51\xe5\xc3\x4c\x97\x69\xad\xbd\x52\x6b\xeb\x44\xaa\xa3\x7a\x69\xb7\xd6\xfe\xdd\x9c\xcd\x29\x64\xb6\xd0\x1a\xd9\xfa\x17\xb7\x8e\xb0\x4d\x45\x47\xe9\x1f\xc9\x9c\xe6\x42\xd9\x3e\x5b\xb9\x32\x5c\xc0\x2a\xec\xd9\xdc\x2d\x78\x7f\x84\x7b\xff\xc6\x93\xbb\x1e\x16\x5a\xdf\xaa\xee\xf6\xb9\x77\x05\x1d\x04\xdd\x89\xde\x58\xd3\x13\x1e\xc0\x51\x26\x5d\x9e\xa3\xe3\x5e\xb2\x10\x94\x07\xf9\x8d\x5f\x51\x0f\x80\x7b\xf9\x55\x03\x34\x4f\xbd\xec\x00\xae\xeb\x75\x7a\x59\x9a\x3d\x08\xc0\xad\x2a\x69\xae\x0a\x1a\xc2\x26\x96\x83\xe0\xa6\xbb\x02\x05\xdd\x22\xef\xa1\xca\x21\x94\xa6\xeb\x17\x3a\xe8\x75\x39\xfd\x73\xcd\x38\x2d\xbb\x49\xd7\x35\xdd\x43\x9d\x75\xc4\x31\xc3\x39\x18\xd1\x79\xe6\x95\xe6\x98\xe7\x51\xe3\x70\x61\x27\x8f\x67\x51\x6d\xe3\x6b\xfb\xb4\xb0\xb6\x8f\xe7\xc1\xee\x68\x16\x02\x13\xc3\xba\x79\x27\xda\x24\x3a\x64\x95\x81\x7d\xb8\xbd\x33\xf5\xc2\xaa\x39\x4d\xb4\x4d\x73\xcc\x66\x6d\xc6\x0d\x58\xc7\x79\xcc\x09\xb5\xa6\x9c\xbd\x71\xcf\xb1\x1c\xfa\x86\x42\xd2\x73\x4a\x75\x7c\x88\x73\x84\x85\x7d\xcd\x07\x23\x84\xf0\x94\x63\x31\xab\x22\x81\x3a\x89\x3d\x1e\x98\x29\x63\xf7\xd0\x14\xf3\x6b\x53\x5a\xec\x9c\xcb\x5a\x4d\x66\x3a\x9b\x05\x4c\xd0\xa0\x6e\x5a\xcc\x25\x17\x53\x0f\x51\x6d\x77\xaf\xc9\x04\x67\xa8\x3d\xd8\x96\x05\x70\x90\x77\x49\x93\xb4\x96\xa1\x56\xbc\x5e\xfb\x55\x91\xd6\x35\x10\xeb\x25\x5c\x13\x4a\xe3\xc6\xb3\x0d\x0f\x2e\x25\x61\x5e\x47\x98\x86\x66\xda\x6a\x7a\x9e\x66\x3b\x51\x58\xb3\x99\x39\x6d\x42\xf1\x6d\x1c\xab\xd7\xe4\x58\x74\xda\x3a\xa6\xe8\x2e\x70\x99\xa7\x14\xd2\xe8\xbd\xa8\x01\x58\x2f\xff\x73\xdc\xfb\x37\x41\xef\x45\x0f\x53\x03\xb1\xaa\x30\xea\x69\x6b\xb1\xbf\xe3\xde\xbf\xcd\x55\x86\x66\xc9\xb3\xe4\x4e\x42\xcd\x73\xda\xb0\xe8\x72\x15\x38\x48\x59\x2f\x6d\x80\xe9\x3b\x9e\x5c\x87\x3b\xc1\x1f\xa6\x2c\x6e\x56\x70\x7f\xa1\xb3\xf6\x7c\xe3\x05\x64\x6e\xa2\xbd\x3b\x04\x85\xba\x54\x3d\x90\xf5\x07\xaf\x9a\xde\x37\xad\x21\x36\xb7\xa4\x14\x8f\x86\x32\xf3\x4d\xf6\x8d\x05\xb9\x2b\x88\x7b\x72\x82\xbe\xb1\x5c\x1e\x94\x3b\x3e\x7a\xfb\x8d\xe5\x98\x5f\x0e\xec\xfd\xbf\xa9\x9c\x73\x35\xe7\x23\x5e\x08\x04\x19\x70\x2f\x60\xd3\xe8\x25\x88\x7a\x02\x97\xc8\xb4\xe3\x64\x45\x0b\x2d\xaa\xba\x4a\xe6\x5f\xae\xd6\x3c\xa7\xfc\x5f\x28\xa0\x02\x91\xfd\xa7\x2c\x11\x8b\x82\xdf\x80\xe5\x5f\xab\xc8\xaa\xa4\xe2\x82\xdd\xd0\x62\x2d\x30\x07\x95\xc0\x4d\x55\x53\xa3\x67\x8b\xa8\x45\x55\xee\x13\x2f\x6e\x58\x69\x43\x8f\xe9\xd7\x98\xd3\xb2\xc8\x6e\xa9\xf5\x71\x27\x6b\xe4\xb1\x58\x52\xd0\xad\x6f\xaf\xca\xe8\x3e\x9d\x5e\x95\x94\xdf\x52\xcb\xdd\x0f\xf5\x02\xd6\xbf\x4b\x4a\xbe\x20\x66\xd3\xc6\xb5\x43\xde\xeb\x79\xce\x4a\x0b\x55\x24\x2a\xf0\x66\xbe\x4c\x78\x32\x17\x94\xbf\x4d\x44\xa2\x26\x49\x76\x2e\xca\xc9\x60\x90\xff\xe5\x00\x17\x71\x9a\x08\x10\x30\xe5\x12\xfd\xba\xee\x0b\x15\x74\x2e\x34\x1d\x50\x93\xc7\x8d\xbe\xa0\x9b\xc5\x31\x80\x34\xf2\xca\xa5\x28\x7d\x4b\x30\xee\x33\x79\x28\x79\xe5\xbf\x83\xa7\xf4\xe2\x6e\x2c\x5b\x73\x3a\x69\x10\xe4\x74\x2c\xe7\x4d\x15\xfe\x28\x5f\x85\x3a\xd3\x05\x79\xf6\x5b\x3a\x78\xd6\xf1\x65\x67\x56\x8f\x5d\x9b\x04\x74\xea\x96\x1f\x92\x19\xa0\x84\xd0\xed\xd6\xd9\x0f\xc8\xb4\x22\x16\x14\x7c\xb9\x7b\x4e\x6d\x03\xf3\x88\x22\x07\xba\x65\xbb\xb5\x8f\x17\xe0\xe1\xbd\xdf\xaf\x25\x4c\xed\xfb\x09\x15\xcb\x22\x9d\x85\x72\x9b\x9a\x38\x74\x7f\xa4\xe3\x23\x5b\x27\x0a\xec\x65\x71\xc8\x06\xe4\x05\x62\x8b\x88\x4f\xd9\x4c\x11\xd1\x7c\xca\x06\xa3\x99\x72\xf5\x94\x13\xa6\x43\x00\x3f\x21\x27\xa8\x35\x71\xd0\xd2\xc4\xf7\x4f\x36\xb1\x7f\xb0\xb3\x91\xb9\x0e\x29\x34\xf4\x9b\x81\x28\x0a\xc3\x30\x8a\x82\x71\x4c\x05\x61\x14\x06\xcf\x07\x7c\x86\x13\xb2\x51\xae\xf1\xc7\x32\x69\x28\x93\x6e\x60\x9e\xe0\x7d\x04\x59\xf8\x75\x09\x6f\x07\xf2\x4d\x39\x08\xb6\xcc\x5c\xd1\xef\xf7\x20\xa9\xc7\xf2\x6e\x31\x29\x94\x0d\xc1\xb8\xd7\xab\x3a\xb9\xf1\x78\xdf\xd2\xe5\xb4\x66\x41\x0e\x14\xbc\x9c\x77\xa3\x11\xb6\xff\x3d\x4c\x0b\xa2\xaf\x88\x98\x72\xc2\x06\x51\x4e\xa2\x62\x9f\xa1\x67\xdf\xa3\xfd\xfc\x2f\xdf\xcf\x26\x8c\xf0\xc1\xf7\xe3\xc2\x6e\xf8\x2e\x64\x65\xb3\x09\x1b\x7c\x3f\x66\x3b\xb8\x4a\x41\x36\x15\x86\xfb\x19\xc5\x57\x5e\xfe\xb9\xa6\x6b\xfa\x9a\xb2\xfc\x1a\xe4\xfa\x34\xb5\x56\x25\x6a\x5a\xfe\x21\xbf\x97\x61\x68\x78\x15\xae\xd6\xc8\x3f\xa1\x06\x5b\x0a\xec\xdc\xa9\x71\xed\x08\xea\x93\x86\xd3\x53\xb7\xca\xa7\x3a\x91\x57\x30\x53\xef\x94\x90\x95\x2d\x22\x2d\x6a\x54\xf5\x59\x6d\x21\xcf\x0e\x44\x7d\x99\x3e\xff\x77\x3a\x78\x31\x73\x6e\x8f\x84\x9e\x72\x2d\x94\xcc\xb4\x6d\x8b\xd1\x4d\xdd\x28\xd6\x63\x9c\x63\xe0\x2f\x4c\x78\x08\xd3\xb9\x4e\x63\xac\xca\xe6\x37\x42\xd8\xaa\x12\x36\x27\xc9\x9a\x70\x46\xbb\x66\xd1\x4b\xaf\xcd\x93\x17\xb9\x34\xef\xf7\xf3\xc8\x38\x92\xd8\x51\x53\x87\x2d\x22\xe3\xbb\xf4\xd5\xd0\xf8\x2c\x2b\xa3\xe6\x94\xa2\x0e\x27\xc9\x44\xaf\xd0\x6d\xf1\x05\xdc\xfc\x9f\xaa\xb3\x3f\xf6\x92\x9d\x1d\x29\x71\xcb\x79\x98\xbd\xb4\x1e\x52\x33\x7d\xdc\xdd\xd7\x01\x79\x61\x3c\x78\x45\x82\x14\xd3\x6c\x30\x9a\xa1\x7e\x9f\x47\xc5\x34\x9b\x61\x81\x65\xca\xc1\x0c\x27\xf0\xf0\x7c\x86\xbc\x7d\xb2\xf7\xf5\x49\x6c\x0e\x25\xbe\x59\x97\xe2\x57\x46\xb3\xf4\xe9\xaf\x91\xf5\x41\x34\xaa\xec\xac\xb2\x7e\x9f\x19\xa7\xe4\x3b\x5b\x25\xc3\x70\x2f\xef\x8d\x3c\x17\x2c\xc1\x1e\x7c\x35\xd4\xa9\x6a\x6b\xed\x0d\x51\xb5\x4c\xca\x5f\x0a\x5e\x8b\x8e\xb0\xbb\xad\x57\xc3\xed\xb6\xad\xde\x6a\x9e\xe4\x73\x9a\x45\x16\x02\x19\xd0\x23\xaa\xc0\x47\x8f\xde\x46\x9a\x07\x0e\xf6\xaa\xd6\xfd\x0a\x76\x94\x09\x07\x2d\xd4\xce\x62\xc4\xc0\x79\x8b\x83\x5f\xed\x8f\x26\x11\x77\x37\x3e\x2f\x10\xde\x1b\xa2\x71\x64\xb3\xee\x5a\x32\x84\x5e\xed\x8f\x24\xc7\xa7\x60\x33\x50\x6e\x72\x42\x94\x9e\x94\x11\xe0\x35\x27\x25\x0e\x32\xe0\x0d\x24\xc2\x9e\xc4\xcd\xb1\xeb\xc0\x85\xec\xcf\x35\xad\xcb\x87\xbf\x32\x01\x56\x29\x2d\x00\x57\x41\x7e\xa5\x05\xc7\x90\x39\x75\xcc\x68\xb7\xf9\x0e\x6a\x8a\xc0\x35\x60\xdb\x10\xf6\x5f\x74\x98\x56\x7a\x4b\x3c\xc5\xdc\xd2\x2f\xd1\x29\xa7\xc5\xe0\x60\x46\x38\x96\x0f\xcf\x67\xc4\x5c\x10\x7e\x65\xf8\x97\xd7\x54\xbc\xa5\x57\xeb\xeb\xf7\xf9\xa2\x30\xc0\x11\x05\x32\x21\xb3\x25\x5e\xa0\x4a\x9d\x69\xcb\xce\x3b\x05\x3e\x61\xc2\x42\x8d\x85\xa4\x80\xb3\x07\xb8\xa5\xa9\x1a\xa0\xc1\x8c\x09\x33\xed\x01\xfa\xab\x55\xcc\xc1\xde\xbc\x40\x9b\x3c\x2a\x30\x43\x95\x71\xd8\xbb\xa8\xc5\x75\x96\x38\x41\xe3\x99\x3f\x15\x1a\xd1\x31\xd9\xd4\xeb\xc7\xe4\x86\xbe\xf7\x51\x89\x4d\x2d\x09\x85\xa0\xeb\xe9\x7a\x4e\x23\x8f\x02\xf7\xbc\xb6\x53\x70\xf9\x00\xac\x04\xc7\x62\xca\x67\x4a\x90\x86\xbc\x9a\x4a\x54\x95\xf3\x25\x95\x84\xb8\x1b\x23\x0e\xd7\x56\x65\x9c\xd2\x59\xb0\xfe\x49\xd3\x12\xf9\xd7\x62\xdd\x4d\x84\xa0\x37\x2b\x41\x41\xeb\xc6\x54\x0d\xfa\x3c\x9a\x0a\xcd\xbb\x49\x17\x6a\xd4\x4e\x4d\xba\x62\x99\x88\x6e\x5a\xd0\x32\xff\xab\xe8\xd2\x7b\x56\x8a\xdf\x91\xbb\xd7\x68\x4a\xa1\xfe\xc9\x66\x16\x05\xef\x26\x5d\xb5\x83\xda\xdb\xf4\x8f\x64\x63\xf2\xd9\x24\x89\xbd\x33\xa7\x66\xaa\x40\xe3\x44\x47\x04\xd1\xef\x06\xb7\x92\xbd\x91\xa7\x31\x2c\x3f\x92\xda\xf2\x59\x6f\x22\xcd\xe6\x5e\xe6\x87\x40\xe6\xd5\x8b\x4c\x5b\xf2\xce\x30\x78\xfa\x34\x81\x39\xf4\x5a\xf1\x19\x8a\x2d\x00\x76\x17\xad\x61\xd1\xc1\x00\x1b\x60\x5e\x6f\xdf\x61\x0c\x63\x02\xa0\x2e\xaa\x34\x78\x1f\x79\x28\xa5\xfd\x24\xd6\xc6\xbe\xa9\x4c\xf8\xa4\xc6\x04\xe0\x82\x0c\x0f\x8b\x97\xec\x10\x35\xc7\x5b\xcc\x70\x7d\x5c\x38\x97\x9b\x5a\xc4\xf5\x66\x71\x31\x18\xb8\x3b\xb8\xaa\x66\x58\xe9\xf9\xa1\x84\x18\x1a\xc6\x59\xfb\x21\x4c\x1e\xd7\x71\x4c\xb4\x8f\xf6\x20\x47\xa5\x6c\x29\x7d\x4d\x66\x7c\xdb\x62\xda\xed\x69\xb4\x9b\xe0\x25\x6a\xe8\x75\xf7\x31\x46\x09\x37\x47\x87\xfe\xdc\xe6\x48\x0b\x12\x85\xe7\x54\x66\xe8\xe9\x00\x28\x7e\xc0\xff\x86\x13\xef\x75\x34\xc3\xa5\x55\x39\xe8\xd4\x18\x56\x52\x4e\x22\x4e\x0a\x59\xb7\x8a\x32\x6c\x89\x72\xc3\x4e\x95\xfd\x7e\x02\x6a\x70\x13\x41\x64\x56\x34\x4d\x66\xe3\x16\x9e\xb7\x00\xd4\x31\xc2\xb6\xb3\x05\xc2\xf9\x2b\x6d\x66\x96\x91\x7c\x9f\x75\xa8\xe7\x83\x26\x73\x1e\xc0\xd7\x64\x78\xb8\x7e\x99\x1d\xae\x07\x03\x44\xa7\xeb\x99\xd7\xf7\xf5\x80\x59\x2f\x37\x53\x8e\x05\xa6\x1e\x03\x76\x15\xce\x27\x66\x66\x95\x0f\x24\x10\xaa\x4d\xee\x24\x0a\xa7\x0f\xb3\x70\x8a\xd4\xfd\x0d\x1a\x47\x53\xb8\x95\x9b\x91\xeb\x28\x8e\x63\x9b\x05\x39\x5b\xeb\x7c\xc2\xc8\x70\x9c\x48\x3c\xa9\x74\x90\xd1\x76\x1b\x71\xa2\xe2\x39\x63\x97\x8a\xb0\xaa\x0a\x33\x62\x3d\x77\x31\x3c\x1a\x22\xcc\x67\x95\x32\x48\x18\xe2\x4b\x32\xc4\x77\x64\x88\x8f\xc9\x10\x4b\x60\x72\x4a\x86\xf8\x9c\x0c\xf1\x05\x19\xe2\x13\x32\xc4\x9f\xc8\x10\x1f\x91\x21\x7e\x43\x86\xf8\x0b\x19\xe2\x33\x32\xc4\x7f\x90\x21\x7e\x4b\x86\xf8\x23\x19\xe2\xf7\x64\x88\x3f\x90\x21\x7e\x47\x86\xf8\x91\x0c\xb5\x2d\xc3\xe7\x1d\x61\xb1\x41\x59\xd9\x1a\x10\x69\x03\xf3\xf7\xe0\x41\x64\x1e\x7a\x9c\x57\x49\xe7\x81\xa1\xfc\x25\xa8\x3f\xbe\x49\xb2\xec\x2a\x99\x7f\x29\xc9\x86\xe6\xe9\x78\x3a\xc3\x70\x91\x31\x9e\xce\x34\x76\xba\x14\xec\x86\x1a\x41\xc0\x7b\xff\xfa\x4a\x7d\x29\x5d\x85\xc9\x5a\x14\x7c\x9d\xdb\x1e\x99\x04\xd5\xae\x2b\x18\xa0\xb6\x90\x39\xda\x6e\x37\x15\x6e\x78\x0f\xf0\xf3\x18\x29\x11\x90\x30\x8a\xc0\xbf\xf4\x93\xc8\xce\xcc\xe3\x5d\x99\x3d\x40\x34\x34\x63\x29\xf2\xd7\x72\x1e\xc2\xda\x74\xe2\x76\x7b\x63\x73\x1d\xe7\x69\x3d\xcf\x71\x9e\xba\x1c\x57\xc5\x3a\x4f\xcf\xd6\xf9\xf1\xfd\x8a\x71\x9a\x5e\xa8\x29\x53\xdf\x78\x2d\x39\xbe\x62\x79\xaa\x2e\xde\xfc\xd2\x47\x6a\x16\x65\x4b\x20\xff\xfa\x30\x18\x28\x0a\x3d\x98\x64\xcb\x7e\x7d\xeb\x2a\x5c\xd2\x3c\x05\xad\x86\xca\x57\x9c\x31\xc3\xb8\x0c\xc4\x73\xdb\x2d\x53\xbc\xe1\xe5\xca\x08\xec\x8c\x5e\x4d\xad\x8b\xea\x3e\x61\x5e\xac\x73\x41\xb9\x8b\x42\xb6\x51\xbb\xea\x12\xcb\x4d\x76\x87\x61\xeb\x95\x63\x9d\x7a\x0c\xa9\xc3\x0a\xeb\x9e\x96\xe3\x8d\x92\x99\xa5\xe3\xf7\x78\x5e\xdc\xac\x24\x05\x9f\x8e\x3f\x54\x98\xaf\xf3\xf1\x3d\xfe\xa3\x60\xf9\xf8\x14\xa7\x74\x41\xf9\xf8\x1c\x1b\xaa\x60\x7c\x61\x1f\xdf\x0b\xca\x93\xab\x8c\x8e\x4f\x54\xae\xd3\x7c\x4e\xc7\x9f\xec\x67\x78\x3d\xc2\x9e\x50\xec\x0d\xce\x12\xc9\x10\x7f\xc1\x92\x0a\x11\x22\xa3\xe3\x33\x9c\x52\x39\xb8\x39\x1d\xff\x81\x15\x73\xa2\x96\x69\xfc\x56\xbf\x8e\x3f\xe2\xac\x28\x56\xe5\x78\x23\x0a\x91\x64\xe3\x77\x38\xa7\xa5\xec\xe9\x63\x55\xa9\x1b\x13\x6f\xab\xd5\xf9\x23\xff\x5b\xa5\x03\x8c\x6c\x2e\x95\xf7\xf6\xae\x09\xc5\x62\x96\xa3\xe6\xf9\xde\x9c\x71\x0d\x21\x9b\x9b\x61\x12\xd9\x7b\xf0\x4b\xd5\x57\xbd\x42\x11\x42\x63\xcf\x79\x59\xf4\x38\x18\xb4\xc0\x08\xe3\x89\x1f\xe1\x77\x92\x76\x68\x6d\x1b\x80\x7f\x9d\xdc\x28\x25\xe1\x79\x6c\xea\xbc\x14\x9c\x5d\x5f\x53\x1e\xf5\xd4\xe5\x28\x96\x34\x2b\x0a\x0f\x18\xd0\xb1\x98\x56\x72\x33\xa2\xcd\x9d\x2d\x0a\x9b\x73\x84\x2a\xdf\x99\xaf\xc5\x52\x56\xe7\xce\xf7\x92\x73\xf1\xb0\xa2\xfa\xba\xd3\x00\x35\xa5\x27\x7e\x45\xbb\x89\x55\xb2\xd1\xd6\x0d\x86\xa9\x0b\x61\x60\x9d\xf4\xe5\xad\xd5\xff\xfe\x26\xc9\xf3\x42\x74\x25\x91\xd0\x55\x3a\xe4\x92\xf2\xec\x5e\xd1\x79\xb2\x96\x88\x5e\x51\x9c\x10\x22\xc3\x92\x9c\x36\x52\x6a\xb1\x58\x34\xfc\xce\xb6\x77\x63\x8f\x6e\xb7\xdf\xda\x95\xc5\xe2\xdb\xfb\xa2\x44\x82\xca\x7b\xbc\xf0\xd4\xa4\x86\x87\xcc\xb9\x8b\x65\x83\x01\xd2\xe2\x47\xf0\x6b\x4b\xf6\x86\x98\xfb\x6a\x91\x98\xed\xef\x2b\x1b\x87\x7c\xd7\x22\x78\x5d\x9b\x9b\x15\xb1\x04\xb9\xeb\x52\x0f\x55\xb0\x33\x37\xf7\x6a\xf7\x03\x9e\xe5\x0d\x94\x1d\x90\xed\x12\x76\x1a\x9f\xbe\xe0\x95\x0b\x6d\x4e\xff\x1b\xa5\xa1\x88\x2e\x0e\x00\x42\xf3\x44\x71\x1c\x3b\x96\xfd\xdc\x6c\xc6\x1a\xe3\x04\x99\x7c\x6e\x4a\xf9\x5a\xbb\xd0\xed\x03\xed\xa2\xdb\x77\xa1\x42\x01\x57\x4f\x2c\x73\xa3\x65\xa6\x61\xaf\x94\x23\x44\x73\xc0\x22\xe4\x37\xac\xf8\xb5\xbd\x91\x64\x3d\xea\x50\x4e\xed\xa7\x13\x0d\x3b\xf8\xff\x4c\x83\x80\x28\x56\x78\x2a\x24\xe3\x61\xe7\x49\x42\xce\xb6\xb9\xfa\x54\x9f\xab\x7a\xc6\xaa\xf6\x41\xcd\xd9\xd1\xff\xc6\x9c\x0d\x61\xce\xdc\x75\x87\xed\xf4\x1b\xd3\x69\x80\xfd\xe1\x7e\xa9\x54\x1a\xda\x7c\xf1\xb7\x95\xa4\x24\xc3\xcb\xca\x1d\xdb\x0d\xab\xdb\x21\x67\xc4\x35\x31\x27\x6b\x3c\x04\x4d\x6a\x23\xbd\x2c\x08\x9f\xb2\xfd\xd1\xac\x93\xa8\xc0\x01\xb9\xa3\x2e\xb9\xb6\x89\x1b\x49\x1c\xad\x89\x66\xd3\x8b\xea\xa9\xdd\xad\xba\x6e\xa4\x33\x95\xc1\x68\x11\xda\x9c\x59\xfc\x32\xb5\x22\x00\xb2\x37\x9c\x91\xab\x5a\xf7\x13\xb2\x06\x56\xd7\x27\xf4\xb4\x4e\x32\x88\x04\x8c\xda\x90\x6a\x4a\xe6\x2c\x26\xb7\xe3\x1c\x33\x84\x0b\x23\x37\x84\x43\xa6\xfa\xa0\xb8\x1b\x53\x48\x55\x37\x4d\x06\xa3\x99\x36\xf0\x4f\x06\x2f\x3a\xc1\xb7\x72\xa6\x8c\x6a\xa3\x5a\x2a\xb1\x37\x5f\x5d\x5a\x19\xfc\x1c\xa1\xcd\x1f\xad\x03\x1b\xb5\x0d\xcc\xaf\x11\x97\x7a\x9c\x89\x1b\x5c\xf9\xcf\x0d\xce\x93\x21\x5b\x22\x49\xdd\x93\x0d\x18\x9e\x93\x72\xf0\xa2\x93\x4c\xe7\x12\x9e\xde\xc2\x32\xdf\x22\x4c\x49\x32\x2d\xcd\x24\x2c\x49\x1a\x65\xba\x1f\xe5\xe0\x7b\x42\xc8\x12\x25\x72\xc4\x19\x86\x72\xb9\x6b\x66\x11\xce\x63\x39\xf8\xdb\x2c\x98\x3d\x03\xa6\x97\x78\x88\x33\x6c\xf8\xa9\x05\xc2\x6d\x99\x4a\xfc\x3d\xaa\x86\x8a\x33\xd4\xa0\x95\x02\x31\x90\x29\x72\xc7\x9e\x1a\x37\xef\x3e\x31\x14\xa1\xcd\x5b\x8b\xb4\xed\x9d\xa1\x2b\xb5\x83\x55\xa8\x11\x25\xd5\x32\x29\x6d\x7d\xc1\x5e\xd6\x9d\xad\xcb\x8e\x35\x9d\x63\x84\xc6\x4a\x1a\xf1\x71\x30\xc0\xc6\x4b\xa7\xa1\x8c\x3a\x5f\xbd\x73\x9c\xf8\x3d\xfa\x20\x97\x1c\x7a\x12\x51\x34\xde\x8b\x8c\x77\x57\x49\x60\x6d\xb7\x7b\x54\x91\x3a\xf0\xa4\x24\x4c\xa8\xdf\xd7\x89\xb1\xed\x4b\x55\x07\x4a\x9b\x76\x58\x55\x05\xa2\x0d\x27\xbd\x01\xb8\xa7\x47\xb0\xd1\x23\x1d\x37\x69\x79\x6c\xa8\x6c\xed\x9a\x5b\xbf\x61\x35\x65\xe3\x79\x70\x76\xf0\xf7\xf8\x00\xe1\x80\xca\x1b\x4f\xdb\xe8\x3a\x80\xcc\x0d\x8a\x70\x66\x22\xd2\x51\x39\xde\x50\x26\xe3\xf5\x19\x55\x15\x50\x6e\xad\x81\xa9\x6c\x0b\x4a\xa6\xe0\xa9\x34\x37\x9d\x1d\xf6\x68\x9e\x02\xd1\x40\x53\x88\x3d\x56\xac\x25\x1d\x27\x89\x48\x4d\xbf\x60\x26\x29\x18\xc1\x1f\x36\xb9\x15\x57\x51\x67\x07\x2b\xe9\x12\x86\x24\xa0\x95\x84\x4b\x10\x22\xa7\x21\x6b\xab\x0b\xda\xf4\x59\x32\x88\xc4\x6c\xd2\x02\xf9\xe1\x78\xbe\x8d\xd9\xf6\x6e\x4d\x8c\x94\xaf\x46\x68\xbb\xa0\xdb\xf5\x2a\x39\xaa\x53\xd1\x34\x4f\x7b\x5e\x74\x37\xc5\x7d\x42\x28\xf7\xaa\xf2\x49\x1a\xdf\x59\x93\xb9\xb6\xab\xd5\x3e\xa9\x53\x51\x63\x5f\x2b\xd4\x97\x7a\x47\x35\x79\xb7\x57\x46\xab\x41\xe8\xeb\xb7\xc2\x5c\xbc\x99\x6d\xac\x99\x1a\x9c\x23\xb9\x4c\xd6\x5f\x41\x43\x76\xce\xd0\x26\x8f\x18\x0a\x1d\x69\x00\x3f\xa0\x27\x7c\x47\xe9\x96\xfc\x55\x1d\xb0\x6c\xda\x79\x64\x0b\xa0\xad\xe2\x82\x85\x54\x5f\x67\x9f\x51\x55\xc3\xb0\xfe\x7d\x4c\x3b\xcd\x62\x28\x9a\x3a\x66\xc8\x71\x42\x1e\x06\x03\x23\x2a\x6c\x01\x79\x28\x48\x03\x26\xa2\xc0\x89\x06\xea\xcc\x74\xba\x15\x60\x77\xbc\x9b\x98\x34\x2a\x6a\xb8\xbc\x1d\x17\x0c\x71\x4b\xed\x5f\x41\x08\x49\xd5\x06\x3c\x6b\xce\xb5\x5b\x86\x76\x28\xb4\x9a\x43\x80\xcd\x04\x68\x3c\xa0\x36\x24\xa0\x7b\x29\xf6\x47\xf8\x7b\x04\x87\x5a\x7c\x05\x67\xe1\xbd\xa1\xe5\x91\x2b\x7b\x90\x9a\xf1\x19\x9e\xe2\x03\xf7\x24\xec\x08\xb9\xa4\xc0\x97\x77\x3e\x65\x33\x75\x08\x1b\x02\x1d\xbb\xff\xbe\x26\x43\xf3\xe1\x44\x70\x76\x42\x50\x54\xab\x1c\xbb\x9d\x8f\xaa\x5d\x99\x36\xce\xbe\x2a\xc0\x07\x82\x0c\xbd\x18\xd3\xe6\xda\x22\x10\x4b\x18\x51\x7e\x6d\xd7\x1e\x8a\x97\x5c\xad\x1d\x5c\x01\x4c\xc5\xec\x15\xd3\x81\xf2\x8c\x3e\x89\x18\xbc\x80\x19\x2c\x24\x15\x67\x83\xee\x4e\xc5\xe0\x60\x86\x4b\x78\x78\x3e\xc3\x19\x3c\x18\xda\xa5\x06\xa0\x1c\x1d\x9f\xe3\x04\x97\xb8\x90\x5c\x48\x86\xaa\xca\xda\xe6\x0d\x6d\xfc\xcd\xf6\xed\x5f\xed\xda\x14\x9b\xaf\x11\x2b\x3b\xaa\x6b\x29\xb0\xf1\x23\x79\xd5\x56\x79\x07\xb0\x31\x65\xdb\x8a\xa0\xdd\x22\x57\x54\xb5\x77\x4b\x2e\xc1\x70\xaf\x1d\x74\x6c\x9a\xcb\x0e\x02\xce\xd6\x55\xf5\x3d\x1d\x0d\x31\xdd\x17\x01\x88\x70\x9d\xa9\x95\xf5\xf8\xaa\x27\x04\x9e\x0a\x45\x35\xc8\x22\xaf\x7f\xed\x92\x2d\x83\xc2\x68\x5d\xba\xa9\xa0\xf1\x53\x10\x57\xd7\xdb\x7e\x90\x0c\x7e\x68\x8a\x7f\xc1\xe4\xa1\x91\x8f\xa2\xcd\x7b\xcd\x61\x34\x67\x8f\xde\x5b\x25\x01\x23\x3d\x05\x7a\xa4\xc3\x27\x4a\x5a\x3f\x6e\xc1\x2e\xc3\xaa\xfa\x1c\x2b\x19\xf4\x12\x7f\x6e\x28\x43\xea\x94\x8f\x10\x14\x1b\xda\x7d\x4d\x3e\x7b\x9a\x9a\xaf\xb5\xa6\x66\x9a\x5c\xef\xdf\x24\xab\xff\x6d\x3b\x62\x8f\x07\xb6\xf7\x37\x8e\xce\xbd\xa5\x5c\xb0\xb9\x56\x94\xe2\x96\x6f\x88\x57\xbc\x10\x85\xa4\xc4\xe3\x24\x4d\x49\xab\x9d\x5c\x4b\x6c\x8b\x9e\xe1\xde\xba\xbf\x7f\xa1\x0f\xbf\x77\x59\x69\x6c\x13\xd2\x9e\x51\xea\x08\xdb\xc5\x05\x61\xda\x47\x8c\x52\x18\xba\x4d\x32\x22\x21\x34\x5b\x44\x8d\xbb\x05\x8e\x20\xef\x71\x7a\x4d\xa3\x02\xab\x72\x1c\x29\xe4\xd9\x35\xb0\x33\x21\xc3\xc3\xc4\x09\xc7\x92\xc1\xa0\xad\xd4\x34\x99\x21\x1d\x1c\xaa\xad\xa5\xdc\x2b\xa3\x4a\xe4\x08\x17\x5e\x4b\xaa\x95\xbc\xbd\x15\x5d\x42\xb6\x81\x0b\x70\x3b\x19\x4c\xa7\xcc\x53\xb6\xcc\x29\xcc\x0c\xcc\x85\x11\x07\x04\x25\x69\x32\x5f\xd6\x62\x0d\xf8\x33\x19\xdf\x25\xd9\x17\x1d\x9b\xc0\x15\x12\xc5\xaa\x2c\xb8\x68\x96\xa3\xe0\x2b\x48\xe6\xae\x24\xf9\x61\xf7\x8e\x71\x80\xfd\xe4\xb6\x09\x55\x91\x94\x53\x67\xb9\x0b\x72\x63\x9a\x25\x96\xfe\xbb\xf2\x92\xae\x52\xbe\xbe\xc5\x76\x6e\xae\x1b\x56\x96\x2c\xbf\xee\x7e\xa1\x0f\x5e\x14\x63\x50\xa0\xdc\x7a\xdd\xd2\xa6\xb0\x1c\x6c\x60\xd9\x22\xd2\xd7\xf0\xd3\x7c\x86\xe2\x2f\xf4\x21\x20\x59\x02\x61\x8c\x1e\x15\x1f\x28\x72\x72\xca\x67\x64\xc3\xd2\xfb\x31\xc7\x5f\xe8\xc3\x98\xe2\xdb\x24\xb3\x34\xe2\x5a\x8c\xf7\x46\x78\x91\x25\xd7\xf2\xdf\x88\x8b\xaa\xd6\xb5\xae\xf9\x0f\x55\x30\x74\x49\xe7\xe0\xc3\x4a\x76\x09\x79\xa6\xbc\xc3\xad\xd8\x31\x0e\x31\xcd\x81\xde\x8a\x59\x7a\x6f\xec\x4a\x45\xd0\x69\xd9\x63\xf8\x8c\x69\x5c\xac\x85\x84\x5c\x41\x7f\xe4\x0e\x69\xee\x04\x4e\x4b\x2a\xbc\xc0\xe3\x82\x0c\x0d\x11\xd8\x0c\xae\x02\x13\x23\x66\x1d\x2e\x1b\xd0\x1c\xfe\x2d\x2b\x99\x88\x38\xee\xf5\xb4\xcb\x3d\xd8\x5b\xde\xca\xe3\xfa\xae\x84\xd1\x37\xc3\x76\x50\xbd\x3e\x2d\x3c\xe6\xfc\x61\x9e\xd1\x6e\x4a\x05\x84\x06\x19\x77\x7b\x03\x31\xe8\x75\x5f\xee\xcb\x07\x38\xc7\x43\x08\xc8\x65\xb0\xe9\x53\x11\x8e\x34\x15\x3b\xa5\x53\x3e\x9b\xfd\x53\x2d\x42\x3f\x5d\xf3\x95\xa1\x8b\xf5\x4c\x62\x6f\x56\x5c\xe4\x71\x79\x28\x6a\xea\x90\x39\x69\x6b\x45\xfb\x39\xaa\xcd\xa4\x2c\x1e\x62\x8b\x7c\x40\x4c\x7f\x24\x86\x71\x5d\x37\xee\x5e\xdd\x7c\x43\xc7\xfc\x23\xed\xce\x6d\xed\x2c\x7b\xbd\x34\x49\x6a\x0d\x6d\x62\x9b\x13\x00\x3d\xbd\xf4\x65\x60\xf6\x1f\xcb\xe3\x41\xf6\x46\x61\x5f\x60\x5e\x5a\x5d\xea\xba\x4e\x19\x12\x17\x06\x6d\xa3\xf1\xca\x6e\x40\xeb\xfa\x86\x46\x9d\x84\x43\x0b\xea\x8d\xd4\x60\xb8\xd5\xe2\x58\xc0\x28\xaf\xc8\xd0\xd7\x9c\x9a\x16\x40\xed\x26\xd0\x39\x34\x2f\x72\xc1\xf2\x35\x75\x49\x64\x6f\x88\xb5\x02\x74\x81\xb0\x20\x84\x24\x70\x44\x15\xd1\xac\x5b\xfe\x3f\x85\x59\xd4\x75\xb9\x7c\x9f\xcf\x8b\x1b\x96\x5f\x47\x5a\xa1\xae\xab\xd5\x10\x30\xb3\x99\x6b\xcb\xe1\x97\xda\x11\x32\xc8\x9b\x0b\x47\xf9\xef\x8f\x0e\xf9\x2b\xb9\xa3\xf7\xf7\x83\x40\x5d\x1a\xbc\x41\xff\xb7\x5b\xed\xfd\x2d\xaf\xb7\x5a\xc3\x1f\xb5\x40\x60\x4f\x78\x4e\x74\xa7\xa5\x23\x22\x26\x67\x03\x83\x95\x3f\x34\x50\x41\xfc\xde\x6f\xc2\x16\x6d\xa0\x5f\x76\xb5\x01\x92\xa6\x5e\xb1\xc1\x60\x46\x86\x5b\x5a\x9b\xc0\x62\xd5\xe2\xf0\x5a\x61\x81\xe9\xfe\xbe\x57\x7c\xa6\xba\xa8\x49\x30\x70\x77\xbe\x7f\x95\x5c\xd1\x7f\x65\x6c\xb2\x3b\x9e\xac\x3e\x42\x08\x96\xf3\x75\xdd\xb1\x0d\x78\x66\x59\x26\x65\xe4\xa2\x90\x32\xa3\x0b\xea\xb9\x7b\x41\x1b\xeb\x3e\xc1\x0d\x9b\x84\xa1\x23\xbc\x09\xc1\xbe\xd6\xc9\x58\xf7\x86\x63\x9a\xaf\x6f\xf4\xe5\xfa\xde\x08\xdf\x71\x26\xd4\xf3\x10\xcf\x8b\x7c\xc1\xae\xd7\xfa\xdb\xb0\xaa\xe4\x6e\x55\x2a\xa6\x1c\x61\x01\xa1\x33\x55\x18\xa9\xa4\x2c\x25\xaf\xfd\x26\x84\xd8\x68\xa3\x42\xe6\xe4\x4b\xca\x99\x28\x3f\x14\x45\x19\xa0\x39\x8e\x36\xc3\x0e\xdd\xd9\x75\x6b\xed\x0e\x6e\x5f\xf8\x57\x06\x42\xbf\xd6\x75\x77\x49\xae\x06\x50\x29\x37\xec\xd7\x34\x35\x31\x5c\x3e\x30\x41\x79\x92\x35\xfa\x29\xd1\xf1\x76\x1b\x39\xcb\xcf\xa1\xf3\x4f\x41\x63\x9e\xdc\x11\x81\xa9\xe7\x37\x5c\x4e\x47\x8d\x72\x33\x8c\xa5\xe8\xf7\x8b\x60\x4d\x84\x71\x8a\xc0\xe1\x8b\xa7\xc7\x4c\x5d\xc8\xb8\x8b\x25\x2b\xdf\xdb\x28\x6a\x29\x49\xe4\x3e\x2f\xca\x92\x5d\x65\xf4\x8d\x9b\x8a\x33\x28\x48\x4a\x89\xd8\x61\x26\xdf\x52\xf5\x69\x2d\xe9\x56\x88\x1c\xd1\x58\x1c\xd5\xe5\xe6\x16\xac\xbb\xa3\x32\x26\x07\xe0\x5c\x07\x79\x01\x5f\x0b\xad\x38\x82\x62\x6f\x51\x3a\x82\x9c\xd1\x45\x06\x8b\x69\x52\x23\x86\xed\xb5\x0d\xb6\xb2\x57\x49\xd8\x83\x04\x50\xd6\x81\x9b\x17\x60\x4a\x16\x89\x85\x82\x53\xaa\xb7\xef\x0a\x7e\xba\x80\xbb\x52\x51\x70\xe5\x17\xaa\xbe\x66\x46\x5c\x3d\xac\xf9\x0e\x24\xa1\x8f\x6d\x15\xf3\x93\x10\x3a\xd5\xce\xb6\x99\xae\x75\x06\x87\xb0\xee\x59\x6a\xbb\x8d\xea\x1b\x43\x51\xa1\x9a\xd0\x6a\x63\x12\x2c\x19\x99\xa9\x50\xa1\x0a\x92\xea\x9d\xee\x93\xe0\x2a\xd2\x83\xd1\x49\xd6\x3b\xed\xef\x78\x7f\x84\x3a\xbd\x53\x13\x92\x4e\x6e\x13\xea\xcf\xb4\x36\x50\xf6\x52\x74\xb4\x57\xd9\x97\x93\x64\x05\x65\xb6\xdb\xde\x39\x55\xc5\x51\xe0\x34\x6b\xc1\x8b\x9b\x88\xab\xcc\xc6\x2d\x57\xa9\x8b\x3c\xfb\xaf\x68\x32\xfe\xcc\xb6\xef\x51\x2e\xa2\xc9\xf8\xef\xdb\xd1\xf7\xdb\xe7\x07\x28\x9a\x8c\xdf\x64\xc9\xcd\x8a\xa6\x68\x02\x95\x7c\xf7\x4c\x59\x73\x71\x14\x8e\xb4\x82\x88\x16\xcd\x7d\x64\x88\xe9\x57\x16\x95\x4c\x36\x69\x91\xc3\x31\x1d\xeb\xa7\x91\xf6\x13\x43\xa7\x62\x30\x98\x55\x55\xa7\x55\x21\xe1\xbd\x36\x82\xd7\x2a\xc5\x5d\x51\x74\xd5\xfa\xd1\x6e\x5e\xe4\xfb\x4c\xdf\xa6\x77\x8d\x84\x3e\xfe\xed\xb7\xfc\xbd\xe7\x30\xf0\x8a\x76\x4d\x1e\x0c\x25\x12\x39\x1e\xed\x18\xb2\x54\xba\x26\xcb\xe4\x96\x76\x93\x6e\x63\x7f\x44\x48\x6b\x24\xc7\x3d\x6b\xba\x27\x5a\xf6\x51\x84\x10\x08\x14\xb4\x2a\x98\xd6\xcd\xb2\x21\x86\x54\xe0\x07\xb5\x07\x4e\x17\xd8\x6e\x8c\xeb\x30\x3d\x27\x8d\xa8\x84\xfa\x7c\xf5\xfb\x2d\xba\x9e\x8d\xb3\x87\xad\xd1\x40\x27\xf4\x99\x55\x27\x82\x45\x4b\x98\x4f\xc9\x31\x74\xf2\xd8\xe1\x09\xe2\xbf\x6c\xb7\x7b\x23\x9c\xc7\x3e\xc0\x95\xd4\x51\x0f\x16\xb0\xc7\xf2\x6e\x0e\xfe\x8a\x0c\x70\x26\x7b\x43\x84\x77\xa1\xcb\x1c\xc8\x86\xdc\xf7\x05\x9c\x04\xb1\xc3\x7c\x73\x41\xcf\xf3\x58\x7d\x6e\x84\x8d\x47\x29\xb6\xdb\xb6\xa8\x0b\x13\x31\xa6\x35\x4b\x41\xb4\xd1\x08\x47\x32\x2c\xaf\x2c\x93\x00\x6e\x86\xed\x9b\xc7\x82\x39\x55\x59\x88\x6d\x01\xfe\xce\x81\x09\xe3\x92\x03\x53\xee\x94\x8c\x6f\x23\x9f\xb0\x78\x06\x36\x39\x61\x84\x15\x2d\xfe\x70\xb1\x56\xf6\x59\x2e\x28\xcf\x93\xac\x7c\x46\xf3\x5b\xc6\x8b\x5c\x59\x4b\xf7\xf2\x22\xa5\xfb\x37\x9a\xa0\x68\xc9\xbd\x16\x2c\x2b\x5b\xbf\x48\x22\x36\x61\x60\x01\x6c\xbe\x32\xd8\x1d\xb2\x66\xb0\x76\x6d\x2d\x76\x43\x45\xb2\xf3\x43\xe6\xbe\xcc\x93\x3c\xe1\x0f\xfb\x0b\x9a\x88\x35\xa7\x5e\x17\x20\x8e\x4d\x0f\x07\x26\xc8\xed\xdd\x2b\x0b\x7f\x50\xb2\xbf\xbc\xc8\x32\x3f\xbf\x4b\x7b\x96\xb1\x2b\xef\xf5\xf2\x86\xdd\x33\x6f\x00\x1a\x08\xbb\x77\xca\x6f\xd9\xdc\xab\x5d\xef\x98\xda\xfb\xb3\x79\x71\xb3\x4a\xda\x93\xd7\x82\xa6\xad\x3d\xe7\xeb\x5c\xb0\x9b\xf6\xe5\xd0\xde\x21\x7b\x58\xaf\xbd\xf6\x79\xda\x9a\xf7\x96\xd1\xbb\xf6\xa5\xe3\xc5\x5a\x04\xc3\xf1\xb7\xc7\xbd\xa0\xb9\xac\x73\xbf\x5c\xaf\xe4\x7e\x72\xb9\x54\x04\x3a\xfb\xca\xd7\x79\x56\x14\xab\xf6\x5a\x64\xd6\x7d\x88\x06\xb7\xab\x21\xf0\xba\xe2\xbe\x78\x4e\x5e\x5b\x13\x9f\x29\x9b\xb6\x72\x5f\xdb\x67\xb7\x17\x7d\x66\x40\xb3\xd7\xeb\xfc\x9a\xe5\x8d\xf7\x96\x8c\x2e\x1e\x91\xb7\xd7\x74\x70\x8b\xb4\x65\x23\xca\x45\x2c\x72\x9a\x8b\x67\x42\xd3\x7b\xfb\x45\x9e\x3d\xc8\x0c\xc6\x89\xa7\x59\xca\x80\xd4\x77\xb6\x35\x70\x6f\x91\xe1\x35\x9e\xe3\x14\x2f\xf1\x02\xaf\xf0\x0d\xbe\xc5\xd7\xf8\x0a\x3f\xe0\x4b\x7c\x87\x8f\xf1\x3d\x3e\xc5\xe7\xf8\x02\x9f\xe0\x4f\xf8\x08\xbf\xc1\x5f\xf0\x19\xfe\x03\xbf\xc5\x1f\xf1\x7b\xfc\x01\xbf\xfb\x97\x48\x6f\x1f\x9b\xc8\x81\x4b\x78\x2c\x24\xda\x61\x37\x00\x64\xe2\x63\x39\x07\xfd\xfe\x8e\x0f\xdb\xed\xa6\xea\x3c\xc6\xac\xfc\x68\x7c\x92\x48\x18\xfe\x68\xa9\x92\x26\x1f\xd5\x83\x72\xbd\x6a\x07\x2c\x7f\xc4\xbd\xe3\x8f\x3f\xf7\xf0\xe6\x9a\x8a\x31\x78\x7e\x3f\xfe\xf8\x73\xc8\x6a\x54\xbb\xf0\xc0\x23\xee\x65\x45\xf1\x65\xbd\xf2\x8b\x7f\x80\x14\x5c\xc2\x7b\x69\xdf\xeb\x35\xbe\x8f\x8f\x4f\x5e\x1f\x9f\x5d\x1e\xff\x3f\x17\xc7\x1f\xdf\x5e\x7e\x3a\x3b\xbd\x38\xbd\xf8\xf5\xd3\xf1\x79\xbf\xbf\xbb\xa3\xf5\xbc\x3d\xbc\x09\x99\x22\xd9\x0b\xe5\x57\xe0\xf8\xe3\xcf\x71\x23\x7f\x85\xf0\xa3\xec\xe3\xa9\x3c\x22\xe4\xc8\x3e\xe2\x47\xd9\x53\x93\x5a\xba\xd4\x23\x77\x02\xc8\x1b\xb3\xa4\x61\xba\xd5\x1a\x38\xb3\xdf\x77\x0e\xe0\xcc\x1e\xb1\x8d\xe9\xe9\x17\x53\xea\xa9\x59\x7e\xab\xb2\xb4\x14\x7f\x8c\x4d\x22\x8c\xed\x18\xce\x20\xf9\xc3\xeb\xaa\x4a\xb2\xbd\x7c\xeb\x7d\xd2\x71\x99\x3f\xea\x07\xfc\x18\xdf\x50\x7e\x4d\xc9\x47\xf5\x0f\x73\x95\x03\x99\xa6\x42\x44\x07\xaf\xf8\x31\xfe\xf1\xf3\xfb\xb7\x97\xff\x79\xfc\x2b\x61\xf6\x51\x96\x59\xb3\xf4\x5d\xc1\x65\x76\xf5\x84\x1f\x63\x96\x97\x10\xda\x97\x99\x27\xd9\x56\xf2\x85\x02\x5e\x26\xcc\x3d\xe3\xc7\x78\x9e\xe4\xef\xc1\x38\x90\x30\xf7\x2c\xb7\x38\x7f\xb0\xe9\xf6\x19\x3f\x02\x7f\x4e\x18\xfc\xe1\xc7\x78\xad\x7a\xba\x56\x3d\x7c\x63\x70\x29\x29\xdc\x33\x96\x93\x76\xcd\x4a\xc1\x1f\x48\x61\x1f\xd5\x7c\x50\x2e\xc8\x5c\x3f\xc8\xba\x13\x9e\x93\x39\xfc\xe1\x47\x15\xe9\x8d\xcc\xd5\x3f\xbc\x9b\x00\xdf\x73\xf7\xdc\xf1\xd2\xdf\xad\xf3\xb9\xff\x4d\xbe\xe3\x47\x15\xfb\xe7\xad\xae\xcc\xbd\xc8\xc5\x92\xe0\x9d\x5c\x78\x6b\xa4\xb2\x6d\xb8\x76\x6a\xfc\x56\x57\xc5\x8a\x5c\x05\xf4\xe4\xe3\x79\xbc\xfb\x23\x36\x9f\x7e\x49\x78\x4b\x01\x2f\x15\xb3\xf2\x8d\x46\x9e\xe3\x2c\x76\x2f\x95\x5a\x3d\x4d\x7e\x90\xc4\x7b\x91\xa7\x66\x7d\x55\xce\x39\xbb\xa2\x24\x71\xcf\xf8\x31\x7e\x1f\x12\x2c\x64\xe3\x4a\x8d\x83\x2a\x6c\xa1\xb1\x5f\xc1\x3a\xf7\xd3\xbd\x37\x0c\xa2\xcf\x71\xa2\x44\xa0\x95\x9a\x4b\x72\x12\x5f\x6a\x24\x76\xb6\xce\x55\x5a\xec\xa8\x18\x72\xe2\xbd\x98\xaf\x60\x61\x72\xa2\xfe\x4d\x1a\xcb\x53\x99\xc4\xf2\x54\xa7\x28\xdd\x0a\x72\xa2\x1f\x74\xaa\xd1\x7d\x24\x27\xf6\x51\x7f\xa1\x50\x01\xb5\xe5\x97\x49\x79\xae\xaf\x33\x8d\xf9\xc9\x49\x4b\xa2\xce\xfd\x47\x01\x5d\x92\x7f\x3a\x05\x74\x5d\xc8\x89\xfa\xd7\x69\x92\x45\x21\x27\xea\xea\x53\xa5\x14\xaa\x2f\x85\xeb\x87\xb9\x43\x25\x27\xf6\xb1\xf6\xe5\x54\x95\xf1\x5f\x75\x0e\xa3\xb2\x4a\x4e\xec\x63\x30\x1b\x76\x1c\xfe\xeb\x2e\xc8\x25\xcb\xe1\x9e\xbe\x60\x3e\x5b\xe7\x1f\x80\xac\x01\xe0\x75\x22\x81\xef\x9b\xe0\x4b\x1d\x47\x00\xce\xfc\x4c\x32\xbb\xba\x66\x4f\x4a\x2e\xf8\x31\x36\xb4\x1e\xf9\x8c\x1f\xe3\xcb\x94\xca\x1d\xb2\x12\x05\x27\x59\x9c\x83\xb8\xee\x2d\x2d\xe7\x6f\xe9\xbc\x00\xfe\x4e\xe6\xd1\x41\xe0\x48\x66\xc2\xc1\xe1\xcf\x71\x92\xb1\xa4\x24\x99\xfa\x07\xe8\x33\x5f\xd2\x77\x50\x8b\xec\xa0\x7c\x4b\x7f\xd6\xe1\x02\x01\xa0\xa8\x46\xcd\x18\x49\xd6\x48\x92\x2d\x95\x54\x80\x70\x89\xb9\x0e\x90\x2c\x6e\x49\x05\x98\x2b\x12\x52\xc2\x9f\xc2\x4e\xaa\x69\xf5\xfc\x0b\x13\x4b\x0d\xfd\x55\xb2\x97\x20\x1b\x92\xec\x67\x22\x96\x30\x49\xea\x51\xe1\x32\xd5\x9a\x82\x9a\xe7\xf0\xaa\x1e\xf0\x63\xfc\xee\xf8\xe8\xe2\xf3\xd9\xf1\x39\x89\x86\xd8\x80\x7e\x14\x6d\x58\x79\x0c\xf1\x17\xd2\xf1\x3a\xb6\xcf\x15\x5e\xdb\xfc\x12\xbf\x5c\xaa\xd8\x47\x2c\x86\x7f\xfc\x18\x17\x39\xc9\xe2\x42\x6e\xd8\x24\x4d\x3f\x48\xa0\x22\x4f\x5c\xe6\xbf\xc9\xed\x03\x6e\xd1\xbc\xcf\x61\x02\x74\x39\x4f\x8f\x6f\x25\x84\xc9\xdc\x33\x7e\x94\xa7\xc5\xe4\x92\xab\xe4\xbf\xe2\x47\x15\xe3\x9b\x92\x4c\x3f\x40\x8a\x92\x9e\x65\xe6\x09\xd2\x5e\x67\x49\xfe\x05\xd2\xe0\x09\xd2\x3e\xa9\x10\xf4\x90\xaa\x9f\xf1\x63\x9c\x17\x82\x2d\x1e\xcc\x52\xea\xf8\x8e\x59\x6b\x32\x7e\x54\xe0\x23\x4c\x95\xbd\x6c\x4b\xc6\x8f\x12\x30\x34\xf3\x36\x13\xe5\x26\x84\x27\x9d\xce\x20\x5f\x3d\x09\x3f\xc6\xd6\x20\x6c\x13\x9e\xbb\xf1\xde\x10\x2f\x93\xd2\xbc\x1e\xcd\xe7\xb4\x2c\x0b\x5e\x4a\xca\x14\xb0\x96\x9f\x99\x64\xb5\x04\xc8\x51\x0a\x5e\x3c\x90\x77\xe6\x09\x3f\xc6\x2a\x36\x86\xea\x8b\x7d\x56\x7b\x34\xe8\x67\xf0\xae\xf6\x62\xf0\xbd\xac\x7d\xa7\xf7\xab\xc4\x4e\x81\xca\x52\x4f\x52\x9b\xcb\xb8\x78\x52\x9b\xcb\xbc\xd9\xcd\xe5\x7d\x0e\x13\x64\x69\x79\xb6\x95\xdb\x21\x73\xd2\xd5\x9b\xdc\xc0\xae\x5c\xe1\x4a\x00\x97\x4a\x32\xf5\x8f\x1f\xe3\x13\xfd\x0e\xff\xbb\xe9\xb4\x22\xd7\xac\x1c\x80\x38\x08\x89\x74\xaa\x92\x80\x1e\x86\xe0\x47\x26\xe1\x9b\x49\x6c\x41\x4b\xc5\x54\x42\xa5\xf3\x98\x95\x17\x2a\x05\xea\x9c\x83\x1e\x90\x4e\xa8\xd7\xf9\x18\x5f\xbe\x76\x78\x30\xb5\x64\xc5\xfb\xf8\xc3\xe9\x8f\x3f\x1e\x9f\xf5\xfb\xd1\x63\xfc\xa1\xb8\xbe\xa6\x9c\x2c\xcd\x57\x59\xec\x88\x5c\xc6\x47\xf8\x31\xd6\x4c\xc5\x26\x2b\xe6\xe3\x9b\x38\x2b\xe6\xf8\x6e\x7c\x13\xdf\xe1\x34\x29\x97\x94\xb3\x47\x3a\xbe\x89\xed\x33\x4e\xe9\x3c\xb9\xa1\x99\x4e\xb6\x2f\xd8\x4b\x75\x69\x00\x08\x17\x0f\x32\x4d\x3f\xe2\x75\x9e\x52\x5e\xce\x0b\x2e\x73\xba\x17\x3c\x4f\x56\x4c\x24\xb6\x06\xf3\x22\x37\xb3\x9a\x35\x72\xa9\x1f\xe4\x88\x0d\x41\xf7\x89\x17\xf7\x0f\x6a\xe1\x2e\xe3\x66\x22\x40\x33\x43\x12\x06\x79\x5b\x52\xb1\x42\x37\x09\xa7\xe4\xd2\x3c\x41\xda\xea\x01\x12\x56\x0a\xce\x1c\xff\xb9\x4e\x32\x72\x69\x9e\x80\x74\x82\xfe\x05\xb6\xed\x26\x35\xd6\xc2\x0e\x72\xab\x13\xdc\x17\x27\x30\x21\x0b\xf7\x51\x51\xcb\x97\xb1\xa1\x94\xdf\x40\x47\x40\x58\x77\xe9\xbd\x00\xd1\x6f\x45\x80\x97\xde\x8b\xa9\x03\x06\x66\x2a\x82\x17\x3b\x95\xe6\x93\xf7\x26\x4b\xcd\x3d\xa2\x52\x16\xf4\xdf\xa1\x27\x9c\xda\xa5\x70\x2f\xf8\x31\x56\x37\x67\xa6\xe7\xde\x1b\x94\x5a\x3d\xd8\xde\xab\x47\x79\xd6\xd6\x20\x7f\x0c\x86\xd0\x48\x73\xf9\x4c\xd5\xfe\x2b\x7e\x8c\x95\xd7\x31\xd5\xcf\x73\x25\x70\x21\x97\x6d\xa9\x72\xb6\x24\xb2\xa1\xa9\x9c\x2a\xf5\x84\x1f\x63\xed\xb5\x2e\xd8\x18\x8d\x34\x98\x35\xb9\x8a\xba\x9b\xee\x45\x62\x5e\x90\x08\x93\x4b\xfd\x00\x1b\xc4\x74\x56\x3f\xb5\x6e\xe0\x22\xff\x50\x24\x29\x79\xa3\x1f\x14\xf5\x25\x9f\x7e\x2a\x8a\x2f\x25\x79\x13\xbc\x6a\x1e\xc7\xee\x15\xc7\x38\xb8\x64\xd5\xfd\x95\xf7\xed\xdc\x6e\x3c\x97\x76\x19\x0c\xf5\x32\x18\xe4\xd9\xf9\xcf\x9f\xe4\x21\x3a\xff\xf9\x13\x2c\xa9\x11\x3d\x5c\xba\x67\x59\x83\x8e\x46\x7a\x1d\xab\x07\x45\x96\xad\x68\x9e\xd2\x5c\xfc\x27\x7d\x80\x1d\x2a\xc8\x55\xdc\x4c\xc4\x9f\x63\x0a\x78\xfb\x41\xfd\xe3\xcf\x12\xe5\x1e\xeb\x24\xf3\x08\xa9\x39\x85\x94\x9c\xaa\x3c\xea\x33\xfe\x1c\x5f\x15\x45\x46\x1e\xe0\x0f\x7f\x8e\x6f\x12\x31\x5f\x92\x07\xf5\x2f\x6b\x87\x93\xf9\xa0\xfe\xf1\xe7\xf8\x5a\x16\xbc\x16\xf0\x44\xe1\x51\xd6\x97\xc9\xd4\x4c\xc0\x13\x85\x47\x99\x5a\xe4\xf4\x97\x44\xf6\x43\x3d\xe0\xcf\x31\xa7\x49\x5a\xd6\x13\x4e\xf3\x4c\x66\x32\x8f\xf8\xb3\xe5\xfb\x58\x7e\x7d\x04\x64\xe6\x43\x23\x49\x52\xa0\x79\x4a\x1e\xe4\xaf\x6c\x8a\xcb\x5a\x39\xfe\x1c\x97\xeb\x1b\xf2\x20\x7f\xe5\x60\x58\x2e\x87\xc2\x72\x18\xd8\x3d\x0c\xeb\x1e\x9e\x57\xf0\xbc\x92\xf9\xe5\x06\x7f\x80\x3f\xf9\x46\xc5\x5b\xb6\x58\xc8\x04\xf5\xa4\x72\xbf\x7e\x50\xf9\x5f\xcb\xde\x2d\x58\x26\xd9\x8b\x07\xfd\x60\x53\x20\x93\x79\xc4\x9f\xe3\x75\xce\xfe\x24\x0f\xf0\xa7\xdf\x20\x87\x7a\x50\x29\x45\xae\x12\x0a\xd9\x43\x90\x44\x96\x72\x53\x3f\xb8\x67\xfc\x39\x9e\xcb\xcd\x08\xa9\xfa\x69\x37\xca\x53\xd1\xed\xcf\x7b\x70\x7f\xec\x5d\x0f\x2b\x01\xcf\x0d\xd0\xba\x0a\x35\x95\x80\x04\x6f\x80\xe2\xd6\x29\x4f\xe1\xd2\xd7\xa7\xa7\x17\xc7\x6f\x5b\xea\x6d\x8a\x91\x32\x5f\xc8\x76\x4e\x13\x3e\x5f\xbe\x65\x25\x50\xc5\xd0\x26\x90\x32\x3b\x32\x00\xea\x7d\x63\xc4\x98\xe4\xce\x3d\xe3\xbb\x58\xdd\x83\xc6\x4b\x15\x26\xe7\x4e\x3f\xe0\x47\xfd\x81\x98\x1c\xb2\x8a\x25\x9d\x7f\xb9\x2a\xee\x65\x0d\xfa\x51\x82\x36\x7a\x2f\xde\x31\x9a\xa5\xe4\xce\x3d\xeb\xf4\x23\x4e\x13\x9d\x2c\x1f\xf1\x63\xfc\x81\xe5\x5f\xfc\xae\x04\xef\x86\x57\x31\xef\x27\x49\x9e\x5c\x43\x1f\x5a\x52\x65\xe6\x79\x2d\xed\x4d\xb2\x4a\xae\x58\xc6\x80\x74\xbb\x93\xc8\xd9\xbe\xea\xba\x4f\x8a\x94\x2d\x18\xe5\x41\xd5\xb5\x44\x99\xf5\x26\x4c\xaa\x55\x6c\xbe\xbe\xa9\x35\x70\xed\x75\xd3\x68\x07\x90\xbb\xb8\x2d\xb9\x3e\x56\x2f\x7b\x5b\x32\x30\x8c\xfa\x59\x9e\x67\x37\x87\x1f\x7c\xa8\x39\x4f\x56\x62\xcd\xe9\x99\x04\x68\xfc\x82\x53\x4a\xe6\x71\x23\x4d\x2e\x2e\xe0\xca\xab\x84\x97\x64\x63\xaa\x1d\xdf\xc5\xe6\x11\x7f\x16\x2c\x2b\xc7\x1b\x5a\xce\x93\x15\x3d\xbe\x5f\x71\x5a\x42\x40\xdf\xbb\xb8\x9e\x54\x49\x0a\xe2\xa7\x8b\x93\x0f\xaf\x77\x55\x56\xe1\x1d\xf2\x4f\x4d\xcf\xf5\xfb\x91\xbe\xc3\x76\xd7\xda\x4b\x71\x93\x9d\x27\x0b\xda\x14\x20\x47\x43\x7c\x67\x3f\x23\xa5\x42\x00\x1b\x5c\xd7\x61\x4b\xba\x5c\xee\x23\x2b\xc1\xdb\xb1\xfa\xec\x5e\x76\x9f\xd0\x8b\xe3\x93\x4f\x1f\x8e\x2e\x40\xb6\x2b\x8f\x21\xac\xa5\x59\x13\x75\xda\xef\x14\xc9\x6b\x92\x9e\x3c\xca\xd0\xd1\x9f\x8f\xcf\xce\xdf\x9f\x7e\x24\xc7\x1e\x01\xfc\xff\xff\xc7\xe7\xe3\xb3\x5f\x2f\xdf\x7f\xbc\x38\xfe\x51\xc5\x0d\xec\xf7\xf7\xee\xe3\x3f\xfe\xb1\xa6\xfc\xc1\x9c\xe3\x27\x64\xd1\xdf\x79\x42\x58\x53\xac\xae\xcc\x12\x74\x65\xa8\xba\xc2\xe8\x1d\x2c\x35\xd9\xb0\xf2\x1c\xc2\x52\xbd\xc9\xd8\xfc\xcb\xf8\x3e\x0e\xde\x25\x08\xd2\xae\xb0\x65\x91\xf1\x7d\x1c\x26\xc8\xef\xf2\x5f\x27\xa9\xef\x5e\x82\xf9\xfe\xba\x58\xe7\x69\xe9\x3e\xab\x77\xf3\xf5\x4d\xc6\x68\x2e\xce\xe8\x5c\x78\x59\xbc\xc4\xa0\x16\x96\x5f\xbb\x4f\xb5\x1a\x83\x6f\xb2\xd4\x59\x51\xc0\x57\x5d\xaf\x7d\x95\xdf\xc0\x03\xb2\xf7\xd1\xbd\x63\x56\x9e\x53\x0e\xca\x33\x20\x37\x7c\xc7\x78\x09\xae\x7b\xc7\x72\xf3\xb4\x7f\xaa\x34\xe4\x33\x44\xde\xbd\xff\xe6\x83\x61\x75\x11\x41\xee\xeb\x29\x86\x00\x7c\xcb\xca\x95\xa4\x16\x28\x27\xf7\xf5\x14\x09\x47\x0b\x7d\x0f\x70\x6a\x1f\x25\x61\xbc\x16\x85\xf7\xc5\x7f\x85\x43\x5f\x2e\xbd\xaf\xfe\xab\xfc\xca\x4a\x51\xf0\x07\x3f\x43\x98\x22\x69\xad\x22\xa7\x5e\x06\xff\x15\xf8\x0f\x43\xe3\xbd\x2b\x38\x39\x0d\xdf\x3d\xf1\xbd\xa3\x05\xdf\x25\x73\xd9\x02\x39\xdd\xfd\xad\xb5\x5c\x6b\x01\x49\x19\x16\x6b\x41\xf9\xdb\xf3\x0f\xe4\xd4\x3d\xdb\x74\x9b\x68\x52\x4c\x02\x8e\x86\x38\x24\x64\x51\xa4\x2e\xaa\xfc\xab\x95\x1e\x7e\xe3\x33\xa5\x6f\x13\x91\x1c\xa5\xc9\x4a\x56\x7c\xee\xbf\xf9\x82\x7e\x90\x97\xbb\x5c\xad\xe9\xb2\x75\x11\x2f\x13\xd9\xa8\xd2\x21\xb4\x17\x8d\x12\xbf\xb1\x8c\xf2\x1e\xea\xf7\x21\x97\x69\xff\x89\x9c\x6d\xd5\x29\x96\x1d\x29\xcd\x8c\xd7\x64\x47\x55\x3a\x57\x47\xee\xe0\x52\x90\xd7\xf0\x87\xd5\x5b\x6c\x06\xf1\x3a\x76\xc3\x84\x0f\xff\xf8\x9c\x33\xe1\xbe\xfa\xaf\x4a\xe0\xb2\x5e\xbd\x2b\xb8\x96\x09\x90\xd7\xf5\x94\x6a\xe7\xdc\x6b\xa3\x8e\x9f\xc8\xa3\x67\x41\xf0\x13\xce\xe3\xf7\xe7\x97\x1f\x4f\xdf\x1e\x4f\xf2\x58\x69\x34\xc4\x5a\x23\x82\x3c\x8e\xdd\x3d\xa5\x4e\x53\xf7\x94\xa4\x2d\x9d\x3c\x06\xfa\x15\xf6\x8e\xfd\x7f\xcb\x82\xc6\x25\xf4\x9e\xc7\x07\xc3\xf8\xfb\x9e\xee\x8f\xa7\xac\xd1\xd4\xfa\xf8\x1f\xee\x93\x56\x21\x21\x54\xcf\x25\xa1\x66\x7a\x03\x43\x1f\x70\x6c\xd7\xb8\x2e\x56\x45\x5a\x55\x89\xf4\xca\xe8\xea\x3b\xae\xd6\x1c\xdb\xa6\x84\xd7\x3e\xc7\xf9\x24\x72\x5f\x88\x7a\xf0\x33\x90\xb0\x4a\x34\xf6\xb3\xeb\xa8\x57\x2e\xb3\x32\x95\x53\xf3\xc9\xe5\x19\xdf\xe7\x74\x5e\x5c\xe7\xec\xf1\x5f\xea\xcb\xbe\xd5\x48\x2a\x50\x4f\x0d\x15\x71\xb5\xe1\x1b\xa8\x10\x79\xba\xa1\x97\x97\xba\x06\xac\x83\xd3\xc9\x24\x4c\xab\x7a\x30\x39\xa5\x22\xea\xcc\x62\xb4\x17\xb5\x1b\x8d\x38\xb4\x8b\x69\x59\xc7\xb5\x24\x2d\x39\xb8\xdf\xf6\x74\x07\x77\x6b\xca\x9b\x32\x10\x42\xad\xdf\xe7\xf1\x1d\xcb\xb2\xa3\x34\x05\x78\x09\xe1\x82\xc2\xa4\xc8\x6f\x58\x3b\x97\xc5\xd4\x38\x79\x32\xe9\x49\x9a\x7a\x06\x07\x10\x81\x65\x63\x4c\x9e\x9d\x9d\x73\xcd\x56\xc2\xc6\xf9\x55\x3a\x75\x79\xd7\xda\x81\x41\x04\x64\xda\x75\x9e\x1f\x93\xb2\x54\x0e\x42\x7f\x17\xc5\xef\x3d\x6d\xb8\xe8\x35\xae\xc3\x1f\xb8\x1e\xe0\xda\x14\xa1\xaa\xd2\x96\x64\x4d\x4b\x96\x02\x02\x34\x71\x6b\xa6\x2f\xeb\xe2\x34\x77\x29\x6a\xd4\x84\x56\x35\x65\x39\xcf\x12\xdf\xd6\xca\x70\x82\xb4\x49\x36\x1d\x30\x70\x9f\x94\x20\x2f\x78\x46\x1e\x95\xca\x3b\x71\x12\x15\xfa\xb1\xa6\xde\xd6\x88\xd9\xd9\xf4\xec\x3e\x40\xf9\x80\x40\xdc\x4b\xcf\xf2\x42\xdb\xe6\x6e\x64\xd2\x58\x10\x01\x17\x9d\x82\x47\x39\xc2\x4b\x7d\x25\xcb\xab\x0e\x35\x56\x0a\x15\x7b\xc2\x5c\x2f\x98\x1a\x88\xc5\x58\xe1\x5a\x7e\x15\xeb\xaa\x3d\xb4\x5d\x02\xda\x70\x2c\x32\x26\xa6\x66\x4a\x65\x4d\x89\xf6\x08\x23\x67\x30\x81\x18\x70\xfd\x7e\x6e\xa0\xf8\xb1\x64\xe4\x25\x41\x5c\x4f\x89\x04\x2e\x11\xe6\x51\x89\xbc\x45\x08\x63\x04\x94\xab\x8c\x89\xa8\xf7\xac\x87\xc0\x95\xc5\x1a\xc1\x1d\x27\x24\x54\xca\x77\xcb\xb3\xbf\x6c\x7f\x7b\xf6\xec\xba\xe3\xfb\xeb\xf7\x2a\x50\xd3\xf8\xf2\xf9\x76\xbb\xaf\x02\x2c\xda\x28\x40\x7f\xe9\xa1\x09\x1d\xa7\x74\x5e\xa4\xf4\xf3\xd9\x7b\x4b\xd9\x45\x14\xc5\x9c\xae\xb2\x64\x4e\xa3\x0c\xd3\xbc\xfe\x5d\x35\x3c\x27\xcf\xfe\x12\x4d\xc6\x07\xd1\x64\xfc\x62\xfb\xfd\xf6\xf5\xf6\x0d\xda\x3e\x8f\x26\xe3\xd7\xdb\xb7\xdb\x23\xb4\x7d\x31\x44\x7e\x9f\xfc\x90\x58\xcd\x1a\xfd\x16\xe7\xb8\xd9\x23\xd5\xe2\x92\x3c\x8b\x7e\x7b\xb6\xfd\x2d\xde\xfe\xf6\xef\xdb\xdf\x06\xdb\xdf\x26\xdb\xdf\xb6\xdb\xdf\xa2\xed\x6f\x68\xfb\xdb\x74\xfb\xdb\x6c\xfb\xdb\x66\xfb\x5b\xb5\xfd\xed\x37\xf4\xec\x1a\x2f\x48\xa0\xd7\x8c\x57\x4d\x6d\xe4\x65\x52\x9e\xde\xd9\xbb\x26\xd7\xd9\x1b\xe7\xbb\xcd\xfa\x51\x31\x7a\xce\x46\x97\x9a\xb4\x18\xe5\xd9\xa3\x2f\x4f\xb6\x3c\xfa\xaa\x74\x37\x29\x55\x3c\x70\x3a\x2f\xf2\xd4\xc1\x03\x79\xf0\x0d\x5d\xf8\x7b\xac\x23\xaf\xaf\xb4\x6a\x34\x16\xe8\xa9\x06\x78\x71\xcb\x52\xda\x5d\x25\x3c\xb9\xe9\xfe\x0e\xf6\x58\xbf\x37\x2b\x54\x10\x92\x4e\xc5\x4c\xe2\xc3\x86\x09\xe9\x84\x8f\x7b\xbd\x01\xb7\x1e\x5f\xbf\x0e\xd3\x4c\xbb\x49\xd8\x72\xdc\xf3\x22\x59\xca\x46\x6f\xc9\x74\xd6\xb9\x9d\x0e\x67\x3b\x8d\x6c\x04\x18\xd9\x00\x36\xc2\x2d\xde\x09\xb4\xd2\x7d\x1e\xcf\x97\x09\x7f\x53\xa4\xf4\x48\x44\x0c\x75\x24\x69\xb4\x5a\x8b\x08\xcc\xea\xf7\x46\x5e\x60\x4d\x7c\x3b\x1d\xd5\x5b\xb3\xde\x37\x64\x91\x17\xff\x81\xf7\x86\xe0\xe8\x1c\xdf\x4e\x0f\x9e\xcc\xba\x3f\x82\xea\x55\xd6\x17\xbb\xb2\x2a\xd0\x7b\x2d\x47\x7a\x1d\x8e\xd4\x3b\x7d\x30\x40\xbb\xb7\x97\xb8\xf7\xdb\x6f\xdf\x8d\x7a\xa8\xc2\xd7\x41\x77\xad\xbe\x59\x34\xfd\xaf\x67\xb3\x01\xea\xc9\x0c\x07\xad\x19\x62\xfd\xf5\x45\xdb\xd7\x9e\xea\xd4\x95\xec\xd4\xd5\xd3\x9d\xaa\xf0\x55\x73\xc6\xd4\xda\xdc\x44\x92\xd6\x81\x5c\x76\x5d\x3f\xc5\xc7\x1f\xdf\x9c\xbe\x3d\xbe\x3c\xfa\xf8\xf6\xf2\xed\x31\x3c\x7e\x3a\xba\xf8\xe9\xf2\xfc\xf8\xc7\x93\xe3\x8f\x17\xe7\x93\x34\xe2\x68\xcc\x65\xb5\xbb\x66\xd7\xaf\x57\xe6\x7b\x6a\x08\x0f\x35\x1f\xc6\x9b\x0a\xe1\xcb\xa7\xfc\x1a\xdf\x59\xfa\xc2\xf3\x4a\xf1\xe2\x3f\x00\x57\x7b\x9b\x68\xa8\x74\x9d\x2d\x1e\x19\x21\xa7\xee\x9c\xcb\x64\x0b\x6f\xad\x1f\x34\x5c\x98\x87\x16\x4b\x67\x85\x15\x71\x46\xf2\x69\x32\xc3\x73\x32\xec\x8c\x0e\xfa\x51\x49\x0e\x5e\xbe\x8c\xe6\xa4\xd7\x23\x84\x64\x93\x17\xe3\xbf\xfd\x5d\x3e\x84\x1d\x99\x8c\xc6\x2f\x0e\x5a\x92\x0f\xc6\x43\x24\x7b\x99\x91\x4c\xdb\x47\x8c\x10\x8e\x18\x61\xdb\xed\x74\x86\x14\xa6\xcb\x10\x8e\x0a\x52\x78\x29\xc3\x3d\x12\xbd\xe8\x97\x08\x21\x3c\x7a\xd1\x2f\xfb\x7d\x3e\x9d\xcf\x06\x03\xac\x51\xe3\x46\x1e\xfa\xf1\x5c\x5b\x1c\xac\x23\x49\x6e\x1a\x57\xf6\x10\xa2\x6d\xcc\xb6\xdb\x4b\x5c\x2e\x8b\x75\x96\xbe\x05\x08\x5c\x8e\x8b\xed\xf6\xd2\x43\xe3\xc7\x35\xf2\x80\x42\xc7\x75\x00\x9c\x38\x57\x54\x1b\x21\x1c\x40\xc0\x7d\x03\x8b\x82\x73\x7a\x6d\xcb\x27\x9c\x13\x5d\x96\x1a\xca\x0f\x6a\x33\x71\x30\x55\x6d\xb9\x17\xb1\x52\x95\x62\x13\x31\xf6\x82\x5c\x26\x42\x50\x9e\x93\x5e\xcf\x3a\x7d\xb9\xa6\xf7\x66\xbd\x20\x49\x93\x09\x65\x90\x28\x67\xc3\xc6\xaa\x74\x9b\xe8\x34\xd8\xaf\x66\x4c\x13\x35\x50\x15\xf6\x13\x22\xe6\xa9\x84\xb1\x9b\x00\x8b\x5d\x65\x82\x9b\xb1\xf3\x3a\xd8\x53\xd1\x89\x31\x73\x06\x86\xf9\x4b\xe6\x22\x14\x17\x5a\xa5\x5e\x71\x80\xf3\x44\x44\x85\x22\x08\x23\x81\x3c\x60\x77\x1f\xd8\xb3\xca\x01\xb7\x58\x9e\xb8\xe9\xd8\x6e\x23\x7f\x72\x24\x60\x3f\xa3\xd7\xc7\xf7\xab\xc8\x9f\x43\x84\xfc\x29\xac\xb0\xdf\xc8\x35\x7d\xc2\x4c\xd5\x2d\x8e\xf1\x8d\xb5\x47\x08\x78\x2d\x58\x44\x1c\xa1\x30\x4e\x3b\x6f\x89\xca\xec\x6d\x8a\x29\x9f\xe6\x33\xb0\x4a\x3d\x8e\x18\x04\xfa\xb3\xa6\x81\x2e\x42\x43\x11\x96\xd0\xd9\x8b\x20\x7b\x51\x85\x23\x58\xad\x45\x83\x13\x81\x5e\x41\x9f\x55\x85\x60\x7b\xe8\xd5\x91\x77\x1a\xfd\xb3\x68\x0e\x66\xf1\x3e\x62\x98\x19\x13\x75\x55\x29\x66\x53\x93\x32\xb3\x01\x7b\x6b\xd3\x34\xa9\xef\xe9\x3c\x66\xe9\x58\x1b\x4e\xbb\x64\x54\xcf\xa7\x8d\x59\x63\x96\xa2\x71\xbd\x8a\x69\x2d\x01\xcb\x6c\x33\x9c\x87\xb3\xa0\x6e\xf6\x9a\x06\x64\x2d\xeb\xb8\x67\xa2\x6b\x4f\x67\x1d\xb3\x77\x3b\xb0\xa6\xa2\xbe\xa6\xe2\x2b\x6b\x2a\x60\x4d\x4f\xe5\x82\x22\xc9\x9c\xc1\x30\x18\xda\xb5\xa0\x42\xe6\x2d\xfc\xbc\x85\xb7\xf7\xa1\x33\x17\x4d\x86\x27\x34\xd4\xfe\x73\x4d\xf9\xc3\x27\x49\xa3\x94\x84\x6e\xb7\x9b\xca\x3b\xe4\x27\x76\xdc\x1d\x4a\x1c\x72\x7e\xf6\xdb\xe0\xd9\xf5\x0d\xee\xfd\xe5\x60\x28\x79\x31\xfe\xb0\x11\xa4\x95\x38\xd6\xfe\xbf\x24\xaa\x21\xbd\x9e\x8d\xc0\x5e\x5d\x78\x13\xad\x9c\xfd\x68\x12\xb4\x9e\x8c\x83\x9c\xed\x19\x1b\xf9\xc0\x3a\xb8\x9e\x4d\x26\xc2\x84\x7c\x6a\x58\xb4\x03\x50\x97\xdc\x9e\x72\x30\x09\x3e\x0c\xf5\xa6\xa5\x78\x88\x25\x8d\x33\x94\x24\x54\x87\x4a\x3a\x41\xe0\x16\xc8\xcc\x8b\x42\x6d\x08\x22\xaa\xce\xa7\x27\x19\x2b\x2f\x08\x16\x09\xcb\x62\x46\x7a\xff\xd5\xc3\x05\x99\x0e\xf1\x10\x43\x54\x00\x67\x54\x64\x4d\x8e\x30\x38\x59\xcc\xc8\xde\x10\xaf\xc9\x50\xe2\xd1\xc3\xb9\xe3\x0d\xe7\x72\x5f\x99\x26\x52\x42\xa7\xf3\x19\x5e\x92\xbb\xa8\xc4\xa9\xe2\x8c\x0b\x84\x17\x64\xa9\xc6\x8c\x57\x64\x19\x07\x78\xec\x70\xfd\xd2\xda\xe5\xaf\xcd\x16\xbd\x21\xe5\x74\x3d\xeb\xbc\xd8\x23\xe4\x06\xd0\x01\x60\xdc\xbd\x11\xce\x49\x6e\x09\x46\x20\x32\x31\x1b\x90\xde\xb3\x1e\xce\xc9\xed\x54\x65\x9d\x45\x37\x38\x87\xf4\x6b\x97\x82\x50\x05\x1e\x2f\x37\x86\x2f\x4d\x0d\xea\x51\x71\xe4\xc7\x8b\x1a\x76\x5d\x55\x55\x06\x3e\x35\xdb\xdb\x43\x38\x77\xb8\x2b\xc1\xb9\xc5\x75\x6c\xd0\xfb\xae\x87\x73\x8d\xc3\x0a\xfc\x94\x61\x58\xbf\x2f\xe2\xa4\x54\x6e\xfc\xe2\x44\x32\x9b\xc6\x25\x11\xf4\x09\xfc\x7a\x94\x14\x62\x5c\x96\xe3\xd2\xb0\xd4\xe5\x38\xa9\x50\x85\x3f\x05\xbc\x92\xfa\xf2\xae\xe0\x3b\xe1\x07\xd4\xa8\x9d\x40\xb7\x78\x91\xb8\x58\x52\x4e\xbb\xac\xec\xe6\x45\x17\x78\xf0\xae\x2c\x91\x76\x7b\x03\xba\xc3\xe4\xcc\xb6\x6a\xb7\x89\x01\x38\xb5\x0f\x01\xe4\xb1\x1f\x01\x95\x4e\xf3\x19\x61\x1e\x9f\x10\x0e\xaa\x54\x92\xf5\x26\x99\xbc\xb7\x17\x8c\x29\x2c\x67\x98\xac\x27\x70\xa2\x2e\x27\xf9\xae\x1e\x4c\x48\x33\x50\xcc\xb7\x4d\x08\x23\x3c\x36\x2b\x64\x62\x91\x98\x51\x17\x66\xd4\x09\x61\xd3\x42\x6d\xe6\xc4\x6c\xe6\x5c\xef\xda\x01\xb9\x9a\x26\x7a\x93\x26\xd8\xd1\x11\xbd\x67\xbd\x3d\xa2\x39\x2c\x43\x18\xe7\xb2\xc8\x20\x47\x18\x36\x8e\x07\x44\x55\x7d\x1a\x4b\xaa\xc1\xc3\xad\x9d\xba\xa9\x8c\x82\xbc\x08\x49\xb4\xd3\x36\x5f\x5e\x91\x96\x4d\x34\x9d\x39\xcb\xd0\x2f\xf4\xa1\x8c\x24\xf7\x01\x4a\x19\x91\x4f\xa3\xef\xa2\x22\xe4\x4a\x63\x88\x0a\x38\x73\x74\x88\x8d\x14\xd4\x22\x74\x60\x48\xe1\xb3\xc2\xe1\xb3\x92\x0c\x0f\x4b\x17\x44\xad\x34\xb5\x67\xf2\xd0\x4d\x67\xa4\x37\x68\xa9\xa7\x98\x96\x33\x88\xe6\xaf\x08\x73\x65\xf2\x9d\x0c\x48\x6f\x47\x76\x84\x85\x8d\x2a\x68\x36\xa6\x2f\x53\x9c\xf4\x7a\xe3\xde\xa4\x37\x10\x5a\xd4\xd3\xef\xd5\xce\x22\xb8\x5a\xde\x35\x97\x5e\x28\x19\xc3\xcc\xf4\x21\x46\xec\xa6\xc2\x4f\xa0\xeb\x69\x3e\x33\xd9\x49\x0f\xe1\x82\x9c\x44\x6c\x3a\x9c\x21\x9c\x10\x33\x1d\xb8\x94\xe0\x31\x33\xd2\x62\x49\xef\x9a\x9d\x38\xc9\x48\x4f\xf0\x35\xed\x8d\xa3\xe4\xd5\x41\xbf\xdf\x9b\xce\x24\xe7\x53\x68\xfe\x25\xd9\x3f\x90\xbb\xab\x04\x6f\xec\xd3\xc2\xa6\x0f\xb1\xfc\x32\xdb\x6e\x23\x3e\x2d\x66\x64\x3a\x43\x08\x67\x84\x4d\x47\xb3\x89\x6c\x7e\x34\x43\xe3\x5e\x0f\xe1\x72\x22\x3f\x9b\xf9\x1d\x43\xde\x6c\xc7\x91\xb6\x72\xf3\xe6\x06\xc3\x5c\x53\x49\x16\x37\xcd\x4c\xe8\x9f\xbd\x91\xdc\x39\x4e\x34\xf6\x6f\x3d\x74\x08\x84\x7e\x01\xc2\x63\x6a\xb8\xc5\x21\x2e\x74\xd4\xb1\xc4\xcf\x3e\xe9\x69\x3f\xcc\xf2\xfc\x99\x1d\x63\x0b\x25\x83\x11\x76\xb6\xb5\x41\x6d\x09\x72\xee\x5d\xc2\x35\x95\x1b\x49\x9d\x50\x1a\x9c\x50\x0a\x27\x94\xaa\x4e\xac\x09\xed\x7c\x9d\x31\xa7\x44\x1e\xa5\x71\x44\x1d\x39\x13\x51\x84\xd7\xde\xeb\x5a\x8f\x6a\x6e\xf9\x92\xce\xfc\xd5\xa8\xdf\xef\x3d\xeb\x11\xaf\x07\xf3\xfd\x11\xaa\x4f\x88\x4c\xc3\x6b\xb2\x76\x29\x6b\xeb\xa2\x45\xf2\xd0\x7b\x43\x77\x78\x53\x32\x3c\x4c\x2d\x5a\x07\xac\x74\x1e\x71\x4c\x7d\x06\x38\x45\x08\x99\x0d\x9a\x0e\x06\xe8\xd0\x14\x5e\x4a\x00\xb1\x20\xc3\xc3\x85\x3b\xfe\x0b\xb0\x44\x5e\xcc\x2c\xc8\xef\xf7\x97\x3a\x0a\xc4\x74\x31\x43\x9d\x56\x6f\x0f\x54\xc1\x94\xa8\x0d\x78\x53\x85\x55\xb7\x5b\x43\xad\xe4\x84\xab\x38\x3d\x7c\x3a\x92\xe0\x85\x4f\x0f\x24\x09\x23\xea\xf9\x4a\x92\xc8\x7c\x19\x49\x64\xbe\x35\x49\xa6\x07\xd6\x95\xe4\xda\x32\x25\xfb\x6b\x48\x03\xd9\x62\xbe\x47\x48\x69\xbe\x94\xfb\xc0\x88\xb0\x3d\x42\x32\xeb\x60\x60\xdf\xe2\x2d\x48\x9f\xb0\xfd\x6c\x0c\xa5\x26\xe5\x7e\x3e\x1e\x56\x08\x55\xd1\x52\x2d\xdc\x8a\x2c\xa7\x43\x6b\x8b\xbd\xea\xf7\x57\xde\x94\x44\x4c\xbe\x6b\xf2\xa1\xdf\x07\x19\xd2\x77\x72\x61\x6d\xa2\x3e\x8f\xfb\x7f\x93\xcb\xbb\xd6\xe4\xc7\x0e\x86\x89\x38\x62\x00\xf8\x58\x60\x17\x95\x83\xa1\x3d\xb6\xdd\x06\x71\x15\x34\xa2\x03\xb2\x12\x22\x27\x30\xe7\xdf\xa3\x67\x83\x66\x6a\x16\x97\x49\x60\x33\xc2\xca\xff\xde\x45\xc4\x51\xc7\x52\xf5\x46\xe4\xe2\x85\xbd\x1c\x1e\x66\x4e\x12\x93\x19\x48\xb6\x26\xf9\x34\x9b\xe1\x39\x59\x6b\x62\x30\x95\x3b\xd3\x27\xbb\xf0\x92\x3c\xe0\x85\x8e\x23\x31\xdf\x23\xe4\xb2\xdf\x4f\xe5\x9f\x45\x02\x2b\x32\x3c\x5c\xbd\x9c\x9b\xba\x57\x40\x7c\x92\x3d\x75\x3f\x76\x43\xe6\xd3\xd5\x0c\xdf\x4a\xc8\x50\x4c\x93\xc1\x60\xd6\x59\x12\x42\x1e\xfa\xfd\x68\x49\x36\x15\xc2\x5f\x3d\x8f\xfd\x7e\x3a\x5d\xcd\x26\xcb\xe9\xcd\x8c\xdc\xf6\xfb\x2d\x2c\xc6\x2d\x1a\xab\xaf\x55\x39\xcd\x3c\x82\x72\x6d\x09\x4a\x90\xbe\x96\xe3\x25\x66\xe5\xdb\x87\x3c\xb9\x61\xf3\xf1\xc2\xe2\x92\xb2\x8a\x56\x78\x8d\x81\xa1\x97\xc0\xd1\x68\xf0\xf4\x86\xf1\xf3\xf8\x45\xef\xeb\x3d\x94\x60\xfa\x53\xfc\xb1\xe0\x37\xb0\x52\x9c\x6c\x72\xf3\x7c\xae\x28\x91\xf1\x1a\xdb\xa4\x4f\x89\x58\x8e\x4b\x7d\x4f\x20\x5f\x4c\x9e\x34\x84\xcc\x37\xc9\xaa\x95\x5e\x82\x4b\x95\x0e\x8d\x8a\xa8\xd7\x33\xae\xfb\xed\x05\x17\xc2\x9e\x0f\x25\x2b\x45\x32\x2b\x55\x10\xae\x6f\x73\x70\x19\x50\x0e\x85\xc4\x23\x72\x87\x94\x2d\x3b\xa4\x54\x3b\x44\xe8\x4d\x8f\x3a\x49\x34\xc7\x6b\x5c\x4c\xd7\x33\xb5\x25\x53\xc2\xdd\xe5\xce\x7a\xd6\x49\x27\x70\x2d\x01\x6d\x8f\x73\x25\xa0\x67\x78\x8e\xaa\x2a\x92\x34\x4b\x78\x27\x2b\x26\xca\xa5\x28\xa6\x9a\x49\x57\x1e\x1d\x75\x54\x43\xed\x19\xe3\x88\x7c\xf2\x2e\xd4\x8f\xfc\x9b\x5f\x7e\xf9\x47\x19\xfa\x4d\x68\xb1\x04\xe7\xe5\xed\x4a\xfe\xd5\xaf\x8a\x5b\x4c\xba\xff\xef\x6f\x89\xb3\xe2\xfa\xe8\x0a\x54\xc0\x31\x8d\xdf\x6b\x53\x79\xa0\x9b\xdf\xe7\x0b\x89\x36\x2f\x78\x92\x97\x4c\x36\xaa\x4c\x30\xfd\x14\xc5\x3f\xd2\x58\x69\x8c\x7d\x3a\x3a\x3b\x3a\x39\xbf\x3c\xff\xf5\xe4\xf5\xe9\x07\x42\xe3\xfa\xfb\xf9\xc5\xd1\xc5\xb1\x7b\x35\x8d\xb9\xea\x48\xeb\xa5\x35\xdb\xe1\x74\xcb\xee\x31\xe8\x97\x5a\x38\xed\x68\xa7\x63\xc9\x74\xd2\x73\xd5\xc3\x38\x69\xaa\x85\x89\x37\xb4\x2c\x93\x6b\x0a\xee\x35\x5a\xf2\x98\x4a\x41\x5f\x11\x3c\xbb\x5e\xf0\x64\x4e\x27\x3b\xd2\xc3\x5d\xa1\x1c\x45\x72\xf5\xdf\xe2\x0d\xac\xe6\x25\x4a\xd5\x69\xbf\xa2\xd0\x85\xa0\x73\x8b\x43\xa8\x72\x43\x56\xec\x90\x28\x24\xdf\x7e\x0b\x56\xd6\x38\x7b\xb8\xbf\x46\x89\x9e\x45\xcc\x81\x12\x80\x60\x87\x53\x3e\x43\x81\x9f\x11\x47\x70\x81\xdf\x7d\x17\x58\x90\xf7\xfb\xdc\x79\xfc\xa3\x53\xbe\x3f\x52\x42\xa5\x16\x2c\xdd\xef\x27\xe6\x2e\xac\xe7\x71\x17\x3d\x54\x45\xb9\x15\xd1\x09\x92\xfb\xac\x07\x9e\x16\xa6\xcc\x10\x73\x49\x80\x88\x99\x8b\x41\x22\x59\x82\x59\x15\xde\x93\x5a\x72\x59\x0e\xcf\x86\xdd\xa7\x53\x01\xfd\x72\x01\x17\xac\xdb\x55\xf9\x89\xc0\xb5\x99\x09\x8f\x18\xfa\x4f\x0a\x25\x9e\x92\x70\xa8\x4b\x7a\x81\x25\x95\x35\x4c\xf3\x59\x15\x46\x40\x57\xe1\x65\xc0\xfd\x63\x56\x5c\x23\xb6\x88\x0e\x7c\x65\x83\x8d\x0e\x3a\x33\x23\xa2\x03\x39\x22\x6f\x5f\x76\xff\xad\x37\xe0\x83\xde\xb8\x2b\x19\x38\x2b\x5b\x9b\x32\x97\x99\xf9\x77\xf2\xde\x8d\x6c\xd3\x9b\xd3\x76\xeb\xfc\x09\x15\x8b\xae\x22\x49\xb7\xdb\xc6\x74\xd4\x33\x7e\x84\xef\xae\x91\xe5\xd7\x7c\xeb\xf5\xfb\x2a\x0a\x18\xec\x24\x04\xfe\x78\x0e\x5d\x71\x3f\xe4\x94\x24\xd5\x93\x2c\x1b\x6f\x2a\xac\xcc\xf9\x52\xf9\xa8\xcc\xd5\xe4\x63\xd5\x29\xa3\x3c\x4e\xb2\x0c\xdb\x98\xc9\x7b\x23\xe5\x22\x51\x2e\xed\x1a\x48\xde\x48\x20\x4c\x91\xdd\x57\xb0\x87\xbd\x1d\xbd\xdd\xaa\xc0\x0b\xb9\x36\x83\x4b\xc1\x8b\xa8\xec\x19\x72\x35\x09\x04\x0e\x12\x6d\x21\x27\xb9\xe7\x92\xfe\x13\x5a\x20\xbd\x82\xc0\x38\xab\x28\x43\xc8\x8b\xfe\x2d\xe9\x38\xb3\x9a\xb9\xb6\x4b\x4c\xcd\x21\x02\x6a\x39\xf4\xe0\x3b\x27\x43\x9c\x5a\x0e\xec\x70\xfe\x32\x05\x61\x58\x31\x9d\xcf\x64\x55\xd3\xf9\x0c\xfc\x0e\xb5\x55\xa4\x3d\xf4\xca\x6e\xc9\x19\x9e\xf2\x27\xb2\x5a\x3a\x73\x92\x6b\xb7\xae\xb5\x00\xa5\x81\x3f\x2d\xe7\x2a\xac\xf2\xef\xcc\xed\x76\x52\x6a\x8b\x63\xf0\xc6\xa9\x6e\x83\x7b\x97\x97\x0a\xb4\x5f\xee\x1f\x7c\x3f\xfa\xe1\xef\xdf\x0f\x87\xc3\xd1\xf3\x17\x7f\xfb\xe1\x60\xb8\xff\xfc\xf9\xc1\xc1\xdd\xf3\x5e\xa7\x06\xfd\x6f\xf5\xf5\x6a\xef\xd2\x60\x0d\x53\xf6\xe0\xf9\xc1\x0f\x3f\x1c\xfc\xfd\xf9\xf0\x60\xf8\x7c\xff\xe0\xf9\xf3\x03\x28\x1c\xa2\x92\x6b\x7d\x0f\xda\xbb\xbc\xfc\xc7\x27\x57\xf4\xf9\x0f\x07\x3f\xfc\xfd\xe0\xc5\xdf\x5f\xbc\xd8\x7f\x7e\xa0\x0b\xb6\x61\xa6\x2b\x1d\xc2\xf2\xa1\x1e\xc2\xd2\x84\x1f\x36\x6e\x4e\x17\xbc\xb8\xf1\xfc\xe2\x8b\x22\xb8\x65\x62\xa5\x46\x16\x36\x2c\x03\x2b\x8f\xe6\x82\xdd\x82\xe3\x11\x48\x58\xf3\x4c\x1b\x57\xf6\xd6\xab\x34\x11\xb4\x67\x3d\x8d\x16\xd9\x6d\x23\xb6\xb2\x01\x74\x60\x2f\xe3\x2a\xf5\x10\xe4\x9e\x6d\xfb\x4d\xb2\x2e\x69\xfa\xfa\x01\xfa\xc0\xf2\x6b\x3f\xd3\xa8\x9e\x49\x3b\xde\x7b\x32\x8f\xa9\xe8\x4c\x49\xcc\x5b\xf2\x5e\xde\x32\x70\xd7\xf7\x0f\x4f\xfc\xae\xe3\x45\x4f\x6f\x67\x24\xdf\x6e\xa9\x92\x31\x9b\xa0\x23\x82\xe6\xc2\x08\x9f\x15\xf9\x63\x84\xcf\x69\x22\x12\x25\xbf\x94\x4f\x10\x60\xd3\x9f\x98\xf4\xa4\x48\x69\xe6\x6a\xbf\x9a\xd9\xc0\xd4\x2b\x65\x69\x16\xac\x04\x98\x8d\xfa\x29\xd3\x6b\x57\x80\x1b\x5a\xc6\x45\xfa\x51\xca\x51\x1f\x25\x79\xe0\x57\xb3\x62\xb7\x85\x30\x96\x7c\xfe\x87\x92\xfe\xb9\xa6\xf9\x9c\x92\xfd\x11\x66\x41\x14\x08\xd3\x1b\x6e\x2c\xe0\x62\x4e\x25\x06\x96\xec\x8e\xac\x21\xf2\xfa\xc7\x5c\x14\x92\xa7\x97\x6f\xaf\xf8\x86\xf5\xdb\x2b\xfa\xfd\xa8\x78\x2a\xcf\x76\x3b\x54\x52\x1a\xdd\x7b\xf4\xdf\x58\x71\x59\x7b\x4f\xdf\x9d\x28\x59\x8f\xdd\xca\xfd\x7e\xb4\x57\x3c\x39\x82\xed\xb6\xed\x7b\xa3\x15\x64\x5c\x81\xcb\xd5\xca\x63\xc5\xf5\xd8\xf5\x0e\x31\x7f\x7d\x25\x73\xef\x45\x4b\x6c\xfc\x24\x43\x94\x24\x46\x1e\xee\xad\xb8\x9f\x6f\x9a\xec\x8f\x66\xda\xd9\x60\x28\x25\x4c\x0e\x07\x83\xd2\x06\x16\xf6\x8b\x94\x4a\x04\x9e\xc5\xac\xd4\x0e\x66\x52\xed\x33\xb7\xb9\x89\x32\x55\xb0\x0a\x77\x11\x35\x81\x05\xce\x75\x8a\x89\x55\x65\x76\x53\x6e\xce\x41\x14\x21\xf2\x2a\x04\x36\x93\xc6\x56\xdb\x1b\xe1\x9b\x80\x54\x48\x54\xce\xee\x7e\x57\xe5\xe8\x21\x34\xf6\x4b\xa9\xaa\xf7\x86\x9a\x69\x89\xd5\x8d\x17\x25\xaf\x1a\x55\x7b\x27\x37\x16\xb6\x81\xb7\x2c\xb5\x71\xe9\x65\x05\x48\xb6\xaf\x86\xdc\x85\x5e\xf6\x90\x1f\x96\xa8\xed\x8c\xa8\x2e\x68\xc8\x81\xbc\x33\x5b\x89\x25\xad\x87\x0c\xf2\x6b\x89\xbd\xef\xfa\xaa\x2e\xd0\xdb\xf1\xb3\xba\xcf\x26\x2c\xcf\xee\xbc\x7e\x86\x0a\x26\x30\xb2\x0a\x85\x2a\x00\x8b\xbd\x6b\x93\x2c\xed\x83\x3f\x35\x3a\x6e\x73\xf8\xe7\x69\xd0\x0a\x7d\x03\x2a\xd1\x09\xa6\x0a\xab\xf8\x09\x1e\x22\x19\xfa\xc0\x52\xfd\xfd\xc2\xb2\x4c\xf9\x3f\x88\xcc\x11\xf6\x3f\xbf\x65\x69\xf8\xb5\x72\x1d\xde\x84\x5b\x67\xbb\x8d\xe6\x41\xbf\x83\x6d\x59\x07\x8d\x92\xd8\x74\x6b\xde\xbd\x4b\x4a\xb3\xb1\x7a\x26\x52\xb5\x09\xf1\xa1\x20\xbd\xbb\x97\xf2\xd3\x22\xef\x2d\x5e\x71\x5a\x67\x1e\xfd\x01\x01\xf2\x40\x0d\xec\x3a\xac\x63\xd7\x51\x30\x0d\x09\xa4\x7a\xd0\x4b\x2f\x40\xc5\x69\xca\xb8\xdc\xc6\xb4\xb1\x94\x5f\x99\x66\x49\x31\xf1\x07\x33\x81\x7a\x3b\xe8\xe5\x6f\x3f\x13\x12\xfe\xca\x21\xfa\xc3\x85\x0b\x58\x2f\x66\x88\x99\x1a\x0f\x94\x9a\x88\x6d\x51\xf8\x01\x61\x5a\xe9\x0f\x34\xdc\xaf\x8e\xa2\x50\x0b\x56\x95\x10\xda\x0c\xe6\x24\x50\xc3\x09\xe2\x0a\x41\x7a\x65\x93\x54\xee\x38\x8e\x39\xda\x34\xd9\x03\xe5\x2e\x12\xcb\x5c\xe1\x3c\xe9\xf2\x60\x00\x64\xce\xae\x0f\x74\x8d\xd8\xbf\x41\xe2\x0c\x46\x48\x2b\x50\x54\x8b\x22\xcb\x8a\xbb\x33\xbd\x32\x65\x18\x6f\x45\xb5\xd3\xd9\x7d\x96\x1d\x2b\xe9\xeb\xf1\xd4\x37\xc0\xa4\x99\x14\x37\xda\x1d\x37\x81\x1d\xaa\x10\xaa\x8c\xbb\x38\xa7\xb3\xe6\x41\xd6\xc8\x1c\x96\x6e\x6f\x10\x1c\x9e\x41\x0f\xf5\x2a\xc9\x85\x51\xb4\x79\xea\x8c\x51\x9f\x49\xbb\xf4\x16\x77\x1e\x51\x53\x82\xba\xec\x3d\xe3\x2f\x5f\x1d\xbd\xb8\xa7\xbc\xdf\xb3\xca\x57\x8c\xdb\xe9\x42\x54\xb2\xe7\x3e\xff\xf6\x20\xf7\x9b\x4f\x4e\x56\xad\x42\x98\x07\xd8\xe8\xc7\x00\xe7\x7e\xa1\xc9\x97\xc0\xe3\xea\xbd\x64\xac\xd4\x6d\xd3\xde\xc8\x5b\x83\x9b\x64\x15\x45\x92\x78\x26\xaf\xe4\x8a\x82\xd6\xd9\x38\x31\xa2\xcc\x52\x3d\x80\x4d\xf0\x38\xc3\x5a\x4f\x7a\xbc\xc6\x30\xe4\xf1\xbc\x22\xa0\x76\x7e\x0c\x0e\xc3\x19\xea\xf7\xb5\x52\x76\x4a\x8e\x41\x6f\x87\x21\xbc\x24\xa7\x51\x5a\xf3\xbc\xad\xd8\xf0\xcd\x35\x15\xdd\x1b\x2a\x12\x49\x4a\x3a\x15\xa9\xf3\x08\x34\xe8\x25\xae\xd6\x52\x11\x56\x1e\x2b\x4f\x93\x57\x19\x8d\x24\x3f\xc8\x6b\xe2\x91\xa8\x67\xaa\xe9\x59\x19\x44\xa8\x94\x08\xd6\x4a\xd6\x31\x50\x05\x22\x38\x73\xc6\x83\x6f\x10\xd5\x24\x9a\xe3\x14\xe1\xb5\x05\x02\xc7\xe0\x79\x9c\xe1\x25\xc2\x4b\xe0\x9d\x16\x64\xb3\x60\x3a\x5c\x9e\x1a\x0d\x66\x64\x3a\xeb\x3c\xf7\xe4\x02\xfd\x7e\xc4\x08\x35\xa1\x0e\x8f\xb5\x0f\x75\x4f\xb1\xb1\x20\xc3\x43\xc3\x75\xbf\x2a\xe0\xda\x18\xb4\x9e\x74\xd6\x69\x21\x11\xac\xe2\x68\x25\x20\x28\x30\x73\x3a\x50\x15\x96\x93\x27\x17\xcb\x4d\x5c\xa2\x12\xdd\x8a\xb9\x4f\x99\xfa\xd4\x36\xd9\x4c\x6d\x5f\x64\x0b\x4b\x20\x61\x2e\x7f\xe9\xb4\xd8\x1f\xd9\x0b\x0c\x1b\xc9\x4f\x28\xb7\xe8\xaa\xa3\x42\x17\x05\xd9\xac\x5f\x72\xf0\xad\x25\xb3\x62\x9e\x64\x1f\xd5\x58\x3c\xa8\x22\x47\x67\x6e\x3f\x3d\x5d\x66\x3a\x75\xd1\x06\x66\xde\x90\xbd\xe1\x96\x2a\xd9\x23\x44\xdd\x37\x5e\x55\x16\xb6\xf7\xfb\xd1\x82\x9c\x46\x0b\xbc\x46\x08\x9b\x45\x5e\x20\xbc\xa8\x3c\x1e\xfa\xb4\xb1\x67\x13\x21\x38\xbb\x5a\x0b\xda\x5a\x6d\xeb\xae\xa5\x48\x32\x59\xf5\x5d\xeb\x2a\xea\xa1\xc9\xd3\x1b\x96\xca\x0d\x3b\x0e\x52\x65\x52\xa0\xd4\x18\xc4\x6a\xdc\x73\xb1\x17\xe1\xba\x12\x42\x40\x59\xf9\xf0\x89\xde\x09\x93\x5d\x1f\x22\x04\xfa\x9c\x95\xe2\xb8\x2f\x1a\x1c\xb7\x8b\x07\x74\x09\xfb\xe7\x53\x0b\x7b\xa7\xbe\x10\x5f\x2f\xd4\xe7\x3d\x3d\x42\xdc\x92\x06\x20\xfa\x15\x5e\xee\x8f\x4a\x61\xaa\xc6\x8b\xe6\x26\x54\xdf\x8a\x17\x73\x5a\x2a\x7d\x91\x28\x87\x20\xa8\xc0\x82\x7a\x93\xd1\x4e\xbe\x1a\x9b\x0f\x54\x95\xda\x06\x97\xd6\x51\xb6\xea\x2d\xa8\xa9\x99\x92\x3e\x19\xba\xa3\x5e\x7f\x36\x90\xa2\x7a\x85\xe6\x05\x20\xa8\xcc\xbb\x82\x03\x81\xa4\x74\x1a\x55\x06\xcb\x2d\xf0\x75\xfe\x9a\x2e\x0a\x4e\x61\x10\x3f\x15\xc5\x97\xa8\x99\xa9\x5e\x0d\xd8\x7d\xd5\x33\xd9\x89\xb0\xe5\xbf\xda\x0b\xea\x3a\x71\xb4\x10\x94\x7b\x7d\xc0\xb4\x9e\xe9\x8a\xce\x8b\x1b\x6a\xd6\x4f\xe5\xa8\x6a\x89\x81\x98\x50\xe3\x53\x33\xd7\x02\x75\x6c\x1c\xb6\x52\x24\xe5\xf2\xcc\x97\x20\xa8\xa8\x34\x54\xb2\x16\xf2\x07\xe4\x0c\xf2\x61\x6a\x37\xc9\x8c\xe4\x36\x5e\x97\x0d\x4b\xaa\x96\xb4\xb3\x17\xf5\xf4\x63\x8f\xa9\xb5\x44\xfd\x3e\xdb\x6e\x23\x4e\x84\xb9\xde\xd4\x10\x48\x7e\xd3\xba\x6f\x27\x4d\xf4\x2f\x1b\xaa\xef\x45\x9c\x7b\x7b\xd1\x0b\x99\x60\x8f\x5a\xd1\xef\x2b\x50\x92\xe0\x02\xe1\xa4\x52\xf7\x9c\x10\xe5\x60\x4e\x53\xea\xc2\x47\x69\x70\x61\x2c\xfc\xa8\xe9\x7f\x7d\x38\x4e\xef\x39\xb9\xa1\x86\x16\x95\xcf\xdb\x6d\x7d\x9c\xfd\xfe\x9e\x89\x79\x54\x87\x35\x2b\x2d\xa7\xef\xf7\xf7\x5a\xa2\x08\xec\x11\xab\x59\xaa\xee\x60\xfd\xfe\x05\x97\x0d\x14\x81\x20\xbc\x56\x3d\x47\xfd\xbe\x27\xd3\x74\x55\x99\x4a\xaa\xc8\x3b\x53\x98\xea\x07\x38\xb0\x4a\xcb\x2a\xaa\x41\x2f\xe2\x81\x90\x89\xf7\xac\x2e\x6a\x16\x54\xcc\x97\xea\xd4\x43\x38\x76\x5d\x07\x0d\x60\x12\xa1\xae\x7a\x7d\x22\x1b\x9a\xd8\xde\x37\x3d\x71\x7e\xd5\xb8\x99\xcb\xb5\x66\xaa\xa4\xad\x80\x90\x2a\xb2\x52\xce\x30\xc8\xf9\xe1\xca\xa5\xb8\x76\x6a\x7e\xea\x52\x40\xa0\x4a\x49\x18\xcf\xcc\x00\x9c\x01\xa7\x71\x80\x0d\xe2\x8f\xda\x86\x34\x03\x6c\x81\x18\x56\x8f\xd6\x31\xb2\x8a\x01\x90\x5d\x30\xbc\xc4\xde\x10\xf7\xee\x58\x96\xe9\x63\x07\xa5\x7b\xd8\xaf\xdc\xe7\x21\x3c\x4c\xe2\x12\xe3\x2b\xd7\xb0\x32\xdf\x68\xfd\x24\x89\x1e\x7c\x17\x09\x65\xe2\x01\xc0\x0a\xb7\xc0\x4e\x54\x35\xe1\x8e\x05\x20\x2a\x04\xbb\x9d\x82\x80\xd3\xd8\x05\x3d\x5a\x7a\xdc\x3e\x8c\xc4\x36\x0a\xba\x76\xad\x5f\x14\x80\xc3\x39\xb9\x8b\x18\xc9\x91\xa2\x62\x58\xcb\x38\x72\x0f\x10\xd3\x9a\x58\x54\x52\x74\x55\x13\xfc\xee\x46\x28\x34\xb2\x70\xbd\xc5\x94\x40\xc7\x95\x41\xd5\x8e\x19\xd8\xd4\xdb\x27\xf5\x04\x05\x57\xeb\xbd\xf4\x60\xac\xa8\xfc\xd3\xd0\x64\xf9\x94\x23\x0c\x6b\xba\xab\x04\x72\xc1\x01\x0b\x10\x34\x45\x55\x3d\x21\x38\x8e\xc1\x01\x6a\x99\x0e\x1b\x48\x47\x32\xba\xa8\xdf\x6f\xd3\xb1\x6d\x0b\xb9\x00\x73\x38\x69\xe2\x67\xd2\x48\x09\x91\x5c\x78\x32\xfd\x03\x61\x64\x15\x63\x0d\x9b\xc2\x9c\x63\xdf\x74\xbb\xaa\xda\xee\xe7\x2f\xf4\x5d\xc6\x49\x17\xbc\xe8\xa7\x3b\x68\x2c\x75\xaf\x51\x4a\xe4\x11\x85\x81\x94\x35\x2d\x95\x37\x49\x29\x4d\x7d\x19\x6c\x52\xb4\x52\x2f\x20\xc3\x0f\x17\x5e\x9e\xcf\xa7\xf6\x82\x4f\x35\xb5\x9d\x60\x50\xa4\xd0\x04\xe3\xa7\xaf\x0d\xeb\xc9\x41\xd9\x3b\x03\x3d\xc6\x80\xac\xf3\x74\x9b\xd5\x77\x49\x48\xd0\xe9\xd5\xac\xdf\x8f\xca\x48\xd4\x0a\x4b\x16\x2a\x30\x3b\x98\x5e\x69\x7d\x12\xff\xa4\x5b\xab\x32\xcb\x1a\xc4\x29\xb5\xc4\xca\x84\x91\xe0\x1d\x80\xc1\x18\x3c\x47\x00\xcc\x90\x9f\x6f\x3c\x28\xc1\xfa\xfd\x3b\xe0\x86\x23\x53\x6d\xdb\x7c\x31\x3b\x59\x47\x4f\x4f\x56\x30\x55\x28\x5c\xdc\x1c\x87\x74\x15\xaf\x9f\xce\x73\xfb\x45\x82\xd8\x16\xf2\xb8\x05\x22\x72\x85\xaf\x6a\x09\x21\xe6\x52\xa3\x60\xf9\xb5\xb1\x3e\x4d\xbb\x30\x05\x3d\x84\xa1\xb7\xb1\xd7\x54\x48\x62\xdf\x26\x7c\xe3\x49\x15\x84\x95\x2a\xf0\x0a\xfa\xd0\xa1\x10\xea\x88\x9b\x55\xda\x80\x2c\x20\xf5\xe2\x91\xe5\x53\x31\x1d\xce\x66\x92\x0f\xb0\x37\x33\x6e\x06\x82\x7b\x1e\x97\xac\x18\x69\xe5\xe3\x01\xab\x88\x8c\xad\x18\xc2\x03\xff\xb6\x30\x6a\x00\x29\x8f\x92\x35\xb5\x8d\xea\x3a\x01\xa0\xc0\x6b\xd5\xff\x9e\x5d\xb2\xd4\x84\x2b\x62\x68\x92\x4f\x99\x0a\x85\x39\x56\x4f\x38\xaf\xcc\x76\x78\x53\xdf\x04\x64\x53\xf9\x46\xf2\xb5\xcb\x38\x53\xec\x4b\x50\xcc\x2f\x10\x5e\xa2\xfd\xd9\xbc\x05\x74\xe7\xae\xd2\x72\xbb\x0f\xc9\x95\x7f\xda\x7a\x3d\x73\x30\x96\x51\xad\x5e\xdc\xa2\x26\xd2\xeb\x29\x2b\x87\x48\x0c\x88\x64\xdd\xb1\x18\x10\x45\xbe\xe2\xbd\x61\xa5\xee\x1d\xfe\x0a\x46\xca\x7f\x85\xfb\x68\x14\x82\x28\xef\x74\xea\x13\xde\x6c\x95\x92\x57\x51\x3e\xa5\x1a\x36\x51\x8f\x59\xc3\x7b\x43\x09\xaa\x6b\x77\xb5\x9e\xd1\x18\x2e\x88\x25\x4c\x5b\x90\xae\xc7\xae\xfa\x73\xd1\x3b\x17\x09\x17\x9e\x64\xbd\x67\x70\x73\x86\x77\x15\xd1\x30\x59\x91\x8b\x32\x7f\x5d\x1a\x4a\xcd\x60\x99\x3f\xb6\x84\x84\xbd\x7f\x65\x35\x2d\x27\xb9\x15\x7d\x8c\xc3\x3c\x6d\xe3\x01\xe9\x28\xd8\x15\x46\x14\xb3\xe0\xfa\x4c\xcb\x7f\x95\x50\xa9\x42\x6d\x9d\xd7\x17\x43\xca\xfd\x2f\xf2\x6c\x7a\x3d\xf1\x51\x2b\xc9\xa2\xbc\x37\x78\x35\x81\xa3\xbf\x2e\x5b\x74\x15\x2b\xd4\x35\x31\x2d\x77\xcc\x88\x51\xcb\x05\xbd\xf4\xfa\x70\x40\x67\xaf\xde\x80\xee\x6a\x62\xee\xb0\x42\xaf\x0d\x4a\xc7\x25\x18\x7f\x38\x77\x33\x0f\x7d\x82\xbe\xef\xee\xac\x83\x81\x3c\xab\x7b\x4a\x1e\xb4\x51\x0c\x49\x5e\x11\xda\x71\xe1\xfd\xfb\xfd\x3c\x36\x37\x18\xfe\x73\x64\x19\x3c\x2c\xac\x6a\x47\x12\x85\x9b\xa8\x3e\xb2\xfa\x0e\xf2\x15\xba\x3c\xfb\xf8\x60\xaf\x93\x60\xac\x66\xe7\xb0\xf1\x93\x33\x60\xd6\x2f\xc1\x42\xf7\xa8\x6c\xef\xd1\x27\x49\xbf\xd1\x54\xf6\x45\x52\x36\xf5\x6b\xa1\x2f\x9a\xae\x39\x7b\x42\x62\xa4\xae\xd5\x03\x46\x46\x8b\x7c\xee\x12\x7b\x7b\xc4\x3d\xdb\x37\x92\x87\x4d\x29\x85\xc6\x33\xdd\xd4\x1f\x16\x7d\x36\x20\x27\xb8\x1c\x9a\xce\x30\x93\x90\xce\x23\xa4\x6c\x74\xd4\xe6\xbd\x96\x2f\xc0\x0a\xa4\x51\xfe\xfd\x30\x0f\xb0\xb0\xa5\xc2\x7c\xd0\xca\x2a\x88\x2d\x78\x51\x40\xb5\xbe\x6a\x6d\x16\x79\x64\x95\xb1\x28\x0e\xea\x43\x68\x0a\x4a\xee\xc1\x65\x97\xd5\x27\xf5\xad\xbe\x22\x0e\xe6\x20\x8c\xe4\x53\x07\x1a\xac\xe2\x7d\x40\x8a\xeb\xee\xe8\x21\x94\x11\x05\xea\x12\x2e\xbb\xaa\xe6\x37\x4b\xa6\x81\xb8\x04\x27\x38\x03\x21\xc9\x17\xbc\x0e\x08\x41\x7b\x79\x84\x40\x77\xd7\xe9\x14\x36\xe6\x0c\xf4\xef\x0a\x32\x04\xe8\x66\x2c\xa5\xe0\xba\xbe\x50\xb1\xa3\x0b\xdb\x6d\x23\x00\xf1\x8b\x87\xdc\x30\xda\xcc\x49\xd1\x81\xdb\xfb\x4a\xd5\x2b\x5c\x04\xda\xe2\x15\x19\x1e\xee\xef\x17\xe6\x2a\x42\x56\x8d\x97\xc4\x19\xfe\x2d\x08\xf5\x8f\x42\x31\xc3\x2b\xe0\x4b\x41\x41\x8c\xa4\x4a\x47\xdd\xfa\x2b\x98\x14\xaf\xc8\x5c\x51\xf9\x4a\xed\x13\x16\x58\x77\x4b\xd6\x10\x2d\xb1\x2e\x83\xd7\x78\xa1\x35\x49\xaf\xa9\xf0\xb2\xbc\x2b\xb8\xd6\x08\xd7\x6a\xd8\x61\x19\xcc\x71\xa1\xcb\x7d\x53\x13\x72\x5d\x56\x64\x55\x17\xc2\xc1\x79\x5d\x59\x1a\x5d\x6b\xc6\x2f\xfa\xfd\x85\x95\x25\xd5\x07\xe7\x71\xc4\x36\x53\xbf\xbf\xf2\x44\x51\x37\xfd\x7e\xb4\x32\x04\x02\xd4\x65\x08\x6b\x97\xeb\x46\x2b\x94\x2d\x0e\x23\x39\x59\xdb\xed\x2a\xae\x4b\xbd\x16\xe0\x3c\x61\x4e\x4e\x12\xb1\x8c\x6f\x58\x1e\x15\x78\x8e\xf0\x2d\x59\x21\x9c\xf7\xfb\x7b\xac\xdf\x8f\x6e\xc9\x6d\xeb\x88\x6e\xed\x88\x10\xce\x7c\xc8\xb6\xce\xcb\x25\x5b\x88\xe8\x16\x02\x5c\xaf\x5d\xec\xea\x86\xa9\xc3\x49\xc1\x69\x57\xd7\x62\x63\x2c\xde\x51\x4e\xad\xbb\xa7\x65\x02\x7e\xa0\x38\xed\x26\x9c\x76\x53\xb5\x58\x5d\x63\xe2\xd7\x5d\x14\x1c\xbc\xc5\x28\x88\xdf\xed\x0d\x9c\xe0\x2f\xd7\x72\x23\xa6\x22\x42\x26\x82\xbe\xd1\x5a\xea\x91\xdf\x5b\x39\xdc\x32\xca\x9a\xda\x31\x5e\x82\x24\x5f\x10\xce\xaa\x96\xaa\x5a\x1d\xb5\x78\xd1\x90\x07\x03\xae\x54\x54\xa7\xdc\x47\x67\xc8\x5d\xea\x31\x73\xa9\x57\xe8\xdb\xbb\xc4\xbf\xdc\x2b\x2b\x15\xa9\x19\x74\x87\xe5\xcc\x7d\x0a\xc4\xa1\x0c\x97\xb8\xc0\x89\x84\xf9\x5f\xdb\xd9\x01\xe7\x0a\x2a\x3e\xa0\x63\xec\x45\x16\x07\x72\x3e\x21\x7c\xca\x1d\xc8\x42\x01\x8d\xbd\xe3\x14\x18\x34\xd2\xd1\xe1\xb3\x95\x3e\x2d\x5b\x44\x80\x74\x01\x5a\x7b\xb1\xf3\x73\x65\xf2\xda\x0e\xe7\x43\x6f\x02\x25\xd9\x91\x2d\x84\x13\x9d\x84\x94\xfd\xbe\x05\x7e\x95\xe7\x6b\xeb\x28\x98\x2e\xd9\xd1\x04\x55\x5f\x19\xc6\xc6\x59\x93\x4a\xf4\x64\x61\x18\x4e\xc8\x74\x76\x58\xec\xef\x1f\x1a\xf7\x5e\x79\xbf\x4f\xc1\x17\x90\x1c\xa3\x1c\xab\x47\xee\x66\xe1\x44\x4a\x00\x2d\xbb\x9a\x46\x19\x9a\xb0\xe9\x5a\x29\x35\xab\xf9\x1a\x37\xc4\xc2\x6b\x9d\xa7\x9c\xae\x67\xe3\x44\x19\x69\xad\xe1\x38\x25\xbb\x8f\xd3\xef\xbf\x16\xeb\x6e\xca\xd2\xfc\xaf\xce\xf7\x10\xcd\x8b\xf5\xf5\xb2\xab\x94\x12\x9e\x81\x93\x58\x36\x57\x17\x73\x54\x50\x5e\x76\x45\xd1\x2d\x13\xc1\xca\xc5\x43\x37\xc9\xb2\x6e\xb1\x80\xf3\xd4\x7a\xd0\x94\xd5\xed\x77\x1b\x5a\xc5\xdd\x13\x56\x96\xc0\x65\xaa\xbd\xdb\xfd\x7d\x90\xb8\x93\xd7\xd8\xa6\x72\x66\x25\x5f\x2d\x67\xed\xed\xff\x9d\xf9\xc1\xe7\xdc\x62\xdc\xf4\xf3\xd9\x87\x63\x15\x05\x03\x32\xf8\x16\x08\xb5\x6c\xff\x9f\xb6\x3f\xd0\xf4\xd2\xc7\xa7\xe8\x25\x47\x23\x19\x51\xc3\x9a\x67\x96\x06\xda\x45\x2e\xd5\x68\x1d\x6b\x69\x80\x73\x4d\x35\xb0\x5d\xb4\x8c\x7d\xb4\x9a\x34\xda\x66\xcd\xdb\x75\x6f\xbd\x6f\xea\xf6\x66\x6f\x84\x13\xab\x93\xd3\x09\x8d\x1c\x24\x10\x04\x85\x89\x3c\x81\x30\x31\xec\x2a\xa3\xaf\x1f\x3e\x9f\x7d\x08\x6a\x4c\xbc\x58\xd7\xf2\x18\x0a\x32\xc4\xdc\x5a\xce\x1e\x8a\x97\xfc\x70\x30\x10\xc6\x38\x89\x4d\x85\x32\x5f\x33\x24\x44\x4a\xa6\x2a\xaa\x7d\x2b\x79\xa6\xa5\x9b\x73\x89\xf2\xd2\x6f\xa1\xe2\xe6\x68\x2a\x94\x3e\x63\xa9\x86\xb8\x6c\x81\xc1\x73\x9c\xe2\xb5\xc5\xbe\x0b\xb2\x54\x1f\x3a\x8b\x49\x16\x2d\xd0\x78\x19\x8a\x36\x97\x2d\x72\xcd\xcc\x98\x25\x06\x70\x4d\xcc\x3a\xc5\x76\xbb\x6c\xa0\xec\x15\x9a\x44\x85\x56\xbc\xf7\x73\x93\x25\x1a\xd7\x93\x56\xd6\xcc\x2d\x0a\x15\x40\x59\x60\x83\x8e\x73\x4f\x8d\xe6\xbd\xbd\x7f\xa2\x4e\x0f\xdf\x4a\x50\xec\x0d\xd2\x6e\x33\x05\x40\x7a\x1a\xe7\xed\xbe\x78\xb2\xed\x7d\xf0\xee\xbb\xfa\x7d\x77\xdf\x35\xec\xe8\x24\xb1\xdd\x06\x1f\x46\x61\xc0\x6c\x6d\xfd\x8e\xf3\x20\x41\x09\x7f\xb8\x1b\x41\xbe\x73\x04\x8c\x0c\x71\xe1\x2c\x4f\xd8\xcb\xe2\x70\x30\x60\xc6\x16\x9e\x6b\x13\x79\x3a\x4d\xd4\x68\x12\x37\x9a\xca\x8e\x46\xe6\x7d\x47\xe0\x20\x87\x87\xd7\x5c\x42\x65\x49\x29\x5a\x14\xbd\x35\x23\xe5\x73\x37\x45\x96\x36\x59\x9e\x1d\x4a\x79\x9a\xdf\xd1\xc1\xcd\x9c\x50\x29\xb8\xee\xd7\x46\x0c\x7e\xeb\x2d\xa5\x8d\xf2\xac\xd1\x9f\xcf\x8a\x6b\xcb\x0b\xda\xd3\x01\xdb\x3f\xb7\xce\xcd\xf5\xd7\x92\x8a\x08\x55\xa0\x51\x63\xe4\x5b\xee\x3c\x41\x32\x8e\x76\xba\xb6\xb3\x28\x12\xe7\x64\x6f\x78\xc8\x5f\x91\x61\xbf\x9f\x1f\xee\xef\x73\x27\xad\xe3\x33\x5c\x10\x66\xd9\x27\xaa\x9c\x8d\xe2\x4d\x52\x8e\x8b\x4a\xae\xbc\x32\xbd\x66\xe0\xdf\x64\xbb\xed\x05\x2f\xca\xf2\xdc\xb7\xb0\xdf\xff\x1e\x55\x15\x42\x95\x85\x08\xf5\xfb\x8e\x16\xa0\x41\x51\xe5\x9d\x18\xb7\x10\x8e\x6a\xb0\x56\x0e\x8c\x7b\x2a\xfd\x4e\x9f\x34\xc7\x14\xe1\x3d\xa1\x45\x99\xf5\x05\x0d\xe8\xac\xfa\x47\x2d\x25\x73\x9a\xb2\x3b\x74\x63\x59\xd3\xea\x61\x88\x79\xc0\xff\xea\x2e\xe6\x20\x24\x75\xdd\x34\x7d\xf4\x29\xe3\x1a\xc4\x40\x98\xed\x50\x24\x17\xc5\x99\x0e\x45\x02\x05\x23\x86\x73\xff\x52\xc6\x53\x05\x65\x9e\x90\x88\xb0\x9a\x12\x32\x79\x15\xb1\x40\xbb\x56\x6d\x5f\x75\x87\xf3\xf9\xec\x43\xc4\x2c\xf2\x4b\x59\xea\x2d\x41\xfb\x21\x30\x9e\x5b\x0b\xdb\x29\x7f\x70\x46\x5d\xbb\xae\xf5\xcb\x10\xc2\xfa\x42\xab\xa6\x06\x3e\x2f\x6e\x56\x19\x05\x71\x0f\x66\x55\x8b\xaa\xaa\x72\x9a\xca\x1f\x82\xbd\x74\x4d\xc5\x45\x7b\x56\xe7\x19\xc9\xa3\x9b\xf4\xf2\x52\xb3\xc0\x46\x19\x1a\x9c\x5f\x18\x94\x6c\xe5\xbf\xb2\xc4\x47\x43\xaa\x60\x1e\xba\x1c\xf9\x48\xef\x14\xde\x57\xa0\x50\x7b\xe2\xb4\x72\x78\xae\xe5\xf8\xf7\x11\xf7\xe7\x25\xd8\x2d\x8e\xa4\xf3\xc5\x18\xae\x27\x47\x79\xfa\xa1\x48\xd2\x5d\x1d\xca\xbf\xa5\x43\x76\xe7\x37\x64\x8a\xbf\x7f\x3e\xfb\x00\xe4\x26\x28\x4b\xe7\x85\xe8\x3a\x9a\xee\x77\xd4\x3c\x13\x02\xe7\xcd\x03\x61\x6f\x7d\xf5\x2d\xe9\x7d\xb8\xc7\xe5\x96\x96\x7b\xa1\x5d\x8b\x0d\x55\x8d\xbe\xd3\x60\x89\x69\x1c\x50\x58\x0e\xa2\x83\xf8\x66\xae\x9d\xd1\xf9\x1a\x14\xc0\xa8\xed\xd8\x11\x56\x29\x47\xfb\xd3\xa9\x83\x01\xcc\x48\x3e\x69\xfd\x32\xbd\x9d\x8d\xbd\xc6\x0b\x52\xeb\x18\xc3\x02\xe1\x84\x2c\xa2\x00\x42\xe0\x22\x5c\x6c\xb6\x88\xde\x47\x45\x30\x3d\xde\x0b\x02\x10\x67\x5d\x1b\xd7\x99\x64\xef\x3c\x26\x9a\xcd\x34\x93\xda\x62\x8c\x35\xc4\x65\xf5\x14\xc4\xdb\x6e\x77\x02\x3b\xc9\x05\x09\x6b\x4a\xf2\x35\x90\xd8\x0a\xa0\x32\x2b\x69\x04\x8f\xf5\x6f\xb4\xd0\x2c\x2a\x76\x80\xad\x0c\xb5\x63\x61\xeb\x56\x85\x04\x67\xb7\xc0\x4f\xa1\x6e\x67\xa5\xff\x3f\x42\x68\x59\xe9\x82\x51\x43\x32\xcf\xa1\xde\xd0\x07\x95\xc9\x58\x05\xb9\x67\xd4\x42\xcd\x3c\xb1\x09\xfa\xfd\x88\xb7\x2c\x27\x6a\xc7\x04\xdc\x4e\x74\x7d\x16\x76\xa0\x41\x27\x96\xe7\x3b\x0a\x12\x8e\xb9\x67\x03\x53\x47\x21\x01\x7e\xf3\xf6\x24\xf7\xa1\xfa\x39\x15\x22\xa3\xbe\x39\x86\xae\xa6\x7b\xb7\xa4\xb9\x9f\xce\xca\xae\xa9\x2c\x95\x80\xdf\x48\x95\x54\x98\xce\xe3\x7b\x06\x81\x0e\xac\x80\xb6\xb0\x18\x6a\x17\x15\x50\xe0\x04\x61\x5e\xa5\x45\x48\x42\x28\x7f\x4e\x7b\x23\xa7\xb6\x2c\xa6\xc2\x93\x1e\x14\xfa\xbe\xd5\x8a\x05\x59\xbf\xcf\x1a\xca\x64\x81\xe5\x77\xbf\x0f\xf2\x57\x90\x30\x84\xd4\xbe\x55\xfb\xb5\xda\xf5\xb8\xf7\x59\x62\x59\xc9\xd1\x43\xce\xae\x51\x4b\xeb\xd8\xfb\x14\x58\xd0\x71\x52\x79\xde\x07\x3b\x8a\x8d\xfc\x43\x55\x91\x4c\x13\x4f\xd4\x0d\xb7\x8a\xfa\x18\x4c\x67\xb8\x50\x42\xa1\x9a\x8b\x9c\x21\x9a\x44\xa6\x03\x47\x42\xd0\x9b\x15\x74\x41\xc2\x7d\x6f\x0d\x44\x01\x97\x91\x9a\x69\xb5\xe8\x05\x8d\xdb\xca\xee\x2c\xf7\x47\x0d\xb3\x0a\xf0\x4e\x14\x40\x89\x26\x54\xce\xc1\xc6\xa2\xb9\x9b\x2c\xaa\xdf\x61\x67\x60\xe4\x7c\x20\x53\x81\x0b\xf8\xb2\x5b\xe4\xdd\x14\xe2\x62\x40\xc4\x11\x25\x4d\x39\x34\xbb\x2b\xec\xba\x71\x47\x9d\x13\xe1\x1b\xe6\x85\x37\xe8\x3e\xe0\x12\x18\xa4\x0c\xce\xaa\xcd\x43\x45\xfe\x65\x73\x3b\xa5\xd4\xbc\xce\xbb\x04\x95\xf8\x71\x83\x02\x53\xfa\x9f\x4d\xd3\xa1\x27\xd9\x93\x86\x9d\x4b\x4b\x0f\xf6\x86\xb8\x17\x10\x75\x3d\x3c\x9d\xfd\xf3\xc4\x1e\xc5\xe2\x5b\x88\x3d\x8a\xb0\xde\x42\xfe\xe2\x5d\x9c\x1d\x7d\x3c\x7f\x7f\xf1\xfe\xf4\x63\xf7\xcd\xe9\xc9\xa7\x0f\xc7\x17\xc7\x60\x29\x12\x5c\xe5\x68\xed\x7c\x85\xe2\x13\xc5\xbe\x46\x89\x6f\x1e\xc2\x3c\x63\xf7\xc0\xb0\xa7\x13\xaa\xfb\xe9\x40\xae\x89\x44\x1c\xd3\xa2\xd1\x04\xa6\xc6\x60\xaa\x52\x82\x92\xa4\xaa\xc2\xc5\xf7\x49\x07\xa7\x90\xb7\x4a\xb8\x80\x19\x83\x49\x2a\x7d\xda\x44\x5b\x67\x2a\x84\x52\xc4\xf4\x9e\x09\x9a\xfa\x78\x85\x0f\x06\x48\x45\xa7\x88\x98\xcd\x20\x51\x86\xea\x92\xbd\x30\xf5\xa1\x91\x07\x9a\xdc\xa5\xd0\x99\xe4\x0d\x25\xa4\x0a\x53\xe4\xb8\x7d\x55\x40\x06\x4d\xc8\x7c\xf2\x3f\x12\xd6\x6d\x58\xc8\x10\x7b\x90\xc7\xe3\x9d\xa9\x2f\x2a\x6e\xb2\xc2\x45\xbc\xce\x35\x07\x6c\x7d\xd8\xc8\x93\xeb\xcf\x00\xb0\xb0\xf5\x09\xb0\xbd\x83\x39\x80\x2c\x6e\x0a\xbc\x0b\x9a\x6f\x19\xee\x08\x8b\x70\xce\xd5\x91\x4a\xf5\x1a\xd6\x9b\x76\x7b\x55\xc7\x3e\x38\xe5\x9f\x55\x81\x48\x12\x6d\x61\x61\xc9\x1d\x37\x1b\xa0\xaa\xe0\x7f\xb3\x66\x5d\x0a\xaa\x1c\x3a\x1e\x25\x93\x6c\xbd\xdc\x7b\xde\xb4\x27\xbb\x64\x0f\x89\x7f\xf2\xb2\xca\x03\x44\xdf\xce\x87\xca\x03\x19\xb0\x99\x12\x0a\xb7\x23\x54\x05\x8a\x8d\xce\x7a\x9b\xb0\x43\x28\x47\x17\x0d\x50\x44\x43\x10\x11\x38\x4e\xb1\xf5\xf7\xf0\x54\x18\x37\x10\x58\xd7\x64\x1c\x5e\x18\x00\xb5\x5b\xc2\x82\xaa\xf6\xb9\x0e\x42\x65\x14\x06\xca\xc3\x1d\xac\xb9\x12\xf4\x94\x25\x94\x0b\x05\xee\xed\x39\xbd\x52\xfd\xbe\x7e\x88\x72\xb8\xaf\xcb\x1d\x06\xf0\xa4\xaa\x60\x0b\x56\xd8\x5b\xc1\x04\x7b\xd5\xe8\x44\x3b\x5c\x59\x63\x3d\x2d\x42\x7e\x09\x80\x3d\x32\x1b\x3c\x48\x5a\xff\xc9\xa6\x9d\xb0\x7c\x5d\x4a\x5e\x08\x17\x55\xdd\xf8\xa8\x98\x88\x9a\xfa\x67\x8b\x8c\xb4\x44\x63\xa0\xcf\xf7\x86\x55\x1d\xb2\x35\xe0\x1f\x6d\x68\xed\xb8\xd7\x92\x6c\xc2\xe3\x33\x9e\xce\xb0\x02\x70\xf0\xa4\x56\x4a\x3e\x5a\xb0\x21\x5f\xe0\xf8\x8f\xa7\xb3\x0a\x67\xc6\x53\x8a\x72\x58\x93\xb4\xba\x26\x5f\x93\x62\x9a\xcf\xf0\x9c\x24\xd3\x7c\xd6\x59\xf7\xfb\x6b\xad\x50\x41\xc8\x5c\x3d\x81\xd9\x83\xc4\x4b\x7c\x12\x95\xf6\xb4\xc2\x24\xcd\x11\x5e\xf7\xfb\xa5\x81\xcb\xe6\x3a\x75\x8d\xd0\x38\xdb\x6e\xd7\x66\x7d\xf6\x64\x5d\xfa\x79\x12\x81\x37\xe0\xb2\x0e\x57\x74\x7d\x68\x5c\x7a\x50\xd0\xdc\x26\xa9\x41\x98\x01\x60\xe6\x3c\xa7\x98\xb1\x34\xfa\x20\x47\xe5\xb1\x75\x30\x2b\xa4\xd1\xaa\x06\xb3\x58\x67\x88\x39\xbd\xa5\xbc\x84\x94\xaa\x46\x4c\x58\x4f\x82\xd6\x10\x17\xc4\xb6\x56\x42\xe8\xd3\x9e\x79\x45\x04\xd6\x97\xa6\x55\xa8\x59\x01\xf4\x31\x4e\x88\x4b\x3a\x4c\x94\xba\x81\xf5\x30\x99\x4f\x93\x59\x47\x52\xe8\x99\x95\xd5\xeb\x7b\xe0\xe6\x95\x04\x38\x5b\x54\x4a\xdc\xaa\x37\x45\xa8\xac\xda\xe6\xba\x63\xbb\x0d\x34\x5a\xb5\xcb\xc9\xba\x3c\xd1\xc8\x13\xc0\xb6\x13\xcf\x09\x7d\xca\xe3\x04\x4e\x89\xef\x34\x82\xf7\xfb\x7b\xf4\x49\x4f\x11\x78\x49\x68\x9d\x39\x0b\x1d\x4f\x70\xbc\xa8\xd7\xd9\x56\x65\xc3\xb9\x44\x67\xbe\xdd\xa6\xdb\xed\x72\xbb\x5d\x4c\xf4\x98\x20\x87\x5c\xc7\xb5\xbe\x25\x73\x2b\xbb\x46\x55\x55\xed\x04\xee\xf5\xf0\x46\xca\x4f\x90\xa8\x73\x33\x39\x52\x16\xf0\x84\x80\xc3\xd5\x7e\x5f\xc7\xcb\x92\x2f\x5a\xf8\x63\x2e\x7b\x42\xb0\x0e\xb0\x7c\x57\xeb\x12\x9e\x63\x86\xf9\x4c\x79\x77\xe6\x3b\xbc\xb0\xf8\xe6\xa0\xb0\xb3\x86\xb8\x74\xd7\x50\xc9\xcb\xf2\x70\x30\xb0\x5b\x8b\xc9\xad\x55\x4c\xb3\xf8\x0b\x7d\x98\x91\x4c\x07\x6a\xe1\xda\x5d\x53\x16\xeb\x16\x76\x35\x57\x2b\x68\x95\xd0\x8a\xaa\xce\x4e\xd7\x1d\x27\xd7\xe9\x7b\x35\x1b\x0b\x5e\xdc\x98\xfc\xfc\x49\xc2\xd8\xe0\xaf\xfa\xe5\x44\xb0\x93\xab\xb0\xbe\x8d\xcf\x85\xd2\x7e\xdf\xd7\x20\xb0\x12\x45\x5c\xb7\x93\x6c\x6d\x07\x81\xe4\x4d\x7b\x70\x08\xce\xb3\x0a\x1c\x54\x55\xae\xdb\x5c\x5b\x48\x7f\xa5\x75\xd6\xda\x3a\x68\x97\xe3\x5c\xb6\x25\x0a\xe2\x82\x0e\x78\x2d\xed\x60\xe8\xeb\xb8\xc5\xdc\x6f\x36\x66\xbe\x06\x4c\x39\x19\x2a\x8f\x5d\x11\x23\x89\x24\xa7\xa2\x10\x2d\x4d\xf9\x0c\x49\x42\x51\x2b\x47\x14\x4a\x62\x03\x24\x5a\xe1\xab\x3d\x36\xb7\x77\x82\x8d\x8d\x50\xc0\x2c\x89\xd9\x0e\xd9\x95\xd0\xe9\x61\x89\x28\xc1\x01\x96\x04\xd5\x47\xb8\xc7\xf1\xa2\x8e\xf4\xfb\xcb\x76\x3e\xd2\x40\x78\x0f\xb2\x37\x94\x67\x85\x19\x6f\xc3\x12\x4f\xf8\xf6\x3e\x9a\xf2\x57\xff\x11\xd2\x8a\xc8\xbb\x2f\xc2\xb4\xe2\x21\xdc\x5e\x3f\x79\xf9\x55\xa9\xdb\x22\x40\x34\x56\x01\xfa\x09\x1f\xc1\x9a\xd7\x0c\xe4\x32\xc8\xb8\x93\x50\xb8\xc0\x31\xe8\x17\x85\xf5\x3f\xb7\xcb\x59\xc0\x24\xd2\xe8\xb7\xb5\x6a\x2b\x84\xd8\x1b\x21\x0d\x3e\xeb\x22\x21\x54\x01\x13\x71\x43\x53\x96\x08\x0f\x14\x37\xda\xee\xb6\x16\xc7\xca\x53\xd9\x82\x53\xe8\x83\x6f\x9f\xd1\x90\x2b\x73\x22\x26\xa2\x26\x43\xce\x09\x0f\x9c\x02\x59\x99\x11\xcc\x59\x3e\x1d\x5a\x06\xd5\x48\x61\x40\x13\x9b\xe5\xd7\xdd\xa4\xab\xdb\x0d\xd4\xb2\x8d\xc0\x3e\x60\xa3\x41\x4c\x54\xf8\x02\x1a\x86\x29\x36\x3a\xf1\x2d\x84\xf5\x76\x1b\xde\x50\x98\x03\xd9\x22\xbc\x29\x7c\x87\x21\x22\xc4\x83\xc2\xf7\x1a\x92\x58\xaf\x21\xbe\xcb\x90\xa4\xd2\xf9\x7f\x61\x62\x59\xbf\x22\xdc\xb1\x4f\x6c\x13\xee\xe6\xc0\x2e\x96\x93\xe3\x66\xf2\x50\xd6\x7d\x25\xb7\xc9\xa8\x72\xf4\xd4\xfd\x02\x4e\x24\x6a\x52\x11\x20\x8a\xa6\x6a\xf1\xe1\xfa\xe5\xfc\x70\x30\x58\xa3\x4d\x19\x25\xd8\xcf\x30\x5d\xcf\x3c\x43\x09\x17\x2b\x27\x09\x35\x65\xeb\x97\xbf\xb1\x37\xa4\x44\x2b\xa7\x36\x6e\x2f\xda\x65\x6d\xf6\x2e\xe8\x1b\xc5\xc0\xd3\xdb\x99\x16\xb4\x2a\x76\xdf\x5e\x11\x05\xd3\x91\xc3\x2d\x8b\x11\x46\xb9\xae\x38\xd6\x4a\x72\x03\xb9\x5f\x13\x78\x68\xf7\xb6\x35\x04\x67\x6c\x88\xdc\x15\x5a\x6f\x11\x68\x36\x09\x3a\x5f\x5d\x24\x43\x10\xd3\x4a\x2e\x34\x23\x6b\xe7\x86\x90\xf5\xfb\xc9\x74\x6e\x25\xf4\xf4\x70\x30\x98\xa3\x43\xb6\x88\xe6\x84\xd8\x7c\x61\xeb\xa9\x02\x71\x9d\xd4\x97\xde\x25\xd6\x25\xcc\x7c\x60\xfc\x88\x7b\x09\x5a\x43\xe5\x7d\xe4\x2d\x41\xe6\x96\xa0\xa1\x69\x9c\xe2\x35\xce\x74\x9c\x37\x1f\x17\xf8\x6d\x2a\xad\x1f\xbe\xdd\xee\x99\x0e\x76\x97\x5a\x59\x65\x53\x75\xca\x68\x85\xb9\x51\x68\x0d\x68\x64\x4b\x3e\xdd\x4a\xea\xee\x06\xdd\xd4\xa9\xbb\x5b\xa4\xdc\x6e\x37\x12\xa3\xd5\xf4\x76\x46\x6e\xa6\xb7\x8e\xd1\x58\xf6\xfb\x7b\x0b\x68\xca\x2e\xb6\x3d\x55\xee\x44\x05\xe2\xd1\xc6\xa6\x80\xc3\x26\x8f\x9a\xe7\xb7\x47\x57\xf1\xed\x42\xca\x11\xd8\x28\x55\x95\xe7\x8e\xf8\x9d\x71\x47\x0c\x4e\x86\xbf\x2d\xf8\xac\x17\x26\xd6\x43\x96\x97\xfa\x0e\xe2\x4d\xa2\xbc\x2a\x39\x79\xef\x76\x1b\xb5\x66\x00\x17\xda\xa2\xfa\x27\xbc\x14\x27\x65\xb2\x22\xff\x29\x1f\xb2\x8c\xbc\x51\xff\xea\x52\x24\x25\x67\x92\x32\x48\xe6\x94\xfc\x81\xc1\x9e\x7c\x49\x3e\xea\x07\x93\xe3\x03\x18\xa7\x02\x97\x4f\xde\xa9\xc8\xb8\x94\x93\x47\x78\xca\x8b\x94\xb2\xc5\x03\x39\xc1\xa0\xea\x06\x41\xea\x29\x29\x30\x8d\x8b\x9c\x2c\xa8\xfc\x5f\x2c\xc8\x8a\x3a\xfb\x56\xf2\x13\x36\x72\x67\xf2\x33\x56\xae\xaf\x5f\x63\x1a\x2f\x58\x26\x28\x27\xbf\x40\x77\x1f\x72\xc9\x2b\xc1\xea\x5c\xe8\x50\xac\xb1\x35\xe9\x8e\xe7\x49\x29\xda\x9d\x1d\xe7\x64\x73\xc3\xee\x59\xe8\xd1\xbe\xd0\xc0\xa8\xc8\x75\x77\xd4\xdb\x62\x81\xad\x64\x96\xf8\x9b\x02\xb7\xcd\xbd\x3e\x57\xb4\xc2\xde\x45\x9e\xb3\x72\xb5\x41\x30\xfd\xd8\x2e\x17\x0f\x2b\xaa\x55\x9f\x4d\x45\x2a\x54\xe4\x15\xed\x26\x36\x80\xac\x15\xfe\x73\xed\x08\x41\x22\x4d\x3a\xeb\x30\xf0\xb8\x0a\x11\x54\xa7\x33\x84\xf7\x55\x4c\x09\x13\x57\x41\x00\x3d\xa9\xa5\x2c\x15\x2e\x16\x0b\xdf\x6a\x4b\x57\xd5\x71\x77\xa7\xaa\x26\xd0\xab\x71\x55\xd8\x38\x0e\x4c\x47\x5f\x8a\x0a\x3c\xd2\xce\xe7\x74\xc3\x15\xf6\x5d\x61\xe5\x36\xa0\x88\x6a\x40\x47\xb4\x61\xc8\xf7\xa6\x53\x0b\xc2\x12\x0d\x31\x9b\x16\x33\x14\xc9\xe2\x70\x98\xfc\x75\x35\xca\x2e\x1b\x06\x5a\x54\xe0\x1c\x7d\x6f\x54\x8f\xbb\x0b\xb3\x7d\xb0\x47\x88\x09\x10\x5a\x86\x60\xb4\xcb\xa0\x27\x2a\x6e\x6d\x1e\xab\x3d\xc0\x8c\x58\x79\x3a\xab\x79\x6e\x96\x7c\x8d\x9c\x4e\xad\x6a\xab\x84\x0c\x14\xaf\x92\x87\xac\x48\xd2\xf1\xe6\x0b\x7d\x18\x8b\xf8\xf2\x7a\xcd\xd2\xff\xa4\x0f\x98\xa5\xf2\x8d\xa5\x98\xca\x8e\x7f\x54\x99\x53\x2a\x12\x96\xc9\x0f\x9c\x96\xeb\x4c\x60\xf0\xbc\xf3\x3e\x1d\x43\x8c\x65\x99\x3b\x4b\xae\x28\x64\x80\x07\x2c\xd8\x0d\x3d\x17\xc9\xcd\x6a\xfc\x56\x92\xd7\x79\x71\x17\x21\x0c\xb7\x01\x63\x36\xed\xb9\xe1\xef\xdf\x31\xb1\xdc\x07\xdd\xd3\xde\x6c\xe2\xf4\x7d\x4d\x45\xda\x25\x4c\x85\xfa\xfd\x92\x8a\x0b\x76\x43\x8b\xb5\x50\x3a\x0f\x66\x15\x28\x19\x1e\xd2\x97\x56\x56\x45\x8d\x9c\x4a\x90\x44\x6e\x02\x4e\x44\xac\xc7\xda\xe1\xb1\x1c\x25\xe1\x92\x27\x1d\xf0\x98\xa5\x58\xfb\x77\xff\xd1\x4f\xd6\x63\xc3\x5c\x59\x0d\x01\x6b\x6b\xb4\x64\x21\x45\xbd\x21\xcc\xec\x5d\x87\xd0\x6e\x12\x4c\x4b\xa8\x4a\x6c\x1c\xb2\x0a\xff\x6d\x18\x7a\xc5\x36\x37\xe3\x2d\xd6\xe4\xa0\x46\xea\xab\xd1\x2a\xbb\x14\xb3\xf2\xb4\xe3\x08\x11\x99\x1e\xad\xb1\x43\x0e\xa9\xba\x08\xe6\xbe\x63\x6b\xb4\x09\xfd\x4a\xeb\xc0\x98\x61\x0b\x41\x8b\xfd\xbe\x4c\xba\xaa\xf5\xc3\x02\x34\x42\xb2\x49\x78\xc7\xaf\x8c\x50\x2f\x81\x04\x99\xc0\xc1\x34\xbb\x04\x8d\x0f\xfc\x6f\x72\x51\x8d\x21\x95\xb2\x1b\x09\x32\xa3\xf1\x4d\x24\xac\x6e\x10\x79\xb5\x11\x84\x10\x0e\x35\x72\x34\x4e\xe1\xaf\xc2\x82\xbc\x5a\x29\x0f\x32\x15\xfc\x8d\x5b\x8c\xef\xf9\xa4\x1e\xaf\x82\x29\x30\x1b\x51\xad\x2b\x03\x8e\x6a\x59\x4b\x78\x67\xc1\x1f\x36\xd4\xba\x74\x96\x67\x78\xae\x43\x52\x18\x10\xcb\xaa\x2a\xe2\x32\x3b\x79\xb5\xc9\xb7\xdb\x48\x39\xda\x6d\x76\x55\xf5\xd5\x65\x31\xbd\x96\x00\x57\x6d\xed\xce\x5e\xde\xef\x33\x70\x00\xa1\xbf\x33\xf8\xae\x46\x26\x6b\x5a\x68\x8f\x94\x9e\xab\x6e\xb3\x77\xe4\xc4\x22\xf5\xdd\xfa\x1f\x67\x7a\x02\xa2\x9c\x08\x84\x8d\x0e\xd2\x76\xeb\x82\x17\x13\xe6\x7b\x2b\x90\xef\x7e\x1d\x8a\xe0\x80\x1b\x24\x79\x6a\xc4\x92\xe6\x7a\xf8\x45\x68\xbb\xbd\x02\x7b\xb6\xca\x6c\xa8\x4a\xdf\xeb\x07\xee\xbe\xd1\x86\xda\xe5\x96\x9b\xc9\x3c\x47\xd4\xae\x38\xbe\x0d\x3c\x47\x1b\xa0\x6e\xb9\x31\xbd\x71\x24\x53\x66\xca\x40\xf0\x7d\x95\x4c\x46\xd8\xe4\x5a\x5f\x95\x73\xce\xae\x5c\x18\xb0\x89\x04\xfc\x06\xc6\xf4\xfb\xa5\x44\x5e\xd9\x82\x65\x19\x4d\x7b\x98\xa2\xb1\xd9\x0f\xb7\xe0\x43\xc8\xf7\x70\xfd\x44\x0f\x54\xab\x07\xd8\xef\x8c\xa9\x68\x19\x56\x74\x53\xbf\x05\x09\x7b\xe9\xc5\x52\xea\xd0\xda\xa1\x28\xa6\xc9\x8c\x08\xf9\x37\x18\xcd\x08\x87\x87\x83\x19\xc9\x61\xb0\x09\xcc\xa4\xee\x93\x3f\x08\xd7\xf4\x6d\x40\x77\xf9\x8d\x72\x3b\x1e\x65\x71\x1a\xce\xd0\x08\xb6\xb0\x37\x4f\xe3\x9e\x22\x5c\xd4\x94\xe1\xa1\xaf\xc0\xe3\x04\x9c\x20\x36\xb2\x33\xa2\x83\x6d\x08\x17\x6c\x83\x3c\x47\x39\x11\xd3\x4c\x62\x63\x31\xcd\x06\x7c\x86\xf3\xc9\xb5\xf6\x2e\x97\xa0\x71\x11\x25\xa8\xd3\xba\x86\x64\xe8\x29\x6e\x5f\x37\x78\x1f\x9c\x90\xb6\xa3\x8f\x4b\xa2\xb4\xab\x13\x24\xf7\xb1\x44\xde\xb9\x77\xd5\x57\xaa\x08\x4f\x99\x42\xfb\x4c\x62\x64\x27\xae\x51\x93\x03\x94\x08\x21\x62\xb2\x92\x48\x3c\xa4\x6c\x8e\x8c\x32\x4d\xd9\x9d\x1b\x22\x67\x9e\xe4\x4a\x7f\x4f\x53\xe8\x89\xe8\x96\xc9\x0d\x35\x39\xe3\x1e\x42\xe3\x3d\x39\xbb\x25\xd4\x58\xa0\x71\x32\x49\x23\x81\x19\x1a\x43\xa4\xd8\xc9\x42\xbd\x1c\x28\x01\xc4\x0a\xde\xbc\x05\xbd\x0a\x83\xee\x28\xe1\x81\x5d\x46\x59\x45\xde\xef\xef\xd1\xed\xf6\x40\x3f\x0a\x4b\x27\xd4\x0f\xc1\x7c\x99\xb0\xdc\x44\xb5\x50\x0e\x79\xe1\x57\x89\xe2\x82\x7d\xa8\xad\x1e\x0c\xa2\xf1\x71\x41\xb4\xc6\xdc\xca\x26\xf4\xc2\xb7\xed\xa8\x5a\x73\x85\xa7\x9c\x93\xa3\x1b\xc5\xc3\xa9\x58\xad\x0e\xfa\x64\x04\x06\x34\xa1\x63\xd1\x31\xfb\x5b\x62\xfb\xeb\x48\xee\x97\x0c\x27\xc8\x13\x21\xef\x72\xcd\xee\x39\x8a\x33\x3a\x0b\x6f\x02\xcb\x14\xa5\x44\x60\x3c\x28\xd3\xbb\x2e\x8d\xd6\x56\xaf\xf7\x12\x54\x12\x4e\xf3\x33\x45\xb6\x6b\xbb\xdb\x4b\x56\x7e\x2e\x59\x7e\xad\x58\x3a\x45\x9b\x13\x42\xee\x1b\x5f\xb5\x78\xd3\x39\xbe\x91\x28\xd3\xe4\xca\x99\x88\xe2\x38\xb6\x84\x1d\xaa\x54\x9a\x2f\xfc\xd6\xdb\x7f\xbb\x1d\xaa\x65\xd1\xa7\xc1\xf4\x83\xd3\x9b\x84\xe5\x2c\xbf\xf6\x52\x00\x18\xb9\x70\x89\x46\x30\x7e\x49\xc1\x28\x4a\xa9\xa5\x56\xde\x5b\x10\x1d\xce\x6b\xc4\xa8\xd9\xea\xa9\x81\x30\x71\x76\xcd\xb8\x05\x3c\xf9\x4b\x01\x57\x68\xba\x91\x64\xbe\x3c\xce\x05\x7f\x88\xe8\x34\x9f\xe1\x1c\x04\xdf\x46\xc4\x45\xe7\x5f\xde\xad\x33\x00\x29\x60\xa9\x87\xaa\xb6\xc4\x8d\x0e\x3c\x5f\x1b\x61\xe0\xfd\xc7\x6c\x34\x63\xe7\xab\xbb\x48\x51\x6d\x16\x80\x5c\xbc\x2c\x81\x9d\x3b\x49\x1e\xae\xe8\xc5\x92\xe6\x09\x38\x44\x6c\x1e\xa3\x96\xed\x61\x2d\x89\x9b\x6b\xea\xc3\x9e\xbd\x61\x47\xc1\x17\xea\xe3\xc9\x0c\x6d\x12\x03\x61\x00\x21\x03\x25\xe5\xb9\x44\x54\x53\x88\xea\x40\x5f\x1f\x6a\xc5\x83\x1e\x09\x8b\x6d\xb0\x70\xd8\x06\x73\x87\xe9\x5b\x78\x31\x86\xea\x95\x8c\x64\x69\xbf\xd4\x8e\x8d\x6c\x2d\xfe\xe8\x5d\x37\x8f\xd6\xa8\x03\xd0\x2a\x99\xac\x22\x79\x68\xc7\xd1\x3c\x2a\x31\xb5\xfe\x72\x2e\xef\x98\xe1\xa7\x8f\x44\x54\xc2\x9c\xfa\x2e\xbc\xc3\xef\xaa\x4e\x41\x5e\x09\xe5\xcd\x48\x52\x0b\x3b\xf3\xfa\x5e\x97\x20\xa7\xbf\xb7\xd4\xe2\x69\x67\x4c\xad\xa4\xf3\xc4\x9f\x80\xb6\xa5\x1f\xdb\x0c\x67\x30\xa3\xde\x1c\x55\xfe\xe4\x07\x98\x26\x38\x11\x4e\x54\xcc\x1c\x69\xd0\x02\x35\xfa\x7d\x80\xe6\x93\x15\xe8\xf5\x1b\x5d\x33\xbf\x61\xd3\x08\xde\x79\x52\x90\xea\x54\xa3\xc4\xa6\x76\x4a\xf6\xf7\x83\x13\x30\x15\x33\xc2\xab\x70\x66\xf5\xe4\x49\xaa\xc4\xb0\xf6\x5a\x9b\xb4\x65\xbb\xb4\x7d\x3b\xd0\xdf\x6a\x2e\x89\x35\x3b\xf1\xd5\xfe\x28\x3c\xb7\x81\x09\x1b\xfb\xa4\x98\x12\xdc\xf0\x6a\x6c\xbe\x39\x92\x83\xd3\xa4\x2c\xf2\x31\x57\x96\x95\x77\x04\xa4\x50\x97\xbd\x81\xe3\x27\x07\xbd\xfd\x1e\x3e\x26\x43\x6d\x63\x78\x5f\xc7\x03\x16\x07\xa4\xe4\xd8\xb8\xcd\x57\xa4\xb7\x31\x2e\xbc\x6c\x5a\x28\x19\x38\x12\xa4\x79\xc4\x09\xb8\x76\x68\x20\x3a\xb0\x8d\xd4\x88\x0e\xe1\xb5\xda\xa1\x6d\xa7\x94\xf6\xfb\x41\x7c\xe6\x16\xe9\xc9\xaf\xc5\x5a\x09\x4e\x56\x72\x54\x89\x76\x7b\x44\x79\xd7\x79\x43\x29\xc1\x90\x75\xc1\x78\x29\xba\x06\x97\x74\x45\x01\xa9\x46\xdb\xd7\x9b\x8c\x1e\xaa\xb4\x5f\x41\x5f\x87\xef\x7e\xd2\x16\x84\x6d\x6f\xa4\x22\x5e\xcb\x33\xbb\xe1\x5a\x93\x03\xa7\x86\x79\x09\x52\x0d\x4b\x63\xe8\xab\x1c\x6d\x56\xca\x45\x6c\x65\x6d\x4c\xbf\x36\xda\x77\x09\xcb\x68\x2a\x3b\x6f\x3b\xdc\xfd\xab\x06\x4c\x7f\x1d\x77\x3f\x65\x34\x29\x69\x77\x0d\x10\x83\x76\xff\x9a\xd3\xbb\xbf\x76\x8b\x95\x44\x63\x05\xc7\x00\x45\xb4\x71\xbd\x3f\x60\x43\x93\x5d\x51\x20\xd3\x68\x2a\xa7\xcc\x09\xa1\x62\x98\x10\x54\x39\x96\x04\x38\xc4\x85\xa0\x5c\x89\x16\x02\x72\x48\x12\xda\x86\xcf\x37\x0a\x8d\xd4\xdf\x4d\x6e\x02\x1a\x21\x03\x40\xbd\xc7\x1c\xb9\x46\x70\x01\xef\xb6\xdb\xeb\xbc\x66\xe7\x5b\x88\x5b\x0d\xe1\x8c\x6b\x55\xde\xe6\xb4\x0f\x91\x57\x02\xe1\x27\xbe\x1a\x6d\xb7\xca\xdc\xcd\xe9\x28\x09\x81\xbb\xf1\xd3\xba\x29\x1b\x78\xf1\xa6\x4e\x9d\xc6\x11\x1b\x39\xd2\xc1\x88\x73\xe5\x4e\x7a\x5a\xcc\x08\x9d\x16\x33\x2b\x25\x4f\xc8\xf0\x30\x71\x2c\x41\x32\x18\xa0\x0d\x9f\x8a\x69\x32\x9b\x11\x06\x5c\x8e\x8b\xe0\x1a\xba\x16\xf6\x23\xd8\x5a\x02\xc5\x8b\x0a\xbd\x3f\x42\x38\x27\xa3\x43\x43\x8f\xf0\x69\xbe\x3f\x92\xad\xe7\xd6\x0b\xb4\x57\xe5\x85\xbf\x3c\x1b\x39\xea\x31\xb8\xde\x26\xaf\x42\x86\xbf\xf2\xe3\xc3\xbb\x65\xf2\x2d\xbb\xed\xb4\xd4\x25\x74\x5a\x1f\x5b\x93\x61\x03\x15\xf7\x74\xa4\x27\x88\x83\xe3\x11\x6d\x7a\x69\x4b\xca\xa9\x52\xd6\xc7\x1b\x1b\xac\x58\xf2\x79\x0d\xfc\x96\xe8\x70\x53\x81\xe8\xe6\x1e\xb9\x50\x51\x8a\x1e\x49\x7c\x7a\x64\xee\xe3\xf6\xfb\xc8\xb9\x17\x97\xb8\x7d\x8e\x70\x69\xf8\xa0\xbd\x51\x87\xf5\xfb\x7b\x46\xdf\x35\x21\x17\x11\x03\x62\x3b\x97\xeb\x99\x54\xce\x22\xc5\xaf\x25\x9f\xf2\x59\xcd\xcf\xba\xc4\x79\x19\xb6\xfe\x08\x81\x91\x4a\xa3\x4c\x62\xc1\xff\x97\xb7\x7f\xdb\x72\xdb\x56\xfe\x45\xe1\x7b\x3d\x45\x4b\x23\x93\x83\x88\x20\x59\x72\x66\xe6\x9a\x7f\x76\xa3\xf5\xf9\x98\x78\xc6\xa7\xd8\xce\xc1\x69\xf7\xf2\x60\x53\x50\x8b\x31\x45\x28\x20\xd4\xed\x4e\x53\x63\x7c\x77\xfb\x62\xbf\xc1\xbe\xda\xcf\xb2\x1f\x65\x3d\xc9\x1e\xa8\x02\x40\x80\xa4\xda\xc9\xda\x6b\x2c\x5f\xb8\x45\x9c\x8f\x85\x42\xa1\xea\x57\xc3\xe6\xeb\x6d\xdc\xb0\xc0\x24\x09\x9d\x49\x29\x02\x49\x5e\x35\x49\x34\x91\x49\xb0\x90\x3d\xcd\x17\x0f\xe2\x82\x96\x66\x0b\x92\xe4\xb5\xff\xb5\x6f\x5e\xd3\x3e\x7e\x04\xbb\xf4\x8f\x1f\x19\xf7\x45\x62\xaf\x43\x59\x8f\x79\x75\x8b\xcb\x46\x21\x34\x47\x2a\x96\xbb\x8b\x06\x6f\x72\x3f\x68\x72\x9b\xc8\xcf\x53\x58\x3a\x0d\xe0\x71\x53\x81\x77\x87\x7b\x14\x90\x06\xcc\x03\xf4\xa0\x91\xf4\x7f\xa6\x9f\x51\xd6\x5f\x50\x88\x6f\xb9\xc8\x34\x59\xdb\x7e\xb7\x16\x81\x71\x0e\xe8\xb5\x5a\x5e\x25\x31\xcf\x79\x0e\x92\xcb\xa3\xba\x56\xfd\x10\x54\xf8\x8d\x90\xde\x50\xca\xeb\x5c\xad\x8f\xd2\xf2\x28\xd5\x35\x8c\x88\x6e\x24\xfd\x8c\x8f\x26\x87\x9c\x76\x36\x92\x48\xbd\x90\xdb\x4d\x24\x6e\xc9\xc9\xf6\x75\xda\x69\xe6\xa7\x19\xff\x42\x3b\x08\x95\x81\xeb\xef\xde\x6b\x09\xf7\x1d\x5a\x6f\x8c\x25\xbb\xa5\x82\x67\xe5\x39\xf1\xd8\x1f\x23\x2d\xe5\xec\x74\x0b\xbf\x48\x43\x32\x74\x7f\xcd\xdd\xad\x80\xdf\x70\x11\xfc\x72\xef\xbd\x8e\x82\x1c\x96\x7e\xf6\xb0\x11\xac\x80\x9d\x5d\x07\xc1\x7a\xd9\x38\x2f\x63\x9f\x1c\x4c\x42\xcf\xa5\xd6\xc7\x64\x1c\xce\xf5\x5e\x68\xd6\xd7\x9b\x2f\x2f\x92\x4f\xf1\x67\x38\x82\xdc\xf2\xf8\xfc\xe5\xb5\x61\x1e\xc5\xfe\xc2\x12\x71\x2d\xf9\xbd\xb5\xd2\x01\x70\x02\x96\xfa\x27\x7f\x30\x3c\xc6\x96\x7d\x34\xbd\x7f\x7c\x57\xef\x01\x14\x20\x44\xf0\x2c\x83\xdb\x73\xc0\xbd\x39\xad\xac\x3b\x6e\xc0\x0d\x5e\x44\xcb\xd8\x3e\x77\xaa\x96\xce\xde\xc0\x70\xff\xed\x1b\x78\x1e\x1c\x72\x8d\xd2\xaf\x5b\x92\xe9\x49\x0e\x07\x1e\x38\x92\x04\x35\x4d\xab\xfd\xd1\xdc\x6c\x24\xea\xb3\xdc\x71\x65\x6e\x46\xf7\x65\x7b\x74\x3d\x0c\xc3\x36\x6a\x2f\x77\x07\x8a\xe6\xbe\x7d\x29\xb0\x65\x27\xfa\x5f\xef\xec\xfc\xaf\xd3\x6a\x7d\x68\xe6\x4d\x51\x01\x2c\xca\xe3\xd6\x02\xdb\x13\x62\x24\x34\xcf\xdc\xc4\x3e\xfe\x7b\xcb\xfa\xf9\xff\x86\xee\x7a\x8f\xbf\x7f\xa7\xb7\xcf\xa0\xb7\x60\x9b\xe0\x77\xd8\x35\xfd\x29\xe2\x05\xe8\x0a\xdb\x0f\x57\x18\xca\xf7\x84\x7a\x27\xcb\x9f\x8d\xd8\xf6\xd6\x74\x33\xb1\x6f\x21\xb0\x4d\xad\x3b\x46\xf7\x72\x1e\x08\xb0\x3e\xc7\x70\xfc\xea\xd2\x1d\xed\x02\x7d\x48\x23\xc4\xda\x83\xa0\x64\xff\xec\x4b\x7b\xf0\xa7\xbb\xf6\x60\xb8\x01\xf5\x86\x84\x9b\xb3\xdd\x83\x01\x7c\xdb\x41\x39\x96\xe8\xc8\xb1\xc4\x21\x39\x96\xb5\xaf\xfc\xb8\x49\xb7\x4f\x4b\xab\xb4\xd3\xda\xd3\xbd\x57\x64\xbd\x12\x40\xfe\xdb\xde\x6c\x5e\x79\x7a\xe3\x11\x03\x46\xe7\x4e\xfe\xbe\x8b\x6f\x0e\x49\x3c\xa9\xc5\xdd\x57\xef\x66\x4e\x1f\xc6\x81\x73\xb2\xbe\x07\xf4\xc5\x21\x2a\xbc\x49\xb7\x47\xfc\xf3\x16\x50\xc3\xd2\xe0\xea\x97\x1e\x55\x3c\x13\xe5\xd2\xdd\xfc\x46\x44\x73\x57\xfe\xee\x90\x07\x76\x47\xf7\x6c\xee\xdd\x12\xba\xee\xbb\x49\xbe\xbf\x13\x7e\xc2\x7d\xaf\x2b\xed\xdb\x08\xdf\xdf\xb1\x87\x9b\x54\x3f\x77\x52\x21\xf4\xa6\x4e\xa4\xd7\xd3\x57\xec\x76\x6f\x96\xe8\x1f\x6e\x89\xfe\x74\xfb\x37\x84\x89\xa1\xcb\x31\xfb\x04\xd5\x23\x61\x34\xca\x19\x31\x67\xa7\x7c\xc8\xd8\x57\xe4\xaf\x8b\x1c\x0f\x2c\xc4\xdb\xce\x22\x19\x58\x05\x2e\x27\x46\x6c\x2f\xcc\xc6\xfa\x4e\x34\x4e\x35\xc3\x75\x99\xc2\xba\x14\xd6\x2f\x49\xb3\xc8\x2d\xc4\xe2\x81\x25\x2b\x1d\xfc\x44\xd3\xa2\xaf\x7c\xb2\xfb\xcb\xff\x87\x75\x8b\x83\xe7\x96\xee\xff\xde\x85\x6b\x2a\xff\xeb\x6b\xf7\x8f\xde\xb5\xab\x27\xe7\x3b\xfa\x9e\xcd\x1a\x4d\x8a\x1f\x70\x7d\xee\xf8\xd9\xfb\x73\xc6\xa9\xfe\x3b\x9e\x9f\x33\x45\xef\x33\xc6\xe2\xf7\x63\x76\x9f\x44\x91\xe4\x31\x66\xfe\x0f\x1b\xed\x4a\xd4\x59\x5a\x36\x83\x76\x9d\x97\x4b\x71\xbd\xc0\x3f\x96\xb8\xff\xc8\xfe\x03\x90\x6a\xbf\xb2\x1f\xa7\x2f\x76\x0a\xec\x67\x5f\x5d\x54\x5c\x5e\x71\x59\xd7\x3f\x4e\x7f\xe1\x17\x3f\xe4\xaa\x1d\x43\x7f\xf3\x6b\x70\x57\xc4\x8a\x17\xab\x28\xea\xab\xdb\x40\xe0\x47\xd1\xe8\xcc\x88\x4b\x4c\xc8\xf9\x88\x31\x76\xbb\x9f\x5a\x5f\x66\x78\x15\x36\x91\x84\x72\xde\xdb\x95\x9f\xf2\x52\xfd\xfb\x51\x91\x6e\xb6\x7c\x09\x53\xd2\x5f\x6b\xbe\xd9\x0a\xa9\xde\x66\x32\xdf\xaa\xaa\x3f\xc9\x0b\x04\x36\x7b\xb4\x4e\xcb\x92\x7b\xb8\x5a\x9e\x77\x0e\x7d\x68\x7a\x67\x68\xc6\xe9\x1c\x87\x59\x72\x5a\x72\x9a\x73\x2a\x38\x4d\x39\xad\x38\x2d\xf4\xd4\x78\x27\xc8\x9c\x7f\xe3\xa1\x08\x67\xdc\xbb\xbc\xa3\xda\xc8\xfb\x63\xae\xe7\xee\x36\x9e\xe9\x39\xe5\xe7\x24\xd6\x7f\xc6\xf3\x73\x82\xdf\x56\x0e\x68\x42\xad\xfe\xf5\x7b\x36\xdb\xff\xb6\x88\x2b\xce\xcc\x48\x4d\x4b\xfe\x59\xbd\xcb\xb3\x4f\xb4\x68\xc2\xae\xb8\xac\x72\x51\x56\xd3\x52\x2c\xf9\x74\x03\x1b\xfa\xde\x7f\x8f\x17\x49\xfc\x61\x39\x26\x1f\xa6\x64\x11\xfc\xfe\xf0\x75\xad\x7f\x7f\x75\x8f\xd0\x70\xb9\x17\xe0\x78\x60\xa6\x67\xaa\xe0\x67\xf3\xf3\x28\x1a\xcd\xed\xd7\x7d\xc0\xa0\xe7\xac\xe2\xea\xd9\xc6\xe8\x53\x13\x2a\x39\xc3\x51\x8b\x33\x4e\x48\xf2\xeb\x22\xce\x39\x9b\x51\x81\x63\xf3\xab\x0e\xa5\x29\x67\x4b\x91\xc1\x46\x34\xe0\x6e\xef\xf8\x67\xf5\x52\x2c\x79\x3c\x1a\x11\x2a\xf8\x54\xe0\x6a\x8b\x53\x4e\x6f\xb3\x75\x2a\xd3\x4c\x71\xf9\x38\x55\x29\xaa\xda\x99\x4a\x52\x8e\xa8\xe0\x39\x67\xe3\x71\xce\xff\x71\x9f\x24\x9c\x2f\xe2\xb8\xc4\xca\xc2\x09\x26\x53\xbd\x22\xe6\x53\x51\x5a\x44\xbb\x8c\xdb\x82\x4a\x0e\x91\xf7\xa7\x5b\x51\x29\x93\x2d\x9e\x11\x92\x48\x2b\xa2\x65\x8c\xfd\xa7\xdf\xdd\xc2\xc2\x97\x33\xca\x1b\x43\xd6\x9f\xda\xc0\x91\x27\x94\x1b\x11\x50\xee\xff\x63\x97\x4b\x1e\x8f\xae\xb8\x54\x9f\x47\x5d\x97\x3a\xf1\x77\x8c\x4f\xe5\xae\x7c\x55\x3e\x17\x62\x5b\xd7\xe6\xc3\x98\x81\x11\xbf\xbe\xef\xf4\x70\xee\x13\xf0\x0b\xd3\x86\x45\x81\xc0\x7d\x4c\x20\xd6\x6a\x0b\xb0\x1f\xa8\x11\x37\x32\x1e\x2c\x6d\x4e\x67\xa8\xc6\xb5\xe4\xec\xfb\x81\xd1\xfd\x5b\xa2\xd2\xcf\x9a\x33\xa0\x41\xec\xd4\x29\xb3\x80\x5d\xac\xd3\x9e\xd0\x8b\x3b\x9f\x8a\xb2\xf5\xc0\xd8\x28\x37\x98\x04\xab\x55\x2b\x05\x80\x74\x60\xc3\xd6\x9c\x1e\xa6\x5c\x3d\x32\x29\x8c\x98\x7e\xfc\xf8\xfa\xcd\xab\x17\xcf\xde\x3e\xf9\xf8\xec\xe5\xdb\x77\x6f\x7e\x7a\xf1\xe4\xe5\xbb\x07\xef\x9e\xbd\x7a\xf9\xf1\x23\x9e\xb0\x1b\xce\xbe\x9c\xb4\xd1\xab\xe5\x47\x79\x79\x24\x62\x4f\x4f\x6c\x04\x76\xee\x1b\x4e\x36\x1d\x3f\x40\x57\x7a\x77\xac\x78\x7c\xc5\xe9\x86\x9f\x5d\xf1\x73\x24\x0e\x97\x9c\xdd\xa6\x55\xba\x4d\x7e\xa0\x7a\x18\x93\x25\xa7\xaf\xed\xcd\x97\x7a\x4a\x79\x49\x49\xd3\xa2\x48\x1e\xd1\xe6\xbe\x9b\xbc\xa1\xfa\xda\x9a\xfc\x4e\xf5\xe5\x20\x79\x49\xbd\x3b\x42\xf2\x9c\x1a\xf5\xd0\xe4\x29\x05\xe5\xd0\xe4\x4f\xea\x54\x43\x93\x17\xd4\x29\x86\x26\x82\x8a\x32\x59\x71\x2a\x56\xab\x64\xab\x57\x39\x72\xf5\xdf\x5b\x86\xfe\x67\xba\x49\xb7\xc9\x43\x0a\x43\x9f\xac\x39\xc5\xe3\x2b\xf9\xc5\xd7\xc1\xbd\xe4\x60\x33\x12\x8f\x38\x38\xdc\x07\x49\x3e\x5e\x23\x02\xb5\x5b\x64\xd6\x8f\x38\x7b\xa2\x93\x4d\x3f\x7e\x2c\x44\xba\x04\xf0\x3f\xb3\xce\xff\x7f\x97\x45\xbe\xd9\x70\x79\x4f\xee\x4a\x95\x6f\xf8\x88\x0c\x4c\x52\xc9\x2f\xf3\x4a\x6f\x6c\xde\xbc\x90\x4f\xbb\x81\xd4\x24\xdf\x95\xbd\x19\xfa\x82\x6d\x96\xb4\xaa\x44\xa6\x09\x13\x44\x89\x9b\xf4\xa2\x40\x94\x59\xa6\xd7\xdd\x81\x38\x9b\x39\xaf\x4c\x8c\xbe\x2a\xf0\xa9\xff\xd9\x49\xc2\x97\x7e\x0a\xbe\xf4\x1a\xc0\xa5\xf2\x6a\x08\x32\xdc\x11\x6b\x0b\xc0\x67\x44\x2f\xc9\x3b\x99\x66\x9f\xb0\x45\x07\xe3\xf6\x7b\x12\xfb\x80\x38\xa8\x45\xdb\x79\xb6\x44\xa5\xea\x9e\xcd\xb5\x01\xf5\x66\x82\x7f\xa6\x26\x1d\xe3\xb1\x51\x97\x08\x9e\x81\x5d\x26\xdc\xbb\x51\x84\x7f\xa7\xe9\x66\x69\xe5\x6f\x18\x12\x9f\x9d\x53\x4e\x8e\x81\x01\xac\x6b\xdc\x94\x64\xfa\x48\x2c\xf9\x8b\x1c\x31\xd2\x81\x60\xf9\xce\x7f\x82\x85\x86\x84\xb5\x4c\xaf\xf2\xcb\x54\x09\x39\xdd\x55\x5c\x3e\xb8\xe4\xa5\xa2\xca\x0b\xdd\x16\xa9\x5a\x09\xb9\xa1\x92\xdd\xbb\xe4\xd9\x27\xf1\xe1\xde\x87\xe5\xbd\x1c\x5d\x51\x00\x6c\xc9\xbd\x17\x6f\x9f\x3d\x39\xfa\xb0\xbc\xe7\xc2\x72\x76\xef\x9d\xcc\x97\xbc\x54\x1f\xee\xc5\x8b\xe4\xec\xbf\x4d\xfe\xeb\xbc\xfe\xb0\xbc\xbd\x4f\xf7\xe4\xc3\x74\xfa\xb5\xbc\xc2\xb3\xf2\xde\x94\x7f\xe6\x99\xce\x01\xf6\x0f\x39\x4d\x99\x88\xa2\xb8\x5c\xb8\xd3\xcc\xfe\x78\x21\x96\xbc\xae\xff\x95\xe4\x67\xfa\x3c\xaf\xd8\x3d\x64\xa6\x3e\xdc\x6b\x2a\x2d\x58\x15\x45\xf7\x7e\x54\xba\x7d\xe3\x0f\xd3\x0f\xcb\x71\x13\xb7\x63\xf7\x1e\xad\xa5\xd8\x70\x3f\x43\xc6\xee\xbd\xda\x72\x99\xfa\x61\x4b\x76\xef\xc1\x76\x5b\xf0\xa3\x47\x62\xb3\xdd\x29\x2e\x4d\x54\x33\x1e\x57\xbc\x5c\x0a\x49\xe8\x9a\xdd\x7b\x91\x66\x47\xaf\xde\x1e\xfd\x7a\x34\xff\xb0\xfc\xf0\x38\x3e\xfb\x37\x76\xf3\xc3\x92\x7c\x78\xdc\x14\xb9\x62\xf7\x5e\xaf\xd3\x52\x89\xcd\x7f\xde\x36\xa1\x5b\x53\x11\xf6\xc3\x85\x47\xd1\xbd\x17\xe2\x22\x2f\xf8\x87\x7b\x1f\xae\xbd\x0e\x6c\xd8\xb6\xae\xef\x3d\x28\x97\x52\xe4\xcb\xfa\x9a\x5f\xbc\x7a\x5b\x3f\x2c\xd2\xec\xd3\x43\x2e\xe5\x4d\x0d\xfd\x38\x7a\x91\x97\xb9\xfd\x29\x2e\xf2\xfa\xd9\x13\x2c\xcb\x9b\xad\x2b\x28\xe7\x45\x9a\x99\xa2\x15\xa1\x97\xec\xde\x87\x8b\x47\xf2\xd5\xdb\x0f\x17\x4d\x7d\x17\xec\xde\x75\x5e\xda\x8c\x8a\xd0\x1b\x96\x81\xdf\x62\xe4\x7c\x7e\x46\x76\xe8\xc3\xbd\xf8\xc3\xf2\x6b\x3d\xd6\x5f\x93\x7b\x64\x70\x13\x45\xf1\x0d\x7b\xb9\xd3\x1b\x2d\xbe\xd1\x33\x45\xe8\x4d\x14\xdd\x9c\xb2\xf9\xb7\x00\xdf\x3d\x9c\x83\x4e\x17\x1e\x8c\x1f\xd9\x55\x14\xc5\x45\x5d\x67\x7a\xca\x41\xd8\x73\x53\xd7\x37\x27\xf3\xfb\xd3\xf9\x9c\x10\x7a\xcd\x64\x5d\x8b\x28\x4a\x4f\xd9\x7f\xd1\x27\x3a\xef\x67\xb0\x69\x6f\x3d\x6c\x01\xa2\x49\xfb\x41\xf4\x55\xe3\xed\x85\x5f\x9b\x94\x28\xba\x10\x5b\x9d\xb9\x62\x8a\xa9\xc5\x13\x11\x2b\x92\xdc\xee\xe9\x13\x11\xff\x2a\xf1\xa6\x45\x9f\xc5\x06\xfb\x5c\x32\x85\x96\xae\x83\x8e\xb3\x64\x89\x96\xd7\xfc\xfa\xe8\x32\xd7\x57\x3c\xf0\xdf\x63\xfc\x78\x4c\x8b\xbc\xe4\x6f\xf9\x36\x85\x77\x4d\xe2\xac\xea\x32\x66\xa1\xec\xa0\x49\xd3\xbc\xdc\xee\xd4\x5b\x75\x53\xf0\xea\x4c\x79\x5f\xe7\x4e\x9b\x1e\x33\xe6\xd5\xb6\x48\x6f\x20\xd3\x5b\x34\x30\x25\x83\x7c\x7a\x2d\xd3\xed\x96\x4b\x7f\xb7\xc3\xc3\xc1\x1b\x93\xfb\x91\xf9\x8b\xcd\xf9\x45\xa7\x86\x8b\x73\xec\x17\xea\x4a\x81\xdb\x38\x78\xff\x66\xa3\xa3\xa6\xc8\x89\x8e\x1f\xe9\x42\xd2\x9d\x12\x2b\x91\xed\xaa\x28\x1a\x6e\xa2\x28\xc7\xf6\x4e\x21\x28\x26\xf4\xa7\xb8\x51\x40\x33\xa6\x8f\xb7\x9f\xf8\xcd\x8b\x74\x5b\x25\x67\xe7\x54\x5c\x71\x59\xa4\x37\xf0\x5b\x8f\xd4\x77\xbc\x4c\x66\x10\x7a\x2d\x73\xc5\x93\xe1\x9c\x2e\x79\x91\xea\x73\xe0\x61\xb1\x43\xe3\x16\x1d\x08\xc5\xf3\xa5\xfe\x59\xed\xb6\x5b\xc9\xab\xea\xc9\x32\x57\x95\x0e\xd8\xa6\x95\xe2\xcf\xca\x4c\x6c\xf2\xf2\x52\x07\x64\x3b\xe5\x7f\x56\xbc\xe0\x19\x98\x9d\xf3\xcf\x50\xd8\x52\xa6\x97\x97\xde\xf7\x3a\xbf\x5c\x17\xf9\xe5\x5a\x25\x7a\x68\x33\x41\x3f\xf1\x9b\xb7\xfc\x0f\x50\x52\xa7\xd5\x96\x67\x79\x5a\x3c\x5a\xa7\xb2\x42\xb5\x75\x63\x6c\x05\x2a\x76\x96\xb9\xd9\x01\x6f\x13\x45\xe9\xc9\x7c\x1e\x2a\xb5\x7b\x24\xb7\x70\xa3\x8d\x63\x26\x0d\xb2\x0c\xd9\x13\x7a\x7f\x16\x1e\x2a\xf6\x85\xd4\xe4\x18\x7c\x97\xc7\x6a\x5a\x65\x52\x14\x05\x97\x74\xb4\x11\x7a\x38\xc4\x75\x39\xa2\x3f\x68\x0e\x73\xa7\x97\x57\x2b\xcd\xf2\xa2\xc8\x8a\x3c\xfb\x34\xa2\xa6\x61\x0b\x48\x1a\xb8\xd0\x06\x60\x73\xb4\x4f\x70\x96\x49\xd2\x79\x22\x92\x51\x34\x5c\xe2\x67\x14\x0d\x2b\x19\xbb\xf6\x40\xfa\x87\xb9\xdd\x20\x25\x03\x07\xfa\xcb\x5f\x84\x5c\x3e\x50\xb1\x24\x83\x87\x5c\x27\x16\x19\x2d\xa7\x69\x99\xad\x85\xa4\xe5\x74\xcd\xd3\x25\xd9\xef\xf7\xc4\x53\x20\x50\xe4\xd6\xd4\x5f\xd7\x50\xde\x9e\x0c\xae\xeb\xba\xd5\x15\x03\x1a\xb1\xe1\xe5\x6e\x14\x76\xe0\x13\x36\x6f\x6f\x00\x78\x24\x2d\xd9\x2d\x2f\x97\xc9\xcc\xb3\xbf\xc8\xf5\xf5\xc1\x5a\xec\x89\x5d\xb6\x86\x3d\x7b\x60\x92\x82\x84\x28\x05\x22\x54\xdf\x38\x69\x5c\xb2\x20\x92\x4c\x79\xb9\x64\x63\x90\x92\xeb\xfb\xd9\x3e\xb4\xd0\xf0\x24\xd7\x6a\x5a\xf0\x95\x0a\xfd\x74\x4a\x13\x3a\xe1\xf0\x87\xea\xc2\x95\xd8\x4e\xb8\xfe\xdf\xbd\x5a\x7d\x2d\xc7\xe5\xd7\xe5\xe9\x3f\x67\xb3\x7d\x6b\x48\x94\x6e\x42\xa5\x52\xa9\xfc\x11\xc9\xbd\x29\xcd\x43\x17\x9d\x10\x33\x1f\x32\x5d\xc1\x2e\x5b\xf3\xaa\xd7\x8c\x4f\x35\xf1\x8d\xcb\xa9\x23\x35\x95\xe9\x32\xdf\x55\xbf\x9e\xb0\x39\xf8\x7b\x83\xaf\xf7\x27\x6c\xbe\x8f\x73\x42\x6e\xb3\x82\xa7\xd2\x8e\xa6\xb4\xe0\xda\x6e\x68\x06\xe1\xa0\xde\x42\xb3\x13\x41\x01\x93\x06\xb6\xb0\xe4\x57\x89\x98\x94\x7a\x44\x4f\xd8\x37\xb3\xd9\xa2\xc4\xbd\x46\xe7\x8c\xe5\xad\x06\x83\x7b\x39\xaf\x3c\x18\xbf\x26\xd5\xd9\xec\x7c\xba\x4d\x2f\xf9\xaf\x34\x4c\xa5\xc4\xb6\x9b\xe8\x3d\xe0\xea\xb6\x77\x0e\x24\xd2\x8d\xf3\x87\xb6\xbb\x86\xc2\xf2\xa1\x33\x0c\x76\x73\x7f\x81\xbc\x5c\xfa\xe5\x35\x4a\x8b\x7e\x31\x03\x74\x42\xa0\x37\x9b\xa2\x92\x58\xf9\x66\x09\x9d\x8c\xa2\x61\x89\xf5\x44\x91\x1d\xdb\x49\x39\x85\xe1\x3c\xf9\x66\x36\x73\x4e\x56\xc0\xf8\x43\xc8\x65\xa5\xc9\x56\xd8\x4e\x3a\xd2\xfd\x1e\x91\x81\x60\xc3\x72\xaa\x07\xbe\xae\xab\xb8\xa4\xf8\x1b\x5f\x15\x7f\xe7\x71\x4a\x53\x92\x98\x04\x9d\x54\x26\x69\xb0\xe7\x53\x92\x98\xac\x2b\x1e\xa7\x70\xd6\xd0\x19\xa1\xcf\x2d\x1d\x70\xa1\xe3\x39\x9d\x11\x42\x00\xc0\x4c\xbd\x45\xda\x2c\xca\x58\x58\x3a\x21\x90\x4e\x50\xee\xce\x94\x87\x79\x2c\xc9\x3e\x8f\x0f\x8e\x6c\xa6\xcf\xfa\x62\x44\xf3\x4e\x34\xfe\x6a\x4f\xa3\x8d\x9f\x66\x45\xce\x4b\xf5\x3d\xd7\xc4\x3f\x8a\xe2\x0d\x10\x93\x26\x1a\x7f\xbc\x13\x5b\x42\xaf\x7a\xa3\x9e\xeb\x9d\xab\xef\xb0\x3f\xe6\x31\x6f\x6a\xe3\xa4\xaf\xa9\x40\xb3\xaf\xd7\x9c\x17\x2d\x1a\xf6\xd1\xd1\xb0\x76\x96\xc7\xaf\x5e\xbc\xd0\xb9\xde\x76\xba\xd1\x93\xcd\x1c\xe1\x87\x3a\x6d\x4f\x78\xd7\x29\xd6\x0e\xd3\xbd\x61\x88\x66\x30\xd5\x67\xa4\x15\xb4\x54\x9a\xa4\xea\x3b\x6c\x2f\xd5\xfe\x2a\x47\xf3\xbd\xab\x43\x09\xe2\xbe\x37\x76\xef\x94\x19\x5a\x84\x5f\x73\x94\xb4\xe4\x57\x8f\xcd\xe7\x53\x99\xa2\x5f\x10\x32\x00\x7f\xa7\xa0\x67\xe9\x0e\x24\x68\xf0\xa3\x9d\xac\x84\xac\xeb\xb8\x2f\x98\x7d\x12\xf1\x68\x99\x5f\x8d\x90\x3b\x1b\x79\xcc\x4d\x06\x09\x2a\x9f\xdf\xd1\xf9\x4c\xf0\xc8\xaf\x06\x58\xba\x6d\x9a\xf1\x69\x5e\xea\x0b\x26\xfa\xcc\xed\xad\xd0\xcb\x85\x25\x3d\xce\xaf\x08\x19\xfc\x2e\xfa\x53\x97\xc6\xf6\x89\xc2\x80\x92\x3d\x45\x2a\xe9\x0f\x69\xdc\xc1\x61\xd5\x77\xa4\x21\x37\x70\x17\x3e\x5f\x53\xd7\x8e\xfa\x4e\xd6\xf2\x64\x3e\x9b\x39\x3e\x18\xa4\x61\x50\x09\x68\x45\xdb\x69\x6a\x1f\xef\x66\x4e\x74\x12\x10\x05\x82\xad\xfb\x4a\x2f\x16\xae\x1e\xa7\x2a\x8d\x47\xba\x9e\x11\xe5\xe8\x1d\xd2\xee\x63\x5c\x3d\x7e\x7a\xbe\x5a\xf1\x4c\x3d\x28\x0a\x71\xcd\x97\x6c\x94\x89\xed\xcd\x0b\xa0\xad\x3d\xe5\xca\xf4\xf2\xd9\x26\xbd\xe4\x9a\xf1\xb0\x4b\x45\xcf\x5b\xbe\xb9\x34\xf3\x86\x93\xb7\x15\x68\x76\x9f\x1c\xad\xf2\xcf\x7c\x79\x7c\xa4\xc9\x63\x72\x34\x3b\x3e\x52\x62\xab\xff\x8e\xc8\x40\x4e\x2b\x99\xb1\x91\xae\x23\xc9\x75\xa1\xf7\x2e\xf3\xd5\xf1\x45\x5a\xf1\x7f\xfd\x93\xbe\x99\x15\xdf\xbd\x7a\x5c\xac\x1f\xfc\xf8\xe0\xe1\x03\xfd\xef\xd1\xf7\xdf\x3e\x7c\xf0\xe4\x87\x07\x0f\x9e\x3c\x78\x0e\x01\x3a\xfc\xc9\x83\x07\x0f\x9e\x3d\x7a\xf7\xe0\xc9\x83\x57\xd7\x8c\x8d\x68\x06\x66\x83\xd7\xf9\x52\xad\x99\x9c\xae\x81\x6e\xb0\xb9\x37\xd1\x76\x43\xe9\xff\xcb\x25\x88\x3c\x62\x49\xa8\x9c\x7e\xd4\xc7\x8f\x9c\x8a\xd5\x4a\xf3\x1d\x9a\xa2\xdc\xd1\xfb\x58\xd2\x99\x26\x9e\x59\x14\xc9\xe9\x36\x95\xbc\x04\x09\xae\x41\x71\xb3\xa5\xee\xf7\x04\x09\x00\x5d\x4a\xb1\x4d\x80\xb9\x5b\x49\x42\x0b\x9e\x5e\xf1\xfe\xad\xb8\x95\x31\x27\x7b\xc7\xc1\x1a\x3e\xf4\x92\xab\xa7\x39\x2f\x96\x31\xd1\x6c\x66\x41\x47\x9f\xf8\xcd\x6e\xdb\xa2\x36\x2f\x8c\x87\x13\x8f\xe4\x60\x4a\x8f\x0b\x7d\x27\xfd\x08\xe0\xd2\x4d\xcc\xeb\x26\x06\xa8\xfa\x88\x7e\x16\xf1\x03\xd0\xd0\x31\xc1\x17\xc5\x4e\x42\xe8\x23\x08\xdd\x9b\x7b\x84\x47\xc2\xf2\x55\xfc\x50\xd8\x65\xf9\x5d\x1e\xa3\x98\x83\x8e\x24\xaf\xf2\x3f\x5b\x47\x35\xf2\x5d\x88\xfc\x71\x80\xd1\xe3\xa8\xa4\xff\x93\x88\x53\xa9\x39\x70\xd8\x22\xa6\x67\xb6\x68\x6c\x94\x9f\xeb\x27\xdd\x40\x48\xf6\x10\xde\xf9\x40\x72\xb2\xd7\x87\x94\xf2\x6f\x3e\xd9\x4e\xbe\xda\x4e\x57\x42\x66\x1c\x11\xf4\xd8\x70\x46\xaf\x73\x54\xe9\x92\x9d\x7b\x54\x5d\x17\xd3\x75\x5a\x3d\xc5\x03\x6f\xe1\xb5\x18\x87\x09\x4b\xbe\x3f\x23\xc9\x23\x6b\x62\xfd\x9b\x24\xbf\xc9\xae\x17\x9e\x28\xfa\x4d\x9e\xed\xce\x0d\xbe\xf8\xd9\xee\x9c\xaa\x92\x0c\xfe\x70\x77\xc0\x55\x5e\xe6\xd5\xfa\x59\x89\x10\x36\xcd\x97\xb1\xb6\xb6\xf7\x99\x35\x9b\x1d\xaf\x4f\x52\xab\x32\x73\x3c\x1e\xaf\x49\x5a\x9e\xad\xcd\x95\x74\xf0\xbd\xed\x6d\xa5\x8b\x09\x2f\x96\x23\x7d\xb1\xde\xe4\x7f\xf2\x82\x5f\xe6\x17\x79\x91\xab\x9b\x11\x63\x97\x5c\x19\x41\xca\x12\x2e\xb7\x71\x0e\xd9\x34\x4d\x9c\x6a\xde\xfe\x0d\x2f\x97\x5c\xe2\xcd\xd4\x45\x4d\x2b\x9d\x34\x8c\x67\x23\x3d\x74\x23\x12\xa8\x95\xfa\x86\xdd\x8d\xed\x13\x2c\x6f\x56\xd2\xdc\x1c\x70\x17\xa9\x7c\x9a\xeb\x93\xf5\x8e\xb3\xc0\xa5\x9c\x80\x3a\xbb\x1c\x91\x6e\x76\xbd\x59\x1f\x28\x25\xf3\x8b\x9d\xe2\xf1\x28\xdb\x4c\x4a\xa1\x26\x70\x49\x29\xd5\x88\x8e\x94\xdc\x71\xc8\x77\xb9\x53\x8a\x7f\xb9\x4e\x4c\xe6\x57\xe8\x67\xfc\xcb\xb5\x99\x41\xbb\xeb\xa0\x13\x4b\x4c\x5a\x59\x7a\xdd\x4d\xdf\x26\xb0\x92\x17\xa9\xe6\x1e\x8f\x8f\xfe\x9c\x80\xdd\x7d\x72\x34\x87\x32\xdc\xa1\xf6\xe5\x93\x15\xd2\x6f\x78\x5a\xed\x24\xbf\x23\xb5\x49\xe1\x3a\xf3\xe2\x6f\xe7\x80\xa3\xb9\x49\x7f\xe6\x6a\x0d\x4b\x6c\x8d\x80\xdf\x99\x66\x1c\xcf\xef\x18\x0a\xb1\x53\x3a\x55\x72\x54\x8a\x12\x6b\xd7\x94\xd9\x9b\xe3\x33\xbf\x0d\xae\x65\xe7\x41\xe3\x75\x70\x35\x22\x87\xeb\xc1\xa9\x02\x37\x26\x41\x97\x74\x55\x61\x51\x90\xa8\x49\xfe\x0b\x9c\x50\xc6\xed\x26\x1e\x53\x4f\x35\x2d\x6a\x2f\xc2\x76\xc5\xe9\x45\x25\x0a\x40\x79\xc6\x4c\xc9\xd1\x68\x2c\xc4\x78\xb4\xfd\x7c\x7c\x04\xa7\x5e\x72\x34\xdf\x7e\x3e\xf6\x96\x68\xf5\xc5\x65\x5d\xb9\xc9\xf9\x0e\xbe\x6d\xb3\x2c\x97\x1b\x74\x0d\x5a\xdf\x6a\x73\x53\xd7\x79\xcf\x4e\xf5\xf6\x67\x67\xab\xa8\xf4\x02\xbc\x92\x8e\xe8\x68\x82\x6b\xd6\x9c\xcf\x61\x9d\xe1\xe6\x6e\xed\x3e\xaf\xf4\xa0\xfa\x11\x41\xb1\xca\xbf\x81\x5e\x99\x06\x1a\x7a\xf5\x27\xfa\x4f\x9d\xcc\x83\xa6\x41\xd4\x36\x5d\x2e\xf3\xf2\xf2\x0d\x70\x0e\x33\x42\xab\xba\x96\x51\xb4\xa9\xeb\xd8\x4b\x0a\x8c\x5c\x7a\x51\x70\xc0\xdb\x44\x43\x65\x8f\xa3\x58\x04\x5f\xb1\xeb\x15\x49\xb8\xf7\xa1\xbb\x7b\x95\xf3\xeb\xa7\x52\x6c\x18\xfe\x7c\x27\x98\xa6\xf9\xb2\x52\x34\x9f\x4a\xbe\x05\xf0\xd3\x9f\x9b\x34\x7e\x50\x90\x56\x67\x46\x1b\x19\x09\x64\x18\x93\xd8\x99\xe4\x9f\x11\x3a\xd8\x6c\xae\xa5\x0d\xd7\xb9\x5e\x01\xc3\xc3\x66\x7a\x09\xa4\x95\xd2\xa7\x04\x5e\xb7\x58\x13\x80\xab\x75\x36\xc8\x0d\x20\xe3\xf3\xbc\xe4\x28\x3a\xae\x6c\x51\x25\xec\x87\x87\xa9\x59\xd9\xf9\xf4\x22\x95\xae\x9c\x0b\x1b\x3c\xf3\x49\x75\xf5\xa8\xc8\xb7\x5b\x7d\x25\x9f\x9b\xf5\xf7\x72\xb7\xb1\xd9\xcd\xe7\xb3\xb2\xe4\xb2\x15\x06\x92\x3e\x5b\x6f\x5a\xe4\x97\xe5\x2f\xf9\xf2\x92\xab\x0a\x0b\xca\xd2\x6c\xcd\x97\x3a\x91\xcd\x87\x21\x9a\x19\x76\x2d\xc2\xa0\xd7\x38\xd7\xdf\xdb\xc2\x36\xe9\x67\xdd\xb5\xd6\xe7\x73\x63\x17\xdd\x84\x20\x0e\x9e\x69\x38\x5c\x18\x1f\xff\xca\xec\xaf\xf7\xf6\x17\x80\x97\xfd\x1a\x7c\xbd\x77\x7b\x6b\x9d\xaf\x14\xe6\xaf\x78\xf1\x54\x48\xf3\xc2\xfd\x82\x97\x3b\xd7\xb5\x96\x98\x8b\x96\x53\xd0\xf9\xcb\x49\x60\x5d\x41\x6e\xe1\xfe\x0e\x72\x6d\xf6\xca\x7a\x63\x8f\xb9\x15\x9f\xd3\x26\xfa\x15\x84\x10\xfa\x22\x00\x00\x78\xd1\x94\x91\x83\x2d\x8e\x2f\x92\x32\x57\x97\x07\x2b\xc0\x06\x8e\xfd\x4f\x84\x33\xa5\x1c\x37\x4e\x65\x62\xf5\x4f\x03\x74\x0a\x32\x04\x5d\xec\x4a\x8a\x52\xe5\x5c\x32\xf3\x09\x8b\x56\x68\xb6\x53\xf3\x74\xd4\x5e\x8f\x8c\xbc\x79\x3c\xa6\x1c\xf9\xb3\x28\xe2\x32\x68\xea\xeb\x46\xf2\xfa\x52\x35\xb7\x21\x02\x46\xf6\xa6\xbf\x01\xb3\x43\x4b\x26\xa3\x08\x5d\x91\xa6\x9f\xe3\x6f\xbd\x9b\x40\x4b\xc6\x00\x8b\xe5\xde\x33\xbf\xd4\xc9\x37\x4e\x41\xa1\x25\xbf\xfb\xbe\x34\x42\x93\xdc\x5d\xda\x66\x46\xa6\x36\x43\x9b\xec\x6b\x5c\x92\x24\x34\xc7\x71\xe1\xbe\x59\x8e\x0b\x3c\x4b\xcf\x0d\x5d\x8d\xa2\x58\x8c\x59\x4f\x44\xa3\x2e\xbf\x10\xe3\x18\xfa\x95\xf1\xbc\x88\xf3\xa9\x07\xfa\x7d\xaf\x24\x75\x3d\x27\x5f\xab\x44\x8c\xd5\x3e\x30\xa3\xf0\xe4\xd6\x22\xa3\x92\xe9\x01\x1d\xa8\x9e\x79\xc7\x64\x12\xa2\x87\x8c\xbb\x76\xbd\xcd\xed\x05\x23\x30\xb3\x80\x05\x74\xe8\xa5\x82\xdd\x11\x67\x51\x5f\xe3\x7b\x1f\xaa\xaf\xb3\xcd\xa4\x9a\x7c\x78\x3b\xbe\x77\x49\x47\x23\x32\x6e\xa6\x54\xad\xb9\x9f\x34\xfe\xef\xf5\x87\x8a\x7c\xa8\xbe\xd6\x09\x8f\x20\xd7\x88\xd0\x57\x2a\x58\x2b\x9f\x74\xab\xde\xc4\x9c\x50\x58\x44\xf4\xc0\x2d\xe3\x2b\x74\x34\x7e\xdf\x07\x8b\x79\xd3\x23\xe0\xb7\x27\x48\xb0\xd4\x4c\xd8\xe0\x8d\x88\x15\x09\x0c\x25\xca\x13\xd9\xb0\xe6\x0d\xa4\xd1\x59\x09\x88\x0c\xc1\xf1\xf0\xa5\xf3\xf9\x68\x34\xce\x09\x19\xb4\x19\x93\x12\x09\xf0\x08\x4d\x87\x42\x01\x88\x39\xc8\x05\x15\xe6\x54\xc3\x1b\x71\x2b\x95\x25\xb7\x7a\xb1\x68\x16\x62\x44\xf6\xca\xa4\x77\x4f\x59\x8b\xd1\x28\x19\x01\x0f\x45\x7f\x0f\x86\xf7\xf7\x3b\xc6\xc8\xdc\xa2\xa1\xf0\x81\xb7\xe3\x00\xde\x0e\x2b\xd8\xa4\xf2\x32\x2f\x41\xa0\xa5\xa0\xee\xa6\xe4\xc7\x46\x14\x3e\x63\x6e\xdd\x35\x9b\xcc\x19\xa7\xc1\x3c\x78\x8b\x9e\x96\x8c\x1f\x2b\xf6\xac\x8c\x4b\x72\x4c\x6e\x4b\x16\xe7\x70\x3e\x96\xcb\x18\xe0\xe8\x08\x60\xc2\xa2\xd8\x53\xea\xbd\x05\x9f\xd9\x7a\x92\x4f\x95\x98\x66\x6b\x83\x5d\xad\xcb\x78\x6e\xca\x30\xb7\x15\xaf\x90\x81\x9c\xb0\xd2\xaf\x75\xe2\xca\xd1\x85\xc6\x25\x08\xb0\xa1\x12\xd2\x4a\x86\x95\x74\xed\xe3\x5e\xf6\x8c\x23\x35\x94\x72\xa0\xdc\x91\xf4\x24\x8f\x25\x95\x48\x3a\xf5\x35\x31\x3c\x9b\x1e\xc7\x2e\xc4\x8b\x74\xc7\xd4\x8c\xca\x03\x5b\x5c\x32\x3d\xda\x03\x79\xda\x2a\x11\x84\xe7\x61\x1d\xb2\x29\x98\xf1\x90\x00\x3c\x6b\xfa\x70\x21\x62\xee\xb6\xca\xa1\x25\x4b\x8e\x27\x73\x00\x6d\xe5\x76\x1d\xea\xe0\x85\xcb\xc8\xdc\x2f\xeb\x34\xfd\xec\x50\x51\xe7\x24\x51\xa7\x93\x39\xe0\x58\x7b\x65\xc1\x8e\xe8\x96\xe6\x5c\x98\x7b\x41\x08\x4a\xa6\xe8\xdc\xef\xd1\xf3\xfe\x59\x51\x7d\x2b\x9c\x96\xe8\xeb\x5a\x8a\x5d\xb9\xc4\x73\xc1\x2c\xdb\xf1\xce\x3f\x4e\x2c\xed\xbe\xf5\x85\xda\xc9\x01\x61\x37\xd5\xbc\x99\x4b\xd2\x90\x4d\x2f\x05\xe6\x83\x26\x24\x1d\xc1\x37\xb6\xcc\x3b\xda\xba\x15\x61\x12\x5d\x8f\x4d\x10\x56\x83\xf1\x17\xa9\xd4\xbb\x34\x69\x88\x1e\x08\xf4\x90\xc2\x2c\x64\x32\xa3\x4b\x91\x99\x86\x96\xa6\x4d\xf6\x73\xbc\xd4\x24\x79\xac\x1a\x66\x90\x86\x7c\x62\xa2\x5a\x8c\x23\xc5\xf1\xc5\x48\x5f\xa9\xff\x69\x60\xf6\x9e\x6d\xdc\x0b\x3d\x7c\x5f\x71\xa9\xfa\xae\x76\xde\x1d\x6a\x93\x97\x93\xe6\x86\xa4\x2f\x75\xfe\x92\xba\x72\x5c\xe9\xc8\x3d\xe7\xaf\x85\xcc\xff\xfc\x42\xa9\xf6\x16\x36\x9f\xcd\xfe\x71\x7c\xa4\xeb\x70\x21\xdd\x4a\xd6\x5e\x25\x03\x1e\x97\x84\x82\xfb\xc2\xef\xf2\xb8\xec\x7f\x13\x28\x5b\xef\x1f\x2a\x2e\x9b\xd7\x01\x0a\x4a\x94\x79\x96\x16\x23\x2b\x15\xcb\xfb\x8b\xc9\xfd\x09\xd5\xa5\xe4\xfe\xeb\xc8\x08\xfa\x29\x4a\x65\x0b\xc2\x11\x5e\xf3\xec\x13\x5f\xfe\xc6\xa5\x40\x36\x7a\x38\x6f\xae\x53\xcd\xf0\x58\x6a\x9e\x97\x86\xb5\x76\xd3\xd1\xc4\x60\xfe\xd1\xfc\xdf\x70\xc2\x78\xa6\x37\x3e\x4a\xda\x4f\x21\x0f\xd1\x5c\x12\x82\xb3\xad\x09\x9e\xc2\x8b\x66\x4c\x3a\x0c\x1d\x44\xa6\xcb\xe5\x23\xcd\x61\x44\xd1\x73\x5f\x98\x6f\x1f\x60\xee\xcc\x43\xfa\xcb\x34\xaa\x20\x2e\x40\x33\xd9\xc5\x59\xb3\x2b\x5c\x84\xd1\x0c\x09\x64\xb3\x5d\x06\x28\x78\x9c\x50\x7d\x35\xe2\xed\x16\x9f\x8e\x02\x7d\x82\x40\x46\x6a\x58\x67\xa3\x7e\x71\x50\xb3\x81\xb7\x34\x1b\xcc\xcb\xdd\x9e\x50\x7c\x0e\x55\x7f\x4d\x86\xb5\xf7\x51\xb9\x61\x3b\xfa\xab\x87\x31\xb9\xc0\x67\x38\x92\x6c\xec\xdb\x17\xba\x91\xba\x73\x8e\x9e\xfe\xfd\x39\x6a\x59\xfb\x90\x5b\x44\x34\xd5\x64\xdb\x6a\x04\x35\x05\xd8\xeb\x27\xd8\xd2\x7b\x81\xb8\x64\x07\xdf\x1b\x95\xde\xc6\x77\xef\x71\x7e\xf2\xcf\x28\x92\xc3\x9e\x32\xea\xba\x1c\xf6\x95\x72\x9c\x8f\xc7\xa4\x37\x87\x3e\xe5\xfa\xae\x26\x51\xf4\x9b\x66\x4b\x75\xed\xd0\x6c\xfa\xd7\x9b\xdc\x31\xf3\x69\xf5\x18\x90\xb6\xbd\x61\xc3\x5b\x3b\x00\xda\x06\x4c\x58\x20\xeb\x88\x65\x73\x4f\x2f\xa7\x12\xd8\x2e\xe0\xcc\x68\x6f\xa6\x87\x42\x29\xb1\x31\xb9\xcc\xe6\x2f\xa7\x17\x10\xea\xf2\xf9\x52\x22\x93\xfd\x42\xc8\x25\x97\x26\xb7\xcd\xa0\xd3\x1f\x55\xa2\xc8\x97\x88\xef\x8d\x4f\x2a\x23\x6a\xda\x11\x45\x36\xe1\x22\x96\x5d\x59\x6f\xc0\xb1\x8e\x2e\x0a\x91\x7d\x82\x46\xf7\xa6\x5b\x87\x4d\x75\x3d\xec\x4d\x7c\xed\x8f\x06\xb2\xc8\xc9\x17\x1b\xa0\x9b\x8d\x85\xfb\x53\x9f\x89\x2b\x2e\xf1\xd4\x7c\xc9\x3f\xab\x77\xe2\xad\x2d\xc5\x4f\xe5\x9f\xad\xb1\x6c\x49\x99\x0f\xf4\xb3\x27\xd1\x81\x4e\xf6\xa4\xc4\x1e\x5a\xbe\x06\x66\xdf\xf5\xf3\xae\xda\x47\x2d\x23\xb2\x06\xe2\x49\x5a\x95\x08\x39\x55\x62\xbb\x70\x77\x6f\xcd\x84\x2a\xb1\x25\x09\xef\x79\xbf\x1f\x18\x1e\x6a\x55\x08\xcd\x86\x4f\x0a\xe5\x76\x72\xee\x97\x68\x56\x81\xfd\x91\x94\x63\xde\xcf\x1c\x09\xf6\x22\x07\x34\x58\x9a\xe2\xaf\xdc\x2a\x4c\xc9\x29\x2f\xab\x9d\x74\xf8\x4b\xf6\xdb\xbb\x1f\x14\x4d\xa0\xe1\xe6\x07\xd5\x89\x58\xc4\x82\x55\xb6\xb8\xd7\x79\xfc\x44\xff\xad\x08\x39\xd0\x04\x42\x12\xec\x7b\x5e\xc6\xa0\x6b\x98\x56\x4a\x33\xcf\x31\x21\xa7\x2c\x05\x57\x8a\x41\x49\x05\x21\x93\x03\x25\xd1\x94\x15\x16\x17\xe1\x56\x37\x33\x11\x54\x89\xc4\x0d\x6d\x4a\xc5\x78\xee\x9b\x92\x7d\x75\x88\x7d\xd5\xdc\x1e\xbe\x18\xfb\x82\xb3\xba\x6e\x18\x5b\xb8\x61\xc0\xc5\xf4\xc0\xba\xf4\x50\x08\xd9\x77\xb1\x22\x93\x5e\xa5\x8b\x31\xf2\xc1\x1e\x9f\x91\x1f\xe0\x9e\x05\x2b\x71\x7d\xa2\x88\x44\x06\xa2\x91\x55\x3c\x94\x20\xfd\xc8\x97\x4b\x5e\xea\x73\xac\xa7\x45\x51\x04\x69\x2e\xcd\x47\xec\x7d\x99\x65\x0b\x0a\x48\x82\x18\xb7\x6e\x10\x0f\xfd\x4f\x2f\x0a\x80\xf3\x6b\xe4\x34\x88\xa4\x58\x35\x48\x8a\x63\x52\x9d\x15\xe7\x41\x39\xfb\x03\xad\x88\x55\x4b\xcc\x0c\xc9\xcb\x71\x6e\x2e\xd7\xcd\xfc\xfc\x61\x0d\xec\xc2\xa3\xc1\x5c\x5e\xba\x0a\x5f\x28\xac\xf9\xc5\x13\xea\x19\xd1\xef\x58\x01\x6d\x46\x48\x96\x46\x19\x31\xf0\x53\x5f\x06\x82\x53\x07\xd5\x6c\x1f\x5e\xfa\x65\x11\x0d\xb7\x2b\x49\xf7\x51\x04\x6f\x5f\x47\xdd\x17\x32\x5e\xa8\x11\x21\x00\x01\xdd\x2c\xa4\x60\xba\x53\x96\xfb\xdf\x13\xe1\x0c\x03\x3d\xc9\x45\x40\x9c\x80\xa0\x76\xe5\xc1\x6e\xf5\x0b\x1a\x64\xf5\x0b\x4f\xc9\x78\xde\x64\xb6\x67\x5b\xa7\xac\x71\x4a\xcb\x96\x74\xb9\x9b\x68\x61\x47\x34\x99\xcc\xe9\xc1\xc6\x86\x95\xe1\xc2\xfe\x5d\x9f\xf3\xc3\xd9\xde\x79\xc5\x0d\x4d\x3e\x9d\xd5\x12\x9a\x02\xc6\xfe\x45\xf6\xa9\x90\x9b\x54\x57\x12\xeb\x1d\x05\x43\xda\x08\xdf\xfd\x0b\xeb\x77\x01\x1c\xb9\xdb\x90\x97\x5c\x3d\xd4\xd7\xd2\xbc\xbc\x7c\x04\x14\xe5\x0d\xcf\x54\x4c\xac\x62\x63\x65\x9c\x30\x1c\x4e\xd4\xd4\xf0\x3e\x24\xf3\xcd\x62\x43\x96\x3f\xe7\xd7\x5b\x21\x95\xc5\xf8\x32\x3e\x89\xd8\xcf\x71\x89\x42\x60\x6a\xbd\xc6\xf0\x65\xae\x84\x7c\x56\x7d\x0f\x5b\x9a\x0d\x4b\x47\xf3\xfc\x65\x02\x49\x4d\x84\xe3\x2e\x7a\x29\xbd\x9f\xd2\xce\x70\xdf\x45\x56\x19\x07\x30\x8f\xb1\xd9\x98\x74\xad\x9c\x33\x15\xd0\x05\xb0\xe8\x8e\xcb\x7c\x53\x31\xc5\x5d\x24\xa0\x72\x57\xec\xec\x7c\xdf\xb6\x4d\xed\xb2\x5e\x28\xba\x01\x22\x1b\xf6\xd5\xb9\x25\x07\x79\xa4\xf1\xa2\xac\xb0\xe2\x28\x52\x76\xcc\xe0\x20\x3a\x65\xd2\x3d\x0e\xf9\x71\x4a\x9c\x98\x98\x77\xc2\xe9\xe2\xcb\xee\xbb\x4c\x5d\xf7\x04\x9e\xba\xac\x44\x9f\x83\xc1\x53\x91\x89\x8a\xa2\x19\x63\x80\xcd\xd5\x50\xa1\x3f\xc0\xd8\x21\xc6\x66\x2b\x6f\x6c\x9c\x03\x16\x43\x8c\x4a\x58\x50\xfa\xec\xb5\x7b\x33\xec\xd4\xa4\x21\x77\x76\xbd\xbc\x00\x39\x20\x2d\xad\x64\x2b\x65\xee\xd0\xcc\xa9\xdf\xed\xf1\xa1\xbc\x9a\xa9\xb5\x23\x75\x22\xa2\x48\x4c\xbc\xef\xfb\x33\x3c\x68\x6d\x7b\x4c\x3d\xb4\x49\xa2\x19\x6f\x33\x28\xa7\xa9\x1e\x15\xfc\x3d\x49\x31\x6f\xd0\x1e\x37\x7a\x84\x7e\x86\x72\x7f\xb2\xef\x00\x42\xb7\xfc\xa1\xfd\x4a\xcd\xc8\x14\x4c\x0c\xbd\x79\xac\xeb\x74\xe8\x66\x40\x4f\x50\xf8\xe0\x36\x6c\xf4\xfd\x30\xc0\x4f\x02\xcb\xd5\x4b\x01\xdf\xc7\x71\x1b\x71\xbb\xbd\x37\x67\x8c\x95\x50\xa1\x83\x85\x50\xa7\x26\x04\x9a\x70\x62\x3e\x74\xf3\x16\x31\xfe\x66\xbf\x59\xe8\x42\xda\x44\x32\x45\x92\xb8\xf9\x3c\x55\x8b\x30\x71\x13\x45\xac\xcc\x0e\x83\x48\xd2\x44\x9d\x28\xbd\x64\x31\x9f\x69\x16\x4a\xe4\x4a\xbc\x2d\x92\xb0\x46\x6a\x1b\x7a\x22\x17\x61\x2e\x53\x03\xd4\x6d\x13\x51\x49\x6c\x5d\xef\xc4\xa9\x3c\x50\xd3\x8c\x42\x5d\x92\x10\x42\x06\x36\x35\x93\xa0\xa9\x85\x8e\xb4\xfd\x57\x51\xe4\xcd\xcc\xf9\xeb\x2f\x99\xe6\x52\x06\x6f\xfd\x56\x0d\x06\x54\xc8\x9a\xfc\x40\xfe\x8d\xdb\x3e\xd8\x53\xb0\xe3\x0b\xd8\x63\xbb\x28\x6a\xf6\xfe\xa1\xbd\xf8\x3f\xbf\xbf\x43\x1e\x22\x63\x2f\x45\xec\xde\x8e\x76\xa7\xff\x04\x35\xb9\x50\x87\xc7\xb1\xf6\x46\x63\xe2\x0b\x4b\x8b\xe6\xac\x97\x79\xd1\xfc\x9c\x2d\x19\x00\xb7\x1b\x3e\xa0\x51\xf8\x2f\x62\x0f\x78\xb7\xe4\x9f\xd5\xdb\xfc\xa2\xc8\xcb\x4b\xe7\x07\x32\x8a\xae\x34\xfb\xe9\xa9\x67\xea\x0b\xe1\x2f\x6b\xce\x0b\xe3\xd4\x81\xa9\x45\xfb\xb1\x02\x5b\x9e\xa8\x43\x1a\x79\x0a\x50\xfa\xad\x41\x88\x59\x17\x34\xf3\xb6\x00\x5d\xb2\xd9\xf1\xf2\xc4\x39\xda\x59\x5a\xaf\x06\x6b\xb6\x3b\x5b\x02\x62\xdc\xda\xf2\xa2\xc7\x16\xdf\x75\x0d\x86\xe6\x51\x84\x7f\xbd\xca\x19\x13\xc8\x2c\x1f\xa7\x43\x86\xb1\xc7\x24\x65\x45\x9c\x22\x79\x58\xb1\xdc\xde\x6c\x54\x14\xa9\x13\x96\xe9\x42\x9a\xb1\x1c\xac\x8d\x9b\xd8\x2a\x8a\xe2\x0b\x11\xbb\x4f\x3a\x42\x76\x6b\x44\x40\xf4\x1d\xaf\xd8\x70\x4e\xa8\xe4\x31\xa7\x6b\x9a\xe9\xc5\x4d\x57\x51\x14\xbf\xd1\x59\x9a\xe2\x08\xf5\xbf\x02\xb6\xef\x90\x45\xba\xcf\x71\x66\x7a\xcb\xd0\xd4\x74\xc4\x9f\xb5\xbd\xc3\x91\xde\xb2\x5d\xd3\x88\x81\x08\xa5\x5c\x5b\x9a\x92\x7d\x36\x66\x6b\x38\x25\xf6\x38\x30\x76\x40\xf6\x7a\x53\x76\x57\xb4\x39\x6e\x08\xfd\xc2\x9a\x1d\xe9\x8d\x1b\xec\x21\x69\x66\x37\x8a\xf4\xd2\x1f\xea\xb1\xcd\x0c\x87\x61\xc5\xa9\x99\x53\x60\x7f\x23\x62\xe9\xe9\x00\xe3\xb7\xaf\x80\x44\xdc\xed\xb9\x0a\xaf\xd8\xa1\x6c\xa4\x91\x83\xce\x68\x81\xed\x0d\x75\x2a\x5a\x14\x9e\xb6\x08\x7c\x8b\xbe\xe3\x1b\xf9\x3f\x67\x33\x38\xa4\x0e\xe8\x5e\x0c\x67\x0d\x4f\xf2\x9f\x36\x80\xa4\x72\x87\x25\x2d\xd9\x70\x76\x1c\x97\x87\xc5\x51\xaa\xcd\x1d\x0d\x91\x3d\xaa\xeb\x38\xbc\xd3\x83\x75\xce\xad\x12\xdb\xe6\x82\x7b\xf8\xd5\x63\xb2\x02\x16\x0b\xef\xfe\x7b\xd2\x9c\xe9\xec\x67\x4f\x9d\xd9\x90\x58\x42\x87\x71\x9b\x0f\x6a\xa8\xc0\x21\x7e\x28\x4c\xa1\x89\x1f\x89\x22\x64\xcf\x8e\xd1\xc5\xe3\x6f\x9a\xf6\x22\xaf\xf2\x5c\xff\xe4\xd0\xa6\x87\x60\x83\x43\x7f\x45\xd8\x41\x7d\x93\xba\x2c\xd3\x22\xe6\x74\x84\x43\x3d\x0a\x65\x97\xee\x60\xf2\x2a\x6c\xeb\xe8\xf8\x44\xcb\x9c\x2d\x07\x52\xeb\xe3\x37\xf6\xeb\xb4\x13\x65\x9d\x8a\xf2\x9e\xaa\x69\xa7\xab\xf4\x70\x5b\x7a\x46\xee\x40\xea\x77\xa2\x3b\x86\xcd\xa2\xfa\xb1\x0d\xbd\xf7\xde\x59\x06\xfc\x80\x47\x29\x8c\x2f\xfd\x0f\x7c\x98\x67\x99\xd6\x30\x97\x38\xcc\x25\x81\x37\xcc\x32\xaf\xd6\x01\xc0\xda\xaf\x58\xc5\x81\xa7\xe2\xe6\x71\x61\xea\xde\x9a\xf0\x66\xd5\x64\xe8\x91\x34\x2a\xb0\xa0\x38\x98\xa3\x77\x3b\xfb\xe9\x7b\x04\xaf\xe6\x41\x2b\x7c\xaf\xfe\xad\x0d\x9a\xea\x0b\x5c\x2c\xbd\x72\x7a\xe5\x14\xb5\x03\x94\xcf\x95\x35\x5e\x9e\x73\x5a\x99\x3d\x7b\x56\x22\x40\x69\xe5\x64\x1f\x68\x4d\x90\x9e\xfc\xdb\x3a\x89\x35\x08\x27\xae\xe8\x71\x10\x60\xa4\xdb\x39\x2b\x26\x92\x4a\xe3\x7b\xc1\xb8\x92\x36\x09\x0f\x5c\xfc\x06\x39\xdb\x19\x01\xdb\x64\xa7\x87\x71\x8f\x3c\x04\x12\x0c\x33\x54\x13\xf0\x01\x9e\x9f\xdc\x07\x87\xa4\x2f\xc1\xc5\x3e\x8d\xb3\xd3\xe9\x6c\x36\xaf\xeb\xec\x64\xa2\x7f\xe8\x6b\xc3\xdb\x3c\xc6\x8c\x7a\xaf\x71\x6e\x3e\x8c\x2b\x67\x45\x9c\xe4\x05\x8f\x5e\x0c\xf5\xcf\x5f\xc8\xa2\x03\xcf\x96\xe7\xe0\x04\xd8\x8e\x3b\xe7\x46\x8a\xc2\x3b\xda\x36\x8a\xcd\x8e\xd5\x09\x6f\x6b\xdb\x8c\xc7\x8a\xb8\xc0\x33\x65\x95\x6a\x58\x10\xd6\x3a\xc4\x83\xd1\xdc\xfb\x40\x39\x07\x67\x1d\x50\x7b\x6f\xf7\x81\xc4\x0b\x6f\xa2\x20\x08\x13\xac\x4f\xda\x06\xe2\x2f\x71\x2c\x98\xf0\x8f\x56\x3a\x1e\xa7\x44\x9e\x75\x34\x4e\x00\xc6\x57\x98\xb6\x81\xbc\x4d\x78\x55\x8c\x73\x5a\x1e\xcc\xe3\xdd\x89\xed\x83\x34\x48\xb1\x5e\x8b\x2a\xf9\x0e\x8c\xcc\x21\xf9\x3b\xa1\x52\xf7\xb8\xdc\x27\xb7\xc3\x30\x78\x1b\x96\xc1\xb3\x6d\x49\xfd\x33\xac\xff\x59\xd9\x9b\x46\xc9\x1b\xdc\xae\xf0\x0d\xc6\x7a\xc9\x77\xf3\x97\xdb\x6d\xa2\x87\xd0\xc4\x9d\xe5\xe7\x83\x91\xe2\x9f\xd5\x88\x31\xb1\x10\xdc\xb8\x27\x32\x0c\x92\x0e\xab\x9a\x0a\x92\x11\x28\x1e\x41\x70\xca\x63\x9d\x10\x67\x7e\x04\x2e\xca\x0c\x64\x7d\xa9\x0f\x03\x53\x3c\x1a\x98\xba\xc6\x96\x3c\x90\xb3\x94\xc0\xe5\xa1\x1e\x0a\x3c\x54\x42\xc0\x5f\x53\xd7\x06\xab\x25\x74\xa9\xee\x16\x9b\x3e\x3e\x5a\x41\x56\xeb\x09\x19\x35\xac\xc1\x64\xd4\x05\xc0\x6a\xf5\x59\x39\x1b\xe5\x1e\x6b\x4d\x9a\x40\xf1\xf5\x3e\xb1\x79\x9b\xae\xe5\xbc\x57\xa0\xd1\x51\x1e\x75\x1a\x68\xe0\x2a\x39\x2f\x39\x33\x64\x6e\x11\x1f\xce\x64\xfc\x2d\x38\x15\x73\xe9\xd4\xbe\xe5\xf4\x62\x97\x17\x8a\x24\x69\xde\x02\xa7\x13\x3c\x74\xd0\x01\x03\xe3\x14\xc7\x68\xc9\x4c\x8b\x07\x18\xa5\x9b\x81\x8c\x78\x8c\x3f\x18\xd8\x42\x6a\x8e\xe3\xce\x21\x85\x54\x26\x91\x4d\x8c\x59\x69\x39\xbd\xb8\x84\xf7\x46\x7d\xf1\x36\x3f\xeb\x1a\x15\x80\x5c\xb8\xfb\x58\xc4\x2e\x11\x73\x39\xa9\x97\x80\x79\x39\x29\x2c\x3f\x92\xa0\xd8\x38\xec\x1a\x93\xde\x28\xa4\xb0\xe2\x7a\x7d\x21\x9b\x2a\x16\xee\xd7\x78\x74\x34\x1a\x1b\xf9\x61\xd3\xde\xd1\x88\x24\x61\x18\x08\xa7\x74\xc5\x2d\x0c\x01\x9d\xe6\x22\xcd\x3e\x5d\x82\x2a\x0b\x2c\xd0\xe6\x93\xa8\x85\xff\xe9\x35\x57\x25\x71\x10\x73\xe0\xfa\x15\x14\x16\x14\x8d\xfa\xa2\x8d\xc3\x8c\x86\xd9\x00\x2e\xc2\x4f\xd9\x7a\x39\x0f\xb7\x9a\x22\x56\x45\x0a\x6a\x44\x03\x2c\x5d\x15\x74\x5e\x93\x21\x1c\x30\x28\x37\xd0\x4f\x0c\x13\x24\xb8\x37\x86\xed\x9d\xed\x65\x19\x19\x97\x8a\xca\xa4\xb1\x33\xe1\x7e\x07\x73\xe1\x42\x83\xd9\x70\xa1\x03\xde\x5e\x01\x4a\x27\xf4\xec\xd5\x79\x80\x6d\xa8\x9a\xb7\x0e\x5c\xea\xe1\x35\xd7\xc4\xea\xc5\x7c\xd9\x68\xf4\x37\x9f\x0f\xdd\x70\xde\x5d\xc0\x43\x6f\xba\xba\x61\xae\x50\xe8\x0b\xc6\xe2\xe3\xbc\x7d\x61\x80\x17\xe7\x9e\x8c\x5f\xb4\xb3\x69\xe6\xfb\x68\x34\xee\x56\x40\x47\x68\x4c\x08\xe3\xdb\xf7\x72\x5a\x4e\xdd\x89\x36\x29\xa7\xed\xf3\x8c\x04\xe6\x12\xa3\x71\x37\x05\xbe\xd7\xa0\xc3\x09\x4f\x4b\xa3\xd3\x13\x4b\x35\xf6\x0e\x7b\xb5\x69\xe9\x8b\x54\x7e\xe2\x12\xb6\x5a\xaf\x9c\xa4\xae\x05\xb9\xb5\x83\x84\x1a\xc2\x6e\xba\xbe\x38\x40\xe6\x44\x1d\xfd\xaf\x18\x89\x11\xc1\x36\x86\x0a\x22\x15\x57\x3f\x95\x7c\x99\x2b\x70\xe4\x92\x76\x06\x23\xf5\x28\x66\x7b\x7e\xa2\x28\x4e\x43\x9c\x92\xbe\x59\x24\xb4\xff\xf5\x0b\x80\x64\xc4\x61\x85\x3f\xb8\x36\x35\xe9\x59\xda\xff\x80\xe5\x8b\x2e\x24\xf9\x7b\x2f\x58\xcd\xb0\xda\x31\xd3\x6c\xce\xe1\x26\xb5\x16\x54\x47\xcb\xd6\x7b\x69\x82\x01\x27\x84\x0a\xc7\xab\x56\x6c\x76\x5c\x9d\x74\xb8\xb5\x86\x67\xad\x2c\xbf\xdf\xe5\xe8\xaa\x73\xba\x63\xa2\x6d\x64\x58\x10\x3d\x80\xc5\xf9\x60\x17\x45\x07\x46\xe7\x6c\x77\xde\xb7\xae\xee\xe8\x7c\xd1\xee\x65\xe9\xeb\x0c\x98\xe8\x11\x09\x38\xf4\xc6\xfb\x93\x6a\xde\x5b\x11\x97\xc1\x7e\x19\xd2\xdf\x3c\x29\x1b\x7a\xd4\x50\xf1\xe3\xf2\xb8\x64\x79\xf3\x6c\xe9\x8b\x0b\xdb\x33\xe2\x98\xb9\xb2\x59\x7f\x51\xd4\x43\xe2\x4a\xb2\xcf\x6c\xe3\x3c\xc7\x9d\xbc\xed\x85\xc8\xb2\x18\x0e\x66\x03\xb8\x03\xc3\x5f\xe4\xc0\x24\xe4\xf6\x54\x85\x8e\x59\x06\xc0\x85\x82\xbf\x52\x4b\xe8\xdd\x61\x6f\x13\xb9\xdf\x04\x19\x02\xea\x51\x7a\x9a\x59\x76\x94\xaa\x16\xaf\xe6\xda\xae\x4f\x83\x25\x7c\xe0\x15\x4b\xe7\x1c\xce\x08\x40\x50\x57\x8a\x84\x1a\xe9\x2a\xb8\x5b\xe9\x3b\xa7\xc9\x0a\xb7\xab\xf2\x1c\x73\xcf\x7d\xcf\x97\xdc\x47\x98\x86\x93\xa7\x7d\xd5\x12\x9a\x84\x81\x63\xba\x19\xdc\x5d\x4d\xfc\x71\x7a\xe2\x2d\xe1\xd4\x5d\x59\xcf\x52\xbd\x64\x9b\x75\x58\x40\xcf\xba\x2f\xcc\x66\x26\xc9\xa0\x30\xfe\xd0\x01\x66\x01\xe0\x86\xaa\xba\xde\x75\xd5\xd5\xf2\xcb\x52\x48\x3e\xc1\x87\xba\xc6\xe8\x72\xcd\xe3\x82\xee\xda\x58\x04\x7d\x34\x6e\x47\x68\x1e\x45\xc5\x34\xbd\x10\x57\x7c\xd1\x92\x5d\xee\x9c\xfc\xaf\xae\x25\x12\xbe\x44\x04\x5b\x6b\x47\xe8\x6f\x60\x27\x2d\xf9\x52\xa6\xd7\xc1\x73\xff\x3a\x3c\xbe\x35\x33\xf1\x3d\xaa\xff\x90\xdb\x58\x36\x9b\xa1\xae\xfd\x2f\x76\x76\x4e\x88\x75\xbf\xec\x5e\xda\xfc\xbb\xd5\x40\x05\x8a\x06\x8e\xd6\x5b\x51\x87\xa7\x73\x54\xd7\x71\x3e\x61\xdd\x23\x80\xaa\x50\xad\xeb\x39\x96\x74\xe0\x44\x54\xc1\x5b\x37\xea\x35\xec\x83\x7a\x60\x85\x07\x77\x8d\x6f\x9b\x2a\xcc\x1d\x88\x8d\xdc\x1d\x88\x7a\x63\x81\xf2\xb0\xb6\x75\x40\xcf\xb1\x65\x29\xcd\xd3\x06\x56\x9d\x3d\x11\xf1\x2d\x4a\xed\x92\x3e\x56\xd9\x53\x8a\x3e\xe5\xfe\x45\x74\x3c\x07\xbd\x3b\x5f\x6f\xd9\x25\x30\x32\x9f\x39\xbc\xe9\x86\x7a\xca\xa0\x61\x61\x94\x91\x3d\x6d\xd7\xb6\x72\x56\x3b\x1e\x85\x2a\x4c\x2d\x50\xe5\x25\x19\xcd\x46\x66\x62\xf9\xb4\x51\xf8\x9e\xc4\x6a\x51\x26\xd6\x37\x01\x64\xf7\x94\x29\x02\x79\x95\xa7\x5d\x15\x76\x62\xd2\xea\x44\x6e\xa4\x56\x0d\x38\x75\x5f\xb3\xfd\x16\x1f\xaa\x52\xb7\x19\x99\xf4\x8e\x1a\x70\x6f\xf7\xfd\x04\x12\x65\xe6\x5e\xf7\xbb\x69\x60\x2d\x6b\x9e\x1f\xce\x9d\xe6\x09\x4d\x98\x31\x42\xcd\x0e\x97\x60\x12\x4b\x6f\xb0\xb0\xa0\x4e\xd3\x71\xbd\x06\xcb\x60\x12\x2e\x03\xd1\x1e\x9e\xde\x7e\x05\xcd\x3d\x50\x8b\x1e\x1f\xf3\xf8\xd6\xab\x49\x0d\x2e\x9e\xbd\xa9\x39\x9d\x45\x51\x3c\x03\x1f\xa2\x90\xfe\x4f\x9b\xf0\xfb\x34\xfb\x14\x1f\x54\xc7\x9e\x11\x7a\x0b\xc3\x99\x40\xff\xa9\x51\x88\x83\x95\xb3\xdf\xd3\x8a\xab\xb7\x4e\xf7\x2a\xd8\x12\x7e\xef\x5c\x8a\x21\xe3\x2d\xbd\xee\x06\x70\xc6\xea\x40\x2c\xf3\x4a\x93\xa5\xef\x75\xbc\x69\x2b\x82\x70\xba\x56\x3d\x4c\xa5\x57\x46\x37\x17\xf1\xda\xf5\x4e\x6c\xbb\xcd\xc2\x35\x69\xe3\xbd\x46\x85\x11\xed\x26\xfd\xcc\xa5\xfa\x42\x8b\x74\x01\x9d\x3c\x64\x4f\x83\xd1\xf6\xdd\xa6\x21\xe2\xe6\x55\x14\x0d\xd7\x8b\xd1\xfc\x3e\x2c\x57\x50\x61\x1f\x74\x96\xc7\xba\x5f\xf5\xdd\x2c\xba\xee\x0a\xdf\x8a\xbc\x54\x1c\xb1\xf3\xaa\x4e\xb6\x30\xd6\xd8\x5e\x75\x86\x92\x19\x24\xbc\x76\x97\x4c\xf8\x9e\x76\x07\x22\x09\xc1\x69\x78\x7f\x7d\x80\xdd\x80\xfa\xe0\xf1\x9c\x7f\xd3\xe8\x7b\x1f\xc9\xb8\x79\x04\x3e\x24\x39\x76\x0f\x89\xbc\xe0\x88\x09\x24\x36\xaf\x75\x05\x31\x02\x64\x81\x3a\x96\x11\x2d\xcf\xc9\x90\xf1\xc5\x81\x66\xd8\xa7\x5c\xdb\x0c\x80\xf4\xd8\x53\xd0\xfa\xef\x4e\x93\x37\xc4\x8d\xf0\x61\xd0\xba\xd5\xba\x34\x9a\x13\xe8\xc4\x5c\xc1\x7a\xd8\x53\xef\x50\x21\xf4\xcf\x2f\x9c\x30\xce\xaf\x99\xd9\x7d\x33\x8a\x5b\xf2\x8e\x1d\x48\x6e\x0f\x6d\x02\x1d\xd3\xe9\xdf\x7e\xef\x37\x82\xd0\xb6\x05\x02\xbb\xc5\x83\x29\x79\x0a\x97\xc5\xe4\xcf\x3d\x7d\xef\x79\x1b\xc1\xe7\xa5\x96\x13\xa5\x52\x18\xc4\x40\x4f\xb5\x09\xf9\x0c\x0f\x9e\x3a\x28\x06\x9f\x6c\xfa\x9c\xb1\x21\x9e\xbb\x5f\x90\x61\xfa\xf8\x78\x4c\x7e\xcc\xad\x9f\x2f\xe7\x6d\x15\x13\x9d\xf1\x73\x82\x20\x37\x2b\xce\x5e\x4d\x5f\x8b\x8a\x75\x90\x93\xba\x48\xa1\x2b\x1e\x40\x85\xae\xb8\x87\x15\x0a\x82\x48\x6e\x89\x25\x53\x7b\xba\xd5\x25\x67\x9b\x6d\xb7\x70\x27\xbe\xd5\x99\x26\xc8\x39\xd7\x35\x9f\x66\xeb\x89\x9a\x66\x6b\x0f\x98\x70\xe3\x8b\x7b\x75\x7d\xc8\x65\xeb\xa4\xbe\xef\x6f\x1e\x94\xbb\xc5\xcf\x93\xd9\x42\x25\x1e\xcf\x7e\x79\x28\x15\x4f\xbc\x77\x85\x0b\xee\x59\x5d\x5b\xb3\x8e\x00\x30\x2b\x84\xf3\x7c\x00\xaa\x5a\x20\x80\xb8\xc1\xcb\x54\xd3\xfa\x8f\xbc\xeb\x1f\x06\x95\xd3\xbc\x87\x36\x6b\x88\x8e\x1e\xf3\xc5\xb4\xe2\x85\x95\x47\xd8\x56\x04\xf8\x9d\x75\x3d\x82\xef\x11\x63\x39\xad\x74\x86\x6d\x91\x83\x52\x62\xa5\xef\x2f\x05\xb6\x21\x5f\xc5\x69\x14\x95\x53\xe9\xcb\xef\x4f\xe7\x24\x5f\xc5\x37\x3c\x8a\x6e\x8c\xc0\xeb\x77\x91\x97\xf1\xe8\x43\x39\x22\x8c\x19\x3c\xc6\x30\xcb\x3f\x6e\x02\x23\x4f\xc6\x66\xe4\xb6\x60\x67\x8d\x9b\xc3\x1d\x9b\x1d\xef\x4e\xc2\x54\xc7\xbb\xf1\x98\x14\xb8\xa2\x83\xf6\x99\x64\x67\xbb\x73\x7d\x4f\x85\xb3\xde\x39\xc8\x61\xad\x9a\xa3\x28\x2e\xd8\x8d\x88\x2b\x1a\xc8\x5e\x71\xf6\xce\xf8\xf9\x9e\x10\xbc\xb6\xee\xda\x39\x27\xf3\xe3\xdd\xa9\x6e\xd6\x64\x82\xa3\x9e\xb9\x14\xfa\xda\xbd\x64\x60\x10\xbf\x89\x09\x5d\xb3\x6c\xaa\x44\x4c\x06\xd9\x94\x6f\xb6\xea\x26\x06\x35\xbb\x28\x92\xa7\xb3\xc5\x92\xad\x78\xbc\xc4\xf5\xb6\xd4\x4b\x53\x82\xe6\x3c\x4c\x88\x83\x63\x8d\xa2\x61\xba\x58\xeb\x94\xa8\xda\x41\xdd\x83\xfc\x93\x3c\x16\x46\xdf\x23\xb0\x44\xa5\xeb\x69\xb6\x1e\x5f\x89\xb8\x22\x16\x5e\x92\x24\x66\x4a\x40\x1d\x20\xaf\x0e\xcd\x4f\x14\xc5\x4b\xb6\xf6\x9a\x35\x23\xc4\x2a\xb2\x18\x83\x7d\xa3\xa3\xf0\x4c\x2f\x51\xba\x65\xa8\xab\xbe\xa4\x4a\x24\x6b\xaa\x0b\x4c\x8a\x45\x71\xb6\xfb\x47\x61\xaa\x3e\x4f\x2a\x2a\x64\x7e\x99\x97\x49\x5e\xd7\x71\xba\x30\x4b\xcb\x75\xd4\x03\x8a\x5d\x8c\xb2\x9d\x1a\x25\xa3\x31\xac\xff\x11\xd9\x0f\x9e\x4b\xa3\x99\xb5\x85\xab\x17\xa7\x23\x88\x7a\xc3\xd3\xe5\x88\x72\xba\x25\x7b\xa5\xc7\x27\x8a\x9e\xe0\x56\xa3\x7f\x48\x94\x06\x77\x9a\xca\x56\x2e\x54\xdd\x6c\xf3\xf2\x92\x0d\x67\xb4\x77\xf5\xb3\x9e\x96\x31\x5f\xa3\xf7\xba\xf5\x8a\x92\x15\xf9\xf6\x42\xa4\x72\xf9\x38\x55\xa9\x61\xfd\x9a\x00\x7d\x8e\x22\x54\x9b\x1e\x9d\x7b\xdb\x22\xcd\x4b\x94\xc7\x59\xc8\xbd\x23\x0e\x58\x8e\xbc\x54\x8f\x11\x9a\x5e\x73\x84\xd3\xbc\xd2\xbd\x7c\x55\x16\x37\x31\xa9\x6b\xe5\xe4\x42\x86\x11\x80\x4e\xd5\xf5\x7b\x15\xab\xc0\x5a\xec\x23\x07\x6f\x9b\x33\xfb\x26\x05\x83\x0d\xf6\x5f\xbe\x12\x89\x19\xae\xdb\x40\x72\x09\xba\x30\x32\xcf\x40\x3d\xda\xd7\x21\xa9\x36\xa9\x54\xfa\xa6\x57\x36\xe2\x06\x0b\xf4\x50\xf1\x02\x4c\x91\xda\xdb\xa3\xd4\xdb\xa3\xb4\xdb\x23\x77\x29\xec\x9b\x77\x9c\x03\xc4\xe4\x34\x5b\x9f\xce\x67\xb3\xba\x2e\x41\x43\xce\x24\x99\xcc\xcf\x31\x16\xdf\x9e\xf2\xe6\x83\x34\x44\xce\xa0\x60\x3c\x50\xa6\x28\x42\x53\x86\x0a\xb7\x22\xec\x4a\x73\x92\xa1\x1c\xae\x15\x6d\x29\x4a\x85\xc6\x08\x6a\x0a\x00\x4b\xaf\x3a\xc5\x4c\xb3\x75\x2a\x1f\xa8\xb8\x22\xe4\x74\x32\x27\xb7\x29\xfb\x4e\xc6\x9c\x7a\x8d\xa3\x23\x18\xa9\x11\x19\x5c\x48\x9e\x7e\x32\xe4\xa7\x29\x06\xe6\x2c\x8a\x5a\x01\x88\xe9\xed\x74\x10\xfd\xce\xe2\x0e\xb5\x5a\x8d\x6e\xc4\x08\x01\xad\xd5\x83\xd5\x93\x41\x1a\x45\xb8\x5d\x82\x9a\xf4\x96\xf1\x8b\xf7\xe5\x78\x9f\x5b\x8f\xdd\x67\xe7\x54\xea\xff\x50\xac\xe4\xe6\x3a\x9c\x67\x4f\xa9\x81\xb5\x93\x9c\x95\xde\x1c\x52\xc1\x6e\x11\x5a\x34\x59\xf1\x38\xa7\x33\x42\x75\x1c\x7c\x00\x16\xe9\x7e\x20\x0d\x31\xd7\x6b\x1f\x7e\xc1\x0c\xbf\xd1\x65\x75\x70\x49\x9d\xa1\x0c\x10\x1c\x45\xb1\xc6\xc0\x98\xf8\x95\x3d\x64\x03\x21\x92\xe6\x7c\x33\x21\x25\xcf\xd4\x88\x8e\xc4\x6a\x35\x32\x18\xa8\xed\x34\xe9\x36\x57\x69\x01\x90\x76\x07\x92\x55\x5b\x5e\x14\x70\x67\x1b\xd1\xd1\x2a\x2d\x2a\x1e\xc0\xa1\x71\x77\xe1\xc9\x36\x96\x69\xd1\xbb\x1c\x89\x91\xbd\x65\x6e\x45\x51\xe4\xe5\xe5\xd3\xb4\x52\xce\x17\x95\x09\x0b\xb8\xff\xbc\x4c\xb3\x6c\x27\x53\xc5\x1d\xc8\xa3\x4b\xbf\x4e\xab\x6e\x60\x26\x36\x5b\x51\x41\x31\xc1\xe3\xf6\x3b\xee\x18\xea\x4f\x02\x49\x52\x2a\x79\xfa\x45\x28\x2a\x23\x3a\x02\x74\x47\x0f\x84\xca\x41\x54\xcd\xf9\xa6\x0b\xc8\xe5\xdb\x6b\x73\x8b\xb0\xa5\x0f\xb6\x55\x21\xae\x93\x23\x54\x7a\x39\x3e\xea\xc3\xf6\x32\x75\x7c\xe3\xd7\x31\x03\xd4\x2b\xa7\x3f\xea\xae\x15\xe6\x4e\x3e\x9f\xcd\x66\xfa\x0a\xd7\x9e\x28\x40\x4d\xb7\xb3\xb8\x6d\x20\x6c\x8c\x99\x22\x1b\xcd\x9d\x61\xe2\x45\x91\x66\x9f\x46\x84\xbe\x42\xab\x00\x0f\x3f\xa7\x6f\x3a\x8b\xb4\x52\x0f\x60\x5d\x82\x26\x68\x2b\xcc\xa8\x17\xbb\x50\xc0\x15\x0c\x13\x42\x90\x49\xd7\xb0\xcf\x7d\xf3\x7f\x29\xd3\x8c\xbf\xe6\x32\x17\xcb\xe0\x28\x7a\x1d\x1c\x45\x57\xca\x49\x89\x0d\xa8\x6b\x5d\x4b\xab\x5b\x64\xb9\x6a\xcd\xba\xe1\x15\xcf\x91\x1c\x93\x85\xe6\x6c\xab\x62\xcd\x4a\xda\x00\xc1\x1e\xe4\x31\xd8\xd7\xc1\x83\xc1\x68\x20\x80\xf0\x54\x69\x2c\xa8\x66\xa3\xc9\x3f\xee\x2f\x46\x70\x1d\x1a\x25\x98\xc2\xda\x5f\x5d\x6b\xaa\xbc\x49\xb7\x90\x8c\xa6\xcd\xac\x19\xfd\x12\x66\xb2\x31\xa6\xd7\x6a\x51\xa4\xdb\x8a\x2f\xf4\xd5\x7e\x99\x54\x88\xa5\x4c\x2b\x0f\xd5\x26\xe4\xab\xf1\xb5\xf6\x22\x5d\x22\x34\x97\x87\x52\xc3\x03\x4d\x66\x90\x61\xf9\xca\x79\x16\xec\x10\xef\x1e\x65\x37\x66\x9a\xe9\xdb\xa2\x9e\xa5\xea\x4c\x9e\xbb\xab\x88\xae\x1f\x4e\xf5\xd7\xa2\x8a\x57\x3e\xd2\xac\xb1\x24\x98\xc3\xf9\x4a\x06\x66\x1e\x25\x9b\x21\xed\x47\xc0\x11\x75\x7c\x5c\xb2\xd2\xbb\xb6\x62\x03\xca\xba\x2e\xfb\x5a\xe7\xcf\x14\xb0\xcb\xbe\xf2\x48\x19\x28\x1f\x77\x33\xe3\xc9\x13\x2a\xd9\x84\xcd\xed\xd1\xb4\x09\x13\x9c\xe5\xe7\x78\x8a\xa2\xea\x8b\x5b\x3a\x9f\xb8\x9e\xf6\xd0\x8f\xe8\x27\xde\xd6\x1d\x87\x23\xcb\xd3\x79\xca\x99\xb5\x82\xa9\xeb\xe1\x63\x01\xfe\xa0\xbd\x71\x5d\xf1\xf8\x5d\x6e\x2e\x5d\x44\x9f\x0b\x7a\x18\x71\xde\x4a\x50\x3b\x1b\xce\xa8\x62\x65\x38\x31\x7a\x80\xe9\x50\x79\xcc\x80\xe4\x95\x5a\x5c\x89\x18\x7f\xd9\xe7\xf7\x41\xbb\x1e\x41\xa8\xf0\x59\x65\x42\x73\xbc\x58\xa5\xec\x1b\xab\x5c\xf2\xee\x66\xcb\x17\xca\x38\x1e\x60\x0a\x2e\x00\x69\x5d\xcf\x87\xa0\x90\x64\x5b\xe1\x8c\x2d\xbe\x19\xb2\x40\x90\x6a\x8b\xd0\xcc\x6e\x10\x43\xd1\x4d\x45\x0a\x29\x7e\x4e\x8b\x1d\x77\xdc\xf9\x71\xe5\xcd\xea\x90\x95\xc7\xa4\x62\x7e\xd0\xc0\x3e\x0e\x5a\x8d\x9a\x1d\x2b\xf4\xee\xaa\x3c\x0f\x6c\x71\x47\xbf\x6a\x32\x3f\xce\x4f\xe2\xdd\xc2\xaa\xba\x27\x33\x02\x93\xde\x3c\xeb\xe4\x27\xb3\x05\x14\x94\xec\xce\xf2\x73\x63\x9d\x29\x1a\xeb\x4c\xf6\x8d\xb5\xa0\x15\x67\xe9\xf8\x3e\x2c\x8b\x8a\x31\x55\xd7\x15\x63\xd2\xde\x7c\xde\xe5\xb1\x2e\x08\x87\x3c\xc1\x19\x38\xcb\xcf\x09\x5d\xea\x6c\xe7\xe3\xd2\x4c\x43\x5c\x9e\xcc\xea\xba\x1a\x32\x45\xe0\x9e\xa1\xcb\x8c\xcb\xc5\x3c\x99\x91\x73\x42\x57\x3c\xce\x28\xb8\x26\x40\x4d\xc1\x2c\x4e\x69\x45\x25\x2c\x86\xa5\xb7\x60\x96\x34\xf7\x21\x52\xab\x40\x95\x6e\xc5\xd2\x45\x77\x80\x27\x32\x99\x1d\xaf\x8f\xd7\x6c\xed\x27\xc6\x87\x35\x96\xc5\xfa\xc2\xe4\x4d\xd3\xac\xb5\x3c\xfd\x0b\xda\x8a\x40\xed\x63\xb6\xc6\x67\x3d\xc4\x4e\x30\xd5\xec\x51\x3d\x1e\xcf\xf9\x5c\xec\x2a\xfb\x84\xa9\x5b\xbb\x62\xf2\x78\x7b\xbc\x65\xdb\x76\xac\x6b\xc6\x96\x6e\xfd\x66\x68\x9a\x72\xa8\x1d\xe3\xbb\xdb\xe1\xa1\x5c\x71\xcf\x85\x33\x72\x49\x0d\x33\x92\x6f\xf0\xf5\xc6\x3b\xe7\x7e\xf7\xd3\x23\xcf\xe5\xa4\x9b\x3c\x5d\xfa\x49\x1f\x87\xb7\xa0\x33\x75\x3e\xe0\xd3\x4a\x48\x1f\x94\xa2\x2d\x0c\xb1\x97\x62\x65\x7e\x20\x2e\x05\x00\x0a\xe9\x99\x6e\x9e\x32\xe7\xc7\x2d\x97\xe3\x96\xc9\x44\x70\x2d\x0e\x57\x04\xbd\x32\xb6\x9a\x39\xd4\xf7\x6b\x9a\xdb\x32\x4f\x99\xc1\xe0\x4f\x19\xb0\x8e\xa6\x4e\x17\x4f\x2b\x76\xe5\xe5\xd2\x7f\x08\x2d\x98\xb0\xf7\xf3\x85\x4d\x69\x2f\x1e\x89\x70\x01\xc8\x7f\x0e\xca\x13\x7d\x55\x9e\x4c\x94\xe6\x0a\x11\x5c\x68\x32\x29\xe9\x7d\x6a\xd0\xf7\x8b\x45\x95\xa4\xb4\x58\xa4\x49\x45\xc8\x7e\xef\x09\xb4\xde\xb4\xdd\xb3\xbe\x0c\x8f\x36\x93\xe6\xcc\x14\xc4\xa9\xaa\x6b\x4e\xce\xa9\x0f\x5d\xf6\x2c\xcc\xe2\xde\x87\xcc\x8b\x7a\x23\x20\xd0\xcd\x43\xab\x3d\x6e\x4d\x88\x7d\xfc\xa3\xe6\x0e\x88\xe7\xfd\x89\x49\x4d\x7c\x61\x18\x16\x39\x6b\x10\x37\xc2\x02\x9b\x57\x73\x5d\xc2\xa9\x5c\xac\x78\x2c\xa9\xe6\x2c\xc0\xe3\xa8\x47\x69\x93\x3e\x04\x7a\x3e\xcd\xd6\x03\xef\xbc\x63\x4c\xb3\x2c\xa7\x6a\xd1\x08\xe2\x14\x49\xe4\xc9\xcc\x0b\x98\x91\x84\xef\x63\x85\x95\xa8\xae\xf8\xc3\x77\x15\xdd\xe2\x1b\x4e\x6d\xfb\xa3\x48\x9d\x84\x5d\xf1\x40\x6b\x78\xdb\xc2\xc2\x5d\x83\x82\x87\x75\x79\x56\x9e\x33\x1c\xc4\xb3\xf2\xdc\x73\x72\xdf\x00\xde\xb4\xdf\x84\x33\x30\x1e\xc8\x36\xa1\x68\xae\xae\xf9\x14\x1d\xef\x36\x78\x64\xb8\xf7\x06\xe8\xe4\x16\x89\xf5\x56\x8f\x6c\x4e\x4e\x66\x03\x31\xd4\x1f\x25\x7c\x2c\xe2\x9c\x49\x2a\x59\x49\x12\x0c\xd6\xb5\x9d\xcc\xd0\x23\x12\xf1\x97\xde\xef\xfa\xe2\x25\xdb\x41\x65\x5d\xcb\x40\x41\xe2\xa1\xd7\xe8\x5f\xf4\x6f\xbb\x24\xa1\x37\x1c\x6e\x78\x9a\x76\xa4\xf2\x46\xef\x64\xb0\x1d\x9f\x11\x5a\xfa\x8e\x89\x1d\x53\xd0\xec\xe8\xb3\x73\x6a\x99\x91\xee\x35\x52\x9f\x4a\xe5\x59\x7e\xce\xbc\x3a\xa4\x55\xfd\xa5\xfa\x30\xa1\xa8\x43\x02\x0d\x7a\xcc\xc1\xe0\xd8\x36\x04\x88\x18\x09\xfa\xf0\x73\x47\xc9\x23\xa8\xd5\x42\x84\x0d\x72\x70\x19\x4c\x6d\xa9\x79\xb7\x54\xbf\x5b\x5f\xb5\x47\xe6\x25\xc8\x5a\xc2\x44\x7f\x74\x18\xa2\x75\x5e\x29\x21\x6f\xa6\x4b\x51\x72\x9a\xb3\x2b\x11\x97\x64\x90\x47\x51\x6e\x9a\xb3\x88\xcb\xb3\xd2\x09\x4e\xce\x99\xa2\xdf\xd9\x32\x48\xf2\x4b\x57\x83\xc5\x05\xdd\xba\x74\x2d\x43\x3e\xbf\xdb\xa6\x76\x2a\x34\x3b\x55\x4e\x51\x14\x37\x90\xcc\x40\xbf\xbe\xe5\xc5\xab\x2d\xa8\x63\x35\xdf\x90\x04\x94\xa5\x63\x0c\x7c\x21\x96\xef\xf2\x0d\xf7\xf2\xe8\x4f\x9b\xc5\xa5\xaf\xeb\x43\xcd\x50\x56\x76\x32\xb3\xdb\x64\xf4\xf5\x88\xb1\xbc\xae\x47\x63\x04\x37\x6c\x09\x90\x7a\x44\xb5\x72\x5a\x89\x0d\x57\xeb\xbc\xbc\xc4\xeb\x2e\x5f\x6a\x8a\x5c\xf6\x05\x7b\x9e\x59\x9a\xf1\xf7\x9a\x7e\xc2\x60\x33\x2e\x60\x2f\x5a\x29\x97\x49\xf7\x04\x05\x71\x45\x7a\x93\x7c\x3b\x9b\x81\xd1\x9a\xa0\x57\x22\xce\x61\x02\x89\xe6\x5e\x17\xf8\xfb\x0c\xff\xf8\x53\x97\x3c\x06\x1c\x12\x4c\x3a\x08\x86\xab\xf1\xc4\x43\xdb\x43\x2d\xbc\x90\x2d\x93\xb4\x8c\xa2\xe1\x7c\x88\x1a\x4e\x3c\x95\x6f\xf8\x52\x44\xd1\x9b\x3c\xce\xa7\xbb\x12\x4a\xde\xdb\x5d\x42\x9b\x6e\xa0\x6c\x33\x5f\x26\x2f\xd3\x97\xc1\x7a\x71\xab\xe4\x36\x86\x57\xa1\xd1\x05\xe8\xbb\x38\x99\x81\x31\x46\x22\xf0\x3c\xb2\x89\x22\x9d\x68\x9a\x6d\x0e\xa6\xd3\xcc\x9b\x62\xfd\xa6\xa3\xb7\x46\x12\xa3\xcc\xec\xd1\xf6\x6b\x5a\x8b\x17\xf1\xa4\xfc\x92\xcd\x8e\x65\x43\x61\xe5\x78\x4c\xbc\x94\x67\xf2\x9c\x19\x8a\x65\x48\xae\x3c\x37\x44\x12\xfd\xdb\x60\x88\x91\x0e\x59\x89\x33\xe8\xaf\xe3\x6f\xe7\xdd\x1f\xbd\xc4\xf4\xf7\x8d\x72\xd4\x21\xd2\xc3\xa0\xd3\xdd\x31\x0c\x90\x4a\xa7\xb6\x0b\x55\x5f\x03\xcc\x86\xd6\x04\xca\x0e\x40\xe7\xe1\x80\x24\x6a\x6f\xb7\xf7\xc0\xc1\xe9\xc8\xe9\x45\x9e\x56\x75\xad\x19\x1a\xd5\xd0\x57\xe8\x50\x9b\xe8\x62\x2f\x4f\x66\x8b\xc9\x3c\x99\x93\xc1\x7b\xdd\xfb\xff\x18\x3d\x32\x80\xc1\xd4\x37\x8d\xe1\x9c\x31\x87\x10\x55\xd7\x43\xdd\xdc\xba\xfe\x43\x42\xa7\xbc\xd5\xf1\xde\x72\x7c\x53\xfe\xc7\x2e\x2d\xaa\x18\x2a\x23\xf0\x1c\x55\xf1\x82\x29\x33\x1c\xb1\xb7\xc8\x7c\xb1\xba\x17\x5c\x85\x43\x84\xa0\x94\xb8\x98\x88\x15\xdf\xa3\x01\xe6\x83\x4c\xe5\x57\xb9\xba\x41\x2f\x3d\x0d\xdc\x02\x48\x59\x9a\xfe\xe0\x12\x47\x0b\xc8\x80\x75\xf9\x4f\x9f\x3d\x09\x15\x6c\x76\x2c\x4e\x54\xeb\x6c\x11\x96\x7b\x4c\xdd\x04\x9d\x89\x73\xd0\x63\x6b\x91\x9c\x9e\x93\x49\x1f\xd7\xde\x61\x24\xce\x69\xc1\x7e\xd5\x95\xa7\x56\x22\x59\x45\x91\xe5\x94\x51\x03\x6d\x67\x13\xc0\xd4\x41\x34\xfc\xd2\x91\xc7\x71\x5e\xd7\xc5\x90\xd9\xdc\x75\xbd\xd3\x1f\x30\x9f\x9a\xda\xd6\x35\x20\x9a\x86\xc7\x14\x15\x84\xd0\xfc\x4c\xb8\x0d\x50\xd0\x9d\x93\x80\x1e\xe5\x0b\x38\xb8\x94\x77\x68\xf9\x6f\x8d\x3f\xf6\xbc\x0f\xfa\x8c\x13\x5e\xf4\x37\xa9\xfc\xc4\x97\x6f\xb7\x69\xd9\x46\x33\x0e\xe2\x3a\xca\x7e\x15\x0b\xe2\xcf\x52\x3d\x3e\x15\x06\x01\xf3\x62\x8c\xdb\x2b\x60\xa0\xeb\x3a\x2e\xa6\x79\x99\x15\xbb\x2a\xbf\xe2\xcf\xf9\x4a\x2d\x30\xe2\x04\x0e\x88\xc4\x7c\x28\x2b\xe1\xb6\x79\x95\x08\x73\x02\x96\xd9\x42\x87\x9f\xda\x8c\x4a\x9c\x62\x36\x60\xb4\xf2\x28\x8a\x7f\x44\x87\x26\xb0\x77\xd1\xb9\xcf\x93\x12\xcc\xa9\x69\x31\xe5\x9f\x35\xcf\x9e\xab\xe2\xe6\x91\xa6\xaf\x7c\x89\xd9\xc2\x71\xb8\x9d\x4c\xd2\x41\x26\x4a\x95\x97\x3b\xbe\x47\xb1\x0a\x98\xf6\x4f\x53\x25\x36\x79\x46\x6c\x9c\xd1\x13\x83\x97\x4a\x9a\xb1\x02\xb1\x64\xcb\x93\xd9\x62\x9e\x4c\xe6\x04\x87\x01\x2e\xda\x61\x0f\x92\xd6\x60\x10\xf0\xc9\xf9\x9b\x9e\xb0\x8c\x4e\x4a\x0a\xd6\xcc\x81\xf1\x8d\x00\xa1\x04\x21\xdd\xa8\x28\x8a\x77\x9a\xf9\x03\xc3\x70\x3d\x74\x27\xb3\xc5\xee\x64\x96\xec\x4e\x9b\xdb\xec\x8f\x58\xb2\x82\xa5\x60\x2e\xd9\x5e\x63\x91\x98\x34\x37\xf5\x45\xab\x79\x49\xbb\xfd\x78\x89\x87\xf6\x2e\x69\x49\x97\x07\xda\xba\x5c\xfc\x88\x49\xb0\x62\x74\x29\x67\x57\xaf\xb7\x52\x7f\xed\x59\xa9\x65\x5d\xcf\x69\xca\xdc\x22\x16\x34\x27\x75\x3d\xcc\xa3\xc8\x0b\x1a\xce\x48\x5d\xbb\xef\x49\x4f\x9a\x89\x40\x60\x5f\xac\x33\x05\xda\x96\xa5\xa5\x7a\xb2\xcc\x95\x26\x52\xc1\x45\xc7\x23\x33\xbf\x79\x64\xc6\x72\xf7\x9a\xb5\x9e\x31\x58\x77\x0b\x73\xe9\x31\x79\x17\x70\x0c\xad\xb8\xb9\x4d\xe9\xcb\x16\x74\x36\x91\xa7\xb3\x28\xd2\x19\x18\xd3\xec\xb6\xbf\xfd\x82\x8b\xcb\x22\xbc\x86\xb9\x3b\xd6\xc2\x95\x09\x4f\x25\x58\xa8\xd1\x8e\xb0\x3a\xc1\xd3\x6c\x3d\xf6\x0f\x7d\x30\xcb\xed\x40\x42\x56\x6b\x71\xdd\x78\x89\x6a\xc7\x6e\x25\xdf\xa6\xde\x49\x17\xfb\x63\xa1\x54\xfb\x56\x64\x5c\x4b\xa2\x15\x64\x69\x4c\xeb\xab\x2f\x7b\x0e\x03\xf4\x08\x77\x56\xfc\x85\xf4\x16\x34\xac\x7b\x6f\xb0\xf8\x61\x9a\x59\x52\x06\x7a\x25\x64\xe0\x1d\x00\x9c\x47\xc5\x53\xf3\x02\x59\x99\x6b\x3d\xce\x62\xc7\x3c\xba\xae\x2b\x10\x0e\xd8\x49\x69\x1b\x5a\x93\xc6\x46\xd7\x48\x0e\x8e\xe3\x42\x33\x51\xee\xd9\x74\x2d\xae\x91\xf4\xfc\xb2\xe6\xe5\x5b\xeb\x01\x95\x44\x11\xf8\x4e\x33\xe7\x42\x4e\x68\x51\xd7\x25\x84\x50\xe1\x49\x0b\x3c\xf3\x49\x15\x72\x59\x8f\xf0\xbb\x6d\x80\xe8\xd9\x5a\x54\x79\x79\x59\x18\xba\x87\x2a\x88\xaf\xb9\x7c\x6e\x84\xfc\xb2\xdf\x5e\x60\xf4\xff\xfc\xdf\xa3\x1e\xbf\x31\x23\x42\x10\xee\x3e\x50\x43\x2e\xac\xde\x26\xcd\x3d\x53\xec\x52\xff\x1f\x06\x77\x95\x58\x9d\x72\x18\xa4\x26\x5f\x7b\xf8\x89\x5e\x7b\xb1\x94\x72\x2a\xd4\x9a\x4b\x4b\x0f\xfe\x5e\xcb\x7d\xcb\x8f\x8a\x67\xa2\x5c\xa6\xf2\xa6\xe9\x94\xe8\x6a\x7e\x8a\xb0\x93\x50\xb7\xd7\x55\x11\x74\x15\x63\x5d\x87\x45\xd8\xe1\xe9\xbf\xbf\xfd\x3a\xb6\x89\x5c\x87\x5d\x1e\xa3\xaa\xeb\x59\x9d\xaa\xbb\x40\x58\x00\x7f\xe8\x2f\x6d\x95\x2c\xf0\x99\x50\xb1\x14\x3d\x9b\x16\x3e\x3e\x52\xe3\x9e\x86\x02\xfa\xc3\xc4\x04\x79\xb6\xc6\x64\x92\xa2\x26\x6f\x23\x61\xde\x35\xc4\x50\x81\x80\x01\x7c\xa7\x28\x1f\x18\x5b\x91\x10\x28\xbb\x24\x54\xfc\x45\x1c\xfc\xca\x5c\xde\x46\xfd\xef\x8f\xd6\x5e\x85\xa3\x85\x0a\x38\x98\x1b\x8d\x55\xcb\x5e\xc5\x62\xe9\x2c\x8a\x09\x4f\xa4\x31\x02\x6b\xbc\xe8\xc4\xe5\xc4\xe0\x9d\xfa\x94\xcd\x49\xce\xaf\xd0\x6f\x27\xcd\x34\x87\x94\x53\x45\x40\x8f\xc7\x23\xd0\xcd\x58\xac\x63\xff\x50\x78\xa0\x0c\xe1\x07\x2b\x24\xe8\x5f\x46\x1b\xe1\x4b\xf7\x56\x0c\xb0\x80\xee\x9d\x07\xea\x1f\x15\x4a\x8e\x7c\x84\xda\xe1\xdc\x30\xb4\xbc\x61\xbb\x84\xe5\x64\xf9\x99\x38\x3f\x8e\x53\x64\x98\x64\x14\xa5\xc0\x01\xd5\xb5\x62\xcc\x7c\x31\x94\xb2\x97\x71\x83\x20\x09\xa9\x75\xb7\x9c\x80\x50\x27\xd4\x6d\x9e\x33\x58\x27\x57\xbc\x58\x8c\xa4\x2a\x46\x09\xb6\x86\xe6\xe0\x4a\x35\xaf\x6b\xbf\x8d\xfb\xf8\x41\x1e\x67\x84\xca\xba\x46\x2d\x13\xc6\xca\xc5\x32\x29\x69\x88\x54\x65\x0e\xf1\x8c\xae\xe8\x96\x6e\xd8\x5a\x73\xff\xe6\x89\x30\x5f\xc5\x9a\x51\x20\x19\xdb\xd0\x15\xdb\xb2\x0d\xac\x51\xe7\x7b\x3f\x63\xeb\x58\x4d\xe6\xd4\x3c\x11\x12\x0a\x6d\x62\xd6\x40\xe8\x8a\x6d\x06\x1b\x96\xd1\x8c\x5d\xed\x57\x26\x2f\xdd\xb2\x0c\xd7\xeb\xde\x2c\x01\x38\xa5\x39\x00\xe7\x54\x84\x66\xe0\xd6\x77\xa3\xff\x3f\xfd\x46\x33\x4b\xf1\x8a\xc2\x17\x2e\xc4\x8d\x05\xb5\xa5\x2b\x56\xb9\xaf\x93\x0c\x91\x50\x30\x31\x86\x61\x7a\x88\x20\xc4\xf6\x3e\x8a\x14\x63\xcb\x28\x8a\xb7\xac\x20\x34\x1e\x8a\xba\x86\xc2\x4f\x84\xfe\xdf\x7c\x30\x26\xb0\x38\x6c\x31\x3c\xb3\x20\xd3\x27\xd8\x46\xe7\x4a\xeb\x3a\x33\xb5\x9c\xa6\xe6\x47\x13\xa4\x67\xc8\x22\xce\x9a\xae\x9e\x9a\x2d\x8a\xda\x20\x19\xa1\xab\x93\x6a\x3c\xb7\x5d\xd6\xad\x86\x76\xd2\xed\x44\xff\x32\x3d\xdc\x13\x42\x9d\xef\x5f\x5e\x2e\x93\xd4\x3e\xb8\xa8\x46\x65\x4d\xa1\xca\x5a\xbe\x8a\x2d\x57\x67\xd4\xcc\x32\xff\x15\x02\xf4\xcc\xd0\xa4\xf7\x16\x55\xc4\x60\xdf\x18\xe5\x12\xba\xc5\x4f\x93\x93\x6e\xd8\x9f\x65\xbc\x22\x4c\xff\xd9\x12\x7a\xc5\xc2\xb2\x36\x8b\x95\xbf\xd5\xc6\x73\xe4\x1f\xa7\xbc\x5c\xd2\x4b\x96\x59\xe5\xb7\xcd\x62\x86\x2f\x73\x50\x37\xbe\x14\x0f\xf4\xf5\xf4\x0a\x06\xfc\x12\xe6\xf9\xfe\x22\xde\xc5\x57\x38\x38\xf4\xaa\x99\xe6\x2b\x37\xcd\xbb\xb8\xa2\x90\x96\x5e\xe2\xfa\xb9\xb4\x51\x24\x69\x67\xc5\x14\x93\x26\xd0\xa6\x74\x3f\xb1\x5a\xbd\x50\x2a\x17\x86\x35\x5e\x22\x24\x4e\x78\x6e\xf9\xc0\x2b\xb9\x72\x00\x17\x81\x3a\x68\xd7\xf9\x38\x88\x82\x9e\xe9\x3b\xcc\x55\x5a\xc4\x6a\x7a\x51\xe4\xe5\x27\x2e\xad\x60\x7e\x38\x1b\xa8\x06\xde\xc8\x9c\x45\x80\xa0\x03\xce\xff\xf4\xe9\xd6\x3e\x68\x1f\xea\x12\xde\xa4\x8a\x9f\xce\x16\xae\x3c\x56\x71\xe5\x6a\x09\x9d\xd7\xde\x51\x7a\x2c\xd9\x50\x12\x70\x24\x82\xea\x06\xa3\x3d\x39\x5c\x1f\x49\x0e\x46\xe1\xc1\x72\x67\x47\x4c\x05\xfe\x2b\xb4\x50\x0e\x5c\xc6\xb8\x41\xc2\x95\xf1\x56\x0f\x29\xe0\xf5\x78\x1e\x8a\x4e\xda\x8c\x1e\x5c\xf2\x61\xf0\x9d\x13\x7a\xd0\x49\x57\xf4\xb3\x88\x53\x15\xca\x28\x52\xd5\xf2\xb0\x83\x28\x90\xae\x70\x65\x1f\x18\xbc\x40\xfb\x0c\x8c\xd0\x47\x36\xb4\xcb\x71\x3a\xf7\xef\x4e\x54\xe8\x21\x22\x5e\x0b\xf9\xe9\x5d\x0e\xa0\x08\x45\x19\x2b\xe8\x25\xad\x50\xe3\xc3\x16\x49\x34\xc9\x3e\x3b\xb7\xde\x7e\x9a\x08\xef\x4d\x28\x00\x95\xed\x80\x0d\x8d\xbf\x9d\xcd\x7c\x00\x78\x61\xde\x87\x0e\x35\x1a\x18\x61\x73\x28\x19\x0e\xa8\x02\x95\x61\x6f\x2f\x9f\x36\x9d\xd8\xa4\x9f\xbf\xb7\x63\x8c\x3e\x47\x68\xc1\x78\x0e\x32\xd6\x6a\xd1\xf4\xab\x24\x09\x88\xb2\x2c\x93\x56\xb1\xc2\xfc\xb0\x50\x7b\xf8\x09\x76\x95\xbc\x82\x6b\x77\x86\xbf\x07\xd9\x22\x8c\x64\x59\xb2\xd3\x54\x36\x0c\x0c\x6d\x52\x97\x4c\x93\xdf\xd4\xe1\xe9\xda\x6a\xdd\x2b\xff\x0e\xd0\xc5\xe2\xe1\xae\xae\x87\x59\x5d\xef\x1a\xd4\x88\xac\x41\x61\xd8\xf9\xa8\x11\x99\x6f\xf8\xb9\x66\xb3\xe3\xe1\x32\x8a\xd6\x27\xa9\xef\xcd\x73\xc9\xd2\xb3\xf5\x79\x53\xdd\xd9\xfa\x7c\xb0\x8c\xa2\xdc\x58\x04\x36\xf3\x0a\xdc\xa5\x73\xca\x55\x2d\xca\xc4\x1f\x2b\xab\x67\xe8\x8d\xf9\x09\xbb\x6b\xd0\xa3\x48\xc2\x98\x43\x0e\x5a\xb6\x8a\x6f\xea\xfd\xc7\xb7\x8c\xcd\x5a\xd3\x62\xb4\x52\xc6\x63\x6f\x75\xb9\xf5\x7a\xea\x74\x5a\x61\x4b\x86\xab\x17\x84\xea\xa0\x87\x0a\x7e\xf1\xac\x84\xed\xbd\x4e\x19\xf7\xd8\x1d\x20\xc2\x8f\x4d\x78\xac\xc6\x63\xa2\x40\xe5\xf1\x4c\x9d\x53\xc4\x83\x01\x8b\x11\x0f\x43\xa1\xcb\x44\x8b\x0c\x19\xe8\x06\x35\x19\xdc\xb7\x07\x14\xc2\x02\x29\x5a\xff\x5e\x6d\xd9\xb6\x7b\xc5\xa2\x39\x35\xea\xf5\x34\x65\x72\x31\x99\x27\x6a\x12\x7b\x44\x27\x2f\x4b\x0e\x36\x1b\x8b\x39\xff\x26\x01\xc7\x67\x15\x53\xc7\xd5\x69\x7a\x3c\x99\x54\xb0\x95\xaa\x13\x8b\x97\xe8\x46\x0a\x3f\x8d\x8e\x07\x28\x75\x57\x46\x6e\x54\x84\x9e\xd9\x86\xb2\xae\x31\xbf\xdb\xef\x56\xad\xca\x6c\x8b\xb5\x88\x0b\x33\xa9\xfa\xf8\xf1\xbc\x6b\xa5\x17\x6f\xf3\x3f\x39\x39\x36\x2c\xb2\xe6\xe9\x4e\x77\x20\x74\x64\xd5\x64\x4e\x4b\xb6\x6b\x44\x8a\x56\x3e\x4d\x53\x26\x4e\x4b\x4b\xd0\x9e\xe4\x71\x49\xc5\x64\x4e\xbc\x46\x39\x99\x0a\x4b\xf5\x32\xc1\x91\xa5\x29\x49\x76\xf6\x83\xd0\x12\x89\x91\xa0\x2a\x74\xbc\x0f\x4b\x10\x0d\x6d\x69\x6a\xf5\xc6\x34\xdf\x3a\x99\xd7\xb5\x80\xa5\x57\xd7\xe2\x94\xe5\x1e\x28\x9c\x38\xb1\x4e\x14\x07\x32\xdc\x11\x41\xed\xd0\xf9\xf1\x58\xec\x51\x16\x1e\x97\x0d\x29\x16\x84\xa6\x9e\xf5\xba\x0a\xb0\x7e\x9c\x8f\xd0\x06\x70\xcb\xb3\x1c\x0f\xd3\x22\x28\xa8\x8f\x1c\x35\xe9\x16\xd0\x86\x94\xca\x9a\xe3\x3e\x74\x4f\xd8\xa8\x82\x87\xe1\x06\x80\x04\xfc\x95\x5b\xe5\x1f\x7d\x89\xda\x4a\x3e\xa2\x23\x7d\x91\xa1\x92\xa1\xa7\xe4\x69\xdb\xbb\xef\xe2\x40\x78\xac\x48\xa2\x2c\xde\x26\x84\xd0\x92\xdd\xc2\x0d\x6b\x9b\xca\x8a\x3f\x2b\x55\x2c\x7d\x63\x61\x62\x4c\x9e\xba\xb1\x28\x08\x74\x6f\x2b\x79\xf5\x32\x7d\x69\xcc\xc0\x48\x5d\xdb\x4f\xe4\x52\x8d\xd8\x2d\x74\xca\x48\xa8\x27\xe7\x58\xfa\x23\x2c\xc4\xa4\x39\x6a\x42\xcb\x5c\xcf\xea\x3a\x9c\x93\xbb\xfc\xfe\x4d\xa0\xf4\x49\xd7\xff\x46\x53\xda\xea\x2f\x95\x66\x26\xbb\xa7\xb8\xf6\x6c\x6f\x95\x67\xc2\xcf\xad\x7c\xd4\x4c\xf5\xed\x26\xdd\x26\x6e\x52\x41\x57\x12\x06\xc7\x0b\x83\xef\x7d\xcb\xe7\x1c\xef\x58\xf8\x43\xe1\xc6\xbe\xff\xae\xf2\xab\xb3\xf2\xbc\xbf\x0e\x1d\x83\xf5\xdc\x51\x07\xa8\xe9\x99\x6a\x88\x23\xf4\x7f\xb7\x1a\x8a\x22\xf9\x64\x38\xf3\xe8\xf6\x46\x75\x04\xad\x17\x3a\xe8\x12\xf9\x3a\x88\xf0\x6c\xb1\x54\xa3\xb8\x72\x00\x3b\xb2\xc3\xe3\x91\xce\xac\x22\x00\x1f\x82\x12\x9f\x77\xfc\xc9\xdc\x81\x88\xa5\x4e\x19\x82\x62\xbd\xd4\x15\x99\x9f\x63\x04\x09\x5d\xc8\x04\x3c\xfb\x7b\xa6\x16\xa6\x0f\x86\xb3\x7b\x97\xa3\x90\x04\xfa\x20\xc9\xa0\x8c\xa2\x21\x42\x46\x2d\x4a\x86\x82\xdd\x28\x2a\x3d\x4c\x58\x80\x4e\x2b\xa9\xa4\x88\xc6\xed\x8c\x58\x42\xb7\xe6\xc4\xd8\x76\xf5\xe9\xd8\xe8\x2a\xf5\xa5\x4b\x91\xc0\x81\x40\x0f\x7e\x17\xbf\x3e\xfa\x55\x59\x9d\x60\x68\x1d\x76\xce\x38\xe2\xca\x59\x89\x40\x5e\x0c\x70\xbc\x4a\xd2\xc0\xfa\x03\x64\x06\x62\x65\xfc\x2e\x5a\x2e\x08\x1b\x77\xcf\x00\xd5\x55\xee\x11\x07\xda\x14\xb9\x55\x71\x89\x95\x99\xf5\x04\x4a\x84\xe8\x1b\x2d\x29\xa9\xe4\x99\x51\xc5\xd4\xeb\x2c\xf7\xb6\x89\x71\xf0\x6a\xd7\x53\x3e\xc5\x1f\x74\x9d\x56\xb8\x0f\xab\x64\x38\xf7\xd6\xd8\x85\xf2\xdf\x17\x94\x49\x0e\x7a\x32\xfa\xb4\x85\xe3\x87\x16\x4c\x8e\xe3\x12\x10\x9c\x1a\xcd\x26\xa8\xa7\x0b\xc0\xb2\xa8\x98\x89\x3b\x2b\xce\x93\x58\x4d\x75\x5b\x01\xe0\x40\xff\x30\x10\x8f\xc8\x93\x1d\x30\xa5\x25\x54\x4d\x9b\xe6\xd6\xf5\x41\xa8\xef\x5e\xb7\xa7\x39\x2b\xa3\x08\x08\xa0\x01\x99\xb7\x7b\x6d\x6d\xcb\x2b\xa3\xa8\x09\xbd\x46\xb8\xd7\xbc\x41\xd7\x6b\xa5\xd7\x17\x07\xd4\x37\x6a\x65\x62\xf9\xa0\x79\x14\x54\x6d\x05\x5f\x38\x5e\x5c\xa7\xaa\x58\xb3\x3c\xb3\xe3\xca\x31\xba\x93\x39\x58\xd6\x18\x59\x79\x8a\x78\x36\xe9\x59\x35\x9e\x9f\x0f\xe0\x56\x92\x5e\x54\x71\xd1\x60\x51\x9a\xdb\xf5\xe9\xfd\x28\x12\xc8\x07\xbb\xd8\x31\x20\x55\x92\x7b\xf7\x27\x06\x6a\x76\x6f\x52\x38\x09\xab\x0d\x87\x5b\x11\x80\x03\xe3\x6c\x84\x23\x0d\x1b\x26\xae\xd8\x01\x75\x15\x0a\xea\xeb\x0a\xd6\x1a\x3c\xe9\x5a\x18\x4e\xba\x63\x56\x39\x3d\x63\xa0\xac\x4e\x97\x9e\xfe\xba\x1e\xbd\x6f\x18\x2b\x9c\x0a\x70\xc3\x39\xa2\x2b\xff\x7f\x1e\xaf\xf5\x48\x00\x2a\xf2\x2e\x8a\x1e\x09\xf3\x7c\x63\x90\xc1\x8c\x79\x11\x42\x6d\x80\x2f\xe1\xf1\x8e\x90\x63\x32\x99\xec\x60\x02\x8e\x83\xa8\xec\xc4\x7c\x3e\x29\x97\x7f\xa9\xac\x4c\x97\x35\x1e\xc3\x85\x15\x90\x03\xff\xcb\x82\x94\x67\xa8\x85\x8f\x65\x4d\xfc\x4c\x24\x67\x85\x8f\xf5\x76\xc8\x26\xdc\xc2\xba\x89\x43\xd0\xc3\xc4\x48\x88\x5e\x0b\xc0\x6a\xc9\x48\x67\xd9\x0c\x72\xb6\xb2\x0f\x61\xab\x33\x67\x1e\x50\x2e\x56\x6e\x21\x25\xb3\xf3\xe4\xa3\xc2\xdb\x4e\x1e\x16\xd5\xd7\xaa\xba\xfe\xa8\xf0\xe9\x42\xf3\x23\x75\x9d\x23\x23\x52\xd7\xba\xd7\xa8\x28\x3f\xc8\xd8\x8e\xee\x26\x6c\x4e\x97\xd6\x22\x61\x0f\x63\x33\x9f\x03\x6b\xdc\xb5\x58\x36\x3c\x55\x95\x49\xce\xcb\xba\x36\x6f\xd4\xf0\x35\x2d\xc4\x65\x9e\xa5\xc5\xaf\x8f\x5f\x3f\xab\xeb\x6e\x98\x4b\xb7\xe4\x57\x79\xc6\x31\xd9\xd0\xb7\x3c\xd5\xdb\x0f\x30\x98\x7f\x74\x07\xd6\x8f\xc2\x63\x01\x81\xf5\xab\xb6\x69\xd9\xf0\x7e\x07\x89\x0b\x2d\xf5\x08\x29\x3a\xa3\xf3\x83\x23\xe4\x74\x62\x8c\xfb\x04\xbd\x15\xf1\xc1\x63\x62\x98\xb8\xd3\xf9\xbe\xf1\x13\x71\xa4\xcc\x39\xd9\xed\xdb\xbd\x4e\xd7\x68\xd9\x4a\xf6\xbe\x93\x4c\x87\x38\xb2\xaf\xd9\x4f\x05\x95\x7e\x2d\x0d\xbf\xa9\x70\xc2\xbe\x96\x54\x89\x6d\xa2\xf4\xde\xfe\xba\x74\x28\x18\x66\xcf\x7f\x5d\xea\xed\xde\x60\xf5\xdb\xd3\x86\xe0\xb5\xf8\x76\x07\xe0\x1b\x4b\x56\x32\x27\x4f\x6e\xc3\xda\x37\xf8\xd8\xf1\x8a\x15\x9d\x95\x49\x9c\x6d\xf3\x5d\x0b\xb3\x38\x34\xc8\x7b\x6f\xbf\x0d\x77\xfa\x1a\x97\xd7\xf5\x10\x17\x65\x14\x0d\xcd\xaa\x34\xb2\x9f\x6d\x67\xbf\x05\x4d\x39\x9b\x9d\x0f\x72\xb6\x5d\x18\x6e\x1d\x65\x97\x86\x39\xc7\x87\xaa\xc0\xbb\x35\x8c\xdb\x16\xa4\x98\x66\xd4\xb6\x66\xd4\xf6\x7a\x23\xe9\x0a\x37\xe0\xce\x76\x3b\x41\x3a\x09\x49\xaf\x58\x6e\xe9\xa9\x17\x7a\xc9\xe2\xcd\xf8\x8a\xdc\xbb\x4f\x2f\xec\xd9\xd6\x3a\x40\x80\x48\x21\xa5\xbb\x70\x43\x13\x45\xc3\xf8\xf2\xe4\xe2\x6c\x7d\x4e\x80\xfa\x1d\x83\x19\x3b\x5b\x2f\x2e\xce\xd6\x93\xf9\x79\x32\xa3\x1f\x99\x8e\xa5\xd7\xe6\x0a\x12\xbb\x11\x5e\x2e\xcc\xd8\x24\x38\x58\xc4\x36\xc7\xeb\x75\x8c\x6f\x0a\x98\x18\xf2\xdb\xf1\x0c\x12\xeb\x71\xb8\xb1\x63\xf0\x71\x3f\xe8\x90\x84\xf8\x7a\x7a\x21\x2e\x77\x70\x34\x0c\xfe\xc2\x3b\x2a\xe4\x90\x4a\x6c\xd9\x86\x5e\x4f\xa5\x91\xd1\x5f\xb9\x1d\x75\xbd\x77\x87\x0a\xc1\x92\x81\x33\xb0\xec\x02\xab\x08\xa1\xd8\xdf\xca\xef\x4e\x65\x84\xcc\xba\xbd\xf9\xa2\x82\x1a\x40\xbd\xc5\x4d\x20\x84\x9a\xdf\x95\x9d\xcc\xfd\x5b\xde\x42\xb1\xc8\xcb\x5c\xf5\xa0\x24\xa9\x75\x5e\x69\xa2\x81\x86\x6c\xd4\xb8\x56\x35\x78\x53\xec\x1d\x8f\x9d\x67\x54\x6b\x19\x68\x1d\xbf\xb4\xbc\x3b\x54\xd6\xbb\x95\x12\xb1\xa4\x1c\x15\x68\x7a\x55\x34\xc9\x0d\x67\xb7\xd6\xec\x3c\x19\xce\xd1\x48\x1c\x3c\x12\x39\x4d\x83\x2a\x26\x7b\xaa\xfa\xac\x1c\x41\x8e\x1a\xda\x4d\x1e\x32\x86\xcc\xa7\x57\x69\xb1\xe3\xac\x6b\xd8\x4e\x2f\x45\x9c\x13\xe2\x1e\x98\x86\x32\xdc\xfe\x79\xc5\x1f\x89\xed\xcd\xa3\x9d\xbd\x3b\x19\xbd\xbc\xcf\x3c\x96\x64\x10\xb6\x7f\x86\xed\x47\x96\x77\x4f\xc1\x62\x1d\xe0\x81\x6f\xb6\x7c\x21\xa7\x55\xd0\xab\x46\x0b\x10\x8c\x89\x04\x49\xda\xbd\xb1\x8d\x2e\x0f\xb4\x79\x1f\x54\x00\xee\x06\x7a\x8c\xd3\x67\x64\xbf\xe7\xfd\x7e\x47\x4b\xda\x44\x78\xb0\xa9\x60\x08\x99\xb7\x40\x8d\x00\xff\x0b\x7d\xcc\xa2\x05\x7e\x20\x96\xd3\x34\xec\x94\xfd\x97\xe6\x29\x7d\x93\x53\x98\xa1\xc0\x06\xd5\x82\x86\x6e\x45\x51\xc4\x9e\xdf\x5a\xb4\x45\x0f\xb1\x16\xcc\xf2\xa9\x6b\x30\xaa\x97\xe0\x88\xa0\xd7\x28\x5f\x0f\xfc\x74\x95\x56\xea\x35\x94\xea\x15\xab\x07\x88\x56\xee\x4b\x6c\x6f\xec\x67\xe3\x24\xab\xa7\xf2\x92\xdc\x56\x12\xae\x31\x75\x0d\xad\x28\xbf\x54\x39\xc2\x71\xd8\x9a\x3d\x61\x0f\x1d\xe1\xeb\x35\xb0\x86\x7e\x1d\xca\xd4\xa1\x48\x5d\x3f\xd4\x37\x3f\xaf\xd5\x68\xa0\x0b\xeb\xa4\x9d\xcd\x5a\xe8\xc2\x26\x41\xe2\x13\x8f\x56\x52\x6c\x46\x64\xa0\x1a\xd3\x5e\x50\x2a\xb2\x1f\xb8\xd2\x9c\xcb\x5c\x2f\x86\x99\xe7\x3e\x8e\x66\xd2\x89\x04\x35\xb7\x77\xfc\x33\x5c\x41\xfd\x2a\x94\x18\x11\x7a\xeb\x50\x15\x93\x40\xa5\xc2\x16\x37\xda\x93\x7d\x6f\x37\x78\xb9\x0c\x3b\x11\x34\x35\xb6\xeb\x81\xfe\xb5\x46\xc3\x22\x02\x3c\xa0\xb6\x5a\xd2\x01\x68\xa0\x6c\x43\x7b\xdc\xab\x6b\x12\x67\xaf\x48\x9e\x44\x5c\x5c\xa1\xfa\xea\x2f\xb9\x5a\x63\xef\xad\xaa\xfa\x23\x1c\x95\xae\xc2\x2d\x3e\xec\x13\x80\x76\xb7\x1b\xea\x10\xeb\x95\x7a\x5e\x01\x0e\xb1\x5e\x7a\xc7\xbf\x13\x5b\x5f\x33\xc6\x7b\xa4\xe9\x73\x83\x36\x99\xcf\xc0\x5e\x69\x3b\x4e\xe1\xc8\x16\xf6\x15\x7a\xaa\x40\x43\xef\x2f\x15\x85\xb2\x30\x28\x09\xf8\x05\xd4\x0f\x99\x98\xd7\xe8\xc6\x3a\x64\x4f\x03\x65\xb1\x03\x67\x89\x67\xcb\x32\xf8\x5d\xf8\x0f\x77\x28\xa8\xa8\x84\xac\x08\x85\x18\xdf\xd5\x0a\x6a\xf6\xe2\x27\xbe\xa2\x23\x0e\xf3\x3b\x70\x3c\xe2\x9f\x49\x9e\xc6\x8d\x49\x80\xda\x36\x3d\x69\x0c\xa8\x1c\x8e\x85\x71\xc7\x48\x25\xaf\x78\x78\x10\xc2\xa1\x85\x26\xf2\xa5\xa6\xb9\x2f\x78\xb9\x7b\xcd\x61\x7e\x4c\xcf\xf4\xa9\xed\xd6\x54\xce\x4a\xfb\xca\xd7\x6b\x6a\x60\xf4\xd9\x7d\xa2\x6e\x44\xd9\x79\xcb\x54\xa6\x60\xb1\x62\xff\x11\x51\x14\x7b\x7a\x65\x93\x50\x09\x0d\xa0\x30\x62\xc9\xca\xe0\x78\xf4\x59\x50\xfe\x0d\x21\x8b\xd1\x64\x94\xc8\xba\x6e\xa7\x1a\x04\x27\xb7\x39\x59\x0a\x5a\xb6\x1d\x48\x5f\x8a\x38\x48\x89\x48\xf2\x40\xdb\xe3\x2e\xa4\x40\x61\xde\x97\x34\xcf\xd3\xea\x6b\x5f\x7d\xa3\xd1\x9d\xa5\xa1\x56\xe8\xe0\x20\xaa\x81\xda\xef\xe9\x25\x57\x4f\x73\x5e\x2c\xbb\x20\x5c\x47\x41\x8d\x7b\x5a\xed\xb6\x5b\x21\x55\xf5\x4e\xec\xb2\x75\x37\xf9\x70\xbe\xa7\xd0\x6b\x3f\x2a\x5f\xc5\xa3\x52\x18\x3d\xb0\xa1\x5b\xc6\x96\x36\x48\x83\xba\xa2\x19\xf5\x4d\x5d\xa3\x67\xa1\x70\xb8\x88\x92\x37\xb7\x61\xdf\xad\xb3\xed\x2c\x55\xd9\x3a\xfe\x4e\x00\xaa\xd7\x45\xb1\x0b\x80\xbe\xc2\x2c\x3a\x36\xb6\x4b\xf4\xb5\xd5\x79\x6a\x27\xef\xee\x83\x43\x4b\x7f\xa6\x8b\xca\x78\x7e\xc5\x97\x4f\xdb\x7d\x86\x3c\x55\x21\xae\xf1\xf4\xdc\x53\xfb\xbb\x9f\x98\x0e\xb8\x8f\x4c\x51\xd7\xee\x13\xdf\xc5\x5b\x23\xa6\xe3\xac\xca\x40\xcb\x73\xb9\x21\xf9\x60\x24\xd0\x5a\x84\xdc\x6f\x8f\xa6\xf3\xf6\x70\xef\x36\x49\x33\x8d\xd8\x2e\x15\x22\x66\xcc\xa8\x0a\x5a\x76\x7f\xd6\xc2\xb2\xb3\x87\x4e\x5d\xf3\x45\xac\x3a\x70\x1b\x5e\x13\x48\x12\xf3\x6e\x81\xff\x9a\x51\x49\xcc\x31\x74\x70\xb4\xf0\xe8\x09\x26\xd7\xf2\xd8\x6e\xab\x80\x96\x40\x3f\xd5\x01\xe3\x8c\x16\x16\xd8\x0f\x22\x56\x24\x8a\x86\x32\x8a\x86\x21\x9e\x87\x9e\x8c\x10\x1a\x88\x1f\x80\x06\xb2\x85\x7e\xe2\x37\x6f\xf9\x1f\xa1\xb3\xb8\x52\x5f\xe1\xf4\x76\x05\xba\x06\xea\x52\xba\x11\x3d\xe4\xcd\x65\x33\xb7\x58\xe4\x00\x3b\xdb\x9a\xb1\xb2\xae\xaf\xa2\xe8\xde\xd9\x87\xdd\xea\xbf\xcd\x66\x13\xfd\x67\xb5\x3a\xbf\x87\xe8\x36\x25\xe9\x0a\xe0\x51\xe9\x18\x56\x7f\x6c\x5d\x65\x3a\x10\x19\x1f\xda\xa0\xe2\xc5\x53\x21\x1f\x35\x03\xd7\x00\x45\x67\xeb\x54\x3e\x42\x10\x20\x84\x0d\xf8\xf7\xfd\xd9\x37\x43\x96\xd7\xb5\x04\x3a\x3a\xfa\x1f\xff\xff\xff\x73\x44\xe8\xbf\xff\xf5\xaf\x7f\x31\x96\x13\x9f\x88\xd8\x8a\xed\x6a\xe6\x9f\x79\xf6\x48\x6c\x36\x69\xb9\x8c\x47\xbb\x72\x29\x46\x64\xef\xe1\x06\x39\x0d\xca\xbc\x74\x7e\x77\xa9\x35\xdb\x23\xc7\xd5\x49\x11\x45\xd2\x6f\x4f\x05\xc6\x69\x41\xc0\x31\x19\x8f\xed\x4b\x2d\x2c\x67\xd3\x9e\xce\x0b\x38\xa0\xba\x95\xc6\x00\xa4\x22\xd4\x56\x38\x31\x37\x89\x5d\xb3\x1e\x16\xa3\xaf\xf1\x37\x1f\xa1\xc6\x94\x6b\x94\x3e\x2b\xf4\x19\x61\xe1\x8c\xe0\x5a\x71\x3a\x99\x2f\xcc\xd4\xb3\x5d\x70\x6a\x25\xfe\x67\xe9\x57\x11\x45\xf1\xee\x20\xcf\xd6\x89\x61\xbc\xe1\x2f\xfd\x48\x94\x9b\xf2\xff\x19\x7e\xd3\xc2\x57\x51\x74\xd8\xad\x37\x2c\x5f\x76\xc8\x9b\xb7\xb9\xcd\x0a\xc5\xbd\x6f\x8f\xa1\x70\xf3\x93\x3d\x15\xe5\x0f\xfc\xe6\xb5\xe4\x55\x40\x2a\xbf\x78\x78\x19\x57\xb2\xee\x2a\xa2\x0b\xf2\x16\xe7\x1d\xb7\x6e\xbc\x72\x4b\x4f\xb3\x57\x35\x14\xa3\x60\x85\x84\xbb\x10\xdd\xb1\xb2\xcf\x7d\x7a\xbe\x8a\x8b\x28\x1a\x66\xe4\x56\x7a\x87\x95\x7f\xe1\x7c\xe5\xb7\x23\x8a\x26\x73\xa6\x2b\x33\xa8\x4c\x9a\xf0\xa4\x79\x59\x01\x74\xfc\x0f\x2a\x96\xf4\x17\x4e\x62\x88\xa7\x2f\x79\x5c\x10\x7d\x3f\x1d\xa0\x32\x8c\xbd\x18\x66\x55\xa5\xe7\x91\x7a\x4e\xeb\xc2\x98\xc1\x81\x70\xd6\xa3\xc4\x3b\x32\x38\x72\x5f\x64\x9f\x7d\x75\xf3\x3b\xca\x6b\x40\x82\x66\xbe\x9a\x2f\x7e\x19\x05\xe1\xd8\xe2\xf0\xbe\x9f\xac\x80\x67\xfe\xd6\x28\x05\x7b\x3e\x15\x30\xc1\xaf\x93\x15\x72\xc2\x36\xc5\x9f\x13\xd8\x38\xc9\xd1\x7c\x36\x9b\x1d\x1f\x35\xfe\x2a\x20\x9b\x58\x8c\xe4\xe5\x45\x1a\xdf\xff\xf6\x5b\x7a\xd4\xfc\x37\x9d\x7d\x4b\x46\xc9\x48\xc9\xb4\xac\x50\x8c\x37\x22\xe3\x51\x0b\x19\xe9\xf8\x08\x91\x87\x26\xa6\xfd\xb3\x4e\x7c\x17\x23\x49\x6c\xd3\x2c\x57\x37\x89\xae\xe1\xf8\x68\x95\x17\x8a\xcb\xe4\x28\x2d\xb6\xeb\x34\x36\x71\xec\x5b\x72\xac\x6f\xbe\x28\x46\x6c\xe4\xd4\xa2\x28\xde\x23\xfb\x1a\xc2\x4a\x56\x51\x14\x24\x7a\x27\x10\xc3\x73\x0b\x2a\x1b\x01\x71\xee\x15\xec\xd4\x75\x6c\xa5\x17\x81\x50\xe3\x68\x84\x37\xb9\xf6\x39\xa7\x4f\xd7\xb2\x4b\xcc\x9b\x25\x8a\xc8\xa8\xef\xf2\x0d\x17\x3b\x15\x97\xd3\x25\x57\x68\x31\x81\x75\x3e\xd0\x7b\xcf\xed\xce\xab\x98\xd0\x6b\x72\xfb\x55\x6e\xdd\xfe\x6d\x7c\xe8\xd2\xff\xe4\x31\xf6\x8d\x8e\x36\x62\x57\xf1\xdd\x76\x44\x37\x84\x56\x5c\xd9\xe2\x2f\xe9\xfd\x19\xd9\x0f\xbe\xeb\x4d\x68\x70\x23\xfd\xd4\xdf\xfa\x08\x0c\x57\xb1\x27\xab\xcf\x9b\xbb\x0c\xbe\x99\xb8\xdb\x7b\xcf\xa0\x51\x81\x67\xd2\x38\xe6\x0b\x33\x7a\xc9\x68\x44\x06\x76\x24\x47\xff\xe3\xff\xf8\xbf\x1a\xa9\x90\xa0\xfe\xc8\x72\xd0\xaf\xd4\xb9\x69\xbb\x4e\x36\xf7\x83\x9e\x94\x4b\x26\x9a\x33\xea\x8e\x21\xf7\xde\x47\x2f\x63\xa3\xea\xd7\x37\x73\x9a\x57\xea\xdf\xe8\x6b\xda\xde\xaa\x4b\x6a\xa5\xdd\x65\x03\x64\x5b\x4d\x7d\x40\xdc\xb8\x8f\xc0\xb1\x9d\xbd\x0a\x76\x47\x14\x74\xaa\xb1\x58\x02\x73\x3f\x30\xc0\xb4\xb4\xf2\xa7\xbd\xaf\xaf\x4d\x67\xe1\xb9\xab\x5d\x76\x14\x85\x03\x77\x3a\x8b\x22\x18\x63\xe6\xaf\xea\x05\x10\xcc\xcc\xda\x2d\xe9\xa5\x18\x4b\x92\xf0\xf1\xf8\x64\x3e\x5b\xf4\x2d\x55\xe6\xad\x9e\x8a\x7e\x3b\x9b\x91\xa4\xb5\xab\xf6\x83\x2f\xe7\xbb\x3f\x9b\x91\xfd\x5e\x33\xf6\xc8\xef\x19\xcb\xda\xe0\x8c\xe1\x75\xed\x33\x34\x00\x3d\xdc\xf8\x3c\x48\x3e\x0a\x5a\x72\xbe\xac\x0c\x46\x8c\x03\x46\x4b\xf4\xe5\xc8\x97\x1b\x13\xfa\xe2\x6f\x4a\x91\x8d\x08\x79\xba\xcc\xaf\x8c\x7f\xa5\xc7\xf9\x55\x23\x23\xce\xff\xd7\xcb\x88\x5b\xd2\x50\x69\xdd\x7c\x35\x97\xe0\x91\xb5\x2d\xd1\x29\xff\xae\xc8\x57\xdd\x25\xf2\x55\x7d\x22\x5f\x30\x30\xdf\x72\x99\x42\xe5\x3e\x0f\xd7\x96\x05\x3b\x93\xf8\x99\x3e\x68\xe9\x17\x9b\xae\xd9\x1e\x54\x14\x0b\xe1\x45\x87\x5b\xd2\x83\x17\xda\x06\x1d\x05\x52\x0a\xb0\xa3\xdd\xb8\xaa\x07\x90\x94\x76\xa5\xe6\x9e\x66\x7f\x69\x9f\x06\x82\xc7\x00\x19\xa8\x79\xa0\xda\x5b\x4b\xf6\xdc\x97\xc4\x97\x42\x1f\x96\xd9\x1b\x55\x4c\x67\xf2\x94\x66\x2a\xbf\xe2\x4f\x10\x72\x7c\x00\xc2\x71\x9f\x9c\x87\x23\xdf\xad\x34\x74\x0c\x43\x85\xbb\xb0\x13\xa0\xec\xfb\xfd\x2b\xae\xc3\xbf\xcb\xe3\xf2\xaf\x09\xaa\x8d\x08\xb4\xbc\x5b\x92\xcb\x3d\x4d\xd4\x54\xa5\x03\x43\x60\x1b\xc9\x2c\x2f\x92\xe6\xfc\xd3\x49\x92\x92\x42\x29\x8f\xe1\xf7\xbe\xc1\xd0\x68\x38\xb9\x46\xa4\x24\x50\x44\xfc\x3c\x2f\x79\x1c\xe0\x86\x5a\x9e\xbf\xa4\x9e\x4c\xd0\xe1\x87\x4e\xdc\xbd\x85\x0c\x04\xb8\x97\x16\x27\xcc\xc5\xa2\x02\x7e\xc3\xb7\xf3\x82\xbd\x04\x00\x2a\x1f\x6a\x54\x00\x60\x57\x10\x32\x6e\x4a\x75\x12\xe2\x70\x78\xac\xcb\xdd\x70\x60\xbd\xba\xf4\x00\x98\xa1\xea\x2d\xa0\x25\x62\xe6\x8d\xe3\x40\x57\xc6\x40\x02\x56\x01\x94\xc4\xe4\xd4\x8d\x65\x5d\xdf\xfb\xb0\xbb\x3f\x9b\x5d\x98\x1b\x29\x26\x41\x91\xbf\x57\xed\x1d\x8b\x0a\x7d\xd4\x2c\xeb\x5a\x21\xe2\xf9\xa3\xa6\x5d\xb1\x0c\x85\xd7\x4c\x86\x83\x68\xa5\xd9\x7a\xad\x79\x2b\x47\x89\x5d\xb6\xee\x91\xfe\x1b\x9f\xf1\x5e\x05\x4f\xca\x65\xec\x65\xec\x79\x9d\x51\xbe\x88\x60\x28\x03\x19\x41\x14\xa1\x54\xc3\x1c\x01\x9a\x75\x7b\xaf\x62\x20\xdf\x81\xb8\x46\xc6\x08\xc1\xef\x0d\xfd\xf6\x66\x44\x73\xf7\xa9\x2b\xcd\xff\x9a\x48\xde\x89\x89\xe8\xd0\x99\x95\x1f\x19\x09\x87\x93\xb9\x05\x52\x0f\xca\x0f\xcb\x9c\xc1\xb8\xc3\xdc\xea\x3c\xf8\x24\x0f\xce\x30\x8a\xe2\xd8\x14\x55\xd7\x0e\xf8\x5e\x97\xf7\x1a\xb7\x8b\x27\x27\xa5\x2e\xee\xc5\xae\x50\xf9\xb6\xe0\x1e\x9d\xe6\x84\x60\x3b\xda\xf9\xba\x9d\x6c\xf4\x6b\x83\xc2\x1b\xc9\x78\x67\xc3\x96\xec\x11\x77\x03\xc3\x0d\x0a\xc4\x4b\x74\xf7\x99\x7a\xb0\xa1\x9a\xd6\x06\x29\x57\x16\x3d\xd4\xfe\x36\xe9\x06\x16\x48\x72\x7a\x91\x2e\xeb\x7a\x98\xd7\x75\x8e\x3f\x67\x80\x06\x75\x89\x38\x51\x0d\xe2\x9a\x8d\xb8\x72\x11\x00\x80\x66\xb5\xc2\x5e\x37\x95\xba\x2c\x34\x0d\x83\x21\x03\xc8\x83\xea\xda\x01\x41\xf4\x4d\x0d\x2d\x18\xc7\x53\xef\x91\xd8\x95\x2a\x8a\x1a\x48\x5f\x27\xb0\x41\x03\x93\xa1\x29\x67\xc7\xaa\xb3\x06\x2a\xe5\xdc\x69\x73\x64\x6c\x07\xaa\xa5\x0b\xfc\x73\x86\x7f\x9a\x84\x09\x04\x0c\x52\x76\x5b\x8a\x25\x4f\xb2\xb3\xac\x89\xa3\xa8\x8a\xed\x07\xde\x3f\x9f\x78\x5f\xdf\x9c\xef\x2d\x54\xb3\xc9\x5f\x9d\xcd\xce\x7d\x95\xd6\xb3\xfb\xae\x94\xd9\x7e\xa0\xe4\xcd\x2d\xde\x93\x5f\x0b\x83\x92\x49\xad\x9f\x5e\x9a\x36\x3f\x74\x44\x20\x11\x5e\x82\x0e\x7f\xb3\x8c\x83\xe5\xbf\xd0\x47\xbd\xd1\x24\x6b\x97\x4a\xe8\xd2\xc5\x2d\xeb\x9a\x4f\xd3\xe5\x12\x91\x91\x97\x20\xb8\x34\xc7\xdb\x83\xa2\x80\xd0\x0a\x0e\x7d\x3f\x0d\x2d\xd0\xbb\xbb\x66\x5b\x9a\x45\xb7\xf0\x12\x15\xe0\xa7\x14\x37\x86\xa6\x48\xdf\x35\x88\xb3\xa0\xa8\x88\x1c\xe6\x86\x6f\x2e\xb8\xf4\x56\xbb\x66\x4e\xdb\xe9\x0f\xc8\x94\x83\xdb\x5d\x1b\xd5\x96\x74\x71\x6e\x0f\x10\x62\xde\x02\xc3\xf5\xdf\x92\x0c\x7b\xac\x29\x9e\x81\x76\xea\xe3\xcc\xee\x86\xac\x01\x02\x08\x97\x43\xda\x4f\x21\x02\x86\xf8\x77\x11\xb7\x57\xfe\xc1\x27\xb0\x56\xba\x83\x0f\x62\x9a\xdd\x6f\x0d\xf4\x5f\xa4\x3d\x83\x3e\x5c\xe2\x80\xcc\xf4\x83\x14\x87\xc4\x87\xf6\x60\x16\xfb\x14\xa8\x17\xbf\x38\x20\x4b\xfa\x0e\x62\x1a\xf5\xac\x7c\xb2\xcc\x95\xe8\x71\xe8\xd2\xdf\x03\x30\x8d\xf6\x88\x46\x28\xb7\x56\xac\x45\x42\xf4\xa9\xb7\x11\xe5\x83\x32\xe3\x95\xc2\x8b\x5f\x9a\x97\x8d\x61\xca\x63\x33\xee\xcb\xfc\x8a\x2a\xd2\xf3\x1a\xf4\xd7\x9e\x82\x6c\x19\x8e\x6d\xec\x7f\xdb\xd1\x29\xec\xb3\xce\x97\x1e\xb1\x96\xf9\xd5\x97\xdf\xaf\xee\x7a\xd3\xf1\xb6\x16\x6e\xdb\xf6\x90\xc7\x64\xe1\x04\x9f\xde\x10\x27\xef\x9b\xb3\xf9\x6f\x6d\x8b\x00\x9e\xfa\x6f\xbc\x04\x1d\x29\x5b\x7a\xeb\x09\x28\xe6\xed\xb6\xd1\xf0\xa5\x89\x1f\x2c\x5c\x99\x57\x99\x76\x4b\xff\xea\x32\x73\x0c\x49\xb3\x37\x86\x6d\x04\x6f\x1d\x08\xc4\xd6\xdb\x1b\x9d\x44\x18\xac\x93\xb9\x0d\x32\xec\x01\xfd\x76\x09\x3a\xc5\x3c\xf5\xb7\x4d\x30\x1c\xad\x47\xcb\xd6\x43\x90\x7d\x19\xf2\xa8\xa1\xa5\xdf\x1d\x72\xf8\x17\x19\x96\xc1\x21\x2a\x6f\xd4\x3e\x35\x47\x72\x37\xd7\x52\xda\x34\x07\xf9\x15\x19\x45\x25\xd8\xfc\x85\x6e\x2b\x7e\xe1\xb1\xb2\xa2\x68\xd0\xb9\xd6\x77\xe4\x58\x22\x2b\x03\xcc\x0d\xb1\x86\xc1\xfd\xeb\x13\x2d\x01\xa9\xc7\xe6\x76\x96\x42\xd3\x51\x10\x5e\x58\x29\x3c\x48\x30\x3a\x9c\x1a\xdc\x75\xd1\x1e\x5e\x00\xae\x89\x95\x4b\x03\x1a\x8c\x74\xc6\x26\x75\x2d\x0c\xf4\x69\x83\x05\xee\xbf\x99\xe5\xc6\xec\xc7\xcf\x31\x63\x2c\xe6\xac\x94\x00\x15\x88\x38\x40\x04\xb5\xeb\xdf\xe5\x31\x26\xd4\x0c\x08\xda\xcd\x57\xac\x09\x29\xc1\xe5\x95\xe6\x54\xfc\xa4\xbc\x93\x94\x6b\xde\x09\x1c\xa2\xfa\x9e\x54\x51\x03\x1f\xaa\x15\x0d\xfa\x57\x61\xdb\xd6\x20\xd4\x21\x27\xd6\x74\x88\x66\xc6\xe2\xe5\x71\x7e\x05\x6b\x16\xef\xff\xd0\x90\x9d\xd7\x90\x62\x3c\x37\x4d\x31\x79\x9a\x50\x68\x4c\x1f\x2e\xb2\xc5\x1e\x80\x19\x68\xdc\xf8\xb4\x55\xf3\x1b\x4c\xa8\xd1\x08\xfc\x7c\xd0\xca\x78\x9c\x80\x3b\xbe\xbe\x8e\xa4\x40\xf2\x1a\xf1\x53\x11\xa3\xca\xf6\xdc\x07\xf6\x6e\x6e\x8c\x97\x6d\xef\xa2\x68\x50\x3a\x70\x72\x5d\x6b\xe1\x34\x1a\xe1\x7d\xce\xfa\xa7\xb7\x60\xcb\x46\x7e\x13\xdb\x7b\xe5\x25\x1d\x8d\x08\xa1\x57\x22\x5f\xc6\x62\xcc\x8c\x65\xfe\x8e\x66\x7d\x95\x21\x44\x1a\x56\x97\x11\xc3\x4e\x82\x13\xae\xe5\x8b\x54\x7e\x02\x94\xf9\x92\xce\xf0\x96\x0d\xb0\x4f\x34\xde\xb2\x71\x46\x7d\xe6\xc3\x11\xb1\x7c\xc9\xd8\x76\x4f\x1c\x59\x83\x36\x2c\x9b\x9b\xd1\x8e\x2d\xf5\xf2\x01\xac\x2f\xc0\x07\x13\x63\xf6\xd9\xa2\xff\xef\x10\x17\x64\x37\x55\x82\xa0\x00\xa6\x22\x28\x7b\x32\x6e\x2d\x58\xb7\x03\x38\x04\x56\xc6\x38\xb2\xaf\xbb\x83\xd0\xde\xa1\x07\x2f\x1d\x74\x80\x8b\xd8\x8f\x01\xd5\xe0\x7b\xff\x3d\xde\x4a\x5e\x2f\xf3\xab\x7a\x4b\xbe\xba\x97\xe3\x25\x1d\xe7\xed\x65\xba\xe1\x88\x71\xa1\xb7\xb9\x35\x35\xf8\xa6\x3b\xad\x2b\x13\xf2\xb3\x7d\xd9\x1e\xae\x6c\xc3\x52\xec\x74\x05\x6b\x87\x50\x31\x66\x2b\x84\xeb\x86\x37\xde\x63\xbd\x56\xa8\x1a\x32\x79\x4c\xc0\xf5\xaf\xb7\x6b\xac\x39\xe2\x3e\x56\xb4\xa2\x19\x4d\xe9\x8e\x10\xba\xd6\xe3\x87\x14\x6b\xc5\xe3\xd4\xcc\xd4\x8e\x3e\xb1\xa1\xbb\x10\x93\x98\x1c\x2f\xdd\xb3\x6c\x14\xad\xdd\xef\x63\x92\xaf\xe2\x2b\x11\x2f\x09\x63\x57\x22\x5e\x13\xb2\x9c\x6e\xc5\x36\x26\x74\x6d\xfe\xee\x26\x13\x27\xc5\xd4\xb3\x38\x64\xeb\xb3\xd9\xb9\x31\x5f\x58\x22\x82\x30\x24\xb7\xbf\xd2\xf1\xd8\x3d\x5c\xaf\xd8\x8c\x6e\xd9\x8c\x6e\x60\x01\xd0\x2b\xc8\x4b\x2f\x9b\xa7\xec\x8d\x7d\x26\xb8\x72\x4f\xd9\xab\x93\xcb\x28\xda\xf8\x2f\xd7\x2b\xdd\xb8\x30\xe0\x98\x8c\xc7\x2b\x37\xdd\x17\x0c\xba\x40\x6f\xb0\x0f\xf4\x63\x53\x81\xd3\x04\xd7\xfb\x70\xe9\x0c\x3c\x92\x19\xa1\x37\x7e\xd4\xda\x8f\x22\xc7\xdb\x93\x8f\x51\x74\xe1\xd7\xe9\x0a\xda\x4e\xe6\x84\xb1\x1b\x3f\xee\xc6\x8f\xd3\x4d\xdb\x0e\x96\x67\x4b\x0f\x98\xf5\xc2\x81\x29\x36\xc5\x10\xaa\xc7\x04\x77\x06\xc6\xae\x70\xcb\x5e\x33\x98\xd2\x15\xa1\x4f\x18\x4c\xaa\x6b\x1b\xf4\xce\x15\x90\x34\x98\x72\xcd\xe4\xd6\xb5\x2e\xb0\xae\xb7\x3c\xbe\xa6\x4f\xc8\x22\xfe\x5e\x9a\x15\xb1\xa4\xd7\xf4\x09\x75\xce\xad\xe8\x70\x46\xac\xb1\xe0\xdd\x0f\xdb\xfd\xc2\xa0\xb6\x6a\xdb\xdd\x89\x7b\x82\x3b\x59\x3b\xac\x45\x23\x98\x33\xb2\x2f\xfb\x28\xde\x91\x7f\x85\xc9\x09\xed\xcf\x0e\xfa\x35\x21\x9f\x4c\xdb\x9c\x35\xd9\xd3\x76\xe9\x5d\x1f\xa2\xd9\x26\x90\x6f\x2d\x7e\x68\x38\x5a\x2e\x89\xfd\x4d\x12\x94\xe9\x01\x00\x48\xaa\xd2\x21\xe3\x8d\x3c\x10\xde\xc0\x6d\xa6\x8f\x9c\x78\xb2\x16\x9d\x96\xce\xf0\x4a\xd6\x79\x4e\x09\x5e\x5e\xa6\x86\x10\x3e\x31\xb1\xcc\x50\xcc\x7e\xdd\x02\xc8\xd1\xf5\xf4\xd5\xd3\xa1\xba\x3e\xd0\xb8\xb7\x4a\xea\xf1\xd4\x04\xfb\x91\x59\xfe\xb1\xbd\xd7\xdb\xfd\xb0\x00\x95\x1f\xfd\x2b\x69\x02\x09\x9d\x91\xbb\x9f\x91\xdc\x44\xb4\xfb\x84\x75\x06\x3a\x73\xbc\xa3\xf4\xf0\x51\xb4\xf4\xd8\x0e\x3f\x3b\xcd\xf6\xc1\x43\x13\xa1\xaf\xf0\x5d\xec\x2d\x02\x7d\xdc\x5a\x8d\x88\xe4\x2d\xa7\xad\x83\x26\x79\xc1\xf7\xf4\x8d\xff\x4a\x75\x6b\x38\xb6\x43\xb7\x2c\x03\xf9\x17\x7a\x3c\x38\xdf\x53\x04\xbb\x6d\x2b\x86\x72\x06\x1c\x62\x83\x07\x01\x0f\x30\x2e\xdf\x90\x85\xe5\x68\xa6\x3e\x00\x24\x34\x09\x82\xb0\x86\x1b\x0c\x71\x2d\xba\x29\x01\xe1\xc2\xf2\x27\x7e\xe3\xcf\xc1\x6e\xd7\x7d\xe9\x56\xa1\x10\x4f\x5a\xe4\xd9\xd2\x62\x21\x5b\xf1\x9e\x44\x9d\xe5\xd2\x20\x22\x3b\x75\xc8\xe6\x5e\xb9\xe4\x7c\xfb\x48\x6c\x83\x91\x6b\x3c\x7e\x9e\x9d\xd3\x3b\x9b\xc9\xcf\x94\xc3\xa3\xdd\x18\xe1\xa0\x6b\xa0\x03\x66\xee\xc6\x60\x73\x06\x1d\x8f\x08\xc1\xb8\xea\x4d\xd7\x7e\x24\xec\x6f\xa6\x73\x4c\x1a\xb6\x90\x1b\x5c\x48\xbf\x72\x7e\x6e\x61\x1a\x9b\xe9\x6d\xb4\x44\xad\x76\x4c\x4b\xe6\x0c\xf6\xbc\x8c\x93\x36\x4a\x75\xb7\x4a\x69\xe7\xae\x64\x21\x6c\xb5\xf1\x52\xa1\x68\xe9\x39\xa8\x88\xa2\x2d\xaa\x78\x81\x2c\xf5\x84\xcd\x88\xf3\x1e\x80\x3f\x26\xf3\xfd\x9e\xfe\x1e\xac\x74\x70\xb4\xd8\x5d\xe6\x97\x66\x8c\xcd\x4a\x70\xbe\x3a\xc8\x9e\x2a\xd1\x93\xfe\xea\x70\x7a\x18\x9f\x43\x3b\xc9\xf3\xc7\xe7\xe5\x37\xe8\xb3\x4d\x8a\x6c\x1d\xc6\x67\xeb\x3d\x7a\x81\xbd\x51\xf4\xa3\x32\x36\x5e\xce\x87\x2e\x18\x3a\x39\xc7\xd6\x33\xcf\x2d\xeb\xb5\xea\x45\x5f\xa1\xa9\x31\x2f\xe6\x8d\xdb\x3e\xeb\xa5\xa6\x60\x1c\xad\x8b\x39\x5a\x17\xe7\xab\x58\x9d\x14\x8b\x38\x67\x33\x2a\xd8\xdc\x79\xb1\x22\x89\x3a\xd9\x2d\x04\x8b\x73\xa6\x26\x05\x19\xcf\x93\xb8\xd2\x04\xd4\x8a\x83\x01\x46\x6f\x17\x45\xba\x98\x6f\xce\x4f\x15\xa2\xa4\xc4\x82\xed\x26\x85\xbe\xd9\xa8\x53\x1d\x1b\xa7\xce\xa0\xd0\xe9\x2d\xa0\x56\x08\xd4\x7f\xff\x9c\x16\x50\x8a\x64\x0c\x54\x6f\x2a\x2e\x01\x59\x71\x81\x8d\x48\x6c\x66\x28\x49\x12\x6a\x0d\xd9\x10\xb9\x2e\x27\x68\xf1\x0b\xad\x98\xdc\x3f\x67\xba\xd0\xc9\x37\xe7\xf8\x3d\x3f\xf7\x0a\x3c\x26\xba\xc6\xfb\xe3\xb8\x9a\xb0\x6f\xc8\x79\xe3\xac\x4b\x73\xf0\xd6\x96\x4e\x46\x51\xce\xa0\x03\x58\xee\x49\xd3\x5d\xdb\x51\xa8\x62\xfc\xcf\xf3\x28\x1a\xea\x1f\xdf\x76\xeb\x88\x61\xac\x75\xd7\x5c\xdf\xad\xa7\x43\x63\xc5\x09\xd2\x73\xf3\x82\x99\xe4\x80\x2f\x27\xa8\x95\x5c\x27\x29\x6d\x2c\x8b\x93\x82\x5a\x8b\xe3\x64\xe7\xa9\xa1\x3c\x69\x10\x52\x8c\x00\x1e\xe4\x44\x01\x8e\x04\xbb\xdd\x53\xde\x31\x5f\x37\x88\x37\xe0\xff\x89\x84\xb4\x36\xc4\xb3\x00\xfa\xd5\x46\xa6\x50\xe7\xec\xd6\x77\x87\xd8\xc2\xcf\x6d\x81\x25\x60\x65\x6f\x0e\x40\x1d\x90\x41\xbb\xfa\x3e\xff\x5b\xba\x19\x4f\x54\xcb\x97\xd8\x99\x3a\xf7\xf4\x8c\x5e\x41\x2b\xa0\x2d\x1e\x52\x17\x62\xa8\xe8\xf3\xff\x17\xe3\xf3\x3e\x8c\x79\xc7\x3f\x1b\x8b\x91\x4e\x54\x03\xbc\x12\xc2\x03\xf9\x56\xb0\x81\x27\xe2\x4d\xfa\x59\x5f\xc8\x3d\x39\x0b\x0d\xbb\xfc\x72\x07\x9c\x48\xd5\xf2\x33\xf8\x56\x35\xe4\xc3\x48\x9d\xb6\xe9\x25\xff\xd5\x8a\xcb\x62\xf7\xb0\x6f\x7f\x98\xa7\xfd\xba\x76\x31\x17\x62\x79\x43\x3c\x2f\xf5\x9e\x17\xc3\xfe\xd2\xdf\xff\xcf\x96\x1e\xe0\xfc\xbc\x50\x01\x50\xa7\x9a\x5e\xe7\xcb\x4b\xae\x1a\x64\x74\xf4\x63\xe2\xc2\x1b\x40\xaf\x9c\xf8\xe9\xcf\xf2\xf3\x69\x7a\x21\xae\xb8\x95\x5c\xfc\x52\x06\x91\x64\x80\xe8\xb1\x4c\x50\x8b\x5f\x30\x66\x02\xee\xdd\x7a\x60\x47\x9e\xe7\x35\x39\x40\x78\x8f\x51\x21\xb2\xb4\x18\x59\xe7\xcd\xaf\xf3\x18\x5f\x00\x4d\x38\x63\xe5\x22\x1d\xb3\xc2\x37\x01\x4e\xd2\x49\x0b\x22\xc5\x08\xf9\x47\x7a\xc4\x46\xa0\xb7\x3d\xc2\x31\x84\x1a\xcd\x73\x1e\xef\xd1\xa1\x38\xa4\xae\x99\x8e\x01\xa4\x7d\x3b\x8e\xbd\x82\x16\xb3\x44\xcf\x12\x19\x58\x8c\x64\xb0\x36\x6a\xa5\x78\x0b\x29\x0c\xc4\x2e\x2b\xa8\x44\xf3\xd7\x31\x2b\xac\x1d\x92\x19\xa2\xd4\x1b\xa2\x94\x7a\x2e\x76\x5e\xfb\x10\x3b\x60\xa1\xc5\x9c\xe0\xc6\x98\xab\x97\xcc\x18\x01\x83\xba\x2d\x2a\xd2\xda\xce\x4b\x52\x4e\x98\x6e\x05\xcd\x27\xec\x9d\x8f\x64\xe0\x86\x54\xd6\xf5\x50\x76\x1d\xe5\x21\x60\xee\x41\xe3\xae\x31\x13\xa6\xd2\x31\xe2\x7e\x1a\x2f\x73\x7f\x67\x5c\x7d\xcb\xf8\x72\x92\x36\x96\xcc\xf9\x04\x0c\xc0\x3c\x72\xf5\x20\x00\x37\xb1\xdc\x15\xac\x99\xb6\x97\x47\x42\x61\x81\x97\x74\x83\x7f\xc0\x41\x63\x1e\xfa\xcf\x79\xe4\x15\x47\x05\xb9\x6d\xd0\x0f\x63\x45\xdd\x93\x2f\x20\xaa\xe4\x54\xd1\xb4\xe5\x04\x92\x8a\x06\x6c\x7d\x81\x33\xcf\x8c\x65\xb3\xb5\x70\x36\x0b\xc2\xb6\xa5\x0a\xaa\xaf\x7c\xf8\x9a\x02\xf9\x5f\x89\xf8\xb4\xff\xb8\xef\x44\xf7\x8c\xf1\x34\x96\x24\x8a\x54\x14\x99\xd8\x93\xe2\x4c\xe9\xc3\x11\xa1\x6c\x63\xce\x54\x1a\xeb\x12\x26\x13\x75\x4e\x26\xb1\x2b\x63\x31\x4b\xe6\x84\x96\x9a\x9c\x25\x9a\x9f\x31\xe5\x9c\x14\x9e\xd9\xba\x57\xe4\xd8\x16\xa9\x8f\x22\xa8\x95\x15\x67\xe3\xb1\x2e\xd3\x15\xa9\x4b\xd3\x65\x46\x11\x08\x7b\x95\x88\x22\x7e\x2a\x81\xe5\x5b\xa4\x31\x9f\xcc\x49\x92\x82\xb5\xe9\xbe\x64\x06\x04\x3e\xf4\xbd\x09\xbe\x1f\x00\x2c\xa8\x74\xbb\x06\xbd\x6f\xee\x00\x6d\x1e\xe4\x59\x85\x5d\xda\x69\xbc\xc3\x44\x19\xab\xe2\x1d\xad\x52\xf4\x0a\xe1\xfb\xd2\x1a\xb2\x5f\x45\x14\xc5\x19\x82\x4e\x43\xb2\x5f\x05\x21\x34\xf3\xbc\x37\x06\xd8\x44\xb3\x81\x02\x7f\x56\xd8\x2e\xdf\x0c\xbe\x75\x3c\x48\x16\xa0\x0c\x7c\x0d\xae\x17\x0e\x3b\x15\x7d\xad\x7b\x31\x0e\xa8\x52\xb0\xb6\x2d\xdc\x03\xc2\x3c\xe4\xce\xd2\x7d\x5c\x9a\xb3\xdd\x77\x68\xa7\xda\xbe\x85\x56\xe8\xc0\xc4\x41\x90\x4d\x3f\xbf\xe1\x05\x2b\x01\xf7\x2d\x9f\x8a\x9d\xaa\xf2\x25\x42\x24\xe5\x9e\x9f\xbb\x3e\xa0\x40\xf0\xd4\x20\xc7\xbd\xe4\x92\x9c\x38\x16\xfd\x8d\x8a\x4b\xeb\x2d\x80\x0e\x67\xd4\xa2\x07\xe5\xec\x45\x1e\x97\x54\xe2\x83\x01\xa2\x6c\x96\xd6\x4d\x5a\xbe\x8a\xf3\x53\xd1\x2d\xc2\xa5\xa0\x08\xaf\x17\x3a\x72\x1f\xce\xe8\x9c\x0c\x1a\xb4\x6d\x0f\x87\x07\x92\xe7\xe4\xf8\xd8\xee\xc6\xc7\xba\x4b\x29\xec\x47\x49\x68\xc1\x9e\x97\x71\xaa\xd7\x4e\x11\x45\xc6\xcb\xc3\xcc\xfa\xd6\x1c\x16\x75\x3d\x8c\xab\x69\xb6\x3e\x45\xe1\xef\x34\x5b\xd7\x75\x05\xbc\xbb\x0b\x88\xa2\x0a\x86\xd2\xf3\x20\x51\x0d\x72\xf6\x2e\x8f\x53\xb6\x9b\x2a\x61\x5d\x48\xbb\x31\x7d\xac\xba\xc2\xfa\x7c\x02\x67\x94\x95\xd8\xdf\xff\xba\x19\xdb\x1e\xb3\x54\x5a\x30\x83\x96\xe5\xa3\x8e\x97\x81\x69\xee\xca\xbc\x0f\xe1\x19\x49\x15\x2d\x1a\x5a\xc3\x86\x33\x2a\x4e\x2d\x78\x85\x01\x84\x98\x54\x89\x38\x01\xb3\x59\x13\x30\xae\x92\x38\x45\xc0\x00\xb0\x79\xdd\xe3\x36\x7a\x00\x0d\x5d\x5a\x80\x23\xeb\x4a\x9f\xc9\x54\x87\xaf\x58\x09\x7f\xb7\x6c\x17\xaf\x09\xdd\xb0\x94\x5e\xb1\x5d\xbc\x22\xf4\x92\x81\x5a\x5f\x79\x7a\xe5\xcd\xae\xa4\x2b\x7a\xa9\xe7\x0e\xb8\xed\x63\x38\x9d\xb2\xc5\x8a\xb1\x75\x5d\xaf\x18\xdb\x69\x3a\xba\xa6\x73\x92\xac\x26\xeb\x13\x36\x6f\x2e\x39\x17\xac\x3c\xd9\xd6\x75\x39\xd9\x9e\xb0\xab\x49\xb9\x58\x27\x2b\x7a\xc3\xca\x49\x7c\xc1\xd8\x7a\xb1\x4d\xae\xc8\x31\x40\xfd\xf8\x28\x3f\x17\x08\xec\x73\x31\xf0\xeb\xbf\xa0\x90\x63\x93\x5c\xd2\x9b\x93\xc9\x7c\x31\x99\x27\x37\xa7\x73\x70\xb6\x09\x1d\x36\x22\xda\x8c\xe7\x45\xbc\xbc\x77\x9f\xd0\x6b\xb6\x1e\x7f\x34\xcf\x11\xd7\x6c\xed\x96\xda\x13\x36\x3b\x7e\x72\xf2\xf1\x78\x3c\x7e\x42\xae\xb1\xe5\xd7\x74\x8e\x85\x7c\x66\xbb\xf8\x9a\x0c\x3e\x9f\x96\x8b\x78\xc5\xae\xe9\x15\xfb\x4c\xe3\x4b\x96\xea\x4b\xcd\xd5\x98\xcd\xf9\x37\x7a\x44\x3f\x92\x24\x5e\xb3\x6b\xba\x65\x9f\x61\xe0\x96\x13\xf6\xd1\x5f\x38\x2f\x55\x80\x7d\xc3\x3b\x6c\x6c\x1b\x1c\xb1\x89\xb1\xaf\x35\x8c\xdd\x28\x72\x7b\x83\x0e\xa7\xb7\x92\x8f\xda\x2c\xf8\x3f\xff\xeb\x78\x3c\x56\xe4\x46\x05\x48\xcc\x2d\x40\x7d\x5d\xee\x4b\xb1\xe4\x31\x82\xeb\xb4\x12\xeb\xa2\x2f\xc0\x73\xc0\xdf\x29\x65\x1f\x40\x37\xde\x28\xfb\x96\x7a\xa3\x02\x88\xc8\x7b\xdf\xce\x1c\xc4\x1c\x20\x94\x77\xfb\xaa\x2f\x89\x6f\xbc\xc2\x00\x81\xdd\xf3\x05\xfd\xac\x7f\x18\xdd\x3d\xa1\x3d\x8a\x2e\xc2\x68\x56\xf8\xd8\x42\xee\xdf\x88\x50\xe9\x06\x95\xea\xdb\xc9\x20\xe8\x90\x24\x8e\xc7\x3a\x64\x0c\x9f\x33\x0b\x01\x69\x41\x85\xee\xcd\x5d\x67\xf3\xd3\xfb\x5e\x67\x9b\x3b\x4d\x0e\x27\xe2\x7c\x06\xcb\xec\xb9\xa2\x4f\x15\xfd\xd3\x38\x57\xfe\x49\xb1\x59\x43\x1f\x1e\x9a\x8b\x1a\x3c\x0c\xb3\xdb\x6c\x93\x70\xc0\x8e\xb3\x22\x4e\x4d\x77\xf4\x7d\x13\xc7\x30\xc1\x37\x43\x3c\x56\xa8\x87\xa1\xa7\xd3\x79\x6e\xad\x10\x72\x4e\xdd\xe8\x03\x4f\x47\x21\x1e\xdf\xab\x8b\xdf\x2b\x8c\x09\xdd\x58\x7d\x0f\xe2\x6d\xd9\x1b\xf7\x28\x05\x99\xfe\xac\xab\xa9\xe0\x6a\x7c\x81\x77\x2c\x68\xaa\xbb\xec\x18\xff\xc3\xf6\x7a\x12\x7e\xbe\x16\xa6\x2e\x54\x67\xd1\xb4\x6c\x99\x8c\xc7\x3f\xa9\x3d\xfd\x53\x2d\xfe\x54\x53\xb1\xad\xac\x13\x7d\x18\x18\x92\x58\xdc\x40\x71\x5d\x56\xdf\x49\xb1\xdb\xb2\x3f\x15\xbb\x15\xdb\x2a\x39\x33\x51\xe7\x74\xc9\x8b\xf4\x86\x2f\x75\x93\x2f\xd2\xec\x53\x95\x9c\x9d\x7b\xdb\xf4\xfb\x00\xf9\xba\x55\x1a\x08\x5b\xc0\x2e\xba\xa3\x9e\x0b\xb7\xd0\x56\xc9\x54\x73\x1b\x4b\x81\x50\x68\x6d\xaf\x6f\x67\xf2\x7c\x9a\xa5\x45\x11\x87\x18\xcd\x16\x9a\x52\x38\xc5\xbf\xc0\x33\xac\x0e\x3f\x2b\xcf\xf1\xcd\xbd\x7f\x7e\x50\xf6\xd1\x8e\xc5\x19\x3a\x39\x94\xc9\xd6\x45\x0e\x25\x38\xeb\x2f\x70\x3c\xf6\x7a\x41\x73\xf0\xba\xb6\xbf\x5e\xe7\x05\x8f\x9b\x0e\x93\x3d\x89\x15\xd9\xaf\xf2\x32\x2d\x8a\x9b\x5b\xb3\xc4\x3b\x3e\xf1\xbc\x2e\xc3\x08\x41\x5f\xf5\x28\x19\x85\x1d\xc8\x75\x1c\x8c\x7c\x43\xfe\x60\x64\x68\x8f\x7b\xbd\x9f\x55\xac\xc7\x1a\x47\xb8\x27\xfe\xab\x2f\xc4\xff\xf1\x85\xf8\x5f\xbe\x10\xff\x9d\x89\xc7\x31\xf0\xbc\x77\x86\x0b\x2d\xd0\xd6\x38\xee\x5f\x5e\x06\x82\x62\xa8\x3c\x8b\xa3\x47\x45\xbe\xdd\xf2\x65\x14\xa9\xc6\xd8\x08\x49\x2e\x90\x18\x50\x27\x09\x71\x65\x59\x7f\xca\x89\xea\x05\x94\xa5\xca\xd0\x91\xa7\x9a\x8c\xc8\xd0\xfd\x0b\xa0\xc3\x1a\xa8\x0a\x73\x57\xc4\xf8\x4d\x2a\x2f\xf3\xf2\x21\xe2\x45\x4d\xda\x2d\xe8\xcb\x81\xc6\x82\x80\xb4\x8b\xad\x0c\xcb\x6e\xf7\x17\x75\x61\x34\xaf\xc2\xa7\x01\x7d\x89\xa2\x97\x18\xba\xd9\x55\xca\x20\x87\xf2\xa9\x47\x2b\x51\x47\xc9\x91\x44\x04\xb7\x83\x47\x33\x4b\x85\xc0\xa8\xbc\xa1\x41\x40\xb9\xbd\x6f\x64\x1d\x3b\x0a\x32\x61\x1a\xc3\x39\x9e\x3a\xfd\x12\x52\xd7\xb2\x25\x67\xd2\x73\xd6\x8b\x79\x69\xbb\xc4\xfc\x5e\xa0\xb7\xcf\xf7\xa0\x77\xe4\x87\xde\xea\xeb\x84\xd7\x7a\xf3\xca\x9a\x04\xed\xd9\xd3\xa0\xd3\xbe\xbb\x57\x73\xb2\x60\x8d\xcb\xc7\xc6\x4d\x50\x58\xc7\x0f\xe8\x24\xd2\xa6\xf2\x1d\xc1\xde\xb1\x8a\x07\xed\x52\xa3\xe8\x37\x9c\x9b\x8b\x54\x5a\x11\xe3\x73\x1d\xd2\x1d\x99\x61\xff\xd0\xc0\x5c\xa4\xcb\xdf\x77\x15\xae\x92\x77\x82\x6d\x54\xac\x9a\x02\x9a\x5f\x81\x62\x02\xb2\xc4\xdf\x50\x15\x4a\x36\xac\x64\x31\x28\x31\x68\x9f\x19\x44\x4c\xe8\xac\x4c\x64\xff\x56\x91\x1d\x07\x43\xe3\x56\xd9\xe3\xa5\x8a\x15\x19\xab\x0e\x3c\x33\xac\xd8\xf4\xf3\x5b\x77\x32\xfa\x30\x37\x5f\x2e\x77\xb2\xd6\xe5\x12\x42\xe3\xf6\x98\xc3\xc2\x6c\x1d\xca\x04\x95\x12\xd1\xbc\x61\xd9\x18\x7e\xcb\x43\x2e\xd2\x8c\x76\x9b\xef\x21\xe2\x97\xd6\xc4\x0f\xec\x36\x0a\xda\x05\xe4\x27\x14\x26\x19\x02\x91\x97\xbd\x83\x8f\x1b\xbe\x35\x16\x27\x46\x71\xca\x05\x44\xd1\x95\x8c\x7d\x17\xe0\x5d\x14\xeb\x26\x71\xbb\x34\xd0\x49\xf0\x56\x42\x5b\xf8\x3b\xf7\xbc\x80\xeb\x5e\x47\x91\x35\xe8\x60\x2f\x05\x18\xda\x0f\x1d\x2f\xbc\x4e\xab\xa7\x68\x8c\xd1\x09\x8a\x09\x19\xf4\x0c\xb2\xde\xf4\x77\xbb\xab\xeb\x64\xd1\x37\xdd\xfe\x79\x6d\x58\xbe\xa1\x51\x2e\x43\xc2\x4c\xa2\xe8\x21\x10\x8a\x66\x21\x37\x84\xb2\xd9\x8d\xbf\xf6\xa4\x69\xaf\x95\x28\xca\x15\xa8\x0d\x75\x91\x4d\x3c\x4e\xb2\xdb\x2b\xb4\xd3\x04\xf3\x41\xd0\x95\x90\x51\x74\xc1\xdb\x6e\x59\xbf\xbb\x83\x7a\x58\x8d\x45\x7c\x9d\x6e\x37\xfd\x3f\xd0\x74\x43\x8e\x8c\x87\x22\x39\xbd\x5e\x73\x5e\xc0\xc3\xcb\xaf\x16\xb4\xd4\xa3\x8c\x8d\x71\x80\xbf\x92\x86\x01\xa1\x04\x4b\x29\xaf\x98\xa0\xd0\xf7\x06\x1a\xa1\x53\xb2\xa6\xed\x3d\xa6\xbe\x61\xe5\x43\x43\x82\xdf\x1a\x67\xb5\xce\x3c\xf8\x10\x3e\x56\xa7\x4c\x03\x90\xd5\xa1\x3e\x18\x4e\xbd\xda\x08\x58\xb3\x7f\xc1\x2c\x59\xa7\xa3\xbd\x0d\x0f\x52\x74\x07\xad\xa7\xbb\x40\xb2\xba\x23\xdb\xdf\xe1\x83\x30\x5e\x9d\x62\x91\x33\x39\x40\x6e\xfd\xda\x0e\x76\x58\x47\x06\x15\xf7\x74\xf9\x39\x3a\xc2\xf3\x48\xc6\x57\x80\x23\x1e\xac\x0c\x27\x89\xeb\xc0\x29\x3b\xff\x58\x71\xe9\x4b\xaf\xf0\x01\xe5\x5b\x70\xfb\x6e\x04\x45\xc3\x39\x4d\x8d\x5f\x43\xd0\x63\x8d\x22\x39\x64\x6a\x81\x68\x6c\x24\x49\x69\xc1\x7e\x96\x31\xf7\x5d\x97\x81\xfc\x18\xc5\xc8\x2d\x97\x66\x5b\x0a\xef\x11\x64\xe2\x99\x3f\xf6\xa6\x87\x70\xe3\xaf\xc9\x82\x69\x92\x31\x88\x5c\xb9\x47\x58\x35\xef\x90\x05\x21\x7a\x28\x1a\x4d\xd1\xc2\x5f\xcc\xf1\x46\xb7\xb3\xf0\xd7\x89\xc3\xd6\x6d\x15\x3a\xd9\x91\xd3\x39\x38\x00\x03\xaf\xcd\x61\x61\xb8\x52\xe2\x2b\xbf\xb4\xe7\x4d\xdb\xdb\xc5\xe9\xa8\x49\x16\x94\x37\x14\xa8\x25\x68\xdf\x52\xd2\x7d\xac\xe8\x73\xe3\x3c\xbf\xc5\xb5\x91\xbe\x08\x25\x5a\x33\x6d\xb8\x57\x4d\xbe\xfd\xd0\xbc\x42\x44\x17\x60\xb5\x43\x5a\xd8\x01\x50\x56\xe0\x82\x1c\x73\x63\xae\x67\xa5\x12\x3f\xe7\xfc\xba\xd1\x22\xbd\x0a\xc1\xf8\x41\xfa\x7f\xe7\x7b\x0b\xcd\xf1\xde\x04\xef\x3b\x63\xf0\x2b\x79\x32\x5b\xe4\x6c\x38\x73\x30\xc1\x18\x7a\x6a\xd0\x1e\xd0\x53\x0b\x52\x07\xef\x84\x6a\xbd\x16\x06\x44\x04\xb5\x00\x86\x73\x4f\x43\x38\x8f\xa2\xe1\xca\xae\xe0\xc6\x1b\x25\x20\x34\xa0\x25\x77\x1f\x6a\x89\x85\x26\x81\xc6\x4e\xa4\x27\x64\x9e\x04\x32\xf2\xae\xfb\x42\xd5\xc0\xf2\xea\x7e\xe2\x3d\x40\x36\x9e\x27\x5a\xd8\x26\xca\xb9\xae\x74\x50\x29\xf7\xb7\x9f\x8f\x47\x7a\xfa\xba\xaf\x50\xa1\x87\x32\x2a\xcc\x0c\xdb\xd9\x89\xf3\xf6\xcb\x6f\xd7\xb0\x5a\x90\xbd\x5e\x62\xc6\xbb\xb0\x00\x24\xa0\x9b\x0b\xfe\x3d\x60\x98\xbc\x00\x8d\xe7\x8a\xa6\x36\xf8\xa7\x72\xed\x47\xa0\x31\xa0\x87\xb8\x74\x5c\x9d\x88\xe6\x6d\xb5\x22\xe2\xac\x42\xed\xf2\xc6\x2b\xd3\x8f\x79\xac\x43\xe9\x68\x9d\x2f\x39\x2a\x53\xa7\x50\x44\x08\x41\x0f\xd9\xd3\x76\x76\x70\xf1\x0e\x78\xf4\xa3\x5d\x69\x0a\x90\x4e\x2c\xed\x0b\xe7\xc0\x83\x4c\x73\x06\x1c\xe4\xa9\x60\xb3\xf3\x69\x23\x2c\x82\x2a\x14\x1d\x19\x77\x0e\x23\xaa\x82\xe8\x86\xf3\x68\x98\x86\xe9\x2a\x2f\xf3\x6a\x1d\xfb\x2e\xda\x1b\x7f\x17\x56\x9c\x63\x1f\x38\x63\x32\x00\x01\x18\xd8\x24\x36\x81\x4e\xa0\x00\x32\x1b\xef\x6a\xfd\x83\x29\xaa\xed\x99\xb2\xb7\x70\x54\xf3\x8c\x39\x4d\xe5\x25\x6c\x8b\xaa\xaf\xb6\x9e\x54\xed\xea\x3d\xc7\xed\xbe\x87\x95\xb0\x76\x54\x71\xf4\x1b\xc0\x4d\xd1\x00\x37\x11\xb6\x01\xb4\xf4\xfc\x66\x1c\x48\xeb\xb7\x04\xf2\xf8\x8d\xf9\xf1\x40\x63\x02\x78\x4b\xf4\xad\x50\xd7\xea\xaf\xb7\xed\x6f\x37\x2c\x68\xd5\xaf\xee\x69\x0a\x4d\x84\xf2\x92\x33\x65\xed\x2f\x2b\xc5\x3a\xf2\x0f\x2a\xf1\x95\x41\xb1\xe7\x3a\xf0\x98\x70\xf0\x37\x57\x2e\xe3\xb9\xe6\xe7\xd1\x3a\x3f\x46\x3c\xb4\xb3\x73\x42\x8c\x60\xd0\x3d\x9b\xc8\x3d\x70\xb1\x60\x39\x94\xff\x69\x20\xed\x74\x55\x8b\x77\x79\x7c\x65\xec\xe7\x50\xab\x66\x22\xc7\xf3\x64\x8e\x69\x4b\xb1\xe4\x0d\xe8\x1d\x8a\x66\x51\x0d\x0c\x76\x35\xfb\x1e\x69\xbe\xe7\x4d\xbb\x4f\xa3\x8b\x9d\x9d\x53\xc1\xd4\xb1\x38\x91\xc7\xc2\xaa\x1f\xa4\xa1\x2b\x12\xf7\xa4\xa8\xc9\x12\x19\x94\x4c\x8c\x53\xf4\x5e\x67\x1c\xa5\xa5\x9e\xeb\x2a\x57\x1d\x97\x6d\x3e\x04\x9c\xf2\x99\x63\xdc\xf8\xe3\x73\xce\x42\x63\xe9\x47\x8c\xcd\xc9\x9a\xff\xc9\xad\x67\x95\x99\x7d\xe4\x0b\x7c\x89\x95\x51\x24\x9d\x4b\x2a\xe7\xb2\x3e\x37\x7b\xf9\x39\xea\xc7\x5c\x70\x59\xd5\x75\x4f\xa0\x51\x2d\xeb\x46\x30\xd5\x38\x7a\xf1\x04\x34\xa0\x3f\x6d\x1d\x62\xbd\x13\xe4\x73\x14\xfd\x54\xba\xf7\x5a\xaf\x1d\x52\xea\xf9\xb5\xaa\x0c\xf2\xc4\xf3\xa1\xa5\x33\x3d\xb4\x99\xe4\xb8\x24\xa7\x4d\xdc\x02\xf2\x25\x71\x13\x32\x66\x25\xb5\xc5\x8e\x59\xd9\x94\xa9\x4e\x02\xbf\x5c\xd2\x6b\x55\x58\x79\x90\x90\xdc\xc6\x82\xe5\x7a\x62\xa4\xae\x9b\xce\x09\x59\x98\xda\x4c\x2a\xa3\x89\x2f\x10\xc1\x82\xd0\x26\x2f\x43\xb9\xd1\xcb\xa0\x3d\x09\x54\xe6\x6c\x42\xfc\x66\xe0\xb1\x7c\x6c\x2b\x54\x54\xd1\xc9\xc1\xfa\x66\xb4\x55\xe3\x3b\x61\xeb\xf3\xeb\x30\xab\xd3\x2f\x90\x56\x61\x87\x06\x69\x14\x55\x87\x2a\x49\x4d\x25\xd3\x4c\x94\x59\xaa\x62\xd8\x12\xa9\xe9\x57\x65\xea\x73\xb1\x41\xe6\xca\x64\x25\x7d\xfd\x47\x6d\x81\xbc\xeb\xb5\xa8\xd0\x2b\xfb\xa4\xc0\x92\x17\xe6\xef\x98\x95\x89\xb2\x81\xe3\x02\x96\x39\xac\xc3\xae\x47\x20\x00\x6b\xf5\x9c\xc0\x4b\xbb\x85\xfb\x57\xe7\xe0\xaa\xcf\x77\xf5\x21\x97\x4a\xf9\x2a\xce\xc1\x9d\x52\xde\xb8\x53\x32\x3f\xc7\xb9\x6d\x55\x79\xa0\x55\x74\x18\xab\x93\xd2\x93\x32\xaa\x53\x56\x86\x7e\x34\x85\x09\x68\xbc\x3c\x39\xce\x0d\xed\xeb\x1b\xc7\x95\xe6\x80\xae\xeb\xd8\xfd\xd6\xb4\xf2\x78\x32\x67\xec\x42\xc4\x29\x95\x24\x8a\x52\xe3\x6c\x26\x20\xd7\x30\x01\xb7\x5d\x27\x54\x1d\xe7\x9e\x3e\x7d\x69\xb9\xdd\xd4\x44\xb0\x4f\xe9\x80\x79\x6e\xa4\x4c\x1f\x7a\x9d\x5e\x35\xee\xad\xac\x77\xc6\x58\xb5\xb5\xbe\x60\xfb\x35\x4a\x0c\xad\x67\x86\x30\x2d\xc5\xa7\x16\xd9\x72\x00\xa6\x0b\x95\x67\xe5\x39\xd2\x45\xaf\x2c\xcf\x9d\xad\x6c\xfb\xd2\x11\xcc\xb4\x9c\xa6\xad\x5a\xe0\x64\xfd\x5c\xd7\x92\x1d\x22\xbd\x46\x49\x04\x71\xf8\x04\x85\x95\x91\xc8\xc6\x21\x1a\xc2\x72\x76\xfb\xa9\x39\x47\x70\x3a\x54\x8c\xc1\xe1\x10\x94\x06\xb6\x8e\x43\x86\x43\x58\x9e\xce\xe0\xaf\x40\xc7\xd7\xc6\xee\x31\x18\x44\x56\x8c\xd3\x33\x81\x79\x27\x8a\x8a\xf1\xd8\x3a\x9e\x29\x26\x6a\xa0\xc6\x2c\xa7\x72\xcc\x72\xb4\x1f\x73\x64\x58\x12\x30\x22\x33\x65\xc7\xe5\xc9\x6c\x31\x4b\xbc\x2a\x82\x3a\xe4\x98\x95\x5f\xa7\x67\x62\x02\xe9\xe6\xc9\x8c\x60\x75\x54\xef\xed\xfd\x81\xde\x7b\x5e\x6f\x65\xfb\xa1\x27\x98\x44\xc9\x66\x66\x22\x55\xcf\x7b\x99\x82\xb7\x32\x73\x58\xeb\xd3\x49\x6f\x08\x70\x47\xe2\xf6\xc2\x78\x2c\x9d\x1a\x9e\xe7\x00\x57\xf6\xbd\xbc\x28\xb0\x0b\xfd\x45\xa6\x5b\xf3\x58\xcd\xfa\x31\xcc\xf5\x15\xd1\xa6\x44\x31\x67\x27\x21\x04\x37\xde\x32\xbc\x47\x61\xd5\x7d\x13\x57\xbd\x8a\xad\xbd\xcf\x22\x88\x14\xa1\xde\xe6\x7f\xf2\xd8\x27\x6a\x06\xa1\xff\xb6\xd9\x0d\x7f\xe4\xb1\x22\xc7\x72\xc8\x9c\xeb\x84\x63\xc9\xa4\xe7\x97\x05\x8c\x0b\x64\x5d\x03\xc0\xa6\xb5\x41\x8c\xa2\x91\x92\x3b\xd0\x2a\xec\xda\x7b\xe6\x97\xa5\x90\xff\x2f\x6f\x6f\xbf\xe5\xc6\x8d\xec\x09\xfe\xcf\xa7\x28\xe6\xf1\xcd\x49\x34\x41\x8a\x54\x5f\xcf\xdc\xc9\x2a\x14\x8f\x6c\x49\xb6\xdb\x92\xe5\xb6\x64\xbb\xdd\x14\x5b\x27\x8b\x04\x8b\xb0\x92\x00\x1b\x09\x96\x54\x2e\xf2\x11\xf6\x9c\x79\x84\x3d\x7b\xf6\x49\xf6\x51\xe6\x49\xf6\x20\x02\x40\x22\x3f\xaa\xa4\xdb\x33\xbb\xff\x54\x31\xf1\xfd\x19\x08\x04\x22\x7e\xc1\xc7\x60\xfb\x53\x25\xf0\xe4\x51\x17\x07\xe2\x21\x7b\xbf\x05\xa9\x87\x73\x2d\x19\xac\x14\x22\x6f\x95\xed\xdd\xd5\x72\x6c\xaa\xeb\x26\x40\x17\xba\xcd\x90\xca\x8c\x9d\x4d\x4d\xd2\x5c\x8b\x37\xce\xf9\x7d\xe5\xa8\xf1\xc3\xaa\x89\x96\xc1\x55\xcc\x04\xec\x4c\xa7\xcd\x57\x84\xa0\xdf\xc6\x20\x82\x71\xe8\x27\xf5\x8d\x03\xb4\x84\xe1\xb8\xa2\x07\x06\x5a\x58\x8a\x16\xc4\xb1\x52\x33\xc6\x0e\xa0\x73\x94\xa6\x59\x59\x6b\x92\x1d\x1c\xa8\x95\xe5\x33\xbd\xf5\x9d\x4d\xb9\xda\x3a\x17\xf3\xe0\xf6\x94\x7a\xe5\xbd\x1e\xaf\xa7\x63\x1f\x37\x38\x80\x45\x1f\xf2\xc4\x6d\x39\x1b\xa0\x7b\x66\x99\x1a\xaf\xe2\x6b\xb8\x53\x59\x68\x68\xbc\x91\xf1\xaa\x86\xca\x3f\x44\x2e\x42\x75\x0f\x48\x5e\x3c\x43\x99\x51\x99\x01\x18\x31\xed\x10\xcd\x00\xf9\x21\x4d\xfd\x03\x43\x03\x10\x22\x23\x84\x20\x64\xde\x56\x00\xb6\x3d\xfc\xff\x9e\xdf\xd2\x0a\xa1\x62\x09\x4a\x65\xc3\x35\x74\xad\x8b\xeb\x6b\x30\xda\x1a\xce\xee\x07\xb2\xea\x4b\x3e\x3d\x11\x3a\x9b\x4e\x49\xcd\xb8\x0d\xd7\x1a\x9a\xea\x55\xe4\x4a\xfc\x1c\x54\x1f\x84\x9d\x52\x27\x47\xf1\x60\xa2\xbf\x8a\xcc\x26\x5d\x15\x15\x3f\x9b\xe5\x5e\x0c\xe4\x44\xe6\xf2\xda\xee\xd8\x79\x6f\xa8\x65\x38\xe5\xbc\x29\x3a\x24\x77\x6a\x1e\xb5\xfe\xa3\xca\xae\x38\x05\x13\xb6\xbc\x76\x7f\xb8\x3a\x54\xf0\xea\x30\xf0\x37\x89\xe0\x84\x78\xf0\xdc\xa4\xe9\x73\x33\x31\x62\xc7\x2f\xc5\xf8\xdf\xa7\x53\x30\xa9\xd8\xf3\xec\xb9\x99\xec\x55\x45\x35\x99\x4b\x96\x18\x2d\xf6\x25\x4f\xf2\x17\x26\x4d\x5f\xf4\xa5\x7e\x11\x52\x67\x92\x25\x6b\x75\xb8\x2a\x79\x42\x9f\x1b\x76\x67\xd3\xe6\x82\xee\x55\x95\xeb\x13\xc9\x6d\x34\x7a\x0a\x4a\xe8\x8b\x4e\xf4\xc0\x2f\x77\x5e\x03\x9d\xb2\x9b\xb9\x99\xec\xb8\x29\xbe\xe7\xb7\xb9\x99\xac\x8c\x2e\xbf\xe7\xb7\x91\xc6\xa5\x9d\x9a\xa7\x5a\xed\xd3\xf4\x0b\x05\xf2\xe2\x26\x9e\x97\xaf\x0e\x85\xab\xa5\xdd\x0c\x1e\xde\x57\x13\x02\x90\x6e\xd9\x9e\x67\x10\xe3\x2c\x91\xca\x25\xf1\x80\x06\x9a\x5c\x4c\xed\x0a\x74\xea\x7d\x98\xb6\x04\x5b\x24\xaa\xc9\x65\x88\xbb\x98\x92\x79\x57\xa8\xdb\xa2\x3c\xb4\xac\x47\x9e\x1e\xd8\xf7\x4d\x2c\xeb\x15\xb9\xab\xd0\xd3\x4c\xdf\x1a\x05\xf1\x22\xac\x09\x08\x75\x4b\xc2\x2e\xde\xbf\x88\xa0\x56\x15\x21\xb3\x1e\x88\x8d\x10\x91\x5b\x97\xb5\x56\x18\x1e\x84\xa2\x35\x51\x5a\xf9\x5f\x64\xd4\x89\xfd\x2d\xc4\xfe\x46\x2e\x66\xd3\x34\xcd\xbe\x12\xd9\x8a\xd0\xa1\x4c\xd3\xd0\x9d\xf1\xe3\xe9\xf4\xa2\x4c\xd3\xaf\x78\x38\xdd\x69\x05\x38\xa4\xff\x9d\xb1\x62\x7e\xcf\x06\x6b\x58\x18\x84\x0d\x22\x9a\xe8\xbb\x08\x31\x94\xb7\x42\xc9\x89\x90\xc1\xfd\xe3\x05\xae\xa9\x7a\xc6\xeb\x40\x5b\xe9\x71\xe5\xf4\x04\x66\x64\xf0\xcd\x7d\x23\xfb\x4d\xff\xc8\x7a\x47\x56\x2b\x92\xdf\x0f\xca\x50\xaf\x86\xc2\xe9\xd2\x82\xbb\x1b\xef\x55\x93\x1e\x58\xe1\x16\xbe\x5f\x8f\x03\x01\x4f\xd9\x9e\xa2\xcd\xb3\x12\x93\xc4\x0b\x99\x56\xac\xbc\x1c\xcf\xe6\xab\x45\xb9\xcc\x9d\xb1\xa1\xa6\x9a\x90\x3c\xab\x5c\xea\xd8\xbd\x46\x1d\x82\x56\x84\x96\xe2\x5e\xcf\xeb\x3a\xd0\x1b\xa6\xdf\x73\x45\x69\xc3\x88\x64\x89\xe6\x2b\x93\x80\x02\x76\xc5\xe2\x5a\xa8\x66\xee\xc4\x1d\x82\xea\x2c\x2d\xd9\x78\x56\x1b\x08\x38\x82\x10\x8c\x26\x3c\x7e\xc3\xaf\x4a\xaf\x9f\x98\x4c\x93\x41\x6c\x46\x01\x8d\x38\x1e\x0b\xb8\xce\xc8\xf5\xfc\x67\x9e\x15\xb4\xa2\x6b\x6f\x87\xb7\x46\x23\xbc\x7c\x1d\x2e\xb3\x9e\x40\x85\x0a\xb6\xbe\x75\x1b\x9e\xa1\xe1\x1d\x9d\x82\xdc\xbe\xa0\x21\x04\xa0\x22\xc8\x67\x55\xbd\xf5\x55\x6f\x5d\xd5\x5b\x07\x7b\xcc\x5c\x02\x4d\x06\x62\x6e\x6f\x40\xa5\x9d\x1d\x0f\x97\x46\x7f\xb5\xb1\x4f\x79\xb6\xf2\xf7\xd4\x45\xb5\x24\xb4\x24\xf4\x0e\x17\x4f\x3e\x9c\x51\xa5\xc5\xb5\x90\x79\xf2\x27\x58\x60\xc9\x89\x90\x7c\x15\xe1\x1f\xd8\x09\xf5\xd6\x98\x2d\x62\xd6\x58\x13\x75\x55\xfe\x06\x5d\x86\xdb\xb1\x0f\x2b\x47\x33\x62\x8f\x86\x07\xab\xf7\x0b\x90\xe4\xbf\xd8\x22\x4b\x5a\xd1\x52\x91\x3c\x2b\xd9\x14\xfb\xe3\x2c\x51\x17\xd5\xd2\x16\x55\xaa\x3a\x87\x43\x2d\x47\x17\xb8\x7b\xa6\x3e\xe9\xfc\x67\x17\xab\x27\xde\x64\xc6\x53\xcc\xd1\x68\x47\x57\xd1\x8a\xc2\x75\x67\x67\x17\xb5\x6e\x83\x55\xef\x8a\x6e\x48\x7d\xc3\xae\x4f\xba\x1a\xfb\x03\x2f\x31\x98\x7a\x43\x0d\x70\x09\x1b\x66\xa2\x22\xef\xea\xb7\x36\x90\xb0\x75\x78\x22\x0a\x5c\xd3\x33\x61\xef\xb6\x11\x7f\x45\xf5\x64\xb5\xa5\x8a\xd0\x75\x88\x36\x71\xb4\x71\xd1\xdb\x1a\xe1\x61\x45\xd7\x84\x46\xef\xb4\xf0\xbd\x6b\x78\x4b\xb0\x4b\xd5\xdb\x03\xdc\xd4\x31\x1c\xae\x02\x80\x5e\x1a\xbd\xc8\x35\xd3\x93\xf3\xdd\x05\xbb\x39\xdf\xf9\x9b\xcb\x35\x83\x46\xed\x5c\x7b\xae\xd8\x46\x65\xd7\xd4\xb6\x69\xb0\x65\x6c\x3f\x77\x22\xc1\x7a\xa7\xec\xe8\x15\x60\x73\xd8\xff\x84\xe4\xd7\x7e\x19\x5e\x59\x02\x79\x6f\x5a\x28\x75\x4f\x15\x01\x28\x94\xf0\xe0\xd0\xcc\x81\x54\xc2\x2f\x52\x4f\xd9\x7a\xd6\xaa\xc0\xfd\xd1\x5a\x96\x34\x2c\xd8\x53\xfd\xce\x16\xde\x5b\x4c\x24\x72\xba\x65\x15\x7d\xc7\x6e\xfd\x86\xfd\xc0\xe0\xf1\xd1\xef\x9b\x21\x93\xce\xfc\xa9\xa6\x48\xa8\xb9\xdd\x20\x48\xc6\xf1\x76\xcf\x22\x32\x62\x3a\x64\xc4\x34\xc8\xc8\x9e\x67\xcf\x7c\xad\xef\xc8\xe5\x74\x9e\x7d\x60\xcf\xd0\xb4\xfc\x1d\xbb\xe6\xd9\xad\x67\x29\x7c\x2a\x4b\x9b\x6d\x12\x9f\x87\xdd\xd8\x44\xc0\x59\x3c\x73\xc6\xdf\xa7\x4c\xb0\xf6\x58\x11\xb2\x28\x83\x3d\x39\x34\xe5\x1d\xa1\x1f\xea\xb1\x15\x76\xfc\x4a\x78\x5f\x5a\x79\x27\x05\xbf\x64\xf6\xea\x70\x9e\xad\x9c\x3e\xd9\x7a\x62\xd4\xf1\x88\x5f\x17\x6b\x7c\xd5\x4c\xd3\xe8\x90\xfe\xbe\xed\x66\x63\xc7\x98\x48\xd3\x1b\xe7\x97\x6d\xf6\xe5\x34\x1a\xf2\x6d\x7d\x95\xb9\x00\x0f\x9a\xf3\xf1\xe3\x69\x1e\xc2\x2e\xbd\x23\xcd\xf9\xe3\x69\x3e\x1d\x6c\x3f\xa7\xa2\x4c\xf5\x3c\x18\x8d\xd8\x96\xda\x16\x40\x13\x00\x8a\x38\xd0\x8e\x2b\xbb\xcf\x79\x1f\xd3\x6c\x39\xa4\x1d\x9b\x3d\x9a\x52\x38\x66\x41\x78\x19\x43\xfb\x77\xb9\x27\x7b\xa5\x4c\xe8\x6d\x5f\x94\x3d\xfe\xdf\x11\x5a\x4c\xb6\xa2\x32\x4a\xdf\xc2\xa6\x7c\xcd\xcb\x57\xb0\x5a\x59\xb8\xb1\xdd\xb6\x79\x3b\x4e\xee\x80\xed\x9f\xdf\x58\x26\xfe\x2a\xe3\xd0\x87\x77\x98\xec\xaa\xe6\x55\x9a\x4d\x7f\x47\xbb\x1c\x48\x68\x5d\x3f\x73\xf2\x2e\x30\x21\x92\xae\xc8\xc9\xde\x43\xa8\x24\xf9\x3f\x6d\xe5\x00\xf2\xeb\x46\x35\x4d\xbf\x02\x77\x00\xce\xb5\xaf\xbd\x8b\x3c\xce\x2b\xd0\xb4\xc2\x96\xd8\x9e\xbd\x14\xeb\x75\xc9\x9f\xaa\x0f\xb2\xe6\x5b\xc1\x6e\xeb\x2b\x0f\x41\x26\x1f\x00\x01\xee\x61\xe2\x68\xa7\xd2\x3f\xe7\x1f\xe6\xef\xf1\xba\xd4\x42\xff\x70\xcc\x1b\x2f\x8b\x5b\x21\xaf\xbf\x2a\x0f\xfa\xd9\x0d\x97\xe0\xc9\xe8\x5e\xb8\xcb\x7b\xf2\xa0\xf2\xe5\x7d\xe5\xcd\xe8\xd7\x1a\xa0\x6c\xf1\x5a\x77\x6a\x3d\x32\xad\x22\x49\x82\x87\x33\x15\xf5\x7d\x9e\xd6\x77\xfb\xdf\xda\x57\xf8\xe1\xec\x04\xc6\x4c\x48\xc6\x37\xa5\x52\x3a\xb2\x17\xbe\x3e\x18\xc3\x75\x75\xdf\xe1\xe8\x7d\xdd\x06\x4c\x0c\x09\x73\x66\xbc\x45\x6b\xcd\x47\x5a\x06\xef\x53\x2e\xf4\xc4\x26\x53\x97\x5e\x6f\xe3\x78\x1c\x4a\x05\xda\x22\x5e\xae\xf1\x0b\x14\xac\xc6\x68\x9d\x3a\x2e\x22\xc9\x6a\x10\x21\x96\x6c\x7a\x5e\x5e\xd4\xa7\xa3\x6f\x7f\x78\x38\x2e\x3d\x30\x6d\x11\xe2\x22\xe8\xaa\x12\x64\xca\x87\x34\x3d\x3c\xdc\xe3\x4b\xef\x77\x7d\xc5\x5e\x46\xaf\x59\x6b\xd6\xa9\xd9\x16\xe9\xbd\x32\x0b\x78\x57\xe0\x74\x45\xd7\xd4\x10\x0a\xfd\x89\x67\x71\xad\x1b\xaf\xb9\x6e\x52\x13\x2c\xe9\xeb\x52\xac\xde\x27\x96\x6f\x85\xdd\xbb\xd5\x31\x5b\xb2\x69\x09\x2a\x00\xa4\x42\x5b\x52\x32\x74\x12\x8a\x34\x1d\x56\xba\x56\x1f\x04\x41\x00\x2c\x74\xaa\xd2\x34\xdb\xea\x68\xf3\x38\x7d\x0d\x14\x10\x00\xa3\xec\xf1\xce\xdf\xe8\x42\x56\x1b\xf0\x3c\x5a\x72\xa8\x04\x1c\x5a\x35\x2e\xb3\x04\x65\x3f\x32\xbc\xca\x3b\xc9\xc2\x73\x51\x72\x9b\xca\x6e\xeb\x28\x28\xb2\xc2\xf6\x59\x68\xc1\x9e\x68\x5d\xdc\x02\x24\x3c\x88\x84\xa3\x8b\x8a\x74\xd8\x89\x61\x9c\x8b\xb2\x54\x1f\xec\x5d\xc8\x96\xf6\xe6\x76\xcf\xab\xe3\x71\x3c\x1b\xb2\x2b\x95\x3d\x94\x88\x22\xde\x7f\xfd\xb4\xc0\x3f\x9c\xd5\x4d\x1c\xa8\x89\x92\xa5\x2a\xd6\x96\xf8\x99\x1e\x57\x9e\x6a\xa2\x79\x75\x28\xe1\xdc\x7e\xb4\x78\xfb\x71\x3a\x1d\xbf\xfd\x38\xfd\x8f\xb7\x1f\xa7\x7c\xfc\xf6\xe3\x6c\xb3\xbc\x7b\x7c\xf2\xc8\xe4\xa0\x84\xca\x92\x84\xd0\x62\x21\x97\x8c\xd3\xd1\xa8\x62\x7e\x01\x95\x0e\x08\x44\xb3\x17\x9e\x5e\x69\x42\x8d\xca\xb5\xf7\x52\xd0\x42\xd2\x2b\x10\xd3\xcd\xf4\x81\xe5\x11\x12\x58\x65\xc4\xbc\x3f\x0d\x5e\x78\xb8\xaa\x92\xd0\x7f\x36\x40\x19\x7f\xd2\x59\xe9\xa1\xdd\x15\x60\xa3\x3e\xa9\x9c\x04\xe7\x74\xa2\x07\x36\x3d\x3f\x5c\x88\xf3\xd1\xe8\x40\xca\x4c\x2e\x0e\x4b\x7a\xa8\xdd\x2f\x98\x9e\x6b\x2b\x68\x46\xb6\x9d\x13\x69\x72\x59\x0b\xe2\xfb\x72\xd9\x15\x08\xa8\x59\xf7\xd0\xcb\xb6\xb6\x65\x83\x54\x83\xdc\x52\x6c\xb2\xa2\xbd\x3e\xaf\xbd\x4b\x84\x37\x00\x02\x48\xee\x6f\xf3\x30\xbb\x99\x73\x77\x79\xcc\xb9\x97\xdc\x20\x7e\xe3\x0a\xdc\x7e\x56\x0d\x9f\x15\x76\xc2\xbf\x69\x8c\xa3\xe5\x19\x57\xb0\x8c\x71\xcc\x56\x35\xb1\x39\x90\x80\x16\x96\x24\x74\xb5\x38\x78\x28\x1d\xfc\xed\xdc\x90\xea\xe2\x1a\x1c\xc1\x76\x1c\x48\x14\x34\x29\x40\x88\x99\x78\x1f\x06\xb1\x36\x6f\x73\x3c\x1c\x59\xe7\xe4\xee\x14\x93\x94\x7d\xeb\x39\xcb\x56\xe6\x95\xbb\xb2\x4f\xe9\xff\xf4\x65\x8b\xb5\x86\xea\x50\x07\x88\x1f\xaa\xdd\x39\x4a\x76\xaf\xa6\x9c\x21\x17\x8f\x11\x98\x22\x0e\x66\x86\xea\xe3\xf1\xaf\x19\xa7\xa0\xeb\x6f\x4e\x71\x6d\x5d\x5e\x6b\xc8\x4c\xa3\x17\x3d\xfa\x9d\xa6\x5b\x42\x57\x4d\xd4\x80\xd2\xee\x5f\x81\x18\x5a\x5e\x07\x04\xa7\x91\x77\xa0\xf0\x4a\x9a\xe9\xb9\x61\x1d\xc5\xc1\xfc\x7e\x05\x3e\xdb\x4d\x02\x98\x43\xb5\x06\xf7\xfd\x5d\x42\x1d\xd0\x9e\xe8\xe8\x21\x05\xfa\xd3\xa8\x84\x19\xfa\x45\x13\x50\xa4\x47\xe9\xf3\x13\x43\x85\xe5\x7c\x6a\xac\x40\xc3\xd4\xb2\xb6\x70\x71\xd3\x6c\x4a\xaf\x70\xe6\x07\x6a\x7e\xa5\xd9\x78\xf2\xe5\x9f\x73\x6d\x7f\xcd\xbe\xcc\x0f\x18\xf2\xdf\xf2\x75\x9a\x66\xf6\xe7\xec\xd1\x9f\xf1\x64\xb9\xd5\x5d\x9d\x17\xc6\x51\xf9\xf8\x29\x2f\x4d\xf1\x37\x70\xf6\x5b\x7f\xff\x16\x5b\xc1\x83\xda\x87\x65\x91\x4c\x21\x4a\xfb\xab\xf8\x28\x00\xed\xe7\xdb\x57\x3f\x7d\xf7\xf7\x57\x3f\xbc\x79\xf2\xe2\xdd\x93\xbf\x7d\xf7\xda\xeb\x86\x40\xba\x48\x31\xa4\x2f\xeb\x2f\xcf\x7e\x7a\xf3\xdd\xd7\x2e\xe3\x5c\x87\x6c\x79\x53\x9d\xa4\x6e\x11\xa1\x77\x1f\x73\x43\x6f\x73\x7d\x8a\x20\x8e\xde\xe9\xda\xfa\x5e\xb2\x5b\x38\x7e\xed\xa9\xf6\x11\x0c\xc8\x6f\xe3\x07\x53\x94\x6e\x79\xd9\xdc\x21\x28\x89\xc2\x14\x5f\x96\x0d\xe5\xdf\x75\x88\xc5\x37\xb2\x10\x5d\x9b\xcc\x8a\x34\x3d\x80\x1c\x73\x8d\x2f\x95\x69\x7a\x93\xa6\x15\xe1\x79\x8d\xdf\x69\x26\xa6\xd0\xd7\xdc\xd0\x0d\x43\xc6\xe9\x7c\x3b\x64\xe5\xf9\x96\x6d\xe3\x77\x30\x9f\x7e\xcf\xa6\xe7\xfb\x8b\x8d\xa7\x64\x7b\x7c\x30\xde\x2c\xf6\x88\xfc\xca\xd8\x36\x26\x2a\xab\x83\xb6\x25\xfc\x6a\xc7\xe7\x0d\xd4\xc2\xb6\xc8\x3f\x9f\xf1\x13\x36\x0f\x3c\x5f\xae\x50\x2f\x7d\xc8\xae\x02\xa4\x87\x6d\x73\x9a\xee\x6a\x55\xe0\xa6\x9a\x74\xa4\x76\x3b\x52\x7f\xba\xd2\xb4\x39\x14\xe3\xe6\x50\xd8\xf3\xef\xe6\x53\x45\x81\x51\x89\x88\xcb\xc2\x6d\xd7\x18\x74\x30\x30\x71\x3e\xaa\xd6\xc4\xf1\xb4\x08\x05\x5b\x34\x94\xe6\xd1\xa4\x11\xc7\x3c\xf4\x0d\x56\xc0\x8e\x41\x83\xaf\x3b\x9a\xc7\x57\xec\x7a\x54\xf4\x3e\xa6\x0e\x76\x17\xd3\xf9\x75\xac\x2f\x7e\x3d\xda\x8d\xbf\x9c\x92\xfc\x2a\x16\xb2\x44\x16\xaf\x57\xa3\xdd\xe8\xcb\x29\xa1\x81\x64\x5e\x7b\xb4\x85\xab\x13\x39\x5d\xeb\x8b\xc7\xd3\xa0\xc5\xd4\x68\xf8\xbc\xd5\x8f\x78\x74\x68\xd1\xb0\x04\x88\xe6\xc0\xc7\x3c\xfd\x1b\x13\xe1\xf7\x6f\x4c\xdd\x77\xd9\x09\xfa\x19\x8d\xca\x3c\x0f\x15\xd7\x39\x6e\xa4\xa0\x26\xae\xb5\x11\xf7\x1b\xd5\x96\x02\x84\xca\xd3\xd4\x3c\x0a\x1f\xc7\x23\xaf\xa3\xfe\x96\xa6\x3c\x44\xfd\x6d\xd0\xec\x6f\xd1\x31\x76\x00\x80\x89\x2b\xcd\xb2\x2b\xfd\xa7\x6b\x3d\xd2\xe4\x51\x76\xad\x47\x33\x42\x47\xa3\x6b\x6d\xb9\x24\x70\xde\x45\xf2\x2c\x14\x39\x8a\x07\x61\xc4\x14\x89\x2f\xfb\x1f\x74\x0c\x64\x53\x01\xe6\x62\xc2\x98\xe5\x39\xd5\xe6\x0c\x18\x0f\xc3\x56\x72\x61\x96\xd1\xed\xa9\xed\x4c\x35\x86\x11\xf5\x2f\x63\x6d\x41\x30\x15\x6c\x38\x03\x46\xa8\xfd\xa8\x14\xee\x93\xd5\x61\xbf\xd7\xbc\xaa\x9e\xad\x85\xa9\x00\x3a\xa3\x79\xfa\xe3\x73\xe4\x70\x66\xc9\x95\x65\xc8\x86\xac\x50\x41\xa1\xb1\x9d\x4c\xd2\x7b\x8a\x9d\xd5\x4a\x7b\xaf\x70\x54\xe0\xee\xfa\xa3\xf8\xc8\xcb\xaa\x87\xe4\xdf\xea\x48\x69\xd1\x4c\x3e\xfe\x89\x5d\x69\x6a\x26\xb7\xf8\x1f\x41\xe6\x9e\x69\x60\xcc\x57\xaa\xa6\xb2\x1f\x7b\x1e\xcd\x63\xc7\xb8\x40\x0f\x61\xd4\xf7\x32\x0b\x57\xd3\xc4\x41\x96\x26\x83\x67\xe0\xc8\x2b\xfb\x72\x4a\xfb\xae\xe5\x58\x06\x8a\x77\x5a\x61\x0e\x62\xab\xd7\xdd\x2d\x48\x4a\x0c\x13\xa3\xe4\x2c\x19\x19\xa7\x2e\xdd\x7e\x04\x6d\x1b\x3e\x87\xd2\x5f\x16\xbd\x26\xd0\x1b\x64\x16\x1a\xc9\x16\x72\x69\xaf\x90\x88\x5d\x4e\xc2\x80\x07\xe5\x54\x7f\xe1\xe1\x1f\x8d\x2e\xbe\xe7\xb7\x55\x9a\xba\x62\x3a\x31\x14\xfd\x5f\xb5\xa2\xb1\x1e\x88\x43\x21\x8d\xf4\x73\x94\xec\x0e\xa5\x11\x09\x63\xaa\x3b\x36\x86\xd0\x30\xc2\x90\xe0\xef\xf6\xae\x9b\xbc\xe7\xce\xaa\x7a\x9d\x50\x1c\x84\x3a\xd9\xd0\x26\x73\x65\x0e\x99\x3a\x1e\xb3\xaf\x44\xa6\x09\x15\x76\x05\x12\x6a\xcf\x0c\x95\xa6\x8f\xde\xfe\x97\x2f\xdc\x3d\xca\x90\xb9\x4b\x32\x9c\x92\x7c\x38\x54\x11\xae\x9a\x8e\x71\x6f\x76\xb6\x47\xc3\x00\xe6\x3b\x1c\xa2\xf7\xa6\xfa\xd9\x68\xd8\x6c\xfd\x1c\x96\x54\xf2\xda\xc6\x8f\x93\x91\xa6\xf1\x85\xaf\xbe\x8e\x7f\xf0\x92\x7e\x3b\xd9\xc7\xe3\x47\xd4\x12\x6c\xa5\xed\xdd\xec\xf3\x47\xff\xb8\x56\x8b\x27\xe3\xbf\x2f\x43\x57\x72\x33\xd9\x29\x9b\x89\x34\x4a\xb7\x45\xe7\xfd\x25\x77\xd2\x21\x1b\xf6\xda\x71\x60\x35\x96\x5a\x8f\x28\xc0\x74\xdf\x1e\xbc\x5c\x00\x1d\xe4\x5e\xcc\x66\x69\xfa\xf8\xbf\x59\x66\xc8\x61\xcd\xc2\x1c\x63\x9d\x00\xbf\xdd\xb0\x16\x74\x69\x06\xa6\x45\x1b\x66\xff\x15\xf0\xb5\x6a\xc5\x06\x47\xb2\x5e\x39\x5d\x83\x55\x9a\x66\xb6\xc1\x73\x8d\x70\x07\xf2\x78\xfc\x8f\xff\x18\xda\x2c\x7f\x51\xc7\x23\x5e\xc5\xfc\x8b\x5e\x7d\x17\x3b\x1e\x7b\xee\x46\x4d\xe7\x7a\x84\xce\xb0\x9c\x47\x6f\xaf\x62\xa7\xc3\x5a\x55\xd5\xb6\x10\xfa\xad\x77\x13\x66\x1a\x57\x9e\xa7\xe2\x66\x12\xdc\x15\xdb\xbd\x70\xbf\x2d\x7a\xd7\x1d\x22\x8c\xb3\xad\x36\x1a\x33\x7f\x93\x3c\x1e\xb3\x17\x76\x7c\x93\xbe\xc6\x24\x2d\xa9\xed\x7b\x7e\x7b\xd8\x27\x76\x73\x74\x85\xb9\xea\x86\xeb\x04\x7c\x96\x3f\x7f\xa8\xbc\x6f\xfa\xcb\xeb\x8a\x5f\x7d\x79\xa7\xa6\x89\xfe\x4b\xec\xcc\x7f\x6d\x2e\x00\x84\x10\x76\x57\xfa\xfa\x90\x30\xa8\x43\x4e\x63\xeb\xe8\x1f\x7b\x56\xdd\x30\x6b\x49\x9c\x8e\xc7\xa0\x2e\x13\x66\x17\x76\xa3\x1f\xb4\x1b\x3b\x82\x6e\x01\x10\xbf\x9d\x43\x8b\x40\x0c\xe5\x01\x90\xe1\x8d\x0d\xd0\x38\x5f\x07\x66\xd2\xed\x05\x94\x27\xa0\x14\xd7\x36\x63\x65\xab\xfb\xb0\x15\xab\xad\x3d\x75\xdd\xcf\x8b\xd9\x94\x1c\x8f\x43\xb7\x32\x49\xd6\x26\xd6\xae\x48\x24\x0d\xff\x25\x19\xe9\x51\xf2\x5f\x92\xcf\xa1\x0c\x27\x02\x62\xb3\xfb\x91\x9d\x61\xf5\x13\x58\xd5\xcd\xb3\xa4\xc6\x98\x6e\x1a\x79\x3c\xd1\x0f\x0a\x9b\x3f\x21\x38\x26\xb4\x81\xf4\xdc\xe3\x0c\x27\xeb\xb8\xab\xcf\x40\x54\x99\xc0\x77\x42\x79\xad\xd6\xe1\x52\xb0\xe1\x94\x3e\x8f\xc1\x32\x1d\x37\xdb\x58\x9f\x2e\x6d\x12\x54\xdf\xed\x34\xdc\xeb\x03\x9e\xd5\xea\x34\x0d\xc0\xca\xa6\xe3\xe2\xaa\xf1\x2e\xd3\x3c\xc0\xfb\x72\xc0\x94\xd0\xc7\x53\x42\x7a\x4e\xee\xc8\x0f\x4f\x46\xfc\xc1\x13\x81\xe6\x3d\x3c\xec\xd0\xca\xb6\x03\x1c\x1c\xb7\xab\xf2\xa0\xfb\x87\x6d\x46\x5f\x7c\xf6\xb0\x11\xf4\x9f\xec\x5d\xe4\x44\xd9\xae\x4a\x21\xdf\x73\x7d\xef\xb3\x46\x77\x3e\x7b\x78\xbd\x13\xbe\x90\x45\x1d\x7e\xef\x4e\xd1\x2a\x7a\x00\xa0\xa6\x41\x16\x6b\xe9\xf4\x10\xa5\xf3\x5e\x38\x5d\x4f\x64\x42\xd2\xb4\x25\xb9\x8e\x22\xa9\xad\x19\xca\x01\x62\x00\xa9\x9c\x83\xe2\x1d\x64\x8e\x17\x89\xdf\x16\x51\x01\x99\xc3\xf7\xfa\x49\xb3\x57\x4e\xb3\xf5\x99\x5c\xb3\x5e\x2f\x1a\x36\xcf\x7c\xc3\x33\x5e\xe3\x58\x8c\x1a\x60\x09\xe3\x19\xbd\xb1\xd3\x11\x2b\x22\x8e\xb2\x19\xf8\x82\xad\x53\xcd\xb9\x87\x50\xcb\x2d\xff\xcf\x27\x46\x45\x97\xfe\xdf\x6b\x3d\x6e\x80\x80\x46\x2f\x7b\x91\x36\x35\x1f\xd4\x51\x46\xc5\xd8\xd0\x3f\xe9\xcc\xd4\x67\x2a\x34\xaf\x01\x56\x36\x06\x93\x42\x88\x18\x9b\xba\x0f\x64\x3c\x73\x94\xb0\xf6\x7a\xe4\x70\x9c\x7d\x72\x7b\xe7\x1b\x31\x28\x7f\xb2\xda\x82\x79\xe1\x64\xb5\x25\x1e\x6c\x2d\xc2\x78\xeb\xe8\xca\x2e\x96\x34\xf0\xa7\xbc\x6c\x81\x62\x37\xf0\x79\xea\xe8\x85\x5c\x0e\x74\xe3\x25\xfd\x77\x9d\x89\x80\x48\x4d\x28\x7c\x82\xb4\xd3\xde\xd1\x3d\xb7\xfa\xd4\xb6\x86\xb7\x94\x7c\x22\x18\x31\xdd\xa2\xc5\x75\x37\xed\xff\x79\xad\x35\xc3\xb1\x93\xab\xed\x48\xdb\x6e\xe6\xb5\xf6\x4c\xc6\xfd\xf0\xa1\xb2\x82\x4d\x19\x55\xf1\x9d\x6e\xc2\x06\xde\xad\x0a\xb9\xe2\x25\x82\x39\x81\x58\x1e\xc7\x9d\x1a\x95\xdb\x41\x8c\x1d\x07\x7b\x49\xbb\x99\xe0\x0f\x8a\x79\xbb\x5e\x18\x5c\x91\x6c\x38\x3d\x9d\x82\x8d\x16\x58\x42\x38\xec\x93\xfa\x44\xf1\x4a\x58\xc6\x1f\xbe\xb6\x72\xc0\x70\xa4\x60\xf7\xed\x83\x8d\xc2\x40\x4d\xe0\xa5\x33\x8b\xcc\xb6\x9c\x34\x7d\x3a\xc4\x3b\x0c\xc4\x60\x03\x99\xb0\x7b\xde\x51\x28\x70\xe8\x8b\x86\x1e\x09\xbc\xbe\xda\xa1\xd9\x81\x7d\x23\xc0\x13\xb4\x53\x80\x6b\x68\x42\x65\xe8\xce\xdc\x1e\x66\x39\xbe\x5d\xc8\x30\x48\x32\x0c\x92\x6c\x0c\x92\x74\x6d\x88\x4e\xb5\x17\xf1\x05\x19\xd0\x12\xee\xd0\x57\x9c\x07\x41\xf2\xdb\xe4\x7b\xf4\x1b\x46\x5f\x68\xe2\x72\x0c\x5c\x8e\xbe\x7b\xa8\xcb\x75\x02\xfe\x03\x49\x54\xa3\x2b\xc8\x7b\xec\xd2\xd4\xc6\x75\x7b\x4a\x50\x5a\xfb\x5d\x38\xd1\x83\xbe\xec\x33\x14\x62\xb5\xf9\x04\x8c\xf4\x76\x1a\x7c\x22\x0c\xd7\x5e\x0d\x23\xa8\x70\x65\x6d\xbf\x04\x13\xf0\x17\xb4\x7e\xbd\x2f\x64\xd5\xc1\xb6\x8e\xe2\xea\xa7\x04\x53\xb3\x43\x51\xfc\xc2\x2c\xf1\x53\x0f\x86\x3a\x1c\xe9\xc7\xa3\x4c\x53\xf7\x06\x26\xa9\xb6\x5d\x42\xa3\xb7\xda\x5c\x50\xe3\xbb\xcf\x50\xf6\x1a\x90\x08\xb6\xc0\x99\x35\xf0\x12\x75\x5a\x52\xc5\xa6\xe7\xea\x42\xd6\xed\xa9\x4d\x7b\x0b\x26\x17\x6a\x09\x0f\xbc\x08\x4b\x49\x28\xbe\xc2\x8a\x9e\x57\x57\xe1\x9e\x58\x87\x96\x24\x1e\xec\x6a\xa9\x3c\xc1\x04\x1f\x2b\xce\x79\x11\xd8\xaa\x5f\x4e\x89\x7f\x64\x5d\x94\x74\xb6\xa4\x6b\x16\xa7\x40\x33\xf7\x2d\xab\x0b\x32\x8a\x9c\x67\x6b\x5b\xd2\xb0\x98\x08\xb9\x2a\x0f\x95\xb8\xe1\x0e\xa2\x61\x6d\xcf\x25\xec\x3c\xf6\xed\x10\x56\x2d\x96\x75\x22\x34\xdb\x5e\xb6\x32\xff\x84\x46\x0e\xc3\x6d\x3b\x77\x05\x2b\x5d\xe5\xb6\xea\x13\xa1\x02\x9e\xe8\x56\xde\x3a\x54\xd0\x15\xa1\xe5\x88\xd5\x6e\x4b\x4f\xb5\x74\x24\x9c\x12\x78\x22\x80\xb2\x7c\xcf\x33\xe8\x78\x76\x2e\x2e\xd9\xf4\x7c\x3c\x16\xe4\xb9\x5d\x8f\x6e\xb3\x2d\xc4\xb2\xde\x6f\xf6\xc3\x6f\x39\x31\x5f\x24\xc9\xd2\xfb\x35\x77\xda\x41\xcf\xdd\x7d\xb1\xde\x78\xcf\xeb\x13\x6b\x36\x6c\xc2\x63\x1e\x8f\x49\xe2\x83\xc0\xeb\x0d\xaa\xa4\xc5\xad\xf5\xcb\xd0\x9d\x1c\x83\xdf\x85\x13\xc7\xd8\xcd\x34\x8f\x7c\x0e\x8a\x75\xfe\x43\xf1\x03\xa1\x5f\x79\x79\xcd\x4b\xe4\x1f\xbc\x18\x6b\xb1\x1c\xbc\x13\x4d\xfd\x13\xa0\xf5\xe1\xf5\x56\x52\xee\x55\x58\xec\x0a\xfe\xd9\x52\x26\xf7\x6d\xcf\x14\xe9\x01\xf1\x7c\x9a\x50\x15\xdc\x01\x7c\x6d\xa7\x86\x54\xee\x8f\x98\xe8\x00\xad\x39\x1e\x87\xf7\x92\x92\x86\x61\x6b\x5d\xb9\xc2\xc3\x8f\x16\x2c\x39\xc8\xb5\xb2\x17\xfd\xb9\x98\xac\x95\xe4\xb9\x98\xd8\x10\xc9\x69\xd5\x88\xc3\xc0\x1c\x13\xb9\xdd\x51\xd4\xee\xbc\x24\x2b\x16\xe5\x92\xea\xf9\x50\xba\x13\xf5\x78\x94\x13\x74\x69\x92\xa1\xdb\x9a\xdc\xc7\x90\xf3\x72\x34\x22\xe7\x68\xfc\xe4\xcb\xc0\x96\x0a\xd0\x87\x71\x6a\x3e\xa2\x47\xed\xe7\xdc\xd6\x84\x6e\xa8\x88\x2b\x0e\x4d\x9b\x9e\x8a\x4c\xd2\x0a\x0e\x98\x61\xab\x62\x12\xb9\x20\x3b\xfb\x15\x9c\x5c\xd0\x3b\x60\x4c\x7f\xe2\x6b\x05\xba\x6e\x03\xc5\xe4\x09\xb7\xf7\x62\x39\x78\x2a\x32\x65\xcb\x72\x80\x85\x77\xce\xfc\x28\x3f\xd0\x6b\x2e\x9d\xfb\xd6\x5c\x4c\xea\x0f\xd8\x3d\xf5\x27\x93\xd1\xc7\xf1\x38\x1a\x89\xc9\xae\xf8\xf8\x4d\x08\x72\x28\xc9\xff\x02\x69\x07\xf2\x56\x32\xe9\x2d\xa2\xea\x7d\x56\xe2\x3e\x2b\xbd\xe2\x6f\x48\xe2\xa8\xd5\xda\x1f\xa1\x86\xae\xd2\x74\x08\xa7\xc3\xda\xb2\xb2\xf1\xe8\x64\x7e\x36\xd8\x94\x0c\x0e\xd8\xfb\xf7\x76\x85\xaf\xdd\x9a\xdf\xb2\x72\x0e\xdb\x66\x4d\xf2\x1b\x95\x15\x64\xf0\x15\x16\xb4\xa5\x4f\x24\xa6\xa3\xc3\x12\x5d\xdd\x3a\x87\xb7\x2d\x1d\x42\xa4\x00\xeb\xb0\xfd\x7f\xd2\xd9\x9a\x9c\xbc\x4a\x6b\xdf\x8e\x42\x9f\x27\x6e\x47\x6d\x1e\xd8\x51\x6b\x42\x37\xf7\xec\xa8\x35\xee\x28\xdf\x46\xd8\x51\xd1\x9e\xfa\xb9\xa6\x27\x53\xff\xcc\x88\xa6\x7f\xcc\x20\x7b\xc7\x9c\x36\xee\xad\xca\x62\xb6\xb1\x79\x2c\x46\x2e\x64\x50\x97\x91\xc7\x2e\x49\x46\xb5\xa3\x4a\xcf\xc9\xf2\xda\x85\x09\xc4\x3a\x77\x25\x28\x8b\x6d\xb3\x95\x40\x9e\x08\xf8\x44\x77\x00\x6f\xde\x70\x13\xfe\x8f\x0d\x80\x14\x47\xf6\x93\xb5\x63\x5f\x80\x2b\x09\xa6\x88\xf2\xc2\xe3\xdc\x01\x37\x6c\x5c\x79\xd2\x5f\x76\x92\x98\xdc\x7c\xa5\x1b\xae\x07\x70\x62\x1f\x60\x71\xbe\xf2\x2c\x0e\x45\x25\xe2\xc0\xd0\x5f\xb8\x76\x12\x1c\xec\xe6\x25\xe6\xbe\x7b\x42\x64\xfb\x93\x45\xe1\x97\xb1\x9a\xae\x57\x8d\xa8\x91\xfe\x7c\x4d\x41\x87\xac\x55\x57\x18\xb1\xa8\xa6\x01\x34\x4b\x10\x6a\xbc\x5b\x1b\xee\xd3\xd1\x29\x68\xb3\x80\x26\xaa\x6b\xe4\x48\xd0\x70\x23\x81\x83\x6b\x71\xe3\x21\x90\xc9\xb2\xcd\x56\x9f\x02\xf6\x48\xdd\xe8\x41\x28\xea\x12\x70\xd7\x5c\xa5\x35\xaf\xbe\xe1\x99\x02\x98\x81\x16\x00\xb7\xaf\x2f\x9c\x70\xdd\xea\x08\x35\x4e\x07\x62\x0d\x2e\x15\x1b\x47\x35\x45\xd4\x05\x77\xf6\xe1\xa2\xea\xd8\x3a\xdd\xd4\x08\xe4\xb1\xbd\x34\xe8\xe0\x41\x51\x05\x5c\xd4\x68\xc5\x86\x33\x5a\x3a\xb3\xf4\xfb\xc1\xd9\x4b\xf6\x46\x64\x7f\xc8\x0c\xf1\xc4\xbd\x7b\x51\x2a\x91\xd3\x2c\x9d\xb9\x79\x1f\x93\xc9\x98\xf0\x90\x6f\x01\xf1\x9b\x81\xe9\xc3\x89\x10\x32\x90\x4d\x4d\x9d\xb8\x9f\x60\x70\xa4\x55\xc6\xc9\x60\x63\xab\xb5\x2b\xf2\x47\x10\xcb\xdf\xdb\xcc\xd0\x1e\xd5\x73\x93\xa5\x3d\x28\x9f\x4f\x01\x78\xe4\x32\x34\xf1\x85\x3f\x0d\x43\x08\xe3\xb4\x15\xcb\x4c\x1d\x12\x61\x28\x54\x28\xcf\x00\xf1\x90\x47\x3d\x69\x62\x65\x02\x80\xd2\x00\xee\x29\xd2\x08\xae\xeb\xe7\xd4\x3a\xcc\x0f\x2e\xea\x80\xfc\xfb\xd4\x21\x44\x1c\x5a\x5b\x20\xc3\x01\x1f\x2b\x7f\x19\x1f\x98\xc9\xe6\x50\x96\x73\x0e\x60\x0b\x18\x3c\x74\xda\x8e\xc7\x63\x97\xc5\xda\x06\x44\x7d\x02\x79\x5c\xbd\xf5\x44\x1e\x48\x6e\xa2\xf0\xc4\x39\x32\x8d\xcf\x3d\x0f\x40\x43\xe8\xba\x11\x82\x98\x39\xeb\xe3\x71\xe5\x4d\x4c\x70\x6b\x00\xab\x5a\x34\xae\xaf\x6e\x91\xe7\x61\xb9\x77\xb6\xc2\x60\xed\xdf\x71\x56\xe1\xa2\xb8\x25\xf6\x04\x0c\x83\x5c\x63\xdf\x80\x90\xa9\x1d\x18\x5d\x38\xb6\xe4\xf4\x90\xf4\x0f\xb4\x92\x91\x08\x1a\x2a\x49\xbe\x11\xee\xf1\x89\x7e\x03\x17\x5d\x5a\xa9\x98\xb0\x7e\xab\x63\x9b\x25\xcb\x40\xc3\xfd\x46\x13\xba\xe7\x70\xe5\xb9\x98\x06\xc5\xbe\x81\x64\x9a\x6a\xa6\x4e\x7d\xaf\xb0\xa0\x24\x12\x69\xd7\xd9\x5d\xfd\xa2\x66\xb6\x35\x30\xd9\x6e\xdc\xfc\x00\x89\x53\x24\x42\xf8\x45\x3f\x6c\x3d\xf5\x43\xd3\x4d\x02\x40\xff\x6b\x8f\x3e\x52\x79\xe0\x65\xaf\x3c\xe0\x87\x30\xbc\x7d\xcf\x3b\x21\x79\x9f\xd6\x39\x2d\xd9\x06\x54\xe9\x0e\xec\xee\x34\x10\x63\x7d\x59\x02\xbc\x95\x1e\x95\x7e\xe1\xc4\x7a\x03\xa3\x83\xc9\x40\x5d\x55\x5f\x14\x74\xcb\xc4\xe5\x6a\x0c\xa0\xf7\xfa\xa2\x22\x87\x48\x7b\x6a\x3d\x9f\xe6\x3a\x9c\x22\xe2\xb2\xf2\x17\xb9\x4d\x64\x0e\x42\xb3\xed\x7c\x95\x0b\x32\x2e\xc9\x60\x33\x64\x76\x0f\xc6\x65\x6c\x50\x60\xb7\x7f\xb8\xab\xe0\x49\xab\x1b\xd4\xed\x2c\x28\x28\xec\xd8\xd6\xf6\xd6\x1e\x46\x9e\x1c\x6d\xc4\x47\xbe\xfe\x06\x8e\xe0\xb9\x0a\xaa\xbd\x11\xea\x6f\x3e\x25\xf4\x86\xc9\xb1\xb9\xdc\x05\xb7\xba\xc0\x7b\x9b\xd1\x8e\x50\x73\x31\x9b\xce\x0f\xb1\x36\xd4\x34\x37\x17\xfb\x66\x50\xa4\x98\x61\xc6\xd9\xcd\x7c\x9a\xcf\xa6\x84\xe4\xf2\x72\x37\xda\x8f\xff\x1c\xf5\x1b\x61\xf6\x46\x3e\xc9\x78\x47\x68\x64\x55\xfc\x45\xb8\x84\x04\x85\x26\xa7\x68\x74\x3c\xfe\x6a\x89\x88\x43\x8e\x33\xd1\x46\x8b\xca\xad\x1d\x44\x76\xc7\xaf\xa5\x98\xd6\x4d\x43\x46\xc6\x17\xaf\x3b\xc5\xdb\xe9\xea\x2d\x1d\x17\x62\x43\x8d\x25\xef\xa4\x20\xa3\xd8\xe7\xcb\x3f\x41\x7a\x0e\xdd\x89\x3d\xfd\xa3\xba\x60\x46\xa8\x66\x86\x4a\x66\x1e\x72\x4a\x62\x26\xab\xed\xbc\x36\x6a\xb1\x9f\xe3\x19\xc9\x6d\xbe\x66\x28\x58\x8c\xb5\xdb\xf3\xa3\xaa\x58\x63\x13\x23\xd6\x5d\x5e\x57\x88\x8f\x22\xa8\xda\xf6\x12\x22\xa9\x47\xbe\xcb\x87\xd3\x88\xda\xfc\xaa\xbb\x48\xe9\x51\x35\x88\x95\x7e\xd7\xd7\x80\x60\x8a\xaf\x19\xfa\x66\x71\x52\x0b\xe9\x3f\x2d\x53\x21\x5a\x50\x88\xe8\x3f\x89\xca\x36\x14\x22\xf8\x4e\x02\x1f\x83\x7b\x32\x36\x0e\xbb\x2f\xb6\xb3\x02\xd5\x74\xea\xc0\xf9\x1b\x16\x58\x0e\x13\x51\x06\x4c\x44\xd3\x03\xfd\x17\xcc\x45\x61\x8f\x89\x68\x66\xa3\xb1\xf8\xa6\x07\x11\x04\x2d\x44\x63\x65\xb9\xa4\x58\xaf\x13\x42\x93\x6a\x57\x68\xe7\xae\x2e\x53\x93\x9d\x5a\x73\x80\xbd\x91\x66\x2e\x58\x85\xd8\x65\xb9\x66\xc9\x5e\xf3\x9b\xa4\xb6\x19\x68\x9b\xb6\x55\xec\x99\xbd\x54\x1a\x42\x4b\xb6\x55\x19\x8a\x3a\xf1\x52\x52\x90\x41\x85\x77\xf7\x27\x1b\xc3\x6d\x35\xf1\xa7\x53\xcf\xba\x71\x7e\xbb\x31\xe3\x64\x07\x9a\xb2\x8f\xfe\xf1\xb6\xfa\xd3\x23\xb2\x98\x22\x8c\xcc\xf1\xf8\xe8\xed\x6b\xf7\x48\x8c\xe9\x88\x7b\xcd\x8f\xba\x90\x1d\x58\xa3\x17\x99\xa0\xae\x4c\xb4\x7b\x5a\x05\x3e\xd3\x17\xc1\x58\xa1\x8e\xc7\xc3\x25\x3c\xb5\x80\xd0\xc1\x4b\xdc\x06\xbe\xdf\xa7\x93\x73\xbc\x3e\xa5\x9a\x25\x52\x99\x64\x80\x11\x8c\xe9\xf9\x81\x99\x4b\x85\x9c\xf4\x1c\x0d\xf8\x14\x35\xe3\x19\x69\x0c\x41\x3e\xcd\x61\xc0\x31\x43\x39\xaa\x47\x10\x9b\xf9\xb3\x14\x26\x4f\xaa\xc3\x95\xd1\x05\xd8\x13\x42\xb2\x71\x7f\x32\x09\x90\x55\xf5\x21\xa9\xc1\xdf\x78\x39\xd2\xf6\x70\x89\x28\xe0\xc1\xdb\x6d\x25\x09\xdd\x32\xe7\x5a\xb5\x59\xe0\xaf\xc2\x6c\xdf\x14\x57\xb5\x84\x73\x13\x1b\x99\x1c\x1e\x15\xe4\x7c\x73\x3e\x1e\x6f\xc8\x76\xc4\x0a\xba\x1e\xb1\xe4\x2d\xba\x39\xdc\x5e\x1c\xd2\x34\x5b\x8f\xd8\x4e\x65\x87\xf1\x96\x10\xba\x1e\xb2\x95\x67\x62\xbf\xd5\x99\xa2\x6b\x30\x6e\x73\x7e\xba\x0d\xad\x47\xbe\x76\xc8\xdc\x59\x09\x74\x38\x85\x3b\xde\x86\x4d\xcf\x37\x17\xaa\xe7\x81\x63\xe3\x1f\x38\xf6\x2c\x8e\x5e\x6c\xd0\xed\x67\xc3\x69\x66\x9a\xee\xfd\x9d\x33\xe8\x7c\x93\xbb\x5f\xec\xd5\x63\x43\xdd\x35\x76\xcb\x5a\xad\xdb\x12\xe2\x5d\x2c\x46\x80\x80\x1d\x95\x26\x63\x6f\x0b\x5e\xef\xa6\x3d\x23\x66\xae\x00\x4c\x83\x7e\xe7\x1e\x06\x72\x70\xe3\x13\xe0\xcf\x04\xca\xe6\x33\x99\x29\x2a\x88\x97\x27\xf8\x9b\xaa\x00\x8f\x46\x11\xa5\xfe\xbe\xf3\x06\x14\x5e\x62\xfd\x45\x5d\xb2\xc5\x92\x22\xca\x6b\x00\x11\x02\xb0\x57\x9f\x47\x31\x93\xe9\x85\x58\x92\xf3\xda\xee\x63\xcf\x33\x85\x77\x8a\x1b\x95\x49\xe2\x1e\xbf\xce\x03\x24\x1c\x0a\xa2\xdc\xeb\x58\x81\x29\x55\x78\x3d\xbb\xc3\x9f\x0c\x23\xfc\x98\x39\xa1\x9f\x22\xa7\xdf\xda\x36\x79\xb5\x14\x3d\x12\xa0\x9a\x4b\x36\x3d\x37\xe3\x31\xf9\x56\x3b\xa6\x3b\x49\xa8\x5c\x18\x27\x41\x85\x5f\x46\xd1\x64\xb4\xe6\x25\x37\x96\x7d\x86\x73\xeb\x14\x3f\x8b\xfe\xa5\x87\xc3\x73\x87\x0f\xe0\xa3\x6c\x69\xc5\x34\x45\x7c\x13\xaa\x1a\xae\x8e\xbc\x32\x30\xad\x58\x26\xe6\x87\x22\x5f\x15\xc4\x5e\xd9\xa8\xf6\xae\x9b\x70\xc6\x2a\xbc\x85\x03\x0f\xab\x46\x9a\xf8\x4b\xf8\xf1\x28\x2f\x19\x0f\x40\x4a\x95\xf8\x83\x1f\x8f\x99\x62\x92\x0e\x1d\xa0\x0a\x95\x84\x44\x0a\x84\x05\x13\xf3\x4c\x5f\x4c\xe7\xb2\xc8\xb5\xad\x8b\xe4\xf6\xab\x8c\x6f\x20\xf9\x14\x09\x4e\xc1\xaa\x41\xc0\xa4\xb1\x94\x6e\xb5\x2d\x34\x18\x9b\x1e\x62\xbf\x79\x2b\x55\x1e\x76\xd2\x85\x03\x64\x81\x8f\xf9\xa0\xf4\xda\x39\x1c\xbc\xd6\xea\xb0\x87\x34\x7e\x1a\x56\xb8\xe3\xd6\xac\x8e\xa3\x5b\x16\x89\xb6\xae\xb9\xf9\x96\x97\x7b\xae\x33\x43\xa1\x28\x70\x3b\x99\x10\xba\x61\xc3\xe9\xf9\xd0\xf6\x82\x1c\x8f\x87\x6c\xb8\x21\xe7\x1b\x7b\xc1\x73\xfb\xb2\x6c\xf8\x4a\x2a\xc8\xf1\x98\xbc\x95\x09\xdd\xb1\x37\x2a\xdb\xd3\x2d\x99\x27\x1f\x92\x7c\x9d\xa6\x36\x94\xb1\xfd\x3c\x91\x49\x3e\x5c\x5b\xf2\x5e\x39\xf2\xbe\x27\xb8\x41\x92\x3d\x10\x1b\x1b\xb9\x39\x1e\x77\xc7\x63\xb6\x63\x89\x6d\xc1\x2a\x4d\x57\x43\xb6\x23\x77\x9e\x5d\x9f\xd1\x43\x16\x36\xae\xd8\x64\xbb\x34\xcd\x56\x6c\x47\xa8\xbe\x9c\xa6\xe9\x10\x1a\xe9\xb0\x79\x6d\x23\x6f\xd8\xdf\x38\xba\xb6\x52\xb4\x20\xd4\xd0\x2a\x52\x47\x3b\x03\xe7\xc1\x37\xe4\x78\xcc\x6e\x26\x5b\x61\x5e\x7b\x77\x66\x37\x11\x92\xe5\x7d\x87\x2c\xac\xb8\xd2\x81\x15\x07\x8f\x8f\xde\x65\x58\xac\x23\xdc\xeb\x95\xcb\xc1\x67\xff\xeb\x98\xb9\x03\xe7\x73\x71\xa4\xff\x94\x55\x63\x58\x69\xb3\xc9\x97\xf9\xe4\x4b\xf2\xa7\xc6\x45\x07\x0d\x6f\x83\xdf\x4b\xbc\x8b\x5c\x4e\xe7\x01\xbd\xf7\xcf\x39\xc2\xe5\xfe\xb9\x76\xa9\x85\xd6\x50\xbf\x3b\xb7\x67\xce\xb1\x99\x77\xf8\x86\xa3\x8b\x77\x94\xe9\x5c\x5c\xb0\x69\x2e\x2e\x99\xf2\x28\xf0\x77\x65\x34\x94\x7e\x9e\x46\xec\xcb\x3f\x05\xc4\xab\xf2\xf4\x2a\x76\xbe\xbc\x52\xb2\x32\xfa\xb0\x32\x4a\xe7\xaf\x9c\xdb\x9d\x88\x98\xb4\xd0\x70\x9c\x2f\xf5\x3e\xbb\x1b\x5a\x71\xf3\x0a\x4e\xbd\x96\xab\xe9\x9b\xda\xef\xb7\x3b\x15\xa9\x64\x7a\xc1\x97\x03\xfb\x07\xce\x8f\xc4\xb2\x12\xc9\x90\xd9\x4d\x0d\x81\x86\xfe\x5d\x4f\xb6\x45\xf5\xea\x83\xfc\x51\xab\x3d\xd7\xe6\x16\xcc\xc7\x9c\xf7\x78\xfa\x77\x9b\x0a\xbd\xc7\xc3\xe5\x98\x9c\xe8\x75\x4f\xf5\x4d\x47\xcf\xae\xf6\x05\x5f\x42\xea\xa7\x6a\x75\x9f\x4b\xe8\xb5\x5a\x9d\x68\xb1\x5e\x7f\x0f\x3a\xa0\x6d\xd7\xd9\x00\x28\xda\xd0\x45\x35\xf3\xc4\x92\xe3\x24\x4f\x0e\x12\xf4\x4a\x92\x65\x76\x23\x41\x8b\xc6\x89\x17\x3a\x25\xc5\x74\xba\x5b\x62\xdb\xab\xcd\x68\xa4\xc1\x05\xeb\x42\x2f\x99\x1d\x25\x70\x25\x24\x8b\x1d\x67\x8c\x47\x46\x65\xf0\xf2\x96\x69\x3a\x23\x74\x38\x85\x1e\xbc\xba\xe1\xba\x2c\x6e\xf3\xbf\xc4\x8a\x31\xd1\xb4\xf0\x89\x51\xef\xb9\x9c\xf3\xfc\x95\x25\x44\x2f\xd5\xda\x79\xd1\xf6\x53\x85\xaa\x63\x1a\x1d\x0f\xbc\xb6\x6d\x24\x66\xab\xd5\x07\x90\x4f\x3f\xd3\x5a\xe9\x2c\x71\x95\x54\x67\xbb\xe2\xf6\x4c\x2a\x73\x76\xc5\xcf\xa0\x3b\x9b\x43\x39\x49\xc8\x20\xea\x9f\x72\x49\xdd\x9b\x88\x9d\xf7\x5c\x53\xfb\xef\xf5\x9e\xaf\x72\x4e\xd5\xbe\xf8\xe7\x81\xe7\x06\x3d\xa5\xd8\xdf\x27\x8f\xe1\x0a\x05\xd8\xa4\xdf\x70\x39\x1a\x51\x4b\x30\x01\xf9\x96\x10\x37\xc8\xfd\x9d\xbd\x67\xa4\x7d\x4b\xfa\x86\xda\xfb\x3b\xb7\xa3\xec\xdb\x06\x87\x14\x0c\x7e\x47\x7c\xc2\xd3\x54\x3e\x3c\x1b\xbd\x1d\x80\x97\xa4\xd0\x0b\xdb\x0d\xe4\x16\xc1\x67\x56\x7b\xc2\xec\x2d\xd9\x57\x3c\x8c\xe4\x36\x9e\x29\x1a\x36\x65\x39\xee\x42\x3d\x8f\xe7\x72\x02\x1c\xfc\x77\x78\xed\x70\xec\x7c\x8e\x1c\x76\x6e\xe6\xc0\x38\x47\xcc\x31\xa1\xcf\x79\x50\x7c\x04\xbb\xd9\x6f\xb4\x53\x77\x84\xd6\xd4\xed\x0d\xba\xa8\x9f\x1a\xf8\x16\x33\xa5\x19\x28\xf0\x3c\x0c\xe4\xb7\xc9\x44\x70\x6f\x2f\x6a\xb6\xf3\xd2\x72\xe3\xbe\x41\x51\xb8\xb3\xd3\xd5\x2c\x0e\x93\xac\x59\x7f\x78\x0d\x49\xd3\x7f\xba\xe1\x77\x16\x9d\xc8\xd4\x08\x0f\xfe\x50\x30\x81\x10\x0f\x55\xe4\x08\xc6\x8b\x47\x07\x91\xf0\x14\x11\x8d\x6b\xcc\x0f\x27\x1a\xcd\x0a\x7b\x73\x9f\xe6\x33\x42\x46\xb3\xc8\x34\xbb\x3a\x2f\x2f\x34\x68\x03\xf8\x2e\x94\x94\x07\x29\x6b\x77\xa8\x06\x53\x06\x58\x9e\x00\x32\x18\x60\xe2\x3c\x7f\x79\x58\xc8\xa5\x6b\xf1\x64\xb5\xb5\x07\xf1\x2f\xd1\xcc\x49\xcf\x82\x2b\x0a\x09\xc1\x31\x3f\x4a\x11\xed\x14\x5e\x73\xf3\xc6\x52\x80\x27\x26\xef\xd3\x6e\x3b\xfb\x9b\x0c\x93\x8e\x44\xd6\xf6\x10\x72\x54\x0f\x67\xd8\xf0\x8c\x13\xa7\x0c\x1a\x6a\x79\x73\xbb\xe7\x8d\x9a\xc8\x1d\x07\x7b\xdf\x7a\x9d\xa1\x90\x84\x6a\x66\x04\x16\xf4\x4c\x44\xd1\xde\xd5\xaf\x64\x53\x2a\x58\xa6\x6b\x00\xca\x47\x8f\x81\x37\x40\x7f\xb2\x76\xbc\x88\x61\x7a\xf1\x78\x89\x6c\x5a\x7c\xb6\x16\x4c\x8e\xc4\xe5\x25\xf8\x2e\xcd\x8a\xb9\x5e\x3c\xfe\x53\x31\x9e\x2d\xf3\x29\xb9\x64\x8a\x08\x56\x04\xeb\xde\x61\x06\x91\xa3\xd9\xf2\x42\x11\x72\x07\x05\xfe\xa9\x18\x3d\x5e\xba\x93\x55\xb2\x62\x34\xc3\x87\x99\xca\x6e\x36\x84\xb2\x7d\xb5\x01\x48\x42\x47\x60\xce\x12\x92\x8f\x67\x9e\xe7\xa9\x2e\xa6\x73\x93\x4f\x19\xab\x90\xf5\x32\x01\x54\xa5\x1a\xcf\x70\xa0\x2c\x0d\x6e\x8d\x51\x6b\x0f\x59\x12\x52\xdb\x8b\x00\xf7\x62\x33\xcd\x5f\xd5\xbf\x33\x87\xac\x5d\x4f\x6f\xc6\x09\x52\x20\x02\xf9\x73\x03\x95\x21\xe7\xd9\x3f\x93\xbe\x00\x4c\x83\xbe\x8b\x17\xd3\x65\x94\xaf\xbd\x04\xbc\xe6\x1c\xb0\x2c\x95\x6c\x9f\xe0\xc1\x08\xe5\x4c\x3b\xdd\x87\xca\x5e\x3c\xa8\x60\xbe\x2a\xec\xbb\xd3\x57\xee\xd0\x59\xb1\x30\x4b\x22\x17\xf6\xdf\x32\x4d\xbd\xa2\x1d\x7e\xd7\xec\x38\xa4\xaa\xef\x63\xd3\x73\x75\x61\x83\x3c\x85\x51\x9e\xc2\x14\x0c\xb3\x2e\xd4\x72\x39\x28\x42\x79\x85\x47\x5d\x9e\x6c\xa1\x8f\x88\x80\x29\x17\xf1\xf7\x72\x5e\x57\x1e\x07\x93\xdc\x06\xd8\x93\xa0\xd1\x3e\x0c\x41\x06\xcf\xeb\x0f\xbd\xbb\x2e\xd5\x55\x51\x76\x5a\x55\xb1\x10\xb7\x50\xcb\x41\x35\xd9\x6b\xbe\xce\x04\xcc\x26\x49\x53\x87\xdb\xab\x69\x35\xb9\x29\x4a\x12\x6a\xc1\xcf\x1a\xd5\xd4\xce\xd1\xeb\x70\xe9\xbf\x9f\x23\x5b\xab\x55\x58\x9a\x8e\xb7\xca\x38\xfb\x0e\xd4\x23\x51\xfe\x39\xd7\xee\xda\xa5\x9d\x43\xdf\x9c\x5b\x6a\x06\xe4\x00\x05\x87\x5f\x2b\xa5\xd7\xfd\x4b\xa1\x43\x76\x01\xd2\xcc\xd7\xf8\xb5\xab\xb1\xae\xc9\xd2\xec\x3c\x51\x57\xbf\x23\xdc\x93\x3f\x5f\xe7\x4d\x12\x91\x43\xa3\x80\xe0\xe5\x1a\x09\xb4\x39\x1e\xf1\x16\x60\x5b\x05\x6a\xe6\x3d\x6d\x72\xd5\x3e\x71\xd5\x36\x0b\x6d\x16\x01\xd9\xed\x45\xac\xbf\x88\xdf\xeb\xb1\xfa\xd1\x04\x02\x19\x0a\x40\x6c\x4d\xca\x41\x42\x79\x02\x84\xdb\x27\xde\x51\x67\x6f\x79\x75\x31\xe8\xdb\x8d\x82\xab\x8b\xe9\x29\x2a\x13\x64\x9e\x2f\x63\x5a\x38\x6a\x70\xe3\x91\x4b\xe7\x13\xc5\xdb\xc0\x13\x64\x25\x7a\x26\x06\x9c\x7a\xc3\x1e\x6b\xcb\x54\x78\x38\x7e\xfd\xd4\xe1\xec\xd7\x33\x89\x7e\x9f\xf9\x45\x33\xc1\x9c\xb7\x72\xe4\xfc\x12\x6c\xc7\x98\x40\x7f\xe4\x54\xb3\x06\x25\x77\xdb\x4c\xb3\x40\xca\x5e\xba\x21\xd0\x38\x08\xd3\x7b\x06\x61\x94\xc9\x79\xa8\x0a\x3b\x3a\xfe\x51\x64\x9a\xe4\xf6\xa4\x59\xf3\x4d\x71\x28\x4d\x8d\xa4\xdb\xc3\xe3\xff\x60\xb2\x78\xe8\xea\x5c\x01\x91\xb7\x27\xd3\x77\x9d\x4c\x15\x37\xf8\xce\x82\x8e\x3e\x7a\x59\x36\x97\xf9\x37\x1d\xf5\x3c\x68\x48\x74\x5f\x83\x25\xe3\xee\xc9\xc6\x39\x0f\x81\xd7\xc4\x46\x08\xbb\x3b\xd5\xde\xd0\x17\x66\xc9\x34\x1d\xea\x34\x7d\xa9\x32\x89\xa6\x8e\xcd\xd4\x0e\x53\x7c\x7a\x42\x75\x10\x50\x58\xc2\x56\x77\xb8\xb5\x9b\x16\xbc\xab\x65\x1e\x98\xdb\xfd\x03\x8d\xcf\xda\x75\x06\xdb\xb9\x66\x5d\x96\x18\x35\x02\x16\x96\x0c\x66\xdd\x40\x87\x65\xac\x33\x13\xab\x8b\xd0\x97\xaa\x9d\x96\x74\xb3\x3b\xe8\x76\x3a\x1a\x49\xd7\x25\xbb\xbb\xbe\x93\x1b\x95\xb7\x9e\xfd\xfb\x96\xb6\x3d\x97\x9a\x6c\x6d\x07\x2b\xd8\x30\x8e\x7a\x99\xbc\xb5\x5e\x1b\x49\x4f\x9e\x45\x40\xda\x95\x19\xf6\x06\x80\x62\x1b\x69\xbc\x2f\x78\xbb\x09\x0d\x45\x7b\xbf\x9c\xe3\x23\x2a\x6a\xd6\xd3\x46\xdf\xf2\xd6\xe4\x41\xca\xaf\xcb\xa2\xaa\x5c\x72\xf8\x4d\xaf\xae\x7d\x98\xfb\x45\x3f\xe8\x62\xef\xc3\xc2\x6f\xfa\x41\xac\xaf\xb9\x81\x30\xfc\x75\x82\x63\xe1\x17\xc1\x3f\xec\x95\xee\xd9\x18\x4e\x7b\xa4\x4d\x55\x9e\x7b\xc5\xef\x76\xc4\x1b\x75\x82\x4b\xe6\xaf\x50\xfc\xfd\x28\x9a\xb4\xa0\x80\x95\x49\x57\x74\xcd\xe2\x52\xe8\x96\x65\x9c\x7d\xdd\x4b\x8f\x09\xf1\x8f\x35\x1b\xc6\x83\xa8\xc7\x38\x67\x82\xde\xff\x10\x4b\xbc\xff\x21\xf0\x19\xfa\x30\x3a\x35\x45\x10\xe9\x5e\x31\x46\xc5\xcd\xcf\x92\xaf\x85\x29\xae\x4a\x0e\x0e\xd3\x9d\x67\xa6\xd8\x7d\x90\x21\x34\x01\xc3\x31\xc6\x24\xd9\xc2\xe5\x79\x5f\x8b\x01\x8b\x2b\x75\xc3\x9d\x1c\x50\x72\x27\x42\x74\xc2\xba\x70\x7d\x58\xf7\x4b\xa2\x5a\x04\xad\xc6\x19\x84\x2c\xd8\x92\x06\x16\x42\x84\x54\x12\x9b\xeb\x9f\x37\x9a\xc1\xbd\x94\xa9\xe9\x93\xfb\x72\x0f\xc2\x70\xa3\xf6\x97\xcd\x88\xb9\xeb\xd3\xb8\x19\x9c\xdf\x53\xce\x05\xdb\xa7\x69\x66\xf3\xb8\xd7\x34\xba\x09\x29\x10\xc0\x61\x97\xa6\xd9\x86\xed\xc6\x8d\x50\x72\xf2\xb3\x68\xd4\x9e\xd5\xae\x61\x21\xa8\x04\x00\x0e\xf7\x01\xef\x77\x2c\x49\x68\x02\xbf\x12\xc6\xc4\x3c\xdb\xb0\x9e\x01\x69\xd6\x40\x5b\x05\x4c\xf7\x1f\x13\x92\x67\x89\x2d\x1c\x0a\xd9\xb0\x69\x9e\xec\x00\x30\x2d\x41\xfb\x80\x0d\xeb\x1b\xe7\x56\xc3\x1f\x3d\x26\xcd\x86\x6e\xa0\xf1\x68\x90\xa0\x90\x74\x16\x6c\x43\x2b\xb6\xa5\x25\x6b\x0d\x06\x3d\xb0\x6d\x6b\x00\xdd\x03\x74\xb6\x62\xbf\xe8\x2c\x6c\x13\x42\x62\xb7\x6b\x3b\x1b\xb3\x6a\x7b\xe7\x1b\xb2\x8e\x73\xcc\x3a\x15\x7a\xc7\x3b\x51\xa3\xc5\xf5\x35\xd7\xaf\xe4\xf7\xfc\xf6\xa9\xfa\x00\xf7\xf3\x37\x9a\x34\xc2\xc1\xcc\xce\x46\xfc\xd8\x8a\xf8\x79\x9f\xbf\xd4\x94\x7f\xe4\xab\xaf\xd5\x6e\x57\xc8\x75\x9b\xbe\xae\x3a\xfc\x7d\x4d\x4d\x57\x72\xc1\x63\x2f\xd1\x28\xe2\xf0\xe5\x3f\x2b\xf9\xca\x68\xb1\xea\x9c\x40\xcf\x78\x30\xa8\x24\x84\x6e\x84\x5c\xff\xa8\xaa\x6f\x3b\x84\xc5\xb3\x28\xb3\x81\x01\xb9\xb4\x60\xe3\x19\x35\x6c\x1c\x69\x2e\x2a\x36\xa5\x45\xeb\x66\x79\xae\x2e\x00\x6e\xa0\x60\x7f\x89\x8e\xe3\x82\x0a\x28\x93\x78\xc1\x29\xe8\xf4\x9f\x07\xd7\x72\x74\xa7\x6e\xf8\xb7\xf7\x0a\xd0\xc0\xc6\x53\x3b\x04\xda\x1a\x1f\xe9\xab\xdb\x28\xb9\x0c\x7c\x80\x6e\x63\xd7\x6a\xd8\xf4\x98\x1b\x74\x9d\x51\xd4\x31\xff\x8b\xce\x34\x9e\xc0\x68\x2e\x04\x3d\xaf\x4d\x16\x4d\xf9\x52\xdd\xf0\x5f\x44\x75\x28\xca\xf2\x96\xe4\xfc\x62\x3a\x97\x9e\x25\x96\xc0\x12\x9f\x08\x3d\x28\x18\x47\x7c\xd2\x79\xb8\x0b\x01\xc1\x5b\x46\xf7\x82\x49\xa5\x76\xdc\x6c\x85\xbc\xc6\x8e\xf1\x75\x46\xe6\xf2\x01\x13\xe4\xf0\x7a\x94\x7f\xef\xe4\x1a\x0d\x7e\x01\x67\xed\x2f\x3a\x93\x54\xd7\xdd\x1a\xce\x02\x3f\x63\xbb\x81\x87\x90\x00\x7b\x0b\x48\x74\x72\xc6\x35\x2e\x8b\x51\xb9\x38\xb9\xa3\xdf\xad\x90\x5f\xee\x5f\x21\x54\x31\x79\xff\x2a\x29\xd8\x94\x56\xed\x55\x52\x5c\x98\xf3\xd1\xa8\xf0\x72\x78\x7f\x3a\x55\x14\xbc\xe0\x45\x8f\x55\x6a\xae\x58\x09\x74\x20\xc7\x7f\x4c\xd1\xac\x62\x7f\x0d\x22\x1d\x41\x75\xbd\xac\x9a\x2e\x0b\x2b\x5c\x57\xbf\x3c\x38\x29\xd1\x64\x78\x87\x52\xc3\xd6\x0a\x42\x3d\x75\x58\x3e\x69\x8a\x8a\x8c\x3d\x93\x06\x6d\x7e\x78\x8d\x16\x08\x98\x43\xa2\x99\x28\xfc\x82\x2a\x60\x41\x39\x45\xad\xaf\x4d\xa6\x69\xe1\x21\xbb\x60\x44\x3c\xb4\xc9\xb5\x2a\xca\xaf\xe1\x95\x0c\xd4\x0f\x60\x48\xe2\x50\xe2\xfd\x5a\x39\x67\x95\x08\x20\x6f\x07\x4c\x53\x94\x30\xf9\x97\x5e\xf7\xa0\x63\xd2\xb4\x60\x4c\x36\x6f\x8f\x69\xfa\x85\x76\xd7\x53\xfa\xc4\x36\xa6\x74\xed\x80\x93\x0b\x1d\x64\xd2\x12\x97\x3f\xf5\xa6\x37\x91\x91\xce\xf4\xbc\xb8\x90\x3d\x4f\xde\xc5\x68\x44\xe2\xf0\x45\xb1\x8c\xda\xce\xc4\xa2\x58\xfa\x35\x87\xc0\xb3\x3d\x22\x9a\x1e\x59\x95\x53\x32\x04\xd1\x94\x37\x57\x44\x3d\x99\xe8\x9e\x55\xbf\x01\xf2\xc6\x1b\xe0\x79\xc6\x1d\x60\xfd\xf1\x28\xc1\xe0\x0f\x7b\x93\xa6\x7a\x3e\x1e\xeb\x7c\x34\x92\x11\xc9\x0b\x8f\x81\x9a\xd0\x82\xbd\x51\xf0\xec\x3d\xef\x79\x0e\x79\xa3\x40\x4b\xf9\x94\xd7\x6f\x81\xaa\x2f\x61\x1d\xcd\xc9\xa9\xe7\x5d\x65\x18\x27\x48\xd3\xa1\x2d\x97\x9c\xce\xe1\x31\xb0\xc8\xea\xe6\x8c\x67\x84\x9c\x93\xf1\xd8\x39\x74\xab\xe5\xbd\x8d\x64\xd2\x26\xb2\x7c\x7d\x8f\x06\x3c\x9a\x91\x39\x75\x77\x14\xea\xc2\x09\xa7\xae\xaf\x4b\x90\xfb\x7f\xd0\xc2\xf0\x46\x13\x9d\x76\x5d\x9a\x72\xd6\x96\xfb\x43\xe2\xe3\x31\xcb\xfa\xc2\xd9\xb0\x2f\x94\xcc\x9f\xab\xc6\x05\xd0\x69\x4d\x3d\x15\x37\x0d\xab\xe5\x90\x21\x21\xf9\x8b\xff\x6c\x0e\xfa\x57\x27\xf3\x4c\x42\xe0\x1b\xe8\x61\x42\xf1\xa9\xab\xaf\x61\xf6\xba\xef\x1c\x50\xdf\xfb\x9e\xd5\x60\x75\xaf\xb9\x79\x2e\x78\xb9\xce\x08\xba\xb7\x3e\xd1\x1a\x2e\xa7\x5b\xc2\x30\x1b\x36\x1e\x11\x6a\x73\xf9\x61\x38\x38\x56\x85\x34\xcf\xd6\xc2\xd8\x4b\xb1\xe3\x53\x7a\x08\x9b\x13\xf3\x78\x25\x3f\x03\x4a\x7e\xc0\x19\xd0\x30\x57\x91\xb7\xc4\x58\xd5\xaf\xa1\x0a\xd8\x49\x82\xf8\x76\x4e\x9a\xfd\xda\x59\x8a\xc4\x17\x42\x0f\xb4\xd4\x18\x0c\xaf\x4f\x39\xf0\xd7\x34\x54\x14\x8c\x34\xbf\xda\x6e\xf6\xb7\x9e\x1b\x6e\x40\x6f\xad\x9d\x07\xc6\x71\xa3\xf4\xe0\xbb\x94\xa2\x87\xd2\x86\x5b\xf9\xfb\xf3\x20\xa7\x18\x5f\x0d\xf2\x8d\x4b\x4b\x23\xbe\x34\xdf\x06\xb7\x8f\xb4\x69\x1a\xd3\x33\xee\xe1\xc0\xe2\xf3\x8c\xb3\xf8\x92\xd7\x16\xcc\x85\x13\x16\xae\xaf\x34\xf6\x2e\xd8\x58\x03\x5d\x85\x41\x42\xba\x0a\x53\x7c\xce\x23\x2b\x08\x67\xff\x00\x25\xe7\x5e\xb7\x72\x03\x4e\xf6\x42\xab\x78\x48\x41\x40\x78\x06\xd2\x0f\xa3\x5c\x42\x74\x98\xaf\xc1\xfc\xe8\x78\x9c\xfa\x45\x13\x99\x5f\x84\xf5\xd4\xb3\x44\x7e\x54\x15\xe3\xf5\x2b\x8f\xb6\x2c\x37\x6c\xaa\x48\x59\x00\x4b\xf2\xa2\xbb\xb6\xda\xa1\x8b\x37\x6a\x8f\xd1\xa0\x7e\xc8\x3b\xea\x87\x2e\x99\x76\x0e\xba\x8d\xea\xa8\x21\xba\x14\xee\x7a\x0b\x49\xbc\x3a\x22\x0f\xea\x88\xb8\xd7\xbd\x46\x62\x43\xeb\x57\x37\x34\x12\x09\xc0\x1f\xbc\x16\x7f\x74\x1f\x0d\x1b\x4c\x6a\x50\xaa\x88\x08\x78\x77\xce\x8e\xc7\x47\xff\x78\xbb\x1e\x79\xac\x21\x44\xef\xb0\x9c\xfd\x9c\xc3\x5d\x27\xe7\xa7\x7a\xb3\xea\x8e\x7a\x05\xde\x8d\x60\xc9\x33\x78\x00\x8f\xf6\xed\x7d\xa9\x71\x5b\x31\x00\xa9\x8a\x98\xdc\x58\x0d\x36\x4d\x3f\x7a\xdf\xa8\x78\x6a\xea\x8e\x84\x62\x80\xac\x34\x48\xa9\x04\xd5\x2d\x41\x45\x8f\xe5\xb1\x13\x8a\x74\xac\x8e\x5d\xb8\x67\x0b\x0c\x42\xfe\x85\xf0\x85\x59\x4e\xa4\xfa\x16\x17\x3f\xb9\x33\x96\x17\x11\x34\xc1\xd8\xc4\xeb\xc6\x8c\x46\x02\xde\xa5\x03\xde\x90\x5e\xf1\x9f\xd1\xca\x7d\x38\xb5\x64\x5e\xd3\x44\xf3\x8d\xe6\xd5\x36\xa1\xe1\x19\xdb\xde\xa3\x8a\xfb\x74\x18\x7e\x33\xe1\x72\x44\x5d\xd6\xe6\x84\xf7\x52\xb9\xb6\x63\xb1\x01\xef\xd9\x23\xad\xe6\xbd\x32\x71\x92\xb0\x06\x6b\x9a\x11\x91\xc8\x66\x18\xdc\x4f\x7f\x77\xb9\x3d\xd5\x39\x1e\x6b\x5c\xd0\x71\x5b\xf6\x4a\x2e\x27\x5f\x92\x34\x7d\xe2\xf2\x84\x03\xb0\x3b\x38\xd5\x87\x62\xff\x54\x75\x2f\x8d\xcd\xc7\xb1\xfa\x5d\x6c\xb5\x43\x39\xe3\x07\xe1\xc7\xad\xd5\xb1\x7e\x64\x95\x66\x9f\x1b\xe7\x41\xec\x6d\xbf\x33\x7c\xb8\x20\xec\xf0\xfd\xdd\xf7\xc1\xb5\xd8\x1f\xde\x84\x1a\x77\x46\x7d\x67\x6b\x84\x33\xf8\x3f\x7b\x62\x83\x04\xef\x57\xdc\x3e\x4e\x31\xe9\x53\x45\xb8\xcd\x76\xaa\x0f\xc7\xcf\xce\xea\x8f\x48\xc8\x8b\x52\xe3\xcf\xcc\xe9\xec\x0e\x4e\x27\x2a\x54\xf6\x0a\x77\xed\xdf\x34\x7b\x35\x71\x92\xf6\x8a\xdd\x9d\xe8\xdf\x6d\x00\x6e\x77\x44\x47\x03\xe9\x76\x4d\xa8\x78\x74\x9f\xab\x73\xa2\x7e\x90\x4e\xd3\x0c\xb4\x80\x58\xcb\xc9\x96\x24\x77\x72\xc8\x8c\x4c\x53\x67\x04\x4d\x4e\xb9\x46\xd3\x0b\x23\xd9\xab\xc9\x77\x52\x18\x76\x67\x14\x52\xb6\x6e\x3f\x22\xd6\x0c\xd2\x26\xa7\xd3\x80\xcb\x2c\xb9\x29\xca\x03\x4f\x68\x92\xb4\xcd\x4a\xc1\xf9\x1e\x40\x83\x81\xbf\x05\xd0\x3f\xb0\x19\x40\xa7\x09\xaf\x29\x9d\x1c\xfe\x15\x17\x35\x96\x98\xa1\x6f\x40\xd9\x32\xe4\xad\xf5\x90\x13\xfa\x98\xbe\x69\x85\x7b\x75\x62\x00\x91\x81\xf0\x48\xb3\x23\x09\x89\x9d\xd6\x78\x42\xff\xbd\x49\xfd\x5e\x66\xb8\x15\x38\xa1\x5c\x37\xeb\x6d\xc0\x68\xf7\x37\x1e\x68\x61\x04\xb9\xcd\x4c\xfc\xf2\x4b\x65\xec\xf3\x72\xc0\x6b\x9a\xdc\xab\x18\x22\xd8\xd4\xbf\xca\x2b\x0f\x36\xe3\xdf\xd0\x8d\xd3\x7d\x1b\xcf\x18\x53\x5e\xed\x8d\xa9\x51\xb0\xa5\x73\x4f\x9f\x1b\x9e\x49\xaa\x08\x39\xc9\xd1\xe8\x44\x48\x84\xdd\xa0\x5b\x00\x02\x22\xd6\x7f\x35\x54\x2f\xc4\x12\x90\x60\x16\x62\xe9\x2e\x18\xf6\xd7\x6a\x1b\xaa\x70\xa0\xe0\x30\xc2\x7b\xbe\x12\x45\x89\xf7\x32\xfa\x68\xf1\xf6\x30\x9d\x4e\xa7\x63\xfb\x6f\xb6\xb1\x7f\xff\x1b\xfc\x2d\xd6\x6f\x0f\x8f\xa7\xd3\xab\x31\xfc\xdb\xd8\xbf\x8f\xff\x03\xfe\xfe\xf7\xb7\x87\x0d\xdf\x6c\x96\x8f\xae\x69\xe7\x95\x28\x00\x49\x46\x95\x38\x5b\xe1\xeb\x67\x1f\xf7\x99\x99\x54\xea\xa0\x57\x1c\x7c\xeb\xdb\x63\x39\x79\x6b\x12\x32\x4f\x92\x3c\x39\xda\x5f\x34\xb9\x4e\x08\xd5\x43\xb7\xbc\xd3\x94\x4f\x1c\xfd\xcc\x48\x4f\x07\x7e\x2c\x8b\x15\xdf\xaa\x72\xdd\xfb\x06\x65\xc0\xe3\x7f\xb5\x2f\x24\xb8\xfc\xff\xbf\x12\x0a\x92\x74\x79\x53\x94\x62\x0d\xaa\xb1\x11\x58\xa5\x11\xa6\xe4\x2c\x79\xfb\xf6\x90\x8c\x6a\x4c\xb2\x27\x26\x9b\xda\xeb\xb8\xe3\x1e\x66\xff\x95\x74\x84\xf3\x85\x16\xc5\xb8\x2c\xae\x78\x99\x50\x57\x0c\xd0\xc7\x66\x7b\x1a\xfd\x08\xab\x94\x3b\xf9\xa1\x9b\x8c\x7a\x73\xec\x0f\xe6\xb5\x65\x29\x12\xba\x9b\x27\xce\x1d\xa4\x97\xe9\x27\x39\xd8\x0f\x16\x9a\x17\x49\x43\x5f\xba\xa3\xce\x56\x97\x73\xb6\x2a\x24\x28\xb4\x65\xb7\xdc\x90\xb3\x2b\x7e\x86\x26\x7d\xeb\x33\x21\xcf\x8a\x33\x7d\x90\x52\xc8\xeb\x33\x5b\x85\xd2\x49\xdc\xc4\x96\x84\x2e\xa1\xc3\x2b\x8c\xf8\xb0\x55\x25\x78\xc4\xc6\xe3\xf6\x2b\x30\xcc\x8f\xf6\xec\x96\xef\x2c\x95\x71\xc4\xae\x35\x3d\x5f\xdb\x3d\xfb\xbe\xb9\x65\x51\x63\xf0\x9e\x2c\xb1\x21\xee\x8d\x44\x1c\xe6\x68\x99\xdc\xc8\x4c\x93\x81\x48\x53\x01\x40\xcf\xab\x6d\xfd\x0b\x34\xaa\xa9\x9c\x14\x06\xc3\xfd\xaf\x8c\x53\x71\x3c\x22\xca\xb9\x5b\x59\x01\x48\x13\x09\x46\x4d\x49\x3c\xf7\x66\xe9\x54\x7b\x5e\xfb\xb8\xbc\x79\xf6\x49\x2c\x35\x1b\x96\x34\xe0\xb9\x41\x64\x8f\x8c\xe4\x4e\x48\xf4\xa7\x9a\x24\xed\x14\x18\x0e\xcd\xcb\xb3\x4f\x42\x8f\xb9\x5a\x7e\x00\x06\xf6\x49\x20\x94\x8e\x68\xde\x03\x36\xf6\x15\xce\x0b\x78\x25\xa9\xa7\xc7\x1d\x84\x09\x5d\x2c\x9b\x43\xf0\x5d\x6d\x25\xd2\x99\xd3\xc8\x86\xcf\x2e\x8d\x9e\xf3\xa3\xe5\x95\x24\x7e\x3b\x99\x7f\x13\xe9\x1f\x23\xcf\x9e\x4c\xed\x80\xf4\x6d\xa5\x95\xba\xe1\xee\x3d\xf8\x07\xfe\xd1\xbc\x51\xaf\x3d\xdc\x79\x77\xd2\xbe\x6a\x36\x32\x00\xa3\xbb\x2d\x97\xc8\xc2\x88\x1b\xde\x5a\xb2\x3f\xdb\x11\xfb\xaa\x0f\x96\xbd\x0b\x3f\xcf\xdb\x9c\xe4\x67\xa0\xb0\xb7\x4d\xfd\xda\xa7\x99\x73\x3c\xdf\xed\xcd\xc3\xe3\xaf\x51\x95\x0f\x73\x27\x74\x46\xdf\xf7\x94\xfa\x5c\xe9\x5d\xd1\xf3\x92\xef\x65\xa8\x27\x12\x65\xab\xb6\xea\x03\xda\xd4\xfd\xba\xe5\xf2\xb5\x77\x1d\x04\x0d\xe3\xa6\x26\x1c\x96\x0d\x0d\x32\xda\x57\xb2\x89\x19\x17\x35\xe1\x57\x51\xf1\xaf\xd5\xfe\xf6\xeb\x43\x74\xe4\x7b\xe1\x4c\xbb\xbb\x76\xd5\xd4\xe8\x87\x8c\x99\x79\x06\xa8\x7e\x1d\x30\xc0\xab\xf2\xa0\xb3\x86\x6b\x03\x51\x59\xea\xb9\x66\x43\x70\x52\xda\x0d\x9e\xf5\x00\x0a\x62\x23\x9c\x61\xba\xf3\x42\x65\x9b\xe7\x72\x01\xfb\xdb\xd7\x44\xd3\x05\xbd\x73\x6c\x79\x34\x39\xde\xe5\x63\x77\x67\x78\x38\x1b\x33\x64\xc3\x0c\x7d\x0e\x23\xa5\x23\x11\x18\x41\xe4\xb2\xe1\xb9\xcb\x5b\x51\x61\xb7\x8d\xc8\xff\x22\x06\xa2\xc7\x37\x00\xba\xa6\x00\x0d\xe8\x84\x4a\x54\x85\x26\xf4\xfe\x94\xf6\xd4\xb1\xdc\xd3\x04\x7e\x3c\x94\x12\x51\x48\x25\x48\xf3\x1e\x4a\x57\xf2\xc2\xee\x2c\x39\x81\x1f\xf7\xa7\xb4\xa3\x22\x27\xf6\x3f\x70\x2e\xc0\xb8\x76\x5d\xbe\xc4\x74\x1a\x97\xc4\x57\xa5\x90\xef\x7f\x2a\x0c\x4f\xe8\x97\x7f\x9e\xc6\x31\xb1\x90\x27\xa1\x8d\x28\xbc\x50\xda\xcd\x11\xad\x5f\x74\xdd\xf6\x75\x94\xe0\x47\xae\xed\x56\x82\xe9\x8a\x12\x7e\x50\xfa\xbd\x25\xa3\x09\x50\xcc\x10\xf4\x94\x97\xc5\x6d\x14\xb6\x29\xed\x0e\x93\x00\xf2\x05\x45\xbc\x0c\x25\x14\xeb\xf5\x4b\xb5\xe6\xa0\xec\x00\xab\xa9\x8e\xda\xa3\x44\x0c\xf0\x22\xa3\xc2\x0e\x72\xad\x9e\xf2\xbd\xd9\x26\xf4\xf1\xb4\x8f\xac\xaa\x55\x70\x16\x16\xd2\x32\xe3\x97\xaf\x8b\x02\xd4\x4b\xdf\xce\xc7\x5f\xba\xb2\x6f\x9c\x5a\x85\x1f\xaa\xd9\xf4\x73\x58\x99\x5d\xf1\xf1\x5b\x71\xbd\x2d\xed\x40\x21\xb4\x43\x42\x67\xfc\xdf\xa3\xae\xec\xd4\x0d\x6e\x18\xcb\xf5\xe3\xb8\xf6\x9d\x09\xf7\x6d\x9d\x1f\x9d\xa2\x44\xcd\x08\x9a\xe2\x0a\x58\xec\x7b\xef\x26\xf7\x5c\x3d\x27\xa6\xb8\x02\xad\x69\x66\x8e\xc7\x24\xf1\xc5\x15\x07\xa3\x1c\x3e\x6a\x6d\x64\xaa\xed\x4d\xcb\x5e\x70\xe0\x9e\x27\xe1\x4b\xec\xf8\x4b\x17\x32\x80\xdb\x9c\x90\x10\xc0\x9a\x0d\xa8\x2f\x7a\x50\xc0\xf1\x98\xd8\x62\x13\x90\x23\x64\xad\x48\xc6\x09\x2d\xf4\x35\x98\xe9\x78\x81\xcd\xe5\x63\x00\xb9\x5e\xf3\x3d\xb7\xf7\xa1\x95\xe0\x15\x7a\x51\xaa\xad\x5e\x50\xe7\x16\x9f\xa7\x43\x76\xfa\x98\x10\xaa\x25\xdc\x2e\x4f\x34\x34\xf0\xbb\x97\xcf\x5a\x0d\x94\x75\x1a\xcd\x2b\x55\xde\xb4\x7b\xd1\x0f\x7e\xcd\xd3\x54\xf6\xbd\x98\x73\x06\x05\x06\x35\x12\x9e\xa6\xdd\xbc\xa0\x41\xda\x5b\x00\xc4\x10\xcf\xb9\xdb\xa2\x50\xdb\x74\x70\x0f\xc8\xc3\x9d\x8d\x05\x87\x32\x19\x67\x1f\x1c\xf4\x35\x1a\x2f\x18\xf8\x57\xbb\x69\xed\xe9\xc1\xa3\x7f\x2c\xde\x7e\x78\x3b\x5e\x8e\xde\x3e\xf2\x3f\x46\x1f\x77\xe5\x17\xe1\x11\xc8\xbf\x1f\x36\xc6\x26\x4b\x8a\xfd\xbe\x14\x2b\x10\x6d\x3d\xfa\xb8\x2b\xc3\x0d\xa2\x5b\xc7\x1c\x1b\xc8\x4f\x39\x3f\x1e\xf1\x37\x2e\x80\x93\x1d\x70\xa7\x22\xdc\x9a\x11\xc3\x9a\xd5\x05\x30\x51\x2d\x17\xc6\x0d\x07\xb8\x91\xaf\x5b\xe7\x6d\x5d\x1c\xaa\xc8\xa3\x7d\x59\x08\x99\x78\x48\x36\x07\xe9\x26\x36\x99\xea\x2a\x31\xc7\x23\x2e\x98\xaa\xab\x08\x0f\x71\xf6\x76\x20\x88\x68\xe7\x54\x04\xc0\x2e\x7b\x43\x17\xc9\xbb\x64\xa4\x96\x80\x20\x48\xa8\xfd\xcb\x84\xfd\x79\x82\x97\xdb\x68\x7a\xa8\x69\xe8\x25\xdb\xf2\xc2\x27\x8b\xe3\xec\x95\xcb\xee\x11\x5b\x51\x2d\xe4\x84\xb6\xc5\x11\x50\x55\x14\xb0\x50\xc1\x4d\x9b\x8c\xb6\x01\xcc\x22\xcc\x43\xe3\xee\xe4\x9e\x4e\xc0\x86\xa8\xed\x11\xf0\xbd\xd8\xbf\x51\xcf\xe4\x3a\x73\x96\x06\xf1\x96\xca\xe2\x51\xa7\x58\x30\x0e\xbe\xf2\x94\xe3\xd9\x47\xc3\x65\x65\x4f\x67\x24\x18\xf8\x7a\xdd\x33\xfb\xcf\xec\x22\xee\xce\x13\x27\x73\x65\x37\x56\x0e\x7f\xd9\xdd\x89\xd4\xdd\x09\x65\x77\x68\x4f\xa0\x11\x2d\x3a\xf0\x54\xad\xee\xcb\x74\x2d\xee\xcd\xe5\xc4\x3b\x1c\xb1\xda\x0a\xc0\xfa\xf3\x71\x96\x2f\xf9\x56\xa9\xf7\x0d\xc2\x51\x78\x30\x3f\x82\x6e\x1f\x2a\x3b\x1a\x38\xa7\x6e\x18\x34\xbf\x16\x95\xe1\x1a\x9f\x8b\x3b\xae\x15\xba\x4a\xf7\x9c\x1c\x8f\x59\x05\x63\xf0\x0a\x06\xc2\x69\x97\xe7\x8b\xe5\x89\x50\x88\x00\x2d\x52\xa4\x67\x58\xf8\x37\x90\xa2\xb7\x0a\x94\xc5\x35\x5b\xe1\x11\x6a\xa0\xb0\xa0\xd9\x8e\x16\x5e\x7b\xcd\xd7\xb9\xa6\x37\x45\x99\xcb\x93\xeb\x55\x69\x7b\xb5\x52\xfb\x5b\xd0\x50\x67\x1d\xf9\xd2\x70\xca\x18\x33\xc1\x92\xca\xa1\x9c\xfa\xf4\x41\x45\xa1\x0e\xaa\x77\xfc\xdd\x29\x6c\x43\x09\x4b\xbd\x69\x4d\x74\x26\x64\x65\x0a\xb9\xb2\xa4\x06\x0e\x05\xd0\x0b\x11\xc1\xe1\xf3\xd2\x9e\x01\x0b\xb9\x64\x22\x52\xa5\x3f\xd8\xe6\xd6\xf6\x6f\x9d\x31\x77\xef\xa4\x3c\x4a\x03\xd0\xff\xe1\x2b\x03\x7b\xa9\x41\x64\x9e\xd1\xea\x33\xbc\x8a\xf3\x3a\xfa\xbc\x36\xcf\x8b\x2c\x3a\xd0\x12\x54\x1f\x8f\x1a\x0f\x3f\xe6\x8d\x41\x0d\xd3\x28\x40\xa2\x9c\x61\x5c\x68\xfd\xf1\x88\x36\x76\x9c\x42\x82\xdc\x9c\x70\x0a\x56\x38\x05\xa0\xd8\x55\xb1\x3b\xf4\x64\xfa\xa4\x2c\xdb\x9b\x38\xba\x8b\x64\x35\x96\x99\xb3\x72\x9a\xfa\xf7\xf8\x1a\x45\x0d\x0c\x8b\x28\x32\x81\xb5\x5d\xd8\x03\x85\xc6\x60\x28\x09\xe2\xda\xc1\xfd\x3e\x0a\xdd\xf2\x62\x9d\xb8\x92\xdf\x8b\xb2\x6c\x29\xb5\x93\x3b\x30\xdc\x6f\x7b\x9f\x30\xc1\x6c\xcc\x8d\xe5\xb3\x00\x37\x55\x9b\x86\x35\x40\xd1\x6a\xa9\x96\x43\x33\x00\xac\x8b\x28\xf5\x45\xdc\xd5\xb9\xc7\x5a\xf3\x6f\xa6\x00\xc5\x52\x23\xf1\xcd\xe8\x94\x78\xd5\xa5\xfb\x12\xd9\x65\x71\x6a\xe8\xde\x7a\xcb\x33\x87\xb3\x9c\x01\x1b\x7f\x72\x2a\x5c\x9f\xd1\xf1\xb8\xb0\x8d\x07\x2c\xcd\x48\xf0\x86\x6c\x54\xfe\xc2\x3b\xfd\x77\x50\x74\x2e\x16\x3d\x23\x87\xea\x10\x6b\x6c\x63\x1e\xaa\x8f\x77\xea\xe3\x3d\xf5\xf9\xb0\x50\x34\x3e\x5f\xac\x3f\xa7\x86\xc8\x4e\xb5\xb6\xea\x70\x23\x18\x69\xfd\x8c\xbe\x1c\xc4\x0d\xb1\x94\xc1\xdb\x6f\x64\xf8\xae\x3f\x85\xc7\x7c\x7d\x72\x99\x70\x7c\xef\x6f\xd7\x4f\x2d\x53\x8d\x7f\xbd\x61\xa8\xf2\xd3\x6e\x4e\xc7\x9b\x46\xac\x28\x3a\x9a\x4d\x5b\xcd\x1d\xdc\xb7\x46\x24\x36\xde\xde\x55\x5a\x9b\xcc\x06\x65\xf0\x52\xd8\x89\xb2\x41\x99\xcb\x75\xdf\x1e\x6d\xc4\xf9\x72\xee\x4b\xdc\x88\x83\x37\x2a\xf5\x54\xad\xc0\xa5\x54\x2b\x65\x4b\x05\xad\x8f\xa4\xf8\xec\xcf\x5a\x1a\xa7\xf7\x64\x8e\x11\x1c\x6d\x4e\xfb\xfb\x33\x6a\x6e\x2a\xbf\xd5\x86\x38\xa2\xc8\x78\x83\x40\x9c\x22\xf7\xe6\x23\x74\xe7\x7c\x25\x8a\x2a\x9f\x9d\x9a\xd5\xbd\xde\xfd\xcb\x75\xaa\xba\xce\xcf\xa9\xee\x93\x03\x73\x5f\x3d\xfd\x76\x40\x35\x59\x74\x08\x04\x9a\xbd\x90\x99\x24\xe7\x04\x8d\x3f\xe4\x3a\x9b\xd9\xcb\xa8\x43\x99\xaa\x91\x9c\x04\x7b\x22\x32\x49\xa8\x62\x62\x2e\x16\xd3\xe5\xa4\xe4\x37\xbc\xfc\xb7\xc7\x73\x5d\x64\x92\xe4\x12\xff\xf6\x11\xd8\x8d\xf7\x00\x62\xe6\x6f\x6c\x11\xb9\xa1\x0a\x9d\x21\x7c\xc6\xc0\x8f\xa3\xa1\xe8\x6e\xd3\x4f\x0f\xc6\x7f\x8a\x9e\x9c\xfd\xaf\xef\x5d\xa7\x87\xeb\x5a\xdc\x21\x78\xff\x3f\x34\xf8\x93\x0d\xfa\x57\xd6\xee\xff\x0a\xf5\xeb\xa7\x6e\x67\x72\xb2\xda\x5e\xc0\xc9\x0f\x1b\x5a\xba\x13\xba\xe2\x85\x5e\x6d\xb3\x47\x6f\x5f\x3f\x22\xf3\x78\xaf\x58\x86\x32\xee\xca\xcf\xfb\x56\x1f\x40\xc3\x36\x1b\xcf\x28\xe2\x6f\x84\x84\xa0\x0b\xdf\x97\xb4\x91\xf2\xc7\xe2\xfa\xa1\x22\xbd\xa9\x20\x26\x7c\xa8\xc8\x3a\xa5\x1d\x83\x9e\x15\x00\x1a\xe6\x50\x28\x3e\xaf\xf9\xa4\x7d\xcb\x1b\xd3\x36\x93\x82\x82\xea\xc3\xe5\x22\x76\x4d\x94\xfc\xe1\xb2\xa3\xe4\xbf\x2a\xbd\x7e\xb0\x6c\x40\xbf\x81\xa4\xdf\x68\x75\xd8\x3f\x58\x30\x42\xe0\xd4\x89\x1f\x2c\x38\x4a\x6c\x1b\xf1\x60\xc1\xbe\x11\x6b\x0e\x2f\x9c\xf8\xac\xd6\x4a\xec\xf4\xe0\x1b\x03\xed\xd2\xb7\xad\x64\xe3\xe4\xcd\xd4\xb6\x25\x9f\x2c\x3d\x6a\x0d\xa8\x0a\x3f\x5c\x7a\x94\x1a\x06\xe5\x93\xc5\x87\x81\xf1\x39\x3e\x51\x41\x48\x8f\xea\x03\x4f\x0e\xa6\xcd\x12\xb4\x80\x1c\x3c\xd8\x5b\xc8\xf2\xb2\xdb\xa0\x4e\x16\x40\xba\xf3\x19\x5e\xf0\xaa\xfa\x64\x1d\x01\x6a\xc2\xe6\xaa\xb8\x36\x6f\x8a\xab\x0e\x6b\xd1\xb6\x35\x78\x1b\xa5\x7f\xad\x36\x9d\x3c\xb5\x3a\xd7\x62\x49\xd1\x9f\x4c\xd3\x71\x35\xd0\xa4\x36\xb2\x5e\x1f\xa6\x17\x6a\x25\x68\xef\x66\x00\xf0\x20\xb6\x2a\xab\x29\x54\xc0\xc9\x05\xd5\x6e\x32\x30\x78\xe7\xdd\xa9\x4c\x8e\x8b\x7f\x93\x84\x9c\xba\x1d\xa8\x32\x13\x59\xa9\x76\xfa\xdb\x67\x71\x71\xdf\x58\xe7\x96\x4a\x07\xf3\x9c\x2c\x09\x63\x98\x80\xa9\x4d\x21\xab\xbd\xaa\x38\x3c\x92\x37\x6a\x79\x00\x31\xac\x67\xb4\x22\x4f\x38\xf7\xa1\x74\x20\xdd\x57\x35\x2b\x21\xa2\xcb\x15\x48\xd1\x08\xe0\x78\xd8\x1b\x95\xaa\xd1\xfe\x05\xa8\x38\x6c\x78\x86\xc9\xa9\x40\x5c\x4b\x02\x3f\x2e\xa7\xa4\x2f\x7e\x34\x23\x34\x0c\xea\x4f\x85\xbc\xb6\xb3\xe0\xf4\xc7\x5d\xfe\x51\x33\xe0\x31\x5c\x52\xe3\x2a\x1e\x13\x2a\x68\x32\x0a\x23\x94\x44\xd8\x01\x1e\x18\x3c\xa8\xb0\x78\xac\x80\x56\xdf\x3c\xf2\xe0\xa0\x40\x65\x8b\xbe\xf6\x4c\xc9\x88\xf7\x39\xa7\x1f\x15\x01\xb4\xab\x86\xaf\xa8\x1b\x39\x9e\xd1\xde\x70\x3a\x23\xcd\x56\x9f\x9a\xae\x86\x04\x15\xb0\xe2\xe2\xeb\x75\x95\x01\x50\xcb\x89\x4a\xfe\x01\xac\xd0\xe5\x1a\xb5\x84\xfe\xf5\x05\x11\xb4\x6f\x10\x36\xe7\x5c\xfb\xb5\x20\x7b\x12\x2f\xf4\x72\xd0\x1a\x9e\xde\x21\xa1\xd2\x3b\x49\x72\xf6\x4e\x35\x78\xa1\x5f\xfd\x8e\x27\x88\xee\x97\xa3\x19\x75\x60\x86\xe4\x14\xd0\xea\xa8\xda\x73\xd9\xb9\x28\xf7\x12\x12\x99\xd0\x04\x1f\xf5\x3e\x61\x49\xc0\x27\xad\x58\x7b\x69\xa4\x6b\xc9\x5e\x39\xbc\xa6\x86\xd6\xda\xb6\x49\x86\xd0\x12\x16\x7d\x65\xec\x4b\x61\xb2\x47\xe3\x6c\x3e\xfc\x82\x3c\xb2\xe4\x24\xe3\x4c\x2d\x54\x98\xed\x25\x9d\x92\xf3\xe2\xa2\x0e\x00\xa3\x14\x87\x0b\xa1\x16\x05\x88\xb1\x1f\xfd\x23\x5b\xed\xd6\xc7\x1d\x37\xc5\x71\x47\xbe\x78\x24\x1c\x56\x27\x21\x82\x0d\xa7\x61\x29\x3f\xfa\x47\x91\x95\x86\xcc\xe3\x04\xa6\x99\x20\x5b\x1d\x57\x46\x97\xc7\x95\x92\x46\xab\xb2\x51\x96\xf6\x49\x41\x20\xf7\xe8\x1f\x55\xb6\x15\x1b\xd3\x48\xd2\x51\x9c\xf9\x59\x6a\xbe\x52\xd7\x52\xfc\xc1\xd7\x67\x3b\xb5\x16\x1b\xc1\xf5\x19\xc8\xf0\xcf\x92\x51\x45\x06\x12\x7c\x3f\x79\x31\x0b\x28\x7e\x27\x4f\x4a\x33\x4e\x46\xdc\xb9\xe2\x65\xc9\xd7\x46\x97\x18\x20\x5c\xc0\x6e\x8d\xdf\x12\xbf\xbd\x7b\x52\x4e\x28\x3f\xad\xe5\xe4\xaa\xa8\xc4\x8a\xdd\x01\x2b\x91\xd4\x3c\x56\x42\x91\x61\x48\x22\x5e\x2a\xa1\x3f\xef\x6d\x00\x72\x8b\x09\x05\xae\x2d\xa9\x99\xc2\x84\xda\xcb\x55\x12\xee\x59\x09\xfd\x56\xed\xb8\x0f\xa8\xef\x79\x09\x75\xcc\x61\xe2\xd9\x44\x0c\xf1\xe5\xf9\xdf\x09\x7d\x0a\xa7\x70\x9e\xc4\x7c\x46\x42\xbf\x2a\x56\xef\xab\x7d\xb1\xaa\x23\xbc\x1e\x90\xeb\x5d\x48\x90\x74\x52\xd8\x33\x23\xa9\xcf\x8f\x90\xc5\xfe\xce\x93\xfa\x84\xb7\x7d\xb1\x5c\x41\xd2\xde\xfa\x09\xfd\x0e\x0e\x8a\x3c\x69\xad\xea\x84\x3e\xab\x56\x79\xd2\x12\xde\x25\x76\xa5\x4f\xf6\xab\xa7\x58\x25\xbb\xc3\x19\x7a\x92\xe4\x49\x90\x1a\x26\x14\x03\x9f\x62\x73\x9d\xa8\xca\x87\xfe\x1d\x70\xd1\xd6\x2a\x34\x35\x84\x6a\x0e\xa1\xf0\xfd\x5b\xeb\xdb\x8e\x7c\x62\x07\xd3\x8b\x12\x7c\x84\x9d\x17\x17\x0e\x53\x84\xa1\x3f\xef\x93\x78\x66\x5d\x7b\xec\x1c\x34\x27\x18\x23\x60\x81\xd8\x88\xc0\x85\xfa\x18\x5c\x27\x21\xca\x2d\x1b\x58\xa5\x21\x53\x58\x0c\x2e\xa2\xce\x13\xd6\x0d\x16\xd6\x9a\xc6\x88\xbb\x0b\x2d\x44\x83\xc9\x3a\xda\xad\x10\x8c\x7d\x6d\x07\x19\x5e\xfe\xf1\xfb\x79\x92\x27\xf6\x46\xee\xbf\xbf\x71\xdf\x3f\xf0\x8f\xa6\x39\xba\x3e\xe6\x47\xcd\x6f\x9a\x31\xcf\x61\x9c\x81\x18\x36\x23\x7e\xaa\x23\xa2\x29\x5d\x84\x45\x65\x59\x3a\x1f\xba\x0c\xa1\x2f\xa3\xce\xfc\xec\x26\xba\x5e\x3b\x8d\x0a\x7e\x76\x33\x1c\x47\xdb\xe1\xeb\x09\xdf\x14\x65\x69\xc9\xcb\xe1\x7a\x9b\x27\xb0\xc1\x71\x19\xf2\x5d\xb1\xaa\x6e\xfd\x1a\x7c\x9e\xb4\x76\xb7\x1b\xf5\xa4\x49\x07\x30\xf4\xc7\x9e\xf5\xf1\x43\x7b\x71\xd8\xe6\x60\xa9\xe1\xc6\xe1\x42\xbf\x0a\xa1\x71\xa1\x4f\x3a\xeb\x01\x97\x68\xdf\x62\xf8\x25\x69\x92\x86\x78\x68\xea\xb8\x68\xf1\x26\x6d\xb2\xe1\x36\x46\x97\x26\x40\x0b\x5d\xfa\x70\xe1\xf0\x0d\x6f\xae\xc1\xfa\xfe\xe2\xcb\xfb\x3e\xc9\x13\x2f\x56\xf7\x61\x6f\x92\x3c\x69\x72\x90\x3e\xe6\x55\x92\x27\xfe\x88\xc5\x39\xd9\x15\x31\x6d\xd8\xad\xbb\xa4\x61\xb7\xee\xa1\x0c\xbb\x75\x0f\x61\x70\x81\x9e\x0e\xec\xd6\x0d\xb2\xb0\x5b\xf7\x53\x85\xdd\xda\x6f\xff\x56\x68\x97\x54\xd8\xa6\x78\xa2\x10\x42\x1b\x9b\x3b\xa6\x08\xcd\xcd\xdd\x20\x08\xb6\xa4\x06\x41\xf0\xcb\x62\xb7\x6e\xd1\x83\xc6\x2a\xfa\x24\x41\xb8\x2f\x55\x3c\xa5\xf7\x13\x8d\xdd\xba\x41\x33\x76\xeb\x06\xc9\xd8\xad\xef\xa1\x18\x51\x84\x23\x18\x30\x8f\x6e\x33\x74\xa8\x45\x37\xae\x9e\xe8\x2e\xbd\xd8\xad\x7b\xc8\xc5\x6e\xdd\x59\x98\xcd\x57\x01\x3f\x59\x51\x57\xdb\xf2\x79\x3f\xf5\xf7\x53\x1d\x17\xdb\x26\x3a\xf1\x81\xd1\x3e\x5d\x3a\xab\x23\x26\x45\x0b\x47\x8b\x68\x82\x84\x28\x59\xc2\x0e\x70\xa7\x31\xbb\x99\x37\xb6\x43\x1e\x9f\x9b\xf4\xd5\x44\x2a\xbd\x2b\x4a\xf1\x87\x03\x03\x65\x5d\xc5\xeb\xe8\xf5\x52\x9f\x09\x79\xc6\xd1\xf2\xa8\xf5\xa2\xab\x6b\x75\x36\xcb\x5f\x23\x2b\x67\xb9\xac\x63\xd4\xd6\x63\xb6\xe6\xc7\xc2\x10\x53\xac\xb6\xc4\xeb\x67\x68\x42\x2c\xaf\x27\xe4\x01\x30\x6e\x92\xc9\x64\x82\x20\x25\xb8\x35\xcf\xa0\x3c\x9f\xe2\x54\x2b\xd2\xdf\x82\x01\x1a\x70\xaf\xc9\x59\x42\xe8\x16\xc4\xbe\x80\xac\xd6\x85\x55\xa3\xd5\x40\x31\x26\x02\x0f\x3b\xcf\x2a\x26\x26\xbf\x2b\x21\x31\x73\xc1\x24\xc9\x21\xcc\x43\xdf\xa9\xd1\x8c\x34\x12\x40\xc3\xbc\x79\xb8\x59\x54\xd0\xc9\x12\x9e\xf5\xca\x21\x2b\xba\x9c\xe7\x77\x72\xa5\x64\x25\x2a\xc3\xa5\x39\xbb\x12\x72\x2d\xe4\x75\x75\xb6\x51\x1a\xf8\x4e\x54\x69\xb1\xe5\xb0\xe2\x14\x75\x35\xf4\xf0\x80\x4f\xc5\x7c\x71\x58\x32\xb3\x38\x04\x0d\x08\x8e\x8f\xa5\x1b\xcb\xe9\x97\x4a\xbd\x3f\xec\xbf\xe7\xb7\x3d\x0f\xe2\x38\x4a\x99\x41\x1d\x6b\x02\x9a\x45\x73\x83\x0a\x46\x9c\x4a\x92\x9b\x85\x53\x41\x99\x31\xc6\x04\xf1\xc6\x77\x0a\xae\xfa\x49\x34\x17\x75\xe4\xee\x50\x1a\x91\x78\xb4\x81\x21\x13\x69\xaa\x33\xe1\x15\x6c\x12\x44\x13\x5a\x27\x08\x8a\x13\x4d\x3c\x6a\x1f\x2d\x10\x43\x0d\x1f\xb9\x97\xc9\x90\xbd\x82\xef\x48\x07\xca\x6b\xe7\x63\x2b\x9b\x45\xf8\x27\xf6\x8d\x44\x57\x0d\x75\x14\x7a\xe4\x6a\xa2\xeb\x35\x12\xf4\xc0\xec\x75\x4b\x59\xa8\x65\x70\xed\x55\x90\x00\xb5\x71\x3a\xd1\xbd\x1d\x6a\x51\xbd\x74\x97\x87\xe6\x70\xfb\x6d\xd2\xa3\x35\xc4\xf3\xbf\xab\x45\x70\x90\xee\x27\x10\xb6\x74\x02\xa6\xc6\x96\x70\xba\x5f\x40\x1c\xdc\xef\x97\x6a\x6d\x7f\x9d\xe8\xce\xdd\xe6\x7e\x28\x76\x3d\x1a\x09\xab\x34\xfd\xf3\xbf\xb3\xa6\x83\x7b\x7b\x87\xaf\x01\xc7\x51\x1e\xde\x68\x04\x95\x4c\x0f\x22\x3c\xa8\x21\x93\xde\xc9\xfb\x37\xba\xd8\x6f\xc1\xe9\x7b\xe6\x9d\xbe\xa7\x29\x34\x11\xdd\x91\x48\x7f\x2f\x92\x84\x66\xef\xe6\xc1\x17\x7c\x1e\xdc\xc5\x93\x34\xc5\xde\x85\x0c\xee\xe2\xe4\x73\xb8\x74\x79\xed\x47\xde\xe6\xd8\xad\xa3\x0c\x70\xb1\x92\x84\x0e\xc1\x62\x04\xf0\x24\xb0\x21\x38\x42\x21\xa1\xbf\x71\x49\x42\x25\x89\x6e\xba\x37\xb1\x25\x69\x77\x4e\xd6\xa0\x7e\xc3\x4f\xaf\xe0\xd2\xfe\x86\x7f\x34\x4f\x34\x2f\xba\x83\x9b\x19\x66\xe6\xcf\x54\x66\x48\x7e\x77\x22\x13\x30\xb4\x62\x1c\xff\xd3\xa1\x99\x78\x85\x45\xc0\x2c\x72\x3a\x88\xa0\xe3\xe7\x23\x58\x1d\x6e\x3b\x33\xd9\xd7\xf6\x2d\x36\x4f\xe3\x33\x6b\x44\xb3\x46\xac\xf7\x1b\x60\x26\x41\xa9\xd1\x3f\x74\xfc\xa0\xc0\xdb\x5a\x08\x67\x1a\x14\x12\xbd\x09\xf2\x75\xd3\xb6\x25\xa8\x44\x12\x70\xcc\x1f\x20\xc5\xaf\xd4\xfa\xf6\x14\xd9\xe1\x92\x3b\xd7\x4d\x06\x10\x10\x68\x44\x06\x3a\x5f\x7c\xb2\x51\x7a\x97\xa6\xd9\x37\xc2\xfd\xa6\x49\x75\xb8\xda\x09\x93\x50\x98\x31\xd4\x04\x7e\x0d\x41\x2f\xb9\xd9\xaa\xf5\x93\x52\xc9\x5a\x2f\xcd\x65\x52\x96\xcc\x42\xa2\x81\xd1\xb7\x6e\x43\xfa\x20\x16\x89\x7c\x64\x06\xbe\x5b\x31\x5c\x85\x9f\x71\x68\x71\x3a\xad\xc0\x63\xc8\x37\x8a\xdc\x9d\x4e\x66\xb2\x11\x52\x54\x5b\x30\xa8\x8b\x9f\x86\xcc\xc4\xf2\x1f\x4c\x52\xd0\x1e\xed\xce\x7b\xa4\x20\x0f\x8e\x5f\xfa\x52\x34\xc2\x45\xf5\x43\xf1\x03\x95\xa0\x97\xbe\x2f\x34\x97\xe6\x07\xb5\xe6\xce\x5d\x97\x43\xe6\x9a\x74\xec\x22\x33\xf4\x7e\x08\x96\x11\xee\xc5\x0e\x0d\x43\xdc\xc8\xfe\xa5\x77\x64\x13\xdf\x88\x58\xfb\xd2\xa6\x72\xa3\x80\x5e\x1d\xeb\x6f\xa6\x08\x39\x9d\xba\x15\x49\x25\x79\xe2\x20\x53\x5e\x35\x9f\xce\x1a\x9d\x40\xa1\x2d\xf2\x80\x99\xa1\x7c\x22\xf9\x47\xf3\x5a\x5c\x95\x42\x5e\x93\x13\xa9\x31\x51\xce\x2a\x3c\x8c\xae\x2d\xa1\x42\xd2\xfd\xda\x68\x5e\xec\xda\xca\x90\x5b\x51\x4d\xf6\xaa\x0a\x98\x17\xda\xb0\xa9\x47\x8e\xb0\xb9\x18\xc7\x2f\x27\xfa\xb6\x64\xf0\x3f\x68\x00\x30\xc6\xd7\xa1\x1f\x7d\xfe\x3a\x08\x16\xa7\x2f\xa9\xf4\x37\x1e\x36\x3d\x0d\xae\x65\x0c\x28\xcf\x55\x79\x9f\x71\xe8\x5e\x55\x97\x2c\x6a\x89\x3b\x2b\x4e\xb4\x7a\x30\x8f\x83\xef\x08\x75\x9e\xe8\x9e\xf3\xf7\xf7\x65\x70\x45\x3b\x09\xab\x2f\x83\x1c\x8f\xe8\x0e\xfc\x44\xed\x00\xc7\x99\xed\x01\xea\x52\x5d\x74\x1b\x47\x3e\x5d\xf6\x68\x44\x4e\x94\x17\xf7\x42\xf6\xde\xd3\xa2\x5e\x88\x5b\x4e\x9c\xc5\x3e\x73\x60\x05\xf6\x37\xac\x39\xcb\xc0\xcd\xf1\x9f\xa5\x94\xdc\x32\x1a\x00\xcd\xee\x5a\x38\x1a\xf9\x92\xa9\x81\xe6\xfc\xba\x15\x25\x7f\x08\x71\x7e\xaf\xaa\x73\xf8\xc1\x0b\x93\x71\x72\x1e\x40\xaf\xc2\x64\x61\x41\x80\x32\x97\xf7\x88\x87\x79\x5d\xce\xa3\xc5\xdb\x0a\xec\x1f\xa7\x4b\xc7\x6b\x3e\xd4\x75\xc0\x79\xf1\x5f\x83\x76\xad\xfc\x44\x83\xf2\x68\xc7\x8b\x7c\xb4\xb2\x9b\x4b\x08\x72\x7c\x62\x0a\xbc\x69\xa9\xdb\x01\x7e\x16\xcc\xe5\x78\x46\xda\x8b\xce\x00\x84\xfe\x55\xb1\x7a\xdf\x7a\x04\xf6\x29\xc6\x8c\x9f\x28\xbe\x94\xde\xb7\x16\x1b\x1b\xea\xa2\xde\x90\x1e\xc4\xa4\xbd\xbb\xb6\x2a\x1e\x36\x5a\x67\x68\xec\xd8\x9e\xcd\xda\x0e\x82\xe2\xc8\xbd\xbb\xda\x59\xb0\xf4\x65\x1a\x67\xcd\xcd\x36\xef\x6b\x53\x88\x6d\xb4\x0b\x01\x58\xf1\x9e\xd7\x42\x31\x08\xc3\xd2\x2a\x2d\x80\xc3\x85\x32\xfe\x97\xeb\x07\xa7\x56\x79\x8f\x59\x50\x07\x3d\x3f\x60\xae\xc6\x4b\x04\xef\x24\x61\x79\x38\x1f\x59\xbc\x56\x52\x48\x53\x89\xeb\xe8\x72\xea\xdd\x0b\xa5\xe9\x70\x36\x64\x35\x36\x8d\xa5\x09\x4c\xa2\x4a\x0c\x7a\x3b\x92\x68\x80\x2e\x58\x8f\x99\x98\xb6\xbb\x5a\xbd\x50\x1f\xb8\xfe\xba\xa8\x78\x46\x72\x7e\x02\xdc\xfb\xc6\x16\xaa\x0e\x57\x95\xd1\xa1\x7c\xca\x83\x89\x32\x63\xa2\x56\xbc\xef\x69\x48\x48\x09\x0b\x7a\x75\xd0\xfa\x01\xfb\xfd\xee\x28\x44\xeb\xcf\x0e\xc8\x89\x6e\xc5\x9a\x3f\x17\xba\x32\xed\x97\xc5\x70\xfa\x84\xe9\x19\x31\x0e\x6c\x87\xaf\x21\x23\xa7\x8d\x90\x45\x59\xde\xb6\x12\xda\xbd\xe4\x34\x53\xaf\x24\x9b\xd2\x5b\x7b\xc8\xd9\xf3\x1f\x91\x50\xfb\x8e\x38\x9b\xb7\x62\x8b\xa5\x5b\x02\xa0\xfe\x1e\xe0\x28\xfc\x19\x27\xd6\x6c\x34\xba\x92\xa7\x81\x50\xd9\xad\x24\xf4\x36\x3a\xaa\x26\x80\x85\xcb\x9a\x27\x01\x62\x1a\xf1\x8f\xfb\x52\xac\x84\x29\x6f\xbf\xb6\x69\xf8\xba\x09\xad\xa1\x56\xe0\x9e\x93\x71\xf4\x61\x7c\xd0\xaf\xf6\x40\x46\xd2\xf4\x2b\x30\x10\x95\xca\x01\x40\x40\x0d\x09\x69\x00\xed\x81\x46\x15\x19\x68\x70\x29\x1a\x27\xa3\x88\x69\x4d\xf5\xc4\x28\x12\xae\xa6\xe8\xb0\x9c\x0a\xfc\xe7\x2e\x5c\xa1\xff\xb5\xd3\x0a\xe5\x6f\x5b\x75\xa4\xbd\x65\x55\xec\xb5\xcc\x8a\xc9\xce\x0e\xe3\x1a\x8c\xa8\x10\x50\x63\xc0\x3d\x7e\xd3\x4a\x95\x65\xb1\xaf\xf8\x7a\x0e\xbe\x56\xdf\x88\xac\x20\xde\xd5\x6a\x0e\x16\x06\xc0\xe3\x56\x13\xa3\xe0\xcd\x16\x12\x78\x58\x97\xca\x23\xf8\x48\x17\x4e\x68\xa3\x32\xf6\xa6\x5d\x7b\xe5\x99\x6c\x9f\xb5\xd9\x88\x34\x1d\x7e\x2b\x23\x70\x46\x92\xa6\x3c\x4d\x5f\x8b\xac\xa0\x2d\xbf\x3a\x68\x2a\xd3\xc9\xdd\x6f\x59\x4c\x6a\xe8\xf5\x07\x06\xaf\x64\x7f\xc8\xac\x31\x7e\x84\x1e\xd8\xd3\xac\x24\x83\xc3\x65\xad\xf6\xd5\xf6\xd3\xdb\x89\x61\x25\xbd\x27\x35\x3b\x74\x63\x6a\xff\xbd\xe4\x14\xae\x89\x3d\x5d\x03\x3d\x7b\x49\xc5\xc8\xfb\x13\x89\x3b\xe1\x19\xb3\xce\xca\x65\x43\x17\x53\x18\xb5\x13\x2b\x57\x6c\x0c\xda\xe5\x89\x45\x1c\x06\x66\x9d\x69\xfa\xbd\x7b\xae\xb5\x9c\xb4\x77\x81\x0b\x93\xa9\x5d\xe9\x09\xc5\x8d\x46\xa8\x49\xd3\x6f\x61\xf1\x23\xa5\x00\x06\xd7\x55\x86\x1f\xb8\xdd\xe0\xe5\xb4\xb1\x0b\xed\x7e\x60\xbd\xaa\x89\x83\x00\x18\x96\x5c\x29\xf5\xde\x56\x9c\x38\x5e\xd0\xa0\xf1\x0b\x67\xb3\x18\xef\x61\x7a\x2e\x7a\xa7\xb7\xf6\x56\x56\xcf\xad\x58\xd2\xc2\xee\x0d\xd5\xb3\x37\x82\xcc\xa5\xf0\xcb\x5b\x83\xfb\xba\xb9\xca\xdf\x88\x4c\xd9\x35\x8e\x78\x54\xe3\x19\x63\x3c\x72\x6a\x10\x65\x84\xdd\x22\xdb\xd9\x8c\x22\xb4\x91\x27\x80\xdd\xe9\x34\x8d\x9d\x74\xb6\x47\xc9\xe1\x0e\xc4\xd4\x2a\xa2\x48\x40\x53\xc6\xa0\xa6\x49\x6b\x04\xef\x9a\x56\xd9\xdd\xae\xd3\xf4\x37\x93\x69\xda\xc6\x0b\xc2\x67\x7b\xc9\x29\x6c\x6d\xee\x55\x5a\xd8\x8d\x4d\x8c\x08\x1c\xb6\x2b\xcf\xc0\x51\xae\xc7\x33\xaa\xbc\x34\xd5\x2f\xde\x7e\xa0\xa3\x3a\x43\xdb\x09\x35\x85\x6d\x8e\x08\xa7\xc4\x7b\xc2\x35\xc1\x8b\x95\x23\x65\xee\x7b\x60\x02\x46\x94\x57\x3e\xad\xd8\xaf\xf6\x2e\x35\x2e\x06\x15\x90\x07\x09\x8a\x03\xe0\xd2\xb7\x72\x1a\xdd\x8d\xf1\x43\xf0\x02\xa8\xbc\x65\xa8\x37\xec\xac\x98\x78\x8f\xec\x3a\xce\x37\xbc\xcb\xfa\x81\x99\xec\x8a\xdb\x2b\xfe\xad\x58\xaf\xb9\x0c\x10\xe8\xe3\xd9\x90\x5d\xa9\xac\x2f\x12\x57\xd7\xf1\xe8\x23\x7f\x96\xdb\x38\xfa\xde\x88\xc8\x79\x34\x82\x21\x45\x2d\xf6\xd6\x42\xcd\xde\x22\x84\x43\x5f\x6f\xa3\xac\xce\x3f\xd1\x95\x8a\x02\x29\x27\xe0\x3c\xea\x5f\x1c\x93\xf3\xde\x7e\xd7\x1d\xfb\xf6\xc1\x6e\x9d\x06\xf6\xec\xaf\xc5\x4b\xef\x64\xdb\xb7\x35\x40\x9c\x6e\xe1\x40\xee\xd1\x69\xf6\x29\x33\xc9\x9e\xa9\x4c\x12\xe2\xd2\x32\x27\x9e\x53\x6c\xd1\x28\xd2\x52\x00\xb5\x98\xda\x43\x52\x3a\x74\xaf\x1f\x22\xcf\x2a\xef\x44\xdb\xd8\xa1\x02\x7b\xbb\x3a\x25\xab\x26\xab\x52\x49\x6e\x7f\x67\xc3\x29\x21\x54\x61\x7f\xa0\x9a\x17\xe8\x94\x12\xff\x6b\x02\x55\x92\xc8\x09\xd0\xf4\xbc\xbc\x80\xed\xf6\x9e\xaf\x6b\x5a\x55\xa2\xc8\x1f\x83\x17\xe5\x72\x22\xaa\x1f\x81\x7e\x7a\x6f\xa9\x05\xbb\x51\x19\x02\xfb\x4a\xfe\xe1\xec\x83\x04\xdf\x7a\xa7\xa8\x5f\xce\x5e\x6a\x87\xdc\x89\x9b\x1a\x3f\x60\xdf\x1b\xf4\x7e\xf9\x4e\x92\x38\x0b\x8e\x8f\x2d\xf0\x56\x02\x36\x28\x2d\xd8\x1e\x0d\x97\x06\x38\xf2\x76\x48\xa9\x02\xc4\xa1\xe2\x72\x7a\x3c\x4e\x19\x2b\x1c\xe3\xab\x90\xb6\xff\xba\xe5\xf2\xd9\x6e\x6f\x6e\x7d\x5d\x0a\x88\x87\x57\xbd\x59\xff\x2a\xe0\xb8\x54\xf5\xa1\x66\x09\x81\x8a\x07\xb4\x46\x9e\x59\x34\xf3\x2d\x9b\xf8\x1c\x0e\x6c\xcd\x6e\x7a\x90\x83\xbf\x54\x87\x8a\x83\x5d\x76\x75\x3c\xc6\x25\x7e\x36\x24\xbc\x74\x92\x18\x84\xd3\xce\x1a\x65\xd4\x31\xcc\xcd\x72\xe8\x01\xac\xcb\xe7\x28\xe0\x46\x05\x79\xaa\xa9\x22\xc7\xa3\x71\xee\xef\x35\xfc\x4f\x53\x48\xa3\xe3\x34\x7d\xaf\x18\xb6\x1e\x21\xaf\xcf\x42\xf9\x67\x78\xdc\x9e\xed\x0b\x6d\x84\x65\x9c\xcf\xd0\xad\x10\x70\x35\x67\x85\x3c\xe3\x1f\x45\x05\x59\x94\xe4\x09\x19\x7c\x64\xc3\xe9\x49\x4d\x8a\xf5\xfa\x8d\xfa\x16\xcd\xd5\xd3\xf4\x77\x11\xfc\xb8\x1b\xc0\x55\xf6\x0e\xdc\xe1\x30\xb7\x6c\x76\x02\x12\x2c\x5e\xd2\x1f\x8a\x1f\x1c\xd0\x2f\x2d\xbd\x73\xcf\x03\x78\xab\xc4\x55\x05\x50\x4e\xa5\xeb\xc8\xa8\x05\xa9\x71\x48\x53\xd5\x60\xc6\x0e\xf7\x80\xf9\xfd\x61\x93\x33\x76\x68\xb3\x42\x69\x9a\x55\x70\x6c\x34\x8a\x81\x93\x01\x47\xf1\xb5\x40\x20\xc9\xb6\xcd\x7a\xcc\x72\x36\xbe\xe6\x8d\xaf\x60\xe7\x67\x96\x24\x5f\x98\x25\x35\x18\xab\xa3\xf3\xc1\x52\x53\xcb\x68\xf1\x0f\x67\xaf\xec\xde\x02\x79\xb0\xad\x7d\x6e\x26\xab\x2d\xa0\x53\xda\x30\x1c\x81\xb9\xf6\x61\xe0\x92\xa2\x3c\x91\x56\xdb\xdd\x88\xb9\x91\xec\x19\x36\x43\xee\xbe\xc5\x6e\x40\xef\x0c\x9d\x12\x57\x88\xdd\x52\xaf\x24\x28\xf1\xa4\xe9\x37\x22\x53\x34\xb9\x02\x31\x21\xda\xc5\x3d\x93\x2d\xe0\x11\x72\xa7\x02\x8f\x05\x25\xd4\x48\xad\xd9\x33\xbb\xd3\x32\x1e\xc0\x0d\xd6\x4a\xfa\x6b\xe1\xf1\xc8\x1b\x98\x07\x21\x02\x1d\xe6\xda\x02\xdd\x42\xca\xda\x9d\xcb\x94\xbf\x60\x51\xe5\xf8\x4b\x98\xbd\x03\xec\x0a\xf4\x7f\xdf\x7f\xfc\x37\xf7\x10\xd7\xd9\x81\xb6\x86\xa8\xd6\xc9\xb4\xbd\x2a\xaa\xea\x87\x62\xc7\xed\xde\x06\xa8\x28\xfb\xc3\xd9\x57\xde\xe2\x17\x97\xeb\xf0\x7b\x55\x55\x91\xfb\x55\x2c\xf8\x7c\x75\xe1\xe6\xec\x7c\x35\x1a\x11\x63\xab\x5c\xf9\x7b\xce\x40\x05\xf6\xf8\x7b\x9e\x1d\x80\xe5\xa5\x7f\x17\xd9\xc1\xb3\xbb\x4f\xd6\x6b\xcb\xec\x1e\xa8\x0a\x3e\x96\x14\xdc\xe8\x3f\x80\x34\x16\x8e\x99\x87\xaf\xab\x3b\x77\xe8\x79\xd1\x13\x42\xae\x32\x53\x3f\xf8\x82\x3e\x25\x8f\xdd\x10\xf2\x85\x5e\x3a\xee\x19\xce\xda\xe8\xe9\xe5\x59\x03\x68\x06\x18\x40\x5b\x77\x15\x59\x54\x01\x58\xc7\x64\x55\x8a\xfd\x8f\xaa\xea\x1a\x4b\xf5\x43\xd6\xb8\xea\x1a\x7e\x7f\x3f\xb6\x84\x87\x08\x93\x19\xc1\x63\x7a\x63\x10\xbb\xa3\x24\x5b\x68\xdf\x3b\x3b\x8e\xcb\xc1\x3b\x91\x35\x42\x9a\x15\xd7\x06\xcf\xa4\xcd\xca\x6b\x3f\x68\x7d\x5a\xd9\x3e\x6e\x21\x96\xe7\xce\x29\x96\x5d\x85\x76\xe6\x60\x61\xba\x61\x83\xed\x5a\x17\xe4\x78\x1e\x31\x1e\xd3\x19\x21\xb1\xeb\xe9\x57\x41\x54\x14\x4d\x97\x9f\x2d\x70\xc0\xec\x85\x4d\x8a\xe9\x3a\xdb\xeb\x08\x15\x8f\x3c\x30\x95\xad\x07\x7b\xe9\x2b\xa8\xcd\x9c\x65\xd4\x98\x37\xb2\xe5\x89\xda\x29\x60\x47\x45\x4a\xc2\x17\x72\xe9\x80\x55\x8f\xc7\x4c\x47\xec\x94\x8d\x09\x02\xab\xa8\xb1\x2f\xeb\xc6\x9a\xc9\xc6\x12\xad\xb6\xf3\x1b\xcd\x9e\xf3\xe0\x9d\x1f\xaf\x02\x69\x0a\xee\x95\xe3\xa0\xc6\x95\x49\xfa\x2c\x46\xb5\x32\xf8\x80\x38\x39\x9a\x30\xa7\x69\xf0\xfe\x7e\x16\xd9\x93\xb9\x3a\x56\x5b\xaa\xc0\xbb\xae\xfd\x55\xb0\x29\x03\x4e\x04\x85\x23\x06\xae\x50\x55\xc7\x06\xbb\x31\xfe\xd2\xa9\xf3\xf3\x9e\x2b\x20\xc7\x9b\x9f\xbb\xf6\xe9\x08\xcd\x1f\x2a\x38\x1e\xb3\x62\x22\xe4\xaa\x3c\x54\xe2\x06\x14\x51\xe6\x18\x71\xc1\x4c\xee\x7e\x19\x62\x89\x0c\xac\x09\x70\x5e\x1b\x5d\x4e\x0b\x7f\x33\x1d\xea\xe3\x71\xe8\x2b\x89\x18\x08\x12\xbc\xbc\xb9\x4a\x01\xe4\x38\xaa\x12\x34\x5b\xe6\x36\xfc\x12\x6a\x34\xea\xd2\x90\xf3\x4c\x82\x4b\xec\x7a\x8a\xdd\xf1\x54\x38\x47\xe1\xd4\xb9\x13\xb4\xe9\x49\xb0\x29\x3e\x93\x27\x00\xa7\x2d\x08\x2d\xff\x3f\x19\xb1\xcf\x6a\xfc\xe7\x0d\xd6\xe7\x8c\xd5\xe7\x4f\xd0\x03\x03\x16\x46\xca\x26\x1d\x1b\x5a\xf7\xa5\x1e\xc2\xb1\x69\x0e\xa2\x65\x7c\x0b\x42\x0f\x6c\x66\x99\x81\xc8\xa2\x91\xae\x2c\x37\x8e\x41\x5e\x33\x7e\x94\x1d\xe6\x22\x47\xaf\xe6\xf5\x39\xb4\x66\xd3\xf3\xf5\x45\x24\x94\x58\x47\xc0\xdc\xd9\x96\x55\x8b\xf5\x12\x5c\xc3\x67\x1b\xf6\x5a\x66\x25\xdd\xba\x01\x21\x64\x7e\x48\xd3\x6c\x6b\x09\x0f\xa6\xde\x84\xb6\xda\x5f\xa3\x15\xc9\x21\x52\x9c\x40\x49\xc6\x56\x88\x95\x95\x8d\xca\x6c\x23\xb6\x74\x53\xcb\x28\xb2\x2d\x2b\x5d\xa5\xae\xfc\x11\x5b\x79\xe9\xdc\x16\x25\x1c\xd8\x98\x2a\x6a\xcc\xf1\x98\x61\x1c\x5b\x51\xdb\x2e\x7b\xbb\x8b\xaf\x72\x5b\xe7\x4a\xf5\x0c\x53\x8d\xee\x4d\x76\xaa\x80\xdb\xfb\x51\x66\x15\x21\xb4\x04\x36\xcf\x06\x95\x36\xa8\x24\xc8\x85\xee\x99\x53\xfe\x19\x1e\xb0\x07\x3b\x7a\xd3\x9c\x81\xf1\x63\x1b\x7d\x73\x39\x4d\xd3\x2a\xea\x7b\x63\xa0\x9d\xc0\x71\xb1\x5e\x62\x5f\xd1\xc3\x79\x67\x6d\x40\x02\xec\x27\x3e\x4c\x20\x5f\x37\xa8\x4b\xbd\x81\xe2\xf6\xce\xcc\x87\x0c\xdc\xaf\xda\xf1\xe2\xbe\x26\xb6\x3f\x3e\x74\x6a\x8e\x46\x26\x3e\x35\x9d\x07\x0d\xed\xc4\x4d\xda\xed\x17\x0d\xcd\x85\x2b\x96\x3f\xc2\x5a\x37\x2d\xd0\xdb\xc0\x33\xcd\xc0\x99\x76\x0a\x07\x39\xd6\x34\xe7\x88\xa7\x1e\x9a\xf5\xa4\x01\x0c\xde\x23\x77\x63\x66\x01\x57\xb0\xea\x5d\x32\xe2\x13\xb1\x6e\x41\xe7\x00\xb9\xae\x85\xd3\x53\x70\x4c\x02\xb6\x41\xd1\xa4\xc0\xf9\xe4\x7c\x7d\x7c\x27\x32\x6d\xcf\xa3\x70\x20\x89\x13\xde\x8b\x25\x73\xe7\x51\xab\x02\xf8\x94\xb5\x50\xad\xcd\x14\x74\x29\x94\x46\x0a\x25\x17\x62\xe9\xc4\x55\x05\xe1\xb9\xcf\x57\xb1\xe9\x79\x75\x51\xd4\xf9\xaa\x7a\x5a\x4a\x56\x2c\xaa\x25\x3d\xb0\xe9\xf9\x21\x98\x5d\x9c\x8f\x46\x07\x7b\x0b\x57\x8b\xc3\x32\x9c\xd3\xa5\xdf\x01\x5e\x3d\xee\x8c\x0f\x54\x98\x7e\x58\xf1\x85\x3d\x8a\x17\x62\xc9\x8a\xc8\x11\x67\x18\xf8\xaf\xa3\x37\x49\xde\x3e\x12\xe3\xb3\xbe\xeb\x8e\x1a\xfd\x50\xe3\xfc\xd7\xa2\x9d\x8c\x93\x41\xf3\xe6\x03\x33\x5d\xd7\xf8\x3e\x3a\xee\x3f\xbb\xfc\xc6\x45\xa8\x55\xbe\x89\x0a\xff\xa9\xc9\x36\x36\x29\xf2\x78\x96\x4f\xeb\xa4\xbf\xdf\x93\x14\x4f\x8b\x46\xd2\xa7\x2d\xe7\xe4\xb1\x08\x6a\x6c\x1a\x9f\xe0\xe6\x77\xc8\x74\xdb\xa5\x2c\x77\x2f\x2c\x14\xf8\x09\xfc\xa9\x2c\x07\x81\xb6\x43\x14\x9d\x3b\x93\xe3\x11\x7a\x30\xfe\x49\x3a\x60\x15\xef\xfa\x66\xac\x10\xac\x07\xb3\x18\x45\x85\xa5\xca\xc7\x23\xf4\x62\xfc\x3b\x24\xf7\x1a\x6b\xf6\x9a\x2f\xd6\x63\xbb\x4d\xea\x3e\xfc\xd0\x32\xb0\x07\xbd\xa5\xd6\x7c\xcb\x70\x2e\x08\xea\x3d\xc2\x46\xaf\x11\x99\x40\x20\xa8\xb0\xe9\xeb\x3b\x97\xf7\x37\x38\xc7\x7e\xe4\xd0\x3a\x77\x86\x3e\x95\xf6\xb8\xf7\x0b\xf5\x62\x0a\xee\x13\x59\x08\xe8\xe1\x08\xbf\x8b\xa7\x06\x1a\x3e\x9c\x46\x9c\xff\x8b\x6e\xf4\x2c\x8a\x7e\xde\x75\xf5\xc7\x90\xf7\x23\xb4\xb0\xfd\x56\xed\x7e\x17\xe4\xa1\x5d\x59\xef\x48\xd0\xf7\xec\xf4\x1e\x53\x1c\xc2\x5e\xc4\xe9\x9d\x12\xba\xb2\x93\x75\x70\xcf\x67\x38\xb5\x61\xbf\xda\x19\x16\x84\xae\x31\x89\x51\x54\xe2\x64\xd6\x09\x7e\xb7\x09\xd0\xe7\xe3\xea\x92\x4d\xd3\x74\x7d\xc1\xa6\xc7\xe3\xea\x02\x7e\x5f\x32\x18\x47\xfc\xaa\x1b\xd5\x5c\xc5\x69\x2a\x5a\x5b\xc0\xd7\xa6\xc9\x25\x9b\xe6\xd1\xd7\x94\x1c\x8f\x58\xcd\x7f\xb2\x30\xe8\x9d\x24\x17\xbe\x38\xff\x3d\x0d\x5e\x27\x87\xd3\xf8\x46\xf3\x47\xf3\x00\x3a\x37\x0c\x66\xfb\x9c\x70\xbf\x31\xc6\x35\xb0\x43\xad\xf1\x1a\xf2\xff\xdc\xd8\x8b\x7e\x5e\x25\xfb\x03\x40\x83\xfd\x5a\x62\x4c\xce\x4d\x0e\x30\x0e\x75\xd6\xaf\x22\xca\x73\xd9\xb8\x76\x06\x4c\xa7\x18\x7e\xc2\x9f\x01\x20\x08\x91\x51\xa2\x4f\xe2\x51\xf8\x66\x40\xfd\xa3\x59\xdd\x82\x6f\x1b\x8d\xff\x98\xa6\xa6\xbd\x14\x75\x87\xf9\x6d\x1c\x2d\x62\x93\x65\x12\x4e\x96\xee\x2e\x8c\x38\x37\x24\x2a\x61\xfc\xf1\xec\xf2\x19\x6a\x11\x62\x9a\x4e\x7d\xda\x34\x95\x9d\x69\x47\xa1\xe3\x2f\x1e\xc0\x3e\x9a\xce\xd0\xa1\x5f\x62\xc6\x1d\xeb\x86\x87\x62\x77\xb1\xd4\x8d\x2d\x01\x03\xe4\xc7\x06\x72\x22\x98\x02\x7d\x2d\x1d\xac\x42\xe3\x0a\xa7\x03\x77\x67\x59\x48\x7d\xdf\xaa\xb4\xf5\xb5\xf8\xdf\xba\xe3\x6d\x7a\xd6\x18\xef\x98\xb6\xd9\x81\xb5\xa4\x39\x8a\xbe\x87\xd4\x0d\x45\xdf\x40\x8a\x06\x73\xe4\x86\x42\xc0\x55\xc4\xfe\xf5\x5c\x94\xdd\xb3\xa2\x77\xa0\x01\x3f\xab\xaf\x87\x24\x4c\x81\x88\xa6\x40\xa8\xec\x83\x24\xf4\xc3\xbf\xac\x39\x70\xef\xbb\xec\xa0\xd6\xa3\x9a\x9e\x3b\x7f\xca\x2d\x89\xc7\x68\xc4\x49\x1c\x0e\x5e\x15\x51\xc6\x37\x68\xa9\x0f\x90\xd3\xa9\xd9\xc8\x9e\x87\xd5\x86\x8e\x93\x93\xc8\xc0\x82\x01\xef\xfe\xb0\x27\xbf\x90\xec\xd5\xe4\x05\xe0\x0b\xdb\x31\xef\xbb\x36\x46\x3b\xe7\x4c\xc8\x33\x4d\x74\xdb\x42\x01\x3c\x11\xdb\x5a\x16\x72\xc9\x80\xfb\x1b\xb4\x35\x33\xa4\x5a\x73\x66\x22\x89\xd6\x3f\x43\x15\x3f\x8a\xcc\x90\x8b\xcc\x69\x56\x80\x14\xb2\xe9\xec\x09\xa0\x4e\x1b\x48\xd1\xe0\x13\x8e\x23\xd7\xae\x23\x42\xf4\xab\x7f\xf7\xf2\x8a\xba\xee\x81\x31\x30\x23\xee\x81\xd1\xb3\x65\xee\xb9\x14\xa6\xd3\x27\xc2\x4d\xfd\x54\x65\x0d\x35\x5e\xca\xa1\x0b\x41\xb7\x23\xf1\x1e\x69\xf3\x33\xcd\x4b\x40\xc2\x3e\x4f\x06\x7c\x12\x01\x6c\xdb\xd3\x78\xc4\x12\x74\xf0\x33\x06\x24\x94\xb3\x71\x32\x32\x1d\x34\xef\x18\x4f\x26\xd9\x7f\x3c\x07\x2b\xe8\xe0\x73\xc6\x15\x83\x6e\xa5\xce\xe2\xfc\x4d\xcf\xb2\x8d\xfc\xbf\xdb\x5b\x6a\x90\xb6\xf3\xa2\x3a\x68\x4e\xdf\xab\x0c\x10\x58\xe8\x02\x3b\xb3\xf4\x03\x18\x5d\x23\xdc\xc3\x2b\x26\x88\x15\x57\x63\x3f\xa6\x76\x93\x7c\x21\x09\xfd\xe2\xc1\x4d\xd2\xa7\x42\x13\x1e\x1a\xbd\x7b\x1d\xff\x70\x8d\x3e\xde\xd8\x1b\x91\xe9\xe8\x41\x5e\xa6\xa9\x69\x7a\x8f\x10\x31\x2b\x2b\x88\xb1\xfc\x37\x94\x60\x49\x7e\x43\xdc\x37\x30\x41\xe2\x9d\x79\x92\xe2\xdc\x49\xbb\xe7\xaf\x5f\xa5\xf3\x31\xf4\x5a\x64\xba\x76\xd7\x34\x05\x6f\x95\xe0\xeb\x4b\xa1\x26\x44\xc7\x60\x1e\x16\xaf\xa6\x63\x45\xa8\x41\x35\x8d\xe0\x10\xe8\x04\xfa\xc1\x5f\x7c\xfe\x63\xfe\xd6\x79\x04\x6e\x8c\x54\x34\x2a\x83\x28\x55\xfd\x20\x2e\x43\xeb\xc7\x7c\x20\xd3\x34\x83\x3e\xf8\x86\x8f\x24\x68\x68\xfc\x66\x32\xd3\xf4\x7d\xd0\xef\x00\xe8\x9f\x32\x43\xcb\x96\x13\x21\x8e\x2e\x7c\xe3\xe9\x42\x87\x22\xa0\x54\x94\x7f\x34\x8c\xd3\xf7\xd8\x06\xea\x95\x0b\x5d\x2b\xf5\xdc\x39\x1d\xca\x67\xd1\x8e\xff\xcd\x19\xd7\xc7\xa2\x5a\xb8\x25\xd5\xfb\xf7\xfb\xb6\x78\xf5\x3c\x82\x46\x44\xd5\xbc\x47\xd9\x3c\xff\xc7\xf1\x6d\x35\x22\x00\x9e\x90\x5d\x15\xab\xf7\xd7\x5a\x1d\xe4\x7a\x4c\xe6\xd9\xdb\xd7\x23\xf2\xc8\xdf\x30\x11\x2d\x91\x33\x1e\x2c\x8f\x34\xaa\xf2\x91\x91\x0f\x72\x01\x23\x1d\x69\xef\x79\x50\xd8\xc5\x6c\x39\x4f\x9c\xcb\x6d\xe7\x4d\x02\x7f\x3b\x45\x15\xb3\x90\xcb\xb9\x41\x92\xf7\x78\x99\x47\xfe\x3b\x12\x68\x63\x45\x92\x91\x8d\x19\xd9\xcf\x2f\xec\x27\x71\xaa\xb2\x96\x42\x1e\x8f\xf0\x7f\xc4\x92\x33\x4c\x56\x6f\xc2\x7a\x3c\xfe\x12\x3b\x61\xb9\x2a\x0b\xf9\xde\x4e\x49\x4d\xce\x42\x90\xbb\xd4\x44\xf8\x91\x7e\xdc\x22\x14\xca\x2c\x72\xb9\x79\x86\xc0\x91\x75\x09\xf3\x76\x40\xe6\x40\x26\x49\xee\x34\xa9\xeb\x66\xfd\x35\xb2\x85\x6a\x6e\xce\xd9\x14\xa5\xf6\x12\x40\x6e\xa7\xcb\x56\xf5\x9a\x40\x25\x7e\x03\xf2\x09\x20\xc9\x86\x67\x67\x83\x5a\xc8\x4e\x5f\x35\x3c\xbc\x74\x1e\x4e\x6d\x69\x67\xc9\x08\xa1\x8f\x47\xc9\xd9\xa6\x10\x25\x5f\x9f\x19\x75\x56\xac\x6f\x0a\xb9\xe2\x67\x15\xa8\xca\x4f\x92\x68\x6d\xfd\x2d\x6e\xb4\x0f\x14\x11\xa8\x21\xd4\x9a\xaf\x9d\x06\x24\x97\xeb\x7c\x0d\xaa\x97\xa8\x23\x99\xaf\x27\x4e\x97\x32\x23\xd4\x6e\xeb\x5c\xa1\x3d\x88\x43\xda\xe4\xf3\x12\x74\xdf\xd4\x9a\xd3\x15\xc9\x57\x27\x78\x2f\x52\xb4\xc0\x63\x86\x56\x0c\x23\x07\x86\xbd\xe0\x59\x41\xbd\x3b\x54\x7a\xb0\x3c\x71\xe1\xde\xc3\xec\xdd\xa6\x32\xf5\xf3\xb2\xb6\x37\x19\xdb\xf3\x6b\x69\x6f\x14\xfc\xa3\xa1\x1d\x30\x1b\x94\x58\x49\x90\xa5\x2d\x96\x28\x0b\x5d\xa3\x7a\xfb\x64\xb5\x25\x69\x3a\x5c\x4f\xb8\x2a\x33\x72\x4e\x5c\xe7\x18\x76\x4c\xb1\xbf\xca\xac\xa2\x6b\xba\x02\xb0\x05\x07\xe1\x2a\x40\xb5\x21\xe8\xbf\xce\xcb\x5c\x64\xd1\x30\xfe\x3d\xba\x04\x82\x98\xd4\x09\x6d\xf5\x24\x86\x6e\x77\x5b\x04\x65\x7e\x75\x8b\xe3\x24\x75\xff\xa7\x74\x85\xd4\x20\x74\xb5\xaf\x97\x74\x1b\x15\x14\x63\xc1\xa7\xe9\xc2\xe6\x46\x40\xe6\x04\xdd\xc8\x7e\x2f\xb3\xbf\xd8\xdb\xb1\x24\x54\x91\xf3\x7a\x00\xec\x4e\x5a\xa3\xd6\x79\x28\xab\x8b\xc9\x3e\xcf\x2a\x36\x9c\xd1\x22\x4d\xb5\x40\x1e\x9d\x42\x26\x82\xff\x82\x5f\x56\x5a\x3a\x17\x23\x25\xfb\x5e\x66\x7f\xb5\x15\xae\xa9\xa4\x5b\x5b\x29\xdd\xe2\xc8\x6c\xd8\xd6\xd2\x16\xbb\x52\x07\x1b\x98\xa3\x64\x37\x4e\x46\x59\x39\xdf\x8c\xec\xd6\x2f\xf3\x0d\xf2\xe1\xc3\xea\x78\x5c\x0d\x59\xe9\xe0\x61\x0f\x17\x6e\xb2\xce\x89\xc8\x0e\x2c\x78\x25\xf4\xeb\xf3\x30\xfa\x92\xff\x3b\xa1\x2b\x32\x58\xb1\xf2\xd4\x98\xd8\x53\x28\x60\xaf\xaa\xf3\xa6\x4b\x7a\x28\xc1\x4e\x3e\xe6\x1f\x88\x6c\x6f\xa7\xff\xc0\xf6\xd1\xfe\xe6\xa2\x6d\xeb\xb8\xf0\x2e\x8b\xec\x12\xfe\x86\xcb\x25\x55\xec\xee\x34\xc0\xc5\xe0\xd7\xa5\xf7\x72\x45\x75\xc7\x89\x94\x7b\xa8\xa2\xe0\xaf\x43\xc5\x36\x85\xe8\xa0\x97\x47\x6e\x4e\xcb\xe2\x36\x62\x88\xc3\x02\x6b\x27\x59\x14\x4b\x5a\xb2\x99\x5d\x3f\x8d\x76\x20\x54\x7c\x0f\x64\x7e\x2d\x11\x2b\xcf\x0f\x17\x1e\x74\x57\x32\xb1\x28\x97\x03\x79\x09\x77\x0d\xc7\x41\x94\x74\x46\x39\x15\x8b\x72\x34\x5b\xda\x35\x54\x8e\xd8\x63\x1a\x4d\x82\xbd\xb6\x9e\x40\xce\x26\x36\x59\x35\x51\xfb\xe2\x9f\x07\x4e\x42\x76\x4d\xcb\xb1\xa6\x1c\x1c\x29\xb9\xe6\x5a\xc6\x8d\xd0\x92\xe9\xd1\x63\x94\x97\xe3\x5d\xf7\xa2\x3c\xd7\x23\xf6\xd8\x4b\x53\xc4\x42\x8f\x66\xcb\x01\xfe\x63\x99\x9a\x2b\xbb\x46\xf2\x24\x21\xa3\x56\x59\x27\x3b\x8e\xfe\xc8\xb8\x03\x63\xa4\x2a\x17\x14\x9e\xce\x79\x95\xab\x89\x3b\xb8\xe0\x09\xdd\x9f\x5c\x73\xe7\x6d\xb3\x9e\x69\x23\x1a\x8e\x34\xd0\xaa\xa9\x3a\x1e\xfd\xaf\xc5\x74\x39\x64\xad\xb9\xf7\xe3\x06\x74\xea\x8d\x00\x37\x8e\x82\xb9\x35\xd3\xb8\x2e\x3e\xbc\xc9\x4a\x99\x45\x6b\x46\x92\x1c\x20\xb5\xa0\x2a\x30\x70\x07\x8b\x32\x6c\x06\x13\xee\x07\x15\x13\xd7\xc5\xb9\x8b\xfb\x1a\x3f\x59\x88\xc8\x9b\x11\x60\x02\xd8\x48\x89\xce\x30\x34\x63\xde\x75\x99\x56\xd2\x08\xb4\x1d\x8c\xbf\x47\xa3\x00\x5d\xe3\x6a\xaf\xc7\x4d\x77\x76\x48\xd4\x15\xf5\x10\x19\x83\x85\xef\xb4\x19\x98\x02\x72\x22\x8f\xc7\x29\x75\x84\xeb\x2f\x32\x13\x54\x93\xf3\xa1\xf2\x24\xeb\xaf\x36\x44\xd9\x93\xa0\x91\xcb\xf2\xe0\xdf\x48\x42\xbf\x89\x39\x4d\xf0\x55\xa3\x7a\x4c\xef\xde\x08\xa7\x74\x87\xcc\x8d\x60\x77\x27\x2a\x44\x03\xc7\x48\x89\x1a\x90\x1b\xdd\x82\x56\x7f\xea\x02\xfd\x47\x4f\xc7\xa6\x41\x85\xe7\x42\xe4\x52\x04\xee\x62\xc1\x97\x96\xef\x5e\xf0\x25\x0b\x60\x4c\xd9\xa3\xb7\xaf\x47\x8f\xae\x61\x5b\x7c\x91\x26\xb1\xce\x41\x21\x62\xf9\x4d\xad\x16\x16\xde\x65\x68\x35\x4f\xf6\xc5\x7a\x2d\xe4\xf5\x18\xfc\xab\xe6\x67\x93\xd9\xfe\x63\x82\xca\x38\x54\xb2\xbb\xbd\xe6\xb9\xcd\xb8\xd7\x3c\xa1\x0b\xdd\xd4\x20\x43\x98\x47\xea\x7c\x84\xe5\x9a\xae\x54\x99\x4f\xe9\x5e\x55\xf9\x94\xae\x76\x39\xa7\x60\xee\x0e\xa6\x4f\x55\x9e\xa9\xe3\xb1\x02\x7d\x98\x6b\x6e\x10\xd4\xbd\xe5\xe1\x8a\x9c\x06\xc6\xdf\xab\x62\x33\x7e\xe4\x82\x58\x06\xde\x38\xcc\x1c\xff\xb9\xdd\x90\x4f\x49\xad\xd2\x50\xd0\x92\x09\x17\xbf\x10\xe3\xd9\x32\xc7\x13\x7f\x20\x61\x49\x4c\xa9\x44\xa5\xae\xf7\x5c\xb2\x4a\xd0\x5f\x63\x17\x56\xae\x5e\x7b\xe9\x2e\xd8\x13\x91\x95\x04\x3d\x0d\x84\x0c\x07\x11\x7d\x51\x50\xdf\x9f\xec\x8a\x3d\x5b\x2c\xe9\x5a\x64\x25\x95\x14\xf6\x7d\x49\xcd\x30\x72\x91\xc3\x3f\x1a\xae\x65\x51\xbe\xc4\xe2\xd7\x69\xfa\x06\xca\x26\xb4\x6c\xef\xa8\x66\x80\xa7\x35\xd0\x08\xf7\x9b\xfd\xa1\xee\x49\x45\x65\x4d\x9b\x92\xa4\x53\x7a\x4d\xad\xa0\xb8\xf0\xd5\x53\x60\x88\xa3\x51\x3a\x2c\x94\x50\x10\xc0\xed\x8a\x7d\x50\x68\xc5\x2f\x38\x87\xa6\xd4\x8e\xaf\x5b\x0c\x13\x7b\x89\x96\x6b\xb4\x2b\xfd\x67\xdf\x38\x63\x69\x62\x9e\x85\x29\x87\xd1\x84\x02\x69\x1d\x06\xae\x57\xd9\xdd\x89\xe4\x59\x33\xa5\xd3\x88\x8d\x02\xe2\xc7\x48\x1b\x40\x68\xd6\x2a\xa7\x99\x07\x83\xa2\x5c\x77\x27\x64\x1a\x2a\x2f\x23\xaf\xbb\x03\x06\x5e\xb6\x33\xe7\xd9\xa3\xb7\x57\xab\xdd\xd8\x14\x57\x6f\xaf\xdc\x46\x3e\xd4\xca\x55\xe4\x78\x3c\x4c\xfe\x79\xe0\xfa\x16\xb1\x32\x94\x4e\xd3\x56\x40\x96\x4c\x30\x7f\xe2\x56\x98\xaf\x23\x14\xc2\x12\x4c\x00\x2e\xd4\xc6\xdb\x62\xf5\x3e\x09\xf7\x98\xbf\x82\xfd\x80\xe6\x72\xed\x3d\x02\x05\xb6\xd6\xd2\x2c\x4e\xf0\x5f\x5d\x58\x77\xc2\x5b\x09\xba\xf3\x4c\x65\x4d\x43\x2a\x11\x71\xa6\x15\x2d\xfd\x4b\x18\x0e\x90\x83\x63\xc3\x1d\x0e\x1b\xcf\xd1\xa4\xb3\xbb\x3f\xd3\xd3\xa3\x6b\x5a\x0a\x92\x1b\xba\x02\xe5\xc7\x1e\xff\x8c\x14\xf4\x8a\xc5\x26\x5b\x79\x9b\x4c\x72\x77\x55\x9b\x7a\xaf\x34\x2f\x0c\x7f\xea\x3e\x9f\xeb\xe2\x1a\x6d\x92\x03\x65\xd8\xa2\xeb\xcb\x15\xcc\x0f\xfa\xd5\xd9\x22\xda\x04\x5b\x01\xae\x63\x66\x08\xdd\xb3\xcd\x7c\x83\x57\xd2\xf1\x36\x0f\x6f\xde\xf0\xf8\xb5\x77\x2f\xe2\xed\x3a\xdf\xf0\x8f\x20\xa1\xc9\x0e\xee\x4e\xbb\xa5\xdb\xd1\x9e\x90\x81\x4a\xd3\xe2\xe2\xbf\xcf\xaf\x1a\x0b\x3c\xd2\xb8\xdd\x2d\x09\xc9\x9b\xb1\xce\xe7\xb6\xdb\x26\xdc\x59\x9e\xed\x55\x35\xda\x53\x88\x5b\xa9\x72\xc4\xf6\x2e\x8c\xed\x81\x6f\xdd\x78\x67\x9d\x9b\x6c\x3b\x62\xfb\xd1\x8c\x26\x6f\x4d\xc2\xd8\x66\x31\x5d\x62\x9b\x6f\x70\x50\xdb\x20\x9c\xd7\xec\x66\x0c\x45\xfe\xdb\xcd\x79\xb6\x63\xf7\x35\x74\xa7\xb2\x6b\x42\x93\xb0\x12\x49\x4b\xc9\x57\x2b\x70\x47\xb7\xd7\xbc\xf2\x96\x88\x09\xa1\xbb\xae\x2a\xb0\x41\x10\x9c\xb7\x08\x33\x08\x5d\xb9\xae\xdd\xdf\xbc\xd5\xae\xcd\xc7\x63\xf2\x56\x86\xf6\x3f\xd0\xb0\x3a\xcb\x3c\xf9\x9f\xff\xe3\xff\x48\xf2\xe4\x7f\xfe\x8f\xff\xbb\xc7\x7d\x66\xa7\xc5\xa1\x2d\x50\x85\x6f\xcb\x0c\xda\x62\x2b\x6c\x8c\x56\xbf\x23\xcf\x0c\xb2\x7e\xa2\xe0\x7f\x75\x05\xf8\xe6\xf4\x2f\x85\x19\x2e\x05\xb0\x84\x3e\x61\x9b\x5d\x96\x00\xfc\x0d\x86\x7d\xf7\x2f\x54\x7c\x68\xee\x29\x3a\x5c\xac\xae\x7c\xe3\xd3\x34\x03\x53\x29\xbf\xe4\x7c\x0a\x78\xb9\x38\x1e\xe5\xf1\x28\x8e\xc7\xf5\xf1\x58\xe2\x4a\xbb\x65\xda\x12\x06\x90\x88\xdd\x8e\x98\x44\x54\xc1\xdb\x11\x73\x3a\xef\xef\x62\x95\xf3\xab\x25\xbd\xa5\x65\x6d\x70\x9f\xa6\xd9\x3b\xe7\xe1\xb4\xc2\x61\xe8\x1e\x10\xef\xc8\xa9\x3f\xe2\x8a\x44\x6c\x75\x29\x9a\xca\x20\xc9\x59\x42\x9b\x5a\x82\xe3\xc7\xf8\x14\x3f\x62\xfa\xdf\x1e\xcf\x81\xc9\xff\x7f\xfe\xcf\x24\xd8\x46\x83\x58\xa8\x2e\xef\x20\x1a\x02\xfd\xc0\xdf\x85\x5b\xb8\xa3\x77\x4c\xcc\xc5\x28\x39\x5b\xed\xc6\x20\xe1\x1b\x5f\x29\xbd\xe6\x3a\xc9\x93\x76\x48\x20\x4b\x07\xa6\x61\xfc\x57\xec\x30\x0a\x6f\xd2\xe7\x75\xdb\x51\x11\x26\xc8\x5c\xd7\x9e\x7f\xd9\x32\xb3\x40\x5d\x91\xed\xc4\xa8\xcb\x43\x9a\x6e\x9d\x5a\xd6\x01\xc9\xc1\xc9\x47\xb1\x55\x90\x57\xb5\xda\x3b\x80\x80\x20\x9c\xb3\xa9\xc7\x07\x02\x09\x90\xe5\xa3\x25\xa1\xa8\x05\x45\x25\xf3\x09\x7d\xb2\x03\xb3\xbf\xe2\x17\xd0\x55\x87\x29\x1f\xca\x34\x8d\x9f\x93\x06\x02\x1f\xe7\xfb\x96\x1e\x15\x84\xda\xf4\xb0\xf9\x9a\x4e\xd1\x24\xe7\xeb\xea\x6b\x9c\xf4\xb0\xdb\xd2\x34\x13\xc7\x63\x26\x58\xff\x7a\x68\x2d\x7e\x0f\x52\x81\x6b\x8f\x00\xea\x6d\x67\xef\xe2\xab\x4f\x42\xf5\x44\xac\x89\x03\xc4\xec\xb6\xa6\xe2\xe6\x67\xe9\xdd\xdc\x66\xe2\xbe\x95\x2a\x48\xbd\x69\xea\x31\x5a\x8b\xa6\x97\xd8\xe6\xcb\xa0\x70\x4e\x99\xa9\x62\xd3\xa6\xde\x02\xcc\x18\x3d\xd0\x15\x5d\xd3\x2d\xdd\x04\xbc\x27\xba\x67\x53\xba\x63\xd9\x6b\x36\xa3\x49\x42\xe8\x0d\x1e\x73\x62\x93\xdd\x30\xb6\x27\x77\x25\x3b\xb0\x15\x5b\xb3\x8a\x25\x09\x45\x8f\xac\xf4\x86\xcd\x1e\xd5\xaf\x61\xd7\xf4\xca\x32\xa6\xb7\x6c\x7a\x7e\x1b\xab\x45\xdc\x62\x13\xdf\x31\xb9\xb8\x5d\xd2\x0f\xec\x9d\x57\x48\x8c\x75\x0a\x3f\x38\x9d\xc2\x77\xee\x95\x70\x9f\xa6\x1f\xa2\xf9\x9e\x5f\xe1\x44\x7f\x20\xf9\x3b\xb7\x3c\xf7\xe1\x11\xf1\x1d\x3c\x22\xda\xbf\x97\xfb\xe3\xf1\x43\xfc\x14\xf9\x0e\x9e\x3e\xf7\x51\xb9\x64\xee\x9e\x24\xde\xc1\x3b\xe4\x3b\x78\x7a\xdc\xa7\xe9\xcd\x25\x06\x64\x37\x10\x43\x0f\xcc\x8e\xc2\x87\x06\x53\x53\xa2\x90\x37\x0a\x84\x14\x15\x4a\xc7\xb2\x6a\x5e\x8d\x92\x73\xbc\xe5\x43\xb0\x8d\xad\xb5\xdd\x1b\x9d\xcb\x56\xbe\xac\x3a\x81\x4d\xee\xd5\xe1\x7d\xd3\x6f\xd2\x34\xbb\x3e\x1e\xb3\xeb\x88\x67\xac\x53\xd1\x77\xa0\x56\xfb\x01\x89\x5d\x9a\x0e\xd7\x40\x66\x3f\x78\xbf\xcc\x8d\xb1\xc8\x86\x5b\x50\x35\xf1\x3a\x81\xf4\x83\x53\x35\xd9\xb2\x77\xc4\x8f\xeb\xa5\x1b\x0a\x67\x3f\x69\x07\x03\x5e\x65\x2d\x15\x40\x6b\x5c\x9c\x5f\x0f\xe0\x70\x7e\x3b\x62\x8f\xc9\xf5\xe2\x76\x34\x5b\x62\x6b\x0f\xd8\xb1\xeb\xc5\xed\x12\xe5\xf7\xdb\xe3\x71\x1b\x46\xbf\x2e\xe1\x2a\x5e\x21\x2b\xb0\xa0\xa0\x57\x3e\xd3\x16\x34\x1b\x51\x6f\x74\x4a\x60\x01\x5a\x8e\xcd\xa6\xca\xbc\xa2\xa3\x51\xf3\xcd\x68\x06\x3a\x94\x64\xbc\x0f\xaa\x8e\x4d\x45\x48\x5a\xa7\xf6\x86\x58\x5b\xbf\x26\xb2\x2d\x1b\xce\xc8\xc9\x76\x6d\x7f\xc9\x3c\xf7\xe3\x97\xf3\xb3\x5a\x4a\xb4\xa1\x37\xc4\x6d\x06\x67\x43\xf7\x91\xed\x47\xbb\x48\xa1\x69\xe8\x84\x84\xaf\xd8\xc7\xcb\x67\xf3\x5d\x20\x85\xcf\xc6\x7b\x92\xef\x06\x26\x5c\xe2\x32\x43\x5f\xd1\x62\x5e\x8c\xca\xbc\xa4\x2b\xba\x1f\xbd\xf2\x86\xc0\xec\x66\x7e\xc8\x93\x84\xae\x69\x05\xa3\xfd\xf1\x92\x3d\x23\x77\x3b\xe6\x0b\xb3\x45\xd1\x3d\x7b\x36\x40\xaa\xbc\x67\x1f\xe9\x8a\x25\xc9\x69\x17\x00\xd9\x14\x55\x4c\x2f\x5e\x8f\x46\x4b\x42\x0b\xa6\x44\x86\x1f\xd4\x44\x5c\x08\xc1\x83\xfe\xcc\xf7\xf2\x35\x9b\x9d\xbf\xae\x35\x28\x5e\xdb\xd9\x6c\xb4\xb6\x55\xb8\x65\x46\xb0\xe0\x59\xab\xe0\x48\x08\xb0\x6d\x9e\x72\x53\x56\x6b\x88\x83\x42\x85\xd3\x11\x4f\xd3\x24\x61\x91\x1e\xae\x5d\xa2\x96\x4c\x1e\x8f\x0d\xbe\xa9\xd7\xf3\x76\x54\xdb\x46\x3c\xfc\x1e\x70\xa6\xe7\x7a\xc1\x97\x2d\x7d\x4a\x05\x0f\x7f\x82\xdc\x65\x5d\x58\x38\xa4\x9d\xcc\x50\x1e\x49\xb1\x80\x86\xc7\x42\x2d\x74\xc5\xea\x24\x4a\x2e\x16\x64\x5c\x4e\x92\xe1\x5e\xae\xe1\x9c\x86\x68\xf8\xe5\x62\xe1\xbd\x8c\x82\xa6\x9f\x26\x4e\x8d\x5e\xce\x6d\x60\x3e\x1b\x88\xfa\xc5\xdb\x99\x4e\x09\x72\x22\xd8\x60\x2a\xc1\xc2\x85\x83\x73\x03\x79\x8d\x97\xb1\x58\x00\xd3\x96\x91\x72\xaa\xd8\x62\x09\x90\xdf\x96\x51\x51\xb5\xea\xec\x37\x32\x3b\x2c\xf4\x92\x8a\x4c\x13\x2a\xeb\xa7\x02\xb4\x90\xa9\xdc\xa4\x81\x3d\x19\x10\x44\x27\x97\x5d\xa1\xee\x4f\xe5\xde\x39\xd6\xf8\x59\xba\xcf\xad\x9d\xd0\x03\xb1\x27\x4b\x76\x88\xe0\xd0\xf7\x0c\x53\x8c\xdd\x63\x68\x6d\xcb\xe0\xed\xf4\xb2\x29\x2d\xb2\x29\x3d\x04\x80\x0c\xea\xa1\xa2\x42\x41\x76\xb8\xc5\x1f\x7c\x1c\xd2\x04\x63\x23\xb7\xe4\xfc\xd5\x2a\x2e\x68\x3c\x23\x03\x95\xad\xe9\x1a\x9b\xbf\x21\x74\x8f\xd8\xef\x50\xb4\x7b\xb1\xde\xdb\x8b\x86\x97\x30\x84\x16\xb9\xc8\x1d\x09\xb7\x8b\x15\x63\xa8\x46\x34\x63\x2c\xb4\x42\x65\x2b\xba\x42\x79\xa9\xdf\xf8\xd5\x64\xb5\x25\xa3\xed\xa8\x11\x5c\xda\x40\xba\xc1\x56\x67\xb6\x95\xb3\xb8\x95\xa4\x31\x35\xfd\x79\xed\x3c\xd1\x7b\xeb\x3b\x2c\xa6\x76\x3a\xa7\x04\xe1\xd7\xa3\x3e\x00\xb3\x1f\x7a\xf1\x59\x8d\xb7\x85\x8d\xd6\xdd\x36\xf8\xf2\x1b\x03\x38\x9a\xd1\x3d\xf6\xeb\xee\x73\x5a\x67\xe7\x63\xdb\x57\xf8\x86\x0c\x3a\xe3\x32\xd8\x5f\xce\x3a\x33\x66\x2b\x1c\xcf\xee\xe9\xe7\x43\x1b\x64\x2f\x02\x18\x10\x42\x91\xf0\x18\xfa\x80\x35\xf4\xa4\x0d\x9b\x02\xbb\xdf\xd2\x00\xe7\x0b\xd3\xb0\xef\xa2\x7a\x04\xea\xe0\xc1\xec\x3d\x7e\x42\xaf\x6b\xde\xd5\x35\xaf\x2c\x67\xa7\xb9\x64\xbc\x5d\x57\x9f\xc5\x90\x97\x4c\x2f\xe4\x72\x60\x46\x4c\x4c\x56\xdb\x83\x7c\x6f\xaf\xde\x19\xb1\x75\x0b\xaf\x7b\x20\x1a\x56\x67\x08\x03\x03\x50\x61\xcd\x57\xfd\x4e\x87\x4f\x7b\x11\x43\x81\x85\xe2\xef\xc5\x47\x8a\xf4\x79\x4f\x14\xe7\xe5\x3b\x29\x1b\xbe\x4c\xda\x54\x48\x32\x3e\x32\xe7\xfa\x42\xd6\x76\x55\x22\x06\x76\xd0\xcb\x78\xdc\xc6\x75\xa7\x7e\x03\x3d\xd0\xbf\x8b\x4c\x50\x07\x45\x9c\x34\x4c\xe9\xdd\x5b\x0d\xcc\x32\xf5\xfc\x4e\xcb\x0f\x80\xdd\x58\x96\xa9\x2e\x6f\x3d\x86\x14\xe4\x0d\x0e\x49\xba\x8d\x0f\x1a\x12\x4e\x11\xc3\x8f\x1a\xae\x99\xb8\x7a\xb7\xc6\x39\xf1\x56\xaa\xa6\xfe\xd5\x4e\xc6\x23\x63\xb9\x96\x6f\x0e\x3b\xd1\xe0\x94\x23\x9e\x42\x2a\x0c\xd7\x3f\x74\x1a\x56\x17\x61\xc7\x94\xc3\x98\x02\xe6\xac\x8e\x61\x50\xf8\x32\xd6\x48\xa4\xbb\xff\xdc\x1c\xdb\x85\xf3\xd0\xdc\x86\x44\xe3\x8e\x31\x64\x63\x89\xf7\x58\xd3\x35\xe2\xe1\x04\x62\x32\x5e\xd3\xa0\x01\x71\x11\x54\x93\x03\x1f\x66\xa8\x18\x73\x00\xa2\xf5\x3b\x0d\x4c\xf2\xa2\x36\x66\x9c\xaa\x86\x0a\xcb\x98\x15\x63\x19\xb6\x07\x63\xca\xa3\xa6\x84\xe6\xf9\xa7\x3e\xd0\x35\xa2\x32\xde\x16\x20\x2e\xce\xcc\x98\x29\x12\x74\x50\xa6\x48\x44\xf9\x18\xed\x76\xea\x51\x30\x17\x8f\xbf\xec\x14\xee\x9e\xcf\x66\xc7\xe3\xb0\x19\xb3\x98\x2e\x23\x97\xa6\x7b\x41\x82\xd1\xd4\xc2\xed\x03\xbf\x92\xb3\xca\x75\x28\xd0\x8c\x85\x3d\x21\xf6\x22\xab\xc8\x92\xb6\x0b\x6d\xac\x9e\x7b\xb6\x43\xd3\xb6\xe5\x9e\xc9\x32\xa4\x59\xb4\x59\xd6\x2d\xe2\x9f\xb3\x6f\xec\xa0\xd4\x62\x1e\xda\xdc\x4b\xed\x4d\xd0\xdf\x06\xd9\x20\x13\xa1\x29\xf0\x68\x2d\xba\x0b\x86\x29\x38\x99\xc5\x24\x6a\x9b\x6b\x92\xf3\xfe\x52\xa5\xa9\x68\x10\xaf\xcb\x2f\xa7\xf5\x78\x14\xac\x19\xf9\x6f\x8f\xbf\x1c\x3d\xfe\x92\x56\xac\x38\xaf\x2e\x9a\x51\xe7\x5e\xe9\xdd\x4d\x85\x68\xec\xf2\x8a\x56\x23\xf6\xf8\x4b\x42\x06\x22\x2c\xc3\x32\xe8\x87\xf5\xad\xbe\xd1\x48\xd2\x29\x2d\x09\x2d\x1b\x13\xe8\x8a\x65\xa2\x45\x6b\x0a\xb7\x24\x00\x9c\xe3\xf5\x5e\x94\x65\x46\x4e\x78\x2f\xe0\x63\xa6\xec\x66\x0f\x31\x2d\xc8\xc4\x61\xef\x0a\xbd\x60\xb3\x29\x89\xb5\xd9\x06\x6b\xe5\x5d\x93\xf3\x0f\x70\x72\x75\xda\xcc\xdb\x85\x8c\xbf\xa4\x5f\x12\xa7\xbe\x84\xbd\x00\xcf\x48\x48\x22\xe0\x3f\xe5\x61\x3c\x4c\xac\xc2\xa9\xd9\x95\x0a\x99\x42\xb1\x14\x0c\x59\x5a\x81\x61\xbf\x8e\x66\x74\x6a\x49\x3e\xf0\x1c\xb8\x94\x3a\x4d\x25\x83\xb0\x9f\x6d\xdd\xd1\x0e\xa2\x66\x49\x39\x93\x27\x13\xe2\xbd\x05\xf5\x87\xad\x28\x7b\x3a\x77\x39\x9b\x46\xad\x69\x0c\xfc\xa7\xa9\xf4\xff\xbe\x35\x1e\xe0\xc2\x22\xa2\xa8\xc6\x1c\x62\x05\x60\x16\xfc\x90\x71\x5a\x50\x4d\x1a\xba\xed\x8e\x8e\x15\x7d\x74\x4c\x79\x04\xb7\x1b\xc1\xa6\xf4\x5a\xb0\x57\x93\xa7\x6a\xd5\x83\x96\x1d\x56\x4f\xec\x8d\xf9\x5a\xd4\x4f\xca\xfc\xc3\xd9\x75\x7d\x19\x73\xaa\x43\xa0\x3e\xcb\xa6\xc4\x9e\x3f\x08\x59\x6d\x39\x26\x4f\xc3\x16\x8e\xdb\x4d\xf0\x89\x98\x2c\xc9\xd2\xad\x6d\xb0\x85\xf7\xa7\x6e\xd0\x18\x66\xd1\x27\x00\x7b\x38\x94\xac\x18\x00\x0b\x03\x4a\x5e\xc8\x6f\xb8\xe4\x1a\x1e\x12\xd8\x2c\x58\x84\x83\x4e\x00\xd3\xee\xd2\xb5\xe1\x99\xa6\x53\xa7\xe7\x5c\xf1\x92\xfd\x00\xa2\x38\x24\x57\x88\x9f\x00\xeb\xea\x6b\x91\xe1\x91\x60\x02\x3e\xdd\x8d\x70\xbb\x50\xad\xbd\xc7\x70\x13\xe1\x1c\xf2\x3d\x93\x1e\xdc\xcb\x70\xb9\xb6\x4d\xeb\xf3\xcd\x9f\x39\xfd\x51\x78\xd6\xb2\xf7\xdc\xca\xb2\x09\x74\xe3\xd4\xc4\x11\xff\x43\x50\xa3\xec\x1f\xfe\xd1\xe4\xfc\x44\xe8\xaf\x88\xf2\x47\xb1\xb5\x95\x22\xa7\x41\xec\xcf\x9c\x7d\x50\x59\x7c\xde\xd3\xbb\x95\x92\x95\xd1\x87\x95\x51\x3a\xbf\x16\xb0\x62\x3b\x0b\x56\xcf\xb1\x73\xb8\x8a\xc6\xf5\x34\x50\x33\xb6\xf7\xd4\x3c\x8a\x8e\x23\xc3\xcf\x51\xa0\xfc\xb4\x3e\x23\xee\xe5\x09\xa7\x6d\xf7\x64\x76\x37\xe8\x91\x77\x4d\x56\xb3\xd2\x0d\x7a\xde\x68\x16\xd5\xc4\xf3\x28\x7d\xec\x49\x83\x33\x68\x64\x24\x27\xea\x81\x9b\x7b\xb0\x47\x5f\xb9\xb1\xff\x44\x27\xfd\x8d\x19\xd0\xe1\xf9\xdc\xe4\x06\xd1\xf0\xf9\xf1\x18\x2f\x03\xef\x2c\x8b\x9c\x68\xe5\xeb\xfc\xab\xc9\xb2\x6e\xbd\x1b\x1e\x8f\xeb\x94\xd0\x80\x3d\xd8\xa8\x77\x3c\x1b\xbc\xd0\xf1\xea\x30\xce\x45\xb5\xa6\xcf\x5c\xcb\x75\xc3\x43\x36\xc1\x85\xd3\x5d\x66\x01\x50\xc6\x37\x2c\xa1\xf6\x4e\x9e\x0f\xa7\x27\x00\x25\x8b\x96\x99\x21\x00\x4f\x12\xfb\x04\xcb\xbb\x34\xe2\x5b\xd7\x2e\x4e\x41\x3d\xd2\x2b\x15\x6b\xa6\xe7\xfe\xd3\xae\x23\x2a\x71\x02\xfa\x8a\xf1\x5c\xe2\x47\xd7\x15\x9f\x8f\x13\x5a\x97\xd8\x18\x7a\x3d\x97\xb9\xc4\xa1\xd7\xf7\x0e\xbd\x73\xfe\x77\x1f\xd2\xac\x8b\xfe\x16\x60\x89\x22\xdc\x50\x93\xa6\x28\xf7\x08\x25\x60\x92\xbc\x05\xd0\xf5\x3c\xb4\xd2\x93\x43\x3f\x15\xbc\xae\xfc\x87\xc3\xee\xaa\xe5\xf0\xb1\xd6\xeb\x89\xd2\x61\x15\xbf\x88\xea\x50\x94\x5d\xa7\xc8\xde\x0b\x01\x14\xd6\x26\x25\x75\xad\x84\x82\x25\xd9\x89\xda\xb1\xf8\x5a\x1d\x1e\x00\x0f\x05\x56\x3f\xb8\x73\xbe\x2f\x19\x24\x38\x51\x6f\x15\xf6\x60\xb2\x78\xb1\x9e\xa8\x03\x33\xe9\xeb\x78\x3d\xbb\xd0\x7b\xc4\xc8\xb9\x17\x0e\x98\x97\xde\xfe\x25\x23\x31\x44\x3f\x80\xba\xa3\xc3\x79\xd8\x89\xe0\x8c\x2e\xf7\x7e\xe9\x31\x08\x3f\xf2\x84\x4b\x48\x74\x3c\x26\x46\xe1\x0f\xbf\x7f\xc1\xa9\x7a\xed\x5f\x9c\x36\xbd\xe2\xdd\x3b\x7a\xbc\x9c\x68\xbb\x8e\xab\x13\xed\xb8\x81\x7c\x28\x53\x8f\xcf\x48\xa0\x10\x6e\x0c\x9a\x24\x02\x77\xc6\x17\xbc\xb9\x27\xba\x8b\x60\xbe\x81\xab\xf0\xf1\x38\x25\x39\x27\xc1\xb2\x86\x10\x1a\xfb\x17\xfc\xac\xc2\xe3\x0d\x77\x3c\x72\xe2\xca\x69\x79\x18\xee\x2d\xea\xab\x6e\x51\x26\x4d\x63\x82\xd0\x57\x54\xd5\x29\x8b\xdc\x7d\xeb\xf2\xfc\x11\x95\xd4\x9b\xf7\xab\xdb\xcf\xc8\x7d\xeb\x41\x89\xc3\x9c\xc1\x46\x31\x9d\x01\xea\x36\xc5\x63\x6f\x78\x92\x7a\xd7\x63\x4c\xcf\x63\x47\x9b\x62\x21\x97\xcc\xf9\x78\x0c\xe3\x60\x8f\x36\x5c\x88\xf5\xe0\x72\xef\x8a\x93\x78\x9e\x09\xb0\x3d\x23\x2d\xd5\x20\x0b\xa3\x8d\x6d\x80\x9e\x13\x6a\x2a\xfd\x94\x67\xc2\x0d\xae\xed\x4f\xb1\xfe\xc4\x2c\x45\xb7\xf1\x7a\x40\xfc\x25\x03\x78\xe7\xc8\x4d\xe5\x7d\xab\xa2\x59\xbf\xa4\x32\x12\xfa\xe2\x2c\x5f\xc7\x0b\xaf\xf7\x22\xea\xcf\xb9\x68\x5a\x90\x35\xd0\x3d\x9e\x4b\xfd\xb9\xa0\xed\xb0\x39\x07\xaf\xf0\xdb\xee\x5e\x32\x30\xcc\xcc\x8d\x17\xc0\x08\x92\x8b\xd3\x7f\xf6\x90\xbe\xe6\xbd\xbb\xbe\xeb\xa3\xf6\x7f\x5b\x9b\x01\x2a\x02\x1e\xa2\xbd\xc7\x9d\xfb\x5a\x47\x28\x18\xaa\x88\xa0\xd1\x7a\xa2\x6d\x0f\x99\x0f\xdc\x43\x16\x4b\x1a\xa1\xad\x46\x73\x1e\x01\x35\xc9\x85\x58\x32\x67\xac\xd4\x75\x82\x2b\x6d\x91\xc7\x63\x70\xf3\xd9\xad\xbe\x7f\xe7\xb4\xda\xe0\xeb\x0f\xde\x88\x9a\xed\x88\x9c\xd0\xf8\xa8\x85\x5a\x0e\xe4\x42\x2d\x19\x72\x3c\x85\x1f\x45\xa3\xf2\x02\x46\xf1\x1e\x16\x07\xc0\x80\x1d\x97\xa3\x4f\xfe\x65\x23\x4d\xe1\x18\x00\x18\xa6\x4f\x34\xb5\x09\xcc\xa5\x98\xa0\xa8\xe9\x1e\xb8\xd6\xc8\xd5\xa7\x41\x5d\xf6\x1f\x74\x56\x39\xd0\x02\xaa\x08\x3d\xd8\x80\x9f\x74\x56\x81\x4a\x04\x5e\xd5\x00\x97\x99\x2a\x76\xa0\x49\x01\x46\x4f\x09\x63\x6e\x47\xae\x18\x8f\xa6\xc6\x96\x08\x36\xf0\x2b\x74\xb0\xba\xf2\xe4\xe3\x62\x3a\x90\x8b\x22\x50\x98\xf5\xfc\x90\x97\x74\x3d\x2f\xf3\x83\x93\xf3\xc7\xb1\x25\xad\xb1\x4e\xd0\xbe\x29\x93\x88\x1c\x18\x11\x92\x13\xae\x51\x49\x8d\x53\x6e\x66\xf5\x5e\x3e\x57\x97\x76\xa6\xc6\x63\xe2\x39\x4f\x00\x3a\x18\x54\xf3\x7f\xba\xcd\x5f\xb9\xeb\xc1\x6a\x97\xa6\xff\x74\x72\xc8\xd5\x0e\x08\xc0\x41\xae\x55\x73\x55\x90\xbb\x3f\x5c\x31\xe8\x48\xce\xb1\x96\x0f\x24\x03\x5f\x72\xa1\xb4\x7b\xe8\x5a\xbb\x58\x40\x45\x70\x25\x7f\x3a\x0b\xba\xab\x73\x59\x2a\x6e\x9e\xc1\x09\x23\xe4\x75\xd7\x8d\x80\xbb\xd1\x71\x20\x16\x3d\xe9\x9a\x87\x3d\xa6\x3e\x51\x77\x9f\x6c\x4b\x5d\x5b\x6e\x19\x5c\x2a\xda\x7e\x10\x88\x20\xfe\x80\xb4\x60\x88\x25\x22\xb8\x52\x8e\xc7\xd1\x08\x25\xb1\x3e\x47\x03\x16\xd0\xe5\xc1\xb0\x66\x2e\xef\xed\xe8\x0e\x26\xca\xe0\x44\xe8\x93\xe5\xdb\x6a\x14\xc1\x8e\x47\x87\xd6\xed\x38\x0e\x9b\xec\x8a\x8f\xf5\xdd\x1b\xc0\xfd\xf5\xfb\xaf\xed\x8d\xbc\x53\x4a\xfb\x9e\xee\xc4\x20\xb6\x6d\x75\x68\x66\x27\x85\xb6\x43\xfb\xd8\x49\xee\x45\xb0\xbe\x25\x96\x5b\x7d\xb5\x67\x9d\xb0\xd7\xbc\xec\x0b\x7e\x05\x94\x82\x45\x57\x7d\x1f\x7b\x1d\xea\x3d\x51\x51\xb5\x3a\xc3\x9b\x13\xde\xcd\xc3\x58\x20\xe9\xad\x1e\xe3\x81\xd3\x33\xc8\x6e\x4e\xec\x74\xe5\x2f\x5a\xe3\x6b\x03\x71\x27\xf4\x44\x62\x30\x39\x01\x33\xd9\x29\xb8\xc9\x51\x7f\xfe\x24\x0e\x0c\xd4\xca\x5e\xa0\x43\x6d\x19\x8c\x31\xff\x5f\xf2\xde\x75\xbb\x6d\x1c\x5d\x14\xfc\xaf\xa7\x90\x39\x5d\x1a\x62\x0b\x92\x25\x3b\x89\x63\xda\xb0\x26\xd7\xae\x74\xe7\x52\x9d\xa4\xaa\xba\x8e\xa2\x4e\xd1\x24\x64\xa1\x42\x11\xda\x20\xe4\xc4\x6d\x71\xad\xf3\x7f\x5e\x62\x9e\x60\x1e\xe2\x3c\xc5\xfc\x9e\x27\x99\x85\x0f\x17\x02\x94\xe4\xa4\x7a\xd7\x3e\xb3\x66\x4f\x56\x16\x2d\x12\x77\xe0\x03\xf0\xdd\x3f\xe4\xa2\x39\x63\x69\xda\xd6\x99\x0c\xf8\x6d\x65\xab\x15\x66\x02\x1e\xd4\x8b\xb4\xda\x7d\x5d\x98\xc9\xfc\xc5\x51\x93\x91\xb6\xb1\x56\x88\xee\xc4\xfe\x4e\x22\xd0\xc3\x89\xf0\x16\x25\x5d\x12\xed\x20\x12\x72\x37\xf6\x9e\x49\xd4\x18\x99\xea\xb4\xc6\x2a\x74\xbb\x7e\x9b\xf2\x59\xa4\x2b\x63\x2f\xaa\xf0\xbf\x69\x39\x03\x44\xf0\x05\x8f\x85\xb1\x03\x85\x6f\x4d\x48\x31\xda\x98\x83\x1a\x26\x1b\xd8\x96\x76\x9c\x2c\xc6\x52\xd2\x4b\x7e\x4d\xff\xbf\x38\x0f\xd8\xc8\x22\xd9\x3c\x3e\x60\xcd\xb8\x1b\x07\x17\xe0\xe3\x50\x8b\x52\x1d\x7b\x96\x83\x43\x1b\x99\x2d\xf4\xcc\x69\xdd\x20\x1e\x06\x62\x4b\x09\x37\x76\xbc\xbc\xb1\xe3\x85\xf9\xf4\xa3\x0e\x5a\xdb\xdf\xd8\xfc\xea\xf5\xd2\x03\xa7\xc7\x36\xb1\x76\x56\xb6\x40\x8a\xb4\x79\x67\xdd\x9a\x7e\x03\x83\xda\x5d\xc2\x5d\x93\xbf\xcd\xe4\x30\xea\x1a\xf4\x73\xf7\x4f\xda\x7e\x1c\xc2\x2a\x82\xb3\x5d\xab\x42\xd1\xeb\xb1\xc0\xf2\x9f\x3b\xdd\xbf\xb4\x60\x57\xe5\xcf\xc6\x8a\x5d\x6d\x9a\x5f\xb4\x90\xc2\x1a\x9e\x87\x3e\x66\xad\x85\x8e\x31\x7b\x07\x63\x02\x6b\x02\x3f\x9d\xa1\x66\xce\xad\xd4\xe3\x91\x9c\x98\xf0\xf2\x0c\x25\xc2\x72\xcb\x1d\x29\x21\x1a\x52\xc2\xb3\x93\x6f\x0a\x23\x84\x47\x98\x59\x79\x09\x91\x98\xeb\xc8\x0e\x8d\x72\x45\x49\xb4\x9f\x07\xda\x30\x65\x3b\xe0\x00\xd7\x72\xf4\xfb\x3f\x97\xa0\xb3\x58\x82\x73\x07\xa3\x02\x6a\x05\x21\xe0\x40\x76\x87\xe9\xba\xbf\x3a\x98\xd5\x8e\x89\x64\x48\x88\x66\xaf\x98\xf5\x0a\xc5\xbb\xd6\x7d\x2e\xb6\x7e\x91\xb7\x59\x9b\xc6\x37\x78\x79\x07\x4f\x09\x0b\x2c\xc0\x5b\xca\xcd\x8a\x6e\x36\x11\xdc\x8f\x91\x26\xc9\x1f\x1b\x4d\xc5\x64\x97\xe3\xb5\x5b\xdf\xe1\x75\x22\x9d\x5e\xa2\x04\xdf\x0b\xef\x6f\x56\x74\x62\x17\x2d\x91\x08\x37\x8e\x12\x13\x60\x2e\x35\xef\x38\x74\x12\x97\x1c\x8c\xb1\xf6\x84\xae\x33\xea\xdf\x78\xcb\x73\xb6\x4e\xdd\xfa\x5c\x77\x5a\x83\xa6\xc4\x1b\xb6\x02\xdb\x46\x01\x13\xd5\xd8\xb9\xa2\x7d\xb4\x2b\x20\x16\xd0\x3b\x96\xb7\x14\xfb\x35\xa1\xdd\xce\x42\x3d\x67\x23\x21\x55\xe4\x89\x3c\x14\x05\x74\xe6\xe0\x57\x6b\xfb\x31\xa3\xde\x49\xb5\xc9\xf3\x96\x9f\x98\x0b\x9b\x22\x0d\x94\x5b\x9f\x30\x5a\x32\xa3\x32\x19\xa7\x38\x1e\x89\xe4\xc6\xb6\x05\x17\xc1\x9c\xf8\x2c\xcb\x8e\x47\x02\xd0\xc0\x67\x91\x63\x82\x9b\xa0\x0b\xc6\x16\x26\xf0\x0e\xed\xc4\x34\xdf\xee\x49\xab\xb2\x64\x84\xf1\xa4\xa5\xf5\xc7\x0a\x50\x4a\x65\xc4\xf4\x41\xc7\xaf\xbc\x80\xcf\xfa\x58\x23\xa4\x30\xca\x9a\xa0\x35\xa6\x32\xd9\xf0\x86\x2e\x81\x38\x3f\xdc\xfa\xd3\x05\x91\xc3\x6c\xb1\xd9\x88\x5e\xef\x40\x34\x0e\xb5\x36\x1b\x43\xf1\x17\xed\x39\x75\x59\xea\x7e\x9f\x81\x07\x7b\x40\x5a\x1e\x15\x45\x6b\x56\xad\x08\x71\x3a\xdb\x9e\xad\x9d\xe7\xda\xef\x81\x1a\xe3\x6c\xd1\x92\xd0\x10\x22\x52\x75\x17\xbe\xd8\x0e\x22\x84\x69\x8d\x57\xbc\x7a\x2e\xb8\xa6\x6b\xb6\xa1\x39\x60\xab\xe3\x92\xec\xa2\xb4\xed\xe5\x73\xc7\x30\x9c\x82\x02\xf3\x79\xed\x7d\x70\x84\xc8\x2f\x9c\x77\x07\x49\x28\x3e\x18\x75\xe8\x80\x70\xdc\xef\x0b\xd5\x43\x0b\x66\xc0\xb2\x97\xc8\x44\xdf\xfa\xa2\xba\xdc\x66\x93\xea\xed\xd7\xda\x71\xd9\xa2\x63\xa3\x0d\x18\xff\x43\x30\x14\x50\x9c\x5c\x9c\x8f\x1a\x0f\x38\xd7\x4d\xfc\xa2\x6f\x1d\x9f\x37\x33\x06\xbe\x03\xb4\x42\xf6\x8d\x6a\xb9\x1d\x2e\x0c\x48\xd6\x38\xe3\xab\x5d\x58\xa6\x11\x0a\x7e\xab\x44\xa5\x2d\x51\xdb\x2a\x60\x86\xd1\xf0\xe7\x77\xcb\x06\xdf\xf3\x15\x96\xbe\x9c\x50\x86\x72\x43\x95\x48\x8b\x86\x0f\x21\x3d\x21\x1d\xd0\x10\x01\x36\xfd\x94\xae\xe4\x82\x6c\x21\xd9\xf0\x19\x6a\xb2\x68\x76\x6c\x65\x09\x8d\xeb\x75\x98\x1c\x1d\x16\xe2\x29\xcf\xc2\x8b\x6b\xb3\x89\xc1\xd0\xb0\xe3\x61\xe4\x7a\xac\xbb\x05\x3f\x1d\xab\x54\x6a\xe1\x1f\x76\xb3\xe6\x16\x52\x4f\xe1\xf9\x00\x3c\x72\x40\xdc\x55\x7e\xae\x05\xb0\xea\xa7\x3d\xd4\xda\x6b\x82\x05\x98\x8b\xf1\xdc\x92\x28\xfe\xfc\xef\x9e\x76\x6a\x6e\x23\x35\x4e\x30\xf7\xb3\x84\x84\x3f\x49\x08\x3b\x75\xa4\x4f\x34\x57\xb8\x4b\xf3\xe6\xdb\x40\xe6\x3c\x4b\x4a\xdc\x54\x98\xf8\xb5\xd7\x48\x3b\x41\x83\x32\x90\x15\x3a\x6d\xc3\x6b\x24\x07\xa3\xbd\x25\x67\x78\xaf\xe8\xd1\x77\xa5\x29\xec\xc9\x5b\x12\x69\xb5\x91\x9c\x03\xca\xc6\x13\xbb\x71\x40\x09\x8e\x40\x9a\x6f\x52\x33\x74\x56\x14\xc2\x79\x58\x46\x10\x04\x12\xe1\x38\x05\xcb\x48\x90\x57\x34\xbf\x00\xbf\x40\x9d\xd2\xf9\x0c\x83\x49\xa8\x10\x6e\x54\xf2\xea\xba\x8e\x4b\xfc\xcc\x38\x06\x82\xe3\x76\x5d\xaa\x39\x68\x43\x90\x3a\x05\x7c\x69\xfc\x1b\x90\x01\xe9\xd8\x4f\xd8\x9b\x6d\xb4\x43\xe7\xa7\x1d\xc1\x44\x06\x81\x66\x3e\xd1\x7c\x2a\x67\xe0\xf9\x8b\x78\xfa\x92\xaa\x84\x75\x5c\x8b\x41\xfd\xd2\x75\x4c\x77\x16\x7f\x29\x63\xd7\x71\xa3\xab\xae\x03\xe3\x5a\x08\x09\x41\xc4\xdc\x04\x53\xed\xb2\x76\x3b\x76\x8b\xb0\x16\x3e\x2c\x47\x35\xc2\xda\x82\x6c\xa7\x60\x3e\x8c\x92\x40\x76\x91\xcc\x1a\xd0\x43\x3a\x79\x2b\xa3\xfe\x0c\x4c\x74\x10\x93\xbf\xb4\x7b\x37\x3c\x98\x3f\x86\xe2\xbd\x57\x3c\xdf\x2b\x11\x53\xdb\x49\x73\x8a\x72\x26\x7d\xe9\x56\x98\x2d\x5b\xd6\xb8\x61\x5d\xee\x65\x2e\x98\xad\x38\x31\x86\xb0\x71\xb0\x3f\x93\x5f\xb8\x93\xf9\xb9\xd3\xfe\x2e\x35\xce\x77\x74\xa5\xed\x24\xeb\x1a\x61\x5f\x85\x60\x48\x6d\x28\xa2\xe0\xab\x9a\x11\x6d\x16\xc8\x48\xa4\x5e\xba\x1a\x7f\xed\x6a\x14\xbd\xab\xae\x81\xae\x1b\x6a\xd7\x53\x3b\x88\xbc\x48\xf4\x4e\xff\xeb\x86\x75\x59\xd9\xf5\x5b\x40\x41\x73\x2d\x07\x75\x37\x0c\xf5\x7a\x97\x3c\xbe\x64\xf8\x86\xa1\xf3\x51\xaf\x17\xbf\x69\x72\x4f\x6f\xd8\x6c\x57\xa4\xc6\xed\xe1\x53\xa3\x0c\x0a\xd3\x00\x01\xeb\xc4\x15\x58\x79\x55\xa8\xae\x63\xbf\x07\xaa\x4e\x84\xbc\xe0\x46\xce\xee\x2a\x6e\xdc\xac\xc4\x60\x0d\xa7\x1d\xd6\xb5\x77\x9c\xe6\x16\x97\x5b\xdb\xcd\xf9\x43\xb1\x49\xd3\x14\x28\x6a\xe8\xcf\x01\x61\x16\x19\xe4\xbd\x5e\xe5\x1d\x6a\x1d\x85\xb4\x15\xea\x2c\xd5\x39\xb1\x82\x7c\xf3\xb3\xc4\x05\x04\x47\x40\xd6\xa5\x5e\xe0\x14\xf6\x33\xf3\xa2\x08\x64\xcb\xed\x30\x36\xef\x17\xac\xea\x5a\x73\xb7\x2e\xab\xba\x69\x21\x68\x9a\xdf\xa8\x15\x5a\x57\x74\x18\xa1\x0e\x9c\x2c\x44\x82\xe5\x07\xa1\xf8\x51\x4c\x11\x7e\xaf\x1e\xbb\xc3\xf7\x6d\x36\xaf\xc3\xc4\x25\x78\x0f\xf4\xef\x17\x85\x46\x7b\x9d\x7c\xc6\xbc\xf0\xe2\x03\x62\x38\xef\xe8\x7c\xb4\xd9\x48\x85\xfa\x03\x92\xb0\xa3\xe7\x54\x50\xd5\xe3\x92\x77\x55\xfb\xdd\xa8\x1f\xcb\xbe\x2d\xdc\x8f\xd4\x08\xe4\x82\xba\xc1\x0d\x3d\x08\x14\x84\x9e\x1d\xe8\x08\x23\xd5\x59\x80\x7e\x06\xa4\xca\xd7\x54\xb3\xe4\x39\x47\xb7\x82\x30\x73\xe4\xc9\x01\xe1\xce\x99\xb4\xd1\xc7\x95\x33\x2f\x36\x47\xcb\x7c\x4f\x4b\x45\x42\x97\xae\x5f\x0b\x41\x43\x9d\xa7\x7f\x40\xc8\x3a\x8c\xb8\xa8\x45\x31\x27\xdc\x73\x96\x96\x2d\xc0\xb5\x8b\x23\x03\xbc\x64\xa9\x13\x0d\xe6\xcf\x11\x76\x18\xbe\xeb\xeb\x9b\xad\xbe\xb6\xbb\x18\x3a\x0a\x6a\x82\x83\x68\xbb\x9e\x56\x75\xef\x02\x17\x21\x72\x40\x3d\x65\x5e\x1f\xff\xa7\x67\xe5\x59\x49\xac\x02\x1f\x2a\x1b\xed\x51\x2f\xe0\x06\xf3\xfc\x44\x12\xa7\xc4\xb7\xd3\xe9\x79\xa3\xe3\x87\x85\x0e\xf5\xe6\x42\xa7\x95\xc4\xea\x01\x9e\x95\x67\x92\x94\xd8\x6b\xd7\xf7\x08\x52\x36\x50\xc0\x66\x07\x44\x82\xeb\x42\xd1\x27\xc1\xf7\x00\x32\x2c\x08\xf4\xa5\x51\x9f\x70\x5d\x7f\xc5\x42\x97\xd9\x90\xdc\xa1\x49\xce\x5b\x8a\x83\x5b\xaa\x88\x81\x4d\xc0\x16\x5c\x36\x93\x09\x20\x49\x09\xeb\x34\xae\xcf\x01\x2e\xb5\xc9\x80\xd7\xcb\xc6\xeb\xb9\x56\x7e\x3c\x30\x0e\xbc\x51\x20\x4d\x68\x05\x67\x2c\x2d\x89\x6b\x52\x3c\xa5\x2d\x68\x3b\x35\xaa\x86\x72\x40\x52\xd7\x40\xdf\x83\x83\x1f\x5a\xb6\xd5\x23\x2c\x14\x9d\x03\x4a\x2b\xc8\xae\x94\x23\x03\x77\x36\xce\x88\x70\x8d\x6b\xb1\x1a\xa1\xb6\xd9\xc6\x2c\xc2\xc5\x64\xe5\xc4\x92\xb4\x67\xfc\x8c\x93\x58\x10\x8e\xfc\x65\xd6\x8d\xf1\xfd\xf3\xad\xe8\x79\x6f\xbe\x81\x9e\x27\x44\x34\x4d\xa6\xb6\x49\xc7\x7b\x70\xc3\x7d\xc4\x7c\x3f\xf2\x60\x0b\x16\x6a\xb0\x58\x34\x5e\x9b\x89\xe5\xa9\xdd\x3e\x8a\x80\x70\xb5\x3c\x69\x6c\x48\x00\x79\xb1\x71\x74\x0d\x2e\xe3\xbf\x6a\xa2\x65\x7c\x38\x6a\xe2\x45\xbf\xe2\xf9\x7b\xb6\xa4\x4d\x88\xf8\x77\xb4\x80\x0f\x5e\x1e\x2b\x15\x69\x84\x24\x4d\xb0\x67\x4f\x42\x12\xe4\x69\x84\x26\xd8\x10\x40\xa1\x3c\x27\x90\x24\x10\xba\xd9\x78\x1e\x9f\x3f\x05\xfb\x40\x4b\x77\x97\x36\x6e\x0c\xc8\x77\xdf\x8a\x58\x1a\xf1\xee\x97\x26\xa4\x8d\x0e\x29\xe3\x98\x5c\xaf\x19\x70\x62\xbd\x70\x37\x4d\x24\x9b\xfe\x18\xe1\x6d\xcc\xf2\x2b\x25\x0c\xb2\xe9\x1d\x36\x6f\x1d\xc0\x9e\xd1\x46\x0f\x9c\xcd\xe3\x83\x6b\x85\x74\x19\x81\x9a\xd5\xb0\x1d\xae\xf8\x2a\xf6\x7d\x09\xfc\xb6\xc3\xd5\x94\xc1\x39\x3b\x2c\x94\xd5\x11\x4d\xb9\x73\x9c\x92\xbe\xba\xe6\x9e\xa6\x12\x2c\xe6\x62\x66\x97\x88\x94\x9b\x0d\xf3\xd7\x83\xc8\xa1\x96\x72\xf7\x7a\xcd\xaf\x38\xea\x47\x4d\x8a\x0d\xe7\x3e\xd2\x11\xc2\x96\xa0\x0c\xdf\x40\xc5\x45\x3a\x08\xec\x2e\x4d\xdf\x80\x99\xf8\x94\x16\xe9\xcd\x66\x13\xfd\xdb\xce\xea\xc0\xa9\x0c\xdf\xe3\xb3\x78\x12\xbf\xb5\x12\x23\x84\xaf\xb9\xfd\x89\x92\x40\xa2\xd9\xeb\x1d\x34\x69\x66\x26\x27\xcd\x97\x30\xf3\xc5\x18\x42\x24\x82\x20\x33\x48\x18\x1c\x59\xb1\xe6\xc4\x0a\xa9\x60\x15\x82\x76\x8d\x17\xcc\x98\x61\x6f\x36\x1b\xfb\x8b\x6b\x1e\x73\x23\x80\xac\x50\x67\x3b\x88\x11\x58\xb0\x36\xdf\x2a\xf5\x6d\x02\xe1\xa5\x00\x4e\x13\x57\x58\xdf\x81\x06\xbc\x3d\x3d\xf5\x42\x35\xc1\x74\x6f\xe0\x80\x2d\x7a\xbd\xc2\x49\x63\x9f\xaa\xc9\xaa\x68\x81\x4d\x0e\xcc\xc9\xad\xa9\x30\x99\x9a\xca\x66\xb8\xd9\x60\x09\x0b\x25\x93\x66\xd4\xfa\x32\x3f\x63\xc1\xb4\xb1\xe6\x5c\x38\x43\x26\xa9\x5a\xb0\xb9\x8c\x91\x29\x38\x1d\x35\x72\xe1\x30\x43\xed\xd7\x0c\x06\x15\xde\x26\xef\xf7\x59\xb8\xc7\x71\x00\x59\x84\x05\x87\x4d\xda\x4c\x3c\xf3\x8f\x19\x1c\x00\x34\x6b\x9d\x2e\x16\xec\x70\xb5\xd9\x68\x8f\x44\x06\x40\x75\x8c\x37\x0f\x87\x7c\x1a\x9c\x28\xd7\x1c\x22\x3f\xf4\x7a\xc2\x8c\x4c\xfd\xa2\xff\xbe\x4e\x8b\x2a\xa6\x10\xf0\xd1\x06\x32\x73\x15\xbc\xde\xda\xa9\xed\xd8\x2a\xe0\x57\xc1\x60\x3f\x4e\x8e\x62\xd5\x44\x04\xc2\x9e\xea\x96\x66\xe1\x68\xcc\x15\x97\x7e\xf8\x36\xa1\xa8\x5b\x8f\x01\xda\xeb\xc5\xc6\x13\x45\xbb\x39\x72\x5b\x23\x34\xe5\x33\x12\xe4\x57\xb8\x1a\x0f\x22\xbe\xbd\xb0\xe8\xd0\x01\xdd\x8d\x02\xe1\x7d\xd1\xea\x0c\xc3\x77\xcb\xdd\xf9\x44\x2a\x52\xc3\xf7\xbc\x8b\x90\x96\x37\x98\x88\x65\xa2\x89\x58\x26\x27\x96\xa5\x32\x91\x60\x6d\x9d\x78\x1e\x70\x5f\xb2\x1d\x66\x11\x5b\x7a\x73\xee\xa6\xe5\x4e\xc2\xc8\xed\xb9\x6a\x7c\x4f\x8a\xc9\x5b\x1a\x84\xcc\xa5\xab\x27\x7c\x75\xa3\x6d\x0b\x38\x4a\x38\x6a\x64\x8e\xfa\xbe\xd6\xca\x59\x60\x59\x65\xea\x70\x3b\xaa\xaa\xdb\x91\x5d\x53\x3f\xa4\xab\x76\x39\x85\x33\x92\x4e\x0b\x43\x9c\xe9\xf2\x70\x4b\x65\xe6\x54\xe0\x49\x36\x94\x5c\x5f\x50\xda\xf0\xb5\x46\xb8\x41\x1c\x73\x45\x7d\x64\x28\x5e\x93\xdc\xba\x3e\xfe\x87\x5e\xdd\xf8\x43\xde\x47\x7f\x3a\x44\x9a\xa6\x95\x58\xab\x07\xc7\xeb\xe9\x78\x86\xd0\xc5\x60\xdc\xeb\xc5\xd7\x3c\xae\xd0\x34\x9f\x91\x6c\x9a\xcf\xb0\x36\x7f\xec\xaa\xdf\x8a\xce\x73\x81\x79\xdc\x2c\x3f\xf7\x20\x57\x18\x9c\x6d\xa2\xff\xf4\x49\x99\xc8\x73\x2b\x46\x30\xcc\x63\xb0\x71\xcf\x16\xc4\xa7\x13\xff\xc9\xf6\x39\x05\xbe\x23\xca\x98\x36\x33\x71\x6b\x75\xcb\x87\x19\x5f\x31\x60\xfa\xc5\x3a\x13\xe1\x6e\xad\x62\x84\x4c\x32\x39\x18\x35\x0b\xa0\x05\x22\xbc\xa5\x0b\x56\xf5\xfb\xe8\x39\x73\x55\x4f\x2b\xab\x40\x69\xfa\x88\x5b\x89\xa0\x25\x65\xbc\x60\x03\x20\xa8\xea\x6d\xd5\xf6\x68\xde\x8e\x5e\xe2\xd2\x4c\x14\x13\x71\x5e\x78\x91\xf3\xf4\x6f\x32\xa7\xb1\xf7\xb5\x5f\xe2\xc2\xfa\x35\x40\xb8\x50\x57\x00\x64\xb0\x38\x44\x09\xdf\x54\xa2\x33\x53\x97\xe7\xc4\xa5\xa3\xdb\x94\x1c\x8c\x2d\x8b\x2c\xdd\x6c\x62\x17\x13\x6a\xa4\xa3\xc5\x33\xb5\x2e\x1e\x06\xf1\x63\x48\x39\x79\x88\x4b\x49\x1c\xea\x02\x74\xa4\x1f\x68\x2b\x2e\x07\x02\x0d\xc6\x9d\x7f\xda\x6b\xd8\x04\x7e\xc1\xff\x6c\x94\x34\xcc\xa7\x9a\xf1\xf8\xca\x78\x58\x7a\xcc\xc8\x9b\x21\xfd\xb8\x12\x54\x23\x00\xf3\x74\x5d\x48\xd2\x32\xab\x0d\x12\x27\xed\x0f\xb1\xba\xb7\x35\x90\x82\x71\x01\x39\x18\xd7\xf8\x7b\x5d\x6f\x25\xf9\xea\x07\xc1\x57\xe9\x95\xbe\x42\xc2\x8a\x5b\xa9\x93\xad\x2f\x50\x75\x96\x96\x19\x2d\x1e\xaf\x2f\x2f\x0b\x90\x21\x37\x5c\x9a\x9f\x7c\xff\x0f\x96\x23\x9e\xeb\x5e\xfd\xa0\xfb\x48\xf3\xc9\xf6\xa7\x64\x44\x48\xd0\x65\x50\x18\xfc\x53\xd3\xe5\xa0\x9f\x8f\x55\x2b\xf8\x7b\x50\xdd\xf7\x02\x22\xb0\x20\x6c\x92\x4c\xc5\x15\x05\xd1\x4c\x25\x32\xe3\x3d\xc8\x0b\x74\x10\x50\x05\x9f\x17\x2c\x5b\x6c\x53\x05\xe3\x1e\x1d\x5e\xae\xa5\xe4\xe5\x44\x92\x71\x72\xe4\xbf\x1e\x27\xf7\xdc\x2b\x10\x10\x47\x08\xe1\x6b\x40\xf0\xa4\x28\xfe\x4a\x6f\x7a\xbd\xb1\xa5\x2d\x8e\x15\x29\xa1\xda\xfa\xb3\x1a\x50\x30\xe9\x9e\x7e\x73\x9a\xe7\x80\xf3\xbd\x64\x95\x54\x17\x3a\xda\xfe\x04\x14\xff\x81\x17\xeb\xd5\x06\x6a\x87\x5c\x28\x78\x8b\x23\x5e\x46\x7d\xf0\x0c\xee\x99\xea\xd1\xe1\x47\x2d\xb0\x86\x30\xe3\xde\x9b\xba\xea\xce\xe2\x72\x2a\x67\x9b\x0d\xfc\xf1\x04\x05\xc0\x92\xfd\x45\xdd\x19\xcd\x6c\xff\x75\xcb\x0f\x92\xab\x4a\x4d\x82\x7b\x99\x4a\xc7\xb5\x10\x13\x08\x48\x6e\x90\xa2\xd1\xc4\x3a\xa4\x42\xc9\x2f\x2c\x29\x37\x9b\x5f\x18\x4c\xd2\x5f\x60\x92\xe6\xf3\xdd\xb3\xa4\xd9\x9d\xed\x89\xda\xf1\x75\xc7\x5c\xe9\x58\x60\x76\xae\xbc\xb7\xd6\x5c\x75\x9b\xab\xd2\x0c\xf3\x40\x9f\x0a\x67\xcc\x77\xb0\x04\x41\x6f\x40\x6d\x97\x08\x74\xeb\x2c\x24\x19\x1e\x3b\x06\x3c\xfe\x9b\x1a\x4c\xc5\xae\xca\xb4\xd8\x19\x3c\xce\xd6\xaf\xc3\x1f\x5a\xb1\xab\xc7\x8d\x79\x24\x44\x7a\xe3\xdd\xbb\x30\x65\xfa\xd2\x75\xbc\x53\x7c\x84\x76\x85\xe4\x11\x53\x36\x33\xfc\x56\xed\x02\x0c\xd5\xf8\xef\xcc\x78\x5a\xb0\xeb\xf8\xdf\xd8\xae\xee\x8c\xc3\xee\xe8\x35\xc6\xec\x5b\x7b\xd3\xf9\xa7\x9c\x94\xe4\x9f\x72\x98\x2b\xfa\x85\xe6\x4f\xd2\xa2\xb8\x4c\xb3\x4f\x55\xf2\x77\x36\x29\xc9\xdf\x59\x12\xab\xa7\x22\x9b\x2b\x2a\x15\x72\xca\xd7\x32\xa6\x1c\x8f\x3c\x3b\x7d\xad\xa2\x2c\xfc\x58\x38\x86\xbf\x95\xc6\x62\xca\x67\x28\xf4\xbe\xb2\x8b\xeb\x4c\xfd\xe1\xb3\xe0\x4c\xa7\xdc\x09\xcd\xff\xce\x3a\x6e\x5a\xf6\x87\x1f\xa4\x53\x39\xf3\xfd\xb8\x4b\x1e\xea\xb8\x6c\x99\x18\xea\xbd\x7f\x0b\xae\xee\x25\x0e\x4f\xe8\x2d\x75\xcc\xf6\x81\xa8\x8e\xd5\x1a\x61\x40\xb8\x85\x42\x96\xc1\x9a\x10\x22\x4a\xfd\xc4\x62\x09\xf8\x73\xc6\x73\xba\x04\xf7\xbc\x2f\x20\x46\xbb\xe7\x5d\x99\xfb\xa7\xdb\xee\x8d\x39\xcc\xc0\xdc\xe5\x51\x26\xd9\x35\x93\x37\x3a\xaa\x9e\xc7\x9c\x35\xea\x42\x61\xae\xef\xfd\xb3\xe3\xae\x0c\xea\xf4\xd8\x65\x66\x68\x42\x0f\x0b\x50\xa7\x47\x8a\x24\x80\x15\x85\xb7\xa6\xff\x25\x0f\x68\x59\x0d\x95\xc8\x9d\x1c\x4d\x46\xc6\xed\x85\x68\x21\xb2\x75\xba\xa2\xdb\x3f\x33\xa7\xd4\x84\x6a\x1c\x64\x6d\x9d\x31\xe8\xf6\x2f\x7e\x5e\x1d\x7f\x80\x93\xe3\x11\x4e\x39\x79\x33\xfc\x21\xad\x2a\x72\x2b\xf9\x3b\x1d\xce\x60\x4b\xb8\xe1\xb9\x4b\x86\xbc\x51\x5d\xe3\x8a\x93\x5b\x2d\xfc\x4e\xd4\x1d\x5c\x70\x72\x6b\x2d\xff\xfe\x6d\xc9\xd7\x15\x8d\x6a\xbc\xf6\x3e\xf6\xd5\x31\x16\x79\x97\x5a\xc6\x2d\x84\xb0\x5c\xbb\x0c\xc9\xb8\xbf\xff\x5a\x11\x87\xd0\x2d\xa8\x32\xd9\x1d\x65\x0a\x36\xc6\xb3\xde\x6e\x93\x98\x1a\x6f\xd6\x0b\x35\xba\x8c\xaf\x4b\xf9\x84\x17\xeb\x65\xfb\x7a\xd2\xd1\xea\xdc\xad\xa8\x56\x50\x53\x26\x34\x15\x0a\xa9\x9e\xfe\xe3\x43\xf5\x61\x3d\x1a\xa5\xa3\x19\xa0\xd4\x90\x68\xfd\x04\x35\x9b\x19\x9c\x74\xa7\x84\x6d\x36\x23\x1b\x94\xa4\x22\x54\x6b\x12\xbe\x99\xc7\xd1\x07\x19\x19\x25\xfd\xea\x7c\xb4\xd9\x54\x17\x4d\xa8\xe7\xb4\x1f\xcb\x01\x47\x9d\xb4\x4f\xaa\x01\xc7\x69\x9f\x88\x41\xfa\x9d\xc0\x9c\x54\xfd\x71\x5d\xe3\xb9\x1a\xc0\x9c\x95\xf9\xce\xfe\xb7\x29\x1f\xd7\x3c\x6f\x37\x5f\x22\x08\x8d\xcd\x81\xab\x42\x83\x70\x26\x29\xe1\x03\xad\x60\x42\x48\x13\x09\x9e\xf5\x53\xaf\x9b\x65\xdf\x91\x9f\x29\x96\x03\x1d\x23\x8f\xf5\x55\x49\x5c\x12\xde\x1f\x63\xf5\x26\x06\xec\x3b\x81\x2e\x82\x40\xd6\x78\xc5\xc9\x34\x8a\xbc\xeb\x75\xc9\x1d\xcf\x6b\xc5\x9d\xb3\x00\x7a\x86\x56\xc6\x91\xd4\x35\x8f\x57\x1c\xf5\x41\xa8\x67\x2a\x5a\xf1\x29\xf5\x44\x1d\xc0\x1c\x73\xf8\xd0\xb4\x31\x66\x9a\x01\x64\x5f\xf1\x36\xee\x07\x8a\xfa\xb1\x8f\x52\x5d\xf2\x5d\x02\xfc\x80\x8a\x05\xd5\x5c\x31\xf3\x02\x73\x5b\xf6\xea\xc0\x63\x36\xde\x6c\x55\x34\x9d\xb5\x3d\xee\x94\xfd\x3e\x12\xd3\x72\x46\xb4\x62\x2f\x2e\x77\x05\x60\xfc\xa8\xf6\x83\x27\x5b\xe3\xde\xed\x65\xb3\xbf\xb9\xfc\x8d\x66\xd6\x6f\xe4\x44\x90\xe0\x3d\xa6\x28\x89\x3f\x7a\x7b\x88\x50\x2c\x40\xa0\xfd\x91\x83\xb1\xdc\x33\x0e\xe1\x54\x7c\x06\xe4\x33\xbe\x05\x49\x20\xd9\x02\x12\xfd\xb6\x46\x98\xa2\x83\x2d\x91\x69\x89\x8c\x81\xa3\xd0\x5a\x82\x5b\x89\x70\xe8\x91\x20\xf6\xb8\x87\xa0\x7e\xf1\x8e\xf0\x6f\xba\x75\xc7\xae\x96\xfd\x62\x57\xcd\x29\x46\x75\xbd\x9a\xec\x59\x7e\xc6\x4b\x30\x7c\x25\x23\xec\x7d\x7a\x56\xe6\x84\x0e\xaf\x15\x62\x6e\xbd\x0f\x25\x6a\x97\xb4\x2a\x91\xe2\xc6\x87\xa3\x0c\x88\x6e\x89\x6e\x6b\xa3\x69\xf3\x86\x93\xc3\xa9\x3a\x2a\xf2\xf9\x87\xf5\xe8\xfe\xc3\x13\xf5\x3c\x1d\x0d\xd4\x9f\xf9\xbd\x0f\xeb\xd1\x83\x11\xbc\x3c\x98\xcf\x3f\xac\x8f\x47\xf7\xd4\xcb\xf1\xe8\x14\x5e\x52\xfd\x02\x29\xf7\x20\xdb\xbd\xfc\xf2\xfe\x87\xf5\x3d\x0a\x2f\xa7\xf3\x2c\xfb\xb0\x4e\x33\x78\xc9\x4f\xd2\xf9\xec\x10\xbf\x53\xc7\x02\xab\x7e\xe6\x22\x7f\xb2\xf0\x43\x6b\xb9\x6d\x71\xf8\xe1\xb3\x73\xd0\xbf\xd9\xd0\x8b\xe8\x7f\xfc\xf7\x08\x68\x74\xc9\x7f\x5c\xad\xa8\x78\x92\x56\x34\x46\x5a\xab\xe7\x25\xff\x6c\x3f\x6c\x36\x6f\xb8\xf3\xeb\xef\x6d\x97\xf7\xbc\xc5\x82\x3d\x38\x88\xe5\xb0\xe2\x6b\x91\xf9\x27\xcd\x87\xcf\x91\xe6\x32\xbc\x53\x6b\x0c\x57\xb9\xa9\x2c\x81\x2f\x9e\xac\x8a\x07\xa2\x1a\x05\x74\xe0\x6e\x68\x0b\xd8\x24\xea\xf5\x14\x82\xd2\xa8\x75\x3b\xbd\x5e\x55\xf2\x07\x8e\x1f\x99\xb9\x3f\xd6\x53\x7c\xfc\x40\x2d\xc1\xbd\x87\xc7\x03\xf8\x73\x0a\x2b\x31\x86\x95\xb8\xcc\xe1\x09\x4b\x94\x8d\xe1\x79\x04\xcf\x7b\xf0\xbc\x0f\x4f\xb5\x74\x0f\xc6\x7a\xb5\xc6\xa9\x7a\xde\xbb\x84\x97\xfb\x54\x3d\x4f\x46\xea\x99\x3f\x80\x4f\x79\x06\x4f\x0a\x2f\x14\xd6\x99\x42\x79\xfa\x10\x9e\xa9\x4e\x50\xcd\x9e\x8c\x55\x83\x27\xc7\x50\xf1\xc9\x3d\x55\xf1\x49\x0a\xb5\x9c\x5c\xaa\x2a\x4f\x28\xb4\x72\x32\x3f\xfe\xb0\x1e\x3d\x1c\x43\xca\xc3\xf1\x29\x3c\x21\xe5\xe1\x11\xa4\x1c\xdd\xd7\x2f\x27\xf0\x3c\xd5\x2f\xaa\x81\x53\x3d\xfc\xd3\x91\x1a\xd2\xe9\xb1\xea\xd9\xe9\x3d\x18\xf7\xe9\xbd\x87\xf0\x84\x5c\xf7\xf5\xa7\xfb\x6a\xb0\xa7\x0f\x20\xef\x03\x55\xf1\xe9\x43\xd5\xbf\xd3\x4b\x28\x77\xa9\x86\x7a\x9a\xe9\xac\x30\x3b\xa7\x19\x94\xce\x55\xb3\xa7\x14\x8a\x51\x55\x2c\x1d\x8d\xe1\xa9\xbe\xa4\xd0\x68\x7a\x0f\xbe\xdc\x83\x2f\xf7\x4e\xe0\xf9\x10\x9e\x30\x8c\x14\xba\x91\xde\x87\x4c\x30\x99\xe9\x89\xfe\xad\x7a\x94\x42\x2f\xd2\x87\x50\x18\xfa\x92\xea\x5e\xa4\xb0\x3a\x29\xac\x4e\x9a\x41\x7d\xd0\xa3\x14\xfa\x92\x42\x5f\x2e\xa1\x2f\x97\xd0\x8b\xcb\x63\x0a\x4f\xb5\xd6\x97\x7a\x1a\x2e\xef\xdd\x83\xa7\x2a\x76\x79\xff\x01\x3c\x55\x75\x97\x30\x0b\x97\x30\x0b\x97\xd0\xf2\x25\x8c\xff\x32\x1b\xc1\x13\xf2\xc3\xc0\xb3\x63\x58\xe9\xec\xde\x08\x9e\x0f\xf4\xcb\x43\x78\xa6\xfa\x45\x65\xce\x60\x72\x33\x68\x22\x83\xca\x33\xa8\x3c\x83\x01\x65\x00\x7f\x19\x40\x5e\x96\x41\x9e\x0c\xbe\x43\x43\x59\x0e\x65\x73\xf8\x0e\x63\xcb\x60\x6c\x39\x8c\x27\xd7\x23\xc9\x61\x24\x39\x34\x96\xc3\x18\x72\x68\x26\x87\x66\xf2\x2c\x85\xa7\x6a\x26\xcf\x8f\xa0\x40\x0e\x05\xa0\xd6\x1c\x8e\x28\x7a\x3c\x86\xe7\xbd\x01\xfc\x51\x25\xe8\xbd\x13\x78\xb9\xa7\x5a\xa2\x97\x90\x7e\xa9\xd3\x2f\x4f\xe1\x79\x09\x4f\xd5\x59\x9a\x3d\x84\x04\xe8\xf3\x7c\xfc\x10\x9e\x2a\xd3\xfc\xf8\x3e\x3c\x4f\xe0\x09\x5f\x4e\xa0\xcf\xf3\x13\x55\xed\xfc\x21\x00\xe9\xfc\xe1\x3d\x78\x3e\x80\x27\xe4\xd5\x87\xe5\xfc\x54\xbf\x00\x5c\xcf\xa1\xa9\xb9\x9a\xa3\xf1\xe8\x28\x1f\xa8\x3f\xc7\x23\x78\x1e\xe9\x97\x13\x78\x9e\xc2\x33\x85\x67\x0e\x4f\xaa\x9e\xf7\x1f\xc2\x13\x52\xef\x53\x28\xf0\x00\x4a\x43\x87\xc6\xa3\x93\x7b\xea\xa9\x16\x7c\x3c\x7a\x78\x1f\x9e\xd0\xd2\x43\xa8\xe3\x54\x3d\x8f\xef\xcf\x3f\xac\xc7\x27\x63\x68\xee\x64\xac\x0a\x9c\xe8\xb6\x4f\x8e\xe1\xe5\xfe\x11\x3c\x8f\xd5\xf3\x04\x7e\x9f\xc0\xef\xcb\x13\xc8\xa4\x0e\x9c\xf1\x09\x0c\xe0\x24\x3b\x85\x4f\x39\xa4\xe7\x2a\xe1\xe1\x48\xed\x88\xf1\xc3\x11\xbc\xa4\xaa\xa3\xa7\x47\x6a\x1a\xc6\xa7\x47\x47\xf0\x3c\x81\xa7\x1a\xc7\xe9\x31\x7c\x39\x86\x4a\x4e\x8f\x2f\x3f\xac\xc7\xe9\xf8\x04\x9e\x2a\x39\x55\xc0\x36\x4e\xef\xab\x55\x19\xa7\xea\xa4\x1a\xa7\x30\xd8\x54\x01\xc6\x38\x7d\x70\x1f\x12\x1e\x64\xea\x79\x72\x0c\x2f\x27\xfa\x45\x8d\xf0\x12\xce\x8e\xf1\xe5\x48\x75\xee\x12\x86\x76\x79\xfc\x00\x3e\xc1\xbc\xc2\x9e\x1a\x5f\xaa\x3d\x3d\xbe\x7c\x00\xbd\xbe\x84\x81\x5e\x3e\x1c\xc1\x73\xac\x9e\x29\xcc\xcc\x65\x7a\x1f\x9e\x0f\xe1\xa9\x06\x95\x1d\x65\x2a\x21\x3b\x3e\x86\xe7\x03\x78\xaa\xbe\x67\x39\x34\x9b\xe5\x47\xf0\xbc\x07\x2f\x74\x04\xcf\x23\xfd\xf2\x10\x9e\x6a\x82\xf2\x0c\x32\xe7\x54\x95\xcf\xe7\x00\x0e\xb9\xba\x34\x8f\x46\xa3\x0c\x9e\xb9\x7a\x42\x95\x47\xa3\xf9\xe8\xc3\xfa\x28\xa3\x73\xf5\x92\xcd\xc7\x1f\xd6\x47\x39\x85\x94\x5c\xdf\xc0\x47\x29\x5c\xba\x47\xf0\x72\x7a\x0a\xcf\xf4\xc3\x3a\x7d\xf0\x40\x15\x49\x1f\xa8\xc5\x4c\x1f\xa8\x29\x4a\x1f\x9c\xe4\xea\xa9\x6a\x4c\x1f\xa8\xaa\xd2\x87\xea\xb8\x4b\x1f\x8e\x1e\xc0\xf3\x52\x3d\x8f\xee\xc3\x13\xbe\xa8\x03\x33\x7d\x08\xcd\xa5\x0f\xa1\xc0\xe9\x91\x9a\xcc\xf4\x54\x1d\xd4\xe9\x29\xec\xb3\xf4\xf4\x3e\xa4\xc0\x86\x48\x4f\x15\x18\xa6\xa7\x97\xc7\xf0\xd4\x99\xd5\xa6\x4b\xe1\x40\x4e\x53\x38\xe8\xd3\xf4\x88\xaa\xa7\xda\xba\x69\xaa\x00\x22\x4d\xd5\x76\x4b\x53\x35\xa7\x69\x7a\xef\x18\x9e\x50\x40\xdd\x29\x69\x7a\x79\x04\xc5\x2e\xef\xc1\xf3\x04\x9e\x0f\xe1\x09\x15\xa9\x93\x28\x4d\xd5\x4d\x98\x5e\xd2\xfb\xf0\x7c\x08\xcf\xfc\xc3\x3a\x37\x08\xc7\x5c\xcd\xd7\xfc\x72\x4c\x3f\xac\xe7\x1a\x21\x99\xd3\x91\xfa\x44\x8f\xf4\x8b\x1a\xf3\x7c\x7e\x4a\xe1\x39\x9f\x1d\x36\x48\xc3\x93\x00\x4d\x07\xe1\xae\x22\x24\x41\xc0\x7b\x41\x4e\x1e\x3c\xec\xf5\x1e\x39\x6c\xc3\x13\xdf\xf3\xb6\xac\x6c\x8f\xc3\x74\xed\xa3\x4a\x40\x78\xdf\x26\xec\x88\x00\x3b\xa1\xd8\x84\x85\x1a\x66\x55\xf5\x9e\x7e\x91\xa4\x44\xdb\xae\x92\x24\x62\x77\x39\x66\x77\x51\x09\x24\xf2\xf8\xed\x28\xe4\xe2\xc8\x20\xa2\x71\x50\x9d\x04\x7b\xe6\x6d\x91\xca\xdb\x10\xf7\xb1\x1a\x37\xaa\x29\x27\x47\x90\x17\xa3\xb3\xc1\x40\x3a\x06\xa0\xae\xd1\xc8\xfe\xe0\x05\xed\x08\xd4\xfd\x5b\x88\xa6\x41\x43\x61\x97\x50\xfd\x03\x6f\xcf\x27\xb8\xcc\x99\xec\x33\x4a\xdb\x95\xb9\x51\x43\x02\x57\xf5\xcf\xca\x3c\x2e\x37\x1b\xaa\xdd\xe2\x55\x54\x02\xa2\xad\xa3\x84\xb3\x7a\x8f\x33\x9e\x20\x86\xae\x37\xe3\xb6\x01\x85\x72\x97\x43\x35\xf6\xf7\xdc\xac\xb8\x4a\x8e\xfd\xd0\xb3\x16\x13\xff\x33\x6f\x58\xf3\xce\x28\xbd\xf1\x2e\x78\x30\x82\x30\x47\xfc\x9a\xaa\x9e\x46\x0a\x10\xd3\x4c\x82\x3b\x7d\x9b\xa0\x7b\xec\x27\x49\x84\x4b\xcd\x45\x78\xaa\xb9\x08\xa5\x4c\x59\x59\xb5\x98\x12\x6c\x1e\x1f\xfb\x76\x59\xc0\x24\x90\x7e\x17\x8d\x0f\x7e\x55\xb6\x89\xce\x69\xbf\xc4\x12\x75\x72\x0e\xde\x7f\xc7\x3b\xaa\x59\xf0\x4a\x22\x2c\x09\xa1\x8d\xdb\x4d\xad\x50\xd5\x6a\xc4\x43\xd5\x5f\xf3\xc0\x00\xdc\x4d\x73\x9a\x49\x76\x6d\xf7\xce\x19\xd8\xfd\x08\xce\xa5\xfd\xdb\x4a\x47\x94\xec\xfa\xbe\x03\xe6\x5e\xf8\xbb\x3c\x88\x74\xfa\x8f\xcd\x87\x0f\x15\x8a\xfa\xd4\x84\x39\x55\x6f\x1f\x3e\x54\xff\x16\xa1\x1a\x22\x78\x8c\xc7\xbd\x5e\x1c\xc6\x24\x53\x8b\x6e\xaa\xda\xdd\xf1\xed\x05\x0f\xe0\xc8\xd2\x63\x2f\xd5\x92\x89\xa5\x8e\x16\xb4\x8b\x3b\x1d\x84\x0e\x22\x2f\x78\x2c\x91\x0e\xb5\x63\x62\x0c\x37\xda\x60\x9a\x93\x5f\x1a\x2b\xd2\xd2\x8f\x06\x4b\xfd\x63\xc7\xc9\xb3\x4b\x67\x4d\xca\x26\xe5\x74\x3c\xeb\xb3\x24\x82\x98\xdc\xcf\x55\xa7\xd2\x3c\xff\xa6\x5e\x75\x74\x9f\xe0\x74\x14\x48\x73\x25\x6d\x5a\x9f\xc4\xc2\x59\xa5\x4a\x7f\xf1\xff\xb9\xc5\x8d\xa0\x9e\x8e\xf4\x2e\x77\x22\x62\x5a\xce\x7a\xbd\x83\x17\x1c\x8c\x9e\x6c\x18\x5a\x60\x76\xd9\x00\xb4\xbb\xc9\xf8\x1f\xb9\xd1\x0c\x08\x37\xf2\x15\x95\x66\xa9\xaa\xc7\x37\x4f\x5c\x54\x83\xe6\xb4\xfb\x96\xec\xb1\xc7\x71\x8c\x10\xbe\xdb\xba\x62\xd8\xe4\xed\x94\xbd\x1e\x8d\x4b\xc3\xe1\x7c\xcc\x89\xb1\x02\xfe\x9e\xe3\x9f\x38\xfe\x13\x6f\x05\x6a\xd7\x71\x64\x42\x83\x61\x4a\x6c\x2c\x6c\x3b\xe8\x28\x17\xe9\xd5\x55\x7a\x59\xd0\x48\x51\xa9\x9b\x0d\x7c\x78\x2a\xf8\x0a\xde\xeb\xd8\xd3\xe5\xfe\x77\x1e\x68\x8f\x7e\xcf\x2d\xa3\xc3\x0b\x0d\xf4\x7f\xff\xf7\xff\x3d\x42\x1d\x38\xaa\xbd\x88\x33\x12\xef\xbb\x7d\xa2\x2f\x11\x9a\x21\x84\x47\x07\xc4\x3f\xff\x83\xb0\xdb\xbd\x5e\xfc\x3d\x27\xd2\x8f\x17\x7e\x4e\xc6\xa0\xb8\xe5\xe5\xba\x38\xea\xf5\x0e\xf4\xa8\x1f\x22\x54\x6b\x00\xf9\x9e\x4f\xda\x9d\x4b\xbc\x0f\xff\xe3\xff\x30\xa1\xf6\x22\x63\x6e\x9c\x74\x59\x09\x6e\xd7\x2f\x0b\x9e\x7d\x3a\xeb\x9a\xe8\xe3\xe3\xd5\x97\xb3\xae\x09\x68\x6e\xa2\xf0\x0d\xc6\xab\x2f\x91\x17\x55\x78\x5f\xd4\xa5\x28\x60\x49\xfd\xcc\x83\x40\xed\x3f\x59\x83\xee\xee\x4f\xdc\x18\x35\xc1\xd4\xed\x9d\xad\x47\xff\xd7\xff\xf9\x28\x42\x0a\x68\x7e\xe0\x10\x02\x62\x8c\x14\x94\x3d\xe6\x6b\xf0\xa8\xf1\x04\x22\xa2\xbf\x05\x3e\x8e\x0e\x06\xbd\xd9\xa8\x0d\x31\x97\x84\x88\xa1\xf0\x62\xc2\x1b\x80\x28\x75\x3d\x63\x7c\xb4\xbf\x1e\xd7\x43\x52\xea\x2a\x06\xa6\xaa\xf3\x63\x2d\x1d\xe5\xf8\x17\xb5\xf9\x1b\x5b\x0c\x72\x7c\x40\xa2\x0f\xe5\x87\xf2\xd2\x1a\x31\x1c\x7e\x28\x0f\xad\x20\x60\xe2\x33\x74\x42\x7d\x56\xe0\x2e\x3a\xce\xa2\x3c\x27\xe5\x59\xa3\xfc\xd7\x70\x62\x4a\x75\x81\x01\xcf\x97\x81\x13\xa0\x90\xe7\xcb\x9d\xfa\x8d\x34\xa1\xaa\xa8\xd5\xbd\x63\x83\x31\x9a\xb0\xc1\x38\x61\x10\xf2\xc1\xab\x52\x44\xaa\xc2\x03\x92\x4e\x62\x23\xdb\xe0\x9e\xfb\x58\x84\x65\x9f\xa4\xfd\x31\x4a\x5c\xaa\xba\xb9\x58\x7f\xec\x29\x03\xef\xf4\xaf\xe1\xc6\x2f\x3e\x94\x93\x8d\x9a\x85\x1a\xff\x95\x93\xcf\xac\xcc\xf9\xe7\xa1\xef\x3a\x69\xd2\x66\xc9\x35\x55\x04\x2c\xbe\x03\x12\x72\xf8\xb6\x2e\x8d\x83\x71\x1d\xf6\x45\x55\xe6\x14\x69\x3f\x97\x54\xd8\x70\x6d\x4d\x3d\x21\xfe\xe3\x55\x69\x0d\xcd\xe3\x03\x09\xba\x5f\x70\x2b\x5b\x1c\x15\x1d\x10\x8a\x7a\xbd\xd1\x01\x91\xc3\x8c\x2f\x55\xe2\xb3\x32\xff\x81\xb3\x52\x56\x71\x04\xbd\x7d\xcf\x9f\x95\x79\x04\x32\x9c\xbf\x70\x12\xf1\x32\xe3\xab\x9b\x88\x95\xf1\x9f\x79\x73\x16\xa9\x1b\xe0\xcf\xbc\xb5\x85\x4c\x56\x1c\xe9\x1e\x9c\x45\x08\x47\x76\x54\x0d\x96\xfb\x67\x3e\xd4\x19\x11\xfe\x1b\x6f\xc2\xc4\xff\x9d\xe3\xff\xa6\x60\xf2\x13\xbd\x51\x47\x6e\x45\x6e\x8f\x93\xe8\x59\x09\xb8\xcf\xc3\x24\x7a\x9c\x66\x9f\xaa\x55\x9a\xd1\x08\x9f\x26\xd1\xfb\xf4\x32\xc2\xe3\x26\xc3\xf8\x41\x12\xbd\x5b\xb0\xb9\x8c\xf0\xf8\x24\x89\x9e\x48\x51\x44\x78\xfc\x30\x89\x1e\x15\xea\xd3\x69\x12\xfd\x90\xae\x2b\x1a\xe1\xa3\x51\x12\x3d\x49\x57\xd5\x4b\x9e\x7d\x8a\xf0\xd1\x49\x12\x3d\xab\xb2\x08\x1f\x1f\x25\xd1\x3b\x5d\xfb\xf1\xb1\xca\x7c\x45\x7f\x5c\x45\xf8\xf8\x9e\xfe\xfd\x94\x7f\x2e\x23\x7c\x7c\x5f\xb5\x97\x47\xf8\xf8\x41\x12\x7d\xcf\x97\x2a\xf3\x49\x12\xbd\xa4\xaa\xd9\xe3\x87\x49\x04\x45\x4e\x93\xe8\xad\xda\x6a\x11\xbe\x37\x4a\x22\x5d\xf2\x9e\xaa\x47\xb0\x52\xbe\xcb\x84\x7a\xbd\x9f\x44\x2f\xc0\xa6\x28\xc2\xf7\x1e\x24\xd1\x53\xed\xf3\x1d\xdf\x3f\x4d\xa2\xb3\x08\x3f\x18\x27\x11\x89\xf0\xe9\x38\x89\x5e\xf1\x3c\xc2\xa7\x47\xf6\xc7\xb1\xf9\x31\x1e\x3d\x48\xa2\x7f\x53\x7f\x4f\x20\xeb\x78\x74\x9a\x44\x83\x08\x8f\xc7\xa3\x24\x1a\xaa\xbf\xe3\x24\x3a\x8c\xf0\x58\x0d\xd0\xd6\x3e\x3e\x39\xd6\x99\x1e\x3e\x80\x66\xc6\x0f\x4d\xe1\x87\x0f\x93\x08\xab\xbf\xa6\x92\x53\x53\xc9\xa9\xa9\x44\xb5\xff\x6b\x84\x8f\xd4\x34\x4e\x23\x7c\xa4\xe6\xf0\xc3\x07\xf5\x63\x9c\x44\x33\xf5\xf7\x28\x89\xfe\xd7\x08\x3f\x38\x3e\x52\xf3\xa8\x66\x41\xfd\x3c\xb6\xa3\x57\x2f\xf7\xec\x3c\xa9\x97\xfb\x6e\x8a\x1e\x1c\x1f\x9d\x1c\x35\x5d\x54\xaf\xc7\x76\x6e\xd5\x8b\x9d\x71\xf5\xfb\x41\xb3\x2e\xea\xf5\xc4\x5f\x9a\x07\xc7\xc7\xa3\x23\x37\xa9\x1e\x02\x42\xd3\x60\x6b\x17\xf4\x9a\x16\xdf\x1d\x4d\xe8\x50\xf2\x44\xdb\x93\x7a\x72\xe6\x7d\x79\x41\x17\x4e\x15\xf1\xe4\xbe\xa9\x27\x34\x60\xbe\x37\xcd\x09\x4d\x63\x39\x1d\xcd\x50\xe2\x49\x4f\xcb\xfd\xd9\x65\x1a\x83\x02\x27\x4a\x02\xab\x63\x4f\xf2\x9a\xfa\x28\xd9\x33\xad\xe3\x94\x01\x3d\x40\xfe\x59\x2a\x04\xb1\x3c\x00\x1f\xc4\x92\xbc\x67\x71\x89\x6c\xb0\x95\x47\xea\x05\x73\xc2\x26\x4c\x23\x89\x7a\x38\x65\x1a\x97\x28\x11\xf0\x1c\x39\x41\x86\x3a\x79\xb9\x47\xf4\xf2\xa0\x51\xdd\x05\x13\xff\xa4\x6c\xfa\x20\xcc\x27\xd3\x98\x76\x97\xb2\xd9\x8c\x08\x69\x9a\x0c\x7d\xdc\x83\x33\x8e\xd2\x44\xc5\x30\x62\xcd\x0f\xef\x0e\x91\x3a\xdc\x75\x03\x8d\x89\x8f\x1c\x66\x8b\x73\xc2\xf5\x0f\xaf\xa7\x3a\x1d\xa7\x93\x51\xc2\xbd\xc3\xbc\x51\x51\x48\x5b\x0a\x33\xae\x2f\x6e\xd6\x41\xbb\x5c\x1c\x90\xb2\xd7\x93\xe7\x5e\xd1\xca\x0c\xfb\xef\x3c\xd4\x52\x10\x5f\x0b\x5a\x01\xce\xa9\xc1\xaf\x83\xec\xf5\xc0\x8b\x43\x23\x75\x6c\x12\x09\x91\xda\xc7\x03\x21\xd2\xc3\x29\x84\x13\xbf\xaa\xe6\x99\xee\x2b\x06\xad\x55\x3d\x85\x13\x53\xfe\x00\xdc\x44\xf4\x7a\xf1\xdf\x39\xf0\x15\x50\xb2\x23\xa1\x44\x58\xa0\x8e\x20\x65\xbd\x63\x6e\x8a\x34\xf4\x76\x5d\x3a\x1b\xfe\xbe\x50\x94\x1f\x18\x1f\x19\x92\xee\x62\xd4\xeb\x3d\xe1\xc6\x48\xc3\xde\xc7\x12\xa1\x5d\xd8\xf7\x3a\x6d\xd3\xe9\x1a\xcc\x7d\x07\x3a\xdd\xac\xc9\xe4\x89\xab\xab\x54\xfb\x74\x4c\x09\x9b\xf2\x19\xae\x88\xe9\x63\xea\x40\x76\x20\x12\x55\xc6\x04\xa8\xaa\x2e\x52\x63\x1d\x5e\x9d\xa7\x4d\xd4\xab\x2e\xb8\x57\xa8\x08\x49\x8d\x9f\x0d\xf8\xe9\x25\xab\x66\x2a\x44\x08\x9f\x54\x89\xb8\x18\x11\x12\x43\x8b\x7d\x22\x66\xc8\x35\xa5\x4a\x18\xd7\x7b\xd0\x77\x2f\x4f\xa0\x6f\x5c\x11\xa8\xa2\xe9\x23\x74\x5a\x95\xc6\x83\xb1\x5a\x18\xf3\x0e\xfa\xb3\xea\x83\x1f\xfc\x6f\x6b\xae\xd4\xe4\xbb\x18\x76\x67\x6c\xe7\xc4\x33\x84\xce\x10\xeb\x3b\x2f\x4b\x5d\x76\x3e\xda\x6c\xd8\x45\x70\x6a\x4c\x40\x29\x99\xd5\xbe\xf7\xb7\x86\xf6\x1e\x9d\xd1\xf3\xf1\xe8\x8c\xf6\xfb\xe8\xbf\xf1\x29\xed\xdf\x7b\x38\x23\xf0\xe3\xf4\xc1\x8c\x68\x65\x8b\xd8\x68\xec\x53\xf2\xe0\xfe\x19\x3d\x27\xa7\x4d\x76\x9b\x05\xc6\xf4\xc4\x30\xcf\x9a\xfc\x63\x95\x7d\x7c\xd4\xd4\x3e\x1e\x8f\x4d\xf5\x70\xe6\xcf\x48\xf4\x3c\xea\xd3\x1a\xc5\xfa\x80\xca\x53\xb2\xe5\x54\x03\xe4\x66\x7b\xe5\x94\xa3\x13\xfd\xf2\x30\xcd\x66\x87\x58\x92\xc3\x69\x25\x3f\xbf\x9e\x1d\x62\x41\x0e\xa7\x2f\xdf\x8a\xd9\x21\x2e\xd5\xaf\xcb\x71\x39\x3b\xc4\x8c\x1c\x4e\xd5\x0f\x2f\x6c\x78\x10\xbd\x01\x16\xce\x86\xc6\x81\xcd\x69\x1c\x01\x48\x4e\x44\xdd\x16\xf0\xa6\x46\xe9\x5c\xd3\xa3\xa9\xe7\x0b\xcb\xe9\xf6\xe2\x82\x58\xd5\x6a\xbc\x56\x78\x71\x46\x46\x67\xd9\x79\x71\xd6\xef\x67\x68\x6d\x74\x09\x48\x5c\x91\xd4\x67\x3d\x66\x08\x9d\x93\xa3\x7b\x27\x93\xe8\xd2\xfe\x93\x95\xfc\x5c\x5d\x06\xff\xaa\x4a\x0d\xf5\xf5\x77\xdf\x7d\xf7\x1a\xfe\xe1\xd7\xf8\xf5\xd8\xfd\xd3\xdf\x5e\xbf\xdc\xfb\xef\x5b\xd2\x4d\x43\x97\x7b\xff\x61\xd5\x3c\xb4\xaf\xeb\xfb\xee\xbb\xf1\x18\x7e\x8e\x5f\xde\x55\xfd\x1d\xcd\xea\xf4\xc8\x42\x78\x85\x92\xf1\xbd\xa3\x7b\xe7\xa4\x52\x5b\x9b\x8c\xef\x1f\xdd\x9b\x44\x6f\xa3\x64\x7c\xff\xf8\x81\xfb\x78\x72\x72\x3c\x89\x84\xf7\x0f\x8b\xd7\xaf\x97\xf0\x4f\xfc\x2b\xff\x96\xc1\x3f\xf3\xb1\x74\xff\xbe\x2b\x4b\x95\xe9\x5f\xaa\xfa\x3f\xd6\x15\xf8\x07\x23\x6b\x26\x68\xa0\xa6\x02\x25\xe3\x93\x13\x37\x4b\x47\x47\x47\xa3\x49\x24\xa2\xe4\xe1\xf8\xf4\xc8\x7e\x7c\x78\x34\x3a\x9e\x44\x9f\xa3\xe4\xe1\xd1\xe8\x1e\x21\xd5\x24\xba\x8c\x92\xe8\x65\x84\x3a\x19\x69\xc2\x59\xe6\x24\x7a\x19\x39\x08\xbd\x8d\x96\x11\x21\xf1\x35\x59\x4f\xb3\x19\x9a\xa8\x27\xc9\x93\x9c\x5c\xd7\x7e\x99\x45\xab\xcc\xd8\x2b\xd3\xeb\x45\x8a\x74\x5b\xe8\xb2\x51\x19\x25\x42\x6f\x97\x6b\x1d\x83\xf1\x1a\x43\x3a\x84\x50\x84\x1c\x6f\x21\xb0\x3e\x17\x71\x46\xc6\x38\x27\xeb\xe9\x68\xa6\xaa\x1e\x8c\x4d\xe5\xfd\xb0\x72\xd5\x56\x6e\xfe\xae\xa7\x59\x7f\x3c\x33\x2d\x8d\x23\x85\xc0\x1e\x90\xeb\xcd\x26\x3f\x30\x49\x9b\x4d\x34\x8e\x0e\x20\x7f\xa9\xfe\x6e\x36\xba\xd1\x1c\x61\x35\x26\xdd\x6a\xb3\x3f\xd5\xee\x8e\xb0\xd7\x1e\xd2\x55\xbf\x8e\x1c\xa7\x3d\xfa\x4e\x75\xbe\x39\x4f\xe7\x24\xeb\x8f\xcf\xe6\xe7\x45\xaf\x07\x49\xeb\xe9\x7c\x76\xd6\xef\xcf\xd1\x99\xcd\xb1\x22\x59\xaf\x17\x1d\xe8\xee\x0e\x54\x9f\x74\xee\xb1\xc9\x3d\x81\x9e\xbf\x8e\xf0\x92\x64\x67\xcb\xf3\xf9\x59\xbf\xbf\x44\xeb\xe9\x72\x46\x56\x9d\x8c\xcc\x07\xe3\xda\xf6\x13\xb7\xe6\xfd\x1a\x42\x55\xab\x2e\x76\xa2\x97\x6a\xce\x4d\xad\xd7\x66\x46\x5e\x6e\xcd\x3d\xda\x1a\x32\x58\xc9\xeb\x50\xeb\x30\x60\x18\x98\x37\x28\x97\x38\x9f\x21\x3d\x2e\x50\x66\x22\xd0\x60\x9c\x4d\xf4\x98\x00\xac\xf0\xa5\xf9\x3a\x3f\x2f\x26\xaa\x80\x06\x36\x55\xe1\x8a\x5c\x6d\x36\x97\x13\xd5\xa3\xe8\xed\x1d\x23\x05\x57\x09\xf8\x23\x68\x3e\x7b\x1d\x05\xc5\xdf\xa0\x97\x2a\xe3\x67\x92\x41\xae\x7e\x3f\x53\xb9\x7a\x3d\x3f\x0b\x0c\xee\xec\x63\xe3\xda\x99\xc7\x23\xfc\x19\x67\xbe\x85\xda\x33\x92\xe1\x2f\xe4\xa3\x75\x11\x14\xd4\x15\xbd\x8c\x00\x88\x66\xba\x22\x95\xb6\x24\xcf\xce\x96\xe7\x19\xf4\x86\xd9\xa6\x96\xaa\x37\xcf\xce\x97\xbd\xde\x47\xab\x90\xfc\x05\x8f\xb0\x6e\x71\x8c\x9f\xe1\xa5\x41\xc5\xdf\x90\xa5\x69\x61\xa9\x6a\x01\xfc\xd0\x55\x01\x33\x71\xb6\xa3\x86\x23\xfc\x46\xd5\x80\x9f\x91\x25\xf4\xbb\xdf\x5f\x76\x9e\xa9\xd2\x7b\x5a\x53\xe3\x33\xb7\xd6\x98\x90\x8f\x0e\xe7\xed\xf5\xe2\x1b\x92\x3a\xbb\x9c\x0f\x55\x5f\xeb\x0e\x42\x0e\xb8\xf7\x6e\x1a\x1e\x32\xfe\x38\x5c\x97\xda\x1e\xce\xce\xdc\x08\x7b\xe9\x08\x21\x3c\x86\x88\x96\x1f\xd1\xae\xea\x3f\x54\x7d\x6d\xed\x13\xeb\x2c\x92\x0f\x5a\xd5\x07\xab\x52\x0c\xfc\xc4\x42\xd5\x7e\x14\xf6\xbd\xdd\x9f\x31\x86\x54\xc9\xed\x5f\x84\x70\x93\xff\x20\xec\x59\xd0\x5a\x93\x0b\x17\xaa\x29\xfc\xb1\xae\x1b\x56\xd9\x9b\xe1\x35\x15\x15\xe3\x25\x89\xee\x0f\xc7\xf7\x87\x47\x11\x7e\x53\x23\x84\x7d\xa6\x4c\xc4\x41\xbd\xcd\x73\x45\xff\x65\xc5\x85\xac\x7a\xbd\xad\x94\x25\xcf\xd7\x05\x9d\xd0\x58\xd0\x7f\x5f\x33\x41\xe3\x68\x38\x3c\x1c\x0e\x0f\x0b\x76\x79\xd8\x28\x13\x47\x08\x25\x3b\x18\x24\x39\x9d\x03\xfd\xa3\xff\x0e\xd3\x65\x3e\xd1\x3f\xe3\xe9\xee\x6a\x66\x98\xa2\x84\xc6\x0d\xdf\x19\xd5\x61\xec\x8d\x68\x5d\xd1\x6e\x25\x05\xcb\x64\x64\x98\x96\x1e\x47\x7b\x50\xb0\x52\x9a\x88\xce\x55\xd4\xe0\x4b\xc2\x68\xfc\x3a\xb1\x0e\xf8\x23\x73\x6f\xa1\x24\xd0\xd7\x29\x8e\xa5\xd6\x64\xd5\xf8\x7d\xe3\x14\x6d\x87\xb0\xad\x15\x72\x5a\xf3\xb9\x1b\xd2\x37\x96\x86\x4c\xf1\x85\x4b\x8e\x42\xe7\xf3\x86\xdb\x8f\x23\xd0\xf2\x05\xad\x5e\xcc\x50\xa7\x34\xf2\x56\xc9\x57\x3e\xe9\x29\x87\x19\x30\x4a\x7f\x19\x94\x01\x2b\x7a\x70\x1f\xf5\xa3\xd5\x97\x08\xdb\x72\xc0\x81\xb5\xb9\xff\xde\xbf\x0f\xa9\x9e\x2c\xcf\x09\x5a\xb6\x26\x52\x72\x5e\x48\xb6\x52\x55\xf9\xa2\x4e\x31\xcc\x0a\x5e\x52\x60\x0a\x1f\x8c\x10\xc2\xa1\xe0\xc1\xcf\x5a\x82\x43\x91\x72\xdf\xd8\xb0\x9a\x16\xe3\x05\xcb\x76\x97\xaf\xd2\x8c\xc9\x1b\x70\x54\x15\x7c\x21\x63\x84\xcb\x5a\xad\x88\x37\xaf\xa9\xc1\xb8\x65\x47\x4f\x22\x33\x2d\xf0\xb5\x8c\x70\x0a\x01\xed\xe3\x58\x36\xbe\x03\xf4\xe2\x3b\xa7\x8f\xad\x26\xb5\xf1\x7a\xab\xd9\x91\x6f\x6f\xe0\x93\x23\x2a\x77\x8d\xf0\x83\x11\x44\xc9\xd4\x7e\x88\x8d\xd3\xf2\x8a\xca\x17\xa5\xa4\xe2\x3a\x2d\x82\x22\x6c\x1e\x73\xd4\x90\x31\xec\xec\x8c\x92\x40\xec\x0a\x06\x2b\xbd\xde\x78\x4c\x08\xf5\x65\x96\x2a\x9b\x96\x59\x52\x12\x0a\x7a\x6c\xa8\x64\x6d\x49\x7a\x9b\xc6\xbe\x27\x27\xe7\xb4\xb5\x0b\x3a\xde\xae\x4f\x95\xea\xf8\xbd\x11\x84\xc9\xe2\x65\x7b\xd6\x3c\x8e\x4d\x40\x68\x68\x7b\x56\xe7\xb8\xc0\x18\x9f\x3b\x6a\x43\x4f\x91\xe7\x5a\x60\x91\x56\x7f\x06\xb7\xb4\x36\x34\x14\x2f\xc1\xe7\xe5\x9b\x6b\xea\x69\x56\xca\x56\x5c\xdf\xc6\x66\xce\x9a\x63\x49\xcf\x1c\x0b\xc6\x79\xf8\xe1\x72\xd7\xa6\x1f\x18\xc5\x4c\xe1\x05\xfd\xb6\xd3\xd3\x58\x47\x8a\x7d\xc2\x06\xcc\x49\xcc\x60\xbb\xf4\x99\x91\x57\x1c\x1e\xe1\x94\x80\xe7\xb0\x55\x9f\x0d\x2f\xb9\x94\x7c\xa9\x3e\x16\x20\x30\x72\x4e\x38\x63\x3a\xcc\x38\x17\x79\xa5\x88\xc9\xf8\x56\x55\x91\x70\x2c\xf9\x2a\x49\x6b\x1c\xe9\x9d\x17\x21\x14\x10\x53\x0d\xff\xc5\x60\x41\x39\x29\xa6\xd9\x6c\xf8\xf1\x63\x5a\x96\x5c\x82\xe5\x5c\x27\xef\xf5\x0c\xbd\x95\xa3\x7a\xed\xec\xef\xf7\xb9\x4a\xdb\x3d\x65\x78\x4b\xd5\xc0\xf2\xe0\x9f\x8b\xf4\x4a\x33\xd3\x8d\x73\x7f\xba\xc3\xab\x3f\x9d\xf2\x59\x27\xd4\xbf\xa8\x14\xdd\x58\x43\x90\x47\xac\x8e\xe8\x35\x44\xe5\x30\x61\x3d\x61\xa5\x3f\xa7\x4c\xb2\xf2\xea\x39\x17\x64\x14\x04\x72\x6e\x04\xb2\x10\x9f\x79\xa8\x16\xaf\x23\x1a\x50\x01\x6b\x38\x05\xab\xfa\x35\x96\xed\x20\x9c\xd6\xac\x3a\x08\x44\x65\xbe\x4d\xcb\x99\xf5\x2f\xdb\x69\xe5\xf3\xbb\x91\x82\x9d\x17\x78\x81\xd2\x43\xbc\xf3\x10\xc7\x15\x49\xed\xe5\x9a\xde\x75\x5c\xea\x7b\x67\x10\xf5\x05\x66\xea\xd8\x51\xf4\xf1\x1d\x4a\x30\x61\x2b\x08\x7d\x43\xd5\xcb\xb5\x3a\x8f\x0b\x1a\x81\xcc\x12\x9c\x06\xf2\x32\xae\xec\xee\xbd\xa6\xa2\xe5\x58\x5a\x6b\x86\x54\xda\x89\xb2\xc7\x1c\xf4\x4d\x7d\x2a\x7a\x4d\x05\x93\x37\x1d\xad\x9b\x1e\x51\x7d\xa1\x1b\x7f\x94\x77\xdf\x6f\x4e\x02\x79\x57\xdf\x69\x55\xa5\x57\x74\x00\xc6\x72\xdf\xa4\x15\x44\x87\xa6\x0c\x0a\xe4\x97\x85\xef\x8c\xb4\x81\x1e\x7b\x0e\xe1\x92\x08\xfb\x7b\xb3\x11\xd8\xec\xf4\x47\x6e\x37\x55\x6a\x5b\x5c\xa9\x7b\xb2\x58\x81\x47\xd8\x1f\x78\xa5\xd0\x42\x84\x23\x55\x4f\x84\x3a\x6a\xd9\xc4\x30\xad\x6e\xca\x6c\xb3\x61\xfa\xc7\xc4\xbf\xf5\x3d\x46\x97\xd7\x03\xcc\xc1\xab\x42\x03\xf3\xe1\xfd\xc4\xc9\x60\x8c\x41\x5e\x1c\xbb\x38\xc7\x29\xaa\xa5\x5a\x3b\xef\x03\x16\x31\x74\x0f\x6c\x59\xe3\xc0\xf9\x80\x6a\x76\xab\x02\xec\xb7\xa8\x2d\x50\xca\x5e\x4f\xf8\x2e\x06\x29\xb8\x93\x2c\x11\x5e\x03\xca\xa2\x0e\xfd\x52\xed\x51\xd8\xb8\x25\x4a\xd4\x67\x16\xb6\xaa\xd2\x7d\x2b\xb9\x35\x44\x3d\xbf\xe5\x96\x3d\x66\xac\xfa\xe0\x04\xf4\x66\x60\x4d\x0a\xb7\x0e\x19\xd9\x2d\x64\x05\xbf\xc4\x5b\xc6\x20\x8e\xb5\x6d\xbd\x39\x5a\x43\xe9\xb3\x58\x4e\xd9\x0c\x6c\x1e\x98\x6f\x59\x5a\x7a\xde\x82\x63\xa1\x88\xe0\xd1\x59\x7e\x9e\x35\x75\xe6\xba\xce\x05\xd8\xe1\xab\xfb\x62\xe1\x93\xba\x70\x3d\xad\x48\xe1\x1f\x39\x5f\x3f\x1e\x97\x64\x74\xb6\x3c\x5f\x34\x8d\x2c\x2d\xe9\xba\x98\x2e\x67\xf8\x8a\x5c\x37\xfb\xe8\x6a\xb3\x89\xaf\xdc\x3e\xc2\x8c\x5c\xe1\xb9\x7d\x25\x24\x2e\xc9\x1c\x4d\xca\x84\xe1\xf5\x70\xce\xc5\x32\xf5\x20\x54\x51\x1b\x64\xfb\x73\x7c\x8d\x10\x0e\x3a\xbc\x6a\x1d\xc7\x2a\xc3\x35\xf0\xcd\x0b\x7b\xec\x19\xaf\x5e\xd6\xcb\x76\x7c\xad\x39\xb8\x2a\x17\xbe\x75\xdb\x35\xd9\x79\xd4\x0c\xa2\xfe\x15\xf6\x2f\xa2\xe4\xba\x46\xa8\x2e\xc2\x63\xba\xa2\x52\xbf\xbc\x82\xd3\x29\xce\xb1\xc4\x69\xbc\xc2\x73\xbc\x70\xce\x5f\xb0\x03\x8b\xa1\xc1\x26\x2b\x84\xea\x7a\x3d\xe4\xa5\xf6\x27\xfe\x92\x95\x0a\x84\xd5\x3d\xd7\xfa\x14\x0b\x9c\x61\x1f\x1b\xcf\x82\x53\xab\xb9\x3d\x64\xaf\x17\x87\x26\x6c\x16\x17\x51\xc8\x9c\x45\x4b\xf6\x20\x71\x85\x42\xf8\x55\x3e\xdb\xcd\x5c\xbb\xcf\xb9\xaf\xb0\xba\x1a\xac\xce\x59\x69\x1c\xe0\xc5\xfa\x9c\xc0\x07\xe3\x70\x73\x62\xcd\x53\x4d\xc1\xb9\x3d\x1d\xbe\x28\x99\xea\x12\x57\xc0\x09\xd1\x82\xc4\x8e\xd3\x0a\x5e\xde\x94\x4f\x60\x3b\xf7\x7a\x22\xdc\xdd\x19\xe0\xcd\xf3\x79\x0c\x47\x18\xb8\xe8\xa3\xc2\x49\xbe\x83\xf3\x3e\xac\xbc\x41\xb0\x10\x0e\xe6\x24\xc8\xe6\xa6\xc7\x38\xa9\xf0\x13\x91\xef\x4b\xa2\xd2\x67\xa8\x1d\xbe\x0e\x32\x50\x45\x0a\x93\x39\x18\x9b\x9d\x57\xf9\x3b\xaf\x9a\xe6\x33\x6d\xc2\xbe\x06\x7f\x11\x7a\x23\xfa\xf5\x83\xdd\x14\x8b\x05\x8e\xe7\xa4\x44\xde\x61\xf5\xdc\xcc\xe8\xe4\x36\x3c\xb5\x93\x79\x9d\xc4\xf3\x5e\xef\x60\x74\x40\xc8\x7c\xb3\x89\xe7\x60\x3f\x35\x47\x78\x6d\xa2\x31\x2d\xf6\x4f\x6a\x19\xcc\xe9\xe8\xc0\xcb\x6b\xe1\xd1\xdc\xa2\x5f\x9f\xe9\x45\x38\xbd\x45\x2c\x34\xba\x3f\x07\x47\xd6\x06\x52\x20\xc0\x4c\x05\xb3\xb5\xa2\x42\xed\xe4\x97\x00\x33\x71\xdb\x7a\xb7\x99\x91\x5e\x4f\x07\x5a\x45\x26\xda\xc1\x7f\x41\x4a\x5d\x91\xd8\x57\xac\x92\x54\x98\xcb\xd7\xec\xa4\xe8\xb7\x8a\x97\x3b\xc3\x28\x4c\x67\x1d\x95\x06\xe0\xba\x4a\x45\x45\xc1\x7d\xa4\x4f\x82\x37\xc1\x1d\x86\x05\xcf\x3a\xc2\x77\xf7\xa2\xef\x76\xa6\x95\xba\x3e\x82\x52\xd5\x18\xdb\xd7\x0c\x2c\x3e\xc1\x5d\x99\xcd\x57\xa4\x7e\x36\x78\xb3\xb9\x0c\x2a\x92\xc8\x1a\xd5\xa0\x3a\x1b\x76\x4b\xd1\x80\x5a\x63\xa5\x74\x0a\x2b\x5d\xf1\xff\xc3\x95\xbc\x49\x97\xc5\xbe\x95\xd4\xd3\xa6\x72\x0c\x0b\x9e\xe6\xcd\x9c\x31\x7b\xfd\xeb\x48\x00\xbb\x16\xb1\x34\x5e\x53\x86\x5b\xcb\xb6\x95\x62\x97\x8a\x59\xfc\xb1\x46\xff\x93\x57\x04\x47\xd9\x6f\x55\xf4\x47\xad\x4b\x30\x99\xa0\x51\x96\x2e\x73\x08\xac\x15\xac\x17\x8e\x56\x45\xca\xca\x28\x5c\x37\x0c\x11\xbd\x97\x3c\xa7\x3f\xbe\x7d\x09\x5a\xae\xe6\x37\x51\xcd\xa9\xdf\x87\xdf\xbd\x3e\xfc\xee\xf5\x50\x75\xd8\x20\xfb\xb7\x9e\xbe\x49\xc0\xe5\xd2\x85\x2b\xf0\x32\x4d\x15\xe2\x41\xcb\x8c\x51\x90\x53\x37\x82\x77\x45\x75\x35\x64\xf6\x74\x66\x68\xca\xd2\xd7\xe3\x37\x15\x6d\xd9\xb6\x4e\xf9\x0c\x29\x94\x5b\x63\x78\xa0\xde\x0f\x02\x77\xcb\xad\xf5\x9a\xd0\x24\xdb\x4e\x8e\xc1\x0e\x6b\xd6\x11\x21\x83\x81\x42\x57\x62\x54\xd7\xb1\xc0\x2c\x30\x33\xb7\x21\xed\x82\x1e\x9a\x35\x7e\xa5\x48\x11\x10\xe4\xa7\x0a\x11\xf0\xbe\x36\x8d\x5b\x4f\xc2\xd6\x00\xe2\xc0\xae\x36\x33\x01\x02\xcb\x74\x49\xad\xc3\xf6\xad\x51\x7b\xe1\xb8\x63\x1b\x6d\x4e\xec\xcf\x04\xbe\x39\x8c\x02\xa0\x99\x05\xb7\xa8\x36\xfc\x5f\xac\x16\xf5\x0a\x6b\x3b\x72\x03\x17\xa0\xa2\xa1\x6f\xf3\x7d\xd4\x5c\x95\x09\xb6\x52\x14\x50\x35\xac\x44\x46\xd2\x8e\x76\xb4\xe4\xb2\x07\xca\xc4\xef\xd3\x2b\xad\x4a\x6c\x4b\x4d\x47\x33\xbc\x26\x02\xd0\x74\x3e\xeb\x58\xa2\x54\x6d\xf5\xf0\xe2\x53\xc3\xdc\x2f\xd0\x5f\x37\xcb\x40\xd1\x7a\x4a\x67\xb1\xbd\x11\x0b\x9f\x59\xab\x7d\x58\x3f\xa6\x73\x2e\x68\x5c\xe1\x42\x0b\x43\x60\xe3\x11\x22\x27\x6e\x8b\xa6\x08\xf3\x58\x9d\x91\x6a\xd3\x00\x4e\x62\x52\x7e\xab\xe2\x69\x3a\xc3\x1c\x5c\x3b\xa4\x6b\xc9\x5f\xf2\x34\x0f\xd7\x55\xc7\x1b\xd9\xbd\x6a\x02\x6d\x36\x21\x90\x88\xf0\x76\x57\x88\xb1\xc5\x98\x54\x0d\x11\x96\x3e\x12\x05\x9f\x60\x5c\xf5\x7f\xd1\x3b\xa2\xd1\x43\x73\xa6\x1c\xdb\xb6\xee\x12\x6d\xfb\x86\xfe\xb1\xd4\xdd\xc8\xbb\x80\x1d\x75\xa3\xbe\xd4\x0e\xa1\x2b\xb6\x5c\x15\xb4\xab\xa7\xae\xf6\xf9\xfa\xae\x7e\xb3\x4b\x0e\xe3\x49\x82\x0e\xcd\x79\x16\x45\xce\xac\xc2\x27\x8b\xb5\x1d\xc5\x24\xa6\x43\x06\x4e\x50\x9e\xa4\x95\xa6\x94\x23\x16\x21\x4c\x15\x75\x01\xf6\xd7\x28\xa1\x8d\x32\x09\xf6\x2c\x30\x62\x30\xd2\x97\x93\x28\x4a\xa2\x7f\x44\x08\xac\x30\xc0\x1a\x03\x45\x58\x04\xf2\x03\xaa\xd0\x94\x98\x0e\x4b\xfa\x05\xfc\x4a\xa9\xed\x8b\x7a\x3d\x09\x21\x1d\x83\x8f\xd8\x44\xf1\xbc\xa2\x5f\x88\x00\xa7\x45\x57\xf4\x0b\xb2\x8a\x1c\x9f\x68\xe8\x76\x6b\xdb\x6f\xa0\x77\x0a\x35\xe0\xd3\x48\x18\xdc\xf9\xf0\x61\x78\x78\x85\x03\xbf\xee\xbb\x28\x73\xd1\xef\x23\xcf\x6f\x60\xaf\x07\x3a\x5c\xdb\x95\x78\x1a\x54\x60\x02\xff\x89\x96\xa6\xcf\x79\x2a\x53\x42\x5b\xac\xe4\x6d\x87\x3b\x56\x7f\xab\x1c\xae\x74\x60\xc6\x06\xab\x33\x1f\xac\x57\x4b\xdb\xd2\x88\x78\x69\x96\x23\xda\x94\x37\xf1\x00\xc5\x70\xc5\xab\x7e\x18\xee\x05\x33\xdd\xc3\x5a\xfb\x7e\xe7\x59\x5a\x58\x3f\xf0\xea\xf7\x90\x96\xb9\x22\x1a\xb4\x04\xd0\xfb\x88\xac\x00\xc8\xfb\xf6\x5e\x55\xa4\xa3\xf7\x38\x27\x60\x3a\xd5\xe6\x7a\xa7\x40\x58\xb3\x1b\xb8\x16\x0b\x74\x9a\x1a\x14\x24\xeb\xce\xa8\x19\xf0\x0a\xa0\x56\x6d\xaa\xad\x77\x59\x5a\xf6\x7a\x71\x45\x5a\xdf\x8c\x5d\xcd\x30\x5b\x0b\x01\xe4\x0a\xc8\x2b\x61\xe4\x9a\xe4\x12\xb2\x5f\x19\x9b\x19\xcc\xeb\xc6\x79\x22\x9d\x96\x9a\xfe\x50\xe7\xf6\xe8\x6c\xdd\x70\xa3\xd7\x96\xef\x9b\x91\x62\xba\x9e\xe1\x9c\xc4\x07\x19\xac\xe5\xb0\xe2\xc5\x66\x23\xd4\x9f\x18\xa1\x66\x9e\x32\x03\xa9\x0a\x00\x73\x98\x4e\x93\x5f\x41\xf7\xc4\xb4\x43\xbc\x6f\x89\xf9\xad\x80\x6b\x12\x83\x94\x27\xcd\x3e\x6d\x36\xf6\x97\xcf\xea\xd1\xa5\x11\x6e\x55\x03\x1b\xc6\xd5\xc3\x57\xbd\x9e\x29\xeb\x7e\xf8\x80\xa1\x8b\xda\x04\x70\x32\x8b\xb0\x29\xbc\x04\x79\x50\x0a\x72\x3e\xef\x13\xce\x2c\x2c\x9b\x8f\x6a\x12\x15\xa5\x56\x9a\x5f\xc6\xc9\x99\x79\x33\x6e\xee\xfa\xd2\xbc\xff\x58\x32\xe9\x8a\xe6\xb4\x5d\x14\xdc\xdc\x5a\xc6\xf4\xc5\x11\xf8\x60\x37\xc0\x6b\x94\x06\x34\xd9\x7c\x74\xb6\x38\x77\x7c\xee\x45\xbf\x8f\xf2\xe9\x62\xa6\x2a\xb2\xd0\xaf\x91\x65\x70\x66\xa9\x92\x30\xf4\x39\x31\x7d\x9f\x82\xdb\x16\x8f\x47\x7b\x99\x66\x9f\x7e\x5c\xc5\x79\x23\xa8\x1e\xc4\xf9\x74\x3c\x9b\xa8\x87\xf9\x92\x8c\x60\x6e\x74\x05\xa3\x99\x45\x9f\xcd\x97\x5e\xcf\xfc\x80\xc0\xc7\x93\x26\x9f\x6d\xb3\x51\xd4\x84\xa5\x8e\xb5\x70\xaf\xae\x43\xcd\x35\x2d\xe5\x22\x8d\xff\x17\xed\x91\xf2\x80\x6e\x36\xf6\x9e\x73\x88\x14\xdd\x6c\x0e\xe4\x8e\xef\x2d\x5b\x12\xe1\x69\xf6\x94\xfb\x7d\x5e\x94\x48\x1f\x9d\x3b\x9d\xab\x1c\x70\xed\x44\x46\x86\x21\x22\x45\xbf\x5f\x87\x3e\x5c\xd0\x8e\xe2\xbd\x9e\x18\x0c\xbc\x23\x4a\x84\xe2\x86\x12\x33\x6c\xa3\x48\x68\x2d\xda\x15\x15\x15\xb8\x9d\x6b\xec\x5e\x0b\x38\xd8\xec\x67\x38\x0e\xaa\xb3\xa2\xd7\x3b\xa8\xce\x0a\x52\xc0\x8c\xa2\x98\x0d\xab\x15\xcd\x26\xdc\xfc\xc0\x05\xfc\x41\x8a\xe8\x51\x28\x0c\xd1\x67\x0b\x82\xf3\xa2\xd0\x78\xe2\x9a\x54\x13\x1d\xcf\xc1\xe4\x52\x97\x8e\x89\x83\x12\x4b\xac\x2b\x42\x38\x83\x6c\xb0\x5b\x12\xaa\x8f\x0f\xe8\x43\xbc\x46\x1d\xbf\xbf\xaa\x43\xe6\xc4\x0d\xfb\x4a\x6e\xa1\x8d\x35\x56\xf5\x25\xa6\x7f\xba\xbe\x0c\xc3\xd6\xdf\x2e\xa3\x43\x06\x35\xe7\x65\x66\x5f\x5d\x65\xb4\xcc\x13\x66\xce\xe6\x18\x7e\x20\x6c\x0e\x40\xfb\x1d\xb8\x40\x4c\x87\x29\x7c\xe6\x65\x04\x1f\x7c\xf6\xb0\x4e\xd2\x5e\x2f\xd5\x80\x9b\x4e\xd3\xc6\xb3\x51\x92\xd6\xbe\x64\x64\x67\x38\xc9\x20\x66\x88\xea\x1d\x38\x25\x6c\x4e\x72\xbd\xb3\x51\xeb\xe8\xf6\x92\x62\x7f\x90\x2e\xb4\xb4\x16\x43\xdb\x83\x61\xb3\x31\x99\xd4\x31\x9b\xf3\x52\xbe\x80\xcf\x7a\x9e\xf6\x0b\xfd\xb6\x2c\xf8\xd8\x3c\x96\xe0\x5e\xc9\x37\x6e\xb5\xe7\x20\xde\xae\x1a\x5d\x0c\xc6\x0d\xa2\xf0\x43\x5a\x55\x86\xba\x70\x27\x96\x8b\x43\x59\x11\xe9\xae\x8e\x0e\x4d\x40\xc9\xf7\xac\xe9\x8c\x76\xcb\xeb\x18\x82\x85\xbd\x4c\xd6\xa4\x32\x4e\x79\xd7\xe1\x99\x08\x0b\x17\x7c\x7b\x31\x7f\xc9\x4a\x6d\x34\x6c\x2f\xa2\xb5\xbe\x61\xf4\x6d\xa7\x29\x9b\xac\xd7\xcb\xa6\xa3\x19\xba\x4d\x07\x03\x1c\xaf\x0d\x26\xb5\xb6\xe8\x55\xac\xfa\x19\x7e\x9d\x21\xcc\x5c\x60\xd2\xcc\xb7\x35\xf5\x22\x2e\xd4\xb5\x16\x9d\x5b\x69\xdf\xf9\x68\x32\x4a\xec\x2c\x4c\xd3\x59\xed\x18\xc2\xef\x00\x21\xdd\x49\x34\xe8\x0c\x66\x6f\x05\x24\x7c\x63\x54\xe5\x4a\xc7\x26\x6a\xa6\x22\x45\xaa\x1d\x75\x0a\x05\x76\x32\xe6\x38\x82\xfd\x18\x59\xc2\xef\xb6\xc6\x05\xe1\xc3\x25\x95\xe9\x66\x73\x5b\x03\x3f\xd6\x1d\x80\x99\x3a\xa5\xb8\x82\x83\xec\x80\x14\xbd\x1e\x6f\x1f\x57\x19\x6a\x3c\x1e\x93\x74\x9a\xcd\x14\x06\xb8\x20\x7c\x9a\xcd\xf0\x9c\x8c\xce\xe6\x8d\xa4\x63\x6e\xd7\x70\x45\x16\xd3\xf9\xac\x93\x37\x9a\x48\x65\xbc\xc2\x1c\x21\x1c\xaf\x1c\x00\xaf\xcc\x2a\x22\xcb\x00\x06\xc4\x67\x49\x6e\x9b\xd3\x64\x47\xd8\x64\x7d\x44\x98\x11\x62\x73\xb9\x81\x57\x6a\x0c\xfb\xc1\xfb\xa9\xab\xd0\xbe\x19\xa1\xcd\x64\x3d\x99\xce\x12\x7d\xcb\x40\x5c\xbb\x56\x23\x4d\xb4\x02\xdd\x8a\x91\xdb\xb9\x56\xa4\xbd\x4c\x4d\x53\x52\x6f\xc1\x7d\xad\x49\x87\x09\xd8\x5f\x2e\x66\x72\xdd\x91\xde\x1e\x07\x44\xcc\x3b\xd7\xe8\xd0\x75\x2e\x96\xde\xf9\x80\xfd\x42\x48\x6b\x9f\x00\x22\xa3\x39\xf6\xd9\x27\x62\xbe\xb8\x76\x7c\x81\xb8\xdc\xbe\x2f\x74\x20\x16\xb8\x2b\xc4\xbe\x13\xba\xd4\x4d\xc3\x31\x5d\xfa\xc7\xb4\x45\x96\x88\xdf\xab\x89\x3f\x90\xc4\x1f\x88\xa9\xa7\x41\xd3\xd4\x19\xbf\xdd\x6a\xdd\x38\x65\x33\x28\x0a\x8b\x53\x70\x69\x50\x96\x54\x84\xd1\xb8\x02\xbb\x25\x7d\xd2\xea\x3e\x53\x7f\xd2\xec\x25\xd5\xf4\xab\xae\xed\x12\x55\x71\x8a\x0b\x54\xab\x63\xa2\x70\x60\x7e\xad\xb6\x44\x81\x8a\xf6\x4e\x00\xa5\xd2\xe5\xf4\x7a\x46\x8a\xe9\x75\x63\x8d\xbd\xfc\xaf\x4a\x9a\xd3\xa1\xd5\x21\xf8\xc2\xca\xab\xd6\xf9\x65\xb7\xca\xb7\xfa\x8e\x0b\xe8\xdc\xc6\x14\x67\x87\x37\x90\x2d\x3b\x5a\xf0\x9b\x6b\xaf\xcb\x5e\x8f\x5d\x0c\xc6\x13\xd6\xb7\x37\x4d\xa2\xbd\xfa\x72\x22\x0d\x89\x33\xb1\x56\xb5\x02\x25\x0d\x89\xc4\x27\x36\x04\xb5\xe8\xc7\xe5\xc4\x8b\x43\x9d\x8c\x50\x32\x18\xd7\xcd\xf9\xb2\xff\xf0\xe1\x6b\x49\x45\x88\xef\x48\x03\x99\xe0\xa0\xd4\xed\xff\x92\x8a\x3b\xce\x19\xb1\x55\xa1\xb7\xdf\xb1\x18\xc2\xd7\xb0\x5e\x45\x3d\xb8\x37\xd3\x40\xf0\x0d\x74\x61\x5c\x2d\x41\x92\xde\x06\xe6\x13\xaa\xed\xbe\xda\x62\x4c\x72\xbf\x50\x13\x18\xc7\xfb\xd8\x59\xab\x6b\x11\x56\x0c\x90\xf0\x74\x98\x15\xbc\xa2\xbd\x1e\x33\xa4\x9e\x9d\x6c\xbf\x90\xad\xc2\x53\xf6\xd2\xc4\xac\xc5\x6c\xe2\x9c\x98\x8a\x26\x65\xbc\xc6\xe6\x37\x66\x8a\x36\xc5\xa9\x16\x9d\x3c\xa5\x05\x5b\x32\x49\x45\xa5\x16\x0b\x29\x0c\x6e\xc5\xab\x5e\xef\x60\x3b\xdd\xf9\x44\xd1\x34\xa7\xa9\x0e\xe1\x3b\x3a\xa5\x10\x8a\x82\x2d\xdf\xc9\x9b\x42\x51\x78\xde\x5b\x3f\xea\x46\xfd\xf0\xc3\x00\xea\x8b\x3a\xb9\xf6\xe4\x6f\x27\x84\xac\x9d\x1d\x76\x6e\x54\xa0\x2b\x92\xfa\xc4\x3b\xb3\x5d\x70\x40\xb9\x55\x05\xc2\xb9\x1b\xda\xd6\xc8\x20\xdc\xf8\xbe\x31\x20\x9c\xea\x37\x33\x88\xb8\x52\x18\xba\xe9\x7e\x93\x90\xf8\x2f\x08\x57\x1e\xa1\x3f\x3e\x1c\xe1\x66\x7d\x8d\xea\x99\xd8\x56\x3d\xc3\x0b\x22\xa6\xd9\xcc\xac\x9c\x5a\xb1\xc5\x90\xaf\x68\xa9\x17\x0c\xd9\xb5\xb1\xeb\xb0\x68\x0f\x43\x87\x72\x56\x4b\xa3\xcb\xb5\x57\x66\x61\xdf\x49\xb0\xd1\x16\xf6\x0a\xd4\x47\xf7\xc4\xfe\x88\xb9\xde\x2f\x38\x8a\x50\x32\x42\x78\x11\xac\xe5\xa2\xbd\x96\xe1\x87\x81\xea\x40\x04\x06\xf5\x79\xaf\x97\x9f\x17\xbd\x5e\x5c\x90\x1c\xd5\xc5\x81\x9a\x8f\xdd\xcb\x5b\x98\xe5\x9d\x83\x73\x7e\xbb\xb2\x7a\xd3\xda\x95\xdd\x51\x1e\xe1\xb9\xbb\x77\x42\x96\x96\xd5\x35\xf4\x66\x61\xb2\xbd\x83\x13\xd9\xb8\xfb\x31\x73\x60\x7f\xc4\x3b\xcb\x26\xe6\x24\xc1\x25\x4a\x34\xae\x5e\xe3\xcb\x22\x2d\x3f\x29\xac\xb9\xe9\x82\x27\x1b\xf5\x2b\x29\x77\x75\x00\xa8\x51\x57\x87\xda\xf7\xee\x25\xde\x59\x3c\x29\xed\x69\x16\x24\xa3\xe8\x83\xba\xc7\xc2\x26\xed\x61\x12\xd6\x64\xf3\x68\x28\x0f\xfd\xa7\xef\x70\xe1\x6d\x8e\x2d\x31\xe5\xb3\x8e\x69\x24\x05\x30\xdb\xaa\x37\xb5\x5d\x0a\xe1\xcc\x30\x75\xb6\xe7\xb8\x0c\xe0\x4c\x9d\xa3\xe0\x94\x40\xb0\xec\xc9\x22\x15\x55\x22\x87\xc1\xfb\xd7\x10\x16\x48\x9e\xdc\x5a\xec\x04\x5e\xb1\xc1\x5e\xda\x33\x5f\x27\x2e\x9f\xee\x83\x5e\x8e\x5a\xfd\xfb\x23\x71\x8f\x4b\xfe\x99\x8a\x8f\x19\x5f\xae\x78\xa9\x2e\x6e\x0f\x77\xd8\x16\x5f\x7e\x53\xa9\x34\xcf\x79\xa9\x25\x88\x9a\x64\xf9\x17\x50\x99\xdf\xd1\x2b\xfc\x3b\x3b\xf3\x7b\x11\x22\x8f\x5e\x8b\x16\x72\x59\x68\x67\xe7\x97\xa9\xa8\xa2\x3d\xe4\x5b\x1b\x85\x8a\x7d\x6e\x4a\x24\xe9\x17\x79\xa8\x2a\x8a\x10\xbe\x55\x50\x9a\x44\xb7\xb7\x11\x86\x8d\x90\x44\x75\x1d\x59\x88\xf0\xca\x78\x6d\x22\xdc\x3a\x5b\x93\x83\x51\x8d\x7c\x15\x93\x57\x2f\x5e\x3d\x8b\x75\x33\x5f\x06\x4d\xc9\x81\xa4\xcb\x55\x91\x4a\x1a\xe1\xf6\x38\xfe\x70\xd1\xf7\x7e\xc0\x19\x0e\xcd\x92\x68\x9b\x78\xf3\x47\x3b\x7c\xdf\x99\x8f\xe6\x4c\x1e\xc2\xdd\x71\x29\xd2\xec\x13\x95\xd5\xbf\x86\x19\x6f\x41\xcd\x9d\x3d\xc1\x77\x76\xe0\x5f\x31\x43\xa1\xc3\x4f\xf4\xe6\x55\xba\x1a\x56\xeb\xcb\x82\x2d\x29\xb9\x9d\xa7\x45\x21\x17\x82\xaf\xaf\x16\x49\x64\x9c\xf5\x47\x35\x06\x67\x54\x7c\xb9\x4c\xcb\xbc\x02\x8f\x33\x3f\xf0\x0a\xb3\xa6\xbc\xc9\x49\x9a\x2f\xcb\x34\x33\x31\x00\xc0\x09\x42\xf4\x64\x99\x0f\x22\xed\x1b\x64\x10\x75\x42\xb5\x66\x74\x6b\xc3\xa3\x3b\xe7\x2e\xd5\xe3\x9b\x30\x12\xbe\x15\xd9\x0c\x8d\xe3\x21\x2d\x61\xd9\x6c\xe4\x30\xe7\x99\x29\xad\x6e\x74\xba\x5c\xc9\x9b\x18\x85\x1a\xb0\x0c\xf0\x4a\x76\x3e\x82\xe0\x6a\x10\xaf\xd4\xd5\x67\x43\x6d\x97\xc6\xb3\xc1\x60\x8c\xac\x5b\x1c\x10\x81\xc2\x9d\x62\x5c\x2d\xc0\xbd\x73\x31\xea\xf5\x54\x15\x17\x84\xb7\x24\xfd\xdb\x95\xf5\xc7\x41\xa8\x87\x14\x57\xc4\xb2\x0c\x0a\xe8\x87\xc2\x74\x80\x63\x63\xeb\x02\x7c\xa7\x38\x20\xeb\xb3\xa2\x4f\x18\xce\x2c\x2b\x23\xd7\x11\x84\xc0\x16\xfd\x7c\x34\x29\x06\xe3\xa4\x40\x78\x41\xa2\x8f\xda\xce\x92\x7a\x1e\xa0\xe3\x1c\x81\xfd\x69\xc4\x23\x10\xb1\x7d\xd6\x36\x8a\x79\xe8\xee\x19\xcc\x39\xe3\x05\x89\x7e\x8e\x90\x65\xd5\x10\x52\xa1\x88\x47\x07\x2a\x7b\x5c\x91\x88\x95\x11\x4e\x89\x17\x60\x28\x02\xd9\x7c\x05\x5a\x83\x0b\x4d\x39\xa9\xda\xd3\x5e\x2f\xfa\x59\xb7\x02\xb3\x5c\x0c\x06\x18\x3e\xa8\x04\xd3\x3c\xbb\x18\xa1\xdb\x94\x44\x9f\x23\xc7\xbe\x32\xac\x2b\x67\xd8\x63\x9d\x4b\x14\xa8\x8e\x61\x61\x31\xd3\xf1\x96\x04\x4a\xc4\xf9\x68\xa2\xdd\x2d\xc4\x28\x61\x43\xc9\xb5\xa4\x5d\x4c\xe5\x34\x7a\x54\xc8\x01\x38\x38\x99\x91\xe8\x8a\xbf\x5b\x5f\x7e\xe6\x22\x37\x1f\xfc\x2d\x90\xc6\x14\x0f\xc6\xa8\xc6\xae\x94\xf6\x84\xe2\x17\xb3\x5f\xda\xe5\x54\x31\xd6\xeb\xc5\x72\x0a\xb0\xdc\x34\xe7\x78\x7f\xef\x96\x0d\xb7\xab\x02\x98\x57\xc0\xae\x5a\xd9\x01\xf8\x45\x6c\x63\xbd\xc8\x21\xab\xde\xd2\x34\x7f\x53\x16\x37\x0d\xe9\x62\x98\x9a\x52\xe1\x0c\x3a\xe6\x5d\xbc\x5b\x0b\x41\x0e\x0b\x56\x35\x5e\x91\xaa\x18\x39\xc9\xa1\xd6\x67\x19\x8c\xb1\x8e\x11\x4d\xcf\x52\x0b\x4d\xd5\x8e\x62\xd3\x54\x07\xb7\xd2\x9e\x17\x74\xa0\xe5\x73\xc2\x91\x8d\x60\x55\x9a\x6f\xfd\x58\x4c\x46\xc9\x18\xe1\x11\xea\x48\x2b\x5e\xd5\x8e\x90\xc0\xd3\x54\x61\x3c\x84\xf5\xb5\xd2\x83\x9a\x9e\x08\x39\x7c\x19\xb6\x53\x61\xb4\xa0\x4c\x0c\x69\x6c\xc3\xa6\xa9\xe6\x93\x02\xeb\xf8\x5b\x49\x51\x23\xcc\x89\x69\x74\x5c\xd7\xa0\xa4\xe0\xf5\x98\xc1\x15\xa1\xc9\xed\x27\xfa\x70\x52\xf0\xa9\x5a\x79\xb4\x96\x3c\x0a\x34\xc2\x03\xb7\xf6\x3a\xde\xb2\x3a\x98\xc0\xf1\x49\x6b\x97\x9f\xb1\xd6\x76\x4a\x7d\x77\x58\xe8\x0c\x0d\x06\x0c\xb6\xf4\x19\x77\xe1\xdc\xf6\x95\xe0\x2a\x7f\xbf\xcf\x0d\xca\xac\x95\xc4\x1c\x9c\x33\xd0\x0c\x73\xaf\x1c\x61\x05\x81\x49\x6a\x50\x7c\x45\x98\xd6\x00\xe1\x55\x3f\xfa\x71\xa5\xc0\x4d\x07\xd9\x50\xbd\x85\x77\x1f\x48\xed\x91\x7e\x45\xe5\x3b\xc8\xf5\xa2\x9c\x73\xe3\xd6\x8c\x0e\x2b\xbe\xa4\x72\xc1\xca\x2b\x3d\x81\x34\x8f\x51\x63\xd6\xa2\x5a\x7f\x64\x6c\xf1\x62\x09\x96\x43\xd6\xf8\x4e\x7f\xc4\x11\x70\xad\x20\x42\xf7\x15\x95\x4f\xe0\x42\x52\x90\xc6\x4a\x7a\x41\x40\xb3\x3a\x58\x05\xbd\x2b\x7e\x5c\x45\xa8\xa6\x43\xdd\xe7\xf7\xdc\xb8\xe5\x57\xd5\x0f\x5c\x68\xac\xf7\xf4\x8b\x6d\x18\x99\x8d\x59\xf5\xb5\xeb\xa2\x60\xb8\xe6\xcb\x7f\xda\x80\xdd\x08\xfb\xe3\x1d\x63\x3c\xdf\x3b\x46\xe8\xd7\x9e\x51\xf6\xef\x1a\xa5\xf6\x98\x35\x88\xfa\xbc\x1f\xbd\x84\xb1\xae\x0a\xd6\x80\xf7\xe3\x1b\xd8\x38\xb3\x3d\x76\x09\x74\x6b\xfb\x6a\x6f\x70\x3a\x3c\x92\x13\xad\xb0\x7e\xdf\xf3\x50\x2b\xa7\x6c\x66\x4e\x50\x05\xf7\xea\x4d\x1d\xa3\xb8\x22\x3a\xb4\xdb\x59\x75\x4e\x52\xfd\xab\xdf\xaf\x90\xfe\x79\xc1\x8d\x43\x20\xf0\xe8\xa2\x7f\x82\xef\x95\x6c\xb1\xd9\x58\xdd\x47\xb3\x63\x2b\x62\x6a\x9a\x28\xa8\xae\xb0\x22\x83\xd5\x96\x76\x45\x27\xa9\xfa\x8e\x6a\x05\x47\xe1\x66\x16\x78\x84\x6a\xec\xa6\xe5\x7d\x7a\xa9\xe6\xc4\x9c\x19\xb4\xaa\x22\x35\x69\xc3\x67\x55\x46\xa2\x8a\x95\x57\x05\x75\x65\xdf\xf3\x7d\x3b\x61\xeb\x84\x1b\xcd\x5a\xed\xc6\xd2\x05\xfb\xd3\x17\x8d\x17\xc5\xc6\xac\x93\x5b\x1e\x28\xf3\x47\x2d\xca\x6d\xb3\x22\x9d\xd6\x24\x96\x31\x37\x8b\xa4\x4f\x05\x3b\x89\xea\xbb\x5a\xae\x06\xb1\xa8\x01\xee\xc2\x69\xf4\x27\x11\xee\x9c\xbf\xaa\xce\x6b\x9d\x79\xe8\xbc\x1d\x94\xf6\xdd\x06\x73\x6c\x8f\xe9\x47\x73\xfd\x69\x07\x9d\x58\xc4\x14\x1f\x8c\x77\x80\xee\x8e\x6a\xb4\x9a\xdb\x1d\xf5\x8c\x9a\xa9\x7d\xda\x4c\xed\x6b\xfa\x45\xbe\xc9\xb4\x5e\x48\x16\x14\xf7\x4c\xa8\x9a\x8d\x19\xa9\x39\x02\x53\x95\xe0\xab\x3a\xf7\x31\x77\xa6\x4e\x06\xb1\x7d\xce\xca\xfc\xf9\xba\x28\xd4\x01\x4d\x88\xc6\x19\x2b\x0a\x0a\x48\x10\x91\x2f\x5b\x02\xda\xa6\x30\x45\x4b\xb9\xeb\x2b\xc3\xb0\x17\xd5\xb1\x6c\xad\x32\xc3\x6b\x28\x36\x5e\x86\xc0\xd9\x11\xe6\xe4\x60\xd4\xf8\x39\xa8\x74\xd7\xf4\xdd\xa8\xea\xc6\x05\xe1\x13\xdf\x2b\xee\x87\x0f\x97\x51\xbf\xea\xc3\x5f\x94\x54\x38\xd3\x25\xde\x01\xda\x6f\x86\x54\x60\x86\xce\xe2\x0c\x6c\x37\x5f\x83\x82\xc2\x66\x13\xef\xce\xa8\xe0\x19\xf4\xc5\xe1\x3a\x53\x37\x34\x42\x5e\x39\xd4\xeb\xc9\x61\x9a\x37\x58\x76\x9c\xd9\xe3\x20\x03\xd0\x02\x57\xbc\xf1\x5d\x73\xe7\xa6\xce\xf7\x33\x9b\xb5\x4e\x63\x7b\x74\x02\xd9\x50\x65\x69\xf9\x9c\x8b\xc7\x9a\x4e\x89\xa5\x42\xc0\x9a\x50\xfc\x67\x9e\xbf\xca\xad\x9c\xe3\xd0\x83\x95\xe6\xfa\x64\x0b\x42\xa2\x18\xdd\xd6\xd3\x99\x73\xcd\xe2\xde\x2d\xab\x1e\x50\xfc\xfe\xd8\xc3\xa6\x82\x35\x2b\xb5\xc2\x91\xde\x5f\xfa\x67\xb6\x80\x88\x98\xc0\xeb\x3d\x18\x23\x7c\x30\xea\x48\x52\xc6\xac\xc9\xc7\x9a\x7c\xfa\x52\xf6\xb7\x81\x76\x5f\xe8\x60\xf9\x5d\xc6\x57\xed\x1d\x90\xe9\xe0\x2b\xe1\x25\xa2\xb3\x3f\x2a\x8a\x68\xc7\xde\x7a\xd5\x54\xf8\x98\xca\xcf\x94\x96\x8f\x1d\xb5\x17\xec\x0e\x35\x4b\x59\x2c\x5b\xc8\xa3\xdb\x64\xaf\x34\xa2\xfa\x9e\x9b\xe2\xad\xd2\x5f\x21\xbe\x84\x67\x3e\x18\xae\x90\xd0\x67\xa6\x5e\x26\x06\x7e\x2d\xdd\x56\xd2\x33\xa9\x73\xa0\x86\x17\xbe\xe2\x95\x23\xae\x76\xd7\x36\x68\x02\xfc\xf0\x5e\x4f\x1d\x7a\x6e\x05\x78\xb3\x02\xea\xea\x51\xd9\x15\x09\xa0\x1d\x5a\x59\x22\x53\x23\xda\x89\x7f\x04\x7a\x68\xf7\xe2\xdb\xd0\x6e\x87\x28\xc2\x51\xb2\x75\xaa\xa7\x10\xd1\xcf\xc4\x7c\xf5\xe2\xc8\xda\x58\xaf\x26\xc6\xeb\x41\x61\xc9\xd1\xe6\x96\x58\x93\x22\x38\xdd\x33\x08\xd8\x6a\xde\xbc\xfa\x06\xe3\x5e\x8f\x4f\xab\xfe\x78\xe6\x67\x27\x24\x3b\x43\x19\x29\xa6\xfd\x7e\x35\x6b\xca\x75\xb4\x7a\x59\xbc\xc6\x19\xaa\x6b\x8b\x93\x4e\x18\x39\x18\x25\x26\x29\x3c\x18\x24\xd8\x8b\xe8\x17\x6d\x48\x76\x37\x91\xe1\x14\xe3\xd3\xc6\xd8\x9a\x1c\x59\x5a\x22\x9d\xf2\x19\x2e\xd4\x9f\xfe\x78\x86\xd7\xc4\x5c\xfd\x19\x29\xe3\x02\xe1\xdc\x3f\x05\xd7\x38\x83\xa8\x8b\x62\x92\x0f\x2b\x2e\x64\x8c\x12\xf3\x63\xa7\x3d\x7d\x2b\x42\x91\x89\x43\xeb\x7d\x71\x52\x5a\xf0\x26\x18\x53\x22\x30\x78\xf7\xa7\xe7\x72\x32\x18\x27\x94\x10\xa9\x88\x15\x4d\x28\x04\xb4\x4a\x8e\xd5\x6c\x61\xc0\xf5\x83\xfb\x77\xad\xaf\xdb\xac\x46\x35\x53\x07\x66\x78\xc1\x52\xb8\x77\x35\xdd\x99\x3b\xac\xfc\x73\xba\xda\xc6\xc9\xe5\xb7\xc3\x99\xd8\x05\x65\x86\x7e\x0b\x56\x0e\x88\x39\x07\x7c\x62\x07\xf0\x89\x69\x35\xc3\x2d\x28\x1b\x8c\x43\x38\xb3\xf0\xd2\xa0\x1c\x85\xc1\x83\x6c\x76\xf7\x9e\x2d\x1c\xfa\x51\xc0\x8e\x6b\x72\xc0\x5b\xb6\x40\x35\x18\xa9\x99\xea\x15\x56\xe8\xc0\x7e\xb3\x19\x0c\x32\xbc\xbe\xe0\x13\xd6\x00\x68\xc2\x1a\x45\x47\x36\x65\x8d\x52\x13\xc9\xd4\x05\x9a\xd5\x5f\x07\xc7\xd1\x19\x6d\x0c\x20\xa8\x83\x44\x41\xd8\x94\xaa\x29\x63\x53\xaa\x20\xb1\xf2\x69\xbb\x6d\x62\x35\xc2\x25\xa0\x9d\xea\x0f\xe0\x53\x38\xea\xdb\x95\x54\x48\xc4\x85\xbf\x4b\x26\x3b\x48\xdd\x7e\x05\x37\xae\xbf\x95\x0c\xe9\xdb\x54\x93\xb4\xca\xa9\xcb\xbe\x54\x2d\x73\x68\xb9\x9d\x7d\x8b\xc8\x4d\x41\xbd\xc2\x90\x37\x92\xff\xc4\xe8\x67\xcd\xf8\xc0\x06\x02\x1d\xa9\x64\xea\x68\x13\x4a\x7f\x18\x14\x36\xc3\xec\x2b\x20\x14\x6e\xe1\xce\xd2\x0b\x32\x3a\x4b\x07\x03\x7b\x1e\x88\x69\xaa\xce\x83\x2a\x40\x57\xd7\xa4\xf2\x41\xb2\x33\x3a\xb0\x19\x14\xc8\x54\x0d\xc8\x14\x83\x01\x2e\xce\x1d\xc8\x14\x78\x7d\x07\xc8\xac\x15\xc8\xac\xbf\x01\x64\x5c\xa1\xa3\x33\xaa\xba\x4b\x07\xfb\xa0\x26\x0d\xa1\x46\x10\x72\x27\x1c\x00\x14\x0d\xc6\x00\x45\xe8\xce\xa5\xff\x1a\xc0\xb5\xb2\xa7\x5f\x87\x94\x7d\x60\xc1\xfb\xd1\xa1\x82\x09\xc9\xaf\xae\x0a\xaa\x90\x0d\x6a\xd5\xe7\x68\xde\x42\x4b\xd4\x11\xeb\xe5\x8a\x6f\x8d\x68\x10\x38\xf8\xb6\xb6\xbf\xa8\xda\x7e\xe3\xac\x04\x77\xe5\x7f\x08\x01\x14\x92\xa5\xe0\x5d\xdc\xe0\xa2\x95\x21\x16\x41\x5b\xac\xb9\x1b\x9b\x0a\xd4\xdd\x28\xa7\x6c\xeb\x6e\x2c\xce\x50\x41\xe4\xb4\xdf\x67\xfe\xdd\x68\xc9\x2b\xe0\x70\x26\x15\xe8\x66\x3a\x1e\xd3\x01\xb7\x80\xd7\xeb\xa5\x40\x4f\xdd\x0d\x48\x12\x42\x6b\xba\xeb\x50\x04\xbe\x47\x7c\x36\xaf\xd0\x77\x62\x65\xce\x51\x85\xc9\x54\xc1\x19\x2b\x71\xe5\x9f\xb1\x6a\x7b\x40\x0f\xcf\xd6\xe7\xa4\x1a\xd2\x32\xf7\xf5\xda\xd7\x03\xd9\x59\x13\xfd\xbd\xd7\x8b\x53\x52\xc6\x19\xa6\x0e\x4c\x33\xcb\xf3\x53\x28\x2f\xce\xce\xa9\x07\xb0\x10\xe7\x2f\x84\xc3\xae\x82\xaa\x4c\x81\x61\xd6\x1f\xe3\xc3\x7f\x7c\xa8\xfe\xed\x50\x2b\xad\x78\x55\xaa\xaa\x7c\xd7\x63\xb8\xdf\x97\xa8\x66\xe1\xc5\x51\x6c\x36\xa9\xbe\x1e\xd2\x1d\xc4\x28\x33\x77\xe5\x16\x62\x0b\x54\x5f\xbe\x5e\x15\x2c\x4b\x0d\x59\xda\x06\xca\xaf\x2d\xc3\x36\xa8\x59\xb6\xa7\xd1\x2e\x6d\x02\x43\xb0\x5d\xac\x00\x31\xeb\x34\xc2\x82\xd6\x04\x35\xb3\xc0\x9a\x2b\x0f\xd9\xed\xe8\x7d\x53\x04\x56\xb2\xab\xb0\xfe\x69\xd9\xd5\x58\xb3\xab\xd5\x5f\xfd\xa1\xe1\x17\xb5\x36\x2f\x6c\xb6\xf7\xb0\x75\x45\x5a\x56\x2b\x5e\x51\x10\xe2\x6a\xee\xc7\xf3\x53\x12\x29\x5c\x69\xd7\x26\x5c\xb4\x08\xeb\xe7\xa7\x70\x29\xd8\xdc\x2f\xca\x8a\x96\x15\x93\xec\xba\x3d\xd5\x0b\x8f\xb2\x1f\x3e\x3f\x22\x51\x49\xbf\xc8\xc7\x9c\x7f\x5a\xa6\xe2\xd3\x1e\xc6\x4a\x40\x1f\xda\xbc\x55\x13\x5a\xf9\xcc\x6d\x75\xcf\xf9\x89\xb6\x88\x01\x8f\x27\x8a\x24\x8d\x4d\x68\x15\x27\x3b\x31\x21\xd8\x71\x9b\x56\xd3\xf4\x75\xa9\xe8\xeb\x3a\x00\xa5\xe7\x47\x6a\x88\x2b\x41\xaf\xff\xc0\xee\x4a\xe7\xf2\xce\x18\x3d\x58\x3b\x53\x39\x6d\x8e\x9f\x99\x37\x02\xb1\x87\xc6\x14\xba\xdf\x42\xf5\xbb\x63\xea\xaa\x9b\xe5\x39\x6a\xce\xe7\x3d\xbd\xff\xca\xb1\xba\x6f\x58\x60\x36\xbb\x3b\x69\x57\xb0\xea\xd2\x3f\xb8\x18\x91\xd3\xd2\xb1\x08\xb9\x7e\x03\x16\x61\xea\x3b\x8f\x02\xc6\xb4\x41\x41\x53\x1f\x05\x65\xf3\x38\x9d\x56\xb3\x76\xc3\xe8\x16\xbe\x5a\x2f\x47\xa1\xe6\xb5\xf0\x35\xaf\xc5\xb4\x98\x11\xa2\x72\xf7\x7a\xc2\x7a\x5a\x54\x08\x81\x0b\x35\xaf\x59\x89\x06\x19\x10\x5b\x1e\x43\x18\xe6\xf8\xb6\xd5\x7c\x72\x30\xd2\x7e\x25\x7e\x5e\xd0\xf2\x99\xda\xf2\xc0\xde\x6b\x41\x13\x1c\x4c\x7a\x59\x20\xb3\x9b\xb5\x7f\x11\xa8\xf6\x28\xba\x43\x8c\x1a\x3b\x13\xb2\x71\xf4\xd4\x88\xa4\x74\x1f\x0c\xd9\xff\x2f\x75\x02\x2e\xdd\xb0\x27\xbb\x56\xdd\x5f\x71\x03\xce\x93\x16\x2f\x52\x1f\x58\xfa\x84\x57\x87\x58\xad\x90\x1a\xb3\x2c\xe5\x60\xa0\xce\x77\xe1\x49\x40\xf6\xb0\x74\xd5\xa8\xfe\xa6\x06\xf5\x59\x68\xec\xa5\x8a\x8c\xe2\x12\xef\x47\x7f\xed\x7a\xe4\xf9\xca\x8a\x83\xef\x3e\xfe\xcb\x3b\x10\xd5\xe9\xcc\x88\xbb\x9c\x0d\x37\x48\xbd\xe2\x82\x94\xd3\x74\x86\xdc\x99\x1f\x9b\xab\x2c\x45\xd8\x84\x9a\x8e\x22\x84\x12\xf3\xdb\xf8\x35\xd2\xe7\xb8\xa5\xa5\xb0\xa6\x71\x10\x52\xc8\x97\x39\xf4\xbd\x2e\x70\x1c\xa5\x82\xaf\xcb\x3c\xc2\x51\x96\x56\xd4\x8a\x02\x01\xe0\xd3\x06\x03\x6d\x23\xcc\xaa\x67\x6c\x9a\xce\x66\x46\xf2\x06\x2a\x94\x9a\x8b\xa2\x89\x2c\x5c\xa1\x8b\x11\x72\xb8\x40\x2c\x0d\xf1\x85\x3a\x15\xd1\x1c\xbc\x36\xee\x28\xe2\x4c\xf3\x2c\xb1\x49\xcf\xf4\xf1\x59\xfb\x6e\x92\x96\x77\x33\x56\xcb\x6d\xc6\xea\x36\xbf\xb4\x44\x16\x8e\x3c\x7e\x29\x0b\xf8\xa5\x82\x18\x28\x2a\xc1\x4d\x7e\xed\x4b\xc2\x04\xc8\xbf\xf0\xbf\xaf\xa9\xb8\x49\x02\x66\x69\x69\x64\x61\xcc\x33\x74\xb9\xf6\x59\x03\x4b\x1b\xf1\xaf\xd1\x5b\x83\x6a\x30\x37\x22\x21\x9f\x35\xca\xb0\x9c\xa8\x93\x38\xd1\xa7\x32\x3a\x8b\xe5\x84\x7b\x9c\xd1\x44\xbf\xfc\x20\xe8\x35\xe3\xeb\x2a\x46\x0a\x27\x08\x8e\x73\x87\x9d\x6a\x94\x14\x25\xf1\xbe\x76\x4a\x1b\x98\xcf\x31\x61\x13\xea\x29\x06\xf8\xb8\x19\x42\x08\xff\xc7\x7b\x22\x60\xba\xdb\xfb\x2f\xb8\x80\x50\x5d\xcb\xe9\x5c\x9d\x70\x4d\x24\x17\x2d\x16\x50\x1d\xd1\xb1\x41\xd4\x01\x04\x59\xfe\xea\x25\xed\x92\x86\xff\x2b\xc8\x19\x06\xda\xd2\xc2\xbf\x50\xf0\x2f\x06\x03\xd4\xc6\x4c\x23\x0c\xe7\xa3\x91\xc9\x94\x60\x13\xd4\xa0\xf2\x8a\x5e\xd2\x92\x0c\x10\x44\xee\x25\x7f\x60\x14\x3f\xaa\x51\xac\x57\x6a\x23\x3e\x32\x40\xdc\x1a\xc7\x2a\xa6\xa1\xe7\x39\x77\x91\x07\x2c\xa6\xb0\x5a\x90\x05\xe5\xfc\x73\xf9\x2f\x56\xec\x85\xd7\x0e\x2b\xf6\x38\xc8\xf2\x9d\x3e\xd0\x5f\x6d\x23\x05\xad\x23\x5f\xe5\x80\x85\x6f\x7f\xb4\x57\x0c\xde\x91\x06\xfe\xf3\xdc\xd5\x12\x07\x2c\x7b\xbf\x47\x8f\x9a\x7b\xe8\x3d\xdf\xdf\xa5\x9d\x77\xd1\xfe\x8e\x99\xab\x46\x6e\xc1\x6b\x28\x3a\x90\x7e\x4f\x7e\x6e\x64\x58\x7b\x7b\xb2\xe5\x67\x2f\xe8\xc9\x8e\x8f\x01\x0e\x67\x23\xc8\x05\x7d\x60\x04\x02\x43\xb8\xe3\xae\xc4\x4c\x1d\xc4\x46\x76\xc7\x3a\x8c\x94\xb8\x24\xbc\x6e\x55\xfe\x57\x56\x14\x34\xe0\x7a\x96\x20\xe9\xdf\xe6\x06\x60\x66\x91\x10\x18\xe6\xdf\x2d\x1f\xe7\x67\x26\x17\xff\x09\x13\xde\x46\x0c\xff\x43\x80\xa2\xf1\x74\xf3\x2a\x03\xc0\xf9\x05\xc6\xa1\xeb\xf9\x25\x2d\xdb\xfd\xd7\xbe\x73\xe9\xae\x49\x83\xf8\x93\xad\x8b\xb5\xdd\x6b\x9d\xd3\x30\x44\x56\x69\xa5\x4e\x03\x85\x66\x40\xd3\x7f\xde\x81\xbf\x35\x1d\x7b\x02\x1d\x5b\xf0\xcf\x2f\xca\x27\xb4\xdc\x16\x76\xda\x99\xd5\x0a\x77\x4f\xc0\x3d\xaa\x96\xe7\x7b\xfa\x0f\xa1\xa0\xdf\xa9\x4b\x38\x47\xab\x83\x2d\x8d\x84\x40\x95\xe2\xf0\x28\x24\x88\x15\x72\x64\xb8\xc8\x4e\xc2\x5c\xfd\xb8\xfa\x9c\x8a\x6d\x4e\xcd\xbf\x74\xee\xee\x8e\x96\xc8\x20\x5a\x62\xc7\x23\x66\x2f\x82\x6b\x4b\xad\x44\x20\x2a\x0c\x08\x5f\x70\x39\x65\xf9\xbf\xe0\x13\x64\x6b\x4c\x8e\x2f\xd9\x8c\x4a\x7d\xfa\x9f\x3f\xae\x16\x37\xe4\xae\x61\xf5\xf7\x0c\x4b\x51\x06\xc7\x6a\x30\x6a\x2f\xfd\x58\xe6\xdb\x80\xe3\x53\xdf\x01\x41\x11\x16\xb3\xd7\xfa\xae\xe2\x81\x5e\x5a\x53\xee\x51\x51\xec\x6c\x11\x26\xc6\x22\x41\xad\x20\x9f\x6d\xb4\x44\x6a\xd4\x48\xe1\x74\xc0\x8d\x53\x57\xb0\x87\x73\x9c\xa1\x32\x44\xfb\x85\x45\x31\x00\xf1\x17\x46\xd9\x0e\x0b\x9f\xdd\x76\x4e\x64\xe3\xf7\x52\x91\x62\x26\x2d\x5b\xb8\x94\x6c\xd1\xeb\xb1\x7e\x7f\x4b\xd7\xc3\x9c\x7b\xe1\x4c\x4d\x61\xc0\xbc\xc8\xa3\x56\xc2\x0c\x2e\xf2\xd2\x26\xc1\x46\x1e\x45\x33\x62\x7e\xfe\xd6\x24\x3f\x2a\x8a\x48\xb3\x50\x5e\xd8\xd9\x7b\x51\x66\x02\x7c\x00\xa5\x45\xbb\xde\x5d\x79\xde\xd2\x6b\x2a\x2a\x6a\x6a\xf9\x5e\xe5\x30\xc7\x51\x84\xe5\xf0\xf9\xb1\x2e\xf0\x1a\x22\x55\x36\x7c\x08\xb7\x56\x6a\x79\x23\x4c\x87\x25\x17\xcb\xb4\x60\xff\xa4\x7f\x05\x65\x58\xf0\xb9\x8d\xb0\xd1\xfc\x8d\x7c\x8d\xdf\xe9\x2c\xf0\xc3\x13\xe8\xe8\x1a\x44\xd9\xa8\x10\x25\x8d\x66\x6f\xed\xd7\xf6\xbf\xd1\xe5\x25\x15\x83\x3c\x95\xe9\x61\x9a\xa7\x2b\x49\xc5\xe1\x60\x25\xd8\x35\x68\x55\x4f\x23\xa3\x25\x0d\x71\x01\x41\x8f\x39\xc2\x91\x2e\xc2\xca\xb9\x5a\x92\x96\xdb\x2e\xe3\x3c\x7b\x4b\x5b\xb8\x24\x4e\x1f\x98\x41\xe4\x34\xab\xdb\x94\x48\xcc\xc8\xe1\x07\x31\xf9\x50\x1e\x1a\xd9\xee\xe1\x87\xe9\x87\xd9\x9f\x0e\x7d\x35\x5f\x1b\x13\x8c\xb3\xbc\x3b\x3a\x20\x10\x32\x4d\x9b\x92\xc3\x4f\x41\x20\xf0\x27\xd9\xa1\x43\x2d\x26\x22\x46\x89\xc0\x74\x6a\x3d\xbd\xcc\xc8\xaf\x7f\xba\xa5\x65\x06\x6e\xa4\x5e\x3c\xb1\x3a\xf6\x6a\x9a\xc9\xce\x04\x81\xea\x5f\xad\x9b\x73\x17\xf2\xb0\x20\xcf\xd4\x34\x0c\x5f\xb1\x2f\xcc\xc6\x73\x8c\x6f\x2f\xd7\xac\xc8\x7f\x7c\xfb\xd2\x5a\x07\x62\x86\x6e\xab\xcf\xcc\x38\xcb\x03\xb2\x4e\xad\xf4\x5b\x9a\x71\x91\x47\x89\xe5\x5e\x2d\x58\x35\x5c\x8b\xe2\x39\x17\xcf\x5d\x6a\x2c\x31\x55\x24\x91\x2b\xa4\xe0\x73\x4f\x89\x47\x45\x11\x37\x99\x61\xb7\xee\xca\xfa\x37\x95\x10\x33\x4c\xfd\x8c\xfb\xfb\xf2\xb7\x26\xd9\x2b\xa4\xf9\x38\xe5\xce\x06\x9e\x9b\xb4\xad\xbe\x7f\x9f\x56\x77\x95\x31\xc9\x5b\xc5\x1e\xd3\x82\x97\x57\xd5\x7b\xbe\xaf\xa0\xcb\x10\x14\x35\xd1\x35\xf7\x0e\xec\x89\x97\xee\xcd\xdb\x1a\x7c\xb1\xee\x2f\xf6\xa3\x97\x1e\xb4\xa7\x71\xcb\xfd\x05\x9f\x7a\xe9\xb6\xa0\x05\x7f\x3f\xf7\x47\x1f\x7c\xd4\x19\x17\x7e\xd0\x18\xaa\x3d\x85\x35\xf8\x5d\x51\x09\x9e\x34\x71\xb4\xe0\x95\xd4\xca\x4b\xa6\xe1\x1f\x04\x9d\xb3\x2f\x8d\x90\x5b\x3b\x7c\x82\xd4\x55\x2a\x17\xcf\xb9\x78\x7f\xb3\xa2\x31\x45\x08\x1c\xac\x18\xfe\xa9\x74\x2f\x3b\xb7\x08\xc4\x17\x28\x1d\x97\x93\xab\x4b\x41\xfb\x46\x89\xa3\xc3\x08\xe1\x03\xd6\xeb\x95\xbd\x5e\x74\x18\x1d\x10\x52\x5a\x0d\x9b\x11\x52\xfb\x95\x44\x87\x51\xbf\x44\xb8\xac\xf1\x16\xb0\x9b\x0d\xbe\x7b\x36\x24\xa6\xc8\x2f\xa3\xc1\x5d\xee\xcb\xde\x64\xd6\x00\x7f\x47\x56\x19\x66\x6d\x3a\xf3\xf5\x02\x0e\xd6\xef\xee\x7a\x90\xdf\xc2\xf9\xef\x1a\x6d\x03\xe3\xdf\x5c\xac\x05\xe0\xdf\x30\x53\x01\x6c\x7f\x73\x3b\x01\x60\x7f\x5b\x29\x03\x95\x7e\x54\xcc\xdd\x80\x5c\x6e\x25\x94\xe9\x92\x6a\xe6\x83\x26\xbb\x2c\x98\x89\xcd\xc6\xdc\x00\xce\x25\xda\x3f\x3e\x1c\x7e\x38\x34\xb1\x11\x28\xda\x6c\x0e\x17\x52\xae\xe2\x0a\x4d\x92\x20\x61\x42\x93\xe8\x30\x22\x5e\xc8\xe2\x11\x9a\xfc\xfa\xa7\x5b\x51\xff\xe9\x96\xd6\xbf\x26\xbf\xfe\xe9\x56\xd6\x87\xf0\xdb\x04\xe6\x9c\xce\x9c\xce\x48\xaf\xc7\xdc\xae\x29\xdd\x4b\x89\x30\x6b\xf6\x43\x8d\xc3\xad\x66\x10\x2f\x3d\x32\x13\x92\x2f\x4b\x97\x54\xdd\xf6\x5e\x64\x51\x31\x5c\x15\x6b\x01\x38\x80\x82\x20\x50\x78\x7d\x6c\xa6\x12\x2e\x1c\x52\x80\x6d\x94\xa4\x62\xc9\x4a\xfa\x98\xe7\x37\x3f\x08\xbe\x64\x15\x6d\x79\x89\xd4\xf5\xc5\xa0\x0a\xa3\xbd\x13\xe9\xa6\xdf\xbe\xfb\xe9\x87\xa1\xa0\x15\x2f\xae\x69\x2c\xd0\x50\xfb\x26\xa5\xe4\x82\x22\x34\x94\x0b\xaa\x8a\x5c\xb4\x2f\xf5\x6b\xed\x08\x5d\x93\xb5\x07\x74\xc8\x3f\x39\x3f\x8d\x4d\x24\x68\x99\xca\x75\x85\x53\x12\xa9\x69\x15\xda\x5d\x98\xfa\x85\x2b\x02\xf1\xcc\x08\xdf\x6c\x8e\x46\xf7\xf5\x8f\xe8\xfb\x67\x8f\x9e\xaa\x8c\x72\xb8\xa4\x72\xc1\x73\x57\xf3\x66\x73\x00\x76\xd1\x3a\x9c\x32\x23\x7f\x79\xf7\xe6\xb5\x71\x3f\x2b\xac\x2b\x55\xed\xca\xec\x20\x2e\x7c\x4f\x77\xef\x6e\x4a\x99\x7e\x01\xef\x7a\x4e\x51\xa1\xe8\x14\xc3\x55\x7a\x53\xf0\x34\x27\xea\xfc\x2c\x9c\xc9\xc8\x66\xc3\xea\xda\x8c\xcf\x88\x6a\x6a\x4c\x87\x73\x2a\xb3\x45\x2b\xc0\xbb\xa6\x3b\x89\xb3\x08\xae\x34\xf1\x0f\x8e\x91\xe2\x08\x4a\x44\xc8\x06\x43\x2c\xdd\x17\x8b\xe7\x74\x2a\x12\x23\x72\x41\xb5\x7e\x27\x9b\xc7\x0d\xae\xe2\x3c\x3c\x41\x91\x6d\x1f\x81\x19\x78\x25\xef\xaa\x0b\xb1\x2b\x17\xb4\xfb\x2b\xe4\xfb\xd5\xd8\xa9\x75\xb9\x08\xbe\x5e\x15\xfc\x32\x2d\x86\xdd\xa7\x2c\xef\xde\xf0\x75\x77\x49\xd3\xb2\x2b\xb9\x9e\xa3\xa2\xd0\x79\x35\x0a\x67\x4a\x80\x51\xd8\x24\x42\xa6\x8b\xf0\xb5\x6e\x46\xa9\x26\x04\x66\xfe\x2d\xad\x56\xbc\xac\xe8\xf7\x34\xcd\xa9\xa8\x76\x10\x14\x6f\xc0\x92\xce\x62\x43\xda\xd4\x35\xf0\xdb\x27\x3b\x3e\xa1\xa1\x83\x75\x33\x2b\x55\x12\x3b\xa5\x4a\x9c\x88\x69\x09\x5c\x79\x5c\x91\x83\xf1\x59\xda\x28\xcd\xa5\x5a\x68\x74\xff\xa1\x82\x26\x3f\x30\x63\x8a\xd0\x6d\x45\x0e\x46\x46\xea\xa3\xba\x30\x86\xb5\xb3\x2a\x76\xc3\x6a\x7d\xa9\x2d\x9a\x21\xe0\xf8\x50\x0a\xa6\x08\x96\x75\x90\x92\xf6\xc7\xd8\x19\x69\x99\x2c\xe0\xd1\x07\xc9\x69\x11\x32\xe3\x66\x64\x8d\xe5\xb4\x98\x91\x75\xdd\xb8\xea\x07\x1e\x87\x60\xb0\x8d\x5f\x94\x92\x7f\x9f\x56\x0b\x12\x6e\x2a\x5c\x92\x5b\x56\x66\xc5\x3a\xa7\x2f\x72\x50\x9a\x68\xf4\x59\x6d\x51\xf1\x1c\x68\xb0\x25\xcf\x69\x01\x01\x5e\x3a\x01\xf4\x38\x4c\x97\x6d\xb7\x66\x99\x4d\xb7\x75\x63\x74\xbd\x95\x29\xe6\xc6\x93\x05\xb6\xdc\x75\x3f\x17\x30\xd3\x83\xa1\xc0\x4d\xf9\x43\x2a\xd2\xe5\x2e\x10\x68\x0e\x48\x87\xbe\x53\xcf\x3e\x1c\x57\xb8\xd0\x3c\x33\x36\x8f\xb5\xd7\x0d\x56\xc1\xdf\xb8\xd4\x2e\x7a\x18\x2c\xb4\x13\xbf\xb0\xf3\x0a\x34\x3e\xb8\x09\x74\x83\x26\x3a\x96\x49\x39\x65\x33\x94\xd0\x58\x28\xda\xaf\x1f\x6f\x19\x71\xaa\xf4\x09\x4b\xa2\x08\x29\x1a\x50\x67\x77\x76\x68\xdb\xdc\xd5\x68\xaa\x2b\xe8\x6a\x10\x9e\xa9\x43\xc9\x40\x73\xe3\x15\x44\x72\x77\x64\x17\xe0\x45\xdf\xf6\x59\x9d\x40\xdd\x12\xd9\xde\x14\xa6\xc9\xc2\x36\x69\xba\xdc\x74\xe0\xf7\x8c\x1c\x9c\xa9\x4d\xd9\x0c\x3c\xeb\xea\x5f\xd7\x69\xb1\xa6\x9e\x15\xb9\x6b\xbf\x30\xad\x36\x2e\x2a\xa3\x08\x53\x64\x2e\xa4\x5e\x84\x3c\xaf\xb9\x47\xa3\xc3\x2b\x1c\xf5\xd5\x25\x65\x46\xaa\x89\x42\xe7\x29\x86\xe2\xe8\xe3\x47\x5a\xbd\x82\x63\x26\xc2\xb7\xd0\xaa\xb3\xcd\xbd\x8b\x82\xa4\x86\x3c\xf5\xc8\x47\x3f\x5b\x25\xb9\xa0\x0d\x99\xd9\xa2\x1f\xf7\xb9\x56\x05\xd7\xa7\x24\x7a\xa4\xdb\xe8\x3a\xae\x4f\x77\x9e\xb2\x82\xe6\x91\xf1\x32\xcf\x2a\x93\x43\xbb\x4f\x3f\x18\x75\x7c\x34\x03\x3e\xea\xf5\x03\xa4\x42\xa2\x0e\x84\xdf\x36\xfe\xe9\xb3\x4f\xc4\x38\x21\x32\x2e\x3d\xa9\xf6\xf8\xcb\x78\x49\x84\xff\x66\x42\xcf\xb2\x82\x42\x08\x18\xe1\x7e\xea\x84\x82\x95\xf4\xf5\x5a\xb5\x68\x22\x62\xeb\x17\x9d\x68\x5c\x75\x13\x61\x7f\xe9\xcf\xa5\xae\xa8\x74\x95\x94\xb6\x02\xfd\xc3\x78\x19\x85\xb9\xad\x08\xdd\x6c\xa6\xb7\x92\xc9\x82\x26\x6e\x4a\x9e\xe9\x69\xcf\xa9\x4c\x59\x91\xc8\x7a\x56\xff\xde\x85\xdd\x0f\x09\xba\x59\x75\x5e\xbc\xe7\x00\xb5\x11\xbe\xa5\xe5\x7a\x49\x45\x7a\x59\xa8\xc2\xf8\x8a\xca\x6d\x67\x33\x5d\x39\xdc\x2a\x59\x7f\xbd\x1d\xc8\xf7\x1e\x8e\xa7\xdf\xd9\x8e\x57\x52\xb5\x43\x87\xef\xa8\xb8\xb6\xc0\x40\x87\x4f\x78\x39\x2f\x58\x26\xed\xfb\x6b\x2e\x9f\xf3\x75\x99\xdb\xf7\xe7\x5c\x5c\xb2\x3c\xa7\xa5\xfd\xf0\x63\x99\xae\xe5\x82\x0b\xf6\x4f\xea\x32\x3d\xba\xe4\xc2\xd5\x60\xc2\x4d\xd8\xd7\x17\xe5\x75\x5a\x30\x97\xd5\x9a\x36\x6b\xce\x85\x61\x85\x08\x3f\x4a\x1e\xdd\xf6\xbd\x77\xdb\x78\xe0\x27\xb7\xb5\x4b\xe7\x86\x2c\x6c\xbb\x96\xd4\xf0\x1d\x3a\xe3\xa0\x1e\x8c\x0b\x5c\x6e\x36\x12\xd5\x1e\x76\x69\x8f\xb4\xd6\x8d\x4d\x9b\x14\x84\x85\x51\xec\x27\x4c\x61\xb8\xa2\x6e\x06\x53\xe2\xfd\x55\xf8\xdb\x2c\xa8\xac\x39\x46\x15\x59\xe9\xf6\xb1\x81\xd9\xa0\x31\xe3\xf1\x8d\xc7\x02\x47\xef\x17\xb4\x6b\x8e\x95\xae\xa0\xbf\x81\x2d\x1e\xe0\x30\x19\x5f\x2e\x99\xec\x5e\xd2\x2c\x55\xc7\x05\x93\xdd\xcf\x69\xd5\x65\x7a\xfa\x81\xd5\x1e\x2c\x45\x8a\xd3\xad\x2e\xf8\x19\x22\x63\x78\xbb\xd5\x68\x73\xce\x48\xb6\xa4\x79\x97\xaf\x25\xd4\x1e\xac\x7b\x85\xab\xad\xda\xfd\x0c\x91\xe1\x19\xdd\x51\xbb\xea\x7d\xaa\x00\x8b\xea\xde\x7b\x40\x56\xe0\x62\x7b\xfa\x5c\x72\x64\x3c\x5e\xde\x51\x37\xab\xba\x6b\x0f\x8e\xa1\xfe\x6d\xc0\x5e\xe3\xf5\x56\x33\x5b\xb9\x74\x6b\xd9\x57\x5a\x9b\xdb\x6d\x04\x4d\xb5\x36\x55\x86\xb3\xad\x76\xc2\x2c\x91\x31\xca\xd8\x6a\x24\xe3\xeb\x22\xef\x06\xd8\xb0\xa2\x62\xd6\x22\xd3\x42\xdd\x70\x3b\xe7\x38\xdf\x6a\x28\xc8\x11\x99\x68\x2d\x77\x0c\x46\x5f\x2e\xdd\x7c\x4d\x15\x12\x9d\x76\x33\x73\x80\x40\x73\xe1\x69\xb2\xc0\x8b\xad\xe6\x82\x1c\x4e\x6f\xe5\xdb\x9b\xab\xe0\xf4\xea\xda\x08\x65\xe1\x71\x36\xc7\xf3\xad\x06\xbd\xf4\xe8\x6b\xd7\x34\xd8\x3b\xed\xbf\xa6\xb7\xf8\xc1\x77\x5f\xd4\x7f\xdc\x5d\x13\x90\xba\xdf\x7c\xfe\x07\xa5\xf4\xd9\xbf\xe3\xf4\xb5\x88\x80\x69\x5c\x9f\x3a\xb1\x65\x93\xbf\x73\x48\x77\x12\x0d\x2c\xc3\x1a\x37\x2c\x5b\xed\x19\xcd\x70\x63\xf5\x8b\xd6\x3e\x69\x7e\xfa\x19\xaf\x68\xa9\x16\x96\xbe\xc8\x9f\x73\xe1\x27\x38\x64\x3a\x81\x89\x24\x17\x1e\x7e\x1d\x4b\x84\x7d\x0e\xa6\x2e\xe1\x33\x27\xf5\x17\x9f\xeb\xa8\xbf\x64\x3c\x2d\x68\x95\x51\xcd\x57\xfb\xf7\x35\xad\x64\xa5\x66\xcc\xb2\x6c\x4d\xa7\x04\x5f\xaf\x74\xb1\xca\xe3\x63\xd9\x9e\x4c\xe5\x0c\x57\x0b\xb5\xcf\xde\x52\x45\x31\x9b\x06\x14\x65\x78\x30\x0e\x52\xd4\x14\x98\x42\x07\xce\xe1\xb8\xce\xf0\x38\xcd\x3e\x5d\x81\x36\xd3\x76\x25\xa3\x3d\x79\xa0\x3a\xc8\x00\xfc\x0e\xbb\x76\xe2\x6b\x50\xfc\x5b\xc5\xcb\x41\xba\x62\x21\x20\xb7\x85\x14\x5f\x01\xed\xdd\xc9\x82\x56\x72\x5b\xbc\xa1\xee\xd7\xff\x18\xe4\xef\x84\x4c\x46\x4a\xfb\xf9\x4e\xb0\x6c\xc6\xfb\xd1\x24\x3f\xe1\xa5\xa4\xa5\x7c\x7f\xb3\xa2\x49\x94\xae\xb4\x62\x34\xe3\xe5\xe1\x75\x99\x0f\xd3\x15\xeb\xeb\x98\x43\xe9\x6f\xe9\x17\x1d\x92\xa1\xd2\x03\x01\xe4\xc2\xa8\x2e\x00\xbb\xae\x5a\x43\x98\x40\x1c\xf8\x2a\x04\x91\x26\x15\xd5\xf0\x51\x96\xd1\x95\x24\xed\x0f\x9b\xcd\x1d\x6d\x96\xf5\x1e\xa8\x1c\x3b\xa8\x6c\x26\xd5\x48\x60\x55\x57\x1a\xc6\x61\x43\xf8\x82\x40\xa5\x91\x3f\x34\x54\x8e\x2a\xa0\x06\x17\x33\x1c\xfd\xf9\xd9\xfb\x08\xdf\xaa\x55\x4c\x6e\xe7\xac\x90\x54\x24\xb7\x2c\x4f\x84\x21\x81\x70\x04\x7a\x6c\x3b\xf9\x72\x22\xe4\xcb\xe5\x69\xb5\xa0\x22\x60\xcc\x41\x10\x62\xc7\x9a\x43\x60\x2f\xbd\x6e\x73\x4e\xdd\x40\xe2\x11\x16\x3b\x68\x72\x93\xc9\x72\xea\x77\x8e\xb4\x1c\xb2\x5c\x0d\x36\x10\x49\xec\x18\x30\xc7\xd1\x0f\x8f\xde\x3f\xf9\xde\x0e\x99\xd5\x86\x5b\x68\xe1\x8b\x7d\x6d\xf7\x00\x88\x7f\xed\x0a\xd8\xb3\x3d\x0c\x99\xf7\xbb\x2e\x8d\x3f\x66\xfb\x00\x8f\xca\xc0\x32\xc9\xf7\xed\xa7\x68\x6d\xa3\x6b\x34\x3c\xb6\xdf\xfe\x66\xd4\xfc\x76\x25\x96\x6a\x52\xb7\xe4\x8e\x6e\x45\x3b\x9a\x17\x49\x87\xda\xd1\x94\xe5\x87\x19\x47\xd3\xeb\x0a\xbb\xad\x01\x3b\xc8\xb0\x29\xb9\xbb\xa3\x3c\xde\xab\x61\xd7\x0e\x35\x4a\x1b\x73\x17\xb6\x89\xf5\x7a\xac\x45\xc3\x4e\xf6\x97\x63\x28\x61\x41\x90\x53\xec\x87\xef\xd6\x26\xcf\xb0\x4a\xef\x17\x82\x7f\x2e\x7d\x46\x29\x54\xdd\xeb\x45\xd1\x01\x21\x12\x71\x12\x64\x6c\x3c\xf6\x98\xc0\x79\x11\x21\x26\xb2\xc4\x3b\x18\x2a\xe2\x10\xd5\x4e\x04\x68\x70\x53\x0a\x10\xd9\x76\x99\xcd\x66\x04\x5f\x2a\x5b\xc3\x96\xcd\xe6\xad\xe6\x02\x27\x25\x5e\x8b\x22\x61\xd8\xeb\x51\xc2\x6b\x42\xf1\xad\x2e\x9b\xa4\x35\x91\xb8\x22\x5f\xa1\x80\x7f\x35\xc7\x8d\xc1\xaa\x92\xee\x9f\x6e\xcb\xba\xfb\xa7\x5b\xa6\x1e\x7c\xb3\x89\xa2\xfa\x57\xcb\xfa\x73\x15\x3b\xfe\x95\x1e\x5f\x83\x67\xc7\x15\xaa\x41\xf9\x40\x0f\x53\xc1\x02\xdf\x86\x05\x3b\x3c\xa3\x0a\x02\xb0\x00\x9e\xa5\x9a\xa1\xe0\xd2\x82\x46\x8a\x6e\x39\x49\xed\xd2\x73\x3f\xf0\x2b\x0d\x7c\x45\xaf\xab\xc4\xf1\xd6\x9b\x09\x4d\xa8\x37\xbb\xd8\x34\x97\x64\x31\xb5\x4d\xfb\xc4\xe2\xfa\x5b\xab\xd4\xdf\xde\xd3\x2f\xd2\x55\x19\x8f\x70\xb9\x93\x07\x8c\xb4\x5a\xd7\xa3\xa2\x68\x25\xc4\xc8\x6f\xdb\x33\xf1\x6f\x58\x91\xe0\xec\x75\xce\xc5\xb3\x34\x5b\xc4\x20\x86\x25\x17\xe0\xc5\x9d\x22\x2c\x9b\xb2\xb9\x09\xfe\x42\x15\x85\x99\xd3\x52\xb2\xb4\xa8\x48\x54\xa5\x4b\x3a\xe0\x82\x5d\x29\x0c\x91\x82\x3f\x75\xa4\x20\x4f\x9d\xff\x20\xd0\xd1\xa0\xe4\xc9\x18\xec\x27\xa8\xcd\x9c\x39\x9f\xe8\x4d\x15\x9b\xd2\x96\xd3\xeb\xf4\xb8\xd6\xa2\x70\x2e\x01\xa2\x49\x84\x2e\x06\xe3\x49\xd4\x8b\x92\x68\x12\x75\x20\xb5\x4f\x40\x40\xf4\xa7\x5b\x98\x9f\x5d\x0c\x52\x64\x2b\xaf\x7f\xad\x75\xd0\xa6\x7f\x81\xcf\xa8\x6b\x98\x50\x08\x7e\xae\x25\x21\x9a\x43\xcd\xe6\x37\x36\x35\x31\xa9\xfa\xd5\x4d\x71\xad\xe9\x1b\xd9\x46\x2c\x5a\xd8\x32\xde\x89\x68\xe8\xab\xe1\xab\x48\x86\xba\xe8\xcf\xba\xd9\x42\x81\x87\x24\x6b\x39\x1f\x3c\x8c\xf0\x3c\xad\xe4\x25\xe7\x32\xd1\x67\x57\xc6\x97\xab\xb5\xa4\x79\x7c\x7b\x45\x65\xdc\x12\x12\xda\xbc\x93\xf0\x35\x09\x5f\x1b\x71\xe0\x9b\xcf\x25\x15\x3a\x7e\xe4\xb0\xe0\xfc\xd3\x7a\x15\x47\x8a\x4e\x62\x19\x4d\x6c\xee\x08\xd5\xb8\xa2\x72\x87\xf0\xd3\xd5\x27\x15\x8d\xb0\xae\xe8\x73\x75\x97\xb4\xfb\xe9\xab\xd5\x68\x91\xce\xce\xe6\x8d\x08\xed\x2d\x04\x08\x34\x4a\x68\x91\x22\x11\xd9\x55\x42\xcb\x6b\x26\x78\xb9\x84\x48\xe8\x66\x45\x0e\x0e\x62\x00\x7b\xa8\xec\xd9\xeb\x9f\x7a\x3d\x88\xab\xd4\x7c\x18\x7e\xfc\xcb\xdf\x7e\x7c\xf6\xf6\x97\x8f\x2f\x5e\xbf\x7f\xf6\xe7\xb7\x8f\xde\xbf\x78\xf3\x1a\x02\x75\xf4\x7a\x07\x70\x97\x57\x5c\x48\x0f\xc0\xb6\x64\x2f\x1a\xa2\x7d\x8d\x69\x60\xb7\x9f\x1f\x39\x43\x23\xcf\x99\xfa\x6d\x0d\x0e\x50\xb4\x29\xbd\x35\x4a\x04\x6b\xc4\x72\xca\xa6\x7c\x36\x23\x54\xff\x75\x67\xe2\xdd\xe8\x9c\x2f\x09\xfe\x5d\x08\x9d\xc5\x70\x02\xa4\x48\x4b\xef\xcb\xaf\xe2\x79\x5c\xe1\x73\xf3\x46\x2f\x60\x77\xdb\xb6\xb6\xbb\xf1\x2e\x45\x20\x99\x3e\x81\x5b\x0d\x4f\xda\xab\x8e\x76\x56\x66\x94\x58\x4e\xac\xc5\xc0\xbc\xae\x28\xfc\x4b\x93\x81\x81\xd0\xf4\xab\x2d\x82\x92\xa8\xd6\xdb\xf1\x50\x6f\xcd\x95\x0e\x17\xbc\x51\xe2\x68\x43\x82\x40\x7e\xbf\xca\xa0\x5f\xc2\xf5\x2b\x14\xd6\xff\xde\xde\x99\x75\xfa\xcf\xeb\xe3\x7f\x3e\x51\xc0\xf2\x2a\x11\xb5\x6d\x2b\xd0\xc8\xf0\x63\x9d\xb3\x1c\xcc\xd6\x5d\x3b\x0e\x10\xda\xfa\x35\x86\xa9\xef\xfa\xc6\x31\xc3\x12\x07\x5a\x4f\xc1\xa0\x85\xee\x8e\x69\xbf\xa5\xdc\xf1\x47\xf7\xa0\x51\xa0\xda\xd3\x87\xac\xa5\x29\x82\xc5\xd7\x67\x1c\xe0\x41\xe0\x50\xcd\x4a\xed\xab\xf0\x1a\x0c\x09\x1e\xb1\x7b\x65\x7e\x78\xf3\x2e\xdc\xc7\x5b\xe4\x94\xf0\xc8\xa9\xfd\xb5\xe3\x5b\x70\xf7\x27\xd4\xac\xa5\x77\xf4\x9d\xab\x8e\x7f\x8d\xaa\x4a\x71\xf4\xc3\x8f\xe1\x9e\xce\x77\x68\xba\x18\x66\xfe\x90\xe5\xdb\x55\xdc\x31\x7b\xaa\x07\x81\xc6\x18\xc2\xd1\xd3\x67\x2f\x9f\xbd\x7f\xa6\x16\xe4\xa3\xba\xda\x57\x2f\x9e\x3e\x17\x7c\xd9\x56\xfc\xc2\x77\xad\x0a\x00\x8c\x44\x46\xa8\x0e\xca\x58\x9c\x04\xee\x0e\xc0\x37\x41\xd3\xd9\x9c\x6e\xe9\x77\x71\x44\x08\x49\x27\xa1\x93\x84\x28\x4a\x62\x41\x38\x2e\x49\x34\x61\x39\x89\xfa\x29\xde\xa5\xbc\x60\x50\x96\x06\x8b\xa1\x65\x5e\xfd\xcc\xe4\x62\x32\xd0\x11\xc1\x2d\x2a\x55\x62\xe7\xfc\xc1\xca\x3a\x51\x22\x5c\xf6\xb8\x84\x98\x6e\x61\x1f\x42\x81\xbd\xf3\x72\xd3\xc4\x34\x42\xa8\xa5\x77\xb3\x4c\xbf\xfc\xf8\xf6\xe5\x4b\x1d\x1b\xe1\x68\x74\xef\xe1\x3e\xbe\x97\x2f\x43\x51\x28\xff\xab\x74\x85\xf5\x91\x68\xa7\xdb\xaf\xaa\x23\x1d\xca\x2a\xc9\x85\x73\x39\xbe\x6b\xd5\x3a\x10\xd8\x34\x66\xe0\x6d\x48\xe1\x22\x0c\x4f\x67\x08\x6b\x8d\x26\x66\xe2\xbd\x49\x54\x5b\x7f\xb1\x9e\x6a\x51\xd0\x46\xdc\x76\x46\xab\xb3\x8f\x70\xba\xbb\xe1\xe9\x68\x86\x14\x6d\x34\x6d\xae\xed\xa6\xd3\xd4\x74\x5a\x92\x1d\xea\x7d\x74\xc8\x72\xe7\x0b\x80\x75\xec\xec\xf6\x79\x5f\x82\x9b\xc6\x58\xb5\x5a\xe9\x8e\x4f\x67\x08\x61\xde\x27\xd2\xc8\xb4\x2a\xb7\x14\x9d\x6a\x5a\x9a\xa8\xad\x10\x68\xbe\xaa\x51\x2c\x31\xc3\x51\x8f\xe5\xd5\x77\xf7\x1f\x7f\x77\xff\x29\x89\x9c\x5a\x85\xd7\x31\x6e\x0b\xa9\x52\xbc\xc6\x2d\xca\xca\xd1\xb6\x6c\x1e\x1b\x49\xef\xbb\x75\x96\xd1\xca\x90\xbd\x4d\x68\xd9\x4e\x93\xc3\x88\x78\xda\x39\x80\xb4\xf3\xc5\x3f\x71\x69\xe4\x87\xce\x7b\x2f\x48\x60\xad\x26\x36\xe4\x09\x7b\x82\xec\x39\x63\x99\xbc\xf9\x53\xa0\x3a\x69\xfe\x4a\x4b\xef\x5c\x87\x3b\x46\x03\x98\x6a\x0d\xe0\xee\xbd\xd1\x38\x09\x3a\xb2\x25\x64\x89\x39\x4e\xb5\x6e\x69\xf7\xde\xe8\x38\xcc\x1c\x4a\x4a\x82\x9c\xf7\xc2\x9c\x81\xa8\x23\xc8\x78\x1a\x66\x0c\x84\x14\x3a\xa3\x55\x4f\x55\x84\xd7\x05\xb9\x3f\x1a\x85\x53\xe7\x49\x19\x20\x7f\x1d\xa4\x9a\xc2\x3a\x05\xbb\x65\x4a\x28\xb9\xa0\x17\xe4\x68\x34\xea\xf5\xe8\xf9\xf1\x68\xb4\xd9\x1c\x83\x4a\x18\xc5\x6e\xa1\x54\x9e\x7b\x47\x47\xf0\x11\x0e\x52\xff\x0a\x30\xa8\x1b\xce\xb6\x54\x03\x2d\x1a\x1f\x21\x9c\x93\xdb\xb5\x28\x12\x8a\x0d\x2f\x41\xd6\x78\x41\xf8\x70\x8b\xf9\xe9\xce\xfd\xcc\xd2\x1d\xaa\x02\x83\xd1\xc6\x0b\xa3\x06\x47\xc9\x45\xcc\x08\xc5\x70\xf9\xec\x52\xb8\x53\xf7\x4f\x8e\x50\x93\xfd\x56\xdb\xb0\xf2\x4f\x9b\x0d\xdd\xe2\xb7\x18\xe5\xae\x36\x43\xac\xd9\xd5\x45\x2c\x50\xe7\x68\x34\x02\x8d\x26\x4d\x89\xf7\x7a\x72\xab\x9e\x49\xcc\x7d\x8e\x02\x91\x58\x92\xe0\x8b\xd5\x77\x43\x49\x2b\x67\x89\x15\x69\xdb\xc4\x97\x77\x40\x2d\x9b\xc8\xa6\x7a\x86\xc0\x7f\x6c\xcc\x31\xc5\x4c\x5f\xf9\x39\xda\x8a\x36\xdd\x42\x5a\xa0\xf7\x26\x4f\xea\xe0\xdf\x56\x92\xa3\x1a\x25\xa0\xd7\xb6\xc5\xcf\x6a\xfb\xef\x5a\x0c\x2b\x0d\x33\x41\xac\xb1\xa6\xa1\x7d\x1d\x58\xef\xed\x80\xfa\x95\xa3\x8e\x6e\x5a\xac\x8d\xce\x32\x8c\x8b\xaa\x2c\x78\xa1\xa7\xc9\xaf\xfa\x9b\x1a\x94\xa8\x13\x70\x77\x48\xa3\x0c\xb9\x6b\x96\x15\xc9\x08\x3f\xdf\xd3\x2f\x32\x98\x71\xee\x4d\xd6\xde\xbe\x4a\xe8\x2b\x1f\x7e\x84\xcd\x01\xde\xb3\xa2\xa7\xef\x92\xee\xdb\x67\xef\xde\x1b\x26\xd8\xff\xa2\x92\x4c\x20\x61\xc9\xbb\x51\x9f\x2a\xb4\x42\x7d\xb4\xc0\x4d\xd1\xad\x66\x83\x6a\x5c\x05\xd2\xcb\x56\x06\x05\xc5\x7c\x5b\x17\x11\xb2\x75\x73\x4e\x2b\x90\xc2\x56\x94\x2e\x55\x23\x97\xb4\x6b\xe3\x18\xb3\xb2\x7b\xc3\xd7\xa2\x9b\xae\x56\x8d\x12\x22\xbf\xa6\x42\xb0\x1c\xc4\xf4\xd7\x2c\xed\xfe\x9a\xe6\xf9\x1b\xf1\xc6\x7c\x7d\x97\x96\xf9\x25\xff\xf2\x67\xd0\x5c\xac\x7e\x85\x88\x93\x0b\xda\xb5\x94\xba\x11\x82\x4e\x22\xd4\x29\x9b\x0e\x07\xdb\xd5\x51\xc1\xb0\x4f\xb5\x1e\xa5\xd1\xcf\x74\xaa\x87\x31\xf0\x6c\x30\x45\x9d\xff\xd7\x34\x2c\xcd\x3a\xa8\xee\xee\x3f\xc1\x76\x1d\x47\x14\x25\xed\x02\x76\x76\x86\xac\x7a\x9e\x56\xf2\x31\x30\x3d\x4c\xd9\xd6\x62\x1a\x4e\x4a\xf8\xb1\xde\x96\x07\xa1\x5b\x2b\x02\x49\xab\x8a\x5d\x95\x71\xeb\x24\xc5\x0a\xaf\x53\x07\xaa\x51\xd1\xd8\x56\xd1\x36\x0c\xc3\x08\x75\x9c\xa9\x4e\x39\x11\x96\x1d\xd9\xaa\xbc\x56\xb8\xb0\x63\x55\x26\xee\xe7\x66\x13\x37\x45\x6e\x0d\x7e\x04\x4e\xb7\x1b\x16\xd4\x66\xa3\xc7\xb4\xcd\x9c\xea\x04\xcc\xf6\x9d\x13\x1c\x0b\xe0\x92\xf5\x7a\x40\x05\x01\x72\xaa\x46\x06\x11\xe8\x4c\xbb\xd3\xc8\x54\x39\x50\x75\x46\x33\xeb\x31\x12\x92\x4c\x3f\x06\xd2\x24\xc5\x7b\xd3\x08\x43\x08\x0b\x92\x1b\x1a\x0d\xa1\xe4\x8e\xb6\xc3\xe9\x11\xf8\xd6\x1b\x6f\x02\xcc\x1f\xd1\x62\x99\x6b\x6e\x9f\x4a\x27\x91\x96\xb7\x51\x3d\x49\x5f\x24\x91\x86\x2b\xda\xb4\x44\x6d\x4b\x3a\x61\x0f\x27\xb1\xb1\x17\x19\x5e\x82\x2b\xde\x77\xb4\xcc\x03\x43\xe9\x90\x77\x6a\xd7\xcf\x61\x72\x82\x5c\x80\x1b\x3a\x03\x6a\x9a\x21\x1c\x0b\xec\xb2\x4e\xc5\x0c\xc2\x3f\xd6\x6e\x56\xb0\x50\x5b\x93\x34\x60\xaa\x50\x59\xf8\x86\xb0\x30\x9b\x46\xdb\x2b\xa8\x73\xe9\x9b\x76\x42\xa8\x6a\xbf\x23\xb3\xd0\xdd\xd3\x04\x4b\xc6\x0b\x30\x20\xfb\x6a\x6e\x6d\x9c\xa0\x0e\x96\x96\x8d\x81\x39\x66\x0c\x43\x98\xd6\xbf\x82\xe2\xf3\xe1\x3f\x16\x52\xae\xaa\x96\xd9\x01\x92\xe2\xe6\xd6\xcb\x7f\x78\xe8\x4c\x0e\x8c\x60\xa0\x44\xb7\x5b\x87\xd4\x2f\x7c\xdd\x4d\x05\xed\xae\x2b\x56\x5e\x69\xf0\xee\x3e\x4d\x65\xda\xfd\xcc\xe4\xa2\x5b\xf2\xae\xea\xdb\xf6\x31\xac\x2f\x85\x61\xf7\xfd\x82\x55\xdd\xcf\xac\x28\xba\xa9\x94\x74\xb9\x92\xea\xc8\x5a\x57\x14\x8e\x2b\x28\xca\xe7\xf0\xdb\xce\x61\xd7\x8c\x19\x77\x3f\x2f\x58\xb6\xe8\x32\x7d\xe4\x6b\xee\xe6\x5a\xd0\xbc\x3b\x37\x07\xa3\x89\xc6\xed\xd5\xc2\x2a\x5b\x7a\xd8\xfd\xa1\xa0\x0a\xeb\xac\xa8\x74\x4d\xfd\xbc\x60\x92\x16\xac\x92\xdd\x95\x11\xf7\x41\x5d\xb6\xcf\x1e\xe7\x74\xf8\x5b\x35\x6c\x7a\x04\x33\x91\x74\xa3\x7e\x69\x55\x27\x91\xd3\xb7\xa6\x35\xde\x71\xdf\x36\x66\xd9\x20\xbc\x93\xbe\x21\x01\xb5\x62\x18\x81\x6e\x3d\xad\xed\xdd\x48\x7f\x62\x8e\x48\x72\x21\x76\x84\x8c\x11\xbd\x9e\x30\x04\xc4\xc4\xfe\x48\xa6\x56\xce\x12\x45\x7d\x8a\x8d\xa4\xea\xfd\x82\x76\x2f\xd3\xec\x13\x2d\xf3\xae\x46\x05\x72\x9a\xeb\x25\x4c\x4b\xa3\xe7\x63\xe5\x57\x51\xd4\x17\xf5\x0c\xef\x23\x30\x92\x3d\x48\x09\xb8\x5e\xda\x3a\xa4\x22\xf0\x5d\xd4\x0d\x8e\x35\xa7\x15\x4e\xbc\x18\x3e\x0a\xf5\x54\xc3\xb1\xc1\xba\xef\x8f\x26\xd1\xf4\xcd\x92\x49\x49\xf3\xae\xa6\x82\x6f\xba\xdf\xbf\x7f\xf5\x72\x16\x25\x02\x4f\x23\x0f\x12\xad\xbc\x2d\xea\xc7\xa5\x91\xb6\x40\xb8\xb2\x12\xb6\x72\x3f\xea\xea\xf6\x68\xde\x4d\x15\x5e\x82\xa3\x1f\x34\x96\xda\x8d\xc1\xa6\x16\x45\x98\xcd\x0c\x11\xff\xa1\x54\xd7\xa5\xc7\xb9\xf5\x25\x48\x8a\x2a\xd1\x02\x43\xa3\x3c\x9f\x88\x9a\x50\xad\xc9\x3b\x34\x9f\x88\x40\xcd\xa2\x06\x32\xf1\xc5\x3e\x99\x78\x4e\x2f\xd7\x57\x5f\xd3\x8a\xd2\x99\x2a\x2a\xd7\xab\x3f\x5a\x21\xea\x4e\x85\x25\x35\xc1\x06\xc3\x73\xea\x21\xa0\x48\x6d\x30\x03\x56\x42\x6b\x46\x10\x12\x47\x90\x16\x21\x7c\x45\xe5\x73\xd0\x83\xa8\x40\xbb\x66\x7a\x5b\xa6\x4b\x9a\x44\xac\x7a\x4d\x3f\x2b\x48\xab\xb2\x24\x52\x3f\x6b\xec\x52\x5e\xf1\x9c\xcd\x19\xcd\x6d\xb2\x7b\xf7\xf2\x3c\x29\x68\x5a\xda\x0c\xfa\xa5\x9e\x29\x34\x72\x49\xdf\xf3\x27\x45\x5a\x55\x9e\x66\x6b\xfb\x58\x35\x7d\xd3\xdc\xab\xe7\x5c\x00\x3a\xf2\x59\xed\xc5\x57\xea\x8b\x82\xcd\x0a\x24\x82\xb7\xbb\xd1\x0c\x3b\x36\x60\xbd\xf8\x6c\x48\x35\x49\xd6\x8b\x13\x28\x6b\x28\xe8\xaf\x5e\xa5\xab\xe7\x5c\xa0\xb8\x44\x9d\xb4\x91\x38\x2a\x54\x9a\x5c\x68\xa5\x71\x68\x5b\x35\xfb\x62\xfe\x63\x59\x51\x5a\xc6\x25\x4e\x31\xc3\x8a\x06\xe0\x08\x22\x76\x6f\xb5\x43\x24\xb9\x88\xef\x28\xad\x1b\x37\x55\x60\xa6\x85\x79\x25\x96\x2e\xac\xa2\x5a\x8e\x5b\xee\x73\x40\xb4\x13\xd8\x1d\x4d\x31\x9c\xfa\xa2\x52\xa9\x4a\xa6\xc0\x54\x92\x60\xfa\x6f\x98\xbb\x82\xc2\x59\xfb\x0a\x76\x9e\x7a\x5d\xf2\x6b\xaa\xc1\x30\xae\x1a\x05\xe0\x5d\x79\x57\xeb\x6a\xe1\x72\xe2\xca\x2c\x47\x30\x28\x47\xac\x9a\x48\x9b\x07\x0a\xbd\x03\x3f\x25\xb1\x70\x8e\xef\x69\xb3\xa8\x02\xe1\x4a\xdf\xe9\x9f\x45\xba\x72\x2b\x0b\x81\x70\x3b\x86\xd9\x03\xc9\xfc\x12\x30\xfc\x26\x07\x78\xd2\xc7\x65\x3c\xad\x66\xe0\xc0\x56\xb5\x00\x1e\x12\x6a\x9c\xf1\x62\xbd\x2c\x5f\x03\x98\x3d\x55\xc0\x47\xc9\x45\xcb\x9c\x6e\xc5\xa4\x56\xa4\x0b\xbe\xaf\x4b\x85\x7b\x64\x5c\xa8\x83\xbf\x31\x83\xf8\x78\x78\x85\xa3\x6e\x64\xed\x7b\x90\x69\xa0\xda\xb2\xd9\x73\x1b\xc7\x6d\x8b\x17\xb9\x02\x79\x41\x46\x86\x5f\xb8\x8d\x79\x52\x1c\xa5\x52\x0a\x76\xb9\x96\xb4\x8a\x90\xbf\x84\x00\x7b\x6c\x1e\x8b\x7e\xff\xa2\x1c\xba\x5c\x2f\xd9\x92\xb5\x02\xfd\x1b\x5e\x54\x7b\xe0\x31\x03\xc7\x80\xe0\x78\x01\x7a\xc6\x74\xb7\x78\x0d\xe0\x50\xab\x8d\x6f\xb8\x9d\xfa\x6c\x62\xf3\x26\x96\xad\x39\xdc\xcf\x8f\x1a\x57\xd9\x1f\xe1\x60\x53\xd7\x43\xca\x4a\x2a\xfe\x4a\x6f\x02\xdf\x36\xc2\x44\xbb\x84\xc0\x73\x45\x12\x0f\xff\x0d\x1d\xa2\x8e\x31\x8a\x2b\xd5\xc1\x4b\xca\xe9\x78\xd6\xdc\xc7\x86\x37\x26\xdd\x49\x34\x5c\x51\xfa\xe9\x51\x51\x80\x4d\xac\xeb\xdc\x13\x18\xd6\x4f\xea\x10\xf4\x84\x99\x23\x2c\xc8\x2d\xcb\x93\x60\x2a\x59\x1e\x35\x30\x4c\x87\x34\xcd\x16\x8f\xec\xbc\xc5\xa5\x9e\x4e\xd9\xef\x5f\x68\x2e\xfc\x9e\x19\x15\xd3\x72\x46\xfc\x6a\x4b\xf0\x4d\xe1\xf5\xe8\xaf\xf4\xe6\xb3\x9e\xb5\xc6\xa6\xc9\xa1\x86\x8f\xe2\xa9\xea\xc7\x0c\xed\xeb\x07\x25\x17\xc2\xf1\x31\xb1\x08\xb1\x62\xf8\xee\x37\x2e\x10\x0a\xd7\x4a\x1f\xd5\x7a\x3a\x14\x68\xc7\xb7\x70\x50\xeb\xd8\x79\xb1\x39\xb5\x11\x6e\xce\x68\x9b\xb2\x48\xab\xa7\x4c\xc8\x9b\x47\x1e\xbc\xf5\x7a\x07\x5b\xe5\xe0\xa8\x4e\x0e\xee\x28\x55\xa3\x60\x75\xe0\x74\x36\x13\x11\x5d\x16\x69\xf6\x29\x6a\xc6\xee\x57\x3e\x91\x24\xba\x12\x94\x96\xd1\xdd\x7d\x8a\xa1\x9e\x35\xf8\x2c\xae\xb1\xd9\xfb\xbe\xad\xb2\x7f\xeb\x3d\x8a\x1b\x4b\x60\x33\xf7\xd8\xde\x5d\xbb\xea\x9f\xa9\x8b\x7e\x6b\x45\x4a\xb7\x22\x9d\x46\xb8\xd5\x29\x9b\xfd\xd8\x0e\x23\xca\x7d\xe3\x4f\x19\x33\x38\xc1\x6c\x1f\x11\xaa\x0d\x6f\x26\xcd\xf3\x37\xba\xff\x42\x41\x92\x3a\xe7\xcd\xe2\xfb\xfa\x03\x86\x8f\x63\x0e\xe3\x20\x7b\x8d\xd4\xff\x2d\xb6\x1a\xba\x15\xed\x6b\xa1\xae\xbf\x4d\x2b\xd6\x47\x4f\xee\x36\xc0\xfa\xe3\xb1\x17\xef\xb2\x25\xe5\x3e\x6c\x46\x51\x34\x3f\xd3\xf4\xd3\xab\x74\x15\x84\xd3\xb6\x30\x66\xb6\x86\x9b\x14\x5d\x98\x10\x22\xf5\x21\x63\x44\x34\x5a\xa4\xa2\xba\xad\xc0\xc8\xca\x4c\xad\x9a\x4b\x23\x85\xda\xba\x4b\x3b\xdf\x94\x6b\x87\x65\x63\xa9\x75\x3e\x1a\x99\xca\x22\x55\xf4\x2f\xd8\xb7\x6c\x36\xfa\x96\xd2\xaf\x10\x02\x84\x79\x16\x38\xd4\x84\x99\xe0\xc4\x5c\x22\xc1\x8a\xa5\x32\x1d\x38\x45\x4b\x56\x32\x69\xf4\xc0\xd1\x6d\x5d\x7b\x4b\xce\xf7\x2d\x39\x9c\xc8\x7b\xbc\xb6\xdc\x61\x76\xf7\x0d\x20\xb1\xe5\xca\x25\x5c\x30\xa3\x14\x3b\x1c\x0e\x15\x42\xd2\x9a\xb1\x29\x20\x0b\x33\xe2\x18\x32\xc7\xa0\xe8\xe2\x3c\xb1\xef\xb0\x60\x95\x9b\xcd\x16\x65\x25\x7b\x3d\x73\xc9\x48\xd4\xeb\x6d\x05\x5a\x57\x28\xff\xb6\xed\xa7\x2b\x53\xf6\x7a\x51\x63\x3d\x10\x31\x08\xbd\x1e\x59\x12\xd6\x7d\xdb\x6c\x1c\x94\x95\xa8\x8e\x25\x9a\xd0\x18\xe9\x71\x25\x54\xff\x35\x20\x56\x06\x9c\x6a\xb1\x2b\xae\xe8\x24\x16\x84\x62\x6a\xa0\x1e\x25\x82\x88\xcd\xe6\xb6\x36\x1c\xb3\x5b\xe0\xa1\x51\xcc\x2a\x77\x42\x25\x07\x23\xfc\x89\x95\x79\xd2\x20\x0b\x11\xe6\x9a\x31\x97\x88\x3a\x44\x2b\x42\x4d\x2a\x1a\xea\x6f\xb3\x52\x52\x51\xa6\x05\x60\x52\x3b\x98\xf5\x9e\x7b\x86\xa1\x70\xb0\xae\x11\x70\x05\xce\xaa\x4b\xb1\x00\x35\x47\x8a\x26\x25\xa8\xf6\xd9\x2e\xc1\x9d\x14\x53\x94\xb4\x01\x64\xb7\x35\xb2\xdb\x65\x50\xae\xf1\xd3\xec\x7f\x1d\xa6\xab\x55\x71\xa3\x19\xdb\x0e\x35\xb1\xac\xc5\x30\x6b\xa3\x80\x64\x6d\xda\xe8\x5e\x0d\xaf\x60\x16\xd4\xb6\x0c\x2f\x09\x63\x45\x87\x14\x81\x9a\xc6\x25\x1c\xc0\x7a\x73\x96\xbb\xc2\x88\x94\x98\x75\x76\x2d\x72\x49\x28\x66\x6e\x91\xe3\x92\x48\xcc\x08\x85\x58\x98\x21\x88\xb2\x5e\x2f\x66\x44\x34\xc2\xc4\x57\x56\x66\x1f\x33\xd7\xb4\x06\x0b\x86\x59\xf5\x96\x16\xa0\x47\x56\x2d\xd8\x4a\x41\x86\x05\x84\x92\x94\x0a\x8c\x0c\xa4\x5c\x3a\xc5\x0e\xac\x4f\x14\xa3\xe9\xd1\x55\x5f\x3e\x51\x6d\xea\xf1\x35\xd0\xb9\x63\xd6\xae\xa8\xf4\x54\x53\x7e\xe7\x54\x07\x4a\x2d\x86\x34\xf9\x4a\xfd\x76\x39\xb8\x5b\x8e\x74\x7b\x39\xb6\x97\x01\xae\x04\x6f\xb3\x61\x49\x24\xcc\xd2\xd6\x2a\x50\x1d\xdf\x65\xd7\x2a\x58\xb4\xa0\xd9\x9c\x76\xce\xe5\x8e\xf5\xd0\xf3\xbf\x30\xaa\x3d\x66\xf6\xbf\x4f\xab\xae\x7e\xff\x63\xe6\xde\xa9\x25\xf9\x33\x6f\x1c\x54\xee\xdf\xe9\xc2\xad\x80\xa7\xd6\x64\x34\x0e\xbc\x1a\x03\xd0\xc7\x96\x2b\x0f\x86\xb3\x3f\x08\xfe\xe5\xa6\x51\x12\x7d\x4a\x57\x82\x66\xa9\xa4\xf9\xb3\x6b\x88\xfe\x80\x6f\x3f\x0a\xd0\x75\xa4\xe2\x7b\x90\xce\x0b\x43\x5c\xe8\x5e\xd9\x34\x9a\xdb\x54\x72\x7b\x49\xb3\x74\x49\x9d\x78\x17\xeb\xf7\x9f\xe0\x4d\xd6\xb5\xd6\xf1\xae\x1e\x37\xfb\x53\xad\xc9\x5d\xea\x98\x9e\xa8\xf9\x55\xba\x82\x30\xd1\x50\xc5\x73\x1f\x53\x6d\x73\x0c\x76\xb6\x12\x69\x35\xc9\x3d\xf8\x86\xf0\x78\xf2\x8f\x62\x4b\x87\x02\xce\x8e\x9b\xea\x05\x8e\xa6\xb3\x08\x28\x08\xc3\x92\xac\x5a\x9d\x1f\x2e\xd3\xd5\xe3\x9b\xd8\x32\xe4\x22\x1c\x99\x8c\x91\x22\x36\xe1\xdb\x37\x0c\xd7\xf5\x43\x0d\x78\x5d\x7e\x2a\xf9\xe7\xb2\xc1\xca\xec\xb0\x3d\x0b\x71\x3d\x1d\xe0\x73\x19\xc8\xf4\x56\xb0\xe1\x1a\xb3\x4a\x7b\x33\x6f\xf5\xb6\xe4\x32\x8e\x74\x66\x70\x17\x60\xa3\xbe\xe0\x34\xdf\x81\x9f\x37\x33\x6c\xaa\x8b\x50\xc7\xb0\xf1\x4d\x76\x2c\x7a\xbd\x83\xbd\x99\x7b\xbd\x7d\x90\xb3\x3f\x65\x18\x80\x54\x0c\x52\x35\xdb\x37\x33\x05\x1f\xe7\xac\xcc\xdf\x18\x3f\x48\x86\x5d\x5a\x79\xa7\x11\x20\xee\xea\x2c\xa9\x62\x19\xd8\xd5\x9b\xbb\x70\x47\x7a\xc9\x25\x9b\xdf\xd8\x29\x7f\xb2\xd0\xe1\x1a\x40\x12\xb9\xaf\x2d\xcf\xab\xe2\x56\x13\x8e\xaa\x59\xa6\x9f\xa8\x76\x03\x21\x81\xa1\x45\x3f\x77\x8d\x57\x08\xbb\x64\x46\x31\xb7\x0c\xa2\x85\x98\x23\x72\xca\x67\xb8\x32\x31\x11\x14\x90\x59\xd0\xc2\x29\xea\xb0\x29\x9f\x91\x6a\xb3\xb9\x75\x68\x05\xc8\xf2\x34\xef\x38\x75\x84\x3a\xab\xb1\xa6\x4d\x76\x89\x25\xdd\x42\x6d\x36\xb1\x5d\x0f\x93\x17\xff\x67\x2c\xea\x4f\x7a\x49\xd5\xb4\x36\x9d\x62\xf3\x78\x3f\x04\x05\xa0\xaf\xcd\x62\xd4\x44\x78\xa8\x14\xb5\xa2\xf4\xa6\xb4\xdd\x8b\x48\xed\xe9\x66\xa5\x3b\x77\x2f\xd8\x96\x93\x1a\x31\x2d\x67\x0d\xa7\x41\xe1\xb7\xbd\x9e\x70\xbc\xa5\x12\x8f\xb7\x5b\xde\x73\x10\x0d\xb5\x46\xa0\x6a\xe7\x2e\x68\xbb\x23\xd1\xed\xd9\xba\xc6\xc6\x2b\xef\x37\xac\xa6\xf5\xdf\xfb\x47\x2c\x98\x6d\xf5\x1b\x96\x8b\x7e\xf3\x01\x0d\x1e\x65\xe8\x0e\x4a\x9d\x6a\x57\xff\xc6\x03\x17\x5c\x03\xce\x1b\x71\xa8\xef\x76\xe7\xf6\xb5\x60\xec\x5d\x7f\x9e\x49\xb5\xaa\xaf\xa1\xe3\xd4\xd4\x02\xd1\x17\x5e\xdf\xc1\xc9\x61\xa4\x26\xa3\xba\x46\xd8\xfa\x88\xbc\xc3\xaa\xc0\xdc\x62\xfb\x84\xd6\xc2\x43\x3e\xaa\xc7\x37\x06\x56\x5a\x1a\x88\x1a\x6b\x11\x35\x91\x1d\x0a\x44\xa9\x80\x48\x91\x9a\x6b\x3a\x9d\x21\x1d\xea\x27\x16\x9e\xca\x21\xa6\x35\x0a\x0e\xf7\xf5\x5d\x5d\xd5\x5a\x90\x4e\x0f\xd9\x5f\xc0\x47\x71\xa8\x3f\x4b\xd3\x6c\xf1\xc4\xd4\xe1\xae\x27\x70\x49\xa1\xf9\x73\xe5\x30\xc4\xa8\xd0\x6d\x39\xfc\x44\x6f\x8c\xd2\x8c\x22\xe1\xd5\x60\xc0\x5a\xba\xc9\xf4\x4a\x63\x2b\x1d\x6a\x65\x3b\x5a\xab\xd2\x44\xde\x63\xa8\xde\x31\xa0\xec\xeb\x73\xbf\xc3\x5b\x15\x36\x1b\x7f\x4b\xe9\xfa\x8e\xc1\x95\x86\x97\xdb\x1a\x19\x18\x0c\xa8\xa1\x95\x98\x69\xdf\x2e\xea\xc7\x2a\x15\xb4\x94\x0e\xf7\x24\x02\xd3\x69\x39\x23\x8a\x1c\x6b\x8a\x3e\x17\x7c\x09\x63\x66\xc8\xae\x15\xce\xef\x1a\x4f\x13\xa8\xcc\xb2\x47\xb6\x31\xa0\x00\x94\xf4\xd0\x01\xff\xf1\xa5\xf9\x72\xb7\x2b\x2e\xe7\x19\x79\x5a\xce\x4c\x0c\x64\x3d\x36\xcc\x50\x23\x7e\x0d\xe7\xff\x36\x83\x2d\x66\xa6\x89\xd1\x2a\x59\xd4\xba\x4f\xda\x09\x02\x5e\xe1\x65\x7b\x48\x91\x11\x24\xbf\x93\xc0\x9f\xd8\xe5\x04\x3f\x1c\x55\x1b\x73\xf6\xcb\x2b\x02\x31\xec\xd2\x35\x89\xdb\x0d\xea\xad\x6b\x06\x1b\xe1\x6d\xbc\xeb\x20\x6e\xf8\xd8\x61\x66\x74\x31\x6a\x37\xb0\x44\x9d\x39\x59\xe2\x15\x59\xc2\x18\xaf\x76\xba\x1a\xd8\x89\x55\xb3\x92\x49\xbb\xd1\x8c\x15\xf6\x70\x38\x6c\x68\xe2\x1a\x7f\xd4\x07\xd8\x6b\x2a\x3f\x73\xf1\x49\x9f\x5f\x95\xef\x07\x61\x1a\xb1\x0a\x0e\xe3\x68\xe6\x9f\x7e\x77\x1d\x7e\xa8\x41\x02\x97\x98\x55\x2f\x79\x9a\xb3\xf2\xca\xfd\xa6\x79\xb2\xc4\xdb\x3c\xd6\x36\xb2\x1a\xac\xda\x90\xe9\xec\xbb\xe6\xd2\x13\x09\xec\x2c\x02\x87\x38\xab\xde\xa5\xd7\xb6\x17\xda\xbf\x64\x9e\xcc\xb1\xe6\x82\xaf\xb0\x19\x63\x72\x8d\x3f\x2e\x53\xf1\xc9\xe0\x80\x46\xee\xfc\x48\x73\xb7\x63\x74\x5b\xe3\x5c\x55\x09\x9a\x33\xaa\x22\xad\x38\x70\x30\xd6\xa5\x8c\x60\xbf\x55\x46\x4f\x3e\xf5\xd2\x2a\x32\x9d\x99\x9b\xb1\x48\x2b\xe3\xe5\x43\xab\xe1\x69\x35\xab\x1d\x4b\x12\xc3\xa4\x6a\x8f\x06\x6a\x18\x07\x63\xec\x0f\x36\x91\xc3\xb7\x9c\x9b\x81\x43\x30\x19\x1c\xc2\xb0\xf1\x0f\x01\x82\x5d\xad\x9d\xa8\x95\x09\xbe\x7a\x9a\x55\xf6\x20\xf3\x44\x13\xdb\xc4\x5a\xec\x44\x9e\x95\x02\xc6\x28\x40\xa5\x23\x54\xe3\xdd\x19\x7e\x32\xc9\xdb\xe7\x2c\xf3\x94\xa8\x2b\x3d\x07\x60\xb1\xa9\x91\x72\xf8\x6c\x70\xe2\xf7\x3c\x64\xc1\xdc\xb6\x77\x56\x84\x1a\xaa\xc1\xa2\x13\x7e\x05\x55\xbc\xbb\x8c\xb9\xf5\x6b\x9c\x7a\x46\xd3\x2d\x3f\x1b\x5f\x21\xb9\xf5\xd4\xbd\x2b\xd3\x55\xb5\xe0\x32\x46\x43\xbf\xa0\xc2\x8f\xd3\xdc\x78\xcf\xc8\x59\xae\xf6\x86\x7b\xd1\x8e\x53\xdd\xab\xa6\x02\xdc\xab\x06\x60\xfd\x1a\x12\xc2\xde\x27\xaf\xbf\x82\x17\x05\x05\xcf\x18\xb6\xff\xe5\x2e\x07\xae\x6d\xb6\x4b\x69\x27\x0d\xe2\xbe\xfd\x3f\xd4\xfd\x6b\x7b\x1b\x37\x96\x20\x8e\xbf\xe7\xa7\xa0\x38\x79\x98\xc2\x0a\x61\x4b\x3d\xdb\xfd\x9f\x3f\x9d\x8a\x1e\xc7\x8e\xa7\xdd\x9d\xc4\xd9\x38\xe9\xec\x2c\x87\x2b\x97\x59\x90\x84\x76\x09\xc5\x46\x81\x76\xd4\x24\xbe\xfb\xef\xc1\xc1\x1d\x85\x2a\x52\x89\xd3\x33\xfb\xc6\x16\xab\x50\xb8\x1c\x1c\x1c\x9c\xfb\xa1\x02\xea\xda\x1f\x59\x72\xd2\x34\x09\x71\xb1\xc7\x21\xfe\x26\x6e\xa2\x3e\xe9\x04\x6f\x5d\x4c\x59\x3c\x5e\xdc\x58\x1f\x99\xae\x7a\xaf\x21\xba\x63\x3e\x2d\x48\xe1\x32\xb7\x3d\xd7\xfd\x91\xda\xba\xf7\xc5\xc3\xc7\x1f\x39\x9a\xe8\xef\x18\x5d\x91\x0e\x50\xd8\xa5\xff\x37\x06\x5a\xe2\x72\xfd\x7f\xce\x74\x29\xad\x92\xac\xf8\x7a\x84\xa1\x56\x7c\x92\xc4\xfa\x1a\xab\x3d\xf9\x4b\xa3\x57\x13\x44\xea\x37\x97\xb0\xab\x6f\xab\xcd\xbb\xa8\x93\xdc\xd7\xb9\x86\xea\x24\x24\xd8\xf9\x18\x4c\x96\xd8\x46\x13\x7f\xa5\xee\x9f\xae\x4f\x90\xe3\x0e\x2c\xc3\x1f\xf7\x4a\x6b\x89\xcd\xde\x79\x0d\xb2\xf1\xdd\x8e\xd9\xa8\xfd\x56\x3f\x5d\x66\x31\x55\x77\xa1\x7d\xe5\xd5\x36\x69\xae\x1a\x4e\x98\xda\x5a\x97\x89\xc3\x90\xb0\x9c\xc2\xcf\x68\xf6\x89\xae\xc5\x00\x07\xde\x38\xb1\x82\xbe\x66\x1f\x3f\x5b\xa6\x8d\xa4\x92\x0e\x1e\x3f\x73\x33\x3f\x9e\x9b\xbb\x12\x00\xe1\xce\x79\x1b\x68\x34\xc7\xf6\x88\x93\x1b\xc2\x09\xdb\x28\x3e\xb7\x08\x55\xb9\xea\x64\xdc\x39\x45\xdd\xe9\x5d\x38\x6d\x24\xe8\x23\xc0\x04\xa8\x6b\x87\x98\xbb\x41\xdb\xac\xb1\x28\xf7\x52\x57\x77\x73\xec\xac\x27\xc9\xa2\xfc\x82\x58\x01\xc1\xea\x43\xad\xcf\x43\x60\x60\xc5\x5b\xcf\xd1\x11\x4c\x7e\xde\x56\x0c\x12\x97\xae\x7b\x9c\x72\xc8\x0c\x3b\x8f\x87\xf7\xb6\x66\xeb\xe2\x1d\x65\xf5\x7a\xe2\xb4\x6d\x2d\x84\x17\xb9\x17\xea\xe6\x65\x91\x77\x03\x3c\x0f\x47\x6f\x83\xd1\x91\x2b\xc3\x46\x9c\x09\x96\x68\xbf\x9d\xa0\x8f\xd9\x8b\xa6\xba\x8d\x97\xa0\xb8\x26\xcd\xeb\xe4\xed\xc9\x4a\x72\xd5\x0c\x09\xfc\x69\x18\x12\xf8\xdb\xe4\x9a\x70\xd6\x68\xc7\x7e\x49\x84\xf7\xd6\xaf\x51\x6d\xc3\xd2\x7a\xa9\xbd\x12\x77\x84\x07\x1c\xf1\xd9\x85\x0e\x4a\xeb\x96\x4c\xad\x45\x9d\xce\xf7\x21\xc7\xcc\xa5\x94\x58\xd3\x26\xa7\x2c\x77\xcc\xdb\xb8\x58\x8b\x7b\x3b\xe0\xaf\xdc\x4d\xcb\x3a\xc1\x77\x1b\xd1\xf2\xfe\x46\xe9\x7b\x24\x92\x46\xb4\x5e\x35\xcf\x80\x07\x7d\x0d\x49\xab\x5a\xbd\x2a\x15\xa7\x40\x78\x47\xe2\xee\x7a\x13\x0a\x5b\x65\x2d\x07\xc0\x1a\x21\x0b\x17\xa3\xd6\x7e\x5a\xd7\x9a\xed\x38\x0e\x94\x1c\x13\x92\x42\xa4\x67\x2b\x9a\xdc\x2e\x38\x69\xb7\x84\x15\x7b\xc1\xe9\xed\x2d\xe1\xb1\xce\x75\x45\xd6\x03\x59\x79\x23\x2d\x60\xea\x7f\x83\x59\xa0\xef\x83\x32\xd0\xb4\xbc\x7c\x42\x3f\xe7\x90\xf8\x95\xad\xe8\x67\x97\x6b\xff\xd1\x8a\xae\x27\xc2\xd8\xcc\x40\xa6\x63\x48\xc2\xf4\xb5\x4e\xc2\x52\xee\x9c\xf8\x30\x98\x6d\x2d\x08\xd8\xc4\xb3\xba\x12\xd5\x0c\xdc\xce\x9d\x79\x54\xf1\xaf\x71\xca\x86\xc4\x70\x08\x54\x70\x71\xad\x3e\x55\xa3\x04\x70\x6a\xff\xfc\xfa\xd5\xb7\x89\x6a\x3a\xb7\x97\x49\xa6\x63\x9f\x77\xcd\x49\xe3\x47\xae\x38\x6f\x91\x0f\xb3\x16\x83\xa1\x03\xe8\xd8\xdb\xb2\xb7\xa4\xce\xdb\x4e\x79\x29\x16\x9b\x96\xf0\x0d\x79\xa9\x30\xc8\xba\x34\xf1\xfc\x45\xd8\x11\xf1\xb2\x86\xbc\x4f\x11\x54\x46\xc5\x52\x3c\xbb\x16\xd5\xed\x2c\x6f\x08\xa3\xb5\x94\x03\xbe\x16\xd1\xde\xd0\x7a\x86\xdf\x7a\xf8\x6a\x0f\xcb\x3d\xf8\x01\x91\x46\x51\x12\xa7\xb2\xd0\x9c\x63\x46\x8d\x32\xa6\xbd\x1f\x3b\xba\x41\x0e\x04\x11\x78\xf7\x69\xcf\x07\x77\xae\xbf\xa9\xb6\x27\x98\x31\x32\x3a\x17\x90\xfa\xa2\x53\x3f\x68\x62\x70\x23\x99\x0a\x00\x2b\xb2\x76\x29\xe8\xd5\x11\x0c\x6d\xe1\xba\x36\x4f\xd4\xed\x24\x68\x5b\x32\xcc\x8c\xee\xfe\x65\x76\x70\xe8\x65\x08\x8a\xe0\xdc\xef\x6a\xf7\xba\xa2\x30\xe0\x1b\x89\x2b\xeb\xf6\x78\x4f\xe0\x8c\x04\x66\x1a\xa8\xe9\x6d\xac\x8b\x13\x93\x54\xbe\x2c\xcb\xc6\x92\xbd\xa8\x47\x7a\x53\xf8\x17\xcc\x37\xc2\xb4\x2c\xda\x32\x32\x41\x0d\x6f\x1f\x43\x48\xdf\x9c\x55\xd9\xba\x91\x21\x07\xbd\x5e\x1d\xee\x52\x9d\x94\x49\x27\x1a\xa4\xef\x4e\x62\x14\xe9\xe1\x00\x0e\xb6\xc3\x33\xd0\xdb\x73\x56\xd9\xe5\xb4\xc6\xe3\xb5\xd2\x9b\x19\xe4\x32\xc7\x4d\x19\xe7\xc2\xee\xd0\x15\xe4\x55\x16\x8a\xc4\xba\x60\x65\xde\x87\x25\xe8\xd4\x90\x5b\x92\x51\xd7\x08\x0b\x24\xef\x36\x62\x9f\x1c\x0e\xac\x0c\x7e\x4a\x04\x07\xc5\xe2\x44\x33\x9f\x6b\x0e\xc2\x10\xd8\x16\x37\x60\xf2\x53\xc4\x74\xa3\x0e\xdb\x7c\x4e\x8a\xf0\x37\xc0\xa4\x45\xb8\x0d\x3c\x12\x4c\x85\xd3\x72\x97\x58\xdb\x1c\x82\x6c\xca\x9d\x5d\x9c\x0d\x1f\x67\x99\xc5\x89\xec\xe2\xa6\xa4\x2c\x4b\xe6\xe7\x3f\xb9\x2c\xcb\x72\xe3\x3d\x6a\x76\xe5\x06\x61\x56\xee\x56\x17\x26\x57\x38\xd5\x7f\x9b\xed\x87\xbf\x4d\x8f\xb6\x8c\xaa\xd6\x1c\x6b\x23\x36\xd3\xa6\x6d\xea\xac\xdf\x95\x8c\x19\x81\x6e\xd9\x44\xbf\xd5\x06\x9e\xa0\x98\xd8\x1b\xee\x74\xb9\x5a\x7b\x0e\x79\xb9\x5a\xcb\x13\x74\xab\x3a\xe2\x62\xcf\x7b\xba\x55\xb2\xe2\x9a\x51\x4c\x74\xda\x7a\x82\xa4\x06\x17\xf2\xe5\x0e\x67\x0e\xc6\xb2\xc6\x19\x5d\xe8\x72\x83\x6f\x28\x69\xea\x13\x16\x94\xe8\xec\x1f\x3f\x7d\x5d\x93\x55\xbd\x85\x35\xa0\xa5\x6a\xe0\x78\x0e\x53\xda\xb2\x10\x81\xf3\x70\x56\xf5\x92\x67\xf1\x1e\x67\x42\xb0\xaa\x79\x9b\x2f\x1a\x33\xcc\x41\xa8\x71\x9d\x6b\x58\xa6\xf6\xcc\xec\x28\x06\xec\xb3\x31\x2d\x32\x5f\xb1\xf5\xc4\x8d\x06\x95\xdc\x5c\x58\x75\xb8\x18\x3f\xa8\x75\x50\x7e\x47\x1e\x40\x8e\x07\x74\x36\xa9\x19\x82\x7b\x83\x07\x04\x9e\x5e\x05\x52\x15\xe4\x9c\x53\x1f\x25\x0f\xd9\xd5\xac\x65\xe4\x87\xf6\x15\x23\xb3\xe5\xec\xbe\x62\x0f\xf6\xef\x6c\x33\x5d\xbf\xca\xb4\x33\x3f\xb2\x0d\xbf\x6d\x83\x0e\xe1\x87\x16\x11\xf3\xda\xd3\x8f\x84\x5e\x01\xf6\x14\x3a\x87\x3c\x04\x00\x1a\x34\x43\x39\xf4\x01\x05\xd0\x4d\xcb\xef\x43\x75\xc5\x2f\x9f\x9e\xe7\x99\xfd\xbc\x74\xbc\xa1\xc7\x76\xcd\x31\xe4\x31\x39\xe1\xcb\x53\x04\xcb\xfb\xd1\x8f\x61\xef\x0f\x99\xf5\xe5\xfb\xce\x42\xe2\x94\x61\xac\x6a\xc5\xf1\x37\x33\xed\x1d\x3f\x3b\x4f\x87\x70\x37\xde\xcc\xb1\xa5\x0f\x59\xf3\x80\xa9\x2a\xb7\x13\x8a\x55\x85\x2b\x11\xe7\xfd\x70\x0c\xea\xbf\xec\x9e\x76\x0f\x6c\xa3\x98\x5a\xa7\xb5\x57\x7f\x1f\x31\x28\x60\xa3\x71\xd3\x5f\x94\xd1\xaf\xc3\xe1\xec\xd2\x94\x31\x30\xf5\xe5\xf5\x2f\xa3\x1f\x09\x34\xe0\xea\xde\xf2\xac\x8e\x2e\xf6\x63\x7b\xfe\xae\x6d\x1e\xee\x5b\xbe\xbd\xa3\x9b\xb2\xff\xc8\x8f\x11\x6a\xc7\x9d\xbe\xfd\xa6\xd9\x75\x77\xcf\x2a\xd6\x32\xba\xa9\x1a\x93\xcc\x43\x7b\xc6\x6a\xe3\xce\xd9\xa5\x5d\x42\xf0\xd4\x78\x81\x49\x5c\xb1\x87\x1f\x41\x57\x48\x6a\x6f\xc9\x39\xeb\x0d\x17\xf0\x19\x64\x71\xad\xa4\xfb\xfb\x4a\x18\x11\x82\xb2\xdb\xc3\xe1\x8c\x38\xa0\x14\x08\xad\x2e\xd6\xd6\x55\xc2\xf6\xfe\x32\xe4\xe5\x23\x43\xdc\xc5\x13\xf2\x79\x7f\x40\x43\x0f\xcf\xcf\x63\xb1\x28\x6c\x63\x44\x49\x91\x9f\x90\x08\x27\x14\x65\x1d\x52\xa8\x62\x82\xfb\x7e\xa2\x4d\x63\xa5\x5e\x7c\x89\x2f\x50\x1f\xd2\xb6\x0c\x3f\xc1\x16\x90\xea\x8c\x5a\x1f\x82\x4c\x7b\xeb\x8b\xd2\x1b\xec\x39\xad\xe3\xb1\xce\x2e\xa4\x8d\xb6\x90\x58\x2b\xf0\x9e\x8a\xe2\xe8\x82\x5d\xc0\xb8\x8f\xd8\x5f\xb8\x38\x84\x02\x49\x9c\xe0\x04\xc1\xbc\x3c\xbb\xd0\xd9\x60\x16\xd7\x7a\x9c\x97\xdd\xd3\x86\xbe\x27\x5a\x28\xf5\x55\x99\x6b\x7a\x73\x63\x5c\x6c\xd2\xc1\xb1\x97\xf8\x98\x2e\x60\xab\x17\xf3\x92\xd5\xe4\x67\x5b\x18\x64\x00\xb6\xfd\x0f\x30\x33\x6e\xfe\xf5\xb3\x76\xc7\x04\x66\x8b\xaa\xae\xcd\x8f\x1c\x98\x13\xb0\x46\x47\x81\x2c\x3a\xd8\xa1\x51\x90\x3f\x76\x0a\x7c\x3e\x0f\x1f\x7c\x71\x61\xa4\xdc\x58\x26\x55\x57\x17\xc0\x4b\x03\x5f\x2b\x57\xbc\xe5\xe5\x1d\x79\x98\x21\x04\xb5\xa7\x8d\xa7\x4b\x98\x2a\x63\xc2\x55\xaf\x05\xed\x6f\xb4\x59\x10\xc1\xe4\xdc\xa6\xd0\x83\xfe\xbc\x42\x01\x1c\xce\xd4\xe4\x5f\xf0\xf6\xde\x15\x85\x8c\x07\xc6\x74\x71\x5f\x6d\xc1\xb4\xd9\xf3\x61\x46\x08\x4a\xb1\x0d\x74\x5d\xd5\x35\x14\x06\xc9\xf6\xca\x46\x7a\xc5\xc4\xc5\xd7\x09\x4e\xc9\x7b\xf2\x75\x05\x91\xdc\xa0\x28\x8b\x9f\x98\x4b\x72\x60\x06\x81\x1f\x66\x0a\x4e\x6c\x4e\x86\x56\x89\x5c\xfb\x96\x5f\x3e\xfc\xb9\x6b\xd9\xd3\x2d\xfd\xde\x14\x3a\x50\x12\x39\xe4\x32\xad\xcc\x4a\x01\xa5\xd4\x6f\x85\x50\xea\x7f\xa4\x10\x8b\xb2\x77\x5d\xd8\x00\x1e\xcc\xec\x1b\x94\xa7\xb3\xa6\x0c\xb1\x53\xc6\x0f\xc6\x72\xe9\x26\xdf\x58\x44\x31\xc5\x74\x5c\xb3\x08\x9f\x66\xe1\x66\x6b\x68\x83\x5f\x6b\xf5\x9e\x44\x00\xc3\xbc\x84\x5c\x26\xae\xd7\x7f\x51\x4d\xa6\xfd\xcb\x14\x42\x9a\xbd\x07\x1d\x24\x92\xb1\x3e\x3a\x8a\x25\x6c\xdf\x91\x62\xa6\xbe\x9d\x21\x1c\x6a\xec\x4d\xea\xba\xdc\x20\x66\xa1\xee\x69\x90\x16\xce\x5a\x0b\xb4\x9c\x9a\x1a\x0b\x98\xec\x65\xd1\x1b\xf2\x41\xb5\x51\xab\x7d\xee\xd9\x2d\xc8\x6a\x46\x4c\x57\x3c\xc8\xef\x46\x62\x47\x9b\x20\x5e\x13\x4a\x6a\x4a\x84\xaf\xcb\xd4\xb2\x61\xe3\x84\x15\x52\x8c\x71\x76\x46\x70\xf2\x16\x98\xfd\x3b\xf2\xb0\x14\xc6\x0c\xcd\xb1\xce\xb3\x5b\x09\xca\x6e\x5f\xc6\xc6\x6a\x69\xb4\x2d\x8e\x13\x86\x93\xee\x1d\x92\x75\xaf\x41\x99\x56\xd0\x5b\x62\x81\xfb\x56\x20\x89\xf0\x87\x32\x81\xb6\x5d\x00\xe0\x6c\xea\xa9\xaa\x18\xc8\xce\xf9\xd5\x6a\xbc\x9e\xa1\x01\xec\x85\x33\x60\x36\x6d\x16\xe0\xa3\xf7\x04\x74\xdf\x69\x74\x8d\x77\x75\xf9\x55\xd1\xcb\x77\xc8\xd4\xc3\x96\xc1\x9f\x44\xff\x0d\x1e\x6b\x5a\x41\xac\x1e\x98\x3f\x55\x8b\x9b\x1b\x68\x71\x73\x33\x43\xf8\xae\xea\xd4\x8f\xbb\x0a\xa2\xed\x7c\x50\xcd\x57\xb9\x62\x40\x83\x41\xd4\x6e\xe6\x2b\xb2\x4e\xd5\xbd\x44\x57\xe0\xe9\xca\x0e\x93\x85\x43\xea\xf2\x41\xfd\x52\x1b\x57\xde\x62\x62\x21\xed\x36\xa7\xbc\xf6\x0f\xfd\x37\x1f\x30\x59\x5c\x5b\xad\x9f\x2e\x3e\xd9\x0f\x92\xe0\x69\x7a\x5c\xf0\x97\xe4\x8b\x9b\x6a\x23\x5a\xfe\x00\x7a\xdd\x7b\xf5\xed\x72\x76\xae\xdd\x5c\xd5\x45\x04\x7a\x14\x48\x52\x6e\x55\x4b\xb7\x76\xc7\x29\x9a\xb4\xb1\xaa\xf3\xfa\x9a\x76\x30\xfc\xf2\xec\x02\x5f\x5f\xeb\xde\x28\xd4\x15\xb7\x5e\x0e\x85\x63\xbf\x05\xf6\x19\xd5\x93\x59\xd8\x16\x50\xd4\x4e\x49\x15\x25\xc5\x64\xe1\xf0\xb7\x6c\x31\x38\xd1\x29\x00\x94\xd5\x47\xab\x8c\xa6\x63\xb4\x8e\xa4\x16\x48\x02\xb9\xfe\x59\xe5\x56\x5c\x9d\x93\x13\x0b\xad\x00\x06\x8d\x16\xf1\x52\x60\x3d\xb9\x3b\xd5\x78\xb4\xb7\xc0\x40\x7a\x62\x97\xee\x8b\xd1\x7e\x9d\xd5\xf4\xc4\x5e\x4d\x7b\x39\xbc\xcb\xfa\xb2\xd7\x7f\xff\xe2\x78\xbc\xdf\xb5\xbc\x26\x9c\xd4\x9f\x75\x24\x53\x7c\xe4\x84\x80\xbc\xa9\xd6\x2a\x93\xc3\x01\x8a\xb0\x92\x2b\xf5\x7b\xd9\x8f\x88\xb9\x22\xcb\x59\xf7\x70\xff\xb6\x6d\xa2\x87\x0b\x2f\xd5\x42\xe6\x12\x19\x17\x2b\x33\xc9\x0c\x6d\x7b\x53\xd5\xdc\x18\xea\x6d\x5e\x41\xa2\x0b\x63\x9b\x21\xcd\xd3\xfd\x1d\x27\x37\x4b\xe2\x1c\xcf\x21\x4c\x86\x97\x7c\x3e\xef\x65\x40\xbf\xab\xba\x57\x3e\xbe\x41\x8b\xdd\xdc\x63\x2a\xba\x72\x49\x06\x97\x7c\x02\x64\x64\xda\x4e\x35\xe9\xe8\xa6\x1c\xf2\xae\xd0\xcd\xd4\x3a\x44\x85\x21\x23\x40\xda\xab\xba\xfe\x89\x8a\x3b\x60\x98\x33\x44\x6c\x47\x6b\xe7\xf3\x6d\x24\x5f\xd2\x11\xb6\x21\xaf\x89\xb0\x9a\xa7\x86\x76\x62\x62\x93\x20\xb0\x15\x77\x86\x08\xf5\x77\x79\x76\x81\xf5\x26\x88\x2b\x6a\xad\xd1\x4b\x6a\x85\x2e\x81\x2f\x1c\x4b\xd9\xd1\x7f\x90\xf3\x52\xcb\xc2\x52\xbb\xcc\x7c\xbc\xa9\x95\x66\x6a\x7b\xdd\x31\xcc\xcd\x04\x9c\x79\x71\xeb\x4a\x2c\xa9\x4b\xce\xea\xb9\x8c\xf6\x8b\xcf\x2e\xe7\x73\x37\xe7\xd6\x0b\x8a\xf4\x1f\xa4\xb4\xc9\x59\x23\x69\x4f\x86\x95\x33\x5c\x78\x68\x9f\xa1\x3e\x1c\x08\x5a\x5c\x47\x8a\xc9\xa4\x88\x85\xdb\x32\xd5\x91\xbe\xf3\x50\x54\x1d\x21\x08\x65\xec\x7b\x89\x0e\x0e\x49\xef\xd5\x62\xa8\xf8\x3e\x1a\xba\x20\x68\xc5\xd7\x52\xa3\xd1\x6e\x1f\x18\x83\xc3\xfc\x8c\xa1\xbe\xd1\x28\x5d\x0c\x10\x35\x58\xde\x51\x56\x47\x0f\xfc\x14\xa2\xc7\xf7\x70\xc8\xbb\xe8\xd9\xc6\x72\xe0\xdf\x64\x5e\x02\x99\x88\x87\x22\x0f\xd1\x6f\x33\xab\xbf\xa4\x8f\x33\xb3\x8c\xf5\x32\xf1\x74\x63\x87\xeb\x81\x11\x5e\xb4\xfc\xa5\x81\x62\xb2\xac\xe4\x93\x6b\xab\xa1\xea\x75\x76\x2d\xc8\xfd\xd6\xbb\x40\x47\x6b\x85\xca\x50\x2f\x5a\xbe\x21\xda\x85\xb2\xb4\x6a\xa2\x70\x7a\x2f\xbb\xd7\xa2\x6a\xe2\x2f\xef\xaa\x48\x5b\x42\xac\x55\x2f\x6d\xf4\x94\x3d\x84\xbb\xdf\xdb\x9e\x78\x1c\x70\x8e\x4d\xbb\x78\x01\x49\x98\xbe\x6e\xab\xfa\xa9\xce\xa4\xe5\x26\x09\x2c\x68\xd4\xfc\x03\x6d\x9a\xd7\xbd\x4d\x88\xb1\x88\x06\x08\xa4\x2d\x02\x26\x00\x92\x5b\x73\xcd\xa2\x52\x0d\x21\xd0\xc7\x3e\xd9\xfa\x6d\x9c\xa4\xe8\xc6\x62\x4c\x53\x64\xaf\x1d\x40\xb4\xe0\x9d\xc6\x33\xe2\x51\x8c\xab\x7f\x23\xa5\x9e\xc7\x33\x91\x43\xb1\xb2\x2c\xab\xc3\xa1\x1a\xc6\xb4\xb3\xb2\xec\xe6\xf3\x6e\x00\xe1\xf8\x18\xae\x65\x30\xe7\xdc\xce\x34\xc0\xc0\xc0\x3b\x77\x10\xff\x72\xa8\x64\x77\x70\x10\x8d\x82\x06\x39\x14\xca\xa3\xa9\x46\x9f\xb3\x0b\x79\x4b\xc4\x14\xfc\x84\x12\xdf\x3b\xbf\x69\x0b\xf3\x5a\x26\x8a\xdd\x54\x7f\x19\xbf\x0d\x5a\xbf\x8e\x1a\x17\x67\x09\x2c\x8d\x47\x65\xfc\x39\x92\xd7\x77\x55\xf7\x7a\xb7\x55\xec\x49\x00\xed\x88\x3e\x06\x8c\x85\xdb\x45\x32\x40\x4b\xbd\x7b\xde\x10\xb1\x8d\x07\x3c\x65\x20\x3e\x34\x40\x7c\x81\x28\x10\x87\x5b\xae\x03\x91\x7c\xf6\x88\x1e\x4e\x38\x83\x86\xb1\xb5\x27\x00\x4b\xe2\xca\x62\x5c\xd5\xa6\x73\x1e\xaa\x6c\x9c\x63\x84\x40\x13\x72\xaa\x75\x3e\x1d\x53\x66\x50\x97\x44\x19\x75\xa2\x77\xd2\xe3\xcf\x73\x5a\x47\x88\x1b\xab\xa2\xfc\x10\x13\x62\x94\x42\x37\x2d\x7f\xda\x58\x3a\x00\xd6\x68\x0b\x83\xb1\x2d\x12\xc8\x32\x24\x5d\xa1\x84\x78\xd0\x59\x24\xc1\xdc\xf1\xce\x4c\x40\xd4\x33\x13\xf0\x09\x36\xcc\x2c\xfc\x02\xce\x02\xdb\xb6\x6f\x76\x38\x38\x97\xb0\xde\x0a\x93\x0e\x90\x62\xcc\xe3\x55\x11\xaf\x91\xcf\x16\xa7\xc7\xbc\xbc\x78\xc2\x3f\x0f\xa9\x25\x70\x4f\xce\x57\xd8\xda\x2d\x59\xd9\x6b\xb3\xe2\x6b\x4c\x13\xb6\x8c\xa1\x89\x58\xd1\xf5\xe1\x50\xa8\xff\x14\x17\x48\x0a\x86\x60\x56\xa6\x96\xfd\xc5\x93\xf6\xf3\x2c\x25\x8e\xc6\x0d\x22\x3c\x87\x1b\xeb\xd0\xcf\x78\x02\x95\x9a\x40\xa7\x27\xd0\x99\x09\x54\x08\x49\x39\x04\x43\x82\xf6\x67\x21\x25\x3f\x1c\xc0\x60\x67\x88\xd1\x95\x85\xf1\x7d\xfb\x3e\xd8\x94\x17\xbc\xbd\x7f\xf5\x81\x15\x5e\x2d\xaa\xde\x3b\x35\xe2\x70\x43\xc8\x0a\xda\x23\x90\xc5\xd9\x05\x32\x39\x6a\x3b\x50\x7b\x66\x29\xb0\x6a\x25\x75\xe5\x06\x38\xde\xd6\xd9\xef\x5e\x9f\x11\x1b\x7c\xe8\x2d\x30\xbd\x1d\x7b\x42\x5c\x74\xde\x13\x97\x16\x72\x75\xb1\x9e\x64\x17\x09\x1c\x67\x1c\x0e\x9a\xdd\x86\x27\x3c\xed\x95\x95\x3c\xe9\x35\x03\x9a\x82\x41\xaa\x2c\xf5\x16\xaa\x67\xd9\xe7\x9d\x85\x19\xda\xe7\x41\x06\xf7\x95\x02\x46\x74\xc9\xdb\xd0\x47\xdf\x65\x66\xcc\xb4\xef\xde\x7a\xa2\x68\xd0\x58\x37\xfc\xb5\xda\x11\xd7\x7f\xd0\xa7\xda\x08\xd2\x8b\x38\xea\x41\x93\x20\xa4\xc4\xae\xe8\x43\x9d\xc2\xb6\x17\xaa\x19\x35\xd3\x41\xdb\x5e\x5a\x99\xcf\xc5\xf9\xb9\x84\xbe\x72\x2b\x4c\xfd\x14\xd4\xf1\x26\xe1\x71\x0e\xe5\x1e\x33\x58\x6e\x77\x20\x36\x80\x9f\x0b\x83\x97\x23\xad\x86\xa6\x12\xba\x97\xa6\x70\xd6\x0e\x9b\x36\x08\xb7\xf7\x1a\x82\x60\xfc\x91\xd9\x6d\x5f\x5a\xb2\x18\x3a\x7b\xa0\xb1\x7d\xc2\xc1\x71\xca\xf0\x2b\x70\x98\x46\xba\xde\xe7\xee\x43\x25\x52\x1e\xbd\x20\x5c\x26\xdc\x49\x67\x1d\x78\x83\x3e\x86\x00\xd9\x23\xe5\xe0\xa1\x36\x30\xe0\x10\x97\x62\x07\x36\x27\x7b\x80\x03\x51\xb7\xf6\x6a\x98\xd1\x5c\x4f\xf8\xe1\x50\x1c\x69\x03\x6c\xf3\xae\xf0\xb7\xbf\x63\x9a\xf1\xde\x7a\x4f\xed\x81\x67\x5f\x86\xc4\x55\x4a\xac\x93\xc2\x9d\x0a\x05\x39\x48\x3e\x1e\x8f\xe8\xc3\x94\x28\xc1\xf5\xf1\x86\x68\x78\x4e\xc7\x31\xde\x1a\x54\x8f\x5f\x18\x2e\x53\x83\xdf\x80\x23\xcb\x50\x9f\xda\xab\xc2\xa5\x3c\x3f\x09\x6f\xd4\x85\x97\xc7\x95\x31\x1c\xf8\x65\x5f\x8d\x40\x37\xdd\xfd\x51\x32\xdc\xa7\x91\xfb\xe8\x3a\x88\x29\xcc\xbd\x27\x2c\xb1\x72\x29\x0c\x7f\xd2\xfd\x85\x2b\x31\x5e\xf5\x3e\x87\xcf\xe8\xb9\x77\xa6\x64\xb7\x61\x43\x14\x60\x64\xd1\x8f\xdb\xb7\xe2\x97\x6c\xc1\xe1\xf0\x8b\x3e\xfb\x15\x67\x3e\x92\x95\x21\x51\xc1\x2f\x40\x9c\x71\xb8\xa1\x93\x28\x7e\xe6\x56\xce\xa1\x4d\x7c\x4c\x87\xd9\xb9\xfc\xd9\xfc\x7f\xf4\x48\x8e\x01\xb7\x07\xb8\x78\x65\x27\x49\x4e\x99\x03\x62\x99\xd0\xdc\x39\x99\x28\x4e\x67\x70\x07\x86\x6e\x8a\x3c\x25\x8d\xf7\xd8\x65\x1a\x19\xa6\xe4\xff\xdc\xe5\x8d\xdc\x03\x8f\xb8\x11\xfb\x0b\xee\x5d\x42\x39\xf5\xfa\x71\x5e\xf7\x59\x7b\xbf\x55\xdf\x35\x0f\x21\x58\x72\x2c\x52\xac\x63\x89\xd1\xcc\x88\xe3\x78\x48\x0e\x4d\x56\x3a\xe9\x09\xee\x57\xc4\x39\x8c\xa7\xb6\x80\xc9\xa9\x1b\xe4\xb5\x21\x2b\xb6\xce\x32\x79\x59\x92\x9d\x83\x83\x02\x35\x57\xd2\x26\x53\x62\xa6\x94\xcb\x91\xe9\x3d\xea\xe0\x47\x73\x9c\xcf\x8b\xa6\x3f\xa3\x10\xac\x23\x93\xc3\x66\x72\x48\xc6\xa2\x92\x13\x38\x50\x5e\x29\xda\x6b\xe0\x64\x63\xdd\xdc\x48\x5a\x59\xf4\xd0\xe4\x71\x14\xff\x5c\xb7\xfd\x03\x99\xb8\xe3\x44\x2a\x9c\x50\x92\xd5\x10\x75\xba\xe5\xb3\xcb\x89\x57\x73\x40\xb2\xe2\x1e\x37\xa8\x58\x37\x2b\xd5\xab\x93\xa7\x6d\x52\x8a\x9f\x9b\x84\xbd\x0f\xc8\xb9\x9b\x76\xfb\x50\xa0\xa0\x70\xec\xc5\x13\xf6\xb9\x08\xbd\xbb\x53\x36\xa3\x00\x0c\x93\xd9\x73\xb5\x8f\x66\x6f\x79\x14\xbf\x9a\xd0\xee\xb1\xb8\xb6\xc5\x1a\x3d\x9e\x80\x8b\x89\xf1\xf1\x33\x1a\x81\xaf\x29\x7b\xd7\x39\xc0\x6b\x35\x3c\x91\x61\x9d\x47\x27\xff\x9a\x1c\xfa\xae\xf1\xe8\x8d\x69\x10\x44\x7b\x9c\xd8\x0c\x0f\x04\xc9\xde\x93\xbd\x3c\xce\x44\xed\xe5\xf0\x58\x76\x36\x03\xea\x65\x22\xc7\x34\x23\xc1\xc7\x79\xe5\x35\x7c\x9e\x53\x23\xd8\x2f\x73\x2a\xf1\xcc\x47\x5a\x5d\x93\xff\x48\xeb\xba\xe1\xa3\xd7\xa9\x15\xc7\x03\xbb\x67\xdf\xb1\x2b\xeb\x19\x55\xc2\x55\xf5\x2d\x2e\x44\x6a\x0c\xf6\x06\xd2\xb3\x4b\xcc\xd4\x49\x80\x52\xe1\x81\x77\x5c\xa8\x32\x32\xde\x71\x81\x76\x19\x4a\xde\x70\x87\x73\xba\xb1\xde\x11\x78\x87\x05\x72\x55\xed\xa1\x54\x73\x48\x10\xe6\xf3\xb3\x91\x4d\x43\x7b\xd5\xaf\x31\xb7\x3a\x67\x03\xdb\x05\x04\x24\xac\xd6\x3a\x06\x29\x1d\xbb\xc5\x02\x49\x58\x88\x76\xd6\x0b\x75\x81\xf0\xc4\x51\xfc\x08\xfd\xad\x6b\x9f\xf9\x63\x61\x82\x32\xf4\xe7\x5d\x49\x8b\xf4\x05\x6e\xca\x6a\x3e\xaf\xec\xef\x2b\x5a\xb8\xbf\x75\x74\x14\xde\x95\xcd\x55\xb3\x00\xc3\x3d\xcc\xb4\x9b\xcf\x3b\xf8\x69\xff\x3f\x2b\xcb\xdd\x7c\x5e\x30\xa0\xb3\xd2\x4e\x6b\x68\x4f\xcf\x2e\x91\xad\xea\xb0\x29\x4d\xf0\x9b\x06\xf4\xe1\x10\xc7\x81\x99\xad\x99\xcf\x2f\x5c\x13\x5b\xcf\xfa\xd4\x63\x3b\xa4\x3a\xbb\x8c\x78\xe5\x01\x65\xe3\xe5\xb8\xca\x72\xa3\x55\x14\x0a\x2d\x98\x65\x97\x47\x54\x75\x67\x56\x6f\x5e\xf7\x2e\xfa\xe4\xb7\x26\x7b\x3f\xf1\x6a\xbb\x25\x3c\x1f\xc9\x5c\x07\x5e\x81\xf5\x82\xd6\xb8\x5e\x6c\x1a\x4a\x98\x78\x59\x3b\x99\x04\x49\xd9\xb4\x1b\xe3\x17\x6f\x27\x8d\xf6\x32\x44\x70\x20\x49\x26\x85\x07\x24\x9b\xd6\x16\xf0\x8d\x73\xa4\x18\xb4\x85\xeb\x80\x02\xff\x20\xba\xa0\xbf\xcf\xdb\xbd\xdd\xa5\x12\xba\xea\xe7\xed\xd9\xce\xf8\x38\xd4\xaf\xb7\xf2\x25\xbd\xfa\x17\xae\x0f\x4d\xc5\x42\x89\x87\x5c\xe5\xd4\x8c\x46\x3e\x19\x36\x54\xe4\x84\x84\x5e\xeb\x53\xc4\xb0\x93\xb1\x33\xab\x2b\xbf\x04\xc5\x5d\x56\xfd\x12\x2e\x2d\xdf\x60\x99\x01\x5a\xb4\xc0\x41\xc5\x44\xfc\xcd\x28\xdb\xdc\x11\xf1\x52\x47\x65\x0c\xcd\xd2\x9e\x98\x51\xcd\xe7\x7d\xe6\x59\x1f\x15\x72\x58\x40\x8e\xab\x4e\x07\x95\xb6\x8f\x54\xd9\xfe\x5a\x08\xf6\x66\x0e\x47\x6b\x78\x03\x7f\x39\x7a\x39\xf4\x41\x83\xc6\x20\x73\xb0\xc7\x0d\x6e\x43\x28\x9f\xcf\x53\x91\x17\xa2\x0c\x97\xac\x47\x1b\x6e\x90\x05\x11\xa4\x7e\xc9\x41\xb4\xd4\xa2\xd4\x00\x9e\x04\x9f\x8d\xd1\x93\x81\x55\x1c\x93\x05\x87\x57\xe2\xda\x8c\xd1\xb2\x3e\xe3\x3f\x4a\x8b\x7a\xcf\x3d\x67\x7f\x96\x01\xcc\x55\x2a\x2d\x2c\x07\xe0\x70\x56\xe6\x8e\xd3\x30\xd8\x32\x8d\xc7\xa1\x68\xb0\x3b\x5d\x6d\x4f\x9d\x39\xaa\xcc\xfc\x38\x14\xba\xbf\x9a\xe0\xec\x65\x8e\xdc\x11\xc4\xc8\x29\xc9\xc6\x54\x6b\x03\x38\x18\xe2\xd1\xb0\xde\xed\xc8\x5c\x86\xec\x89\x61\xe7\x03\x6d\x8e\x5f\xb8\x43\xc7\x7c\xe0\x79\x28\xc1\x3e\x8e\xe9\xe9\x65\xbc\x09\x63\x21\x14\xd7\x43\x72\x5c\xcf\xaf\x51\x0f\xc5\x3b\x34\xc8\x59\xfc\x0a\xe2\x7b\x81\xa2\x1d\x3e\x32\xcd\x93\x8d\xb9\xc9\xc6\x8e\x36\x1e\x64\x9b\xe4\x2d\x11\xb0\x0a\xaf\xa9\xda\xc7\x21\xfa\x99\x83\x57\xc4\x6a\xaa\x80\x22\x41\xe8\x9e\x0e\x58\x7a\x59\x13\x26\xe8\x0d\x55\xcc\x01\x32\x7e\xb1\x03\x9f\x99\xa3\x9c\x17\xa8\x60\xb8\x80\xc8\x9b\x10\xa7\xc2\x84\x7e\x04\xe2\x51\x28\xe2\x41\x03\xa8\x77\xea\x19\x0b\xe8\x4b\x24\xe1\xab\x08\x8b\xd8\x73\x45\x07\x25\x89\x1e\xcf\xac\x33\x94\x99\xaa\x7b\xdd\xb7\x2d\x23\x1a\x6d\xb8\x99\x9c\xcf\x20\x53\xf4\xf4\x7a\x31\xa6\x27\x5e\xaa\xa6\x60\xdc\x82\xd6\x08\x61\x63\xb6\x1b\x67\xa6\xb8\xf7\x9b\xc8\xbf\xb6\x4c\x7d\xfd\x4b\x99\xfa\x11\xb6\x3d\x0a\x57\x8c\x1c\x3c\xd5\x5d\xa3\x13\x23\xfa\x38\x92\xa8\xc1\x96\xb0\x9a\xb2\x5b\xf7\x56\x37\xee\x46\xa5\x82\x64\x26\x36\x54\x38\x1b\x3f\x9c\x9d\x81\xf5\xd1\x1b\x1c\x3d\x27\x3d\xfc\x0a\xe3\x7e\x6a\x81\x8d\x17\x10\x3b\x83\xe7\x18\x73\x97\xd0\x6c\x9c\x27\x04\x4a\x31\xe2\xdf\x33\xce\xd3\x25\x3a\x4e\x73\x00\x35\x09\x76\x00\xb2\xc2\xc9\x23\xec\x8e\xd9\xbb\xd4\xbb\x72\xb8\x7a\x4e\xbd\x3d\x1c\x0e\x89\xcd\xb9\xcf\x47\x59\xc0\x7a\xdc\xda\x91\x6b\xc0\xb8\xf6\x4c\x8e\x5c\x07\x49\x45\x88\xdc\x4e\x79\xf7\x79\x84\x39\x38\xce\x8f\xec\x38\xc7\x97\xff\xed\xee\x81\xac\x07\x50\x7e\xfa\xd9\xe3\xe8\x76\xed\x31\x73\xf8\x35\xb2\xc1\x24\x8c\x26\x1f\xda\x8c\x27\x9f\x5d\x1a\x9f\xa1\xb1\xf3\x77\x19\xb9\xb1\xe5\xd8\xae\x51\xc5\x7c\xca\x00\x67\x50\xda\xa7\xfc\x11\x9e\x55\xff\xec\x12\x34\x5b\x76\xb6\x02\xa1\x09\x29\xa1\x7e\xf7\xa6\x12\xae\xec\x44\x1c\x13\x3e\xc0\x40\x8f\x9c\x85\x71\xc3\xe0\x11\x7e\x13\x0b\x64\xaa\xb6\x09\x6b\xfc\x88\x12\x37\x27\x80\xe6\x8e\x77\xca\x9c\x5a\xee\xe0\x3c\x70\x66\xc7\x15\xe8\x51\x6a\xbf\x74\x8d\xa9\x3a\xbe\x5c\xad\x43\xcf\xcf\x3c\xaa\x8b\x56\x6b\x1a\x75\x11\x18\x8d\xbf\x9f\x5d\x3e\xe1\x5f\x94\x17\x4f\xf8\x67\x9f\xa1\x63\x32\x3d\x78\xcd\x44\x46\x11\x4c\x7d\x9a\x59\xf6\x39\xf5\x86\x91\x41\xf7\x31\xb6\xc6\x2c\x54\x98\x24\x7e\x75\xa0\x74\x3e\x2b\x93\x14\x59\x60\x1e\x9f\xcf\xb5\x02\xdb\x9c\xbb\x60\xb5\x17\x4f\x84\xb7\xfd\x08\xeb\x49\xca\x4b\xb2\x12\xeb\x11\x52\xc7\xc7\xfd\xd1\x78\x46\x2b\xc3\x8f\xf9\xa8\x71\x64\x3c\x9a\x93\xbb\xfb\xc8\x86\x48\x39\x74\xff\x0c\x88\x13\xe4\x04\xad\xe9\x69\xf2\x43\x16\xbf\x1e\x33\x6a\xfc\xe9\x69\x83\x26\x9c\x77\xca\x77\x0f\x73\xc3\x9a\xaf\xed\x1f\x39\x93\xca\x80\x0c\x72\xe1\x09\x07\x4d\x32\x1c\x74\xc8\x2a\x93\x1e\xab\x4c\x72\xac\x32\x19\x60\x95\x5d\xcd\x7e\xc7\x2d\x23\x6e\x8b\x42\x82\xa3\x1f\x0f\xd2\x60\x3a\x94\x4e\xcc\x8d\x24\x2d\xbc\xf2\x28\xd6\x7a\xc5\xd6\x86\xbb\x56\x7f\xd1\x1a\xc9\x1e\x7f\x1d\x9e\x3d\xcb\x57\x8f\x5a\x10\x3d\x77\x7d\x17\xf3\xd4\xce\x3e\x16\xe8\x16\x34\xe7\xd9\x8f\xe5\xba\x0e\x67\x9d\x44\x09\xd9\x4a\x90\x11\x39\xec\x4e\x6b\x94\xf3\x32\xc8\x0c\x28\x16\xbb\xed\x2d\xaf\x6a\xf2\xa2\xe5\x36\xb4\xbf\x88\x11\x3b\xfa\xae\xec\xf7\x61\x7e\xc9\xa8\x32\x8a\x8b\x56\xc9\x4f\x6f\x45\xd6\xd2\x5b\xd9\xc3\x48\x8b\xa1\x2f\x26\x71\x9d\x8a\xb0\xae\xee\x5e\x5d\x2e\x02\x7c\x13\xe1\x2c\x9d\xd8\x23\x38\x82\xea\xdc\x33\x67\x3c\x72\xf3\xf7\x1b\x67\x43\x2a\x87\xb1\x2c\xe8\xf0\x39\xb9\x81\xb1\x5a\x66\x13\xa3\x86\xdf\xf9\x9c\x87\x30\xa8\x66\x25\x57\x64\x5d\x0e\x54\xf1\x2f\x79\x3c\x94\x4f\x75\x16\x93\xd8\x80\xc2\x30\x84\xdb\x81\xcf\x4c\xc0\xcf\xf8\xd7\x36\xeb\x76\x60\xab\xd4\xe9\xd6\xae\xd4\xf1\xac\x0b\xe1\x2a\xa2\x2f\xd5\x83\x4d\xf0\x40\x16\x34\x44\x13\xcc\x30\x41\x3e\x02\x5f\x42\xf5\xcc\x9b\xf2\xd2\xc4\xea\x6e\x53\x19\xd4\x2a\x3c\x1d\x8d\x72\x3a\xfc\x08\x59\xcd\x10\x3a\xf5\x7f\x12\x6d\xc8\x07\xcf\xc8\x75\xde\x27\x2c\x0e\x5f\xcc\x86\x23\x5a\x5a\x1d\x1f\xb9\xe4\xa7\xcf\x5a\x1f\x8f\x0a\x8c\x5e\xfc\xe8\xed\x4d\x97\x74\x76\x7d\xed\x13\x9b\xf5\xc2\x27\x5f\x34\xf4\xf6\xce\x57\xe0\x4c\x1b\xd4\xa9\x89\xed\xba\xdb\xdc\x91\x7a\xd7\x90\xda\x4c\x29\x9d\x90\x49\x5f\x9d\x7d\x4c\x5b\xf6\xac\xbd\xbf\xa7\xbd\xf7\x35\xe5\x64\x23\x9a\x07\x93\x0d\x30\x20\x86\x2f\x85\x0e\x9a\xd7\x95\xec\x83\x4b\x32\xde\x8c\xe1\x13\x28\xa2\xea\x33\x04\xc1\xc5\x25\xca\x2f\x14\xab\x82\x4c\xe2\x7e\xc5\x55\x5d\x18\xcc\xdc\x53\x35\xa2\x68\xf9\x52\x8d\x58\xec\x19\xf9\x59\x2c\x83\xc1\x7d\xea\xff\x27\xdc\xfb\xa7\x68\xe6\xe8\x09\xfb\xfc\xf7\x4f\xa2\x0c\x5d\x90\xb3\x4f\xd1\x8d\xc8\xb7\x66\x09\x4f\xf2\xa1\x1e\xd4\xdf\x42\x36\xdc\x9b\xac\xe8\xf9\xf9\x7a\x42\xd5\x5c\xcf\xcf\xa5\x9a\x2f\x3f\x3f\x97\x12\xb9\xbc\xc4\x26\x07\x03\xc1\x75\xcb\xc8\xd2\x09\x93\x44\x4a\x89\xa4\x4c\xd1\xcf\x28\x81\x62\xf4\x53\xf7\x73\xed\xb0\x0f\x18\x89\x2c\xd6\x47\xd1\x8f\x59\x9c\x0f\x33\xb4\x79\xbc\x75\x9a\x11\x8d\xb3\xc1\x4f\x8b\x31\xee\x91\x46\x61\x17\x49\xd9\x11\x51\x00\xd1\xcd\xb1\x19\x51\xa8\xa3\x3f\xdb\xe0\xba\x91\xf2\x08\x71\xae\x7b\x35\x0d\x2b\x4c\x24\x93\xd2\x6c\x16\xf0\x39\xde\xae\x20\xbc\x64\x7e\x6d\x4a\x30\xfc\x05\x50\xca\x57\x67\xeb\x5c\xd9\xc6\xaa\xeb\xe8\xad\xf1\x2d\x84\x43\x84\xa3\x66\xfd\x83\x69\x53\x41\x6b\x6e\xe0\x59\xbf\xc4\x03\x26\x8b\x24\x4a\xd1\x9c\x47\xc5\x18\xa7\x2e\x6e\xc0\x08\x3a\x3b\x40\x5d\xb2\xc2\x68\xfc\xb8\xfc\x40\x9b\x46\x1f\xc2\xa0\x40\x44\x8f\x0a\xe8\x17\x7e\x7a\x38\x7d\xa0\xf5\xb9\x77\x55\x97\x99\x6a\x98\x23\xe2\xcc\x85\x45\x86\x6b\x8d\x2e\xda\xf4\x75\x50\xe0\x2c\x28\xd0\xa2\xfa\x55\x48\xe0\x7e\xe8\x41\x56\x6b\x49\x9d\xeb\x41\x94\x9b\x22\x37\x6e\xfc\xa6\xbf\xee\xb4\x05\xa4\x1c\xcf\x17\x2d\xf1\x68\x7b\x31\x88\x34\xd2\xb5\xea\xd5\xc3\xb0\x2f\x40\x30\x73\xad\x48\xbf\x7b\x82\x23\x7c\x35\x18\xe5\xa8\x29\xbb\xa1\xfc\x9e\xd4\xb1\x7c\x9e\x9d\x84\x23\xbe\xc3\xd3\x09\xe8\xb3\x34\xe7\x6e\xdf\xbf\x42\xe2\xf8\xe7\x1e\xea\x84\xaf\xeb\xd8\xb0\x13\xdf\xaa\x32\x8f\xbb\xa9\x50\xfd\x28\x66\x28\xc8\xfa\xfc\x88\xb2\x63\x90\x30\x16\x7c\xa1\xa2\xfe\x57\x74\x6d\x93\x06\xf5\xdf\x4c\x72\xb7\x90\xe2\x0c\xa9\xa9\x81\xd7\x22\x29\xe5\xf0\x79\x4e\xa3\x08\x33\x55\x5d\x7a\x77\x97\x4b\x56\x1f\x1c\x4c\x7d\x7b\x89\x54\x27\xe0\xaa\x60\xb0\x35\xae\x4a\xb2\x6a\xd7\x93\x6a\x75\xb1\x2e\xcb\xb2\x5a\x5d\xae\xe7\x73\x93\xad\x83\xaf\xda\xb5\x94\xb9\x02\x34\xc9\xf4\x34\x11\x13\xfd\xf1\x7d\xfe\xfc\x14\x13\x5c\xf2\x34\x43\x0c\xf7\x12\x73\x0c\x99\x99\x72\x82\x43\x1b\xad\x95\x21\x5c\x95\x17\xb8\x2b\x5b\xbb\xb0\xea\xf3\xee\x49\x65\x17\xd6\x94\xed\xaa\x5a\x4f\xe8\xaa\x59\x97\x2b\xb2\x6a\xd6\x98\xad\x9a\xf5\xda\x97\x1b\xcd\x05\xc2\xeb\x23\x24\xb3\x95\x72\x60\xa5\xe9\x05\x91\x5e\x4c\x79\x6a\x07\x26\xa3\x3e\x41\xeb\x53\xfb\xe4\x08\x39\xa5\xb8\xd1\xd5\x85\xf1\x10\x81\x55\x3f\x3e\x1e\xce\xfc\x97\x21\x40\xee\x12\xf3\x55\x00\xc6\x0e\x67\x44\x5a\x07\xa9\x07\x26\x32\x47\x6d\xf6\xa7\x4c\x16\xc9\x9a\xd6\xe6\xae\xe9\x53\x36\x77\xf7\x0e\x12\xb3\x1c\xdb\x18\x02\x40\xaf\xd6\x68\x69\xc1\x75\x10\x2a\x70\xff\xd2\x7b\x32\x22\x34\xce\xa3\xeb\x65\x9d\x50\x16\xec\x79\x23\xcb\x3c\x21\xdc\xbb\x68\x45\x19\x5e\xf8\x3a\xc3\x85\x53\x74\xf6\x78\x08\x9f\x56\x7a\x88\x7d\x18\xa4\xb7\x61\xf5\xf3\xb1\xed\x1e\x66\x2c\x1e\x85\x0e\x5c\x66\x9e\xc2\xc5\xfc\xa7\x81\xa2\x42\x7d\x0a\xa9\xd3\xed\x68\x75\x94\xcc\x95\x13\x8f\xca\x90\xe7\xbe\x9f\x70\x67\x45\x48\x0c\x40\x0a\x96\x32\xca\xc2\x69\x52\x5a\x8d\x4c\x26\xed\x00\x73\xab\xd2\x0e\x73\x84\x46\x35\xc8\x33\xbd\xf4\xa3\x96\x05\x68\x8d\xef\xa9\xf8\xa9\xea\xbe\x87\xaa\xc1\x24\x2a\x6f\xdd\x27\x1a\xfd\x2d\xd4\x45\x28\x1c\x47\x84\xbc\xc2\xaa\x47\x89\x69\x79\xf1\x84\xfa\xfb\x8d\xba\x00\x4d\x9d\xa2\x69\x45\xd7\xeb\xf9\xbc\x30\x7f\x0d\x52\x6d\xfd\xda\x06\x54\x0c\xe0\x94\x4c\xd2\x31\xfc\xa2\x1d\x8f\x4b\xf8\x8f\x81\x36\x76\xaf\x14\xbe\x8b\x5c\xa1\x9d\x00\x24\x2b\xb2\x56\x02\x7d\x59\x96\x05\x99\x52\x5f\xe5\x2a\x5d\xd3\xd5\x20\x30\xc8\x7a\xe9\x0f\xe1\x8a\xac\x91\xbb\x39\x33\x63\xc9\xeb\x6b\x5d\xbb\x85\x38\x5d\xc3\x59\xe8\x13\x56\x97\x04\xe4\x18\xd5\x7f\x00\xb4\x60\x6a\x55\x3a\xa5\xa8\xff\xe5\x47\x5a\x84\x62\xdb\x4f\x99\xc3\xe1\x30\x3a\x60\xf4\x1a\x38\xe5\xa3\x15\xf7\x1c\xc5\x37\x35\xfd\xa2\xdb\x22\x92\xf7\x06\xb4\x0d\xae\x8b\x9e\x1a\x42\x13\x4e\xbe\x63\x0b\x75\xb9\xbf\xdd\x71\xa6\xa8\xb8\x69\x55\xcc\xcc\x90\x3a\x2d\x27\x9e\x01\xb9\x63\xbb\xed\x2b\xbe\xbd\xab\x58\xa4\x71\x80\xbc\xc3\x23\xef\x63\x5d\xfd\x75\xd5\x34\x7d\xad\x45\x01\xc7\x36\xcc\x1a\x36\x60\x3b\x39\x3f\x17\x48\x31\x9e\x2b\xb1\x86\x02\x0e\x70\xe3\xb0\x1f\x3b\xe2\x52\x6f\x9f\x5d\xda\xba\x23\x17\xb2\x20\x08\x8d\x74\x14\x1a\x61\x78\x0c\x78\xbe\x70\x4e\xd8\x72\x00\x80\x70\xae\xbd\xab\x76\xee\x38\xba\x64\xf5\xea\xb4\x95\x5f\x08\xdf\x29\xca\x08\xfc\x17\x7d\xf5\xda\xa2\xa6\xdd\xa6\x65\x8c\x6c\x6c\xd2\xed\xe4\x6e\x35\x07\x25\xb9\x5e\x65\x02\x9a\x38\xeb\x6a\xa4\x8a\x8c\x1a\x9e\xd6\xf9\xd0\x16\xda\xc2\x76\x6b\x6c\x22\x9e\x6e\xce\xcf\xc1\x60\x60\x42\x9b\x54\x37\x28\x52\x59\xf0\x27\xa2\x9f\xa8\x43\x2c\xba\x3b\x7a\x23\x0a\x34\x31\xde\x16\xcc\x9b\x1d\x68\x79\xaa\xfe\xab\x40\x0b\xab\x98\x2a\x14\xb3\x4c\x17\x8c\xfc\x2c\x0a\xf4\xe4\xac\x5d\xd4\x2d\x23\x4f\xfc\x23\x1b\xca\xd1\x2e\x40\x2b\x34\xa9\xa6\x94\x75\xa2\x62\x1b\xd2\xde\x4c\xb7\xf3\x79\x65\xa6\xfb\x39\xd8\x52\xf5\x9c\x2a\x84\x2b\xb7\x0a\x24\x7d\xc5\x65\x5d\xf6\x01\x88\x6d\x2e\x77\x52\x86\x4a\x39\x6f\x06\xf7\x3a\x4b\x92\x1e\x41\x73\xf3\xe3\xe8\x6c\x4c\xd5\x80\xde\x21\x2f\xff\xf7\x95\x0d\x39\x59\x24\xa3\x9e\x51\x37\x4e\x34\x18\xc9\x49\xc6\x44\xcf\x89\xc7\x74\x2d\x3f\xad\x84\x49\x2d\x72\x8f\xc1\x64\x65\x10\x0d\x65\xd5\x71\x7a\xc0\x5a\x5b\xf6\xb2\xe3\xd4\xda\x8e\x17\x0a\xe4\x63\x4b\x06\x3a\xde\xb9\x4e\xfd\x32\xb5\x7b\x9b\x49\x81\x95\x8d\xac\x04\x5b\x72\xa2\x61\xc9\x35\x1c\xa9\x8d\x3e\x49\xd2\x50\x65\xf5\x8b\x04\xf7\xd2\x55\x65\xd3\x80\x99\x6c\x5d\x29\x7e\x0d\x01\x2a\xa7\x0d\x2a\x86\xd5\x1c\x63\x40\xec\x37\xd7\x20\xcd\x4c\xc6\x03\x38\x33\x06\x91\xd7\x94\x51\x43\x2a\x75\xd9\x5f\x53\x62\xd4\xdb\x9f\xf6\x32\xaa\x6c\x40\xec\x05\xb1\xf7\xc5\xda\x38\x0e\x69\xa4\x4d\xa8\x8d\x69\xc9\x02\x11\x25\x56\xa6\x70\x45\x63\xd8\x98\xba\x85\x2b\x09\x3d\x73\x49\xe0\x2e\x55\x5a\x34\xe5\xc5\x93\xe6\x73\x5b\xe9\xe3\x49\x63\x85\xf8\x5d\xd9\x29\xc9\x7d\x53\x92\xd5\x4e\x97\x36\xa4\xf5\xec\xac\x2c\x77\x36\x8c\xa9\x5d\xed\xd6\x87\x03\x5d\xed\xd6\xf8\xce\xda\x72\x4d\x6a\x58\xb7\xde\xfa\xaa\x06\xf3\x11\x84\x8e\x99\x44\xb1\xbe\xa4\x91\xf3\x5c\x4c\xb8\xc5\x1d\xde\xa0\xc9\x5b\x4e\xaa\x77\x3a\x89\xac\x4f\xff\x1b\x7f\xe1\x59\x54\xf5\x05\x2e\xee\x4c\x79\xb1\x1d\x42\x47\x7c\x74\xef\x46\xa2\x23\xc2\x91\xad\x1d\x2c\x1e\xd7\xca\x1c\xbf\xc1\xa8\x36\xa7\xad\x58\xed\xd6\xe5\x46\xea\x10\x33\xcb\x9f\x6e\xdc\xc1\x92\x47\x64\x7b\x52\x9e\x5d\x1e\x61\x12\x5c\x89\x9e\xf1\x98\x05\x48\x21\x4b\xe6\x73\x27\xd2\xc9\x3c\xa9\x2b\x5d\x85\x33\x57\xe8\x31\x77\xec\x27\xa3\xb4\x03\x04\xe2\x11\x33\xaf\xb9\xb2\x57\x7c\x3d\x61\x27\xce\x9b\xf9\x79\xcb\x01\xce\xf6\x14\x66\xea\xde\xd5\xc4\x25\x1f\x71\x79\xc4\x2f\x4f\x94\x5f\xec\xef\x81\xd3\x54\x33\xd5\xec\xcf\x73\x5b\x4d\x3c\xd0\x6b\x83\x56\xe5\x42\xc6\x36\x0e\x4b\x6d\x56\x5a\x4f\x6a\x58\x4d\xec\x8b\x11\xf6\xce\xbc\xab\x3f\xba\x2b\x47\x94\x67\xc0\x09\xed\xe6\xf3\xa2\xea\x5d\xf1\xbe\x88\x81\xd1\x86\x0c\xbb\x1b\x8c\x6b\x48\xac\xe6\xb7\x01\xc5\x28\x2d\xc9\xaa\x2d\xbb\x15\x5b\xaf\xf5\x16\xee\x6c\x3e\x80\xb3\xb2\xac\x56\xed\xfa\x70\xb0\x8e\x24\x5f\xfd\x7d\x57\x35\x05\x5f\xb5\x6b\x4c\xd1\xe1\x20\x9c\x5e\xd7\x1d\x92\x5e\x71\xa6\x37\x9f\x7f\xb2\x8f\xb9\x4e\xb9\xfc\xc4\x0a\x83\xf2\x8b\x37\x41\xfe\xe2\x7b\x9d\xd5\x6c\x2c\xbd\x22\x64\x71\x89\x93\x6f\x1a\x05\xd7\x58\x7c\x05\x39\xd1\x35\x12\x49\xb2\x70\x04\x2e\xc4\xa3\x72\x63\x32\xfa\x47\x0f\x6b\x4c\x16\x41\xb8\xc6\x16\x7e\x06\xef\x77\x89\x85\x0a\x34\x44\x2f\x5a\x0e\xf5\x01\x22\xd4\x57\x0f\x3f\x5e\xda\x7b\x5f\xda\x35\x9b\x0f\x3d\xca\x6e\x9e\x64\x36\x0f\x6b\x68\x40\xde\x7f\x57\x7a\x83\xb5\xfc\xde\x38\x2f\x6b\xf5\x51\xa8\x73\x09\xbc\xd8\x13\x8e\x85\xfc\x2c\x78\xb5\x11\xaa\xc7\xba\xb6\x7c\x7c\x17\x54\x2e\xd1\x9e\x0b\x04\x33\x24\xf1\x3b\xc8\x32\x91\x56\xd7\xf3\x59\xa7\x67\x6e\x65\xb3\xd2\x17\x8b\xbd\xab\xba\xd7\xf6\xb9\xe9\x5f\xf3\x04\xe0\x13\xad\xe4\xdc\x81\xaf\x9e\xfb\x37\xe9\x77\x9a\x17\xd7\xf3\x09\x55\x2a\xd6\x45\x29\x5a\xf1\xe1\x40\x24\x76\x5d\x45\x4a\x1c\x0f\x28\x70\x6c\x77\x11\xe4\xac\x75\x53\xd6\x63\xbe\xde\x92\x0d\xbd\xa1\xa4\x2e\x18\x42\x19\xa0\x82\xc7\x56\x20\x20\x85\x8b\x7e\xe9\x26\x0e\xbe\x28\x47\x80\x02\x86\x84\xa0\xf6\x82\x92\xbe\x7c\x35\x08\x6b\xe8\xbc\x25\xe2\x1b\xc5\x1c\x29\x6a\x57\xe8\xb0\x60\x6d\x24\x47\x93\x4e\x41\x51\x3d\x31\x90\xec\xef\xda\x7c\x5e\x98\x7e\x32\x3b\xaa\x3b\xd3\x29\x97\x71\xb0\xa3\x08\xe1\xea\x4a\x67\xd0\xac\x94\x4c\x9a\xcd\xba\xec\x6a\xeb\x98\xaf\x82\x6c\xc7\xb6\x76\x21\xe6\x08\x2d\xa1\x1b\x90\xdf\xe1\x36\x6f\xbd\xce\xdb\x7c\x68\x11\x32\xdd\x2d\x29\xf1\xf1\x46\x66\x4b\x43\x20\xc2\xaa\x90\xf5\x5c\x1a\x03\x1f\x3d\x05\x7c\xf4\x97\x80\x8f\x5d\xe9\x0c\xa8\x2c\x28\xc9\x6c\xab\xa0\xbf\xd4\x15\xdb\x43\x9f\x6b\xbb\xba\x17\x2d\x27\xf4\x96\xa9\x99\x12\xcc\x30\xc7\xaa\x13\xf4\x6b\xe1\x4f\x0d\xfc\xfd\xc1\x48\xd4\xcf\x1f\xed\x58\x4c\xed\xd7\x43\x67\x02\x85\x07\xe7\xbf\x66\x6b\x00\x1e\xae\xc4\x49\xc1\xf0\x9e\xd6\x9d\x26\xe2\x9e\xdd\x1c\x3b\xb3\x57\x03\xf8\x1b\x03\x75\x99\x83\xc3\x53\xa6\x2b\x84\xba\xbe\x7a\x87\xc1\xd6\x73\xef\x82\xd6\xf6\x3c\xe0\x93\x9a\x85\xb7\x41\x4a\x35\x35\x58\x42\x78\x80\xcb\xb6\x85\x85\x3e\x39\x3a\xa7\x91\xbe\x78\x9e\x16\x54\x3b\x25\x15\xfd\x2a\x03\x7b\x5a\x2f\xb5\xb9\xe9\x61\x4b\x96\x81\xa7\xaf\x94\x08\xe5\xce\x6e\x16\xeb\x8e\x62\x02\x3b\x05\x13\xd8\x2f\xc3\x04\xeb\x44\x7b\x7d\x4b\x18\xe1\x95\x20\x6e\xb3\x82\xc9\x02\xe4\xc7\x1a\x44\x79\x28\x3d\x34\x85\xa6\x43\xcc\x81\x92\x43\xe1\x1f\xe7\xe8\xcb\x5c\xcc\x88\x4e\x8b\xcc\x32\xd9\x8f\x99\x4e\x72\x5c\x0d\x93\x91\xc9\x31\x32\x52\x61\x81\x3b\x84\xe9\xaa\x5d\x97\x9d\x37\x42\xe3\x91\x4f\x8c\x1b\xa6\x92\x7a\xa3\x0a\xaf\xa6\x5c\xaf\x39\xc3\x7a\x83\xa2\x12\xb4\x3e\x67\x05\xf0\x12\x28\xaa\x6d\x44\x75\x51\xe6\x2a\x4c\x1a\x1e\x97\xbe\x0f\x0b\x63\xe7\xf6\xb2\xc5\xd4\xec\x63\xc8\x49\xa0\x49\xe5\x0c\x1f\x6c\x55\xad\xa5\x94\xf8\xae\xea\xec\xca\x9e\x36\x1f\xaa\x07\xcf\x4e\x84\x9e\xb1\x8a\x9f\xf7\x6f\x1c\xb7\x34\x9f\xcf\x2a\xf8\x08\x92\xd5\x2c\x88\xe9\x08\x7a\x1d\x64\x6f\xc2\x7e\x87\x47\xb7\x1e\x09\x03\x23\x1f\x0e\x7c\x3e\x37\x25\xf3\x3a\x0d\x71\xb7\xce\x78\xf8\x97\x03\x43\x0f\x2e\xa9\x98\xd1\xda\x2c\xc8\x75\x79\x38\xcc\x68\x9d\x3c\x43\xbd\x71\x12\xa2\xf5\x98\xf1\x3e\xab\x58\xfd\x99\x80\x9a\xc8\x99\x91\xdd\xdb\xfe\x14\x46\x6e\x9f\x13\xc6\x3f\x2b\x20\xb6\x2e\x1c\xce\x6f\x23\xd2\x2b\x1c\xe1\x38\x7f\xab\xad\x0c\x90\x56\x57\x44\xce\x0f\x09\x65\xd9\xe0\xf5\x2c\x02\xa8\x58\x69\x42\xa2\xa5\xba\xc5\xa6\xba\x27\x26\x82\x71\x7d\x38\x88\x15\x59\x2b\x3a\x35\xc0\xe4\xbb\x33\xed\x6a\x82\xf5\x8a\x67\x17\x1c\x53\x5d\xe4\x77\x0c\x3a\x5c\x09\x79\xa1\x83\xb4\x3e\x91\xf6\x1e\x4b\x86\x77\xc5\x1e\x6d\x48\x6d\xae\x2c\xf5\xc0\xb7\x41\xcd\x3c\xf3\x35\x92\x08\xb3\xfe\x1a\xa3\x6b\xc5\xbb\x8f\x87\x15\x08\xde\x40\xfa\xa4\x58\xc5\xf1\xc9\x5e\x48\x88\x1f\x79\x63\xc9\x94\xcf\x52\xef\x89\x34\x75\x44\xba\x2a\x2f\x9e\x54\x9f\x53\xe7\xf2\x63\x89\x74\x57\xd2\x55\xb5\xc6\x7b\xd5\xd5\xb2\xc1\x86\x3a\xd7\xcb\x9d\x2d\x0d\xe8\xc4\x35\xbf\x29\x91\x54\xc5\x70\x87\x26\x7c\x61\x3f\x2c\xfd\x9f\x87\xc3\x6a\x8d\xfd\x4f\x2d\xe2\x37\x08\xef\xe6\xf3\xf4\xe9\x62\xb1\xd8\x21\xdc\xae\xaa\x75\xa9\xee\xe5\xc6\xdd\xcb\x0d\x50\x69\xed\x80\xbe\x29\xf5\x2c\x5b\x69\xa2\xb7\x3b\x5d\x9f\x21\x03\x9d\xd9\xb9\xc0\x1b\x60\xc1\x07\xb7\xe5\x57\xc3\xfb\x7d\xc5\xcd\x7c\x3c\xd4\xaa\xd3\xa1\x46\x1f\x03\xb5\x16\xe1\x2a\x0b\xb5\x4a\xeb\xb5\x3a\x03\x1a\x05\xbc\xd6\x01\xaf\x35\xc0\x3b\x09\x5c\x1d\x80\xeb\xd8\xbc\x43\xd6\x07\x7a\x9f\x88\x3c\x77\x5f\x28\x8e\x5c\xb3\x40\xf6\xbe\x75\x25\x36\x5c\xa8\xc2\x34\xbd\x42\x19\x5a\x78\xf5\x00\x55\xfb\xb3\x6b\x1a\x24\x31\xed\x12\x92\x60\x4b\x09\x4a\xeb\xf8\x93\x2b\xc6\xbd\x77\x9d\xeb\x6c\x68\x01\x05\x83\x07\x52\x57\x39\xb4\xad\x83\xd7\x9a\x2d\xea\x07\x3e\xcd\xe7\xa0\xd7\x12\x8b\xaa\x69\xda\x0f\xdf\xaa\xc9\x05\x06\x0f\xeb\x83\x64\x6a\xab\xd9\x78\x8c\xb7\x6d\xdb\x90\x8a\x01\x15\x85\xa2\x6d\xb6\x92\x5b\xc9\xaf\x7e\xf7\x7f\x0b\xc1\x77\xe4\x20\x0e\x97\xe8\x93\xdf\xd1\x05\x94\xa1\x25\x68\x39\x63\x3b\x35\xb2\xd1\x33\x40\xa8\x69\x20\x00\x2d\x8d\x62\xf3\xe8\xec\x74\xed\xb8\x2f\xf5\x04\x0a\x28\xde\x4e\x87\x56\xec\xa8\xb8\x9d\xbe\x62\xa0\xfc\x5c\x83\x52\xfe\x36\x70\x74\x76\xee\x48\xbc\x0d\x20\xb5\x46\xf3\xcf\xfe\x00\xcb\x2b\xf8\x79\xf9\xaf\x58\xd1\xa3\xe7\x95\x20\x85\xad\x21\x7c\x81\x39\x3a\x9f\x2d\x67\xe7\xf6\x01\x47\x48\x07\xa5\xe8\x66\x56\x0d\x18\x40\x41\x5c\x05\xaf\x97\xa6\x44\xde\x95\xd9\xc7\x00\x32\xa4\xfc\x82\x84\x46\xd9\xe7\x90\x02\xe7\x8c\x76\xdf\x56\xdf\x16\x04\x41\x7d\xbc\x97\xaf\x5f\xb9\x12\x79\x1a\x0f\x7c\x21\xbe\xd0\xe5\x86\x80\x12\x9a\x9c\x95\xe5\xe5\xef\x2e\xf4\x1f\x9f\x5d\xfe\xee\x42\xda\xf2\x4e\x63\x60\xb4\x9b\x0f\x51\x38\xda\x47\xcd\xd5\xf2\x6b\x0b\x51\x7e\x0b\x2b\x2b\x08\x42\x57\x22\x5d\xc4\xaf\xe8\x44\x22\x28\x33\x95\x99\x99\x82\x4c\x82\x2f\xba\x23\x03\x0a\x82\xf0\x23\xda\x4a\x34\x21\x0b\x83\x57\xae\x52\x7f\xc9\x30\x59\x28\x80\xfb\x27\x14\x93\x45\xee\xe8\x96\x02\x93\x85\x9e\xbe\x6f\x5c\x61\x62\xd8\x03\xff\xac\xc3\x64\xe1\x7f\x71\x6c\xc8\xc8\x9f\xb4\x9b\x0d\xc8\x85\xaf\x22\x36\x5b\xb1\xdf\xc0\xf1\x95\x7d\x99\x2f\x28\xc2\x6a\xca\x5c\x6a\x35\xf6\x0c\x41\x0c\xad\x29\xe4\x6b\xb5\xd4\xa6\x59\xbe\xfc\x4f\xd0\x5e\xfe\x16\xfa\xd6\x5e\xad\xd1\x31\x65\xeb\xa3\x8b\x89\x12\x5b\x7f\xd1\xda\xfe\x42\x75\x6d\x42\x44\x1d\x41\xfe\x9e\x74\xdb\x96\x75\x86\x98\x26\xb4\xd5\xb5\xb2\xb4\x49\x00\x8a\xd8\x61\xc4\x09\x4b\xfe\x5b\xd7\xb2\xcf\xaa\x2d\x8d\x4b\x6e\xea\xb6\x94\xdd\x34\x64\x23\x5a\x9e\x16\xe1\x8c\x3f\xcf\x95\xe8\xec\x17\xe1\x54\xb7\xfe\x6f\x00\x3f\x5a\xba\xb2\x96\x0e\x78\xfe\x42\x7d\xde\x6e\xa0\xbe\xef\x9f\x48\xb3\xd5\xf9\x6b\x15\x7d\x35\x85\x37\xcb\xd2\xc0\x5e\x61\xd4\xab\x1b\x9b\x3e\x13\x85\x21\xc2\xd7\xe1\x46\x40\xb0\x8e\xed\x4a\x37\x76\x2a\xac\x6c\x26\xce\xd0\x4d\x2a\x8c\xd6\x0d\x32\x73\x22\x97\x79\x38\x78\x18\x16\x51\xd2\x2f\x56\x7c\x3d\x11\x2b\xbe\x3e\x32\x2b\x86\xa4\x9d\xbd\xcc\x4c\xca\x72\x32\xc1\xc4\x02\xed\x82\xd1\x29\xf8\x66\x19\xe5\x82\x7f\xa9\xb5\x0c\xe3\xd3\xa9\xd0\xc4\xc4\xcc\x74\xf3\xb9\x29\xea\xd9\xa9\x29\x3a\x16\x8c\x7a\xcf\x1c\x1c\x76\x13\xdb\x82\xfd\xf6\x39\x16\x46\xed\x59\x19\x5b\xa6\x5e\xf0\xf6\xfe\xbb\xea\xa1\x69\x2b\x50\x09\x19\x65\x10\x4e\x7a\x8e\x77\xd1\xd2\x7c\x7a\x63\xf3\xaa\x1c\xeb\x6e\x36\xd0\x60\x86\xcf\x02\x25\xc5\xb5\x12\x77\x7c\x75\xb3\x1c\xc3\x72\x97\x2b\x83\x66\x4b\x94\x66\x55\x1d\xc8\x48\x0c\x54\x96\x2c\x60\xd9\x78\x50\xe7\x9c\x4a\xac\xa0\x6c\xa6\xd5\x77\x3e\x1e\x3a\x19\xc2\x79\x73\x81\xea\xaa\x47\x7e\x7c\x8e\x23\xdc\x26\xde\xb1\x43\x5d\x72\x90\xc9\xcd\xbb\xff\xb5\x23\xdc\xe5\xa9\x30\x5d\xc6\x7e\x87\x5a\x31\x1c\xd5\xe4\x9e\x78\xdc\x30\x12\x45\xe8\x68\xe2\x97\x16\xc4\xfe\x2f\x42\xef\x28\x02\x12\x6b\x60\x00\xf2\x06\xf1\xbc\x7d\x28\xd1\x11\x79\xb7\xaf\xa0\x5b\x9d\x61\x9d\x83\x2b\x6e\xfc\x58\x31\x7a\xdc\x4d\x35\x53\x1d\xe8\x08\xe1\x49\xb2\x13\x1c\x3f\x0e\x86\xc8\xe0\xff\x32\xda\x93\x9d\x56\x48\x83\x7a\x1b\x98\x38\x5d\xe4\xf7\x30\x71\x25\x23\x19\xc5\x03\xc1\xcc\x86\xb0\x0e\x6b\xf4\x09\x66\x59\xdd\x5f\xe8\x5f\x24\x06\x43\xa4\xfa\x6f\x26\x7a\xd7\xd5\x68\xb9\x4d\x6e\xa1\x1e\x3f\xf7\xf2\xaf\xb5\xa9\xc4\x07\x66\x88\xc0\x68\xd1\x0e\x49\x3c\xd0\x40\xf1\x87\xc5\x05\x16\x8b\x8e\xb2\xdb\x5d\x53\x71\xfa\x0f\x82\x8a\xe2\x02\x07\xb4\xc0\xd5\xf9\x44\x90\x56\x69\xeb\x3e\x56\x5d\xb9\x97\xae\xa7\x6d\xb3\xe3\x5a\x7d\x06\xd5\x91\x43\x1b\x31\xda\xc7\x67\xc9\x18\x78\x4c\x8b\x1f\xd5\x1c\x9e\x93\x4d\x53\x71\x52\x7f\x53\x6d\xb7\xc0\xa0\x62\x11\xc7\x84\x66\x03\x57\x8e\xf7\x11\x7d\x65\x45\x4d\x25\x64\x87\x90\x7f\x69\x8b\xec\x28\x99\x3b\x52\x06\x39\xa8\x63\x3f\x99\xe8\xd3\x84\x88\xe0\x68\xbc\xe5\xd0\xf6\xea\xc6\x71\x96\x91\x6a\xbb\x6d\x1e\x1c\xa3\xac\x5a\xf0\x08\x02\x9a\x5c\x73\x69\x6d\xe3\x6e\x64\xcf\xeb\x1b\xcd\x5c\x5d\x75\x77\x84\x9b\xe4\x62\x7d\x54\x1e\x6f\x9f\x48\xd0\x21\xbd\x1f\xa1\xaa\x3c\xb8\x43\x07\x10\x25\xcc\xc5\x12\xae\xc6\x0d\x18\xc5\x2b\x84\x9a\x1d\xa6\xf5\x14\xae\xc8\xc6\xa6\x62\x4e\x3b\xab\x04\xcf\x08\xbb\x22\x42\x7a\x38\xec\xe5\xc4\x06\x29\xaa\xc7\x05\x37\xca\x1f\x63\x1b\x17\x16\xde\xea\x4e\xa4\x28\x30\x73\xb4\x98\x59\xbd\x08\x9a\x04\xe9\xdf\x13\x53\x91\x33\x13\x55\x26\x3f\x59\x35\x60\xf9\x4a\x6d\x3f\x21\xb9\xaf\xd6\x65\x2b\x1f\xeb\x37\x10\x83\xc1\x99\x36\x71\x9b\xb3\xe8\x97\xed\x7c\xde\x1a\x77\x9a\xf9\xfc\xcc\xfe\xa9\x75\xbd\xe0\xd6\x34\x73\x99\x21\xdb\xc3\x81\x2a\x98\xc6\x0e\x66\xc9\x6f\x07\xd9\x2c\x58\x58\x04\x16\x96\x82\x25\xa2\x74\x2c\x54\xca\xc6\x50\x32\x9a\x31\x5b\x20\xb6\x45\x5d\xb9\xf7\x67\x74\x08\xcf\xda\x10\xcf\x8c\x3a\x4d\x4e\x52\x0a\x5c\xad\x8d\xc6\xad\x93\x52\x3e\xce\x34\xad\x8b\x28\xbc\xee\x7f\xc1\x30\x47\xde\x3a\xe5\x2c\xbc\xf1\x25\xf1\x08\xd8\xb6\xe3\xb0\x6d\x35\x6c\x87\xad\x92\xed\x18\xd0\xad\x0e\x3d\x01\xb9\xbd\xe8\xab\x92\xda\xb4\x69\x90\xc9\xc8\xe1\x0e\xc9\xe1\x0e\xc2\x5d\xc0\x18\x78\x9e\x40\xbb\xb7\x56\x19\xf7\x56\xaa\xdd\x5b\x47\x77\x72\x17\xec\xe4\xa4\x5b\x35\x6b\xb3\xfd\x1b\xb5\xad\x3b\xb5\xad\x32\xdd\xd6\x36\xda\x56\xa3\x5c\x6c\x4b\x1a\x48\xb2\xed\x89\x92\x6c\x2c\xc5\xe6\x1b\x66\xc5\xd5\xcc\xb3\xc0\xfb\xea\xa8\x7f\x56\x46\xda\xc5\xf4\x37\x91\x77\x15\x5f\x92\xca\xbb\x5b\x4e\xef\x2b\xfe\xa0\x78\x84\x19\xad\x67\xf8\x9e\xf0\x5b\x52\x9b\x21\x28\xe9\x96\x2b\x63\x1b\x5a\xe3\xfe\x8d\xe5\x2e\x8c\x41\x35\x8d\xd7\x1b\x2b\x3e\xcc\x7d\x1c\x38\x3e\x3a\x7e\x2c\xe2\xac\x56\x64\x1d\xf9\x6e\x44\x84\xdb\xe4\xdd\x31\xe1\x8f\x90\xd4\x87\x86\xd6\xae\x42\x3d\xc2\xad\xa3\xe7\x8a\xb5\x12\x81\x40\xd1\x17\x4c\xd0\xde\xf8\x52\x53\xe3\x36\x7d\x43\x99\x51\x7f\xcd\x96\xe1\xad\xed\xfa\x78\xe1\x1a\xb8\xde\xe2\x9b\x12\xba\xf9\xbb\x17\x5d\x06\xfa\xc9\x09\x37\x99\x8e\xd4\x7c\x9e\x36\xcd\xc8\x64\xc0\x03\x72\xbc\x83\x2f\xbd\x67\xf7\x60\x37\x81\x13\xe4\x78\x67\x7f\xb2\xce\xda\x83\x5d\x99\x16\xc7\x3a\x3a\xd2\xcb\xb1\x2e\x00\xc4\xe3\xc0\x1d\xfe\x58\xbb\x38\x8e\x6e\xd0\xb3\xa0\xc9\x58\x57\x61\x66\x8c\x81\xae\x9e\x07\x4d\xc6\xba\x0a\xb3\xa0\x0d\x74\xf5\x63\xd0\x24\xdf\x95\x0c\x10\x3e\x83\xac\x01\xea\x67\x07\x78\x4d\xd9\x6d\x43\x06\xba\x1e\x97\xcd\x3f\x52\xd7\x29\x52\x1f\xeb\x16\xee\xa2\x93\x7a\xed\xe3\xf8\x47\x9c\x72\x8a\xf5\x1f\x6f\xda\xbf\x41\xb7\xf1\x01\xf9\x38\x7d\x66\x0f\xcc\x51\x00\x57\xef\x8f\x83\x37\x7b\x7e\x3e\x4a\xcf\xd9\xe3\xf4\x51\x7a\x8e\x1a\x7d\x24\x34\x4b\x9a\x0d\xf4\x3a\xaa\x88\x83\x2a\x7d\x03\x1b\xfb\x8b\xfa\xbb\x3c\x41\xf5\xa7\xf9\x4c\xcd\xaf\x81\x0d\xc2\x99\xe1\x57\x6b\x69\x15\xc2\x46\x7c\xd6\x05\xc4\xb4\xab\x27\xbd\x29\x3a\x25\x53\xe8\xac\x98\x1d\x32\x7d\x0d\xba\x40\x78\x65\x04\x7c\x5e\x69\x8d\x52\x83\x21\xb6\xc2\xeb\x8f\x77\xa6\xec\xb5\x65\x81\x37\x01\x4b\xcb\x1d\x4b\x5b\x97\x17\xf8\xae\x74\x99\x04\xea\xcf\xef\x9e\xd4\x96\xad\xbd\x29\xf9\xaa\xb6\xbe\x18\x5b\x3f\x91\xfb\xcc\x44\x6e\xd0\xe4\x7e\x3e\xaf\xfa\x1e\x01\xf7\x08\x6f\x56\xf5\xba\xdc\x4a\x33\x51\x17\x78\x54\xc9\x54\xaf\xa2\xb9\x2d\x10\x90\x42\x4f\x9d\x93\x74\x23\x08\x0f\xe9\x10\x4d\x42\x7f\x74\xb2\x96\xc5\xa4\x2c\x3d\xa2\x59\x09\x93\xb1\xfe\x16\xea\x14\x7c\x8a\x1e\x25\x54\x3d\xc4\x93\xb4\xba\x8e\x95\x67\x5e\x21\x36\x61\xe6\x59\xe2\x19\x5a\x1b\x38\x83\xaa\x6c\xd3\x12\xc8\xb8\x86\x40\x3f\x3d\xa6\x56\xc6\x2c\x50\x4a\xe6\x54\xc9\xfc\x34\x35\x72\x50\x88\x7f\xc5\x75\xc6\x0a\xb2\x2e\x4d\xee\x4d\xcc\x06\x14\xc6\x39\x57\x88\xc4\x8e\x30\xa2\x51\x16\xa0\x61\xd1\xa9\x60\x16\xb4\x2e\x93\xa5\x0b\xc8\xe9\x32\x62\x88\x08\x9c\xd2\xa0\xcb\xf9\xfc\xac\xb8\xc0\xf4\x64\x33\x30\xd2\x4e\x5f\xe2\x04\x33\x8d\x51\x7b\x2a\xee\xde\xfb\x08\xa7\xf3\xb5\xd8\xe8\x11\x20\x70\x5d\x1f\x8e\x38\x99\x0e\xea\x6a\x35\xf2\x9d\xae\x94\x3e\xaa\x83\x06\x5a\x38\x2c\xbc\x9f\xa4\x8a\x5e\xb5\x6b\xe7\xc4\x0b\xd6\x5e\x78\x34\xe9\xf9\xd4\xea\xae\x50\x55\xb2\x9c\x1b\xd0\x55\xb8\xe8\x21\x30\x69\xfd\x1c\xee\xf0\xfe\x1d\x79\x58\x12\xcc\xad\x5d\xac\xea\xee\x96\x22\x3a\xc3\x8a\x8a\x2f\x99\x44\x83\x47\xd9\x75\xe6\xad\xa1\xa1\xb7\x1f\x33\x1e\x7b\x67\x11\x2e\x77\x08\xd1\x9b\xa2\x0a\xc8\x75\xe7\xc8\x75\x76\x59\x2e\x51\x44\x53\x5e\xe0\x5d\xe9\xc3\x6f\x3f\xdf\x79\x1d\xc5\x06\x42\x70\x27\xd5\xaa\x89\xf5\xf4\x47\xc0\xb0\x79\x04\x18\xb4\xc7\xbf\x9d\x8c\xbe\x59\xba\x81\x9b\xa5\x5b\xd5\x6a\x32\xf5\x88\xd1\xc0\xcc\xe0\x06\x49\x6a\x6e\xd5\x4a\x3b\xde\x6d\x43\x5c\xfa\x9a\xb2\x77\x0e\x87\x74\xed\x62\x9b\x88\x3a\xb0\x64\xc0\x93\xd5\xd6\x20\xd1\x7d\xf0\xe4\x49\x41\x4b\x7a\x38\xec\x25\x32\x59\xab\xf7\xa6\x64\xe5\xf2\x5e\x4a\x6a\xed\x59\xd4\x58\xb0\xc6\x0d\x10\x7c\xc0\xdc\x80\xb3\x86\xa1\xf0\x3c\x4d\x06\xd5\x5e\x23\xc7\x8b\x9c\x95\x65\xc1\x1f\x7b\xb0\x50\x08\x18\x4d\x76\x85\x25\xbb\xd8\x66\xbc\x31\xe9\x8f\xf1\xf1\x6b\xd7\x87\x87\x96\xe9\x4d\x63\xbd\x6e\x41\x45\xed\xdc\x41\xa7\x94\x4d\x29\xe2\x65\x36\x58\xa1\xc5\x24\xba\x15\xc0\xa2\x38\xee\x25\xd3\x22\x9f\xad\x33\xbd\x70\x5a\x97\xa5\xf3\xa8\xf3\x4c\xbf\x9b\xc4\x82\x85\x30\xb3\x45\x09\xc0\xe2\xb7\x62\x01\xb8\xd8\x1a\xe9\xb8\x86\x60\x2d\xd1\x7d\x39\x04\x1b\x7b\x6b\xcd\xe7\x4c\x27\xd4\x28\x78\xa9\xfe\x42\x3a\x46\xa3\xe0\xa5\x09\xc0\xf2\xae\x6f\xc6\x21\x8e\x43\x36\x3a\x8e\xb4\x19\x3f\x52\x9f\x3b\xdf\xb9\xf1\x51\xcf\xc4\xe1\x70\xa6\xf6\xfe\x70\x80\xba\x00\xea\xcf\xd0\x43\xfe\xfa\x7e\xd7\x89\x47\xf7\xaa\x78\x36\x01\x6b\xd1\xde\x7f\x49\xa7\x83\xea\xe6\x28\xfe\x0c\x62\x21\x6a\x22\x08\xbf\xa7\x2c\x3a\x35\x60\xc3\xe2\x51\x58\x44\x94\x23\x3c\x99\xb4\x40\xa6\xd4\x44\x0c\x21\x01\x8e\xd7\xf7\x15\x7b\xf8\xa1\x55\x44\x17\xa8\xf1\xe1\x60\x9e\x38\xfa\x8c\x64\xde\x82\xa4\x33\x31\x40\xd1\x79\x17\x3f\xe2\x27\x4f\xeb\x09\x03\xc2\x31\xca\x7a\xa9\xde\x07\x58\xa8\x42\xe8\x03\x1e\x87\xa4\x45\xe1\x9a\x58\x35\x01\x4d\x68\x9f\x3c\x98\xaf\x73\x37\xe3\x55\xdc\x65\x68\x9a\xe1\x98\xa1\x65\xee\x76\x8a\x3f\x09\x22\x79\xf4\x0c\x78\x00\xa3\x97\x4c\xb4\xea\x82\xf0\x36\xaf\x28\xac\xdb\x55\xd2\x74\xe6\x2e\xcc\x10\x1a\x37\x9a\x0d\xdb\xc9\x42\x73\x1a\xfe\xa7\x99\xc4\x72\x74\xe6\x11\x86\xb2\x8f\x6a\x1d\x8b\x6d\x63\x58\xb1\x87\xa0\x1e\xff\x4d\x2d\x2d\x43\xe6\x2d\x1c\x31\x31\x14\x5d\x29\x0e\x0d\xb8\xb5\x25\xfc\x45\x7f\x4d\xe0\xe5\x6f\x6c\xd3\xf2\x51\x8b\xa9\x71\xeb\xbf\xc8\x70\x85\x35\xc8\x22\x5b\x5e\x0a\x19\xb4\x77\x6c\x7a\xa0\x4e\x50\x07\x86\x07\x57\x3c\xd7\x25\x36\x1c\x98\xd4\x2f\x4b\xa9\x6d\x66\x58\x78\x88\x99\x17\x21\x4c\x72\x48\x7d\x08\xbd\xa2\x84\xcf\xe7\x5e\xac\xf2\xd7\x10\x5f\xe8\x64\xbf\x70\x5d\x81\x7c\xa2\x7f\x03\xf3\x0a\xd9\x19\xef\x50\x61\x1b\xb9\x84\x93\x63\x8c\x85\x5a\x08\x16\x03\x3e\x4a\xe2\x44\x1f\x25\xa1\x33\xf2\x79\x48\xac\x84\xf3\x4f\x52\x7f\x63\x97\x18\x17\xf2\x64\x98\xf1\x62\x16\x2a\x37\x64\xc2\x64\xfd\xba\x51\x81\x7e\x66\x5c\x20\xc8\x80\xab\x83\x7d\xae\xd8\x5e\xfd\x3b\xa2\x70\x39\xa3\xd5\xab\x0f\x8c\xe8\x9c\xc9\x68\xd1\xb4\xed\xbb\xdd\xb6\x98\xb9\x8f\x96\xb3\x73\x2f\xd1\x72\x19\x39\xc9\x9e\x62\x5a\xe4\xa4\x13\x1f\xdb\x41\xf6\xb7\xb0\x38\xe2\xf6\xd7\xda\x1c\x07\x3f\xc8\xf9\x93\xcf\xf0\x9e\xb0\xdd\xbd\x4e\xe8\xb6\x3c\xbb\xc0\xb7\x44\x2c\xdd\xac\xdc\x81\x6a\xb3\xce\xe8\x72\xc8\xc2\x59\x65\x3c\x7a\x35\x3a\xe4\xa9\x66\x24\xeb\xe7\x90\x17\x9d\xcf\x54\xf3\x59\xa8\xdc\x34\xde\x70\xb1\xd3\x8a\x96\xbf\x56\xeb\x58\xa7\xd9\x96\xb1\x87\x66\x55\xf6\x1d\x33\xe3\x6c\xb7\xf7\xd5\x3b\x33\x00\x8f\xd3\xd5\x38\x85\x27\xf7\x43\x74\xbd\xe8\xa5\x48\x58\x85\xa4\x82\x6a\x9e\x0c\xb7\xb8\x42\x13\xaa\x7d\xf5\x8c\xab\x26\x06\xbf\xda\x9e\x3a\xb2\x83\x98\x93\x70\xbd\xf9\x3e\x8d\x86\xd8\xf8\x0e\xe0\xae\x64\x50\xd9\xa5\xb8\xc0\xed\x23\x54\x3d\x10\x92\xae\xaf\x09\x93\xcc\xfa\x14\x85\xcf\x24\x71\x92\x6d\x10\x30\x18\x29\x6c\x1b\x84\xbb\x70\x03\x1a\x5f\x22\xa5\x0a\x74\xb3\x9d\x0d\x77\x1f\x56\x5f\x2b\xf0\xed\xc3\xb8\xad\xbe\xfa\xba\x19\x54\x5f\x37\xf3\x79\xa1\xeb\x38\x95\x8d\x77\xb8\xd8\x45\x69\x82\x38\xc2\x9b\xf2\x02\xd7\xe5\xce\xaa\x03\x36\x9f\xd7\x4f\x36\x56\x1d\x70\x57\xee\x56\x9b\x35\xbe\x29\xef\xf0\xb6\x3c\xbb\x9c\xcc\xae\x15\xff\x79\xb7\xd8\xdc\x55\xfc\xa9\x28\x2e\xd4\xfa\xb7\xe5\xd9\x85\x6a\xb1\xe8\x76\x6f\x3b\xc1\x8b\x4b\xa3\xa5\xbb\x1f\x07\xe9\x0d\xd2\xd9\xde\x23\x80\xde\x1b\x1e\xe0\x7d\x79\xb6\xb5\x45\xb0\xbb\xef\x34\x73\x6e\x8e\xcf\x3d\x16\x08\xdf\x96\x7c\x75\x07\x5a\x26\xe3\xab\x7d\x8b\x14\x12\xbc\x3f\x1c\x62\xbf\xd2\x5b\x14\x68\xec\xdf\x7a\xc0\x3d\xf4\x10\xd8\x1e\xae\x7b\x7c\x8b\xef\xd0\xe4\x61\x3e\xef\xfa\x38\xfa\x80\x70\x75\xf5\xd6\x1d\x0f\x7f\x09\xbd\x9f\xcf\x41\xd7\xe8\xd5\x7f\x90\x82\x5a\xf1\x1f\x93\xf7\xf3\xf9\x19\x9b\xcf\xcf\x3a\x38\x05\x87\x83\xb8\xea\x4c\x9d\xda\x65\x3a\x04\x41\x12\x2d\xdf\xdb\xf7\x6f\x97\x6f\xb3\xb3\x78\x6b\xec\x07\x6e\x61\xd7\x7e\x61\x1f\x4e\x3a\x99\xb7\xf8\x0e\xeb\x22\x3b\x68\x62\x06\xbb\xc6\x1f\xb2\x83\x7d\x40\xd2\x65\xa2\xec\x24\x8e\x76\x63\x69\x30\x0d\x54\x2c\x79\x8f\x4e\x81\x20\x24\xd8\x2b\xe4\x07\x3c\xbd\xb3\x64\xcc\x57\x06\x83\x1c\xb7\x91\x63\xc6\x10\x5a\xb1\x1c\x5a\x51\xe4\x6b\x08\xdc\xfb\x87\x19\xb2\x18\x3a\x75\x4d\x52\xca\x08\xda\x84\x74\xf7\xf5\xcc\x85\x9f\x38\x95\x65\x78\xca\x5b\xac\x4b\x2e\x05\x34\x50\x20\x4c\xb3\x41\x9a\x14\x49\x24\x65\xe0\xd4\xfe\xf1\xdc\x6a\x13\x69\x39\x32\xb0\x65\x1c\x2e\x47\x45\x47\xb2\x1a\x75\xa7\x0a\xd3\x1b\x18\x2d\x62\x2c\x58\xca\x31\x27\xdf\xa1\xe0\xef\x61\x76\xbb\x2f\x6e\xe0\xc8\xbf\x3a\x6d\xcf\xb0\xb6\x39\xc4\x09\x42\x7a\xfe\x8c\x91\xd4\xd4\x2a\xa9\x89\x3a\xa9\x89\xda\xc4\x21\xe9\x3c\x43\xfc\x39\x55\xef\xaf\x90\xe8\x1d\x79\x58\xb2\x58\x95\x4b\xfb\xaa\xdc\x56\x96\x1c\x57\x65\x9b\x13\xd7\x70\x37\xbe\xe6\x1e\x3f\x6c\x6f\xa4\x80\x25\xa6\xab\x6e\xed\x25\x89\x33\x2b\x49\x88\x2b\xb0\xb7\x05\x7e\xcb\x43\xa7\x4f\x75\x80\xe4\x72\x18\xad\xa4\x75\xb6\xac\x02\x76\xb6\x3b\x81\x9d\x75\x7c\xf1\x29\xee\x72\x83\x2c\xe7\x6f\xe2\xde\xc6\x4b\xe1\x23\x0f\x83\x65\x71\x89\xd0\x24\xbb\xac\x84\x71\x0e\x17\xc4\xc9\xdf\x77\x14\x58\xed\x94\x5d\xef\x71\xcf\xc9\x62\x5c\x64\x6a\x18\xc7\x68\x22\x41\x0f\x07\x1d\x1a\xaa\x83\x33\x7b\x1a\x4b\x02\xd1\xc6\x0f\xf7\x6f\xdb\x26\x7a\xb8\xf0\xb9\xf5\x96\xb3\xd9\x39\xf1\x89\xf3\xa8\x57\x3a\x3a\xbb\x5e\xbf\x57\xe1\x0a\x97\x7e\x71\x61\x42\x70\x5d\xc0\xb2\xc3\x2e\x72\x38\xd8\xa0\xdb\xc3\xa1\x10\xa5\x1a\xc8\x97\x8f\x47\xe2\x8e\xb7\x1f\xa6\x8c\x7c\x98\x82\xec\x5b\xcc\xbe\xfa\x79\x0b\x59\xfc\xa7\xb4\x9e\x8a\x76\xfa\x96\x4c\xab\xa9\x1e\x7a\xda\xf2\xa9\xee\x1d\x4f\x39\xd9\x10\xfa\x9e\xd4\xd3\xd9\xb9\x8b\x45\xf5\x8a\x50\x99\x0d\xe3\x1d\xf4\x56\x97\xa2\x14\xae\x60\xd2\x96\xb7\xa2\x05\x35\xe8\x5d\xd5\xbd\xfa\xc0\x2c\xde\x2c\x36\x55\xd3\x14\x42\x1d\x33\xd8\xff\x19\xba\x72\x6e\x8f\x4b\x61\xc4\x84\xd9\x8e\x69\x8c\xa8\x3d\x00\x5e\x03\xe0\xaf\xf4\x7f\x8a\x04\xbe\xb9\xbe\xfe\x64\x4f\xe4\x27\xfb\x6f\x2a\x71\xb7\xb8\x69\xda\x96\x17\xf0\x27\xaf\x58\xdd\xde\x17\xe8\x7f\x3c\xaf\x04\x59\xb0\xf6\x43\x81\x90\xbc\xbe\x7e\xe3\xf7\x3e\x28\xcd\xd8\xdf\x0f\x1f\x75\xfd\x85\x8e\x4d\x6e\xc0\x94\xf5\x13\xa9\xde\x7d\x53\x6d\x27\x9a\x3b\x2c\x82\x3a\x6b\xb9\xd9\x7e\xa0\xac\x6e\x3f\xc0\x86\x67\xde\xbe\xa8\x3a\xf1\x65\xdb\x0a\x63\xf4\xdd\xdf\x12\xf1\x3d\x4c\xfa\xaf\xea\x10\xe9\x54\xbb\xfc\xc1\x02\xdc\xb6\x5e\x18\xac\x2f\x66\x1b\xfe\xb0\x15\xed\x0c\x99\xa5\xbe\xa0\x4d\x03\x39\x17\x09\x92\x9b\x4a\x28\x91\x04\xed\x53\x8c\xf8\x14\x34\x15\xd3\xd0\xa7\x4e\xf1\x0b\xaa\xf3\xb7\x6d\x2b\xa6\xa6\xf3\x6e\xfa\xd0\xee\x14\xc6\x54\x75\x3d\x15\x77\x64\x6a\x07\x9b\x6e\xab\xcd\xbb\xea\x96\xa8\x77\xb3\x1b\xf3\xd5\x73\xb2\x25\xac\x26\x6c\x43\x49\x37\x53\xdd\x3d\xb4\x3b\x6e\x5b\x2e\x94\x84\xfc\xa9\xe2\x8c\x80\xd9\x08\x28\xa8\x86\xce\x42\xf7\x6c\x2d\xdf\xd1\xc3\x81\x2f\xee\xbb\x67\xf0\x7a\x3e\x9f\xd9\xcd\xf4\x3b\x97\xb4\x59\x24\x50\x4d\xc6\xb1\xcd\x26\xbd\xa3\xe3\x69\xd0\x72\xfa\xac\x62\xac\x15\xd3\x1b\xca\xea\x69\x35\x7d\x5f\x35\xb4\x9e\x7e\xa8\x1e\x14\x10\x6c\x12\xa8\x69\xd3\x6e\xaa\x66\xea\x2b\xba\x75\x33\x04\x05\xef\x9c\xe7\x0a\xae\xf1\x1d\xbe\xc1\xdb\x72\xb5\xc6\xf7\xe5\xc5\x93\xfb\xcf\x7f\xff\x87\x3f\x3e\x39\x3f\xbf\x47\xdb\xd5\xfd\xba\x2c\xee\xcf\x7f\xff\x87\x3f\x22\x4f\x46\x2e\xff\x88\xbc\x98\xe0\xb1\xf6\xbd\x8d\xab\xd3\x1c\x46\x59\x10\x40\xcc\x1f\x29\x13\xff\xa6\x59\xaf\xcb\x3f\x22\xbc\x4b\xd7\x1d\x1e\x69\xb6\xfa\xe3\xba\xbc\xfc\xc3\x5c\xfd\x7f\xf8\xe3\xff\xc4\x6c\xf5\x6f\xeb\xf2\x8f\xff\x3a\x57\xff\x1f\x2e\x7f\xff\x6f\x78\x55\xf0\x72\x8b\x56\x85\x28\x19\x5a\x5d\xac\xd7\x98\xaf\xc4\xea\xd2\xfc\xff\x7b\xf3\xff\xbf\xae\xd7\x78\xf6\xd9\x0c\xfe\xfe\x9f\xe6\xd9\x1f\x82\x67\x7f\x34\xcf\xfe\x7f\xc1\xb3\x7f\x33\xcf\xfe\xff\xc1\xb3\x4b\x37\x80\x1d\xe1\xd2\x0e\x71\xf9\xaf\xf6\x0f\x3b\xc0\xe5\x1f\xd6\xeb\xf5\xe2\x6f\x2d\x65\xc5\x6c\x86\x3c\x69\xba\x35\x21\x78\x1d\xd4\xed\xad\x9d\x23\x05\xfc\x52\xa7\xd5\x04\x29\x60\x5a\x2f\xb9\x2c\x5d\xe9\x24\x25\xd5\x5d\xbd\x09\x2e\x9c\x65\x43\xeb\xcf\x3e\xd9\xb7\x85\x40\xf2\xb3\x4f\xf6\x5c\xbe\x59\xbe\x2f\x10\x50\x80\xb7\x11\x05\x70\x43\x3f\x78\xf2\xfe\xd6\x95\x7b\x09\xd3\xce\xbb\xba\xfe\xea\xf3\x0f\xf8\x2d\xe4\x0c\x81\x22\xf6\x38\x20\xae\xd7\x05\xda\x9b\xd2\xb9\x1f\xa2\x52\xa0\x36\xd3\xed\xa6\xda\xdc\x91\x72\xdf\xd0\xba\x5b\x66\x53\xcb\x3e\x6c\x49\xf6\x8d\x71\xc2\x71\xf9\xca\xe2\x52\x96\xda\x91\x35\x7e\x76\xd3\xf2\x5b\x22\xe2\x67\x50\xe7\x22\x7e\x04\x7e\xe8\xf1\x23\x37\x46\x7d\x38\xdc\xc6\x23\xdc\x1c\x0e\xd7\x71\xff\x1b\xff\x44\xf7\x7e\xe7\x1f\xe8\xbe\xaf\xe5\xf5\xf5\xa6\x65\x37\xf4\x76\xc7\xc9\x37\xea\x91\x4f\x40\xae\x5b\x90\xc3\xe1\x5a\x5e\xdf\xfa\xea\x47\xae\xd4\x22\xc1\x02\x72\x3e\x27\x85\x2d\xcc\xd6\x34\x0b\x5d\x9b\x17\x6a\x54\x58\x64\x31\x2c\x0a\x33\x48\x84\xb5\xdb\xc7\x59\x59\xf2\xab\x60\x0f\xd4\xbb\x6e\xc5\xd7\xa6\x6e\x65\xa2\x6c\xb7\x81\xba\xe6\x12\x6b\x5d\x60\x71\x67\x8b\x2d\x4d\x6c\x09\x73\x71\x38\x54\xf3\x79\x67\xc3\x2f\xbe\x2a\xc2\x41\x60\x3b\x41\x23\xe4\x04\x77\x0e\xf9\x0d\x77\x6a\xfc\x15\x5f\x5b\x13\x73\x59\x96\x54\xd7\x01\xd4\x71\xd8\xd0\x84\xd6\x8a\xbb\x0c\x5a\x58\xff\x89\x78\x9b\xb4\x35\x19\x7c\x98\x93\x81\x36\xea\xbf\x3e\x43\xf1\x1f\xed\x6e\xaa\xed\x12\x53\x45\x11\x75\xce\x65\xb8\x21\x3e\x6f\x68\xfd\xc5\xb4\xbd\x99\x56\xd3\x74\x2b\x66\x3a\x4c\xbc\x8c\x57\xb0\x59\x9b\x9c\xd4\xc2\x55\x60\xd0\x4b\x29\x68\xf9\x73\xd1\xe1\x0a\x6f\xdc\xe4\xb0\x2f\x12\x16\x6c\x01\x55\xff\xad\x4b\x8a\x75\x87\xc1\xcf\xeb\xaa\x69\xfc\xf8\x9d\x16\x12\x29\xd2\xac\x92\xda\x26\xed\x3b\x05\x70\x52\x7f\xaf\x4b\xea\xf5\x4e\x54\xca\x2d\x21\xef\xfa\x08\x95\x88\x82\x79\xa4\x3b\xbb\x84\x9a\x39\xaf\x78\xe8\x63\xfb\xf8\x5e\x2e\x90\xd4\x67\xd8\x3f\x7e\xd1\xf2\x6f\xc9\x07\xab\x98\x88\xf2\x83\x65\x37\x14\xf3\xf2\x67\xc0\x38\x9d\xe4\x04\xdb\x32\xaa\x01\x54\x2f\x20\x17\x61\x06\xef\xac\x59\x28\x9a\x6a\x88\xfd\x1a\xd6\x1c\x33\x00\xbd\xd0\x7f\x66\xc1\xce\x11\xe6\x32\x74\x97\x8f\xcf\x68\x14\xcf\x38\x0e\x38\x48\xb3\x43\x6b\x5c\x95\x4c\xbb\xb8\xe1\x2e\x3b\x79\x93\x23\x09\x37\xbd\x3a\xd2\x46\x1b\xaa\x44\xb4\x4a\x8b\x68\x1d\x6e\x68\xbd\x6c\x64\x29\x02\xfc\xaf\xe6\xf3\xea\x0c\xec\x61\xe6\x01\xf3\x67\x94\x60\xa3\xe0\x54\xb8\xc3\xd6\x93\xb4\xc2\xc8\x6e\x3e\xdf\x99\xcc\x5a\xdc\xf8\xd6\xb5\x85\xcd\xda\x14\x0f\xa1\x4d\x6e\x9b\x12\x8e\x2d\x40\xd4\xfc\x77\x56\x96\x8d\x2d\x2a\x40\x0d\xac\x7b\x03\xd5\xf3\x79\x2d\xb3\x1d\xea\xd3\x9b\xf4\x59\xba\x3e\xef\x60\x15\x1b\x58\x40\xd5\xef\xf7\x6e\x3e\xbf\x93\xb6\x96\x8f\xcc\x81\x17\x0b\x5c\xf5\x4e\x23\x2c\xae\x09\x6a\xce\x02\x7d\x4e\x77\xb1\x2b\xd4\xf7\x8d\xea\x01\xb9\xfd\x4c\x45\x35\xb3\x43\x14\xb6\xa6\x52\x5b\x23\x1c\x24\xad\x76\x59\xe7\x98\xf5\xb8\xee\x29\x30\x84\xd9\x43\x69\x3b\x75\xa6\x0b\x8e\x45\x74\x0f\x21\x4c\xcf\xca\xb2\xa8\x60\x68\xe4\x76\xb8\x1a\xa3\xc2\x76\xfb\x76\x1a\x64\x25\x77\x74\xc4\x65\x99\xd4\xa4\x64\xed\xcb\x7b\x0f\xad\x3f\xd1\xcb\xb7\x21\xb4\x74\x5a\x3b\x84\xab\xb2\x85\xec\x4c\x7c\x29\xa2\x13\xa8\xef\xcd\xde\xc9\xa8\x74\x5d\xc0\x15\x5d\x97\x2d\x1e\x99\xbf\x6b\x03\x87\xb6\x6c\xa1\x82\x72\x2b\x07\x7a\xed\x65\x20\x1c\x3b\x99\x3c\x0b\x37\xbb\x59\xb6\xb0\x2e\x50\x5d\x67\xaf\x55\x74\x43\xd1\x5e\x1c\x55\x28\x0b\x88\x8c\x00\xc4\x77\xb6\x46\x4d\x69\xf4\x61\xb0\x0a\xac\x94\xe2\xd8\x2c\x5a\x02\x4d\xfa\x2f\xbb\x2d\xe4\xc5\x62\xf8\x12\xe1\x90\x25\x68\x16\x7a\x08\xc3\x0e\x44\x4c\x4a\x11\x20\x59\xa6\xda\x94\xae\xf5\xec\xb9\xb8\xaf\x42\x92\xa6\x0b\x5b\x25\xac\x20\x87\x23\xa2\xd8\xb8\x2c\x17\x37\xf0\x38\x59\x0a\x58\x33\x08\x90\x5d\x45\x5d\xdd\xf0\x3f\x47\x0a\x3e\x4c\xf5\x38\x5c\xf5\x4a\x8c\x4a\xca\xb9\xbc\xb2\x92\xe2\x06\x78\x51\x86\x67\xb4\xfb\x8c\x06\xf7\x35\xa6\xbe\xcf\x57\x61\x9f\x54\x91\x5e\xcd\xc1\x74\xa0\x2a\x06\x9e\x9b\x5b\x16\x4a\x73\xd9\x04\xbb\xd3\xcb\x65\x5f\xb2\x72\x4a\x09\x42\xc5\x1d\xe1\x53\x5a\x4f\x5b\x3e\x6d\x02\x15\x85\x96\xb0\x8c\x4c\xee\xee\x65\xe0\xd5\x33\x23\x2c\xc3\x67\xda\xb9\xf2\xb5\x4d\xb0\xab\x04\xa2\xef\x78\xfb\xf3\x83\x35\x35\xea\xe7\xdf\xf1\xf6\x9e\x76\x04\xde\x80\xb5\x12\xef\xef\x89\xa8\x96\xfa\xed\xa6\xbd\xdf\xee\x04\xa9\x17\x9c\x54\x75\x57\xcc\x36\x2d\x13\x84\x09\x30\x0f\x29\xa9\x0e\xff\x10\x25\x75\x3a\xa5\xff\x40\x80\xfb\x26\xd2\x2a\xff\xe0\x52\xf8\x6f\xf5\x37\x66\x0e\xdf\xbf\xfe\xeb\x77\xb6\x9b\x05\x27\x5d\xdb\xbc\xd7\xea\x68\x19\x48\x3d\xdf\x45\x5d\xbd\xfe\x35\x5d\x3d\x8d\xba\xfa\x46\x71\xad\x77\x84\xe9\x38\x63\x47\x1d\xa0\x6e\x9a\x16\x86\x9e\xe1\x77\x20\xcf\xe8\x21\xae\xbf\x74\x35\xec\x8a\xd5\x2c\xef\x28\x3a\xc3\xb3\xee\x81\x6d\xd2\x67\x37\x94\xd1\xee\x8e\xd4\xb3\x35\xc2\xdf\x97\xbf\xfb\xbf\xff\xf9\xbb\x2b\x25\x87\xfd\xe7\xef\x8a\x20\x67\x40\x9c\x32\xe2\x3f\x7f\x57\x2c\xfe\x07\xfa\x1d\xfe\x9b\x6f\xfe\x3b\x0f\xdf\xe7\x51\xad\xa1\x48\x5d\x45\xbb\xef\xd4\x91\x65\x02\xf2\xfa\x91\xc8\x3c\x01\x96\x10\xad\x52\x56\xaf\xf4\x5f\x8b\x6d\x4b\x99\x20\xdc\xa7\xe9\x8b\x9f\x2f\xee\x41\xd1\xf2\x3d\x9a\xf0\x2b\x5e\xf2\xd5\xef\xd7\x4b\x48\xda\xd7\x6b\xd7\x91\x8a\x6f\xee\x8a\xbf\x69\xff\xcc\xd9\xdb\xaa\x23\x8a\x41\xf3\x7e\x98\x7c\x0d\x39\x2a\xa1\xd0\xbe\xb6\x6f\x2d\x6a\x22\x2a\xda\x1c\x0e\x64\x21\xa8\x68\x08\x32\x31\xb2\x6e\xa1\xdf\x7a\x5e\xb2\x80\xc2\x1b\x82\x70\x56\x35\x60\x21\x50\x5f\xa5\x0f\x90\x22\x58\xb6\x1e\x86\xe6\x09\x7d\x67\x2f\xa3\xfd\xcf\x08\x4c\xe9\x08\x61\x67\x49\xa9\x18\x69\xea\x67\x2a\x19\x3a\x92\xbd\xc8\x62\x4b\x58\x4d\xd9\x6d\x39\x33\x7f\xcc\x30\x59\xdc\xec\x9a\x1b\xda\x34\xa4\x2e\x67\xee\xcf\x19\xd4\xe0\xd0\x25\x48\xcb\x99\xfd\x6b\x26\x51\xf1\xec\x70\x28\x9e\x95\x7b\x89\xd0\x44\x4b\xcb\x5f\x47\xd2\x72\x54\x3d\x15\x94\xc7\x25\xef\x97\x47\x0b\x0b\xcd\xbe\xcd\x95\x14\xc9\xd6\xcb\x4a\x3f\x78\x59\x8f\x35\xbb\xb3\x41\x86\xa7\xf5\x6a\x9a\x8f\xf7\x19\xed\x40\x2c\x79\xf7\x6a\x62\x47\xaf\x3d\x71\x8f\x1e\x3b\xdb\x44\xd2\x38\xfe\xa9\x4d\x6f\xd1\xb3\xaa\xae\xb6\x82\x70\x53\xdd\x2b\xd4\xf0\xb3\x32\x37\x55\x9e\x3c\x00\x27\x0e\x7d\x46\xd4\x7d\x92\x4c\x46\xf3\x0d\x98\x29\x19\xfd\x7b\x93\xe4\x40\xf7\x9a\x56\xf8\xa7\x35\x70\x15\xd9\x49\x91\xe4\x41\xbc\x1a\x97\xa4\x2c\x85\x04\x0b\x2c\xb0\xd1\x0c\x8a\x21\x40\x7f\x5b\x30\x94\xab\x87\x0e\x82\xe0\x94\xdb\xf2\xa2\x91\x2c\x15\x9f\xa5\x80\xc2\x66\xca\x04\x7a\x26\xbf\x87\xc8\x28\x2e\x2c\xe7\x5f\x84\x95\x99\xf4\x0c\x5c\x31\xf4\x23\xd5\x04\x2d\xc9\xec\x57\xfb\x35\xa9\xcf\x86\x6a\xb0\xc5\x70\x44\xd6\xad\x37\xf0\x23\x2d\xbf\x00\x6a\x17\x3a\xb3\x73\xd0\x82\xa9\x35\x0b\xed\x0e\x38\x02\x25\xe8\xfb\x99\x3a\xf4\xf0\x81\xad\x99\xde\x63\x30\xe0\xc5\x94\x76\xd3\x96\x35\x0f\xd3\xea\x7d\x45\x9b\xea\x6d\x43\xa6\x1f\xee\x08\x9b\x6e\x76\x9d\x68\xef\xa7\xd0\xd7\x54\x53\x90\x9b\x1b\xdd\x78\x86\x64\x65\xca\xcc\xaa\xdb\x20\x57\x62\x36\x86\x77\x5c\xdf\x31\x57\xda\x31\x2d\x28\xdf\xeb\x2f\x5b\xcb\xfe\xfd\x60\xbd\x41\xc5\x78\x0d\xa0\xa1\xd7\x62\xf9\xc4\x60\xfd\x3d\xec\x7f\x86\x79\x79\x81\x99\xaf\xc8\xcf\x3f\x67\x3e\x47\x18\xd5\xb5\xc5\x88\x92\x1b\x06\x3a\x58\xd1\xb5\x49\x38\xeb\x5d\xc1\xe5\xdb\xb8\x56\xb2\x0f\xaf\x38\x2b\xb4\xc3\x3e\x88\xef\x6d\x8e\x56\x68\x87\x78\x58\xa9\x51\x08\x05\x3b\x11\xd2\xde\x78\x2f\xc2\x37\x2b\xb2\xd6\x4a\xb6\xe1\xef\xe3\x0a\x8f\xf9\x9e\xa2\x36\xaa\xcf\x36\xbe\xe8\xbe\x21\xa2\xea\x23\x3e\xd6\xca\x16\xeb\x8e\xfd\x52\xbb\xcd\x87\x15\xa5\x71\x07\xd2\x3a\x78\x39\x38\xaf\xc5\xb2\xbb\x6a\x47\x88\x64\xa7\xb3\xea\xe2\xd0\x04\xad\x7b\xd0\x69\xa1\xe7\xf3\x33\x5d\x42\x17\x6a\xd5\x17\xe8\x8a\x5e\x29\x09\x6b\xc9\x0d\xfe\xbc\x66\xd5\xb6\xbb\x6b\x85\xc9\xce\x8b\x30\xbd\xca\xc2\xad\x64\xcb\x23\x50\x28\x19\x66\xf2\xae\x57\xfd\x1c\xb3\x70\x6f\x3b\x5f\x6c\xc7\x5f\x6c\x90\xf1\xa3\x1c\xbe\x1d\xed\xb6\x5d\x68\x3d\x46\xb0\x6d\xbe\x0f\xaf\x5f\xb5\x1b\x9c\x6d\x99\xdd\xde\x36\xf2\x90\xcf\x20\x1d\xee\xca\xa2\x7a\xcc\x1e\xe3\xcc\xee\x3a\x02\xda\xd9\xed\xe1\xe5\x6a\x8d\xf5\xaf\x8c\x3f\x54\x35\xb2\xeb\x04\x4d\x44\xb8\xab\x87\x43\xc1\xae\xb8\x65\x10\x69\x8d\x96\xe6\x87\xe8\x6d\x33\x02\xbf\x5c\x76\x95\xd9\x84\x92\x2f\x47\x37\xa1\xe4\x98\xcb\xc4\x6d\xd9\x95\x2b\x37\x99\x86\xfa\xaf\x65\xdf\xf1\x38\xf7\x51\x3f\x4c\x33\x4a\xd1\x1c\x3b\xdb\xe4\xb2\x64\xc6\xb7\x4c\xe0\x2e\x63\x76\x22\x90\xc6\x5f\x14\x04\x2f\x16\x8b\x0c\x5f\x1b\xb0\xb5\x10\x9c\x5c\x58\xe6\x26\xfc\xfc\x1f\x91\x30\xbf\xb8\xa1\xac\x6a\x9a\x07\x6d\xf4\x15\xb0\x19\x7c\x71\xdd\xed\xde\x76\x1b\x4e\xdf\x12\x6e\xa3\x04\xcb\x0b\x24\x03\x6f\x64\xd7\xdd\x8f\x7e\x7d\x67\x71\x38\x58\x50\x86\xba\x97\x29\xd9\xbd\x03\x59\x38\x90\xd8\xbe\x4c\xfc\x63\xff\x51\x04\xe2\x9e\x17\xf3\x38\xd2\x92\x9c\x9a\x35\x41\x58\xfd\xf7\x63\x21\xc2\x8e\xfe\x94\x4d\xfe\x49\x16\x7d\x57\x4b\xdf\x4a\xe6\xca\x97\x1b\x86\xfc\xaf\x31\x43\x8e\x92\x02\x83\x25\xb1\xcc\x6c\xfd\x43\xab\xb9\xc3\x61\x86\x17\xbe\xea\xa0\xa6\xb5\x51\x93\x89\x0a\x7c\xf0\x6c\x55\xff\x1e\xce\xb8\x5e\x21\x24\x0c\x9a\x69\x4b\xcf\x3e\x8e\xb0\x0a\xdb\x01\x3b\xa1\x37\x2f\xe5\x40\xf4\x04\xcc\xce\x4a\x6b\xb9\xdb\xf7\xfb\x28\x85\xac\x6a\xe3\xa7\xe7\x02\xfe\x83\x16\x62\x5d\x92\x78\x55\xce\x8f\x51\x97\xdd\xd1\x9f\x46\xba\xb0\xf0\xeb\x30\x9a\xdb\x76\x60\xb5\x5d\x04\x3d\xb1\xb9\xe2\xa3\xf7\x46\xe1\xc5\xf1\x25\x92\x9b\x96\x89\x8a\xb2\x00\x12\xf0\xc9\x40\x7f\x00\x11\xfd\x34\x0f\x11\xdd\xc0\xec\x46\xaf\x89\x79\xee\xaa\xdf\xbb\x6d\xcb\x55\x21\x96\xa6\x1e\x69\x94\x2e\x56\x8f\x32\x49\xb0\x60\x32\x50\x4d\x5e\x28\x7e\x05\x8a\xd2\xc7\x25\xfd\x65\x0e\x6b\x8c\x95\xf5\x93\xac\x95\xf5\xbe\xda\xe6\x26\xa9\x38\x1b\x4e\xc9\x7b\x92\x1a\x5e\xee\xab\xad\xba\xb6\xf2\x06\xdf\xb0\x09\x68\x4b\xfe\x5a\xe8\x48\x78\xbb\x62\xbb\x1c\xe2\x9b\x62\x91\xd6\x26\xd5\x49\x5c\x45\x94\xbf\x95\xac\x14\x5f\xb6\x76\xa5\x5c\xb5\xda\xeb\xef\xa1\x85\x1a\xff\x94\xb7\x57\xff\xbb\x5f\xc2\xdf\x8f\xdb\xab\xff\x43\xcd\xe0\xef\x91\xc9\x5a\x83\xef\x3f\xb2\xa7\x5c\x4b\xdc\xfe\x84\x2b\xa9\x53\x3c\x7c\x53\x6d\x63\x61\x95\x91\x0f\xcd\x83\xd6\x26\xd7\x03\x72\xea\x33\x30\x77\x8f\xbd\x7b\x70\xba\xda\xe4\xcd\xa2\x67\x34\x76\xce\xb7\x36\xbc\x71\xa2\x6e\x4f\xa3\x92\xbe\xd2\xe1\x8e\xe0\x7c\x4b\xeb\x2b\xb2\x14\x4b\xad\xc0\x86\xf7\xda\xf0\x50\xd8\x78\x4e\x68\xa5\xfe\x50\xed\x5c\x19\x0e\xc5\x86\x5c\x89\x25\xb1\xec\x0d\x20\xec\x37\xd5\x16\xa2\x59\x8c\x35\xaa\x2a\xc1\x19\xa5\x60\xda\xb6\xdc\x99\x9f\x60\xb5\x04\xc6\xbe\x9a\xcf\x3b\xc5\x16\x06\x22\x67\xe7\x7f\xf4\x6c\xb1\x6f\x5e\x54\xb4\x21\xa0\x34\xd5\x96\x0d\x30\xc3\x7e\x4a\xeb\x4f\xa7\x37\x2d\x87\x1f\xa9\xa6\x7e\xfa\xe9\x27\x7b\x22\x3f\x55\x9f\x7c\xfa\xc9\x5e\xad\x56\x7e\x8a\xa7\x6f\xc9\xa6\xda\x41\x95\xbb\x4a\x4c\x69\xad\x64\xa1\xaa\xe1\xa4\xaa\x1f\x14\x5b\xa5\xde\xbc\x7d\x50\xed\x85\xfc\xf4\x8d\x67\x6e\x74\xf2\x4a\x20\x5c\x1d\xd6\x8b\xb0\x8e\x68\x95\xb6\xaa\x94\x65\xd9\x29\x86\x25\x7a\x78\x06\x0f\xab\xf9\xfc\x2c\x5e\x68\xbc\xd6\xf9\x5c\x41\xc3\x0d\x50\x61\x03\xb4\xa2\x2a\x3b\xa4\xf0\xaa\x64\x4a\xea\x6f\x17\x8a\xe4\xda\xb7\x08\x33\x57\x8a\x39\xc4\x3c\x05\xb2\x4f\xa4\x09\x1a\xd2\x37\xba\x8b\xcd\xb6\x8e\xf3\x09\x02\x8d\x59\x3b\x44\x94\x58\xe3\x31\x5f\x12\x97\xfe\x7b\x4b\xc8\xbb\xc2\x17\x63\x65\x57\x05\x68\x1a\x5e\x6f\xee\x48\xbd\x6b\x48\xfd\xdc\x1a\x1a\xa0\x5c\x73\xc5\x36\xa4\x71\x8f\x30\xb3\x55\x4e\xdf\xee\x68\x53\x17\x1c\x4c\xce\xd0\x23\xc9\x64\x22\x8e\xb1\x50\x1f\x78\x00\x97\xa2\xe0\x5f\x3e\x04\xac\xa6\x21\x0a\xaf\x4c\x5b\xb0\x29\x61\xdd\x36\xb2\x42\x19\x48\x02\xe7\xe6\xcc\x46\xb1\x67\x71\xa0\x91\x07\x4e\x59\x2b\xea\xad\x48\xf0\x18\x98\xf9\x9a\xa9\xb0\x42\xea\x6c\xa8\x65\x59\xb6\xfd\x33\x61\x3c\xb5\x3a\x22\xe0\x00\xd0\x7a\xaa\xf0\x76\xda\x32\xf8\xa9\xd9\xd0\xa9\x3a\x04\xcb\x4f\xf6\x5c\x4e\xab\x4e\x3d\xe7\x44\xe1\x3c\x6b\xa7\xdd\x6e\x73\x67\x1b\x51\xfd\x89\x36\x47\xbd\xb1\xd2\x1c\xd4\x01\x52\x47\xd7\xb1\x33\xc1\x7c\x8c\x52\xf5\x0c\xea\xba\xb8\x39\x7f\xf9\xf0\xb2\x2e\x3a\x2c\x9c\x13\x84\x76\x3e\xc8\x42\x62\xc0\x4c\x4e\x71\x00\x50\x21\x11\x6e\x15\x41\x7e\x59\xab\x3d\x90\x6e\x8c\xd4\x98\x9e\x76\x9e\x75\x6a\x48\x3a\x66\xd6\xd5\x25\xc2\x1d\x8d\x36\x60\x80\xd3\xe2\x63\x18\xf1\x3f\x84\xb8\x05\x5b\x18\x7b\x99\xae\x04\x8d\x59\xa9\x39\x3b\x26\x35\xe2\xa6\x9c\x9b\x79\x0a\xbe\x0f\xee\x87\xf3\xe1\xb1\xae\x22\x20\xf6\xc4\xc0\x0d\xf0\xd5\x9c\x4d\xbc\x4f\x16\xbf\x64\x3a\xd8\x63\xc2\x4b\xdd\xd1\x95\xad\x9d\x3c\xe8\x5f\xb1\x24\x86\xba\x83\xdb\x16\x29\xfc\xfd\x96\x96\x51\xce\x9d\x33\x45\x98\x28\xe6\xc6\x8f\xc8\xb1\x78\x11\xf3\x10\x7f\x17\x64\xc8\x85\x7a\x40\x6e\x5e\xe0\xc2\x26\x16\x8e\x4b\xe4\xb0\xc8\x60\x85\x6a\x71\x64\x92\xdd\xf3\x01\xdb\x2e\x43\x32\xde\xe0\x94\x87\x76\xd4\x73\x11\x30\x3e\x32\xba\xb7\x81\x31\xed\x72\x9f\x87\xad\xa2\xef\x35\xb7\x42\x2c\x01\x06\x2f\xeb\xfe\x88\x86\xa7\x59\xe6\xf0\xd0\xf1\x3b\x8e\x9d\xf9\x4b\x68\xa3\x00\xaf\x5d\x9d\x37\xc5\xfc\xb1\x30\x89\x50\x80\x3f\xfa\x73\xc4\x11\x69\x3e\xe6\x7f\xa5\xe6\x83\x1c\x27\xe3\x4d\x1d\x96\x23\xf9\x33\xb0\x44\x20\x72\x0a\x24\xaf\x6d\x34\x42\x81\xf6\xb0\xd7\x82\xfc\x10\xa9\x33\xff\x52\x38\x8b\xb1\x69\x87\xae\x66\x6a\x82\x33\x48\xe9\x2a\xd5\x9f\xde\xb1\xb3\x4c\x1b\x4f\x7c\x37\x10\x8c\x67\xd6\x58\x90\xb2\x20\x36\x0d\x8c\x5d\x29\x9a\xcf\xad\x3b\xf3\x59\xe8\x9f\x7e\xc7\xc9\xcd\x92\x20\x6c\x6a\x1e\x49\xc5\x14\x3b\xa6\x5b\xdb\x43\x06\xc7\x85\x24\x11\xea\x83\x4c\xec\xb4\x7d\x01\x33\x81\x30\x6d\x4c\xa4\xfc\x5f\x81\xef\xb7\x4e\x49\x13\xc8\xde\x21\xcb\xdb\x1f\xcc\xef\xe2\x95\xf9\xdf\xd4\x72\xca\x87\x20\x04\x23\xe1\x59\xa4\x49\x99\xe1\xbd\xa2\x5b\x6e\x13\xfe\xec\xb2\x58\x40\x70\x85\xde\xff\xff\x3d\xd5\x96\xdb\x0c\x26\xe8\x08\x1e\x57\xd1\xd8\xf0\x16\xef\xc8\x43\xc9\xf4\x9f\x59\x1d\x99\xb5\x37\x01\xb7\xc8\x17\xa9\x32\xc9\x38\x61\x01\x01\xab\x38\x61\x02\x52\x4d\xeb\xa4\x86\x37\x84\x13\xb6\x89\xde\xbe\x8c\xcc\x28\x42\xd2\xfa\x51\x7b\x66\x34\x50\x6a\x6b\x40\xfd\xa4\xa8\x11\x89\xd0\x15\xfa\x9a\x44\x21\x10\x0a\xa9\x02\x58\xa1\xc3\x21\x38\xaf\xfa\xcf\x25\x89\xec\x7f\x8a\x95\xf0\xb5\x19\x0d\x94\x90\x34\x02\x6e\xac\x0c\x8f\xf5\x13\xc8\xd9\x99\xa3\xea\x5c\x53\x91\xab\x34\xf5\x93\x91\x57\x24\x14\x1d\x5b\xfa\x73\x6a\x45\xe9\x91\x6d\x51\xe7\xf5\x59\xc5\x5a\x46\x37\x55\xf3\xbd\x9b\x7a\xf1\x6d\xa1\xa5\x1a\x24\x21\x76\x25\xc6\xce\xcc\x1e\x98\x2b\x20\x03\x77\x9b\x4c\x05\xca\x73\x38\xad\xd1\x88\xdd\xcb\x94\x18\xd2\xb9\x0e\xf8\x82\x76\x5f\xb7\x55\x4d\xea\xc2\x39\xa4\xf2\xc8\x30\x14\xec\x91\xd4\x31\x81\x31\xdd\xcd\x4d\x36\xbb\x31\x18\x74\x0e\xa7\x76\xa1\x5b\x66\x7b\xf1\x9a\x25\x78\x68\x00\x88\xac\x84\xfd\x7f\x7e\xc5\xd1\xca\xa8\x26\x7f\xdb\x83\xf5\x5b\x9c\x09\x57\xeb\xd4\x9d\x88\xe8\x6e\x38\x95\x0c\xf6\x2e\xb3\xe0\xea\xe8\x66\x92\xd6\xdd\x60\x67\x58\x94\xab\xb5\x4f\x72\x67\xc8\x81\x30\x95\x5f\xa0\x8c\x37\xb8\x78\x80\xf8\x24\x7e\xc9\x81\x2d\xc9\xa4\x77\x25\xc0\xd4\x93\xb1\xac\xd4\x14\x00\x11\xac\x4e\x66\x0a\xdf\x16\xfd\xd3\x8c\x62\x36\x2b\x83\x12\xd6\x55\xe7\x19\x18\xa5\x3a\x25\x2d\xf0\x1e\xe0\x73\xdf\xc1\x66\x20\x79\xed\xcf\x5c\xac\x1e\xcc\x7d\x73\x57\x75\x4f\xe3\x47\xcf\x61\x89\x83\x1f\xdc\x43\x58\x41\xb7\x10\xad\x0e\xcc\x40\x0b\xf2\x9e\xf0\x07\xb5\x5c\xcd\x84\x8e\x92\x98\x31\xb3\x80\xa6\x0b\xfa\x57\xc0\xd6\x21\x14\x12\x91\x84\xa0\x05\x80\x8f\xdd\x7a\xfd\x27\x57\xd0\x31\x54\x91\xd7\x41\xbc\x16\x6f\x97\x39\xa2\x13\x74\x98\x43\xf6\x2c\x95\x09\xbf\xd1\x2f\x73\x9f\x19\xfa\x41\x48\x40\x40\xfa\x26\xe2\xb0\x2f\x5f\x68\x1e\xcc\xe7\xb4\xce\x37\xa3\xb5\xa4\x7d\x53\x7c\x9d\x63\xd9\x66\x96\x25\x9d\x3d\xee\x54\x64\xd0\xd8\x6d\x44\x6a\xc8\xa7\x75\x6e\x73\x74\xd0\x13\xc9\xdc\x07\x64\xfc\x3e\xc8\x0e\x10\x2e\x55\x4f\xcb\xe7\xcd\x2f\x1c\x3d\x75\x6a\x13\xd4\xf3\xd7\x7b\xf3\x23\x03\xeb\xb9\x68\xa7\x37\x44\x78\x01\x59\xb1\x7e\x0f\x5b\xa2\x04\x6c\xdb\x8b\x9c\x7e\xa0\xe2\xae\xdd\x89\x69\xc5\xa6\xb4\x7e\xe3\x10\xe0\x63\xcc\x0c\xef\x75\x67\xb6\xc4\xfd\x47\x9c\xa5\x97\x26\x9c\xa9\x6b\x41\xbb\xe7\x94\x8b\x87\x2b\xb2\xe8\x08\xab\x8b\xd9\x5b\xb2\x69\xef\x09\x3c\x9b\xa1\xa5\x7d\xba\x35\x5c\xe8\x4f\x55\xf7\x3d\xe9\x88\x98\x69\xef\x38\x4e\xca\x3d\x78\x46\x54\xcd\x6b\x51\x09\xb2\x9c\xed\xd8\xa6\xbd\xbf\xa7\x42\x90\x7a\x86\x4d\xdf\xcb\xb3\x0b\x1c\x3c\x5f\xee\x6b\x5a\xbf\x26\xc2\x72\xb6\x4b\x41\xb0\x5a\x30\x65\xb7\xda\xb2\xb8\x97\x38\x1d\x4f\xcf\x16\xc2\x2b\x9f\xf5\x1d\x09\x0e\x07\x3b\x4f\xde\x36\x0d\xa9\xbf\xac\x36\xef\x66\x48\x97\x90\x23\x9a\xfd\x21\xe3\x5f\x43\x28\x31\x78\x78\xfc\xd0\x16\xb3\x06\xf0\x71\xd1\x55\xef\x49\xad\xfa\x09\x60\x02\xb3\xfb\x40\x9b\xe6\x19\x2c\x47\xf7\x1b\x7f\x4d\xd9\x8b\x86\xde\xde\x29\x18\x61\xbd\x95\x2e\xc9\xc2\xde\x1c\xa4\xa5\xc0\x26\x5c\x7b\xc9\x25\xda\x8b\x82\x58\x5a\x98\x7c\xc0\x91\xea\xc4\x2d\x2a\x37\x5c\x3c\x59\xac\x5e\xd3\xdb\x5b\xc2\xbf\xae\x04\xe1\x29\x44\xde\x92\x4d\x75\x4f\x5e\x32\xf0\x3c\xcd\x4f\x1e\x5e\xcd\xcc\xb0\x6f\xdd\xa0\xf6\x57\x08\xb9\xfe\x60\xa4\xaa\x1f\x66\x48\x4a\x6c\x81\xb0\xdc\xd3\xee\x75\xf5\x9e\xb2\x5b\x85\x05\xfd\x8d\x4f\x41\x1b\x6c\x99\xfa\x19\x9a\x39\x96\x0d\x09\x21\xaf\x5e\xd7\xb4\x1e\xde\x07\x0f\x11\x8d\x1b\x94\xbd\x6f\xdf\x91\xaf\xe9\x0d\xd9\x3c\x6c\x1a\xf2\xac\xd2\x0b\xea\x66\xfa\xe8\xd5\x6a\x0e\x3f\xe8\xd2\x65\x7d\x88\x7f\x0c\x90\x1e\x9f\x89\xeb\x4e\x1f\xf6\x4c\x67\xe1\xf9\xea\xc3\x3f\xf8\x78\x06\x17\x0c\x36\x83\xab\x6d\xf8\x2b\xfc\x71\x76\x89\xc3\xf2\x10\xb9\x31\xf4\xfb\x7a\x11\x8d\x25\x93\xcd\xb3\x27\x52\xab\x6b\x60\xc8\x6f\x48\xd7\x55\xb7\x10\xff\xef\x4d\xe6\x62\xc1\x40\xd7\x63\x28\x0e\x86\x53\x68\x52\x96\xd9\x74\x8f\x7a\xda\x7f\x35\x00\x4c\x41\xaa\x36\xfa\x08\x9a\xa4\x07\x12\xd4\x27\xe1\x9c\x2c\xb2\x0e\x9e\xd3\x64\xc3\x4f\xea\xe0\xd8\xc9\x33\x87\x01\xc7\xcb\x1b\xdf\x52\xd8\xb1\x2c\x72\xe4\x30\x31\x02\x94\xde\x71\x19\x04\xfd\x1b\x22\x6f\xad\x6f\x5c\xa7\x4c\x21\xd6\x13\xd7\xd7\xa5\xf4\x31\xfc\xa1\x73\x02\x23\xce\xab\x75\x4a\x8a\x38\x9f\xb8\xab\xbb\xaa\xfb\xe4\xa5\x58\xd1\x35\x66\x2b\xba\x2e\xb3\x89\xe7\xae\x48\xc1\xd1\x92\x3b\x61\x43\x16\x9c\x20\x35\x61\x08\x0e\x21\x25\x25\xc5\xde\x9d\xc0\xa5\x29\x86\x02\x57\xc8\xb7\xe4\x83\x22\x1d\x1d\x11\xbb\xad\x86\x41\xa8\x3d\x06\x06\xae\x2b\x40\xd1\xd1\x92\x85\x41\xf7\x85\xdf\xcf\x32\x76\xcc\xcd\x63\xfa\x69\xc4\xb3\x25\xe1\x91\xf8\x4d\xc6\xd0\xea\xf7\x1e\x38\xf4\x8a\xeb\x59\x58\x6c\xbc\x23\xa7\x8d\x76\x94\xe4\xb8\x1e\x1b\x50\xeb\x25\xab\x0c\x89\x45\xd9\x11\x1c\x00\x39\xf3\x2a\x85\xcf\xdb\x14\x3a\x3c\xdf\xc6\x78\xa7\x80\x9e\xd1\xa7\x06\xe9\x9d\xb8\x64\x75\xbd\x2d\xf1\x64\x61\x74\x4b\xcc\xc1\x35\x50\x5d\x8c\xd3\xd4\x9a\xd6\x8a\x3f\xcd\x8d\x96\x30\x29\xa1\xea\x4f\xe2\xca\x03\x2a\x20\x00\xa7\xcc\xcb\xad\x0e\xba\xd0\x44\x2a\x32\xf8\x97\x0d\x51\xef\x06\xb7\xe9\x14\x74\x4c\xa8\x4e\x75\xc2\xd9\xf9\x28\x44\xb1\x87\xed\x3b\x5f\x6c\x7d\x6a\x23\xc3\xf6\x21\x79\x01\x0b\x7d\xc1\xaf\x62\x77\x05\x8e\x96\x7b\x89\x05\x42\x46\xb2\x04\xfe\xb3\xe4\x58\x2c\x3a\xf5\x97\x76\x71\xc6\x02\x9d\x98\xa1\x83\xa2\xf9\x7c\x16\xf4\x34\xd3\x51\x6f\x33\xd7\x99\x7d\xd0\x53\x0b\xaf\xa8\xce\xca\x4d\xd7\x25\x81\xff\xb0\xc0\xec\x7c\xb6\x98\x9d\xd3\x30\xbb\x48\xb1\xa7\xdd\x57\xf7\x5b\xc5\x0d\x5f\x62\x2d\xf2\x00\x53\x64\x7f\x90\x5a\xff\x6d\x38\x66\xf5\xa7\xe5\x9b\xe0\xb1\xde\x36\xfd\x03\x48\xa2\xfa\xc3\x5c\xe9\x17\xe1\xfd\x95\xb2\x4d\x6a\xef\x32\x0c\x35\x24\x24\x85\xf9\xf8\x89\x5d\x44\x7c\xb8\xb9\xe0\xaf\xb7\x41\x90\x0f\x94\xde\xef\x6f\xb8\x8e\x5f\xc2\x7a\xef\x3d\xbf\x9d\xc5\x0c\x43\xda\x8f\x9c\x3a\x77\x79\xa6\x3c\xfc\xa3\xb0\xcd\x9d\xdd\xe1\xfe\x59\x2b\x5e\xb4\x3b\x06\x6c\x86\xb4\xeb\x57\x30\x71\x3b\x74\x81\xc9\xcf\x96\xb1\x88\x81\xa1\xd5\xf5\x3d\xd9\xe5\x37\x9d\x31\x26\x0b\xc5\xf5\x36\xa4\x62\x9a\x49\xcc\xf3\x8c\x63\x5c\xa1\x5f\x73\x66\x7e\x80\x13\xc0\xc2\xeb\x99\x2e\x13\x01\x4f\x4f\x3c\x40\xda\x8b\x1e\x00\xa0\xc9\x72\x1f\xdc\xd8\x79\xc1\x4b\x09\xff\x26\x74\xe1\x39\xad\x0d\x73\x97\xf2\x99\x4a\x48\x48\xb8\xbd\x90\x19\xcc\xf1\x53\x39\xb2\x7e\x4c\x68\xb3\x1f\x7d\x74\xe1\xed\x17\x32\xdb\xfd\x13\xec\x65\x1d\xf5\x2b\x46\x5b\x73\xa6\x96\x2d\xc1\x66\x21\xcb\x8a\xd8\xb1\x7b\x5b\x18\xc9\xe8\x01\x97\x61\x9a\xcf\x42\x72\x73\x11\xed\x74\x20\xd0\x1f\xe3\xc7\x62\x89\xff\x11\x12\xf3\x2f\x97\x3a\xc7\xf0\x04\x20\x18\x6e\x85\x7a\xf0\xeb\x04\x6b\x77\x1e\x47\x6e\xb8\x21\x41\xf8\x9f\x22\xd7\x7e\x6c\x69\xf2\x71\xa2\xee\x51\x49\xc5\xd2\x89\xe0\xce\x0b\x90\x4a\xcb\x95\x4a\x96\x7c\xc9\xde\x13\xde\x25\xd5\x38\x1e\x29\x28\xd5\xb4\xd6\x28\xad\x86\xce\x11\x5d\x0d\x6e\xbd\xcc\xc1\xcd\xe8\x4b\x9e\x03\x02\xf6\x7f\x23\x49\xb9\x87\xf4\xc9\xea\xfe\xfb\x48\xbe\x72\x6c\x4b\x21\x4f\x9f\x95\x0a\xc1\xb1\x25\xb7\x89\xf0\x5e\x6d\xe2\x32\xf3\x56\x17\xd6\x3b\x01\x01\xa4\x0e\x7b\x98\xf1\xb6\x15\xb3\x40\xe2\xda\x90\x63\xc1\xa3\xdf\x16\x3a\xfa\x74\x20\x48\x14\x32\x5d\x10\x7c\x47\xf0\x0d\xc1\x5b\x82\xf7\x31\x2f\xba\xbc\x27\xb2\x4c\xf9\x55\xfc\x9e\x94\x67\x97\x93\x2d\x09\xa5\x0b\x48\x6c\x4b\xac\x52\xdd\x65\x4a\x0b\x13\x0a\x82\xa5\xc0\x27\x14\x44\x4f\x8a\xbd\x33\x78\x2c\x6b\x82\x4d\xa0\xb4\xb3\x77\x2e\xef\xdc\x33\xdf\xee\x86\xc8\x92\x20\x5c\x93\xf9\xfc\x8e\xcc\xe7\x37\x64\x3e\x2f\xd4\x7c\x2e\x9c\x56\xfe\x3d\xd1\x5c\xfc\x6d\x36\x8e\x0b\xbf\xcd\x3f\x7e\xc8\x47\x7d\xf9\x24\x51\xa1\x1a\xe2\x81\x80\x8b\x7b\x01\xff\x97\x04\xbc\xbd\x45\x31\x5b\xcc\xc0\xa5\x1a\x12\x49\x91\x53\x9c\x5b\x82\xd8\x50\xe1\xb4\xed\xb1\xbf\xae\xa8\x6e\xcb\xd1\x90\xd1\x4d\x43\x09\x13\x2f\x93\xcf\xae\xfb\x7e\x33\xd6\xe4\xe4\x02\x1e\x62\x17\x5f\x7d\xae\xe3\xc6\x26\x54\x38\xb8\x47\xbf\xa9\x58\x75\x4b\xf8\x8b\x66\xd7\xdd\xf5\x3b\xbe\x57\xb8\x0b\x31\x21\x94\xdd\x26\xdd\x7f\x4f\x0c\x53\x16\x7f\x56\xb7\xdf\xb6\xc2\x4c\x29\xf9\xc2\x47\x5f\x24\xb3\x0a\x19\xde\x24\x53\x16\x08\x9b\xd1\xb3\x2e\x71\x90\x4b\x12\x69\xb9\xc0\xc6\x04\x7e\x35\xb9\x21\x9c\x93\xfa\x07\x7d\x2a\xd3\xd7\x3c\x60\x2d\xd2\x39\x18\x93\x77\xef\x79\x64\x10\x4f\xa6\x61\xf1\x5b\xfb\x57\x0f\x47\x65\x70\x22\x2a\xca\x48\xfd\xcd\xe9\x1f\xf8\x93\x6f\x0e\x53\xf7\xc8\x6f\x7e\x3e\x36\xc8\x66\xc7\xbd\xbc\x1b\xae\x8b\x84\x28\xb5\x05\xa3\xb8\x45\x72\xb1\xa0\xf5\x40\xf0\x71\x8c\xd6\x90\x76\x24\x83\xd5\x2e\x8e\xdc\x94\xc9\xf9\xf7\x1f\x5f\x3e\xbf\xfe\xcb\x57\xff\xb1\x8e\xbe\xe8\x09\x47\x31\xa6\x04\x4f\xc2\x83\x71\x76\x19\x1f\x0a\xfb\xfb\xd8\x81\x70\xed\xfa\x87\xc1\xbd\xea\xe1\xa3\x9f\x03\x24\x35\xb1\xf7\x62\x1f\x41\x83\xc9\xf6\xd1\x33\x7c\x19\x21\x67\xb4\x68\x87\x9a\x3d\x50\x78\xc4\xb4\xf1\x3d\xd3\x9e\xbd\x36\x70\x8c\xa4\xb5\xec\x74\x13\x13\xb2\xdb\xb3\xac\x0a\xe3\x8a\x9c\x7e\x09\x5b\xdc\xd8\xca\x98\xb1\xaf\x25\x64\x4b\x91\x93\x87\xc0\x23\x01\x0d\x79\xe6\x26\x9f\x2b\xf6\x44\x23\x82\xf3\x0e\x9c\x29\xe2\x39\xf3\x74\xf4\xfc\x12\x49\x1f\x5d\x03\x30\x2d\x7c\x81\xa0\xb8\x4e\x23\xea\x07\xde\xc0\x07\x3e\xae\xc6\xef\x4b\xe6\xf3\x5e\x44\xf6\x50\x9c\x75\x12\x58\x9d\xec\x45\x91\x64\xc8\x2d\xb3\x3b\xe6\x42\x9e\x7a\x3b\x49\x3e\x4c\x49\xe4\x3e\xab\x3d\x68\xf2\x1b\xaf\xed\xf7\xfe\x84\x79\xd3\xb1\x1b\x38\x78\x1b\xb9\xbd\x18\x61\x33\xcc\x6d\x0a\x3d\x24\x7b\x94\x78\x3f\x04\x87\x99\x60\x22\xe3\x78\x7a\xff\x12\x10\x2d\x9c\x97\xcb\x43\x18\xf5\x10\x4e\xdf\x8a\x7c\x59\xe8\x45\x6d\x1c\xec\x92\x43\x43\x3e\x4c\x5f\x13\xeb\x1c\x15\xbf\x34\x1b\x65\x8f\xd2\xe0\x1e\xd9\x06\xc1\xf6\xb8\xe3\x97\x0b\xc6\xea\x1d\x52\xbd\xa2\xf4\xa4\x0f\xad\x2a\x6d\xe7\x57\xd6\xa3\x15\xab\x35\x1a\xa2\x23\x92\x76\x7f\xa2\x75\x4d\x98\x12\x04\xbe\xcf\x01\xd3\xb8\xe9\x18\x0d\x1d\xc4\x62\x92\x12\x18\xd3\x45\xac\x0b\xb7\x53\x0b\x6f\x07\xaf\x09\x1d\x22\x94\x46\xaa\xc8\x7a\xb6\x9b\x77\x01\xa5\x3e\x1c\x4c\xb4\x37\x91\xd7\xd4\x84\xb0\xbc\xd8\x35\xcd\x83\x8b\xdb\xdd\xbb\x7c\x6a\xf6\xfd\x4b\xf6\x63\xd7\xf7\x01\x53\x6f\x02\xff\xaf\x33\xed\xe9\x53\xa4\x01\xa2\xe9\x53\x13\x1a\xea\xa0\x11\x1d\xee\x68\xe5\xa6\x89\x74\x6a\xbc\xf1\xc6\xa6\x91\xec\xb9\x49\x0d\xb6\x26\xb5\xbc\xab\xb4\xe0\xfa\x34\x93\x0f\xa1\xff\x59\xbf\xb5\xb4\x0a\x81\xf1\xd1\x74\x1b\x19\x44\x47\x8f\xb5\x36\x8d\xa4\x4d\x1a\x31\xd2\xf4\x5b\xf2\x41\x1a\xa1\x75\xbc\x21\x34\x91\x4e\x51\x34\xd6\xd8\x35\x92\xde\x83\x47\xdf\x59\x67\xe1\xde\xcf\xe7\x67\x03\x18\xa9\xb3\xe2\x01\x89\x5b\x0a\x1d\xcb\x80\x79\x69\x1f\xe0\xd8\x57\x0c\x6e\x35\x1c\x4e\x60\xd9\x9b\x12\xa4\x63\xe6\x8e\xb9\x08\x39\x0d\xcc\xad\xfa\x31\x78\x07\x5c\x94\x4f\xb3\xa7\x27\x3f\xa3\xf5\x8c\xb2\x29\xf1\xc9\xc1\x74\x10\x86\x4f\x8f\xa7\x29\x33\x04\xab\x50\x63\xd4\x2c\x45\x22\x0a\x8e\xa6\x11\x09\x72\x26\xb6\xae\xfe\x66\x85\xbb\x34\x4a\xb2\x29\x2f\x9e\x34\x9f\xfb\xb2\xb1\x36\x83\xc5\x0e\x4a\xc6\xe2\x4d\xd9\xae\x76\xeb\x89\x9b\xff\x06\xaa\xd1\x84\x95\x02\x37\xba\xb6\xe0\xcf\xa4\x20\xab\xdd\x1a\x2d\x5f\x99\x3f\xb0\xfa\xb7\xac\x90\x0e\xb1\xac\xcb\xf4\xda\x58\x5c\xab\xc9\xeb\x3d\xd5\x82\xb6\xc9\x37\x53\xb8\xb2\x18\x26\xff\x07\xc7\x75\xc0\x1e\xe8\x8a\x56\x1c\xa7\x25\xae\x92\x9b\x51\x41\x4b\x5f\xe8\x95\x12\xe2\x1e\x72\x31\xf0\xce\xf4\x83\xef\xa2\xe9\xe1\x9b\x34\x12\x08\xff\x04\x9c\xc9\x1d\xbe\xb1\xa3\x18\x81\xff\x79\x8f\xc0\xc3\x72\xef\xf0\x4d\xee\xba\x94\x11\x93\xb8\x1f\xe0\x66\x43\x71\xcb\x72\x9e\x9a\x19\xf7\x6d\x22\xae\x7d\x47\x16\xa0\x66\x97\x75\x80\xfc\x24\x19\x26\xc3\xd5\x66\xc5\x38\xc7\xeb\xf2\x38\x7f\x8f\xc9\x45\xe0\x72\xf9\xe1\x7e\x92\x94\xbc\xe8\x11\x97\x33\x19\x6b\xb9\x22\x6b\xdb\xbf\x8d\xc8\x3e\xda\xb0\x40\x71\x1e\xc4\xc1\x0f\x64\x6e\xc6\xb1\xe8\xd6\x2b\xbc\x32\xf5\xee\xea\x39\xc9\x0d\xc2\xd7\x33\xfd\xac\xc8\x7a\x12\x4d\xaa\xf7\x1a\x0b\x45\xb2\xd4\x11\x00\x5d\xe4\xcb\xee\x69\xf7\xc0\x36\xf3\xb9\x70\x91\x3a\x09\x3a\xc3\x89\x89\x83\xb4\x07\xc5\x8e\xac\xfe\x3c\xd1\xdb\x19\xfa\xc2\x6a\x6b\x31\xf8\xde\x26\x6b\x54\xf7\xbf\x0f\xb8\x9a\x3d\x7f\xbd\x9c\x02\x71\xfc\x17\xf5\x62\x3a\x3b\x37\x24\x34\xf0\xe6\x04\x36\x24\xa8\xf6\x15\x70\x95\x56\x5e\x7a\xad\x3a\xd5\x5f\x62\x82\x30\x5f\x18\xd1\x4e\x76\xa2\xe2\x82\xd4\x0e\xe1\xed\xd4\xa2\x33\x70\xe1\x7c\xdb\x6d\xdc\x6b\x2c\x2c\xb8\x73\x3b\x0b\x3e\x83\x34\xbd\xd2\xa6\xc9\x1b\x1f\xe0\xf2\x17\x0e\x70\x19\xba\xea\x9a\x65\xa7\xeb\x99\x78\x3c\xc2\x3c\x84\xa7\xfe\x72\xda\xde\x18\xa0\x3a\x5f\x16\x97\x1e\x30\xcc\x40\x58\xf8\x8c\x70\x1c\xed\x85\xf5\x4f\x0c\x2c\x44\x33\x6f\x51\xe2\xce\xa2\x44\x24\x94\x69\xb5\x21\x07\xfd\x44\x1e\x22\x35\xff\x61\x21\x11\x8e\xd2\xcf\x69\x9f\x51\x68\x68\x35\xff\x98\x48\x84\xfb\x6b\xd9\xb4\xf7\x5b\x85\x4c\xd8\x86\x56\xdf\x34\xd5\x6d\x37\x43\x3e\x07\x48\x30\x01\xb1\xc8\x6c\x8e\x44\x48\xc6\x68\xbe\xef\xb3\x8d\x45\x80\xbd\x61\xe3\x99\x39\x00\x59\x32\x88\x23\x8e\x3b\x15\xe4\x1d\x99\xeb\x49\xf8\xb9\x8c\x1d\x0e\xaf\xd5\xe9\x81\x66\x5a\x52\xc5\xb3\xeb\xcd\x1d\xd9\xbc\x7b\xd1\xf2\x57\x7c\x7b\x57\x31\x52\x47\x1e\xea\xdd\x0c\x21\x24\xb3\xec\x71\x92\x66\x23\x9d\x86\x4c\xa2\x99\xf7\x39\xca\x3d\xac\xcd\x3b\xbb\xc4\x7e\x1d\xba\xab\x81\xf5\xa2\x31\x4d\x87\x8c\x22\x53\x87\x2e\x16\x43\xbb\xd3\xf8\x6b\xdd\x7a\x1c\x3e\xb6\x59\xb4\xdd\xf1\x13\x2f\x66\xb8\x1b\x40\x1e\xed\x75\xf8\x0e\x3c\x41\xb3\x13\x4c\x66\x20\x59\x4f\x5e\x29\x30\x90\xb7\xe7\xfa\x86\xb2\x3a\xa9\xfc\x8b\x59\xdc\x89\x91\xc9\xa3\x96\x5f\x3e\xfc\xb9\x6b\xd9\xd3\x2d\xf5\x91\x50\xd8\x90\x54\x66\xce\x37\x2f\xbf\xf8\xca\x26\xf4\xc1\x09\xbb\x88\x75\xf6\x65\x84\x47\x1b\xc1\xaa\xb9\x56\x79\x7c\x99\x49\x46\xd6\x67\xe3\xe2\x86\x10\x0a\x3d\x9f\xeb\x52\x64\x57\xb1\x2e\x68\x2c\x5e\x5d\x7f\x60\x92\x75\xd1\x48\x31\xf1\x88\xb4\x52\x6d\xf0\x21\xae\x4a\xea\x8a\x58\x55\xea\x7a\xc5\x56\xa9\xab\x63\xce\x2b\xdc\x94\x50\x14\x8b\x60\x2d\x0e\xb4\xb8\xe5\xf4\x96\xb2\x4a\x50\x76\xfb\xb2\x2f\x18\xb8\xf1\x96\x54\x3b\xc4\x2b\x1e\xdb\x95\x21\xb0\x29\xcf\x47\xd3\x91\x31\x13\x07\x0e\x32\x44\xb4\x32\x75\xf9\xe8\xcc\x14\x4a\x1c\x7c\x2a\x84\xe2\xe8\x50\xc2\x43\x0e\xb0\x36\x93\xb0\x46\x41\x8a\x5d\x1c\x53\x9c\xdc\xcd\x26\xa5\x77\x98\x6d\x57\x01\x35\xac\xee\x4c\xb0\xcb\x86\xbb\xc1\x26\x91\xef\x72\x77\xb5\x0b\x23\x29\xf4\x66\xf9\x8c\x67\x5a\x62\x6a\x64\x14\x62\x01\x29\x3e\xa0\x2a\xd3\x38\x5c\xd2\x5c\x8e\x3e\x9a\xc6\x06\xb3\x07\xf8\xf7\x78\xcc\x60\x59\xc4\x75\xb5\xa1\x7d\xda\xb5\x3e\x27\xa7\x84\xcd\x38\xeb\xb8\x19\xde\x77\xd0\x3f\x9a\x90\x8d\xfc\xec\x8c\xc5\x93\x9c\xcf\x93\x07\x29\x07\x58\xa0\x09\x2d\x6b\xe2\x32\x12\x1b\x39\x35\xd0\x01\x3a\xad\x6c\xa2\xb3\xb4\xc9\xfb\xfd\x02\x97\xe9\x8a\x31\xe4\x6a\x66\xba\xe0\xb3\x09\x10\xd6\x01\x72\x58\x1f\x03\xda\x05\x35\xdd\x96\xd9\x8a\xdd\x38\x72\xfd\x68\x6d\x06\x43\x9c\xac\x63\x59\xe1\x8c\x64\xed\x5d\x3f\x84\xcb\x38\xd2\x83\x77\x49\x65\x82\xf5\x03\xac\x77\x20\x99\x0c\xb4\x18\x96\x11\x06\x3e\x80\x04\xde\x44\x6c\xee\x60\x11\x51\xad\xf1\x7e\xea\xf9\x41\xe3\x4c\x90\xd8\xa8\x3d\x1c\x8a\x18\x69\xd4\xf1\x1c\xc4\x1a\x1d\xa9\x89\x05\xa6\x41\x8c\x68\xc1\x5c\x32\x80\xaf\x2b\x41\x3a\xa1\x78\x19\x60\x4d\x67\x16\xa0\xa6\x24\x05\x32\x5f\x89\x90\xc2\x27\x74\x06\x0b\x73\x0d\x8c\x36\xd2\x97\x1f\x3a\x6a\x87\x52\xfb\xd5\xe2\x16\x4e\xec\x9f\x7a\xb9\x0d\x8f\x9d\x39\xf6\x4b\x4f\x33\x2d\x59\x42\xda\x5b\x4f\xda\xe9\xe1\x40\x71\xe5\xd2\xef\x87\x84\xa4\x05\xb5\x48\xab\xeb\xa4\x7f\x64\xfa\x6b\x4c\x09\x39\xf4\x61\x98\xe3\xea\x54\x22\xec\x6a\xc2\x07\x24\xb8\x73\x24\xb8\xf2\xd4\xb5\x92\x03\x5d\x44\x29\x65\x46\xa7\x2e\x74\x7d\x5b\x14\x14\x8c\x37\x03\x29\x4a\x05\x28\x66\x7e\xcf\xb0\x7b\xe5\xb0\xcf\xcc\x6e\xe6\xc5\x39\x34\xb1\x55\x63\xa7\x34\x52\x12\x91\xab\x1b\xb2\xbc\x33\xc9\x36\x86\x67\x53\x52\xaf\x93\x49\xa9\xc0\xc0\x27\x32\x0e\x87\xcc\x20\xdf\xc8\x29\x55\x68\xe0\x82\xc6\x27\x31\xc0\xf2\x38\x3b\xe9\x51\xf4\x22\x25\xe9\x1d\xb4\xef\xe1\x52\x71\x76\xa9\x20\xd7\x6b\xfb\x1a\xca\x02\xbd\x68\xf9\x86\x68\x39\xa8\x38\xbb\x40\x36\x43\xd6\xaf\xe3\x83\x62\xec\x47\xf6\x50\xe4\x50\x94\x42\x25\xe8\x14\x45\x07\x31\xfe\xea\xd1\x28\x5c\x49\xb4\xac\x64\x1a\x14\xff\xdb\x6c\x57\xc8\x8f\xfe\x3f\xb5\x61\x3d\xe6\x8d\x65\x98\xb7\x5f\xb8\x29\x79\xe6\xae\x95\x68\xd9\x5a\xb1\xce\x9b\x8d\x8c\x09\xb1\x2f\x64\x5e\x65\x35\x86\xcb\x44\x1e\x4b\x0a\x7e\x44\xde\x20\x67\x17\x59\xcd\x61\xee\x46\xce\x6b\x0e\x3f\xd6\x65\x2f\x11\xfe\xf7\x48\x3e\x31\x99\x82\x04\xc4\xd8\x7b\x81\xd1\xf9\x15\x5c\xe4\x92\xbb\x8e\x88\x7e\x49\x9e\x57\xc3\x21\x65\x32\xff\x04\xdf\x45\x8d\x24\xf8\x2f\x5a\xb3\x69\xac\x8f\x74\xf8\xbe\xdd\x75\x77\xd6\xbf\x3e\x52\x62\x99\xf4\xf0\xbd\x5c\xf0\x46\x91\x7b\xcd\x5a\x41\x6f\x1e\x8c\xb3\x18\x25\x5d\x61\x2d\xa6\xa1\x4b\xa2\xba\xd8\xdd\x3a\xa0\x24\x62\x2f\x6d\x51\x7c\xf6\x9e\xea\x4c\xe0\x6a\xea\x60\x9f\x8a\x08\xf3\xd0\x77\xfd\xc6\x3f\x13\x48\xb6\x6a\x5f\x24\x14\xe3\x58\x3f\x61\xf3\x57\x71\x4f\xc9\xf6\x59\x07\x82\xc0\x1c\x16\x66\x47\x03\x9d\x89\x89\x94\x36\x64\x41\xa7\x0e\xec\x88\x88\xb3\x02\x0a\xf9\xa9\x4d\x97\x66\x2c\xa9\x3e\x6d\x9a\x1a\x41\xbe\xd1\x99\x4e\x0c\x5d\xee\xc1\x34\xc8\x7e\x96\x5b\x51\x3c\xed\xc9\x00\x7b\x45\x3b\xd5\xce\x7a\xb2\x4f\x42\x25\x6f\xe4\x42\x3a\xc3\x7b\x06\xb5\xb0\x9d\x07\x36\xf7\x7c\x85\x30\x59\xe2\x1d\xe6\xf7\x02\xff\x03\x7d\x88\x6a\xea\x30\xac\xa7\xc5\x32\x56\x8f\x24\xc7\x72\x18\x11\xf8\x61\xfa\x75\x41\x0e\x07\x9b\xe2\x3d\x74\x09\xf1\x27\x53\x46\x61\x24\x91\xf2\x3a\x78\x03\xbe\x96\x41\xc8\x48\xaf\x9d\x7e\x3e\x43\x32\x70\x76\x0f\x9a\xd8\xa7\x33\x9d\x80\x27\xd7\x8b\x7f\x3e\x03\x35\x5e\x26\x08\xc1\x65\x2a\x36\x68\xe5\xec\xc5\xd6\x46\x19\x68\x90\x51\x7c\x24\x61\x0b\xf3\xbd\x66\xd3\xdd\x47\xde\x3d\xa3\x03\x5d\xed\x65\x4f\x1a\xcc\x55\x5e\x90\xc6\x7e\xf9\x53\xe8\xd3\xdb\xfb\x30\xf4\xf8\xc5\x01\x74\xfc\xf3\x99\xeb\xc9\x07\x62\x84\x70\x8c\x92\x02\x48\x78\x96\x72\x02\xa1\x81\xcb\x25\x85\x06\xc7\x4d\x73\xcb\xb1\xbb\x8a\xd5\x0d\xa9\xbf\x7a\x4f\x98\x28\x38\x06\x1f\x67\xd5\xc2\x65\x17\x73\xa2\xa5\x31\x85\xd4\x35\xf1\x8a\xfa\x21\xb2\xa8\xa9\xa2\x21\x44\xf6\x13\x19\x3d\xd5\xfb\x63\xec\xd0\x09\xcd\x4d\x92\xdc\xa6\xba\x04\x48\x74\x94\x4a\x73\xd2\x74\xef\xa8\x96\x1f\xe0\x84\xa9\xf6\xbe\x8a\xec\x46\x48\xba\x0c\x2b\xf7\xed\xfb\xaa\x79\x76\x47\xb4\x67\xf6\xe8\x3c\x2d\x90\x07\xef\x4e\xcc\xcb\xb3\xcb\x20\x63\x56\xc1\x4b\x9b\x69\xef\x47\xa6\xcf\x5a\xa4\x40\x2b\x06\xc5\xfd\xf9\x9c\x1f\x17\xe4\x87\xe6\x89\xc7\xad\x6c\x08\x61\x2e\xa3\x6b\xee\xe1\x51\xa0\xed\x7d\x34\xf9\x75\x50\x83\x0b\xc0\x61\xf9\x38\xbc\x26\xff\x15\xf0\xb2\x98\x08\xa7\x6e\x18\x54\x05\x99\xcf\x75\xb5\x90\xd9\x19\x54\x7e\xb7\xb7\x9a\xbd\x06\xf2\xf0\x33\x9f\x20\xac\x3f\x37\x17\xee\x63\xbb\xb0\x9f\xa1\xa8\x1f\xda\xb2\x67\xce\xf7\x3f\xe8\x31\x6f\x0b\xb5\xae\xfd\x59\x4b\xbc\x26\x8e\xe0\xc1\xfa\xdc\x36\x2c\x90\xcc\x85\x0e\x65\xdc\x90\xe0\xeb\x5c\xdb\x89\x4f\x4f\x0f\x04\x6a\x66\xbc\x46\x66\xf6\x16\xe8\xd9\xe1\x3c\xbd\x0c\x63\x80\x12\xeb\x7c\x54\x71\xfd\x28\x8b\x47\x90\x8c\x42\x26\x2c\x21\xb0\x09\xea\x73\xd9\xe3\xde\x1a\x7f\x79\xf8\xbf\x04\x57\xfa\xd5\xc5\x5a\x97\xfc\xab\xfa\xc4\x1a\x77\xe5\x9b\x4f\xf6\x95\x77\x16\x93\x9f\x7d\xa1\x18\xa5\x37\x93\xba\xdd\x57\x0b\xf2\x33\x15\xf3\xb9\xfe\xdf\xb0\xda\x55\x59\x85\x41\xb7\xf2\xc3\x1d\x6d\x48\x71\x56\xad\xda\xb5\x3e\x71\x4d\x79\x4b\x56\x1d\x1c\x9f\x06\x89\x12\xaa\xef\xed\xb6\x1d\xe6\x65\xb3\x20\xea\xd8\x74\xb8\x52\x4f\xe1\xae\x00\x0d\x84\x28\x57\x8a\x46\xad\xd6\xa6\xe2\x3c\xcc\x1a\x92\x0c\xb0\xf2\x02\x43\x29\x5d\xed\xef\xc2\x3e\xa7\x4f\xd8\xf9\x39\x2a\xaa\xb2\x5a\xed\x56\x6c\xbd\x46\xba\xcb\xf9\xdc\x94\x88\xa8\x10\xae\xf4\x80\x8a\x76\x9b\x47\x13\x98\x50\xa9\x63\x12\xbb\xa5\xc0\x7a\x1a\x4b\x8e\x61\x12\xcb\x4a\x4a\x3f\x18\x4f\x07\xe3\x2b\xb6\xd6\xa3\x98\xd4\x45\x37\x56\x32\x8c\xdc\x3a\xaa\x93\xad\xd2\xe1\x67\x33\x5c\x21\xac\x07\x16\xe9\xc0\x42\x0d\xac\x83\xa2\x60\x60\x99\x5e\xa3\x91\xea\x68\x16\x71\xbc\xba\xdd\x94\xa8\x76\xd3\x37\xb3\x73\x71\x3e\x7b\x33\x9d\xd9\x84\x42\xe7\xe5\xac\x65\xd3\xd9\xb9\x29\xc2\x0e\xbd\x9f\xcf\xa6\xb0\x95\x53\xca\xa6\x00\x96\xe9\x0c\xb3\xf3\x32\xf0\x23\x3c\x9f\x2d\xa6\x33\xef\x1c\xa5\x28\x9b\xea\xe9\x59\xa5\xd0\x1d\xd2\x0d\x4d\x67\xe7\xa6\x06\x1d\xeb\xb6\x64\x23\x0a\x8e\xce\x67\x8b\x19\xc2\x29\x7b\xce\x14\x66\x07\x31\x38\x8b\xc5\x82\xa0\xfd\xa5\x33\xf8\xa6\xbe\x92\x36\xcb\x94\x75\xb5\xd2\x22\xbb\x26\x17\x31\x29\x36\x90\x1a\x74\xf8\x19\xe2\x02\xc8\xc0\xc8\x38\x16\xe2\xb0\xba\x0a\x4c\xe7\x26\xa7\x61\xa6\x3c\x3f\x77\x3e\x5c\x7a\x6b\x49\xba\xb5\x46\x35\x4d\xa0\xb6\xae\x4d\x7f\x80\x5b\x24\x89\x2b\xaf\x21\xe5\x91\x20\x38\x02\x76\x96\x3e\x35\x3b\xf2\x15\x92\x5b\xad\xd7\x89\x25\xd5\xbd\x9c\xc4\xbe\x66\x4e\x9a\xe7\x2e\xa1\x7c\x5c\xd2\x6a\x92\x4a\xc3\xf7\x5a\x6b\xe2\x22\xdf\x38\xd2\x5c\xad\x1b\xfd\xaa\x10\x51\x42\x43\x70\xf1\x8e\x9f\x94\x7b\x89\x70\xf2\x0c\x32\x96\xc0\x32\xb7\xd6\x83\x22\xb0\xd2\x72\xcc\x10\x5a\x16\x62\x11\x54\x52\x3c\x44\x3f\x4d\x9f\x41\x1d\x2b\xbe\x2e\x19\x92\x19\x9f\x1d\x27\x9e\x0b\x24\xb3\xa3\xa5\x8c\xef\xc8\xf2\xb5\x75\x15\x0c\x3d\x86\xf7\xda\x43\xed\xfd\x50\xd3\xca\xb5\x3b\x9e\x4b\x10\xa8\x27\xb4\x69\xd5\xce\x89\xef\xfa\xe3\xff\xd0\xfe\xf9\xf5\xab\x6f\x0b\x02\x6b\x3e\xb1\xb1\xc0\x0c\x49\x79\x4a\xa7\x4e\x56\xb7\xa9\x75\x7d\xae\xc3\xc3\x61\xc6\x76\x6a\xfb\x83\x67\xa6\x4c\xa9\xd0\xa1\x04\xa6\x40\x69\xd1\x4f\x07\x7a\x95\x3e\x58\x92\x20\x97\x1d\x86\xfa\x4d\xb4\xd6\x91\x64\x71\x11\x6d\xe7\x0f\x1d\x9c\x7a\xde\x0b\x08\xb1\x89\x8b\x69\x6d\xf8\x0e\x4d\x03\xb4\x3f\xa6\x43\xf0\x30\x6c\x62\x62\xff\x28\xc9\x09\x91\x0c\x58\xb8\xac\xfe\x2e\x00\xc0\x16\xed\xf1\xa9\xe1\x13\x5d\x61\x12\x5b\x93\xc1\xb5\xeb\x6b\x98\x61\x46\xaa\x34\x6f\x74\x19\x0d\x9f\x7a\x31\xe2\x7d\x07\x18\x2e\x28\xe0\xeb\x3d\x7f\x34\xe0\xb4\x3b\x22\x49\x02\x6d\xfa\x7e\x5a\x11\x3b\xd2\x39\x05\x84\x62\x45\xf6\xe6\xb3\xe5\xd9\x05\x0e\xdd\x66\xc1\x65\x29\xe1\x85\xc2\x41\x43\xbf\x8c\x38\xc0\xe7\xb1\xe3\x5e\xc6\xe3\x82\x83\x4b\x28\xb8\xfa\x90\xe9\x1c\x7f\x36\x19\xd0\xc7\x85\xb1\xd6\x89\x06\xc6\x0a\xc7\xc3\x6e\x7a\x8a\xa5\x3d\xaa\xa5\x93\x55\x5d\x87\x11\xb5\x3f\xb4\x89\x52\x2b\xe6\x34\x43\xae\x1a\xcf\x00\x88\xdd\x0c\x2d\xae\x6d\xd9\x1d\x79\x2c\x90\x98\x9c\xda\xa3\xcb\xd6\x2e\x73\x51\xbf\x27\x76\x62\x1d\x20\x83\x60\xe5\x38\x83\xe4\x91\x0e\xc0\xc5\x5f\x5f\x79\x33\xf4\xc5\x45\xb0\x9f\x26\xac\xb9\xb2\x60\x02\xea\x00\xbc\x17\x64\xb2\x22\xe8\x9e\xe8\xf4\x2d\xea\x2e\x32\xfb\x30\x02\x6a\x8e\xc9\x8a\xaf\xa3\x3d\x8e\xa3\xd2\x33\x27\x54\xc7\x27\x43\xd2\x14\x5d\x9a\xb5\xb0\xba\x05\xbd\x56\x73\xea\x6c\x2a\xdd\x9c\x82\x55\x37\xd4\xc9\xa9\x07\x5f\xf7\x82\x77\x74\x95\x5c\x7f\xcc\xcd\x1c\xa3\x51\x09\xb2\x93\xc9\xbf\xdd\xf7\x64\x34\xda\x6f\x07\xea\x12\x0f\xf3\x98\x6c\x84\x50\x32\xc2\x8f\x4d\x96\xe7\x5d\x0b\x4f\x02\x9a\x68\x0d\xa7\x69\x91\xe3\xcd\xe7\x9f\x24\x05\xb3\xe4\xd2\x3c\xa1\xb5\xfc\xe2\x8d\x74\xa1\x39\x2f\x6c\x48\x6f\x70\xe9\xfa\xb8\x1d\x63\x13\x3d\x73\x5c\xf0\x86\x58\x85\x12\x98\x9d\x7b\xe9\x93\xd5\x75\x3b\x09\xac\x2b\x65\x59\xd2\x2b\x0e\x41\x48\xff\x3b\x8d\xde\xc2\x0c\x0b\x14\x5d\xd7\x14\x74\x27\xaa\xf1\xff\xc9\x36\x76\x5e\xbe\xc1\xfc\x4a\xee\xcb\xe5\x07\x25\xd4\x49\xe8\xa8\x40\x6f\x0a\x23\xeb\x93\x31\xa3\x9a\x58\x63\x3e\x60\xd3\xba\x44\xaa\x1f\x3e\x6c\x1d\xbb\xd0\x24\xb0\x2d\xfb\x23\x04\xf6\x65\x2d\x1f\xb4\xf3\x79\x0c\x22\xcd\xa6\xcc\xe7\xad\x37\x38\xbb\x3f\x23\x7b\x91\x7a\x1e\x1b\xa2\x4d\x1d\x46\x07\x83\x51\xfb\x1d\xd7\x37\xaa\x9f\xdd\xcb\xee\xb5\xa8\x94\x78\x79\x89\x30\x0b\x2a\xc0\x93\xa8\x66\xb3\x62\x9e\x5e\x91\x20\x97\xd9\x2b\xab\xef\x3b\x23\x28\xf0\x6e\x82\xa4\xb3\xe0\x74\xe1\x98\x02\x75\x40\x94\x4c\x7e\x1b\x4e\xda\x9b\xf0\xae\xbe\x2d\x84\xc9\x0b\x1c\x04\xf9\xeb\xea\xeb\x24\x53\x67\xe1\x87\xa1\x58\xf4\xeb\xeb\x28\x1a\x3d\x08\xc4\x05\xa5\xfc\x0d\x25\x4d\x2f\xc1\xf5\x23\x4b\xd1\xfa\xd2\xb7\x19\x8b\xe6\x91\x4f\x35\x52\xab\x75\x98\x65\x0e\xc8\x02\xa4\xfc\x82\x9b\x32\x59\x33\x37\xad\x19\x4a\x9c\xf5\xb3\xed\xc5\x8a\xac\x01\x8d\x40\xcf\xa7\x16\x5d\x0d\xe9\x66\x1e\xb9\xf0\xd0\x15\xfb\x1b\x85\x0a\x7a\x2e\x84\x09\xae\xb5\x28\xb6\x44\x71\x00\x8e\x2f\x1f\xd4\xa7\x03\xe3\x3e\x22\x6e\xe7\xf8\xd0\x19\x2b\x64\x68\x0f\x7a\xec\x5a\x43\x40\x73\x0f\x68\x56\x7e\xb1\x27\x36\x9d\x19\xc3\x7c\xc5\xd6\x48\x0e\x55\xab\xcc\x8d\xff\x88\x35\x3f\x7e\x0a\x3f\xf0\x8a\x75\x37\x2d\xbf\x0f\x0c\x18\xbf\xf5\x54\x40\x6d\xa3\xeb\x9a\x65\x66\x05\x47\xf8\x1b\x62\x44\x5a\x50\xa7\x90\xda\x1c\xe2\xef\x7a\x87\x18\x73\x25\x43\xda\x7a\xeb\xc6\x32\x96\x4d\x3a\x00\xac\x61\x92\x56\xe2\x61\x1b\x87\xea\x1b\x09\x3f\x2a\x51\x4e\x92\xe4\x11\xd9\xd2\xe3\x86\x91\xce\x54\x2a\x0f\x26\xd5\x0b\x37\xd7\x53\x22\xd1\xd8\x24\x66\xbc\xc2\x99\xfa\xef\x61\x52\x22\x3b\x1f\x3e\x5a\x75\x9c\xdb\xbf\x06\x4b\x5e\xab\x67\x2e\xbe\x1b\x86\xed\xcd\x58\xcf\x50\xbd\x9b\xa1\xa0\x52\xa3\x39\xb6\x19\x9b\xb2\xfe\xca\x33\x14\x0e\x24\x71\x18\xaf\x13\x03\xdd\x7b\x37\x11\x0f\xc4\x7e\xbf\xd7\xa2\x7a\x17\x16\x9e\x4d\xe1\xae\x31\xea\xa9\xc5\x28\xf8\x08\xee\xd6\x85\xce\xee\x5e\x7c\x43\x30\x64\xe2\x72\xfa\x6b\x5d\x17\x62\xb1\x58\x04\x29\x2f\x0d\xdf\x15\x5e\xa0\x5a\x8c\xd4\xbf\x74\x51\x1b\xe7\x75\xaf\xdd\x09\xcb\xe8\xd7\xe1\xe0\x33\x2a\x40\xce\x9b\xd0\x6f\x5e\xdf\x41\xfe\x4f\xdd\x9f\x59\xca\xce\xb4\x36\x3c\x87\xc9\x6f\xc7\xc9\xb6\xa9\x20\x3c\xbe\x97\x8c\xfc\x07\x28\x36\xd6\xed\x1a\x31\x6d\x6f\xa6\xd5\xb4\x23\xfc\x3d\xe1\xd3\xbf\xef\x08\x7f\x98\x16\x37\x2d\x9f\x56\x4d\x33\xed\x31\x7a\x80\x10\x1d\x9a\xd2\x6e\x4a\xef\xef\x77\xa2\x7a\xdb\x90\xc5\xf4\x87\x56\xed\x2f\xbd\x79\x98\x9a\xb5\x76\x18\xaa\xf2\xb9\xb2\x02\x6f\x90\xd4\xfe\xb4\x1a\xc0\xa6\x26\x42\x5d\xcc\x5c\xcf\x33\x9c\x8b\x98\x89\x06\xbf\x0a\x84\xf7\xa1\x04\x02\x46\xb4\x44\x0b\x4e\xaa\xfa\x15\x6b\x1e\x0a\x84\x75\xde\xc7\xa7\xe2\x99\x9e\x9b\xd7\x2a\xa4\x66\x02\xc7\x42\x2c\xec\x27\x41\xe5\x49\xb0\x27\x86\x9e\xd3\x26\x5f\x9b\xd6\x4a\xf6\x2d\x0e\x76\xff\x66\x08\xf5\x7d\x11\xfd\x4e\x4d\x3c\xd6\x04\xdf\x60\xcb\xf2\xd9\xb3\x65\xc7\x4a\x4a\xfc\x0e\xee\x3d\xb6\x02\x44\x1a\x83\xed\xcd\x3f\xbd\x98\xed\x81\x99\x5c\x06\xb5\x82\xf3\x03\x12\x4c\x24\x76\x53\xcc\x44\x57\xdc\x50\x56\x3f\x6d\x9a\x54\xcd\x12\xa6\xcb\x97\xf8\x7a\xbb\xeb\xee\x92\x68\x92\x9e\x3c\x1c\x6e\x92\x6a\xaf\xef\x10\xd0\x8c\x62\x23\x14\x3f\xa6\x0b\xfd\x45\xd8\x09\xc4\xe4\x59\xce\x02\xc2\xae\x02\xb5\x41\x18\x98\x17\xac\x43\x94\xfd\x20\xb2\x45\x65\xd7\xab\x33\x63\xe9\xe4\x6f\x33\xd4\xab\x49\x63\x32\x56\x65\x47\x32\x90\x0c\x9e\x7b\xf6\xf6\xb5\xf3\x5c\xb7\x0e\x66\x02\xa0\x58\xd3\xae\x6b\x37\xb4\x12\xa0\x5a\x78\xf5\x81\xe9\xaf\x9d\x22\x2e\x66\x96\x33\x61\x98\x24\xc9\xe3\xa0\x2d\xe9\x5a\xc4\x31\xda\x39\x35\xce\x8e\x71\x72\x4b\x3b\x41\xb8\x1a\xc7\x68\xf3\xec\x20\xf7\x46\xb9\xe7\x1b\x05\x6b\x30\x9d\x40\x3a\xb3\x34\xca\x6a\xa0\x57\x1b\x3d\x3b\xb8\xb6\x9e\x26\x30\x91\x61\xd2\xd7\xe6\xf2\xc4\x17\xee\x2e\xe8\x13\x74\x89\xaf\x47\xdd\x69\xbe\xb3\xe2\xaa\x03\xab\xba\x74\x61\x8b\x25\x4e\xae\x9c\xbc\x5e\x25\x44\x45\x57\xe8\xa6\x57\x26\x5d\x4a\x84\x9f\x91\xf2\x29\xb1\xb7\x51\x74\x15\x65\x2e\x9c\x78\x8b\x6d\xb5\xee\xa7\xc1\xc5\x37\x74\x7b\x01\xf9\x2f\xfd\x9f\xe1\x1d\xa3\x6b\xa4\xf9\x3f\x4d\x91\xb6\x5f\x7e\xc9\xb4\xac\x7f\xbf\x24\x37\xcb\x1b\x14\x12\x16\x7d\x28\x53\x10\x02\x89\x51\x6c\x50\xef\x0d\x8c\xe3\x4f\x0c\x59\x5c\xc3\x93\x94\x0c\x69\x2e\x49\x8d\xd4\x11\x91\x52\x0f\x27\x04\x26\xe7\xa6\x23\xc2\x93\x0d\x77\xf5\xc7\xca\xcf\x30\xfb\xa6\x25\xa8\xcb\xb3\x4b\x1d\x1c\x12\xc5\xdd\xef\x25\xb6\x95\xe9\x74\xb4\x48\xff\x2d\x3c\x77\x76\x0f\x7b\xc0\xae\x2b\x7b\x22\x7e\xa2\xe2\x2e\x3c\x64\x26\x89\x8d\xd3\xd7\x06\x09\x6a\xad\x75\x93\xef\xd8\xa2\x65\x56\xeb\x32\x33\x96\xb1\x19\x0e\x12\x67\x4b\x84\xdf\x91\x6c\x60\xa6\xe1\xb7\xbf\x27\x63\x55\x96\x03\x1d\x4b\xe2\x9a\x7a\xd9\x0b\xf8\xf3\x01\x82\x0d\x7d\x1f\x29\x6b\x47\x52\x70\x99\x44\x53\x23\x2d\x0c\xaf\xfb\x5d\xbb\xdd\x41\x65\xaa\xa8\xe3\xd5\x5a\xa6\xf6\x07\x6f\x73\x88\x2b\xa8\x9e\x91\x63\x69\xad\x74\x96\xe1\x23\x99\xaf\x2e\x22\x87\x42\xd3\x7a\x72\x59\x96\x65\xc1\x41\xe1\xb4\x12\xeb\xc3\x61\xb5\x46\xde\x6a\xfa\x8e\x04\x41\xb0\x15\xb0\x48\xa6\xf2\x85\x59\xe2\x0d\x8c\x2e\xa5\xfe\xe3\x3b\xdd\x67\x8c\xc8\x2f\x5a\xfe\x8d\xe3\xc0\xe3\xd2\x02\xe5\x6a\x8d\x59\x79\xf1\x84\xf9\x02\xde\xce\xca\x49\x4b\xb1\x62\xeb\x09\x3d\x25\xa3\x17\x5d\x0c\xe7\xc4\x71\x26\x7e\x9f\x61\x23\xbb\xd3\x2b\xb2\x9e\xb4\xf3\xb9\x77\x8d\xc8\xcc\x74\xb5\xc6\xb4\xbc\x78\x42\xfd\x74\xa9\x37\xca\x42\x16\x6f\x28\x82\x3b\x38\x17\x28\x8e\x1b\xdf\x70\xd5\xe1\xd0\x86\x99\x7a\xf4\x81\x21\xe8\x70\x28\xcc\xbc\x5b\x84\x41\x43\x0d\x66\x9d\x0a\x3c\xdb\xfd\x73\x73\x37\x12\x84\x24\x0f\x1c\x44\x14\x36\xf4\x59\x1a\x8e\x26\x2c\x6e\x94\x65\x5b\x18\x92\x45\x0b\x7e\x76\x41\xe3\xd0\x65\x64\xa4\xce\xfc\x73\x52\x90\x95\x58\x23\x59\x70\x64\x90\x22\x51\x96\x58\xbc\x73\x9d\xe8\x62\xc2\xc7\x4e\x14\x41\x01\xc2\x1d\xc7\x33\x81\xf5\x34\xae\xbb\x07\xb6\xf9\x3a\xde\xea\xbe\x06\xc1\x0c\xbc\x12\x6a\x93\xb5\xdc\x46\x3b\xdd\x96\x23\x4c\xcb\x33\x76\x38\x5c\x80\x3e\x53\x2f\x15\xb7\x65\xec\x54\x1e\x16\x62\x15\x08\x57\xc1\x7d\xd0\xba\x1b\x1f\x95\x65\x64\x0a\x77\xcf\x75\xf0\xe1\xe1\x70\x56\xa1\x3d\x73\x7e\x5f\x27\xaf\x94\x27\xbe\xf0\x7e\x35\xc8\x41\xd9\x8a\xa6\xef\x69\x47\xdf\x36\xc9\x8e\x7f\xa9\x33\xf4\x08\x84\x1b\x85\xe2\xbb\xf2\xe2\xc9\xce\x27\x8b\xd9\x59\x14\xdf\x94\xdd\x6a\xb7\xc6\x75\xb9\x49\x70\xf8\x4c\xd1\x90\xda\x20\xee\x7c\x5e\xd4\x06\x5d\x71\xa3\x31\x75\x83\x90\x6c\x4c\x77\x43\xb8\xd9\x28\x22\xe2\xf2\xad\x2a\x8e\x3d\x71\x5f\xcc\x9d\x57\x11\x39\xcb\xe0\x9e\xf0\x90\x7c\x63\x9c\xf2\x8f\xf5\x0a\xfe\x7b\x86\x5b\xc9\x60\x8f\xc0\x61\x04\x14\x3f\x01\xb0\x04\x4d\xcc\x78\x61\xfa\x35\x8b\x8b\x1c\x0d\xdc\x3d\xe0\xe2\xe7\xfd\xb5\x8f\x0c\x11\x9c\xca\x61\xdc\x24\xc8\xe4\xcb\xe9\xf0\x29\xc4\x17\x36\xf6\x54\xe2\xea\xac\x15\xb9\x45\xba\x03\xf7\xd4\x87\xbd\xfa\x48\x6b\xe2\x22\xdf\x2c\xbf\x28\xe0\x22\xc2\xbd\xc8\xd8\x90\xb3\x31\x8c\x08\xbc\xf6\x72\x62\x7c\x7c\x05\x9a\xcf\xbf\x35\x87\xc4\xce\xec\xe9\xf0\xb5\xec\xe3\xf4\x01\x0a\xf9\x3e\x39\xba\xfa\x96\x14\x1c\xd3\xf2\x59\x7e\x31\xc0\xea\x2d\x45\x6f\x51\x3c\xb3\xa0\x70\x11\xf8\x91\x7c\x1b\x1b\xe5\xdb\x98\xe3\xdb\xd0\xf2\xd1\x53\x3d\x32\x53\x79\x0a\x8b\x63\x31\x03\x53\x99\x17\xc6\x06\xf9\x9d\xf8\x12\xb6\xc5\x62\x29\xab\xc9\xcf\xaf\xd4\xe1\x54\x8d\x3e\xbb\x3c\x2b\x4b\xee\x8b\xff\x75\x5b\x08\x52\xe6\xf8\x12\xe1\xb3\x8b\x89\xcb\x29\x57\x1c\x9f\x28\x26\x28\xbe\x0f\x7a\x27\x51\xac\x27\x7c\x3e\x27\x25\x78\xaf\x45\xc4\x36\xd3\x54\xca\x51\xd6\x18\xed\xbf\x35\xb1\x42\xb1\x14\xda\x8f\x97\x4a\xfb\x8e\x44\xe6\x41\x9a\xe1\x43\xa4\x4e\xda\x24\xdb\xe5\xdf\x48\x3f\x2b\x47\x79\x76\x71\x2c\xca\xeb\x18\x87\x18\xac\x31\x2c\x25\xf8\x37\x53\x87\xc8\x47\x93\xb9\x57\xcf\x23\x46\x38\xd1\x07\xb8\xe9\x7a\x95\x1d\x14\x24\xcc\x73\x32\xe0\xed\xac\xc0\xe0\x12\x2e\xb9\x51\xbe\xed\xf1\xa2\x17\x98\x79\x87\x3b\xfe\x39\x7b\xc2\x15\x35\x24\x2b\xbe\x8e\x27\x01\x97\x9b\x08\x17\xf3\x32\x30\xca\xe2\x56\xcf\xdd\xb2\x00\x4f\x0b\x3a\x28\x5f\xb7\xa6\x62\x33\x42\x8a\x33\x14\x41\x98\xbf\xba\x89\xb5\xee\x4a\x97\xff\xc4\x1d\x66\xb8\x42\x78\x57\xbe\x79\xfe\x7a\x39\xfd\x93\xf6\xd2\x34\x84\xec\x5f\x6c\x3b\x25\xe9\x7e\xfa\xc9\x9e\xcb\x4f\xdf\xa8\x13\xe2\x62\xa5\x1b\x94\x8a\xc7\x33\x83\x12\x6e\x08\xa3\xef\x21\xf5\x74\xc7\x74\x09\xf1\x1a\x03\x86\x4f\x3f\x54\xdd\xf4\xbd\x12\x9a\x1b\xfa\x8e\x34\x0f\xd3\x6a\x7a\x4f\x3b\x51\xbd\x23\x4e\xba\x2d\x9a\xf2\xcb\xa2\xc1\x02\xef\x50\x52\xff\x96\x95\x7f\x2a\xc4\xa2\xb3\x49\x7a\xb8\x59\x9b\x5a\x8e\x89\x8a\x9c\xd9\x09\x04\xc6\x53\xcd\x1f\x28\x36\x34\x50\x50\x7d\xf5\xb3\xe0\xd5\x46\x4c\xb7\xd5\x83\x4f\xa8\xc4\x83\x0d\xfd\x9a\x24\xc4\xbb\x8c\xa9\x48\x96\x94\x13\x74\xa5\xcd\xc0\x02\x2d\x75\xed\x6c\x5d\x77\x1a\x0b\xbd\x82\x3d\xad\x97\x54\xab\x8f\x5b\x59\xba\xfa\xdb\x61\xcf\x6e\xc4\xb8\x2d\x99\x90\x9e\xcf\x22\xe9\xfb\x2c\x2a\x91\x6c\x1f\x3d\x5d\x56\xb2\x24\xb8\x2b\xfb\x63\xa4\x83\xef\xb5\xe1\xeb\x27\x5e\x6d\xb7\x84\x2f\x89\x0c\x27\x03\x91\x5f\x54\x96\x1c\x07\xf4\x5e\xad\x01\x57\x40\x4a\x6d\x00\x62\x64\xe5\x6b\x31\x05\xda\xaa\x53\xc7\xee\xe1\xd2\xd9\xbf\xa3\xac\x5e\x76\x52\x96\xc9\xf4\x63\x0b\x1b\x43\xab\xca\x26\x44\xd8\x9b\xee\xff\x42\x1e\x96\x15\xb6\xdf\x4b\xb7\x12\x59\x70\x2c\x30\x33\x81\xfa\x9d\x81\x9e\xff\xa6\xd1\xdf\xec\x64\xd9\xe1\x4d\x59\xad\x9a\xf5\x7c\xae\xfe\x85\xad\x99\x84\x8e\x15\xbb\xf9\xdc\x61\xf9\xe6\x70\x28\x54\x2b\xf8\x00\x82\xcd\xdc\x37\x31\x30\xd5\x46\xf1\x20\xcf\x0b\x93\x06\x63\x70\x5b\xea\x77\xb0\x89\x4c\x46\x43\x89\xab\x82\x96\x24\x90\x8f\x5b\xb4\xd4\x4f\xf6\x12\x47\x77\xaf\xa2\x01\x0e\x9b\xa9\x2c\x36\x78\x87\x05\x42\x52\x42\x9d\x2a\x82\x19\xc2\x11\xae\x48\x64\x07\x5e\xd0\x5a\x3f\xe4\x81\x8e\x28\xc6\x8e\xfd\x8a\xa9\x2b\x62\xbd\xd4\xbb\x23\xc2\x3c\x1f\x46\x53\x83\xc1\x5d\x94\x4a\x29\x07\x78\x22\x6b\x66\xab\x11\x78\xbc\xda\x5f\x3a\xe9\xac\xfb\xe9\xa4\x4c\xe1\x0f\xd9\x8b\xde\x21\x8b\xa9\x56\x5b\x8a\xc5\x96\x90\x77\x8a\x7f\xe7\x08\xa4\xe1\x54\x91\xc9\x14\xad\xcb\x28\xad\x6d\xb5\xe0\x40\x47\x1d\x68\xef\x31\xd5\xb4\xa0\x72\x90\x2d\xba\xf2\xcb\xa2\xc3\x42\x93\x87\x0c\x45\x7c\xda\x34\x9a\x4a\xd0\x93\xc9\x12\x8d\xc8\xd2\xd3\xa6\xc9\x51\x25\x2c\x16\xb1\xa0\xa2\xd6\x7d\x84\x54\xd9\xf9\x7c\xe2\x0f\xa3\x34\xd5\x70\xff\x41\xf0\x8f\xa4\xac\x8a\xd9\xf3\xaf\xbe\xfc\xf1\xdf\x3f\x13\xdd\x67\x6f\x79\xc5\xea\xb0\x84\xc4\x97\x91\xdb\x8a\x29\x5f\xf0\xa7\xbc\xf6\x2b\xf2\x17\x59\xfd\x48\xd6\xb1\xbd\x57\x5d\xc7\x7a\xe6\x2e\x9c\xa8\xcb\x16\x14\x70\xaf\x75\xeb\xee\x84\x6e\xd2\x14\xec\xbd\x2e\x56\x6b\x93\xb4\xdc\x3a\xac\x81\xff\x90\xd7\x50\x3f\x14\xc1\x12\x90\xbc\x56\xa7\xcf\x22\x57\x1a\x8f\x6c\x6c\xfe\x71\x13\xe9\x12\x7c\x25\x63\xbb\x30\xe0\x62\x7c\x86\xa3\x6f\x43\xdd\x18\x16\x8a\xcb\x74\x36\xe1\x1c\x3c\xec\x86\xe4\x61\x15\x2b\xe3\xcc\x6a\x02\x15\x27\x5f\xfc\xad\xa5\xfa\x18\xec\xc3\x4c\x74\x4a\x22\x8d\x3c\xf3\xfb\xea\xb8\xef\xf2\xd3\x07\xf7\x85\x8c\x1b\x62\x14\x0d\xf2\xca\xfc\xc4\xb4\x8c\x77\x63\x34\xaf\x17\x43\x5e\x23\x62\xdb\x2b\x32\x50\x50\x34\x69\xe7\xf3\x76\x91\xf3\x7e\x94\xa3\xb3\x35\xf5\x4a\x2e\x8f\x80\x38\xa3\x59\x4a\x7b\x9a\x1c\x43\xca\x71\x9c\x9e\xf4\xe4\x6a\xb3\x42\xcc\xcb\x8b\x27\xdc\xab\xbf\xf8\x79\xf9\x7b\x0b\x46\xc5\x35\x62\xaa\xfe\x3b\xbf\x5c\x3b\xaa\x58\xb0\x08\x1c\x71\xa0\x29\x45\x52\xca\x21\x6f\x9e\x01\xec\x1f\x6e\x2e\x47\xae\xea\x81\xce\x46\xbf\x90\x03\x1c\x43\x4f\x95\x96\xd8\xc8\x49\x6c\xbf\x1d\x1d\x63\x25\xd6\x2e\x53\xd6\x5f\x48\x84\x7e\x98\xbb\x19\x98\xdc\x53\xff\xac\x89\xd8\x94\x5d\xc9\x64\xf2\xa1\xa3\xf1\xd5\xe8\xce\x52\xfb\x98\xb3\x44\xd5\xb5\x99\x3b\x4b\x2d\x9a\x54\xf3\x79\x95\xf7\xe0\x67\x03\xd1\xcb\x1f\x67\x46\xe6\x08\x0d\x11\xd7\x16\xbb\xe1\x33\x71\xca\xff\x34\x90\xa4\x63\xbb\x49\x45\x81\xae\xff\xc4\x09\x85\xe3\x32\x24\xbd\xb3\x73\x9a\xbf\x09\x53\x45\x68\xe8\x4d\x21\x0e\x07\x6e\xed\x09\x76\x6a\x13\xf6\x98\xa9\xb5\x48\x92\xa6\x23\x53\xaa\x84\x73\x66\x0a\x7c\x10\x39\xc9\x9c\xf8\x78\x3e\x0c\x53\x88\x7d\x71\x81\x29\x66\x82\xe1\x17\xfd\xd7\x49\xca\xfe\xdf\xf8\x2e\xb1\x79\x27\x80\x88\x26\xc5\x02\x64\x4d\xbb\x4d\xcb\x18\xd9\xb8\x14\xf2\xff\x84\x8b\x6d\x20\xa7\x8e\xf6\xea\xfa\x2b\xc1\x9f\x10\xfc\xf7\xbc\x11\x13\xef\xbf\xfa\xf6\xaf\xcb\x9f\x88\xd4\x6f\x8d\x4d\xf3\xdf\xc9\x54\x5b\xda\x3b\x63\xaf\x7f\x4d\xf8\x7b\xba\x89\x79\x3d\xb4\x1f\xb4\xa2\x07\x2c\x44\xf9\xce\x7a\x95\xa7\x76\x33\x70\xda\xfd\x3e\x4a\x3c\xe8\x14\x7a\x80\xb9\x74\x03\xc4\xd1\x36\x8f\x58\x3f\xa3\x39\x38\x56\xa0\xc8\x73\xd7\x47\x5b\x06\x42\x2c\xcc\xec\x4f\x71\x76\x1e\x73\x71\xbf\xae\xde\x13\x7f\x59\x9b\x82\x95\x11\x27\xd4\x7b\x1b\x6b\x83\xfc\x6b\xd3\xe3\x0b\x22\x36\x77\xd6\x81\xd9\x32\x50\xea\x59\x76\xdd\x8a\xf8\xdd\x57\xfe\xaa\x30\x1b\x93\xf8\x6c\xf2\x6a\xf3\x8e\xd4\x4f\x35\x97\xf6\xf7\x1d\xe9\x12\x77\xcf\x0e\x5c\xf0\x9f\x76\x1d\xe1\xe2\x1b\x22\xee\xda\xfa\x59\xd5\x34\xdd\x2b\xe6\x74\x6e\xaf\x81\x7f\x77\x9e\x77\xd0\xfe\x07\xd5\x6d\xdc\xa9\x6d\x70\x4b\x18\xe1\x4a\xbe\x12\xd5\xe6\x9d\x6a\x47\xba\x17\x2d\xff\x41\xcf\xa3\xd7\x5a\x4f\x30\xec\xe9\xb5\xa8\xb8\xc8\x2c\x22\x6c\xf3\x15\x4b\x4b\x97\x41\x3a\xbe\x9f\x2a\x2a\x1c\x94\x74\xe9\x06\xdb\xa5\x20\x06\x3c\x05\xda\x9f\xc2\xf3\x23\x79\x4d\x59\x27\x2a\x26\xa8\x0f\xd8\x0f\x02\x1d\xa4\x0b\x04\x7c\xde\xab\x8c\x1a\xe7\x3c\x97\xc3\x4c\x51\x98\x53\xe8\xca\x3a\x56\xbc\xce\x6f\x6b\x81\x16\x83\x9e\xd5\x26\x82\xf2\x17\x7d\xac\x64\x94\x31\xde\xe3\x91\x73\x1c\x73\x79\x3e\x65\x9a\xe3\x3c\x9f\xd5\xd9\x0f\x7d\xef\x65\xce\x81\xb3\x01\x8e\xbc\x83\xa3\xef\x65\x36\x79\x9a\x21\xdb\x83\xd9\xd0\xfa\xec\x1a\x5f\xcb\xfb\xbe\x9c\x98\x33\x22\xbc\x26\x46\xe5\x3a\x71\x6a\x23\x0e\xb1\x39\x39\xf2\xf4\x9a\x98\x10\x04\x6e\x12\xbf\x31\x70\x91\xb0\x57\xa9\xeb\x81\xcd\xe7\x85\x7e\x05\xc4\xe4\x07\x2d\x6d\x22\xcc\xa4\x49\xbc\x39\x2e\xca\x8e\x6e\x50\xdd\x92\xee\x87\x87\x2d\xf9\xea\x67\xda\x81\x82\x32\x34\xae\x45\xe8\xf2\x77\xe2\x25\xc6\xf4\x2a\x08\x64\x49\x0d\x87\x56\x27\xc3\xed\xb9\xfa\xd8\xfc\x15\xb4\xfb\xb6\x65\xa4\xa0\x0b\x5a\xa3\xf9\x1c\xfe\x37\x6c\xb5\xa5\x37\x2f\xeb\x82\x63\x8a\x10\x86\x77\x4c\x37\x9d\x68\xcd\xb7\xbe\x30\xd1\xe2\xed\x8e\x36\x75\xa1\x59\x10\x8e\x69\xbd\x54\x8d\xbc\xa5\xae\x5a\x84\x79\x9c\xb0\x0e\xaa\x8c\x32\x76\xe0\x2a\x70\x7b\xa5\x90\x36\x3e\x9c\x40\xca\xf3\x9b\xab\x29\x66\xf7\x21\xc7\x83\xff\x08\xe4\x06\xd5\xdf\x55\xf6\xa9\xcb\x98\x6d\xdc\x79\xfb\x85\x98\x13\x72\x93\x96\x5c\x26\x49\xfd\x06\x79\x43\x59\x9d\xc3\x69\xf5\x3c\xd8\x46\x19\xff\xf6\x8c\x4b\xab\x33\x70\xd0\x42\x20\xdc\x95\xaf\x0a\xb0\x03\x34\x0e\xc6\x4d\xdb\xbe\xdb\x6d\x8b\xce\xaf\xb7\xe4\x3e\xd3\x96\x0b\x96\x7d\xd1\xf2\x97\x35\x7c\x7b\xf5\xd4\xfa\x17\xf8\x01\x1b\xc5\x18\x81\x65\x01\x6e\x9f\x7f\xf1\xaf\xa6\x9f\xec\x99\xd4\x39\x1a\x68\xbd\x9c\x7e\xb2\x17\xf2\x8d\x8d\x20\x87\x34\x86\x0f\x71\x1a\x05\xd5\x93\xbc\x4e\xd6\x06\xb9\x13\x16\xda\xe3\x36\xf6\x48\xb6\x12\x05\x5c\xc5\x61\xd2\xb3\x9e\xad\x44\xb8\x44\xb2\xe1\x2e\x67\x42\x6a\xdc\xb1\xb4\x23\x42\x92\x53\xb8\x46\xbf\x0f\xea\x28\xe4\x9f\x9a\xea\x15\xe8\x6a\x68\x7a\xcb\x02\x6c\xe2\x02\x18\xb9\x5b\xde\xee\x98\xf9\x1e\x34\xa9\xfd\x87\x67\x76\x94\x2f\x93\x57\x7a\xbc\xc3\x61\xfc\xbd\x9d\x8f\xcb\x21\xd6\x9f\x11\x1e\xd1\xa5\x12\x64\x13\xd1\x27\xdb\x44\xb0\x80\xc8\x14\xa7\xdc\xdc\x5a\x58\x91\x45\x98\xe6\xc1\xbd\x40\x38\x44\x1b\xf0\x56\xea\xf5\x38\x8c\x42\x24\x74\xe3\x0f\x90\x89\x28\x7a\xf0\xc6\xcc\x71\xa0\x53\x1f\xae\xe7\xbc\xa4\x86\x77\x87\x84\x29\xd2\xae\x92\xca\xfb\xcb\x51\x48\x49\x03\xa7\xba\x4b\x0d\x83\x8a\xa8\x5b\xcd\xb9\xd6\xf5\x28\x5c\x34\x24\xb4\xe7\x0d\xc6\x57\xd4\xa4\x9d\x08\x4e\x01\xc3\x62\x45\xd7\x0e\x47\xbf\x2b\x82\xa9\x54\xa0\x42\xd6\x1a\x6a\x63\x33\xd4\xca\xe4\x04\x9a\x30\xb7\x69\x7b\xa3\x8f\xa4\x2d\xc2\xf1\x06\xb6\x58\x41\x20\x3c\x70\xf6\x10\x79\xb3\xfa\x80\xe5\x2a\x34\x58\xd2\x9e\x7d\x12\x85\xc6\xa3\x4e\x96\x14\x37\x8f\x52\xdd\x5b\x24\x86\x91\x2a\x34\x66\xbf\x34\xb8\xa2\x2d\x98\x9d\xfc\xd4\xa3\xc9\xa7\x6a\xbd\x9f\xbe\xc1\x7b\xcf\x43\x2e\x37\xb2\xa4\x47\xad\x8f\x34\xa3\xe6\x57\x52\x85\x36\xc2\x68\x1d\xbf\x2d\x29\xe2\xcc\x35\x60\x2f\x5a\x34\xb4\x2e\x37\xba\x46\xa9\xd1\xfb\x53\x24\xb1\xce\x4f\xca\xdb\x0f\x53\xba\xf0\xd9\x05\xc1\xfb\xd0\x60\xe6\x7c\x4e\xd3\xfa\x3d\x44\xea\x8d\xcc\x58\x05\xf4\x4a\xdf\x20\xe3\xa3\x10\x10\x36\xe3\x13\x84\x89\xae\xc5\xa9\xce\x09\xd6\x65\x25\x22\xa4\xf7\x39\x37\x73\xd8\x4a\x02\x6c\xbd\x78\xc2\xbc\xa6\xd2\x66\x27\x2a\xb3\xe7\x68\xc5\xd6\x41\x36\xda\x81\xf0\x02\x9e\x4e\xe5\x87\x3b\xde\xee\x6e\xef\x5e\x04\xf2\x93\xa3\x32\xc1\x15\x7d\x92\xb8\x32\x21\x8b\x30\x17\xa4\x65\xbe\x48\x10\xea\xde\xc7\x67\xa4\xa9\x09\x18\x68\x7a\xa2\xdc\x22\x5e\x23\x83\x0b\xd6\xa5\x51\xdf\x6b\xa3\xef\x7c\x7e\x96\x1a\xca\xa0\x5c\xc5\x7c\x6e\xfe\x02\xb4\x60\xea\xdf\x38\x37\x27\x20\x88\x08\x39\x8e\xb3\x9e\xc7\x90\xb6\xcf\x3a\x04\x22\x21\x02\x91\x10\x81\x52\x06\x02\x0b\x99\xc2\xda\x5d\xaa\x09\x81\xf3\xce\x30\xd1\xe3\x89\x31\x4e\xc7\x36\xcf\x92\x38\x06\x30\xa8\xef\xf4\x06\x06\xa0\xec\x16\xa8\xcc\xa7\x21\xb1\xe6\xf2\x8d\x36\x54\xc6\x29\x59\xb0\x39\xfd\x7c\x49\x5d\x3d\x22\x21\xa1\x2e\x87\x99\x44\xb2\x9d\x15\xc2\x17\x2e\x61\x53\x28\x8a\x2f\x3a\xfa\x0f\x32\x9f\xff\xfd\x88\x47\x09\x58\x0d\x9e\x36\xcd\x77\xc1\xa7\xa4\x43\x61\x7a\xf6\xa8\x5b\xdc\x94\xda\x85\x9e\xf5\x79\x84\x66\x3e\x2f\xc0\xe7\x51\x07\x33\x30\xdc\x20\xe7\xb5\xd8\x22\x5c\xc9\xfc\x60\xd9\x7a\x45\x3d\xf7\x18\x17\x1f\x18\x2d\xd2\x3a\xb0\xf4\x0d\x36\xf0\x5e\x9d\x06\x5b\x61\x19\x65\xf4\x15\xd6\x93\x25\x31\x9f\x84\xdf\xa6\x14\x01\x40\xc7\x7c\xec\xa5\x71\x52\xa5\x50\xb9\xc2\xfa\x5f\x28\x7e\x68\xd3\x56\x0d\xe9\x36\xe4\x05\x10\x46\x7d\x16\x71\xeb\x9c\x62\x70\x15\x10\x97\x16\xe1\xbc\x73\x7c\x13\x86\xb7\x1b\x5f\xd2\x36\x74\x22\x25\xd6\x89\x34\x42\xa4\x49\xb5\xda\xad\xcb\x1a\x43\xda\xb7\xa2\xc6\x1b\x9b\xfa\x1f\xe1\x6e\x55\x2f\x68\xbd\x2e\x37\xde\x0e\x7d\xe7\x5d\x84\xf8\x22\xbe\xfe\xe2\x6e\x31\x71\xfd\x4c\xdc\x45\xc5\xdd\x8d\x25\x02\x07\x92\x9b\x14\x6e\xb9\xd5\x1d\xcf\xcb\x85\xab\xb2\x5b\xb5\x6a\xc2\x90\xe7\x4b\xff\x59\xb6\xb8\x42\x55\x7f\xfc\x16\x49\x3b\x9e\x75\xbd\xc5\x1b\x9f\xd1\x6d\xf7\xf9\xc6\x43\xae\x2e\xc5\x6a\xb7\x9e\x70\x0d\x8d\xc3\xc1\xa0\x69\x1d\xfa\xd6\x6e\x8b\x26\x58\xd1\xf6\x34\x17\x27\x7d\x57\x82\xc9\xaa\x2d\xbb\x15\x85\xb9\x83\x76\x33\x98\xaf\x02\x45\x21\x0e\x87\x20\xc4\xe6\xab\x9f\xb7\x90\xa8\x03\xae\x68\xaa\x73\x24\xbf\x25\xd3\x2d\x27\x1d\x61\xc6\xad\x9b\x4c\x0d\xd2\x4d\xb7\xbc\x7d\x4f\xeb\xff\x8f\xbd\x37\x6f\x6f\x1b\xb7\x16\xc6\xff\xf7\xa7\x90\xf8\xce\xa3\x12\xaf\x21\xc5\x4e\x66\xbb\xca\x30\x9e\x6c\xd3\xe6\xed\x64\x92\x9b\xa4\x4b\xae\xaa\x9f\x87\x16\x21\x09\x0d\x05\xaa\x20\x64\xc7\x23\xf1\xbb\xff\x1e\x1c\xec\x24\xb5\xd8\x4e\x66\xda\xde\xb6\xf3\xc4\x22\x76\x1c\x00\x07\xe7\x1c\x9c\x85\x64\xe6\x02\xc4\x9d\x8b\x95\xe8\x50\x01\x0a\x46\xac\x10\x9d\xa9\xc4\x86\x03\x49\xcf\x54\x74\x1a\x53\x37\xee\x05\xbe\x0c\x37\xde\x2c\x39\x79\x38\xfb\xae\x78\x38\x3b\x3e\x46\x97\xa3\xd9\x38\x49\x47\xb3\x71\x9d\x78\xc9\xe1\xcc\xbf\x45\x4e\x07\xfa\x22\x39\xc1\xd7\x49\xbc\x48\xd8\x40\x52\xda\x4b\x6d\xc1\xf5\x43\xc1\x7f\xd0\x87\xe0\x6c\x6b\x8e\x22\xc4\x2f\xd1\x70\x74\x39\x46\x06\x82\x17\xdf\x5d\x3f\xbc\x90\x10\x34\x3d\x9c\x27\x8b\xd1\xc5\x18\x5f\xc1\x1f\x73\x6a\x9e\x7b\x83\xbf\x42\xf8\x63\xf8\xf9\x2a\x39\x79\xf8\xea\xbb\xab\x87\xaf\xcc\x4a\xbc\x4d\xce\x47\xaf\xc6\x35\xcf\x57\x47\x1f\x47\xaf\xc6\xc9\x5b\xfc\x1c\xfe\xc8\x7b\x8e\x4e\xe3\xab\x47\xa7\x28\x08\xe1\xf6\x82\xc4\x0c\x73\x2c\xf0\x73\x4c\x70\xde\x88\x06\x27\xb7\x02\x68\x2f\x57\x08\x0d\x26\xa9\xa8\x6b\xd1\xe9\xc8\x55\x08\x55\x28\xfe\xa8\x54\x9c\x3b\x74\x1a\x4b\x7e\xe7\xb9\x21\x25\xd6\xf3\xb8\x1c\x7d\x1c\x9d\x8c\xe5\x26\x41\x55\xa5\x1e\x1b\xcc\xfc\xdf\x25\x27\x0f\xdf\x7d\x57\x3c\x7c\x77\x7c\x8c\x24\x25\xf1\x6e\x8c\x94\x5c\xd0\x04\xcb\xf6\x88\xd3\x57\xb1\xa2\xa0\x63\xe1\x94\x65\x6a\x4c\x2d\x47\x83\x7a\x00\xec\x25\x21\x1f\x9a\x84\xae\x0e\x49\x45\xb5\x6a\x68\x1b\xeb\x0b\xee\xde\x34\xa1\xfb\x0a\xbe\xb6\x74\x9a\x86\x41\x8a\x3c\x0b\x70\x10\x57\x79\xcc\xbe\xee\xbf\xed\x6a\x3d\xaa\x13\x74\xac\x66\xc7\xda\xbc\xcf\xab\xda\x80\xbd\xe9\x29\x09\x8a\x02\x57\x36\x94\xb3\xac\xb0\x79\x14\x52\xef\x11\xcd\x48\x5b\x48\x62\xeb\x5e\xef\xf7\x5e\x21\x37\x88\x6e\x17\x5e\xa9\x5c\xe0\x62\xfd\x36\xd5\xe8\xf9\x55\x4c\xf6\xad\x90\x0f\x2c\xab\xb0\x78\x67\x9a\x74\x1b\x43\x78\x28\x71\xea\x05\xe0\xd9\xae\x40\xd7\xc2\x03\xf1\x16\x1e\x28\x50\xcd\xa4\x3a\x02\x53\x0e\x46\x21\x0d\x87\x77\xec\x8c\x0d\xd9\x60\xce\xc9\x14\xaf\xb4\x06\xa7\x19\x86\xc0\x29\xce\x31\x45\x78\xb2\x95\x09\xd2\x45\x8d\x1e\xa7\xc7\x35\xff\xae\xa3\xb0\xac\x0a\x49\xf6\xbb\x9f\x0d\xf3\xb3\x4a\x7e\x89\x57\xc9\x93\x78\x85\x05\x9e\x20\xfc\x43\xfc\x27\xcc\xd1\x21\xfa\x4e\x66\x1e\x75\x5d\x4c\x3d\x04\xc7\x11\xb1\xe4\x47\xa2\x5c\x60\xc8\xb1\x37\x94\x33\x77\xf0\x36\xf5\xf1\x6b\x65\xba\x60\x1e\x2d\xbc\x0f\x09\x7c\xd3\x68\x71\x9c\xd2\x1b\xdc\x1d\x57\xc9\xae\x73\xe0\xc0\xc7\xdb\x23\xe6\xd6\x1d\x8d\x83\x40\x1e\x3e\xdf\xa5\xa1\x12\xa8\x64\x6a\x67\x42\xc3\x02\xcf\xd3\x20\xb4\x20\xc9\xb4\xab\xcc\x61\x2a\xb3\x1e\xb3\x6b\xff\x3d\x0a\xa2\x73\x95\x38\x6c\x09\xf6\xf4\x30\xc7\x65\xdd\x15\xd3\x70\x55\xd5\x5d\x2c\xe1\x49\xf2\x47\x13\xbb\x09\x29\x1f\x44\xa0\xdf\x07\xbe\x80\xe5\x0f\x25\xbe\x27\x59\xaf\x17\xb7\x38\x13\xa5\xfe\xee\xdb\x6c\x2c\xcd\x4b\x2c\x57\xb3\xda\x6c\xd2\xcd\xa6\xd8\x6c\xba\x93\x5e\xaf\x9b\x87\xde\x02\xc2\xad\x5b\xeb\x11\xe0\x7c\xa4\xa8\x92\x52\xd6\xc5\xf3\x24\xdd\x6c\xf2\x5e\xaf\xa6\x5f\x6b\xfa\x22\x9a\x81\xd2\xf6\x64\xa0\xe5\xbf\xea\xf5\xba\x45\xaf\x17\x67\x9b\xcd\x5c\xe3\xe6\xa9\x1e\x5d\xe8\xd7\x72\x6b\x40\x39\x82\x42\xb4\x6a\xf1\xcf\x54\xee\x16\x3a\x8d\x61\x6c\xb2\x79\x68\x7d\x79\xb7\xd6\x5b\x78\xef\x25\x66\xf6\x8a\x68\xdf\x68\xd5\xce\x00\x72\x96\x8a\x1d\x8d\xbd\xc8\xf6\x44\xb3\xa3\xb1\xb8\xf1\x80\x41\x5b\x73\x67\xe4\xc9\x5f\x19\xfb\xb9\x81\x1c\x80\xff\x6c\x61\x25\xe6\xf2\x11\x48\x47\xb2\xa0\x1a\x6d\x7c\x3e\xec\x67\x07\xe0\xe1\x3f\x15\xe4\x32\xde\x86\x07\xf5\x43\xc1\x6e\x6c\xb8\x63\x2e\x37\xc5\x80\x72\xef\xd9\x61\xfe\x48\xd9\x07\xa5\x7b\x50\xc7\x81\xfe\x6e\x6a\xc7\x1a\x67\xf6\xc8\xf8\x6b\xd4\x76\xd0\x2d\x3c\xc9\x19\x69\x84\x86\x44\xc3\x96\x8d\x0f\x19\xd5\xbe\xc8\xa6\x07\x23\x6c\x68\x4e\xa3\x6c\x75\x22\xce\xf6\x1d\x05\x3f\xd2\xe8\x3f\x1f\x36\xc7\x59\xb2\x03\x99\xd7\xf1\xb2\xc4\x96\xb4\xd7\xa3\xbe\x70\x1b\x59\x81\x65\x20\xeb\x71\x12\x58\xea\xaf\x14\x34\x51\x7b\x7b\x39\x70\x27\x01\xd8\xe7\x12\xcb\xc3\x60\xf0\x54\x23\x7a\x05\x61\xbc\x4c\x6a\x17\x8b\xf2\xcd\x60\x3f\x03\x4c\x3f\xdf\x6c\xa6\x76\xe4\xcb\xb3\x6d\x2b\xbd\xe3\x7d\x89\x9a\x11\x2d\x92\xee\x52\xb9\xd7\xb5\x5d\x0d\x68\x66\xc5\xb8\xbd\xde\xa2\xad\xf9\x10\x28\x43\xda\xeb\x75\x97\xad\xaf\x09\xd4\x6e\xfb\x26\x2c\xb7\x6f\x78\xe5\xe3\x21\x78\xbe\x5b\x57\x47\xf0\x02\x19\xfa\xbd\x02\x2b\xee\x3d\xbe\xb1\xcc\x86\x2f\xea\xba\x8b\xda\x95\x04\xd5\x41\x1e\x01\x2d\x78\x3d\x7b\xa7\xff\x75\xbc\x0b\xdb\x07\xaa\xfb\x47\x34\xa1\x9b\x8d\x68\x73\x93\xbc\xdf\x6a\xd2\xee\x93\xc3\x35\xfb\xb5\x3b\x0c\x9c\xea\x31\x1d\xa4\xd6\xaf\xbc\x77\x68\xd3\x9f\x1a\x9a\x2f\xb6\x29\xf5\xa7\x16\xc3\x6b\xa7\x1c\x70\xa5\x9d\x6b\x19\x9f\xdd\x31\x67\x74\xd0\xe2\x84\xa3\xc4\x05\x1a\xd2\xe4\xf6\x70\xc1\xb2\x05\x4c\xf7\xd8\x07\xa8\x89\x81\x41\x53\xf3\x36\xa8\xdd\x01\x7a\x9b\x6d\x7d\x2b\x6e\x52\xb5\x10\xa6\x76\x5d\x05\x2f\xe2\x8d\xfd\x98\xee\xdd\x8f\xf8\x65\xcb\x76\xb2\xde\x0f\x02\x3b\x90\xf4\x66\xfb\xc0\xbe\x13\x15\xd0\xa4\xdd\x0b\x69\xf2\x24\x4e\x77\xed\x05\xf7\x6a\xd4\xb2\x23\xb6\x9a\x79\x14\xe1\x8e\xa8\xbf\x01\x1d\x6c\x80\xe6\x0f\x41\xad\x1d\xb5\x3e\x5d\x71\xba\xe7\xda\x54\x3c\x2a\x18\xba\x87\x82\x8c\xa3\x26\x96\x06\x2b\x13\x1d\xb6\xcd\x59\xd7\x08\x43\x0e\xe8\x46\xb4\xb7\xc1\x4b\x17\x31\x31\x54\x88\x80\x70\xa8\xe1\x2b\xfc\x76\xeb\xf9\x13\x84\x5f\xc7\x3f\x90\x98\x99\xcd\xc7\x5d\xf4\xc3\x86\x4d\x0f\xb7\x82\x05\x30\xca\xb5\x0f\xef\x71\xf8\xc6\xfe\x38\xcf\xeb\xcf\xee\xc6\x35\x17\xa6\xc8\x7b\x2c\xf7\x8a\x43\xac\x57\x23\x34\x38\x8b\x6f\x36\x60\xf3\x5c\xcf\xdb\x9e\xeb\xdb\x12\xb7\x3e\xd7\x3f\xce\xf3\xed\x6f\xf5\xde\x24\x24\x5b\xb5\x73\x8c\xb5\x11\xe2\xe0\x29\xb8\x7e\x52\x04\x42\xa8\xe9\x15\x61\x8b\x56\xe7\xa0\x5e\xb0\x32\x7b\xc5\x72\x19\x8d\xed\xd5\xd2\x4a\x8b\xcf\x04\x61\xd4\x5c\x82\xc6\xb4\x28\x28\xb0\x34\x25\xc8\x9a\xda\xfa\x2e\x12\xa0\x5f\x93\xc3\x51\x55\x4d\x69\x2e\xc0\x65\x57\x65\xae\xdd\xb7\xe9\x65\x4d\x7d\xb8\xa1\x02\xc2\x35\x13\x7c\x6e\x34\x7f\x7f\x58\xe5\xf9\xb5\x8b\xe8\x67\x8f\xaf\x45\x34\x58\x78\x6f\x50\x2d\x51\xcf\x9a\x1a\xa6\x4a\xa6\xbe\x36\xee\x19\x87\xcc\x3d\x6f\x89\x0a\x61\xef\x6d\xea\x15\x9b\xec\x78\x9f\x7a\xed\x9a\x44\x55\x3d\xa5\xdd\x23\x0a\x74\xaf\x23\x6d\x1f\xb5\xa9\xbe\x7a\x96\x28\x27\x98\x3b\x41\xbe\xf8\x8e\x83\xef\x15\x6b\x7b\x22\xc6\xe0\xc4\xda\x4c\x02\x17\xe0\xd1\x5a\x4d\x03\x1e\xe6\x42\xba\x19\x97\x0d\x6c\x91\xfa\x1c\x48\xae\x49\xbc\xa3\x88\x17\x85\x71\xc7\x96\x0d\xca\xf4\x52\x45\x61\x4a\x83\x80\x36\x2e\xee\xcb\x59\x9c\x27\xe9\x00\xc2\x41\xc5\xe8\x2c\xf2\x35\xd7\xa2\x61\xea\x07\x63\x3c\x8b\x7c\xad\xaa\x68\x18\xf9\x5e\xf3\x23\x6c\x1f\x22\xe2\xf7\x24\x56\x50\x06\x4e\x12\xa1\xa1\xcb\x42\x55\x95\xd1\x4c\x82\xaa\xe5\x66\x3c\x12\xa0\xa3\xa7\x1f\x74\x35\x1e\xd3\x02\x54\x78\xe1\xf2\x5e\x96\xc3\xb1\xa8\x80\x35\x0c\x1e\xf6\xbd\x41\xf9\x1a\xf7\x98\x21\x6c\xb7\x97\x8b\x28\x60\x35\xfe\xff\x92\x96\xda\xd5\xba\x19\x93\x5f\xda\xf3\x57\x2f\xbc\x1a\xda\x51\xba\xbc\x1a\xfc\xd2\x2a\x59\xb4\x6a\xea\x1b\xd9\x6c\x8b\x96\xfe\x39\x78\xfb\xb6\x47\x17\x64\xef\x9a\x05\xa6\xb1\x9c\x3d\xc2\x0c\xc4\x4b\xe0\x65\xb9\xae\x5c\x26\x30\xa8\xa0\xa9\xe5\xd7\x4f\xb9\xca\xbd\x77\xfb\xc2\xe3\x32\xd1\x68\x37\xc8\xd7\x8f\xdc\xbd\x5e\x17\xb8\x82\x72\xb3\x51\x76\xc6\x9d\x3c\xe1\x7e\x4c\xc8\x95\x15\x6d\x6f\x81\x78\x8e\x09\x3a\x5a\x75\xcd\xf3\xed\xaa\x39\x62\x79\xbd\xfa\x9e\xc3\x6d\x7c\x55\x5c\xea\x87\xda\x03\xc2\x81\x80\xcb\x10\xed\x0a\x2b\x70\x1a\xa3\xd3\xb6\x79\x1c\x71\x61\x59\x48\xc8\x37\x68\x6e\x45\x9c\xc9\x1f\xc3\xd0\xa5\xa7\x69\x34\xd4\x7b\xdd\xaa\xc2\x09\xd4\x17\x18\x72\x2b\x63\x5d\x15\xe1\x1b\x22\x4c\x01\x72\x60\x75\xe4\xe0\x46\x1e\x32\x54\x0c\xdc\x04\xd1\x69\xdc\x2a\xb8\x43\x6b\x9e\x04\xa2\x3b\x7d\x74\x9c\x40\x9f\xeb\xb8\x56\xe0\x0a\x4a\x75\x45\x47\x62\x9c\x6c\xeb\x4f\xb5\x06\x9d\x5a\x0b\x69\xef\x8d\xc5\x32\x73\x1a\x46\x3b\x5b\x41\x95\x86\x5b\x2d\x53\x1e\x19\x2f\x7c\x8e\xf1\xd4\xa1\x8e\x00\xac\xe8\x6b\x45\xc4\x79\xa4\x17\x66\x3a\x6e\x1f\x4b\x44\xc0\x78\x69\xb7\xb7\xa1\xf8\x48\x1b\xd9\xb0\x84\xe0\xd6\x02\x51\xba\x5c\xe6\xda\x8a\x42\x12\x96\x03\xbf\x53\x45\x22\x22\x1d\x26\xdb\x8f\x5c\x1f\x72\x6f\x46\x81\xd1\x48\x61\xb9\xab\xb4\x5d\xbc\x67\x2a\xb9\x12\x4a\x6e\xb4\x43\x68\xb8\xae\xbd\xed\xcc\x88\x78\x72\xed\xe5\x37\x2b\xbf\xd8\x62\x5c\xb3\xe5\x95\x88\x49\x74\xa5\xc1\xe3\x3f\x9e\x55\x65\x80\xad\xd1\x3a\xb0\x5a\x7c\xd3\x08\xe5\x50\x9d\xfb\x77\x88\x89\x43\xe5\x2f\x72\x3d\x5f\x49\xd3\x3c\x1d\x2a\xa5\xd3\xd5\xb0\x3b\x09\xf5\xaa\x9d\x89\x96\x61\x71\x0c\x7d\xf3\x0b\xe9\xf5\xe2\x5f\x48\x22\xe2\xe8\x7b\x22\xe9\xb6\xbe\xdc\x87\xf7\x14\xe6\x50\xbf\xfb\x4b\x4e\x2f\x53\x41\x22\x34\x70\xad\x99\x20\x0a\xd7\x0e\xc4\x5b\x6d\x8e\xb4\xc9\x16\xc4\x37\xc2\x39\xcd\x86\xac\x0a\xfc\xc5\xff\x42\xc0\x4f\x43\x75\x7e\x5e\x33\x28\x33\x48\xea\x90\x4e\x5a\xe9\x40\xd3\x92\x00\xe7\x59\x0d\x73\x35\x13\x4b\x45\x93\xfa\x27\xca\x29\x42\xcc\x5b\xf5\xbd\x35\xd4\xe5\xf0\xb5\x5b\xe4\x40\xd9\x9b\x37\x95\xbd\xd1\xb0\x81\xc6\x09\xc2\x3f\xc5\x60\x6d\xc9\x17\xb0\x7b\x5a\x1e\x7d\x5b\x4e\x1f\xb7\x4c\xb0\x2f\xe0\xb0\xf2\x5c\xd7\x1a\x95\x3c\x14\x23\x57\x4f\x75\xb4\xa5\xd8\xb7\x34\xb1\xbe\xd6\x5a\x8e\x48\xe8\x53\xab\x0a\xf8\x2c\x8f\xd6\xc6\xeb\xc0\x5c\x6a\xc8\x2b\xab\x8c\xa3\x23\x90\x30\x1b\x67\x42\x23\x1d\xeb\x20\xee\xd5\x15\xb3\x91\x03\x2d\x89\xdd\x4d\x92\x98\x49\x7e\x48\xc1\xc7\xb8\x71\x19\x46\xc7\x92\x55\x68\x30\x75\xcc\xb8\x28\xd5\xea\x44\xca\x46\x41\xa1\x3a\xbf\x41\x15\x4a\x4e\xe3\xab\xcd\xa6\xd9\x7e\x80\xce\x0e\xef\x28\x68\x17\x3a\xd6\x92\x27\x8f\xdc\xdc\x6c\xa2\xfe\xdf\xcb\x82\xf5\xd3\x25\x8d\x42\x05\x2d\x35\xb8\xf4\x8c\x8f\xd2\x71\xdb\xa8\xa2\xe3\x14\x0d\x55\xd1\x80\x35\xdc\x36\x9a\x51\x0a\xb3\x47\x43\x30\xd7\xf0\xba\x6d\x6d\xdd\x65\xfb\x3e\x7c\xb7\xb6\xed\x37\x07\xbd\x54\xe1\xa6\xac\x6f\x8c\x9a\x81\xdc\x01\x7b\xc3\x77\x2b\xb8\x63\x77\xa4\x76\x26\xae\x8b\x4f\xbc\x41\x5a\xbb\xf8\xa4\x7b\xa4\xc9\x92\xd4\x35\xfc\xd5\xc0\x62\xef\xc4\xc4\x25\x8e\x32\x32\x4d\x57\xb9\x78\x6b\x87\x15\x21\x74\xc6\x47\x74\xbc\x65\xd0\xd1\x31\xbd\xd9\x16\xa2\xe1\x16\xd2\xfd\x45\xdb\xda\xb7\x05\x0e\xdc\x43\xb6\x3d\xb5\x85\x9c\xf3\x2d\xc3\xfb\x11\xe7\x2e\xd3\x47\x2d\x21\x81\xea\xe7\x8c\xc8\xf8\xa8\xe5\x75\x58\x18\xd3\x55\xe5\x61\xdb\x7a\xe1\x32\x3a\x1b\xae\x9b\xda\x46\x0d\x04\x4c\xf5\xcc\x11\x6f\xed\x8c\xb9\xce\x98\xd7\x99\x5e\x4f\x30\x66\xf5\x92\x43\xb7\x68\x2a\x37\x48\xdb\x66\xd7\xea\xda\xc0\xe6\x0e\xcc\xc2\x3a\x4e\x8c\x81\xaa\x73\xc3\x5d\x38\x92\x03\xf8\x94\x38\x88\x28\xda\x66\x68\x5a\x8b\x2a\xda\x4e\xa5\x37\xb2\x6e\xe4\xc3\xe3\x4f\x2d\xdd\x02\xb9\xbb\x35\xd7\xdf\x23\x3b\xc6\x8e\xb7\x08\x0f\xc8\x48\x8c\x95\xe8\xe2\x69\xca\x0a\x46\x27\x69\x1e\xa3\x23\x2f\xac\x68\x6b\xd4\xd4\x36\x50\x85\x12\x74\x07\xab\x7d\x7a\xbd\xc1\xd4\xc2\x46\x6a\xf3\xae\xc9\xe8\xb7\x4e\x3c\x2c\xb7\x73\xe6\xdb\x03\xbf\xfa\x30\x70\xaa\x95\xef\x1b\x9e\x04\x58\x5d\xaa\x52\x24\xcc\xf3\xe2\x14\x3c\xb7\x14\x37\xf0\x81\x34\xe2\x63\xf5\x4c\x82\x10\xce\x93\xba\x3c\xbb\xb0\x36\x15\x46\x3e\x9d\xb2\xac\xa3\xdc\x0f\x74\xd2\x8b\x62\x25\x40\x73\xdb\x98\x8b\xc8\xa1\xc3\x73\x34\x75\x8f\xe8\x65\xf2\x8b\x7d\x74\x59\xa9\x47\x74\xea\x3f\xa2\xc7\x62\x07\x1f\x5a\xe0\x12\xaf\x8e\x24\x55\x1c\x17\xc9\x1f\xc0\x0e\x03\xde\x5b\x24\xb1\xcd\x11\xb2\xfc\x69\xaf\x17\xaf\x92\xc2\x39\x9e\x02\x4f\xc8\xc0\xc3\x61\x31\x08\xe5\x36\x14\xab\x78\xa7\x65\x85\x39\xc2\x2b\x89\x9f\x14\x73\xac\x92\x41\x22\x6f\xda\x19\xae\x2a\x54\x21\x4c\x11\x0e\x14\x21\x15\x9d\x4a\x7a\xbd\xae\x7a\x97\xa4\xe5\x63\x2f\x06\x64\xaf\x17\xf9\xa1\xef\x22\x28\x32\x29\x32\x72\x16\xf3\xa4\x05\x7b\xe5\x03\xa2\x60\xab\xfc\xd7\x9c\xd5\xbe\x63\x37\x65\x34\x7c\x16\x13\x15\xc1\xb2\x54\xe1\x68\x6b\xf2\x1f\x8a\x39\x26\x08\x0d\xbd\x2c\x25\xd1\xa1\x18\xe2\x48\x82\x69\x40\x85\xf0\xca\xd3\xe2\xfd\x63\x40\xf5\x5e\x6f\x17\x3c\x28\x78\x9e\x75\xb5\xb1\x02\x27\xd9\x6a\x42\x62\x88\xe3\x9a\x3c\x12\x9b\xcd\xff\x23\x8a\xa3\x41\xce\xdc\x40\x12\xfa\x43\x5d\x61\xb3\xe9\xea\x12\xba\x25\x57\xcc\x0d\xe6\xff\xd5\x84\xb4\x62\x27\x97\xc1\x7d\x07\xf8\x5b\x39\x50\xe6\xb5\xff\xdf\xf5\xf6\xe5\x8d\x42\xa7\x71\x57\x69\x09\xc4\xac\xdd\xab\x5f\x8d\x2e\x22\x68\x30\x4d\x27\xa2\xe0\x20\xbe\x56\x91\x5e\x80\x04\xaa\x94\x35\xef\x66\x13\xb3\xe4\xcf\x44\x7d\xe0\x2e\x0b\x82\xbd\x99\xe3\x0c\x0e\x19\xe0\xe9\x7d\x40\x95\xf1\x2e\xa2\xee\x40\xf7\x7a\x5a\x3d\x7c\xc9\x0b\x51\xc8\x9d\x32\x98\xa7\xe5\xab\x2b\x66\x1c\xb3\xa8\xd8\x51\x14\x7b\x71\x66\xd0\x66\xa3\x2b\x29\x17\x8b\x36\xe4\x6f\x50\x0a\xaf\x2f\xd3\x7c\x25\x09\x42\x74\x24\x20\xe4\xb0\x15\x90\x54\x6a\x9e\xb5\xda\xbf\x27\x6e\x10\x96\x02\xd2\x1b\x3e\xc2\xf5\xb0\x37\xa9\xc9\xf0\x83\xde\x78\xc8\x73\x17\x59\xde\xa4\xc9\x2a\x84\x10\xfe\x33\x49\x9a\x01\x74\xbe\x20\x9b\x4d\xfc\x45\x83\x55\x86\x79\xfa\x4c\xf2\xb9\xc1\x8a\x2f\xe9\x47\xca\x10\xfe\x82\xd4\x42\x61\x38\x3f\x68\x7f\x75\x0a\x53\x76\x44\x49\x01\x5a\x52\x2a\x30\x14\x19\x7c\x20\xd7\x08\xfb\x6e\xfb\x88\x0e\x41\x18\x8b\x84\x0f\x4a\xca\x66\xab\x3c\xe5\x92\xf7\x83\xa8\x8b\xda\x97\xda\xff\xb4\xfb\x52\x83\x40\x56\xdb\x3c\xa9\x41\xf4\xa9\xc8\x44\xfc\xf5\xfc\x16\x35\x13\xb5\x0f\x21\x1b\x3a\xf7\xfc\x7c\x9e\x96\x4f\xd3\x7c\xa2\x5e\x8c\xb5\xda\x89\x75\xd2\xa0\xa2\xe4\x5b\x0f\xdf\xb5\x20\x5e\xaa\x6c\x4b\x9a\xe9\xc5\xcf\xaa\x37\x45\xea\x29\xe0\x9c\xe1\x03\xb9\xae\x07\x3e\x82\x98\x97\xe4\x5a\x65\x53\x96\xb5\xe6\x53\x96\xdd\x20\x52\xd7\x5f\x49\x6c\xeb\x22\x3f\x74\x18\xb4\xa1\xad\x34\xda\xfa\xd1\x59\x50\x8c\x35\xc3\x78\x41\x19\x99\x5e\xf9\xce\xa3\x3c\xec\xd0\x75\x24\x4a\x2b\xe0\x0d\x19\x37\x31\x19\x3a\x5d\xd9\xb4\x36\xd6\xb7\xaa\xbb\x86\xfa\x4c\x5d\xe9\xe6\xab\xf6\xc2\x56\x6a\xb9\x73\x47\x9d\x68\xce\xb1\xc0\x29\x2e\x71\x9e\xa8\x68\x96\x89\x85\x1b\x8e\x8b\x84\x5a\x0b\x19\xab\x4f\x53\x98\x3d\xb5\xd9\xc4\x92\xe6\x70\xce\xbf\xd4\x12\x7e\x20\xd7\xf2\x1a\xc3\xb9\xbc\x31\x73\x00\x3e\x66\x4e\x11\x28\x2e\x93\x38\x4d\x72\x64\x1a\xee\xf5\xec\x22\x0e\xc0\x73\x08\xda\x6c\x4a\x34\x8c\x75\x98\x67\x96\x74\x4f\x5b\xe0\x9c\xf0\x2d\xc7\x88\x55\x15\x19\xec\x50\xbb\x48\x9e\x12\x4c\x06\xcf\xc8\x92\x93\x89\xcc\xd2\x51\xfa\x92\x97\x32\x39\xa0\x09\x93\x2b\x99\xa4\xa9\x2f\x55\xf7\xad\x4b\x50\xb8\x3a\x79\x87\xc9\xc0\x6f\xfd\x31\x09\x13\x8c\xb7\x98\x37\x2e\xfd\x59\x2a\xd2\xb7\xbe\x5b\x9b\x3f\x40\x5e\x51\xa8\x97\x90\x64\x25\x3f\xcd\xbb\x66\xf2\xa3\xf7\xe1\x77\xf4\x1a\x4a\x81\x3b\x18\x85\xa6\x8c\x67\xa0\xdf\x87\xe8\x6a\x30\x18\x10\xcf\x25\x90\x0d\xae\xab\x10\xab\xba\x07\xf7\x39\xe1\xa9\x3b\xd8\xd8\x57\x3e\xf0\x6f\xb2\xb5\x70\xb5\xd5\xa9\x8b\xb5\x3a\x52\x62\x42\x13\x94\x63\x87\x94\x1a\xa7\x89\xe7\xaf\x08\xd7\x22\xc3\x17\xd8\x7f\x6a\x1a\x16\xc1\xcb\x13\x78\x37\x4f\x29\x23\x3a\xfc\xf7\x51\xe0\xf7\x22\x75\x46\xf4\xa5\x21\x20\x52\xdc\x26\x69\xb1\x71\x16\xd2\x81\x6d\x31\x30\x3b\xf4\x21\xae\xde\x09\x0c\x38\x52\x4f\xfe\x58\xae\x2e\xca\x09\xa7\x17\xf2\x20\xc3\x59\x4e\x1e\x35\x9d\xfd\xd2\x69\xec\x22\xa5\x96\xe0\x80\x16\xf1\x41\x18\x14\x54\x24\x8f\x74\x80\xb1\x89\x5c\x01\x90\x73\x62\x81\xba\x49\x83\x19\x09\x41\x59\x8f\x26\x2d\x5b\x04\x4f\xf9\xbc\xdd\xb9\x9c\x40\x95\x33\x07\x8a\x82\xad\xe2\x0f\x2c\xf0\xc7\x17\x0b\x4c\x2d\x93\xb0\x67\x3c\xf5\xc0\xca\x70\xb3\x9c\x6d\x1d\x4c\x18\x5a\xd9\xdc\xef\x34\x44\x31\xbd\x5e\xbc\xb5\x01\x5c\x0c\x74\x0b\x6f\xc8\xa2\xb8\x4c\xf3\xa7\x73\x32\xf9\x00\x14\x41\x31\x38\x5f\x98\x07\x19\x13\xdd\xb8\xd7\x6b\x4b\x1d\x70\x22\x38\x25\x97\xe4\xc7\x54\x90\x12\x82\x65\x79\x40\xd2\x81\xca\x01\x3a\x5b\x18\xc4\xdd\x6b\xa2\x79\x0b\x49\xec\xb7\x07\xe0\xd6\x6f\x50\x11\xbc\xba\x6a\x07\xc5\x5b\x66\x1c\xc1\x1b\x7c\x84\xf0\xf6\x7c\xfd\x14\x1f\x21\x34\x8c\xd4\x53\xac\x50\x5e\x8f\xb7\x6e\x8a\x88\x66\x11\x52\x3e\x9d\x15\x03\x8f\x10\x2e\x2b\x41\x52\x9e\x15\x26\x3a\x5a\xdd\xc7\xbb\xef\xa5\xc7\x97\x57\xd5\xcf\x0d\x38\xd7\x84\xd8\x6f\x80\xf8\xce\xf4\xdf\xa1\x00\x1d\x26\x39\x24\x43\x91\x9b\x47\xde\x23\xcf\xc3\xb9\x0a\xcd\xaa\x6c\x14\x7f\x2a\x54\xf8\x4f\xb0\x32\x04\x0b\xc3\xce\xb4\xe0\x9d\xdf\x7d\xb1\x26\xd5\xef\x34\xaf\xdc\x51\xee\x8b\x3a\x73\x50\x30\x2b\xc1\x6a\x51\x62\xa5\x9f\x51\xd5\x32\xb2\x16\x55\x9a\xff\xf6\xa3\xb1\x35\xd1\x2e\x28\x6a\xd5\x1c\x00\x35\x1b\xd1\x31\x46\x0f\x69\x6b\x87\xd7\x24\x4f\x36\xd7\xe2\xfa\xd2\x89\x4a\x19\x8e\x5a\xe2\x1a\xeb\xc0\xfa\x7c\x9f\x17\x2d\xdf\xf8\xbd\x79\x13\xe8\x18\x2a\xce\xc3\xd2\xb6\x61\x61\x5f\x78\xcb\xb0\x8f\xef\xd0\x51\xbb\xfd\x2d\x75\x01\x00\x14\xe6\x04\xd9\x29\xd9\x7e\x2d\x8d\x48\x10\x49\x7d\xaf\xf3\x2d\x7f\x6a\xad\x97\xe2\xc1\xb3\x3b\xe2\xc9\x76\x78\xab\xb9\x49\x8e\x30\x88\xbb\xdb\xde\x9f\x3f\x81\x9d\x0e\xb5\xe0\x10\x44\x7a\x3b\x97\x2a\xb9\x43\xcb\x4e\xc1\xf2\xeb\x4e\x7a\x99\xd2\x3c\xbd\xc8\x49\xe7\x6a\x4e\x58\x67\xb2\x2a\x45\xb1\xd0\xa7\x43\xd1\x17\x53\x92\x8a\x15\x27\x9d\x69\x9e\xce\x54\xb5\xa8\xaa\x30\x19\x9c\x5f\x50\x96\x25\x3f\xc8\x5f\xb3\x55\xca\xb3\xe4\x17\xf9\x53\x05\x2a\x7d\x51\x3e\xce\xe9\x25\x49\xfe\x84\xc9\x60\x52\x10\x3e\x21\x2f\xb2\x84\x61\x32\xc8\xe8\x74\xaa\xe8\x98\x6d\x21\xb5\xac\x5d\x39\xb3\x16\xcf\x98\x26\x2f\x53\x31\x1f\x2c\x28\x83\x77\x6b\x5c\x28\x12\x31\x4d\x4e\x1e\xa6\xdf\xd1\x87\xe9\xf1\x31\xa2\xd3\x98\x8c\xd2\x71\x37\x49\xc4\x28\x1d\xa3\x75\x91\xa4\x47\x17\x9c\xa4\x1f\x2a\x43\xbd\xf6\x7a\x4c\xa9\xed\x48\xea\xd6\x28\x26\x9f\xe0\x3c\x01\xbb\x23\x7d\xd0\x0a\x37\x94\x55\x42\xfb\x05\x9e\x24\xa7\x0f\x27\xdf\x25\xf4\xe1\xc4\x74\xc2\xfb\x13\xd5\x0d\xeb\x4f\xc6\x68\xbd\x4a\x26\xfd\x53\xdd\x55\x99\xb0\xfe\xaa\x5f\xe0\x3c\xe1\xf2\xaf\x5e\x9f\xf5\x94\xf2\x52\x28\x04\xf9\x82\x65\xe4\xe3\xb0\xc0\x69\x96\x91\xec\x69\xb1\x62\x02\xcc\x07\x16\xc5\xa5\xf9\xcc\x01\xb8\xea\xa6\x00\x48\xbd\x2b\xfe\x90\x96\xf3\xe4\x99\x4d\x95\x9f\xef\x8a\x3a\x14\x9b\x36\x43\xc6\x69\xd7\x6b\x65\x7a\x0d\xe2\xd6\x2d\x91\xd8\x79\xf2\xc8\xce\x9b\xe9\x0d\xba\x48\x3f\x10\xad\x82\x30\xe2\x63\xe3\xd5\x86\xb5\xc4\x38\x33\x82\xb3\x8e\x25\x42\x22\x9c\x26\xd1\x3d\x60\xed\xdd\xe1\xbb\x17\x1d\xf3\xa3\xe8\x22\x2d\xe1\x62\x52\x0b\x61\xab\x3e\x2b\x26\xc0\xda\xbb\x9a\x11\x28\xea\x81\x88\x4f\x50\x01\xb6\x19\x19\x11\x29\xcd\x87\x6c\x44\xc7\x58\xdd\x91\xc3\xf5\xb2\x80\xfb\x73\x98\x56\x15\x44\x07\x14\x12\x7c\xb0\x21\x6b\xce\x13\x9f\x60\x5f\xa1\xeb\xa9\xa6\x8d\x92\x6b\x4c\xdc\xdb\xaf\xe3\x89\x0b\x5c\x73\x85\x9a\xfc\x64\x53\x9c\x2c\x4b\xa6\xfb\x4b\xa0\x21\xff\x17\xed\x4f\xae\xc2\x61\x74\x04\x08\x21\x4a\x82\xc8\x03\x41\x00\xcf\xff\x21\xba\x52\x49\x44\xd0\xc9\x8c\x68\xbf\x90\x41\xcd\x49\x42\x1a\x85\x7f\xaf\x5c\xa9\xd0\x82\xb5\x54\xc8\x5a\x2a\xbc\x21\x65\x6b\xe3\xf3\x96\xb2\xda\x11\x76\xb3\xf0\x54\x15\x96\xf7\x63\xcd\x05\x33\x4c\xf7\xaf\xe4\x88\x0c\x56\xcb\x19\x4f\x33\x99\x6f\xb8\xad\xe4\x09\xc1\xed\xa2\x2f\x82\xa3\xf3\x73\x22\xef\xc6\x55\xee\x64\x5f\x10\x96\x17\xe8\x6d\x59\x38\x94\x20\x01\x13\x70\x0f\x82\x01\x45\x78\x14\x91\x8f\xcb\x82\x8b\x32\xc2\x2d\x85\xac\x98\x69\x8c\xe3\x10\x0b\x45\xab\x92\x74\x4a\xc1\xe9\x44\x44\x47\x37\x1d\xd9\xf6\xa9\x98\xe7\x3b\xbc\x26\x6c\xb5\x20\x5c\xa2\xdb\x61\xf7\x04\xcf\x88\x18\xb6\xc4\x98\x56\xdc\x5d\xb5\xab\xc5\xe6\x86\x3d\xb8\xf1\x66\xd5\x9d\x3d\xed\xdc\x5c\x07\x77\xba\xb3\x95\xc3\xfb\xf7\xf7\xdf\xed\xfa\xf6\x5b\x38\xbc\x5f\xff\x04\xde\xae\x5f\xbf\x85\xc3\xfb\xf5\xce\xe6\xed\xba\xf5\x1a\xd8\xd9\x6b\x0b\x5e\x3b\xb8\xc3\x96\xba\x55\xfb\x39\x95\x05\x53\x51\xf0\xf2\xde\xa4\x58\x2c\x0b\x46\x98\xd8\x75\x62\x5d\xf1\x95\xa0\xb9\xac\x94\xe7\xe9\xb2\x24\x7d\x90\x6b\xef\x28\x68\x13\xea\x27\x5c\xd2\xc2\x77\x3b\xe3\x64\x90\xa7\xd7\xc5\x0a\x84\xcb\xe9\x4c\x4b\x4f\xed\x15\xf7\x84\x82\x66\x76\x99\x10\xc5\x9a\xc8\xfc\xb6\xb4\xe0\xc3\x6f\xc0\xe8\x54\x83\x20\xa7\xc3\x92\xf8\x04\xf3\x81\x9d\xce\x5f\xa8\x98\xbf\x4e\x79\xba\x28\x51\x6c\xd4\xd0\x92\xd1\x58\x32\xd4\x74\x1a\xc7\x27\x18\x66\x22\x51\x0d\x92\x74\x74\xb7\xfe\xf8\xe0\xc9\x0e\xcc\xa8\x22\x84\xd6\x39\x11\x10\x54\xab\x91\x79\xd4\x36\xb5\x16\xbd\x56\xad\x9e\x3e\x1c\x8d\x2b\xd9\x56\x91\xd0\xd1\xc9\xf8\xec\xe7\x2f\xd6\xbc\x1a\x7e\xb1\x96\x1f\xd5\xcf\x43\xee\x1e\x7d\x1a\x8d\x5a\xd7\x4a\xe0\x34\x75\x30\x29\xd8\x94\xce\x56\xb0\xf3\x92\xee\x09\xc2\x4c\x32\xd1\x1e\x94\x98\x06\x10\xfd\xe4\x00\x6a\x2c\x9b\x0f\xa0\x46\xe6\x51\xdb\x3a\x1f\x04\x20\x6b\xf3\xee\xc0\xa4\xde\x50\xa3\x61\x84\x42\x68\x35\x7a\x38\x04\x5a\xf6\x75\xa4\x70\x24\x46\x13\x56\x6f\xc8\x3f\x56\x94\x93\xcc\xc2\x8c\xc3\xab\x60\x13\x58\xdc\xbd\x25\x21\x0c\xca\x26\x7e\x8a\x06\x90\x97\x24\xd9\x21\x36\x58\x49\x0a\x60\x2a\xe2\xc1\x60\x20\x3c\xcd\x6b\xbf\x54\xc2\x30\xaf\x30\x41\x95\x7f\x20\xa8\x5e\xde\x34\x29\xbc\x15\x91\xec\x5f\x70\x86\x52\x5d\xac\x0c\x8a\xb9\x85\x6b\x5d\x9d\x52\x57\xca\x65\xa5\x96\xe3\xd0\xba\xe7\x73\x5d\x69\xd5\xb2\xdf\x1a\x30\x54\x1c\xa8\x84\xc9\x88\x8f\x5d\x74\x30\xef\x39\xce\xa2\x0e\x8e\x49\x85\x23\xfd\x05\x7d\x9b\x9c\xd5\x91\xc5\x34\x4a\x7a\x9b\x3c\x12\xae\x51\xa7\xc3\xec\x35\xaa\x8b\x73\x2c\xaa\xdd\xc8\x57\xb1\x68\x37\xc1\xbc\x5b\x11\xea\xdd\xd1\x69\x31\x9d\x26\x64\x50\xb0\x84\x0c\x56\xac\xb8\x80\x80\xec\x12\x3d\xda\x9f\x01\x46\xe4\x89\xde\x97\x7b\x16\x00\xeb\x8d\x2c\x79\x1a\xb9\x39\x69\xa7\x98\x76\x18\x52\x8c\x0d\xf9\xb8\x4c\x59\xe6\x45\x46\xa7\x98\x5b\x99\x69\x9a\x65\xaf\x54\xd7\x5a\xd3\x17\x18\x71\xe4\x94\x6d\x79\x85\x23\x33\x38\x58\x32\x3b\x52\xee\xa3\xed\xcf\x3a\x48\xc5\x30\xee\x1f\xa7\x83\x28\x8c\xd4\x03\x70\x80\x41\xef\x3a\xd6\x34\xcb\x7e\xa4\xa5\x20\xf0\xc8\x6e\x62\x72\x89\x10\x62\x4c\xc1\x8a\xd9\xc3\x5d\x7c\x8a\x9e\x15\x20\xf6\x76\x3e\x9d\xaa\xde\xa7\xd3\xa4\xd8\x7d\x36\xd4\x7e\x37\x1c\xc2\x3d\xc0\x1f\xfd\x29\x25\x79\xd6\xcf\x48\x39\xe1\x74\x29\x4f\x81\x77\x68\xc6\xa1\x8e\x49\x70\x1c\x2c\x12\x96\xbc\x20\x9c\x5d\x98\x8d\x77\x7e\x1f\xc0\x5b\xb4\xf1\xd3\x16\xa9\x93\xe9\xa9\xe3\xa9\xb7\xb7\x2e\x48\x5c\x1b\x7e\x35\x24\x07\xdd\xa8\xc2\x6c\x15\xd6\xeb\x45\x8e\x82\x8b\x28\x93\x79\x91\x7f\x5b\x40\x9a\xe7\x03\x86\xa1\xea\x16\x27\x98\x96\x3f\x48\xf8\x3c\xb3\xe0\x49\x04\xa4\x7a\x09\x2d\xec\xae\x80\x68\xe6\x7e\x06\xc0\xc7\x83\xcd\x69\x08\x9b\x16\x65\xc5\x5e\x2f\xb2\xe8\x4f\xce\x45\xf4\x7a\x5d\x31\x38\x3f\xa7\xe5\x53\xad\xd8\xf0\xcc\xac\x6c\x25\x19\xeb\x43\x96\xbe\x4e\x64\x1e\xb6\xd2\xb7\x00\x9b\xbe\x5b\x03\xd8\xb4\x4c\x92\x0c\xbc\x47\x3d\x85\xed\x7b\xbd\x96\xc4\xf8\xb0\xe9\x39\x4c\x7e\x10\xe2\xdf\x77\x10\x3e\xf9\x75\xd0\x42\xca\xb5\xed\x1e\x9b\x34\x18\x0c\xb8\x47\xdf\x88\x60\xdf\xa1\x98\xa3\x33\xa2\xca\x0c\x15\x15\x92\x3c\x82\x6f\x30\x7f\xab\xea\xfd\x85\xe8\x67\x5f\xbf\xf6\x79\x5f\x75\xa0\x5b\xe6\x12\x09\xb7\x2c\xc5\xbd\x82\x67\x84\x93\xac\x5f\x92\x96\xab\xf7\x53\xee\xad\x23\xa0\xc6\x8e\x84\x7a\x1e\xae\x85\x88\x51\xf6\x30\x3a\xec\x6d\x29\x52\x41\x27\x1d\x2d\x4a\x0f\x24\x51\xb2\x5c\xa5\xcb\xa9\x4a\xca\x81\xe3\x84\xbc\x25\x62\xfb\x0b\x70\x4e\x4b\x61\x23\xaa\x94\xf4\x17\x92\x9c\x54\x10\xf5\x5d\xee\x0d\x39\x2e\x9e\x88\xcd\x46\x0b\xc0\x57\x34\xd3\x12\x7f\x2d\x26\xf7\xba\x30\xa6\x1a\xb2\x41\x6b\x5a\x22\x91\xda\x88\x8f\x25\xd5\x2b\xa9\x20\xa3\x38\x03\xfd\x50\xa3\x52\xaa\x46\xa2\x5d\xf4\xdf\xb1\x63\x3a\x8d\x41\x57\x50\x76\x87\xd6\xfa\x99\x57\x7e\x28\x18\x27\xd4\x46\x9f\xf6\x2c\x67\x1e\xf5\x4f\x7b\x3d\x6a\x22\x4f\x0b\x6c\xb4\x18\xf4\x30\xb5\x48\xbb\x7b\x52\x19\xe5\x90\xca\x6a\xd4\x99\x15\xb0\x9e\x70\x65\x9d\x4a\x45\xd0\x97\x44\x79\x90\x8e\x4c\x7d\x3d\x98\xfa\xe4\x02\x8b\x9c\xda\x2c\x47\x62\x5c\xd9\xa8\xd1\x5b\x9b\xd6\x0d\x07\xf0\xb8\x9f\x24\x89\x55\xc3\x32\x16\xf8\xe6\x6e\x56\xb1\xef\x84\x8b\x7d\x77\x8c\x88\xd2\x78\xb3\x55\x46\xa7\x63\x2c\x69\x58\xfd\x2a\xba\xab\x66\x0c\xe5\x2a\xa1\x44\xdd\x35\xfd\x1e\x39\x1e\xc3\x57\x55\x93\x62\x29\xf3\x65\x43\x24\x61\xe4\x2a\xd6\x3b\xc3\xdb\xfb\xf2\xfe\xdf\xb3\x85\x8f\xcc\x60\x84\x55\x73\xf7\x6a\x20\x52\x03\x60\x1b\x50\x1d\xb1\x0f\x27\x01\x4a\xd8\xf1\x63\xa2\xf6\x80\x05\x33\x26\x1a\x07\xa9\x9b\x40\xb4\x60\x0d\x4e\x58\x46\x78\x7f\x51\x64\x20\x5b\x29\xef\xb9\x5f\x19\xcd\xfa\x94\x95\x84\x8b\x5f\xe1\x96\xd2\x54\xb8\x7a\x62\x50\x3b\xed\xbc\x24\xe2\xa5\x1e\x8d\xf1\xed\x1d\xa3\xe4\x51\xbc\x9e\xa4\xcb\xf4\x82\xe6\x54\xd2\xad\xda\x2d\xce\xf9\x22\x2c\xf9\xd4\x2b\x12\x47\x0f\x06\xa7\x0f\x22\xbc\xce\x68\x29\xc9\x92\xc7\x2b\x51\x80\xef\x6f\x88\x72\x2f\xc7\xa1\x56\xc9\x74\x16\xa3\x75\x85\x41\x87\x24\xcf\x6d\x9a\x96\xee\x48\x22\x82\xe1\xc1\x60\x40\xc7\x92\x1f\x2d\x4a\x78\x0b\x4b\xf3\x23\x06\xd1\x62\x39\x68\x25\x65\xa8\xc2\x4a\x19\x3c\x68\x52\xbf\x48\xfb\x69\xb2\x6f\xc0\xa2\x20\x80\xb8\xc3\x42\xa9\xee\xfe\x97\x2d\xd4\x50\xf5\x42\x72\x22\x8f\xbe\x36\xf9\x6b\x5b\x39\xb4\x26\x03\x5d\x2a\x11\x8d\xb5\xb1\x0d\x90\x4a\x63\xf3\x11\x97\x4b\xcc\xc6\x89\xf0\x97\x58\x36\xc5\xb0\xb0\x4b\xfc\xb9\xd6\xf3\x8a\xe6\x79\x5f\x37\xfe\x9f\x15\xbd\xcd\x8a\xb6\x9d\xb6\x5b\xae\xf2\x81\x2b\xca\x0b\x9a\x11\x7e\x6f\x91\x4e\x78\x51\xde\xe3\x2b\x26\xe8\xe2\xe0\xe3\x18\xf2\x71\x56\x63\x6b\x99\x4e\x3e\xa4\x33\x52\x8e\xc8\xd8\xa9\xaa\x73\x8f\x8e\x1a\xcc\xf2\xe2\x22\xcd\x6f\xc3\x54\x91\x74\x32\x0f\x08\x50\x49\x8a\xd4\xa3\xd4\x37\x03\xf8\x83\x6b\x6d\x7d\xd5\x76\x44\x01\x4a\x2b\xb2\xa9\x18\x75\x60\xea\x9d\xc5\xaa\x14\x9d\x0b\xd2\x49\x59\x27\x95\xad\x38\xff\x46\xf0\x80\x07\x85\x9e\x16\x2c\x03\x68\xb7\x51\xc0\x50\x4c\x31\x91\xc0\xe7\xcd\x88\xf8\x3d\xcc\xf2\xa9\x4a\xe3\xc0\xfb\xbd\x23\xa5\xa0\x6c\xe6\x2b\x80\xeb\xcb\x59\xc3\x04\x8b\x84\xf4\x7a\x64\xd4\x5c\x9c\xc8\x5e\xa2\x4f\x8a\x22\x27\x29\x8b\x41\xe5\xc7\xb6\x89\x2a\x2b\x66\x59\x9b\x15\x18\xae\x2b\xac\xda\x1d\xae\x5b\x5a\x1c\xae\x6d\xed\x61\xf7\xb4\xaa\x2a\x20\x6c\x68\x12\xad\x98\x5a\x93\x2c\xea\x1a\x7e\xeb\x8a\xb2\xac\xb8\x3a\x53\x7f\x06\xe7\xb6\xad\x73\xd5\xd6\xb9\xde\x3a\xe7\x0a\x04\xda\x48\xf0\x48\xb9\x26\x57\x53\x5c\xeb\x2c\x81\x6b\xb0\x19\x72\x5c\x12\xa1\x7e\xab\x33\x12\xec\x21\x79\x4e\xca\xb0\x86\x29\xa5\xe6\xa6\xca\x54\x1e\x99\x52\x4c\x3b\x14\x89\x36\xd6\x56\x03\x40\x72\x71\xf7\x14\x6f\xa7\x39\x39\xd0\xdc\x3f\x70\xdf\x2b\x46\xe2\x36\x6f\x24\x60\xf2\xf8\x74\xc5\x39\x25\xd9\x53\xf3\xd6\xe3\x74\x53\x6a\xca\x1f\x8a\x00\xac\xc9\x02\x40\xe2\x6e\x6c\x27\x15\x36\x06\xcb\xc9\x62\x11\xa1\x81\x59\x86\x37\xda\x7f\x8d\xf2\xd2\x60\xe8\xc3\x23\xd5\xa0\x1e\x38\x61\x82\x4b\x54\x47\x06\xe7\xe7\x56\x41\xf3\xfc\x5c\x69\x47\xa2\x81\x8a\xc4\x95\x3c\x22\xa3\x93\xf1\xa0\x14\x29\x17\xa5\xe4\x05\xe3\x48\x90\xc5\x32\x97\x10\x9b\x14\x8b\x25\xcd\x09\x1f\x2e\x52\xca\xfa\x91\x72\x9b\xc8\xad\x92\xd9\xe8\x74\xdc\x70\xe1\x1f\x68\x9e\xa9\xa3\x59\x5b\x95\xce\xa4\x58\xe5\x19\xfb\x9d\xe8\xe4\xc5\x24\x15\x04\x8e\xaa\x9e\x55\xc7\xb4\xd2\x29\x14\x1d\xda\x81\x25\xec\x5c\x12\x5e\x82\x1d\x6d\xa5\x5d\x9a\xb7\xc8\x0b\xb8\x01\xbe\x81\xba\x72\x90\xa6\x40\x4a\x93\x2d\xd9\x31\xc1\xcd\xb3\xbe\x2e\xae\x18\xe1\x43\x52\x55\xe0\xeb\xdb\x2a\xc9\x50\xe4\x31\x8a\x2c\x76\x71\x0b\x28\xc2\x5a\xc1\x77\x1a\x77\x1b\x3d\xa9\xf8\x77\x75\xb8\xfc\xfc\x58\x48\x40\x0b\x92\x49\x7c\xa5\x5b\xea\xfc\xed\xe7\x2f\xd6\xa4\xfa\xdb\xcf\x9d\x4b\x9a\x76\x08\x2b\x57\x9c\xbc\x4d\xa7\xc4\xb6\xa5\xc2\x04\xb0\x42\x40\x50\x12\xab\xc5\x37\xf8\xd9\xf9\x0f\x89\x4f\xc0\x37\xde\x1a\xee\x09\x89\x20\xdc\x1d\x32\x1c\x8d\x2b\x50\xb3\xa0\xe5\x8e\x3d\x6a\x2c\x26\x12\x8d\x0b\xf4\x6d\x0a\x1e\x43\x60\xa5\x41\x58\x10\x47\xdf\xcf\x72\xba\x58\x48\x92\x41\xdf\x2a\xc0\x81\xaf\x77\xb5\x3d\xe4\x78\x47\x26\x03\xad\xe5\xeb\x21\x35\x85\xfe\x0c\x67\xab\xa8\x12\x71\xb4\x67\xcc\x1c\xf3\xcd\x26\xde\x57\xa8\x15\xaf\x77\x94\x56\xf6\x44\x6e\xa2\xa2\xf9\x7e\xeb\x23\x94\x2d\x2f\x07\xbb\x71\xce\x6e\x51\x91\x77\x7f\x12\x17\x13\xaf\x21\xf2\x24\x67\x5e\x1b\x8a\xdc\xb7\xfa\x4a\x56\x2b\xdb\xda\x97\x81\x40\x68\x1f\x2e\x42\x92\x9e\xd0\x26\x60\x43\x2d\x42\xda\x59\x1a\x19\x5f\xa6\xe4\x8c\x0c\x0f\x1a\x0e\xa6\xad\x08\x4f\xf8\xa6\xe1\x97\x74\x42\x86\x7d\xb5\xd5\xfb\x26\xc4\x26\xf1\xfc\x0f\xca\x1d\xa7\x52\x55\x60\x00\x18\xf6\xcd\x26\x4a\xed\x44\x6f\x45\x92\x34\x8f\x21\xdc\xf6\xcf\x9b\xe9\x7f\x20\xf9\xd2\xc6\x80\xd5\x31\x8c\x59\x2d\x84\xb1\x2a\xb3\xd6\x26\x68\xf1\x88\x8c\xed\x5e\x84\x19\x42\xfc\xd7\x6a\x57\xf3\x6c\xd7\x1e\xd5\x20\x2d\xef\x35\x41\x7a\x0b\xaa\x2f\x0c\xd4\xd8\xa1\xac\x43\xce\xb6\x81\x50\x58\x53\x3d\x1c\x2a\x50\xf8\xa2\x77\xf9\x7d\xc5\xa9\xd0\xbf\x2b\x34\x24\x23\x31\x86\x07\xc1\xbb\xb3\x0a\x0a\xe0\xfc\x80\x98\xd1\x2d\x46\x22\x4a\xd1\x58\xbf\xa7\x16\x6c\x42\xca\x08\x7b\xb1\x7b\x5c\x09\x26\x33\x41\x67\x91\xf0\x08\x9f\xb8\xc0\xb0\x10\xe1\xab\xd5\x52\xc2\x6c\x7c\x25\x84\xb4\x1d\x98\xe8\xab\x81\xc7\x27\x15\x81\x35\xd2\x47\x22\x3a\x86\x4a\x7e\x9f\xc7\xc7\xb8\xd1\x90\x89\xcc\x0a\x56\xb6\x7a\x34\x91\x55\x36\x19\x46\xc7\x60\x68\x8b\xb9\xdc\x58\x06\x68\x3c\xd8\x46\x06\x99\x3b\x0d\x15\x2b\x03\xbf\x48\x4b\x45\x0c\x40\x7a\x7f\xa1\xd8\xa9\x1a\x1e\xdc\x51\xdf\x26\x7d\xfe\xa7\x84\x60\xbf\x2a\xfe\x28\x14\xf6\x92\x86\xb4\x37\x16\x10\x18\xd2\xdf\x1d\x02\xad\x1b\xea\x33\x9f\x73\xf3\x57\xc8\x6c\x3e\x8f\x45\x8d\xe4\x72\x1a\xf5\x77\xe3\x91\xc9\x27\x2a\x78\x30\x15\x12\x0b\xed\xc0\xcf\xca\x7a\x66\x40\x74\x0b\xf2\x51\x04\x7c\x4c\x4d\x4a\x7f\xd0\xc2\x1d\xbc\xd6\x40\x3a\xed\x29\xa3\x39\x60\x09\x85\x72\xaf\xa6\x12\x5c\x2d\x77\xd9\x1c\x64\xf0\xf8\xcd\xef\xdf\x9e\xbf\x7d\xfe\xce\x50\x36\x5e\x0a\xf3\x78\xe7\xe6\xb3\x01\xb1\x36\x04\x98\xe2\xe2\xa8\x30\x0d\xc4\x34\x89\x52\x3e\x2b\x23\x44\x59\xac\x44\xe9\x68\xcb\xce\x90\x35\xf5\xb8\x8a\x1b\xed\x0c\x36\xa2\xe3\xa4\x50\x27\x5d\xf6\x95\x70\x0c\xb7\x9d\x31\xca\x42\x36\x9a\x32\x04\x14\xf7\x02\xad\xc5\x81\xde\x8b\x9f\x83\x74\x74\xf1\xa0\x06\xc9\xb6\x54\x20\x99\x29\x1f\xba\x20\x39\x7c\xff\x04\x0b\xfd\xf9\x04\x46\xde\x88\x13\x12\x4c\x38\x54\xa2\xb0\x52\xa4\x03\x48\xd9\xa0\x99\xa3\x5a\xab\xc2\x6a\x65\xdc\xa6\x41\x92\x1d\x85\x63\x3e\x18\x11\x2b\xe2\xf2\x0e\x98\x78\x1b\x26\xff\x74\xc7\xf5\x13\x5c\xe2\x12\xb4\xeb\x92\x08\x0b\xa0\x21\xc3\xee\x93\xb2\xd9\x90\x56\x09\xc7\x85\x01\xbe\x1d\xf2\x4e\x39\x1f\x31\xa7\x5a\x1e\x35\xb0\x89\xfb\x91\x4e\xc9\xe4\x7a\x92\x93\xa7\x69\x9e\x5f\xa4\x93\x0f\xe5\xb0\x7b\xaa\x25\x76\x7f\x28\x8a\x0f\xc3\xee\x69\xe5\x7c\x77\x6b\x28\x58\x4f\x25\x07\xad\xb9\xb9\x8b\x9f\xd9\xde\x35\x8d\x92\x1b\x1a\xa5\xa6\x6f\x16\x1a\x5e\xd6\xcc\x2e\x71\x81\xd0\xba\x79\x0f\x08\xb4\x36\xdb\x51\x79\x07\x6a\x2b\x62\x68\x8c\x32\xe6\x18\xdc\x95\xd4\x9c\x08\x55\x92\x38\xd0\x73\xf4\x6a\xa2\x75\x0a\x52\x16\x65\x17\x92\x7b\xd8\x72\x75\xe8\xa6\xd5\x37\xc2\x67\x3b\xfd\x06\x58\x6d\xf2\x62\x93\x77\xe4\x15\x13\x7b\x06\xde\xc6\xe4\xdd\xe6\x4c\xde\x86\x24\xfa\x2c\x07\x4a\x31\x67\xdc\x24\x1f\x39\x51\xfa\xd3\xda\xc9\x89\x49\xf2\x08\xc8\x22\x53\x16\x9e\x8a\x8d\x83\x60\xff\xae\xa4\x3e\x10\x2f\xf2\x62\xf2\xa1\x5f\xe6\x85\xf0\x14\x9c\xcb\x7b\x2e\x39\x84\xa6\x5f\xdc\xc8\x9a\xb6\x56\x0c\x4a\x2f\xe8\x47\xca\xca\x7b\xf0\x51\xcb\xf2\xaa\x5f\x83\xb2\x06\x54\x6f\x00\x17\xb3\xcf\xf2\x3e\x61\x2c\xf7\x2c\x40\x07\xea\x78\xc7\x6b\xa5\x9c\x38\xb4\x10\xc5\x5a\xd1\x71\x18\x45\xf8\x5c\xd2\x69\xc3\xba\x47\x12\x06\x46\x0d\x71\x8b\xc6\x39\x30\x02\xe9\x82\x00\xec\x69\xf6\x02\xde\x40\x9f\xeb\xd7\x03\xaf\xbc\xc2\x06\xfa\xbd\x95\x91\x94\x93\x52\xbc\x9a\x42\x2c\x54\xbb\x0b\x40\xac\xd5\xd5\xde\xc3\x0d\x87\xa8\xfd\x53\xc8\x3e\x90\x17\x3d\x37\x9d\x08\xd8\xb5\x6f\xf3\x42\xf8\x45\x30\x40\xc0\xf3\xef\x0e\x34\xac\x04\xbc\xf0\x18\xf1\x08\x13\x64\x2f\xe0\x96\x21\xb1\x60\x48\x02\xad\xeb\x0d\x9e\xc3\x82\xbe\x85\xed\x20\x4c\x53\xc4\xb3\x26\x14\x38\x82\x01\x45\xc8\xba\x9b\x90\x9f\x47\xf5\x86\x68\xf9\x2e\xe5\x33\x22\x64\x53\xef\x65\x9b\xe0\x86\xde\x8e\x8e\xd7\x9a\x84\xed\xa5\x54\x62\x22\x74\x44\x7a\xbd\xba\x5d\x19\x07\x1b\xf1\x9a\x05\xe6\xba\xd5\x29\x8d\x1a\xc0\x32\x3a\x16\x35\x0f\x34\x03\x4e\xd2\xec\x15\xcb\xaf\x63\x6f\x9e\x03\xbf\xef\x01\x38\x2b\xac\x50\x55\x61\x0f\x63\xb7\x2c\xbb\x7a\x5e\xaf\x41\x5f\xbb\xd8\xa8\x27\x0f\xce\x33\xb2\x6d\x59\xab\xe0\x45\xe9\x90\x93\xee\x9d\xb8\x9b\x9d\x74\xbf\xe2\xf6\x93\xfe\xf9\x51\xa4\x6f\xfe\xf7\xeb\x9d\x61\x7f\x95\x1b\x4d\x2c\xd5\xc6\xdb\xda\x88\xca\x87\x66\x94\x13\x9b\x3f\x53\x72\x55\x6f\x65\xeb\x08\xb6\x20\x05\xd9\x1c\x2d\x1f\xcb\x8d\xd1\x9c\x94\xd7\xcf\xe0\x1c\x56\x66\x30\x1a\x47\xe6\xec\xb5\x0d\xd4\x3b\x4f\xea\x24\x37\x5a\x88\xac\x4f\xb4\x32\x6e\x94\x56\x67\x5a\x85\x60\xf5\x76\x24\xdb\xb6\x23\xe7\x20\x1e\x33\xf7\x87\x01\xe0\x1d\x9e\x3a\xd5\x88\x1e\xc7\x36\x10\xc1\xad\xe4\x87\xde\x2a\xc3\xcb\x61\xcb\xde\x33\xa8\x47\x09\xf8\x06\x6a\x22\xb1\xf0\x67\xcd\xb7\xcd\xba\x85\x5e\x39\xf4\x24\x7d\x96\x73\xc4\x13\x7b\x50\x0e\x19\x7e\x78\xa7\xff\x16\x4a\x05\xe0\x69\xcb\x28\x44\xad\xd5\xbe\x3c\xe0\x20\x99\xcd\x01\x87\x26\xbc\x23\x89\xb9\xc4\xbc\xcd\x6c\xb6\x3b\xe8\xd9\x43\xf8\x68\x82\x2a\x5c\x47\xc3\xbb\x6a\x1a\xe5\x77\x57\x39\xb8\xbb\xeb\xdb\xb6\xa5\x05\x7b\xd4\xea\x48\x5e\x6c\x5b\x9d\xbd\xf4\xd9\x6f\xb1\x60\x7f\x78\xf7\xf2\xc7\x27\x29\x2f\x07\x66\x74\xf1\x9a\x66\xc3\xe8\x4f\x5f\x4e\xdf\x3f\x11\xef\x5f\x45\x18\x06\x38\xfc\xdd\x3a\x2a\xaf\x17\x17\x45\x5e\x46\xc3\x51\xd4\xb3\xbe\x64\xb1\x72\x12\x02\x5a\x79\xd1\x70\x34\xfa\x1a\x8f\x1e\x7c\x83\x4f\x4f\xc7\x78\x34\x7a\xf0\x15\x3e\x3d\x19\x8f\x95\x32\xfd\x68\x14\xb9\x4a\xa3\x75\xad\xda\x7d\x1c\x75\x3a\x32\xe3\xf4\x5b\x7c\xaa\xaa\xfe\xd7\x18\xcb\x3f\xdf\xaa\x3f\xdf\xa8\x3f\x5f\xab\x3f\x5f\xa9\x3f\x5f\xaa\x3f\x0f\xd4\x9f\xfb\xea\xcf\xa9\xfa\x73\x32\x1e\x8f\xb1\x6c\xf7\x6f\x7f\x63\xd1\x78\x8c\xd5\x1d\x40\x04\xe1\xb2\xc3\x71\x35\x96\xf9\xd1\x3c\x2d\x9f\x5f\xa6\x79\x34\x9c\xa6\x79\x49\x70\xb4\x5a\x5e\xa6\x50\x20\x5a\xfe\x57\x84\xa3\xe5\xb7\xf2\x9f\x6f\xe4\x3f\x5f\xcb\x7f\xbe\x92\xff\x7c\x29\xff\x79\x20\xff\xb9\x2f\xff\x39\x95\xff\x9c\x44\xdb\x28\xa2\x88\x4e\xa3\x71\xf5\x3b\xbc\x20\x22\x1d\xae\x17\xb0\x3c\xea\xbe\xbb\xc1\xd6\x18\xcc\x2f\xca\xe8\x2e\xbb\xac\x9d\xa8\xf8\xcd\x77\xd9\xfb\xa7\xff\xfd\xf2\xd5\xec\xe9\x1f\xb7\xec\x32\x70\x42\x83\xf7\xef\x36\xbd\xd9\xda\xf6\x1a\x8e\xa0\x91\x3d\x5b\xee\x3e\xd4\xdb\xb9\x5f\xf0\xee\x2d\xbb\xb7\xfe\xbe\xfd\x66\x28\x85\x3b\xed\x18\xb7\xcc\xfb\x76\x8c\xe2\xb4\x95\x9b\xaa\xbe\xba\x22\xed\x95\xaf\x52\x3f\xc1\x65\xaf\xbd\x60\xad\x2b\x0c\xcf\x42\xb7\xb9\xef\x55\x13\x9f\xea\xaa\x57\xb3\xbe\x48\x4b\x3a\xe9\x67\xbc\x58\x66\xc5\x15\x0b\x4e\x5c\x90\xd3\x9f\x14\x4c\x1c\x20\xb0\x97\x9b\xac\xad\x61\x6d\x0b\x62\x5c\xe7\xf5\x8d\xee\xc0\xee\xf2\xe5\x84\x17\x79\xae\xd7\xa4\xdc\x5d\x76\x9e\x96\x7d\xf0\xfa\xd1\xc6\x9c\x63\x5a\x5b\x29\xe5\x54\x17\xbc\xf5\xe1\x15\x9e\xe0\x0c\xcf\xf1\x14\x2f\xf1\x02\x5f\xe2\x99\x5b\xc7\x8b\x5f\xf7\xa5\xd2\xf6\x7b\xdd\x8c\xfc\xe7\x02\x0b\xfa\x2e\x47\x98\x73\x39\x12\x6c\xcb\x02\x4c\x41\x47\x64\x5c\x81\xb7\x2d\x37\x9a\xa4\xdb\xf5\x3f\x71\x51\x33\x77\xed\x86\x09\x38\x8e\x60\x46\x11\x65\x9d\x62\xb3\x29\x06\xf0\xf6\xad\x1c\x23\xa3\x5e\x2f\x2e\x06\x66\x2a\x60\x29\x5b\x24\xdc\x90\xb4\x03\x4e\x94\x1b\x45\x64\x5d\xe4\xda\x01\xfa\x91\x54\x0c\xeb\xb5\xd9\xf0\x0a\x41\x10\xc7\x5e\xcf\xba\x9e\x0f\xfa\x83\xee\x60\x34\x61\xfa\x59\xf0\xa5\x1d\xc2\x1a\x77\xf3\x38\xc8\xd4\x07\x46\x4b\x18\x4e\x92\x66\x0f\xdb\x97\xb6\x30\x6e\x72\x10\x2e\x3e\xc1\x9b\x72\x4e\x44\xe7\x3c\x89\xad\xb4\x59\xf0\x74\xf2\x81\x64\x56\x2e\x7c\xae\x7c\x77\x3b\xb9\xb0\xfe\xce\x6b\xdf\xab\xda\xf7\xa4\xf6\x9d\xd5\xbe\xe7\xb5\xef\x69\xed\x7b\x59\xfb\x5e\xd4\xbe\x2f\x6b\x5e\x12\x2d\x51\xde\xf2\x0e\x6e\x43\x28\x61\x7a\xe4\xbf\x89\x5f\x68\x02\x52\xf0\x94\x29\x3c\x40\xd9\xec\x05\x7b\x2a\x1b\x8e\xdc\xd3\xd4\xa0\x2d\x7f\xb3\x69\xc5\x02\xfd\x7e\x50\xb8\x4f\x59\xd4\xd6\x0f\xc9\x76\x76\x63\xb3\x0f\xe8\x85\x64\xdb\x3a\xa1\x6c\xf6\x6a\x25\x76\xcf\xc6\x14\x38\x70\x3a\xc5\x4a\x78\x5d\xd1\xf2\x5d\xb1\x9a\xcc\x9f\x91\x4b\x3a\x21\x7e\x17\x41\xc6\x66\x63\x14\x3e\xbb\x5d\xa5\x72\xd5\xeb\x45\x05\x13\xb2\x04\xe8\xe5\xc9\x43\xad\x32\x90\x6b\xdb\x8c\xe0\x45\xb6\x05\xdf\x9a\xab\xa0\xaf\x55\x08\xa0\x63\x93\x39\x58\x31\xfa\x8f\x15\x79\x91\x79\x70\x91\xfd\xbd\x2c\x2e\x09\x38\x08\x8d\xb0\x39\x82\x26\x5f\xf9\x83\x7b\x53\x14\xe2\x65\xb1\x2a\xc9\xb3\xe2\x8a\x35\x0b\xa9\x9b\x00\x34\xaa\xd9\x84\x94\xa2\x90\xd7\xc1\x68\xec\x0a\x2c\x56\x02\x3c\xa0\x18\x1b\x5e\xd7\x84\x12\x0e\x62\x9e\x44\x29\xa3\x0b\x28\xa4\x97\x46\x59\x26\xe1\x98\x25\x33\xe7\xc9\xa9\x2e\x60\xc3\x3c\xf0\xdb\xc1\x7c\xe4\x19\xa0\xf5\xd0\x71\x80\x43\xf1\xcc\xa2\x48\xac\xf0\x01\x0b\x90\x17\xdb\x81\xbc\x2a\xf5\xa4\x9a\x81\xaa\x2d\x8c\x5c\x8b\xe7\x1c\xb7\x98\x69\x37\x4f\xe0\xcc\x50\x65\x3e\xb9\x7e\xa1\x25\xae\x6a\x69\x5c\x6d\xd5\x9c\x05\xc3\x73\x26\x47\xe5\x9e\x69\xbb\x27\x15\x2b\x8a\x25\xc4\x8b\x24\x02\x02\x03\x69\xc5\x51\xdb\x0b\xc4\x62\x7d\x4b\x72\x02\xa7\xfc\xe7\x51\x96\x8a\xb4\x4f\x2e\xb2\x3e\xcd\x92\x2f\xd6\x3b\xf6\x43\xd5\xd7\xae\xff\xc7\x3f\xeb\xb0\x8b\x2d\xeb\x9e\x70\xe5\x2b\x41\x7b\x18\xe3\x03\x01\x5c\x84\x6f\x3d\xc5\x6c\xea\xc3\xf8\x04\x53\xcf\xa3\x02\xd6\xc6\x41\xfe\x6e\x43\x9b\x0d\x31\x4e\x44\xe5\x65\xb9\xd9\x28\x77\x87\x2e\xe5\xac\xa5\x96\x46\xd1\xc3\xae\xbd\x8f\x49\x2c\x3c\x75\x34\xad\x2c\xaa\x47\xc9\x9c\xdd\x98\x86\x16\x73\x1e\x0f\x4a\x4c\xb7\x03\x2f\xe5\x34\xed\x17\x57\xac\x94\xa0\x1b\xd0\x4c\x5d\x6e\x95\x84\x90\x6b\x9e\x86\x66\x69\x45\xf2\x3c\xa6\x7e\x7e\x11\xe6\xa7\x49\xe1\xf5\x6e\x48\x86\xa2\xd7\x4b\x6d\x07\x12\xb2\x9b\x0d\x89\x0b\xb0\xd9\xd4\x71\x52\x07\xee\xdc\x6b\x98\x84\xeb\xa8\x23\x49\x0c\x26\x79\x51\x92\x98\xe3\xee\x89\x8e\x1f\xde\x0a\xba\x0a\xdb\x49\xa7\x99\xf2\x0c\x6c\x6d\xca\x5d\xe3\xbc\x28\x04\xe4\xbd\xbb\x5e\x2a\x05\xb5\xb6\x4d\x01\xf1\x5c\xb5\xca\x68\xa3\xb1\x88\x93\x92\xfe\x62\x70\x20\x5f\xb1\xbc\x28\x96\x8f\xaf\x52\x4e\xde\x10\x43\x63\xee\xa8\x5d\x70\x4a\x98\x42\x1c\x13\x70\x27\xb7\xa7\x21\xc8\x0c\x90\x6c\xaf\x17\x6f\x9f\x6a\xe4\xe1\x5a\x6f\x7b\xbe\x95\x09\x4a\x4f\x18\x00\xb9\x03\x58\xaa\x05\xc2\xb2\x68\x27\x7c\x94\x9e\xb0\x32\x6b\x57\x00\x6e\x41\x98\x2d\x0a\xe1\x23\x70\xb2\x48\xcc\xce\x36\x7e\xcb\x7f\x2a\x32\xe2\xf9\xf0\x63\x46\x13\x1f\xf4\x38\xc0\x35\xa2\x6c\xfc\x35\x94\x45\x31\x53\x86\x7e\x0f\x49\xaf\x17\x3d\x79\xf5\xec\x7d\xd4\x4d\x9c\x37\x9f\x81\x28\xfe\xb4\x5c\x12\xfe\x34\x95\xa4\x60\xaf\x17\x49\xf6\x77\x47\x89\x87\x68\x2d\x8c\xe5\xe9\x51\xcb\xa8\x48\x62\x8e\xdd\x99\x3e\xa5\xdb\x06\x55\x55\xc6\x43\x8a\xa8\x94\x1b\x7a\xe5\x56\x3f\x53\x05\x01\xfe\x94\xcd\x62\x82\xac\x3b\xd5\xd8\x46\xfd\x95\x9c\x84\x32\x1c\x80\xf5\x28\x5d\x34\x1c\x99\x53\x6b\xc1\xd8\xa3\xb6\x80\x7c\x34\x76\x8b\xab\xea\x7e\x82\xc3\xb0\x7b\x17\xb6\x75\x73\xe3\x8d\xb8\xbd\x91\xfd\x7b\xb1\x52\x17\x0c\x79\xc1\xac\x8b\xff\xfa\x95\xd3\xeb\x7d\x8c\x09\x76\x01\x7c\xc2\x9b\x59\x9b\x79\x36\xa9\xb2\xca\xb6\xfd\x6a\x25\x8c\x11\x4f\x6b\x07\xa1\xc1\xad\xd9\x41\xfa\x82\xf4\xb0\xa7\xbd\x5b\xe8\xd4\x5f\x0b\xb0\x8e\x78\xc1\x5e\xe7\x29\xc0\x56\x24\x22\x6c\x41\x9d\x37\xbf\xbe\x52\xc4\x24\x12\x3f\x32\x22\x77\x6a\xdc\x3d\x01\xa7\xc2\x19\x44\x5d\x3d\x8e\xfa\x7d\xc8\x8a\x30\x57\x0a\x96\x12\xac\x1a\xcc\x60\xfc\x1e\x4e\xd9\xd1\xbb\x60\xf7\x2c\xe2\xa8\x13\x21\x14\xd4\x4d\xb3\xac\xbd\xa2\x21\x2d\x83\x9a\x62\x90\x2e\x97\x84\x65\x4f\xe7\x34\xcf\x20\xac\xf9\x0d\xe0\x8e\x3f\xc6\x3c\x78\x87\x31\x23\x37\xad\x55\x08\x29\x92\xe1\x65\x8d\x0c\x73\x41\x1e\x6a\x19\x10\xdb\xb4\x59\x5a\xb9\xe4\x81\x25\x2b\x8b\x05\x91\x09\x57\x31\x19\x80\x77\x4f\x09\xd5\x12\x6d\x36\x32\x41\x7b\xf8\x54\x49\xe8\xc8\x3c\x47\xc2\xea\x99\xe0\xe6\x06\x6d\xab\x05\xdc\x9a\xad\x75\xa3\xc3\xfb\x4e\x42\x4c\xb7\xd9\x7e\x17\x80\x66\x4b\xeb\xcc\x8c\xff\x9a\x98\xe0\xf5\x44\xc2\x47\xae\x96\x64\xfa\xcb\xd5\x85\xe0\x44\x7b\x5d\x34\x28\xa7\x01\x02\x13\x06\xb3\xab\x9f\x9c\xeb\xcd\x1b\x04\xdf\xe8\x36\xa3\xe5\xa4\x60\x8c\x4c\x6c\xc4\xed\x06\xcc\x35\x49\x5c\x35\x0e\x7f\x8c\xd6\xfb\xee\x20\x09\xef\xa8\x46\x63\x79\xa8\xa3\xaa\x27\xda\x95\xaf\x11\x08\xe4\x10\x24\xb3\xaf\xb3\x6d\x6b\x62\xdc\xf9\xac\x98\x72\xfe\xb5\x83\x90\xe1\xee\x5a\xaf\xda\xf0\xfd\x5a\x13\x0d\xad\x83\xbc\x09\xd5\xd1\xda\xc0\x0d\x09\x8f\xaa\xed\xda\x5a\x1b\x6f\x0a\x6e\x96\x4b\x4e\x64\x3f\xaa\xa8\xb9\xe4\x45\x40\x54\x8b\x16\xa2\x9a\xdb\x54\x15\xfa\xdd\xd2\xc7\x5c\x12\xd0\x7e\xa5\xb5\xe7\xe5\x88\x81\x53\x7b\xe3\xee\x58\xf7\x19\x73\xac\x2e\xee\x75\x46\x72\x91\xfe\x15\x9c\xcc\xe6\x22\x7d\x3f\x4c\x2b\x5b\x49\x95\x7d\x26\xd3\x4b\x24\xa9\xe9\xe2\x3b\x49\xc9\xcb\xf2\x3f\x91\x59\x2a\xe8\x25\x39\x83\x90\x19\x61\x1a\xc4\x99\x87\x09\x3e\xd3\x6a\x44\x08\x0d\x8b\x47\xa6\xd8\x6b\x80\x56\x58\xd5\xa4\xb5\x56\x4d\x4d\xaf\xef\x5d\xaf\x69\x52\x4f\x6b\xaf\x6a\x7a\x7d\x6f\x7a\xe8\xf5\xbc\xba\xbb\xba\x75\x6a\x79\xaf\x55\x16\x84\xed\x2a\x36\x9b\x14\xf5\x7a\x00\xa1\x8c\x96\x9a\x80\x37\x40\x2d\x70\x0a\x21\xad\x54\x3c\xe4\x66\xa3\xd5\xd1\x8e\xe3\x7b\x35\x27\x24\x8f\xb0\xc0\xeb\x49\xba\x14\x2b\x0e\x12\xc8\x65\x5a\x96\xf4\x92\x28\x5d\xc4\xad\xa4\x4d\x02\x57\xf4\xee\x03\xdb\xd6\x7c\x85\x2a\x3d\xd4\x80\xe6\xda\x4f\x4b\x25\x8d\x1c\x55\xa7\x6a\x27\xbc\xd6\x55\xa3\xed\xf5\x56\x62\x5f\xd1\x67\x87\x50\xf8\x2d\x94\x9c\x15\xb3\xca\x2b\x8a\xdc\xb2\xf5\x0a\x55\xcd\xa9\xed\x41\x35\x9f\x72\xd4\xb7\xee\x00\xb4\x84\x66\xc9\x75\x7c\xe9\xc7\xc0\xaa\xcb\x53\x46\xc5\x18\xaf\xeb\xa2\xee\x50\x10\xee\x09\xbe\xb1\x27\xf7\x68\xf3\x83\xda\x46\xd6\x9d\x6d\x25\x93\x86\x51\x54\x55\x08\xd7\x46\x08\x34\x49\x84\x47\xe9\xd8\xb8\x6a\x55\x3a\xaf\x46\xbc\xe3\x5c\x1b\xb5\xd5\x43\xf8\xd2\x77\xd3\x58\x6b\xdb\xdc\xe0\x11\x1e\x95\x37\x6c\xde\x56\xdd\xdd\x83\xa5\xa3\x23\x3c\xca\x6f\xd8\x85\xab\x7b\x50\x1f\xaf\x56\x22\xc2\xa3\xd5\xed\x3a\x79\x05\xc2\xc9\x5d\xbd\xb4\xd2\x86\x11\x1e\x4d\x6e\xb3\x2e\x8d\x76\x0e\x5b\xa7\x96\xee\xb3\x5b\xae\xdb\x4d\x47\x50\x27\xb7\x22\x3c\x9a\xdf\xb4\xeb\x46\x1b\x07\xf4\xe9\x91\x4d\x11\x1e\x4d\x6f\xd3\xa5\xdf\xc4\xee\x1e\xdb\x51\x47\x84\x47\xcb\x1b\xf6\xbb\xa5\xa1\x3d\xbd\x37\x48\xb8\x08\x8f\x16\x37\xed\xb9\xd9\x48\xad\xd7\x4b\xcf\x13\xec\x15\x38\x6a\x37\xbe\x03\x92\x93\x87\xe2\x3b\x17\xf5\xf4\xf8\xd8\x69\xcf\x13\x1d\x69\x3a\xfa\x3f\x93\x62\x01\x3e\xf9\xbb\x49\xc2\x07\xac\xc8\x88\x8a\x71\x18\x47\xff\x47\x90\x8f\xb5\xe4\xcd\x26\x72\x09\x60\xb1\x6c\x74\x67\x7d\x57\x57\x76\x34\xcf\xcd\x68\x1e\xca\x06\xbb\xc4\x71\x8a\x9b\x8d\xff\xe5\x88\xbb\x9d\xd2\xfd\x08\xa1\x87\xc8\x23\x1b\x6b\x2c\x74\x10\xca\x91\xd4\x73\x2b\x6b\x13\x66\x87\xf7\x51\xe9\x85\xd9\x9b\xee\x1f\x2b\x52\x8a\xc7\x06\xbd\xff\xc0\xd3\x05\x09\x94\xa1\x14\x59\xaa\x8b\xcf\x94\x4a\xf9\x4a\x90\xec\xad\xb8\xce\x21\x98\x91\x84\x27\x93\x0c\x35\xc0\xc8\x5e\x14\x0a\xa0\x72\x0f\x31\x65\xe8\xec\x67\xbe\xce\xd3\x6b\x08\x55\xd5\x70\x91\x80\xb6\xdd\x8e\xb6\x2e\xc8\x3d\x24\xdf\x2c\xa9\xad\x36\x02\xa0\x5e\x52\x13\x40\xa0\xc7\xe5\x59\x47\x9e\x57\x08\x1d\xdd\xf2\x11\x5e\x85\x5e\x4a\xf3\xbe\x48\x67\x7b\x5f\xe2\x3f\xb7\x4e\x5e\xdd\x28\xd6\x3d\x04\x6e\xb3\x05\xbd\xe1\x6c\xf5\x83\xc1\xdd\x54\x0e\x76\xa8\x05\xb4\xa8\x04\x80\x3d\x9e\xaf\x16\xe0\x4e\xfb\xfc\x37\x52\x05\x98\xfe\x47\x15\xe0\x7f\x83\x2a\xc0\x32\x89\x59\xed\xa5\x9d\xd6\xbe\x8b\xda\xf7\xa7\xd6\x14\x98\xc6\x71\x76\x83\xc7\x7d\xff\x41\x7f\x6e\xdf\x7a\x67\xb3\x9c\xbc\x28\x9f\x10\xca\x66\x8a\x6c\xc8\x9e\x5c\x83\xa0\xda\x5c\xca\xdd\x53\xbf\x78\xeb\xd3\xb0\x7d\x85\x54\x12\x66\x2b\x5d\x76\xe2\xe4\x40\xa2\xa3\x5d\x6d\x65\x9b\x4d\xb4\x90\x45\x81\xb2\x0e\xc4\x22\xc4\xc8\xd5\x7b\x3d\x15\xa9\xfa\x62\x25\x84\x12\x0c\x3a\xb1\xa0\x28\x96\x72\xf5\xd2\x59\xaa\x84\x86\xa4\x9e\x64\xf8\xd6\x73\x99\xfe\x8e\x7c\x14\xea\x29\x8f\x16\xec\x4f\x4c\xd0\x1c\x86\xb9\x5a\x9a\x52\x7b\x41\x71\x76\x58\xb1\xa4\x7b\x3a\xdc\x21\xc6\x52\xf5\xc1\xd2\x5c\x41\xeb\x69\x4e\x27\x1f\x94\x66\x5a\xd3\x19\x93\xe1\xe4\xcd\xcc\x3d\x6b\xd1\xcd\xa6\xdb\xec\x66\xb3\xd9\x09\xef\x50\x52\x59\x07\x75\x34\x91\x43\x89\xda\xb3\x37\x9b\x93\xae\x5b\x09\x13\xc2\xf6\x86\x2b\xf1\xab\xc3\xd8\x00\xf9\x8f\xe4\xfa\xa0\x0d\x19\x9f\x2a\x87\xd4\x1f\xc8\xf5\xd3\x22\x23\xbb\x1e\x56\x6d\x27\xc3\x07\xf7\x83\x3a\x31\x69\x88\x7b\x5a\x04\xd6\x2d\x83\x1d\xde\xff\xc6\x6f\xc8\x17\x91\x6f\x79\xd6\x75\xbb\xe8\x9d\x65\x37\x6e\x26\x1a\x3e\xaf\x33\x0d\x41\x83\xcf\x59\xa6\xe5\x96\x87\xae\xcb\x09\x26\x72\xfd\xeb\x02\xb3\x9d\xfb\x52\xd3\xa6\x0f\x75\x68\x01\x13\x9e\x62\x8b\x7e\xc0\x21\xa0\x6c\xab\x6a\x6c\xf6\x6f\x26\xcd\x6e\xc2\xc7\x3e\x51\x69\x01\xac\x7b\xc8\x15\x83\x69\x31\x59\x95\x31\xc2\x25\x11\xef\xe8\x82\x14\x2b\x11\xd0\xc8\x20\xab\xd5\x82\x59\xc1\xaf\xeb\xba\x1a\xca\xf2\x00\x06\x14\x47\x80\x9d\x0c\x4f\x73\x24\xe0\xaa\x73\x69\xb1\x3e\xab\xb8\x7b\x22\xff\x53\x64\x37\x3e\xb1\xff\xef\x9e\xba\xff\x4e\x94\x4f\x2a\x6c\xba\x96\x70\x5f\xa6\x42\xaf\x59\x2c\x50\x35\x91\x5f\x10\x94\x12\x00\x05\xbe\xa9\xfc\x5e\xb6\xd6\x85\xf2\xe0\x82\xf0\x44\x96\x69\x48\x39\x7d\xfe\x4c\xc3\xaf\x8c\xf7\x62\xba\xbb\xae\xd0\x9e\x25\x5e\x28\xbc\x1f\xd9\x58\x92\xf0\xe9\xbd\x56\x40\x7c\x4b\x3f\xd1\x3f\x52\xb7\x6b\xd2\x0d\xe9\xa2\xc8\xae\x9b\x0f\x8a\xed\xac\x9d\xe4\x31\xfb\x25\x5c\x5a\x7d\x73\x58\x22\x54\x35\x66\xfc\xa9\x9e\x6e\x5a\x90\xc1\xbe\xbb\x73\x17\xae\xb9\x3d\x54\xd2\x2c\xbb\x19\x48\x2a\xe4\x8b\x05\x6a\x64\x48\x84\x47\x6c\xbf\x60\x21\xdb\xd5\x02\xc2\x99\x2f\x55\x98\xb6\x95\x7e\xaa\x4e\xe4\x88\xde\xaa\xaf\xa7\xfa\xa4\xed\xef\x47\xdf\x65\x4a\x7c\x7b\x8b\x9e\x4c\xfd\x43\xfa\x72\xd7\xca\x61\x42\xd9\xdd\x4d\x1c\xdc\xe3\x73\xc9\x91\x1f\x22\xa5\xdd\xd5\xc0\xee\xde\xda\x50\xd3\x61\x62\xdb\xfd\xcd\xec\xee\xb9\x76\x10\x0e\x13\xe3\xee\x6c\x61\x4f\x7f\x2d\xa2\xc5\x03\xe4\xb8\x7b\xda\xa8\xf5\x99\xf9\x76\x0b\xcb\xdb\x0b\x11\x3e\xb9\xbd\xc2\xad\xa4\x08\xbe\x71\x01\xbe\xc0\xd7\xf8\x1c\x5f\xe1\xe7\xf8\x23\x7e\x85\xdf\xe2\x77\xf8\xa5\x93\x32\xbc\x76\xee\x04\xf8\x36\x95\x54\x10\x2e\x78\x42\x05\xbe\x55\x25\x95\x6f\x51\x49\xe5\x75\x95\x54\x1e\x30\xd1\xbc\xc9\x44\x33\x4f\x25\xd5\x0e\xf6\xf1\x6f\x24\x12\x79\xfa\x1f\x91\xc8\xbf\xbb\x48\x44\x89\xce\x3f\x24\xeb\x0a\xbf\x49\x46\x91\x28\x96\x11\x8e\x72\x32\x95\x07\x96\xd3\xd9\x5c\xfe\xbd\xa2\x99\x98\x47\x38\x9a\x13\x48\x50\x31\x24\xfe\xee\xc9\x51\x8c\x49\x05\xad\x27\x6c\x37\xba\x30\x09\x65\x3d\x21\xaf\x27\xac\xea\x09\x93\x7a\x42\x56\x4f\x98\xd7\x13\x6e\x6e\x7b\x11\x7e\xcf\xb6\x8a\x6b\x66\x44\x74\xe6\x05\xa7\xbf\x14\x4c\xa4\xf9\x6b\xa7\x20\x13\xbc\xae\x4a\xae\xa7\x59\x6a\xb3\x89\xd2\x95\x28\x22\x50\x16\xbf\x24\x5c\xd0\xc9\xee\x26\xea\x65\x82\x06\x3c\xf5\xf3\xb6\xba\x5e\xb6\xe6\xc5\xce\x67\xca\x27\x93\x4e\x7d\x91\xc5\x5a\x0b\x5e\x93\x67\xd6\xf5\xb5\xd7\x88\x65\xb8\xbb\xa7\x47\x7e\x17\xe7\x92\x85\xa0\xc5\xaa\x7c\xa6\x4b\x74\x93\xe4\x83\x66\x84\xdb\xf2\xac\x33\x0e\xbe\x62\x83\x72\x32\x27\x72\xab\xc6\x91\x66\x08\x23\xa5\xb1\x68\x38\xe9\xe5\xea\x22\xa7\x93\xc7\xaf\x5f\x0c\x68\xf9\x6a\x49\x98\x13\xaa\xc8\xaf\xa4\x7b\xea\xf3\xe9\xc6\x63\xd3\xe3\xd7\x2f\x7c\x46\xdc\x4b\x8e\xc3\x46\xad\x7e\x59\x63\x9c\x09\xc1\x04\x20\x62\xcb\x5a\xc0\xae\x8d\xba\xbd\x12\x67\x9c\xaf\x68\x86\xd5\x70\x86\xde\xd0\xb0\x81\x97\x4a\x34\x5f\x58\x4f\x53\xd7\xd5\x5f\x55\x15\x7a\xae\x13\x46\xf2\x27\x7f\xe2\xd7\xc6\x88\xe3\xb5\x7d\xef\xbb\x50\xae\x46\x6d\xd6\xa5\xcb\xba\xae\x65\xc1\xb1\x3e\xaf\x25\xaa\x53\x7e\x55\x4b\xd5\x87\xfe\x79\x2d\x59\xe3\x80\x8f\xb5\x64\x8d\x12\xf0\xab\x5a\x7a\x21\xe6\x84\xc3\x13\x52\x19\xe1\xb7\xb5\x4c\x05\x9c\x08\xbf\xab\x77\xed\x6b\x83\x46\xf8\xa5\xce\x7e\x6c\x9c\xaf\xe8\xe5\xf9\x73\xed\x14\x38\x0b\x94\x7a\xc9\x3f\x34\x8e\x5c\xb3\x6c\xd3\xe6\xa3\x59\x46\x2e\x6f\x84\xc3\x30\x35\x30\x36\xaf\x88\x6f\xce\xd3\x14\x75\xbc\xc8\xb6\xd9\x1f\xd5\x8c\x7c\x64\x57\x5e\xab\xf5\x2d\x19\xe1\x0f\x5e\xae\x3d\x2e\xeb\xc2\xee\x3c\xf9\x0b\x83\x94\x49\x7d\xc3\x4f\xac\x24\x2c\x43\x4f\x1a\x84\x9d\x5e\xde\x50\xeb\x02\x99\xef\xca\x3f\x4f\x05\x7b\xc1\x68\xa0\xf6\xa9\x52\xea\xa7\xe8\x6e\x47\x30\x74\x50\xa8\xbc\xa0\x05\x69\x37\x6b\x5e\x39\xf3\x96\xa0\xb0\x2c\x76\x20\x81\xad\xa1\x15\x87\xd6\x5a\xf1\x8d\x2f\xbb\x2a\x98\xc2\x40\xdd\xd3\x40\xf0\xad\x92\x6b\xd3\xc2\x04\x19\x79\xab\x41\x55\x27\x77\x02\x13\xaa\xb4\xf8\x50\x22\x07\x23\xdc\xf3\xdd\x3d\xd6\x74\xac\xdb\x66\xd8\x6d\x9d\x62\xab\x76\x76\xc1\x9e\xca\xee\x5a\x26\x0b\xe9\xcd\xd9\xd6\x5b\xd9\x31\x34\x8b\xc7\x54\xbb\x16\x77\x25\x2a\x0a\xa2\xda\xa7\x4b\x1d\xc1\x89\x4c\xb5\x5e\x31\x20\x27\xf5\x13\x10\x92\xfa\xa9\x90\x90\x75\x7b\x3e\x57\xc1\x8d\x5a\x71\x45\x12\xe4\x36\xf1\x43\xd0\x88\xbd\x5f\xee\xb4\x68\xb8\xa6\x01\x7a\x13\x13\x2f\xb7\x4c\xad\xe6\x5d\xbc\xd7\xe3\x03\x91\x5e\xbc\x60\x19\xf9\x08\xd1\xbb\xb8\x11\x65\x56\x56\xa6\x5a\x6f\x49\xcd\xea\xcc\x21\x87\x98\x20\x87\x3a\x62\x82\x2a\xee\x2b\xfa\x5a\xcd\xff\x6d\x5b\x46\xd1\x08\x3b\xcd\xe3\x3c\xe4\x88\xf0\xcd\x8c\xdc\xf6\x40\x00\x7c\xa0\xc9\x4d\x6d\x46\xa3\x2e\xda\x06\x4e\x4f\xb6\xa4\x6f\x36\x3b\x07\xee\x9b\xf4\x81\xae\x6d\x93\x88\x1b\x32\x5c\x27\xcb\x86\x14\x6f\xdf\x61\xc3\x02\x6f\xdb\x9c\xc3\xb4\x52\x86\x92\xeb\xe0\x26\x1c\x96\x72\x0b\x2e\x52\x31\x99\xbf\x53\x33\xff\x8b\xdc\xfb\xc3\x3c\xe9\x9e\x56\xee\x58\xe2\x55\xe2\x9d\x5d\xcb\x51\x3b\x5a\xd1\x93\xd1\x0b\xac\xa5\xf4\x4d\x88\xe0\xcf\x3d\x47\x5c\x9b\x5c\xdb\xcc\xb0\xd9\x30\xb0\x31\x5d\x68\x58\x35\xbf\xe5\x32\xbf\xf6\x94\xd1\xe5\x64\x56\xa8\xaa\x27\xbb\xb8\x5a\x1d\x96\xac\x2d\xbe\x19\xf2\x16\x4a\x1c\x5f\x7a\xd9\xf5\xa9\x62\x8f\x98\x19\xd6\x9d\x4c\xa8\x83\xe3\x0a\xa0\x0a\x62\x6c\x0c\x4a\xf9\xd5\xeb\xc5\x96\x87\xd4\x49\x12\xab\x41\xf0\x6b\x89\xdd\xbc\xb4\xe3\x68\xf9\x31\x32\x0c\xa1\x57\x5c\xe2\xbe\xb3\x98\x29\x1c\xe8\x27\x42\x05\xcc\x34\x4a\xd4\x68\xab\x51\x1d\x72\x7b\xbd\x38\xf8\x36\xec\xa7\x61\x4e\x5b\xca\x9b\x76\x83\x74\xd3\x25\x8c\x25\x64\x61\xbd\x26\x00\x31\x43\x13\x0a\x45\x07\xe9\xdb\xa6\xa9\x50\x38\xd4\xd2\xd8\x3c\xcc\x09\xea\x99\xcb\x48\x14\x4b\x84\x5c\x74\x5d\x88\xed\x0d\x95\x50\xbd\xfd\x11\x1d\xf7\x7a\x71\xc4\x56\x72\xf5\xfc\x90\x23\x26\xf7\x4c\xe8\xee\x4a\x22\x2c\x1f\x4d\xb1\x2b\xa0\x06\x30\x6c\x2f\x16\x45\xc7\xae\x24\x72\xe1\xf8\x82\x31\xf5\xe5\x25\xfa\xc6\xc6\x5d\xa4\x08\x66\xeb\x6d\x1d\x1c\x7c\x8d\x20\x0e\x9c\x6d\x34\x38\x01\xee\xf2\x64\xee\x37\xae\x5f\xa4\xee\xb7\xbb\x4f\x61\xdf\x61\x77\xab\xaa\xc5\xc4\xde\xe5\xaa\x57\x1e\x7b\x97\xac\x5e\x49\xec\x5f\xb6\x66\x9d\x1a\x07\x20\x09\xe7\xb4\xef\xbe\x6d\x3d\x8d\xbb\xaf\xf0\x96\x13\xca\xaa\x16\x66\x56\x73\xaf\x6d\xfe\xfc\x4d\xe0\x17\xe5\x7d\x8b\x2b\xa6\x59\x47\x18\x1e\x12\x76\x49\x79\xc1\x80\x15\x70\x41\xa6\x46\xad\xe4\x7b\x34\x86\x58\x50\xed\x59\x21\xcf\xdd\x4e\xfe\x5f\x15\x7c\x31\x2f\x72\x12\x55\x15\xbe\x48\x9e\xc6\xb3\x40\x30\xee\xd8\x96\x11\xfb\x84\x2a\xdf\x10\xfd\xac\x42\xf8\xba\xde\xa1\xc7\x42\x8e\xe8\x67\xe8\xf0\xbc\xde\x21\x30\xa6\x77\x50\x67\xd7\x71\xdc\xae\xea\xed\x2a\xde\x76\x94\xde\xb5\xe1\xe7\xf5\x86\x35\x7b\x3c\x2a\xef\xda\xf2\xc7\x7a\xcb\x9a\xc3\x1e\xe5\x77\x6d\xf9\x55\x63\x1b\x69\x26\x7d\xb4\xba\x6b\xd3\x6f\xeb\x4d\x07\x7c\xfe\x68\xf2\xe9\xb6\x0c\x38\xa9\xc7\xef\xea\xfd\x19\xd1\xc1\x28\xfb\xe4\x16\x10\xe0\xd6\x43\x95\xcb\xaf\x65\x2f\x4a\xcc\x25\x87\xf1\xb2\xb1\x0b\x42\x49\xc5\x68\xfe\x09\x47\xd3\xa2\xeb\x53\x33\x93\xdd\x92\x21\x47\x5a\x5f\x1e\x05\xac\x03\x14\xd2\x9b\xd5\x10\x9e\xf9\x0f\x45\xb5\x96\x81\x73\x38\x4c\xe7\xbc\xa5\xde\xee\xb6\x15\xeb\x72\x98\x5a\x79\x5b\xc5\xdd\xad\x73\x5f\x65\xfe\xf2\x86\x3d\x70\x5f\x4d\x3e\xe8\x65\xe6\x3f\xa4\xfd\x7d\xef\x43\x5a\xbb\xf3\xbd\xbd\xae\xc0\x7e\x73\xef\x79\x6f\x1e\xb0\xd7\x57\xec\xe3\x3f\xda\xbd\xe7\x7d\x5f\x3b\x18\xd1\xf7\xc5\x25\xe1\x79\x7a\x2d\x7f\xce\xc5\x22\x7f\x97\xce\xe4\x4f\xdd\xaf\x36\x67\x8a\xbe\xf7\xee\x9d\xe8\xfb\xb9\xff\x91\x51\x1e\xe1\xa8\x97\x0a\x01\x7e\xc9\xbe\x37\xb8\x2c\xfa\xde\xbc\x4a\x7c\x6f\x9e\x29\xbe\xd7\xcf\x16\xdf\xab\x47\x8c\xef\x03\xdc\x14\x7d\xef\x5e\x2a\xa3\xef\x0b\xf6\x83\x64\x93\x5f\xf8\x1f\x60\x99\x23\xbf\x94\xb6\x8e\x0a\x0e\x64\xbf\x7f\x24\xe9\xe5\x21\x7e\x01\xef\x83\x5f\xc0\xfb\xf8\xf4\x2b\x3c\x32\xd8\x6a\x7c\x4b\x1f\x81\x27\x38\xca\xe8\x25\xfc\xfc\x12\x9f\xec\x71\x12\x64\x08\x89\x7e\xc1\xe9\x8c\x32\xa8\x75\xdf\xf3\x0e\x88\x47\xdf\xe2\x68\x91\x5e\x5f\x90\x3e\x65\x7d\x62\x44\x9d\x23\x39\x5e\xb9\x20\x4d\x29\x68\x7d\x35\xf5\xcc\x4e\xf0\xa8\x4d\x68\x3a\x1e\x63\x98\x37\xb8\xc0\xdc\xe9\x77\x33\x04\xd4\xfd\x1b\x38\xeb\x54\xff\x3b\x1c\x36\x66\xf3\x19\x58\x9c\x3e\xd8\xe7\x2e\xd1\x64\xbb\x9e\xbe\xc5\xd1\x6e\xe3\x80\xd1\xe9\xd7\xf8\x14\x5b\xc8\x38\x31\x30\x34\x77\xfa\xb5\x4c\x7e\x70\x8a\xdb\x89\x44\xb3\x7c\x9d\x9d\x6b\xdb\x8f\xa0\xfd\xaf\xc7\xde\xd8\xe4\xff\x0e\xa9\xf4\x55\xbd\x52\x64\xc7\x5a\x33\x2b\x84\x15\x94\x83\xfd\xda\xed\xe2\x31\x8e\xf6\xf4\x42\x59\x7f\xa9\xb7\x87\xf2\x47\xd9\xd6\xdb\x97\x63\x03\x8c\x08\x0e\xb4\x4c\xfb\x06\x52\xbe\x01\x67\xab\x5f\xe2\xd1\x83\x6f\xb5\x4f\xcd\xfb\xf8\xf4\x4b\x37\x92\x13\xb7\x3b\x0e\x7a\x9b\xd4\x2d\x3c\xd0\xbb\xf1\xbe\xfe\x7b\xaa\xff\x9e\xa8\xbf\xff\x35\x1e\x9b\x43\x69\x7b\x7f\xe0\xed\x6f\x65\x96\xb8\xb5\x08\x1c\x6e\x2b\x7c\xf7\x2f\x85\xfd\xad\x36\x4c\xda\x76\x56\x71\xd6\x85\x8d\x62\x5f\x7a\xc5\xb6\xda\xcb\xed\xac\xe5\x59\x15\x1e\xd4\x7a\xb3\xd4\x37\x63\x3c\x8a\x40\xe2\x48\xe5\x6d\xaa\xd7\xec\x6b\xa8\xab\x7e\x7f\x65\x40\xf6\xf5\xd8\xee\x3b\x56\x14\x01\x70\x01\xa2\xe6\x73\x6b\x0f\x05\x58\x4e\xee\xea\xe2\x9b\x3b\x74\x01\x9a\x39\x44\x21\xfd\x9d\x9d\x7c\x7b\xd7\x4e\x72\x75\x93\xec\xec\xe4\xbf\x6e\xd6\x89\xc2\xe1\xe6\x7e\xd5\x8d\x3c\xd8\x8f\x89\xef\x07\x87\xd5\xf8\xa5\x3d\x09\x1d\xcb\x9a\xcc\x9d\xf8\x72\x57\xb6\x6e\x79\x37\xee\xdd\xe1\xea\xf6\xd4\xa1\xfa\x5d\x98\xf6\xfe\xfe\x3b\x12\x10\xd5\xbc\xc8\x33\x79\x32\x42\xac\xd3\xc0\x36\x19\x2d\x97\xfa\xee\x50\xe6\x6f\x3e\xc6\x38\xf0\x36\xd9\xe9\x7c\x77\x9e\x96\x12\x71\x81\x84\x47\x39\xe0\x95\xf3\xcc\xfa\x14\xa2\x82\x00\x6a\xf3\xa3\xb5\x47\x85\x24\x47\xa6\x92\x62\x91\x78\xa6\xd5\x57\xef\x5d\x29\xcd\xc3\x1c\xf8\xde\xa2\xfd\x6d\xf6\x74\xbf\x39\x39\xfb\xdf\xff\xf5\xec\xf7\x97\xff\xef\xab\x27\xed\xe4\xac\x23\x85\x2c\x01\xda\x73\x04\x9c\x77\xe0\x5a\x29\x1c\x83\x42\xbf\xbc\x11\xf9\xa7\xea\x3e\xf0\x36\xe5\x7d\xef\x77\x6d\xb3\x06\xed\x07\xd8\x40\xfb\xfc\x8a\x5c\x99\x36\x2a\x74\x3b\xa1\xa5\x48\x1f\x4d\x03\x8c\xe4\x3d\x7d\x1f\x1a\x1e\xe3\xd1\x8d\xd0\x8a\x46\x2a\x0f\x9a\x38\xe5\xc6\x18\xe5\xd4\x9c\xa9\x5b\xa1\x0e\x45\x71\x7a\x24\xf1\xae\xd1\x1d\x80\xb0\xf6\x1d\x6f\x47\x62\x47\x3a\x90\x6b\x99\x4e\xbd\xd8\x6d\x11\x8e\xfc\xdf\x39\x11\xbb\xbc\x70\x7f\x92\x93\xf7\xd9\x8e\x77\x8b\x01\xe9\x6f\x7e\xb2\xff\xfe\x3f\x6f\x7e\xf9\xe5\xe5\xec\x78\x0b\xa3\x7a\x2b\x66\xb4\xc1\xdd\x7a\x3c\xa5\x63\x51\x0b\x66\x35\xbd\x2d\xfb\xe8\x3e\x9d\x9e\xb4\xfc\xd2\xba\xe7\x7b\xd9\x4e\xc3\xa4\xaa\x9f\x4f\xf2\x15\xdf\xcd\xc6\x6e\x67\x53\x0f\xe2\x67\x76\xb2\x2c\x7a\xb5\xcd\x11\xc2\x21\x6e\x52\x1c\x47\x3b\xd3\xa0\x6b\xee\x60\x1a\x9a\xad\x85\xbc\xc0\x68\x5f\xcb\x96\xdf\x08\xa9\xb0\xed\xed\x3f\xb8\x4d\xfb\x0f\x76\xb5\x0f\x3c\xad\xa6\x48\x22\x5e\xc0\xed\xae\xac\xef\x34\x0d\x13\x89\xf4\xc2\x04\x7d\xa9\x31\x5c\x5f\x63\xa0\x3c\x94\xae\x8f\x44\x30\x27\x91\xc3\xea\xc0\x3e\xb9\x27\xf2\x48\x2d\x92\xa9\x66\xde\xc7\xa1\x9a\x3d\x92\x96\xef\xb2\x3e\x50\xa3\x03\xd8\x51\xc3\x70\x86\xcd\x86\x6d\x91\x8f\xcb\x94\x65\xa4\x3e\x0c\x27\xf3\x08\x4a\xdb\x49\x35\x16\xa0\x31\x65\xc1\x57\xc4\x9f\xf5\x37\x40\x3c\x37\x79\xa3\x56\x15\xfe\x56\x46\xc6\x33\x57\xb5\xe4\x63\xdd\x52\xa4\xbd\xa2\xb6\xd6\x0a\x2b\xa9\x43\xdb\x5e\xe1\x03\xb9\x6e\xeb\xc7\x60\x84\xf6\x4a\xbe\xd3\xc8\xb0\x9e\x67\x84\xb1\xa3\x2a\x38\x42\x68\xa9\x28\xd1\xcc\xde\x61\x6e\x67\x43\x76\xb3\x3a\x5f\x6f\xe1\x74\x9a\x00\xdf\xde\xc3\x6e\x3e\x67\x67\x0f\xfe\xc4\x77\x70\x52\x27\xb7\xef\xc1\xae\xfd\x8e\xe6\x4f\xef\x08\xa2\x43\x38\xce\xfb\x77\xec\xe3\x10\x86\xf3\xc1\xed\xfb\x98\xaa\x7b\x69\x67\xf3\x5f\xde\xbe\xf9\x0b\xb8\xeb\x76\xb6\xfe\xd5\x1d\x07\x7f\x47\xd9\xc5\xfe\x0e\xee\x2a\xba\xa8\xf7\xd0\xca\xef\x1f\x20\x79\x0d\xc8\xdb\x6f\xf1\xe9\xb7\x77\x0f\x21\x33\x29\xd8\x24\x15\x86\x7f\x5d\xb1\x9c\x00\x11\x55\xe7\x5d\x99\xc7\xc0\x7e\x62\x0a\x57\xdf\x74\x9f\x8b\xb8\xfd\xa7\x22\x6a\xaf\xaf\x5e\xfc\xfd\xe4\xcb\xe9\xb7\xed\x44\x6d\xba\xa4\x21\x87\xea\x68\xd2\xc0\xe9\xb1\x4c\x08\x1c\x58\xca\x04\x7d\xf3\x7b\x51\x3f\xa3\xef\x35\x68\x9f\x7a\xae\x6e\x5a\xb9\xd5\x6f\xbc\x2d\xfd\xb5\xe3\x32\x2d\xe9\xe0\xde\x6d\xdd\x4d\x8f\x3d\x01\xea\x3b\xc3\x3f\x44\x4f\xf5\x93\x97\x77\xcd\x5b\x0d\x40\xd8\x5f\x8e\xc6\x69\xcb\xb7\xc4\x47\x6b\xae\x4f\x65\xb4\xe5\x9b\x01\x8d\x43\x92\xb0\x7e\x58\xe5\x6c\xef\xff\x97\x77\x40\x55\xb6\xc2\x56\xed\x8c\x91\x3a\x98\x8e\x59\xf0\xb9\x8a\x3a\x53\xe1\xd8\x8f\x06\xdf\x5f\x1f\xf2\xb8\x31\x08\xbf\x9c\xeb\x64\x77\xb9\xda\x2b\xcf\xce\xb2\x97\xcd\x36\xc7\xe3\x10\x06\xe6\xf7\x03\x0b\x2e\x1f\x6b\xfd\xfb\x02\xa1\x5e\xa3\x6d\xeb\x7c\x7d\xf8\xd6\x99\x78\x27\xe1\x50\xa8\xd5\x0f\x75\xfd\xd4\xfb\x9c\xad\xf7\x84\x17\xe1\x83\xde\x56\x42\x6d\x8f\x7f\xb2\x75\xf9\xaa\x91\x73\xdf\x31\x90\x9a\x94\xbb\xe1\x9a\xb6\x96\xf3\xc1\xb6\xbb\xa4\xa8\x5d\xe3\xcd\x12\x00\xee\x3d\xd3\x57\xaf\x5a\x3b\xcb\xa8\x65\xda\x03\x6e\x72\x40\x43\xc1\xf2\x1e\x7a\xbc\xbf\xbe\xcd\xf1\xfe\xcf\x46\xfd\xcf\x46\xfd\x0c\x1b\xb5\xfe\xeb\x20\x45\x84\x93\xbd\x8b\x78\x03\xbd\x8d\x86\xdc\x79\xfb\xab\x94\x96\x4a\x3f\xb0\xcf\x49\xdf\xe2\xfb\x3e\x25\x7f\xab\x07\x33\x2f\xba\xa4\xd7\xd4\x3e\xf2\xbe\x5d\xcc\xbe\x23\x6e\xe4\x14\xce\x74\x9a\x15\x2c\xb7\x4f\x53\x87\x48\xb9\xc9\x3f\x22\x6c\x1e\xbe\xae\xa8\xdc\x0c\x9f\x94\x17\xb8\x15\x0f\xb0\x3d\x62\xe2\x67\x23\xfc\x6b\x41\x54\x5a\xe2\xc5\x6c\xf7\xc7\x09\xf1\xb5\x2e\xca\x22\x5f\x09\x02\xce\xd7\x06\x4b\xab\x05\x9d\xdc\x8b\xd3\x95\x28\x36\xca\xd3\x34\xba\x07\xbe\x3b\xa7\xf4\x23\xc9\xc2\x92\xa8\x1e\xd3\xea\xa2\xc8\xae\x9d\xd6\x7a\x42\x1e\xd2\x84\x86\x9e\x46\x1f\x22\x3a\x8d\xb7\x8f\x8b\x22\x1c\x77\xf9\x66\x03\x7b\x92\x4e\xc0\x17\x99\xeb\xae\xd7\x63\x03\x41\x4a\x11\x8b\x41\x71\x49\xf8\x34\x2f\xae\x8e\xdd\xcf\xf7\xde\xef\xbf\x1a\x1b\xb2\x0e\x3d\x6a\x1b\x64\xe5\xb1\x4d\xc4\x19\xb9\xe8\x13\x6b\x55\xc4\xbd\xac\xbf\x68\xbd\xa8\xac\x66\xe2\xa5\xdd\x41\x69\x0f\x07\x07\x1b\xbd\x34\x8d\x55\x8a\x5d\x86\x30\xe9\x76\x43\x98\xb2\x42\x3a\x08\x47\x6e\xc0\xba\x4c\x67\xe4\xaf\xaf\xa6\xd3\x92\x08\xbc\xf2\x13\xdf\xeb\xc4\xb5\xc4\xc4\xc3\x09\x16\xc5\x72\x98\x61\xc0\xa7\xc3\x39\x56\x38\x73\x38\xad\x12\xd8\x5a\x4f\x8a\x15\xcb\x28\x9b\x3d\xcd\x29\x61\xe2\x8d\x8a\x53\xb1\xd6\x85\x96\xba\xd6\xa2\x4a\xc4\xd6\xc2\x97\x49\xdd\xc1\x8f\xcc\x84\xe9\x6e\x36\x7a\x58\x94\x31\x0d\x01\x3c\x4b\xd6\x15\xbe\x48\xb8\x17\x3e\x08\x5f\x6f\xdd\x2a\x17\xc8\x6e\x0c\x15\xce\x28\xe2\x24\x87\x00\x00\x72\xd7\x5c\xf7\x7a\x6e\x7b\xeb\x6f\x13\xeb\xe8\x62\x5b\x24\xa3\x8b\xe4\xe2\xe6\x7d\xcb\xb3\x61\x7b\x4e\x92\xe4\x7a\xb3\x09\x0e\xd6\xb5\x31\x20\xb8\xd8\x06\xa7\xa3\x49\x3f\x51\xc6\x38\x38\x93\xbf\x44\xb1\x04\x23\xb1\x02\x16\x4b\x9d\xed\xa1\xa8\x92\x8b\x23\xd1\xeb\xc5\x93\x7e\x22\xb4\xeb\xf8\x1f\x75\x15\xf3\xfd\xae\x58\xa2\x6a\x91\x14\x67\xf3\xe1\x02\x17\xbd\x5e\x3c\xd3\x96\x17\x0b\xa4\xc3\x57\x4e\x8e\x73\x18\x30\x98\xfb\x27\x49\x62\x4c\xff\xfb\x70\x35\x27\x5e\xe8\xa8\x97\xa9\x98\x0f\x16\x94\xc5\x97\x78\x72\xbc\x40\x7d\xf5\x9d\x7e\x8c\x4f\xf0\x04\x61\x11\xe6\xcf\xc3\xfc\xe3\x79\x7f\x81\x8e\x58\xb2\x78\x44\x7a\x3d\xf1\x88\x9c\xe9\x6b\x7d\xb8\x78\x24\x7a\x3d\xf2\x48\x9c\x29\x52\x60\x98\x6e\x36\xea\x97\xf2\xbd\x6b\x46\xd6\x57\xc5\x3f\xfd\x70\xc2\xde\x1b\xc3\x93\xc3\x51\x3f\xab\xc8\x0d\xe1\x6c\x66\xcc\x9d\xfa\xf1\xf9\xf1\x1c\x0d\x67\xca\xe6\x25\x9a\x28\xa9\x2b\x94\x39\x3f\x8e\x65\x2f\xf7\xee\x0f\xcf\x01\xd4\x57\x49\xd6\xd8\x19\xdb\x76\x53\x70\x48\x90\xcc\x37\xe8\x1f\xbc\x48\xc7\x91\xd3\x15\xde\x6c\xe2\xab\xe3\x64\x85\x70\x94\x5e\x14\xaa\x55\x8a\x66\x60\x92\x73\xd5\x5f\x1e\x59\x28\x5e\x90\xbc\xb8\x0a\x72\x8f\xa7\x90\xab\xc1\x79\x75\x3c\x3d\x5e\x7e\xb7\x3a\xf6\x0f\xe1\x1f\xb4\x21\x4e\x92\x3d\x5a\x1e\xd1\x84\x6c\x36\xe2\xcc\x35\x54\xf6\x7a\x5d\x09\xae\x33\xdd\xf3\xd0\x8d\x40\x66\x49\xc8\x9a\xd2\xc3\x72\xb3\x89\xdd\x97\x2e\x88\x86\x3a\x01\x9b\x11\xf9\xc3\x3c\x9b\x0e\xfb\x4b\xa4\xfd\x50\x1f\x8c\x45\x41\xe9\x65\x38\xab\xaa\xa3\x9d\x98\x5a\x68\x93\xd9\x1b\x22\x69\x8b\x58\x0b\x9c\x26\x6d\x95\x34\xff\xd0\xa8\x69\x26\xaa\x86\xb7\xae\xaa\xf0\xcc\x19\x67\xd6\x5b\xb1\xec\x51\xb1\x1d\xa9\xea\x18\x6b\x4d\x4c\x7f\xdc\x40\xa8\x47\x69\x8b\x51\x54\xc2\x95\xd9\x5f\xa1\x50\xc3\x23\x66\x77\x7f\xfd\x24\x7a\xdb\x1b\x46\xbc\x56\x18\x9f\xef\xbc\x1e\x54\x19\xb6\xe3\x56\x38\x4a\x95\x35\x5a\xa2\x2e\xa1\x98\xf7\x19\xba\x77\xbf\xda\x83\x01\x76\x40\x0b\xb3\x9d\x9d\xb5\x82\x00\x9a\x7f\xa4\x0d\xd2\xda\x20\xe0\x9d\xff\x5e\x2f\x6e\x6d\x45\x17\x31\xa6\x5d\xde\x89\x3c\x8b\xd3\x86\x6d\x59\x42\x71\x91\x14\x9b\xcd\xf6\xdb\x32\x75\x56\x9c\x49\xbf\xd0\x76\x71\x68\xd8\xd2\x94\xd9\x5f\x69\xb0\xef\xeb\xc4\x0b\x57\xbe\xad\xe4\xae\x07\x07\x57\x28\x79\x54\x84\x96\x1e\x67\x1c\xf2\x4e\x70\x81\x86\xc2\x16\xf3\xa8\x5e\x76\x20\xd5\xeb\x9c\x76\x7f\x7e\x29\x77\xe8\x23\x1d\x22\xa9\x83\xf9\xb6\x70\x71\x35\x9d\x17\xfc\x18\x42\xbc\x41\xc0\xa6\x0c\x9e\x32\x21\x20\x99\x35\xff\xe4\x9b\x4d\x97\x8f\x4e\xc6\x40\x70\x5e\xe7\xab\x52\x11\x9c\x61\x85\xd1\xc9\x58\x39\x56\x7c\x77\xbd\x24\xd6\xa3\xbf\x3e\x87\x70\xcf\xa4\x17\x65\xdc\x56\x0b\x4e\x67\xbf\x3e\x00\x9b\x83\x30\xdd\x5f\xff\xfd\xd6\xfa\xef\xad\x51\x21\x7b\x94\x7c\xb5\xd9\xd0\x47\xc9\x57\xd5\x81\x0b\x56\x0f\xd4\xfe\xf9\x59\x14\x15\x3c\xca\xad\x9e\x09\x37\x45\x92\x13\x13\x70\x4a\x98\x9f\x2f\x8b\x8c\x0c\x59\x72\x52\x81\xdb\x80\x13\x15\xd1\xf2\xbe\x3e\x8b\xe4\xff\x26\x0f\xb0\xf8\xbf\xc9\x03\x74\x64\x62\x5b\xf1\x18\x1d\x59\x73\x27\xaa\xca\x50\x59\x86\xda\x1b\xc5\xf4\x66\xfb\xaa\x2a\x7f\x74\x3f\x52\x46\xfe\xa0\x0d\x86\x55\x7a\x2d\x4e\x56\x6d\xdb\x99\x48\x11\xeb\x30\xe0\xd5\x50\x4f\xc0\x86\xb1\x32\x09\xef\xeb\x25\xde\xbb\x12\x95\xda\x4a\x98\x2a\x32\xd6\x0b\xf8\x40\xd0\x66\x23\x92\x24\x21\x0f\xd1\x5a\x32\x23\x6a\xd5\x00\xb7\xcb\x5d\xe1\xa8\x69\x4c\x6d\xae\x9a\x85\xcd\xd6\x97\x3a\xaf\x45\xe6\x3a\x4e\xfa\xc4\x27\x22\x79\x2d\xfc\xd6\x71\xc2\x5a\x0b\xbc\x6f\x69\xe0\x5d\xb1\xb4\xd9\xae\x3e\xf5\xf3\x6b\x61\x1d\xfd\x70\xa5\x10\x93\xf1\x82\x93\xf4\xc3\x11\x49\x6c\x20\x0a\x0e\x0c\x5a\x2d\xac\x56\x12\x3a\xf2\xc3\xcc\x45\x37\x0b\x03\xff\x2a\x44\x96\x8c\xc6\xa6\x40\x9a\xac\xb5\x1a\xdd\x90\x61\x37\xab\xe1\x09\xb6\x43\x1c\x9e\x54\xb8\x4c\x58\x00\x63\x16\xc0\x38\xb7\xb9\x1a\xc6\x2c\x84\xf1\xaa\xb1\x1b\xfa\x2c\x20\xd4\xc3\x9d\x51\xb6\xe4\xbe\x6f\x56\x95\xd0\xad\xed\x98\xdc\xcf\xac\xf0\x64\x2b\x61\xc9\xd0\x51\x34\xa7\x59\x46\x98\xc4\x6b\x13\xc7\x1d\xc3\x95\xe6\x3a\x4f\xfc\x91\x1c\x0b\x2c\x1e\xad\xea\x21\xda\x44\x3f\xa9\xa7\x0d\xc5\x77\xab\x7a\x10\x38\xaf\x98\x9d\x8a\x48\x4e\xb6\x8c\xe3\xbd\x37\x8e\x77\x60\x55\x6e\x7f\x1f\x73\xcc\xcd\x28\xec\xcc\xcf\xb8\x6d\xde\x41\x83\x9b\x51\xb8\xa0\x70\x5e\x31\x3b\x0a\x2e\x47\x21\xf7\x9c\x46\x11\x62\xb3\xe1\x56\x48\xa0\x77\x8d\xcf\xfc\x51\xe5\x4b\x70\x92\x8a\x78\x94\x8e\x91\xc5\xb5\x41\x6a\x65\x77\xa2\x8a\xf5\x6c\x65\x1f\x69\x72\xf2\x30\xfd\x8e\x9a\xe8\x32\xe9\xf1\x31\x2a\x12\x3a\x4a\xc7\xb8\x18\xe8\x9d\xe8\xc3\xbf\xf0\x77\x42\xbd\x84\x84\x4c\xe1\x2f\x38\x19\xfc\xf8\xe2\xa7\xe7\x6f\xcf\x5f\x3f\x7f\x73\xfe\xfa\xf1\xef\x9f\x27\x64\xf0\xec\xd5\xcb\xf3\x67\xcf\x7f\x7c\xf7\xb8\x99\x20\xcb\x86\x25\x5e\xfc\xf5\xf9\x8f\x46\x7a\xd1\xcc\x08\xd3\xa0\xf6\xe9\x51\xa3\x87\xfb\x47\x8d\x51\x3c\xd0\xa7\x5c\xb7\x6c\x8f\x24\x57\xde\x5f\x9c\xcf\x05\x73\x2a\x49\xc3\xf5\xb5\x0e\x96\x1e\xd1\x29\x4f\x17\x24\x92\xa4\x48\xc9\x27\x49\xf4\x7f\x22\x4c\x34\x75\xb4\xb4\x44\x90\x65\xb2\x6d\xde\x25\x2d\xe9\x05\xcd\xa9\xb8\x4e\xcc\x7e\xb3\x79\x8a\x11\x8e\x4e\x96\x1f\x5d\x9a\xf6\x41\x10\x26\x5e\x14\x3c\x23\x3c\x51\xca\xfa\x35\x0f\xc5\x7e\x48\x56\x62\xee\x1f\x20\x31\xd4\x2b\xdb\x5f\xd4\x41\x34\x95\x8e\xb8\xf2\x85\x83\xb0\x72\xe0\x49\xe2\xe8\xbb\x6e\x56\x4c\xc4\xf5\x92\x74\xe6\x62\x91\x3f\xfa\x4e\xff\x4b\xd2\xec\xd1\x77\xf7\xd4\x1f\xd9\xd3\xa3\xef\xca\x65\xca\x1e\xfd\xf5\xbb\x7b\xf0\xf7\xbb\x7b\x2a\xf1\x1e\x14\x8f\x54\x5c\xd9\xa2\x24\x96\x1d\xe0\x4a\xf4\x26\x4f\xf2\x94\xf2\xd2\x48\xdb\x60\xa4\x03\x25\x47\xd0\x58\x2a\x9c\x90\x1f\x15\x96\x20\x17\x7f\xb9\x49\x46\x4c\x52\x76\x2f\x55\xc0\xfd\x6d\x54\x19\x74\x6b\xca\x75\x62\xbc\x5e\x14\x19\xc9\xc1\x9e\x1c\x2f\x53\x5e\xda\xf6\x87\x24\x79\xa4\x2a\xbc\x15\x9c\xb2\xd9\x60\x92\x2e\x48\x4e\x7f\x21\x71\x34\x49\x59\x3f\x3a\x26\x08\xcb\xeb\x5d\x4d\x45\x8e\xd9\xb7\xde\x9e\x11\xe3\x90\xcc\x6f\x13\xfc\xec\xef\x13\x07\x4b\x00\x4d\x34\xfa\xfd\x8c\x10\xd2\x6b\x50\xa3\x47\xcc\x1c\x12\xb1\xd9\x10\xed\x61\xce\x0c\x26\x16\x41\x28\x60\x5d\xb4\xd5\x9d\x45\x5e\x14\x1f\x56\xcb\x38\x2a\x09\xbf\xa4\x13\x32\x9c\xa4\x2c\x42\xa6\xcb\x1f\x94\x3b\x41\x0b\x26\x84\x2a\x84\x06\x9c\xa4\xd9\x2b\x96\x5f\xc7\x68\xcb\xa6\xd1\x34\xe6\x3d\xd9\xd6\x6f\xa3\x03\x03\x03\xb0\x1b\x67\x92\x32\xed\x7d\x87\x32\xe8\x46\x4f\x56\x72\x60\x6a\xa2\x7a\x57\xe9\x7e\xe1\x29\x01\x52\x34\x40\xe3\x11\xc1\x62\xac\x7d\x02\xad\x75\x1d\x55\x2a\xac\x44\xb5\x57\xa5\x49\xca\xd4\x7e\x8a\x09\xc2\x85\x4b\xf3\xe0\xca\xc0\xc9\x90\xb9\x63\x68\x52\xd4\x36\x20\x35\xbe\x25\xd5\x81\xd5\xbb\xd7\xc5\x20\xd6\xb9\x69\x96\xd5\xb3\x0a\x4c\x11\x2e\x46\x74\x5c\xe1\xcc\x3a\xc6\x0b\x5c\x6e\xee\x6e\xd2\x46\x8d\x49\xf9\x0c\x10\x47\x89\x2a\xdc\xd6\x11\xec\x43\x05\x58\xe7\xd5\x86\x92\x52\x39\x19\x34\x70\x1a\x92\x10\x46\xa2\x42\x7a\xbb\xa6\x59\x66\xdb\x52\x7e\x09\x75\x95\x41\x74\xac\xdc\xc3\xe0\x88\x13\xbd\x06\x91\x1c\xc4\x96\x81\x9b\x98\xc2\x90\xbb\xbd\x49\xe5\x1b\xc6\x0d\xa5\xd9\x85\x76\xd7\xa6\xaa\x18\x77\x09\xba\x01\x0b\x4b\xbc\x7f\xca\xed\xdb\xa9\x3a\x0c\xa5\x78\xc7\x87\x15\x22\x74\x8f\xdd\x7e\xc8\x3e\x77\x1c\x31\x60\xb9\x13\xeb\xba\xd6\x1d\x2c\x7d\x3c\xcc\xf6\xea\x6e\xdf\x40\xc1\xc4\x5b\x42\x8e\xc9\x29\x19\xcd\xf6\xd6\xf9\x9a\x9b\xe8\x13\xcf\x75\x6b\x85\xc7\xe6\xe6\x5b\x87\xee\x38\x66\x44\xb4\x39\x02\x31\x73\xab\x2a\xb4\x6d\x72\xd6\x75\x47\x79\x0f\xec\x79\xfb\x36\xb3\x6d\xce\xda\xcf\x10\xdf\x33\xe1\x80\xe6\xba\x8d\x57\x67\x37\x2e\xe0\x83\xc3\x95\x77\x81\x90\x07\x9c\x00\x61\xb3\x96\xe5\x63\xed\x1a\xb0\x6d\xa5\x75\xa0\x5b\x22\xe2\x68\x99\xaf\x38\xb4\x9c\xbd\xbb\x5e\x12\x7b\x92\x22\x73\x28\x29\x29\x21\x90\x83\x96\x5a\xad\xdd\x50\x86\xbc\xda\x2d\x93\x92\x10\xd5\x58\xbc\x71\xcf\xb4\xed\x1a\x3f\x4d\xc9\x43\x58\xc1\x17\xd0\xd7\x5e\x7f\xf1\x9f\xe6\xfc\x18\x97\xd7\x6f\xd5\xa8\xed\x19\x02\xac\x2f\x49\x98\x5a\x2c\x1c\x7b\x37\xe9\x4b\x18\xf3\x64\x5d\x19\xa7\x74\xad\x57\xf9\x34\x9d\x88\x82\x43\x79\x83\xf5\x86\x92\xf8\x71\x82\x12\xf0\xe7\x96\xd4\x1d\xd1\x69\xc2\x4a\x54\x98\x23\x45\x5d\xd2\x84\x69\xfa\x3c\xf6\xae\xa8\x4a\x79\xa2\xb7\xe3\xc1\x5a\x50\x4b\x13\x1f\x4f\x82\x87\x5b\xc8\xc4\x45\x42\x07\x01\xe1\x65\x9b\xf2\x90\x69\x51\xe1\x49\xea\xfb\xdc\x5b\x87\x78\x13\xfb\xd7\xad\xb9\x5f\xcd\xdd\xaa\x1b\xec\x2a\xc4\x63\x87\xc7\x30\x85\xe6\xa0\x69\x56\x88\xd0\x09\x7e\xd7\x5c\xc7\x3a\x39\xc4\x4d\x5b\x36\x5b\x7d\xd3\xb4\xec\x37\xca\xa6\xca\x1f\xe5\xe7\xc3\xc7\xf5\xe7\x7e\x10\x11\x2d\x73\x2a\xe2\xa8\x13\x21\x0c\x31\xdf\xc5\xa0\xa4\x6c\xb6\xca\x53\x4e\x7f\x21\x28\x66\x83\x65\xb1\x8c\x11\xf8\x7e\x1f\x31\xcd\x9e\xf6\x4f\xc7\x47\x92\x1a\x9a\xe4\xab\x8c\x94\x71\x01\xef\xec\x50\x4e\x43\x34\x5c\x84\x76\xea\x5a\x07\xf0\x97\x3d\xa3\xda\x2a\x55\x96\x51\x1a\x45\xc5\x34\xc2\x11\x65\x11\x8e\xa6\xa0\xed\x21\x0a\xf9\x93\x17\x0b\xa3\xdd\x9d\x96\xd1\xb8\x05\xe8\x20\x01\x2d\x89\xe8\x4f\x0a\x96\x51\x6d\x68\x76\x99\xe6\x34\x03\xd5\xa4\xf2\x9e\xfe\x5d\x48\x7c\x5a\x2c\x88\xa0\x0b\xf2\x39\xe5\x9a\xed\xd2\x68\x3a\x8d\x1f\x73\x9e\x5e\x0f\x68\x09\x7f\x63\x8b\x09\x47\x27\x63\x64\xef\x07\x3f\x75\xb0\x48\x97\x31\xb7\xac\x17\x0f\xab\xf8\x18\xdd\xb1\x2a\x7e\xe4\x01\x15\xba\x42\x6d\x80\x32\x59\x4b\xca\x9c\xe8\x48\x53\x76\x45\xa3\x41\x84\x8c\x46\x88\x45\x16\x71\x81\x55\x54\x56\x87\x10\x8c\x38\xc4\xbc\x97\xd9\xed\x34\x88\x10\x96\x4c\x26\x6c\x0a\x4c\x13\xae\x17\x5b\xa6\x97\x41\x93\xd4\x1e\xeb\xb2\xd7\x2b\x07\xf3\xb4\xf4\xbc\x21\x35\x53\x62\x86\xce\xc4\xd0\x35\x90\x62\xc7\x85\x16\xf5\xb2\x04\x9d\x85\xa3\xaf\x57\x34\x31\x25\xba\x42\x85\x4d\x28\x01\x34\x9b\x0d\xf1\x00\x55\x55\x6d\x7c\x8a\xdd\x5e\xfe\x96\xb2\x44\x95\xc9\x6d\xbd\x57\x4c\x66\x4b\xf1\x83\x2f\xeb\x11\xc1\x7c\xec\xa2\x48\xc0\xb9\xb5\xcd\x20\x9b\x7d\x9b\x1b\xdd\x36\xd3\x72\xa1\x07\x57\x91\x66\x93\xd4\x2c\x24\xa6\xdf\x8d\x05\x5b\x21\xd6\x42\xb3\xe9\x6c\x92\xf5\x0f\x85\xcb\xa7\xa3\x50\x15\x3b\xfb\x67\x83\x19\xf6\xd0\x9c\xad\x33\x52\x98\x7e\x46\x44\x7f\x41\xca\x32\x9d\x85\x48\xc5\x6c\x82\x99\x42\x4c\x53\x3a\x6b\xee\x8b\x96\xe6\x5c\x53\x07\x14\xbe\xa2\x62\xde\xd7\xe3\x2e\x9b\xe4\x89\xdc\x35\x9f\x1e\x99\x25\x9c\xfc\x63\x45\x39\xf9\x7b\x39\x20\x4c\x70\x4a\x4a\x2c\x92\xee\x89\x41\x33\x96\x34\x01\x3f\xdc\x26\x06\x03\x2d\x5f\x73\x52\x12\x26\xe2\xd4\x4a\x56\xd3\x23\xa5\x99\xa4\x4a\x3c\x8e\x69\x4c\x10\x1a\x4c\x29\xcb\x62\x92\x3c\x22\x49\x92\x14\xe8\xa8\x5e\x3d\x47\xbd\x5e\x5c\xca\xeb\x8b\x39\x1a\x48\x8f\x48\xcd\x20\xce\x91\xc9\xc1\xa5\x13\xce\xa6\x49\x89\x4b\x7d\xdd\xac\x3f\x90\xeb\x52\xd2\x08\x0a\x20\x92\xf1\xb6\xe4\xab\x52\x12\x7c\xcd\xc9\x94\x7e\x3c\x8e\xee\xf9\x40\xb7\x6b\x73\xa4\xe4\xb8\x8a\x55\xbb\xc9\x66\x51\x86\x93\xfd\xc5\x2a\x17\x74\x99\x13\xbf\xc4\x5d\x8f\x86\x7f\x1b\xc0\xf3\x86\x8f\xd3\x1f\xc7\x04\x0d\x38\x91\x93\x95\xb0\x8d\x2e\x8a\x22\x27\x29\x44\x56\x55\x05\xc4\xf5\x92\xbc\x9a\xc6\x04\xf5\x7a\x8e\xfa\x3a\xb1\xd9\x20\xd4\xc1\x91\xa2\x09\x22\xb4\xd9\x88\xbb\xc4\x85\xf1\x66\x21\x57\x62\xc8\x30\x23\x57\xa0\xcf\x32\xa4\xb8\xc8\x33\xf5\xb3\xc0\x7a\xea\xc3\x14\x6b\x19\xea\xb0\xd4\x84\xad\xdb\x34\x04\x2e\x49\xb9\x5f\x62\x1b\xaa\x09\x21\xb8\xbc\x4c\x91\x1c\x0d\x52\x76\x1d\x0b\xd8\x45\xc5\x82\x96\xd6\x8b\xbc\x96\x74\xbd\x79\xfb\xe7\xd7\x03\x79\x29\xe4\x68\x20\xe6\x84\x79\xb4\x2c\x8f\xf3\x56\xe1\xd5\x41\x27\xb8\x89\x0c\x3c\x4a\xc4\x16\xfb\xec\xb1\xbd\x35\x81\xd5\x70\x2b\x6d\xcf\x4f\x80\xeb\x75\x01\x8e\xd7\x17\x79\xca\x3e\x0c\xdd\xc9\x58\xaa\x23\x88\xf5\x5f\x2f\x07\x4a\x62\xe5\x1e\x17\x7c\x1a\xd2\x82\xfd\x50\xf0\x61\x4c\x92\x28\x42\x0d\xa1\xeb\x92\x0a\xa0\x8d\xe3\x20\x3d\x4b\xcb\x39\x91\xa4\xa8\xdc\xab\x8a\xb8\xb8\x37\x1a\x9c\xf7\xc7\xf7\x66\xc8\x23\x20\xf7\xd2\xe0\x3b\x96\x46\x14\x7d\x79\xa8\x7e\x55\xda\xcf\xbc\x68\x08\x8d\x6c\x9c\x43\xc7\x81\x28\x2c\x48\xf2\xdc\xe3\x7a\x48\x87\xb2\x52\xa4\x6c\x42\x8a\x69\xe7\x59\x2a\xc8\x66\x13\x15\x50\xd9\xf9\x95\x26\xbd\x5e\x34\x52\x89\x50\x64\x0c\xea\xb7\x67\x64\xd8\xf0\x40\x2d\x6b\x9b\x92\x3f\x41\x9e\x2e\xcb\xc8\x15\x54\x8d\x09\x1a\xc6\x51\x09\x43\x71\x41\x37\xfd\x0e\xd4\x30\xc7\xa0\x01\xb1\xd9\x78\x21\x3a\x6d\x27\x72\x8e\x45\x4e\x36\x9b\x58\xff\x1a\x5c\xa5\x9c\xc5\xd1\xeb\x9c\xa4\x25\xe9\x48\xa8\xfe\x2c\xfb\x52\x0c\xd9\xcf\x1d\x51\x74\xe0\x57\x47\x75\x5b\x4a\x6a\x31\xa8\x19\x43\xa4\x51\xce\x0b\x8e\x06\xa5\x48\x27\x1f\x10\xc2\x76\xc0\x3f\xa5\x3f\xa1\x9b\x1e\x4b\x97\xd2\x27\xb2\xd9\x4f\x71\x59\x07\x77\xff\x67\x94\x0e\x78\xed\x5a\x56\xda\x43\xcc\xf6\xba\x8b\x5a\x07\x3b\xe0\xe9\xd5\xab\x95\x58\xae\x84\xc4\xdc\xdd\x53\x5c\x24\xa1\x08\x01\xe1\x34\x29\x06\x8d\xe3\x1b\x2b\x1e\x80\x0d\xf4\x14\x0d\xd2\xb4\x09\xa0\x89\x2a\x37\xc0\xb0\xd4\xb1\xe7\x72\x85\xa9\x3f\x8a\xe1\x2a\x59\x57\x55\x02\x2a\xb0\x2b\xdb\x80\xbe\x93\x6c\x82\x52\x1e\xd7\x93\x73\x9b\x49\x18\xbd\x2e\xc9\x8f\x43\xe0\x3d\x87\x8f\x1d\x07\x30\x95\x2c\xb6\x78\xa9\x5a\x8a\x05\x0e\xf1\x5b\xe6\xa6\x32\x4c\x2b\xbc\x42\xa8\x92\x6d\x4e\x02\x8e\xa4\x74\x82\x86\xb3\x78\xd5\xc0\x90\x2b\x5c\x6b\x06\x99\xf5\xc9\xb1\x9e\xb6\x9e\xc8\x70\xe2\x26\x5e\xa1\x61\x7d\x70\x93\xfd\x83\xbb\xd9\x66\x0e\x09\xbf\x5f\x13\x9d\x25\xf2\xe6\x00\x01\x53\x70\x85\xea\x99\x35\xee\x18\x04\xbc\xd7\xcd\xe6\xc6\xd3\xe5\xaf\x8c\xa1\x2d\xb1\x60\x78\xf3\x3a\x85\xf0\xd8\xc3\xce\x26\x65\x44\xc6\x87\x4f\xcd\xbb\xf8\x01\xbf\xf0\x45\x5a\x37\x00\x39\x04\xe1\xb4\x20\xb1\x06\x65\xf1\xeb\x20\x22\x6f\x0b\x38\xc2\x4b\x26\x5a\x83\x83\xfa\x5e\x28\x71\x8a\xf0\x4a\xa1\x1e\x43\xde\x22\xed\x11\xdf\x82\x83\x62\x82\x73\xcc\xac\xbc\x4e\x92\xa0\xab\xcd\x26\xf6\x04\xcc\x28\x66\x78\x85\x0e\x67\xd5\x3d\xd0\xd7\x2f\xff\xbb\x81\xfc\x06\x07\xf4\x06\xb4\xc9\xaf\xc5\xc5\x79\x47\x98\x24\xf5\xf0\xea\xeb\x34\xcf\x8b\xab\x27\x40\x00\x76\x4f\x31\x4c\xfc\x07\x40\x69\xc3\xe8\xe5\xcb\x97\x9d\x67\x05\xee\xbc\x7f\xff\xfe\x7d\x54\x21\x1c\x73\x4c\xf5\xaa\xfb\xd5\x8a\x2a\x21\x78\x7d\x41\xa6\x05\x27\xc3\x14\x17\xec\x15\x7f\xa2\x3e\x4a\x9c\x4e\x05\xe1\xc3\x1c\x12\x1f\xc3\xef\x95\xc3\xa4\xb2\x5e\x96\x44\x00\x0c\x79\x41\x14\xbd\x9e\x52\x06\xa3\xa1\x82\xe5\xbc\xc6\x04\x5a\xf1\x52\x3c\x4d\xe6\xa8\x46\x41\xf5\x7a\x5d\x5a\xfe\x94\xfe\x14\x4f\xd1\x59\xda\xeb\xc5\x69\xad\x72\x8a\xf0\x24\x99\x48\x4a\xe9\xc9\xf3\x1f\x5e\xbd\x79\x3e\xee\xc8\xfe\x3b\xb4\xec\xfc\xf4\xea\x5d\x47\xcd\xa2\x13\x1d\x53\x39\x32\xf5\x15\xe1\xf9\xa3\x24\x45\x67\xe1\xd6\xe4\x58\x5d\x88\x99\xbe\x10\xa9\xbd\x17\x1c\x28\xdc\x4c\x2b\x34\x2c\x5b\xd8\xd9\xd2\x0e\xe6\xd5\x4f\x9d\x57\x6f\x3a\x6d\x43\x2a\x58\xa7\xe0\xb5\x81\x39\x18\xcb\xc1\x95\x37\x18\x5b\xb0\x3a\xc1\xf8\xf2\x5e\x2f\xce\x6b\xe3\xcb\xed\xf8\x1e\xff\xf0\xee\xf9\x9b\x70\x60\xb0\xb6\x66\x44\xf0\x11\xe1\xf9\x77\x49\x7e\x83\xd1\x98\xed\x11\x0c\xa4\x1b\xaf\x7a\xbd\x78\x55\x1b\xca\xaa\x06\xaa\x96\x01\x29\x48\x05\xc3\xb2\xfb\x4e\x0e\x6d\x85\x50\x1d\xc1\xec\x81\x54\x73\xcb\x56\x68\xb8\xbb\x85\x88\x15\xa2\x93\x76\x14\x02\xb2\x8d\x99\xd6\xfd\x86\x80\x19\x9b\x82\x0a\xaa\x77\xec\x9c\x4e\x96\x9f\x58\x3f\x8b\xe8\xe8\x86\x08\x91\x7c\x9c\xe4\xab\xf2\x5f\xff\x22\x22\x83\x9c\x96\xa2\xd7\x03\xc9\x76\xa2\xbe\x2c\x3a\x60\x16\x3f\x75\x8a\xc6\xf5\xe3\x41\x40\xde\x3d\xf0\x1e\x1f\x5e\x3f\x45\xf3\xfa\x29\x6e\x77\xfd\x28\xa2\xf0\x5f\x1c\xd4\xea\x35\xa9\x6b\xe8\xa5\xe7\x8b\xa5\xb8\x8e\xfd\x40\xcd\xc4\xca\xdc\x62\x65\x59\x00\xf1\xdd\x58\x88\xbc\xd3\xc6\x42\x18\xe0\x14\x66\x15\x68\xb0\x0a\x69\x7d\x15\xa8\x12\xd8\xdf\x7c\x15\xe0\xe9\xe3\x7f\xf5\x9e\xf7\x20\xf0\xd9\xf7\xfc\x76\x55\x8d\xc3\x88\xb5\x43\x4b\x2b\xa1\xd4\xe4\x06\x35\xb4\x30\xf3\xe0\xf2\x5a\xae\x72\x70\x79\xb3\xa1\x6f\xb1\x2f\x6f\x81\xbe\x6f\xc5\x7d\xb4\xd0\x9a\x2e\xdc\xfd\x67\x53\x98\x31\x3b\xf1\x19\x2c\xf0\x8d\xb5\x66\xf6\x37\xfc\xda\xee\x85\x83\x1a\xe7\x37\x6a\xfc\x47\xbd\x6d\x0e\x6a\x9a\xdd\xa8\xe9\x9f\xf4\x0e\x3b\xa8\x69\x7a\xa3\xa6\x7f\xd0\x9b\xf1\xa0\xa6\x8b\x1b\x35\xfd\xc2\xed\xdb\x83\x5a\x4f\x6f\xd4\xfa\xf3\x8f\x37\x6b\xbd\xbc\x51\xeb\x4f\x03\xe6\xf3\xa0\x0e\xf2\xdd\x0a\x5c\x87\x62\x9d\xdf\x8e\x09\xdd\x75\x59\xfd\x26\xbc\xe6\xaa\x24\x4f\x88\xb8\x22\x84\x69\x79\x99\x6a\xc9\xe3\x2b\xd5\x1d\xc6\xfc\x3b\xcc\xc0\xd1\x5e\x60\x7c\xf7\x05\xc6\x6f\x7b\x81\x19\xb4\xff\xbf\x6e\xc1\xe2\x6d\x62\x01\xf5\x1a\x20\x4f\x08\x7c\xfe\x54\x30\x32\xec\x9e\x56\x08\x0d\x1c\xfb\x0f\x64\x89\xcd\x4e\xba\x27\x96\x32\xd9\xb9\xaa\x06\xd8\x9f\x7d\x55\x1d\xb9\xf0\xaf\x4a\x03\x6a\x4a\xfc\xc8\x7b\xcb\x35\x2f\x37\x67\x24\x59\x9b\x09\x0e\x49\x35\x24\xbd\x9e\x55\xe4\x21\x83\x82\xf5\x7a\xf6\xb9\xc7\x55\x1a\x14\xec\x8c\x25\x23\xf9\x77\x3c\x0c\x35\x95\x64\x1a\x84\x12\x85\xda\x12\xd6\x39\x11\x04\xaa\xf8\xa4\xbe\x26\x1b\x14\xc1\xcf\x7a\xbd\x2e\x1b\x94\xc5\x82\xc4\x24\x79\x54\x8e\xc8\xd8\xb3\xad\x95\x9f\xbd\x5e\x3e\x22\x63\x14\xb2\x05\x4d\xf1\xa0\x5b\xa8\x26\x63\xd0\x9c\xfa\x0a\xac\x75\xc3\x99\xad\xce\x56\x43\xd3\x0e\x58\x6d\xaf\xe0\xb5\xfb\x4c\xfd\x49\x22\x78\xbc\x8c\x86\xfa\xaf\xcd\xef\xf5\x62\x53\xc2\xd4\x45\xb8\xce\x82\x80\xe4\x7e\xc7\xf6\x6b\x2a\xfe\xf4\x67\xe4\xe0\x68\x6b\xf6\x49\x5f\x28\xbb\x02\x87\x44\xb5\x95\xc5\x9d\x94\x7e\x7e\x4f\x44\x22\xb6\x29\xc8\xb4\xe9\xfd\x88\x7d\x9a\xd9\x3b\x66\xdd\xd0\x90\xba\x93\x82\x03\x28\x3d\x81\xd8\x1e\x16\x84\x96\x4f\x9d\x42\x94\x13\xdd\x8b\xe4\x11\x44\xd1\x8d\x39\xbe\x23\xa8\xde\x7e\x36\x15\xa9\x1b\x2a\x92\x1d\x06\xb8\x06\xc2\xb1\xa0\x63\x12\x74\x6c\x8c\x29\x60\x78\x3a\x8d\xcd\xa3\x1e\x1c\xbb\x1a\x1c\xcf\xc8\x50\x27\x2b\xd8\xa1\x98\x81\x10\x8f\x7b\x8a\x14\x50\x4c\x29\x4d\x28\xcd\x64\x31\xf0\xdb\xc0\x50\xbc\xa6\x6b\x25\xdb\x91\x8c\x06\xd2\x42\xb3\xc3\x2b\x0c\x5b\x7a\xd7\xbf\x4d\xb8\xdd\x98\xa0\x1d\xc3\x61\x78\x5d\x6d\xe9\x58\x67\xdd\x4d\x8f\x8e\xb5\x6f\x12\xda\xba\x49\x98\xbf\x49\xe8\xae\x4d\x72\xa0\xee\x5c\x53\xef\xd0\x68\xa4\xf0\x19\xe9\x67\x84\x2c\xb7\x16\xa1\x65\x5f\x6b\x18\xec\x27\x31\x60\x46\x06\xdd\xe3\x15\x9e\xe0\x0c\xcf\xf1\x14\x2f\xdd\x3e\x5b\xb8\xaa\xbc\xd7\xdb\x06\x52\x11\x50\xdc\x7c\xe0\x3e\x70\x10\xe9\x94\x0f\xfc\x4f\x17\xe7\x54\x59\x4e\x42\x9a\x5a\x0f\xee\x19\x29\xf0\xb3\xe0\x4b\xe9\x58\x30\x13\x8f\xbc\x42\x95\x1d\xec\x65\xa8\xf5\xdd\x11\x1d\xca\x3a\xe4\x6c\xc7\xa8\x75\x6f\xb5\xf8\xab\xf5\xe8\xac\x5e\x3c\xd6\x0a\x0d\xc9\x48\x8c\x25\x12\x71\xfd\xce\x1c\xcf\xad\x9c\x55\x14\xc9\xda\xa8\xa9\x76\x7c\x89\x1a\x43\x83\x69\xc1\x9f\xa7\x93\x79\x1c\x5c\x16\xc5\x88\x8c\x13\x36\x22\xa0\x14\x5d\x78\xe0\x4b\xba\x5d\xff\x53\x99\x2b\xdb\xb1\x41\x6e\x00\xd1\x38\x82\x19\x45\x94\x75\x8a\xcd\xa6\xf0\xe1\x26\xef\xfd\xc2\xc2\x59\x12\x72\xb8\x48\xf8\xa0\xcc\xc1\x2c\x6e\xc0\xc9\x25\xe1\xa5\xfa\x95\xad\x26\xc4\x1b\x20\x77\x4a\xab\x1d\x83\x96\x36\x1b\x5e\x21\x5c\x20\x4c\x3d\x92\x24\xe8\x0f\xba\x83\xd1\x84\xe9\x67\x45\x73\x35\xa9\x59\x4d\x1c\x64\xd6\xe2\xc6\x27\xcd\x1e\xb6\x2f\x6d\x01\xea\xef\xab\x3c\x47\xb8\xb8\x0d\x2a\xb8\x58\xd1\x3c\x7b\xa5\x55\xd8\xca\xe4\x3a\xc0\x0e\xcf\x31\x71\x38\x27\x50\x0f\x4f\x2e\xc0\x6a\x03\x33\xc0\xcb\xc6\x73\xc1\x73\x67\x42\x6e\xe0\x48\xae\x3a\xaf\x79\xf1\xf1\x3a\xa6\x78\x2d\xf9\x53\xb8\x27\xe5\x3d\xa7\x14\x41\x8c\x46\x51\x8c\x10\x2e\x75\x36\xe6\x28\x79\x14\xab\x9b\xd0\x2f\x81\x39\xc2\xdd\x13\x54\xa1\xd0\xe1\x1d\x60\x2a\x37\xca\x40\x89\xec\x22\x89\x51\xf2\xa8\xeb\x19\x70\x5f\x9b\xb3\xa3\x0a\x30\xa3\xe4\xa4\x8d\x42\x00\x92\x5e\xac\x7a\x50\xee\x60\x23\x2a\xf7\xf5\x38\xe1\x31\xc1\xf0\xd3\xcd\xcf\x9d\x8e\xf3\x36\xa5\x76\x9b\xd4\x8d\xbb\x64\xb3\xe9\xc6\x81\xaa\x94\x6f\x0c\x0c\x50\xda\x6c\x5a\xf2\x81\xa6\x85\x6c\x84\x2a\x79\x83\x9c\xc7\x4e\x27\x84\xe0\xc8\x78\x45\x46\x68\x48\x2a\xe5\xaf\x2b\x36\x08\xfc\x5c\xf0\x74\xf2\x81\x64\xb8\xa8\x27\xa4\xf5\x04\xa3\xfb\x7e\x9e\x91\x25\x61\x19\x61\xe2\x8f\xe4\xfa\x69\xb1\x58\xa6\x02\xe7\x3b\xf2\x56\x3b\xf2\x26\x3b\xf2\xb2\x64\x92\xa7\x65\xd9\x51\xe6\x42\x65\x47\x0c\x9e\xac\xa6\x53\xc2\x49\x66\x17\x53\x2d\x12\x5f\x4d\x44\x01\xb6\x58\x04\xad\xad\x5d\x16\x41\x78\xa1\x0d\x21\xcf\xf5\x8e\x8d\xb0\x8a\xc7\xef\xe5\x18\x9e\x67\x5a\xcf\xb0\x71\x84\x97\x3a\xe7\x52\xe7\x18\xe2\x21\xf2\x5e\xed\x6c\x26\xc4\x8a\xfd\x13\xbb\xe2\xe9\x12\x16\x24\xc2\xe7\x2e\x13\xf4\x91\xe4\x95\x65\x57\x07\x55\x65\x3a\x25\xbf\x87\x65\x12\x4d\x6b\x65\x48\x85\x22\x6f\x49\xcd\x92\xa7\x63\x2d\x31\x8d\x29\xcf\x4c\xee\xc7\x12\x48\x0c\x4f\x78\x24\xa1\x31\xd0\xc9\xba\xc8\x0b\x76\xd9\x5e\x48\x67\xe8\x62\xaf\x39\x2d\x85\xbc\xbc\x1b\xe5\x4c\x8e\x2e\xf8\x8c\x4a\x24\xd2\x28\x05\xc9\x50\x44\xae\x2c\x65\xb3\x67\xa9\x48\x63\xe3\xe2\x4e\x19\xd1\x69\x20\x63\x61\xbe\xd5\x3a\x61\x56\x63\xd4\xc3\x33\xe8\x82\x4f\xbf\x36\x9a\x87\xa0\xe9\x8b\x30\xc1\x6b\x0d\x50\x67\x2d\x81\x35\xfc\x86\x16\x62\x95\xe5\xf1\x82\x4e\x98\xbc\x08\x0f\xaa\x5e\xa5\x59\x06\x9a\x7c\xc1\xb2\xa9\x89\x07\x59\x7a\xa5\x59\x21\xe8\xf4\xda\xe0\x5b\xb5\x7b\xd5\x9e\x20\x08\x8b\x6a\xb9\x2a\xe7\x50\xa7\x8c\x09\x1e\x0c\x06\xc6\x67\x84\xbd\x95\x1d\x8f\x3e\x64\x55\xa2\xfa\x69\x56\x0a\xd5\x79\x76\xf6\xd9\xde\x72\x75\xee\x0c\x7b\xaf\x63\x50\x64\x36\x74\x88\x70\x5a\xcc\xbc\xd2\x87\x6c\x70\x68\xf1\x03\xa0\x50\x9d\xab\xdc\x3f\x53\x2e\x56\x69\xee\x59\x17\x13\xb4\x8e\x63\xa2\x27\xbd\xa3\x14\xda\x6c\x46\x63\x47\x56\x58\xc7\x08\xbb\x7a\x45\xd5\xb9\xe2\xfc\xff\x48\x00\xed\x27\x51\xe4\xbc\x1d\xe9\x1e\x83\x02\x07\xc3\x58\x20\xcc\x2b\xf2\x91\x4c\x94\x8d\x30\xec\x79\x30\x1f\x90\xdb\x5c\x1f\x47\x6d\x64\xad\x4f\x8a\x51\x25\x0c\x0f\x06\x0b\x0f\xc6\x11\x49\xae\x63\x65\x1f\x6e\x6e\x61\xeb\xa3\x40\xa2\x16\x63\xc7\xae\xab\xd7\x4e\x91\x90\x2c\xc1\x61\x1b\x3c\xb0\x99\x37\xde\x58\x75\x9c\x89\x44\x59\x8f\x57\x15\x9e\x27\xb3\x38\xf3\x23\xbd\x3b\x44\x3b\xa2\xb7\x8e\xee\xaf\x8c\x10\xf0\xb4\xd1\xb8\xd5\x72\x2d\xee\xda\xf6\xb2\x39\x70\x1b\x36\x3e\xbd\x6b\xe3\xb5\xa6\xf5\x6a\x47\x78\x54\xee\x8f\x9b\xdf\x5a\x13\xe1\x2c\x08\x9a\x5f\x2f\xa5\xf1\x76\x84\x47\xf9\x8d\x7b\x30\x75\xf7\xf5\x61\x70\x7e\x84\x47\xab\x1b\x77\x62\x2b\xef\xeb\x05\x4e\x42\x84\x47\x93\x1b\x77\xa1\x6a\xd6\xda\xcf\x3c\x93\xc2\xe7\x4d\xaa\x14\x54\x81\x9d\xe5\x99\x47\x91\x7a\xc9\xad\x14\xeb\x95\x4d\xad\x1a\xf4\xe5\x95\xc7\x03\x03\x01\x13\x10\x29\xbf\x39\x69\xbc\x53\xb8\x57\x67\x9d\x7f\x5d\xa5\x55\x33\xef\x55\x9e\x77\x93\x84\xf4\x7a\x6d\x36\x02\x35\x0a\x59\x19\x13\x04\x49\x6f\xc8\xec\xf9\xc7\x25\xea\xf5\xba\x75\x15\xd8\x03\xe6\xee\x4b\x16\x3e\x9d\xf9\xd2\x2e\xba\xbf\xdb\x3a\xd1\x0a\x2c\x97\xba\x4d\x27\xe7\x87\xda\x5c\x58\x53\x07\x05\x0e\x65\x21\xe1\x19\x4e\x38\x13\x0b\xd9\x55\xe5\x09\xd4\x60\x2a\x82\x5f\x87\xd2\x83\x6a\x92\x8a\xc9\x3c\x76\xa6\xe4\xa7\x95\xab\x44\x6b\x66\xe6\x75\xd9\x9d\xf1\xdb\xe4\xa8\xdd\xc8\x3b\x14\x83\x29\x25\x79\x56\x46\x6e\xe7\xfb\xcb\xf9\x32\x5d\xf6\x7a\x6c\x30\x4f\xcb\x58\x18\x1f\x64\x20\xbb\x87\x81\xca\x0d\xd1\x00\x49\x68\x4a\xab\x01\x03\x85\x1b\x45\x8d\xb1\xf7\x8b\xf2\xb9\xc5\xf1\xae\x02\xf2\x00\x53\xc4\x04\x17\xb8\xdc\xb1\x94\x9d\x50\x69\xa8\x8a\x0b\x47\x8f\xe4\xea\x11\x41\x02\x2a\xc7\x25\x02\xe4\x53\x0e\xf4\xd5\xeb\x88\x0e\xcf\xb5\x9f\x56\x5d\x68\x6d\x9c\xbb\x86\x53\xfd\xf4\x54\x26\x7c\x94\x8e\x8f\xca\x96\x39\xb6\x81\xa3\xc4\x5a\x42\x82\x7a\xbd\xd2\x07\xb7\x11\x22\x9e\xd1\xd1\x68\x30\x18\x14\x38\x1d\x3b\xfb\xe7\x71\xa2\x5d\x0d\x0c\xcb\x96\x4d\x5b\xf6\x7a\x24\x2e\x61\xd8\xa6\x2a\xaa\x10\xa6\x55\x5c\xe0\x12\xaf\x2b\x3c\x1a\x83\xfd\x45\x6d\x26\xea\xe1\xf3\xd1\x09\x02\xae\x5a\x6e\x36\xee\x4c\x8c\xf8\x28\x1f\x1f\x59\x40\x01\xf4\x84\x44\x62\xe0\xde\x19\xd4\xb0\x64\x1a\xda\x6c\xba\x3c\x2e\x46\xf9\x18\x6d\x36\xf2\x4f\xcb\x84\x8c\x09\x86\xcc\xb6\xc6\x17\xbd\x1e\x6f\x9d\x7c\xd8\x23\x57\x93\x46\xc3\x30\x19\x44\xae\xd6\x2f\x82\x11\x29\x73\x84\xaa\xb0\x5c\xaa\x57\x5a\xed\xfc\x1c\x61\xf7\x59\xc0\x27\x58\x4b\xf8\x82\xb4\xd4\x73\x7b\x61\x4f\x8d\x3b\x3f\x9b\x4d\xab\x43\x2c\x32\x12\xe3\x0a\x73\xd3\x77\x62\x7f\x85\xe5\x3d\x26\x52\x89\xf0\xb4\x4f\xce\x24\x7c\x23\x13\xb0\x56\xdd\x98\x25\x49\x2d\x87\x20\xf7\x22\x01\xf6\x34\xee\xcb\x43\x1b\x85\x61\x4c\x15\xe2\xa0\x68\x2d\xe6\xbc\xb8\xea\x58\x33\xa8\x38\xfa\x13\x93\xc7\xad\x23\x8a\xce\xcf\x80\x77\x25\x09\xfb\x73\xe7\x8a\x8a\x79\xe7\xba\x58\xf1\x4e\x96\x8a\x74\xd0\x79\xcc\x89\xfc\xec\x08\x7e\x4d\xd9\x4c\x96\x86\xc2\x1d\x71\x55\xe8\xb8\xb3\xb2\x5c\x47\xed\xc6\xf2\xac\xa3\x2d\xb4\xa6\x34\x27\x9d\x94\x75\x68\x59\xae\x88\x6a\xb4\x86\xf2\x07\x11\xaa\xee\x62\xf5\x99\xb6\x5c\x27\x39\xed\xa7\xcb\x65\xff\x92\xf0\x92\x16\x81\xeb\x9b\xbe\x76\x52\xf2\xeb\xfa\x69\xb0\xc8\xb7\x7b\x7a\x54\x47\x5c\x48\x1d\xa0\x5e\x8f\xf4\x7a\x3c\xb4\xc2\x32\x57\x8a\xa4\x5f\xe8\x14\x1c\x98\x88\x01\x27\x33\x5a\x0a\xc2\x63\x2a\xc9\x09\x96\x74\x4f\x2a\xeb\xee\xc2\xd8\xe5\xe6\xf4\x82\xa7\x9c\x92\x72\x3f\x6c\xd4\x85\xcb\xc9\x8c\x7c\xfc\x6c\xe6\x31\x47\x64\xa0\xbb\x53\xd7\x60\x72\xef\x6f\xd9\xf1\x68\x30\xb6\xff\xde\xc3\xb6\xc4\x73\x90\x33\x91\x6c\x4b\xc9\xfe\x28\xed\xff\x32\xfe\xbf\xb1\xfa\x42\x67\xb2\x66\x39\x4f\x4d\x69\x99\xfb\xb7\x6c\xbc\xfe\xb6\xfa\xe2\x5e\xfb\xdc\xa7\x79\x5a\xce\xfd\x38\x2c\x90\x60\xcc\xed\x5a\x5f\xc9\x6c\xad\xd6\x38\x2e\x61\xfd\xdd\xd4\x08\x3c\x82\xfa\xca\x70\xfe\x33\x07\x5e\xe0\x4b\x3c\xc3\x17\xf8\x1a\x9f\x3b\xba\xe5\xea\x5f\xe9\xc9\xe3\xf9\x6f\xf4\xe4\xf1\xf1\x3f\x4f\x1e\xff\x76\x4f\x1e\x6d\xe6\xe6\x6b\x46\x3e\x8a\xe1\x2b\x3c\x91\x94\x42\x3e\x7c\x5b\x69\x7c\xc7\x57\x0c\x6e\xcf\x77\x89\x75\x2f\x65\x5c\x51\x3a\x6f\x91\x11\x9c\xd4\x41\x39\x2f\xae\x5e\xf3\x62\xc6\x49\x59\x82\x8f\x99\x5a\x79\x56\x88\x38\x22\x1f\xa9\xa0\x6c\x06\x2e\x8d\x6a\xf9\x29\xcb\xe2\x28\x68\x04\x47\xac\x10\xcf\x6d\x8d\x62\xdf\x08\x5c\xe3\x69\xbd\xe8\x45\x51\xe4\x71\x64\xf0\x8c\xe7\xea\xc6\x7a\xd6\x8c\x34\xa6\x01\x77\xcb\x11\xb2\x32\x7f\x57\x40\x75\x22\x54\x38\x3a\xbf\xb4\x72\x3e\x11\xe1\xe8\x5c\xc3\xf6\x65\x33\x13\xd9\x87\x82\xd6\x06\x91\x7d\x2b\xa8\x67\xaf\x7d\x90\x60\x41\x17\xa4\x58\x89\x2a\x42\x38\x33\x8f\x0b\x2a\x46\x29\x9e\xd7\xbe\xa7\xb5\xef\x65\xed\x7b\x51\x7b\x80\x50\xb9\x36\xb0\xeb\x9e\xc7\x87\xe7\x5a\xea\xaf\xc3\xef\x44\x38\x8a\x5c\x62\x9e\x5e\x43\x7c\x63\xa7\x7b\x63\xb3\x64\xe7\x97\x24\xc2\xdd\x53\x97\x16\x40\x1e\x47\x17\x45\x21\x4a\xc1\xd3\x65\x84\xf0\x95\x2e\x12\xee\x8b\x4b\xfd\x68\x61\x72\xbd\x6d\x82\x67\xb5\x3c\xbf\xe6\x93\x94\x47\xf8\xa2\x56\xc0\xec\x1a\x7c\x5d\xcb\x98\xa7\xe5\x93\xbc\x98\x7c\x88\xf0\xb9\xca\x01\x71\xff\xf6\x35\xb6\x8f\x04\xd1\xb4\x58\x31\x25\x77\x06\x16\x74\x4e\xcb\x81\x3f\xc7\xb3\x28\xcd\x09\x17\xfd\x8b\xe2\x63\x27\x1a\xaa\x8f\x8e\x4a\x8a\xa0\x0f\xf8\xfd\xee\x7a\x49\x62\xe7\x5f\x19\x5a\x71\x3b\x66\xb3\x89\x22\x8d\x88\x7f\xfe\x62\xdd\xe8\x42\x8d\x68\xb3\x51\x22\xce\xad\x43\xae\xbe\x58\x93\xea\x67\xe8\x13\x9a\xd6\x7d\x06\x62\xe0\x3a\xb1\xd4\x32\x10\x05\x99\xa5\x86\xf2\xb3\x15\x4f\x35\x05\x26\xaf\x0c\x82\x85\x1f\xc5\xc1\x9f\x89\x1f\xbf\x81\x6c\x36\x5d\x12\x20\x11\x17\x04\xc2\xf0\x8f\xb6\x11\xb1\xa5\x11\x71\xa6\x7e\x0e\xc5\x40\x9f\x14\xb4\xd9\x9c\x1c\xb5\xcd\x67\x2e\x16\xf9\xdb\x74\x4a\xe2\x9f\x05\x4f\x99\x72\x44\xdd\xcf\xf4\xd0\x87\x9d\x2f\xd6\xbc\x5a\x94\x3f\xa3\xea\x1c\x02\xa6\x3f\x67\xc2\xf3\x47\xea\xdc\xdb\x78\xc3\xd0\x02\x6f\x05\x19\x1d\xcd\x52\xee\xca\xd8\xb4\xf1\x23\x49\x2f\xc9\xbe\x36\xba\x5e\x23\x7a\x67\x06\x0d\x83\x8e\xa6\x69\x56\x3b\xdb\xfb\x41\xe6\x18\xdb\x75\xed\xc1\x11\x4a\x07\x35\x75\x61\x5b\xae\x2a\xd8\xd3\x9c\x4e\x3e\xb8\x65\x7a\xe8\x2d\xd2\x0d\x20\xad\x1b\x7e\xa5\x9a\xab\xad\x29\x31\x70\x69\x1f\x2c\x0c\x02\xbc\x5f\xaf\x77\x97\x7a\x46\xb3\x17\xac\x24\x5c\x04\x1e\x3a\xd4\x49\x8d\x51\xf2\xc8\xb9\xab\xad\x23\x9a\x13\x54\x19\xb7\x44\x2e\x57\x3f\xda\xbd\x25\x12\x4b\x79\x8e\x5f\xcd\xfb\xa8\x5b\xf4\x3f\x80\x0b\x20\x1e\xe9\xb7\x07\x97\xb1\xad\x16\x2c\x73\x5b\x2d\xc8\x00\xbf\xcf\x59\x06\x91\x4d\x7f\x94\xfc\x06\x23\x3c\x0e\x02\xff\xd7\xfb\xd1\x4d\xed\xa8\xa8\xa3\xf9\xd7\xbb\x32\x15\xab\x82\xfd\x85\xe6\xf9\x33\xed\x99\x91\xa0\x35\xd1\x1e\x75\x6f\x37\x8a\xed\x75\xf7\x0c\x04\xbf\xd5\x0e\xb9\x2d\xf0\xcd\x8b\x4e\xfb\xaa\x57\xf8\x32\xf9\x18\x2f\x7c\x51\x78\x78\x0f\x8c\xf8\x9d\x5f\x33\xea\x1d\xf8\x57\xc9\x88\xdd\xb5\xf9\x8b\x5d\xe3\x87\xdb\xe8\xee\x2f\x49\xd7\xf5\x3e\xec\x85\x76\xf7\x97\xa4\xf3\x7a\xdb\xee\x4e\xbc\xfb\x4b\x52\xad\xe9\x1d\xc4\xd3\x41\x8f\x4b\x87\x36\x86\xf0\xc2\x7f\x45\xa9\x8d\xc2\x5e\xbd\x87\xbd\x37\x6d\xa9\xbb\xbb\x0f\x7b\xd5\x1e\xf6\xdc\xb4\xa5\xee\xee\x3e\xea\x97\xf1\x61\xcf\x4e\xbb\x9b\xd8\xdd\xa3\xbe\x4e\x22\x3c\xca\x6e\xd8\x91\xa9\xb9\xbf\xfd\xa2\x94\x30\x9b\xdf\xa2\x7d\x59\x73\x5f\xfb\xf6\x8e\x89\xf0\x68\x7a\xe3\x3e\x5c\xed\x7d\xfd\x78\xd8\x38\xc2\xa3\xe5\x8d\x7b\xf2\xeb\xd7\xfa\x5a\xf8\x3a\xaa\xef\x76\x49\x6a\xd4\xbf\xcd\x97\xb0\xa6\x74\x46\x47\xc3\x35\xf1\x10\x0e\x94\xc4\x1c\x05\x4f\x0b\xbf\xa2\xf0\xe2\xee\x2c\xb1\x36\x78\xe6\xca\xe9\xee\x6c\x45\xb3\x1f\x0a\x8e\x2c\x87\x18\xf9\x91\x12\x30\x0b\xd9\xa8\xb8\x2d\xc2\x85\x4a\x83\x1b\x93\x64\x08\xb5\xb0\x56\x10\xe4\x00\x04\x2d\xe9\x91\xcf\x66\x15\x1e\x93\xf2\x8e\x2e\xe4\xcd\xac\x59\xff\x3a\xf7\x22\x19\xaa\xc2\x2a\x71\xc9\x3b\x4c\xc2\x06\xe8\x1f\x97\x6e\x91\x70\x26\x1b\x33\x6d\x29\x1a\x0f\xf3\x24\x3a\x97\x93\x8d\x70\xaa\x12\x62\x96\x50\xb4\x4d\x36\x06\xd1\x17\xbd\x05\x62\x5b\x65\x63\x6c\x8b\x6c\x8c\xd5\x65\x63\x2c\x90\xa6\xb0\xa6\x34\x25\xf5\x64\x63\xda\x5d\xb9\xd6\xc7\x92\x1f\x6d\xde\xca\x05\x9d\x7c\xb8\xde\x6c\x14\xdd\x21\x59\x02\xfe\x2e\x2d\x3f\xb8\x88\x08\x44\xbc\x08\x61\x12\x23\x54\xd5\x29\x65\x4d\x9a\x2a\xe1\x08\xac\x82\x69\x00\x96\x25\x2d\x3f\xbc\xd0\x8f\x2c\x67\xb1\x95\x9b\x0c\x54\xf1\xb8\xb5\x9c\xe9\x5f\x90\x94\x67\xc5\x15\x8b\x11\x1a\xba\x82\x6e\x98\x95\xfc\xae\x8d\xc3\x2d\x6e\xaf\x17\xb7\x55\x52\x6d\x0b\x15\x90\x38\x8e\x32\x9a\x3d\x77\xad\x44\x08\x55\x57\x1e\x35\xa8\x1b\x2d\x98\x4e\xd0\xd4\xba\xfd\xb6\xa0\x6a\x99\x7d\x90\x16\xd5\xe7\x18\x21\xac\x16\xc7\xef\x2e\x8c\x1d\x10\x70\x49\x0d\x0a\x3e\xd8\xc5\xa7\xa8\xf2\x58\x9f\xdd\x65\x4f\xec\xf8\xe6\x64\xf2\xe1\xc5\xf4\xed\xbc\x58\xe5\x99\x66\x9a\xbc\x4d\x00\x0f\x04\x76\x67\x48\x66\x51\x61\xa8\x23\xc3\x73\xbb\xc5\xcc\x53\xc9\xff\x01\xa3\x61\x41\xee\x08\x55\x1c\x34\xd2\x60\x36\x6c\x97\x16\x34\x98\xa8\xa5\x7d\xd7\x36\x18\x5a\x6a\x68\x91\x0c\x59\x4f\x57\xae\x35\x77\xe2\x4f\xec\x2e\x54\xa2\xfd\x77\x7a\x00\x5a\x09\x71\xfb\xe8\xbd\x7d\x57\xb5\x37\xd1\x98\x43\x63\x75\x61\x0a\x79\x49\x3a\x8d\x16\x5b\x4f\x95\x1e\x53\x6c\x7c\x02\x42\x6c\x5c\x95\x75\xd4\xd0\xf9\xdc\x82\xad\xcc\xb1\xa9\x65\x54\xe7\x33\x22\x9e\xe7\xe9\xb2\xb4\x9d\x19\xaf\x0a\xcd\xce\xfa\xed\x2d\xf8\x3b\x99\x24\x2d\x2b\xa6\xce\x09\xd8\xc1\xb5\x1e\x71\xf0\x2e\xd6\xb6\xe1\x34\xc4\xeb\x43\x7c\x94\xf8\x7b\xc6\xf0\xfd\x0a\x5f\x99\x73\xbd\x0d\xe3\xd8\x8d\x87\x2a\x0f\xee\x8a\x8b\xb7\x0f\x56\x6d\xf2\x16\x1d\xa2\x20\x60\xd1\x0d\x1f\x4f\x06\xff\x58\x91\x15\x39\x12\xbd\x9e\xb0\x01\x57\xc0\x01\xad\x92\x8a\x41\x2b\x59\x88\x14\x7c\x1c\xf3\x2c\x40\x9a\x91\xe4\xde\xca\x84\x79\x84\x4b\x6e\xaf\x97\x55\x22\x19\xb7\x49\x72\x17\xf6\x01\xcf\x93\x75\x85\xfd\x27\x88\xc9\x96\x27\x88\xf9\x88\x8c\x93\x89\x7e\x82\x98\x87\x4f\x10\xfe\x27\x9e\xd7\x9f\x20\xe6\x5b\x9f\x20\xe6\x9b\xcd\xbc\xfe\x04\x31\x0f\x9f\x20\xe6\xc9\xea\x90\x27\x88\x20\xe4\x53\x5c\xe2\x1c\xcb\xe5\x21\x15\xc2\x73\x84\x33\xef\x09\x62\x5e\x7b\x20\x98\xeb\x27\x88\x20\xfd\x6c\xde\xbc\x34\x33\xfb\x04\x31\xdf\xfd\x04\x51\xef\xa1\xfd\xde\x97\x43\x9c\xcb\xe9\x29\xda\x81\x26\x73\xcc\x94\x13\x24\xef\xd9\xed\x68\xef\x33\xb2\x22\x2d\x6d\xa4\x8f\xe0\xb1\xaf\xd5\xd5\xe7\x36\xca\x75\x0b\xb9\xaa\xb2\xfb\x57\x54\xcc\x41\x14\xbd\xa5\x58\xd0\x6f\xbf\x00\x17\x8f\xdb\x69\xe0\x19\x51\x2d\x1a\x9b\xef\x76\x87\x1c\x2d\x14\x71\xed\x55\xd2\xd1\xc6\xd3\x7f\xa5\x57\xc8\xe5\x7f\x5e\x03\xff\xdd\x5f\x03\xe5\x2d\xbd\x48\xe2\xc6\x53\x1b\xf9\xc7\x2a\xcd\xe3\x08\xae\x88\x81\xf1\xe5\x70\x12\x30\x42\x8d\x37\xb7\x45\xba\x7c\x72\xad\xeb\x44\x58\x23\xff\xa0\x4a\xfd\x11\x6e\x50\x16\x5c\xd8\x1a\xed\x48\x92\x0c\x96\x9c\x16\x9c\x8a\xeb\xef\x84\xfd\x79\x76\x3a\x74\xe9\x8f\xbc\xf4\xfe\xe9\xf0\x24\x0c\x6d\xd7\x78\xd8\xc3\xab\xd6\x87\x30\x7d\x57\x06\xbc\x9a\xf7\x04\xe6\x71\x1a\x53\x47\x83\x2e\x96\xe2\x3a\xc2\x13\xfd\x90\x64\x32\x60\xe6\x65\x84\xb3\x5a\x7a\xca\x39\x04\x83\xfe\x6f\x35\x5f\x63\xbd\x63\x59\x93\x67\xda\xb3\x84\xb9\x6e\x01\x2e\xd6\x93\x7a\x9d\x8e\xdf\x43\x6c\x6b\xb5\xfa\x9c\xa4\x5c\xdf\xd1\x65\x0c\xa6\x1e\xa1\xbf\x0f\xd5\x39\x61\xd0\x97\x26\x43\x18\xb9\x0a\x24\xb3\x04\xa9\xd6\xaa\x5a\x6b\xe1\x5b\x95\x22\x27\x24\x55\x6b\x1e\x3c\x7e\x2a\x18\xf1\xec\xbd\x89\x6f\xce\x40\x1a\xef\x13\x60\xa9\x2b\x3b\xd0\xd3\xaf\x8c\x82\x0e\xc4\x9c\x8a\x3d\x40\x78\x7b\xc3\x6b\x51\xe8\x88\x78\xae\x92\x1b\xf8\x92\x90\x0f\x3f\x50\x5e\x8a\x5a\x00\x3d\xb5\xbf\x21\xec\xa6\x3a\x4b\x50\xf2\xc7\x74\x4b\xc1\x3c\xb5\xe5\x66\x44\x00\x8c\x34\xcd\x14\x96\x76\x8d\x54\x4d\x60\x7a\x7a\xd2\x60\x18\x44\x3d\x93\x06\xd8\x26\x53\xaf\xf8\x33\xeb\x6c\x64\x2d\xf1\x52\x52\xb7\xf1\x19\x45\x92\xd6\x2a\x21\x30\x8f\x1c\x08\x2d\xd8\x0f\xa0\x98\x45\x21\x51\x33\x5c\xcf\x56\xcb\x9c\x4e\x52\x41\xca\x68\xec\x0e\xae\x73\xfd\x5a\xe0\xb5\x4f\x2f\x02\x6b\x5a\x39\xbb\x40\x25\xc0\x71\x6a\x9d\xa1\x45\x97\xb5\xea\x98\x11\xf1\x0a\x2e\xd4\x57\x5c\x0f\x3b\x86\xc8\x88\x8e\xce\x4f\xb1\xc0\xcc\x99\x63\x58\xff\xf4\xda\x12\x2a\x45\x55\x5b\x23\x41\xd4\xee\x9b\x01\xcc\x0b\xb0\x15\x73\xec\xb4\x89\x7d\x0f\xe9\x61\x84\x05\x81\xce\xd8\x50\xb8\x17\xd2\x5a\xb3\xde\xa6\x6f\x0d\xdd\xa5\xad\xdc\xdf\xc0\x2e\xd4\xcf\xa2\xca\x85\xee\x6c\x48\xd8\x25\xe5\x05\x5b\x28\x57\x15\xa2\x36\x15\xb2\x63\x1e\xce\xc0\xcb\x73\xad\x29\x14\xe7\xd5\x32\xb2\x1b\xc1\x68\xeb\x2a\x47\x86\xe8\x39\xde\xf2\x2e\xdc\x60\x1a\x39\x26\x23\x31\x46\x15\x6c\x87\xf0\xf4\xb6\x0d\x49\x7f\xbe\x53\x1b\xd8\x9d\x6e\x54\xd5\x4f\xb1\xe1\xc5\x92\x58\xab\x91\x26\x8f\xec\x09\xaa\xef\x65\xde\xe4\x2f\x3d\xcb\x2a\x86\xd7\xc6\x99\xa7\x50\x3e\xc2\x25\xe9\x0d\x03\x96\xa8\x91\xa1\xaa\x3a\x9f\xa7\xa5\x3d\x30\xf5\x20\xb3\x0a\xb5\xbb\xf0\x4c\x04\x55\x16\x79\x7a\x0f\x95\x64\xd0\x38\x79\xe0\x4b\xbd\xe1\x10\x45\x9c\x89\xa1\xe6\xb4\x00\x18\xaf\xeb\xd5\xfc\x36\xa1\x73\x6b\x77\x15\x8e\x53\x18\x34\x5b\x35\xd1\xd6\x72\x65\xf1\x14\x91\x7c\xda\x24\x59\xc6\xab\xd0\xe0\x44\xdf\x64\x77\x7f\x41\xca\xea\x6d\x9b\xcb\xf0\xee\xef\x47\xf3\x7a\xd3\xb5\xfb\x74\x54\xde\xd9\x90\x2a\x6c\xbf\xfd\xcc\x1c\xf2\x4c\xb4\xbf\x19\x84\x57\xbe\x1c\x7f\xe5\xcb\xf1\x17\xbb\x58\xa8\x03\x74\x27\x7f\x9b\x50\xbd\xef\x5e\xfe\xf8\x24\xe5\xe5\xc0\x0c\x30\x5e\xd3\x6c\x18\xfd\xf2\xfa\xf5\xe9\xdf\xbf\xf9\xeb\x87\x08\x5f\xe4\xc5\xe4\xc3\xf0\x77\xeb\xa8\xbc\x5e\x5c\x14\x79\x19\x0d\x47\x51\xcf\xe0\x18\x1c\xf5\x52\x21\xc0\x37\x53\x54\x8a\x54\x40\x08\x6c\x59\x64\x74\x7a\x8a\xa3\x8c\x5e\x46\x63\x3c\x3a\xfd\x1a\x9f\xe0\xd1\x83\x53\x3c\x8a\x82\x09\x77\x22\x3c\x7a\x70\x5f\xe6\x79\x4f\x72\xe3\x31\x8e\x20\x43\x56\xf9\x1a\x9f\x8c\xf1\xc8\x14\x32\x12\x35\x59\xc4\xfe\x06\xd9\xf8\xf6\x3a\x5a\xbd\x40\x56\x31\x3f\x55\x8d\xf1\x78\x8c\x47\xf7\xbf\xc4\x11\x2f\x40\x9b\x09\x46\x00\xa3\xfd\x06\xdf\x1f\xe3\xd1\x97\x78\xf4\xe0\x5b\xfc\x60\x8c\x47\xd1\x44\xbf\x97\xe9\x26\xcd\x33\x98\x6c\x41\x75\xae\x0b\x7f\xe9\xf5\xeb\xbf\x33\x35\x0a\x7e\x15\x14\xf4\x9f\x89\xbc\xa2\xa7\x72\x14\xf7\x71\xf4\xb7\xbf\x31\x39\xac\xaf\xf1\xe8\xc1\x37\x6a\x6a\xf7\xbf\x81\xb1\x9c\x9a\xc2\x78\x34\x8a\xdc\x82\x90\xbc\x94\x93\x1c\xad\x6b\x0b\x72\x1f\x47\x9d\x4e\xa7\x03\x53\xfc\x16\x9f\xea\x11\x8c\xf1\xe8\xc1\x57\x30\x61\x0d\xbc\xd3\xb1\xcd\xb1\x0f\x72\x16\x64\x6e\x40\x63\x1c\x2d\x53\x9e\x2e\x88\x20\x5c\x36\x3f\xae\xf0\xae\x0e\x2d\xf0\x60\x03\x38\xbd\xbc\x28\x68\x34\x98\xa5\xae\x50\x7f\x89\x6f\x9b\xf4\xf6\xd9\xea\xee\x4f\xdc\x5e\xfc\x12\x9f\xe8\xc5\xee\x9b\x87\xd3\x28\x84\x76\xa7\x73\x70\x4d\x18\x10\x1e\x9d\x7e\x85\xbf\xb2\x33\x6c\x3c\xc7\xc2\x14\xa1\xfd\xd3\x07\xb5\x4e\xa2\x30\xb1\x0d\xac\xb0\x51\x5b\x12\xa1\xe2\x18\x5e\xfa\x9f\x5f\xa6\x79\x34\x9c\xa6\x79\x49\x70\xb4\x5a\x5e\xa6\x50\x2a\xa2\xd3\x48\x6d\x7a\xf0\x63\x6a\x00\x0f\x1f\x19\xcd\xfa\x54\x3f\xa1\x46\x92\x15\xe9\x67\x66\x03\x56\xbf\xc3\x0b\x22\xd2\xe1\x5a\x05\xec\x82\x78\x92\xb7\x40\x66\x83\xf9\x45\x19\xed\x8f\xb6\xbc\xed\xf1\xf2\x33\x06\x73\xcf\x32\x67\x99\xa0\x1e\xf5\x42\xdb\x01\xab\xd8\x09\x81\x1d\xfd\x7b\x5c\x47\xc4\xaa\x95\x37\xf1\xeb\x75\x68\x47\x17\x27\xa8\x4e\xa0\x5a\xfb\x94\xaa\x11\xf3\x42\x20\xe8\x36\x95\x1c\x89\x15\x78\x68\x3b\xcb\x63\x01\x01\x52\x2d\xf1\x6d\x6c\xc5\x06\xe9\x72\x99\x5f\xc7\x02\x13\xf0\x34\xa2\x9f\x3f\xdb\x4c\x19\x6b\xf3\x22\xb8\x36\xb3\xd6\x79\x84\xdc\xa0\xa8\x05\xee\xd0\xbd\x85\xf6\x9f\x55\xd5\x6a\xdb\x78\x98\x28\xef\xb7\xb0\xf1\x0c\x69\x50\x2d\xe3\x1f\x3e\x20\x0f\x70\xed\x9d\x65\x78\x82\x8d\xa8\x62\x78\x7a\x72\x82\x95\xfc\x7f\xd8\x3d\xc5\x3e\x7a\x92\xdf\x40\x9b\x46\x94\x4d\x8b\x08\x7e\x97\xc3\x51\x54\xae\x26\x13\xa5\x27\xad\xd2\xa3\xab\x94\x33\x78\x1a\x8a\x32\x49\x08\x71\x7b\xfd\xe0\xa8\x24\x93\x82\x65\x29\xbf\x8e\xc6\xb8\xc9\x1a\x0e\x47\x11\x2f\x56\xe0\xbf\x79\x52\x30\xc1\x8b\x1c\x94\xd7\xa2\x4b\x4a\xae\x20\x4d\x1f\xc6\x68\x8c\x1b\x84\xec\xb0\x7b\x5a\x6d\x89\x1a\xb3\x4f\x7c\xfa\xeb\xc6\x74\x75\xd6\x42\x21\xc3\xea\x02\xa7\x26\x49\x62\xad\xbd\xb8\xf3\x71\xb3\x7f\x66\x5a\xda\xac\xcf\xda\x6f\x14\xaf\x6c\x5d\x59\xde\x8d\x07\xbc\x1b\x4b\xc8\x88\x8f\x1b\xa1\x19\xc1\x47\xa4\x18\xf1\x71\xe2\xf1\xe0\x87\x4f\xb6\x60\xf9\xaf\x6b\xed\xa5\x42\x19\x99\x50\x89\xdc\x9f\x2f\x53\xf3\xed\x9f\x76\x93\x44\x0c\xc0\xfd\xda\xab\xa9\x9a\x20\x1f\xb1\x71\x42\x46\x6c\xec\xc5\xa4\x3a\x78\x8e\xf6\xf9\xe0\x9f\x6c\x9a\xc9\x1d\xa6\xa9\xfc\x6d\xf6\x8d\x23\xc3\xfe\x92\xd3\xcb\x54\x90\x7b\x4a\xe8\x12\x66\xff\x36\xe8\xd3\x26\x8d\x3c\x1f\x9a\x81\xd0\x81\x96\x92\xbd\x00\xf5\x6d\x01\xbb\x38\x11\x03\x35\x70\x84\x89\xfc\x52\x5a\xe9\x87\x41\xc0\xba\x74\xb4\x81\x0e\xb7\xbd\x3f\xdd\x08\x74\x9f\x2d\x4e\x24\xf1\x42\x32\xd6\x83\x46\x86\x0e\x4f\xb7\xc4\x71\x94\xc4\x93\xd7\x04\xbf\x8b\x63\xcc\x1d\xe0\xd4\x82\xa1\x7f\x7a\x60\xea\x71\xde\x04\x94\xba\x0a\x00\xd2\x54\xff\x4c\x60\x9c\xaf\x16\x29\xab\xed\xc9\x4f\x7c\x14\x4d\x17\x6d\x3e\x53\xcd\xe5\x72\xef\xfc\x78\xd3\x3f\xbe\x37\x0b\xdd\xba\x8e\xbd\x58\x6c\xcd\xa3\x49\xe4\xd1\x24\x09\xb1\x47\x53\xe9\x24\x18\x1f\xa6\x51\x64\x63\x93\x8b\xe2\xc7\xe2\x8a\xf0\xa7\xa9\x7e\x99\x5b\xe6\xe9\x84\xc4\x42\x72\xdf\x0e\x9f\x0d\x26\xf3\x94\x3f\x16\xf1\x09\x1a\x88\xe2\x4f\xcb\xa5\x29\x7f\x6c\x5e\xf7\x4e\x51\xf5\x59\x96\x20\x97\x63\x9b\xa4\xe5\xa1\x78\x41\x5d\x21\x5e\xad\x4f\xb4\xeb\x3f\xa5\x63\x6a\x32\xb0\xe3\x0b\x97\xba\xee\x9c\xcc\x0b\x3b\xeb\xd7\x61\x37\x71\x94\x5a\x0f\x73\xb4\x1d\xd4\x82\x8a\x9c\x1c\x8e\x81\x75\x28\x36\x5b\xe9\x9f\x12\xd0\x66\x78\x37\x80\xb3\xad\x72\x23\x30\x1f\xbe\xa3\x05\x5f\xb1\xc9\x0d\x22\xeb\xd6\x3c\x5b\x27\xa7\x5f\x9e\x60\x9e\x74\x4f\xc6\xd6\xf9\xc9\x99\xe8\x3f\x18\x8a\x56\x4b\xab\x5d\x18\x81\xf4\x7a\xe6\x3d\xf9\x11\x3b\xe3\x67\x64\x50\xae\x2e\x54\x66\x7c\x82\x19\x3a\x8e\x06\x83\x41\x34\xac\x27\x0f\x6f\xa5\xe6\x6b\x66\xfd\x89\xdd\x68\x6f\x07\xf3\x4a\x22\xa9\x1b\x23\x0e\xaf\xd6\x3f\xe5\x7e\xb6\xe3\xbb\xc1\x86\x76\x75\x3e\xf1\x8e\x6e\xe0\xda\x5f\x93\x52\x8f\x22\xb8\xff\x9a\xb1\x98\x91\x73\x06\xf2\xee\x7a\x49\xb4\x43\x90\xe7\x1f\x97\x64\x22\x48\xd6\x49\x75\x18\x65\xdc\x99\x41\x98\xb9\xe8\xd8\x56\xb4\x31\xa5\xc3\x3b\xf1\x30\x4a\xb6\x8e\x0e\xff\x3d\x61\x61\xe9\x83\x7b\xf1\xd9\xf0\xff\xdb\xfc\xad\xdc\xf4\x37\x7f\xbb\x87\xfe\xf6\xf6\xde\x2c\x9c\xa5\x57\xdd\x23\x17\xaa\xf6\xe8\xbd\x5b\xa1\xc9\xe9\xe2\xdf\x09\x92\x9c\x2e\x6e\xb6\x9d\x5a\x91\xd8\xbf\x3a\x14\x82\x0d\xd1\x02\x8c\x22\xcf\x95\x88\xcc\x17\x44\xd7\xf3\x5a\xb1\xfa\x41\x35\xad\xa0\xbb\xad\x9e\x76\x53\x97\x11\x26\xa8\xb8\xde\x5e\x82\x11\x92\x95\x7d\x4e\x8c\xf3\xb6\xcf\x1b\x6d\xc6\xe0\x7a\x50\x95\xa2\x75\xaf\x7f\xaa\x2f\x78\x63\xfe\x40\xae\xb5\x0f\xcd\xc1\x9c\x66\x19\x61\x49\xf7\x54\xeb\x6d\x0b\xb2\x48\x84\xd1\xe1\xce\xc8\xc7\x84\x1b\x33\x8d\xeb\x9c\x24\xac\xf2\xdd\x91\xa1\x35\x10\xf3\x46\x39\xc5\xfa\x25\x30\x36\x35\x6b\xe5\x64\x60\xe8\xa2\xa9\x6b\x8b\x10\xf5\x18\x7e\x01\xce\x94\xf5\xa8\x8d\x39\x00\xc9\xf3\x1f\xa1\x56\x98\xce\xd3\xab\x17\x82\x2c\xca\x30\x95\x36\x93\xca\x09\x2f\xf2\xfc\x47\x32\x15\x6d\xe9\xef\x8a\x65\xad\xbf\x9c\x12\x26\xfe\x42\x33\x31\x6f\xcb\xf8\x03\xa1\xb3\x79\xad\x25\xed\xa8\xf3\xad\x23\x17\xb5\xde\x96\x4a\x7f\x9e\xc3\x4b\x54\x73\x5a\xa5\xd3\x86\xf2\x52\x5f\xa6\xcb\x36\x07\xdf\x66\xd4\xa0\xcb\x86\x8e\x3c\x97\xc5\x33\x22\x1e\x0b\xc1\xe3\x48\x81\x2f\x42\x47\x01\x34\xdd\x1b\x84\x0b\x5d\x33\xfc\xaa\x09\x9c\x93\x4d\xd8\x9a\xca\xea\xe7\x64\x0a\x9a\x2e\x35\x98\x6d\x29\x2d\x8a\xa5\x2d\xec\x43\xb2\x5e\x9c\x94\x82\x2e\xc0\x77\xe1\x95\xcc\xaf\xd5\xd1\x40\xde\x5e\x69\x0e\x05\x6a\xc3\x52\x7e\xd2\x92\xd6\x71\x29\x07\x5b\x11\xaa\xf0\x39\x9c\xc0\x37\xf6\x00\x3a\x0b\x1d\x6b\xc0\xa1\x3d\x30\xd8\x14\xca\x66\xc6\x1a\xe9\x9c\x96\xbf\xcf\xe9\x62\x41\xf8\xfd\x18\x9d\x69\x1d\x19\x4e\x58\x26\x17\x65\x58\xd3\xed\x99\xd3\x12\xa1\x0a\x67\x34\x7b\x43\x26\x84\x5e\x12\x39\xa4\xd2\xee\x76\xbd\x94\x6a\x0e\xab\x25\x84\x79\x93\xdb\x37\x4c\x7a\x0b\x13\x78\x5d\x28\x67\x07\x31\xaa\xb0\xa7\x2d\xa8\xb7\x96\x6d\x12\xb6\xbf\xb1\xdd\x87\x0f\x6d\x15\x00\x5e\xd2\x5e\x5d\x94\x84\x5f\x12\xbe\xb7\x80\x7a\xfa\x59\xcb\x8e\x14\x50\x87\x85\x9c\x85\xfe\x1d\xd5\x41\x18\x55\xa8\xc2\xc1\x04\xd6\x8d\xb3\x1b\xae\x8a\xcc\xe8\x6b\x87\x23\x4a\x0f\xbd\xbe\x6e\x30\xb6\x08\x39\x45\x19\x73\xde\xbb\x49\x42\x7e\xf3\xe9\xd6\x71\x10\x09\xb4\x28\x20\x90\xbd\xc2\x91\x44\xc4\x91\xea\x18\x5c\x16\x80\x9d\x46\x9a\x65\xf5\xf1\x35\xd2\x6e\xb1\x02\x66\x09\xea\x1b\xc6\xd9\x28\x05\xe7\xc4\x98\x4d\xb5\x21\x92\xe0\xe8\x1f\xb9\xb0\x56\xc0\x07\x2e\x53\x5e\x92\x17\x4c\xc4\x04\x9f\x9e\xa0\x06\x1e\x51\xe5\xbc\xd9\xbb\xac\x08\x13\xa4\x30\x57\x7d\x3f\xf8\xd8\xc3\xf5\x27\x40\x48\x6c\xfb\x13\x8d\xfe\xde\x15\x4b\x55\xac\xd1\xdd\xbb\x62\x29\x01\x6e\xf7\xe5\x53\x87\xa2\x8d\xd1\x4d\x52\xdf\xa3\x03\x0f\x8f\xc7\x0d\x14\xd6\x82\xa0\xfc\xa1\xd6\x2f\x02\xc9\x22\x03\x6a\x4b\x5a\x32\x55\x8e\x2c\xa2\x10\x59\x6b\x19\x95\xa5\x71\x91\x9a\x9b\x97\x0d\xa6\x5c\x80\x0a\xde\x00\xf6\xf1\x83\x28\x7a\xd8\xe3\xa9\xbc\x66\x42\x84\x12\x80\xc2\xc2\x47\x95\xf3\xf6\x0a\x6c\xda\x76\xdb\x3a\xf3\x38\xac\x0b\x61\x13\x27\xd0\x5c\x3c\x1e\x48\x55\x8e\xde\x3b\x5b\x72\x13\xa2\x50\x80\xf8\xff\xd9\x7b\xfb\xef\xb6\x71\x2c\x41\xf4\x77\xfd\x15\x32\x4f\x3d\x35\xb1\x86\x19\xb9\xfa\xcd\xce\x8e\xd2\x88\x26\x95\x38\xd3\x99\xae\x4a\xb2\xb1\xab\x7b\xe7\xa8\xb5\x0e\x2d\x42\x36\x3a\x34\xa8\x01\xa1\x24\x6e\x89\xff\xfb\x3b\xf8\x24\x40\x82\x12\xe5\xd8\xee\xee\x79\x73\x4e\x9d\x8a\x45\x00\x17\x5f\x17\x17\x17\xf7\x13\x52\x13\x09\x0e\x79\xd7\x21\x5c\x07\x2f\xc4\x45\x7b\x07\x25\x83\xf2\xd2\x8c\xae\xc6\xbc\x26\xd6\xb4\x6f\xa8\xd0\xf6\xc2\x2c\x84\x23\x6b\xfa\x60\xf0\x6f\x90\xbb\x8c\x4b\xf4\x4b\xca\x6f\x92\x5b\x42\xe3\x05\x74\xaf\x70\x30\x58\x9c\xa0\x25\xcc\x8e\xc5\xff\xea\x4a\xd9\xb1\x5b\xa9\xce\xe0\x10\xdf\xd4\x3b\x72\xb2\x50\x6b\xbb\x42\xb3\xb9\xd4\x48\x71\x34\x7e\xce\x7f\x97\x3d\xe7\xc7\xc7\xa0\x40\x8b\x63\x0e\xd3\x86\x08\xe0\x26\x51\x7a\xb4\x97\x3c\x2e\x00\x80\xb9\xcc\x9d\x9f\xcf\xd2\x39\x80\xe5\x34\xa6\xed\x25\x51\x39\x78\x05\x21\x94\x11\x1b\xe2\xa2\xe7\xec\x6b\xc3\xd3\x12\x46\xa5\x8a\x23\x45\x1b\x9f\x15\x33\xaa\x23\x4f\xb9\x05\x9f\xf1\x5d\x04\xd3\xc6\x47\x9d\xc2\xa9\x00\x70\x3d\x4b\xe7\xa8\x04\x93\x95\xb4\x9b\x8c\x0b\xe0\x4c\xde\x61\xc0\x34\x06\xca\xd5\x10\xa8\xbf\x9e\xc5\xa5\x33\xc1\x72\xc6\xe7\x40\xa6\x51\x11\xa5\x2b\x5d\x1b\x6c\x0a\xb4\x4a\x56\xc5\xca\xb2\x61\xde\x92\x0d\x9a\x0b\x8a\x6b\xeb\xea\x27\x5a\xb5\x3d\x8b\xe3\x7f\xe6\xf8\x56\x7a\x69\x76\xae\xbb\x5a\x4b\xe5\x37\x1a\xae\x34\x0e\x0f\x2b\x52\x24\x6c\x32\x1c\x3f\x1f\x66\xa4\x5c\xe5\xe9\xdd\x64\x48\x0b\x8a\x9f\x47\xee\x7e\xac\xdc\x5d\x10\x6b\x3b\xe3\xf3\xbf\xc1\xc2\x96\x48\xbc\x4e\x49\x9c\x42\x0c\x0b\xb1\xa4\x6a\xde\x2e\xbf\xee\x1a\xe1\x96\xda\x44\xda\xf2\xec\xeb\x0a\x7a\xdc\xa1\x09\x3c\x6d\x5c\x1a\x04\x95\x7e\x57\x64\xb8\x82\xca\x0c\xab\x9c\x6c\xdc\xfb\x58\xc7\xb8\x6e\xdd\xd3\xd3\xf6\x27\x59\x75\x82\xed\xad\x51\xd3\xa1\xd1\x88\x37\xbe\x5e\x14\xab\xed\xb6\xe5\x8e\xdc\xb8\x94\xdb\x41\x91\xbc\x5b\x54\x2f\x41\x8b\x71\x06\x15\x54\x4b\x28\xee\x92\xf6\x2c\x5c\xfe\xbf\x66\x0a\x7c\x16\x5f\x06\x00\x6f\x0f\xcf\x69\x1a\x1e\x9f\x0b\x64\xf7\x10\x7d\xb3\xb3\x90\x63\xe3\xa1\x8f\xff\xbf\x23\xc3\xdc\xbf\x7c\xcd\xf3\x31\xe1\x24\x6c\x98\x2b\x30\x33\x82\xb5\x7d\x6e\xcb\x2c\x57\x19\x58\xfe\x73\x6d\x43\xa9\x19\x8c\x93\x52\x29\x66\x5c\x3e\x10\xba\x4c\x9a\xf9\xa1\x36\x3d\x82\x51\x13\x0f\x22\x69\xb4\xf9\x4f\xf0\x7f\x2a\x93\xd2\x7f\x52\xff\xfc\xbf\xb5\x65\xe9\x6f\x1d\xcb\x52\x0f\x96\x35\x79\x0d\x54\x0c\xf4\x62\x6d\x51\xf7\x1b\x80\x36\x4d\x38\x7f\xb4\x26\xa6\x3f\xca\x3e\x5c\x93\x57\xf7\xef\x7f\x82\x63\x63\x88\xeb\xfd\xb3\xa7\x4f\xa7\xab\x1f\x7f\xd4\x26\xa1\xa7\x70\xa6\x89\xa3\x63\x07\xfa\xbf\xe0\x8f\x6a\x8a\xa2\x54\x92\x63\x51\x66\x7e\x4b\xaa\x3d\x77\x6c\x3c\x3d\xeb\xcf\xd3\xda\xfc\x73\xbf\xdd\x68\xb7\x75\xa8\x22\x6f\x11\x8c\x4e\x64\x66\xad\x93\x54\xbc\x45\x22\x18\xe1\x74\x71\xe3\xda\x8d\xba\x74\xc1\x27\x22\x0d\xe6\x54\x9f\x2d\x9a\x72\xf2\x05\x9f\xa8\x8a\x32\xd0\xc3\x4e\x93\xd2\xc3\x4e\x62\x4f\xab\xd2\x1d\x40\xdb\xc3\xdb\x2d\x1c\x34\xc2\xe5\x94\x96\xbb\xe5\x80\x72\x8f\x4f\x56\xd6\x65\xe5\x31\x75\x3b\x21\x7d\x4e\xa9\x42\x67\x29\x30\x20\x8e\x8a\x2f\x98\x2d\xf3\xe2\xab\x7a\x1b\xca\x70\xab\x9e\x46\xa7\x2d\xa8\xf3\xe4\x72\x9e\x24\x27\x28\xa9\x09\x88\x93\xda\x22\x23\xfd\x25\xa5\x44\x25\x83\x7f\x23\x70\xb4\x21\x94\x53\x32\x91\x6e\xa1\x89\x2b\x6b\x6b\xc8\x14\x5c\xda\xd5\x7e\x97\xee\x7a\xe2\xb6\x86\xda\xfd\x3a\x95\x23\x53\xa6\xfc\x0d\xe1\x4b\x43\xda\x27\xbf\x61\xf5\x43\x39\x27\xea\x92\x57\x37\x24\xcf\xb4\xb7\xd2\x6a\x95\xdf\x29\x2e\x05\x38\x5f\xbc\x17\x9a\x16\xb6\xde\xd1\x85\xda\xbc\x37\xac\xb8\x95\xc3\xb2\xd1\x72\x52\xc6\xcf\x35\x05\xc5\x8b\xcf\x7a\xf1\x7e\x5d\xb9\xc2\xad\x43\xc0\xee\x12\x30\xa9\xd8\x16\x5e\x6f\x3b\x44\x9d\x15\x74\x27\xb8\xa1\xd3\xd8\x5b\x14\x89\xa4\x89\x41\x4d\xa4\x97\x59\x47\x22\xf4\x2a\xcd\xe8\x1c\x45\xbc\x58\x2f\x6e\x22\x13\x72\xa7\x03\x46\xba\xe6\x45\xa4\xb2\x20\xd8\x63\x0a\xbc\x6e\xe1\x18\xda\x10\x2c\x1e\x90\x95\x96\x98\xa0\x28\xbd\x2a\x8b\x5c\x1a\xd6\x06\xaa\xe5\x0e\x72\xfb\x25\xbc\xc6\x71\xbf\xe0\xaa\xe0\xbc\xb8\x0d\x97\x31\x75\x7e\xf4\x52\xf9\x62\x8a\xc0\xca\xb6\xc6\xca\x70\x9e\xaa\x98\x99\xdd\xb5\x95\x1c\xa2\x43\x0a\x71\x1c\xad\xbe\xed\x6a\xac\x25\x14\x5d\xf2\x09\xd9\xbc\x82\x21\x44\xd2\x27\x56\x4c\x8c\xe0\xec\xdc\x95\xd8\xf8\xc7\xcd\x8a\x06\x9a\x55\x9b\x15\x9b\xe7\xf4\x05\x1a\xdb\x70\x4a\x66\xd0\x5d\x6d\x81\x39\xe5\x5e\x27\x5a\x62\xd5\xe6\xa3\x43\x23\xaa\xc9\x48\xd7\xd3\x5f\x7c\xe8\x1c\x54\xb0\xb9\x60\xa2\xdb\x47\xd8\x73\xca\x76\x0d\x39\xc0\x06\x27\xa5\x77\xfc\xc4\x89\x75\xcc\xbb\xc0\xe6\x2b\xa1\x59\xf1\x35\x61\xf8\x3f\xd7\xb8\xe4\x2f\x3d\x62\x3b\xc5\x2d\xf2\x1b\xac\x17\x8b\xf7\x45\xab\x6a\xa9\xe2\xf1\x14\x6b\x29\x8b\xfb\x9f\xa0\x92\xd4\x22\x40\x13\x36\x21\x42\x3f\x1a\xc5\x3b\x87\xa6\xe0\x34\xc7\x11\x00\x04\x26\xd2\xc3\xdc\x0e\x25\x54\x65\xd7\x55\x23\x56\xdc\x1b\xad\x23\x02\x35\x44\x82\x23\xec\xec\x1a\x64\xf6\xa7\xc0\x42\x99\xb9\xa2\x7e\x68\xb5\x70\x64\x34\x62\xe1\x42\xf5\x18\xa3\xe8\x68\xdc\x85\x8b\x46\xd3\xd6\x3e\x0a\x4c\x09\x1b\x88\x34\x7e\xac\x5f\xb2\x85\xfd\xad\xae\x62\x98\x8a\xc1\x91\x5a\xa2\x58\xd7\x1d\x8d\x8a\xc6\xe7\xdf\x6b\x11\x63\x9c\xd6\x43\x72\xef\x7a\x12\xba\xeb\x0b\x00\x63\xba\xdd\xa6\xc0\x0d\xaa\x24\xd3\xf1\xc8\xb7\x59\xec\x08\x22\xa9\x91\xcc\xba\x8f\x57\xc1\xfc\xc0\x54\x97\xb4\xde\x8f\x04\x16\x5a\xd9\xbf\xc7\xaa\xa4\x66\xb9\x94\x1e\xa1\x7c\x76\xcd\x48\xe6\x33\x70\xaa\xe4\xe4\x8a\xd0\x93\x55\xba\xf8\x8c\xd9\xb3\x25\xf9\x86\xb3\x13\x55\x73\x37\xf3\x76\x8d\x29\x66\x29\x2f\xd8\x53\x30\x6f\xbb\xd3\xb3\x31\x7d\xa0\xb4\xb8\x54\xef\xd4\x15\xa1\x52\x62\x61\x75\xa9\xda\x61\x47\xe6\xb7\x71\xee\x11\x6b\x53\xb1\x91\xf4\x7e\x82\xa1\x16\xcb\x18\x28\x9a\x92\x4b\xb7\x62\x23\x40\xad\x03\xdc\x38\x8e\xc8\xa2\xee\x17\x52\x92\xab\x1c\x9f\x0b\x92\x45\xe8\xf5\x5b\x51\x3f\xd6\x79\xe7\xcc\xad\xf4\xd2\xcf\x1d\x6b\xdb\x9a\x72\x95\x43\x56\x8e\xe6\x25\x6f\x3a\x67\x8b\x8a\xba\x48\x01\xc7\xa0\x52\x03\x0c\xd7\x35\x65\xb6\xb2\x92\xd0\x76\x4e\x40\x69\x43\xff\xa8\xa6\xf1\x27\xc2\x6f\x04\xe2\xca\xf8\x38\x47\x63\x50\x35\x85\x47\x58\x06\x3b\xd0\x79\x68\x24\x0c\x7f\x92\x90\x02\x58\xa8\x02\x3b\x1f\xf5\x55\x85\x63\x4c\xea\xa1\xcb\xcf\x6e\x96\x57\xd5\xd7\x07\xf2\x0d\xe7\xb2\x33\x10\xcb\x4c\x28\x61\x0b\xf8\x36\xba\xdf\x3a\xa8\xbc\x1b\xe9\xcb\x1b\x9c\x2f\x4f\x24\x0f\xfa\x0f\x88\xf5\x0b\x2f\xc5\x67\x00\xed\xff\x6e\x30\xde\x0d\x97\x1a\xc2\x79\x31\xce\xff\xc6\xfa\xef\xc3\xfa\x15\x66\x0b\x4c\x79\x7a\x8d\x45\xe9\xfa\x96\x96\xff\x45\xb1\x5f\xee\xe2\xee\xd0\x73\xf8\x98\x57\xc0\xb0\x05\x5a\xbf\xa3\x22\x7c\x8d\x61\x8a\xc6\xcf\xd3\xdf\xe1\xe7\xe9\xf1\x31\x20\x4a\x09\xa2\x4f\x03\x9b\x15\x73\x73\x20\x28\xd4\xeb\x29\xbf\x56\x00\x1e\x1f\x17\x2f\x10\xd3\x37\xcd\x68\x14\x17\x68\xac\xb5\x7a\x06\x03\x4a\xc3\x15\xb4\x0f\x22\x81\xa7\xe3\xf1\x3d\x8f\xa2\x6c\x79\xef\xc3\x78\x3a\x1e\x1f\x7c\x1c\x45\x9b\xbf\xb7\x03\x29\xe7\x71\x9f\x23\xa9\x16\xc0\x1c\x4a\xbb\x57\x33\x3c\x4f\xf4\x0e\x07\x8e\xa6\x6e\x54\x2a\x95\xe2\x32\x2f\x0a\x16\x93\xe4\xdb\xb3\xd3\xf1\xf8\x7f\xf0\xd0\xa1\xb5\x67\x4f\x9f\xdc\xcd\xb7\x49\x09\xef\x26\x24\xb9\xab\xfa\x9c\xe1\xa6\x8d\xdc\x93\xba\xa9\x49\xb3\x03\xc8\xac\x11\xd4\x80\x23\x63\xa6\x88\x10\x62\xdb\xad\xe3\xab\xcd\xa6\x78\xe2\xbb\x36\xd7\x76\x88\x41\x67\xcb\xbd\x56\x7e\x4f\x3b\x57\xec\xea\x9b\x4c\x36\x6f\xc1\xe2\xfb\x05\xc5\x57\xaa\xff\xc2\x0a\x19\xf1\xd7\xa4\x5c\xdc\x60\xd1\x8d\xa3\x44\xf1\x1a\x41\xec\xa6\xf0\x8d\x8c\xf1\x13\xa1\xd7\xc3\x2f\x24\x1d\x36\xed\x52\xf6\xd8\x69\x76\x10\xdf\xc3\xa4\xb0\x0f\xee\x66\xd6\xbc\xa2\xbc\xe4\x85\xf5\x29\x8c\xcc\x31\x9b\x18\x81\xd1\x73\x5e\xac\x26\xe3\xe7\x39\x5e\xf2\xc9\xf8\xb9\x49\xf5\x33\x24\xc7\xc8\x97\x48\xbd\x3a\x3f\x07\x31\x4e\xbe\x41\x9c\xdc\x01\x48\x8e\x51\xa4\xa8\x63\x74\xcc\x8e\xa3\xd5\xb7\xe7\x9a\x46\x46\xc7\x54\xfe\x8c\x20\xa9\xea\x61\xf9\x87\xf0\x69\xc7\xf6\xff\x84\x86\xd6\x7b\x87\x1d\x79\xf8\xe3\x9d\x07\x4f\xf4\x1d\x72\x54\x25\x31\x96\x91\xa9\x21\x4e\x16\x65\xb9\xb7\xe6\x18\xd4\xf9\x24\x67\xd1\x57\x7c\xf5\x99\x08\x3e\xe2\x4f\xe6\x8f\x5b\x81\xa3\xbf\x14\x7f\x8d\x60\xf4\x3e\x9a\x43\x86\x66\xd1\x89\xaa\x75\x12\xc1\xe8\xe4\xb6\x54\xff\x14\x7f\x95\xff\x16\x27\xd1\x1c\x52\xe4\xc4\x2e\xb3\x36\xd2\x59\xb1\x90\x51\xff\x46\x23\xf3\x57\x62\xfe\xd0\x12\xb9\xee\x12\x35\xeb\x81\x97\xfc\x98\x28\x5c\x28\x10\x99\x36\x5c\x4a\x6f\x71\xae\xee\xe6\x89\x0c\xf5\x57\x0c\x09\x1d\x5a\x17\x7a\xac\x23\xe9\x77\xb8\xa1\x1a\x53\x0a\x95\xdf\x77\xfc\xbc\xfc\x9d\x31\xe3\x79\x5e\x1e\x1f\x9b\x2e\xf9\xac\x9c\x1f\xa7\x6d\xe0\x64\xca\x44\x09\x9e\x14\xbd\xae\x0a\x47\xd3\xd2\x83\x22\xec\x53\xba\x7c\x3f\x6e\xd9\xf1\x18\xeb\x3a\x94\xba\x5f\x2f\xc4\x1f\xe2\x94\xfe\xf8\x1a\x95\xc1\x82\xdf\xbe\x46\x79\x08\xce\xab\xf3\x73\xb4\xee\x00\x25\xca\x16\x1d\xd0\x44\x59\xe6\x96\x89\x0f\xce\x4f\x84\x93\x72\xbd\x92\xeb\xf6\xe3\x6b\xe7\xc7\x6f\x5f\x07\x1d\x67\x9d\xf3\x00\xe2\x88\x9b\x7e\x64\x62\x40\x59\xa1\xa9\x57\x72\xab\x10\x74\x74\x14\xac\xb4\xc2\xac\x5c\x61\x19\x6f\xe9\x3d\x23\xd7\x84\x46\x60\xe0\x0d\x85\xe8\x51\x14\xe8\xe8\x88\x0e\x9a\x19\x87\xa5\xc8\xb3\x16\xbd\x2b\x89\xb3\x39\xe8\x52\xe8\xce\x94\x10\xda\x36\x2c\x1b\x0d\x67\x74\x8e\x6e\xa4\xdc\xa9\xae\x93\x07\xea\x2c\x1b\x75\xd6\x2e\xb7\xfd\x49\x52\xce\x1f\x36\xb8\x5a\x7d\x93\xb4\xf4\x87\x0d\x17\x7f\x7e\xaa\xeb\x2f\xbc\xfa\x3f\x6c\x58\x35\xf9\x61\x73\xa3\xa4\x1d\x6e\xbd\x2c\x54\x6f\xd9\xae\x77\xe3\xd5\xbb\x4d\x39\x23\xdf\xe2\x53\x38\x1c\xcb\xff\x4e\xe1\x50\x8c\x46\xfc\x9f\x57\xc0\x69\xb6\x0c\x34\xfb\x6d\x56\x37\xb4\xcd\xdb\x3f\x6b\x80\xea\x23\xf8\x54\x79\x18\x54\xe8\x9d\x5a\x21\x32\xcd\x27\xc5\xb4\x9c\xa4\x03\x17\xdd\x56\xba\xfc\x16\x91\x69\x36\x29\xa6\x8b\xc9\x7a\xd0\xc0\xce\x50\x5c\xb4\xe2\x76\x55\x94\xe9\x55\x8e\x03\x9e\x72\x79\x51\xae\x19\x3e\x49\x5b\xce\x1b\x8f\x6b\x7c\xa1\x32\x6c\x5e\x5e\xe6\x45\x9a\x61\x36\xe1\x3a\xb9\xa6\x76\x7e\xde\xbc\x7c\x75\xf1\xf6\xfd\x3b\x15\x72\x6e\xa0\xa7\x71\xc3\x6f\xf3\xab\x94\x95\xcf\x3e\xe3\xbb\xaf\x05\xcb\xca\xe6\xe0\x09\x1d\x9a\x8c\xc5\xec\x6e\xca\x10\x97\x92\x70\xc2\xec\x42\xec\x85\x00\x8c\xaa\x9c\x15\x6b\x2e\xbd\x7e\x0e\xea\x73\x34\x8a\x03\xbd\xf6\x86\x05\x80\xf6\x96\x67\x89\x9a\xff\x1e\xe7\xec\x1d\xdb\x7a\x8d\xf9\x89\x5c\x7e\x65\x6a\x70\x92\xd2\xec\x64\x5d\xe2\x93\x0c\xe3\xd5\x89\x8c\x5b\x7c\xb2\x64\xc5\xed\x89\xb4\x63\x78\xea\x80\x40\xe6\xa9\x80\x67\xe3\xb9\x12\xf6\xff\x88\x10\x32\x2e\xaf\x53\x8e\xf0\xec\x74\x3e\x89\xa9\xfc\x17\x8a\x9f\x3f\xda\x08\x1e\x9b\xc5\x9a\x31\x4c\xf9\x1f\x75\x36\x1c\x39\xbd\x09\x87\xeb\x52\xa6\x12\x3f\x13\x53\x9b\xd0\xf0\xed\xd7\x5a\x2e\xf3\x6f\xba\x5a\x61\xda\x3b\x0e\x96\xeb\xf7\x9b\x24\x09\xb6\xe1\x38\x66\xf3\x64\x51\xd0\x45\xca\x55\xa8\xab\xfb\x78\xe3\xaa\x91\x3c\xb0\x2f\x6e\xf7\xc4\x17\x37\x6b\xfa\xf9\x11\x77\x5f\xc2\x47\xb4\xeb\xf8\xdf\xa6\xdf\x26\x1c\x2e\x30\xc9\x27\xac\x92\xaf\xe4\x7a\x71\x05\x4b\x61\xd9\xed\x86\x4d\x7c\x81\x78\x4c\xe0\x18\xc0\x14\x8d\x07\x36\xd6\x82\xc9\x55\x2f\x43\xbf\xa4\x88\x1a\x73\x52\x78\x94\x6e\xb7\xc5\xef\x4e\x81\xd9\xa5\x81\xd6\x48\x8d\x21\x47\x27\xa7\x90\x48\x31\x8b\x6a\xcb\xe2\xf4\x59\x01\x14\x0b\xf6\x1c\xff\x2e\x7d\x0e\xc8\xec\xf8\x98\xcf\x11\xd5\xe1\x14\x30\xc4\xc7\xa8\xb0\xaf\x55\x52\x55\xdd\x9e\xbb\xf5\x52\xce\x30\x74\xa2\xb6\x68\x01\x3d\xd8\xab\x82\xe9\xde\xb7\xc3\x62\x2a\x79\x9e\xea\xda\x3d\xdd\xba\xa5\xf3\x56\xaa\xff\x29\x9e\xcc\xf0\x1c\xf2\x64\x49\x72\x2e\x73\x7f\xbc\x68\x86\x49\xc2\xe0\x5e\xe8\xad\xc7\xfd\x74\xf8\xad\xc2\xb0\xdd\xcf\xa3\x3f\x49\x12\x67\xd3\xb0\x38\xd4\xfc\xde\xb3\x5e\x3f\xb8\x87\xfd\xae\x59\x53\x9e\x92\xa6\xe4\xb6\xb3\x99\x16\x1b\xe9\x68\xbd\x7b\xb8\x7a\x47\x15\x8e\x6b\x01\x60\x28\x2c\xcc\xcb\x98\x01\x88\x1d\x76\xcf\x13\xae\x1e\x1d\xf9\x87\x56\x46\x2c\xf2\x3f\x09\x44\x74\xe2\xf3\x51\x80\x5e\xe0\xd1\x88\xc5\x14\x72\x20\xde\x8d\x13\xe9\x64\x79\x5f\x44\x54\x4b\x14\xa2\x4d\x7f\x8b\x03\x9d\xe1\xc5\x3d\xc3\x4e\xb8\xd1\x66\x74\x88\x62\x13\xfe\x09\x43\xab\x92\x87\x1c\xbd\x93\xe2\xb7\x58\xac\x1d\x29\xdf\xa5\xef\x9c\x30\x83\x75\xe2\x1b\xe9\x81\x74\x0a\x20\x3f\xb9\x67\xce\xb8\xc5\x93\x61\x79\xc6\x8a\xd5\xfd\xd7\xcc\x10\xbf\xed\x36\x96\x71\xc5\xc4\xbb\x4a\x11\xf8\x7b\xe1\x93\x18\xcc\x93\xcd\x1c\x53\xce\x0e\x10\xf2\x34\xa9\xbf\x21\x68\x26\xd9\xa0\x06\x27\xe5\x15\xf7\x99\xfb\x67\x7c\x57\x3e\xd9\xdc\xd5\x95\x74\x72\x15\x8e\xa0\xd5\x49\xdc\x4a\xc5\xf4\xf6\x27\x6e\x33\x29\xee\x53\x87\xeb\xa8\xcd\x5f\xf8\x5f\x64\x7e\x15\x8a\x18\xac\xb3\x96\xf8\x07\x12\x83\xed\xd6\xff\x42\x41\xcd\x8e\x48\x1e\xc7\x72\x14\xa8\x79\xd7\x32\x30\x8d\xcc\xc8\x6a\x2f\x63\x36\xe5\xe8\x05\x8b\x1d\x8f\x31\x88\x01\x98\x50\xf4\x22\x44\x8c\x45\x05\x0a\x31\x80\x0c\x4c\x38\x7a\x61\xa8\xaf\x69\x07\xa9\xb9\xeb\xc9\xbd\xd0\x5f\x35\xfe\xe9\x2e\x14\x2c\xeb\x3b\xa2\x4f\xed\x43\x83\xef\x3e\xfe\xed\x5d\x3a\xe2\xd3\xd9\x7c\x52\xb3\x3e\xdf\xb1\x1c\xdf\x79\x26\x9a\xf1\xa1\x76\x2d\x06\xcd\x1a\x27\xe2\x80\xd5\x80\xac\x7b\x3d\xc4\x5a\xd4\xb7\x79\x22\x3a\xfa\xe9\x4e\x5d\x76\xf7\x5a\x16\xd1\xfc\xe9\x48\x45\x9e\x72\x8e\x7b\xcb\x34\x9c\x65\x69\x06\xad\xed\xe0\x48\x98\xe0\x48\xcc\x93\x4f\x9c\x53\x00\x67\xf3\x7b\x12\x51\x3d\xd8\xc3\x16\xc7\xe5\x47\x9c\x3b\x4d\x60\x2d\xf8\x8e\x75\x63\xc5\xed\xc9\x81\x77\xcc\x03\x7b\xe3\xf4\x98\xa5\xbd\xbe\xc4\x70\xcf\xdc\x2b\x0c\xec\xf5\x58\xe8\x9c\xfa\x35\x2b\xd6\xab\xfb\x1f\x25\x37\x3c\xa9\x0d\x21\x6d\xb2\xef\x70\xf4\xa2\x15\x69\x57\xd2\x5e\x82\xd8\x8c\xce\x07\xfe\x2b\x8c\x80\xed\x36\x26\x68\x36\x87\x32\x88\x29\x01\x50\x5b\x19\x08\x3e\x13\xb2\xfb\xa0\x98\x9c\xdc\x13\x9e\xbf\x9b\xb4\x3c\xa1\xf8\x5b\x38\x91\x72\x77\x33\xd5\xa4\xf7\x8d\xbe\xa3\xe6\x7d\xa5\x61\xfb\x43\xc6\x78\x8a\x20\x0a\x09\x3a\x3a\x05\x1b\x2a\x6d\x4f\x67\x73\x65\x31\x52\x28\x89\xbe\x98\x0d\x50\x95\x8c\xd0\xe0\xc8\xf7\xb2\x2c\x20\x86\xc4\x61\x29\xcc\xb5\x5f\xdc\x8b\xc6\xde\xa4\xe5\x3b\xfc\x8d\x23\x12\xde\xe4\x62\xcf\x09\x53\xd2\x39\x5f\xc8\xc6\xb5\x90\x8d\xf9\x42\xb6\xa2\x42\x7e\x3c\x8e\x5a\x87\x4f\xa4\xed\x53\xd1\xa0\x42\xc5\xc1\xd8\xb3\x62\xf8\x0b\x29\xd6\x7d\x1f\xb2\xe6\xdf\xba\xd9\x7f\x15\x2c\x32\x33\x7a\x62\x4c\xfa\xa0\xbb\xfd\xc7\xc7\x26\x42\xff\xce\xde\xd7\xc7\xf7\xe2\x12\x08\x7d\xba\xf7\x35\xa1\x1c\xb3\x12\xdf\x4f\xca\xe8\xc9\xc5\x87\x36\x9b\x43\x9b\x9d\x9a\xcc\xe6\x40\xf9\xfa\x1b\x96\x5b\xdc\x93\x36\x64\x3b\x1a\x3f\x67\xbf\x33\x9a\x81\xe7\xcc\x68\xc0\x65\xf8\x2c\xa2\x22\xb8\x9b\xba\x18\x8d\x9f\xe3\xdf\x11\x53\x17\xab\x90\x03\x64\x86\xe7\x08\x21\x0e\x36\x14\x1d\x8d\x07\x57\x0c\xa7\x9f\x2b\xf1\xa6\x3b\x75\xe2\xda\x1f\x9d\xea\x50\xef\x62\x99\xef\xb7\x2f\x7a\xad\x9e\x70\x77\xbe\x14\x9f\x1f\xd3\xee\x49\x75\xd0\x19\xfd\x78\x93\xe6\xb9\xd5\xda\x25\x1f\xcf\xff\xf8\xa1\xf1\x7a\x4e\x92\x84\xd5\x91\x50\x75\x38\x87\x20\x57\x4d\xc1\xd4\xf1\x69\x50\x02\x7f\x2a\x31\x86\x1b\x8c\xe1\xec\xee\xad\x1c\x8f\xe0\x98\x20\x03\xb5\xb5\x98\x78\xb0\xba\xb1\x59\xbc\x1e\xea\x66\x54\xd9\xed\x7f\x4f\x28\xe4\xee\xbd\xf8\x4b\x41\xee\xf3\xca\xe8\x92\x44\x35\x0f\x89\xa5\x35\x11\x8c\x00\xe4\xca\x17\xe4\x7e\x0f\x53\xd1\xf4\xc9\x50\xf4\x33\xbe\x7b\x30\x19\x95\xcc\xa0\xfb\x0f\x21\xa0\xba\x4d\xbf\xef\x01\xb1\xe3\x25\x1e\xbb\xd2\x4a\xef\x7c\x58\xf9\xcf\xbd\xb0\x42\xe6\xa4\x7d\xca\x05\x7a\x94\xd5\x51\x4b\x72\xbf\x73\x71\x9b\x3e\x9d\xf4\xf6\x80\x27\x51\x9d\x21\x46\x07\x97\x79\x02\x2e\xb5\x6b\x0b\xb4\x01\xa4\xe4\x51\xd9\x76\x1b\x33\xcb\xa3\x92\x46\x56\x00\x06\xb1\xb2\x95\x36\x76\xee\x27\xa7\x5e\x8e\x23\xb5\x69\xc4\x72\x47\x04\x21\x54\x58\x8b\x60\x29\x68\xb2\x51\x69\xc8\xf1\xe9\xbd\x36\x54\x2c\xf2\x7d\x75\x3b\xbb\xb8\x56\x12\xe2\x5a\x59\x88\x6b\xa5\x31\x87\xa4\xc5\xb5\x1e\xa6\x15\xa2\xc5\xbd\x54\x1c\x56\x2b\x07\xd0\x8b\x4d\x75\xaf\xe5\x2b\x9e\x50\x9d\xa1\xd3\xca\xa4\xf7\x61\x34\xa5\x0c\xbf\x65\x01\x50\x73\xde\xad\x70\x7a\x4e\x12\x30\x8b\x64\xf7\xa3\x19\xa6\xf9\xfd\x45\x76\xae\xe4\x55\xbb\x59\x7d\x87\xd8\x4e\x25\xf7\x12\x6f\xd9\xef\xb9\x72\x03\x9a\x06\x3c\xc5\x13\x8c\x5e\xdc\xeb\xea\x35\x83\x7a\x32\x64\x5a\x91\x55\xc8\x98\xad\x8f\xd4\x80\xac\x70\x2f\x0a\xdb\xb0\xda\x7a\xba\xd0\x23\x3c\x11\x63\x1c\x58\x72\x33\x1a\xc5\x74\x66\x7f\xcd\xd1\xd1\x18\x7c\x4f\x1c\xf9\x7d\x4b\x73\x98\xbe\x6d\xc5\x8a\x5b\x52\xee\xf3\x1e\xe8\x63\x4e\x20\xa5\xee\xfc\x06\xd3\x98\x49\x9d\xbf\x6f\x52\x20\x93\x42\x35\x73\x24\x49\x53\x8d\xfa\xf5\xe9\x18\x11\x40\x02\xd0\x0b\xf1\x14\x27\x53\x5d\x4d\x9a\x11\x50\x00\x8d\xf3\xfa\xfd\xde\x7f\xe2\x95\xf1\x46\x77\x2f\x1f\x4d\x62\xcd\x0e\xbb\x81\xbe\x67\x83\x0e\x13\x94\xfd\xbd\xf2\x15\xdd\xdc\xc4\x4e\x06\x42\x6d\x67\x07\x03\x71\x72\x3f\x06\xc2\xac\xe8\x3f\x3e\x13\xf1\x9f\x3a\xf1\xf3\x23\x9f\xde\xae\x73\xc8\xfa\x9d\x43\x06\x26\x4e\x47\x74\x1f\x25\x10\xac\x8d\x6e\x07\x26\xfa\x8f\xea\xfb\xcf\xb1\x5c\xab\x27\x53\x62\x33\x15\xdc\xed\x80\x9d\x91\xf6\x73\x8c\x94\xed\x6b\xa7\x87\x25\x03\x45\x4e\x6a\x75\x3f\x5f\x2a\x05\xa3\x11\xad\x1d\x5d\xc9\x32\xc6\xbf\x63\xc6\xd9\x84\x4e\x79\x92\x73\x3c\x11\xff\xaf\x13\xe1\x23\xfc\xbc\x90\xf6\xfc\x2a\xb8\xa7\x55\x4e\x89\xb6\x2f\xbc\xb6\xd7\xb2\xed\x75\xb8\xed\xc9\x89\xd3\xd6\x32\x6d\x08\xb1\xd1\x88\x8e\x46\xba\x88\x01\x48\xee\xb3\x9d\x72\x81\x9f\x6e\x3b\x25\x76\x3f\x92\x16\xde\xba\x2a\xdf\x57\xf9\xae\x9a\x3f\x19\x1f\xc6\xb0\x64\xea\x9f\xce\x4e\xc7\x35\xa2\xb9\x8f\xc1\x8e\xd5\xbb\xc0\x83\x2c\x70\x8e\x82\x26\x38\x47\x7d\x6c\x70\x1e\xd6\x04\x47\x2d\xf8\x13\x9a\xe0\x30\xbc\xc2\xf7\x7a\xb3\x79\xa2\x1c\xe3\x15\x7c\xd4\xa0\x48\x02\xeb\xf9\x7c\xa2\x94\xe2\x2a\xf9\xb2\x8c\x09\xb9\x51\x22\x85\x09\xae\x80\x94\xf7\x88\x8b\xe0\xbe\x07\x42\x8c\xff\x09\x0f\xc4\x17\xcc\xfa\xe7\x8b\xe9\x10\x88\xb6\x14\x28\x75\x44\x7c\x6d\xbf\x38\x06\x89\xee\x2a\x06\x93\x19\x9e\xdf\x6f\x69\x24\x80\x27\x5b\x9b\xf2\x66\xbd\x5c\xe6\xf7\x59\x1b\x49\x1b\xa4\xa6\x48\x2a\x50\x55\x1a\x35\xbd\x0e\x40\x8b\x9f\x74\x28\x64\xf7\x04\x37\xb3\x85\x8f\x46\x7c\xbb\x95\x5e\xfa\x2c\xa5\x59\x71\xfb\x9c\xbc\x38\x7d\x0e\x98\xeb\xb8\xcf\x63\xf0\x3f\xc8\xc9\x09\x80\x14\xe1\x19\x99\x43\xf1\x3f\xa9\x80\x82\x58\x66\x0b\xb6\x79\x74\xee\xb3\xe0\x7a\x01\x1e\x46\x94\x60\xb5\x8d\x4c\xfa\x23\xb9\x5a\xca\x26\x15\x9c\x72\xc1\x5f\x83\xc9\x8c\xcd\xbf\x47\xf4\x20\x57\xfc\x3b\xd4\x84\x9a\x29\xf0\x95\x44\x6d\xd3\xdc\x7b\x7b\xd5\xc8\xe6\x4f\x87\xcd\x05\x6b\x5e\x7c\x4f\x6e\x3a\x65\xc2\x8c\x6a\xd7\x03\xeb\x75\x65\x8f\x07\x80\x0c\x71\xb5\xe0\x70\x46\xe7\xc8\xb8\x83\xc4\xdd\xc7\x84\x3a\x46\xac\xe6\x62\x55\xca\x29\xda\x8e\x20\xad\x23\xdc\xb2\x76\x89\x58\x1e\x31\x4d\x95\xb1\xa3\xad\x58\x57\x5f\x1a\xcb\xa1\x9a\xea\xc8\x27\x11\x14\x58\x11\xb8\x91\xf9\xb4\x4f\x63\x55\xc7\x64\xe8\x4f\xc4\x78\x62\x33\x5e\x0e\xc0\xe4\x7b\x61\x38\x33\x04\x7e\xf8\xce\x1e\xc1\x74\x3b\xb1\x8a\xa7\xfd\xd5\xbd\x07\x98\xbb\x8f\xe1\xfd\x8e\x94\x18\xce\x93\x19\xb8\xf2\xe2\xfa\x3a\xbf\xa7\x58\x4f\xb5\xfd\x7b\x17\xec\xa9\x51\xfe\x0d\x44\x7b\x66\x79\xee\xf7\x68\xd1\x4a\xfe\xe6\xb3\x1f\x04\x0d\x1d\x5d\x4f\xbd\x9a\xb3\x36\x52\x1f\xe6\xa4\x6e\x87\x05\x0a\x05\x64\x52\x29\xde\xb7\x5b\x7e\x2c\xfe\xc0\xd3\xf1\x84\x1f\x9f\x56\xb1\x51\x33\xd5\x76\x51\x4e\x1a\x05\x69\x2f\x30\x2b\xe6\xf6\x71\xe9\x17\x1d\xd1\xfb\x09\x0a\xd4\xb2\x3d\xd9\x95\xb2\xa6\x07\x38\x67\xf7\xf5\x4f\x35\xef\x0d\x8d\xdc\xe8\x45\xbd\x05\x18\x48\x9b\x99\xfb\xac\x8c\x1c\xea\x93\x2d\x8c\xec\xfa\x1f\xc1\x4a\x59\x0d\xf4\xbb\x0d\x94\xbf\x12\x7e\x53\xac\x0f\xd3\x1f\x7f\x97\x67\x5f\xd3\x4f\x8f\x85\xfc\xf4\xea\x7c\xc5\xd3\x3a\xa4\x1a\x93\x1e\x7b\x6e\xf8\x9c\x3e\xde\x82\xf2\x85\x3c\x65\x13\x66\x50\x95\x2a\xa3\x7a\x47\xb6\xab\xd7\xe0\xbe\x3e\xa8\xba\xf9\x61\xef\xe4\x2e\xcf\x3f\x16\xf0\xfc\xeb\xf7\x8c\xd6\x92\xf7\x83\xee\x32\xe3\xa7\xde\xdb\xb1\xfb\x00\x4f\xe2\x03\x9c\x69\x0f\xf1\x40\xed\xe9\xfa\xd8\xd7\xdd\xef\x20\x07\xb1\xfe\x6e\x44\x07\xf8\xd8\x1c\xe0\x77\x72\x88\xbf\xc1\x21\xe6\xf4\x87\x1a\x4f\xf7\x34\x8f\x3d\xc8\x24\xb4\xbf\x85\x62\x5f\xfb\xb9\xfe\xa6\x55\x3d\x6d\x8c\xbe\xdf\xd5\x20\x60\xa1\x70\x88\x1e\xfe\x40\x6d\xf5\xf7\xab\xa8\xdb\xea\xc0\xde\xea\xa1\xde\xda\x8a\xfe\x72\xf0\x83\x84\xc4\xfd\xe5\x8d\x07\x88\xda\x0e\x90\x3c\xf5\x16\x72\x1c\xf0\xfe\xef\xfb\xa8\x3b\xf8\x01\xf4\x10\xaf\x9e\x06\x6b\xd9\x9f\xf5\x08\xf8\x35\x40\x62\x12\x0b\xc2\x35\x5c\xc0\x0c\xde\xc0\x25\x5c\xc1\x5b\xf8\x05\x5e\xc3\x2b\x78\x07\x2f\xe1\x57\x78\x06\xbf\xc1\xf7\xf0\x1c\x5e\xc0\x5f\xe0\x07\xf8\x12\xbe\x82\x9f\xe1\x47\xf8\x17\xf8\x1a\xbe\x83\x6f\xe1\xcf\xf0\x0d\xfc\x2b\xfc\xf5\x7b\x19\xb6\xce\x06\x2f\xe5\xd5\xa9\x2e\xf5\x08\x6e\x30\x5d\xdf\x62\x26\xe6\x39\x39\x1a\xc3\x6b\xcc\x03\x36\xc4\x96\x47\xa9\x76\x01\x7e\x25\x6e\xda\x83\xe0\xb2\x7e\x70\xd5\xc5\x7c\x10\x64\xda\x1b\xf2\x9a\xe3\x83\x20\x93\x9e\x90\xd5\xb5\x7f\x10\xe8\xa2\x17\xe8\xd7\x78\x71\x10\xd4\xb4\x1f\x54\x56\xac\x0e\x02\x5b\xf6\x02\xfb\x46\xbb\x43\x1f\x04\x3a\x3f\x00\xf4\x41\x80\xd7\x3d\x01\xd3\xec\xc0\x11\x2f\xfa\x01\x56\xec\xd0\x41\x90\xb3\x5e\x90\xff\x4d\x39\x34\x1e\x04\xf9\xa6\x17\xe4\xdf\x2b\x2f\xba\x83\x20\x2f\xfb\x42\x36\x5e\x55\x07\x41\x5f\xf5\x82\xfe\x96\x1e\x76\x4a\x6e\x7b\x42\xd5\x6c\xdf\x41\xb0\xbf\xf4\x84\x2d\xb8\xc4\x83\x00\x5f\xf7\x02\xfc\xef\x05\x39\x0c\xe7\xae\x7a\x81\xfd\x25\x3d\x14\xe3\xee\xfa\xc2\x3d\x08\xea\x65\x2f\xa8\x07\x23\xf1\xd7\x5e\x60\xdf\x6b\xeb\xaa\x83\x40\x9f\xf5\x03\xad\xb9\xe7\x83\x40\x7f\xeb\x05\xfa\x03\x59\xe1\x97\xb2\xe5\x41\xc0\xdf\xf7\x06\x7e\x10\xd8\xf3\x7e\x60\xef\x43\x2b\x2e\x7a\x81\xfe\xdf\x82\xf1\x3f\x08\xee\x2f\xbd\xe0\x7e\x14\xef\x84\x83\xe0\x7e\xe8\x07\x57\x3e\x2b\x0e\x02\xfc\xd2\x01\xdc\xcd\x4b\x7e\xd4\x96\x13\x07\x81\x7e\xd5\x73\xcc\xe2\xcd\x72\x10\xe0\xcf\x3d\x01\xcb\x27\xce\x41\x90\x3f\xf6\x82\x7c\xae\x5e\x44\x07\x41\xfe\x4b\x3f\xc8\xe2\x01\x75\x10\xdc\xd7\xfd\xe0\x16\xec\xd0\xdd\x7b\xd7\x0b\xf0\x45\x7a\xe0\xcd\xf4\xb6\x1f\x58\xf9\x36\xbb\x07\x25\xfa\xf9\x00\xf0\x07\x01\x7e\xd3\x0b\xf0\xaf\xf4\xd0\x01\xff\xb5\x17\xdc\x3f\xa9\x87\xe5\x41\x90\x7f\x75\x20\xf7\x12\xb7\xb6\xec\x27\x1f\x4f\x65\x90\x73\x1c\x54\x5f\x0d\xf1\xef\x10\xaf\x64\x85\xae\x72\x59\x7c\xdd\xd9\xfe\x05\xd2\x15\xba\xca\xc3\xc9\x13\xf6\xdb\x7f\x3f\xbc\x89\xde\x83\x84\x8a\x75\x23\xee\xb3\x01\x1d\x8d\x62\xa3\xff\x94\x06\x4f\x4b\x42\xb3\x18\x37\x03\x5e\xa9\x56\xc0\xc4\x4f\x70\xea\x1b\xed\x56\xad\x27\x2c\x5e\xa0\xf1\xb4\x50\x61\x86\x0f\x58\x39\xab\x51\x79\xca\xb8\xb9\xd0\x75\x6a\x88\x65\x2c\x00\x39\x88\xed\xb6\x0e\x67\x08\xb4\xa9\x9c\x54\x4a\x1c\x32\x21\x1b\x07\xe3\x29\x27\xc4\x21\x53\xee\x84\x5a\x2e\x32\xfd\xf7\xf3\xf7\xef\x12\x95\x34\x84\x2c\xef\x94\x16\xb2\xf1\x8d\x1b\x55\x10\x29\xa5\xf5\xbc\x9c\xaa\x13\x5c\x4d\x7e\xe3\x10\x1f\x3a\x7d\x25\xe2\x7d\xe2\x40\xc8\xda\x04\x52\xf7\xdd\xb4\xb7\xc1\x60\xbb\x8d\x08\x2d\x79\x4a\x17\x38\x50\x7a\xe0\x0c\x8d\x49\xff\x81\x87\x5d\x0f\xee\x09\x4e\x7b\x97\xcd\xff\x68\x54\xd7\x41\x9b\x2a\xe4\xa9\xd6\x58\x1a\xe9\x23\x00\x46\xa3\x5d\x55\x16\x29\x5f\xdc\x80\xaa\x6b\x1d\xa9\xf2\xdc\x58\xdc\x9d\x64\x78\x51\xa8\xbc\x29\x21\x9d\xdd\xbf\xaa\x06\x4e\x25\xb5\x72\xf6\x83\xb3\xc8\x16\x66\xe8\x9b\x0b\x22\x4f\x4b\xed\x6c\x73\x60\x14\x99\x5d\x5e\x7c\xb5\xd7\x54\x21\x2a\x9a\x9c\x1b\x01\x7c\x0c\x34\x4e\x08\x25\x9c\xa4\x39\xf9\x2b\x66\x53\xef\x57\xb2\x48\xf3\x3c\xd6\x06\x86\x93\x60\xdb\x6b\xcc\xa7\xf2\xff\x7e\x5d\xac\x94\xe2\x53\xfd\xef\x44\x27\x35\xf6\x23\xbf\x80\xed\x76\xd7\x89\x31\x7d\x8c\x46\x82\x86\x1f\xc9\x08\x2b\x24\xc6\xc9\x0a\xb3\x65\xc1\x6e\x41\x15\x73\x30\x95\xde\x35\x3c\x2d\x3f\x03\x41\x3e\x74\x37\x76\x35\xd2\xd8\x41\x3c\x55\x4f\x0a\x96\x80\x9b\xf8\xb5\x14\xd7\x8a\x83\x7c\x1a\x47\xf5\x8e\x09\x0e\xe6\x83\xf4\x7b\x02\x71\xcc\xa5\x3c\x7c\x56\xcc\xd1\x6c\x0e\xd0\x0b\xb5\xd0\x1b\x67\xc5\x26\x29\x54\x13\x2e\x2b\x64\xc3\x3e\x66\x38\xc7\x1c\x0f\x89\xbb\xb4\xd0\x7e\x94\xf5\xa1\x7f\x00\x4d\x66\x09\x3f\x42\x82\x34\x76\xd5\x76\x45\xc3\x62\x39\x64\x75\x45\x3c\xa3\xf3\xc1\x91\x34\x0c\x9d\xf2\x19\x9d\xc7\x60\x22\xff\x61\xd6\x36\x86\x57\xf1\x26\x49\x12\x26\xae\x9a\xa2\x82\x58\xfe\x22\x30\x3c\x76\x00\xd4\x54\xc1\x7d\x42\xa6\x74\x36\x10\xa8\x2f\xbd\xa5\xee\x23\xf2\xc6\x09\xa6\x52\x9f\x75\x61\x36\x11\xe1\xe4\x33\xc6\xab\x9f\x53\x8e\x4b\xee\x7e\xcd\x58\xb1\x72\x7f\x33\x2c\xb3\x04\x8b\xce\xdc\xcf\xdc\xf9\xdb\x81\xdd\x02\xeb\x40\x6c\x03\xd3\x70\x7c\xab\xaf\x1c\x95\x71\x01\x06\xba\x28\xd7\x5f\xd7\xe2\x2b\xdc\x38\x00\xe4\x7a\x0d\xda\x30\xd7\xba\xc5\x42\xb5\x10\xbd\x9b\xaa\x76\x24\x0b\x5d\x27\x53\x75\xea\x21\x9b\x9a\x8d\x49\x64\xba\xfe\x8d\xaa\xaf\x27\x6c\x2a\xbb\xf3\xbf\xd1\x35\x97\xa8\x8c\x53\x33\x0b\xb5\x50\x4b\x9b\xc3\xa2\x8c\xd3\x3e\x53\x51\xcd\xea\xd4\x16\xb2\x59\x68\x3e\xaa\xe2\xad\xae\xf8\x45\x55\xdc\x37\x29\xd5\xe8\x8b\x6e\x74\xad\x1a\x75\xcf\x4c\x55\xbf\xee\x7d\x25\x38\xa4\xfa\xc0\x7b\xe1\xd1\x6e\x54\xcf\xde\xaa\x4d\xa8\x3e\xaa\xec\x14\x99\x25\x58\x8d\xfb\x65\x46\xe7\x20\x40\xb4\x48\x85\xd8\x40\x13\x24\xe6\x52\x29\xdf\xe6\xce\x98\xc4\xc6\xf4\x38\x4a\xc4\xe2\x9c\xaf\x17\x0b\x5c\x96\xcb\x75\x1e\x79\xb9\x8b\x4d\x06\x6e\xc7\x46\xf0\x86\x94\x30\xd0\xcc\x5e\x07\x78\x5a\x57\xc6\x30\x52\xab\x0e\x26\x64\x4a\xd4\xc5\x22\x00\x58\xfa\x0e\x80\x49\x09\xba\xdf\xb0\xdd\xee\xac\x63\x0b\x2a\xb3\x65\x4b\x96\x48\x33\x4e\x86\x35\x0a\x33\x50\x01\x10\xe2\x48\x9c\x58\xfe\x6d\x67\x55\xfc\x8d\x63\x46\xd3\xfc\xd9\x1d\xc1\x79\x26\x7a\x7d\x94\x0c\x99\x37\x69\x79\x73\x8e\x39\xcf\x71\x86\xd4\x2f\x41\xac\xd2\x05\x46\x38\x49\xf3\xbc\x2e\x4a\xf3\xbc\x69\xa3\xba\x88\xeb\x50\x4f\xc9\x07\xb5\x24\x30\x4a\xf3\x3c\x82\xb9\x58\x60\xd1\x84\xea\xda\xc4\xab\x2d\x6b\x69\xd8\x75\x65\xd3\x59\x9d\x9c\x28\xdc\x83\x18\x9e\x6e\x25\x47\x6a\x52\xe4\xa4\x8d\x3e\xc4\x6c\x22\xb8\x16\xf5\xe4\xc4\x52\x5d\xaf\x0c\xd4\xb3\x83\x59\x83\x9a\x7d\xca\x9d\xb0\xaf\xd8\x4b\x52\x54\x8b\x82\xbd\xab\xd6\x84\xe0\xc1\x33\x3e\x07\x7e\x96\x22\x71\x2d\xb6\xac\x62\x0b\xf5\x94\x4d\x11\x11\x84\x3f\xb5\x81\x41\x31\x7a\xb1\xc1\xa3\x11\x1e\x1a\x5c\x29\x96\x43\x9e\x08\x62\xf4\x56\x7f\x18\x8d\x62\x9c\xe0\x6f\x78\xb1\xe6\x05\x4b\xd2\xf2\x8e\x2e\xce\x18\x2b\x58\xf9\xfb\x94\x66\x62\x11\x8f\xc6\xa0\x52\x0f\xde\xd2\x89\xc8\x25\x70\x03\xb3\x18\x0c\xc4\xcd\x1f\x17\x40\xb9\xce\x96\x82\xfe\x16\xf9\x17\x0c\x4b\xed\x34\xa6\x5a\xe6\xe8\xe8\x14\xae\x91\x0c\x1a\x92\x6f\xb7\x71\x8e\x8e\xc6\xb0\x35\xca\x78\xc7\x30\xa7\x82\xab\x16\xc7\x26\x0e\x33\x82\x33\x96\xd4\xc7\xea\xfc\xee\xf6\xaa\xc8\xe7\xa3\x51\xf0\x73\x0c\x64\x96\x72\xb8\x40\x65\xa2\xcf\x9f\x78\xee\xa7\x79\x7e\x17\xaf\x2d\x41\x58\x84\x9a\xa2\x35\x5c\x54\x95\x8f\xec\x65\xcf\x53\xaf\x8a\x30\xfd\x42\x58\x41\x6f\x95\xab\x41\xbf\xc3\x6e\x4f\xb0\xdb\xf8\xc1\x49\xfc\xd9\x2f\x3f\x9d\x7d\xbc\x3c\x7b\xf7\xc7\xb7\x1f\xdf\xbf\xfb\xe5\xec\xdd\x05\xc2\x89\xdc\xef\xb3\xba\x57\x7b\x70\xf3\xb4\x2c\x87\x6c\xa8\x5c\x41\xca\x21\x4f\x9c\x4a\x9b\xb4\x2c\x31\xd3\x86\xc0\x9b\x4a\xa2\x94\x40\x74\x85\x3c\x36\xe3\xbc\x40\x86\xfa\x53\x41\x17\x58\x79\xe1\x61\x20\x78\x46\xb1\x2c\xbf\xd2\x45\xba\xbe\xbe\xe1\x4a\x88\xae\xb9\xf4\xba\x09\xc5\xdf\xb8\x6a\xe2\xd2\xfe\xda\x99\xbf\xa0\x58\x20\x32\xe0\x37\xac\xf8\x3a\xc4\x03\xef\xab\x8a\x63\x5c\x69\x2c\xf6\x5d\xe0\x5c\xfc\xae\xae\xf3\xe2\x2a\xcd\x5f\xe3\xab\xf5\xf5\x35\xa1\xd7\x67\x54\xa0\x43\xd6\x6c\x72\xf6\xee\x8f\xc9\xeb\xb3\x9f\x7e\xfd\xb7\xcb\x8b\x97\xe7\x7f\x38\x17\x38\xd2\x5a\x3b\x66\xe9\x1d\xc5\x5f\x87\x6c\x10\x5a\xf2\xa0\x7d\x67\x5f\x94\x78\x3c\x01\x43\x00\x05\xfc\x8f\x2a\x0d\xb2\xde\x78\xbb\xe9\x60\xd3\xb9\x93\x60\x63\xd7\xbe\x7b\x89\xc3\xa9\x96\x76\x2d\x87\x4d\x44\x7a\x52\xf2\xc7\xcd\xdd\xfa\x6f\xa6\xa7\x73\xae\x92\xf5\x39\x1f\xf0\xea\x23\x2e\x5d\x5f\x0c\x79\x5c\x78\x23\x4d\x34\xb7\x69\xd2\x25\x60\x93\x24\x3d\x2b\x28\x46\x5c\xfd\x2d\x51\x15\x67\x88\x09\x84\x0a\x75\xc0\x07\xad\x91\x04\x32\x52\xeb\x6e\x24\xe4\xa3\x53\x05\xda\xae\xd4\x9b\x54\x54\xba\x33\xdd\x13\xae\x3e\x23\x29\xb8\x2c\x39\x5e\xe9\x7c\xee\xec\x4e\x7b\x5e\xe8\xe6\xfc\xad\xae\x19\x03\xb3\x34\x04\x8a\x2e\x26\x45\x85\xe8\x8c\xcd\x9d\xc7\x76\x31\x95\x8d\x24\x95\x25\x7f\xc5\x31\x81\x47\xa7\x60\x22\x33\x50\xcb\xbf\x65\x52\x4f\x29\x35\x89\x1b\xf9\x96\x6d\x13\x95\x5a\xb9\xf2\xfa\xf5\x6a\x9a\x81\x6f\xb7\x76\xb2\xdb\x6d\xec\xcf\x29\x38\xf3\xd8\x78\x52\x99\x6a\x95\xed\x14\x37\xf3\x50\xab\x25\x1c\x07\x96\x0a\xaa\xd9\x60\x78\x24\x53\x53\x1f\x8c\xb9\x26\x79\x2f\x7b\xb6\x2a\x72\xb2\x20\xb8\x7c\x76\x55\xac\x69\x86\xb3\x13\xf9\xe1\xc9\x7d\xfe\xba\xf1\xe8\x36\xfd\xf6\xaa\x9e\x0b\xc2\xdb\xed\x69\x55\xed\x73\x3b\x38\x70\xee\xe2\x5d\x16\x98\x78\xbf\x7b\xb2\xc7\x5a\xde\x17\x8e\xe2\x94\x48\x41\x15\x81\x79\x8a\x64\xf3\xe6\xd6\x90\x22\xa4\xdb\xf4\x33\x7e\x25\xd9\x12\x79\xda\x41\x1c\x11\x3e\xbc\xc2\x79\x41\xaf\xcb\x21\x2f\x86\xe9\xf0\x37\x62\xe9\x7e\x33\x14\xcc\xd3\x90\xdf\xa4\x7c\xf8\x35\x2d\x87\x69\xce\x70\x9a\xdd\x0d\xd9\x9a\x52\x42\xaf\x23\xa0\x69\x12\x09\x6e\x30\xc3\xb7\x29\x11\xf5\xce\xf3\x82\x97\x08\x2b\x32\xe0\x9f\x04\xbf\xce\x8b\xf1\x34\x0e\x7c\x3e\x39\x81\x2c\x39\xbf\x78\xf9\xf1\xe2\xec\x35\x98\xd0\xaa\x52\xbd\x16\x0e\xe3\xa0\x27\xbb\x11\x13\x53\x6a\x78\xe7\x60\x8b\x33\x45\xe2\x00\xd2\xe9\x70\xab\x29\x2a\x1c\xbc\x4b\x1f\x00\xef\xf4\x73\x3d\x74\xe8\xfe\x7f\x89\x7b\x72\xbf\xe8\x53\x62\x09\x4b\xfe\xf7\xaf\x67\xbf\x9e\xbd\x36\xc8\x42\x0e\x41\x16\xba\x03\x59\x0a\x44\xf6\xc5\xf8\xfe\xde\x0d\x79\x3c\x12\xdd\x38\xf7\x08\xeb\x55\x42\xd8\xac\x1c\xc2\xc9\xc5\x7f\x7c\x38\xbb\xb4\xdf\xe5\xaf\x46\xe1\xab\x97\xef\x5e\x9d\xfd\xfc\xf3\xd9\xeb\x9a\x8d\x6b\x7c\x8f\xec\x9f\xd1\xa0\x01\x23\xd2\x7f\xd8\x02\xdd\x55\xa4\xfe\x8d\x6c\xae\xed\x8d\x78\x95\x4d\x6c\x75\x71\x37\x18\x18\xdc\x66\x2d\xd6\x95\x74\x5b\x51\x47\x83\x13\x9c\x71\x6b\xba\xe8\x45\xac\x1b\xd4\xe3\x83\x0c\xa7\x65\x41\x27\x38\xac\xa7\x3f\x70\x33\x3f\x63\xbc\x3a\xc9\xa5\x6c\xef\xbf\x0f\xff\xbd\x2e\x9e\x5a\x38\x7a\xcf\xeb\x47\x3c\x63\x83\xa4\x45\xf1\x5b\x74\x7d\x7b\x51\xa8\x31\x20\xfe\x40\xd4\xa6\x09\xd8\x36\x72\xbe\x9d\x9c\x40\xda\xa6\x4b\xfb\x2e\xb1\x3a\x7c\x08\xc2\xc7\x36\x23\x66\xe7\x8d\x06\xd9\x49\xe0\xeb\xc9\xe9\xa3\xdd\x74\x8e\xa4\xfc\xbf\xf1\xfd\x5e\xf8\xee\xac\x60\x13\xe1\x8d\x92\x30\x06\x38\x1b\xa6\xd7\xa9\x4c\x9c\xbe\x8b\xe5\x72\x71\x3b\x78\x93\xf6\xc4\x51\x8d\xd8\x07\x21\xa9\x87\x9a\xf8\x98\x87\x10\xf1\xd1\xd0\x70\x4d\xbb\x9f\x39\x8f\x86\x3c\x8f\x84\x3a\x4c\x4a\x76\xd4\xc3\xa9\xb1\x85\xf5\xc6\x68\x4f\x60\x55\x2b\xc8\xc8\x30\xef\x35\x75\xb0\x48\xa8\x5e\x0f\x86\x97\x0c\x97\x37\xff\x98\x4b\xaa\x74\x4c\x81\x57\xa8\x23\x38\x91\x43\xb9\x60\xe9\xe2\xb3\x4c\x89\xa7\xbe\x99\xb1\x7f\x90\xf8\x64\xe5\x1a\x4a\xab\xe4\xca\x94\x4b\xc4\xa0\x01\xc3\x38\xa1\xd7\x75\xc1\x6c\x5e\xad\x58\xb1\xc0\x65\xa9\x02\x4e\xe8\x30\x7a\x48\xcb\x24\x72\x8e\xd9\x1b\x42\x49\x79\x83\x33\x0f\x62\x0c\xa0\x16\x90\x34\x86\x91\xb8\x3b\x2d\x26\x00\x09\xc2\x4e\x12\x64\xd5\x06\x73\x17\xda\x99\x59\x72\x49\x81\x62\x0c\x69\xa2\xb0\xca\xc9\x51\xd1\x5c\x05\xa3\x24\x7b\x43\x68\xaa\x28\x57\x69\xc1\x4b\xfb\x2d\x0d\xcb\xc8\x3c\x5a\x53\x77\x85\xf2\x58\x15\xc7\x00\x40\x52\xed\x9c\xb5\x93\xf5\x7a\xac\xc7\x36\xeb\x5c\x76\x33\x6d\x66\xb3\x96\xb5\xa7\x21\x7f\xbc\x29\x58\xac\xad\x2b\x20\x41\xac\x56\x53\xc8\x52\x6b\xc9\x91\x90\xd2\x0c\x6b\x1a\xd3\xa4\xa0\xaf\x8a\xdb\x55\x8e\x25\x66\x32\x20\x45\x4d\x31\x49\x6e\xd2\xf2\x5c\xcc\x06\x67\x53\x7c\x8c\x4e\x27\xfc\x18\x9d\x4a\x99\x12\x80\x18\xf2\x79\xb5\x6f\xf1\x19\xd8\x3f\x58\xa5\xab\x06\x83\xf2\x2b\xe1\x62\x09\xeb\x11\x2f\x8a\x35\xe5\x38\xdb\x6e\x03\x1f\xd1\xd1\x18\x8a\x61\x7f\x50\x77\x06\xce\xe4\xf6\x28\x7b\x22\xb0\x59\xa4\x25\x1e\xf2\x06\x9b\x3e\xb1\x71\x4f\xb5\x56\x84\x25\x8a\x19\x16\xd3\x1d\xb8\x4d\x34\xdd\xa9\x1b\xf8\x8b\xe8\x2c\x8b\x91\x96\xb5\x51\x42\x06\xca\x94\x61\x04\xe5\x72\x30\x19\x1f\x41\xfe\xfa\xa8\x18\x3a\x51\x78\x34\xf6\xfa\x55\xcc\xd2\xc4\x9a\x52\x14\x54\x3a\x05\x64\xaa\x6a\x55\x79\xc8\x28\xe3\xd9\x8a\xa5\x93\xaa\x7c\x5e\x21\x2c\x83\xf2\xf2\x44\x2f\xbf\x8e\xc6\x3b\x50\xec\x94\xa6\x2d\x69\x59\x92\x6b\x1a\x6f\xe8\xfa\x56\x0f\x63\x82\x93\xfa\x07\xa4\xeb\x5b\xd5\xa5\xfa\xac\xfe\x16\x5f\xed\x3a\xbf\xa5\x0b\x55\xe6\x7e\xa9\x20\x4e\x52\xce\x59\x09\x06\xb6\xff\x98\x49\xa3\xc7\x7b\xe8\x7a\x03\x24\xd5\xfe\xf5\x3d\x74\xd9\x92\xf6\x43\x3b\x17\xd3\x39\xe1\x0a\x71\xfd\x5f\xdf\x09\x8b\xae\xf3\xfc\xc4\x07\xb8\xdf\xc0\xec\x61\xae\x09\x12\xbe\x26\xcc\x25\x11\xbe\x10\xea\x13\x5c\xeb\x1c\xcc\x1d\xc2\xbd\x5b\x62\x36\xaf\xd4\x29\x7b\x99\xe7\x2e\x5b\xdf\xae\x2a\xd5\xb6\x82\xac\x29\xaa\x95\x5c\xaf\x49\x56\xce\xf0\x7c\x34\x72\x88\x97\x3e\xb1\x1c\x54\xc0\xb9\x00\x8e\x8e\x6a\x71\xb9\x56\x50\x27\x69\x9e\xc7\x0c\x54\x86\x97\xc4\x60\x83\x93\x82\xbe\x31\xd2\x69\x19\x9f\xd2\x9d\xe1\x47\x85\x14\x56\xa0\xed\x8f\xcd\x9c\x62\xfd\x26\xd2\x55\xab\x56\xe3\x4d\x65\x0b\x35\x59\xef\x5c\xaf\xa9\xd4\x64\x99\x2d\x91\x02\x7d\x6b\x34\x05\x89\xe4\x86\x2c\xdf\x19\x87\x36\x03\xe2\xc0\x48\xc1\x20\xb0\x09\x24\xb1\x17\xb2\x77\x10\x83\x21\xa9\x1e\x08\x7f\xbf\xe3\x7c\x76\xc1\x7e\x52\x4e\xd4\xae\xbd\xc7\x73\xda\xdb\xca\x61\x38\x03\x5c\x03\xd8\x3c\x14\x1b\xda\xb9\x16\x7f\x13\x8d\x86\xc7\x1e\x80\x4d\xe5\xde\xbb\xf2\xa7\xba\xe1\xe4\x9f\xe6\x7a\x93\x3f\xf4\xfd\xd5\x58\x97\xef\x50\x76\xec\xa4\xc5\x0f\x85\x7a\x4f\x83\x75\x5d\xcc\xba\xcb\xa7\x97\x68\x53\x55\x35\xab\x64\x85\x23\x92\x4a\x42\x97\xaf\x2a\x67\x6c\x6e\x05\x26\x32\x76\xb2\x5f\xd6\x20\x2c\x92\x19\x09\xa1\xb0\x79\x5c\xeb\xa2\x8f\x78\xb1\x66\x25\xf9\x82\xd5\x9d\xae\x29\xa1\xe6\x77\xd5\x37\x8e\x5e\xe0\x98\x03\x50\x75\x34\xd9\xb4\x9b\x60\xcd\xc5\x72\x84\xa5\xfd\xa1\x68\x50\x9b\xfb\x95\xb6\x9c\x39\x93\x50\x0b\x30\x60\x0e\x4b\xfe\x86\x15\xb7\x31\x07\x50\xb2\x16\x15\xa8\xfc\x3e\xc0\xc6\xb5\x0f\x72\x56\x03\xb8\x39\x80\xb1\x5b\x32\xe3\x73\xd0\xe6\x59\x5a\x81\x11\xef\x8f\x53\x07\xa3\xa8\x67\xb4\x26\xfd\xa5\xd4\x29\xfc\x9b\xbf\x28\xf5\xb6\x1a\x06\xd4\x70\x08\xd7\xda\x38\x57\xfe\x6b\x45\x90\x9a\x26\xa0\xb1\xfd\xa2\x08\x83\xf3\xc1\x65\x27\xcd\x67\xc9\x52\x8a\x13\xe0\xd1\x1f\xe7\x14\xd4\xeb\x21\xf7\x7c\x50\xb7\x92\x46\x8b\xa6\x5b\xa9\x6b\x6e\x94\x69\x80\x62\xe0\x0c\x21\xc4\x93\x57\xef\x7f\xf9\xf0\xf3\xd9\xc5\xdb\xf7\xef\x2e\xcf\x7f\x7d\xf5\xea\xec\xfc\x7c\xda\x68\x52\xdb\x40\x22\x3c\x89\x5b\xad\xce\x3e\x7e\x7c\xff\xb1\xd9\xe6\x4c\x5b\x23\xe0\x49\xab\xbe\x7a\x98\x8c\x46\x71\x73\x64\x92\xd7\x11\x6d\x40\x73\xd0\x6f\xe9\xc2\x0e\x1b\x54\xfe\xeb\x67\x13\x5a\x49\xf1\x5e\x6b\xc0\xb0\xc5\x08\x57\xf5\xd3\x64\xd3\xa8\x25\x0b\xeb\x97\x4a\xb3\xd8\xac\x2c\x6e\x6e\xf1\x31\x3a\x75\xc9\xbe\xbf\xdd\xa2\x30\x70\xd8\x4d\x2c\xdc\x1a\x81\xa4\xd5\xfc\x73\xfe\x1c\x60\x75\xbc\xb9\xfa\x5c\x35\x8e\x7e\x7d\xc4\xf5\xbb\xa6\x1e\xa5\x7d\x90\xb4\x07\xe8\x3d\x78\x9a\x03\x74\x9f\x3d\xe1\x05\x6d\x3f\x7e\xbe\xeb\x8d\xe3\x1f\xf0\xab\xb4\xcb\x23\xa8\x3f\x0c\x2d\x3e\x30\xfc\xc2\xa1\x76\xae\xf7\xa2\x4b\xca\xe8\x8f\x07\xc3\xb4\x3e\xc4\x03\xe6\xa7\x54\xa1\x8c\xe1\x6d\x7d\x5d\xab\x2f\x1e\x96\x8f\xe2\x09\x86\x29\xbb\x2e\x27\x1c\x9a\x37\xc4\x84\x41\xfd\x28\xb8\xb8\x5b\xe1\x09\x85\x37\x69\xa9\x59\xf2\xb3\x2f\x98\xf2\x72\x42\x2a\x87\xa8\x19\xd4\x16\x50\xcc\x13\xc7\x69\x8f\xa8\xb6\x36\xd2\xd0\x8d\x58\xcc\xbe\x58\x5c\x4e\x5c\x62\xb6\x2a\x6f\x76\x8a\x48\x55\x62\x6e\x6e\x4a\x73\x20\x2d\x5b\xa5\x28\x8e\xfa\x21\x49\x89\xfa\xf3\x95\x36\xeb\xdc\x88\x2b\xef\x36\xd5\x24\xe3\xa3\x94\x66\x88\xaf\x25\xce\x97\xea\xdb\xcf\x45\xb1\xfa\x53\xca\x6a\x8e\xcc\xbe\x84\xcc\xa1\xb6\x23\xf6\xca\x94\x28\x4f\x10\x16\x47\x74\x68\xab\xea\xc2\x57\x37\x78\xf1\xd9\xd6\xa9\x66\x2c\xb1\x78\x64\xec\x46\x5d\x61\x79\xb3\xbb\xff\x10\x95\x55\x73\xa0\x5f\x8b\x31\x46\x91\x35\x5a\x95\x5a\x01\xfc\x6d\x95\x93\x05\xe1\xf9\xdd\x70\x91\xe6\x39\xce\xa2\xe6\x60\x74\x75\xf5\x90\x32\x2b\xf1\x9f\x6b\x5c\xf2\x98\x26\x8a\xc8\x5e\xfe\xe1\xed\xbb\xd7\x97\x67\xff\xe7\xc3\xcf\x6f\x5f\xbd\xbd\x90\xe6\x92\xd2\xf6\x56\x99\x5b\x06\x87\xa7\xad\x5c\x63\x6d\xa5\xab\x62\x9d\x2b\x73\xab\x5e\xad\x9c\xaa\x95\xb1\x94\xed\xd5\xd0\xab\x5c\xf1\xe2\x5c\xfa\x5a\x36\x34\x1b\x02\xbb\x8e\xa3\xa1\x7b\x24\xa2\x4a\x0b\x1e\xc3\x1d\xe8\x42\x89\x85\x55\x15\x38\x51\x04\xfa\xb4\x54\x3e\x1e\x79\xc1\xef\x56\x18\xf2\xe4\xed\xbb\xb7\x17\x6f\x5f\xfe\x7c\x79\x7e\xf1\xf2\xe2\x0c\xec\xa8\xaa\x9e\x4a\x93\xe8\x6b\x4a\x38\xa1\xd7\x11\x24\xe5\x6b\x56\xac\x56\x38\x9b\x1c\x9d\x42\x52\x1a\xb1\x93\x4c\xed\xfc\x5d\xb4\xd2\x25\x3a\x8f\xf8\x2a\x22\x99\x56\x31\xb5\xfd\xde\x86\x78\x34\x8a\xc4\x22\xbe\x72\x86\x82\x90\xb8\x22\xd2\x5b\x5c\x41\xec\xa3\x23\xc2\x1e\x3a\x7e\x78\xf9\xf1\xec\xdd\x85\x66\x03\x1a\x65\x3f\xbf\x7d\x73\x76\xfe\xe1\xe5\xbb\xcb\xb3\x77\xaf\x1b\x45\xff\xf1\xf6\xec\xe7\xd7\x2f\x7f\xfa\xf9\x2c\xdc\xd2\x20\x39\xc2\xc9\xc5\xcb\xf3\x3f\xe8\x4a\x2f\x25\xc7\xf1\xee\xe5\x2f\x67\x8e\x11\x43\xb0\xb8\x35\x9f\x41\x07\xfc\xc8\x9c\xcc\x66\x8d\xd6\x00\xa3\x3b\x75\xd0\x9b\x15\xbd\x49\x46\x39\x59\xe2\x72\x95\xd2\x4b\x4c\x5b\x35\xfd\xa5\x8a\x56\x29\xc3\x94\x5f\x2a\x04\x90\x75\xbd\x65\xde\x25\xd8\xfa\x4c\x68\x66\x48\xbb\x92\xfe\x5a\xe2\xae\x4e\xa0\x7c\x27\x69\x61\x92\x7c\x87\x78\x26\x95\x08\x57\xf7\xb0\x53\xdc\xc7\xc4\x3f\x1e\xf6\xb6\xd8\x4d\x84\x5b\x2c\xab\xff\x49\xf3\xbe\xfe\xc7\x0f\x67\xef\x5e\xbf\x7d\xf7\x6f\x35\xee\x04\xca\x1a\x9f\x0d\x9c\xd3\x41\xa0\xc7\x1f\x07\xa1\xa1\xfd\xf6\xfb\xd6\xd5\x90\xba\xc3\xf9\xa7\x96\x05\xf4\x3f\x08\xd7\xd5\x46\xa4\x87\xe7\xdd\x64\xbe\xbb\xef\xc6\xc3\x6b\x6c\x9e\x0c\xf6\xbe\x09\x04\xf3\x9b\x95\x36\x43\xf1\x5c\x50\xcf\xb6\x6e\xa9\x10\xaf\xbe\x0f\x67\x1f\xdf\xbc\xff\xf8\xcb\xa5\xd4\x99\xfc\xfc\xf6\xdd\x1f\xa4\xad\x96\xf7\xf5\xd7\x77\xe1\xef\xaf\xcf\xde\xbc\xfc\xf5\xe7\x8b\x1a\x91\x83\xa5\x51\xe8\x6b\xd4\xac\x6d\xfb\x88\x82\x9f\x5b\xf5\x83\xb5\x4d\x5d\xe3\x44\xb5\xa9\xb4\xdb\xd0\x6c\x3e\xe8\x58\x80\x36\x79\xdb\x34\xcd\xb3\x27\x18\x62\xfa\x65\x42\x61\x86\xaf\xd6\xd7\x35\x63\x7b\xed\x9b\xbd\x2b\x91\x90\x6f\x0b\x6f\xa5\xdd\x12\xa5\x9a\x7a\xa3\x0a\xb2\x26\x2b\xa0\x55\x96\x19\xfe\x66\xde\x9a\x19\x29\x57\x45\x89\x99\x98\x04\xf4\xc8\xe7\xab\x34\xcf\xaf\xd2\xc5\xe7\xba\x04\xd3\x2f\x86\x95\x96\x63\x45\x44\x67\xe8\xf0\x28\xba\xb6\xab\x57\xec\x4d\x3d\x3a\x4f\x11\xd7\x6e\x66\x95\x73\x86\xc1\xde\xd4\xf5\x15\x62\x1a\xc2\x2f\x98\xd9\xf3\x3b\xba\x88\x69\xe2\xdc\x5e\xef\xdf\x5d\xbc\x7d\xf7\xeb\x99\xc9\x60\xd8\x96\xba\x27\x0e\xbb\x5e\x73\xb0\x4d\xfb\x2a\x39\x96\x57\xa6\x70\x1a\x07\xc7\x3f\x75\x87\xf2\x27\xc2\x6f\x54\x83\x97\xca\x27\x64\xe2\xad\x62\x5d\x6c\xe4\x71\xde\xb4\xcd\x4d\x06\x26\x31\xae\x7d\x01\x54\x12\x4d\x55\x50\x3f\x39\xc2\x2f\x68\x39\x38\x88\x43\x33\xb6\x2d\xeb\x8a\xf6\xad\xe0\x3f\x07\xdc\x7d\xaa\x95\xcd\x7a\x9f\xd2\xec\x8b\x00\xf7\x56\xa0\x8d\x0c\x29\x11\x73\x84\x90\xb7\xfa\xf2\x4e\xb0\xd6\x68\xee\x22\x0a\xb4\x2d\x1a\x9c\x7e\xb1\x93\x05\x01\x90\xf9\x9b\xdd\x5a\x61\xbd\xc4\xba\x58\x7d\x14\xb3\xb0\x93\x6b\xb5\xd8\xb4\x1b\xb8\xe3\xff\x78\x76\xf1\xeb\xc7\x77\x30\xb5\x00\x54\x95\x9a\x13\xf1\x96\xa0\x3e\x44\xc0\x9e\x0b\xe5\x58\x58\x6b\xac\x5c\x3c\x15\x60\x2c\xe4\x73\x1f\x70\x7b\xc9\x63\xf7\x58\x1a\x9c\xf1\x69\x81\xf4\xd2\x98\xea\x27\x2a\xcd\x72\xfc\x51\x39\x25\x66\x1f\x25\x2e\xe3\x4c\x06\x01\x90\xbd\x4c\x02\xb5\x5e\x15\x94\x13\xba\xc6\x75\x2d\x50\xed\xab\xe1\x4a\x78\xe5\xd4\x21\x45\xcd\x91\xe1\x95\x4a\x55\xd2\x5e\x31\x95\x32\xd0\x78\xfb\x34\x7c\x65\xa8\x8e\xd0\x40\x5a\xac\x87\x37\x7a\xfd\x00\x55\x43\xa2\xad\x21\xb7\xa7\xbe\x31\x46\x0a\xda\xc4\x20\x44\x2e\x26\xad\x12\x85\x0a\xfe\x19\x8e\xb9\x3f\x38\xcd\x2e\x81\xc1\x15\xc3\xe9\xe7\x41\x0b\xc6\xc5\xef\x3f\xbe\xff\xd3\x6e\x10\x6a\x7e\x55\xe5\xcd\xed\x57\xfa\x99\x16\x5f\xe9\xc5\x0d\x96\x52\x87\x86\xb0\x4d\x2e\xfb\x40\xe7\x70\xb5\xcc\x6e\xe3\x38\x73\x18\xa4\x8a\x18\x54\xb0\x5f\x13\x39\x76\x51\x1f\x54\x8d\x73\xbf\x21\x4b\x07\xf5\xc5\xcb\x49\x5b\x2d\x1c\x1f\xd7\x9f\xab\xc0\x66\x39\xf9\xb3\xe4\x4e\x0f\xb8\xa6\x14\x69\x96\xbd\xd6\xd7\x4f\xcc\x67\xb4\xed\x8e\x0a\xa0\xf8\xdc\x94\x53\x4c\x75\x77\x5f\x8a\xcf\xaa\x23\xb9\x58\x3c\xe8\x37\xcb\xe5\x72\x4d\xdb\x78\xd4\x5c\x6b\xee\x13\x15\x41\x41\xce\x89\x60\xd9\xd4\x1c\x38\xd8\x57\x5e\x75\x94\xe0\x7d\xc4\xc7\xdd\x24\x77\x45\xc4\x8b\x22\xe0\x08\x3c\x1a\xf9\xf7\xb6\x51\x7b\x57\x96\x64\xb8\x4a\x6d\x5b\x6d\x30\x3e\x12\x6f\x5d\xc5\xb2\x19\x39\xb6\x77\xf9\x63\xcf\x32\x2a\x06\x00\x54\xfe\xe1\x56\x87\x4a\x27\x9c\xbd\x21\x25\x18\x38\x44\xa1\x41\xa1\x4a\xd3\x60\x40\x96\x71\xa9\x73\xa5\xc9\x8a\x97\xf8\xdb\x0a\x2f\x78\xf9\x33\xa1\x9f\x71\x26\x77\xc3\x8c\x98\x69\xfc\x10\x2f\xf5\x10\xe3\x25\x5f\xeb\x8e\x5c\x6f\xbb\x15\x8c\x55\x91\xe3\xe4\x6b\xca\x68\x1c\xfd\x47\xb1\x1e\xae\x8c\xb0\x77\x98\x0e\x93\x5c\xf6\x11\x83\xa1\xb8\x16\x87\x3a\x08\xfb\x90\xdc\xde\xe2\x8c\xa4\x1c\xe7\x77\x43\x89\x5b\x84\x5e\x3f\x53\xa8\x4c\xe8\xf5\x90\xf0\x64\x78\x71\x43\xca\x21\x29\x87\x3a\x05\x75\x7e\x37\x5c\xd3\x72\xbd\x12\xef\x14\x9c\x0d\xe3\xab\x35\x1f\xde\x92\xeb\x1b\x3e\xbc\xc2\xc3\xfa\x3b\xa1\xc3\xe5\x9a\xaf\x19\x1e\x7e\xc1\xac\x94\xd1\x82\x96\xc3\x16\x93\x0f\x92\xa8\x7b\x29\xd0\xd1\x69\x65\x95\xd6\xb7\xe9\xdd\x95\x21\x70\xaf\xb5\x33\xa9\xe6\xbe\x96\x98\x69\x44\x68\xde\x20\x66\x6f\xd5\xf7\x86\xd2\x05\x21\x14\xa2\x64\xd3\x1a\xaa\x71\x70\x77\x81\xc8\x5d\xd1\xf8\x6f\x2a\x09\x3e\xc4\xad\xa3\x5c\x91\x41\x48\x68\xd9\x62\x28\x7d\x4b\x8d\xf6\x04\x14\x1b\xb1\xb6\x90\x6c\xc3\x18\x54\xe1\xcf\x5d\x1d\x35\x30\x7a\x1f\x83\x1b\x58\x70\xa7\xe0\xe2\x86\x15\x5f\x7f\xa5\x8a\x8c\x48\x03\x41\x29\xe5\xfd\x39\xe5\xd2\x91\xda\x4a\x05\x7d\x87\x4a\x01\xc6\xde\xea\xe2\x07\xb2\x3c\x43\xe6\x76\x11\x8c\x4c\xd0\x39\x2c\x00\x9d\xdd\xd0\x3d\x57\x3d\x46\xb9\xe9\xe8\x4b\xb3\x7a\x41\xa4\x39\x6a\x20\x8d\xbc\xbb\xb6\xdb\x78\x0c\x8b\x5a\xe2\x06\xda\xc8\xa0\x61\xfa\xdc\xd1\x9e\x01\x88\xca\x5d\x2e\xd5\xad\x0e\x2a\x50\x35\x39\x76\x93\x79\xa9\xcd\x69\x8f\x46\x47\x3b\xcf\x8b\xff\x88\xc1\xd2\x72\xd2\xf1\x93\xe5\xf5\xfd\xe7\xd5\x04\x21\x67\x5e\x97\xe9\xd7\x44\x72\xd3\x58\xd4\x09\xaf\x06\xbc\xeb\x38\xc6\x2c\x21\xa5\xa3\xc1\x3c\x1a\x43\x66\x9c\xa8\xc1\xa4\xd5\x4c\x29\x33\x65\x23\xb9\xa6\xaa\xbe\x5c\xa3\x60\x7d\xab\xcc\xac\x2b\xf9\x27\xe3\xfc\x26\x65\x38\x8b\x59\xbd\x02\xee\x8c\xdc\xfb\xc5\x7b\x6f\x04\xf4\x1b\x81\x17\x8f\xb1\xe3\xe4\xf2\x49\x7b\xa6\x83\x15\x0c\xea\x67\xa5\xf5\x8f\x1f\x8d\x0c\x7d\xcf\x0b\x69\x82\xc9\xa5\xac\x16\x15\x61\x71\x68\x70\x0e\x1b\x52\x1a\x1d\xed\xe4\x68\x0c\x9b\xbb\x10\x58\x17\x28\xd7\x64\xc2\xe1\xc2\x99\xc8\x04\x57\xc1\xe7\x5b\xfd\x64\xab\xfc\xb1\x37\x88\xc0\xd5\xfa\xda\xc1\xf0\xae\x80\x00\x55\x63\xf0\x86\x82\x4a\xd6\xea\xf8\x18\xba\x78\x6b\xa9\x83\xf3\x3e\x84\x3b\x28\x67\xfd\xdc\x4f\xf9\xe2\xc6\x54\x50\x8a\xad\xb8\x75\xe6\x15\x3b\x11\xaa\xd9\xe2\xab\x43\x18\x3c\x09\x3e\xbf\x8d\x82\xcc\xe5\x9b\xdb\x88\x1c\x6c\xab\xd0\xa4\x45\x01\x3a\x21\xa9\xad\x0c\x82\xd2\x68\xec\xd2\x3b\x67\xa3\x41\x55\x35\x39\x4b\x5c\x07\x07\xe0\x08\x07\x18\xd2\xb8\xd5\x8d\x23\x68\xb1\xef\x21\x87\xd7\x35\xca\x29\xf3\x0a\xdc\x49\xf5\x40\x55\xf9\xea\xb7\x2e\x12\x6a\x31\xa2\x61\x42\xd9\xb2\xce\x69\x99\x62\xb0\x2e\x42\x84\x0d\xdb\xda\xf5\xb0\x68\x73\x09\x2d\x58\x8a\x3a\x75\x41\x52\xef\x8d\xd6\xc6\xb6\xc1\x18\xa2\xd5\x39\x24\x75\x78\xe9\x3a\xcf\x4d\x3c\x1f\xcb\x9a\x1a\x3b\x0a\xc1\x34\xc6\x92\x25\xed\x10\x03\x1e\x21\xc4\x34\x45\xaf\x2f\xab\x0c\x73\xbc\xe0\xe7\x9e\x9a\x56\xa6\x7e\x76\x09\x42\x0f\x41\x87\xa7\x18\x01\x2a\xd6\x83\x37\xb0\x96\xd6\xd0\x62\xad\xc7\xf4\x86\x25\x9e\x55\x70\x98\xe6\xe2\x0a\xb7\x39\xaa\x1f\x71\x66\xc1\xac\x12\x72\x34\xe2\x4d\xb5\xad\x9e\xd6\xe0\x88\x6d\xb7\x4c\x6a\x67\x8e\x10\x2a\x3a\xd5\x44\x61\x31\xdf\x2e\x49\x53\x43\x7a\x15\xd2\x8b\xf3\xef\x56\xe9\x34\x84\xff\x7f\xf7\x46\x5e\x9e\x08\xb7\x69\x05\xdb\x66\x2b\x02\xea\x1e\x1d\x76\x52\x45\x1f\x92\x97\x9b\xfc\xd3\x65\x31\x94\xbe\x57\x92\x13\xf5\x67\x7d\x69\x9e\x42\x57\x12\x2b\xca\xcc\xae\x4d\x8e\x4e\xab\x41\x73\x80\xf7\x32\xaa\x79\xa6\x4d\x72\x1e\xdd\x6e\x56\x63\x7e\x68\x31\x39\xda\xe4\x69\xc9\xd5\xda\x38\x76\x53\xf5\x07\xb3\x08\xf6\x83\xb5\x2c\x72\xea\xd4\x4b\x6a\xbf\x19\xf3\xb5\xfa\x8b\xb6\x34\x73\xaa\x98\xe5\xb6\x5f\x6a\xf3\x31\xf5\x4d\x93\x80\x57\xc5\x9a\xf2\xc9\x58\xac\xbb\x3f\x17\x6e\xf4\xfc\x4b\x86\xf1\x5f\xa5\x44\xe2\x3e\x1b\x21\xd1\x5b\x1a\x70\xdd\xef\x68\x3c\x33\x46\x86\x0f\x7f\x10\x9c\x88\x94\x5d\x51\xba\x2e\x74\xe7\x9b\xca\xad\x7e\x3f\x94\x14\xff\xfb\xde\x35\xb8\x0f\x49\xb1\xaa\xd1\x47\x70\x08\xbe\x70\x43\xa9\x86\x42\x5f\x38\xda\x00\xd7\xb0\xca\x35\xa6\xd2\x2a\x78\x25\x5b\x51\x63\x40\xcc\xfa\x70\xb4\xcd\x66\xa4\xa3\xc8\xa5\x2e\x37\x8c\x6d\x0b\x6c\x1b\x28\x08\x05\xc8\xb0\x1b\xdc\xb0\x6f\x2d\xd7\x2b\x29\x32\xf3\xe0\xaa\xeb\xdf\x74\x9d\x5c\x11\x9a\x29\xc1\x55\x65\x04\x43\xfa\x29\x23\x1d\xa2\xdb\x6a\x4f\xa0\x78\x85\x23\xac\x43\xac\xd5\xef\x15\x29\x6a\x5a\xa4\x74\x58\x50\x6d\xeb\xe4\x08\x9b\x96\xac\xb8\x95\xc2\x26\x42\x87\xa9\x14\x3d\x25\x75\x1c\xce\x3a\x88\x07\x64\x21\x95\x23\xc4\xa0\x5a\x53\x3b\xbe\xbd\xad\x0c\xeb\xa2\x19\x9f\x4b\xeb\x97\xbd\xa9\xf4\x19\x38\xdc\x83\xa4\x81\xc3\xf7\x3a\x02\x0d\x82\xfe\xd0\xba\xee\x87\x39\x0a\xd2\x18\x5a\x1f\x07\xe5\xfb\x18\xb6\x52\x34\xef\x30\x95\x9e\xb4\x44\x18\xb6\x15\x71\x96\x1f\xbc\x5e\x93\x0c\x45\x78\x71\x19\x1d\xd3\xe3\xe3\xfa\x5b\x89\x36\x95\xf3\x6b\x66\xff\x9c\x5b\xc6\x5d\xd2\xdd\xd1\x28\xa0\xe5\x93\x4d\x9c\x4a\xea\x03\x70\xfd\xb6\x94\x93\xa1\x0e\x19\x52\xbf\x5e\x25\xdb\xf5\x07\x42\xb3\x09\x85\x0c\x9b\xc7\xe2\x84\x54\x08\x6f\xb7\x9b\x6a\xc0\x11\xdf\x6e\x8d\x1d\x9f\x00\xd4\x61\xca\x37\x2c\xc4\x79\xc6\xd2\x8c\x2d\xd2\xf9\x21\x94\x77\x54\xc3\x8c\x4f\xf0\x86\x41\x4b\x3e\xde\xf0\xea\x35\xc6\xf7\x4e\xdf\x76\xae\xd0\x44\xdc\x94\x6c\x38\xd1\x32\xc1\xcb\x7a\x02\x31\xa8\x40\xe5\xfd\xde\xf8\xaf\x61\xee\xdf\x8f\xc0\x33\xdd\xac\x9c\xfd\xdf\x6d\x4b\xe7\x03\xd9\x65\x4b\xe7\xb8\x69\x8e\x1d\xdf\xcc\xb1\x6b\x47\x27\xb8\x27\xfd\x5d\xfe\xfd\x36\x53\xf1\xb9\xb5\x1d\x1e\xc9\x72\x1c\x1d\x6e\x6a\xe7\x9a\xa6\x3c\x1a\xe7\x94\x52\x72\x2b\x0f\xe3\x1b\x96\xde\x86\x2c\x42\x24\x32\x54\x10\x27\x2c\xfd\x7a\x41\x6e\x71\xb1\x0e\x05\xc8\xd7\xa4\x4c\x2a\xa4\x92\x65\x21\xd3\xcd\x22\x9c\xd8\xd7\xb6\xf8\xbb\x6d\x34\xd7\xd4\xcf\x79\x9f\xe4\x13\xd2\x6f\xa7\x9f\xa7\x08\x37\xdf\xea\x08\xb7\xb4\x4c\xb5\x7d\x49\xab\x44\x2c\xc7\x42\x9b\xae\x5d\x5e\x46\x83\x36\x38\x55\xc3\x7e\x55\x95\x02\x03\x89\x64\xba\xe4\x41\x7b\xd8\x91\xbc\x5a\xfc\x12\x3d\xc7\x48\x07\xec\x1f\x04\x96\x24\x32\xf6\x74\xa1\xd0\x8b\xfa\x28\x34\x87\x86\x82\x5f\x9d\x6b\x11\xd6\x15\xcc\x9c\x51\xfb\x93\x7b\x8f\x5e\x4a\x01\xb4\x94\x92\x98\xbb\x74\xa3\x15\x08\x3a\x96\x34\x54\xaa\x02\x13\x59\xda\x86\xa3\x0e\x9a\xf0\x49\x2d\x3e\x7a\xb1\xc1\x46\x0b\x81\xb8\xc0\x27\xac\x79\x0c\x00\x71\x75\xc9\x8b\x0f\x56\xd0\xee\x08\x22\xdd\x91\x40\x8e\x36\xb5\x90\x40\xd9\xb4\xcb\xf5\x47\x88\x6d\xb7\x66\x59\x11\x62\x53\xdb\x51\x4c\xc1\xc4\xf4\x14\x53\x50\x55\x90\x85\x97\x2b\xe6\x70\x0c\x5a\xb3\x68\x2c\x9a\x89\xd1\xe8\x7d\xad\x6d\x3a\xba\xec\x99\xdd\xb9\xf5\xb1\x64\xf6\xea\xf7\xb3\x61\xf6\x9a\xf8\xd6\xcb\xad\x99\x82\x4d\xe5\x4d\x40\x13\xce\xfa\xa8\xf2\x36\x07\xde\xc0\x43\xc5\x96\x19\xdb\x14\x72\x8b\xd9\xdb\x4c\x19\x08\xb5\x7a\xab\x25\x5b\xa6\x9e\x96\xed\xbf\xf4\x08\x8f\xba\x10\x5c\x21\x90\xda\x5a\x88\xe5\xed\xb0\xce\xb9\xbc\x18\x1a\xe3\xd6\x37\x8c\x0f\xc9\xed\x2c\x34\x44\xcd\x7e\xd2\x8e\xd9\xe1\xc6\xf4\x6e\x6d\x1c\xa7\x43\x27\x5a\x62\xae\x09\x66\x9f\xd9\x99\xde\x02\xb3\xcc\x71\xca\x0c\xa4\xfd\xb3\xd3\xe1\xc6\x6d\x48\x17\x67\x9e\xfd\x70\x61\x50\x53\xf0\xbe\x3c\x66\x20\x0e\xfc\x03\xdf\x53\x82\x89\x54\xe9\xd0\x5e\xe5\x45\xb9\x66\x18\xb5\x3d\x5c\x74\x56\xac\xd9\x78\x0e\x0b\xc4\x12\x99\x9d\x3c\x3e\xb5\xc7\xda\x36\x50\xe7\x87\x2c\x63\xe2\xe7\xc3\xd1\xba\x78\x32\xe3\x73\x59\x4c\x47\x23\x6d\xc5\x52\x9b\x3a\x48\x95\xf7\x00\x2b\x5d\xa7\x13\xa8\x1f\x9a\x9a\x36\x73\x88\x00\x23\xba\x2a\xa0\x3a\x88\xbd\x05\x5c\xb5\xfb\xa2\xaa\xf4\x20\x81\x17\x6a\x20\x8f\xee\xc9\xdd\x7a\xbe\x9b\x08\x4e\x6d\x97\xfd\x46\x20\x6d\x6e\x7d\x74\xb4\x2b\xbf\x0e\xdf\x44\x65\x70\xbd\x43\x5d\xba\xe5\xbb\xa3\xce\x36\x71\x58\x92\x82\xa5\xb2\xe2\xdc\x5d\x53\xe6\xaf\xd8\xfb\x8a\xb1\x61\xf0\x75\xfa\x36\x48\xd0\x6c\xae\x30\xaa\x80\x8d\x2c\x38\xd7\x98\x4f\x4a\x2d\xd8\xcb\x2b\x44\x07\xe9\xb4\x40\xa9\x9f\x24\xa8\x9c\x16\xa8\xf4\x3f\xe5\xa3\x51\x5c\xa0\x1c\x48\xd5\x6d\xb9\xca\xd3\xbb\x77\x82\x9b\x63\xc7\xd1\x30\x96\xa1\x5d\x14\x6b\xbf\x96\x54\xe1\x4f\x38\xfd\xfc\x4b\xba\x82\x0b\x44\x66\xe3\xb9\x78\x2d\xc0\x4c\xdb\xa1\x0a\xee\xd9\x84\x17\x66\xb0\x80\x0b\x7b\x78\xb2\xe4\xb2\xc4\x7c\xbd\x92\x3b\xf6\x87\x3f\xbe\x17\x8f\xf2\x8d\xc0\x7c\x73\x5d\xaf\x6d\xc2\x8a\xfa\x1e\xdd\x6e\x63\x8c\xb2\x64\xc1\x70\xca\xa5\xa7\x8b\x66\x48\xd6\x82\x9f\x37\xcf\x2b\x71\xfd\x57\x95\x9b\xb2\xa9\xb9\x48\xde\xa8\xd3\x7a\xd4\xa5\x33\x6a\x29\x12\xaa\x87\x2e\x65\x6b\xa9\x19\x89\x37\xd0\xa2\x6b\xa0\xa5\x33\x50\x09\x4e\x8f\xb6\xd8\x31\xda\xc2\x61\x81\x5d\xfa\xc2\xdb\x5f\x15\x11\x99\x49\x5a\x35\x47\x36\x0c\xd0\x6f\x91\x6b\xc0\xd3\x4a\xe3\xc4\x6d\x1a\x27\x3e\x1a\x45\x2a\xe9\x5b\x5d\xca\x46\xa3\xb8\xd5\x84\xda\x26\x74\x34\x8a\xea\x8c\x41\x11\xa1\xa2\x2c\x5a\x14\x74\x49\xae\xd7\xf5\xb7\xed\x56\xe1\x11\x42\x88\xaa\xf4\x50\x58\xcd\x61\x22\xfe\x11\xac\x9b\xfc\xad\x82\xc9\x38\x49\xa2\xb0\xe0\xc8\xaa\x3a\x6b\x7d\x1c\xb3\x46\xa2\x27\x95\xdc\xa1\x65\xc0\xbc\x11\xd0\x55\x46\xa5\x7a\x0f\x4c\xe3\x74\x7e\xaf\xf4\x49\x9d\xf9\x8a\xc2\xc9\x8e\x02\x59\x91\x9a\xf9\x8f\x78\x77\x2e\xa4\x50\xb2\x23\x3f\x17\x92\x93\xfa\x48\x49\xdc\x12\x9b\xc6\xc9\x97\x4f\x97\xa8\x88\x25\xd9\xa0\x70\x46\xba\x13\x64\x15\x82\x18\x90\x65\xac\xd3\xcd\x50\x2f\x29\x16\x4b\x7e\x3d\x3f\xbb\xbc\xf8\xf8\xf2\xd5\x1f\xce\x5e\x83\x00\xce\x0b\xe4\x9d\x91\x79\xc3\x85\xba\x4e\x22\x63\xf2\x8d\x15\xd3\x22\x90\x37\xa6\xea\xc8\x67\x43\xf6\xe4\xb3\x51\x7d\x37\xb2\xd9\x04\x1a\xed\xcb\x66\x13\x1e\x95\xce\x66\x43\x81\xcc\x57\x54\xaf\x6e\x69\xb3\x49\xa5\x31\x0d\x64\x93\x4a\x63\xda\x91\x1b\xaa\xce\x1f\x25\xeb\xec\xc8\xf5\x54\x67\x91\x92\x35\x0f\xc8\x22\x25\xeb\xf7\xc8\x65\x55\x67\x93\x4a\x63\xd2\x95\x4d\x2a\x8d\xc9\xae\xb4\x50\x75\xfe\x28\x59\x71\x5f\x86\xa7\x3a\x8b\x94\xac\x7e\x68\x16\x29\xd9\xa8\x6f\x6a\xab\xdd\xd9\xa4\xba\xee\xe2\x07\x88\x07\xd8\x8e\xdb\xf8\x60\x21\xb7\x1f\x24\x66\xfc\x43\x86\x01\x7e\xc8\x10\xab\xfb\x36\xa9\x07\x4b\xb5\x52\x54\x9c\xec\x73\x92\x72\x75\x55\xf7\xe3\x93\x3b\x7c\xa8\x60\x0a\x4b\x98\xc3\x75\x17\x7f\xb6\x30\xec\x9b\x79\x5a\x0f\x89\xa0\x49\x5d\x57\x11\x37\xf7\x0f\x83\x7e\x5a\x3e\xf7\x82\x15\xbf\xbf\x32\x52\x9f\x88\x09\x9e\xf1\x39\x62\x10\xdf\xe7\x8a\x6b\x72\x3a\x08\xbb\x2c\x9b\x2b\xf3\xce\xd0\xb8\x9e\xd8\x8d\xef\x49\x46\x96\x31\x03\xcb\x82\xc5\xea\x7a\x1e\x3f\x4f\x7f\xc7\x34\x07\xf2\xfc\xf8\x38\x55\x84\xbb\x44\x6c\x96\xce\xa1\x92\x85\x89\xf5\xbd\x74\x36\xe1\x52\xd9\x21\xb2\xcb\xe8\x38\x3b\x3e\x1e\xf0\x59\x3e\x47\xcb\x58\x81\x87\x38\xe6\xb0\x54\x1c\x58\xee\x32\x0c\xcb\xc6\xf2\x36\x6e\x0a\xda\xbc\x29\x30\x18\xb0\x69\xfd\x42\x30\xdb\xfb\x5e\xbc\x14\xa2\x54\x36\x2d\x23\x48\xa1\xe4\x24\x52\x76\xbd\xbe\xc5\x94\x97\x60\x42\x67\x7c\xae\x93\xfe\x52\x58\x7f\x37\x4f\xe3\x15\xc2\xe8\xc5\x4b\xc6\xd2\xbb\x84\x94\xf2\xdf\x18\x83\x29\x9e\xcc\xf0\x1c\xde\x22\x2d\x53\x78\x4f\x27\xf2\x71\x84\x5e\xe0\x24\xcd\xb4\x31\xa4\xb6\x95\x4a\x92\x64\x15\x73\xc1\x09\x6a\x82\xaa\x42\x4e\x62\xfe\xd3\x7a\xb9\x34\x11\xc2\x62\x1b\x5e\x0c\x40\x2c\xda\xe1\xcc\xd6\x3b\x53\xbf\xe3\xa3\x31\xd0\xde\x61\xa6\x44\xda\x8e\xa9\xef\x82\xaa\x07\x01\xd3\x1a\xb0\x3c\x24\xf5\x40\x4b\xcc\x35\xdf\x0a\xa0\x43\xbd\x83\x50\x48\x0d\xc5\x8f\x98\xeb\x81\xfb\xc5\x2b\x12\x70\x8b\xab\x12\xb3\x2f\xb8\xf4\x96\xe7\xbd\xfa\xc8\xfe\x80\xef\x9c\xe5\x29\xfc\x35\xd4\x5a\xf5\xe6\x22\x1a\x0b\x07\xb7\xdb\xf7\x3a\x7c\x21\x07\xd0\xbd\x50\x82\x13\x29\xec\x44\x2a\xfd\xf4\xfc\xe2\xcb\x73\x50\xf4\xbb\xb5\xf2\x0a\x78\x11\x41\x93\xf4\x44\xf2\xad\x0b\x85\x67\x91\x16\x7f\xc8\x91\x89\x77\x93\x78\x2a\xce\x01\xb4\xc5\x72\x8f\x22\xa5\x8a\xab\xbf\xe2\xae\xea\x37\x69\xf9\x6b\x89\xb3\x5f\x8a\x8c\x2c\x89\x78\xb5\x1f\x9d\xfa\xa5\xe7\xfe\x14\xda\x15\xbc\xf0\x14\x8d\x62\x7f\xb7\x5a\xa3\x32\xfb\xd3\x18\x93\x5e\x65\x63\x38\x18\x41\xbd\xdc\xdc\xb5\x33\x74\xea\x37\xe2\xdd\xbd\x12\x0b\x1b\x39\x39\x88\xeb\x9a\x96\x2f\xf9\x90\xf2\x1b\x33\x1c\xf9\x86\x97\x46\x9d\x4e\xa0\xbc\xd7\x82\xd0\x11\x71\x6c\x4d\xa4\x8e\x4b\x1d\x1b\xef\xbd\x52\xc0\xc5\x14\x54\xce\x5b\xd1\xf7\x93\xb9\x2c\xa5\x8e\x59\x94\x7c\xb0\x17\x49\x9d\xab\xa7\xfd\x70\x6a\x77\x2b\xc3\xfe\xa5\xc9\x19\x5d\xa4\xab\x72\x2d\x2e\x4b\x09\x2e\x6e\xbc\x4f\x44\xa3\xf7\x57\x7f\x99\x04\x20\x54\x90\x03\x95\x00\x28\x4d\x42\x4d\x5b\x4e\xa0\x5c\x3b\x8e\xf9\x60\xdc\x94\xe4\xd2\x4f\x2b\x40\x62\x9a\x12\xde\x26\x8e\x2a\x09\x94\xac\xa8\x02\x4a\x04\xce\x61\x13\x86\x41\x8e\x50\xdb\xd6\xf1\x6c\x36\xc6\xdd\x5d\x37\xcf\x64\xb3\x69\x1b\xe7\xad\x6e\xb4\x79\x5a\xea\x82\x10\x0a\x6a\x74\xaa\x2c\xa9\x6c\xf6\xa4\x1c\x58\xeb\x5a\x86\xd4\x06\x46\xe4\xc7\x80\xa9\x9b\x34\x68\x5e\xa0\x65\x78\xbc\xcd\xf4\x42\x16\xa0\xa2\xc9\x2d\x89\xbd\x7b\x6e\x9c\xda\x62\x85\x9b\x95\x9d\x93\x54\x39\xe4\xb1\xb5\xbd\xfe\x21\x77\x5a\x5c\x78\xe8\xd7\x6c\xd8\x38\x9c\xba\x59\xf3\x70\x62\xb0\x31\x3c\x03\x1f\x16\xcb\x46\xe6\x47\x1b\x10\x6c\xc6\xe7\x83\xdb\x19\x9f\x4f\xc5\xff\xd4\xb3\xcd\xc6\xfe\x82\x2c\xe8\xcd\x55\x26\xce\xa9\xbe\xab\x95\xaf\x33\x3e\x1f\x8d\x76\x14\xd6\x8f\x42\x99\xba\xaa\x25\xa0\xda\x18\x09\x6d\x9a\x65\x3f\x93\x92\x8b\xc3\x69\x22\x77\x3a\xe8\x5c\x53\x2b\x18\x69\x3b\x0b\x45\x73\x77\x35\x6f\x1e\x47\x17\x88\x55\x7c\xb7\xc0\x98\x03\x6a\xc1\x98\x13\x19\x1e\xc3\x18\x54\x5d\x64\x4f\x91\x46\xc1\xd3\xa1\xe0\xe6\x0f\x8c\x5b\x83\x8f\x68\x80\x8b\x1d\x6a\x7f\x9f\x43\x86\x78\xad\xbb\x1f\xe0\xbc\xc4\xfa\xfd\x2e\x65\x6c\x9d\x27\x32\x0e\x21\x3f\x18\xa8\x40\x9e\xeb\x3a\xd6\xa1\x78\xa7\x6b\xc1\xc4\xa2\xa0\x1c\x7f\xe3\x13\xac\x99\x1f\xe7\xe4\x42\xb1\x02\x93\x7a\x2d\x14\x83\xc3\xa1\xed\x79\xc2\xda\x31\xa3\xc2\x27\x1a\x36\x16\x64\x42\xa5\x65\xae\x34\xdc\x79\x43\x03\x56\xb9\x0e\x95\x2f\xeb\x7a\xb8\x36\x40\x68\x1d\x22\x63\x6f\x60\xd9\xef\x41\x80\x43\xf7\x75\x30\x5f\x36\x4d\x19\xe3\x41\xb7\x9c\x54\xb3\xe7\x89\x23\xa1\xec\x6f\x37\xfb\x20\x26\x80\x7d\xde\x65\xc6\xc4\xe8\xe4\x96\x7c\x23\x74\x4f\x5d\x19\x9a\x31\x0b\x07\x99\x7d\x98\xb8\x65\x1d\xf6\x85\x4d\xf3\x33\x59\xc5\x37\x30\x24\x90\x26\x5a\xa8\x76\x69\xac\x61\xa5\x8b\x8a\xb4\x1a\xb1\x06\x3d\xde\x60\xc4\x76\xb9\xf6\x23\xbb\x20\xec\xb2\x3b\x61\xd2\x19\x46\xda\x06\xfc\xf2\xf6\xff\xbc\x7d\xd7\xd7\x7a\xa4\x91\x61\xf9\xfb\xcc\xa0\x55\x28\xbc\xfe\xfb\x77\x1f\x65\xc9\x43\x6d\x71\x47\x58\x3a\x67\x97\x9b\xe1\xb6\x36\x6e\x08\x06\xf7\x0c\x32\xac\x45\x9c\xa6\xf4\x79\x3c\x86\x54\xef\x52\xbd\xcf\xca\x37\x4e\x0a\xb3\xb1\x6b\x0d\xe4\x5a\xc0\x3b\xa1\xb7\xa2\x4c\xfd\x11\x21\x84\xb8\x36\x0d\xe2\xca\xda\xa9\xd1\x9d\x0d\x6d\x95\xd8\xd6\x53\xdb\x7a\x22\xbe\x1a\xbb\xe2\xa9\x17\xbf\x42\x5f\x3c\xa2\x92\x5f\xdd\xa6\x19\x88\x96\xfa\x2f\xf1\xdd\x6d\x69\x32\x1c\xd5\x41\xc3\xbc\x38\x78\x8a\x48\x32\x72\x7d\x8d\x99\x24\xaf\x71\x54\xaa\xc2\x08\x2a\x93\x11\x37\x50\x5e\xa8\xb6\x28\xc4\x99\x5b\xdf\xb8\x88\x85\xaa\xeb\x90\x02\xaa\x32\x94\x71\x36\x6b\x5f\xc0\x40\x7d\x3b\x71\xdb\x20\xe0\xb4\x66\x17\xf6\x93\x8b\x05\xc3\xdf\xfc\x60\x02\xb3\x28\xde\x0b\x54\xbf\x91\xa6\x72\x06\xe6\xf0\x0a\x2f\x52\x81\xa0\x3f\x6c\x70\x95\x0c\xdf\x14\x6c\x78\x5b\x30\x3c\x24\x54\xf5\x41\x0a\x0a\x87\x25\xc6\x93\xe1\x0d\xe7\xab\xc9\xb3\x67\xad\x33\x90\x2c\x8a\xdb\x67\x59\xb1\x28\xd5\xf1\x72\x2c\x20\x65\x02\xf5\x4f\x95\xed\xba\xc5\xf5\x19\x17\x53\xc9\x01\xda\xab\x4a\xdb\xcd\x49\x1b\x54\x55\xcb\x79\xe3\x3a\xaf\xaf\x8e\x20\x84\x16\xdd\x3f\xfd\xf9\xd3\x0f\x1b\xec\xcc\xfc\xcf\x9f\x3e\x41\xa6\x3e\x37\xd6\xe4\xcf\x9f\x3e\x0d\x3c\xb7\xec\x4f\xad\x69\x0e\x95\xab\x8a\xf4\xd1\x5e\x15\x1c\x53\x4e\xd2\x3c\xbf\x1b\xde\xa4\x7f\x4d\x59\x56\xac\xcb\x61\x24\xc6\xa3\xe7\x3f\xcc\x8b\x62\x15\x0d\xaf\x30\xff\x8a\x31\x1d\xaa\x78\x62\xca\xa3\xfb\x87\x0d\xaf\x86\x29\xcd\x86\x8b\x1b\x92\x67\xe6\x1b\xab\x92\xe1\xdb\xe5\xf0\xae\x58\x0f\xbf\xa6\x94\x37\x0b\x87\xbc\x18\x5e\xe1\x7a\xd7\xbe\xde\x84\xa0\x92\x7a\x5f\xe1\x70\x95\xe3\xb4\xc4\xc3\xc5\x4d\x4a\xaf\xf1\xf0\xcf\x9f\xea\xec\x47\x7f\xfe\x24\xc0\xfd\xf9\x93\xb5\xfe\x75\x8b\xf6\x0e\xe3\x33\xc6\x2b\x93\x33\x6c\x98\x2e\x39\x66\x7b\x06\xa2\x47\x40\xb8\xee\xb5\xb6\x14\x76\xfb\xfd\x04\x2a\x0f\xeb\xad\x19\x83\xf2\x80\x6d\x32\x40\xae\x07\x10\xaf\x71\x47\x32\x7a\x9a\x05\x13\xcc\xe3\x68\xa4\xdc\x2f\x05\xc3\xc8\x46\x23\x66\x4e\xd6\x68\x44\x8d\xc2\x32\x49\x12\x22\x35\x96\xa6\x2c\xfe\xf4\xc3\x86\x56\x13\x31\x91\x4f\xb2\x54\x70\x21\x0d\x32\x4c\xc4\x15\xd6\xb8\xfa\xde\xbe\x3b\xbf\x78\xf9\xee\xd5\xd9\x21\x17\xe8\x3e\x28\x07\x5d\x8c\xae\x08\xfa\x21\x92\x0b\xfd\xb7\x0a\xa0\xcb\xd6\xa2\xb7\x52\xa7\x53\x56\xff\x30\x36\x43\xaf\xb4\xb2\x12\x2d\xf5\x07\xd4\xb4\xd5\x20\xcb\x78\x1d\x63\xb0\xdd\xf2\xd1\xc8\x7a\x09\x8e\x61\xa1\x72\xe2\xc4\x9e\x6c\x79\xa0\x09\xe7\x32\x8e\xdb\x96\xb2\x7c\x56\xce\x03\xef\x04\x9e\xa8\xa7\x04\x80\xb2\x42\xd3\x18\xa2\x72\xb2\x22\xe9\x9a\xe2\x05\x3e\x2b\x55\xb8\xf8\xd4\x7d\x61\x18\x7e\xb1\xc4\xfc\x83\x39\x20\xef\x97\x31\x87\x8b\xfa\xc0\x00\xc8\xab\x0a\x7a\xfa\xc2\x43\x26\x2c\x9b\x04\x67\x8d\xbd\x59\xd7\x06\x0e\x58\x4f\x5b\x5e\x14\x1c\x40\xec\xcf\xd2\xb1\xa4\x70\xa6\x8a\xfd\xf9\xb9\x2f\xa6\x8e\x49\x62\x98\xb9\x93\xc4\x55\xe5\xf2\xf6\x06\x21\xb4\x42\xc4\xf9\xa9\x8f\xfc\x9d\x11\xd8\x94\xae\x96\xa4\xd4\x96\xbe\x62\xe6\x97\x06\x23\xad\xfe\xd8\xd5\x66\xfa\x77\xb3\x9e\x72\x97\x44\x5d\xca\x4f\x8c\x7a\x60\x7f\x4b\xde\x6c\x29\xc8\xc1\xfe\x66\xac\xd9\xac\x96\xf9\xef\x6f\x4c\x9b\x8d\x6f\x77\x89\xbd\x34\x84\x96\x68\x4c\xb7\xbd\x0e\x48\xb8\x74\x13\xf3\xc8\x35\x6b\xa2\xe5\x71\xa1\xaa\xae\x5a\x44\xaf\x83\x94\xf1\x85\xea\xd6\x8a\x12\x55\xb3\x08\x8a\xc4\x74\xe5\x5a\x5e\xa6\x43\xef\xd6\x9a\xb1\xb5\x13\x5c\xe2\x08\x8f\x46\x71\x2d\x9e\x3a\x72\x62\xf3\xc4\xd6\xca\xa6\xfe\xba\xdd\x1e\xc5\x56\x56\x43\xe8\x50\x9c\xa8\x50\x6b\x73\x85\x03\x7b\xdf\x5d\x37\x30\x1b\x20\x64\x6c\x64\x6a\x0c\x07\x95\x40\xd0\x05\xcc\x06\x21\x1c\xce\x61\x03\xd1\x17\xc1\xd3\x90\xb5\xaa\xe9\xd0\x85\xe1\xc3\x93\xd9\x52\xff\x61\xea\x9c\x3c\x98\x37\x5f\xad\x0b\xb7\x10\x6e\xa4\x10\xce\xb1\x86\x5d\xa4\x79\x7e\xbe\x5e\x61\x76\x2e\x0a\x34\xe7\xea\x7f\xf4\xa9\x0d\x74\x76\xce\xd0\x14\xf3\xa9\x25\xe2\x13\x3b\xdf\x46\x90\x90\x38\xbb\xd1\x41\x05\x8d\xa2\x2f\xd8\xbc\x29\x8d\x6f\xb5\x36\x82\xbb\x60\xeb\xa6\x1c\xbe\xd9\xba\x02\xd6\x1e\x44\x89\x06\xc5\xbc\xa4\x38\x8d\x2c\x5e\x9b\x4b\x74\xbb\x75\xca\xf4\x2d\x66\x0b\x07\xae\x56\x15\x6c\xcc\xb5\x64\xa8\xb3\x7c\x55\xeb\x71\x29\x72\x77\x84\x90\x24\xa9\x72\x0b\xd4\x1f\xb2\x16\x6c\xd8\xf4\xe0\x06\xed\xb7\xb6\x3f\x37\x72\x1f\x0e\x92\x36\x7d\x87\x9c\xa9\x07\x03\x51\x0b\x39\xbe\x2b\x50\xed\xce\xc6\xb2\x08\xd3\x2f\x84\x15\x54\xac\xc7\x63\x09\xbe\x1e\x29\x68\x2c\x4c\x61\xf9\xfd\x6c\x54\x53\x5f\x86\x42\x0e\xa7\x79\x43\x9c\xd6\xe9\xc9\xa9\x91\x9a\x94\xaf\x71\xc9\x59\x71\x27\xbd\xff\x25\x4d\x50\x6f\x12\x60\xf1\x9e\xe1\x6b\x52\x72\xcc\x64\x45\x05\xc8\xad\x08\xeb\x50\x0e\xb5\xa7\x99\x71\x94\x8b\xf8\x0d\x1e\x2a\x92\x2d\x9e\x55\x39\xf9\x82\xcb\x61\x41\xe5\xc3\x3e\x53\x1d\xe3\x6c\x58\xb0\xe1\x9a\x32\x4c\x33\x2c\x85\x0d\x6d\xdf\xba\xb2\x33\x0a\x82\x4c\x76\x73\xd9\xed\x1e\xdb\xf2\x8c\xa5\xc1\x38\xb7\x0d\xff\xce\xda\x8f\xd6\xe4\x6d\x24\x5a\x26\x25\xd0\xe2\xee\x25\xbb\x2e\xa7\xb3\x24\x49\x1a\xdf\xa4\x85\xf9\x7c\x82\x61\x81\x6a\xd9\xbe\x79\x89\x19\xa3\x58\x22\x81\x5a\x5e\x53\xc6\xfa\x0c\x78\xaa\xca\xf8\x41\xc1\x10\x66\xe3\x1e\x9b\x37\x1a\x15\x36\x77\x40\x23\xaf\xa9\x7d\xca\x16\x00\x16\x55\x70\x88\xcd\xb4\xbe\xcc\x7b\x52\xea\xac\x12\x52\xc2\x23\x13\x4b\xe0\x3a\xb1\x84\xca\x3c\x10\x8a\xd5\x1b\x50\xca\xda\x70\x9e\xcd\x12\x81\x9f\x98\x7e\x99\x90\xe4\xec\x97\x9f\xce\x3e\x5e\x9e\xbd\xfb\xe3\xdb\x8f\xef\xdf\xfd\x72\xf6\xee\xc2\xd5\x55\xc8\x3f\x2b\xe0\xe5\xb2\xe0\x1d\x7a\x89\xe6\x57\x81\x35\x72\xdf\x34\xce\xb8\x72\xc7\x45\x5e\x50\x1c\x3b\xcf\x81\x7a\x87\x51\x60\xd7\xb7\xdb\xd9\x5c\xed\x3c\xe4\x95\x69\xec\x2e\x9f\x76\xbc\xd4\xee\xad\x81\x44\x06\x9f\x7e\x27\x56\x6c\xa2\x85\x3d\x52\x62\xf4\xe2\x93\x75\x30\xce\x61\x7a\x2f\xf1\x77\xee\x30\x04\xbb\x20\x34\x19\x09\xb7\x5d\xd1\x14\x7f\x0f\x02\x74\xc8\x57\xad\xe4\xbb\x9d\xc7\xb5\x56\x5f\xdb\xe3\xbe\xbf\xfa\x8b\xd1\x03\x36\xa0\xaa\x1c\x5c\x9e\xc9\x79\xb8\xa2\x41\xb4\x0f\xac\xf8\x46\xfc\x16\x3b\xb0\x5b\x19\xb4\x5b\x4b\xa7\xf7\x5f\x29\xf6\xc9\x1a\x80\xa9\x2e\xd6\xab\xa3\xe6\x17\xbb\x93\x00\xfa\x7d\x15\x5b\x5d\x9a\x0b\xa1\x02\x03\x05\xa0\x34\xf0\x53\x58\x00\xfd\xde\x79\xe4\x63\x95\x9a\x53\xae\x4d\x1c\x52\xf8\x14\x47\x6a\xe0\x1b\x2a\x04\x77\x54\x1a\xf1\x97\x30\x35\xee\x90\x5f\x59\xba\x5a\xe1\xac\x89\x54\x76\x55\x4a\x50\xed\xad\xa3\xc5\x6f\x26\xd8\xce\x50\x10\x73\x57\xde\xb6\x0f\x67\xa4\x2c\x4e\x1a\x3b\xab\x88\x04\x7e\xae\xde\xae\x89\xe8\x06\xcc\xf8\x58\x7e\x13\xa8\xb5\xb9\xc6\xdc\xd8\x50\x69\xbb\x45\x3c\xe3\xf3\x49\x6d\x53\x47\x21\x4f\x6a\x0a\x00\xc4\xe2\xfa\x0d\xb6\x5b\xf9\x2f\x85\xc5\x57\x2a\x38\xd7\x09\x46\x2f\x3e\xe2\x65\x2e\x90\x50\x7f\x8a\x31\x10\x58\xb6\x48\x79\xdc\x2c\xa1\x96\x2f\xb4\x5c\x05\x53\xe6\x86\xca\xca\xd0\x4e\x54\xaf\x55\x3a\x1a\xc5\xd2\x15\x63\x2a\xff\xaf\xdc\x32\x94\x13\x6a\x0a\x26\xa9\xb8\x48\x4a\xcc\x65\xa5\x52\x16\x97\x75\x31\x00\x90\x88\xa1\xb2\xa9\x19\x45\xb0\xe7\x49\x47\xa9\xb2\x53\xac\xa0\x3a\x7f\xe6\xf3\x6b\x5c\x2e\x18\x59\x09\xb4\xf7\xd7\xd1\x40\xe9\xaa\xae\x22\x32\xef\xad\x45\x21\x07\x15\x80\x92\xf9\x96\x79\x99\xeb\x88\xa0\x87\x30\xd5\x2e\x83\xd9\x93\xbd\x0e\x6a\xde\x1e\x40\xeb\xe6\x51\xe8\x56\x08\xa3\x4b\x3f\xb4\x0d\x74\xb5\x6d\x1e\x8b\x24\x2b\xa0\xf6\xa7\xe3\xb8\x95\xe7\x6b\xbb\x1d\x9b\x18\x60\x6e\x0a\xb1\x17\x63\x48\xdd\xb4\x61\x2f\xc6\x90\xb4\xbd\x4e\x30\xdc\x78\x43\x6a\xf7\xe8\x68\xf1\x58\xed\xd2\x4f\xad\x47\x3f\x1b\x8d\x8e\xa8\x56\xdd\x31\x57\x69\xa6\x3d\xfc\x9f\xc7\x63\xc8\xbb\xf4\x84\x04\x38\x62\x0a\xf9\x3c\x4e\x1a\x26\x0a\xe2\x65\xd6\xf8\xa4\x6c\xc4\xaa\x41\x6b\xb5\xfb\x06\xbf\x69\xbc\x33\xfe\x46\x41\x3f\x0e\xc8\xcc\xd1\x57\x4d\xec\x39\x8c\xd5\x6c\xa3\x6f\x95\x94\x30\x99\xba\xde\x78\xa0\x37\x25\xa1\x0a\x57\x29\xaa\xe5\x32\x5d\x07\x9c\x81\x81\xe7\x72\x83\xbc\x5f\xdb\xad\xf4\xf0\xc5\x33\x36\x17\x9b\xa2\x3d\x74\x54\xd4\x63\xe3\x8f\xab\x59\x67\xbd\x1f\xda\x81\xdd\x5e\x5c\x33\x36\x47\x04\xf2\x4a\x8f\x4c\x6c\xba\xf2\x0f\x4c\xef\x75\x32\x77\x6a\x4c\x50\xbb\x42\xcd\x94\xe9\x63\x1c\x00\xe2\xd4\x29\xf6\xf7\x91\x42\xea\x3a\x25\x8d\x46\xf1\x6e\x88\x88\x34\x43\x7b\xc0\x4d\x70\x2e\x8d\x46\x0f\x17\x9f\x43\x9a\xae\xef\x9d\x16\x22\x71\x23\xfd\x46\xc7\x38\x03\x0d\x7b\xe7\xe5\x3a\xad\x04\x9f\xe2\x07\xfe\x2a\x9a\x1f\x52\xd0\x57\xf5\xa5\x8e\x54\xef\xb3\x7f\x98\xd0\x23\x14\xae\xe4\x11\xe2\xfa\x90\x52\x8b\x87\x75\x68\xaa\x70\x26\xb0\x38\x14\x5a\x3d\x29\x28\x0e\x3a\x7a\xe3\xa4\x58\x2e\x5d\xa1\xad\xd7\xe6\xe0\x26\x69\xa6\x18\x52\x63\x2b\xd8\x01\x80\xe1\xdb\xe2\x0b\xf6\x6a\xca\xa8\x29\x7c\x77\x70\x95\x42\x07\x57\xc9\xf0\x8a\xe1\x45\xca\xf1\x07\xb5\x01\x6a\xb9\xbc\x56\xbe\x9e\x3e\xd5\x7e\x7b\xc3\x34\xcb\x04\xb9\x2c\x87\xe4\x56\xa0\x81\x54\x4e\x0f\xf5\x36\xb6\xe3\x99\x0f\x6f\x25\xe0\xe1\x6f\x7e\xd8\xe0\xea\x37\x43\x7e\x93\xf2\xe1\x4d\x5a\x0e\xc5\xe0\xb3\x4f\x72\x28\x12\xac\x1b\xe2\xa5\x79\xf3\x21\xec\xd2\x80\x3a\x22\x8b\xfb\xf1\xc8\xb0\x0c\xd4\xbf\xb1\x07\x01\x70\xb4\x65\xd5\xc3\xea\xb8\x15\x1b\x2f\x6a\x89\x7d\x43\xb7\x9e\x1d\x26\x3e\xb7\x78\xe7\x36\x66\x40\x34\xfc\xc2\xc2\x6f\x05\x8c\xea\x13\x1b\xa2\x33\x09\xa3\x57\xb5\xf6\x6c\xc9\x65\x10\xef\x56\x8c\x08\x16\xcc\x26\x10\x8a\x18\x31\x63\xed\x24\x0b\x9e\x77\xfd\xc2\x09\x8e\xbb\x2b\x78\x44\x4f\x82\x22\x08\xd8\xc9\xf2\x3e\x69\xbe\xfa\xa6\xdb\xea\xe7\x59\x7f\x0f\x3a\x22\x86\xfe\xa6\x60\xf2\x36\xd8\x17\xc7\x48\xd7\x95\x47\x15\xf9\xbc\xb3\x53\x9b\x68\x3b\x7e\x5b\xdf\xaa\x53\x9a\x63\xf7\x4f\xb3\x4a\xd8\x39\x68\x46\x23\x61\x0d\xa4\xdc\x89\x80\x52\xc1\xf8\xce\xf5\xb3\xf0\xf0\x90\x87\xf0\x90\xa9\xb8\xc7\x1d\xb8\x68\xc4\x75\xb1\x0f\x1f\x36\xb0\x93\x41\x1e\xc2\x4e\x1d\xa6\x57\x87\xb6\xa1\xa0\xb3\x85\x8a\x0f\x4c\x41\x25\x06\xf9\x30\xb8\xdb\x26\x0d\xbb\x16\x52\x26\xbd\x70\x97\x52\x09\x8b\xcd\x3a\x5a\xeb\x70\x13\x17\x71\x49\x9d\x14\xd6\x19\xc9\x94\x49\x1d\x3a\xd2\xf9\xb6\xd6\x25\x2e\x5f\xbf\xff\x45\x3b\x13\x98\xaf\x0c\xff\xe7\x9a\x30\x5c\xbe\xca\x71\x4a\xd7\x2b\x74\x74\xba\x63\x4f\x4c\x2f\x36\x3e\x71\xdd\x89\x72\x31\x08\xaf\x14\xdc\xbf\x29\xa0\x82\xa1\x1c\x2a\xf5\xac\x5b\x57\x97\xce\xe4\xd2\x98\xd5\x18\xee\x6a\x13\xfb\x0b\x67\x96\x0d\x84\x13\xb8\x38\x80\x6c\xd6\xa3\xfa\x77\x17\xac\x49\x1c\x5e\x57\x7f\x64\x26\x40\x7d\x60\x2c\x5d\xe8\xa6\x2b\x98\xac\x01\xde\xc4\xbd\xc1\x05\x6e\xef\xce\xc1\xfa\xdb\x68\x32\x15\x34\x06\xaf\x63\x4a\x99\xa1\x2f\x97\x5d\xe0\x3c\x3c\xb4\x51\x34\x8b\xde\xf8\x0e\x19\xfa\xa9\x28\x44\xa7\x3b\x31\xff\x33\xbe\xab\xd3\x71\xe2\x8c\x2c\x5c\x8f\x92\xc0\x4e\xb2\x29\x93\x8e\x79\x08\x19\xaf\x2e\xad\x1a\x65\x3f\x15\x6b\x9a\xed\xc7\x79\x53\xfd\x0d\x45\x36\xac\x79\xd3\x17\x54\x8f\xd1\x8e\x10\x58\xf7\x86\xd6\x18\x63\x0a\x80\x1b\xc7\x6b\xf7\xc9\x80\x47\xe3\x0a\x36\x86\x11\x83\xed\xb6\xed\xb2\x11\x1c\x07\xac\x69\x42\xdd\x1e\x04\x97\x61\xbc\x1b\xf7\xbc\xda\x5a\x4b\x5e\x83\x1c\x8d\xf4\x80\x14\xfa\x7d\xf7\x98\xde\x58\x2c\xda\x73\xe3\xdf\xcf\x9c\xfc\x00\xfd\xec\xa3\x5d\xf4\x7e\x54\x22\x28\x63\xc1\x86\x79\x67\xd0\x63\xe6\x60\xa0\xe2\x10\x71\x4f\x18\x7e\x40\x50\x22\xd7\xfc\xb0\x7f\x24\x83\x07\xf6\xac\x7f\x34\x13\xfc\xce\x06\x32\xac\x28\xdc\xf8\xfe\xf1\xd7\x98\x4f\x02\xe6\x73\x72\x69\xab\x7d\xd0\x3e\xd8\x35\xec\x05\x95\x79\xf6\x2f\x02\xba\xb4\xe5\x3f\x18\x13\xec\xd6\xed\x79\x74\xeb\x48\x68\x5a\x3b\x7f\x92\xe6\x79\xef\xcd\x36\x41\xd4\x1e\x5c\x50\xab\xc6\xa2\xa2\xa7\x21\xd6\x8e\xd8\x65\x45\x69\xcc\x98\x86\x33\x84\x67\xe3\xb9\x96\x4e\xa9\xbc\x00\x56\xc7\x0e\xa5\x90\xb3\x15\x8f\x0d\x18\x2b\x7c\x35\x67\xd7\x09\x6e\xc6\xa0\xa7\x97\xff\x4d\x5d\xf1\x37\x43\x8e\x6f\x57\xe2\x01\x34\x54\xd3\x97\x1a\x7a\x95\xaa\x23\x8b\xaa\x39\xd0\xf1\xbf\x14\xf5\x53\x1d\x26\xaa\x66\xcc\x40\xff\xf3\x67\xb6\xc5\xfa\xd6\x3d\xe8\x9e\xb8\x0b\x58\x33\xfa\x9d\xeb\x64\x07\x51\xff\x25\xf5\x01\xf7\xd8\x5a\x0d\xa0\x7b\x6f\x1f\x76\xf9\x9a\x56\x3d\x0f\x9d\xe8\xbd\x3d\x76\x1e\x1c\x7b\xdd\xeb\x0c\xc3\x24\x49\xf8\xdc\x71\x9a\xa9\xf5\xeb\x32\x58\xbe\x33\x4b\xbe\x7b\x96\x32\xb1\xcb\x81\x5a\x95\x07\x0e\x7b\xd2\xef\xd2\xac\xb9\x88\x13\x1d\x7b\xf4\xc4\x46\x60\xec\xf7\x6e\xff\xde\x5c\xff\x0f\xfa\xd8\xef\x79\xcb\xf5\x74\x3d\x74\xcd\xd0\xf7\x04\x82\x81\x8b\x47\xbb\xf8\xb4\x34\xaf\xf7\xdd\xa7\xeb\x3f\xfe\xf5\xb7\x13\xba\x67\x0e\x7a\x50\x17\x5e\xcb\x9d\xfd\xf0\xfe\x2c\x01\x93\xe4\x73\x2f\xb4\x7f\x53\x88\x71\x00\x48\xd9\x62\xef\x6a\xbc\xb5\x87\xb1\x17\x68\xdf\x50\x62\x27\x74\x79\x45\xf6\x02\x4a\x92\x34\xcf\xf7\xc1\x3a\xc7\x9c\x4b\xef\xb7\xfe\x20\x75\x93\x9d\x90\x6f\xd2\xf2\xa6\x37\x4c\x51\x79\x2f\xb4\x43\x07\xea\xb4\xd9\x09\x9b\xa5\xbd\x77\x89\x24\xa2\xf2\x4e\x68\xae\x8c\xb0\x27\xd4\xc2\x13\x2c\xf6\x81\x2e\x45\x08\x87\x42\x97\x8d\xfa\x40\x3f\xf0\x0c\x17\x4d\xd9\xe5\xce\x3e\x6c\x76\xc8\x9e\xd0\xd3\x3a\x9f\xe4\x6e\x4c\xf6\x02\x39\xf7\x04\x5e\x36\x42\xd8\xef\xec\x41\xc7\x35\xee\x0d\x5a\xd7\xdf\x83\x7b\x26\x2e\x7e\x6f\xb0\x75\x93\xbd\x34\xa8\x27\xcc\xbc\xdf\xe3\xe9\x10\x4a\xb9\xae\xe9\xfa\x6e\x6c\xd0\x31\x07\x7b\x82\x5d\xd8\x20\x85\xbd\xa0\x1e\x32\xe2\x85\x1f\xff\x70\x27\x7c\x27\xfa\x61\x6f\xe8\x4e\x9b\xbe\xb0\x0f\x1b\x7e\xb3\xe1\xce\x5e\x6c\xc4\xcb\xde\xe0\x6d\x8b\x9d\x70\xfd\x28\x8f\xbd\x81\xfb\xcd\x0e\xe8\xe1\xb0\x25\x0a\xb4\xdd\x7d\x3a\xfd\xe8\x93\xbd\xfb\x69\xb4\x3b\xa4\x8f\xc3\x26\x14\x6a\x5c\x85\x93\x85\xac\xee\x9e\x89\xff\x85\x5f\x28\xba\xf0\x71\x72\x74\x99\x07\x94\x03\x55\x39\x12\x86\xdc\xa2\xe8\x3a\xcf\x9d\x3c\xf2\x43\xe9\x5a\x7c\xd4\x8c\xb8\x37\x1a\x59\xb7\x37\x9d\x8a\x31\xc6\x8e\xe4\x56\xcc\x25\x66\xad\xd8\xed\x36\x4c\x70\x11\xee\x9e\xd9\xee\x8d\x67\xe3\x90\x49\x83\xb1\x14\x96\x03\x15\xd2\x3d\x2e\x11\x51\x39\x3c\xdf\x2f\x63\x06\xc0\x0b\x34\x36\x55\x8b\x59\x39\x17\xb5\xfc\xb1\x32\x20\xfb\x4a\x6d\x48\x79\x00\xa9\x0c\x9f\x58\xa2\xd4\x84\x4d\x3c\x39\x29\x5f\xa0\xf1\x73\x90\xce\xca\x39\xc2\xb1\xf8\x47\x0f\xb3\xc2\x79\x89\x87\x64\x19\xb7\xa6\xcb\x00\x10\x30\xe5\x4c\x55\xdd\x81\xa9\xcb\x86\xe6\xd9\x55\x2c\x87\xaf\x53\x8e\x41\x2a\xad\x3d\xc5\x9f\xb1\x14\x8b\x8b\xfb\x23\x06\xa0\x0e\xd4\xc3\x07\x62\x48\xd2\x64\x31\x45\x9b\x0a\x32\xd0\x74\x29\x13\xdc\x94\x63\xdf\xa4\xa2\x27\x31\xc8\xc1\x68\x14\x5d\x5e\x46\xca\x43\x68\x7d\xa5\x62\x4c\xc7\x63\xf8\x23\x18\x8d\xe2\x74\xc6\xe7\x88\x4e\x71\xcc\x66\xdc\x4c\x69\x22\xfe\x06\x95\x58\x4b\xa2\x62\x81\x31\x00\x0b\xf5\x57\x5a\xfb\x78\xa6\x95\x0c\xe5\xcd\xa6\xb3\xb9\xca\x75\x67\xff\x02\x95\x78\x97\x77\xa0\x77\x33\x3b\xd5\x23\xc9\x18\x94\x58\xe1\x17\xf2\x8d\x50\xc7\x9a\x7a\x75\x27\x07\xd8\x79\xfe\x76\x88\x08\xec\xe9\xec\x73\x24\xbf\x5f\xc2\xdd\xd9\x40\x0d\xa2\xe7\xb3\x53\xaf\xc6\x4e\xf2\xf6\xca\x6e\x4a\xcf\x17\x56\x0d\xb4\xbd\x8a\x59\xca\xd3\x93\xdb\x22\xc3\xf9\xc9\x92\xa5\xd7\xd2\xc9\xec\x59\x2a\xce\xd9\x33\xf3\x3b\xb4\xbc\x3b\x9a\x49\xa3\x2a\x19\x7b\x7a\x57\xdd\x1a\xf8\xae\x5a\x6b\x4e\xf2\x67\xe6\xe8\x9d\x14\xcb\x13\x71\x6e\x0e\x0b\xf0\xcf\xc5\x21\x31\xd1\xfd\x53\xe4\x05\xb4\x2e\xbe\x52\xcc\x22\x00\x4b\xe7\x73\x0a\xa3\x92\x17\x0c\x47\x00\xe6\x7e\x6d\xd9\x37\x80\xeb\x06\x0c\xe5\xcd\x11\x01\xb8\xf0\x0b\xa8\xe0\x99\xeb\x40\x51\xc9\x6d\xba\x8a\x63\x0a\x33\x80\x5e\x6c\x02\x70\x05\x9d\x93\x4a\x11\x52\xbe\xd1\xf3\x07\x31\x05\x60\x53\x20\x15\x33\x42\xe7\xcf\x23\x54\x49\x73\x7e\x11\x4b\xf5\xa6\x60\x20\x2e\x80\x0a\x91\xc3\xb2\xd7\x29\x4f\x6b\x2f\x06\x30\xc0\x32\x7d\xbc\x74\x3c\x30\x30\x65\x11\x88\x0b\x98\xc2\x85\xa6\x85\x05\xe2\xb3\x6c\x0e\x8b\x29\x99\x36\x6b\x0b\x80\xa2\x32\x05\x13\xeb\xc2\xe0\x78\x96\xc8\x82\x42\x8d\x4b\x9d\xd9\x7a\xe8\x25\xcc\x45\x1f\x70\xed\x98\x55\x16\xf7\x0b\x24\x1f\x10\x43\x12\x54\x93\x6f\xed\x90\xb1\x11\xeb\xa8\x08\x9b\xde\x13\xf5\xe3\x92\x16\xec\x56\xda\x85\x8a\xd9\xb8\xa6\x25\xca\x0e\xb8\x11\xe5\x36\x92\x5e\x1b\x94\x47\x00\xaa\xec\xf4\xf0\x52\x4d\xed\x9c\xa6\xab\xf2\xa6\x68\xf8\x72\xcb\x6d\x95\x81\x50\x5b\xd5\x44\xd3\x65\xbe\x2e\x6f\x5e\xc9\x70\x22\xd9\x4b\xce\x19\xb9\x5a\x73\x6c\x63\xf2\xe8\xb6\x1b\x9c\x74\x56\xac\x04\x14\xf1\x5c\x2b\x6e\x6f\x09\xaf\x6d\xb5\x95\xc6\xb8\xed\xcb\x2a\x9e\x48\x67\xe9\xe2\xc6\x26\x79\xe2\x89\xdb\x7c\x34\x92\x46\xb1\x12\x6a\x9a\xa5\x2b\x8e\xd9\x6b\x92\xf9\xa1\x7f\xf6\xc3\xe6\x0a\x6e\x1b\x80\x80\x7b\x93\x96\xaf\x09\xe3\x77\xf5\x2c\x26\x0d\x9f\xd6\xe8\x5f\x71\xba\xb8\x49\xda\x15\x23\x18\x5d\x16\x8c\x5c\x13\x9a\xe6\xe7\xca\x34\x39\x14\xd7\xa1\x6b\x90\x5a\x75\x4f\xca\x97\xf4\x2e\x8e\x02\xe0\x25\xfd\x63\x85\x52\x4c\xb7\xb7\xa3\x7b\xe2\x4a\x01\x12\x47\xed\xb6\x11\xa8\x60\x89\x19\xd1\xe9\xe9\xbd\x31\x9a\x56\xb6\x5c\x54\x66\x78\x95\xa7\x0b\xfc\x4a\x61\x99\xef\x5a\xd8\x8d\x8a\x05\xd2\xd8\x4a\x34\xcf\x83\x21\x3e\xe6\xc0\x71\x20\x24\x89\x86\x2c\x41\x16\xa0\x82\x69\x96\x99\xe3\xd8\x8c\x30\x29\xf5\xe8\x7f\x51\x3c\x9e\x18\xd2\x6d\xf1\x05\x77\xd5\x35\x2a\x6e\x5b\xdd\x3f\xe9\x75\xf4\xa2\xe6\xe8\x0d\x75\x65\x6e\x49\x4d\x5d\x5b\xf1\xa5\x0d\x81\x25\xa8\x49\x4d\x62\x0a\xb1\xef\x54\x24\x78\x1b\x3d\x24\x02\x2a\xf8\x95\xe4\xb9\x76\x81\xdc\xbf\x99\x06\x8b\xd5\xc9\xcb\x4c\xb3\xca\x78\x22\x79\x18\xd8\x5d\xbb\xaa\x5c\x55\x46\x20\x33\x53\xaf\x3b\x32\xcc\xb9\xec\xbe\x15\xc3\x29\xb0\x1f\x5e\x49\xef\x29\xab\x24\xef\x2d\xbd\x9b\xac\x07\x5c\x62\x38\x11\xb8\x91\x7b\xad\xe8\xad\x0c\x19\xa9\x32\x5f\x53\xc2\xf7\x6f\xc7\xe5\x0a\xd3\x8c\xd0\x6b\x41\x9d\x8d\x75\x80\xbd\x6c\x6c\xbc\x64\x9f\x2a\xcc\xe6\x02\x0f\xd5\xe9\x68\x52\x97\x00\xc5\xd0\x33\x88\xe5\xf9\x97\xfc\x7d\x9b\x86\x73\xc9\xf8\xcb\xd3\xcc\xd7\x2b\x73\x55\xd8\xa8\x9d\xee\x20\x9d\x74\xee\xed\x42\xec\x39\x9c\xf9\x77\x8f\x1a\xc7\x6d\xfa\x19\x9b\x57\x57\xe3\x74\xf8\xa7\x7e\xb0\x6f\x19\x04\x01\xb0\xc7\x7e\xec\xdc\x64\x0c\x46\xea\x21\x14\x01\xc8\xbb\xd7\xb9\x6a\x5c\x8e\xd2\x70\x68\xcf\x7d\xc7\x0b\x35\xf6\x9d\xb7\x5b\xf3\xce\xd2\x06\x65\xee\xd2\x4e\xf6\x4e\xce\xeb\x2d\x74\x61\x89\x7e\x7a\xdc\x36\xb3\x79\xbf\x7b\x65\x7c\x84\x50\xdd\x36\x65\x26\x75\x9d\x19\x42\x8b\x53\x68\xc0\x04\x7b\xae\x97\x12\x73\x75\x24\xcb\x78\x3f\xa4\xce\x4b\xc5\x59\x7f\x49\x4b\xf4\x45\xf2\x9a\x64\x6a\x23\x76\x1d\xb8\x41\x30\x03\x8c\x25\xd4\x6d\x12\xae\x79\xd8\xe6\xe7\xd0\xd5\xaa\x78\x47\x43\xa4\x5e\x93\x4c\xd6\x50\x39\x61\xb8\xcc\x13\xd3\xac\xf0\x11\x97\x98\x03\x13\x75\x5b\x7b\x42\x9e\x09\xda\x52\xba\xfb\xf2\x49\x0e\x2f\xfe\x61\x13\x1c\x76\x42\x32\x71\xad\x7f\xf2\xa9\x71\x40\x7d\x1e\xa6\xc6\x0e\xeb\xd1\xf3\x91\x63\x1f\x2e\x07\x98\x20\xd8\x2b\x9e\xa2\xe8\xe4\x76\x79\x12\x1d\x4b\x19\x0c\x1f\x8d\x62\x7a\x8c\xa2\x1f\x22\x79\x95\x8f\x46\x2c\x59\x15\xf9\xdd\x6d\xc1\x56\x37\x64\x01\x36\xba\x2c\x66\x89\xb8\x19\xff\x80\xef\xb6\x5b\x7d\x47\x1a\x57\x45\x5a\x05\x92\x99\x1d\x9d\xc2\x02\x1d\x9d\x1a\x47\x4f\xc5\x17\x63\x48\x4a\xbb\x5d\xe2\xb1\x58\x3f\x33\xc4\x2f\xc3\x31\x33\xc4\xb6\xdb\x4d\x67\x86\xa1\x8d\xf2\x19\xdd\x68\x09\x0e\x92\x26\x15\xed\x17\x09\x77\x93\x79\xa5\x88\x4c\xcb\xe6\x0b\xc5\xf4\xad\xe9\xa0\x1c\xb9\xdc\xd5\x02\x4c\x3a\x2b\x3b\xf5\x00\x4c\x25\xa5\x8e\x31\x34\xf9\x31\x60\xde\x6b\x38\x64\x1a\x97\x28\x3f\x60\x3c\xb0\x59\xbd\x6c\x54\x97\x22\xdc\x18\xc3\x12\xa6\xaa\x0d\x85\x0c\x16\x00\x4c\x76\x75\xe4\xcd\x65\x47\x0f\x21\xe0\x00\x40\xbf\xbe\xc5\xce\x19\x9e\xa3\xb2\xaa\x40\x72\x8b\x79\x1a\xa7\xc0\x4f\xe3\xc6\x21\x13\x4f\x61\xfb\xfc\x51\x5f\x04\x2e\xdc\xeb\x59\x66\x7a\xed\x30\xc5\x8f\x59\x1c\xd5\xaf\x7c\x0c\x65\x06\xec\x8d\xe0\xb2\xa0\x4e\x4b\xec\x2e\x62\x18\x08\xdf\x6e\x63\x99\xd3\x0c\x12\x17\xdc\x89\xa4\x7c\x12\xa8\x04\xa7\xde\x69\x38\x49\x03\x90\x5a\x89\x08\xf0\x34\xe6\x08\x43\x13\x98\x16\x4c\x6c\x27\x16\x45\x44\x5f\xa6\x0b\xd1\x81\xe4\x66\x8e\x4e\xbd\x51\xcb\x87\x74\x20\x3f\xf3\x5e\x6e\x64\x17\x92\x7a\xbb\x7a\x29\x09\x5c\x05\xf4\x6e\x6e\xea\x13\x2b\xfb\x96\xdb\x90\x30\x9c\x66\xef\x69\x2e\xee\x83\x9e\x34\x4f\x26\x3a\x0d\x13\xbb\x67\x8a\x37\xf7\x3e\xc9\xe6\xfe\x27\x63\xde\xd1\x68\x6b\x2e\x2c\x56\x3e\xfb\x4b\xe9\x18\xa5\xec\xe2\x61\x77\xd6\x51\x6b\x21\xcb\xee\x47\x93\x1f\x32\xee\x4e\x67\x83\x73\xb5\x66\x0f\x28\xe0\xfb\x45\x2d\xf9\xc1\xd2\xbd\x6e\x88\xff\x7e\xfe\xfe\xdd\xb9\xdd\x9f\xde\x9a\xf9\x1a\xb4\x8d\xc1\x47\x93\xb7\x2e\xea\x3a\x21\x42\xd6\x88\x26\x1f\x6b\xec\xb5\x05\x9a\x7b\xd0\x7e\xdf\x6b\xb8\x11\x8f\x7f\x83\xc9\x7f\xc0\x77\xb5\xdc\xc1\x6e\x28\x6a\xfc\xde\x6e\xf5\xcc\x8c\x60\xb8\x9e\xab\x74\x2c\x6e\x54\x07\xf5\xa3\x4d\x1c\x59\xbf\x3b\x4d\x50\x75\x9f\xcd\xb1\x70\x93\xec\x6f\xa8\x13\x53\xbb\x24\x9b\x83\x01\x1b\x8d\xb0\x94\xac\x54\x36\x5e\x01\x66\x4d\xd1\x84\x3a\xb7\xd0\x86\xfb\xb0\x13\x94\x05\x08\xcb\x22\x93\x57\x42\xbf\x13\xa4\xcf\x90\x04\x19\x88\x3c\x2c\x8b\x65\x61\xd7\x23\xfd\xb0\xb5\x6b\x54\x99\xe1\xb9\x1c\x92\x73\x37\xf1\x87\x05\x6f\x3c\x18\x1a\x7d\x06\xe4\x5a\xa4\x7c\x87\xbf\x0a\x16\x06\x4f\x63\x9c\x30\x6d\xe0\x56\xde\x90\x55\xa9\xad\xf0\x55\xcc\xb9\x8f\x6e\x89\x8c\x13\x94\x90\xcc\xb8\x8b\x48\x32\xf6\x27\x19\x2c\x44\xbe\x30\x14\x5a\xbe\xd5\x41\x5b\x24\xf5\x90\xae\x1c\xa2\x8d\x1a\xd8\x22\x27\x98\x72\xeb\xc9\x44\x32\x24\xcd\x92\x17\x05\x66\x0b\xfc\x36\x03\xb1\xa8\x0a\x00\x94\x5e\x95\x96\x69\x84\x21\x1c\x52\x08\xa6\xc5\x6f\xcc\x93\xbe\xcd\xf8\x1c\x00\xed\x87\x12\x6e\x65\xb2\x00\x39\xad\x80\x39\x7c\x36\x2c\x91\x7a\x70\xe9\xf8\x1f\x3e\xa7\xa6\x4f\x99\xaa\x28\x68\xa5\x49\x36\x4f\xe8\x9b\x9c\x5c\xdf\xf0\x97\x8d\xc1\x5f\x3a\xb3\x31\xa1\x79\x9c\x6f\x8e\x93\x55\x00\x84\x5b\xba\x5e\x65\x29\xc7\x81\xc7\x20\x94\xa4\xa9\x16\xd7\x32\x5c\xac\x30\x8d\x75\xe2\x85\x9a\x62\xbc\x31\x6e\x31\x36\x75\xb4\xbd\x8f\x91\xde\x14\x4c\xb9\x8c\xb7\xf8\x2a\x5d\xdc\xc8\x30\xd9\xef\xd9\x2b\x07\xca\x5b\x5b\x21\xb6\x4c\x6f\x36\xe1\x30\x27\xd9\x84\x55\x00\xaa\xf8\xa6\x26\x05\x06\x91\x8e\x58\x4d\x61\x96\x89\x09\xc4\x06\x1b\x6f\xd5\x9b\x9d\xab\x76\x75\x8f\x6f\x0a\xf6\x0e\x7f\x55\xe3\x30\xbd\x0b\x8e\x02\x99\xb5\xf3\xef\xfb\x8f\xb8\x2c\xd6\x6c\x81\x63\x0e\x2a\x96\x28\xc3\x49\x15\x8e\x03\x15\xb5\x60\xfb\x76\xc5\xef\x20\xf3\x99\x02\x49\x29\x94\xfa\x2e\xc0\x2d\x98\x92\xbc\x48\x33\x2c\x0b\x62\xf5\xea\xa3\x48\x3e\x9d\xf4\x00\x6b\x61\xda\x68\x44\x1b\x42\x7d\x0e\x20\xb5\x81\xa5\x23\xc1\x5f\xdc\x45\xe2\xd3\x65\xcd\x7f\xa0\xa3\x31\xa4\x95\xf3\x84\xd0\xa2\x92\x28\x5d\xad\x72\xb2\x48\xb5\x47\x12\xc2\xdb\x6d\x74\xa2\x67\x13\x39\x62\x93\xa3\x53\x57\x48\x72\xab\xd7\xc4\x41\xe6\xb2\xa9\x9b\xe5\xee\x8b\x98\xa9\xca\x4d\xb1\x63\x1d\xbb\x09\x40\xa6\xce\xaf\x95\x6e\xfc\x62\xce\x3c\x88\x1b\x92\x44\x67\x12\x0c\x4c\x7d\xde\xd1\x44\x36\xc9\x8b\xe2\xf3\x7a\xe5\x08\x72\xd9\x44\x3c\xd9\x06\xcd\x88\x8e\x6c\xca\x26\x71\x47\x03\xcb\xae\x44\x00\xd6\x0d\xb6\xdb\xce\xfa\x66\xdd\x00\x10\xd7\x8d\xa4\x27\x93\xce\x97\xbd\x38\x62\xac\x75\xc4\xfa\x8a\x45\xe3\x31\x2c\x7b\xb1\xa4\x0c\x3b\xd7\x44\x19\x07\xbb\x55\x69\x68\x36\x4b\x82\xf3\xac\x25\x8c\x69\xa7\xa3\x15\x87\xf2\x97\x74\xe5\xed\x89\xa0\x8d\x26\xc4\xa6\x65\x63\x8c\x42\xc3\xd5\x90\x4d\xb1\x12\x20\xc1\xfa\xa5\x01\x26\xa2\x82\x7b\x3d\xd8\x4a\x2c\xf9\x4c\x68\xa6\x2a\x58\x0a\x35\x1a\x59\x18\x96\xec\x45\x40\x3c\x70\x04\xe7\xed\xb0\xd7\x00\x36\xa5\xad\xea\x5c\xc9\x0c\x4b\x32\x89\x64\x7b\x6e\x3a\xea\x16\xd7\xb1\xbc\x8c\x18\xc6\xf2\x6e\x75\xc2\x24\xec\x65\x46\x8c\x73\x18\xf9\x52\xb8\xc8\xd7\xba\x9b\xf4\xf7\x0e\xa9\x1e\x04\x22\xae\x70\xe0\xc9\xaf\x15\x3e\xf3\x19\x9e\x0f\xc2\xd1\x10\x58\x53\x8b\x25\x6e\x54\x71\x7f\xb7\x0a\x62\x60\xd6\x08\x92\x16\xde\x71\x96\xd2\x72\x59\xb0\x5b\x7d\x50\xc9\x32\x16\xd8\x8e\xad\x99\x87\x92\x82\x58\xf3\x92\x6e\x81\x95\xa1\xc1\x1d\x87\x3c\xb2\x3d\x4d\xb4\x4c\xe5\x88\x27\x37\x69\xf9\x51\x86\xaa\x64\xa9\x0a\xbe\x0a\xea\xc8\x32\x38\xb9\x95\xae\xd0\xcf\xfe\xaf\x18\x41\x6c\xb0\x66\xeb\xbf\x2c\xb7\xf2\xff\x20\x9e\x4e\xfe\xfc\x43\x3c\xfb\xbf\x3f\xcc\x8f\x01\x98\xaa\x5f\x89\xf8\xf3\x87\x67\x00\x12\x44\x67\xa7\x73\x58\x20\x3a\xfb\x71\x0e\x53\x44\x67\xbf\x9d\xeb\x98\x6e\x3c\xd1\xa1\xab\xc5\xf4\xbd\x21\x12\x30\x28\x51\x39\x1a\x09\x86\x23\x2d\x4b\x58\xa2\xd2\x57\x5f\x16\xd0\x91\x00\x5d\xdc\xad\x24\x17\x3f\x49\xa1\xe4\x68\x26\x35\x73\x23\x6f\x54\x13\x90\x33\x66\xb0\xb4\x22\x21\x6e\x88\x09\x03\xfd\x15\xfe\xbb\x54\xfd\xfb\xf5\x11\xe2\x45\xf9\x08\xca\x88\x6b\xcc\x5f\x2e\xf8\x3a\xcd\xcd\x69\x17\xeb\x81\xa8\xe0\xda\x1a\xa4\x0a\x11\x88\x5b\x4a\x6e\x19\x15\xa7\xa1\xcb\x46\x29\xc4\x0d\xdd\x52\x23\x2a\x00\x24\xb0\x84\xb9\x3a\x60\x6b\x44\x65\xea\xd4\x1c\xc0\x05\x6a\xb6\x8b\xd7\xb5\x5a\x3b\x5e\x48\xc9\x0a\x4c\xe3\x85\xac\x5c\xc9\x00\x29\x81\x1e\xdc\xd8\x28\xd8\xbd\x51\xab\x1d\x5e\x60\x6e\xa0\xf8\x23\xee\x8a\x08\xb7\xdb\x23\x56\x5b\x75\x19\xaa\x32\xe3\x4d\x79\xe1\x7c\xbb\xc5\x9e\x28\xc8\xf5\xce\xf1\x16\xd3\xcb\xa4\xef\x52\x39\xe2\x26\xbd\x0a\x31\x1e\x1c\xd2\x00\xa3\xc2\x1c\xa1\x39\x4e\x1c\x0f\xe8\x9a\x62\xcb\xcd\xaa\xf9\x8f\x08\x78\x6a\x66\x9c\xd0\x82\x93\xe5\x9d\x41\x19\x2d\xe4\xe6\x8a\xfa\xf8\xc9\xef\xc1\x46\x8c\xd2\xd1\x32\x6c\x6a\xea\x28\x53\xfb\x7c\x49\xd9\xb0\x44\x2c\x51\x4f\x57\x7d\xf0\xd4\x00\x5f\x49\x91\xbf\x54\x66\xb9\x7a\x2d\xad\x09\xb0\xd9\x50\x11\x42\x7c\x3a\x9e\x9c\x1a\x2d\x52\x9d\xce\xdd\x9b\x1c\x43\xfe\xab\x48\x1a\x59\x0d\xb0\xbc\xd8\xec\xcd\x23\x49\x32\x13\xd4\x55\x8a\x84\xa4\xfa\xa9\xa9\x19\xc0\x82\xcc\x6a\x06\x0e\xd7\x2f\x17\xad\xe9\xf6\xf7\xae\x2e\xf6\x2e\x53\x49\x2f\xda\x0a\x55\xb6\x53\x81\x43\x02\x97\xbf\xe0\x26\xcc\x9b\xa4\xa9\xe0\x31\xf5\x6b\x15\x8d\x2e\x73\xb7\x00\x37\x1f\x8b\x26\x3c\x45\x48\xb5\x13\x1a\xc1\x42\xc2\xfc\x93\xa0\xef\x7f\x91\x99\x6d\xe2\x0e\xcd\x81\xda\x16\x0d\x02\x72\xa4\x8e\x5b\x0b\x69\xa5\x10\x7e\x97\x9e\x01\x46\x46\xbd\xa0\xea\x44\x51\x25\x65\x6e\x2e\x9f\x13\x46\xe3\xfd\x8c\xcf\x6c\x7e\x3f\x9e\x47\x76\x24\xe6\x23\xed\xfb\x78\x90\x55\x71\x54\x21\x65\xcf\x2b\xa0\xd3\x92\x2e\x58\xfb\x0b\x66\x25\xd9\x27\xe3\xeb\x67\xe3\xd5\x34\x36\xdb\x55\xd7\xde\xa5\x7d\x81\x07\x1a\x18\xe1\x71\xcf\x66\x3d\x6a\x3b\x5a\xa4\x47\x0d\xfc\xdd\xb8\x20\x8c\x48\x4e\x61\x9a\xcc\x7a\xb9\x4a\x17\xd8\x4a\x62\xfe\x78\xf6\xf1\xfc\xed\xfb\x77\x13\xfb\xf4\x86\x56\xe3\xc3\x5a\x9f\xa4\x10\x7e\x42\x5b\xdf\x2f\x2c\xf7\x42\xc2\x6d\xea\x0a\xf6\xe1\x0a\x1b\x05\xf6\xcd\x0d\xcd\x9a\x4d\x4a\x2b\x47\x87\x9e\x1a\xc0\x29\x90\xbf\x95\x8e\x73\x52\x2a\xd1\x3e\xf4\x0e\x9b\x53\xf7\xbd\x92\x94\x6b\x51\x63\x4e\xae\x58\xca\x08\x2e\x47\xa3\xc6\x87\x9a\x65\x52\x42\xd6\xa1\x7d\xcb\x44\x30\x4f\xf4\x82\xa9\xd8\x02\x6b\x94\x3b\xa7\x68\xdd\xf3\x14\x79\x22\xeb\x0e\x21\x7b\x4b\x7c\xbe\x9f\xc3\x0a\xdb\x41\x7e\xb7\x80\xfd\x10\x83\xcd\x43\x8e\xe9\x53\xc8\xe3\x6b\x4d\x4c\x2d\x42\x2a\x51\xeb\x90\x08\x5a\x9b\xbb\xb1\xa0\x07\xe1\x86\xb9\x0e\xfc\xb4\x76\xe2\xe6\xd7\xe5\x5d\xb1\x8a\xb0\xb5\xae\x58\xba\x5c\x66\xe0\x96\xd3\xc1\xd7\x55\xb4\x0f\x2b\x4c\xed\xac\x68\x64\x6d\x3d\xaa\x2e\xfb\x57\x91\x34\x42\x5c\x3c\xfa\x21\xe8\x88\x32\xeb\x04\x49\xf2\xcd\x26\x39\x48\x25\x1f\xc5\x49\x4e\x32\x30\x70\x9f\x95\xcc\x7f\x56\x0a\x1e\xc6\xb9\xa0\xb4\x9c\xd6\xeb\x54\x5d\x56\x58\x5c\x56\xb9\x0e\xb8\x2b\xef\xe6\xea\xda\x67\xd0\xff\x44\xf8\xcd\x6b\x9b\xa3\x96\x5b\x51\x20\x6a\x2d\xb2\x7c\xc4\x36\xe4\x2f\x64\x4a\x26\x6d\x09\x0e\x15\xd7\x7c\x30\xf4\x9f\xc6\x15\x29\x7b\xad\x5d\x1d\xdc\xaf\xb1\xb4\xcb\x8d\xdc\x4f\x2a\xb7\x0c\x45\x7e\x45\x65\xf8\x2f\x65\x60\xf2\xc2\x38\x42\x88\x7b\x61\xa8\x29\x9a\xcd\x2b\xab\x01\x64\x9a\xdd\xa3\x52\x75\x19\x8b\x89\x56\x92\x6f\x75\x25\x91\x8e\x28\xb4\xa5\x8c\x08\x2d\x96\x51\x75\x02\x93\x77\xc0\x95\xb6\x3b\xfa\xef\x62\xbb\x8d\xa5\xd5\x6e\xd9\xb2\xda\xa5\x8a\x5d\x94\x07\x55\x80\x24\x61\xc4\x15\x4c\x6b\x01\x60\x61\x02\x40\x05\x8a\x09\x24\xde\xee\xee\x9b\x90\x98\x4c\xb1\xe6\x52\x9e\xab\x92\x22\xfa\xdb\x8b\xc4\xf6\xd6\x56\x44\x2d\xb0\x13\x52\x75\x29\xe6\x15\xdd\x91\x1e\xe6\x0d\x35\x6d\xed\x52\x32\x8d\x95\x1a\x78\x3d\xb5\xb7\x95\xbd\x48\xe5\xcb\xbc\xb4\x36\x12\xda\xc4\x0d\x43\x6d\xf4\x56\x81\xfa\xea\xb3\x6d\xba\x2b\xeb\x90\xd3\xc6\x14\x88\x01\x30\x31\x2e\x32\xa3\x51\xcc\x1d\x99\xba\xa7\x41\xe9\xa6\x22\x33\x3c\x17\xd8\x66\xf2\x74\x68\xc6\xb5\xcb\x46\x87\x04\x6c\x74\xe4\x5e\x4b\x03\x1d\x12\x30\xd0\xa1\x52\x31\x50\x05\x8c\x12\xd4\xc2\x16\xc6\x04\x23\x47\x1a\x7d\x64\xee\x42\xa0\x0c\xda\x4b\xcf\xa0\x9d\x01\xc0\x15\xe6\xb5\x6d\xd2\x25\xce\x01\x7b\x90\xec\xf1\x09\x59\x9e\xab\xa0\xbc\x03\x1e\xc6\xe2\x1c\x16\x12\x7f\x53\xf1\xca\x91\x36\xee\x6a\x59\x3d\x86\xdb\xc7\xcd\x54\x34\x01\x62\x1d\x75\xac\xb5\x86\xfa\x6a\xe7\xca\xed\x5b\xba\x80\x81\x89\xbe\x0b\x4d\x02\x82\x5e\xc7\x5b\x51\x16\x00\xd3\xfb\x1c\x9e\x74\x1a\xeb\x76\xde\xf9\x31\xe3\x11\xdb\xc8\xd4\x81\x4f\xc1\x24\xad\x82\x95\xcc\x05\x5e\xea\xfd\x1e\x38\x04\x4e\x8a\xbf\xe3\x1c\x95\x5d\x07\x88\xda\x03\x44\xfc\x33\xc1\x77\x1e\xa0\x76\x65\x75\x83\xe8\x27\xbe\x38\x3e\xb9\x73\x66\x02\x94\x28\x87\x79\xb5\x73\xad\xda\x99\x99\x9a\x08\x30\x6d\x7d\x99\xf8\x95\x5b\xf7\xb5\x6d\x14\x2a\x69\x34\x6e\x8f\x79\xda\xf1\x5d\x37\xf4\x77\x47\x19\x54\xd6\xfa\x8a\xfa\x61\xe9\xea\x2a\x83\xb7\xb2\xb9\xc5\x29\x7a\xb1\x51\x06\x69\xfe\xc8\x76\x2c\x1b\x05\xd2\x5e\x4d\x5c\xeb\x14\x40\x2a\x43\xf3\x3b\xdd\x99\x10\x7e\xee\x8d\x4d\xe7\x9e\xf6\x74\x46\x2d\x23\x12\x9a\x2d\x9d\x2b\x32\xa2\xef\x0b\x31\x2b\xd7\x0b\xcf\x62\xcc\x94\xb9\x76\xa5\x3e\x7c\x30\x21\x88\x35\xc5\x24\xae\x1c\x40\x8c\xbf\x25\x2a\x6a\x00\xa9\x24\x93\x37\x1a\x11\x97\xe9\x61\x61\xb9\x14\x06\x9a\xe0\xd4\x24\x5d\xc7\x1f\xef\x98\xa3\xd4\xa0\x54\x76\x18\xae\xda\x09\x52\xb4\xa9\x06\xac\xef\x1e\x4a\x03\x75\x99\x85\xc1\x6b\x11\x53\x25\xbf\x77\xa6\x84\xe7\x26\x28\x7a\xe3\xb3\x91\x35\x91\x00\xa1\x68\xad\x12\x95\xeb\x52\x20\xc9\x09\xd7\x0b\xc9\x20\x77\x14\x1c\xee\x48\x3c\x0d\xb5\x5b\x04\x29\x80\xc4\xe4\xb1\x28\x40\xe5\x0a\x9a\x94\xb0\x04\x2a\x6f\x4a\x39\x3d\xff\x28\x02\xde\x3e\xad\x50\xaa\x2d\x12\x6d\x47\x3d\xb5\x7f\x35\x6c\xf9\x7d\xb4\x50\x02\xd9\x4e\x44\xf1\x84\x5f\x60\xc2\xfb\xd6\xb5\xf1\xe7\x03\xa3\xec\x22\x0f\x88\x0f\xd4\xa2\x7a\x9d\xde\xa4\x65\x48\x52\xe7\x93\x60\xad\xed\x77\x97\xbd\x6d\x28\xe3\x14\x03\xed\x30\xfb\x62\x5c\x49\xdd\x9e\xd1\x0f\xab\xf7\x4d\xe2\x7d\x33\x31\x54\x1b\x2a\xc0\xe6\x87\xef\xd8\x31\xeb\x5d\xd1\xb9\x68\xa0\x01\xb5\xb5\x7c\x06\x7a\x68\x5d\x77\xf6\x12\x6a\xd0\xec\xad\x71\x7c\x4d\x5f\x6d\x3a\xbd\xb3\xa7\x76\x75\x50\x2d\x02\x3b\xab\xc4\x84\x6a\x23\x02\xe5\x72\x6c\x52\x0f\x38\x34\x01\x5c\x3d\xc2\x60\xec\x18\xc8\x32\xde\x77\x57\xf1\xf9\x68\x14\xb3\xee\x52\x47\x63\xdd\xd8\x11\xb7\xe5\x32\xdc\x82\x01\xa9\x1c\x9d\x05\xe7\xce\xe7\x4d\x56\x97\xcf\xe7\xb5\x13\x35\x83\x34\xbc\xc4\x7c\x3e\xa0\xa3\x11\xed\xb8\x10\x90\x9b\x65\x27\xc8\x09\x4f\xa8\x1c\x37\xdd\x75\x8c\xc3\x07\x4e\x1a\x6a\xc7\x6a\x4a\x14\xd2\x39\xa8\x8c\xe6\x0d\x57\x41\xdb\x7f\x2b\xed\xad\xf7\xab\x7d\x26\xac\x34\xb7\x03\xf3\xb9\x2f\x2c\x0e\xdf\x00\xbc\x56\xf1\xee\xb9\xbc\x95\x25\x5b\xcc\x92\xd0\x88\xa1\x1d\x0c\x50\xe1\x0a\x15\x61\xd6\x14\x21\xd0\x00\x54\x9e\x2e\x40\xce\x11\xb2\x01\x53\x62\xf7\x9a\xd8\x4c\xdd\x1f\x93\x90\x86\xc4\x2c\x11\xbd\xcf\x01\xa7\xf3\x3d\x07\x9a\xce\xc3\x3c\x22\x15\x14\x77\xff\xf2\x8a\x5b\x63\xe7\x89\xf7\xcc\xb6\x98\x38\xd7\xf6\x9e\x9d\xe1\x79\x05\xa0\x5a\x42\x77\xb1\xaa\x80\x4a\xa3\x83\x80\x1e\x46\xea\xf6\x91\x36\x68\x1f\x06\x2d\x1a\x6b\xac\xe8\xfc\x17\x10\x78\x8c\x5b\x35\xa4\xd0\xd9\x73\xb9\x06\x9a\xd4\x66\x43\x8a\x56\x06\x80\x96\x58\x9a\xad\x79\x96\x8d\xaa\xb6\x5b\x22\x9e\x09\xea\x47\xa3\x52\xfd\x5d\x5c\xc3\xc1\x2a\xf5\x77\x79\x1a\x24\x56\xff\x5c\x2c\xd2\x3c\x77\xbc\xcd\x6a\x04\xf0\xcb\xab\xea\x70\x51\xb3\x11\xf0\xee\x93\x32\x3f\x78\xf0\x91\xe6\x2b\x58\x2a\xda\x9b\x6f\x5f\xa9\x69\x0f\x2a\x2c\x18\x0a\x1a\xb2\xb4\x95\x73\xb8\xad\x4f\x1e\xf0\xd1\xa8\x88\x39\xa8\xb4\x4a\x74\x43\xca\xb3\xdb\x15\xbf\x53\xf9\x5a\x7e\x2e\xd2\xcc\xe6\x97\xf9\x59\x5a\xc0\xa9\xbf\xe5\x30\xd5\x9f\xe7\xe9\x17\x5b\xe5\xb5\x3c\x23\xba\xce\x3b\xfc\x55\xfd\xf1\xc7\x34\x27\xd9\xe4\x68\x0c\x33\x92\x9d\x5b\xa1\xc3\xdd\x84\x27\x1f\x8b\x42\xd9\xe8\x69\xf3\xba\xa4\x4c\xbf\xe0\x2c\xf1\xeb\x41\x13\x99\x56\x22\x60\x89\xb9\x74\x53\xbb\xc2\x8b\xe2\x16\xcb\x71\xc8\xdf\x82\x8c\xe2\xec\xa7\x74\xf1\x59\xfe\x94\x96\x7e\x93\x7a\x36\x63\xe8\x18\xf0\x61\xb0\xc1\x89\xd4\x48\x49\xf9\xec\x45\x11\x47\xba\x7f\x45\x3b\xb3\x08\x54\x50\x50\xec\xbd\xf5\xe5\x78\x23\x50\x55\x1a\xfc\x64\xb3\xa6\xe2\x2f\xcb\xf5\xed\x83\x63\x00\x40\xf9\xc7\xc4\x24\x97\xde\xb5\x8d\x90\x35\x3f\xab\x8d\xdc\x75\xc6\x77\xdc\x5c\x0c\xd8\xd8\xdb\x4a\xd0\xc5\x8e\xa3\x90\x27\x39\xd8\x6e\x53\x29\x25\xf2\xd7\x46\x4c\xd1\x31\xad\x6d\xec\x4c\x60\xc6\xca\xac\x55\x2d\x9a\x5e\x6e\xb1\x4f\x1a\xa3\xc6\x06\x71\xc6\xca\x6d\x74\xc2\x7c\x9b\xe6\xae\xf5\xab\xa0\x86\xeb\xc1\x32\x20\x9a\x18\x14\x42\x3d\xdd\x3e\x59\x53\x45\xee\xc4\xdf\xcd\x76\xfd\xc6\xe2\xe2\xe2\xae\x21\x57\xd5\x80\x22\x27\xee\x8f\x96\xe6\xc6\x4d\xff\x1f\x73\x87\x33\x79\x73\x01\x3c\x63\x73\xc4\x67\xac\x16\x4a\x54\x31\x9b\xfa\x97\x3f\x03\x93\x8d\x78\x4d\x82\x64\x95\xd6\x86\xb0\x0c\xf2\x44\x12\x39\x99\xf7\x81\x5a\xe6\x80\x28\xc0\xbc\x11\x3f\x27\x26\x60\x34\x8a\x1c\x00\xd1\x11\x42\x64\x34\x8a\x2c\x0c\xf3\xa1\xe9\x11\xc4\x67\x44\x5e\x7a\x33\x32\x47\x58\xfe\x03\x39\xfc\xf4\xc3\x86\x56\xc9\x0f\x1b\x52\x7d\xaa\x2f\x18\x5e\xc5\x54\x79\x03\x45\xac\x28\xb8\x0e\x43\x4e\xc4\xe0\x1c\xbb\x19\xb1\x88\xae\x49\x6f\x62\x49\xcd\x76\x8b\x93\x12\xd3\x2c\x8e\x1c\xb4\x8b\x40\xcb\x8e\xa5\xd5\xfe\x1d\xfe\x5a\xb7\x6d\xee\x73\x24\xae\xae\xc3\x5d\xd1\xdb\x4a\xee\x8e\xab\xc4\x56\x7c\xbc\x40\x56\x8e\xc3\x39\x0b\x84\xf6\x50\xe6\x6f\x5a\x66\x4f\x65\x2f\x82\x05\x53\xc1\x9f\xea\xb8\x1f\x19\xb6\x06\xb4\x13\xf7\x92\x21\xcb\x58\xc9\x63\x42\x99\x41\x5b\x51\x08\xec\x6c\xed\xb6\x1b\x97\x59\xd7\x73\x1b\xf2\x29\xd6\x8e\xe3\x4e\xb7\x90\x83\x09\x76\x4c\x95\x1f\x78\x18\xd8\xb8\xff\x4e\x71\xed\x08\x3c\xc1\xce\x58\x9a\x23\xa9\xad\x0f\x9b\x6e\xd1\x4a\x85\xdc\xb6\x4b\x31\x6f\x87\xd8\x09\x4c\x13\x4c\xa9\x1a\xb2\xc9\xb4\x96\xcc\x9e\x61\xa6\x73\x7e\x80\x6f\x9d\x12\x48\x9b\x78\xa8\x1d\x47\x4f\x8b\x95\x90\xe9\xc8\xdf\x0a\x9d\xbb\xf0\xd4\x59\x63\x84\xf0\x54\xfc\x3b\xc1\x26\x4a\x8c\xdc\x17\xa7\xe5\x39\xa1\xd7\x39\x36\xf9\x94\xc1\x0e\xa4\xeb\x4e\x88\xab\xb4\x35\x56\x5a\x6c\x7a\x4a\x1a\xa6\xf6\xb5\x65\x19\xa8\x8b\xa4\xac\xf3\xa1\x36\xb3\x07\xed\xd9\xe9\x6c\x78\x92\xae\xc8\xdf\x3b\x75\x0a\x59\xf6\xee\x24\x5b\x21\x74\xe8\xc4\x82\xfe\xfb\xdf\x36\x0e\xec\xb9\xdd\x15\xb4\x05\x61\x0f\x0c\x3f\x8e\x4b\x3b\xb2\x45\x60\x05\x1c\xea\x36\x1a\x31\x15\x9e\x48\xaa\x41\x55\xf2\x4e\x5e\xc1\xd0\x64\x37\x4d\x1c\x86\x0c\xf9\xbe\x5d\x6a\x80\x90\xa2\x26\x32\x33\x00\x09\xe2\xb5\xd3\x09\x93\xc1\x75\x6a\x4f\x91\x98\xc0\xa6\x53\x95\x98\x40\x01\x23\x81\x78\x8e\x00\x23\xba\x27\xf6\x77\xd8\xf2\x3c\x7a\x80\xbd\xb0\x83\xb5\x2b\x41\xc3\x7d\x5d\x88\xad\xf5\xdf\x53\x65\x1e\xa8\x3f\x44\xff\x94\x8c\x93\xf1\xc9\x15\xe6\x69\x32\x8e\xc2\xe3\x75\x2c\xac\x5c\xaa\xf2\xaf\xbb\x1d\x9d\x6b\x93\xc6\x7f\x6d\xba\x3f\xbb\x26\x5b\x2d\x28\x5d\x85\x8e\x29\x58\xe7\x63\x1c\xda\xe0\x99\xde\x82\x71\xc4\xad\xdc\x7e\x77\xb8\x48\x0e\x23\xeb\x27\x34\xb5\x94\x69\xc2\x21\x43\xac\x27\x08\xe6\x82\xb0\x86\x81\x13\x26\xc9\x5d\xba\xd7\xba\x90\x29\xfd\x6c\xf4\xfa\x3c\x3a\xc4\x00\xef\x55\xc1\xf0\xcf\xf2\xeb\x5d\x1c\xa9\x7c\x98\xaf\xa5\xd1\x1c\x13\xdb\x2f\x7d\xaa\x11\xef\x76\x68\x96\x56\xc2\x65\xef\x40\xf0\xaa\xfa\x6e\xa7\xeb\x94\xde\xbd\x54\x1c\x45\x4f\xa0\xb6\xc5\x4e\xb8\x1f\x54\x42\x88\xc3\xc1\x37\x1b\xee\xec\xe5\xa5\xb2\x9f\xfe\x50\xac\x54\x7a\x7a\xf5\xa2\x3f\xa4\x43\x92\xec\x80\xb1\xb3\x6f\xcf\x21\xbc\x77\x6f\x5e\xab\x3e\x2b\x78\xd8\x64\xdc\x46\x7d\xa0\xab\xf2\x43\xc1\xab\x56\x3b\xe1\xdf\x67\x27\xfa\xae\xbc\x53\xef\x97\x94\xa6\xd7\x07\xb8\xf6\xb7\x9b\xee\xee\xc9\xc8\x1f\xfa\x77\x60\x5a\xec\x84\x5b\xbb\xb7\xf5\x04\x6b\x1a\xf4\x82\x7a\x9f\xb5\x0f\xb4\xdd\xd9\x97\x71\x11\xef\xdd\x81\x69\xb0\x13\x6a\xdb\x71\xb5\x37\xfc\x76\xd3\x1e\x38\xa4\x68\x6f\xcf\xdc\x04\x75\x93\x3d\x90\x6b\x1f\xcc\x03\x60\xd7\x8d\x2a\xc9\x0a\xbc\x3e\x47\x69\x77\x27\x1d\x2c\x44\x07\x63\xa0\xdd\x4c\xba\xf9\x02\x53\xe1\x81\x9f\x12\xdd\x61\xf5\xf5\xcd\x7b\x78\xf8\x90\xdd\x33\x2c\x9f\x61\x7d\x43\xee\x99\xa9\xaa\xf7\x64\xf3\x7d\x79\x55\x30\x2e\x6f\xe3\xde\x53\xae\x9b\xf4\xb9\x01\x0f\x83\xdd\x2f\xdc\x32\x5d\xe6\x64\x71\xe0\xa8\xbd\x56\x3b\xe1\xbf\x29\xd8\x15\xc9\x32\x4c\x0f\xeb\xc0\x6f\xb6\xe7\x82\xfe\x92\xe6\xda\xb3\xaa\x37\x7c\xb7\xd1\x4e\xe8\xef\x0a\xfe\xa6\x58\xd3\x03\xc1\x7b\xad\x76\x13\x73\xa9\x6b\x3d\x0c\xba\xd3\x66\x77\x0e\x0e\x95\xf5\xe3\x30\xe0\x6e\xa3\x9d\xd0\x7f\xa5\xe9\x9a\xdf\x14\x8c\xfc\x15\x1f\xb8\x3a\xad\x96\xbb\xf3\x5b\xc8\xa3\xae\x9c\x6e\x8a\xdf\xf7\x4f\x12\xc4\x93\x56\xcb\x1e\xfd\x88\x6a\x17\xc5\x21\x97\xaa\xe9\xc7\x69\xd9\x83\x80\x59\xb1\xce\x5e\x12\xf6\x58\x02\xa0\xbf\x01\xd5\x66\xb8\xe4\xfb\x27\x2c\x6b\xfd\xe3\x4e\x96\xf3\x1d\x37\xb0\x8a\x37\xf6\xf7\x3a\x39\x31\xf6\xee\x99\x75\xfa\x50\x12\xba\xcc\xf1\x82\xcb\x4c\x7f\x21\x76\x63\xd7\xd5\xbc\x07\xe7\x77\x60\x88\x5f\x94\xe1\xab\xf5\x75\x70\xb1\x1b\x42\x0d\x27\x4e\x58\x47\x41\xa7\x3c\xa4\xae\xa1\x23\xc0\xed\x28\x0d\x8c\xde\xa9\x11\x98\x80\x53\xea\x4a\x85\xf7\x88\x75\xc2\xc1\xea\xa4\xaf\x93\x04\x76\x22\xdb\x9c\x68\x81\x6d\x53\xca\xcc\xd7\xab\x93\x45\x41\x79\x4a\x68\x9b\x2b\x6c\xa7\x2f\x84\x19\xbc\x81\x4b\xb8\x82\xb7\xf0\x0b\xbc\x6e\x60\x2d\x59\xc6\xdf\x9f\x37\x59\xc9\x53\xb4\xf0\xc5\x06\xb3\x38\xfd\x73\x12\xcf\xc6\x27\xff\x32\xdf\x9e\xce\xc6\x27\x3f\xce\xc1\x9f\x93\x67\x00\xf0\x1b\x56\x7c\x1d\x52\xfc\x55\xcb\x31\x95\x6b\xb5\x23\x6d\x19\x9a\xdc\xe7\xc3\x94\x0f\x73\x9c\x96\x5c\xd5\x1c\x9e\x26\xa7\xbf\x4d\xc6\x70\x78\xb5\xe6\xc3\xbb\x62\x3d\xbc\x49\xbf\xe0\x61\x74\xec\x75\x7e\x1c\x25\xc3\x0f\xa2\x11\x1e\xae\x57\xd7\x2c\xcd\xb0\xa8\xca\x86\x5a\x8e\x36\x2c\x96\x0a\x18\x1c\xf2\x1b\x4c\x6d\x9d\xba\xf7\x24\x02\x83\xdb\xe4\xf5\xb9\x96\xf6\xac\xac\x97\xa8\xfc\xe8\x3e\xe0\xd1\xad\xf7\xd3\xab\xa0\x96\xb4\xae\xa1\x7e\x7b\x55\xac\x08\xa5\xae\x65\x3f\xa9\x8a\xf2\xa9\x84\x4a\x7f\x04\xf6\x05\x8b\x6e\xeb\xbf\x55\x91\x20\x03\xa8\x94\xff\xa8\x0f\x4a\xc0\x84\x6e\xf5\x1f\xea\xa3\x27\xe2\x40\xb7\xfe\x6f\x55\xc5\xbc\x36\xd1\xad\xfd\x53\x15\x68\x76\x16\x31\x7f\x4c\x2e\x97\x8b\xa8\x5f\xe6\x72\x6c\x32\x4e\x5f\xfd\x53\x55\x70\x19\x17\x44\xbd\x9f\x1a\xba\x65\xb5\x11\x75\x7e\xa8\xc2\x16\x4f\x82\x68\xfb\x9b\xaa\xea\xf3\xa6\x88\x36\x3e\xa8\x4a\x1e\x07\x88\xa8\xff\x5b\x55\xf1\x98\x68\x44\xfd\xdf\x7a\x01\x6b\x4e\x0f\x51\xf7\x97\x2a\x6e\x31\x1e\x88\xb6\xbf\xb9\x55\x1d\x5e\xc8\x56\x75\xbe\xd9\x4e\x35\x25\x42\xb9\xbf\x07\xaf\x05\x91\x35\x7b\x97\x36\xf0\xa9\x96\x28\x08\x8c\xaa\x7f\x79\x5b\x1b\x12\xbf\xa1\xdb\x5d\xa5\x1a\x85\x1d\x24\x6f\x60\x77\x5b\xd6\xe3\xf7\xaf\x3f\xea\xca\x67\xe7\x17\x66\x02\x85\x3f\x81\x9f\xd6\x24\xcf\x7e\xfd\xf8\xb3\x4c\xd2\x83\x98\xff\x7b\x60\x5b\x3b\xab\x73\xe3\x03\xf0\xc3\x50\xa2\x45\xbb\xf4\xe5\x87\xb7\xa6\x73\x12\x2c\x75\x9a\x67\x7e\x05\xeb\x6f\x8e\x96\x8d\x3d\x49\x39\xae\x0b\xd7\xfe\x6f\xbd\xa1\x32\x82\x84\x5b\xa9\xf1\x45\xa3\xec\x5a\x10\x2f\xb7\x5a\xe3\x8b\x5e\xa7\xa2\xc8\x71\x4a\xdd\x7a\xcd\x4f\x9a\x6a\xdc\x5e\xe1\x2c\x33\x9b\x59\xaa\x75\xbd\x09\x7e\x56\x0d\xae\x70\x5e\xd0\xeb\xf2\xa2\x40\x65\xfd\xb7\x2a\xba\x49\x4b\xb1\xed\xa8\x34\x7f\x99\xbd\xaf\xe5\x29\x72\xd7\xeb\x9f\xaa\x82\x0a\xa7\xf8\xca\xdc\x71\xe8\xda\x5f\xbc\xcb\xfa\xa6\x94\x64\xfa\x5c\xdd\x93\xe8\x8b\xad\x16\xbe\xd3\x44\xe3\x5e\x62\xac\xaf\x8c\x70\xf5\xf7\x29\x5c\x14\x74\x49\xae\xd7\xcc\xfc\x56\x17\xe1\x2a\x24\xd2\x52\x96\x37\x57\x48\xf4\xe3\xa8\x87\xae\x3a\x39\xb3\xae\xfb\xfe\x09\xf5\x6e\x60\x13\x9b\x50\x6f\x53\x3c\x91\x86\xd5\x6a\xd1\x81\x1b\x00\x4e\x0c\x6b\xa2\x93\x64\x74\x28\xe4\x0c\xdf\xf6\x8f\xc9\x43\xef\x7d\x20\x78\x51\x3f\xff\x5e\x66\x69\x8f\x5b\xef\x79\xda\x16\xfb\xd2\xf0\x8a\xd3\xda\x1b\xaa\xae\xdf\xbd\x7a\x2e\xff\xde\xa9\xfe\xac\xeb\xfc\xc3\x62\x89\x6b\x02\x82\x35\xc5\x3c\x51\x4a\xd7\xf2\xe4\x56\xd0\xcc\x3e\xf3\xff\xfb\x7e\x4b\x87\x6e\x82\x7e\x2b\xb2\x5f\x7a\x12\x7a\x8e\xfd\xbd\xae\xc3\x41\xc8\xa0\x9e\x9e\x3d\xa7\xfd\x5f\x63\xca\xbb\xc5\x46\xff\x28\xd8\xee\x4d\x79\x10\x9c\xb2\xff\x1e\xdf\x63\xde\xf1\x04\x69\x57\xc1\xc6\xe3\x19\x04\x4f\xc2\x65\x9c\x4b\x01\x7b\xbb\x35\x7f\x91\x82\x0e\xb8\x32\xb7\xc0\x2a\xc1\x8f\x34\xba\x66\x91\x49\x87\x05\x9b\x37\x3f\xac\xab\xb3\x62\x2d\xc5\x17\x1d\x35\x2b\x10\x63\x37\x36\x29\xd8\x8c\x07\xd8\xda\x59\xbc\x57\x6e\xf4\x6f\x0a\x76\x71\xb7\x72\x73\x91\xb1\x08\x6e\x4a\x69\x4f\xc5\x0b\x3a\x39\x3a\x95\x13\xec\x6a\x65\xe5\x54\xed\x26\xcd\x68\x9b\xcd\xe1\x89\x45\xa8\xa3\x2e\xf9\x85\x75\x54\x68\x50\xc5\xb8\x93\xdb\xd1\x95\x9f\x74\xb3\x9f\xee\x1c\x3b\xb2\xac\x1e\x07\xf8\xd1\x6c\xb1\x9f\x6e\xc2\x7f\x4b\xeb\xb1\xdf\x26\x3f\x8e\x93\x7f\x0a\xd8\x8d\xe1\x1c\x4b\xa3\xe2\x1b\x9c\xaf\x30\x7b\xa6\xfe\x29\x9f\x99\xef\x7d\x07\x6b\x0d\xf9\xa5\x73\xc9\x43\xc5\x78\x33\x96\x94\xaf\x8a\xdb\x55\x41\x31\xb5\xa6\xa7\x75\x16\xbd\x76\x91\x76\x4d\x50\xc5\xbf\x97\xf3\xb1\x16\xab\xfd\x32\xb3\xf1\xf4\x5a\xba\x5e\xe8\xe0\xfd\x0b\xd3\x85\x8c\x7c\x28\x63\x6e\x54\x50\xdb\x93\xd7\x81\x0b\x08\xc2\xb3\x71\x1d\x6d\xc8\xb8\x0c\x6b\x58\xc6\xb7\xd0\x80\x26\x82\xac\x89\x97\x76\xed\x8d\xa1\xa3\xfc\x34\x7a\x43\x88\x05\xbf\xd3\x49\xe8\x2b\xd3\x71\x89\x02\x43\xd6\x12\x54\xb6\xa6\x6f\xa9\x94\xd6\xc4\x31\xd0\x7e\xb3\x18\x45\x17\x37\x78\x68\x96\x61\xb8\x4a\xcb\x12\x67\x43\x5e\x0c\xf9\x0d\x1e\x7e\xd2\xa8\xf0\x69\xa8\x90\x63\x78\xbb\x2e\xf9\xf0\x0a\x0f\xd3\xa1\x9e\xc2\x80\xb3\xbb\x0d\x3e\x46\x9f\x86\xf1\x5d\xb1\x36\xcd\xff\xfc\xe9\x87\x0d\xa9\xfe\xfc\x09\x7c\xaa\x16\x52\x5c\xcb\xc1\x46\x50\x3a\x10\x5a\xd5\xbd\x49\x05\x3b\xf0\xf4\x40\x34\x7d\x18\x5b\x68\xee\x23\x97\x1a\x4b\x28\xff\x9e\x4a\xe1\xec\xce\x8c\xb7\x67\x76\x8d\xf9\x89\x12\x00\x84\xf4\x28\xe2\x20\xac\xf3\x93\x35\x79\xa6\xeb\x60\xfa\x85\xb0\x82\x3e\x86\x1d\xff\x93\x90\x42\x42\x4f\xbe\x10\xfc\x55\xcc\xcf\xea\x28\x9e\x15\x57\xca\xb3\xf8\x24\xcd\x6e\x9b\xef\x17\xe9\x2e\x57\x2a\x66\xe2\xa4\x51\xf1\xb1\x2d\xdf\xeb\x0f\x32\x4a\x9e\x17\x0e\x4f\x93\x11\x63\x47\x2c\x63\xed\xd5\x53\x4f\xb3\xac\x8e\xfc\x65\xc2\x82\xe8\x38\x26\x69\x96\x9d\x89\x49\xbd\x4a\x95\x4f\xb9\xcc\x62\x0f\xa9\x53\xfa\x8d\x70\xa7\x90\xda\xe0\x78\xaa\xab\x44\xaf\x82\xf2\xdd\x0d\x40\xe3\x8d\xb1\x85\x7a\xd4\x2d\xfd\x9e\x82\x0d\x9b\x55\xaa\x35\x35\x03\x48\x92\x04\x37\x9b\x34\x4a\x2b\x13\x0c\x22\x54\xd7\x2b\xab\x02\x7c\x50\x10\x5b\x58\xba\x0c\x21\x8a\xf8\xbc\x2a\x8a\xdc\xd1\x3e\xd6\x8d\xd7\x9c\xe4\xe5\x33\x52\xba\x1f\x1f\x23\x78\x77\xc9\x53\xc6\x3f\xbe\x7c\xe3\x7b\x0c\x6e\xca\x85\x60\x7c\xc5\xb9\x79\xc9\x70\x3a\xa1\xd0\x8c\xe1\xa2\xc8\x31\x13\x6b\x31\x21\xf6\xdb\xf9\xea\x6e\x52\xa0\xa3\xd3\xca\x28\xd8\x4c\x1c\xf7\x05\xa2\xd3\xac\x58\x48\x2a\x9d\xfc\xe7\x1a\xb3\xbb\x73\xac\xf4\xab\x31\x05\x3a\x46\x12\xcc\xd0\x62\xba\x48\x8a\xe5\xb2\xc4\xfc\xf7\x98\x5c\xdf\xf0\xe3\x45\x72\x8d\xf9\x4f\xc5\x5a\xe6\xc1\x7c\x25\x53\xbe\x7c\xc4\x0b\x1e\x83\x84\x17\xab\xc9\x57\x42\xb3\xe2\x6b\x42\x28\xc5\x4c\x35\x80\x37\x88\x5a\x18\x7f\x22\x19\xbf\xd9\x01\x22\xc7\x4b\xee\xc1\x90\x0d\xe0\x12\xf1\xae\x26\x03\xb2\x8c\x97\xf5\x9c\xb8\x71\x33\x57\xd1\xa1\xa5\xbf\x81\xbb\x4d\x27\x58\xa0\x2e\xce\x22\xf0\x3c\xa8\x86\x94\x39\xff\x14\xb0\x14\x45\x9c\xad\x71\x84\x10\x2a\x46\xa3\x23\x3e\x28\x46\xa3\x68\x99\xe6\xa5\xf4\x81\x2c\xb6\xdb\x23\xbe\xdd\xc6\xd8\x38\xbf\xef\xeb\x10\x1e\x8d\x01\xa4\x31\x00\x83\x74\x34\x8a\x49\x2c\x63\x60\x1c\xd0\xfa\x14\x88\x57\x8a\x0c\xa2\x66\xf5\x59\x20\x5e\x4a\x6d\x29\x01\x5a\x81\xba\x00\xb0\xd8\x6e\xd5\xb8\x8f\x10\x5a\x4c\xf3\x18\x27\x57\x84\xaa\xac\x3d\xf0\x5e\xc8\x53\x63\x0e\x98\xac\x63\x50\x05\xc2\xac\xf7\x20\x6d\x97\x2c\x5d\x7e\x28\x8a\xdc\x27\x6d\x3a\xf9\x8f\xba\x78\xf5\x13\xe8\xce\x8d\x34\x2a\x69\x9f\x3a\xed\x5e\x9e\x03\x0d\x2d\xb1\xc5\x95\x0c\xc3\xdd\xcc\xf9\x64\xaa\xe9\xc2\x4a\xe5\x61\xde\x05\xd0\xad\xa1\xc2\xf2\xb8\xc4\xc6\xa9\x66\x4b\xa0\x5f\x52\xf2\x62\xa5\x9b\xef\xa0\xa6\x8d\x29\xeb\x70\x9e\x9a\x46\xe8\xf0\x4e\x9b\x2a\xb8\x3c\x2a\x0e\x3c\x10\xf7\xa7\x03\x7b\x22\xdd\x02\xbb\xa9\xf0\x83\x74\xe8\x80\x56\xfd\xed\xa1\xb2\x57\x0c\xa7\x9f\x57\x05\x91\xb1\x81\x9f\xfe\xa5\xb2\xb9\x2d\xae\x48\x8e\x27\x51\x7c\x9b\x7e\x3b\xf9\x2a\x48\xc9\x64\xf8\xcf\xff\xf3\x9f\x57\xdf\x40\x04\xa5\xc2\x84\x8b\x32\x42\xeb\xb2\xff\xb5\xfa\x06\x86\x29\xcd\x86\x6e\x93\x7f\xf9\x97\x53\xd9\x24\xc3\xe5\x67\x41\xe4\xbc\x36\xff\xf2\x2f\x3f\x86\xda\x9c\xfe\x38\x1e\x8b\x46\x7b\x56\x68\x87\xb5\x4b\x5d\x49\x0a\x62\xcb\x67\x3b\x6e\x9b\xc7\x76\xd3\xdb\xed\xa2\xe5\x4f\xc8\x28\x89\x58\xf9\xcc\x92\x31\xc5\x6f\xee\x9b\xa7\xba\x57\x17\x29\x3d\x59\x97\xf8\x24\x2b\x1e\xc1\x57\xba\x1e\x9e\x4c\x82\xd1\xf1\x52\xdc\x98\x21\x9d\x51\x81\x25\x32\x92\x85\xf9\xf4\x9a\x64\xe7\x92\x86\xba\x1f\x05\xa1\x3c\x3a\xad\x7f\xca\x0a\xe7\x58\x86\x00\xf8\x42\xf8\xdd\xa4\x2e\xfb\x88\x97\x0c\x97\x37\x1f\x53\x8e\x27\xa7\xe3\x1a\xc4\xcf\xa4\xe4\x98\x62\x56\x4e\x66\x1b\x19\x15\xe6\x9b\xb9\x09\x21\xfe\x82\x29\x9f\x44\x8a\x74\x47\x15\xec\x28\x67\xb8\x24\x7f\xc5\x51\x35\x0f\xd0\xf4\x8d\xc0\xdb\x31\x94\xf7\xeb\x18\x5e\x15\x9c\x17\xb7\x93\x31\x64\xe2\x86\x9e\x8c\x2b\xe8\x32\xc6\x17\x37\x62\x80\x45\x9e\x4d\xc6\xb0\x79\x5d\x88\x47\x88\x9b\x55\xc3\x5c\x96\x18\xd9\x87\xef\xec\x74\xbe\xdd\xd6\xbf\xc6\x73\xc8\x11\x16\x04\xb3\xc8\xbf\x60\x5f\xcc\xa5\xd0\x62\xe2\x3e\x43\x00\xb4\x8b\xff\x4a\x95\x52\xb4\xa9\x2a\xc4\xa1\x79\x86\xd7\xc4\x4a\xf0\xc3\x03\x57\x32\xa6\xe1\xb9\x07\x05\x12\xb8\x51\x2c\x22\x27\x62\xc9\x8f\x4e\x2b\x50\x59\xbc\x1e\x8d\x58\xd2\xda\x00\x15\xb9\xc9\x2e\xb2\x61\x92\xcc\x32\xf3\x62\xbd\xb8\x11\x97\x44\x54\x19\xf9\xc0\x46\xb9\x6f\xb5\xd0\xbd\xc6\xb6\x09\xad\x76\xbf\x49\xf7\x9c\xf7\x3d\x27\x27\xc4\xce\xf6\x3a\x60\xfb\x6b\xb1\x74\xb9\xa3\xd6\x92\xd0\x4c\xbe\xa7\x7b\x40\x0a\x3e\xbe\x76\xb5\xbb\xc1\x8b\xcf\x27\x0a\x03\x4f\x32\xc2\x54\xcb\x6e\x03\xb2\x47\x4a\x0e\x50\xa2\x4d\x05\x73\xb4\xa9\x74\x48\x7b\x85\x85\x52\x8d\x64\x1d\xf9\x2e\x33\x7c\x55\xac\xe9\x02\x67\x67\x02\x49\x7e\x9f\xd2\x2c\x37\xb9\xfc\x2f\x05\x47\xa0\x90\xcb\x44\xcd\xa1\x7f\xd4\x33\xed\x72\x78\xb6\xf4\xe7\x1b\xe1\x38\x6b\x84\x1d\x48\x68\xc1\xe3\xa8\x26\x51\x9a\xa1\x75\x92\x57\xc0\x7d\xb2\x29\x2f\x89\xb9\x39\x50\x06\xe2\xaf\x25\xfe\xf8\xf2\xcd\x44\x26\x7f\xb3\x8c\xa6\x33\x26\xd5\xa1\x4b\xef\x1c\xda\x35\xd7\x3c\xc4\xe5\xd5\x9a\xe4\x99\x96\x81\x0b\xae\xb7\xd1\x1b\x86\x6e\x7f\x6f\x1d\xd4\x78\xaf\x31\x43\x0c\xa0\x70\x06\x50\x99\xe4\xf1\x8d\x28\xc6\x2a\xc5\x0b\x6c\xa5\xc2\xc7\x5f\xec\xb8\x5e\xe5\x45\xb9\x66\x32\xd0\xd3\x1c\xc8\xe0\x35\x6f\x69\x89\x19\x3f\x53\x8c\x4e\x2c\x3d\xbc\xbb\x05\x79\x47\x35\xc3\xad\x78\xc6\x56\x32\xf7\xc6\x7d\x11\x01\xfd\xfe\xfe\x9a\xf2\xc5\x8d\xe9\xa5\xd9\xc8\xc8\x9b\x00\xa8\xa0\x93\x65\xae\x1e\xd4\x1e\xd1\xe2\xe5\x9a\x0a\xd6\xde\x2e\xfe\xce\x0e\xfc\xfd\xc0\x68\x53\x81\xcd\xae\xc4\x60\x83\x76\xf4\x68\xbb\x73\x36\x3d\x56\x88\xe0\xca\xd9\xb8\xd3\xb6\xbc\x73\x89\xf9\x5b\x45\x10\x0d\xfa\xc7\x75\xb6\xcc\x2c\x33\xfb\xfe\x76\xf9\xae\x10\x17\xaa\x8e\xc1\xdc\xb5\xd4\xf6\x1e\x8e\xea\x68\x46\xd2\x3c\x37\x8e\x66\xad\x3a\xf3\xe1\xc5\x0d\x29\x87\x62\x95\x87\x57\x78\x28\x5f\x71\xc3\xab\xbb\xa1\xde\x56\x15\x1f\x0e\x0f\x29\xfe\xc6\x87\xb7\xe9\x5f\x0a\x36\x64\x58\x9a\x65\x46\x66\x80\x62\xa5\x15\xac\xd7\x86\x12\x99\x85\x6f\xad\x7b\x27\x1b\x10\x01\x00\x60\x57\xed\x8e\x63\x10\x01\x2f\x28\x79\xb3\xc9\xc7\x97\x6f\x76\xd5\xb0\xc8\xd1\x48\x09\x95\x63\x6e\x2f\x38\xa6\x6f\x36\x5a\x21\x3e\x68\x07\x1c\xf0\x59\x00\xd1\x19\x73\xd6\xa4\xc6\x3e\x15\x7a\x5c\x67\x22\xea\xd8\xcd\x4d\xe7\x52\xad\xee\x04\x64\x23\xb4\x32\xad\xdb\x64\x4e\x25\x70\xb7\xf2\x67\xe7\x71\x1b\xe9\xf3\xf0\x76\x69\xeb\x62\x89\xf9\x41\xbc\xf3\x33\x14\x93\x52\x1f\x3e\x9c\xe9\x41\xd8\x2f\x84\x5e\xab\xe8\x2d\xdb\xad\xc9\x13\x36\x30\x99\xf0\x9a\xb3\xa9\x09\xbb\x0a\xf9\x72\xf0\x56\xfb\x07\x4e\xcc\xaf\x5c\xdc\x60\x71\x55\xbd\xa7\x0b\x1c\x47\xe9\x92\x63\xf6\x11\xd3\x4c\x5c\x9c\x12\xa6\x14\xbc\xb7\x0e\x72\xc7\xd6\x05\xc2\x49\xb4\x58\xc5\x08\x58\x4e\xcb\x9d\x58\x80\x3d\x8c\xc0\x80\xfa\x14\x0e\x0b\x5e\x2b\xc4\x48\x92\x00\x4b\xca\x9a\xcc\x25\xaf\x82\xfb\xaa\x70\xad\xa0\x72\x57\xdd\x65\x03\xbb\xab\x7f\x23\xdc\xab\x0d\x2a\x15\x86\x67\xdf\x61\xba\xe7\x1e\x58\x1a\xf7\x47\x1f\x63\x65\xc2\x8e\xc1\x86\x5a\x69\x5e\x0c\x1a\x1a\xa9\x1d\xfb\xd5\xde\x89\xd0\x7e\x15\x9d\xb5\xe4\xb1\x82\x29\xf2\xb0\xa4\x07\xc6\xab\xb4\x90\x4a\xf8\x85\x7b\x8b\xd4\x06\x7c\xbb\x3d\x2a\x46\xa3\x23\xb6\xdd\xc6\xcd\xfb\xb8\x75\x90\x8f\xc6\x46\x45\x66\xf2\xe4\x66\x44\xc9\x4b\xfe\xe8\xde\x25\xa5\x1a\xfc\x51\xdc\x63\xd8\x60\x34\x2a\xec\x65\xb0\xab\xeb\xd3\x50\xd7\xdf\x08\x77\x7b\x7e\x2e\x33\xca\x99\x5d\x03\x02\xb9\x1b\x08\xcb\xfa\x0a\xcf\xa8\xa0\x69\x1f\x5f\xbe\x51\x68\x2a\xb3\x2f\x66\x00\x52\x2d\x6c\x6a\x16\x80\x4a\x11\xad\x36\x22\xf5\x3e\xe8\x5d\x92\xdd\x7d\xed\xac\xe0\x97\x21\x3e\xe5\xbe\xe0\xb7\x53\x04\xdb\x25\xf8\xa5\x0e\x0c\x25\xf8\xed\x06\xd1\x21\xf8\x25\x0a\xfb\xc2\x82\x5f\xa3\x07\xbd\xd4\xbb\xf8\x9a\x64\x2f\x17\x0b\x5c\x96\x96\xcc\xef\xa2\xcf\x09\x29\xdf\xfe\x7f\xec\xbd\xe9\x92\xdb\x38\xd2\x28\xfa\xbf\x9e\x82\x85\xe3\x51\x93\x53\x90\x2c\xd9\xee\x4d\xdd\x74\x8d\xdb\xcb\x74\x4d\x7b\xbb\xae\xf2\xf4\x37\xa3\xd1\x57\xcd\x12\x21\x09\x63\x0a\x50\x83\x50\x2d\x2d\x31\xe2\xbc\xc5\x8d\xf3\x3c\xf7\x4d\xce\x93\xdc\xc0\x4a\x80\xa4\x96\x5a\x5c\xb3\x7c\xd3\x11\xed\x12\xb1\x23\x91\x48\x64\x26\x12\x99\xf6\x33\xc4\x52\x8c\xd8\x61\xb3\xad\x3f\xbf\x2d\x23\xbe\xf1\x88\x97\x24\xa6\xd5\xaa\x51\x21\x5f\x4a\x10\x45\x36\x0e\x5e\xe1\xd3\x3a\x8e\xef\x28\x05\x9b\x88\x63\x1d\xb7\xc4\x49\x29\x8e\xca\x06\x2a\x6b\xef\xa6\x36\xee\x3c\xc3\x81\xdc\x72\xbf\xab\x21\x54\x28\xf7\xdd\x8d\x60\xfb\xb6\x2f\xa0\x83\x4d\x15\x7e\x2f\xd4\x31\xc3\x79\xdc\x2b\xd9\x87\x4d\x2b\x40\xe2\x7c\xc0\x86\x10\xc7\x99\xf8\x43\x63\xa9\x84\x41\x1d\xb5\xe9\x4e\xe8\x5c\xa9\x63\x4c\xc2\x6b\x34\xe6\x05\x5c\xc4\x61\x17\x26\xa5\xd8\x23\x24\x5b\x1e\xed\x2d\x5a\xad\xc5\x7e\x1c\x93\x3a\x5a\x34\xf3\xc3\xb5\x69\xea\x3c\xb8\x88\xa0\x18\x54\xbc\x88\xa0\x18\x55\x4c\xbd\x19\x57\xf6\x0f\x8a\xf7\x7b\x32\x24\xe8\x78\x27\xea\xab\xb9\x23\xe5\x3e\x1b\x80\xbd\x7d\xde\x6a\x21\xe9\x23\xbc\x61\xa9\x21\x6f\xb5\xf6\x9d\x5c\x6f\x19\xe0\xda\x53\x5a\x9e\x68\xad\x16\xdf\x61\xb9\x91\xbc\x62\xf1\x20\x21\x03\x76\x56\xd8\xc4\x4d\x6c\xa9\xdd\xd3\x96\xd6\x54\x65\x2e\x64\x5d\xfa\x0b\x52\xbe\x8d\x6f\xad\xf3\xa8\x75\xc1\xb5\x09\x6d\x65\xac\x50\x4f\xc5\x10\x22\xd8\xe9\x74\xb8\x19\xba\xd8\xe6\xa6\x40\x68\x99\x12\xf1\x63\x80\x86\xa1\x2c\xb9\x96\x2a\x39\x1a\x49\x2d\x2a\x6e\x90\x75\x50\x89\xfc\xdb\x8f\xa1\xd5\x4a\x6b\x28\x65\x28\x79\x5c\x62\x35\x8f\xf6\x14\x38\x1b\xf5\x26\x71\x53\x9e\xc7\xe9\xaf\xdd\xa3\x00\x32\xb9\xee\xf2\xb2\x59\x54\xb3\x03\x37\xea\x53\xb8\xa1\x63\xb8\x9c\x0b\x21\xf7\x5c\xfb\xbf\x30\xa8\xb2\x0e\x16\xa5\xf2\x73\x13\x15\xb8\x1d\x98\xb4\x8b\x79\x89\x5d\xb7\x9d\x90\x71\x68\x9e\x39\xce\xcd\x55\xe8\x04\x58\x91\xe5\x2c\xa5\x93\x7f\x98\x0a\x9c\xa5\xa3\x18\xfb\x43\x44\x82\xfd\x34\xb8\x56\x1d\x45\x08\x1a\xce\x1a\x00\x99\x59\xfd\x06\x15\x8d\x56\xbe\x2a\x89\x94\x43\xa7\x44\x9f\x16\x91\xe2\xa4\x7c\x38\x70\x48\xc5\x16\xb1\xab\xe5\xee\xcd\xa5\x15\xc2\xf2\x75\x27\xad\x3c\x97\xae\x2d\xa8\xad\xa7\xc3\x8e\x0a\x68\xe3\x09\x6e\x4d\x1b\x9a\x3a\x10\x60\xdd\x24\xa8\x5c\x77\x50\x56\xb6\xd9\x05\x63\x6b\x2a\x17\x6f\xdc\x96\x67\x15\x82\xcd\x3f\x5c\x97\x81\x2a\xba\x0c\xa3\xa5\x67\x45\x8c\xf6\x76\xd9\x79\x7c\xaf\x09\xab\x79\x04\x97\x3e\xea\xc5\xeb\x31\x76\x2c\x08\x13\x8a\x9f\x32\x29\x2c\xc9\xfe\xa3\xd5\x6a\x59\xec\x91\xc6\x7d\xcb\x34\xbe\xee\xa8\xda\x72\x8f\x9d\xb5\x84\xc8\x37\x79\x6b\xf0\x7e\xef\x5d\x2f\xd0\x14\x8f\x31\x62\x5b\x6f\x18\x4c\x41\x00\xc1\x38\xc9\x79\x3b\x45\x68\xde\x46\xbf\x2e\x92\xda\x8b\xa1\x9a\xb5\xcb\x79\xc2\x02\xfb\xae\xbb\xbc\x30\xca\x4c\x61\xc7\x75\x62\x80\x0e\xd7\xa9\xea\xb9\xd1\xcf\x33\xe8\x1b\x8b\xf9\x8f\xdc\xdc\x07\x70\xdd\x22\xea\xcb\xc0\x22\xcc\x0d\x6d\xbe\x70\xa3\xc5\x89\xb1\x51\x19\x16\x4a\x0d\xc2\x0d\xee\x43\x4a\xd4\xf2\xee\xa8\xa9\x0c\x1f\x28\x23\x50\x44\x90\x76\xca\xd1\xc4\xfb\xfb\xee\x27\xa4\x1d\x77\x6c\x32\xd7\x4d\x80\x21\x38\x37\x01\x30\xe9\x6a\x45\x9d\x0b\x49\xe9\x95\x9d\x76\xcc\x54\x62\x41\x97\x68\xcc\x3a\x79\x26\xef\x04\x3a\x0c\x9d\x8b\x0d\x25\x7f\xa5\x8b\x11\x72\x06\xe8\x1a\x86\x99\xf5\x58\xad\x58\x11\x41\x1a\x41\xec\x04\x24\xf3\xfa\x93\xdd\xc9\xd1\xf8\xe9\x87\xde\x97\x32\xa1\xc7\x56\x32\xf4\x32\xf5\x4d\x49\x54\x46\xc2\xa8\xf6\xb0\x7e\x69\xa9\x74\x1a\x2a\x23\x32\xd2\x3b\xb0\xf2\x15\xdb\x78\x14\x87\x46\x29\xe7\x5f\xa9\x58\x45\xca\x69\x22\x21\x66\x55\x26\xe6\x3b\x51\x96\x2b\x4e\xe0\x5a\xdd\xbc\x67\xcb\xa2\x2c\x41\xa4\xd9\xa6\x42\xa6\x3d\xab\x9c\x17\x7c\xa0\xa4\x11\x90\xc5\x2e\xc1\x84\x2a\x0e\x18\x0c\x49\x9c\x47\xd6\x9b\x64\x65\x9e\xa2\x35\xd7\x1c\x92\xb8\x18\xe5\xe1\x3a\xf1\xb1\xc9\xe2\x3d\xb1\x78\xa3\x1f\x7c\x12\x6f\x45\xc9\x86\x15\x2d\x22\x98\x69\x02\x44\xe4\xe3\x52\xe0\xa9\xf3\x6d\x66\x96\xe4\x5c\xdf\x1f\x00\xbd\xde\x32\xd8\x47\x40\xcd\x25\x8f\x82\xd5\x52\x0b\x91\x7d\x04\x95\x2c\xd7\xe7\x82\x55\x65\x9a\x84\x26\x6c\x92\x77\x44\x47\xa9\x8d\x70\x26\x5b\x99\x26\xf9\x31\x4f\x32\x64\xaf\x8c\x34\x42\xef\xfb\x06\x4f\xb2\x0d\xdd\xa3\xe2\x7c\x9c\x71\x45\x85\x7c\xae\x9f\x70\xf4\xcc\xdc\x95\x84\xd1\xb2\xd0\x03\x32\x72\x64\x39\x82\x8e\xce\x31\xd6\x92\xb5\x0c\x05\xaa\x32\x32\xa2\x3e\x25\xa3\x42\xcd\xac\xb9\xc5\x4b\xcc\x1b\x1b\xbc\xc4\x7c\x6d\x7b\xf2\x55\xce\xcf\x09\x1f\x4d\x91\x63\x0d\x6a\xb0\xc8\xd7\xb2\xba\x35\x61\x1d\x1e\x7a\xe8\xf6\xe3\x12\x9b\xf8\xca\x0e\xa4\x62\xb7\x9e\x31\xab\x5c\xdf\xbf\x60\x99\x64\xae\x0c\x7c\xe4\x8d\x5c\x5d\xa6\x71\x31\x2f\x5d\xcf\x9f\x8b\x28\xf0\x71\x5e\x5d\x13\x59\xb0\xb2\xe4\x46\xc6\xaa\x8e\x06\x36\xb4\x2a\x9b\xfd\x80\x46\x08\x9f\xd7\xdb\x6d\x40\x02\x19\x0f\xef\x83\xb2\xed\xd2\xa5\xaa\xdd\x14\x05\xcc\xe3\x45\x98\x94\xae\x5e\x3d\xce\x07\x0e\xc8\x50\x5a\x5e\x78\x07\xcf\xba\x77\xd8\x5d\xe7\xee\x5f\xdd\x03\x17\x11\xac\x34\xae\x17\x0a\xc0\x01\x1e\x1a\x4b\x2c\x75\x09\x67\x08\xc3\x0b\x94\x8f\x18\x9e\x0b\xd2\xd3\x58\x33\x82\x4e\x72\x53\xfb\x97\x58\x0c\x9c\x5e\xbf\x79\x51\xb1\xd2\x7a\xe2\xb2\x18\xa3\xcd\x2c\x86\x26\xbb\xd7\xb2\x61\x68\xb4\xaa\xbd\xad\x7d\xc2\xf5\x6d\x0f\xd6\xda\x91\xef\x66\x76\xb1\x9b\x73\xe2\xbb\xb2\x4d\xd0\x9a\xfd\x42\x07\x5e\x2f\xcf\x2f\x75\xba\x69\x47\x03\xe6\xa9\x8a\x8a\x9c\x24\x3f\xfc\xeb\xe4\xaa\x88\xc4\xb4\xe5\x1f\x80\x8e\x29\xe6\xae\x46\x03\xcc\xbd\xb3\xbf\x4b\x63\x00\xb2\xb3\x31\x40\x21\xb5\xf6\x8d\x82\x95\xde\xfc\x66\x71\x9f\x89\x45\x93\x06\xa7\x96\xfb\x2f\xca\x8b\x1a\x55\x96\x25\xe3\xb2\x98\xb5\x48\x28\x2a\x37\x5f\x3c\xd6\x16\x49\x56\x5b\xb6\x65\x4a\x4d\x23\xd1\x5a\xb5\x0d\xc3\xd7\x0b\xaf\xa3\x8b\x2a\xb8\xea\x4c\x03\x5f\x6e\x24\x0b\xf7\xee\xaa\xe9\xde\xaa\xa4\xab\x4d\x7d\x41\x04\xa5\x56\xdc\x44\x7f\x76\x41\xe1\x8e\x53\x42\x0a\x5e\xa3\xc7\x53\x55\x2d\x19\x43\xf3\xa8\x41\x73\x02\x96\x73\xe0\x4d\x2f\x1b\x1c\x05\x10\x8a\x2c\x6b\xd1\xf0\xca\xc1\x2b\x58\x6c\xb2\xc2\xdd\xb2\x42\x87\xf5\x05\x6a\x7e\xfd\xd0\xf7\x80\x73\xed\x17\x12\x37\x1c\x46\xb5\xb1\x86\x51\xd4\x9e\x5b\x24\x69\x7a\x42\x8d\x61\xaf\x33\x04\xb3\xe3\x35\xe3\xc2\x7c\x33\xe1\x25\xf5\x51\xac\xcf\x0b\xcd\xb2\x34\x2b\x2f\xcc\x5b\x95\x9d\xd4\xf6\xa1\x59\xc3\xca\xc0\x60\xf3\xb4\x6d\xeb\x51\xd1\x88\xfd\x6b\x6e\xa0\x51\x5c\x33\x66\xd4\xda\xad\x86\x9b\xe9\x78\x59\x58\xf3\x18\x12\xd7\x5e\xd7\xf1\x75\xd7\x6b\x62\x0d\xdc\x60\x00\x3f\x9e\xbc\x79\xad\x29\xc4\x21\x37\x02\x94\xbc\x05\xc0\xb1\x36\xc6\xa4\xb1\x35\xc7\x4c\x62\x63\x90\x99\xc7\xdd\x22\x66\x66\x57\x30\x4a\x79\x9f\x40\xf1\xe7\x4d\xc2\x26\x98\xf4\xe5\x6b\xb8\xf9\x65\xf0\x60\x99\xab\x3f\x89\xfa\x43\x8b\xf9\xe5\x2f\x90\x97\x93\x2e\x8a\x6d\x6a\x26\x2f\xb6\xc5\x9e\x77\x45\xcc\x7c\xfb\xef\xbd\x7a\xcc\x27\x8d\x2d\xfe\x1a\x95\x6f\x76\x10\xe4\x9d\x0a\xe6\x48\x0c\x94\xca\xa3\x12\xf5\x1c\x84\x55\x48\xea\xaa\x98\xfc\x32\x06\x3d\x4d\x15\x6d\xad\x8f\xa2\xc2\xbb\xcd\x73\xed\xfb\xe5\x2d\xae\x3d\x38\x94\x61\xbe\xc7\xce\xa2\x26\x42\xac\x3b\xda\xaa\xa4\x6b\x1c\x9d\xab\x21\x73\x0c\xbb\x42\xa3\xac\x6f\x3c\x68\xa5\x20\xdc\x34\x90\xb0\x01\xc6\x65\x50\xdc\x6a\x8b\x5e\x39\xdd\x6c\x6d\x98\x61\x15\x8a\x32\xc4\x5e\x9d\x0d\xd0\x05\x4c\x33\xc5\x7d\x1a\x91\xd9\x53\xe2\xba\xe4\x84\xc5\x6c\xb5\x4a\x20\x89\x89\xf8\x23\x8d\x08\xdd\x4b\x7c\xc5\x92\x19\x9a\x63\xef\xde\xd5\x71\x21\xef\xe5\xfd\x45\xac\x66\x47\x5e\xa0\xc9\x7c\x33\x1f\xdc\x60\x70\x7b\xbf\x8f\x4b\xf7\x43\xb0\x20\xaa\x95\xb4\xdc\xb8\xea\xba\x61\xb5\xda\xd7\x37\xee\x86\x9c\xd5\x53\xb4\x85\xab\x26\x62\x5b\x5e\x9f\x5e\x9b\xfd\xfe\x87\x3f\x07\xa8\x39\xa3\x50\xf4\x90\x57\xec\x3d\xf7\x7b\x46\x57\x51\x89\x0a\x04\x1a\xb5\xdc\x58\x06\xe2\x69\xcc\x7b\x49\xc4\x6e\xd7\x05\x5c\xa8\x7c\x48\x38\xa6\x32\xa3\xb3\xb6\x9e\x23\x8d\xa9\xe1\x00\x41\xf5\x4c\x61\x32\xd9\xb9\xfa\x6a\xb5\x06\x56\xbb\x54\x86\xd5\x5e\xe1\x72\xcd\xdb\x5d\xa5\x44\xa8\xcc\xf1\x69\xb7\x28\x22\xb8\xdf\xdd\x33\xa0\x2d\x42\x85\x73\x4d\xae\x2b\xb6\x88\x7d\xff\xca\xf8\xa3\xf4\xe0\xf2\xf2\x01\xe2\x78\x00\x66\x62\x12\x33\xfa\x1b\x80\xe0\x02\x9d\x7d\x12\x82\x3b\xa0\x40\x45\xbc\x26\x71\xf7\x3b\xf2\x3d\xd6\x71\xe6\x5b\xad\x7d\x34\xe0\xc3\xef\x0e\x0e\x88\x0a\x0b\x8e\x06\x78\x40\x86\x07\xe0\x03\xfa\x75\x81\x72\xfe\x8c\xe0\x99\x7c\x60\xf1\x8a\x25\x33\x04\x86\x50\x86\x8f\x34\x85\x9e\x0b\xde\x24\xab\x96\x59\xad\xfc\xfc\x35\x4d\x99\x45\x0b\xe5\x08\x56\xab\x7d\x19\x61\xca\xac\xa0\x38\xcf\x9a\xaa\x41\x30\x6a\xea\x74\xc7\x05\x6f\x7e\x05\x70\x9f\x3e\xe7\xcc\x2d\xe8\xb2\x80\x24\xee\xf9\x2c\x13\x20\x94\x20\xa0\x18\x27\xc5\xd9\x69\xbe\xae\x88\x99\x62\xf5\x12\x95\x90\x17\x31\x82\x99\xb2\x01\xe1\x61\x88\xdb\x49\xf4\x90\x44\xbf\x27\x2a\x97\x87\x21\x6d\xe7\x2a\xa5\x10\xc7\x66\xd6\xe1\x74\xfe\xb4\x6b\x7a\x49\xe9\x05\x01\x36\xfd\x7b\x9b\xbe\x98\xeb\x54\xd1\x4a\x59\x5c\xb2\x91\x4e\x4e\x59\x41\x7c\x81\x42\x8f\x77\x9c\x51\xca\xfa\xbc\x88\xdf\x24\x7c\xba\xcb\x62\x38\xcf\x3d\xee\xd5\xe7\x9f\x0c\x55\xb6\xc7\x63\xd4\x21\x34\x45\x27\x57\x73\x14\xc7\xf1\x5b\x9a\xa2\xce\xcb\xd7\x2f\xdf\xbc\x7c\x7b\x72\xfa\xf6\xdd\x8b\x97\xab\x55\x3d\xff\xc5\xbb\xe7\x1f\xdd\x02\x2e\x7b\xfe\xb3\xc4\xda\x43\xd4\x5f\xc3\xce\xbb\x31\x17\x77\x81\x4e\x55\x77\x75\x9f\x28\xba\x2c\x20\x8b\xbb\x90\xc4\x5d\x88\x63\x6e\x54\xf1\x02\xd9\xa8\xc2\xb0\xc4\x88\x19\xb9\x16\x32\x32\x38\x95\x76\x7a\xfd\x05\x54\x6f\x16\x47\x02\x43\x53\x5f\x33\x53\x7d\x72\xc5\x23\x88\x23\x85\xd7\x53\xd5\xee\xd8\xb4\x3b\xd7\xed\xce\x8a\xd8\xaa\xf6\xe9\xc1\xf4\x69\xdc\x6d\xb5\x92\x83\xb1\xfc\x2b\xf0\xac\xc3\xe8\x82\xa4\x61\x1e\xb5\xe7\xed\xc5\xf7\xb1\x93\xc4\x22\xaf\x44\x16\xb5\x67\xed\x91\x57\x82\x44\x85\x95\x51\xb6\x3c\x69\x6b\x5a\x30\xed\x40\x7c\x07\x1f\xe3\x0f\x33\x7c\xf6\x30\xbf\xca\x39\xba\x77\x27\x41\x1f\x16\x19\xda\x35\x2a\x97\x3d\x68\x64\xa5\x8d\x3e\x12\xe7\xd9\x82\x49\x75\xf4\xce\x4d\xdb\x1a\x1b\xdb\xcd\x31\x99\x2c\xb2\x84\x5d\xa7\x65\xa7\x4e\xb1\xe9\xf5\xe9\x91\x59\x8e\x6d\xef\x4f\xdd\x55\x43\x97\xfc\xa1\x96\xd8\xc5\x0a\xaf\x5d\x57\x53\x68\xc3\xde\xfc\x2e\xdc\xef\xc6\xb1\xde\x11\x2f\xdf\xfe\xb9\xf3\xf2\xbf\x4e\x5e\xbe\x7d\x71\xfa\xfe\xc3\xbb\x93\x77\x27\x7f\x79\xff\xf2\xd8\x58\x2b\x34\x66\x6a\x07\xb8\xd1\xda\x6b\x50\x95\xef\xb2\x56\xee\x2a\x09\xe8\x85\x51\xfc\xd4\x3e\x6e\x99\x33\x34\x4a\x38\x0a\x41\xb5\x5e\xb9\x54\x61\x14\xe0\x3c\xb0\x45\x53\xeb\x5e\x1c\x5d\xce\x33\x3c\xc2\x3c\xbb\xea\x07\x78\x26\xb0\x3e\x58\x06\xb6\x5a\x50\x04\x63\x46\x67\xc1\x17\x15\x70\x7d\xf1\x1d\x80\xfb\x3d\xb8\xc4\x69\xbf\x0a\xc9\xce\x24\xa3\x67\x49\x96\x03\xb8\x20\x1c\x67\x7d\xf0\xb8\xd3\x95\xd1\x04\x61\x6d\xc5\xc3\x2e\x74\x86\xa8\xee\xf0\xe4\x43\x91\xea\x75\xca\x5a\x3c\xab\x03\xca\x47\xbb\x6b\x80\xca\xa9\x78\x3d\x60\x39\x15\xef\x01\x5c\x4e\x6f\x1b\x01\xd6\xe8\x15\xc7\x45\x76\xe3\xdd\xc8\xc1\xac\xcd\xb1\x15\x9a\x1a\x51\xe7\xdb\x2c\xf9\x84\xb4\xd3\xa4\xcf\xe1\xee\xa4\x81\x08\x48\xbb\x1c\xe7\x42\xc1\xed\xd3\x70\xcf\x52\x2d\xaf\xc2\x38\x4b\xed\x8e\x39\x7b\x1e\xc5\x71\x4c\x2c\xcb\x4c\xb4\x61\xd9\x85\x8e\x85\x4f\x17\x84\xf7\xd9\x00\xe8\xef\xf6\x48\x24\x80\x61\x11\x41\xa9\x30\x72\xb0\xb5\xd3\xe9\x90\xc8\xf7\xbc\x44\x76\x05\xba\x87\xa5\xff\x16\x60\xf7\xd4\x6a\x1e\x92\xa2\x41\x77\x78\x5d\x38\xe9\x13\x76\xc7\x93\xf8\xe1\x36\x78\x6d\x20\xec\x77\x01\xab\x0d\xc1\xa1\xec\xb8\xee\x30\x68\xd6\x75\x4f\x6c\xf6\xd9\x4e\x6c\x56\x39\xb1\x77\x5b\x56\xb3\x5c\xca\x62\xe4\x1f\xe0\xfe\x43\x81\x23\xef\x0f\x06\x0f\x1f\x3c\x84\x40\xf4\x3c\x78\x98\x3f\x78\x88\xcd\xef\xff\x0e\x93\xcb\x15\x47\x39\x8f\xb0\x4a\x7e\xd0\x43\x2a\x27\xa4\x23\x4e\xe7\xab\x73\xcc\xa2\x85\xc9\xc2\xd5\x1c\xec\x67\x24\x19\x4e\xf2\x55\xce\x13\xbe\xc8\x57\x67\x94\x2c\xf2\xa8\xd2\xe8\xd9\x22\x32\x8d\xe5\x65\xda\x78\x9c\x64\x2b\x4e\x67\x09\x8f\xa8\xce\xa5\x26\x77\xc0\xf1\x30\x5a\xcc\x74\x72\xe2\x24\x26\x5e\x5a\xae\x27\x60\x9b\x3d\xec\x87\x83\xff\x1e\x0f\xa3\x31\x5a\x85\x83\x8c\x0d\xa3\xb1\x19\xcc\x83\x47\xe7\xa6\xd0\x14\x9f\x23\x93\x6c\x3a\xfc\xef\x04\x61\xba\xb8\x1a\xae\x7e\x5d\x44\x57\x66\x82\xa6\xc2\xe5\x6a\x34\x5d\xe5\xf9\x2a\x9f\x56\xa7\x36\x4b\x38\x5b\x9d\x23\xc6\x57\x98\xa4\x51\x78\xd8\xc7\x97\x2b\x74\x69\x4a\xe1\x11\x32\x10\x9f\xad\xb2\x88\x2e\x72\x54\xe6\x38\x19\x78\x54\x4f\xa7\xb6\x15\x44\x6c\x12\x22\x26\x51\x75\xff\xeb\x02\xff\x66\x52\x7e\x13\x7d\x0d\xa1\x41\x59\xb1\xfc\x0a\x38\xaa\x68\x9e\xfb\x55\x49\x84\x2e\xec\xea\x5f\xe4\x0d\x20\x5e\xcc\x54\x62\x98\x44\x24\xc9\xae\x56\xe1\x59\x94\xac\xc2\x34\xc2\xc9\x84\xd0\x55\x38\x8f\x12\x86\x08\x9f\x22\xf1\x93\x51\x99\x96\x47\x57\x84\xce\x57\x21\x8f\xa6\x28\x0a\x73\x9c\xaf\x72\x64\xfb\xcd\xb1\xee\xe5\xbf\x13\xd1\xde\xfa\x7c\xb9\x82\xe7\xc8\x8c\x6e\x8c\x9c\x65\xcb\xbd\x49\xf0\x7a\x92\x5c\x75\xa7\x72\xc3\xfa\x62\x9b\x7b\xa5\x61\x13\x21\x56\x26\xca\xdf\x7a\x79\x23\x7a\x5e\x66\x88\xdf\x35\x84\x40\x5e\xf7\xd5\xf5\x14\x4b\x6e\x10\x3e\x8f\x42\x94\x47\x87\xde\x68\x69\xa5\x7e\x98\x4f\x69\x75\x46\x23\x86\x73\xb5\x5d\x43\x9c\xaf\x4a\x78\x61\xbb\x9b\xa3\xcb\x01\x46\x43\x53\xeb\x12\xd7\x36\x73\xb8\xc8\x57\xd8\xd4\x5b\xe4\x6b\x37\x6e\x6d\x80\x12\x0f\x11\x71\x87\x63\xb1\x5d\x60\xb7\x01\xd9\x65\xb9\x1d\xdc\x74\x7c\xe9\xe0\xe9\x6f\x95\xa9\xa6\x09\x4f\xce\x92\xdc\x9d\xee\x10\x62\xc6\x90\xc4\xdf\xf7\x09\x66\x82\x86\x01\xc1\x51\xc8\x80\x50\x73\x44\xe7\x99\x84\x26\x98\x25\x22\x61\xa6\x76\x06\x18\x4d\x71\x96\x02\xa8\xfe\x32\x9d\x98\x0b\x51\x57\xfc\xab\xd6\x12\x48\xd7\x25\x50\xfe\x51\x09\x23\x7a\x01\x20\xf8\x84\x89\x6a\xf2\x37\x3a\x3b\xc3\xa2\x84\xfa\x21\xf7\xd2\x82\x48\xfe\x48\x9e\x12\x03\x80\x7e\x5d\xe0\xb9\x72\x95\x09\x30\x19\x53\xa6\xb4\x7a\x00\x02\xa6\xc2\x3f\xcd\x28\x41\x57\xa2\xd3\x39\x1a\x89\x16\xa4\xbf\x65\xf5\x63\x8c\xf3\xa9\xf8\x9e\x22\x34\x07\x10\xfc\x1d\x25\xe2\x70\x00\x73\x9a\xc9\x1d\xbf\x51\x6c\x6f\xe6\x04\xae\xc7\x3b\xc8\xc3\xe8\x73\x7b\x4f\x32\x8f\xc3\x1e\xfe\xf7\xdf\xf2\xdf\x3f\x78\x08\x49\xfc\x30\x1c\xfc\xed\xe2\x61\x7b\x78\x30\x38\x7d\xf8\xb7\xbc\x3d\x8c\xc2\x41\xd2\xfe\xed\x6f\xe9\xf0\xe0\x41\xf4\x10\x62\x9d\x2f\x72\x0e\xa2\x70\xf0\xac\xfd\xd7\xa1\xce\xff\xbd\xc8\xa7\xf1\x43\x3f\xed\x61\x69\x52\x9d\xa8\x19\x8c\x29\x0b\xd5\xc3\xab\xae\x0c\xd8\xaf\xf8\xde\xef\xd8\xf7\xe4\x3b\x76\x70\x10\xa1\x8e\xb3\x84\x03\x3e\x60\xc3\x0e\xa7\xaf\xe9\x05\x62\xcf\x93\x1c\x85\xd1\x30\xde\xef\x96\xe6\xd2\x79\xe9\x8a\x96\xed\x99\x96\xb5\x6a\xc9\xb4\x4c\xbe\xc7\xdf\x91\x83\x83\x88\xc5\x7c\x40\x86\x10\x75\x2c\xc2\x0e\xd8\xa0\x5b\x6b\x9e\x0d\x7a\xd5\x42\xbd\xad\x85\x8e\x88\x34\x79\x5e\x53\xb6\xbb\xa6\x6c\x53\xe7\xdd\x61\xe1\x1a\xa1\x47\xcb\x10\xc5\x68\xb5\x5a\x16\x91\x0b\x98\xd8\x03\xd3\x6a\xb5\x08\x23\xb7\x0b\xb9\x13\xe3\x6a\x82\x2c\x56\xb9\x39\x5f\x64\x28\x2f\xf9\x0f\x23\xfc\xe6\xab\xd5\xc0\x39\x97\x4a\x21\x4f\xa6\xdb\x56\xfb\xa2\xdb\xea\xbc\x64\xa2\xbb\x0d\x17\x61\x54\xec\x25\x21\x87\xde\x98\x23\x98\xcb\x24\x7f\x88\xfa\x4e\x13\xc9\xa7\x29\xcf\x93\xd1\x14\x85\x51\x81\xc7\xe1\xbe\x46\x75\x75\xc9\xd7\x6a\xf9\xdf\xd2\x4e\x35\xaa\xc4\xbb\x77\x03\xa2\xa9\x50\x68\xd2\xb3\xc6\x19\xa3\x17\x39\x62\x41\x4a\x51\x1e\x10\xca\x83\x7c\x31\x97\x72\x73\x43\x8b\x30\x98\x2b\x31\x7b\x4e\xb3\xab\x31\xce\x02\x21\x83\x05\x28\xff\xb2\x9d\x4f\x93\x59\x3f\x98\x72\x3e\xef\x3f\x7c\x38\xc1\xbc\x83\xe9\xc3\xab\x1f\x3e\x3e\x62\x13\x10\xed\x39\xc6\xfc\xca\x06\x1b\xc5\x0d\x8d\x1b\xe9\x0f\x75\x4e\x53\x3c\xd2\x26\x1e\xfa\xad\x93\x4e\x83\xa8\xc8\x4a\x85\x40\xbc\xf4\xc0\xa2\x2e\x99\xe7\x0b\x36\x31\x29\xda\x4c\xaa\x64\x80\xe3\xba\x34\xa4\x9d\x08\x8e\x44\x8d\x8f\x39\x4a\xe3\xfd\xae\xb1\x75\x92\xad\x0c\xd0\xd0\x18\xba\x94\x29\xfa\x49\x89\xab\x90\x90\x0e\x2b\xd4\x08\x0c\x2b\x1f\xfb\x32\x8c\xbc\x73\xaf\xf7\xa6\xc5\xb6\x81\x2c\xd3\x71\x85\x5c\xeb\x46\x5a\x55\x9a\xab\xde\x49\x39\x1e\x9b\xa2\xc7\x53\xea\x92\x94\xd0\x14\x15\x05\x74\xe1\x51\xef\xbd\xe7\xcd\x35\x5e\x18\x98\xe9\xa6\x45\x42\x01\x53\x9c\xd7\xc0\x6c\x6a\x94\x06\xd1\xa6\x4a\x99\xb2\x13\xe0\x7d\x18\xae\x07\x61\xa5\x5a\x39\x55\xcf\x1e\x52\x4c\x58\xe6\x38\x56\x2a\xe5\x7c\xb5\x95\x47\x1d\x45\xe4\xae\x37\x5b\x5d\xa9\x1b\xc4\x7a\x54\x88\x51\x54\x58\x0a\x70\x93\xe6\x4d\xdd\x4d\xed\x3b\xf4\xa0\xf4\xbe\xb3\xb1\x83\x24\x2c\xbb\x80\x03\x54\x6f\xd2\xd2\x93\x9d\xc7\x9c\x7b\x4d\x8a\x81\x0e\x45\x43\x8e\xa6\x72\xb7\xb5\x80\x55\x84\x94\x3b\x40\x57\xb5\xcf\x4e\xf8\xa1\xbe\x6d\x96\x87\xbc\x28\x58\x5b\x11\x37\xc9\x4e\x27\xea\x87\xbd\xfd\x38\x9e\x27\x2c\x47\xaf\x32\x9a\xf0\x10\xc9\xb7\xbe\xb1\xd7\x1c\xdf\xb9\xb9\xa8\xb2\xfb\x0e\x79\xff\x97\x07\x4b\x54\x04\x0f\x96\xbc\xf8\xc5\x59\x7b\x85\xa9\x9b\xb1\xf8\x74\x43\xe1\xc6\x99\x9a\xf2\x8d\x63\xd3\x07\x89\x58\xcc\xb2\x2e\x4c\xd4\x31\xdf\x10\x7b\x53\x7a\xd6\x8d\xa5\xdf\x9b\x8e\x60\xba\x43\x14\xc1\x79\x4c\xed\xef\xb1\x31\xec\x41\xa2\xe4\x28\xae\x60\x0d\x4c\x63\xd2\x41\x97\x68\x14\xa2\x68\xb5\xc2\xe6\x27\x4c\x5b\xad\x70\x1a\xa7\x83\x47\x95\x53\x3a\x82\xe7\xce\xe1\xe9\xb1\x2b\xa3\xa1\xb6\xf4\xa9\x67\x4d\x87\xf0\xbc\x1c\x87\x60\x55\x66\x01\x26\x41\x12\x89\x21\xe9\xd0\x9e\xb3\x03\xf0\xa0\x74\xeb\x92\xc5\xc9\x60\x36\x84\xf3\x56\x2b\x19\x4c\x87\xad\x56\x98\x69\xfd\xbe\xd6\x14\x8f\x92\x39\xe6\x0a\xdd\xb2\x08\xce\xd6\x66\xce\x22\x15\xec\x63\x9e\x25\x23\x14\x8a\xf3\xf0\x03\x9a\xbc\xbc\x9c\x87\x33\x08\x30\x88\x60\x16\xc9\xe1\x08\xba\x3c\x29\xb9\xa6\xc9\xd3\x6e\xab\x15\xe6\x31\x1f\x4c\xda\xbd\x21\x9c\xc5\xd2\x41\xe2\xfe\xcc\x40\x35\xfa\x6e\xd2\x6e\x47\xdf\xe9\xb1\xe6\xb1\x62\x19\x74\xb1\x2c\xce\x05\x83\xb4\x88\xcb\x7e\x67\x30\x8b\xe0\xa2\x28\x60\xe6\xdd\x04\x95\x9e\x3b\x61\xd6\xb1\xec\xb0\xd4\x94\x66\x61\x69\x9d\x20\x4f\x8d\x51\x9c\x6d\x33\xec\x5f\xaf\x63\xbb\xbe\xe6\xee\xce\x79\xef\x8d\x64\xde\xcc\xab\x04\x42\x67\x2d\xa1\x41\x5b\xcf\x9a\x86\xd6\x2a\x7b\x76\x1b\xf4\xea\x1a\xdd\xfb\xbd\x48\xb7\xef\xa1\x55\xbc\x01\xdf\x36\xcf\x8f\x41\x80\x1c\x17\x56\x3f\x9e\xbc\x79\xfd\x43\xc2\xf2\x4a\x79\x9d\xda\x11\xf3\x91\x3e\x5a\x7e\xb4\x55\xfd\x82\xf2\x35\xfa\x59\x73\xd1\xa2\x1e\xa8\x08\x13\x9e\x95\x8f\x2b\x64\x00\xd1\xb6\xe0\xd5\xf2\x9a\x37\xff\xac\x3d\x43\x79\x9e\x4c\x90\x92\x42\xef\x1e\xbb\xde\x1c\x1d\x1f\x1f\xbd\xfd\xe3\xe9\xc9\x87\x67\x6f\x8f\x5f\x3f\x3b\x39\x7a\xf7\x36\x2e\x53\x8f\xde\x9e\xbc\x3e\x7d\xf6\xfe\xa8\x2a\xf8\x71\x15\xc3\xf6\x39\x4d\xeb\x65\xf7\x1a\xaa\xb3\xbd\xe6\x9e\x40\x43\x62\x43\xe0\x15\x1f\x5e\x0a\x14\x32\x14\x7a\xfb\x2c\xc9\x77\x8e\xcf\xe8\xc4\x5d\xb9\xd7\x57\xba\x77\x27\x6f\x37\xc9\x03\xea\x65\x0c\xf1\xde\x71\x0a\xa6\x48\xdb\xb8\x1a\x57\xad\xe6\x21\x6b\x69\x99\x9b\xa4\xaf\x24\x20\x9f\xaf\x29\xa1\x7a\x79\x9b\x70\x7c\x8e\x5e\x19\x90\x3b\xc5\xa6\x32\x30\x89\xa8\x1b\x9b\x43\xba\xd2\xa6\xa4\xe3\x7e\x52\xe5\x41\xa5\x5a\x80\xc1\xb0\x18\xe3\x8c\x23\xf6\x13\xa1\x17\xc4\x9a\xdf\xfa\x86\x48\x01\x2b\x2d\x23\x0a\x79\xf4\x68\xa8\xc8\xc5\x8b\xdc\xf7\x7e\x1d\x4c\x46\xd9\x22\x45\xb9\xb4\xb8\x08\xb9\x32\x0f\x63\x43\xc7\xdc\x45\xfa\x12\x2d\x3b\x92\xf6\x37\xea\x78\x6e\x1c\x89\xa0\x14\xa8\xd5\x02\x7a\x17\xca\x1e\x97\x3c\x5e\x76\x3a\x1d\x59\x69\x82\xf8\xdb\x64\x86\xf4\x54\x43\xd4\x51\x05\x23\xe9\xc3\xa4\x28\x6c\xb7\xe6\xe5\x9e\x85\xa7\xed\x42\xec\xe5\xa2\xda\x4c\xb4\xac\x18\xac\xfb\xc0\x0c\xa3\x81\x59\x05\xb3\xf4\x1d\x41\x46\x86\xd2\x2e\xb9\xd5\xe2\x03\x34\x34\xd0\x13\xbf\x5d\xc3\x5e\x02\x79\x48\x20\x10\xc5\xcb\xd7\xae\xd7\xd8\x78\xea\x77\x5b\x4c\x86\xe3\x59\xe5\xf6\x4f\xbe\xa6\x9f\xa1\x19\x95\x57\x30\xbb\x6d\xe2\x6d\xb7\x59\x8e\x53\xe6\x7f\xc9\xdd\x8b\xe3\x01\xc8\xe8\x28\xc9\xd0\x1b\xf5\x22\x53\xc0\x49\x02\xa1\xfc\x16\x90\xfc\x2b\x25\x02\x66\x53\xba\x60\xbd\x47\xd2\x58\x12\x7d\x4a\x93\x2b\x01\x46\x96\x00\x08\xae\x50\xc2\x94\x0a\x92\x4f\x01\x04\x2a\x4b\x94\x16\x89\x98\xe8\x30\x70\x68\x44\x49\xea\xb4\xa8\xc2\xea\xca\x72\xcf\xaf\x46\x19\x02\x43\x4d\x38\xa8\x7d\x52\xc7\x36\x3c\x09\x77\x9f\x81\x93\xcd\xf4\xc1\x7f\x8f\x20\x11\x3b\x7e\x2a\x18\xb3\x23\xc2\x33\x15\x57\x19\xcf\x90\xc1\x70\xc8\xa3\xa8\xfa\xca\xda\x84\x85\x2a\xc6\xb6\x90\x58\x6e\xf3\x5c\xc5\x6e\x05\xb3\x77\x8c\xbb\x95\x0d\x9b\x8b\x44\x9e\x96\xa0\x71\xe8\xb2\x98\xde\xb8\x92\xdf\x15\x63\x0d\xb9\x6f\x0f\x4f\x21\x09\xe9\xcd\xb7\x8d\xb3\x6b\x9a\x59\xcb\x5d\xb7\xdb\x67\xd7\xf0\x4a\xe4\x60\x0d\xfe\x02\x0a\xeb\xfa\xc2\x35\x5a\x82\x34\x06\x6a\x56\x21\x8e\x15\x78\x22\x4c\x42\x12\xb3\x68\xcd\xce\x14\x4d\xe8\x21\xd0\x6b\xed\x4c\x32\xc0\xc3\x98\x5e\x1f\xe8\x9a\x91\xda\x48\xa9\x1a\x38\xae\xe6\xb5\x51\x7c\xae\x14\xab\x9b\x9e\xc4\xae\xa3\x5d\xf8\x5f\x92\x76\x2d\x4b\xfe\xb6\xbf\xfc\x28\x66\xde\x5f\xa2\x7c\x94\xcc\xd1\xcb\xcb\x39\x43\x79\x8e\x29\xe9\xd3\xa2\x28\x94\x30\xa9\x91\x27\xa9\xb2\x24\x78\x0d\x4b\x82\xb7\xb2\x24\xf8\xba\x24\x07\x12\x4d\x74\x2c\x51\x53\xa9\x70\x89\x27\x84\x32\x74\x92\x4c\x94\x75\xd1\x8d\xf9\x18\x9f\x36\xa9\xa0\x76\x7c\xaf\xfe\x94\xae\xd5\x0a\x71\xec\x3f\xee\xe5\x51\x64\x9f\x37\xb3\x56\x8b\x75\xa6\x7c\x96\x1d\x27\x63\x04\xb5\xdb\x82\x66\xf2\x84\xe1\x9a\xe1\x85\x51\x04\xb3\x38\x39\xac\xbe\xdd\xd0\xcf\xd9\xf6\xcd\x58\x6a\xaf\xe0\x9a\x5d\xc4\xa0\xd2\x45\x0c\xb3\x5e\x55\x89\x64\xa0\xf6\x3c\x65\x01\xce\x85\x80\x24\x06\x1e\x92\xe8\x50\x72\x59\xa4\xc3\xa9\x48\x0c\xa3\xbe\xfc\xae\xc1\x83\x1c\xd2\x90\x44\x7d\x52\x44\x90\x17\x21\x8b\xfa\x0c\x2e\xe2\xdc\x50\xdd\x52\xbd\x9d\x1c\x7a\x5d\x19\x08\x85\x8b\xa8\xbf\x70\xe9\x71\x02\x71\x98\x18\x7a\x0c\xcc\x16\xbf\x01\x49\x26\x32\x48\xff\x7f\xd8\x98\x9b\xb0\x31\x39\xbf\xca\xe4\x2b\x88\x05\x63\x88\x8c\xae\x9c\x9f\x2f\x70\x3e\xcf\x24\x8b\xb2\x20\xf2\xc9\x87\xf8\xe3\x24\xe6\xe8\x8f\x8c\x2e\xe6\x52\xd5\x22\xd8\x17\x3c\x5b\xcc\x8e\x08\x47\xd2\xf9\xdd\x04\xcb\x65\xd0\xc9\xaf\x98\xf2\x65\x53\xa6\x27\x97\xcd\xe9\xaa\xfc\x31\x9e\x10\x3c\xc6\xa3\x84\xf0\x6a\x95\xa6\xac\x11\x9d\xcd\x93\x91\x33\xb6\xfa\x14\x4c\x8a\xa8\x0e\x20\x20\x94\x9b\x7b\xe1\x1c\x4f\x88\x3f\xd5\xca\xc4\xff\x41\xec\xd6\x5b\x89\xd5\xff\xec\xcc\x16\x5f\xcf\x62\x01\xbd\x2f\x6f\xb0\xa3\x19\xca\x64\x9f\x77\x73\xe0\x7b\x4a\x9a\x1b\x92\x02\xe5\x9e\xab\x99\x1c\xd0\x7f\x4d\x72\x90\xc4\x03\x20\xfb\xc7\x23\x87\x10\x78\x28\x5f\x3a\xed\xc0\x3b\xa2\x3c\xbd\x01\xca\x4b\x5d\x81\xc0\xf9\xd5\x4a\xfe\xe9\x7c\xd0\xcb\x5f\x4a\x1b\xa5\x73\x40\xc5\x19\xa8\x54\x75\xcb\xfb\xc5\x9a\x3a\x01\x56\xd7\xbd\xc9\x79\x82\xe5\xcb\x7a\x15\x4a\x01\xe7\x81\x13\xd4\xa7\x13\x9c\xb0\x2b\x73\xdb\x9b\x61\x32\x09\x30\x0f\x16\xb9\xf8\x01\xfe\xa0\xd0\xe2\xef\xf9\x43\x89\x6a\x06\x29\x05\x13\xaf\xf1\xed\x0b\x48\x6a\x0a\x33\xb1\xc9\x18\xbd\x08\x1c\xe6\xa4\x43\x89\x1a\xea\xf2\x13\x26\x69\xbf\x5e\x07\x4a\x14\xed\x23\xb1\x58\x46\xe3\x60\x09\x41\x7d\x66\xea\x29\xfa\x3a\x7a\x90\x54\xe8\x81\x64\xfa\x7d\xdf\x1c\xd7\xa4\x0a\xd8\x30\x3d\xca\x29\xda\x7e\x1c\x87\x44\xfe\x8a\x63\x76\xa8\x70\xaa\xcf\x3a\x02\x73\x22\xc7\xa1\x1b\x39\x24\x7d\x2c\x53\x77\xa2\x29\xd8\xd2\x14\x43\x38\x1c\xa7\x06\xbc\xef\x48\x75\x9d\x09\xe2\x02\x18\x61\x04\xa9\xff\xe2\x19\xd2\x30\xb7\xe4\xc7\x12\x91\x1b\x10\xa0\xba\x5e\xe4\xdf\x41\xca\x53\xb3\xfa\xe7\x93\xf2\x36\xbc\x79\xda\x65\x99\xae\x25\xb9\x5f\x93\xa7\xbc\xae\x80\x7a\xdd\x03\xee\x33\xf9\x64\x5a\x5b\x41\xed\xb8\x13\x09\xb7\x3b\xb4\x07\x57\xcd\xbe\x90\x10\xde\xd1\x6c\x7b\xf7\x66\xdf\xea\xb5\xd8\xa9\x61\x72\x8d\x86\xdf\x98\x55\xdb\xa9\x65\x7c\x8d\x96\x3f\x58\x06\x66\xa7\xa6\x69\x67\x73\x28\x69\x17\x99\x72\x4e\x19\x7a\x38\xa2\x84\x27\x98\xac\xf3\x54\x50\xaf\xc0\x59\x42\xf2\x4c\x31\xbd\xf7\x13\xa1\x51\x49\x81\xba\x35\x13\x99\x5e\xc9\x1f\x79\x25\x6c\x58\x08\x4e\x9d\xf1\xbd\xa1\x29\xca\x72\x00\x1b\x22\x8d\xcb\xb7\x34\x9d\x31\xa3\x33\x1b\x5f\xa1\x52\x4d\x09\xc2\xf2\xed\xd1\x96\xa8\x63\xc6\x12\xa8\xd6\x84\xe4\x31\xde\x24\xf3\x02\xaa\xb3\xea\xa4\x52\xc0\x0d\xd1\xe3\x85\x8c\x75\x5f\xe5\xae\x19\x9d\x72\x5a\xc4\x74\xdf\x84\x72\x3c\xbe\x32\x30\x7e\x3e\x4d\xc8\x04\x85\x5a\x46\xcb\x41\x04\x59\x01\xc7\x98\xa4\x4d\x03\xd8\xd2\x8f\xf2\x8b\x53\x40\x69\x8a\x53\x5a\x4c\x9a\x7b\x92\xc6\x36\xf7\x98\x74\x51\xe2\x9c\xd2\x0d\x85\xb4\x03\x73\x27\x27\x17\x42\x00\x9c\x26\xfa\x26\xc4\x0b\x5e\xb4\xae\x27\x3c\x0e\xed\x05\x2f\xeb\x88\xba\xa2\x8d\x53\xed\x76\xe5\x7a\xed\x48\x35\x8c\x6c\xa1\x6c\x51\xfa\x3d\x16\x4d\xaa\x16\x9f\xe5\xbc\xa1\x51\xb7\xbb\xca\x88\x92\x9c\x9b\xba\xd7\xab\x48\x19\x9e\x60\x92\x64\xbe\xd7\xe3\xc6\x87\xa1\x9b\xf7\xe8\xd6\x6d\xad\x5f\xbd\x67\xe2\x60\x21\x37\x51\x75\xfe\xdb\x68\x37\x54\xa0\x4b\x15\xde\x59\x70\xc4\x6a\xff\xbc\x4d\x66\x35\x43\xae\x32\xa7\xa8\x28\x38\x8d\xa8\xee\x2c\x41\xae\x5c\x0c\xbe\x49\xe6\xa5\x24\x9f\xe4\xbc\x29\xd9\x69\xb8\x72\xcb\xea\xe4\xc4\xa8\xa8\x6e\x1c\x54\x4a\xeb\xbe\x64\x84\x22\xe7\x9a\x54\x2e\x00\x51\x3b\x18\xc5\x64\xc0\x87\x56\x59\x59\x2a\x08\x5b\xad\x10\xc5\x00\x1c\x20\x1b\x47\xa4\xec\x47\xf9\x4d\x82\x26\x4b\x4c\x42\x27\xf9\x6f\xe9\x50\x14\x15\x85\x72\x19\x5e\xba\x0a\x94\x1b\xdb\x6c\xad\x65\x92\x1b\xc7\x76\xa2\x11\x1d\x7d\xd9\x20\x7d\xbf\xde\xb3\xa6\x43\x85\x6a\xc5\x5b\x0d\xaf\x9c\xca\x2f\xb6\x46\x22\xad\x63\x37\x9a\xcd\xf9\x55\x5b\x2b\x4c\xef\xed\x29\x97\xd1\xc3\xd6\xaf\xf5\xa1\x2b\x21\xf7\x75\x23\xda\xbf\x9a\xbb\x41\x7a\xde\x86\x28\x1c\x23\x62\x16\x46\xcb\x82\x39\x66\xc0\x5c\x9b\xd0\xb2\x6d\xef\x17\x37\xd0\x87\xdd\xc8\x89\x07\xcc\xcf\xee\x92\x26\x40\x21\x31\x3b\x00\xfb\x47\x69\x03\xfa\xe3\x71\xb8\x6f\xbc\x1e\x43\x1e\x45\x82\x05\xc2\x64\x81\x4a\xd9\x54\xec\x0c\x47\x7b\x6e\xe5\x47\xda\x6a\xd1\x92\x84\xa3\x90\xba\xbb\x4b\xaa\x05\x58\x84\x07\xbf\x3c\x58\xf2\xa2\xf3\x60\x89\x8a\x5f\x86\x31\x1b\xa0\xa1\x72\x2e\x89\x05\xa1\xa2\x85\x55\xb6\x55\x2d\x3a\xca\xe7\xdb\xbe\x35\xfa\x6e\xeb\x33\x41\xfc\x9e\x7c\x6f\x55\x7c\x96\x2c\x99\x74\x7e\x89\xa4\x8f\x15\x69\x26\xb9\xcf\x57\xab\x7d\xde\x39\x4d\xe9\xcc\x70\x0b\xbe\xe3\xb4\xc3\x8a\x1f\x35\x14\xf5\x51\xc7\x32\xa2\x90\xc4\xcc\xfa\x4d\xd3\x4e\x76\xfb\x6d\xe3\xbe\x44\x05\x1d\x24\xe6\xa0\x24\x7b\xdc\x29\x6d\x87\x22\x41\x21\xcd\xff\xd5\x38\x5a\x2d\xf5\xd7\xfa\xfc\xb2\x26\x11\x7e\xb2\xe1\xba\xa4\x33\xe3\xdd\x00\x3f\xbd\x4a\xd9\xa6\xab\x5c\xef\x20\xf8\xfc\xce\x99\x50\xb4\x2c\x4d\xf8\xac\x9b\xff\x01\x87\x6c\x18\xc5\x4f\x97\xa8\xce\x73\x41\x16\x15\xcd\x46\x7d\xf5\xc9\xe2\xbc\x9d\x08\xce\x59\x47\x48\xb8\x4f\x64\xd3\x31\x9a\x74\xc4\x10\x9c\xab\xd7\xf0\x28\x5a\xad\x2a\x49\x96\x7d\xdb\xef\x49\x93\x9d\x38\x8e\xad\x8f\xaa\x6e\xf9\x74\x82\x53\x75\xaf\x14\x46\xa2\x80\xf3\xb9\x23\x28\x66\x38\xcf\x31\x99\x34\x5d\x29\xdf\x17\x2c\xcc\xbc\x5f\x0a\x62\x5b\xce\xfb\x97\xb7\x54\xb3\x2e\x81\xf6\x8a\xd7\x09\x82\x8f\xf2\x01\x48\xc0\x69\xa0\xa3\x94\x07\x0e\x62\xf6\x03\x20\xc8\x15\xf8\xc5\x31\xee\xfb\x3b\xc5\x24\x04\x30\x00\x46\x14\xf9\xe5\x8d\x9a\xb1\x5b\x51\xd7\x0b\xc6\x94\x99\x2e\xc1\x83\x25\x2b\xc0\x2f\x3b\x42\x91\x08\x29\x37\xc3\xbf\xa1\xb6\xaa\x7e\xff\xa6\xa2\xb5\xeb\x49\x6b\x6c\x56\x5a\x20\x3f\x3c\x7d\x38\x81\xa0\x0d\x22\xdf\x9c\x7b\xc7\x39\x2a\xb6\x79\x8b\x55\x67\x5b\x96\xfa\x0c\xa6\xc3\x4d\xd3\x76\xdc\x1b\xc8\x6e\x65\xe0\x47\xbb\x14\x3f\x26\xf9\x94\x27\x93\x23\xf2\x5e\x5a\x11\xcb\x68\xde\xde\x8d\xf9\xba\x79\x1b\x8f\x10\x46\x87\x79\x1d\xc3\xcc\xbb\xe3\xa4\x3c\x3b\x5f\xa3\x2e\x10\xe3\x53\xa1\xca\xb5\x00\x6f\xb8\x52\x87\xc7\x92\x84\xa2\xf6\xf4\x4b\xe9\x61\x54\x73\x01\xce\x83\x84\x04\xc9\x59\xce\x59\x32\xe2\x81\x14\x15\x60\x30\x4a\x88\xbc\x20\x38\x33\x9e\xb7\x64\x18\xfe\x34\x50\x9e\xdc\xb2\xab\x0e\x30\xc1\xa0\x3c\x85\x81\x18\x53\xa3\x4b\xd1\xda\xe9\x27\x4a\x02\xa7\x56\x87\x12\x23\xdd\x2b\x59\xdf\xc6\x5e\x63\x48\xab\x42\x40\x54\x40\xad\x06\x8f\x96\xb5\x49\x89\xd1\xe2\xd9\x5c\x79\xbc\x44\xa9\x28\xac\xeb\x85\x03\x34\x6c\x24\x2f\x28\x52\x37\x00\x4c\x9e\xbf\x5a\x7b\x2f\x08\x45\x92\x65\xf4\x42\x96\x71\x95\xf6\xec\xd0\xb8\xb8\x2e\xb3\xb5\xe9\x01\x1e\x87\xf6\x4d\x0b\xaa\x01\x5c\x54\x3a\x00\x81\xc2\xa5\x80\xa1\x5f\x17\x98\xa1\x3c\x90\x2b\x1f\x24\x26\x44\x6b\x07\x44\x85\x2b\x03\x8c\x9d\xfb\x0c\xe8\xfb\xa3\x5d\x03\xf9\x0e\x1d\x8f\x77\x00\x62\x11\x19\x4f\x4d\x3b\x88\xe1\x66\x03\xec\x62\xe2\xd5\xb8\x59\xee\x47\xa1\x56\x32\x08\x66\x7b\x94\x8b\x24\x04\x6c\x07\x98\x55\x3f\x97\x99\x86\xb4\xbc\x41\x91\xd0\xde\x49\x3f\x51\x01\x4c\xa3\x19\xd6\x3f\x2b\x6c\x76\x80\x86\xd6\xff\xde\x1c\x20\x4d\x96\x27\xff\xc2\xf0\x50\x8a\xf6\x9b\x83\xa3\xf9\xda\xfe\x5f\x18\x20\x46\x8d\xaf\x09\x94\xa1\xb5\x2a\xa2\x42\xf5\x85\x9c\xa4\x54\x37\x86\xdd\xc6\x1b\xc7\x7f\x35\xb8\xc9\xdb\xd9\xeb\x83\x62\x4d\x1c\x96\x7f\x29\x00\xf0\x6b\xcc\x7b\xf3\xbd\xa7\x13\xa8\x86\x67\x7e\xd6\x2c\x19\x31\x5a\x13\x4b\x6f\xed\x45\x4a\xab\x99\x96\x3a\x36\x8b\x48\x5b\xdf\x86\x2e\x74\x8b\x6b\x44\x79\x53\xc3\x9a\xa2\xda\x89\xb5\xd4\xe5\xc1\x7e\x1c\xf3\x56\xcb\x1d\xb2\x4a\x09\xb7\xe8\x5f\x4a\x4d\xd1\x6a\xa5\x54\xd8\xad\x96\x54\x3a\xc7\x31\x93\x0e\x82\x37\x28\xb4\x77\xba\xc1\x1c\x70\xe9\x12\x64\x8d\x9f\x3b\xbb\x4a\x5b\x56\xd9\x16\x6a\x5e\xe3\x87\x35\x35\xdc\x67\xf4\x15\xa6\x06\x71\x87\xd7\xc2\xfc\x4e\x6f\x83\x59\x72\xb1\x73\x7b\x2c\xb9\x58\x7f\x97\xea\xc1\xfc\xfe\x04\x57\x65\x2d\x65\xd5\x90\x9d\x39\x9d\x87\x11\x24\x31\xf2\x5f\x24\xda\x4b\x51\x7e\x00\x3a\x46\xbc\xee\x74\x3a\xc4\x1f\x5e\x25\x42\x27\xb7\xd1\x49\xab\x01\xfc\x64\xae\x19\xdb\x75\xe4\x16\x4f\x5b\x5d\x18\x1b\x20\x52\x8d\x5c\xca\xed\xa5\xa7\xd6\xce\xca\x54\xa2\x4d\x9e\xe5\xfe\x80\xa8\x73\x7a\x2a\x5a\x3d\x92\xa1\x0f\x31\x25\xf2\x42\xa4\x22\x01\x2a\xf1\x1a\x1c\x08\x26\xb5\x43\xe8\x85\x0c\xdf\xaf\xd5\x3b\x8f\xbf\x12\x04\xb5\xa9\x91\x46\x67\xff\xee\xfe\xb9\x89\xea\x7b\xed\x16\xbd\xd6\x2d\x9a\x63\x8c\xe9\x2b\xb7\x1b\x4c\xb7\x1d\x3a\xc8\xe3\xa7\x4b\x22\x28\x55\x09\x68\x04\x05\xb9\x89\x8a\x08\x92\x9b\x5c\x98\xb1\xe4\xa2\xe9\xd1\xb0\x8c\x2d\x25\xaf\x89\x1b\xb5\x55\x56\x67\x9e\xc4\x74\xb5\xf2\x66\x00\x07\x39\xcc\x86\x5e\x9b\x8d\x37\xe2\x70\x87\x99\x23\x7f\xe6\x46\x9b\x2f\x68\xf5\x1e\x75\x7d\x62\xe3\x43\x09\x15\x1d\x18\xf4\xdd\x38\x8c\xfa\x4c\x29\xe7\x23\x38\x60\x90\x0c\x8b\x30\x89\xe0\xc2\x28\xe6\x65\xa9\x3c\xcc\x0d\x7a\xfa\x77\x5d\x9d\x4e\x67\x01\x65\x74\x4b\x1c\xc5\x4f\xb9\x3c\xb7\x97\x9d\x4e\x27\x93\x5b\x2d\xc4\x50\x61\xae\xb6\xb3\xc2\xd5\x07\x11\x35\x2c\xf8\x9c\xb7\xa4\x45\x64\xee\x19\x55\x80\xd6\xca\x15\xa3\x8a\x93\x8a\x0a\x0b\x16\x9f\x31\x95\xc9\x45\xa9\x28\x35\xb9\xfa\xdb\x29\x14\x15\xeb\x1e\x3c\x57\x78\x91\xdd\x2d\xb5\x36\x6e\xb9\xaa\x5a\xfa\x5a\x0a\xc7\x5d\x2e\x55\x76\xd1\xff\xef\x64\x64\xb3\xc6\x4c\x0b\x26\x9f\x85\xe9\xcc\x63\x2f\x46\x9e\x61\x3c\xb5\x3b\xe7\x73\xa9\xfb\x81\x9a\x0d\xcd\x95\x7a\xac\xd9\xae\xa6\xb4\x80\xf1\x0c\x6c\x9e\x9b\x79\x75\x4a\x53\x13\xf5\xab\x6e\x97\x63\xc0\xbd\x54\x96\x2b\xbc\xbc\xaf\x53\x45\x67\xc9\x27\x64\x14\xf8\x9d\x59\x32\x0f\xcb\xd7\x32\x8d\xfb\x0e\x7b\xf7\xe2\xd1\x6a\x55\x0f\x82\x6e\xba\xc4\x6e\xe8\x36\x15\xa6\xc1\x58\xfd\xe0\x19\x62\xd6\x7e\x47\x7c\xc4\x65\x49\x82\x2e\x79\x28\x63\x0f\xea\x6b\x66\x19\x8f\xbf\xaa\x33\x32\xb5\x17\x32\xfe\xe7\x0b\x7d\x91\xf4\x3a\x21\x93\x45\x32\x41\xa1\x37\xc8\x22\xf2\x6f\xf3\x0b\xc1\x76\x94\x1b\xa9\x1a\x2b\xdb\x4c\x40\x48\x01\x70\xce\xf0\x2c\x61\x57\xaf\x9b\xc0\xeb\x2c\x8f\xaa\xd2\xe9\x82\x08\xfa\xa2\x67\x3f\x0b\x1d\x4b\x56\xe8\x29\x2e\x44\x9e\x7d\x37\x03\x5d\x19\x5e\xe4\x18\xf3\x7b\x58\xca\x64\x22\x59\x0a\x9a\x26\x51\x1c\xb5\x22\x51\xaa\xbc\x22\xd8\x88\x24\x0a\xc1\xf4\xa4\xf4\x87\x84\xb9\xfe\x5d\x6e\x76\x4f\x53\xeb\x4a\xc5\x9e\x37\x8b\xbd\x75\x71\xde\x0d\xd8\x56\xab\x01\x40\xa4\xbd\xc8\xc1\x50\xe9\x5f\x73\xc4\x15\xfc\x6c\x58\xab\x53\x2a\xd8\x97\x46\x2d\x6c\xdd\xaa\xcb\xce\x24\x4e\xac\x2c\xa7\x2f\xec\x4d\xe9\x72\x0e\xda\xc2\x47\xe5\x5b\xfb\xe4\xdc\x94\xd4\x9b\xce\x78\xa8\xd2\x9f\xb1\x33\xa8\x8e\xbe\xa8\xd1\x01\xe3\xe4\x08\x42\x60\x36\xeb\x2c\xc1\x04\xc8\x10\xec\x91\x8a\xff\xe4\x45\x0f\xde\xa8\x04\x6d\x8a\x8b\xb9\x66\x67\x14\xd0\x5a\x9c\x5b\xcb\x72\xad\x4d\x46\x9b\xed\x9a\x04\x94\x7f\xc6\x7c\xfa\x42\x5b\xb4\x71\x15\x5a\x93\x58\x57\x7b\x38\xee\x7e\x87\xbf\x67\xd6\x79\x75\xa8\x1f\x9a\xac\xa3\x2f\xb2\x2b\x36\xc0\x43\x88\x9c\x50\xdc\x24\xfa\x0e\x1f\x1c\x58\x67\x32\xa4\x62\xa8\xa5\x3d\x29\x79\x2f\x59\xd6\x0f\x0e\xdb\xc1\xd1\xb8\xfb\x1d\xfd\xbe\xf4\xac\x1d\xe2\xed\x83\x13\x5d\x92\x01\xf5\xc7\x87\xa3\xef\xa8\x18\x9f\xab\xf3\xc6\xad\xd6\xbe\x54\x91\x8b\x15\xc6\x19\x46\xa4\x22\xff\x6f\x5a\x7f\x71\xe8\xf4\x15\x37\x59\xb9\x80\x8c\x1c\xa6\x19\x41\x02\x59\x54\xda\x1a\x40\x63\x94\xff\x13\xba\xca\xfb\x28\x7e\x8a\x4a\x61\x59\x06\x57\x8d\x20\xb7\xda\x28\x75\x65\x3f\x40\xc3\x3d\xcb\x6e\xb5\x5a\xa1\xb2\x98\xb4\x97\xac\x16\xdf\x0e\x59\x3c\xe8\x74\x3a\x4c\xba\x39\x30\xa9\xc3\x7e\xfd\x15\xa4\xd3\x96\xa9\x52\x96\x37\x84\xd1\x1d\x67\xc8\x22\xd7\x31\xe3\x77\xc4\x62\x8b\x74\xca\x68\x5f\x72\xb0\x01\x19\xea\x10\xe4\x1d\x6f\xf5\xf5\xa9\x24\xd9\x31\x0e\x2d\xb0\xfb\xa6\x99\x76\x6f\x3f\x8e\x49\x21\x2d\x0a\x70\x54\xbf\x4e\x30\x6a\x5d\x2c\x15\x31\x10\x5d\xe2\x9c\x37\x19\x27\x36\x63\x54\xe9\x57\x9a\xce\x90\xe0\x48\x37\x60\x90\x34\x3b\x84\xd2\x33\x9e\x4b\xa3\x6a\xb1\xf4\xcc\x89\x26\x58\xed\x9a\x0d\x58\xe9\xb4\xac\xb1\x0f\x69\xc1\xe9\xbf\x42\x15\x54\x30\x2a\xa0\x6b\xa2\xf0\x4a\xb1\xa5\xeb\xac\x42\xcb\xe6\x1a\x2d\x29\x6b\xcd\xef\xf7\x94\x39\x66\x15\x3e\x65\x17\xe8\xb0\x7e\x03\x7b\x58\x65\x09\x50\x95\x25\xe8\xfb\xe8\x88\xa2\x43\x54\x2d\xa1\xdf\x93\xac\x3d\x54\x57\xab\xc1\xb0\x80\xeb\xce\x6d\xc7\xef\x46\xd8\x85\xb8\x42\x5e\x55\xd0\x3f\x55\x42\x7a\x16\x11\x5b\x45\x37\xa1\xe3\xc8\x89\x55\x7b\x66\xae\xab\x42\x90\x25\x64\x02\xc4\x9e\x2c\x60\xc3\x99\x60\x71\x79\xa9\xe9\xad\xba\x3b\xd3\x1f\x65\x78\xbe\x08\x56\x1f\xfe\xca\x90\x10\xee\x11\x62\xde\xf3\x2e\x35\x5d\xe8\x2b\xb9\xe9\x95\x7f\x51\x21\x1a\xd2\x7c\x81\x9b\x5f\xea\xa9\x23\xa8\x8e\x7d\x2f\xdb\xe8\xf5\x23\x28\x8e\x07\x2f\x4b\x69\x6a\x23\x28\x80\xe9\x65\xa8\x9b\x22\x29\x11\xec\xf9\xee\x49\xab\xe1\xc2\xca\x60\x61\xd6\x0c\x47\xbd\x8d\x56\x2b\x76\xb8\x6e\xaf\x99\x02\x51\x6d\xad\xcd\x52\xd7\x0e\xe7\x01\x1a\x5a\x2f\x0f\x52\xec\xda\x1a\xef\xb0\x6a\xc9\xf3\x0f\xf0\xf5\x3e\x30\xdc\x0c\x5c\x8e\xe8\x6c\x46\x49\x7f\x79\xc6\x12\x92\xf6\x97\xc9\x45\xde\x07\xcf\x7e\x3e\x06\x42\x0a\xcc\x17\x59\x1f\x3c\x97\x7f\xe5\x93\x56\xf1\xa3\x9d\xcc\x71\x7b\x92\x70\x74\x91\x5c\x01\x93\x1b\x3c\x7b\x7f\x14\xfc\x51\x27\xc2\xbf\x5f\xf0\x3e\xf8\xd3\xcf\x27\x00\x7e\x5a\x9c\x21\x46\x10\x47\x79\x1f\xfc\x64\x7f\x03\x48\xe8\x2c\x49\xfb\xe0\xad\xf8\x03\x20\xc5\xe9\xa8\x0f\xde\x1d\xbd\x78\x0e\x20\x47\x8c\x25\x02\x9e\x7d\x70\x62\x7e\x02\x78\x2e\x46\xdd\x07\x7f\x96\xda\xd7\xc2\x0c\x6d\x99\x8c\x46\x28\xcf\x29\xc3\x69\x1f\x3c\xd3\xbf\x8f\x5e\x00\x38\x62\x98\xe3\x51\x22\x06\xaf\x7f\x01\x81\x4d\xc9\x08\xc9\x78\xc9\xe0\x85\xfd\x0d\x60\x8a\x72\x8e\x89\x5c\x0a\x92\xcc\x50\x1f\xbc\x28\x13\x02\x65\x3d\x9b\xaa\xc7\xb7\x3a\x5b\x7d\xe8\x2c\xa9\xa1\x11\x13\x09\x64\xe0\xb5\x1c\x40\x0d\x9a\x3e\xb0\xe0\x00\x98\x4c\x18\xca\x73\x07\x6a\x47\x2a\xa5\x04\x99\x44\x2f\xb1\x37\x93\x34\x15\x39\x7d\x20\x29\x77\xf0\x03\x26\x69\xf0\x4c\xa5\x39\xa5\x04\xb6\x78\x45\xde\xcb\x08\x5a\x33\x94\x4f\xfb\xe0\x0d\x92\x3e\xa3\xc5\x87\xd3\xa5\x48\x2d\xfb\x53\x73\xd1\x6e\x5c\x08\x4d\x51\x5b\xa4\x00\x31\x93\x14\x05\x4e\x7a\x67\x86\x78\x62\xd2\xdf\x88\xdf\xf2\xa5\x72\x5b\x85\x62\x45\x0c\xa5\x32\x93\x07\x1f\xca\x04\x38\x4f\x24\x3f\xd1\x07\xef\xd5\x0f\x00\xcb\xe2\x7d\xe0\x96\x34\xea\xbd\x52\x75\x6f\x34\x7e\x66\x40\x3a\xc3\x8c\x49\xe7\x9a\x61\x99\x5c\x35\xb2\x9c\x2e\xd8\x08\xa9\xb9\x1d\xcb\xdf\xba\x9a\x72\x56\xde\x07\x3f\xa2\x24\xe3\xd3\xe0\x58\x7e\x02\xc8\x93\x49\xde\x07\x27\xc9\x24\x07\x10\x70\xc4\x66\x72\xdd\xc9\xc4\x01\xdb\x49\x99\x5a\x42\xef\x22\x61\x44\xce\xef\x67\xf5\x03\x88\xb3\x36\x61\xa3\x69\x7f\x59\xa2\xde\xab\x04\x67\xea\x21\x3a\x26\x82\xb3\x9a\xca\x75\x0f\xf4\x04\x02\x99\x02\x31\xe1\x68\xa2\x18\xb2\xbc\x2f\x43\x60\x9a\x2f\x0d\xe7\xb2\xae\x00\x32\xae\xd6\xd7\xdd\x82\x63\xf9\xd7\x7c\xcf\x35\x75\x30\xe9\xc1\xb3\x11\xa3\x02\x81\x14\x80\x0c\x70\xc4\xb0\x05\x22\x2d\x05\x6d\x5f\x26\xb9\xd8\x84\x99\xd8\x0f\x01\xa7\xc1\x5b\x74\x81\x72\x2e\xf7\xc7\xa8\x0f\xd4\x97\x48\x57\x25\x40\x01\x93\x6c\x3e\x4d\x74\xb5\x67\x22\xe7\xaf\xa6\xf0\x5f\xc5\xd7\x33\x50\xc0\x74\xa1\x26\xa3\x4b\xbd\xa6\x64\xa2\x5b\xc9\xa7\x94\x71\xa7\xfd\x63\xfd\x2d\xf2\x32\x55\x0c\x14\x50\x3f\x05\x36\x9d\xe4\x23\x44\x52\x09\x52\x55\xe9\x05\xb2\x29\x85\x59\x62\x55\xf4\x23\x99\xca\x95\xbe\x12\xed\xa9\x45\xbf\x32\xb5\x7e\x2c\x73\x6c\x31\x50\x14\x70\x81\xc5\xea\x21\x35\x60\xf0\x5c\xff\x92\x3e\xd8\x33\x89\xad\xed\x33\x81\x10\xaf\xf4\x57\x70\x76\x15\x2c\x31\x47\xb3\x02\xc0\x59\x72\xc9\x79\xd6\x07\x6f\x92\xcb\xe0\xe4\xe4\xb5\xbf\xbd\x54\x68\x5c\x81\xf6\xe2\xaf\xa9\x53\xa8\xab\x5b\x4a\x84\xe8\xd4\x5f\x26\xf3\x79\x7f\x09\x46\x34\xcb\x92\x79\x8e\xcf\x32\xd4\x26\x94\xcb\x30\x10\xfd\xa5\x4e\x45\x82\xd8\xaa\x5f\xc1\x0f\x09\x21\x52\x93\x85\x2e\xe7\x82\x6c\x83\x97\xf2\xaf\x4d\x57\x8d\x2b\xee\x21\x61\x57\xa2\xa6\xf3\x29\x06\x8c\x89\x18\x2e\x26\x00\xe6\x9f\xf0\xfc\x94\xd3\xd3\x11\x25\x5c\xb0\xb4\xe0\xf8\x13\x9e\x0b\xe8\x3c\x57\x09\x00\x72\x3a\x99\x64\xe8\x74\x86\xc8\xa2\x0f\x4e\xe4\x47\xf0\x06\x91\x85\x47\x89\xb3\xfe\x12\x28\xec\x6b\x9f\x25\x0c\xf4\xd5\xbb\xe2\xa5\x82\xc4\x89\x7c\xfe\xaa\x9f\x05\xf7\x97\x23\xc5\x3c\x83\xe7\xf2\xaf\x18\x0e\x49\x26\x72\x74\x62\x50\xe6\x37\x28\x8a\xa2\x80\x20\x59\xf0\x69\x7b\x86\xf8\x94\xa6\xa0\xbf\x04\x82\xfc\x89\x2d\x9a\xe1\x9c\x9b\x6f\xf9\x90\x1e\xf4\x97\x82\x60\xf5\xc1\xc9\x14\x05\x22\x35\x10\x7d\x6b\x6b\x1f\x9c\x07\x8b\x1c\xa5\x41\x22\xad\xae\x9e\x3d\x7f\x2d\xe8\xd9\x51\x8a\x08\xc7\xfc\xaa\x23\x3e\xc4\x62\x05\x63\x8c\xb2\x54\xbd\xc9\x46\x01\xa7\x9f\x90\xf8\xa5\x9e\x6d\x2b\x4e\x2b\xed\x00\xc8\x68\xb6\x53\x2f\x1f\x68\x86\x5e\x63\xf2\xa9\xb3\x7b\xd3\x96\x1c\xee\x34\x07\x4d\xfc\xec\x34\xf4\xf7\xce\xdd\x09\xe8\x6e\x5e\xb2\x42\x1d\x39\x98\x5f\x99\x64\x4d\x39\xca\xb5\x54\x81\xba\xf4\x86\x41\x79\xa0\xbe\x55\x97\xe6\xc8\x2a\x73\xe5\xa7\xc9\x54\xeb\xab\xb6\x60\x5b\x9e\x9f\xa0\x8a\x44\x32\x75\x0d\x16\xc9\x38\x14\x7d\x20\xff\x00\x98\xd2\xd1\x27\x71\xb6\xab\xbf\x00\x4e\xd8\x7c\xd4\x07\xe2\x5f\x00\xa5\x8b\x74\x20\xfe\x05\x30\x1f\x31\x3c\xe7\x7d\xa0\xfe\x4a\x90\x8f\xfb\xe2\x58\x19\x03\xc8\x47\xf3\x3e\xe0\xa3\x39\x80\x72\x3b\x73\x9e\x09\x18\xb9\x50\xf9\x09\x93\xd4\x19\x82\x42\x38\x79\x36\x3e\x97\xe3\xaf\x1d\x68\x3a\xbd\x30\xa4\x56\x35\x26\x89\x94\x29\x21\x88\x2d\x4d\x91\x25\xb5\xa2\x35\x4e\x03\x7b\x22\xaa\x9e\x65\x3b\x81\x5e\x15\x99\xb4\x74\x33\x24\xad\x91\x00\xc5\x72\xd7\x4a\xaa\xab\x68\x48\x7f\x39\x17\x87\x98\xf4\xab\x94\xf7\x97\x67\x34\xbd\xea\x83\xf7\x65\x52\x90\x30\x14\xbc\xfe\xba\xb4\x88\xcb\x3b\xc1\xd1\x38\x48\xc8\x55\x20\x84\xed\x29\x0a\xc6\x34\xcb\xe8\x85\x38\x02\x9d\x96\x02\xe9\x2e\x58\xe6\xeb\x38\xb6\x50\x7e\x1c\x99\xfe\x83\x0b\x9c\x65\x41\x32\x9f\x67\x57\x9d\x40\x47\xc8\xcd\x15\x16\x8e\x13\x2c\xb0\x40\x37\xe1\xf4\x34\x67\xf4\x1c\xa7\x28\x0d\x18\x15\x03\x51\x4d\xa8\xee\x65\xbe\x66\x60\x05\xf6\x07\x32\x08\xc6\x55\x07\xc0\x31\xa5\x92\xad\x7b\x8d\x12\x46\x82\x19\x65\x28\x48\xce\xe8\x82\xbb\xa3\xad\x23\xbb\x62\x1e\x0d\x14\x4b\x78\x78\x18\x96\xd1\x8b\x3e\x78\x26\xfe\x00\x08\x92\xf9\xbc\x9d\x5c\x24\x4c\xb0\x25\xcf\xe6\xf3\x40\xfd\x86\x29\x22\x57\xe2\x30\x22\x57\xe5\x32\x9b\xc6\xd5\xc1\xa5\x86\x4f\x03\x59\xc6\x1e\x5e\x44\x9e\x41\xba\xf1\xda\x28\x0a\x08\x1c\xd6\x54\x73\x43\xaa\x3d\x87\x43\xed\x07\xfe\xd1\xeb\x65\xe9\x73\x18\xd6\xf8\x5a\x50\xc0\x39\x43\x23\x94\x22\x32\x42\x3b\x9c\xae\x66\x74\xb6\x8e\x18\x9d\xe2\x25\xbc\x81\x29\xe2\x50\x1d\x93\x49\xf5\x87\x63\x58\x10\x81\xb2\x9f\xce\xaf\x71\x78\x8c\x69\x96\x8a\xd5\x7e\x25\xff\x02\xf8\x09\x5d\xf5\xc1\x4f\xe8\xaa\x71\x8f\xa9\x42\xb9\xe8\xf9\x27\x74\x95\x9b\x21\x89\xdf\x22\x4d\x67\xab\x51\x28\x7c\xba\xc6\x48\x80\xa2\x75\xed\xf2\xf8\x02\x7d\xf0\x47\x45\xff\x9c\x63\x4c\xb0\x26\x24\x4d\x58\xda\x07\xc7\xfa\x97\xea\xd0\xd0\x8a\x4a\x8f\x9b\xf8\x45\x39\x1a\x4b\x39\x4e\xb4\x53\x9b\xad\x7c\xa2\x42\x7e\xc5\x57\x9b\xdb\xcb\x1a\xad\x55\xc0\x73\x49\x8b\xc7\x7b\xab\x21\xab\xb5\x5c\x4e\x51\x22\x17\x41\x46\xb3\x30\x4e\x4d\x82\x92\xcb\x0f\xb4\x5c\x68\xd8\xf5\xe0\x88\xff\xdf\xff\xfd\x7f\x72\x51\x86\x2e\x24\x33\x6d\x2f\x19\x25\xa9\x90\x54\x41\xef\x79\xce\x92\xf1\x18\x8f\xd4\x03\x83\xc4\xb6\x91\x8b\x59\xa9\x66\x3b\xc1\x2b\xca\xd4\x46\x77\x02\xea\x40\x51\x3c\x0d\xe8\x82\x05\x46\x81\x22\xd3\x3b\x00\x66\x98\x7c\xca\xfb\x4b\x2f\xb9\x0f\x5e\xb8\x9f\x02\xa5\x05\x87\xd3\xe6\x98\x67\x72\x87\x4b\x12\xf2\x41\x0f\x57\xa9\x48\x04\x67\x25\x0f\xaf\x6b\x60\x89\x39\x20\x35\x62\x1c\x8f\xa8\x5c\xb4\x1d\x71\x47\x9f\x9f\x4a\xd4\x53\x75\x15\xea\x8c\x18\xe2\x47\x2f\xc4\x1a\x89\x5f\xc1\xd1\x0b\x31\x01\x4e\xe7\x34\xa3\x93\x2b\xc1\x2f\x31\x3c\x12\xdc\xe3\x9c\xce\xe9\x39\x62\xfd\xa5\x24\x53\x4b\xe5\xdc\xaa\xbf\xc4\xf9\xcb\xcb\x64\xc4\x2d\x71\x23\x94\xeb\x04\x75\x54\x83\x02\xca\x83\xa2\x2c\xa8\x6e\xa9\x24\x15\x4e\xb4\x93\xa1\xb1\xf2\x5d\x63\x4f\x1c\xb1\x64\x92\x66\x76\xdc\x06\x9f\xa5\xa9\x60\x58\x9c\x52\x62\xb1\x65\x39\x71\x1c\xa0\x1c\x05\xfc\x82\x96\xcb\xcc\xa9\x40\x0e\x82\x46\xbc\x03\x0a\x68\x30\xed\xb9\x4a\x12\xf5\x5f\x20\x82\x51\x2a\x98\x93\xaf\xed\x84\xc0\x9f\x31\xba\x00\x6a\xcc\xe0\x39\x62\x3c\xc1\x24\xf8\xf1\xe4\xe4\xbd\x39\x9c\x24\xa6\x04\xb3\x45\xae\x8c\xeb\x25\xcf\x34\xc6\x92\xeb\x32\x5d\xbc\x4e\xae\x10\x0b\xbe\xf6\x8f\x0d\xb5\xbd\xf4\xeb\x17\x50\xf6\xe7\x23\x8f\xea\xf8\x0b\x31\x55\xb0\x5c\xcc\x73\xce\x50\x32\x2b\x80\xe6\xd5\x4c\x80\xd4\xc0\xe4\x08\xd0\x81\x65\x4a\x2f\x88\x2d\x49\x59\x90\x23\x2e\xc1\x5b\xc9\x99\x33\x7a\x29\x8f\x0a\xf5\x12\x78\x2e\xc3\xa7\x81\x60\xa6\xf9\x04\xa4\x9f\xe3\xa8\x5d\xd3\xf9\xc2\x4e\xe7\x2d\x35\x89\x6a\xff\x2b\x7a\xad\x59\x65\x20\x5b\xd5\x62\xbc\xda\x84\xa0\xbf\xe4\xe8\x92\x0b\xca\x2f\x27\x2b\xf6\x9b\xea\xdb\x2b\x05\x39\xa5\x19\xc7\x73\xbd\xf9\x47\xe5\xba\x5c\x24\xb9\x79\x26\x24\xa3\x0a\x34\xd4\x16\x2b\x0a\x34\x09\x68\x6b\xcf\x8d\xa6\xdb\x0f\x4d\x94\xa1\xda\xdd\xfd\xd3\x1a\x79\xae\x68\xe1\x52\xdd\x5c\x81\xf2\x05\x54\x46\x93\x34\x30\x9b\xad\x49\xd3\x23\xd0\x52\x0c\x41\x97\x91\xcf\x9b\x2a\xda\x1f\x3b\x29\xe5\x10\x8e\x67\x57\x26\x1c\x10\xb2\x1c\xfc\xc7\x23\x41\xc5\x68\x92\x4a\xb5\xc3\x6b\xf5\xc3\xe9\x58\x08\x99\x1c\xb5\xd3\x11\x70\x47\x37\x46\x82\xbd\x72\xbb\x16\x70\x13\x25\x83\x52\x1d\x26\x91\xc3\xc1\xac\xb6\x5c\x35\xd0\x07\x27\x65\x5a\xf0\x5e\xa6\x41\x83\xbf\x55\xf2\x67\xce\x14\x5f\x78\x90\xec\xfd\x88\xce\xaf\xda\x67\x0b\xce\x25\x82\x69\x00\x9e\x4c\x11\x43\x12\x5f\x24\x92\x9c\x65\x68\x26\xa4\x9f\x85\xe2\x9a\xc0\x73\x3a\xc7\x28\x0d\x64\x63\x05\x80\x92\x22\xcb\xd4\x2b\x9d\x26\x26\x27\xc0\x32\xca\xf0\xfc\x8c\xaa\x03\x15\xce\xa4\x9b\x89\xfe\xb2\x22\x31\xfe\x80\x49\x2a\x0e\xb0\x7c\x9e\x08\xbe\x5c\xaa\xcb\xec\x37\x80\x5a\xf7\xbd\x94\x74\x10\xa5\x1f\x90\x7a\x6a\xf3\xf1\xc3\x51\xae\x89\xa3\xe0\x46\x75\x6a\x20\x92\x01\x94\x1e\xf9\x9f\x2d\x52\x2c\x78\xa1\xbc\x0f\xe4\x77\x90\x98\x04\x5d\xe0\x28\xcf\x17\x62\x1f\xaa\x5c\x2c\xbf\x00\x7c\xfe\x4c\x50\xa7\x3e\x78\xfe\x2c\x10\x3f\x00\x7c\x9e\x25\x78\xf6\x26\x99\xcf\x31\x99\x88\xb9\x8b\xcf\xc0\x7c\x8b\x6c\x3a\xfa\x74\xfc\x09\x5d\xbc\x46\x4a\xaf\x28\x13\x82\xfc\x13\xba\x08\x32\xa4\xf4\x51\x2f\x2f\xe7\x58\x21\xb7\x29\x54\xa6\xd8\x42\x3f\xd2\x9c\xf7\x81\xf8\x17\xc0\x3f\xfd\xfc\xd3\xb1\x19\x88\xf8\x1d\xd8\xd1\x88\xaf\x8f\x1f\x5e\xeb\xe4\x8f\x1f\x5e\x8b\xa4\x93\x63\x83\x8f\xcf\x32\x31\xc6\x3f\xfd\x7c\xe2\xa0\x68\x92\x4d\x28\xc3\x7c\x3a\xcb\x65\xd9\x3f\xab\x7b\x37\x4c\xc9\xfb\xc5\x99\xbc\x24\x94\xe5\xcf\x6d\x72\x30\x5f\x9c\x05\x9f\x24\x37\xf6\x1a\xe7\xbc\x32\x7f\x91\x14\x54\x81\xf0\x96\xf2\x1f\xd0\x98\x32\x64\xe6\xf7\x56\xbe\x91\x12\x29\x76\x7e\xef\x8e\x5e\x3c\x57\x0a\x05\x71\x2c\xaa\x5f\xe2\x58\x74\x32\xd4\x59\x69\x33\xd5\x21\xaa\x0a\xbc\xc0\xf9\x48\x9c\x93\x57\x06\x2c\x22\x31\x48\x4d\xaa\x00\xd0\x48\x02\xc8\x2b\x2c\x21\x65\xbf\x14\xb8\x44\x01\x79\x50\xe7\xba\x91\x5c\x7e\x00\xa8\xb9\xa9\x67\x23\x19\x8f\xe5\x4f\x3f\x9f\x94\x0c\x56\xa2\xd2\x82\x3f\x1d\xbf\x7b\x1b\xfc\x8c\xce\x82\x13\xc1\x64\x00\xf8\x67\xc4\xce\x68\x8e\x44\x33\xaf\xe9\x64\x22\x37\xbf\x4e\x0b\x64\xdb\x99\x4a\x05\x05\x14\xec\xba\x90\x68\xd5\xe1\x54\x7e\x00\xa8\x35\xd6\x6f\x3d\xf5\xb5\x64\xdb\xe1\x9b\xe4\x52\xf6\x74\x72\xf2\x5a\x6a\xaf\xf0\x6c\x31\xd3\xda\x02\xa9\xc7\x3a\x46\x2a\x18\x87\x18\xa9\x09\x20\x28\x2b\xbc\x36\x6a\x01\x20\x3f\x03\xa3\x26\x00\x50\x6c\x7d\xab\x3d\xb0\xda\x1a\xb6\x10\x3c\x95\xdc\x8b\x4e\x81\x0d\x83\x6e\xe8\xb9\x28\xa0\xa2\xda\xfd\x65\x3a\x52\xb2\x77\xde\x5f\xe6\x53\x7a\x21\xf9\xd1\x8c\x4f\x95\x0e\xbe\xbf\x04\x46\x0b\xdb\x16\x72\xbd\x56\xa5\x01\x23\xfa\x7e\x3f\x7f\xfa\x37\x12\x04\xf2\x38\x11\x8d\x04\x53\x49\x87\xc6\x4a\x5f\x2b\x8e\x80\xb1\x4a\x97\xcd\x75\x82\x93\x29\x0a\x54\xfb\x81\x3a\x07\x50\x1e\x88\x5e\x49\x40\xb5\xf3\xbe\x79\x32\x41\x52\x8a\x16\x34\xc9\x96\x49\x24\x77\x73\x15\x5c\x08\x5a\xf7\x89\x88\x0a\x1a\x65\x45\x31\xd9\xc3\x19\x1a\x25\x33\x14\x2c\x08\x43\xc9\x68\x2a\xc8\x76\xe7\x6f\xe4\xfb\x87\x62\x80\x25\x5b\xf2\xca\x1d\x98\x52\x93\x14\xe6\xe2\xa1\x71\x2e\x84\x9a\xf1\x2a\x80\x48\x95\x63\x0e\x83\x5c\x42\x12\x8a\x0a\x41\xd0\x0d\x96\x85\xfa\x45\xf9\x14\xb1\x60\xa9\x84\x71\xf9\x2a\x57\x1c\x90\x8a\xbe\xcb\x22\x45\x39\x28\x49\xd2\x6b\xe7\xb7\x51\x2b\xfb\xcc\xb2\x39\xc1\xad\xa0\x93\xbb\x07\xc5\x4d\x57\xcc\xb4\xf0\xef\xb2\x6a\xde\x7c\x3e\xe7\xca\xd9\xc3\x5b\x80\x9b\x2b\xf6\x4f\x1c\x99\x06\xca\x5f\x08\x88\xd9\x32\x41\x26\xb8\xab\xd4\x07\xd6\x34\x39\x17\xb3\x47\x64\x2b\x9b\x17\xa8\x13\x7e\x96\x5c\x09\x6e\x5b\x4a\x6a\xb6\x69\x18\xf0\x29\x5d\x4c\xa6\x50\xc0\xba\x81\xa7\x95\xde\x30\x05\x54\x9d\xde\x45\x0f\x9d\x2f\xac\xa6\xe7\x83\x10\xf4\xa4\x3e\xc8\xe7\xc2\xad\x58\xea\xb0\x2e\x6a\x74\x72\xa6\x52\x72\x92\xf4\xc2\x08\x4a\xa5\x8e\x0c\x24\xa3\x2c\x6f\xeb\xb0\x7b\xa9\x45\x3d\x97\xc7\x6d\x13\x79\xa3\x5d\x8a\xd6\xc9\x95\x02\x49\x8a\xe6\x88\xa4\x88\x8c\x30\xca\x61\x70\xb6\xe0\x86\x25\xc5\x39\xf9\x82\x2b\x3d\x91\xd6\x70\xcd\x82\x8b\x29\x92\xda\x5b\xa5\x77\x33\x1d\x76\x82\x97\x8a\x6d\x93\x39\x52\x35\xf6\x09\xa9\xc9\x9f\x63\x74\xa1\x41\x98\xa3\xb1\xe0\x48\x0d\x1c\xbe\xd0\x88\xf4\x7d\x12\x4c\x19\x1a\xc7\x60\xf9\xfc\xdd\xdb\xe3\x8f\xaf\x4f\x5f\xbc\x7b\x7e\x7c\xfa\xf1\xc3\xeb\xe2\x61\x8e\x46\x0b\x86\xf9\xd5\xc3\x64\x94\x89\xff\xdb\x2a\xc2\xd4\xff\x32\x2c\xb1\xd8\xc7\x62\xe6\x20\xe0\x09\x9b\x20\x1e\x83\xd3\xb3\x2c\x21\x9f\x40\xc0\x50\x16\x03\x42\xe9\x1c\x11\xc4\x02\x42\x19\x1a\x23\xc6\x10\x03\x4f\x9b\xa1\xff\xfd\xc3\xe4\xa9\xc1\xb6\x52\x08\x71\x66\xa5\x54\x5a\x52\x7f\xd7\x96\xd2\x9f\x05\xf2\x5f\x84\xcc\x5e\xea\x0d\x73\xc4\x05\x19\x51\x00\x72\x98\x62\x24\xaf\x87\x8c\x0a\x50\x09\x9a\x6a\x13\xcd\x50\x42\xb4\x6a\xb1\x04\x99\xd4\x1d\x8a\xe5\x76\x64\x14\x09\x5a\x24\x0f\x6b\xb3\x8a\x98\x04\x57\xa2\xff\x51\xb6\x10\xf2\x44\x27\xf8\x19\x05\xf2\xd9\xee\x0c\x91\x34\x18\x09\xa9\x57\x6c\xad\xab\x35\x63\x74\x46\x24\x24\xec\x20\x11\x95\xe4\xe5\x91\xd8\xfc\x73\x34\xc2\x42\xbe\xb0\x15\x15\x1b\x6e\xe5\x40\x51\xba\x14\xf6\x4a\xf1\x43\x14\x2a\x67\xc2\xa9\xd8\x45\xdb\x57\x5f\x1e\x8f\xa7\x56\xd0\xce\x0b\xf0\xf4\x65\x8a\xb9\xd3\x7b\xf3\x22\x39\xa3\x13\x20\x6f\x02\xb4\x58\x3c\xe7\x22\x4c\xe1\x8c\xb7\x49\x36\xee\x0a\x01\xbe\xe0\x82\x92\xff\xfb\xbf\xff\x8f\x20\x50\x8a\x86\x2e\x72\x24\xd3\x53\x9d\x2e\x6b\x29\xcd\xa9\x66\xf0\x67\xae\x74\x8e\x67\x58\x50\x24\x75\xd1\xaf\x04\xf3\xb6\xdb\x87\x33\x9c\x72\x8f\x8a\xf6\xc5\x9c\xce\xb5\x1c\x56\xa2\x93\xa6\xb7\x6e\x0b\x9d\xe0\x2f\x62\x98\x02\x6f\x28\x91\x18\x87\x3c\xe9\x49\x8a\x1c\xaa\x01\xdb\xc1\x82\x70\x9c\xf9\x73\x15\xfd\x25\x69\x2a\x75\x0b\xbb\xef\x54\x8d\xa4\x0f\x5d\x3a\x6a\x8c\xdc\x3d\x39\xfd\x7f\x19\xec\x69\x7b\x72\x6d\x5b\x6e\x50\xa9\x9d\xfd\x4c\x7b\xf9\xad\x0f\xad\x8a\x6e\xa4\x6d\xf1\xce\x5d\x08\x01\x8a\xf9\x1c\x25\x4a\x07\x7b\x86\x82\x84\x38\xbb\x28\x31\xf7\x0a\x5a\x0e\x57\xc4\x93\x97\xeb\xa7\x80\xb9\xb0\x12\xad\xd8\x96\x0b\x82\x47\x09\x37\x90\x97\x9b\xde\x51\x42\x38\xa7\xc7\xd9\x95\x3a\xa7\x44\x07\xcd\x5a\x18\x26\x4f\x07\xb3\x66\x1a\xef\xbf\x70\x8e\xa4\x2f\xe4\xc1\xf1\x99\xd7\xf1\xb3\x11\xdf\xe7\x0e\xdd\x13\x13\x24\x94\x5b\x28\x64\x57\xe6\x10\x17\xeb\x78\x81\xb3\x74\x94\xb0\xa6\x45\x7c\x47\x50\x60\xb4\xad\x74\x5c\xa1\x83\x1e\xe0\x12\x75\xcf\x51\xaa\x54\x12\x92\x3e\xa4\x2c\x18\x33\x3a\x13\x99\x9a\x5f\x71\x75\x2c\x89\x14\x44\xa4\x28\xae\x49\xf9\x89\x3e\x99\xab\x34\x5c\xd6\x17\x47\xa8\x90\x7d\x5c\x82\x8e\xc7\x5a\xa3\x83\x66\x09\x26\x79\xb0\x20\x23\x65\x4f\x5f\xa1\xe4\x9a\x62\xab\x89\xdc\x98\x30\x57\x4e\xe6\xdf\x16\x49\x86\x7f\x53\x62\xed\x8e\x47\xf4\x4d\x89\xb4\xb9\x1b\x3a\x77\xae\xd8\x84\x4c\xa4\x0d\x05\xfa\xcb\x51\x46\x9b\x8d\x04\x04\x16\xd5\x4d\x04\x3c\x86\x10\x13\xce\xa8\x1d\xec\x47\xcb\x05\xaa\xd5\x35\x73\x17\x60\x16\xe4\x9d\xa1\x11\xc2\xe7\x56\xe7\xa8\x16\x58\x42\x44\x2b\xbe\xe4\x05\xa2\x21\xbd\x02\xeb\x94\xfb\x72\xcd\x15\xbd\x78\x7b\x6c\x83\x5a\x4b\x60\xe6\x0b\x86\x14\x62\x7d\x3f\xa2\x29\x7a\x2a\x55\x15\xdf\x3f\x94\xbf\x03\x35\xff\x40\x32\xe7\x92\x00\x53\x26\x55\x31\x29\x15\xeb\xad\x2e\xc8\x0d\x71\xd6\xdd\x2b\x4a\xc1\x94\xcb\x94\x52\x7f\x8a\x79\x5e\x72\xa1\x9d\xa0\x76\x5d\xe8\xf0\x44\xa6\x25\x89\xa4\x72\x60\xdb\x37\x7c\x45\xf9\x77\xad\x5d\x5d\xdb\xcc\x96\x71\xff\xa2\x90\xff\x0d\x87\x75\x53\xc2\x8c\x26\x62\xc3\x62\x8e\xe5\x33\xa4\x66\xaf\xd5\xda\xed\xc9\x96\x97\xe9\x8e\xa3\x3f\xa4\x9d\xb3\x54\xdd\x3f\x42\xf9\x92\x42\xfe\xb3\xdf\x95\x66\xab\xfb\xac\xe6\x72\x05\x1d\x00\xa5\x63\x57\x03\x50\x7a\x7f\x3b\xc0\x0e\x30\xef\xb9\xed\xeb\x1b\xd9\x0e\x59\xdf\x8e\xe2\x09\x2c\x2f\xa2\x9a\xb5\x8e\xa4\x02\xd2\x11\xeb\xbf\x5a\x85\xea\x47\x8c\x3a\x79\x86\x47\x28\x44\x9d\x2c\xc9\xf9\x91\x00\xc7\xbb\x71\x08\x1e\x82\xe8\xa0\x17\x45\x90\x14\xbe\x4b\x51\x63\x39\x2a\xcd\xb7\x51\x07\xeb\xf2\x1c\x22\x63\xd7\x6d\x42\xd1\x46\xb7\x71\x0a\xea\x03\xde\xc4\xb9\xc5\x31\x3f\x00\x0f\xbd\xf5\x03\x90\xea\x44\x25\x14\xb6\x2b\xb9\x49\x3c\x18\xc2\x5c\xfc\x93\xc5\xde\x4b\x4d\xb5\xc8\x7f\xcf\x3b\xa7\x28\xf9\x74\x9a\x23\x44\x22\xb8\x88\xbb\xdf\x2d\xbe\xcf\x8c\xa1\xfb\xe2\xe0\x40\xad\xec\x28\xce\x06\x8b\xe1\x5e\x37\x8e\xe3\x91\x07\x26\x0c\xbb\xd1\x21\x09\x47\x10\xb4\xa5\x6d\x56\xb4\x5a\x25\xca\xd6\x7b\x14\xf5\xeb\xc5\x29\xec\x46\xad\x56\xe8\x57\xc8\x4d\x85\xa8\x08\x9b\xa7\xad\xec\xef\xb9\x6b\x7f\x2f\x20\x6f\xe7\x19\xb2\x90\x0f\xc8\x30\x8a\x0a\x81\x74\x49\x04\xaf\xd5\x8c\x82\xdb\x51\x53\x73\x21\x82\x79\x93\xc3\xa9\x59\xc2\xa7\x6d\xe3\xcd\xc1\xfc\x4d\xce\x76\x36\xcc\x75\x02\x81\x0e\xd0\xd0\x1a\x23\xbf\x49\xf8\xb4\x93\x9c\x49\x1f\xa2\x37\xc0\x9d\xe4\x2c\x8f\xf9\x66\x3f\xd6\x7e\x00\x5a\xbe\xc5\xbd\x43\xf3\x34\x47\xf4\x6e\xe6\x39\xa2\x37\x9e\xe8\x88\xde\xd7\x4c\xa7\x77\x35\xd5\xe9\x2d\xe6\x3a\xbd\x8f\xc9\xa6\xe9\x4d\xc2\xd8\x96\x2f\x29\x3a\x0c\xa5\x8b\x11\x32\xe1\x50\xac\xb5\xfe\x81\xfe\xc5\xa3\x9b\xcd\x3f\x4d\xef\x63\xf6\x39\x26\x77\xb2\xd2\x39\x26\x37\x5d\xe8\x1c\x93\x7b\x9a\xe9\xdd\x20\xb5\x68\xe8\x16\x73\xbd\x17\xa4\xe6\xc9\xdd\x2c\x2b\x4f\x6e\xbc\xac\x3c\xb9\x97\x65\xe5\x09\x79\x74\xa3\xa9\x42\xde\x30\xd9\x47\xca\xff\xcf\x0d\xe7\xfb\xe8\x9e\x26\x7c\x37\x78\x2c\x1a\xba\xc5\xe2\xde\x07\x1e\x8f\xce\xd8\xce\x5e\xc1\x37\xcd\x55\xb4\x73\xc3\xa9\x8a\xaa\xf7\x31\x53\x84\x77\xf6\x66\xb3\x71\xa6\x08\x67\x37\x9d\x29\xc2\xd9\x7d\xcc\x34\xfb\xed\xf1\xcd\x76\x6c\x75\xaa\xa2\xa1\x9b\xce\x55\xd4\xbd\x8f\xc9\xde\x0d\xcf\x78\x73\x96\xf1\x7e\x38\xc6\xbb\x62\x18\x6f\xc1\x2f\xde\x13\xbb\x98\xe2\xf3\xcf\xc3\x2e\x3e\xbc\x1d\xbb\x98\xe2\xf3\x7b\x98\x3d\xba\x9c\xdf\xc5\x32\xa3\xcb\xf9\x0d\x57\x19\x5d\xce\xef\x67\x9a\xb3\xde\x1d\x4d\x74\xd6\xbb\xf9\x54\x67\xbd\x7b\x98\xec\x38\xa3\x94\xdd\xc5\x64\x65\x43\x37\x9c\xac\xac\x7b\x1f\x93\x65\x74\x41\x6e\x22\xf0\xd5\x67\x2b\x5b\xba\xe9\x74\x65\xe5\x7b\x98\xef\x64\x74\xb3\xc9\xc6\x5d\xc8\xe2\xee\xb0\x74\xe2\xe1\xa8\x68\x20\x2e\xbf\x98\x55\x2f\x4a\xbf\x20\x87\x58\x2a\xbf\xf0\x21\xe9\xf3\x70\x80\x21\xf9\x1d\x1e\xde\x08\x40\x93\xd1\x7d\x40\x67\x7a\x35\xa7\x37\xe1\x2f\x91\x8f\x0a\xb2\x19\xe5\x1f\xf0\x26\x73\x95\xd5\xef\x61\xb6\x78\xb6\xb8\x19\x8b\x59\x93\x94\x44\x4b\x37\x16\x94\x44\xe5\x7b\x98\x6d\x36\x9a\x35\x79\x3a\x5b\xbb\x4b\x76\x56\xfa\x3b\x9b\xc3\x41\x7d\xb4\x5a\x89\x3f\xec\xb0\xdb\x2f\xb7\xca\xef\x59\xf4\x50\x5e\x0d\x4c\x46\x69\x24\x00\xc9\x6e\xb6\x1b\xb2\xd1\x2c\x66\xcd\x10\x23\x8d\x10\x63\xd1\xe6\x58\x43\xcd\x10\xa3\x93\xf6\xce\x91\x03\x36\x91\xc6\x8c\x4e\x6e\x48\x17\x33\x3a\x79\x79\x1f\xb8\x41\x27\xbd\xee\x1d\xcd\xb4\xd7\xbd\xf9\x5c\x7b\xdd\x7b\x9a\xec\x9d\x70\x6d\xb2\xa1\x5b\x4c\xf6\x3e\x38\xb7\x8c\x4e\xee\x44\xb6\x14\xed\xdc\x7c\xaa\xb7\x95\x2c\xf7\x76\x98\xe9\x2c\xb9\xbc\xfd\xc9\x35\x4b\x2e\x6f\x7e\x6e\xcd\x92\xcb\x7b\x58\xd1\xd9\x8d\x14\xd4\xd5\x79\x62\x72\x8b\x79\xde\x8b\x7e\x7a\x46\x3f\xd3\x3d\xc4\xef\x6e\x27\x58\xce\xe8\x7d\x70\x62\xb3\x45\x76\x3b\x46\x6c\xed\xf4\x7f\x7f\xcb\xe9\x8b\x59\x7c\xfe\xf9\xcf\xe9\xc5\x9d\x4e\x5f\x62\xfd\x9c\x5e\xc8\xcf\x1b\x4d\x7c\x4e\x2f\xee\x61\xde\x2c\x21\x9f\x37\x7e\x9e\xea\x20\xc6\x6b\x22\x17\x2d\x67\x98\xf4\x39\x9c\x25\x97\x7d\x56\x48\xb1\x06\x92\x78\x99\xa2\x11\x9e\x25\x59\xde\xef\x16\x25\xb8\x71\x88\x60\x99\x83\x8b\x58\x05\x35\xac\x85\x2b\x44\xad\x56\x2d\x5c\x9a\x71\x73\x87\x63\x1b\xaa\x47\x8c\x47\xb5\x75\x58\xfe\xec\x13\xfb\x13\x1e\xc8\x35\x54\xe3\x97\xbe\xb4\x5f\xe1\x4b\x94\x86\x4c\x30\x94\xe1\xa3\x2e\xc4\x51\x24\x4d\x4b\x50\xab\xd5\x13\x0c\xa8\xb1\xbe\xd0\xfe\xd1\xc8\xd0\x7a\x26\x3f\x08\xbd\xa6\x7e\x4f\xd6\xb4\x56\xa8\xd6\x1e\x79\xad\x65\x88\x0f\x08\xa4\x65\x6b\x01\xfd\x9e\xb4\x5a\xa1\x4a\x1c\x50\x48\x86\x11\x3c\x08\x89\x3f\xdc\xdf\x87\xb4\x4d\xa2\x75\xfd\xe8\x61\xed\x30\x41\x19\x0d\x9f\x36\xe2\x1b\x76\xf1\xad\x21\x5e\x7d\x33\xbe\xdd\x50\xfc\x47\x4e\x44\x5d\xeb\x52\x92\x49\x9e\xff\x80\x1d\xaa\x89\x68\x7d\x40\x3f\x64\xf1\x01\x93\xd6\x3f\x71\x1c\x87\x28\x3e\x40\xd1\x6a\x85\xf3\xb7\xc9\x5b\x19\x38\xcf\x78\x76\xb5\xc1\x5f\xd9\x6a\xc5\x7e\xd7\xdb\x8f\xbb\x87\x6f\x93\xb7\x7d\xf4\x7d\xf7\xb0\xcd\xc3\xb6\xe8\xb1\x1f\xa2\xd8\x8d\x99\xd7\xc9\xe7\x19\xe6\x21\x40\x20\x82\x07\xbf\x3c\x58\x86\x48\xb4\xef\xf4\x2e\x12\xd1\xa0\x3b\x2c\x90\xf8\xdb\x1b\x1e\x1e\x88\x7f\xdb\xac\xdf\x66\xc5\x2f\x51\xd4\xdc\x54\x54\xab\x70\xc0\xfa\xb2\x7c\xe1\xda\x3a\x09\x08\xc8\x68\xc9\xf2\x5f\x8b\xa7\xd6\x83\x63\x28\x3a\x86\x6d\x27\x47\x06\x57\xee\xa0\xcb\x79\xa5\x8c\x4a\x2b\xdc\x03\x5a\x03\x6f\xd0\xbd\x99\x80\xa4\xd4\x29\x9f\x5f\x44\xca\xf1\xe4\x4e\xee\x55\x45\x3b\x37\x64\x2f\x45\xd5\x7b\x20\xcc\x77\x64\x17\x70\x73\xb3\x80\xfb\xb1\x0a\xc8\x7f\xbd\x9b\x0b\x46\xd1\xce\x4d\x27\xfa\xeb\xbd\x5c\x30\xe6\x8b\xb3\xcf\xc3\x60\xb5\x6f\xc7\x60\xe5\x8b\xb3\x7b\x98\xfd\x1d\xd9\x43\xdc\xdc\x1c\xe2\x7e\xac\x21\xee\xca\x36\xe0\x16\xa6\x01\xf7\x64\x19\xc0\xd9\x82\x8c\xee\x64\xaa\xa2\xa1\x9b\xce\x55\xd4\xbd\xeb\xc9\x5e\x9d\xa1\x36\x26\x6d\xa4\x7c\xd0\x3d\x2c\x5d\xdf\x3d\xac\xe6\xfd\xc3\xa2\x7c\x9e\xbc\x79\xfd\x43\xc2\xf2\x0e\x47\xb3\x79\x96\x70\x14\x2e\x71\xda\x07\xdf\x1e\xfc\xf4\x88\xfe\x1d\x67\x00\x9e\x65\x74\xf4\xa9\xff\xc5\x12\xe4\x57\xb3\x33\x9a\xe5\xa0\x3f\x00\x2d\x13\x11\x0a\x82\x3f\x38\xde\x9a\x5e\x9a\xa9\x80\x3f\xa8\x38\xd2\x47\xe4\x7d\x96\x8c\x10\x18\x42\x90\xf3\x84\xcb\x5c\xd1\xc0\xe0\x2b\x38\x78\xfc\x35\xec\x0d\xe1\x60\xf0\xf8\x11\x7c\x3c\x1c\x2a\x03\xeb\xc1\x00\x94\x2d\xa3\x4c\x06\x16\x1b\x2c\x2b\x75\x7b\xdf\xc0\x9e\x2c\x3e\x1c\x42\x30\x4f\x58\x32\x43\x32\xbc\x45\x7f\x30\x2c\x60\xb5\xb0\xea\xa8\xab\x3b\x7a\x34\x14\x3f\xc0\x64\x81\x53\xe9\xb5\x22\x47\x4c\x3f\xb0\x17\x1d\x81\xdf\x8d\x16\x2c\xa7\xac\xdf\xfd\x1d\x30\x1d\x38\x23\xba\xe6\x50\x86\xc3\xb5\x89\xd3\x24\x7f\x79\x9e\x64\xa0\x3f\x4e\xb2\x1c\x41\xb0\x98\x9f\x27\xb2\x00\x70\xf1\x01\xe0\x31\x18\x16\x5f\xc0\x19\xe2\x49\x7f\x39\x93\x4b\xab\x1e\xb3\x5f\x1f\xbb\x3a\xd3\xb3\x1c\x94\x91\x38\xd5\xd2\x9f\xe6\x88\x3f\x37\x75\x4e\xcc\xf2\x73\xed\xcf\xfe\xd4\x20\xc4\x3b\x92\x5d\xd9\x62\x61\xb4\x0d\xe7\x69\x8a\xc7\x18\xb1\x32\x80\x87\x0c\xdb\xf2\xd0\xa4\x6b\xcf\x3f\x37\xb9\xa4\x44\xd1\x12\x75\x2e\x70\x96\x29\x97\x92\xa1\xc0\x6d\xcf\x47\xff\x6d\x6c\xd5\x6b\xbe\x82\xe5\xb0\xab\xb1\x66\x04\xf8\x64\xc8\x11\x15\x0d\x41\x85\x3e\x40\x90\x4b\x2f\xe6\x90\xc5\x60\x94\xcc\x93\x33\x9c\x61\x8e\xa5\xbf\x5f\x03\x69\x33\x7b\xe5\xe2\x88\x3d\x77\x4a\x85\xe0\x71\xa7\xf7\x18\x44\x90\x49\xa7\x27\x6b\xc2\xd6\x88\x4e\xf5\xc0\xc9\xb5\xc2\xd6\x48\xe7\xda\xa4\x50\xce\x0f\xdf\xe8\x61\xd4\x02\x22\x85\x5d\x69\x47\x93\xe4\xb9\x72\xcf\xad\x66\x06\xcb\x1b\x41\x3d\x0f\xe3\x7d\x46\x82\x5c\x41\x85\x40\x1e\x41\x52\x48\x13\xf4\x2c\x73\x7a\xe0\x62\xb9\x34\xfe\x29\xba\x8a\xd3\x0f\xea\x05\xcd\x33\x13\x3c\x21\x54\xe6\x0e\xe9\x91\xaa\x1d\x46\x85\x72\x26\xee\x37\x53\xfa\x70\x47\x10\x24\x6c\x92\x03\xd1\xa7\xac\xf8\x51\x16\xaf\xb5\x57\xef\xa7\x48\x15\x96\x94\x2d\x9b\x76\x75\x86\xf6\xb0\x7d\x5d\x7c\x6e\xbc\x97\xda\x75\x0f\xec\xfe\x38\x45\x45\x36\x32\xa2\xd7\x67\x0c\x70\x04\xd1\x1d\xec\x22\x15\xa9\x89\xf8\xbb\x47\x3e\x3b\xd1\x6e\xc5\xd5\x22\x9a\xd8\x49\x26\xd5\x92\x3e\x41\x52\x4d\x5c\x8d\xdc\x0d\x29\x02\x4d\xd4\x11\xd1\x40\xcc\x8b\xc6\xa5\x5e\x16\x4d\x88\x21\x53\x2d\x9e\x2d\x0b\x97\x90\xa8\xaf\x32\xd6\x47\x31\x41\x3c\xc0\xb9\x4e\xf0\x42\x35\xe9\x8d\xe0\x65\xaa\x78\x21\x5e\x1d\x94\xae\xaf\x82\xb4\x27\x7a\xd7\x63\x3a\x81\x25\x4d\x7e\xe3\x13\x8b\x10\xc5\x4f\xbd\xc8\x5d\xd2\xb5\x7c\x43\x40\xbd\x3a\xda\x19\x0c\x4a\xb2\x1b\xd3\xdf\xbb\xe3\x37\xc4\x1c\x7e\x46\xc9\xa7\x37\xc9\x1c\x32\xf7\xcb\x8b\xd4\x56\x06\x0d\xd0\xe1\xd6\xa2\x3d\xde\x6a\x01\x53\xc4\x89\x86\xd1\x6a\xf1\xd0\xd1\x6a\x60\x89\xf9\x44\xd7\x5f\xce\x69\x8e\xd5\xd4\xfb\x58\xba\x5e\x4c\xfb\xb4\x88\x09\x4c\x62\x71\xc4\x61\x48\xa3\x3d\x43\x52\x12\xa3\x99\x12\x63\xaa\x93\x7d\x45\xf5\xe5\x0e\xdc\x43\x8a\xd0\xf3\x2a\xa1\x67\xd7\x21\xf4\x9f\x35\x3e\x59\x95\xd0\xdb\x50\xf5\x9d\x4e\x47\x88\x7a\x9a\xcc\xab\xcf\x06\xaa\xcd\x04\x08\xb9\x86\x0c\x8b\x20\xd6\x69\x75\xc2\x6c\x4f\x10\x1a\x73\xb3\x54\x44\x9a\x94\x84\x08\x52\xc8\x1a\x49\xae\x14\xb9\x8a\x2d\xca\xbe\x5d\xf0\x78\x37\xba\xbb\x69\x03\x7c\xb6\x98\xb5\x0d\xe1\xfd\xd6\x6f\x6e\x19\x7c\xc2\x54\x85\xa8\xf1\xa1\x56\x6d\x5a\x98\x70\xc4\xc6\x89\xf4\xb9\x35\x70\xe7\x11\x2d\x37\x54\x5f\x1b\xfd\x74\xfb\x19\x77\xbd\x95\xd9\x65\xdc\x0d\x61\xdc\x3e\x5b\x30\x55\x2b\x53\xdc\x61\x3c\xd5\x72\xb6\x77\x18\x56\xd5\x20\xc7\x33\x79\x3c\xee\xd4\x30\xe9\xb8\x95\x1a\x03\xad\x4a\xea\xd7\x96\x72\x5c\xde\x9e\xd3\xec\x6a\x8c\x33\x27\x8e\xf3\x34\xc9\x55\x66\x5b\x0a\x2b\x79\x13\x86\x34\x36\xf1\x99\xcf\x0d\xc9\x6b\x37\xca\xdd\x5e\xaf\x19\xe2\x03\x89\x3e\xce\xad\x06\x3f\x54\xcc\x74\xab\x25\xd8\xdf\xa7\xdd\x3e\x29\x3c\xb9\xa5\x21\x50\xe9\xae\x40\xfa\x37\x82\xce\xed\xa1\x82\x73\xb7\x44\x1b\x93\x73\x3a\xd2\x2e\x89\x6e\x04\xa5\xcf\x16\x39\x7c\x2b\x9c\x6c\x7c\x44\xde\xc1\xb9\x90\xb2\xd3\x1f\xc4\x40\x8f\xec\x8c\x22\x75\xdd\x81\x06\xbd\x61\x54\x6c\x13\x82\xb7\x80\xed\xdf\x0f\x66\x64\x2d\xc4\x6e\x0a\xac\xda\x61\x75\xc7\xdb\xa9\x69\xc4\x71\x65\xe7\x04\xcc\xbc\x36\xd7\x31\x0a\xa5\x5c\x52\x09\x9c\x5b\xe9\x94\x41\x60\x2e\xe6\x64\x94\x21\x9f\x65\xf3\xe2\x38\x3b\x0c\x5c\x0f\xaa\xc1\x09\x6e\xe0\x97\xe5\xf2\x4a\x46\x31\xe0\x34\x7e\xb0\xfc\xd3\xf1\xbb\xb7\x1d\x15\xde\x0b\x8f\xb5\x90\xfa\x4b\x11\x41\xc5\xa2\x31\x21\x10\xb1\x02\xa2\x35\x58\xeb\x3e\xc1\xb7\xf2\x63\xd3\x2d\xb7\x98\xd9\x7e\x1c\xa3\x56\x8b\xcb\x50\x6a\x28\x3a\x64\x71\x6c\x19\xbb\xbe\x3d\x43\xe3\x38\xd6\xfd\xc9\xae\xf2\x23\x32\xa6\x0d\x1c\xcf\xe6\x3e\xf4\x7d\xaa\x86\xe0\x04\xf1\xf7\x26\x72\xfc\xbb\x71\x88\xa2\x56\xcb\x8f\x1b\x8c\xa2\x8e\xf4\x5d\x25\x24\x21\x73\xe3\x5a\x36\x1c\x15\x4d\x22\x46\x1d\xcf\x28\xd1\x8a\x67\xbb\x11\x29\x69\x1b\x07\x14\x4d\x9b\xaf\xa9\xc2\x3d\xed\x3d\xcb\x83\x98\x80\xb3\x4b\x1d\xa8\xd4\xf5\xde\x10\xb8\x21\x29\x07\x66\x26\xb0\xd3\xe9\xa0\xa1\x8c\xb7\xb7\x65\xe3\x35\x02\xe4\x02\x93\xd4\xb7\x5f\xf9\xd7\x04\x87\x9a\xc7\xed\x80\xb1\x19\x0a\x3a\x56\xf9\x39\x22\x5c\x46\x65\x41\x0d\xd1\x89\x6f\x0f\x8f\xd3\x53\xe9\x22\x35\x8f\x6b\xac\xdf\x32\x49\xd3\xbc\xcf\x74\xa0\x9d\xbc\x4f\x8a\xa2\x0e\x3f\x45\xc5\xba\x90\xc4\x5d\xdf\xfa\x85\x49\x19\x78\x89\x5a\x2d\xd6\x6a\xe1\x56\x2b\x24\x07\x07\x50\xd2\x72\xd5\x9e\x8c\x6d\xfc\x5a\x4f\x2b\xb2\x15\x1a\x8d\x38\xcc\xa2\x48\x58\x9c\x48\xe7\x2f\x2a\xfe\xac\x4c\x90\x3a\x6b\x35\x1c\x38\x4a\xb2\xec\x2c\x19\x7d\x32\xdf\xb2\xc0\x3b\xed\x32\xde\x94\xd1\x4b\x3b\x40\x90\x40\x3a\x84\x49\xb4\xc4\x4a\x29\xe9\xb4\x0f\xcb\x04\xd1\xbe\xfa\x34\xad\x3b\x99\xba\xed\x08\x56\x1b\x88\x2b\x75\x5c\x4a\x49\x14\x6c\x0c\xeb\x6e\x00\x93\xa4\x69\x0d\x2a\xaa\x28\xc4\x45\x7d\x84\x44\x06\xa5\xae\x0c\x34\x26\xf5\xc1\xc5\xc9\xa6\x58\xb3\x42\x9e\xbe\xed\xec\x7d\xec\x6f\x10\xb9\xb7\x60\xf5\xe7\x3b\x86\xab\x30\x7d\x47\x46\x48\xda\x7e\x54\x33\x1a\xd6\xc7\x44\xc4\xc7\x7b\xfc\xb0\x5e\x21\x24\x30\x81\x34\xea\xd3\x56\x8b\x76\x28\x19\xa1\x43\x26\xab\x26\xf0\x07\x4a\x33\x94\x90\x90\x76\x46\xc9\x9c\x2f\x18\x8a\xa2\xfe\x9a\xfa\xb6\xa8\x68\xc4\x96\x16\xfb\xac\x61\x97\x78\x87\xad\x18\x64\xb4\x14\x03\x6b\x28\x19\xaa\xec\xfe\xfa\x4c\xd3\x31\x6e\xb5\xb0\xdf\xf1\xf1\xc7\xf7\xef\xdf\x7d\x38\x39\x3e\x7d\xf9\xe7\x97\x6f\x4f\x4e\xdf\xbd\x3f\x39\x7a\xf7\xf6\xb8\xaa\x6c\xd3\x51\xb7\xd9\x95\x8d\x8b\x69\xce\x07\xcd\xcb\xe8\xbb\xba\x10\xa4\xf8\x1c\xa8\xe0\xbd\x1c\xb2\xb8\xbb\x67\x4d\x04\x6a\x00\x01\xa3\x0c\x0b\x01\x48\x34\x2d\x36\xc5\x52\x40\x55\x2d\x64\x83\x7e\x4e\xd6\x3d\x54\x67\xb2\xfc\x6d\xea\x47\xfd\x90\xd7\x46\xa3\x0a\xc8\x3f\x40\x30\x37\x98\x60\xee\xd5\x82\xfb\x5d\xb8\xdf\x8d\x94\x7e\x3f\x9f\x27\x7c\x34\x55\xf9\xbc\x31\xa9\x27\xf9\x94\x91\x48\x2b\x99\x92\xfd\x5e\x51\x44\x61\x54\x53\xac\x43\x12\xef\xf7\xa2\x65\xc3\x94\x79\x89\xed\x01\x0e\x45\x91\xa6\x05\xe3\x10\x43\x12\x41\x16\x46\x85\xd4\xcc\xae\x5d\x24\x5e\xb7\x07\x97\x0e\x0c\x73\xfc\x1b\x2a\xd5\x25\xe6\x87\x3c\x8f\x55\xe6\x26\xad\xcd\x96\x33\x47\x9e\xa0\x6a\xcb\x94\x13\x4f\xca\xd0\xf9\x4a\xbd\x49\xe3\x65\x51\x61\x6c\xa5\x87\x25\x12\x95\x61\x8e\xdd\x7d\x4f\x07\x68\x18\x93\x01\x92\xee\xb9\x68\xa7\xe4\x6b\xe3\xfd\x7d\xf7\x13\xd2\x8e\xcb\x03\xcb\x5c\x37\x01\x86\x40\xd2\x03\x80\x49\x40\x57\x2b\xea\x7a\x44\x8a\x5a\xad\x90\x76\x0c\x93\x1c\xef\x77\x23\x48\x63\xa6\x3d\x5d\x45\x1d\x26\x78\xc2\x5c\xfd\x52\xc6\x2c\x76\x80\x52\x99\x64\x14\x24\xfa\xf2\x64\xb5\x62\x45\x24\x69\x75\xab\x65\x0d\x37\xbd\xfe\x64\x77\x72\x34\x7e\xfa\xa1\xf7\xa5\x62\x44\x63\x13\x1d\x17\x7a\x99\xb1\xb9\xd2\xb0\x76\x85\xd5\x1e\xd6\x6b\x7d\xa9\x98\x9e\xba\xf9\xa0\x77\x70\x07\x23\x76\x74\x1e\x87\x46\x8e\xc3\x44\x36\xa8\x9d\xda\x95\x37\x93\x2a\xae\x07\xc4\xea\xbe\x33\x50\x47\x79\x5e\x2a\xc1\x3c\x55\xb8\x34\xbb\x2f\x2f\x41\x21\xde\xb3\xf1\xd0\x51\xe4\xdc\x82\x2a\xa4\x7d\x77\x26\x7a\x13\xc7\x87\x0a\x2d\x0d\x43\x12\xd3\x92\xb9\x6f\xba\xe1\x74\xe4\x23\xe2\x62\x91\x27\x47\x11\x1f\x83\xac\x14\x45\x2c\xae\x68\x69\x8a\x78\xab\x48\x36\xac\x62\xa1\xae\x6f\xcc\x11\x1a\xfa\x3c\x65\xc2\x26\x79\xa7\xbc\x50\x18\x74\x87\x1b\x2e\x9e\xca\x2b\x26\x59\xd7\x07\x45\x87\xaa\x1f\xfa\x44\x57\x34\x58\x1d\xd8\xd3\x84\xa4\x19\xfa\x20\x8b\x47\xfe\xed\x54\x53\x43\x0b\xb2\x6b\x53\xee\x97\x5e\x41\x8f\x5f\xd0\x8f\x29\x0a\x48\xe3\x24\xc4\x9d\xb9\x11\xc5\x60\x6d\x19\x07\x6c\xb8\x59\xa4\xf5\xee\x24\xa0\x03\x6e\xc9\x0e\x16\x11\xac\x74\xe0\x0e\x0d\xc0\x01\x19\xc2\x52\x24\x7c\x77\x41\x0c\x6e\x18\x0f\xf9\x94\x6d\xa8\x1e\x41\x27\x2f\x82\x9e\x45\x71\x43\x3c\xe2\x79\x32\x41\x2a\xe6\x51\x69\xb7\x6f\x93\x76\x65\x78\x4a\x73\x80\xbb\xd9\xaf\x38\x0e\x79\xe3\x7e\x0d\x41\x39\x38\x15\x02\x32\x82\xac\xb2\x65\x5d\x96\x7c\xc3\xae\x15\xe7\x40\xf3\xae\x35\xb1\x0b\xa9\xde\xad\x38\x26\x3b\xef\x56\xbc\x76\xb7\xe2\x35\xbb\x15\x57\x77\x2b\xf6\x76\x2b\xae\xef\x56\x5a\xd9\xad\x72\xbc\x47\xb5\x8b\xd6\xc9\x02\xa7\xaf\x28\xd3\x77\xac\xa2\x95\x30\x5a\xca\x19\xcb\x26\xc5\xb4\x13\xb3\x67\x35\x7b\xae\x66\xae\x5c\xf8\x2d\x71\xda\x2f\x13\x8f\xd2\x22\x2a\x3c\x61\x53\x49\x54\xaa\xab\x24\x97\xc6\xbf\xcb\x02\x72\x58\xad\xa7\xc3\xb7\xa0\xce\xdf\x29\x26\x21\x00\x51\x61\x35\x47\xb5\x3e\x99\x3f\x8e\x7c\x34\x45\x02\x63\x4e\x44\x0b\xea\x22\x3b\x8c\x20\x00\x95\x5b\x6a\x35\x27\x2f\xcd\x6b\x46\xb1\x2a\xa1\x3b\xa8\x1d\xfa\x91\x84\x80\x39\xdb\x2c\x29\x31\x23\x8f\x07\x7c\x08\xb3\xf8\x36\x44\x00\x8e\xe2\x65\x01\x5d\x1e\x23\x5b\xc3\x63\x8c\x04\x8f\x91\x69\x1e\x63\xe4\xf3\x18\x23\x0f\xdf\xaa\x3c\xc6\x68\x2d\x8f\x31\x5a\xad\x46\x55\x1e\x63\xe4\xf3\x18\xa3\x38\xdf\x85\xc7\xf0\x34\x0f\x21\x85\x09\x44\xd1\x6a\x85\x8a\x08\x8e\x22\xb8\x70\x78\x8c\x51\x85\x03\x18\x69\x1e\xc3\x4b\x3f\x1c\xd5\xf1\x7d\x61\x79\x8c\xd1\x66\x1e\xa3\xda\x43\xf3\x96\x15\x43\x1c\x89\xe9\x29\x1e\x83\xc4\x23\xc8\x94\x41\x98\xc8\xc9\x61\x06\x17\x70\xe4\x10\x4d\xbc\x91\x68\x1a\xef\xb8\x0f\xab\x84\xe9\xba\xa4\x53\x10\x24\xd1\xbf\x17\xda\xde\x5c\x08\xb2\x75\xf4\x47\x5e\x93\x3b\x58\xc7\xd6\xd2\x1f\xb6\x86\xfe\xb0\x2a\xfd\x61\xde\x7a\xb0\xfa\x7a\x10\x87\xfe\xd8\xc1\x2e\xee\xd7\x36\xc7\xf6\x3b\xfa\x0f\x07\xff\x3f\x81\x83\x4f\x63\xb0\x20\xaa\x8d\xb4\x7c\x65\xf4\x2a\xc9\xf9\x0f\x94\x72\x2d\xee\x4f\x63\x19\x9b\x06\xbd\xc0\xa9\x8a\x56\x08\x64\xdd\xf1\x3a\x6e\x02\x6e\x11\x0a\xaa\xbc\x47\xa9\x25\x8f\x6a\x82\x82\xaa\xa1\x03\x3a\x35\xb0\x1d\x2e\xab\x91\x69\x3b\x2f\x41\x32\x4e\x14\x9f\x45\xe5\x81\x54\x66\xc9\x79\x30\x00\x93\x4a\x7a\xa9\xa7\xcf\x75\xce\x42\xe7\x98\xb3\x69\x30\x2c\xd3\x4e\x35\x24\x55\x40\x1e\x00\x97\x39\x9a\x27\x2c\x91\x71\x95\x82\x55\x00\xe0\x9c\x49\x87\xfe\x62\xa3\x31\x34\xcf\x92\x11\x32\x1c\xaa\x69\xa2\xe1\x6c\x54\x9a\x0f\x6d\x35\xc8\x16\xc4\x9e\x9f\xef\x88\x80\x52\x32\xe6\x88\x7d\x90\x76\xcf\x00\x2a\x33\x21\xa9\xc6\x53\x86\x33\xb2\x9d\xa8\x68\x62\x48\xf4\xa1\x7c\xaa\x43\x85\xa1\x97\x97\x38\xe7\x98\x4c\x64\x15\xa3\xa7\x51\x2a\x1a\xa4\x57\x68\xe2\x1a\xc5\x89\xed\x93\xd3\xec\x1c\x7d\x70\xbc\xec\x87\x40\x6d\xd2\x3e\x22\xe7\x98\x51\xa2\x96\x6f\x0f\x75\x2c\xf0\x5b\xad\x01\xb0\x70\x01\x10\x68\x98\x48\xdf\xd9\x73\x65\xb6\x6d\x29\x07\xb7\xf3\xc6\xf9\xcb\xd9\x5c\x20\x72\xd9\xd0\x80\x0f\xa3\xd5\x4a\xf1\x19\x3e\xe4\x05\xd5\xaa\x14\x2c\xf4\x6c\xd5\x42\x77\x28\x09\xa7\x2a\xa1\x01\xe0\x51\x21\xa3\x28\xcb\x50\x5b\x2f\x54\xbb\xb9\xb9\x9a\x53\x6c\x6b\xa5\xbf\x8e\x9d\x0f\x64\x8d\xf9\x7a\x8e\x90\x34\xe6\xea\x79\xef\xa9\xeb\x29\x54\xb6\xd6\x6a\x85\xce\x57\xcc\x23\x68\x8a\xe8\x06\xcd\xe5\x96\x2a\xa9\x13\x63\x56\x96\xd3\x4d\x9b\x72\x44\x96\xd3\x89\x31\x11\x58\x31\x45\x0c\xf3\x57\x8c\xce\xde\x33\x74\x8e\xe9\xc2\x99\xa9\x6c\x51\xa6\xed\xf1\x56\x2b\xdc\x3a\xbc\xf2\x77\xc3\x40\x9d\xf1\x71\xf3\x2b\x8a\x0a\xc9\x87\x56\x60\x3b\xc6\x24\x95\xc0\xff\xe1\xea\x28\x0d\x51\x07\xa7\xf2\x19\xa0\x65\x82\x5d\x5e\xd2\xfa\x10\x17\x9c\xc5\xa0\xd3\xe9\x38\x99\x43\x88\x55\x5f\x6a\x0e\x56\xc3\x68\x52\xe4\x8b\x5e\x82\x2e\x79\xcc\xe5\x1f\x85\x10\xcd\x20\xd1\xe6\x9f\x4d\x78\x01\x89\x7c\x08\x39\x42\x21\x83\x3d\x88\x14\x09\x77\xd8\xdf\x5c\x00\xba\x3e\x72\x75\x1a\xb5\x7b\xd1\xa0\x3b\xdc\xb3\x0b\xa8\x06\xc6\x20\x53\x03\x43\x9b\xc6\xb4\x71\x50\x6e\xff\x15\xb8\x40\x34\x2c\x34\x93\xbe\x19\xf2\x11\x5c\x8a\x51\xf4\x19\x34\x23\xeb\x93\x22\xe6\x72\xb4\xac\x1c\x2d\x89\xa0\x40\x2c\xa2\x86\x2c\x84\x8a\x32\x4f\x41\x56\x9e\x4e\x5a\xd4\xac\x2e\xd2\x1e\x36\xe0\xc3\xee\x6a\xf6\xfc\x29\x60\x29\x7a\x9d\xe3\x1c\x9f\x65\x48\x0e\x31\x0f\xd5\xd8\x91\x0b\x55\xc8\x63\x74\x68\x1e\x1e\xf7\xbb\x90\xc5\x83\xe1\xde\x98\xb2\xf0\x3b\xde\x6e\x7f\xa7\x2a\x90\x58\x50\x04\x81\x51\xc4\x6c\x85\x68\xc9\x3a\x0b\x92\x4f\xf1\x98\x87\x24\xda\x3b\x63\x28\xf9\x54\xb8\x49\xe6\xa1\x29\x93\xc3\xc8\x65\x24\xc6\xa6\x51\x78\x03\x84\x3c\xde\x57\x43\x10\xb8\xc9\x04\x3a\x0e\x86\x25\x1a\x1a\x22\x87\xe2\xa7\x4b\x3c\x0e\xa5\x47\x2f\xc2\x23\x6c\xbb\x45\xd1\x1e\xca\x72\x14\xc8\x4c\xb3\x65\x96\x62\x2b\xf2\x78\xbf\xa7\x1b\x36\x92\x5c\xa4\xc1\xcb\x04\x3a\xe1\x56\x2b\x0c\x51\x4d\x5a\x44\x51\xe4\xec\x57\xec\xee\x57\xe6\xf4\x5a\xc8\x5e\xb9\xa0\xad\xe5\x04\x6c\x3f\x90\x75\xf4\xa6\x2d\x22\x28\xa5\xec\x51\xc2\x25\x28\xdd\xa7\x7d\xc8\x64\xf0\x48\x1c\x91\x51\x51\x3e\x1b\x76\xe1\xe5\x42\x12\x72\xb3\x58\xe5\xed\xa1\x59\xca\xef\xd8\xf7\xe4\x3b\x76\x70\xa0\x2a\xe3\x18\x0d\x98\x40\x1c\xae\x0e\x94\x90\xab\x21\xe9\x84\x08\xb2\x83\xde\xf7\xa4\xd5\xb2\xc9\xe5\x44\xed\x4a\xf2\x52\x40\xde\x51\xbc\x35\x47\xc7\x78\xbc\xf1\xec\x70\x0f\xde\x30\xb2\xf7\x20\x1a\x49\x0d\x10\xf6\xd2\x43\x99\xa2\x0a\x0b\xc6\xea\x8c\x52\xae\x2a\xa1\x48\x49\xf4\xf6\xb2\x42\xce\xca\xd0\x02\x7b\xac\xa9\xe4\x17\xc6\xe6\x5c\x2c\xc8\x96\xb3\x7c\x59\xd4\x76\xf8\xb2\x41\x37\xa0\x02\x4f\x89\xc3\x97\x77\x70\x1a\xc7\x31\x92\xcf\xbb\x9b\x87\x2a\x50\x77\x3f\xd5\xaf\xb3\xed\x3d\x90\x3f\xfe\x29\x4a\x52\x71\x32\x76\x46\x53\x9c\xa5\x6f\x69\x8a\x72\xbb\xce\x34\xee\x7e\x47\xbf\x67\x66\x9d\xa9\x59\x63\x14\xb3\x01\x1d\xee\x01\xa5\x18\x93\xee\x04\x08\x4d\xe5\x4b\xa4\x0e\xa7\xaf\xe9\x05\x62\xcf\x13\xc1\xc4\x8b\x65\x56\xd4\xec\xb9\x68\x5d\x80\x41\xed\x72\x7f\x0c\x95\xeb\x27\xd5\x6c\xa4\x55\xc4\xd5\x62\x27\xe8\x92\x8b\x61\x4a\xdb\x62\x41\x60\x11\x49\x55\xeb\x58\x50\x37\x37\x81\x28\xcd\xc5\xc8\x57\x11\x3a\xac\xe6\x80\xdf\x5a\x7b\x59\x6d\xdd\x70\xab\xb7\x57\x8c\xe6\xd5\xa6\x1d\xc3\x14\x72\xdb\xc6\x3d\x5d\xe8\xf8\xba\x62\xfd\x3d\xbe\x14\x90\x92\x05\x5f\x23\x5b\x54\x76\x59\xb4\x74\xdf\x4f\x34\xd8\x2e\xce\x05\x6a\xb6\x55\x08\xc9\xf6\x05\xe6\xd3\xb6\xc2\x29\xf7\x9d\x9c\x57\x66\xb6\xc8\x38\x9e\x67\xc8\x2d\xdc\x74\xf1\x76\xed\x86\xbd\xf6\xb6\x35\x62\x9e\xdd\xe5\x3b\x35\x57\x33\xa3\xfe\x2c\x16\x38\xa4\xc1\x02\x27\x4b\xae\xe8\x82\xf7\xad\x61\x33\x94\x63\x54\x51\x6b\xed\x73\x41\xf5\x5e\xb1\x11\xca\x00\xaa\xab\xa7\xbc\xbf\x54\x39\xef\x98\x0a\xc1\xef\xaa\x59\x91\xa1\x81\x48\x9c\x64\xa7\xa7\x38\x3f\x5e\x4c\x26\x28\x17\x15\x4f\x4f\x15\xc7\xa6\xe8\x37\x25\xba\x36\xeb\x9c\x9e\xca\xf9\x9c\x9e\x42\xae\x09\x38\x25\x4a\x2e\x56\x7e\x0e\x7d\x6b\x88\x06\x77\x11\xb7\x5b\xe0\x6b\x20\xcc\xf5\xd6\xba\xa9\x39\x6d\xaf\x31\x61\x74\x31\x6f\xcb\xdf\xf7\x86\x12\x6a\x77\xda\xa5\xb6\x88\xc1\x93\x89\x5a\x76\x00\x35\x8e\x94\xef\x1b\x64\xc4\x56\xc4\x4a\xac\x79\xa3\x12\x60\xae\x96\x15\xa5\xca\x64\xc5\xb6\x5a\x41\x1e\x17\x78\xb6\x4a\x9b\xea\xe0\xc9\xbb\x61\x20\x80\x2a\x52\xac\x0a\xd1\x99\x1a\x9a\x59\x31\xbb\xf1\x6e\x09\x0a\xa8\xba\x50\x3e\x80\xfa\x6a\xe6\xfa\x56\x20\x0d\x81\xce\xec\x0c\x86\xc0\x7b\x8b\xe1\xf0\x57\x13\xc4\x6d\xb9\x32\x8c\x93\x60\x91\xf9\x14\x11\xfd\x47\x60\xb9\x6a\xfb\x59\x88\xa2\x0e\xa7\xca\xe5\x50\x14\xf5\x9b\x52\x6d\xa2\x34\xf9\xcf\xa7\x74\x91\xa5\xc7\x53\x7a\xa1\xf6\x81\x82\xa3\xab\xa5\xde\x2f\x07\x92\xdb\x62\x3f\x4f\x11\x01\xd1\x6a\xb5\x3e\x4f\xed\x19\x98\xa4\x69\xbd\x61\xc5\x7c\xad\xef\xb9\xd5\x0a\xc1\x19\xe5\x9c\xce\x04\xe3\xd0\xd4\xc7\x7b\x7d\xab\x0a\xa2\x43\xcd\x24\xca\x52\x67\x0b\x9c\xa5\xe5\x56\x7f\x45\xd9\x09\x62\x33\x21\x6a\xf5\xb9\x65\x90\xb7\x94\x14\x83\x2e\x29\x8c\x58\xf1\x67\xc4\x94\xf4\xb4\xf7\x0a\x8e\x1f\x8e\xff\xfc\xde\x28\x52\xc2\xda\x9a\x49\x98\x83\x28\x52\xeb\xc4\x94\xa4\xd0\x75\x9d\x2b\x19\xc1\x64\xcf\x61\x7a\xd4\x64\x65\xdf\x4e\xec\xae\xc3\x86\x0e\x15\xbc\x74\xf3\x3c\x7e\x1a\x72\xb3\xd0\x52\xca\xe0\x0e\x32\x68\x61\xb3\x61\x3d\x44\x0b\xfd\x50\x4b\xb7\x9a\x70\x1a\x24\x61\x51\xf9\x76\xb2\x56\x55\xc8\x1d\x51\x11\x15\xb0\x4e\x89\x05\xf9\x40\xad\x56\x9d\xf8\x56\xc8\x2e\x72\xc9\x2e\x64\x0d\x84\x57\x74\x51\x40\x43\xcf\x0d\x8d\x27\x16\x2c\x5a\x10\x91\xd0\x7a\x85\x51\x96\x1e\x6a\x11\x46\xa6\x6b\xca\x11\x5a\xfd\x57\xa8\xd9\x70\xa7\x82\x00\x40\xbf\xa9\x92\x04\x4e\xd8\x85\x4c\x43\xc5\xd8\xc5\x85\x68\xb5\x1a\x0c\xe5\xb3\xc1\x02\xae\xc5\x24\x63\x6f\x59\x85\x80\xa0\x1c\x76\xd2\x7d\x04\xb9\x10\xd1\x9b\x90\xf2\x75\x72\x86\x64\x20\x87\x5a\x27\x26\xc7\xe3\xfe\x2b\x65\x0e\x9b\x12\x85\x6c\xf2\xcb\xb3\x34\x0d\xc0\x83\x25\x2a\x40\xa7\xd3\xf9\xe5\xb3\x1e\x6b\x0d\xd4\xf6\x73\x9d\x73\xf5\xae\xee\xf3\xbd\xc3\xb5\xce\xb3\x6d\x46\xc5\x77\x75\xf0\xdf\x17\x03\xee\x3d\x2a\x6a\x76\x0c\xc2\xdf\x3f\xfb\xf8\xf7\xbf\xf0\x17\xcd\x8e\x41\x8e\xf5\x09\x0b\x0c\x92\x00\x8e\xd8\x0c\x40\xcf\x63\x88\x54\x94\xeb\x2d\x68\xc1\x2d\x33\xb2\x8c\x5e\x3c\xcf\x50\xc2\xe4\x17\xc3\x89\xb2\xfc\x38\x43\xe9\x0f\x57\x26\xe9\x88\x48\xd9\xda\x7c\xca\x1d\xe4\x7d\x64\xa6\xb4\xda\x32\x72\x44\x6a\x2c\x7f\x18\x25\xd9\x68\x91\xb9\xc7\x8e\x48\x14\x52\x87\xfa\x41\x73\xf4\x8e\xd8\x39\xfc\x41\x8f\xf9\x47\x3c\x99\x66\x78\x32\xe5\x28\xad\x38\x3c\x91\x9f\x98\xa9\x3f\x3a\x82\xba\xf8\xcd\xe8\x3c\xa5\x17\xe4\xb9\x69\x19\x5d\x72\x96\x88\x1f\x92\x4f\xf3\xe6\x3c\x35\x8d\xbf\x23\x3f\x52\x69\x65\x03\xfe\x30\xa5\x0c\xff\x46\x09\x4f\x32\x77\x9c\x5a\xb0\xcb\xae\xde\xcd\x11\x51\x1d\x65\x34\x49\x31\x99\xbc\x41\x79\x9e\x4c\x04\x83\xf8\x07\x49\xf1\x4e\x18\x9e\x4c\x10\xfb\x19\xa7\x7c\x2a\x12\x09\x55\x6c\x56\xee\x14\xa4\xe4\x87\x6c\xc1\xd4\xaf\xe7\x62\xe2\xea\xe7\x2b\x3a\x5a\xe4\xea\xe7\x11\x99\x2f\xb8\xfa\xf9\x13\xba\x12\xf3\x51\x1f\xa2\x7b\xf9\xab\x61\x05\xa5\x12\x6f\x4a\xb3\x54\x4d\xc4\xf9\xf4\x8b\x31\x69\x60\x7c\x3c\x62\x34\xcb\x94\xbb\x18\xe5\x57\xe2\xd9\xfb\xa3\xba\xf7\x18\x08\xfe\x90\xcb\x92\x27\x54\xfe\x2e\x09\x7e\xf9\xe9\xcc\xcc\x4b\xf0\xba\x55\x39\xef\xfd\x31\xaa\xfd\x86\x52\xf7\xf7\x11\x47\x33\xaf\x26\x4f\xce\xf4\x83\x24\xf0\x07\xae\xa0\x6b\x17\x57\x7f\x1f\xa5\xce\xc7\x07\x9a\xc9\xb1\x08\x59\xfe\xd9\x14\x25\xa9\xe6\x73\x45\xda\x39\x62\x1c\x8f\xbc\xb5\x6d\x25\x9c\xb3\x7c\x9d\x9b\x9c\xc7\xd2\x7b\x4d\x17\x0e\x1e\x7f\x65\x3d\xd9\x74\xe1\x00\xac\x63\x77\xc1\x50\xfb\xd3\x69\x70\xab\xd3\xe0\xc4\xe6\x11\x04\x41\x20\x32\xbe\x81\xa2\x65\xe9\x94\xa7\xf7\x35\xfc\xf2\xb1\x72\x7f\x73\x7f\xdb\x55\x3a\xe2\x69\xea\xe8\x3f\x1b\x59\x6f\xe4\x59\x89\x45\x5b\xf7\xb4\xba\x08\xbe\xfd\xfe\xfe\xc7\x6f\xf5\xf2\x97\x16\xd9\xfe\x89\xa9\x80\x5f\xfe\xb6\x94\x41\x6f\xf6\x2f\x87\x72\x67\x7e\xa5\xfe\x7c\xad\xfe\x7c\xa3\xfe\x7c\xab\xfe\xf4\xba\xea\xaf\xa0\x0b\x6b\x36\xd2\x50\x97\xec\xe9\xbf\x8f\xf4\xdf\xc7\xfa\xef\x13\xfd\x57\xf7\xd6\xd3\xdd\xf5\x74\x7f\x3d\xdd\x61\x4f\xf7\xf8\x48\xf7\xf8\x48\xb7\xf7\x48\xb7\xf7\x48\xb7\xf7\x48\xb7\xf7\x48\xb7\xf7\xe8\xab\x72\x84\x06\x8f\xf5\x90\x1e\xe9\x2e\x1e\xc9\x2e\x14\xa1\x33\xbe\xc1\xba\x82\x28\x7a\x52\x09\xd0\xc4\x4d\x55\xd1\xa3\x79\xac\x47\xf3\x58\x8f\xe6\xb1\x1e\xcd\xe3\xc7\x65\xaf\x9e\x28\xa7\xbb\x7e\xac\x47\xf9\x58\x8f\xf2\xb1\x1e\xe5\x63\x3d\xa4\xc7\x7a\xd6\x8f\x75\x3f\x4f\xba\xeb\x86\xe8\x0b\x98\xde\x20\x45\xe7\x3e\x02\xeb\xde\x9f\xe8\xd1\x3e\xd1\xa3\x7d\xa2\x47\xfb\x44\x8f\xea\x89\x1e\xd5\x13\x3d\xaa\x27\x7a\x54\x4f\xbe\x29\x1b\xae\x21\x9e\x69\x5b\x8f\xf8\x4b\x0d\x99\x2f\x75\x5f\x5f\x3e\x1a\x6e\xf5\x6b\xf6\x08\x82\xbf\xfd\x4d\xa2\x9f\x3a\x81\x1e\x19\xff\x69\x70\x00\xaa\x52\x90\x3d\x6d\x76\xf3\xde\x26\x4f\x1b\xf1\x9f\xc8\xec\xc1\xa6\x73\x6d\x9d\x2e\x08\xe8\x81\xfb\xbc\xa5\x75\xed\x06\xb5\x2b\x39\x59\xca\xcc\x60\x07\x17\x71\xfe\x88\xbe\x81\x4f\x6a\x0d\x6e\x6a\xce\x64\x8b\xea\xd5\x5c\x51\xbb\xd8\x58\xbf\xb7\xdd\x25\xdc\xc8\xa1\x28\x89\x39\x00\xf1\x18\x40\x90\x21\xbe\xd1\x41\xdc\xdd\x48\x1f\xd6\x75\xdc\xcd\x94\xed\xb7\x14\xfd\xfe\x99\x44\x9f\x1f\xa6\x27\x2f\xde\x3c\xbe\x4c\x1a\x45\x9f\x1a\xef\x26\x70\xfb\x4b\xb5\x43\xd1\xa5\xc6\x5d\x07\x0d\xd6\x2f\xb8\x11\x7a\x3f\xfb\xca\xd6\xa0\x7d\xfd\xa5\xde\x7a\x97\xe2\xab\x09\xfe\x30\xc9\xf0\x6c\x86\x58\x59\xed\x3f\x8f\x97\xfe\x63\xfa\xb8\xd6\x67\x58\xbe\x79\x3f\x5e\xd1\xb3\x1f\x3e\xf2\xab\x35\xaa\x08\x7b\x4a\xe4\x56\x0c\xa8\xb0\x60\xb7\x96\x58\x76\x94\x8c\xee\x40\xb0\xb9\x99\x3c\x73\x43\x41\xe6\x96\x42\x8b\xe2\x65\x77\x56\x44\x54\xd3\xbc\xb1\xec\x20\xd1\x94\x62\xcc\x3f\x46\x5e\x61\xe8\xd7\x05\x66\x5a\x72\xb8\x4b\xd9\xe5\x26\x12\x8a\x7a\x23\x7e\x35\x57\x22\x86\xba\xbd\x6f\x90\x55\x1a\xe4\x98\xb5\x72\xcb\x7a\x75\x85\xa3\xd5\xab\x9d\x7e\xdf\xc0\xca\x9d\x9b\xd2\x29\x3c\xd1\x3a\x85\xff\xec\xc4\x7f\xc3\x9d\xf8\xcf\xaf\x5b\xf8\x57\xdc\xab\x37\xd8\x9f\xe5\x06\xb7\x0e\xb6\x95\x48\xa8\x25\xc0\x6d\xea\x04\x5f\x24\xeb\x75\x8d\x2c\x6b\x24\xda\x4a\x7e\xaf\x14\x46\xf5\x76\xf8\xc1\xdf\x4d\x56\x1f\xf9\x0f\x55\x3c\xf8\x5a\x86\x52\x75\x20\xc6\xad\x5e\x92\x2a\x04\x1e\xfa\x1a\x85\x32\xdb\x60\xf2\xb0\x9a\x21\xb1\x7a\xb8\x59\x01\x71\x33\x45\xc3\x6d\x55\x04\x3d\xc1\x7e\xd7\x45\x06\x6b\xe9\xa4\x31\x29\x00\x46\x65\x30\xac\xaa\x37\xfc\xb5\xfe\xb2\x37\x84\xcd\xe6\x3c\x0f\x75\x53\x60\xe8\xb8\x4e\xaf\xe2\xe1\x97\x5d\x25\x9d\x2b\x35\x84\xfa\xeb\x28\x68\x8c\x45\xc5\x49\x72\x76\xa4\xaa\xed\xaa\xaa\xb0\xc2\xfb\x97\x5f\x6a\xa4\xd4\x6b\xbc\x59\xfa\x86\x8f\xea\xf2\xf9\x06\xc1\x4c\xec\x6d\x47\x72\xd9\x51\x40\xdb\x2a\x23\x59\xb1\x2b\x43\x3c\xc8\xca\x27\xfb\xe6\x6d\x7e\xfd\xad\xbe\xff\x9d\x84\x21\x5d\xfb\x7c\x5f\x3e\x6b\xaf\xc0\x35\xac\x87\x3f\x2a\xdf\xb9\x57\x09\x4e\xab\x55\xe6\x79\xd4\xf1\x10\xb4\x7b\xa0\xef\x54\xd4\x8b\xbd\x5a\x81\x2e\x28\xca\x9d\xa1\xc4\x3a\x3c\x0e\xcb\xa2\xea\x20\x68\xb5\xf6\x7b\x5e\xd7\x2a\x59\x59\x42\x18\x8f\x1d\xca\xd1\xfa\x58\xec\x4c\x79\xa8\x84\xf6\x45\xbb\xdc\xad\x8e\x1d\x8a\x6e\x42\x26\xbb\x83\xd6\x49\xda\x42\x62\x5d\x6b\x7a\x73\xd7\x1d\x4a\xe9\x36\x74\x7e\xc3\x98\xdd\x9a\x87\x21\xef\xe4\x9c\xce\x85\xd0\x93\x4c\xd4\x43\x9c\x08\xee\xf7\xa2\x7e\xef\xb1\x74\xa7\xf6\x09\x5d\x3d\xa7\xa9\x34\xa8\xc0\xb9\x98\x6d\x73\x0d\x27\xb2\xd8\xb4\x64\x2d\x0e\x51\xc7\x9c\x26\xad\x56\xbb\xb7\xaf\x1e\x81\xa8\x04\x6b\xb2\xef\xd5\x88\x0e\x43\xd4\xd1\x56\x30\x1d\xc9\xbc\x84\x5c\x8d\xc7\x4d\x9f\x52\x91\xe1\x55\x84\x0d\xc5\x9c\xea\xf6\x25\x64\x23\xc1\x77\x2d\xf8\xc4\xf4\xf4\x10\x57\xab\xc1\x30\xd2\x12\x70\x37\x82\x24\x6e\xf7\xac\xf5\x31\x8e\xbb\xdf\xe1\xd2\xfa\x18\x1f\x1c\x44\x78\x1c\xda\x27\x47\xbf\x2e\x92\x2c\x64\x03\x3c\x84\x28\x8a\x96\x24\xc6\xe6\x69\x80\x16\x93\x9f\xb6\x7b\x87\xcc\x3c\x5f\x20\xb0\x17\xf5\xad\x71\x3c\x64\x85\xb7\xde\xd2\xc4\xdf\xbc\xb6\xb0\xe6\xc6\xbf\x2e\x10\xbb\x52\x13\xa0\x2c\x04\xff\xab\x81\x68\xea\x8d\x51\x12\x4f\x2c\x5a\x6c\x83\x03\xd4\x59\x10\xfc\xeb\x02\x1d\xa5\xd2\x57\x35\x57\xf8\x15\x4a\x43\xc3\xba\xbb\x02\xc5\x02\x0d\xd8\x76\x5f\x07\x74\x4d\xe5\x08\x52\xd7\xd3\x41\xd2\x54\x50\xf3\x62\xbb\xb8\x54\x58\x5b\x7b\x97\x7e\x2c\x77\x27\xd6\xe6\x06\x3d\x99\xfa\x95\xbe\xa8\xab\x83\xca\xe0\xa6\x78\x15\x39\xcc\x1a\x7c\xde\x5e\x8b\x00\xdb\xb3\xeb\xce\x94\x55\xe6\x41\xf5\x5e\xf5\xbd\xee\xbd\xbf\x13\x4e\xff\xa3\x2c\xfb\x9f\xa1\x2c\x9b\x6e\x56\x96\xbd\x9f\x1e\x7c\xb9\xa0\x69\xbe\x56\x59\x06\x20\xc0\xe9\x65\x29\xb1\x48\xb9\x12\xe7\xfc\x8c\x5e\xea\x0b\x4c\x47\x6b\xe0\x09\x7b\x46\x30\x9c\x57\x85\x20\x5f\x94\x72\x4d\x80\xac\xd0\xbb\x4e\x3a\x5a\x67\x11\xd1\xeb\x41\xb0\xc8\x24\xb3\xf7\x15\xec\xed\xc0\xe1\x6a\xf1\xb2\xad\x38\xdc\xc7\x70\x00\x0c\xb1\x06\xe6\xaa\xe8\x09\xec\x36\x5a\xb0\x55\xdb\x90\xbd\x7e\xad\xe4\x96\x27\x70\xf0\xf8\x1b\x29\x3b\x95\xb7\x8b\x48\x0b\xc6\xf6\x7a\x4f\xf4\xa6\x4e\x79\x57\x04\x52\x55\x05\x47\x0d\x38\x5d\x8c\xa6\x39\x4f\x64\xdc\x3a\xc3\x04\xcb\xd3\xf8\xdd\xbc\x2a\x39\x39\xd5\x66\x74\x91\x23\x4d\x76\xb7\xd4\x92\xc2\x56\xf5\x3a\xef\x5b\x87\xb3\xff\xa6\xf6\x5b\x8d\xdb\x8a\xb0\x15\x63\x92\x9b\x5c\xf6\x49\xc0\x75\x21\xc8\xb0\xfc\x25\x6f\x45\x76\x5c\x38\x29\x99\xa8\xd1\x3d\x31\xf2\xa6\x90\x33\x8d\x46\x45\x70\xec\xdb\x5b\x69\xb7\xcb\x0a\x7a\x16\xc3\x75\xc0\xf9\xca\x01\x82\xd3\xcd\xee\xa6\x34\xce\x65\x62\x17\x82\x7c\x9e\xc8\xc6\x7b\x4f\x20\x60\x4a\xdd\x75\xb6\xe0\x9c\xda\xc4\x84\xe1\xa4\x9d\x69\xd5\x96\x7a\x3f\x15\x98\x40\x28\xaa\xc8\x16\xec\x54\x75\xda\x67\x9c\x68\xe8\x82\x34\xe1\x49\xdb\x2c\x60\xdb\x78\x52\x36\xf1\xaf\x9c\x59\x07\xf6\xbf\xff\xef\xff\x75\x3e\x65\x3b\x8f\xb7\x5f\x7b\x2a\x80\xd9\x75\x79\x74\xb3\x8b\xe0\xea\x55\xf0\x97\x6e\x7b\x03\x71\x22\x2b\x5a\x51\x55\xe8\x57\xd4\x0f\xbd\xdb\x5f\x00\x5b\x29\xb2\xd7\xf5\xa4\xc8\xdd\xef\x80\x77\x80\x9d\x14\x3a\xd7\xc4\x29\x7b\xe2\x6c\xc6\xc7\x7a\x7e\x8e\x4d\x84\xb9\x86\xff\x76\xeb\x96\xdc\x7a\xf1\xee\x63\x66\x33\x86\xb9\xf4\xdc\xe0\x4d\x4f\x2b\x8b\x76\xc2\x90\x9d\xd0\xe6\xdb\x6b\x0d\x5f\x0e\xa4\x07\x81\xe4\xbd\xc1\x26\xea\xdd\xcc\xae\xeb\x2a\x20\x59\x70\x2a\xf8\xba\x0c\xc9\x87\x35\x74\x3c\xf6\x73\x18\xd3\x76\xac\x95\x8c\x64\x8e\xb9\x3c\xe1\xcb\xbc\xde\x57\x02\x96\x28\xcb\x46\x53\x34\xfa\x04\xa0\xd4\x1b\x6c\x3d\xa0\xd6\x49\x13\x6b\x8f\xa9\xde\x57\xf0\x11\x2c\xa9\xb3\x38\x5b\x4f\xec\xc5\xb2\x18\x83\x24\x24\x23\x4a\x38\x13\x87\xba\x56\xf8\xa9\xbc\x2f\xab\xd6\x22\x6f\x74\xaf\x52\x28\x3a\xe6\x57\x19\x2a\xdb\xf1\x8e\xf1\xd2\x62\xe7\xea\x0c\xb9\x5a\x4e\x5b\xbc\x54\x6e\x37\x52\x4d\x59\xa6\x64\x1d\x94\xfe\x51\x41\xf4\x89\x31\x9b\x01\xfe\xf1\x36\xd6\xb2\x8b\xd4\x51\x36\x9d\x7f\x67\x92\xe1\x50\xca\xcb\xa6\x7c\xb5\xd2\x15\x25\x9d\x52\x49\x37\x1f\xa8\x9f\xac\x14\xb3\x46\xe1\x57\xa9\xd4\x73\xad\x55\x38\x65\x0e\x1c\xf3\xda\xe9\xbb\x0b\x25\xf5\xca\xec\xb8\x3d\xc5\xfe\x58\xe4\x6d\x3c\xd2\x67\x49\x53\x5f\x1b\x94\x59\x82\x92\xa6\x58\x1c\x0f\x39\x12\xfc\x07\x20\x54\x9a\x98\x48\x0f\x20\xd2\xbe\xc4\xb5\x3c\x59\x90\x0c\x49\x85\xb4\xa8\xb2\xd0\xee\x50\x40\x9b\xb3\x64\xf4\xa9\x9d\x48\x8b\x2a\x08\x50\x22\xd6\xf2\xae\xd4\x62\x46\x2a\x33\xea\x31\x38\x8e\x95\x53\xef\x56\x4b\xfd\xed\x90\xe4\x1c\x4f\x12\x4e\xd9\x61\x35\xa1\xb3\xc8\x11\x7b\x36\x91\x0f\xc8\x00\x9c\xc7\x63\xab\x1e\x01\x6f\x8e\x8f\x5e\x06\x20\x7a\xda\xee\xad\x56\x4e\xf2\x09\xc3\x29\x22\xfc\xa1\xcc\x91\x9a\xb8\xd9\x35\x9c\x67\xfa\xdf\xb4\xaa\xa0\xab\x7c\xe7\x95\xef\xec\x0e\x9c\x6f\x8e\xb4\xdf\x1a\x89\xfb\xaf\xa8\x58\x34\x23\xa1\x98\xac\xd3\x2c\xc9\xf9\x91\xe2\x47\xa1\xab\xd4\x13\x60\xd7\xea\x28\xcf\x1f\x20\xba\xe4\x6f\x50\x92\x2f\x98\xef\xc3\x73\xf1\x4f\xed\xc3\x73\x2d\x85\x0b\xa5\xea\x67\xad\xf7\x9e\x91\xbe\x91\x92\x67\x51\x0d\x3a\x46\x09\xc6\x90\xf1\x03\x1a\xd5\x0b\x95\xca\x39\x21\x71\x96\x2f\x95\xd6\x16\x84\x40\xe9\xbb\x40\x64\x1e\x0b\x76\x3d\x1f\x81\x76\x31\x5b\xad\xd0\x78\x2e\x70\x16\xa5\x73\x81\x53\x3e\x6d\x6a\xde\x9c\x0e\xd0\x6f\x26\x32\x41\xf5\x94\xf7\x83\xce\x94\xcf\xb2\xe3\x64\x8c\xc2\x5f\x64\x4b\xfd\xe0\xc1\x12\x1d\x3c\xfa\xb2\x98\x5f\xfe\x62\xfd\x33\x34\x57\x00\xba\x42\xaf\xdb\xfd\xdd\x77\x40\x41\xbe\x7a\x46\x28\x80\xef\x97\x11\xe3\xef\x10\x5e\x87\xc0\x55\x3d\x3b\x47\xd6\x6a\x05\x40\xe1\xc8\x62\x21\x82\x03\x3e\x8c\x96\x4a\x6d\xdb\x6a\xed\x5b\x6d\xb7\xb3\x1d\x5a\xad\x5b\xa2\x85\x82\x38\x04\xc0\xf8\x72\x2a\xdb\x8e\x79\x51\x3d\x22\xb4\xfe\x71\x39\xa6\x44\xa5\xf4\x39\x14\xbf\xff\x2c\x8e\x70\xc2\xfb\x4c\x7e\xfd\x8c\xf0\x64\xca\xfb\x44\x7e\x1c\xe3\xdf\x50\x1f\xc3\x0c\x13\xf4\xa3\x4a\xa7\x32\xfd\x55\x32\xc3\xd9\x55\x3f\x29\x34\x6d\x14\xf0\x7b\xae\xd5\xfd\x0a\xeb\x51\xb4\xe7\x23\x41\xfc\xcb\x83\x25\x2f\x82\x07\x4b\x26\xfe\x21\xe2\x1f\x5c\x3c\x7c\xb0\xa4\xe2\x57\x52\xfc\x52\xb8\xb2\xa4\x56\x98\xea\x80\x1d\xa8\xc3\xa5\xff\x79\xe3\x65\xc2\xb8\x27\x52\xa9\xa2\xef\x67\x9c\x33\x7c\xb6\xe0\x28\x6c\x94\x42\x7c\xff\x41\xf3\x84\xe5\xe8\x88\xf0\x90\xc3\x5e\x37\xda\x43\x0d\x8a\x70\xe5\x8b\x07\x11\xae\x5d\xea\x68\x3f\x58\xf6\xb1\xa0\x6a\x5d\x51\xa3\x0d\x78\xc3\x34\x10\x9a\xd6\x4e\xab\xbf\x49\x54\x14\x0e\xa7\x10\x22\xff\x5a\x41\x26\x36\x68\xff\x4d\x61\xfd\x84\xb6\xa9\x03\x2a\x2f\x35\x6a\x17\x0d\x16\xb0\xfb\x0e\x60\xab\xf7\x24\x3b\x5c\x3b\x98\xbb\x92\xa0\x09\x7e\xfb\x3d\x01\xf1\x6f\xe4\xda\xe9\xbb\x07\xa5\x01\x6f\x28\x6b\xb4\xed\x3f\x64\x09\xf9\x14\xda\x55\x95\x74\x38\xf2\xfc\x13\x35\xc1\x78\xb0\x36\x47\x2b\xf5\xdb\xbd\xa1\x74\x5f\xb5\x61\x13\x65\xfe\x2a\xfa\x46\x19\x21\xaf\xed\x3f\xf9\xa6\x15\xa8\xe8\x38\x4e\x64\xc8\xc3\x2d\xfb\x34\x34\x7e\x01\x36\x14\x71\xa8\x11\xac\x5e\x80\xa9\xc7\xa6\x0d\x07\x40\x65\xc5\xa3\x42\x7a\xf0\x09\x2d\xe8\x9f\xc6\x4f\xbe\x69\xb5\xec\xe7\xf7\xf1\xb7\xdd\xd5\xea\xf1\x23\x6f\x75\x44\x7e\x6d\x6d\x8a\xa2\x82\xea\xce\x35\x55\x83\xef\x7d\xd4\x51\xe1\x77\x9e\xf1\xc3\xf2\xa7\x98\xb5\xf7\x7a\x36\x2a\x0a\xb8\x88\xd3\x30\x73\xd5\xf2\xfe\xa1\x7f\x7b\xc7\x26\x95\xe6\x5d\x2d\xd9\x4e\xb7\x13\x6b\x6b\x47\x30\x73\x6f\x0c\x2a\xfd\xd4\xb8\xf2\x9d\x2e\x28\x36\x37\xb1\xb9\x47\x4f\x03\x07\x07\xf4\x9a\xbd\x79\xd5\x37\xf7\xe4\xca\x33\x70\x90\x5c\xb3\x23\xb7\xf6\x2e\xfd\x94\x37\x3c\xf9\x8d\x7a\x2a\x6f\x78\xbc\xbe\x32\xf7\x86\x67\xb6\xf1\x86\x67\x0a\x67\x37\xbc\xe1\xd9\x7a\xa1\xb3\xa3\x4b\x0d\x53\x6c\x44\xc9\x68\xc1\x18\x22\xa3\xab\x76\x8a\x46\x54\xba\xb2\x6a\xcc\x6e\x8a\x6f\x09\x71\xc3\x85\x91\xe3\x7b\x17\xa6\x70\x0a\xc7\x70\x0e\x67\xf0\x1c\x4e\xe0\x19\xbc\x82\xa7\xf0\x02\xbe\x84\x97\xf0\x1d\x3c\x86\x27\xf0\x0d\x7c\x0f\x9f\xc1\xe7\xf0\x13\xfc\x00\xff\x0e\x5f\xc0\xb7\xf0\x08\xbe\x86\xaf\xe0\x6f\xf0\x23\xfc\x01\xfe\x58\x5e\x36\xfd\xf9\x5f\xc9\x83\xee\x83\x7f\xd0\xcd\xd8\xaf\xff\xb9\x19\xfb\x9f\x71\x33\xf6\xf3\xe6\x9b\xb1\xd9\x6f\x57\x67\xf9\x37\x0f\x8f\x9b\x6f\xc6\x8c\xbd\x26\x80\x60\xbe\x38\xcb\xf0\x48\xd9\x16\xba\x37\x63\xcf\x1c\xe3\x53\x00\x41\xf9\xab\x6e\x82\xfe\xb6\x6e\x76\x79\x5c\xb1\x28\xfc\xc1\xb5\x51\x05\x10\x9c\x98\xbb\x69\x7d\x49\xa7\x1f\xd4\x97\x57\x68\x75\xe3\xcf\x9a\x25\xa9\x7b\xf5\xd6\x64\x6f\xb9\xd1\xf2\x73\xdb\x4b\x4a\xc7\x58\xb2\x76\x03\xb8\xc6\xf4\xb1\xd1\x68\xb2\x62\xaa\x5b\x33\xc8\xad\x58\x62\xfa\xe6\x93\x15\xab\xc9\x5b\x1b\x14\xbb\x96\xa2\xd5\x97\x9b\x15\x53\xcd\xfa\xed\xa8\x6b\xef\xeb\x58\xba\xba\x56\xa1\x4d\x66\x9d\x35\xd3\xe0\xf5\xe6\xca\x6b\xed\x9d\x9b\x4d\x86\x2b\xf6\xc8\x0d\x16\xc4\x0d\xa6\xb4\x15\xdb\xd9\x26\x3b\xd3\x26\x1b\xe9\x75\x37\xb7\xdf\x40\x70\x96\xe4\x78\xd4\x2e\x77\x94\xff\xce\xfc\xa6\x43\x6f\xb4\x6f\xae\xcd\xc7\xb3\x54\x36\x66\xc8\x3b\x4d\xd2\x5d\xcd\xfa\x84\xb5\x26\x78\xd3\x0b\xcd\xfa\x00\x87\x75\x2b\xda\x27\xdf\x0e\xcd\xcd\x81\xff\x70\x54\x71\x51\x6a\xf0\x1b\x2d\x4f\xab\x0f\x3d\x8d\x25\xe9\xcd\x1f\x7c\x6a\x3b\x50\xa3\xed\xee\x39\xb6\xa1\x8f\xca\x4b\x1b\x07\xad\xa7\x9e\x19\x7c\x89\xfa\x0c\xe5\x8b\x8c\x3b\xbf\x9e\xd3\x85\xc4\x57\x4d\xbb\x00\x04\x38\x7f\x36\xe2\xf8\x1c\x01\xe8\x5e\x6e\x40\x90\x25\x39\x57\x24\x12\xa5\x3a\xc9\xe8\x64\x5c\x25\x7c\x79\x5b\x5d\x42\xc8\x19\xcc\xb0\xf6\x0a\xd8\x4d\x32\xc3\xab\x27\xa9\x71\x3a\xe9\x66\xc0\x4e\x92\x1d\xf9\xb0\xfa\xda\x57\xdf\xcf\x94\x95\xab\x73\x71\xad\x6d\x7b\xce\xf5\xb6\x9d\x61\x59\xf7\xd4\x9e\x3e\xcf\x6c\x66\x79\x97\x5d\xb5\xcd\x96\xcf\xc1\x9b\x2e\x0d\x7c\x73\x88\x5e\xe5\x9e\xe9\xfa\xd7\x89\x8e\xdf\x08\x38\xb0\x67\x95\xc4\xb7\xde\x57\x9b\xee\xf9\x7d\xcb\xe3\x47\x8e\xdd\xf9\x63\xe7\xb1\xb1\x0b\x5b\x10\x6c\xb8\x46\x6b\x27\xba\x9c\x7b\xbd\x6f\x2e\xc5\x52\x73\x12\x9c\x5d\x01\x63\xdb\xed\xe6\x63\x73\x2c\x68\x03\x6e\x37\x4f\xdf\xcc\x6b\x93\xee\x5a\x4e\xe6\x34\xfa\xd8\xcb\x2e\x4f\x10\x6d\xfe\xad\x33\x95\x11\x40\x75\xfb\x3f\xfe\x72\xe8\x18\x06\x18\x0b\x6a\x79\x77\xa6\x7d\x70\x2a\x9b\xf1\xf2\x5e\x51\x9a\x8e\x37\xdc\xaf\xb9\x97\xe8\xbe\xe1\xc4\xe3\x6f\x6b\x78\x62\xbb\xff\x66\x08\x41\x17\x54\xaf\x95\xf5\x75\xd7\x57\xce\x4e\xd3\x5e\x75\xdf\xf9\xbb\xe8\x49\xb7\x7a\x45\xf6\xf5\x0d\xea\x34\xf4\x73\x5c\xd9\xd8\x4f\x7a\x3b\x74\xb4\xbd\x92\xd7\x93\xfb\x6a\x64\x68\xed\xc6\x37\xf4\x72\xed\x0a\x73\xc4\xc6\x94\xcd\x8e\xf5\x6d\xe7\x1a\x3a\x51\x69\xe1\x9b\x0d\x37\x93\x7a\xa3\xad\xbd\xa0\xfc\xa6\x72\x8f\x5a\x7f\xe3\xd0\x54\xa1\xbc\x57\x2d\xcb\x4b\xe3\x2e\x87\x34\x88\x93\xba\x64\xbd\x1a\x9e\x08\x3c\x12\xa8\x54\x5a\x28\xd9\x0d\x79\x9b\x13\xa8\xa1\x9b\x27\x8f\x2a\x2f\x11\xea\x0f\x10\x6e\x60\x1b\xe1\x11\x34\xd1\xad\x76\x81\xb3\x85\x35\xad\xb3\xe0\x1b\x58\x5f\x63\x5c\xb7\xed\xa9\x51\xa3\x8d\x5d\xc9\xf5\xbb\xa6\x79\xeb\x1e\x5c\xed\xf2\x8e\xca\x2c\x9b\xf7\x5a\xa6\xf2\xc2\x47\x10\xa7\xd7\x6a\x8e\x81\x71\x76\xd9\xe9\xf8\x8e\x38\xcc\xeb\x9b\xca\xe3\x9c\xaf\x37\x3e\xb2\xa9\xe1\x99\xf7\x22\xe8\x71\xb5\x90\xb9\xc3\xdf\xfc\x30\xc7\x3c\x08\x92\x3e\x92\x1a\xa7\xbc\xfb\xb3\x92\xaa\x61\xd0\xd7\xd6\x36\xc9\xbc\x61\x1a\xd6\xac\xa9\x1a\x6c\x7e\x64\xc9\x2d\xae\x20\x7a\x55\x43\xa2\xf5\x86\x46\xba\x33\xff\xf0\x7d\x4e\x09\x37\xfe\x3f\xb6\x1c\xbe\x0e\x0b\x7e\x93\x43\xd7\x54\xaf\x9e\xba\x10\x98\x87\x44\xc6\x0a\x4b\xec\x9f\x3b\xdb\xfa\xae\x1f\xac\x6f\x0d\x19\x10\xa8\xf2\xa8\x3c\xd8\x7c\x92\xa0\x04\x28\x6b\xbf\x69\x1e\x4e\xdd\x19\x85\xe8\x5a\x0a\xb1\x61\x5b\xaf\x7f\x0d\xb9\xdd\x86\x76\xdd\xcb\xc7\x66\x32\x70\x0d\x79\xdb\xf7\x9a\xf2\xa8\x77\xb3\x9d\x76\xad\x5d\xbd\xc3\xb6\x6c\xda\xfd\xce\xb3\xbe\xf2\xd0\x5a\xbb\x89\xba\x9e\x8d\xd9\x63\xe7\x10\x9e\x2d\x72\x7e\x3c\xa5\x17\xbe\xbe\xe5\x7a\xce\x6b\x76\x3b\x9a\x1e\x75\xab\x78\xa8\xe0\xdf\x9e\x99\x4e\x6f\x85\x7f\x2e\x06\x7e\xeb\x20\x60\xed\x61\xaa\x6b\x25\x59\x32\x1b\xe5\xcc\xcb\x17\x72\x5b\xa0\xfa\xed\x1a\x6b\xbe\x35\x56\x8c\x4d\x50\x7f\x4b\x75\xbf\xf9\x67\x01\x79\xef\xdb\x2a\xc8\x09\x6d\xab\x37\xd0\xf9\x67\x00\xfb\x37\x16\xec\x4d\xef\xa8\xeb\x90\xaf\x95\xba\x06\xf0\xbf\xb9\x1e\xf0\xb7\x42\xea\x9b\x2a\xa4\x4a\xeb\xf6\xbb\x02\xcf\x97\xfa\x04\xea\x19\xeb\xd9\x0d\x66\x9a\xae\x38\x3e\x58\xcf\x49\x55\x54\x69\x52\xc3\x79\x64\x5f\x23\x34\x28\xc2\x2c\x85\x6c\xf2\xcb\x57\x51\x90\x36\x81\x69\x17\x96\x47\xff\xf1\x35\x08\x00\x58\x18\x38\xc4\xcc\x53\x48\x98\x91\x34\xa8\x81\x7a\x5f\x55\x97\xc7\x83\x96\x1c\xf8\x35\x79\xea\x20\x58\xcb\xc6\xd8\x27\xe0\x75\x26\xa6\x89\x01\xf9\x0a\x7e\xbd\x85\x89\xf9\xd2\xe7\x61\xd6\x72\x31\x1b\x2d\x83\xeb\x28\x2c\x9f\x39\xdf\xfa\xb8\x7e\x62\x77\x6d\xe5\xf9\x89\x35\x25\x7f\xb2\xfb\xb6\x7c\x72\x2d\x6e\x6d\xbd\x6f\xb0\x66\x8f\x60\x37\x7b\x91\xac\x5c\x82\x69\xeb\x4d\xd7\x9c\xd3\xb3\xf3\xf4\x2c\x38\xa5\xfc\x82\x7e\x95\xcd\x90\x51\x22\xab\xc8\x30\x45\x40\xf6\x7b\x7b\x73\x4e\x6b\xbd\xf9\xc7\x18\xc5\x4f\x1b\x6d\x15\xf8\x14\x11\xf8\x17\x91\xfd\xc7\x10\x95\xb6\x85\xd3\x24\x77\x2e\x99\xd5\x95\x13\x92\xe3\xe4\x2a\x14\xe1\x4f\x6b\x5b\x1c\x25\x64\x84\x54\x9c\xab\x3f\xc5\xa1\x35\xc7\x94\xd6\xaa\x28\x2d\xed\x31\x4d\x42\x5e\x4d\xc8\xaa\x09\x8b\x6a\xc2\xa8\x9a\x90\x56\x13\xa6\xd5\x84\x71\x35\x61\x5e\x4d\x98\x55\x0c\x43\xcf\x2b\xdf\x93\xca\xf7\x59\xe5\xfb\xaa\xf2\x7d\x5a\xf9\xbe\xa8\x7c\xbf\xac\x7c\x5f\x56\xbe\xdf\x55\xbe\x8f\x2b\xdf\x27\x95\xef\x37\x95\xef\xf7\x95\xef\x67\x95\xef\xe7\x95\xef\x4f\x95\xef\x0f\x3b\x19\xc6\x4a\x5b\x18\x65\x0b\x2b\xdf\x78\x3f\x30\xf6\xae\x35\x95\x29\xd4\x81\x00\xfa\x3a\xd2\x83\xb2\xda\xb3\x74\x59\x27\xdb\x6f\xed\x0e\xdf\x96\x16\x1f\x50\x19\x6a\xe8\x34\xf5\x01\x8d\x2f\x11\x53\x52\x7f\x16\x11\xfc\xb3\x19\x8b\x76\xf4\x9f\xda\x8b\xbd\xbf\xeb\x38\x96\xb5\x12\x56\x7b\x05\x5f\xd4\x8b\xcc\x51\xc2\x31\x99\x3c\x9f\x26\x0c\xc0\xb7\xd5\x7c\x74\x39\xc7\xf2\x4a\xf9\xd8\x51\xa1\x1f\x55\x4b\xa9\x69\x7f\x90\x47\x16\x80\xaf\x2b\xd9\xa5\x22\xfe\x55\x25\xc7\x2a\xeb\x7f\xab\x64\xb8\x0a\xfb\x8f\xd5\x4a\x35\xfd\xfd\x0f\x95\x12\xde\xa5\xc1\x8f\x3a\xd3\xac\xa1\x34\xc2\x49\xe5\x9d\xab\xb9\x56\x7e\xe0\x9a\x33\x6b\x70\xbe\x67\x74\x86\x73\xb4\xa6\x90\x81\xe8\xb6\x52\x52\x48\x5a\x5b\x46\x85\x0e\xf8\xa0\x2f\x06\x92\xd1\x14\x01\xb8\xd4\x07\x7f\x7f\x30\x34\x21\x42\xc4\xcf\x12\x20\x7d\x27\x46\x81\xf8\x2e\xaa\x51\xce\x4a\x73\xd1\xca\x28\x5b\xad\xbf\x84\x6b\x33\xa3\x56\xcb\x58\x32\xcb\xd7\x5f\x26\x46\xff\xfa\x1a\x25\xe1\x74\x63\x93\x96\x56\x65\xaa\xfe\xf3\x24\xcb\xce\x92\xd1\x27\xd7\x8c\xb5\xd2\x90\xbd\xde\xaf\xc5\x67\x53\x01\x10\x15\xb8\x9c\xd8\x29\x13\xc4\x83\x2a\xeb\xb3\xd1\x03\x45\xb5\xb0\x6b\x5a\x59\xcd\x93\xad\x37\x49\x93\x61\x83\x17\x87\xa6\x72\xab\x55\x85\xdd\x72\x84\x64\x15\x63\xd0\x95\x9a\x36\x8e\xdb\x2b\x79\x08\x4e\xae\xe6\x28\xe0\x54\x37\x00\xfa\x6b\x0a\xca\x4e\xaa\x02\xc2\xc6\x7e\xaa\x85\x0f\xc1\x5b\x1a\x68\x44\x0c\xc6\x74\x41\x52\xb7\xb3\x6a\x69\x6d\xaa\x5d\xb9\x92\xdc\xd8\x61\xad\xb4\xbb\x22\xb5\x4c\xd5\x41\x93\xb4\x1d\xfa\xa1\x68\x34\x3d\x69\xb5\x6c\x6f\xe5\x3e\xd1\x36\xa3\xad\xd6\xfe\x7e\x15\x6e\x36\xcd\x03\xa3\xd3\x8a\x7b\x77\xe7\x0d\xa6\x14\x42\xb7\x8e\xc4\x6d\xa3\xd5\x0a\x6b\x83\xd0\x10\xa8\x52\x37\x3d\xec\xa7\x5d\x85\xf6\xba\x95\xb0\x34\xeb\xad\xcd\xf0\x69\xb7\x62\xf3\xab\x4a\x18\x9b\xde\xbf\x86\xee\x51\xa5\x88\x8f\xee\x5b\xd3\x9b\x68\xcf\xd6\x6f\x20\x51\xa6\x94\x99\x97\xfe\xd4\xfe\x51\x9a\x2a\x94\x23\xac\xaf\x8a\x67\xc9\xdf\x54\x59\x4f\x78\xcf\x89\x7c\x74\x6a\xa2\x18\x3a\xdd\xc3\x6a\xbb\x7b\x5b\x1a\x8e\x2d\xa1\x45\x96\xce\x7a\x0d\x6e\xa0\xb8\x10\x15\x85\xdb\xbc\xae\x22\x17\x48\xff\xae\x10\x8b\xea\x61\x7d\x68\x56\xa1\x92\xee\x5a\x11\x53\xbf\xa8\x9b\x16\x09\x61\xc0\x41\x07\x89\x54\xb6\x4b\x19\x96\x66\x24\x92\x6c\x54\x1a\x17\x03\x23\x4d\x84\x14\x0d\x5e\x37\x50\x43\xa3\x6b\x23\x35\x19\x75\x83\x67\x94\xb6\x5a\x25\xf3\x6c\x43\x8b\xd7\x8b\xa9\x08\x55\x7f\xad\xd9\x6d\x8b\x46\xb5\x35\xdf\x2d\x9c\xfd\xa8\xd5\x32\xa7\xbc\xef\xf9\xa7\xd5\xe2\x01\x26\x39\x17\xdc\x3c\x1d\x07\x3f\xa1\xab\x33\x9a\xb0\xf4\xe5\xb9\x74\x4b\x64\xef\xc6\xa4\x63\x1d\x31\xfc\x56\x2b\x7c\xfc\x8d\xeb\x66\x67\xb5\x7a\xd2\x75\xbf\x65\x8c\xca\xea\x83\x02\x68\x21\x86\x5c\x3f\x7e\xa1\x31\xd8\x97\xa6\x17\x8d\xf3\x92\x39\x0d\x13\x53\x35\x36\xcd\xcc\xe7\x33\x43\x7d\xa4\x56\xdf\x1f\x6c\x79\x78\x01\x59\xec\x1b\xe9\xef\x35\x3c\x58\x08\x79\xc3\x73\x05\x06\x2b\x83\x43\x11\x54\xb3\x30\xef\x18\x6a\xbc\xb3\xb1\x8b\x6f\xb2\xb6\xef\xb3\x86\xc7\x0d\x1a\xbb\xf7\x1b\xde\x2c\xac\x56\xfb\xbd\xfd\xe6\xd7\x0c\xb5\x71\x45\x86\x54\xc9\x58\x9b\x6b\x8b\x15\x4d\xf7\xa2\x1a\x86\xd7\x7b\x4f\x51\x1f\x81\xb2\xc7\x3f\x9a\xcd\x50\x8a\x13\x8e\x3c\xc3\x7c\x27\x30\xf0\x88\xb3\xec\x27\x74\xb5\x5a\xa1\x8e\x10\x98\x7f\x42\x57\xbb\xd6\xdc\xf4\x3a\xe0\xbf\x42\x14\x45\x72\x4c\xfa\x7e\xf3\xe4\x6a\x8e\xc9\xe4\x24\xc9\x3f\x75\xf4\xb5\xb2\x89\x4f\x2c\xe6\xfa\xf8\xd1\xbe\xfb\x98\xc0\x27\x16\x1b\x21\x68\x90\xd2\xac\xe3\xf1\x3c\x19\xd5\x90\x18\xd9\x47\x32\xda\xa7\x96\x66\x60\x71\xae\x79\x40\x4c\x26\xab\xd5\xd6\xc7\x54\xbc\x1a\x1d\xff\x48\x0b\x1d\x70\xbf\xeb\x3e\xab\xd8\xe0\xcd\x6b\x1d\x06\xfc\x90\x2d\xd8\x67\x18\x56\xcf\x1f\x96\xe8\xc5\x1f\x95\xec\xb7\x3e\x28\x7d\x70\xdb\x11\x95\xe7\x92\x58\x27\xf3\x1a\xc6\x39\x73\x51\xed\xb5\x89\x09\xad\x5f\xe5\x35\x4c\xd1\x06\xca\x15\xd9\xe8\xc7\xef\xec\x01\xe7\x6f\x04\x7d\xd4\xe0\x71\xf8\xc7\x86\xe4\xb2\x74\x83\x90\xe5\xef\x1b\x5d\xc3\xa1\x4b\xa8\x9e\xbd\xb7\xb6\x2d\x3d\x07\xcd\x80\xc5\xfb\x5d\xb8\xae\xa8\x0d\x8d\xb7\xdc\x30\x30\x0b\x51\xdb\x60\x0f\x36\x1e\xdd\x31\x5f\x0f\xbc\x22\xea\x8c\x04\x53\x1b\x86\xd1\xb5\x7b\x8b\x0a\x1d\xb5\xfb\x3a\xc8\x56\x1d\x83\x5d\x3d\x6f\x5c\x4b\x1f\xbb\xf4\x83\x5d\x4b\x1e\xeb\xc7\x57\xc5\x1a\xa6\x8a\x03\xf6\x14\xc7\xe3\xb0\x41\x8b\xb6\x86\x11\xa8\xa0\x46\x55\x38\x8c\x6b\x0f\xc4\x90\x8d\x49\x7d\x63\x51\xf7\xb3\x4a\xba\x35\x9c\x35\x25\xf7\x34\xca\x95\x58\x60\xc9\x09\x4a\xf5\x31\xe9\x13\x98\xbf\x84\xe5\x68\x93\xd4\x76\x15\x5e\x77\x48\xc5\x26\xf1\x1b\xad\xcf\x6b\xda\x22\xf5\x05\xb2\x58\x5b\x63\x12\xed\xa6\x28\x39\x13\x1e\x59\x8c\x5e\x53\x47\x3f\x01\xa8\x55\xac\xa3\x41\xb1\x76\xc6\x56\x0f\x52\x1f\xd1\xda\x55\x6e\xec\xb0\xce\xf7\x16\x4e\x11\x24\x43\x59\xba\x6f\xe0\x4a\x5f\x15\x91\x21\xb3\x8e\x3a\x2a\x46\x76\xcc\x8a\xff\xf3\xfd\x11\x56\xf6\xa3\x7d\x6c\xea\x3f\x06\x75\x43\x60\x56\x39\xc2\xe2\xd4\xf8\x5e\x2c\x1d\x26\x96\x35\x7d\x3b\xa3\xc3\x75\x19\xb5\x86\xa3\xbe\xe6\x04\xcb\xb1\x55\x9e\x58\x32\xe5\xde\xd1\xe3\xc1\x3c\xd7\xd6\x9a\xaa\xd4\x1b\x30\x4e\x20\x0b\xab\xe4\x2c\x9d\x29\xfa\x55\xf6\x64\x3c\x7a\xed\x5f\x71\xb5\xda\x37\xcc\xc8\x9e\x4f\x84\x74\x2b\x0d\x6f\xc4\x6d\xfb\x90\x9b\x47\xbf\x6b\xdc\x35\xfe\x32\xf0\x7c\x9f\xc4\x9b\xfc\xad\x3c\x58\x72\xeb\xae\xb1\x00\xc3\x5f\xe4\x8b\xe4\x7d\xe2\x1e\x60\x38\x96\x32\x99\x76\x0d\xa1\xa8\x7e\x14\x72\x23\x91\x09\x5e\x09\x8f\xc3\xb6\x60\x20\xb1\x5b\x8f\xc6\xc4\x1f\xd8\xb3\x2c\x0b\xc1\x40\xbe\x83\xd6\x7e\xa8\x64\x9b\x43\x10\x75\x30\x47\xb3\x10\xab\xce\xa9\xdb\x48\x12\xd3\x0e\x1d\x8f\x73\xc4\x4f\xe8\xbc\x4d\xca\xdf\x30\x8f\x93\x03\x93\xa7\xde\x80\xef\xe5\x4f\x89\x97\x70\x40\x2c\xd8\xe6\x87\xce\xef\x38\x6f\xfb\x05\xfb\xc9\xf7\x4e\x76\xab\x15\xba\x85\x93\xa8\x70\x4d\x1c\xcd\x0b\x7a\x7f\x79\x63\xf7\x59\xac\x53\xfa\xfa\x4f\xe9\x9d\xca\x72\x4b\x78\xc6\x92\xa6\x73\x01\xa7\x35\x3a\x12\x01\x43\x20\x85\x40\x0f\x89\xaa\x1c\x40\x8d\x7d\xe2\x52\xc5\x1b\xda\x77\x50\x2e\xa9\x71\x34\xc1\xad\x56\xf8\x53\xb8\x26\xcf\x0a\x27\xb5\x1c\x7d\x05\x15\xfa\x94\xdc\x29\x60\xd4\xa8\x0a\xb5\x59\x4d\x8d\x68\x9e\x1d\x97\xbb\x7a\x8f\xb5\x5a\x7f\x0c\x59\x74\x18\x56\x59\xa6\xed\x53\xf8\x2c\x33\x60\x90\xd9\xb0\xd5\xcb\x75\x85\xe2\x98\xd9\xf3\xc6\x55\x62\xd5\x38\xbf\xf5\xcb\x74\x6d\x46\x6d\xed\x08\xb6\x77\x16\x15\x51\xd4\x5f\xc3\x6f\x73\xd8\x30\x0d\xb6\x61\x78\xa7\x6b\xbc\xe3\x5a\x25\x0e\x2a\x7c\xa1\xcc\x75\x3e\xbc\x59\x93\x71\x58\x91\xd6\x3e\xce\x5f\x98\x06\x2a\xae\x86\xab\x25\x5f\x12\x13\x7f\xb9\xff\xed\xa6\x72\x27\xc9\x99\x2a\xf5\xe8\xeb\x8d\xcd\x1d\x3f\x57\xc5\xb4\x2a\xa8\xde\xc0\xb2\xee\x42\xb8\xa8\xd7\xdf\x52\xca\x0e\x5a\x39\x2f\x30\xbc\x6f\xb3\x9f\xe4\xd2\x21\xc2\x36\x17\xc7\x7c\x83\x80\x0e\xf7\x7b\x45\x55\x1c\x96\x23\xd0\x3e\x1b\xb8\xd6\xbd\xb4\x5a\x03\x70\xf2\xf2\xbf\x4e\x9e\x7d\x78\xf9\x0c\x40\x70\xf4\xf6\xfd\xc7\x13\x30\xec\x60\x32\xca\x16\x29\xca\x43\x53\xae\x43\x68\x2a\xaf\xcf\xa3\xc3\x4d\xdd\xf6\xb7\xcd\x4e\x20\xf3\xa6\x61\x37\x68\xb8\xb6\x02\xc2\x85\xb5\x83\x4a\x2e\xb0\xa3\x65\x93\xea\xac\xee\xaa\x40\x1f\xd5\x15\x74\xed\xf5\xdb\x3d\xa8\x0f\xd6\x24\x3d\x17\xa4\x45\x6d\x08\xc1\x7d\x99\x23\x16\x95\x47\xac\x37\x3e\x12\xed\x95\x33\x28\xd9\x39\xec\x4e\xcc\xb2\x0b\x58\xb3\xab\xc8\xf7\xc6\xc0\xe5\xa1\x56\xdd\xa3\xca\xeb\x0e\x74\x75\x64\xf5\x88\x1e\xab\x15\x6b\x48\xdd\x43\x71\x93\xd4\x74\xc8\x43\xab\xab\x96\x8d\x9a\x29\x39\x13\xea\x57\x19\x4d\x68\x78\x47\xa3\xbc\x56\x5f\x45\xd4\xaf\x73\xe4\x82\x27\x2d\x83\xa8\x43\x22\x84\xce\xa5\x62\x5b\xfe\x1f\x87\xb1\xd2\x01\x40\x9c\xb1\xeb\x40\x93\xb0\x96\x50\x3d\x7a\x94\x7b\x8b\x3d\x47\x3d\xbd\x26\x6a\x3a\x86\xc4\x4a\x99\x46\x55\xe2\xe8\x5e\x54\x42\x8c\x8a\x31\x26\xe9\xcf\x98\x4f\xdf\x49\x0e\x44\x0d\x1b\x62\x3b\x70\xea\x0d\xdc\x06\xc6\x54\xdd\xbd\xa9\xcd\xe3\xa4\x12\x39\x13\xae\xcf\xd9\x65\x66\x44\x77\x54\x0e\xb0\x9c\x20\x95\x8f\xc3\x8b\xdf\xd7\x54\x6f\x96\xe9\x85\x24\xee\x41\x1a\x9b\x33\xc0\xb9\x9e\x87\x49\xa9\x87\xdb\xfb\x2f\x29\x19\x86\x49\x3b\x7e\xf2\x8d\xda\x21\x79\xac\x5d\x2a\x8d\x19\x9d\x89\xf2\xa2\x5c\x98\x44\x7b\x3c\xb6\x97\x35\x7e\x83\x87\x1a\xa1\x9a\x6e\xf9\x0f\x72\x68\x2f\x94\x7a\x87\x21\x89\xbb\x90\xc6\x00\x44\x7d\x1a\xe7\x70\x93\xde\xa0\x4c\x76\xfd\xcc\x93\x83\x66\x16\xd8\xaf\xe1\x5f\xe6\x34\x35\x14\xf5\xf7\x37\x76\x6e\x6e\x2d\x6e\xd2\x9f\xbd\x83\x10\x93\x5d\x0b\x98\x78\x23\xc8\xea\x40\x8e\xa9\x8e\xc2\x20\xf3\x2a\x88\xbb\x6e\x3c\x90\xc0\xfd\x6e\xb4\x67\xc9\x75\x66\xf5\x7a\x95\x79\x1f\x56\x93\xeb\x44\x2d\x8b\xaa\xf0\xac\x51\xb8\x2c\xd2\xb7\x39\x6b\xe5\xbb\x0c\xa2\x28\x82\x57\x02\xdb\xc3\x2e\xc4\x1d\x8e\x67\x88\x2e\x78\x14\xf6\xd0\xe3\x68\x03\xb0\x00\x68\x84\x09\x00\x45\x01\xff\x1e\xff\x1a\x7e\x70\xdd\x7b\xd4\x4d\x5a\x06\xf4\xb6\xde\x62\x5e\xac\xed\xa4\xb4\x8a\x19\x24\xb7\xed\xe5\x6d\x43\x2f\x9e\x61\xcd\x20\xbf\x71\x17\xd6\xff\x82\x75\xcf\x23\xad\xdf\x8e\x6a\x5d\x36\xda\xea\x0c\xb2\xbb\xee\xf8\x75\xad\x63\xdf\xfc\x67\xb0\xb8\x2d\x34\x5f\x55\x7b\x28\x2d\x88\x06\xa3\xbb\x9b\xce\x7e\x4f\x4c\xe7\xb7\x6a\x67\xd6\x28\x69\x90\xde\x75\x5f\x1f\xab\x7d\xb9\x76\x4e\x83\xe9\x5d\xaf\xd4\x0f\xb5\xa9\xd5\x4c\xa7\x06\xe3\xbb\xee\xf4\xc7\x6a\xa7\x9e\x35\xd6\x60\x7e\x5b\xe4\xa8\xb6\xee\x86\xc0\x98\x6d\xf7\x27\xb4\xae\x72\x04\x3f\xb8\xce\x84\x1a\x7b\xd1\xef\xfd\x07\xe7\x37\xea\x46\xd5\xde\xa5\x1f\xe3\x88\x69\x72\xa3\x7e\x8c\x23\xa6\xed\xfd\x94\x8e\x98\xce\x6e\xd4\x53\xe9\x88\x69\x7b\x5f\x95\xf7\xa5\x70\x70\x75\xa3\x2e\x2b\xcd\xec\xd2\xb3\x09\x5c\x72\x7a\xa3\x0e\x4d\xe0\x92\xed\xfd\xa8\x07\x57\x83\x8b\x1b\x75\x23\x2b\x6f\xee\xe5\xd4\xc4\x94\x1b\xbc\xbc\x66\x17\xa6\xe6\x96\xf6\xfd\x37\xd5\x70\x70\x79\xdd\x6e\xfc\x06\x76\xea\xcd\x0b\x73\x38\x78\x77\xb3\x1e\xff\x7f\xf6\xfe\xad\xcf\x8d\xa3\x5a\x18\x87\xef\xe7\x53\x68\x7a\x07\xa5\x2b\x2a\x69\x34\x0e\x64\xb3\x65\xf7\xcc\x76\x1c\x07\x0c\x71\x92\x6d\x3b\x04\x90\x15\xa7\x47\x2a\x8d\x1a\xf7\x74\x29\xd5\x25\xdb\xc3\xa8\x9f\x1f\x87\x24\x1c\x02\x6c\x88\x81\x70\x88\x0d\x84\x00\x09\x67\x03\x01\x1f\x80\x5c\xf8\xfc\x5c\x64\x7f\x86\x99\x4b\xdf\xbc\x5f\xe1\xfd\xd5\x61\x55\x57\xb7\x5a\x1a\xcd\xc1\x43\xf6\xff\x89\x2f\x3c\x4b\xd5\x75\x58\xb5\x6a\xd5\xaa\x55\x55\xab\xd6\xb2\x2b\x99\xaa\x55\x6b\xe9\x3f\xbe\xbd\x26\x4d\x0d\x9b\xb4\x67\x84\x9f\x83\x9b\x27\xb6\xda\x54\x5a\x78\x53\xce\xd0\xbe\xc9\x8e\x6e\x9d\x33\x64\xc9\x4d\xea\x57\x7b\x7c\x07\x37\x9f\xde\x6a\xfd\xba\xe4\x66\xf8\x9b\xc8\x89\xcd\x83\x5b\xee\x01\x94\xdd\xa4\x8d\x4c\x24\xc7\xe6\xa1\xad\x36\x63\x17\xdf\xa4\xa5\xec\xdb\x7c\xdc\x3c\xbd\xd5\xb6\xb2\x15\x4c\x6e\x6d\x64\x23\xe9\xe0\x66\x54\x63\x44\xc6\x00\x11\xcb\xa8\x48\xdb\x22\x02\xa3\x75\xe6\x70\x38\x86\x52\xcf\x70\xff\x95\x73\xb6\xc6\xca\x65\x79\x69\xbb\xe8\x72\x1c\x21\x6f\x81\x64\x1c\x5f\x32\x84\x23\xd4\x90\x80\xf8\x24\xfe\xa6\xfe\xd3\x3e\x6d\x1f\x64\xa6\x36\x2c\xff\xf1\x48\xc6\x86\x65\xbe\xfe\x91\x24\xf5\xcb\xf5\x09\xed\x92\xeb\xb3\xe3\x1f\x83\xd0\x83\x8c\xf9\xab\x8b\x06\x72\x51\x83\xcc\x4c\x72\x0f\xf8\x2c\xfe\xc4\x36\xdd\x03\x8e\xbe\x0f\xfe\x20\x56\xf9\x07\x4e\xe6\xee\x4b\xac\xf2\x4f\x1c\x3a\xf3\x99\xa8\xf7\xf0\x0b\xc5\x4e\xe6\xc6\x85\x5c\x2a\xf4\x93\x96\x79\x4f\x5e\xf0\x84\x3c\xfb\x00\x7d\xc4\x0f\x57\xf6\x8d\xee\xbf\x6f\xe1\x3d\x1d\x44\x26\xe8\x04\x67\x26\x07\x26\x30\x41\x1d\x72\xa1\x66\x8a\x82\x77\xec\x45\x24\x8e\x7d\x69\xec\x9d\x36\x5d\x59\xa2\x4b\xf4\xdc\xc4\xd0\x21\xfa\xb9\xb6\x41\xd3\x84\xde\x98\x9f\x3e\xf4\xc6\xbe\xb1\xe1\x34\x1e\xde\x24\xfc\x85\x15\xbd\xe2\xc3\x85\xd1\x2a\x2c\xbf\x2e\x1f\xd9\x24\x3e\x46\x71\xfc\x8c\x9d\x84\xbb\x48\x63\x29\x8e\xe6\xdb\x67\xe5\x6b\x87\xc4\x67\xc6\xe1\xcd\xd8\x88\x18\xd3\x06\x1b\xda\x62\x2c\x8b\xb3\x41\x18\x56\x3b\xca\x34\x47\x3d\x88\xdc\xe9\x3b\xc6\xdc\x5a\x71\x5f\x63\xb6\x5a\xb4\x73\xc1\xe8\x64\x13\x4b\xb2\x22\x37\xd4\x86\xbf\xb0\xe3\x14\x7b\x1f\xdf\xdc\xa9\xf8\xec\xfc\x8c\xbc\x4e\x24\x69\xe4\xd2\x71\xcd\xe9\x7b\x3b\x82\x72\xf1\x36\x53\xfc\x85\x38\x64\xea\xb2\x36\x67\x7c\x22\x66\x74\x57\x99\x7a\x12\x13\x3e\x13\xd7\x51\x2e\x82\xa6\xcd\x54\x5b\x0f\xa1\x69\x97\xde\x5a\x6c\xcb\xed\x45\xd1\x1c\x13\xdb\x32\xd7\x96\x35\xa1\xb6\x1e\x44\xd3\x2a\xfc\xaf\x88\xa0\x59\xe4\x65\xc1\x52\xa2\x32\xfa\x52\x4e\x5b\xda\xad\x75\x97\x4f\x5e\x77\xff\xe3\x74\xe7\xcc\x27\x3e\xb7\x6f\x69\xcc\xba\x3b\xea\x98\xa1\x78\xb9\x34\xcf\xf3\xb7\xb1\x5c\xea\x70\x85\x9b\x3a\x40\xc8\xc4\x88\xd3\x6a\xc0\xb8\x45\x34\x0d\xa6\x37\xb9\xda\x22\xef\x3d\x10\x12\xaf\xd0\x43\x86\x8d\x83\x76\x5f\x5b\x14\x32\xce\x31\xa1\xc0\xe6\x47\x5d\x12\xed\xb6\x78\xdf\x0d\xe9\x3d\xda\x59\x23\xc1\xa5\xde\xee\x4d\x9a\x20\x1c\xa6\x0f\xf0\xd6\x53\x51\xb8\x6a\xbd\x34\xb4\xa7\x1a\xdb\xe6\x4c\xda\xe5\x3d\x48\xba\x03\xa1\xff\x22\xf7\xda\x1f\xec\x7c\x3e\xd8\xf9\xc8\xc0\xb3\xc7\x1e\x1e\x7c\xb6\x7b\xf6\x33\xc5\x12\xf8\x63\xd2\xa1\x49\xce\x69\xb6\xd0\xd8\xb4\x6f\x17\xe3\x42\xdb\xda\x22\x65\x9c\xbf\x14\x46\x95\x2d\x72\x08\x33\xe2\x14\xdb\xf6\x27\x33\xe2\x76\x66\xf3\xf8\xb3\xfb\x8a\x85\x75\xd1\x6e\x60\x93\x10\x80\x5a\x55\x2f\x8a\xf9\xf7\xef\xca\x27\xc9\xa8\xd3\x4a\xbf\xd3\xf9\xb8\x54\x32\x58\x81\x33\x47\xdb\xf7\xa4\xb2\x9a\x2f\xca\x5b\x18\xfd\x14\x54\xfd\x47\x32\xbe\x6e\xa7\x5a\xf4\xb2\x15\xcc\x3f\xbc\xcd\xb0\x94\x3b\x5e\xd7\x34\xda\xd3\x2d\x6a\xf3\xc6\x8d\xdf\x8e\x03\x5a\x8e\x46\xd5\x95\x3e\x24\xf3\x2e\x57\xcd\xa7\xfa\x96\x3c\xda\xa8\x36\x46\xdd\xba\xe6\x62\xe3\xee\xdb\x8e\x73\x3b\x7b\xe4\xb2\xee\x00\x1f\xde\x41\xd4\xdf\x9c\xaf\x3c\xe3\x7c\x67\x59\x4f\x79\x6b\x46\xab\x89\x6b\xda\xc4\x96\x6f\xa2\xff\xd8\x9e\xaf\xc6\x8f\x1a\x0f\x4d\xf6\x44\x05\xf7\x49\x53\xbb\xa3\x1a\xf1\xde\x3e\x9d\xf3\xa9\x51\x59\x93\xed\xe1\xa8\x1b\x6a\xd9\xdb\x79\x38\x93\x01\x77\x45\x4e\xcd\x38\xc5\xd3\xce\xbd\x21\xda\xed\x36\xc8\x62\xbc\x3f\x7d\x54\x35\xf3\x11\x68\x79\x3a\xe7\x4f\x1f\x19\x71\x3f\xb9\x2d\xbf\x47\x53\xc4\xdf\x9d\x56\x08\x40\xb8\x63\x29\x6f\x53\x2f\xe4\x9a\x8e\x39\x07\xc7\x2d\x23\x64\x0b\x22\x5b\xb7\xec\x9a\xec\x80\xa6\x59\x27\x54\x0f\xe7\x23\x4f\x73\x36\x20\xb6\xbb\x66\xa8\x42\x45\x81\xe1\x39\x5c\xf6\x8d\xe2\x92\xf5\x51\x9e\x47\x67\xe4\xe5\x80\x53\xc0\x24\x26\x77\xd6\xb1\xb4\x3d\x9b\xa7\x6d\x18\x3b\x7e\xa8\xce\x4f\x0c\x81\x4d\xd7\x8a\x82\x46\x67\xf9\xe9\xe1\xf1\xfc\x34\xf5\x26\x20\x93\xf8\x30\xfe\x70\xb1\x8b\x2c\xbc\xaf\x28\x6c\xea\xc4\x3d\x44\x01\x13\x05\xb1\xc5\x34\xca\x67\x96\x74\x84\x55\x9c\x15\xa4\x56\x51\xc8\xd3\xc9\x87\x4f\x79\xff\x5c\x3b\xde\xcb\xe4\x8e\xa0\x70\xe8\xcd\xce\x42\x64\x54\x87\x46\x56\x50\xf9\x20\x2a\xa9\x0f\x72\x63\x30\x98\x71\x06\x91\x52\xf7\x3a\xe9\x95\xcb\xe3\x7e\xcc\x1f\xa5\x94\x97\xcb\xee\xa8\x3b\x00\x77\x00\x71\x05\x0f\xab\x90\xe4\xd6\x11\x83\x36\x31\x8d\xcb\x65\x77\x00\xb0\x37\xa8\xad\xc4\x7a\x4b\x0d\xaf\x60\x86\xc3\x41\x6d\x85\x7e\xbe\x20\xf5\x2c\x59\x3a\x1d\xf0\xdc\x07\x84\x0b\xbc\x12\x0c\xd4\xe1\x52\xcc\x65\x63\x1a\xf6\xec\xdd\x42\xfa\x04\x69\xa6\x4b\x99\xbb\x1f\x8c\xb4\xcb\x65\x79\xc6\x25\x8d\xaf\x4f\xac\xf6\xc9\x7e\xf5\x80\x11\x10\xb6\xc2\xe7\xf1\x19\xee\xf1\x5a\xdf\x17\x33\xf7\x49\xda\x21\xe0\x34\x42\x59\xb2\xa8\x93\xbe\xf6\xe6\x27\x7d\xbe\xeb\x06\x5b\x88\xe7\x6a\xc7\x70\xa5\xc6\x05\xd3\x09\x31\x86\x8f\x91\x33\x41\x9b\x38\x38\x4c\xbf\xf4\xfc\xf8\x28\x3d\x23\x18\x76\x76\x3e\x4d\x95\xde\xb6\x9f\x3a\x43\x98\x56\xf3\x1c\x2c\xcf\xd8\x92\x5c\x8e\x67\xfa\x63\xbf\x4b\x9e\x39\x1c\x75\x26\x67\x38\x9a\x6a\x92\x63\x72\x1c\x17\x6c\x97\xcf\x92\x58\xca\x6a\x3a\x54\x24\x17\x2e\x52\x8a\x2f\xf9\x20\x4a\x2f\xd3\xd6\x8b\x1e\xfd\x46\x46\x6f\xb3\xbc\x05\xcb\x33\x02\x2b\xf0\x8c\x10\x99\x54\x60\x95\x31\xcf\xb0\xb2\x6f\xbf\x44\xa5\x56\x81\xcc\x62\xe0\x09\x51\xdf\x72\x50\xf6\x9d\x58\x54\x14\xf2\x32\x23\xb0\xd1\x8c\x66\xc4\xa0\x5c\xd6\xaf\xe9\x4f\xa9\x0c\x8f\x33\xba\x22\x95\x08\x37\x40\xb2\x5b\x89\x7a\xb4\x97\x1d\x2a\x8f\x78\x0b\x6c\x7c\xc8\x44\xed\x7f\x2c\xff\x1d\x13\x69\x1a\xdf\x51\xae\x32\x9e\x08\x62\x4e\x22\xc2\x5c\xc5\x06\x42\x8c\x15\xb4\x64\x3f\x70\xcf\x7b\x59\x02\x7b\xd6\x3c\xa3\x6d\x82\x5d\xea\x48\x6d\x4b\x08\x2a\x2f\x9d\x85\x0d\x42\xd0\xc5\xcc\x0c\x01\xec\xf2\x3c\xea\xa5\xcf\x82\x60\xde\x78\xb3\x75\x4c\xca\x65\xa2\x1f\x13\xe7\x5a\x97\x15\x88\x74\xdd\x7a\xbe\x42\x94\x58\xe9\x36\xab\xab\x96\x8a\x3a\xb4\xa5\x2a\xd3\x09\x28\x08\x3b\x7d\xdc\xd5\xcd\x99\x5c\xd7\xc3\x2d\x56\x1f\x8d\xac\x8a\x33\xa4\x42\x96\x3f\x28\x37\x47\xc4\x79\x15\xc7\x75\x2b\x93\x85\x79\x85\xf1\x61\x8b\x27\x0b\x9b\x74\xcb\xa0\x5e\xb0\x14\x4f\x25\x86\x30\x41\x49\x21\x6b\x59\xcb\xe2\x98\x51\x2c\x66\x49\x99\x8d\x44\x1d\xa7\x70\xa0\x10\x82\x5d\x85\x5a\x6c\xc6\xa2\x6d\xac\xb7\x47\x72\xd8\xf6\xf2\x49\x76\xbb\x2e\x5f\x2c\x17\xf3\xea\xe4\xa9\x3c\xa9\xd0\xa4\xe9\x35\xae\xe0\x74\xc4\xdb\xde\xa4\x9a\x58\x70\x3c\xe1\x93\x91\xc1\xb7\x96\x96\xb8\x1f\x06\xdc\x75\x6a\x0e\xc2\x6c\xd4\x1d\x45\x33\x0d\x3c\xdc\xac\xb7\xf0\x7c\x1d\xb5\xa4\xd2\xa0\xd6\x8e\xf9\xfd\xd1\x01\x78\x4c\xb1\x3f\xaa\x54\x10\xf3\x58\x51\xc9\x48\x97\x04\x4b\x9a\xdc\x5d\x95\x7d\x42\x33\xd5\x5d\x55\x30\xae\x34\xc2\x41\xf6\xfe\x28\x93\x33\x77\xc0\x33\xd5\x65\xd5\xa4\x0a\x72\xad\x05\xf6\xe1\x76\x7b\x93\x7b\xa4\xf6\x76\xef\x91\xb2\x97\xe4\xef\xa7\x0b\xa4\xee\xea\xa7\x3f\xf1\xc2\xbe\x0f\xfb\xc5\xc7\x97\xfa\x98\x30\xe7\xb8\x7f\x93\x4b\xa4\x7d\x5b\xbd\x44\x9a\xc7\x4e\xdc\xf7\xa3\x89\x07\x17\xd9\xf6\xe5\xc9\x61\xf6\x8c\x6b\xdf\xd4\x47\x5c\xf7\xf7\x26\xc6\x42\xf4\x7d\x76\x05\x53\xe0\x69\xfb\xfd\xc5\x8b\xcb\xc7\x8e\x7c\xfe\x93\xc7\xea\x47\xc6\x5c\x66\xc2\x16\xb5\x9c\x32\x55\xfe\xf4\x7a\xf3\xa3\x15\x73\x44\x36\xe1\x3c\xa4\x6e\x85\x2a\x9b\x78\x1e\xb2\xe9\x5d\x22\x9c\xf7\x00\x7b\x4f\x46\xab\x1a\xf9\x2b\x24\x7f\x74\x8b\x9b\x6a\x01\x7e\x52\x7e\x6b\x15\xde\x3f\x7e\x14\xef\xcb\xfb\xf3\x96\xd9\xee\x3f\xb3\x8f\xf4\xe1\x7d\xc6\xf3\xb9\xc8\x14\xef\x2f\x7e\xa7\xa4\xf2\xe1\x27\xce\x9d\xae\x8f\x35\x9a\xcb\xc4\xb3\x28\x62\xf6\x5d\xbd\x7b\xdf\xb5\x1b\x8a\x91\x70\x20\x53\xdd\xba\x8f\xb9\x73\x1f\x39\x5b\xdb\x94\xb3\x77\xcc\xd5\x59\xfc\xdf\x67\x1c\x0d\x61\xc0\x76\xe5\x22\x7d\xd7\x38\x3d\x98\xcc\xe9\xfd\x33\x87\xbb\x1f\x89\x57\x83\x31\x9c\x3e\x65\x54\x20\x73\x45\x51\x78\x29\x3a\x36\x3a\x90\x15\xdd\x6c\x13\x6b\xd1\x87\x8b\x8e\xcf\xb7\x12\xc7\x05\x2a\x7a\x64\x3b\x17\x4a\x30\x01\xb2\x8b\xd0\x23\xea\x22\x04\xba\x99\x8f\xb9\x5c\x70\x0c\xfe\x91\x91\x3b\xb9\x7d\x93\xfa\x57\x90\x2d\x13\x79\x73\x1b\x57\x1d\x53\x2f\x7b\x80\x4c\x35\xe0\x64\x25\x5d\xf9\x3e\x8a\x3f\x5c\x88\x30\xd8\x97\x4e\xa5\xe9\x65\x83\x24\xd9\x61\x23\xf5\xed\x42\x2e\x7a\x64\x76\xb1\xdf\x7e\xb4\x98\xa9\x55\x5a\x69\xaf\x57\x5d\xe2\x91\x93\xb1\x44\xb5\x82\x0b\xe2\x8c\xb5\x69\xb1\xe1\x6a\x66\xef\x3a\x36\x3f\xc8\xda\xeb\xaf\x6d\xef\xae\x62\xdc\x58\x17\xf3\xec\x3e\xc5\xb3\xfd\xd1\x80\x5c\xf3\x9b\xf2\x94\x1a\xdd\xa9\x98\x87\xfb\x7c\x10\x57\x83\xb6\x7d\xdf\x3d\xf5\x8d\x89\x7d\x6d\x21\x27\x14\x23\x7e\x87\x46\xe1\xea\x68\x80\x91\x1d\x2f\x28\x5a\x66\x67\x8c\x6a\x69\xd1\x51\xfb\x44\x8b\x59\x6d\xd4\x4a\x46\x7d\x92\x8c\x35\x91\x85\x07\xf3\xca\x26\xc6\x66\x15\x75\xea\x26\xb6\xc0\xe9\x93\x60\xec\x7b\x91\xb5\x73\x8e\x3d\xcd\x47\x38\xf4\xc4\x06\x7f\xe0\x6d\xb6\xef\x8e\x46\xcc\x51\x1d\x84\xdb\x99\x4a\x3b\xde\x5a\x82\x6d\xf3\xa8\xc1\x18\xf3\xa8\x4e\x93\xb4\xbc\x81\x36\x8f\xea\x64\xcd\xa3\xec\x9f\xb8\x93\x37\x8f\xea\x8c\x35\x8f\xea\x0c\x87\x9d\xbc\x79\x54\x27\x6b\x1e\xd5\xf1\xc2\x69\xcc\xa3\x6c\x4f\x46\xdc\xf5\x71\x2c\xbd\xe2\x91\x04\xe1\x0e\xc2\x6d\xcb\x3c\xaa\x93\x33\x5e\xea\x68\xf3\xa8\x4c\xfa\x62\x67\xd4\x3c\xaa\x6d\xcc\xa3\x3a\x93\xcd\xa3\xf2\x2d\x14\x2f\xe9\x02\xc5\x8e\xe8\x9e\x62\x85\x48\xa9\x33\x22\x35\xc4\x03\xdc\xc6\x1d\x4b\x35\xa1\x13\x8f\x41\x02\x4c\x37\x3b\x06\xe9\x91\xb0\x4f\x58\x3c\x37\xf1\xaa\xd1\xd6\x5f\x0a\xea\x18\xf0\x20\x8c\xe7\xd4\xbe\x48\xc2\x9b\x68\x34\xc6\x30\x8f\xb9\x4d\xd2\xb2\xbc\x8f\xf3\x5a\x10\x4b\x33\x2c\xe4\x12\xb4\x1d\xab\x30\x89\xdc\xd3\x02\x37\x75\x87\x77\x44\x55\xe7\xb1\x51\x65\x48\xd0\x14\x2e\xcc\x3e\x2e\x89\x50\x53\xb4\x70\x99\xad\xfb\x45\x3b\xa2\x9f\x65\x0a\x30\xd5\x6e\xc6\x50\x86\xbb\x4d\x82\xb5\xb7\x39\x75\x62\xce\x53\x33\xf8\xa0\xeb\x82\xfb\x47\xf5\x2e\x8d\x23\xb4\x06\xa7\x86\xcc\xab\xef\x67\xe9\xa9\x21\xab\x54\x90\x95\x5f\xbb\x8b\x14\x32\x22\x35\xac\xaf\xcf\x18\xc1\xa2\xe7\x49\x36\xbb\x18\xc1\xdd\x19\x0d\xcb\xbd\x67\xe1\x80\xb0\xc2\x01\xe1\x5b\x51\xc6\x15\x33\x0a\xf1\x3e\x10\xda\x4a\x57\xfb\xf5\xac\x06\xdd\x6a\x7a\xe5\x7c\xff\x37\x97\x76\x9d\x19\xa2\x02\x66\xee\xda\x32\xe1\x0d\x17\x79\x0b\x04\xc7\x02\x52\xf7\x89\x46\x56\xb0\x45\xd2\x60\x09\x4a\xa6\xea\xae\x3d\xf7\xb6\xce\x6a\x06\xc5\xd9\x59\x52\x2e\xcf\xce\x66\xdc\x92\xa6\x27\x1a\x68\xe4\x1b\x6c\x5a\xad\xa7\x98\x0c\xce\xbe\x99\x07\x6c\x55\x32\x1f\x89\xab\x9c\xf6\x46\x08\xb8\x35\xf0\xea\xfb\x83\x03\x69\xa5\x11\x76\x14\xe3\x3a\x68\x7f\x50\xa9\x80\x57\xa6\xa8\x46\xe5\x50\x1c\xe4\x8b\x29\xe8\x06\xa8\x11\x35\x83\xd6\x0c\x77\x29\x5a\xb4\x9f\x8b\x52\x0b\x35\xd4\x60\x95\x4a\x92\xb8\x04\x61\x96\xa2\x29\xc4\x12\x53\xb5\x47\x85\x88\x06\xea\x55\x0a\x78\xd5\xac\xce\x9b\x63\x79\xea\xd5\xf7\x53\x0b\xe5\xc0\x42\x99\x02\xca\xbe\x17\xa4\x28\xa7\xa0\x4b\x51\x23\x68\xd2\x96\xbc\xb3\x72\x7d\x64\xae\x09\x2c\xe4\x7d\x1b\x79\x99\x71\xa1\x3a\x6f\x2c\x03\x12\x70\xaf\xee\x0b\x1e\x81\xe4\x68\x26\x12\x9d\x04\x5c\x13\xf9\xf4\x05\x3a\x13\x6c\xda\x57\x4c\x75\x6f\x87\x43\x76\xa0\xae\x2b\x5d\x03\x15\xbb\x31\x3b\xaf\x23\x5d\x80\x67\x3d\xed\x1e\xb4\x6e\xa2\x95\xe5\xe8\xa0\xed\x1e\x0e\x78\xac\x5c\xf6\x0f\xc4\xfb\x55\xe3\xf1\x18\x9a\xf8\x82\x26\xbe\xa6\x49\x5c\x48\x93\xd8\xa2\x09\xa6\xc3\xa1\xcd\x87\xb1\xed\x3a\x57\x11\x6c\x94\x5a\x91\x45\xad\xb4\x63\x93\x6a\x82\x2e\xc7\x89\xa4\xad\xaf\x98\x08\xcf\xce\xa3\xe1\x70\x02\x69\x92\xac\xb5\x3b\xcc\x85\x35\x33\x8d\x1a\xa4\x66\xe0\x34\x80\x88\x31\x47\x27\xb9\x60\x73\xae\x85\x52\xb9\xec\xb2\x9a\xb9\xd9\x24\x06\xcc\x70\xb6\xaf\xcd\xab\x35\x1b\x8a\xf9\x88\x63\xef\xa8\xcf\x7b\xb5\x95\x20\x72\x15\xe0\x9f\x73\xd5\xc2\x5c\xa1\xb8\x8e\xb0\x5f\x9d\x47\x38\xed\x54\x08\x7d\x1a\x24\x9e\x60\x9e\x58\x0f\xe8\xa0\x5c\x0e\xf7\xc3\xf0\xc8\x0f\x15\x8f\xa2\x99\xd0\xe3\x06\x15\x3c\xf0\xb8\xbe\xa1\x82\xb5\x64\xb0\x9d\xa5\x43\xeb\x01\x72\x9d\xb0\x23\x92\xc8\x95\x3c\xe3\x9b\xcb\x8b\x30\x84\x96\x39\xc8\xe5\xed\x9b\x17\x60\x52\xe8\x4d\xcd\x12\xca\x58\x3f\x8f\x36\x9e\xdf\x7c\x1c\x7b\x75\x1c\x7a\xb3\xf3\x78\x20\xef\xd0\x67\x67\xc3\x82\xa9\xd2\xc6\x1d\x95\xbf\x67\x71\x7e\x3b\xc7\xf9\xe2\x7b\xd7\xab\xef\xef\x1e\xe8\xed\xef\x82\x44\xe8\x79\xed\x94\xfb\x53\xd0\xed\xa2\x46\xbb\xd9\x6d\xe1\xbe\x67\xb3\x62\xcf\x66\x45\xe5\x9a\x77\x38\x9c\xed\x2b\x8b\x21\xb7\xa7\xdc\xe2\xdb\x33\xa4\x67\xcf\x90\xce\x70\xd8\x47\x78\xe0\xc2\x0a\xaf\xdc\x10\x46\x6e\x0f\x33\xb4\xe0\xd5\x17\xdd\xf8\x40\xb0\xe8\x0f\x87\xae\xef\xf5\x50\x23\xf4\x7a\x38\xae\x54\x50\x23\xae\x54\x44\x53\x56\x39\x60\x79\x1c\x0e\x87\x7e\x22\xc9\x6a\xb9\xdf\xf3\x2c\xc2\x28\x7a\xfa\x86\x9e\x20\x19\x0e\xba\xc8\x84\x30\x14\x78\xb2\x02\x5a\x0d\xbc\xfa\xfe\xc1\x81\x70\xff\x00\x68\x15\x7a\x2c\xa5\x55\x0a\xba\x03\xd4\x60\xcd\x81\x94\x14\xb3\xfe\x70\x68\xd1\x2b\xcc\x08\x01\x49\xa4\xb0\x50\x92\x84\x36\x9d\x24\xca\x68\xc6\xf6\x33\x60\xb0\x5b\xa8\x97\xcb\x71\xad\x3f\x88\x7b\x2e\x75\x43\xe9\x98\x52\x85\xc9\x70\x43\x1c\x09\x2a\x9a\xcf\x21\x02\x56\x8f\x93\x54\x03\xb0\x7c\x8b\xa4\x7c\x67\xc5\x0e\xca\x38\x61\x4c\xbd\x2e\xb2\x04\x5c\x28\xf2\xe1\x90\x89\x9e\x1a\x8d\x20\x18\x0e\xa5\xa7\x67\xc1\xbe\x81\xb1\x15\x13\xf3\x3d\xc0\xf3\x26\x6e\x51\xa0\x6c\x0e\x0a\xfd\x5a\x7a\x3e\x16\x5b\x52\x16\xf4\x1f\x0b\xfc\x36\x0b\x78\xd0\x8e\xbd\x30\xc5\x59\x3b\x2b\xf4\x0a\xf7\x4e\xa1\x4b\x50\x8d\xd3\x67\xfa\x7d\xc2\x0e\xf9\x72\xaf\xa5\x27\xa2\x1b\xba\x3c\xf7\x09\x59\x94\xc8\xfb\x42\x9c\xba\x7a\xb9\xfd\x8d\xc5\xfc\x2d\x6a\x41\x3a\xf2\x4c\xcc\xcb\x8f\x35\x67\xe3\xd5\xbf\x3a\x0d\xe7\xa0\x83\x9d\xff\xdf\xdf\x7f\xa6\xa1\xeb\x5f\x00\xe0\x8b\x00\x7c\x49\x03\xeb\x57\x7f\x69\xa0\x37\x0d\xf4\x6b\x03\xbd\x05\x05\xbe\xac\x81\x1b\x50\xd7\x8d\xb4\x8a\x3f\x1a\xe8\xf7\x06\xfa\x8b\x81\xfe\xa4\xa1\x3b\xd0\xd2\xed\x9f\x42\xa5\x2f\x42\xca\x45\x93\xfb\x0d\xf8\xf6\x12\x7c\xbb\x0a\xc0\x37\xa1\x22\x40\xe1\x4e\x8a\xc2\x4f\x0d\xf4\x5b\x03\x01\x21\xd6\x2f\x1b\x9c\xa1\xc1\x3b\x50\xe9\xc6\xa5\x3f\x68\xe8\xde\xeb\x12\x51\xd9\xf6\xcb\x02\x3a\x2c\xda\xfc\xbb\x81\xde\x00\xe8\xde\xeb\xb2\x6f\x4f\x49\x50\xb6\xf1\x8c\x04\x2f\x0b\xf0\x53\x12\xbc\x9a\x82\xb2\x82\xcf\x88\x96\x5e\xfd\x9b\xd3\x70\x1e\x95\x03\xf3\x86\x86\xd6\x2f\x7f\xc9\x40\x2f\x1a\xe8\x65\x0d\xdd\xfd\xb2\x06\x6e\x41\xae\x5b\x5f\xd4\xc0\xc6\xab\xa2\xb5\x43\xb2\xb2\x9f\x6b\xe8\xc6\xcb\x00\x7c\x15\x80\xaf\x03\xf0\x0d\x0d\x5c\xff\x8a\x06\xd6\x2f\x43\xa6\x5b\x90\x74\xe7\x9a\x06\xee\xbd\xfe\x4f\x0d\x6d\xbc\x7a\xc5\x69\x38\x8f\xc9\x66\xde\xd4\xd0\xfa\xe5\xaf\x6b\xe8\xc6\xb7\x4c\xd2\x37\x0c\xf4\x6d\x03\xbd\x6a\x20\xc8\x77\x03\x3e\xde\x7a\x05\x00\xa8\xeb\xd6\xd7\x34\x70\xef\x02\x34\x79\xfb\x92\x00\x3e\x2b\xa0\x17\x0d\x24\xc6\xe8\xb1\xcf\x0b\xe8\x25\x80\x36\x5e\x15\xe4\x3e\x2c\x91\xfc\x85\x86\xae\x7f\x15\x80\xaf\x01\xf0\x75\x0d\xac\x5f\xfb\x02\x40\x57\xff\x69\xd2\x5e\x34\xd0\x97\xcc\xd7\xbf\x6b\xe8\xc6\xab\x90\x74\xf9\xbb\x06\xfa\x3e\x7c\x84\xa4\x1b\x90\x72\xfd\x15\x53\x03\x20\x76\xe3\x47\x1a\xb8\x03\xed\xdc\x79\xd9\x64\xba\x6c\x9a\x86\xb4\x3b\x6f\x99\x66\x5e\x87\x1a\x7e\x60\x92\x52\x08\x6a\xbd\xf5\x6d\x00\xbe\xa5\x81\x8d\x57\xc5\x60\x3e\x2e\x69\xf2\x4b\x0d\xad\x5f\xbe\xa8\xa1\x5b\xdf\xd1\xc0\xbd\x0b\x90\x6d\xe3\x55\xd1\xdb\x8f\xc9\x02\xbf\xd2\xd0\xed\xbf\x68\xe0\xc6\xeb\x1a\x58\xbf\xfc\x53\x48\xba\x08\x00\xa4\xdc\xfe\x25\xa4\xbc\x01\x29\x6f\x6a\xe0\xd6\x79\x0d\xdc\xbb\x08\xb9\xef\x5d\xf8\x87\x81\xfe\xa9\xa1\x8d\x57\x45\xda\xc7\x25\x0e\x6f\x69\xe8\xc6\x9b\x1a\x58\xbf\xfc\x86\x81\x7e\xa9\xa1\x3b\x17\x4d\x52\x9a\xed\x2d\x03\xfd\x1a\xea\x80\xfc\x1b\x97\x7e\x65\xa0\x77\x34\x74\xef\xe2\x37\x21\xed\x55\x81\xc8\x11\xd9\xfc\xdb\x1a\xba\xfe\x0d\x00\xbe\x09\xc0\xb7\x34\x70\xe3\x2d\x00\x7e\x0d\xc0\x6f\x01\xf8\x23\x64\xfe\x6f\x0d\xac\x5f\xfe\x3d\x40\xd7\xbe\xaa\xa1\xdb\xf0\xf1\x0e\xa4\xdc\xf9\xba\xc9\x04\xd0\x0d\x53\xee\x32\xd4\x7e\xeb\x35\x0d\x6c\xbc\xfa\xae\xd3\x70\x3e\x21\x11\xfe\xb5\x86\x6e\xfc\x45\x03\x77\xbf\xaa\x81\x8d\xf3\x82\xdf\x3f\x29\x73\xfd\x46\x43\xeb\x97\xff\xa8\xa1\xdb\x6f\x99\xa4\x3f\x69\xe8\xc6\x5f\x4d\xd2\x5f\x34\x74\xeb\x07\x1a\xd8\xb8\xf4\xb6\x86\xee\x5d\xf8\x82\x81\xbe\x64\xa0\x17\x01\xba\xf8\x06\x94\x38\x2f\x64\xd6\x13\xb2\xf9\xdf\x6a\xe8\xc6\xbb\x00\x5c\x01\xe0\x1f\x1a\x58\xbf\xfc\x57\x03\x5d\x86\x8f\xd7\x4c\xd2\xdf\x0d\x74\x55\x43\x37\xa1\xfa\x3b\x50\xc5\xc6\xa5\x37\x0c\xf4\x53\x0d\xdd\xbb\xf0\x55\x03\xbd\x0c\xd0\xc5\x2f\x68\xe8\xb6\x10\x81\x4f\x08\x62\xdd\x96\xd9\x3e\x27\xf1\x16\xbd\x3a\x2a\xf1\xfe\x9d\x86\xd6\x2f\xff\x13\xa0\x2b\x5f\x30\x10\xe4\xdb\xb8\xf4\x7b\x0d\xdd\x7a\x1d\x92\xce\x0b\x11\xfe\xa4\xac\xe4\xf7\x1a\xba\x7d\x59\x03\x37\xe1\xdb\xf5\xef\x68\x60\xfd\xca\x8b\xf0\xed\x2b\x26\xe9\x65\x48\x7a\xc9\x24\x7d\xdd\x40\x5f\xd5\xd0\x9d\x9f\x6a\xe0\xd6\x05\x0d\xdc\xbb\xf8\x6d\x03\xbd\x09\x4d\xcb\x82\xb2\x9f\x42\x46\x3d\xa9\xfa\x29\xda\x7c\x4a\xa2\xf8\x07\x0d\x5d\x7f\x15\x80\xf3\x00\x7c\x57\x03\xeb\xd7\x5e\x35\xd0\xb7\x0d\xf4\x7d\x03\x41\xbe\xeb\xdf\x83\xa4\x2b\xdf\xd0\xd0\x9d\xdf\x9a\xa4\x6f\x69\xe8\xe6\x37\x4c\x92\xa9\xec\x0a\x34\x70\x13\x72\xdd\xf9\x3d\x00\x7f\x84\xda\xa1\xc1\x3b\xbf\x36\x2d\x9b\x3a\xa1\xa6\xdb\xdf\x81\x4c\x06\x03\xc8\x73\xeb\xa7\xa6\xd8\xeb\x06\xfa\x91\x81\xd2\xaf\x17\x0d\xf4\x86\x81\x0c\xce\xd7\x7e\x00\x2d\x01\x16\xb7\xa1\x8b\xd7\xcd\xa7\x7f\x42\x93\x2f\x03\xf0\x13\x0d\xdc\xbb\xf0\x75\x03\x41\x9d\xb7\x64\x33\x47\x64\x9a\x44\x56\xa2\x2d\x13\x9f\x91\x83\x25\x98\xe0\x69\x39\x58\x7f\xd4\xd0\xfa\x95\xef\x1a\xe8\xfb\x1a\xba\xf5\xa6\x06\x36\x2e\xfd\x5c\x43\xf7\x2e\x7c\xdb\x40\xaf\x1a\x08\x8a\x6e\x9c\x17\xe8\xfd\x97\xac\xf8\x92\x86\xee\x5d\xf8\xbe\x81\x7e\xa0\xa1\xbb\x5f\xd7\xc0\xc6\x79\xc1\xa1\xc7\x64\x81\x3f\x69\xe8\xe6\x77\x35\xb0\x7e\xe5\x07\x90\x04\xc0\x9d\x6f\x03\xf0\xaa\xc9\xf4\x23\x03\xbd\x0e\xd9\xbf\x6f\x92\x2e\x6a\xe8\xee\x37\x34\xb0\x71\xe9\x4d\x0d\xdd\xbb\x00\x25\xef\x5d\xfc\xa5\x81\xbe\x04\xf9\xce\x8b\x49\x71\x5c\x62\xf6\x67\x0d\xad\x5f\xbd\xa8\xa1\x9b\x3f\x82\xa4\x2b\x6f\x42\xd2\xeb\x26\xe9\xa7\x90\xf4\x53\x93\xf4\x4b\x03\xbd\x61\xa0\xb7\x34\x74\xe7\x07\x90\x1f\xaa\xdf\xb8\xf4\x4f\x0d\xdd\xbb\xf8\x96\x81\x5e\x84\xaf\xe7\x85\x36\x72\x42\xa2\xf6\x17\x0d\xad\x5f\xf9\xb5\x86\x6e\xbe\x69\x92\x7e\xab\xa1\x3b\x3f\x82\x6f\x6f\x98\x6f\x7f\x34\xd0\xef\xe1\xe3\x2f\x35\x70\x0b\xca\xdd\x82\x4f\x77\xfe\xa9\x81\x7b\x17\x5f\x06\xe8\x75\x81\xd8\x89\xcf\x4a\x7c\xc4\x70\x3e\x23\xf1\x79\x47\x43\xd7\x7f\x08\xc0\x8f\x00\xf8\xb1\x06\x6e\xbe\xa5\x81\xf5\x2b\x97\x21\xe9\xd7\x26\xe9\x2a\x24\xfd\x16\xca\xbd\xae\x81\xdb\x50\xc1\xed\xd7\x00\xf8\x1e\x00\xd0\xda\xfa\xb5\x5f\x42\xf9\xdf\x03\xf0\x47\xc8\x74\x5e\x03\x77\xbe\x0b\xc0\xf7\x35\x70\xeb\x0f\xa6\xbc\xc1\xe4\x9a\x41\xf3\xda\xef\x0d\xf4\x5b\x03\xfd\xd1\x40\x6f\x1a\xdc\xff\x04\x4d\xfe\xc9\x24\xfd\xd5\x40\x7f\xd1\xd0\xdd\x17\x35\xb0\x71\x5e\x48\xcf\x4f\x49\xb2\xfd\x55\x43\xeb\x57\xfe\x6e\xa0\x7f\x6a\xe8\xd6\x9f\x34\x70\xef\xc2\x45\x0d\xdd\x7d\xc9\x24\x09\x16\xfb\x94\xdc\x18\x9c\x17\x2c\xfe\xac\xac\xee\x6f\x1a\x5a\xbf\xfa\x05\x03\x7d\x49\x43\x37\xff\x62\x92\x5e\x36\xd0\x8b\x06\xfa\xaa\x86\x36\x2e\xfd\x09\xa0\xf3\x42\x69\xf9\xb4\xac\xf8\xb2\x86\xd6\xaf\x7e\xdd\x40\xdf\xd0\xd0\xc6\x79\x21\x6a\x3e\x23\xf3\x5d\xd1\xd0\xfa\xb5\x3f\x69\xe8\xfa\x05\x0d\xdc\xfc\xab\xf9\x76\x59\x43\x77\x20\xd3\xfa\x55\xa8\xe2\xe6\x65\x93\x2b\xcd\xff\x17\x0d\xdd\xfa\xb3\x06\xee\x7e\xcb\x7c\xfb\xa7\x86\x36\xce\x0b\x7d\xe8\xb3\x12\x8b\xab\x1a\xba\x79\x45\x03\xeb\x57\xbf\x0d\x49\xd7\x00\xf8\x87\xf9\xf6\xaa\x81\xbe\xab\xa1\x5b\xef\x68\xe0\xce\x9b\x1a\xd8\xb8\xf4\xae\x81\x7e\xa3\xa1\x7b\x17\xde\x80\xb4\xf3\xa2\x7e\x5f\x34\xfe\x8f\x2f\x6a\x68\xfd\xea\x8f\x34\x74\xfd\xa7\x00\xfc\x0c\x80\x37\x4c\xa6\x5f\x19\xe8\x17\x06\xfa\x8d\x81\xde\x86\x02\x3f\xd7\xc0\x0d\xa8\xfe\xc6\x97\x4d\xa6\x4b\x06\xfa\x83\x81\xde\x31\xd0\x9f\x35\x74\x07\x5a\xba\x6d\xb0\x78\x13\x52\x7e\x62\x72\x43\x3b\xd7\x01\x9b\xdb\xd7\x00\xf8\x16\x54\x04\x28\xdc\x49\x51\xf8\x99\x81\x7e\x67\xa0\xbf\x01\x74\xd9\xe0\xfc\x92\x06\x36\x2e\x41\xf5\x77\x81\x70\xf7\x5e\x97\x88\xca\xb6\xc5\x5c\xf6\x89\x68\xf3\x1f\x06\xfa\x39\x40\xf7\x5e\x97\x7d\xa3\x12\x94\x6d\x0c\x24\x28\xc6\xda\x3f\x23\xc1\x6b\x29\x28\x2b\x58\x95\x43\x24\xd6\xf3\x25\x39\x44\x5f\xd2\xd0\xfa\xe5\x2f\x1b\xe8\x25\x03\x7d\x45\x43\xb7\xbe\x00\x00\xe4\xba\x7b\x5e\x03\x1b\xe7\x05\xcf\xb4\x65\x65\x5f\xd6\xd0\x8d\xaf\x00\xf0\x35\x00\x5e\x01\xe0\x9b\x1a\xb8\xfe\x2b\x0d\xac\x5f\x86\x4c\xb7\xbe\xaa\x81\x3b\x7f\xd7\xc0\xbd\xd7\xdf\xd5\xd0\xc6\xcb\x2f\x02\x74\x5e\x34\xdd\x91\x0d\xbe\xa8\xa1\xf5\xcb\xaf\x68\xe8\xc6\x7f\x9b\xa4\x6f\x1a\xe8\x3b\x06\x3a\x6f\x20\xc8\x77\x03\x3e\xde\xfa\x86\x06\xee\x7e\x1f\x80\xd7\x34\x70\xef\xc2\x55\x0d\xdd\x16\x23\xd3\x91\xbb\xe6\x97\x01\xda\x38\x2f\xe6\x0a\x91\x08\xbd\xa4\xa1\xeb\x6f\x01\xf0\x36\x00\xbf\xd6\xc0\xfa\xb5\x2f\x02\x74\xf5\x5d\x93\xf6\x92\x81\xbe\x6c\xbe\xfe\x43\x43\x37\xce\x43\xd2\xe5\xef\x19\xe8\x35\xf8\x08\x49\x37\x20\xe5\xfa\x6f\x4c\x0d\xd7\xe0\xdb\x8f\x35\x70\x07\xda\xb9\xf3\x15\x93\xe9\x8a\x69\x1a\xd2\xee\xbc\x6d\x9a\xb9\x00\x35\xfc\xd0\x24\xa5\x10\xd4\x7a\x17\x0a\xde\x85\x94\xdb\x50\x6e\xe3\xbc\xc0\xaf\x2b\x89\xf3\xb2\x86\xd6\x2f\xff\x44\x43\xb7\x5e\xd5\xc0\xbd\x0b\x7f\xd7\xd0\xc6\x79\x41\xfe\x65\x59\xe0\x2b\x1a\xba\xfd\x8e\x06\x6e\x5c\xd0\xc0\xfa\xe5\x9f\x41\xd2\x4f\x00\x80\x94\xdb\xbf\x82\x94\x9f\x43\xca\x2f\x34\x70\xf7\xa7\x1a\xb8\x77\x11\x72\xaf\xbf\x73\x05\xd2\x2e\xbc\xab\xa1\x8d\xf3\x82\x96\x3d\x89\xc3\x57\x35\x74\xe3\x17\x1a\x58\xbf\xfc\x73\x03\xfd\x4a\x43\x77\x7e\x62\x92\xd2\x6c\x6f\x1b\xe8\x37\x00\x5d\xfd\x3e\xd4\x06\x25\x37\x2e\xbd\x65\xa0\xbf\x6a\xe8\x2e\xd4\x71\x4b\xd0\xae\x77\x46\x62\x24\x14\xa4\x40\x62\xf4\x35\x0d\x5d\xff\x2d\x00\xbf\x03\xe0\xf7\x1a\xb8\xf1\x36\x00\xbf\x01\xc0\xe4\xf9\x83\x06\xd6\x2f\x1b\xe8\x1a\x54\x79\xfb\xdb\x1a\xb8\x03\x29\x77\x5e\x31\x99\x00\xba\x91\xd6\x00\x95\xde\x7d\x0b\xbe\x5d\xd2\xc0\xc6\x79\xc1\x26\x9f\x93\x08\x7f\x5d\x43\x37\xde\xd1\xc0\xed\x3f\x6a\xe0\xee\xd7\x34\xb0\x71\x5e\xac\x10\xa7\x65\xf6\x57\x34\xb4\x7e\xf9\x92\x86\x6e\xbf\x6d\x92\xfe\xac\xa1\x1b\x7f\x33\x49\xef\x68\xe8\xd6\x0f\x35\xb0\x71\xe9\xd7\x1a\xba\x77\xe1\x8b\x06\xfa\xb2\x81\x5e\x02\xe8\xe2\xcf\xa1\xc4\x79\xc1\xb8\xa1\x6c\xfe\x1b\x1a\xba\xf9\x05\x0d\xdc\xb8\x0a\xc0\x3f\x35\xb0\x7e\xf9\x6f\x06\xba\x02\x1f\xff\x6e\x92\xfe\x61\xa0\x6b\x50\xd7\xbb\x00\x7c\x49\x03\xb7\x7e\xa4\x81\xbb\xbf\xd1\xc0\xc6\xa5\x9f\x69\xe8\xde\x85\xaf\x01\x74\xf1\x8b\x26\xed\x2b\x1a\xba\x2d\x3f\x2a\xa2\x09\xbd\x70\x45\x62\xfd\x4d\x0d\xad\x5f\x7e\x17\xa0\x2b\x5f\x34\xd0\x97\x35\x74\xf7\x12\x00\x7f\xd0\xc0\xc6\x79\x31\xa5\x22\x59\xc7\xb7\x34\x74\xfb\x8a\x06\x6e\xbe\xa8\x81\xeb\x97\x34\xb0\x7e\xe5\x25\xf8\xf6\x55\x93\xf4\x15\x48\x7a\xd9\x24\xbd\x62\xa0\xaf\x69\xe8\xd6\x45\x0d\xdc\xfd\x13\x64\x87\x4f\xf7\x2e\x7e\xc7\x40\xbf\x00\x1c\xc4\x30\x44\xaa\x97\xa2\x24\x95\x18\xfe\xb7\x86\xae\xff\x09\x80\x3f\x03\xf0\x17\x0d\xac\x5f\x3b\x6f\xa0\xef\x18\xe8\x35\x03\x7d\x0f\x0a\xbc\x03\x49\x57\xbe\xa9\xa1\x3b\xbf\x33\x49\xd0\xd0\xcd\x6f\x9a\x24\x53\xd9\x15\x68\xe0\x26\xe4\xba\xf3\x07\x00\x2e\x41\xed\x7f\x85\x94\xdf\x98\x96\x4d\x9d\x50\xd3\xed\x57\x21\x93\xc1\x00\xf2\xdc\xfa\x99\x29\x76\xc1\x40\x3f\x36\x50\xfa\xf5\x27\x06\xfa\xb9\x81\x0c\xce\xd7\x7e\x08\x2d\x01\x16\xb7\xa1\x8b\xd7\x2f\x43\xca\xbb\x1a\xb8\xfb\x5d\x0d\xdc\xbb\xf0\x8a\x81\xa0\xaa\xbb\x40\xad\x5b\xb2\x19\x29\x19\x24\x24\x15\x8e\x0b\x12\x6d\x2a\x07\x4b\x20\xd4\x97\x83\xf5\x6d\x0d\xad\x5f\xf9\x9e\x81\x5e\xd3\xd0\xad\x5f\x40\xd2\x3b\xff\xd0\xd0\xbd\x0b\xdf\x31\xd0\x79\x03\x41\xd1\x8d\xf3\x42\x74\xbf\x20\x2b\xfe\x8e\x86\xee\xbe\xa2\x81\x7b\x17\x5e\x33\xd0\x0f\x35\xb4\x71\x5e\x10\x89\xc9\x02\xaf\x6a\xe8\xe6\xf7\x34\xb0\x7e\xe5\x87\x90\x04\xc0\x9d\xef\x00\x70\xde\x64\xfa\xb1\x81\x2e\x40\xf6\xd7\x4c\xd2\x4f\x34\x74\xf7\x9b\x00\xfc\x43\x03\xf7\x2e\x40\xc1\x7b\x17\x7f\x65\xa0\x2f\x6b\x68\xe3\xbc\xd0\x78\x63\x89\xd8\x79\x0d\x5d\xff\x89\x06\x6e\xfe\x58\x03\xeb\x57\x7e\x01\x49\x17\x4c\xd2\xcf\x20\xe9\x67\x26\xe9\x57\x06\xfa\xb9\x81\xde\xd6\xd0\x9d\x1f\x42\x7e\xa8\xfe\xce\xbb\x1a\xb8\x77\xf1\x6d\x03\xbd\x04\x05\xaf\x42\xe3\x1b\xe7\x45\x65\x5c\xa2\xf8\x5d\x0d\xad\x5f\xf9\x0d\x40\x57\x5f\xd3\xd0\xcd\x5f\x98\x8f\xbf\xd3\xd0\x9d\x1f\xc3\xb7\x9f\x9b\x6f\x97\x0c\xf4\x07\xf8\xf8\x2b\x0d\xdc\x82\x72\xff\xf7\xab\x1a\xd8\xb8\xf4\x4b\x0d\xdd\xbb\xf8\x15\x80\x5e\x17\xd8\x72\xa5\x6c\x09\x4d\x7d\x20\x51\xfb\x9e\x86\xae\x5f\x01\xe0\x2a\x00\xd7\x34\x70\xf3\x6d\x0d\xac\x5f\x81\x4c\x37\x7f\x63\x92\x4c\xae\xdf\x41\xb9\xbf\x6b\xe0\xf6\xeb\x00\xfc\x00\x80\xef\x03\xf0\x23\x28\x7f\xed\x57\x50\xfe\x0f\x00\x5c\x82\x4c\xdf\xd5\xc0\x1d\x40\xf2\xce\x6b\x1a\xb8\xf5\x47\x53\xde\x60\x72\xcd\xa0\x79\xed\x0f\x06\xfa\x9d\x81\x2e\x19\xe8\x17\x06\xf7\x3f\x43\x93\x7f\x36\x49\x7f\x33\xd0\x3b\x1a\xfa\xbf\x5f\xd3\xc0\xc6\x79\x51\xf2\x8c\x24\xdb\xf7\x35\xb4\x7e\xe5\x1f\x06\x7a\x57\x43\xff\xf7\x15\x0d\xdc\xbb\xf0\x13\x48\xfa\x86\x49\x12\x6c\x77\x46\xed\x20\xc4\x20\x9d\x95\xd5\xbd\xa6\xa1\xf5\xab\x5f\x34\xd0\x97\x35\x74\xf3\x1d\x93\xf4\x15\x03\xbd\x64\xa0\x1f\x18\xe8\x6b\x1a\xda\xb8\xf4\x67\x80\xce\x0b\xea\x9e\x93\x4d\xfc\x40\x43\xeb\x57\x5f\x31\xd0\x37\x35\xb4\x71\x5e\xe8\x1e\xab\x32\xdf\x0f\x35\xb4\x7e\xed\xcf\x1a\xba\xfe\x0f\x0d\xdc\xfc\x9b\xf9\x76\x45\x43\x77\x20\xd3\xfa\xd5\xff\x86\xec\xef\x9a\x5c\x26\xff\xd5\xb4\xd6\x77\x34\x74\xeb\x2f\x1a\xb8\xfb\xdf\xe6\x1b\x94\xdc\x38\x2f\xc6\xf2\xf3\x12\x9f\x1f\x69\xe8\xe6\x55\x0d\xac\x5f\xfd\x0e\x24\xfd\x1d\x80\x7f\x9a\x6f\xe7\x0d\xf4\x3d\x0d\xdd\xfa\xab\x06\xee\xfc\x42\x03\x77\xbf\xa0\x81\x8d\x4b\xbf\xd5\xd0\xbd\x0b\x3f\xd7\xd0\x7b\x62\x01\x7e\xef\x3b\x02\x12\xd3\xe9\xbd\xef\x09\x48\x90\xf6\xbd\xd7\x04\x24\xf4\xb0\xf7\x7e\x28\xa0\x5f\x1b\x48\x0c\xee\x7b\x3f\x11\x90\x58\xfd\xdf\xfb\x85\x80\x7e\x63\x20\xd1\xbd\xf7\xde\x16\x90\x68\xec\xbd\x4b\x02\x12\x6c\xf9\xde\x3b\x02\x12\xda\xe6\x7b\x7f\x13\x90\x60\xda\xf7\xae\x38\xd8\xf9\x9f\xaf\x03\xf4\xde\xb7\x4d\x9a\x6c\xe3\x5d\x01\x89\x41\xfb\x9f\x97\x04\xf4\x0a\x40\xef\xfd\xd1\xa4\x09\x4c\xff\xe7\x6b\x02\x12\x5a\xd2\xff\x7c\xd9\x49\x52\xab\xc2\x30\xb5\x2a\x74\x1d\xa7\x42\x50\x8d\x11\xf9\xc8\xc0\x9d\x6b\x3e\x77\x72\x50\xaf\xd7\xeb\x55\xf1\xe7\xdf\x0f\xb7\xe6\x96\xb3\x66\x8a\x60\x4c\xd1\x24\x2d\x69\xa7\x5d\x64\x03\xc9\x48\xb7\xba\x42\x3b\x41\x37\x20\x6c\x0e\x80\x78\x8e\x91\xee\x4e\xec\x1f\x1d\x65\x69\x62\x05\x81\x28\x97\xb5\x1f\x08\x52\x2e\xcf\x4a\x63\x5b\x63\x74\x4b\xf2\x56\x8f\xba\x8e\x58\x06\x53\xb4\xea\xb0\xad\x0e\xb5\x55\xaf\xce\x5a\x10\x75\x62\x71\xad\xbd\xd4\x20\x49\x63\x4d\x39\xd4\x68\x10\xdc\x67\x54\x19\x8e\xf1\x64\x17\x1c\x65\x9e\xf1\x99\x79\x01\x76\x2a\x26\xfc\xa8\xa6\xdd\x51\x3f\xf2\x97\xb5\x4b\x6c\x77\xed\x14\x1b\x44\x87\xfc\x76\x8f\x34\x22\x72\xb6\x74\x9c\x70\xdc\xf6\xfb\xfe\x52\x10\x06\x3c\x20\x71\x43\x17\x5f\xc9\x96\x3d\x64\x65\x59\xdc\x3c\x8b\xeb\x3c\x5c\x9b\x7f\xd8\x31\xb6\xf3\x6d\x46\x7c\x4e\x00\x9f\x86\x42\x84\x28\x5f\x4f\x90\xc7\xd0\x02\xca\x2c\x01\xa4\xc9\xa5\xad\xf0\x10\x0e\xa2\x98\xfb\x61\x08\xd5\x49\x23\x99\xb5\x3e\x8d\x03\x41\x6f\x3f\x6c\xd0\x04\x29\x17\x48\x6b\xa6\x4e\x1f\x2a\x89\x45\xbd\x61\xe2\x45\x2e\x95\xb6\x57\x61\x1a\xc5\xb7\xbd\xe4\x85\xca\x9e\x5f\x47\x27\x1c\x44\x47\xa2\x43\x34\xe2\xe4\x1c\x77\x43\x1c\xa0\x19\xe6\xfa\xa8\x5c\xe6\x6e\x8c\xac\x60\xd3\x3c\xcd\x14\x63\x1f\xcb\x70\xb1\xd0\xae\x34\xca\x51\x2d\x7b\xb1\x34\x9b\x56\x7d\xf6\x82\x04\xab\x98\x41\x56\x27\xec\x2e\x04\xa3\x5d\xa0\xd0\x05\x5f\x74\x21\x16\x5d\x50\x91\xdd\xe3\x4c\x17\xe2\xb1\x5d\x88\xd3\xf6\x45\x57\xa8\xec\x8a\x2f\x2d\x0f\xdd\x14\x65\x99\x6a\x3c\xc1\x40\x9c\x75\x65\xbc\x4a\xd1\xac\x67\xd9\x7b\x41\x2e\x9c\x2d\x3d\x4a\x97\x82\x8c\x58\x3d\x80\x28\xc8\xec\x63\x6a\x21\x6a\x13\x93\xa6\xc4\xf4\x51\x82\x73\x6d\x28\xf7\xc3\xca\x64\x08\x8c\xff\xd9\x20\xaa\x45\xe2\xab\x72\x1e\x25\x4a\x7c\x4a\x4c\xa0\xd8\xc1\x2a\xff\x8c\xa1\x93\x9c\x12\x35\xbf\xd3\x71\x23\x51\x77\x86\x72\xd2\x96\x49\xd5\xcc\xc6\xd4\x2c\x6a\x58\x92\xb5\x16\xd6\xc9\x74\x9d\x87\x20\x58\xb5\xcb\x75\x0f\x14\x3e\x80\x3e\xa9\x05\xf1\x63\xca\xa7\x1b\xe9\x0c\x87\xd6\xcf\x20\x5a\x1e\x0e\x55\xdb\x10\xdd\x56\x54\xaa\x1d\xc0\x19\x36\x2a\x90\x2d\x91\xe0\x17\xc1\x50\x39\xbc\xe0\xbd\x0f\xf1\x16\xd2\x3e\xe9\x70\xec\x04\x21\x1c\x0c\x87\xcc\x8d\x14\x3f\x8c\x19\x57\x1c\xa9\x71\x4c\x12\x84\xe5\xa3\xa9\xb5\xc4\xb6\xe7\x0f\x8a\x84\x7b\xd4\x21\xac\x0a\x4f\x2b\xe0\xaf\xed\xd9\x6e\xcf\x1e\x87\xcb\x57\x5e\xdc\xbc\xf3\xb2\x9f\x27\x14\xb8\x50\x13\xd2\x55\x7a\x9a\x9e\xb1\x9d\xa9\x45\xde\xec\x3c\x76\x99\xe7\x74\x82\xce\xb1\x41\xe4\xa0\x20\x72\x95\x83\x38\x34\xc6\xf9\xb5\xa8\x43\xe3\x15\x6d\xc9\xf9\x35\x6f\xb2\x96\x17\x25\xfa\x91\x41\x96\x29\x49\xb3\xde\x52\x7c\xa7\xf0\x18\x0e\x5d\xeb\x97\x37\x5b\xc7\x62\x8e\xab\x17\x55\xf3\x48\x5a\x3c\x5a\xf1\x92\xf8\x96\xc6\x49\x09\xae\x0f\xc6\x69\xdb\xe3\x14\x74\xdd\x59\x6b\x74\x8c\x45\x7b\x76\xc0\xd2\x09\x0a\x3e\xf0\x24\x3d\x34\xb2\x67\x94\xd8\x90\x92\x3c\x33\xb0\xdb\x1b\xd7\xac\x33\xc9\xad\x6b\x59\x7b\xe9\xfb\x7d\xb7\x38\x8a\x4d\xcb\x51\x36\x1f\x81\xc0\xef\x46\x0e\x86\x37\x80\x90\x96\xae\xdf\xa3\xdf\x22\x7f\x85\x74\x4c\xf2\x66\x93\xb8\x1b\x79\x3a\xac\x78\x5a\xa7\x67\x0f\xb3\xf8\x24\xab\xf4\x78\x22\xc6\x4e\x2f\x12\xae\x32\x22\x57\x55\x68\x91\x9d\xd6\xa0\x13\x64\x39\x50\x2f\xba\x51\x83\x24\xca\xa1\xa5\xf6\x76\x96\xe6\xb7\x9a\x41\x89\x24\x42\x2d\xd3\x96\xcd\x6a\x05\x4f\xb7\x72\xac\x26\xb4\xe0\xd8\xc1\x4d\x9b\xa5\xd0\x5a\x51\xb1\x17\x06\x01\x23\x55\xf5\xc8\x77\x0e\x3c\xd2\x5a\xcf\x14\x75\x8e\x4d\x5e\x22\xee\xca\x03\x2f\x2c\x24\x86\x7e\x6b\xae\x5d\x7a\xea\x9f\xb5\x9e\x6f\xb9\xf5\x94\x0f\x1c\xf5\x17\xe4\x12\xd4\x64\xad\xc2\x9d\x4d\x1c\x7c\x9e\x54\xe9\x52\x4c\xd8\x19\xf9\xce\x8b\x9d\x09\xda\x64\x4e\xff\x15\x7b\x9c\x4c\x86\xa2\xd7\x99\xe3\xea\x50\x8f\xc5\x82\xe5\x88\x32\x52\x65\xb4\x4a\x18\xa3\x6c\xcf\xdc\x4f\x28\xb3\xf6\x4d\x9f\x52\xab\xaf\xc7\x15\xca\x6b\x41\x14\x70\x7b\x8a\xd5\xd2\x04\x88\xbe\xce\x07\x7d\x17\x25\xfa\xaf\x52\x60\xda\xfa\xd5\x5f\x2c\xdf\xd0\xaa\x8c\x40\x0d\x95\x34\xd9\xff\xac\xf5\xd5\x38\x7e\x05\xbf\xb6\xda\x0b\xed\x31\x49\xe3\xa7\x74\xa5\xe5\xb2\x9b\x1d\x5e\x8d\x9d\x85\x08\x39\x5b\x7a\x96\xf8\xa7\x8f\xfa\xfd\x3c\x3e\xe4\x6c\xa9\xb0\x52\xf0\x75\x18\x75\x42\xa2\xbe\x20\x94\x2c\x0b\x2a\xc6\x3a\xa6\x5a\x1a\x26\x7a\x36\x53\x67\xa2\x01\x35\x9e\x66\x2d\x31\xe5\xc0\x1d\x22\x48\x95\x2c\xae\x4a\x71\x47\x33\x6c\x91\x49\xc5\x94\xa3\x86\x9b\xcb\xa1\xd4\x4b\xbd\x39\x74\x9b\xbc\x05\xee\x30\x01\x83\x9a\xc1\x00\xa1\x64\x10\xed\x0e\x3e\xea\x01\x14\x09\x09\x17\xba\x31\xe6\xe5\x32\xab\x09\xb2\x80\x26\x93\x96\xd0\x99\x48\x1e\x2b\x0b\x13\x84\x50\xa2\x1e\xeb\x6b\xa6\x31\xd8\xc0\xc6\x6d\x8a\xc1\xab\x75\x82\xb8\x4d\xa3\x88\xb4\xb9\x8b\x50\x4e\xcc\xaa\x4a\x54\x13\x89\x3d\x8c\x62\x99\xec\x52\xe6\x6a\xd7\x43\x25\xb1\xf1\x07\x11\x4f\x8a\x3a\xcf\x61\xaf\x25\xdd\x65\xa2\xb4\x2c\x53\x65\x99\xd8\x2a\x24\x09\xa6\x99\x07\xfc\xbe\xe7\xd8\xad\x3a\x38\x96\xce\x01\xc2\xad\x39\x07\xc8\x54\x81\xf0\x20\xd3\x44\x3b\xef\x23\x20\x1c\xe3\x23\xa0\xdd\x24\x2d\x2f\xd4\x3e\x02\xda\x59\x1f\x01\xf6\x4f\xdc\xce\xfb\x08\x68\x8f\xf5\x11\xd0\x1e\x0e\xdb\x79\x1f\x01\xed\xac\x8f\x80\xb6\x17\x6f\xdd\x47\x00\xc5\xbe\xf1\x11\xd0\x46\x78\x60\xf9\x08\x68\xe7\x5e\xf0\xb7\xb5\x8f\x80\x4c\xfa\x62\x7b\xd4\x47\xc0\x20\x3d\xe7\x98\xec\x23\x20\xdf\x42\xb1\xdc\x15\x28\xb6\xa5\xc3\x06\xdb\x47\x80\x48\xd5\x5e\x02\x72\x3b\xac\x99\xe9\x16\x99\xe2\x05\x62\x0f\x5f\x4b\x4b\xe1\x50\xe0\x75\x5b\xcb\x47\x1a\x49\x8c\xb2\xe2\x82\x78\xd9\xaf\x33\xd9\x9f\x9e\xcb\x71\xad\x56\x03\x67\xcd\x4e\x56\xc6\x96\x42\x4a\xfb\xa5\x30\x58\x09\xc4\xe6\xa1\x4d\x48\x47\xae\x08\xe9\x73\xfb\xba\xd0\x79\x54\x05\x49\xf1\x72\x4d\xc3\x33\x84\xcd\x75\x89\xcf\x07\x6c\x4a\xed\x45\x97\x29\xd0\x5b\x72\x39\x00\x88\xe7\xe4\x22\x19\xb4\x77\x5b\xa1\x19\x5b\xc0\xf8\x42\x5a\xcb\x2a\xe0\xcb\x84\x8f\x46\xf0\x4f\xfd\x9f\x24\x49\x81\xc7\x89\x91\xee\xfc\xbf\xd8\x67\xd3\x9d\xb9\x36\x8d\xb8\x1f\x44\x84\x55\x3b\x64\x69\xb0\x5c\xf5\x3b\x7e\x9f\x6f\x95\x28\x9a\x79\xa6\xf6\xb4\xa1\xb7\x5f\xea\x15\xb8\x76\x3a\xef\x8a\x75\xed\x18\x59\x3e\x7c\xae\xef\x3a\xcf\xcd\x2d\x3a\x15\x56\x71\xe6\xdc\x5a\x05\xcd\x39\x15\x52\x71\x1e\xd0\x0f\xaa\xf5\x19\xb8\xd9\x85\x46\xcd\xf9\xd6\x2e\x9d\x45\xc3\x29\xdc\x21\xa0\xc9\x63\x82\x24\x07\x15\x45\x6a\x4a\x27\x74\xd7\x4e\x29\x45\xff\x98\x8c\xa5\xcd\x56\x1b\x52\x85\x93\x9a\x20\x9c\x58\x99\xfd\x97\xcf\x96\x07\xd2\xf1\x11\x1c\x1c\x66\x8b\x82\xaa\x90\x4b\x96\x2b\x3c\xaf\x1d\xcd\x24\xa2\x04\xb7\xfd\xe8\x90\xcf\xfd\x90\x2e\x1f\x8e\x38\x0b\x48\xfc\xe8\xea\x89\xd5\x3e\xb1\x8e\xfb\x57\x68\x87\x84\xd2\x47\xcf\x70\x38\x16\x15\x51\x51\x71\x2d\x69\xb0\x80\x3c\x4a\xb5\xd4\x83\x51\xec\x22\xe3\xdc\xff\xa0\x8b\x70\xe0\x99\x5d\x57\xdc\xf7\xdb\x44\x67\x7d\x9a\x91\x6e\x70\xce\x76\x54\x80\x7d\xcf\x78\x02\xa1\x07\x7c\xdb\x3f\x01\xd7\x6e\x08\xaa\xf3\xb3\x9e\xe7\x9b\xa7\x9c\xc4\xbc\x9a\x15\x2c\xe3\xe3\x5c\x43\x7d\xda\x39\x6a\xb5\x35\x1c\x06\x68\x86\x0b\x9a\x7a\xbe\xf6\x74\x4c\x2a\x4e\x3c\xe7\xa0\x5a\x9f\xf6\x5d\x84\x70\x24\x34\x48\xc5\x2a\x52\x47\x01\x0e\x4a\x92\x4d\xbc\xac\x6c\xca\xf9\x93\x66\x8b\x76\x02\x22\xf2\x57\xbb\xbe\xd8\xa6\xaf\xde\xbf\x9d\x20\xc9\xb1\x8d\x66\xef\x74\x49\xd7\x7b\xd1\xcf\xc5\x35\xa2\x86\x5f\xe8\xb1\xf9\x34\x2b\xd7\x29\xe2\x9f\x3e\x15\x13\x12\x21\x38\x85\xc8\x1c\x38\x10\xe0\x79\x28\x49\x86\xc3\x91\xea\x92\x0c\xf7\xac\x15\x04\xbb\xcb\xd4\x21\xf4\xd3\xd8\x8e\xa2\x5e\x0a\xf4\x61\x13\xe4\x48\x94\x12\x6e\xa2\xb5\xab\x06\x5d\x22\x77\xf8\x39\x02\xb0\x99\xec\x11\xbb\x6e\x16\x66\xb3\x1e\xa6\xa7\x78\x8f\xb0\x46\x3e\x72\x86\x56\xfe\xbb\x41\xa4\x39\x4d\x74\x41\x68\xff\x41\xd7\x4d\xe5\x97\xc2\xec\x1c\x67\x7e\x1b\xbc\xc6\x1f\x96\xcc\xe0\x32\xac\xf2\x1a\xea\x47\x88\xf7\x18\x3d\x5b\x12\x33\xfc\xb0\x50\x08\xdc\xe7\x4b\x87\xcf\xf5\xe5\x73\xeb\x12\xa7\x25\xd1\x52\xa3\xf4\xe0\x03\x6b\xa4\xd6\x1d\x84\xa1\x68\x2e\x79\xb0\x74\x36\xe0\xbd\x20\x12\xc9\x2c\x79\xb0\xb4\x34\xe0\xa5\x65\xca\x4b\x0f\x9a\x7d\xe1\x83\xb5\xd2\x63\x41\xa7\xb4\x4a\x07\xa5\x2e\x15\xaa\xb9\xa8\xea\x41\xc5\x90\x25\xcd\x19\xb9\x5a\x16\x9f\x37\x8f\xb4\xd5\xce\xb5\x47\x07\x61\xe7\x59\xe6\xf7\x8f\x44\x87\xc4\x38\x3f\xae\x38\xd5\x8d\x30\x11\xaa\x6c\xe4\x65\xb7\x94\x91\x98\x4e\x49\x82\xa5\xe3\x6f\x79\x6a\x6f\xd3\x4e\x6c\xaa\xea\xd2\x55\x98\xfc\xde\x91\x37\x2d\x30\x9a\xca\x4d\xbf\x72\x7a\x90\xfa\x24\xff\x4f\xe5\x5a\xe0\x61\xcf\xf3\x02\x2d\x25\x64\x3d\xf2\xb1\x79\xb3\xde\x32\x69\xdc\x73\xfe\xd3\xa9\x04\xcd\xf9\x96\xac\x88\x78\x41\x73\x5f\x0b\x6a\x69\x38\x68\x46\x9d\x4b\xe1\xc8\x23\x62\x65\x90\xef\xe4\xd3\x32\x98\xa9\xda\x94\x1e\x5e\xc7\xd5\x79\x21\xcd\x44\x15\x33\x0e\xf8\x9e\x6c\xa4\xfe\xd8\x84\x2c\x65\xb2\xfb\x8e\xe5\xa4\xcd\xa9\x44\x98\x79\x26\xbf\x03\xaf\xf1\xbb\xee\xbe\x0c\xfa\x80\x5f\x3d\x83\x9f\xce\x46\x20\x9b\x24\x54\x73\x1e\x7a\xb8\xe8\x9a\x0e\x00\xd2\x62\xcb\x2b\xb3\x60\xf3\x49\x26\xcf\x48\x8f\x22\xd0\xca\x7c\xa6\x15\x2e\xdb\xc5\x59\x62\xa4\x28\xab\x7e\xd5\x65\x0c\x98\xd0\x8f\x95\xb3\x8a\xa7\xba\x6e\xa6\x9b\xb8\x8e\x0a\xfb\xce\x3d\x0e\x47\x7b\xf3\xc6\x15\x41\x3a\x94\x0d\xe9\x5e\x3e\x48\x11\xd5\x8e\xeb\x22\xec\x5b\x97\x71\xe9\x31\xa3\x94\xe6\x0e\xf0\xe3\x5a\xca\x32\x42\xdd\x81\x69\x20\x2f\x88\x84\x98\x6f\x70\xbd\xb6\xa9\x9f\xee\x9a\xd0\xca\x1b\x2c\x41\x58\x01\xa6\xc4\xb3\x01\xef\xd1\x81\x7c\xf1\xdf\xa0\x38\x52\x37\x4b\x8c\x52\xde\xf0\xb1\x9e\xf5\x47\x09\xef\x51\xd5\x94\xa3\x93\x9c\x8a\x3e\xf3\x91\x37\xe7\x35\x25\xe6\xbb\xab\xae\xd0\xb8\x71\x3f\x1c\x30\xb9\x19\xea\x88\x5a\x63\xb5\xf4\x17\xa9\x03\x2b\xfe\x69\x72\x82\xaa\x3a\xb2\x1b\xba\xf1\x6b\x65\x45\x0c\x37\xaf\x38\x0d\x27\xc1\xe3\xa6\xa3\xbc\x89\x9e\x9d\x2f\x52\x37\x10\xc4\x2e\x10\x35\x3e\xea\xc7\xa4\x73\x4c\xaf\x40\xde\x6c\x7d\xcb\xea\x07\xc4\x3d\x39\x15\x51\xb6\x22\xbb\x2c\xef\xe0\x60\xb7\xae\xee\xc7\x5d\xeb\x4e\x34\x47\x1a\xaf\x28\x71\x38\x9c\xb6\xb8\xde\x66\x03\x86\xc5\x5f\x05\x5f\x8a\xbf\x0e\xe0\xda\x21\x7d\x46\xda\x3e\x27\x9d\xa7\xb3\xaa\x81\x37\x3b\x9f\x60\xd3\x13\x6b\xe5\x28\xea\xa3\x34\xf5\x70\xc7\x7c\xf1\x72\xe9\xf2\x48\x09\xd8\xc9\xe8\x50\x10\x5d\xc1\x48\x47\x57\xde\xe8\xb0\xda\x08\xdf\xcd\x8c\xb5\xbe\x10\x15\x34\xa3\x56\xb9\xac\xaf\x7d\x9a\x51\xcb\x65\x42\xea\x2a\x0f\x6c\x26\xbd\x66\xaf\x60\x32\x07\x4f\x70\x06\xc1\x7c\xf8\x07\x2d\x84\x40\x19\x5b\x98\x07\x49\xc5\x9b\x75\x88\xdb\x60\xf9\xb9\x54\xea\xa4\xa3\x8e\xc5\xe1\x17\xd8\x52\xc0\x6f\x5b\xb0\x10\x2d\x58\x84\x44\x0a\x8a\xe4\x0a\x5a\x24\x82\xcd\x2b\x32\x87\x31\xc5\x39\x35\xb7\x8c\x9d\xaa\x83\x1a\xea\x63\x66\x1a\x76\xfc\xb8\x47\x98\xe8\x4e\xb6\xcc\xc9\x9a\x28\x34\xe7\x20\xe3\xf6\x84\x58\xb3\x34\x3f\xd0\x39\x36\xb2\x06\x7a\xf4\x8b\x27\x74\x47\x07\x25\xb8\x4f\x3b\x72\x36\x3d\x41\xe9\xe9\x41\x5f\x08\x15\xc5\x53\xb6\x47\x25\x5e\x2b\x10\x3a\x40\x49\x9b\x34\x5c\xfa\xce\x14\x2a\x97\x64\x06\xdd\x8b\xe7\x52\xe2\x9c\x9c\x9b\xc3\x8e\x83\x10\x26\x15\x67\x4e\x6d\x81\x9c\x8a\x2a\x95\xa2\x92\xd1\x45\x6c\xad\x7d\x82\x6e\x3c\x49\x49\xcf\xd0\x68\x5c\x77\xb9\x0c\x21\x03\x9f\x8d\x7f\xc7\xf8\x48\x74\x7c\xb0\xd4\x09\xd8\xee\xa0\x22\xf8\xb2\xe2\x39\x96\x4b\xd4\x4c\xa8\x38\xe3\x7e\x74\x38\xb4\xa9\x36\x57\xe3\x24\xe6\x2e\x29\x1a\x06\x84\xb6\xd0\x3d\x3d\x97\x0e\x47\xcb\x42\xfb\xb7\xa6\x4e\x41\xc5\x15\x67\x8e\xc8\x7c\xce\x0c\xdc\x61\xe5\x77\x4d\x42\x8f\xe5\x59\x04\x8a\x15\x45\x9e\xb6\x7d\x8c\x0e\x38\x39\xea\xf7\x37\x69\x5d\x88\x98\x8a\x33\xc7\x44\xee\x78\x32\x06\x0c\x99\x09\x3e\x41\x55\x35\xfa\x20\x49\x0c\x2e\xc6\x79\x67\x76\x6c\x33\x12\x87\x98\x82\xb6\x64\x52\xb3\xf7\xc4\xe1\xa3\x4f\x3f\x71\xf0\xc4\xe1\xe3\xcd\xc2\x3e\xb4\xa4\xac\x5a\xf1\x83\x28\xcb\xd1\x41\xd7\x75\x44\xaa\x1a\xee\xa2\x31\x35\x06\x44\x7d\xbd\x74\xce\x39\x15\xa2\x67\x09\xf8\x0f\xca\x54\x59\x54\x20\x3b\xf3\x5d\xed\xd7\x56\xd7\x55\xd0\x6a\x82\x23\x12\x73\xc1\xfb\x21\x6d\x4b\x17\xba\x66\x16\x8c\xe2\x5f\xc0\xb3\x85\x58\x6f\x15\x89\x8a\xa3\xb7\x9c\x89\xd6\x87\xc6\xce\xbb\xb1\x53\xdc\x64\x69\xaa\xd6\x2a\x8e\xca\xe4\xa4\x8b\xcd\x84\x3c\x6a\xcc\x4c\x7f\xd5\x44\x7a\xda\xe7\x9c\xb0\x08\xac\xf1\x8c\x5f\x49\x77\xe4\xa4\xaa\x99\x99\x86\x29\xdd\x70\x26\x7d\x54\xbc\x68\xed\x26\xc3\x2b\x2a\x6d\x64\xbc\xf5\x39\xc1\xe6\x63\xd5\x4a\x10\xaa\x31\xe2\x77\x9e\x8a\xc2\x55\x17\xe1\xfc\x3e\xcf\x08\x78\xac\x77\x79\x42\x6f\x75\xc6\xf5\xdd\x72\x22\x16\x78\x75\x79\xfd\xa1\x4f\x3b\x82\x03\x34\xe3\x40\xb2\x19\xb4\xd4\x41\xbc\xd4\x81\xd5\x16\x91\x96\xcb\x2e\xd5\xd7\x2d\x32\x94\x97\x85\x08\xc5\x04\x21\x4c\xc1\xa4\xa9\x60\x8a\x53\x69\x15\xe7\x51\x84\x41\x3b\x3e\x15\xd2\x65\x85\x9f\xd8\x85\x62\x8a\xb0\x71\xd0\xc8\x92\x04\x8f\xb4\x61\xad\x66\x99\x95\x57\x6c\x32\x59\xdc\xa6\x0c\xf6\xbd\xc4\x0a\x44\x56\x84\x4a\x6a\x7a\x55\x2c\x8a\xd2\x0d\xb0\x60\x67\xbd\x09\x3e\xb8\xb2\x14\x2c\x0f\xe8\x20\x2e\xa9\x42\x25\xc9\x7f\x6a\x27\x9c\x3c\x58\xf2\xa3\x8e\xde\xb7\x3e\x8f\x26\x8a\xba\x54\xda\x93\xcd\x44\x22\x10\x43\x87\x46\x24\x96\x52\x31\x57\x75\x9b\xcf\xcd\xb5\x1e\x42\x0f\xcc\x61\x67\xee\xd4\x03\xf3\xce\xe4\x56\x23\x53\x5b\x94\xe0\x50\x12\x1d\x2e\xb0\x46\xc2\x70\x66\x74\xc2\xcc\xb4\xcc\x71\x1f\xc7\xb3\x75\x94\x60\x6b\x1c\xf5\xa9\xa9\xd8\x5c\xab\x21\x3a\xfc\xe4\xa7\x6a\x4f\x3c\xf5\xb1\x53\x47\x9f\x7a\xec\x99\x27\x0e\x9f\x3a\x76\xf8\xf8\x53\x4f\x7c\xea\xf0\xb1\x72\x79\x96\xd7\xc4\x46\x47\x7e\x84\xd4\x4c\x24\x48\xb1\xf3\x5e\x74\x9a\x1b\xaf\x9f\x6f\x39\x0d\xa7\x59\x6a\x39\x33\x91\xa5\xc5\x80\x66\xf8\x48\x7d\xd1\xa9\x39\xd2\xee\x56\xd9\x19\x3f\x52\xaf\x8e\xe4\x42\xb5\xcf\xd1\x20\xd2\x51\xc5\x86\x43\x57\xeb\xbe\xa3\x74\xe0\x08\xe1\x36\x8d\x62\x1a\x92\x72\x59\x03\xb5\x20\xea\xd2\xec\x2f\x37\xc0\x69\x1b\x38\x92\x56\x83\xa7\x23\x7a\x36\x7a\x9c\xb2\x2d\x9f\x54\xb2\xa2\x1d\x8b\x15\xd5\xac\x8e\x83\xf4\x54\x32\x3a\x10\xc8\xc8\x66\xe0\xf4\xae\x19\xb5\xb0\x9e\x93\x9c\xf9\x51\x2c\x96\xc2\x13\xd4\x9c\x0e\x3f\x3e\x08\xc3\x48\xcd\x9d\x00\xcd\x88\x09\xcc\x9a\xb4\xe5\x89\x61\x33\x33\x0d\x6f\x52\x90\x67\x0e\x9a\x32\x5b\x5a\x92\xc8\x3d\x83\x58\x0a\x70\xe0\xc9\x05\x41\x60\x63\x54\xea\x08\xc9\x13\x55\xf8\xa9\x6c\x6b\x85\xe2\x4d\xcb\x65\x5f\x6d\xec\x65\xb7\xaa\x70\x20\x51\x2e\x1b\x95\x1f\x44\x53\xc5\x1c\x56\xc0\xb4\x51\x8a\xb9\xde\xde\xd3\x0a\x64\xc4\xbe\x72\x3f\x1f\x7b\xac\x70\xd9\x92\x2b\x16\xb0\xb3\x3a\x56\x00\xc4\x62\x64\x35\x1c\xc3\x29\x47\xb6\x21\x48\x86\x8b\xc9\x04\x17\x6b\x29\x66\xe8\xcd\x91\x9f\x8a\xb0\x20\xff\x9b\xad\xa7\x13\x4a\x34\xa9\x17\x06\xb5\xa8\x99\xa3\x2b\xcc\x93\x04\xcd\x44\x35\x46\x68\x9f\xa8\xcd\xb5\xbb\x56\xb0\x6b\x96\x27\xab\xda\x44\x3d\xda\xcc\x46\x74\xc2\x51\xef\xbf\xc2\xbd\xf3\x9a\xe2\xf6\x06\xf7\x16\x8a\xec\xfa\xf5\xe1\xe7\x22\x00\x2e\x47\x0d\x52\x78\xa1\x28\xb4\xcb\xaa\xb2\x8d\xd1\x76\x51\x73\xd5\x3e\x0b\xce\xf8\x9c\xcc\x05\x91\x58\xf6\xfc\xe9\xbd\x3c\xcb\x91\xdb\x7a\x47\xb9\xa7\xb1\xe9\xf1\x95\x70\xc9\x67\xf1\xdc\x69\xb2\x7a\x96\xb2\x8e\xa0\x34\x8d\x07\x0c\x30\x74\x02\xf0\x6b\x7d\xea\x54\x48\xfd\x0e\x11\x5b\x2c\x25\x15\x16\x47\xd2\x15\xfb\x4c\x5b\x33\x6a\x58\x14\x09\xa2\xe5\xfb\x88\xcb\xd4\x2d\xa0\xc6\x5a\x32\x43\x6a\x07\x0f\x9d\x38\xf2\xd4\x93\x1e\xd7\xc0\x74\x83\x08\x36\x6e\xf6\xb7\xc2\x4b\x8c\xe9\x18\x60\x2b\x17\x7f\xa9\x4a\x05\x77\x48\x36\xc3\x48\x63\xd8\x82\x08\xd6\xa4\x76\x4a\xe2\xc2\x8e\x06\x6d\x46\xc3\x60\x69\x38\x24\x35\x95\x02\xe7\x86\x3a\xba\xfc\x91\xa8\x4b\xe3\x06\xaf\xe9\x9f\x72\x3b\x25\xd3\x86\x43\x93\xa8\xa3\x3a\xca\x64\xbc\xe2\xf7\x1f\x5d\x2d\x2a\xb0\xe8\xc8\x06\x9c\x86\x36\x3b\x61\x8e\x74\xdd\x9d\x1a\x06\xd5\xec\x26\xb1\xba\xc9\xec\x3f\xba\x3a\x93\xf1\xb1\x7e\xd0\x65\x48\xa5\xbb\x91\x65\xf7\x21\x6a\x42\x72\xcd\x77\x89\xb7\xb0\x06\x4a\x88\x0e\xc0\x21\x7a\xa7\x6d\xd2\x62\x13\x49\xd3\x8b\x9a\xbc\x85\x0b\x26\x34\x4b\xcc\xe1\xa9\x2a\xd3\x60\x58\xa3\xdc\x88\x76\xf4\x50\x27\xe3\x01\xdf\x5c\x99\x48\xb2\x6f\xae\xea\x97\xcc\x61\xef\x53\x67\x23\x6d\x41\x86\xb4\x5e\xe0\x3a\xba\x16\xb9\xcf\x43\x39\x45\x1c\xac\x4d\x9b\x04\xd7\x6a\xb5\xa8\x05\x2b\x72\xfe\xf4\x58\xd5\xe1\x80\xd7\x5c\xf9\x06\x42\xde\xd9\x2a\x13\x64\xe6\x06\x98\x20\x6d\xb4\xc6\x4c\x00\x15\x83\x68\xad\x56\xe3\x8a\xe5\xa8\xa7\xf2\x6a\x67\xe2\x54\x8f\x03\x8e\x3d\x0a\xc5\x71\xe8\x45\xb5\x36\x8d\xda\x3e\x97\x56\xcc\x76\x17\xd9\x20\x52\x4a\x50\x8c\x7d\x81\x71\x88\x8c\x0f\x6d\xda\x84\x99\x29\x34\x03\x4c\x8b\xef\xe7\x65\x3f\x46\x8c\x9c\x83\x58\x4e\xbd\x33\x64\xec\xd4\x4c\xcb\xa8\xa5\x47\xe1\x5a\x7d\x61\x40\xd8\x6a\x55\x46\xc8\xd9\xa4\x80\x0e\xdb\x2f\x5b\x51\x39\xf2\x93\x59\xa8\x9c\x23\x46\x98\xd2\x5f\xf5\x2e\x99\x61\xfa\x9e\x0b\xb2\x20\x88\x64\x85\xda\x02\x08\xe7\x03\xc6\x4f\x6b\x48\x8f\x83\x8c\x29\xbd\x52\x14\x31\xf3\x80\x5f\xf4\x9d\x35\x76\x23\x4f\x6c\x9c\x26\x98\xd3\x5b\xa6\x17\x51\xc6\x30\xcc\xb6\xfc\x8e\xb2\x46\x61\xc6\x0a\x3c\x32\xe6\x5f\x58\x9b\xe5\x67\x0c\xb3\xa2\x51\xc3\xac\xc0\xe8\x3f\x96\xc5\x35\x5a\x73\xeb\x98\xa5\x57\x6f\xea\x08\x46\xf6\x04\xe9\xcd\x4b\xde\x9a\x37\xb3\xaf\x50\x59\x6b\x41\x7c\x50\x8e\xb2\x20\x4a\x84\x92\x04\xc7\x9e\x1d\xef\x36\x4c\xa9\x33\xf0\x84\xe2\xdb\xf6\xd6\xf2\xf6\xed\x59\x43\x14\xcb\xda\x1d\x5b\x3d\x91\x17\x20\x09\xee\xe5\x8d\xf1\xda\x63\x8c\xf1\x7a\x4d\xd2\xf2\xda\xda\x18\xaf\x97\x35\xc6\xb3\x7f\xe2\x5e\xde\x18\xaf\x37\xd6\x18\xaf\x37\x1c\xf6\xf2\xc6\x78\xbd\xac\x31\x5e\xcf\x1b\x6c\xdd\x18\x2f\xc6\xa1\x31\xc6\xeb\x21\xdc\xb1\x8c\xf1\x7a\x39\x53\xb9\x9e\x36\xc6\xcb\xa4\x2f\xf6\x46\xc7\xbc\x63\x8c\xf1\x7a\x93\x8d\xf1\xf2\x2d\x14\xb3\xad\x40\xb1\x27\xba\xa7\x2e\x57\xa8\xd7\x13\x9b\x13\x31\x35\x4c\xc8\x1e\xdc\xb3\xd4\x59\x7f\x6a\x69\x24\x76\x94\xd5\x01\x0b\xa7\x55\xf7\xd2\x77\x2d\xbb\x66\xae\xcd\x8b\xe5\x04\xdb\x9e\x9c\x10\x22\x6c\xb2\x9c\xa0\x5a\x4e\x04\x5e\x34\xb5\x9c\x08\xc6\xca\x89\x60\x8c\x9c\x08\xf2\x72\x22\xc8\xf0\x4c\x30\xca\x33\xb4\x40\x4e\x64\xaf\x3a\xf4\xa4\x17\x63\xf6\xcc\xb1\x27\xa4\x35\x2e\xcb\x5a\xe3\x42\x1f\x63\x4f\x68\x15\xe1\xce\x66\xfb\x07\xa6\xb7\xef\x0f\xd3\x5b\xaf\x8d\xd9\x66\xe6\xb7\xd3\xce\x76\xa1\xf9\x83\x0a\x31\xa5\xfa\x91\x29\x34\xd5\x53\x0e\x1c\x6c\x47\x3a\xc4\x44\xa9\xe9\x4f\xcb\x96\xe4\x1e\x3e\xb3\x67\xa0\x1e\x49\x8a\x85\x08\x4d\x4f\x02\x40\xf9\x60\xc5\x42\xa5\xf8\x29\xc8\x14\xca\xc7\xb4\x42\x25\xf2\x82\xf7\x95\xf2\x51\x24\x54\xd2\x9b\x93\x88\x9c\x2d\x51\x5b\xf7\xc0\x44\x29\x11\xd1\x58\x25\x82\x7d\xa0\x44\xfc\x7f\x43\x89\x08\xbc\x1e\x58\xf5\xef\x54\x89\x90\xc7\xa1\xf2\xb9\x5e\x95\xd3\x1d\x6d\x6b\xee\xa3\x78\x29\x94\x1b\x1f\xc8\x89\xa9\xe4\x04\xf3\x16\xd6\x0c\x3f\xb3\x72\xb9\xe8\xb8\xa2\xd6\x17\x93\x25\x82\xb3\xdd\x72\x39\x9f\xe2\x6e\x65\x63\x93\xb2\xd4\x09\x0a\x9b\x9b\x82\x98\xa4\x40\x56\x08\x4a\xba\x23\xc1\xf4\x41\x38\xd2\xf7\x45\x38\xd2\xc0\xeb\x6c\x12\x92\x74\x6a\xc1\x34\x60\x61\xb5\x4b\x8b\xdf\x3d\x7c\x20\x92\xfe\x77\x8a\x24\x75\xb3\x36\x8d\x0c\x19\xb0\xf0\x71\x45\x0f\x69\xe7\xf9\x81\xf0\xf8\x40\x78\x4c\x23\x3c\x26\x1c\xba\xee\xe9\xad\x9f\xbe\x23\x69\xc2\x95\x7c\x75\xbe\x35\x23\xaf\x40\x83\xf8\xbf\x04\x56\x6a\x9f\x54\x2e\xbb\x2e\x31\x5e\x19\x10\xb2\xb3\x7b\x6b\x2f\xa4\x19\x1b\xe0\xae\x23\xb1\x8d\xc2\xa6\x23\xc6\xb6\xf6\x8d\x7b\x71\x6c\xbd\x73\xa1\x9b\x26\x28\xd7\x41\x99\x77\x30\x62\x32\x28\x7b\x04\x85\xb0\xa7\xcd\x90\x4e\x05\x51\x7f\xc0\x15\x5d\x3d\xae\xd3\x6c\x95\x05\x5e\xe8\xe8\xc2\xca\x08\xe5\xd9\x80\xf7\xb2\x1f\xfa\x8c\xb6\x49\x1c\x93\x8e\xae\x4a\xcb\x3b\xf5\x02\x5f\x9f\xec\x5a\xd1\xab\xf3\xe7\xc5\x1a\x2b\xb0\x94\x2e\x38\x13\xd6\xcd\xc8\xda\xd5\xcb\xfe\x01\x0b\x73\xa7\x4a\xa7\x46\xc4\xe5\x68\xa9\x8c\x3a\x66\x8a\x9b\xa9\x3a\x4a\x00\xe3\x9a\x2c\x43\x15\xe2\x2d\xb8\x46\x82\x90\x42\x3d\x92\x8c\xe8\x91\xf9\x14\x37\xd7\xdf\xbc\xaa\x98\xc1\x1e\xbc\x06\x64\xf0\x90\x5d\xb2\x06\x65\x6c\x8f\xac\x3c\xa6\x43\xf6\x60\xba\xc8\x5b\xc8\xe0\x62\x57\x3a\x82\xca\x28\x37\x48\x44\xf4\xf7\xfc\xa8\xe4\x78\xc3\x58\xaf\xe7\x79\x26\xbb\x12\x8e\xb0\xa7\x69\x36\x57\x6e\xac\x65\xc0\x14\xb3\x72\x6f\xe5\x20\x81\x1b\xd9\x67\x8e\x3d\x81\x49\xe6\x46\x57\x3e\xa5\x1a\xed\x47\x4c\x78\xfe\x4e\x3c\x26\x7b\xe8\xd3\x4b\xdd\x77\x17\x05\x1a\x77\x73\x02\xbe\x29\x55\xb4\x96\x07\x76\xe5\xa5\x87\xad\x47\x44\x8b\x82\xbd\x52\x67\x6b\x32\x2b\x6a\x90\x7c\x1a\x41\x09\xb2\x9f\x3a\x16\xf8\x5b\x8a\xb9\xcf\x96\x7d\x4e\x2c\x0b\xec\x39\x41\x08\x3f\xac\x2a\xb7\x0f\x59\xa1\xfe\x9f\xcb\x61\xb0\xb2\x42\x58\x9a\x7d\x5a\x2d\x18\x53\xec\xa7\xa6\x01\xda\xa1\x9c\xf8\x00\x37\xb2\x6b\xe6\x0e\xd5\xd6\x95\xa2\x31\xba\x12\x15\xba\x52\xa4\x75\x25\x9a\xd5\x95\xec\x9f\x98\xe6\x75\x25\x3a\x56\x57\xa2\xc3\x21\xcd\xeb\x4a\x34\xab\x2b\x51\x8f\x4d\xa3\x2b\x89\xe1\x30\x27\x69\x7a\x79\x1a\x0e\x59\x82\x30\x45\x38\xb0\x74\x25\x9a\xd3\x64\xa8\xd6\x95\x32\xe9\x8b\x74\xc2\xd5\x21\xa6\x93\x75\xa5\x7c\x0b\xe3\xbd\x5e\x51\xd1\x3d\x7d\x8d\xb4\x1b\x4e\xac\xa4\xd9\x04\xc4\xdf\xfd\xf8\x89\xa3\x4f\x3c\xea\xb3\xb8\x06\xcf\x23\xdc\xb5\xa0\xd3\x70\xce\x3e\xf3\xd1\xc3\x1f\xeb\x1c\xf2\x1d\xbc\x14\xd2\xf6\xe9\xc6\x83\x6b\x4e\xbc\xba\xb2\x44\xc3\xd8\x69\x34\x9d\xb2\xcf\x39\x13\x6c\x57\x86\xd7\xf1\x2d\xec\xc4\xdc\xe7\xd2\xf7\xa2\xc8\xd2\x9c\x9f\xc7\x4e\x27\x38\xe3\xb4\x70\x73\xfe\xdf\xf1\x7c\x0b\x37\x3f\x8c\x9b\x0f\x7f\x14\xd7\x5b\xb8\xd9\x7c\x78\x1f\xae\xe3\xa6\xa3\x2c\x71\x08\x73\x5a\xad\x96\x34\x1d\x33\xb9\xe6\xad\x5c\x83\xa8\x28\xdf\xfc\xbe\x16\x6e\xee\xc3\xce\xc9\x93\x51\xa9\x24\x5b\xf9\x28\xde\x97\x16\x92\xf1\xa1\x45\x7e\x93\x4b\xe6\x79\xb8\xd5\xc2\x4e\xcf\x8f\x0f\x9f\xf1\x43\xa7\xd1\xf5\xc3\x98\x60\x67\xd0\x3f\xe3\x33\xd9\x2f\xdb\x9b\xa0\x93\x71\x6d\xd6\x4a\x1e\xc4\x2b\x84\xfb\x8d\xb5\xd4\xae\xb1\x31\xed\x54\xad\xf5\x96\x62\x27\xd1\x76\x0f\x83\x71\xdb\x45\xd7\xa9\xaa\x52\x4e\xfa\xb0\x1b\xfc\x21\x05\xb9\xdf\x34\xb7\xb3\x34\xcb\xc9\xb6\xae\xe3\x55\xb3\xda\xbb\x92\x7d\x2b\xef\xbf\xaf\x76\x97\xf6\xad\xbc\x58\x85\xe5\x18\xe7\xd6\xe0\x4c\x57\x6a\xcb\x84\x3f\x2d\x13\x0e\xc9\xac\x32\x87\xcf\x96\x95\x59\x3d\x4a\x80\xaf\x5c\xe3\x68\x87\x7b\x6b\x2b\x83\x90\x07\xfd\x90\x34\xd2\xdc\x90\x84\x69\x74\xa8\xe7\x47\xcb\xf6\x37\x48\x4a\x66\x0a\xda\x87\x06\x4e\x48\x36\xc8\xb5\x2f\x7d\x7e\x26\x29\x77\xc3\x3b\xc2\x6c\x15\xe9\xf7\xc2\x4a\xd4\x2e\x39\x76\xa9\xed\x9d\x27\x37\x9e\x62\xab\xbc\x93\x8d\x32\xc2\xb9\xfa\xcd\x7c\xc4\xcd\xa8\x85\x37\x73\x1c\x54\x5c\x54\x2c\x0e\x26\x7d\xa4\x05\x6b\xce\xe3\x66\xb0\xc5\x36\xac\xc2\xb9\x56\xa8\xbd\xe8\x0e\x70\xea\xf1\xd8\x3c\x4a\x30\x2f\x6d\x42\x3c\x28\x30\x10\x1a\x3f\xd5\x77\x6b\x39\xde\x0d\xbf\x97\x92\x95\xe9\x64\x01\x4f\xfb\xcf\x7c\xfa\xb3\x9f\x8b\x3f\x3e\x46\xc0\x8f\x95\xeb\x8f\xe0\xe6\xc3\xff\x9e\x91\xcf\xca\x5d\xdf\x91\xe8\x69\xa1\x22\x1b\x11\x8d\x9b\xcd\xd4\x75\x8a\x43\xc2\x58\xec\x0c\x9b\x6b\xb9\xda\xf6\x61\xc7\x48\xef\x79\x10\xed\x20\xaf\x5b\xd8\x91\x7a\x36\xe1\x44\x8a\xe7\x56\x82\xf3\xe5\x47\xb1\xd1\xca\x51\x11\x1a\x05\xed\x8f\x2d\x8f\x1d\x98\xf4\x5b\xec\x91\xaa\xb1\x5e\x54\xa3\x76\x4d\x2c\x2b\x6c\x36\x9d\xe5\x41\xd0\x71\xb0\xa3\xd6\x9b\x47\x49\x97\x4a\xcf\x84\x4d\xe7\x43\xed\x01\x8b\x29\x6b\xcc\x7f\xc8\x51\x14\x69\x6d\xd2\x09\x49\x44\xf1\x6f\x7a\x42\xca\x85\x71\x4a\xea\xee\x46\x5f\xea\x1f\x72\x70\x73\xdf\x7f\xb4\xf6\xac\x2f\x5b\x4d\x1c\xaf\x13\x04\x51\x15\x3a\x8b\x9d\xa0\xbb\x4d\x4d\x20\xa3\x02\x8c\xbd\xec\xce\xaa\x00\xd3\x2c\xf1\x6a\x79\xd7\x3a\xfb\x4c\x91\xc3\x1b\xf5\xda\x10\xf3\x91\x65\x3e\xd2\xcb\x3c\x9b\x70\x88\x2c\x9d\xae\x5a\x4b\x05\x1b\xbb\xcc\xb3\x31\xcb\x3c\xcb\x2f\xf3\x2c\xb3\xcc\xb3\xd1\x65\x3e\x4a\x97\x79\x9c\xf3\x99\x6d\x36\xef\xc5\xcb\xac\x5a\xeb\xad\x15\x52\x3b\xc8\xd3\x07\x22\x6a\xfd\xcc\xea\x0b\x56\x36\xe3\xf6\x34\xa7\x41\x8c\xac\xbb\xba\x56\x7d\x24\x61\x09\xbf\xd4\xf3\xa2\x39\x8f\x90\x05\x32\x99\x86\x43\xe5\xe7\x10\x1a\x75\x82\x48\x1e\x2e\x38\x99\x22\x5d\xed\xea\x2f\xe7\x3d\xb0\xc0\x99\xea\x94\x34\x4a\x17\xc5\xf1\x54\x2a\x30\x23\xc8\xf1\xcc\x07\xd6\x04\xff\x2f\x59\x13\x4c\x54\x90\x28\xf6\x27\x29\x48\xc6\x35\x6d\xb5\x48\x3f\x92\x27\x54\xa4\x53\x5d\xf1\xfb\x71\xd5\x8f\x3a\xd5\x98\xe4\x8f\x78\x36\x7d\xbe\xa0\x49\x9f\x2d\x21\xfd\x29\x08\x6e\x36\xfe\xd8\xc4\xfe\x4b\x52\xd3\xba\x71\x52\x03\x90\xb8\x04\xe7\x8f\xaa\xa5\x1b\x52\x78\xc2\x58\xf4\x44\xd2\xf1\xb9\x50\xa4\xb4\x9f\x20\xe9\x19\xa0\xa4\x1f\x62\x94\xba\x01\x09\x3b\x25\x1a\x95\x22\x1a\x55\x65\xb0\x89\xc8\x72\xa8\xa2\x70\x71\x09\x4a\x64\x63\x8e\x58\x48\x11\xb2\x03\x81\xfc\xaf\xf4\x86\x1d\xe4\xcf\xdf\x45\x17\xe4\x73\xad\x99\xc8\x72\x2e\x93\x7a\xb6\x86\x54\xb3\xaa\xe6\x3f\x18\xcd\x6b\xe4\x0b\x6c\xb6\x2c\x37\xd9\xf0\x48\x1a\xce\xf9\x21\x50\x86\x3e\xe2\x87\xba\x3c\xed\xae\xce\x0d\x3c\x66\x12\x91\x35\x49\x83\x72\x39\xd0\x6e\x5c\x75\x23\x1e\x4b\x37\x77\x89\x3a\x0a\xb3\x5d\xbe\xfa\xf6\x2f\x4d\x8b\x71\x0e\x8b\x27\xbb\x06\xa7\xea\x5c\x50\xf4\x70\xcd\x96\x9c\x7a\x5b\x2c\x9d\xd0\x9d\x50\x13\xe6\xa8\xdf\x4f\x10\xf6\xb7\x58\x20\x49\x57\x31\xcb\x40\x44\x55\x40\x11\x70\x65\x6e\xb3\x0c\x27\x07\xb6\x57\x01\x41\x40\xee\xe9\x92\x3e\x94\xb4\xc9\xc8\x17\x79\xa3\x9e\xe4\xb6\xac\x82\x29\x22\xb4\x96\xb6\x98\x7a\x0a\x0e\xf4\x47\x7b\x23\x6c\xa1\x6a\x4a\x18\xdf\xbd\x49\x6e\x19\x33\x68\x82\x77\x31\x77\x0b\x88\xa2\xca\xfc\x4c\x9a\x49\x63\x05\x0f\x8b\x02\xf3\xd6\xdc\x20\x34\x23\xb8\xc4\x70\x85\x0d\xbb\x91\xdd\x83\x3c\x6e\xca\x88\x66\x0b\x88\xcd\x44\xd5\x2a\xde\x3d\xcc\x2c\x7f\xeb\x71\x91\xcc\x66\x41\xb4\x5c\xed\x46\xa9\x15\x86\x4e\x6a\xf7\x7c\x56\xf5\xa7\x3e\x86\xb7\x1c\xfb\x37\x89\xe7\x38\x56\x58\xa3\x12\xa9\x89\xca\x0e\x4a\x17\x1b\xdb\xb1\x34\x95\x08\x1d\x92\x55\x78\xbc\xf8\xfc\x9e\x15\x9e\xdf\x73\x7b\xcf\x5f\xe0\x6d\x7e\x93\xde\xb7\x69\x87\xec\x2a\x09\x0e\xd1\x0e\xd9\x05\x32\xa8\x6a\xf6\x8c\x14\x82\x0a\x7d\x1a\x44\x7c\xf7\x68\x41\x3b\xe4\x69\x51\xe3\x4e\x89\x91\xd6\xb3\x77\xd4\x88\xda\xdb\x23\x83\x10\xf8\x36\x11\x40\xa9\x14\xba\x8b\xb7\x40\x2a\x1e\xc7\x8e\xb3\x23\x62\x08\xcc\xf6\x8a\x0e\x62\xa5\xab\x9e\x0d\x78\x6f\x5b\x1c\x21\x34\x05\x6f\x76\xbe\x05\xfe\x1b\x67\xe7\xa5\x5b\x8b\x72\x59\x3f\x4d\x0d\x30\x35\xf7\x6a\x33\xb4\x6a\xde\xd1\xe3\xc0\x63\x8b\xa4\xc6\xe9\x13\xf4\x2c\x61\x87\x7c\xa9\x9d\xc3\x23\x77\x9e\x4d\xc7\x14\x35\x48\xfa\x11\x53\xb1\xaf\x96\xde\x4d\x85\xbc\xf4\x3c\x8f\xa6\xce\x47\xb7\x4d\xf4\xc3\x51\x27\x96\x77\xcb\x7b\x45\xf6\x17\x06\x5b\x78\xed\x5d\xc0\x7e\x82\xcc\x9a\x98\x07\xf6\x81\x4f\xeb\xf9\x19\x38\x02\x27\xb5\xb8\x17\x74\xb9\x9b\x1a\x9d\xd4\xc4\x2e\x68\xd5\x25\xde\x02\x91\x6e\xb0\x77\x40\x2b\x89\xfb\x5e\x51\xaa\xcb\xe8\x4a\x2a\xc6\x77\x3e\x61\xb5\x2f\x16\x51\x2d\xc8\x60\xa5\xc3\x6d\x9f\x20\x8f\x5b\x75\xed\x2d\x59\x8c\x48\xdf\x5d\xba\x80\x38\xde\x15\xc2\x40\x65\x7b\x45\x99\x1e\x5f\x09\xab\xb1\xdf\xdd\xc3\x28\x55\x53\x5a\x1e\x18\xfb\xaf\x11\xc3\x81\x99\x69\x3b\x17\x44\xed\x70\xd0\x21\xdb\x92\x1c\x45\xd2\x1a\x50\x2a\x97\xb9\x74\x4f\xca\x16\xa5\x64\x9d\x52\x34\xa3\x86\xce\x6d\xbe\x4b\x57\xb6\xdb\xe6\x97\x23\xba\x77\x7b\xc5\x2a\x12\xed\x2a\xdd\x4e\x6c\xd1\x51\x6a\x56\x8b\xa8\x39\x35\x21\x77\x91\x86\xb2\x9a\xbd\x22\x61\xe8\xc7\xfc\x5f\x40\x47\xdb\xcf\x6e\x01\x2d\x33\x9f\x77\x46\xcf\x27\xd2\xaa\xf6\x8a\xa6\x11\xe5\xff\x0a\x05\x21\xa6\x2b\x44\xea\x07\xb3\x3b\xd3\x0f\x9e\xa4\x7c\x6f\x55\x84\xbe\xdf\x11\x7a\xec\xf6\xf7\x34\x9e\x53\x72\x30\xf3\xea\x86\x07\x49\xc5\x91\x7e\x20\x5d\x5e\x71\x1c\x04\x0e\x97\xea\x2a\xba\xcf\x7e\x70\xe4\x74\x80\xed\x47\x51\xc5\xe3\x33\x90\xb0\xa0\xfc\x5b\x47\xb5\x78\xb0\xa4\x70\x73\xeb\x98\xa5\x0e\x55\x77\xc0\x86\x4f\xfb\x9d\xc3\x51\x67\x2f\x29\x1a\x73\x7f\xfa\x88\x9c\xbb\x4b\x53\x8f\x57\xa2\x49\x44\x85\x4f\x55\x86\x01\xdc\x2d\x22\x1f\x17\xbd\xde\x2b\x32\x33\xd2\x27\x3b\xd9\x8b\x1b\xea\x32\xcf\x71\x6c\x4f\x6c\xfb\xa3\x03\x5c\xba\x5f\x63\x95\xd4\xc8\x91\x6d\x9f\x30\xc7\x24\xa2\x7b\x48\x96\xd0\x6f\x93\xaa\x1f\x86\x45\x66\xef\x9b\x16\x9c\xfe\x12\xa2\x49\x30\xc3\x91\xa0\x65\xa0\x96\x20\x2b\xa2\x9f\xe9\xb9\xa8\x12\xe9\xac\x38\xc0\xb3\xf5\xd6\x0e\x84\xa3\xae\xef\x60\x18\x7a\x6c\x72\xe4\x94\x2c\x35\xd9\x26\x61\x35\x36\x27\xca\xb6\xb9\x0c\x0b\xee\x52\x41\x54\x35\x95\xe4\x0d\x4b\x36\x08\x01\xf5\xb8\x8c\x28\x33\x1c\x06\xe0\x21\x57\x4c\xf7\x72\xd9\x25\x15\xcf\x59\x76\x10\x8e\x34\x1c\x38\xd2\x16\x32\x8d\x50\x23\xdd\x05\x5b\xc7\x29\xca\x75\x24\xc5\x6c\xe7\x64\xde\x2b\x8e\x95\x57\x8d\x3b\x99\xc7\x98\x81\x9c\x34\x67\xf5\x5e\x1a\x67\x64\x11\x1e\x9a\x70\xa1\xdc\x68\x10\xb3\x1d\xe9\x35\xc7\x45\x2d\x7b\x46\x9f\x7e\x18\xec\x68\x2d\x71\xec\x13\x37\xe5\x7b\x7d\x27\x2a\xca\x71\x51\xc3\x9e\x75\x5e\x2c\x29\xbb\x7b\xc8\x36\xaa\x20\xab\x10\x21\xd3\x1d\xa8\xd5\x51\x43\x65\x4f\x0f\xd5\xea\x3b\x53\x92\xe5\xaa\xb9\xa7\x07\x68\x46\x19\xb8\xbf\xb3\xce\xa8\x1c\x6a\xe6\xa5\x3f\x77\x3a\xfb\xa0\xa6\xbd\xa2\x17\xa7\xd5\xb6\xbf\x42\xc2\x6a\xdb\x8f\xb7\x2d\xa9\xec\x49\x98\x65\x35\x1d\x0e\xa1\xe4\x48\xff\x7c\x70\x18\x2e\x4d\x68\x16\x49\xe3\xf9\x07\xd6\xcc\xdd\x51\x1d\xd5\x38\x7d\xa6\xdf\x87\xa2\x89\xf8\x06\xc1\x8d\x93\xe7\xc1\x03\xee\x4e\x4e\xd0\x4f\xd0\x43\xa2\xab\xa2\xfe\x3d\x24\xef\x69\xb2\xe4\x2f\xdd\x7f\xf2\x2a\xf2\x54\x77\x46\x9f\x4f\x0a\x5c\xf7\x98\x3e\xa1\xe8\xcf\xfd\xa1\xcf\x4e\x48\x61\xaa\xd9\x43\x52\xf4\xfd\xb8\xed\xef\xd1\x54\x24\xde\xc2\x9e\x4f\xbf\xa7\x65\xff\xf6\x98\xa8\x31\x89\x38\x89\xda\xe4\x3e\x91\xd5\xb8\x34\x77\x9f\x3b\x19\x3f\x74\xf2\xec\xb0\x59\x9b\x5d\x6c\x49\x10\xcd\x2d\x63\xe2\x2d\x90\x2c\x65\x77\x44\xc1\xe3\xba\x33\x7b\x4d\xc3\xc8\x3f\x7d\xbf\x08\x38\x22\xc3\x4e\xed\x8c\xc9\x8e\x0b\x5c\xf7\x98\x3e\x3c\xe0\xe1\x1e\xd0\x67\xfb\xf3\xb6\xb4\x33\x9a\x9e\x10\xfd\xdb\x63\x9a\x0e\x44\xa7\x76\x91\xa6\x36\x91\x76\x40\x0a\x53\xcd\x9e\x91\x82\x05\x2b\x3b\x39\xc6\xcc\xda\x24\x40\xfc\x85\xca\xb0\x79\x32\x3e\x39\x78\xfc\xf0\xe3\x8f\x9f\x3c\x77\xb0\xde\xaa\x3c\x30\xb7\xbc\x33\xfb\x84\x13\x2c\x58\xd9\xc3\xa3\x48\x49\x96\x1d\x9d\x45\x16\x12\xe6\xb9\x1c\x59\x76\x83\x2a\x7b\x7a\x76\x28\xe8\xb2\x2b\x13\x86\x05\x2b\x3b\x9a\x29\x2c\x58\xd9\xed\x3e\xaf\x86\xa4\x0a\x51\xd1\xe6\x00\x10\x3d\x5f\x0d\x0b\xfd\x37\x9b\x08\x6a\xd3\x5b\x1f\x9b\x38\xbf\x54\x76\xdc\xf2\x84\x50\x2e\x3f\x4a\x69\x48\x7c\x41\xc6\x5d\xb3\xb0\x8d\x0a\xde\x80\x2c\x13\x5e\x92\x5d\x8a\x5d\xfd\x76\x71\xad\x4f\x95\xb3\x04\x3f\x6c\x10\x19\x66\xb1\xd3\xe0\x49\xfa\xa4\x40\xef\x52\x9b\x2d\x70\x9e\x5d\xab\xd5\xe4\x7d\x4f\xad\x1b\x84\x5c\x9e\x12\x62\xde\x82\xe5\x03\xa2\xb3\xaa\x38\xaf\x2e\xd1\x5b\xb3\x26\xc1\xbc\x85\xbc\x85\xe6\x98\xa8\x70\x44\xd4\x81\x10\x4a\x62\xc2\x8f\x2b\xf4\xac\xb7\x95\xca\xab\x01\x0d\x3b\xea\xd3\x70\x18\x91\xb3\xa5\xe3\x84\xcf\x90\xd4\xfe\xbf\x49\xc4\xc6\xda\x78\x62\x77\x9c\x19\x56\x2e\xb3\x1a\xdc\x5d\xbb\xce\x6c\xb0\x22\x2d\xca\x23\xee\xe8\xa8\x98\x69\x02\xb6\xc3\xb9\xd9\x39\x75\x2c\x37\x6f\x02\xda\x96\xf1\x70\x4d\x52\xb6\x16\x13\x6e\x8d\x1a\xc3\x11\x92\x6e\x1b\xc0\x10\x55\xfc\x02\xb4\x89\x7e\x73\x91\xad\x80\x91\x15\x7a\xc6\x1a\x79\xe3\xd8\xc1\x90\xc0\xd3\x14\x70\x09\x10\x9e\x34\xeb\x2d\x84\x92\x4e\xd0\x39\x46\xda\x24\x38\x43\x0e\xc2\x53\x1e\x78\x1f\x9a\x92\x56\xfd\x94\x70\xc6\xc6\xb3\xe0\x88\x97\x93\x98\x57\xcf\xfa\x01\x17\x73\x61\x69\x10\x84\x1d\xfd\xab\x68\x4a\xd8\x99\x0b\x13\xe7\x22\x4a\xfb\x76\xca\xfd\xf4\xfa\x62\x4b\xa6\xfa\x8c\xe5\x06\xd3\xf8\x56\x91\x01\x87\x27\x77\x79\x6c\x78\xe8\x4c\x2e\xf5\xb7\xba\xe2\x47\xfe\xb2\x20\x4d\x51\x1e\xbb\xd7\x85\x19\xb2\xd4\x1d\xd7\x4c\xb5\x4b\x59\xb5\xcf\xe8\x4a\x10\x17\xf8\xcc\x51\xfe\x17\xee\x53\x44\xfb\xf4\x69\xed\x94\x21\xed\xa1\x40\x32\xa9\x56\xfb\xc9\xee\x94\xf5\xa6\x45\x26\xd6\xbc\x4c\xf8\xb3\xc0\x8c\x53\xd6\x9c\x16\x99\x58\xf3\x29\x46\xa4\x97\x91\x29\x6b\x55\xd9\x37\xc3\xf5\x69\x12\x75\x82\x68\x59\xb5\x7f\x9c\xfb\x9c\x6c\x05\xed\xd1\xd2\x13\xdb\xeb\xf9\x71\xa6\xc4\xf4\x24\x1a\x29\x39\xb1\x9d\x13\x24\xd6\x14\x9d\xb2\x01\x33\x39\x27\x56\x2b\xe7\xca\x96\xea\x8d\xa6\xaa\x57\xcc\xb0\xc7\x29\x7b\x5a\xcf\xaf\xe9\xaa\x0e\xac\xaa\x37\x11\x27\x23\xf2\x6f\xcf\xcc\xc5\x26\x3a\xbf\xd2\x2b\x84\x7a\x0f\x93\x2c\x91\xe5\x20\x3a\x18\xaf\x46\xed\xec\xa3\xc7\x84\x44\x1d\x48\x4e\x04\xfe\xcf\x44\x3c\x08\xad\xc7\x8b\x49\x87\x2c\x0d\x96\x8f\x44\xdd\xd4\x71\x54\xb3\x95\x48\xe6\x17\x45\x36\x93\xb5\x63\xe8\x32\x8d\xc4\xbd\x6f\xf1\xf8\x2d\x7f\x8d\xcc\xab\xcf\x58\x8f\xae\x52\x8e\xad\x54\x92\xe9\x5c\x8b\x05\xf1\x31\x2d\xb7\x48\xc7\x9b\x9d\x57\x8b\x7a\xc0\xc9\x8a\x5a\xcf\x8f\xfa\xfd\xd1\x77\x49\x11\x39\xc7\x4f\xd0\xd3\x24\xf2\xf8\x70\x18\x25\x79\xa7\x0f\x76\x95\xc3\xa1\x2b\x2f\x91\x21\x8f\x72\x11\xa5\x75\x87\x6c\xdb\x75\x64\x8f\xb2\x0e\x2c\x6a\x9a\x72\x11\x3c\x89\x53\xd1\x42\xa1\x49\x0b\xe1\xd1\xa7\x6e\x3a\x12\x60\x5a\x6d\xa9\xed\x87\x21\xe9\x94\xba\x94\x95\x1e\x58\x23\x89\x0c\x7c\x1f\xf0\x52\x10\x97\xfc\x90\x11\xbf\xb3\x5a\xea\x2b\x41\x52\x7b\x1e\x69\x0a\x9b\x8a\x32\x4e\x1e\x55\x8b\xea\x31\x8b\xd6\x60\xfd\xf6\x69\x5b\x66\xc8\x84\x04\x87\xfe\x12\x09\x1b\x5c\x8c\x60\xca\xac\x3a\x9e\xfd\x14\xb8\x43\x91\x09\x98\x47\x94\x97\xb4\x5b\xaa\x30\x83\xbf\x55\x7d\xaa\xea\x8d\x4e\x92\xd4\xe3\x98\xee\x54\xf0\x79\x52\x34\x6d\xc0\xa3\x98\xca\xa5\xbc\xf9\xb9\x28\x9d\x4c\xd6\xc7\x76\x48\x7c\xe6\xa2\xcd\xa7\xd7\x6a\x9f\xa4\x0a\x8d\x3d\x63\xd0\xda\xa8\x39\xe8\x64\xc5\x63\xb3\xe9\x39\x41\xc5\xbb\xaf\x1e\x14\x67\x8c\xa2\xc7\x93\x19\xf5\xa0\x0d\x74\x3d\x47\xe3\x0e\x68\x6d\x26\xaa\xf3\x3a\xdd\x7d\x13\xd4\x30\xbf\x32\xfd\xe1\x8a\xdd\xb5\xc3\x17\x94\x60\xfb\x25\x76\x2e\x27\xf0\x9b\x76\xec\x82\x89\xa5\xc6\x78\x23\xcb\x95\x64\x2d\x8b\xa3\x30\xd1\xfa\x89\x9d\x95\x1b\xae\x52\xb5\x8d\x6a\x17\xd2\x92\x64\x44\x17\xf0\x22\x63\xec\xa7\x25\x9a\xbd\x01\x06\x23\x8d\x35\x3d\x6f\x1a\x75\xac\xa9\xdd\x58\x4b\x92\xf4\xb9\x2b\xec\x8e\xb8\xb7\xa0\x1f\xd6\x5a\x13\x09\xad\x91\x9a\x2e\x5f\xa9\xcc\x40\xfc\x6e\x6b\x0a\xcd\x90\x9a\xae\xb5\xc9\x25\x49\x5a\x1e\x1b\x0e\x67\xeb\x89\x14\x0b\x85\x12\xdc\x45\x50\xe5\x42\x3d\xd1\xa1\x8f\x49\xcc\xcb\xe5\x14\x36\xc3\xa4\x7a\x2a\x9f\xcb\xcf\x46\x2e\x2a\x64\xa3\x73\xbc\xba\x42\xfc\x78\xc0\x08\x4b\x1f\x34\x67\x92\xff\x35\x76\xe2\xf0\xa8\x1f\x22\x81\x05\x51\x60\x84\xc9\xa9\x22\x27\x10\x2a\x9e\xad\x1f\x9d\xf1\x63\xaf\x43\xdb\x32\x59\x87\xe2\x3c\xac\xb6\xac\xae\xa3\x3e\x43\x10\xff\x36\x3f\xe7\x59\xa5\x04\xf3\x1c\xa2\x91\xe8\xbb\xeb\xec\xeb\x38\x28\xc1\x67\x83\x0e\xef\x09\x49\xa0\xde\x93\xaf\xa5\x21\x1f\x5d\xa8\xa1\xd6\xa5\x11\xf7\x78\x5a\x65\x4d\xd3\xed\x84\xa8\x87\xa0\x9a\xac\x23\xc1\x61\x10\x11\xed\x79\x0e\x2a\x1b\xa9\xc5\x04\x59\x02\x1b\x8e\xb9\x93\xd1\x1c\xc2\x81\x09\xef\x6b\x6c\xd8\xa8\x57\xdf\x4f\x0f\x98\xa8\xbf\x14\x22\x89\x12\x2f\x6a\xd2\xd6\x4c\xd0\x75\x1d\x67\xd6\xf3\x8c\x63\x62\x62\x1d\x9f\xe3\x48\x86\x0c\xae\xcb\xca\xf6\xd3\x03\xcc\xb8\x66\xb5\xeb\x29\xec\x0e\x6b\xd2\x56\x45\x1e\xc1\xcb\x5e\xcd\x44\x15\x8f\xe0\x68\x41\xd0\x23\xa8\x54\x70\xe4\x11\x94\x28\xef\x1f\x63\x8b\x5b\x45\xfd\x4c\x51\x1f\x25\x60\xe5\x14\x24\xb8\x1b\x70\x51\xe4\xb8\x3c\xba\xb0\x88\xa6\xe8\x23\x6b\x87\xc1\x61\x48\xbb\xf3\x32\x84\xac\xad\xf8\xbc\xdd\x73\xe7\x4e\x76\x2a\x73\xa8\x59\x6f\xc1\x74\x3d\xea\xf3\x5e\xad\x1b\x52\xca\x5c\x19\x1a\xf7\xf1\x90\xfa\xdc\x0d\xd0\x43\x7c\x2e\x12\xdb\xeb\xc9\xee\x0a\x39\x1b\xf0\xde\x88\x33\x6f\x3f\x7b\x22\x8d\x0b\x33\x83\xcf\x4a\x91\xd6\xa6\xd1\x19\xc2\x36\x73\x96\x94\x3d\x8b\x83\x61\x67\x5e\x5d\x10\x19\x86\x9d\x1d\x88\xf6\xb3\x4a\x05\x09\xc1\x33\xef\x79\x79\xf7\xd3\x4d\xd6\x4a\x63\x14\x37\x99\x21\x43\xc6\x79\xef\x76\x8e\xf0\xfc\xa8\xb3\xbb\xd6\x79\xc5\xa4\x95\x36\xde\xdb\x38\xc3\xb5\x9e\x92\x34\xeb\x2d\xcf\xf3\x48\x73\x7b\xfd\x94\x08\xec\xee\xe1\x6d\x71\x4f\x97\xb7\x77\x78\x8f\x79\xcb\x72\xa6\xc0\xc4\x62\xd4\x26\x4f\x0e\x44\x43\xe5\xb2\xeb\x44\x12\x72\x66\xad\xa3\x5b\x97\x78\xea\xbb\x3c\xa9\x1b\xc9\xa1\x02\xd8\xea\x1c\x1c\x21\x84\xc9\x02\xdf\x0e\xe5\x96\x77\xf9\x9c\x7f\x1c\xd9\xb6\x77\x27\xb6\x27\x74\xf3\xb6\x49\xb8\x5d\xbe\x50\x2b\xa6\x5c\x10\x57\x7d\xc6\xfc\xa9\x43\x06\x67\x67\x17\x88\x23\x69\x22\x96\x8a\x23\x7e\x80\xed\xe7\x96\x38\xd2\xee\x9f\x62\x15\xcf\x9b\x34\xb9\x11\x47\xc6\x44\x6f\xb6\xbe\x1d\x22\xe9\x2a\xf7\x88\x50\x64\xa5\xcf\xf7\x22\xb6\xf2\x16\x1e\xcb\x35\xad\x87\x89\x40\xe5\xc3\x02\x4d\x77\x0a\xb7\xbb\xe3\x3b\xba\x4d\x79\xab\x6e\x4c\x46\xf0\x11\xb5\xc9\x95\x6d\x7b\x43\x7c\x78\xaf\x84\x6f\xf8\xfe\x15\xbe\x07\xb6\x25\x43\xc2\x3d\x11\xbe\xe1\xfb\x58\xf8\x1e\xd8\x9e\xf0\x0d\xf7\x46\xf8\x9a\xf7\x6b\x3b\xd6\x6d\x66\xb7\xaf\xdb\x44\xfa\x15\x9a\xea\xd0\x1e\x75\xfb\x7d\xa1\x29\xd7\x27\x6a\xca\x3b\x5c\x9a\x22\xca\xf7\x42\x35\x2e\x8e\x1e\xf4\x3e\x23\xe5\xee\x6e\x3a\x28\xdb\x0b\xc2\x9e\xdb\x0b\xca\x5a\xaf\xa8\x2c\xc2\xd5\x5b\x68\x76\x94\x9c\xf3\xdb\x7b\x4d\x75\xee\xfe\x92\xab\x88\x02\x7b\x1b\x7f\xc1\x3c\xd4\x85\x93\x2f\xe5\x85\xcb\x09\xe2\x13\x02\xab\x55\x07\xc9\x53\x90\x25\x65\xab\x92\xda\xaf\xa4\x6e\xf3\x66\x72\x0a\x8b\x56\x53\xd1\x62\x7d\xd6\xf3\x32\x75\x2a\xbe\x75\x50\x63\x76\xb6\x28\xb0\xc3\x19\x3f\x0c\x3a\x3e\xa7\x2c\x9e\x6b\xd3\x30\x24\x12\xc7\x22\x2e\xb2\x32\x2a\x02\xea\x84\x80\x46\x55\xc2\x18\xdd\x93\x03\x68\xb1\xf8\xaa\x53\x94\xb4\x8f\x0c\x3b\x16\xe6\x92\x72\x72\x6e\x47\xe5\xf2\x6c\x9e\x3c\xa8\x88\x7b\xed\xe2\x58\x34\x31\x03\x9b\x80\x08\xc6\x67\xb3\x1a\xe2\x20\x5a\x1e\x84\x3e\xd3\xe5\x8d\x10\xde\x84\xde\x51\x37\x60\x2b\xfe\xfb\x9c\xe2\x38\xd2\xfe\x7e\xb2\x34\x07\x5a\x67\x12\xfd\x30\xa4\x67\x1f\x0d\xfd\xe8\xb4\x83\x52\xda\x81\x76\x0f\xab\x54\x5d\x12\x38\xaf\x6b\xa7\x15\x45\x38\x40\x63\x87\xca\xa6\xd9\x16\x88\xdd\xf1\x79\xe1\x75\xca\xe6\x44\x36\x01\x96\xc8\x0b\x83\x80\x49\xe3\x35\x41\xb9\x3d\xb1\xa8\x01\x97\x97\xd1\xc8\x25\x9a\x73\x94\xae\x90\x88\x7f\xe2\x78\x29\x88\x4b\x1a\x35\xe9\xf2\x52\xe0\xc0\x7b\xa4\xf4\x98\xcf\x49\xc9\xf4\xae\xe6\x20\xfd\x94\xd3\x90\xf9\xd9\x80\xf7\x20\xfe\x0f\xc3\x8e\xec\xec\xe3\x54\xd0\xd6\xc1\xce\xd1\xa3\x47\x4b\x8f\x51\x5c\xfa\xcc\x67\x3e\xf3\x19\x47\x07\xff\x4a\x8b\xea\xee\x04\x24\x76\x19\x6e\x3a\x5d\x28\xd5\x67\xa4\x1d\xc4\x72\x68\x6c\x56\x68\xa9\xb6\x63\xcf\xaf\xa9\xac\x38\xf4\xfc\x9a\xc9\x8c\x07\x9e\x5f\x4b\xb3\xcb\xc6\xda\x63\x1b\x5b\x52\xde\xab\x05\x03\x3e\xc5\x1e\x85\x1f\x7e\x57\x59\xf3\x88\xc4\x83\x12\xd6\x8d\x76\x70\xcf\x6b\xd7\x54\x21\xdc\xf5\xda\xb5\xb4\x18\xee\x7b\xed\x9a\x2c\x88\x57\xf4\x07\x59\x54\x70\xe7\x60\x13\xee\x8d\xd1\x5a\xc7\x0b\x5c\x82\x63\x3c\x5b\x57\x02\x43\xfe\x42\xb5\x20\xfe\x94\x20\xba\x3b\x86\x81\x15\x1f\x1a\x29\xd3\xd9\x2c\xff\x59\x46\xa3\x65\x31\x96\x30\x34\xa2\x68\x42\xc2\x98\x94\x82\xae\x2b\x71\x40\x78\xf3\x6a\xb2\xcd\xf6\xca\x65\xb7\xe7\x05\x6e\x0f\xc7\xba\xb0\xa2\x88\xdb\xc3\xa1\x99\x79\xa5\x34\x26\x0e\xc3\x86\xec\x3d\x3d\x84\x2e\x45\x08\xe7\x1a\x81\x3c\xd0\x4c\xb7\x5c\x76\xbb\x5e\xe0\x76\x4d\x33\xc7\xfd\x15\x02\xe4\x77\xbb\x63\x1b\xb3\x87\xb6\x3b\xa1\x41\x3b\x1f\x34\xda\x2f\x97\xdd\xbe\x17\xb8\x7d\xd3\xa8\x1c\x54\xb7\x3f\xb6\x35\xcd\x3b\xfd\x09\x0d\xe9\x2c\xd0\xc6\x4a\xb9\xec\xae\x78\x81\xbb\x92\xeb\x98\x6a\x69\x65\x62\xbf\x14\x77\xe2\x95\x4d\xba\x75\xd0\x6a\xd1\x48\x38\x4c\x6a\xf2\xec\x5f\xf0\x83\x17\xa4\x2e\x35\x33\x71\xcc\x9c\x15\x29\x19\x1c\x94\x2a\x6e\x81\x0b\x0f\x4d\x8d\x69\x6c\x44\xcf\x3a\x9e\xe7\x91\xe1\x30\xcf\xe7\x8b\x91\x8b\x1a\x90\xf8\x24\x8d\x88\xcb\x45\x9a\x10\x3d\xa2\x5d\x31\x13\x1a\x20\xf2\x36\x91\xb9\x31\x88\xd0\x82\xf8\x76\x59\x69\xba\xed\x35\xef\x3e\xc9\x5d\x8e\x29\xf6\xc7\xca\x5e\x49\x9d\xea\x63\x3e\xf7\xc7\x4a\xdf\xe3\x2a\x6f\x56\x02\x4b\x5f\xce\x5e\xe0\xfa\x4a\x36\x85\x5e\x5c\xeb\xfb\xbc\x87\x07\x5e\x5c\x3b\x4d\x56\xb1\x25\xf5\x5c\x8a\x43\x94\x59\x27\xe5\x50\xb4\x51\xb9\xdc\x2e\x81\xef\x62\xda\x2d\x45\x35\xd9\x4e\x5c\x2e\xb7\xa5\xbd\xc5\xc0\x12\x00\x36\x53\x74\x62\x15\xad\x00\x73\x6b\xa1\x6d\xd7\x24\x4d\xe3\xc7\x29\x73\x07\x08\x3b\xa1\x1f\x73\x4d\xbf\x15\x12\xc7\xfe\x32\x71\x50\x96\xfd\x84\x3c\xf6\x79\xef\x60\xd4\xf9\x24\x59\xcd\xb2\xa0\xcd\xc1\x6a\x30\x3b\x3e\xf7\x73\x6c\x68\x2c\x08\xe0\x4e\xaf\xe6\x20\xcc\x3c\x5e\xeb\xd3\xbe\x6b\x79\x62\xee\x0f\xe2\x9e\xab\xd6\xa4\xd8\x41\x78\x4d\x90\xa9\xc1\xf5\x43\x18\x51\xe6\x34\x59\x6d\xb0\x22\x5b\x0c\x8b\x83\xc8\xb9\x76\x38\x88\xdf\xd7\xda\x55\x81\x6e\x15\x61\x27\x88\x34\xb3\xd0\xc2\x65\x30\xc2\x4d\x87\x29\x3f\xcb\x05\xcb\xac\xef\xd1\x9a\xfc\x2a\xb8\x87\x5a\x0b\xeb\x26\x4b\x5a\x50\x2e\x2b\xcf\x8b\xe6\xe9\xf8\x38\x6d\xd7\xa2\xab\xf4\x7a\x1b\x74\x5d\xbf\x5c\xde\xe7\x79\x9e\x0f\x1e\x5b\xd6\x14\xab\x33\xd7\xc7\xfb\x14\x5a\x81\x17\x37\xeb\x2d\x4c\xbd\xb8\x39\xdf\x4a\x15\x47\xb1\xb3\x91\x4d\x99\x33\x77\x9d\x12\x18\x05\x72\x6c\x16\x8a\xca\xe5\xe0\x80\xd8\x45\x91\x03\x1e\x9d\x0a\xd7\xc4\x30\xb3\x3e\x22\xca\x8e\x70\xd0\x75\xa5\xa2\x3f\xaa\xf0\x97\x24\x39\x8f\xcb\x10\x2c\xb5\x80\x13\x26\x58\xa7\x14\x40\xd0\x35\x2b\x63\xb6\x46\xd5\x4a\xb3\x85\x23\x6f\xb6\x2e\x7d\x6c\x60\x08\x65\x39\xc3\xd9\xaa\x3c\xa8\xd0\xa1\x55\x3d\xd2\xcc\xd5\xdf\x72\xd1\xfe\x59\x37\xf2\x5c\xdf\x53\x66\x63\x2e\x42\xb5\x0e\x8d\x08\x2a\x97\x5d\xa6\x26\x89\xaf\x6c\x4c\x10\x9e\xe5\xc3\x21\x5c\x87\x4b\x2f\x4f\xfb\x45\x93\x68\x7f\xd2\x96\x17\xca\x21\x5a\x0b\x04\x0a\xd4\x0b\x93\x6e\x10\xf9\x61\xb8\xba\x26\x10\x98\x8d\xca\xe5\xb8\xa6\x70\x4f\x21\x17\x99\x4c\x82\x35\xb4\x08\xa4\xe6\x96\x9b\x49\x27\xe9\x68\xa6\xd0\x05\xfb\x91\x48\xce\xa5\x92\x76\xc5\x2e\xe4\xa2\x8c\xd3\x35\x68\xf3\x01\x23\xca\xfb\x3a\x57\xd6\x9e\xa5\xd4\x0d\xfb\xe4\xb9\x0c\x3a\xe6\xfb\x62\x22\x33\x22\x77\x7b\x87\xcf\xf5\x19\x89\x05\x73\x41\x9c\xd1\xe2\x49\x6e\x42\xf5\x15\x4d\xe6\x40\x05\x5a\x23\xe7\x1c\xec\x08\xbe\x96\x61\x5a\x64\x50\x83\xf1\xb3\x5b\x64\xc7\xb1\x47\xe5\x44\x90\x8c\x1c\xca\x78\x75\xb2\x98\x8e\x62\x66\x1c\x56\x87\xe5\x72\xb8\x15\x51\x10\x97\xcb\xb3\x7e\xb9\x1c\x35\xe3\x56\xb9\xec\xfa\x9e\x00\xd0\x8c\x43\x56\xfc\x20\x14\x2a\x43\x2c\x53\x3d\x2f\xaa\xc9\x24\xf9\x6b\xd4\x44\x4c\x7f\xad\xc5\x74\xc0\xda\x24\x73\x1e\x9b\xed\x3f\xc1\x4d\xd5\xcd\x27\x69\x74\x22\xec\x38\xd8\x59\x09\x04\xf0\x84\x3a\xb7\x68\x81\xf4\x60\x35\x2b\x97\x8c\x27\x68\xe7\x9b\xc9\xac\x92\x14\x0d\x87\x23\x47\xed\x74\x38\x74\xb9\xc7\xd3\xf7\x27\x4d\xbf\xfa\xf9\x7a\xf5\x3f\x5a\xee\x62\x43\x83\xd5\xd6\x43\x90\x88\x16\x1f\x70\xf0\xf3\xf0\x6b\xed\x81\x35\x9a\xe0\x64\x5c\xce\xe7\x91\x74\xf0\x9d\xad\xfe\x3f\xd3\xdc\xe3\x9a\x38\x79\xb2\x86\x1c\x3c\x65\xce\x45\x94\x2e\xc6\xa5\x8c\x8b\x1d\x27\x70\x50\xe2\x06\x08\x62\x8d\x08\x6d\x33\xc0\xc0\x55\x3e\x52\x7a\x04\x13\x3c\x2d\x8d\x4b\x1c\x34\x1c\xfa\x23\x2c\xa0\x0d\x4f\x7c\x84\x66\x3d\x6f\x50\x28\x4d\xe3\xe1\x50\x30\xa7\x98\x5f\x42\x9c\x06\x96\x6e\xa0\x35\x01\x18\xe3\xb6\x1f\x1d\x89\xce\xd0\xd3\x44\x9e\xbe\x16\xcc\x97\x35\xc9\x1e\x8d\xb9\xe7\x74\x1f\x67\xff\xed\x81\x0f\x95\x1f\x7c\xa8\x72\x72\xce\x5b\x7c\xee\xd4\xf3\x6b\xc3\xe4\xff\x54\x5b\x15\x77\xb1\x71\xb2\x36\x31\x07\x7a\x68\x1a\xea\xd5\x50\x65\xb3\xd1\x9e\x0b\x70\xbf\x47\x23\xd2\x98\x7b\xce\x6d\x9e\xac\xb4\x16\xe7\x4f\xc6\x0f\x35\xab\x27\xe7\x4e\xd6\x5a\x8b\x27\xe3\x87\xd0\xa2\x7b\xd2\x75\x4f\x76\xd6\x1e\x4e\xd0\x49\x34\xd4\x10\xca\x66\x82\xef\x23\x89\x1f\x96\x89\xae\xdb\x3c\xf7\xe9\xd6\xb0\x49\x0e\xb7\x04\xd0\xe4\x27\x5a\x8b\x4d\x91\x6b\x28\x2d\xc5\x04\x65\x64\xb6\xe6\xbf\x3d\x74\xb2\xd3\xaa\x20\xf4\xd0\x03\x73\x78\xc0\xc2\xc6\x9c\xbb\xd8\x70\x9b\x07\xab\x9f\xf5\xab\x9f\x6f\x55\x50\x43\x20\x33\xb7\x56\xc7\x0f\x27\x48\x74\xe1\x60\xf5\xb3\xa2\x17\x1a\xac\x0a\xf8\x21\xf7\x64\xad\x79\xf2\xac\xa0\x50\xc5\x6d\x9e\x3c\x5b\xc3\xff\xb9\xf8\x9c\xf7\xa1\xb2\xbf\xd2\xdf\xdf\x38\x39\xf7\x7f\x2a\xff\x56\x5d\x4b\x5a\x0f\x35\x4f\x9e\x4d\xd3\x4d\x32\x5a\x5c\x9c\x9b\x2c\x8e\xe5\x7b\xaf\x0f\x54\xab\xad\xa8\x56\xde\x34\xaa\x95\x45\xd7\x1d\xa8\x56\xb3\xbb\xa2\x5c\xa1\xe1\x30\x58\x20\xc3\x21\x59\x18\xa3\x5b\xe5\x90\xfd\x40\xb7\xfa\x5f\xaa\x5b\x8d\x7d\x7c\x37\xf9\xc8\x73\xe7\xb3\x56\xe3\x40\x6c\x4e\xa9\xd5\x6a\xe6\x90\xbf\x70\x57\x69\x21\xee\x54\xd2\xa0\x41\x91\x2b\x4b\x4e\xee\xa9\xbe\x0c\x79\xdf\xca\x2c\x1d\x9a\x27\x1a\x7b\xfa\x09\x3a\x50\x4e\x3e\x61\x81\xcb\xa3\x84\x9f\x25\x24\x3a\xaa\x77\xee\xd8\x09\x62\xa5\x4d\x89\xff\xfd\x73\x4e\x4b\x59\xe3\x9a\x2a\xf4\x81\xb0\x71\x8a\x15\x0c\x87\x01\xf6\x21\x87\xac\x58\x06\x1c\x1b\xa9\x1a\x87\x5e\x54\x0b\x62\x3c\xf0\x22\xa1\x84\xe1\xb6\xf8\xeb\x9f\x4b\x37\x75\x5a\x0d\x4b\xa5\xe0\xac\x50\xbe\xf2\xc2\xc3\xe8\x11\x0c\xe4\xdc\x78\x21\x2a\x8f\x72\x8b\x2f\xb6\x46\x0f\x49\x42\x54\x2e\x87\xb3\x9e\xd7\x99\x70\xa4\xaa\xd5\x4b\xd3\x7a\x6c\xdd\x16\xc9\x4a\x06\x28\x9f\xd2\x16\x92\xa1\x73\x60\x30\x1c\x76\x16\xda\x63\xe4\xf7\x92\x22\x94\x75\xc2\x3b\x52\xe9\x60\x61\x0c\x5e\x9c\xd2\xe3\x3d\xca\xf8\xb8\xc2\xf2\xec\xe7\xc0\xf8\xc2\x4f\xd0\x68\x79\x4b\x77\x22\xfa\x8c\x67\x6a\x4f\xc4\x3b\xe0\xf1\xb5\x53\x52\x1b\x6d\xcc\x9d\x5c\x73\x4f\x9e\xad\xa0\x93\xc9\xdc\x32\xd6\x1f\x21\x4e\x6c\x40\xa3\x86\x73\xa2\x17\xc4\x2a\x50\x97\x83\x97\x89\xfd\xed\x71\xf5\xc6\xcb\x5b\x4b\x72\xe6\x5a\x32\xfa\x1f\x76\x3a\x69\x56\xa1\xe0\x5a\xdf\x64\x6c\xaa\xd1\xc6\x1c\x94\x88\x26\x34\x53\x17\x54\x2f\xed\xb2\xd5\xc6\x53\x67\x72\x73\xb5\x12\x84\x39\x4a\x70\x36\x0f\xd4\xa2\xad\xd7\xf5\x60\x64\xa7\x06\x13\x3b\x14\xed\xe4\xce\xec\x50\x64\xb0\x3b\x6b\x97\xa4\x31\x87\x99\x82\x10\x4e\x5f\xcf\xe7\x33\x29\xfa\x3a\x08\x4b\x29\x02\x01\xed\x15\x69\x18\x42\x09\xf6\xdb\x6d\xd2\xe7\xa4\xd3\x70\xd6\x2c\x4a\x25\xa5\x95\x41\xcc\x4b\x4b\xa4\x04\xdf\x1d\x2c\x0f\xbb\xc7\x66\x13\x1f\x4b\x6b\xf2\x4f\xe2\x60\x75\xe4\x3f\x2e\xb3\xfa\x5a\x5a\x53\x7f\x45\x76\x21\x54\xf2\xb9\xdb\x7e\xf4\xa0\xca\xae\x64\x59\x7a\x1d\x3b\x16\x89\x92\x7d\x65\x6b\xdf\x09\xe6\x4b\x74\x28\x89\x45\xed\x72\x6f\x53\x5a\xa3\x51\xe2\x60\xb1\xe2\x8c\xaf\x59\x2d\xaf\xfa\xbe\x44\xee\x51\x36\xc9\x2a\x33\x95\xfc\x4e\x47\xec\x6d\x44\x99\x3e\x5f\x1d\xdb\x45\x6d\x8f\x29\x2d\xa8\x4e\xd0\x71\x55\xcb\xcf\x62\x69\x5f\x0b\xe2\xc4\xc1\xe4\x0c\x19\x4b\x0a\xf1\xcd\xc1\xe6\x94\x2b\x9f\x4d\x1e\x4f\xc7\x84\x9d\x11\x03\xbb\x2c\x1f\x94\xb0\x13\x3d\x7f\x6c\x75\x3a\x4b\x89\xf7\xfc\xa8\xb4\xb6\xcc\x93\x4c\xa9\xa7\xd8\xe1\xc9\x88\x67\x8a\x53\x66\x75\x64\x99\x8b\xf1\x37\x1a\x63\x01\x9e\x11\xe5\x25\xed\x46\xa2\x23\x94\x3f\xde\x23\xa5\x30\x88\xb9\x28\x25\x29\x5d\x50\xc6\x2c\x22\x21\x89\xe3\x49\xfd\x12\xdf\x75\xa7\x42\xd1\x29\xc8\xbf\x69\x8f\xd2\x82\x99\xee\x84\xb2\x3b\x11\xe5\x07\xa3\x23\x11\x27\xcb\x13\x26\x4c\x54\x0a\x54\x0e\x95\x5f\xd9\xfa\x8d\x67\x2a\x7d\x6c\x81\x69\x67\xec\x54\xa5\x9d\x8e\x83\xcd\x25\xd1\xd8\x5c\x12\x65\x3d\x5f\x4d\xee\x44\x95\x7c\x74\xe2\xbc\x55\x45\x61\xf6\xa6\xf9\x45\x61\xde\x9b\xcc\x41\x32\x83\x26\xb5\x0a\xe3\xe8\xe8\x8d\xf5\x26\xf3\x48\x66\x32\xdd\x57\xde\x52\xce\x8c\x2d\x05\xdf\x1d\x0c\xd1\x02\x9f\xea\x8e\x6f\x01\xf2\x94\x68\xb7\xb4\x96\x16\x10\xa8\x89\xe9\x11\xf1\xb1\x12\x4c\x89\x24\xb0\xef\x18\x3b\xaf\xb3\x12\x49\x2f\xc6\x05\x0c\xcb\x29\x2d\x85\x34\x5a\x2e\xb9\x2b\xfe\xb9\x60\x65\xb0\x22\x12\xd7\x56\xfc\x73\x49\xa9\xdd\xf3\x99\xdf\xe6\x84\xc5\x48\xd6\x20\x75\x81\x31\x55\xc4\xe2\x5b\xc9\x5d\x09\xa2\xb4\x8e\x20\xca\xd5\xa1\x75\x91\xf1\xc2\x59\x7e\xd6\x25\xfd\xa8\x33\x82\x87\x23\xcf\x1e\x36\x19\xb6\x01\x0b\x1d\x9c\xbb\xa5\x1e\x57\x46\xcf\x6a\xb5\x5c\xca\xb1\x50\x60\xa2\x6b\x50\x4a\x59\x51\x9f\x7b\xa4\x24\x73\x94\x94\xd6\x57\x72\xe3\x1e\x1d\x84\x1d\x51\xa9\x90\x91\x99\x8e\x4f\x56\x7a\x80\xc1\x76\x7f\x0b\x60\xdb\xc9\x61\x86\xb5\xaf\x6c\x9a\x31\x9b\x21\x08\xfb\x5e\xa0\x55\x02\xa1\xa0\x7b\x9e\x47\xca\x65\x7f\xd6\xf3\xe8\x62\x7e\xbb\xa3\x24\x93\x83\x03\xcc\x50\xc3\x09\x39\x64\x5e\x18\xcd\x0b\xf2\x2c\xcd\x4c\x4c\xee\xb1\x99\x8d\xf0\x83\x52\xcb\xa6\x89\x03\xa3\x4d\x58\xeb\x40\x9a\xdf\xb4\x72\x60\x52\xfe\x91\x86\xcc\xec\x85\xd2\xf5\x7c\xe9\x74\x7e\xab\x12\x42\xe6\xe9\xcc\x1f\xda\xe7\x79\x23\xf9\xa5\x4c\x54\x59\xe5\x92\x68\xf2\xce\x8e\xe6\x55\x6b\xa6\xcc\x3c\xeb\x3a\xa9\x38\xd0\x85\x66\x23\xd7\x9f\x93\xc7\x1f\xb9\x72\x56\x4e\x59\x3a\x13\x1b\x36\xbd\x59\x57\x0c\x66\x3b\x9d\x0a\xe2\xc7\x83\x28\x90\x77\xe7\xe5\xb2\xf5\x90\x4f\x9e\xba\xec\x28\xd4\x6b\xf6\x96\x41\xf1\x9b\xb1\x37\xc7\xbe\x67\x87\x71\x0e\xe0\x02\x7a\xdc\x35\x44\x66\x43\x39\xb2\xd3\x3c\xae\x5d\x32\x3b\xb0\x9c\xb5\xd2\x5b\xec\x9c\xf5\xce\x00\x92\xcc\x36\xb3\x9d\x6e\x33\x07\xc3\xe1\x00\x77\x20\x87\xaa\x15\xf7\xbc\xb8\xa6\xeb\x15\x1b\x9f\x76\xba\x17\xcc\xed\x24\xe5\x79\x5a\xb8\xc9\x79\xdb\x98\x8f\xb9\xe1\x4c\x57\x63\x7d\x98\x1d\x74\x5d\xd0\xc9\xed\xd1\x9b\x1d\xb3\xe5\x2a\x2a\x3f\x6b\x6f\x9e\xc6\x33\xc4\x6c\x10\x3f\xe9\x3f\x29\x63\x0d\xd3\x2d\x60\xd7\x93\xcc\x39\xa9\x04\x68\x23\xba\x8c\xf5\xd8\x69\x3f\x3f\xe0\x9b\xc7\x4e\xe9\x53\x59\xe6\xfa\x4d\xde\xc2\x01\xa6\x59\x9b\xd3\xf4\x0d\x83\x39\xa4\x4b\xa6\xdb\x55\xaa\x15\xb5\xbd\x43\x6b\xbb\x91\x9c\x83\xe8\x2c\xf3\xfb\xd5\x3e\xa3\xe7\x56\xf7\xc8\x08\x24\xd2\x81\x92\xc7\x9e\x14\xa7\x5d\x75\x82\xe5\x88\x32\x92\x39\x2d\xa6\x5e\x50\x83\x1c\x42\xea\xd7\xac\x3c\x38\xce\x59\xed\x10\x84\x43\xcf\x5f\x04\xce\x7d\x5a\xa9\x25\x6e\x8c\x1a\xb3\x59\x6e\x8e\x53\x0b\x57\x5a\x2e\xcf\x86\x63\xce\x21\xd4\x2c\x86\x33\x64\x69\xcd\x4a\xcb\xe5\x31\xb9\xb5\x12\xa4\xf3\x4f\x37\xcc\x6a\x54\x82\xb8\xc8\x57\xc5\x1e\x98\x50\x6b\x24\xdd\x59\x19\xb0\x5f\x94\xe7\x3d\x12\x39\x08\x25\xc6\x33\x42\xee\x26\x6a\xd4\xf7\xc6\x64\x1e\xdb\xc1\xfb\x16\x8d\x96\x4b\x6c\x4b\x1d\x85\x8e\xea\xfe\xd3\xa2\x85\xe1\xb0\xe0\xbb\x3c\x1a\x97\x9f\xb7\xe7\x64\x38\x4f\xab\x12\x71\xad\x90\xe5\x2e\x43\x8b\xc4\xcd\xd9\x4e\x47\x5c\x9a\x8b\xa1\x06\x4b\xe4\xe3\x35\xd9\x7a\xd1\xe3\xbb\x29\x66\xef\x1e\xf2\x80\xf2\xc3\x06\x7d\x5b\x13\xe2\xaa\x41\x74\x8c\x6d\x8e\xdb\xca\x19\x42\x83\x61\x7d\xca\xd5\x88\xb2\xd6\x42\xc1\x99\x55\x19\x63\x71\x25\x10\x98\xcf\xb5\x21\x80\x7e\x3c\x97\xfd\xb2\x07\x7d\x52\xe3\x61\x42\xf8\x1b\xb7\x11\xdc\x5f\x7e\xd2\x5f\x21\x0d\x47\xf4\xc4\x67\xc4\x77\xb0\xc0\xeb\xa8\xc4\x0b\x4c\xf4\x22\xd9\xac\xf6\x7e\xe1\x22\xdc\x09\x3a\x47\xa2\x98\x30\x0e\x8e\x23\x36\xf5\x3b\x71\x2a\xad\xd4\x04\xae\x76\x9d\x34\xd1\x41\x32\x72\xe4\x09\x72\x8e\x1f\x64\xc4\x77\xd3\x3c\xda\x9d\xe2\x91\x0e\x78\xa5\xb0\x53\x1d\x70\xa7\x18\x13\x3e\xe8\x1f\x32\xd5\x1d\x3e\x43\x22\xfe\x71\x3f\xea\x84\x84\xb9\x4e\x5b\x07\x8c\x97\xa7\x58\x2a\x7b\xbb\x47\x04\xb5\x3e\x25\x48\xf5\x4c\xbf\xe3\x73\xd2\x39\x28\x69\x8e\x12\x2c\xfd\x2e\x46\x9d\xd4\x31\xd3\xf8\x6e\x0d\x64\xd1\xb4\xdd\xa7\xe4\x76\x22\x76\xc7\x7c\x96\xcd\xb9\x28\xc1\x41\xfc\xa9\x20\x0e\x96\x42\xf2\x58\xd0\x51\x21\xba\x35\xa9\xe9\x92\x3c\x48\x61\xae\x63\xb2\x38\x19\xef\x3e\x0a\xa1\xb3\x3e\x7c\x9d\xf5\x2c\x7a\xa6\x65\xcc\xdd\x1b\x1b\x44\xa6\xb7\x4f\x45\x6d\xe2\x3a\x4c\xf6\xcd\xa6\x06\xa7\xcb\xcb\x21\x91\x45\x83\x30\xe0\xab\xd2\x0f\xca\x78\x12\xa9\x6d\x49\x5a\x3d\x15\xd5\x5a\xb4\x25\x51\x67\xb4\x90\xb2\xeb\xd3\x04\xc0\xf2\xd5\x2b\x9e\x34\x68\x7a\xc5\x05\xdb\xbf\xb4\xb5\xa5\x20\xea\xc8\xf3\xc6\x99\x3c\x63\xd5\xf4\x82\x0a\x21\xfc\x89\xeb\x9c\x0d\xc2\xf0\x31\x12\x73\x46\x57\x35\xab\xea\x7e\x8f\x92\xd4\xae\xa7\xdb\x95\x15\x25\x48\x22\x59\xd4\x1d\x1d\xc2\xdf\x74\x58\xa7\x3a\x67\xac\x9c\x0e\x56\xe1\x4f\x71\x9e\xbe\xe0\xae\x15\xbc\x88\xe4\xc7\x6e\xa6\x60\x90\x09\x38\x43\xb1\x92\x3d\x82\x49\xb9\x3c\x82\x3e\x23\x5d\x46\xe2\x9e\x2b\xb0\x2f\x66\x50\xcb\x8f\x99\x5d\x70\x99\x70\xf8\x8e\x04\x5f\x15\xd4\x1d\xa7\x59\xe4\x10\x8e\x9d\x00\x05\x3d\xa4\xea\x9b\x83\x66\x48\xb9\x6c\x6f\x1a\x08\x4a\x7d\xbf\x9a\x71\x01\x04\xc7\xf4\x80\x63\xf9\x5e\x3e\x51\xa3\x5d\x80\x89\x66\xb5\x02\x3c\xe4\x18\x09\x2c\x60\xee\xe4\x68\xa0\x4b\x16\xf7\x5e\x7d\x24\xc3\xa1\xa3\xfc\xdf\xe4\xf9\x6b\x4b\xa2\xb0\xc6\xa9\x91\x78\xb6\x74\xcb\xc8\xc5\xd4\x57\xd4\x11\xbd\x90\x17\x4b\x47\xb1\xec\x84\x84\x93\x52\xbe\x95\x9c\x2b\xc3\xdc\xa2\x64\x7c\x1a\xc9\x60\xc0\xa3\xeb\x11\x76\xac\x75\xea\xbe\xdd\x4f\xee\xc4\xa7\xd1\x29\x50\x70\x62\xd8\x8a\x2a\xaf\x46\xae\xf4\x88\x93\xe0\xcc\xc2\x42\xac\xb7\xd5\x19\x97\x78\x86\xb8\x24\x55\x5b\xb3\x6b\x92\xbc\xe2\x80\xb6\x1e\xa7\xd6\x4b\xc5\x52\x0e\x8f\x26\x69\x25\xb8\xa8\xe2\x09\x05\x3c\x8e\x79\x82\xe3\x60\x39\x92\x2f\x95\x98\x10\x1e\x91\x72\x09\xa6\x70\xc9\x7f\x4a\x70\x01\x67\x10\xb4\x96\xe1\x82\x0c\x4a\x59\x3e\x08\xfd\x55\x3a\xe0\xd5\xa5\x20\xaa\xf6\xfd\xf6\x69\xc2\xe6\x96\x82\x9c\xa9\xcd\x68\x16\x12\x71\xb6\x3a\xb5\xae\x6a\xa4\x8c\x74\x45\xe4\xf1\xe1\xb0\xae\xdd\x40\x29\x85\xd0\xb3\x7c\x78\xd9\xe4\xcc\x08\xe7\x02\x03\x85\xa3\x83\x98\x1f\x59\xe9\x2b\xde\x6f\x94\x9c\x0a\x41\xc9\x4e\x14\x59\x8e\x89\xb2\xb9\x91\xf5\xe7\x6c\x4a\x52\x0c\x8e\x99\x2c\xae\xf3\xb4\xcf\xfc\x15\xc2\x09\x33\x07\x8f\x67\x03\xde\x0b\xa2\x46\xa9\x59\x97\x07\x9d\x4e\x85\x54\x1c\x24\xdd\x0d\x9e\xf5\x63\x81\xa4\x90\x97\xbc\xd6\x67\x94\x53\xa1\x48\xd6\x94\xe7\xf0\x83\x3c\xd7\x9e\x79\x0f\xcc\x5b\xd9\xfc\xe0\xdc\xdb\x63\x70\x74\x45\x23\xa1\x14\x59\x59\xba\xe1\x20\xee\x89\xef\x12\xc8\x7d\xec\x91\x60\xb9\xc7\xc5\x57\x05\xe5\x3e\x07\xf1\xc7\x58\xd0\xf1\xa4\xea\x21\xa0\xdc\x67\xb5\xad\x1f\xf5\x41\x57\xb2\x07\x54\xe7\xca\xe2\xbd\xe2\x9f\x3b\xa4\x3e\x3f\xd5\xed\x66\x9c\xd3\x59\x16\x36\xb2\x16\x85\x97\x9b\x1a\x5c\xc8\x73\xac\x15\xff\x9c\xcb\xaa\x1c\xd7\x73\xf4\x3b\xa3\x56\x41\xe9\x35\x1f\x02\x17\x0b\xf4\x8b\xd2\x73\x9d\x51\xc7\x25\x7a\x19\x7d\x56\x0e\x9c\x28\x59\x90\x5c\x48\xc3\x83\x2a\xa2\x6f\xc1\x66\x31\x43\x8d\x26\x69\xe9\x02\x59\xc4\xe5\x6c\xd8\x42\x1d\xca\x43\xda\xe4\xb9\xab\x26\xe6\xbf\x62\x6f\x64\x8d\x1c\x38\x3a\xd5\xd3\x5d\xfd\x30\x6c\xbb\x76\xae\xc1\xf0\x6a\x7e\x8f\x34\xda\x95\x6e\x70\x8e\x74\xaa\xcb\x82\x05\x37\x91\x46\x42\x60\x6d\xe1\xbc\x5c\x6a\x94\x4a\x2e\xea\x75\xf3\x59\x1b\x51\x48\xfc\xb8\x9e\x27\xd8\x5a\x77\x1e\xc8\xfa\xd8\xdd\x89\xb0\x61\x98\xa5\xbc\x90\x5b\xb1\x52\x69\x6f\x72\x20\x3b\x7b\x01\x36\x9e\x29\x93\xc9\xa8\x24\x81\xed\x16\x34\xf3\x59\x4f\xf6\x51\xe6\x73\xed\xa3\xe3\xb9\x74\x34\x35\xbb\xba\x75\x84\x86\xc3\x79\xb4\x30\x9f\xad\xaf\x70\x2e\xe6\x8f\xcf\x88\xa7\xe6\x73\x20\x53\x44\xd5\x79\xd1\xa0\x0c\x09\xf4\x2b\x7c\x0b\x13\x3e\x16\x93\x02\xd7\x75\x1a\xed\xcc\x54\x15\xb9\x1f\x8a\xb2\x38\x17\x09\x81\x51\xf6\x56\xa7\x73\xb2\xc6\xa2\x4e\xea\xbe\x61\x3a\x1d\xba\x58\x7b\xfe\x53\x72\xd2\x45\x38\xf6\x0a\x91\xc5\xa1\xaa\xaf\x4d\x82\xd0\x65\x73\x31\x7a\x88\xce\x44\xe5\xb2\x1b\x56\x3c\x8a\xf4\xf9\xb7\x5f\x0d\x46\xe4\xa4\x21\x70\x88\x07\x48\x4a\x4c\xb6\xa9\xe0\xc9\x29\x25\xf6\xd4\xc8\x16\x1f\x23\xfc\x8a\xcb\x7f\x5c\x0b\x3e\x56\xb4\x82\x8d\x5d\x01\x80\x2e\xfb\x5d\x19\x42\x71\x38\x24\x0b\x0c\x95\xcb\xe9\xe2\x2c\xef\xb7\xa6\x63\x10\x62\x33\xc8\xda\xb9\x06\xf9\x50\xf4\x50\x51\xae\x61\x1d\xaf\x36\x32\xfc\x13\xa1\x87\x0a\x46\x45\x28\x19\x05\xf4\xc8\x4c\xa2\xa0\x5b\xe0\xa1\x07\x15\x2a\x31\xaa\x74\xa9\x43\xfa\x32\xae\x07\xd5\xf7\x96\x01\x8b\x79\x09\x54\xdc\x12\xed\x96\xce\x00\x83\x76\x78\xcf\x55\x75\x23\x6d\x5f\xcc\xb3\x44\x9b\x09\xba\x92\x6c\xc6\x85\x03\xf8\xa8\xc9\xb2\xc7\xa4\xc9\x8d\xe7\x53\xfb\x7f\xe6\xb1\x85\xfa\x22\x6b\xcc\xe3\x94\x15\xf9\x1c\x2b\xa4\x4d\x1d\x6d\x22\xd4\xe3\x1e\x09\xbb\x55\xd9\xbb\x69\xa4\xfa\x94\xba\x67\xc1\xb1\xbc\x7d\x5f\x96\xee\x72\x0b\x84\x38\x06\x9f\xa4\xa7\x80\x2d\x0f\xab\x48\x27\x5e\x73\x5b\xfe\x57\x8c\x6f\x10\x1c\x6d\x4d\xbe\x47\xd3\xca\xf7\x68\xb2\x00\x17\xdb\x9d\x59\xf9\x52\x0d\x36\xb6\x72\x70\xe1\xe0\x40\xae\x08\x62\x88\xad\x25\x9a\xa8\xeb\x9b\x02\x5e\xc2\xcc\xab\xef\x67\x07\x38\xb8\xb2\xd1\x73\x5b\x0c\xc1\x41\xee\x32\x64\xe6\x72\xed\xdc\x42\x3d\xbd\x18\x03\x1f\x41\x49\x06\xd9\x82\x89\xb2\x3d\x64\xa7\x63\x7a\xe8\x12\x93\x9e\x5c\x03\xe9\xcd\x95\x57\xe7\xf7\xd3\x05\xaf\x5e\x2e\xcf\xba\xc1\x82\xab\xc5\x8d\xe9\x10\x45\x56\x8f\x56\xd1\x7e\x5a\xad\xa2\xe8\x00\xd3\x98\xab\x18\xb9\xfa\x07\xc2\x81\xc7\xac\xcc\x30\x5d\x82\x4a\x94\xed\x75\x6e\x09\x26\x4a\xd0\x41\x08\x9c\x1c\xd3\xcd\x80\xee\xbc\x20\x4f\x7a\x40\xdd\x26\x28\x5b\xe7\x74\x6b\x16\x9f\x9a\xa6\x5c\xd1\x74\xf3\x05\x2e\xe3\xc4\xfd\x54\x01\x1a\x6e\x20\xdb\xce\xa2\x0b\xf4\x1d\xa1\x42\x04\x2e\x69\x0d\xbf\x51\x0b\xe3\x19\xb2\xe0\x05\xe5\xb2\xf2\x80\x6f\x44\x3f\x72\x03\x90\xfd\x3e\x8e\x71\x88\x07\xb8\x5d\x4c\x4c\x5d\x2b\xee\x78\x75\xdc\xf3\xe4\x75\x2d\x39\xd0\x46\x99\x2e\xe4\x8a\x34\x49\x4b\xf2\x8d\x60\xa5\xf6\xa2\xeb\x7b\x75\x1c\x7b\x75\xd4\x70\x7d\xaf\x5d\x9d\xc7\x3d\xcf\x8d\x8a\xdb\x6a\xfa\x2d\x7b\x32\x54\x22\xd5\x05\xdc\xf1\x22\xcd\x30\xd2\xc0\x39\xe5\x17\xec\x57\x2a\x08\x0f\x3c\x7f\xff\xe0\x00\xa9\xcc\xef\x1f\x54\x2a\x8a\x26\xdd\x22\x55\x60\x80\x70\xdf\x1b\x95\xd4\x03\x24\xd4\x81\x7e\xa5\xb7\x40\x17\xdd\x6c\xfd\x15\xd3\x6e\xa8\xba\x8f\x3b\x5e\x17\x35\x42\xaf\x87\xbb\x0b\x9d\x72\xd9\x15\x3f\xf1\xb8\xde\x0c\x5a\x5e\x36\xae\x4e\x07\xf7\x71\x88\x63\x84\x7b\x5e\x58\xe9\xc3\xfb\x81\x1c\xab\x17\x31\xc4\x88\xfa\xa7\xc7\x1d\x53\xac\xa8\x9b\x1d\x7f\x81\xec\xc0\xab\xcf\x0c\x3c\xb2\x50\x2f\x97\xc9\x81\x78\x31\x3b\x45\x89\x3d\x43\x1b\xe9\x2c\x6f\x7b\x64\x7f\xfb\x40\xbc\xbf\xad\x04\x55\xe8\x79\x9e\x1b\xa4\xc3\x05\xc5\xdb\xd6\x0c\x47\xb5\xd5\xe1\xd0\x0d\xbd\xa0\xb6\x5a\x1d\x60\x56\x2e\xcf\xd2\x72\xd9\xa5\x66\xc4\x10\xc2\xe1\x01\x8e\xfc\x4a\x65\x86\x84\x31\x91\x4f\xf4\x19\x5a\x62\xc4\x3f\x3d\xc3\x64\xb4\x87\x4a\xba\xa6\x52\x6c\x8a\x55\xe6\xc5\xe0\x02\x8d\xfc\x2c\x8d\x8a\x94\x1f\x63\x8b\x9f\x15\x69\x70\x81\xea\x79\x5e\x24\x54\xa0\x08\x15\x4c\x86\x08\x8b\xbd\xc1\xd4\x33\x9d\xc1\x6a\x57\x40\xcf\x2c\xa2\x53\xe9\xf2\x72\x4a\x79\xf5\x54\xe8\x2a\x81\xce\xcb\xe5\xad\x08\x1f\x3c\xf5\x96\x00\x46\xdb\x08\x0e\x7d\x56\x60\x04\x87\x61\x24\xdf\xa3\x38\xf6\x82\xfd\xfb\x15\x6d\x43\x2f\x9e\xf3\x85\x04\x88\x04\x63\xf8\x69\x7b\x19\x5d\x28\x44\x98\x56\xe7\x53\x97\x1a\xbe\xd6\xb1\xb3\x24\xf3\x11\x6e\x7b\x03\x43\x36\x55\xab\x8f\xdd\xd8\x6b\xd7\x56\x2b\x03\x60\x83\x05\xed\x1c\x6e\x7f\xbc\x20\xcf\xed\x45\x9e\xea\xfc\xac\x57\xad\xfa\x68\x3f\x8a\x3d\xb7\xed\xb9\xa3\x55\x67\xd8\xd3\x54\x66\x9e\x9e\x24\x82\xe2\x9e\xe7\xc5\x50\xf7\x01\x8f\xec\x17\x2c\x8a\xb7\x57\xa1\x0f\x6f\x81\xaa\xf3\x19\xd5\x8d\x53\x16\x04\x73\x7e\xc7\xef\xcb\xd0\x09\x7e\xbf\x1f\x06\xed\x11\xff\x51\xbb\x79\xba\x90\xf1\xe8\x0a\x41\xe7\xf4\x09\x30\xed\x93\xa8\xe1\x22\x6f\x41\x7a\xc6\x90\x39\x8e\x1d\xff\xd4\xd3\x35\x1d\xd5\xc7\x75\x0b\x8f\x0a\xb5\x86\x7d\xa2\x47\x4a\x27\x44\x77\x4a\xba\x3b\xea\xac\x2e\x80\x93\xc3\xd2\xf3\xa2\xfa\xe7\x65\x6c\x10\xbf\x14\xab\x67\xa3\x25\x4e\xa5\x89\x69\x9f\x44\xa4\xa3\x22\x4b\x74\x09\x6f\xf7\xee\x23\x16\xb2\xfe\x62\x34\xe4\x27\xc0\xa3\x1d\xd2\x98\xdc\x47\x3c\x64\xfd\xc5\x78\xc8\x4f\x0a\x8d\xf1\x6e\xe0\x15\xeb\x2c\x51\xca\x63\xce\xfc\xfe\x1c\xa3\x03\x9e\x8b\xb0\x8f\x75\x26\xfd\xc9\x66\xaf\xaa\x48\x23\xd5\x95\xe0\x9c\xd4\xff\x73\xf9\x06\xbc\x47\x22\x2e\xb2\x92\x4e\x61\xce\x30\x58\x9a\x6b\xd3\x88\xfb\x41\x44\x58\x55\xda\x0e\x14\xc5\x54\xbb\x5f\x46\x3c\x54\x46\x55\x13\x78\x35\x32\x53\x26\x35\x81\x31\x22\x2c\xf0\xea\xfb\x83\x34\x36\x41\x00\xeb\xbf\xef\x45\xcd\xa0\x35\x63\xd5\xe4\x54\x7c\xcb\x7e\x27\x49\xb4\xae\x26\x44\x6d\xba\xcf\xa1\xca\x95\x8c\xae\x43\x19\xfd\x44\xb5\x90\xd2\xd3\x83\x3e\x52\xaf\xfc\xe2\xc5\xb8\xc6\x88\x60\x69\x97\x4a\x95\xc6\xca\xf2\xb8\x2f\x76\x19\xab\x28\x6d\x75\xc9\x8f\x83\xb6\x83\x70\x30\x1c\xba\x81\xe7\xc3\x5c\x4c\x11\x91\xce\x84\x22\x2b\x36\x91\x40\x20\x40\xa8\x40\x8e\xa4\xcc\xa0\xf9\xa9\x88\x19\xd2\xb0\x1a\xe2\x67\x15\x72\xee\xe9\x63\x38\x47\x23\xd1\x70\x2a\x6c\x26\x0d\xe4\xe2\x46\xd6\x08\x62\xa2\x4d\x21\xdc\x48\xa3\xee\x60\x53\x4e\xfd\xb6\xf2\x28\x6a\x3a\x2a\x68\x64\x9a\x2a\x78\x94\xd1\x30\x24\x4c\x7d\x9a\x48\x34\xdd\xc8\x28\xc9\xfa\x8c\x9e\x09\x3a\xd2\xcd\x70\x10\x9d\x26\x9d\x6a\x10\x55\xa9\x98\x24\xfb\x0a\xb2\x2c\x53\xba\x1c\x92\x29\xbf\x57\x97\x88\x2f\x83\x9a\x4c\x95\xad\x7a\xa6\xa8\xc2\xae\xdf\x26\x4b\x94\x9e\xae\xb6\x69\x14\x91\x36\x9f\x94\x25\x87\x55\xf1\xc2\x33\x52\x9c\x9f\x0d\x38\x27\x4c\x95\x9e\x2f\x42\x36\xe0\xbd\xc1\xd2\xf8\x3e\xfb\x9f\x1f\x30\x52\xf5\x3b\xe3\x73\x08\x46\xeb\x93\x09\x5d\x20\x9d\x15\xda\xa1\x23\x19\xb2\xdc\x3c\x9a\xdc\xa7\xfd\x41\x7f\x34\x39\xe8\x32\x7f\x65\x4c\x18\x48\xa1\x32\xc3\x8e\x07\x77\x70\x0f\x77\x71\x1f\xaf\xdc\x1f\xa3\x37\x8b\xf7\x73\xbc\x8d\xbb\xf6\x4c\x48\x73\xa9\x59\x0b\x74\x69\x8c\x32\x24\x9f\xaa\x5c\x8e\x4b\xd9\xd6\x0b\x19\xd6\x8d\xb6\x5d\x56\xf2\x73\x30\x55\xf1\x51\x26\xa7\x5b\x2b\x07\x3d\xf5\xa7\x2a\xa6\x39\xde\xc1\xe1\x74\x9d\xcb\xf2\xff\x60\xaa\x42\x23\x93\xa2\x3d\x55\xb1\xfc\x4c\xe9\x4c\x55\x2a\x3f\x7d\x7a\x93\x4a\x69\xb1\x90\x5d\x5b\xe3\x49\x25\x80\x77\xf5\xbc\xc2\x2b\xd3\x64\xd6\x73\xb3\x6f\xad\xb9\x23\xd2\xb9\x4d\x57\xfa\x3e\x9f\x5b\x26\x5c\xe9\x21\xac\x6a\xde\xc0\xff\x2b\xcc\x53\x4b\x44\x59\x82\x28\x5c\x1c\x34\x1c\x12\xbd\xb2\x43\x5a\x63\xc5\x0f\x22\x67\xba\xae\x84\xc1\xd2\xbf\xaa\x17\xa7\x14\x0a\x47\x83\x36\xa3\x61\xb0\x24\xfa\xa1\x52\xc6\x20\xae\x2d\x29\xd5\x00\xaa\x51\xae\xca\x77\xab\x3d\x1a\x76\xf6\x24\x2a\xd7\x38\x9b\x4a\x19\x37\xf2\x49\x7f\x85\xc4\x8d\xa6\x33\x16\xbf\x56\xd6\x1c\x03\x3a\x16\x75\x83\xe5\x01\xbb\xbf\x1b\x2e\x65\xae\xbf\x96\x64\x03\xba\xc1\xf1\x58\x42\x6a\x06\x8d\xa5\x90\x14\x9b\x27\x68\xc3\x67\xba\xd2\x1f\x70\xd2\x71\x47\xed\xe9\xe4\x41\xb6\x67\xc1\xc3\xe1\xa4\xdd\x89\x7e\x6b\xe5\x87\x67\xfd\xd5\xb8\xd4\xf3\xcf\x90\x92\x2a\xe6\xa0\xc4\x85\x0b\x1f\xc7\x2c\xbe\x35\xa7\x92\x1a\x41\x45\x62\x82\xa3\x8a\x53\x73\x2a\x04\x3c\x39\xb9\x23\x1e\x58\xdc\x40\x1b\xaa\x9b\x57\x22\x54\x1e\x63\x18\x27\x56\x70\x82\xec\x00\x9e\x96\x53\xec\x45\x5e\x6b\xfb\x61\xa8\xa2\x70\x36\xf8\xcc\xa8\xbb\xc6\x73\x7d\xd2\xe6\xa4\x53\xca\x8c\x60\x49\x12\x5d\xd9\x82\xe8\x9d\x94\x1a\x25\x15\x90\x12\xba\x53\x92\xa1\xda\x4b\xa3\x7d\x02\x7f\x27\x25\x2a\x6d\x11\xd3\x81\x21\xd9\xb8\x81\x1e\xd1\x8e\x13\x0f\xd9\xad\x67\x1c\x9c\xaf\x15\x4c\x23\xb1\x67\xf2\xe3\x78\xaf\x9d\x93\xcb\x6b\x99\xe1\xb0\x4d\xa3\x98\x86\x44\xf9\x87\xcc\xc7\xef\x1e\xbf\xa9\xbb\x7f\x98\xf6\x7c\x1d\x58\x55\x93\xaf\xd8\x2e\xa7\x5c\x1e\xc9\xb9\x38\x92\xe2\x72\xd4\x80\x65\x86\xad\x4a\xaf\x99\x5c\x0e\x60\x41\xdc\x47\x75\xa0\x66\x57\x6f\xad\x72\x8b\x99\x5f\xe9\xc2\x25\xca\xd8\x2d\x64\x3e\x88\x86\x32\xbb\xbb\x09\x5d\xc9\xe4\x5b\xcc\xfd\x96\xdd\x10\xb9\x18\x89\x69\x78\x86\xe4\x3a\x5d\x90\x6a\x4a\x8c\xef\xc3\xa9\x53\x66\x48\x4f\x9d\x2a\x68\xaf\x66\x3e\x8f\x7c\x4c\x3b\xb6\x69\x8f\x4c\x57\xb6\x89\x51\x31\x2a\x1a\x87\x65\xc2\x9f\x3a\x1b\xe5\xa2\x77\xe6\x1d\x46\xc8\x1c\x8b\xd9\x9f\x2e\xc9\xd4\x3a\x86\xe5\x43\xea\x0b\x05\x3a\xe0\x81\x1f\x06\x9f\xdf\x93\xb5\xcc\xae\x53\x9b\xa2\x47\x4f\x50\xbf\xa3\x1d\xd1\xd6\x0e\xda\x8a\x57\xd6\x4a\xb7\x66\x61\xaa\xe2\x2b\x4d\xee\x96\x52\x96\xfe\x57\xf5\x4f\xa1\x7c\x64\xca\x7e\x4a\xff\xc9\xd5\x17\x06\x84\xad\x56\xf5\x5b\xbf\xbd\x52\x46\x72\xc7\xa7\xb6\x01\xad\x7c\x48\xf3\x49\xb2\xaa\x2f\x5e\x4e\x93\xd5\x38\xc1\x12\x55\x17\x19\x37\x56\xda\x4e\x7a\xc0\x42\xac\x2f\x2a\x4d\x31\xcc\xbc\xb5\x04\x47\x5e\x7d\x7f\x74\x00\xee\x27\xf7\x47\x70\x78\x15\x78\xbc\x19\xb5\x30\xf5\x2c\xaf\x81\x41\xc5\xf1\xdc\xe6\x73\xe5\x7f\x6b\x3d\x84\x1c\x54\x23\xe7\x48\xdb\x25\x68\x86\x96\xcb\x2e\x6b\x06\x2d\x8f\xca\xe0\x1d\xc6\x23\x55\x91\x3e\x24\xc9\x29\x94\xf2\x6a\xd0\x11\x5a\xfa\x7d\x66\x18\x7d\x14\xbd\x66\x5a\x6a\x10\x6f\x01\x36\x2e\x02\x8d\x86\x53\x21\xb8\x43\xcc\x77\x88\x48\x6d\x5e\x30\xca\xb3\x39\x55\x0b\x78\x3b\x9c\x7b\xce\xb5\x6b\x40\x6e\xed\x21\x34\x97\x5e\xa8\x2e\xf2\xe6\xbe\x56\x43\x94\x4b\x92\xc9\x27\xab\x82\x18\xdb\xe1\xaa\xe2\xf0\x48\xc3\xa1\x7c\xb1\x97\x35\xc1\xb5\x6d\x9e\xb4\x4d\xb6\x6c\xaa\xd6\xf6\x57\x88\xec\xb0\xb4\x75\xb2\x9d\x24\xe9\x47\xa9\x91\x0e\xcd\x2d\x3d\xe6\x72\xd7\xce\xc1\xd0\x68\x80\xee\x07\x9f\x89\x49\x09\x2a\xed\x94\xce\x10\x26\x7d\x36\x96\x68\xb7\x34\x60\x61\xa9\xef\x33\x7f\x25\xae\x95\xdc\xc7\x82\x8e\xf4\xda\xd1\x0d\xa2\x4e\xc9\x79\xb0\x12\x54\x1e\x74\x84\xde\x24\x47\x52\x5a\xd7\x76\x82\x8e\xf9\xca\x2a\x0f\x3a\xb5\x07\x15\x42\xf2\x52\x7f\xa4\xd9\xa3\x41\x1c\x07\xd1\x72\xda\x48\xc3\x94\x2b\xb9\x4f\x50\x7a\x5a\xa9\x66\x8d\xb4\x0d\xad\x9b\xa9\xa6\x6b\x0f\x1a\x86\x15\xf5\x2f\x92\xa8\x4d\x3b\xe4\x99\x63\x47\xcc\x2e\xc0\xa5\xa8\xa1\x54\xca\x9d\x18\x91\x6c\x3a\x9b\xe9\xd2\xe7\xd4\xfc\x04\x1d\x12\xc3\xc4\x95\x96\xc9\xf0\x00\xfb\x20\xc4\x7d\x57\xee\xc3\xd5\xb7\x5a\x1c\xca\x77\x5c\xa8\x36\x88\x82\x17\xe0\xe5\x81\x7a\x9e\xe1\x87\xcf\x14\x57\x01\x9f\xd5\xb7\xc5\x82\x34\xa8\xb6\xd1\x6c\x6d\x52\x73\xc1\x73\x0f\x92\x06\xa9\x37\x7d\xb0\x3c\x19\x2e\x54\xe7\x47\x5d\xa4\x1f\x03\xa7\xe8\x7d\x30\xc6\x8e\x4b\x6d\x3f\x12\xec\xe2\x87\xb1\xbe\xc6\x51\x4d\x37\x4a\x0f\x4a\x25\xfc\x41\xc7\x7a\x32\xc2\xa9\x62\x6e\x57\x71\x7c\x2a\xfb\x54\xf3\x70\x47\x3e\x82\x3e\x5c\x41\xd2\xa5\xcf\x99\xb9\x70\xd0\x6d\xb6\xcc\x9c\x26\xc5\x1d\x54\x62\x81\x29\x33\x06\xaa\xdc\xff\xa9\xd8\x80\x62\xae\x47\xe3\x0b\x8d\x51\x45\x95\x4d\xeb\x6c\x1d\x25\xaa\x4a\xee\x46\xa8\x5c\x4e\x2b\x8e\x54\xc5\xb4\xb6\xe2\xf7\xb3\x95\x1a\x3c\x95\xb3\x73\x4f\x5e\xec\xe8\x1f\x65\x79\x54\x50\x2c\x7d\x98\x1f\x75\xe8\x4a\x75\xc0\xc2\x6a\xec\x77\xf7\xfa\xc0\x23\x35\x55\x72\x0e\x3e\x7a\xe8\xb1\xc3\x8f\x7f\xec\xe3\x47\x3e\xf1\xc9\x27\x8e\x3e\xf9\xd4\xd3\xff\x75\xec\xf8\x89\x67\x3e\xf5\xec\xa7\x3f\xf3\x59\x7f\xa9\xdd\x21\xdd\xe5\x5e\xf0\xb9\xd3\xe1\x4a\x44\xfb\x2f\xb0\x98\x0f\xce\x9c\x3d\xb7\xfa\xf9\xfa\xfc\xbe\x87\x3f\xfc\x91\x47\xfe\xfd\xa3\xff\xe1\x60\xe6\x39\x8e\x5e\xcb\x88\x5c\xc4\x58\xc5\xe3\xb5\x76\xcf\x67\x07\xb9\x7d\x33\x2c\x41\xd5\x6b\x17\x3d\x04\xcb\x9e\x65\x23\x37\x46\x05\x80\x09\x57\x05\x31\xb2\x97\xa4\xda\x7c\x93\x4e\x0a\x76\xe0\x8f\x89\x26\x03\x75\xa5\xd4\x4d\xc5\x9f\xda\xbb\x2e\xad\x96\xfc\x52\x3c\x58\x92\x47\x1b\x76\x40\x82\x9a\x33\x41\x11\x8a\xb9\xcf\x49\x75\xc5\x6f\xf7\x82\xe8\xbe\x31\x8b\x5e\x6d\x95\xdf\xcf\xd4\x8a\x41\x0a\x23\xcc\x6c\xef\x14\x33\x59\x5f\x1a\xb0\x4a\x6b\x45\x54\x86\xc2\x9f\x01\x21\x24\x51\x8f\x3d\xa2\x01\x3c\x6b\xa5\x8e\x4a\x22\x59\xf6\xa8\xea\x67\x29\x22\xa4\x13\x97\x54\x56\xe5\x3a\x30\x2d\xeb\x59\xd5\x34\x79\xcb\xae\xb6\x20\xfc\x8e\x5e\xab\x34\x82\xaa\x4a\x78\x1e\xd8\x1e\x30\x46\x22\x2e\x5b\x7e\xd2\x5f\x21\xc6\x8a\x3d\x1e\x2c\x19\xc7\x36\xb1\xb7\xa6\x1d\xa5\xaa\x6b\x04\x8f\xe8\x30\x35\x27\x98\x1f\x29\xdb\x80\x78\x38\x6c\xb6\xb0\xef\x11\x15\xa6\x26\xf7\x41\x5e\x5a\x2a\x2b\x3a\x6a\x2e\x2c\x17\x22\x35\x65\x3c\x2a\x54\x3e\xd9\x6a\xbe\xd6\xf4\xb4\x04\x33\xcc\x6a\xdd\x08\x59\x35\xf9\xa3\x35\xf9\xa6\xa6\x1c\x16\xa3\x15\x25\xfa\x12\xb4\x76\xfc\xe9\x27\x0e\x9e\xf0\x9c\x87\x9c\x99\xa8\xc6\x4d\x81\x13\xb4\x68\x53\x96\x3f\x9e\xb2\xf3\x2b\xc3\x5e\xdb\x68\x73\x4d\x0d\x50\x63\x2d\xb3\x46\xe8\xd3\xa1\x03\x99\xc1\xb6\x87\xa1\xf1\xa0\x3e\xc1\xc9\x8f\x4d\xc5\x79\xb0\xb4\xe0\x24\x38\xd7\xaa\xb4\x16\xae\x49\x8f\x30\x20\x7a\xea\x28\x63\x25\x98\xaf\xc8\x8a\x68\xa1\x57\xdb\x3a\xae\xce\xa3\x19\xe2\xd5\x8d\x4e\xbe\x68\x85\xb0\xa8\x90\x06\xa9\x09\x86\x50\x7d\x98\x57\xc4\x63\x19\x2e\x24\x2d\x58\xe8\xf2\xad\x29\x97\xde\xa3\x7c\xf9\x4c\x74\x3a\xa2\x67\xa3\x92\xea\x74\xe9\x79\x29\x22\x9e\x07\xc6\x3c\x1b\x84\x61\x3a\x7e\xca\x4c\xc9\x9a\x00\x5a\x51\x19\x61\x5f\x6d\xfe\xd3\x09\x3a\xb9\xc2\x09\xce\x33\x97\x6d\xd8\x9b\x92\x54\xbd\xf6\x4d\x73\x39\xfa\x95\x71\x8e\xa1\xc6\x15\xce\x34\x0c\x65\xed\x1c\x19\x2b\x36\xeb\x42\xce\x53\xcf\x04\x87\xc3\x00\x77\x3c\x5e\xe3\x74\x38\x0c\x66\xea\x9e\xe7\x75\x8c\xfe\xe2\xcc\x3a\x68\xd1\x8d\xbc\x8e\x1e\x0b\x77\x1e\xe1\xd0\x9b\xad\xa3\x86\x48\x14\xe0\x3c\xc2\xd2\xf2\x30\x57\x84\x7a\x6d\xab\xc8\x40\x15\xa1\x5e\x5b\x80\xf3\x48\xba\xe7\x87\x02\x01\x92\x7e\x55\xad\x9f\xb1\x34\x77\x75\xa9\x47\x2d\x16\x88\x71\x1d\x21\xec\xab\x4f\x91\x17\x59\x9f\x7c\xf9\x49\x69\x36\xa2\xbb\xee\xa8\x95\x7e\xe0\x71\xdc\xf6\xc8\x8c\xae\xba\xed\x91\x71\x55\x07\x1e\x1f\xa9\x3a\xf0\x3c\x2f\x52\xd1\x02\xda\x9e\xe7\xd1\x59\xcf\x1b\x94\xcb\xcc\x9a\xe2\x92\xea\x48\x3f\xac\x2d\x1e\xb3\x88\xf2\xa0\xbb\x3a\x6e\xb0\xb3\xec\x53\x50\xac\x78\x98\xf5\x57\x3d\xc4\xc6\xd6\xcc\x2b\x90\xa8\x4d\xd2\x92\x12\x53\x99\x15\xa7\x56\x1c\x07\xa8\xb4\xe4\x88\x9a\x41\xcb\xea\x90\x3a\x8d\xa3\x39\x5b\xf4\x6c\x75\x93\x5a\x29\xfe\xa4\x34\x3c\x81\xb9\x7a\xaa\x9e\x7d\x43\x31\x9a\x1d\x98\x82\xa3\x19\xbe\xc8\xe0\x61\xf3\x48\x36\x21\x5c\xda\xc4\x65\x78\x1e\x35\xc6\xa0\x2a\xb7\xa9\xf2\x4d\x3c\xac\xa0\xb6\x30\xd1\xb2\x44\xf5\xdf\x3c\xd3\xc5\xf3\x72\x11\x64\xb0\x45\x66\xf2\xec\x6d\x55\x11\x28\xd2\x52\x63\x10\xf5\xe4\xcb\xff\x8e\xf4\x02\xe0\xca\x67\xf3\x6c\xf5\xf8\x6e\x36\x94\x48\x27\x97\x3c\xc3\xcd\xa9\x1c\xc4\xd4\x5b\xb3\x66\x3b\x88\xe1\x42\x23\x56\xb5\xbf\x1c\x15\x8c\xda\x55\x64\xc9\xe2\x30\x8d\xd1\x5a\xb1\x0a\xef\x32\x8f\x60\xa1\xa1\xa5\xe6\xfe\x9e\xd2\x64\x16\x59\x83\x2d\x36\x59\x4b\x6e\xa6\x18\xe9\x0c\xda\xb6\x79\x97\xfd\x8a\x99\x34\x59\xcb\xe3\x98\x24\x08\xaf\x69\x6d\x88\x25\xea\x18\x18\x8c\x57\xb9\xdd\xc2\xac\xa7\x75\xa2\x51\xfc\x63\xba\x42\x78\x4f\xa8\x1c\x67\x49\xc4\x95\x37\x3c\x07\xcd\x44\x1e\x4f\xed\x7e\xdd\x3a\x36\x04\x6f\xd6\x5b\xd6\x8f\x79\xb1\x01\x72\x79\xd1\x63\x7e\x06\xd1\x49\x78\x93\xb5\xf6\x17\x58\x38\xc0\x77\x19\x11\x57\x7a\x97\x67\xe5\x72\x54\x2e\x53\x04\xb6\x51\x86\xb8\xe9\x20\x29\x85\xa8\x51\x72\x2a\x2e\x15\xfb\x9e\xfc\x9a\x82\x2a\x4e\x49\x88\x66\x91\x83\xc9\x0b\x18\x01\x45\x23\x97\x37\x3e\x4a\x44\xbb\x4d\xde\xf2\x82\x44\x5a\x99\x63\x86\x29\xce\x6a\x15\x2e\x45\x4a\xd3\x9d\xd1\x6c\x47\xe5\x0b\xec\x1c\xd7\x6a\xae\x31\x4b\xa4\x4c\x37\x4b\xa4\x3a\x59\xd0\x4a\x42\xaa\x59\x8c\x20\xc4\x85\x42\x32\x26\xda\x6c\xaa\x5d\x0f\x06\x41\xa7\xba\x4c\x22\xe5\x6b\xfe\x7e\x1f\x89\xe9\x86\x88\xd9\x2c\x9b\x68\x6d\xa8\xb6\x4c\xf8\x89\x60\x85\x18\xcb\x65\xe7\x9c\xfe\x57\x95\xff\x7d\x58\xfc\xb7\x0a\x3f\xe1\x9f\x63\xfc\x0c\xcf\x35\xcf\xad\xb6\xe6\x96\xb3\xc7\xae\x6a\xca\xbb\xa4\x32\xff\xc8\x43\x99\x5d\x18\xfa\xd0\xfc\x23\xc3\xba\xd9\x6a\x7b\x19\x3b\xde\xf9\x47\x10\x76\x9d\x73\x42\xa7\xe2\x8b\xac\xf1\x70\x99\x0d\x3f\x8a\x52\x52\xcf\x3f\xa2\xc7\x70\xf2\x39\x5b\xee\xf8\x3d\x2e\xb2\xc0\x2a\x3e\xa7\x9f\xee\xb4\x5b\xe7\xb2\x9b\xb0\x7e\x54\xb3\x86\x43\x13\x73\x55\x05\x2b\x2e\xf9\xed\xd3\x53\x66\x37\x56\x78\x26\xf7\x28\x7e\xf1\x9c\x74\xcc\xa2\x4c\x02\xe2\x4d\xb2\x9e\xf5\xc3\xd3\xc6\xa6\xa3\xd0\xe2\x12\xcc\x97\xee\xcb\x46\x37\xeb\x64\xcc\x32\xdc\xc9\x7e\x88\xc6\x7d\xa0\x99\x0f\x96\xaf\xb4\x78\xdc\x07\x7f\x92\x6d\x88\x34\x49\x8d\xe7\x06\xc6\xa2\x04\x8c\x54\x8b\xf9\x27\x3f\x83\x37\x3b\xf4\xde\xe4\x8e\xa1\xe0\x56\xb7\xd0\xac\x60\xcc\x20\xed\x7c\x80\x9e\x3d\x78\xec\xc9\x23\x4f\x7e\xec\xd4\x27\x0f\x7f\xc6\x23\xb5\x43\xcf\x1c\x3b\x76\xf8\xc9\x13\xa7\x8e\x1d\xfe\xaf\x67\x0e\x1f\x3f\x21\x53\x75\xe4\x0c\xe5\x94\xc5\x1f\x93\xc9\x39\x75\x4a\xa2\x7d\x8a\x91\x17\x06\x24\xe6\x0e\x16\x1b\x71\xbb\x72\x2b\x47\x27\x60\xa4\xcd\x4f\x9d\xf5\x59\x24\x88\xa0\x23\x55\xa9\x93\x8f\xa3\x82\xf8\xf0\xf6\x6e\x4a\x6f\x22\x8c\xac\x50\x4e\x8e\x74\x3e\x06\xc3\xe2\x15\x27\x0f\x87\x86\x8d\x12\x2c\x4d\x6b\x05\x29\x43\xe5\xf3\x10\x5e\x26\x89\x1d\x41\x5a\xda\x0e\xac\x34\xd1\x7a\xbb\x87\xbb\x68\xad\x53\x2e\xb7\x6b\xd2\xee\x5a\xdb\x32\xf4\xbd\xf6\x28\x1a\xb5\x54\x2e\xcf\x0c\x46\x9e\x59\x05\x9e\xe1\xdc\x5a\xe6\xd6\xa2\x76\x9a\xac\xaa\x50\xa6\x9e\xe7\x99\xd5\xb7\xf0\x94\xd1\xcc\x1d\x43\xc8\x01\x0b\x1b\x04\x9f\x26\xab\x71\x83\x27\xa8\xa6\xef\x90\x12\x97\xd4\x22\x72\x56\x3a\xc8\xc1\x1c\xcd\x84\xb4\xed\x87\xc7\x39\x65\xfe\x32\x91\x78\x9f\x21\x47\x38\x59\xd1\x6d\x63\xe3\xd1\x29\x63\x3b\xd2\x13\xcb\x2a\x02\x53\xe7\x15\x0b\xfd\x14\xf9\x7e\xae\xee\x98\x70\x59\xb1\x8f\x57\x10\x1e\xd7\x6a\x8c\x70\xbb\x26\x86\xe9\x98\xa4\xa0\x4b\xf0\x0a\x0e\x45\x1a\xf8\xb9\x7a\x9a\xfe\xff\xd9\x7b\xdb\xdd\x46\x92\x65\x41\xec\xbf\x9e\x82\xaa\x33\x97\x5d\x29\x26\xc9\x2a\x7e\x49\x2a\x29\xc5\xab\xee\x56\xcf\xf4\x99\x6e\x69\xa6\xa5\x9e\x39\x33\x14\x47\x53\x22\x93\x62\x4e\x17\xab\x38\x59\x49\xb5\x34\x12\x17\xe7\xc2\xd8\x85\xe1\x5f\x36\xbc\x86\x01\x03\xde\x5d\xff\x5a\x18\x36\xbc\x6b\xc0\x5f\x0b\x03\xbb\xc0\xfa\x49\x7c\xef\x03\xec\x2b\x18\xf9\x55\x95\x55\xac\xa2\xd4\x3d\x3d\xe7\x9e\x73\xaf\x1b\x33\x54\x55\x56\xe4\x57\x64\x64\x64\x64\x64\x44\x64\x10\xc8\xd5\x98\xd7\x7c\x8d\xde\x93\x70\x1c\xbd\x6f\x44\xa1\xdc\x7d\x2e\x42\xce\xcf\x39\xc6\x0a\x3f\x98\x3c\xa9\xc0\x7e\xe4\xba\x5a\xbd\xb6\x79\x6d\x6a\x3c\x97\x70\x53\x8f\xe5\xfd\xbd\x7e\x92\x1f\x75\x20\xd0\x4a\x59\x4f\x7c\x00\xc5\x2c\x9a\xd8\x86\xe4\x26\x4b\xa8\x8c\x84\x11\x4d\x18\x31\xe1\xbf\x50\x89\x68\xe5\xbd\x1f\x27\xc6\xfb\x60\x23\xa9\x6a\x12\x8d\x16\xb1\x68\x91\x88\x93\x35\x26\xe3\x67\x1c\x28\x1b\x6b\x8c\x4c\xec\x4c\x23\xae\x14\xa2\x63\x00\xee\xca\xf1\xbc\x21\x83\x7e\xda\x0e\x8c\x56\x2c\x52\x80\xf0\xec\x36\x0c\x2c\x6d\x6b\x20\x7c\x12\x86\x95\xb7\x42\xd5\xe5\x87\x95\x93\xc3\x05\x9b\x56\xf4\xc4\xae\xb0\xa9\xcf\x2a\x1c\xc5\x71\xe5\x36\x5a\x50\x39\x71\x2a\x87\xf3\x79\x85\xc4\x95\x31\x9e\x53\x2c\x7c\x02\x44\xcc\x15\xbe\x27\xac\x5c\xe2\xf3\xb0\x92\xf9\x27\x9b\x27\x02\xbe\xfb\x95\xc9\x42\x5c\x62\x43\x71\x80\xfd\x18\xc3\x8a\x1f\x57\xc6\x11\xaf\x3a\x8e\x78\x89\x7e\x65\x1e\x31\x1c\x4a\x7d\x1b\x1e\x2d\x28\x61\xb7\x95\xeb\x45\xc0\x27\x99\x8c\xde\xd5\xc8\x17\xff\x05\x19\xcb\x70\x3b\x15\x15\x06\xb0\x72\x79\x5b\x89\x31\x63\xbc\xd4\x1f\x45\x04\xda\xb7\x61\xec\x4f\xf0\x1b\xd5\x27\xaf\xc2\xe8\x02\xff\xc8\xdb\x23\xba\x24\xbd\x32\x32\x3c\x3a\x53\x89\x05\x71\xa3\xa0\x18\xa9\xcc\xc1\xa8\x70\x8c\x7c\x11\x65\xcb\x2e\x9d\x84\xe5\x33\xc5\x07\x9c\x2c\x18\x99\xe1\x68\xc1\x8c\xc0\x6b\x81\xcf\x30\xb5\x47\x19\x0a\x29\xa2\xc1\x94\xe2\x60\xc5\x5f\xb0\x69\x44\xc9\x2f\xd2\x18\x8a\x7f\x19\xe3\x90\xf0\x2f\x11\xe5\x63\x6d\xb8\x75\x70\x00\x8d\x3f\x11\xdf\xfd\x3d\x89\xb1\x20\x65\x8a\x47\x98\xf0\xf1\x53\xc1\xe2\x45\xa0\x6e\x31\x09\x55\x3d\x0d\x8b\x8b\xe6\xd0\x75\x1c\x71\x6c\xa1\x26\xa8\x3f\x96\x52\xf9\x2b\x12\x33\xce\x23\x6d\x2b\x96\x9d\xb5\xe0\x42\x1c\x77\xa8\x0b\x92\x32\xfc\x27\x99\xa1\xba\x14\x89\x98\xb5\x05\x2d\xa1\xca\x73\x67\xf0\x7a\xed\xf7\x26\x3e\x29\x9e\x93\x59\x61\x90\xbc\x29\x57\x2a\x23\xc9\xd5\x15\x2f\x37\x99\x86\x5a\x0f\x33\x0a\xb0\x1f\xbe\x9d\xdb\xa2\x0e\xf5\x78\x97\x7c\xa1\x67\x72\x90\xf8\xe7\x15\x36\x26\xc1\xe6\xf2\x75\x65\x18\x59\x61\x10\x3c\x0e\x9d\x6d\xeb\x4a\xb1\x4b\x00\xdb\x5d\xd5\x9c\xb4\x7e\x23\x1a\xe0\x88\xcb\x88\x52\xfb\xa1\x89\x48\x95\xa5\x49\x4a\xe9\x10\x58\x34\x57\xa5\xea\xd8\x87\x61\x19\x23\x2a\x2e\x5d\xf5\x6d\xc5\x27\x29\x58\x95\xcb\x52\xa3\xfd\xfa\x9c\x92\x6b\x9f\xe1\xe6\x6f\x6d\x4c\x16\x5d\x63\x4a\xc9\x18\xbf\x8a\xfc\xf1\xa9\xd0\xa1\x14\x99\xec\x51\x1c\x63\x56\x04\xc2\x21\x36\x5d\x69\xef\x54\x58\x00\xdf\xd6\x27\x1e\xcd\x36\x96\x6c\x97\xa2\x71\x34\x12\xe2\x8c\x5a\xac\x75\x54\x3a\x4b\xaa\x71\x2c\x00\xc3\x14\xe4\x0a\xeb\x00\x9e\xf1\xd3\xdb\x33\x19\x08\x34\x85\x1c\x38\xc3\x0d\xda\x88\xe9\x08\x61\x18\xf2\x45\x1e\x87\xec\x38\x1a\xe3\x06\x11\xa1\x3f\xd5\x05\xeb\xc2\x85\x45\x19\x94\x6e\xba\x66\xfc\xdb\x07\x3d\x2e\xd6\x79\xb5\x28\xa3\xfc\x51\x34\xc6\x8f\x15\x62\x3f\xc5\x3e\x37\x4c\xa3\x2d\x24\xa7\xee\xa1\x08\x8f\xba\xd2\xfa\x4b\x3f\xc6\x6f\x69\xe0\xad\x31\x84\x55\x9b\xe1\x29\x63\xf3\xd8\x6b\x36\x83\xe8\x8a\x84\x0d\xc9\x57\xe2\x46\x88\x59\xd3\x34\xf8\x64\x38\x0c\x7d\x19\xc9\xaf\x66\xa9\xfe\x37\x35\xff\xc4\x16\xa7\xe9\x04\xc4\x13\x5b\x12\xd3\x48\x17\x98\x05\x40\x6b\x14\xcd\x66\x22\x38\x98\x3e\xa6\x4b\xce\xae\xbd\x81\xe5\xcf\x49\x5d\xd9\x5b\x70\xd0\x80\xe0\x90\x5d\x90\xb1\x35\x84\x2b\x27\xdd\xde\xc0\x8a\x47\x91\xb8\x30\x36\x8c\x64\x10\x6a\x8a\xe3\x79\x14\xc6\xf8\x62\xc6\xc7\x66\x08\xf5\xfb\xeb\x68\x8c\x0b\xdb\x65\x02\xc8\xfb\xc1\x41\x92\x49\xd5\xf2\x20\x0e\x07\x29\x9e\x74\xd6\xb3\xdb\x39\xb6\x00\xb4\xe4\xa1\xd8\x90\xe3\xc7\x9f\x93\x6f\x64\xbf\x3c\xcb\x6d\x38\x16\x34\x61\xd7\xb6\xed\x4c\x5e\x8a\x2b\xc8\x8d\xb7\x4e\x2e\xb0\x6f\x29\x29\xc9\x95\x7c\xcf\xf2\xa9\x4c\x80\x01\xb9\xc3\x58\xe1\x4e\x05\xca\x9c\x94\xec\x39\x51\x95\x6d\x16\x0b\x8e\x94\xd7\x59\xc9\x3e\x76\xe7\xf7\x29\xa6\x0d\x29\xb6\x57\x11\x33\x27\xbb\xdf\x06\xf2\x26\x25\xc1\x6a\xe2\xb9\x3f\xc2\xf9\xb1\x97\x86\xcf\x05\x58\x5d\x6b\xfb\xcd\x71\x2a\xad\xab\xf2\xc5\x25\x06\xd3\x63\xb9\xb0\xa9\x10\x93\xc7\x2b\xb5\x28\xa5\x16\x1f\x6e\x6d\xac\x09\xa4\xb9\xb7\xb6\x84\x53\xa1\x39\xcb\xcb\x03\xf7\xf7\xe9\x66\x89\xe6\x3f\xdf\xdf\x5b\xd2\xbd\x24\xb5\x12\xd1\x7e\x1a\x59\x27\x14\x11\x29\x10\x68\x4c\x15\x56\xe5\x09\x07\xcc\x15\xb2\x5c\xe9\xa0\x8c\x80\x69\x92\x1f\x59\x47\x7e\x79\x97\x9c\x47\x70\xe8\x9c\xb7\xe0\x6f\xcb\xa3\xcd\x90\x8d\x25\x7c\x3a\xdf\x05\xcd\xa6\x13\x2e\xec\xcf\x49\x43\x02\x71\x2a\x91\xdd\x30\xf8\x6c\x9e\x35\x0d\x2c\x7f\x34\xc2\x71\x7c\xc1\xa2\x77\x38\x14\xfc\xee\xf1\xcc\x01\x40\xc1\x3d\x0b\xe1\x34\x5f\x55\xde\xb6\x45\x16\x37\xeb\x1c\x2a\xd7\x0d\x8d\xe4\x22\x0f\x8a\x3e\x1f\xc9\x21\xc4\x84\xcf\xb8\x1f\x03\x79\xc7\xa8\x8e\x83\xa3\x34\xc6\x4a\x80\x9e\x5c\x1e\xc6\xb7\xe1\xe8\x65\x48\x98\xb8\xa7\x59\x6c\x3b\x12\x55\x88\x0a\x56\xaa\x93\x21\x41\x0f\x2a\x47\xe4\x35\xaf\xaa\xf4\x17\x4f\x53\x19\x08\x6c\xac\x56\x69\x0a\x54\x2f\x9e\x0a\x53\x0f\xbe\xf7\x49\x95\x0f\x52\x0a\x07\x4b\xa9\xe5\x4b\x65\x2d\x60\x5b\xcd\xa6\xc2\x76\x43\xa3\x5f\x2d\xda\x61\xcd\x6a\xc6\xe3\x77\x8d\x9f\x62\x69\x37\xc5\xf7\x30\x99\x45\xab\xa0\x1d\x0c\xae\x26\x56\xab\xf6\x6a\xa2\xf0\x24\x58\x88\xdb\x66\x57\x3f\xda\xf2\x0c\x22\x41\xbe\x9f\x1e\x39\xdc\x2d\x62\x4c\x5f\x8e\x3d\xdc\x10\x0f\xcf\xa1\xa4\xdb\x33\x4e\xb6\x1e\x6e\x18\x6f\x10\xdf\xcc\x09\xc5\xf1\x4b\x9e\x9e\x3c\x2f\x53\xb6\x74\x45\xfd\x90\xe1\xf1\x29\xa7\xd0\x58\x44\x23\xca\xa4\xa0\x1c\x04\x80\xec\x83\x4d\x1d\xd5\x2d\x31\x65\xb3\x78\x95\xde\x93\x89\xb4\xc2\xf6\xf4\x44\x92\x97\xc7\xf3\xd5\x9b\x77\x43\x36\xad\x84\x4f\xa6\x00\x16\xdc\x74\xb9\xe0\x30\x97\x42\xd5\x0a\xac\xf8\x62\x01\xa8\xe4\xa5\x42\x98\x54\x96\xba\x6e\x35\x5a\x16\x80\x37\x93\xcb\x59\x50\x08\x2a\xbe\xc8\x3a\x47\x53\x3f\x0c\x31\x17\xb5\x0a\x21\xd3\xcf\x5a\x66\x92\x33\xa4\x10\x58\x7e\xe2\x38\x08\x2f\xde\x9e\x5a\x00\x3e\xa8\xea\x8c\x94\x4d\x92\xd4\x52\xc4\x22\x56\xb8\x54\x62\x82\xbb\xc4\x3f\x8a\x6f\x62\x31\xba\x5b\x66\xe2\x6e\x89\x55\x50\xe2\x1c\x40\x8a\x70\x83\xf3\x4e\x2e\x3f\x69\x2b\x12\x25\xa5\x19\x38\x4e\xac\xe5\x56\x6b\x5d\x9d\x3b\x05\xb7\x30\x1b\x87\x9d\x0f\x72\x07\x71\x96\xf8\xe2\x69\x43\x08\xdb\x59\x8b\x37\xd9\xd4\x37\x8a\xbf\xf7\x73\x3c\x20\x84\xd9\xef\xc0\xcb\x01\x10\x28\x8d\xc1\x16\x31\xdf\x04\xdf\x49\x82\xc4\x8a\xdc\x2e\x62\x49\x6f\x0c\xf2\x32\x2e\xc4\x45\x11\x54\xf0\xf4\xa5\xcd\x60\x08\x69\xca\x28\x7c\x19\xf9\x5e\x61\x40\x5f\x2d\x21\x4b\xf6\x36\x1d\x38\x8a\xa2\x77\x84\xcf\x12\x45\x47\x29\x52\x25\xf5\xa4\xc4\x98\x7e\xd1\x24\xa8\x49\x39\xfd\xa2\x09\xd8\x20\x37\x43\x98\x49\x89\x2c\xa1\xaf\xf4\xab\xa2\x2a\xb0\x5c\x66\x24\x88\xf8\x51\x0b\x55\xf9\x26\x2f\xe7\xe2\xb8\x76\xeb\xf7\x1b\x0a\x10\xf4\x21\xd6\x93\xdf\xe8\x25\x12\xc4\xfb\xf7\xef\xd3\x15\x81\xcb\x10\x63\xe2\x07\xd1\x95\x6c\xb8\x55\xb8\xe5\x1a\x93\x78\x1e\xf8\xb7\xc6\x76\x29\xf9\xa4\xb6\xb8\x6a\x1b\x93\xf2\x39\xf6\x10\x9f\x53\x65\x7a\x4a\xaa\xcc\x0b\x26\x2b\xf9\x3f\x74\xd7\x22\xf9\x41\xf1\xe7\xfc\xb4\x95\x22\x80\x9c\x40\x89\xbe\xef\x59\x34\xc6\xd5\xaa\xd5\x72\x1c\x69\xe2\xb6\xf2\xb1\xc0\xb2\x2c\xc6\xb4\x22\x75\x3c\x78\x9c\xd5\x1e\xa6\x5c\x04\x4b\x83\xd3\x75\x64\x98\xf3\x7e\xff\x8b\xd2\x34\xe4\xda\xbe\x42\x7e\xf2\xbb\x20\x3c\xc1\xe4\x1e\x21\xc2\xe6\x68\xec\xef\x6f\x7f\x5b\x1a\x72\xe1\x2f\x6b\x84\xca\x7a\xb1\xba\xd9\x18\x8d\xa2\x45\xc8\xe2\x86\xcc\x22\x77\x1c\x5a\xb9\x73\x2d\xf5\x3b\x16\x14\x5b\x8b\x6f\x92\x7b\x8e\x56\x98\x8d\xcc\xec\xcf\x45\x54\xf0\x99\x91\x5d\x64\x24\xe1\x24\xb2\xd6\xaa\x6e\xd4\x31\xea\x85\x0a\xec\x76\xe1\x0b\x4c\xc5\x26\xb7\x29\xd9\x9e\x48\x05\x12\x8e\x99\x8a\xec\x27\xaf\x39\x89\x4b\xa8\xa6\x00\xd2\x82\x96\x05\xb2\x7a\x18\x4b\xee\xa4\x1e\xd8\x68\x41\x09\x26\x56\x52\xce\xf4\xa4\x98\x7a\x41\x3e\x7c\x0b\x96\x88\x35\x39\x19\x46\x6a\x0e\xa0\x3a\xdf\xbd\x5c\x90\x80\xb3\x6c\x1b\xe4\xe4\x18\xb3\x28\x82\x56\xf5\x50\xb2\xf9\x56\x12\x87\x4e\x2a\xf3\x56\x46\x94\x2f\xcd\xc8\x5c\x96\xc9\x97\xf8\xd6\xca\x86\xd5\x14\x5f\x24\x37\x07\xe2\xac\xd2\xa6\x5c\xea\x28\xe2\xb6\xd2\x3a\x66\x20\x6c\xa5\x48\xf1\xed\x29\xa9\x18\x37\x60\xc3\x6a\x95\x26\x46\x83\xe2\x8e\x6f\xe5\xc8\x50\x18\x25\x4c\x77\x4d\x18\x4f\x89\xe3\x96\xc4\x51\x9d\xc4\x95\x99\xb2\x4a\x67\x53\x1c\xe3\xc4\x0f\x20\xcd\x24\x5d\xb7\x84\xcd\x95\x32\x44\x86\x15\x2b\xf5\x98\x78\x50\x82\x4b\x6e\x35\x8d\xc5\x5e\xf0\x0f\xaf\x5f\x7d\xc1\xd8\xfc\x8d\xa4\xae\x8d\x38\x51\xac\xbf\x26\x33\x41\x50\x42\xc6\xd1\xbe\x9b\xcd\x9f\x62\x21\x06\xc5\x8d\x68\xe5\x5c\x56\x9e\x71\xff\xfe\xf4\xe4\x58\x1d\x59\xc7\x8d\x84\x30\xf1\x0d\x03\x1b\x51\xc3\x5f\x8c\x09\x0e\x47\x18\xa1\xe4\x9e\x3c\x71\x42\x0d\xd0\x01\x55\x2e\x6d\x7e\x1c\x93\x2b\xce\x66\xee\xd2\xd0\x2c\x19\x8a\xe4\x0c\x50\xbb\x80\x21\x84\xd2\x42\x73\x05\x12\x3b\x63\x52\x8d\x75\x00\x81\x1c\xf6\x39\x25\x55\xd2\x4b\xd0\x2a\xf2\x7e\xa8\x46\x85\x0f\xd4\x13\x5d\xf4\x13\x79\x9d\x7d\x65\xe6\xdf\x56\x2e\xb1\x1e\xa2\x86\xc5\x5b\xb2\xa6\xd6\x43\x31\xe3\x54\x1d\xe9\x55\xd7\x95\x88\x56\xa6\x7e\x5c\xb9\xc4\x38\xac\x30\x3c\x9b\x63\x3e\xc0\xef\x09\x9b\x36\x2a\xdf\x45\x0b\x5d\x4b\xbc\x10\x6c\xb5\xc2\xa2\x8a\x5f\x79\xc2\xe7\xe0\x22\xc6\xe3\xca\x18\xcf\x17\xec\xf6\x49\xc5\x67\xcc\x1f\xbd\x13\x6d\x58\x8a\xf1\xc0\xd9\xcb\x35\x8c\x63\x9d\x95\x96\xfd\x78\x96\xef\xb6\xe2\x2e\x95\x89\x4f\x02\xd5\x98\x8a\x94\x99\x2b\x4f\x3e\xbb\x8b\x95\x64\xce\xc7\x71\xf9\xa4\x62\x4b\x24\xf1\x2f\xd1\xf2\x89\x04\x30\x87\x7a\xf9\x04\x34\x7e\xd4\xed\xe2\xf3\xcc\xfa\xfc\xe8\xcc\x82\x3f\x72\xf0\xbe\xc9\x86\xd0\x67\x77\x05\x1e\x7e\x7a\x37\x2d\x61\xc0\xf2\x47\x4e\x6f\xc2\x26\x56\xae\x86\x60\xa9\x42\x06\x62\x74\x80\x7f\xdd\xe2\xf8\xe7\xa7\x83\xfb\x88\xb5\xf1\x43\x17\x46\xb9\x2a\x7e\xcc\x8a\x06\xad\xe9\x58\x2c\x10\x9f\x70\xd1\x2a\x53\x04\x3e\xac\xda\x4b\x35\x12\x1f\x20\x6f\x09\x14\x89\xd3\xa2\x91\x1f\x4c\xa3\x98\x79\x9d\x96\xe3\x28\xd4\x24\xd6\x7e\x00\x4e\x8b\x4f\x81\xa6\x63\xd1\xfa\x8f\xa4\xba\xbf\x64\x41\xec\x4f\x49\x65\x9a\x14\xa4\x70\xe2\xcf\x39\x8e\xfc\xe0\x62\x4e\xa3\xd9\x9c\x7d\x52\x2a\x54\x7a\xbb\xb2\x03\xac\xf4\x73\x09\xd1\x96\x6d\x2f\x1f\x24\x5a\xdd\xa9\xaf\x44\x9f\x8a\x2b\xcf\x80\x70\x44\x2c\x58\xf4\xeb\xe9\x7d\xc7\xf9\x2d\xe9\x7d\x35\x3c\xdd\x5f\x14\xc9\xaf\x36\xbf\x50\x3f\x21\xc1\x48\x28\x48\x7e\xe1\xc7\xf9\x03\x65\xa5\x7c\xf9\xf3\xdd\x29\xea\xc0\x8e\x8f\x3e\xe7\xf8\x7b\x1d\x15\xdd\x5a\x35\x91\x85\xf4\x52\x8e\xb3\x0c\x8c\x05\xa0\xd8\x7b\xbc\xc9\x24\x07\x39\x1c\xaa\x2d\x47\x2e\xe7\xf2\x43\x36\x37\x2b\x15\x3c\xb8\xf7\x50\xe4\x30\x2c\xde\x82\x24\xc7\x05\x7a\x40\xa4\x13\x0a\x58\x7e\xe0\x20\x7f\x90\xa8\x53\xa4\x15\xfc\x14\x43\x4b\x0b\x86\xb6\x70\xd7\xfa\x27\xda\x4d\xfe\xa3\xdb\x17\xde\x65\x38\x93\x3a\xb5\x82\xa5\x5b\xac\x15\x3a\xa3\x8f\xa0\x33\xc9\xdc\x3e\x92\xa3\xc0\xd2\x20\x2c\x8f\xb6\xd1\xc8\x47\x4f\xf8\x6d\xec\xf0\xe5\x05\x19\x05\xf4\x3c\x8a\xc2\x91\xcf\x70\xe8\x33\x3c\x4e\x2f\x99\xf7\x06\xd6\x8a\xc6\xda\x82\xd6\x8a\x5c\xa4\x04\x9a\xbc\x66\x3b\x31\x07\x52\xb2\x50\x6a\x4e\x04\x13\x72\xbf\x58\x88\x85\x5e\x2f\x2a\xe5\x22\xd7\x30\x59\xcc\xb2\x46\xc2\xc2\xb4\xe7\x4b\x7c\x5b\x22\x85\x48\x55\xca\xc3\xb2\x8d\x3c\x47\x93\x2d\x2c\x31\xa2\xd2\x1f\xcb\x57\xb3\x8c\xfa\x46\x5c\x94\x2c\x9c\xd0\x0a\xab\x15\x1d\x5e\x5f\x92\xa4\x89\x53\xe9\xd9\xcf\x8b\xbb\x30\x52\x44\x54\x20\x68\x26\xe4\xcd\x5b\x4c\xe8\x22\x7b\x96\xb4\xa2\x0c\x64\xaa\x4b\xbf\xbf\xb7\x95\xad\x76\x82\x6d\xb7\x97\x5e\xaa\x9d\xaf\x01\x03\x20\x98\x7c\x4e\xa5\x27\x67\x56\x4e\x9a\xc8\x8f\xe1\xaf\x14\x26\x6c\xab\x69\x6d\x22\x64\x63\x34\x50\x07\xe3\x5c\x64\x14\xc6\xd2\xc2\x73\x7f\x14\x05\xd0\x6a\x36\x2d\x98\xff\xca\x85\xca\x95\xc4\xb9\xcf\xa6\x9c\x67\x0f\x15\x2f\xb2\x00\xd0\x9e\xd6\x75\x17\x54\xab\x36\xae\x21\xab\x69\x01\x88\x41\x4d\xc7\xa2\x57\xed\x6b\x4c\xd9\x2c\x90\x76\x10\x02\x15\x82\xd9\x7f\xcd\x59\x42\x51\x38\x99\x64\xe5\xce\xce\xb0\xac\x55\xd1\xea\x6c\x4b\xf5\x65\x2b\xee\x17\x29\x53\x14\x51\x11\x32\xa1\x7d\x3c\x0c\xb3\x41\x79\x84\x87\x46\xea\x6a\xb8\x84\xe9\xd2\xb4\x6a\x5b\xa7\x66\x9f\xbe\x69\x7d\xb5\x63\x1a\x5b\xfd\x0f\x94\x3d\x3e\x99\x62\x35\x67\xfd\x67\xaa\x54\x55\x74\x0c\x18\xa3\xba\xbb\x89\x10\x49\x5d\xe9\xe3\x2c\xcd\xff\x23\x58\x53\xc9\xc4\x8e\xab\x55\x15\xbc\x64\x13\x21\x7f\x35\x10\xd6\x03\x95\x4f\xfd\xb8\xe2\x87\x15\x12\x8e\x22\x2a\xfc\x30\xf4\x7d\x10\xa2\x48\x1d\x3a\x4b\x45\x6d\xbd\xc4\x15\xeb\x49\xcd\xaf\x3d\xb1\xa0\x08\xc9\x45\x62\xfe\xae\xaa\xaf\x3d\xb1\x9e\x14\xaf\xf2\xcf\xa2\x31\xf6\xc6\x78\x55\xbf\x36\x88\x86\xe0\x03\xd6\x7e\x7f\xdd\xda\x9f\x0f\x4e\xfd\xe7\xb5\xdb\x7b\x84\x45\x5b\xbe\x03\x2b\xfb\x3d\x6d\xa5\x24\x01\xcb\xac\xda\x56\x96\xee\x92\x85\x58\x14\x72\x11\xf8\xe1\x58\x0a\x37\x32\x22\xaf\x56\x6d\x7c\xc0\x01\x76\xa9\x86\x81\x62\x7f\x7c\xf1\x9e\x12\x39\x5b\x45\x7d\xaf\x64\x75\x25\xab\xa8\x01\xa1\x94\x22\xa2\x4d\xeb\x34\x13\x06\x80\x05\xad\x89\x1f\xc4\xbf\x8d\x61\xef\x3a\xca\xcb\xdf\x51\xf0\x20\xe5\xb9\xbf\xdd\x95\x17\x65\xc4\xa5\xa3\xca\x17\xf5\x44\x63\xa3\x2e\x7d\xdc\x0b\x37\x68\xa5\x0e\xaf\x7f\xaa\xd9\x23\x7c\xa7\xb4\x47\x94\xbc\xbe\x5b\xfb\x98\x8a\x50\x55\x61\x45\x76\x38\x56\x87\x4e\x02\xe4\xce\xbc\x08\x12\xdc\x95\xfa\x82\x72\x1c\x21\x6b\xb5\x0a\x6b\xb9\x2c\xac\x39\x5c\x67\x0d\x4d\x17\x39\xb1\x4c\x8a\x24\x12\xea\xd1\xa7\x63\x24\xb9\xe9\x45\xdb\x52\xe6\x3d\xbf\x58\x91\x4f\xad\x58\x12\x72\x19\x0c\x9f\xaf\xe2\x3c\xd0\x97\x55\xc5\xaa\x2a\x21\x38\x19\x61\x0b\x72\xe5\xc5\x49\x03\x0c\x57\x5d\x68\x31\xba\xc0\xe2\x5e\x94\x12\xa7\xcd\x18\x40\xb5\x10\x23\x84\xd2\x5b\x66\xd6\x18\x50\x03\xbe\xb4\x69\x4f\x4a\x1c\xc4\xb8\x12\x89\xb3\xa3\xd0\xb6\x8e\x23\x56\xf1\x2b\x82\xf6\x2a\x0a\x58\xc5\x27\xdb\x20\xea\x0a\x9c\x67\x9c\x2e\xec\x3b\x49\xd4\x1e\x46\x07\x24\x91\xac\xcc\x11\xf1\xf0\x12\x88\xb3\x29\x90\x99\x48\x05\xf6\xd3\x2a\x74\xfe\x38\x0e\xea\xf8\x46\xac\x30\xeb\xa2\xeb\xaf\x73\x33\x32\x2f\xc2\x7a\x23\xb2\x3c\x3f\x7d\x95\xc6\xa5\x82\x54\x5e\xfd\xc3\x1a\x99\xeb\x90\x04\x24\xca\xfb\x72\x89\x2a\xcd\x00\x28\x06\x71\x2b\xf9\xc4\x8c\xe3\x01\x96\xd0\xac\x57\x5f\x17\x74\x77\x41\x42\xc2\x64\xda\xef\x85\xb9\x1a\x32\xa2\xd2\xcc\x31\x2d\xa9\xc1\x76\x52\x9c\x29\x33\xfa\x82\x46\xc7\xa8\x38\xea\xeb\x83\xb7\x43\x3d\x64\x55\xf6\x9b\xf1\xd1\x22\xbf\x72\xe9\x96\xf8\x3a\x1a\xe3\x20\x2b\x0e\xc3\x4c\xfc\xfb\x62\x4c\x25\x81\x04\xb9\xd4\xc8\xf1\xd3\xa7\xa5\x36\x91\xac\x31\x9a\xe2\xd1\xbb\x57\xc2\xb4\x51\x04\x20\xf6\xf2\x49\xd0\x78\x95\xa7\xe8\x62\x77\xc7\x8a\x3c\x71\x57\xe4\x61\x3e\x2b\x85\x90\x67\x4c\x3a\xd0\x10\x47\x99\x36\x68\x8c\x44\x30\x5b\xb3\x59\x65\x76\x58\x8f\xb8\xb4\xeb\x1f\xeb\x00\x9a\x28\x49\x86\x30\x9f\x08\x73\x09\x3a\x16\x4a\xc9\x38\xaa\x7d\x95\xb9\x89\xa2\x45\x23\x69\x6e\xa4\x8a\x00\x6a\x56\x83\xc4\x87\xe6\x98\x89\x1d\x56\x72\x3f\x42\x94\x98\xf1\xf6\x8d\x25\x4a\xc5\x80\xb7\x81\x67\x93\x86\xcf\x18\x9e\xcd\x19\x36\x62\x6c\x21\x0c\xfd\x7e\xa8\x4e\xcc\x9f\x0b\xef\x5f\x1b\x03\x8f\xac\xa1\xab\x64\xe7\x9b\xcb\xb4\x14\x47\xf6\xb9\xc4\x3b\x2c\x8f\xde\x2d\x33\xdd\x82\xb8\x98\x34\xf3\xd7\x2d\x7d\x80\x48\xf3\x9b\x68\x9d\x8b\x24\x05\x25\xa8\x5c\xe3\x90\xe1\x71\xea\x3c\x05\xef\xcc\xf0\x05\x19\x67\xe3\x52\xaf\x4f\xd5\xcb\x8c\xe3\xb1\x72\xe9\x34\x53\xc8\x18\x65\xee\x29\xb1\x36\x92\x02\x85\xaa\xf3\x14\x07\x58\xc8\x4a\x56\xa3\xf4\x3a\x13\xc0\xa7\x07\x0e\xc7\xcf\xa6\x24\x18\xdb\x46\xe9\xda\x3f\x5a\x3b\x16\x9b\x0d\x57\x32\x88\x0d\x96\xd0\xf4\x3d\x16\xb7\x43\x23\x84\xca\x5a\xf1\xbb\x4c\x63\x81\x0a\x68\x56\xe0\x46\xfd\xa0\x8e\x38\x7f\x2b\xd7\x5f\x2a\x39\x18\xc1\xc9\x0a\x6e\x9c\x56\x71\x3c\x45\x1d\x15\x12\x56\x30\x10\xd2\xe0\xd4\x8f\x4f\xde\x87\x49\xeb\x28\xd0\xe1\xcd\xe2\xf7\x84\xcf\x49\x3c\xa0\x43\x70\x37\xf2\x63\xbc\xe9\x78\x21\xb2\x5c\x6b\x43\xde\x81\x2b\x92\x5c\x9e\xe4\xe8\x24\xd5\x2a\x2f\x14\x21\xbc\x96\x4c\x4a\x18\xb4\x66\x21\xab\x16\xa6\x31\xb3\xb5\x96\xc2\x02\xcb\x82\xd0\xc8\x58\x5e\x0c\x7b\x7f\xdf\x75\x1c\xe1\x5b\x20\xaf\x2c\x15\xef\x1b\x99\x98\xb6\x33\x4c\xaf\xb0\x7d\x17\xe0\x09\xf3\xe2\x11\xc5\x58\x5d\xbb\xdc\x6c\xd5\x59\xb3\x05\x59\x34\xd7\xc9\xb2\x88\x66\xab\x4e\x9b\x2d\x28\x60\x3c\x06\x65\xa2\x47\x97\x9c\x4f\xd8\xf4\xfe\x9e\xaf\x65\x1b\xe6\x8c\xd2\x51\x3e\x74\x60\x97\x70\x85\x8c\x73\x24\x9b\xf1\xfd\x37\x49\x5c\xc6\x28\xf8\x14\x34\x9a\x0b\xe1\x54\x74\x91\xa2\xf8\x94\x8f\xbb\xbb\xc6\x4d\xf4\x43\x6f\xd3\x97\x64\x9a\xf7\x5c\xd4\xb7\x73\x59\x35\x96\xae\x87\xf7\xf7\x76\x39\xa4\x79\x8f\x17\x00\x90\xfe\xfa\x58\xe9\x6a\x21\xcb\xce\x9a\x8b\xaf\x68\x74\x73\x2b\x56\x7b\x28\x83\xba\x4a\x95\x7a\x6c\x84\x70\x7d\xd8\xfb\x38\xeb\xc2\x2a\x84\x59\xa1\xf8\xc7\x6c\x31\x17\x7a\x71\x51\x8b\x11\xc5\x80\xcb\xcc\xeb\xb5\xf1\x66\x03\x12\x5d\xf0\x06\x6e\x14\x44\x22\xcd\x44\x69\x90\x3a\xf9\x91\xbc\x20\xd9\x52\x1e\x29\x18\x40\xfd\x21\x17\x01\x8f\x43\xac\x44\xc5\x93\x36\x6a\xbc\xf9\x2a\x4a\x5d\x82\x6e\x4e\xd4\x9a\xe2\x75\x00\xa1\x42\x8f\xd8\xa8\x30\x39\x19\xeb\xfc\x9d\x98\x2b\x6a\xda\xa4\xe7\x8f\xde\xf7\x62\x70\xe7\xab\x85\x3e\x66\x3e\x65\x27\x73\x1c\xf2\x5d\xa5\x5d\xec\x81\xa7\x25\x95\x64\x02\x17\x81\x19\x31\x8e\x44\x00\x75\x09\x5c\x08\x9a\x9e\x77\xeb\x56\x4c\x48\x48\xe2\xa9\x68\x06\xc4\xf2\x50\x64\x45\x94\x29\xc8\xe5\x93\x20\xc9\x93\x91\xa2\xc4\xed\xa0\xd8\xb0\x1e\x7c\xc4\x20\x7c\x0a\xac\x46\x26\x56\x5f\xf0\x8a\x1f\x46\xab\x42\x97\x6c\x66\x19\xbe\xa2\x0c\xa2\x64\xc9\x50\x74\x70\x0d\x9e\x22\x03\x4f\x49\x96\x72\x44\x49\x25\xc0\xdf\x03\xa2\x14\xef\x7e\x24\xa2\x64\x33\x0b\x11\x95\xc7\x93\x5e\x14\x1e\x8d\x25\x15\x2e\x65\x0d\x96\xd6\xca\xc1\x2a\xd6\x60\x71\xc8\x81\x07\x56\x8b\xb2\xb5\x82\x66\xe2\x93\x66\x5d\xf3\xd6\x04\x1a\xcb\xaf\x15\xc9\x01\x80\x70\x88\xb7\xf5\xf6\x27\x33\xb4\xf2\x46\xb7\xcd\x68\xf5\x70\x25\xb9\x90\xcd\xcf\x5f\xb3\xf6\x44\x78\xf0\x3e\xa9\x40\x71\x75\xc8\x6d\xb4\xa8\x4c\x22\x7a\x85\x85\x21\xb3\xbe\x46\xab\x42\x58\xdf\x52\x65\x0f\xf0\x50\xb8\x37\x15\x44\xc2\x4e\x2a\x49\xaa\xd0\x85\xb3\x48\xdd\xf4\x26\x8e\x55\xd4\xe5\x13\x95\x19\x66\xd3\x68\xdc\x48\x09\x6f\x95\xe8\x92\x0d\xd5\xdd\x32\x11\x9b\x1e\xe3\x13\xcd\x6c\xde\x50\x9b\x28\x7d\xd7\xa7\x5e\x4f\xe5\x4d\xec\xd4\xb6\x22\xc1\xbd\x36\x1d\x7d\x2d\x3a\xb5\xad\x89\xe2\x1a\xf2\x7e\x72\x6a\x5b\x23\x4d\xc4\x45\x84\x57\x28\xa2\x14\xd3\x5f\x16\xe8\x4f\x70\x1f\xb4\xa6\x4f\x8e\xf0\x64\xc9\x97\x91\x03\xf5\x0d\x01\x9e\xb5\x08\x33\x8a\x0d\x0b\xea\x68\xf1\xb9\x0f\xde\x9d\xb0\x78\x7f\x2d\x83\x5a\x49\xc1\x23\xb7\xc1\xf6\x36\x5d\x98\x2c\x67\x1e\x91\xd8\xd5\x37\xfb\x18\x99\xad\x21\x80\x29\x83\xe6\x80\x02\xe7\xc5\x90\x59\xfd\xc1\xd8\xbb\x53\x12\xc0\xdb\x18\xd3\x92\x56\x38\x30\xe5\x6a\x7a\x00\x79\xe1\xea\x94\x97\x84\x57\xde\x1d\x89\xbf\x8d\xe8\x3b\xfe\xb8\xe9\x40\x12\x9f\xa8\xf4\x4d\x07\xa6\x4b\x21\xc7\xa0\x18\x9c\x34\xae\x72\x56\xed\xa7\x43\x41\x99\x81\x75\xad\x2c\x3a\xf9\xfa\xa7\x56\xc9\x64\x9b\xab\x8a\xca\x21\xb8\x61\x76\x5c\x6f\x69\xb3\x45\xe7\xc7\x0a\x2c\xd5\xea\x5a\xd4\xa5\x17\xfa\x43\xd2\xa7\x17\x72\x21\xfe\x64\x9d\x4a\xca\xfb\xf4\xbd\x52\x43\xb6\xd2\xa9\x67\x2a\x5d\xbc\xac\x0c\xbb\xb1\xe8\x14\x5e\x8d\x50\x50\x15\x4c\x56\x9d\xdf\xa4\x23\x7c\x3b\x64\x2c\x73\x82\x5b\x20\x0c\xa3\xe5\x8a\x9d\x9e\x59\xd4\xca\x46\x25\xb7\xdf\x2d\xd8\xec\x56\xab\x36\x1b\xd0\xa1\xd8\xaf\x1a\x21\x15\x48\x66\x4d\x32\x63\xdd\xe9\x12\xf7\x68\x7a\xff\x19\xad\xd5\x00\xef\xd7\x80\x17\x35\x54\xea\xf9\xc2\x0b\x26\x32\xac\x90\xfa\xa3\x77\x78\x5c\x9f\xf9\xf3\xb8\xee\x87\xe3\x7a\x8c\x99\x11\x9f\x63\xe6\xe7\x35\x11\xeb\xe1\xf9\xe2\xfc\xe9\xb9\xe3\x99\xac\xf4\x5b\xec\xbf\x7b\xed\xcf\x51\x92\xc0\x5f\x32\x47\x6c\x34\x39\x62\x7b\xed\xcf\xef\x84\x22\x39\xb3\x73\x1a\x45\x61\xbc\x98\xe1\x2f\xf1\x2d\x50\x51\xfe\x01\x94\x0a\x55\x09\xbb\x9c\xfa\xf1\xa3\xb3\x48\xd8\x25\x0e\x19\x25\x38\xb6\x8b\x72\x3d\x8b\x82\x00\x8f\xa4\x72\x54\x4a\x09\x32\x6b\x92\x67\xf9\x0e\xdf\x7e\x58\x56\x99\x61\x29\xf0\xf3\x61\x39\x75\x96\xa5\xb6\x1b\xc1\x2a\x68\xf1\x03\xf9\x52\xf0\x25\x17\x4d\x62\xf2\x0b\xfe\xa0\x7a\x79\x86\x65\xac\xae\x5f\xcb\xec\x63\x09\x65\xb7\x19\xc4\xa6\xc9\xa5\x85\xa9\x72\x96\x32\x5c\x4b\x6e\xb0\x3e\xa6\xc4\xa4\xa0\xa5\x08\x24\x98\x4a\xcc\xd9\xde\x8b\x5a\xd1\x41\x51\x35\x14\x3c\xa6\x1e\x55\xfa\x72\x29\x14\x5e\x06\x05\x53\x98\xde\xfb\x2b\x63\xb4\x9e\xde\xce\x2e\xa3\x40\x1f\x9a\xd0\xf4\xd8\x6d\x20\xbf\x34\x08\x93\x21\x77\x87\x25\xb3\xc9\xc8\x02\x73\x59\xa0\x98\x16\x8f\x1b\x3f\xcc\x05\xf6\xfc\xe1\xb5\x9a\x85\x7f\xa2\xd9\xf5\x38\xba\xf9\x38\xda\xc8\x8f\xff\x72\x85\xd3\x84\x1f\xc0\x2a\x63\x9c\x37\xe9\xf9\x7b\x66\x95\xa7\x98\xa5\xac\x92\xbf\x94\xb0\xca\x53\xcc\xee\xfe\x7f\xbe\xf7\x1b\xf1\x3d\x7f\x3c\xfe\x04\x3c\x4a\x96\xf2\x0f\x84\xe7\x71\x52\xfc\x0b\xe4\x79\x1f\x39\x4d\x1e\x43\x00\x1f\x33\xc8\xeb\x99\x17\xc7\xf1\x87\x30\x2f\xc1\x8c\x7e\xbb\x08\xb4\xf2\x2c\xf0\xcc\xbf\x2a\xb8\x19\x90\x6f\x70\xa9\xba\x50\x5e\xa1\x12\x8d\xf8\x96\x58\x75\x19\x8d\xf5\x4b\x3a\x58\x08\xaf\x0e\x20\x52\x50\xbc\x96\xe4\x33\x7f\x51\x6c\xaf\xe8\x12\x9d\xe4\x86\x59\x18\xa1\xe4\x1c\x5d\x09\xd4\xd0\x47\xd1\x7e\xbb\xcf\x3c\x75\x02\x18\xf6\x43\x7d\x83\x9f\x54\xfd\xe8\xae\x3f\xc7\x32\x4e\x6d\xa4\xae\x42\x17\x77\xf2\x58\x91\x00\x4d\xe3\xae\xbf\xc1\x13\xde\xd0\x6a\xb5\x20\x26\xbb\xfa\xd6\x18\xe3\x51\x44\x7d\x86\x81\x8f\xf2\x49\x49\x7b\x37\x84\x95\x91\xde\x01\x08\x7b\x28\xd1\xdc\xba\xbb\x17\x1f\x20\x67\x2f\xae\xd7\x81\x4d\x10\x1e\xc4\x43\xbe\xaf\xf0\x91\xcd\x7b\x41\x6c\x1f\x78\xd1\x01\x7f\xe0\xc5\xf8\xc0\x13\x0f\x00\xdc\xdf\xfb\xe9\x26\xe7\xa0\x5d\xad\xfa\xd5\x6a\xf1\x00\xcb\x7c\xd0\x5f\xea\x05\x44\x9c\x62\x90\x51\x25\x45\xb5\x3c\x03\xbf\xb8\x60\xfe\xd5\x85\x18\xff\x8b\x8b\xa5\x02\xd2\x43\x53\x00\xa2\x06\x68\xb9\x64\xf6\x40\x9d\x95\x28\x6a\x1d\x42\x73\x52\x5b\x99\x5c\x96\xe2\x20\x40\xdd\xe0\x10\x22\x6a\x0c\xfa\x46\x86\x02\x42\x05\x23\xee\x20\x50\x0d\xd9\x30\xc8\x85\xa8\xef\x11\xba\x93\x01\x84\x7d\x84\xd1\xc1\xdd\xc8\xc6\x30\x02\xcb\x8d\x22\x62\xf3\x37\x64\x5c\x08\x0e\x37\x4e\xe0\xf2\x64\x1a\xa7\x6c\x4e\xf4\xac\x5a\xb5\x0b\x0b\xe3\xc5\x98\xd7\x14\x5b\x83\xa1\xb0\x53\x5b\x29\x2f\x05\x94\xf7\x84\xe9\xd1\x79\x36\xf5\xc3\x2b\xac\x73\x6a\x9c\x04\x42\x7b\xa4\x84\x99\x74\x5f\xba\x90\xa2\x06\xef\x40\x88\x02\x25\x9c\x6d\x24\x86\xe3\xa1\xbc\x8e\x0d\xbf\xe7\x9b\x28\x18\x28\xb1\x2a\x04\x32\xae\x33\x41\xa1\xc8\x91\x1e\xaf\x25\x19\x89\xb8\x6c\x4d\xcc\x67\x18\x8a\x6c\x0c\x12\x00\x20\x49\xb7\xb4\x23\x59\x75\x68\xcb\x36\x18\x9b\xdd\xb1\xfc\x42\x92\x2f\x0f\x73\x2f\x61\x55\xff\x41\x32\x97\xd8\xce\x3e\x46\x90\xfb\xe4\xe6\xa1\xa5\x19\xd2\x8d\x80\x05\xef\x70\xb8\x98\x61\x61\x02\xec\x6d\x3a\xf0\x0a\x33\xaf\xc8\x72\x27\xcd\xb2\x7c\x44\xc9\x6a\xf8\x3f\xb4\x74\x95\xed\x31\x35\x9c\x72\xc9\xf7\x51\xa5\x53\x43\x06\x78\x6c\xdb\x3f\xa2\x74\x95\x4d\x1e\x37\x08\xc6\x7f\x71\x81\xf9\xac\xb9\xf0\x17\x2c\xba\x20\x33\x4e\x2e\x17\x17\xd9\x1b\x7d\x35\x21\x72\xd2\x4e\xef\xdd\x83\x3e\x8c\x11\x1b\x38\x43\x18\x20\x36\x70\x87\x70\x81\xd8\xa0\x35\x84\x63\xe4\xc0\x29\x1a\x0c\xf7\xc6\xfb\x7a\xc1\xd8\x1b\xd7\x6a\xc0\x47\xf1\x60\x3c\xd4\x1d\x4b\xef\x80\xcd\xea\x7c\xe4\xb5\x5d\x04\xfa\xa0\x5a\x25\x03\x7f\x58\xad\x4e\xa5\x95\x02\x7f\x19\x38\x43\x00\xf9\x03\x72\xe4\x4d\xa5\x15\x12\x56\x02\xf0\xa8\x22\x03\x18\x0a\x8f\xa1\x41\x38\x44\xc1\x20\x1c\xca\xbb\x4e\x47\xd5\xea\xc8\x66\x60\x6f\xaa\x5b\x0a\xa6\x8d\x78\x4a\x26\xcc\x36\x6c\xef\xe4\x65\xcd\xca\xb2\x2c\x82\x8b\xfb\xfb\xc1\x10\x40\x2e\xbd\x19\xa7\x29\xc6\xf5\xfc\x90\x21\x67\x8f\xed\x27\x77\xb1\xb2\x5a\xcd\xd0\x4c\xa1\x68\xc0\x86\x50\xc4\x0e\x8d\x91\xbb\x17\xef\x6b\xdf\x93\xbd\x58\xdf\xd3\x1f\x20\x3a\x88\x87\x1b\x9c\x39\x92\x41\x30\x14\x5c\x67\xd3\x05\x4b\xce\x7f\x22\x7d\x03\x20\xab\xd7\xa1\x0b\x20\x46\xbe\xed\x37\x62\x44\x39\x72\x92\xc3\x08\xbc\x94\x66\x26\x77\x4b\x48\xd0\x9d\xe3\x39\x4b\x18\x09\x0b\x93\x34\x28\xa9\x0c\xd1\x1a\x0e\xd8\x30\xb9\x16\x7f\xc0\x86\x0d\xc5\x31\x94\x22\x8f\x27\xa1\x3b\xe2\x31\x18\x78\x9b\x2e\x54\x1f\xbd\xbb\x65\x1a\x89\x94\x67\x12\x18\xa6\x3a\xaf\xb8\x04\x56\x3f\xfb\xc2\xb9\x86\xf7\x36\x49\x5b\xfa\x8d\x19\xc2\xd0\x6f\x8c\x50\x08\xfd\xc6\x78\xe5\xfe\x3e\xbf\x11\x09\x56\x77\x7f\x5f\x36\x0d\x58\x11\xdd\xd3\x25\x58\x42\xbf\x41\x51\x56\x40\x0b\x65\xee\xb1\xb5\x99\x95\xa8\xab\x55\x25\x0c\x6b\x6b\xe9\x33\xff\xaa\x6c\x89\x4f\x04\x67\x03\x56\x73\x31\x4b\x71\xb5\x75\xb3\xb6\x84\xf9\xf1\xe6\xb2\xdc\x41\x1b\x99\xd8\x6e\x95\x89\xa8\x9e\xbe\x8d\x01\x80\x3b\xd5\xe4\x0e\x01\x71\xdb\x6b\x87\x7f\x5d\x91\xa2\x70\xb5\xca\xff\x6b\xa4\x35\xa5\x99\xe4\x58\xaa\xc6\x29\x83\x4a\xe1\x67\xc9\x8b\xf3\x1b\xd4\xa6\x65\x4d\xa7\xd0\x52\x9a\xdc\x15\x4e\x23\x7b\x81\x97\x00\xb6\x44\x83\x94\xa7\x6d\x82\x64\x0c\x12\x56\x21\xd5\xbb\x7e\x63\x6c\x53\x18\xc2\x82\xa3\x7d\x4e\x44\xcb\xc6\x25\x09\xc7\x2a\xce\xa7\x79\x79\x37\xf4\x1b\x45\xf6\x52\xb9\xde\xf6\x57\xb9\x5e\x72\x78\xb4\x2c\x60\x89\x38\xa1\x60\xde\x2e\x06\x2d\xdf\x82\x0c\x40\xc6\xab\x2b\x39\xfb\x7c\x14\x9f\x51\xf7\xd9\x36\xe6\xc8\xb2\x54\x00\x5d\x65\xa6\xf4\x1e\x5f\xce\xfd\xd1\xbb\xdf\xc7\x51\x38\x2f\x60\xba\x8f\x04\x13\x37\x8e\x06\x28\x96\x3c\x49\xa0\x2c\x06\x1b\xf2\x15\x31\x18\xa3\xe4\x8a\xff\xc4\x9c\x6c\x81\x9c\xbd\x45\xca\x8c\x17\xb5\x1a\x60\x76\x3c\x58\x0c\xe5\x0a\x30\x42\x41\x96\xd3\xd9\x83\xee\x36\x6c\x29\x16\x67\xdf\xb5\x76\xbd\xd5\xb0\xc9\x17\xd8\x27\x17\x14\x29\x97\x25\x68\xa6\x8e\x91\x24\xa2\x25\xec\x6e\x7b\x2b\x21\x62\xed\xd6\x2e\x97\xdf\x14\x2b\x40\xd4\xee\xee\x80\x25\xec\xee\xac\x40\xca\x45\x86\xc0\x68\xa3\x68\x0a\x6b\xab\xc3\x6a\x95\x6f\x6f\x91\x1d\x96\xd8\x21\x1e\x06\x41\x7a\x5b\x06\x18\x84\xc9\x9e\x60\xd8\x88\xe9\x28\xbd\xdd\xf0\xbc\x39\xf8\xa1\x39\xdc\xfa\xac\x09\xad\xa6\x05\xcc\x16\xda\x04\xc9\x6e\xc1\x48\x3e\x50\xdd\x5b\x31\x38\x87\x0b\x16\xbd\x14\x43\xf3\xfc\x36\xf4\x67\x64\x54\x74\xb3\xb5\x8b\xd0\xca\x2e\xaa\x1f\xd9\x96\x2c\xf8\x36\xbc\xb0\x6a\x18\x78\x46\x02\x13\x29\x76\xe1\x7d\xe9\xab\x17\xaa\x82\x25\x24\xb6\xf5\xd7\x01\x61\x4d\x8a\xfd\x11\x23\xd7\xb8\x8e\xa5\x79\xa9\x05\x07\xc3\x22\x2f\x29\x6a\xbb\xad\x6d\x71\xf4\xcb\x73\xde\x88\xc3\xa1\xe6\x24\x9e\x95\xc3\x77\x77\x35\xb8\xef\xba\xb7\x75\x19\x4f\xb5\x1c\xbc\xe7\x68\xf0\x4b\x3f\xc6\xbd\x4e\xfd\xa7\x78\x0d\xb0\xab\x81\x47\x01\x99\x5f\x46\x3e\x1d\xaf\x01\x6e\x69\xe0\x71\xbb\xee\x73\x0c\xad\x69\xb4\x01\x1a\xcb\xf8\xcb\xe5\xf8\x70\xf3\xc0\xf5\xd1\x94\x46\x33\xbe\x4b\x5b\x97\x2d\x53\x07\x56\x1b\x92\x75\x19\xda\x66\x86\xa9\x3f\x5f\xdb\xa8\xb4\xb3\xfe\xed\x5a\x14\xb6\x33\x80\xcd\x79\xb0\xb8\x22\x61\x93\x77\x23\x1c\xfb\x74\x4d\xc6\x4e\x92\x11\xe3\xb9\xb0\xd9\x5c\x03\x9c\x74\x76\xe2\xc7\xac\xce\x73\xd4\xf1\xcf\x0b\x3f\x58\x93\xa5\x97\xc9\x32\xc3\xb3\x48\x78\x3b\x96\xc1\xb7\x76\x12\xf8\xc0\x5f\x43\xbf\xbd\x84\x7c\x49\xc8\x30\x8d\x25\xde\xeb\xd1\xa5\x8c\x2b\x57\xf7\xc7\x33\xb2\x66\x18\x7a\x3b\x46\xf6\xa0\xae\x6e\xb5\x9a\x44\x74\xb6\xae\x52\xb7\xd5\x2b\xcf\x56\x17\x11\x0b\xd7\xa0\x3a\x9d\x71\xb3\x10\xcf\xa2\x90\xc4\xac\x39\x5b\x04\x8c\xd4\xe5\x69\x62\x59\x53\x77\x57\xb3\x49\x9d\x7a\x49\x86\xed\x84\x68\xc2\x2b\xea\xcf\xa7\x0d\xf1\xbb\x06\x3e\xa1\x1d\x79\x63\xe5\x38\x89\xa7\x51\x9a\x23\xa1\x83\x39\xc5\x8c\xdd\xd6\x67\x6b\x48\x73\x3b\xc1\x19\xf5\x27\xf5\x79\x14\xad\xa1\x96\xed\x64\x58\x18\x99\xcf\x6f\x1b\xeb\x48\xde\x6d\x25\xa4\xab\x82\x10\xe2\x71\x7d\x24\xf6\xfb\xeb\xd1\x23\xf1\x29\x76\xe7\xc4\xb6\xde\xfb\xb7\x13\x15\xdb\xa6\x24\xc3\x8e\x23\xdd\x1a\x96\x60\xcf\xfe\xe4\x8b\x39\x50\x6b\x2e\xdf\x3b\x0d\xd6\x6e\xad\xa9\x14\x54\x2e\x0b\xdd\x5e\x89\x74\x63\xd7\xa2\x4c\x91\x9d\xa5\x01\x31\x2a\x84\xf0\xf9\xa6\x70\x63\xaf\xb9\xb5\x59\xd9\xfa\x94\xff\x36\x9e\x45\xf3\x5b\x4a\xae\xa6\xac\x62\x8f\x40\xe5\x35\x19\xd1\x28\x8e\x26\xac\xf2\x2c\xa2\xf3\x48\x5d\xa6\xb7\xb1\xf1\x15\xa6\xc2\x97\x9e\x6f\x35\xa3\xca\x22\xc6\xb0\x32\x8a\xe6\xb7\xb0\x32\x8b\xc6\x64\x72\x0b\x2b\x7e\x38\x6e\x46\xb4\x32\x26\x1c\x23\x97\x0b\xa6\x6e\xf4\xe3\x45\xbd\xf7\xa9\xd0\xfd\x55\xfc\xf0\x76\x63\xbe\xa0\xf3\x28\xc6\x32\x00\x65\x44\xc5\xdf\x68\xc1\x2a\x13\x8c\x2b\x24\xae\x4c\x31\xc5\x97\xb7\x15\x75\x3f\x42\x63\x63\xe3\xec\x8b\xa3\xca\xe9\xc9\x8b\xb3\x6f\x0f\xdf\x1c\x55\x5e\x9e\x56\xbe\x7a\x73\xf2\xcd\xcb\xe7\x47\xcf\x2b\xd6\xe1\x69\xe5\xe5\xa9\x55\x39\x3c\x7e\x5e\xe1\x40\x87\x6f\xcf\xbe\x38\x79\x53\x79\xfe\xf2\xf4\xd9\xab\xc3\x97\xaf\x4f\x2b\x87\xaf\x5e\x55\xbe\x3d\x7c\xf3\xe6\xf0\xf8\xec\xe5\xd1\x69\xe5\xdb\x97\x67\x5f\x6c\xbc\x39\xfa\xfc\xf0\xcd\xf3\xca\xd9\x49\xe5\xec\x8b\x97\xa7\x46\xc1\xc7\xcf\x5e\xbd\x7d\xfe\xf2\xf8\x73\x91\xeb\xe5\xeb\xaf\x5e\xbd\x3c\x7a\x6e\xe6\x3e\x79\x51\x79\x7d\xf4\xe6\xd9\x17\x87\xc7\x67\x87\x4f\x5f\xbe\x7a\x79\xf6\xdd\x06\xaf\xf8\xc5\xcb\xb3\xe3\xa3\xd3\xd3\x46\xe5\xe5\x71\xe5\xf8\xa4\x72\xf4\xcd\xd1\xf1\x59\xe5\xf4\x0b\x5e\x88\xd1\xa6\xa7\x47\x95\x57\x2f\x0f\x9f\xbe\x3a\xaa\xbc\x38\x79\x53\x39\x3c\xfe\xae\x72\xfa\xd5\xd1\xb3\x97\x87\xaf\x60\xe5\xf9\xcb\x37\x47\xcf\xce\xe0\xc6\xcb\x63\xf5\x54\x39\x79\x53\x79\x76\x72\x7c\x7a\xf4\xf5\xdb\xa3\xe3\xb3\x97\x87\xaf\x2a\xcf\x0f\x5f\x1f\x7e\xce\x9b\x20\xb3\xea\xd7\x6f\xbf\x38\x3c\x3b\x3d\x39\xfa\xe6\xe8\x4d\xe5\xcd\xd1\xe9\xdb\x57\x67\xbc\xf5\x2f\xde\x9c\xbc\xde\x78\x75\x72\x2a\x1a\xfc\xf6\xf4\x08\x56\x9e\x1f\x9e\x1d\xf2\xac\x5f\xbd\x39\x79\xf1\xf2\xec\x14\x56\xbe\xfd\xe2\xe8\xec\x8b\xa3\x37\xbc\xc5\x87\xc7\x95\xc3\x67\x67\x2f\x4f\x8e\x39\xf4\xb3\x93\xe3\xb3\x37\x87\xbc\x05\xc7\x47\x9f\xbf\x7a\xf9\xf9\xd1\xf1\xb3\xa3\xca\xc9\x9b\x8d\x13\x01\x7d\x76\xf2\xe6\xec\xe5\xc9\xdb\x53\x95\x01\x56\x0e\xdf\xbc\x3c\xe5\x35\x9e\xbc\x3d\xe3\xb9\x4f\x44\x81\xcf\x4e\x8e\x8f\x8f\x64\x89\x1c\xdd\x02\x07\x6f\x4f\x45\x31\x5f\x1d\xbd\x79\x71\xf2\xe6\xf5\xa1\x28\xf5\x45\x16\xfd\x8d\x8d\x4f\x4a\xd2\x95\xad\xe6\x46\xde\x93\xc3\xb8\x32\x3e\x51\x88\xc7\x98\x7d\xa5\xc5\xb7\x93\xc9\xfd\xfd\xdd\xc5\x85\x10\xe7\x2e\x2e\xbc\xc1\x70\xa9\xaf\x6b\x8e\x26\x15\x21\xea\x55\xab\xd9\xd2\xf8\x06\x47\x81\x23\xb6\xbc\xbf\xcf\x7e\xcd\x98\xcf\xb0\xc7\xa9\x41\x38\x57\x11\x6a\x10\x3a\x14\xf7\xbc\x83\x25\x90\x5b\x96\x8d\xbc\x71\x0d\x99\xd8\xa9\x42\x3e\x91\xbb\x59\xb5\xca\x77\x68\x9b\x08\x99\x57\xd3\x9f\xdd\xce\xb1\xb2\xb6\x14\x9e\xbb\xc9\xf1\x90\xd8\x24\x56\xac\x9a\x72\x47\x66\xa0\x66\xf1\x19\x18\x0a\x0f\x60\xc3\xc1\x9b\xcf\x52\x5e\xae\x05\x36\x32\x3a\x15\x61\xa6\x63\xde\xbc\x8f\x97\xb2\xf3\x10\xa7\x1d\x45\xea\x1c\x82\xf5\xb3\x5b\x5c\x06\x3c\xf3\xec\x0b\x19\xb8\x81\x42\x17\x2b\x2f\xe7\x8c\x56\x8f\x5e\xec\x48\x8f\x9f\x8c\x24\x6c\x62\x3e\xc5\x3b\x83\x14\xb9\x30\x5c\x91\xec\xf7\xe8\x7e\x28\x8c\x8e\x34\x20\x11\x03\x94\xc2\x71\xbc\x3f\x72\xb4\x88\x1c\x2d\xc2\x47\x8b\x0c\xcd\xf0\xfa\xc5\x9e\x8e\x4b\x53\xc5\x93\xa5\x12\xe4\xc0\x10\x69\xa3\x28\x48\x92\xf3\x11\xdd\x5c\x48\x6a\x35\xa0\xaa\xa2\xc3\xb4\xa6\x0c\x52\x61\xe6\x6d\x09\xd7\x9c\xd1\xb3\x86\x5f\x62\x43\xbc\xcf\xfa\x75\xd7\xc3\x07\xac\xcf\x7f\x11\xeb\x3b\xde\xb1\x7f\xbc\xcc\x96\xb6\xb2\xfc\xa9\x0d\x61\xee\x56\xa3\x64\xaf\x2f\x86\x18\xa1\xb0\x11\x88\xc3\xcd\x20\x77\x01\xcf\x2a\x9c\x46\x5a\x0a\x18\x17\x03\x86\x0b\xbe\x70\xa7\x60\x41\x31\x18\x97\x3f\x96\xe6\x51\x42\x11\x10\x23\x33\x9c\x51\xfa\x17\x01\xc9\x5d\x44\xe6\x04\xa0\x08\x6c\x1e\x2c\x32\xfd\x9c\x96\x80\x45\x8b\x70\x9c\x42\x4d\x4a\x1a\xe6\x5f\xa5\x30\xf3\x14\x66\xd3\xde\xc4\xf7\xf7\x5a\xdd\x94\x6a\x77\xee\xef\x65\x66\x11\xc5\x47\x62\xc8\xd0\x87\xce\x3e\xb0\x00\x8e\xbb\x33\x32\xc3\x46\x11\xd7\x69\x11\x77\xe2\xaa\x96\x64\x64\x13\xd5\x53\x0a\x7c\x65\x12\x98\x06\x97\xad\xd2\xd0\x30\x66\xb7\x01\xf6\xd8\x72\xb9\x56\x8e\x0a\x1f\x94\xa3\x4c\x49\x6b\xfa\xa0\xa4\x55\x1c\x5b\xcc\x37\x20\x8a\xc3\x98\xc4\x06\xc4\xa4\x10\x22\x30\x20\xa2\x42\x88\x85\x01\x31\x2b\x84\x18\x19\x10\xef\x0a\x21\xc6\x06\x44\x50\x08\x31\x35\x20\xc2\x42\x88\x89\x01\xf1\x53\x21\xc4\xdc\x80\xb8\x2a\x84\x98\x3d\x28\xbd\x5e\x1b\x10\xc5\xb1\xe1\xae\x38\x84\xc9\xc9\xf1\x00\x6b\xa2\x42\xce\x10\x59\xea\xd9\x82\xfc\x83\xe6\x0f\xc8\x1d\x22\x4b\xbf\xc8\x4f\x92\xb2\x50\x6b\x88\x2c\xf9\x28\x93\x39\x15\xa3\xf6\x10\x59\x63\x19\x87\x6d\x80\xc5\x7c\x47\x9d\x21\xb2\xf8\x83\x4c\x92\xb3\x1b\x75\x87\xc8\x92\x8f\x32\x59\xce\x66\xd4\x1b\x22\x4b\x3e\xaa\x64\x3e\x7b\xd1\x36\x4f\xe5\x4f\xaa\x54\xff\x0a\xed\xf0\x42\xfd\x2b\x6b\x69\x87\xf7\xf7\x76\x88\xee\x8a\x3a\xa7\x1a\xea\x14\x34\x94\x4f\x37\xd1\x35\xfd\x62\x2d\x6d\x72\x7f\x6f\x13\x51\xd2\x12\xc2\xf5\xdc\x98\x36\xa8\xcd\x12\x7c\x5f\x92\x58\x74\xa4\xd0\x43\xdc\x24\x21\x09\xf8\x86\xef\x05\x4a\xa0\x47\x2b\xd0\xaf\xf0\xa4\x0c\xf8\x72\x05\xf8\x19\x0e\x19\xef\x66\xb1\xaf\xba\x39\xb9\xe3\x11\x56\xe1\x8a\x8a\x26\x79\x06\x56\x16\x1d\x15\x17\x1b\x65\x40\x45\x30\xeb\x07\xe7\x3c\xdf\x00\xc5\x0f\xce\xc8\xd1\x62\x16\x2f\x8a\x27\xae\x89\xd3\x31\x5e\xdb\x95\x69\x06\xf4\x9a\xa8\xad\xfd\x03\xb3\x50\x48\x70\xc5\x1d\x31\xa7\xe2\xe1\x78\x5c\x82\x6d\x73\x3a\x4e\xca\xba\x71\x65\x02\xad\xe9\xae\x39\xce\x57\x34\x5a\xcc\x0b\xa1\xce\xf2\x50\xc5\x28\x7e\x6d\x32\x5f\x79\x52\x5e\x00\xf5\x2c\x0f\x85\x8b\x4b\x7b\x67\xc0\xd1\x28\x08\x4a\xda\xf6\xd5\x0a\x58\x71\x71\x87\xf9\x3e\x9c\x46\xb4\x78\x18\x5e\x66\x08\xb4\x78\x44\xbf\x31\xd7\x2a\x12\xb3\xe8\x8a\xfa\xc5\x18\x36\x21\xd9\x94\xe2\x78\x1a\x05\xe3\x17\x14\xe3\xf1\xcc\x0f\x9f\x13\x7f\x14\x85\xa4\xb8\xc5\x3f\x17\xe5\x3c\x1d\x45\xac\xb8\xd9\xdf\x16\x82\xb3\x05\xbd\x2a\x41\xf0\x17\xe6\x2a\xe6\x17\x0f\xd6\xe7\x99\x39\x38\xf3\x6f\x5e\x96\x8e\xeb\x77\x26\x20\xf6\x8b\xf1\xf6\x65\x06\x68\x4c\x4a\xc0\x7e\x9f\x01\x13\x9a\xd3\x02\xa8\xaf\x4d\xa8\x92\x81\xfa\x43\xb6\x03\x24\x2c\xef\xc0\xf7\xe6\x7a\x4b\x46\xc5\x75\x3e\x35\x80\xe6\x3e\xa1\xc5\xa8\xc5\xd8\x04\xc3\x74\xb6\x28\x89\x85\xfa\xdc\x80\xfb\x79\xe1\x87\x8c\x04\xc5\x80\x9f\x65\xfa\xa1\x41\x39\x0d\xe3\xe2\x35\xf9\xb3\x0c\x0f\xff\x79\x41\x46\xef\xf4\xaa\x58\xa4\x8b\xc3\x99\xf2\xa9\x1f\x96\xe0\x3c\xcc\x02\x06\xd8\x8f\x8b\x4b\x24\x38\x0f\x56\x8e\xf9\x08\x67\x26\x27\xdf\x01\x95\x94\xea\x17\x41\x96\x17\x1c\x9b\xe0\xf1\xa8\x84\xda\x82\x0c\xd4\x74\x31\x99\x94\x0c\xc2\xa2\x00\xb0\x98\x49\x8f\x32\x90\x65\x6b\x8d\x09\xc4\xf8\x00\x15\x82\xbd\xcd\x60\x9c\xc3\xbd\x0c\x47\x54\x9d\x42\x15\xc2\x5f\xe6\xe0\x4f\x19\x2e\x66\x9e\x6f\x33\x52\x81\x70\xdb\x99\x0b\x8f\xda\xa2\xe5\xce\x6c\xed\xb5\x4f\x89\x1f\x96\xcc\x11\x53\x2c\xfd\x85\x14\xd7\x3c\x37\x4b\xc3\xd7\x98\xde\x16\x2f\x89\x19\x3c\x46\xc5\xb7\x63\x57\xae\x4d\xa8\x09\x09\xca\x04\x95\x2b\x9c\x61\x66\xc5\x2d\xbb\x34\x81\x28\x1e\x2f\x4a\x7a\x79\x9b\x85\xbb\xc6\xb4\x04\x71\x17\xd9\x3e\x94\xac\x3a\xc7\xa6\x34\x41\x26\x13\x4c\x71\x19\x7e\xdf\xe3\x0c\x6c\xfc\x53\x44\x4a\x48\xe1\x08\x67\x16\xdb\xf4\x38\xa7\x10\xfa\x24\x4b\xb4\x97\x42\xd9\x5f\x24\x0e\x64\xe1\xe6\xbc\xd4\x62\xc8\x53\x13\x72\x11\x96\x55\xfc\xda\x04\x7b\xc9\x9b\x19\xbe\x2e\x19\x9d\xdb\x15\xc8\xd3\x92\xba\x2f\xb4\x25\x56\x88\xa8\xed\xba\x00\x12\xfe\x17\xc0\x88\xff\xd9\x01\x2b\xfa\x9c\x00\xb3\x0a\x45\xce\x06\x99\xd8\x89\x7d\x21\x13\xaa\x26\x61\xb6\x58\x11\xa6\x17\x52\x47\x27\xed\x15\x6b\x21\x38\xe0\x8f\xb5\x1a\x15\x26\xb2\xca\xbc\xb1\xee\x6e\xe8\x4c\xc4\xcc\x64\x13\xc4\x6c\x02\x6b\xb5\x10\x62\x00\x84\xe1\x62\x8d\x80\x03\x44\x44\x09\xda\xc0\x88\x16\x6b\x4d\x9c\x7b\xad\x55\x2a\x54\x97\x6c\xda\xf8\xc0\x01\x85\x4a\x92\x22\x05\x81\x25\x8b\xb2\x48\x58\xc1\x7d\xec\xc9\xd3\xf0\x09\x8d\x66\xb6\xa9\x28\x18\xd9\x8d\x46\x03\x03\x19\x2f\xb2\xc2\x50\x81\x19\xb1\xd8\xe7\xe9\x83\x7f\x53\xc9\x9a\x34\x9c\xa1\x03\xcc\xcb\x61\x60\x69\xf3\x4d\xd7\xdc\xe6\xe3\x87\x6c\x8c\x70\x63\xe6\xcf\xed\x05\x00\xe2\x6f\x0c\xe4\x05\xd9\xaa\x30\x75\x17\xb6\x68\x99\x1d\xd6\x5c\xd0\x98\x90\x20\xb0\x1d\x20\xcd\xad\xc8\xc4\x0e\xf7\x9d\xfb\x7b\xda\xe0\x3c\xc1\x0e\x80\xb6\xc9\x89\x04\xee\xf7\xf6\xc0\x9d\x32\xb9\x20\xa2\x74\xa1\x9e\x45\x07\x78\x40\x87\x03\x36\x54\x76\xa5\x3e\x0a\x25\x74\xad\x26\x6c\xdf\x10\xa2\x03\x7f\xb8\x27\x34\xb4\x7c\xf0\xfd\xe4\x76\xed\x7e\x24\x4a\x61\xc0\x8b\x36\xc8\xc0\xaf\xd7\x87\xc8\x59\x2e\x57\x2c\x49\x53\x6d\x60\x12\xb0\xe7\x45\x10\xf9\xac\xd7\x31\x31\x0c\x53\xea\xea\x63\x74\x40\x6b\xa8\x86\xef\xef\x1d\x8f\xc8\x67\x4e\x23\x61\xad\x06\x31\xb8\xbf\x77\xa4\x22\x75\x5a\xac\xee\x63\xfb\xb8\x5f\x77\x3d\x76\x80\xfb\xfc\x17\x61\xa5\xee\xdb\x30\x55\x52\x09\x65\xf3\x56\x41\x82\x1c\x18\x95\xd2\xb8\x6f\x92\xab\x2f\x4c\xb9\x6b\x3e\x38\x10\x8f\x14\xf9\x75\x02\x49\x0d\xd1\x26\xa7\xe0\xa8\x86\xe8\x96\xed\xd7\x09\x00\x29\xed\xfb\x26\xed\xc7\x19\xda\x8f\x11\xb3\x63\x58\xab\xf9\x8a\xf6\x63\x54\x8b\xc1\x01\x8a\x45\xc9\xf1\x6a\xc9\x31\x2f\x79\xc9\x87\xf9\xc0\x4d\xc6\xb6\x69\x87\x75\x17\x64\xb4\x69\xbc\x7b\x92\x3e\x29\x92\xbd\x4d\xec\x9b\xfa\xaf\x7d\x36\x6d\xc4\x3f\x53\x66\x53\xe0\x51\x81\xc9\x59\x0e\x93\x0a\x33\x05\xf8\x50\xe6\xdb\x66\x27\x48\xb5\x9a\x42\xd1\x3e\x11\x53\xd7\xa6\x28\x44\x04\x78\x36\x3d\x90\x6f\x04\xc0\x70\x9f\x08\x06\x41\x80\x89\x1d\x62\x62\x27\xca\x60\x27\x42\xcc\x8e\x60\xad\x46\x14\x76\x8c\x5a\xa2\x03\x14\xa9\x5a\x22\x51\x8b\x7c\x8b\x78\x2d\x91\xa8\x25\x02\x89\x79\xe2\x80\xc2\x70\xa8\xad\xe5\xaf\x73\x81\x5e\x65\x30\xbf\xb9\x4f\x19\xf1\x03\x79\xbd\xa0\x49\x9d\x76\xbb\xa5\x5c\xb9\x2f\x42\xe4\x68\x27\x12\x3d\xf7\xb3\x99\x37\x34\xaf\x4c\xb8\x23\x72\xf6\xc2\x7d\x95\xbb\x5a\x0d\xf7\xdb\xad\xbd\xb0\x56\xd3\xf9\x09\x62\x83\x70\x08\x23\x84\x6b\x04\xfa\x48\x0c\x8c\x7f\xc9\xf9\xdb\x7e\xf2\x4c\x40\x1f\xd7\xed\xa8\x4e\x80\x47\xf8\x5f\x0c\x36\x7c\xe9\xa5\x5c\xab\x0d\x91\x0f\x20\x46\x51\x12\x49\x4b\xb8\x2e\x27\xad\xa5\x35\x57\x3c\x4b\x57\xad\x93\x89\xad\xeb\xc5\x45\xed\x56\x57\x4d\xa8\x4f\xa1\x9e\x0f\xe4\xc0\x91\x3a\xfd\x08\xe1\x41\xbd\x4e\x86\x7b\xe4\xc0\xe1\x0d\x40\x11\xa4\x2a\x09\x46\x88\xd5\xf8\x4c\xa2\xbc\x85\x0c\xc0\xcd\x10\xec\x01\x05\x18\xee\x3b\xd5\x2a\x1e\x90\xba\x3b\xe4\xac\x29\x3c\x48\x5e\x0f\x1c\x20\x06\xad\xb5\x15\x42\x86\xa2\x1a\x85\x14\x21\x56\xe7\xc3\x17\x21\x96\x1a\x97\x46\xab\x8a\x57\x4d\xdb\x7c\xb4\xae\xd7\x2f\x4d\x72\x45\xaa\x56\xa5\x5b\x4f\x08\xd6\xaf\x49\x7c\xf5\xc9\x2c\x47\x32\x1b\xd1\x8d\xa9\x19\x0b\xd1\x65\x51\x5b\x92\x82\x1f\xcf\xe9\x44\x0d\x82\xd9\x01\xc1\xed\xe4\x7b\xda\x0a\xfe\x41\x7b\x42\xdd\x66\xfc\xaa\x4d\x4a\xc6\x90\xa1\x13\xc1\xa4\x55\x2c\xea\x42\x13\x4b\x82\x63\x79\x84\x73\x77\x21\xe4\x9e\xd0\x53\xe6\xa1\xca\xcb\x60\x09\x2f\xde\xe1\x5b\x9d\x28\x4c\xc3\xe5\x64\xc4\xe9\xf4\x17\xd3\x49\x60\x2b\xb9\x11\x82\xc2\x50\xf8\xe6\x19\x2b\x5c\xea\x6f\xfa\x5e\xbb\x4a\xe5\xfc\x4e\x2b\xa9\x7b\x96\x01\x22\x9d\x1c\x58\x0e\x88\xa7\x1e\x25\x2e\x57\x6c\xd5\x39\xab\x92\x71\xc3\xba\x49\xcb\x53\x88\xbb\xc8\x78\x59\xfe\xfd\x20\xae\x42\x2b\x29\xda\xf8\x20\xd3\x47\x61\x24\xe3\xb8\x56\x49\x5d\xd4\x8e\x52\x90\xc7\x63\x23\xa1\xde\xf7\x76\xd2\x13\x2c\xdb\xce\x96\x90\x6a\x72\x0e\x11\x5f\x1e\x92\x43\x39\xd1\xa4\x10\xf4\x45\x44\x69\x3b\xe4\xeb\x46\x52\xd0\xd1\xaf\x2a\x48\x04\x98\x65\x76\x08\x29\x80\xe6\x89\xce\xcd\x47\x94\x2a\xb8\x89\x2c\x99\xca\x58\x2e\xa2\xfb\xa1\x08\x26\x97\x94\x7c\x62\xa0\x49\x9d\x2d\xe3\x22\x03\xe7\x3e\x6e\x24\x8c\xd3\x93\x06\xee\xa7\x45\xc6\x96\xd8\x90\x2c\xce\x6c\x0c\x85\x54\xa7\x3f\xfe\x64\x63\x78\x0a\x4f\x39\xc5\x26\x40\xaf\x8b\x80\x52\x06\x91\x83\xfe\x4a\xa8\xc3\x1b\x8d\x06\xcd\x15\xca\x32\xf8\x3a\x2c\x06\x33\x8a\xcd\xc2\x3f\x2b\x6e\xe9\x9b\x4c\xdd\xef\x1e\x68\x69\x16\xfa\x8d\xba\xf2\xdd\xe5\x18\x2d\xbd\xe0\x62\xbc\x90\x51\xfe\x70\xe5\x9d\x79\xd9\x31\x1e\x38\xc3\xb4\xa8\x9f\x52\xaf\x40\xbd\x79\xd6\x9f\xb0\x0c\x77\x4e\x26\x76\x74\x80\xb4\x7d\xad\x96\x85\xa8\x4d\xb4\xcb\x95\x2f\x18\xf2\x2d\x8c\x51\x38\x88\x6a\xb5\xa1\xe0\xcc\x81\x66\xf9\x6a\x01\xe7\xf3\x91\xa4\xcb\x62\x6c\x33\x58\xab\x05\x90\x70\x59\xdc\xd7\xfe\x58\xb4\x9f\xdc\xdd\xe1\xf9\xca\x09\x8b\x8b\xcb\xcb\x94\x23\x32\x48\x39\x47\xf4\x81\xaf\xbc\xad\xb0\x4d\x61\x94\x5a\x95\x33\xdb\xe7\x82\x3e\x54\x92\xeb\xf3\x62\xc9\xd5\x58\x24\x18\xe4\x3b\x04\x51\x4b\x4a\x5d\xc7\xc9\x70\x14\x1b\x4b\xac\x7a\xe8\x16\xdb\x4c\x48\x3f\x6c\x6d\x18\x21\x80\x2f\x03\x6c\x81\x0d\x8c\x32\x7b\x1e\x8e\xb2\x01\x45\xa4\xe1\x0f\x11\xe3\xab\xac\xcb\x65\x2f\x85\xf2\xfb\x7b\x7d\xb6\x7f\xe0\xa6\xd3\xf2\x2d\x09\x59\xbb\x95\x59\xed\x44\x17\xd1\x41\x2a\x82\xa6\xf9\xfa\x36\x43\x4c\xee\x21\xd0\x01\x56\x9b\x09\x00\xc3\x46\x1c\x51\xa6\x9d\x9e\xef\xd2\xf1\x12\x4b\x3a\x4b\xc5\x2f\xc9\xa8\x6d\xd2\xf0\x81\x1d\x0e\xf0\x10\x86\x03\x3a\x14\x5e\x06\x89\x0b\x03\xe7\xc4\x5c\x40\x54\xfb\x2a\x6a\x96\xce\x9b\x65\x16\x41\x79\x11\x54\xec\x84\x00\x7c\x2e\x5c\xed\x12\x07\x17\x99\xc9\x9c\x41\x2f\x13\x1b\x73\x01\x22\x90\xa3\xbb\xd6\x3f\xb6\xbf\x52\x9f\xa1\x3d\xc0\x90\x0d\xa1\x58\x35\x73\x15\x32\x18\x26\x4e\x27\x32\x85\x77\x19\x78\xc7\xf6\x99\x78\x12\x79\xe9\x10\x0e\x42\x18\xf1\xbc\x4c\x50\x55\x3e\x47\x08\xd4\x66\xd1\x1e\x60\x0e\x85\x25\x91\xbd\x42\x39\x73\x6e\xf8\x02\xbd\x92\x26\xdd\xf0\x17\x64\xbf\xe2\x59\x60\x01\x3f\x2b\x50\xdb\xf2\xd5\xec\x2d\xa2\x76\xcf\x50\x0f\x3c\xd5\xdd\x17\x12\x4f\xb2\xbf\xd4\x92\xad\x6a\xe2\xdb\xc6\x25\x50\x80\x42\x9a\x44\x08\x85\xf7\xf7\xc2\x47\xf1\xfe\x7e\x93\xc4\x2f\x48\x48\x18\xb6\x89\xde\xa9\x0a\x5c\x6d\x90\x03\xa7\x6f\x63\x29\x10\x4f\x82\x88\x2f\xd2\x4d\x02\xb6\x08\x64\x32\x6d\x84\x49\x60\x33\x91\x04\x3c\xc2\x05\x4c\x0d\x2d\xbe\xe0\x2d\x02\x9a\x09\xb0\x2c\x80\x89\x34\xbe\x9b\x26\x4b\x81\x9e\x2f\x8a\x78\x79\x5a\x86\x78\x0a\xa2\x2b\x5b\x38\xc5\x34\xc5\xeb\xab\xe3\x16\xa8\xb9\x4b\xf8\x4d\xfe\x06\x71\x8c\x4e\x21\x43\x33\x48\xd1\x17\xa6\x5d\x13\x01\x77\x72\x08\x48\x2c\xf7\x12\x04\x88\x03\x4f\x63\x7a\x10\xa5\x8c\x89\x84\x7b\x1b\xd1\xd6\x32\x81\xb1\xcd\x8f\xa5\x67\x45\x84\x9c\xbd\x68\x3f\xde\xab\xd5\x22\x10\x0c\xa2\x21\xc2\x36\x19\x44\x43\x18\x41\x22\x8b\x58\x20\x66\x07\x00\x8e\xd0\x62\xe0\x0c\xe1\x18\x2d\x06\xee\x10\x4e\x11\xb5\x03\x38\x82\x63\x19\xb7\x2e\xdb\x9c\x29\x48\x59\xdf\x18\x52\x54\x9b\x8a\xa9\x83\x10\x9a\x55\xab\xf6\x60\x04\xc7\x43\xf4\xd4\x1e\xc1\xb1\x0c\x32\x30\x4d\x07\xd5\x07\x3a\x79\x30\x4d\x35\x1d\x07\x68\x2c\x82\x08\x1f\xa0\x71\xb5\x2a\x8a\x49\xcb\x37\xe9\x41\x66\xdd\x48\x46\x1f\x0b\xa3\xa3\x03\xa7\x3f\x46\xb6\x31\x64\xe3\x26\x06\x35\x17\x6c\x61\x0f\x8b\x21\xd6\x5f\xc5\xf8\x8c\xb7\xea\xe2\x6b\xb3\xce\xc5\x1a\xe1\x8a\x3d\x95\x7a\x94\xa5\xb6\x40\x9a\xa0\xc4\xcd\x6e\x3a\x70\x86\xfb\x68\x64\xb8\xdb\xc1\x7a\x7d\x22\x89\x76\x3a\x98\xf0\xb6\x8f\xf9\x47\x51\x80\xf8\xc4\x0b\x98\xc3\x6b\x63\x1c\x26\x35\xd7\x1c\x09\x34\x11\x43\x61\xcf\xd1\x35\x1f\x8d\xc1\x10\x34\x6e\x1c\x14\x1d\x38\xfd\xe9\x20\xaa\xbb\x43\x6f\x04\xe7\x8d\x1b\x17\x45\xfb\x13\x9e\x32\xf4\xc6\x2b\xc3\x38\xda\x47\xb6\x8f\xf8\x60\x82\x6a\xd5\xdf\xe7\x58\xbb\x1e\x28\x44\x85\x8d\x31\xb0\xa7\xd0\x87\x0e\x9c\x80\xa1\xf6\x49\x8c\x52\x93\xac\xeb\x65\x72\x74\x2c\xf8\x79\x4a\x93\xe9\x82\xb2\xe2\x03\x62\xe3\x22\x75\x15\xeb\x33\xef\x17\x9b\x01\x48\xb8\xa0\x03\x49\x63\x1c\xcd\x7c\x12\x16\x4d\x90\xd5\x12\x8b\x15\x60\x7d\xec\xfd\x62\x0f\xf8\xa2\x0e\xf1\xc0\x1d\x0e\x45\xd9\x8c\x97\x9d\x9c\xc1\xc5\x8f\x2b\x9f\x96\x95\x9f\xa5\x65\x0c\xfa\xbf\xd8\x2f\x94\x4f\x14\x00\xde\x2f\x36\x16\x75\xd2\x25\x24\x4b\xf8\x19\xa2\xb6\xeb\x00\xf8\xf3\x8a\xef\xdf\xca\xc4\xb7\x69\x9d\x81\xa6\xdd\xda\xb2\xd5\x48\x7c\x26\xb9\x6c\x63\xbb\x0b\xea\xb9\xa4\x56\x17\x80\x2d\x91\x75\x1e\xbd\x17\x9c\x02\xd6\xdd\x66\x5b\x84\xa4\xff\xf6\xd1\x55\xb5\x1b\xdd\xad\xb9\x8d\x4b\x4b\xfa\x9c\x37\x7e\xd7\x60\xbd\xdf\x65\xf5\x57\x42\x2d\x58\x77\x4b\xb5\x35\x4a\xa9\x52\xab\x11\xb5\x25\x11\xba\x92\xfd\xe8\xfe\x3e\x55\xa8\x54\xab\xd1\x01\x8a\xa4\x04\x1d\x71\x26\x69\x84\x37\x78\x58\x31\xf3\x70\x61\x5a\xde\x4e\x97\xcf\x2f\x33\xea\x65\xa1\x1c\x2c\xde\xc7\xaf\x28\x9b\x52\x05\xb1\x5d\xab\x51\x18\xd6\x74\x6b\x3f\x54\x9f\x14\xa1\x5a\x04\xa4\x22\x49\x15\x14\x09\xe5\x1a\x4d\x3c\x54\x9b\x52\x3f\xf6\xfb\x75\x0e\x7a\x09\x35\x74\xb3\x76\xad\x5f\x1b\x64\x6d\x70\x7c\xfd\x7d\x4b\x9b\x76\x1a\xa2\x28\x06\xb7\x04\x07\xe3\x2d\xb6\xe4\x34\x2c\xaa\xfe\x03\x1f\xfc\x96\x31\xf8\xdf\x7f\x8a\xc1\x3f\xf8\x94\x83\xff\x60\x61\xab\x83\x8f\x45\x18\x0d\xc4\x70\xaa\x3e\x19\x48\x09\x3d\x84\x04\x6d\x9a\x32\xba\xaa\x9c\xa4\x37\xe8\xd9\x21\x17\xad\x61\x88\x22\x0e\xeb\x6c\xac\x1e\x11\x30\x6c\x8e\x93\x90\x29\x04\x32\x29\x46\xd4\x6e\xf5\x00\x0c\xf9\x43\x7b\xdb\x40\x2b\x91\x2d\xe2\x22\x55\x82\xdb\x4d\x57\x0b\xbd\x5a\xae\x93\xdf\x22\xa3\x79\x4a\x39\x9c\x6a\xd6\x6c\x1f\xec\xd9\x61\x3f\x2b\xa2\x45\x60\xdf\xf1\x38\x7a\xb2\xc9\x0a\x81\xc8\x87\x11\xc2\xc2\x47\x1b\x2c\x97\x09\xea\x33\xba\x56\x3b\xec\x33\x9b\x40\xaa\x0b\xe2\x2f\x44\x65\x27\x32\x6b\x01\x22\x22\xa3\x57\xf9\xae\xe8\xe3\x7d\xa9\x1e\x36\xe8\x29\xca\x6e\x92\x88\xa6\xa0\x08\xda\xe1\xbe\xd3\x4f\x6b\xf7\x74\x8b\xd2\x66\x44\x45\xa3\xed\xff\xc6\xb8\x3d\xf8\x54\xb8\x3d\xf8\x10\xdc\xc6\x0f\xe3\xf6\xbb\x5f\x8d\xdb\x83\x87\x70\x1b\xe0\xac\x16\x52\x8e\x78\xda\xde\x7d\xa7\x2f\xe7\xa6\x52\xf5\x2f\x30\x1a\x61\x29\x47\xc9\x4b\x5c\x8d\x39\x30\xc2\x45\xdb\x00\x06\xb3\xa6\xdc\x40\xb1\xd9\xb0\x6e\x53\x54\xa3\x52\x26\xda\x23\x7b\xe9\x26\x10\xdb\x60\x8b\xd4\xeb\xf7\x0e\x8c\x10\x1b\x90\x1a\x1d\x6e\xc8\x3f\x88\x0d\xc2\x1a\x1d\x42\xf9\xc7\x50\x5c\x9b\x87\x46\xf8\x03\xce\x1d\xb5\x72\xd7\xa6\x35\xf4\xc1\xaa\x5d\x9e\x29\x51\xec\x56\x24\x7a\xa6\x38\x23\x95\x70\x99\xd9\x4e\x4d\xd7\x93\x5d\x4a\x7a\x77\x06\xe3\xa3\xaa\x9d\xdd\xed\x3f\x48\xda\x9b\x60\xce\x9e\x52\xd1\x91\x82\xbd\x5a\x8d\xed\xd3\xbd\xd4\x44\x5f\x50\x02\xf4\x65\xc4\x83\x14\x92\x70\xc8\x68\x9f\xec\x01\x5f\xc8\xf8\x83\x68\x38\x60\xc3\x74\xdc\x8d\x43\x2c\x9c\x31\xac\x56\xa7\xa0\x42\x6c\xc5\x05\xc1\x9d\xa6\xd8\x2e\xb4\xda\x9f\xe1\xb5\xee\x17\xc5\x0a\x04\x86\x63\x96\xfa\x55\x24\xd9\x14\xa5\x67\x49\x5c\x8d\x14\xc7\x24\xe7\xdc\x7c\xa1\xc5\x1a\x8f\x9b\x5a\x4d\xbe\xe9\x18\x86\xd8\x7f\xba\x16\xad\x36\x48\xaf\x26\x9b\xae\x71\xe6\xf0\x49\x1b\x94\x5f\xef\x0a\x19\x42\x4a\xa7\xc9\xb2\x47\x8a\x78\xd0\xe5\xda\xa6\xfd\x6a\x7d\xd0\x07\xf5\x78\xe6\xcf\xe7\xf2\x86\xda\x95\x3e\xaf\x4a\x41\x18\x8a\x33\x03\xa9\xd2\x10\xf3\x31\xed\xd4\x6d\x72\x77\xcd\x07\xd5\x2f\x6d\x52\x8a\x1b\x90\x70\xa6\x15\x8c\xd8\x2a\x98\x12\x8c\xa0\xaf\xe4\xa8\xfc\x1e\x64\xbf\x2d\x5a\x62\xdf\x8d\xa3\x10\x7b\x44\x19\xf8\xd3\x25\x0a\x1b\x21\xbe\x61\x36\xe0\x1b\x0d\xd9\xc5\xbd\x5a\xcd\x17\xfb\xcf\xbd\x1c\x74\x64\x42\x6f\x92\x3d\x40\x91\x50\xe6\xa8\xb3\xdf\x82\xa1\xbd\xc0\x8a\x01\xfd\x16\x03\x5b\x30\x20\xa0\xa1\x8c\x75\xcc\x38\x33\xef\x71\xa2\x72\xc4\x82\x4b\x9d\x4a\x95\x68\xee\x48\xc3\x14\x38\x85\x20\x4b\x41\xa2\x7d\x67\x86\x13\x51\x7a\x66\x90\x5b\xb5\x58\xc1\xb8\x28\x0e\x7a\x8a\xd9\xea\xfc\x10\xa1\x64\x84\xd6\x9f\x18\xbc\x44\x44\x2c\x84\x12\x7c\xcf\xbe\xd3\x8e\x18\x62\x20\xd8\x12\x51\x3d\x00\xd5\xea\x26\x93\xf6\x0c\xea\xa4\x87\xc4\xe2\x4e\x86\xb4\xa4\x50\xc7\x00\x5c\xae\xf2\xa7\x9b\x0c\xe3\xad\x18\x3e\x75\xa7\x98\xf5\xe5\x81\x90\x44\x93\x71\xe6\x50\x8c\x47\xa8\xd5\x9f\x37\x18\x6c\x60\x6f\xe5\xa0\x68\x45\xf3\xc9\xb9\xa8\xec\x37\x05\xe0\x2e\xc1\x31\x15\x14\xce\x48\xb8\xc0\x15\xbc\x5c\x45\xf7\x69\x0e\xdd\x45\xd3\xa0\x1c\xdd\x2c\x8b\x6e\x5d\xd3\xa3\xd1\x2d\x51\xcd\x52\xec\x8a\xd2\x24\x82\x61\x6e\x04\xc4\xc5\x51\x45\x58\x3f\xcb\x88\xf4\xbc\x47\x0c\x9a\x18\x7e\x8d\x73\x66\x39\xab\x9d\x59\x41\x2a\x96\xa4\xca\x54\x5b\x36\x52\x69\xe4\x21\x5f\x84\x35\x0e\x3d\xfe\x83\x8e\x23\x71\x6a\x81\x95\xda\x62\x74\x1d\x00\x89\xf1\xee\x0a\x9b\x9e\xf4\xbd\x95\xb7\xcc\xd2\x31\x4b\x7c\x64\xb3\x3a\x56\x1a\xca\x99\x7f\x63\x3b\x90\x02\x18\x9b\xba\xcf\x54\x97\x99\x28\x32\x79\xf1\x01\xf2\x9b\x89\xca\xc1\x75\x60\x7a\x6f\x61\x7c\x80\x9c\xbe\x1d\x1c\xa0\xb0\xef\x3a\x5e\x70\x80\x48\xbf\xcb\xff\x44\xfd\x96\xe7\x1a\x7a\x0a\x91\xc9\xab\x9b\xef\xf5\x18\x34\x4b\x73\x66\x8c\xb8\xcc\x2e\x24\xe6\x0e\xe5\x5d\x51\xe5\x3f\xd8\x2d\xd9\xaf\x58\x77\x45\x34\x25\xde\x42\xba\x35\xf1\x16\x92\x0d\xaa\x56\xed\x78\x0b\xb5\x00\x14\xf6\x42\xb1\x17\x2f\xf3\x0e\x84\x99\xa8\x30\x30\x86\x81\x5a\x1f\xb8\xd4\x0b\x6d\x8c\x6a\x18\x20\x64\x33\x54\x63\x7c\x95\x3e\x70\x12\x15\xb6\x30\xc4\xb2\x43\xc4\xf6\xb1\x34\x68\xc3\x10\x23\xc6\xf7\x0a\x00\x72\x31\xd6\x8e\x91\x1e\x42\x60\x6a\xc1\x63\x43\xbe\x24\x13\x3b\x3e\x70\x04\xb1\x66\x54\xdb\xcd\x18\xe4\x14\xdb\x4d\x71\x9b\x8d\x21\x42\x9a\x3a\xf2\x3a\xae\xb9\x80\xcb\x94\x01\x97\x29\xa3\x41\x30\x44\x36\xae\x05\x60\x2b\x4e\xb7\xf8\x31\xaa\xc7\x30\xab\x3f\x5f\xa9\x64\xeb\x63\x2a\x49\x47\x21\xac\x56\xa3\x74\x7d\x81\xd1\x43\x33\x2c\xa1\x93\xcc\x15\x63\x59\x77\x5b\xc3\x23\x37\x8d\x3d\x14\x4a\xdf\x64\x3a\x08\xc5\x66\x63\x98\x2e\xac\x0f\x7b\xe1\x15\x8d\x3f\x2e\xf6\xe7\x45\x54\x5e\x14\x6e\xf8\x09\x3f\x8e\x67\x14\x73\x04\xd3\x81\xef\x61\xae\x52\xec\x26\x18\x67\xec\x3a\x3b\x60\xc5\xc1\x3a\xbf\xaf\x4b\x35\x92\xb8\x46\xb7\xcc\x2d\x58\x64\x22\x9d\xd5\x71\x6a\x3b\xc6\x8b\xa2\x07\xee\x8e\x73\x7f\x4f\xf7\xeb\xee\x8e\xd3\xa7\xf5\x76\xcf\x91\x1c\x81\x46\x8b\x70\x6c\xd3\x66\xbb\xe7\x00\x8f\x02\x2f\xd1\x64\xfb\xc0\x26\xf1\xb1\x7f\x6c\x63\xd0\x67\x9e\xc9\xb5\xfd\x6c\xd0\x22\x39\xa9\xfa\xb1\x67\x6e\x3e\x53\x63\xfc\x3a\xeb\x97\xe8\x54\x71\xca\x23\xc4\xb9\x19\x4b\xdf\x39\x58\x1d\x43\x8a\xdc\x26\x4d\x87\x28\xcc\xaa\x63\x45\xc6\x5a\xb8\x25\xce\xc8\x97\x22\xc2\x2a\x2e\xea\x00\x03\x7d\xea\x31\xd3\x8c\x22\x5e\x8f\xab\x75\x58\x78\x1c\xc5\x3c\xec\x14\x5a\xec\xe8\xf0\xb8\xf0\x1b\xeb\xdd\x46\x2f\x1e\x74\x93\xbc\x79\xd0\x6d\xf4\xe4\x41\xda\x3e\x35\x29\x37\xa3\x93\xb3\xc1\x9d\x72\x99\x6f\x6c\x43\x1f\xb9\xcd\x08\xc6\xc8\x3a\x3f\x8f\xb7\xec\x41\xad\x3e\xec\x9f\x9f\x8f\x6b\x80\xbf\x5a\x30\xc8\xa5\x6f\x9d\x9f\x37\xc4\x77\xbb\xef\x0d\xf0\xd1\x30\x85\xef\xab\x1c\x8b\x0f\xc8\xf1\x57\x32\xcb\x08\x35\x7f\xf8\x9d\x3d\x70\xea\xbb\x7e\x7d\x32\xbc\x6b\xc3\x9d\x25\xf8\xac\x09\xc7\x82\x31\xbe\xc1\x57\x47\x37\x73\xdb\xfa\x81\x5e\x5d\x9e\x9f\xdb\x56\x6d\x10\xc3\x18\xc6\xc3\x9a\x75\x7e\x0e\x3e\xb3\x00\x9c\x96\x80\x2d\xe0\x02\x2e\x52\xb0\xc9\x0a\x98\x6f\x14\x07\x83\x14\x72\x5e\x06\x29\x4a\x34\x21\x67\x59\xc8\x69\x1c\x48\xc0\x20\x5b\xf5\xf5\x0a\x98\x6f\xc0\x99\x05\x5e\xa1\x3b\x3f\x20\x23\x7c\xc9\x65\x3e\xb7\xbb\xbd\xdb\x6a\xef\xb4\xa1\x1f\x32\xf2\xf3\x02\xbf\x9f\x12\x86\x3d\xb7\xd7\xe9\x74\xda\xdb\x5d\xe8\xff\xbc\xf0\xbd\x5e\xb7\xdb\x96\x8f\x33\x9f\x92\x10\x7b\x3b\xed\x9d\x9d\x6e\xaf\x03\xfd\x5f\x16\x54\x16\xd1\x71\xb7\xbb\xf0\x12\x93\x2b\x9e\xd7\x75\x77\x5b\x3d\x07\x5e\x92\xf8\x67\x5e\x43\x6f\x7b\xdb\x69\x75\x3a\xf0\x32\xf0\x47\xef\x3c\x87\xff\x0d\x47\x53\x3c\xf6\x83\x59\x14\x8e\xc5\xf7\x96\xd3\xe9\x42\xd1\x9e\x56\x57\x3e\x5c\x93\x28\xc0\xcc\xdb\x75\xba\xdd\x96\xd3\x82\x97\x34\x7a\x1f\x7a\xae\xb3\xd3\xea\xb4\xda\x1d\x78\xb9\xa0\xc1\xed\xfb\x28\x1a\x7b\x6e\xa7\xbb\xdb\x6b\xb5\x5d\x38\xf2\xc7\x98\x89\x22\x7a\xad\x5e\xaf\xdb\xda\x81\xa3\xa9\x4f\x19\xc5\x8b\x58\x36\xb8\xdd\x6d\xc1\xd1\x34\x1a\x45\x81\xcf\x7b\xd8\xde\xde\xd9\xed\x6c\x3b\x70\x14\x51\x3f\xe0\x8d\xe8\x74\x5a\xdb\x2d\xfe\x1a\x4e\x82\xe8\x3d\xa6\xb2\xac\xee\xae\xbb\xbb\xe3\x8a\xe4\x98\x04\xef\x44\x6b\xbb\xed\x9d\x1d\x38\xa2\x64\x16\x47\xa1\xe7\x76\x3a\xad\xb6\xeb\x38\x70\x74\xeb\x87\x0a\x55\x63\x9f\xbe\x93\xd8\x6d\xef\x8a\x17\xf1\xad\xdd\xdd\x6e\xb5\xc5\xeb\x55\x14\x8c\x71\x48\x79\xf3\x5b\xce\x6e\x6b\x57\x41\x5d\x51\xff\xd6\x73\x5d\xd7\xdd\x75\xdc\x6d\x95\x82\x71\xe8\xb5\xba\x3d\xc7\xd1\xef\x39\x88\x77\x53\xff\x1d\xf1\xdc\x56\xa7\xdd\x6e\x75\x65\x31\x33\xff\x0a\x87\xcc\xf7\x76\x5d\x67\xb7\xd7\x91\x35\x46\x01\xb9\xc6\xb2\xb4\x6e\x77\x77\x7b\x77\x57\x82\x46\xc2\x2b\x4a\xf4\x7e\xbb\xdb\x72\x54\xda\x68\x4a\xc6\x9e\xeb\x38\x1d\xc7\x71\x5b\x22\x8d\xe2\xb1\x28\xae\xeb\x74\xc4\x7b\x2c\xc6\xce\x73\xbb\x6d\x67\xa7\xe3\xca\x7c\x31\xf6\x65\x05\xbb\x1d\x77\x77\xd7\x95\x15\xc4\x1c\xd9\x02\x15\x9d\xed\x76\xa7\xdd\xd9\x4e\x53\x45\x6f\x39\xe6\x3a\xbb\x5d\x33\x15\x67\x53\xd9\x82\xfe\xbc\x88\x48\x8c\xbd\x6e\x6b\xb7\x23\xd3\x34\x71\xf4\x76\x77\xbb\x1c\x77\x18\xcf\xe7\x24\x14\x83\xe3\xf6\x76\x79\x25\x18\xcf\xe3\x77\xb7\xb2\xe2\x5d\xb7\xeb\xc2\x31\x99\x89\x0a\x7b\xbb\xce\x4e\xab\xd7\x95\xef\xd8\x78\x8f\xc6\x57\x6a\xcc\x5b\x8e\xd3\x76\x77\x77\xe1\x84\x50\x7c\x49\xc9\xe8\x9d\xe7\x72\x04\xb9\x9d\x1e\x9c\x04\x9c\x5a\xf4\x1c\xd9\xde\xee\xee\xb6\x1c\x38\x89\x28\x8e\x99\x1a\xaa\x56\xaf\xbd\xd3\x69\xc1\xc9\x62\x34\x8d\x89\x2f\x5a\xe4\xee\xb6\xbb\xf0\xca\x27\x61\x7c\x19\xd1\x88\x13\xcc\x76\xa7\xd3\x73\xe0\xd5\x34\x8a\x99\x2e\xab\xed\xf6\x7a\xdb\x2e\xe4\x94\xc1\x33\xf5\x7a\xdb\x2d\x07\x1a\x74\xd2\x69\xb7\x76\x5d\x9e\xc4\x3b\xb1\xd3\x69\xb9\x7c\x28\x64\x9d\xed\xd6\x76\x6f\x47\x3e\xdf\xe2\x20\x88\xde\x7b\xae\xdb\x71\xda\x4e\xb7\x0b\x45\x17\x35\xf4\x34\x0a\xf1\xed\x18\xbf\x57\x13\xb6\xe7\xc0\x69\xc4\x34\xde\xda\x3b\xdb\x1d\x07\x92\x70\x4c\xfc\x90\x8f\xb6\xdb\xee\x74\x77\xba\xad\x8e\x48\xba\x8a\x04\x16\xdb\x6d\x07\x92\xeb\x88\xde\x8a\xbe\x6f\xb7\x1c\x07\x2a\xf2\xeb\x6e\xef\x6c\xf7\x7a\x0e\x0c\xfc\x6b\x1c\x8e\x31\xf5\xdc\xae\xdb\x6e\x71\xca\xd0\x29\x97\xc1\x22\x9e\x8a\x7c\xed\x76\xaf\x0b\x03\xff\x7d\x28\x5b\xbf\xe3\xee\x3a\xbb\xdb\x3d\x18\xe0\x59\x14\x8e\xa6\x64\x32\xe1\x84\xc5\x71\xbb\xb3\xd3\x85\x01\xb9\x9a\xca\x59\xed\xba\xed\xdd\x76\xab\xdb\x91\x49\x6a\xd6\x76\xb7\x7b\x6e\xb7\xdd\x53\x69\x7c\x92\xb9\x9d\xed\x4e\xb7\xbb\xbb\x2b\x93\x12\x04\x6a\xc4\xf4\x3a\x9d\x9d\x16\x6f\x96\xf8\x2a\xe6\x5b\x7b\x67\xa7\xd5\x6e\xb5\x75\x92\xa4\xe0\xdd\x9d\x56\xb7\x97\x24\xe5\xa1\x34\xd2\xba\x3b\x9d\x9e\x6a\xa3\x9e\x11\xbd\xed\x6e\x6b\xbb\xd7\x52\x89\x7a\x4a\xb4\xdc\x4e\x6b\x67\x57\x55\xab\x09\x73\x67\xd7\x71\xda\x1d\x55\x4b\x3a\x25\xb6\x77\xda\xed\xed\x6e\x3b\x93\x8c\xf3\xc9\x0c\xe3\x40\xa1\xa5\xbb\xc3\xa7\x96\x4c\x4f\xba\xb9\xbd\xbd\xed\xee\xf0\xc4\x19\xe7\x61\xad\x1d\x47\x3c\x2a\x7a\x69\xb7\x76\xf9\x50\x06\x24\xc4\xa1\x40\x49\xb7\xb7\xed\x40\xcd\x36\x12\x92\x9d\xf9\x34\x8a\x42\xc1\x3b\x7b\xce\x0e\x9c\xe1\x31\x59\xcc\x8c\x55\xa0\xb7\xdd\xde\x6e\xb7\x5a\xea\x83\x9a\x3a\x5d\xf5\xaa\xb9\x48\xab\xe5\x72\xca\x56\xa9\xf3\x05\x9d\x07\xd8\xdb\xed\xf5\x5a\xbd\x9d\xb6\x4a\x4c\xb0\xd4\xde\xdd\xde\x71\x76\x35\x6c\xca\x3a\x76\x9c\x9d\xed\xed\x5d\x47\xa7\xcf\x29\x09\xaf\x64\x8e\x5e\xc7\xed\x76\x54\x7a\xca\x28\x3a\xdb\xdb\xad\xb6\xa3\xe1\x25\xb3\x90\x34\xed\x74\xb6\xdd\xed\x36\x9c\x91\x71\x98\x12\x56\xaf\xd3\xd9\x75\x5b\x70\x46\x42\xc6\xb7\x27\x33\xbe\x82\xb5\xdc\x9d\xae\x03\x67\x24\x66\xb7\x34\x8a\xf5\x22\xc6\xb3\x46\xa3\x91\x1f\x93\x50\xa5\xb4\x76\x61\xe8\x5f\xfb\x3f\x45\x09\x4f\xe8\xed\xf4\x76\xba\x3c\xf1\xd6\x73\x5b\x3b\x30\x0a\xc6\x81\x3f\xe2\x5f\x7a\x9d\x76\xb7\xcb\x13\xc8\x35\x16\x73\xb2\xbd\xdd\x93\x6f\x63\xea\x5f\x7a\xdb\x4e\x67\x67\xbb\xbd\x0b\x53\x96\xdc\x6d\x73\xee\x22\xdf\x45\xf3\x7b\xdb\xad\xdd\x76\xa7\x03\x35\x6e\x3b\x6d\xb7\xcb\x87\x7e\xee\x07\xd8\x60\x15\xdd\x5e\x77\xdb\x6d\x3b\x32\x59\xa0\xc9\x75\x9c\x56\x77\x67\x47\x26\xa5\x78\x72\xdd\x6e\x6b\x77\xb7\xd7\x13\xc9\x06\x9a\x3a\xed\x1d\xb7\xe5\xb4\xe1\xdc\x9f\xfb\xb7\xfe\xfb\x29\x99\xcb\x89\xeb\x6c\x6f\xc3\x39\xf6\x47\xd3\xf9\x62\x32\x11\x7d\xdd\xee\x6d\xb7\xe1\x1c\xd3\x05\xe7\x17\xbd\x9d\xdd\x5d\x17\xea\xb9\xd1\x73\x9d\x76\x17\xce\x83\xc5\x8c\xaf\xd1\xad\x4e\xaf\xbd\x0d\xe7\xd1\xfb\xb1\x62\xb2\xae\xcb\x57\x56\xd7\x81\x8a\x24\x38\x95\x6d\xb7\x7b\x90\xe2\x4b\x3c\x1a\xf9\x2a\xb5\xd7\xdb\xdd\xde\xd9\x71\xa1\xea\xbe\xeb\xf6\x76\x1c\x48\xa3\xf8\x56\xc9\x03\xad\x76\x77\xbb\xeb\xee\x42\x1a\xdd\xfa\x72\x3e\x74\x5a\x3b\x3d\xbe\x4c\xc4\xfe\x78\x1c\x60\x09\xb6\xeb\xb6\xb6\xdd\x9d\x6d\x98\xcc\xd1\x8e\xdb\xdb\xd9\x69\xc1\xd8\x0f\xc7\xba\xa4\x9e\xd3\x6e\xed\xf4\x3a\x30\x25\x46\xa7\xeb\xb4\x5b\xdb\x3c\x21\x9e\xe2\x40\x88\x08\xdb\x9d\x5e\x7b\x07\xc6\x04\x87\xa1\xef\xb9\x4e\xd7\xe9\x6d\xef\x6e\xc3\x98\x04\xd7\x9c\xe5\xb5\x7a\xed\x16\xe7\x1a\x99\xf9\xdd\x76\x61\x4a\xc8\xbd\xdd\x6d\xc7\xe9\xa9\x14\x39\xd9\xdb\xdb\xad\xdd\x4e\x07\x1a\xf3\x5c\xa7\x84\x6a\x22\x77\x77\xdb\x0e\xcc\x10\x7d\xb7\xe3\x6c\xc3\x94\x05\x74\x7a\x2d\x67\x77\xc7\x81\x8c\xb3\xbf\x36\x9f\x2c\xfc\x05\xfb\x81\xd7\x6e\xed\xec\xf6\x84\x1f\x09\x0b\xb0\xe7\x76\x5a\x4e\x67\x67\x67\x07\xb2\x68\xe6\xb3\x48\x70\xfd\x6d\x67\xb7\x0b\x8d\x99\xd3\xea\xba\x3b\xdd\x1e\x54\x0b\xac\xdb\xed\xb5\x5d\x67\xa7\x07\xdf\x4f\xb1\xcf\x84\x64\xd7\xe6\x3d\x4a\x17\xc0\xed\x96\xdb\x95\xaf\xf1\x2c\x7a\xa7\x85\xbf\x9d\x2e\x34\x38\x51\x6f\xb7\xe7\xa8\x77\x4d\x8e\x6e\xa7\xeb\x6c\x77\x8c\xa3\xac\xcb\x74\x4b\x21\xef\x5a\xbf\xba\xb4\x41\x43\xc6\xca\xfc\x02\xdf\x98\x7a\xed\xdb\x35\xa0\x6f\xf8\xb3\xa1\x87\x4f\x42\x40\x43\x9a\x68\xb2\x91\x8d\x6b\x96\x05\x1a\x8c\x92\x99\x0d\x1a\x2c\x7a\xc5\xa5\xbd\x67\xbe\xd0\x6e\xd8\x0c\x8d\x1a\xf8\x06\x8f\x6c\x0c\x40\xdf\xa6\x22\x5c\xbd\xb6\xec\x63\x48\xc4\xbc\x7c\x19\x32\x5b\x44\xb1\x77\x7b\x00\xf6\x84\x4b\xd3\x7b\x9b\x01\xaf\x2d\x1e\x85\xee\xd2\x66\x07\x07\x3b\x55\xb7\x7b\xcf\x0e\x0e\x3a\xd5\x56\xc7\x81\xe2\xc1\xed\xde\xb7\x3a\x4e\x95\x41\xdb\xed\x56\x19\xd8\xdf\xef\xdc\xf3\x07\xe8\x02\x6f\x47\x64\x3e\xe2\x19\x5b\x9d\x2a\x97\x82\xd9\xc1\x81\xdb\xd3\x4f\x3b\xe2\xc1\x6e\x75\x79\xbe\x66\xab\xdb\x05\x5e\x27\xcd\xe1\xb6\x54\x5d\x3b\xba\xae\xb5\x95\x67\x6b\x57\xc5\x89\x20\xdf\x9e\xcd\xd0\x38\xed\xbf\xea\x0b\xef\xab\x88\xd7\xcf\x06\xed\x21\x6f\xac\xcd\xd0\x34\x0f\xd5\xea\x76\xb7\x38\x64\x93\xcb\xc2\xf2\xa5\x65\xbe\xb4\xe5\x8b\xcc\x3d\x49\x73\x1f\xe5\xcb\x67\x83\xce\x50\x00\xcd\x4d\xa0\x47\x16\x9f\x64\x9e\xa5\x99\x0f\xd3\x1a\x14\x4c\xa6\x2d\xd7\x8f\x80\x94\xc5\x5e\xe5\x2f\x9d\xc4\xa0\xff\xde\xbe\x1a\xe0\x21\xf0\x94\xa7\xb9\x4f\x71\xc8\x2c\x84\x10\x56\x68\x39\xf6\x8f\xa1\xfe\xdf\x91\x58\x36\xfd\x38\x0c\x77\x06\x01\x8e\x93\x41\xc7\x7a\xd0\xf9\x98\x63\x68\x2a\x60\x8f\x56\x2c\xec\xc3\x7d\x24\x0d\x69\x19\xa2\xe8\xd8\x3f\x06\x50\x15\xa7\xe0\x4c\xdf\x8c\x92\x03\x10\x72\x7f\x6f\x63\x74\x21\xc2\xc8\xeb\xc6\x0b\x97\x56\x31\xbf\x40\x83\x42\xdc\xb8\x82\xb8\x71\x09\x71\x23\x9a\xfb\x23\xc2\x6e\x81\x3c\x2f\xc9\xb8\x67\xe4\x1a\x56\x18\xcd\x9a\xb7\xc1\xcb\x34\x50\x04\xe5\x0b\xfb\xae\x67\x36\x35\x6d\xbe\x74\xf4\xa3\xa8\xa6\x1c\xe4\xae\x50\x8d\xc9\xa7\x4b\x54\xa3\xf2\x49\xb5\x09\xd5\x0c\x03\x8b\xb3\x84\x55\x58\xbf\xb3\x6a\x5f\xd9\xb2\x18\xa0\x9f\xae\x92\xa7\xcb\x8c\x8b\x47\xe6\x7a\x7f\x55\xee\x86\x61\x29\x6e\x63\x94\x68\x83\x5c\xcf\xd0\x78\xcb\x47\x12\xda\x2e\xc4\x00\x80\xbe\xc5\x71\x67\x79\xfc\x8f\x6f\x5b\xa0\x56\x04\xca\x87\xd8\x50\xc1\xa9\x26\x0a\xbf\xb1\x9a\x05\x2b\xd6\xa3\x33\x5d\x7d\x4c\xa6\x4b\x95\x49\xf4\x0b\xf7\x2d\x60\x79\x22\x3f\xae\x59\xc0\xca\x7a\xb2\x24\xc6\xf2\x5a\xa9\xbd\xbe\x78\xe5\xfb\x06\xf6\xdd\x5e\xdf\x72\x2c\xcf\xb2\x40\x0d\x27\x77\x22\xd8\x6e\x6f\xc5\x01\x26\x4f\xd0\xfd\x84\x9c\x3d\xba\x8f\x9c\xfb\x7b\x7a\x80\x5c\x91\xc8\x93\x98\x26\xf9\x84\xdc\xdf\x15\x90\xfb\x33\x75\x10\x9b\x21\xf5\x77\xc0\x98\x73\xef\x6c\xdc\x98\x42\xdc\x88\x21\x6e\x04\x06\x6d\x6f\xe4\x73\x99\x13\x64\x13\x67\x8a\x58\x81\x7d\x97\xbd\x50\x81\xa1\xcc\x4c\xe2\x0c\x17\x0a\x6f\x27\xf1\x14\x22\xdc\xb8\x14\x4f\xea\xd0\x88\x63\x53\x76\x44\x7b\x96\x72\x54\xab\x94\x98\x77\x18\x06\xc8\xaf\x47\x70\x81\x6c\xbf\x16\x81\x66\x2b\x39\x31\xe9\xdb\x31\x62\x7c\xce\xf5\x6d\x5a\x0f\x41\x33\xa8\xf5\xb6\x6c\xba\x1f\x02\x8f\xca\xd4\xb0\xce\x78\x6a\xcb\xb3\x59\x9d\xf2\xa7\x0e\x0c\x9a\x68\xb1\xdf\xe8\xf6\xfd\x5a\xe4\xb5\xea\xbc\xdc\x78\x0b\xf5\x1c\xe0\x05\x68\x71\xe0\x54\xab\x8b\x7d\xb7\xef\x78\xb1\xc2\x71\x0c\x03\xb8\x30\xf0\x94\xf5\x38\x32\xe7\xeb\x34\x99\xaf\x71\x32\x5f\x83\xb5\xf3\xf5\x4d\x4e\x35\xcc\x59\xbb\x8d\xf7\x7b\x4e\x9f\xd5\x84\xc1\xed\x16\x6e\xf6\x1c\x0f\xef\x0b\xed\xb5\x87\xf7\x5b\x9d\xf4\x93\xdd\xea\x38\x75\x0c\x38\x00\x03\xcb\x8c\xea\x16\x5e\xc0\xbb\x51\x34\xbf\xf5\x0a\xac\x96\x33\xc1\x3b\x6d\x71\x51\x78\x2e\x90\x28\x54\x1e\x78\x4b\x38\x26\xf1\x3c\xf0\x6f\xc5\xb5\x16\xab\xba\x50\x43\x1a\x31\x00\x6d\xb0\x84\x53\x7c\xe3\x5d\xc2\x44\x9a\x49\x9f\xe3\xa0\xa0\x9c\x67\xf2\x12\xbd\x46\x02\xc3\x8b\x48\xe4\x1b\xef\x16\xea\x49\xe4\xdd\x26\xf7\x88\xc8\x8e\x9e\xc2\x93\xf4\xfd\x92\x77\xfc\xee\x52\xc4\x52\xc6\xb4\xa8\xeb\x3a\x1a\x2a\xee\xfb\x5e\x6a\xbf\x0c\xb1\x5e\x3d\x64\x87\xb6\x34\xd3\xd5\x0f\x97\xfa\x21\x21\x01\xa1\x94\x79\xa8\x8e\x28\xad\x23\xfa\x98\x3a\xe8\xd5\x65\x09\xd2\x1f\x18\x98\x7a\xa3\xbb\x2f\x79\x39\xad\x56\xe5\xdf\xfd\x56\xb7\xdb\xe8\x56\xab\xe9\xa7\x2b\xf5\xe9\x6a\xf5\xd3\xa5\xfa\x74\xa9\x3f\x39\xfb\x99\xa5\x41\x7d\x56\x6f\xfb\xc8\x95\x03\x7e\x66\x0c\xf8\x99\x31\x7e\xaf\xd3\xf1\x13\xd1\xc5\xcc\x01\x7c\x67\xe8\xd8\x1f\xb5\x94\x3e\xd3\x4b\xe9\xbb\xa2\xa5\x14\x7c\x3a\x6a\x78\x27\x47\x6a\xaa\x26\xb4\x9a\xcd\x9f\x8e\x12\x1e\x5b\x7e\x8e\x0a\x8c\x85\x7a\xfa\x57\xed\x9e\x53\x6b\xf7\x9c\x2d\x55\xd4\xbe\x03\x20\x4b\x56\xea\xfb\x7b\x75\x0c\x24\xca\x07\x7d\xc7\x53\x35\x51\x99\x3d\x80\x21\xa2\x35\x9b\x72\x4e\x48\x3d\xb7\x4e\xc1\x16\x83\x04\xb5\xb6\x68\x3d\xdc\xc8\xc8\x68\x6f\x6c\x7c\x80\x38\xe7\xc1\xf5\x56\xc7\xf1\x70\xcd\x6d\x39\x90\x70\xde\xcc\xf9\x97\x7e\xd8\x77\x5b\x4e\x1f\xd7\x04\x44\x3d\x81\xc8\x63\x6b\x1d\xdd\xda\x9a\xce\x62\x45\x61\xf1\x3e\x72\x73\xdd\x00\x29\x35\x06\x0a\x2a\xd8\x47\xee\x63\x68\xb4\x90\x05\x7d\x2a\xc1\x67\x1a\x07\x5c\xf0\x99\xc6\x81\x10\x7c\xd4\x88\x70\x89\x40\xca\x27\xae\xa3\x87\x29\x96\x89\x7f\x95\x4d\x0d\x54\xaa\x55\x26\x99\x88\xb8\x93\x1f\x7f\x06\x17\x3f\x78\xb2\x15\x64\xce\x64\x77\x55\xac\x9d\x96\x0c\xb6\xd3\xea\xf1\xa5\x99\xda\x2d\xc7\x38\xf2\x8a\x0d\xd3\xb7\x98\xe3\x6a\x35\x7e\x80\x9a\x8e\xbe\xf4\xac\xa3\x00\x80\xc4\x30\x97\x4c\x6c\x69\x8f\x20\x44\x9d\x78\xbf\x05\xb2\x9e\x0a\xd2\x34\x5a\x3a\x48\x1e\x20\x37\xf7\x35\x54\x5f\xc5\x2d\x42\x30\x40\x76\x5c\x77\x39\x01\x2f\x4c\x4b\x00\xe1\x61\x66\x66\x50\xcf\x91\xb4\x7c\x5d\x80\x46\xbc\xb8\x14\xb7\xa4\xd8\x0e\x5c\xd4\xdc\xd4\x07\x76\x54\xb3\x33\xcd\x48\x01\x05\x58\x7d\x04\xb6\xec\xa0\xbe\x30\x0f\x57\x03\x89\x0d\xe4\x2b\x1b\xeb\x34\x14\x4e\xbe\xaf\x61\xd2\xd7\x1a\xb5\x85\xdb\x91\x03\x57\x3a\x2a\x3e\x85\x75\x77\x08\xc3\x3a\x27\x32\x1d\xe2\x19\x89\x00\x2a\x5b\x4c\xcb\x4e\xb2\xa7\x84\xcb\x49\x22\x8b\xf0\xb2\x4b\xed\x83\xe2\x9a\x2d\x93\x6b\xee\x10\x46\x35\x5e\x52\x3d\x06\x5b\x36\xa9\x47\x60\xf9\xab\xec\x00\x1e\x47\x51\xeb\xed\x00\x16\x19\x9a\x53\x24\xb7\xa3\x48\xce\x49\xbd\xa3\x33\xbe\xb3\x0d\x9f\x77\xd6\x6f\x08\xd6\xce\x05\xc3\x46\x80\x27\x7c\xe4\x4d\x28\x3e\xc4\x8d\x91\x88\x77\xba\xc1\x1a\x63\x14\x7f\xa0\x11\x87\x30\xc5\x2d\x75\x54\x59\x89\x24\x45\x0f\xc2\xac\x5f\x49\x78\x80\x94\x8f\xff\x43\xa6\xde\x25\x91\xa5\xe8\x01\xc9\x96\x48\x0e\x10\x51\xf6\xf5\x86\x1d\xf8\x5a\xf4\x86\x32\x58\x6d\xd6\x1f\x68\x25\x0e\x39\x46\x07\x36\x40\x07\x78\x09\x1f\x8a\x6b\x9b\x8e\x54\x2e\x80\xb9\xc4\x17\x43\x98\x4b\xf9\x39\x63\x0e\x18\x42\x22\x9d\x87\xd4\x52\x2d\x22\xde\x38\x40\xad\xdc\xd2\x49\x2a\x99\x2a\x7b\xe1\x7e\x6a\x9d\x1f\xa1\xb0\x46\x0e\x0e\x0e\xdc\x0d\x45\xd9\x0c\xec\x3b\xfd\x10\x45\x35\xd7\x23\xa9\x45\x7e\xb8\x34\x24\x06\x5d\x92\x08\xfb\xa2\x63\x46\xd9\x0c\xd4\x29\xa4\x05\x4e\x7c\x0a\x22\xc3\x55\x44\xec\x5e\x20\xdc\x9a\xe0\x1d\xa7\x2d\x8f\x40\x49\x4a\xe6\x45\x5c\x14\x86\x30\x02\x77\x85\x9d\x92\x61\x61\x92\x4e\x25\x74\x4c\x74\xbe\xba\x9b\xcc\x50\xff\x20\xac\x56\x99\x8d\x07\x3e\x9f\xec\x14\x1c\xd4\xc5\x0b\x7f\xec\xfb\x75\xd7\xf3\x97\x50\x50\x7a\xf6\x12\xb0\x4f\x8a\xd4\x03\xa7\x4f\x50\xe4\x09\xc4\xa6\x48\x7d\x90\x3d\xfc\xda\x39\xb3\xff\xc9\xe7\xcc\xfe\xa7\x9a\x33\x8f\xea\xf7\x56\x7a\x2b\x61\x81\xd7\x07\x35\x9b\x4a\x45\x23\x6a\x14\x1c\x88\x47\xe1\x39\x57\xa1\x46\x2f\xa9\xd9\xcb\x0c\xaa\xec\x10\x19\xa6\xff\x99\xa8\x75\xaa\x9c\x10\x3c\x26\x6e\x7b\x7e\xc6\xea\x6f\xf2\x7e\x08\xdc\x3f\xf6\x8f\xbd\x1a\x5e\x0a\x2e\xf0\x60\x7c\xeb\x07\xac\x7d\x4c\x4e\x91\xe3\x06\x14\x39\xd0\x37\xa3\xc4\xc5\x88\xcf\x3a\x41\xcb\x7b\xfe\x01\x95\x06\xb8\x7e\x9d\x1e\xf4\x1c\x27\x75\xd3\xf1\xeb\xb4\xe6\xc2\x08\x31\xf1\x37\x40\x89\x3d\x65\x08\xe0\x02\x35\xba\xd2\xaa\x0b\xdf\xcc\xed\xd6\x56\xd0\x6c\xf3\x85\x5f\x27\x0a\x93\xd4\x60\x6b\xb1\x65\x87\xf5\x05\x68\x86\x60\xcb\x8e\xea\x61\xb3\xb5\xef\xf4\xeb\xae\xe7\x82\x0d\xd9\xb0\x44\xba\xa3\xa6\xdd\x26\xab\x47\x5b\x8b\x66\x58\x1b\x01\x90\x0a\x7d\x7e\x06\xa2\x66\x87\xf5\x08\x24\x50\x31\x58\xa6\x16\xfc\x4c\x87\xf2\xa0\x70\x81\x7c\xe9\x54\x2d\x78\x00\x03\x30\x96\xd3\x3c\x04\x07\x4e\xb5\x2a\x53\x7d\xb0\x17\xec\x2f\xf6\x54\x10\x2b\x1b\xc3\x00\x2e\x80\x88\xf2\x51\xaf\x2f\xf6\x78\x86\x80\x67\xd8\x77\xf6\x40\xad\x16\x48\x63\x66\x9e\xba\x90\xc5\xec\x81\x7a\x7d\xb1\xe4\x64\x18\x8b\x5b\x4c\x60\x08\xfa\xb2\xe0\x05\xf0\xec\x5a\x6d\x01\xf9\xdb\x02\xfa\x00\xc0\xc5\x3e\x12\x17\x04\x22\x2e\xd0\x40\xb6\x8f\x16\x22\x58\xdc\xa2\xee\x82\x02\xa3\xec\x48\xd3\x41\xa6\x6b\xfc\x07\x89\x8a\xc4\x9d\x29\xe1\xc3\xf2\x84\x19\x17\xfd\xec\xbb\xaf\x8e\x4a\xe2\x8b\x9b\xc1\x4f\x4f\xbf\x3c\x7a\x75\x74\x76\x72\x7c\xb1\x06\x3e\x73\x65\x40\xfc\x4a\x46\xaa\x3f\x0a\xca\xe3\xab\x92\xc6\x34\x93\xe5\x50\xed\x33\xd7\xe7\xc9\x44\xe2\x8c\x8f\x45\xd0\xf8\xf5\x39\x48\x26\xc7\x73\x9f\xe1\xf5\xf0\x93\x0c\xfc\x19\x99\x3d\x00\x1f\x65\xe0\xe5\xc5\x8e\xeb\x73\xcc\x32\x39\xbe\x12\xd1\xf4\xd7\xe7\x78\x97\xcd\x11\x2d\xc2\xf1\xfa\x0c\x41\xb6\x13\xfe\xd5\x7a\xf0\xb0\x00\xab\xa7\xef\x70\x80\x59\x49\xa8\x51\xd2\xf8\x69\x05\xad\x1c\x55\x0f\x64\xba\xca\xc4\x98\xc7\x3e\xc3\x8f\x22\x94\xd1\x4a\xb6\xc7\x0c\xbc\x19\x83\xfe\xf4\x36\x64\xfe\x8d\x70\x73\x79\x30\x66\xfc\x1c\x5f\x7d\xe5\x97\x45\xa1\xbd\xce\x04\xae\x2e\x83\xba\x34\x19\xb0\x23\x85\x6a\xb1\x8d\x6b\xda\x7d\x6f\x70\x84\x47\xc3\x3b\x17\xf6\x96\xf7\x9f\xdf\xb9\xb0\xbb\xbc\x1f\x7c\xfd\xf3\x50\x3e\xf1\xcf\xb7\xdf\x2d\xe8\xb0\x76\xff\x56\xa4\x80\xfb\xc1\xeb\x57\xea\xe3\xf8\xce\x85\xad\xe5\xfd\xf3\x3b\x17\xb6\x97\xf7\x2f\xee\xdc\xe5\xfd\xc0\xbf\x7c\xaa\xbe\x0e\xa6\xef\xbe\xf8\x72\x28\x41\xde\xcb\x3f\xdf\x72\x90\x99\x7c\x8e\xe5\x9f\xc1\x2f\xdf\x9f\x5c\x7f\x73\xf3\x07\x0e\xd8\x59\x02\xbb\x8f\xec\xc1\x0f\x4f\x86\x5b\x4f\xe4\x2f\xd8\x12\x7f\x3f\x03\xcd\x2b\xe8\xa3\xe6\x0f\xe7\x0d\xbb\xef\xd9\x4e\x0d\xd8\xe7\x5b\xa0\x7f\x6f\xff\xae\x06\xee\xc5\xeb\xef\x6a\x00\x7c\xd6\xbc\x82\x31\x6a\xfe\x60\xff\x75\x0d\xf4\xed\xf3\xda\xfd\xef\x6a\xa0\xcf\x13\x03\xd4\xe4\xf0\x1c\x50\x64\x91\x0f\x4e\x8d\x97\xba\xe0\x19\x9c\x1a\xf8\xac\x69\x38\x92\xa6\xd7\xe6\xde\xa5\x37\x37\x27\xb7\x9f\xc6\x19\x0d\x95\xa1\x9f\x5a\xb9\xd4\x37\xec\xdb\x8c\x2f\x0f\x64\xb6\x98\x9d\x92\xab\x90\x4c\xc8\xc8\x0f\xd9\x73\x72\x45\x58\x9c\x84\x22\x82\x8c\x2f\x32\xeb\x61\x80\x67\xd5\x2c\x84\x50\xd8\x7f\x44\x81\x9e\xf5\x3b\x4b\xc4\x3d\x75\x86\xfd\x47\x94\xed\x7d\xaa\x46\xd6\x6c\x8d\x01\x94\x62\x40\xc7\xb8\xf2\x1c\x00\xa0\x65\x09\xb9\x23\x77\x57\x4f\xfc\x9e\xb0\x91\xb8\x8e\x67\xe4\xc7\xd8\x8a\xc9\x55\x58\xf7\x17\x2c\xb2\x3c\x89\xd7\x3b\x9e\xf2\x5c\xea\x89\x3c\x4b\x7c\x59\x6e\x18\xa0\x23\x71\x8b\x04\xaf\xd7\x13\xa9\x36\x48\x72\x8e\x16\x94\xe2\x70\x74\xcb\x1b\xed\x59\x06\x64\xa6\x80\xe0\xbd\x7f\x1b\xab\xcc\xb5\xcd\x92\x6a\x25\x50\x71\xc5\xd9\x22\x6c\xb0\xbe\x0c\xf8\xa8\x56\xe1\x9b\x11\x9e\xb3\xfa\x2f\x98\x46\xba\x69\xfd\xe2\x62\x25\xe4\xf7\x1c\xb0\xa4\x79\xab\x65\xd9\xe0\xe1\xc2\x1e\xd7\xce\x10\x5f\x63\xaa\x5b\x78\x51\x5c\xa8\x84\x31\x83\xeb\x4e\x93\x39\x26\xdc\x34\x8f\xc4\x81\xf1\xc0\x19\x56\xab\xfa\xd9\x1d\xf6\x6d\x86\xee\xc2\x88\x89\x2b\x38\x3c\x0b\x87\x57\x24\xc4\x58\x10\xd8\x12\x62\xa4\x2e\xf8\xb5\x5b\x00\x78\x66\x01\xd9\x5c\xf1\x88\xe0\x90\x71\x82\xcd\x64\x72\x39\x1d\x6a\xc3\x77\x9d\xe8\xc0\x96\xf4\x1a\xad\x6d\x8a\x09\xc4\xa7\xaf\xd1\x0f\x94\x0c\x60\xae\xf2\x5a\xdf\x92\xbb\x8b\x3c\xbc\x89\xcc\x4c\x1e\xb8\xb9\x68\x30\x1c\x33\xbe\xa3\x5c\x89\x31\xf7\xda\x0f\x26\x11\x9d\xe1\x71\x65\x14\x85\x23\x12\xe3\x0a\x0e\xaf\x9a\x69\x47\x2a\xba\x77\x16\xdf\x75\xab\xa9\xfb\x32\x64\xf8\x0a\x53\x35\x25\x13\x8f\xea\xc4\x29\x2c\xc1\xbc\x79\xa3\x95\x3c\xa3\xbc\x5b\xe6\xee\xb2\x4a\xbd\xc3\xef\x96\x42\x3c\x27\x08\xef\xd1\x7d\x92\x5c\x81\xa6\xaf\xde\x8f\x10\x19\xd0\xe1\x86\x9a\xc0\x51\x23\x66\x78\xa6\x66\xf1\x1c\x53\xbe\x43\x56\x84\xf1\x57\x96\xc7\x1a\xe2\x4a\x29\x94\x7c\x49\x9c\xfe\x24\x31\xfd\xd5\x8d\xeb\x38\x05\x60\x90\x35\xc4\xf5\xc2\xc8\x75\x9c\x5c\x16\x4d\x9f\x46\xae\x24\x09\xb2\x86\x7e\x46\x51\x23\x9a\xf3\xde\xc5\x03\x67\x98\x2b\x42\x5c\x1a\x52\x8f\x26\x13\xd5\x50\x78\xc1\x0b\x5b\xc4\xf8\x73\xfe\x81\x84\x57\x68\xd3\xcd\x65\x99\x53\x3c\x22\x31\x89\xc2\x3a\x91\x38\x57\x59\x1b\x3c\xa7\x62\x92\x2f\xa8\x2f\xf0\xa9\x86\x23\xdf\xf0\x19\xf6\xe3\x05\xc5\xf5\x45\x48\x34\x86\xe4\x63\xd2\x0f\xf1\x0a\x59\x83\xff\xcd\xb4\x3f\xbd\x84\xfb\x07\xbb\xb1\xd5\x07\xf5\x26\xb4\x2c\x90\x47\x4c\x34\x9b\xfb\x23\x56\x8f\xa7\x11\xd5\x15\x7c\xc9\x4b\xd7\x94\x83\x34\x88\xc0\x93\x7c\x4c\xa8\x56\xe6\x2a\x29\x32\x88\x12\x3e\xfb\xe5\xe3\x8b\x14\xb9\x72\x25\x1a\x33\xd3\x63\x45\x4a\xd9\x95\xe7\xbb\x25\xdf\x25\x95\x4c\x6e\x00\x13\x34\x35\xa4\x33\xb5\x6d\x67\xf5\x5c\x05\xfa\xe2\x5c\xe9\x18\xc0\x89\xcd\x00\x58\x02\x78\xc7\x65\xa6\x6c\x83\x4d\x06\xf4\xb1\x2d\xce\x30\xb1\xdf\xbe\xc9\xba\xe2\x7a\x4c\x66\xf3\x00\x67\xc7\x2b\x66\x7e\x38\xf6\xe9\x38\x3f\x30\x9c\xe6\xea\xef\xc9\x98\x4d\xeb\xa1\x4f\x69\xf4\x9e\x67\xd3\x93\x29\x19\x52\xf9\x49\x7a\xe2\x6a\x4a\xcd\x7d\x5c\x53\xb0\xa2\xcc\x82\x72\x47\xd1\x18\xaf\x94\x57\x48\x92\x46\x71\x93\x45\x10\xd4\x43\x7f\x86\x4b\x9a\x3a\x5b\x2d\xb2\x88\x24\x8d\x12\x49\x1c\xd5\x45\x53\x8a\x0a\x8c\x65\xaf\x57\x08\xda\x97\x28\x96\xfc\x4a\xc8\xe3\xe2\x00\xc4\x36\x27\x70\x7e\x88\x14\x13\x91\xd5\x5a\x1e\x99\xa4\xd0\x69\x84\xca\x74\x8d\x78\xe3\x87\x57\xda\x41\x3e\x93\xb5\xc2\x99\x6f\x5c\x89\xc2\xe0\xb6\xe2\x8f\xf8\xba\x53\xf1\x2b\x31\x09\xaf\x02\x5c\x91\xe5\xf9\x81\x7a\xb0\xc0\x46\x21\x4b\x09\xf2\x92\xad\x70\x1d\x95\x87\x17\x14\x94\x2c\x35\x5a\xc0\x93\x9a\x2b\x32\xb1\x49\xb5\x1a\xad\x2e\x6a\xdf\xe2\x8a\x44\x23\x0b\x6e\x2b\xe3\x48\xb8\xf4\xc7\x8b\xf9\x3c\xa2\xac\xa2\x98\x66\x45\xf5\xa7\x32\x16\x25\xcb\x08\x0e\xfe\x87\x15\x85\x6f\xfc\x11\x5b\x29\x48\x2d\x83\x42\xfc\x4c\xd0\xbf\x24\x13\x5b\xad\xc2\x6a\xe5\x2a\xeb\xa2\xfc\x6c\xf6\xb3\xc2\x5b\x96\xcd\x7b\xf7\x21\x23\xa7\xd7\x87\x7a\xb2\x98\x7c\xe8\xf0\x89\x16\xe9\x81\xf3\xcb\x06\x4e\xf5\x7b\x2b\xb7\x77\xc8\x2d\x4f\xc9\x4e\x80\x54\xab\x72\xef\x40\x32\x7b\x87\x1c\xb8\x96\x03\xbc\xa8\x5a\xf5\x8d\x2d\x4e\x0e\x2c\x5a\xd9\x3a\x94\x00\xd4\xfc\x64\x97\x53\x5a\xd8\xea\x3e\xa4\x04\x40\x6f\x32\xf2\x43\x21\xe4\xc2\xf5\x6c\x7a\x94\x9d\xa7\x3a\x30\x23\x99\xd8\x71\x8e\x4c\x1e\x51\x90\x84\x94\x93\x42\x84\xb5\x41\x63\x9d\xba\x31\x7f\x44\x63\xe6\x6a\xcb\x3e\x43\x89\x60\xb5\x31\x7b\x44\xbe\x19\x48\xc2\x3e\x54\xd8\xca\xf5\x08\xe0\x2e\x91\xf4\x64\xe8\x12\x11\x8d\x58\x7a\xb1\x63\x75\x8b\xee\x94\xc4\xe0\xfe\x9e\xff\x49\x0e\x24\x1a\xea\xe6\x7e\x44\xa1\xdf\xc0\x37\x73\x3c\x62\x78\x8c\x42\xe8\x37\x26\xe2\xc2\x45\x02\xfd\x46\x10\x8d\xe4\xba\x12\x41\xbf\xc1\x39\x2e\xca\xaa\x39\x0a\xe2\x20\x8a\x2f\x8d\x91\x3f\x67\x0b\x8a\x4f\x99\x3f\x7a\x77\x46\xfd\x11\xae\x56\x4b\x3e\xd8\x3e\xef\xa1\xbf\xcc\xaf\x8a\x97\x40\x84\x53\x80\xac\x71\xb9\x20\xc1\xf8\xb5\x6a\x6c\x76\x29\x4d\x3a\x4e\x33\x91\x87\x46\x53\x9f\x3e\x8b\xc6\xf8\x90\xd9\x0e\xc8\x18\xe7\x35\x58\xf4\x76\x3e\xd7\x76\xd1\x4b\xf3\x6c\xc3\xc8\x9f\x88\x63\xe7\xe7\xcd\x2b\x68\x9d\x9f\x9f\x9f\x5b\x20\x4d\xb5\x9a\x57\xf0\xc9\xf9\xb9\xf5\xc4\x48\x3b\x77\x24\xa4\x63\x02\x9e\x33\x99\xc8\x32\x89\xa1\x4c\x0c\x33\x89\x54\x26\x52\x33\x71\x70\x7e\xe3\x38\xf5\xf3\x1b\xe7\xc5\xb0\x79\x65\x72\x83\x84\x07\x9c\x9f\xdf\x38\x56\x8d\x77\x7e\x09\xb2\x19\x5d\x9e\xd1\x7d\x71\x7e\xb3\xfd\xa2\x7e\x7e\xb3\xbb\xae\x84\xa4\x80\xa5\xa9\xc4\x7f\x3c\x3a\xce\x87\x32\x75\x98\x49\xfc\x41\x26\xfe\x60\x26\xd6\x65\x5a\xdd\xfa\x07\x8b\xb8\xc8\xd4\x7d\x88\xcb\x7d\xd5\xd6\x49\xdf\xab\xaa\xb6\xd2\x4f\xac\x27\xb5\x90\x43\xe0\x1b\x06\x6a\x4f\xac\x27\x4a\x20\x0f\xfc\x38\xb6\x3c\xb9\x4f\xc3\x8d\xb9\x4f\x59\x2c\xe3\x28\x17\x9c\xe9\xac\x44\x1b\x25\xc2\xcc\x00\xd4\xac\xba\x55\xe3\xcf\xee\x10\x78\x44\xb6\x50\xcd\x7a\x6b\x60\xd5\x6c\xdc\x20\xe1\x35\xa6\x0c\x8f\xfb\xd6\x0f\xd2\x82\x95\xd5\xac\xa1\x25\x9b\xe0\x87\xb7\xba\x91\xfc\xb9\xc2\xe7\x92\x3f\x62\x98\x5a\x5a\x60\x1e\x27\xdf\x71\x38\x16\xe1\xca\xc3\xf9\x82\xa9\xcf\x11\x9b\xf2\xcd\x53\x42\x3b\x63\x1c\x8f\x28\x11\x0c\x58\xb3\x30\xeb\x48\x31\x9b\x8a\x55\x33\xbb\xa5\x3c\x1a\x84\xe1\x28\xef\x73\x04\x64\x58\x16\x11\xe6\x1a\x40\x2d\x93\xe8\xdb\x3f\x18\x72\x21\x45\xee\x1e\xdb\xd7\x5f\xf6\x58\xad\x06\xc2\x01\xab\xbb\xc3\x4d\x24\xc2\x98\x55\xab\x76\x28\xce\x2c\x06\x6c\x08\xf9\x0e\x77\x43\xc3\x22\xba\x54\xc3\x94\x04\x6c\x17\x03\x55\x71\x75\xdb\x43\xb1\xb1\xe4\x49\x2d\x33\xa9\x66\x55\x22\x5a\xb1\x6a\xe1\xc0\x1d\x6e\x8c\xf1\xc4\x5f\x04\x2c\xf9\x9e\xe8\x1c\xea\x2e\x68\xfc\x14\x91\xd0\xb6\x60\xc5\x12\xc6\x41\x2a\x53\x98\xc6\x26\x5e\x2e\x6d\x0c\x6a\x56\xe5\x72\xc1\x2a\x56\xcd\xb6\x7d\xc4\x40\x5f\x12\x86\x2f\x68\xc2\xcb\x22\x98\xc3\x0a\xd6\xdc\x90\x67\xf4\xfe\x12\xb2\xa5\x2d\xd8\x2a\x80\xd7\x39\xce\xc8\x90\x3c\xac\xdc\x44\x88\xf5\x99\x77\xb7\x14\x59\x28\xf4\xf9\xf6\x3f\x46\x77\x31\xf3\x29\xf3\x9e\xe1\x25\x0c\xd0\x33\x0c\x17\xe8\x04\xdb\xd6\xbe\x05\x37\x5d\x00\x47\x85\x77\x0a\xa8\xfe\x58\x60\x09\xc7\x02\xfa\x77\x12\x7a\x8a\xce\xb0\x6d\xb1\x54\xff\x0f\xe0\x44\x7c\x6f\x1e\x48\x80\x6b\xf1\xa6\x5e\xae\x64\x45\x4d\xf9\x76\x29\xf2\xfa\xb9\x63\x19\x00\x6f\x05\xd4\x9d\x04\xba\x10\x2f\x4b\xf9\xf2\x5e\xe4\x08\x33\xc7\x07\x2f\xc7\x16\x80\x47\xa8\xf9\xc3\xe0\xc9\x79\xf3\x6e\x39\x6c\xc2\x1b\x74\x8a\xed\x81\xf5\xc4\x82\x56\xd3\x82\xbc\x20\x6b\x69\x0d\xe1\xa6\x2b\xca\x38\x41\xf2\x7e\x6c\x41\xeb\x4b\x78\x5a\x50\xe4\x59\xf4\x0e\x87\x27\x4a\x32\x83\x67\xb2\x3f\xb2\x05\xaf\xcb\xc0\x2d\x00\xbf\x12\x80\x9e\x27\x21\x0f\x8b\xf0\x48\x99\x0a\xe9\x6c\xf2\xd5\x78\xeb\x33\xb1\xe5\x5f\xc2\x67\xa2\x04\x28\x0b\x78\x27\x5e\xf4\xb5\xc5\x3c\xe5\x4d\x59\x08\xdf\x8c\xd0\x20\x7b\xa7\xf2\x89\x4b\x5d\x48\xe3\x52\xdd\x84\xec\xc9\xab\x99\x93\x54\xfe\xe6\xf1\x07\x46\x66\xfa\x86\x70\x5a\xad\xd2\x41\x6b\x98\xdc\x32\x0e\x09\xb3\x01\x58\xc2\x9f\x44\x7b\x9e\xc8\xa6\x3c\xe7\x08\xff\xe1\xc9\xb0\x09\x8f\x35\xb6\x87\x70\xd3\x11\xdf\x5e\x8a\x6f\x7e\xfd\x97\xc3\xfa\xf7\x4f\xc4\x88\xbc\x12\x30\x03\xcb\xb7\xa0\xf5\x8b\x35\x84\x03\xeb\xd0\x82\xd6\xf7\xd6\x10\x8a\x51\x4a\x46\x48\xe6\x7f\xc1\xf3\xcb\xec\xc3\x26\xfc\xa5\x2c\x6f\x32\xa2\x6f\x45\xc3\xe4\x9d\xd3\xfc\xfd\xa9\x78\x97\x17\x4e\xf3\xf7\x2f\xc4\xbb\xbe\x54\x9a\xa7\x7c\x23\x52\xe4\x3d\x9b\x11\x1d\x93\x50\x7f\xf8\x4c\x7c\x88\x26\x93\x18\x33\x35\x8e\x3f\x1b\xb0\x32\xe5\x5b\x91\x82\xe4\xcb\xe7\x82\x20\xa4\xb7\xd8\xdc\x1f\x61\x0b\xc0\xef\x78\xfb\xcf\x59\xfd\x9c\x56\xce\x6f\x76\xba\xe7\x37\x87\xce\xf9\xc2\xed\xed\x38\xe7\x8b\x96\xc3\x97\x26\xfe\xe7\x90\xff\xb6\x76\xc4\xef\xae\xf8\x7d\xc1\x7f\xbb\x2f\xce\x17\x6d\xc7\x71\x86\x4d\xf8\xa5\xea\xf8\x39\xb3\xa0\x75\x4e\x39\xb2\x2a\x16\xb4\xfe\xe3\x3f\xe5\x3f\xff\xca\x82\xd6\xff\xfb\xdf\xfd\xd1\x82\x03\xeb\x6f\xff\xf8\x47\x0b\x5a\x7f\xfb\xc7\xff\x82\x43\xc8\x52\x2d\xf5\xb0\x2b\x3e\xfc\x1b\xfe\xfb\x37\xff\xd2\x82\xd6\xdf\xfd\xf1\x8f\xe9\x44\xf8\xbd\x68\x79\x2c\x24\xba\xca\xdc\x67\x0c\x53\x4e\xc5\x5f\xf3\xd6\x6f\xd6\xcf\x9b\x5e\xfd\xaf\x07\xf5\xf3\x1f\x7e\xbc\xab\xff\x93\xf3\x9b\x43\xb7\x7e\x7e\x73\xb8\x7d\x7e\x73\xb8\x7b\x7e\x73\xf8\xf4\xfc\xe6\xf0\xd9\xf9\xcd\xe1\xd1\xf9\xcd\x53\xe7\xfc\xe6\xa9\x7b\x7e\xf3\xb4\x77\x7e\xf3\xf4\xe9\xf9\xcd\xd3\x17\xe7\x37\xcf\xb7\xcf\x6f\x5e\x6c\xf3\x16\xb8\xb2\xb7\x2d\xf1\xd2\x96\x2f\xed\x23\xfe\xdb\x71\xc5\x4b\xb7\x2d\x7e\xbb\xf2\x85\x7f\x71\x77\x05\x58\x87\x63\xa2\xd5\x95\xe8\xda\xde\xee\xf2\xdf\xdd\x0e\x7f\x79\xfa\x82\x7f\x39\x92\x5f\x8e\xb6\x25\xc2\x78\x69\x6d\xc7\x69\x8b\xdf\x1d\xf1\xd2\x72\xf8\x6f\xdb\x39\x5f\xbc\x78\xce\xeb\x7c\xf1\xbc\xfd\xe2\x7c\xf1\xe2\xa8\xd3\x15\xbf\xbd\x61\x13\xfe\x41\xa1\x78\x53\xb0\x0a\x4e\x5b\x9e\x05\xad\xbf\x16\x4f\x03\x0b\x5a\x3f\x70\x94\xfe\xc8\x91\xcc\x49\xf4\x9f\x88\xf4\xff\xf8\x3f\x70\xfc\xff\x6b\xfe\xe5\x3f\xfe\x8f\xfc\xf1\x7f\xe2\x3f\xff\x33\xff\xf9\x5f\xf8\xcf\xbf\xe5\x3f\xff\x2b\xff\xf9\x3f\xf8\xcf\xff\xcd\x7f\xfe\x83\x05\xad\xff\xe7\xbf\xe5\x3f\xff\xa7\x1c\xb1\xff\x52\x0c\xcc\xbf\x16\x05\xfe\xed\x1f\xff\xad\x78\xfb\xf7\xf2\xed\x6f\xfe\x46\x0c\xd7\x7f\xad\xde\xfe\x1b\xf1\xf6\x2f\xe4\xdb\x3f\x13\xf9\xfe\xab\x7f\x29\xdf\xfe\xb9\x18\xf7\xff\xfe\x7f\x97\x6f\xff\xe2\x9f\xf3\xb7\x7f\xf3\x1f\xe4\xdb\xff\x25\xbe\xfd\x3b\xf9\xf6\x77\x7f\xfc\x1b\x31\xf8\xff\x99\x7a\xfb\xcf\xc5\xdb\xbf\xe2\x5d\xf8\x3b\x51\xf9\x7f\xfa\xdf\xfe\xbd\xf8\xe5\xed\xfc\x4f\xff\xee\x9f\x8a\xdf\x7f\x96\x52\xca\xf7\x82\x52\x92\x3d\x6b\x86\xd8\x31\x36\x38\xa2\x05\x20\xc3\x62\x76\xd4\xe5\xec\xa0\x18\xd9\x82\xc9\xcf\xa3\x98\xd1\x68\x3e\xe5\x59\x78\xc2\x38\x5a\x5c\x06\xb8\x92\xa6\xc7\x16\x10\x61\x90\x05\x8f\x51\x4c\x86\xc8\xd7\xf3\x50\xbe\x46\x58\x2f\x18\xc7\xfe\x0c\x9f\xd0\x63\x5d\xa7\x2f\x3f\x5c\xfb\x01\x19\x9f\xf9\x57\x16\x80\x71\x0a\xaa\x81\x02\x59\x98\x23\xcb\x5a\x60\x4e\xe6\x6e\x7d\x77\xd8\x84\x23\xac\xc8\xc0\xb5\xa0\xb5\x6b\x30\x96\xb1\x00\x72\x04\xd0\x54\x03\x39\x39\xa0\x49\xa6\x55\x16\x80\x73\xac\xd7\x44\x95\x30\xc3\xc8\x81\xd7\xfc\xe7\x0a\xa3\xc1\x5d\x40\x42\xec\xb9\x70\x14\x05\x8b\x59\xe8\xb9\xcb\x21\xbc\xe4\xdf\x6e\x31\x1a\x0c\xe1\x05\x36\x43\xcc\xf2\xf5\xbb\x21\x16\xeb\x37\x8b\x40\x87\x7f\x35\x52\x2a\x24\xac\xc4\x05\xe7\x0d\xcf\xfc\xf0\x09\xab\x08\xb0\xca\xdc\xa7\x31\x09\xaf\x2a\x13\x1a\xcd\x2a\x94\x67\x3a\xb7\xac\x9a\x51\x48\xed\x89\xd5\x78\x02\x36\x02\x14\x0f\x8c\xd4\x61\x26\xe8\xa2\x21\x08\xc4\x8b\x4b\x79\x26\x68\x5f\x63\x38\x33\x83\x27\x1d\x19\x70\x5f\xe1\x95\xcf\x37\x2a\x62\x9e\x6c\x6d\xa1\x56\x94\x77\x61\x66\x63\x38\x18\x42\xcb\x82\xe2\x2e\x4a\x98\x93\x65\x92\x82\xf3\xd1\x0c\x93\x52\xd4\x02\xa8\x65\x6e\xc8\xa5\x6c\x0f\x43\x72\x15\x46\x14\xf3\xad\x9f\x67\xc6\x96\x3a\xc5\xd9\xb5\x54\xe5\x96\xb2\x38\x14\x32\x38\xcf\xac\x64\x66\x8f\x99\xe5\xd0\x65\x36\x1e\x60\xae\x0c\x29\x0d\x43\x43\x08\xf6\xf0\x32\x13\x21\x50\x9f\x57\xc1\x10\x5d\x09\x6b\x1b\x2e\xf2\x26\x5e\x58\xc2\xf6\x87\x22\x56\x77\xf7\x36\xaf\xf0\x80\x0e\xf7\x00\xad\xd7\x45\x6a\x88\x24\x19\xd9\x22\x23\x1d\x82\x06\x7f\xd5\x34\x15\x36\xe4\xc3\x72\x8f\xee\xb3\x3d\xe0\x3a\xc2\x66\xd2\xd8\x17\x53\xd0\xe7\x92\x2f\x09\x71\xad\x06\x35\x34\x72\x41\x92\xb3\x56\xe3\x02\xb3\xd6\x16\x88\xb6\xa1\x10\x1a\x5e\x4d\x5f\x61\x33\xce\xd4\x6b\xde\x79\x18\xa2\xd7\x46\x78\x4d\x25\x64\xde\xa9\xc5\x14\x8b\xd0\x0c\x1e\xcd\x34\x94\xea\x86\x42\x1c\x8e\x13\x50\x26\x41\xc3\xe2\x3e\x19\x18\x3c\x14\x38\x9f\xe1\xfd\x4b\x7c\x7f\x6f\xcf\xf0\xc1\x25\xae\x56\xed\x4b\x8c\x66\x58\x4e\x27\x00\x6f\xb1\x8c\x56\x9b\xa1\x97\x67\x06\xa1\xbe\xcb\x68\x02\xf8\x9b\xf4\x17\x50\x71\x24\xc5\xa4\x64\xe8\x0d\xb6\xc1\x1e\xdb\x44\xc8\xdf\x03\x58\x5f\xbe\xa4\xd2\x0b\xc2\x89\xbe\xd1\xc5\x18\x3e\xda\x8c\xb7\xea\x5a\xb4\xcd\x8e\x58\xdf\xf7\x24\x59\x03\x5e\xa8\x30\xd2\xca\x7b\x2c\x08\xd7\x17\x11\xe7\x0f\x2e\x74\x21\x17\x7c\xc0\x6c\x8c\x8e\xb1\x0d\x00\x92\x39\x65\x91\x0c\xbd\xe4\x69\x49\x69\xef\x8c\xb7\x08\xbd\xd2\x6f\x7d\xfb\x1a\x23\x0c\x03\x44\xa1\x1d\x23\xc6\xd3\xec\x85\x08\x8f\x7f\x83\xed\x27\xaf\x49\x3c\xf3\xd9\x68\x5a\x61\xfe\x55\xc5\x7a\x52\x8b\x6b\x4f\xac\xca\x26\x42\xfc\x79\xc1\x37\x25\x90\xcf\x71\x00\x31\xca\x2a\xad\x24\xc1\x0b\x39\xd2\xbf\x52\x82\x63\x0c\x47\x53\x12\x8c\x29\x0e\xbd\x40\xc9\x90\xc0\xb3\x67\x58\x04\x1f\xf4\x01\x80\x17\xb8\x5e\x87\x58\x75\x82\x21\x5f\x84\x22\xbc\xc0\xd5\xea\x21\xb6\xa7\xbc\x92\xa5\xd9\x66\x06\x19\xa2\xb2\x00\xfe\xe8\x73\xec\xeb\xac\x45\x98\x4b\x5d\xe3\x25\x76\x7e\x32\xf0\x21\x50\x40\x45\x39\xc5\xbd\x50\xbc\x23\x89\xac\xab\x9a\xcf\x77\x5c\x09\xda\x57\xaa\x4d\x86\x2b\x33\x58\x62\xd8\xdd\x56\x3b\x3f\x05\x67\x58\xb8\xe2\x73\xc1\x62\x86\x6b\x35\x71\x25\x54\x06\x05\xb7\x00\x40\x2a\x1b\xfc\x39\xb6\xd3\xa1\xfc\x43\xda\x11\x9d\xde\xb7\xdd\x56\xb7\xb0\x82\x18\xf1\xad\x93\xaa\x20\xce\x56\x70\x01\x00\x8c\x0d\xfc\x06\x28\xe2\x38\x2e\x41\x89\xde\xa6\x29\x9c\x64\x87\x54\x8e\x48\x66\x74\xc4\xe8\xea\x21\xca\x75\xed\xf2\x41\x54\x6a\x07\x9d\x72\x24\xc3\x05\x1c\xc1\x31\x9c\x66\xa6\xd7\x6f\x8e\xe7\x4e\xa7\x0c\xcd\xb0\x0c\xcd\xcf\x34\x9a\xcd\x72\x8c\xed\x99\x5e\x51\xed\x19\x86\x3d\xd0\xb7\x03\x94\xec\xf9\x66\xb8\x86\x7a\xc0\xb3\x83\x6c\x89\xef\x00\x80\x41\xbe\xc4\x05\xef\x7f\x49\xf3\x46\x66\xf3\x46\xab\xcd\x1b\xa9\x4e\x8f\xd1\xe7\xc6\x2c\x99\x16\xe2\x3e\x83\x6f\xbe\xd9\xcd\x75\xa1\x25\xd1\xcd\x77\xc1\xbc\xf9\xad\x55\x84\x7f\x95\x22\xdc\x8e\x4a\xb8\x9e\x70\x3e\xe6\x35\x30\xce\x7f\x6d\x8a\xde\xea\x86\x09\xdb\xeb\x3d\x2a\x59\x31\x93\xac\x98\x02\x28\x21\xe4\x49\x0e\x43\x7e\xd2\x4a\x73\xc6\x47\xa5\x33\xde\x57\xdb\x63\xc8\xf8\x56\x3e\xf6\x22\x28\x8e\xfa\xc6\x52\x07\x10\x7b\x3e\xeb\xcf\xed\x08\x78\x77\xcb\x2c\x2b\xc8\x72\x27\x71\xf3\x6f\x11\x7f\x4a\x18\x3f\x55\x0d\x56\x23\x7c\x48\xaf\x4e\xf9\x96\xdb\x02\xbc\x8b\x36\x45\x9b\x0e\xd0\xb7\x23\xf8\x29\x25\xfe\x84\x57\xab\x3a\xb4\xa3\xec\xdc\x33\x1a\xb4\x40\x23\x34\x10\x93\x63\x28\x20\x16\x70\xc1\xdb\xb3\x50\xed\x59\x08\x9f\x45\x00\x17\xaa\x82\x51\x3a\xea\xe5\x8c\x64\x6c\x32\x92\xf1\x2a\x23\x19\xe7\xda\xf7\xc6\x8e\x84\x61\x73\x19\x7f\x78\xcc\xf3\xc3\xec\xd6\xe0\x03\x70\xf2\x1b\x71\x82\xf8\x83\x38\x41\x60\x4e\xb5\x60\x75\xaa\xad\xcc\xdb\x44\x21\x63\x4e\xa2\x0e\xe0\x13\x5a\xa9\x34\xf8\x34\xea\x00\xcf\x5e\x64\x4b\x7b\x0b\xd2\x21\x95\xca\x8e\xe2\x42\xa4\x1e\xa4\xa4\x90\xa7\x9c\x94\x17\xf9\x36\x8d\xd6\xf0\x92\xb1\xd9\xc1\xf1\x6a\x07\xc7\x09\xf7\x30\x79\xc9\xa4\x70\xf4\x3e\x2d\x2f\x89\xd7\x52\x88\xbc\x49\x8e\xcf\x41\xfe\x13\x0b\xb6\x12\xa0\xa7\x86\x1c\x15\xa0\x2f\x84\x70\x13\xa4\x6c\x26\x90\x6c\x26\x96\xb3\x36\x00\x25\x59\x24\xdb\x89\x13\xb6\x63\x53\x24\x17\x56\x73\xb7\x44\xf9\xa6\xc5\x8b\x0d\x19\x84\xc1\x05\xa2\xb0\x78\xc1\xf5\x85\x6a\xee\x8c\xcc\x30\x54\xaa\x19\x6f\xb1\xca\x94\xec\x11\x5a\xc0\x31\xba\x5b\xc2\x51\xa2\x4f\x8c\xb2\x07\x16\xfa\x34\x41\x1d\x75\xeb\xd3\x89\x81\x33\x54\x67\x13\x9f\x5b\xde\xb8\x81\xa9\x8f\x3a\x42\x2b\x28\xad\x28\xbc\xae\x7c\xd1\xd6\x22\xda\x5c\x43\x84\x43\x97\xba\xfe\x5b\x9e\xef\x16\xfb\x14\xb5\x24\x6c\xab\x2e\x0e\xe7\x2d\xa1\x7b\xc4\x94\x8c\x32\xe0\xdf\x69\xab\x28\xf5\xf7\xad\xfa\x4b\x2d\xaf\xf8\x40\xfd\xc7\xef\x9a\x8b\xe6\xdb\x26\xfd\xb1\x62\xf3\x5a\x80\x56\x51\xc5\x15\x9f\x62\xd3\x42\x00\x8f\x61\x65\x11\xe3\xca\x8f\xb7\x3f\x8a\x70\x15\xd8\x1f\x5b\x40\x56\xfa\xb3\xaa\xe4\xeb\xd2\x4a\x7e\x6e\x7e\xfd\x63\xc5\xfe\x79\xe1\x53\x86\xd7\xd6\xa1\x8b\x7c\xad\x8a\x7c\xc5\xbb\x3f\x8b\x42\x36\x45\x83\xa4\xc3\x30\x41\x02\x54\x18\x83\x12\x9f\x50\x63\x72\x28\x0e\x28\x4c\xc4\xbc\x57\x05\x7e\x5b\xda\xc6\xf7\xcd\x6f\x7f\xac\xd8\xef\x31\x7e\xf7\x98\x06\x8e\x79\xc3\xc6\xfe\x6d\x61\xb3\x56\xab\x7f\xae\xaa\x7f\xa1\xfe\x5e\x95\x36\xe3\x79\xf3\x45\xf3\xea\xc7\x8a\x3d\xf6\x6f\x1f\x31\x18\xe3\x95\xc1\x38\xe2\x0d\xe3\xbd\xe0\x8d\x53\xc4\xa6\x8c\x86\x1e\xa6\x36\x2c\xec\x68\xd8\x7e\xa7\xc4\xfc\xe2\x47\xdc\x68\x60\x8c\x15\x9e\x1e\x68\xa2\x05\x36\xd2\x96\x0c\x4a\x46\x4a\x8f\x20\x47\x59\x27\x83\xb2\xd1\x43\x6d\x19\x35\x1a\xa3\xd1\xe8\x4f\xd2\x16\x9f\x23\x75\x1a\x2d\xa8\xdb\x42\x9b\x8e\xf9\xe5\x52\x0d\xe8\xd3\xd2\x01\xbd\x6c\x3e\xfd\xb1\x62\xcf\x31\x25\xd1\xf8\x11\x23\xea\xaf\x8c\xe8\x54\x57\xfe\xec\x76\x14\x60\x64\x4d\xdd\x96\x05\x65\xca\x23\xa9\xef\x8b\x7c\x09\xad\xf6\x07\x96\xf0\xe5\x4a\x1b\xdc\x0f\x2c\xe1\xdd\x4a\x1b\x3a\x1f\x58\xc2\x4f\x0a\xd5\xbf\x57\x7f\x9f\x95\xa2\xfc\xa7\xe6\xef\x9b\xcf\x7e\xac\xd8\xbc\xf0\x47\xa0\x7c\xda\xfc\xa2\xf9\x65\xf3\xdd\x0a\xe2\x67\x82\xf9\x90\x70\xc1\xf0\x23\x9b\x18\xf3\x1c\x31\x1e\x45\xe1\xf8\x91\x39\x4e\x55\x67\x0e\x4b\x3b\x73\xda\x3c\xfc\xb1\x62\xcb\x42\x1f\xd1\x99\x78\xa5\x1b\xbf\xf0\x46\x71\xf9\xe4\xfb\x28\xc4\xc7\x3e\x17\xfc\xf6\x3b\x09\x53\x50\xf6\x7c\x46\x93\xbe\x57\x4d\x3a\x51\x7f\xaf\xd5\xdf\x6f\xd4\xdf\x3f\xa8\xbf\x37\xa5\x4d\xfe\xbe\x79\xd2\xbc\x6e\x7e\xd3\xfc\x43\xf3\xe6\xc7\x8a\xad\xab\x7e\x44\xe3\x7f\x31\x1a\x6f\xda\x9e\xc1\x71\x66\x57\x40\x0b\x76\x05\xf1\xa3\x77\x05\x7c\xc9\x3f\xa1\x7c\xd1\x7f\xd4\xce\x20\x2e\xd9\x19\xc4\xa5\x3b\x83\x11\x1a\xa3\x81\x10\x96\xe5\xce\x60\x04\x47\xbc\x4d\x23\xa4\x77\x02\x72\x67\x50\xb0\x1f\x2c\xdf\x19\x4c\xcd\x9d\xc1\x74\x75\x67\x30\x5d\xd9\x19\xc4\x5c\x22\xfb\x04\x3b\x83\x47\xaa\x63\xd2\x1d\x02\x9c\x27\x52\xe0\xaf\xda\x1f\x00\x32\xb1\xb5\xb4\xcc\x9f\x4d\x6d\x41\xfe\xdb\xaf\xd1\x18\xe4\xcb\xd2\x67\x98\xc5\x5a\x03\x7d\xc0\x59\xa2\x35\xf8\x42\xdc\x44\xa2\xf6\x0b\xd9\xa3\xcf\x5c\x79\x6e\x5b\x16\x98\x3b\x1f\xe5\xe5\xba\xed\xd5\x82\xbf\x01\x89\xd0\xfc\xb8\xbe\x2f\xcc\xbe\x2f\x56\xfb\xbe\x28\x2a\x4b\xec\x49\x92\x93\xd9\x5c\x8b\xb7\xe5\xc6\x24\x39\xb7\xe5\x4d\xdd\x5e\xdd\x9f\x7c\xb6\x66\x7f\xf2\x1d\xfe\x98\x49\x22\x46\xdf\x98\x26\xe2\x88\x66\x2a\x36\x17\x13\xf4\x59\x56\x67\x31\x91\x9b\x89\xa9\x9c\xec\x13\x00\x25\x84\xdc\x3c\x4c\x91\xbf\x31\x4d\x1a\xf3\x88\x69\x37\x37\xa7\xdd\x7c\x75\xda\xcd\x73\xd3\x2e\x17\x82\x29\x5a\x63\x3b\x40\x1a\x97\x0d\x49\x4c\x50\xfe\x39\x13\xc7\x19\x29\xf1\xb1\xbe\x35\xf2\x15\x59\x78\x56\x42\x20\xfa\xc2\x25\x35\x0c\xb4\x4f\x07\xad\xa1\xe7\x40\x65\x81\xe9\x45\x25\x26\xf1\xea\xae\x8a\x06\x19\x8b\x5b\x1d\x45\x31\x90\x20\x96\x18\x20\x26\x77\x58\x54\x48\x58\xc1\x52\x55\xfd\x7c\x31\x0f\xc8\xc8\x67\xda\x96\xb6\x62\x3d\xa9\xd1\xda\x13\x8b\x83\xc8\x96\x56\xb0\xb4\x28\xf1\xf8\xa7\xf7\xd8\x06\xa6\x02\x7b\x40\x87\x48\xdd\x10\x15\x42\x5d\x8f\x47\x96\x10\x4b\xb3\x7b\x6d\xf5\x20\xd4\x18\x23\x38\x2d\x65\x45\xd2\xa2\x54\xbf\x6e\xfc\xf9\xbe\x25\x16\xa4\x1f\xc2\x33\xff\xc2\xf9\xa5\xb2\xda\x28\xe6\x97\xda\xa4\xa3\x84\x5f\xfe\xfc\x9b\x73\xb5\x3b\xc1\xd6\x38\xaf\x18\xa3\x6f\xb2\xbc\x62\x2c\x79\xc5\x48\xf2\x8a\x31\x80\x12\x42\x0e\xe9\x08\xf9\x1b\xbf\xd9\x12\x4d\xd7\x5e\x2d\x9d\xe3\x12\x12\x85\xe9\xc4\x57\x13\x9d\xfd\xa9\x26\xba\xac\xff\x53\x4d\xf4\x11\xc8\x9f\x31\xfd\xd9\x4e\xf4\x47\x4e\xe6\x8c\x82\xad\x5d\x4c\x1c\x14\x59\xbf\x2b\x9b\xc1\x63\x43\xbd\xa6\xa8\xa3\x64\xb9\x88\x16\xe1\x38\x2b\x05\x9b\x4e\xc1\x3f\x19\xe7\xa1\x30\x84\x24\x61\x2b\xea\x3c\x54\x88\xb8\x11\xcb\x89\xb8\x2a\xc4\x16\x9f\x20\x04\x7d\x69\xa8\xdd\x08\xfa\x7d\xe6\xed\x6b\xe3\xad\xb7\x72\xd8\x2d\x7a\x49\x90\xb5\x9f\xf4\x92\x64\x7b\xb9\xe0\x6d\x26\xe9\xe4\x23\x72\xf2\x85\xfa\x9e\xd3\x3f\x41\xf5\x72\x78\x43\xe4\x6f\x84\xb9\x75\x7b\x64\x87\xeb\xc8\x50\x20\x52\xe3\x4a\xe9\x37\x39\xc2\xc2\x4c\x8b\xc3\x4c\x8b\xc3\x4c\x8b\x43\xf4\x5c\xcc\x94\x30\x45\x40\x28\x11\xa0\x2e\x7a\x0d\xc1\x47\x14\x27\x3b\x44\x39\xa9\x66\xe9\x67\x64\x53\x20\xe6\x59\x81\x23\xeb\xf3\x0c\x99\x64\x88\x57\x68\x6d\xe5\xe9\x77\x28\x4f\xba\x93\xfa\x5e\x65\xde\xc4\xc9\xb8\x3c\x7d\x0c\x45\x74\x58\xaa\xec\x47\x04\x0e\x29\xa4\x5c\x96\xa3\x12\xc9\x25\x83\x15\x9a\x83\x15\xae\x0c\x16\xcc\x0f\x91\xb5\x6f\xad\xd9\xa8\x24\xbd\x3b\xc6\x2b\xab\xec\x08\x8e\x57\x7b\x59\xd2\xaa\xc8\x6c\x55\xb4\xda\xaa\x28\xd9\x15\x7e\x6f\x08\xb6\x81\xb9\x3e\x58\xcd\x83\x22\x15\xfb\x08\x09\x6b\x5d\xad\x62\xcf\x1d\x10\x4e\xf4\x01\x61\x9f\xa2\x08\x0d\x54\xc3\x87\x06\x3a\xc1\x0a\x6a\xf5\x70\x8f\x4b\xf5\xdb\xf9\x33\xf6\xb1\x61\x60\x9c\x70\x91\x04\x75\x2f\xf3\xfc\xc3\x44\x5a\x09\xbe\xa8\x89\x2f\xba\x8a\x2f\xdd\xd0\x30\xc5\x57\xdf\xee\xb5\xca\xa6\xef\x41\xd9\xf4\xbd\xd6\xcc\xc3\xa0\x88\xf0\x31\xf4\xf0\x6a\x5d\xa7\xac\xfd\x66\xc9\x69\xc8\x7e\xb3\xf4\x34\xe4\xea\xcf\xa1\x5b\x2f\x72\xdd\x92\x87\xb9\xa9\x2d\x84\xe0\x4f\x21\x7f\x22\xe9\x9c\x8e\xd0\xcf\xc6\x2c\x3e\x52\x9e\xf4\xa2\xc1\xb2\xb1\x62\x02\x98\x09\x25\x33\xe1\x06\xe8\xd9\x1f\x89\xd9\x4f\xcc\xd9\x4f\x20\xe1\x8d\x55\xdd\xd2\x67\x22\x07\x33\xfc\xc8\xc2\x4f\xf4\x34\xeb\x87\x88\xa0\x01\x81\x91\x9c\x06\x21\x0c\x13\x84\xc8\xe7\xb5\xdc\xf4\x1f\x7a\xe7\x0d\xde\xaf\x29\x9a\xae\x1c\x87\x31\x71\x1c\x46\xd7\xda\x89\xbc\xcf\x4a\x11\xbf\x14\x2e\x0f\x29\x65\x75\xb6\xcb\x18\x41\xb3\x8c\x11\x9c\x65\x66\xcc\x8b\x02\x75\x5a\xf8\x68\xab\x96\xd3\x6c\x6b\xdf\xe2\x8c\x49\x43\x98\xcc\x02\x21\xf2\x64\xb6\x43\x2c\xad\x59\x7a\xb7\xa8\x39\xc2\x3b\x5c\x44\x3e\xbf\x08\xab\x33\xc3\x9c\x2b\xef\x19\x97\x58\xe0\xe1\x99\x29\x96\xcb\x9b\x24\x33\x66\x58\x89\x38\x21\x5e\x37\xb2\x6f\x09\x86\x53\x43\x2d\xa3\xbf\xaf\x01\x34\x4c\xde\x9e\x96\x89\x78\xed\xdd\xb2\x51\x79\x52\x36\x2a\x3f\x25\x1b\xc7\x32\x09\xf0\x79\xe1\x24\x21\x85\x74\x9c\x63\x6c\xc7\x1f\x28\xed\xfd\xca\xaa\x56\x24\xbb\x12\x7c\x10\x13\x1f\x64\x15\x1f\x72\xde\x72\x8a\x1c\x08\xfc\x0e\x1f\xb7\x4d\x49\xe4\x43\xf1\x20\x6d\x69\xcc\xde\xbd\x2c\xec\x1d\x2d\xec\x5d\x6e\x94\x5e\x81\x64\x98\x8a\x6d\x72\x3e\x6d\x55\xab\xb6\x3d\x29\xf1\x7d\x61\xda\x5b\xea\x9e\xbe\xf8\xf8\xfa\x7e\x79\xa0\x67\xbf\xae\xe8\x75\x3d\xf9\xc6\x9c\x46\x24\x6f\xfe\xc9\x4c\xd6\x21\x38\x10\x63\x85\xd6\x80\xc5\xca\x1a\x62\x2a\x6b\xc8\xaa\xb2\x26\x5d\xef\xcd\x53\x09\xa5\x27\x01\x30\xb1\xc3\x96\x66\x49\xef\x1e\x56\x3c\x7c\x98\xf9\x21\x85\x0b\x14\xc1\xc4\x45\x2a\x67\xaa\x45\xc6\x9e\x16\x16\x17\x0f\x18\x1f\x3e\x46\x4c\xf9\xec\x03\x11\x5d\xa0\x29\xcb\xcb\x6c\x52\x7a\x77\xcb\xf6\x14\xa8\x6c\x4f\xf1\xad\xde\x53\x88\xdd\x64\xaa\x88\xa6\x28\x44\x83\x64\xaa\x2b\xf9\xda\x5e\xb3\x98\xa6\xaa\x00\x41\x16\xe9\xc1\xcf\x6f\x47\x1c\x4a\x29\xfc\x0f\x8c\x38\x7e\xc6\x39\x43\x54\x29\x65\x7c\x57\x38\xed\x59\xe1\xb4\xcf\x19\x34\x7f\x09\xb2\xc2\x83\xf1\xe9\xf3\x4c\xd5\xdf\x16\x57\xfd\xf5\xc7\x57\xfd\x87\xf2\xaa\x7f\x9f\xa9\xfa\xf3\xac\x7c\xc5\x59\xdf\x8a\xd8\xfe\x73\x89\x48\xf2\xb3\x61\x08\xff\xb1\xe2\xde\xf7\x59\x01\xea\xbb\x92\xfd\x91\x21\xf0\x95\x6a\xb4\xea\x65\xa2\x05\xc3\x9c\xb5\x27\xf5\xcb\xa3\x9c\x54\x02\xc4\x6c\x55\x02\xb4\x09\x0a\x41\x9f\xf6\xeb\xc4\x23\x9e\xf3\x68\x71\x10\xe3\x6c\x77\xbe\x2c\xf0\x09\x48\xbb\x62\x3d\x79\x52\xb2\xdf\x7b\xf2\xa4\x74\xbf\x17\xe2\x55\xfd\x9c\xf5\xc4\x52\xed\xe2\x9c\x02\x14\xb7\x8d\xe6\xda\xf6\xfb\x95\x3d\x1b\x8c\x3f\x8d\x00\xc7\xc5\xdb\xb0\x84\x79\xe6\x8c\x89\x05\xfb\xcc\xec\x4b\xc2\x42\xf2\x0e\x57\xf7\x25\xa1\xc9\x9b\x6c\x82\xa4\xbe\x0d\x21\x64\x47\x28\x04\xf7\xf7\x96\xd0\x7b\x44\xf7\xf7\xd6\x9d\x7e\x58\xaa\x87\x90\xd9\x40\xc7\x48\x89\x72\x0a\xc8\x42\x0e\x9c\xd1\x76\xac\x21\xf5\x65\x46\xa2\x17\xdb\xbd\x88\xcf\xa1\x92\x91\x8e\xb3\x23\x1d\x17\x8c\x74\xbc\x56\x22\x8d\x0b\x91\x15\xaf\x4a\xa4\x7b\xb1\x9c\xbe\x91\x9c\xbe\x31\xf8\x33\x68\x92\x4d\x50\xb4\x82\x48\x22\x10\x19\x81\xb5\x72\x73\x64\x92\x61\xb4\x4a\x86\x11\xd2\x4b\x92\x9c\xeb\x51\x7e\x7f\x57\x23\x89\xe9\xa4\xe8\x2e\x9f\x40\x1f\x75\x06\xb0\x2a\xcc\x7d\xbd\x4e\xc3\xf3\x69\xc9\x7d\xd5\xd7\x7c\xd3\x96\x53\x00\x6b\xaa\xc7\x59\x62\xc7\xf7\xf7\x94\x25\x51\x8d\xaa\xff\x1f\x7b\xff\xb7\xe7\xb6\x8d\x2d\x0a\xc2\xf7\x7a\x0a\x89\x9f\x5b\x01\x2c\x14\x2d\x95\x1d\x27\xa1\x0d\xeb\xab\xb6\xcb\x6d\x77\xbb\xec\x6c\x57\xa5\xb3\xd3\x0c\x77\x6d\x96\x08\x95\xd0\x96\x40\x35\x08\x95\xad\x94\xf8\x00\xdf\xe5\xf7\x04\x73\x3d\x0f\x30\x77\x73\x75\x1e\x60\x9e\x65\x1e\x61\x7e\x58\x00\x48\x90\xa2\xca\x4e\xa7\xcf\xef\xec\x39\x27\xee\x74\x89\x04\xf1\x1f\x0b\x0b\x6b\x2d\xac\x3f\x43\xb3\x23\x18\x2e\x91\xc0\xbf\x7a\x1f\x38\x8c\xba\x6f\x6a\xe6\x70\xc5\xcf\xe2\x10\xb2\xe0\xac\x62\x24\x3a\xf7\x51\x35\x9d\xff\x7e\x27\x06\xd5\xe4\xb7\xaa\xb9\x0d\xe9\x68\xa0\x7f\xf2\x30\xca\x5b\x28\xf2\x6f\xbf\xae\xf1\x83\x18\x6f\x5f\x16\x76\xe0\x14\x13\xfe\x29\x26\x3a\x4e\x31\x51\xc9\xbc\xef\x12\x27\xe5\xf4\xc7\x5a\x22\xfe\x3f\x54\x2c\x74\xb7\x50\xec\x7f\x99\x59\xf8\x97\x49\xc7\xd6\x0c\x57\x8a\x50\xff\x64\x15\x69\x0b\xc8\x35\x0c\xdf\x05\xaf\x8f\xbe\x3d\xb4\xbd\xc7\x87\x76\xf7\xb2\x83\x46\x19\xe3\x9a\x38\xf1\x2f\xae\x56\x8c\x6c\x58\xe7\x49\xf2\x45\xa8\x71\xc6\x2a\x18\xb3\x67\x6e\x9c\x90\xac\xbb\xc2\x2f\x5a\xd5\x05\xc3\xf8\x49\x6e\x20\x95\x1b\x48\xcd\xf1\x6f\xae\xb1\xc7\x0f\xe2\xd4\xea\x7c\x81\xd7\xf6\xd5\x59\x15\xa8\x57\x56\x97\x25\x64\x32\x6e\xde\xa6\xdd\xb5\xda\x45\x6b\xb5\xd5\x67\x56\xfb\x0b\x24\xf5\xff\x75\xf6\xd5\x6f\x90\xb8\xff\xd7\x19\xc4\xbf\x0c\x37\xcc\xcd\x52\x83\xc2\x85\xa2\x71\x20\xf3\x5c\x05\x89\x17\xcd\x45\xd5\x51\x64\x6b\xbd\x2e\xa9\xe2\x8a\x24\x38\x9a\x78\x1e\x00\xb8\xf2\x82\x13\x0e\x87\xca\x39\x72\x7b\x63\xf5\x29\xa6\xb7\x95\x66\xc5\x29\x43\xb8\x8c\x6e\x4b\x68\x3b\x57\x14\xb2\x1b\x9b\xf9\x8b\xf4\x9a\xa4\x36\xa5\x58\xe4\x9b\x65\x06\x6e\xf0\x9d\x1b\x1d\x0d\x7c\x48\xd2\x65\x25\xb3\x58\x31\x2f\xd6\x8f\xb3\x8a\x97\x3d\xa3\xda\x2b\x5d\x9e\xa7\x75\x34\xa0\x13\xe6\xbc\xdf\x30\x91\x05\x25\xde\x8b\x54\xd1\x70\x33\xb0\x6a\xf8\x96\x03\xc1\x39\x31\xf9\x4a\xb4\x65\xe4\xaa\xae\x79\x5a\x2d\xf2\x15\x33\xe1\x8e\x1b\x5f\xbf\x67\xe8\x4a\xe7\x1f\x4d\x70\xe4\x9e\x31\x2e\xc9\x35\x7d\x80\xfe\x63\x17\xff\xc7\xcf\x3f\x27\xf8\xff\xf3\xe0\xda\x0f\x0c\x6e\xbd\x34\x35\x64\x18\x22\x97\xab\x74\xc9\x7f\x61\xaf\xd2\x62\xa1\xd2\xeb\xd7\xc2\x44\x6e\x88\x06\x63\xd2\x31\x5d\xd1\x60\x5c\x12\xb5\xdb\xdd\x96\xc6\xad\xa0\xa4\x37\x50\x6d\x05\x3a\xe1\xa1\x0a\x87\xc3\x1a\xe1\x23\xdd\x8f\x70\x9e\xcb\xd3\x74\xb6\xf0\xf4\x75\x14\xbe\xad\xa3\xa3\x7d\xc0\x48\xe1\xdd\xae\x7a\x5f\xe9\x77\x3c\x1c\xda\x30\xa3\x1f\xd8\xb6\x40\xca\x39\x5a\xc4\x1d\xb5\xc9\xda\x03\x75\x4e\x52\x5a\xe5\x8d\x65\x42\x0a\x7a\x34\x21\x4b\xbb\xdf\xc8\x86\x8e\x9f\x6c\x9e\xa6\x46\x37\xc8\x79\xf6\xda\x38\xef\xd4\x33\x6a\xbf\xc4\x1b\xf0\x95\x50\xf5\x68\x81\xd1\x0c\x0f\x87\xd7\x06\x33\xcf\x4c\x26\x8c\x6f\x0b\xba\x21\x4b\x3a\x33\x4a\xe4\x65\xc9\xe7\x68\x69\x6a\xca\xe8\xd2\xb6\xe1\x88\xff\x6b\x12\xdc\x9b\xdc\x06\x23\xab\x97\x34\x0a\x48\xdf\x58\x69\x96\x01\x26\x0b\x7a\x83\x32\xfc\x44\xef\x6c\x5b\x77\x58\xac\x97\x7c\xc6\xc2\x74\xbd\x5e\x6e\x51\x5e\x07\xa5\x9c\x61\x14\x17\x64\x92\x90\x05\xc6\x25\x43\x2e\x7f\x89\xe1\x3f\xb0\x55\x6d\xc4\x50\x69\x38\x70\xac\xe2\x63\xea\x3e\x72\x92\xdb\xf0\x92\x20\x82\xd8\xed\x6a\xab\x61\xeb\x6e\x91\xef\x76\xc1\x55\x9e\x2f\x59\xea\xf9\x60\xe4\x53\x11\x49\x04\x71\x76\x55\x78\xcd\x14\xca\x2b\x98\xa8\x42\x18\xa5\x10\x08\xc6\xf3\x0f\x09\x71\x1c\xc3\x42\xe7\x86\xd0\x31\x69\xe9\x7b\x57\x34\xbb\xc7\xc4\x9b\x30\x8e\xe7\xd6\x32\x57\xb9\x6e\xd0\x38\x3d\x33\x15\x55\x91\x3c\xc9\x43\x13\x92\x42\x68\xfe\xcb\x74\x82\xef\x77\xc2\x45\xd0\x32\x53\xd8\xec\x05\x27\xb9\xc6\x9a\x65\x33\xfe\x94\x39\xa7\x6a\x6f\x5a\xe1\x15\x17\x19\x52\x84\x41\x72\xc3\x83\xa1\x97\x0d\x8a\xea\xda\xfd\xd8\x61\x53\x15\x49\xc2\xc3\x59\x3a\x5b\xb0\xd0\xc4\xfc\x40\x98\xf0\xb0\x60\x92\xc3\xa6\x91\x0d\xc7\x7e\x55\x65\x7f\x3e\x7f\xf7\x36\x34\x98\x98\xcf\xb7\xf5\x90\xbd\xdc\x29\xb2\xc1\x82\xa1\x72\xbb\xc9\x5d\x1b\xc0\x85\x96\xa9\x37\x81\x8b\xb4\xe8\x74\xb9\xd6\xe7\x36\xfc\x2e\x54\x53\x12\xbf\xcc\x35\x53\x5d\x65\xea\xec\x31\x4b\x9a\x25\x8a\x46\x09\xe3\x87\xc5\xcb\x4c\x95\xf1\x11\x57\xd0\x5b\xd3\xd1\x8e\xb0\xb4\x1a\x6d\xa6\x65\xd9\x63\x21\xfb\xb4\xce\xa5\x2a\x68\xa7\x7a\x9f\x39\x1f\x66\x0b\x36\xb5\xbf\x51\x41\x84\xc5\xfa\xd5\xe4\x4e\xfd\x97\x28\xaf\xec\xfd\x21\x97\x92\xa9\x62\xd7\xdb\x69\xfd\x18\x71\x8c\x18\xb9\x35\xd5\x49\xe2\x15\x15\x25\x2e\x49\xd5\x23\x57\x80\xb3\x82\xea\xfe\xf0\x34\xe3\xb3\xa8\xdb\xd7\x8c\x83\x0a\x49\x54\x1b\x0c\x54\x03\x0c\xc8\x2a\x17\xed\x7a\xe4\x7e\x3d\x8a\xc8\x76\x3d\xb2\x51\x8f\x8b\xbb\xf5\x45\x81\xb7\xba\xa3\x7c\x15\x7e\xdc\x97\xef\xf6\x03\x6f\x99\xed\x61\x1c\xf9\xb3\xfb\x8c\xa4\x34\xbf\xcf\xdc\xe4\xa2\xc9\xd1\xc3\xfb\x6c\xf4\xf0\x7e\x7e\x94\xe2\xfb\x6a\x84\x1e\x1d\x3d\xbe\x9f\x8f\x1e\xde\x4f\xf1\x7d\x39\x42\x93\x91\xfb\x0a\x29\x62\x94\xde\xe7\xf8\xc1\x63\x73\x90\x53\x89\xbe\xf5\x9a\x4b\x3d\xa0\xf3\xcf\x0c\xe3\xcd\x86\xc3\xae\xb7\xee\x7d\x53\xaa\xe1\xc6\xb8\xa9\xcc\x31\x29\x9a\xaf\xcb\xc6\xab\xf5\x78\x33\x7e\x22\x9f\xe6\x4f\x46\x23\x89\x79\x7d\x44\xce\x31\x52\xb1\x4c\x30\x49\x63\x99\x50\x1e\xca\xdd\x6e\x4c\x0a\xf3\x7c\xad\x9f\x97\xe6\xf9\x6a\xb7\x1b\x57\x6e\x6e\x29\x43\x10\x49\x92\xa1\x42\xb7\xc5\xd0\x52\xef\x71\x17\xa6\x7b\x42\x3a\xf6\x10\x0f\x25\xd5\xc3\x23\x3c\xbc\xa6\x85\x79\xb8\xa2\x4b\x78\x18\x05\x41\x59\x96\x7e\x94\xb5\x7e\xed\xc4\x87\x56\x91\x47\xaf\xf4\xf9\xd8\x5a\x1b\x8b\xd2\xa9\x44\x88\x35\x06\xc5\x30\x0e\x25\xf1\xbd\x00\xcf\xe1\x78\x0d\xa5\x09\xc7\xca\xc2\x6b\xa2\xc2\x6b\x3d\x0a\xfd\x72\x45\x54\x78\xa5\xc7\xd2\x88\x73\xea\x86\x44\x54\x1d\xeb\xbd\x63\x79\x6a\xa7\xae\x94\x23\x4d\xee\x84\xd7\x34\x35\x0f\x57\xb4\x30\x0f\x6e\x72\x96\xf0\x0a\x23\xae\xc3\x2b\xa5\xab\x55\x4a\x19\xe1\x25\x9a\xd8\xb8\xac\x34\x45\x77\xd8\x1b\x1f\x4d\xf6\xba\x51\x1d\x24\xf2\x29\x1d\x4f\x25\x1d\x47\x10\x02\x1f\x49\x3a\x21\xea\x68\x82\x23\x2f\xee\x9a\xbc\xaf\xf4\x09\xc2\x62\x91\x90\x54\xff\x8c\x26\x9a\x60\x10\xcf\xc6\x53\x13\x38\x35\x3a\xd6\xc0\xac\xa1\xe8\xa9\x3a\x9a\xe8\xc4\xd1\xb1\x4e\x4c\x8f\x2a\xd9\x32\x47\x48\x1e\x89\x07\x0a\xdf\x57\xa4\x20\x39\x49\xc9\x12\x22\xed\xf6\xee\xec\xf8\xe1\x6e\x7b\xdd\x43\x48\xfe\x81\x4e\xf0\xd3\xf1\x74\x34\x92\x91\xc4\xae\xb7\x48\x8c\xf4\x48\xfe\xa0\x6c\xaf\xf5\x43\x61\xd2\x4d\xea\xd2\xbc\x1c\xeb\x97\xae\x7e\xea\x5e\x16\xb6\x9f\x9f\x0f\xee\xd9\x46\x27\x0c\x62\xd4\xd3\x91\xe6\x19\x11\xdf\x8b\xaf\x8d\x9f\x1e\xc3\xcd\x11\x61\x74\x4c\x26\x38\xe2\x4f\x1f\x4e\x27\xd1\x48\xf6\x1c\x89\x26\x34\x45\xc6\xe9\x78\xd7\x0e\x86\x3c\x63\x7c\x89\x90\x3a\x62\xf8\x81\x04\xd1\x6a\xbd\x77\x39\x7e\x32\x1a\x41\x08\xca\x3c\x16\x09\x65\x23\x71\xbf\x12\x93\xe5\x77\xd2\x3b\xc6\xab\x19\xdb\x73\x62\xa6\x76\xbb\xe0\xa4\x28\x98\xd4\x59\x8d\xc7\x69\x5c\x42\xb0\x83\xd3\x7f\x6c\xd2\x25\x6d\x47\x6c\x52\x88\x0d\xa8\x7e\x2a\x09\xe4\x7a\xf7\x81\x36\xf1\xb5\x42\x03\xfd\xab\x3f\xb3\x43\x35\xd0\xaa\x86\xfc\x03\x55\xf5\xb9\x42\x95\xc3\xdd\xcd\x7f\x77\x62\xf2\xde\x93\x07\xf7\x07\xfd\xfb\xff\xca\x7f\xbd\xe7\xf9\x7a\x0b\xa1\x42\xfb\x68\x86\xfb\x67\x7c\x26\xf3\x22\x9f\xab\xfe\xf3\x5c\xae\x73\x09\x2c\x58\xd8\xeb\x7d\xcf\xe4\x8a\x17\xe0\x84\x5e\xe5\xfd\x4d\xc1\x48\x7f\x96\xaf\xb7\xa4\xbf\xca\x33\x3e\xdf\x92\x7e\x2a\xb2\x07\xb9\xec\x67\x5c\xf7\xf5\x6a\xa3\x18\x90\x0e\x7d\x5d\xd5\xc7\x54\xb2\xfe\x3c\x97\xfd\x54\x6c\x7b\xeb\x8d\x5c\xe7\x05\xeb\x7f\xe4\x6a\xd1\xcf\x25\xfc\xe6\x1b\xd5\x9f\x33\xd6\xe7\x45\x7f\xc1\x24\xbb\xda\xf6\xaf\x65\x2a\x14\xcb\xc2\x5e\xef\xe2\xd5\x69\xff\xfc\xdd\xcb\x8b\x1f\x4f\xde\x9f\xf6\x5f\x9f\xf7\xbf\x7f\xff\xee\xaf\xaf\x5f\x9c\xbe\xe8\x07\x27\xe7\xfd\xd7\xe7\x41\xff\xe4\xed\x8b\xbe\xce\x74\xf2\xc3\xc5\xab\x77\xef\xfb\x2f\x5e\x9f\x3f\x7f\x73\xf2\xfa\xec\xbc\x7f\xf2\xe6\x4d\xff\xc7\x93\xf7\xef\x4f\xde\x5e\xbc\x3e\x3d\xef\xff\xf8\xfa\xe2\x55\xef\xfd\xe9\x9f\x4e\xde\xbf\xe8\x5f\xbc\xeb\x5f\xbc\x7a\x7d\xee\x55\xfc\xf6\xf9\x9b\x1f\x5e\xbc\x7e\xfb\x27\x28\xf5\xfa\xec\xfb\x37\xaf\x4f\x5f\xf8\xa5\xdf\xbd\xec\x9f\x9d\xbe\x7f\xfe\xea\xe4\xed\xc5\xc9\x1f\x5f\xbf\x79\x7d\xf1\x53\x4f\x37\xfc\xf2\xf5\xc5\xdb\xd3\xf3\xf3\xb0\xff\xfa\x6d\xff\xed\xbb\xfe\xe9\x5f\x4f\xdf\x5e\xf4\xcf\x5f\xe9\x4a\xbc\x3e\xfd\xf1\xb4\xff\xe6\xf5\xc9\x1f\xdf\x9c\xf6\x5f\xbe\x7b\xdf\x3f\x79\xfb\x53\xff\xfc\xfb\xd3\xe7\xaf\x4f\xde\x90\xfe\x8b\xd7\xef\x4f\x9f\x5f\x90\xde\xeb\xb7\xf6\xa9\xff\xee\x7d\xff\xf9\xbb\xb7\xe7\xa7\xff\xf6\xc3\xe9\xdb\x8b\xd7\x27\x6f\xfa\x2f\x4e\xce\x4e\xfe\xa4\xbb\x60\x8a\xba\xd7\x1f\x5f\x9d\x5c\x9c\xbf\x3b\xfd\xeb\xe9\xfb\xfe\xfb\xd3\xf3\x1f\xde\x5c\xe8\xde\xbf\x7c\xff\xee\xac\xf7\xe6\xdd\x39\x74\xf8\x87\xf3\x53\xd2\x7f\x71\x72\x71\xa2\x8b\x7e\xff\xfe\xdd\xcb\xd7\x17\xe7\xa4\xff\xe3\xab\xd3\x8b\x57\xa7\xef\x75\x8f\x4f\xde\xf6\x4f\x9e\x5f\xbc\x7e\xf7\x56\xe7\x7e\xfe\xee\xed\xc5\xfb\x13\xdd\x83\xb7\xa7\x7f\x7a\xf3\xfa\x4f\xa7\x6f\x9f\x9f\xf6\xdf\xbd\xef\xbd\x83\xdc\x17\xef\xde\x5f\xbc\x7e\xf7\xc3\xb9\x2d\x40\xfa\x27\xef\x5f\x9f\xeb\x16\xdf\xfd\x70\xa1\x4b\xbf\x83\x0a\x9f\xbf\x7b\xfb\xf6\xd4\xd4\xa8\xa7\x1b\xe6\xe0\x87\x73\xa8\xe6\xfb\xd3\xf7\x2f\xdf\xbd\x3f\x3b\x81\x5a\x5f\x36\xa7\x3f\xec\xfd\x4b\x41\xba\x7f\xff\x41\x93\xc8\x77\xc7\x69\x87\x7b\x79\x13\x9b\x64\x38\x64\xb1\x79\x0a\x41\x87\x58\xe5\x12\xb8\xc1\x81\x74\x42\x02\xe6\x22\x69\x93\x9c\x4a\xc3\x9b\x30\x7d\x9a\xc6\x49\x4f\xc9\xad\x89\x43\xea\xc5\x73\xdd\xed\xd4\xd1\x51\xff\xd9\x18\x0f\x87\x03\x24\x68\x1e\x0a\xf6\x49\x21\x8c\xc3\x2c\x17\xec\x09\x4e\xad\x1c\xc9\x71\x72\xb3\xd4\x06\x37\xe3\xf4\x96\x69\xc4\x04\x6e\xfd\xb8\x48\x97\xcb\xed\xad\xae\x5f\x0c\x87\x03\x01\x85\x41\x32\x93\x87\xa6\x5b\x78\x38\xb4\x9d\xc9\x71\x95\x9f\xcf\x11\xb7\xb8\x8f\x87\x50\x5b\x75\xde\xa6\x40\x7a\xf1\x56\x48\xcd\xd7\x42\x31\xb9\x96\x4c\x31\x79\xae\x52\xb5\x29\x0e\x46\x68\xad\xe2\x72\x17\x05\xbf\xee\x8e\x98\x58\xec\x05\x3e\x3c\x4b\x67\x0b\x2e\xba\xa3\x0e\x36\x22\x57\xba\x6e\x1c\x0e\x77\xe8\xe3\x7c\x16\xb3\xf0\x6d\xae\xce\x55\x2a\x15\xcb\xe8\x38\xa1\x41\xfd\x1a\x10\xfd\xf9\xfd\x46\x08\x2e\xae\xe9\x24\xa1\x81\x7d\x36\x1f\xce\x55\xbe\x5e\xb3\x8c\x1e\x27\x34\xb0\xcf\x41\x89\xf8\x6e\x87\x38\xbd\x75\x04\x71\xee\xdc\x3a\x7f\x2a\x54\xaa\x58\xc8\x05\x57\x41\xd9\x4d\xb1\x56\x2b\xcf\xa6\x71\x12\xc5\x49\x38\xcb\xc5\x2c\x55\xc8\xf7\x56\x59\xec\xb9\x73\xb4\x15\xbb\xd9\x34\xbf\x60\x77\xc4\xda\x21\xe2\xdb\xf1\x03\x1d\x00\x23\x46\xf7\x02\xea\xb1\xe1\x50\x73\x3d\x31\x4b\xa6\xfa\x4f\xc4\xf0\xd4\x34\xc8\xca\xa8\x63\x0b\x30\xf7\x15\x22\x32\x10\xf6\x89\xcd\x74\x4e\x4f\x13\x73\x73\x80\x36\xaf\x1c\xe2\x51\xea\x3b\xc0\x9c\x79\x6e\xed\xf7\xfa\x56\x77\x85\x35\x42\xfc\x79\x4a\xa6\xce\xf8\x6b\x96\x0b\xf0\xb4\xa9\x88\x89\xe2\x51\x44\x71\x42\x66\x8b\x54\x5c\xb3\x2c\x1a\x4c\x08\x38\x16\x64\x45\xa4\xbb\xd7\x0c\x1b\xe7\x4b\x17\x14\xe1\x74\xe0\x88\xc6\x98\x85\x73\xbe\x54\x4c\x36\x29\x35\x3e\x47\xad\xc5\x00\xbe\xde\xf8\xdb\xe7\x74\x30\xee\x19\x5a\xce\x32\xde\x26\x0f\xba\x2d\x89\xa8\x3c\xe1\x77\xcc\x6b\x58\x2f\xe8\x54\xd3\x81\xf5\x2b\x12\x44\xe2\xc8\x17\x76\xf9\x5f\xbb\xe4\x5d\x1c\xdf\xaa\x98\x27\x5d\x28\xcc\x2f\x1a\xf3\x64\xda\x7a\x37\x6d\xb5\x12\x4b\xb8\xe7\x52\x64\xe0\x22\x77\x0f\xc6\x90\x44\x78\xd2\x88\x02\x07\xb8\xb3\xc2\x6a\x26\x6e\x5e\x25\x1d\x14\x68\x81\x52\xc4\x42\x98\xb8\x22\x36\x3b\x84\xa7\xcb\x24\x64\x42\xc9\x2d\x3e\x18\x69\x00\x20\x3a\xb4\x8b\x8a\x75\xc3\x2c\xb4\x8b\x4d\x72\x4c\x8e\x41\xd4\x13\x8f\x35\x89\x2b\xe3\x49\x42\xe6\xf4\x76\x96\x8b\x39\xbf\x8e\x18\xb9\xac\x74\x8f\x89\x6d\x4e\xe3\x2c\x16\x39\xa8\x71\x9d\xa8\x60\x86\x57\x70\x54\xf8\x10\xe3\xf2\x69\xd2\x4c\xa6\xa2\xe0\x20\x6b\xae\xa1\xdb\x01\x10\x68\xae\xec\xef\x31\x35\xb5\x0d\xaa\xaa\xfa\x6a\x0c\x65\xa4\xc8\x9a\x16\xd6\x1a\x71\x45\x8b\x6a\x70\x37\x60\xac\x44\xae\x69\x35\x69\x6b\x38\x67\xae\xc3\xdc\x4a\xe8\xae\x68\x0a\x6f\xf1\x0d\x40\x5f\x82\xab\xe3\x45\x7f\xdd\xd2\x7d\xfe\xe2\x8e\x43\xad\x75\xa4\x11\x10\xa5\xb0\x58\x25\x44\x18\x9f\xc0\xd5\xf1\x56\x1d\x69\xe0\x26\x6f\x38\xdc\x93\x0b\xb6\x84\xe6\xb7\xfa\x3c\xeb\x10\xe8\x30\x88\xc7\xee\x45\xd3\x67\x56\x0c\x8b\x89\x5b\x20\xdd\x03\x31\x1a\x25\x44\x9f\x66\xd1\x80\x95\x65\xd9\xab\x29\xf5\x8b\xed\xda\xba\xd6\x50\xd3\xc0\x6c\x10\x4d\x16\x8a\x5c\xf5\x61\x18\x57\x4b\x16\x06\x51\xd0\x1a\x99\xcb\x92\xb1\x39\x17\x2c\x0b\x03\x5c\xa2\x2b\x4c\x2e\xe9\xd6\x1e\xbc\x4f\x06\x97\xe6\xe8\xad\x93\xcc\xfc\x7d\xa4\x97\x66\x9d\x1a\x11\xe8\x3f\xba\x79\xc9\xd0\x9a\xac\x0c\xbc\x9f\xee\x03\xc1\xc7\xe9\xad\x4a\xe5\x35\x53\xd1\xc7\x32\xfa\x48\x3e\xd1\xd3\xd0\xbc\x93\x77\xf4\xd4\xc1\x37\x39\xa7\x55\xbd\xef\xf4\xe9\xf0\x8e\x5c\xd0\x53\x0d\x12\x19\x39\xab\x3f\x7d\x82\xcb\x8a\xea\xf5\x62\xba\x37\xb9\x83\x71\x19\x5d\x60\xb4\x22\x37\xb6\xef\xdf\xd7\x60\x64\x82\xbe\x7f\x9a\x7e\x8a\xd6\x09\x39\x81\x9d\x89\xce\xa6\x29\x3a\xc7\xde\x61\x74\x1d\xb2\x4f\x5c\x91\x73\xf2\xbd\xdb\xa0\x5d\xb8\xb0\xf2\x3d\x8b\xf1\xdd\x3b\x78\x1e\xba\xbd\xd8\xd8\xca\xba\x7f\xe4\x21\x26\xcf\xe9\x89\xde\xc2\x1f\xe8\x89\xde\xc2\xef\xe9\x49\x7c\x9c\x90\xbf\x53\xaf\xa7\xbd\x06\xbe\xff\x7b\xb5\x91\x3e\x54\x7b\xf7\x79\x85\xee\x3f\x0d\x28\x5d\xef\x76\xcf\xab\xa0\x1d\xbb\xdd\x7b\x6f\x3b\xff\x1d\x97\x65\xf9\x79\x32\xea\x72\x38\xb4\x80\x00\x82\xe2\x6d\x4d\x46\xe5\x66\x03\x6c\xef\x26\xa3\xca\x06\x58\x94\x55\xe0\xdf\x79\x69\xc2\x37\x75\x8a\x05\x99\x9b\x9e\xee\x6b\x0c\x2b\xba\x08\xf5\xb9\xeb\xea\x13\xc3\xa1\x40\x35\x4e\x54\x20\xe8\xaf\x29\x8f\x95\x2f\x5d\xf0\xb1\x20\x91\x94\x7b\x44\x11\x11\xc0\x4f\x9f\x33\x45\x52\x7a\x7b\xb9\x32\x84\x58\xc4\x48\xc1\x44\x56\xef\xde\x1c\xdf\x4a\x4a\x29\x77\xf4\x12\xa0\x79\x16\xd6\x68\x11\x01\x5a\x5e\x23\x45\x66\x28\xd7\xc7\x44\xc7\x48\x3c\xc8\x41\xd0\x5f\x5c\x92\x62\x73\x55\xcc\x24\xbf\xf2\x44\xbf\x75\x36\x11\xa6\x59\xa6\x89\x68\x9d\x9f\xdc\x6e\x44\x47\x6e\x2f\x73\xc6\x96\x4c\x31\x38\xe9\x4b\x62\x1c\x41\x57\xd9\x84\xb1\xea\x30\x73\x52\xd0\x20\x07\xbc\xd1\x88\x30\x1c\xdd\x36\xd0\xf4\x9c\x5f\xd7\x48\xd9\x98\x72\x97\x3d\xe5\xcc\xba\x1d\xea\xf6\xc9\x0e\x77\x86\x54\xc5\x6a\xe0\x2b\x1c\x19\xef\xc0\x43\xd6\x73\x09\xb3\x96\x63\x92\xea\x4e\xe7\xeb\x8e\xa1\xe9\xcc\x96\x06\x25\x22\x9c\x2d\x59\x2a\x11\xe4\xbf\x66\xe0\x70\x5d\x79\xae\xa5\x55\x9d\xba\x29\xbc\x2a\x6a\x48\x4c\xbf\x2c\x9a\xbe\x95\xf8\xc6\x5f\xa5\xf1\x42\xb2\x79\x12\x89\x5c\xa1\x58\xa5\x57\x5c\x64\xec\xd3\x7f\xd0\xe0\x28\x48\xf0\x57\xe4\xab\x54\xb2\xcf\xe4\x80\x58\x32\xf6\xe3\x76\xcd\x68\xb0\xe0\x59\xc6\x44\x90\x60\x3f\x51\xa6\x19\xcf\xab\xb4\x8c\x17\x1a\x91\x67\x55\x9e\xee\x5a\x9b\x65\xbf\xa8\x68\x34\x5b\xb0\xd9\x07\x96\x7d\x45\xbe\x32\x46\x06\x5f\xda\xa0\x5e\x52\x3d\xd8\x2f\xcd\x7f\xb5\x51\x2a\x17\x5f\x3c\x9c\xb9\x4c\x57\xec\xe0\x24\x6f\x32\x9e\xc7\x1a\xae\x64\xbe\x2c\x0e\xce\xf4\x0d\xcf\xd8\x17\x64\x83\x1c\x4c\x28\x96\x71\xa5\xbb\x75\x38\xa3\x4b\x3a\x90\x23\xd9\x93\x37\xc3\xfd\xce\x65\xb1\xc8\x3f\x52\x78\xd4\x4f\xf6\xc2\x6c\xc1\x0b\x4c\xcc\xf7\x05\xcf\x98\xf9\xae\x9f\xf6\xbf\xaf\x52\x2e\x54\xca\xc5\xcb\x7c\xb6\x29\x68\x47\xda\x7e\x11\x9d\xf0\x17\xb6\x5d\x4b\x56\xb8\x12\x7e\xd2\x7e\x81\xb5\x64\x37\x3c\xdf\x14\xcb\x2d\xd4\xc8\x32\x38\x77\xcc\x47\x3d\x3f\x29\x17\x4c\x52\x73\xcd\x12\x66\x3c\x5d\xe6\x9a\x26\xfb\xc7\x86\xc9\xed\xb9\xf5\x51\x84\xbe\x32\xe9\xa4\x1f\xcb\x7c\xc9\x68\x60\x5e\x83\xa4\x4a\x48\x97\x4c\x2a\x97\xfa\x95\x6d\x1a\x3e\x79\xd5\x86\xd7\x4c\x9d\x28\x2b\x13\x43\x81\xfe\x1c\xe0\xdd\xce\xd5\x66\x0a\x6d\x0a\xf6\xc2\x74\x22\xd0\x73\x1a\xb8\x7b\x3a\xdb\x03\x33\xa6\x25\x2f\x14\x13\x4c\x16\xf4\xb6\xb4\x23\x31\xb7\x42\xaa\x1d\x30\xcc\xe2\x82\x3b\xee\x55\x59\xe3\x72\xd1\x3f\xad\x72\x84\xd4\x6e\x97\xe5\xb3\x8d\x61\x45\x1a\x73\x72\x02\x45\xdb\x3c\xad\x39\x89\x40\x20\x22\xf7\x66\x31\x88\xd3\x8d\xca\xe7\x7a\x15\x12\x3d\x70\x15\x8f\x93\x9e\x1c\x0e\x65\x08\x69\xbe\xab\xfc\xa5\xd7\xf7\x14\x09\x17\xf0\x2a\xc0\x84\xdd\x45\xaa\x0c\x06\x88\x85\xc6\x43\xd0\x8f\x3c\x53\x8b\xdd\xce\xbd\xbe\x62\xfc\x7a\xa1\xf4\xfb\x35\x53\xcf\x97\x9c\x09\xf5\x9e\xcd\x54\x81\xb0\xa3\x66\x1b\xc1\xd6\x36\x08\xdf\xa6\x28\x88\xb3\x54\xa5\x47\xe9\x64\xb2\x3d\x32\xf3\x9f\x04\x5d\x1c\x19\xc3\xb7\xfa\x70\xd5\x5b\x83\xb5\x16\xb9\x5d\x81\x1e\xb7\x25\x83\x75\x83\xdc\x5b\x13\xb3\x84\xfb\x64\xbd\xe7\x69\x03\x16\xdf\xd0\x95\x0e\xf8\xed\xdb\x6e\xd7\x71\xae\xbe\xcd\x33\xf6\x86\x17\xca\x6b\x84\x17\xdf\xbb\xe7\x77\x73\xc4\xf0\x54\x43\x49\x64\xc3\x63\xdd\x95\x2f\x66\x49\xd4\xc1\xc2\xa7\xba\xb8\x19\x50\x09\xd1\xc1\x11\x92\x54\x03\x0e\x6d\x6e\x30\x1c\xae\x53\xc9\x84\xd2\x5d\x0a\xc1\x77\xbf\x7e\x2a\xee\xa4\x3b\xcd\x8d\xba\xc8\x33\xa6\x59\x01\x20\x42\x8d\x5e\x04\x92\x21\xa0\xa7\x77\x73\x4d\x2f\x4c\x30\x91\x76\xc7\xe9\x1d\x23\x1a\x5b\x6e\x91\x16\xde\x6a\xe4\x6b\x88\xa5\xe5\x67\x28\xf6\xf7\x64\xbd\x7b\x71\x6b\x4f\x4e\x51\x73\x54\xad\xd2\xed\xc5\x3e\x12\xa9\xe2\x37\x2c\x20\x81\x6b\xb4\x2e\x29\xd9\x2a\xbf\x61\x5e\xe1\x54\xf2\xf4\xc8\x9e\x98\x18\x47\xf5\x78\xa6\xbf\xaa\x64\x74\x67\x0f\xfd\xac\x64\x30\x76\x38\x52\xcf\x8b\xc6\x26\x29\xfa\x6a\x0f\xe4\x8f\x00\xc9\x07\x5f\x8d\x5a\x15\xf3\x6c\xf4\x55\x8d\xeb\x5c\x15\xd5\xee\x68\xc8\xe7\x34\x7d\x77\x7a\xc3\x84\x7a\x63\x11\x17\x0a\x66\x4b\x3e\xfb\x60\xa7\x1a\xce\x11\x5c\x7a\xb8\xdb\xd5\x3a\x5b\xe6\x85\xe9\xd8\xfe\x5e\xd4\xe3\x60\x49\x40\xda\x80\x66\x59\x9c\xce\xb1\xc0\x81\x74\x78\x2c\xad\x66\xff\xb9\xc1\xe8\x36\x3a\x07\x33\xe7\x92\x21\x2b\x09\xb5\x00\x51\x12\x1f\x03\xc0\x4c\x1f\xd2\xbc\x00\x58\xd8\xed\x90\x07\xe8\x83\xf1\xc1\x33\xce\x61\x6d\x60\x38\x6e\x98\xdd\xe0\x6d\x70\x6e\x6c\x84\x45\xfe\xf1\x2c\xcf\xd2\x25\x62\xe0\x8d\x32\x15\x33\x08\xba\xaa\x47\xea\x34\xf6\x19\x8e\xd0\xe1\xcd\x03\xbb\xeb\xd7\xc3\x3a\x69\x20\xb2\x6e\xf4\xca\x5a\x1b\xb9\x51\xc1\x70\xc8\x3e\xb7\x11\x73\xc9\xaf\x35\x33\x77\xd4\xd8\x00\x6d\x64\xdd\xdc\x82\xa4\x5d\x6b\xa3\x6c\xa0\xe4\x86\x05\xc0\xdd\x90\xc2\x9f\x14\x4c\xaa\xb9\xbf\xca\xb3\x6d\x07\xb4\xc0\x69\x17\x74\x91\x40\xb0\x25\xeb\xa5\xdb\x2b\xf9\x81\x6d\xb3\xfc\xa3\x08\x3a\x68\xa1\x26\x90\x01\xe9\x40\x18\xee\x82\x32\xd8\x03\x77\x42\xd9\xb4\x01\x64\x93\xbb\xa0\x06\x76\xca\xaf\x80\x98\x3d\x50\xf0\x51\xf2\x17\x61\x2d\x3b\xf1\xff\x0c\xd4\x7c\x19\x58\xe0\x29\xba\x73\xe5\x3f\x77\xc4\x1f\xa8\xd5\x84\x65\x6c\x8d\xfe\x4b\xcb\x46\x1d\x65\x1b\x39\x00\x0e\x0f\x20\x83\xe1\xf0\xc0\x07\x43\x77\x7d\xe6\x33\x6a\x03\xb4\xe9\xc8\x3f\x09\xd3\x9d\x85\xbf\x18\xac\x35\xe8\x06\xc4\x1e\xcb\xe6\xa8\x6b\xc2\x76\xc6\x0a\x25\xf3\x2d\xdd\xe7\xad\x2b\x2e\x04\x7d\xd9\x89\xd5\xd9\xd1\x5f\x75\x68\xfd\xd3\x15\x7f\xe6\x00\xb1\x63\xac\xb6\xc0\x1e\x33\xd0\x9c\x92\x5c\x74\xcb\xa2\x6a\x59\x7e\xb3\x96\x98\x25\xc3\x21\xda\x4f\x84\x88\x57\xfb\xc9\x75\xbc\xaa\xfd\x96\xe7\xf3\x4e\x25\xbe\x8e\xca\x77\xbb\x38\xc1\x1e\x51\x57\xf9\xea\x7b\x76\x34\x71\xf0\xd9\x68\xd5\x11\x82\x9a\xfa\xdb\x6f\x19\x66\xaa\xd5\xf6\xc1\x56\x3b\x97\xa9\x45\xe8\x11\xd5\x5c\x90\x56\x73\x0d\xa6\xd4\xaf\xa7\x81\x2a\x4d\x65\x05\xea\x3e\x9b\xb1\x9b\x75\x40\xbb\xc3\xe1\xb1\x71\x38\xf3\x71\xc1\x67\x8b\xe1\xb0\xc1\x61\x0e\xec\xa2\x69\x12\x75\x38\x44\x2c\xd4\x5b\x97\x09\xf5\xc2\xc4\x0c\x76\x10\x0e\xd0\xee\xce\x00\x57\xed\x77\x7e\xad\x5d\xab\xb3\x34\xd1\xd6\x6a\x12\xfb\x40\x77\x7b\x2a\x2c\x16\x7c\xae\xfe\xc2\xb6\xc6\xec\x5b\x4c\x91\x8c\x65\xad\xe1\x5f\xa1\x0f\xb5\xd7\x3f\x1c\xd5\x85\x77\x3b\x31\xa0\xb4\x2e\xb7\xdb\x21\x19\x8f\xef\x2c\x5d\xfa\x47\x0a\x61\x7b\xcb\xd1\x14\x2b\x74\xe9\x61\x99\x63\xe3\x73\x88\x1c\x4e\x51\xdc\xf3\xa7\x6f\xd0\x3a\xa8\xaa\x45\x75\x75\xe2\xe1\x50\xb9\x4d\xe5\x13\x98\xc3\x61\xd1\x82\x29\x5c\x92\x60\x23\xec\x3d\x45\x30\x70\x3c\x95\x9b\xee\xe1\x10\x05\xcb\x3c\xcd\x0c\xc3\x45\x3d\x0c\x9a\x66\x5b\x10\xf1\x4e\xef\xa0\x14\x5e\xbc\x3b\x7b\x6e\x84\x3f\x6f\xf2\x34\x63\x59\x40\x36\x38\xfa\xc8\x45\x96\x7f\x0c\x25\xfb\xc7\x86\x15\xea\x44\xf0\x15\xe8\xf4\xbc\x94\xe9\x8a\x4d\xef\xfa\x88\xea\xc2\x05\x53\x17\x7c\xc5\xf2\x8d\x42\x1b\x32\x79\xac\xa1\x2b\xb4\xb1\xaa\x29\x2f\xef\xd6\x26\xbb\xda\x2a\xf6\xc6\xc4\xc8\xde\x5f\x14\x2b\x34\x50\xf1\x38\x21\x82\xaa\x78\x52\x29\xaf\x3d\xbc\x8f\xe4\x48\xe0\x07\x8f\x8e\x44\x49\x54\xa8\xf2\x3f\x6e\x15\x03\x89\x46\x17\xb3\x4c\x72\x6a\x15\x32\x72\x73\x6f\x98\xc7\x93\x84\x6c\xa8\xe1\xd0\x0f\x18\x6d\x3c\xbc\x8f\xd4\x48\xea\x26\x64\x89\xc6\x24\x25\x1a\xe9\xce\xe8\x98\x64\xb4\x78\x36\x9e\xa6\x47\x8f\xa2\xd4\xd3\x1f\xcd\x9e\xc8\x11\x7d\x84\x15\x15\x71\x2b\xf4\x61\xf2\xf4\xe9\xe4\xdb\x5d\x3b\x79\x34\x81\x0f\xc7\xfb\x1f\x8e\xf5\x87\xc7\xfb\xe9\x0f\x71\x42\x36\xf1\x6c\x34\x4a\xa8\x7a\xf6\x6c\xf2\x78\x78\xfc\xf5\xd7\x5e\xc2\xb7\xfe\xfb\xf1\xd7\x5f\x0f\x2b\x87\x0e\xc7\x94\xd2\x02\xc4\xf6\x5d\x7d\xeb\xe8\xc1\x04\x27\xcf\x9e\x3d\x6a\xd4\x85\x41\x99\xfd\x70\x2d\x93\xf1\x81\x11\x3e\xea\x1c\xe0\xb3\x67\xc7\x77\x76\x1d\x93\x8d\x5e\xd7\xb9\xcc\x57\xdd\x2b\xeb\xee\x3c\x15\x04\x70\xb7\xaa\xbf\x9c\x8a\x3f\x3c\x34\x56\xef\x29\x1d\x93\x82\x8a\x23\xfe\x24\x7d\x5a\x3c\x49\x47\x74\xf2\xf8\xe1\xb7\x0f\x9d\x0d\xfa\x06\x31\x92\x92\x74\x04\x89\xcf\x8a\x69\x11\xd9\xe7\x2a\x76\x3d\x48\x1a\x38\xe8\x2d\x82\xe2\x27\xb1\x25\x65\xac\x9e\x3d\x3b\x4e\x46\x32\x56\x4f\x9f\x3e\x1a\x3e\x7e\x98\x8c\x02\x4a\x35\x39\xa6\x67\x99\xc3\xfc\x20\x5d\xe4\x38\x79\xfa\xf4\x5b\x3c\xea\x28\x3d\x19\x43\xf1\x67\xcf\x4c\x71\xa8\xe9\xd8\xd6\xa4\x69\xc2\xbc\x76\x4d\x58\xa9\x48\x5a\xd3\xb8\x38\x21\x9c\x76\x61\x88\x1f\xb8\x50\xdf\xc2\x2c\x4d\xeb\xc7\x08\xfe\x92\x9c\x06\x27\x7f\x7c\xfe\xe2\xf4\xe5\x9f\x5e\xbd\xfe\xf3\x5f\xde\x9c\xbd\x7d\xf7\xfd\xbf\xbd\x3f\xbf\xf8\xe1\xaf\x3f\xfe\xfb\x4f\x7f\x4b\xaf\x66\x19\x9b\x5f\x2f\xf8\xdf\x3f\x2c\x57\x22\x5f\xff\x43\x16\x6a\x73\xf3\xf1\xd3\xf6\x97\xf1\xe4\xf8\xe1\xa3\xaf\x1f\x7f\xf3\xed\x77\xa3\x07\x81\x9d\xcf\xdc\x59\xc8\xe8\x49\x1d\x8d\x52\x2c\xe3\x34\xa1\x79\x9c\x26\x44\xc4\xb9\xbf\xca\x29\x4e\x68\xda\x6b\x0a\xef\x5a\x1a\xaf\x7c\x8e\xd4\x1f\x1e\x3d\x1b\xef\x87\x93\x7d\x2d\x20\xb4\x6e\xdf\xc8\x96\xc2\xbe\x41\x10\xfd\xd5\xa6\x50\xfd\x2b\xd6\x4f\xfb\xab\xcd\x52\xf1\xf5\x92\xf5\xf3\x79\xff\x51\xe0\x34\x0e\x58\x75\x3e\xe9\x89\xb4\x0b\x79\xa4\x17\x52\x1a\x03\x6d\x4c\x62\x09\xa6\xe3\x6a\x3a\x8e\x1e\x1d\xc9\x3f\x3c\x4a\x1a\x6a\x2c\x44\x11\x51\x83\x16\x27\x39\xa8\x70\x91\x82\xaa\x27\xc5\x53\xf1\xa4\x18\xd1\x87\x98\xeb\xe5\x2d\x34\xc4\x3f\x1e\x4e\x1e\x7f\x33\x99\x3c\xfe\x76\x8c\x47\x3a\x6d\x34\xd1\x4b\x3e\x7c\xfc\xf5\x31\xa4\x68\x38\xd6\xa9\xc7\x09\x26\xa9\x5b\x7e\x94\x53\x8e\x9f\x3d\x9b\x7c\x6b\x97\x3e\x7f\xf6\x6c\x72\x5c\x3f\x3f\xb6\x8f\x8f\x1f\x0e\xf3\xa4\x02\xc5\xb4\x06\x08\x11\x07\x47\x81\x3f\xcf\x63\x9c\xd0\xc7\xc7\x44\xc4\xc1\xe5\x7e\xfa\xc3\xa6\x1e\x6c\xef\xc1\xfd\x41\xaf\x7f\xbf\x3f\x5b\xf2\xf5\x55\x9e\xca\x2c\xfc\x7b\xd1\xbf\x39\x0e\xc7\xe1\xb7\x3a\x79\xa1\xd4\xba\x88\x1e\x3c\xa8\x3e\xff\x5d\x9f\x4c\xab\x07\xbd\xfe\x7d\xfd\xf9\x0d\x9f\x31\x51\xb0\xac\x7f\xf6\xfa\xa2\xff\xdf\xfe\xf7\xfe\xdf\x98\xc8\xfb\xef\xf3\xd9\x22\xed\xf5\xef\x3f\x30\x2a\x30\x3d\xd5\x41\x66\xb7\x4c\xd3\x19\xbd\x9d\x3c\x7c\x14\x7d\x81\x4d\xc2\xad\x3d\x44\x3a\xae\xc5\xae\xca\xb2\xb6\x4b\x38\xfe\xe6\x3b\xd0\x09\x09\x85\x31\x00\x92\xe8\xe1\x37\x63\x50\x66\x0f\x85\x31\x01\x90\xe8\xdb\xc9\x37\x98\x2c\x21\xa5\xf0\x54\xe5\x3d\xdd\x25\xb4\xb9\x4b\x59\x22\x28\xe0\xa1\xfd\xa1\xd2\x31\x98\x76\x71\xcf\x56\x22\x5a\x76\x5d\x70\xb2\xe1\xf0\x2e\x85\x43\x4d\x13\x14\x4a\x6e\x66\x2a\xd7\x00\x5b\xa5\x0f\xdc\x73\x4d\xdc\x4c\x5d\xdf\xa2\xaa\x41\xdc\x10\xe1\xcf\xcc\xc9\x5b\xe3\x12\x7d\x5e\x39\x7b\x89\x27\xd2\x19\xbb\xe9\x13\x56\x26\x3d\x11\x32\x08\xd7\x92\x5e\x2d\x19\xf5\x5f\x76\xbb\xc1\x04\x82\xf7\x8a\x39\xbf\xde\x98\xef\x83\x31\x09\xe0\x7a\x33\xe0\x70\x2f\x8d\x44\xf8\x51\x9a\x9b\x25\xaa\x99\x3c\xab\xc4\x64\xf0\xd5\xf7\x32\x5f\x33\xa9\xb6\x88\x11\x11\x7e\x60\x5b\x22\xb0\x31\xdb\xcc\x7c\xa8\x69\x5a\x3a\x0c\x9a\xd4\x03\x04\xa4\x6e\x88\x16\x94\x1f\x8e\xba\xd6\x0f\x09\x9e\xa7\x42\xe4\xaa\x3f\x4b\x97\xcb\x7e\xda\x87\xf0\xca\xfd\xb4\xe8\xa7\x15\x38\x06\x96\x66\x74\xbc\x63\x28\x59\x91\x2f\x6f\x98\x0d\x77\xe6\xf8\x17\xb8\x41\x37\xf7\x15\xd0\xbf\x72\xcf\xd5\x35\x78\x63\x88\x6f\x3f\xb0\x6d\x14\x34\xeb\x70\x21\x0a\xf6\x76\x40\x5b\x45\xfe\xd9\x78\x38\xac\x1d\x5a\xb9\x8f\xf1\x38\x99\xfa\x2f\xd1\x6d\x69\x08\x4f\x73\xf3\x4c\x9d\xea\xc0\xde\xc5\x95\xcf\xa4\xe8\x4f\x6c\xc5\x95\x82\x0f\xf6\xc9\x24\x1b\xea\xb4\x22\x7d\x6d\x22\xfb\x04\x49\xa0\x59\x00\x09\x92\x5f\x5f\x43\x61\xfb\x64\x79\x07\x98\x12\x96\x5d\xe8\xfc\x41\x50\x96\xc4\xcc\x40\x63\xba\x3a\x26\xa0\x6a\x64\xea\x55\xf3\x32\xfd\xc0\x90\x95\x53\x9b\xce\x58\x0e\xcf\x7c\xbe\x80\x24\x84\xab\x46\x8c\xc0\x54\x97\xb2\xac\xc7\xc1\x99\x0e\xa4\x5a\x36\x68\x65\xf7\xe0\xee\x37\x5a\xf4\x3e\x97\x8e\xba\x9f\xdb\xda\xeb\xa2\xa6\x55\x5b\x10\x05\xee\x52\xd8\x71\xdd\xae\x40\x58\xa8\xed\x92\x85\xf3\x5c\xa8\x73\xfe\x0b\xa3\xc1\xe4\x78\xad\x82\xce\x3c\x57\xb9\xcc\x98\xf1\x66\xd0\xf5\x79\x9d\x66\x9a\xd6\x3f\xf8\x7d\x95\xca\x6b\x2e\x0e\x17\xcf\x8d\x82\x06\x0d\xd2\xab\x22\x5f\x6e\x14\xeb\xcc\x17\xb3\x69\x00\x2a\xfe\x41\x14\x2c\xd9\x5c\x05\x09\x0d\x8e\xbe\xfb\xee\xbb\xef\xd6\x9f\x02\xab\xd9\x68\x09\xfd\x75\x7a\xcd\x7e\x7a\x07\x97\x67\xf5\x25\xe0\xde\x8c\x16\x33\x99\x2f\x97\x17\xf9\xba\x71\x47\xd5\xea\x9b\xca\xd7\x34\x08\x9c\x60\x5e\x91\x60\xfd\x69\x7f\x1e\x9b\xf7\x30\x2c\xcd\x72\xb1\xdc\x7a\xe2\xe4\x2a\x27\x2c\x3e\xad\x40\xab\xf9\xb5\x82\x9a\x1a\xd6\x0e\x82\x0b\x20\x04\x77\x51\xd5\x06\x32\xe4\x41\xc6\xab\x54\x64\x4b\x26\x9f\xa7\xcb\xe5\x55\x3a\xfb\xd0\x71\xec\x39\xb1\x8e\x81\xed\x92\xb4\x8b\xb6\xf9\xc1\xbb\xaf\x10\x3a\xda\xc4\xbb\x9d\x93\xf6\x7b\xb5\xac\xd7\x4c\x64\xcf\x17\x7c\x99\x55\x18\xac\xb1\x55\x97\x08\x57\x1f\x66\xf9\x7a\x7b\x01\xea\x6e\x0e\x03\x7a\x1d\x76\xb3\x56\x27\x1e\xda\xcd\x5e\xdf\x9c\xc0\xa2\x2d\xe8\xff\x95\x23\xdb\x9f\xac\xfa\x82\xbe\x6b\xf6\x8d\xab\xa5\xc6\xaa\x1f\xea\x89\x9d\x1a\x3f\x6b\xab\xa4\xa9\xad\x05\x35\x06\x05\x1d\x9a\x81\xfd\x19\xae\x31\xd9\xde\x5c\xd7\x58\xcc\x26\x1d\x82\x46\x50\xee\x64\x35\xfe\x61\x9f\xd8\xec\x79\xbe\x5a\xa5\x56\xe6\x64\xd1\xbf\x33\x10\x50\xf8\x96\xd1\xc1\xa4\x34\x82\x1e\x98\xa1\xf7\xac\xd8\x2c\x41\xcf\xdc\xb5\xe9\xa7\xef\xb5\xeb\xa4\x53\xf6\x94\x80\x5f\xa4\xe9\x8b\xcd\x6c\xc6\x8a\x22\x88\x02\xd0\x74\x0b\xc8\xad\x69\x39\xf2\x7a\x41\x8c\x32\x76\x7b\x36\x88\x3d\x34\x22\xff\x2c\x21\xa0\xc7\x54\x9d\x12\xf6\x7e\xb2\x91\xe6\x49\xd6\x4a\x6f\xc6\x1a\x79\x0e\x9e\x2e\xa6\x15\x7b\x84\xd8\xb7\x7d\xc9\x75\x43\x76\x15\x5e\x2d\x37\x12\x61\x62\x31\xdd\x35\xf3\xcf\x7c\x27\x68\x5f\x2e\x21\xb8\x5b\xe1\xad\xa1\x93\xbc\x1e\xe8\x4a\xe7\x8e\x4a\x6d\xef\x0b\xa6\xfe\x65\xa4\x01\x00\x53\x00\x3c\x15\xc8\x34\x1d\x89\x40\xcc\x07\x27\x1e\xb4\xe9\xc3\x61\x30\xdb\xa8\x76\xea\x1e\x23\xf6\x95\x63\xc4\x5c\x97\xfb\x46\xf3\x0d\x42\xd4\x31\xae\x16\x4c\xf6\x4d\xfd\xfd\x5c\x3f\x6d\x54\xf0\x15\x06\x25\xb4\x0e\x92\xdd\x6f\xa9\x9a\x0a\x65\xb7\x55\x63\x2a\x8c\xca\x7d\x35\x68\x66\x2d\xf6\x76\x3b\xa7\xba\x37\xa0\x74\x03\x9a\x05\x93\x81\xaf\x0e\x70\x47\xff\x6d\x3b\x7e\xff\xd3\xbe\xf9\x66\x01\xe0\x2b\x50\x6e\x36\xa3\x71\xc2\x3a\x37\x59\x7b\x97\x46\x56\xa5\x2b\xc0\x5f\xd0\x64\xea\xca\x85\xfd\xef\x97\x2c\x2d\x18\xb4\x5e\x1f\x67\x2e\xce\x9f\xe6\x65\xeb\x9a\xeb\x62\xae\x63\x1b\xb5\xd7\x2f\xd4\xee\x58\x55\x29\xde\xed\xee\xe8\xf4\xaf\xeb\xf5\x4f\xf9\xa6\x3f\x4b\xc5\xcf\x5f\xa9\xfe\x6c\xa3\xfa\x7a\x9f\xf7\xe7\x32\x5f\xb9\x30\x38\x85\xb1\xd6\xf3\x46\xa4\x81\xa1\x63\x24\xc5\x57\xf6\x00\xbd\x74\x94\x67\x79\x37\xb0\x98\x6c\x65\x99\xe0\xe1\x70\x86\x3c\x5d\x14\x22\x31\x61\x25\xf2\x18\xb9\x85\xc7\xc8\x2d\xfe\x67\x65\xe4\xe6\xff\x95\x19\xb9\xaa\x97\x6b\xff\x4e\x09\xad\x9d\x59\x4c\xc1\x94\xa7\x3f\xe4\x2b\x27\x35\xb4\xa1\x2f\x2f\x61\x3e\x2e\x2f\xa9\x22\x30\x7e\xe2\x2b\xb0\xad\xfc\xdc\x03\xd5\x40\x09\xfa\x04\xf4\xd7\x62\x50\x5b\x63\x74\xa2\x16\xf0\x3e\xe8\xc5\xed\x64\x73\x26\x99\x98\x39\x06\x52\x83\x60\x7f\x91\x16\xe2\x2b\xd5\xbf\x62\x4c\xf4\xad\x2a\x35\x2f\x58\xd6\x3f\xea\x17\x9b\x35\x93\x08\x37\x72\x68\x66\x13\x22\xec\x56\x5a\xf2\x88\xe1\xc8\xf3\x80\x75\xe3\x41\xe9\x4d\xf7\xc4\x4c\x6d\xea\x75\x23\xb5\x13\xf0\xea\xb9\x72\xbe\x72\x5a\xa5\x34\xf0\x34\x21\xe8\xba\x61\xf0\x08\xb7\x1b\x95\xb8\xe7\x28\xa8\xed\xd2\xe0\x20\x69\x22\x10\x89\x71\xe5\xe9\xa7\xc1\x34\x49\xc3\x13\x5f\x35\xe4\xb3\xfb\x7c\x7b\xd7\xc2\x0c\x87\x46\xe1\x9f\xaa\x6e\x26\xfe\x5c\x4f\x72\x9f\x7d\x82\x5b\x34\x58\xff\x4d\xa1\xdc\xc9\x73\xc5\xfa\xba\xb4\xc6\x36\x3e\x57\xdf\x63\xf5\x8e\x6a\xf9\x42\x01\x6f\x1f\x35\x12\xb9\xf5\xb6\x66\x65\x21\x44\x1c\xd8\x47\x83\x31\xf1\xb7\x48\x34\x18\x97\x25\x26\x6a\x38\x34\x00\x5e\xa2\x9c\x30\x23\x84\xb2\x8e\x30\x3a\x6e\x30\x3c\xcc\xa6\xa7\xa0\x96\xdc\x56\x88\xe2\x3d\x9b\x6b\x3a\x63\xb7\x1b\xd8\xa7\x1a\x61\xd8\xf9\x1e\x4c\xf4\x6a\xec\x7d\x0d\x8b\x45\xba\x6a\x64\xe9\x40\x43\xdf\xcb\xfc\xd3\xd6\x65\x1a\x03\x41\x69\x17\xf1\x45\xaa\xbc\x89\x0a\x55\x7e\x6e\x84\xad\xa0\x00\xba\xd7\x18\xd2\xd9\x09\x84\x99\xac\x47\x04\x0a\x06\x83\x71\x6d\x58\xe1\x3a\x53\x96\x68\xdf\x1d\x84\x73\xd6\x21\xe8\x8d\x03\x30\xe7\xa3\xe2\xc6\x10\x7a\x3e\xaa\xec\x49\xba\xdf\x09\x41\x6a\x8f\x3f\xdc\x3a\xaf\x93\x54\xf8\x0e\x7d\x6a\xff\x38\xae\x03\x2b\xf3\x41\xe2\xb2\x04\x8f\x1f\x9e\x2e\x6c\xb5\x15\xf6\x3a\xfb\xdf\x4d\xd8\x94\x43\x98\x02\x5e\x3b\x42\xc2\xb8\x43\xf0\x24\x43\x73\x27\xfd\x5c\xf3\x49\x70\x09\x56\x45\xaf\xa2\x39\x11\x4e\xda\xc4\x8b\xf3\x2a\xac\xf7\xbf\x58\xd4\x14\x1b\x4a\x88\x00\xdd\x91\x10\xd5\x61\x47\x0a\xfa\x9f\x8c\x48\x3a\x18\x54\x34\x35\x68\xf7\x5a\x1e\xa5\xea\x5b\xed\x21\xac\xdb\x30\x84\xca\xe1\xf0\x73\x75\x00\x2a\x03\x57\x56\xc9\xff\x28\x71\x5b\xb7\x71\x25\xa4\x4c\xdd\x83\x61\x65\xac\xdc\xfa\xc4\x93\xce\x59\x8a\xa7\xb3\x0e\xf3\x6d\xea\x1e\x1a\x75\x5c\xb4\x45\x73\xdd\x35\xb0\x4f\x50\xbe\x62\xc1\x5c\xe9\x4a\x18\x52\x4b\x07\x6b\xfb\x17\xba\x40\x9e\xa8\x10\x4f\xbd\x97\xa8\xa1\xdf\x53\x91\xeb\x1e\x54\x76\x31\x8f\x06\xe7\xe9\xf6\xcc\xc4\x39\xc5\x0a\x9a\x22\x7d\x90\x3b\xb6\xbf\x4b\xb1\x57\x85\x79\x05\xed\x25\xae\x79\xa5\xfc\x73\xad\x31\xb0\xfd\xb9\x4e\x15\x33\x53\xa5\x09\xdf\xd9\x46\x4a\x26\xec\xdc\xf5\x2c\x77\x69\x4f\xb9\x13\x47\x3b\x77\x25\xfb\x82\x84\xbd\x4f\xec\x63\x3f\x43\x1d\x9c\x2f\x88\x53\xbc\x95\x33\xcf\x90\x5a\xad\x87\x7e\xd2\x29\xf5\x04\xb7\x95\x49\x1c\x9b\x4c\x2c\xf3\x6d\x34\x99\x7c\x46\xd3\x83\xa9\xae\xe9\xb0\x13\x79\x8d\x2a\xfe\x92\xed\x95\x3e\x20\xc5\xa8\x26\xf3\x1a\x55\x1c\x99\x43\xd1\xce\xa6\xad\xb1\x3b\x2b\xfd\x7d\xb5\xdf\x44\x97\x40\xa3\xd1\x3d\x05\x39\xd8\x17\xf3\xd0\x0e\x8a\x9c\x26\x17\xea\x5e\xa0\x03\x4b\xfa\x99\x52\x4e\xd8\xa3\x59\x8c\x79\x9b\xc5\x10\x90\x46\x04\x26\x79\x89\x38\xc2\xb8\x24\xdf\x1e\x7f\xdb\x66\x54\xbb\xee\x63\x2d\x53\x39\x1c\x0e\xf6\xf5\xe8\xad\x69\x98\x9b\xf3\xbd\x0c\x3d\xe5\xb2\xd0\xea\xc9\x4d\xf8\x6e\xa7\xc2\x55\xfe\xcb\x59\x47\x6a\xd1\x91\x98\x77\xa4\x7d\x64\x57\x1f\xb8\x6a\x7d\x28\x0f\xf9\x58\x03\xd7\x15\x6c\x38\xfc\xae\xc1\x69\x3f\x69\x51\x74\x1e\x2a\xb2\x1d\xd6\x9c\x8f\x7d\x44\x0a\xd7\x7e\x32\x18\x65\x9e\xda\x7f\x59\x96\xe4\xd1\xc3\x6f\xf7\x2e\x03\xdd\xcd\xde\xb7\xc7\xdf\xde\xe5\x73\x2c\xa5\xf9\xdd\x67\x7f\x87\x62\xb6\x24\x29\xe1\x98\xdc\x5a\xb0\xf0\xa1\xad\x5b\x11\xcf\x14\x28\xcb\xb2\x49\x39\x10\xe9\x79\xfc\xf3\x2d\x36\x65\x0b\x21\x51\x81\x64\x75\xc3\x02\xee\x2c\x1a\x9f\x87\x43\x4b\x0c\x80\xaf\xa0\x03\xeb\x00\x83\xae\x42\x68\x77\x1f\x44\xad\x81\x4e\xb9\x9d\x1a\x90\x9c\xd6\x53\xd3\xe5\xe3\x41\x67\x06\x79\x1b\xe4\xad\xad\x7b\xba\x2b\x40\x5d\x2e\x25\x90\x27\xa7\xec\x32\x0a\x22\x6d\x73\xa3\x55\xba\x76\xe3\xee\x3a\x0f\xb8\x37\x6c\x30\x17\x2d\xc9\xb7\xdf\x7c\xd7\xf2\xac\xa7\x00\x20\xbb\x14\x97\x6b\xe1\xd1\x70\xd8\xa0\xe0\x5e\x5d\x9c\xbd\xa9\x36\x67\xcb\x9a\x84\x98\xfa\xf4\x0c\xee\x91\xf2\xce\xdb\xda\x41\x92\x99\xb5\xfc\x4d\x9a\xb6\x51\x10\x9b\xe3\xb6\x32\xbc\x49\xc0\xf1\xed\x6e\x57\x7d\xd0\x3d\x7a\x9e\x2f\xad\xb0\xd1\x7c\xd6\x7c\xac\x21\x55\x02\x13\x98\x18\x8d\x3d\x57\x92\x7a\x17\xeb\x8e\x22\x16\x8f\x13\x0c\xde\xa3\xcc\x8a\x74\xcc\xc4\xfe\x5a\xed\x76\x8d\x09\x31\x63\x00\x65\x1b\xd1\x55\xde\x75\xf3\xa5\xfd\x04\x1d\xfc\xec\x5c\x94\x25\x79\xf8\xcd\xf8\xf0\xbe\xb6\x37\xf6\xe8\xd1\xc3\x6f\xf1\x01\xff\x8e\x3a\x3f\xc8\xfd\x86\xc3\x81\x46\xa4\x72\x5f\x4f\xe4\x8c\x17\x05\x17\xd7\x7d\xc9\xfe\xb1\xe1\x92\x65\xfd\x0a\x4a\x03\x38\xbd\x06\x22\x74\x3e\x8c\x0f\x10\xee\xe7\x6c\x96\x8b\xba\x9c\xa7\x62\x62\xc6\x53\xd5\x33\xd7\x7b\xbb\xbb\x8e\x8b\x05\x97\x9d\x55\xbc\xac\x79\x52\x3e\x47\xc2\xae\x59\x85\x0c\x0f\xe8\x9d\x75\xe0\x2c\xfd\xf9\x57\x60\x2c\x70\x29\x5c\x96\xb6\xde\xba\x6d\x9d\xe1\xf3\xed\xb7\x37\xaa\xa5\xd9\x3b\x37\xeb\x81\xbe\x6a\x4a\xbd\xab\xbb\xbf\xae\xea\x83\x43\xc3\x7b\xa3\xb3\xab\xfc\xd9\xb1\x71\xd4\xa0\x6b\x2b\xf7\xcb\xb6\xae\xce\xe5\x7d\xc9\x65\xa1\x0e\x43\x08\xf1\x51\x0a\x69\xed\x66\xd2\xcf\x65\xb5\xf3\x03\x40\x62\x93\x6f\xa2\xe6\x30\xf7\x61\xdf\xc5\x63\xd2\x47\xec\xf9\xe9\x9b\xd3\xe7\x17\x41\x85\xa8\xde\xa6\x2b\x86\x59\xad\x09\x4b\x99\x75\x50\x01\xcc\xb0\x2e\xf1\xfa\xed\xf7\x3f\xb4\x0a\xec\x76\xc1\xc5\xe9\xbf\x5f\x9c\xbc\x3f\x3d\x69\xd5\x74\xeb\x34\xa7\x0e\xc9\x91\x7b\x52\x13\xd4\x77\xdd\xc4\x32\x7b\xdf\x83\xac\x75\x4c\x75\x6f\x02\x77\x25\x68\x4c\x58\xc3\xb9\x32\x26\x50\xe3\x9e\xe9\x42\xdd\x64\x3d\x28\xe0\xf0\xf7\x4c\x36\x5a\x16\xcc\xc6\xd8\xc7\x4e\x88\xd5\x09\xea\xbc\xc5\x21\xbc\x7d\x95\x6f\x7a\x88\x7b\xdc\x0e\x41\xaf\x94\x55\x91\x05\x47\x9c\x62\xff\xe2\x87\x80\x63\x02\x53\x90\xeb\xae\x8a\x0a\xf7\x21\x5c\x87\x98\x2e\xc9\x71\xe3\xb4\x6a\x38\x21\xc4\xb7\xa5\x87\x3b\xe9\xad\xef\x59\xa6\xe9\x9c\x08\x2e\xe3\x9c\x81\x17\x03\xe7\x3a\x56\x7a\x28\x40\x57\x1d\x7e\x68\x9c\x60\x6c\x14\xcc\x6e\xe7\x22\x52\x64\xa6\x3e\x45\xb2\x74\x4a\xf0\xb9\x98\xb1\x3b\xea\xf7\xc9\x2b\x7c\x2b\xc2\x7c\x3e\x07\x67\xc6\x44\xd9\xe3\x5f\x7a\x67\x7f\xed\x99\xf3\x92\x5a\xc6\x12\xea\xe4\xe0\xe7\x50\x73\x2e\x51\xa7\x92\x26\x8d\x93\x6e\xbf\xcd\x13\x4c\x24\x45\xa8\x63\xa0\xb8\x52\xc6\x87\x82\x7a\xe6\xe9\x18\xb4\xbc\xac\xb8\x5b\x3c\xe5\x4f\xc4\x68\x84\x65\x2c\x92\x70\xee\x84\x40\xf0\x36\x53\x9f\x7c\xc7\xe4\x66\x1a\xe6\xf3\xa8\x4b\xb7\xbd\xa3\x69\x22\xa8\x8c\x59\x42\x38\x8d\xc1\xff\x8e\x18\x0e\x15\xae\xfc\x89\xd3\x31\x49\xa9\x70\xbd\xc8\x9f\xa6\x4f\xf2\xd1\x08\x8b\x38\xd7\xbd\x18\x80\x1f\x24\xfb\x12\x5e\x9a\x57\x1b\xca\x41\xa7\x56\x9d\xe2\xce\x2d\xb4\x6e\x89\xf2\xc8\x38\xb0\xe8\x43\xbb\xd0\xe1\xd2\x77\x06\xe9\x39\x1c\xbe\xe0\x62\x7b\x6a\xf5\x79\x34\x9c\x29\x7a\xeb\xf9\xfe\x90\xd6\xdb\x85\x8a\x45\x52\x89\x6b\xf5\x94\xd8\xe2\x3d\x23\x70\xd3\x49\xf4\xd6\xa6\x45\xb7\xb5\x83\x08\x16\x8b\x04\x71\xc2\x5d\x7e\x7d\xf0\x54\x2f\x95\x03\x8b\x50\x74\x69\xd0\xeb\x6d\x78\x79\xc9\x8a\xb3\x3c\xdb\x2c\xd9\xbe\x87\x9a\x3e\x73\x62\x89\xb2\xcb\x37\x50\xd5\x07\xab\xfc\x97\x46\x4a\xc3\x70\xa9\x29\xe6\x0e\xa6\x04\x20\x18\x5c\x56\x63\x19\xe6\xc0\xa5\x69\x22\x21\xd4\xc4\xb9\xa8\x7d\xc5\xef\x5f\x58\x90\xdb\xfa\x26\x24\x1a\x8c\xe1\x02\x4a\xcf\x47\x89\x75\x53\x79\xb7\x65\xcc\x1e\xc1\xb3\x48\x8b\x77\x1f\x85\xab\xd7\x9d\x60\x4a\xd7\x81\x26\x0f\x1f\xe1\x12\xe1\x6a\xb4\xfe\x4a\x22\xdc\xd4\xc9\xec\xc0\xff\x2d\x5d\x48\xab\xc7\xb4\xe2\xcb\x25\x2f\x80\x5c\x09\x40\x1c\x67\x1f\xa5\xfe\x24\x40\xb7\x47\xd0\x60\x91\x6f\x64\x40\x38\x0d\xb2\x74\x1b\x90\x9c\x06\x1f\x19\xfb\x10\x90\x94\x06\xab\x5c\xa8\x45\x40\x0a\x1a\xfc\x63\x93\x4a\xc5\x64\x40\x96\x34\xd8\xb2\x54\x06\x64\x03\x57\x01\x2c\x20\x33\xfa\xe0\x3f\xd0\xcf\xd9\xed\xa3\x12\xc7\x47\x0f\x92\xa9\x7e\x9e\x90\xe3\x12\x4f\xab\xd7\xb1\x7e\x8d\xff\x63\x7c\xf4\x5d\x72\xbf\xfe\x1c\x4d\xbb\x9f\xe3\x30\x82\x62\x23\x3c\xbd\xf7\x80\x64\xf4\xc1\xcf\x31\x8a\xff\xe3\xe7\x24\x19\xe1\x64\xf7\xd3\xed\x84\x3c\x2a\x77\x67\xe6\xe7\x05\x14\xd9\x65\xe6\xed\x95\x79\x5b\x98\x9f\x74\x77\xb2\x5b\x99\xc7\xc2\xfc\xfc\xcd\xfc\x9c\x9f\x9f\x3f\xb8\x26\x0b\x7a\x2b\xd2\x15\x84\x61\x08\x88\x1e\x71\x96\x6e\x8b\x28\x38\xdf\x88\x2c\xdd\x5e\x9e\xe5\xf0\x73\xb1\x61\x85\xfe\xfd\x91\x65\xc2\x3c\x5d\x2c\x36\x12\x1e\x5e\x4a\xae\x7f\xce\x53\xb5\x91\x7a\xe2\xc0\x94\x48\xa1\xe0\x32\xc0\x04\xe6\xad\x88\x82\x3f\xa7\x62\x93\xca\xed\xe5\x4b\x76\x25\xe1\xe1\x2c\x95\xb3\xc5\xe5\xc9\x5a\xf2\xe5\xe5\x59\xba\xbd\xfc\xf3\x46\xb0\xcb\x3f\x6f\x96\xdb\xcb\x93\xcd\xf5\xa6\x50\x97\xe7\x6c\xad\xd8\xea\x8a\xc9\xcb\x77\x33\x95\xeb\xdf\xb7\xf9\x8d\x49\x78\xc1\x66\xf0\xe0\xb7\x54\x92\xf9\x1e\xfd\x6b\xd0\xf4\xb9\xa3\x6e\xec\x0e\x19\x88\xdd\xce\x21\xa0\x67\x54\x4d\x59\x14\x04\x23\xe3\x16\x57\x8d\x26\x47\xee\x13\x36\x6a\xc3\x12\x8f\x58\x49\xd6\xf4\xb6\x88\xe6\xe4\x97\x0e\xa1\xcf\x11\x0b\x37\x6a\x66\xd4\xba\x90\xc6\xc7\xe0\x7b\x37\xbd\x02\x49\x74\xc3\xff\xb0\x7c\xf0\x78\x0c\x74\xfb\x1f\x1e\x8f\x2b\x0f\xea\x4f\xe9\x78\x1a\x8c\x82\x28\x38\x0a\xf0\x68\x8e\x04\x39\x26\xc1\x38\xc0\x3a\x65\x34\x47\xdc\xbe\x96\x64\x15\xf9\x9a\x9d\x96\xba\x57\x61\x06\x2e\x6c\x9e\x4a\xfb\x60\x91\xd6\x11\x43\x92\x54\x8e\x68\x26\xc7\xf7\x91\x0c\xb7\xe0\xfb\xe6\x48\xd9\x07\x3c\x42\x32\x84\xd5\x81\x44\xfb\xa4\xbb\xa7\xc2\xd9\x32\x17\x0c\x61\xf0\x21\x24\x48\x0a\x4a\xc1\x47\xfc\xe9\x98\x14\xed\x8f\x23\x94\x4f\x8f\x26\xd1\x04\x93\xd4\x4d\xef\x08\x1d\xe9\x74\x79\xc4\xf1\x03\x94\x4f\xf9\x51\x11\x15\x47\x1c\xe3\xdd\x6e\x8c\x4b\x92\x76\x5e\xc5\x3d\x1d\x4f\x6b\x8f\xc5\x4c\x67\xf5\xdd\x4a\x33\x5c\x12\xcf\xb9\xcf\xac\xf2\x65\x78\x16\xa5\x64\x1b\x2d\xc9\xc7\x28\x27\x59\xc4\xc9\x8b\x68\x43\x16\x91\x20\xab\x48\x92\x22\x52\x64\x55\x44\x8c\xfc\x5b\x54\x94\xf1\x2c\xd9\xed\x2c\x1c\xcc\x76\xbb\x20\xc0\xa1\xca\xdf\xe4\x1f\x99\x7c\x9e\x16\x0c\x34\x54\x4c\x54\x89\x07\xc5\xbd\x07\x9a\x2c\x2b\xc9\xa6\xab\xa3\xf5\xcd\x67\x59\x92\x15\x85\x0d\x73\xa3\x4f\x90\x9b\x78\x95\xd0\x05\xcc\x77\x17\x1b\xd9\x6f\xf0\x8c\x1f\x4b\x72\xd5\x0d\xab\x3d\xe3\x5b\xd9\x5d\xbd\x00\x09\xbb\xc7\x81\xe2\x1b\x63\x50\x28\x28\x83\xfb\x34\x74\x03\x01\x01\x88\x7e\x07\x3a\xd6\x5e\x0b\x19\x97\x93\xbd\x9b\x98\x27\x94\x11\x41\xb9\xf3\x46\x28\x87\x43\x31\x1c\xa2\x15\x15\x98\x88\xdd\x4e\xbf\xaf\x4a\xb2\xa5\x7b\xd7\x37\x3e\x4b\xc0\xdc\xc2\x5b\x6b\x81\x3d\x3f\x50\x6a\xaa\xa2\x5b\xff\x14\x4a\x15\xa3\x8c\xc8\x30\x95\xd7\x45\x7d\x4d\x40\x34\x7f\xf0\x11\x69\x82\xe7\x92\xae\x7b\x97\xe1\x92\x5e\x91\xcb\x90\xd3\x6b\x72\x19\x7e\xec\x3e\x3e\xf4\xc1\x03\x21\x6b\x96\x2c\x52\xe1\xbd\x37\x64\xa3\x66\xfa\x61\x43\x3e\xe9\x9f\x4f\xe4\x9e\x71\x49\xa2\x5f\xcc\x53\x89\x4d\x7c\x84\x8f\x9d\xaa\xd1\x8b\x4a\x55\xeb\xde\x1b\x7a\x85\x58\x68\xea\x26\x20\xaa\xa9\x7c\x38\x40\xfc\x26\x0d\x7c\xba\xa2\x39\x5d\x78\x22\x46\xc7\x26\x99\x3c\xfb\xf6\x89\xf7\xb2\x4e\x1b\xb9\xcc\x78\x11\x03\x84\x01\x94\x11\x44\x0b\xa1\x95\x94\x58\x4f\xcd\x0b\xbd\x8f\xdf\xa6\x6f\x81\x35\xbb\x0c\x37\x9e\xf8\xcf\x7d\x06\xc9\xb2\x0f\x50\x3a\x71\xaf\x0e\x85\x3b\xc1\x47\x0d\x87\x83\x07\x7f\xbb\xf7\x80\x9b\xd8\x2b\x0a\x57\xd4\xac\x11\x38\xa2\x99\x61\x0a\xdd\xe5\xa2\x88\x8f\x93\xa3\xc9\x6e\x37\x26\x39\x45\x22\xfe\x26\xd9\xed\x34\x42\xf2\x02\x1c\x8d\xc9\xc3\xda\xba\x74\x5a\xb5\x0f\x37\xa4\x3f\x5c\x3c\x47\x22\x9e\x24\x84\x13\x11\x3f\x4c\x76\xbb\x09\x11\xf1\xa3\x44\x57\x27\xe2\xaf\xed\xef\x63\xf8\xcd\x31\x8e\xaa\xc2\x5f\x5c\xa6\x72\x0b\xe6\x8d\xbb\x44\x4e\x27\xfd\xde\x27\xca\xc2\x4f\xbb\x9d\xf3\xe9\xc3\x05\x37\x24\x04\x3c\xb5\xa3\xfe\x59\x15\xd8\x7b\x99\xb9\xf3\xb8\xb7\xa5\x60\x98\xfe\x72\xb3\x5c\xfe\x64\x1c\x87\x99\xf4\x33\x93\x7e\x66\x50\xa6\x4d\x7c\x61\x12\x5f\xd8\x88\x14\x90\xf6\xa3\x4b\xab\xc4\xe7\xf7\x5e\x99\xa4\x57\xf9\x46\x16\x55\xe2\xca\x56\x08\x84\x48\x9d\x5c\x98\x64\x23\x64\xf1\x72\x17\x2e\x7b\x45\xd2\x14\x66\x50\xf7\x36\x8a\x2f\x8b\x0e\x65\xda\x4b\x18\x72\xf1\xd7\x74\xc9\xb3\xfd\xcf\x83\xda\x64\x48\x77\xbf\xd2\x93\xba\x97\x79\xcc\x99\x99\xb5\xe2\x3c\x5d\xb5\xcd\x80\x0d\x3e\xd8\x7a\x22\x3c\xa3\xc6\xa8\x52\xa9\xc0\xf4\xf8\x29\x95\xc3\xa1\x7c\x6a\x79\x05\x91\x41\xa2\xa9\xee\x64\xae\x09\xf1\x43\x9b\x1e\x3f\x6d\xd5\x64\x0a\xfd\x91\xcd\xf3\x3d\x63\x64\xbf\x69\xd7\xc6\xd3\x2d\x9c\x1d\xf3\xf0\xde\xf5\x1e\xbe\x75\x33\x13\x6e\x10\xc3\xa0\x4c\x1f\xab\xc4\x29\x60\x2a\x24\x89\x29\xb9\x11\xfc\x53\xc7\x84\x7a\xa7\x13\x14\x01\x7e\xfb\xdd\x1c\xe1\x07\x13\xf6\x10\x0a\xda\x94\x43\x76\xf3\xf7\x32\xbd\x84\x17\x7c\xc5\xcc\xd2\xd9\x31\xfa\xdd\x2c\x5c\x10\x25\x90\xce\x67\x74\x30\xd0\x9d\x2d\xf0\x6e\x57\x90\x05\xbd\x0c\xd7\x1a\xcc\xbb\xed\xc1\x2f\xc3\x8f\x68\x16\xde\xdb\x4c\xab\x4d\x38\x0b\xef\x6d\x89\x22\xcc\xdb\x63\x55\x12\x99\x55\x2b\x97\x4d\x65\x24\xed\xfc\x71\x7d\xec\x76\xcf\xb2\xa9\x5f\xe5\x06\xda\x63\x96\x58\xf6\xb1\x4a\x0b\x8a\x00\x13\x94\x4d\xe3\x31\x81\xff\x25\x51\x7c\xfc\x90\x7c\xfd\x9d\xfe\xef\xbb\xef\xbe\xab\xd8\x52\x85\x75\xeb\xfa\x2c\xb5\x3b\x86\xdc\xd8\xa7\x33\x72\x6d\x9f\x5e\x90\x2b\x4d\xaf\xab\x60\x64\xe6\xfa\xde\x66\x1a\xfc\x70\xf1\x3c\x88\x82\x00\xf7\x8a\x8f\x5c\x23\xad\x05\xbe\x9d\xa5\x05\xeb\x2f\xa3\x6a\x20\x73\x34\x21\x63\x1c\xcd\xd1\xc3\x09\x99\x4c\x70\x0f\xbe\xa7\xcd\xef\x37\xfa\xfb\x98\xdc\x8c\xdc\xf7\x3c\x32\x9e\x60\x4d\x43\xe6\x58\x40\x38\xd4\x44\x31\xb8\x7d\xd4\x48\xe7\x23\x45\xab\xa7\xdb\xe9\x6a\xf4\x4d\xb4\xc2\x47\xdb\xea\x30\x40\xd9\xf4\xfa\xe8\x63\x74\x3d\x42\x8f\x8f\x3e\x62\x72\x63\xab\xe4\x11\xfc\x6c\x5c\xcb\x6b\x74\x35\x0a\x60\xff\x07\x64\x6c\xf3\x88\xc6\x47\x8b\x07\x02\xe2\x7a\x25\x1b\x9f\x2d\x3e\x08\xc8\xb1\xfd\xac\x5a\xa5\x6b\xb4\x10\x68\xd4\xec\xcc\xc0\x7c\xf0\xb3\x67\x79\xa9\x41\x0f\x56\xfb\xb0\xfb\x12\xbb\xf9\x18\x19\x4c\xcc\x5e\x6a\x84\x26\xca\x2b\x30\x25\x19\xc0\x64\x8e\xc9\xe2\xe0\x72\x91\x39\x45\x33\x7a\x5b\x92\x99\x26\x4a\x16\xa3\xe0\x85\xe1\x9b\xe2\x4d\xe3\x2d\x85\xb7\x33\xc3\x72\xcd\xe2\x25\xbc\x3a\x34\xac\x53\x04\xa4\xd8\x49\x9c\xc5\xd2\xe4\x77\xd3\x36\x8b\x15\x24\x54\x13\x35\xd3\x04\xd2\xa2\x3d\x35\x33\x1c\x67\x09\x59\xd3\x0c\x4c\x55\x2d\xac\x8d\x50\x71\x64\x41\x11\x47\x10\x54\x5b\x7f\x4e\x77\x3b\xfd\x63\x83\x91\x59\x60\x75\x84\xb0\x46\x17\x1b\xbd\x56\xab\xf0\x5e\x16\xcf\x13\xb4\xc6\x64\x65\x8f\x1a\xe2\xc8\x81\x95\xcd\x66\x62\x74\x70\x81\x1c\x6c\xaf\x42\xcd\x6d\xbd\x16\xf6\x34\xc1\x38\xbc\x97\x19\xd5\x9c\xb9\xd5\xc0\x76\x95\x36\xb0\xab\x57\x3d\xa0\x8f\xbd\x70\x51\x1d\xab\x0d\x4b\x67\xd9\xec\xf9\x5d\x31\xa9\x62\x83\x5c\x12\x83\x9a\xd2\x2c\xeb\x40\x4b\x1b\x62\x10\x53\x8f\xd1\xb7\xe0\xce\x18\x59\x6d\x2e\x03\x06\x85\x06\x83\xaa\x94\x77\x4a\xd4\xb8\x46\x23\x11\xcb\xb7\x38\xf6\x65\x04\xd3\x23\xf3\x8d\xc8\x90\xba\xcf\x0c\x72\xa8\x16\x01\x37\xe0\x92\x29\x94\xba\x03\x79\x64\xae\xdb\xcd\x1a\xb5\x73\x59\xc3\x87\x7b\x5b\x2f\x17\x77\xb9\x16\x68\x52\x25\xe6\x75\xe2\x37\x66\x2c\x73\x8a\x36\x1a\x5c\x37\x1a\xc4\x1e\xb3\x47\x64\xa3\x41\xef\xe1\x63\xf6\x35\xd9\x68\x20\x9b\xb0\x87\x64\xa3\xc1\x48\x13\x29\x6b\xba\x87\xd9\x47\xec\xfe\xdc\x1f\xee\xda\xb8\x59\x81\x15\xdb\x5c\x29\x99\xce\xee\x5a\x36\xcd\x61\x1d\x4d\xee\xbb\x05\x9b\xe7\x72\x95\xee\x5f\xad\x59\x8d\x11\xcd\x39\x18\xc8\x30\xc7\x7c\xc5\x0b\x36\xcf\x76\x67\xeb\xbb\xdb\x05\x3f\xfd\xf4\xd3\x4f\x47\x67\x67\x47\x2f\x5e\x5c\xbc\x7a\x15\xad\x56\x51\x51\xfc\x2d\x20\x82\x5e\x86\xbf\x58\x77\x8f\xbc\x85\x07\x49\x6e\x13\x5e\x91\xd4\x3e\xad\x48\x51\x21\xec\x25\xe5\xa1\x13\x1f\x90\x0d\xe5\x86\xa9\x2c\xc8\xcc\x1f\x23\x44\x79\xf0\xb5\x7f\x11\x8b\x45\xb2\xdb\x19\xa6\x16\xef\x76\x3c\x16\x89\x8b\x6c\x0e\x14\x1e\x59\x74\xc1\xe9\x65\x58\xa0\xfc\x0f\x93\xe3\xdd\x6e\x72\x4c\x98\x65\x92\xe7\xba\x51\x26\x79\xc6\xd9\xaa\xa9\x22\x5b\x8b\x03\xd8\xd3\xc9\xf1\x34\x38\x39\x0b\xa2\xe0\xfb\xb3\xc0\x23\x5c\x9b\x2c\x61\x24\x80\xeb\xff\xe9\xa7\xc8\x52\x40\x16\x88\xdc\xc9\x75\x74\x8c\x89\x9e\xc1\xc8\xa6\x93\xb3\xa8\x18\x4d\xc8\xd9\x59\xa4\x7b\xa6\x1f\x0d\xe7\x4e\xce\xce\xce\xa2\x19\x72\x93\x71\xbe\xc8\xa5\x22\x05\xd9\x90\x87\xf0\x49\x7f\xdb\x90\x02\x93\x17\x91\xc3\x08\x2f\x5e\x40\x15\xee\xd5\x56\x93\x35\xfb\xf1\x23\x26\x59\x06\xf5\xba\x19\x3f\xe3\xc2\x91\x9d\x64\x49\x8e\xf5\xf7\x66\x06\xd3\x74\x9d\xe5\x21\x64\xc9\xa2\x65\x6c\xd3\x12\xf2\xca\x35\x92\x63\xf2\xea\x15\x74\x23\x77\x1d\x58\x44\x7a\xaf\x90\x85\xfe\x3d\xc6\x9a\x91\x47\x39\x49\x81\x5d\x3a\x71\xcf\x13\x4c\x56\xae\x8a\x14\x93\xd5\x0a\xaa\x48\x5d\x15\x45\x73\x0c\x05\x26\x45\xe1\x8d\xb5\x70\xf9\xce\xcf\xcf\xbd\xe4\x55\x41\x1e\x9a\xf4\xbf\x45\xc2\x63\x30\x1d\xcf\x9e\x11\xd4\xbd\x87\x76\xbb\x35\x48\xc1\x45\x1d\x31\x3e\x82\x4b\x97\xd2\x50\xb3\x95\xd8\xa6\x83\x48\x9b\x7c\x7d\xff\xc8\x47\x46\xcd\x9d\xfd\x4b\x2e\x98\x93\xf8\x3c\x98\x7c\x0d\xb5\x65\xbc\xe9\x9c\x67\x43\x66\x36\x76\xa5\xa5\xd6\x36\xfa\xf8\xd3\x14\x29\x59\x6b\x5c\x72\x1f\xcd\x7d\xc1\x91\x39\x75\xbc\x04\x6c\x89\xa2\xa3\x39\xb9\xa1\x97\xa1\xd5\xc3\x9c\xd7\xf7\xe4\x14\x65\x1a\x37\x65\xfa\x7c\xbc\x79\x30\x39\x26\x99\x3e\x38\x6f\x48\x16\x17\x3a\xe1\x21\xc9\xe2\x3c\xa1\x68\x75\xb4\xc6\x0f\x1e\x8f\x1f\x7d\xcb\xbe\x26\x99\x3e\x76\x4d\xca\xb7\x8f\x1f\x41\x82\x48\xe8\xea\x01\x60\xb4\x4c\x23\xb9\xd5\x03\x8d\xe6\x32\x8d\xdc\x56\x9a\x96\x25\x19\x8e\x17\xc9\x6e\xb7\x22\xb3\xe9\x4d\x74\x19\xa6\xe8\xc6\x8c\xb6\x3e\xb4\x0e\x91\xb8\x86\x8a\x4c\x71\x78\xef\x05\xd0\x0d\x06\x8b\x74\xe4\xbe\xb1\x00\xf8\x26\xd1\xf9\xda\xd9\xbc\x98\x53\x0d\x02\xfa\x4d\xcf\xbb\x81\xb0\x27\x1c\x11\x14\x82\xb5\x6a\xa8\xf4\xdc\x7d\x23\xa9\x19\x7d\x81\x89\xd4\x0d\x40\xde\x2e\x26\x29\xfc\xe8\xd6\xb9\x46\xd3\x86\x9e\xed\xc8\x5d\xf3\x9b\x0d\xfa\xdf\x16\xfa\xf3\xf9\xbb\xb7\x87\xe6\xa5\x42\xd0\x86\xe6\x50\xf9\xeb\xf3\x77\x8e\xcb\x82\x68\xb5\xa6\x8a\x2a\xf5\x0e\x16\xa2\x51\xd6\x14\xfb\x82\x32\x3f\x5c\x3c\xaf\xcb\x2c\x4a\x84\xc9\x29\xfd\xb8\x2f\xdd\xf0\xae\x9a\xe9\x29\x89\xe3\xe0\xde\xaa\x08\x08\x4b\x48\x1c\xdc\x2b\x02\xa2\xe0\x61\x15\x10\x09\x0f\xaf\x02\x22\xe0\xe1\xc7\x80\x70\x78\x38\x0b\x48\x0a\x0f\xdb\x80\x2c\xe1\xe1\x45\x40\x36\x49\xd2\xad\xc6\x7a\x1a\xb3\x78\x92\x24\x0d\x9a\xa1\xd1\xf3\x6b\xa4\x08\x8b\xc7\x09\xd1\xf9\x20\xd4\x1a\xd9\x86\xec\x93\x62\xa2\x7d\xbf\x51\x49\xac\xee\xf1\xdd\x0e\xe9\x83\xe5\x23\xd9\x62\xa2\xdf\xc1\x18\x63\x5b\x92\xad\x03\xb3\x2b\xb2\x0d\x79\xf1\x22\xdd\xfe\xbd\xa0\xd7\x64\xdb\xe2\xf7\x98\xc7\x8d\x4e\xd8\xc3\xfb\x9a\x27\xdc\x86\x4c\xd0\x9b\x78\x95\x90\x6d\xf8\xa6\xa0\x37\x64\x1b\xae\xf5\x3e\xdc\x96\xbf\xfe\x72\xe2\xc0\x75\xbb\x39\xa8\x82\x45\xb4\x5a\xf5\x4f\x02\xc2\xe9\xed\x32\x2d\xd4\x8b\x74\x1b\x05\xf1\x4f\xac\x50\x4c\x66\xe9\xb6\x9f\xaa\xa4\x1f\x8c\x04\x29\xd2\x15\x33\xdf\x2e\x72\x3f\x5d\xb0\x4f\xca\xa5\xaf\x72\x29\xf3\x8f\x8d\x4f\x3f\x32\xf6\x21\x0a\xf4\x09\xd0\x8f\x5d\xba\x6e\xc6\xa4\xc7\x6f\xd2\x42\x25\xfd\xe6\x67\xdd\xd2\xe9\xb2\x60\x51\x70\x76\xf6\xe0\xc5\x8b\x07\xfa\xfc\x0b\xca\x9e\x7f\xb1\xa3\x27\x55\x64\x69\x9b\xa7\xb7\x22\xa6\xdd\xae\xc5\x58\xb9\xec\xbb\x1d\xc4\x7e\x42\xac\xf2\xe5\x5b\x31\x1e\x41\x16\x60\x47\x6e\x68\x1c\x8b\x72\x12\x64\xc6\xd5\x6a\x41\xd3\xa7\x47\x8f\xa7\x81\xeb\x57\x10\xa5\x4f\x8f\x26\xd3\xc0\x0d\x43\xbf\x8f\xcd\xeb\x8b\x74\xab\xdf\x26\x26\xb3\x7d\x3b\x9e\x06\x76\x92\xf4\xdb\x37\xe6\xcd\x14\xac\xeb\x24\x4b\x2a\xe2\x22\xd1\x84\x49\x91\x1c\x0e\x48\xb3\x9c\x2e\xbd\xf0\xbc\x12\x39\x87\xb3\x86\x6a\x43\x4b\x50\xba\x68\x01\xc8\xde\x45\x55\x27\x45\xbe\x9f\x34\x18\xb0\xe1\x70\x4f\x00\x0b\xe6\x32\xc3\xe1\x60\x9f\x40\xfc\x52\xdd\xab\x4a\x5b\xe9\x3d\xbb\x3e\xfd\xb4\x06\x5d\x25\xe5\xe9\x5a\x69\x7c\xe7\x12\xbb\x84\xdc\xe1\xbd\x7b\xa6\x2f\x94\x52\xa9\x7b\x03\xff\x27\x77\xc6\x06\xb3\x56\x5c\xf3\x5c\x4e\xeb\x47\xd0\x67\x98\xa9\xd0\x9a\xc8\x05\x38\x7a\x3c\x9e\x8c\x1f\x7a\x01\xd1\x1b\x86\x4c\x93\x01\x75\x17\x13\x10\xbe\xbc\x38\x63\xf2\x9a\xa5\x57\x4b\x66\xa3\x6e\x32\x3c\x2d\x10\x92\x94\x59\x3d\x3a\x5e\x98\xfb\x1e\x89\xa7\x71\x12\xdd\x96\x10\x49\x1c\x47\x26\x0e\x99\x2c\xdb\x2a\x93\xde\x08\x9d\xc5\xfd\xe1\xe8\x1d\x26\x7c\x61\xc3\xf7\xb5\xef\x37\xbc\x11\x97\xa8\x72\xad\xdb\x51\x4f\x6d\x92\xe4\xdd\x94\x9a\x29\x2a\xa6\x77\x7d\x44\x5d\x0e\xbd\x7d\xb4\xb8\xb6\xf9\x5f\x17\xa7\xd5\x55\xae\x09\x2b\x11\xc5\x49\xd9\xf4\x41\x6e\xfd\x97\x7b\x96\x2f\xaa\xcf\x45\x9f\x75\x59\xad\x54\x85\x0a\x08\xd1\xb8\xc4\xb7\x68\x49\x97\x10\xf2\x3c\x4c\xf5\x7c\xc3\xb2\xd0\xa5\xf7\xa2\xf7\xfd\x72\x7f\xc1\x68\x47\xda\x6e\xa7\xc8\xd2\x2c\xf2\x0f\x62\xc9\x8a\xe2\x9d\x5a\x30\xf9\x91\x17\xec\x7c\xcd\x66\x7c\xce\x59\x46\x05\x2c\xe0\x86\xb6\x57\xd9\x21\xda\x0d\xa5\xad\x6f\x0c\x4f\x37\x53\xbf\x47\xb6\xeb\x9d\x2a\x1f\x9c\xfa\x17\x1c\x5d\x60\x36\x1c\xe6\x30\xfd\x5d\x01\xda\xb9\x26\xaa\x04\x82\x10\x41\x46\xc9\x2b\x47\x9d\xe1\xa8\x72\x7c\xdb\x4d\xd1\x9a\xc5\x18\x0e\x07\x36\x92\xfa\xc1\x6b\xf4\xea\xfe\xbe\x6b\xa9\xeb\x6c\x60\xde\x46\x72\xbc\xdb\xa1\x14\x1e\x86\xc3\xae\x61\xa9\x38\x4f\xf0\x94\x6b\x6a\x72\x9f\x2a\x53\xe1\x6c\x53\xa8\x7c\x05\x85\x1c\x85\x56\x38\xda\xcc\xff\xe8\xe1\x99\x2e\x1d\x5a\x19\x15\x25\xca\x89\xc4\x88\xc5\x79\x42\x74\xa3\x44\xe2\x08\x9a\x15\xc8\xbe\xc2\xb4\xf1\xd2\x2d\x92\x40\xfa\xa7\x2c\xc2\x74\xb9\xec\xe8\x5b\x7b\xa9\xf7\x55\x20\xe7\x4d\xed\x34\x13\xb7\x1f\xf4\xd3\x44\x1f\x60\xc2\xb3\x46\x0c\x25\xcb\x36\x33\xe6\x6f\x7a\x0f\x35\x18\x98\xd7\xbb\x88\xdc\xba\xdb\xa7\x25\x2d\x3c\xed\xcc\xe5\x67\x91\x7f\xa3\xbf\xa4\xd2\x99\xd5\xb8\x82\x88\x7d\x2c\xde\x5c\xfd\x0e\x3d\xd0\x3e\x83\xc0\xec\x10\x6d\xc7\x93\x6f\x0c\x20\x3c\x15\x1f\x0e\xf3\x8e\x53\x84\x77\xa4\xe5\x56\x5f\x9c\x14\x64\x49\x36\x54\x21\x8e\xc9\x8c\x42\xa4\x7a\x3e\x47\x9b\xe1\x70\x06\x6d\xa0\x82\x3a\xbd\x1c\x3c\xa8\x9c\x9d\xd5\x36\x76\x1a\xb1\xa7\xb4\x78\x32\x1e\xd0\xf4\xe8\xe8\x09\x06\xa2\x1e\xf1\x38\x4d\x48\x1e\xa7\x09\xae\x73\xba\x7e\x96\xba\xfa\x01\x9d\xd5\x5f\x8c\x84\x89\xb7\x6f\xbf\xc8\x82\xe6\xed\x34\x10\xeb\x0c\xe8\xa2\x61\xe4\x97\x0d\x87\x2e\xa1\xcf\x6b\x41\x0d\xa5\x79\xfd\x62\x45\x3f\x8d\x46\xcc\x89\x48\xd6\xcd\x66\x4c\xaa\xae\x77\x3e\xa0\xeb\x46\x43\xf3\xe1\x70\x5d\x37\x54\xdf\xa3\xe8\x96\xea\xb7\x9e\x91\x27\x4a\xc4\x61\x2a\x51\x41\x57\xf5\x0c\x52\x89\x72\xfc\x45\xb3\x28\x6c\x9c\x4a\xb2\x6a\xce\xe3\xa1\x19\x5f\x52\x9d\x51\x4f\xfb\xb2\x73\xda\x5d\xbf\x07\x54\x43\xc9\x80\xde\x15\x12\xd8\x97\xe5\x34\xcc\xb5\x3b\x0d\xbb\x1b\x39\x42\x5e\xfc\x71\x33\x9f\x33\xd9\x2a\x59\xa5\x37\x8c\x6f\x65\x23\x80\x56\x83\x14\x10\xd8\x18\xa3\xf6\x39\x45\x82\x0a\x73\xe4\x64\x6c\xc9\x57\x5c\x31\xb9\xdb\x05\x61\x40\x72\x2a\xc2\x55\xfa\xe9\x05\x5b\x9b\x28\xe7\x26\x04\x93\x26\xcf\xc0\x65\xaa\x24\x85\x87\xdd\xbd\x1d\x24\x35\xcc\xe3\xdb\x0d\xdd\xec\x76\x13\xe2\x1f\xdf\xb2\x0b\x79\xcf\x5c\x57\x32\x2a\xe3\x59\x42\x16\x54\x84\x45\x3a\x67\xc3\x61\x13\x1b\x65\x98\xcc\x3f\x47\x98\x65\x98\xac\xa9\xd2\x3f\x2b\x5a\x11\x61\xa6\x0c\x90\x61\x73\x8f\x36\x83\x5a\x4d\x2a\xb9\xa1\xcb\xe9\x72\xc4\x47\x29\x9a\xe1\x28\xb5\x37\xba\x83\xc5\x70\x38\x58\x0f\x87\xab\xea\x70\x80\x41\x64\xb8\x8e\x27\x37\xa8\x67\x68\xb7\xdb\x3c\xcd\xeb\xcb\x7f\x94\x91\x1b\xb2\x19\x4d\x70\xaf\x88\x6f\x12\x9a\x69\xf2\x06\x31\x4c\x0a\xcf\xe2\x42\x10\x11\xce\x97\xa9\x52\x4c\xc0\xf3\x46\xb8\xb7\x36\x3e\x32\x13\x94\x52\x94\xd3\xbc\x73\xad\x0a\x9a\x87\xf9\x0d\x93\x1f\x25\x57\xc6\xde\x7e\xa9\xb7\x4d\x6b\xc1\x36\x7a\xc1\xf8\x1c\x69\x7c\xe4\xcd\x84\x9b\xa0\xc1\x67\x15\xed\x79\x35\x40\x5e\x93\x96\x10\x60\xd3\xf4\x50\x79\xa2\x6d\x97\xb1\x78\x9b\xbe\x45\x0a\xef\x76\x47\xc6\x7b\x46\xe5\x33\x31\x0c\xf0\x6e\x97\x87\xa6\x13\x53\x16\xa9\x6a\x17\xf9\x78\x1c\x71\xdc\x75\x8e\x28\xd7\xe4\x67\x0d\x25\x34\x15\xb1\x47\xaf\x7b\x43\xd6\xdb\xae\x05\x13\x03\xb0\x98\xf0\xf7\xaf\x1b\xde\x67\x19\x03\x4d\xbb\x77\x00\x9e\xf3\x8d\x3a\x60\xbb\x1d\xea\x00\x41\x35\x1d\x38\x85\xe5\x48\x4e\x07\x2d\x9a\xd7\x7e\x70\x41\x5b\xcc\x90\xa6\x40\x18\x51\xfd\x4c\xd8\x3e\xf9\xd5\x41\x3d\xcb\x8e\x99\x04\x0f\x94\x95\xe2\x26\x1b\xa5\x23\x91\x50\x19\x8b\x84\x80\x36\x24\x2e\x91\x22\x8c\x08\x68\x92\xe4\xd8\x9e\xd6\xa4\xb5\x40\x9d\xe4\x9b\x5b\x1f\x65\x95\xce\x52\xc3\x02\x2c\x71\x6f\xc9\x54\x5f\xd0\x19\x92\xc6\x03\x33\xc2\x98\x64\xfa\x35\x1e\x27\x98\x2c\xe8\x06\xd0\xf0\x93\xca\xae\x25\xb3\xe6\x5f\x95\xfb\x01\x3d\x63\xc2\x42\x62\xcf\x34\xc3\x3e\xb7\x34\x8b\x58\x24\x98\xa8\xce\xd5\x61\x9d\x68\x01\xce\xc3\x41\x61\xcc\x41\xaa\xce\x2c\x6a\x4d\xd7\x27\x08\x3e\xee\x76\x3a\x93\x51\x4d\x81\xaf\xc3\x21\xb4\x46\x5d\xd8\xca\xda\xaf\xb2\x07\xef\xb7\x65\x14\xc3\x68\x75\x56\x22\x3d\x4b\x61\x74\x68\x6a\x70\x09\xd5\x32\xb7\x18\x9a\xb4\xdb\xfc\x9a\x08\x6b\xbe\xcb\x80\x86\xe3\xc3\xca\x7b\xd0\x35\x2f\x94\xdc\x82\xed\xe9\x8f\x2c\xfd\x70\x96\xae\x4b\x9f\x0b\xb2\x33\x6b\xb9\xcc\xd3\x4f\xbc\x68\x19\x12\xf8\x02\x28\x57\x9b\x26\xbb\x80\xad\xf5\xab\xb8\x66\xce\x7f\xdb\xe7\xcb\x5f\x33\xb5\x57\x3e\xcd\xb2\xfd\xf2\x1a\x2b\x30\x7b\x09\x58\x95\xb6\x57\x78\x80\x36\x9b\x75\x58\x83\x8f\x8e\x6e\x34\x6b\xa8\x83\xfd\x35\x8a\x5b\x83\x93\xf7\x6e\xd2\xbc\xa9\x3d\x3c\x9b\xe0\x46\x86\xe4\x7e\xe6\xb2\x37\x68\x09\xc1\x84\x62\x92\x06\xf0\x13\x80\x32\x2f\x57\x34\xd0\x7f\x83\x12\x89\xdd\x0e\x89\x3a\x2c\x74\x4a\x8a\x5f\xb1\xa6\xbc\x6b\x35\xd3\x2c\xdb\x77\x2b\xe7\x33\x71\x24\x27\x69\x8f\xe9\x3d\x67\xba\x36\x45\x26\x30\x75\x6c\xdf\x13\x2a\x49\x4a\x39\x8e\x10\xca\x5d\xfa\x27\xae\x4c\x72\x5e\xf9\x7a\xb3\xb3\x59\xaf\x1c\x52\x64\x2f\x84\xf1\xde\xca\x57\x79\x31\x49\x71\x7b\x05\x78\xb1\xd6\x5c\xf5\xc1\xee\xf3\x39\xf2\xfa\xed\x78\xd2\x3b\xda\x30\x19\xbd\xd8\xe9\x7c\x9a\x47\x1c\x23\x69\xbc\x3f\x58\x2b\xd0\x3b\x2b\xf8\xc4\x95\x57\x3e\x9d\xe6\x51\x0a\xe5\xed\xd2\x2f\x29\x4a\x3b\xc5\xaf\x28\x3d\xe4\xb9\xe6\xb6\x42\x7c\x51\x9c\x94\x1e\x35\x0d\xb8\xaa\xed\x42\xbf\xe1\xd2\xa6\x6c\xfb\xbd\xa9\x7c\xf9\x18\x55\xf6\x36\x47\x8c\x24\x86\x0b\x46\x99\x80\x4f\x1f\xec\x1c\xe2\xb4\x9c\xaa\x7b\x24\xa6\x05\x33\xdf\xeb\x10\x2b\x0d\xdf\xed\xaf\x15\x75\xaa\x7b\xd3\x96\x8b\x14\x1c\x21\xe9\x65\xf3\x2d\xa2\x35\xc4\x6a\xbe\x9f\x6c\xe8\x01\x5a\xba\xd6\x14\xac\xfd\x5b\x18\x91\x69\xed\x03\xc2\x22\xab\xf7\x8d\x7d\x40\x2a\x62\x63\x89\x40\xa3\xc7\x3f\x38\xf2\xab\x82\xc9\x9b\x3d\xad\xad\xbd\xc0\xd3\x84\x39\x1b\xf0\x56\x1b\x3e\x8c\xc3\x44\xb8\xab\xf5\xcd\xfa\x9d\xa9\x5b\x5a\x71\x42\xa3\xdd\x8d\x38\xd0\x72\x7d\x6d\x33\xe7\x22\x03\x53\x6a\x2e\xae\xdf\xe7\xb9\x3a\x15\x4a\x6e\x21\x58\x05\x48\x22\x34\xf0\x16\xc6\xfe\xc8\x35\x54\xd7\x0a\x08\x4c\xb5\x70\xa8\x2e\xd1\xb9\x7d\xec\xba\x7a\xc8\x01\xd9\x6d\x44\x0c\x44\xb4\x6b\xfa\xc4\xd5\xaf\xa8\xe8\x13\x57\x1d\xf5\xb8\x0d\xfd\xd9\x6e\xb5\x77\xfe\x1d\x7d\xab\xea\xfc\x4c\x07\xbb\xaa\x3c\xd0\xcb\xfd\x08\x2f\x9d\x50\xd0\x3a\x20\x50\xab\x1a\x03\x0f\xe2\xb5\xb7\x68\x87\x74\x15\xda\x82\x6d\xd9\xf0\x63\xe1\xd7\x60\xcd\xba\x3b\x1a\xb2\xf0\xd0\x05\x5b\xe0\x4c\x48\x85\x32\xcf\x15\xc9\xa9\x87\xfb\x8c\x5d\x5b\xc4\xdd\x75\x82\x06\x3f\x0d\x76\x2f\x65\xbe\xaa\x86\x65\x84\x1a\x29\x10\x2e\x66\x26\x99\x62\x72\xc5\x05\x73\x90\x6a\xf7\x42\x81\x94\xc6\xe1\xa4\x0a\x8d\x2b\xdc\x94\x15\x64\x49\x45\x27\xf8\xf6\x0a\x63\xcc\xc4\x30\x59\x0e\x87\xcb\xd0\x83\xe5\x0a\x21\x6f\xe8\xad\xab\x27\x02\x3b\xaa\x8e\x7a\xa2\xa5\xe9\x9b\x60\x1f\x1b\x5b\x90\x54\x01\xdc\x4b\xab\x9f\x63\x8d\x3b\xf9\x7c\x5b\x3b\xc8\xe9\xa5\xd3\x34\x9e\x25\x74\x13\x7d\x6e\xbb\xe7\x04\x21\x09\x87\xa0\xce\x0e\x02\xb8\xe6\x62\x78\x1d\xe8\xde\xe6\x66\x19\x84\x7d\x38\x03\x97\xbb\xb0\x3c\x6a\x21\x59\xb1\xc8\x97\x99\xe6\xcc\xd9\xc7\xfe\xeb\x8e\x61\x22\x0f\xd3\x34\xe1\x42\x61\x3f\x2e\xe9\xad\xae\x3b\x92\xa4\x6e\x22\x12\xa4\x6a\x20\xe2\x95\xe1\x5f\x3f\xf7\xa6\x9c\xe4\xcd\xb1\xe4\x87\x80\xb7\x89\xb5\x7a\x5d\x8e\x78\xea\x3b\xae\x90\x17\x75\x35\xe2\x1a\xc6\xea\x2f\xe1\xfb\x54\xf1\x9c\xe4\x94\xd5\x33\xb0\xdb\x8d\x7b\x4d\xe9\x40\x8e\x21\x86\x76\x1e\xe7\x75\xf4\x17\x4b\x21\x51\x79\x00\x6d\x32\xdc\x13\xbb\x1d\x7f\x96\x4f\xd3\xe1\x30\xad\x60\x31\x2c\xf2\x15\xeb\x0c\xed\x09\x4e\x21\x19\xdc\x9d\x28\xeb\xfc\x05\xc9\x6e\xa4\x65\x80\x6b\x0c\xf2\xd7\xe8\x5f\x53\xbd\x87\xbf\xfc\xda\xcb\xf6\x31\xd2\xb5\x49\x1b\x88\xc5\x39\xed\x6c\x81\x71\x43\x5b\xa0\x0d\xe2\x1e\x91\xd3\x3e\x46\x3a\x27\xb7\x53\x9d\x1f\x20\x5b\xd6\x08\x46\x39\x04\x03\xf0\x7e\x10\xc1\x58\xab\xeb\x4a\x61\x3f\xee\xde\xa6\x0c\x27\x6d\x3c\x7d\x00\x0f\x1d\x84\xd4\x5a\x68\x0c\x9c\xad\xea\xb8\x17\xaa\xf4\xfc\xc1\xcc\xd1\x62\x8f\xfa\x8e\x23\x95\xce\x3b\xd4\x79\xba\x62\x60\xd9\x5a\x62\x0c\x51\x66\x1d\x93\x2d\x5a\xdd\x6c\x16\xd9\x97\xca\x33\xcf\xe2\x61\x30\xee\x7d\xa1\x77\x88\x2e\xf9\x77\x33\x8f\xb1\x77\x90\x83\x9a\x97\xb6\x6e\xdd\x3e\x23\x24\xf1\x92\xab\x35\x81\x3e\xea\xc2\x9a\xfd\xea\xba\x6a\xed\x48\xab\x6d\x5c\x39\xdc\x90\x61\x3e\x47\x5f\x68\xf7\xc8\xf1\x70\x38\x98\x54\xee\x49\x5b\x73\x1e\xf3\x84\xa8\x98\x77\x0a\x6a\x9b\x07\x63\x0b\x84\x0e\x02\xad\x5b\xbc\x3f\x9f\xbf\x7b\x5b\x97\x6a\xba\x10\xb0\xfc\x46\xa0\xf3\x83\xf8\x60\x38\xac\x70\xdc\x1d\xb1\x8f\x55\x08\xee\xdb\xde\xf0\x42\x1d\x12\x74\xb9\x39\x1e\xa9\x12\x93\xa0\xbe\x60\x51\x21\xcf\x46\xc1\x51\x30\x12\x95\xa5\xac\x41\x06\x25\x2a\x70\xaf\x8e\x89\xb4\xd9\x17\x11\x38\xc7\x18\xdf\x18\xfb\x3a\xf4\xcd\xa4\xe9\xa9\xce\x52\x34\xcf\x6b\x1f\xff\xbb\x9d\xb9\x64\x31\x1a\x39\x8a\xad\x0a\x38\x84\xce\xd2\xb5\xf3\x73\x64\x2c\x3e\xba\xed\x60\xeb\x52\x24\xf0\x58\x85\x80\x58\x37\x88\x39\xf1\x8d\x64\x27\x25\x2e\x73\x5f\x47\x42\xd7\xbd\x47\x6e\x15\xfc\x17\x46\xc7\x2e\x92\xee\x8a\x89\x42\x1f\x42\x63\xaf\x87\xae\x53\x25\xc9\x9b\xe4\x50\x37\x11\x44\xbd\x92\x46\xe6\x50\xa9\x44\x39\x7b\xed\xaa\x9d\xd1\x88\x18\x17\x5d\xcd\x79\xf2\x1b\x37\x82\x07\xe1\x82\x9f\xd5\x73\x49\xe9\x39\x53\x53\x24\xa9\x80\x31\x18\x13\x7f\x70\xc3\xf7\xd4\xa4\xb8\x60\x04\xfc\x17\x36\x1a\xe1\x08\x89\x46\x84\x3b\x97\xee\xec\xed\x1b\x18\x6f\xc9\xba\xe2\x37\x1f\x1c\xd9\x60\xa0\xaa\x98\x6f\xfc\x17\x76\x44\x3b\xbb\xaa\xe0\x63\xe4\x3c\xbf\xb6\xa6\xfc\xe8\xc8\x1f\x75\x25\x2c\x21\x83\x71\x6b\xe2\x8d\xbc\xe5\x30\x01\x7a\xb0\x8f\xdc\xf5\x71\x6f\x0e\xc1\xb7\xa1\x6d\x52\x61\xec\x4d\xdc\xd1\x11\x01\x1a\xd6\x4e\x28\xea\xec\x62\x7b\x20\x98\x48\x1c\x81\x9c\x1a\x09\xca\xbd\x60\x80\xb8\x31\x4b\x47\x10\x9c\xaa\x32\xa9\xff\xb2\xba\xf5\x7c\x44\x88\xbb\xb0\x81\x82\x4c\x60\x8a\x70\x6b\x92\x16\xe9\x61\x89\x9a\x69\xc2\x89\xd3\xf2\xa6\x38\xed\x33\xa5\x9c\x10\xcd\x2f\x65\xc3\x1a\xf1\x19\x57\x5d\x07\xf6\xc1\xed\xe0\x1d\xe0\xe3\xe8\x4b\x20\xa6\xd9\xec\x2c\xdf\x08\x45\x0f\x75\xa4\x91\xd5\xd2\x8d\x5d\x30\xe3\xeb\xb6\x08\x7c\xeb\xd0\x29\x11\x9a\x01\x52\xfb\x3e\x18\x27\x53\xe3\x1b\xcf\x07\xd6\x0e\xc5\x3a\x40\xb8\xe0\x01\xc1\x7d\x14\x86\xc4\xea\xe8\xd6\x49\x51\xe4\x33\x9e\x76\x10\xbf\xbf\xb2\x7d\xc3\x63\xfa\x2d\x68\xfa\xe3\xa0\x3e\x24\x94\x05\x0a\xa5\x55\x0a\x90\x69\xb1\x67\xa6\x67\xbc\x87\x39\x65\x74\x53\xdc\x64\x45\x98\xa4\xb4\x3a\x1f\xfb\x9d\x6b\xa9\xb1\x9c\xa8\xa7\x08\x64\x3e\x7c\x8e\x06\xa9\xb9\xc3\xd6\x2b\x29\x20\xd0\x00\x0e\xb3\x5c\x38\x95\x86\x5b\xfd\x1c\x0d\xc6\x65\x2f\xa5\x83\x31\x61\x54\x59\xb7\x2c\xae\x61\x7b\x66\x21\x7d\xc6\xfa\xe5\xa7\x48\xf7\xc8\x28\x84\xd9\x4a\x26\xd6\x53\x9f\xad\xa2\x2c\xad\xe5\xa3\xdf\x2b\xf1\x9b\x7a\x45\x24\x38\xfb\x70\x77\x30\xd5\x79\xfa\x8c\x72\xdb\x1f\xd1\xd1\x1f\x16\xcb\xd1\x28\x29\xf7\xc0\x83\x09\x25\xf9\x1d\xeb\xe0\xd8\x69\xb3\x12\x36\x37\xc2\xa4\xf8\xb5\x4b\xe1\x06\x5d\xb8\x41\xa7\x77\x0f\xba\xd0\x83\x96\x6e\xd0\xa0\x1b\x5a\xbd\x4c\x92\x2f\x58\x9a\xe2\xd0\x54\xc4\x92\xd8\x8a\x92\x3b\x97\xe7\x5f\xd3\x53\xc2\xe9\x18\x38\xc2\xe6\x72\xf1\x67\x34\xbf\xbb\x8f\x2c\xe6\xa3\x51\xd2\xb1\x64\x95\x67\xcc\xcf\xec\xba\x6a\x8a\x1a\xa5\xd3\x1a\x11\x7c\xa6\x7c\xb5\xd8\xdd\x91\x37\x9d\x92\x1f\xf2\x6a\x8f\x5b\x1e\xe3\x13\xda\x01\x6b\xb8\xd1\x1f\x2e\x8a\x35\x9b\x75\xa9\xe9\xd7\x5d\xf9\xf5\x1d\x00\x3d\x43\x91\x67\xec\xef\x45\xb8\x51\x7c\xe9\x9a\xb1\x3a\x4b\x01\x6e\xf6\xcc\x7e\x6d\xf6\xec\x33\x9a\xde\xa6\x63\x39\x04\x62\xec\xe4\xd2\x34\x5c\xe5\x5e\x74\x5e\xde\x22\xc2\x35\xf6\x06\xca\x4b\x11\xe7\xc1\xd7\x73\x87\x92\xdf\xa5\x95\x71\x98\x72\x25\xc1\xa5\x00\x27\xa2\xb7\xb5\xb3\xee\x49\x93\x62\x75\x18\xa1\x74\x07\x7f\x2e\x4c\x70\x94\x86\xe8\xe7\x53\xdb\x43\x77\x95\x77\x6f\x03\x78\xf6\xd5\x97\x66\xa7\xd4\x7a\x55\x19\xe8\x6d\x22\xaf\xa1\x31\x26\xec\x33\x0b\xaa\xee\x82\xa8\xee\xf5\xd0\x83\x09\xf3\xf9\xbe\xd9\x77\xed\x9c\x40\xd6\xd1\x30\x05\x1d\xf7\x3c\x5d\x7f\x85\x50\x87\x11\xc0\x33\x2a\xa7\xd5\x20\xf7\xf1\xa9\xa8\xf0\xa9\x0a\xd9\x6a\xad\xb6\xfb\x6d\x9b\xba\xc1\x8d\x6a\x73\x46\x00\xa1\xeb\x82\xbc\x93\x82\x6a\x3a\xd6\xae\x3d\xf9\xfb\x3c\xaa\xf5\x0e\xdf\x1d\x62\xc1\x2c\x60\xc3\xbb\x4e\x13\x9c\x0c\xd5\xd4\xb5\x08\xc0\x3a\x19\x0d\x1d\x22\x3b\x73\x98\x15\xe9\xb5\x95\x74\xaa\xfb\x37\x52\x90\xa5\x75\x76\xb1\xa7\x93\x97\x5f\x2d\xdd\x4a\x3e\xb0\x14\x45\xd4\xe7\xd6\x88\x0d\xbe\x5c\x2d\x59\x68\xbc\x02\x76\x78\xc5\xdf\x8f\xc3\xd2\x5d\x23\xfb\xb4\x36\x12\xba\x7e\x0a\x9e\xc7\xaf\xd2\xd9\x07\x5b\x6b\x5b\x6f\x70\xb7\x53\x56\x7d\xc7\x0c\x3a\xe4\xc5\x5f\x39\xfb\x08\x5f\xba\x3c\x44\x7a\xb7\xef\x16\xb0\xcc\x0d\xbc\x6f\x4e\x6f\x54\xb3\xc6\xa4\xa8\x20\xce\x86\x5a\x1d\x61\x81\x58\x9c\x26\x24\xc5\xb5\x57\xba\xfd\x61\x56\x54\x1b\xe6\x73\x24\x2b\x3d\x6a\x37\xce\x3e\x6f\x85\xd6\x18\x34\xd7\x1d\x5c\x8e\xee\xef\x1c\x84\x31\x39\x58\x06\xfa\x9c\x1b\xe1\x46\x5b\x94\x01\x12\x4b\x61\x54\x37\x73\xdb\x71\x9d\x9d\x53\x46\x52\x3a\x7e\x32\x18\x6b\x2e\x64\x49\x79\xe3\x9c\x7c\x82\x05\x5a\x5a\x92\x25\xc5\x24\x1d\x8d\x4c\xc9\x06\xb5\x2a\xdc\xcb\x8f\x5c\x2d\xde\x6e\x96\xcb\xbf\x34\x88\xc9\xdf\x04\x58\x7e\x95\xff\x7a\x20\x6b\xd6\xfe\x5f\x1e\xe0\x0c\x12\x72\x30\xd7\x74\x73\xca\x14\x66\xdd\x86\x3b\xb0\x02\xe0\x05\x1a\xff\xaf\x05\xb0\xc6\xd9\x79\x37\xcc\x7a\x58\x55\xb4\x6f\x9b\x9b\xd7\x01\xad\x13\xb4\xcd\x67\x3d\x3d\xde\x87\xb4\x95\x60\xab\x5c\xf0\x42\x3d\x38\x67\xcd\xca\xa2\xbe\x60\x2c\x2b\xfa\xa9\xea\x2f\x59\x5a\xa8\xbe\xfa\x98\xd7\x5e\x5d\x43\x1b\xea\x17\x08\x77\x38\x78\xce\x99\x22\x82\x4e\x1e\x68\x66\x01\x9c\xdf\xe4\x7b\x8c\x1e\x28\x2f\x29\x3a\x7e\xa2\x9e\xe6\x4f\xd4\x68\x04\xbd\xd4\xcc\x32\xf2\xce\xcd\x58\x25\x18\x58\x64\x27\x40\x95\x3d\x06\xef\x4f\x85\x71\x54\x64\x24\x43\x9c\x32\x5c\x3a\x29\xa9\xd5\x26\x26\x33\xca\x2b\x32\xf4\xc9\x00\xa5\x74\xd6\x9a\x71\xb8\xe4\x2f\x68\x6a\xa7\x7d\xa9\x0f\x46\xbf\x43\x9a\x00\xdf\x34\xfb\x32\x80\x58\xd2\x83\x0d\x08\x17\x0a\x8c\x6f\x97\x9a\x15\xb9\x92\x2c\xfd\x50\x2e\x87\x43\x88\x16\x88\x6a\x7f\x8c\x52\x1f\xb3\x1b\xf1\xaf\x58\x0d\xa8\xe5\x57\x2c\x83\x15\xbb\xe9\x85\xe0\xdd\x73\xcf\xe8\xf8\x09\x7b\xca\x9f\xb0\xd1\x08\x9b\xb5\xa8\x87\xca\x12\x7f\xea\x34\x7f\xd1\x02\x56\x18\xa8\x34\x99\x6a\xf1\x9f\x1e\x6e\xc6\xe7\x36\x60\x4f\x97\xa9\x65\x63\x31\x6d\x07\x8d\x89\x79\xd7\x17\xc4\x70\x1d\x6a\xbb\x31\x22\xd6\xec\x5f\x7b\x33\x81\xbe\x46\xd5\xbf\xdd\xee\x8e\xfe\x16\xdb\xd5\x8a\x29\xc9\x67\x2f\x0e\x75\xfc\xbf\x47\x0f\x0c\x46\x50\x77\xd7\xc1\xbe\x7c\x14\xbc\x38\xdf\x5c\x1d\x96\xd8\xd6\x9d\xed\xed\xdf\x94\xe8\x14\x98\xfd\x67\x8d\x45\xb0\x6a\xde\xd0\x33\xd1\xea\x99\x59\x31\xbf\x77\xdd\x77\x08\x10\x09\x45\x63\x91\x46\xc7\xfc\x6b\x79\xd7\x71\xeb\x18\x47\xb5\xbd\x42\xb4\xe6\xbf\x35\x63\xed\x7e\xb1\xc6\x0c\xc1\xf2\x76\xbb\x43\xf8\x55\x75\x5a\x61\xa5\x5f\x6d\x85\x1c\xef\xa8\x97\xdd\x5d\x6f\x1b\x42\x3a\xdb\xc9\x78\xf1\x77\xdd\xc0\x17\x35\x03\x9e\x51\xbf\xa0\xad\xca\xf5\x69\x03\x1c\xbf\x60\x22\xda\x1d\xde\x03\xe9\xda\x13\x2b\x6f\x7b\x62\xad\x86\xc7\xe3\x3c\x69\xce\x21\xcf\x05\x44\xe4\xed\x92\x5e\xb6\x81\x13\x22\xc6\x33\xc2\xa8\x22\x8a\x4a\x4c\x8c\x03\x76\x1f\x77\x8c\xdb\x20\xde\x37\xdf\xab\x0e\x8a\xc6\xee\x25\xb9\x3e\x94\x41\x8e\xdd\x35\x67\xa2\x9a\xb3\x7c\x34\xaa\x2e\xfb\x2b\xbc\xde\xee\xb7\xf4\xae\xeb\x5b\xc3\x83\xaf\xbd\x46\x97\x46\xd2\x08\xca\x61\x0b\xff\x3d\x9d\xcd\x52\x99\xfd\x33\xb5\xe9\x49\x10\xd3\x71\x24\x1e\xa0\x56\xc5\x30\xd1\xf9\x0d\x93\xcb\x74\xfd\xdb\x6a\xae\x1c\xcc\xd8\x33\xd7\xb4\x80\x3b\xf4\x6a\xbb\x7d\x67\x9b\x88\x1c\xfc\x1f\x1b\xf6\x86\x8b\x0f\xaf\xb3\x40\x57\x45\x19\xe8\x9b\x0e\x87\x68\x96\x8b\x22\x5f\xb2\xf0\x63\x2a\x05\x0a\xc4\xb5\x4c\xd7\x8b\x10\xfe\x46\x7d\xf0\x90\xa4\xe9\x5b\x08\x6f\x78\xc3\x24\xc4\x1c\x1b\x87\x93\x47\xfd\xff\xf4\xab\xfc\xcf\x3e\x2f\xfa\x19\x5b\x4b\x36\x4b\x15\xcb\xc2\x9f\xc5\x0f\x05\xeb\xff\x27\x48\xcd\xa1\xaa\xff\xec\x9b\x8b\x68\x17\xdb\xf1\x67\x11\x90\x00\xfe\xbc\xcd\x15\x8b\xfa\x6a\xc1\x24\xd3\x95\xa4\xcb\x22\xef\xcf\x16\xa9\xb8\xd6\xd4\x6a\xdf\xde\x10\xf6\xaf\xd8\x22\xbd\xe1\xb9\x8c\xfa\x2f\x75\x4f\x44\xfe\xb1\x9f\x8b\x3e\x4b\x67\x8b\x3e\xd4\xff\xb3\xe0\x45\x5f\x8f\x84\x67\x4c\xb2\xac\xaf\x72\x88\x86\x96\xab\x7e\xda\xaf\x7b\xd1\xbf\xda\x56\x35\x22\x28\xcc\xb2\x6b\x68\xd6\x0c\x06\x87\xe0\xbe\xbb\x2e\x40\x59\xe8\x0f\x13\x93\xda\x5d\xa4\x97\x0b\xe2\x4e\x7a\x85\x06\x93\x4e\x0a\xf6\x2c\x5d\xef\xd3\x1a\xfe\x7c\x3b\xb7\xfd\x45\xff\x3f\xcf\xd2\xf5\x7f\xda\x41\x58\x4e\xbc\x0a\x96\xb9\xce\x97\xdb\x39\x5f\x2e\xfb\x5c\x4f\xcb\x3c\x97\xac\xbf\x01\xa7\xff\xa6\x2a\x4b\x8a\xa8\xea\xf2\x53\xd2\x38\x01\xc3\x0a\x32\xa3\x63\x92\x35\x7a\x3e\xed\xbe\x76\x35\xb6\x84\x84\xd3\x4d\x9b\xc4\x16\x70\x8c\xf1\xdd\xee\xc2\xe8\x07\xde\xf2\xdd\x0e\x81\x0b\x9d\xb1\x69\x37\xa7\xc1\xff\x37\x18\xf5\x47\x23\x9d\xd8\x83\xaa\x46\x39\x51\xa3\x1c\xfb\x6e\xfd\x0a\x17\xcc\x02\x97\x87\xec\x02\xfc\x6c\xce\xb6\x91\x2c\xf4\x58\xe6\xf4\x8c\xac\xe9\x19\x59\xd1\x33\x72\x43\xcf\xc8\x35\xbd\x4d\xb3\xec\x6d\x9e\xb1\xe8\x92\xa4\x59\xa6\xd7\xaa\x59\xab\xc0\xb7\x2b\x6b\x99\xc5\xa9\xe1\xb9\x2e\x41\x5b\x88\x7e\x04\xc3\x8f\x4b\xa4\x30\x29\x68\x66\x33\xd7\xca\x12\x80\xab\x0b\x4c\x52\xc4\x49\x81\x09\x33\xee\xab\x53\xf0\x91\x45\xe6\xa8\x20\x41\x9a\x65\x01\x26\x37\x08\x93\xa2\x24\xe6\xfe\x10\xda\x3f\xb7\x2f\xd0\xad\x53\x72\xcd\xc0\x97\x7a\xf4\xd1\x3d\x3d\xcf\x37\x42\x45\x9f\xf4\xab\xce\x6f\x5e\xdf\xb9\xd7\xc2\x7b\xd7\xb9\x8b\x56\xf6\xa2\xc3\x6b\xed\x47\xdf\x5d\xdf\x54\x85\x4b\xc8\x67\xbd\x4f\x18\x3e\x06\xba\xf0\xdc\xbd\xe9\x8a\x98\x99\x37\x1f\x3f\x55\xcc\xb7\xa9\xd1\xd8\x15\x72\x53\x5d\xa7\xd8\x49\x56\xb4\xe3\xb4\x5d\x4f\xa5\x3f\x41\xc7\x4f\xf8\xd3\x8a\x4b\x1d\x8d\x6c\xbc\x9a\x9c\xb2\x98\x83\x4b\x71\x23\x51\x7d\x9d\x51\x50\xe5\x10\x08\x2c\xa1\x51\x1e\xaa\x5c\x6f\xbb\xca\x6e\x69\x30\x2e\x4b\x64\x3b\x43\x34\xba\xdc\xeb\xfa\x97\x35\x49\x52\xea\xb7\x38\x35\x0d\x45\x2e\x0d\xd4\x79\x6c\x1f\xd2\xbb\x9a\x2f\xfd\xc9\xdc\x5f\x14\x22\x0e\x84\x21\x64\x96\xf0\x1f\x13\x51\x3b\x70\x57\x4f\xc5\x93\xd1\x48\x61\x86\xa4\x66\x79\x4a\x72\xc5\xae\xb9\xf8\x61\x9d\xa5\x8a\x45\x2b\xc2\x44\x66\x9f\x6f\x4c\xbc\x68\xdf\x69\xf8\x0a\x61\xf2\xbc\xe5\x7f\x03\xb1\x90\x67\x20\x63\xbe\x01\xbf\x20\x69\x01\xbd\xbc\xd0\x4f\x35\x34\x9a\xb4\xca\x4e\x4e\xa0\x6b\x4c\xf6\x64\x9a\xd7\x61\x2e\x7a\xfa\x4f\x87\x20\xf6\x3a\xf4\xfa\x49\x57\xf4\x7b\x72\x1d\x56\x7d\xa5\x37\xf4\x84\xcc\xe9\x15\x59\xd3\x2d\x81\x0a\x18\x61\xd6\xb7\xe0\xb5\xef\x48\xbf\x44\x98\x5c\xd7\xe2\xc5\x2b\x43\x8a\x2c\xac\x1b\x7f\x3d\xe3\x11\x23\xe6\x60\xb8\xd8\xae\x59\xa4\x4a\xcf\x90\x70\xdb\xcc\x2d\xf4\xe0\x0e\xe7\xbe\xac\x74\x61\x3a\xe3\x9e\x5a\xcc\xec\x9c\x6c\xe9\xca\xfa\x3c\x63\x42\xf1\x39\x67\x32\xc0\xbd\x55\x1d\x56\xc1\x57\xc1\x98\x22\x11\x66\xa9\x4a\xa9\x24\x6b\x24\x48\xb0\x81\x09\x08\x30\x8e\x90\xb0\xd7\x02\x10\x44\x0b\x3e\x02\xde\xc0\x44\x55\x4a\x18\x80\x43\x44\xdd\xc9\x8f\x8d\x58\x70\xf6\x72\xbc\xfa\x7a\x5a\x87\xe1\x71\xbb\x74\x20\x6b\x4e\xa0\xee\xa1\x34\xc0\x6a\x1d\xc0\xda\x37\x90\x0c\xf4\x9a\x3b\x45\xf8\x3b\xe5\x1c\x89\x98\x27\x75\xf8\x06\x4f\x6b\x60\x8d\x24\xb1\x21\xf0\x2d\xe2\x1b\x8c\xeb\x7e\x7d\xf2\xe4\xf3\x40\xa6\xd4\x9f\xde\xd5\x9f\x1c\xc4\xd7\x1f\xcf\x11\x6b\xba\x04\xb2\x86\xc1\x8a\x72\x43\x15\xf1\x39\x52\x4f\xc7\x8d\x11\x6a\x42\xc8\xa8\x2a\x28\x32\xf1\x56\xc4\xee\x61\x83\xde\x99\xc1\x20\xbe\xeb\x20\x53\xa7\x30\x53\x81\xf1\x33\x3a\x1e\x0e\xed\x9b\x5f\x21\xc9\xab\xbc\x79\x23\x6f\xde\x91\x77\x8e\xd8\x1d\xb3\x72\xd1\xe4\x09\xab\x15\x13\xbb\xdd\xc0\xf5\xc3\x75\xd0\xad\x8c\x89\x65\xec\xfa\x55\xad\x4d\x65\x23\x62\xbf\xc4\x12\xd0\x27\xaf\x91\x19\xd3\xd8\x5a\x0f\xda\x27\xc4\x2b\xbb\x1a\x38\x0f\xaa\x8e\x9d\x21\x7c\x5b\xbf\x7d\x8f\xf0\xed\x6c\x44\x27\x75\xca\x09\xc2\xb7\x63\x4a\xd1\xec\x88\x4e\xf0\x70\xb8\xf0\x8d\xc0\xae\xc3\x39\x97\x0c\x05\x66\x97\x65\x01\x59\x60\xe2\x32\xd0\xb1\x07\xab\xcf\x1d\x11\xda\x21\xd4\xdb\xdf\x76\x2e\x46\x90\xa6\xca\x8c\x7c\xd5\x90\x73\x46\x3e\xc8\xfa\x9a\xa4\x36\x34\x1f\xec\xcc\xc2\x84\xe3\x5e\xa7\x45\xc1\xb2\x7e\x30\xf2\xe5\x16\x1e\x5b\x05\x68\xd6\x70\x19\x4f\x06\xc2\x89\xa1\x34\xbb\x52\xf1\x19\x35\x5b\x5e\xe7\x2d\xcb\xb2\x57\x69\xa2\x3d\x6a\x47\x5e\xb3\xee\x12\x9c\x87\xf6\x89\x89\x11\x6c\x75\x72\xea\xd8\xc0\x4e\x49\xc7\x7a\x53\x34\x8c\xaf\x27\x0e\xb2\x2b\xfd\x44\x8e\xe8\x04\x43\xa8\x0a\x99\x00\x4a\xaa\x24\x6f\xae\x81\x56\xc4\x35\xab\x66\xc6\x33\xca\xcc\x9d\x5e\xbd\xb9\xed\x1d\x9f\xc6\x46\x6a\xcf\xf5\x07\x33\x19\xa7\xf6\xd7\xe9\x6e\x45\xf6\x9d\xc6\x2a\x69\x7a\xfe\x30\xa4\x9a\x69\xcd\xc2\x99\x6d\x11\xe0\x4c\x79\xad\x39\x05\xb3\x8c\x7a\xb8\x6c\xd9\xf2\xe2\x54\xcb\xb0\x47\xc1\xff\xfd\xbf\xfd\xff\xff\x7f\xfd\x60\xa4\xfc\xa8\x31\x9f\x75\xba\xd4\x8c\xa7\xec\x30\xc7\x1e\x2c\x41\xa8\x24\x3e\xdf\xf6\x67\x26\x1c\xed\xa6\x60\xfd\x79\xba\x2c\xb6\x7d\x2b\x5c\x4f\x8b\x3e\xbb\x81\x88\xed\xc5\xc6\x5c\xb6\xd5\xe0\xa3\x68\x1c\xe4\x9a\x43\xd1\x60\x1e\x90\x20\x9f\xcf\x83\x84\xb4\x42\x8c\xeb\x0d\x09\x8c\x72\x8b\x4e\x06\xdb\xa4\xfd\x0e\x9d\x9b\x56\x5c\x7f\xae\x98\x69\x1e\x5c\x9d\x90\x7e\xc1\xc5\x8c\x69\xb2\x3e\x5d\x4a\x96\x66\xdb\xfe\x22\x2d\xfa\xce\xdf\x47\xff\xab\x60\xa4\x6b\x1d\x05\x5f\x05\x60\xa9\xdd\xe1\x5e\xa8\xe1\x1b\xc8\xda\x2f\xf9\xf7\x90\x8d\xc0\x3a\x36\x6c\xe0\x17\xdf\x86\xb8\x0b\x8e\xf6\xc6\x84\xd0\x4f\x55\x0d\x8e\x0b\x80\x80\xeb\x8e\x69\xdf\xed\x90\x49\xa1\x71\x02\xb7\xed\x70\x4a\xbb\x0a\x23\x01\x01\x7a\x78\x09\x57\xc4\x8d\xb0\x34\x00\x76\xfe\x39\x5d\xd1\x9a\x9d\xc3\x24\xc6\x91\xba\x9e\xfb\x43\xc3\xb2\x61\x65\xa0\x7b\xd5\x0d\x81\xd3\x97\x96\x09\xc8\x24\xf2\xa7\xbc\x5e\xdf\x1c\xf3\x38\x4f\x42\xd7\x59\xcd\x95\x6b\x04\x6b\x91\x7f\xae\x4f\x9e\xca\x83\x01\xd1\xa0\x12\xf9\x46\x30\x4e\xea\xa1\x2c\x9e\x1e\xf0\x3a\xf2\xe3\xbe\x02\x16\x48\xd6\xf7\x54\x71\xd7\xdd\x71\x82\x1a\x72\x9f\x76\x9f\xad\x1d\xa0\xee\x7a\x2f\xad\x3a\x6f\xe9\xae\x14\xe2\x01\x89\xea\x78\x67\x10\x3d\xcc\x93\x90\xe4\x1a\x43\xe5\x82\xb0\x30\x9f\xcf\xf5\xe3\x7c\x4e\x18\xa0\x7b\xaa\xe0\x87\xb0\x2f\xb4\xea\x35\x86\xd4\x0f\xd0\xd1\x14\x4d\xa3\x9f\xb3\xd1\xcf\xe1\xf4\xe7\xec\xfe\xee\xe7\xec\x3e\x3c\x8d\x30\x9a\x46\x2c\x3e\x1a\x25\xf0\x32\xc5\x3f\x17\xf7\x51\xfc\xf3\xfa\xf6\x4d\x99\xdc\xc7\x0f\xae\xf9\xa6\x81\x72\x69\x00\x91\x5e\x56\x45\x50\x69\x5b\xe8\xe3\xd2\x2a\x03\x31\x8a\xd8\x28\x08\xbc\xd0\x0f\xe8\xe7\x0c\xc7\xe4\x32\xd1\xbf\x0f\xae\x49\x70\x6f\x72\xef\x38\xc0\x75\x06\xd1\xd4\xcc\xd0\xc0\x86\x04\xcd\x91\x00\x75\x4a\x49\x91\xdc\xed\xc6\x78\x04\x21\x01\x5e\x2e\xf3\x54\xe9\xc3\x7e\x8c\xef\x0b\xa3\xb8\x31\x1c\xca\x07\x28\x07\x0e\x72\x72\xc0\x37\x14\x07\x77\x95\x3c\x66\x9f\x89\x4e\x91\x94\x3c\x14\xa9\xc8\x8d\x2b\x63\xca\x43\x51\xd0\x09\x3b\x7a\x4c\x78\x1c\xfc\xb7\xff\xa3\x08\x12\xca\xe3\xe0\xff\xfa\x3f\xe1\x21\xdc\x14\x94\x87\x2b\x3e\x93\x2e\x7b\x38\x1e\x4f\x88\x4e\xaa\x9c\x21\xeb\x0c\x85\x2e\x13\x24\x54\x7f\xaa\x52\x0b\x36\xd3\x7f\xe9\x84\x3d\xbc\xaf\xf3\x40\x31\xb1\x51\x0c\xaa\x14\xfa\x2f\x7d\x3c\xbe\xcf\x43\xfd\x65\x91\x6f\x24\xe5\xe1\x02\xfe\x98\xe4\x15\xe1\x61\x96\x6e\x29\x0f\x33\x7a\xfc\xe8\x3e\x0f\x17\xc4\xf8\x23\xa5\x3c\xfc\x08\x7f\xe8\x37\xf7\x79\x98\x11\xeb\x1e\x95\xf2\xf0\x8a\x3e\x1c\x87\x8f\x1e\x7e\xf3\xb5\x4d\xdf\xb2\x54\x57\xb8\x85\x3f\xf4\xe1\xe3\xaf\xc3\x63\xf3\xa9\x56\x08\xe7\x9f\x81\x2e\x63\x52\x0f\xa7\xf2\x37\x7e\xb8\x44\x9d\x99\xde\x96\x98\x3e\x83\x23\xc1\xf8\x7a\x08\x79\xf1\x92\x0b\x0e\xe4\x6b\x77\xc0\xc2\x53\x87\xce\xd2\xfe\x1c\x72\xf6\xad\x61\x3c\xee\xa9\x70\x96\x2f\x73\xf1\x36\x57\xa0\x3c\x05\x6a\x2a\xb3\x7c\xb5\x4e\x67\x8a\x0e\x26\x44\x59\x6f\x70\xe7\x9b\x2b\xdf\x15\xb5\xf9\x54\xb0\x75\xaa\x69\x96\xfd\x2f\x37\x4c\x5e\xe5\x05\x03\x49\x51\x55\x1f\xd4\x6d\xb3\xbd\x60\x33\xbe\x4a\x97\x2f\xf8\x35\x57\x05\x1d\x13\xe5\x2f\x6e\xfb\x2b\xee\x39\x4f\x06\x71\x42\x38\xad\x5c\xf2\xda\x59\x40\xe3\x01\xad\x98\xcc\xe1\xb0\x35\xa2\xdd\x0e\x22\x73\xee\x76\x7b\x23\x0d\x56\x01\xf8\x55\x76\x7e\x0c\xf4\x5e\x4e\x09\xb0\x12\x39\x45\xf9\x6e\xc7\x6c\xe0\x88\xfa\xe4\x26\xad\x4a\xf0\x6d\x4a\x6b\xcf\x01\xd3\x20\x0a\xa2\x00\x42\x2e\x05\x95\x57\x84\x3c\xe4\x62\xb6\xdc\x64\xac\x00\x87\x1b\xd3\xdc\x45\x00\x0a\x03\x1c\x8f\x13\xe7\x5a\x22\xaf\x54\xbb\xfd\x0a\x8f\xa3\x49\x2f\xa7\xc1\x38\xd0\x1b\x8a\xa5\x0a\x19\x59\x69\xfa\x09\x8d\x89\x3a\x62\x18\x8f\x72\xe3\x79\x3b\xa5\xd0\x6e\x35\xf3\xd3\xa0\x1f\x8c\xd0\x92\x0a\x50\x94\x66\xd3\x65\xb4\x1c\x05\x45\x80\x23\x6e\xdc\x3c\xf5\xac\xec\x27\x1d\xe5\xa3\x02\x97\x24\xa7\xc2\x09\x43\x4c\x1b\x4a\x6e\xc4\x0c\xe5\xe0\x35\xf5\xc1\xc3\xc7\x5f\x63\x62\x43\x47\x05\xdb\x00\x13\x6e\xbf\xfc\xe1\xe1\xe3\xaf\x89\x09\x3d\x05\x4e\x0f\x75\xba\xde\x54\x05\xb1\x81\xa9\x82\x85\x4d\x35\x9b\xb0\x20\x55\xec\xaa\x60\x15\xe0\x03\x30\xa4\xd7\xaa\x13\xec\x76\xbb\xc1\xde\x2a\xb2\xa7\x13\xf6\x10\x43\xc7\x73\x07\x5d\xa4\x0a\x96\x05\x5e\xfd\x0f\xd4\x86\x4d\xbf\xea\x04\xd2\x8c\xb9\x05\x78\xd8\x76\xbe\xc2\x45\x90\xa9\x7a\x0b\x08\x60\x2f\x93\xab\xc6\x6f\x05\x09\xea\x97\x80\x04\xa2\x08\x6c\x9c\x9b\x1a\x2a\xfc\x86\x47\xcd\x26\x1e\x4c\xd8\xc3\x51\xa3\xbe\x07\x13\xf6\x98\xc8\xca\x9f\x45\x6d\xc1\x73\x78\xdb\x4c\xef\xf8\x16\x8d\x89\xa0\xec\x19\x9d\x4c\x3d\x87\xc1\x0c\x47\x7e\x44\x23\x92\x52\x39\xd5\x68\xfd\x25\xff\xc4\x32\x24\x71\x24\x7a\x1c\x59\x8c\xe3\x9d\x18\xa9\x3e\x31\x3a\x66\x8e\xa4\xd6\x40\xd4\xed\x5d\x04\x44\x32\x7d\x56\x25\xf8\xf1\x92\xee\x4f\xc6\xf7\xef\xab\xd1\x84\x1d\x7d\x53\x45\x3c\xf4\xfa\x26\xf1\x03\xc8\x80\xab\xfe\x28\xb0\x8c\xd7\x33\xf5\x87\xc7\x63\xd2\x31\x31\x07\xe6\xa4\x73\x3a\x26\x18\x78\x96\x0f\x8c\xad\xed\x87\xe2\x9d\xf8\x71\x91\x2f\x99\x75\xc8\x0f\x31\x26\xaa\x33\xed\xe7\x70\x3c\x32\xc7\x5a\xe7\x8c\x08\x33\x23\x1e\x08\x6a\x5a\xc4\xea\x20\xc8\xa6\x77\xac\x60\x1c\x8c\x90\xbf\x6b\xfd\x35\x0b\x22\x00\x41\xc3\x76\x59\x24\x5a\x31\x4d\xf1\x18\x08\xae\x8e\x91\x6f\x04\x57\x20\x4f\xc5\x15\xb8\xb5\x76\xcd\x34\x08\xa2\xa0\x5f\x7b\x12\xb7\x0e\xc2\xc7\xa4\x42\x2f\x5e\x2d\x9a\x14\x33\x81\xc5\x98\x27\x30\x69\xd6\x27\x4d\x86\x20\xc0\x91\x7b\xec\x07\x6d\x3e\xa7\x71\xc2\xd5\x67\x1a\x33\x68\x7c\xcf\x57\x0b\xfb\xec\x59\x56\x1d\x62\xce\x39\x10\x7b\x66\xa3\x72\x01\x54\xd5\xe0\xec\xd8\x03\x88\x12\xa7\x10\x33\xae\xa4\x31\x01\x54\x05\x09\x0f\x1f\xb3\xaf\xf1\x1f\x8e\x1f\x11\x8b\xa7\x20\xf1\x31\x7b\x84\x35\x74\xd9\xe5\x80\x34\x8d\x6c\x74\x9a\xbf\x4e\xfa\x03\xfe\xc3\x84\x3d\x24\xfe\x2e\x8e\x94\x75\xc0\x0b\x5f\xbc\xcd\x0c\x1f\x1e\xdb\x0f\xe5\xe7\x08\x4d\x13\x65\xcb\x73\x22\xf3\x19\x17\x32\xeb\x3c\x5f\xea\x73\xd2\x30\xb3\x4b\x8d\xe4\x71\x97\xd3\x11\xf8\xd4\x1d\x4f\xa8\x57\xc5\x53\x95\xec\x1f\x1b\x56\xa8\x13\xc1\x57\xb0\xd0\x2f\x65\xda\x30\x9d\xad\x8d\xf4\x74\xb3\x3d\x16\x4a\x66\x62\xca\x75\x19\x1c\x6b\x56\x37\x6e\x3a\x56\x8a\xc7\x49\x82\x80\xd8\x64\x55\x5f\xdb\x3e\x46\xf6\xaf\xed\xcd\xfd\xad\xaf\xb6\xac\x5b\x37\x07\x9a\x33\xfe\x86\xf8\x62\x12\x43\x3c\xc9\x7d\x97\x33\xfb\xbe\x66\x60\xda\xea\xba\x0e\x7b\x23\x1d\xa8\x98\x25\x7b\x9d\x84\x71\xef\x19\xc8\xd9\xb5\x68\x66\x2d\x54\xbe\xf6\x73\xda\xa9\x9e\xa5\x62\xc6\x96\xad\x99\x06\xbd\xac\x12\xf9\xb6\x84\x9f\x23\x1d\x0d\xa4\x10\x13\x53\x33\x30\xca\x78\x2c\x7b\x0e\x42\xac\x82\xa9\x80\x74\x28\x05\x73\x06\xf4\xbe\x29\xf2\xfc\xd5\xc9\xdb\x3f\x9d\x9e\x9f\x5e\x74\x66\xbd\xf0\x73\x42\xa5\x9d\xd9\xc4\x5e\xb6\x43\x6d\x17\x7e\xdb\xa7\x52\x76\x66\xca\xbd\x3c\xe0\x8a\x3c\x55\x9f\x1b\x53\xea\xd7\x7b\xb5\xe1\xcb\xec\xdd\x32\xfb\x2b\x88\xcb\x3a\xf3\xbf\xf5\xb2\xcf\xee\xac\x39\xf7\x6b\xbe\x66\xea\x05\x63\xeb\xce\x8c\x59\x33\xdf\x5f\xd8\xf6\x8e\xf6\x97\x5e\x66\x5e\xdc\x3d\xb6\xb3\x46\x5e\xb3\xa5\xba\x17\xb6\x91\xf1\x7b\x99\xaf\x78\xd1\xbd\x60\x1b\x2f\xe7\x07\xb6\x7d\x2d\xee\xa8\xf5\x7b\x2f\xef\x32\xcf\x3f\x6c\xd6\x76\x4d\xf2\xee\xd5\x5b\x78\xf9\x57\x4c\x5e\xb3\x83\x33\xf6\x63\x3b\xe7\x5b\x56\x28\x96\x75\xe6\x7d\xe1\xe5\x15\x9a\xbe\x5b\xf2\x5f\xd8\x1d\xbd\xbe\xf4\xf2\x1b\xf1\xd8\x8f\x5c\x2d\xf2\x4d\x77\xee\x1f\xbc\xdc\xeb\x8d\x64\x27\xe0\x20\xa9\x33\xeb\xa9\x97\xb5\xb8\x03\x1c\xde\x7b\xf9\x54\xfa\xa1\x7b\x1d\xfe\xe8\xfc\x4a\x89\x7d\x1c\x05\x72\x5c\xca\xca\x86\xcc\xa0\xde\x72\xb5\xea\x7c\x87\x62\xfd\xa0\xa9\x1d\xfb\x22\x55\x6c\xb7\x63\xfb\x9e\x41\xf1\x70\xb8\xe7\x84\xb6\x34\x42\x98\x96\x4e\xa8\xd7\x23\xe2\x5e\x34\x10\xf0\x5c\x50\x55\x92\xb6\x8f\x25\x23\xcf\xb8\xc3\xad\xf6\xbe\xa6\x6c\xe3\xd6\xa7\xcf\x9c\x0b\x35\x92\x53\x59\x19\xd9\xa7\x34\x4e\x7a\x4a\x6e\xe1\x5e\xd4\x73\xfb\xa4\x76\x3b\x75\x74\xd4\x7f\x36\x06\xe7\xc3\xa2\x65\x8c\xf6\x04\xa7\x36\x44\xb3\xd3\x88\xaa\x9c\x43\x73\x7a\xcb\x34\xa5\x11\xb1\xb2\x9c\x73\x91\x2e\x97\x5b\xf0\x25\x2d\x86\x43\x2b\x58\x07\xd1\x49\x1e\x9a\x6e\x81\x03\x62\xe3\xca\x14\x57\xf9\x35\x37\x62\xa9\x17\x1e\x42\x6d\x55\xd0\xbf\xb4\x6c\xf9\x0b\xb3\x32\x2e\x06\x67\x36\xe8\x88\xb6\xe5\x66\xa0\x32\xca\x68\xe5\xc9\x3b\x45\x0d\xcd\x51\x4f\x3e\xd7\x6b\x4b\xa4\x5b\x2e\x93\xe2\xc4\xc5\xc2\x8c\x93\x5e\x23\xa6\x32\xc3\x2c\x16\xc9\x70\xc8\x21\xb6\x0d\x1e\x0e\xbf\xd0\x11\x40\x2c\x12\x12\xc0\x14\x06\x78\x6a\x79\xca\xdb\x0f\x6c\x1b\x15\x48\x11\x5d\x93\xa5\x06\xc3\x00\xd7\x26\x26\x56\x05\xb4\xc4\x91\x2d\x3a\x00\xa1\xa3\x29\x5e\x05\x21\x2f\x90\xad\xdf\x55\xa5\xff\x55\x24\x6b\x2d\x8e\xda\xf8\xe2\x28\x70\x68\xbd\x6f\x7b\x32\x18\x20\xf0\xf5\xaa\x16\x4c\x80\xe7\x56\xbd\xda\x10\x45\xde\xac\xd8\x01\x73\x13\x93\xbd\xdb\x27\xac\xa9\xa1\xf3\x9b\xad\xd4\xf8\x92\xaf\xfa\x39\xeb\x74\x90\xef\xee\x1e\x6a\xad\x10\x24\x77\x3b\x24\xa9\x45\xd6\x18\x7b\x44\x08\xb8\x22\xf5\x6f\x3b\x8c\x9b\xf3\x25\xb2\x0a\x75\x0c\x7b\x80\x9c\xeb\xd6\x1b\xf7\x1c\x75\x6e\x80\xcd\x3b\xb3\x2f\x2b\x79\x7b\xcf\x18\xf7\x4c\x39\xb2\xaa\x6d\x38\x42\x55\xc0\x7e\xd2\x88\xea\x29\xa7\x0a\xec\x0e\x65\x8b\xea\x33\xae\xda\x31\xcc\x27\x4a\x49\x81\xcb\x25\x42\x82\xba\x10\xee\xe0\x1c\x10\x62\xda\xdb\x3d\x0a\xbe\x5a\xc1\xee\xcb\x00\xb0\xfb\xd9\x23\x3c\x89\xec\x0a\x48\xe1\xd9\xb4\x83\xa9\xe7\xed\x32\xbd\x62\xcb\x48\x13\xf2\x42\x45\x4d\x7d\xe9\xc9\x90\xc7\xe3\xc4\x6d\xd6\x78\x52\x09\xf5\xf5\x73\x49\x94\xdc\x16\x51\x9c\x90\x7c\xad\x7f\x2a\x25\x82\x9c\xde\xea\xae\x46\x05\x82\xd0\xab\x32\xff\x18\x15\x68\x82\x89\xf9\x1c\x15\xe8\x18\x97\xe4\x0e\x5c\x87\xf2\x5f\x61\x01\x96\xf7\xbc\x45\xcc\xf7\x61\xa8\xd8\x4f\x32\x1e\xb4\x65\x37\x07\xf5\x27\x26\x9c\x01\x43\x51\x5d\xc5\xb0\x4f\x6c\xb6\x51\x5c\x5c\x87\xf6\x8a\xe8\x49\xfa\x04\x6b\x70\xd1\xf5\xd0\x09\x11\xc3\x21\xe2\xf4\x78\x98\xc7\xe3\x64\x2a\x2c\xf2\x8b\xec\x1b\x34\xb3\xdb\x21\xc4\xa9\xa8\xf1\x22\x37\x38\x42\x60\x32\xc6\x91\x81\x50\x40\xc6\x9c\xba\x2f\x24\x8f\x27\x49\xd3\x00\xb5\xcf\x5d\x80\x44\x88\xfe\x0f\x3e\x85\x62\xd3\x2c\xb1\x5a\xf7\x09\x26\xfa\xd5\xc6\x4f\x1c\x9b\x60\x85\x93\x88\xd3\xdc\xe8\xcb\x9b\x10\x83\x8f\x5c\xf4\xc0\x34\x84\xe5\x1f\x8d\x2a\x57\x17\xf1\x24\x21\xd6\xee\xad\x34\x99\xbf\x8e\xea\x5c\x82\x42\x86\x9c\x6a\x0e\x7b\x96\x0b\xc5\xc5\x86\x99\x6c\xdf\x44\x39\x4d\xc3\x7c\xad\x29\xfb\x35\xc2\x24\x0d\x35\x7c\x98\x97\x3a\xab\x8b\x5e\x08\xb2\x49\xc4\x29\xe2\xd4\x64\xc4\xde\xf5\x32\x8f\xb9\xe7\x27\x69\xb7\x7b\x3c\xa0\x54\x8f\x6a\x38\x3c\xb6\x4f\x18\xdf\xa6\x74\x5c\x55\x5b\xf2\x39\x7a\x48\x5d\x26\x34\xe0\xbb\x9d\xee\xe7\x33\x0e\xef\xfa\xf1\x29\x8f\x1f\x42\x29\x33\x14\x18\x86\xb5\x20\xe0\x73\xf4\xb8\x2a\x6b\xbf\x3f\xd5\x10\x5e\xe7\xe6\xc6\xaa\x37\xaf\x4b\x70\x3f\xeb\x71\x23\xeb\x71\x42\xec\x3c\x68\x84\x9f\x63\x57\x28\x3e\x86\xfa\x3f\x33\x43\x65\x4e\x95\x73\x24\x93\xfa\x28\x88\xc6\x8f\x09\x4b\x88\xa0\xe3\xea\x28\x95\x94\x53\x70\xaa\xfe\x35\xc0\x80\x85\xe8\xbc\xde\xa8\xd5\xa2\x8e\x93\xa9\x4e\xb6\x4e\x7a\x89\x33\x71\x2c\x51\x9c\x93\x22\x81\x60\x26\x80\x52\x1a\x9e\x84\x1c\xac\x99\x91\x55\x20\xe5\xb0\xb1\xed\xbd\x1e\x64\x3c\x26\xc7\x84\x3c\x4c\x30\x89\x1f\x11\x8b\x9c\x43\x43\x84\x24\x3d\x0b\x82\xd5\xdd\x9d\x08\x35\xaa\x41\x98\xc4\xc7\xa0\x47\x0c\x86\x0e\x7b\x3c\x65\x75\x1e\x04\x57\x79\xbe\x64\xa9\xaf\x38\x30\x1c\x32\x40\x99\x06\x46\x76\x3b\x69\x1b\x39\xb6\x8d\xc4\xc7\xc4\x35\x62\xbf\x3c\xac\xbe\x18\x03\x4e\x3f\x26\x46\xe6\xd3\x60\x70\x89\x78\x04\xce\x7b\x1a\xbe\xa0\x6b\xd1\x92\xf2\xa8\x03\xba\x1f\x8f\x79\xaa\x3c\x19\x76\xa4\x48\x4b\xc1\x86\x5b\x93\x1b\xe3\x70\xd2\xd1\x6f\x3d\x49\x65\x2c\x62\x9e\x24\xe5\xfe\x19\xbe\xe8\x3a\x1b\x3d\x8f\x6c\x1f\xd8\x16\x24\x74\x82\x7d\x04\x16\x8a\x68\x08\xca\x2d\x3f\x47\x52\x0d\x4e\x86\x61\x32\xf1\xde\x73\xa1\x98\x50\x64\x49\x33\x04\x6a\xc0\x56\xc1\x06\xfc\xd7\x59\x2a\x55\x53\x71\x4b\x5a\xbf\x1a\xdf\x6c\x4b\x8c\xc9\x60\xb9\xdb\x71\xfd\xe4\x9b\x31\x34\x49\xe2\x25\xd6\x35\x1d\x72\x23\xd6\xa5\x07\xa2\xd7\xf2\xae\xfa\xf0\xe1\x63\xac\x6b\xf8\xdc\x1f\x7e\xee\x0d\x3f\xf5\x86\x5f\xd8\xab\xd6\xb9\xcc\x57\x88\x1d\x8c\xfe\xc2\x50\x75\x52\xc2\x29\xed\xce\x38\xeb\x27\x6d\x83\xa7\x3e\xb4\x17\xf6\x14\x9f\xe1\x0e\x15\x4d\xf6\xcf\xc0\xb8\xaf\x10\xae\x2a\x78\x07\x17\x4a\x25\x5a\x12\xa0\x26\x25\x71\x43\x8f\x04\x71\x03\x8f\x72\xab\x01\x57\x44\x29\xb1\x83\x8e\x8a\xd2\x90\xb8\x0b\xba\x84\x71\x81\x81\x65\x1d\x4d\x05\x2d\xf0\x74\x61\x46\xd0\x39\x17\x25\xc6\xd1\xa2\xb4\xf1\xd3\x7f\x67\x60\xba\x19\x98\xf5\x6f\x64\x60\xe6\x07\x19\x18\xb2\xba\x5b\xb8\xb9\xe4\x85\x62\xe0\x23\x22\x4e\x0e\x78\x52\x7e\x63\xb3\x7c\xc6\x93\x67\xb3\xba\xca\xc5\x65\x07\x11\x16\x3a\xad\x67\x93\x17\xc8\xe4\x0e\x91\x62\x67\xbb\xb5\xae\x8d\x9e\x97\x56\x9b\xde\xe4\x38\x47\x04\xd5\xc7\x58\x35\x54\xa4\x00\x2a\x5a\xc5\x3d\xf5\xbc\x66\x7f\x94\xe4\xd7\xd7\x4c\xfe\x53\x8b\xa4\xdb\xf5\x17\xa7\xd7\x6a\xb4\xd3\x8d\x64\x35\x53\x86\x9c\xb7\x07\xf0\x1a\xf8\x0b\xec\x24\x98\xd5\x62\xde\xb4\x58\x53\x16\x5e\x82\x92\x10\xcb\xde\xe6\x46\x05\xb5\x00\x83\x83\xbd\x54\x7a\x5b\x3a\xf6\xb5\xe3\xab\xee\xac\x3b\x58\x80\x81\xea\xce\x03\x8a\xaa\x2b\x4c\x24\xec\xf1\x6b\x72\xd5\x01\x27\x9f\x8f\xfd\xe5\x76\x38\x91\x9a\xb3\x86\xf8\x48\x82\x02\x62\xaf\x76\x7b\xb5\xc3\xad\x53\xbe\xbd\x8b\x1a\xd6\xbc\x09\x32\x0c\xc5\x3e\xfc\xb1\xe1\x50\x3c\xab\x0c\xa0\xc1\xa6\xd8\x86\x21\x70\xf4\xac\xc6\xa3\xe0\xb7\xc1\xd2\x3c\xac\x2c\xcb\x5e\x17\xe5\xaf\xa6\x81\xe1\xea\x35\xe1\x2f\x72\xe5\x59\x8d\x47\xc1\x9e\x71\xb3\xc9\xe2\xac\x33\x02\x5c\x92\xed\x3e\x8f\x82\xb6\xb4\xe1\x41\xbc\x19\xb4\xa1\x02\x7f\x02\x2c\xc4\x9e\xb5\xa8\x55\x0b\x1c\x35\xfd\x10\xfa\xe6\xa2\x32\xc1\x5f\x24\x88\x50\xe0\x91\x10\x3c\x0f\x52\xf0\x3c\x58\xe3\x14\x6c\xc1\x12\x88\x3f\x4f\x21\xbb\xe7\xeb\x4b\x5b\x15\xbb\xdd\x6e\xc0\x11\xab\x83\x88\xf4\xda\x56\xe5\xb5\xbf\x45\x83\x77\xad\x92\xda\x16\xdd\x96\xc4\x57\xcd\x34\xce\xbd\x6f\x3d\x5d\xb1\x7c\x38\xe4\xc6\x49\xea\x17\x0d\x28\xaf\xc4\x2a\xc3\x61\x23\x80\x8f\x98\x82\xa2\x59\x1e\x5a\x8f\x4c\xfa\xe5\x12\xe5\xb8\xbe\x9b\x6b\xe9\x58\x57\x8b\x60\xe4\x3c\xa0\x14\x1a\xab\xa4\x63\x50\x36\xca\x12\x7c\xc6\x9e\xfa\x35\xc4\xef\x68\xc0\xb6\x3b\x0d\x06\x13\x5f\x65\xfb\xb7\xe0\x99\x6a\x5a\xef\xf4\xc0\xd8\xe5\x21\x86\xb3\x02\x31\x72\x8d\x94\x8b\x8d\x51\x5e\xd3\x2a\x58\x44\x67\xd4\xb9\x17\xac\x98\x49\xbe\x56\xb9\x3c\x10\x96\xce\xcb\xd0\x41\xe5\xd4\x31\x77\x5a\x51\x42\xf6\x91\xa3\xc4\xb7\xb0\x40\x9f\x69\xc5\xc5\xdf\x23\xca\xa8\xe3\x7e\xfa\x9d\xf4\x38\x40\x7a\xbc\xfb\x8d\xa4\xc7\xa7\x2f\x90\x9d\x9e\xfb\x04\xe1\xd4\x23\x42\x40\x54\x47\xea\xd0\x62\xbd\x6a\xc6\x72\x23\xa7\x48\x70\x35\x9d\xa0\x65\xf3\xfb\xd9\xf2\xa5\x67\x0b\x12\x98\x6c\xe8\xb2\x52\x61\xdf\x18\x50\xab\x93\xcc\xfc\xcd\xe8\xc6\xca\x1d\x33\xaa\xe2\x59\xd2\xeb\x98\xce\xac\xe2\xe9\xa6\x32\x9e\x25\x34\x8b\x38\xca\xf0\x94\xa1\x8c\x48\xd2\x8c\x23\x45\xde\xa1\x9c\xc4\xb3\x04\xe3\xa8\xcb\x88\x29\xb3\x2e\x57\xbd\x08\x58\xc3\x61\x16\xb2\x1b\x26\xb7\x77\x33\x7e\xb4\xc1\xf8\x69\xa0\x8f\x5d\x53\xb5\x40\x3c\xa1\x19\x2e\xeb\xcd\x93\x1e\xd8\x3c\x1b\x70\x0b\x61\x37\x4f\x41\x97\xf5\xe6\x29\x0c\x18\x2c\x1b\x9b\x27\xb5\x9b\x27\x6d\x6d\x1e\x59\x22\x46\x6e\x4b\xd2\xc4\x59\x38\xba\x35\xdc\xce\x05\x0d\x2e\x2f\xab\xab\xdf\xcb\xcb\xa0\xde\x0f\x67\xed\x88\x69\x97\x97\xd5\x05\xe9\xe5\x25\xa5\xf4\xc2\x37\xb1\xf0\x10\xd6\xef\x48\xac\x13\x89\x21\x5f\x7c\x02\x96\x1b\x20\xdc\xa4\x4e\x0d\x67\x52\x1b\xcf\x20\x7b\x39\xd3\x70\x0f\x3d\xe0\xad\x08\x7b\x03\x16\x8b\xa4\xe7\x8c\xff\x44\x75\x98\xda\x1b\xc1\xae\x98\x89\xf9\x70\xf8\xbd\xb9\x5d\xe1\x35\x40\x9a\x8b\xbe\x93\x0e\x2a\xef\xe4\x7f\x02\x2a\xef\xf9\xef\xa0\xf9\x45\xa0\x09\x30\x78\x34\xc1\x64\x82\x35\x5c\x36\x1d\xb2\x77\x05\xea\xf5\xb0\xc3\x80\x52\x59\xe2\xce\x28\x67\x9e\x6b\x0e\x4d\x11\xb1\x58\x9a\x08\x67\x1d\x66\x0e\xd5\xb2\x9e\x68\xb2\x5a\x78\x72\xcc\x0f\x1e\xb2\xad\x83\x91\xd9\x5b\x6f\xdf\xad\xb5\x4d\xaa\xc0\x09\x12\xea\x7a\xde\xdb\x8b\xb7\xdc\xe3\x43\xcd\x19\x7e\x5b\xa4\x73\x76\xce\x94\x15\x23\x97\x2e\x84\x41\xd7\x68\xbd\x6d\x5c\x7a\xae\xea\x3f\x60\x52\x18\x21\x6b\x1e\xda\xda\x68\xf5\xd4\x0c\x07\xe4\x07\x6a\xd6\x24\xb1\x2c\x41\x5f\x37\x6d\x6e\xf0\x7e\x55\xda\x96\x21\xb5\xcb\x89\x25\x1d\x3f\x59\x3e\x75\x05\x9e\x2c\x47\x23\x6c\x43\x72\xa4\xf1\x32\x21\x33\xaa\xc9\xf9\x8d\xa1\xdf\x4d\xcc\xd3\x99\x06\xe7\x4d\x93\xfe\xbf\xb5\x74\xff\x26\x71\xc6\x62\x50\x49\x46\x9f\x7b\x89\x24\xc5\x64\x41\x65\x93\x19\xb1\x4e\x3a\x22\xd9\xd3\x19\xa9\xf1\x3a\xfa\x1e\x65\x24\x75\xd8\x8c\x54\xa3\xf1\xee\x82\x17\x24\xc7\xee\xd6\xc0\x1f\xdd\x06\x08\x78\xa3\xd3\xbc\x97\x0e\x32\x5c\x6f\x7a\x8e\x26\xf8\xb6\x99\x49\xba\x3a\x19\xd5\xdd\x71\x80\x5d\x00\x62\xfb\xbb\x0f\xc9\x35\x5e\x78\xf1\x9b\xf8\x16\x83\x3a\x6a\x96\xe0\x80\xcb\x31\xfb\xf5\xef\x07\x43\x2d\x3b\x1d\x11\x24\x89\x22\xc0\x71\x19\x19\x3e\xf1\xa4\xe4\x6f\x1b\x5e\x0c\x00\xd9\x74\xd9\x42\xf9\x24\x68\xfa\x3b\x09\xfa\xc5\x24\x28\xf8\x48\x48\x2b\x12\xd4\x78\xf6\x7c\x52\x27\x99\xf9\x5b\x52\xab\xf6\xd2\xcb\xe3\xa5\x06\xa5\x84\x6a\xfe\x0d\x1e\x7d\x72\x4e\x1c\xc0\xd5\xc5\x70\x68\xab\x86\x1b\xd5\x74\xef\xbe\x34\x6d\xe0\xea\xca\x50\xad\x85\xab\x73\x00\xe9\xd7\x1d\x67\xf5\xeb\xff\xd7\x9e\xd5\xe4\x0d\xbd\xbd\x66\x2a\xea\xd2\xf6\x84\xcb\xd4\xa0\x80\x55\xf4\xae\xa2\x76\x3b\xe6\xee\x3e\x5a\xbd\x00\x35\x8f\xce\x2f\x48\x61\x17\x4e\xd2\x5c\xcd\x31\xc0\x21\x7f\xd2\x38\xa4\xba\x48\x51\x18\x63\x73\x89\xde\x29\xfe\xb1\x68\xcf\xc8\x4b\x24\xae\x5c\x2f\x84\xb3\x05\x5f\x66\x92\x09\x8d\x1b\x7c\xc3\xbe\xdc\x06\x0c\x56\x4c\x28\x67\xbd\xd6\x68\xd7\x5e\xda\x28\xdc\x6b\x55\x03\x38\xf5\x17\x24\x49\x4a\xaa\x02\xa0\x4e\x9e\xd7\xc7\xc3\x5a\xe6\x9f\xb6\x65\xd5\xde\xc0\x33\x24\xb4\x8e\x8e\x1a\x4d\x17\xb4\x4a\xb0\x6e\x90\x6c\x3f\x60\xdc\xf5\xf1\xe6\xa5\x96\x87\x59\x9c\x58\x25\x7a\x19\xf6\x26\x79\xaa\xbf\xb8\x73\xb4\x24\xf9\x47\x01\x5e\x25\x3b\xd0\xe2\x7b\x36\x5f\x6a\x88\xb2\x59\xea\x65\xc0\x25\x39\x24\x33\x89\x3a\x05\x44\xae\xa6\xc3\x92\x16\x6f\x85\xc1\x65\xc4\xdd\xf5\x80\xab\xff\x46\x91\xa2\x05\xa0\x0d\x9f\x63\x85\x4a\xa5\x2a\x7e\xe4\x6a\x81\x82\xcb\x00\x4f\x5d\x35\x45\x75\x74\x47\x8d\xa4\xba\x66\x62\x4e\x4e\x08\x57\x55\x9f\x4d\x2f\x9b\x86\xc5\xb1\x4a\x60\xdb\xff\x72\xe0\x96\xc4\x1d\x0f\x95\x68\x1d\xf0\xe9\x6d\xe9\xf9\xf5\xa9\x63\xe7\xd5\x36\xa7\x40\x34\xbe\x74\xb1\x2d\xcc\xa2\x3b\x43\x67\xdb\x41\xa7\xe3\x67\xa1\xc6\x99\x44\x03\xdc\x01\x80\x7e\xaf\x9f\xcc\x8e\x7e\x83\x5d\x51\x03\xc3\x5d\x87\x54\xd7\xe5\xcd\x5d\x21\x14\x1c\x28\xfa\x7d\x22\xed\x78\xa0\xfb\x5e\xea\xaa\x53\xb5\x59\x0e\x16\x92\x35\x02\xff\x7d\x94\xe9\xba\x5b\x1b\xde\x15\xb3\xb2\x51\x8c\x6f\x19\xbd\xac\xed\x93\xfd\x69\x31\x59\xbc\x2d\x04\x19\xc9\x6b\xf4\x1a\x22\x6b\x62\xc2\x3c\x9b\xd4\xd6\xb5\xc8\x0f\xcd\xfb\xa2\x38\xd1\x18\xfa\x89\xdc\xa7\x43\x34\x76\x56\xb1\x3c\x9a\x24\x0d\xac\xdc\xf3\xee\xab\xee\x20\xbe\xdb\xd1\xc0\x0f\xea\xb9\x83\x82\x00\xf3\x22\x70\xec\x76\x03\xb9\xbf\xc9\x35\xb5\x7f\x17\xc5\xa3\x62\x96\x50\x69\x54\xe6\x81\xde\xbf\xf5\x3d\x95\xfc\xb1\x7d\x17\x74\x08\x60\x6b\xcd\xc5\xdb\xb2\xad\xb9\x08\xe1\x42\x6a\x55\x06\x61\xe4\x2d\x22\x01\x5e\xd8\xd3\x18\xd4\x45\x5e\xfd\xce\xf9\x1d\x90\xac\xfe\xf5\x37\x4a\x56\x5f\x7d\x81\x64\xf5\x9e\x55\x1d\x96\xdb\x0a\x3c\x60\x09\xeb\x71\x56\xd7\x0a\x35\x8c\xfc\xa3\x85\x65\x3b\x80\xac\xc5\xa1\xba\x6b\xe6\x83\x19\x9b\xa7\x83\x59\xe0\x03\x57\x01\xf6\x63\x27\xe3\xeb\xbb\x7c\x70\x6e\x0c\x5e\x17\xa7\x95\x57\x7a\xb3\x3d\xa2\x38\x29\xe1\x2a\x14\x58\xc4\xbd\xad\x62\x5c\x14\x74\xa2\x2d\x33\x5d\x1a\x52\x6c\xd7\xba\x63\x71\xe9\x2c\x35\x49\xb6\xd7\x8b\x3a\x1b\x2e\x21\x72\x97\x21\x6b\x1c\xdf\xe4\x48\x97\x96\x9c\x1b\x54\x4d\x3b\xa6\xb7\x73\x0c\xa9\x23\x2b\x54\x9c\x26\xbd\x62\x38\xdc\x23\xb9\xea\xcb\xac\xa2\xc9\x3f\xf2\xf8\xaf\x28\x27\x71\xda\x14\x8c\x5a\x12\x3b\xda\x93\x5b\x15\xc3\x21\x43\x05\xf4\xcf\x95\x03\x2e\x89\x97\xd0\xeb\xdb\x92\xc4\x86\xd7\xf5\xfb\x9c\xd7\x8a\x77\x40\xd7\x02\x4d\x5b\xf9\x10\xc8\x63\x9e\xf4\xa4\xc7\x46\x72\x92\xe2\xd2\xf0\xa0\x70\x2b\x78\x0f\x66\x6d\xb7\x1b\x74\x00\x54\x97\xaa\x71\xa7\x06\x7e\x09\x9a\xc9\x83\x7d\x6e\xec\xb3\x71\xe4\xda\x91\xf3\x8d\x9e\xbe\x09\x5a\xef\xf9\xd1\x7e\x91\x2a\x66\x12\x41\xed\x18\x01\xcd\xbd\xdb\xe9\x9f\x26\xab\xef\x56\x8a\x57\x47\x46\xb1\xb7\x2a\xcd\xe9\x28\x9c\xde\x6f\x33\xf9\x12\x15\x18\x97\xcd\xb4\x1f\x2d\x60\xfd\xc9\xbc\x83\x0f\x23\x77\x74\xc3\xab\xa6\x6f\x30\x26\x9e\x2c\xe6\xc7\x3d\xb2\xc5\x10\x24\xb7\xb6\xa0\x53\xe8\x6b\x0b\x66\xea\xaa\x69\xf5\xd4\x0e\xb6\xec\x13\x4e\xa4\xea\x29\x95\x5f\x2a\x8d\xb1\x96\x18\xcd\x5b\x80\x3a\xf6\x85\xa0\x94\xb6\x8d\x25\xa6\x62\xaa\x22\x87\xb3\x22\x05\xa7\xce\x9f\xe8\xef\x0a\xdf\x9f\x55\xf8\x26\x3f\x1d\x0a\x4c\xf6\xbb\x12\xf7\xef\x4a\xdc\xbf\x2b\x71\xff\xae\xc4\x0d\x4a\xdc\xe4\x2f\xbf\x93\xf0\x07\x48\xf8\x3f\xff\x46\x12\xfe\x2f\x87\xf5\x32\xff\xcd\x97\x9d\x93\x7f\xa7\xc1\xa5\x65\x79\x03\xf2\x37\xfd\x62\x58\xe4\x80\x30\x46\x83\x4b\xe8\x58\x11\x10\x3f\x10\x66\x45\x1e\x8d\x4b\x22\x19\xbd\x2d\x3e\x70\x67\x35\x6a\xb6\x70\x85\x1e\x05\x6b\x28\xe4\x82\x10\x92\xdd\x25\xf0\x00\x87\xae\x4d\x76\x51\xb1\x3d\xf9\x46\x83\xa9\x34\x31\x1e\x6e\x5d\xac\x28\xa7\x30\xf0\x52\x38\xc1\x46\x6d\xcb\x78\x96\xae\x9d\x2c\xa4\x79\xef\x7d\x61\x13\x3b\xd4\x14\xad\x8f\x38\x6b\x99\x4b\xb9\x79\x5f\xa5\xdb\x2b\xf6\x03\x48\x1a\xbe\xb7\x72\x13\xe2\xa2\x85\xbf\x60\x6c\x4d\xdf\x9b\x57\x6b\x52\x4c\x33\x78\x8d\xff\x3d\x71\xc2\x97\xcb\xb5\x64\x37\x3c\xdf\x14\xcf\xad\x14\xc6\xa4\xc7\x7f\x4b\x5c\x9b\x31\x63\xd5\x73\x78\x79\xe3\xac\x72\xdd\xa8\x2e\x6d\xb4\x64\x7a\x8a\x24\xf8\xe4\x34\xa9\x72\x23\x04\x17\xd7\x7f\xad\xc6\xac\xc7\xd0\x25\xa1\xd9\x8b\xb2\xe8\xd4\x53\x8d\xe0\x87\x61\x5f\x01\x17\xb5\x85\x2c\xf9\xbc\xad\x52\xbd\x57\xbc\xa5\x6a\xdb\xae\x61\x4f\xb3\xf5\x37\x8a\x4c\x0c\x75\x57\x35\xdf\x13\xc3\xa1\x70\x8d\x58\x52\x45\x90\x3f\x83\x66\x59\x53\xd0\x64\xe9\xce\x3b\x88\xcd\x76\xf6\xf3\x56\xf6\x8e\x9b\xbf\xee\xf0\x67\x5e\x45\x24\xb8\xbc\x4a\x25\x7b\xee\x36\x5b\x53\x58\xee\xcb\xac\xe2\xbf\x55\x24\xd0\xbf\x21\xf6\xa5\xf7\xb1\x8e\xc2\x3b\x70\x2b\x5b\xb6\x02\xae\xcd\x72\x31\xe7\xd7\x1b\xfb\x3e\x2e\x0f\x85\x1e\x6e\x8c\x60\x76\xa8\xf3\xb6\x33\x4b\x64\xfb\xff\xaf\x69\xce\xa1\xa2\x03\xad\x35\x99\xde\x3d\x16\xc4\x49\x9d\x84\x6f\x2f\x9b\x1a\xdd\x4e\xcd\xea\x0e\x87\x1c\xe9\xdf\x2f\xd6\xea\xd4\x99\x3d\xc5\x4e\xfd\xea\x51\xd3\xf9\x54\x34\x2c\x68\x65\x8b\x2f\x26\x35\x56\x8a\x74\x51\x0f\x4b\xb9\xf8\x9c\x36\xb5\x65\x5c\x9b\x6a\xb8\xf6\x8c\x6b\xc5\xff\xc3\xde\xbb\x6e\xb7\xad\x2b\x09\x83\xff\xfd\x14\x36\xbf\x44\x0d\x88\x45\x89\x94\xe3\xec\x7d\x68\xc3\x5a\xb9\x38\x3b\x77\x27\x71\xee\xda\xda\x5e\xb4\x04\x59\x4c\x24\x52\x01\x21\xdb\x4a\xa4\xfe\x3d\xbf\xe7\x5d\xe6\x05\xe6\x51\xe6\x49\x66\x01\x20\x48\x90\xa2\x64\x39\x3b\xe7\xf4\xe9\x5e\x9d\xac\x65\xf1\x52\x28\x80\x40\xa1\x50\x28\xd4\x05\x12\x44\x55\x63\x74\x2d\xa6\x73\x6d\xa4\x3c\xa5\x04\x33\xf9\x95\x83\xbe\x21\xc1\x5e\x66\x14\xd0\x3e\x45\x54\x1a\x28\xfd\x32\x4a\x58\x49\x08\xfa\x7b\x7f\x49\x55\xfd\x80\x07\xeb\x6b\xfa\xf8\x6b\x2a\x0a\x13\xc9\xb3\x57\xd6\x25\x28\x79\x94\x8f\x65\x96\x0b\xf8\x97\x54\xfd\x8a\x85\x09\x0f\xa3\x95\xc3\x5a\xd0\x1a\xa5\x23\x0a\xa9\xbe\x5c\x2f\x44\x8d\x6c\x41\x7d\x46\x67\x99\x6f\x46\x79\xbb\x5d\xab\x71\xf3\x7c\x78\x9d\x97\x91\x0c\x47\x9b\x86\x5b\x93\xe9\x27\x75\x1e\x0f\xed\x57\xb4\x73\xf9\x6b\x19\x4c\x98\xa4\x71\xb4\x57\x0d\xc2\x4e\x2a\x0b\xc8\x91\xfa\x45\x55\x3e\x0c\x19\x9f\x5d\x57\xa1\x1e\x9f\xeb\xeb\x2c\x9d\xa1\xbc\x8b\xbe\x46\x71\xce\xb9\x2a\xc5\xed\xc2\x28\xca\xe0\xc3\xc5\x91\x94\xdb\xa6\xe2\x38\x0a\x89\x36\xca\x15\x71\xf3\x79\xd4\x18\x84\x51\x7f\x85\x3e\x75\x2c\xc5\x66\xa5\x46\x48\x23\x42\xb3\x86\x29\x34\xa6\xc9\x94\x3b\x1f\xbb\x3a\x99\xaf\x56\x34\xc5\x90\x46\xb2\xc3\xe6\x09\xd2\x69\x42\x79\xd6\x9f\x92\xc1\x52\xcd\x34\x73\x8f\xb2\x40\x0b\x89\xaa\xc8\x30\x88\xfa\x23\x9a\xcb\x45\x68\xc7\x85\x62\xd1\x05\xde\xba\x19\xf6\x82\x64\x46\x9f\x51\x15\xd9\xbd\xe4\x51\xa4\x55\x80\xcb\xe2\x73\x1e\x9a\xc6\xb7\xec\x23\xa4\x7b\xe0\xc7\xc2\x8c\x52\x58\x44\x36\x61\x74\x12\xb0\xaa\x9c\xf4\x54\x1d\x8b\x99\x42\x85\x0a\x36\x66\x4a\xaf\x59\xd2\x7b\xe3\x81\xa6\x82\xd7\x88\x57\xc8\x16\xb4\x20\xdb\x30\x6d\x14\x24\xc3\xd6\x02\x55\x47\x40\x5b\x5a\x70\x65\x0b\x53\x4f\x52\x68\xb8\xd2\x66\xd0\xa5\x53\x39\xa3\x89\x72\x68\xd2\x9c\xf3\xe9\xb4\x30\x9d\xbd\x44\xd7\xb0\x6c\x7d\xa1\xe4\x25\xe2\x85\x53\xcd\x82\xbc\x8d\x33\x71\xfb\x83\x14\x06\xcc\x86\x69\xa1\x10\x59\x69\xa3\x2c\x5c\x16\xbd\x57\x49\xe7\x65\x51\xb0\x14\x7c\x2a\xad\xe4\x8f\x0d\xc3\x1d\x28\x75\x98\x66\x94\x9f\xca\x1e\xcd\x41\xe6\xd1\x1c\x94\x3c\x9a\xcd\x0e\xd1\xfe\x9c\x8c\x26\xf1\xe8\x42\x51\x41\x3a\xc8\xe9\xe7\x21\x5c\xa5\xf8\xe2\xb2\xf9\x6d\x46\xd4\x85\x58\x9c\xab\xa0\x0a\xe7\xb5\x60\x09\x50\x21\xec\xa0\x88\x54\x6e\x83\x04\x0d\x49\x74\x69\x50\xda\x08\x83\xd6\x51\x78\x25\xc7\xea\xc0\xf4\xc7\xf6\x60\x17\xe0\x8e\xf2\xc7\x2e\x7b\x47\x6f\x87\x24\xd0\x2e\xd8\xb2\x52\x16\xab\x08\xc1\xca\x25\x3b\xcc\x5c\xa6\x53\x4d\x44\x09\xba\x3c\x94\x69\xaa\x5f\x4d\x1b\x95\x30\x90\xe9\xab\xcd\x0e\xc8\xb4\xd6\xd9\xc3\x13\xca\x17\x18\x43\x5c\x54\x70\x19\x4e\xdb\x05\x7a\x91\x41\x90\x56\xb8\x32\x76\x3e\x4a\x45\xc6\x0b\x44\x31\x50\x31\xb2\x25\xc6\x5f\xab\x51\xe3\xce\x64\x86\x5b\x39\x13\xef\x7c\xee\x42\x44\xa8\xf8\x09\x89\x96\x14\x20\x26\x54\xfe\x06\x72\xee\x06\x34\xfb\xe8\x6c\x4b\x89\x21\x21\xef\xd0\x6b\x14\x61\x08\x31\x8c\xe4\x75\x8c\x81\x61\x98\x92\x87\x28\x81\x18\x43\x8f\x3c\x44\x23\x23\xdd\x4c\x20\x77\xa7\x53\x08\xc4\xac\xe9\x41\xd0\x38\x8d\xc4\x9e\x79\xf6\x3e\x64\x7c\x1a\x8c\x0c\x77\x1e\x0c\x41\xc9\xc5\x32\x1d\xbe\x15\x27\xf4\xa7\xfa\xbd\xb4\x1e\xc1\xa6\x8f\xe7\xca\xcd\xf1\xaa\xba\x69\x4a\x03\xd9\x8c\x0f\x06\x9c\xb2\x37\x69\x05\xe9\xbc\xaf\x6e\x5d\x2a\x09\xac\x18\x2e\x90\xfc\x52\xcb\x62\x99\x6e\xa5\x8d\xd6\xb7\xa7\x43\xbb\x38\x6f\xbe\x82\x55\x41\xbe\xe5\xe2\x41\x81\x62\x60\x46\x0c\xfe\x43\xc7\xd3\xe4\xfa\x79\x19\xfe\x33\x50\x8c\xb1\x7f\x4d\x9d\xb8\xd0\x5f\xac\xfa\x80\x9f\x4b\xfc\x65\xe4\x52\xe4\x5a\xdd\x45\x15\x42\x45\x51\x32\x5e\xd1\xe6\xeb\x7a\x60\xb9\x46\xbd\xc4\xfe\x1a\x37\xd8\x1b\xb2\xe9\x82\xab\xf1\x12\x97\xce\xe5\xf3\x1d\x92\xd2\x44\x51\xe1\x94\x87\x7d\xd0\x82\x6b\x5b\xca\xbd\x59\x5c\x60\xea\xbf\x46\x27\x55\x05\x85\x84\x5d\xe1\xea\xaf\xa8\x90\x75\xa4\x5e\xb6\x70\x82\xf3\xbd\xcd\x53\xeb\x17\x84\x7d\x9e\x47\x04\x2d\x89\x28\x2a\x22\x78\xa7\x55\x88\x7c\xc1\x71\x17\xfb\xc6\x33\xbd\x9e\x48\x75\x41\xb7\x8a\x9d\x05\xfd\xbe\x3c\xbf\x58\x91\x4c\x52\xf6\x5a\xe1\x34\x3c\x3f\x27\xcb\xe5\x0f\x5a\x19\xa3\x4c\x88\x25\xe5\x13\xf2\xec\xd8\x79\x3e\xe7\x5a\xb9\x51\x05\x92\x76\xa0\x85\x21\xcb\x6f\x9f\x81\xe7\xaf\xd3\x10\xbe\x69\x30\x7d\x49\x8f\xdd\x2d\x5d\x20\x14\x52\x9c\x3a\x50\xd6\xa4\xba\x55\xda\x5b\x12\x53\xd9\x87\x02\xa0\xc0\xe0\x47\xf5\xfa\x50\x8e\x5a\x29\x56\x3c\xd9\x71\xc9\x2f\xd6\x7d\x65\x1c\x5f\x7d\x91\x96\x85\x50\x04\x32\x2d\xa8\xfc\x34\x99\x6f\xa3\xd3\xc5\x32\xf7\xa2\xa1\x72\x48\xb2\x4e\x28\x8d\x46\x80\x6b\xb5\xfb\x2a\xda\x83\xbc\x46\x66\x31\xd2\x09\x52\xad\xca\xa8\x80\x6e\x2b\x20\x4f\xd1\x08\xd2\x20\xa7\xd3\xb4\x5b\x13\x08\xf0\xfa\x7e\x8c\x40\x5a\x87\xaf\xe8\xc7\xf4\x60\x21\x31\x55\x27\x41\x49\xda\x4e\xa2\x60\x92\x0c\x63\x5e\xbd\xb8\x88\x95\x91\x97\xc7\xf4\x87\x0e\x3c\xf1\x73\xda\xb5\x1f\x62\xd3\x25\x87\xd3\x5f\x23\x42\xa7\x23\x64\xd8\x76\x49\x69\x3a\xfd\xa4\xf4\x80\xc1\xfc\xb0\xc8\xe8\xce\x85\x96\xb4\x97\x82\x15\x24\x3c\xae\xde\x0d\x64\x52\x31\x23\x54\x1d\x2e\x24\x10\xfe\x0d\x19\x1f\x02\xf2\x1a\xb1\xca\xc2\x5c\x7f\x1d\x33\x7d\x7f\xb5\xb1\x6b\xac\x4f\x4f\xc0\xfc\xa2\x7c\xef\x50\x5a\x2f\xc2\x7c\x71\x08\xae\x59\xdc\xab\x16\x8a\x5e\x90\x94\xb2\x8c\x14\xad\xd1\xb4\x12\x90\x67\x1b\x89\x8a\xf4\xe7\xb5\x9a\xa9\x66\xa8\x90\xb5\xee\x23\x0e\xaf\x0d\x27\x91\xea\x5d\x6f\xa6\xbb\xe0\x85\x50\x2c\xd9\x66\xa9\xa2\xf9\xe9\x26\x28\xe0\x85\xfd\x62\x41\xf2\xa8\xd2\xf0\x2b\x69\xc4\x10\x43\x98\xa9\x38\xf1\xf3\x18\xf4\xc5\xda\xcc\x65\x61\xa5\x62\x20\xe5\xe4\x42\x24\xad\x60\x2b\xe9\xc6\x3d\x47\x25\xd5\xe1\x61\xbe\xf3\xcc\x24\x2f\x95\xfd\x31\x6f\xb4\x25\x4a\x4f\x51\x96\xad\x2e\xdf\xd8\x3f\x31\x3a\x01\x51\xd8\x71\x31\xc4\xe5\x28\x2f\x91\x91\x9e\xab\xaa\x8c\x27\xe4\xa8\xe5\x2d\x7f\xb4\xb4\xe3\x5f\x68\xc3\x86\xaa\x31\x64\x25\xc1\xb1\xd4\x7a\xae\xc3\x7b\xa6\x3a\x8b\xe5\xfa\xe2\x65\x0d\x43\xe5\x46\xb4\x0a\x7b\x49\x6a\x5e\x42\x5e\x3d\x62\x59\x78\xa1\x8b\x34\xb6\xd0\x8e\xa4\xe5\xb2\xf3\xab\x20\x72\xcf\x20\xf2\x5a\x4d\xc1\x75\xdc\x15\x2b\x5d\x51\x48\x63\x18\xc2\x76\xa4\xf8\xb3\x16\x03\x10\xd3\x0c\x3a\x32\xf9\x18\x5d\xe0\x15\x54\xb7\x74\x84\x92\xaf\x62\xc6\xde\x44\xef\x64\xd4\xfe\xa8\x62\x8b\x1a\x69\xa3\xb7\x48\xeb\x6a\xb2\xf0\x42\x86\xba\x86\x65\xe1\x85\x0c\x9d\x41\x16\x68\x28\xcc\x06\x66\x39\xb2\x51\x5c\xab\xed\xe8\x05\x30\xc6\xf3\x79\xbc\xc8\x0f\x3f\x0b\xdf\x65\x68\x8d\x2a\x39\xb2\x18\x19\x96\x99\xde\x84\x84\x16\xa2\x3e\xe5\xec\x28\x94\x16\xff\x3f\x0c\xc2\xd2\xcb\x63\x6c\x98\x96\xaf\x5a\x25\x33\x65\x4c\xa0\x1c\xaf\x5e\x89\x52\x78\xed\x2e\x62\xe9\x48\xac\x3c\xa3\xd6\x68\x0d\x2b\x98\x51\x24\x65\xd3\xf9\xdc\xdd\xe2\xf3\xb9\xb7\x43\x48\xd4\x2e\x7c\x05\x03\x0a\xbc\x1d\xd9\x9e\x1f\x39\x1e\xf6\xd3\x24\x47\xd2\xac\xb8\xd8\x8a\x15\x8c\xbf\xd2\x7d\x6f\x3e\x47\xd5\xfb\x47\x99\xa7\xa9\x80\xd6\x7c\x7f\x03\x31\x61\xfb\x29\xd2\xf9\xe6\x9f\x22\x21\x2a\xc8\x25\x00\x2f\xf5\x5d\xd6\xb3\xe5\x5e\x2b\x9e\x6a\x5b\x16\x36\x77\xee\x4a\x98\x37\x9c\x10\x05\x25\x88\x19\x1a\x65\x33\xb4\xc2\x60\x1b\x67\x9d\xc7\xd3\x0c\x51\xe1\x00\xb1\x4e\xd4\x71\xbb\xdd\xdc\xeb\x87\x3c\x13\x3b\xfb\x98\x84\x1d\xb7\x2b\xe5\x3e\xed\x9a\x0c\x09\x61\x30\x22\xac\x13\x77\x61\x4a\xe2\xfd\xa2\x6a\x70\x84\x6b\xb5\xe9\xbe\xf6\xd5\x1f\xed\xe7\xfe\x28\x3d\x45\xc3\xf3\x79\xcf\x5c\xd2\x6b\xb5\xb4\x35\x49\x67\xda\x85\x84\x8c\x00\x4d\x49\xd0\x48\x86\xe1\x80\x2b\x7d\xd0\x88\x8c\x3a\xd3\x3c\x53\x23\x2b\xf6\x5c\xd9\x65\x40\xcd\x9b\x67\x88\x16\x3c\xac\x19\xe1\xca\xc3\x9a\xe7\x9f\x91\x4d\x9f\x54\x7b\x9c\x32\x8b\x0d\x63\xb3\x68\x8f\x9f\xa4\xb8\xbc\x69\xcd\xf3\x4e\xb1\x57\x92\xcc\xdf\x68\x87\x90\x2c\x13\x62\xb2\xb8\x49\x7d\xb5\xda\xa5\x58\xf8\x52\x17\xb4\xb8\xc3\x44\xf7\x9f\xa2\x51\x85\xc2\x76\x9a\x05\x4b\x58\xa1\x6f\x33\x9b\x3c\x2d\x38\x80\xe3\x82\xcf\x52\xcf\x0c\xa5\x9b\xf3\xdb\x10\xe2\x95\x71\x71\xd2\xb4\x96\x41\x81\x2e\xa5\x3b\x6c\x31\x30\xc6\x19\x0a\x6e\x16\xf0\x41\x76\x6b\x52\xf0\x83\x0f\x3a\xb9\x23\x68\x77\x47\x36\x97\xa1\x04\x7a\xb8\x3a\xb4\x4d\x42\xd4\xdb\xc5\xf5\x26\x39\x85\x90\x0b\xb1\x19\x72\x21\xae\x0a\xb9\xb0\xc2\x24\x67\xc7\x5b\x08\x8a\x28\xb8\xd5\x14\x6d\x80\xcb\xde\x9c\x85\x4e\x0b\x4a\x9d\x96\x90\x33\x14\x63\x18\x91\x24\xeb\xb4\x91\xea\xb4\xfc\x91\xf6\xfd\x1d\x19\x9d\x16\xcc\xe7\x3b\x1b\x91\x59\x00\x53\x23\xd0\x40\x40\x98\x7c\xb2\x81\x4b\xe3\xa8\x56\x4b\x9b\x22\xed\x0b\x93\x25\xeb\xc1\x64\x13\x97\xc6\x1d\xb7\xb2\xbb\x0a\xd4\x1a\x40\x16\x0b\x61\x99\xee\x7b\xca\xb2\xbd\x57\xe9\xb0\xd7\x33\xe2\x35\xf5\x8b\xe7\x45\x81\x90\x4d\x86\xc5\x99\xdc\x2f\x4c\x0b\xa8\x8e\x05\x78\xa3\x40\x9a\xe1\x06\x81\x34\x4b\x89\xee\xe2\xd5\x81\x34\xc3\x4e\xdc\xed\x16\x4d\xb6\xd5\x33\xed\x8e\xad\xee\x8c\xe0\x1f\x92\x37\xe5\x46\xc7\xdb\xdf\xd1\x00\x86\xc5\x03\x90\x0a\x37\xc2\x5e\xd6\x7f\xe2\xf1\xa8\xd0\xb5\x6a\xcf\x53\x0a\x46\xb1\x9d\x92\xde\x22\x75\x9d\x94\x32\xa1\x8a\x34\x2f\x2f\x0b\xa2\xbb\xee\x6d\x9e\xda\xdf\x88\x7e\x9a\x6c\xc2\xb5\x24\x1d\x14\xe4\xe2\x8c\x0a\x26\xb8\x8d\xd0\x60\x99\x2f\xe3\xf9\xbc\xfc\xb8\x24\x28\x51\xb5\x2f\xc7\x18\x74\xff\x4c\xaa\xfa\x07\xfb\x93\xeb\xdc\xce\x64\xa9\xd2\xca\x4b\xf1\x7c\xfe\x4a\x7f\x69\x3b\x5d\xc0\x89\x16\xc5\x96\x4e\x5d\x51\xea\xa4\x56\xf0\x11\x8b\x69\x95\xfd\xf8\x76\x98\x3f\x56\x2a\xa8\xb2\x9c\x9c\xa7\x3c\x37\x30\x98\xc4\xa0\xba\x38\x84\x0a\xf7\xdb\x6c\x6f\x7a\x4e\x39\x32\xb3\x98\xae\xf7\x85\x94\xdd\x52\x80\x17\xb3\x6c\xc7\x5d\x2c\xcc\x98\x1c\x09\xfd\xb7\x6c\xe0\x72\x8a\x95\x54\x5b\x81\x76\x7f\xc7\x10\x12\x86\x7e\xf7\xcc\xb4\x7c\xa6\x19\x91\x8a\x24\x27\x07\xda\x9c\x2d\x79\x50\x39\xf1\x39\x54\x27\xf3\x61\x04\xf1\xf9\xbc\x90\xd4\xf1\xaf\x3f\x9b\x32\xb7\x94\x90\xbe\xf2\xb3\x8c\xa0\x71\xca\x59\x48\x49\x0c\xc1\xb2\x19\x9e\xe0\x11\x0d\xfa\x6d\x1a\x8c\x90\xf6\x37\x01\xcd\x6d\x30\x94\x5e\x71\xe3\x68\x0f\x03\x15\x1b\x3d\xab\x69\x01\x6f\x9c\x5e\x06\xb3\x41\xc0\x28\xab\xd5\xb8\xaa\x0d\xc7\x8d\x71\x3c\x8d\xa4\xef\xaa\x7a\xd2\x90\x8f\x73\x45\x28\x23\xb1\x36\x12\x13\xec\xa5\xd1\x3b\x23\x1c\x58\x83\xc5\x53\x4e\x09\x35\x6c\x53\x83\x06\x1d\x87\x9c\x04\x10\xa8\xa3\x7d\x92\x40\x90\xd7\x48\x76\x5c\x08\xb6\x8a\x8e\x0e\x4a\x96\x93\x07\x32\x4a\xc9\x9a\x2a\x17\x4b\x0a\x4e\xbc\xc5\x3a\x6e\x97\xf0\xc6\x24\x60\xc1\x38\x31\x02\x17\x7b\xfb\xd1\x41\x96\x7b\x3e\xb2\x6d\x2c\x9d\x02\x73\x25\x68\x64\xf8\x4c\xf6\xce\xb4\x4f\x7a\xa3\x77\x06\x0c\x97\xdc\x28\xa2\x46\x14\xf3\x23\xd9\x8b\x54\xab\xfd\xad\xff\x90\x5f\xf9\x1f\xdb\xe3\x69\x22\x53\xdd\xa6\xb1\x04\x2c\xad\x2e\x8a\x53\x23\x06\x25\x13\x72\x99\x99\xf0\xcc\xa4\x82\x51\x9e\xd2\x49\xc3\xaa\x40\xc5\xa1\x5c\x39\x4b\xb0\x21\xde\x5a\xca\x59\x2b\x5b\xb0\xfd\x1f\x96\x4d\x6d\xeb\x3f\xb6\xfb\x32\x9b\x3b\xdf\x96\xa8\x2c\x5c\xf2\xed\x50\x9b\xd8\x33\x42\xc5\x17\xa6\x87\xa2\x72\x94\xd4\x6f\xea\xd0\x2b\x3b\x91\xd0\xf4\xa2\x2a\x3b\x95\x31\x15\xcc\x44\x24\x2b\xe8\x3e\x2c\xd0\x7d\xb8\xa5\x95\x18\x94\xc8\x2c\xf6\x89\xff\x63\xb1\x58\x4a\xfb\x5c\xf4\x3b\xbb\x26\x05\x85\xe0\x93\xf9\x54\x0c\x21\x34\x75\x7b\x92\x34\x0b\x5b\x84\x95\x13\x05\xd2\xde\x4c\x86\xf1\x74\xd4\x57\x69\x7f\xf5\x1c\xda\xd2\x1b\xf2\xa5\x59\xaa\x17\xf0\xa6\x85\xcb\xa9\x08\x54\x64\xe5\x8c\xb1\x49\xad\x70\xad\x96\x65\xca\xf5\x64\xf2\x49\xdd\x39\xa9\xd8\x6c\xe4\x7b\x6d\xfe\xe5\xcf\xff\xfa\xb3\xde\x6c\x70\x9a\x70\x14\xe2\x36\x8a\x91\xa0\xc3\x3e\x4d\xc0\xba\x75\xcb\xc2\xed\x80\xa4\xf7\x8d\x5b\xb7\x7c\x14\x18\x3d\x0a\xf9\x0b\x12\x60\xb0\xea\x32\xd3\xa5\x72\x3a\x88\x1a\x97\xe1\xa8\xdf\x0b\x58\x9f\xec\xb8\x82\x3b\x44\xc1\x98\x92\xd0\xf8\x34\x55\xaf\xf8\x3a\xec\xe7\x75\x86\x46\x85\x9d\xb0\x5b\x5d\x61\x27\xec\x8a\x0a\x29\x62\xb6\x07\x01\x5e\x20\x37\x3b\x4d\xa5\x78\x51\x18\x1b\xc5\x06\xfe\x35\x43\x03\x8c\xfc\x58\x40\x68\x32\x6a\x9d\x1c\x3a\x13\x75\xc2\x4c\x7f\x22\x38\x83\xb9\x0f\x0a\x72\xb7\x96\x70\x80\x62\x14\xa6\x3d\x12\xe4\x8e\xde\x28\xb2\x3d\x48\x9f\xcb\x03\x0e\x99\xb3\x5e\xf4\x6c\xea\xee\xda\x51\x77\x5d\xd2\xa7\xbd\xb8\x4f\xdf\xbd\x79\xf2\x20\x1e\x4f\xe2\x88\x46\x1c\x65\xee\x13\xc6\x6a\x86\xa2\x94\xcf\xe4\x1e\xe3\x66\x1d\x8d\x5b\xb7\x64\x0c\x88\x30\x1b\xcc\xb4\x9e\x7c\x70\x2b\x2a\xd2\xfb\xdf\x48\x1b\x95\x36\x2d\xbc\x51\xdd\x79\xad\x85\xd6\xe0\x45\x71\x80\x4d\xab\x2b\x14\x16\xe3\x90\x20\x31\x00\x18\x6b\x0e\xc3\x20\x2c\x91\x83\x58\x68\x4a\xeb\xda\x4f\x11\x44\xc5\x7a\x97\x7a\x63\x82\x25\x5a\x59\x28\x14\xeb\xac\xe8\xa9\x44\xbf\x9e\x8a\x42\x95\x7b\x3e\x56\xd3\x34\xd5\xb6\x64\x19\x1d\x63\x1d\xc8\x4d\x71\x5a\xb5\x2a\xc6\xc6\x62\x19\x10\x96\xf7\xfb\x56\x25\x78\x80\x17\xc5\x5e\xd3\xb4\xc6\xd5\x2f\x16\x17\xc1\x58\x6e\xb4\xd4\xc4\x55\xf7\x38\x23\x3e\xcb\xea\xe6\xd6\xc8\xd2\xf8\xd2\x78\xb3\xc2\x57\xdf\x92\x00\x69\xd0\x2c\x14\x0a\xc1\xd4\x28\xd4\xa1\x32\x18\x11\x54\x37\xcc\x00\xd4\x4d\x4c\x75\x3a\xcb\x6f\x16\x0b\xd8\xf0\x5f\x79\xd1\x59\x93\xe2\x2e\xe9\x05\x23\x7a\x3f\x88\xaa\xb3\x84\x99\x69\xd5\x24\xe4\xab\x38\x8c\xaa\x53\x7e\xf5\xca\xa0\x4f\xfa\x34\xe2\x21\x9f\x55\x42\x7f\x2c\x43\x3f\x0f\x23\x99\x20\xb7\x02\xf6\xf5\x12\x6c\x7c\x7e\x7d\x32\x3c\x09\x79\x32\x1b\x8f\x56\x00\xf7\x97\x80\x8f\x59\x5f\x6c\xb3\xab\x51\x2f\x7d\xdd\x78\x32\x0a\x7b\xe1\x8a\xec\x79\xcb\xdd\x76\x59\x09\x78\xb1\xdc\xe2\x6f\xac\x1a\xe7\xf9\x12\xe8\x9b\xa0\x1f\xae\x68\xee\xe9\x12\xf0\xeb\x69\x10\xf1\x70\x54\x9d\x36\xed\x6a\x05\xf8\xf7\x6a\xf0\xe3\x25\xf0\xb7\x43\x46\x93\x61\x3c\xaa\xa6\xa2\x93\x65\xf8\x70\x5c\x8d\xfa\x09\x2b\x83\xbe\xe3\xbd\x4a\xc8\xf7\x4b\x90\x27\xf4\xdb\x54\x90\xdc\x8a\x3e\xf9\xb0\xa6\xc0\x2a\x8a\xfa\x63\x4d\x99\x55\x63\xfa\x6c\x4d\x99\x95\xa3\xfb\x74\x5d\xa1\xd5\x44\xfc\x69\x4d\xb1\xb5\x23\xfe\x7a\xa9\xe0\xc3\xf0\x82\xb2\x73\xb9\x3c\x54\xc0\xd3\x68\x25\xfc\xaa\xbe\xe3\xab\x8b\xac\xea\xba\x68\x75\x91\x95\x3d\x17\xaf\x29\xb3\xba\xe3\x98\x59\x8a\x87\xbd\xaf\x8f\x64\x8e\xeb\xea\x01\xcd\x93\x0a\x32\xb4\xfb\x5b\x41\x6e\x97\x0b\xad\x36\x1a\x2d\xef\xad\xb4\xf5\xa8\xe1\x92\xeb\x29\x8d\x05\x0b\xa2\x73\xb9\xe7\x53\xaf\xb4\xbb\xac\xf1\x8e\xe3\x46\x3f\x1e\x07\xc5\xbc\xc1\xc3\x30\x59\x92\xf6\x6f\x54\x79\x55\x00\x2a\x75\x56\x14\x46\x9c\xb2\x49\x3c\x0a\x64\x98\x27\x7c\x7d\x33\xb3\xd6\x55\xda\xba\x56\x20\xe5\xb8\xf8\x7d\x85\xaf\x52\x39\x88\x03\xa2\x7c\x4d\x91\x15\x6a\xf6\x8a\x4d\xcf\x6f\x7d\x64\x24\x36\x43\x2f\x82\x09\xa4\x96\x3b\x9d\x2e\x44\xc4\xd8\x00\xc7\x28\xd4\x47\x94\xa1\x2d\x33\xbb\x2b\xf5\x46\x8c\x53\x3d\xb8\xdc\xf2\xef\x18\xa2\x69\xb4\xa5\x14\x1a\xb1\xcc\x80\x23\x2d\x64\xc3\x3c\x26\x3c\xeb\xa0\xc4\xf1\xf0\x6d\x2d\xab\x64\x8a\xc1\x38\xed\x85\x5c\xf0\x62\x6a\x23\xb7\x34\x1a\xd9\x56\x59\x89\x90\x78\x4b\x36\x3d\xfb\x12\xb9\xef\x56\x7d\x10\x6d\xc7\x83\x6d\x86\xb3\x3c\xdf\x91\x6d\x59\x5b\x72\xf3\x86\x18\x9e\xcf\x55\x3b\x19\xa4\xad\x8c\xf2\x56\xc6\x0b\x88\x55\xe7\x56\x9d\xd7\x95\x5b\xd4\x46\xac\x90\xe0\x06\x43\x2c\x23\x54\xa8\xe6\x09\x54\x53\xa5\x52\xdb\x0c\x59\x44\xa8\x40\x10\x89\x82\xbd\x78\x52\x91\xeb\x60\x3b\x91\x5b\x38\x8d\x56\x26\xe7\x0d\x53\xb5\x41\x6c\xc4\xb1\x83\xd8\xdc\x79\xa7\x23\x2e\xc4\x18\x92\xa0\xbc\xb4\x8e\x72\x18\x13\x96\x8e\x01\x08\xf9\x50\x7e\x3e\x4c\x89\x0b\x3d\xe2\x41\x9f\xec\x78\x30\x24\x2e\x0c\x88\x0b\x13\xd2\xd8\xcb\x49\x64\x8c\xb4\x1a\x3a\x46\xda\x5e\x10\x42\xd2\x3b\x98\x42\x42\xc2\x76\xcf\x9f\xc2\x88\x84\xed\xa9\xdf\xdb\xa2\x04\x8d\x9c\x04\x37\xb3\xec\xde\x1e\x30\x67\x68\xb7\xea\x03\x0c\x7d\x69\xe3\x62\xa6\x62\xc7\x18\x12\x5b\x96\x70\x68\x1d\x31\x67\x88\x71\x5d\x10\x2a\xad\x23\xcf\x19\xaa\x12\x09\x31\x92\xb3\x0b\xa1\xd4\xbc\xe7\x29\xb3\x19\xa7\x1b\x00\x14\x35\x02\x8c\x18\x2e\x99\x25\xe6\x1b\x8e\xc4\xa6\x75\x6e\x64\x02\x0a\x50\xd8\x1e\x37\x18\xbd\xa0\x2c\xa1\x08\xfb\xe3\x8c\x42\xf4\xd9\xa5\xee\x45\x60\x4b\xf4\xbb\x6e\x8c\x63\x41\x25\x63\x24\xb7\xb5\x78\x01\xec\x26\xc4\xd6\x99\x42\xaf\x4b\xc4\xd0\xd8\x53\xe8\x11\xbb\xa7\x10\xc9\xc7\x19\xaa\x37\xa2\x03\x2a\xf0\x2d\x17\x16\x9b\x6f\x81\x41\x14\x3d\x0b\xa2\xfe\x65\xd8\xe7\xc3\xaa\xf0\x11\x32\x6e\x09\xa7\x93\x8a\x77\x74\xa1\x54\x6d\x95\x55\x56\x7c\x42\x9f\xec\xec\x50\xd5\xec\xbe\x28\x3a\x09\xfa\xfd\xb2\xd5\xd0\xca\xc2\x43\x35\xc4\xe3\x30\x42\x1e\x0c\x88\xad\x7b\x72\x68\x60\x7a\x12\x95\x13\xe0\x6c\x86\xae\x0a\xd7\xf1\x94\x6f\x8a\x4b\xb4\x46\x21\x18\x08\x04\xc1\x28\x3c\xdf\x90\x20\x26\x24\x9b\x13\x3a\xf9\x7d\xda\xa0\xb4\x45\x13\x81\x70\x05\x3b\x18\xa1\x18\x61\x90\x43\x8b\x53\xd2\xef\xe3\x42\x57\xa0\x21\x2e\x7c\x0e\x1a\x60\xd5\x3a\x34\x31\x78\xc7\x18\x61\x33\x0a\x66\x36\xc3\xa7\x05\xdb\xbc\x78\x32\xcb\x63\xcc\xea\x91\xa3\x05\xf4\x7a\xe3\x45\x0b\x8d\x58\x7a\xaa\x60\xe9\xaa\xcf\x9a\x22\x19\x91\xc5\x0c\xd1\xd3\x33\xdf\x8e\xb4\x13\xa9\xd8\x0a\xe7\xed\x2e\x7e\xb8\x97\x06\x13\xef\x13\x86\xee\xca\xb0\xc1\xc8\xf3\x30\x0c\x08\x43\xff\xc0\x30\x11\x62\xc8\x1e\x36\xb3\x3d\xa9\x73\x93\xf9\xdc\x8c\xf5\x06\x11\xa1\xed\x6c\x54\xb4\x0f\x20\x64\x56\x76\xbe\x6b\x9c\xe9\x2f\xa9\xdf\x50\xac\x0c\x64\x19\x71\x65\x54\x53\xdb\x66\x38\xd4\xc6\x98\x82\x97\xc5\xd8\xe6\xe2\x32\x73\xa7\x09\xcd\xd0\x8b\x17\x25\xd3\xe4\xb6\xae\x5f\xd6\x6a\xb4\x2b\x2a\x34\x28\x36\x54\xd5\x21\x4e\x1d\x28\xb4\x03\xdc\x56\xde\x9e\x50\xb6\x27\x96\xc9\x41\x90\x0a\x86\xdd\x61\xdd\x34\x6a\x8b\x6e\x6e\x20\x5e\x9b\x06\xa0\x65\xe3\x5f\x13\x97\x04\x16\x08\xf3\x98\x51\xdb\x81\x0a\xee\x5f\x6d\x8d\x23\x5a\xf6\x30\xe0\x34\x23\x2b\x31\x8d\x38\xb1\x39\x54\xda\xcc\x25\x94\x8b\x4d\x0f\x92\xeb\x40\x84\x6d\x5e\x8f\x30\xb0\xc5\xa2\x90\x42\xc9\x3c\x90\x59\x46\x67\x9c\xbe\x08\x24\x4c\x20\x11\x18\x2a\x4d\x09\x21\x52\x3a\xbb\x34\xe0\x9f\x3c\x4c\x5c\x97\xe3\x5a\x9a\xf3\xfc\x58\x60\x48\x81\x78\x05\x90\x22\x30\x19\xf7\x01\x4b\x84\xb4\x1d\x95\x87\xc0\x0f\xaf\xed\x75\xd9\x14\x45\x4c\x51\xb1\xc3\xc3\xc5\x02\x4e\x49\xb3\xe3\xd8\xdd\x36\x6a\xfb\x7f\xf6\xed\x3f\x1b\xed\x3f\xfb\xf5\xb9\xfc\xb1\x31\x6a\xfb\x1d\x7a\xd4\x95\xef\xc5\x7d\xbb\x79\x0e\x97\x72\x24\x54\x58\x2f\x74\xda\x48\xe2\x29\xeb\x51\xb0\xce\x2d\x0c\x47\xab\x43\x22\x91\xd3\xc6\x28\x48\xf8\x93\xa8\x4f\xaf\xc8\xa5\x71\xed\x42\x40\x1c\x0f\x12\x21\x9e\x8d\xb4\xe3\x3a\xb5\x89\x65\x01\x17\x7f\xf7\x11\x23\xa7\xd2\xd1\x4b\xac\xf5\xd2\x2f\xeb\x52\xdd\x72\x8c\xf7\xb1\x0c\xff\x23\x4f\xb3\xf1\x61\x2c\xcf\xf3\xf5\x0c\x8b\x21\xc4\x90\x74\x82\x6e\x5b\xfc\xb1\x49\xe8\x27\x1d\xdb\x0e\xba\x24\xc4\x80\x98\xd4\x66\x61\x42\x08\x8a\x48\x24\x2e\xdb\x06\x68\xa4\x41\x23\x1f\xe9\x2b\xc1\x3e\x46\xa9\xbf\x7b\xe8\x07\x70\xe5\x9f\x49\x7d\xb9\xf4\x8e\x32\xbf\x28\x8b\xd7\x74\x60\xb8\x01\x1b\xcd\x5a\xd9\x28\xcd\xe7\x0f\x5a\xed\x51\xc7\xed\xb6\x2b\x96\x84\x2a\x2b\x5c\xc4\xb1\x6d\x59\x8b\x05\x12\x85\x1a\x57\xb8\x2a\x62\x6d\xd5\x62\xbc\x10\x1b\x04\xc4\xc9\x48\x33\xaa\x2a\x53\x7d\x41\xd6\xee\x7e\x74\xc0\xf7\x6d\x3b\xc2\x49\x07\x31\x32\x92\x79\xb2\xc3\x2e\x61\x8d\x2b\x83\x94\x92\x54\x57\x68\xe1\x05\x5e\xc0\x95\xe0\xa0\x77\xb0\x99\x00\xa7\xc8\x9f\x52\x02\x37\x73\x3f\xa8\x00\x71\xda\x3a\x91\x10\x12\xa5\x31\x0e\xd1\x95\x90\xc8\x44\x6b\xf3\xb0\xdd\x24\x6a\x9f\xf9\xb9\x89\x02\x89\x84\x7c\x9d\x82\x0f\x1a\x54\x80\xe3\x36\xe2\x84\xc1\xa4\x11\x60\xff\xc8\x2f\xb8\x91\x0c\x1a\xb4\x3d\x69\x04\xc5\x87\x82\xb9\xb4\xcf\xab\xba\x4f\x32\xc4\xfb\xd3\xc1\x80\xb2\x46\x98\xbc\x0f\xe9\xa5\xf2\xea\x58\x4a\x52\x1f\x88\x77\xd2\xb9\xa3\x3d\xf6\xcb\x7e\xe1\xed\x0b\xbf\x22\xd7\x66\x6a\xc7\x7a\x3c\x30\xb3\x73\x1b\x6f\xf5\x81\xef\x7c\x1e\x26\x2f\x83\x97\x02\xcf\xcc\x3f\xc3\xe9\x81\xfb\xc9\x4f\x30\x33\x43\xf6\x35\xf8\x5a\x21\x90\xef\xdb\xfc\xe3\x6d\x15\xd3\xe6\x05\xe9\xb8\xe0\x75\x73\x90\x57\x85\xb0\x37\xd9\xe3\x7b\x66\x3b\x10\x77\x88\x68\x0a\x6e\x2f\x37\x03\x31\x87\xe2\x26\x5f\xf8\x88\x91\xec\xcb\x5e\x06\x2f\xfd\xc6\x5e\x45\x5a\x43\xa6\x73\xe9\xe5\x35\x3d\x28\x9e\xf0\x51\xa5\x9d\xa6\x2a\x8e\x16\x57\x86\x80\xdc\x0c\xae\x76\x10\x89\x6d\xd3\x3d\x14\x82\xb4\x15\x64\x28\x80\x18\x63\x5f\x3e\x8b\x04\xb3\x10\xcf\x62\x08\x30\x86\x0a\x1a\x88\x51\x24\x03\xd2\x15\xb2\x3b\x98\x0d\xc8\x56\x58\xbd\xbe\x82\x9e\xff\xd8\xf1\x20\x2c\xac\xac\x85\x75\x37\xc2\x92\x05\x2a\xc6\xd7\x89\xba\x07\x54\x9d\x7c\x51\x42\xb5\xb0\x90\xef\x2e\x80\xe7\x22\x44\xfe\x14\xef\xdb\x76\x70\x10\xed\xe3\xb0\x13\x74\xc9\x3d\x44\x3b\x41\x17\x68\x27\xb0\x3d\x19\xb8\x2c\xe8\x12\xa6\xe2\x67\x70\xf5\x6c\x69\xa9\xc8\x56\xd9\x74\x0a\x0d\x1b\x7d\x49\x62\xe0\x41\x84\x1d\x2f\xe3\x69\x62\xf9\x10\x0b\x89\x0c\x32\x53\x4a\x50\x61\x04\x35\xd0\xba\x0a\x7d\x81\xb1\x56\x6d\xa4\xbf\x18\x1b\xba\x0a\xf1\xd8\xbc\xc3\xb8\xd1\x1b\x05\xe3\x09\xa2\xe9\x2f\xce\xf7\xa1\x34\xbb\x32\x13\x06\x7f\x31\xf7\xad\x59\x0c\xbe\x17\x90\x90\x17\x30\x22\xc7\x30\x25\xaf\xb6\x0a\xe2\x61\x0e\x3c\xca\x07\x4e\xdb\xe7\x81\x71\x58\x9f\x8a\x91\x3b\x84\xbc\x92\x43\x12\x08\xc2\xe2\x24\xe8\x8c\x1c\xaf\x0b\xf4\x90\x4b\x27\x60\x0a\x94\x70\xe0\x44\xfa\x93\xae\x9a\x72\x42\x6c\xa7\xb9\xd8\xce\x65\x74\x49\x0c\x11\x19\x1d\xb6\xda\x5f\xfd\x07\x10\x12\x75\x54\x03\x7d\x33\x15\x72\xde\xaf\xe9\x34\x21\x36\xc7\x6d\xe6\xa3\x70\x3e\x17\xab\x1f\x0a\xe4\x4e\x95\x62\x48\x60\x84\x31\x46\x14\x4d\xa5\xd9\x6e\xb6\x0b\x6d\x84\xd1\x05\x65\xbc\xaa\x61\x42\x7a\x46\xf1\x7c\x8e\x62\x12\xa1\x04\x32\x54\x67\x02\x11\x93\xa6\xbf\xfd\x1b\xed\x59\x83\x82\x92\x03\xde\x62\xe8\x89\x8d\x49\x90\x2b\x3a\xfa\x37\xd9\xc6\x26\x25\x9d\x89\x44\x96\x2c\x21\x5b\xb5\x91\xdd\x2e\x97\x1f\x91\x13\x81\x43\x14\x94\xa4\xb5\x59\x2b\xa6\x62\x27\x3a\x9f\xbf\x52\xd5\x4b\x62\x10\x18\x0c\x9a\xdd\x0c\xcf\x88\x50\x85\x62\x24\x8a\xdf\x48\xdf\x23\x68\xac\x8f\x7d\x66\x18\x38\x98\x76\x55\x94\x30\xe0\x24\x92\xdf\x96\x13\xcf\xc3\x9c\x81\x7e\x41\x18\xbd\x82\x57\x6a\x9b\xf3\x92\x34\xff\x42\x6d\x1f\x35\x70\x1b\x75\x0e\x0e\xc9\x5f\x5d\xb1\x58\x76\xec\x3f\x1d\xb4\xdd\x15\x57\xb7\xfe\x8f\xf8\x71\x71\x1b\x49\xa9\x0f\x81\xb8\x6a\xa8\xeb\xff\x14\x00\x81\xf3\xfd\x76\x17\xb7\x6f\x35\xc3\x7c\x5e\x3d\xd1\x79\x29\x11\x27\x2f\x33\x89\x0d\x2f\x59\x81\x84\xca\xef\x78\x7b\x20\x35\xc0\xfe\xb6\x65\xeb\xe8\xe4\xa6\x09\xd5\x73\xf4\x63\x10\x8e\x46\xbe\x60\xe1\x20\x77\xa1\x3e\xef\xb4\xba\x90\xa8\xab\xdd\x2e\xa8\xec\x0a\x3e\xef\xdc\xe9\xc2\x77\xca\x62\x9f\x77\xf6\xba\x20\x35\x13\x3e\xef\xdc\xed\x42\x2f\x1e\x8f\x03\x9f\x77\x7e\xeb\xc2\x84\xd1\x5e\x98\xa8\x48\x44\xbf\x77\x6b\x35\xf1\x37\xb7\xae\xe6\x2c\x1c\xfb\xbc\xf3\x8f\x2e\x88\x65\x57\x54\xe9\x76\xcd\xb8\xdf\xcf\x33\x83\x14\xd1\x24\x62\xe4\x82\x15\xf7\x6d\x6b\xdb\xf2\xd5\xa5\x2d\xa4\x56\xe9\x32\x22\x37\xf5\x06\xa0\x7c\xd0\xb6\x0e\x05\xa4\xbc\xce\x40\x93\x12\x64\x22\x01\x1d\x01\x98\x14\xe0\xe4\xe7\x16\x20\xe5\x93\xb6\x25\x41\xe5\x75\x06\x2c\xfa\x43\x10\xad\xbc\x50\x8f\x94\xca\xc6\x28\x2e\x1f\xb4\xd5\x03\xdf\x4e\xef\x75\xdc\xfc\xf1\x38\x90\xe5\xe5\x95\x8e\x9e\x9f\xf6\xa1\x89\x24\x7b\x68\x20\xca\x9e\x65\x67\xed\x63\x89\x4b\x5c\xa4\x8f\x66\x13\x6a\x62\x11\xf7\xea\x3b\xc4\x95\x10\x67\xb3\xbe\x7f\x94\xd9\x8c\x21\x46\x10\x25\xbc\x4d\x1b\x3c\x3e\xba\x52\x36\x02\x61\x30\x42\xdc\xf1\xb0\x5f\x7e\x28\x17\x98\xd4\xc6\x95\x5a\x18\x1f\xb8\xd8\x10\x35\xf3\x0d\x7b\x4a\x04\x2e\x30\xcd\xec\x3b\x59\xd4\x17\xaf\x2d\x76\x06\x76\x94\xc2\xb4\xb0\x1f\x81\xad\x4b\x30\xdb\xc3\xdd\xc5\x93\xdc\x24\x80\x3c\x37\xa2\xde\x3c\xdf\x28\x3c\xca\x76\x46\x53\x76\x4e\x35\x76\x46\x15\xb6\x31\xee\x36\xca\xc6\xb5\x6d\xb9\x96\x6f\x59\xd8\x36\xa2\x3c\x66\x03\x2c\x7a\xd1\x50\x9c\xba\xf3\xfc\x15\xc6\x29\x12\x39\xa6\x6d\x0b\x2a\xb1\xe4\x03\x6a\x59\xbe\xd5\xb0\x6c\x43\xe5\x94\x62\xcb\x40\x32\x8c\x62\x64\xdb\xd6\x7f\x2a\x84\xd9\x08\xab\x78\xc4\xdf\xe1\x1d\xdc\x87\xc7\x66\xc4\xf6\x8c\xd1\x21\x4a\x1e\x21\x59\x41\x70\x26\xf3\xfb\xe1\xb6\x10\xe0\xfc\x97\xc1\xcb\x05\xdc\xaa\x54\x03\x28\x7a\x28\x85\xc4\xb4\x2d\x4b\x1f\x18\xa5\xc9\xe9\x0a\x82\x9f\xdb\xb6\xdc\x86\x65\xe7\x22\x97\x13\x6a\x93\x12\xd7\xc2\x76\xe4\x67\x43\x1e\xda\x5e\x3b\xca\x68\x22\xb4\x3d\x6c\x8b\x3e\xd0\x8f\xc4\x03\x3f\x32\x10\x85\x8e\x2e\x6a\xb7\x0c\x94\x0b\xf8\x46\x7e\x58\xb7\x2d\x5f\x36\x96\x1c\x22\xcf\x75\xeb\x14\x37\x78\xfc\x28\xbc\xa2\x62\x4d\x87\x33\x9f\x92\x43\x53\x14\x37\x42\xe2\xb4\x30\xf4\xc4\x6b\xf1\x5d\xd0\xaf\xda\x91\xe4\x7d\x46\x0a\x38\xf0\x21\xf1\x68\xcb\x93\x73\xe4\x79\x2c\xcf\x27\x15\x4a\x8b\x46\xa6\xd5\x26\x34\xcf\xc1\xb2\xd4\xb4\x49\x21\x3c\x17\x2f\x80\xea\x16\x2f\x4d\x32\x0c\x03\xf3\x5d\xf6\x1d\xe7\xe6\xd3\x57\x9a\x32\xc4\x9b\x78\xcd\x17\xfe\x8e\x61\xa2\x0b\xde\x52\xbd\x03\x1c\x03\xf3\x6f\x41\x39\xc5\xc9\x4d\x87\x1d\x62\x12\x3a\xe8\x3b\xd9\xad\x67\x94\xeb\xfc\x9e\x8b\x5d\xe9\xa5\x3a\x3d\x08\x9b\xbb\x18\x63\x6c\x7b\x10\x64\x6e\x48\x79\xbc\x65\x42\x82\x76\xe4\xc7\x87\x41\xdb\x1c\xf2\xd8\x09\x6c\xcf\x18\x6b\x3f\x3e\x74\x0d\x9a\x89\x8b\x14\x13\x63\xbf\x44\x7b\x9e\x13\x9b\xc4\xf7\x28\x93\x09\xe5\x14\xe3\x76\xec\x78\x18\x77\xdc\xee\x02\x3e\xae\xe9\x40\xef\xae\xb8\x79\x37\x99\x50\xf6\x20\x90\x1b\x83\xab\xf5\xd0\x0b\xf8\x50\xe9\x56\xb6\x80\x3f\x52\x19\xc9\xb4\x75\x9b\xc0\x27\xd2\xb1\x66\x16\x58\xdf\x2d\xb0\x02\x0b\xac\x81\x05\xd6\xc4\x02\x2b\xb2\xc0\xfa\x7f\xff\x1f\x0b\xac\xb1\x05\x96\x05\xd6\x57\x0b\xac\x17\x16\x58\x7f\x58\x60\xbd\xb5\xc0\x7a\x65\x81\x75\x64\x81\xf5\xd9\x02\xeb\x93\x65\x6c\x18\x9f\x95\x6c\xa7\xb3\x74\x60\xa8\xdf\xe8\xe1\x74\x2f\xa5\x03\x31\xa3\x88\x3c\x49\x1d\x09\xa2\xb6\x05\x03\xcb\x8f\x30\x96\x4c\x45\x9d\xb3\x5a\x89\xe5\x2b\x1b\xa5\xac\xef\x0c\x36\x02\xd9\x35\x37\xc2\x04\x4a\x3d\x5b\x94\x73\x2f\xbd\xa3\x0e\xab\xf7\xd0\xc6\xa0\x6c\x42\x4a\xef\x11\xc7\x92\x9a\x9c\xf7\x45\x8e\xb6\x50\x7b\xca\xf9\x1c\x19\x75\x93\x10\xc3\x63\x14\x41\x80\xe5\x49\xb1\x65\xc9\x88\xd2\x16\x4d\x7f\xcf\xd3\xdf\x49\xfa\xcb\x2c\xff\xa6\xcd\x4f\x19\x43\xda\x21\x9c\x18\x5d\xe2\x14\x28\x4e\x34\xdc\x79\x2f\x9a\x6a\x4b\x0f\xa0\x6b\x3b\x74\xf9\x5b\x1c\xb1\xc6\x4a\x4f\x3e\x39\x42\xd8\x88\x89\x6d\x0d\xd2\x4f\xb8\xbd\xe1\x27\x54\xf5\x7f\x45\x97\x56\x34\xa2\x55\x47\xd6\x6d\xb3\x19\x7a\x03\x74\x1f\x99\x49\x19\x9f\x9a\xe7\x14\x6a\x6b\x93\x9f\x54\xf0\xb0\xf7\x35\x59\xf2\xd1\x63\x84\xe7\x0a\xfb\x8c\x68\x03\x8c\x24\xdb\x61\x1d\x96\x3b\x76\x81\x22\x5a\xda\xf6\x5c\x5f\x25\xfc\xc9\x8d\x1d\xcc\x81\xca\x9d\x81\x73\xcc\xcf\x50\x24\x53\x58\x66\x12\x48\x19\x1f\x30\x89\x31\x0a\x7b\xb4\xb0\x99\x4b\x3d\x6e\xe4\x56\xd4\x73\xb1\x11\x20\x9a\x23\x0c\x01\x71\x21\x21\x71\x86\x13\x46\x24\xee\x04\xd2\x1f\xb2\x93\x74\xa1\x47\x3c\x57\xea\x1e\xa6\x07\x23\xa9\xa9\x1c\xc1\x88\x4c\x61\x4a\x42\x08\x49\x00\x01\x49\x20\x21\x21\xde\xef\xc9\x30\xd2\xfb\x4a\x14\x0b\xf3\xb9\x7b\x86\xd1\x48\xe6\x32\xc4\xa2\xeb\xb3\x24\x5f\x9d\xa0\x4b\x46\x20\x6a\x20\x53\xd0\xa6\x00\xe1\xa1\x8b\x47\xe6\xf1\xed\xa8\x19\xe2\x7a\x08\x53\xf5\xac\x47\xc3\x11\x9a\xca\x47\x5b\x59\x3e\x0b\x14\x1e\xb8\x18\x2b\x8a\x1a\x19\x70\xa3\x7a\x88\x9b\x59\x51\x85\x6e\x2a\x9f\x2d\x22\x12\x16\x12\x17\x65\x63\xff\x3a\xb3\x68\x78\x98\x77\xfb\xca\xa3\xa5\x37\x88\xc2\x6b\x79\xb8\x14\x66\x99\x00\x8c\x73\x73\x41\x48\x39\xea\x8f\x79\x42\x82\xec\x19\x33\xc8\x59\x51\xba\xd2\x86\x71\x3f\xf3\x35\x60\x7a\x73\xce\xf2\xc3\xe1\xa5\x83\x5e\xbe\x66\x63\x48\xcd\x1d\x2e\x17\x1b\x6e\x26\x96\xf5\x6c\x87\xcc\x6e\xb6\xcf\xe4\x84\xaa\x44\x10\xab\x0f\x12\xc5\x97\x66\x5a\x18\xe9\xf5\xb3\x94\x97\xaf\x5d\x52\x02\xf8\x52\x79\x08\x4f\x91\xe9\xaa\xf0\xb9\xa8\x12\x76\x21\x24\xa6\xce\x0b\xe7\x04\xab\xf2\x04\x43\x40\xa8\x91\x06\x24\x38\x88\x55\x00\x36\x88\x24\xa9\x32\x60\x24\x86\x58\x92\x2c\xc3\x20\x4a\x10\x9e\xd2\x45\x2c\xee\x43\x71\x2f\x49\x27\x28\x64\xf4\xa0\xb4\xcc\x75\x46\xf1\x79\x61\x6c\xf9\x12\x04\xbd\x9a\x14\x20\x98\x01\xe1\x64\x38\x1c\x13\x24\x5a\x02\x11\x48\x0a\x20\x21\x2d\x10\xcc\xa3\x30\x0a\x65\xd5\x6d\x1b\x59\x1e\x15\xfb\x64\x9f\x1e\xb8\x6d\xd7\x37\x5a\x1f\xd3\xb5\xe7\x03\x0e\x45\x0e\x37\x75\x02\x01\xcd\x08\x15\xe4\x0e\x08\x51\x0a\x9c\x4a\x6b\x61\x6d\xd9\x11\x4b\x96\x90\x95\x30\xf6\x2b\x95\x22\x04\x21\x6a\x0e\x1e\xb5\xf5\x97\xfb\x5e\x1a\x90\x44\x3f\xf0\xdc\xf9\xbc\x55\x7c\xd4\x92\x27\x60\x46\x7f\x43\x05\xbd\x67\xaf\x39\x6e\xd2\x85\x64\xfc\x50\x79\xcc\xae\x2a\x6c\x87\xd4\x2f\x37\x87\x5e\x4d\xfc\x55\x98\x27\xf1\x65\x1a\xd0\x52\x20\x0e\x91\x90\xbb\x0e\x5c\x31\x0b\x62\x2a\x6d\x76\xc5\x2f\x93\x0e\x02\x14\x22\x8a\xb1\x9f\x75\x57\xa4\x67\x70\xd4\x38\x0b\x92\x0d\x15\x40\x31\xb1\x29\x04\xd2\xa2\x63\x01\xd1\x8d\x14\x6b\xa1\x8c\xf2\x2f\x8a\x86\x62\x5a\x47\x2b\x96\xaa\x08\x02\x12\x22\x99\x1a\x54\xac\x25\x23\x52\x70\x3b\xde\x47\x11\x19\x1d\x24\xb8\x56\x43\x03\xc9\xd7\x05\xaf\x1f\xa4\x31\x8c\xa0\x07\x43\x18\x10\x8e\x12\x0c\x13\xc2\xd1\x08\xc3\x98\x18\xcb\x8f\x4d\xe1\x82\x74\x94\x37\x08\x8a\x6f\x7b\xb8\x56\x9b\x38\x83\x83\xb1\xca\x08\x65\xb2\xe1\x81\x40\x90\x73\xea\x09\x86\xe4\xd0\x55\x87\x4a\xfb\x83\x03\x32\xd9\xb7\xed\x81\x74\xde\xef\x11\x0f\xa6\x44\x14\xd8\xef\x1d\xc4\xfb\xb6\xdd\xc3\x2a\x83\xc5\x90\x4c\xeb\x3d\x7c\x90\x28\x1f\xd9\xe1\xe1\x28\x5d\x00\x2e\xd4\x09\xdc\x50\x27\xdd\xad\x42\x19\x3b\x39\xd2\x43\xe2\xed\x3b\xce\xe6\x58\x5b\xf5\x0b\x7d\x0a\x37\xae\xd5\xd0\x05\x31\x57\xfb\x04\x46\x30\xc6\x58\xd5\x5c\x7c\x35\x80\x49\x2e\x17\x4e\x9c\x81\x80\x93\xba\x54\x96\xcb\x9f\xed\x0b\xc3\x48\xe8\x42\x0f\xe1\xb2\x68\x10\x1a\x5e\xb4\xa1\x5c\x91\x25\x71\xc7\x6d\xab\xe1\x52\xcb\xb7\xc0\x32\x4d\x00\xb3\xa3\x22\x05\x7a\x1f\x85\x18\x83\x98\x03\x5e\xd3\xcd\x1d\x41\xd2\x61\x94\x2a\x6c\x2d\x21\x18\xb2\xb3\x07\x71\x9d\x36\x53\x9a\xca\xec\xb3\x96\x8f\x09\x68\x76\xda\xd2\x64\xc8\xb4\xa1\x92\x62\x59\xf6\xa5\xf5\xf8\x20\x76\x1a\x7b\xb5\x1a\x8a\xea\x24\xc6\x10\x1d\x90\xa0\x1d\xca\x00\x9c\x96\x72\xbe\x29\x48\x30\x39\xcb\x43\x9f\x91\x20\xde\x1f\x92\x8c\xaa\xf6\xbd\x69\xad\x8a\xcc\x54\xad\x0b\x10\x44\xb6\x06\x58\xd2\x60\x0a\x2b\x43\xbc\x45\x86\xbb\x1c\xcd\x24\x82\x80\xa2\x2f\x2a\x2f\x86\x3c\xb2\xe8\x78\xe0\xb9\xdd\xcd\x84\x04\x79\x04\x23\xd9\x00\xa2\xea\x67\xa5\xd0\x60\x70\xee\xd1\x7a\xce\xad\x38\x94\x74\x5e\xe0\xb8\x9e\x31\xd2\x49\x2e\x0a\xf3\x66\xf1\x40\x6a\x7a\x63\x84\xf4\x6a\x32\xf6\x90\x29\xdc\xd7\xa9\x81\xb0\x97\xaf\x15\xc4\x03\x46\x28\x92\x59\xe2\x60\x4a\xcd\x8d\x95\x10\x14\xe4\x29\x68\xe5\x09\xc3\x12\x27\x53\x48\x88\xcd\x34\x1e\x21\x6c\x14\x25\x83\x7e\x3e\x2a\x3d\x35\x2a\x1b\x0d\x43\x5f\x1d\x1d\xa5\x8d\x51\x59\x64\xd5\xe5\xaa\xe1\xc8\xab\x1c\x5e\xd3\x77\xfc\xc0\x6d\x3b\xd9\x9a\xe1\x70\xa0\xd8\xcf\x6e\xc5\x9d\xd1\x6d\x83\x42\x4a\x90\xac\x60\xf2\x8d\x71\xb1\xde\xfb\xf9\x9d\xb9\xf8\x4f\x96\x4a\xd1\x3a\xf5\x69\xdd\xa0\x98\x31\x35\xa3\x21\xbf\x82\x57\x62\x85\xf2\x8c\x5c\x24\x79\x7f\x48\x57\x9f\xb6\x02\xf2\x1b\x7b\xe9\xdd\x80\xc2\x44\x08\x11\x68\x28\x97\xb5\x21\x45\x5e\x93\xe5\x1b\x25\x2e\xfd\x12\x23\x1a\x55\xae\xf3\x55\x87\x12\x36\x85\x48\xac\x49\x6c\x21\x13\x4f\xe4\x4d\xbd\xc8\x87\x70\x7c\x83\x21\x94\x71\x75\xb3\x56\x20\x9a\x5f\x6e\x32\xa3\xce\xa9\xe9\xe9\xb1\xc2\xf0\x2b\xc3\xd8\xd8\x33\xda\x7b\xb6\x24\xe2\xc9\x89\x42\x71\xbd\x30\x02\xb3\x95\x60\xf9\xa0\x9a\x5b\xd5\xbc\xe4\x29\xcd\x8f\x1d\xc5\xee\x03\x98\x3a\x51\x87\x88\xec\x78\xa6\x29\xb5\x0e\x5b\x42\x66\x14\x71\xc4\xf2\x8e\x4b\xf7\xca\xb8\x4d\xfd\xa8\x6d\x30\xdf\x10\xfb\x61\x6e\x20\x5d\x3e\xeb\x2b\xc6\x9a\x17\xef\x90\xfc\x56\x69\x72\x7c\x13\x01\x84\x1b\x16\xe8\x31\xf6\xb3\x5b\x7c\x43\x33\x68\x9e\x1e\x01\x97\xec\xa1\xe1\x6d\xba\x62\x9e\x51\xbc\x6c\x1b\xbd\xfe\x94\x2f\xce\x0c\xe7\xd3\x2e\xd9\x71\x55\xa9\xcd\x8d\x4d\x23\x69\x6c\x9a\x59\x54\x6f\x7e\x36\xc8\xf5\x59\x75\xda\x2b\xe9\x89\x75\xa5\x41\xf7\xfa\x7d\x1c\x17\x08\xe8\x1a\x83\xee\x53\x9a\x0f\x82\xd8\xe6\xa5\x1f\x1b\xe9\xe3\x72\x5e\x71\x5c\xbe\xca\xe8\xfb\x29\x8a\xf1\xe2\xdd\x72\x34\x22\xb9\x27\x30\x4e\x66\xce\x59\x3c\x9d\x48\xf3\x13\xf3\xb8\x66\x18\x4f\x93\x20\xea\x27\xed\x0f\x3e\xe2\xe4\x8f\xd4\xb5\x39\x03\x86\x97\xd2\x4c\x07\xcb\x60\x60\x19\xb0\x6d\x59\xa6\xa3\x5c\x94\x5b\x19\x85\x59\x94\x36\x88\x49\xa7\x9b\x6a\x2c\xb8\x12\x60\xdd\xfd\xf0\xd0\xad\xd5\x12\xf1\x07\x8d\xec\xc4\xf6\x0e\xa3\xdc\xa6\x5b\x49\x2f\x91\x33\x12\x44\xa3\xc4\x38\xda\x48\xa6\x67\xca\x32\x08\x85\x0e\x49\x20\xb4\x13\x8c\x61\x07\xa1\x91\x4d\x12\xdb\xc3\x87\x11\xc6\xfb\x58\xa6\xff\x24\x28\xb0\x3d\x7c\x5b\x5b\x6a\x64\x9b\xcb\x38\x17\xd5\x94\xae\x96\xe1\x85\xd8\x22\x19\x9d\xd0\x9b\x32\x46\xa3\xde\x4c\x9d\x5b\xe9\xbb\x8e\xdb\x15\xdf\x19\x6f\x00\xe9\x49\xc8\xc0\x84\xec\xd3\x5e\x38\x0e\x46\x6d\xab\x21\x20\xd3\x3b\xe5\x51\x61\x40\xa9\xfc\x08\x23\xd1\xfb\x9b\xd9\x88\xf1\x5c\xf1\xdf\x71\x9d\x7f\x74\x9b\xe7\x50\x19\xd0\xb1\x63\x73\x19\x07\x77\x81\xb2\x21\xd5\x75\x81\xd2\x24\x63\x0c\x85\x23\xc8\x09\x65\x3d\x1a\xf1\xb6\x75\x5b\x34\x38\xbd\x13\x0d\x9e\x9a\x50\xe3\x30\x9a\x26\x6d\xeb\xff\xfb\xbf\xfe\x6f\x01\x25\xef\x04\x4c\xaf\xf0\x51\x41\xd4\xb6\x5e\x06\x2f\x05\x44\x14\x48\x27\x0c\xc3\x08\x22\x5b\xf6\x10\x25\x4f\x04\xf7\x92\xa7\x66\x92\xbe\xe4\xa1\x19\xf4\xd3\x93\x53\x18\x66\x07\xa3\x30\x20\xe9\xf9\xe7\x44\x9f\x76\xc2\x98\xe8\x23\xcd\x0b\xf3\xf0\x12\xce\x49\x7a\x3c\x79\x96\x9e\x46\x6e\x59\xd2\x04\xed\xac\x8d\xc6\x64\xc7\x85\x33\x62\x9d\x5b\xd8\xff\xd6\x39\xeb\xce\xe7\xf9\x89\xd9\x85\xdc\x23\x78\x2d\x0c\xe7\x39\x14\xa0\xc1\x7c\x6e\xb9\x96\x0a\x84\x66\x11\x71\xc1\xd4\x96\x6b\xc7\x05\x4e\x2c\xd7\x02\x46\x2c\x92\xba\xf1\xce\x88\x75\x4b\x80\x0c\xdb\xa1\x6f\xfd\x1f\x79\x55\xab\x35\x3b\x67\xf1\xd5\xc7\x6e\xea\x4d\x7f\x86\xdb\x96\x6b\xd9\x67\xf2\x50\xe7\x52\x6b\xfc\x7d\xcb\x82\xd3\xac\x70\xec\x37\x3b\xb7\x27\x46\x89\x91\x78\x7f\x49\x44\x93\xe1\x88\x34\x3b\x7d\x3a\x38\x9f\xb0\xe4\x76\x0e\x92\x77\xf0\x95\xee\xe0\x10\x62\x18\xc1\x90\xcc\xe0\x8a\x9c\xca\x70\x84\x3d\xd9\x0d\xf8\x8a\x5c\x22\x8a\xed\x2b\xa0\xc4\xb2\x72\x1f\xe1\x63\xa2\x54\x5a\x07\xee\x7c\xee\x35\xe9\x81\x2b\x43\x6d\xa5\x06\x5d\x14\xb7\x7b\xfe\x65\x41\x8f\x7c\x81\xe1\x5c\x6e\x42\x4c\xc2\xa5\x7e\x16\x19\x58\x8e\x68\xca\x0a\x22\xe2\x41\x48\x1c\x19\x17\x43\x99\x1f\xaa\xb3\x01\x99\x27\x5b\x9d\x02\x34\x2c\x3f\x24\x9c\x44\xa6\xc2\xd9\xb5\x7c\x19\xe8\x47\x6e\x87\x22\x0c\xf9\x6b\x33\x49\xa2\x2d\xb1\xc8\xe7\xdb\x74\x4b\x72\x18\x14\x12\xc3\x85\xfc\xd0\x6d\xe7\x87\xc3\x21\xce\xce\x7d\xb9\xed\x09\x2e\x2d\x1d\x4f\x8e\x65\x4c\x21\x9b\xd6\x6a\x96\x6d\xed\x10\xd2\xaf\xd5\xd0\x31\xd9\xf1\x30\x0c\x09\x3a\x6e\x5b\x48\xf4\x5d\xbf\xdd\xf7\xa7\xbe\xe5\xc8\xeb\xf9\x5c\x3f\xb4\x2c\xbf\x8f\xed\x21\x5c\x11\x64\x25\x8a\xd4\x3e\x75\x7e\xb7\xbf\x37\x77\xbb\xf2\x14\xf5\xca\x46\xc7\xb5\x5a\x06\x8d\xe5\xd9\x2a\x1c\xa9\x8c\xc0\x44\x29\xc5\x74\xb4\x10\xdb\x0e\x0f\xe2\x7d\xb1\xc9\xbd\xf3\xfb\x21\x1a\xa9\xd8\xb8\xec\x41\xdc\xa7\xf7\xb8\xd8\x0f\xce\xe7\xa3\xc3\xbd\xdf\xf0\x8f\x2b\x82\xee\xdc\x25\x84\x8c\xda\x41\xf6\x3d\xf2\x48\x33\xbb\xc1\x6a\x88\xcd\x2f\x4f\xf3\x2c\x2e\xc6\xb5\xda\xce\x40\x8e\x9d\xe0\xde\x62\x77\xa9\xe8\xf7\x84\x0c\xf5\x11\xa8\x6e\x90\x7d\xa5\xc7\xf0\x2d\x39\x39\x98\xb4\xf3\xc3\xaf\x89\x73\x92\x1d\x9e\x71\x41\xc1\xfa\xc0\x67\x5c\xab\x69\xe4\x6f\x6d\x0a\x6f\xf5\xba\x38\x71\x34\x2e\x5f\x54\x09\x6f\x89\xe8\x06\x96\x8e\xff\x81\xe5\x53\x32\xb4\xa9\x7d\x65\xbf\x35\x69\x80\xa8\xe7\x6f\xc5\x1b\xf3\xf9\x5f\xe2\xf9\xdb\xec\xe3\x4e\x88\xae\xe7\xf0\xd0\xc3\x76\x8a\x28\x7d\x7d\x52\xf6\xc2\xa3\xe4\xad\x02\xd1\x34\x92\x18\xae\x82\x17\x39\x2f\xbb\x68\xdf\xf5\x9b\x1d\x31\xd7\x8c\xd9\x68\x2c\x56\x99\x9e\xa0\xe5\xc1\x05\xc6\x7e\x95\x4f\x47\xcb\x15\xaf\xe0\x6a\x9d\xf1\x80\xb4\x93\x00\xdd\x9a\x1f\xa9\x39\x4d\x1f\xd4\xc5\x2b\x46\x07\xe1\x55\xe5\x59\x6a\x1f\xa1\x8c\x8d\x4a\xcb\x05\x6b\x60\xa9\x40\x52\x1b\x1d\x9a\x66\x27\x5d\x10\x92\x6c\x0b\xe4\xb9\xe0\x48\xbb\x46\x41\xc4\x51\x73\xb7\xd2\x1a\x3d\xdb\x97\x87\x75\x8a\xed\x78\xb1\x58\x2c\xd0\x8f\x4c\x3e\xf0\x2d\xb0\x40\x8b\x10\x7e\x67\xb7\x0b\x7a\xa9\xf4\x3b\xd6\x2d\x0b\x2c\xab\xbb\xc0\x70\x9f\xbc\x6b\xa8\x2f\x84\xc7\xd9\xa5\xfa\x58\x49\x8e\x97\x94\x30\xe4\xb9\x18\x8e\xe4\x85\xc9\xe4\x4c\x09\x3c\xf7\x63\xec\x74\x4d\xe9\x5b\x6f\x5a\x5c\xfd\x71\xa9\x03\x5a\xa6\x12\x11\xf3\x2f\x32\xbd\x26\x1c\x0f\xef\xdb\x36\x3d\x08\xf7\x71\xd4\xa1\x8e\xd7\xd5\x8a\xa1\x4b\xda\x38\xc3\x62\x6f\xd8\x0c\x0d\x0f\x07\x43\xad\x5a\x6d\xd9\x47\x7d\xd6\x31\xad\x30\x23\xe0\x38\x73\x80\x0c\x52\x19\xfe\xe8\x8a\x97\x77\x69\x17\x69\xd6\xa1\x3c\xb7\x82\x69\x00\xd1\x79\x19\xbc\x84\x97\xc1\xcb\xae\xdf\x11\xac\x2d\xea\x84\x8e\xd7\xf5\x55\xa0\xc9\x03\x7d\xde\x24\x1e\x8b\x87\x3c\xd7\x18\x76\x17\x10\x54\x6d\x13\x36\x77\xba\x94\x3d\x36\xa2\x7c\x9b\x6d\xcb\xc0\x52\xe9\x61\x95\x3e\xfb\x63\xc4\x66\x32\xe0\xbd\x94\xdd\x72\x75\x19\x6f\x24\x31\xe3\xe8\x88\x36\x02\x0c\xd2\xff\x2d\xf8\x5b\xce\x96\x72\x97\x9a\x6f\x29\x82\x9b\x4b\xe7\x81\x94\xce\x83\xc6\xb7\xd4\xcf\x3b\xa9\x98\x93\x91\x59\xc3\x0a\x31\x5e\xd0\xa1\x16\xe3\xb9\x36\x8c\x65\xd5\x32\x7b\x50\xa9\xac\x38\x36\x29\xd9\x05\x99\x2b\x99\x88\x15\xa1\xd3\xd8\x13\xd2\x73\xc9\x54\x3b\x29\xe8\x31\x08\x6f\x07\x05\x02\x8b\x81\x83\x0b\x11\xee\x9a\xc7\x0a\x99\x27\xa8\xb6\x4c\x2e\x5a\x2c\x4b\x8a\x8f\xf6\x71\xdc\xa1\x5d\x82\x10\xb5\x3d\x5c\x67\x0e\xa2\x4e\x84\xeb\x1c\x37\x65\xb4\x95\xcc\x33\x20\xe3\x97\x37\xda\x6f\x76\x38\x30\x99\x4b\x94\xd8\x42\x2c\xb0\x19\x8c\xa4\x07\xa3\x78\xbc\x80\xe4\x26\xc4\x10\x91\x92\x5d\xaa\x79\xb8\x34\x2a\xd9\xa7\x26\xd7\x4d\xb1\xe0\xda\x29\x16\x1e\x78\xed\x0e\x97\x19\xa3\xbb\x7e\x78\x48\xa2\x76\x27\xee\x44\x8e\xd7\x05\xd6\xf5\x3b\xb1\x9c\x7b\x10\x77\xc2\xae\xfc\x90\x1b\x13\x62\x82\xfd\x44\x14\xe4\x3a\x08\x44\x15\x25\xc6\xe6\x17\xad\xa0\xc4\x63\x83\x12\x65\xbf\x6a\x6a\x0c\xaa\xa9\xf1\x29\x4a\xaa\x7d\xff\x4e\x0a\xac\x55\x10\x61\xae\xdd\xf0\x4a\x7e\xe2\x59\x8f\x91\xb0\x5d\xe4\x74\x1c\xc2\x8c\x10\xb3\xaf\xb8\x91\x8a\xa2\x34\xe9\x0d\xa3\xfc\xcc\x1d\x2f\x3f\xab\x4f\x37\xec\x65\x2d\xc3\xcf\xf1\x97\x0d\xaa\x2a\x28\x34\xd6\xd2\x58\x54\xc5\xc6\x3b\x5c\x91\x10\xef\x44\x82\x6e\x7e\xbd\x7a\xe1\xe4\x06\x7c\xc9\xd4\x25\x48\x93\xe2\xb7\x72\xb5\xfd\x1d\xc3\x0b\x9a\x79\xea\xc1\xab\xfc\x3a\x27\x82\x7b\x46\x10\xc5\xfc\xe4\xb3\xe8\xd1\x44\x64\x1c\xab\xf2\x47\x68\x5c\xbe\xbe\x40\x36\xc7\x18\x78\x1e\xf6\x49\x0a\x28\x55\x1d\x22\x70\x96\x4b\x41\x28\x8f\x06\xaa\x94\xd6\x14\xe5\xfe\x86\x88\x39\x9e\x80\x47\x0c\x3c\x79\x12\x88\x81\x89\xb2\xcb\xca\x25\xb5\x43\x0d\x55\x08\x40\x85\xdc\x60\x11\xd4\xe1\x07\xcc\xa1\x6d\xee\xcb\xe2\xf1\x60\x50\x8a\xc4\x69\x24\xe1\x40\xd4\x68\x2d\xc5\xa9\x11\x08\x6b\x7b\xbe\x21\x87\x31\x15\xf9\x3b\x2c\x93\x2d\x83\x08\xe2\x34\x3a\x98\xf4\xab\xdb\x92\xf9\xf4\xd3\x06\x31\x9c\x06\x84\x22\x24\x2e\xe2\x8b\x31\xec\x20\x76\x10\xd5\x6a\xf1\xa1\x9b\xc5\x0a\x4b\xb6\xfa\xf1\x8f\x34\x89\x59\x60\xb4\x8a\xa5\x7d\x12\xab\x3e\x59\x5c\x0e\xc3\x11\x45\xc1\x01\xab\xd5\xd8\x41\x64\x30\x7f\x08\xd3\x24\x12\x55\x1d\x7d\x8f\x16\x5d\xec\xc3\x01\xe2\x87\x84\xcb\x5d\xce\xbe\x3c\x6b\xd8\x61\x88\xe3\x7d\xcc\x33\x87\x4e\xee\x78\x78\x81\x01\x15\x55\x49\x62\xdb\x79\x48\xa8\xd8\x03\x45\x07\xae\x2a\x6f\xdb\xd1\x01\x71\xf7\xd5\x0d\x47\x14\xc4\x44\xdc\x61\x88\xe2\x7d\xbc\x9f\x1f\x1f\x3a\x4e\x74\x58\x00\x33\xa0\xe4\x79\x11\x93\xe1\xab\x7a\xc5\x88\x5f\xdc\xb0\xbe\x7f\x41\xb3\xd6\xd9\x1c\xc3\x2b\xe3\x36\x12\xdd\xf3\x82\x8a\xbf\xaf\xb4\x1d\x55\x3a\x7c\xe8\x85\x98\x21\x4a\xaf\x4d\x2f\x28\xab\xcc\x32\x55\x0a\x76\x00\x86\x55\x40\xad\x46\xc5\x26\xf5\xd0\x6b\xeb\x1e\x46\x51\xbb\x82\xf6\xc5\xf5\x6d\x4a\x88\xbb\xa8\x3a\x07\x4f\x3f\x0c\xb9\xa0\xa1\xb0\x1f\x4a\x53\xad\x05\x86\x50\xce\xed\x07\x94\x14\xc6\x49\x6c\xd9\xc5\x17\xbe\x88\x23\x3e\x44\xae\x9c\x16\xe2\xfe\x71\x3c\x65\x09\x72\x41\xfe\x2f\x8f\x11\x4f\x0b\x3d\x9a\x8e\x46\x9f\x68\xc0\x90\x0c\x11\x92\xdd\x61\x9b\x57\x94\xc8\x64\xc1\x02\xa8\x53\x2a\x5a\x2c\x97\x77\x5d\x19\x0a\x6f\x3d\xa0\xab\x7b\x3a\xef\xd9\x52\x7c\x09\xd5\xcf\x65\x4a\xe5\x85\x8f\x31\x4f\x25\x8b\xd5\x36\x29\xae\x53\x0c\xbc\xd4\x61\xfc\x9a\x0e\x93\x8e\x65\xc5\x3a\x4a\x88\x6d\x56\x97\xf9\xcb\xd4\x58\xc9\xbd\xcf\x57\x4a\x1e\x50\x78\x43\x09\x7a\x90\x3a\x5a\x41\xe5\xc0\xc9\x19\x7c\xa3\x51\x53\x2d\x97\x3d\xaa\x2e\xaf\x1f\xaf\x14\xce\x29\x14\xf2\x5a\xf5\xf2\x77\x94\x47\x73\xed\x70\xa6\x78\x64\xda\xb6\x2f\x94\xbc\x31\xd6\x95\x87\xe6\xd1\x4c\xe5\x68\xc9\xcf\x96\xb5\xcb\x2b\xec\xe8\x9b\x19\xc2\xf6\x6f\x0e\xc5\xb7\x7f\xbb\x7e\x60\xf2\x3e\x79\xa8\x3c\xd7\x32\x74\xf6\x6f\xf5\xd5\x7d\x82\xb8\x43\x9d\xbb\xf4\x4e\xfa\xf9\x82\x39\x7c\x8f\x23\x7a\x2c\x57\x01\xdd\x09\xe5\xa7\x18\x37\xef\xba\x77\x7e\xa7\x7b\x82\x0d\xbd\x49\x87\x54\x8e\xf4\x4b\x4a\x1e\x52\xe4\x62\x78\x22\x2f\x3c\x0c\xcf\xe5\x45\x0b\xc3\x23\x79\xb1\x8b\xe1\xbb\xbc\xb8\x83\xe1\x9d\xbc\xd8\xc3\x70\x5f\x5e\xdc\xc5\xf0\x98\x12\xf4\x52\x93\xc8\x13\x7d\xf1\x5c\x5f\x3c\xd2\x17\xdf\xf5\xc5\x3b\x7d\x71\xdf\x20\x2c\x4a\x0e\x2b\x28\x08\x32\x7b\xf0\xaa\x3e\xe2\xd9\xfb\x9f\xed\x91\xdf\xef\xde\xa1\x7b\x20\xeb\xce\x47\x52\xac\xd0\xef\x29\x79\x4c\xe1\x16\x25\xe8\xf1\x5a\xea\x57\x61\x01\x52\xba\x0c\x47\xa3\x30\xa1\xbd\x38\xea\x27\x02\x0d\xdd\xad\xcb\xe7\x27\xd9\x23\xd1\xc2\x14\x34\x9a\x72\x9a\x2c\x11\x68\x46\x0f\x8a\xe1\x53\x7b\xf7\x2e\xdd\xbb\x86\x12\x70\x53\x00\xad\x23\x74\xd5\xa7\x8a\xd0\xbf\x51\x72\x8b\xc2\x07\x4a\xd0\xad\x5f\xf7\x61\xd7\x7d\x85\xf8\xee\xeb\x3e\xe2\x2e\xbd\xb3\x76\xb2\xea\x1e\x93\x5f\xf1\x07\x25\x1f\x28\x7c\xa2\x04\x7d\xf8\xc9\xaf\xb8\xae\xc9\xe2\x23\xaf\x6b\xb2\x47\x77\xd7\x35\xf9\xdd\xdb\x07\x59\x0f\xc9\x56\x3f\xa3\xe4\x13\x85\xa7\x94\xa0\x4f\x95\xad\xc6\x3f\xae\x69\xd4\x3a\x36\xe9\x50\x99\x36\xeb\xe9\x9a\x55\x69\xa3\xf5\xbf\x92\xdb\xc9\x06\x98\xeb\x92\x5a\x89\x56\xac\x32\xa9\xf0\x92\x2e\x2a\x65\x90\xb4\x07\x99\xa3\xcc\xf0\xb0\xff\x94\x1a\xcb\xce\x6b\x4a\x9e\x1a\x8c\xf8\xe3\xb5\x8c\xf8\xdd\xdb\x07\x39\x2f\xd6\x37\x9a\x1d\xcb\xfb\x25\x8e\xfc\xee\xed\x83\x8d\x98\xb2\xc6\x46\x0b\xa8\xaf\x65\xcd\x26\xa3\x7d\x6a\x32\xda\xcf\x94\x7c\x94\x8c\x96\x72\x71\x21\x56\x6e\x79\xd1\xc2\xc0\xe4\xc5\x2e\x86\x48\x5e\xdc\xc1\x10\xca\x8b\x3d\x0c\xb1\xbc\xb8\x8b\x21\xe0\x04\x7d\xd6\x84\x43\xd3\xa3\x6f\xe0\xfa\x82\xe9\x8b\x48\x5f\x84\xfa\x22\xe6\xeb\x26\xc9\xdf\xec\x8e\xeb\x3a\x43\xf2\xd8\x6b\xe6\x89\xe6\xbc\x72\x9a\x24\x9c\x04\x1c\x46\x9c\xa0\xe0\xba\x76\x97\xa5\xc6\x1b\x7c\x4a\x51\x76\x34\x1f\x5c\x2f\x8e\x14\xa0\x9d\x65\x04\xd7\x7c\x6d\x41\x8e\xc4\x5b\x23\xfe\x6b\x05\x49\xb3\x86\xb2\x2c\x59\xa8\xdd\x14\x27\x8b\x9d\xb9\xc1\x34\xc9\xa7\xbb\x89\x73\xb9\x92\x0a\xd1\x72\xca\xc9\xc8\xb0\x6c\x97\x79\x4d\xc5\xa6\xcb\x3d\x20\xb4\x31\xab\xd5\x68\x63\x76\xe0\xb9\xae\xde\x04\x67\xfb\x44\xc7\x03\xda\x18\x03\x6d\xf4\x81\x36\x1e\x03\x6d\xbc\x00\xda\x38\x01\xda\x78\x6e\x6a\x7a\x0b\xdb\x82\x99\xb1\xa5\xcf\xf0\xd0\xc6\x6c\x25\x22\xc3\x70\x6c\xd3\x66\x89\x3f\x8d\x77\x6f\x1f\xac\x6b\x5f\xb1\x81\x45\xf2\xab\x6c\x63\x86\x74\x5d\x63\x4d\x9b\x33\x5e\x4c\xf2\xf0\x63\xe6\x53\x18\xfb\x1c\xfa\x3e\x83\xc7\xbe\x0b\x2f\x7c\x17\x4e\x7c\x17\x9e\xfb\xee\x62\x31\xe2\x06\x5b\x1a\x70\x98\x70\x18\x73\xb8\xe0\xe4\x87\xe5\x58\xf2\x2c\xd8\xb7\xb6\x2d\x70\x7d\xcb\xb5\x16\x70\xce\x49\xf3\xaf\x3f\x93\xfa\x9f\x7d\xbb\x09\x67\xe2\xe6\x76\x13\x66\x9c\x34\x3b\x7f\xfe\xf9\xd7\xad\xba\xdd\x9e\x77\xfe\xec\x22\xdc\xf8\xb1\xe8\x36\xcf\xf3\x71\x3d\xe5\xa5\xa8\x1a\x07\x6e\x3b\x45\x1f\x12\x14\xb5\x1d\xea\x53\xac\x0c\x1c\xc2\x92\xbf\x5c\x64\xa3\xf8\x80\x19\x67\x7d\xcc\x89\x8d\xb3\x3e\x3b\xf4\x43\xe3\xdb\x2f\x79\x61\x92\x69\xfb\x84\x19\x07\xeb\xcf\x3f\x6f\xd5\xcc\x74\x00\x47\x26\xa8\x11\x7b\xc8\xfa\x0b\xb5\x7d\xcb\x56\xf9\x83\x2f\xb9\x76\xaa\x9b\x5b\xd8\xb6\xb0\x05\x56\x68\x22\xb9\x2a\x23\x79\x11\x4c\x50\x9a\x7a\x58\xc9\xa3\x1d\x5a\x3c\x5e\x07\xde\x35\x07\xeb\xb8\xd4\x33\xe7\x3c\x8d\x42\xa4\xfd\x81\x81\xd9\x9e\x61\x03\xdb\x46\xb4\x71\x49\x6c\xe9\xd1\xc3\xe4\x4f\x16\x76\xcb\xf1\x0c\xcd\xe9\x4f\xa0\x9d\x5e\x8f\xf6\xed\x06\x68\x5b\x25\xb4\xef\xae\x47\xfb\xe2\x27\xd0\xbe\xbf\x1e\xed\xab\x9f\x40\xfb\xe1\x7a\xb4\xf7\x36\x40\x7b\xa7\x84\x76\x76\x3d\xda\x07\x3f\xd1\xda\x14\xad\x8d\xe4\xcf\xe1\xdd\xdf\xdb\xde\x3f\x5c\xd7\x6f\xd1\x5d\xbc\xae\xaa\xaf\xa5\xaa\x9a\x7f\xa1\xcf\x78\x8e\x3a\xb6\xd3\xfd\xb3\xff\x67\x1f\xa3\xb6\xef\xb7\x91\xbc\xc4\xed\xe6\x72\x33\xee\x96\x9a\xf1\x99\x44\x1d\xaf\xdb\x76\x7d\x07\x45\x9d\x56\xd7\x46\x51\x67\xb7\x3b\x9f\x5b\xae\x2b\x13\xcf\xad\x6e\xc8\x9b\x9f\x20\xd3\x6f\x64\xb7\x2e\x10\x3a\xbb\xeb\x30\x7f\xf9\x89\xde\x1c\xcb\x90\x5d\x8e\xb7\x0e\xef\xc3\x9f\xc0\xdb\xbf\x7e\xf0\x5f\x6e\x80\x76\x77\xa9\xb9\x2e\x6c\x84\xfc\xc9\x4f\xb4\xf9\xf1\xf5\x68\x9f\xff\x04\xda\x17\xd7\xa3\x7d\xf4\x13\x68\x4f\xae\x47\xfb\xfd\x27\x7a\xf8\xf9\xf5\x68\xdf\x6d\x80\xb6\x3c\x5d\x9e\x9b\x02\x9c\xc0\x2c\xb6\x8f\x6b\xe7\xc9\xfd\x52\x2d\x67\xd7\xcd\x93\x02\xae\x02\xaa\xc7\xd7\x35\xb8\xd4\xd8\xd7\xd7\xf7\xc1\xfb\x1b\xa2\x4c\xae\x47\x79\x8b\x17\x44\x6d\x21\x3f\xe4\x6a\x19\xe0\xd0\x32\x96\xd0\x6f\xd5\xb0\xa9\xaa\xa3\x04\xfc\x61\x2d\xf0\x6d\xaf\x35\x9f\x7b\xad\x52\x99\x3f\x96\xca\x78\xf6\x7b\x9a\x2a\xb8\xbf\x8a\x6d\xa9\x4c\x6a\x0c\xbb\x46\x99\x4f\xd5\xf5\x14\x35\x0f\xa5\x32\xcf\x8a\x65\x52\x14\xb6\xe5\xba\xae\x11\xb9\xe4\xe9\x0a\xcc\x5a\x15\x5a\x6a\xfc\xeb\x55\x0d\x49\x95\x28\x25\xf0\x8f\xd5\xe0\x27\x46\x93\x4d\xf0\xcf\xdc\x74\x7b\xd6\x5a\x4f\x3d\xda\x32\xfa\x47\xfb\x37\x9f\x1b\x5e\x91\xac\x8c\xff\x65\xa1\x27\x1d\x4f\xf5\xa5\x59\x09\x67\xeb\x2a\xe1\x87\xe4\xce\x7c\xae\xaa\xfa\x2e\x50\xf8\xdf\xa9\x3e\x24\x33\x3c\x29\x59\xc9\x8d\x5d\x22\x85\x53\x8e\xbe\x97\x47\xd2\x46\x77\x08\x21\xf2\x2e\xab\xac\xdc\xa4\x88\x95\x37\x73\x12\xcc\xf0\xb9\x5c\xfa\xce\x27\xd7\x7e\x67\xbc\x54\xa6\xa4\xc3\xbe\xed\xb9\x6e\xa9\x4c\xb0\x54\x06\xa5\xdf\x86\xaf\x2d\x9b\x5c\x5f\x1f\xbd\x03\x1c\xee\x98\x49\xb4\x58\x21\xf7\xe3\xd2\x68\xa8\x06\xb0\x6c\x4c\xd8\xd2\x98\x2c\xb5\x6b\xa9\x8e\x69\x79\xbc\xcb\xea\xda\x2d\xad\x54\x38\x54\xdb\x08\xc4\xeb\xc4\xf1\xc0\xb2\x2d\x8c\xed\x53\x8e\x78\xf3\xae\x3b\x77\xc1\x72\x2d\x68\xa9\x07\xb7\xef\xea\x5b\xc3\x0d\xa9\xfa\xf3\x33\x1d\x44\xa9\xb7\xfa\x2b\xc1\xab\x39\xcd\xf0\x3a\xf8\x6a\x66\x33\x58\x2a\xe6\xd9\x09\x4f\x49\x67\xca\x2b\x99\xcd\x64\x65\x55\x6b\xf9\xcd\xb8\x58\x2c\xc5\x52\xe6\x37\x17\xab\x91\xaf\x60\x39\xe7\x6b\x9a\x53\xcd\x75\xce\x56\x96\x58\xc5\x78\x66\x65\x1a\xd1\xfa\xbd\x35\xbc\xe7\x74\xa9\x96\xcf\xd4\xec\xd8\xaa\x39\x79\x79\x5d\x3d\x26\xfb\x89\x04\x16\x3f\xe2\xcb\xec\xe7\xa8\xcc\x7e\x2e\x35\xfb\x89\xca\x63\xab\xd8\x8f\xbc\x33\xeb\x2b\x37\xec\x6a\x89\x03\x69\x48\x63\x73\xb9\xdc\xad\xfc\xba\x0f\x3e\x59\x39\x14\x6b\x79\xc9\xdb\x2a\x3e\x74\x99\xf1\xa1\xeb\x8a\xbf\xd8\xa8\xd6\x25\x4e\xf1\x6a\x99\x1b\x95\xc7\x67\x99\x21\x95\x47\xa9\xaa\x81\x4b\x35\xdd\x63\x99\x45\x8b\x65\xbb\xc5\x19\xf2\xc0\x78\x77\xdb\x78\xfe\x95\x15\xe2\x9d\xe6\xbb\x1e\x56\xf6\xf6\x52\xa2\xa0\x4d\xa5\x20\x68\x6c\x62\x58\x49\xbb\xa0\x74\x56\x06\xc4\xc3\x02\x15\x2c\x85\x9d\xb5\xa9\x6f\x9b\x16\x1f\xc6\x86\x83\xa1\x42\x54\x4b\x19\xe5\x31\xcd\x9b\xfc\x10\x61\xe8\x91\x69\x6a\x4c\x04\x43\x32\xd5\x1e\xfc\x03\x32\x42\x56\xe3\xf6\x73\x0b\xc3\x44\x5c\xfa\xb7\x4f\x2c\x0c\x63\x71\x79\xfb\x89\x7f\xfb\x85\x85\xe1\x42\xdd\x6c\xdf\x9e\x58\x18\xce\xe5\x4d\xb0\x7d\xbb\x6f\x61\x38\x93\x37\x67\xea\x66\x26\x6f\xee\x5b\x18\x4e\xe5\xd5\x27\x0b\xc3\x25\xe9\x74\x02\xf0\xc0\xa3\xbb\x5d\xe8\x04\xb0\x07\x7b\xe9\x95\xb7\x07\x9e\xbe\xde\x75\x61\x97\xde\xe9\x42\x27\x06\x0f\xee\xa6\x57\x7b\xb0\x4b\xf7\xd4\xb3\x3d\xf8\x47\x7a\xb9\xeb\x82\xf7\xbb\xbc\x0e\xc1\x83\xdd\xbb\xe9\xe5\x2e\x78\xae\x7e\x7c\x17\x5a\x9e\x7e\xee\xb5\xe0\xce\x6e\x4b\xde\x44\xe0\x81\x54\x56\xcb\xeb\x16\x78\xbf\xb5\x54\x09\x26\xea\x94\x2a\xfd\x2e\x74\x38\x78\xd0\xda\xfb\x47\x8b\xde\x95\x37\xbb\xf0\xdb\x6f\xbf\xdd\x95\x37\x54\xd4\xe7\xed\xed\x8a\x3b\xc3\x62\xf2\x08\x25\x99\x42\x3c\x40\x09\x3e\x48\xda\x03\x3f\x56\x17\x13\x3f\x54\x17\x63\x3f\x52\x17\x17\x3e\x57\x17\x4c\xfd\x9c\xfb\x67\x3e\x55\x97\x33\xff\x14\x23\xd3\x52\xee\x0a\xa5\xa6\x4f\x99\x8b\xb7\x4a\x96\xef\xb9\x18\xf2\xe8\xc6\x3a\xfa\x6f\x1e\x2a\x29\x73\xa2\x88\x1c\x86\x9b\x1c\x02\x6d\x65\xfc\x96\x36\x02\x8c\x2a\x55\xd7\x9d\x56\x77\x81\x71\x83\x85\xe7\x43\x8e\x2e\x21\xce\xad\x90\x09\x21\x97\x79\x64\x81\x42\x1c\x26\xd6\x4c\xfb\x03\xa2\xec\x8a\x63\xe0\x84\x62\x3f\x10\xc0\x28\x20\x97\x9d\xb8\x79\xd9\x09\x1c\xaf\xdb\x69\x75\x0f\x2e\x3b\x81\xf8\x6d\xc6\xed\xc0\xf1\xfc\xa0\x8b\x3b\x9e\x0a\x91\xea\x76\xb1\x8f\x0c\x33\xea\x42\x35\x10\x09\xb4\x9e\xc0\x2c\xd3\xc4\x49\x75\x3a\x0a\x73\x5f\x54\x7d\x31\x5d\xe3\xd2\x98\x4d\x99\x9e\xf2\x68\x9c\xde\xc4\x5c\x70\x88\x0a\xfe\x87\x0f\x19\xc6\xfe\x10\x29\x27\xc4\x2f\x4c\x62\xab\x8e\xb1\xc0\x81\x91\x21\xc2\x60\x84\x1d\x33\x23\x00\xc5\x24\x3c\xc8\x42\x0a\xc5\x72\x74\x75\x8c\x12\xd9\x91\x88\x93\x2b\x44\xc5\x7c\xc6\xb8\xad\xbd\x21\x23\x19\x6c\xce\xef\x74\x21\x16\xcf\xb2\x38\x01\x5c\x37\x63\x39\x4e\x80\x61\xe1\xa3\x08\xa9\x7d\xe4\x8f\x64\x40\x96\x69\xc9\xc1\x3e\x5b\x18\x87\xb9\x48\x46\x65\x23\xa4\x01\x78\xc1\xe0\x1b\xe3\xf6\x10\x7d\x96\x2e\xcd\xd8\x9f\x0a\x5c\x2b\xdd\x75\xa7\x50\xc9\x9c\x44\x03\x0c\x9d\x06\x33\xfc\xfb\x53\xeb\xc1\x97\x0c\x7d\xa5\xf0\x85\xc2\x4b\x0a\xef\x29\x7c\xa3\xf0\x07\x85\x67\x14\x5e\x53\x98\xe4\x79\x98\x3a\xd9\xe8\xb6\xe8\x2e\xc8\x33\x8e\xd2\x93\x16\xee\x16\xed\x51\x97\x4d\x29\x65\x90\xa7\x80\xcb\x04\x68\xd2\xb9\x48\xdc\xc8\xc0\x8f\x5c\x3c\x09\x95\x0f\x5b\x18\xf7\x13\xe9\x50\xd3\x0f\x66\x09\x04\x84\x36\x92\x61\xcc\x84\xc0\x9c\xc8\x64\x46\x63\x21\x40\x25\x30\xd2\x2f\x5e\xa8\xfb\x29\x39\xe2\x28\x14\x3c\xf8\x4a\xfe\xf6\xc5\x7d\x8c\x61\x28\xee\x63\x0c\x03\x71\x1f\x08\x16\x7c\x25\x7f\xc7\xe2\x3e\x11\xac\xf7\x4a\xfe\x9e\x8b\xfb\x91\x60\xb8\x57\xf2\x77\x46\x7e\x04\x55\x2e\x7d\x41\x27\x97\xdf\xbb\x0b\xb8\x57\x05\x13\x17\x61\xce\xaa\x60\x46\x1d\x73\x07\xda\x5d\xc0\xfd\x2a\xa8\xa4\x0c\xd5\xf3\x55\x54\x62\xff\x16\x07\x2a\xfe\x0c\xfc\x67\x1c\xce\xfd\x80\xc1\x1f\xfe\x88\xc1\x63\xff\x1b\x87\x27\xfe\x07\x0e\x5f\xfc\x3f\x38\x3c\xf7\x3f\x71\x18\xfb\x4f\x39\xbc\xf0\x5f\x73\x98\x54\xd5\x11\x76\xec\xc2\x7e\xfe\x90\x78\x2d\x51\xd5\xb7\x2a\x60\xcf\xfe\xcf\xff\x2c\xec\x9d\x9b\xbb\x78\x01\xaf\xfd\xaf\x0c\x12\xff\x0d\x83\x13\xff\x23\x87\xa9\xff\x99\xc3\x3b\x9f\x32\x78\xef\x33\x06\x97\x7e\xc4\xe0\x83\x1f\x32\xb8\x52\xad\xff\xa8\x7e\x66\x7e\xcc\xe0\x93\x9f\x30\xf8\xec\x4f\x19\x58\xb7\x2d\xff\x01\x5b\xc0\xe9\xfa\x9e\xd7\xb2\xca\x35\x9d\x6f\x80\xad\xeb\xff\x5c\x22\xbf\x66\x08\x0a\x80\xd9\x28\xf4\x18\x50\xf1\x67\xe0\x8f\x19\x9c\xfb\x6f\xc5\x28\xbc\x12\xa3\xd0\x67\xf0\xc4\x1f\x32\xf8\xe2\x0f\x18\x3c\xf7\x27\x0c\xc6\xfe\x05\x83\x17\xfe\x39\xbb\x66\x14\xf2\xbd\xce\x86\x03\x91\xb7\x6c\x69\x2c\xce\x18\x4c\xfd\x19\x83\x77\xfe\xa9\x18\x8b\x23\x31\x16\x57\x62\x2c\x8e\x97\xc7\xe2\x44\x8c\xc5\x0b\x31\x16\xf7\xf2\xb1\xb8\x2c\x8e\x85\xa9\xb0\x1a\xac\xd7\x57\x5d\x92\x89\xcc\x3b\x26\xb5\x55\x85\xc3\x9c\x2a\xa5\x5d\x61\x28\xcd\x5a\xfa\xd7\xd5\x32\xbc\x49\x2d\x67\x2b\x6a\x39\x5f\x5f\xcb\x98\x9c\xdd\xa4\x96\xfb\x2b\x6a\x19\x5f\x57\xcb\xc5\x4d\x6a\xe9\x99\xb5\x98\xf1\xa7\x8f\x33\x9b\xee\x05\xf4\xfd\x87\x82\x4f\x3c\x14\x7c\xe2\x9d\xe0\x13\x0f\x38\xfc\xe1\xdf\xe3\xf0\xd8\x7f\x22\xf8\xc4\x13\xc1\x27\x5e\x0a\x3e\xf1\x5d\xf0\x89\x2f\x82\x4f\x3c\x2f\xf2\x09\xf3\x0b\xa6\xeb\xbf\x60\x42\x7a\x37\xf9\x82\x6f\xfe\x1b\x0e\xaf\xfd\xc7\x1c\x12\xff\x3d\x87\x13\xff\x91\x60\x1d\x27\x82\x75\xbc\xe5\xf0\xde\x7f\xc1\xe1\xd2\x3f\xe6\xf0\xc1\x7f\xc5\xa1\xe8\x3e\x57\xfa\x5c\x26\x9f\x2c\xe0\xe3\xaa\x94\xfd\xc7\x72\x91\xe7\x32\x68\xdf\x4c\x74\xc2\x27\xd1\x09\x9f\xfd\xaf\x5c\x92\xfa\x7d\xbe\x30\x05\x4e\x73\x3d\xcf\x10\xea\x4e\x48\x03\xda\x77\xba\x90\x10\x19\xc0\xcf\x85\x69\xe6\xfe\x99\xe5\x9b\x29\x6c\x29\xe6\x73\xd3\x86\xdd\x66\x32\x47\x40\x72\x30\xdd\xc7\xbb\xbf\x29\xaf\xf4\xdc\x45\x54\x06\x84\x0a\x32\xef\x79\xd9\xcf\x23\x48\xb0\x4e\x4e\x83\x42\x72\xc1\x3b\x51\x5a\xe8\x1e\x47\xb6\x9d\xe0\x2e\x6e\x97\x9e\xf8\x21\x49\xe3\x40\xca\x90\xd8\x96\x6b\x01\x8a\x65\x7e\x6a\x95\xb7\x25\x46\x4c\xc8\x3c\x10\xe8\x54\x7a\x30\x92\xfe\xf8\x99\x58\x5a\xd5\x82\x20\xcf\x2b\x62\x4a\xd1\xd7\x76\x17\x19\x72\xe4\xfd\xc3\x75\x75\xfe\x7b\x4f\x06\x20\x3c\x46\x31\x50\x60\x32\xbd\x8c\x8b\x77\xf2\x6c\xc8\x86\x24\x25\xdd\x9e\x5f\x5b\x61\xb4\x1d\xe3\xb2\x9c\x19\x37\x5e\x4b\x3c\x56\x52\xfd\xde\xa3\xbb\xf5\xb8\x91\xd8\xc8\x7a\x2e\x01\xda\x71\xe3\xb9\xef\x62\x9d\x52\x7f\x07\x59\x9f\x55\xc1\x5a\x0d\xc5\x8d\xcf\x44\x48\xfd\x13\xf9\x44\x3e\x78\x4c\xe2\xc6\xe3\xdb\x5e\xcb\xf6\x5a\xf5\xb8\x31\xc1\x90\x39\x95\xc6\x8d\xb1\x84\x18\x13\xeb\x9b\xc6\xfc\xcd\x17\xc5\xdf\x2b\x84\x62\x43\x11\x37\xde\x1f\x78\xf3\x79\xdc\x78\x7f\xb8\xb7\x5b\xf8\x24\xeb\x52\x42\xcd\xe7\x28\x6e\x5c\x12\x0f\x43\xda\x0e\x29\xd0\x47\xa4\xcf\xd1\x90\xa3\xb8\x31\x93\x62\x16\x2e\xe8\x33\x84\xe8\x7a\x98\xee\xc9\xc3\x36\x4d\x77\xe3\x11\xf6\xc5\xa4\x13\x6f\x13\x9e\x3a\x33\xa0\x08\x7e\xab\x8b\x46\x48\x73\xcc\xb8\x31\x23\xd1\xd2\x8e\x1d\xc4\x27\x44\xc5\x25\x04\xe2\x46\x3f\x7b\x96\x5a\x28\x89\x76\xda\x77\xf1\xed\xdf\xe4\x16\x02\x45\xa4\x57\xd1\xc4\x8a\xf6\x3d\xa1\x59\xfb\x9e\x50\xd5\xbe\xf7\x74\x7d\xfb\xaa\x1a\xb7\xd4\xb2\xa5\x66\xc9\x28\x60\xc8\xfa\x90\xf6\xab\xf5\x2e\x1b\xd7\x62\x5f\x5b\x53\x3d\x5c\xd3\xdb\xbf\xf9\x29\x7c\xdb\x13\x43\x17\x12\x3d\x0a\xa5\xfe\x37\xbb\xdf\xef\x2d\xbf\x53\xdf\x1d\xcb\x83\x45\xd1\x42\x8d\x35\x6b\x9d\xfd\x5b\x3d\x6e\x7c\x70\x50\x68\xef\xe1\xdb\xbf\xf9\xe2\xb1\x78\xf2\x4e\x3c\x91\xad\x4f\xa7\x5c\x46\x05\x71\xe3\xb1\x4d\xe2\xc6\xe7\xa6\xe7\xba\x73\x81\xf4\x85\xbc\x95\x0a\xa0\xbe\x90\x65\x65\x3b\x62\x73\x0e\x1e\x1b\x6e\x3c\x3a\x8e\x87\xe4\x52\x32\x76\x87\xf6\x81\x1a\x65\x53\x6c\x3f\x38\x48\x54\xf4\xd0\xe8\x90\x8c\x52\xea\x74\x3c\x31\x33\x24\x47\x92\x39\x92\x0c\xa6\x14\xd8\x36\x56\x81\xda\xf4\x8b\xf4\x21\xec\xa0\x98\x5c\x76\xc2\xed\x30\xda\xbe\xe0\xed\xc2\x3b\x3f\xec\xca\xc0\xb0\x24\x4e\x17\xa8\x3c\xf0\xbb\xe3\xa9\xc0\x6d\x02\xa1\x98\xf8\x46\x55\x91\xa8\x2a\x83\xd2\xf3\x46\x5f\xcc\x1a\x57\xe4\x08\x31\x98\x61\x98\x35\x3e\x92\x23\x14\xa9\xcb\x1e\x39\x42\x5c\x5c\x9e\xa6\x00\xa7\xe2\x52\x01\xc8\x4b\x05\x70\x8a\x41\xfb\x66\x2f\x6f\x4e\x8e\xd2\x54\x57\x33\xc3\xd8\x68\x9d\xcb\xf7\x02\xf8\x02\x26\x01\x4b\x68\x05\xb2\xab\x14\xd9\x8e\x77\x13\x6c\x53\xde\x7b\x74\x5d\xf3\x4e\x6f\x88\xf0\xd5\x75\x2d\x74\x6f\x80\x70\xb1\x40\x3f\xf4\x16\xce\xb7\x6e\x5f\xc1\xf6\xed\x8f\x16\x88\x27\xbe\x75\xdb\x19\x37\x6f\x3b\xfd\xe6\xed\x4f\x16\x70\xf5\xde\x79\xe2\xdf\x7e\xe1\xdf\x3e\xd9\xbe\x3d\xb1\x20\xdd\xdb\xf9\x1d\xeb\xde\x0b\x0b\xac\x57\x2f\xac\x2e\x88\x3d\x9e\xdf\xb1\x4e\xa6\x51\x3f\x98\x59\x60\xbd\x88\xd3\x8b\xb7\x53\x9a\xa8\xab\x0f\xb4\x1f\xe9\xeb\xb7\xc3\x29\x4b\x2f\x1f\xb1\x50\x5d\x9c\x04\x7c\xca\xc4\x65\x17\xb2\x8d\xa2\x42\xa9\xf0\x29\x64\x0a\x91\x42\xa1\x4a\xab\xa2\x56\x17\xd4\x86\xd2\xef\x58\x4f\x83\x68\x1a\x30\x89\x9c\x9e\xb1\xf4\xf2\x45\xc0\x7a\x43\x0b\xac\x7b\x13\x16\x8e\xe4\xbd\x78\xfa\x74\x1a\x51\xf9\x33\x12\x77\xf7\xa6\xe7\xd3\x84\x0b\x84\x74\xc2\xa9\xd4\x1b\x81\x75\xdc\xe3\xb1\xba\x7a\x19\x5f\xe8\x87\x0f\x69\x4f\x5d\xa6\x8d\x7d\x61\xd4\xad\xea\x55\x55\xaa\x0a\xcd\xea\x54\x6d\xaa\x32\x55\x93\xaa\x43\xe1\x57\xa8\xa5\x53\xfe\x84\x93\x01\xd7\x6e\xf9\x03\xde\x90\x14\x0a\x63\xf9\x34\xa3\x2f\x50\x37\x92\x36\xa4\x11\xdb\x73\x56\xed\x57\xa4\x57\x81\x9f\xb0\x10\x35\xfc\x54\x8c\x73\x8f\x0d\x6c\x43\x0b\xde\x2a\xe6\x91\x89\x76\x58\xb9\xce\x7e\xf4\x3a\x03\xd2\xdc\x73\x05\x1e\x31\xf2\x9c\xc1\x77\x46\xd0\x73\x76\x9d\xb1\x6c\x7a\x0e\xb3\xf6\xbb\x7f\xa9\xe3\x41\xbe\x15\x94\x86\xbd\xef\x18\xf9\xce\xe0\x3e\x23\xe8\xfb\x75\x6d\xd5\x27\x40\x1b\xb4\xf4\x17\x38\x17\x98\x87\x54\xb2\xa5\x8f\x19\xb9\xcf\x72\x89\xfa\x7d\xb5\xde\x69\xca\xe1\x11\x83\xcf\x14\x12\x0e\xef\x18\x3c\x66\xa9\xde\x69\x6c\xe8\x9d\x32\x3b\xce\x4c\xef\x54\x7a\xb2\xa4\x77\xca\xac\x21\xd8\x72\x22\x2a\x99\xe1\xd0\x83\x84\xbc\x82\x51\x21\xd4\xdb\x74\x45\x00\x88\xd0\x4f\x90\x3a\x00\x69\xec\xf9\x88\x13\x14\xc9\x98\xed\xb8\xce\x60\xd4\xae\x4e\x00\x2b\xa3\x28\x9a\xd6\x8a\xbd\x15\x01\xa1\xd2\x60\xcb\x5b\xab\x74\xa2\xa8\xc3\x20\xea\x12\x0e\x09\xa1\x32\xc1\x10\x4c\xb1\xdf\x49\x90\x8b\x21\x41\x1e\xee\x2e\x72\xad\x6c\x59\xd3\x1a\xae\xf3\xe5\x8f\x21\xe8\x92\x10\x28\x89\x50\x4c\xec\x58\x46\xe5\x41\x01\xb1\x03\x19\x23\x4c\x9e\xc9\xb9\xbe\xd7\x94\x23\x2f\xab\x14\x05\xa4\xf2\x71\xf3\x48\x6c\x23\x19\xc2\x6d\x2a\xb3\x2b\x4d\x0b\xa9\xd0\x37\xcd\x35\x25\x4b\x27\xa2\xb4\x72\xa9\xed\xa1\x63\xac\x6f\x54\xf0\xb9\x1e\x3a\x11\x4f\x6e\x14\x52\x3b\x54\x78\x43\x23\x75\x53\xde\x57\x91\xec\x95\x10\xc9\x2e\x09\x51\x75\x7f\x18\x52\xd7\x37\x76\x7d\xaa\xb5\x62\x6a\xf9\xe2\xed\xcd\x73\xab\x7d\xc8\x68\x9a\x3c\x45\x82\xc0\xd1\xab\x0d\x82\x39\xca\x76\x7e\x90\x7c\x11\xe2\xb5\x91\x37\xff\x60\x66\x08\xd6\x5b\xec\x27\x62\xb0\xca\xca\xfe\x60\x55\x41\x58\xd7\xd7\xfd\x89\x99\x81\x46\x65\xdd\x9b\x55\xf6\x89\xad\x0b\x35\xba\xbe\xd2\x67\xcc\x0c\x8d\x79\x83\x4a\x9f\xb1\x75\xc1\x31\xd7\x57\xfa\xd4\x60\x87\xcf\xd8\x8d\x42\x63\xbe\xce\xdb\xdb\xe9\x02\x37\x53\xe9\x31\x9d\x7f\xdf\x88\xe5\x92\x45\x81\x41\xa8\x98\x4c\x90\x81\x87\x1d\x0f\x37\xb3\x04\x89\x62\x1b\x96\xc7\xc1\x2f\xf3\x13\xbe\x3e\xc8\x4c\x16\x27\x7e\x8b\x2e\x05\x99\xe1\x2b\x82\xcc\xd0\x72\x90\x19\x6a\x06\x99\x61\x0b\x60\x3f\xc1\x36\xcc\x88\xf9\x25\x4f\x7c\x63\xc5\x92\x86\xe6\x82\xa1\x92\x43\x8e\xa2\x62\x1f\xc8\x28\xfd\x15\x51\x65\xf2\x69\x6e\x1c\x54\xfd\x48\x4d\x05\xb9\xed\x2d\x20\xc5\x98\x07\x1c\x0a\x44\x47\x47\x4d\xae\x70\xae\x20\xa6\xd7\x0c\xe5\xab\x1d\x35\x48\x87\x55\x92\xce\x47\x7d\x76\x9f\xe5\x89\x92\x67\x5a\x14\x28\x39\x56\xf1\x90\xd4\xa9\xbe\x0b\x11\xc9\x0f\x92\x20\x54\x01\x1c\x0b\x71\x63\x64\xf0\xfa\x08\xcb\x8c\xd1\x2a\x9b\x34\x45\xf2\x5c\xac\x63\xdb\xac\x22\x2d\x65\xb6\x71\xa8\x5a\xf6\x22\xc7\x33\xfd\xe9\x69\x9d\x44\x46\x10\xea\xb8\xc3\xbb\x88\x16\x63\xdf\x7f\xae\x58\x9e\x21\x80\x84\xb8\x30\x22\x8d\x3d\x98\x12\x0f\x7a\xc4\x83\x3e\x79\x05\xc3\xc2\x5a\x3d\x58\x91\xc9\x21\xf0\x11\x25\x8d\x3d\x1b\x89\xfb\x18\x51\x8c\x1d\x8e\xeb\xa8\x57\xa7\x07\xbd\x3a\x6f\x47\x7e\x88\xa1\x8f\x86\x2b\x96\x6d\x19\x50\xde\xe4\xb5\x93\xf5\xcb\x36\x84\xeb\x17\x6e\x08\xc5\xd2\xdd\x27\x72\xc4\xd2\x07\x18\x06\xd8\xef\xf4\xc5\x0a\xde\x17\xf3\x1a\xfa\x85\x75\x7c\xb0\x34\xef\x82\x75\xeb\x78\x02\x23\x98\x76\x49\x00\x94\xc4\x28\x21\x76\x22\x96\xad\x18\x8d\x88\x3d\x92\xd1\xf2\xd1\x94\xd8\x53\x0c\x51\xb6\x86\x35\xf6\xd2\x45\x2c\x24\x5c\xca\x34\xea\x11\x73\x38\x86\x1e\xe1\x07\xb4\xed\x78\xbe\x27\xdb\xa8\x70\x2f\x60\x70\x93\x45\x7f\x28\x17\xfd\x81\x4c\xc6\x3f\xf8\x89\xd9\xdb\x27\xb2\x74\x5f\x94\x56\xb3\x77\x22\x16\xfd\x81\xb9\xe8\x4f\xc4\xa2\x3f\xb8\xd9\xa2\x1f\x28\xbc\x81\xb1\xe8\xe7\x1d\x1b\xcb\x0e\x0c\x90\xec\xbd\x00\xc9\xae\x0b\xd0\x4f\xf5\x9b\x41\xdd\x34\x32\x16\xea\xcf\x37\x5a\xa8\x69\xb4\xc1\x12\xc2\x23\x73\xa1\xfe\x5c\x58\xa8\x1b\x1e\xdc\x64\xad\xe6\xd1\xcd\xd7\x6a\x16\x99\x6b\xf5\xe7\xcd\x97\x4d\x16\xfd\xfc\x5a\x1d\x45\xe6\x5a\x7d\x83\x4a\xa3\xe8\xe7\xd7\xea\x42\x40\xb1\x68\x93\xb5\xfa\x7e\xba\xf4\x2c\xa0\x7c\x16\x61\x4d\x13\xba\x9d\x70\x16\xf6\xb8\xb5\xc5\x1a\x4c\x66\xb5\x68\xf4\x11\x07\x2b\x60\x3d\x0b\xd0\x72\xfb\xef\x89\x3d\x6a\x06\x43\x83\x4a\xa0\xe7\x06\xd0\x28\x8c\x68\x25\xd0\x13\x03\x68\x12\x56\xc3\xbc\x2b\xd5\xf6\x26\xe8\x87\xc1\xa8\x12\xf4\x83\x01\xca\x24\xd8\xbd\x55\xcd\xfb\x50\x6a\xde\x1a\xac\xdf\x96\xb0\x3e\x5f\xf5\x3d\x26\xe8\x24\x0e\x23\xbe\x06\xed\x1f\xc5\x16\x7c\x7d\x1c\xb3\xf0\x7b\x1c\xf1\x15\xe0\x94\x96\xe0\xdf\x53\xc6\xc3\xde\x0a\x68\x5e\x86\x5e\xd3\x10\x66\xc2\xaa\xc8\xb8\x95\x70\xa7\xcb\x70\x49\x25\xe0\x6c\x19\xf0\x41\xc8\x7a\xa3\xea\x3e\x8b\x2a\xa0\x59\x9c\x54\xa3\x0e\x97\x81\x1f\x86\xc1\x38\x8e\xfa\x95\xe0\xc9\x32\xf8\xc9\xb7\x69\xc0\xaa\x5b\x32\xac\x80\xe6\x01\xab\x84\xed\x2f\xc3\xbe\x65\x61\x10\x9d\xaf\xf8\xca\xc9\x32\xfc\x87\x59\x35\xe8\x99\x09\xda\x9b\xb2\x0b\x7a\x3f\x48\xc2\xe4\xc1\x28\x4e\x68\xf5\x67\xbe\xad\x2e\x71\x3c\xa1\x51\x25\xfc\xab\x6a\xf8\x4a\xd8\xe3\x65\xd8\xe9\x78\xf2\xb1\x12\xf6\x41\x25\xec\xa7\x4a\xd8\xaf\x15\xb0\x51\x7f\x45\xef\x7d\x59\x02\x7e\x10\xb0\x7e\x18\x05\xa3\x35\xbd\xf2\x68\x65\xa1\x95\x1d\xf3\x6e\x65\x91\x6a\xf6\x55\x01\xce\xc7\xd3\xd1\xe8\x4d\x3c\x5e\xd3\xb0\x6f\x6b\x8a\xad\x6c\xda\x1f\x6b\x0a\x55\x16\x78\xbf\x54\x40\xb0\xad\x80\xad\x69\xd8\xb3\x15\x45\xaa\xc7\xa4\x0c\xfb\x22\x8e\x62\x1e\x47\xb4\x9a\x36\x22\xbe\x0a\xbe\x9a\x3e\xc2\x25\xf8\x97\x01\x9f\xb2\x15\x23\x91\x2c\x41\x9f\x70\x3a\xa9\x04\x9d\x56\x82\xde\x1b\x70\xba\x62\xa6\x57\xc2\xdf\xa7\x83\x78\x05\x1b\xe9\x99\x05\x12\x1e\xf4\xbe\x56\x82\x5d\x2c\x81\x29\xa7\x88\xa3\xab\x49\xb0\x82\x9d\x9d\xaf\x28\xf2\x30\xbc\xa0\xec\x3c\x8c\xce\xab\xf9\xc9\x8a\x52\x2f\xe3\x15\xab\xd8\x70\x45\x81\x93\x70\x34\x8c\xa7\x94\xf3\xea\x62\xb3\x15\xc5\x3e\x84\xe7\xab\xb8\xe2\xe9\x72\x11\xd6\xa7\xec\xde\x64\x42\x03\x16\x44\xbd\xea\x52\x97\x2b\x4a\x25\x3d\x1a\xf5\x57\xf5\xc2\x55\x75\xa1\x87\x74\x6d\xa9\x93\xea\x52\x4f\xa2\x24\xec\xd3\xe3\x29\xaf\x66\xc7\xd5\x85\x56\xf6\xf7\xa0\x1a\xfe\x8d\xb2\xf1\xac\x2c\xf2\x42\x14\xd9\x92\x72\xea\x76\x1a\x59\xf2\xd5\x13\x08\x49\xab\x1e\xc9\xf4\xb6\x1e\x75\xee\x16\x13\xb4\xc9\xa4\xcb\xa7\x57\xae\x4a\xe2\x7c\x3a\xd3\x17\x57\x9e\x7e\xe2\xc9\xa8\x7f\x2a\xff\xf6\x29\x31\x53\x6c\x27\xa8\x60\x50\x1b\x2c\x02\x23\xab\x75\x62\x5c\xff\x90\x2d\x62\xd3\x1e\x8f\x99\x1f\xc0\x38\xbe\xa0\x6f\xe3\x52\x88\x69\x85\xdf\x26\xd6\x0b\x2b\x4d\x0e\x9d\xb7\xea\xca\x13\x9b\x66\xdb\x82\xec\x55\xd6\xce\x99\x47\x6c\x8e\x17\xd0\x13\xec\xeb\x55\xc0\x87\xbe\xd1\x2b\xca\x0a\x25\x43\x52\xab\xa1\xd2\xc7\x5d\xb9\x90\xa1\xd1\x88\x21\x6b\xc9\x67\x0b\x2f\x40\x48\x81\xab\x1b\xfb\x3c\x6f\xec\x72\x1b\xd3\xa6\x7d\x9b\x06\x7d\x16\xf0\xb0\xf7\x40\x70\x89\x12\x2e\x75\x10\x9e\xe1\x7b\x6d\xd9\xdb\x36\x95\x58\xb6\x6d\x6e\x62\x13\xf8\xd9\x12\xfe\x08\x2f\xe0\x8c\x7e\x0f\x29\x5b\x85\x1c\x42\x88\x8d\x0a\x1e\x2c\x57\xb0\x6d\xb3\xf4\x37\x2a\x57\x18\x2e\x55\x18\xe3\x05\x04\xac\xb7\x5c\x91\xac\x86\x12\xdb\x0c\xbc\x1b\x12\x3b\x84\x98\xd8\x71\x9a\x37\x4c\x23\x86\x24\x1b\x3d\x18\x11\xe6\x50\x98\x92\xd0\xe1\xd0\x23\x81\x43\xa1\x4f\x12\x87\xc3\x90\xf4\xea\x3d\xbb\x5f\xef\x6f\x85\x03\x14\x1f\xb8\x98\x0f\x59\x7c\x29\x09\xed\x88\xb1\x98\x21\x2b\xa2\xe7\x01\x0f\x2f\xe8\xb6\x90\xbe\xa7\x89\xbf\x6d\xd9\x2a\x5b\xa8\x52\xe2\x65\xb5\xe1\x2a\xd2\xf2\xc8\xd2\x60\x71\xbc\xa5\x0f\xfa\x87\x87\x62\xa6\xe0\x70\x90\x27\x21\xe8\xd7\x47\xce\xb4\xde\xc3\xf2\x4d\xad\x96\x06\xca\x1c\x10\xe6\x04\x30\x21\xa1\x93\xc0\x98\x8c\xea\x23\x7b\x5a\x9f\xc2\x05\x19\xd4\x07\xf6\xa4\x3e\x81\x73\x92\xe7\xf7\x19\x63\x38\x33\x6e\x87\x18\x66\x24\x56\x71\xd3\x79\x10\x21\x94\x66\x77\x0c\x7a\x71\x82\xd0\xd8\x1e\x3a\x17\xb8\x89\x5a\xf5\xf3\xfa\x19\xc6\xb8\xd9\xc2\x70\x4a\x66\xcd\x33\xb8\x24\xb3\xe6\xf9\x56\xd6\xae\x53\xc7\xd3\x6d\x42\x05\xb2\xa4\xf6\x69\xbd\xa7\xbf\xd1\x3e\xad\xf7\x31\xce\x49\xfb\x9e\x65\xc7\xf2\x95\xf8\xeb\x82\x2b\x87\x1f\xf5\xeb\x83\xc3\x5e\x7d\x82\x4b\x64\x40\xed\xcb\xfa\x68\xa9\xb7\xec\xcb\xfa\x34\xcd\x69\x57\x3d\x1d\x2a\x3a\x58\xd2\x4e\x99\x72\x52\xd7\x94\x9c\x76\x46\x64\x67\x47\xa5\xda\x9f\x12\xa5\x82\x55\xbd\x24\x3a\x26\xc0\xd0\x23\x2c\xcd\x9a\x14\x46\xe2\xbe\x4f\xa8\x3d\x85\x21\xe1\x76\x0f\x06\xc4\xfb\x6b\x04\x13\x32\x6a\x07\x4e\xe2\x27\x4e\x20\x63\x98\x6e\x48\x3d\x0c\x6f\x95\x48\xa7\x6d\x92\x4e\x5f\x7e\xce\xd0\x37\xf2\x9e\xa5\x60\x4e\x5f\x0d\xc1\x7c\x5e\x7a\x35\xf3\x9c\xa1\x7a\x85\x4b\xc3\x93\x22\xc3\x32\x48\xe8\xe4\xc0\x15\x7f\xc9\xe4\x76\x68\x87\x18\x26\x87\x71\xdb\x1c\x29\x35\x3d\x99\x1c\x29\x0f\x2c\x7b\xa0\xfa\x95\x3a\x53\xdd\xc3\x8e\x18\xe8\xd5\x90\xd9\x90\xf4\xcb\x43\x32\xc4\xfe\x64\x89\x7a\x4a\x88\x24\x69\x4c\x0e\x49\xa4\x0a\x97\x71\x52\x9b\xe5\xc3\x93\xe0\x65\x3a\x31\x46\x2b\xc1\x4a\x6b\x4d\x7b\x7c\x1d\x17\xfc\x99\x25\xc0\xb6\x86\x29\x2b\xbb\x48\x59\xd9\xd0\xb2\x1d\x66\x5b\x9f\xad\x05\x68\x53\x11\xbf\x62\x4b\x2c\x71\x2c\x54\xb4\xa2\x11\x49\x60\x5a\xa5\xa8\xab\x32\x31\x59\x40\x2f\x73\xaf\x81\x7e\x7a\xc9\x83\xa8\x05\x43\xa2\x3b\x04\x06\x99\x0a\x5a\xa7\xb6\x1c\x87\x11\x8c\x89\xee\x12\xb8\xc8\x59\x82\xe6\x16\xaf\x9e\xc0\x19\x39\x6f\xb6\x60\x46\x5a\x75\x33\xc8\x8e\x79\x96\x7d\xe8\xb5\x5d\x9f\x1e\x38\x5e\xfb\xdc\xcf\xf9\x86\xe9\x01\x76\x59\x00\x27\x5e\xfb\xcc\xa7\x07\xc4\xf1\xda\xce\x59\x5a\x22\x51\x7a\xfc\xac\xc4\x51\xe1\xb0\x3c\x8c\x22\xca\xde\xc8\xd9\x51\xb0\xa0\x34\x40\xe2\x29\x5f\x06\x39\x2e\x80\x24\x3c\x60\xfc\x9e\xd8\x00\x1b\x2e\x88\x05\x08\x1a\xf5\x4b\xef\xdf\x9a\xef\x6b\x35\xda\x98\x04\x65\x90\x17\x65\x07\x12\xc5\x8f\xf5\x6a\x12\xa5\xab\x49\x28\x57\x93\x18\x86\x44\xf0\xef\x5e\x7d\xaa\xb2\x90\x0e\xeb\xc3\x03\x8f\x3a\x5e\x4b\x9f\x3a\x75\xa8\x8d\x86\x04\xf5\xea\x88\x3b\x31\x76\xfa\x75\x44\x9d\x10\xe3\xe6\x10\xd7\x47\xc0\xed\x61\x7d\xda\x35\x9c\x12\x8b\x75\xab\x9a\x13\x42\x1d\x06\x23\xc2\x9d\x08\xa6\x04\x05\xed\xd8\x77\x62\xdc\xbc\x40\x49\x3d\xb1\x47\xf5\x91\xf4\xb8\xab\x8f\xa0\x4f\x9c\x69\x3d\x81\x21\xa1\x76\x0f\x26\x84\xdb\x7d\x18\x13\x66\xf7\xe0\x9c\x44\x76\x1f\xce\x08\x1a\xda\x63\x2c\x07\x1f\x4d\xec\x73\x71\x75\x4a\xc6\xce\x10\x2e\xc9\xb9\x33\x81\x23\x72\x5a\x3f\xb5\x2f\xeb\x97\x70\x45\x42\x27\x86\x63\x32\xac\x9f\x3b\xe3\xfa\x04\x4e\x08\xba\x3c\x70\xa5\x7a\x17\xd7\x2f\xd0\x00\xb9\x70\x55\xbf\xaa\x1f\x39\xc7\xf5\x63\x8c\xe1\x2d\x41\xc7\xf5\x4b\xe7\xb4\x7e\x82\x9b\x47\xf0\x82\x20\xe7\xb8\x7e\xea\x5c\xaa\xdb\x57\xf2\xa5\x9d\xbe\xbc\xa7\x5e\xda\xe9\xcb\x07\xe4\xad\x73\x06\x5f\xc9\x0b\x67\x06\x6f\xc8\x2b\xe7\x0c\xbe\x90\x7b\xce\x4c\xeb\x33\x1f\xd4\x1f\xd8\x5f\xeb\x5f\x0f\xdf\xd4\xdf\xd8\x5f\xea\x5f\x6a\x35\xf4\x96\xbc\x82\x17\xe4\x1e\x86\x1f\xbd\x2b\xff\x2d\xf4\x66\xfe\x0b\xb8\x72\x3d\xdf\xe9\xc1\x4c\xfc\xf4\xe1\xca\xf3\xfc\xb7\x75\x14\x36\xaf\x1c\x0f\xc3\xcc\xf3\xfc\x17\xfa\x6e\x21\x43\x07\xdf\x33\xf5\xa3\x4a\x8f\x7a\x04\x9c\x5c\x01\x23\x53\xe4\x62\x88\x94\x50\x1a\x92\x63\x88\xc9\x09\x04\xe4\x2d\x24\xf2\x91\x79\xf4\x92\xba\x3b\xc2\x00\x8e\x88\xad\xd3\xfa\x89\xf9\x6e\x26\x34\xbb\x22\x36\x5f\xf1\xea\x98\x84\xd5\x6f\x9c\x33\x38\x21\xf1\xca\x77\x6f\x49\x0f\x9d\x38\xc7\x18\xee\x91\x93\xc3\x63\x41\x71\xc9\x7c\x8e\x12\x32\x25\x23\x84\x31\x5c\x1d\x1c\xc9\xa4\x4e\x57\x70\x45\x8e\xe0\x88\x0c\x30\x5c\x1d\x2a\x6a\x0c\x07\xe8\xed\xe1\xcc\x51\x37\x49\x43\x09\xca\xe8\xaa\x3e\x44\xc7\x18\xae\xea\x63\x24\x46\x32\x69\x04\xac\x27\x2d\x7b\xae\xe0\x18\x4e\x60\xe7\x1e\x86\x23\x85\xa0\x56\x43\x59\xa9\xa3\xfa\x10\x9d\x60\x38\xaa\x8f\xd1\x49\xa1\xd4\x11\x9c\xc0\x31\xdc\xc3\x38\x4f\xc7\xf4\x00\xbe\xc2\x1b\x72\x0c\x5f\xc8\x09\x3c\x24\xc7\xf0\x92\x9c\xc0\x13\xf2\x16\x9e\x93\xb7\xf0\x88\x04\xd5\x5f\xda\x6c\xc1\x77\xf2\x28\xab\x38\x6a\xdb\x51\x35\xa0\x7f\x81\x8e\xea\x47\xf6\x55\xfd\x0a\x63\x78\x47\x26\xa8\x87\xae\x9c\x23\x51\xde\x66\xd5\x25\x64\xba\x16\x78\x4c\xde\x89\xce\xfb\x9e\x76\x8e\x6c\xe9\x7b\x72\x89\xbe\x37\xc5\x47\x3d\xc2\x18\x6e\xc9\xbb\x2b\x75\xb7\x8f\x9e\x38\xa4\x55\x7f\x8f\x15\x7c\x1b\x3d\xb4\xc9\xfb\x3a\xb9\xd7\xf6\x7c\xc7\x83\x97\x0e\x79\x8f\x7d\xf4\x84\xb8\xf0\x90\xbc\x24\xe8\xd8\x3e\x91\x42\x15\x7a\x2e\x0a\xdd\xca\x0a\xbd\xb1\xc9\xad\xac\xd0\x17\x87\xdc\xc2\x3e\x7a\x4e\x5c\x78\x43\xbe\x64\x85\x24\x89\x7e\x23\x62\x5c\xde\x60\xf8\x40\x44\x03\xde\x60\xf8\x83\x88\x3e\x7f\x89\xe1\x13\x11\x0d\x7c\x29\x85\xd1\x77\x66\xeb\x9f\xc1\x53\x59\xea\x0b\x86\xd7\xb2\xd4\x17\x0c\x1f\x65\xa9\x87\x18\x3e\xcb\x52\x0f\x65\xa9\xb7\x07\xe7\xb5\x1a\x7a\x46\x5e\xa0\x6f\xf0\x01\x3e\xc2\x67\x78\x0a\xaf\xe1\x0f\xf8\x84\x71\x3a\x1f\x28\xf9\xe6\x3c\x93\x5e\x78\x94\x7c\x70\x9e\x75\xbc\x2e\x30\x4a\x9e\xaa\x67\x11\x25\xaf\xd5\xb3\x90\x12\xaf\x39\x46\xa7\x08\x51\x5a\x67\xd4\xe6\xb4\x1e\x51\xdc\x44\x17\xe2\x9e\xca\x7b\x4e\x05\xbf\x60\xf2\x75\x24\x5f\x2b\x71\x33\xa6\xe4\x02\x09\x74\x75\xf1\xc7\x16\xe8\xea\xe2\x0f\xde\xba\x4f\x26\xe8\x1d\xa0\x23\x27\x16\xa8\x42\x2a\xed\xa2\x1f\xab\x87\x57\xfa\xa1\xed\x61\xbc\x58\x3c\x4f\xfb\xf5\xb1\xee\xdf\x07\xe4\x15\x12\xdf\x23\xbe\xeb\x0a\x1e\xc3\x3d\x0c\x5f\xc9\x2b\x94\x7e\x9e\x7e\x94\x51\xf1\x83\x46\xef\xca\x7e\xd0\xb8\x72\x3d\x78\xd0\xe8\xcd\xec\x07\x8d\x99\xeb\x61\x78\x7c\xf0\xae\xad\x28\x5a\x00\xc8\x57\xf0\x18\xfa\x48\xbe\x06\x09\x8f\xa1\x8f\xbe\xca\xdb\xaf\xea\x76\xe7\x1e\xf6\xd1\x06\x85\x1e\x34\x66\x9e\xbc\xf5\x54\xa1\xc2\x84\x13\xaf\x55\x33\x24\x8c\x6a\x9c\x97\x56\xd6\x9b\xd9\x5f\xe5\x8b\xaf\xe2\xc5\xd7\x32\x06\xf1\x54\xbc\x52\xb5\x6a\xc8\xac\x74\xb1\xa9\x58\x36\x36\xed\x85\x6f\xf0\xa1\xd8\x8c\x37\xf0\x45\x02\xf9\x45\x90\x8c\x0d\x3c\x49\xbb\xfb\xbe\xd9\xed\xa2\x7f\x45\x3f\x1f\x81\x73\x5f\xf7\xbb\x26\x2f\xfd\x2c\x69\xa8\x0d\xef\xaa\x8e\xbf\x5f\xd1\xf1\xf7\x7f\xa6\xe3\x2b\x0a\xad\xe9\xf8\xa3\x9f\xe8\xf8\x8a\x7e\xbf\xbf\x51\xbf\x9b\xd5\xbe\x84\x87\x70\x4f\x3c\x4a\xbb\x45\x4c\x41\xb5\xe9\xc9\x7a\xde\x05\x57\xce\xd9\xa4\x91\x29\x21\x10\x86\x69\x96\x08\x41\x2d\x55\x53\xdb\xb2\xe6\x73\x19\x18\x33\x3b\x42\xef\xd1\x88\xb3\x38\xec\x97\x17\x3b\x46\xd0\xaa\xf5\x4a\xec\xda\x57\xf0\xcc\x66\x0b\x22\x82\xec\x15\x6b\x96\xbd\x6d\xaf\x58\xb1\x70\xb3\xe5\x9c\x37\x5b\x3a\x5d\xc8\x10\x45\xb8\xce\x60\x2c\x7f\xba\xea\x74\x3c\x13\x04\x37\x4d\x1a\x92\xe7\x19\xcf\x9d\xd2\xdb\xdc\x9f\xca\x3c\x07\x03\x99\x4f\x64\x60\x4a\x8f\x9b\x9a\xcc\x54\xe0\xa5\x6d\x2a\xf0\x52\x89\x97\x4b\x33\x80\x98\x55\x34\x78\x7d\x56\x96\xeb\x10\x33\x81\x78\x12\xf4\x6f\x82\x35\xca\xb2\xe0\x8b\x5f\xff\xba\x2a\x22\x51\x45\x2e\x2e\x6f\x6a\x24\x78\x1d\xda\x50\xa0\xd5\x32\xf6\x66\x48\xe3\x6b\x91\xc6\x69\x77\xdc\x00\x69\x70\x2d\xd2\x40\x0d\x5e\xc4\xe9\xd5\x86\x89\xa4\x93\x62\x0f\x4b\xd3\x89\x64\x01\x83\x05\x3c\x48\xf3\xec\x64\x4a\x48\x65\xf6\x05\x5f\x2b\x10\x5b\xb1\xb4\x83\x32\x5a\x55\xab\x59\xaa\x0a\x2b\x8c\x64\x1b\x0b\x49\x7b\x0c\xff\xbb\x37\x02\x8b\xda\x42\xea\x86\xd3\xc5\x1b\x53\xf5\x19\x30\x1a\x9c\x88\x41\x35\xf7\x9e\xaa\x84\x60\x29\xc4\x5d\x80\x00\x39\x8a\xfa\x2b\x00\x5e\x06\x2f\x95\x16\x72\x05\x16\x79\xa0\x2c\xd0\x08\x98\x12\x1a\x94\xe3\x99\xcf\xdd\x4c\x15\x2a\xee\x6b\x35\x2f\x53\x74\x48\x14\xb8\x56\x2b\x7c\x48\x81\x9b\x19\xed\xf1\x9c\xfc\x66\x01\xb2\x68\x49\x3b\xaa\xf3\x6d\x66\x0a\x1d\xb3\x16\x99\x80\x71\xdb\xf5\xcd\xc6\x7b\x06\xfe\x76\xb1\x11\x29\xdb\x15\x78\xfd\xe2\x9b\x94\xfb\x8a\x37\x46\xaa\xc6\x6d\xaf\x80\xb9\x95\x65\x61\x5c\x89\x76\x91\xee\xfd\xbf\xac\x0a\x14\xf1\xa6\x38\xe4\x0f\x0b\xa1\x32\x5c\x63\x5f\xf8\xb2\xf0\xc6\xeb\x4a\x31\xf1\x49\x29\xf4\x82\xe2\xef\x53\xb4\x63\xee\x62\xbe\xa4\xb9\x75\x4c\xdd\xbc\xde\x57\xc2\x14\x7a\xd0\x27\x28\x20\x5f\x51\x90\x25\x20\x4b\xed\xcc\x62\x96\x6a\x3b\xa3\x5a\x0d\xc5\x24\x44\x3d\xb9\xc7\xc0\x90\x10\x77\x3f\x39\x20\xfd\x7d\xdb\x4e\xf0\x0e\x4a\x0e\xfa\xb5\x1a\x43\x53\x12\x74\x92\x2e\x24\x10\x60\xac\x12\xc6\x22\x34\x24\x3b\x43\xdc\x8e\x1b\x19\x89\x21\xec\xab\xbb\xa3\xa8\x2f\xf6\x2b\xc3\x5a\x2d\x6e\xc8\xee\x44\x36\x45\x53\x59\x1a\x6c\x9e\x5e\xc9\xa5\xaf\x87\x33\x0b\x25\xf9\x45\xbd\xa5\xc5\xae\x72\x49\x10\x33\x2b\x4f\xe5\xdb\x7e\xe8\x4f\x11\xc5\x50\xc9\xe5\xc5\xea\x91\x1b\x12\xb6\x5f\xfa\x53\xc4\x31\x04\x8d\xab\x5f\xb2\x22\xe9\x14\x7d\x95\x71\xb9\x6f\xbc\x0e\x05\x72\x1d\x0a\x1a\x7d\x3a\x08\x23\xba\x61\x22\xf1\x35\x4b\xd0\xce\x8e\x42\xca\x64\x72\xc0\x29\xbb\xd8\x78\x6d\xa0\xa9\x23\xae\xa6\x8e\x08\x4b\x44\xa1\xca\x32\x78\x03\x46\x9b\xb1\x59\xa2\x46\xd8\x97\xd8\x88\x6a\x57\xb4\x80\x60\x01\xcf\x49\xd9\x86\x48\xf9\x61\xa7\x24\xae\x28\x3e\xa5\x8f\x80\x7c\x59\xda\xaf\xf7\xd0\x54\x15\xe9\x41\x1f\x86\x30\x80\x09\x8c\x09\x9a\x92\xaf\x68\x9a\x53\xfd\x05\xd9\xf1\xe0\xdc\x30\x0d\x95\x4a\x75\xf3\xd6\x98\x13\xb1\x4c\xf7\x1d\xa0\x49\x3a\x27\x7a\xc4\xdd\xef\x1d\x90\xf1\xbe\x6d\xf7\x94\x91\x30\xea\x1d\x8c\x6b\xb5\x10\x0d\xc8\xb4\xd3\xeb\x42\x0f\xa6\x72\x5e\x5c\x88\x8d\xf8\x05\xd9\xb9\xc0\x7d\xd2\x93\x42\x64\xca\xc3\x91\x16\x90\xd3\x3b\xb5\x83\x16\x35\x26\xf9\x8c\x29\x82\xc0\x90\xf4\x1c\x6f\x7f\x78\x48\xfa\xfb\x8e\x33\xc4\x49\x3a\x95\xce\x3b\xc3\x2e\x9c\x75\x86\x5d\xbc\x55\x2c\x9b\xae\x06\x08\x2f\x2e\x6a\x35\x74\xde\xe9\x75\x89\x4d\xd1\x40\x36\x0e\xce\xe4\x2d\xd7\xb7\x1a\x99\xd8\x7b\xa7\xcf\x7c\x51\x02\x58\xdb\x66\xfa\x81\x28\x83\xf1\x22\x1c\xa0\x49\x49\x26\x9d\xe4\xd3\x34\x1b\x86\xbe\x61\xc7\x80\xb0\xa6\x61\x14\x62\x45\x79\x28\xc0\x9a\x72\x50\x8c\x6f\x3a\xbb\xed\x75\xd3\x7b\x8a\x8c\x09\xee\xfa\x62\x5e\x56\x4e\x0a\xd6\x66\x39\x5e\x26\x59\x81\xcd\x30\xf4\x7e\x11\x2f\x48\x29\xb6\x27\x59\x42\xaf\x71\xe5\xfe\x12\xac\x19\x3a\xef\xd7\xcb\x8e\x3d\x39\x05\x7b\xbf\x88\x7b\xb1\xec\xfb\xb9\x44\xea\xfe\x12\xac\x19\xba\x0d\xbf\x9f\xdd\xec\xfb\x99\xc0\x2d\x66\xd1\x47\x97\xa8\x8b\x4f\x6e\x85\x89\x65\x1f\xe1\xc6\x15\xa2\xb8\x31\x93\xf1\x8e\x52\x48\x6f\x3d\x24\xcb\x20\x3f\xae\x86\x8c\x72\x9c\x37\x62\xfb\x6b\xe4\x77\xc9\xf6\x7b\x92\x5b\xf7\x6e\xc2\xf6\x83\x8c\xed\x6b\x06\x18\x63\x89\x28\x90\x88\x7e\x86\xed\xc7\x44\x71\x0c\x5f\x62\x23\xaa\x5d\xf1\x02\x7a\x0b\x78\x54\x1d\x5a\x2a\xb5\x34\xe6\x87\xb4\x2d\xfe\x12\xda\x76\x7d\x29\xc9\x7e\xaf\xcc\x56\xb3\x80\x77\xcb\x1a\xdf\xef\xc0\xc9\x23\x4d\x8f\x91\x52\xfc\x8a\x85\x64\x26\xd6\x11\x71\x57\x29\x2e\x8d\x94\xc0\x04\xc3\x25\x91\x69\x40\x5c\x98\x18\x8b\xc5\x10\xc3\xb8\x78\x7b\x41\x56\xe9\x30\xf5\xd9\xcc\x38\x8c\xd0\x0c\xf2\x64\xd7\x33\x58\xa5\x23\xbe\xc0\xd9\x79\xaf\x28\x94\x9d\x0c\x9e\xe3\xe6\x10\x56\x6d\xc5\xe1\x94\x9c\xd5\xd1\xb9\xd6\xe3\xcb\xc5\x4c\x89\x72\x43\x29\xc9\xa1\x3e\x19\x77\x26\x9d\xa4\x4b\x12\xb9\x2c\xe4\xe2\x9c\xcc\x44\x3f\xb0\x49\x3f\x5f\x01\x77\x08\x6f\x4f\x94\xa7\x8a\xe9\x2f\x69\xe6\x8b\x1c\x77\x68\x17\xc6\x1d\xd6\xcd\xd2\x76\xec\x10\x56\xab\x55\x94\xca\x87\x96\xa1\x40\x94\x0a\x3a\x5c\x96\x92\x6e\x10\x53\x32\x68\xa3\x73\x67\x58\x3f\xc5\xcd\x81\x9f\xb5\x17\x2e\x48\x0f\x8f\x88\x68\x30\xf4\xc8\x85\x8d\x64\xfb\x47\x5d\x7c\xe8\xb6\xfb\xf5\xa9\xef\x62\xfb\x14\xc4\x03\xf2\xa3\x1f\xf0\xc0\x0f\x3a\xa3\x2e\xc8\x0c\xa6\x7e\x02\x17\xc1\x68\x4a\xfd\x3e\xe4\x5b\x62\xff\x02\xf4\x46\xd6\xef\x81\xde\x7e\xfa\x67\x0b\x7d\x16\x31\xce\xf3\x5d\xcb\xd2\xbf\x54\x38\x14\x5d\xf2\x5e\x60\xdd\x58\x5b\x41\x35\xf1\x6a\x89\x50\xa0\xd8\x94\xff\x89\xbd\x93\x2e\x2c\x25\xbf\x9b\xaa\x06\xa2\x6b\xa5\x54\x21\xb8\xdd\x50\x35\x70\x8d\xbe\x41\x0b\x97\x37\x53\x0d\x5c\xa3\x6f\x08\x24\xaf\x09\x16\x70\x9f\xbc\x47\x5f\x8c\x59\xff\xd8\xd8\x7d\x4b\xfe\x68\x1c\x10\xbe\x17\xef\xb2\x3b\x6e\xe6\xb5\xa4\x97\xa2\x24\xe2\xb9\x17\x19\xcf\x10\x80\x11\x4e\xf6\x96\x19\x0c\x4e\xbe\xcf\x6d\xf8\xa5\x49\x2f\xa1\x8d\x2b\xe8\xd3\x11\xe5\x74\x5b\x5c\xd2\x86\x32\x26\x20\xb4\x31\xcb\x9f\xcf\x80\xde\x80\x7d\x73\x24\x5a\x8e\x7d\x8e\x70\xda\xa8\x05\xd0\xc5\xe3\x0d\x55\x0a\xb2\x80\x29\xaf\xae\xd1\x2e\xe4\xb0\x4a\xdc\x5c\xa7\x64\x50\xb0\x86\x58\x5b\xa9\x6e\x28\xc3\xa6\x78\xab\x74\x04\x26\xa8\x92\x61\x79\x6e\x26\x20\xa4\xc4\xba\x93\x19\x15\x50\x8c\xd3\x3d\xfa\xb7\x8a\xf5\xf7\x16\x12\x72\xaa\x12\x4e\xef\x63\xbc\x80\x0f\xcb\x2b\xc9\x73\x03\x02\xb2\xd1\x94\x71\xfd\x94\xd0\x20\x23\xfb\xa9\x25\x5e\xc6\xf6\x53\x12\x84\x0c\xed\xa7\x44\x84\x6b\x47\xde\x98\x9d\xb4\x71\xe5\x1a\x2f\x5d\xc8\xcf\xb8\xc5\x3b\xcf\x78\xe7\xad\xa1\x19\x53\xed\x4a\x1b\x33\x03\xe5\x4c\xa0\x34\xb5\xa7\xb4\x31\x33\xb0\xce\x04\xd6\x6c\xac\x4a\xf3\xd0\xe8\x37\xe5\x65\x9b\x15\x4b\x7b\x22\x1b\xba\xd5\x05\xa3\x8a\x82\xba\xce\x27\x55\xca\x62\xa3\x6c\xb8\x5c\xf6\x93\xae\xf4\xb8\x4a\x21\x6c\x94\x8d\x2b\xca\x7a\xbf\x60\x76\xc1\x1f\x95\x42\x4c\x47\x39\xd6\xe7\xd6\x2d\xd4\xd1\x06\x1a\xcd\x96\x20\x51\x83\x60\xbb\x86\x86\xe8\x53\xd1\x00\x22\x9e\xb2\x9e\xc1\x98\x9e\x15\xde\xf2\x80\x9d\x53\x83\xe7\x3c\xcd\x79\xce\x27\x60\xe4\x19\x44\xe4\x21\x84\xe4\x65\x85\x82\x28\x4f\xd5\xfc\xa0\xd1\x0b\x46\x23\x64\x48\x2b\x53\x52\x38\x25\x48\xa4\xd5\x54\xf1\x89\xb4\xab\x9b\xcf\x51\x4c\x02\x75\x2e\x4d\x51\x0c\x45\xf1\x07\x25\x1d\xb7\x4b\xa6\x32\x9e\x56\xf1\x5c\x21\xc1\x95\xa0\xbd\x4a\x50\xc1\xc1\x8b\xfa\xa1\x60\x49\x3f\x14\xa4\xfd\xb4\xf9\xd2\xaa\xd7\x54\xd5\x83\x9b\xaf\xaa\x7a\x39\xbd\xfa\xa5\xab\xe8\x86\x7b\xaf\x0d\x97\xcf\x1b\x09\xe9\x71\x59\x09\xae\xd7\xcb\x8c\x56\x5e\xe7\x06\x2b\xf8\x07\xd5\x9a\x53\x0e\x0c\x03\x6d\x14\xcc\x47\x11\x27\x88\xdb\x11\x6e\xb6\x64\x9c\xba\x50\x16\x31\x5c\x7a\x6f\x80\x08\x18\x41\xcc\x0e\xe5\xb1\x54\x5a\xc4\xf0\xa8\x35\x11\x09\x32\x8e\xc9\x1f\x0a\x4f\xa0\x2e\x74\x59\x21\x5e\xfe\x81\x22\xf1\x66\x24\x2f\x42\xbc\x95\x55\x1c\x4b\x47\xe1\x8e\xd7\x5d\xae\x3e\x10\xaf\x82\x8e\xd7\x05\x41\x98\x90\x88\xab\x91\xb8\x1a\x09\x70\xc3\xf9\x91\xe6\x0c\xe6\x29\x7a\x6d\xba\x2d\x16\xde\x7c\x34\x3d\x0a\xa9\xe9\x30\x89\x7f\x56\x28\x90\xea\xe1\x88\x92\x1f\x7d\x16\x5c\xfa\x55\x5a\xe2\xdc\x58\x94\x37\xcf\x8d\xef\x66\xe0\x8a\x2f\xd6\xa7\x94\x0c\x5c\x98\xe1\xc5\x02\xc2\x4d\x91\xed\xe1\x66\x2b\x47\xe7\xec\xd6\x19\x38\x72\x0c\x53\xbd\xb8\x53\x71\xbf\x5b\x37\x9f\x54\x3d\x30\x6f\x97\x50\x8a\x07\x45\xf8\xe2\x5d\x11\x9b\x53\xf1\xa0\x70\x9b\xa1\x33\x4e\x29\x16\x0b\x88\xa9\xf1\x9d\x5e\x73\x17\x43\x40\x49\xab\x1e\x53\x48\x36\xed\x9b\x80\xca\x08\xcd\xf5\x98\xe6\x3d\xe4\x16\xbf\x25\x52\xfd\x9f\xde\xb9\xc5\x96\xa5\x2f\x8b\xed\x1a\xd1\xcc\xe2\x0f\x9d\x37\x3d\x17\x37\xb3\xdb\xdf\xea\xf2\x01\x4c\x0d\x90\x99\x78\x52\x1f\x51\xe8\x51\x92\xcb\x41\xd9\xd3\xfe\x66\xdf\xd2\xf8\xfd\x1f\xee\xef\xde\xae\xfb\x0f\x6f\xaf\xf5\x8f\xd6\xef\x7b\xad\xba\x54\x6f\x4d\x69\x9d\x41\x48\x7a\xb4\xce\xd6\x7c\x61\x98\xbb\xe8\xc7\xc4\xdb\x8f\x0f\xf6\xf6\x6d\x3b\xb5\x7a\x0e\xc8\xac\x1e\x37\xf7\x20\x21\xa6\x5d\xee\x88\x18\x56\xb9\x5b\x19\xaa\x91\xa0\x84\xa4\x30\x98\x49\x3d\x72\x46\xf5\x10\x46\xf5\xc8\x4e\xea\x21\x5e\x94\xbb\x6b\xb8\xe1\x60\x89\xcf\x71\x98\xa4\x65\x46\x7b\x1c\x45\x92\xd5\x30\x81\x62\x60\x52\xc2\x2e\x86\xc9\x3a\x94\x8e\x49\x00\x68\xb7\x3e\xa0\x18\x9b\x7d\xd3\x2a\xd2\xe2\x80\x96\xa9\xdb\x78\x52\xfc\x92\x71\xb1\x19\xcd\x16\x5c\x50\xe2\x35\x0d\x22\x6d\x61\x38\xa7\x64\xb7\x8e\x2e\x68\xb3\x65\x7b\x18\xce\x36\x66\x09\x8a\x52\x9b\x2d\x08\x09\xab\x5f\x50\x21\x23\x40\x20\x2f\x6d\x06\x09\x71\x62\x18\x91\x20\xff\x0e\x31\xa8\x79\x93\x63\x08\xcc\x21\x81\x91\xf9\x85\x8d\xbd\x7a\xe4\x8c\x69\x3d\x84\x31\xad\x47\xb6\xb8\x0f\x4b\xef\x63\xf1\x3e\x10\xef\x63\xf9\x3e\x28\xbd\x4f\xc4\xfb\x91\x78\x9f\xc8\xf7\x4b\xf8\x6d\x89\x5f\xa2\x16\xa0\x51\x19\xbf\x2d\xf1\x4b\xd4\xe2\x7d\x5c\xc6\x6f\x4b\xfc\x12\xb5\x78\x9f\x2c\x77\xfe\x8c\x92\x4e\x44\x21\x14\xb3\x1f\x86\x62\xde\xc0\x84\xc2\x19\xed\xc2\x29\xad\x3c\x96\x2b\x8a\x58\x7a\xff\x10\x49\x23\x72\x15\x18\x35\x15\x95\xaa\xd5\x37\x0d\x31\x6c\x88\xc1\x4a\x13\x0d\x88\xb4\x20\xa4\xb5\x5a\x9b\x1f\x94\x4d\x11\x9d\xcf\xa3\x8d\x15\xe8\x77\xef\x48\x0d\x7a\xd4\x90\x7b\xc6\xbf\xab\x07\x11\x98\xa4\x1a\x24\x6a\x24\xe1\xf7\x8d\xa5\xb4\xb5\xc2\x4e\x24\x05\xb8\xe8\x66\xc2\x0e\x2b\x0b\x3b\x91\x14\xe7\xa2\x05\x5c\x16\xf6\x2a\x66\x8c\x5c\xaa\x0f\xa4\x68\x7e\x00\x5c\x94\x16\x50\xab\x4e\x1b\xa7\x57\xae\x4d\xa5\xc3\x48\x73\x17\xd4\x93\x99\x7c\x32\x53\x4f\x14\x84\x82\xcc\x9e\xcc\xd2\x27\x05\x98\x3b\x0a\xc6\xe6\xb8\x79\x57\x43\xdd\x51\x50\x36\xc3\xcd\xbb\x66\x5e\x07\x5a\x65\x41\x70\x45\xff\xa5\x26\x04\x57\xcb\x5e\x5f\x86\x71\xfd\xcb\xe0\x25\x5c\x6f\x6a\x90\x1e\xfa\x2f\x1f\xf5\xef\xfa\x47\x54\x4d\x84\xcc\xfd\x47\xa3\xc6\xea\xc8\xbe\x55\x7d\x38\xbf\x0c\xbe\xf8\x5f\x7b\x06\xf3\x55\xab\xf0\x6a\x17\x2a\x6b\x42\x7b\x75\x3d\xc8\x76\xe6\x11\x25\xc8\x52\x3f\x9f\xe9\xe7\x82\x84\xef\xe2\xcc\x60\x42\x8f\x9a\xb4\x91\x58\xa2\x13\xc8\xfd\x3f\x60\x89\x64\x0c\xa7\xba\x54\x71\x73\x5c\xc9\x32\x22\x7a\xa9\x26\x80\x31\x5b\x4f\x2a\x27\xc4\xc9\x8a\x09\x71\x49\x33\xd2\xbf\xa4\x37\x23\xf1\xab\x96\xbe\xd8\xd5\x17\x77\x2a\xa8\x3f\xbd\xd0\xc0\x33\x0d\x3c\xbb\xf3\x77\x27\x86\x57\x4d\x00\xba\x75\xba\x13\x5b\x18\x56\xd2\x71\x15\x35\x94\xd0\x65\xf8\xec\x96\x26\x84\x5d\xc9\xaa\x34\xfa\xec\xf9\x4c\x3c\x2f\x57\xa6\xa9\x48\x17\xcd\xb1\xb4\x4c\x2c\xf9\xf3\x59\xab\x02\xcb\x8a\x26\xef\xaa\x26\xa7\xfa\xbf\x15\xdf\x5d\x78\xab\x89\x7c\xb6\x5b\xf5\xf6\x8e\x7e\x7b\x47\xac\xfe\xbf\x74\x2a\x5f\xb5\x72\x42\x6f\x11\xbe\x66\x86\x42\x46\x55\x59\x81\xdd\x62\x81\xea\x79\x7b\x75\x27\x2f\x70\x87\x70\x58\x3b\x9a\x62\x3d\xd1\xf4\x6c\x53\x39\x9f\xb3\xd9\xac\xdf\xcc\xd4\x02\xa4\x7b\xfc\x9f\x32\xaf\xdf\xae\x9c\xd7\x27\xa5\x79\xfd\xa2\x72\x5e\xbf\xf8\xef\xb7\xd0\xad\x5d\x83\x76\xff\x7d\xd6\xa0\x9f\x5b\x44\xb6\x52\xfb\xe3\x95\x74\x16\x91\x95\x94\xb6\x75\xdd\xaa\xc7\xa4\xcc\x57\x45\xd7\xe2\x4d\x05\x67\x48\x5b\x75\xe7\x9f\x43\xbc\xaf\x56\x12\xef\x0b\x45\xbc\xbd\x51\x90\x24\xdb\xf7\xa8\xe9\xbf\x5e\x38\xbe\xd0\x74\xac\x2b\x26\x7c\x61\x9c\xbd\x14\x49\x37\x3b\x68\x29\x13\xac\x71\xaa\x52\x32\xe9\xcc\xce\x50\xfe\xf9\x86\x9c\x8a\x8f\xfe\xfb\x89\x3b\x45\xf3\xcd\xab\x12\xfa\x92\xca\x51\xd3\x43\x4e\xbd\x54\xec\xb8\x35\x29\xe8\x51\x72\x81\x43\x45\x8b\xaa\x91\xe5\x84\x94\xd3\x3d\x17\x58\x73\x12\x2b\x51\xa3\x49\x7b\x46\x98\xb5\x07\xb4\x44\x64\xf7\xc4\xbe\x64\xc7\x35\x36\x03\x5f\xab\x41\x3c\x03\xe4\x0d\x35\x09\xf0\x2c\x48\xc2\x84\x64\x62\x54\x5a\xf1\x19\xe5\x01\xe1\x8b\x37\x05\xde\xba\x8e\x2b\xca\xf8\x9c\xaa\xcd\xf9\xa5\xc4\x7d\xed\x91\x9f\x52\x83\xa6\x78\x80\xeb\xd9\xa6\x8e\xd6\xd2\x90\x8e\x72\xfb\x7c\xe8\x62\xad\x4f\x8a\x20\x24\x54\xc5\x78\x94\xa1\x1e\x03\x42\x3b\xac\xeb\x84\x90\x10\x2e\x2e\x62\x18\x11\xc7\xdb\xb7\xed\xd1\x01\x61\xfb\x38\x22\xa3\x26\x2b\x34\xca\x5c\xf4\xc5\xc7\xd6\x69\x67\xd4\xb5\x91\x26\x68\xf1\x08\xd7\x51\x68\x47\xf5\xc0\xec\x93\x3a\xaf\x02\x8b\xed\xa8\x9e\x60\xbc\x95\x4d\xe1\xb4\x23\x8c\xa8\x17\x79\x57\x5c\x7b\xa2\x79\xa5\x42\x85\xda\xd9\x60\xcc\xd2\x07\x5c\x9f\x61\x7e\xc9\xb9\xce\x36\x15\xfb\xf1\x5c\xaf\x6c\xa6\x4c\x52\xf9\x46\xf5\xc8\xfa\xd2\x10\x59\x8d\x7d\x1e\xfa\x54\x0e\x74\xc5\xd6\x9e\xca\xea\x80\x2d\x50\xe3\xf7\x3d\xe3\xbc\xfc\xe1\xf5\x3b\x61\xb5\x71\xa5\x8d\xd3\xaf\x75\x79\xdd\x72\xe4\x96\x16\x83\xda\xbd\x66\x2f\x66\xf2\xc5\x4c\xbd\xb8\x6a\x19\x25\x3c\x87\x2b\x68\xe3\xe1\xcc\x53\xba\x31\x21\xde\xc9\x57\x66\xa2\x4a\xba\x8e\xa5\x7e\x25\x62\xbc\x70\xf3\xee\xe2\xe5\x7f\xb5\xa8\x90\x6d\x18\x2a\xb7\x07\x7f\x73\x33\xb0\x7e\x0f\x6c\x08\xc5\xc5\x55\xf2\xe1\xca\xad\xf5\xff\xee\x95\x5b\x15\xe2\x80\xb7\x56\x12\xcf\x56\x9b\x87\x1b\x8a\x19\xa5\xe1\x31\x37\x09\x95\x82\x47\x3a\x88\xc6\x46\x22\x65\x0a\x4f\x36\x62\x0a\x82\x09\xbc\x2c\x33\x01\x4e\xa3\x24\x8c\xa3\xf5\x7c\xc0\xb4\x95\x7b\xbe\xe1\x84\x7b\xfe\x2f\xdd\x73\x5f\xed\xdd\x6c\xf3\x9d\x5e\xec\xfd\x73\x77\xe1\x4b\xfb\xcd\x9b\xee\xc2\x8b\xf3\xf8\xc6\xe8\xaa\x76\xc8\x1b\xef\x81\x2b\xde\xee\xe9\xb7\x7b\xbf\x7e\x87\xbc\x7a\xc3\x5b\x3d\x2f\xab\x7b\xbc\xb8\x0b\xae\xec\xdb\xd2\xbe\x79\x2f\x2f\xb1\x97\xd5\xfb\x5f\x36\x93\x1f\x6d\x3c\x93\x9f\xff\xed\x99\xfc\x7d\xc3\x99\xfc\xfd\x7f\xc2\xd2\xf9\x3f\x7b\xdf\x7d\xed\x2a\xb8\x2c\x09\x6c\xaa\x3e\xdc\x64\x5f\xfd\x2f\x9f\x26\xef\x36\x9e\x26\xdf\xff\xf6\x34\xb9\x4f\x8b\x1e\x49\x52\x4a\x95\x66\x7e\xa2\xb1\x31\x51\x72\x69\x20\xef\x5b\x62\xb3\x42\x1b\xa7\x23\xd7\x3b\x0d\xcc\xd0\x0d\x09\x91\xe7\x3c\xe2\x79\x2b\xb0\x77\xf5\x75\x20\x2f\xbc\xd6\x69\x60\xa7\x17\xad\x00\x46\xc4\x78\x9f\x61\xd3\x00\x01\xde\x8a\x08\x8a\xea\x89\x12\xad\xeb\x59\x39\x79\xfa\x64\xd4\x82\x9b\x23\x08\x09\x0a\x15\xe4\xac\x04\x39\x2b\x42\x2e\xd2\x76\xb7\x76\x8b\xed\x9e\xa6\xed\x6e\xed\xe6\xed\x16\x30\x55\xed\xee\x11\xe3\x7d\x86\xcd\x68\x77\x4c\x50\x5c\x9f\xaa\x53\xb2\x1c\xab\xc3\xf3\x96\xe1\x66\x0f\x02\x82\x02\x05\x35\x33\xa1\x58\x01\x6a\xb1\x72\x0b\xa2\x43\xfa\x54\x6f\x17\x1e\xaf\xe5\x79\xc1\x68\x32\x14\x7b\xdf\xc7\xff\x5d\x38\x9e\xa4\x0c\xcd\xca\x44\x27\xeb\x6b\xd1\xf3\x24\x87\x69\x99\x40\x2d\x13\x2a\xbb\xf9\x57\xee\x3b\x96\x25\x0b\x03\xf4\xbf\x68\xeb\x21\x26\x40\x35\x9b\x56\x3a\x4d\xdd\x50\x87\x42\x94\x0d\x85\xc3\xb7\xcc\x0e\x37\xcc\x2b\xcc\x0e\x96\x8f\x27\xf1\x25\x62\x75\x66\x47\xf5\xc8\xa4\x36\x8c\x17\x2b\x7b\xf7\xdf\xe1\x58\x30\xe3\xf1\xf7\x97\x79\xfc\x12\xf5\xc1\x0a\x4a\x84\x95\x94\x08\x2b\xc9\x12\xfe\x15\xeb\xc8\xfb\x8d\xd6\x11\xa5\x49\x49\x59\x87\x9f\x6d\xa3\x5c\x63\x55\x51\x9c\x63\xbd\x32\xc5\xd4\xa5\xdc\xda\x88\x0f\xdd\xfa\xef\xb6\x87\xfa\xaf\xe6\x47\xff\xbb\x1d\xfb\x6f\xca\xd4\xfe\x3d\xb7\x7f\xff\x23\x79\xde\xb7\x1b\xf0\xbc\x5b\x06\xcf\x7b\xfe\x77\x79\xde\x87\x8d\x78\xde\x87\xff\x95\xbd\xfe\x0d\x36\xae\xff\xfe\x8c\xe3\xbf\xe5\x46\xf9\x7f\x24\x43\xf9\xe3\x06\x0c\xe5\x83\xc1\x50\xbe\xff\x5d\x86\xf2\xa9\xd2\x28\xe4\xd3\xdf\x15\x9a\xd6\xcd\x46\x03\x62\xcd\x5c\xab\x9e\x53\x95\x13\x6a\x8d\x24\x8f\xaa\x16\xca\x0a\xc1\x5e\x1f\x0d\x3e\x5b\x69\x90\xf0\xa9\x64\x4d\xf3\xd4\x3c\x29\xa6\xa9\xbb\xb8\xe1\xf0\x53\xa5\xf1\x50\xea\x06\x08\x09\x77\x94\x06\x24\x26\xe9\xd9\x9c\x3a\xc9\x6b\xa2\x68\x3e\x0f\x0f\xdc\x5a\xcd\x71\xb1\xd8\xc4\x33\x27\x35\x6c\x45\xe1\x7c\x1e\xe9\x17\x09\x41\x71\x3d\xb4\x83\x7a\x24\x4a\xd8\xa1\xf6\x7f\x41\x4f\x29\x8a\xb1\xfd\x94\xa2\x00\xa7\x3e\x73\x05\xbf\xf7\x18\x43\x76\x1d\x60\x68\xec\xd5\xb3\xdb\x04\xe3\xf9\xdc\x35\xdc\x8c\xa8\x69\x94\x6d\x34\x5e\xbb\xda\xb0\x36\xda\xad\x17\x1b\xcf\x1c\x8e\x9b\x2d\xdf\x70\xa5\xfb\x5c\xd1\x09\x6e\xaa\xf6\x71\x53\xb5\x8f\x97\xaa\x7d\x3c\xf9\x59\x4e\x84\x9b\xbb\x5b\xab\x15\x13\x76\x02\xa1\x9d\xd4\x39\xc4\x4e\x02\x81\x93\xd4\x99\x8c\xff\x6b\x78\x13\xf1\x2a\x7a\xce\x5d\x8a\x2a\x5e\x8b\xd1\x65\xbc\x10\x86\x99\xad\xc7\x12\xf1\x12\x71\xd0\x62\xf1\xb0\xfc\x9e\x17\xdf\xc7\xeb\xd1\x07\x3c\x73\x41\x04\xa6\xfc\x62\xf3\xd4\x8c\x46\x4e\x46\x5c\x4c\xd1\x28\x28\xc6\xbc\x95\xde\x23\x61\xc7\xed\x12\x17\x62\xf1\xd3\x82\x40\xfc\xd0\x8e\xdb\xb5\x5b\x75\xda\xf1\xba\xc0\x89\xb7\xcf\x0f\x22\x79\xd6\xcf\x71\xd8\xe1\x5d\xe2\x41\x2c\x7e\xee\xc8\xf0\x02\xe4\x4e\x9d\x76\xb8\x02\xe7\xb6\xd7\x4d\x71\x46\x8e\x27\xd0\xc5\xea\xe2\x37\x08\xd4\xc5\xef\x75\x2a\x2f\x6c\xda\x89\x32\xdc\x12\x33\x23\x02\x77\x33\xee\x70\xc7\xeb\xca\x0a\x1c\xc2\x64\x0d\x0e\x61\xf5\x40\x3e\x36\x71\x2b\x84\x4d\x55\x01\x70\x12\x39\xad\x7d\x7e\x48\xdc\x7d\xc7\x49\x9b\x89\x64\xe1\x50\xb6\x0a\x0b\xc4\xaa\x7c\xda\x24\x24\x5a\x60\x2b\x64\xd2\x00\x85\xb8\xc6\x77\xca\x0f\xd4\x9f\x94\xe2\xd0\xc1\x17\x43\x88\xbb\x0b\xca\xff\x8d\x8c\xe2\xd4\x05\x77\xff\xb9\x07\xdc\xa6\x4d\x78\x61\x15\xfe\x5c\x38\xe0\xe6\x2e\x7c\x2c\x3d\xc0\xff\x55\xea\x26\xc5\x9c\x5e\x06\x2f\xb7\xc2\x81\x74\x14\x06\x95\xdb\xd3\x48\x38\x32\x9f\xf3\xec\x6e\xe6\xad\xe9\x9c\x7f\x07\x3d\x11\xe8\xae\xd6\x3d\xcc\xc8\x6b\x43\xd8\xc1\xc0\xca\x96\xa4\x4b\x63\x53\x2a\xf1\xf3\x06\x7a\x19\x4a\xc2\x16\x8b\x05\x20\x6e\xce\x08\x95\xb5\xb6\xd1\x63\x34\xe0\x14\x99\x93\x05\x63\xb5\xbd\x2e\xf9\xf6\x98\x20\x0a\x40\xf9\x4b\xab\xc6\x03\x15\x82\x49\x61\xca\xad\x49\x50\x53\x16\x22\x65\xe9\xca\xe4\x33\x6b\x64\x8b\xd1\xea\x9c\x32\xe5\xe9\x21\xf1\x6f\x9e\xe1\x65\x85\x2d\x1b\x50\xe9\x18\x17\x43\x28\x9d\x24\xff\xc5\xfc\xa5\x68\x5e\xf6\x93\x66\x64\xd2\x88\x0c\x8b\xa9\x76\xdd\xdc\x90\x41\xb1\x3b\x6e\x77\xd5\x0c\xc9\xde\x43\x8b\x10\xc2\xf0\x0a\x2c\x82\xf3\xcb\x68\xd7\x32\xda\x6f\x66\xbb\x46\xe4\xfa\x08\xa1\xf8\xe5\x58\xa7\xe9\xdf\x0f\x0e\xd8\xbe\x6d\xc7\x60\xdb\x01\x5e\x37\x14\x51\xc7\xed\x76\xe2\x2e\x84\xe9\x6f\xd4\xf1\xd2\x7b\xf5\x4b\x3b\x81\xa8\x37\xe8\xe2\xfd\x6b\xd9\x1a\xfb\x19\x66\xa6\xa7\x60\xc1\xce\xed\xef\x59\xb4\x25\x95\xbe\x5b\x42\x18\x90\xa2\x86\x21\xb6\x8e\xf8\x3a\x05\x02\x27\x7c\x31\xfa\x57\xd3\xa6\xee\x86\xcd\x96\x37\xf7\x20\x6d\xaa\xee\x79\x7e\xe0\xd5\x6a\xad\xe2\x1a\x53\x1e\x95\xe2\x52\xa7\x7b\x11\xc3\x3f\x61\xdd\x3a\x24\x6e\x96\xc9\x85\x67\xe3\xce\x57\x11\xc3\x8a\x7d\xce\xbf\x93\x11\x57\xb6\xda\x64\x53\x9f\x1f\x10\xb7\x7a\xd2\x66\x3d\xbc\xc2\x8b\x45\x56\x95\x25\x3d\xc8\x74\x20\xf5\xcc\x24\x94\x63\x9b\xa6\x36\xed\x5a\x13\xb2\x64\xc2\x9e\x0d\xdf\xaa\xf7\x78\xa1\x17\xbe\x7c\x95\xcb\xb6\xda\xd3\x95\x73\x45\xce\x8d\xc6\x9e\x39\x5d\x7a\x65\x49\x5e\xc2\x98\x16\xc3\xfd\x4a\x08\x4f\x65\x28\x18\x96\x17\xc2\x70\x80\x50\x98\x71\x54\x7c\xe8\x65\x26\xb9\xe9\x32\x42\xe4\x7e\xa8\x23\xb8\x63\x17\x12\x12\xa4\x90\xfb\xf1\x41\x28\xbd\xbf\x65\x64\x31\x12\xa4\x40\x71\xb7\x0b\x8c\xb8\xfb\xec\x20\xd9\xb7\x6d\x86\x83\x0e\xeb\x76\xbc\xae\x4d\xe4\x85\xdb\x25\x2a\xe3\x79\xa4\x1e\xe3\x76\xa4\x1e\xfb\xe9\x83\x05\x0c\x8a\x9d\xa1\x1b\xc3\xb3\x26\x02\x33\xf6\x14\x1c\x0b\xf9\x5b\x88\xe1\x98\x09\x11\x9a\x67\xbb\x41\xa3\xcb\x26\xbc\x10\xab\x4c\x6c\x1f\xf2\xde\x1a\xcb\xde\x52\xe9\xf1\x38\xe9\x68\xa9\x7b\x9b\x37\xbe\xd2\x99\x8c\xfd\x24\xaa\xbf\xe0\xcb\x01\x84\xa6\xa8\xd3\xc5\xc0\xc9\x80\x03\x23\x43\x0e\x11\x99\xf0\xbc\xd2\x10\xe9\x28\x16\x32\x2b\xbc\x19\x2c\x7a\x45\x34\xb9\x31\xc7\x30\x22\xda\xad\x15\xa6\xc4\x51\xc1\x7c\x55\xdb\xe8\x76\x3c\xd8\x0e\x65\x6f\x8b\xf5\xc5\xb6\xa7\xfb\xf1\xc1\x48\x8e\x00\x4a\x3a\x71\xb7\x33\xed\x92\x8e\x0b\xb6\x18\x56\x71\x2f\x9a\x0f\x53\x08\x71\x17\x37\xfa\x01\x0f\x08\xdd\xd2\x65\x03\xf2\x15\x71\xb1\xc1\xce\x30\x24\x9d\x40\x8c\x5c\x43\x86\x59\x23\x71\xd6\x89\x48\xc6\xf5\x4d\xb4\x32\x27\x14\x48\xff\x7e\xbc\x77\xa3\x2f\x84\x0c\x19\x4a\x27\xe2\xb0\x1c\x9d\xed\x6f\x04\x60\x09\x65\x00\x96\xb0\x11\xb3\x3e\xdd\x30\x77\x3b\xcf\x7c\x88\x07\x7c\x75\x64\xc9\x42\xc8\x6f\x59\x0f\x97\xf5\xc8\xe4\x95\x37\x75\x56\x1e\x72\x9f\x0a\x14\x6c\x01\xe1\x02\xce\xab\x26\x66\x64\x4c\x4c\x37\x9f\x0c\x7a\x66\xba\x72\xd2\xb9\xdd\x7c\x4a\x06\x2a\x20\x83\xdc\xb7\x12\x35\x0f\x23\x39\x0f\x43\x5b\x1a\xd4\x0b\x42\xf1\xba\xf3\xb9\x2b\x44\x27\x45\x4d\x26\x54\x0e\xd2\x24\xe1\x62\xc8\xd3\x60\xd8\x70\x56\xd5\xb8\xa4\xd0\xb8\x52\xdb\x54\x06\x37\x19\x05\x30\xe5\x1d\xba\x91\xa3\x83\xe9\xbe\x6d\x8f\x52\x4a\x0e\x88\x5b\xe0\x17\x28\x24\xe2\xab\x3b\xbc\xc3\xba\xdd\xce\xa8\x8b\x3b\x5e\xd7\x11\x02\x12\x3e\x74\xdb\x52\x52\x22\xb1\x14\x90\x48\x6c\x93\x10\xfb\xe1\x81\x7c\x2c\x36\xe8\x20\xdf\x06\xf2\xb1\x82\x74\x15\x64\x88\x17\x30\xab\xfa\x02\xb6\xb2\x7b\x89\x54\x0a\xa5\x4c\x2f\x26\xa1\x6e\x7c\x74\x10\xef\xdb\x76\x94\xc3\x8a\xf6\x27\xc4\x4d\x65\xbd\x00\x27\xa2\x9f\x83\x6e\x27\xca\xfa\x59\x5d\xda\x44\x5e\xb8\xdd\xff\x9f\xb9\x37\xef\x6e\xdb\x66\x1a\x47\xff\xf7\xa7\x88\xf9\xe6\xf0\x07\xd4\x90\x42\x6a\x17\x13\x54\x37\x49\xd3\x24\x6d\xb6\x27\x71\x93\xa6\x7a\xf5\xfa\x70\x01\x2d\xd6\x14\xa9\x92\x94\x97\x5a\xfa\xee\xf7\x60\x00\x92\xe0\x66\x27\xcf\xdb\xe7\xde\x5f\x7c\x4e\x24\x11\x83\xc1\x10\xcb\x60\x36\x0c\x68\x2f\x7d\x34\x50\xba\xf6\xec\x3e\x86\xcc\x37\xef\x88\x72\x5a\x05\x39\xf8\xbe\x19\xc1\x05\xcf\x08\x88\x29\x8a\x53\x6a\xc8\xc1\x30\x1e\xa7\xc0\xb7\xd3\xb2\xd0\x05\xcc\xe9\x6a\x45\x3c\xea\x72\xda\x81\x70\xb2\xa6\xc8\xeb\x21\x77\x69\xf7\x4c\xf9\x08\xae\x93\xf0\xa9\xf1\xd8\x87\xc1\xf2\x05\x7f\xdb\x42\x75\x7f\xb5\x3a\x5a\x9f\x50\xb4\x2d\x10\xe0\x1e\xff\x51\x56\x3e\x84\x27\xd4\x23\xbb\x13\xba\xfe\xc1\x3b\x24\x79\xc9\x09\x95\x5f\x61\x60\x43\x5d\x47\x71\x8f\xee\x1e\x85\xb8\x0b\xa4\xec\xb9\xab\xea\x8a\xcb\x77\x89\x8d\xbd\x45\x2f\xb2\x22\x03\x8f\xcf\xf9\xfb\x9d\x09\x2f\x97\x6c\xd5\xe3\xd3\xed\x80\xd5\x7d\xf6\x45\x56\xd9\x7e\x48\x42\x7b\x66\x3e\x2f\x72\x16\x1d\xd3\x9e\xf9\xc8\xe0\xf3\xf6\x49\xf0\x18\x73\x85\x9f\xc9\x7d\xed\xc7\x18\xb2\x6b\xf3\x4d\x21\x29\x48\x89\x60\x2b\xb9\xee\x26\xfb\xfd\xff\x9e\xec\xf7\x0d\xb2\x0d\x12\xd1\x9e\xa9\x90\xcd\x27\x70\x49\x2f\xcc\x4e\xac\xeb\x28\x39\xa1\x65\xf3\x09\x90\xfa\xa9\x95\xa7\x5d\x03\x69\x89\xb8\x72\x96\xab\xae\xa7\x2d\x6f\x54\x31\x13\x42\xe3\xf2\x05\x49\x4c\xaf\x40\x5b\x92\x2b\x87\x84\x5c\x15\xdc\xf1\x9d\x97\x53\x2d\xcd\x62\xd2\x44\x17\x2f\xb3\x15\xb1\x9f\xa4\x0b\xc4\x97\xf5\x32\x59\x91\x50\x28\x1a\x09\x5c\x85\x23\x9f\xed\x8a\x67\x39\xf9\xbb\x92\xbc\xbe\x1b\x47\xae\x9d\xa1\x10\x1f\xc8\xdb\xd6\xf7\xf1\x6b\xef\x73\x20\x55\x6d\x1a\xdf\x6a\xbb\x94\x3d\x48\xb3\x24\x70\x33\xed\x28\xe9\x27\x5c\xc9\xcb\x6f\x79\x06\x8b\xc3\x37\x5c\xce\xce\xe1\xe2\xf6\x6b\xa3\x43\xf5\x02\xfe\xb8\xeb\x9e\xfe\xca\x9d\xfa\x1b\x3b\x73\xd7\x1d\xb7\x50\x6f\x15\xb8\xc8\xde\xb0\x74\x6b\x77\xdc\x8e\x1c\xb7\x41\x76\xdc\xa6\xaf\x80\x82\x14\xde\xd1\xf8\x35\x6b\x02\x7e\xc3\x6d\xf1\x29\x0b\x99\xdb\x7e\x45\xf2\x79\x13\xee\x69\xd8\xde\x45\x9f\x9a\xa0\x7c\x13\x6f\xbd\x52\xbb\x09\xda\x31\x3a\x6e\x0b\x60\x17\x01\x7e\xe5\x76\xe6\x9b\x8e\xab\xac\xdf\x28\x50\x57\x41\xe4\xc5\x57\x9d\xb7\xa6\x1f\x09\xfb\x82\xb6\xce\xb2\xad\xf5\xe8\xd1\xd5\xd5\x55\xff\x6a\xd8\x8f\x93\xf3\x47\xe6\x7c\x3e\x7f\x74\xbd\xce\x36\xa1\x46\x02\x7a\x9b\x5e\x9e\x5b\x2d\x50\x03\xc3\x30\x1e\xa5\x97\xe7\x1a\x01\x50\x2b\x22\xd7\x61\x10\x5d\xb4\x81\x0a\x84\xbc\x54\x23\xd7\x9b\xb0\x0d\xe4\xf7\xb7\x6f\x38\xd8\xec\x91\x32\xad\xae\x37\x61\x94\x76\x36\x0d\xa5\x8f\xb4\x03\x89\xdb\x98\xde\x09\xd5\x34\x92\xd0\x4c\xc8\x9d\xef\x7d\xa4\x59\x5a\xc9\x82\x40\x6f\xd5\x00\x83\x76\x4c\x29\xe2\x5c\x12\x2e\x6c\x81\xec\x5a\x9c\x65\xb1\xe2\x49\x72\x62\x72\x79\xac\xbf\xb6\xd3\xf7\x57\xd1\x87\x24\xde\xb2\x24\xe3\xea\xc1\xe2\x16\xe8\xb4\x02\xce\x49\x60\x71\x59\xec\x60\xb1\x83\x9a\x34\xb1\xf5\x4a\x4f\x41\x22\xa8\x6a\xf1\x55\xc4\x92\x9f\x62\x17\x24\x39\x22\x55\xc4\xa2\x0b\x7e\xfb\xf8\xba\x20\x99\xc2\xa5\x1b\x59\xdf\x93\xc0\x2f\x42\xc6\x3f\x2a\xc0\x1c\x66\x91\x9b\x2a\x25\x00\x62\xd8\xaa\x3d\x7a\xf7\x09\x25\x84\xe1\x83\x7a\xb5\xf6\x5d\x77\x8f\x36\x29\x6d\xe0\x63\x7d\xa0\x81\xb0\x3e\x74\x84\xbc\x56\x31\x6c\x19\x99\x18\xb1\xc2\x85\x97\x09\xe8\x45\x6a\xd9\x18\x65\xea\x5e\xb3\x43\xf8\xf6\x20\x24\x88\x36\xfd\x55\x8a\xb9\xbb\xae\x0b\x56\xff\xda\xb1\xe4\xe6\x93\x5c\x51\x88\xbf\x2a\x69\x4b\x90\xfe\xbf\xb8\x89\x67\x5d\xb4\xb8\x14\x17\xaf\xf8\x77\x11\xba\xfe\x26\x42\x9f\x86\xa1\xa0\x75\xfb\x6d\x77\xc2\x02\x06\xc1\xae\xe1\x2a\x56\x85\xbc\x4d\x5b\x45\x25\x5d\x7a\xa5\x1a\x68\xa1\x8d\x0b\x8c\xfc\x20\xf2\x4a\x84\xe7\xb5\x66\xfd\x20\x49\xf3\x39\xf8\x7c\x1d\x84\x1e\x60\x71\x5a\xb0\x84\x19\x4b\x4a\x3c\x37\x35\x3c\x2e\xaf\x9b\x30\x21\xbf\x9c\x75\x19\x2b\x84\x46\x5e\x08\xae\xca\x8b\x5e\x29\x16\xbe\xca\x14\xa5\xac\xb6\xb8\x1a\x4b\x8b\xb2\xca\x4f\x69\x3b\x89\xc0\x4b\x5a\x1e\xc6\xdd\xda\x09\x60\x93\x3f\xcf\xb8\xc2\x7b\x76\x46\xb3\xc3\x55\xd7\x8d\xf3\x57\xc4\xde\x6e\x59\xe4\x41\xb7\x58\x2d\x6f\xa4\x22\xee\x07\x51\xca\x92\xec\x19\xf3\xe3\x04\x1c\xc8\x05\x11\xf8\x40\xd4\xb2\x9a\xcd\xec\x5b\x50\xc1\x65\xf0\xca\xfc\xba\x97\x96\xc6\xb2\x21\xf5\xf9\xf9\x7d\x28\xf2\x09\x0d\x5b\xcd\x8b\x6f\xbe\xe8\xb8\x1c\xdd\xeb\xaa\xd3\xa1\xd0\x8c\xa4\x74\x97\x95\x06\x8d\x38\x97\x40\x53\xd0\x01\x53\x8c\x6c\xca\x35\x0f\xbc\x40\x76\x39\x6a\xf1\x32\x5d\x91\x68\x99\xae\xa8\x8d\xad\x84\x7f\xf2\xd9\xc5\xe7\x10\x2f\x11\x4e\xe4\xc7\x29\x58\x2e\x4a\x0c\xba\x8e\x02\x51\xa5\x72\xe9\x70\xcb\x9d\xbc\xe2\x32\x00\xc0\xf9\xd6\xde\x12\xaf\x24\x70\x5d\x10\x48\x7c\xc5\xc6\xe4\xa9\x29\xf7\xc5\xe5\x49\x28\x2c\x5a\xf5\x79\xab\x3b\x6a\x0b\xf7\x51\x48\xc2\xe2\x45\x48\x4a\x32\x7c\xa2\x69\xc4\xe5\xdb\x12\xda\xe1\x05\x50\x18\x5a\x6e\x3f\x65\x19\xda\x91\x10\x37\x93\xf9\x17\x98\xc4\xdb\x92\x94\xc4\x80\x03\x85\xd4\xed\x9f\xf3\x6a\x18\x73\x85\x97\x23\x52\xda\x12\x9d\xe6\xf6\x45\x2e\x51\x0e\xd4\xd5\x73\xed\xaf\x21\x70\xf3\x77\xc1\x94\xd2\x30\xef\xcd\x10\x77\x5d\xd0\x9c\x37\x5c\xb9\xa0\x59\x35\xb2\x3d\xc9\x16\x3d\xd3\x62\x3f\x66\x0b\xfe\x3f\xdc\xde\xf2\xce\x7e\x57\xb9\xac\xb9\x6d\x82\xc1\x3c\x4d\xd8\x26\xbe\x64\x4f\xb3\x2c\x09\x9c\x5d\x06\x61\x2e\x95\x9b\x96\xbf\xb5\x62\xeb\x9e\x57\x20\x7a\x5a\x21\xb8\x8e\x2a\x65\x99\x42\x00\x68\x9c\x45\xcd\xe7\xdf\x5c\xb3\x49\x41\x15\xd3\x45\x17\x26\x69\x8c\x6e\x37\x15\xca\x2b\xe9\x93\x45\x47\x6f\x59\x6d\x6f\x90\xa8\xed\x7e\xfc\xe7\xdb\x6d\xe9\xec\x26\x1d\x2d\xfd\x91\xc8\xcd\xad\xf5\xae\xb5\xda\xfe\xa0\xeb\xb5\x07\x7d\xe9\x09\xf8\x1c\xb0\xab\xfd\x9e\x15\x82\x97\xae\x33\xf8\x59\x96\x76\xdc\xd6\xd6\x18\x3c\x2e\xb5\xcb\x57\x2b\xc4\xc8\xca\xfc\x7b\x97\x6b\x85\x77\x62\x48\x59\x56\x56\x07\x78\x05\xc5\xeb\x6e\x14\x42\xde\xbf\xbb\xff\xa3\xc5\x5d\xa4\x5a\x9d\x54\x44\x55\x2a\xde\x54\x17\xac\xac\x72\x5e\x56\x81\x8b\x2d\x50\x86\xf7\xfb\x3f\xb9\x86\x7c\xce\xb2\xe7\xf1\x66\xbb\xcb\x98\xf7\x89\x83\x22\x71\xa5\x0c\x6e\xab\x52\xb6\xf2\x73\x7b\x67\xcb\xa4\xc7\x9c\xd6\x25\x5b\x29\x54\xfd\x7d\xd7\xda\x5a\xb2\x55\x25\x7f\xca\x6f\xff\xbb\x69\x5c\x25\xc2\xca\x5b\x48\x94\x16\x9e\x55\x33\xb3\x27\xc1\x06\xe1\x7e\xba\x0d\x83\x0c\x3d\xfa\x9f\xfd\x7f\xa7\x27\x8f\xd4\x73\x68\x15\x60\xc8\x14\xf4\x26\x48\xb3\xfd\x9e\xb3\xe1\xcf\x95\x80\xab\xcf\x65\xbc\x55\x14\x7b\xac\x10\x5d\x40\xd8\xa1\xcf\x10\x0c\x44\xb9\x7c\x35\x40\xa6\xe1\xfd\x5e\xd3\x70\xe5\x36\x0a\xfe\xfe\x85\x15\x90\x72\x0a\x72\x7b\x4f\x56\xb3\xf7\x24\x7d\xdb\xf3\x50\xb6\x8c\xd4\x5c\xd7\x7f\x7d\x1f\x06\x31\xdb\xea\x48\xbe\xb4\x8f\xf1\x43\x19\xf7\xa1\x4e\xba\x97\xed\xa0\x7f\xb5\x80\x7e\xed\x1a\x5c\xd4\x31\xae\x8b\x87\xd6\x5f\xb8\x05\xd1\xaf\xf9\xd2\xcc\xd8\x75\xf6\x3c\x8e\x32\x2e\x2b\x6a\x5a\x2d\xc1\x7e\xc7\x72\x56\xeb\xb0\x43\x25\x7f\x7a\xb7\xda\xd8\xe1\xe2\x39\x6a\x60\x14\x33\x31\x5b\x68\x9a\xa5\xce\xeb\xdf\xf3\xd6\xe1\xbe\x87\x57\xa7\x6f\xdf\x54\xe8\xfd\xe3\x0e\x7a\xcb\x1a\x2a\xb5\x8c\xfd\xdb\xe4\x96\x08\x3b\x88\x85\xa4\xe8\x42\x70\x67\xd7\xd9\xa7\xc0\x09\x83\xe8\x5c\xba\xa6\x85\xc0\xf9\x2e\xf6\xa0\x89\x5c\xde\x86\x86\xea\xc9\xd3\x05\x7c\xc2\x2e\x83\x78\x97\x76\x62\xa9\x88\xcf\x59\x11\x69\xa4\x40\x80\xd2\x03\xcd\x28\x2d\x44\x4a\xe2\xf6\xea\xdd\x76\x01\xab\x86\x9a\x94\x98\x8e\x18\xdf\x6e\xc4\x8c\x6f\x25\x3b\xae\x55\x75\xc3\x38\x62\xbc\x26\x3a\x36\x71\x1e\xb0\xa2\xe0\x2b\x62\xa6\xdb\x15\x0a\xa5\xf7\xb0\xa5\x06\x5f\x76\x37\x63\xfc\x83\xcd\xa4\xec\x7e\x56\x07\x46\x5c\xd4\xb4\x17\x80\x19\x87\x95\x66\x9c\x7e\xdd\x8c\xa3\x18\x6f\x92\x13\x13\x13\x56\xb5\xe5\x90\x5b\xae\xa1\x59\x8c\x70\xf6\xc7\x27\x17\x56\xba\x39\xbc\x73\xee\x4a\x8d\x2f\x86\x84\xcc\x59\xd3\x89\xd3\x33\x49\x5c\x32\xb2\xdc\x7f\x93\x50\xce\xc2\x08\x83\x4c\xc8\xba\x9e\xc0\xe7\x31\xa5\xe2\xc1\x7e\x9f\x80\xd6\x09\x0f\xf8\x97\x45\xb6\x3c\x39\x09\x56\x34\xb1\x14\xc9\xe7\xc5\x25\x8b\x32\xce\xdf\x59\xc4\x12\x24\x50\x90\xa4\x1f\xca\x27\x24\xe9\xc7\x5b\x4e\x6a\x8a\x1f\x9f\x9c\x04\x8b\x9c\x06\x1a\x58\xca\xbe\x03\xa4\x1f\x94\xd5\xb4\x63\xf7\x08\x07\x9c\x2f\xe7\x15\x6b\x66\xb5\x16\x5b\x02\xab\x84\xb5\x55\xd4\x63\x7c\x38\xa0\x0c\x97\x8e\xc0\xd2\x9d\x55\xb8\xbb\x6c\x70\xf4\xd8\x58\xf8\x22\x83\xa5\xbd\xc2\x22\x77\x74\xde\x53\xba\x1e\x41\x07\xd1\xbc\xa7\xb0\xaa\x6f\xb6\xf5\x93\x48\x3e\x4d\xa2\xb2\x9f\xa2\xa2\x9f\x04\x7d\xb6\xe7\xdd\x53\x85\xc6\x65\x25\x9a\x60\x72\x19\x07\x1e\x8a\xa4\x03\x39\x93\x7c\xab\x81\x46\x50\x4c\x62\x92\xf0\x0d\x4e\xce\x38\x89\x9a\x4f\x3b\xf1\x02\xf2\x8a\xb1\x8c\xe4\x8d\x59\x31\x91\x4d\x81\xa7\x76\x11\x08\x6f\x43\x91\xb5\xf0\x2c\x8e\xe8\x32\x52\x45\x18\xb7\x16\x64\xfe\xa7\x08\x0e\x8b\xfa\xcf\x77\x69\x16\x6f\x80\xaa\xa3\x16\x1f\x73\xb0\x10\xc1\xd4\x01\xdc\x7a\x61\x21\x5e\xc5\xab\x19\xf3\x78\x5d\xa4\xc1\x87\x86\x49\xb2\x40\x41\x3f\x88\x82\x4c\x3c\xcf\x48\xd2\x77\x76\x8e\x13\xb2\x94\x24\x7d\xd7\x8e\x5c\x16\xda\x4e\xc8\x5b\xef\x7b\x2c\xb3\x83\x90\x26\xf2\x0b\xb6\xaa\x15\x8f\x4d\x72\x6c\x42\x16\x73\x2f\x48\xb7\x76\xe6\xae\x45\x89\x7a\x41\x87\xc7\xba\x76\xe4\xdc\x54\xae\x1e\x84\x29\xeb\xad\xbf\xa3\x5e\x47\x92\xf4\xc3\xe1\x73\x25\x06\xcc\xab\xda\x6c\x14\xd9\xa9\x60\x42\x0c\x3f\x29\xe3\x9e\x44\x11\x0c\x5c\x11\xb3\xc6\xe5\xae\xaa\x92\x24\xa5\x2c\x55\x14\xeb\xff\x19\x07\x11\xd2\x1e\x68\x18\xe3\x03\x11\x13\xda\x6a\x32\xc0\x76\x02\x8e\x32\x35\xf6\x4a\x94\x72\x86\xca\xdf\x97\x98\xff\x0b\x3a\xdc\x38\xca\xec\x20\x4a\xbb\x2d\x3d\x75\x52\x7e\xa4\x86\x34\xf1\xf8\x8c\x2e\xf9\x16\xb8\x52\x02\x64\x2a\x67\xf8\xce\x93\x78\xb7\x4d\x0b\x89\x54\xec\x2c\x29\x55\x4e\x51\x6c\xd4\xdd\x94\x5d\xf1\xfa\xcb\x65\x31\x53\x6b\xc6\xef\xd5\x8a\xf8\x0c\x1f\xb6\xea\x01\x9e\x0d\xeb\xb2\xcb\x6d\x19\x11\x4e\x96\xca\xab\x95\x8b\xe5\x58\xb1\x02\x23\x46\x5d\xc4\x70\x79\x29\x45\x3e\x0e\xe2\x0d\xc0\xb3\x20\xed\x39\x91\x62\xcf\x49\xf8\x62\x34\x1e\x07\xe0\xb1\x2f\x59\x9f\x88\xd3\xc9\x96\xc1\xaa\x1a\x85\x13\x2d\x83\x95\x52\x3b\xc4\xc4\xa3\xc6\x63\x0f\xec\x4f\x1e\x46\x31\x4d\x97\x1e\x58\x82\x6c\x2a\x99\x6d\x4c\xe2\xd2\x08\xe4\x91\x14\x7c\x15\x5a\xfe\x44\x0b\xa2\x07\x31\x07\x57\x8c\x37\x25\x4f\x26\xbb\xa5\xb7\xa2\x76\xe9\x33\x16\xdd\x1b\x55\x07\x03\x1f\x48\xe1\x09\xab\x74\x54\xc7\x4d\x01\x77\x1b\xf5\xee\x16\x02\x2b\x56\xf2\x6c\xb1\x5c\x59\x1e\x57\xf0\x0e\x5c\xd5\x84\x49\xfe\x2d\xbd\xbf\x5c\x91\x80\xff\x17\x53\xe3\x71\x2c\xc2\x62\xb1\x6a\x28\xcc\x96\x71\xad\xdb\x8d\xc7\x3b\xe8\xe2\x1d\x46\x36\x4d\x97\x3b\xe8\xe2\x48\x2e\x61\x79\xb7\x15\x29\xfb\x90\x88\x1b\xa9\x24\x73\xb6\x71\xb3\x03\x83\xa2\xd3\xee\xb6\xf9\x0a\x98\xe2\x9a\xd3\xf3\x36\xc0\x16\x7f\x62\xb9\xcf\x16\xe6\x72\xd0\x42\x50\x47\x30\x11\x44\x10\x55\x49\x4a\x58\x74\x0f\x55\x4f\xc3\xb0\x20\xec\xe6\xdb\x08\x73\xfe\x5d\xc2\x84\x53\xe0\xdb\x96\xe1\xf6\x1f\x5d\x86\x62\x11\x96\xa1\x86\x24\x14\x8b\x10\xe2\x04\xf8\xbc\x48\xc5\xbc\x88\xa9\x2d\xe6\x45\xdb\xba\xdb\x11\x1b\xeb\xba\x0c\x17\x88\xef\x5f\x4f\x70\xd7\x68\xd5\x7c\x1f\xf8\xe8\xb8\x1e\xc0\x95\xcb\x37\x6a\x0c\x1b\x5f\x30\x9f\xb0\xcc\x92\x9c\x2d\xde\x5b\xd7\xc5\xf1\x59\x89\xbf\x90\xd9\x44\x97\x1c\x75\x76\xe4\x8b\x4a\x47\x96\x81\x47\x95\x83\x54\x31\x26\x69\xf5\x67\x58\xfd\x29\x7a\x29\x86\x5e\x12\xd7\xa7\xd3\x68\xb9\x5b\x91\x35\x0d\xf8\x87\x4f\xd7\x39\xda\x2d\xf5\xf2\xd5\xe4\x12\x57\xd7\x5d\xb5\x03\x23\x8c\xc9\x86\x6e\xcb\x7b\xd6\xf9\x32\xac\xde\xb3\x7e\x0e\x43\x50\xbf\x7b\x3d\xac\x3e\xf3\xf1\x51\x82\x5c\xb2\x26\x97\xe4\x9c\x38\x64\x4b\xb2\xf2\x15\x6f\xc8\x19\xb9\xa2\x06\x39\xa5\xc6\xe3\xab\x27\x9b\xc7\x27\x27\x57\x5c\xda\xbc\xa1\x97\xcb\xab\x95\x90\xe6\xaf\x7e\xa4\xa7\xba\x8e\x4e\xe9\xd5\x89\x89\x1f\x1f\xa3\x33\x7a\xbe\x3c\xe5\xc3\x7e\x72\x72\xfa\x64\xf3\x18\x3f\xbe\x91\x0e\xa1\x33\x79\x6b\x8a\x0c\x57\x44\xa2\xcf\xb6\x0c\xd9\xfc\x55\xfa\x67\x2c\xca\x58\x42\x53\xce\x35\xd8\x75\x90\xd1\x90\xd8\x07\x02\x0f\x5b\x3c\x7f\xb2\xaa\x18\x36\x00\xda\xef\xd5\x31\x04\x55\xe8\x0c\x37\xe6\x11\xc7\x7c\x2f\xba\xeb\x20\xfb\x36\x6c\x7c\xd7\xaf\x1d\xee\x28\x6c\x84\x1c\x14\x08\x43\x58\xce\x2f\xae\xe9\xc0\xd3\xeb\x20\x43\xe5\x94\xef\x08\x96\xe4\x22\x6c\x24\xd5\x72\xc4\x4e\x34\x0d\xcb\x2b\xa2\x33\x5d\x47\x01\xe5\xb2\x9f\x78\x42\x69\xb2\x88\x73\xd3\x0f\xb6\x12\x3e\xc5\x22\x5d\x0f\x16\x51\x7f\xc3\x92\x73\x86\x02\x2c\x42\x2d\x11\x5c\x55\x07\xcf\x2a\x7c\x03\xae\xd5\x67\x0f\x82\x28\xcd\xb8\x4c\x1a\xfb\x0f\xb6\x0c\xe3\x6c\x9d\xc4\x57\xd0\x31\x2f\x92\x24\x4e\x90\x16\x44\x97\x76\x18\x78\x0f\x00\x81\x76\x07\x3f\x61\xc5\xf7\xa8\xe4\x2d\x01\x4d\xca\xb8\xac\xe2\xa8\x29\xdc\x6f\x54\x3d\x85\x48\x84\x0b\x24\x06\x17\x48\xde\x46\x48\x76\xe0\x0b\x21\x2e\x4d\xf8\x87\x47\x77\xa5\x5b\xc8\xce\x5d\x29\xb9\x43\x48\x46\xc1\x79\x10\x05\x87\x42\xba\x5b\xfa\xab\xfd\xde\x5d\xfa\xb0\x4b\xad\x97\xfe\x8a\x86\x85\xa3\x2a\x82\x86\x00\x07\x6f\xa1\xc6\x89\xec\x8e\x9d\x3d\x88\xa3\x0e\x7f\xf4\x81\x40\x67\xab\xa5\xf9\x5b\xb0\x6a\x4f\x65\x5c\xfb\x4d\xd4\xc0\xaf\xec\x49\xf2\xb8\x96\x73\x39\x53\x03\x1c\x7b\x26\xb1\x69\xb0\x8c\x57\x8f\x7b\xbd\x18\xc2\xaa\x41\xef\x8b\x85\x80\xa3\xeb\xa3\xff\x89\xfa\x6e\xbc\xe1\xc4\xe6\x26\xf8\x0f\x71\x1a\x00\x19\x9c\xdf\xda\x9d\xb6\x9a\x88\xd8\x30\x10\xc5\xb4\x14\xaf\x92\xc6\x49\x55\xd4\x2b\xcd\x4a\x48\xd5\x82\x33\x5d\x4f\x16\x0c\x65\x25\x7f\x4a\x4a\xa1\xc9\x3a\xce\x7a\xc7\xc9\x81\xed\xf7\x88\xd1\xd3\x72\xe2\x24\xd5\xee\x88\xca\x19\xd2\x38\xb5\xca\xc5\x92\xa8\x0c\x9e\xcd\xe5\x92\xa4\x21\x97\xf0\xce\xa8\x8a\x83\x2e\x35\x1e\xbb\x20\xab\xb8\x42\x56\x71\xa1\xb7\x76\x4b\x17\x04\xb9\x9d\x88\xe2\x2b\xb3\xd5\xc9\x81\x0f\x6a\x03\x9f\x2f\xa1\x03\xe1\xec\xb8\x79\x10\xaa\xd8\x89\x96\x46\x31\x87\xd4\x67\x82\x03\xe4\x52\x9c\xb8\x52\xb3\x0c\x2e\x17\xbd\xcd\x55\x8d\xb4\x65\x5a\xd5\x76\x33\x2c\x20\xbf\x69\x86\x19\xea\x04\xcb\x60\x33\xcf\xca\x19\x26\xe6\x57\x40\x0d\x12\xd3\x28\x87\x0a\x60\xed\x05\xf9\xbd\x71\x7c\x6f\x3f\x0a\x7c\x54\x5c\x08\x6a\x1f\x54\x4b\x1d\x49\x83\xbf\x2b\xa4\x84\x2c\x7b\xc0\xa8\xa1\xc4\xc6\x67\x0f\x62\x1f\xe6\x13\x3e\x39\x29\xef\x63\x3e\x10\xb6\xd9\x66\x37\xcd\xd7\x3d\x16\x76\xb0\xd8\x83\xe8\x45\x66\xbb\xeb\xea\x0c\xec\x62\x3b\x86\xc2\x6e\x8a\x90\xe9\x1c\x3a\x80\xcc\xe5\xc9\x4a\xc6\x35\xc6\x75\x13\x0a\x0a\x68\xbc\xb4\x15\x69\x25\x20\x41\x39\x99\x6d\x12\xd7\x16\x86\x9d\x65\x49\xeb\xe9\x52\x88\xcd\xe1\xdd\x55\x93\x4c\x9e\x0c\x2a\x3b\x83\x78\xbd\xc2\x0a\x27\x83\x78\xa2\x8a\x5b\xe1\xdd\x27\x94\x48\x6f\x5c\x92\xbb\xec\xaa\x10\x28\x29\xef\xc3\x86\x9d\xc5\x76\xd7\x08\xe5\xba\x40\x8e\xf5\x83\xf5\xb6\x2d\x66\xbe\x04\xf8\x68\x5d\x58\xf9\xf7\xe7\xd6\x53\x0c\x47\x62\x38\xab\xcb\x6e\x42\xd6\xd8\xdf\x3a\x62\xe7\x7f\x34\x17\x2d\x34\xfc\xd4\xde\xf2\x6b\xeb\x1d\x06\x7c\xf9\x06\xa6\x69\x56\x82\xb1\xf5\x06\x29\xbd\x03\x07\x29\xb7\xd2\x75\xd5\x1e\xbb\xf1\x6d\x44\xfc\xdc\x4e\xc4\x6f\xd6\xdf\x58\x24\x73\xb0\x94\x56\x97\x6c\x75\x20\xa0\xe1\x33\xaf\x75\x84\x9f\x89\xdd\xb8\x6b\x90\xcb\xc5\xf5\x4a\x7d\x19\x9c\x1b\x3b\x93\x92\xdd\xf3\x95\xc6\xc5\xa9\x63\x71\xa3\x9a\x1d\x44\x29\x4a\x96\xc1\x0a\xcb\xa5\x76\x9c\xdf\x61\x7d\x6c\xb4\x0c\x73\xeb\x3b\x7d\xb5\xb2\xc5\x17\xeb\x65\x31\x84\x19\xbb\xce\xda\x34\x91\xe6\x35\xcb\x05\xe2\x5c\x83\xf9\xd5\x6a\xd7\x41\xfe\x65\xfd\x82\xc5\x8d\xcc\xe5\xdb\xa9\x5e\x93\x03\x81\x58\xc6\x7f\xaf\xd1\xdf\x3b\x1a\x65\xcc\xfa\xa3\xd9\x6a\xe1\xfc\x38\x90\xc4\x0e\x52\xd6\x15\x22\x06\x4d\x64\x7c\x3a\x85\xf1\x55\xab\x3c\x59\x82\x25\x1c\x4c\x88\x5d\x2d\x96\xa4\x0e\xad\x2c\x2c\x23\xf2\x2a\x6a\x6a\x4b\xdc\xa8\xb0\x7e\xaa\xde\x96\x2e\xa3\x1a\x2e\xc2\x97\x5a\xe7\xe1\x1d\xa4\x70\x4d\x4e\xce\xfd\x88\xb5\x4f\xfe\xcc\x72\x51\xf6\x5d\x34\x57\xe4\x85\xa4\xe3\x94\x54\xd4\xfe\x5c\x88\xfe\xe2\x95\xea\x56\xba\x96\x31\x08\xe4\x11\xed\x88\xdd\x67\x07\x60\x0b\x9b\x59\x31\x13\x1a\xe2\x6e\xf3\xed\xb3\x2e\xe7\x2b\x8a\xe5\x87\xb0\xea\xec\x2a\x82\x68\x48\xdc\x21\xe5\xc3\xa1\x8e\x94\x49\xf1\xdc\x2e\xb6\x95\x23\x10\xa9\x5b\xb8\x83\x60\x0f\x29\xcd\x16\x3b\x66\x85\x8c\x44\xd4\x78\x1c\xc1\xb1\xa0\x08\x97\xaf\x9f\xa2\x18\xf2\x61\x10\x25\x66\x1e\xb6\x1d\x71\x58\xa4\x4a\xa3\x70\xad\x54\x45\x65\x83\xb8\x85\x50\xf4\x78\xf7\xc4\x05\x55\x53\x9c\x04\x34\xb8\xbc\xb4\xdc\xad\x8a\x66\xc5\x81\x16\xde\x60\xe1\x3c\x08\xa5\xf3\x20\xc8\x9d\x07\x61\xc5\x79\x10\x0a\x53\xfe\x81\xe4\xb6\xe8\x3b\xe2\xea\xee\x60\x55\x6b\x66\x79\x4c\x32\xe0\x03\x59\x7e\xba\xd9\x38\x71\xd8\x0f\x32\x96\xd8\x59\x9c\xac\x0a\xa4\x3f\xfc\xfb\xf2\x4d\x29\x41\x1b\x5c\x70\xae\x1f\xc4\x52\x84\xe7\x9b\x80\x85\xde\x83\x28\x0f\xb4\xbb\x64\x74\xc3\xc8\x79\xdb\x79\x37\x2d\xcd\x92\x20\x3a\x57\x17\x5d\xd3\xc8\x5a\x8f\x02\x5c\xad\x48\xb7\x05\x56\x64\x66\x02\x04\x4c\x9a\x63\x89\xd3\x7a\xd4\xee\x9c\x21\xbe\xbc\x85\x84\xd2\x85\x8f\xf7\xe6\x0d\x48\x60\xb9\xac\x7e\x56\x33\x08\x5f\x29\x7e\xc5\xab\xc2\xb9\x7b\x46\xb5\xff\x47\x3b\x41\x27\x27\x37\x0c\xf7\xb3\xf8\x13\xbc\x26\x1a\x4e\xf0\xe1\x4a\xb5\x07\x9f\x75\x1a\x87\xaf\x78\x8f\x65\x77\x0a\x6b\x8f\x8f\x51\xf6\x20\x88\x1e\x30\x2c\x36\x3e\x88\x11\x2f\x75\x92\x7c\xe3\x2b\x84\xc4\x65\xb6\xe2\x1a\x57\x9d\x01\x96\xc5\x80\x75\x45\xb3\x56\xe3\x7f\xc5\xe4\x0e\xcd\xea\x7a\x7e\x9d\x77\x5e\xf5\x40\xf2\x57\xed\xe2\x48\x67\x79\xf0\x65\x75\x48\xb8\x9c\x9b\x09\x25\x12\xbc\xa7\x70\x17\x3e\x78\x65\x1e\x63\x56\x9e\x74\x65\x07\x72\x5d\xbf\xb9\x16\x12\xbd\xbd\x80\xeb\x7f\xca\xeb\x5f\xa5\x17\xd6\xdd\x25\xbc\x37\x4e\xe1\x8a\x7c\x5c\x72\xfb\x4c\x44\x56\x7d\xfa\xfc\x52\x0e\xf3\x7e\x9f\x41\x82\x05\xe9\x7a\xfa\xf4\xf9\xe5\x87\x32\x59\x1c\xd7\xa5\xaa\xcf\x15\x83\x43\xff\x9a\xb7\x13\x06\x2c\xca\x7e\x27\x51\xff\xa6\xf8\xf5\x95\x2c\x51\x44\xa3\xfe\xc6\xce\x92\xe0\xfa\x34\xb1\xa3\xd4\x8f\x93\x0d\xca\xb8\xd0\xf9\xc9\x4d\x18\x8b\x9e\x9f\xbe\x85\x7d\x57\x9e\xc6\xc1\xb8\x7f\xcd\x51\xac\x0e\x81\x2f\xc0\x9e\xc5\xbb\xc8\x0b\xa2\xf3\xe7\x80\xf1\x23\x73\x25\x45\x01\xed\x28\x2e\x08\x5b\x16\x44\xf5\xf8\x4a\xf5\xb3\x5e\x26\x1f\xbc\x61\x7e\x46\x0a\x22\x7b\x41\x3f\x8b\xb7\x45\xe1\x69\xbc\x5d\xe5\x36\xa5\x25\x9f\x4c\xe7\xec\x77\x22\x3e\xbf\xae\x0e\xe4\x7d\xbd\xf3\x4b\x17\x3a\x74\xb1\xb0\xeb\x7d\xd3\x58\xf0\xb9\x9a\xc5\x3b\x77\xcd\xd2\xfd\x7e\xc9\x56\x98\xa8\x91\xed\x84\xd1\x1f\xaf\x59\xce\xce\x3e\x7d\x27\xeb\x68\xe7\x1c\x22\xf8\xf7\xdb\x78\x47\x2e\x41\x81\x07\x80\x57\xf2\xd9\xbd\x87\xa5\xca\x00\x0c\xf5\xac\xdb\xdd\xc3\x74\x7b\x15\x78\xd9\xda\xca\xfa\xf0\x49\xd6\x2c\x38\x5f\x67\x56\xd6\x17\x5f\x48\x16\x6f\xad\x8c\x0f\x10\x49\x64\x01\x7c\x12\x27\xce\xb2\x78\x63\x65\x7d\xf1\x85\xf0\x01\xb6\x32\x18\x67\x72\x9d\x7f\xb9\x11\x55\x15\xe7\x64\x20\x0d\x54\xf2\xed\xf2\x2d\x48\x9c\xcb\xe1\xf3\x5f\x5b\x8a\x03\x08\x0f\xbe\xc0\xa3\x95\x26\xc2\x04\x72\xf6\x85\xcb\xd7\xaa\x44\x26\x1e\x95\x86\x8b\x5a\x94\xa2\x40\x5d\xdc\xed\xac\xc4\x93\x94\x7d\x14\x94\xe2\xde\x6d\xea\x26\x71\x18\xbe\x11\xaf\x03\xb3\xef\x3d\x9c\x37\x26\xa2\xe0\x14\xfa\x03\x66\xa3\x78\xae\xbc\x9c\x7a\xb6\xa5\x62\x7f\xe3\xf8\xfb\xc5\x3a\xaf\x14\xc9\xa7\xed\xe7\x4e\x9a\x48\xb8\x70\xdc\x8e\x48\x29\x51\x82\x39\x94\xc9\xba\x8b\x3c\xe6\x07\x11\xf3\x4a\x2b\xf8\xa7\xb5\xed\xc5\x57\x1f\xe3\x18\x96\x4d\xa3\xb1\xb2\xb8\xd6\x56\x59\xa0\xf8\xab\x77\x2a\xe1\x0b\xc4\x40\xa4\x79\x67\x6f\x18\x44\xd1\xf5\xb3\xf8\x0d\x97\xd5\x9f\xdb\x9c\xcf\x58\xd5\xa8\x20\xb7\xac\x8a\x10\xef\xc5\x45\x6d\x78\xad\x32\xd6\x14\xe7\x43\x5a\x3e\xa9\xaf\x22\xc5\x87\xae\x1e\x9a\x40\xe0\xbe\x84\x99\x79\x12\xc3\x79\xcf\x62\xa8\x15\xef\xb9\x52\x23\x68\x8f\xc3\x54\xde\xd9\x2f\xe7\x10\xb8\xba\x81\xaf\x5f\xb2\xc4\x0f\xe3\x2b\x30\x5f\xe4\x3f\x7e\x87\xf8\xbe\xfc\xd7\x57\x39\xd9\x1e\xd9\xbb\x2c\xde\x0b\x32\xf6\xbc\x30\xb4\x6f\xf6\xeb\xc0\xf3\x58\xf4\xa8\x9f\xb1\x34\x43\xc9\x49\x70\x12\x29\x0d\x6e\x0b\x79\x35\x67\x6e\x89\xae\xa3\x84\x1e\x9b\xc2\x23\x62\x93\x90\xac\x29\x57\x05\xc8\x96\x72\x2e\x40\x36\x34\xe5\xbf\x2e\xa9\x3a\xb3\x0d\x65\x36\x1b\x07\x72\x4e\x6f\xaf\x2d\x83\xdc\x58\xc6\x21\x3f\x87\xb4\xd9\xef\x8f\x37\xba\x7e\x9c\x70\x69\x0a\x69\x4e\xec\xdd\xf0\xa5\xb8\x83\x00\x55\x1f\xad\xc1\xcb\x7a\x49\x91\x4d\x33\x7c\x4c\x69\x00\xf6\xc8\x14\xd9\x78\xa1\xb6\x83\x42\x6a\xab\xfd\xac\x34\x1b\xf6\x8b\xef\x07\x2b\x46\x36\xc6\x84\x13\xba\x40\xe8\x9c\x46\x28\xe3\x3b\xd1\x09\xad\xec\x18\xe7\xfd\x9b\xf2\xc9\x69\xbc\xc5\xd6\x5a\xd7\xd1\x79\xff\x9a\x7a\x9c\x1e\x4c\x6e\xaf\xad\xad\x18\xde\x4b\xa5\xcd\xde\x79\xff\x9a\xdc\x58\x5b\xce\x89\x8a\x82\xd3\x78\xdb\x3b\xef\xdf\x10\xc1\xfc\xb6\x55\xe6\xb7\x95\xcc\x4f\x59\xda\x9b\x72\xa0\x23\x31\xd0\x4c\xe6\x21\xf8\x02\x35\x83\xe2\xf7\x2b\xa8\x9a\xf3\xa3\x22\xc1\xa2\xe4\xaf\xbd\x04\x3f\xa1\x26\x0c\x99\x7c\xa2\xe4\x64\xcc\x99\x6e\x2f\x90\x40\x7c\xce\x88\x47\xf0\x72\x79\x13\x6f\x04\x6f\xcd\x7f\x9e\xc6\x5b\xf9\x1e\x49\xfe\x06\x81\x42\xfa\xa5\xc2\x03\xe0\x00\x23\xe5\xc3\xc8\xd7\x98\xc5\xfa\x76\x9a\x06\xe7\x11\xf3\x3e\x85\xb0\xc8\x15\xd9\x6d\xbf\x07\xd9\x74\xc1\xfa\xeb\x38\xcd\x60\xc1\xe2\xfd\xde\xad\x4c\xff\x73\x45\x7f\x3d\xaa\x6d\xb7\xcb\x55\x7e\x9c\xb2\x0c\x8b\x2c\x8f\x5b\x2d\x05\x29\x44\x4c\x2c\xa2\xfd\x57\xbe\x84\xb5\x55\x11\x46\xc1\xe7\x1a\xfe\x91\x1a\x8b\xac\x16\x85\xce\xeb\x58\x7c\xb2\xe8\xba\xcf\xa7\x4c\x66\x31\x74\xc9\x81\x0f\x7c\x68\x62\x1a\x51\x4a\xe5\x0e\x03\x49\x07\x2a\xb5\xf1\x42\x10\x6a\x25\x80\x87\xab\x79\x01\x8a\x30\x09\x69\xbc\x58\xda\xab\xfc\x00\xb3\xdd\xbf\x0c\xd2\x9d\x1d\xf2\x4d\x64\x1b\x27\xd9\x7e\xbf\x5c\x11\x1f\x45\x78\x11\x59\x4b\xbe\x4d\x13\x97\xcf\xc5\xfc\xb4\x73\x3e\xde\xf1\xc2\xb5\xdc\xfc\xf1\x39\xba\x44\x21\x56\x83\xeb\x9c\x72\x2c\x96\x5a\x66\x3b\x21\xd3\x88\x96\x79\xfc\xbf\x75\xe5\xcd\x19\xbc\x79\x59\xf1\x46\x61\x4b\x7c\x87\xd0\x75\xcd\x0f\xae\x81\x97\x03\xe7\xe9\x6f\xa5\x5f\x60\x91\xcf\x8a\x0f\x30\x92\x35\x46\x7b\x56\x15\xe2\x03\x31\x95\x39\xf2\xc7\x89\xae\x3b\x88\xaf\x76\x2d\xcd\xec\x2c\x70\xf9\x34\x59\xa3\xa4\xc4\xfc\x18\x73\xc8\xf2\x7c\x3d\x67\x3c\xca\x84\x4a\xf0\x7e\x2f\x46\x53\xfe\xec\xc6\xc4\x47\x2c\xd9\xef\xdb\x15\x8b\x9e\x79\x4c\x69\x64\x5f\x06\xe7\x5c\x6d\xec\xef\x52\x96\x3c\x3d\xe7\xa3\x5e\xd9\x40\xca\xe0\x47\x3f\x48\x98\x1f\x5f\x6b\xfc\x45\xf8\x54\x7f\x9c\x42\xdb\xd5\x09\xa6\x76\x6d\x82\xf1\x13\xe3\x71\x2e\x57\x73\xc2\x40\xee\x88\xe2\x88\xf1\xde\x8c\xfa\x59\x2e\x28\xef\xf7\xca\xd3\x2d\x4b\xd2\x2d\x73\xb3\xe0\x92\x6f\x68\x5b\x3b\x88\x32\xfe\x62\x85\xa9\x6f\xbf\x07\xca\x97\x5a\x51\x5d\x23\x9a\x52\x49\xa1\x21\xea\x5f\x05\x61\xf8\x7c\x6d\x47\xe7\x0c\xef\xf7\x19\x0c\x66\x98\xb1\x44\x20\x2c\x0b\xa1\x2c\x92\x07\x06\x75\x5d\xa1\x46\x3c\xca\xc5\xa7\xe4\x28\xa1\x89\xb2\x76\x2b\x16\x7d\x04\x6d\x1c\xaa\x07\xe9\xed\x28\xd8\xd8\x19\xfb\x39\xe8\x38\x5a\xfd\x4b\xe3\x34\x3d\xfb\x14\x44\xe7\x21\xcb\x3a\x4e\x78\xbf\x54\x2b\x70\xa5\xec\xbc\xeb\xa0\xfe\xaf\x2a\xa4\x1f\x87\x61\x7c\xf5\x7c\x97\xa4\x1d\xe7\xc1\x59\xa6\x40\xaf\x03\x8f\x75\x1d\x06\xff\x4b\x45\x1b\x44\x61\x10\xb1\xdc\x57\xc6\x65\xf4\xb6\x2a\x99\x8a\x3b\xe1\x22\xf2\xd3\x24\xe9\x38\x1e\x1e\x57\x4e\xb0\x67\x81\x7b\x71\xd3\x0a\x97\x64\xf9\x39\xf2\x2b\xaa\x65\xf1\x56\x23\x2f\xa8\x26\x64\x64\x8d\x5c\x53\x0d\xa4\x67\x8d\xbc\xa7\x1a\xdf\xa8\x34\xf2\x89\x2e\xaf\xc8\x0b\x72\x4d\xde\xaf\xc8\x29\xfd\xd4\x4f\x98\xb7\x73\x59\x25\x0b\x85\xaa\xe4\x48\xce\xb2\xcc\x4e\xb4\x5e\x9a\xd9\x49\xa6\x11\xfe\x95\x45\x9e\xb6\xc2\x07\x4c\x96\x2b\x4c\xde\xd2\x65\xc1\xc6\x3e\x91\xa5\xc6\x85\x0c\x6d\x85\xbf\x19\x35\xb9\x0b\xf9\x07\xba\xd4\x1c\xb0\x19\x7e\x64\x36\x67\x5c\x89\xf8\xb0\xfd\x8c\x25\xf2\x91\x28\x7f\x6b\x07\x91\x46\xb4\x8d\xf8\x80\x72\xf9\x48\x94\x7f\x49\x02\x3e\x43\xb4\x2b\xf9\x09\x10\xe2\xe1\x0a\x3a\xf0\x29\xbd\xdd\x86\xb6\x0b\x22\x9d\x55\xf4\xe1\x26\xf6\x02\x3f\x60\x49\x6a\x2d\x57\x24\xcd\x12\x3b\x63\xe7\x37\x96\x66\x3b\x69\x1c\xee\x32\xa6\x29\x27\x8f\x9e\x57\x2c\x4d\x75\xf3\x1d\xc9\x14\xc7\x22\xf0\x41\xe3\x71\xf2\x84\x3d\x4e\x4e\x4e\x70\xb6\x4c\x56\x8a\x0b\x30\xc9\x5d\x80\xc7\x59\x3f\x8d\x37\xac\x1a\x94\x2d\x8b\x10\xe3\xeb\xb8\x69\xc3\xed\xd0\xa2\x0f\x58\xa4\x08\xbb\xa0\xb7\x5b\xbe\x0b\x5f\x32\xeb\xd8\x38\x90\x8f\xf4\x16\xc2\x63\x35\xa6\x46\xd3\xa6\x1a\x61\x11\xdf\x2e\x3c\xeb\xd8\x20\xdb\xb5\x9d\x32\x2b\xef\x38\xbf\xe2\xb9\x3e\x10\xe6\xfb\xf5\x80\xbe\x5c\x65\xe2\xfc\x98\xc9\xd8\x71\x21\xcc\x43\xda\x10\x19\x70\x0b\x4e\x43\x21\x1e\x11\x9b\x16\xdb\x79\xbc\xdf\xc7\x24\xa5\x51\x3f\x61\x69\xf0\x37\x23\x61\x59\x94\xee\xf7\x29\xd9\xd1\x00\x65\x7d\x26\x44\xef\xb4\xbf\x8d\xb7\x5b\x96\x60\xe2\x2a\xb3\x30\x93\x68\xc5\x9e\x94\xf6\x13\xe6\xb3\x84\xf1\xe6\xeb\x25\xb2\x76\xe1\x71\xd5\x75\xb7\xef\xc7\xc9\x0b\x30\x3b\x56\x42\xef\x9a\x11\xc7\x9a\x40\xa5\x91\xa4\xbf\xdb\x7a\xfc\x4d\x2f\x78\x2f\x93\x50\xd7\x77\x2d\xd0\xe2\x75\x2a\xd0\x44\xe9\xc8\xbb\x9a\x6e\x8b\xb4\xbe\xb3\xf5\xd6\x0a\x2d\x04\x1c\x64\x64\xd4\xad\x7a\xe2\xf7\xcf\xca\x49\x01\x71\x44\x40\xeb\x69\x78\x69\x28\x89\xd5\x7e\xea\x02\x32\x57\x95\xc3\x74\x8a\xf8\xc1\x99\x53\xbe\xac\x56\xd5\xe0\xd5\x85\x76\xad\x59\xda\x8d\x56\x39\x44\x57\xe4\x9a\xa1\x4c\x19\x41\x3e\x81\xe4\xe0\x83\x14\x5c\x2c\x59\x12\xd3\x60\xf1\x27\x0a\x84\xb2\xc7\xc5\xac\xc5\x4f\xc5\xaf\x94\x26\xfd\xeb\x93\x44\x88\xc0\x8f\x06\xbd\x28\xff\x46\x42\x9a\xf4\x6f\x4e\x12\x29\xf7\x42\x51\xfe\xf5\x48\x66\x45\x8c\x65\x06\xc4\x2b\x2b\xe3\x8a\x4b\x4a\x6e\xac\xa4\x7f\x53\x00\x1e\xd4\x5c\x86\x2f\x2a\x30\x05\xde\x0a\xcc\xb5\x80\x51\x28\x22\x37\x56\x58\x01\x79\x5f\x80\xe4\xa4\xaa\x20\xc5\x15\xe9\x12\x46\x34\x26\x0e\x5a\xee\x68\xbc\x78\x87\x62\xf1\xde\x47\xd2\xf4\x71\x4c\x8b\x50\x31\x4d\x08\x4c\x0b\x4d\x10\xa6\x59\x1a\xa0\xd7\xf2\x97\xb5\xc5\xcb\x6a\x82\x21\x5b\xd9\x72\xb7\xa2\xfc\xbf\x1e\x4a\x96\xee\x8a\xf7\x0f\x7c\xa8\x09\x1c\x35\xce\xb1\x4b\xc8\x93\x1a\xe4\xa1\x70\x3e\x02\x81\x6f\x72\x8e\x23\xd6\x9e\xb0\x6a\xb4\x32\x1c\xc1\xea\xfd\xe8\x1e\xde\xc2\xb1\x1d\x65\xfd\x82\x51\xff\x64\x67\x36\xe7\xa7\xaf\xd1\x6d\x31\x6d\xac\xac\x9f\x30\xb7\xc2\x0a\xe4\x24\x2a\x4a\x04\x39\x6d\x2c\x9e\x94\xdb\x42\x56\xce\xb7\x03\x2e\x17\x0f\xf9\x59\xc6\x24\xd9\xd7\xe4\xef\x22\x3c\x89\xfc\x26\xbe\xc2\x56\x4f\x9e\xd1\xdb\x2c\xde\x5a\x62\x7b\x94\xd6\x2d\xf9\x43\x1a\xb7\xe4\x2f\x30\x6d\x89\xef\xca\xaa\x7c\x55\x5d\x10\x92\xda\xa8\xf8\xca\x99\x3c\xa4\xb8\x2f\x17\x84\x5d\x28\x89\x29\x49\x01\x50\xc8\x27\x24\xa4\xac\x7f\xbe\xdd\x3d\x75\x5d\x16\xb2\xc4\x86\x67\x3b\xca\x59\x9c\xbd\xe5\xb2\x23\xf1\xf8\x92\xe3\x54\xcb\xd1\x21\x3e\x3d\xe6\x0c\xd8\x5b\xb4\x0d\xc5\x35\x50\x74\x43\x22\x9a\x5b\x4a\xd8\x65\xe0\xb2\x0f\xc1\x35\x0b\x3f\x72\xec\xfb\x7d\xee\x89\xbe\xbd\xb6\x7e\x43\xbf\xa1\xec\x87\x08\x3f\x8a\xf0\x7e\x6f\x90\x1b\x78\x90\x14\x0f\x0e\x07\x64\xe3\x36\x9f\xa3\xb7\xf0\x78\x89\x4d\xb6\xd4\xef\x5f\x93\x4d\xb9\x2d\x6c\x17\x86\xb5\x25\x97\xd4\xef\xdf\x90\xf3\xf2\xf1\xe5\xc2\xb0\x2e\x89\x43\xed\x7a\xde\x18\x8d\x4b\xef\x37\x2d\xcf\x6f\x34\x4c\x3e\xd1\xf7\xe4\x94\x5e\x91\xb7\xb4\x34\x12\xca\xc5\xf3\x81\x9e\xa1\x04\x93\xa7\x54\x13\x36\x01\xa1\x7a\x6b\xe4\x79\xfe\xe0\x8b\x58\x49\x1f\x28\xa5\x41\x45\x23\x01\xad\xe9\x03\x75\xb9\x32\x50\x0c\x83\xae\xa3\xa7\x54\xb2\x71\x05\x95\x78\x20\x50\x71\xf9\xe7\x03\x89\x29\xa5\x57\x10\x23\xf9\x82\x9c\xf7\xe8\x87\xe5\xd3\x55\xc1\x7c\xc8\xf9\x0f\x34\x5c\x98\x56\xcf\xc4\x00\xf7\x5e\xd7\xd1\x27\x7a\x4d\x36\x1c\xee\xf9\xaa\xe0\x1e\x9b\x02\x4c\x48\x01\xe4\x63\x9e\x55\x5b\xa8\xe4\xe8\x36\x27\xcb\x4a\x0f\x64\xa7\xeb\xcf\x8a\x4d\x31\x5c\xd4\x20\x0f\xe4\x23\x41\xe8\x82\xde\x1e\xf0\xf2\x74\x45\x6f\x16\x9a\xa1\x59\x9a\x46\x2e\x96\x9f\x56\xd4\x29\x7e\x95\x8a\x0d\x45\x6f\xdb\xe6\x04\x7e\x32\x58\x08\xf5\x25\xb4\x33\x86\xb4\x93\xcd\x89\xb6\xbd\x26\x0f\xb4\x93\x73\xfe\x05\x6b\x56\x59\x3a\xf4\x1a\xe5\xe4\x81\x81\x35\x72\x81\xb1\xd5\x4a\x5f\x56\xd2\x07\xe0\x40\x54\x26\x48\xdc\x94\x0f\x14\x2a\xf9\x4f\x29\x25\x7d\xce\x99\x14\xb8\xa3\xc1\x10\xf7\xad\x32\x51\x9d\x47\x1d\x49\xea\x2e\xd8\x4d\xaa\x08\x2e\xb8\x7d\xb3\xcf\xbd\x35\x10\x3b\x93\x2e\xd9\x6a\xbf\xbf\x3d\x80\x69\xcf\xce\xa3\x76\x8a\xa7\x01\x2d\xd1\x2d\xd9\xea\x28\x45\x01\xd6\xf5\x1d\xfc\x8f\xaa\x7d\x12\x08\x84\x24\xc1\x44\x25\x27\xba\x83\x8a\x8c\x46\x1c\xe9\x31\xa4\x25\x5e\x04\x6d\x89\x08\x82\x7a\x16\x02\x60\x12\xe2\x08\x29\x17\x46\x84\xc3\xfe\x1b\x04\xc4\x5b\xc1\xc3\xac\x72\x12\x66\xb9\x94\xd8\xcf\x19\xb2\xe4\x8b\x86\x06\x3e\x02\xfe\xb9\xb1\x93\xf3\x20\xe2\x5f\x0f\xc4\xe6\x9a\x94\x52\x5f\x11\xd0\x49\xb9\x0b\x70\x39\x47\xce\xea\x6a\xff\x34\x04\xca\xbc\xbf\x0a\xf9\x32\x1f\x12\x9a\x10\x05\x18\x9a\xd5\xf5\x4e\x64\x50\x5e\xe0\x82\x5f\x15\xa9\xef\xbb\xe7\x46\x54\x1d\x73\x98\x03\xcd\x99\x11\xd3\x2a\x62\x41\x7a\x9d\xdf\x31\xbc\x50\x26\x9a\x95\x2c\xd9\xbd\x5a\xdb\x32\x5b\xf1\x65\xc2\x0e\x98\xdc\x1e\xf0\x11\x9f\x41\x7c\xc6\x45\xcd\x19\x17\xc9\xb7\x8e\xab\x33\x2e\xe8\x78\xb7\xa8\x2d\x2d\x88\x9c\x41\x7c\x04\xff\xda\x05\x09\x4b\xad\xa5\xe6\x0a\xe3\xb8\x5c\x92\xab\x03\x79\x48\x6f\xc5\xcc\x90\xaa\xae\xdc\x59\x85\xba\x9b\xef\xac\x20\x7c\xc2\xbc\x91\x02\xa8\xb2\xb3\xfe\x55\x11\x65\x13\x06\x1b\x28\x7a\xc4\x11\xec\x01\xd9\x5e\xd4\xd9\x67\xf1\xf6\xd1\x39\x69\xd1\xc5\x1e\x3c\x5c\xb2\x55\xae\x60\x7d\xa1\xb7\x20\x3b\x59\x20\x16\x11\x16\x79\x96\x14\xa6\x94\x36\x5f\xb6\xb7\x09\x70\x7b\x16\x79\x1d\xed\x7c\x91\xed\x14\x78\xbe\xaa\x11\x3d\xe0\x21\xfd\x18\xc7\x60\x93\xd1\xf5\xca\x4f\x84\xc5\x35\xc7\x45\xa0\x58\x56\x44\x89\x41\xb6\xd8\x44\xd7\x43\xbe\x3b\xe5\x93\xec\xc8\x8b\xc1\x6f\xa6\xeb\xac\x1f\xa4\x9f\xec\x8d\x38\x93\x1c\x29\xb5\x22\x1a\x55\xec\xb7\x11\x58\x6e\x0f\x57\xeb\x20\xe4\x80\x87\x3c\x08\x4d\x3d\xaa\x5f\xbe\x4a\x83\x67\x33\x22\xc6\x91\xcb\x13\x7c\xa4\xb8\x44\x21\xc6\x92\xf5\xaf\x4f\x98\xdc\xc7\xe4\x80\xb2\xfe\xcd\x09\xcb\x65\x6b\x5c\x39\xeb\x5f\x4e\x57\xed\x52\x1a\x53\x35\xe0\x4a\xbf\xb6\xb0\x38\x69\x91\x74\x45\xd0\x53\x56\x33\xc2\x42\xb8\x9d\xb2\xb5\x13\xbb\xf8\x2d\x36\x6c\x99\x04\xa9\xb8\xa5\x28\x82\xbc\xa0\xf9\x9e\x6b\xd3\x62\x97\x7e\xf4\x3f\x08\x2d\x8e\xdd\x75\x12\x6f\xd8\xde\x8e\xbc\x24\x0e\x3c\xdc\xc7\x3f\xa4\xb6\x6f\x27\xc1\xa3\x40\x78\x5f\x5a\xcc\x90\x78\xbf\x47\x5c\x19\x56\x2c\xf1\x61\xf1\xf3\x34\xde\x62\x4c\xa4\x47\x35\xce\x8d\xf1\x36\xb9\xb6\xd2\x13\x8f\xbf\x12\xd7\x19\x0e\x10\xf6\x06\xbe\x8e\x16\x16\xaf\x06\x9e\xf5\xb3\x78\x4b\xe1\xff\x13\x56\xba\x3d\x88\x70\xae\x52\xf1\x51\x94\x00\x29\xb9\x3b\xb6\x56\x4b\x76\x8e\xf4\xdd\xd6\x6b\x8a\xae\x94\xee\x08\x5a\x7f\x2a\x5e\x82\x36\x50\x5d\x4b\x34\x24\xeb\xdf\x88\xe6\x48\x76\x40\x19\xb6\x5a\x86\xb5\x1c\xd1\x58\x1e\xce\x15\xc6\xf9\x86\x1b\xb7\x30\xce\x0b\x23\x3f\xb1\xe9\xcf\x28\xe9\x2b\x12\x18\xa9\x8e\x7f\xb0\x08\xd4\x52\xcb\x80\x27\x0a\x84\x05\xd7\x65\x95\x48\x24\xf9\xb5\x59\x53\xa2\x11\x0f\x2a\x78\xf2\x47\x98\x84\xb4\x17\x29\x8e\x25\x31\xa4\xbb\xf2\xe1\x69\xbc\x95\x63\xa7\x25\x59\x28\xcc\xde\xc1\x7e\x9f\xe0\xbe\x17\x24\xe2\x90\x81\xae\xa3\xf0\x04\xe8\xa9\xbf\x46\x95\xe8\x9e\x5d\xcc\x23\x3b\x9f\x47\x29\xb9\xb6\x42\x72\x63\xed\x0e\x07\xe1\xca\xc4\x95\xfc\x18\xea\x69\x15\x2e\xff\x6e\xb7\x41\x74\x2e\xed\x2a\x62\xc1\x35\xa7\xdb\x39\xba\x84\xd4\xda\x09\x5d\x2a\xea\x95\x74\x2d\x94\x36\x81\x8a\x87\x01\xc3\x29\xdb\x94\xef\x56\x67\x5c\xe8\x28\x42\xc0\x6d\x94\xf0\x0d\x4c\x98\xa6\xdb\x4c\x64\xe0\x20\xd7\xf5\xaf\x90\x1e\x49\xd7\x15\xa7\x22\xec\x2d\xd6\x72\x05\xc7\x1c\x15\xbb\x11\x86\x73\x8c\xf9\xcf\x88\x2c\x93\x15\x17\xab\x83\xa5\xb1\x22\x21\x0d\x9a\x9b\xa3\xd2\x07\xbf\x40\x33\xd5\xc5\xf4\x33\x8a\xc4\x4c\xe5\xff\xe3\x62\x41\xfc\x8d\x22\x19\xd6\x20\x9f\xe0\x72\x25\xf1\x32\x19\xe3\x90\x3f\xc3\xf9\x12\xe4\xe8\xe4\x1a\xe0\x1f\x98\x64\x07\x4c\x78\xbb\x71\x19\xe8\x17\xca\x75\x15\x0a\xcc\xbd\x50\xd4\x08\xf3\x85\x15\x4a\xa4\xbd\x10\x28\x0b\xfb\xd7\xb4\x00\xb9\xa1\xf2\xa1\x9a\xab\xe4\x0e\x96\x0d\x0a\xad\x21\xb9\xb4\x91\xf3\x66\x43\x48\x6a\xc6\x81\xa8\xbe\xbb\x3f\xaa\xc1\x7d\x1d\x5d\x99\x17\x73\xfd\x9d\xc1\xeb\xdd\xaa\xec\x9d\xe5\xd7\xc4\x55\x7d\x7f\x5c\x14\x91\x5b\x20\x1c\x14\x52\x6d\x42\x05\x68\xb0\x50\x74\x63\x2b\x00\x93\x90\xc3\x75\x5c\x3b\xb9\xa9\x18\x19\x17\x8d\xd9\x6c\xa5\x64\x47\x93\x7e\x12\xc7\xc2\xb2\xca\x6b\x78\x65\x8d\xdd\xa2\xdc\x69\xac\x1d\x59\xd3\x24\x17\xd1\x9e\x8b\xab\x22\x88\x5f\x02\xaf\x17\xd2\xf0\xa1\x59\x6b\xb2\xa5\x49\xdf\x0e\x4b\xa4\xb9\x52\x7b\x4c\xe9\x56\xd7\xb9\x4e\x9b\xf4\xb7\xb6\xe7\x05\xd1\x79\x9b\x66\xfb\x3b\xd2\xa2\xdd\xc6\x61\x49\x19\x62\x71\xbe\x38\xb7\xfe\x40\xe7\xe4\x13\xe6\x2a\x6e\xde\x14\xa5\xd4\x5f\x68\x85\x1c\xac\xe5\xc6\x17\x8d\x9c\x95\xe6\x34\xd5\x38\xf2\x1e\x6c\x6e\x8a\x59\xe4\x54\x81\x5b\x6e\x16\x37\x96\xbf\x22\x6f\xe9\xbf\x90\x8d\x4e\xf1\xe2\xd4\x3a\xed\xcb\x5b\x31\x8a\x60\x11\x17\xb1\xa6\x91\x36\x24\x1e\x57\x69\x23\x74\xc6\xd5\xe8\x8a\x81\xe6\x43\x61\x90\x79\x7f\x8f\x0d\x26\x3e\x60\xf2\x9c\xfe\x8a\x1a\xd3\xf1\x3d\x79\x8a\x31\xb9\xa8\xbe\xf5\x73\xeb\x03\xf9\x28\x4c\x2f\x6f\x21\xf0\xeb\x02\xb6\x2a\x07\x26\xba\x9c\xb1\x17\xf9\x9a\x78\x2b\xbf\x9c\x38\x95\x38\xa3\xb7\x22\x9e\xec\x42\xec\x63\x8e\x58\x2e\x62\xd6\x5f\xc8\x65\xf6\x56\x7c\x9e\x38\xe2\xf3\x40\xfe\xa4\xac\x6a\x92\x92\x7b\x36\x38\xff\x14\x02\x75\xfd\x4f\xc1\x41\x7e\xa2\x7f\x2e\xe3\x55\x45\x5b\xfc\x78\xa7\x7a\xb6\xbc\x26\x2f\xea\x76\x54\xae\xe1\x73\xee\x7a\xd5\x2c\xd2\x6e\x34\x4b\xbb\xd6\x8e\x3e\x2e\xd9\xea\x84\xfe\xb4\x4c\x56\x3f\x64\x5c\x96\x94\x4b\xee\x63\x25\xe5\x4f\xf5\xac\xc6\xcf\x88\x91\xbf\x61\x81\x56\xd3\xfa\x54\xa1\x6a\x21\x22\x45\x88\x07\x16\x7c\x82\xc9\xb0\x3b\x19\x73\x90\x28\xe2\x9d\xe8\x42\x29\x11\x9c\x24\xfd\xeb\x52\xcc\x93\x03\x93\x57\x3b\xe1\xd5\xa4\x98\x28\x63\xfc\x64\x9c\x43\xff\xfa\x50\x49\x08\x54\x5a\x9e\xaf\xc8\x35\x79\x41\xde\xaf\xea\xae\x94\xaa\x5a\xf3\x23\x35\x72\x09\x3e\xa8\x06\xdf\x15\xef\x25\x0e\xf1\xe6\xcc\x26\xa3\x0c\xe2\x6f\xa4\x31\xf6\x6d\x3e\xd6\x24\x2a\x17\x6a\xb2\x58\xae\xac\x04\x94\x34\x09\xf6\xbe\xf0\x7d\x28\x8c\xe9\xa9\x15\x1c\xd5\x8f\x78\xb7\xc7\xdd\xc4\xa2\xed\x00\xae\x5f\x68\x73\x57\xc1\x31\x33\xe6\xbd\x55\xbd\x56\x79\x82\x93\xc6\x82\x79\xca\xb5\xb3\xca\x24\xb5\xb8\x20\x2e\x57\xad\xa5\xac\x4e\x46\xa4\x86\x9e\x89\xb3\x4b\x42\xdd\xe4\xd0\x42\x7f\x04\x23\xe8\x8e\x2e\x57\xc4\xa5\xc7\x26\xf1\x40\x07\xca\x98\x15\x92\x94\xe5\xef\x5c\x5a\x00\x12\x7c\xbb\x46\x98\x84\x45\x96\x97\x06\x65\x71\x59\x48\x38\xdf\xa8\xba\x6d\xa8\x42\x19\x84\x6f\x9d\x83\x60\x50\xe3\x41\xfc\x69\xed\x11\xdf\xec\xf3\x37\x39\x87\x74\xc7\x22\xb6\xb4\xb9\xb8\x5a\x44\x65\x99\x52\x54\x5c\x50\xf3\x89\x65\x90\xf8\xa0\x88\xd3\x6d\x5f\xa9\x19\x24\x03\x95\xb9\x67\x40\xea\x20\x1d\x90\x09\xa4\x11\x95\x69\x76\xca\x60\x85\x07\x0c\x05\xbc\xd0\xf6\x3c\x24\xe2\xe9\x31\x29\x25\x14\x2e\x91\x08\xcd\x18\xe2\x45\xca\x9f\xaf\xfd\x17\xd7\x41\x9a\xc1\xe3\x36\x26\x12\x89\x63\xbb\xa2\xd1\x08\x57\x62\x6c\x51\x84\x8f\x02\x5d\xe7\x0d\x1f\x38\xc1\x32\x2d\x43\x00\xe1\x2e\xf0\xe0\xa0\x68\x0d\x1f\xda\x2c\x06\x49\xd3\xcf\x7b\xa7\xa0\xc6\xfa\x60\x4f\xe3\xd3\x5c\x28\xfd\x64\xb9\xc2\x87\x16\x9e\xc7\x3a\xec\x13\x62\xf7\x67\x4b\x91\x8c\x7b\xa5\x04\x80\x8b\x07\x34\x69\x1a\x31\x13\x92\x91\xdb\xce\xb5\x51\xe4\x77\x22\x59\x99\xc1\x08\xec\xfd\x2d\xa0\xfc\x39\xc9\xe0\x03\x1f\xb0\x95\x15\x06\x92\xaa\xe4\x24\xac\x31\x2d\x79\xb6\x0a\xb1\x47\xa8\xf7\x48\x95\x41\x8b\x85\x50\x6e\x27\x58\x15\xf7\xea\x2b\x9e\x06\x77\xf7\xb4\x34\x62\x82\xaf\xb0\x51\xf9\xae\xfd\x46\xce\xe2\x44\xf1\xe0\x56\x58\xdd\xed\x01\x58\x1d\xeb\x0b\x83\x1f\x6c\x74\x4d\x33\x7e\x7e\x6f\x12\x0d\x50\xc1\x23\x44\x5e\x30\x92\x3b\x89\x2d\xaf\x60\x59\xd1\x01\x1f\xc9\x0b\x20\x62\x25\x82\x07\x73\xa9\x90\xbf\x81\x27\x7d\x99\x08\x1f\x88\x1f\x27\x2e\xfb\x0d\x7e\xaa\x1e\x6a\x3e\xcf\xdd\xfc\x98\x6d\x58\xc8\x24\x24\xab\xb8\x15\x4b\x9f\x0a\xa7\xfb\xb9\xd8\xec\x6e\x43\x21\x04\xa9\xfc\x66\x8b\x32\x02\x6e\x00\xa9\xb5\xc0\xf1\x96\xba\xad\x12\xe7\x4c\x66\x83\x12\x7c\x20\x1c\x4d\xca\x32\xce\x19\xc3\x52\x06\x55\xea\x95\x02\xeb\xb7\x0e\x49\x31\xfc\x55\xb7\x17\x93\xd3\xbd\x69\x5d\xc9\x27\x67\x79\x7e\x5a\x1c\x1e\x6a\x69\x30\xcf\xa6\x76\x72\x02\x87\x2c\xb8\x34\x2a\xdf\x20\xe7\x13\xcd\x4a\xcb\x48\x1c\x34\xf7\x23\x38\x29\x93\x4f\x90\xb4\x9c\x20\x36\x9f\x20\x36\xd9\x51\xc1\xc6\xda\x52\x64\xc5\x5c\x5d\xa5\x71\x39\x31\xf2\x69\x90\x8a\x29\xb2\x53\xa6\xc8\x01\xef\xf7\x21\x3e\xc0\x55\x8d\x4a\xff\x46\xb4\x67\x1e\xf8\x5e\x24\xe6\x01\x0a\x68\x33\x66\x86\xf3\xef\x0f\x49\xbc\x09\xd2\x5a\x64\x85\xd7\x57\xe6\x10\xc2\x84\x21\x79\xe6\xac\x89\x23\x15\x76\x99\x2e\x4c\xf2\x21\xa7\x2b\x0e\x2f\xe1\x84\xe3\x9a\x45\x95\xb3\x71\x79\xd7\x10\x86\x02\x24\x0c\x9d\x18\x63\x92\x1e\x30\xf1\x58\x9a\x25\x71\xe5\x6c\x33\xdf\x2f\x5d\x7a\x6c\x1c\x0e\x70\x38\x4c\xe4\x28\xce\xe3\xb1\xbc\x6a\x52\xfc\xdd\x9d\x53\x86\xaf\x15\x8c\x61\xb3\xce\x65\x3f\xaf\x5f\xee\xd2\x28\x69\xd0\xca\xf0\xed\xb1\xab\xeb\x49\x3f\x8e\x7e\x0e\x92\x34\x13\xfd\xd3\x78\x20\x77\x07\xef\x70\x40\xb7\x75\xa1\xc8\x5a\x7e\x24\x6f\x88\xf4\xa9\x54\x4d\xb8\x2d\x5e\x95\x4a\xc0\xce\xbd\xfe\xdf\x92\x19\x25\x0d\xaf\x66\x50\xce\xbf\x68\xbf\x8f\xc0\xa0\x57\x78\x39\x9b\x41\x27\x49\xd5\xeb\xd9\x0c\x3d\x51\x44\xae\x3f\x91\xe2\x0c\x2e\x16\x7c\xc3\x91\x40\x4a\xf7\x6c\xdd\xd5\x5c\x23\xd6\x0a\x0e\x47\x32\x45\x47\x4d\x73\xa8\x78\xca\xb9\xc6\x9b\x1b\xf4\x45\x41\x73\xb5\xd7\x00\xc8\xab\xa6\xb2\xb4\x23\xb7\xd2\x37\x6c\xdd\xd9\x1c\xb9\xcb\x25\x93\x77\xa5\x65\x13\xb5\xe3\xac\x90\x4f\xe5\x22\xe1\x48\x0d\xbd\xf4\x99\x94\x6f\x01\x0f\xee\x78\x09\x28\xff\xce\x77\x10\x75\x5a\xdc\x41\x25\xcd\xc7\x66\x2b\xd1\xaa\x3f\xe5\x8e\x0e\x6e\x00\x91\x5b\x8d\xb3\xd8\x9e\xf8\xd5\x2b\xa6\x86\xd6\x19\x34\xf0\x39\x5f\x10\xe2\x25\xda\x56\x82\x88\x66\x53\xdc\x1f\xd5\xa0\x89\xd5\xf7\xac\x0e\xb9\x7f\x07\x34\x91\xaa\x68\x55\x09\x59\x1a\xc4\x58\x59\x01\xb1\xe9\xdb\x7b\x44\xba\x65\xb2\xa2\xad\xe7\x59\xf3\x5c\x88\xcb\xf7\xe4\x4a\x09\x3f\x05\xf5\xb3\x67\x5a\x26\x89\xdb\x4e\x1d\x27\x8b\xa4\x39\xb4\x19\x51\x96\x1a\x3b\x60\x6c\x25\xc4\xa6\xf1\xd2\x58\x91\x94\xc6\x4b\xb3\x4c\x92\x41\xed\xfd\xde\x20\x29\x45\xe9\x7e\x6f\xe0\x1f\x02\xb2\x7c\x4f\xae\xeb\xad\xcb\x90\x1c\xfb\x60\xdd\x5e\x5b\x36\xb9\xb1\xd2\xc3\x01\x25\x44\x2e\x48\xae\x06\x49\x89\x8d\xa4\xd4\x5e\x2a\x03\x26\xf2\x83\x5c\x93\x1d\x4d\xfb\x37\xdf\xbc\x3c\xef\x28\xef\x5f\x9f\xd0\x90\xdc\x0d\x72\x73\x42\x77\xb8\x0e\xb3\x8c\x56\xd4\x3e\x1c\xf2\x39\xe3\x87\xc1\xb6\x7b\xc6\x7c\xf7\xb4\x80\x5d\xa5\xd9\x62\xff\x2c\xbd\x08\xb6\x65\x58\x23\x9f\x3c\xbc\x85\xa7\xd7\x41\x55\x87\xdd\xef\x03\xf0\x8e\xd8\x61\x06\x65\xea\xc6\xbf\xdf\xdb\x10\x66\xe5\xdb\x61\xe8\xd8\xee\xc5\x87\xbc\x73\x85\x59\x2d\x37\x70\xb9\xaa\x41\xce\xab\xdb\xdb\xd6\x35\x53\x99\xcf\x11\x86\xc1\xf6\xb3\x9d\x04\xb6\x78\x97\x6d\xd9\xa6\xbf\xdf\xfb\x64\x03\x55\xc2\xf8\x8a\x79\x4f\x77\x59\xac\x34\x7b\x49\xb3\x16\xd9\xeb\x9c\xfe\x89\x2e\x21\xc3\xd5\x7e\x8f\xce\x8f\x29\xbd\xd4\xf5\x6d\xc5\x8a\xcd\x45\x5a\x08\xcc\xa1\x14\xe6\xba\xdc\x80\x97\x2b\x69\x11\xf8\xab\x54\x8c\x96\x2f\x21\x17\x25\x79\x89\x32\xbc\x3a\xa0\x4b\x6c\x2d\xff\x42\x97\x78\x85\xc9\x0d\x5d\x5e\x16\xf2\xbd\xd3\xea\x71\x6d\xd1\x9f\x94\x76\x13\xd5\x93\x73\x8f\x39\x34\xaa\x98\x43\x03\xb5\x8b\xe3\x7a\x17\xdb\xca\x60\xa4\xcd\xee\x0d\x3b\xbb\x73\x57\x76\x7c\xb8\x78\x6b\x85\xc4\xa5\x3f\xa1\x08\x13\x8f\xba\x8b\x14\xac\x83\x77\x68\x24\x3f\x21\x86\x29\xa5\x2e\x5f\xe3\x9f\xc8\x9a\x7a\x77\x01\xef\x6a\x49\x2f\x31\x3e\x02\xa3\xaa\x94\x59\x75\x1d\xad\xa9\x27\xde\xde\xa7\xeb\x6f\x31\x32\x33\xc4\x54\x56\x93\x90\xbc\x7f\xac\x80\xa8\xbd\x63\xc5\x44\xf6\x8d\x65\x1f\xf0\x92\x8f\xc2\x2a\x37\x50\xb7\xa9\x79\x7e\xcb\xfd\x7e\x4a\x96\xd4\x25\x5b\xf5\xfc\x65\x26\xd4\xbd\xac\x83\x02\xb7\x4a\x81\x57\x50\xb0\x23\xd5\xb1\xb1\xb6\xa4\x75\x64\xac\xcd\x01\x5b\x49\x1e\x4b\x7d\x46\x9b\x51\x70\x1f\x68\x4d\x28\x79\x5a\x18\x3a\x9e\xd3\x63\x83\x5c\xd0\x1b\xce\x73\x3f\x52\xe3\xf1\xc7\x27\x37\xb9\x6a\xf0\xf1\xe4\x44\x30\x95\x77\xf4\x66\xf9\x71\x45\x5e\xd3\x3f\xd1\x3b\x4c\xde\x50\xe9\xe9\xa6\x94\xfe\xc4\x1f\xfc\x5c\xb3\x44\xbe\xe6\x83\x46\xfe\xa6\x3f\x2f\x64\xd4\xa1\x95\x87\x21\x92\xdf\xf8\x50\x54\x3a\xe2\xdd\x1d\x1d\xa1\x70\x02\x6b\x5d\x76\xcb\x01\x93\x67\xf4\xe7\xc5\x9b\xc5\xb5\xf5\xde\x7a\xb3\x78\x61\x5d\x1d\x9d\x2d\xff\x5e\xfd\xf8\x61\xf9\xf7\x4a\xd7\xd1\x33\xfa\x17\x7a\x26\xc3\xe5\x5f\xc1\x77\xf2\x99\x2e\x21\x3d\x51\xac\xeb\x9f\x85\x9e\xf9\xdb\xf2\xf5\xea\x09\x35\x30\x49\x95\x47\xcf\xf8\x23\xf2\xdb\xf2\x95\x28\xfa\xdc\x67\x97\x2c\xb9\x69\x97\xaf\xb9\x18\x71\x7b\x41\xdf\xf1\x0e\x34\x45\x98\xe4\xe1\x29\xd8\x81\xde\x91\xcf\xf8\xc0\xd5\xcb\x22\xc5\xc0\xc3\x16\x43\xd3\x0d\xdc\xfb\x54\x35\x54\x8a\xe5\xfc\x14\xcc\x33\x22\xab\x73\x79\x18\xa3\x48\xb5\xcd\xf0\x3d\x64\xf1\xe5\x02\x79\xb4\xe5\xb3\x0b\x9a\x11\x0d\x08\xd4\x0e\xe4\x0b\xdd\x2e\x86\x96\xf9\xf8\xcb\x8f\x86\xae\xcb\xa7\xc7\x94\x3e\x44\x5f\xf0\xe3\x2f\xbd\x1e\x7e\xac\xec\x8a\xc7\x94\x5e\x34\x37\xba\x62\xbf\xe0\x13\x47\x81\xa6\x17\xb0\xd1\x82\x86\x66\xa8\xe1\x1c\xb9\x95\xca\x5a\xe6\x22\xd0\x4a\x4a\x47\x80\xc6\x3a\x36\xcb\xfd\x6e\x9b\x40\x84\xfa\x7b\x79\xa4\xf1\x1f\xdc\xfa\xc8\x77\x6f\x6a\xc7\x94\xda\xba\x2e\x36\xb5\x82\x9d\x36\x3c\x44\x6e\x6d\xc7\xf2\x14\xf6\xca\x77\xb3\x8c\x65\x6b\x96\x54\x7c\x43\xfb\xbd\xf0\x09\x89\x22\x79\x10\xf8\xb2\x1e\xe9\x78\x2e\x97\x4a\xb1\x3c\xc2\xea\xf2\xd8\x15\x0b\xa2\xba\x50\xdc\x03\xdf\xdc\x6a\x7a\xcb\x0d\xfd\xa9\xfa\xe0\x13\x3d\xbe\x21\xa7\xf4\x1d\x72\x30\x79\x4b\xb5\x6b\xbe\x98\x4f\x73\xef\x01\xf0\x8b\xbb\xb4\x85\xa7\x2d\x3c\xe6\x79\x9d\xc7\x5c\xb4\x89\x81\x97\x8b\xcb\x16\x31\x50\x0a\x68\xb7\x1d\x21\xb8\xd8\xba\x24\x1f\x95\xd3\xa4\x81\x8f\x3e\xc0\x36\x1d\xef\xf7\xa9\x18\xfc\xd7\x32\xe4\xf9\x74\x71\x65\xbd\xe7\x2c\x4a\xfe\x7a\x61\x5d\x93\xdf\x8a\x5f\xf5\x70\x68\xf2\x8c\x7e\x58\x9e\xae\xc8\x2b\xf8\x38\x39\x5f\xbe\x5e\x91\xcf\xf0\xbd\x77\xbe\x7c\xb3\x22\x0f\xa9\xbf\xe8\x3d\x5f\xfe\xb6\x7a\x34\xb0\x0c\xf2\x97\xc2\xf8\x6e\x16\x4f\x97\xbf\xad\x2c\x5e\x46\xbe\x54\x9e\x03\xbc\xd5\xe3\xc5\xe4\x25\xad\x47\x89\x91\xaf\xd4\xd7\xf5\x97\x8b\x0d\x7a\x89\x2d\xe9\x8b\x37\x72\x5f\xbc\x71\x20\xbf\xd6\x7b\x7e\xa9\x41\xbd\xff\xda\xb2\x24\x85\x20\xff\x4c\x5b\x2d\xbe\x01\x26\x9f\x84\xd6\x7d\xee\xdb\x5f\xe8\xaf\xfc\xb5\xff\x45\x7f\xe5\x6f\xfc\x3b\xcd\x38\x93\x01\xea\xbf\x2e\x7f\x5b\x61\xf2\x07\xfd\x04\xef\xfa\x68\xd0\x7b\xd8\xfb\xbd\xf7\x4b\xef\xc2\xfa\x4b\x7c\x92\x84\xd1\x4f\x8b\x9e\x28\x3c\x79\x78\xf2\xfb\xc9\xbf\x4e\x2e\xac\x2f\xe2\x93\x44\xac\xf1\xf2\xba\x7e\xd6\x08\x9b\xc3\x24\x60\x34\x62\x8b\x7c\x88\x22\x25\x28\x65\xbf\x37\xac\x48\x0d\x45\xe1\x0f\x0c\x12\xb3\xc6\xf4\x14\x8c\xa5\xde\x2f\xf2\x71\x45\xd2\x5f\x9e\xae\x2c\x83\xd8\x4c\x8c\xf8\x1f\xbd\x98\xf5\x02\x46\x52\xf9\x3b\x61\xbd\x18\xa4\xe4\x58\x4c\xab\x90\xf1\xfe\xf0\x17\x7f\xa3\x57\xc4\x66\xd8\x7a\x45\x9e\x11\x7f\xf1\x33\xfa\x4c\x52\x86\xad\xcf\xf8\x88\xd7\xa2\x21\x23\x1f\xc5\x67\xef\xd9\x01\xf2\xec\x40\xe5\x1d\x2b\x16\x16\x9f\x94\x6e\xf9\x93\xcf\x4a\x8f\x37\xf9\x76\x45\xd6\x8c\x7a\xec\xe4\x7c\xb9\x63\x2b\xe2\xf3\xef\xbd\xf3\xa5\xcb\x56\x64\x5b\x34\xbd\x66\xd0\xf6\x9a\x11\x8f\x41\xeb\x3e\x83\xe6\x7d\xc6\xdb\x7f\xbb\xa2\x5b\xde\x3e\x7c\xf6\x3c\x76\x38\xb4\xa8\x14\x1f\xef\xe6\xc7\x05\xff\xb5\xc5\x51\xb5\xef\xe1\xba\xc0\x6d\x05\xdf\x55\x78\xad\x7a\xfe\x27\xa9\xaf\x01\xce\x6d\xef\x62\x2f\x29\x17\x7f\x55\x6e\x15\xd2\x77\x28\x05\x6b\x56\x45\xeb\x4b\x85\xcb\xb3\x7e\xc6\x41\x6c\xf4\x76\x7e\x16\xa2\x55\x34\x6b\x3a\xd5\xdb\x6f\xbb\x67\x0b\xf6\xef\xf0\x2b\x38\x08\xfd\x07\x62\xe4\x13\x97\xfc\x82\x62\x47\x48\xb8\xb8\xbc\x41\x31\x26\x6b\xc9\x94\x42\x98\x1b\x7e\xf1\x8b\x4f\x0d\xbe\x39\xd4\xd8\xeb\x72\xb7\x3a\x69\x3e\x0c\x57\x3d\x9b\xff\x97\x54\x38\xef\x72\xb7\x22\x97\xb4\x52\xa0\x56\x21\xe7\xf4\x8c\x53\xe0\xd0\xf3\x45\xde\xea\x79\x25\x2c\x89\x2f\xb3\x73\x35\x76\x48\xac\xbb\x1b\xba\x7d\x34\xe8\x5d\x3e\x1a\x90\x53\xea\x2e\xd7\x2b\xf2\x96\x3a\x3d\x6f\xb9\x5b\xf5\xdc\xa5\xbf\x22\x1f\xa8\xf3\x68\x00\xbf\x1f\x0d\x4e\x6e\xf8\x1e\xc1\xd0\x29\xf9\x40\xde\x62\xf2\x9c\x86\x47\x49\x73\x56\xe6\xe1\xdb\xcf\x57\xf4\x29\xc9\xfa\x2e\x64\xc2\x15\x93\x80\x3e\xed\x7d\x10\x57\x84\x7f\xd3\xc9\xb3\x5c\xcd\xcb\xcf\x0c\x55\x5c\x16\xda\x52\x35\xd9\xc0\x14\x5c\x69\x56\x22\xf5\xfc\x48\xd7\x51\x9e\x73\xa5\x08\xb0\x88\xf6\x7b\xa4\x06\xe1\xe6\xf1\xc2\xd5\x94\x4d\x11\xc6\x10\x79\xd4\x34\x07\x42\xa8\x6c\x9d\xd5\xd1\x08\x1f\xee\xb2\xf2\xb4\x2c\xd0\xba\x3c\x54\xae\xd4\x75\xe0\xb1\xfb\x6d\x49\x77\xa1\xfa\xb6\x33\x37\x10\x30\x59\xdf\xeb\x83\xfa\x5e\x1f\x37\x05\x86\x6a\x73\xc4\x96\xe2\x4c\x35\x66\xc6\x52\xc2\x55\xc0\x2c\x23\x80\x54\x79\xe6\xd8\x38\x70\x06\x90\x88\x14\xd0\x5c\x00\x63\x28\x85\x6b\x2a\xe1\x06\x48\x91\xcc\x3f\x62\x68\x87\xdb\x8e\x07\x95\x3e\x9d\xe7\x32\xdc\xa7\x30\x04\x4a\x9b\xed\x8b\xd4\xb5\xb7\x2c\x7f\xba\x23\x41\xfa\x31\xaf\xf2\x0a\x92\x66\x58\x2e\x59\xdb\xe9\x07\x05\xd8\xb3\xbc\x56\xe3\xe0\xbf\x63\x41\x2c\xe8\xeb\x89\x14\x1d\x9a\xe5\x92\x0a\x00\x13\x4d\x6a\x96\x77\xc0\x87\xc3\xea\x80\xf9\xfe\xf7\x7f\x9e\xa4\x97\xe7\x0f\x44\x0c\x98\x66\x4e\xb4\x07\x32\xee\x4b\x9b\x68\x0f\xe0\xb6\xe5\xb6\xeb\xa6\x8b\x8b\xa4\x7f\x7c\xb2\xb5\xb3\xf5\x03\x8f\x6a\x6f\x8d\x07\x93\xd4\xec\x4f\xe7\x93\x5e\xdf\x30\x87\x0f\x46\xfd\xc9\xb4\x37\xec\x4f\xcc\xf1\xf3\x71\x7f\x36\x36\xfb\xf3\x07\x93\xfe\x7c\xd8\x37\x8c\xc9\x83\xd9\x03\xc3\x35\xfb\xc6\xb4\x07\xbf\x06\x7d\x73\x34\xeb\xcf\x66\xd3\x07\xc3\xfe\x70\x34\x7c\x30\xe8\x0f\x67\xe3\xe7\xe6\xa8\x3f\x18\x0e\x1f\x4c\xfa\x86\x31\x7e\x60\x4e\x1e\x4c\xe0\xbf\x57\xc6\xdf\xda\x8f\x4f\x78\xd3\x3f\xfe\x1f\xbe\xf5\x2a\x67\x53\x89\x6b\x6f\xb3\x5d\x02\xc7\x54\x4b\xff\x46\x5a\x44\x9d\x04\x3e\x12\xf9\x93\x82\x34\x3f\x53\x9b\x9b\x21\xd9\x32\x5b\x55\x6f\x36\x88\x16\x55\xd8\x04\x2f\x92\x65\xb6\xb2\x12\x2b\x6a\x49\xd5\x13\x32\xd5\xab\x7c\x7b\x28\xf2\x01\xc9\xcb\x3b\x0b\x85\x1f\xb8\x48\x99\x1b\x40\xe6\x12\xd2\xb0\xae\x97\x4f\xb3\x13\x6d\xa5\xe1\x1f\x7b\x66\xfd\x16\xa0\x22\x4c\xb9\x75\x6f\x91\x89\x10\xa5\x8f\x28\xab\x5c\xe6\xe4\x56\xaf\x5c\x11\x87\x2e\x14\xa7\x67\x84\x6f\xdd\x90\xd9\xc9\x69\xb0\x61\xf1\x2e\x43\x09\x26\x09\x4d\x59\x96\xff\x56\xdd\x50\x10\xaa\x8d\x49\x1e\x0b\x91\x34\x2f\x84\x11\xbd\xd0\xf4\x28\x2a\xb1\x8e\xad\xfe\x26\x99\x2a\x2d\x11\x4e\x6d\x92\x54\xaf\x8c\x29\xc2\x73\x0a\x53\x58\x25\xd1\x8d\x6c\xbb\x67\xc2\xdd\x43\x45\x5f\x42\x82\x5d\xd0\xc9\xd5\x54\x40\x5b\xf6\x2d\x47\x56\x37\xd5\x56\x41\x6b\xce\x07\x54\x49\x5f\xa2\x24\xbb\xab\x5f\xcf\x23\xaf\xf3\xd6\xbc\xe0\x52\xbd\xa7\xef\x5c\x45\xac\x49\x28\x8d\x68\x3f\x27\xf6\xb9\xcc\x31\xd2\x19\x7a\x24\xa7\x5a\x25\xa8\xdf\x51\x5f\x07\x00\xb4\xb7\xf1\x2e\x65\xf2\x5e\x20\x25\x4b\x07\x53\xcf\x83\x1f\xb3\xfd\xfe\x98\xf5\xcf\xb2\x60\xbb\xbd\xd9\xef\xf3\x6f\x25\x73\x3e\xa6\x54\x7d\xd3\x33\xd9\xc7\x1d\x01\x29\x10\xed\x24\xaf\x8d\x84\x33\x52\xe0\x49\xf9\x69\x27\x9c\x55\x34\x3b\xd1\x36\xa9\x56\x25\xfc\xea\x5e\x8c\xf5\xab\x70\x80\x9d\xc1\xb6\xa2\xd5\x7b\x01\x92\xaa\x15\x82\x24\x4c\x99\x32\x37\xb6\x4c\xb7\x92\x88\xc4\xa0\x10\xda\x9d\xdc\x19\xda\x8d\x17\xb5\x72\x2b\x1f\xdc\xb2\xc5\xeb\xda\xcd\x4e\xd9\x89\x56\x39\x42\xad\x3d\x96\xd9\x36\xa0\x27\xe0\x74\x87\x76\xc5\x9c\x8b\x20\x3b\x2d\x9e\xbe\x88\x3c\x6d\xd5\xf2\xfa\xbc\x57\x96\xd1\x0a\x0c\x90\x79\x9c\xd9\x7b\x46\x6f\x83\xf4\x34\xde\xb9\x6b\xeb\xd8\x84\xa4\x6f\x4a\xd6\xc5\x53\x3e\x11\xdf\xb3\xbe\x84\xd8\xef\x51\xf9\x83\x1e\x1b\x44\x9e\xb5\xdc\xb2\xc4\x8f\x93\x8d\x1d\xb9\x4c\xd7\x8b\x09\xdb\x3c\x7e\xbe\xe1\x33\x68\x13\x5f\x32\x8d\xbc\x65\x6a\x3f\xbf\x2d\x2f\xa0\x53\x70\xf5\xa3\xf8\x0a\xe1\x23\xd6\xfb\xc4\x9e\x0c\x0c\x5d\xaf\x34\x6e\x92\xa2\xa1\xd6\x93\xe6\xb5\xb6\xf8\x8b\x29\xdc\xeb\x43\xd9\x60\x49\x2f\xe4\x2c\x91\x4b\x87\x8b\xe9\x30\xb5\x4b\xc9\x43\x4c\xe5\x23\xd6\x77\xc2\x5d\xa2\xeb\xc7\x99\x90\x45\xfa\x41\xfa\x39\x48\x03\x27\x84\xa9\xc5\xcb\x90\xbc\x6f\xf6\x29\xa3\x6d\x19\xc8\x44\xa7\xe9\x7a\x5b\x59\x4e\xcc\xa2\xe5\x18\x86\xa5\x69\xe4\x39\xa3\x8f\xde\x7e\x7a\xfd\xe2\xc1\xfe\x34\x09\x3c\x16\x65\xff\xfd\x48\x66\xcd\x7a\xca\x30\xb9\x60\x75\x16\x29\x92\xf4\x9e\xc6\x2d\x89\x21\x3d\x35\xb5\xd0\x81\xd8\x49\x60\x5b\xb7\xae\xc8\x7f\x9c\x1f\x03\x66\xd7\x5b\x3b\xf2\x98\x97\x1f\x05\x26\x1e\x0b\xed\x1b\xcb\x20\x9e\x5c\x82\xd6\x72\x68\x18\x64\x30\x36\x56\xe4\x9c\x65\x1f\x15\x69\x46\xe6\x7c\x10\x47\xdf\xb9\x38\xf8\x3e\x7a\x1e\x06\xee\x05\xdf\x55\x83\xf3\x28\x4e\xca\x63\x56\xa9\x75\x6c\x92\x80\x4b\xd7\x62\x08\x6a\x3f\x9f\x89\xcb\x08\x06\xea\xb3\x9f\x98\x13\xef\x22\x97\x59\x06\xe1\x63\x5c\xce\x7d\xde\x49\x42\x6f\xb4\x96\x06\x31\x8d\x15\x89\xa3\xa7\x7e\xc6\x92\x66\x50\xce\x81\xc4\x91\x48\x05\xdc\x5e\xf6\x1c\x18\x6e\xfd\xe9\x4f\xcd\xb8\x08\xfe\x58\x0a\x63\xcd\xa7\x0d\x04\x6f\xe3\x5d\x94\xd5\x1f\x7e\x5a\xc7\x57\x6d\xcf\x1a\x18\x4f\x93\xe0\xfc\xbc\x9a\xfe\x99\x3f\xfe\x2d\xca\xda\x0b\xa0\xcf\xdf\xef\xb2\xb4\x41\x89\x12\xb8\x09\x27\xd3\xb6\xe1\xee\x3c\x88\xd2\x32\x3a\x31\x0f\x99\xbc\xe5\x6a\x41\xc4\x87\x40\xa4\x31\x58\xc7\x57\xef\xf3\xce\x39\x36\x49\x26\x78\x87\x41\x72\x0a\xc4\xd2\x03\x6d\xe9\x81\x1f\xbb\xbb\x54\xcb\x8b\x44\x16\x4a\x91\x9f\x89\xdc\x2a\xf9\x78\x38\x1e\x35\x2d\x8e\x98\x01\xb5\x7c\x36\xfc\xa1\xc8\x42\x03\x9c\xea\x96\xa3\xe0\x55\x5e\x9d\xbe\x7d\xc3\xcb\x04\x3e\x98\x03\xbe\xcd\xd5\x0f\x71\x1e\x93\x4b\x71\xf9\xac\xd6\x48\x10\xb1\x24\x0b\x6c\x0e\xbf\xb1\xaf\xc5\xd1\x93\xe1\xd8\x20\x49\x1c\x32\xde\x11\x71\x98\x05\x5b\x8d\x64\x6b\xc6\xd5\x18\x8d\xfc\xfd\x9a\x6f\xfb\xd6\x7c\x3e\x9f\x1f\x30\xf9\xc8\x2a\x87\x1a\x2f\x18\x56\x52\x56\x94\x7b\x05\x45\xac\x2f\xbb\x53\x04\x3f\xde\x75\x66\x23\x29\x0d\xc0\x79\x12\x47\x3b\xdc\x31\xf5\x38\x57\xc6\xd5\xd1\xc2\xec\xcb\x79\xf8\x82\xff\x67\x05\xb8\xc3\xfb\x53\x39\xd1\x76\x20\xaa\x9c\xf2\xd3\xdd\x12\x55\x46\x0a\x1e\xb0\x63\x28\xeb\xcb\x1f\x64\xc9\x56\x98\x2b\x0c\xf5\xa5\xbb\xb8\x3d\xb4\x26\xb6\x45\xd9\x42\xed\xa9\x3f\x5b\xec\x14\x17\xe0\xf4\x12\x93\x2e\x3b\x60\x8c\xad\x8f\xec\xee\xae\x6a\xdc\x59\x0c\x5b\x37\xb0\xe5\x9e\x76\x92\x60\x99\x75\x11\xee\x15\x05\x67\x72\x54\x5c\x16\x09\x91\x80\xf2\x65\x34\x2e\x31\x8b\x7c\x37\xd1\x11\x04\x6f\x65\xc9\xcd\x2d\xfc\xfe\xe5\xd3\xfb\x77\xfd\xad\x9d\xa4\x20\x92\xba\x76\xe6\x42\x72\x44\x01\x5b\xe6\x90\x10\x47\x42\xf8\xfb\xe6\xe3\x8c\x95\x8b\x10\x38\x2b\x6d\xf6\xec\x05\x83\x02\x02\xc1\x9a\xfc\x1b\x96\x9f\xf4\xb6\xc6\x66\x41\xa0\xe7\x25\xfd\xbc\x00\x2e\x5a\x2d\xf9\x63\xad\x94\x54\xb9\x76\x59\x5d\x3e\xaf\xd6\x5e\xf0\xe5\x67\x69\x1e\x4b\xdd\x24\x70\x98\xe7\xdc\x68\x56\x15\xfe\xa0\xca\xc9\xef\x0a\x79\xaa\xbc\xa6\x57\x91\x57\x5e\x2b\xb3\xfe\xb2\xbc\x0e\x02\x0e\x61\xb3\x45\x26\xae\xa8\x7e\x67\x6f\x18\xd5\xc4\x38\x09\x1b\x9e\x85\x5a\x8a\xd2\xcb\x73\x59\x4c\x40\x9c\x5d\x64\x95\x24\xf3\x0c\x5b\xef\xb8\xfe\xcd\x77\x73\x85\x82\x37\x92\xc0\x73\x65\xba\xe2\x05\x02\xba\x35\x0d\x93\xda\xbd\xc0\x05\x88\x9a\xe0\xa1\xd8\x7f\x8b\x62\x30\x90\x14\xec\x65\x21\x7a\xa1\xa8\x6b\xb1\xca\x1d\xcb\x65\x81\x72\x2b\x39\x53\xad\x16\x70\x65\xb0\x14\x2d\x80\x10\x92\xd0\x0d\x10\x2c\x2f\x4c\x2b\x72\xb1\x3a\xf1\xb5\x95\x15\x23\x9a\xd4\xfd\x70\xad\xd7\x7f\x97\x27\x6a\x65\x4f\xe6\x13\x1d\x82\xe1\x04\x1b\xfc\x37\x31\x89\xf1\xc0\x5c\x94\xef\x06\x2a\x07\x0e\x1a\x74\x6c\xf7\xc2\x4b\xe2\xed\xbf\xdb\x66\x5e\x5f\x48\xf6\xca\xc5\xed\xb5\xb9\x46\x12\x39\xe5\x9a\x53\xc9\x89\xaf\x35\x92\xdc\x21\xe8\x6b\xd2\x9e\x81\x1b\x50\x99\xed\x80\xaa\xa7\x11\xad\x67\x6a\x79\x42\x47\x68\xa8\xa0\x24\x40\x09\x89\xf2\x40\xd4\x9f\x19\xca\xe0\x84\x5e\xdf\x89\xaf\x21\xf2\x34\x67\x9a\x29\x0d\x84\x6d\xed\x28\xea\xc3\x8e\xb2\x88\xdb\x48\x82\x22\x8d\x48\x18\x6c\xc5\x8d\x73\xe8\x2a\x1c\x26\x8d\x1c\xcc\x51\xbf\xd8\xfb\xda\x5b\x28\x8a\x79\x2b\xc5\x8f\xee\x96\x4a\x78\x4c\xa2\xbe\xdc\x33\xdb\x51\xcb\x42\x8d\xaf\xb5\x4e\x7c\x39\x10\x26\xb1\xd4\xe6\xf2\xcd\x97\xe6\x86\x6e\xe5\x65\xf2\xb2\x45\xf9\x55\xe4\xca\x28\x7f\x93\xa8\xcf\x77\xec\x06\x49\xfc\xa1\x26\x0b\x5b\xc9\x01\x00\x3e\xe8\x72\x8c\x8a\x74\x86\xb0\xe6\x93\x72\xc9\x43\x41\xf1\x6b\xbf\x7f\xc3\x90\x4d\x20\x6f\xfc\x56\xdc\x11\xc1\xc7\x75\x91\x2e\x64\x46\x05\xc8\x50\x98\x47\x15\xc6\x95\x3b\xbd\x53\xfe\xd6\x2a\x0f\x7a\xcd\x90\x84\xe5\x9b\x5e\x77\x99\x95\xea\x7a\x1d\x55\x91\xe6\xb0\x39\xe7\xf3\x45\x4f\xa2\x6f\x9a\xf7\x6f\x18\x8a\xca\x17\xaa\xb2\xda\x04\xf6\x26\xe5\x41\x84\x49\x80\x24\x70\x59\x29\x4f\x99\x91\x71\x09\x54\xc8\xd0\xc1\xe1\xf0\x37\xeb\x3f\x7c\x08\x24\xd1\x63\x03\x96\xcf\x6f\x8c\x9a\xe4\x19\xa3\xcb\x15\x79\xc5\xff\x2f\x17\xd2\x67\x55\x1a\x21\x70\x19\x05\xb1\x49\x4a\x42\xb2\x23\x2e\xf1\x28\x48\x2b\xad\x92\xc3\x81\xfc\xc9\x10\x4a\x68\x56\x49\xed\x90\xdc\x93\x3c\xa2\x10\xa2\x92\x65\xb6\xd2\x75\x04\xc9\x24\xf8\xf7\x22\xf8\x0e\xe2\x2f\x41\xbf\xf4\xf9\x7f\x5b\xfe\xdf\x86\xff\x77\xc9\xc9\x3f\xa7\x2e\x43\x5f\x89\xd7\x6f\xd1\x45\x30\x71\xe8\x6f\xec\xe4\x84\xdc\x50\xe4\x52\xaf\x90\x0c\x5a\x62\x89\x14\x8a\x5c\x25\x9a\x88\x52\x0a\xe9\x19\xcf\xe8\x6d\xe0\x59\x0e\x69\x39\xfb\x04\x7c\x4f\x7c\x7f\x9d\xc7\xa1\x83\x58\x0e\x43\x62\x79\x44\x84\xad\xdf\x06\xe9\x8b\xd2\xf8\x5e\x68\xa8\x20\x57\xa7\x52\x85\xe1\x65\xfc\x27\x28\x24\xf9\x0f\xa1\x74\x70\xf9\x3a\x17\xcd\x6e\x08\xd8\xf1\x7e\xe2\x9a\x9f\x34\xde\x55\x2e\xf8\xaa\x58\xf9\x22\x4c\x2a\xbf\x03\x4c\xc4\x25\xd1\x4f\x73\x8e\xf2\x73\x62\x6f\x18\x8a\xe1\x16\xba\xec\x03\x10\xad\x1a\x28\xb8\xd4\x76\x56\x28\xd6\x05\xa5\xf8\xf6\x27\xa4\x55\xd5\x35\x8d\x2c\xcf\x08\x1f\xb8\x2f\x28\x0f\x35\x3b\x93\x13\x34\xea\x98\x37\x79\xb9\x90\x73\x9b\x5a\x28\xc4\x72\x49\x20\x1a\x91\xbf\xf8\x16\xd3\x36\xd2\xb0\xd8\x5b\x9e\xeb\x3a\x7a\x83\x70\x3e\x49\x5a\x41\x20\xa1\x66\x45\x1d\xd2\xf5\xe3\xa8\xfa\x64\xb1\x66\xa8\x06\xd4\x71\x08\x93\x35\x19\x1c\x17\xe4\x7a\xb9\x64\x08\x3b\xa8\x15\xd5\x1b\xbc\xbf\x1a\x79\x8d\x30\xf9\x13\x61\x72\xad\xeb\xd7\xb0\xd9\xf1\xce\xab\x4c\x3b\x5d\x47\xbf\x23\x4c\x18\x43\x1d\xc4\x25\xec\xaf\x1d\x4b\xb3\xda\xc8\x17\x26\xc1\x2a\x36\xf5\xd4\x83\x38\x84\x00\x03\xae\xa8\xee\xf9\x78\x1f\x60\xe6\x48\xd1\xab\xe2\x22\x3a\xeb\xe7\x53\x0a\x15\x4a\x0c\x3b\xf0\x99\x56\xd3\xae\x85\xe1\xe7\xac\x6e\xbf\x21\x19\x6d\x99\x7a\x24\xa1\xca\x8c\x94\xab\x8a\x44\xb4\x34\x46\xe9\xfa\xb1\x9c\x34\xe2\x6e\x05\x12\xd0\x94\xa1\xfc\x51\x6e\x2a\x21\x06\x57\x01\xf2\x5f\x42\x3f\x41\x6c\xbf\xcf\xf6\xfb\x64\xbf\x8f\xf6\xfb\xa7\x08\xf7\xd7\x76\xaa\x32\xee\x20\x85\xd6\xb8\xfc\x85\xa0\x3f\xf8\xf2\xe4\x1d\xb1\x22\xc7\x26\x26\x90\x17\x29\x6f\x47\x14\xa2\x33\xce\xc0\xf8\x32\x6a\xbc\x1e\x3d\x36\xc8\x07\x84\x75\x1d\xbd\x90\x9b\xf0\x25\x2f\x08\xc2\x20\xbb\xa1\xda\xa5\x00\xd2\xc4\xb0\x3f\x43\x7c\xc0\x73\x04\x92\x43\xec\xf7\x45\xcd\xd2\x04\x49\x45\x86\x5e\xcc\x51\xe7\xc7\xaa\x2e\x10\x3e\x3a\x63\x68\x19\x83\x44\x14\xe7\xfb\xeb\x8a\x18\xf8\x10\xd2\xfa\x40\x1c\xb5\x11\xab\xeb\xc7\x1b\x78\x8d\x0d\x27\xfb\x45\x25\xd1\x38\x69\xa1\x22\xef\x85\xaa\x35\x48\xbc\x6f\x5e\x56\x0a\x3e\x52\x88\xbc\x40\x22\x7d\x3d\xa7\x32\x2a\xa5\x78\xa0\x3d\x21\xd1\x8a\x04\x98\x5c\xe5\xdf\xcb\x1e\x3a\xbc\x43\x62\x81\xf8\x0c\xbd\x62\xe4\x2c\xbf\xc3\x14\xf1\x39\x55\x9d\xd6\x20\x38\x57\x0f\xf4\x34\xba\x95\xbf\x20\x0c\x2e\xfc\x86\xd1\xc5\xa4\x41\xb3\xae\xc3\xbb\xa8\xf3\xfd\x33\x62\x95\x74\xbc\x25\x66\xe0\xe2\x05\x5e\xf8\x25\xf0\x42\xa8\x67\x50\xb9\x54\x43\x8e\x02\x4c\x7e\xd9\xa6\x34\x1a\x92\x84\x3e\x45\xf8\xb1\x78\x2d\x28\x51\x18\x9a\xae\x73\xd9\xe9\x82\x15\xd0\x90\x21\x3a\x91\xea\x75\xb6\x50\x73\x33\x83\x29\x01\x12\x59\xe0\x52\xd8\x7f\x01\x7d\xa3\x0a\x19\x2f\x30\xf9\x1d\xe1\x03\xe2\xe4\xad\x6b\xf6\x2a\xb1\x64\x8f\xff\x97\x6b\xb6\x6d\x59\x9a\xdd\xcb\x92\xaf\x15\xe8\xc1\x57\xe0\xce\x2e\x97\xdd\xb1\xba\xec\x78\x21\x2c\xbb\x8e\x55\x67\x92\xc6\xc0\x48\x91\x02\xc4\x8c\xee\x25\x59\x8a\x6a\x08\x93\x57\x92\x21\x17\xcb\x2c\x80\xe9\xdb\xa2\x76\x1c\xb5\xcc\x1d\x04\xcb\x91\xd8\x2b\xce\xc9\xaf\xf2\xef\x45\x0b\xe5\x94\x6e\xd4\x5d\xd4\xa6\x1d\x17\x5d\xea\x13\xaf\x39\x2c\xba\xfe\x42\x19\xff\xea\x2f\x75\x0a\xe8\x7a\x86\xc4\xa4\x8c\xc8\x59\x7f\x17\x6d\xf8\x12\xc0\x56\xf1\xb5\x98\x0b\x5f\x82\x6c\xfd\xba\x98\x7d\x41\x56\xbd\x9b\xfc\x39\xc2\x77\xbb\x1b\xce\x61\xb1\x3e\x63\xfc\xcb\x39\x62\xf8\x20\x63\x13\xac\xd6\xe5\x23\x27\x0c\x3d\x36\xe0\x82\xb0\x26\x20\xa7\xa8\xb2\x94\x8b\x1a\xe6\x81\x48\xd2\xdb\x51\x17\xfd\xd3\x82\x44\xf2\x03\x5d\x47\x7f\xdc\xb9\xb1\x16\x5b\x68\xd9\x49\x18\x93\x3b\x3a\x5c\x55\x21\x5e\x60\x2e\x83\xbf\x62\x77\x1e\xd0\xe5\xf3\x1b\x04\xd1\x26\xaf\x32\x49\xbe\x22\xf8\xcc\x01\xa6\x82\x0f\x6d\xa7\x05\x5b\x96\xe5\x7e\x8f\xce\xfa\x4d\x69\x12\x3a\xa1\x78\x17\x2e\xcf\x91\xfc\x8a\x2b\xf9\xa6\xa4\x05\x59\xc1\xde\xe4\x93\x9c\x16\x71\x38\xd1\xeb\x0b\x9b\x75\x6e\x00\x3c\x93\xf9\xc9\xf3\xe7\xe8\x0c\x93\x17\xf4\x2a\x8f\x7a\xb8\xa6\x57\xfd\x5c\x87\x39\x7a\xd1\xaa\xa4\x83\x8e\x95\xc4\x71\x06\xaa\x2e\x79\xd1\x0f\xbc\x5c\xf3\xd2\x4e\xce\xfa\x81\x57\x48\x48\xf4\x05\xc9\x09\xa7\x67\xe4\x45\xf1\x15\x48\x78\x4f\x6f\x3a\xcf\x5e\xb3\xbe\x1f\xa1\x33\x18\xcd\x4f\x94\xd5\x84\x81\x9a\x84\x96\x9b\x1b\xff\x42\xa5\xb0\x06\xdd\x21\x2c\xf3\x72\x1b\xf1\xfa\xaa\xb9\x5e\xd7\x61\x07\x7a\xd1\xb5\x56\xc0\x66\xaf\xd5\xf6\x94\x16\xce\xdf\x3a\x9d\xdb\xc6\x55\xcc\xcb\x8e\xd6\x42\x66\x5f\x56\xd2\xe5\xb3\xce\xe6\xa4\x70\x25\xa4\xd8\x32\xd6\x41\x21\x5a\x64\x68\x42\xdf\xc2\x08\xf8\xfa\x07\xca\xce\x14\x47\xa7\x22\x15\x2a\x92\x5c\xde\xc9\xf5\x20\x8f\x05\xb3\x96\x8c\xa8\x8e\xfd\xb7\xa8\xbc\x70\x24\x0e\xe1\x48\xf6\x29\xaa\xfa\xfe\x3f\x14\x02\x8f\xb4\x91\x1e\x23\x55\x6e\x80\x56\xe5\xa4\xcd\xfd\xc6\x85\x26\xad\x18\x16\x9f\x96\x2e\xbc\xdd\x7e\xaf\xf8\x34\x9f\x17\xef\xc0\x25\xc9\x72\xf9\x17\x89\x08\x16\xe0\xce\x6e\x71\x3a\x5f\x94\x28\x7f\x66\xe8\x85\xd2\xd8\x47\x65\x76\xb6\x30\xaa\x26\xe3\xdf\xef\x55\x77\xb1\xad\xeb\x9a\x70\x01\x51\x4a\x6d\xb8\x92\x71\x61\x58\xea\x2e\xcc\xe7\x0b\xe1\x0f\xc5\x36\xcc\x7f\x2a\xcd\xff\x89\xf0\x6d\xbe\x33\x6e\x63\x98\x14\x30\xb4\x69\xbb\x44\xd2\xa0\x66\xa1\x69\x96\x90\x4f\x0b\x99\x51\x38\x74\xa8\xc6\xd7\xac\x40\x21\x9e\x54\xd2\x8a\x2b\x1e\xf8\xa3\xfa\xad\x43\x06\x26\xef\x5b\xf8\x72\x82\x6f\x93\x25\x5b\xe9\x3a\xff\xbf\x1e\x38\x03\xb1\x27\xba\x8e\x0a\x39\x15\x97\x40\x51\xc5\x3d\xf3\x0e\xe5\xc2\x69\xb1\x13\x27\x81\x0d\x27\x26\x0a\x23\x73\x7e\x79\x2a\x70\x04\xed\xa4\x74\xd2\x44\x94\x73\xa5\xa3\x75\xd9\xbf\x15\xc5\x6f\xbf\x67\x77\x26\xf3\x61\xf5\x8b\x99\x5b\x25\x73\x5c\x8b\x9f\x48\x48\xb6\xc8\x4e\xb4\x07\xda\x49\x64\x45\x18\xfc\x29\x79\x26\x0f\x5d\xcf\x8a\xbc\x92\x11\x51\x7d\x33\x8b\x06\x92\x00\x5b\x4d\xb5\x34\x81\x0c\x0b\x07\x35\x25\x3b\xbe\x3d\xfe\xa4\x88\xf4\xaa\x1f\x44\xd7\xbf\xff\xcd\x5b\xe6\x51\x9d\xb6\x1a\xe7\x25\x2d\xdc\x8f\x51\xca\x17\xdd\x42\xcb\x92\x1d\xd3\x2c\xcd\xb7\xc3\x94\x69\x6d\x6f\xd4\xa2\x9f\x2b\xae\x0c\x24\x44\x99\xfb\x02\x1a\xce\x31\x79\xc6\xe8\xb3\x7b\xf7\xf0\xf3\x0a\xf6\x9f\xe5\xe9\xc1\x63\xa4\xaa\xae\x68\xbb\xdf\x0b\xdc\x1e\xd7\x12\x20\xd4\x89\xaf\x53\xbc\xdf\xb7\xae\xb1\x17\xa5\xf8\x96\xdf\x3f\x28\x45\x5f\xce\x75\x5a\xca\x78\x51\xd9\x60\x7e\x3b\x66\xbb\xce\xd7\xc9\xe9\xdd\x30\x70\x2f\x80\xc9\x4b\x04\x22\xe9\x82\xd8\xf0\x14\x17\x37\x18\x09\xd8\x0a\x1f\x81\x03\x2a\x47\xa7\x84\x1f\x70\x51\xb8\x4b\x04\x91\x02\x99\xcf\x25\x8b\x8e\x48\x35\x9f\x4b\x78\x6d\x82\xd1\x7e\xff\x0a\x55\x9d\x15\x08\xdf\x6e\xb9\x04\x59\x3c\xf9\x4d\x3c\x51\x62\xf0\x9e\x15\x1c\xfb\x39\xc2\x47\x6d\xd7\x3b\x94\x03\x43\x7e\x26\x9c\xf5\xb4\x01\x89\x0b\x1d\x23\x8f\xc3\xd8\xec\x0e\x18\x79\xc1\xc9\x6f\x77\x43\x89\x39\xf6\x37\x07\x2a\x49\x7d\x55\x23\xb5\x7b\x8a\x56\xa9\x6d\x85\x6b\x12\xdc\x0d\x56\xa3\xb9\x1b\xb0\x95\xec\xcf\xaa\xb3\xfb\x02\x61\xae\x2b\xd5\xae\x8c\xcc\x67\xaa\xe4\xf0\xd7\x9c\x19\x69\x89\x5c\x69\x11\x26\x19\x1f\xd7\xc0\x47\xe0\xd1\x2c\xfc\xc9\x08\x1f\x55\x21\x53\x4c\xc4\x03\xdb\xf3\xa0\x5e\x4a\xa3\x92\x8e\x87\x28\x23\xc2\x65\x54\xa4\x82\x80\xed\x80\xab\x93\xdf\xcf\xb4\x5a\x86\x4e\xa0\x27\x97\x22\x30\xf1\x36\xe2\x5a\x37\x23\x10\xe4\x7c\x7a\xb3\x65\x56\x46\xd6\x76\xe4\x85\x2c\xb1\x12\x35\xb1\x4d\x85\x41\xfc\x55\x08\x28\x6f\x41\x27\x7d\x58\x1d\x82\x97\x44\xbd\xb5\x05\x93\x87\xea\x40\xfe\x5a\x2d\xc4\x44\x11\x6a\xe4\x5b\x91\x3c\x2a\xf2\xd1\x7f\xa7\x27\x8f\x0a\xb3\xf8\xb3\x38\x0e\x99\x1d\xe1\x8e\x77\x0d\xb8\x9c\x67\x47\x3b\x3b\x84\x6b\x31\xb1\xbc\x22\xe2\x21\x62\xe4\x25\x26\x4c\xde\x14\xa1\x48\x82\xd6\xc3\xaa\x7c\xf9\x6b\xe5\x9a\x08\x21\x8d\x58\x0f\xd1\x73\xb6\x10\x3f\xe2\x5d\xa6\x59\x9a\x13\xee\x12\x8d\xfc\xd2\x84\x0d\x22\xc0\x58\x80\x92\x5f\xc4\x9e\x54\xf4\xda\x17\xde\x6b\xf7\xe4\x2c\x8a\x3d\x11\xb2\x5e\x8c\x07\x1c\x46\x91\x23\xa2\x9e\x47\x39\x6a\x8f\x66\x03\xd7\x08\x48\x11\x97\x74\xa9\x88\x94\x2f\xd5\xf0\xc4\x63\xb3\xca\x55\xa5\x4e\xaa\xeb\xc7\xff\x82\x1c\xa4\xc7\x7e\x91\x2a\xb5\x90\xc9\x50\x11\xba\x68\x2b\xc1\x8a\xc0\xff\x8f\x6c\xca\xe0\x46\x86\xca\x15\xb2\xa0\x6b\xb4\xe9\xfb\x10\x30\xaa\xeb\xcf\xda\xe2\x2e\x95\x9c\x9b\x32\x41\x8b\x64\xe8\xc5\x6e\x03\x6c\xf9\x1b\xa4\xfc\x27\xc6\x7e\xbf\xe6\xef\xa2\x9a\x60\x2a\xec\xbd\x29\x03\x72\x99\xcd\x82\xd4\x30\x6d\xcd\xae\xe9\x71\x02\xc2\xd9\x71\xa4\xeb\x09\x24\x90\xa9\xa4\xb6\x2e\x47\x51\xb0\x09\x61\x14\x53\x73\x58\xef\xf7\x2f\xd4\x9f\x47\xca\x4e\xad\x34\x54\xb9\xfc\x4d\xcd\x97\x5d\xdc\x62\x5c\x7c\xff\x5a\x26\x74\x6b\x39\x4b\x9b\x93\xa3\x5c\xb9\x11\x14\x3f\x3f\xc1\xe9\x08\xb8\x82\xa3\xbe\x75\x8b\x30\x3a\x62\xd3\x2d\x43\x81\x7a\x7c\x29\xa5\x41\x67\x96\xc8\xe3\xb4\xcc\xb5\x0d\x27\xce\x8a\x8b\xbd\x20\x9b\x12\x57\x93\xb6\xfd\x1b\xcb\x20\x3b\x71\xf3\x97\x7c\x2a\x60\xa0\xc0\xcd\xef\xff\x92\x45\x21\xf3\xb3\xfe\xb5\x65\x10\x4f\x5e\x07\x26\x9f\x03\x10\x14\xac\x45\x6a\xe5\x5e\x74\x12\xfe\x18\x13\x9f\x46\xbd\x3c\x09\x6d\x6f\xf7\x63\x4c\xb6\x32\x09\x73\x2f\x39\x71\x7f\x8c\xc9\x86\x26\x3d\x99\xc1\xb6\xe7\xfd\x18\xe7\x5d\xb7\xde\xef\xfd\xfd\x7e\xbb\xdf\x6f\xc0\xba\x04\xc6\x14\x19\xe3\xfd\xa2\x25\xf9\x59\xbe\x86\x94\x24\xcd\xad\x6e\x0a\x65\x91\x88\x8b\x15\xf2\xa0\x9f\xc5\xad\x92\x63\xa7\xf3\xfe\x61\xa2\x8c\x92\x95\xe4\x3e\xbb\x83\x88\x88\xc3\x0d\x96\x48\xf8\x8a\x02\x97\x12\x4c\x4c\x5c\xcb\x62\xfe\x2f\xa4\x4a\x69\x77\xc8\x4c\xba\xbe\x06\xd3\x4b\x53\xd4\x15\x42\x4f\xc3\xb8\xc6\xd5\xc4\x7a\x93\xbf\xa8\xe2\x72\xa3\xb1\x9c\x57\xe2\x27\x86\xae\xe7\x6b\xe5\x18\xa4\xe2\x0e\x41\x92\xef\xe5\xa1\x9d\x31\x2f\xf7\x4a\x55\x24\xcb\x4a\x19\xde\xef\x93\xea\x25\xb4\xff\x52\x82\xce\x8f\x55\x71\xf6\x2d\xc2\xc7\xf9\xa2\x2b\xa9\x83\x7d\x4a\xab\x5e\x2f\xf9\x3b\xc2\xb7\x7f\xa0\x3c\x8f\x66\xee\x1a\xe4\x2b\xb2\x12\xfe\x08\xeb\x52\xcd\x5e\x91\x95\x99\x6b\x44\x76\xfb\x66\xd0\x2b\xb1\xe1\xc0\x51\xc5\x13\x91\xd2\x0f\x08\x2f\x40\xbd\x16\xfe\x7d\xe1\xb6\xdd\xd1\x78\x71\xdb\x3a\x5b\xac\x98\x54\x13\x47\x5a\x71\x23\xc1\xed\x53\x84\x0f\x16\x23\x2e\x5d\xd6\xb2\xf8\xe4\x5b\xbc\xcc\x4d\x64\x05\x77\x1c\x62\x2f\x60\x2b\x67\x72\x07\xf9\x59\xdc\x81\x38\x8b\x3b\x96\x67\x74\xc7\x87\x7a\xfe\x97\x46\xfd\x71\x09\x51\x4b\xb3\x55\x80\x96\x09\x90\x94\x74\x32\xd2\xd6\x71\x6f\x36\xae\xee\x9b\x18\xee\xbe\x04\x25\xf0\x51\x61\x3d\x2f\xa4\xc1\xc7\x4b\xad\x4c\x93\x44\xb4\xc6\x81\x27\xa2\xe5\x47\x9c\xda\x42\xea\x19\xbe\x55\xaa\x43\xcc\x5b\x6b\xd4\x91\xd2\x84\x7a\xd0\xdd\x6a\x39\x81\xb5\xac\x9c\xaf\xd2\x4e\xd8\xaa\x1d\xa5\x76\x02\xf1\x6d\x56\xd2\x11\x73\xa3\x9d\x88\xad\xb6\xed\x24\xd8\xed\xe1\x70\x38\xac\x8e\xc0\xb4\x9f\xea\xba\x9b\x4b\x8d\xea\x29\xdb\x62\xac\xf2\x9c\xc8\x69\x71\xa4\x7f\x78\x38\x60\x22\x2a\x49\x23\x86\x4b\xf2\xd3\x10\xe5\x55\xb3\x65\xaa\x48\x08\x82\x6d\x38\x90\x69\xc0\xd0\x8e\xbc\x68\xba\xe9\x13\xf5\xe8\x6a\x44\x2a\x09\xde\xac\x50\xb9\x0d\xd1\xad\x08\x62\x7f\x08\x73\x65\xdd\x49\x5d\x7f\xd4\x97\xb6\x6a\xd4\x42\x11\xdc\xf8\x5b\x49\xf5\x5d\x48\x2e\x1b\x86\x5e\x34\x6f\xb6\x97\x87\x37\x4b\xe3\xf0\x4a\x53\x49\x02\xa9\xe3\xb6\x43\xe1\x64\xba\x0e\xfa\xab\x0c\xe9\xce\x55\x57\xf2\xac\x60\x4a\x1f\x11\x57\xa2\x12\x7a\x8a\x30\x09\x68\xb2\x34\x56\x24\xa6\xc9\xd2\x5c\x1d\xa9\x2c\xaf\x30\x38\x06\xba\x1e\x43\xf2\x9d\x18\x93\x6c\x11\x75\x9d\xb6\x3a\x03\x9b\x30\x12\x27\xae\xac\xe2\x57\x41\x34\xb0\x5a\xe1\xcb\x6a\xa5\x1b\x88\x2e\x02\xce\x0b\xb2\x9b\x86\x22\x61\x6c\xf8\x76\xeb\xed\x37\xed\x64\xcb\x8a\x70\xaf\xc8\x5a\x4a\xae\x69\x21\xc0\x8a\x8d\xaf\x38\xc0\xf1\x11\x1d\x9b\xf8\x28\x5b\x04\x77\xf4\x4b\x97\x93\x46\x74\x55\x4c\xdb\x43\x1a\x50\x8b\x6f\x08\xcc\x56\x60\xa3\x78\x85\x54\x89\xf2\xe1\x7d\xd9\xe3\x2f\x8a\xd0\xf1\x32\x6b\xad\x1a\x4b\x7e\x74\xc7\xf9\x1a\x55\x5b\x3b\x85\x63\xf9\xf9\x09\x9d\x26\xac\x50\x78\x3e\xb0\x3c\xc0\xb1\x3d\xfb\x99\x08\x01\x4a\x0e\x7c\xfe\xb5\x18\x99\x44\x98\xee\x92\xad\xac\x96\x42\x71\x6a\xec\x5d\xec\x31\xde\xaa\x06\xa9\x7b\x17\x70\x00\xce\x6a\xb1\xa7\x6f\x18\x2a\xde\xac\xb1\xcc\x98\xb8\xe7\xfa\xce\xc4\xbb\x99\xae\x7f\x66\x28\x23\x91\x7a\x5b\xb3\x3c\xa8\x97\x88\xf0\x2e\xde\x7d\x15\xca\x83\xa5\xb1\xb2\x82\xc3\x43\x96\x87\xde\x43\xf4\x08\xbd\x60\xe4\x21\x18\x01\x7f\x52\x9f\xaa\xaf\xa8\xc6\x9c\xb5\x6a\xe9\x19\xbe\xbd\x80\xe0\x32\x26\x13\x2c\x71\x8c\x52\x93\x7a\x1d\x6d\x77\x19\x7d\xcf\xa0\xe7\xff\x62\x2d\xe9\x77\xca\x74\xdf\x8b\x5b\xbe\xc1\x73\xa9\x84\x5d\xbb\xe1\xce\x13\x27\x9e\x73\x77\xf5\xd1\xab\x8e\x63\x6e\x02\x8d\xd0\x08\x13\x98\x61\x37\x0c\x25\x78\xa1\xa4\x9b\xa5\x94\x26\x56\xae\x37\x40\xcc\x78\x9e\x21\xff\xb8\xc8\xb1\xca\x6a\xce\xf2\x23\xa6\x84\xd8\x14\x67\x80\xa2\x03\x26\x2c\xb7\x9e\xb1\x36\xb7\x5f\x6b\xb5\x40\xe4\xcf\x3d\x90\x2f\x8d\x63\x4b\x90\x97\xf0\xff\xb2\x3b\xbb\xfe\xff\xbb\xac\x8b\xef\xb6\x2f\x19\x6d\x99\xf4\xf5\x0b\xe8\x73\x36\x12\x71\x95\x90\xc4\x74\xb9\x02\x51\x34\xbe\x64\x49\x12\x78\x2c\x25\x29\x7f\x14\xf2\x89\x51\x70\xa4\x1d\xc2\xb7\x31\x57\x01\x3b\x9d\x92\x45\x3f\x54\xb6\x5b\x17\x76\x89\x8e\x63\x86\x8b\x4c\xe6\x78\x46\x5c\xc6\x91\x3e\x74\x54\x35\x37\x79\x4a\x23\xf5\xe6\x15\xfd\x38\x9f\x39\xe5\x49\xdf\xfc\x49\xd9\x23\x01\xbe\x4d\x50\x00\x97\x9b\x28\xd3\x3b\x92\x67\x3d\xc5\xc4\x0b\xaa\x39\x74\x15\x34\x49\xd5\xa0\xb3\x56\xb9\x4a\xac\x9c\xfb\x05\x2f\xcc\x31\xa5\x11\xbe\x8d\x68\x06\x1d\x9d\x52\x64\x8b\x23\x3e\x79\x8a\xbc\x22\xf4\xfe\x1b\x6e\x31\x0b\x96\xc9\x4a\xac\xb0\x65\xb6\x2a\xf2\x75\x2b\x34\x37\x96\x45\x4a\x6e\x3b\xce\xd9\xb5\x9c\xe0\x4e\x3b\xd4\x93\x45\x57\x41\xcb\x29\xc1\xac\x4b\x95\x15\x8e\x19\x97\x6f\xaa\x64\x87\xf2\x74\x77\xb7\xd5\x9b\x99\xe5\x99\x86\xd6\x53\x73\x2e\x17\x6e\xda\x8f\xce\x45\x54\x1c\x11\xeb\x3a\xbe\x06\x26\x50\xc1\x99\xaa\xee\xed\xe3\x10\xb2\x37\x1f\x1b\x24\x92\xb2\x5c\xe3\x6c\xdd\x37\xd4\xe5\x13\x20\x5e\x1a\x10\xd8\xd0\x72\xe2\x0e\x86\x71\x2d\xce\x83\xa8\xa6\x31\xcc\x85\x6a\xb2\xa5\x0f\x19\x82\x28\xdd\xc6\xe0\x79\x10\x05\xa5\x15\xab\x51\x5b\xe1\x72\x8f\x5d\xfa\xab\xf6\x0d\xbf\x76\x78\x2e\xae\x9d\xce\x6b\x49\xea\x50\xd5\x5f\x6f\xd5\xdb\xc3\xf3\x26\x72\xbb\x5f\x43\xdd\xc5\x5d\xf2\x3b\x59\x7e\x61\x2b\x0c\x16\x63\xb2\xa1\x5b\xe8\xbc\x23\xf1\x41\x6b\xf6\xda\x0d\xc2\xe4\x38\xd2\x75\xd1\x46\x61\x33\x5f\xa3\xad\xe8\x56\x71\x34\x4b\x1c\x9b\x3e\xa6\xd2\xc6\x5b\x3f\x06\x50\x54\x8b\xc1\xab\x2a\x2a\x33\x51\x39\xe8\x07\x11\x6c\x86\x69\xe5\x80\x6e\xb1\xf6\x8f\x94\x16\xb3\x22\x64\x3e\x56\x6b\x2d\x78\x19\xc3\x96\x78\x5b\x3e\x6e\xf0\x2a\xef\xd8\x75\xd6\x08\x50\x84\x94\xaf\xd5\xf3\x64\x02\x1a\x19\xb9\xa4\x1e\x2b\xb9\x5e\x65\xaf\xa0\x78\x99\x9d\x98\xab\xfd\x9e\xe1\x1c\xfb\x87\x84\x5d\x06\xf1\x2e\x6d\x6b\x21\x96\x79\x0d\x7b\x66\x7b\x53\xac\xad\x29\x92\xd0\x78\x99\xf5\xa0\x95\xbc\xd9\x44\x66\x51\xb8\xe4\x83\x54\xe3\x9d\xdb\x16\xde\xc9\xf0\x2d\x5c\xd2\x9b\xcf\xca\xfd\xde\x26\x97\x48\x12\xcd\xb2\x5c\x37\xaa\xd6\x80\xc5\x4b\xee\xce\x0b\x2f\x93\x7c\xf3\x9d\xa8\x60\x13\xc4\x43\x5b\x4c\xb6\x8a\x38\x50\x9b\xdd\x10\xae\x4b\x05\xd4\x81\x7c\x65\xf4\x16\x24\x7c\x4e\x9d\x55\x09\x52\x91\x06\x27\x4b\xda\xb2\x09\xe8\x08\x96\x54\x15\x94\x64\x1d\xbf\x56\xce\x3b\x2e\x57\x70\x63\x06\x09\xe8\xb1\x09\x06\x1c\x69\xd4\xb5\xa9\x5c\x9c\xe2\x37\x5f\x99\x2d\x37\x82\xd8\xe4\xb6\x3c\xe4\x2a\x7c\x12\xf9\xf1\x57\x13\xd2\xc0\xb4\xd5\xa8\x9e\x97\x35\x0e\x98\xec\x28\x68\x01\xa9\x72\xa0\xc8\x95\x4b\x27\xb7\x9c\xe9\xfa\x71\x50\xdc\x28\x21\x9f\xf5\xdd\x30\x4e\x59\x9a\xa1\x58\x26\x5f\x84\x72\x9b\x26\xdd\x87\x22\x73\x1d\x0d\xef\xf7\x59\xae\x56\xed\xf7\x17\x2c\xff\x7e\x24\x2e\xe0\x10\xa6\x4e\x5d\x3f\xae\xa8\x10\x8a\xf1\x5a\x73\x84\x45\xb2\x5c\x9e\xa1\x08\x90\xd9\xef\xd5\x1a\xc7\x65\x0d\xbb\x98\xa5\x5f\xd9\x52\x3c\x5c\xe1\x27\x86\x5c\xad\x29\xef\x81\x84\x84\xf8\x28\x05\x37\x58\x94\xf3\xa5\x14\x03\x17\x55\x65\x04\x92\x81\xf3\xa3\xd4\x98\x02\x5d\x47\x01\x78\xce\x5a\xfd\x60\x1c\x98\x8b\x61\xf7\xf9\xc1\xa2\xc2\xc2\xc1\x05\xd1\x9c\x63\x30\xb4\xbb\x27\x46\x42\x9a\x0f\xc0\xc8\x2e\x64\x1c\xb8\xe4\x5a\xca\x38\x47\x05\xc0\x5d\xf7\xf7\x80\x6f\x54\xd7\xa3\x2e\xf7\x5e\x61\xa2\x80\xab\x4e\xf8\x84\x4d\xfe\x3f\xf3\x30\xc1\x22\xe1\x1b\x3c\xc9\xdf\x4f\x65\x57\x31\xc2\xa4\x83\xec\xda\xed\x1e\xf9\xea\x3f\x36\xe1\xe6\x07\xd1\x3d\x2a\x2a\xfb\x1b\x50\xa9\x92\x23\xc7\x65\x28\x32\x1c\x6b\xe3\xfc\x1e\xca\x48\x45\x0f\x76\x41\x0d\x86\xc7\x05\x27\xd1\x88\x2b\x1f\xe5\x66\xeb\xe2\x81\xe0\x1f\xc4\x2d\x2e\x9a\xd9\x41\x2a\x87\x5f\x58\x71\x19\x73\x79\x6a\x5d\x23\xea\x81\x6d\x38\xc3\xde\x62\x7e\x14\x11\xc5\x8a\x63\xa1\x35\xd2\x2b\x2b\x22\xbd\x24\xdf\xbf\x95\xb9\x70\xe8\xcf\x0c\xb1\x42\xa9\x88\x20\xdb\xe7\x35\x9c\x16\xcf\xa3\x7e\x4a\x6f\x8f\x42\xdb\xa2\xb1\xc5\x28\xa7\x73\xf3\xd3\x97\x95\x13\x93\xf9\xa1\x4b\x08\x0f\x66\x4a\x70\x30\x61\x07\x24\xaf\xf2\x2f\xe4\xb9\x66\x6e\x84\x98\x2f\xe4\x7e\x10\xa5\x2c\xc9\xc4\x31\x1d\x14\xf3\xe1\xad\x1f\x7c\xc5\xed\xc7\xd3\x24\xe9\x3e\x74\xab\x06\xc7\x0e\x45\xbc\x56\x2c\xed\xd4\x45\x38\x34\x51\x95\x49\x79\xc4\xbf\x72\xf8\x3f\x5d\x07\x7e\xd6\xb3\xaf\xec\x1b\xed\x20\x44\xb8\x46\xca\x85\x32\x85\x22\xa3\x51\x67\x7e\x19\x92\xd1\x77\x20\x95\xa0\xf2\x7a\x5c\x6d\x93\x02\x7d\xf8\x28\x68\xd6\x63\xa1\x7d\xa3\x5c\xb7\x8f\xb2\x47\xa6\x81\x21\x47\x4d\x71\xee\xb1\x25\x8b\x0d\x13\x01\xd9\x95\x13\x06\x6d\x39\x21\x62\x38\x59\xd8\x89\x46\x33\x20\x17\x4e\x4b\xd6\x89\x58\xd7\xf3\x16\xf2\x31\x05\x51\xf5\x5f\x8c\xde\x4a\xef\xa3\x65\x10\xe9\x7b\xb4\x8c\x03\xf9\xbd\x7a\x48\xef\x8f\xca\x51\xe6\xdc\x5f\x99\x14\xdf\xbf\x1e\xa9\x98\xb2\x02\x53\x22\xd2\xa0\xb0\x2c\x5f\x3b\x6a\x8a\x87\x6f\x5b\x3c\xb5\xfb\x71\x5e\xb0\xfc\x10\x62\x3d\x54\x22\xe3\x6b\xe3\xd8\xcc\x37\xf6\x63\x03\x98\x32\x80\x2a\x89\xbb\xca\x20\xcd\x20\x0a\xb2\xc0\x0e\xc5\x26\x27\x30\xaa\xd4\x81\xe6\x58\xb5\x06\x2a\xa9\xb9\x90\xbc\x0d\xab\x3b\x42\xcb\x53\xf4\xc9\x1d\x80\xdf\x17\xd3\xe5\x55\x54\x6b\xae\x03\x1d\x1b\x95\xa9\x7e\x47\x7e\x95\x83\x78\x79\x75\xdb\x2c\x72\x26\x1c\x27\x52\x7c\xe0\x22\x40\xe1\x60\xcb\x1f\x62\x12\xb4\xbe\xbf\x72\xeb\xf0\xef\xca\x8d\xc3\x5f\x49\x4a\x3b\x35\x42\x12\xd2\xb8\x27\x1c\xbc\x64\x47\xed\x1e\x38\x87\x8f\x8e\x41\x0b\x6f\xf8\xff\xaa\x36\xa1\xfb\xd5\x51\xb1\x56\xbb\xdb\x4e\x68\x4c\x22\x6a\x1f\xa9\x03\x1b\x40\xc0\xa6\xb8\xa4\xef\x24\x84\x0d\x31\x8b\xb7\x27\x3b\x2c\x55\x77\x6d\x1d\x27\xc1\xdf\xbc\x4b\x04\xf8\x02\xca\xad\x88\xb8\x54\xbb\x64\x49\x16\xb8\x65\x81\x70\x7e\x25\xc4\x6b\xab\x25\x3d\x65\x11\x59\x37\x2b\x82\xf5\x29\xc9\x39\xa7\x48\xa9\xeb\xf6\xd6\x79\x52\x5d\xaf\x97\x82\x5d\x2a\x95\xee\x35\x37\x77\xbb\x79\xc2\x6e\xb5\x3e\x1c\x0e\x15\xdb\x44\xa9\xbe\x56\xe7\x2b\xfa\x5d\xda\x3a\x6f\x8b\xfb\x89\x18\xf1\x62\x17\x8c\xb7\xf7\x04\x0f\xa9\xf3\xf0\x0f\x86\x0f\xa8\x72\xc9\xa2\x8f\xf0\x2d\x17\x5d\xd0\xef\x8c\xfe\xde\x12\x73\xa8\xde\xa8\x9a\xb7\xcd\x25\xc1\x03\xc6\x6d\x67\x5f\xd5\xdd\x3d\x76\xe5\x75\x6b\x45\xee\xfc\x2a\xa5\xf7\x2d\x1a\x49\xec\xa1\xbe\x2f\xad\xd5\x44\x3d\x77\xa4\xf9\x29\x78\xc4\xa1\x2b\x4d\x50\x11\x08\xcc\x17\x84\xda\xe3\x47\xd1\x7e\x5f\x9c\x26\x8e\xb9\xc0\xab\x96\x8a\x67\xc8\x47\x98\xc4\x0b\xb4\xe6\x0a\x31\x6b\x86\x0c\x06\xfb\x7d\x8a\xf0\x7e\x1f\x22\x8c\x2d\xc4\xd5\x23\x17\xe1\x8e\x2d\xab\x7d\xd4\x8f\xf9\x1c\xe7\x2d\x79\xe8\x5f\x0c\x73\xc6\x67\x62\x52\xe0\xec\x36\x5f\x38\x0c\xf2\xd8\xa1\x0a\xe3\x2e\x16\x7c\xce\xc0\x8b\x80\x14\xb0\xff\x97\x51\x43\x22\x42\xa8\xdd\x76\xd3\x31\x3b\x5d\x24\xf4\xbf\x58\xa4\x5f\x3f\x1c\x48\x56\x6c\x0b\x8d\x4c\x3f\xdf\xb6\x37\xc0\x0e\x54\xee\x0e\x11\xed\x15\xec\x5f\x22\x06\xc9\xe6\x75\x13\x7b\xd3\xbf\x6c\xf3\xb1\x6f\xb9\xec\xa9\xbc\x29\x4e\xfa\x90\x4b\x56\x56\xc3\xaa\xeb\x60\x1b\x8c\x4b\xef\x6e\xc5\xfa\xf8\x0d\x2c\xae\x71\xfb\x66\xcb\x23\x22\xc3\x08\xb9\xfe\x27\xd7\xcc\x93\x41\x9e\x80\x4e\x09\x4f\xe4\x42\xe7\x00\x8c\xfa\xf9\xc2\x8a\xc0\x1d\x96\x2c\x8d\x15\xb0\xa4\x1f\x93\xa5\xb9\x92\x17\x3f\xe7\xee\x92\x65\xb4\xda\xef\xb3\x23\x19\x61\x97\x87\xd6\x65\xf1\x56\xb3\xe0\x9b\x8c\xfc\xb1\xe4\x25\x2c\xb9\x3b\x32\x29\x2d\x17\xc4\x2e\xc2\x80\x18\xc4\x15\xc1\x4d\xce\x34\xce\x6f\xb2\xdd\x51\x7b\x11\x08\x96\x18\x8b\x8d\xc2\x85\x27\x82\xf7\xc5\xe2\x33\xe7\x95\x82\x2d\x4a\x76\x18\x0a\x76\xb8\x2b\xd8\x64\xce\x49\x77\x39\x27\x0d\x7b\xe9\x41\xc4\xed\x41\x58\x91\x20\x59\x84\x1e\x01\xc5\x9e\x90\xcc\x36\x41\x24\x7d\xd6\xfc\x27\x49\xee\xb0\x7b\x73\x3c\x07\x91\x0e\x40\x54\xb5\xaf\xbf\xb5\xaa\xb8\x80\x97\xd7\x85\x3b\x62\x3a\x59\x66\x11\x02\xc5\x16\xf2\x7e\x6d\x4a\x3d\x2b\xbf\xa3\x9b\xd2\x35\x57\x41\xb6\xd4\xe7\xc3\xc6\xfb\x72\x43\xfd\xa5\x5f\xf6\xb7\xec\x57\xb5\xc7\x8a\x0b\x85\xe5\xbd\xc1\x9e\xec\xb1\xb5\xec\xb1\x75\xcf\xcb\x7b\x6c\xd3\xdb\x1e\x8e\xe4\x4a\xb3\x8a\xdc\x46\x07\x04\xa9\x2c\x49\xd2\xb9\xd7\x6e\x18\x82\xc2\xf2\x61\x8a\xb8\x9e\x8a\x0f\x48\x99\xfe\xe0\xb6\xc8\x68\xf5\x49\x29\x8b\xd9\xa8\xd0\x8f\xf6\x7b\x94\xb5\x7a\x37\xe4\x6b\xdd\x63\xf0\x64\xdf\x64\xf0\x2c\x2d\x9e\xec\x1b\x2d\x9e\xf7\x6c\x5e\x9c\xc5\x1c\x73\x5e\xc8\xbf\xf0\x61\x5a\x66\x60\x1f\x3d\x14\x79\x32\x62\xa1\xb2\xaa\x52\x5c\x26\x34\xe2\xe6\x8e\x65\xd7\x36\x20\xbb\x8d\x75\xe7\x39\x67\x1d\xc6\x77\x68\xe9\xa3\x83\x33\xf5\x05\x1b\x6c\x19\x17\xb8\x12\xb1\x3b\x0f\x0f\xc4\xd2\x0d\x9e\x94\xf2\x1e\x84\x66\xc1\x45\xc7\x83\x1f\xab\x4f\xb3\x78\xab\x42\x7e\x85\x84\x87\xe2\xb2\x6a\x05\xf4\xeb\x01\xe3\xa3\x88\x06\x85\x05\x28\x16\xfa\x4c\x6b\x8e\x3a\x79\x57\xe2\x81\x24\xc5\x76\x20\x72\xbc\xfd\x5b\xfa\x41\x71\x7f\xa6\x12\xe2\x5d\xac\x35\x91\x93\x2a\xb7\xfd\x43\x23\x5c\x0a\x55\x7f\x43\x02\x0e\xd1\xad\x10\x9d\x15\xc3\x47\x73\xd2\xa6\x34\x42\x4a\x6e\x68\xbc\x28\x54\xf4\xdc\x5c\xba\xa8\x3f\x90\xbb\x7f\xf3\x9e\x73\x2b\xc3\x5d\x2b\x4d\x84\x88\x85\xbc\x31\x79\x5b\x37\x5e\x74\x2e\x4b\x00\x7e\x8c\x52\x5d\x8f\x32\x14\x10\x3e\x87\x43\xf8\x1e\x93\x10\x8b\x9c\xb5\xb5\xd0\x98\x06\x89\xf9\x3d\xa6\x24\xa0\x29\x89\x69\x48\x1a\x32\x8b\xae\xb7\x87\x40\xd8\xca\x8c\xee\x14\x5d\x44\x1f\xeb\xba\x8d\x40\x02\x50\x06\x29\x53\x7d\x63\x90\x43\x36\xe3\x43\x93\xc5\x5b\x58\x61\x59\xbc\xe5\x3f\x61\x52\xc2\x83\x44\xe4\x81\xcf\x67\x1f\x3c\x13\x5f\xf9\x43\x3e\xa3\xe1\x11\x30\xf0\xa6\x27\x1f\xdd\xca\x7c\x86\x7f\x33\xce\xa2\x72\xdf\x3f\x7d\xc8\x54\xeb\x92\x38\x03\xa6\xed\x52\xf6\x20\xcd\x92\xc0\xcd\xb4\xa3\xa4\x9f\xf0\x15\x9c\xf4\xc1\x54\x94\xba\x6b\xb6\x61\xcf\xed\x8c\x9d\xc7\xc9\x8d\x69\x54\x0f\x4e\xe6\x8e\x4d\x30\xa9\xa9\x15\x9e\xba\x2e\xc4\x81\xb5\x00\xc7\x0d\xe0\x9f\xec\xe4\x62\xd0\x0a\x6b\x37\x60\x3f\xd8\x41\xc2\xbc\x56\xe0\xb4\x05\x38\xcd\x58\x68\xb6\x42\x87\x1d\xd0\xed\x84\xec\x1a\xd0\x9f\x58\xd6\x8e\xd8\x6d\x03\x6d\xc7\xea\xb5\x81\x0e\x5b\x41\xd7\x0d\xd0\x53\x2e\xde\xd9\xbb\x8e\x21\xf1\x15\x78\xd0\x48\xb7\x71\x68\x67\xec\x59\xf2\xec\x65\x2b\xfc\x79\x03\x7f\x27\xe8\x65\x3b\xea\x0f\x1f\x5f\x46\xad\xf0\x37\xcd\x9e\xee\x02\x75\x3a\x50\x07\x5f\xdb\x49\xb9\x6a\xa2\xee\x02\x3d\xeb\x40\xbd\x7b\x9f\xb4\xc2\x5f\x37\x51\x77\x81\xbe\x68\x47\xfd\xd1\x7b\xb6\x6b\x85\xff\xd4\x40\xdd\x09\xfa\xbe\x0b\xf5\xcb\x9b\x56\xf8\xb7\x2d\xa8\x3b\x40\x4f\xbb\x50\x7f\x0d\x3b\x88\x79\xda\x82\xbc\x13\xf8\x43\x37\xfa\x8e\xc1\xbf\x68\x45\xdf\x01\xfc\xbc\x1d\xfd\xa7\x2d\x73\xb3\xc4\x0e\x5b\xeb\xfc\xd9\x5c\x6e\x77\x81\x7f\xec\x58\x42\xbb\x0e\x92\xde\x35\x97\x50\x17\xe8\x4f\x5d\xa8\x3f\xb4\x77\xe6\x9b\x16\xd4\x1d\xa0\xaf\xdb\x51\xbf\x8c\x3a\xc6\xe9\xef\x06\xea\x4e\xd0\x9f\xdb\x51\xbf\x4f\x3e\xb6\x33\xe4\x67\x0d\xd4\x9d\xa0\xbf\x75\xad\xce\xce\x2e\xfc\xdc\xb2\x3e\x3b\x81\x5f\x75\xa3\x6f\x85\xff\xab\x15\x79\x2b\xe8\xc3\x2e\xd4\x1d\x6f\xfa\xb2\x05\x75\x07\xe8\x97\xae\x25\xd4\x31\xf4\xbf\xb6\x2c\xa0\x0e\xd0\xaf\xed\xa8\xf9\x72\xeb\x78\xcf\x7f\x35\x90\xdf\x01\xfc\x4b\x37\xfa\x56\xf8\x3f\x5a\x91\xb7\x82\xfe\xde\x85\xfa\x7d\xf2\xac\x9d\x3d\x67\xac\x05\x7b\x27\x34\x63\xdd\x0d\x74\x8c\x53\xd4\xde\x40\x07\x74\xd2\xd1\xc0\xb3\x70\xc7\xd2\x76\x89\xa9\x89\xbf\x1b\x38\xe8\x40\xff\x32\x61\x2c\x6a\xaf\x92\x36\xf1\xdf\x01\x6d\x77\x37\x70\xd3\x5e\x63\xd7\x8a\xbf\x03\x38\xec\x40\xff\x61\x97\x6c\xc3\x8e\x77\xf6\x9a\x0d\xdc\x05\xee\x76\x34\xf1\x91\x79\xed\x15\xfc\x26\xfe\x4e\xd8\x75\x07\xf2\xf7\x89\x1d\x9d\x77\x10\xb4\x69\xe2\xbf\x0b\x7c\xdb\xd1\xc4\xf3\xe0\x32\xf0\x82\xf6\x3a\x97\x5d\x75\x76\x0e\x5b\xb3\x30\xb8\x96\xba\x43\xfb\x76\xd5\xd5\x61\x76\x10\x39\xf1\x55\xfb\x66\xd1\x51\xe7\x8b\x9d\x6c\xda\xb7\xcf\x2e\x0a\xe3\xb8\x7d\x7f\x7e\xdd\x51\xe1\x53\x10\xb1\x2e\xaa\x5e\x75\xd4\x39\xdd\x25\x4e\xdc\xbe\xcf\x74\xd4\xf8\x1c\x24\x9d\x9d\xfd\x57\x47\x9d\xb7\xf6\xf9\xc6\x6e\x67\xf5\x1d\x35\x5e\x47\x3e\x4b\xa2\x76\xca\x5e\x76\xad\x94\xd0\x4e\x3b\x9a\xf9\xca\xab\xc8\x58\x78\xd5\xcc\x90\xdf\x92\x9a\x81\x23\x29\x3a\xcf\xd6\x8f\x26\x7b\x83\x24\x70\x45\xad\x88\x5f\x07\xdf\xa3\xf1\x38\x7a\x92\x3d\xc6\xc9\x32\x5a\x51\xed\xbf\xb4\x13\x26\xaf\x44\x9d\xfc\x10\x91\xc9\x0f\x27\x27\x4a\x58\xfa\x81\x04\x5c\xa5\x37\xfd\xe9\xd4\x19\xf9\xfe\xd4\x37\xd8\xc0\xb5\x8d\x81\xeb\x4d\x06\xd3\xc1\x6c\x3e\x9a\x4c\x1d\x6f\xe6\x8e\x27\x23\x87\x0d\xa7\x53\x77\x30\xf5\xf9\x9f\xe3\x3a\xde\x60\x60\x4e\x1d\xe6\xfa\x1a\x26\x31\xc7\x31\xf5\xdd\xf9\xd4\x77\x98\xcd\xbc\x91\xef\xb9\xc6\x6c\xe2\xfb\xbe\x3f\x9f\x0f\x67\x13\xd7\x31\x7c\xc3\x18\x4c\x7d\xc7\x1f\x3b\xe6\x74\x02\xff\x34\x4c\x6c\x68\xdb\x99\xb3\xe9\xd4\x9b\x8f\x7d\x63\x30\x1d\x4f\x0d\x67\xc8\xa6\x83\xf9\xcc\x9e\x4c\xec\x89\xc9\xd8\xc4\x76\x8c\x81\x3d\x99\x4e\x4c\xaf\xa8\x07\x36\x0f\x7b\xe2\x32\x36\x34\xfd\xe9\xcc\x19\x39\x03\xcf\x9f\xd9\xc3\x21\xa7\xdc\x77\xe6\xf6\x7c\xce\x86\xa6\x6d\xba\xbe\xe7\xf8\x9c\x8c\xa9\x6f\x18\xae\xed\x0c\xbc\xc9\xc4\x1e\x7a\x73\x5b\x50\xe6\x98\xe3\xf9\x60\xa6\x61\x61\xd6\xf0\x1d\x67\x64\x33\x67\xe8\x7a\x6c\xe8\xba\xcc\x71\xc7\x1e\x73\x1d\x36\xf2\x99\x37\xb7\xe1\x5d\x5c\x97\x8d\xbd\x99\xe3\xf9\x9e\x67\x33\xd7\x1f\xf0\x3f\x0d\x93\x1d\xaf\xed\x0c\xd9\xc0\xf5\x7c\xcf\xf5\x6c\xd7\x75\xbc\x31\x9b\xf9\x23\xd7\x66\x23\x36\xf1\xc7\xee\xdc\xf7\xfd\x81\xcd\x7c\x93\x0d\x5c\xf9\x4f\x83\x4b\xb9\x90\xc6\x46\x9c\xce\xe1\x74\xca\x9c\xd9\xc8\xb3\xfd\x91\x3d\x9f\x8d\x98\x3d\x14\x34\xf3\x56\x87\x43\x7b\x32\x9e\x0c\x66\xfe\x74\x66\x3a\xfe\x1c\xfe\x69\x70\x95\x17\xd2\x26\x13\x77\x60\x8f\x7d\x77\xe6\x4d\x06\x33\xcf\x36\x5c\x87\x4d\x67\xb6\x3b\xb4\x27\xde\x6c\x3c\xf2\x7d\x6f\x3e\xf0\xd9\xd8\x1d\xcd\x47\xce\x90\xff\x69\x98\xac\x79\xbd\x99\xe7\x0d\xdd\x29\xc7\xee\x0c\x1d\xe6\xd8\x9e\xed\x3b\x33\x63\x3a\x98\x19\x8e\xe9\x0d\x7d\xcf\x19\x4d\x06\xce\xd0\x63\x93\xb9\xef\xba\x1e\x1b\x7b\x73\xfe\xe7\xb8\x33\xc3\xf1\x44\xdf\xf8\x3e\xf3\x26\x7c\xec\x7d\x8e\x6f\xc4\xa6\x73\x7b\xea\x0f\x66\x6c\xe0\x32\x73\x3c\x1d\xcf\xa7\x13\x67\xea\x0c\xc6\x73\xdb\xe4\x1d\xe8\xce\x47\x73\xdb\x9f\xda\xb6\xe9\xfb\x73\xcf\x9e\xce\xdd\xe9\x78\xec\x3b\xb6\x63\xd8\x8e\x86\xc9\x96\x26\x68\x38\xc6\x64\x43\x19\xfd\x51\x18\x55\xd1\xb6\xef\x60\xc4\x96\xac\xb4\x30\x63\x72\xa9\xcc\xf4\x61\x19\xe7\xec\xcd\x9c\xe1\x64\xec\xc3\xdf\xd8\x76\x46\xb6\xab\x11\xcd\x9e\x4c\x4c\xd3\xf6\x7c\x77\x30\xf5\x66\x86\xeb\xb9\xa6\x61\xce\xc6\x53\xb3\x56\x24\x6a\xd5\x00\x66\xee\xd8\x34\x6c\x89\x76\xc2\x66\xee\xd0\x9d\x32\x9b\x49\xe4\x86\x39\x99\x8c\x59\x2b\x98\xc0\x76\x07\xb0\xe3\xcf\xcc\x81\x27\x9b\x56\x30\x0b\x02\x86\xe3\xf9\x74\xe6\xdf\x5b\x45\x6d\xa5\xb5\xe2\x78\x34\x34\x8c\xf1\xf7\xb6\x68\x18\x43\x77\x68\xdc\x5b\xfd\xee\xd6\x25\x12\x71\xae\x39\xc2\xe4\x9c\x6e\xc4\x25\xf2\xad\x23\x67\xfb\x33\xcf\x1d\x02\x4b\x99\x72\xee\x30\x75\x34\xa2\x4d\x9d\xe1\x60\x3e\xe2\x13\xdb\xf5\xed\x89\xe7\xd8\x86\x61\xcc\x66\xc3\x69\xad\x48\xd4\xaa\x03\x4c\x06\xf6\x6c\x28\xd0\xb2\xa9\x37\x62\x33\x6f\xee\x1b\xde\x50\x20\x37\x9d\x69\x17\x98\xc0\x76\x07\xf0\x7c\x3e\x35\x6c\x47\x34\xad\x62\x16\x04\x8c\x6d\x9b\x4d\xcc\x7b\xab\xa8\xad\xb4\x56\x1c\x19\x86\x31\x72\xbe\xb7\x45\xc3\x18\x8d\x4c\xe7\xde\xea\x77\xb7\x2e\x91\x14\x23\x77\x43\x37\xc8\xc1\xe4\xac\x7d\xe4\xd8\xdc\x1e\xba\x73\x39\x06\xa6\x37\x9d\xd8\x1a\xd1\x3c\xc3\x74\x67\x8e\x6f\x3a\x13\xcf\x76\x66\xcc\x9c\x4d\x46\x9e\xed\x0e\x26\xb5\x22\x51\xab\x06\xe0\x8e\x4d\x67\xea\x49\xb4\x1e\x33\x98\xcf\x59\xa7\x67\x08\xe4\x23\x6f\x3e\x18\x98\xad\x60\x02\xdb\x1d\xc0\x1e\x9b\x4e\x39\xf3\x85\xa6\x15\xcc\x82\x00\xbe\x99\x8d\xcc\x7b\xab\xa8\xad\xb4\x56\x9c\x31\xc3\x1c\x0f\xbe\xb7\xc5\xc1\x74\x32\x32\xe7\xf7\x56\xbf\xbb\x75\x89\xa4\x18\xb9\x2b\xba\x11\x39\x05\x5b\x47\x6e\x3e\x9f\xb1\x7c\xcd\xf9\xa6\x3d\x1c\xc1\x92\x67\x43\x77\x3e\x77\x06\xb6\xe3\x0d\x7c\xcf\x99\x4d\x86\x6c\x32\x31\x0d\xb3\x5e\x24\x6a\xd5\x00\x46\x83\xe9\x6c\x26\xd0\x7a\x33\xcf\x66\x8e\xcf\x98\xe1\x4c\x04\x72\x67\x38\x9e\x19\x93\x76\x30\x81\xad\x1b\x78\x66\x4c\x87\xb6\x2b\x9a\xae\x60\x16\x04\x18\xb3\x81\x39\xba\xbf\x8a\xda\x4a\x5b\xc5\x81\xc7\x17\xcd\xf7\xb6\x38\xf5\x87\x8e\x31\xbb\xbf\xfa\x9d\xad\x4b\x24\xc5\xc8\x5d\xd3\x0d\x7a\x81\xc9\xfb\x8e\x35\xe7\xcf\xec\x89\x1c\x83\xc9\xd4\x9e\xbb\x3e\x9f\xb0\xb6\x61\x0c\x0c\x7f\x64\x8f\x67\x83\xf9\x80\x0b\x2d\xc6\x78\x6a\x3a\x46\xad\x48\xd4\xaa\x01\x38\x03\x73\x36\x70\x24\x5a\xcf\x73\xdc\xa9\x67\xb2\xb1\x6f\x08\xe4\x03\x73\x32\x81\xad\xb4\x09\x26\x39\x49\x37\xb0\x37\x99\x18\x23\x4f\x36\xad\x60\x16\x04\x8c\x86\xf3\xa1\x3b\xbc\xb7\x8a\xda\x4a\x6b\xc5\xc9\xd4\x30\x4c\xff\x7b\x5b\x34\xc6\x43\x63\x62\xde\x5b\xfd\xee\xd6\x25\x92\x62\xe4\x3e\xd1\x0d\x7a\x8f\xc9\xe9\x9d\x23\xe7\x0b\xb9\x13\x24\xb8\xea\xf0\x38\x36\xff\x1b\x19\xfc\xaf\x3e\x72\xf0\xaf\x06\xd0\x1c\x12\x66\xf0\x3f\x81\x7c\xe4\xf1\xbf\xf6\x91\x83\x7f\x77\x00\x37\x3b\x42\x00\x0b\x02\x66\x53\xfe\x77\x6f\x15\xb5\x95\xd6\x8a\x77\x77\x7d\x57\x45\xd3\xe6\x7f\xf7\x8f\xdc\x9d\xad\x4b\x24\xc5\xc8\xbd\xa5\x1b\x74\x8a\xc9\x87\xf6\x91\xe3\xb2\xf5\x78\x0e\x23\xe0\xcf\x4d\xc7\xf7\xf8\x36\xeb\x4d\xcd\x39\x57\x2e\xf8\xe6\x69\x3b\xde\x9c\xcd\x07\xee\xd4\x71\x26\xb5\x22\x51\xab\x01\x30\xe4\x9a\x90\x40\xcb\x98\x31\x37\x98\xe1\x0f\xfd\x99\x40\x3e\x1a\x4f\xc7\xce\xa8\x15\x4c\x60\xbb\x0b\x78\x34\xf1\x46\x43\xd9\xb4\x82\x59\x10\x30\x1d\xd9\x9e\x67\xde\x5b\x45\x6d\xa5\xb5\xa2\x3d\x36\x8c\xc1\xe4\x7b\x5b\x1c\x9a\xc3\xc9\x7c\x7c\x6f\xf5\xbb\x5b\x97\x48\x8a\x91\x7b\x4a\x37\xe8\x03\x26\xcf\xbf\x65\xe4\x5c\x7f\x62\xd4\x47\x6e\xe2\xcd\x27\xb6\x69\xcf\x27\x23\xb3\x7d\xe4\xea\x00\xd5\x21\x99\x71\x02\xfd\x99\x23\x90\x9b\xf6\x7c\x36\x36\x5a\xc1\x04\xb6\xbb\x80\x6b\x1d\x91\x63\x16\x04\x4c\x26\x8e\x37\x19\xde\x5b\x45\x6d\xa5\xb5\xe2\x5d\x5d\xdf\xdd\xa2\x61\x4c\x84\x68\x7a\x77\xf5\xbb\x5b\x97\x48\x8a\x91\xbb\xa0\x1b\xf4\x1c\x93\x8f\xdf\x30\x72\x73\x6f\x3c\x1f\x35\xd7\x9c\x67\x8f\x06\xce\x6c\xe8\xd8\x5d\x6b\xae\x02\x30\x1e\xb2\x91\xaf\x0e\x09\x17\xa5\xe6\x33\x81\x7c\x38\x98\xcd\x1c\xaf\x15\x4c\xce\xc7\x3b\x80\x1b\x1d\x21\x80\x05\x01\x42\x3d\xbf\xb7\x8a\xda\x4a\x6b\xc5\x39\x33\xcc\xd1\xe0\x7b\x5b\x1c\xb3\x91\x6f\x0f\xee\xad\x7e\x77\xeb\x12\x49\x31\x72\x7f\xd2\x0d\xfa\x88\xc9\x4f\x1d\xfb\x1c\xd7\x0d\xe7\xf3\xb9\x37\x73\xe7\x03\xd7\x1e\x8c\xb9\x84\xc2\x3c\x7f\xe6\x3b\xce\x80\x0d\xd8\x00\x50\x8f\x06\xc3\x99\x33\x1a\xb7\x17\x41\x2d\xc3\x98\x78\x03\xb7\x00\x70\x5d\xe6\xb2\x89\x40\xfb\x5d\x60\x23\xd3\x66\xd3\x89\x68\x8e\xab\xb4\x03\x3e\x93\xfc\xa9\xef\xfa\x9e\x20\xf5\x3f\x50\x85\x93\x54\xd7\xa5\xde\xd1\x0d\xfa\x09\x93\xd7\x1d\xbd\x66\x30\xd7\x1f\xcd\x99\xe3\x7a\xf6\x6c\x36\x9e\xd8\xd3\xb2\x6b\xc0\x1c\xc5\x5b\x72\x27\xb3\xd9\xc8\x9c\x7b\x1d\x45\xbc\xd6\xcc\x34\xfc\x69\xd9\x1d\x8e\xef\x0d\xd9\x44\xa2\xfd\x2e\x30\x77\xe2\x38\xa6\x68\x6e\xc2\x0c\x73\xe2\x94\x5d\x00\xa4\xfe\xe3\x55\x04\x49\x23\x90\xa4\xcb\x5e\x7b\x43\x37\xe8\x35\x26\x3f\x77\xf5\x9a\x3f\xf4\x1c\x7b\xe6\x79\xce\x78\x34\xb4\x07\x2e\x5f\xe9\xbe\xe1\xcf\xd9\xcc\xb1\xd9\xc8\x71\xa7\x8e\xeb\xba\x9c\x09\xb8\x0e\x6b\x2d\x12\xb5\x8c\xd9\x64\x06\xd2\xa4\x00\x10\xe6\x2d\x81\xf6\xfb\xc0\x98\x33\xf4\x86\xa2\x39\x63\x36\x9e\xcd\x59\xde\x05\x86\x20\xf5\x3f\x50\x85\x93\x64\xcc\x46\xc6\x4c\x91\x44\xff\xa6\x1b\xf4\x33\x26\xbf\x75\xf0\x56\xc6\x66\xee\xcc\xf7\x1c\x67\x36\x62\xc3\x91\x3d\x1c\xf2\x26\x99\x6f\x78\x73\xdf\x73\xdd\x99\x2d\xd8\x1f\x67\xf3\xa6\xdf\x5a\x24\x6a\x39\x43\xc3\x30\x0c\x05\xc0\x1b\xcd\x99\x40\xfb\x7d\x60\xfe\x64\x3c\x9a\x89\xe6\xe6\xf3\x1c\xd8\xf7\xa7\xcc\xcd\x49\xfd\x87\xab\x08\x92\xa6\x3e\x54\x2c\x7a\xed\x19\xdd\xa0\xdf\x30\x79\xd5\x31\xd7\x5c\x36\xf0\x0d\x7b\xe2\x78\x9e\x63\xba\x73\x03\xe4\x77\x7f\xc2\x15\x73\xc7\x73\xe7\xcc\x14\x4a\x90\x31\x98\x99\x33\xbb\xb5\x48\xd4\x32\xcc\x89\x3b\x2e\xeb\x7a\x86\x67\xb2\x89\x40\xfb\x5d\x60\xc3\xc9\xdc\x70\x0d\xd1\x9c\x61\x4e\x46\xe3\xbc\x0b\x7c\x47\x90\xfa\x9f\xa8\xe2\x8e\xe7\x86\x39\x9a\x0c\x27\x65\xaf\x7d\xa6\x1b\xf4\x0a\x93\x87\x9d\xbd\x36\xf5\x07\x02\x63\xb9\x0c\x4d\xc6\xfc\x89\xe8\x9a\xe9\x08\x7a\x6d\x3c\x35\x40\x1d\x6d\x16\xc9\x79\x3e\xe2\x4b\xa0\x00\x50\x09\xfd\x2e\x30\xf9\x3e\xd0\x9c\x31\x1c\x31\xb0\x36\x16\x5d\x30\xf5\x07\xff\x7c\x15\x20\xc9\x18\x0c\x67\x63\x45\xcb\xff\x8b\x6e\xd0\x43\x4c\xbe\x74\xf4\xda\x94\x99\xcc\x77\xe7\xf3\x91\x3b\xf5\x3c\xd3\x9d\x4e\xcb\x57\x9a\x3a\x63\x6f\xe6\xf9\x93\xb1\x63\xb8\xcc\x1c\x8c\x27\xad\x45\xa2\xd6\x7c\x66\x18\xa3\x61\x09\x30\x72\xe6\x9e\x2d\xd1\x7e\x0f\x98\xf0\xc6\x88\xe6\xe6\xa6\x61\x0c\x7d\xc1\xa4\x46\xfe\x5c\x90\xfa\xcf\x57\x01\x92\x84\x8e\x57\xf6\xda\x4b\xba\x41\x5f\x30\xf9\xda\xc1\xd7\x3c\x66\x78\x9e\x6f\xcf\x7d\x67\xec\x8e\x4d\x47\x2c\x43\xc6\x1c\x36\xf0\x1d\x67\xe4\xcc\xfd\xe9\x64\x66\x9b\x36\x33\xcc\x29\x6b\x2d\x12\xb5\xa6\xb6\x61\x8a\x1e\x17\x00\xae\x3b\x76\x0d\x81\xf6\xbb\xc0\x3c\x6f\x38\x9a\x4f\x45\x73\x25\x30\x9f\x38\x43\x49\xea\x7f\xa6\xca\x68\x6e\x18\x13\x45\xbb\xfd\x95\x6e\xd0\x57\x4c\x7e\xe9\x98\x6b\x9e\x3f\x73\xcc\xa9\xef\x7a\x8e\x33\x70\xa7\xbe\x33\x13\x4d\xfa\xae\x6b\x9b\x9e\xed\x70\x29\x66\xe2\x8e\x06\x83\x31\xb3\x3b\x8a\xa0\xd6\x60\x3c\x1c\x81\x94\x2e\x00\xdc\x29\x9b\x3b\x23\x81\xf6\xbb\xc0\x4c\x6f\x6e\xba\x86\x68\xce\x70\x07\xee\x2c\x07\xf6\xe6\x82\xd4\x7f\xbc\x8a\x20\xc9\x98\x99\x9e\xba\x42\xff\x45\x37\xe8\x17\x4c\x7e\xef\x98\x6b\x53\xdf\x75\xe6\xb6\xe7\x79\x33\x36\x34\xed\xe1\x58\x79\xa5\x01\x17\x0d\xa7\x33\x77\x32\x9d\x0f\x86\xb3\x91\x58\x59\x8d\x22\x51\xab\x50\xad\x04\x80\x37\xf7\x0d\x7b\x28\xd0\x7e\x17\xd8\xc8\xb4\x9d\xb1\x27\x9a\x33\x8c\xb1\x3d\x1c\x48\x60\x36\x16\xa4\xfe\x07\xaa\x4c\x84\xc7\x60\x3c\x50\xec\xce\x7f\xd0\x0d\xfa\x1d\x13\xc6\x3a\xba\x8d\x6f\x89\xae\xcf\xdc\xd1\xc8\x07\x77\x2f\xcb\x47\x0a\x7c\xac\x33\xe6\xb3\xf9\x7c\x30\x77\xdd\x91\x6b\x0c\x5a\x8b\x44\xad\xf9\x7c\x38\x32\x46\x0a\x00\x1b\xce\x4d\x81\xf6\xbb\xc0\x98\x3b\x35\xcc\x91\x68\x6e\xe6\x0e\xbc\x02\x98\x8d\x73\x52\xff\xe1\x2a\x82\xa4\xc9\x64\x30\x36\x94\x4d\x34\x63\x74\x83\x18\xc3\x24\xe9\xec\x38\xe6\xd9\x86\xcf\x9c\xc1\xc8\xf5\x8d\xa1\x33\x90\x5b\xb7\xef\x0c\x7c\xc6\x79\x82\xef\xcd\xbc\xa1\x2b\x5c\xde\xad\x45\xa2\x96\xe3\x71\x0d\x5e\x01\xf0\xe6\xd3\x89\x44\xfb\x5d\x60\xee\x88\x0d\x6c\xd1\x9c\x63\x2a\xc0\xae\x9b\x93\xfa\x4f\x57\x01\x92\x66\x06\x54\x2c\x3a\x2e\xe2\x1d\x97\x30\x4c\x82\x8e\x8e\xf3\x18\x73\xfc\xe9\x9c\xb9\x36\x33\x87\x60\x2b\xe4\x5a\x8f\xef\x0f\x7d\xdf\xf1\xbc\x29\x9b\x4e\x1c\x9b\x79\x93\x81\x39\x35\x9d\x71\x6b\x91\xa8\x65\xcc\xc6\xe6\xdc\x2d\x00\xdc\x89\xe7\x30\x5f\xa0\xfd\x2e\xb0\xd1\x60\x3e\x70\x65\x73\xc6\x6c\x24\x0c\x1b\x5c\x96\xf0\x7d\x41\xea\x7f\xa0\x0a\x27\xc9\x98\x0d\x8d\x89\xa2\x58\xc5\xbc\xe3\x02\x86\x89\xdd\xd1\x71\x5c\xd3\x65\x86\x6d\x7a\xf3\xb9\x53\x70\x38\xce\x4e\xd9\x1c\x14\xa8\xe1\x74\xe4\x8e\x72\x95\xb7\xb5\xa8\x60\x5d\xa5\x82\xce\xe6\x9c\x15\xbb\x12\xed\x77\x81\x15\xbc\x47\x28\xe5\x92\x5d\x71\x45\x69\x2c\x48\xfd\x0f\x54\x69\xd3\xe3\x53\xde\x71\x36\xc3\x24\xec\x5a\xaa\x06\xff\x73\x3c\xfe\x37\x19\xf2\x3f\xd1\xea\xd4\x9f\x8a\xb8\x8f\xf9\x84\xff\x8d\x07\xfc\xaf\xb5\x48\xd4\x82\xf2\x71\x01\x20\xe3\x2f\x00\xed\x77\x81\x4d\x87\xfc\x4f\x34\x57\x02\x8b\x7f\x40\xea\x7f\xa8\x8a\x61\x54\xd5\xab\x1d\xef\xb8\x90\x61\xe2\x76\xcd\x38\x9f\x79\xfe\xd8\x71\x1d\xcf\x73\xa7\xe3\x89\xe3\x98\xbc\xd5\x81\x6f\xf8\x53\xd7\x71\xe7\x6c\x30\x67\x73\xdb\x9d\x4d\xec\xb1\x69\x0f\x5b\x8b\x44\x2d\xf0\xc3\xf9\x05\x80\x67\x7b\x36\x73\x04\xda\xef\x02\x9b\x19\x53\xcf\xb1\x45\x73\x23\xdb\x1c\xcd\x80\x61\xb9\xbe\xe3\x7b\x82\xd4\x7f\xbc\x8a\x20\x69\xe8\x1b\xc6\xd4\x2b\x3b\xce\xe3\x1d\xe7\x32\x4c\xd6\x5d\x33\x8e\x31\xc3\x1b\xf8\xee\x7c\x30\x1d\x78\x6c\xe0\x09\xce\xca\xd8\xd8\x9b\xfb\xae\xcd\xe6\xa6\xef\x4c\xec\x91\xed\x3a\xe6\xcc\xf4\x5a\x8b\x44\x2d\x7b\x6c\xf8\xe6\x58\x01\x70\x1c\xdb\x14\x68\xbf\x0b\x8c\xf9\x43\x67\xe0\x8a\xe6\x40\x3b\xf7\xc4\xf4\x19\xfb\x46\x4e\xea\x3f\x5c\x45\x90\xc4\xd5\x05\x43\xe9\x38\x9f\x77\xdc\x9a\x61\xb2\xed\xee\xb8\x89\xcb\xc0\x12\xea\xb0\xc9\x78\x6c\xc8\xde\xf1\x3c\xe6\x7b\x0e\x9b\x8d\xc5\x36\xe4\xcd\x47\x53\x70\x73\x37\x8b\x44\x2d\x7b\x32\x9c\x18\x43\x05\xc0\x33\xec\x81\x40\xfb\x5d\x60\xbe\x39\x99\x9b\x43\x6f\x3e\x9a\x19\xa6\x2a\x5b\x8c\xc1\x07\x0d\xa4\xfe\xc3\x55\x04\x49\x53\x7f\x30\x35\x46\x65\xc7\x6d\x78\xc7\x6d\x19\x26\x97\xac\x2d\xcf\x2e\x2b\x0e\x20\x23\x83\xe4\xc7\x98\x91\x49\x18\xc6\x44\x4b\xce\x1d\xa4\x9d\xb4\x01\x0c\xc6\x63\xa2\xa4\xa3\xe9\x8d\xfa\xe3\x51\x8f\xfd\x80\x86\xe3\xfe\x10\xbe\x0c\x86\x33\xb3\x3f\x1d\xf2\xaf\x93\x91\x31\xe8\x4f\xf9\xb7\xa9\x31\x18\xf5\xa7\x83\xde\x60\x6a\x1a\xfd\xf1\xf4\x07\x86\xc5\xbf\x13\x8d\x3c\xf8\xa6\x76\x86\x83\xfe\x68\x7e\xc2\x7e\x40\xe6\xd4\xe8\x4f\x87\xfc\xdb\x78\xd0\x9f\x0d\x38\x72\x73\x68\xf6\x47\x13\xf8\x36\x9d\xf4\xc7\xb3\xde\x64\xda\x1f\xfe\x1b\x6d\xcc\xcc\xfe\x60\xc4\x31\x8f\x46\x83\xfe\x10\x10\x0e\x46\xb3\x41\x7f\x24\x5e\xc6\x9c\x4c\xfb\x03\x78\xc5\xc9\xc4\x1c\xf5\xe7\xa3\xde\x60\x34\x1d\xf7\x27\x6a\x4b\x58\x3b\x90\x73\x46\x13\x34\xc5\xc4\xe1\x9f\x73\x7c\xe4\xc6\x51\x9a\x3d\xb8\x91\xfd\xfd\xe1\xf5\x23\x73\x66\x90\x33\x46\xcd\x99\xf1\x48\x3e\x12\x17\x49\x32\x6a\xf6\xa7\xb3\xc1\x74\x4a\x5e\x30\xda\xeb\x0f\xe6\x83\xc1\x94\x5c\xf3\xaf\x73\x63\x32\x9a\x93\xf7\x1c\x60\x3e\x1d\xcc\x47\xe4\x13\xa3\xef\xd9\x0f\xd7\x8c\x9c\xc2\x97\x2b\x46\xde\x32\x7a\xc5\x7e\x78\xc1\x7a\x0f\x7a\x7d\xce\xb2\xcc\x1f\xae\x59\x79\x1a\xf2\x43\x9e\x7f\x9b\x3d\xc8\xd3\x69\xc4\xfe\x83\xe7\xc5\xe1\x7e\xbe\xb0\x9e\x33\xc4\xfa\x6b\xc2\xfa\x29\x61\xfd\x90\xb0\x7e\xbc\xb5\xdd\x20\xbb\xc1\x47\x95\x4a\x0e\xeb\x3b\xfb\x3d\xca\xf3\xeb\x22\x87\xf5\xcf\x31\x62\x38\xcf\x25\xc8\xfa\xc9\xa3\xff\x97\xb6\x77\xed\x8e\xdb\xc6\xd2\x46\xbf\xeb\x57\x94\x6b\x65\x29\xa4\x45\xb3\x71\xbf\x54\x37\xa3\xd7\xed\x78\x66\x72\x4e\x6e\x2b\x72\xf7\x99\x39\x1a\x2d\x07\x97\x0d\xa9\x3a\x25\x52\x4d\x52\x76\xdc\x52\xfd\xf7\x77\x01\x24\xab\x58\x92\x6c\x27\x3d\x3d\x5f\x9e\x22\x89\xdb\xc6\xc6\xc6\xbe\x80\x2c\x20\x32\xb6\xad\xa0\xbc\x4c\x57\x75\x05\xa5\x4d\x57\xeb\x2a\xfb\x0e\x9e\xd7\x27\x67\xf0\xbc\x7f\xf1\x06\x9e\xb7\xf9\x1f\xb2\xef\xe0\xe4\x0c\x5e\xbc\x49\x3b\x4d\xd4\x2f\xd6\x85\xa9\xb2\x1f\xe0\x79\xd6\xbe\x58\xe7\x2f\x5e\xc3\xf3\x26\xff\xc3\xaf\x50\x74\x03\xf3\xba\xbf\xb7\x7d\x66\x9e\x9b\x93\x26\x3e\x8f\xf9\xd6\xcf\x33\xfc\x62\x9d\xe7\xc5\xa6\xea\x4e\x53\x1e\xd3\x9b\x9a\x64\xa6\x68\xf2\xe7\x6f\xe1\x05\x26\x68\xf5\xbd\xf9\xfe\xe8\xb0\x9f\x9b\x3f\xa1\xd3\xcd\x09\x15\x68\xb5\x29\xba\x62\x3d\xeb\xeb\xec\x4c\x44\xd8\x6f\x8d\x30\x96\xc6\x55\x55\x99\xf6\xf2\x76\xf8\xb7\xed\xf0\x3d\xe3\x69\x62\xed\x6a\x62\xe0\x50\x22\xfd\x2d\xbc\x3e\xc5\xab\x7a\x56\xe1\xab\x59\x85\xfd\xd5\xba\x2b\xaf\xaa\x13\x28\xd2\x55\x57\x9d\xf4\xc3\xd5\xa6\x3a\x69\x87\xab\x91\xa2\xea\xa4\xde\x8e\x9c\xbe\x84\xd2\xe4\xd9\x2b\x28\x5e\x4e\xe7\xd0\xc7\x47\x36\x8f\x43\x60\x8a\x3b\x9b\xfe\xc1\x7a\xb0\x2d\xc7\x6c\xb2\x8f\x1b\x67\x9e\x5a\x28\xdd\x2a\x31\xea\xa6\x79\x1f\x4b\xba\x02\xa2\x07\x9e\xc8\x1f\xc8\x1a\x69\x1a\x09\x7a\x0e\x07\xf4\xe4\xdb\xc2\x9b\xf6\x97\xdf\xd0\x8c\x3f\x68\xc6\xff\xee\x66\xda\x4b\xfb\x78\xb7\x9e\x75\xf7\xbd\xf9\x7e\xac\x20\x3f\x45\xab\xf1\xf2\x04\x13\x94\x3f\xff\x00\x45\x5f\x9d\x0c\xf5\x15\xed\x3c\x6f\x17\xf3\x0e\x57\xcf\xfb\x28\x32\xe9\xfb\xea\x44\x9f\x6b\xba\x2c\x86\x1e\xa3\x84\xad\x63\x7f\xe6\xe2\x12\xe5\x3d\x6a\x8a\xe7\x59\x7f\xd2\x3e\xcf\xa6\xd9\x55\x9f\xbc\x87\xe7\x51\xf0\xf6\x49\xaf\xa3\x68\xff\xfa\xf0\xe9\x0f\xf0\xbc\xce\xf3\x07\x9d\x9b\xbe\x0b\xff\x25\xea\x08\x35\xdb\xb4\xf1\x27\x78\x62\x8f\x8e\x45\x9f\xb5\xf9\xdd\xfc\xff\xe7\x45\xbd\xdb\x4e\x3b\xcb\xfa\xea\x25\x64\x7d\x9e\x97\x57\x45\x56\xc7\xeb\x3a\x5e\xc7\xf9\x34\x4a\xc9\x2f\x49\x70\xfa\xb2\x2b\xea\xb2\xcb\x0b\xf3\xf0\xf9\xa6\xa8\xcb\xcd\x7e\x77\xca\xdd\xf3\x91\xdc\xa2\xde\xab\x82\x8f\x6f\x28\xd2\x97\x57\xd5\x3a\x72\xb2\x2f\xbb\xaa\x19\x2e\x36\x95\xc9\x76\x42\x00\x45\x9b\x8e\x8e\x98\x04\x3b\xb1\xbd\x3f\x59\x2e\xb7\xd3\x4e\x89\x6d\x14\xfe\xba\xbc\x34\xd7\xd7\xa6\xea\x8b\x7a\x9b\xe1\x7c\xfb\x13\x44\x7a\xdc\xc0\xaf\xbf\x41\x35\xdc\x9b\xbc\xf8\x1a\xaa\xbf\x41\xf6\x12\x32\x8a\x50\x51\xf2\x02\xe5\xc5\x4b\xc8\x5e\x10\x96\xee\x70\x9e\x17\xdf\x4f\x39\x5e\xe0\x98\x45\xf2\xa2\xa4\x3c\xe5\x52\xa8\xc0\x25\x2f\x4a\x95\xe7\xc5\x37\x53\x2e\x22\x3e\x9e\xe9\x5b\x88\x8c\xcd\x8b\x7f\x3b\xb4\xa5\x19\xfc\x09\xdd\xdf\xc3\x57\x38\x3f\x3e\xce\xe0\xc5\x20\x43\x61\xd3\x34\xed\x4c\x23\x0e\x6a\xc9\x76\x19\xbc\x28\xf9\x8e\x85\xdf\x42\x79\x55\x51\x81\x9e\x43\xa2\xee\x5b\x28\xbb\x0a\x97\xfc\x05\x2e\xf9\xf3\x3e\xde\x6e\xaa\x52\xbd\x28\x75\xba\x89\x5c\x2a\xfe\x31\xd7\xb9\x21\xcf\xf2\xe2\x2f\x7b\xa3\x42\x8b\x3f\x43\x45\x9e\xef\x6f\xff\xe3\x89\x4d\xe0\x77\x7b\xf5\x55\x59\xc9\x5f\x40\x3e\x65\x2f\xfe\x01\x65\x5b\x0d\x32\x3b\x9f\x07\xf9\xf3\x3e\x26\x5d\x3e\x4e\x3a\xf9\xcb\x2e\xd5\x3e\x91\xfa\xe7\x29\x35\x11\xfe\xd7\xff\x45\x07\x84\xb2\x52\xe0\xe4\x18\x60\x49\x4a\x9a\x4c\x35\x46\x52\xd3\x92\x27\x0b\x4e\x29\x45\xa8\xc4\xc9\x51\xa0\x8a\x6a\x56\x32\xfd\x02\x33\x45\x78\x89\xf8\xef\xf7\x11\x08\x2d\x69\x6a\x8e\x73\x59\xd2\xe4\x87\x60\x42\xf8\xd8\x30\xe5\x92\x95\x5a\x8c\x34\xd0\x52\xca\x13\x89\x64\xc9\xc5\x3f\xd1\x90\x2c\x49\xac\x9d\x12\x8c\x4b\x9c\x6a\xe4\x94\xc8\x52\x27\x7f\x8a\x48\x85\x07\x6f\x8b\x70\xa1\x4b\xac\x5e\x08\x45\x55\x29\xc4\xa1\x2f\xb2\xd7\x2b\x5f\x1c\xec\xb7\x37\x98\xae\x47\x93\xb9\x9d\x6d\x25\xfe\x14\x89\xfd\x0b\x5c\xcc\x24\xbc\x7d\xde\xe7\x79\x7e\x31\xec\xc8\xf7\x77\xa8\xbe\x80\xac\xce\x96\x8c\x21\xcc\x19\x63\x88\x70\xc1\x38\x62\x5c\x32\x8e\x38\xd7\x4c\x20\xc9\x0d\x13\x48\x71\xc7\x04\x32\xdc\x33\x81\x2c\x07\x26\x91\x17\x88\x49\x04\x02\x33\x89\x91\xa0\x4c\x62\x2c\x18\x93\x98\x0a\xce\x14\x66\x42\x32\x85\x85\x50\x4c\x61\x29\x34\x53\x58\x09\xc3\x14\x36\xc2\x31\x85\xad\xf0\x4c\x61\x27\x80\x29\xec\x45\x60\x0a\x07\x89\x98\x22\x48\xc6\x41\xc6\x92\x32\x45\xa8\x64\x4c\x45\x67\x2d\x0e\xbb\x14\x4c\x11\x21\x25\x53\x44\x49\xc5\x14\xd1\x52\x33\x49\x8c\x34\x4c\x12\x97\xd0\x4b\xcb\x24\x01\xe9\x98\x24\x41\x7a\x26\x28\x92\xc0\x04\x25\x09\xa9\x0c\x4c\x50\xa6\x10\xe3\x94\x2b\xcc\x38\x95\x09\x95\x22\x8c\x51\xad\x28\x63\xd4\x24\xb4\x8a\x31\x4a\x7d\x42\x50\x9c\x11\x1a\x22\x32\xa4\x04\x23\x0c\x2b\xc1\x30\x23\x4a\x32\xcc\x98\x92\x0c\x31\xae\x14\x43\x4c\x28\x45\x03\x93\x09\x95\xd2\x14\x98\x4e\x68\x12\x3a\x65\xa8\x67\x3e\x21\x28\x43\x1d\x0b\x11\x39\x52\x96\x5a\x8e\x13\x12\x65\xa9\xe1\x34\x21\x53\x8e\x6a\xce\x13\x0a\xe5\xa8\xe2\x2a\xa1\x56\x8e\x4a\x6e\x12\x5a\xe5\xa9\xe0\x2e\x61\x0c\x2e\x38\x87\x84\x41\x79\x1a\x07\x2c\x22\x56\x9e\x52\x41\x12\x52\xe5\x29\x11\x4c\x01\x25\x82\x2b\xa0\x71\x70\x22\xca\x84\x4a\x01\x45\x42\x27\x34\x0a\x48\x10\x36\xa1\x53\x40\x40\xf8\x84\x90\x30\x28\x20\x5e\xa2\x84\x58\x01\x71\x23\xa6\xbf\x9f\x48\xaa\x80\x58\xc9\x12\x72\x05\xc4\x48\x91\x50\x26\x54\x0a\xe2\xc8\x25\x34\x09\x63\x2b\x4a\xba\x84\xb1\x15\x29\x21\x61\x6c\x45\xaa\xd8\x8a\x50\x38\x21\xd9\x21\x57\x34\x21\x4b\x18\x5b\x61\x4a\x24\x8c\xad\x50\xa5\x12\xea\x84\x46\x79\x42\x94\x4d\xe8\x12\x7a\xe5\x09\x56\x90\x30\x44\xd4\x28\x61\x8c\xe1\x90\x26\x33\xa4\xca\xe1\xa0\x59\x42\xae\x2c\x0e\x5a\x24\x94\x09\x55\x42\xad\x0c\x0e\xda\x28\x83\x41\xdb\x84\x4e\x69\x0c\xda\x2b\x8d\x83\x86\x84\x41\x29\x1c\x0c\x4a\x88\x47\x94\x38\x18\xa2\x24\x41\x86\x2a\x41\x90\x61\x4a\x10\x6c\xb8\xe2\x04\x1b\xa1\x38\x89\xcc\x8a\xa8\x14\x23\xd4\x68\x45\x09\x33\x46\x51\xc2\x8d\x55\x84\x70\xe3\x14\x21\xc2\x78\x85\x89\x4c\xa8\x0c\x28\x44\xb4\x09\x32\x10\x63\x91\x0c\xc4\x59\x2c\x81\x78\x4b\xa4\x27\x60\xa9\x74\x24\x58\x26\x1d\xc5\x96\x4b\x4b\x89\x15\xd2\x50\x66\x85\xd4\x94\x5b\x29\x35\x95\x56\x49\x45\x95\xd5\x52\x52\x63\x8d\x14\xd4\x5a\x2b\x39\xf5\xd6\x49\x46\x83\x75\x92\x32\x64\xbd\x24\x8c\x58\x90\x98\x31\x1b\xe7\xac\x70\x28\xce\x5f\x87\x05\x30\xe3\xb0\xf0\xcc\x39\x22\x1c\x03\x47\x85\xe5\xc8\x31\x61\x38\x71\x5c\x68\xce\x1c\x17\x8a\x0b\x27\x84\xe4\xca\x49\xc1\x63\x27\x04\xe3\xce\x29\x41\x39\x38\x2d\x88\x40\xce\x08\x24\xa8\xb3\x3c\x08\xee\x2c\x07\x21\x9d\xe3\x4e\x68\xe7\xb9\x15\xce\x79\x6e\x04\x38\xe0\x4a\x22\x17\xb8\x94\xd4\x23\x2e\x24\xf7\x88\x33\x29\x3d\xe6\x54\x1a\x8f\x39\x96\xce\x13\x8e\x64\xf0\x94\x81\xc2\x9e\x32\xaf\x98\x67\xcc\x2a\xe1\x79\x9c\x97\x9e\x33\xa5\xac\x17\x4c\x28\xf0\x82\x71\x8d\xbc\x64\x54\x53\x2f\x19\xd6\xdc\x2b\x86\xb4\xf2\x8a\x82\xb6\x5e\x53\xa7\xbd\xd7\xd4\x1a\xe4\x0d\xd5\x86\x78\x43\xa5\xe1\xde\x52\x61\x94\xb7\x94\x19\xe3\x1d\x25\xc6\x7b\x47\x91\x45\xde\x93\x60\x89\xf7\xc4\x5b\xee\x81\x58\xab\x3c\x10\x6d\x8d\x07\xa2\xac\xf7\x81\x08\x87\x7c\x20\xdc\x11\x1f\x08\x75\x1c\x10\xc1\x4e\x01\x22\xc8\x19\xc0\x38\x38\x0f\x18\x7b\x8f\x00\x63\xe7\x09\x10\x6c\x3d\x07\x82\x4d\x9c\x1a\x58\x7b\x03\x14\x6b\xef\x81\x62\xe5\x43\x44\x20\xc0\xb0\x02\x0e\x0c\x6b\x90\x09\x0d\x70\x6c\x22\x93\xb0\x85\x00\x1c\xbb\x80\x81\x63\x1f\x18\x08\x0c\x41\x80\x20\x28\x28\x10\x04\x07\x0b\x92\xd0\xe0\x41\x12\xbe\xcc\xf3\xe2\xff\x9b\x8c\x41\x5a\x3d\x64\x08\x23\x84\x38\xc2\x08\x23\x91\x50\x21\x82\x30\xd2\x88\x20\x82\x6c\x42\x8f\x28\xa2\x28\x44\xc4\x04\x31\xc4\x30\x43\x1c\x31\x2c\x90\x40\x1c\xab\x84\x06\x49\x24\xb0\x43\x0a\x49\x0c\x48\x23\x49\x10\x32\x48\x91\x58\x87\x26\x0c\x39\xa4\x89\x40\x1e\x19\xa2\x11\x20\x4b\x2c\x46\xc8\x12\x8f\x31\x72\x24\x60\x82\x3c\xc5\x98\x22\x4f\x63\xdd\x40\x05\xe6\x08\xa8\xc2\x02\x05\x6a\xb1\x42\x81\x7a\xac\x31\xa2\x01\x1b\x8c\x18\xc1\x0e\x23\xc6\xb0\xc7\xd1\x28\x01\xc6\x4c\x13\x84\x31\xb3\x04\x63\xcc\x80\x10\x8c\x39\x22\x0c\x13\x4e\x09\xc7\x84\x73\x22\x31\xe1\x8a\x68\x8c\xb9\x21\x06\x63\xee\x88\xc3\x98\x87\xd8\xbe\xc0\x24\x60\x2c\x28\xc5\x18\x0b\x4e\x29\x46\x42\x52\x86\x91\xd0\x54\x60\x24\x2c\x55\x18\x09\x47\x35\x0a\x02\xa8\x45\x41\x22\xea\x51\x90\x98\x06\x14\x24\x61\x08\x05\xc9\x18\x41\x41\x72\xc6\x50\x90\x82\x71\x8c\xa4\x8c\xc6\x52\x2a\xa6\x13\x9a\xe8\xf3\x30\x87\xb1\x34\x0c\x30\x96\x96\x05\x4c\xa4\xe5\x18\x13\xe9\x38\xc1\x54\x3a\xce\x30\x95\x9e\x47\x2b\xeb\xb9\xc4\x5c\x02\xd7\x09\x0d\x16\x12\xb8\xc3\x42\x06\xee\xb1\x94\x81\x07\xac\x64\x10\x08\x2b\x85\x04\xc1\x5a\x21\xc1\xb0\x51\x48\xf0\x84\x12\x5b\x85\x84\xc2\x4e\x61\x61\x12\x5a\xec\x15\x16\x3e\x21\x60\x50\x58\x22\x1c\x14\x96\x24\x21\x25\x48\x61\xc9\x09\x8e\xf6\x3b\xa1\x22\x44\x61\xa9\x09\x51\x44\x5a\x42\x15\x91\x2e\x61\x54\xbc\x44\xa1\xc8\x48\x15\xd9\x89\x15\x4d\x4a\x9b\x25\x14\xd1\xeb\x51\x2a\xa1\x26\x4a\x61\x65\x89\x56\x51\xd9\xea\xa4\xd8\x8d\xc2\x1a\x25\xc4\xc4\x2a\xac\x29\xb1\x0a\x69\x46\x9c\x42\x5a\x24\x54\xc4\x2b\xa4\x75\x42\x4b\x40\x06\xed\x12\x02\x09\x32\x18\x94\x10\x47\x63\x6f\x68\x42\x4e\xb1\x04\x23\x28\x96\x3e\x6a\x4c\xe9\x8d\xa1\x54\x7a\x63\x29\x95\xce\x78\xca\xa4\x33\x40\x99\xb4\x16\x51\x2e\xad\x25\x09\x29\x15\xd2\x58\x9e\x50\x52\x29\xb5\x55\x09\x0d\x55\x52\x59\x47\xa3\xd6\xf7\x54\x4b\x69\x03\x35\x52\x3a\x44\x8d\x14\x8e\x50\x2b\xb9\x63\xd4\x49\xee\x38\x75\x92\x39\x49\xbd\xa4\x4e\x51\x90\xd4\x19\x0a\x92\x38\x47\x83\xc4\xce\x33\x24\xb1\x0b\x0c\x49\xe4\xe3\x14\x09\x9e\x30\x22\xa2\x8a\xa2\x02\x3c\x67\x4c\xf8\xa8\x8a\x84\xf3\x2a\xa1\x66\x42\x58\x6f\x99\x14\xc6\x3b\xa6\x84\xf6\xc0\xb4\x50\x3e\x30\x23\x14\x20\xe6\x44\x64\xbc\x17\x02\x28\x03\xc1\x81\xb1\x20\x18\x70\x8e\x04\x03\xc9\x89\x88\xbe\x0b\x15\x04\x34\x67\x82\x80\xe1\x42\x60\xb0\x5c\x0a\x04\x8e\x2b\x81\xc0\x73\xc3\x03\x00\xb7\x1c\x20\x70\xcf\x21\x20\x1e\x38\x04\x2c\x10\x8f\x7a\x8a\x24\x64\xdc\x05\x2a\x38\x77\x81\x09\x99\x50\x73\x17\xb8\xb0\xdc\x05\x21\x5c\x42\xe0\x2e\x48\x89\x12\x12\xee\x82\x92\x2c\xa1\xe0\x2e\xda\x4a\xee\x83\x96\x3a\xa1\xe5\x3e\x18\x19\xdb\x32\x32\xb6\x65\x14\xe6\x21\x58\x45\x13\x72\x81\x82\x55\x52\xe0\xe0\x94\x4e\x68\x04\x09\x4e\x39\x41\x83\x53\x20\x58\x70\x1a\x09\x1e\xbc\x26\x42\x84\xc8\x20\x19\xbc\x16\x42\x05\xaf\x95\xd0\xc1\x6b\x23\x4c\xf0\xda\x0a\x1b\x40\x7b\xe1\x02\xe8\x20\x7c\x00\x83\x05\x04\x30\x54\x84\x00\x86\x4b\x1c\xc0\x48\x49\x02\x18\x2d\x69\x00\x63\x24\x0b\x60\x9c\x14\x01\x0c\x48\x19\xc0\x22\xa9\x02\x58\x22\x4d\x00\xcb\xa4\x0d\x60\x85\x74\x01\xac\x94\x10\xc0\x6a\x19\x02\x58\xab\x70\x00\xeb\x15\x09\x60\x83\x62\x01\x1c\x56\x3c\x80\x23\x4a\x06\x70\x4c\xa9\x00\x4e\x28\x13\xc0\x29\xe5\x02\x38\x13\x35\xb6\x73\x2a\x04\x70\x5e\xa3\x00\x2e\x68\x12\xc0\x63\xcd\x02\x78\xaa\x79\x00\xcf\xb5\x0c\xe0\xa5\xd6\x01\xbc\xd2\x26\x78\x6f\xb4\x0b\xe9\x7d\x45\xf0\x1e\x0c\x0a\x1e\x90\xc1\xc1\x03\x31\x51\x71\x53\xc3\x83\x07\x6e\x64\x54\xe2\x46\x07\x0f\xda\x98\xe0\xc1\x1a\x17\x1c\x38\x03\xc1\x01\x58\x14\x5c\x40\x96\x04\x17\x88\x65\xc1\x05\x66\x45\x70\xd1\xbf\x0b\x2e\x48\xab\x83\x0b\xda\xda\xe0\x82\xb5\x3e\xa4\xff\x6c\x47\x63\xf0\xef\xbf\xc9\x18\x98\x64\x06\x5c\x42\x40\x14\x11\x1c\xf3\x0e\xc6\x80\x8e\xc6\x40\x22\x81\x18\xd6\x48\x22\x8e\x2d\x52\x88\x63\x8f\x34\x12\x38\x20\x83\x64\x32\x03\x32\x99\x01\x95\xcc\x80\x4a\x66\x40\x27\x33\xa0\x93\x19\x30\x14\xe1\xe8\x26\x11\xcc\x90\xa5\x0c\x73\x64\xa9\xc4\x02\x59\xaa\xb1\x42\x8e\x3a\xac\x91\xa3\x80\x2d\x72\x0c\x63\x87\x1c\xa3\x18\x90\x63\x1c\x07\xe4\x62\x34\x81\x1c\x33\x84\x22\xc7\x5c\x6c\x87\x85\xe8\x66\x70\x4c\x14\xb2\x9c\x12\x8d\x2c\xe7\xc4\x22\xcb\x25\xf1\xc8\x72\x4d\x02\x32\xdc\x52\x8c\x0c\x77\x94\x20\xc3\x81\x32\x64\x78\xa0\x02\x69\x81\x69\xd2\x4a\x54\x23\x2d\x28\xb5\x48\x0b\x46\x3d\xd2\x82\x53\x40\x5a\x08\x86\x90\x11\x92\x11\x64\x84\x62\x2c\x21\x47\x46\x68\x26\x91\x15\x86\xe9\x84\x06\x39\x61\x99\x4b\xe8\x91\x17\x8e\x85\x88\x1c\x23\x10\x8e\x13\x04\xd1\x49\x41\x41\x78\xce\x13\xc6\xe8\x2a\x2a\xfd\x88\x06\xe3\x38\xdd\x30\x11\xc0\x7d\xc2\x80\xa9\x00\x81\x13\x12\xcc\x04\x08\x86\xb9\x00\xc1\x13\x4a\x2c\x04\x08\x9d\xd0\x60\x29\x40\x38\xac\x04\x08\x9f\x30\x60\x2d\x40\xe2\x84\xd1\xed\x04\xc9\x12\x72\x6c\x05\x48\x89\x9d\xf0\x52\x25\x34\xd8\x0b\x2f\x5d\x42\x8f\x41\x78\x19\x30\x08\xa7\x10\x8e\x11\x02\x21\x48\x38\xc5\x08\x12\x36\xfa\xaf\xc2\x2a\x99\x30\xb9\xa8\xca\x24\x74\x84\x0a\xad\x7c\xc2\x40\x98\xd0\x3a\x86\x9a\x4a\x93\x84\x94\x08\x21\x35\x4f\x28\x89\x14\x42\xab\x84\x86\x28\xc1\xb5\x25\x5a\x30\xed\x13\x06\x62\x04\x35\x28\x21\x21\x56\x10\x43\x89\x13\x38\x3a\x99\x02\x19\x41\xbc\x40\x46\x11\xe0\xc1\x68\x02\x1c\x8c\x25\x81\x83\xf1\x14\xf1\xe8\x3c\x21\xee\x2c\xa2\x98\x5b\x8b\x93\x2b\x4d\x13\x32\x4a\xb9\xb6\x82\x32\xae\xac\xa4\x9c\x4b\xab\x29\xe7\xc2\x9a\xa8\xf9\x6c\x8c\xb5\x98\xf5\x54\x71\x6a\x03\xd5\x9c\x44\xd5\xcf\xb1\xc3\xd4\x70\xe4\x28\x8d\x73\x8a\xd1\xe8\xf1\x8a\x18\xe3\x39\x19\xe3\x3d\x17\xe3\x40\xeb\x0c\x43\xcc\x38\xcb\x30\xd3\xce\x31\xc2\x94\x03\x16\xed\x4f\x60\x51\xdf\x23\xc6\x19\xf7\x84\x09\xc6\xa2\x55\x62\xd4\x33\xa6\x18\xf1\x9c\x19\x86\xbd\x64\x96\x06\xaf\x98\xa3\xe0\x35\xf3\xd4\x7b\xc3\x80\x3a\x6f\x39\xa2\xd6\x7b\x8e\xa9\xf1\xc0\x09\x55\x3e\x70\x4a\x25\x20\xce\xa9\x00\xcc\xa3\x33\x4d\xb8\xa4\x0c\x28\xd7\x94\x02\xe3\x86\x62\xe0\xdc\x51\x04\x82\x7b\x12\x40\x72\x20\x00\x4a\x20\xe2\x41\x0b\x4c\x6c\xb4\x96\xc4\x80\x15\x8c\x68\xb0\x42\x10\x05\x4e\x48\x22\xc0\x0b\x4d\x38\x80\x30\x84\x41\x88\xd6\x2e\x3a\x90\x04\x07\x24\x02\x41\x01\x4b\x8c\x43\xc0\x92\x62\x1f\x88\x64\xd8\x05\x2a\x05\xb6\x21\x86\xd6\x3a\x30\xa9\xb1\x0a\x5c\x5a\x2c\x03\x8f\xce\x79\x10\x12\x30\x0b\x42\x21\x4c\x83\x54\x04\x93\x20\x15\xc3\x28\x28\xc5\x51\x08\x4a\x49\x04\x41\x29\x8d\x5c\xd0\xca\x22\x1b\xb4\x72\xc8\x04\xad\x00\xe9\x60\x34\x42\x2a\x0e\x2a\x92\xc1\x68\x86\x64\xb0\x5a\x20\x11\xac\x96\x09\x75\x42\x9b\xd0\x23\x19\x9c\x0e\x11\x0d\x46\x2a\x38\x43\x91\x0e\xce\x70\x64\x42\x0c\x30\x5c\x70\x46\x21\x1f\x9c\x31\x28\x04\x67\x5c\x74\xbc\x0d\x60\x12\x9c\x45\x98\x05\x67\x09\x16\x21\x0e\x9b\x0a\xd6\x0a\x6c\x42\xd4\xf6\x3e\xa4\xd7\xa0\xc1\x5a\x17\x7d\x67\x0b\x84\x06\xe3\x10\x11\xc1\x38\x42\x54\x30\x8e\x11\x13\x8c\x13\xc4\x07\xed\x24\x09\x41\x3b\x4d\x49\xd0\xce\x52\x1e\x94\xf3\x54\x06\xe5\x02\x35\x41\x7a\x4c\x7d\x90\x9e\x0e\xd3\x9c\xd1\x20\xbc\x64\x22\x70\xaf\x99\x0e\xdc\x5b\xe6\x02\xf3\x9e\x85\xc0\xe2\xd8\x06\x16\x47\x35\x50\xa0\xdc\x04\x0a\x3c\x1a\x66\x10\x02\x07\x02\x4a\xf0\x40\xc0\x08\x1d\x30\x38\xe1\x03\x06\x2f\x71\xc0\x10\x24\x0f\x38\x60\xa9\x03\x09\x44\xfa\x40\x02\x53\x24\xd0\xc0\x95\x08\x34\x44\xb3\xc4\x82\x52\x90\xfe\x2e\x42\x82\x08\x46\x8b\xa0\x82\xd5\x26\xe8\xe0\xb4\x0f\x26\x78\x83\x83\x0b\xc1\xb0\x68\x0c\xfe\x6b\x67\x0c\x3c\x52\x4a\x62\x84\xa4\x52\xd1\xe5\x52\x1a\x0b\x24\x95\xc1\x1a\x09\xe5\xb0\x45\x42\x79\xec\x51\x0c\xc6\x11\x12\x2a\x44\xcd\xa0\x11\x61\x48\x68\x4c\x04\xe2\x3a\xaa\x5d\xae\x09\x31\x88\x6b\x4a\x1c\xe2\x9a\x11\x40\x5c\x73\x12\x10\xd7\x82\x62\xc4\xb5\xa4\x34\x21\x47\x4c\x2b\x2a\x11\xd3\x9a\x2a\xc4\xb4\xa1\x26\xa1\x43\x4c\x5b\x0a\x88\x69\x47\x43\x44\x86\x11\xd3\x9e\x51\x44\x35\x30\x96\x50\x20\xaa\x03\x53\x09\x35\x8a\x05\x2d\xa2\x06\x33\x87\x88\xc1\x0c\x10\x31\x84\xa3\x84\x18\x11\x43\x39\x4d\xc8\x11\x31\x8c\x0b\x84\x0d\xe3\x2a\xa1\x46\xd8\x70\x6e\x13\x3a\x84\x8d\xe0\x10\x51\xa0\x84\x18\xa1\x18\x27\x27\x64\x09\x45\x42\x89\x90\x51\x42\x27\x34\x09\x5d\x42\x48\x18\x22\x46\x26\x9a\x18\xff\x63\xa3\x24\x4b\xc8\x13\xca\x84\x2a\x61\xd4\x73\x4a\xda\x84\x1e\x51\xa3\x24\x44\x54\x08\x31\xa3\x14\x46\xcc\x48\x45\x11\x37\x52\xb1\x84\x02\x09\x23\x94\x44\xd2\x08\xa5\x90\x32\x42\x19\xa4\x0d\x57\x16\x19\xc3\x95\x47\xd6\x70\x05\xc8\x19\xa6\x02\xf2\x26\x06\x21\x60\xa8\x26\x28\x18\xaa\x19\x8e\x21\x18\xc7\xd8\xe0\x68\xe7\x0c\xd6\x0a\x33\x83\xb4\xc6\x5c\x07\x6d\xb0\xd0\x41\x3b\x2c\x35\x68\x8f\x95\xf6\x1a\xb0\xd6\xde\x20\x6c\xb4\x33\x18\x5b\x6d\x0d\xc1\x5e\x9b\xa8\x6b\xb4\x31\x1c\x07\xad\x8d\x20\x48\x2b\x23\x09\xd6\xd2\x28\x42\xb4\x30\x86\x50\xcd\x8d\x25\x4c\x33\xe3\x88\xd0\xcc\x78\x22\x35\x35\x40\x94\x26\x16\x11\xad\xb1\xc5\xc4\x68\x64\x09\xb1\x2a\x58\x4a\x9c\x02\xcb\x08\x28\x6f\x39\x09\xca\x59\x41\x91\xb2\x56\x52\xac\x8c\x55\x94\xa8\xe8\xa1\x53\xa5\xac\xa5\x31\xa6\x77\x94\x2b\x69\x3d\x95\x4a\x58\xa0\x4a\xf1\xa8\xb2\x15\x8b\x2a\x5b\x51\x87\xa9\x55\xc4\x11\xea\x14\x76\x94\x7a\x15\x7d\x05\x90\xc1\x71\x86\x24\x38\xc1\xb0\xf4\x4e\x32\x22\x9d\x53\x8c\x4a\xeb\x34\x63\xd2\x38\xc3\xb8\x8c\x4a\x5c\xc8\xa8\xc4\xa5\x54\xce\x31\x2d\xa5\xf3\x2c\x46\x00\xc0\x6c\x72\x8c\x9d\x64\x1e\x31\x2f\xa9\xc7\x0c\x24\xf1\x84\x05\x89\x3d\xe5\x58\x62\xcf\x38\x91\xc8\x47\xfd\x1c\x3c\xe7\x2c\xea\x55\xce\x85\xf7\x92\x8b\xe8\xef\x73\x29\xac\xd7\x5c\x09\xe3\x0d\x37\x09\xad\xd0\xde\x72\x27\x94\x77\xdc\x0b\xe9\x3d\x07\x21\x3c\xf0\x20\xb8\x07\x81\x05\xf3\x41\x44\x1f\x1f\x09\x2a\x28\x60\x11\x7d\x7c\x22\xb8\xc0\x40\x84\x10\x31\x50\x8e\xce\x68\xf4\xd6\x01\xb8\x30\xdc\x43\xf4\xd9\x3d\x24\x9f\x1d\xa4\x00\x6e\x41\x8a\xc0\x0d\x28\x89\xb8\x06\x2d\x31\x57\xa0\x25\xe1\x12\x8c\x64\x5c\x82\x95\x9c\x0b\xb0\x52\x70\x0e\x4e\x4a\xce\xa2\x63\xca\x29\x78\x69\x38\x01\x88\x51\x2a\x04\xe9\x12\x02\x47\x51\xdb\xb2\x10\x90\x42\x0c\x02\x56\x98\xf9\x80\x15\x65\x2e\x10\xc5\x98\x0d\x54\xf1\x84\x92\x99\xc0\x94\x62\x71\x72\x6a\xa6\x02\x57\x96\xc9\xc0\x95\x63\x22\x08\xe5\x19\x0f\x42\x05\xc6\x82\xd4\x28\x21\x66\x34\x48\x4d\x19\x09\x4a\x33\x86\x83\xd2\xd1\x37\xd2\xd1\x71\x0f\x5a\x2b\x0a\x51\xcc\x28\x04\xa3\x2d\xf5\xc1\x68\x47\x5d\x30\x1a\xa8\x0d\x56\x47\x55\x6b\x0d\xa6\x3a\x58\x43\x68\x32\x03\x09\x39\x8d\x86\x41\x50\x11\xcd\x00\xe5\xc1\x19\x4d\x59\x48\xf1\x61\xf0\xc6\x25\x04\x4a\x82\x37\x81\xe2\xe0\x2d\xa6\x28\x78\x4b\x48\x08\xde\xb2\x84\x9c\xc4\x38\x40\x12\x1f\x20\x0a\x54\x00\x6b\x12\x5a\x12\x63\x05\x4f\x62\xdc\x00\x11\x1d\x22\x3a\x78\x47\x12\x52\xa2\x82\x77\x9c\xc8\xe0\x9d\x48\xa8\x12\x9a\x18\x06\x3a\x4b\x44\x70\xce\x13\x1e\x9c\x83\x88\x1e\x25\x24\x84\x07\xeb\x29\x61\xc1\x7a\x9e\x50\x12\x16\x8c\x57\x09\x0d\x61\x41\x7b\x97\x30\x96\x55\x3e\x44\x04\x4c\x78\x90\x40\x12\x32\xc2\xd3\xb2\x8f\x08\x02\x14\x11\x81\x83\x4e\x68\x89\x0c\x0c\x3c\x91\x81\x02\x44\x0c\x88\xc8\x68\x30\x88\x0c\x38\xc4\xe0\x14\x07\x4e\xf8\xb0\x9c\x11\x50\xd0\x04\x2f\xf3\xfc\x77\xed\x8c\xfc\xe3\xcb\x9f\xde\xbc\x7d\xf3\x5f\x3f\xbe\xfe\xec\x86\xc1\xeb\xee\xdf\x9a\xf6\xda\xf4\xff\xf9\xdd\xb7\xe3\x21\x51\xff\xf6\xf4\xde\x86\x37\xb3\x42\x21\x15\x79\xd3\xfc\x68\xda\xfe\x23\xbb\xc6\xcd\x72\x7f\x53\xf7\x9b\xef\xa0\xeb\xcc\x25\x0c\x6d\x7d\x76\x7b\xdd\xd7\x6d\xdb\xb4\xaf\x1a\x0f\x4f\x6f\x69\x38\xcb\x39\x54\x98\xf2\x7f\x76\xc3\xe3\x6f\xea\x77\x66\xb3\xf6\x69\x3b\xf3\x8f\x97\xf0\x1f\x29\xf1\xe6\xc3\xcd\x27\x4a\xcd\xb7\x40\xfe\x6e\xdd\x75\xeb\xfa\xf2\x33\xed\x84\xdd\x6e\x67\xc5\xba\x6a\x33\x94\x17\x4d\xd5\x66\x44\xe6\x85\x89\xbf\x2a\x2f\xba\xaa\x2d\xeb\xcc\xe4\xc5\x26\x3e\xc8\x8f\x9e\x1d\x1e\xcd\xf2\xdd\x37\x67\x67\xdf\x7c\xff\xef\x6f\xff\xfa\xf2\xdb\xbf\xbc\xae\x96\x07\xb7\xcb\x02\xca\x6f\xbe\xff\xeb\xcb\x6f\xbf\xf9\x7a\x4a\x3f\xb8\x8d\xe9\x53\x81\x6f\xbe\x7f\xf3\xed\xdb\x97\x3f\x7e\xb3\xaf\x62\x7a\xb2\xdc\x66\xf5\xfd\x7d\x56\x57\x77\x13\xad\xb7\x85\x3b\xdc\x9b\x6d\xff\xce\x7d\xfc\x56\x63\x3a\xb6\xda\x99\xcd\x26\x7d\x4d\x50\xf4\xf9\xfd\x7d\xbc\x98\x5e\xa0\xad\x4b\xd7\x78\xa8\xda\x62\x5d\x36\xed\xfa\x72\x5d\x9b\x49\x3a\xaa\xba\x58\x4f\x6f\xb7\xc7\x77\xb7\xeb\xd2\xe6\x59\x5f\xa4\xf7\xe3\x37\x6d\xd3\x37\xfd\x87\x1b\x28\xfb\xe6\xac\x6f\xd7\xf5\x65\xf5\x88\xad\xcb\xf3\x41\x36\xff\xd6\x2d\x12\xeb\x57\x8b\xe5\xf0\x89\x43\x6c\xf3\x64\x79\x31\xdd\x5e\x0f\x2d\x6e\x8b\x7e\x9b\xa5\x8c\x79\xe1\x3f\xd5\xb3\x75\xd1\xcc\x76\xec\xdf\x77\xee\xcb\x51\x44\x16\xef\xe2\x68\x77\x8b\xd0\xb4\x8b\xe5\x97\x27\xfd\xc9\x97\xcb\x55\xbc\x68\x4f\xbe\x5c\x96\x8b\xf1\xa0\x83\x85\x69\x21\x3e\x9c\x9f\x5d\xbe\xce\xcb\xbf\x35\xeb\x3a\xfb\x72\x59\x2c\x96\x5f\xe6\x27\x5f\x2e\xbf\x2c\xea\xc3\xb1\x2b\x9a\x91\x83\x1f\xe7\xcd\x36\x73\x79\x71\xf5\xc9\x0e\x3c\x4d\x7e\x12\xd2\x39\xd5\x8b\xeb\xdb\xae\x5f\x58\x58\x34\x61\x11\x79\xbd\xf8\x32\x7d\x65\x70\x48\xd0\xfa\xb7\x11\x14\x3e\x41\xd0\xd3\xe4\xbc\xb9\x82\xc5\xba\xee\x37\x49\xad\xd5\x97\x8b\x74\xc2\xde\xaf\xfd\xe2\x9d\x69\xd7\xc6\x6e\x60\x47\xe5\x7b\xd3\x2d\xea\xa6\x5f\xdc\xb4\xcd\xbb\xb5\x07\xbf\xe8\x9b\x45\x7f\x05\x53\xb9\x91\xf3\x91\x95\x07\xf3\xa2\x68\x7f\x13\xe5\xfb\x37\xc1\x37\xfb\x57\xf0\x4f\x9c\xef\x3c\x3b\x92\xec\x7a\xfc\x5c\x69\x5d\x34\x85\x29\xba\xf4\xf9\x18\x4e\xc7\x1d\x4c\xe7\xbf\x8c\x4d\x6d\xca\xab\x3c\x83\x74\xb8\xf1\x50\xef\xf9\x5d\xac\x6d\x75\x5b\x6e\xd6\x3d\xb4\x66\x53\x24\x51\x5a\xc5\x2c\x65\xba\xdc\x5e\x1c\x4d\x7b\x20\xbe\xab\xce\x2f\x8a\xcb\x0a\x15\xb6\x82\x3f\x5e\xfe\xc9\x8e\x95\xff\xf1\xf2\xe4\x64\x98\x7a\x1f\x2a\x7b\x7e\x99\xce\xaf\x9d\x37\xf7\x21\xcf\xdf\x8d\x67\x53\x3d\xd9\xd6\x87\xb1\xa1\xfc\x08\x36\x1d\x2c\xe6\xa5\x37\xa9\xf4\xa3\xc3\x81\xcd\xf1\xf1\x27\x6b\x4c\x87\x24\x0c\x67\xf7\x0d\x2a\x3a\xeb\xd3\xa9\x9e\xf1\xca\xe4\x63\x43\x89\xe2\xb7\xd5\xd8\x7a\x3a\xa6\xb1\xb9\xbf\x7f\x96\xbd\x5d\xac\xeb\x45\x93\xe7\xfd\x55\xdb\xbc\x4f\x9f\x15\x85\xec\x6d\xd1\x0d\x2a\xe8\x7d\xd5\x9c\xbf\x3d\xec\x21\x24\x1a\xdf\x1f\x1f\x2f\x87\xe1\x5f\x3e\x9b\xc8\x8c\xcf\x46\xd2\xf7\xcf\xee\xef\xb3\xf7\xd5\x94\xb5\x9a\x3d\x7e\xd4\xcb\xf7\xa7\x83\x9e\xc9\xde\xe7\xab\xe5\x32\x2f\x0e\xba\xfc\xb8\x86\xd3\x1d\x17\x56\xb7\x65\x93\xa8\x1b\xd9\xf1\xfe\x29\xd6\x86\x44\x76\x62\xc2\xeb\xc7\xf4\x7c\x18\x0e\x1a\x3c\x5d\x97\xde\xf4\x70\x3e\xde\x5e\xac\x76\xc5\x2f\xf3\x6c\x7c\x98\x9f\x8e\x17\xe5\x8d\x69\x3b\xf0\xd3\x41\x2d\xc3\xb1\x2a\x47\x9f\x1f\xa8\xaf\x4d\x0f\x6f\xd6\xd7\x30\x0d\x55\xf1\x7a\x37\x58\xef\xf3\x6d\xbe\x7d\x44\x7a\x93\x48\xff\x24\xd5\xfd\xfa\xfa\x7f\x42\x75\xf1\x3f\xa6\xfa\x31\xc3\xd7\x89\xea\xec\x93\x64\x0f\x22\xf0\x04\xe1\x7f\xfb\x8d\x84\xe7\xc7\xc7\xaf\xcb\xce\x99\x0d\x1c\x1f\x67\xef\x9f\x57\xe3\xcd\xfd\x3d\xce\x7f\x43\x9f\x0e\xa7\xcc\x53\x3d\xba\x9b\xf7\xa8\xde\x8b\xd0\xaf\xd5\x87\xd2\x5d\xad\x37\xbe\x85\xba\xf8\x61\x9a\x54\xc5\x59\xd5\x9c\xff\x30\x1c\x68\x7d\x93\x9d\xcd\xe7\xd4\x55\xf6\x43\xb1\xd7\x69\xd3\xf4\x7a\x53\x9d\x65\xd7\xd9\xaf\x7b\x5d\x96\x7f\xe2\x90\xa5\x51\x6b\xe4\xf9\x51\xfa\xce\xbc\x5c\x77\xc3\xf7\xe6\x6f\xf2\xfb\xfb\xec\x4d\x75\xfe\xe6\x62\xea\xf3\x78\x6c\xd3\xbb\xe2\xcd\xc7\xaa\xfb\xc8\xa4\x82\x8f\x4f\x2a\xd8\xc6\xa6\xb7\x73\x7e\x5c\x0f\xfc\x48\x07\xbe\x7e\x57\x7d\x98\x8e\xdc\x3d\x7f\x7f\x71\x7f\xbf\xbb\x2b\x9b\xfe\x0a\xda\x39\x2b\x7c\x36\xb1\xeb\x7d\x31\x37\xce\xbb\x22\x79\x62\xcf\x61\x4f\xae\xb3\xef\xc6\x42\x93\x83\xf0\xc4\x44\xf9\x65\x3f\x40\xdf\x1d\x3d\x22\x6b\x59\x2d\x4f\xde\x5f\x8c\x04\x47\x37\xb9\xfc\x71\x73\xdb\x9a\xcd\x4f\xb7\x1b\xe8\x66\xf4\xb9\xec\xcb\x87\xa9\x8b\xf5\x60\x00\xcd\x3b\xb3\xde\x24\xd3\xb8\xae\x17\xd1\xb2\x2d\xa0\x7e\xb7\x6e\x9b\x3a\xba\xf2\xe5\x7f\xd7\x6f\xda\x0f\x8b\x9b\x66\xf3\x21\xac\x37\x9b\x68\x19\xd7\xfd\xe2\xb6\x4b\x26\xf2\xff\x4c\x9e\xd2\x1f\xa2\xc5\x7d\x71\x93\xea\x6e\x63\xdd\xcb\xff\xae\xe7\x96\x73\x72\x07\x27\x11\xf9\x71\x38\xf0\x7a\x46\x4c\xd6\x17\xc3\xf0\x7d\x28\x87\x6a\xa2\xb3\xbc\xcd\xcb\x0e\x36\x91\x0d\xef\x5f\x44\x4e\x86\xd0\x41\x7f\x7f\x8f\xf2\xfc\x68\xce\x83\x1f\x1f\x0f\x4d\x1c\xd2\x67\xdf\xfd\xcb\xc7\xa7\x78\x48\x47\x3a\x04\xe7\xe3\xdf\x68\xc2\xee\x7c\xb7\x53\x58\x41\xd9\x82\xbf\x75\x30\x17\xdd\xfd\xa9\xe6\x07\x3b\xb6\xee\xb6\x19\x3e\x3e\x6e\xd3\x39\x7d\x55\x55\xed\x84\xf8\xf8\xb8\x7f\xf4\xec\xb4\x1d\x08\x3d\xa9\xfa\x72\x14\xed\x41\x51\xf4\x79\x01\xdb\xbc\x38\xbf\xc8\xb7\xd9\xbb\xd9\xc7\xd1\xef\x66\xd3\xc6\x3d\x3a\x08\x78\x4c\xb8\x32\xdd\xec\xe0\xaa\xfd\x97\xa7\x51\x50\x60\x5b\x5c\x42\xff\x54\x32\x9c\xf7\x17\xdb\xa2\x3b\x48\x8c\xde\x5a\x7c\x5e\xb5\x91\x61\xdb\xc3\x38\x24\xf6\x7c\xe8\x46\x85\x2e\xaa\xe5\x78\xbd\x2c\x62\xc2\x30\x5d\x2b\x7c\x51\x2d\x87\xcb\xe5\x36\xbb\xbd\xbf\xcf\x6e\xf7\x11\xc5\x65\xd5\x95\xe6\xfe\xde\x14\x76\xee\xcc\xef\x7a\x0a\x43\x5c\x51\x8c\x87\x05\x9b\xa2\xab\x52\x2c\xb1\x0e\xd9\xee\x44\xef\x76\x3c\x65\x74\x3c\x45\xe8\xdb\x26\xea\xdb\xf1\x1b\xe2\x41\xc6\x7b\x68\x5f\x19\x77\x05\xd5\xdd\xa0\xde\x57\x77\xdb\xc2\x8f\xd6\x23\x5e\xdf\xec\x45\x79\x75\xb7\xdd\xce\x8b\x3e\xfe\x2c\xb4\x9a\x92\xc6\xf8\x37\x83\x74\x1a\x3c\xae\x86\x03\x8f\xa2\x10\xec\x4e\x01\xdc\xf9\x70\xe3\x51\xd2\xfd\x47\xa4\xe8\x81\xc4\x3d\x25\x24\x7b\xef\x66\xaf\x1b\xe7\x52\x77\x7a\x70\xf7\x58\x94\x86\xdb\x9d\x40\xed\x84\x74\x12\xf2\x0a\x9f\xb6\xe7\xe8\xe2\xfe\x7e\xb9\x5c\xb5\x07\x2c\x18\xfb\xf9\xd4\x57\xa9\xd7\x59\x57\x9a\xae\x2f\xba\x72\x93\xb8\xde\x15\x33\x96\xef\x6f\xba\x02\x8a\xd1\xac\xef\x42\xaf\x7c\x6c\xa3\x85\xae\xd9\xbc\xdb\x59\xd1\xc7\x21\xdd\xdd\x50\xf5\x2a\x69\xc0\xb9\x7d\x2c\xbb\xdb\x9b\x9b\xa6\xed\xc1\x0f\x43\xde\xfd\x10\xb2\x1d\x21\xf9\x39\xba\x98\x46\xf2\x12\xfa\x97\x5d\xff\xb8\xe6\x45\x22\x7e\x5b\x3c\x62\x6c\x9f\x34\xf2\x3c\x50\xac\xfa\xe2\x19\x94\x6f\xdf\x26\x8b\x3f\xd3\x4c\xbb\x55\x81\xec\xf1\x32\xc7\x94\x7d\x17\x52\x75\xd0\xc7\x38\xe5\xa6\x6d\x1c\x74\xdd\xe2\xe7\xb1\xee\x9f\x77\xb1\xd6\xcf\x03\x21\x3f\x2f\xf3\xa3\xd4\xb8\xe9\xfa\x6a\xd7\x6a\x54\xb2\x75\xac\x78\xb3\xfe\x07\xfc\x87\xe9\xae\x7a\x73\xf9\x4d\x3d\x68\xe1\xd5\x33\x5c\xac\x2f\xeb\xa6\x85\x37\xe6\x72\x35\xfc\xad\xa0\x99\x8e\xd5\x6b\xca\x5d\xd2\xe4\xcb\xed\x6a\x1f\x0e\x47\x3f\xb4\xde\x53\x62\xfe\x74\x3f\x5f\x2e\x46\xba\x77\xfd\xda\x05\x61\xa6\x5b\x98\xc5\xe0\x32\x2f\x9a\x76\xf1\xf2\xec\x4d\x39\x75\x65\x14\x84\xea\x49\xb9\xef\x4f\xe7\x5a\x1d\xf2\xc7\xb3\x64\xb7\xb6\xd0\x14\x66\x27\xba\xe7\xf5\x45\x95\x35\x15\x9c\xd7\x17\x45\x66\xaa\xfe\xbc\xbe\xc8\x4f\x77\x11\x9d\xc9\xb3\x8f\x5d\xdf\x6d\x8b\xe6\xfe\xfe\x6e\x9b\x17\x66\xf8\x99\x37\xdf\x3c\xd1\xfc\xc1\x24\x8d\x9a\xf0\x53\x35\x9f\xf7\x17\x79\x61\xce\xfb\x8b\xa1\xee\x38\xe1\xa2\xba\x5b\x35\x79\xd1\xee\xda\xda\x65\x87\x3c\x5f\xc1\x36\x83\xdd\x54\xa9\x47\xd5\x35\x0a\x72\xd5\x3e\xd0\x64\x5d\xd5\x1c\x1f\x37\xb3\xfb\xfb\xfb\xbd\x2e\x8c\x6c\x78\xac\xf7\xf2\xe3\xe3\xcc\xfc\x46\xe5\x97\x17\x77\x0f\xfc\xd0\xd5\x65\x36\x5f\xbf\x9a\x62\x51\x28\xfa\x18\x8d\xb6\x15\xfa\x63\xfb\xa7\x87\x7f\xf4\xf9\x63\x7b\x72\x92\xf7\xe7\xed\xc5\xfe\x2f\x40\xe7\xed\xc5\xec\x9f\x22\x59\x06\xd5\xa3\x19\x9d\x97\x76\x5d\xfb\xd1\x82\xc3\x9e\x53\x2e\xcf\xce\x87\x2e\x5e\x14\x7d\xb4\xdb\x79\x71\xe7\x62\xc7\x56\xef\x32\x33\xba\xec\x79\xd1\xf5\xad\xe9\xe1\xf2\xc3\xea\xb2\x1c\x2f\xd7\xd0\x95\x69\xe9\xc0\xaf\xdd\x36\x2f\x1e\xc5\x0c\xff\xbb\x3d\x3b\x6c\xeb\x9f\xeb\xdb\x34\x50\xbf\xad\x77\x33\x97\xec\x7f\xb7\x6b\x73\x37\xf5\x9f\xea\xd7\x4c\xe8\x3e\xdf\xb5\x6d\x7e\xb8\x5c\x13\x2d\xfd\xba\x86\x1f\xdb\xe6\x06\xda\x3e\xb6\xba\x3c\xb0\xfd\xcb\x24\xc2\x4f\x9c\xec\x0b\xe5\x35\x5c\x37\xeb\x7f\x80\xff\x7a\x9e\xff\xfe\x3e\xfb\x48\x4a\x95\x45\xe5\xf7\x84\x9c\x3e\xb0\x5a\x59\x3e\x4e\xd7\xbc\xf8\x48\x4d\xdb\x02\xea\xdb\x6b\x68\xa3\xab\x1e\xb5\xb5\x6b\xea\xb0\xbe\xbc\x1d\xef\xd1\xf6\xa3\x05\x87\x73\x30\x77\x56\xa0\x6a\x86\xa8\xb3\xd8\x29\x8c\xfd\xbc\x76\xb7\x6d\x0b\xb5\xfb\xb0\xba\x4b\xe1\xe9\x6a\x39\x3d\x58\x6e\x8b\x1b\x68\x1d\xd4\xfd\x2e\x69\xbc\x5f\x6e\x07\x65\xb0\xba\xeb\xae\x9a\xb6\x5f\xdd\x5d\x37\x75\x7f\xb5\x5a\x26\x5a\xd7\x6e\x59\x78\xf3\x61\x76\xf7\x01\x4c\xbb\x5a\x92\x17\x7e\x7d\xb9\xee\x97\xdb\xe2\x1a\xfc\xfa\xf6\x7a\x57\x2a\xd5\xf1\x74\x99\xe9\x76\x5b\x6c\x9a\xfa\x72\x57\x22\xde\x7c\xae\x40\xb8\xdd\x6c\x56\x77\xef\x01\x7e\x49\xf9\x86\x22\xbf\xbd\xfc\xb6\xe8\x93\xa6\x1b\x3b\x78\xd5\xdc\xce\x52\x8b\xeb\x75\x7d\xdb\xc3\xbc\xb9\xa9\x4f\x9f\xc9\x58\x74\xe0\x9a\xda\x3f\xee\xd9\xef\x2d\x97\xc8\xfb\xff\x9b\x1a\xbe\x1f\x0e\x5f\x4d\x3c\x9c\x7a\xfd\xaf\xa9\x6c\xbb\x2d\x60\x9b\xe5\x47\xfb\x93\x36\xed\xef\x7a\x9d\xf4\xea\xec\xec\x27\xe8\x3e\x76\x02\xcf\xfc\x20\x4c\xe3\x9b\x9b\xfe\x2c\x8a\xd8\x47\x8e\x5b\x9a\xe5\x75\xdd\x47\x4e\x59\x9a\xe5\xb9\x84\xfe\x55\x73\x7d\x63\xfa\xb5\xdd\x40\xaa\xf7\xf3\xe7\x5a\x0e\x5e\x61\xf7\x32\x92\xb2\xae\x2f\x53\xa9\xb3\x2b\x80\x8f\xbc\xaa\x9a\xbf\x4e\xba\xad\x3b\x13\xe0\xd5\xd9\xd9\x67\x0f\xf1\xfc\x09\x8c\xeb\xd7\xef\x60\x7c\x69\xf6\xd9\x57\x5a\x23\xe3\x5f\x35\xf5\x3b\x68\x7b\x78\xfa\x9d\xd0\xfc\xad\x59\xdd\xf4\xaf\xff\x7e\xfb\x91\xe3\xff\xde\xc5\xf0\xe9\xe8\x8f\x7f\x78\xfe\xfc\x68\xf1\x7c\xf1\x7f\x36\x6b\x07\x75\x07\xf1\xfa\x55\x73\xf3\x21\xfd\xb5\x75\x41\x10\xd6\x8b\x7f\x6f\x9a\xcb\x0d\x2c\xbe\xfd\xf6\x55\x4c\x3c\xfb\xf1\xeb\xff\x7c\xf1\xed\x90\xf9\xc5\x37\x1e\xea\x3e\x9d\xb6\xbc\x5a\xfc\xf9\xec\xeb\x17\xf4\xc5\xab\x8d\xb9\x4d\xb5\xfc\x61\xfc\x1b\x76\x5d\xbd\x5f\xd7\xbe\x79\x5f\x9e\x5d\x19\xdf\xbc\xff\xa9\x69\xfa\xe3\xe3\xbd\xb3\x31\x4b\xfc\xf0\xea\xec\xec\xfe\xfe\xc1\x83\xb2\x36\x91\x45\x43\xe1\xfc\xf8\x78\x90\x0e\xf0\xf3\x11\x59\xd7\x8b\xaf\x1b\x97\x8c\xcd\xfe\x05\xcf\xf1\xf1\xb2\x85\x74\x6a\x75\x4c\x7f\x75\x76\xb6\x2f\xb1\xcf\x54\xac\xab\xb3\x0f\xd7\xb6\xd9\xa4\x43\xed\xa3\x9e\xfe\xce\xdc\x1c\xb9\x8d\xe9\xba\x85\xb9\x4b\x1d\x68\x6f\x5d\xdf\xb4\x83\xf7\x36\x39\xf4\x6f\xbf\x70\x5d\x37\x48\xf3\x17\xd5\x33\x54\xf4\xcf\xaa\x6a\x3d\x7a\xba\xa3\x87\xbb\x13\xf7\x69\x91\x65\x57\x59\xd4\xd6\xe5\xe2\x2f\x1d\x2c\x7e\xde\x89\xca\xcf\xd1\xd5\xfd\xd9\x75\xdd\xcf\xe9\x8f\xdf\x60\xfc\xce\xe9\x75\x5d\xf7\x06\x7e\xed\x2b\xd8\x5e\x42\xbf\xe8\x76\x9d\xc8\xf2\xbb\x0d\xf4\x8b\xa8\xcc\x2f\xa1\xcf\xe6\x79\xf7\xff\xa6\x3d\x3e\xde\x31\x1a\x8e\x8f\xb3\xa6\xec\x1e\x64\x2d\x86\x2d\x1e\x0e\xd8\x13\xcd\xc8\xc8\xba\xb3\x0f\xb5\x3b\xac\x3a\xfa\xa2\xd3\xab\xb3\xd9\x11\x74\xb3\x2c\xdb\xed\x30\xf0\x5d\x05\xd5\x57\xb1\x72\x93\x3d\xb1\x22\x07\x2b\x38\x59\x2e\x8b\x75\x5e\x6c\xaa\x0c\x8a\xb2\x2c\xfb\xbc\xfa\x6a\x60\xf9\xa2\xad\xe6\xaf\x3d\x4e\xe1\x1c\x5d\xac\xf6\x61\xef\xf0\x96\xb0\xfa\xaa\x3f\xc9\xa0\xfa\x2a\xad\x7b\x0d\x87\x42\xcf\x87\x25\xdf\xbf\x1a\x1a\xc8\x8a\x41\xca\xa3\xc5\xf9\xdd\xdf\xf1\xe1\xe8\x60\xf4\x86\x57\x5a\x37\xa6\xeb\x86\xd7\x42\x5f\xba\xae\xfb\x72\xff\xef\xe0\x29\x68\x31\x0f\x13\xda\xd4\xf8\x6a\xb1\x3c\x81\x93\xe5\x30\xc8\x5f\xee\x06\xf9\xcb\x14\xb8\x45\xd1\xaa\x9b\xfa\xc5\x18\x92\x8f\x2f\xfd\x8a\x85\xbd\xed\x17\xbd\xf9\x05\x16\xce\xb4\x10\x73\x42\xdd\xdd\xb6\x91\x88\xcb\x18\xf5\xb9\xdb\x76\xdd\x7f\x28\x97\xf9\x36\xcf\xda\xfc\x04\xce\xeb\x13\x7c\x51\xa4\x77\x40\xf3\xff\x4e\x9b\xac\x2d\xd6\xf9\xb6\xb8\xad\x92\xc4\x56\x5f\xdd\xd5\xa7\x50\x3e\x9e\x33\x55\x9f\xd6\x50\xa1\xfa\xea\x70\x7f\x82\xb9\x1c\xa4\x15\xab\xbd\xc0\xe5\xab\x3e\xba\x0b\xaf\x8d\xbb\xca\xfa\xd9\x50\xf9\x69\xea\x0d\xab\x48\xa3\x32\x8b\x63\x1e\x35\x6d\x5e\xec\x14\xc0\x66\xdd\x7f\xdf\xd4\x0e\x8e\x06\x99\x7c\x56\x55\xf5\xf1\x71\x1b\x45\xf2\x65\xdf\xb7\x6b\x7b\xdb\x43\xb6\xac\x63\x8e\x65\x0c\x60\xda\xb2\x87\x5f\xa3\xb2\xeb\xa1\xee\xab\x7e\x2f\xb1\xd1\x4f\x84\xda\xbf\xba\x5a\x6f\x7c\xd6\x46\xcf\xae\x70\x55\x7d\x1a\xfb\xb2\xfa\x74\x87\x92\xbc\xc4\x59\xd3\x57\xcb\x65\x7a\x21\x36\x76\x22\x46\xcf\x49\x52\xc6\x55\xd3\x93\xaa\xdd\xc9\xcd\xa4\xb8\xb3\x3e\xf2\x1e\xf2\x15\x1c\x7d\x4e\x67\xca\x7f\x5a\x67\x46\xff\xda\x8f\x9a\xf3\x6a\x62\x5c\xdf\xde\x76\x3d\xf8\x18\x3f\x77\x45\xa8\xae\x4e\xaf\x4a\xb8\xbe\xe9\x3f\x9c\xb9\x76\x7d\xd3\xaf\x96\xcb\xe2\x66\xca\xda\x1e\x9a\x94\x1f\xc7\x55\xdb\xb3\xc1\x9e\x15\xd7\xd5\x5d\xdf\xec\xb9\x9d\x94\x5a\xf7\x7e\xdd\xc7\x21\xcd\xef\x9c\xe9\x60\xf1\xe7\xa6\xd9\x80\xa9\x57\x50\xc1\x69\x48\xcb\x00\x47\xb6\x05\xf3\xcb\x51\x4a\x1d\x9c\xe7\x55\xba\x4e\x91\xfe\x6a\xbf\x03\x01\xac\xfe\x9f\xb3\x1f\xbe\x2f\x87\xb9\xbe\x0e\x1f\x32\xd8\xf9\xdc\xb0\x2d\x42\xdb\x5c\x3f\x68\x39\x8e\x44\x5b\xc1\xd1\x47\x28\x68\x53\xcd\xcf\xaa\x0a\xe6\x14\x0c\x3e\xf4\x98\x18\xa7\xfd\x69\xbc\x58\x0d\x8f\x33\xc8\x3f\x4d\x6d\xdf\x7e\xb8\x6b\xab\x44\xe7\xb0\x20\x02\xf9\xd6\x99\xd8\x3a\xe4\x77\x43\x9d\xfb\x3f\xc7\x6f\xb7\xc5\xbb\x69\x1e\x45\x15\x1f\x55\x68\x5f\x55\xfd\xfd\x3d\x54\x15\xe4\xc5\x65\x75\x67\xa6\x1e\xad\xa2\x19\xf8\x70\x03\xab\x41\x35\x46\xdf\x7c\x30\xd2\xab\xeb\xa2\x85\xb0\x89\x74\x3c\xc3\xc5\x95\xe9\x5e\x5d\x99\xfa\x12\xfc\xea\xdd\x76\x34\x34\x76\x01\xbf\xf6\x50\xfb\x6e\xf1\x1f\x6f\x76\x5f\xd0\x1c\x18\x9f\xfc\xae\xbb\xbd\x81\x36\x1b\xa3\xfa\xb7\x5f\xbc\xee\x27\x63\x35\x3c\x59\x77\x7f\x49\xa7\xbe\xff\x08\xe9\x44\xf9\xea\x19\x1e\x9e\x5f\x99\x31\xc1\xef\x1e\xbd\xfd\xe2\xf5\x78\x2e\xfe\xb0\x41\x42\x96\x6f\xbb\xde\xf4\x6b\xb7\x30\xde\x7f\x53\xaf\xfb\x75\x5a\x1c\x6a\xf7\x7f\x61\x1f\x47\x21\xeb\x87\x65\x81\x4d\x3e\x59\x95\x67\x89\x17\xd9\xb8\x8d\xc6\xf9\xc5\xb4\xe8\x30\xac\x16\xc2\xae\xe2\x68\xb8\x1a\xdb\x41\xfb\x0e\xfc\x4e\x04\xba\x6c\xdc\x94\x23\xac\xeb\xd4\x62\x36\x6d\xdc\x02\xd5\xf9\x2e\x60\x4c\x39\xc6\xe3\xf6\xc7\x58\x2d\xc6\x75\x93\x1e\x4a\xeb\xca\x3b\x5d\x54\x57\x53\x0f\xaf\xb2\xb6\xe8\xf3\x03\x45\x33\x59\xee\xd7\xb7\xc9\x08\xd6\x45\x1b\xed\x5c\xa2\xb4\x4e\x91\x25\x4c\xe4\x0e\x7a\x6c\x16\x19\xf6\xd5\xe5\x60\xfb\x87\x83\xf4\x63\x5d\xe5\x6e\xe0\xab\x67\x78\x5a\x27\xde\x75\xa4\xf8\x08\xd9\xb1\xe1\x28\x4e\xc5\xb3\xbe\xac\x9b\x97\xce\x41\xd7\x35\xed\xf1\xf1\xb3\x94\x7f\xff\x6d\xca\x95\xe9\x7e\x78\x5f\xef\x29\xc8\xf3\x9d\xb6\x5d\x76\xc9\x5f\x99\x9b\xd2\xc9\x83\x59\x2d\xdf\xbe\x5d\x9e\x40\x31\xb2\x21\xc6\xf2\x63\x0d\x5f\x43\x97\x54\x45\xf2\x63\x1e\x71\xe6\xe9\x80\xf8\x90\xa4\x02\x8a\x3a\xdf\xce\x06\xf4\xc9\xaa\x67\xdf\x64\xc4\xe8\xf9\xd0\x3f\x98\x5e\x0a\x64\xf5\xd4\x9b\x75\x22\xf4\x1c\x2e\x8e\xc6\xf4\xaa\x9e\xd6\x73\xff\x7e\x0b\x5d\x3f\x88\x6e\x06\xc5\xba\x68\xa3\x92\x3f\x0c\x77\x0f\x82\x61\xf4\x14\x6d\x53\x60\x0d\x87\x7e\xca\xe3\x71\x89\xb4\x42\x7e\x7f\x7f\x39\x55\xb2\x1f\xca\x9d\xcf\xf7\x60\x4c\x96\x53\x16\xbf\x9c\x3e\xc2\x78\x86\x8f\x0e\xe4\xc0\x57\xcf\xd0\x4e\xa4\x47\x26\x0f\xd4\x0d\x3c\xfd\x61\xa8\x39\xad\xfc\xc3\xe7\xa5\x67\x9a\xf1\x19\x3c\x4e\xdb\x2b\x86\xdb\x43\xc5\xf0\x90\xea\x9b\x5d\x91\xe5\x4e\xa8\xa0\x9a\xc6\x7a\x4c\x2a\xfa\xea\xbc\x2c\xcb\x3d\xc9\xb3\x2a\x62\x4c\x98\xf6\x11\xf9\x58\x86\x41\x1a\x63\x96\x8b\x87\x16\xb6\xcf\x07\x3f\xf1\x70\x7e\xb5\x05\x9c\xb7\x17\x3b\x53\x31\xef\xfc\x10\x04\x56\x07\x5c\x1d\x9e\x8d\x9b\xcc\xa4\xeb\xbc\x78\x86\x1e\x0e\xdc\x98\x0b\xa6\x3e\xf6\x51\xa7\xac\x43\x76\xb8\x4a\x3d\x9f\x58\x91\x6d\x67\x51\x0e\xca\xb0\x31\x7d\x86\xff\x80\xf2\xb2\x85\x77\x10\x8d\x44\x9e\xcf\xba\x92\x3e\x6b\x6a\xf3\xbe\xbc\xad\xbb\xab\x75\xe8\x33\x17\xeb\x19\xd6\xc4\x77\xd3\x0a\x8e\x8f\xfb\x41\xb9\xa4\xd4\x9d\x3a\x9b\xe8\x4c\x3a\x2a\x19\xc1\xa9\xfd\x99\x4a\x39\x9a\xe4\xa9\xaa\xaa\x76\x5a\x81\x7f\xe4\x43\xb7\xa7\xed\x53\xaf\xba\xa1\xec\x9b\x6f\x9b\xf7\xd0\xbe\x32\x91\xf2\xf1\x8b\x82\x6d\x33\x6d\xe8\x73\x34\x49\xca\x4d\xea\xf2\x8f\x6d\x73\xbd\x8e\x76\xb0\xfa\x6a\xe0\x7c\x1d\x27\x54\x9a\x79\xd1\x90\xc0\x4e\xb2\x5e\x7e\x7b\x28\x59\x6f\xbf\x78\x7d\x3d\xc9\xea\xe1\x7c\xcd\xc7\xed\x98\xaa\x6c\x94\xac\x99\x29\x2b\x37\xf9\xfd\xfd\x3e\x26\xb9\xbf\x87\x9d\x2e\x8f\xae\xdb\x30\x21\xf2\xad\xf1\x3e\x3a\x7e\x6d\xb3\xd9\xcc\x2c\x51\xd1\xfe\x31\x7b\x60\x8c\xde\x7e\xf1\xfa\xf2\xc0\x1e\x9d\xf6\xab\x5d\x42\x34\x49\x93\x2d\x2a\xf6\x59\x06\x8a\x6b\x0f\xed\x10\x8c\x8e\x16\xf4\x55\x53\xd7\xe0\x7a\xf0\xc7\xc7\xd9\xd4\x81\xb6\x82\xf2\xaa\xe9\xfa\x5d\xda\x9c\xfa\xf6\xfe\xbe\x1d\x3e\x3c\x8b\xe3\xdf\xc2\x75\xf3\x0e\x9e\xa0\xfa\x68\xaa\x6c\x4e\xf2\xac\x9a\xfe\xfe\xbe\x2f\xbb\x9b\x74\xce\xec\x2e\x43\xb9\xae\x3d\xfc\xfa\x43\xc8\x20\xff\xea\xab\xaf\x50\x81\xf3\xed\xc0\xf0\xbb\x47\x1c\xfd\x84\x75\x1c\x43\x80\xa7\x34\x41\x9f\xcf\x4c\x62\x3f\xc4\x85\xc5\xa8\x86\xf3\xc2\xc3\x06\x7a\x98\xd4\x76\x74\xb1\x87\x49\xfb\xd3\x8e\x6d\x3b\x71\x9a\xe6\xd7\x34\x30\xe3\x98\x77\xbb\x68\x7f\x3e\x3c\xd1\x49\x1c\x5e\x0d\xf5\xbd\x71\x57\x43\x54\x9f\x3d\xea\xd2\xbe\xf0\xa8\xc2\x77\x13\xe8\x76\xa4\xf2\x29\x0e\x9c\x8d\xda\xa0\x8f\x01\xe8\x30\x5c\xaf\xcc\x66\x63\x8d\xfb\x65\x47\xed\x9e\xeb\x0f\xa5\x20\x7b\xf0\xa4\x9a\xe9\xaa\x79\xb7\x27\xf5\x7c\x30\x4f\xb2\x67\xe8\x91\xd4\x3f\x1c\xe7\x87\xc2\x7e\xb8\x41\xd0\x5e\x48\x3e\x21\x71\xfd\xa4\x0c\xfa\x49\xee\xb6\xf9\xf6\x01\x25\x90\xdf\x6d\xfd\xba\xfb\x38\x0b\xfe\xa5\x64\x7e\x3d\x6b\xe9\xb3\x94\xee\x14\xdc\xe8\x02\xef\x48\x1b\x3d\x87\x49\xd3\xfc\xbf\x69\xe7\xaa\x28\xf0\x67\x43\x52\xf4\xbf\xc6\xcf\x9c\x47\x79\x6b\x1e\x6b\x96\x51\xa5\xb6\xf9\xfe\xc5\xfe\xb3\xaa\x6a\x8e\x8f\xd3\xea\x40\x5b\x8e\x5e\xf8\xa4\x71\x4d\xb5\xd3\x25\xeb\x29\x96\xc8\xea\x18\xf7\x4d\x9e\xfb\xbc\x3f\xf5\xd4\x9f\xba\x9c\x05\x50\x73\xd1\x5e\x9f\xae\x57\xd7\x07\x89\xd1\x39\x4d\xaf\xe0\xf3\xa3\xbd\xe7\x0d\xa3\x98\x98\xd3\x51\xde\xa2\xd6\xd8\xc7\x45\x4d\x3e\x6e\x9a\x36\x0f\x8a\x9b\xc2\xe4\x0f\x9c\xf7\xed\x76\xe4\xd3\xf4\xf9\x48\xf1\x29\xde\x14\xa6\x6a\x06\xd7\x77\xf0\x74\x0e\x38\x64\x46\x0d\x18\xeb\x8e\xb7\x7b\xb7\xa0\x29\x9f\x70\xa6\x4c\x5e\x74\x15\xec\xb9\x54\x6c\xaa\x43\x3e\x3e\x4b\x7c\xdc\x6b\xd0\xee\x40\x67\x4e\x7c\x6c\xcb\x83\x80\x70\xce\xc9\xfa\xb4\x5e\x3d\xf1\xa1\x6c\x77\xda\xa5\x70\xf4\x31\xd3\x0f\x6a\x9a\xf1\xda\x0c\x0a\xcd\x5c\x54\x9b\xac\x2f\x60\x18\x8b\x47\x8c\x7c\xe8\x6c\x26\x51\x8c\xa1\x69\x1d\xfd\xb7\xb9\x45\xcf\xb2\xac\x8d\x5a\xff\x91\xe8\x3d\xe9\x73\xe6\xe5\x3e\xd8\xbb\xbf\x7f\x97\x67\xa3\xb3\x5b\xf4\xf9\x69\xb6\x33\xaa\x31\x53\xf2\x3d\xf7\x4f\xf6\x51\xc2\x81\xe0\x1e\x0e\x13\xcc\x17\x51\xa7\x84\xb7\x33\x9d\xfe\x76\x32\xd7\xfb\x1e\xbf\x1d\xab\x6e\xf3\x3c\x5f\xd5\x29\x70\x79\xf6\x54\xf8\x78\x7c\x3c\x8f\x97\x6e\x76\xd5\xbf\xca\xa2\x69\xee\x3e\xd4\xc9\x7f\x79\x35\x19\xa3\x47\xc1\x27\x3a\x8a\x61\xb6\x79\x6f\xd6\xfd\x62\x57\xcb\x3e\xcc\x1e\x5d\x8e\xb2\x85\xf4\x9a\x2f\x46\xe0\x73\x3f\xb4\x73\x57\xe0\x6f\x47\x8d\x16\xa3\xc2\x99\xea\x79\x16\xfb\x3d\x54\x0c\x4f\xd3\xbe\x7d\x58\xfc\xc0\xf5\xbf\x81\x36\x34\xed\xf5\x94\xb6\x7d\x70\x3f\x6a\xc8\x75\xc8\x9e\xac\x7b\xf4\xf3\x8f\x1e\x84\xd6\xfb\xa0\xfc\xc0\xa4\x3e\xb0\xc2\x53\x88\x03\xf3\x20\x7e\xfc\xdc\xf3\x68\x58\x93\x7a\x86\x8f\x76\xde\xe0\x24\x0d\x89\x95\xfd\x64\x53\x9b\xdb\x8d\x1f\x89\x6d\xf3\xa2\x1f\xe5\xe8\xfd\x7a\xb3\xd9\x3f\xfd\x97\xea\xf7\xa1\xda\xcf\x69\xf6\xa1\x47\xb7\x13\x09\xf9\xce\x05\xfb\x4b\x36\x5b\x5e\x19\x56\x58\xfb\xf9\x4a\xc4\x5f\xb2\xb4\x9e\xbc\x13\xed\x97\xaf\xb3\x36\xdf\xce\xfa\x13\xad\x59\x7a\xfc\xbb\xbc\xa9\xdf\xd9\xbd\xcf\x5a\xae\x87\x8b\x29\xd3\xa2\xc7\x7c\x79\x05\x4d\x8b\x00\xed\xae\xda\xa8\x04\xe6\xac\x89\x0f\xb6\x43\xaf\xef\x3e\xe2\x55\x3f\x5e\xc8\x49\xcb\xfe\x43\xf9\x57\xcd\xf5\x4d\xf4\xcb\x1e\x08\xf5\x25\x8c\x0d\xee\xd3\xb7\x4f\x3c\x3b\x28\x93\x66\xe4\x81\x3c\xed\x82\xe4\x67\x68\x7b\xbb\x7b\x74\xe8\x35\x3f\x54\x31\x4f\xc9\x78\x99\xcc\xf6\xce\x97\x2c\x76\x3c\x48\x3a\x69\x14\xf8\xb9\x00\x6c\xf7\xcc\xb9\xdb\x3e\x60\xdf\xdd\x76\x6b\x0f\xe2\xe9\xc2\x7e\x3c\x30\xde\xa7\x8d\x71\xe3\xf9\x45\x61\x1f\xfb\x92\xd5\xdd\x75\xe3\x61\xb5\x6c\x6e\xa0\x5e\x6e\xc7\xe9\x72\x73\x7f\x7f\x93\xdd\x3d\x78\x21\xb7\xb2\xdb\xbc\xd8\x79\x09\xbe\xba\xdc\x34\xd6\x6c\xde\x0c\x76\xfb\x20\xe7\x5f\xa1\xed\x92\x9f\x3a\xb3\x4d\xfe\xd4\xaf\x3e\x5f\x62\x1f\xa3\x2c\x71\x49\x4a\xbc\xcc\xb7\x17\x17\xf9\xd1\xff\x0d\x00\x00\xff\xff\x6c\x1e\x3d\x2a\x9c\xdc\x18\x00") + +func web_uiAssetsVendorA8ab945788d03426b8cd1080cb42495fJsBytes() ([]byte, error) { + return bindataRead( + _web_uiAssetsVendorA8ab945788d03426b8cd1080cb42495fJs, + "web_ui/assets/vendor-a8ab945788d03426b8cd1080cb42495f.js", + ) +} + +func web_uiAssetsVendorA8ab945788d03426b8cd1080cb42495fJs() (*asset, error) { + bytes, err := web_uiAssetsVendorA8ab945788d03426b8cd1080cb42495fJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/assets/vendor-a8ab945788d03426b8cd1080cb42495f.js", size: 1629340, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x7c\x5b\x73\x1b\x49\xb2\xde\xbb\x7e\x45\x1f\x3a\x14\x61\x87\x85\x62\xe5\xb5\xaa\xd6\x92\x22\xb8\x18\x6a\x46\x27\xa8\x8b\x29\xcd\xf1\x99\x7d\x61\x34\xd0\x0d\x11\x6b\x12\xa0\x01\x50\x1a\xad\x62\xfe\xbb\x23\xab\xaa\xc1\x26\xc8\xd5\xce\x8c\xfd\xb0\x14\xf7\x63\x75\x66\x56\xe6\x97\x97\xaa\x06\xe6\xf9\xbf\xfd\xf0\x6e\xfa\xf1\x97\xf7\xa7\xcd\xe5\xee\xfa\xea\xe5\x93\xe7\xf6\x4f\x73\xd5\xae\x3e\xbd\x38\xea\x57\x47\xcd\xfc\xaa\xdd\x6e\x5f\x1c\xf5\xd7\xb3\x7e\x33\xb9\x5a\xb7\xdd\x72\xf5\xe9\xe8\xe5\x93\xa6\x79\x7e\xd9\xb7\x9d\xfd\xd2\x34\xcf\xaf\xfb\x5d\xdb\xcc\x2f\xdb\xcd\xb6\xdf\xbd\x38\xba\xdd\x2d\x26\xf1\x68\xfc\xa7\xcb\xdd\xee\x66\xd2\xff\x9f\xdb\xe5\xe7\x17\x47\xff\x39\xf9\xf9\x64\x32\x5d\x5f\xdf\xb4\xbb\xe5\xec\xaa\x3f\x6a\xe6\xeb\xd5\xae\x5f\xed\x5e\x1c\xbd\x3e\x7d\xd1\x77\x9f\xfa\xe1\xc9\xdd\x72\x77\xd5\xbf\x9c\xae\x57\xdb\xdb\xab\x66\xf6\xb5\xf9\xa9\xdd\x5e\x2e\xa7\xeb\xcd\xcd\xf3\xe3\xf2\xa7\x91\x82\x55\x7b\xdd\xbf\x38\xea\xfa\xed\x7c\xb3\xbc\xd9\x2d\xd7\xab\x91\xd8\xa3\x87\x0b\x3f\x2f\xfb\x2f\x37\xeb\xcd\x6e\xb4\xea\xcb\xb2\xdb\x5d\xbe\xe8\xfa\xcf\xcb\x79\x3f\xc9\xff\xe7\x59\xb3\x5c\x2d\x77\xcb\xf6\x6a\xb2\x9d\xb7\x57\xfd\x0b\xa8\x82\xca\x8f\xb1\xb8\x79\xb6\x71\x72\xbb\x3c\x9e\xaf\x57\x8b\xe5\xa7\xe3\x7e\xf5\x79\xb9\x59\xaf\xae\xfb\xd5\x58\xc5\xd3\xf0\xd7\xa7\x88\xd7\xeb\xee\xf6\xaa\x7f\xbf\xe9\x17\xcb\x5f\x9f\x22\x3e\xa5\x93\xa7\x88\x7b\x09\x86\xe0\xf4\x29\xe2\x48\xc4\x7e\xd5\xcd\x66\xdd\xdd\xce\x6d\x7b\xfb\x65\x9b\xf5\x7a\xf7\xf3\xf9\xd9\x7e\xc9\x53\x7c\x65\x42\x5e\xed\x17\x5c\xad\xe7\xad\x3d\xf1\xf1\xeb\x4d\xbf\x5f\xb5\xd8\x5e\x4f\xbe\x2c\x77\x97\x93\x75\x76\x56\x7b\xb5\x5f\x7e\xb9\xdc\xee\xd6\x9b\xaf\x1f\x6e\x6f\xcc\x3f\x6f\x96\x5d\x77\xd5\x7f\x69\x37\xf5\xd1\xdd\xe6\xb6\x2f\xeb\x76\xeb\xcd\x72\x59\xe5\xe5\x6d\x75\xcb\x6d\x3b\xbb\xea\xcf\xfb\x6e\xb9\xe9\xe7\xbb\xd7\xc5\x75\xcb\x7f\xf4\x9b\xb2\x6a\xd1\x5e\x6d\xfb\xa7\xe1\x87\xf2\xf8\xa9\xd1\xe9\xf4\xed\x7f\x8c\x25\xbc\x3a\x3d\xf9\xf8\xf3\xf9\xe9\x87\x3b\x6c\xbf\xfa\x3f\x3f\x9e\xbe\xfd\xe1\xe2\xfd\xf9\xbb\x8f\xef\x8c\xaa\x1f\xc6\x8f\xfd\xd0\xee\xfa\xc7\x54\x5c\x9c\xbc\x7f\x7f\xf6\x7a\x7a\xf2\xf1\xf5\xbb\xb7\x17\x1f\x4f\xdf\xbc\x3f\x3b\xf9\x78\x7a\xf1\xbf\xce\x4f\xde\xbf\x3f\x3d\x1f\x3f\x50\x56\xff\x70\xfa\xea\xe4\xe7\xb3\x8f\x17\x27\x1f\x7e\x79\x3b\xbd\x78\xf7\xd7\x0f\xa7\xe7\xff\x71\x7a\xfe\xe1\x70\xdf\x17\xff\xfe\x3f\x7f\x3e\x3d\xff\xe5\xe2\xf5\xdb\x8f\xa7\x3f\x9e\x67\xe1\x0f\x65\xed\xb5\xbd\x7b\x7b\xf6\xcb\xc5\x8f\x67\xaf\xdf\xbc\x39\x3d\xbf\x98\xbe\x7b\xf3\xfe\xdd\xdb\xd3\xb7\x1f\xc7\x42\x07\x6b\x4f\xde\xbf\x1f\x6f\xca\x78\xf5\x1d\x72\x7c\xee\x37\xdb\xca\x82\xbc\x02\x1d\x3a\xff\x14\xff\x1a\x68\xa6\x1a\xc3\xdc\xfe\x30\x48\xde\xf4\xdb\xe5\x3f\xfa\x0f\xfd\xc6\x98\xfd\x43\xbf\x68\x6f\xaf\x76\xdb\xb1\xae\xe5\xea\xef\x7d\x26\xd5\xab\x76\x6e\x61\xed\x87\xbf\x8a\xfd\xd5\x52\x65\xaf\xd7\xa8\xbc\x59\x5f\x5d\x95\xa0\x56\xe8\xfa\x66\xbd\xaa\x2c\x95\x1f\xf6\x6a\xa7\xef\xde\x7e\xf8\xf9\xec\x62\xfa\xee\xfd\x2f\xe7\xaf\x7f\xfc\xe9\xe3\xc5\x2f\xa7\x27\xe7\x77\x06\x7b\x7b\x1e\xef\x2d\xfd\xf1\xf5\xc7\x8b\x0f\x3f\x9d\xec\xd7\x0c\x9b\x91\xc3\x85\x16\x97\xbd\xdf\x9f\x22\x82\x83\xbc\xfd\xfb\xab\xfe\xfa\xfa\xed\xc9\xf9\x2f\x17\xc6\x97\xfd\xca\xf5\x76\x7b\xb8\xec\xe7\xd7\x17\x3f\xbc\xfe\x70\xf2\xd7\xb3\xd3\x8b\xf3\xd3\x93\xb3\x8f\xaf\xdf\x9c\x3e\x08\xe8\xc3\xa5\x27\x6f\xa7\x3f\xbd\x3b\xbf\xf8\x70\x7a\x76\x3a\x7d\x94\x03\xeb\x9b\x7e\xd3\xee\xd6\x9b\x69\x2e\x08\x0f\x29\x5d\x45\xfe\xf4\xee\xcd\xe9\xc5\x38\x7f\xad\x52\x6e\xf3\xaf\xaf\x9e\xe2\xab\x2f\x5f\xbe\xb8\x12\x7d\xb7\x5c\x1f\x5a\x7e\x7e\xfa\xfe\xdd\xc5\xeb\x0f\x1f\x7e\x3e\xfd\xf0\x1d\x11\x9f\x96\xbb\xcb\xdb\x99\x9b\xaf\xaf\x9f\xe2\xab\x4b\x2b\xa1\xf3\xf5\xe6\xe6\x29\xbe\x2a\x72\x9f\xe2\xab\xe5\x76\x7b\x6b\x31\x7f\xb5\xb2\x48\xbf\x9a\x5f\xae\xd7\xdb\xfe\x50\xd9\x0f\xef\xa6\xdf\xd3\x72\x60\xe8\xab\x6e\x3d\x7f\xe0\xe9\x2c\xe2\xec\xf4\xe4\xfc\xed\x77\x04\x5d\xf5\xed\x66\xe5\xf6\x76\x16\xbb\x1f\x91\x73\xf2\xfe\xf5\x1f\x30\xa7\xbd\x59\x1e\x4a\xb9\x23\xe6\xf7\xc5\x3c\x6e\xca\x6c\xb3\xfe\xb2\xed\x37\xcb\xc5\xd7\x71\x26\xed\xfa\xed\x90\x5a\xf7\x92\xbb\xff\xd5\x8a\xe9\xc9\xcd\xcd\xd5\xb2\x14\xe3\x1f\xaf\xd6\xb3\x52\x74\xef\xaa\xd6\x51\x73\xfc\xf2\x89\xf5\xd5\x7f\x9b\x4c\x9a\xfb\x4c\xff\x4b\x53\x28\xde\x4c\x26\xb9\xf3\x5e\x2d\x57\xff\xbb\xd9\xf4\x57\x2f\x8e\x96\x73\x6b\x75\x97\x9b\x7e\xf1\xe2\xe8\xdb\x37\x37\x2d\xad\xe6\x7d\xbb\xbb\xfc\xed\xb7\x76\xbb\xed\x77\xdb\xe3\x45\xfb\xd9\x56\xb9\xe5\x7c\x7d\xf4\xe7\x9f\xde\x7e\xfe\x74\xd4\xec\xbe\xde\xf4\x2f\x8e\x96\xd7\xed\xa7\xfe\x78\xfb\xf9\xd3\x7f\xff\xf5\xfa\xea\x50\x64\x7b\x73\x73\xd5\x4f\x76\xeb\xdb\xf9\xe5\xe4\x77\x88\x3f\x5c\x3e\xf1\x30\xef\x58\xa3\x0f\x11\x17\xb3\x99\xcc\xe6\x1e\xc9\x03\x71\xe8\x16\x29\x79\xea\xdc\xcd\x30\x7e\x64\x9d\xcb\xd5\xae\xff\xb4\x59\xee\xbe\xbe\x38\x3a\x2a\x06\x6c\x77\x5f\xaf\xfa\xed\x65\xdf\xef\xfe\x85\xea\xcf\xfd\xaa\x5b\x6f\x26\x9a\xfa\x85\xa6\x3e\xc5\x59\xe8\x80\x3b\x10\xa0\x45\xf4\xa2\x33\x9d\xeb\x8c\x63\xe7\xe6\xdb\xed\xff\x1f\x85\xfb\x32\x3e\x81\x44\xd0\x75\x73\x8a\x4c\x7e\xb1\x58\x74\xb4\xe8\x66\xd4\x86\x7e\x2e\x33\x0f\x73\x88\x7b\x9d\x4f\x86\x81\xe3\xf9\xf1\x30\x6d\x3d\x9f\xad\xbb\xaf\xfb\x41\xe4\xf9\x6a\x5d\x46\x9e\x82\x34\xcd\xf3\x6e\xf9\xb9\xc9\x26\xbd\x38\xba\x6e\x37\x9f\x96\xab\xbf\x34\xbe\x69\x6f\x77\xeb\xff\x71\x34\xac\xc9\xeb\x2e\xf1\xe5\xbf\xb7\x9f\xdb\x0f\xf9\xe9\xe6\xdc\x86\xb3\x4d\xdf\x3d\x3f\xbe\xc4\x7b\xcb\x6e\x5e\xbe\xbf\xea\xdb\x6d\xdf\xf4\x2b\x6b\xef\xcd\xe8\x99\xe5\xaa\xf9\xba\xbe\xdd\x34\x5f\xfa\x59\x53\xf3\xa1\xd9\xad\x9b\xdb\x6d\xdf\xd4\xa1\xed\xe7\xd7\xee\xf9\xf1\xcd\xde\xb4\xe3\x6e\xf9\x39\x6f\xe1\xf8\xce\x6a\xb3\xf7\x49\x33\x4c\x99\xb3\x4d\xbb\xea\xf2\x94\xd9\x6f\x8e\x9e\x34\xf7\x37\x32\xb9\xea\x17\xbb\xbf\x34\xf3\xf6\x6a\xfe\x5f\x27\x90\xe2\xcd\xaf\xcd\x71\x83\xff\xed\xe8\xc9\xcb\x27\xcf\xb7\x9f\x3f\x35\x65\x82\x3b\x82\x14\x8f\x9a\xcb\x7e\xf9\xe9\x72\xf7\xe2\x48\xe8\xa8\xf9\xf5\xfa\x6a\xb5\x7d\x71\x64\xa9\xfd\x97\xe3\x63\xcb\xe9\x2f\xe4\xd6\x9b\x4f\xc7\xe8\xbd\x3f\xce\xc4\x5e\x2c\xaf\xae\x5e\x1c\xfd\x97\x78\x9a\xf4\x84\xf6\x7e\x7a\x7e\xd3\xee\x2e\x9b\xee\xc5\xd1\x1b\x42\x17\x90\xbd\xf7\xf0\xcc\xbb\xa8\x8a\x24\x5e\xa0\x99\x62\x74\x8a\x94\x0c\x9f\x78\x87\x10\x81\x42\xe2\xd4\x20\x3b\x42\xf0\x03\x1e\x85\x55\x32\xee\x1d\xc4\x54\xe5\x68\xf0\x3e\x69\x96\x03\xea\xbc\x68\x96\x03\x4e\x51\x54\xbd\x97\x06\xd0\x21\x7a\x31\x94\x9c\x04\x41\x32\x34\x39\x0f\x18\xd4\x83\x3c\x53\x47\x9c\xd4\x1b\x3a\x15\x17\x3d\xa7\x64\x70\x72\x80\x94\x82\xc1\xe4\x08\x31\x7a\x43\x01\x9d\x52\x22\xef\xa1\x01\x17\x22\x28\x64\x54\x9d\xa4\xac\xa3\x99\x7a\x87\xec\x99\x08\x38\x3e\x43\xef\x84\x41\x0d\x9f\x78\x47\x40\x20\x21\x0a\x3e\x43\x76\xd1\x27\x34\xdc\x3b\xd0\x18\x13\xe6\xe5\xc9\xf9\xa2\xc8\xc4\xa8\xf8\xc4\x59\x0c\x91\x43\x52\x36\x1c\x1d\x08\xfb\x60\x4a\x29\x38\xd4\x18\x0c\x65\x27\x1c\x8a\x81\xec\x5d\xd0\x94\xd1\xa9\xba\xc4\x20\x94\x61\x76\x18\x7c\x86\xc1\x3b\x10\xca\x0e\xe1\xe0\x80\x38\xdb\x07\xe4\xf2\x0e\x0c\x4d\x0e\xa0\x9a\x01\xc1\xa9\x68\x5e\x2c\xe0\x7c\xca\xe1\x68\x10\x5c\x24\x86\x8c\xa2\xf9\x29\x2f\x46\x75\x3e\x08\xee\x51\x60\xf6\xa9\x99\x12\x3a\x05\x94\x3d\x1c\xed\xb9\x86\xa2\x4b\x80\x50\xf5\xa9\xa6\x2c\x82\xc9\x05\x08\xc5\x0a\x71\x48\xf9\xd7\xe6\x8c\x82\x13\xe1\x90\x63\x18\x5d\x48\x52\xf6\x47\xe2\x7c\x2a\x0a\x19\x9c\x07\xca\x71\x21\x74\x9e\x85\x33\x8a\x8e\x83\xcf\xfa\x30\xba\x10\x38\x56\x34\xc5\xa2\x6f\x8a\xe2\xc4\x73\x11\x41\x4e\x8c\x4a\xb6\xd8\xdc\x4c\xbe\xa2\xbe\x1a\x07\x46\x89\x40\x55\x5d\x28\x94\xcd\xb4\x33\x12\x64\xd8\x3b\x0a\x21\x55\x7f\x0a\xf9\x58\x4d\x86\x98\x1d\xde\x80\x3d\xa7\x65\x23\xe2\xd8\x97\xa0\x4e\x93\x4b\x88\x9a\xe3\x67\xde\xc2\x94\xe1\xe8\x52\xce\x0b\x10\x63\x06\xc5\x18\x0f\x51\x73\x78\xc8\xdb\x9b\x8e\x61\x74\x41\x25\xeb\x1b\x09\x86\xe4\x04\x39\x1d\x58\x01\xea\x42\xa1\x4e\x33\x1d\x99\x6c\x6c\x18\xe8\x72\xb7\x3d\x7b\x2e\x28\x1d\xf8\x02\xbc\x63\xf2\x65\x23\x23\xc7\x25\xe7\x23\x33\x5b\xfe\x8c\x9c\x1c\x9d\xb2\x05\xd2\xd0\xbb\x88\x24\x07\xca\xc6\x27\xc9\x74\x19\xc2\x97\x9c\x46\x06\xcc\x29\x78\x17\x6a\x00\x07\x5c\x78\x38\xe2\x05\x90\x23\x89\x39\x7a\x67\x23\x16\xa9\x8b\x09\x35\xa7\xfc\x94\xbd\x93\x14\x34\x07\xca\x79\x48\x98\xeb\x03\xa9\x8b\x58\xb8\x0c\x2e\x89\xd7\x6c\xc6\x3f\xa9\x55\x7f\x6b\xde\xb0\x3a\x25\xcc\x7f\x21\x76\x51\x42\x4e\xe3\x29\xab\x55\x2e\xac\x70\xa2\x94\xfd\xcf\xe2\xa2\x25\x47\x89\x37\x30\x86\x8a\x4a\x2e\x2d\x85\x05\x75\x33\x53\x63\x3c\x03\x55\x38\x50\x61\x01\x8b\xf3\x94\x73\xe6\x19\xa9\x03\xa8\x82\xd9\x25\x91\x58\x51\x21\x2a\xfe\x67\x76\x31\x94\xdc\x26\xcb\xfe\x62\x9c\x2d\x06\x29\xfa\x82\xa3\xa0\x38\x08\x0e\x01\x2b\x1a\xac\x5a\x0e\x56\x50\x1c\x72\x0d\x44\xd2\x60\x72\x4d\x57\x8a\x8e\x63\x82\x61\x7b\x5a\xc2\x6d\x79\x89\x85\xe4\xc5\x17\x34\x70\x3f\x49\xc9\x08\x73\x5c\x0e\x05\x3c\x23\x23\x47\x7e\xae\xe1\xe0\x3c\x57\xbf\xdd\xa1\x53\x0e\x4e\xa1\x44\x65\xbc\xd8\x0c\xd2\xc1\xb6\x28\x91\x2a\x2a\xa2\x83\x3a\x96\x58\x23\x62\xaa\x4b\x3b\xa0\xe8\xbc\x94\xba\x63\xc5\x2d\xc2\xe0\x0b\x01\xe1\x43\xd4\xfc\x56\xca\xc0\xf4\x3e\x2c\x98\xc9\x63\x8b\x7d\xad\x89\x39\x22\x82\xd5\x8a\x88\xd5\x43\xe2\x82\x32\x0d\x56\x48\x0c\xfb\x58\x43\x71\x11\x47\x87\xc2\xb2\xe7\x85\x1f\x7c\x11\xb5\x96\x39\x76\x29\x44\x1d\x7c\xc1\x35\x51\x8c\x71\x50\x32\x3e\x3b\x4e\x52\x45\x6b\x26\x35\x8f\xb3\xd3\x68\x6b\x5e\x94\x4c\x7e\x0c\x4e\x14\xf7\x4e\xd2\x00\xb1\xc2\xca\xa5\x19\x98\x79\x09\x86\xc5\x91\x43\xa8\x1a\x53\xca\x35\xf6\x19\x46\x07\xac\xb0\x0f\x55\xca\x85\xc5\x60\x66\x96\xba\x98\x53\x71\x1d\x9a\x67\xaa\xe0\xe0\xd8\x67\x5e\x5b\x49\x43\x8a\x32\x88\x20\xcc\xdb\x32\x58\x73\x8f\xce\x8b\x49\x53\x21\x8c\x77\x3e\xc2\x80\xee\x0b\xab\x77\x1c\x60\x64\x05\x0e\x8b\xa3\xfa\x34\x98\xac\x95\xf9\xe0\x20\x31\xd4\xed\x11\xa8\x56\x94\x71\xf0\x73\x74\xaa\x81\x2b\xac\x5a\x39\x97\x9c\x0f\x29\x55\x34\xc4\x3d\x8d\xc4\x17\xbf\x8d\xd0\xa9\x78\xe7\xb5\x54\x9e\x0c\x97\xe4\x11\xef\xd4\xc7\x41\xb0\x68\x99\x14\xac\x9f\xfa\x38\xac\x85\x6a\xf1\x54\xc0\xb1\x2f\x55\x8a\xac\x97\x03\xd6\xc5\x4a\x04\x15\x45\x28\x1d\x29\xa3\x42\x7b\xbf\x71\x18\x44\x8c\x60\xa4\x52\x75\x04\x9c\x80\xc7\x7d\x44\xfc\x20\x18\x83\x0c\x71\x62\x2d\x45\xc7\x44\xf8\x5a\x8b\x2c\xd6\x50\x5c\x24\xde\x05\x5f\x6a\x51\xe6\x85\x40\x45\x09\x22\x0d\x1c\x8a\xb4\x4f\x9e\x84\x65\xd7\xc6\x38\x2c\x8c\xe3\xe4\x38\xe5\x1a\x66\x28\x17\xcf\x36\x8f\xb3\xf3\x6f\xcd\x1b\x8c\xce\x07\x2c\xfc\xf4\xa6\xb1\xec\x10\x8d\xfc\x80\x15\x66\x28\x3c\x42\x71\x29\xd7\xef\x8c\x52\x8e\x04\xd8\x18\x19\xa1\x8c\x91\x36\x8f\x61\xe1\xe7\x14\xad\x49\x94\xfc\x41\xef\x02\x17\xce\x59\xef\x04\x5f\x16\x83\x33\xc5\x75\xde\x49\x75\x86\x44\xb4\x79\xa0\x8a\x00\x07\xe4\x53\x85\x73\xb0\x6d\xb1\xb5\x99\x9a\x26\xe4\xa2\xca\x80\x52\x28\x6d\x0d\xd9\xe5\x79\x33\x8b\xb0\x61\xac\x44\xdb\xba\xb9\x14\x8f\xa2\x77\xa8\x69\x70\x1d\xa4\x12\x2a\xf4\x4e\x93\x0e\xa1\x42\x84\xb8\xb7\xa2\xb6\x2a\x8b\xb6\x94\x56\x60\x23\x1a\xef\x69\x04\x54\x05\xa3\x75\x70\x3f\x90\x4b\x84\xf7\xbe\xf0\x4c\x95\x8a\x54\xf8\x60\x8e\x0b\x49\xf6\x1c\xf7\x1a\x07\x27\x67\x7d\xf7\x50\x8b\x08\x97\xe9\xe9\xde\xe2\x68\x31\x93\x81\xe3\x80\xc5\x17\xc9\xa5\x41\x9d\x77\x5e\xca\xdc\x36\x25\xef\x52\xed\x26\x18\x5d\x4a\xa5\x64\x58\xc6\x48\x18\x2a\x94\x48\x99\x78\xc7\xa8\x3a\xaf\x50\x36\x32\x86\xd9\x25\x2e\xf3\x0e\x81\xc3\x3a\xef\x58\x44\xaa\x87\xc8\xb2\xb2\xf4\x23\x44\x97\x50\x6a\x44\x92\x4b\x51\x07\x06\xa4\xa4\x5a\x4d\x86\x6a\xb2\xf1\x22\x94\xda\xf0\x38\x3b\xad\xda\x92\x4b\xb5\x0e\x98\x63\xa8\x4e\x58\x36\x62\xd6\x96\x8b\xc1\x61\x9d\xa5\x98\x1c\xd4\x16\x68\x28\xd5\x22\x85\x2e\x10\x0f\x1c\x20\xa8\xa3\x22\xa3\xa3\x81\x8a\xc1\x51\xaa\x07\x00\x70\x89\xfd\xb0\x58\x3d\xa4\x8a\x2a\xe3\x60\x45\xf2\xbe\xb6\x24\x70\xc4\x34\xf0\x08\x52\xc9\x6d\xb6\xb1\xaa\x0a\x8e\x4e\x42\x99\x36\x6d\xae\x96\x9a\xf1\x16\x13\xac\xb9\xed\x5d\x0a\x85\x1a\x98\x6c\x8e\x95\x61\x31\xc4\xa1\x8c\x47\xaa\xbd\x15\x1c\x84\x34\x30\x11\x51\x46\x56\xc0\x40\x45\x85\x42\x50\x33\x19\x6a\x63\xf4\x2e\x71\xed\xf0\x60\x65\x7c\xe0\x27\xc4\x52\xd0\xb2\x2f\x40\x71\xa8\xe3\x43\x63\xb4\xd1\x2d\x0e\x4c\x94\x9a\xd8\xe6\x64\xf1\x87\xe8\x34\x8f\x8a\xca\x87\x8b\xd9\xa1\x24\x18\xf2\x01\xc2\x30\x73\xa9\x24\x1c\x6c\x83\xc0\xc3\xc0\xe4\xef\x60\x81\x40\x75\x34\xca\xc5\xaf\xf8\x22\x05\x0e\x0f\x51\xf6\x31\xee\x67\xae\x01\x8e\x46\xbf\x61\xe6\x02\x89\x69\x1f\x11\xe6\x61\x98\x2b\x35\xac\x54\x81\xa1\xda\xb2\xd3\xe4\xf7\xa5\x39\xd4\x49\x93\x1d\xd5\xd1\xc8\x92\x27\xa5\xc1\x17\x8f\xb0\xf3\x80\xb6\x56\x1e\x3c\x3d\xa0\xad\x77\x52\x0f\x22\x63\xda\xda\x39\xb7\x24\xca\x98\xb6\xde\x29\xc6\xf4\x80\xb6\xde\x05\x28\x5d\x6d\x4c\x5b\xf3\x28\xf3\x21\x6d\xc1\xe1\x70\x14\x1d\xd3\xd6\x5a\x19\xc0\x21\x6d\xc1\xc5\x04\x74\x48\x5b\x74\xe4\x05\x1e\xd0\xd6\x0a\x7d\x29\xd8\x63\xda\xda\x9e\x42\x3a\xa0\x2d\xda\xc1\x28\xc4\x43\xda\x22\xb9\x34\x8c\x84\x77\xb4\x45\x76\xa8\x3e\x1e\xd0\x16\xd9\x71\x39\xbf\xdc\xa3\xad\x95\x58\x4c\x7a\x40\x5b\xeb\x58\xc2\xf1\x80\xb6\x23\x74\x4c\xdb\xf1\xe2\x3b\xda\x22\xbb\x5c\x4a\xef\xd3\xd6\x6c\xc3\x94\x0e\x69\x6b\x45\x11\xeb\x01\x7c\xc4\x44\x72\x18\x03\x1c\xa2\x66\x26\xd0\x03\xda\xa2\xc3\xb4\x3f\xb0\xec\x69\x0b\x2e\x0e\x64\x1e\xd1\x16\x9c\xd0\x70\xda\x18\xd1\xd6\x32\x5b\xf0\x90\xb6\xc6\x0b\x88\x87\xb4\xbd\x63\xe7\xc1\x6c\xeb\x1d\x45\x94\x07\xb3\xad\x77\xac\xa5\x19\x8c\x67\x5b\xef\x54\x23\x1c\xce\xb6\xd6\x86\x86\x6a\x3b\x9a\x6d\xc1\xa1\x56\x3f\x8f\x66\x5b\xe3\x2a\xa7\xc3\xd9\x16\x8d\x7e\xf1\xc1\x6c\x8b\x8e\x03\xea\xc1\x6c\x6b\xcd\xc7\x83\x1e\xcc\xb6\xe6\xfd\x04\x7c\x38\xdb\x22\x39\xbd\x1b\x84\x87\xd9\x16\xed\x3c\x5b\x93\xe7\x6e\xb6\xb5\x68\xf3\x90\x7f\x77\xb3\xad\x51\x31\x96\x96\x3b\x9a\x6d\x8d\x30\x65\x46\x1d\xcf\xb6\x23\x74\x3c\xdb\x66\xb8\x34\xaf\xd1\x6c\x8b\xec\x28\xfa\x78\x30\xdb\x5a\x96\xc4\x92\xee\xe3\xd9\xd6\x72\x2a\x82\x1c\xcc\xb6\x48\xce\x73\xb9\xb0\x19\x0f\xb1\xe6\xb7\xda\x9e\xef\xc3\xbe\x5c\x36\xdc\x9b\x6d\x2d\x22\x5e\x0f\x67\x5b\x1b\xe6\x52\x78\x30\xdb\x7a\x97\x28\xa6\xc3\xd9\xd6\x78\x51\x9a\xd7\x78\xb6\xf5\x4e\x3c\xfb\x07\xb3\xad\x77\xc4\x85\x71\xe3\xd9\xd6\xe6\x4f\x8f\x87\xb3\xed\x1d\x3b\xcb\x4d\x42\x9d\xc0\x9e\x01\x39\xf4\x43\x6f\x55\xab\x30\x3a\xc0\x91\x87\x66\x90\xca\x94\x63\x28\x0f\xc7\x10\x19\xce\x29\x86\x86\xa8\x32\x24\x26\xd5\x83\x24\xb0\xf3\x77\x22\x40\xeb\x4d\x0e\x3b\xae\x83\x69\xbe\x06\x28\x75\x00\xd8\xc5\x30\xd0\x96\x6d\xf6\x29\x97\xa9\xe2\x30\xed\x6f\x2e\x3c\x95\x0a\x03\x62\x85\x60\xdf\xd5\x7c\x29\x52\x60\x07\x62\x18\x59\x51\x4e\xc4\xa0\x46\xa9\xa1\x31\x2a\x95\x91\x10\xd4\x45\xe2\xe1\xa2\x24\xc5\x32\x8c\x41\x70\x5e\x07\xda\xaa\x23\x2a\x9d\x07\x82\x23\x5f\x26\x37\x73\x1c\x97\xfb\x13\x08\x76\x7e\x1b\x4e\x9c\x10\xaa\xdf\xee\x50\x4b\x9e\x40\x85\xf9\xe3\xc5\xd1\x86\x7b\xa8\x28\x7a\x0a\x15\xd5\x58\x68\x64\xb6\xf9\xbb\x93\x8c\x8f\x9e\x2a\xcc\x9e\x86\x68\x53\xbd\x31\x05\xb9\x3b\x71\xde\x43\x31\x0d\x9d\x67\x04\xe7\x3b\x9a\xfd\x65\x44\xcd\xbf\x1c\x11\x3f\x9c\xbe\x53\x1d\x9a\x81\x1d\xf8\x7a\x55\xc9\xd1\xfa\x26\x0c\xb1\x2e\x25\x36\xe7\x7b\xb9\x72\x2c\xbc\x90\xc1\x17\x29\xc6\x81\x17\x84\xbc\xbf\x55\x91\x54\x5a\x36\x90\x03\xc5\xbd\xe3\x34\xed\x51\x2c\x75\xf5\x71\x76\xfe\xad\x5c\xf3\x4f\x36\xb7\x57\xfd\x8b\xa3\xd5\x7a\xf5\x8f\x7e\xb3\x3e\x7a\xf9\xfc\xf8\xa6\xdd\x5d\x3e\xbc\xf2\x8f\xd6\x39\xb3\xc7\x9f\x25\xe7\xd1\x0e\xb3\x91\x9b\x69\x90\x21\x3b\xc6\x70\x00\x17\x6a\xbd\x06\x74\x52\xee\x47\xee\xa1\xd1\x69\xc9\xf2\xe6\x6c\x04\x13\x39\xc1\xd2\x9e\x0b\xcc\x0c\xa8\x06\x47\xf3\x9d\x36\xd3\x60\x7d\x88\x11\x41\x9e\x51\xb2\x5a\x1a\x53\x84\x26\x88\x63\x05\x04\xc8\xb7\xbc\x00\x36\x03\x50\x33\x32\x79\x84\x4e\xa3\x3a\xa9\xd4\xc8\x70\x09\x60\x4c\x66\x51\xf6\xbe\xf5\xef\x3a\x03\x25\x74\xa2\xac\x15\xf5\x65\xee\x69\xce\x12\xb8\xa8\x61\xb8\xc9\x53\x5f\xb2\xf2\x2c\xd9\x50\xa2\x5e\x42\x32\x38\x28\x41\x04\x68\xa6\x31\x3a\x49\x96\xc4\xf9\xa6\x1f\xd4\x1a\x34\x35\x51\x1d\xc4\x94\x10\x39\x5f\xe5\x45\x66\xc4\x6c\x73\x08\xf5\x46\xca\x38\x5e\x8f\x75\x21\x39\x86\xd2\x91\x46\x70\x88\xce\x13\x96\x49\x58\x5c\x2a\xb7\x45\xf7\x50\x74\x5c\x5b\xee\xd9\x08\x86\xe4\x02\x96\x3b\x9f\x02\xb3\x62\xcc\x30\xa7\x18\x43\x34\x85\xd1\xf9\x24\x9a\x58\x73\x21\x20\x8a\x18\x9b\x90\x6c\x38\x44\xaf\xc1\xe8\x1c\xca\xab\x80\xb1\xc9\x23\xd4\xdc\xcc\xb5\x3b\x1b\x5c\x4f\x7b\x31\xb9\x7c\xe3\x51\x92\xca\x13\x65\x0e\x8c\xfc\x09\xe2\xa4\xb4\x90\xe6\x6c\xe4\x7d\xf0\x0e\xea\xf0\x9e\xbd\x8f\xac\x3e\xe1\xb3\xe4\x12\x13\x8b\x06\x6c\xa6\x26\xda\x4b\xf0\xc1\xa8\x48\x84\x11\x40\xd4\xdc\x4c\xa8\x01\xa5\x10\x54\xbc\x47\x4c\xcd\xe3\x6c\xfe\x5b\xf3\x06\x02\x3a\xe0\x64\x04\xe5\xca\x8c\x33\x50\x75\x3e\xf1\x23\x98\xc4\x68\x91\x46\xe4\x08\x88\xcd\xd4\x50\x10\x4e\x92\xdf\xde\x50\x0a\x82\x22\x0d\x68\x70\x0a\x14\xa4\xd2\xb0\x5c\xc6\x07\x3b\xe0\x8e\x91\x29\x04\x76\x09\x52\x7e\xab\x21\xc3\xaa\xe8\x10\x62\x26\x5f\xa9\x02\x0d\x44\x70\x48\x64\x0a\xa4\xde\xff\x9e\x19\x16\x09\x6d\x99\xd6\x81\xfc\x0c\x2c\x00\x4c\x8f\x62\xf7\x76\x12\xad\x95\xc5\x47\x31\x12\x07\xa9\x5e\x48\x9b\x29\x50\xf6\x4b\x54\x5e\x98\x80\xe5\x5d\xcc\x94\x44\x2c\xe7\x3b\xdb\x83\x8f\x3a\x86\xa6\xe6\x53\x4d\x07\xcb\x8a\x9b\x29\xe7\x22\xdc\x83\xac\xd6\x56\xce\x3e\x12\x0d\x8b\x91\x37\xb2\x27\x2b\xf7\x09\xea\x01\x32\x45\x87\x01\x12\x07\x18\xc3\x49\x5c\x88\x46\x8f\x32\xc0\x0a\x24\x61\x32\x94\x05\x34\x31\x3e\x43\xdb\x8c\x44\xaf\xd8\x9c\x19\x8c\x12\x12\xe7\x8b\x88\x10\x22\x87\xc0\xcd\x34\xc3\x28\x29\x25\x83\xa3\xa0\xf8\x18\xb3\x0c\x48\x49\x62\x5e\x9c\x50\x55\x54\x0b\x1a\xa2\x08\xd9\x71\xcc\x7b\x9f\xbc\xa4\x22\x19\xf6\x97\xb0\xcc\x03\x8f\xef\x60\x2b\x7c\xb1\x1c\xa7\xcf\xaa\x10\xa2\x7c\xf1\xeb\x09\xa2\x97\x62\x87\x08\x24\x16\xcd\x37\xf4\x11\x62\x34\x8d\xc1\xe6\x72\x8d\x99\x49\x3e\x96\x4b\xe2\xe2\x20\x18\x43\x53\x80\x7c\xd0\xd0\x14\xee\xad\xb4\xe4\x96\x88\xe5\x6e\x9e\x35\x28\x63\x06\x99\x10\x2c\x8c\x6c\xf3\x5a\xf0\xac\xcd\x59\x86\x05\x3d\xdf\x33\xab\xa0\xca\x81\x72\x99\x8e\x44\x2a\x54\x44\x48\x0c\x92\x5f\x79\xda\x31\x32\x41\x05\xd3\xbd\xcd\x0e\xd8\xd8\x2f\x05\x0b\x2c\x92\x6f\x51\x10\x81\x24\x0e\x9a\x88\x20\x14\x97\x5b\x31\x96\x22\x94\x7d\x48\x6a\xa8\x22\x29\x73\x55\x05\xc9\x53\x7e\xb5\x46\x18\x22\x2b\x15\xc9\x14\x12\x49\x78\x86\x62\x8e\x43\x44\x31\xc9\xe2\x12\xc4\xc4\xf9\x40\xa3\x02\x80\xa9\x81\xfc\x1e\x4a\x00\xef\x31\xea\x11\xee\x19\x23\x85\x1d\xb1\x18\x1a\x63\x50\x01\x13\x6a\xa7\x08\xa1\x31\x06\x36\x47\x41\xb2\xe1\xd1\x63\x39\x11\xec\x21\xb6\x55\xd5\x27\x05\x53\xb3\x47\x1c\x10\x53\x4a\xa1\xc2\x28\xc1\x93\xc1\x0a\x3e\xa4\x48\x15\xb6\xc9\xb7\xbc\x45\x54\x86\x40\xa6\x5d\x6c\xf6\x0c\x81\x0c\x05\x0a\x51\xb9\x6a\x63\x4e\x29\x33\x1f\xc1\x2b\x01\x57\x34\x5a\x31\x33\x34\x22\x27\x1c\xf4\x05\x8e\x31\x13\x3f\x78\x4c\x98\xa4\x4a\x8e\xde\x27\x29\x69\x02\x48\xa1\x6e\x2d\x4a\xc0\x92\x25\x14\x75\x00\x13\x44\xc8\xb1\x49\x5e\x50\x92\x16\xc1\x4c\x94\xad\x08\x0e\x93\xd1\x0e\x8a\xe0\x00\x0c\x91\x9e\xa1\x9d\x5b\x22\x12\x51\x03\xac\x56\x3c\x91\x34\xdf\x73\xa2\x57\x40\x43\xcb\x6d\x38\x50\xbe\xe0\x4f\xe4\x35\x9a\x60\x1b\x09\x62\x44\x31\x34\x4a\x10\x55\xb3\x58\xb2\xbf\x7d\x50\x83\x93\x4a\x14\x0e\x8d\xa1\xa4\xaa\x68\x5d\xd2\x07\x10\xcb\x76\x03\x03\x05\x28\xbd\x13\x72\xd7\x4a\xcd\x19\x08\x38\x02\x08\x94\x61\x22\xa0\x08\x56\xee\xed\xb0\xe2\x93\xb2\x66\x38\x62\x12\x31\x19\x60\xfb\xc8\xcd\x97\x98\x80\x29\x43\x09\xf3\x2b\x61\x2e\x07\x08\x93\x89\x0e\xbd\x88\x64\x99\x22\x4c\x5e\x2b\x1c\xec\x80\x93\x65\x6a\x4c\x89\xc4\x7c\x26\x36\xb9\xb1\x4f\xd1\xe0\x88\x14\x08\xa0\xc0\x4a\x84\x94\xe1\x24\x4a\xc6\xfe\x29\x88\x75\x51\xc4\x52\x58\x02\x59\x2a\x36\x20\xea\xbc\x8d\x2a\xd1\x12\x18\x02\x59\xdb\xca\x28\x00\xaa\x0d\x27\x62\xa7\x30\x6b\x2a\x26\xd8\x58\xe3\x39\x62\x2e\xc8\xac\x8a\x77\x70\x12\x1f\xca\xfb\xce\x98\x20\x54\x94\xf3\x4a\x55\xa8\x2d\x24\xaf\x0c\xc8\x79\x65\x8a\x92\x42\xd4\x0a\x23\x60\x2a\x8d\x33\x52\x4c\x9a\xcc\x60\x75\x1e\x19\x95\xca\xbb\x3c\x9b\xfc\xcc\x93\xe2\x84\x3d\x5b\x8c\xa2\xf3\x10\x10\x38\x35\xb6\xe7\xc0\xa0\x36\x38\x45\x07\x3e\x10\x27\x29\xae\x20\x8f\x81\xf3\x62\x40\xf0\xc6\xed\x0c\x7b\x95\x82\xd5\x66\x61\x51\x56\x2a\x2f\x13\xeb\xb5\x2b\xd8\x31\xa2\xbc\x3e\x2d\x37\x61\x99\xbc\x51\x93\x41\x3e\x96\x17\xe8\x99\xb9\x9e\xd3\x33\x36\xce\x21\xee\x31\x0d\xc8\x49\x0d\x8e\x31\xb0\xcd\xc5\x26\x0f\x6c\x13\x9c\x1b\x30\x25\x25\x29\xec\xd2\x94\x90\x72\x0d\x66\x52\x24\xc8\xfb\xa1\x7d\x01\x87\x6a\x61\x72\x8a\x21\xc6\x30\x86\x41\xc1\x49\x24\xd6\x64\xdd\x3f\xd9\x10\x94\xb0\x01\x45\xe7\xc9\x63\xcc\xb6\xb2\x70\x14\x6f\x1b\x37\x38\xb0\x84\xdc\x8c\x3d\xdb\x41\xc4\x26\x14\xcc\xc5\x3f\xe6\xde\x9b\x00\x09\x81\x8a\x08\x1b\xcb\x38\x0f\xae\x81\x20\x85\x94\x51\xf0\x1a\x35\xc7\x4a\x09\x01\xa1\x0a\x06\xb4\x9e\x99\x43\xe8\xc9\x6b\x1a\x60\x4a\x5e\xea\x5b\x53\x14\x88\xa1\xc2\x9c\x31\x29\xef\xcf\x8b\x11\x15\x63\x51\x85\x08\x45\x17\xfb\x88\x79\xe8\xa0\xa0\x84\x29\x0d\xa8\xe5\x97\x4d\x05\x01\x80\x74\xd0\x64\xa7\x1b\x23\xb2\x02\x0a\x84\xc1\x00\x08\x79\xa0\x66\x07\x51\x05\x03\x54\x3f\x24\x51\xce\x8d\x27\x44\x52\x0a\xb1\xc2\x2a\x64\xab\xc9\xb1\xc7\x90\x52\x95\x6d\x53\x62\xca\xed\xcc\x33\x26\xcd\xb5\x50\xc1\xa5\x40\x21\x25\xcb\xb3\xe0\xc9\x87\x5c\x65\x15\x9c\x4a\x02\x96\xfc\xaa\x32\xaa\x72\x8a\x0d\xa8\x77\x21\x79\xf0\x29\x5f\x18\xe7\x30\x5a\x0d\x88\x76\x72\x66\xce\x17\xc6\x9e\x7d\x04\xc8\xa5\x25\x3a\x73\x60\xe4\xfc\x2e\x2f\x7a\x60\x9f\xd9\x1c\x9c\x7a\xf1\x05\x0e\x90\x52\x4a\x99\x17\x21\x7f\xf6\xc3\x2a\x6a\xb4\xba\x87\x29\x97\x32\xeb\x9e\x44\x1c\x33\x6a\xb3\x48\x2c\x28\xa9\xcf\xcd\x2e\x1a\x05\x83\x89\xc8\x19\x18\x59\x00\x33\xcc\x21\x72\x64\x29\x30\xda\x74\x21\x06\x13\x88\x0f\x92\xd3\x47\x5c\xf0\x41\x8a\x42\xe0\x28\x88\x05\xb5\x58\x61\x9e\x73\x52\x08\x21\xe4\x09\x41\x6c\x30\x10\x05\x36\x38\x78\x04\x4a\xb5\x76\x31\x92\x86\x90\xaf\xae\x09\x05\xb1\xc2\x3e\x80\x42\x6e\x03\x8c\x6a\x05\xdd\xb6\x48\xce\x83\x72\x28\x43\x81\x8f\x11\x92\x79\x0f\xf3\x2b\xa5\x88\xe5\x65\x09\x08\x6a\x45\x8d\x14\x9a\xd1\xc0\xe4\x4b\x91\x41\xa7\xe8\x23\x94\x01\x22\x80\x30\xc6\x52\xae\x35\x00\x4b\xee\x73\x09\x90\xa3\xe4\xd2\xcc\x20\x52\xda\x99\xb0\x2a\x83\x66\x94\x38\x06\x05\xeb\xb5\x41\x98\x62\xee\xb5\x06\x13\x53\xc8\x2d\x58\x40\xbd\x72\xac\x30\x06\x35\xc1\xe2\x50\xd0\xdc\xbe\x87\x49\xca\xd5\x2e\x32\x4b\xc9\x6d\xb0\xc1\x22\x5a\x00\xc8\x31\x25\xcf\xa1\xd8\x11\x05\x08\x28\xbf\x81\x0c\xe5\xae\xd5\x3c\xca\xfe\x1e\x94\x6b\xa5\x92\xe6\xdb\xc6\x7a\xf9\x6a\x24\x8a\x5a\x2e\xbd\xcb\xf9\x3f\xd7\x0a\x2f\x59\xc5\xf0\xbe\x21\xb3\x58\x52\x3e\x7d\x07\x1f\xeb\xb0\xa5\xde\x44\x4b\x0a\x06\x8b\x00\x48\x3e\xc9\x48\xb4\x36\x14\xd0\x50\xf0\xec\xd5\x97\x5e\x21\x5c\x2e\x5a\x62\x04\x2d\x1d\xf3\xc1\xe8\x63\x03\x51\x0a\x2e\xc0\x33\xfb\x41\x92\x3f\x23\x74\x06\xc9\x72\x85\x9f\x45\x27\x94\xaf\xf9\x47\x58\x39\xa3\xd4\xbe\x58\x1e\x7d\x04\x1a\x49\x33\x15\xb9\x7a\x64\xc5\x09\xeb\x47\x07\xc0\x5a\x79\x54\xb3\xd9\xc6\x87\xec\x07\x4b\x9f\x72\xbc\x49\xe5\x43\x16\x0d\x58\x48\x03\xe6\xab\x64\xd1\xaa\xc2\x26\xad\x38\x9c\x34\xaa\x6b\xd0\x8e\x58\x8f\x41\xc5\xb8\x01\xb2\xb1\x53\x1e\xc5\x6c\xc8\xf4\x45\xc3\xd4\x0c\x89\x44\xf9\xc6\x55\xcb\xe1\x1b\xf2\x8b\xaa\x64\x31\x0a\xa1\x1e\xf8\x28\x47\x75\x0c\x4d\x81\xd8\x11\xe2\xfd\x65\xec\x2c\x38\xc8\xf9\x18\x72\x0f\xb2\x84\x8d\xb5\x37\x55\xec\x9e\x6d\xd6\x3a\xca\x29\xf3\x01\x86\xe2\x7c\xbd\x46\x9f\xee\x31\xef\xf2\x47\x01\xb3\x8a\x64\xc7\x81\xb1\xcb\x1f\x89\xc2\xfe\x84\x56\x2e\x81\x43\xbd\xb1\x02\x9f\x1c\x88\x8e\x31\x00\x3b\x24\x8b\xed\x42\xa4\xd2\x76\x80\x82\xc3\xf2\xb6\xc4\xa6\xf6\x82\x59\xf9\xe6\xc4\x23\x0c\x81\x72\xf9\x4e\x81\x7d\xca\x33\xa4\xc1\xf6\x60\xc8\x47\x4b\xf5\xac\x56\x90\x7d\x32\x9d\x90\xf2\x05\x4c\x82\x72\xc3\x34\x18\x39\x82\xa6\xe0\xed\xa8\x1a\xef\x2f\x83\x72\x6a\x51\x3b\xeb\xde\x87\xc6\x06\x55\xec\x9e\xe1\x86\x29\xc4\x98\xeb\xa1\x47\x89\x51\xac\x6b\x78\x70\x82\x89\x6a\xfc\x28\x59\x2b\x68\x4c\x75\x88\x21\xfa\xfb\x2e\x7a\xe8\xc9\xdf\x75\x71\x37\xfe\xe7\xf9\xf1\xf6\xf3\xa7\xf2\x41\xe3\xfc\x89\xe3\xfc\xa9\xfa\xf2\x81\xe3\xfa\x11\xf6\xf6\xee\xa3\xf8\xc7\x7f\xdf\xae\x57\x47\x4d\xd7\xee\xda\xc9\xdd\x27\xb4\xcb\xf7\xb8\x5e\x3e\xf9\xf6\xcd\xfe\x7c\xba\x9a\xaf\xbb\xbe\x71\xbf\xfd\x96\x85\xde\x7d\xe2\xfa\x0f\x4a\x5d\x6c\xed\xa1\x6f\xd9\xc8\xa3\x5d\xff\xeb\x6e\xd2\x9b\xe4\xe5\xea\xd3\xf1\xf0\xcb\x64\xb9\xea\xfa\x5f\xfb\xad\xfb\xfb\xf6\xe8\x2f\xcd\x3f\xfb\x28\xf9\xe1\xea\x49\x90\xbe\x6f\x41\x67\x28\x29\x80\x76\x33\x5e\x74\xa0\xd8\xf7\x18\xa9\xc3\xb6\x17\x13\xf7\xec\x7b\x7a\x7f\xa7\xbe\x79\x37\x13\xbf\x98\x75\xed\x4c\x3b\xee\x68\xd1\x2d\x24\x70\xd7\x85\xc8\x8b\x10\x3a\x0c\x23\x3d\xf3\xed\xd6\xf5\xdb\x79\x7b\xd3\x1f\xdf\xfd\xfa\x7d\x35\x77\xeb\x26\x51\x20\x52\x9a\x51\xdf\x42\xe7\x67\xdc\xcf\x78\x1e\x7c\x4c\xcc\xda\x2d\xa4\x4f\x8b\xb1\xa2\x75\xd7\x5f\x2f\x37\x9b\xf5\xe6\xf8\x7a\xdd\xf5\xc7\x7f\x6f\x3f\xb7\x25\x2e\xa3\x5f\xff\x85\xe2\xdf\x23\x62\x12\x02\x42\x9c\x77\x80\x1a\xfb\x56\xbb\x45\x90\x10\x04\x80\xdb\xde\x47\x15\xd5\xef\xd8\xb4\xb9\x9d\x7d\xcd\x3f\xfe\x98\x1d\xfb\xc7\x26\x7d\xcb\x34\x6f\xa9\xa5\x59\xd7\x29\xb5\x82\x11\xa0\x8f\xac\xdc\xa9\x02\xf1\xec\x3b\xba\xbf\xb6\xd7\x57\xf9\xc7\x1f\xd3\xbd\x7f\x6c\x42\x0b\xc0\xd4\x7a\xef\x89\x53\x4f\x3e\xc8\xac\xf7\x0b\x95\x00\x29\x46\x9e\x29\x7c\x47\xf7\xaf\xd7\x57\xf6\xbf\x3f\xa6\xb9\x3e\x34\x01\xdf\xcf\xe3\x2c\xce\xe7\x0a\xfd\xc2\x58\x87\x32\xc3\xd0\x4a\x4a\x8b\x6e\xde\xa9\x37\xa9\x4f\x9a\xe6\x9f\x25\xe5\x76\x33\xff\xd7\xdf\xc5\x38\xde\x96\x2f\xc6\x6d\x27\x2d\x04\x0e\x7e\xde\x2d\x66\x1d\xb7\xb9\xbc\x42\x68\xe7\x1e\x3c\x45\x8f\x88\x39\xba\x2f\xff\xbc\x9e\xcd\xfa\x76\x67\x89\x1a\x50\xe7\x73\x1b\x68\xe3\x2c\x52\x37\xef\x12\xcd\x13\xd2\x3c\x85\x7e\xd6\x27\xea\x0e\xb4\x3c\x79\xf2\xed\xdb\x72\xd1\xb8\x93\xe9\xd9\xf6\x34\x7f\x03\xa3\x2b\x45\xe8\xf7\xeb\x6e\xe7\x57\xdb\xbd\x76\x69\xb1\x9d\x87\x8e\xe2\xbc\x5d\xf8\x34\x5f\xf4\x3d\xb6\xdc\xe3\x6c\xce\xa9\x9b\x2f\xc2\x81\xf6\x6f\xdf\xfa\x95\xe9\x2b\x36\xbc\x6f\x37\xbb\xa5\x15\xb7\x3f\x6b\xc9\xcd\x5e\xc0\x9d\xd7\xa3\x28\xc2\x02\x59\x16\x90\x64\xd1\xc3\xbc\x87\x10\xbc\xf2\x6c\x31\xf3\x2c\x9e\xff\x5f\xbc\x3e\xd2\x57\xf7\x3f\x9f\xb5\x9c\x3c\x47\x60\xcc\x77\x8b\x24\x1d\x30\xce\x03\xd3\x6c\x36\xa7\x8e\xbe\xbb\xff\xb7\xed\x75\xbf\xbd\x69\xe7\xfd\x9f\xdd\xff\xaa\x3c\x3d\x18\xb3\x48\x94\xfa\x8e\xb1\x4f\xb3\x48\x8b\xd4\xc1\x6c\x36\x17\x14\x9d\xf5\x1a\xfb\x10\xe6\xff\xc4\x98\xdf\xa9\x73\xb9\x5a\xee\x26\x08\x7d\x6b\x89\xca\x1d\x10\xb1\x06\x16\x9e\xa9\x87\x7e\x31\x07\xe9\xb1\x3b\x64\xdb\xef\x93\x5c\xbf\x38\xd5\xc6\x76\x96\x58\x42\x8c\x9d\x27\x46\x9d\x59\x69\xf4\xd1\xcf\x67\x8c\x9c\x64\xf1\x40\xf6\xef\x14\x7f\xdd\xef\x36\xcb\xf9\x76\x72\xb3\x59\x7f\x5e\x76\xfd\x66\xef\x3e\x82\x2e\xf4\x34\xf3\xfd\x22\xcc\x25\x76\x8a\x44\x71\x1e\xba\xd0\xf6\x6d\xbb\x10\x96\x3f\xb5\x99\x87\xda\x6e\x36\xeb\xeb\x7e\x77\xd9\xdf\x6e\x27\xb2\x20\x98\xb5\x34\x0b\x8b\x45\x17\xc5\x2f\xda\x04\xda\xfa\x36\x68\x22\xea\x93\xc6\x07\x1a\xbf\x7d\x6b\x36\xed\xea\x53\xdf\xb8\xd3\x5f\x77\x9b\xfa\x45\xa9\x6d\xf3\xdb\x6f\x0f\x6c\xf9\xed\xb7\xd1\x93\xf6\x5c\xbf\xea\x9a\x3f\x4a\xa8\xdb\xe5\x44\x7d\x4f\xd8\x75\x12\x30\x5f\x17\x74\x31\x08\xce\x59\xa9\x4d\x1d\xe3\x43\x46\x0f\x5f\x29\xcb\x5f\x13\x5b\x76\xc3\xf7\xfa\x67\xed\x76\x39\x9f\x74\x9b\xf5\x4d\xb7\xfe\xb2\x9a\x7c\x59\x6f\xae\x2f\xd7\x57\xbd\x3d\xb9\xff\xce\x56\xf9\xde\xd9\xf3\xe3\xf2\x9f\x09\xf8\xbf\x01\x00\x00\xff\xff\x34\x35\x27\x7a\x37\x40\x00\x00") + +func web_uiIndexHtmlBytes() ([]byte, error) { + return bindataRead( + _web_uiIndexHtml, + "web_ui/index.html", + ) +} + +func web_uiIndexHtml() (*asset, error) { + bytes, err := web_uiIndexHtmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/index.html", size: 16439, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiOidcCallback = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x91\xcd\x6a\xc3\x30\x10\x84\xef\x79\x8a\x6d\x2e\x71\xa0\xb5\xaf\x85\xc8\xb9\xb8\x2e\x94\x40\x7f\xfc\x73\xc8\xc9\x08\x7b\x6b\x0b\x64\x29\x95\xd6\x09\xa5\xf4\xdd\x8b\x91\xdc\xa6\xc4\xe4\x24\x2d\xa3\xf9\x76\x56\xcb\x6e\x1e\x5e\x92\x62\xff\x9a\x42\x47\xbd\xdc\x2e\x98\x3b\x00\x58\x87\xbc\x19\x2f\x00\xac\x47\xe2\x50\x77\xdc\x58\xa4\x78\x59\x16\x8f\x77\xf7\x4b\x2f\x91\x20\x89\xdb\x44\x2b\x3b\x48\x16\xb9\xca\x29\xb6\x36\xe2\x40\xae\x00\x38\x72\x03\x49\x99\x65\xe9\x73\x51\x65\xe9\x5b\x99\xe6\x45\xb5\x4b\xf7\x10\xc3\xaa\xaa\x48\x1b\x21\x2a\x83\x1f\x03\x5a\x5a\x6d\xce\x2c\x07\x54\x8d\x50\x6d\xe6\xa4\x1d\x7e\x42\x0c\x27\xa1\x1a\x7d\x0a\xa5\xae\xb9\xcc\x49\x1b\xde\x62\xd8\x22\x3d\x11\xf6\xc1\x4c\x8b\xf5\x66\xe1\x81\xe2\x1d\x82\x0b\xe0\x1a\xbe\xbc\x0c\xb3\x64\x83\xbd\x3e\xe2\x15\xf8\x64\x1e\xe3\x0e\x46\xfe\x0f\x48\x42\xab\x90\x74\x4e\x46\xa8\x36\x38\x7b\x3d\xd7\xca\xfa\x21\x2e\x32\xde\x8e\xe0\x5f\xf3\xf7\x34\x8f\x67\xd4\x52\x5b\x9c\xd8\x2c\xfa\xfb\x77\x16\xb9\x1d\xb2\xc8\x2d\xf5\x27\x00\x00\xff\xff\xd4\xee\xca\xe3\xec\x01\x00\x00") + +func web_uiOidcCallbackBytes() ([]byte, error) { + return bindataRead( + _web_uiOidcCallback, + "web_ui/oidc/callback", + ) +} + +func web_uiOidcCallback() (*asset, error) { + bytes, err := web_uiOidcCallbackBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/oidc/callback", size: 492, mode: os.FileMode(420), modTime: time.Unix(1645446280, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiRobotsTxt = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\xc8\x28\x29\x29\xb0\xd2\xd7\x2f\x2f\x2f\xd7\x2b\xca\x4f\xca\x2f\x29\x2e\xa9\x28\xd1\xcb\x2f\x4a\xe7\x0a\x2d\x4e\x2d\xd2\x4d\x4c\x4f\xcd\x2b\xb1\x52\xd0\xe2\x72\xc9\x2c\x4e\xcc\xc9\xc9\x2f\xb7\x52\xd0\xe7\x02\x04\x00\x00\xff\xff\x62\x07\x43\x8a\x35\x00\x00\x00") + +func web_uiRobotsTxtBytes() ([]byte, error) { + return bindataRead( + _web_uiRobotsTxt, + "web_ui/robots.txt", + ) +} + +func web_uiRobotsTxt() (*asset, error) { + bytes, err := web_uiRobotsTxtBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/robots.txt", size: 53, mode: os.FileMode(420), modTime: time.Unix(1645446280, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _web_uiToriiRedirectHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x91\x4f\x4b\xc3\x40\x10\xc5\xef\xfd\x14\x63\x2f\x4d\x41\x93\xab\xd0\x4d\x41\x6a\x04\x29\x58\xcd\x9f\x43\x4f\x61\x49\xc6\x64\x61\x93\xad\x93\x49\x8b\x88\xdf\x5d\xc2\x6e\xb4\xd2\xd0\xd3\xee\xf2\xe6\xfd\xe6\xcd\x8e\xb8\x79\xdc\x6d\xd2\xfd\x6b\x04\x35\x37\x7a\x3d\x13\xf6\x00\x10\x35\xca\x72\xb8\x00\x88\x06\x59\x42\x51\x4b\xea\x90\xc3\x79\x96\x3e\xdd\xdd\xcf\x9d\xc4\x8a\x35\xae\x53\x43\x4a\xc1\xee\xa1\xe7\x1a\x62\x2c\x15\x61\xc1\x22\xb0\x9a\xad\xeb\x0a\x52\x07\xb6\x0f\x80\xa3\x24\xd8\x64\x71\x1c\xbd\xa4\x79\x1c\xbd\x65\x51\x92\xe6\xdb\x68\x0f\x21\x2c\xf2\x9c\x07\x58\x4e\xf8\xd1\x63\xc7\x8b\xd5\x99\xe5\x80\x6d\xa9\xda\x2a\xb6\xd2\x16\x3f\x21\x84\x93\x6a\x4b\x73\xf2\xb5\x29\xa4\x4e\xd8\x90\xac\xd0\xaf\x90\x9f\x19\x1b\x6f\xa2\xc5\x72\x35\x73\x40\xf5\x0e\xde\x05\x70\x09\x5f\x4e\x86\x49\x32\x61\x63\x8e\x78\x05\x3e\x9a\x87\xb8\x3d\xe9\xff\x01\x59\x99\xd6\x67\x93\x30\xa9\xb6\xf2\xce\xaa\xa7\x5a\x75\x6e\x88\x8b\x8c\xb7\x03\xf8\xd7\xfc\x3d\xce\xe3\x18\x85\x36\x1d\x8e\x6c\x11\xfc\xfd\xbb\x08\xec\x46\x45\x60\x57\xfc\x13\x00\x00\xff\xff\xe6\x06\x7f\x8f\xfa\x01\x00\x00") + +func web_uiToriiRedirectHtmlBytes() ([]byte, error) { + return bindataRead( + _web_uiToriiRedirectHtml, + "web_ui/torii/redirect.html", + ) +} + +func web_uiToriiRedirectHtml() (*asset, error) { + bytes, err := web_uiToriiRedirectHtmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "web_ui/torii/redirect.html", size: 506, mode: os.FileMode(420), modTime: time.Unix(1645446356, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "web_ui/assets/apple-touch-icon-01cd4680782fbb5bc02301347df9903d.png": web_uiAssetsAppleTouchIcon01cd4680782fbb5bc02301347df9903dPng, + "web_ui/assets/codemirror/mode/javascript/javascript-77218cd1268ea6df75775114ae086566.js": web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js, + "web_ui/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js": web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs, + "web_ui/assets/codemirror/mode/xml/xml-10ec8b8cc61ef0fbd25b27a599fdcd60.js": web_uiAssetsCodemirrorModeXmlXml10ec8b8cc61ef0fbd25b27a599fdcd60Js, + "web_ui/assets/codemirror/mode/yaml/yaml-3f129a000349e3075be0f65719884b61.js": web_uiAssetsCodemirrorModeYamlYaml3f129a000349e3075be0f65719884b61Js, + "web_ui/assets/consul-acls/routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js": web_uiAssetsConsulAclsRoutes75a2ac7d38caf09cfee2a4e2bc49dcf7Js, + "web_ui/assets/consul-acls/services-8b6b2b2bea3add7709b8075a5ed5652b.js": web_uiAssetsConsulAclsServices8b6b2b2bea3add7709b8075a5ed5652bJs, + "web_ui/assets/consul-nspaces/routes-f939ed42e9b83f9d1bbc5256be68e77c.js": web_uiAssetsConsulNspacesRoutesF939ed42e9b83f9d1bbc5256be68e77cJs, + "web_ui/assets/consul-nspaces/services-8b6b2b2bea3add7709b8075a5ed5652b.js": web_uiAssetsConsulNspacesServices8b6b2b2bea3add7709b8075a5ed5652bJs, + "web_ui/assets/consul-partitions/routes-cba490481425519435d142c743bbc3d3.js": web_uiAssetsConsulPartitionsRoutesCba490481425519435d142c743bbc3d3Js, + "web_ui/assets/consul-partitions/services-85621f245f195fe1ce177064bfb04504.js": web_uiAssetsConsulPartitionsServices85621f245f195fe1ce177064bfb04504Js, + "web_ui/assets/consul-ui/routes-7726cc49168b83dcd93c923c97ebe93d.js": web_uiAssetsConsulUiRoutes7726cc49168b83dcd93c923c97ebe93dJs, + "web_ui/assets/consul-ui/routes-debug-8f884a3e3f7105d43b7b4024db9b4c99.js": web_uiAssetsConsulUiRoutesDebug8f884a3e3f7105d43b7b4024db9b4c99Js, + "web_ui/assets/consul-ui/services-a17470cdfbd4a4096117ac0103802226.js": web_uiAssetsConsulUiServicesA17470cdfbd4a4096117ac0103802226Js, + "web_ui/assets/consul-ui/services-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js": web_uiAssetsConsulUiServicesDebug5a3f1d2e3954a05aa8383f02db31b8e6Js, + "web_ui/assets/consul-ui-1931ddc38430fffd3fdb3a7ec5b01c18.css": web_uiAssetsConsulUi1931ddc38430fffd3fdb3a7ec5b01c18Css, + "web_ui/assets/consul-ui-60e32dd57229711d8752c463a9d423d3.js": web_uiAssetsConsulUi60e32dd57229711d8752c463a9d423d3Js, + "web_ui/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js": web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs, + "web_ui/assets/encoding-cdb50fbdab6d4d3fdf574dd784f77d27.js": web_uiAssetsEncodingCdb50fbdab6d4d3fdf574dd784f77d27Js, + "web_ui/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js": web_uiAssetsEncodingIndexes75eea16b259716db4fd162ee283d2ae5Js, + "web_ui/assets/favicon.ico": web_uiAssetsFaviconIco, + "web_ui/assets/favicon.svg": web_uiAssetsFaviconSvg, + "web_ui/assets/init-21ea65714d133467454b601efc15e2dd.js": web_uiAssetsInit21ea65714d133467454b601efc15e2ddJs, + "web_ui/assets/loading-cylon-pink.svg": web_uiAssetsLoadingCylonPinkSvg, + "web_ui/assets/metrics-providers/consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js": web_uiAssetsMetricsProvidersConsul31d7e3b0ef7c58d62338c7d7aeaaf545Js, + "web_ui/assets/metrics-providers/prometheus-5f31ba3b7ffd850fa916a0a76933e968.js": web_uiAssetsMetricsProvidersPrometheus5f31ba3b7ffd850fa916a0a76933e968Js, + "web_ui/assets/vendor-69ef69e98b7d14d1513f8056b6c6b48d.css": web_uiAssetsVendor69ef69e98b7d14d1513f8056b6c6b48dCss, + "web_ui/assets/vendor-a8ab945788d03426b8cd1080cb42495f.js": web_uiAssetsVendorA8ab945788d03426b8cd1080cb42495fJs, + "web_ui/index.html": web_uiIndexHtml, + "web_ui/oidc/callback": web_uiOidcCallback, + "web_ui/robots.txt": web_uiRobotsTxt, + "web_ui/torii/redirect.html": web_uiToriiRedirectHtml, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "web_ui": &bintree{nil, map[string]*bintree{ + "assets": &bintree{nil, map[string]*bintree{ + "apple-touch-icon-01cd4680782fbb5bc02301347df9903d.png": &bintree{web_uiAssetsAppleTouchIcon01cd4680782fbb5bc02301347df9903dPng, map[string]*bintree{}}, + "codemirror": &bintree{nil, map[string]*bintree{ + "mode": &bintree{nil, map[string]*bintree{ + "javascript": &bintree{nil, map[string]*bintree{ + "javascript-77218cd1268ea6df75775114ae086566.js": &bintree{web_uiAssetsCodemirrorModeJavascriptJavascript77218cd1268ea6df75775114ae086566Js, map[string]*bintree{}}, + }}, + "ruby": &bintree{nil, map[string]*bintree{ + "ruby-ea43ca3a3bdd63a52811e8464d66134b.js": &bintree{web_uiAssetsCodemirrorModeRubyRubyEa43ca3a3bdd63a52811e8464d66134bJs, map[string]*bintree{}}, + }}, + "xml": &bintree{nil, map[string]*bintree{ + "xml-10ec8b8cc61ef0fbd25b27a599fdcd60.js": &bintree{web_uiAssetsCodemirrorModeXmlXml10ec8b8cc61ef0fbd25b27a599fdcd60Js, map[string]*bintree{}}, + }}, + "yaml": &bintree{nil, map[string]*bintree{ + "yaml-3f129a000349e3075be0f65719884b61.js": &bintree{web_uiAssetsCodemirrorModeYamlYaml3f129a000349e3075be0f65719884b61Js, map[string]*bintree{}}, + }}, + }}, + }}, + "consul-acls": &bintree{nil, map[string]*bintree{ + "routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js": &bintree{web_uiAssetsConsulAclsRoutes75a2ac7d38caf09cfee2a4e2bc49dcf7Js, map[string]*bintree{}}, + "services-8b6b2b2bea3add7709b8075a5ed5652b.js": &bintree{web_uiAssetsConsulAclsServices8b6b2b2bea3add7709b8075a5ed5652bJs, map[string]*bintree{}}, + }}, + "consul-nspaces": &bintree{nil, map[string]*bintree{ + "routes-f939ed42e9b83f9d1bbc5256be68e77c.js": &bintree{web_uiAssetsConsulNspacesRoutesF939ed42e9b83f9d1bbc5256be68e77cJs, map[string]*bintree{}}, + "services-8b6b2b2bea3add7709b8075a5ed5652b.js": &bintree{web_uiAssetsConsulNspacesServices8b6b2b2bea3add7709b8075a5ed5652bJs, map[string]*bintree{}}, + }}, + "consul-partitions": &bintree{nil, map[string]*bintree{ + "routes-cba490481425519435d142c743bbc3d3.js": &bintree{web_uiAssetsConsulPartitionsRoutesCba490481425519435d142c743bbc3d3Js, map[string]*bintree{}}, + "services-85621f245f195fe1ce177064bfb04504.js": &bintree{web_uiAssetsConsulPartitionsServices85621f245f195fe1ce177064bfb04504Js, map[string]*bintree{}}, + }}, + "consul-ui": &bintree{nil, map[string]*bintree{ + "routes-7726cc49168b83dcd93c923c97ebe93d.js": &bintree{web_uiAssetsConsulUiRoutes7726cc49168b83dcd93c923c97ebe93dJs, map[string]*bintree{}}, + "routes-debug-8f884a3e3f7105d43b7b4024db9b4c99.js": &bintree{web_uiAssetsConsulUiRoutesDebug8f884a3e3f7105d43b7b4024db9b4c99Js, map[string]*bintree{}}, + "services-a17470cdfbd4a4096117ac0103802226.js": &bintree{web_uiAssetsConsulUiServicesA17470cdfbd4a4096117ac0103802226Js, map[string]*bintree{}}, + "services-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js": &bintree{web_uiAssetsConsulUiServicesDebug5a3f1d2e3954a05aa8383f02db31b8e6Js, map[string]*bintree{}}, + }}, + "consul-ui-1931ddc38430fffd3fdb3a7ec5b01c18.css": &bintree{web_uiAssetsConsulUi1931ddc38430fffd3fdb3a7ec5b01c18Css, map[string]*bintree{}}, + "consul-ui-60e32dd57229711d8752c463a9d423d3.js": &bintree{web_uiAssetsConsulUi60e32dd57229711d8752c463a9d423d3Js, map[string]*bintree{}}, + "css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js": &bintree{web_uiAssetsCssEscape851839b3ea1d0b4eb4c7089446df5e9fJs, map[string]*bintree{}}, + "encoding-cdb50fbdab6d4d3fdf574dd784f77d27.js": &bintree{web_uiAssetsEncodingCdb50fbdab6d4d3fdf574dd784f77d27Js, map[string]*bintree{}}, + "encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js": &bintree{web_uiAssetsEncodingIndexes75eea16b259716db4fd162ee283d2ae5Js, map[string]*bintree{}}, + "favicon.ico": &bintree{web_uiAssetsFaviconIco, map[string]*bintree{}}, + "favicon.svg": &bintree{web_uiAssetsFaviconSvg, map[string]*bintree{}}, + "init-21ea65714d133467454b601efc15e2dd.js": &bintree{web_uiAssetsInit21ea65714d133467454b601efc15e2ddJs, map[string]*bintree{}}, + "loading-cylon-pink.svg": &bintree{web_uiAssetsLoadingCylonPinkSvg, map[string]*bintree{}}, + "metrics-providers": &bintree{nil, map[string]*bintree{ + "consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js": &bintree{web_uiAssetsMetricsProvidersConsul31d7e3b0ef7c58d62338c7d7aeaaf545Js, map[string]*bintree{}}, + "prometheus-5f31ba3b7ffd850fa916a0a76933e968.js": &bintree{web_uiAssetsMetricsProvidersPrometheus5f31ba3b7ffd850fa916a0a76933e968Js, map[string]*bintree{}}, + }}, + "vendor-69ef69e98b7d14d1513f8056b6c6b48d.css": &bintree{web_uiAssetsVendor69ef69e98b7d14d1513f8056b6c6b48dCss, map[string]*bintree{}}, + "vendor-a8ab945788d03426b8cd1080cb42495f.js": &bintree{web_uiAssetsVendorA8ab945788d03426b8cd1080cb42495fJs, map[string]*bintree{}}, + }}, + "index.html": &bintree{web_uiIndexHtml, map[string]*bintree{}}, + "oidc": &bintree{nil, map[string]*bintree{ + "callback": &bintree{web_uiOidcCallback, map[string]*bintree{}}, + }}, + "robots.txt": &bintree{web_uiRobotsTxt, map[string]*bintree{}}, + "torii": &bintree{nil, map[string]*bintree{ + "redirect.html": &bintree{web_uiToriiRedirectHtml, map[string]*bintree{}}, + }}, + }}, +}} + +// RestoreAsset restores an asset under the given directory +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil +} + +// RestoreAssets restores an asset under the given directory recursively +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) +} + +func assetFS() *assetfs.AssetFS { + for k := range _bintree.Children { + return &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: k} + } + panic("unreachable") +} diff --git a/agent/uiserver/buf_index_fs.go b/agent/uiserver/buf_index_fs.go index 71066d8722c13..48c86af872aaa 100644 --- a/agent/uiserver/buf_index_fs.go +++ b/agent/uiserver/buf_index_fs.go @@ -1,19 +1,21 @@ package uiserver import ( - "io/fs" + "net/http" + "os" ) -// bufIndexFS is an implementation of fs.FS that intercepts requests for +// bufIndexFS is an implementation of http.FS that intercepts requests for // the index.html file and returns a pre-rendered file from memory. type bufIndexFS struct { - fs fs.FS - bufIndex fs.File + fs http.FileSystem + indexRendered []byte + indexInfo os.FileInfo } -func (fs *bufIndexFS) Open(name string) (fs.File, error) { - if name == "index.html" { - return fs.bufIndex, nil +func (fs *bufIndexFS) Open(name string) (http.File, error) { + if name == "/index.html" { + return newBufferedFile(fs.indexRendered, fs.indexInfo), nil } return fs.fs.Open(name) } diff --git a/agent/uiserver/buffered_file.go b/agent/uiserver/buffered_file.go index f5ebf0cf5555e..13aa84e030d5d 100644 --- a/agent/uiserver/buffered_file.go +++ b/agent/uiserver/buffered_file.go @@ -2,60 +2,66 @@ package uiserver import ( "bytes" - "io/fs" + "errors" "os" "time" ) -// bufferedFile implements fs.File and allows us to modify a file from disk by +// bufferedFile implements http.File and allows us to modify a file from disk by // writing out the new version into a buffer and then serving file reads from // that. type bufferedFile struct { - buf *bytes.Buffer - info fs.FileInfo + buf *bytes.Reader + info os.FileInfo } -var _ fs.FileInfo = (*bufferedFile)(nil) - -func newBufferedFile(buf *bytes.Buffer, info fs.FileInfo) *bufferedFile { +func newBufferedFile(buf []byte, info os.FileInfo) *bufferedFile { return &bufferedFile{ - buf: buf, + buf: bytes.NewReader(buf), info: info, } } -func (b *bufferedFile) Stat() (fs.FileInfo, error) { - return b, nil +func (t *bufferedFile) Read(p []byte) (n int, err error) { + return t.buf.Read(p) } -func (b *bufferedFile) Read(bytes []byte) (int, error) { - return b.buf.Read(bytes) +func (t *bufferedFile) Seek(offset int64, whence int) (int64, error) { + return t.buf.Seek(offset, whence) } -func (b *bufferedFile) Close() error { +func (t *bufferedFile) Close() error { return nil } -func (b *bufferedFile) Name() string { - return b.info.Name() +func (t *bufferedFile) Readdir(count int) ([]os.FileInfo, error) { + return nil, errors.New("not a directory") +} + +func (t *bufferedFile) Stat() (os.FileInfo, error) { + return t, nil +} + +func (t *bufferedFile) Name() string { + return t.info.Name() } -func (b *bufferedFile) Size() int64 { - return int64(b.buf.Len()) +func (t *bufferedFile) Size() int64 { + return int64(t.buf.Len()) } -func (b *bufferedFile) Mode() os.FileMode { - return b.info.Mode() +func (t *bufferedFile) Mode() os.FileMode { + return t.info.Mode() } -func (b *bufferedFile) ModTime() time.Time { - return b.info.ModTime() +func (t *bufferedFile) ModTime() time.Time { + return t.info.ModTime() } -func (b *bufferedFile) IsDir() bool { +func (t *bufferedFile) IsDir() bool { return false } -func (b *bufferedFile) Sys() any { +func (t *bufferedFile) Sys() interface{} { return nil } diff --git a/agent/uiserver/dist/assets/apple-touch-icon-01cd4680782fbb5bc02301347df9903d.png b/agent/uiserver/dist/assets/apple-touch-icon-01cd4680782fbb5bc02301347df9903d.png deleted file mode 100644 index 792607d84720b7faac2c7af33e0bac4b5a6e0941..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7243 zcmb7JRa_Kau->J+q`Rb>rEBT#QbIv$=@4mQL0UjS8iA!7M3xqikQ7)_X(X4G?&k7; zx%c@#%$Yee-<+rO`_7!1I0HR(LOfbL002O!si9)@q~ZSw4%X8uH-;thq=0XY)Rh2r zG==&~R%oa>81jSYS#mY+Nm?b+c%20mWecAJM4Dq)!v>sL3zH_#F zaEa<{fA{YnD#-LQ^mmF1kfj%mvH?2Hx=%7jLYd6R4B&^_aO2~EEvsZy?J!`NSbPpZ zAVm9JIV1r9{{bz1Lbz8RkSCHtDXG7vVPe4eXY-1L(GY0p8Q-7)cxk&aNDW|N^TUXe z1lnxkA3uNt#wU0&f`*33K|_MqX{tfl9BKPR{C+q5Co+o=2aSsJ@g&-K7f!B%&b}rMbE) zG22(I6YB-NK@YQQ%h8Qg<;Jva_r=lRzewA)mD+_P=~Dy598_=Zi^SE96XJfHCw9%Z z_t!eZH(m@qT44AyA`GXOKYr;NmUi$183rm~jh=T%pY%httx1HsYLknC3|FI-OH- zl17rSr#7(h<1UclOES&mz|2n1Le^{H=W6fZw7oh|Izxaduj%HaJAEcxaeQB z%nLhfDcu!=iS4DHsw>Ywx6{2vK(xS|(n<*5okkLii@aS$`+lr|O9sHKs6g8H$ApU4 z;(0pQNTfu!(nhVmGQHedz_T?;-&3;42<^{%2lM^YI*+)e|m28g{xWMSNBC4UzNS#J6` z9^|-PmOOx~J;6%na-W4$2mZ+aiN^9RYQm?j3nVCNwPjTa!zU-G`VgwGD{-db{)g~h zMVkawA4KrxAMM$pW+4y}(tfvKOi1X6;!s9wFK>ry(c2ijt)OGy}fguEo zKmG;iPEM0$3FlbEK2X98>Z=wffRDn;=jLkBSkY)8%wq915L?$vH@i`!jDRZ7gA*%x zegJc3JG`P_2wEofwht~vGDvC>E6isgeDBL8eJ^Ck#b%6e2cXq_LF*YfGGpThE6=H} zBUlo1Kqkd)3L|w6`Eb|z(zJtswlvpubRds%~A^EoNUCdh-lf}34<@dO4K1zcbFn|I>s1bh=zBT$v+%< z<8JSp|F{605E^x_pOR<1NtWfTD7HFNpLCutQ?@38U;TuodL@ zWq9MW%(B2d!f|_83}4$(Zjuh5FhWjA78U5gyuU#~tCxV0)9mj-+ z&4dnV?o5^za3eCC@8g14BE;>UtCln3rMKjdp)RZrs_9_6EMBLo#55vgi*d#=MWSj- z!fM{F*d{)^IBn_ubK)954uV{x%I<=~8?eE%1)=zBApehSfIp8W~oPm3gFTAr*C~y4YEx4Yesv*4Oh*`>YxW9-Zbzf zh1dSK6npdfKF!{TX2l%>eB>Iw(Xea%3B}8pU3FI<^x8bp*`uzp>p#(Su;3gS+v&DT zWmf7Db^WnA?tDoy9g+@t#GLO+LrIeOX4+h?57@qy0T& zU1{CSn8!G)g2{>xB{{2Qa$aN^v#!4^@9`}u=8NTGob3gX(Htl~Y`B7O`mrpRl>4>j zehshNsL!hLDu?d*NO?i@Ka}aOoA5hhE_9^?t1xewZkr*1PF@4??@Gd8u=>W=-8<}N z@ziW?(bYeR*`+Q{Y+1+kW;inVzOv^lW>ZW{b{Z5;4NN2D?!~m)ay>}Vw>#`b@bu7z z1lr{N=FMx4@Ohh#_w&Bu8*Ldhf`2(CPT*DA#1#SZqy);thXW=2#aoJH-n*Lu^YZ=; z88;(cRAW@Tnkx{?-{0tLQX>k9yM}SLXE@;U-vDnEJoM!HH${!X*xs(q<)xqF*5^G? z2QfCG7(EHjh{&%^fRx9f^rS%TP0FzjdQtE{G3n`O%`x;$K)3~t9sZiy%d1ndZ@h6e z52}9iA^0NbzQ5@T{)tGN-+32px)szb_P;yf2Yb{SEjVRo9$mFKVj;(=tt5LgG(5P zZ{}ruZRSobzSyH7iN=dX6Uk;T@5WEKN8w1X+C#(mu8scX6m5uHJBA&_OKlHbau;w4 zSK(#1VL*EOy2>?=xZcdX&}y}_#8(2g{>C_T^%Jcqj@nowrw*@W;dC#UPEf#wosHhyycT#3&awztMc2rd;K9nw?-_#0j{;pFTK5!CRz`dlv1M!S_UP0-!I5(daSZxNKis+7BV-8mIKTQ zvE^2#ATD%hpVHP_Gfc1Ov!_H5APTou4@ppcQ$(tqOa$Xbb~`sV^P%2{zy6EaVt@p> z<=?W`SEb*}aDzFk&CQa&f-L-^cQX#&QOGPXv@0S_V6 z$&24ZlHi9QL3)J7?Cih;icv?A!Q$fHjQLHH(rT%ed^w z3Z2CX1$)E$N+Zc2Y7^!dkh}j*YDVzuNWBu^IQs)z40tR7Urd{-e3(Ax3Kf8p=%V&4 z{&RJK2tKW6nA)*`vzswK$PTbO(C7rd`piT)4MKZ+|D0I)a(z}NJUeYqE%~>89=Zx+ zny&QYxuTiSbW{J&-#3Wrd5>b`7Y=BdFP?1V&|o6FVgh6}fr07TZ22ab{&B8_*%SAE zTJg=`q`{|)=B3-iFG~SwbY<5Qk0UjVQ|53M*U$8YvB&xR`#$m8e8sc~^0IL@c=SWQ zHTAGNxpVHhG>DD6$ZR+i>6ynBoqLeQnF2@7>amvYzPd}VK`Co6laD5U$QvInea}Yc zCwOmRme+`=fwyWO%DRaCG zQH@djSji7uDI-Zo>HrZ!kmOc{N)ov`5u?Y5r*Ysvb^@=9p-K@ansey3&>Pa-q7@}v zrDuP+{KX>bLq|HtPyP*jaLU}<-Gd}o-fd*Rd{->lyMQf-Np&Dp_AE!j{Ba9yOwFlE zSqzpguTtXrqRy_)BFheugfC4U+}tz1o%~B1qB#a;XmhK z?IsLrpge~reZ>Z;lKkUtD4+u^f``i)&g_ivib7DD{)DsD=F7Wh!|!y?)7WTi73ybD z;VhZLB6*)YJ;r?FN4;P1YFg3uwURv@a*!1Pjp_<|o_Of4t#4_5sBXRTjNxXkUc30T z#zYKOo6IDgxlfNAt*IVbOPV%SKsT+UMaW9a4BO`C*Xq-26xEd@?+t347SreW0sMV$ z(rS$KNue2@?`Ny&*WNt(>*yQ@;gPfg~0jdqFoe(I@dn zC;+R0Q$T-KaoB10i3Qc?9uUW6dnu$^v|sdJ#&m<%5l@AVK*6Y~^~OL=Jxxod>9W-A zPx4<2A(!~h_i5bZb?ec%-_Wgh2NCBNTCjwdor>Si`nYJrBqc|EJjd;S`wli%0rz_` zuc+;)rWo}Y-^=7U4tk~;y(9+Tep+WD*MTjDO!k2dxpzzGtRcm&;>yb#=3AQ~No!>~ z(~ske!|EKZxodJl|ILl#x(75U1e^A9G~HD-UMT+VP3=zwXqAIlM-@>n#86h7vl zBih?~9=Q1G-Of&MciH<-EJ(V#U>{DQOUkm8j@@x5mb1StoiQfe)mWfJL`_tHLV#O? zlPmVUSD>gk1*3vhGrptva{8BIk{U#6y@NH`%_jB`CG&Ema7>$7MJ#={!$8Pb@AwQl zZD-vJe7S_5p>GPJK;|-B>ao=k?}Igo;{>kaz1vKt?m{5*{_%{VY}KK9)#yKI%TByX z_~H9DA@~ErZ`j)?i)axCz>o}h5&aZuTcqOIGIOiZQX@h%JZ`xPWf+$Dj=bQK3j;lShc-wU6Hj+O+EO8j!K*C7>?3B%>eJWc zvurE|+ojU|;$9O)Hi_sfG%VRe8JCzi^tY5pA>y$T?@aym=MpG+nK~g*ytTdx`a*+R zox0K$^o!&?hm3rxkQcA;4GAGe5#}m>SEmJVNTcH=SB@kZim`+2yYfsa-|5~fHmT|9 zAy16L>)^V|61ulUW_Px4)ZTGp!F3#iwFKoEH6!7;jnh~N9vM)v>CG3MPC-wp$_WRZ zZlm?#_U_l{rvCZZD+FQP+2pX+&XL@Sh=++K07yb2KKW2%+3txDaLS(1_S}wj3OM1I z9ZRXBZ@r%2Fj3!)8g$?-dU{Frid7h915SQ7HrsnIA3wN9Zpj|M^HjJ*tBP-CZ(ED;An!ccNLm z5S?)qd7d>fD7qwkUt?N@3icg}YkB-qiWObY}A zEf4u4U!4tD4W%0%QY&mHl2dHD1IGaS3L%Hz(+zxVMN*(^cMe(tqz>-(PkvoCP;Kc+ z^3$gZ&D#NoloILspEGH}V*ldI^xNSjqm>k-priHB_SpIbxI+pwpZaAjP;=+4b`MU{ zC?3MLu+sKd;rf^W@c62 zB5piG@FUSJd2gvXI9fbkjJs2%7`{+rz}+%>lVT=oAsnbrXw-~1`5TQ?CsB7;j9Zg4 zrRj4YDXB~b%$)UD%VGZGI+rAg^2dvbIqcUdrncCQ>05s% z#xW4D-u#}|%~sFgtG4GRf7L{^uzf^>`K`jX+8E@?At)=An((tU1nDzU#odR2C@~mr zQ?H)nt#_5#=2!J&+?QlLG3r&L`Y9pK>%#A<#A*~x1N*2arE+p_I`bwyD((P!qJL>~ z;Ks7YpKOwqxkPg$VjfQe14^Z9hXxazVx84OeNx@pj+v4X*(KlWUzy$2ft1Q^3eKbm zo8W{p;NlEb>ZHS|tOR|%jp8h1+20X$mPy()W2>~`X*6+)6ryL_Uzn+=H4_>_cOkZkkpVzmIFGh4iP1 zpH81fvipTUEsnIaH+y^p8J)fmNG(mq#5dHk)5_oN@8Qie=q-Y?Wl_<+Q)Y`y&ci}P^!hE#=F>Txar(cA@1F7tp5{7# z3?!VYw%Iq-zHv%`pV4h?bBng!1e}S1#?G|_)o2CT#T%5##kV*;1J@Li69!sxi);=b z3?zbiB!x~RD5B_K!vXG}_=HqSa7&e8lM6Uf{n=1F;8MtH2u|09^TJ}V@JYMh_7=EO zyoSRHn3vFRd%B6u+^jfH^bEgv+UL#I{*FzA--ZyS^Q7Jlr(63@RE^4}3Gsb}>w`2V z{i`v#*d~bD%HeC-=mxB%*!28Tv)+L~BbTOjx;?dHcnob&TDK*AsS9S31OWs-dU&&6` zY}7^h%4e>@w3QC8GogyP>|>M4@%fQ|Xb}2*+tD-5a35c4%`dR1=W(UgoIO(?RfLWsFd1?MV4D z{B-{O#)%~4{F!cnYV313TDHNMKszvpfa-qRyrMuFd&qn)R>_$3&5U60co~DR{nVto z?wL!my*!*i-2_73IH;t>kr?q*|24LXwFIN^ATADG4?d9mW3m>k9ZOP&?jppuUg6sh zpTwOIxyh9_XN2x5q{(qGqdK-ui@c%BGPeay7ti9w^LF$c3qAQ?iXqYx9}z>ku5DfD z*tR2^;aRusdVV=;I_~WLzmfiQ-fiyaDqR-De<>8U&XY5DAGDG(ZKb7xz~aT!Xb8Bx zb=W*#>_h8tf_R#58MYQHTKUqFiklu=`!j0}22kq8H|nVK=_H1f0#0SpT^iOTO#yB@ zUb&fu@yxoJuN2)1gz@iUrH!hbR!^bGy(i6sJ&G@wZC`VVUIgL}&a?nd@v> zk~Kf+6ArQ?#D$3DV4&1VW~i^3pE{82Y{HPXu&%%Jl?3<@loDQcRi3D>x03dK$7&EQ zqFn|P3z`6ZA!q5C<17JIHytjy_gkN4Lz{Kp^k!joprvZFk4Y*@>=?Nh5-xCH6Y zcN2OPLwid*Dj=sgay8P$;qD?t0jnI|M9jnzb9w*L;EBw`jLm?Z%xNwmvEeRpy8vB6 zeYl_EhP%G@1Ca%d($Y>hva2hn@SJc1aT8*ORxJg=-DK3>x z%#w;L{G>kaffs!WcMdMKfxymM)yewb+N9%?hZ2r1#gYPjXpBpFr4{KB_kQVy3$3a; z#E@Y)60mx`F7oU2n36q$Wy4|-nqvs_B6YOl>fR=|`l+G6;{a|Ft+FQsd%EV6U(23~ z;S?!=$(P>>!}RvD~Ou5FmWwT|LO_^reviZF@eCpr4t{X0L zMUP`D;~uVWy+a*T77zDxIzzVoq!Oj(Ysb=ZT+dYxCau8vyHB09N^yIvdNnJ$gLko>^$_n&%ec& z2bbol&W#1Y`9$}vxF%^Lu5Q#eNu8JU$d&Dd;g*^<`q6e|4LTz6htx3eI^S7DpE)3@ z7tQPDSX2ZlbF3QP2&&x.push("'"+this.terminals_[v]+"'") -var _="" -_=this.lexer.showPosition?"Parse error on line "+(o+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+x.join(", ")+", got '"+this.terminals_[h]+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==h?"end of input":"'"+(this.terminals_[h]||h)+"'"),this.parseError(_,{text:this.lexer.match,token:this.terminals_[h]||h,line:this.lexer.yylineno,loc:u,expected:x})}if(3==c){if(1==h)throw new Error(_||"Parsing halted.") -l=this.lexer.yyleng,s=this.lexer.yytext,o=this.lexer.yylineno,u=this.lexer.yylloc,h=f()}for(;!(2..toString()in a[d]);){if(0==d)throw new Error(_||"Parsing halted.") -k=1,r.length=r.length-2*k,n.length=n.length-k,i.length=i.length-k,d=r[r.length-1]}p=h,h=2,y=a[d=r[r.length-1]]&&a[d][2],c=3}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+h) -switch(y[0]){case 1:r.push(h),n.push(this.lexer.yytext),i.push(this.lexer.yylloc),r.push(y[1]),h=null,p?(h=p,p=null):(l=this.lexer.yyleng,s=this.lexer.yytext,o=this.lexer.yylineno,u=this.lexer.yylloc,c>0&&c--) -break -case 2:if(g=this.productions_[y[1]][1],w.$=n[n.length-g],w._$={first_line:i[i.length-(g||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(g||1)].first_column,last_column:i[i.length-1].last_column},void 0!==(m=this.performAction.call(w,s,l,o,this.yy,y[1],n,i)))return m -g&&(r=r.slice(0,-1*g*2),n=n.slice(0,-1*g),i=i.slice(0,-1*g)),r.push(this.productions_[y[1]][0]),n.push(w.$),i.push(w._$),b=a[r[r.length-2]][r[r.length-1]],r.push(b) -break -case 3:return!0}}return!0}},t=function(){var e={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e) -this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0] -return this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e,e.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},less:function(e){this._input=this.match.slice(e)+this._input},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length) -return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match -return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-") -return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF -var e,t,r,n,i -this._input||(this.done=!0),this._more||(this.yytext="",this.match="") -for(var a=this._currentRules(),s=0;st[0].length)||(t=r,n=s,this.options.flex));s++);return t?((i=t[0].match(/\n.*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-1:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],e=this.performAction.call(this,this.yy,this,a[n],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),e||void 0):""===this._input?this.EOF:void this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next() -return void 0!==e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)},options:{},performAction:function(e,t,r){switch(r){case 0:break -case 1:return 6 -case 2:return t.yytext=t.yytext.substr(1,t.yyleng-2),4 -case 3:return 17 -case 4:return 18 -case 5:return 23 -case 6:return 24 -case 7:return 22 -case 8:return 21 -case 9:return 10 -case 10:return 11 -case 11:return 8 -case 12:return 14 -case 13:return"INVALID"}},rules:[/^(?:\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\.[0-9]+)?([eE][-+]?[0-9]+)?\b)/,/^(?:"(?:\\[\\"bfnrt/]|\\u[a-fA-F0-9]{4}|[^\\\0-\x09\x0a-\x1f"])*")/,/^(?:\{)/,/^(?:\})/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?::)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:$)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}} -return e}() -return e.lexer=t,e}() -"undefined"!=typeof require&&"undefined"!=typeof exports&&(exports.parser=jsonlint,exports.parse=function(){return jsonlint.parse.apply(jsonlint,arguments)},exports.main=function(e){if(!e[1])throw new Error("Usage: "+e[0]+" FILE") -if("undefined"!=typeof process)var t=require("fs").readFileSync(require("path").join(process.cwd(),e[1]),"utf8") -else t=require("file").path(require("file").cwd()).join(e[1]).read({charset:"utf-8"}) -return exports.parser.parse(t)},"undefined"!=typeof module&&require.main===module&&exports.main("undefined"!=typeof process?process.argv.slice(1):require("system").args)),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}((function(e){"use strict" -function t(e,t,r){return/^(?:operator|sof|keyword c|case|new|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}e.defineMode("javascript",(function(r,n){var i,a,s=r.indentUnit,o=n.statementIndent,l=n.jsonld,c=n.json||l,u=n.typescript,f=n.wordCharacters||/[\w$\xa1-\uffff]/,h=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),r=e("keyword b"),n=e("keyword c"),i=e("operator"),a={type:"atom",style:"atom"},s={if:e("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:n,break:n,continue:n,new:e("new"),delete:n,throw:n,debugger:n,var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:i,typeof:i,instanceof:i,true:a,false:a,null:a,undefined:a,NaN:a,Infinity:a,this:e("this"),class:e("class"),super:e("atom"),yield:n,export:e("export"),import:e("import"),extends:n,await:n,async:e("async")} -if(u){var o={type:"variable",style:"variable-3"},l={interface:e("class"),implements:n,namespace:n,module:e("module"),enum:e("module"),public:e("modifier"),private:e("modifier"),protected:e("modifier"),abstract:e("modifier"),as:i,string:o,number:o,boolean:o,any:o} -for(var c in l)s[c]=l[c]}return s}(),p=/[+\-*&%=<>!?|~^]/,d=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/ -function y(e,t,r){return i=e,a=r,t}function m(e,r){var n,i=e.next() -if('"'==i||"'"==i)return r.tokenize=(n=i,function(e,t){var r,i=!1 -if(l&&"@"==e.peek()&&e.match(d))return t.tokenize=m,y("jsonld-keyword","meta") -for(;null!=(r=e.next())&&(r!=n||i);)i=!i&&"\\"==r -return i||(t.tokenize=m),y("string","string")}),r.tokenize(e,r) -if("."==i&&e.match(/^\d+(?:[eE][+\-]?\d+)?/))return y("number","number") -if("."==i&&e.match(".."))return y("spread","meta") -if(/[\[\]{}\(\),;\:\.]/.test(i))return y(i) -if("="==i&&e.eat(">"))return y("=>","operator") -if("0"==i&&e.eat(/x/i))return e.eatWhile(/[\da-f]/i),y("number","number") -if("0"==i&&e.eat(/o/i))return e.eatWhile(/[0-7]/i),y("number","number") -if("0"==i&&e.eat(/b/i))return e.eatWhile(/[01]/i),y("number","number") -if(/\d/.test(i))return e.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),y("number","number") -if("/"==i)return e.eat("*")?(r.tokenize=v,v(e,r)):e.eat("/")?(e.skipToEnd(),y("comment","comment")):t(e,r,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return -"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/),y("regexp","string-2")):(e.eatWhile(p),y("operator","operator",e.current())) -if("`"==i)return r.tokenize=g,g(e,r) -if("#"==i)return e.skipToEnd(),y("error","error") -if(p.test(i))return e.eatWhile(p),y("operator","operator",e.current()) -if(f.test(i)){e.eatWhile(f) -var a=e.current(),s=h.propertyIsEnumerable(a)&&h[a] -return s&&"."!=r.lastType?y(s.type,s.style,a):y("variable","variable",a)}}function v(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=m -break}n="*"==r}return y("comment","comment")}function g(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=m -break}n=!n&&"\\"==r}return y("quasi","string-2",e.current())}function b(e,t){t.fatArrowAt&&(t.fatArrowAt=null) -var r=e.string.indexOf("=>",e.start) -if(!(r<0)){for(var n=0,i=!1,a=r-1;a>=0;--a){var s=e.string.charAt(a),o="([{}])".indexOf(s) -if(o>=0&&o<3){if(!n){++a -break}if(0==--n)break}else if(o>=3&&o<6)++n -else if(f.test(s))i=!0 -else{if(/["'\/]/.test(s))return -if(i&&!n){++a -break}}}i&&!n&&(t.fatArrowAt=a)}}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0} -function k(e,t,r,n,i,a){this.indented=e,this.column=t,this.type=r,this.prev=i,this.info=a,null!=n&&(this.align=n)}function w(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0 -for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var _={state:null,column:null,marked:null,cc:null} -function E(){for(var e=arguments.length-1;e>=0;e--)_.cc.push(arguments[e])}function j(){return E.apply(null,arguments),!0}function S(e){function t(t){for(var r=t;r;r=r.next)if(r.name==e)return!0 -return!1}var r=_.state -if(_.marked="def",r.context){if(t(r.localVars))return -r.localVars={name:e,next:r.localVars}}else{if(t(r.globalVars))return -n.globalVars&&(r.globalVars={name:e,next:r.globalVars})}}var I={name:"this",next:{name:"arguments"}} -function $(){_.state.context={prev:_.state.context,vars:_.state.localVars},_.state.localVars=I}function A(){_.state.localVars=_.state.context.vars,_.state.context=_.state.context.prev}function M(e,t){var r=function(){var r=_.state,n=r.indented -if("stat"==r.lexical.type)n=r.lexical.indented -else for(var i=r.lexical;i&&")"==i.type&&i.align;i=i.prev)n=i.indented -r.lexical=new k(n,_.stream.column(),e,null,r.lexical,t)} -return r.lex=!0,r}function N(){var e=_.state -e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function O(e){return function t(r){return r==e?j():";"==e?E():j(t)}}function V(e,t){return"var"==e?j(M("vardef",t.length),ae,O(";"),N):"keyword a"==e?j(M("form"),T,V,N):"keyword b"==e?j(M("form"),V,N):"{"==e?j(M("}"),ee,N):";"==e?j():"if"==e?("else"==_.state.lexical.info&&_.state.cc[_.state.cc.length-1]==N&&_.state.cc.pop()(),j(M("form"),T,V,N,ue)):"function"==e?j(me):"for"==e?j(M("form"),fe,V,N):"variable"==e?j(M("stat"),D):"switch"==e?j(M("form"),T,M("}","switch"),O("{"),ee,N,N):"case"==e?j(T,O(":")):"default"==e?j(O(":")):"catch"==e?j(M("form"),$,O("("),ve,O(")"),V,N,A):"class"==e?j(M("form"),ge,N):"export"==e?j(M("stat"),we,N):"import"==e?j(M("stat"),_e,N):"module"==e?j(M("form"),se,M("}"),O("{"),ee,N,N):"async"==e?j(V):E(M("stat"),T,O(";"),N)}function T(e){return L(e,!1)}function z(e){return L(e,!0)}function L(e,t){if(_.state.fatArrowAt==_.stream.start){var r=t?W:C -if("("==e)return j($,M(")"),Y(se,")"),N,O("=>"),r,A) -if("variable"==e)return E($,se,O("=>"),r,A)}var n=t?F:J -return x.hasOwnProperty(e)?j(n):"function"==e?j(me,n):"keyword c"==e?j(t?P:q):"("==e?j(M(")"),q,Ae,O(")"),N,n):"operator"==e||"spread"==e?j(t?z:T):"["==e?j(M("]"),Ie,N,n):"{"==e?Z(K,"}",null,n):"quasi"==e?E(U,n):"new"==e?j(function(e){return function(t){return"."==t?j(e?G:B):E(e?z:T)}}(t)):j()}function q(e){return e.match(/[;\}\)\],]/)?E():E(T)}function P(e){return e.match(/[;\}\)\],]/)?E():E(z)}function J(e,t){return","==e?j(T):F(e,t,!1)}function F(e,t,r){var n=0==r?J:F,i=0==r?T:z -return"=>"==e?j($,r?W:C,A):"operator"==e?/\+\+|--/.test(t)?j(n):"?"==t?j(T,O(":"),i):j(i):"quasi"==e?E(U,n):";"!=e?"("==e?Z(z,")","call",n):"."==e?j(H,n):"["==e?j(M("]"),q,O("]"),N,n):void 0:void 0}function U(e,t){return"quasi"!=e?E():"${"!=t.slice(t.length-2)?j(U):j(T,R)}function R(e){if("}"==e)return _.marked="string-2",_.state.tokenize=g,j(U)}function C(e){return b(_.stream,_.state),E("{"==e?V:T)}function W(e){return b(_.stream,_.state),E("{"==e?V:z)}function B(e,t){if("target"==t)return _.marked="keyword",j(J)}function G(e,t){if("target"==t)return _.marked="keyword",j(F)}function D(e){return":"==e?j(N,V):E(J,O(";"),N)}function H(e){if("variable"==e)return _.marked="property",j()}function K(e,t){return"variable"==e||"keyword"==_.style?(_.marked="property",j("get"==t||"set"==t?Q:X)):"number"==e||"string"==e?(_.marked=l?"property":_.style+" property",j(X)):"jsonld-keyword"==e?j(X):"modifier"==e?j(K):"["==e?j(T,O("]"),X):"spread"==e?j(T):void 0}function Q(e){return"variable"!=e?E(X):(_.marked="property",j(me))}function X(e){return":"==e?j(z):"("==e?E(me):void 0}function Y(e,t){function r(n,i){if(","==n){var a=_.state.lexical -return"call"==a.info&&(a.pos=(a.pos||0)+1),j(e,r)}return n==t||i==t?j():j(O(t))}return function(n,i){return n==t||i==t?j():E(e,r)}}function Z(e,t,r){for(var n=3;n"),ie):"["==e?j(O("]"),ie):void 0}function ae(){return E(se,te,le,ce)}function se(e,t){return"modifier"==e?j(se):"variable"==e?(S(t),j()):"spread"==e?j(se):"["==e?Z(se,"]"):"{"==e?Z(oe,"}"):void 0}function oe(e,t){return"variable"!=e||_.stream.match(/^\s*:/,!1)?("variable"==e&&(_.marked="property"),"spread"==e?j(se):"}"==e?E():j(O(":"),se,le)):(S(t),j(le))}function le(e,t){if("="==t)return j(z)}function ce(e){if(","==e)return j(ae)}function ue(e,t){if("keyword b"==e&&"else"==t)return j(M("form","else"),V,N)}function fe(e){if("("==e)return j(M(")"),he,O(")"),N)}function he(e){return"var"==e?j(ae,O(";"),de):";"==e?j(de):"variable"==e?j(pe):E(T,O(";"),de)}function pe(e,t){return"in"==t||"of"==t?(_.marked="keyword",j(T)):j(J,de)}function de(e,t){return";"==e?j(ye):"in"==t||"of"==t?(_.marked="keyword",j(T)):E(T,O(";"),ye)}function ye(e){")"!=e&&j(T)}function me(e,t){return"*"==t?(_.marked="keyword",j(me)):"variable"==e?(S(t),j(me)):"("==e?j($,M(")"),Y(ve,")"),N,te,V,A):void 0}function ve(e){return"spread"==e?j(ve):E(se,te,re)}function ge(e,t){if("variable"==e)return S(t),j(be)}function be(e,t){return"extends"==t?j(T,be):"{"==e?j(M("}"),xe,N):void 0}function xe(e,t){return"variable"==e||"keyword"==_.style?"static"==t?(_.marked="keyword",j(xe)):(_.marked="property","get"==t||"set"==t?j(ke,me,xe):j(me,xe)):"*"==t?(_.marked="keyword",j(xe)):";"==e?j(xe):"}"==e?j():void 0}function ke(e){return"variable"!=e?E():(_.marked="property",j())}function we(e,t){return"*"==t?(_.marked="keyword",j(Se,O(";"))):"default"==t?(_.marked="keyword",j(T,O(";"))):E(V)}function _e(e){return"string"==e?j():E(Ee,Se)}function Ee(e,t){return"{"==e?Z(Ee,"}"):("variable"==e&&S(t),"*"==t&&(_.marked="keyword"),j(je))}function je(e,t){if("as"==t)return _.marked="keyword",j(Ee)}function Se(e,t){if("from"==t)return _.marked="keyword",j(T)}function Ie(e){return"]"==e?j():E(z,$e)}function $e(e){return"for"==e?E(Ae,O("]")):","==e?j(Y(P,"]")):E(Y(z,"]"))}function Ae(e){return"for"==e?j(fe,Ae):"if"==e?j(T,Ae):void 0}return N.lex=!0,{startState:function(e){var t={tokenize:m,lastType:"sof",cc:[],lexical:new k((e||0)-s,0,"block",!1),localVars:n.localVars,context:n.localVars&&{vars:n.localVars},indented:e||0} -return n.globalVars&&"object"==typeof n.globalVars&&(t.globalVars=n.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),b(e,t)),t.tokenize!=v&&e.eatSpace())return null -var r=t.tokenize(e,t) -return"comment"==i?r:(t.lastType="operator"!=i||"++"!=a&&"--"!=a?i:"incdec",function(e,t,r,n,i){var a=e.cc -for(_.state=e,_.stream=i,_.marked=null,_.cc=a,_.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;){if((a.length?a.pop():c?T:V)(r,n)){for(;a.length&&a[a.length-1].lex;)a.pop()() -return _.marked?_.marked:"variable"==r&&w(e,n)?"variable-2":t}}}(t,r,i,a,e))},indent:function(t,r){if(t.tokenize==v)return e.Pass -if(t.tokenize!=m)return 0 -var i=r&&r.charAt(0),a=t.lexical -if(!/^\s*else\b/.test(r))for(var l=t.cc.length-1;l>=0;--l){var c=t.cc[l] -if(c==N)a=a.prev -else if(c!=ue)break}"stat"==a.type&&"}"==i&&(a=a.prev),o&&")"==a.type&&"stat"==a.prev.type&&(a=a.prev) -var u=a.type,f=i==u -return"vardef"==u?a.indented+("operator"==t.lastType||","==t.lastType?a.info+1:0):"form"==u&&"{"==i?a.indented:"form"==u?a.indented+s:"stat"==u?a.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||p.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,r)?o||s:0):"switch"!=a.info||f||0==n.doubleIndentSwitch?a.align?a.column+(f?0:1):a.indented+(f?0:s):a.indented+(/^(?:case|default)\b/.test(r)?s:2*s)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:c?null:"/*",blockCommentEnd:c?null:"*/",lineComment:c?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:c?"json":"javascript",jsonldMode:l,jsonMode:c,expressionAllowed:t,skipExpression:function(e){var t=e.cc[e.cc.length-1] -t!=T&&t!=z||e.cc.pop()}}})),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})})) diff --git a/agent/uiserver/dist/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js b/agent/uiserver/dist/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js deleted file mode 100644 index 892501d8ec1de..0000000000000 --- a/agent/uiserver/dist/assets/codemirror/mode/ruby/ruby-ea43ca3a3bdd63a52811e8464d66134b.js +++ /dev/null @@ -1,38 +0,0 @@ -(function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)})((function(e){"use strict" -e.defineMode("ruby",(function(e){function t(e){for(var t={},n=0,r=e.length;n]/)?(e.eat(/[\<\>]/),"atom"):e.eat(/[\+\-\*\/\&\|\:\!]/)?"atom":e.eat(/[a-zA-Z$@_\xa1-\uffff]/)?(e.eatWhile(/[\w$\xa1-\uffff]/),e.eat(/[\?\!\=]/),"atom"):"operator" -if("@"==o&&e.match(/^@?[a-zA-Z_\xa1-\uffff]/))return e.eat("@"),e.eatWhile(/[\w\xa1-\uffff]/),"variable-2" -if("$"==o)return e.eat(/[a-zA-Z_]/)?e.eatWhile(/[\w]/):e.eat(/\d/)?e.eat(/\d/):e.next(),"variable-3" -if(/[a-zA-Z_\xa1-\uffff]/.test(o))return e.eatWhile(/[\w\xa1-\uffff]/),e.eat(/[\?\!]/),e.eat(":")?"atom":"ident" -if("|"!=o||!t.varList&&"{"!=t.lastTok&&"do"!=t.lastTok){if(/[\(\)\[\]{}\\;]/.test(o))return n=o,null -if("-"==o&&e.eat(">"))return"arrow" -if(/[=+\-\/*:\.^%<>~|]/.test(o)){var x=e.eatWhile(/[=+\-\/*:\.^%<>~|]/) -return"."!=o||x||(n="."),"operator"}return null}return n="|",null}function l(e){return e||(e=1),function(t,n){if("}"==t.peek()){if(1==e)return n.tokenize.pop(),n.tokenize[n.tokenize.length-1](t,n) -n.tokenize[n.tokenize.length-1]=l(e-1)}else"{"==t.peek()&&(n.tokenize[n.tokenize.length-1]=l(e+1)) -return f(t,n)}}function d(){var e=!1 -return function(t,n){return e?(n.tokenize.pop(),n.tokenize[n.tokenize.length-1](t,n)):(e=!0,f(t,n))}}function c(e,t,n,r){return function(i,o){var a,u=!1 -for("read-quoted-paused"===o.context.type&&(o.context=o.context.prev,i.eat("}"));null!=(a=i.next());){if(a==e&&(r||!u)){o.tokenize.pop() -break}if(n&&"#"==a&&!u){if(i.eat("{")){"}"==e&&(o.context={prev:o.context,type:"read-quoted-paused"}),o.tokenize.push(l()) -break}if(/[@\$]/.test(i.peek())){o.tokenize.push(d()) -break}}u=!u&&"\\"==a}return t}}function s(e,t){return e.sol()&&e.match("=end")&&e.eol()&&t.tokenize.pop(),e.skipToEnd(),"comment"}return{startState:function(){return{tokenize:[f],indented:0,context:{type:"top",indented:-e.indentUnit},continuedLine:!1,lastTok:null,varList:!1}},token:function(e,t){n=null,e.sol()&&(t.indented=e.indentation()) -var a,u=t.tokenize[t.tokenize.length-1](e,t),f=n -if("ident"==u){var l=e.current() -"keyword"==(u="."==t.lastTok?"property":r.propertyIsEnumerable(e.current())?"keyword":/^[A-Z]/.test(l)?"tag":"def"==t.lastTok||"class"==t.lastTok||t.varList?"def":"variable")&&(f=l,i.propertyIsEnumerable(l)?a="indent":o.propertyIsEnumerable(l)?a="dedent":"if"!=l&&"unless"!=l||e.column()!=e.indentation()?"do"==l&&t.context.indented")):null:t.match("--")?n(m("comment","--\x3e")):t.match("DOCTYPE",!0,!0)?(t.eatWhile(/[\w\._\-]/),n(function t(e){return function(n,r){for(var o;null!=(o=n.next());){if("<"==o)return r.tokenize=t(e+1),r.tokenize(n,r) -if(">"==o){if(1==e){r.tokenize=s -break}return r.tokenize=t(e-1),r.tokenize(n,r)}}return"meta"}}(1))):null:t.eat("?")?(t.eatWhile(/[\w\._\-]/),e.tokenize=m("meta","?>"),"meta"):(a=t.eat("/")?"closeTag":"openTag",e.tokenize=f,"tag bracket"):"&"==r?(t.eat("#")?t.eat("x")?t.eatWhile(/[a-fA-F\d]/)&&t.eat(";"):t.eatWhile(/[\d]/)&&t.eat(";"):t.eatWhile(/[\w\.\-:]/)&&t.eat(";"))?"atom":"error":(t.eatWhile(/[^&<]/),null)}function f(t,e){var n,r,o=t.next() -if(">"==o||"/"==o&&t.eat(">"))return e.tokenize=s,a=">"==o?"endTag":"selfcloseTag","tag bracket" -if("="==o)return a="equals",null -if("<"==o){e.tokenize=s,e.state=x,e.tagName=e.tagStart=null -var i=e.tokenize(t,e) -return i?i+" tag error":"tag error"}return/[\'\"]/.test(o)?(e.tokenize=(n=o,(r=function(t,e){for(;!t.eol();)if(t.next()==n){e.tokenize=f -break}return"string"}).isInAttribute=!0,r),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function m(t,e){return function(n,r){for(;!n.eol();){if(n.match(e)){r.tokenize=s -break}n.next()}return t}}function g(t,e,n){this.prev=t.context,this.tagName=e,this.indent=t.indented,this.startOfLine=n,(u.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}function p(t){t.context&&(t.context=t.context.prev)}function h(t,e){for(var n;;){if(!t.context)return -if(n=t.context.tagName,!u.contextGrabbers.hasOwnProperty(n)||!u.contextGrabbers[n].hasOwnProperty(e))return -p(t)}}function x(t,e,n){return"openTag"==t?(n.tagStart=e.column(),b):"closeTag"==t?k:x}function b(t,e,n){return"word"==t?(n.tagName=e.current(),i="tag",y):(i="error",b)}function k(t,e,n){if("word"==t){var r=e.current() -return n.context&&n.context.tagName!=r&&u.implicitlyClosed.hasOwnProperty(n.context.tagName)&&p(n),n.context&&n.context.tagName==r||!1===u.matchClosing?(i="tag",w):(i="tag error",v)}return i="error",v}function w(t,e,n){return"endTag"!=t?(i="error",w):(p(n),x)}function v(t,e,n){return i="error",w(t,0,n)}function y(t,e,n){if("word"==t)return i="attribute",z -if("endTag"==t||"selfcloseTag"==t){var r=n.tagName,o=n.tagStart -return n.tagName=n.tagStart=null,"selfcloseTag"==t||u.autoSelfClosers.hasOwnProperty(r)?h(n,r):(h(n,r),n.context=new g(n,r,o==n.indented)),x}return i="error",y}function z(t,e,n){return"equals"==t?N:(u.allowMissing||(i="error"),y(t,0,n))}function N(t,e,n){return"string"==t?T:"word"==t&&u.allowUnquoted?(i="string",y):(i="error",y(t,0,n))}function T(t,e,n){return"string"==t?T:y(t,0,n)}return s.isInText=!0,{startState:function(t){var e={tokenize:s,state:x,indented:t||0,tagName:null,tagStart:null,context:null} -return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null -a=null -var n=e.tokenize(t,e) -return(n||a)&&"comment"!=n&&(i=null,e.state=e.state(a||n,t,e),i&&(n="error"==i?n+" error":i)),n},indent:function(e,n,r){var o=e.context -if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+l -if(o&&o.noIndent)return t.Pass -if(e.tokenize!=f&&e.tokenize!=s)return r?r.match(/^(\s*)/)[0].length:0 -if(e.tagName)return!1!==u.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+l*(u.multilineTagIndentFactor||1) -if(u.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:u.htmlMode?"html":"xml",helperType:u.htmlMode?"html":"xml",skipAttribute:function(t){t.state==N&&(t.state=y)}}})),t.defineMIME("text/xml","xml"),t.defineMIME("application/xml","xml"),t.mimeModes.hasOwnProperty("text/html")||t.defineMIME("text/html",{name:"xml",htmlMode:!0})})) diff --git a/agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-3f129a000349e3075be0f65719884b61.js b/agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-3f129a000349e3075be0f65719884b61.js deleted file mode 100644 index b01cbab24186f..0000000000000 --- a/agent/uiserver/dist/assets/codemirror/mode/yaml/yaml-3f129a000349e3075be0f65719884b61.js +++ /dev/null @@ -1,276 +0,0 @@ -/*! js-yaml 4.0.0 https://github.com/nodeca/js-yaml @license MIT */ -(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jsyaml={})})(this,(function(e){"use strict" -function t(e){return null==e}var n={isNothing:t,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:t(e)?[]:[e]},repeat:function(e,t){var n,i="" -for(n=0;nl&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function l(e,t){return n.repeat(" ",t-e.length)+e}var c=function(e,t){if(t=Object.create(t||null),!e.buffer)return null -t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2) -for(var i,r=/\r?\n|\r|\0/g,o=[0],c=[],s=-1;i=r.exec(e.buffer);)c.push(i.index),o.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=o.length-2) -s<0&&(s=o.length-1) -var u,p,f="",d=Math.min(e.line+t.linesAfter,c.length).toString().length,h=t.maxLength-(t.indent+d+3) -for(u=1;u<=t.linesBefore&&!(s-u<0);u++)p=a(e.buffer,o[s-u],c[s-u],e.position-(o[s]-o[s-u]),h),f=n.repeat(" ",t.indent)+l((e.line-u+1).toString(),d)+" | "+p.str+"\n"+f -for(p=a(e.buffer,o[s],c[s],e.position,h),f+=n.repeat(" ",t.indent)+l((e.line+1).toString(),d)+" | "+p.str+"\n",f+=n.repeat("-",t.indent+d+3+p.pos)+"^\n",u=1;u<=t.linesAfter&&!(s+u>=c.length);u++)p=a(e.buffer,o[s+u],c[s+u],e.position-(o[s]-o[s+u]),h),f+=n.repeat(" ",t.indent)+l((e.line+u+1).toString(),d)+" | "+p.str+"\n" -return f.replace(/\n$/,"")},s=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],u=["scalar","sequence","mapping"] -var p=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===s.indexOf(t))throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={} -return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===u.indexOf(this.kind))throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')} -function f(e,t,n){var i=[] -return e[t].forEach((function(e){n.forEach((function(t,n){t.tag===e.tag&&t.kind===e.kind&&t.multi===e.multi&&i.push(n)})),n.push(e)})),n.filter((function(e,t){return-1===i.indexOf(t)}))}function d(e){return this.extend(e)}d.prototype.extend=function(e){var t=[],n=[] -if(e instanceof p)n.push(e) -else if(Array.isArray(e))n=n.concat(e) -else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new o("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })") -e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.") -if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.") -if(e.multi)throw new o("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.")})) -var i=Object.create(d.prototype) -return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=f(i,"implicit",[]),i.compiledExplicit=f(i,"explicit",[]),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}} -function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),k=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$") -var w=/^[-+]?[0-9]+e/ -var C=new p("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!k.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n -return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||n.isNegativeZero(e))},represent:function(e,t){var i -if(isNaN(e))switch(t){case"lowercase":return".nan" -case"uppercase":return".NAN" -case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf" -case"uppercase":return".INF" -case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf" -case"uppercase":return"-.INF" -case"camelcase":return"-.Inf"}else if(n.isNegativeZero(e))return"-0.0" -return i=e.toString(10),w.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),x=m.extend({implicit:[g,y,v,C]}),I=x,S=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),O=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$") -var j=new p("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==S.exec(e)||null!==O.exec(e))},construct:function(e){var t,n,i,r,o,a,l,c,s=0,u=null -if(null===(t=S.exec(e))&&(t=O.exec(e)),null===t)throw new Error("Date resolve error") -if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r)) -if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(s=t[7].slice(0,3);s.length<3;)s+="0" -s=+s}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),c=new Date(Date.UTC(n,i,r,o,a,l,s)),u&&c.setTime(c.getTime()-u),c},instanceOf:Date,represent:function(e){return e.toISOString()}}) -var T=new p("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),E="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r" -var M=new p("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1 -var t,n,i=0,r=e.length,o=E -for(n=0;n64)){if(t<0)return!1 -i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=E,a=0,l=[] -for(t=0;t>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t)) -return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=E -for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t] -return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),L=Object.prototype.hasOwnProperty,N=Object.prototype.toString -var F=new p("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0 -var t,n,i,r,o,a=[],l=e -for(t=0,n=l.length;t>10),56320+(e-65536&1023))}for(var ee=new Array(256),te=new Array(256),ne=0;ne<256;ne++)ee[ne]=Q(ne)?1:0,te[ne]=Q(ne) -function ie(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||Y,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function re(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart} -return n.snippet=c(n),new o(t,n)}function oe(e,t){throw re(e,t)}function ae(e,t){e.onWarning&&e.onWarning.call(null,re(e,t))}var le={YAML:function(e,t,n){var i,r,o -null!==e.version&&oe(e,"duplication of %YAML directive"),1!==n.length&&oe(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&oe(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&oe(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&ae(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r -2!==n.length&&oe(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],K.test(i)||oe(e,"ill-formed tag handle (first argument) of the TAG directive"),P.call(e.tagMap,i)&&oe(e,'there is a previously declared suffix for "'+i+'" tag handle'),W.test(r)||oe(e,"ill-formed tag prefix (second argument) of the TAG directive") -try{r=decodeURIComponent(r)}catch(o){oe(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}} -function ce(e,t,n,i){var r,o,a,l -if(t1&&(e.result+=n.repeat("\n",t-1))}function me(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1 -if(-1!==e.firstTabInLine)return!1 -for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,oe(e,"tab characters must not be used in indentation")),45===i)&&Z(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,fe(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position) -else if(n=e.line,be(e,t,3,!1,!0),a.push(e.result),fe(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)oe(e,"bad indentation of a sequence entry") -else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt)&&(y&&(a=e.line,l=e.lineStart,c=e.position),be(e,t,4,!0,r)&&(y?m=e.result:g=e.result),y||(ue(e,f,d,h,m,g,a,l,c),h=m=g=null),fe(e,!0,-1),s=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==s)oe(e,"bad indentation of a mapping entry") -else if(e.lineIndent=0))break -0===o?oe(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?oe(e,"repeat of an indentation width identifier"):(p=t+o-1,u=!0)}if(V(a)){do{a=e.input.charCodeAt(++e.position)}while(V(a)) -if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!G(a)&&0!==a)}for(;0!==a;){for(pe(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!u||e.lineIndentp&&(p=e.lineIndent),G(a))f++ -else{if(e.lineIndent0){for(r=a,o=0;r>0;r--)(a=J(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:oe(e,"expected hexadecimal character") -e.result+=X(o),e.position++}else oe(e,"unknown escape sequence") -n=i=e.position}else G(l)?(ce(e,n,i,!0),he(e,fe(e,!1,t)),n=i=e.position):e.position===e.lineStart&&de(e)?oe(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}oe(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i -if(42!==(i=e.input.charCodeAt(e.position)))return!1 -for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!Z(i)&&!z(i);)i=e.input.charCodeAt(++e.position) -return e.position===t&&oe(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),P.call(e.anchorMap,n)||oe(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],fe(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,c,s,u,p=e.kind,f=e.result -if(Z(u=e.input.charCodeAt(e.position))||z(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1 -if((63===u||45===u)&&(Z(i=e.input.charCodeAt(e.position+1))||n&&z(i)))return!1 -for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(Z(i=e.input.charCodeAt(e.position+1))||n&&z(i))break}else if(35===u){if(Z(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&de(e)||n&&z(u))break -if(G(u)){if(l=e.line,c=e.lineStart,s=e.lineIndent,fe(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position) -continue}e.position=o,e.line=l,e.lineStart=c,e.lineIndent=s -break}}a&&(ce(e,r,o,!1),he(e,e.line-l),r=o=e.position,a=!1),V(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return ce(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||oe(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(y=c&&me(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result) -else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&oe(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),s=0,u=e.implicitTypes.length;s"),null!==e.result&&f.kind!==e.kind&&oe(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):oe(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function Ae(e){var t,n,i,r,o=e.position,a=!1 -for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(fe(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!Z(r);)r=e.input.charCodeAt(++e.position) -for(i=[],(n=e.input.slice(t,e.position)).length<1&&oe(e,"directive name must not be less than one character in length");0!==r;){for(;V(r);)r=e.input.charCodeAt(++e.position) -if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!G(r)) -break}if(G(r))break -for(t=e.position;0!==r&&!Z(r);)r=e.input.charCodeAt(++e.position) -i.push(e.input.slice(t,e.position))}0!==r&&pe(e),P.call(le,n)?le[n](e,n,i):ae(e,'unknown document directive "'+n+'"')}fe(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,fe(e,!0,-1)):a&&oe(e,"directives end mark is expected"),be(e,e.lineIndent-1,4,!1,!0),fe(e,!0,-1),e.checkLineBreaks&&$.test(e.input.slice(o,e.position))&&ae(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&de(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,fe(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function De(e){return/^\n* /.test(e)}function Ue(e,t,n,i,r,o,a,l){var c,s,u=0,p=null,f=!1,d=!1,h=-1!==i,m=-1,g=Le(s=_e(e,0))&&65279!==s&&!Me(s)&&45!==s&&63!==s&&58!==s&&44!==s&&91!==s&&93!==s&&123!==s&&125!==s&&35!==s&&38!==s&&42!==s&&33!==s&&124!==s&&61!==s&&62!==s&&39!==s&&34!==s&&37!==s&&64!==s&&96!==s&&function(e){return!Me(e)&&58!==e}(_e(e,e.length-1)) -if(t||a)for(c=0;c=65536?c+=2:c++){if(!Le(u=_e(e,c)))return 5 -g=g&&Fe(u,p,l),p=u}else{for(c=0;c=65536?c+=2:c++){if(10===(u=_e(e,c)))f=!0,h&&(d=d||c-m-1>i&&" "!==e[m+1],m=c) -else if(!Le(u))return 5 -g=g&&Fe(u,p,l),p=u}d=d||h&&c-m-1>i&&" "!==e[m+1]}return f||d?n>9&&De(e)?5:a?2===o?5:2:d?4:3:!g||a||r(e)?2===o?5:2:1}function qe(e,t,n,i,r){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''" -if(!e.noCompatMode&&(-1!==Ie.indexOf(t)||Se.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'" -var a=e.indent*Math.max(1,n),l=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),c=i||e.flowLevel>-1&&n>=e.flowLevel -switch(Ue(t,c,e.indent,l,(function(t){return function(e,t){var n,i -for(n=0,i=e.implicitTypes.length;n"+Ye(t,e.indent)+Pe(Te(function(e,t){var n,i,r=/(\n+)([^\n]*)/g,o=(l=e.indexOf("\n"),l=-1!==l?l:e.length,r.lastIndex=l,Re(e.slice(0,l),t)),a="\n"===e[0]||" "===e[0] -var l -for(;i=r.exec(e);){var c=i[1],s=i[2] -n=" "===s[0],o+=c+(a||n||""===s?"":"\n")+Re(s,t),a=n}return o}(t,l),a)) -case 5:return'"'+function(e){for(var t,n="",i=0,r=0;r=65536?r+=2:r++)i=_e(e,r),!(t=xe[i])&&Le(i)?(n+=e[r],i>=65536&&(n+=e[r+1])):n+=t||Oe(i) -return n}(t)+'"' -default:throw new o("impossible error: invalid scalar style")}}()}function Ye(e,t){var n=De(e)?String(t):"",i="\n"===e[e.length-1] -return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function Pe(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function Re(e,t){if(""===e||" "===e[0])return e -for(var n,i,r=/ [^ ]/g,o=0,a=0,l=0,c="";n=r.exec(e);)(l=n.index)-o>t&&(i=a>o?a:l,c+="\n"+e.slice(o,i),o=i+1),a=l -return c+="\n",e.length-o>t&&a>o?c+=e.slice(o,a)+"\n"+e.slice(a+1):c+=e.slice(o),c.slice(1)}function $e(e,t,n,i){var r,o,a,l="",c=e.tag -for(r=0,o=n.length;r tag resolver accepts not "'+s+'" style') -i=c.represent[s](t,s)}e.dump=i}return!0}return!1}function Ke(e,t,n,i,r,a,l){e.tag=null,e.dump=n,Be(e,n,!1)||Be(e,n,!0) -var c,s=we.call(e.dump),u=i -i&&(i=e.flowLevel<0||e.flowLevel>t) -var p,f,d="[object Object]"===s||"[object Array]"===s -if(d&&(f=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||f||2!==e.indent&&t>0)&&(r=!1),f&&e.usedDuplicates[p])e.dump="*ref_"+p -else{if(d&&f&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===s)i&&0!==Object.keys(e.dump).length?(function(e,t,n,i){var r,a,l,c,s,u,p="",f=e.tag,d=Object.keys(n) -if(!0===e.sortKeys)d.sort() -else if("function"==typeof e.sortKeys)d.sort(e.sortKeys) -else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function") -for(r=0,a=d.length;r1024)&&(e.dump&&10===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,s&&(u+=Ee(e,t)),Ke(e,t+1,c,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?u+=":":u+=": ",p+=u+=e.dump)) -e.tag=f,e.dump=p||"{}"}(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(function(e,t,n){var i,r,o,a,l,c="",s=e.tag,u=Object.keys(n) -for(i=0,r=u.length;i1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ke(e,t,a,!1,!1)&&(c+=l+=e.dump)) -e.tag=s,e.dump="{"+c+"}"}(e,t,e.dump),f&&(e.dump="&ref_"+p+" "+e.dump)) -else if("[object Array]"===s)i&&0!==e.dump.length?(e.noArrayIndent&&!l&&t>0?$e(e,t-1,e.dump,r):$e(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(function(e,t,n){var i,r,o,a="",l=e.tag -for(i=0,r=n.length;i",e.dump=c+" "+e.dump)}return!0}function We(e,t){var n,i,r=[],o=[] -for(function e(t,n,i){var r,o,a -if(null!==t&&"object"==typeof t)if(-1!==(o=n.indexOf(t)))-1===i.indexOf(o)&&i.push(o) -else if(n.push(t),Array.isArray(t))for(o=0,a=t.length;on.keyCol)return t.skipToEnd(),"string" -if(n.literal&&(n.literal=!1),t.sol()){if(n.keyCol=0,n.pair=!1,n.pairStart=!1,t.match(/---/))return"def" -if(t.match(/\.\.\./))return"def" -if(t.match(/\s*-\s+/))return"meta"}if(t.match(/^(\{|\}|\[|\])/))return"{"==i?n.inlinePairs++:"}"==i?n.inlinePairs--:"["==i?n.inlineList++:n.inlineList--,"meta" -if(n.inlineList>0&&!r&&","==i)return t.next(),"meta" -if(n.inlinePairs>0&&!r&&","==i)return n.keyCol=0,n.pair=!1,n.pairStart=!1,t.next(),"meta" -if(n.pairStart){if(t.match(/^\s*(\||\>)\s*/))return n.literal=!0,"meta" -if(t.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2" -if(0==n.inlinePairs&&t.match(/^\s*-?[0-9\.\,]+\s?$/))return"number" -if(n.inlinePairs>0&&t.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number" -if(t.match(e))return"keyword"}return!n.pair&&t.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)?(n.pair=!0,n.keyCol=t.indentation(),"atom"):n.pair&&t.match(/^:\s*/)?(n.pairStart=!0,"meta"):(n.pairStart=!1,n.escaped="\\"==i,t.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}}}})),e.defineMIME("text/x-yaml","yaml")})) diff --git a/agent/uiserver/dist/assets/consul-acls/routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js b/agent/uiserver/dist/assets/consul-acls/routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js deleted file mode 100644 index 827df811f1b98..0000000000000 --- a/agent/uiserver/dist/assets/consul-acls/routes-75a2ac7d38caf09cfee2a4e2bc49dcf7.js +++ /dev/null @@ -1 +0,0 @@ -((e,t=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{t.routes=JSON.stringify(e)})({dc:{acls:{tokens:{_options:{abilities:["read tokens"]}}}}}) diff --git a/agent/uiserver/dist/assets/consul-acls/services-8b6b2b2bea3add7709b8075a5ed5652b.js b/agent/uiserver/dist/assets/consul-acls/services-8b6b2b2bea3add7709b8075a5ed5652b.js deleted file mode 100644 index 879c5517c852e..0000000000000 --- a/agent/uiserver/dist/assets/consul-acls/services-8b6b2b2bea3add7709b8075a5ed5652b.js +++ /dev/null @@ -1 +0,0 @@ -((e,t=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{t.services=JSON.stringify(e)})({}) diff --git a/agent/uiserver/dist/assets/consul-lock-sessions/routes-f2c5ce353830c89f540358e7f174e0bf.js b/agent/uiserver/dist/assets/consul-lock-sessions/routes-f2c5ce353830c89f540358e7f174e0bf.js deleted file mode 100644 index d9dcf8bdd10d9..0000000000000 --- a/agent/uiserver/dist/assets/consul-lock-sessions/routes-f2c5ce353830c89f540358e7f174e0bf.js +++ /dev/null @@ -1 +0,0 @@ -((s,e=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{e.routes=JSON.stringify(s)})({dc:{nodes:{show:{sessions:{_options:{path:"/lock-sessions"}}}}}}) diff --git a/agent/uiserver/dist/assets/consul-lock-sessions/services-8b6b2b2bea3add7709b8075a5ed5652b.js b/agent/uiserver/dist/assets/consul-lock-sessions/services-8b6b2b2bea3add7709b8075a5ed5652b.js deleted file mode 100644 index 879c5517c852e..0000000000000 --- a/agent/uiserver/dist/assets/consul-lock-sessions/services-8b6b2b2bea3add7709b8075a5ed5652b.js +++ /dev/null @@ -1 +0,0 @@ -((e,t=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{t.services=JSON.stringify(e)})({}) diff --git a/agent/uiserver/dist/assets/consul-nspaces/routes-f939ed42e9b83f9d1bbc5256be68e77c.js b/agent/uiserver/dist/assets/consul-nspaces/routes-f939ed42e9b83f9d1bbc5256be68e77c.js deleted file mode 100644 index 20d5459a5c4a5..0000000000000 --- a/agent/uiserver/dist/assets/consul-nspaces/routes-f939ed42e9b83f9d1bbc5256be68e77c.js +++ /dev/null @@ -1 +0,0 @@ -((e,t=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{t.routes=JSON.stringify(e)})({dc:{nspaces:{_options:{path:"/namespaces",abilities:["read nspaces"]},index:{_options:{path:"/",queryParams:{sortBy:"sort",searchproperty:{as:"searchproperty",empty:[["Name","Description","Role","Policy"]]},search:{as:"filter",replace:!0}}}},edit:{_options:{path:"/:name"}},create:{_options:{template:"../edit",path:"/create",abilities:["create nspaces"]}}}}}) diff --git a/agent/uiserver/dist/assets/consul-nspaces/services-8b6b2b2bea3add7709b8075a5ed5652b.js b/agent/uiserver/dist/assets/consul-nspaces/services-8b6b2b2bea3add7709b8075a5ed5652b.js deleted file mode 100644 index 879c5517c852e..0000000000000 --- a/agent/uiserver/dist/assets/consul-nspaces/services-8b6b2b2bea3add7709b8075a5ed5652b.js +++ /dev/null @@ -1 +0,0 @@ -((e,t=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{t.services=JSON.stringify(e)})({}) diff --git a/agent/uiserver/dist/assets/consul-partitions/routes-cba490481425519435d142c743bbc3d3.js b/agent/uiserver/dist/assets/consul-partitions/routes-cba490481425519435d142c743bbc3d3.js deleted file mode 100644 index d2bba57955bb0..0000000000000 --- a/agent/uiserver/dist/assets/consul-partitions/routes-cba490481425519435d142c743bbc3d3.js +++ /dev/null @@ -1 +0,0 @@ -((t,e=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{e.routes=JSON.stringify(t)})({dc:{partitions:{_options:{path:"/partitions",abilities:["read partitions"]},index:{_options:{path:"/",queryParams:{sortBy:"sort",searchproperty:{as:"searchproperty",empty:[["Name","Description"]]},search:{as:"filter",replace:!0}}}},edit:{_options:{path:"/:name"}},create:{_options:{template:"../edit",path:"/create",abilities:["create partitions"]}}}}}) diff --git a/agent/uiserver/dist/assets/consul-partitions/services-85621f245f195fe1ce177064bfb04504.js b/agent/uiserver/dist/assets/consul-partitions/services-85621f245f195fe1ce177064bfb04504.js deleted file mode 100644 index 8b617434d9de2..0000000000000 --- a/agent/uiserver/dist/assets/consul-partitions/services-85621f245f195fe1ce177064bfb04504.js +++ /dev/null @@ -1 +0,0 @@ -((e,t=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{t.services=JSON.stringify(e)})({"component:consul/partition/selector":{class:"consul-ui/components/consul/partition/selector"}}) diff --git a/agent/uiserver/dist/assets/consul-ui-20fef69ea9b73df740a420526b12c7fb.css b/agent/uiserver/dist/assets/consul-ui-20fef69ea9b73df740a420526b12c7fb.css deleted file mode 100644 index 20aa05d74bf29..0000000000000 --- a/agent/uiserver/dist/assets/consul-ui-20fef69ea9b73df740a420526b12c7fb.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";fieldset,hr{border:none}.modal-dialog [role=document] table caption,.modal-dialog [role=document] table thead th,main table caption,main table thead th,table td,table th,td,th{text-align:left}article,aside,figure,footer,header,hgroup,hr,section{display:block}#login-toggle+div footer button,.consul-intention-fieldsets .permissions>button,.empty-state>ul>li>*,.empty-state>ul>li>:active,.empty-state>ul>li>label>button,.empty-state>ul>li>label>button:active,.modal-dialog [role=document] dd a,.modal-dialog [role=document] p a,.oidc-select button.reset,.search-bar-status .remove-all button,a,label.type-dialog,label.type-dialog:active,main dd a,main dd a:active,main p a,main p a:active{text-decoration:none}blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}table{border-collapse:collapse;border-spacing:0}table td,table th{padding:0}audio,embed,img,object,video{height:auto;max-width:100%}.app-view>div form button[type=button].type-delete,.consul-intention-action-warn-modal button.dangerous,.copy-button button,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.empty-state div>button,.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog .type-delete,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.oidc-select button:not(.reset),.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*,.with-confirmation .type-delete,a.type-create,button.type-cancel,button.type-submit,button[type=reset],button[type=submit],header .actions button[type=button]:not(.copy-btn),label span,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.type-reveal input:checked~em{-webkit-touch-callout:default;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}a{color:rgb(var(--color-action))}span,strong,td,th{color:inherit}body{color:rgb(var(--tone-gray-900))}html{background-color:rgb(var(--tone-gray-000));font-size:var(--typo-size-000);text-rendering:optimizeLegibility;text-size-adjust:100%;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;overflow-x:hidden;overflow-y:scroll;box-sizing:border-box;min-width:300px}hr{background-color:rgb(var(--tone-gray-200));height:1px;margin:1.5rem 0}button{background-color:var(--transparent)}body,button,input,select,textarea{font-family:var(--typo-family-sans)}.CodeMirror-lint-tooltip,.cm-s-hashi.CodeMirror,code,pre{font-family:var(--typo-family-mono)}strong{font-style:inherit;font-weight:var(--typo-weight-bold)}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}pre{-webkit-overflow-scrolling:touch;overflow-x:auto;white-space:pre;word-wrap:normal}*,::after,::before{box-sizing:inherit;animation-play-state:paused;animation-fill-mode:forwards}fieldset{width:100%}a,input[type=checkbox],input[type=radio]{cursor:pointer}input[type=checkbox],input[type=radio]{vertical-align:baseline}td,th{vertical-align:top}button,input,select,textarea{margin:0}iframe{border:0}:root{--decor-radius-000:0;--decor-radius-100:2px;--decor-radius-200:4px;--decor-radius-250:6px;--decor-radius-300:7px;--decor-radius-999:9999px;--decor-radius-full:100%;--decor-border-000:none;--decor-border-100:1px solid;--decor-border-200:2px solid;--decor-border-300:3px solid;--decor-border-400:4px solid;--decor-elevation-000:none;--decor-elevation-100:0 3px 2px rgb(var(--black) / 6%);--decor-elevation-200:0 2px 4px rgb(var(--black) / 10%);--decor-elevation-300:0 5px 1px -2px rgb(var(--black) / 12%);--decor-elevation-400:0 6px 8px -2px rgb(var(--black) / 5%),0 8px 4px -4px rgb(var(--black) / 10%);--decor-elevation-600:0 12px 5px -7px rgb(var(--black) / 8%),0 11px 10px -3px rgb(var(--black) / 10%);--decor-elevation-800:0 16px 6px -10px rgb(var(--black) / 6%),0 16px 16px -4px rgb(var(--black) / 20%);--steel-050:245 246 247;--steel-100:225 228 231;--steel-200:205 211 215;--steel-300:185 193 199;--steel-400:165 176 183;--steel-500:145 159 168;--steel-600:119 131 138;--steel-700:93 102 107;--steel-800:66 73 77;--steel-900:40 44 46;--lemon-050:255 216 20;--lemon-100:255 216 20;--lemon-200:255 216 20;--lemon-300:255 216 20;--lemon-400:255 216 20;--lemon-500:255 216 20;--lemon-600:255 216 20;--lemon-700:255 216 20;--lemon-800:255 216 20;--lemon-900:255 216 20;--magenta-050:249 235 242;--magenta-100:239 196 216;--magenta-200:229 158 190;--magenta-300:218 119 164;--magenta-400:208 80 138;--magenta-500:198 42 113;--magenta-600:158 33 89;--magenta-700:125 26 71;--magenta-800:90 20 52;--magenta-900:54 12 31;--strawberry-010:255 242 248;--strawberry-050:255 242 248;--strawberry-100:248 217 231;--strawberry-200:248 217 231;--strawberry-300:224 126 172;--strawberry-400:224 126 172;--strawberry-500:202 33 113;--strawberry-600:142 19 74;--strawberry-700:142 19 74;--strawberry-800:101 13 52;--strawberry-900:101 13 52;--cobalt-050:240 245 255;--cobalt-100:191 212 255;--cobalt-200:138 177 255;--cobalt-300:91 146 255;--cobalt-400:56 122 255;--cobalt-500:21 99 255;--cobalt-600:15 79 209;--cobalt-700:14 64 163;--cobalt-800:10 45 116;--cobalt-900:6 27 70;--indigo-050:238 237 252;--indigo-100:213 210 247;--indigo-200:174 167 242;--indigo-300:141 131 237;--indigo-400:117 104 232;--indigo-500:92 78 229;--indigo-600:76 64 188;--indigo-700:59 50 146;--indigo-800:42 36 105;--indigo-900:26 22 63;--teal-050:235 248 243;--teal-100:195 236 220;--teal-200:155 223 197;--teal-300:116 211 174;--teal-400:76 198 151;--teal-500:37 186 129;--teal-600:31 153 106;--teal-700:24 119 83;--teal-800:17 85 59;--teal-900:11 51 36;--cyan-050:231 248 255;--cyan-100:185 236 255;--cyan-200:139 224 255;--cyan-300:92 211 255;--cyan-400:46 199 255;--cyan-500:0 187 255;--cyan-600:0 159 217;--cyan-700:0 119 163;--cyan-800:0 85 116;--cyan-900:0 51 70;--gray-010:251 251 252;--gray-050:247 248 250;--gray-100:235 238 242;--gray-150:235 238 242;--gray-200:220 224 230;--gray-300:186 193 204;--gray-400:142 150 163;--gray-500:111 118 130;--gray-600:98 104 115;--gray-700:82 87 97;--gray-800:55 58 66;--gray-850:44 46 51;--gray-900:31 33 36;--gray-950:21 23 28;--green-050:236 247 237;--green-100:198 233 201;--green-200:160 219 165;--green-300:122 204 129;--green-400:84 190 93;--green-500:46 176 57;--green-600:38 145 47;--green-700:30 113 37;--green-800:21 80 26;--green-900:13 48 16;--blue-010:251 252 255;--blue-050:240 245 255;--blue-100:191 212 255;--blue-200:138 177 255;--blue-300:91 146 255;--blue-400:56 122 255;--blue-500:21 99 255;--blue-600:15 79 209;--blue-700:14 64 163;--blue-800:10 45 116;--blue-900:6 27 70;--red-010:253 250 251;--red-050:249 236 238;--red-100:239 199 204;--red-200:229 162 170;--red-300:219 125 136;--red-400:209 88 102;--red-500:199 52 69;--red-600:163 43 57;--red-700:127 34 44;--red-800:91 24 32;--red-900:55 15 19;--orange-050:254 244 236;--orange-100:253 224 200;--orange-200:252 204 164;--orange-300:251 183 127;--orange-400:250 163 91;--orange-500:250 143 55;--orange-600:205 118 46;--orange-700:160 92 35;--orange-800:114 65 25;--orange-900:69 39 15;--yellow-050:255 251 237;--yellow-100:253 238 186;--yellow-200:252 228 140;--yellow-300:251 217 94;--yellow-400:250 206 48;--yellow-500:250 196 2;--yellow-600:205 161 2;--yellow-700:160 125 2;--yellow-800:114 90 1;--yellow-900:69 54 1;--transparent:transparent;--white:255 255 255;--black:0 0 0;--color-primary:var(--tone-blue-500);--color-dangerous:var(--tone-red-500);--color-primary-disabled:var(--tone-blue-500);--color-neutral:var(--tone-gray-500);--color-action:var(--tone-blue-500);--color-info:var(--tone-blue-500);--color-success:var(--tone-green-500);--color-failure:var(--tone-red-500);--color-danger:var(--tone-red-500);--color-warning:var(--tone-yellow-500);--color-alert:var(--tone-orange-500);--typo-family-sans:BlinkMacSystemFont,-apple-system,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue","Helvetica","Arial",sans-serif;--typo-family-mono:monospace;--typo-size-000:16px;--typo-size-100:3.5rem;--typo-size-200:1.8rem;--typo-size-250:1.750rem;--typo-size-300:1.3rem;--typo-size-400:1.2rem;--typo-size-450:1.125rem;--typo-size-500:1rem;--typo-size-600:0.875rem;--typo-size-700:0.8125rem;--typo-size-800:0.75rem;--typo-weight-light:300;--typo-weight-normal:400;--typo-weight-medium:500;--typo-weight-semibold:600;--typo-weight-bold:700;--typo-lead-000:0;--typo-lead-050:1;--typo-lead-100:1.2;--typo-lead-200:1.25;--typo-lead-300:1.28;--typo-lead-500:1.33;--typo-lead-600:1.4;--typo-lead-700:1.5;--typo-lead-800:1.7;--icon-alert-triangle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-alert-triangle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-right-16:url('data:image/svg+xml;charset=UTF-8,');--icon-arrow-right-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-fill-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-square-fill-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-down-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-down-24:url('data:image/svg+xml;charset=UTF-8,');--icon-clipboard-copy-16:url('data:image/svg+xml;charset=UTF-8,');--icon-clipboard-copy-24:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-16:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-24:url('data:image/svg+xml;charset=UTF-8,');--icon-external-link-16:url('data:image/svg+xml;charset=UTF-8,');--icon-external-link-24:url('data:image/svg+xml;charset=UTF-8,');--icon-file-16:url('data:image/svg+xml;charset=UTF-8,');--icon-file-24:url('data:image/svg+xml;charset=UTF-8,');--icon-folder-16:url('data:image/svg+xml;charset=UTF-8,');--icon-folder-24:url('data:image/svg+xml;charset=UTF-8,');--icon-activity-16:url('data:image/svg+xml;charset=UTF-8,');--icon-activity-24:url('data:image/svg+xml;charset=UTF-8,');--icon-help-16:url('data:image/svg+xml;charset=UTF-8,');--icon-help-24:url('data:image/svg+xml;charset=UTF-8,');--icon-learn-16:url('data:image/svg+xml;charset=UTF-8,');--icon-learn-24:url('data:image/svg+xml;charset=UTF-8,');--icon-github-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-github-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-google-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-google-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-kubernetes-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-kubernetes-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-menu-16:url('data:image/svg+xml;charset=UTF-8,');--icon-menu-24:url('data:image/svg+xml;charset=UTF-8,');--icon-minus-square-16:url('data:image/svg+xml;charset=UTF-8,');--icon-minus-square-24:url('data:image/svg+xml;charset=UTF-8,');--icon-more-horizontal-16:url('data:image/svg+xml;charset=UTF-8,');--icon-more-horizontal-24:url('data:image/svg+xml;charset=UTF-8,');--icon-globe-16:url('data:image/svg+xml;charset=UTF-8,');--icon-globe-24:url('data:image/svg+xml;charset=UTF-8,');--icon-search-16:url('data:image/svg+xml;charset=UTF-8,');--icon-search-24:url('data:image/svg+xml;charset=UTF-8,');--icon-star-16:url('data:image/svg+xml;charset=UTF-8,');--icon-star-24:url('data:image/svg+xml;charset=UTF-8,');--icon-org-16:url('data:image/svg+xml;charset=UTF-8,');--icon-org-24:url('data:image/svg+xml;charset=UTF-8,');--icon-user-16:url('data:image/svg+xml;charset=UTF-8,');--icon-user-24:url('data:image/svg+xml;charset=UTF-8,');--icon-users-16:url('data:image/svg+xml;charset=UTF-8,');--icon-users-24:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-off-16:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-off-24:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-16:url('data:image/svg+xml;charset=UTF-8,');--icon-eye-24:url('data:image/svg+xml;charset=UTF-8,');--icon-alert-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-alert-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-aws-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-aws-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-check-16:url('data:image/svg+xml;charset=UTF-8,');--icon-check-24:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-fill-16:url('data:image/svg+xml;charset=UTF-8,');--icon-check-circle-fill-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-left-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-left-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-right-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-right-24:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-up-16:url('data:image/svg+xml;charset=UTF-8,');--icon-chevron-up-24:url('data:image/svg+xml;charset=UTF-8,');--icon-delay-16:url('data:image/svg+xml;charset=UTF-8,');--icon-delay-24:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-link-16:url('data:image/svg+xml;charset=UTF-8,');--icon-docs-link-24:url('data:image/svg+xml;charset=UTF-8,');--icon-gateway-16:url('data:image/svg+xml;charset=UTF-8,');--icon-gateway-24:url('data:image/svg+xml;charset=UTF-8,');--icon-git-commit-16:url('data:image/svg+xml;charset=UTF-8,');--icon-git-commit-24:url('data:image/svg+xml;charset=UTF-8,');--icon-history-16:url('data:image/svg+xml;charset=UTF-8,');--icon-history-24:url('data:image/svg+xml;charset=UTF-8,');--icon-info-16:url('data:image/svg+xml;charset=UTF-8,');--icon-info-24:url('data:image/svg+xml;charset=UTF-8,');--icon-layers-16:url('data:image/svg+xml;charset=UTF-8,');--icon-layers-24:url('data:image/svg+xml;charset=UTF-8,');--icon-loading-16:url('data:image/svg+xml;charset=UTF-8,');--icon-loading-24:url('data:image/svg+xml;charset=UTF-8,');--icon-path-16:url('data:image/svg+xml;charset=UTF-8,');--icon-path-24:url('data:image/svg+xml;charset=UTF-8,');--icon-skip-16:url('data:image/svg+xml;charset=UTF-8,');--icon-skip-24:url('data:image/svg+xml;charset=UTF-8,');--icon-socket-16:url('data:image/svg+xml;charset=UTF-8,');--icon-socket-24:url('data:image/svg+xml;charset=UTF-8,');--icon-star-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-star-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-star-fill-16:url('data:image/svg+xml;charset=UTF-8,');--icon-star-fill-24:url('data:image/svg+xml;charset=UTF-8,');--icon-tag-16:url('data:image/svg+xml;charset=UTF-8,');--icon-tag-24:url('data:image/svg+xml;charset=UTF-8,');--icon-vault-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-vault-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-24:url('data:image/svg+xml;charset=UTF-8,');--icon-x-circle-16:url('data:image/svg+xml;charset=UTF-8,');--icon-x-circle-24:url('data:image/svg+xml;charset=UTF-8,');--icon-cloud-cross-16:url('data:image/svg+xml;charset=UTF-8,');--icon-loading-motion-16:url('data:image/svg+xml;charset=UTF-8,');--icon-auth0-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-auth0-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-consul-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-consul-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-ember-circle-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-glimmer-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-jwt-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-microsoft-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-microsoft-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-nomad-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-nomad-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-logo-oidc-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-okta-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-okta-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-terraform-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-terraform-color-24:url('data:image/svg+xml;charset=UTF-8,');--icon-mesh-16:url('data:image/svg+xml;charset=UTF-8,');--icon-mesh-24:url('data:image/svg+xml;charset=UTF-8,');--icon-port-16:url('data:image/svg+xml;charset=UTF-8,');--icon-protocol-16:url('data:image/svg+xml;charset=UTF-8,');--icon-redirect-16:url('data:image/svg+xml;charset=UTF-8,');--icon-redirect-24:url('data:image/svg+xml;charset=UTF-8,');--icon-search-color-16:url('data:image/svg+xml;charset=UTF-8,');--icon-sort-desc-16:url('data:image/svg+xml;charset=UTF-8,');--icon-sort-desc-24:url('data:image/svg+xml;charset=UTF-8,');--icon-union-16:url('data:image/svg+xml;charset=UTF-8,');--chrome-width:300px;--chrome-height:64px;--tone-brand-050:var(--tone-magenta-050);--tone-brand-100:var(--tone-strawberry-100);--tone-brand-600:224 56 117;--tone-brand-800:var(--tone-magenta-800);--typo-action-500:rgb(var(--tone-blue-500));--decor-error-500:rgb(var(--tone-red-500));--typo-contrast-999:rgb(var(--tone-gray-999));--typo-brand-050:rgb(var(--tone-brand-050));--typo-brand-600:rgb(var(--tone-brand-600));--decor-brand-600:rgb(var(--tone-brand-600));--swatch-brand-600:rgb(var(--tone-brand-600));--swatch-brand-800:rgb(var(--tone-brand-800));--syntax-light-grey:#dde3e7;--syntax-light-gray:#a4a4a4;--syntax-light-grey-blue:#6c7b81;--syntax-dark-grey:#788290;--syntax-faded-gray:#eaeaea;--syntax-atlas:#127eff;--syntax-vagrant:#2f88f7;--syntax-consul:#69499a;--syntax-terraform:#822ff7;--syntax-serf:#dd4e58;--syntax-packer:#1ddba3;--syntax-gray:lighten(#000, 89%);--syntax-red:#ff3d3d;--syntax-green:#39b54a;--syntax-dark-gray:#535f73;--syntax-gutter-grey:#2a2f36;--syntax-yellow:rgb(var(--tone-yellow-500));--horizontal-kv-list-separator-width:18px;--horizontal-kv-list-key-separator:":";--horizontal-kv-list-key-wrapper-start:"(";--horizontal-kv-list-key-wrapper-end:")";--csv-list-separator:",";--icon-loading:icon-loading-motion}.consul-bucket-list .service,.consul-bucket-list:not([class]) dt:not([class]),.consul-exposed-path-list>ul>li>.detail dl:not([class]) dt:not([class]),.consul-instance-checks:not([class]) dt:not([class]),.consul-lock-session-list dl:not([class]) dt:not([class]),.consul-server-card dt:not(.name),.consul-upstream-instance-list dl.local-bind-address dt,.consul-upstream-instance-list dl.local-bind-socket-path dt,.consul-upstream-instance-list dl:not([class]) dt:not([class]),.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dt:not([class]),.route-title,.tag-list:not([class]) dt:not([class]),section[data-route="dc.show.license"] .validity dl .expired+dd,section[data-route="dc.show.license"] .validity dl:not([class]) dt:not([class]),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dt:not([class]),td.tags:not([class]) dt:not([class]){position:absolute;overflow:hidden;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;border:0}.consul-upstream-instance-list dl.local-bind-socket-mode dt,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dt{position:static!important;clip:unset!important;overflow:visible!important;width:auto!important;height:auto!important;margin:0!important;padding:0!important}.animatable.tab-nav ul::after,.app-view>div form button[type=button].type-delete,.app-view>div form button[type=button].type-delete:hover:not(:disabled):not(:active),.consul-auth-method-type,.consul-external-source,.consul-intention-action-warn-modal button.dangerous,.consul-intention-action-warn-modal button.dangerous:disabled,.consul-intention-action-warn-modal button.dangerous:focus,.consul-intention-action-warn-modal button.dangerous:hover:active,.consul-intention-action-warn-modal button.dangerous:hover:not(:disabled):not(:active),.consul-intention-list td.intent- strong,.consul-intention-permission-form button.type-submit,.consul-intention-permission-form button.type-submit:disabled,.consul-intention-permission-form button.type-submit:focus:not(:disabled),.consul-intention-permission-form button.type-submit:hover:not(:disabled),.consul-intention-search-bar .value- span,.consul-kind,.consul-source,.consul-transparent-proxy,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:focus:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:hover:first-child,.discovery-chain .route-card>header ul li,.empty-state div>button,.empty-state div>button:disabled,.empty-state div>button:focus,.empty-state div>button:hover:active,.empty-state div>button:hover:not(:disabled):not(:active),.informed-action>ul>.dangerous>*,.informed-action>ul>.dangerous>:focus,.informed-action>ul>.dangerous>:hover,.leader,.menu-panel>ul>li.dangerous>:first-child,.menu-panel>ul>li.dangerous>:focus:first-child,.menu-panel>ul>li.dangerous>:hover:first-child,.modal-dialog .type-delete,.modal-dialog .type-delete:hover:active,.modal-dialog .type-delete:hover:not(:disabled):not(:active),.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.oidc-select button:disabled:not(.reset),.oidc-select button:focus:not(.reset),.oidc-select button:hover:active:not(.reset),.oidc-select button:hover:not(:disabled):not(:active):not(.reset),.oidc-select button:not(.reset),.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.tab-nav .selected>*,.topology-metrics-source-type,.with-confirmation .type-delete,.with-confirmation .type-delete:hover:active,.with-confirmation .type-delete:hover:not(:disabled):not(:active),a.type-create,a.type-create:disabled,a.type-create:focus,a.type-create:hover:active,a.type-create:hover:not(:disabled):not(:active),button.type-cancel,button.type-cancel:active,button.type-cancel:focus,button.type-cancel:hover:not(:disabled):not(:active),button.type-submit,button.type-submit:disabled,button.type-submit:focus,button.type-submit:hover:active,button.type-submit:hover:not(:disabled):not(:active),button[type=reset],button[type=reset]:active,button[type=reset]:focus,button[type=reset]:hover:not(:disabled):not(:active),button[type=submit],button[type=submit]:disabled,button[type=submit]:focus,button[type=submit]:hover:active,button[type=submit]:hover:not(:disabled):not(:active),header .actions button[type=button]:hover:not(:disabled):not(:active):not(.copy-btn),header .actions button[type=button]:not(.copy-btn),html[data-route^="dc.acls.index"] main td strong,span.policy-node-identity,span.policy-service-identity,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child{border-style:solid}.animatable.tab-nav ul::after,.app .notifications .app-notification,.tab-nav li>*{transition-duration:.15s;transition-timing-function:ease-out}[role=banner] nav:first-of-type,[role=contentinfo],html body>.brand-loader,main{transition-timing-function:cubic-bezier(.1,.1,.25,.9);transition-duration:.1s}html[data-state]:not(.ember-loading) body>.brand-loader{animation-timing-function:cubic-bezier(.1,.1,.25,.9);animation-duration:.1s;animation-name:remove-from-flow;animation-fill-mode:forwards}@keyframes remove-from-flow{100%{visibility:hidden;overflow:hidden;clip:rect(0 0 0 0)}}@keyframes typo-truncate{100%{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}.informed-action header>*{font-size:inherit;font-weight:inherit;line-height:inherit;font-style:inherit}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.type-toggle [type=password],.type-toggle [type=text],.type-toggle textarea,body,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-text [type=password],main .type-text [type=text],main .type-text textarea{font-size:var(--typo-size-600);font-family:var(--typo-family-sans);line-height:var(--typo-lead-700)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.app-view>header .title>:first-child,.consul-auth-method-binding-list h2,.consul-auth-method-view section h2,.consul-health-check-list .health-check-output dt,.consul-health-check-list .health-check-output header>*,.consul-intention-list .notice.allow header>*,.consul-intention-list .notice.deny header>*,.consul-intention-list .notice.permissions header>*,.consul-intention-list td.destination,.consul-intention-list td.source,.consul-intention-permission-form h2,.consul-intention-view h2,.consul-server-card .name+dd,.definition-table dt,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.empty-state header :first-child,.hashicorp-consul nav .dcs [aria-expanded],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action header,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form h2,.modal-dialog [role=document] table caption,.modal-dialog [role=document] table td strong,.modal-dialog [role=document] table td:first-child,.modal-dialog [role=document] table th,.modal-dialog [role=document]>header>*,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.notice.error header>*,.notice.highlight header>*,.notice.info header>*,.notice.policy-management header>*,.notice.success header>*,.notice.warning header>*,.oidc-select label>span,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.radio-card header,.tab-nav,.type-toggle label span,.type-toggle>span,[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span,fieldset>header,html[data-route^="dc.kv.edit"] h2,html[data-route^="dc.services.instance.metadata"] .tab-section section h2,main .type-password>span,main .type-select>span,main .type-text>span,main form h2,main header nav:first-child ol li>*,main table caption,main table td strong,main table td:first-child,main table th,section[data-route="dc.show.license"] aside header>:first-child,section[data-route="dc.show.license"] h2,section[data-route="dc.show.serverstatus"] .redundancy-zones h3,section[data-route="dc.show.serverstatus"] h2,section[data-route="dc.show.serverstatus"] h3,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{line-height:var(--typo-lead-200)}.app-view>header .title>:first-child{font-weight:var(--typo-weight-bold);font-size:var(--typo-size-200)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.consul-auth-method-binding-list h2,.consul-auth-method-view section h2,.consul-health-check-list .health-check-output header>*,.consul-intention-list .notice.allow header>*,.consul-intention-list .notice.deny header>*,.consul-intention-list .notice.permissions header>*,.consul-intention-list td.destination,.consul-intention-list td.source,.consul-intention-permission-form h2,.consul-intention-view h2,.consul-server-card .name+dd,.definition-table dt,.empty-state header :first-child,.hashicorp-consul nav .dcs [aria-expanded],.informed-action header,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form h2,.modal-dialog [role=document] table caption,.modal-dialog [role=document] table td:first-child,.modal-dialog [role=document]>header>*,.notice.error header>*,.notice.highlight header>*,.notice.info header>*,.notice.policy-management header>*,.notice.success header>*,.notice.warning header>*,.oidc-select label>span,.radio-card header,.type-toggle>span,[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span,fieldset>header,html[data-route^="dc.kv.edit"] h2,html[data-route^="dc.services.instance.metadata"] .tab-section section h2,main .type-password>span,main .type-select>span,main .type-text>span,main form h2,main table caption,main table td:first-child,section[data-route="dc.show.license"] aside header>:first-child,section[data-route="dc.show.license"] h2,section[data-route="dc.show.serverstatus"] .redundancy-zones h3,section[data-route="dc.show.serverstatus"] h2,section[data-route="dc.show.serverstatus"] h3{font-weight:var(--typo-weight-semibold)}.consul-health-check-list .health-check-output dt,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog [role=document] table td strong,.modal-dialog [role=document] table th,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.tab-nav,.type-toggle label span,main header nav:first-child ol li>*,main table td strong,main table th,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{font-weight:var(--typo-weight-medium)}.consul-auth-method-binding-list h2,.consul-auth-method-view section h2,.consul-intention-permission-form h2,.consul-intention-view h2,.empty-state header :first-child,.modal-dialog [role=document] form h2,.modal-dialog [role=document]>header>*,html[data-route^="dc.kv.edit"] h2,main form h2,section[data-route="dc.show.license"] h2,section[data-route="dc.show.serverstatus"] h2,section[data-route="dc.show.serverstatus"] h3{font-size:var(--typo-size-300)}.consul-health-check-list .health-check-output header>*,.consul-intention-list .notice.allow header>*,.consul-intention-list .notice.deny header>*,.consul-intention-list .notice.permissions header>*,.consul-server-card .name+dd,.notice.error header>*,.notice.highlight header>*,.notice.info header>*,.notice.policy-management header>*,.notice.success header>*,.notice.warning header>*,html[data-route^="dc.services.instance.metadata"] .tab-section section h2,section[data-route="dc.show.license"] aside header>:first-child,section[data-route="dc.show.serverstatus"] .redundancy-zones h3{font-size:var(--typo-size-500)}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.consul-intention-list td.destination,.consul-intention-list td.source,.definition-table dt,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav .dcs [aria-expanded],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action header,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] table caption,.modal-dialog [role=document] table td:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.oidc-select label>span,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.radio-card header,.tab-nav,.type-toggle>span,[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span,fieldset>header,main .type-password>span,main .type-select>span,main .type-text>span,main header nav:first-child ol li>*,main table caption,main table td:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{font-size:var(--typo-size-600)}.consul-health-check-list .health-check-output dt,.modal-dialog [role=document] table td strong,.modal-dialog [role=document] table th,.type-toggle label span,main table td strong,main table th{font-size:var(--typo-size-700)}.app-view h1 span.kind-proxy,.app-view>div form button[type=button].type-delete,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.auth-form em,.auth-profile,.consul-auth-method-view section,.consul-external-source,.consul-health-check-list .health-check-output dl>dd,.consul-intention-action-warn-modal button.dangerous,.consul-intention-fieldsets .permissions>button,.consul-intention-list .notice.allow,.consul-intention-list .notice.allow footer *,.consul-intention-list .notice.allow p,.consul-intention-list .notice.deny,.consul-intention-list .notice.deny footer *,.consul-intention-list .notice.deny p,.consul-intention-list .notice.permissions,.consul-intention-list .notice.permissions footer *,.consul-intention-list .notice.permissions p,.consul-intention-permission-header-list>ul>li dd,.consul-intention-permission-list>ul>li dd,.consul-kind,.consul-source,.copy-button button,.disclosure-menu [aria-expanded]~* [role=separator],.disclosure-menu [aria-expanded]~*>div,.discovery-chain .resolvers>header>*,.discovery-chain .routes>header>*,.discovery-chain .splitters>header>*,.empty-state div>button,.empty-state header :nth-child(2),.empty-state p,.empty-state>ul>li>*,.empty-state>ul>li>label>button,.has-error>strong,.informed-action p,.menu-panel [role=separator],.menu-panel>div,.modal-dialog .type-delete,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] p,.modal-dialog [role=document] table td,.modal-dialog [role=document] table td p,.more-popover-menu>[type=checkbox]+label+div [role=separator],.more-popover-menu>[type=checkbox]+label+div>div,.notice.error,.notice.error footer *,.notice.error p,.notice.highlight,.notice.highlight footer *,.notice.highlight p,.notice.info,.notice.info footer *,.notice.info p,.notice.policy-management,.notice.policy-management footer *,.notice.policy-management p,.notice.success,.notice.success footer *,.notice.success p,.notice.warning,.notice.warning footer *,.notice.warning p,.oidc-select button.reset,.oidc-select button:not(.reset),.oidc-select label>em,.oidc-select label>span,.popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div>div,.popover-select label>*,.tippy-box[data-theme~=tooltip] .tippy-content,.topology-notices button,.type-dialog,.type-sort.popover-select label>*,.type-toggle>em,.type-toggle>span,.with-confirmation .type-delete,[role=banner] nav:first-of-type [role=separator],[role=banner] nav:first-of-type>ul>li>a,[role=banner] nav:first-of-type>ul>li>label,[role=contentinfo],a.type-create,button.type-cancel,button.type-submit,button[type=reset],button[type=submit],header .actions button[type=button]:not(.copy-btn),main .type-password>em,main .type-password>span,main .type-select>em,main .type-select>span,main .type-text>em,main .type-text>span,main form button+em,main p,main table td,main table td p,pre code,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dt,span.label,table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div>div{line-height:inherit;font-size:inherit}.consul-auth-method-view section,.consul-external-source,.consul-intention-list .notice.allow,.consul-intention-list .notice.allow p,.consul-intention-list .notice.deny,.consul-intention-list .notice.deny p,.consul-intention-list .notice.permissions,.consul-intention-list .notice.permissions p,.consul-kind,.consul-source,.notice.error,.notice.error p,.notice.highlight,.notice.highlight p,.notice.info,.notice.info p,.notice.policy-management,.notice.policy-management p,.notice.success,.notice.success p,.notice.warning,.notice.warning p,[role=banner] nav:first-of-type>ul>li>a,[role=banner] nav:first-of-type>ul>li>label,pre code{font-size:var(--typo-size-600)}.app-view h1 span.kind-proxy,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.auth-profile,.consul-health-check-list .health-check-output dl>dd,.consul-intention-fieldsets .permissions>button,.consul-intention-permission-header-list>ul>li dd,.consul-intention-permission-list>ul>li dd,.disclosure-menu [aria-expanded]~*>div,.empty-state>ul>li>*,.empty-state>ul>li>label>button,.informed-action p,.menu-panel>div,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] table td,.modal-dialog [role=document] table td p,.more-popover-menu>[type=checkbox]+label+div>div,.oidc-select label>span,.popover-menu>[type=checkbox]+label+div>div,.type-dialog,.type-toggle>span,[role=contentinfo],main .type-password>span,main .type-select>span,main .type-text>span,main table td,main table td p,section[data-route="dc.show.serverstatus"] .server-failure-tolerance dt,span.label,table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div>div{font-size:var(--typo-size-700)}.app-view>div form button[type=button].type-delete,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.auth-form em,.consul-intention-action-warn-modal button.dangerous,.consul-intention-list .notice.allow footer *,.consul-intention-list .notice.deny footer *,.consul-intention-list .notice.permissions footer *,.copy-button button,.disclosure-menu [aria-expanded]~* [role=separator],.discovery-chain .resolvers>header>*,.discovery-chain .routes>header>*,.discovery-chain .splitters>header>*,.empty-state div>button,.empty-state header :nth-child(2),.empty-state p,.has-error>strong,.menu-panel [role=separator],.modal-dialog .type-delete,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] p,.more-popover-menu>[type=checkbox]+label+div [role=separator],.notice.error footer *,.notice.highlight footer *,.notice.info footer *,.notice.policy-management footer *,.notice.success footer *,.notice.warning footer *,.oidc-select button.reset,.oidc-select button:not(.reset),.oidc-select label>em,.popover-menu>[type=checkbox]+label+div [role=separator],.popover-select label>*,.tippy-box[data-theme~=tooltip] .tippy-content,.topology-notices button,.type-sort.popover-select label>*,.type-toggle>em,.with-confirmation .type-delete,[role=banner] nav:first-of-type [role=separator],[role=contentinfo],a.type-create,button.type-cancel,button.type-submit,button[type=reset],button[type=submit],header .actions button[type=button]:not(.copy-btn),main .type-password>em,main .type-select>em,main .type-text>em,main form button+em,main p,table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{font-size:var(--typo-size-800)}::after,::before{display:inline-block;vertical-align:text-top;background-repeat:no-repeat;background-position:center;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-position:center;-webkit-mask-position:center}::before{animation-name:var(--icon-name-start,var(--icon-name)),var(--icon-size-start,var(--icon-size,icon-000));background-color:var(--icon-color-start,var(--icon-color))}::after{animation-name:var(--icon-name-end,var(--icon-name)),var(--icon-size-end,var(--icon-size,icon-000));background-color:var(--icon-color-end,var(--icon-color))}[style*="--icon-color-start"]::before{color:var(--icon-color-start)}[style*="--icon-color-end"]::after{color:var(--icon-color-end)}[style*="--icon-name-start"]::before,[style*="--icon-name-end"]::after{content:""}@keyframes icon-000{100%{width:1.2em;height:1.2em}}@keyframes icon-100{100%{width:.625rem;height:.625rem}}@keyframes icon-200{100%{width:.75rem;height:.75rem}}@keyframes icon-300{100%{width:1rem;height:1rem}}@keyframes icon-400{100%{width:1.125rem;height:1.125rem}}@keyframes icon-500{100%{width:1.25rem;height:1.25rem}}@keyframes icon-600{100%{width:1.375rem;height:1.375rem}}@keyframes icon-700{100%{width:1.5rem;height:1.5rem}}@keyframes icon-800{100%{width:1.625rem;height:1.625rem}}@keyframes icon-900{100%{width:1.75rem;height:1.75rem}}@keyframes icon-999{100%{width:100%;height:100%}}:root:not(.prefers-color-scheme-dark){--theme-light-none:initial;--icon-aws:icon-aws-color;--icon-vault:icon-vault;--color-vault-500:rgb(var(--black));--tone-gray-000:var(--white);--tone-gray-050:var(--gray-050);--tone-gray-100:var(--gray-100);--tone-gray-150:var(--gray-150);--tone-gray-200:var(--gray-200);--tone-gray-300:var(--gray-300);--tone-gray-400:var(--gray-400);--tone-gray-500:var(--gray-500);--tone-gray-600:var(--gray-600);--tone-gray-700:var(--gray-700);--tone-gray-800:var(--gray-800);--tone-gray-850:var(--gray-850);--tone-gray-900:var(--gray-900);--tone-gray-950:var(--gray-950);--tone-gray-999:var(--black);--tone-green-000:var(--white);--tone-green-050:var(--green-050);--tone-green-100:var(--green-100);--tone-green-150:var(--green-150);--tone-green-200:var(--green-200);--tone-green-300:var(--green-300);--tone-green-400:var(--green-400);--tone-green-500:var(--green-500);--tone-green-600:var(--green-600);--tone-green-700:var(--green-700);--tone-green-800:var(--green-800);--tone-green-850:var(--green-850);--tone-green-900:var(--green-900);--tone-green-950:var(--green-950);--tone-green-999:var(--black);--tone-blue-000:var(--white);--tone-blue-050:var(--blue-050);--tone-blue-100:var(--blue-100);--tone-blue-150:var(--blue-150);--tone-blue-200:var(--blue-200);--tone-blue-300:var(--blue-300);--tone-blue-400:var(--blue-400);--tone-blue-500:var(--blue-500);--tone-blue-600:var(--blue-600);--tone-blue-700:var(--blue-700);--tone-blue-800:var(--blue-800);--tone-blue-850:var(--blue-850);--tone-blue-900:var(--blue-900);--tone-blue-950:var(--blue-950);--tone-blue-999:var(--black);--tone-red-000:var(--white);--tone-red-050:var(--red-050);--tone-red-100:var(--red-100);--tone-red-150:var(--red-150);--tone-red-200:var(--red-200);--tone-red-300:var(--red-300);--tone-red-400:var(--red-400);--tone-red-500:var(--red-500);--tone-red-600:var(--red-600);--tone-red-700:var(--red-700);--tone-red-800:var(--red-800);--tone-red-850:var(--red-850);--tone-red-900:var(--red-900);--tone-red-950:var(--red-950);--tone-red-999:var(--black);--tone-orange-000:var(--white);--tone-orange-050:var(--orange-050);--tone-orange-100:var(--orange-100);--tone-orange-150:var(--orange-150);--tone-orange-200:var(--orange-200);--tone-orange-300:var(--orange-300);--tone-orange-400:var(--orange-400);--tone-orange-500:var(--orange-500);--tone-orange-600:var(--orange-600);--tone-orange-700:var(--orange-700);--tone-orange-800:var(--orange-800);--tone-orange-850:var(--orange-850);--tone-orange-900:var(--orange-900);--tone-orange-950:var(--orange-950);--tone-orange-999:var(--black);--tone-yellow-000:var(--white);--tone-yellow-050:var(--yellow-050);--tone-yellow-100:var(--yellow-100);--tone-yellow-150:var(--yellow-150);--tone-yellow-200:var(--yellow-200);--tone-yellow-300:var(--yellow-300);--tone-yellow-400:var(--yellow-400);--tone-yellow-500:var(--yellow-500);--tone-yellow-600:var(--yellow-600);--tone-yellow-700:var(--yellow-700);--tone-yellow-800:var(--yellow-800);--tone-yellow-850:var(--yellow-850);--tone-yellow-900:var(--yellow-900);--tone-yellow-950:var(--yellow-950);--tone-yellow-999:var(--black);--tone-transparent:var(--transparent);--tone-vault-500:var(--black)}:root.prefers-color-scheme-dark,[role=banner],[role=banner] nav:first-of-type,[role=banner] nav:last-of-type{--theme-dark-none:initial;--icon-aws:icon-aws;--icon-vault:icon-vault;--color-aws-500:rgb(var(--white));--color-vault-500:rgb(var(--tone-lemon-500));--tone-gray-000:var(--black);--tone-gray-050:var(--gray-950);--tone-gray-100:var(--gray-900);--tone-gray-150:var(--gray-850);--tone-gray-200:var(--gray-800);--tone-gray-300:var(--gray-700);--tone-gray-400:var(--gray-600);--tone-gray-500:var(--gray-500);--tone-gray-600:var(--gray-400);--tone-gray-700:var(--gray-300);--tone-gray-800:var(--gray-200);--tone-gray-850:var(--gray-250);--tone-gray-900:var(--gray-100);--tone-gray-950:var(--gray-050);--tone-gray-999:var(--white);--tone-green-000:var(--white);--tone-green-050:var(--green-050);--tone-green-100:var(--green-100);--tone-green-150:var(--green-150);--tone-green-200:var(--green-200);--tone-green-300:var(--green-300);--tone-green-400:var(--green-400);--tone-green-500:var(--green-500);--tone-green-600:var(--green-600);--tone-green-700:var(--green-700);--tone-green-800:var(--green-800);--tone-green-850:var(--green-850);--tone-green-900:var(--green-900);--tone-green-950:var(--green-950);--tone-green-999:var(--black);--tone-blue-000:var(--white);--tone-blue-050:var(--blue-050);--tone-blue-100:var(--blue-100);--tone-blue-150:var(--blue-150);--tone-blue-200:var(--blue-200);--tone-blue-300:var(--blue-300);--tone-blue-400:var(--blue-400);--tone-blue-500:var(--blue-500);--tone-blue-600:var(--blue-600);--tone-blue-700:var(--blue-700);--tone-blue-800:var(--blue-800);--tone-blue-850:var(--blue-850);--tone-blue-900:var(--blue-900);--tone-blue-950:var(--blue-950);--tone-blue-999:var(--black);--tone-red-000:var(--white);--tone-red-050:var(--red-050);--tone-red-100:var(--red-100);--tone-red-150:var(--red-150);--tone-red-200:var(--red-200);--tone-red-300:var(--red-300);--tone-red-400:var(--red-400);--tone-red-500:var(--red-500);--tone-red-600:var(--red-600);--tone-red-700:var(--red-700);--tone-red-800:var(--red-800);--tone-red-850:var(--red-850);--tone-red-900:var(--red-900);--tone-red-950:var(--red-950);--tone-red-999:var(--black);--tone-orange-000:var(--white);--tone-orange-050:var(--orange-050);--tone-orange-100:var(--orange-100);--tone-orange-150:var(--orange-150);--tone-orange-200:var(--orange-200);--tone-orange-300:var(--orange-300);--tone-orange-400:var(--orange-400);--tone-orange-500:var(--orange-500);--tone-orange-600:var(--orange-600);--tone-orange-700:var(--orange-700);--tone-orange-800:var(--orange-800);--tone-orange-850:var(--orange-850);--tone-orange-900:var(--orange-900);--tone-orange-950:var(--orange-950);--tone-orange-999:var(--black);--tone-yellow-000:var(--black);--tone-yellow-050:var(--blue-950);--tone-yellow-100:var(--yellow-900);--tone-yellow-150:var(--yellow-850);--tone-yellow-200:var(--yellow-800);--tone-yellow-300:var(--yellow-700);--tone-yellow-400:var(--yellow-600);--tone-yellow-500:var(--yellow-500);--tone-yellow-600:var(--yellow-400);--tone-yellow-700:var(--yellow-300);--tone-yellow-800:var(--yellow-200);--tone-yellow-850:var(--yellow-250);--tone-yellow-900:var(--yellow-100);--tone-yellow-950:var(--yellow-050);--tone-yellow-999:var(--white);--tone-transparent:var(--transparent);--tone-vault-500:var(--lemon-500)}.consul-intention-permission-header-list dt::before,.consul-intention-permission-list dt::before,.discovery-chain .resolver-card dt,.discovery-chain .route-card section header>::before{font-weight:var(--typo-weight-normal);background-color:rgb(var(--tone-gray-100));visibility:visible;padding:0 4px}#downstream-container .topology-metrics-card .details .group span::before,#downstream-container .topology-metrics-card div .critical::before,#downstream-container .topology-metrics-card div .empty::before,#downstream-container .topology-metrics-card div .health dt::before,#downstream-container .topology-metrics-card div .nspace dt::before,#downstream-container .topology-metrics-card div .partition dt::before,#downstream-container .topology-metrics-card div .passing::before,#downstream-container .topology-metrics-card div .warning::before,#downstream-container>div:first-child span::before,#login-toggle+div footer button::after,#metrics-container .link .config-link::before,#metrics-container .link .metrics-link::before,#metrics-container:hover .sparkline-key-link::before,#upstream-container .topology-metrics-card .details .group span::before,#upstream-container .topology-metrics-card div .critical::before,#upstream-container .topology-metrics-card div .empty::before,#upstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .partition dt::before,#upstream-container .topology-metrics-card div .passing::before,#upstream-container .topology-metrics-card div .warning::before,.animatable.tab-nav ul::after,.certificate button.hide::before,.certificate button.show::before,.consul-auth-method-binding-list dl dt.type+dd span::before,.consul-auth-method-list ul .locality::before,.consul-auth-method-view dl dt.type+dd span::before,.consul-auth-method-view section dl dt.type+dd span::before,.consul-bucket-list .nspace::before,.consul-bucket-list .partition::before,.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.detail .policy::before,.consul-exposed-path-list>ul>li>.detail .role::before,.consul-exposed-path-list>ul>li>.detail dl.address dt::before,.consul-exposed-path-list>ul>li>.detail dl.behavior dt::before,.consul-exposed-path-list>ul>li>.detail dl.checks dt::before,.consul-exposed-path-list>ul>li>.detail dl.critical dt::before,.consul-exposed-path-list>ul>li>.detail dl.datacenter dt::before,.consul-exposed-path-list>ul>li>.detail dl.empty dt::before,.consul-exposed-path-list>ul>li>.detail dl.lock-delay dt::before,.consul-exposed-path-list>ul>li>.detail dl.mesh dt::before,.consul-exposed-path-list>ul>li>.detail dl.node dt::before,.consul-exposed-path-list>ul>li>.detail dl.nspace dt::before,.consul-exposed-path-list>ul>li>.detail dl.passing dt::before,.consul-exposed-path-list>ul>li>.detail dl.path dt::before,.consul-exposed-path-list>ul>li>.detail dl.port dt::before,.consul-exposed-path-list>ul>li>.detail dl.protocol dt::before,.consul-exposed-path-list>ul>li>.detail dl.socket dt::before,.consul-exposed-path-list>ul>li>.detail dl.ttl dt::before,.consul-exposed-path-list>ul>li>.detail dl.warning dt::before,.consul-exposed-path-list>ul>li>.header .critical dd::before,.consul-exposed-path-list>ul>li>.header .empty dd::before,.consul-exposed-path-list>ul>li>.header .passing dd::before,.consul-exposed-path-list>ul>li>.header .policy-management dd::before,.consul-exposed-path-list>ul>li>.header .warning dd::before,.consul-exposed-path-list>ul>li>.header [rel=me] dd::before,.consul-external-source.consul-api-gateway::before,.consul-external-source.consul::before,.consul-external-source.jwt::before,.consul-external-source.kubernetes::before,.consul-external-source.leader::before,.consul-external-source.nomad::before,.consul-external-source.oidc::before,.consul-external-source.terraform::before,.consul-health-check-list .health-check-output dd em.jwt::before,.consul-health-check-list .health-check-output dd em.kubernetes::before,.consul-health-check-list .health-check-output dd em.oidc::before,.consul-health-check-list .health-check-output::before,.consul-instance-checks dt::before,.consul-intention-fieldsets .value->:last-child::before,.consul-intention-fieldsets .value-allow>:last-child::before,.consul-intention-fieldsets .value-deny>:last-child::before,.consul-intention-list .notice.allow::before,.consul-intention-list .notice.deny::before,.consul-intention-list .notice.permissions::before,.consul-intention-list em span::before,.consul-intention-list td strong.jwt::before,.consul-intention-list td strong.kubernetes::before,.consul-intention-list td strong.oidc::before,.consul-intention-list td.intent- strong::before,.consul-intention-list td.intent-allow strong::before,.consul-intention-list td.intent-deny strong::before,.consul-intention-permission-list .intent-allow::before,.consul-intention-permission-list .intent-deny::before,.consul-intention-permission-list strong.jwt::before,.consul-intention-permission-list strong.kubernetes::before,.consul-intention-permission-list strong.oidc::before,.consul-intention-search-bar .value- span::before,.consul-intention-search-bar .value-allow span::before,.consul-intention-search-bar .value-deny span::before,.consul-intention-search-bar li button span.jwt::before,.consul-intention-search-bar li button span.kubernetes::before,.consul-intention-search-bar li button span.oidc::before,.consul-kind::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .role::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.address dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.behavior dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.checks dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.datacenter dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.lock-delay dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.mesh dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.node dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.nspace dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.path dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.port dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.protocol dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.socket dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.ttl dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .critical dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .empty dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .passing dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .policy-management dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header .warning dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header [rel=me] dd::before,.consul-server-card .health-status+dd.jwt::before,.consul-server-card .health-status+dd.kubernetes::before,.consul-server-card .health-status+dd.oidc::before,.consul-upstream-instance-list dl.datacenter dt::before,.consul-upstream-instance-list dl.nspace dt::before,.consul-upstream-instance-list dl.partition dt::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.detail .policy::before,.consul-upstream-instance-list li>.detail .role::before,.consul-upstream-instance-list li>.detail dl.address dt::before,.consul-upstream-instance-list li>.detail dl.behavior dt::before,.consul-upstream-instance-list li>.detail dl.checks dt::before,.consul-upstream-instance-list li>.detail dl.critical dt::before,.consul-upstream-instance-list li>.detail dl.datacenter dt::before,.consul-upstream-instance-list li>.detail dl.empty dt::before,.consul-upstream-instance-list li>.detail dl.lock-delay dt::before,.consul-upstream-instance-list li>.detail dl.mesh dt::before,.consul-upstream-instance-list li>.detail dl.node dt::before,.consul-upstream-instance-list li>.detail dl.nspace dt::before,.consul-upstream-instance-list li>.detail dl.passing dt::before,.consul-upstream-instance-list li>.detail dl.path dt::before,.consul-upstream-instance-list li>.detail dl.port dt::before,.consul-upstream-instance-list li>.detail dl.protocol dt::before,.consul-upstream-instance-list li>.detail dl.socket dt::before,.consul-upstream-instance-list li>.detail dl.ttl dt::before,.consul-upstream-instance-list li>.detail dl.warning dt::before,.consul-upstream-instance-list li>.header .critical dd::before,.consul-upstream-instance-list li>.header .empty dd::before,.consul-upstream-instance-list li>.header .passing dd::before,.consul-upstream-instance-list li>.header .policy-management dd::before,.consul-upstream-instance-list li>.header .warning dd::before,.consul-upstream-instance-list li>.header [rel=me] dd::before,.consul-upstream-list dl.partition dt::before,.copy-button button::before,.dangerous.informed-action header::before,.disclosure-menu [aria-expanded]~*>ul>li.is-active>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-checked]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-current]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-selected]>::after,.discovery-chain .resolvers>header span::after,.discovery-chain .route-card::before,.discovery-chain .route-card>header ul li.jwt::before,.discovery-chain .route-card>header ul li.kubernetes::before,.discovery-chain .route-card>header ul li.oidc::before,.discovery-chain .routes>header span::after,.discovery-chain .splitter-card::before,.discovery-chain .splitters>header span::after,.empty-state li[class*=-link]>::after,.has-error>strong::before,.hashicorp-consul .docs-link a::after,.hashicorp-consul .feedback-link a::after,.hashicorp-consul .learn-link a::after,.hashicorp-consul nav .dcs li.is-local span.jwt::before,.hashicorp-consul nav .dcs li.is-local span.kubernetes::before,.hashicorp-consul nav .dcs li.is-local span.oidc::before,.hashicorp-consul nav .dcs li.is-primary span.jwt::before,.hashicorp-consul nav .dcs li.is-primary span.kubernetes::before,.hashicorp-consul nav .dcs li.is-primary span.oidc::before,.hashicorp-consul nav li.nspaces .disclosure-menu>button::after,.hashicorp-consul nav li.partitions .disclosure-menu>button::after,.info.informed-action header::before,.jwt.consul-auth-method-type::before,.jwt.consul-external-source::before,.jwt.consul-kind::before,.jwt.consul-source::before,.jwt.consul-transparent-proxy::before,.jwt.leader::before,.jwt.topology-metrics-source-type::before,.kubernetes.consul-auth-method-type::before,.kubernetes.consul-external-source::before,.kubernetes.consul-kind::before,.kubernetes.consul-source::before,.kubernetes.consul-transparent-proxy::before,.kubernetes.informed-action header::before,.kubernetes.leader::before,.kubernetes.topology-metrics-source-type::before,.leader::before,.list-collection>button::after,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.detail .policy::before,.list-collection>ul>li:not(:first-child)>.detail .role::before,.list-collection>ul>li:not(:first-child)>.detail dl.address dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.behavior dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.checks dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.critical dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.datacenter dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.empty dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.lock-delay dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.mesh dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.node dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.nspace dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.passing dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.path dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.port dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.protocol dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.socket dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.ttl dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.warning dt::before,.list-collection>ul>li:not(:first-child)>.header .critical dd::before,.list-collection>ul>li:not(:first-child)>.header .empty dd::before,.list-collection>ul>li:not(:first-child)>.header .passing dd::before,.list-collection>ul>li:not(:first-child)>.header .policy-management dd::before,.list-collection>ul>li:not(:first-child)>.header .warning dd::before,.list-collection>ul>li:not(:first-child)>.header [rel=me] dd::before,.menu-panel>ul>li.is-active>::after,.menu-panel>ul>li[aria-checked]>::after,.menu-panel>ul>li[aria-current]>::after,.menu-panel>ul>li[aria-selected]>::after,.modal-dialog [role=document] a[rel*=help]::after,.modal-dialog [role=document] table td.folder::before,.modal-dialog [role=document] table th span::after,.modal-dialog [role=document]>header button::before,.more-popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,.more-popover-menu>[type=checkbox]+label>::after,.notice.error::before,.notice.highlight::before,.notice.info::before,.notice.policy-management::before,.notice.success::before,.notice.warning::before,.oidc-select .auth0-oidc-provider::before,.oidc-select .google-oidc-provider::before,.oidc-select .microsoft-oidc-provider::before,.oidc-select .okta-oidc-provider::before,.oidc.consul-auth-method-type::before,.oidc.consul-external-source::before,.oidc.consul-kind::before,.oidc.consul-source::before,.oidc.consul-transparent-proxy::before,.oidc.leader::before,.oidc.topology-metrics-source-type::before,.popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,.popover-menu>[type=checkbox]+label>::after,.popover-select .consul button::before,.popover-select .consul-api-gateway button::before,.popover-select .jwt button::before,.popover-select .kubernetes button::before,.popover-select .nomad button::before,.popover-select .oidc button::before,.popover-select .terraform button::before,.popover-select .value-critical button::before,.popover-select .value-empty button::before,.popover-select .value-passing button::before,.popover-select .value-warning button::before,.search-bar-status li.jwt:not(.remove-all)::before,.search-bar-status li.kubernetes:not(.remove-all)::before,.search-bar-status li.oidc:not(.remove-all)::before,.search-bar-status li:not(.remove-all) button::before,.sparkline-key h3::before,.tag-list dt::before,.tooltip-panel dd>div::before,.topology-metrics-popover.deny .tippy-arrow::after,.topology-metrics-popover.deny>button::before,.topology-metrics-popover.l7 .tippy-arrow::after,.topology-metrics-popover.l7>button::before,.topology-metrics-popover.not-defined .tippy-arrow::after,.topology-metrics-popover.not-defined>button::before,.topology-metrics-status-error span::before,.topology-metrics-status-loader span::before,.topology-notices button::before,.type-reveal span::before,.type-sort.popover-select label>::before,.type-source.popover-select li.partition button::before,.warning.informed-action header::before,.warning.modal-dialog header::before,[class*=status-].empty-state header::before,a[rel*=external]::after,html[data-route^="dc.acls.index"] main td strong.jwt::before,html[data-route^="dc.acls.index"] main td strong.kubernetes::before,html[data-route^="dc.acls.index"] main td strong.oidc::before,main a[rel*=help]::after,main header nav:first-child ol li:first-child a::before,main table td.folder::before,main table th span::after,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.jwt::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.kubernetes::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.oidc::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.jwt::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.kubernetes::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.oidc::before,span.jwt.policy-node-identity::before,span.jwt.policy-service-identity::before,span.kubernetes.policy-node-identity::before,span.kubernetes.policy-service-identity::before,span.oidc.policy-node-identity::before,span.oidc.policy-service-identity::before,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.has-actions tr>.actions>[type=checkbox]+label>::after,table.with-details td:only-child>div>label::before,table.with-details td>label::before,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.with-details tr>.actions>[type=checkbox]+label>::after,td.tags dt::before{content:""}.hashicorp-consul .acls-separator span{box-sizing:border-box;width:12px;height:12px}.hashicorp-consul .acls-separator span::after,.hashicorp-consul .acls-separator span::before{content:"";display:block;width:100%;height:100%;border-radius:100%}.hashicorp-consul .acls-separator span::before{border:1px solid currentColor;opacity:.5}.ember-power-select-trigger,.ember-power-select-trigger--active,.ember-power-select-trigger:focus{border-top:1px solid #aaa;border-bottom:1px solid #aaa;border-right:1px solid #aaa;border-left:1px solid #aaa}.hashicorp-consul .acls-separator span::after{position:absolute;top:2px;left:2px;width:calc(100% - 4px);height:calc(100% - 4px);background-color:currentColor}@keyframes icon-alert-circle-outline{100%{-webkit-mask-image:var(--icon-alert-circle-16);mask-image:var(--icon-alert-circle-16);background-color:var(--icon-color,var(--color-alert-circle-outline-500,currentColor))}}[class*=status-].empty-state header::before{--icon-name:icon-alert-circle-outline;content:""}@keyframes icon-alert-triangle{100%{-webkit-mask-image:var(--icon-alert-triangle-16);mask-image:var(--icon-alert-triangle-16);background-color:var(--icon-color,var(--color-alert-triangle-500,currentColor))}}#downstream-container .topology-metrics-card div .warning::before,#upstream-container .topology-metrics-card div .warning::before,.consul-exposed-path-list>ul>li>.detail dl.warning dt::before,.consul-exposed-path-list>ul>li>.header .warning dd::before,.consul-health-check-list .warning.health-check-output::before,.consul-instance-checks.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .warning dd::before,.consul-upstream-instance-list li>.detail dl.warning dt::before,.consul-upstream-instance-list li>.header .warning dd::before,.dangerous.informed-action header::before,.list-collection>ul>li:not(:first-child)>.detail dl.warning dt::before,.list-collection>ul>li:not(:first-child)>.header .warning dd::before,.notice.warning::before,.popover-select .value-warning button::before,.topology-metrics-popover.not-defined .tippy-arrow::after,.topology-metrics-popover.not-defined>button::before,.warning.informed-action header::before,.warning.modal-dialog header::before{--icon-name:icon-alert-triangle;content:""}@keyframes icon-arrow-right{100%{-webkit-mask-image:var(--icon-arrow-right-16);mask-image:var(--icon-arrow-right-16);background-color:var(--icon-color,var(--color-arrow-right-500,currentColor))}}@keyframes icon-cancel-plain{100%{-webkit-mask-image:var(--icon-x-16);mask-image:var(--icon-x-16);background-color:var(--icon-color,var(--color-cancel-plain-500,currentColor))}}.modal-dialog [role=document]>header button::before,.search-bar-status li:not(.remove-all) button::before{--icon-name:icon-cancel-plain;content:""}@keyframes icon-cancel-square-fill{100%{-webkit-mask-image:var(--icon-x-square-fill-16);mask-image:var(--icon-x-square-fill-16);background-color:var(--icon-color,var(--color-cancel-square-fill-500,currentColor))}}#downstream-container .topology-metrics-card div .critical::before,#upstream-container .topology-metrics-card div .critical::before,.consul-exposed-path-list>ul>li>.detail dl.critical dt::before,.consul-exposed-path-list>ul>li>.header .critical dd::before,.consul-health-check-list .critical.health-check-output::before,.consul-instance-checks.critical dt::before,.consul-intention-list .notice.deny::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .critical dd::before,.consul-upstream-instance-list li>.detail dl.critical dt::before,.consul-upstream-instance-list li>.header .critical dd::before,.has-error>strong::before,.list-collection>ul>li:not(:first-child)>.detail dl.critical dt::before,.list-collection>ul>li:not(:first-child)>.header .critical dd::before,.notice.error::before,.popover-select .value-critical button::before,.topology-metrics-popover.deny .tippy-arrow::after,.topology-metrics-popover.deny>button::before{--icon-name:icon-cancel-square-fill;content:""}@keyframes icon-check-plain{100%{-webkit-mask-image:var(--icon-check-16);mask-image:var(--icon-check-16);background-color:var(--icon-color,var(--color-check-plain-500,currentColor))}}.disclosure-menu [aria-expanded]~*>ul>li.is-active>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-checked]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-current]>::after,.disclosure-menu [aria-expanded]~*>ul>li[aria-selected]>::after,.menu-panel>ul>li.is-active>::after,.menu-panel>ul>li[aria-checked]>::after,.menu-panel>ul>li[aria-current]>::after,.menu-panel>ul>li[aria-selected]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.more-popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,.popover-menu>[type=checkbox]+label+div>ul>li.is-active>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-checked]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-current]>::after,.popover-menu>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.is-active>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-checked]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-current]>::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li[aria-selected]>::after{--icon-name:icon-check-plain;content:""}@keyframes icon-chevron-down{100%{-webkit-mask-image:var(--icon-chevron-down-16);mask-image:var(--icon-chevron-down-16);background-color:var(--icon-color,var(--color-chevron-down-500,currentColor))}}.hashicorp-consul nav li.nspaces .disclosure-menu>button::after,.hashicorp-consul nav li.partitions .disclosure-menu>button::after,.list-collection>button.closed::after,.more-popover-menu>[type=checkbox]+label>::after,.popover-menu>[type=checkbox]+label>::after,.topology-notices button::before,table.has-actions tr>.actions>[type=checkbox]+label>::after,table.with-details td:only-child>div>label::before,table.with-details td>label::before,table.with-details tr>.actions>[type=checkbox]+label>::after{--icon-name:icon-chevron-down;content:""}@keyframes icon-copy-action{100%{-webkit-mask-image:var(--icon-clipboard-copy-16);mask-image:var(--icon-clipboard-copy-16);background-color:var(--icon-color,var(--color-copy-action-500,currentColor))}}.copy-button button::before{--icon-name:icon-copy-action;content:"";--icon-color:rgb(var(--tone-gray-500))}@keyframes icon-deny-alt{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-deny-alt-500,currentColor))}}@keyframes icon-deny-default{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-deny-default-500,currentColor))}}@keyframes icon-disabled{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-disabled-500,currentColor))}}.status-403.empty-state header::before{--icon-name:icon-disabled;content:""}@keyframes icon-docs{100%{-webkit-mask-image:var(--icon-docs-16);mask-image:var(--icon-docs-16);background-color:var(--icon-color,var(--color-docs-500,currentColor))}}#metrics-container .link .config-link::before,.empty-state .docs-link>::after,.hashicorp-consul .docs-link a::after{--icon-name:icon-docs;content:""}@keyframes icon-exit{100%{-webkit-mask-image:var(--icon-external-link-16);mask-image:var(--icon-external-link-16);background-color:var(--icon-color,var(--color-exit-500,currentColor))}}#metrics-container .link .metrics-link::before,a[rel*=external]::after{--icon-name:icon-exit;content:""}@keyframes icon-file-fill{100%{-webkit-mask-image:var(--icon-file-16);mask-image:var(--icon-file-16);background-color:var(--icon-color,var(--color-file-fill-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail .policy::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy::before,.consul-upstream-instance-list li>.detail .policy::before,.list-collection>ul>li:not(:first-child)>.detail .policy::before{--icon-name:icon-file-fill;content:""}@keyframes icon-folder-outline{100%{-webkit-mask-image:var(--icon-folder-16);mask-image:var(--icon-folder-16);background-color:var(--icon-color,var(--color-folder-outline-500,currentColor))}}#downstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .nspace dt::before,.consul-bucket-list .nspace::before,.consul-exposed-path-list>ul>li>.detail dl.nspace dt::before,.consul-intention-list span[class|=nspace]::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.nspace dt::before,.consul-upstream-instance-list dl.nspace dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.nspace dt::before,.modal-dialog [role=document] table td.folder::before,main table td.folder::before{--icon-name:icon-folder-outline;content:""}@keyframes icon-health{100%{-webkit-mask-image:var(--icon-activity-16);mask-image:var(--icon-activity-16);background-color:var(--icon-color,var(--color-health-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.checks dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.checks dt::before,.consul-upstream-instance-list li>.detail dl.checks dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.checks dt::before{--icon-name:icon-health;content:""}@keyframes icon-help-circle-outline{100%{-webkit-mask-image:var(--icon-help-16);mask-image:var(--icon-help-16);background-color:var(--icon-color,var(--color-help-circle-outline-500,currentColor))}}#downstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .health dt::before,.status-404.empty-state header::before{--icon-name:icon-help-circle-outline;content:""}@keyframes icon-info-circle-fill{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-circle-fill-500,currentColor))}}#metrics-container:hover .sparkline-key-link::before,.consul-intention-list .notice.permissions::before,.info.informed-action header::before,.notice.info::before,.sparkline-key h3::before{--icon-name:icon-info-circle-fill;content:""}@keyframes icon-info-circle-outline{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-circle-outline-500,currentColor))}}#downstream-container>div:first-child span::before,.consul-auth-method-binding-list dl dt.type+dd span::before,.consul-auth-method-view dl dt.type+dd span::before,.consul-exposed-path-list>ul>li>.detail dl.behavior dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.behavior dt::before,.consul-upstream-instance-list li>.detail dl.behavior dt::before,.discovery-chain .resolvers>header span::after,.discovery-chain .routes>header span::after,.discovery-chain .splitters>header span::after,.list-collection>ul>li:not(:first-child)>.detail dl.behavior dt::before,.modal-dialog [role=document] a[rel*=help]::after,.modal-dialog [role=document] table th span::after,.topology-metrics-status-error span::before,.topology-metrics-status-loader span::before,main a[rel*=help]::after,main table th span::after{--icon-name:icon-info-circle-outline;content:""}@keyframes icon-learn{100%{-webkit-mask-image:var(--icon-learn-16);mask-image:var(--icon-learn-16);background-color:var(--icon-color,var(--color-learn-500,currentColor))}}.empty-state .learn-link>::after,.hashicorp-consul .learn-link a::after{--icon-name:icon-learn;content:""}@keyframes icon-logo-github-monochrome{100%{-webkit-mask-image:var(--icon-github-color-16);mask-image:var(--icon-github-color-16);background-color:var(--icon-color,var(--color-logo-github-monochrome-500,currentColor))}}.hashicorp-consul .feedback-link a::after{--icon-name:icon-logo-github-monochrome;content:""}@keyframes icon-logo-google-color{100%{background-image:var(--icon-google-color-16)}}.oidc-select .google-oidc-provider::before{--icon-name:icon-logo-google-color;content:""}@keyframes icon-logo-kubernetes-color{100%{background-image:var(--icon-kubernetes-color-16)}}.consul-external-source.kubernetes::before,.consul-health-check-list .health-check-output dd em.kubernetes::before,.consul-intention-list td strong.kubernetes::before,.consul-intention-permission-list strong.kubernetes::before,.consul-intention-search-bar li button span.kubernetes::before,.consul-server-card .health-status+dd.kubernetes::before,.discovery-chain .route-card>header ul li.kubernetes::before,.hashicorp-consul nav .dcs li.is-local span.kubernetes::before,.hashicorp-consul nav .dcs li.is-primary span.kubernetes::before,.kubernetes.consul-auth-method-type::before,.kubernetes.consul-kind::before,.kubernetes.consul-source::before,.kubernetes.consul-transparent-proxy::before,.kubernetes.informed-action header::before,.kubernetes.leader::before,.kubernetes.topology-metrics-source-type::before,.notice.crd::before,.popover-select .kubernetes button::before,.search-bar-status li.kubernetes:not(.remove-all)::before,html[data-route^="dc.acls.index"] main td strong.kubernetes::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.kubernetes::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.kubernetes::before,span.kubernetes.policy-node-identity::before,span.kubernetes.policy-service-identity::before{--icon-name:icon-logo-kubernetes-color;content:""}@keyframes icon-menu{100%{-webkit-mask-image:var(--icon-menu-16);mask-image:var(--icon-menu-16);background-color:var(--icon-color,var(--color-menu-500,currentColor))}}@keyframes icon-minus-square-fill{100%{-webkit-mask-image:var(--icon-minus-square-16);mask-image:var(--icon-minus-square-16);background-color:var(--icon-color,var(--color-minus-square-fill-500,currentColor))}}#downstream-container .topology-metrics-card div .empty::before,#upstream-container .topology-metrics-card div .empty::before,.consul-exposed-path-list>ul>li>.detail dl.empty dt::before,.consul-exposed-path-list>ul>li>.header .empty dd::before,.consul-instance-checks.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .empty dd::before,.consul-upstream-instance-list li>.detail dl.empty dt::before,.consul-upstream-instance-list li>.header .empty dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.empty dt::before,.list-collection>ul>li:not(:first-child)>.header .empty dd::before,.popover-select .value-empty button::before{--icon-name:icon-minus-square-fill;content:""}@keyframes icon-more-horizontal{100%{-webkit-mask-image:var(--icon-more-horizontal-16);mask-image:var(--icon-more-horizontal-16);background-color:var(--icon-color,var(--color-more-horizontal-500,currentColor))}}@keyframes icon-public-default{100%{-webkit-mask-image:var(--icon-globe-16);mask-image:var(--icon-globe-16);background-color:var(--icon-color,var(--color-public-default-500,currentColor))}}.consul-auth-method-list ul .locality::before,.consul-exposed-path-list>ul>li>.detail dl.address dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.address dt::before,.consul-upstream-instance-list li>.detail dl.address dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.address dt::before{--icon-name:icon-public-default;content:""}@keyframes icon-search{100%{-webkit-mask-image:var(--icon-search-16);mask-image:var(--icon-search-16);background-color:var(--icon-color,var(--color-search-500,currentColor))}}@keyframes icon-star-outline{100%{-webkit-mask-image:var(--icon-star-16);mask-image:var(--icon-star-16);background-color:var(--icon-color,var(--color-star-outline-500,currentColor))}}.consul-external-source.leader::before,.leader::before{--icon-name:icon-star-outline;content:""}@keyframes icon-user-organization{100%{-webkit-mask-image:var(--icon-org-16);mask-image:var(--icon-org-16);background-color:var(--icon-color,var(--color-user-organization-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.datacenter dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.datacenter dt::before,.consul-upstream-instance-list dl.datacenter dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.datacenter dt::before{--icon-name:icon-user-organization;content:""}@keyframes icon-user-plain{100%{-webkit-mask-image:var(--icon-user-16);mask-image:var(--icon-user-16);background-color:var(--icon-color,var(--color-user-plain-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail .role::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .role::before,.consul-upstream-instance-list li>.detail .role::before,.list-collection>ul>li:not(:first-child)>.detail .role::before{--icon-name:icon-user-plain;content:""}@keyframes icon-user-team{100%{-webkit-mask-image:var(--icon-users-16);mask-image:var(--icon-users-16);background-color:var(--icon-color,var(--color-user-team-500,currentColor))}}#downstream-container .topology-metrics-card div .partition dt::before,#upstream-container .topology-metrics-card div .partition dt::before,.consul-bucket-list .partition::before,.consul-intention-list span[class|=partition]::before,.consul-upstream-instance-list dl.partition dt::before,.consul-upstream-list dl.partition dt::before,.type-source.popover-select li.partition button::before{--icon-name:icon-user-team;content:""}@keyframes icon-visibility-hide{100%{-webkit-mask-image:var(--icon-eye-off-16);mask-image:var(--icon-eye-off-16);background-color:var(--icon-color,var(--color-visibility-hide-500,currentColor))}}.certificate button.hide::before,.type-reveal input:checked+span::before{--icon-name:icon-visibility-hide;content:""}@keyframes icon-visibility-show{100%{-webkit-mask-image:var(--icon-eye-16);mask-image:var(--icon-eye-16);background-color:var(--icon-color,var(--color-visibility-show-500,currentColor))}}.certificate button.show::before,.type-reveal span::before{--icon-name:icon-visibility-show;content:""}@keyframes icon-alert-circle{100%{-webkit-mask-image:var(--icon-alert-circle-16);mask-image:var(--icon-alert-circle-16);background-color:var(--icon-color,var(--color-alert-circle-500,currentColor))}}@keyframes icon-aws{100%{-webkit-mask-image:var(--icon-aws-color-16);mask-image:var(--icon-aws-color-16);background-color:var(--icon-color,var(--color-aws-500,currentColor))}}@keyframes icon-aws-color{100%{background-image:var(--icon-aws-color-16)}}@keyframes icon-check{100%{-webkit-mask-image:var(--icon-check-16);mask-image:var(--icon-check-16);background-color:var(--icon-color,var(--color-check-500,currentColor))}}@keyframes icon-check-circle{100%{-webkit-mask-image:var(--icon-check-circle-16);mask-image:var(--icon-check-circle-16);background-color:var(--icon-color,var(--color-check-circle-500,currentColor))}}@keyframes icon-check-circle-fill{100%{-webkit-mask-image:var(--icon-check-circle-fill-16);mask-image:var(--icon-check-circle-fill-16);background-color:var(--icon-color,var(--color-check-circle-fill-500,currentColor))}}#downstream-container .topology-metrics-card div .passing::before,#upstream-container .topology-metrics-card div .passing::before,.consul-exposed-path-list>ul>li>.detail dl.passing dt::before,.consul-exposed-path-list>ul>li>.header .passing dd::before,.consul-exposed-path-list>ul>li>.header [rel=me] dd::before,.consul-health-check-list .passing.health-check-output::before,.consul-instance-checks.passing dt::before,.consul-intention-list .notice.allow::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .passing dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header [rel=me] dd::before,.consul-upstream-instance-list li>.detail dl.passing dt::before,.consul-upstream-instance-list li>.header .passing dd::before,.consul-upstream-instance-list li>.header [rel=me] dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.passing dt::before,.list-collection>ul>li:not(:first-child)>.header .passing dd::before,.list-collection>ul>li:not(:first-child)>.header [rel=me] dd::before,.notice.success::before,.popover-select .value-passing button::before{--icon-name:icon-check-circle-fill;content:""}@keyframes icon-chevron-left{100%{-webkit-mask-image:var(--icon-chevron-left-16);mask-image:var(--icon-chevron-left-16);background-color:var(--icon-color,var(--color-chevron-left-500,currentColor))}}.empty-state .back-link>::after,main header nav:first-child ol li:first-child a::before{--icon-name:icon-chevron-left;content:""}@keyframes icon-chevron-right{100%{-webkit-mask-image:var(--icon-chevron-right-16);mask-image:var(--icon-chevron-right-16);background-color:var(--icon-color,var(--color-chevron-right-500,currentColor))}}#login-toggle+div footer button::after{--icon-name:icon-chevron-right;content:""}@keyframes icon-chevron-up{100%{-webkit-mask-image:var(--icon-chevron-up-16);mask-image:var(--icon-chevron-up-16);background-color:var(--icon-color,var(--color-chevron-up-500,currentColor))}}.hashicorp-consul nav li.nspaces .disclosure-menu>button[aria-expanded=true]::after,.hashicorp-consul nav li.partitions .disclosure-menu>button[aria-expanded=true]::after,.list-collection>button::after,.more-popover-menu>[type=checkbox]:checked+label>::after,.popover-menu>[type=checkbox]:checked+label>::after,.topology-notices button[aria-expanded=true]::before,table.has-actions tr>.actions>[type=checkbox]:checked+label>::after,table.with-details tr>.actions>[type=checkbox]:checked+label>::after{--icon-name:icon-chevron-up;content:""}@keyframes icon-consul{100%{-webkit-mask-image:var(--icon-consul-color-16);mask-image:var(--icon-consul-color-16);background-color:var(--icon-color,var(--color-consul-500,currentColor))}}@keyframes icon-delay{100%{-webkit-mask-image:var(--icon-delay-16);mask-image:var(--icon-delay-16);background-color:var(--icon-color,var(--color-delay-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.lock-delay dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.lock-delay dt::before,.consul-upstream-instance-list li>.detail dl.lock-delay dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.lock-delay dt::before{--icon-name:icon-delay;content:""}@keyframes icon-docs-link{100%{-webkit-mask-image:var(--icon-docs-link-16);mask-image:var(--icon-docs-link-16);background-color:var(--icon-color,var(--color-docs-link-500,currentColor))}}@keyframes icon-gateway{100%{-webkit-mask-image:var(--icon-gateway-16);mask-image:var(--icon-gateway-16);background-color:var(--icon-color,var(--color-gateway-500,currentColor))}}.consul-kind::before{--icon-name:icon-gateway;content:""}@keyframes icon-git-commit{100%{-webkit-mask-image:var(--icon-git-commit-16);mask-image:var(--icon-git-commit-16);background-color:var(--icon-color,var(--color-git-commit-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.node dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.node dt::before,.consul-upstream-instance-list li>.detail dl.node dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.node dt::before{--icon-name:icon-git-commit;content:""}@keyframes icon-history{100%{-webkit-mask-image:var(--icon-history-16);mask-image:var(--icon-history-16);background-color:var(--icon-color,var(--color-history-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.ttl dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.ttl dt::before,.consul-upstream-instance-list li>.detail dl.ttl dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.ttl dt::before{--icon-name:icon-history;content:""}@keyframes icon-info{100%{-webkit-mask-image:var(--icon-info-16);mask-image:var(--icon-info-16);background-color:var(--icon-color,var(--color-info-500,currentColor))}}@keyframes icon-layers{100%{-webkit-mask-image:var(--icon-layers-16);mask-image:var(--icon-layers-16);background-color:var(--icon-color,var(--color-layers-500,currentColor))}}.topology-metrics-popover.l7 .tippy-arrow::after,.topology-metrics-popover.l7>button::before{--icon-name:icon-layers;content:"";--icon-color:rgb(var(--tone-gray-300))}@keyframes icon-loading{100%{-webkit-mask-image:var(--icon-loading-16);mask-image:var(--icon-loading-16);background-color:var(--icon-color,var(--color-loading-500,currentColor))}}@keyframes icon-path{100%{-webkit-mask-image:var(--icon-path-16);mask-image:var(--icon-path-16);background-color:var(--icon-color,var(--color-path-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.path dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.path dt::before,.consul-upstream-instance-list li>.detail dl.path dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.path dt::before{--icon-name:icon-path;content:""}@keyframes icon-skip{100%{-webkit-mask-image:var(--icon-skip-16);mask-image:var(--icon-skip-16);background-color:var(--icon-color,var(--color-skip-500,currentColor))}}@keyframes icon-socket{100%{-webkit-mask-image:var(--icon-socket-16);mask-image:var(--icon-socket-16);background-color:var(--icon-color,var(--color-socket-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.socket dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.socket dt::before,.consul-upstream-instance-list li>.detail dl.socket dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.socket dt::before{--icon-name:icon-socket;content:""}@keyframes icon-star-circle{100%{-webkit-mask-image:var(--icon-star-circle-16);mask-image:var(--icon-star-circle-16);background-color:var(--icon-color,var(--color-star-circle-500,currentColor))}}@keyframes icon-star-fill{100%{-webkit-mask-image:var(--icon-star-fill-16);mask-image:var(--icon-star-fill-16);background-color:var(--icon-color,var(--color-star-fill-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.header .policy-management dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.header .policy-management dd::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.header .policy-management dd::before,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.header .policy-management dd::before,.notice.highlight::before,.notice.policy-management::before{--icon-name:icon-star-fill;content:""}@keyframes icon-tag{100%{-webkit-mask-image:var(--icon-tag-16);mask-image:var(--icon-tag-16);background-color:var(--icon-color,var(--color-tag-500,currentColor))}}.tag-list dt::before,td.tags dt::before{--icon-name:icon-tag;content:""}@keyframes icon-vault{100%{-webkit-mask-image:var(--icon-vault-color-16);mask-image:var(--icon-vault-color-16);background-color:var(--icon-color,var(--color-vault-500,currentColor))}}@keyframes icon-x{100%{-webkit-mask-image:var(--icon-x-16);mask-image:var(--icon-x-16);background-color:var(--icon-color,var(--color-x-500,currentColor))}}@keyframes icon-x-circle{100%{-webkit-mask-image:var(--icon-x-circle-16);mask-image:var(--icon-x-circle-16);background-color:var(--icon-color,var(--color-x-circle-500,currentColor))}}@keyframes icon-cloud-cross{100%{-webkit-mask-image:var(--icon-cloud-cross-16);mask-image:var(--icon-cloud-cross-16);background-color:var(--icon-color,var(--color-cloud-cross-500,currentColor))}}@keyframes icon-loading-motion{100%{-webkit-mask-image:var(--icon-loading-motion-16);mask-image:var(--icon-loading-motion-16);background-color:var(--icon-color,var(--color-loading-motion-500,currentColor))}}@keyframes icon-logo-auth0-color{100%{background-image:var(--icon-auth0-color-16)}}.oidc-select .auth0-oidc-provider::before{--icon-name:icon-logo-auth0-color;content:""}@keyframes icon-logo-consul-color{100%{background-image:var(--icon-consul-color-16)}}.consul-external-source.consul-api-gateway::before,.consul-external-source.consul::before,.popover-select .consul button::before,.popover-select .consul-api-gateway button::before{--icon-name:icon-logo-consul-color;content:""}@keyframes icon-logo-ember-circle-color{100%{background-image:var(--icon-logo-ember-circle-color-16)}}@keyframes icon-logo-glimmer-color{100%{background-image:var(--icon-logo-glimmer-color-16)}}@keyframes icon-logo-jwt-color{100%{background-image:var(--icon-logo-jwt-color-16)}}.consul-external-source.jwt::before,.consul-health-check-list .health-check-output dd em.jwt::before,.consul-intention-list td strong.jwt::before,.consul-intention-permission-list strong.jwt::before,.consul-intention-search-bar li button span.jwt::before,.consul-server-card .health-status+dd.jwt::before,.discovery-chain .route-card>header ul li.jwt::before,.hashicorp-consul nav .dcs li.is-local span.jwt::before,.hashicorp-consul nav .dcs li.is-primary span.jwt::before,.jwt.consul-auth-method-type::before,.jwt.consul-kind::before,.jwt.consul-source::before,.jwt.consul-transparent-proxy::before,.jwt.leader::before,.jwt.topology-metrics-source-type::before,.popover-select .jwt button::before,.search-bar-status li.jwt:not(.remove-all)::before,html[data-route^="dc.acls.index"] main td strong.jwt::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.jwt::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.jwt::before,span.jwt.policy-node-identity::before,span.jwt.policy-service-identity::before{--icon-name:icon-logo-jwt-color;content:""}@keyframes icon-logo-microsoft-color{100%{background-image:var(--icon-microsoft-color-16)}}.oidc-select .microsoft-oidc-provider::before{--icon-name:icon-logo-microsoft-color;content:""}@keyframes icon-logo-nomad-color{100%{background-image:var(--icon-nomad-color-16)}}.consul-external-source.nomad::before,.popover-select .nomad button::before{--icon-name:icon-logo-nomad-color;content:""}@keyframes icon-logo-oidc-color{100%{background-image:var(--icon-logo-oidc-color-16)}}.consul-external-source.oidc::before,.consul-health-check-list .health-check-output dd em.oidc::before,.consul-intention-list td strong.oidc::before,.consul-intention-permission-list strong.oidc::before,.consul-intention-search-bar li button span.oidc::before,.consul-server-card .health-status+dd.oidc::before,.discovery-chain .route-card>header ul li.oidc::before,.hashicorp-consul nav .dcs li.is-local span.oidc::before,.hashicorp-consul nav .dcs li.is-primary span.oidc::before,.oidc.consul-auth-method-type::before,.oidc.consul-kind::before,.oidc.consul-source::before,.oidc.consul-transparent-proxy::before,.oidc.leader::before,.oidc.topology-metrics-source-type::before,.popover-select .oidc button::before,.search-bar-status li.oidc:not(.remove-all)::before,html[data-route^="dc.acls.index"] main td strong.oidc::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.oidc::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.oidc::before,span.oidc.policy-node-identity::before,span.oidc.policy-service-identity::before{--icon-name:icon-logo-oidc-color;content:""}@keyframes icon-logo-okta-color{100%{background-image:var(--icon-okta-color-16)}}.oidc-select .okta-oidc-provider::before{--icon-name:icon-logo-okta-color;content:""}@keyframes icon-logo-terraform-color{100%{background-image:var(--icon-terraform-color-16)}}.consul-external-source.terraform::before,.popover-select .terraform button::before{--icon-name:icon-logo-terraform-color;content:""}@keyframes icon-mesh{100%{-webkit-mask-image:var(--icon-mesh-16);mask-image:var(--icon-mesh-16);background-color:var(--icon-color,var(--color-mesh-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.mesh dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.mesh dt::before,.consul-upstream-instance-list li>.detail dl.mesh dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.mesh dt::before{--icon-name:icon-mesh;content:""}@keyframes icon-port{100%{-webkit-mask-image:var(--icon-port-16);mask-image:var(--icon-port-16);background-color:var(--icon-color,var(--color-port-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.port dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.port dt::before,.consul-upstream-instance-list li>.detail dl.port dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.port dt::before{--icon-name:icon-port;content:""}@keyframes icon-protocol{100%{-webkit-mask-image:var(--icon-protocol-16);mask-image:var(--icon-protocol-16);background-color:var(--icon-color,var(--color-protocol-500,currentColor))}}.consul-exposed-path-list>ul>li>.detail dl.protocol dt::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.protocol dt::before,.consul-upstream-instance-list li>.detail dl.protocol dt::before,.list-collection>ul>li:not(:first-child)>.detail dl.protocol dt::before{--icon-name:icon-protocol;content:""}@keyframes icon-redirect{100%{-webkit-mask-image:var(--icon-redirect-16);mask-image:var(--icon-redirect-16);background-color:var(--icon-color,var(--color-redirect-500,currentColor))}}@keyframes icon-search-color{100%{background-image:var(--icon-search-color-16)}}[for=toolbar-toggle]{--icon-name:icon-search-color;content:""}@keyframes icon-sort{100%{-webkit-mask-image:var(--icon-sort-desc-16);mask-image:var(--icon-sort-desc-16);background-color:var(--icon-color,var(--color-sort-500,currentColor))}}.type-sort.popover-select label>::before{--icon-name:icon-sort;content:""}@keyframes icon-union{100%{-webkit-mask-image:var(--icon-union-16);mask-image:var(--icon-union-16);background-color:var(--icon-color,var(--color-union-500,currentColor))}}#downstream-container .topology-metrics-card .details .group span::before,#upstream-container .topology-metrics-card .details .group span::before{--icon-name:icon-union;content:""}.kubernetes.informed-action header::before{-webkit-mask-image:none;mask-image:none;background-color:var(--transparent)!important}.ember-basic-dropdown{position:relative}.ember-basic-dropdown,.ember-basic-dropdown-content,.ember-basic-dropdown-content *{box-sizing:border-box}.ember-basic-dropdown-content{position:absolute;width:auto;z-index:1000;background-color:#fff}.ember-basic-dropdown-content--left{left:0}.ember-basic-dropdown-content--right{right:0}.ember-basic-dropdown-overlay{position:fixed;background:rgba(0,0,0,.5);width:100%;height:100%;z-index:10;top:0;left:0;pointer-events:none}.ember-basic-dropdown-content-wormhole-origin{display:inline}.ember-power-select-dropdown *{box-sizing:border-box}.ember-power-select-trigger{position:relative;border-radius:4px;background-color:#fff;line-height:1.75;overflow-x:hidden;text-overflow:ellipsis;min-height:1.75em;user-select:none;-webkit-user-select:none;color:inherit}.ember-power-select-trigger:after{content:"";display:table;clear:both}.ember-power-select-trigger--active,.ember-power-select-trigger:focus{box-shadow:none}.ember-basic-dropdown-trigger--below.ember-power-select-trigger[aria-expanded=true],.ember-basic-dropdown-trigger--in-place.ember-power-select-trigger[aria-expanded=true]{border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-basic-dropdown-trigger--above.ember-power-select-trigger[aria-expanded=true]{border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-placeholder{color:#999;display:block;overflow-x:hidden;white-space:nowrap;text-overflow:ellipsis}.ember-power-select-status-icon{position:absolute;display:inline-block;width:0;height:0;top:0;bottom:0;margin:auto;border-style:solid;border-width:7px 4px 0;border-color:#aaa transparent transparent;right:5px}.ember-basic-dropdown-trigger[aria-expanded=true] .ember-power-select-status-icon{transform:rotate(180deg)}.ember-power-select-clear-btn{position:absolute;cursor:pointer;right:25px}.ember-power-select-trigger-multiple-input{font-family:inherit;font-size:inherit;border:none;display:inline-block;line-height:inherit;-webkit-appearance:none;outline:0;padding:0;float:left;background-color:transparent;text-indent:2px}.ember-power-select-trigger-multiple-input:disabled{background-color:#eee}.ember-power-select-trigger-multiple-input::placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-webkit-input-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-moz-placeholder{opacity:1;color:#999}.ember-power-select-trigger-multiple-input::-ms-input-placeholder{opacity:1;color:#999}.active.discovery-chain [id*=":"],.discovery-chain path,.ember-power-select-multiple-remove-btn:not(:hover){opacity:.5}.ember-power-select-multiple-options{padding:0;margin:0}.ember-power-select-multiple-option{border:1px solid gray;border-radius:4px;color:#333;background-color:#e4e4e4;padding:0 4px;display:inline-block;line-height:1.45;float:left;margin:2px 0 2px 3px}.ember-power-select-multiple-remove-btn{cursor:pointer}.ember-power-select-search{padding:4px}.ember-power-select-search-input{border:1px solid #aaa;border-radius:0;width:100%;font-size:inherit;line-height:inherit;padding:0 5px}.ember-power-select-search-input:focus{border:1px solid #aaa;box-shadow:none}.ember-power-select-dropdown{border-left:1px solid #aaa;border-right:1px solid #aaa;line-height:1.75;border-radius:4px;box-shadow:none;overflow:hidden;color:inherit}.ember-power-select-dropdown.ember-basic-dropdown-content--above{border-top:1px solid #aaa;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--below,.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{border-top:none;border-bottom:1px solid #aaa;border-top-left-radius:0;border-top-right-radius:0}.ember-power-select-dropdown.ember-basic-dropdown-content--in-place{width:100%}.ember-power-select-options{list-style:none;margin:0;padding:0;user-select:none;-webkit-user-select:none}.ember-power-select-placeholder,.ember-power-select-selected-item,a[rel*=external]::after{margin-left:8px}.ember-power-select-options[role=listbox]{overflow-y:auto;-webkit-overflow-scrolling:touch;max-height:12.25em}.ember-power-select-option{cursor:pointer;padding:0 8px}.ember-power-select-group[aria-disabled=true]{color:#999;cursor:not-allowed}.ember-power-select-group[aria-disabled=true] .ember-power-select-option,.ember-power-select-option[aria-disabled=true]{color:#999;pointer-events:none;cursor:not-allowed}.ember-power-select-option[aria-selected=true]{background-color:#ddd}.ember-power-select-option[aria-current=true]{background-color:#5897fb;color:#fff}.ember-power-select-group-name{cursor:default;font-weight:700}.ember-power-select-trigger[aria-disabled=true]{background-color:#eee}.ember-power-select-trigger{padding:0 16px 0 0}.ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-left:24px}.ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-left:40px}.ember-power-select-group .ember-power-select-option{padding-left:24px}.ember-power-select-group .ember-power-select-group-name{padding-left:8px}.ember-power-select-trigger[dir=rtl]{padding:0 0 0 16px}.ember-power-select-trigger[dir=rtl] .ember-power-select-placeholder,.ember-power-select-trigger[dir=rtl] .ember-power-select-selected-item{margin-right:8px}.ember-power-select-trigger[dir=rtl] .ember-power-select-multiple-option,.ember-power-select-trigger[dir=rtl] .ember-power-select-trigger-multiple-input{float:right}.ember-power-select-trigger[dir=rtl] .ember-power-select-status-icon{left:5px;right:initial}.ember-power-select-trigger[dir=rtl] .ember-power-select-clear-btn{left:25px;right:initial}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-group-name{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group .ember-power-select-option{padding-right:40px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-option{padding-right:24px}.ember-power-select-dropdown[dir=rtl] .ember-power-select-group .ember-power-select-group-name{padding-right:8px}#login-toggle+div footer button:focus,#login-toggle+div footer button:hover,.consul-intention-fieldsets .permissions>button:focus,.consul-intention-fieldsets .permissions>button:hover,.empty-state>ul>li>:focus,.empty-state>ul>li>:hover,.empty-state>ul>li>label>button:focus,.empty-state>ul>li>label>button:hover,.modal-dialog [role=document] dd a:focus,.modal-dialog [role=document] dd a:hover,.modal-dialog [role=document] p a:focus,.modal-dialog [role=document] p a:hover,.oidc-select button.reset:focus,.oidc-select button.reset:hover,.search-bar-status .remove-all button:focus,.search-bar-status .remove-all button:hover,label.type-dialog:focus,label.type-dialog:hover,main dd a:focus,main dd a:hover,main p a:focus,main p a:hover{text-decoration:underline}#login-toggle+div footer button,.consul-intention-fieldsets .permissions>button,.empty-state>ul>li>*,.empty-state>ul>li>:active,.empty-state>ul>li>:focus,.empty-state>ul>li>:hover,.empty-state>ul>li>label>button,.empty-state>ul>li>label>button:active,.empty-state>ul>li>label>button:focus,.empty-state>ul>li>label>button:hover,.modal-dialog [role=document] dd a,.modal-dialog [role=document] p a,.oidc-select button.reset,.search-bar-status .remove-all button,label.type-dialog,label.type-dialog:active,label.type-dialog:focus,label.type-dialog:hover,main dd a,main dd a:active,main dd a:focus,main dd a:hover,main p a,main p a:active,main p a:focus,main p a:hover{color:rgb(var(--color-action))}.modal-dialog [role=document] label a[rel*=help],div.with-confirmation p,main label a[rel*=help]{color:rgb(var(--tone-gray-400))}#login-toggle+div footer button,.consul-intention-fieldsets .permissions>button,.empty-state>ul>li>*,.empty-state>ul>li>label>button,.modal-dialog [role=document] dd a,.modal-dialog [role=document] p a,.oidc-select button.reset,.search-bar-status .remove-all button,label.type-dialog,main dd a,main p a{cursor:pointer;background-color:var(--transparent)}#login-toggle+div footer button:active,.consul-intention-fieldsets .permissions>button:active,.empty-state>ul>li>:active,.empty-state>ul>li>label>button:active,.modal-dialog [role=document] dd a:active,.modal-dialog [role=document] p a:active,.oidc-select button.reset:active,.search-bar-status .remove-all button:active,label.type-dialog:active,main dd a:active,main p a:active{outline:0}.modal-dialog [role=document] a[rel*=help]::after,main a[rel*=help]::after{opacity:.4}.modal-dialog [role=document] h2 a,main h2 a{color:rgb(var(--tone-gray-900))}.modal-dialog [role=document] h2 a[rel*=help]::after,main h2 a[rel*=help]::after{font-size:.65em;margin-top:.2em;margin-left:.2em}.tab-section>p:only-child [rel*=help]::after{content:none}.auth-form{width:320px;margin:-20px 25px 0}.auth-form em{color:rgb(var(--tone-gray-500));font-style:normal;display:inline-block;margin-top:1em}.auth-form .oidc-select,.auth-form form{padding-top:1em}.auth-form form{margin-bottom:0!important}.auth-form .ember-basic-dropdown-trigger,.auth-form button:not(.reset){width:100%}.auth-form .progress{margin:0 auto}#login-toggle+div footer button::after{font-size:120%;position:relative;top:-1px;left:-3px}#login-toggle+div footer{border-top:0;padding:10px 42px 20px;background-color:var(--transparent)}#login-toggle+div>div>div>div{padding-bottom:0}.auth-profile{padding:.9em 1em}.auth-profile dt span{font-weight:var(--typo-weight-normal)}.auth-profile dt{font-weight:var(--typo-weight-bold)}.auth-profile dd,.auth-profile dt{color:rgb(var(--tone-gray-800))}.auth-profile dt span{color:rgb(var(--tone-gray-600))}main header nav:first-child ol li a{color:rgb(var(--tone-gray-500));text-decoration:none}main header nav:first-child ol li a:hover{color:rgb(var(--tone-blue-500));text-decoration:underline}main header nav:first-child ol li a::before{text-decoration:none}main header nav:first-child ol>li{list-style-type:none;display:inline-flex}main header nav:first-child ol li:first-child a::before{background-color:rgb(var(--tone-gray-500));margin-right:4px;display:inline-block}main header nav:first-child ol li:not(:first-child) a{margin-left:6px}main header nav:first-child ol li:not(:first-child) a::before{content:"/";color:rgb(var(--tone-gray-500));margin-right:8px;display:inline-block}main header nav:first-child{position:absolute;top:12px}.app-view>div form button[type=button].type-delete,.consul-intention-action-warn-modal button.dangerous,.copy-button button,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.empty-state div>button,.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.modal-dialog .type-delete,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.oidc-select button:not(.reset),.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*,.with-confirmation .type-delete,a.type-create,button.type-cancel,button.type-submit,button[type=reset],button[type=submit],header .actions button[type=button]:not(.copy-btn),table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{cursor:pointer;white-space:nowrap;text-decoration:none}.app-view>div form button[type=button].type-delete:disabled,.consul-intention-action-warn-modal button.dangerous:disabled,.copy-button button:disabled,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]:disabled,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]:disabled,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]:disabled,.empty-state div>button:disabled,.hashicorp-consul nav li.nspaces .disclosure-menu>button:disabled,.hashicorp-consul nav li.partitions .disclosure-menu>button:disabled,.informed-action>ul>li>:disabled,.menu-panel>ul>[role=treeitem]:disabled,.menu-panel>ul>li>[role=menuitem]:disabled,.menu-panel>ul>li>[role=option]:disabled,.modal-dialog .type-delete:disabled,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:disabled,.oidc-select button:disabled:not(.reset),.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:disabled,.popover-select label>:disabled,.topology-notices button:disabled,.with-confirmation .type-delete:disabled,a.type-create:disabled,button.type-cancel:disabled,button.type-submit:disabled,button[type=reset]:disabled,button[type=submit]:disabled,header .actions button[type=button]:disabled:not(.copy-btn),table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:disabled,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:disabled,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:disabled,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:disabled{cursor:default;box-shadow:none}.checkbox-group label,.more-popover-menu>[type=checkbox]~label,.popover-menu>[type=checkbox]~label,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label,table.has-actions tr>.actions>[type=checkbox]~label,table.with-details tr>.actions>[type=checkbox]~label{cursor:pointer}.app-view>div form button[type=button].type-delete,.consul-intention-action-warn-modal button.dangerous,.empty-state div>button,.modal-dialog .type-delete,.oidc-select button:not(.reset),.with-confirmation .type-delete,a.type-create,button.type-cancel,button.type-submit,button[type=reset],button[type=submit],header .actions button[type=button]:not(.copy-btn){border-width:1px;border-radius:var(--decor-radius-100);box-shadow:var(--decor-elevation-300)}button.type-cancel:disabled,button[type=reset]:disabled,header .actions button[type=button]:disabled:not(.copy-btn){color:rgb(var(--tone-gray-600))}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{color:rgb(var(--tone-gray-900));background-color:rgb(var(--tone-gray-000))}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]:focus,.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]:hover,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]:focus,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]:hover,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]:focus,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]:hover,.hashicorp-consul nav li.nspaces .disclosure-menu>button:focus,.hashicorp-consul nav li.nspaces .disclosure-menu>button:hover,.hashicorp-consul nav li.partitions .disclosure-menu>button:focus,.hashicorp-consul nav li.partitions .disclosure-menu>button:hover,.informed-action>ul>li>:focus,.informed-action>ul>li>:hover,.menu-panel>ul>[role=treeitem]:focus,.menu-panel>ul>[role=treeitem]:hover,.menu-panel>ul>li>[role=menuitem]:focus,.menu-panel>ul>li>[role=menuitem]:hover,.menu-panel>ul>li>[role=option]:focus,.menu-panel>ul>li>[role=option]:hover,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:focus,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:hover,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:focus,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:hover,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:focus,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]:hover,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:focus,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]:hover,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:focus,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:hover,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:focus,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:hover,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:focus,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]:hover,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:focus,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]:hover,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:focus,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]:hover{background-color:rgb(var(--tone-gray-050))}.type-sort.popover-select label>::before{position:relative;width:16px;height:16px}.type-sort.popover-select label>::after{top:0!important}.app-view>div form button[type=button].type-delete,.consul-intention-action-warn-modal button.dangerous,.copy-button button,.empty-state div>button,.modal-dialog .type-delete,.oidc-select button:not(.reset),.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*,.with-confirmation .type-delete,a.type-create,button.type-cancel,button.type-submit,button[type=reset],button[type=submit],header .actions button[type=button]:not(.copy-btn){position:relative}.app-view>div form button[type=button].type-delete .progress.indeterminate,.consul-intention-action-warn-modal button.dangerous .progress.indeterminate,.copy-button button .progress.indeterminate,.empty-state div>button .progress.indeterminate,.modal-dialog .type-delete .progress.indeterminate,.oidc-select button:not(.reset) .progress.indeterminate,.popover-select label>* .progress.indeterminate,.topology-notices button .progress.indeterminate,.with-confirmation .type-delete .progress.indeterminate,a.type-create .progress.indeterminate,button.type-cancel .progress.indeterminate,button.type-submit .progress.indeterminate,button[type=reset] .progress.indeterminate,button[type=submit] .progress.indeterminate,header .actions button[type=button]:not(.copy-btn) .progress.indeterminate{position:absolute;top:50%;left:50%;margin-left:-12px;margin-top:-12px}.app-view>div form button[type=button].type-delete:disabled .progress+*,.consul-intention-action-warn-modal button.dangerous:disabled .progress+*,.copy-button button:disabled .progress+*,.empty-state div>button:disabled .progress+*,.modal-dialog .type-delete:disabled .progress+*,.oidc-select button:disabled:not(.reset) .progress+*,.popover-select label>:disabled .progress+*,.topology-notices button:disabled .progress+*,.with-confirmation .type-delete:disabled .progress+*,a.type-create:disabled .progress+*,button.type-cancel:disabled .progress+*,button.type-submit:disabled .progress+*,button[type=reset]:disabled .progress+*,button[type=submit]:disabled .progress+*,header .actions button[type=button]:disabled:not(.copy-btn) .progress+*{visibility:hidden}.app-view>div form button[type=button].type-delete:empty,.consul-intention-action-warn-modal button.dangerous:empty,.copy-button button:empty,.empty-state div>button:empty,.modal-dialog .type-delete:empty,.oidc-select button:empty:not(.reset),.popover-select label>:empty,.topology-notices button:empty,.with-confirmation .type-delete:empty,a.type-create:empty,button.type-cancel:empty,button.type-submit:empty,button[type=reset]:empty,button[type=submit]:empty,header .actions button[type=button]:empty:not(.copy-btn){padding-right:0!important;padding-left:18px!important;margin-right:5px}.app-view>div form button[type=button].type-delete:empty::before,.consul-intention-action-warn-modal button.dangerous:empty::before,.copy-button button:empty::before,.empty-state div>button:empty::before,.modal-dialog .type-delete:empty::before,.oidc-select button:empty:not(.reset)::before,.popover-select label>:empty::before,.topology-notices button:empty::before,.with-confirmation .type-delete:empty::before,a.type-create:empty::before,button.type-cancel:empty::before,button.type-submit:empty::before,button[type=reset]:empty::before,button[type=submit]:empty::before,header .actions button[type=button]:empty:not(.copy-btn)::before{left:1px}.app-view>div form button[type=button].type-delete:not(:empty),.consul-intention-action-warn-modal button.dangerous:not(:empty),.copy-button button:not(:empty),.empty-state div>button:not(:empty),.modal-dialog .type-delete:not(:empty),.oidc-select button:not(:empty):not(.reset),.popover-select label>:not(:empty),.topology-notices button:not(:empty),.with-confirmation .type-delete:not(:empty),a.type-create:not(:empty),button.type-cancel:not(:empty),button.type-submit:not(:empty),button[type=reset]:not(:empty),button[type=submit]:not(:empty),header .actions button[type=button]:not(:empty):not(.copy-btn){display:inline-flex;text-align:center;justify-content:center;align-items:center;padding:calc(.5em - 1px) calc(2.2em - 1px);min-width:100px}.app-view>div form button[type=button].type-delete:not(:last-child),.consul-intention-action-warn-modal button.dangerous:not(:last-child),.copy-button button:not(:last-child),.empty-state div>button:not(:last-child),.modal-dialog .type-delete:not(:last-child),.oidc-select button:not(:last-child):not(.reset),.popover-select label>:not(:last-child),.topology-notices button:not(:last-child),.with-confirmation .type-delete:not(:last-child),a.type-create:not(:last-child),button.type-cancel:not(:last-child),button.type-submit:not(:last-child),button[type=reset]:not(:last-child),button[type=submit]:not(:last-child),header .actions button[type=button]:not(:last-child):not(.copy-btn){margin-right:8px}.app-view>header .actions a,.app-view>header .actions button{padding-top:calc(.4em - 1px)!important;padding-bottom:calc(.4em - 1px)!important}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button,.informed-action>ul>li>*,.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{padding:.9em 1em;text-align:center;display:inline-block;box-sizing:border-box}.type-sort.popover-select label>*{height:35px!important}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card{border:var(--decor-border-100);border-radius:var(--decor-radius-100);background-color:rgb(var(--tone-gray-000) /90%);display:block;position:relative}.discovery-chain .resolver-card>section,.discovery-chain .resolver-card>ul>li,.discovery-chain .route-card>section,.discovery-chain .route-card>ul>li,.discovery-chain .splitter-card>section,.discovery-chain .splitter-card>ul>li{border-top:var(--decor-border-100)}.discovery-chain .resolver-card,.discovery-chain .resolver-card>section,.discovery-chain .resolver-card>ul>li,.discovery-chain .route-card,.discovery-chain .route-card>section,.discovery-chain .route-card>ul>li,.discovery-chain .splitter-card,.discovery-chain .splitter-card>section,.discovery-chain .splitter-card>ul>li{border-color:rgb(var(--tone-gray-200))}.discovery-chain .resolver-card:focus,.discovery-chain .resolver-card:hover,.discovery-chain .route-card:focus,.discovery-chain .route-card:hover,.discovery-chain .splitter-card:focus,.discovery-chain .splitter-card:hover{box-shadow:var(--decor-elevation-400)}.discovery-chain .resolver-card>header,.discovery-chain .route-card>header,.discovery-chain .splitter-card>header{padding:10px}.discovery-chain .resolver-card>section,.discovery-chain .resolver-card>ul>li,.discovery-chain .route-card>section,.discovery-chain .route-card>ul>li,.discovery-chain .splitter-card>section,.discovery-chain .splitter-card>ul>li{padding:5px 10px}.discovery-chain .resolver-card ul,.discovery-chain .route-card ul,.discovery-chain .splitter-card ul{list-style-type:none;margin:0;padding:0}.checkbox-group label{margin-right:10px;white-space:nowrap}.checkbox-group span{display:inline-block;margin-left:10px;min-width:50px}.CodeMirror{max-width:1260px;min-height:300px;height:auto;padding-bottom:20px}.CodeMirror-scroll{overflow-x:hidden!important}.CodeMirror-lint-tooltip{background-color:#f9f9fa;border:1px solid var(--syntax-light-gray);border-radius:0;color:#212121;font-size:13px;padding:7px 8px 9px}.cm-s-hashi.CodeMirror{width:100%;background-color:rgb(var(--tone-gray-999))!important;color:#cfd2d1!important;border:none;-webkit-font-smoothing:auto;line-height:1.4}.cm-s-hashi .CodeMirror-gutters{color:var(--syntax-dark-grey);background-color:var(--syntax-gutter-grey);border:none}.cm-s-hashi .CodeMirror-cursor{border-left:solid thin #f8f8f0}.cm-s-hashi .CodeMirror-linenumber{color:#6d8a88}.cm-s-hashi.CodeMirror-focused div.CodeMirror-selected{background:#214283}.cm-s-hashi .CodeMirror-line::selection,.cm-s-hashi .CodeMirror-line>span::selection,.cm-s-hashi .CodeMirror-line>span>span::selection{background:#214283}.cm-s-hashi .CodeMirror-line::-moz-selection,.cm-s-hashi .CodeMirror-line>span::-moz-selection,.cm-s-hashi .CodeMirror-line>span>span::-moz-selection{background:rgb(var(--tone-gray-000) /10%)}.cm-s-hashi span.cm-comment{color:var(--syntax-light-grey)}.cm-s-hashi span.cm-string,.cm-s-hashi span.cm-string-2{color:var(--syntax-packer)}.cm-s-hashi span.cm-number{color:var(--syntax-serf)}.cm-s-hashi span.cm-variable,.cm-s-hashi span.cm-variable-2{color:#9e84c5}.cm-s-hashi span.cm-def{color:var(--syntax-packer)}.cm-s-hashi span.cm-operator{color:var(--syntax-gray)}.cm-s-hashi span.cm-keyword{color:var(--syntax-yellow)}.cm-s-hashi span.cm-atom{color:var(--syntax-serf)}.cm-s-hashi span.cm-meta,.cm-s-hashi span.cm-tag{color:var(--syntax-packer)}.cm-s-hashi span.cm-error{color:var(--syntax-red)}.cm-s-hashi span.cm-attribute,.cm-s-hashi span.cm-qualifier{color:#9fca56}.cm-s-hashi span.cm-property{color:#9e84c5}.cm-s-hashi span.cm-builtin,.cm-s-hashi span.cm-variable-3{color:#9fca56}.cm-s-hashi .CodeMirror-activeline-background{background:#101213}.cm-s-hashi .CodeMirror-matchingbracket{text-decoration:underline;color:rgb(var(--tone-gray-000))!important}.readonly-codemirror .CodeMirror-cursors{display:none}.readonly-codemirror .cm-s-hashi span{color:var(--syntax-light-grey)}.readonly-codemirror .cm-s-hashi span.cm-string,.readonly-codemirror .cm-s-hashi span.cm-string-2{color:var(--syntax-faded-gray)}.readonly-codemirror .cm-s-hashi span.cm-number{color:#a3acbc}.app .skip-links,.readonly-codemirror .cm-s-hashi span.cm-property{color:rgb(var(--tone-gray-000))}.readonly-codemirror .cm-s-hashi span.cm-variable-2{color:var(--syntax-light-grey-blue)}.code-editor .toolbar-container{background:rgb(var(--tone-gray-050));background:linear-gradient(180deg,rgb(var(--tone-gray-050)) 50%,rgb(var(--tone-gray-150)) 100%);border:1px solid;border-bottom-color:rgb(var(--tone-gray-600));border-top-color:rgb(var(--tone-gray-400))}.code-editor .toolbar-container .toolbar .title{color:rgb(var(--tone-gray-900));font-size:14px;font-weight:700;padding:0 8px}.code-editor .toolbar-container .toolbar .toolbar-separator{border-right:1px solid rgb(var(--tone-gray-300))}.code-editor .toolbar-container .ember-power-select-trigger{background-color:rgb(var(--tone-gray-000));color:rgb(var(--tone-gray-999));border-radius:var(--decor-radius-100);border:var(--decor-border-100);border-color:rgb(var(--tone-gray-700))}.code-editor::after,.consul-auth-method-binding-list dl dd .copy-button button::before,.consul-auth-method-view dl dd .copy-button button::before{background-color:rgb(var(--tone-gray-999))}.code-editor{display:block;border:10px;overflow:hidden;position:relative;clear:both}.code-editor::after{position:absolute;bottom:0;width:100%;height:25px;content:"";display:block}.code-editor>pre{display:none}.code-editor .toolbar-container,.code-editor .toolbar-container .toolbar{align-items:center;justify-content:space-between;display:flex}.code-editor .toolbar-container{position:relative;margin-top:4px;height:44px}.code-editor .toolbar-container .toolbar{flex:1;white-space:nowrap}.code-editor .toolbar-container .toolbar .toolbar-separator{height:32px;margin:0 4px;width:0}.code-editor .toolbar-container .toolbar .tools{display:flex;flex-direction:row;margin:0 10px;align-items:center}.code-editor .toolbar-container .toolbar .tools .copy-button{margin-left:10px}.code-editor .toolbar-container .ember-basic-dropdown-trigger{margin:0 8px;width:120px;height:32px;display:flex;align-items:center;flex-direction:row}.consul-exposed-path-list>ul>li,.consul-lock-session-list ul>li:not(:first-child),.consul-upstream-instance-list li,.list-collection>ul>li:not(:first-child){display:grid;grid-template-columns:1fr auto;grid-template-rows:50% 50%;grid-template-areas:"header actions" "detail actions"}.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.header{grid-area:header;align-self:start}.consul-exposed-path-list>ul>li>.detail,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-upstream-instance-list li>.detail,.list-collection>ul>li:not(:first-child)>.detail{grid-area:detail;align-self:end}.consul-exposed-path-list>ul>li>.detail *,.consul-lock-session-list ul>li:not(:first-child)>.detail *,.consul-upstream-instance-list li>.detail *,.list-collection>ul>li:not(:first-child)>.detail *{flex-wrap:nowrap!important}.consul-exposed-path-list>ul>li>.actions,.consul-lock-session-list ul>li:not(:first-child)>.actions,.consul-upstream-instance-list li>.actions,.list-collection>ul>li:not(:first-child)>.actions{grid-area:actions;display:inline-flex}.consul-nspace-list>ul>li:not(:first-child) dt,.consul-policy-list>ul li:not(:first-child) dl:not(.datacenter) dt,.consul-role-list>ul>li:not(:first-child) dt,.consul-service-instance-list .port dt,.consul-service-instance-list .port dt::before,.consul-token-list>ul>li:not(:first-child) dt{display:none}.consul-exposed-path-list>ul>li>.header:nth-last-child(2),.consul-lock-session-list ul>li:not(:first-child)>.header:nth-last-child(2),.consul-upstream-instance-list li>.header:nth-last-child(2),.list-collection>ul>li:not(:first-child)>.header:nth-last-child(2){grid-column-start:header;grid-column-end:actions}.consul-exposed-path-list>ul>li>.detail:last-child,.consul-lock-session-list ul>li:not(:first-child)>.detail:last-child,.consul-upstream-instance-list li>.detail:last-child,.list-collection>ul>li:not(:first-child)>.detail:last-child{grid-column-start:detail;grid-column-end:actions}.consul-nspace-list>ul>li:not(:first-child) dt+dd,.consul-policy-list>ul li:not(:first-child) dl:not(.datacenter) dt+dd,.consul-role-list>ul>li:not(:first-child) dt+dd,.consul-token-list>ul>li:not(:first-child) dt+dd{margin-left:0!important}.consul-policy-list dl.datacenter dt,.consul-service-list li>div:first-child>dl:first-child dd{margin-top:1px}.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.consul-exposed-path-list>ul>li>.detail .copy-button,.consul-lock-session-list ul>li:not(:first-child)>.detail .copy-button,.consul-upstream-instance-list li>.detail .copy-button,.list-collection>ul>li:not(:first-child)>.detail .copy-button,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.oidc-select label>em,.type-toggle>em,main .type-password>em,main .type-select>em,main .type-text>em,main form button+em{margin-top:2px}.consul-service-instance-list .detail,.consul-service-list .detail{overflow-x:visible!important}.consul-intention-permission-list>ul{border-top:1px solid rgb(var(--tone-gray-200))}.consul-service-instance-list .port .copy-button{margin-right:0}.consul-exposed-path-list>ul>li .copy-button,.consul-lock-session-list ul>li:not(:first-child) .copy-button,.consul-upstream-instance-list li .copy-button,.list-collection>ul>li:not(:first-child) .copy-button{display:inline-flex}.consul-exposed-path-list>ul>li>.header .copy-button,.consul-lock-session-list ul>li:not(:first-child)>.header .copy-button,.consul-upstream-instance-list li>.header .copy-button,.list-collection>ul>li:not(:first-child)>.header .copy-button{margin-left:4px}.consul-exposed-path-list>ul>li .copy-button button,.consul-lock-session-list ul>li:not(:first-child) .copy-button button,.consul-upstream-instance-list li .copy-button button,.list-collection>ul>li:not(:first-child) .copy-button button{padding:0!important;margin:0!important}.consul-exposed-path-list>ul>li>.header .copy-button button,.consul-lock-session-list ul>li:not(:first-child)>.header .copy-button button,.consul-upstream-instance-list li>.header .copy-button button,.list-collection>ul>li:not(:first-child)>.header .copy-button button{display:none}.consul-exposed-path-list>ul>li>.header:hover .copy-button button,.consul-lock-session-list ul>li:not(:first-child)>.header:hover .copy-button button,.consul-upstream-instance-list li>.header:hover .copy-button button,.list-collection>ul>li:not(:first-child)>.header:hover .copy-button button{display:block}.consul-exposed-path-list>ul>li .copy-button button:hover,.consul-lock-session-list ul>li:not(:first-child) .copy-button button:hover,.consul-upstream-instance-list li .copy-button button:hover,.list-collection>ul>li:not(:first-child) .copy-button button:hover{background-color:transparent!important}.consul-exposed-path-list>ul>li>.detail>.consul-external-source:first-child,.consul-exposed-path-list>ul>li>.detail>.consul-kind:first-child,.consul-lock-session-list ul>li:not(:first-child)>.detail>.consul-external-source:first-child,.consul-lock-session-list ul>li:not(:first-child)>.detail>.consul-kind:first-child,.consul-upstream-instance-list li>.detail>.consul-external-source:first-child,.consul-upstream-instance-list li>.detail>.consul-kind:first-child,.list-collection>ul>li:not(:first-child)>.detail>.consul-external-source:first-child,.list-collection>ul>li:not(:first-child)>.detail>.consul-kind:first-child{margin-left:-5px}.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.detail .policy::before,.consul-exposed-path-list>ul>li>.detail .role::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .role::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.detail .policy::before,.consul-upstream-instance-list li>.detail .role::before,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.detail .policy::before,.list-collection>ul>li:not(:first-child)>.detail .role::before{margin-right:3px}.consul-exposed-path-list>ul>li>.detail .policy-management::before,.consul-exposed-path-list>ul>li>.header .policy-management dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail .policy-management::before,.consul-lock-session-list ul>li:not(:first-child)>.header .policy-management dd::before,.consul-upstream-instance-list li>.detail .policy-management::before,.consul-upstream-instance-list li>.header .policy-management dd::before,.list-collection>ul>li:not(:first-child)>.detail .policy-management::before,.list-collection>ul>li:not(:first-child)>.header .policy-management dd::before{--icon-color:rgb(var(--tone-brand-600))}table div.with-confirmation.confirming{background-color:rgb(var(--tone-gray-000))}div.with-confirmation p{margin-right:12px;padding-left:12px;margin-bottom:0!important}div.with-confirmation{float:right;display:flex;align-items:center}table td>div.with-confirmation.confirming{position:absolute;right:0}@media (max-width:420px){div.with-confirmation{float:none;margin-top:1em;display:block}div.with-confirmation p{margin-bottom:1em}}.copy-button button{color:rgb(var(--tone-blue-500));--icon-color:var(--transparent);min-height:17px}.copy-button button::after{--icon-color:rgb(var(--tone-gray-050))}.copy-button button:focus,.copy-button button:hover:not(:disabled):not(:active){color:rgb(var(--tone-blue-500));--icon-color:rgb(var(--tone-gray-050))}.copy-button button:hover::before{--icon-color:rgb(var(--tone-blue-500))}.copy-button button:active{--icon-color:rgb(var(--tone-gray-200))}.copy-button button:empty{padding:0!important;margin-right:0;top:-1px}.copy-button button:empty::after{content:"";display:none;position:absolute;top:-2px;left:-3px;width:20px;height:22px}.copy-button button:empty:hover::after{display:block}.copy-button button:empty::before{position:relative;z-index:1}.copy-button button:not(:empty)::before{margin-right:4px}.consul-bucket-list .copy-button,.consul-exposed-path-list>ul>li>.detail dl .copy-button,.consul-instance-checks .copy-button,.consul-lock-session-list dl .copy-button,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .copy-button,.consul-upstream-instance-list dl .copy-button,.list-collection>ul>li:not(:first-child)>.detail dl .copy-button,.tag-list .copy-button,section[data-route="dc.show.license"] .validity dl .copy-button,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .copy-button,td.tags .copy-button{margin-top:0!important}.consul-bucket-list .copy-btn,.consul-exposed-path-list>ul>li>.detail dl .copy-btn,.consul-instance-checks .copy-btn,.consul-lock-session-list dl .copy-btn,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .copy-btn,.consul-upstream-instance-list dl .copy-btn,.list-collection>ul>li:not(:first-child)>.detail dl .copy-btn,.tag-list .copy-btn,section[data-route="dc.show.license"] .validity dl .copy-btn,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .copy-btn,td.tags .copy-btn{top:0!important}.consul-bucket-list .copy-btn:empty::before,.consul-exposed-path-list>ul>li>.detail dl .copy-btn:empty::before,.consul-instance-checks .copy-btn:empty::before,.consul-lock-session-list dl .copy-btn:empty::before,.consul-upstream-instance-list dl .copy-btn:empty::before,.list-collection>ul>li:not(:first-child)>.detail dl .copy-btn:empty::before,.tag-list .copy-btn:empty::before,section[data-route="dc.show.license"] .validity dl .copy-btn:empty::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .copy-btn:empty::before,td.tags .copy-btn:empty::before{left:0!important}.definition-table>dl{display:grid;grid-template-columns:140px auto;grid-gap:.4em 20px;margin-bottom:1.4em}.definition-table>dl>dd>:not(dl){display:inline-block}.disclosure-menu{position:relative}.disclosure-menu [aria-expanded]~*{overflow-y:auto!important;will-change:scrollPosition}.more-popover-menu>[type=checkbox],.more-popover-menu>[type=checkbox]~:not(.animating):not(label),.popover-menu>[type=checkbox],.popover-menu>[type=checkbox]~:not(.animating):not(label),table.has-actions tr>.actions>[type=checkbox],table.has-actions tr>.actions>[type=checkbox]~:not(.animating):not(label),table.with-details tr>.actions>[type=checkbox],table.with-details tr>.actions>[type=checkbox]~:not(.animating):not(label){display:none}.more-popover-menu>[type=checkbox]:checked~:not(label),.popover-menu>[type=checkbox]:checked~:not(label),table.has-actions tr>.actions>[type=checkbox]:checked~:not(label),table.with-details tr>.actions>[type=checkbox]:checked~:not(label){display:block}table.dom-recycling{position:relative}table.dom-recycling tr>*{overflow:hidden}.list-collection-scroll-virtual>ul,table.dom-recycling tbody{overflow-x:hidden!important}table.dom-recycling dd{flex-wrap:nowrap}table.dom-recycling dd>*{margin-bottom:0}.empty-state,.empty-state>div{display:flex;flex-direction:column}.empty-state header :first-child{padding:0;margin:0}.empty-state{margin-top:0!important;padding-bottom:2.8em;color:rgb(var(--tone-gray-500));background-color:rgb(var(--tone-gray-010))}.empty-state>*{width:370px;margin:0 auto}.empty-state button{margin:0 auto;display:inline}.empty-state header :first-child{margin-bottom:-3px;border-bottom:none}.empty-state header{margin-top:1.8em;margin-bottom:.5em}.empty-state>ul{display:flex;justify-content:space-between;margin-top:1em}.empty-state>ul>li>*,.empty-state>ul>li>label>button{display:inline-flex;align-items:center}.empty-state>div:only-child{padding:50px 0 10px;text-align:center}.empty-state header::before{font-size:2.6em;position:relative;top:-3px;float:left;margin-right:10px}.empty-state>ul>li>::before,.empty-state>ul>li>label>button::before{margin-top:-1px;margin-right:.5em;font-size:.9em}.empty-state li[class*=-link]>::after{margin-left:5px}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup]{border:var(--decor-border-100);border-color:rgb(var(--tone-gray-300));border-radius:var(--decor-radius-100)}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]:checked+*,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]:focus+*,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]:hover+*{box-shadow:var(--decor-elevation-300);background-color:rgb(var(--tone-gray-000))}@media (min-width:996px){html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup]{display:flex}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label{flex-grow:1}}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] input[type=radio]{display:none}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] .type-password,.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select,.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text,.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label textarea,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] [role=radiogroup] label>span,.modal-dialog [role=document] form button+em,.oidc-select label,.oidc-select label textarea,.oidc-select label>em,.oidc-select label>span,.type-toggle,.type-toggle textarea,.type-toggle>em,.type-toggle>span,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label span,main .type-password,main .type-password textarea,main .type-password>em,main .type-password>span,main .type-select,main .type-select textarea,main .type-select>em,main .type-select>span,main .type-text,main .type-text textarea,main .type-text>em,main .type-text>span,main form button+em,span.label{display:block}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup],html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label,html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label span{height:100%}html[data-route^="dc.acls.index"] .filter-bar [role=radiogroup] label span{padding:5px 14px}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.type-toggle [type=password],.type-toggle [type=text],.type-toggle textarea,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-text [type=password],main .type-text [type=text],main .type-text textarea{-moz-appearance:none;-webkit-appearance:none;box-shadow:inset var(--decor-elevation-100);border-radius:var(--decor-radius-100);border:var(--decor-border-100);outline:0}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:disabled,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:disabled,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:read-only,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:disabled,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:read-only,.modal-dialog [role=document] .type-password [type=password]:disabled,.modal-dialog [role=document] .type-password [type=password]:read-only,.modal-dialog [role=document] .type-password [type=text]:disabled,.modal-dialog [role=document] .type-password [type=text]:read-only,.modal-dialog [role=document] .type-password textarea:disabled,.modal-dialog [role=document] .type-password textarea:read-only,.modal-dialog [role=document] .type-select [type=password]:disabled,.modal-dialog [role=document] .type-select [type=password]:read-only,.modal-dialog [role=document] .type-select [type=text]:disabled,.modal-dialog [role=document] .type-select [type=text]:read-only,.modal-dialog [role=document] .type-select textarea:disabled,.modal-dialog [role=document] .type-select textarea:read-only,.modal-dialog [role=document] .type-text [type=password]:disabled,.modal-dialog [role=document] .type-text [type=password]:read-only,.modal-dialog [role=document] .type-text [type=text]:disabled,.modal-dialog [role=document] .type-text [type=text]:read-only,.modal-dialog [role=document] .type-text textarea:disabled,.modal-dialog [role=document] .type-text textarea:read-only,.modal-dialog [role=document] [role=radiogroup] label [type=password]:disabled,.modal-dialog [role=document] [role=radiogroup] label [type=password]:read-only,.modal-dialog [role=document] [role=radiogroup] label [type=text]:disabled,.modal-dialog [role=document] [role=radiogroup] label [type=text]:read-only,.modal-dialog [role=document] [role=radiogroup] label textarea:disabled,.modal-dialog [role=document] [role=radiogroup] label textarea:read-only,.oidc-select label [type=password]:disabled,.oidc-select label [type=password]:read-only,.oidc-select label [type=text]:disabled,.oidc-select label [type=text]:read-only,.oidc-select label textarea:disabled,.oidc-select label textarea:read-only,.type-toggle [type=password]:disabled,.type-toggle [type=password]:read-only,.type-toggle [type=text]:disabled,.type-toggle [type=text]:read-only,.type-toggle textarea:disabled,.type-toggle textarea:read-only,main .type-password [type=password]:disabled,main .type-password [type=password]:read-only,main .type-password [type=text]:disabled,main .type-password [type=text]:read-only,main .type-password textarea:disabled,main .type-password textarea:read-only,main .type-select [type=password]:disabled,main .type-select [type=password]:read-only,main .type-select [type=text]:disabled,main .type-select [type=text]:read-only,main .type-select textarea:disabled,main .type-select textarea:read-only,main .type-text [type=password]:disabled,main .type-text [type=password]:read-only,main .type-text [type=text]:disabled,main .type-text [type=text]:read-only,main .type-text textarea:disabled,main .type-text textarea:read-only,textarea:disabled+.CodeMirror{cursor:not-allowed}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]::placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]::placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea::placeholder,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.modal-dialog [role=document] .type-password [type=password]::placeholder,.modal-dialog [role=document] .type-password [type=text]::placeholder,.modal-dialog [role=document] .type-password textarea::placeholder,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select [type=password]::placeholder,.modal-dialog [role=document] .type-select [type=text]::placeholder,.modal-dialog [role=document] .type-select textarea::placeholder,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text [type=password]::placeholder,.modal-dialog [role=document] .type-text [type=text]::placeholder,.modal-dialog [role=document] .type-text textarea::placeholder,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label [type=password]::placeholder,.modal-dialog [role=document] [role=radiogroup] label [type=text]::placeholder,.modal-dialog [role=document] [role=radiogroup] label textarea::placeholder,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] form fieldset>p,.oidc-select label [type=password]::placeholder,.oidc-select label [type=text]::placeholder,.oidc-select label textarea::placeholder,.oidc-select label>em,.type-toggle [type=password]::placeholder,.type-toggle [type=text]::placeholder,.type-toggle textarea::placeholder,.type-toggle>em,main .type-password [type=password]::placeholder,main .type-password [type=text]::placeholder,main .type-password textarea::placeholder,main .type-password>em,main .type-select [type=password]::placeholder,main .type-select [type=text]::placeholder,main .type-select textarea::placeholder,main .type-select>em,main .type-text [type=password]::placeholder,main .type-text [type=text]::placeholder,main .type-text textarea::placeholder,main .type-text>em,main form button+em,main form fieldset>p{color:rgb(var(--tone-gray-400))}.has-error>input,.has-error>textarea{border-color:var(--decor-error-500,rgb(var(--tone-red-500)))!important}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label [type=password],.oidc-select label [type=text],.oidc-select label textarea,.type-toggle [type=password],.type-toggle [type=text],.type-toggle textarea,main .type-password [type=password],main .type-password [type=text],main .type-password textarea,main .type-select [type=password],main .type-select [type=text],main .type-select textarea,main .type-text [type=password],main .type-text [type=text],main .type-text textarea{color:rgb(var(--tone-gray-500));border-color:rgb(var(--tone-gray-300))}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:hover,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:hover,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:hover,.modal-dialog [role=document] .type-password [type=password]:hover,.modal-dialog [role=document] .type-password [type=text]:hover,.modal-dialog [role=document] .type-password textarea:hover,.modal-dialog [role=document] .type-select [type=password]:hover,.modal-dialog [role=document] .type-select [type=text]:hover,.modal-dialog [role=document] .type-select textarea:hover,.modal-dialog [role=document] .type-text [type=password]:hover,.modal-dialog [role=document] .type-text [type=text]:hover,.modal-dialog [role=document] .type-text textarea:hover,.modal-dialog [role=document] [role=radiogroup] label [type=password]:hover,.modal-dialog [role=document] [role=radiogroup] label [type=text]:hover,.modal-dialog [role=document] [role=radiogroup] label textarea:hover,.oidc-select label [type=password]:hover,.oidc-select label [type=text]:hover,.oidc-select label textarea:hover,.type-toggle [type=password]:hover,.type-toggle [type=text]:hover,.type-toggle textarea:hover,main .type-password [type=password]:hover,main .type-password [type=text]:hover,main .type-password textarea:hover,main .type-select [type=password]:hover,main .type-select [type=text]:hover,main .type-select textarea:hover,main .type-text [type=password]:hover,main .type-text [type=text]:hover,main .type-text textarea:hover{border-color:rgb(var(--tone-gray-500))}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password]:focus,.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text]:focus,.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea:focus,.modal-dialog [role=document] .type-password [type=password]:focus,.modal-dialog [role=document] .type-password [type=text]:focus,.modal-dialog [role=document] .type-password textarea:focus,.modal-dialog [role=document] .type-select [type=password]:focus,.modal-dialog [role=document] .type-select [type=text]:focus,.modal-dialog [role=document] .type-select textarea:focus,.modal-dialog [role=document] .type-text [type=password]:focus,.modal-dialog [role=document] .type-text [type=text]:focus,.modal-dialog [role=document] .type-text textarea:focus,.modal-dialog [role=document] [role=radiogroup] label [type=password]:focus,.modal-dialog [role=document] [role=radiogroup] label [type=text]:focus,.modal-dialog [role=document] [role=radiogroup] label textarea:focus,.oidc-select label [type=password]:focus,.oidc-select label [type=text]:focus,.oidc-select label textarea:focus,.type-toggle [type=password]:focus,.type-toggle [type=text]:focus,.type-toggle textarea:focus,main .type-password [type=password]:focus,main .type-password [type=text]:focus,main .type-password textarea:focus,main .type-select [type=password]:focus,main .type-select [type=text]:focus,main .type-select textarea:focus,main .type-text [type=password]:focus,main .type-text [type=text]:focus,main .type-text textarea:focus{border-color:var(--typo-action-500,rgb(var(--tone-blue-500)))}.app-view>div form:not(.filter-bar) [role=radiogroup] label a,.modal-dialog [role=document] .type-password a,.modal-dialog [role=document] .type-select a,.modal-dialog [role=document] .type-text a,.modal-dialog [role=document] [role=radiogroup] label a,.oidc-select label a,.type-toggle a,main .type-password a,main .type-select a,main .type-text a{display:inline}.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=password],.app-view>div form:not(.filter-bar) [role=radiogroup] label [type=text],.modal-dialog [role=document] .type-password [type=password],.modal-dialog [role=document] .type-password [type=text],.modal-dialog [role=document] .type-select [type=password],.modal-dialog [role=document] .type-select [type=text],.modal-dialog [role=document] .type-text [type=password],.modal-dialog [role=document] .type-text [type=text],.modal-dialog [role=document] [role=radiogroup] label [type=password],.modal-dialog [role=document] [role=radiogroup] label [type=text],.oidc-select label [type=password],.oidc-select label [type=text],.type-toggle [type=password],.type-toggle [type=text],main .type-password [type=password],main .type-password [type=text],main .type-select [type=password],main .type-select [type=text],main .type-text [type=password],main .type-text [type=text]{display:inline-flex;justify-content:flex-start;max-width:100%;width:100%;height:0;padding:17px 13px}.app-view>div form:not(.filter-bar) [role=radiogroup] label textarea,.modal-dialog [role=document] .type-password textarea,.modal-dialog [role=document] .type-select textarea,.modal-dialog [role=document] .type-text textarea,.modal-dialog [role=document] [role=radiogroup] label textarea,.oidc-select label textarea,.type-toggle textarea,main .type-password textarea,main .type-select textarea,main .type-text textarea{resize:vertical;max-width:100%;min-width:100%;min-height:70px;padding:6px 13px}.app-view>div form:not(.filter-bar) [role=radiogroup],.app-view>div form:not(.filter-bar) [role=radiogroup] label,.checkbox-group,.modal-dialog [role=document] .type-password,.modal-dialog [role=document] .type-select,.modal-dialog [role=document] .type-text,.modal-dialog [role=document] [role=radiogroup],.modal-dialog [role=document] [role=radiogroup] label,.modal-dialog [role=document] form table,.oidc-select label,.type-toggle,main .type-password,main .type-select,main .type-text,main form table{margin-bottom:1.4em}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.oidc-select label>span,.type-toggle>span,main .type-password>span,main .type-select>span,main .type-text>span,span.label{color:var(--typo-contrast-999,inherit);margin-bottom:.3em}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span+em,.modal-dialog [role=document] .type-password>span+em,.modal-dialog [role=document] .type-select>span+em,.modal-dialog [role=document] .type-text>span+em,.modal-dialog [role=document] [role=radiogroup] label>span+em,.oidc-select label>span+em,.type-toggle>span+em,main .type-password>span+em,main .type-select>span+em,main .type-text>span+em,span.label+em{margin-top:-.5em;margin-bottom:.5em}label.type-dialog{cursor:pointer;float:right}.type-toggle+.checkbox-group{margin-top:-1em}.consul-exposed-path-list>ul>li,.consul-intention-permission-header-list>ul>li,.consul-intention-permission-list>ul>li,.consul-lock-session-list ul>li:not(:first-child),.consul-upstream-instance-list li,.list-collection>ul>li:not(:first-child){list-style-type:none;border:var(--decor-border-100);border-top-color:var(--transparent);border-bottom-color:rgb(var(--tone-gray-200));border-right-color:var(--transparent);border-left-color:var(--transparent);--horizontal-padding:12px;--vertical-padding:10px;padding:var(--vertical-padding) 0;padding-left:var(--horizontal-padding)}.consul-auth-method-list>ul>li:active:not(:first-child),.consul-auth-method-list>ul>li:focus:not(:first-child),.consul-auth-method-list>ul>li:hover:not(:first-child),.consul-exposed-path-list>ul>li.linkable:active,.consul-exposed-path-list>ul>li.linkable:focus,.consul-exposed-path-list>ul>li.linkable:hover,.consul-intention-permission-list:not(.readonly)>ul>li:active,.consul-intention-permission-list:not(.readonly)>ul>li:focus,.consul-intention-permission-list:not(.readonly)>ul>li:hover,.consul-lock-session-list ul>li.linkable:active:not(:first-child),.consul-lock-session-list ul>li.linkable:focus:not(:first-child),.consul-lock-session-list ul>li.linkable:hover:not(:first-child),.consul-node-list>ul>li:active:not(:first-child),.consul-node-list>ul>li:focus:not(:first-child),.consul-node-list>ul>li:hover:not(:first-child),.consul-policy-list>ul>li:active:not(:first-child),.consul-policy-list>ul>li:focus:not(:first-child),.consul-policy-list>ul>li:hover:not(:first-child),.consul-role-list>ul>li:active:not(:first-child),.consul-role-list>ul>li:focus:not(:first-child),.consul-role-list>ul>li:hover:not(:first-child),.consul-service-instance-list>ul>li:active:not(:first-child),.consul-service-instance-list>ul>li:focus:not(:first-child),.consul-service-instance-list>ul>li:hover:not(:first-child),.consul-token-list>ul>li:active:not(:first-child),.consul-token-list>ul>li:focus:not(:first-child),.consul-token-list>ul>li:hover:not(:first-child),.consul-upstream-instance-list li.linkable:active,.consul-upstream-instance-list li.linkable:focus,.consul-upstream-instance-list li.linkable:hover,.list-collection>ul>li.linkable:active:not(:first-child),.list-collection>ul>li.linkable:focus:not(:first-child),.list-collection>ul>li.linkable:hover:not(:first-child){border-color:rgb(var(--tone-gray-200));box-shadow:0 2px 4px rgb(var(--black) /10%);border-top-color:var(--transparent);cursor:pointer}.radio-card,.tippy-box{box-shadow:var(--decor-elevation-400)}.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.header{color:rgb(var(--tone-gray-999))}.consul-exposed-path-list>ul>li>.header *,.consul-lock-session-list ul>li:not(:first-child)>.header *,.consul-upstream-instance-list li>.header *,.list-collection>ul>li:not(:first-child)>.header *{color:inherit}.consul-exposed-path-list>ul>li>.detail,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-upstream-instance-list li>.detail,.list-collection>ul>li:not(:first-child)>.detail,.radio-card{color:rgb(var(--tone-gray-500))}.consul-exposed-path-list>ul>li>.detail a,.consul-lock-session-list ul>li:not(:first-child)>.detail a,.consul-upstream-instance-list li>.detail a,.list-collection>ul>li:not(:first-child)>.detail a{color:inherit}.consul-exposed-path-list>ul>li>.detail a:hover,.consul-lock-session-list ul>li:not(:first-child)>.detail a:hover,.consul-upstream-instance-list li>.detail a:hover,.list-collection>ul>li:not(:first-child)>.detail a:hover{color:rgb(var(--color-action));text-decoration:underline}.consul-exposed-path-list>ul>li>.detail,.consul-exposed-path-list>ul>li>.header>dl:first-child,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-lock-session-list ul>li:not(:first-child)>.header>dl:first-child,.consul-upstream-instance-list li>.detail,.consul-upstream-instance-list li>.header>dl:first-child,.list-collection>ul>li:not(:first-child)>.detail,.list-collection>ul>li:not(:first-child)>.header>dl:first-child{margin-right:6px}.consul-exposed-path-list>ul>li>.header dt,.consul-lock-session-list ul>li:not(:first-child)>.header dt,.consul-upstream-instance-list li>.header dt,.list-collection>ul>li:not(:first-child)>.header dt{display:none}.consul-exposed-path-list>ul>li>.header dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header dd::before,.consul-upstream-instance-list li>.header dd::before,.list-collection>ul>li:not(:first-child)>.header dd::before{font-size:.9em}.consul-exposed-path-list>ul>li>.detail,.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.detail,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.detail,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.detail,.list-collection>ul>li:not(:first-child)>.header{display:flex;flex-wrap:nowrap;overflow-x:hidden}.consul-exposed-path-list>ul>li>.detail *,.consul-exposed-path-list>ul>li>.header *,.consul-lock-session-list ul>li:not(:first-child)>.detail *,.consul-lock-session-list ul>li:not(:first-child)>.header *,.consul-upstream-instance-list li>.detail *,.consul-upstream-instance-list li>.header *,.list-collection>ul>li:not(:first-child)>.detail *,.list-collection>ul>li:not(:first-child)>.header *{white-space:nowrap;flex-wrap:nowrap}.consul-exposed-path-list>ul>li>.detail>span,.consul-lock-session-list ul>li:not(:first-child)>.detail>span,.consul-upstream-instance-list li>.detail>span,.list-collection>ul>li:not(:first-child)>.detail>span{margin-right:18px}.consul-intention-permission-header-list>ul>li,.consul-intention-permission-list>ul>li{padding-top:0!important;padding-bottom:0!important}.consul-intention-permission-header-list>ul>li .detail,.consul-intention-permission-list>ul>li .detail{grid-row-start:header!important;grid-row-end:detail!important;align-self:center!important;padding:5px 0}.consul-intention-permission-header-list>ul>li .popover-menu>[type=checkbox]+label,.consul-intention-permission-list>ul>li .popover-menu>[type=checkbox]+label{padding:0}.consul-intention-permission-header-list>ul>li .popover-menu>[type=checkbox]+label+div:not(.above),.consul-intention-permission-list>ul>li .popover-menu>[type=checkbox]+label+div:not(.above){top:30px}.has-error>strong{font-style:normal;font-weight:400;color:inherit;color:rgb(var(--color-failure));position:relative;padding-left:20px}.has-error>strong::before{font-size:14px;color:rgb(var(--tone-red-500));position:absolute;top:50%;left:0;margin-top:-8px}.more-popover-menu .popover-menu>[type=checkbox]+label,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label,table.with-details tr>.actions .popover-menu>[type=checkbox]+label{padding:7px}.more-popover-menu .popover-menu>[type=checkbox]+label>*,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>*,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>*{background-color:var(--transparent);border-radius:var(--decor-radius-100);width:30px;height:30px;font-size:0}.more-popover-menu .popover-menu>[type=checkbox]+label>::after,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>::after,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>::after{--icon-name:icon-more-horizontal;--icon-color:rgb(var(--tone-gray-900));--icon-size:icon-300;content:"";position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.more-popover-menu .popover-menu>[type=checkbox]+label>:active,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>:active,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>:active{background-color:rgb(var(--tone-gray-100))}.more-popover-menu .popover-menu>[type=checkbox]+label>:focus,.more-popover-menu .popover-menu>[type=checkbox]+label>:hover,.radio-card>:first-child,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>:focus,table.has-actions tr>.actions .popover-menu>[type=checkbox]+label>:hover,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>:focus,table.with-details tr>.actions .popover-menu>[type=checkbox]+label>:hover{background-color:rgb(var(--tone-gray-050))}.oidc-select [class$=-oidc-provider]::before{width:22px;height:22px;flex:0 0 auto;margin-right:10px}.oidc-select .ember-power-select-trigger,.oidc-select li{margin-bottom:1em}.informed-action header,.radio-card header{margin-bottom:.5em}.oidc-select .ember-power-select-trigger{width:100%}.oidc-select button.reset{float:right}.radio-card{border:var(--decor-border-100);border-radius:var(--decor-radius-100);border-color:rgb(var(--tone-gray-200));cursor:pointer;float:none!important;margin-right:0!important;display:flex!important}.checked.radio-card{border-color:rgb(var(--tone-blue-500))}.checked.radio-card>:first-child{background-color:rgb(var(--tone-blue-050))}.radio-card header{color:rgb(var(--tone-gray-999))}.consul-intention-fieldsets .radio-card>:last-child{padding-left:47px;position:relative}.consul-intention-fieldsets .radio-card>:last-child::before{position:absolute;left:14px;font-size:1rem}.radio-card>:first-child{padding:10px;display:grid;align-items:center;justify-items:center}.radio-card>:last-child{padding:18px}.consul-server-card,.disclosure-menu [aria-expanded]~*,.menu-panel,.more-popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div,section[data-route="dc.show.license"] aside,section[data-route="dc.show.serverstatus"] .server-failure-tolerance,table.has-actions tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div{--tone-border:var(--tone-gray-300);border:var(--decor-border-100);border-radius:var(--decor-radius-200);box-shadow:var(--decor-elevation-600);color:rgb(var(--tone-gray-900));background-color:rgb(var(--tone-gray-000));--padding-x:14px;--padding-y:14px;position:relative}.consul-auth-method-nspace-list tbody tr:hover,.consul-auth-method-view section table tbody tr:hover,table.consul-metadata-list tbody tr:hover{box-shadow:none}.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{border-top:var(--decor-border-100);margin:0}.consul-server-card,.disclosure-menu [aria-expanded]~*,.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel,.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div,.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div [role=separator],section[data-route="dc.show.license"] aside,section[data-route="dc.show.serverstatus"] .server-failure-tolerance,table.has-actions tr>.actions>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{border-color:rgb(var(--tone-border))}.paged-collection-scroll,[style*="--paged-row-height"]{overflow-y:auto!important;will-change:scrollPosition}[style*="--paged-start"]::before{content:"";display:block;height:var(--paged-start)}.consul-auth-method-type,.consul-external-source,.consul-health-check-list .health-check-output dd em,.consul-intention-list td strong,.consul-intention-permission-list strong,.consul-intention-search-bar li button span,.consul-kind,.consul-server-card .health-status+dd,.consul-source,.consul-transparent-proxy,.discovery-chain .route-card>header ul li,.hashicorp-consul nav .dcs li.is-local span,.hashicorp-consul nav .dcs li.is-primary span,.leader,.search-bar-status li:not(.remove-all),.topology-metrics-source-type,html[data-route^="dc.acls.index"] main td strong,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,span.policy-node-identity,span.policy-service-identity{border-radius:var(--decor-radius-100);display:inline-flex;position:relative;align-items:center;white-space:nowrap}.consul-auth-method-type::before,.consul-external-source::before,.consul-health-check-list .health-check-output dd em::before,.consul-intention-list td strong::before,.consul-intention-permission-list strong::before,.consul-intention-search-bar li button span::before,.consul-kind::before,.consul-server-card .health-status+dd::before,.consul-source::before,.consul-transparent-proxy::before,.discovery-chain .route-card>header ul li::before,.hashicorp-consul nav .dcs li.is-local span::before,.hashicorp-consul nav .dcs li.is-primary span::before,.leader::before,.search-bar-status li:not(.remove-all)::before,.topology-metrics-source-type::before,html[data-route^="dc.acls.index"] main td strong::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em::before,span.policy-node-identity::before,span.policy-service-identity::before{margin-right:4px}.consul-auth-method-type,.consul-external-source,.consul-kind,.consul-server-card .health-status+dd,.consul-source,.consul-transparent-proxy,.leader,.search-bar-status li:not(.remove-all),.topology-metrics-source-type,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,span.policy-node-identity,span.policy-service-identity{padding:0 8px;--icon-size:icon-200}.consul-intention-permission-list strong,.discovery-chain .route-card>header ul li,html[data-route^="dc.acls.index"] main td strong,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl{padding:1px 5px}.consul-intention-list td strong,.consul-intention-search-bar li button span{padding:4px 8px}span.policy-node-identity::before,span.policy-service-identity::before{vertical-align:unset}span.policy-node-identity::before{content:"Node Identity: "}span.policy-service-identity::before{content:"Service Identity: "}.aws-iam.consul-auth-method-type::before,.aws-iam.consul-external-source::before,.aws-iam.consul-kind::before,.aws-iam.consul-source::before,.aws-iam.consul-transparent-proxy::before,.aws-iam.leader::before,.aws-iam.topology-metrics-source-type::before,.consul-health-check-list .health-check-output dd em.aws-iam::before,.consul-intention-list td strong.aws-iam::before,.consul-intention-permission-list strong.aws-iam::before,.consul-intention-search-bar li button span.aws-iam::before,.consul-server-card .health-status+dd.aws-iam::before,.discovery-chain .route-card>header ul li.aws-iam::before,.hashicorp-consul nav .dcs li.is-local span.aws-iam::before,.hashicorp-consul nav .dcs li.is-primary span.aws-iam::before,.search-bar-status li.aws-iam:not(.remove-all)::before,html[data-route^="dc.acls.index"] main td strong.aws-iam::before,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.aws-iam::before,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em.aws-iam::before,span.aws-iam.policy-node-identity::before,span.aws-iam.policy-service-identity::before{--icon-name:icon-aws-color;content:""}.more-popover-menu>[type=checkbox]+label>*,.popover-menu>[type=checkbox]+label>*,table.has-actions tr>.actions>[type=checkbox]+label>*,table.with-details tr>.actions>[type=checkbox]+label>*{cursor:pointer}.more-popover-menu>[type=checkbox]+label>::after,.popover-menu>[type=checkbox]+label>::after,table.has-actions tr>.actions>[type=checkbox]+label>::after,table.with-details tr>.actions>[type=checkbox]+label>::after{width:16px;height:16px;position:relative}.more-popover-menu,.popover-menu,table.has-actions tr>.actions,table.with-details tr>.actions{position:relative}.more-popover-menu>[type=checkbox]+label,.popover-menu>[type=checkbox]+label,table.has-actions tr>.actions>[type=checkbox]+label,table.with-details tr>.actions>[type=checkbox]+label{display:block}.more-popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div{min-width:192px}.more-popover-menu>[type=checkbox]+label+div:not(.above),.popover-menu>[type=checkbox]+label+div:not(.above),table.has-actions tr>.actions>[type=checkbox]+label+div:not(.above),table.with-details tr>.actions>[type=checkbox]+label+div:not(.above){top:38px}.more-popover-menu>[type=checkbox]+label+div:not(.left),.popover-menu>[type=checkbox]+label+div:not(.left),table.has-actions tr>.actions>[type=checkbox]+label+div:not(.left),table.with-details tr>.actions>[type=checkbox]+label+div:not(.left){right:5px}.popover-menu .menu-panel{position:absolute!important}.type-reveal,.type-toggle label{position:relative}.popover-select label{height:100%}.popover-select label>*{padding:0 8px!important;height:100%!important;justify-content:space-between!important;min-width:auto!important}.popover-select label>::after{margin-left:6px}.popover-select button::before{margin-right:10px}.popover-select .value-passing button::before{color:rgb(var(--tone-green-500))}.popover-select .value-warning button::before{color:rgb(var(--tone-orange-500))}.popover-select .value-critical button::before{color:rgb(var(--tone-red-500))}.popover-select .value-empty button::before{color:rgb(var(--tone-gray-400))}.type-source.popover-select li:not(.partition) button{text-transform:capitalize}.type-source.popover-select li.aws button{text-transform:uppercase}.type-source.popover-select li.partition button::before{color:rgb(var(--tone-gray-500))}.progress.indeterminate{width:100%;display:flex;align-items:center;justify-content:center;--icon-size:icon-700;--icon-name:var(--icon-loading);--icon-color:rgb(var(--tone-gray-500))}.progress.indeterminate::before{content:""}.app-view>div form:not(.filter-bar) [role=radiogroup],.modal-dialog [role=document] [role=radiogroup]{overflow:hidden;padding-left:1px}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label{float:left}.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] [role=radiogroup] label>span{float:right;margin-left:1em}.app-view>div form:not(.filter-bar) [role=radiogroup] label:not(:last-child),.modal-dialog [role=document] [role=radiogroup] label:not(:last-child){margin-right:25px}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.modal-dialog [role=document] [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label>span{margin-bottom:0!important}.type-reveal{cursor:pointer}.type-reveal input{display:none}.type-reveal input~em{visibility:hidden;font-style:normal}.type-reveal input:checked~em{visibility:visible;cursor:auto}.type-reveal input~em::before{display:inline;visibility:visible;content:"■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■"}.type-reveal input:checked~em::before,.type-toggle input{display:none}.type-reveal span,[role=banner] nav:not(.in-viewport):first-of-type{visibility:hidden}.type-reveal span{position:absolute;--icon-color:rgb(var(--tone-gray-500))}.type-reveal em{margin-left:22px}.type-reveal span::before{visibility:visible}.type-toggle label span{cursor:pointer}.type-toggle label span::after{border-radius:var(--decor-radius-full)}.type-toggle label span::before{border-radius:7px;left:0;width:24px;height:12px;margin-top:-5px}.type-negative.type-toggle{border:0}.app-view>header .title,.modal-dialog [role=document] table td,.modal-dialog [role=document] table th,main table td,main table th{border-bottom:var(--decor-border-100)}.type-toggle label span::after{background-color:rgb(var(--tone-gray-000));margin-top:-3px;width:8px;height:8px}.type-negative.type-toggle label input+span::before,.type-toggle label input:checked+span::before{background-color:rgb(var(--tone-blue-500))}.type-negative.type-toggle label input:checked+span::before,.type-toggle label span::before{background-color:rgb(var(--tone-gray-300))}.type-toggle label span{color:rgb(var(--tone-gray-900));display:inline-block;padding-left:34px}.type-toggle label span::after,.type-toggle label span::before{position:absolute;display:block;content:"";top:50%}.type-negative.type-toggle label input+span::after,.type-toggle label input:checked+span::after{left:14px}.type-negative.type-toggle label input:checked+span::after,.type-toggle label span::after{left:2px}.modal-dialog [role=document] table th,main table th{border-color:rgb(var(--tone-gray-300));padding:.6em 0}.modal-dialog [role=document] table td,main table td{border-color:rgb(var(--tone-gray-200));color:rgb(var(--tone-gray-500));height:50px;vertical-align:middle}.modal-dialog [role=document] table td strong,.modal-dialog [role=document] table th,main table td strong,main table th{color:rgb(var(--tone-gray-600))}.consul-intention-list td.destination,.consul-intention-list td.source,.modal-dialog [role=document] table a,.modal-dialog [role=document] table td:first-child,main table a,main table td:first-child{color:rgb(var(--tone-gray-900))}.modal-dialog [role=document] table,main table{width:100%;border-collapse:collapse}table.dom-recycling tr{display:flex}table.dom-recycling tr>*{flex:1 1 auto;display:inline-flex;align-items:center}.modal-dialog [role=document] table th.actions input,main table th.actions input{display:none}.modal-dialog [role=document] table th.actions,main table th.actions{text-align:right}.modal-dialog [role=document] table td a,main table td a{display:block}.modal-dialog [role=document] table td.no-actions~.actions,main table td.no-actions~.actions{display:none}.modal-dialog [role=document] table td:not(.actions)>:only-child,main table td:not(.actions)>:only-child{overflow:hidden;text-overflow:ellipsis}.modal-dialog [role=document] table td:not(.actions)>*,main table td:not(.actions)>*{white-space:nowrap}.modal-dialog [role=document] table caption,main table caption{margin-bottom:.8em}.modal-dialog [role=document] table td a,.modal-dialog [role=document] table td:not(.actions),.modal-dialog [role=document] table th:not(.actions),main table td a,main table td:not(.actions),main table th:not(.actions){padding-right:.9em}.modal-dialog [role=document] table tbody td em,main table tbody td em{display:block;font-style:normal;font-weight:400;color:rgb(var(--tone-gray-500))}table.has-actions tr>.actions,table.with-details tr>.actions{width:60px!important;overflow:visible}table.has-actions tr>.actions>[type=checkbox]+label,table.with-details tr>.actions>[type=checkbox]+label{position:absolute;right:5px}table.consul-metadata-list tbody tr{cursor:default}.modal-dialog [role=document] table th span::after,main table th span::after{color:rgb(var(--tone-gray-500));margin-left:4px}.modal-dialog [role=document] table tbody tr,main table tbody tr{cursor:pointer}.modal-dialog [role=document] table td:first-child,main table td:first-child{padding:0}.modal-dialog [role=document] table tbody tr:hover,main table tbody tr:hover{box-shadow:var(--decor-elevation-300)}.modal-dialog [role=document] table td.folder::before,main table td.folder::before{background-color:rgb(var(--tone-gray-300));margin-top:1px;margin-right:5px}@media (max-width:420px){.consul-intention-list tr>:nth-last-child(2),.modal-dialog [role=document] table tr>.actions,main table tr>.actions{display:none}}.voting-status-leader.consul-server-card .name{width:var(--tile-size,3rem);height:var(--tile-size,3rem)}.voting-status-leader.consul-server-card .name::before{display:block;content:"";width:100%;height:100%;border-radius:var(--decor-radius-250);border:var(--decor-border-100);background-image:linear-gradient(135deg,rgb(var(--strawberry-010)) 0,rgb(var(--strawberry-200)) 100%);border-color:rgb(var(--tone-gray-999) /10%)}.voting-status-leader.consul-server-card .name::after{content:"";position:absolute;top:calc(var(--tile-size,3rem)/ 4);left:calc(var(--tile-size,3rem)/ 4);--icon-name:icon-star-fill;--icon-size:icon-700;color:rgb(var(--strawberry-500))}table.with-details td:only-child>div>label,table.with-details td>label{border-radius:var(--decor-radius-100);cursor:pointer;min-width:30px;min-height:30px;display:inline-flex;align-items:center;justify-content:center}table.with-details td:only-child>div>label:focus,table.with-details td:only-child>div>label:hover,table.with-details td>label:focus,table.with-details td>label:hover{background-color:rgb(var(--tone-gray-050))}table.with-details td:only-child>div>label:active,table.with-details td>label:active{background-color:rgb(var(--tone-gray-100))}table.dom-recycling tbody{top:33px!important;width:100%}table.dom-recycling caption~tbody{top:57px!important}table tr>:nth-last-child(2):first-child,table tr>:nth-last-child(2):first-child~*{width:calc(100% / 2)}table tr>:nth-last-child(3):first-child,table tr>:nth-last-child(3):first-child~*{width:calc(100% / 3)}table tr>:nth-last-child(4):first-child,table tr>:nth-last-child(4):first-child~*{width:calc(100% / 4)}table tr>:nth-last-child(5):first-child,table tr>:nth-last-child(5):first-child~*{width:calc(100% / 5)}table.has-actions tr>:nth-last-child(2):first-child,table.has-actions tr>:nth-last-child(2):first-child~*{width:calc(100% - 60px)}table.has-actions tr>:nth-last-child(3):first-child,table.has-actions tr>:nth-last-child(3):first-child~*{width:calc(50% - 30px)}table.has-actions tr>:nth-last-child(4):first-child,table.has-actions tr>:nth-last-child(4):first-child~*{width:calc(33% - 20px)}table.has-actions tr>:nth-last-child(5):first-child,table.has-actions tr>:nth-last-child(5):first-child~*{width:calc(25% - 15px)}html[data-route^="dc.acls.policies"] [role=dialog] table tr>:not(last-child),html[data-route^="dc.acls.policies"] table tr>:not(last-child),html[data-route^="dc.acls.roles"] [role=dialog] table tr>:not(last-child),html[data-route^="dc.acls.roles"] main table.token-list tr>:not(last-child){width:120px}html[data-route^="dc.acls.policies"] table tr>:last-child,html[data-route^="dc.acls.roles"] [role=dialog] table tr>:last-child,html[data-route^="dc.acls.roles"] main table.token-list tr>:last-child{width:calc(100% - 240px)!important}table.with-details td:only-child{cursor:default;border:0}table.with-details td:only-child>div::before,table.with-details td:only-child>div>div,table.with-details td:only-child>div>label{background-color:rgb(var(--tone-gray-000))}table.with-details td:only-child>div>label::before{transform:rotate(180deg)}table.with-details td:only-child>div::before{background:rgb(var(--tone-gray-200));content:"";display:block;height:1px;position:absolute;bottom:-20px;left:10px;width:calc(100% - 20px)}table.with-details tr>.actions{position:relative}table.with-details td:only-child>div>label,table.with-details td>label{pointer-events:auto;position:absolute;top:8px}table.with-details td:only-child>div>label span,table.with-details td>label span{display:none}table.with-details td>label{right:2px}table.with-details tr:nth-child(even) td{height:auto;position:relative;display:table-cell}table.with-details tr:nth-child(even) td>*{display:none}table.with-details td:only-child>div>label{right:11px}table.with-details tr:nth-child(even) td>input:checked+*{display:block}table.with-details td:only-child{overflow:visible;width:100%}table.with-details td:only-child>div{border:1px solid;border-radius:var(--decor-radius-100);box-shadow:var(--decor-elevation-600);margin-bottom:20px;position:relative;left:-10px;right:-10px;width:calc(100% + 20px);margin-top:-51px;pointer-events:none;padding:10px}table.with-details td:only-child>div::after{content:"";display:block;clear:both}table.with-details td:only-child>div>div{pointer-events:auto;margin-top:36px}.consul-auth-method-binding-list dl,.consul-auth-method-view dl,.consul-auth-method-view section dl{display:flex;flex-wrap:wrap}.consul-auth-method-binding-list dl dd,.consul-auth-method-binding-list dl dt,.consul-auth-method-view dl dd,.consul-auth-method-view dl dt{padding:12px 0;margin:0;border-top:1px solid!important}.consul-auth-method-binding-list dl dt,.consul-auth-method-view dl dt{width:20%;font-weight:var(--typo-weight-bold)}.consul-auth-method-binding-list dl dd,.consul-auth-method-view dl dd{margin-left:auto;width:80%;display:flex}.consul-auth-method-binding-list dl dd>ul li,.consul-auth-method-view dl dd>ul li{display:flex}.consul-auth-method-binding-list dl dd>ul li:not(:last-of-type),.consul-auth-method-view dl dd>ul li:not(:last-of-type){padding-bottom:12px}.consul-auth-method-binding-list dl dd .copy-button button,.consul-auth-method-view dl dd .copy-button button{padding:0!important;margin:0 4px 0 0!important}.consul-auth-method-binding-list dl dt.check+dd,.consul-auth-method-view dl dt.check+dd{padding-top:16px}.consul-auth-method-binding-list dl>dd:last-of-type,.consul-auth-method-binding-list dl>dt:last-of-type,.consul-auth-method-view dl>dd:last-of-type,.consul-auth-method-view dl>dt:last-of-type,.consul-auth-method-view section dl>dd:last-of-type,.consul-auth-method-view section dl>dt:last-of-type{border-bottom:1px solid!important;border-color:rgb(var(--tone-gray-300))!important}.consul-auth-method-binding-list dl dd,.consul-auth-method-binding-list dl dt,.consul-auth-method-view dl dd,.consul-auth-method-view dl dt{border-color:rgb(var(--tone-gray-300))!important;color:rgb(var(--tone-gray-999))!important}.consul-auth-method-binding-list dl dt.type+dd span::before,.consul-auth-method-view dl dt.type+dd span::before{margin-left:4px;background-color:rgb(var(--tone-gray-500))}.tooltip-panel dt{cursor:pointer}.tooltip-panel dd>div::before{width:12px;height:12px;background-color:rgb(var(--tone-gray-000));border-top:1px solid rgb(var(--tone-gray-300));border-right:1px solid rgb(var(--tone-gray-300));transform:rotate(-45deg);position:absolute;left:16px;top:-7px}.tooltip-panel,.tooltip-panel dt{display:flex;flex-direction:column}.tooltip-panel dd>div.menu-panel{top:auto;overflow:visible}.tooltip-panel dd{display:none;position:relative;z-index:1;padding-top:10px;margin-bottom:-10px}.tooltip-panel:hover dd{display:block}.tooltip-panel dd>div{width:250px}.app-view>header .title{display:flex;align-items:center;white-space:nowrap;position:relative;z-index:5;padding-bottom:.2em}.app-view>div form:not(.filter-bar) fieldset{border-bottom:var(--decor-border-200)}.app-view>header h1>em{color:rgb(var(--tone-gray-600))}.app-view>header dd>a{color:rgb(var(--tone-gray-999))}.app-view>div div>dl>dd,[role=contentinfo]{color:rgb(var(--tone-gray-400))}.app-view>div form:not(.filter-bar) fieldset,.app-view>header .title{border-color:rgb(var(--tone-gray-200))}.app-view>header .actions{display:flex;align-items:flex-start;margin-left:auto;margin-top:9px}.app-view>header .title>:not(:last-child){margin-right:8px}.app-view>div form:not(.filter-bar) fieldset{padding-bottom:.3em;margin-bottom:2em}[for=toolbar-toggle]{background-position:0 4px;display:inline-block;width:26px;height:26px;cursor:pointer;color:rgb(var(--tone-blue-500))}#toolbar-toggle{display:none}@media (max-width:849px){.app-view>header .actions{margin-top:9px}}@media (min-width:996px){[for=toolbar-toggle]{display:none}}@media (max-width:995px){.app-view>header h1{display:inline-block}html[data-route$="dc.services.instance.show"] h1{display:block}#toolbar-toggle+*{display:none}#toolbar-toggle:checked+*{display:flex}}.brand-loader{position:absolute;top:50%;margin-top:-26px;left:50%}.app .skip-links{outline:solid 1px;background-color:rgb(var(--tone-blue-500));display:flex;flex-direction:column;position:absolute;z-index:10;left:50%;padding:20px;top:-100px;transform:translateX(-50%)}.app .skip-links a,.app .skip-links button{color:inherit}.app .skip-links a,.app .skip-links button,.app .skip-links div{display:block;width:100%;text-align:center;box-sizing:border-box}.app .skip-links:focus-within{top:0}.app .notifications{display:flex;flex-direction:column;align-items:center;position:fixed;z-index:50;top:-45px;left:0;pointer-events:none}.app .notifications .app-notification>*{min-width:400px}.app .notifications .app-notification{transition-property:opacity;width:fit-content;max-width:80%;pointer-events:auto}[role=banner] nav:last-of-type{margin-left:auto}.hashicorp-consul nav .dcs{top:18px}.hashicorp-consul nav .dcs [aria-label]::before{display:none!important}[role=banner] nav:last-of-type [aria-haspopup=menu]~*{position:absolute;right:0;min-width:192px}[role=contentinfo]{position:fixed;z-index:50;width:250px;padding-left:25px;top:calc(100vh - 42px);top:calc(max(100vh,460px) - 42px)}html.has-partitions.has-nspaces .app [role=contentinfo]{top:calc(100vh - 42px);top:calc(max(100vh,640px) - 42px)}[role=banner] nav:first-of-type{z-index:10}[role=banner] nav:first-of-type,[role=contentinfo]{transition-property:left}.app .notifications,main{margin-top:var(--chrome-height,64px);transition-property:margin-left}.app .notifications{transition-property:margin-left,width}@media (min-width:900px){.app>input[id]~main .notifications{width:calc(100% - var(--chrome-width))}.app>input[id]:checked~main .notifications{width:100%}.app>input[id]+header>div>nav:first-of-type,.app>input[id]~footer{left:0}.app>input[id]:checked+header>div>nav:first-of-type,.app>input[id]:checked~footer{left:calc(var(--chrome-width,300px) * -1)}.app>input[id]~main,.app>input[id]~main .notifications{margin-left:var(--chrome-width,300px)}.app>input[id]:checked~main,.app>input[id]:checked~main .notifications{margin-left:0}}@media (max-width:899px){.app>input[id]~main .notifications{width:100%}.app>input[id]:checked+header>div>nav:first-of-type,.app>input[id]:checked~footer{left:0}.app>input[id]+header>div>nav:first-of-type,.app>input[id]~footer{left:calc(var(--chrome-width,300px) * -1)}.app>input[id]~main,.app>input[id]~main .notifications{margin-left:0}}[role=banner]::before{background-color:rgb(var(--tone-gray-000));content:"";position:absolute;z-index:-1;left:0;width:100vw}[role=banner]{display:flex;position:fixed;z-index:50;left:0;padding:0 25px;width:calc(100% - 50px);align-items:center}[role=banner],[role=banner]::before{height:var(--chrome-height)}[role=banner]>a{display:block;line-height:0;font-size:0}.hashicorp-consul nav .dcs [aria-expanded]>a,[role=banner] nav:last-of-type [aria-expanded]>a,[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button>a,[role=banner] nav:last-of-type>ul>li>a>a,[role=banner] nav:last-of-type>ul>li>button>a,[role=banner] nav:last-of-type>ul>li>span>a{color:inherit}.hashicorp-consul nav .dcs [aria-expanded]::after,[role=banner] nav:last-of-type [aria-expanded]::after{--icon-name:icon-chevron-down;content:""}.hashicorp-consul nav .dcs [aria-expanded=true][aria-expanded]::after,[role=banner] nav:last-of-type [aria-expanded=true][aria-expanded]::after{transform:scaleY(-100%)}.app>input[id]{display:none}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.menu-panel>ul>[role=treeitem],.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],[role=banner] nav:last-of-type>ul,[role=banner]>div,[role=banner]>label,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{display:flex}[role=banner]>label::before{--icon-name:icon-menu;--icon-color:rgb(var(--tone-gray-800));content:"";cursor:pointer}.hashicorp-consul nav .dcs [aria-expanded],[role=banner] nav:last-of-type .popover-menu [type=checkbox]:checked+label>*,[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span{color:rgb(var(--tone-gray-600))}[role=banner]>label{align-items:center;height:100%;padding:0 1rem 0 5px}[role=banner]>div{justify-content:space-between;flex-grow:1}[role=banner] nav:last-of-type label+div{z-index:400;left:0;right:auto;top:28px!important}.hashicorp-consul nav .dcs [aria-expanded],[role=banner] nav:last-of-type [aria-expanded],[role=banner] nav:last-of-type>ul>li>.popover-menu>label>button,[role=banner] nav:last-of-type>ul>li>a,[role=banner] nav:last-of-type>ul>li>button,[role=banner] nav:last-of-type>ul>li>span{border-radius:var(--decor-radius-200);cursor:pointer;display:block;padding:5px 12px;white-space:nowrap}[role=banner] nav:last-of-type .popover-menu>label{padding-right:5px}[role=banner] nav:last-of-type .popover-menu>label>*{padding-right:4px!important}[role=banner] nav:last-of-type .popover-menu>label>button::after{top:2px}[role=banner] nav:last-of-type>ul>li>span{cursor:default}[role=banner] nav:first-of-type>ul>li>a>a,[role=banner] nav:first-of-type>ul>li>label>a{color:inherit;font-size:inherit}[role=banner] nav:first-of-type>ul>li>a:focus,[role=banner] nav:first-of-type>ul>li>a:hover,[role=banner] nav:first-of-type>ul>li>label:focus,[role=banner] nav:first-of-type>ul>li>label:hover{text-decoration:underline}.tab-nav li>*,[role=banner] nav:first-of-type>ul>li.is-active>a:focus:not(:active),[role=banner] nav:first-of-type>ul>li.is-active>a:hover:not(:active){text-decoration:none}[role=banner] nav:first-of-type{background-color:rgb(var(--tone-gray-050));color:rgb(var(--tone-gray-700))}[role=banner] nav:first-of-type li:not([role=separator])>span{color:rgb(var(--tone-gray-300))}[role=banner] nav:first-of-type [role=separator]{text-transform:uppercase;font-weight:var(--typo-weight-medium);color:rgb(var(--tone-gray-600))}[role=banner] nav:first-of-type>ul>li>a,[role=banner] nav:first-of-type>ul>li>label{cursor:pointer;border-right:var(--decor-border-400);border-color:var(--transparent);color:rgb(var(--tone-gray-800))}[role=banner] nav:first-of-type>ul>li.is-active>a,[role=banner] nav:first-of-type>ul>li>a:focus,[role=banner] nav:first-of-type>ul>li>a:hover,[role=banner] nav:first-of-type>ul>li>label:focus,[role=banner] nav:first-of-type>ul>li>label:hover,[role=banner] nav:first-of-type>ul>li[aria-label]{color:rgb(var(--tone-gray-999))}[role=banner] nav:first-of-type>ul>li.is-active>a{background-color:rgb(var(--tone-gray-150));border-color:rgb(var(--tone-gray-999))}[role=banner] nav:first-of-type [aria-label]::before{color:rgb(var(--tone-gray-700));content:attr(aria-label);display:block;margin-top:-.5rem;margin-bottom:.5rem}.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button{border:var(--decor-border-100);border-color:rgb(var(--tone-gray-500));border-radius:var(--decor-radius-100);font-weight:inherit;background-color:rgb(var(--tone-gray-050));color:rgb(var(--tone-gray-999))}.hashicorp-consul nav li.nspaces .disclosure-menu>button[aria-expanded=true],.hashicorp-consul nav li.partitions .disclosure-menu>button[aria-expanded=true]{border-bottom-left-radius:var(--decor-radius-000);border-bottom-right-radius:var(--decor-radius-000)}.hashicorp-consul nav li.nspaces .disclosure-menu>button::after,.hashicorp-consul nav li.partitions .disclosure-menu>button::after{width:16px;height:16px;position:relative;float:right}[role=banner] nav:first-of-type{position:absolute;left:0;top:var(--chrome-height,47px);width:var(--chrome-width,300px);height:calc(100vh - var(--chrome-height,47px) - 35px);padding-top:35px;overflow:auto}[role=banner] nav:first-of-type li.nspaces,[role=banner] nav:first-of-type li.partition,[role=banner] nav:first-of-type li.partitions{margin-bottom:25px;padding:0 26px}[role=banner] nav:first-of-type li.dcs{padding:0 18px}[role=banner] nav:first-of-type [role=menuitem]{justify-content:flex-start!important}[role=banner] nav:first-of-type [role=menuitem] span{margin-left:.5rem}[role=banner] nav:first-of-type [role=separator],[role=banner] nav:first-of-type li:not([role=separator])>span,[role=banner] nav:first-of-type>ul>li>a,[role=banner] nav:first-of-type>ul>li>label{display:block;padding:7px 25px}[role=banner] nav:first-of-type [role=separator]{margin-top:.7rem;padding-bottom:0}.hashicorp-consul nav li.nspaces .disclosure,.hashicorp-consul nav li.partitions .disclosure{position:relative}.hashicorp-consul nav li.nspaces .disclosure-menu>button,.hashicorp-consul nav li.partitions .disclosure-menu>button{width:100%;text-align:left;padding:10px}.hashicorp-consul nav li.nspaces .disclosure-menu button+*,.hashicorp-consul nav li.partitions .disclosure-menu button+*{border-top-left-radius:var(--decor-radius-000);border-top-right-radius:var(--decor-radius-000);border-top:var(--decor-border-000);position:absolute;z-index:1;width:calc(100% - 2px)}.hashicorp-consul nav .dcs{visibility:visible;position:fixed;z-index:10;left:100px}.hashicorp-consul nav li.dcs [aria-expanded]~*{min-width:250px;max-height:560px;--paged-row-height:43px}.hashicorp-consul nav li.nspaces [aria-expanded]~*,.hashicorp-consul nav li.partitions [aria-expanded]~*{max-height:360px;--paged-row-height:43px}.hashicorp-consul [role=banner] a svg{fill:rgb(var(--tone-brand-600))}.hashicorp-consul .acls-separator span{color:rgb(var(--tone-red-500));display:inline-block;position:relative;top:2px;margin-left:2px}.disclosure-menu [aria-expanded]~*>div+ul,.menu-panel>div+ul,.more-popover-menu>[type=checkbox]+label+div>div+ul,.popover-menu>[type=checkbox]+label+div>div+ul,table.has-actions tr>.actions>[type=checkbox]+label+div>div+ul,table.with-details tr>.actions>[type=checkbox]+label+div>div+ul{border-top:var(--decor-border-100);border-color:rgb(var(--tone-border,var(--tone-gray-300)))}.disclosure-menu [aria-expanded]~* [role=separator]:first-child:not(:empty),.menu-panel [role=separator]:first-child:not(:empty),.more-popover-menu>[type=checkbox]+label+div [role=separator]:first-child:not(:empty),.popover-menu>[type=checkbox]+label+div [role=separator]:first-child:not(:empty),table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator]:first-child:not(:empty),table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]:first-child:not(:empty){border:none}.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{text-transform:uppercase;font-weight:var(--typo-weight-medium);color:rgb(var(--tone-gray-600))}.disclosure-menu [aria-expanded]~*>ul>li,.menu-panel>ul>li,.more-popover-menu>[type=checkbox]+label+div>ul>li,.popover-menu>[type=checkbox]+label+div>ul>li,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li{list-style-type:none}.disclosure-menu [aria-expanded]~*>ul .informed-action,.menu-panel>ul .informed-action,.more-popover-menu>[type=checkbox]+label+div>ul .informed-action,.popover-menu>[type=checkbox]+label+div>ul .informed-action,table.has-actions tr>.actions>[type=checkbox]+label+div>ul .informed-action,table.with-details tr>.actions>[type=checkbox]+label+div>ul .informed-action{border:0!important}.disclosure-menu [aria-expanded]~*>div,.menu-panel>div,.more-popover-menu>[type=checkbox]+label+div>div,.popover-menu>[type=checkbox]+label+div>div,table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div>div{padding:.625rem var(--padding-x);white-space:normal;max-width:fit-content}@supports not (max-width:fit-content){.disclosure-menu [aria-expanded]~*>div,.menu-panel>div,.more-popover-menu>[type=checkbox]+label+div>div,.popover-menu>[type=checkbox]+label+div>div,table.has-actions tr>.actions>[type=checkbox]+label+div>div,table.with-details tr>.actions>[type=checkbox]+label+div>div{max-width:200px}}.disclosure-menu [aria-expanded]~*>div::before,.menu-panel>div::before,.more-popover-menu>[type=checkbox]+label+div>div::before,.popover-menu>[type=checkbox]+label+div>div::before,table.has-actions tr>.actions>[type=checkbox]+label+div>div::before,table.with-details tr>.actions>[type=checkbox]+label+div>div::before{position:absolute;left:15px;top:calc(10px + .1em)}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]+*,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]+*,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]+*,.menu-panel-deprecated>ul>li>div[role=menu],.menu-panel>ul>[role=treeitem]+*,.menu-panel>ul>li>[role=menuitem]+*,.menu-panel>ul>li>[role=option]+*,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]+*,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]+*,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]+*,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]+*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]+*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]+*,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]+*,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]+*,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]+*{position:absolute;top:0;left:calc(100% + 10px)}.disclosure-menu [aria-expanded]~*>ul,.menu-panel>ul,.more-popover-menu>[type=checkbox]+label+div>ul,.popover-menu>[type=checkbox]+label+div>ul,table.has-actions tr>.actions>[type=checkbox]+label+div>ul,table.with-details tr>.actions>[type=checkbox]+label+div>ul{margin:0;padding:calc(var(--padding-y) - .625rem) 0;transition:transform 150ms}.disclosure-menu [aria-expanded]~*>ul,.disclosure-menu [aria-expanded]~*>ul>li,.disclosure-menu [aria-expanded]~*>ul>li>*,.menu-panel>ul,.menu-panel>ul>li,.menu-panel>ul>li>*,.more-popover-menu>[type=checkbox]+label+div>ul,.more-popover-menu>[type=checkbox]+label+div>ul>li,.more-popover-menu>[type=checkbox]+label+div>ul>li>*,.popover-menu>[type=checkbox]+label+div>ul,.popover-menu>[type=checkbox]+label+div>ul>li,.popover-menu>[type=checkbox]+label+div>ul>li>*,table.has-actions tr>.actions>[type=checkbox]+label+div>ul,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>*,table.with-details tr>.actions>[type=checkbox]+label+div>ul,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>*{width:100%}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem],.disclosure-menu [aria-expanded]~*>ul>li,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem],.disclosure-menu [aria-expanded]~*>ul>li>[role=option],.menu-panel>ul>[role=treeitem],.menu-panel>ul>li,.menu-panel>ul>li>[role=menuitem],.menu-panel>ul>li>[role=option],.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.more-popover-menu>[type=checkbox]+label+div>ul>li,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option],.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem],.popover-menu>[type=checkbox]+label+div>ul>li,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem],.popover-menu>[type=checkbox]+label+div>ul>li>[role=option],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option],table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem],table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]{text-align:left}.hashicorp-consul nav .dcs li.is-local span,.hashicorp-consul nav .dcs li.is-primary span{color:rgb(var(--tone-gray-000));background-color:rgb(var(--tone-gray-500));padding:0 8px;margin-left:.5rem}.disclosure-menu [aria-expanded]~*>ul>[role=treeitem]::after,.disclosure-menu [aria-expanded]~*>ul>li>[role=menuitem]::after,.disclosure-menu [aria-expanded]~*>ul>li>[role=option]::after,.menu-panel>ul>[role=treeitem]::after,.menu-panel>ul>li>[role=menuitem]::after,.menu-panel>ul>li>[role=option]::after,.more-popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]::after,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,.more-popover-menu>[type=checkbox]+label+div>ul>li>[role=option]::after,.popover-menu>[type=checkbox]+label+div>ul>[role=treeitem]::after,.popover-menu>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,.popover-menu>[type=checkbox]+label+div>ul>li>[role=option]::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>[role=treeitem]::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=menuitem]::after,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li>[role=option]::after{margin-left:auto;padding-right:var(--padding-x);transform:translate(calc(var(--padding-x)/ 2),0)}.disclosure-menu [aria-expanded]~* [role=separator],.menu-panel [role=separator],.more-popover-menu>[type=checkbox]+label+div [role=separator],.popover-menu>[type=checkbox]+label+div [role=separator],table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator],table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]{padding-top:.375rem}.disclosure-menu [aria-expanded]~* [role=separator]:not(:first-child),.menu-panel [role=separator]:not(:first-child),.more-popover-menu>[type=checkbox]+label+div [role=separator]:not(:first-child),.popover-menu>[type=checkbox]+label+div [role=separator]:not(:first-child),table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator]:not(:first-child),table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]:not(:first-child){margin-top:.275rem}.disclosure-menu [aria-expanded]~* [role=separator]:not(:empty),.menu-panel [role=separator]:not(:empty),.more-popover-menu>[type=checkbox]+label+div [role=separator]:not(:empty),.popover-menu>[type=checkbox]+label+div [role=separator]:not(:empty),table.has-actions tr>.actions>[type=checkbox]+label+div [role=separator]:not(:empty),table.with-details tr>.actions>[type=checkbox]+label+div [role=separator]:not(:empty){padding-left:var(--padding-x);padding-right:var(--padding-x);padding-bottom:.125rem}.disclosure-menu [aria-expanded]~.menu-panel-confirming,.menu-panel-confirming.menu-panel,.more-popover-menu>[type=checkbox]+label+div.menu-panel-confirming,.popover-menu>[type=checkbox]+label+div.menu-panel-confirming,table.has-actions tr>.actions>[type=checkbox]+label+div.menu-panel-confirming,table.with-details tr>.actions>[type=checkbox]+label+div.menu-panel-confirming{overflow:hidden}.disclosure-menu [aria-expanded]~.menu-panel-confirming>ul,.menu-panel-confirming.menu-panel>ul,.more-popover-menu>[type=checkbox]+label+div.menu-panel-confirming>ul,.popover-menu>[type=checkbox]+label+div.menu-panel-confirming>ul,table.has-actions tr>.actions>[type=checkbox]+label+div.menu-panel-confirming>ul,table.with-details tr>.actions>[type=checkbox]+label+div.menu-panel-confirming>ul{transform:translateX(calc(-100% - 10px))}.disclosure-menu [aria-expanded]~*,.menu-panel,.more-popover-menu>[type=checkbox]+label+div,.popover-menu>[type=checkbox]+label+div,table.has-actions tr>.actions>[type=checkbox]+label+div,table.with-details tr>.actions>[type=checkbox]+label+div{overflow:hidden}.menu-panel-deprecated{position:absolute;transition:min-height 150ms,max-height 150ms;min-height:0}.menu-panel-deprecated [type=checkbox]{display:none}.menu-panel-deprecated:not(.confirmation) [type=checkbox]~*{transition:transform 150ms}.confirmation.menu-panel-deprecated [role=menu]{min-height:205px!important}.menu-panel-deprecated [type=checkbox]:checked~*{transform:translateX(calc(-100% - 10px));min-height:143px;max-height:143px}.menu-panel-deprecated [id$="-"]:first-child:checked~ul label[for$="-"] * [role=menu],.menu-panel-deprecated [id$="-"]:first-child:checked~ul>li>[role=menu]{display:block}.menu-panel-deprecated>ul>li>:not(div[role=menu]),.tippy-box{position:relative}.menu-panel-deprecated:not(.left){right:0!important;left:auto!important}.left.menu-panel-deprecated{left:0}.menu-panel-deprecated:not(.above){top:28px}.above.menu-panel-deprecated{bottom:42px}.consul-upstream-instance-list dl.local-bind-socket-mode dt::after{display:inline;content:var(--horizontal-kv-list-key-separator)}.consul-bucket-list,.consul-exposed-path-list>ul>li>.detail dl,.consul-instance-checks,.consul-lock-session-list dl,.consul-lock-session-list ul>li:not(:first-child)>.detail dl,.consul-upstream-instance-list dl,.consul-upstream-instance-list li>.detail dl,.list-collection>ul>li:not(:first-child)>.detail dl,.tag-list,section[data-route="dc.show.license"] .validity dl,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl,td.tags{display:inline-flex;flex-wrap:nowrap;align-items:center}.consul-bucket-list:empty,.consul-exposed-path-list>ul>li>.detail dl:empty,.consul-instance-checks:empty,.consul-lock-session-list dl:empty,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:empty,.consul-upstream-instance-list dl:empty,.list-collection>ul>li:not(:first-child)>.detail dl:empty,.tag-list:empty,section[data-route="dc.show.license"] .validity dl:empty,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:empty,td.tags:empty{display:none}.consul-bucket-list>*>*,.consul-exposed-path-list>ul>li>.detail dl>*>*,.consul-instance-checks>*>*,.consul-lock-session-list dl>*>*,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>*>*,.consul-upstream-instance-list dl>*>*,.consul-upstream-instance-list li>.detail dl>*>*,.list-collection>ul>li:not(:first-child)>.detail dl>*>*,.tag-list>*>*,section[data-route="dc.show.license"] .validity dl>*>*,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl>*>*,td.tags>*>*{display:inline-block}.consul-bucket-list>*,.consul-exposed-path-list>ul>li>.detail dl>*,.consul-instance-checks>*,.consul-lock-session-list dl>*,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>*,.consul-upstream-instance-list dl>*,.consul-upstream-instance-list li>.detail dl>*,.list-collection>ul>li:not(:first-child)>.detail dl>*,.tag-list>*,section[data-route="dc.show.license"] .validity dl>*,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl>*,td.tags>*{white-space:nowrap}.consul-bucket-list>dd,.consul-exposed-path-list>ul>li>.detail dl>dd,.consul-instance-checks>dd,.consul-lock-session-list dl>dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>dd,.consul-upstream-instance-list dl>dd,.consul-upstream-instance-list li>.detail dl>dd,.list-collection>ul>li:not(:first-child)>.detail dl>dd,.tag-list>dd,section[data-route="dc.show.license"] .validity dl>dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl>dd,td.tags>dd{flex-wrap:wrap}.consul-upstream-instance-list dl.local-bind-socket-mode dt{display:inline-flex;min-width:18px;overflow:hidden}.consul-bucket-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-bucket-list .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-bucket-list .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-bucket-list .tag-list:not([class]) dd+dt:not([class])+dd,.consul-bucket-list dd+dt,.consul-bucket-list td.tags:not([class]) dd+dt:not([class])+dd,.consul-bucket-list+.consul-bucket-list:not(:first-of-type),.consul-bucket-list+.consul-instance-checks:not(:first-of-type),.consul-bucket-list+.tag-list:not(:first-of-type),.consul-bucket-list+td.tags:not(:first-of-type),.consul-bucket-list:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-bucket-list:not([class]) .tag-list dd+dt:not([class])+dd,.consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-bucket-list:not([class]) td.tags dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail .consul-bucket-list+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-instance-checks+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-lock-session-list dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-exposed-path-list>ul>li>.detail .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-exposed-path-list>ul>li>.detail .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail .tag-list+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl dd+dt,.consul-exposed-path-list>ul>li>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl+.consul-bucket-list:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+.consul-instance-checks:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+.tag-list:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl+td.tags:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-exposed-path-list>ul>li>.detail td.tags+dl:not(:first-of-type),.consul-instance-checks .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-instance-checks .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-instance-checks .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-instance-checks .tag-list:not([class]) dd+dt:not([class])+dd,.consul-instance-checks dd+dt,.consul-instance-checks td.tags:not([class]) dd+dt:not([class])+dd,.consul-instance-checks+.consul-bucket-list:not(:first-of-type),.consul-instance-checks+.consul-instance-checks:not(:first-of-type),.consul-instance-checks+.tag-list:not(:first-of-type),.consul-instance-checks+td.tags:not(:first-of-type),.consul-instance-checks:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-instance-checks:not([class]) .tag-list dd+dt:not([class])+dd,.consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-instance-checks:not([class]) td.tags dd+dt:not([class])+dd,.consul-lock-session-list .consul-bucket-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-bucket-list+dl:not(:first-of-type),.consul-lock-session-list .consul-bucket-list:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-instance-checks ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-instance-checks+dl:not(:first-of-type),.consul-lock-session-list .consul-instance-checks:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-lock-session-list .consul-upstream-instance-list dl.local-bind-address dl dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list dl.local-bind-socket-path dl dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl.local-bind-address dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl.local-bind-socket-path dd+dt+dd,.consul-lock-session-list .consul-upstream-instance-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .list-collection>ul>li:not(:first-child)>.detail ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .tag-list dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .tag-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list .tag-list+dl:not(:first-of-type),.consul-lock-session-list .tag-list:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list .tag-list:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-lock-session-list dl .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-lock-session-list dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl dd+dt,.consul-lock-session-list dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl+.consul-bucket-list:not(:first-of-type),.consul-lock-session-list dl+.consul-instance-checks:not(:first-of-type),.consul-lock-session-list dl+.tag-list:not(:first-of-type),.consul-lock-session-list dl+dl:not(:first-of-type),.consul-lock-session-list dl+td.tags:not(:first-of-type),.consul-lock-session-list dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-lock-session-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.license"] .validity dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-lock-session-list section[data-route="dc.show.license"] .validity dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-lock-session-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list td.tags dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list td.tags ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list td.tags+dl:not(:first-of-type),.consul-lock-session-list td.tags:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list td.tags:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-bucket-list+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-instance-checks+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail .tag-list+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt,.consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl+.consul-bucket-list:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+.consul-instance-checks:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+.tag-list:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl+td.tags:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-lock-session-list ul>li:not(:first-child)>.detail td.tags+dl:not(:first-of-type),.consul-upstream-instance-list .consul-bucket-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-bucket-list+dl:not(:first-of-type),.consul-upstream-instance-list .consul-bucket-list:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-instance-checks li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-instance-checks+dl:not(:first-of-type),.consul-upstream-instance-list .consul-instance-checks:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list dl+dl:not(:first-of-type),.consul-upstream-instance-list .consul-lock-session-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .list-collection>ul>li:not(:first-child)>.detail li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list+dl:not(:first-of-type),.consul-upstream-instance-list .tag-list:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list .tag-list:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl dd+dt,.consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl+.consul-bucket-list:not(:first-of-type),.consul-upstream-instance-list dl+.consul-instance-checks:not(:first-of-type),.consul-upstream-instance-list dl+.tag-list:not(:first-of-type),.consul-upstream-instance-list dl+dl:not(:first-of-type),.consul-upstream-instance-list dl+td.tags:not(:first-of-type),.consul-upstream-instance-list dl.local-bind-address .consul-bucket-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address .consul-instance-checks dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address .consul-lock-session-list dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address .tag-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address section[data-route="dc.show.license"] .validity dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-address td.tags dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .consul-bucket-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .consul-instance-checks dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .consul-lock-session-list dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path .tag-list dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path section[data-route="dc.show.license"] .validity dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path td.tags dd+dt+dd,.consul-upstream-instance-list dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail .consul-bucket-list+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail .consul-instance-checks+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail .consul-lock-session-list dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail .tag-list+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl dd+dt,.consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl+.consul-bucket-list:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+.consul-instance-checks:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+.tag-list:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail dl+td.tags:not(:first-of-type),.consul-upstream-instance-list li>.detail dl.local-bind-address dd+dt+dd,.consul-upstream-instance-list li>.detail dl.local-bind-socket-path dd+dt+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.consul-upstream-instance-list li>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-upstream-instance-list li>.detail td.tags+dl:not(:first-of-type),.consul-upstream-instance-list section[data-route="dc.show.license"] .validity dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.consul-upstream-instance-list section[data-route="dc.show.license"] .validity dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.consul-upstream-instance-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) li>.detail dl dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags li>.detail dl:not([class]) dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags+dl:not(:first-of-type),.consul-upstream-instance-list td.tags:not([class]) dl dd+dt:not([class])+dd,.consul-upstream-instance-list td.tags:not([class]) li>.detail dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-bucket-list+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-instance-checks+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-lock-session-list dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.list-collection>ul>li:not(:first-child)>.detail .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail .tag-list+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl .tag-list:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl dd+dt,.list-collection>ul>li:not(:first-child)>.detail dl section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl td.tags:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl+.consul-bucket-list:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+.consul-instance-checks:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+.tag-list:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl+td.tags:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) .tag-list dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) td.tags dd+dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),.list-collection>ul>li:not(:first-child)>.detail td.tags+dl:not(:first-of-type),.tag-list .consul-bucket-list:not([class]) dd+dt:not([class])+dd,.tag-list .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-instance-checks:not([class]) dd+dt:not([class])+dd,.tag-list .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,.tag-list .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,.tag-list .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,.tag-list .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,.tag-list dd+dt,.tag-list section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,.tag-list section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,.tag-list td.tags:not([class]) dd+dt:not([class])+dd,.tag-list+.consul-bucket-list:not(:first-of-type),.tag-list+.consul-instance-checks:not(:first-of-type),.tag-list+.tag-list:not(:first-of-type),.tag-list+td.tags:not(:first-of-type),.tag-list:not([class]) .consul-bucket-list dd+dt:not([class])+dd,.tag-list:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-instance-checks dd+dt:not([class])+dd,.tag-list:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,.tag-list:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,.tag-list:not([class]) dd+dt:not([class])+dd,.tag-list:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,.tag-list:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd,.tag-list:not([class]) td.tags dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-bucket-list+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-instance-checks+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-lock-session-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-lock-session-list dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-lock-session-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl.local-bind-address dl dd+dt+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl.local-bind-socket-path dl dd+dt+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .tag-list dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity .tag-list+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity .tag-list:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,section[data-route="dc.show.license"] .validity dl .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,section[data-route="dc.show.license"] .validity dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl .tag-list:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl dd+dt,section[data-route="dc.show.license"] .validity dl td.tags:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl+.consul-bucket-list:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+.consul-instance-checks:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+.tag-list:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity dl+td.tags:not(:first-of-type),section[data-route="dc.show.license"] .validity dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) .tag-list dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) td.tags dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity td.tags dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.license"] .validity td.tags+dl:not(:first-of-type),section[data-route="dc.show.license"] .validity td.tags:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-bucket-list+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-exposed-path-list>ul>li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-exposed-path-list>ul>li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-exposed-path-list>ul>li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-instance-checks+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list dl ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list dl:not([class]) ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl.local-bind-address dl dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl.local-bind-socket-path dl dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list dl:not([class]) li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list li>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list li>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .consul-upstream-instance-list li>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .list-collection>ul>li:not(:first-child)>.detail dl dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .list-collection>ul>li:not(:first-child)>.detail dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .tag-list dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header .tag-list+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header .tag-list:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl .tag-list:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl td.tags:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+.consul-bucket-list:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+.consul-instance-checks:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+.tag-list:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl+td.tags:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) .tag-list dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) td.tags dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header td.tags dl:not([class]) dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header td.tags+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section header td.tags:not([class]) dl dd+dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section[data-route="dc.show.license"] .validity header dl+dl:not(:first-of-type),section[data-route="dc.show.serverstatus"] .redundancy-zones section[data-route="dc.show.license"] header .validity dl+dl:not(:first-of-type),td.tags .consul-bucket-list:not([class]) dd+dt:not([class])+dd,td.tags .consul-exposed-path-list>ul>li>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-instance-checks:not([class]) dd+dt:not([class])+dd,td.tags .consul-lock-session-list dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-lock-session-list ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-upstream-instance-list dl.local-bind-address dd+dt+dd,td.tags .consul-upstream-instance-list dl.local-bind-socket-path dd+dt+dd,td.tags .consul-upstream-instance-list dl:not([class]) dd+dt:not([class])+dd,td.tags .consul-upstream-instance-list li>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dd+dt:not([class])+dd,td.tags .tag-list:not([class]) dd+dt:not([class])+dd,td.tags dd+dt,td.tags section[data-route="dc.show.license"] .validity dl:not([class]) dd+dt:not([class])+dd,td.tags section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dd+dt:not([class])+dd,td.tags+.consul-bucket-list:not(:first-of-type),td.tags+.consul-instance-checks:not(:first-of-type),td.tags+.tag-list:not(:first-of-type),td.tags+td.tags:not(:first-of-type),td.tags:not([class]) .consul-bucket-list dd+dt:not([class])+dd,td.tags:not([class]) .consul-exposed-path-list>ul>li>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-instance-checks dd+dt:not([class])+dd,td.tags:not([class]) .consul-lock-session-list dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-lock-session-list ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-upstream-instance-list dl dd+dt:not([class])+dd,td.tags:not([class]) .consul-upstream-instance-list li>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .list-collection>ul>li:not(:first-child)>.detail dl dd+dt:not([class])+dd,td.tags:not([class]) .tag-list dd+dt:not([class])+dd,td.tags:not([class]) dd+dt:not([class])+dd,td.tags:not([class]) section[data-route="dc.show.license"] .validity dl dd+dt:not([class])+dd,td.tags:not([class]) section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dd+dt:not([class])+dd{margin-left:var(--horizontal-kv-list-separator-width)}.consul-bucket-list dt+dd,.consul-exposed-path-list>ul>li>.detail dl dt+dd,.consul-instance-checks dt+dd,.consul-lock-session-list dl dt+dd,.consul-lock-session-list ul>li:not(:first-child)>.detail dl dt+dd,.consul-upstream-instance-list dl dt+dd,.consul-upstream-instance-list li>.detail dl dt+dd,.list-collection>ul>li:not(:first-child)>.detail dl dt+dd,.tag-list dt+dd,section[data-route="dc.show.license"] .validity dl dt+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl dt+dd,td.tags dt+dd{margin-left:4px}.consul-bucket-list:not([class]) dt:not([class])+dd,.consul-exposed-path-list>ul>li>.detail dl:not([class]) dt:not([class])+dd,.consul-instance-checks:not([class]) dt:not([class])+dd,.consul-lock-session-list dl:not([class]) dt:not([class])+dd,.consul-upstream-instance-list dl.local-bind-address dt+dd,.consul-upstream-instance-list dl.local-bind-socket-path dt+dd,.consul-upstream-instance-list dl:not([class]) dt:not([class])+dd,.list-collection>ul>li:not(:first-child)>.detail dl:not([class]) dt:not([class])+dd,.tag-list:not([class]) dt:not([class])+dd,section[data-route="dc.show.license"] .validity dl:not([class]) dt:not([class])+dd,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not([class]) dt:not([class])+dd,td.tags:not([class]) dt:not([class])+dd{margin-left:0!important}.consul-lock-session-list .checks dd,.discovery-chain .resolver-card ol,.tag-list dd,td.tags dd{display:flex}.consul-lock-session-list .checks dd>:not(:last-child)::after,.discovery-chain .resolver-card ol>:not(:last-child)::after,.tag-list dd>:not(:last-child)::after,td.tags dd>:not(:last-child)::after{display:inline;content:var(--csv-list-separator);vertical-align:initial;margin-right:.3em}.tag-list dt::before,td.tags dt::before{color:inherit;color:rgb(var(--tone-gray-500))}.consul-exposed-path-list>ul>li>.detail dl>dt>*,.consul-lock-session-list ul>li:not(:first-child)>.detail dl>dt>*,.consul-upstream-instance-list li>.detail dl>dt>*,.list-collection>ul>li:not(:first-child)>.detail dl>dt>*{display:none}.consul-exposed-path-list>ul>li>.detail dl.passing dt::before,.consul-exposed-path-list>ul>li>.header .passing dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.passing dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .passing dd::before,.consul-upstream-instance-list li>.detail dl.passing dt::before,.consul-upstream-instance-list li>.header .passing dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.passing dt::before,.list-collection>ul>li:not(:first-child)>.header .passing dd::before{color:rgb(var(--tone-green-500))}.consul-exposed-path-list>ul>li>.detail dl.warning dt::before,.consul-exposed-path-list>ul>li>.header .warning dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.warning dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .warning dd::before,.consul-upstream-instance-list li>.detail dl.warning dt::before,.consul-upstream-instance-list li>.header .warning dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.warning dt::before,.list-collection>ul>li:not(:first-child)>.header .warning dd::before{color:rgb(var(--tone-orange-500))}.consul-exposed-path-list>ul>li>.detail dl.critical dt::before,.consul-exposed-path-list>ul>li>.header .critical dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.critical dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .critical dd::before,.consul-upstream-instance-list li>.detail dl.critical dt::before,.consul-upstream-instance-list li>.header .critical dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.critical dt::before,.list-collection>ul>li:not(:first-child)>.header .critical dd::before{color:rgb(var(--tone-red-500))}.consul-exposed-path-list>ul>li>.detail dl.empty dt::before,.consul-exposed-path-list>ul>li>.header .empty dd::before,.consul-lock-session-list ul>li:not(:first-child)>.detail dl.empty dt::before,.consul-lock-session-list ul>li:not(:first-child)>.header .empty dd::before,.consul-upstream-instance-list li>.detail dl.empty dt::before,.consul-upstream-instance-list li>.header .empty dd::before,.list-collection>ul>li:not(:first-child)>.detail dl.empty dt::before,.list-collection>ul>li:not(:first-child)>.header .empty dd::before{color:rgb(var(--tone-gray-500))}.consul-exposed-path-list>ul>li>.header [rel=me] dd::before,.consul-lock-session-list ul>li:not(:first-child)>.header [rel=me] dd::before,.consul-upstream-instance-list li>.header [rel=me] dd::before,.list-collection>ul>li:not(:first-child)>.header [rel=me] dd::before{color:rgb(var(--tone-blue-500))}.app-view>div form:not(.filter-bar) [role=radiogroup] label>em>code,.modal-dialog [role=document] .type-password>em>code,.modal-dialog [role=document] .type-select>em>code,.modal-dialog [role=document] .type-text>em>code,.modal-dialog [role=document] [role=radiogroup] label>em>code,.modal-dialog [role=document] form button+em>code,.modal-dialog [role=document] p code,.oidc-select label>em>code,.type-toggle>em>code,main .type-password>em>code,main .type-select>em>code,main .type-text>em>code,main form button+em>code,main p code{border:1px solid;color:rgb(var(--tone-brand-600));background-color:rgb(var(--tone-gray-050));border-color:rgb(var(--tone-gray-200));display:inline-block;padding:0 4px}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{outline:0;transition-property:transform,visibility,opacity;background-color:rgb(var(--tone-gray-000));border-radius:var(--decor-radius-100)}[data-animation=fade][data-state=hidden].tippy-box{opacity:0}[data-inertia][data-state=visible].tippy-box{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-box .tippy-arrow{--size:5px}.tippy-box .tippy-arrow::before{content:"";position:absolute}[data-placement^=top].tippy-box>.tippy-arrow{bottom:0}[data-placement^=top].tippy-box>.tippy-arrow::before{left:0;bottom:calc(0px - var(--size));transform-origin:center top}[data-placement^=bottom].tippy-box>.tippy-arrow{top:0}[data-placement^=bottom].tippy-box>.tippy-arrow::before{left:0;top:calc(0px - var(--size));transform-origin:center bottom}[data-placement^=left].tippy-box>.tippy-arrow{right:0}[data-placement^=left].tippy-box>.tippy-arrow::before{right:calc(0px - var(--size));transform-origin:center left}[data-placement^=right].tippy-box>.tippy-arrow{left:0}[data-placement^=right].tippy-box>.tippy-arrow::before{left:calc(0px - var(--size));transform-origin:center right}[data-theme~=square-tail] .tippy-arrow{--size:18px;left:calc(0px - (var(--size)/ 2))!important}[data-theme~=square-tail] .tippy-arrow::before{background-color:rgb(var(--tone-gray-000));width:calc(1px + var(--size));height:calc(1px + var(--size));border:var(--decor-border-100);border-color:rgb(var(--tone-gray-300))}[data-theme~=square-tail] .tippy-arrow::after{position:absolute;left:1px}[data-theme~=square-tail][data-placement^=top]{bottom:-10px}[data-theme~=square-tail][data-placement^=top] .informed-action{border-bottom-left-radius:0!important}[data-theme~=square-tail][data-placement^=top] .tippy-arrow::before{border-bottom-left-radius:var(--decor-radius-200);border-bottom-right-radius:var(--decor-radius-200);border-top:0!important}[data-theme~=square-tail][data-placement^=top] .tippy-arrow::after{bottom:calc(0px - var(--size))}[data-theme~=square-tail][data-placement^=bottom]{top:-10px}[data-theme~=square-tail][data-placement^=bottom] .informed-action{border-top-left-radius:0!important}[data-theme~=square-tail][data-placement^=bottom] .tippy-arrow::before{border-top-left-radius:var(--decor-radius-200);border-top-right-radius:var(--decor-radius-200);border-bottom:0!important}[data-theme~=square-tail][data-placement^=bottom] .tippy-arrow::after{top:calc(0px - var(--size))}.tippy-box[data-theme~=tooltip] .tippy-content{padding:12px;max-width:224px;position:relative;z-index:1}.tippy-box[data-theme~=tooltip]{background-color:rgb(var(--tone-gray-700));color:rgb(var(--tone-gray-000))}.tippy-box[data-theme~=tooltip] .tippy-arrow{--size:5px;color:rgb(var(--tone-gray-700));width:calc(var(--size) * 2);height:calc(var(--size) * 2)}.tippy-box[data-theme~=tooltip] .tippy-arrow::before{border-color:var(--transparent);border-style:solid}.tippy-box[data-theme~=tooltip][data-placement^=top]>.tippy-arrow::before{border-width:var(--size) var(--size) 0;border-top-color:initial}.tippy-box[data-theme~=tooltip][data-placement^=bottom]>.tippy-arrow::before{border-width:0 var(--size) var(--size);border-bottom-color:initial}.tippy-box[data-theme~=tooltip][data-placement^=left]>.tippy-arrow::before{border-width:var(--size) 0 var(--size) var(--size);border-left-color:initial}.tippy-box[data-theme~=tooltip][data-placement^=right]>.tippy-arrow::before{border-width:var(--size) var(--size) var(--size) 0;border-right-color:initial}.consul-intention-list .notice.allow,.consul-intention-list .notice.deny,.consul-intention-list .notice.permissions,.notice.error,.notice.highlight,.notice.info,.notice.policy-management,.notice.success,.notice.warning{border-radius:var(--decor-radius-100);border:var(--decor-border-100);color:rgb(var(--tone-gray-999))}.consul-intention-list .notice.allow footer *,.consul-intention-list .notice.deny footer *,.consul-intention-list .notice.permissions footer *,.notice.error footer *,.notice.highlight footer *,.notice.info footer *,.notice.policy-management footer *,.notice.success footer *,.notice.warning footer *{font-weight:var(--typo-weight-bold)}.consul-intention-list .notice.allow,.notice.success{background-color:rgb(var(--tone-green-050));border-color:rgb(var(--tone-green-500))}.consul-intention-list .notice.allow header *,.notice.success header *{color:rgb(var(--tone-green-800))}.consul-intention-list .notice.permissions,.notice.info{border-color:rgb(var(--tone-blue-100));background-color:rgb(var(--tone-blue-010))}.notice.highlight,.notice.policy-management{background-color:rgb(var(--tone-gray-050));border-color:rgb(var(--tone-gray-300))}.consul-intention-list .notice.permissions header *,.notice.info header *{color:rgb(var(--tone-blue-700))}.notice.warning{border-color:rgb(var(--tone-yellow-100));background-color:rgb(var(--tone-yellow-050))}.notice.warning header *{color:rgb(var(--tone-yellow-800))}.consul-intention-list .notice.deny,.notice.error{background-color:rgb(var(--tone-red-050));border-color:rgb(var(--tone-red-500))}.consul-intention-list .notice.deny header *,.notice.error header *{color:rgb(var(--tone-red-500))}.consul-health-check-list .passing.health-check-output::before,.consul-intention-list .notice.allow::before,.notice.success::before{color:rgb(var(--tone-green-500))}.consul-intention-list .notice.permissions::before,.notice.info::before{color:rgb(var(--tone-blue-500))}.notice.highlight::before,.notice.policy-management::before{color:rgb(var(--tone-yellow-500))}.notice.warning::before{color:rgb(var(--tone-orange-500))}.consul-intention-list .notice.deny::before,.notice.error::before{color:rgb(var(--tone-red-500))}.consul-intention-list .notice.allow header,.consul-intention-list .notice.deny header,.consul-intention-list .notice.permissions header,.notice.error header,.notice.highlight header,.notice.info header,.notice.policy-management header,.notice.success header,.notice.warning header{margin-bottom:.1rem}.consul-intention-list .notice.allow header>*,.consul-intention-list .notice.deny header>*,.consul-intention-list .notice.permissions header>*,.notice.error header>*,.notice.highlight header>*,.notice.info header>*,.notice.policy-management header>*,.notice.success header>*,.notice.warning header>*{margin-bottom:0}.consul-intention-list .notice.allow p,.consul-intention-list .notice.deny p,.consul-intention-list .notice.permissions p,.notice.error p,.notice.highlight p,.notice.info p,.notice.policy-management p,.notice.success p,.notice.warning p{margin-bottom:.3rem;line-height:1.4}.consul-intention-list .notice.allow,.consul-intention-list .notice.deny,.consul-intention-list .notice.permissions,.notice.error,.notice.highlight,.notice.info,.notice.policy-management,.notice.success,.notice.warning{position:relative;padding:.8rem;padding-left:calc(.8rem + 1.4rem);margin:1em 0}.consul-intention-list .notice.allow::before,.consul-intention-list .notice.deny::before,.consul-intention-list .notice.permissions::before,.notice.error::before,.notice.highlight::before,.notice.info::before,.notice.policy-management::before,.notice.success::before,.notice.warning::before{position:absolute;top:.8rem;left:.6rem;font-size:1rem}.notice.crd::before{-webkit-mask-image:none;mask-image:none;background-color:transparent}.warning.modal-dialog header{background-color:rgb(var(--tone-yellow-050));border-color:rgb(var(--tone-yellow-500));color:rgb(var(--tone-yellow-800))}.warning.modal-dialog header>:not(label){font-size:var(--typo-size-500);font-weight:var(--typo-weight-semibold)}.warning.modal-dialog header::before{color:rgb(var(--tone-yellow-500));float:left;margin-top:2px;margin-right:3px}.modal-dialog>div:first-child{background-color:rgb(var(--tone-gray-000) /90%)}.modal-dialog [role=document]{box-shadow:var(--decor-elevation-800);background-color:rgb(var(--tone-gray-000))}.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,.modal-dialog-body{border-color:rgb(var(--tone-gray-300))}.modal-dialog-body{border-style:solid;border-left-width:1px;border-right-width:1px}.modal-dialog [role=document]>header button::before{margin-left:-7px;margin-top:-3px}.modal-layer{height:0}.modal-dialog [role=document] table{height:150px!important}.modal-dialog [role=document] tbody{max-height:100px}.modal-dialog table{min-height:149px}.modal-dialog,.modal-dialog>div:first-child{position:fixed;top:0;right:0;bottom:0;left:0}.modal-dialog{z-index:500;display:flex;align-items:center;justify-content:center;height:100%}.role-selector [name="role[state]"],.role-selector [name="role[state]"]+*,[aria-hidden=true].modal-dialog{display:none}.modal-dialog [role=document]{margin:auto;z-index:2;max-width:855px;position:relative}.modal-dialog [role=document]>*{padding-left:15px;padding-right:15px}.modal-dialog [role=document]>div{overflow-y:auto;max-height:80vh;padding:20px 23px}.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header{border-width:1px;padding-top:12px;padding-bottom:10px}.modal-dialog [role=document]>header{position:relative}.modal-dialog [role=document]>header button{cursor:pointer;border:var(--decor-border-100);background-color:rgb(var(--tone-gray-050));border-color:rgb(var(--tone-gray-300));border-radius:var(--decor-radius-100);float:right;width:24px;height:24px;margin-top:-3px}.list-collection>ul{border-top:1px solid;border-color:rgb(var(--tone-gray-200))}.list-collection>button{cursor:pointer;background-color:rgb(var(--tone-gray-050));color:rgb(var(--tone-blue-500));width:100%;padding:15px}.list-collection-scroll-virtual,.list-collection>ul>li{position:relative}.list-collection-scroll-virtual{height:500px}.filter-bar{background-color:rgb(var(--tone-gray-010));border-bottom:var(--decor-border-100);border-color:rgb(var(--tone-gray-200));padding:4px 8px}.filter-bar .filters .popover-menu>[type=checkbox]:checked+label button,.filter-bar .sort .popover-menu>[type=checkbox]:checked+label button{color:rgb(var(--tone-blue-500));background-color:rgb(var(--tone-gray-100))}.filter-bar,.filter-bar>div{display:flex}.filter-bar .sort{margin-left:auto}.filter-bar .popover-select{position:relative;z-index:3}.filter-bar .popover-menu>[type=checkbox]+label button{padding-left:1.5rem!important;padding-right:1.5rem!important}.filter-bar .popover-menu [role=menuitem]{justify-content:normal!important}@media (max-width:1379px){.filter-bar,.filter-bar>div{flex-wrap:wrap}.filter-bar .search{position:relative;z-index:4;width:100%;margin-bottom:.3rem}}@media (max-width:995px){.filter-bar .filters,.filter-bar .sort{display:none}}html[data-route^="dc.acls.index"] .filter-bar{color:inherit}.freetext-filter{border:var(--decor-border-100);border-radius:var(--decor-radius-100);background-color:rgb(var(--tone-gray-000));border-color:rgb(var(--tone-gray-200));color:rgb(var(--tone-gray-400))}.freetext-filter:hover,.freetext-filter:hover *{border-color:rgb(var(--tone-gray-400))}.freetext-filter *,.freetext-filter_input::placeholder{cursor:inherit;color:inherit;border-color:inherit}.freetext-filter_input{-webkit-appearance:none;border:none}.freetext-filter_label::after{visibility:visible;--icon-name:icon-search;content:"";position:absolute;top:50%;left:50%;width:16px;height:16px;margin-left:-8px;margin-top:-8px}.freetext-filter .popover-menu{background-color:rgb(var(--tone-gray-050));color:rgb(var(--tone-gray-800));border-left:1px solid;border-color:inherit}.freetext-filter .popover-menu>[type=checkbox]:checked+label button{background-color:rgb(var(--tone-gray-200))}.freetext-filter{--height:2.2rem;display:flex;position:relative;height:var(--height);width:100%}.freetext-filter>label,.freetext-filter_input{flex-grow:1}.freetext-filter_input,.freetext-filter_label{height:100%}.freetext-filter_input{padding:8px 10px;padding-left:var(--height);min-width:12.7rem;width:100%}.freetext-filter_label{visibility:hidden;position:absolute;z-index:1;width:var(--height)}.informed-action{border-radius:var(--decor-radius-200);border:var(--decor-border-100);border-color:rgb(var(--tone-gray-300));background-color:rgb(var(--tone-gray-000));min-width:190px}.informed-action>div{border-top-left-radius:var(--decor-radius-200);border-top-right-radius:var(--decor-radius-200);cursor:default;padding:1rem}.informed-action p{color:rgb(var(--tone-gray-999))}.informed-action>ul>li>:focus,.informed-action>ul>li>:hover{background-color:rgb(var(--tone-gray-100))}.info.informed-action header{color:rgb(var(--tone-blue-700))}.info.informed-action header::before{background-color:rgb(var(--tone-blue-500));margin-right:5px}.info.informed-action>div{background-color:rgb(var(--tone-blue-010))}.dangerous.informed-action header{color:rgb(var(--tone-red-700))}.dangerous.informed-action header::before{background-color:rgb(var(--tone-red-500))}.dangerous.informed-action>div{background-color:rgb(var(--tone-red-010))}.warning.informed-action header{color:rgb(var(--tone-orange-700))}.warning.informed-action header::before{background-color:rgb(var(--tone-yellow-500));margin-right:5px}.warning.informed-action>div{background-color:rgb(var(--tone-yellow-050))}.informed-action>ul>.action>*{color:rgb(var(--tone-blue-500))}.documentation.informed-action{min-width:270px}.informed-action header::before{float:left;margin-right:5px}.informed-action>ul{list-style:none;display:flex;margin:0;padding:4px}.informed-action>ul>li{width:50%}.informed-action>ul>li>*{width:100%}.tab-nav ul{list-style-type:none;display:inline-flex;align-items:center;position:relative;padding:0;margin:0}.tab-nav li>:not(:disabled){cursor:pointer}.tab-nav{border-bottom:var(--decor-border-100)}.animatable.tab-nav ul::after,.tab-nav li>*{border-bottom:var(--decor-border-300)}.tab-nav{border-color:rgb(var(--tone-gray-200));clear:both;overflow:auto;letter-spacing:.03em}.tab-nav li>*{white-space:nowrap;transition-property:background-color,border-color;border-color:var(--transparent);color:rgb(var(--tone-gray-500));display:inline-block;padding:16px 13px}.tab-nav li:not(.selected)>:active,.tab-nav li:not(.selected)>:focus,.tab-nav li:not(.selected)>:hover{background-color:rgb(var(--tone-gray-100))}.tab-nav li:not(.selected)>:focus,.tab-nav li:not(.selected)>:hover{border-color:rgb(var(--tone-gray-300))}.animatable.tab-nav .selected a{border-color:var(--transparent)!important}.animatable.tab-nav ul::after{position:absolute;bottom:0;height:0;border-top:0;width:calc(var(--selected-width,0) * 1px);transform:translate(calc(var(--selected-left,0) * 1px),0);transition-property:transform,width}.search-bar-status{border-bottom:var(--decor-border-100);border-bottom-color:rgb(var(--tone-gray-200));padding:.5rem 0 .5rem .5rem}.search-bar-status li:not(.remove-all) button::before{color:rgb(var(--tone-gray-600));margin-top:1px;margin-right:.2rem}.search-bar-status dt::after{content:":";padding-right:.3rem}.search-bar-status>dl>dt{float:left}.search-bar-status dt{white-space:nowrap}.search-bar-status li{display:inline-flex}.search-bar-status li:not(:last-child){margin-right:.3rem;margin-bottom:.3rem}.search-bar-status li:not(.remove-all){border:var(--decor-border-100);border-color:rgb(var(--tone-gray-200));color:rgb(var(--tone-gray-600));padding:0 .2rem}.search-bar-status li:not(.remove-all) dl{display:flex}.search-bar-status li:not(.remove-all) button{cursor:pointer;padding:0}.certificate{display:flex}.certificate button.visibility{height:fit-content;padding-top:4px;margin-right:4px;cursor:pointer}.certificate code{background-color:rgb(var(--tone-gray-050));overflow-wrap:break-word;max-width:min-content;padding:0 12px}.certificate hr{border:3px dashed;background-color:rgb(var(--tone-gray-000));width:150px;margin:9px auto auto}.consul-loader circle{fill:rgb(var(--tone-brand-100));animation:loader-animation 1.5s infinite ease-in-out;transform-origin:50% 50%}.consul-loader g:nth-last-child(2) circle{animation-delay:.2s}.consul-loader g:nth-last-child(3) circle{animation-delay:.3s}.consul-loader g:nth-last-child(4) circle{animation-delay:.4s}.consul-loader g:nth-last-child(5) circle{animation-delay:.5s}@keyframes loader-animation{0%,100%{transform:scale3D(1,1,1)}33%{transform:scale3D(0,0,1)}}.consul-loader{display:flex;align-items:center;justify-content:center;height:100%;position:absolute;width:100%;top:0;margin-top:0!important}.tomography-graph .background{fill:rgb(var(--tone-gray-050))}.tomography-graph .axis{fill:none;stroke:rgb(var(--tone-gray-300));stroke-dasharray:4 4}.tomography-graph .border{fill:none;stroke:rgb(var(--tone-gray-300))}.tomography-graph .point{stroke:rgb(var(--tone-gray-400));fill:rgb(var(--tone-magenta-600))}.tomography-graph .lines rect{fill:rgb(var(--tone-magenta-600));stroke:transparent;stroke-width:5px}.tomography-graph .lines rect:hover{fill:rgb(var(--tone-gray-300));height:3px;y:-1px}.tomography-graph .tick line{stroke:rgb(var(--tone-gray-300))}.tomography-graph .tick text{font-size:var(--typo-size-600);text-anchor:start;color:rgb(var(--tone-gray-900))}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card,.discovery-chain path{transition-duration:.1s;transition-timing-function:linear;cursor:pointer}.discovery-chain path{transition-property:stroke;fill:none;stroke:rgb(var(--tone-gray-400));stroke-width:2;vector-effect:non-scaling-stroke}#downstream-lines svg circle,#upstream-lines svg circle,.discovery-chain circle{fill:rgb(var(--tone-gray-000))}.discovery-chain .resolver-card,.discovery-chain .resolver-card a,.discovery-chain .route-card,.discovery-chain .route-card a,.discovery-chain .splitter-card,.discovery-chain .splitter-card a{color:rgb(var(--tone-gray-900))!important}.discovery-chain path:focus,.discovery-chain path:hover{stroke:rgb(var(--tone-gray-900))}.discovery-chain .resolvers,.discovery-chain .routes,.discovery-chain .splitters{border-radius:var(--decor-radius-100);border:1px solid;border-color:rgb(var(--tone-gray-200));background-color:rgb(var(--tone-gray-100));pointer-events:none}.discovery-chain .resolver-card,.discovery-chain .resolvers>header span,.discovery-chain .route-card,.discovery-chain .routes>header span,.discovery-chain .splitter-card,.discovery-chain .splitters>header span{pointer-events:all}.discovery-chain .resolvers>header>*,.discovery-chain .routes>header>*,.discovery-chain .splitters>header>*{text-transform:uppercase}.discovery-chain .resolvers>header span::after,.discovery-chain .routes>header span::after,.discovery-chain .splitters>header span::after{width:1.2em;height:1.2em;opacity:.6}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card{transition-property:opacity background-color border-color;margin-top:0!important}.discovery-chain [id*=":"]:not(path):hover{opacity:1;background-color:rgb(var(--tone-gray-000));border-color:rgb(var(--tone-gray-500))}.discovery-chain .route-card header:not(.short) dd{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.discovery-chain .route-card section header>*{visibility:hidden}.discovery-chain .route-card .match-headers header ::before{content:"H"}.discovery-chain .route-card .match-queryparams header>::before{content:"Q"}.discovery-chain .resolver-card dt::before{content:"";--icon-size:icon-999}.discovery-chain .resolver-card dl.failover dt::before{--icon-name:icon-cloud-cross}.discovery-chain .resolver-card dl.redirect dt::before{--icon-name:icon-redirect}.discovery-chain circle{stroke-width:2;stroke:rgb(var(--tone-gray-400))}.discovery-chain{position:relative;display:flex;justify-content:space-between}.discovery-chain svg{position:absolute}.discovery-chain .resolvers,.discovery-chain .routes,.discovery-chain .splitters{padding:10px 1%;width:32%}.discovery-chain .resolvers>header,.discovery-chain .routes>header,.discovery-chain .splitters>header{height:18px}.discovery-chain .resolvers>header span,.discovery-chain .routes>header span,.discovery-chain .splitters>header span{position:relative;z-index:1;margin-left:2px}.discovery-chain .resolvers [role=group],.discovery-chain .routes [role=group],.discovery-chain .splitters [role=group]{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:space-around;height:100%}.discovery-chain .resolver-card dl,.discovery-chain .route-card dl,.discovery-chain .splitter-card dl{margin:0;float:none}.discovery-chain .resolver-card,.discovery-chain .route-card,.discovery-chain .splitter-card{margin-bottom:20px}.discovery-chain .route-card header.short dl{display:flex}.discovery-chain .route-card header.short dt::after{content:" ";display:inline-block}.discovery-chain .route-card>header ul{float:right;margin-top:-2px}.discovery-chain .route-card>header ul li{margin-left:5px}.discovery-chain .route-card section{display:flex}.discovery-chain .route-card section header{display:block;width:19px;margin-right:14px}.discovery-chain .resolver-card a{display:block}.discovery-chain .resolver-card dl{display:flex;flex-wrap:wrap;margin-top:5px}.discovery-chain .resolver-card dt{font-size:0;margin-right:6px;margin-top:1px;width:23px;height:20px}.discovery-chain .resolver-card ol{display:flex;flex-wrap:wrap;list-style-type:none}.discovery-chain .route-card,.discovery-chain .splitter-card{position:relative}.discovery-chain .route-card::before,.discovery-chain .splitter-card::before{background-color:rgb(var(--tone-gray-000));border-radius:var(--decor-radius-full);border:2px solid;border-color:rgb(var(--tone-gray-400));position:absolute;z-index:1;right:-5px;top:50%;margin-top:-5px;width:10px;height:10px}.discovery-chain .resolver-inlets,.discovery-chain .splitter-inlets{width:10px;height:100%;z-index:1}.discovery-chain .splitter-inlets{left:50%;margin-left:calc(calc(-32% / 2) + 1% - 3px)}.discovery-chain .resolver-inlets{right:calc(32% - 1% - 7px)}.consul-bucket-list .service+dd{font-weight:var(--typo-weight-semibold)}.consul-bucket-list dd:not(:last-child)::after{display:inline-block;content:"/";margin:0 6px 0 3px}.consul-bucket-list .service+dd,.consul-bucket-list dd+dt{margin-left:0!important}.consul-upstream-instance-list dl.local-bind-socket-mode dt{text-transform:lowercase;font-weight:var(--typo-weight-semibold)}.consul-health-check-list .health-check-output::before{min-width:20px;min-height:20px;margin-right:15px}@media (max-width:650px){.consul-health-check-list .health-check-output::before{min-width:18px;min-height:18px;margin-right:8px}}.consul-health-check-list .health-check-output dd em{background-color:rgb(var(--tone-gray-100));cursor:default;font-style:normal;margin-top:-2px;margin-left:.5em}.consul-health-check-list .warning.health-check-output::before{color:rgb(var(--tone-orange-500))}.consul-health-check-list .critical.health-check-output::before{color:rgb(var(--tone-red-500))}.consul-health-check-list .health-check-output,.consul-health-check-list .health-check-output pre{border-radius:var(--decor-radius-100)}.consul-health-check-list .health-check-output dd:first-of-type{color:rgb(var(--tone-gray-400))}.consul-health-check-list .health-check-output pre{background-color:rgb(var(--tone-gray-050));color:rgb(var(--tone-gray-600))}.consul-health-check-list .health-check-output{border-width:1px 1px 1px 4px;color:rgb(var(--tone-gray-900));border-color:rgb(var(--tone-gray-200));border-style:solid;display:flex;padding:20px 24px 20px 16px}.consul-health-check-list .passing.health-check-output{border-left-color:rgb(var(--tone-green-500))}.consul-health-check-list .warning.health-check-output{border-left-color:rgb(var(--tone-yellow-500))}.consul-health-check-list .critical.health-check-output{border-left-color:rgb(var(--tone-red-500))}.consul-health-check-list .health-check-output:not(:last-child){margin-bottom:24px}.consul-health-check-list .health-check-output dl:last-of-type,.consul-health-check-list .health-check-output header{width:100%}.consul-health-check-list .health-check-output header{margin-bottom:.9em}.consul-health-check-list .health-check-output>div{flex:1 1 auto;width:calc(100% - 26px);display:flex;flex-wrap:wrap;justify-content:space-between}.consul-health-check-list .health-check-output dl{min-width:110px}.consul-health-check-list .health-check-output dl>*{display:block;width:auto;position:static;padding-left:0}.consul-health-check-list .health-check-output dt{margin-bottom:0}.consul-health-check-list .health-check-output dd{position:relative}.consul-health-check-list .health-check-output dl:nth-last-of-type(2){width:50%}.consul-health-check-list .health-check-output dl:last-of-type{margin-top:1em;margin-bottom:0}.consul-health-check-list .health-check-output dl:last-of-type dt{margin-bottom:.3em}.consul-health-check-list .health-check-output pre{padding:12px 40px 12px 12px;white-space:pre-wrap;position:relative}.consul-health-check-list .health-check-output pre code{word-wrap:break-word}.consul-health-check-list .health-check-output .copy-button{position:absolute;right:.5em;top:.7em}@media (max-width:650px){.consul-health-check-list .health-check-output{padding:15px 19px 15px 14px}.consul-health-check-list .health-check-output::before{margin-right:8px}.consul-health-check-list .health-check-output dl:nth-last-of-type(2){width:100%}.consul-health-check-list .health-check-output dl:not(:last-of-type){margin-right:0}}.consul-instance-checks.passing dt::before{color:rgb(var(--tone-green-500))}.consul-instance-checks.warning dt::before{color:rgb(var(--tone-orange-500))}.consul-instance-checks.critical dt::before{color:rgb(var(--tone-red-500))}.consul-instance-checks.empty dt::before{color:rgb(var(--tone-gray-500))}.consul-exposed-path-list>ul{border-top:1px solid rgb(var(--tone-gray-200))}.consul-intention-list td.intent- strong::before,.consul-intention-list td.intent-allow strong::before,.consul-intention-list td.intent-deny strong::before,.consul-intention-permission-list .intent-allow::before,.consul-intention-permission-list .intent-deny::before,.consul-intention-search-bar .value- span::before,.consul-intention-search-bar .value-allow span::before,.consul-intention-search-bar .value-deny span::before{margin-right:5px}.consul-intention-list td.intent- strong,.consul-intention-list td.intent-allow strong,.consul-intention-list td.intent-deny strong,.consul-intention-permission-list .intent-allow,.consul-intention-permission-list .intent-deny,.consul-intention-search-bar .value- span,.consul-intention-search-bar .value-allow span,.consul-intention-search-bar .value-deny span{display:inline-block;font-weight:var(--typo-weight-normal);font-size:var(--typo-size-600)}.consul-intention-list td.intent-allow strong,.consul-intention-permission-list .intent-allow,.consul-intention-search-bar .value-allow span{color:rgb(var(--tone-green-800));background-color:rgb(var(--tone-green-100))}.consul-intention-list td.intent-deny strong,.consul-intention-permission-list .intent-deny,.consul-intention-search-bar .value-deny span{color:rgb(var(--tone-red-800));background-color:rgb(var(--tone-red-100))}.consul-intention-list td.permissions{color:rgb(var(--tone-blue-500))}.consul-intention-list em{--word-spacing:0.25rem}.consul-intention-list em span::before,.consul-intention-list em span:first-child{margin-right:var(--word-spacing)}.consul-intention-list em span:last-child{margin-left:var(--word-spacing)}.consul-intention-list td{height:59px}.consul-intention-list tr>:nth-child(1){width:calc(30% - 50px)}.consul-intention-list tr>:nth-child(2){width:120px}.consul-intention-list tr>:nth-child(3){width:calc(30% - 50px)}.consul-intention-list tr>:nth-child(4){width:calc(40% - 240px)}.consul-intention-list tr>:nth-child(5){width:160px}.consul-intention-list tr>:last-child{width:60px}.consul-intention-list .menu-panel.confirmation{width:200px}@media (max-width:849px){.consul-intention-list tr>:not(.source):not(.destination):not(.intent){display:none}}.consul-intention-action-warn-modal .modal-dialog-window{max-width:450px}.consul-intention-action-warn-modal .modal-dialog-body p{font-size:var(--typo-size-600)}.consul-intention-fieldsets [role=radiogroup]{overflow:visible!important;display:grid;grid-gap:12px;grid-template-columns:repeat(auto-fit,minmax(270px,auto))}.consul-intention-fieldsets .radio-card header>*{display:inline}.consul-intention-fieldsets .permissions>button{float:right}.consul-intention-permission-modal [role=dialog]{width:100%}.consul-intention-permission-list dl.permission-methods dt::before{content:"M"}.consul-intention-permission-list dl.permission-path dt::before{content:"P"}.consul-intention-permission-header-list dt::before,.consul-intention-permission-list dl.permission-header dt::before{content:"H"}.consul-intention-permission-list .detail>div{display:flex;width:100%}.consul-intention-permission-list strong{margin-right:8px}.consul-intention-permission-form h2{border-top:1px solid rgb(var(--tone-blue-500));padding-top:1.4em;margin-top:.2em;margin-bottom:.6em}.consul-intention-permission-form .consul-intention-permission-header-form{margin-top:10px}.consul-intention-permission-form .consul-intention-permission-header-form fieldset>div,.consul-intention-permission-form fieldset:nth-child(2)>div{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));grid-gap:12px}.consul-intention-permission-form fieldset:nth-child(2)>div label:last-child{grid-column:span 2}.consul-intention-permission-form .ember-basic-dropdown-trigger{padding:5px}.consul-intention-permission-form .checkbox-group{flex-direction:column}.consul-intention-permission-header-list{max-height:200px;overflow:auto}.consul-lock-session-list button{margin-right:var(--horizontal-padding)}.consul-lock-session-form{overflow:hidden}.consul-server-list ul{display:grid;grid-template-columns:repeat(4,minmax(215px,25%));gap:12px}.consul-server-list a:hover div{box-shadow:var(--decor-elevation-800);--tone-border:var(--tone-gray-500)}.consul-server-card .name+dd{color:rgb(var(--tone-gray-999));animation-name:typo-truncate}.consul-server-card .health-status+dd{font-size:var(--typo-size-700)}.voting-status-non-voter.consul-server-card .health-status+dd{background-color:rgb(var(--tone-gray-100));color:rgb(var(--tone-gray-600))}.consul-server-card:not(.voting-status-non-voter) .health-status.healthy+dd{background-color:rgb(var(--tone-green-050));color:rgb(var(--tone-green-800))}.consul-server-card:not(.voting-status-non-voter) .health-status:not(.healthy)+dd{background-color:rgb(var(--tone-red-050));color:rgb(var(--tone-red-500))}.consul-server-card .health-status+dd::before{--icon-size:icon-000;content:""}.consul-server-card .health-status.healthy+dd::before{--icon-name:icon-check;--icon-color:rgb(var(--tone-green-800))}.consul-server-card .health-status:not(.healthy)+dd::before{--icon-name:icon-x;--icon-color:rgb(var(--tone-red-500))}.consul-server-card{position:relative;overflow:hidden;--padding-x:24px;--padding-y:24px;padding:var(--padding-y) var(--padding-x);--tile-size:3rem}.consul-auth-method-binding-list h2,.consul-auth-method-view section h2{padding-bottom:12px}.voting-status-leader.consul-server-card .name{position:absolute!important}#downstream-lines,#metrics-container div .sparkline-wrapper,#upstream-lines,.consul-auth-method-view section,main{position:relative}.consul-server-card dd:not(:last-of-type){margin-bottom:calc(var(--padding-y)/ 2)}.voting-status-leader.consul-server-card dd{margin-left:calc(var(--tile-size) + 1rem)}.consul-auth-method-list ul .locality::before{margin-right:4px}.consul-auth-method-view{margin-bottom:32px}.consul-auth-method-view section{width:100%;overflow-y:auto}.consul-auth-method-view section table thead td{color:rgb(var(--tone-gray-500));font-weight:var(--typo-weight-semibold);font-size:var(--typo-size-700)}.consul-auth-method-view section table tbody td{font-size:var(--typo-size-600);color:rgb(var(--tone-gray-999))}.consul-auth-method-view section table tbody tr{cursor:default}.consul-auth-method-view section dt{width:30%}.consul-auth-method-view section dd{width:70%}.consul-auth-method-binding-list p{margin-bottom:4px!important}.consul-auth-method-binding-list code{background-color:rgb(var(--tone-gray-050));padding:0 12px}.consul-auth-method-nspace-list thead td{color:rgb(var(--tone-gray-500))!important;font-weight:var(--typo-weight-semibold)!important;font-size:var(--typo-size-700)!important}.consul-auth-method-nspace-list tbody td{font-size:var(--typo-size-600);color:rgb(var(--tone-gray-999))}.consul-auth-method-nspace-list tbody tr{cursor:default}.role-selector [name="role[state]"]:checked+*{display:block}.topology-notices button{color:rgb(var(--tone-blue-500));float:right;margin-top:16px;margin-bottom:32px}#metrics-container .link a,.topology-container{color:rgb(var(--tone-gray-700))}#downstream-container .topology-metrics-card:not(:last-child),#upstream-column #upstream-container:not(:last-child),#upstream-container .topology-metrics-card:not(:last-child){margin-bottom:8px}#downstream-container,#metrics-container,#upstream-container{border-radius:var(--decor-radius-100);border:1px solid;border-color:rgb(var(--tone-gray-200))}#downstream-container,#upstream-container{background-color:rgb(var(--tone-gray-100));padding:12px}#downstream-container>div:first-child{display:inline-flex}#downstream-container>div:first-child span::before{background-color:rgb(var(--tone-gray-500))}#metrics-container div:first-child{background-color:rgb(var(--tone-gray-000));padding:12px;border:none;font-size:16px;font-weight:700}#metrics-container .link{background-color:rgb(var(--tone-gray-100));padding:18px}#metrics-container .link a:hover{color:rgb(var(--color-action))}#downstream-lines svg path,#upstream-lines svg path{fill:var(--transparent)}#downstream-lines svg .allow-arrow,#upstream-lines svg .allow-arrow{fill:rgb(var(--tone-gray-300));stroke-linejoin:round}#downstream-lines svg .allow-arrow,#downstream-lines svg .allow-dot,#downstream-lines svg path,#upstream-lines svg .allow-arrow,#upstream-lines svg .allow-dot,#upstream-lines svg path{stroke:rgb(var(--tone-gray-300));stroke-width:2}#downstream-lines svg path[data-permission=empty],#downstream-lines svg path[data-permission=not-defined],#upstream-lines svg path[data-permission=empty],#upstream-lines svg path[data-permission=not-defined]{stroke-dasharray:4}#downstream-lines svg path[data-permission=deny],#upstream-lines svg path[data-permission=deny]{stroke:rgb(var(--tone-red-500))}#downstream-lines svg .deny-dot,#upstream-lines svg .deny-dot{stroke:rgb(var(--tone-red-500));stroke-width:2}#downstream-lines svg .deny-arrow,#upstream-lines svg .deny-arrow{fill:rgb(var(--tone-red-500));stroke:rgb(var(--tone-red-500));stroke-linejoin:round}.topology-notices{display:flow-root}.topology-container{display:grid;height:100%;align-items:start;grid-template-columns:2fr 1fr 2fr 1fr 2fr;grid-template-rows:50px 1fr 50px;grid-template-areas:"down-cards down-lines . up-lines up-cards" "down-cards down-lines metrics up-lines up-cards" "down-cards down-lines . up-lines up-cards"}#downstream-container{grid-area:down-cards}#downstream-lines{grid-area:down-lines;margin-left:-20px}#upstream-lines{grid-area:up-lines;margin-right:-20px}#upstream-column{grid-area:up-cards}#metrics-container{grid-area:metrics}#metrics-container .link a::before{background-color:rgb(var(--tone-gray-500));margin-right:4px}#downstream-container .topology-metrics-card,#upstream-container .topology-metrics-card{display:block;color:rgb(var(--tone-gray-700));overflow:hidden;background-color:rgb(var(--tone-gray-000));border-radius:var(--decor-radius-100);border:1px solid;border-color:rgb(var(--tone-gray-200))}#downstream-container .topology-metrics-card p,#upstream-container .topology-metrics-card p{padding:12px 12px 0;font-size:var(--typo-size-500);font-weight:var(--typo-weight-semibold);margin-bottom:0!important}#downstream-container .topology-metrics-card p.empty,#upstream-container .topology-metrics-card p.empty{padding:12px!important}#downstream-container .topology-metrics-card div dl,#upstream-container .topology-metrics-card div dl{display:inline-flex;margin-right:8px}#downstream-container .topology-metrics-card div dd,#upstream-container .topology-metrics-card div dd{color:rgb(var(--tone-gray-700))}#downstream-container .topology-metrics-card div span,#upstream-container .topology-metrics-card div span{margin-right:8px}#downstream-container .topology-metrics-card div dt::before,#downstream-container .topology-metrics-card div span::before,#upstream-container .topology-metrics-card div dt::before,#upstream-container .topology-metrics-card div span::before{margin-right:4px}#downstream-container .topology-metrics-card div .health dt::before,#downstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .nspace dt::before{margin-top:2px}#downstream-container .topology-metrics-card div .health dt::before,#downstream-container .topology-metrics-card div .nspace dt::before,#downstream-container .topology-metrics-card div .partition dt::before,#upstream-container .topology-metrics-card div .health dt::before,#upstream-container .topology-metrics-card div .nspace dt::before,#upstream-container .topology-metrics-card div .partition dt::before{--icon-color:rgb(var(--tone-gray-500))}#downstream-container .topology-metrics-card div .passing::before,#upstream-container .topology-metrics-card div .passing::before{--icon-color:rgb(var(--tone-green-500))}#downstream-container .topology-metrics-card div .warning::before,#upstream-container .topology-metrics-card div .warning::before{--icon-color:rgb(var(--tone-orange-500))}#downstream-container .topology-metrics-card div .critical::before,#upstream-container .topology-metrics-card div .critical::before{--icon-color:rgb(var(--tone-red-500))}#downstream-container .topology-metrics-card div .empty::before,#upstream-container .topology-metrics-card div .empty::before{--icon-color:rgb(var(--tone-gray-500))}#downstream-container .topology-metrics-card .details,#upstream-container .topology-metrics-card .details{padding:0 12px 12px}#downstream-container .topology-metrics-card .details>:not(:last-child),#upstream-container .topology-metrics-card .details>:not(:last-child){padding-bottom:6px}#downstream-container .topology-metrics-card .details .group,#upstream-container .topology-metrics-card .details .group{display:grid;grid-template-columns:20px 1fr;grid-template-rows:repeat(2,1fr);grid-template-areas:"partition partition" "union namespace"}#downstream-container .topology-metrics-card .details .group span,#upstream-container .topology-metrics-card .details .group span{display:inline-block;grid-area:union;padding-left:7px;margin-right:0}#downstream-container .topology-metrics-card .details .group span::before,#upstream-container .topology-metrics-card .details .group span::before{margin-right:0;--icon-color:rgb(var(--tone-gray-500))}#downstream-container .topology-metrics-card .details .group dl:first-child,#upstream-container .topology-metrics-card .details .group dl:first-child{grid-area:partition;padding-bottom:6px}#downstream-container .topology-metrics-card .details .group dl:nth-child(2),#upstream-container .topology-metrics-card .details .group dl:nth-child(2){grid-area:namespace}.topology-metrics-source-type{margin:6px 0 6px 12px;display:table}.topology-metrics-popover>button{position:absolute;transform:translate(-50%,-50%);background-color:rgb(var(--tone-gray-000));padding:1px}.topology-metrics-popover>button:hover{cursor:pointer}.topology-metrics-popover>button:disabled,html[data-route^="dc.nodes.show.metadata"] table tr{cursor:default}.topology-metrics-popover>button:active,.topology-metrics-popover>button:focus{outline:0}.topology-metrics-popover.deny .informed-action header::before{display:none}.topology-metrics-popover.deny .tippy-arrow::after,.topology-metrics-popover.deny>button::before{--icon-color:rgb(var(--tone-red-500))}.topology-metrics-popover.not-defined .tippy-arrow::after,.topology-metrics-popover.not-defined>button::before{--icon-color:rgb(var(--tone-yellow-500))}#metrics-container .sparkline-wrapper svg path{stroke-width:0}#metrics-container .sparkline-wrapper .tooltip{padding:0 0 10px;font-size:.875em;line-height:1.5em;font-weight:400;border:1px solid;background:#fff;border-radius:2px;box-sizing:border-box;box-shadow:0 4px 8px rgba(0,0,0,.05),0 4px 4px rgba(0,0,0,.1)}#metrics-container .sparkline-wrapper .tooltip .sparkline-time{padding:8px 10px;font-weight:700;font-size:14px;color:#000;border-bottom:1px solid rgb(var(--tone-gray-200));margin-bottom:4px;text-align:center}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-legend,#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-sum{border:0;padding:3px 10px 0}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-sum{border-top:1px solid rgb(var(--tone-gray-200));margin-top:4px;padding:8px 10px 0}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-legend-color{width:12px;height:12px;border-radius:2px;margin:0 5px 0 0;padding:0}#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-legend-value,#metrics-container .sparkline-wrapper .tooltip .sparkline-tt-sum-value{float:right}#metrics-container .sparkline-wrapper div.tooltip:before{content:"";display:block;position:absolute;width:12px;height:12px;left:15px;bottom:-7px;border:1px solid;border-top:0;border-left:0;background:#fff;transform:rotate(45deg)}.sparkline-key h3::before{margin:2px 3px 0 0;font-size:14px}.sparkline-key h3{color:rgb(var(--tone-gray-900));font-size:16px}.sparkline-key .sparkline-key-content dd,.sparkline-key-link{color:rgb(var(--tone-gray-500))}.sparkline-key-link:hover{color:rgb(var(--tone-blue-500))}#metrics-container:hover .sparkline-key-link::before{margin:1px 3px 0 0;font-size:12px}#metrics-container div .sparkline-wrapper,#metrics-container div .sparkline-wrapper svg.sparkline{width:100%;height:70px;padding:0;margin:0}#metrics-container div .sparkline-wrapper .tooltip{visibility:hidden;position:absolute;z-index:10;bottom:78px;width:217px}#metrics-container div .sparkline-wrapper .sparkline-tt-legend-color{display:inline-block}#metrics-container div .sparkline-wrapper .topology-metrics-error,#metrics-container div .sparkline-wrapper .topology-metrics-loader{padding-top:15px}.sparkline-key .sparkline-key-content{width:500px;min-height:100px}.sparkline-key .sparkline-key-content dl{padding:10px 0 0}.sparkline-key .sparkline-key-content dt{font-weight:600;width:125px;float:left}.sparkline-key .sparkline-key-content dd{margin:0 0 12px 135px}.sparkline-key-link{visibility:hidden;float:right;margin-top:-35px;margin-right:12px}#metrics-container:hover .sparkline-key-link{visibility:visible}.topology-metrics-stats{padding:12px 12px 0;display:flex;flex-flow:row wrap;justify-content:space-between;align-items:stretch;width:100%;border-top:1px solid rgb(var(--tone-gray-200))}.topology-metrics-stats dl{display:flex;padding-bottom:12px}.topology-metrics-stats dt{margin-right:5px;line-height:1.5em!important}.topology-metrics-stats dd{color:rgb(var(--tone-gray-400))!important}.topology-metrics-stats span{padding-bottom:12px}.topology-metrics-status-error,.topology-metrics-status-loader{font-weight:400;font-size:.875rem;color:rgb(var(--tone-gray-500));text-align:center;margin:0 auto!important;display:block}.topology-metrics-status-error span::before,.topology-metrics-status-loader span::before{background-color:rgb(var(--tone-gray-500))}span.topology-metrics-status-loader::after{--icon-name:var(--icon-loading);content:"";margin-left:.5rem}.definition-table dt{line-height:var(--typo-lead-700)}.app-view>div form:not(.filter-bar) [role=radiogroup] label,.modal-dialog [role=document] [role=radiogroup] label{line-height:var(--typo-lead-200)}.app-view>div form button[type=button].type-delete,.app-view>div form:not(.filter-bar) [role=radiogroup] label>span,.consul-intention-action-warn-modal button.dangerous,.copy-button button,.empty-state div>button,.modal-dialog .type-delete,.modal-dialog [role=document] .type-password>span,.modal-dialog [role=document] .type-select>span,.modal-dialog [role=document] .type-text>span,.modal-dialog [role=document] [role=radiogroup] label>span,.oidc-select button:not(.reset),.oidc-select label>span,.popover-select label>*,.topology-notices button,.type-sort.popover-select label>*,.type-toggle>span,.with-confirmation .type-delete,a.type-create,button.type-cancel,button.type-submit,button[type=reset],button[type=submit],header .actions button[type=button]:not(.copy-btn),main .type-password>span,main .type-select>span,main .type-text>span,span.label{font-weight:var(--typo-weight-semibold)}.discovery-chain .route-card header:not(.short) dd,.discovery-chain .route-card section dt,.discovery-chain .splitter-card>header{font-weight:var(--typo-weight-bold)}.app-view h1 em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>strong,.consul-auth-method-type,.consul-external-source,.consul-health-check-list .health-check-output dd em,.consul-intention-list td strong,.consul-intention-list td.destination em,.consul-intention-list td.source em,.consul-intention-permission-list strong,.consul-intention-search-bar li button span,.consul-kind,.consul-server-card .health-status+dd,.consul-source,.consul-transparent-proxy,.discovery-chain .route-card header dt,.discovery-chain .route-card>header ul li,.empty-state header :nth-child(2),.hashicorp-consul nav .dcs li.is-local span,.hashicorp-consul nav .dcs li.is-primary span,.leader,.modal-dialog [role=document] .type-password>strong,.modal-dialog [role=document] .type-select>strong,.modal-dialog [role=document] .type-text>strong,.modal-dialog [role=document] [role=radiogroup] label>strong,.modal-dialog [role=document] label a[rel*=help],.modal-dialog [role=document] table td:first-child em,.oidc-select label>strong,.search-bar-status li:not(.remove-all),.topology-metrics-source-type,.type-toggle>strong,html[data-route^="dc.acls.index"] main td strong,main .type-password>strong,main .type-select>strong,main .type-text>strong,main label a[rel*=help],main table td:first-child em,section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl,section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em,span.policy-node-identity,span.policy-service-identity{font-weight:var(--typo-weight-normal)}.app-view h1 em,.app-view>div form:not(.filter-bar) [role=radiogroup] label>em,.consul-intention-list td.destination em,.consul-intention-list td.source em,.modal-dialog [role=document] .type-password>em,.modal-dialog [role=document] .type-select>em,.modal-dialog [role=document] .type-text>em,.modal-dialog [role=document] [role=radiogroup] label>em,.modal-dialog [role=document] form button+em,.modal-dialog [role=document] table td:first-child em,.oidc-select label>em,.type-toggle>em,main .type-password>em,main .type-select>em,main .type-text>em,main form button+em,main table td:first-child em{font-style:normal}.consul-exposed-path-list>ul>li>.header,.consul-lock-session-list ul>li:not(:first-child)>.header,.consul-upstream-instance-list li>.header,.list-collection>ul>li:not(:first-child)>.header{font-size:var(--typo-size-450);font-weight:var(--typo-weight-medium)}.consul-exposed-path-list>ul>li>.header :not(button),.consul-lock-session-list ul>li:not(:first-child)>.header :not(button),.consul-upstream-instance-list li>.header :not(button),.list-collection>ul>li:not(:first-child)>.header :not(button){font-size:inherit;font-weight:inherit}.app-view h1 em{font-size:var(--typo-size-500)}@media (max-width:420px) and (-webkit-min-device-pixel-ratio:0){input{font-size:16px!important}}#wrapper{box-sizing:content-box}#wrapper>footer>*,.modal-dialog>*,main>*{box-sizing:border-box}html[data-route$=create] main,html[data-route$=edit] main{max-width:1260px}fieldset [role=group]{display:flex;flex-wrap:wrap;flex-direction:row}.outlet[data-state=loading],html.ember-loading .view-loader,html:not(.has-nspaces) [class*=nspace-],html:not(.has-partitions) [class*=partition-],html[data-state=idle] .view-loader{display:none}[role=group] fieldset{width:50%}[role=group] fieldset:not(:first-of-type){padding-left:20px;border-left:1px solid;border-left:rgb(var(--tone-gray-500))}[role=group] fieldset:not(:last-of-type){padding-right:20px}.app-view{margin-top:50px}@media (max-width:849px){html:not(.with-breadcrumbs) .app-view{margin-top:10px}}html body>.brand-loader{transition-property:transform,opacity;transform:translate(0,0);opacity:1}html[data-state]:not(.ember-loading) body>.brand-loader{opacity:0}@media (min-width:900px){html[data-state] body>.brand-loader{transform:translate(calc(var(--chrome-width)/ 2),0)}}html[data-route$=create] .app-view>header+div>:first-child,html[data-route$=edit] .app-view>header+div>:first-child{margin-top:1.8em}.app-view>div .container,.app-view>div .tab-section .consul-health-check-list,.app-view>div .tab-section>.search-bar+p,.app-view>div .tab-section>:first-child:not(.filter-bar):not(table){margin-top:1.25em}.consul-upstream-instance-list,html[data-route^="dc.nodes.show.sessions"] .consul-lock-session-list{margin-top:0!important}.consul-auth-method-list ul,.consul-node-list ul,.consul-nspace-list ul,.consul-policy-list ul,.consul-role-list ul,.consul-service-instance-list ul,.consul-token-list ul,html[data-route="dc.services.index"] .consul-service-list ul,html[data-route^="dc.nodes.show.sessions"] .consul-lock-session-list ul{border-top-width:0!important}.notice+.consul-token-list ul{border-top-width:1px!important}#wrapper{padding-left:25px;padding-right:25px;display:flex;min-height:100vh;flex-direction:column}main{flex:1}html:not([data-route$=index]):not([data-route$=instances]) main{margin-bottom:2em}@media (max-width:849px){.actions button.copy-btn{margin-top:-56px;padding:0}}.modal-dialog [role=document] p:not(:last-child),main p:not(:last-child){margin-bottom:1em}.modal-dialog [role=document] form+div .with-confirmation,.modal-dialog [role=document] form:not(.filter-bar),main form+div .with-confirmation,main form:not(.filter-bar){margin-bottom:2em}@media (max-width:420px){main form [type=reset]{float:right;margin-right:0!important}}html[data-route^="dc.services.show"] .app-view .actions .external-dashboard{position:absolute;top:50px;right:0}html[data-route^="dc.services.instance"] .app-view>header dl{float:left;margin-top:19px;margin-bottom:23px;margin-right:50px}html[data-route^="dc.services.instance"] .app-view>header dt{font-weight:var(--typo-weight-bold)}html[data-route^="dc.services.instance"] .tab-nav{border-top:var(--decor-border-100)}html[data-route^="dc.services.instance"] .tab-section section:not(:last-child){border-bottom:var(--decor-border-100);padding-bottom:24px}html[data-route^="dc.services.instance"] .tab-nav,html[data-route^="dc.services.instance"] .tab-section section:not(:last-child){border-color:rgb(var(--tone-gray-200))}html[data-route^="dc.services.instance.metadata"] .tab-section section h2{margin:24px 0 12px}html[data-route^="dc.kv"] .type-toggle{float:right;margin-bottom:0!important}html[data-route^="dc.kv.edit"] h2{border-bottom:var(--decor-border-200);border-color:rgb(var(--tone-gray-200));padding-bottom:.2em;margin-bottom:.5em}html[data-route^="dc.acls.index"] main td strong{margin-right:3px}@media (max-width:420px){html[data-route^="dc.acls.create"] main header .actions,html[data-route^="dc.acls.edit"] main header .actions{float:none;display:flex;justify-content:space-between;margin-bottom:1em}html[data-route^="dc.acls.create"] main header .actions .with-feedback,html[data-route^="dc.acls.edit"] main header .actions .with-feedback{position:absolute;right:0}html[data-route^="dc.acls.create"] main header .actions .with-confirmation,html[data-route^="dc.acls.edit"] main header .actions .with-confirmation{margin-top:0}}html[data-route^="dc.intentions.edit"] .definition-table{margin-bottom:1em}section[data-route="dc.show.serverstatus"] .server-failure-tolerance{box-shadow:var(--decor-elevation-000);padding:var(--padding-y) var(--padding-x);max-width:770px;display:flex;flex-wrap:wrap}section[data-route="dc.show.serverstatus"] .server-failure-tolerance>header{width:100%;padding-bottom:.5rem;margin-bottom:1rem;border-bottom:var(--decor-border-100);border-color:rgb(var(--tone-border))}section[data-route="dc.show.serverstatus"] .server-failure-tolerance>header a{float:right;margin-top:4px;font-weight:var(--typo-weight-semibold)}section[data-route="dc.show.serverstatus"] .server-failure-tolerance header em{font-size:.812rem;background-color:rgb(var(--tone-gray-200));text-transform:uppercase;font-style:normal}section[data-route="dc.show.serverstatus"] .server-failure-tolerance>section{width:50%}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dl,section[data-route="dc.show.serverstatus"] .server-failure-tolerance>section{display:flex;flex-direction:column}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dl{flex-grow:1;justify-content:space-between}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dl.warning dd::before{--icon-name:icon-alert-circle;--icon-size:icon-800;--icon-color:rgb(var(--tone-orange-400));content:"";margin-right:.5rem}section[data-route="dc.show.serverstatus"] .server-failure-tolerance section:first-of-type dl{padding-right:1.5rem}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dt{color:rgb(var(--tone-gray-700))}section[data-route="dc.show.serverstatus"] .server-failure-tolerance dd{display:flex;align-items:center;font-size:var(--typo-size-250);color:rgb(var(--tone-gray-999))}section[data-route="dc.show.serverstatus"] .server-failure-tolerance header span::before{--icon-name:icon-info;--icon-size:icon-300;--icon-color:rgb(var(--tone-gray-500));vertical-align:unset;content:""}section[data-route="dc.show.serverstatus"] section:not([class*=-tolerance]) h2{margin-top:1.5rem;margin-bottom:1.5rem}section[data-route="dc.show.serverstatus"] section:not([class*=-tolerance]) header{margin-top:18px;margin-bottom:18px}section[data-route="dc.show.serverstatus"] .redundancy-zones section header{display:flow-root}section[data-route="dc.show.serverstatus"] .redundancy-zones section header h3{float:left;margin-right:.5rem}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl:not(.warning){background-color:rgb(var(--tone-gray-100))}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.warning{background-color:rgb(var(--tone-orange-100));color:rgb(var(--tone-orange-800))}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dl.warning::before{--icon-name:icon-alert-circle;--icon-size:icon-000;margin-right:.312rem;content:""}section[data-route="dc.show.serverstatus"] .redundancy-zones section header dt::after{content:":";display:inline-block;vertical-align:revert;background-color:var(--transparent)}section[data-route="dc.show.license"] .validity p{color:rgb(var(--tone-gray-700))}section[data-route="dc.show.license"] .validity dl{font-size:var(--typo-size-400)}section[data-route="dc.show.license"] .validity dl dt::before{content:"";margin-right:.25rem}section[data-route="dc.show.license"] .validity dl .expired::before{--icon-name:icon-x-circle;--icon-color:rgb(var(--red-500))}section[data-route="dc.show.license"] .validity dl .warning::before{--icon-name:icon-alert-circle;--icon-color:rgb(var(--orange-500))}section[data-route="dc.show.license"] .validity dl .valid:not(.warning)::before{--icon-name:icon-check-circle;--icon-color:rgb(var(--green-500))}section[data-route="dc.show.license"] aside{box-shadow:var(--decor-elevation-000);padding:var(--padding-y) var(--padding-x);width:40%;min-width:413px;margin-top:1rem}section[data-route="dc.show.license"] aside header{margin-bottom:1rem}section[data-route="dc.show.license"] aside li{margin-bottom:.25rem}section[data-route="dc.show.license"] aside a::before{--icon-name:icon-docs-link;content:"";margin-right:.375rem}.prefers-reduced-motion{--icon-loading:icon-loading}@media (prefers-reduced-motion){:root{--icon-loading:icon-loading}}.consul-external-source.vault::before,.popover-select .vault button::before{--icon-name:icon-vault;content:""}.consul-external-source.aws::before,.popover-select .aws button::before{--icon-name:var(--icon-aws);content:""}.consul-external-source.aws::before,.consul-external-source.vault::before{--icon-size:icon-200}.consul-intention-fieldsets .value->:last-child::before,.consul-intention-fieldsets .value-allow>:last-child::before,.consul-intention-fieldsets .value-deny>:last-child::before{--icon-size:icon-500;--icon-resolution:.5}.consul-intention-fieldsets .value-allow>:last-child::before,.consul-intention-list td.intent-allow strong::before,.consul-intention-permission-list .intent-allow::before,.consul-intention-search-bar .value-allow span::before{--icon-name:icon-arrow-right;--icon-color:rgb(var(--tone-green-500))}.consul-intention-fieldsets .value-deny>:last-child::before,.consul-intention-list td.intent-deny strong::before,.consul-intention-permission-list .intent-deny::before,.consul-intention-search-bar .value-deny span::before{--icon-name:icon-skip;--icon-color:rgb(var(--tone-red-500))}.consul-intention-fieldsets .value->:last-child::before,.consul-intention-list td.intent- strong::before,.consul-intention-search-bar .value- span::before{--icon-name:icon-layers}*{border-width:0}.animatable.tab-nav ul::after,.app-view>div form button[type=button].type-delete,.app-view>div form button[type=button].type-delete:disabled,.app-view>div form button[type=button].type-delete:focus,.app-view>div form button[type=button].type-delete:hover:active,.app-view>div form button[type=button].type-delete:hover:not(:disabled):not(:active),.consul-auth-method-type,.consul-external-source,.consul-intention-action-warn-modal button.dangerous,.consul-intention-action-warn-modal button.dangerous:disabled,.consul-intention-action-warn-modal button.dangerous:focus,.consul-intention-action-warn-modal button.dangerous:hover:active,.consul-intention-action-warn-modal button.dangerous:hover:not(:disabled):not(:active),.consul-intention-list td.intent- strong,.consul-intention-permission-form button.type-submit,.consul-intention-permission-form button.type-submit:disabled,.consul-intention-permission-form button.type-submit:focus:not(:disabled),.consul-intention-permission-form button.type-submit:hover:not(:disabled),.consul-intention-search-bar .value- span,.consul-kind,.consul-source,.consul-transparent-proxy,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:focus:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:hover:first-child,.discovery-chain .route-card>header ul li,.empty-state div>button,.empty-state div>button:disabled,.empty-state div>button:focus,.empty-state div>button:hover:active,.empty-state div>button:hover:not(:disabled):not(:active),.informed-action>ul>.dangerous>*,.informed-action>ul>.dangerous>:focus,.informed-action>ul>.dangerous>:hover,.leader,.menu-panel>ul>li.dangerous>:first-child,.menu-panel>ul>li.dangerous>:focus:first-child,.menu-panel>ul>li.dangerous>:hover:first-child,.modal-dialog .type-delete,.modal-dialog .type-delete:disabled,.modal-dialog .type-delete:focus,.modal-dialog .type-delete:hover:active,.modal-dialog .type-delete:hover:not(:disabled):not(:active),.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.oidc-select button:disabled:not(.reset),.oidc-select button:focus:not(.reset),.oidc-select button:hover:active:not(.reset),.oidc-select button:hover:not(:disabled):not(:active):not(.reset),.oidc-select button:not(.reset),.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.tab-nav .selected>*,.topology-metrics-source-type,.with-confirmation .type-delete,.with-confirmation .type-delete:disabled,.with-confirmation .type-delete:focus,.with-confirmation .type-delete:hover:active,.with-confirmation .type-delete:hover:not(:disabled):not(:active),a.type-create,a.type-create:disabled,a.type-create:focus,a.type-create:hover:active,a.type-create:hover:not(:disabled):not(:active),button.type-cancel,button.type-cancel:active,button.type-cancel:focus,button.type-cancel:hover:not(:disabled):not(:active),button.type-submit,button.type-submit:disabled,button.type-submit:focus,button.type-submit:hover:active,button.type-submit:hover:not(:disabled):not(:active),button[type=reset],button[type=reset]:active,button[type=reset]:focus,button[type=reset]:hover:not(:disabled):not(:active),button[type=submit],button[type=submit]:disabled,button[type=submit]:focus,button[type=submit]:hover:active,button[type=submit]:hover:not(:disabled):not(:active),header .actions button[type=button]:active:not(.copy-btn),header .actions button[type=button]:focus:not(.copy-btn),header .actions button[type=button]:hover:not(:disabled):not(:active):not(.copy-btn),header .actions button[type=button]:not(.copy-btn),html[data-route^="dc.acls.index"] main td strong,span.policy-node-identity,span.policy-service-identity,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child{border-style:solid}button.type-cancel:focus,button.type-cancel:hover:not(:disabled):not(:active),button[type=reset]:focus,button[type=reset]:hover:not(:disabled):not(:active),header .actions button[type=button]:focus:not(.copy-btn),header .actions button[type=button]:hover:not(:disabled):not(:active):not(.copy-btn){background-color:rgb(var(--tone-gray-000));border-color:rgb(var(--tone-gray-700));color:rgb(var(--tone-gray-800))}button.type-cancel,button[type=reset],header .actions button[type=button]:not(.copy-btn){background-color:rgb(var(--tone-gray-050));border-color:rgb(var(--tone-gray-300));color:rgb(var(--tone-gray-800))}.consul-auth-method-type,.consul-external-source,.consul-kind,.consul-source,.consul-transparent-proxy,.leader,.topology-metrics-source-type,span.policy-node-identity,span.policy-service-identity{background-color:rgb(var(--tone-gray-100));border-color:rgb(var(--tone-gray-500));color:rgb(var(--tone-gray-500))}button.type-cancel:active,button[type=reset]:active,header .actions button[type=button]:active:not(.copy-btn){background-color:rgb(var(--tone-gray-200));border-color:rgb(var(--tone-gray-700));color:rgb(var(--tone-gray-800))}.modal-dialog [role=document]>footer,.modal-dialog [role=document]>header{background-color:rgb(var(--tone-gray-050));border-color:rgb(var(--tone-gray-300));color:rgb(var(--tone-gray-900))}.consul-intention-list td.intent- strong,.consul-intention-search-bar .value- span,.discovery-chain .route-card>header ul li,html[data-route^="dc.acls.index"] main td strong{background-color:rgb(var(--tone-gray-100));border-color:rgb(var(--tone-gray-300));color:rgb(var(--tone-gray-900))}.consul-intention-permission-form button.type-submit:disabled{background-color:rgb(var(--tone-gray-000));border-color:rgb(var(--tone-blue-300));color:rgb(var(--tone-blue-300))}.animatable.tab-nav ul::after,.consul-intention-permission-form button.type-submit,.tab-nav .selected>*{background-color:rgb(var(--tone-gray-000));border-color:rgb(var(--tone-blue-500));color:rgb(var(--tone-blue-500))}.consul-intention-permission-form button.type-submit:focus:not(:disabled),.consul-intention-permission-form button.type-submit:hover:not(:disabled){background-color:rgb(var(--tone-blue-050));border-color:rgb(var(--tone-blue-500));color:rgb(var(--tone-blue-800))}.empty-state div>button:disabled,.oidc-select button:disabled:not(.reset),a.type-create:disabled,button.type-submit:disabled,button[type=submit]:disabled{background-color:rgb(var(--tone-blue-200));border-color:rgb(var(--tone-gray-400));color:rgb(var(--tone-blue-050))}.empty-state div>button:focus,.empty-state div>button:hover:not(:disabled):not(:active),.oidc-select button:focus:not(.reset),.oidc-select button:hover:not(:disabled):not(:active):not(.reset),a.type-create:focus,a.type-create:hover:not(:disabled):not(:active),button.type-submit:focus,button.type-submit:hover:not(:disabled):not(:active),button[type=submit]:focus,button[type=submit]:hover:not(:disabled):not(:active){background-color:rgb(var(--tone-blue-400));border-color:rgb(var(--tone-blue-800));color:rgb(var(--tone-gray-000))}.empty-state div>button,.oidc-select button:not(.reset),a.type-create,button.type-submit,button[type=submit]{background-color:rgb(var(--tone-blue-500));border-color:rgb(var(--tone-blue-800));color:rgb(var(--tone-gray-000))}.empty-state div>button:hover:active,.oidc-select button:hover:active:not(.reset),a.type-create:hover:active,button.type-submit:hover:active,button[type=submit]:hover:active{background-color:rgb(var(--tone-blue-700));border-color:rgb(var(--tone-blue-800));color:rgb(var(--tone-gray-000))}.app-view>div form button[type=button].type-delete,.consul-intention-action-warn-modal button.dangerous,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:first-child,.informed-action>ul>.dangerous>*,.menu-panel>ul>li.dangerous>:first-child,.modal-dialog .type-delete,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:first-child,.with-confirmation .type-delete,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:first-child{background-color:var(--transparent);border-color:rgb(var(--tone-red-500));color:rgb(var(--tone-red-500))}.app-view>div form button[type=button].type-delete:disabled,.consul-intention-action-warn-modal button.dangerous:disabled,.modal-dialog .type-delete:disabled,.with-confirmation .type-delete:disabled{background-color:rgb(var(--tone-red-200));border-color:rgb(var(--tone-gray-400));color:rgb(var(--tone-gray-000))}.app-view>div form button[type=button].type-delete:focus,.app-view>div form button[type=button].type-delete:hover:not(:disabled):not(:active),.consul-intention-action-warn-modal button.dangerous:focus,.consul-intention-action-warn-modal button.dangerous:hover:not(:disabled):not(:active),.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:focus:first-child,.disclosure-menu [aria-expanded]~*>ul>li.dangerous>:hover:first-child,.informed-action>ul>.dangerous>:focus,.informed-action>ul>.dangerous>:hover,.menu-panel>ul>li.dangerous>:focus:first-child,.menu-panel>ul>li.dangerous>:hover:first-child,.modal-dialog .type-delete:focus,.modal-dialog .type-delete:hover:not(:disabled):not(:active),.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.more-popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,.popover-menu>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,.with-confirmation .type-delete:focus,.with-confirmation .type-delete:hover:not(:disabled):not(:active),table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.has-actions tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:focus:first-child,table.with-details tr>.actions>[type=checkbox]+label+div>ul>li.dangerous>:hover:first-child{background-color:rgb(var(--tone-red-500));border-color:rgb(var(--tone-red-800));color:rgb(var(--tone-gray-000))}.app-view>div form button[type=button].type-delete:hover:active,.consul-intention-action-warn-modal button.dangerous:hover:active,.modal-dialog .type-delete:hover:active,.with-confirmation .type-delete:hover:active{background-color:rgb(var(--tone-red-700));border-color:rgb(var(--tone-red-800));color:rgb(var(--tone-gray-000))}:root.prefers-color-scheme-dark,:root:not(.prefers-color-scheme-dark),[role=banner],[role=banner] nav:first-of-type,[role=banner] nav:last-of-type{--tone-magenta-000:var(--white);--tone-magenta-050:var(--magenta-050);--tone-magenta-100:var(--magenta-100);--tone-magenta-150:var(--magenta-150);--tone-magenta-200:var(--magenta-200);--tone-magenta-300:var(--magenta-300);--tone-magenta-400:var(--magenta-400);--tone-magenta-500:var(--magenta-500);--tone-magenta-600:var(--magenta-600);--tone-magenta-700:var(--magenta-700);--tone-magenta-800:var(--magenta-800);--tone-magenta-850:var(--magenta-850);--tone-magenta-900:var(--magenta-900);--tone-magenta-950:var(--magenta-950);--tone-magenta-999:var(--black);--tone-strawberry-000:var(--white);--tone-strawberry-050:var(--strawberry-050);--tone-strawberry-100:var(--strawberry-100);--tone-strawberry-150:var(--strawberry-150);--tone-strawberry-200:var(--strawberry-200);--tone-strawberry-300:var(--strawberry-300);--tone-strawberry-400:var(--strawberry-400);--tone-strawberry-500:var(--strawberry-500);--tone-strawberry-600:var(--strawberry-600);--tone-strawberry-700:var(--strawberry-700);--tone-strawberry-800:var(--strawberry-800);--tone-strawberry-850:var(--strawberry-850);--tone-strawberry-900:var(--strawberry-900);--tone-strawberry-950:var(--strawberry-950);--tone-strawberry-999:var(--black);--tone-lemon-000:var(--white);--tone-lemon-050:var(--lemon-050);--tone-lemon-100:var(--lemon-100);--tone-lemon-150:var(--lemon-150);--tone-lemon-200:var(--lemon-200);--tone-lemon-300:var(--lemon-300);--tone-lemon-400:var(--lemon-400);--tone-lemon-500:var(--lemon-500);--tone-lemon-600:var(--lemon-600);--tone-lemon-700:var(--lemon-700);--tone-lemon-800:var(--lemon-800);--tone-lemon-850:var(--lemon-850);--tone-lemon-900:var(--lemon-900);--tone-lemon-950:var(--lemon-950);--tone-lemon-999:var(--black)}[role=banner] nav:last-of-type .dangerous button:focus,[role=banner] nav:last-of-type .dangerous button:hover{color:rgb(var(--white))!important}[role=banner] nav:first-of-type .menu-panel a:focus,[role=banner] nav:first-of-type .menu-panel a:hover{background-color:rgb(var(--tone-blue-500))} \ No newline at end of file diff --git a/agent/uiserver/dist/assets/consul-ui-e58b85f0a8e1fb15ded242e5b25b171c.js b/agent/uiserver/dist/assets/consul-ui-e58b85f0a8e1fb15ded242e5b25b171c.js deleted file mode 100644 index ad0150bba14d9..0000000000000 --- a/agent/uiserver/dist/assets/consul-ui-e58b85f0a8e1fb15ded242e5b25b171c.js +++ /dev/null @@ -1,3507 +0,0 @@ -"use strict" -define("consul-ui/abilities/acl",["exports","consul-ui/abilities/base"],(function(e,t){var n,r,a -function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(n=Ember.inject.service("env"),r=class extends t.default{constructor(...e){var t,n,r,s -super(...e),t=this,n="env",s=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(s):void 0}),l(this,"resource","acl"),l(this,"segmented",!1)}get canAccess(){return!this.env.var("CONSUL_ACLS_ENABLED")||this.canRead}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canDuplicate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canWrite}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&"anonymous"!==this.item.ID&&super.canWrite}get canUse(){return this.env.var("CONSUL_ACLS_ENABLED")}},i=r.prototype,o="env",u=[n],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a=m,r) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/abilities/auth-method",["exports","consul-ui/abilities/base"],(function(e,t){var n,r,a -function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(n=Ember.inject.service("env"),r=class extends t.default{constructor(...e){var t,n,r,s -super(...e),t=this,n="env",s=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(s):void 0}),l(this,"resource","acl"),l(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canDelete}get canUse(){return this.env.var("CONSUL_SSO_ENABLED")}},i=r.prototype,o="env",u=[n],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a=m,r) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/abilities/base",["exports","ember-can"],(function(e,t){var n,r,a -function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.ACCESS_LIST=e.ACCESS_WRITE=e.ACCESS_READ=void 0 -e.ACCESS_READ="read" -e.ACCESS_WRITE="write" -e.ACCESS_LIST="list" -let s=(n=Ember.inject.service("repository/permission"),r=class extends t.Ability{constructor(...e){var t,n,r,s -super(...e),t=this,n="permissions",s=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(s):void 0}),l(this,"resource",""),l(this,"segmented",!0)}generate(e){return this.permissions.generate(this.resource,e)}generateForSegment(e){return this.segmented?[this.permissions.generate(this.resource,"read",e),this.permissions.generate(this.resource,"write",e)]:[]}get isLinkable(){return!0}get isNew(){return this.item.isNew}get isPristine(){return this.item.isPristine}get canRead(){if(void 0!==this.item){const e=(Ember.get(this,"item.Resources")||[]).find(e=>"read"===e.Access) -if(e)return e.Allow}return this.permissions.has(this.generate("read"))}get canList(){if(void 0!==this.item){const e=(Ember.get(this,"item.Resources")||[]).find(e=>"list"===e.Access) -if(e)return e.Allow}return this.permissions.has(this.generate("list"))}get canWrite(){if(void 0!==this.item){const e=(Ember.get(this,"item.Resources")||[]).find(e=>"write"===e.Access) -if(e)return e.Allow}return this.permissions.has(this.generate("write"))}get canCreate(){return this.canWrite}get canDelete(){return this.canWrite}get canUpdate(){return this.canWrite}},i=r.prototype,o="permissions",u=[n],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a=m,r) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/abilities/hcp",["exports","consul-ui/abilities/base"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let l=(n=Ember.inject.service("env"),r=class extends t.default{constructor(...e){var t,n,r,l -super(...e),t=this,n="env",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}get is(){return!1}},s=r.prototype,i="env",o=[n],u={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=o.slice().reverse().reduce((function(e,t){return t(s,i,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,i,d),d=null),a=d,r) -var s,i,o,u,c,d -e.default=l})),define("consul-ui/abilities/intention",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="intention",(n="resource")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}get canWrite(){return super.canWrite&&(void 0===this.item||!this.canViewCRD)}get canViewCRD(){return void 0!==this.item&&this.item.IsManagedByCRD}}e.default=n})),define("consul-ui/abilities/kv",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="key",(n="resource")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}generateForSegment(e){let n=super.generateForSegment(e) -return e.endsWith("/")&&(n=n.concat(this.permissions.generate(this.resource,t.ACCESS_LIST,e))),n}get canRead(){return!0}get canList(){return!0}get canWrite(){return!0}}e.default=n})),define("consul-ui/abilities/license",["exports","consul-ui/abilities/base"],(function(e,t){var n,r,a -function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(n=Ember.inject.service("env"),r=class extends t.default{constructor(...e){var t,n,r,s -super(...e),l(this,"resource","operator"),l(this,"segmented",!1),t=this,n="env",s=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(s):void 0})}get canRead(){return this.env.var("CONSUL_NSPACES_ENABLED")&&super.canRead}},i=r.prototype,o="env",u=[n],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a=m,r) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/abilities/node",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="node",(n="resource")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}}e.default=n})),define("consul-ui/abilities/nspace",["exports","consul-ui/abilities/base"],(function(e,t){var n,r,a -function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(n=Ember.inject.service("env"),r=class extends t.default{constructor(...e){var t,n,r,s -super(...e),t=this,n="env",s=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(s):void 0}),l(this,"resource","operator"),l(this,"segmented",!1)}get isLinkable(){return!this.item.DeletedAt}get canManage(){return this.canCreate}get canDelete(){return"default"!==this.item.Name&&super.canDelete}get canChoose(){return this.canUse}get canUse(){return this.env.var("CONSUL_NSPACES_ENABLED")}},i=r.prototype,o="env",u=[n],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a=m,r) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/abilities/overview",["exports","consul-ui/abilities/base"],(function(e,t){function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{constructor(...e){super(...e),n(this,"resource","operator"),n(this,"segmented",!1)}get canAccess(){return this.canRead}}e.default=r})),define("consul-ui/abilities/partition",["exports","consul-ui/abilities/base"],(function(e,t){var n,r,a,l,s -function i(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(n=Ember.inject.service("env"),r=Ember.inject.service("repository/dc"),a=class extends t.default{constructor(...e){super(...e),i(this,"env",l,this),i(this,"dcs",s,this),o(this,"resource","operator"),o(this,"segmented",!1)}get isLinkable(){return!this.item.DeletedAt}get canManage(){return this.canWrite}get canCreate(){return!(this.dcs.peekAll().length>1)&&super.canCreate}get canDelete(){return"default"!==this.item.Name&&super.canDelete}get canChoose(){return void 0!==this.dc&&(this.canUse&&this.dc.Primary)}get canUse(){return this.env.var("CONSUL_PARTITIONS_ENABLED")}},l=u(a.prototype,"env",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=u(a.prototype,"dcs",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) -e.default=c})),define("consul-ui/abilities/permission",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{get canRead(){return this.permissions.permissions.length>0}}e.default=n})),define("consul-ui/abilities/policy",["exports","consul-ui/abilities/base","consul-ui/helpers/policy/typeof"],(function(e,t,n){var r,a,l -function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(r=Ember.inject.service("env"),a=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="env",a=this,(r=l)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0}),s(this,"resource","acl"),s(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canWrite(){return this.env.var("CONSUL_ACLS_ENABLED")&&(void 0===this.item||"policy-management"!==(0,n.typeOf)([this.item]))&&super.canWrite}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&(void 0===this.item||"policy-management"!==(0,n.typeOf)([this.item]))&&super.canDelete}},o=a.prototype,u="env",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(d).forEach((function(e){p[e]=d[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=c.slice().reverse().reduce((function(e,t){return t(o,u,e)||e}),p),m&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(m):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(o,u,p),p=null),l=p,a) -var o,u,c,d,m,p -e.default=i})),define("consul-ui/abilities/role",["exports","consul-ui/abilities/base"],(function(e,t){var n,r,a -function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(n=Ember.inject.service("env"),r=class extends t.default{constructor(...e){var t,n,r,s -super(...e),t=this,n="env",s=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(s):void 0}),l(this,"resource","acl"),l(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canDelete}},i=r.prototype,o="env",u=[n],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a=m,r) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/abilities/service-instance",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="service",(n="resource")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}generateForSegment(e){return super.generateForSegment(...arguments).concat([this.permissions.generate("intention",t.ACCESS_READ,e),this.permissions.generate("intention",t.ACCESS_WRITE,e)])}}e.default=n})),define("consul-ui/abilities/session",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="session",(n="resource")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}}e.default=n})),define("consul-ui/abilities/token",["exports","consul-ui/abilities/base","consul-ui/helpers/token/is-legacy","consul-ui/helpers/token/is-anonymous"],(function(e,t,n,r){var a,l,s -function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(a=Ember.inject.service("env"),l=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="env",a=this,(r=s)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0}),i(this,"resource","acl"),i(this,"segmented",!1)}get canRead(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canRead}get canCreate(){return this.env.var("CONSUL_ACLS_ENABLED")&&super.canCreate}get canDelete(){return this.env.var("CONSUL_ACLS_ENABLED")&&!(0,r.isAnonymous)([this.item])&&this.item.AccessorID!==this.token.AccessorID&&super.canDelete}get canDuplicate(){return this.env.var("CONSUL_ACLS_ENABLED")&&!(0,n.isLegacy)([this.item])&&super.canWrite}},u=l.prototype,c="env",d=[a],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(m).forEach((function(e){f[e]=m[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=d.slice().reverse().reduce((function(e,t){return t(u,c,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,c,f),f=null),s=f,l) -var u,c,d,m,p,f -e.default=o})),define("consul-ui/abilities/upstream",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="upstream",(n="resource")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}get isLinkable(){return this.item.InstanceCount>0}}e.default=n})),define("consul-ui/abilities/zervice",["exports","consul-ui/abilities/base"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="service",(n="resource")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}get isLinkable(){return this.item.InstanceCount>0}get canReadIntention(){if(void 0===this.item||void 0===this.item.Resources)return!1 -return void 0!==this.item.Resources.find(e=>"intention"===e.Resource&&"read"===e.Access&&!0===e.Allow)}get canWriteIntention(){if(void 0===this.item||void 0===this.item.Resources)return!1 -return void 0!==this.item.Resources.find(e=>"intention"===e.Resource&&"write"===e.Access&&!0===e.Allow)}get canCreateIntention(){return this.canWriteIntention}get canUpdateIntention(){return this.canWriteIntention}}e.default=n})),define("consul-ui/abilities/zone",["exports","consul-ui/abilities/base"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let l=(n=Ember.inject.service("env"),r=class extends t.default{constructor(...e){var t,n,r,l -super(...e),t=this,n="env",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}get canRead(){return this.env.var("CONSUL_NSPACES_ENABLED")}},s=r.prototype,i="env",o=[n],u={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=o.slice().reverse().reduce((function(e,t){return t(s,i,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,i,d),d=null),a=d,r) -var s,i,o,u,c,d -e.default=l})),define("consul-ui/adapters/-json-api",["exports","@ember-data/adapter/json-api"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/adapters/application",["exports","consul-ui/adapters/http"],(function(e,t){var n,r,a,l,s -function i(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.NSPACE_QUERY_PARAM=e.DATACENTER_QUERY_PARAM=void 0 -e.DATACENTER_QUERY_PARAM="dc" -e.NSPACE_QUERY_PARAM="ns" -let u=(n=Ember.inject.service("client/http"),r=Ember.inject.service("env"),a=class extends t.default{constructor(...e){super(...e),i(this,"client",l,this),i(this,"env",s,this)}formatNspace(e){if(this.env.var("CONSUL_NSPACES_ENABLED"))return""!==e?{ns:e}:void 0}formatDatacenter(e){return{dc:e}}},l=o(a.prototype,"client",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=o(a.prototype,"env",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) -e.default=u})),define("consul-ui/adapters/auth-method",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQuery(e,{dc:t,ns:n,partition:r,index:a,id:l}){return e` - GET /v1/acl/auth-methods?${{dc:t}} - - ${{ns:n,partition:r,index:a}} - `}requestForQueryRecord(e,{dc:t,ns:n,partition:r,index:a,id:l}){if(void 0===l)throw new Error("You must specify an id") -return e` - GET /v1/acl/auth-method/${l}?${{dc:t}} - - ${{ns:n,partition:r,index:a}} - `}}e.default=n})),define("consul-ui/adapters/binding-rule",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQuery(e,{dc:t,ns:n,partition:r,authmethod:a,index:l}){return e` - GET /v1/acl/binding-rules?${{dc:t,authmethod:a}} - - ${{ns:n,partition:r,index:l}} - `}}e.default=n})),define("consul-ui/adapters/coordinate",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQuery(e,{dc:t,partition:n,index:r,uri:a}){return e` - GET /v1/coordinate/nodes?${{dc:t}} - X-Request-ID: ${a} - - ${{partition:n,index:r}} - `}}e.default=n})),define("consul-ui/adapters/discovery-chain",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQueryRecord(e,{dc:t,ns:n,partition:r,index:a,id:l,uri:s}){if(void 0===l)throw new Error("You must specify an id") -return e` - GET /v1/discovery-chain/${l}?${{dc:t}} - X-Request-ID: ${s} - - ${{ns:n,partition:r,index:a}} - `}}e.default=n})),define("consul-ui/adapters/http",["exports","@ember-data/adapter","@ember-data/adapter/error"],(function(e,t,n){var r,a,l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const s=function(e,t,n,r={}){return e.rpc((function(e,...t){return e["requestFor"+n](...t)}),(function(e,...t){return e["respondFor"+n](...t)}),r,t)},i=function(e,t,n,r){return e.rpc((function(e,...t){return e["requestFor"+n](...t)}),(function(e,...t){return e["respondFor"+n](...t)}),r,t)} -let o=(r=Ember.inject.service("client/http"),a=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="client",a=this,(r=l)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}rpc(e,t,n,r){const a=this.client,l=this.store,s=this -let i,o -const u=l.serializerFor(r),c=l.modelFor(r) -return"function"==typeof n.attributes?(i=n.attributes(),o=u.serialize(n,{})):(i=n,o=i),a.request((function(t){return e(s,t,o,i,c)})).catch((function(e){return s.error(e)})).then((function(e){return t(u,e,o,i,c)}))}error(e){if(e instanceof TypeError)throw e -const t=[{status:""+e.statusCode,title:"The backend responded with an error",detail:e.message}] -let r -try{switch(e.statusCode){case 0:r=new n.AbortError,r.errors[0].status="0" -break -case 401:r=new n.UnauthorizedError(t,"") -break -case 403:r=new n.ForbiddenError(t,"") -break -case 404:r=new n.NotFoundError(t,"") -break -case 408:r=new n.TimeoutError -break -case 409:r=new n.ConflictError(t,"") -break -case 422:r=new n.InvalidError(t) -break -default:r=e.statusCode>=500?new n.ServerError(t,""):new n.default(t,"")}}catch(a){r=a}throw r}query(e,t,n){return s(this,t.modelName,"Query",n)}queryRecord(e,t,n){return s(this,t.modelName,"QueryRecord",n)}findAll(e,t){return s(this,t.modelName,"FindAll")}createRecord(e,t,n){return i(this,t.modelName,"CreateRecord",n)}updateRecord(e,t,n){return i(this,t.modelName,"UpdateRecord",n)}deleteRecord(e,t,n){return i(this,t.modelName,"DeleteRecord",n)}},u=a.prototype,c="client",d=[r],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(m).forEach((function(e){f[e]=m[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=d.slice().reverse().reduce((function(e,t){return t(u,c,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,c,f),f=null),l=f,a) -var u,c,d,m,p,f -e.default=o})),define("consul-ui/adapters/intention",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQuery(e,{dc:t,ns:n,partition:r,filter:a,index:l,uri:s}){return e` - GET /v1/connect/intentions?${{dc:t}} - X-Request-ID: ${s}${void 0!==a?"\n X-Range: "+a:""} - - ${{partition:r,ns:"*",index:l,filter:a}} - `}requestForQueryRecord(e,{dc:t,index:n,id:r}){if(void 0===r)throw new Error("You must specify an id") -const[a,l,s,i,o,u]=r.split(":").map(decodeURIComponent) -return e` - GET /v1/connect/intentions/exact?${{source:`${a}/${l}/${s}`,destination:`${i}/${o}/${u}`,dc:t}} - Cache-Control: no-store - - ${{index:n}} - `}requestForCreateRecord(e,t,n){const r={SourceName:t.SourceName,DestinationName:t.DestinationName,SourceNS:t.SourceNS,DestinationNS:t.DestinationNS,SourcePartition:t.SourcePartition,DestinationPartition:t.DestinationPartition,SourceType:t.SourceType,Meta:t.Meta,Description:t.Description} -return Ember.get(t,"Action.length")?r.Action=t.Action:t.Permissions&&(r.Permissions=t.Permissions),e` - PUT /v1/connect/intentions/exact?${{source:`${n.SourcePartition}/${n.SourceNS}/${n.SourceName}`,destination:`${n.DestinationPartition}/${n.DestinationNS}/${n.DestinationName}`,dc:n.Datacenter}} - - ${r} - `}requestForUpdateRecord(e,t,n){return delete t.DestinationName,delete t.DestinationNS,delete t.DestinationPartition,this.requestForCreateRecord(...arguments)}requestForDeleteRecord(e,t,n){return e` - DELETE /v1/connect/intentions/exact?${{source:`${n.SourcePartition}/${n.SourceNS}/${n.SourceName}`,destination:`${n.DestinationPartition}/${n.DestinationNS}/${n.DestinationName}`,dc:n.Datacenter}} - `}}e.default=n})),define("consul-ui/adapters/kv",["exports","consul-ui/adapters/application","consul-ui/utils/isFolder","consul-ui/utils/keyToArray","consul-ui/models/kv"],(function(e,t,n,r,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{async requestForQuery(e,{dc:t,ns:n,partition:a,index:l,id:s,separator:i}){if(void 0===s)throw new Error("You must specify an id") -const o=await(e` - GET /v1/kv/${(0,r.default)(s)}?${{keys:null,dc:t,separator:i}} - - ${{ns:n,partition:a,index:l}} - `) -return await o(e=>delete e["x-consul-index"]),o}async requestForQueryRecord(e,{dc:t,ns:n,partition:a,index:l,id:s}){if(void 0===s)throw new Error("You must specify an id") -const i=await(e` - GET /v1/kv/${(0,r.default)(s)}?${{dc:t}} - - ${{ns:n,partition:a,index:l}} - `) -return await i(e=>delete e["x-consul-index"]),i}requestForCreateRecord(e,t,n){const l={dc:n.Datacenter,ns:n.Namespace,partition:n.Partition} -return e` - PUT /v1/kv/${(0,r.default)(n[a.SLUG_KEY])}?${l} - Content-Type: text/plain; charset=utf-8 - - ${t} - `}requestForUpdateRecord(e,t,n){const l={dc:n.Datacenter,ns:n.Namespace,partition:n.Partition,flags:n.Flags} -return e` - PUT /v1/kv/${(0,r.default)(n[a.SLUG_KEY])}?${l} - Content-Type: text/plain; charset=utf-8 - - ${t} - `}requestForDeleteRecord(e,t,l){let s;(0,n.default)(l[a.SLUG_KEY])&&(s=null) -const i={dc:l.Datacenter,ns:l.Namespace,partition:l.Partition,recurse:s} -return e` - DELETE /v1/kv/${(0,r.default)(l[a.SLUG_KEY])}?${i} - `}}e.default=l})),define("consul-ui/adapters/node",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQuery(e,{dc:t,ns:n,partition:r,index:a,id:l,uri:s}){return e` - GET /v1/internal/ui/nodes?${{dc:t}} - X-Request-ID: ${s} - - ${{ns:n,partition:r,index:a}} - `}requestForQueryRecord(e,{dc:t,ns:n,partition:r,index:a,id:l,uri:s}){if(void 0===l)throw new Error("You must specify an id") -return e` - GET /v1/internal/ui/node/${l}?${{dc:t}} - X-Request-ID: ${s} - - ${{ns:n,partition:r,index:a}} - `}requestForQueryLeader(e,{dc:t,uri:n}){return e` - GET /v1/status/leader?${{dc:t}} - X-Request-ID: ${n} - Refresh: 30 - `}queryLeader(e,t,n,r){return this.rpc((function(e,t,n,r){return e.requestForQueryLeader(t,n,r)}),(function(e,t,n,r){return e.respondForQueryLeader(t,n,r)}),r,t.modelName)}}e.default=n})) -define("consul-ui/adapters/nspace",["exports","consul-ui/adapters/application","consul-ui/models/nspace"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{requestForQuery(e,{dc:t,partition:n,index:r,uri:a}){return e` - GET /v1/namespaces?${{dc:t}} - X-Request-ID: ${a} - - ${{partition:n,index:r}} - `}requestForQueryRecord(e,{dc:t,partition:n,index:r,id:a}){if(void 0===a)throw new Error("You must specify an name") -return e` - GET /v1/namespace/${a}?${{dc:t}} - - ${{partition:n,index:r}} - `}requestForCreateRecord(e,t,r){return e` - PUT /v1/namespace/${r[n.SLUG_KEY]}?${{dc:r.Datacenter,partition:r.Partition}} - - ${{Name:t.Name,Description:t.Description,ACLs:{PolicyDefaults:t.ACLs.PolicyDefaults.map(e=>({ID:e.ID})),RoleDefaults:t.ACLs.RoleDefaults.map(e=>({ID:e.ID}))}}} - `}requestForUpdateRecord(e,t,r){return e` - PUT /v1/namespace/${r[n.SLUG_KEY]}?${{dc:r.Datacenter,partition:r.Partition}} - - ${{Description:t.Description,ACLs:{PolicyDefaults:t.ACLs.PolicyDefaults.map(e=>({ID:e.ID})),RoleDefaults:t.ACLs.RoleDefaults.map(e=>({ID:e.ID}))}}} - `}requestForDeleteRecord(e,t,r){return e` - DELETE /v1/namespace/${r[n.SLUG_KEY]}?${{dc:r.Datacenter,partition:r.Partition}} - `}}e.default=r})),define("consul-ui/adapters/oidc-provider",["exports","consul-ui/adapters/application"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let l=(n=Ember.inject.service("env"),r=class extends t.default{constructor(...e){var t,n,r,l -super(...e),t=this,n="env",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}requestForQuery(e,{dc:t,ns:n,partition:r,index:a,uri:l}){return e` - GET /v1/internal/ui/oidc-auth-methods?${{dc:t}} - X-Request-ID: ${l} - - ${{ns:n,partition:r,index:a}} - `}requestForQueryRecord(e,{dc:t,ns:n,partition:r,id:a}){if(void 0===a)throw new Error("You must specify an id") -return e` - POST /v1/acl/oidc/auth-url?${{dc:t,ns:n,partition:r}} - Cache-Control: no-store - - ${{AuthMethod:a,RedirectURI:this.env.var("CONSUL_BASE_UI_URL")+"/oidc/callback"}} - `}requestForAuthorize(e,{dc:t,ns:n,partition:r,id:a,code:l,state:s}){if(void 0===a)throw new Error("You must specify an id") -if(void 0===l)throw new Error("You must specify an code") -if(void 0===s)throw new Error("You must specify an state") -return e` - POST /v1/acl/oidc/callback?${{dc:t,ns:n,partition:r}} - Cache-Control: no-store - - ${{AuthMethod:a,Code:l,State:s}} - `}requestForLogout(e,{id:t}){if(void 0===t)throw new Error("You must specify an id") -return e` - POST /v1/acl/logout - Cache-Control: no-store - X-Consul-Token: ${t} - `}authorize(e,t,n,r){return this.rpc((function(e,t,n,r){return e.requestForAuthorize(t,n,r)}),(function(e,t,n,r){return e.respondForAuthorize(t,n,r)}),r,t.modelName)}logout(e,t,n,r){return this.rpc((function(e,t,n,r){return e.requestForLogout(t,n,r)}),(function(){return{}}),r,t.modelName)}},s=r.prototype,i="env",o=[n],u={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=o.slice().reverse().reduce((function(e,t){return t(s,i,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,i,d),d=null),a=d,r) -var s,i,o,u,c,d -e.default=l})),define("consul-ui/adapters/partition",["exports","consul-ui/adapters/application","consul-ui/models/partition"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{async requestForQuery(e,{ns:t,dc:n,index:r}){const a=await(e` - GET /v1/partitions?${{dc:n}} - - ${{index:r}} - `) -return await a(e=>delete e["x-consul-index"]),a}async requestForQueryRecord(e,{ns:t,dc:n,index:r,id:a}){if(void 0===a)throw new Error("You must specify an id") -const l=await(e` - GET /v1/partition/${a}?${{dc:n}} - - ${{index:r}} - `) -return await l(e=>delete e["x-consul-index"]),l}async requestForCreateRecord(e,t,r){return e` - PUT /v1/partition/${r[n.SLUG_KEY]}?${{dc:r.Datacenter}} - - ${{Name:t.Name,Description:t.Description}} - `}async requestForUpdateRecord(e,t,r){return e` - PUT /v1/partition/${r[n.SLUG_KEY]}?${{dc:r.Datacenter}} - - ${{Description:t.Description}} - `}async requestForDeleteRecord(e,t,r){return e` - DELETE /v1/partition/${r[n.SLUG_KEY]}?${{dc:r.Datacenter}} - `}}e.default=r})),define("consul-ui/adapters/permission",["exports","consul-ui/adapters/application"],(function(e,t){var n,r,a,l,s -function i(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;to(o({},e),{},{Namespace:n}))),this.env.var("CONSUL_PARTITIONS_ENABLED")&&(a=a.map(e=>o(o({},e),{},{Partition:r}))),e` - POST /v1/internal/acl/authorize?${{dc:t}} - - ${a} - `}authorize(e,t,n,r){return this.rpc(async(e,t,n)=>{const r=this.env.var("CONSUL_NSPACES_ENABLED"),a=this.env.var("CONSUL_PARTITIONS_ENABLED") -if(r||a){const e=await this.settings.findBySlug("token") -r&&(void 0!==n.ns&&0!==n.ns.length||(n.ns=e.Namespace)),a&&(void 0!==n.partition&&0!==n.partition.length||(n.partition=e.Partition))}return e.requestForAuthorize(t,n)},(function(e,t){return t((function(e,t){return t}))}),r,t.modelName)}},l=d(a.prototype,"env",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=d(a.prototype,"settings",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) -e.default=m})),define("consul-ui/adapters/policy",["exports","consul-ui/adapters/application","consul-ui/models/policy"],(function(e,t,n){function r(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;tdelete e["x-consul-index"]),s}requestForCreateRecord(e,t,n){return e` - PUT /v1/acl/token?${i(i({},this.formatDatacenter(n.Datacenter)),{},{ns:n.Namespace,partition:n.Partition})} - - ${{Description:t.Description,Policies:t.Policies,Roles:t.Roles,ServiceIdentities:t.ServiceIdentities,NodeIdentities:t.NodeIdentities,Local:t.Local}} - `}requestForUpdateRecord(e,t,r){if(void 0!==r.Rules)return e` - PUT /v1/acl/update?${this.formatDatacenter(r.Datacenter)} - - ${t} - ` -const a=i(i({},this.formatDatacenter(r.Datacenter)),{},{ns:r.Namespace,partition:r.Partition}) -return e` - PUT /v1/acl/token/${r[n.SLUG_KEY]}?${a} - - ${{Description:t.Description,Policies:t.Policies,Roles:t.Roles,ServiceIdentities:t.ServiceIdentities,NodeIdentities:t.NodeIdentities,Local:t.Local}} - `}requestForDeleteRecord(e,t,r){const a={dc:r.Datacenter,ns:r.Namespace,partition:r.Partition} -return e` - DELETE /v1/acl/token/${r[n.SLUG_KEY]}?${a} - `}requestForSelf(e,t,{dc:n,index:r,secret:a}){return e` - GET /v1/acl/token/self?${{dc:n}} - X-Consul-Token: ${a} - Cache-Control: no-store - - ${{index:r}} - `}requestForCloneRecord(e,t,r){const a=r[n.SLUG_KEY] -if(void 0===a)throw new Error("You must specify an id") -return e` - PUT /v1/acl/token/${a}/clone?${{dc:r.Datacenter,ns:r.Namespace,partition:r.Partition}} - `}self(e,t,n,r){return this.rpc((function(e,t,n,r){return e.requestForSelf(t,n,r)}),(function(e,t,n,r){return e.respondForSelf(t,n,r)}),r,t.modelName)}clone(e,t,n,r){return this.rpc((function(e,t,n,r){return e.requestForCloneRecord(t,n,r)}),(e,t,n,r)=>{const a={dc:r.Datacenter,ns:r.Namespace,partition:r.Partition} -return e.respondForQueryRecord(t,a)},r,t.modelName)}},c=a.prototype,d="store",m=[r],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(p).forEach((function(e){b[e]=p[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=m.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),b),f&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(f):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(c,d,b),b=null),l=b,a) -var c,d,m,p,f,b -e.default=u})),define("consul-ui/adapters/topology",["exports","consul-ui/adapters/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{requestForQueryRecord(e,{dc:t,ns:n,partition:r,kind:a,index:l,id:s,uri:i}){if(void 0===s)throw new Error("You must specify an id") -return e` - GET /v1/internal/ui/service-topology/${s}?${{dc:t,kind:a}} - X-Request-ID: ${i} - - ${{ns:n,partition:r,index:l}} - `}}e.default=n})),define("consul-ui/app",["exports","ember-resolver","ember-load-initializers","consul-ui/config/environment"],(function(e,t,n,r){function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends Ember.Application{constructor(...e){super(...e),a(this,"modulePrefix",r.default.modulePrefix),a(this,"podModulePrefix",r.default.podModulePrefix),a(this,"Resolver",t.default)}}e.default=l,(0,n.default)(l,r.default.modulePrefix)})),define("consul-ui/component-managers/glimmer",["exports","@glimmer/component/-private/ember-component-manager"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/-dynamic-element-alt",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Component.extend() -e.default=t})),define("consul-ui/components/-dynamic-element",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Component.extend() -e.default=t})),define("consul-ui/components/action/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"ZOGNH+Kw",block:'{"symbols":["@tabindex","&attrs","@type","@onclick","&default","@href","@external","@for"],"statements":[[6,[37,3],[[32,8]],null,[["default","else"],[{"statements":[[11,"label"],[16,"for",[32,8]],[17,2],[12],[18,5,null],[13]],"parameters":[]},{"statements":[[6,[37,3],[[32,6]],null,[["default","else"],[{"statements":[[6,[37,3],[[32,7]],null,[["default","else"],[{"statements":[[11,"a"],[16,6,[32,6]],[24,"target","_blank"],[24,"rel","noopener noreferrer"],[17,2],[12],[18,5,null],[13]],"parameters":[]},{"statements":[[11,"a"],[16,6,[32,6]],[17,2],[12],[18,5,null],[13]],"parameters":[]}]]]],"parameters":[]},{"statements":[[11,"button"],[16,"tabindex",[32,1]],[17,2],[16,4,[30,[36,0],[[32,3],"button"],null]],[4,[38,2],["click",[30,[36,1],[[32,4]],null]],null],[12],[18,5,null],[13]],"parameters":[]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["or","optional","on","if"]}',meta:{moduleName:"consul-ui/components/action/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/anonymous/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"U7xNhMne",block:'{"symbols":["&default"],"statements":[[18,1,null]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/anonymous/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})),define("consul-ui/components/app-error/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"dYVazy5r",block:'{"symbols":["@error","@login"],"statements":[[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n Error "],[1,[32,1,["status"]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"error-state",[],[["@error","@login"],[[32,1],[30,[36,1],[[30,[36,0],[[32,1,["status"]],"403"],null],[32,2]],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"hasEval":false,"upvars":["eq","if"]}',meta:{moduleName:"consul-ui/components/app-error/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/app-view/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"xz4Gi6kv",block:'{"symbols":["&attrs","&default"],"statements":[[11,"div"],[24,0,"app-view"],[17,1],[12],[2,"\\n "],[18,2,null],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"nav"],[14,"aria-label","Breadcrumb"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],null,[["class"],["with-breadcrumbs"]]]],[2,"\\n "],[18,2,null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"title"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[18,2,null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[10,"div"],[14,0,"actions"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,"portal-target",[],[["@name"],["app-view-actions"]],null],[2,"\\n "],[18,2,null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"yield-slot",[],[["@name"],["nav"]],[["default"],[{"statements":[[2,"\\n "],[18,2,null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"yield-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[2,"\\n "],[18,2,null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[18,2,null]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["document-attrs"]}',meta:{moduleName:"consul-ui/components/app-view/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:""})) -e.default=r})),define("consul-ui/components/app/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i -function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=Ember.HTMLBars.template({id:"/jM8p8BN",block:'{"symbols":["exported","&attrs","&default"],"statements":[[6,[37,10],[[30,[36,6],null,[["main","Notification"],[[30,[36,1],[[35,3],"-main"],null],[30,[36,9],["app/notification"],null]]]]],null,[["default"],[{"statements":[[2,"\\n"],[11,"div"],[24,0,"app"],[17,2],[12],[2,"\\n\\n "],[11,"div"],[24,0,"skip-links"],[4,[38,0],["click",[32,0,["focus"]]],null],[12],[2,"\\n "],[8,"portal-target",[],[["@name","@multiple"],["app-before-skip-links",true]],[["default"],[{"statements":[],"parameters":[]}]]],[2,"\\n "],[10,"a"],[15,6,[30,[36,1],["#",[32,1,["main"]]],null]],[12],[1,[30,[36,2],["components.app.skip_to_content"],null]],[13],[2,"\\n"],[2," "],[8,"portal-target",[],[["@name","@multiple"],["app-after-skip-links",true]],[["default"],[{"statements":[],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n\\n "],[8,"modal-layer",[],[[],[]],null],[2,"\\n\\n "],[10,"input"],[15,1,[30,[36,1],[[35,3],"-main-nav-toggle"],null]],[14,4,"checkbox"],[12],[13],[2,"\\n "],[10,"header"],[14,"role","banner"],[12],[2,"\\n "],[11,"label"],[24,"tabindex","0"],[16,"for",[30,[36,1],[[35,3],"-main-nav-toggle"],null]],[16,"aria-label",[30,[36,2],["components.app.toggle_menu"],null]],[4,[38,0],["keypress",[32,0,["keypressClick"]]],null],[4,[38,0],["mouseup",[32,0,["unfocus"]]],null],[12],[13],[2,"\\n "],[18,3,[[30,[36,4],["home-nav"],null],[32,1]]],[2,"\\n "],[10,"div"],[12],[2,"\\n"],[2," "],[11,"nav"],[16,"aria-label",[30,[36,2],["components.app.main"],null]],[16,0,[30,[36,5],[[32,0,["navInViewport"]],"in-viewport"],null]],[4,[38,8],null,[["onEnter","onExit","viewportTolerance"],[[30,[36,7],[[32,0],"navInViewport",true],null],[30,[36,7],[[32,0],"navInViewport",false],null],[30,[36,6],null,[["top","bottom","left","right"],[-10,-10,-10,-10]]]]]],[12],[2,"\\n "],[18,3,[[30,[36,4],["main-nav"],null],[32,1]]],[2,"\\n "],[13],[2,"\\n"],[2," "],[10,"nav"],[15,"aria-label",[30,[36,2],["components.app.complementary"],null]],[12],[2,"\\n "],[18,3,[[30,[36,4],["complementary-nav"],null],[32,1]]],[2,"\\n "],[13],[2,"\\n\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"main"],[15,1,[30,[36,1],[[35,3],"-main"],null]],[12],[2,"\\n "],[10,"div"],[14,0,"notifications"],[12],[2,"\\n "],[18,3,[[30,[36,4],["notifications"],null],[32,1]]],[2,"\\n "],[8,"portal-target",[],[["@name","@multiple"],["app-notifications",true]],[["default"],[{"statements":[],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[18,3,[[30,[36,4],["main"],null],[32,1]]],[2,"\\n "],[13],[2,"\\n "],[10,"footer"],[14,"role","contentinfo"],[12],[2,"\\n "],[18,3,[[30,[36,4],["content-info"],null],[32,1]]],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["on","concat","t","guid","-named-block-invocation","if","hash","set","in-viewport","component","let"]}',meta:{moduleName:"consul-ui/components/app/index.hbs"}}) -let c=(n=Ember.inject.service("dom"),r=Ember._action,a=Ember._action,l=Ember._action,s=class extends t.default{constructor(e,t){var n,r,a,l -super(...arguments),n=this,r="dom",l=this,(a=i)&&Object.defineProperty(n,r,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0}),this.guid=this.dom.guid(this)}keypressClick(e){e.target.dispatchEvent(new MouseEvent("click"))}focus(e){const t=e.target.getAttribute("href") -t.startsWith("#")&&(e.preventDefault(),this.dom.focus(t))}unfocus(e){e.target.blur()}},i=o(s.prototype,"dom",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o(s.prototype,"keypressClick",[r],Object.getOwnPropertyDescriptor(s.prototype,"keypressClick"),s.prototype),o(s.prototype,"focus",[a],Object.getOwnPropertyDescriptor(s.prototype,"focus"),s.prototype),o(s.prototype,"unfocus",[l],Object.getOwnPropertyDescriptor(s.prototype,"unfocus"),s.prototype),s) -e.default=c,Ember._setComponentTemplate(u,c)})),define("consul-ui/components/app/notification/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"litSWzOO",block:'{"symbols":["&attrs","@delay","@sticky","&default"],"statements":[[11,"div"],[24,0,"app-notification"],[17,1],[4,[38,2],[[30,[36,1],[[30,[36,1],["opacity","1"],null],[30,[36,1],["transition-delay",[30,[36,0],[[32,2],"ms"],null]],null]],null]],null],[4,[38,2],[[30,[36,1],[[30,[36,1],["opacity",[30,[36,3],[[32,3],"1","0"],null]],null]],null]],[["delay"],[0]]],[12],[2,"\\n "],[18,4,null],[2,"\\n"],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["concat","array","style","if"]}',meta:{moduleName:"consul-ui/components/app/notification/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/aria-menu/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"IOWpioIP",block:'{"symbols":["&default"],"statements":[[18,1,[[30,[36,5],[[32,0],"change"],null],[30,[36,5],[[32,0],"keypress"],null],[30,[36,5],[[32,0],"keypressClick"],null],[30,[36,4],null,[["labelledBy","controls","expanded"],[[30,[36,3],["component-aria-menu-trigger-",[35,2]],null],[30,[36,3],["component-aria-menu-menu-",[35,2]],null],[30,[36,1],[[35,0],"true",[29]],null]]]]]]],"hasEval":false,"upvars":["expanded","if","guid","concat","hash","action"]}',meta:{moduleName:"consul-ui/components/aria-menu/index.hbs"}}),n=13,r=32,a=38,l=40,s={vertical:{[l]:function(e,t=-1){return(t+1)%e.length},[a]:function(e,t=0){return 0===t?e.length-1:t-1},36:function(){return 0},35:function(e){return e.length-1}},horizontal:{}} -var i=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",dom:Ember.inject.service("dom"),guid:"",expanded:!1,orientation:"vertical",keyboardAccess:!0,init:function(){this._super(...arguments),Ember.set(this,"guid",this.dom.guid(this)),this._listeners=this.dom.listeners(),this._routelisteners=this.dom.listeners()},didInsertElement:function(){this.$menu=this.dom.element("#component-aria-menu-menu-"+this.guid) -const e=this.$menu.getAttribute("aria-labelledby") -this.$trigger=this.dom.element("#"+e)},willDestroyElement:function(){this._super(...arguments),this._listeners.remove(),this._routelisteners.remove()},actions:{keypressClick:function(e){e.target.dispatchEvent(new MouseEvent("click"))},keypress:function(e){if(![n,r,a,l].includes(e.keyCode))return -e.stopPropagation() -const t=[...this.dom.elements('[role^="menuitem"]',this.$menu)] -if(e.keyCode===n||e.keyCode===r){let e=this.expanded?void 0:t[0] -Ember.run.next(()=>{e=this.expanded?e:this.$trigger,void 0!==e&&e.focus()})}if(void 0===s[this.orientation][e.keyCode])return -e.preventDefault() -const i=this.dom.element('[role^="menuitem"]:focus',this.$menu) -let o -i&&(o=t.findIndex((function(e){return e===i}))) -t[s[this.orientation][e.keyCode](t,o)].focus()},change:function(e){e.target.checked?this.actions.open.apply(this,[e]):this.actions.close.apply(this,[e])},close:function(){this._listeners.remove(),Ember.set(this,"expanded",!1),Ember.run.next(()=>{this.$trigger.removeAttribute("tabindex")})},open:function(){Ember.set(this,"expanded",!0) -0===[...this.dom.elements('[role^="menuitem"]',this.$menu)].length&&this.dom.element('input[type="checkbox"]',this.$menu.parentElement).dispatchEvent(new MouseEvent("click")),this.$trigger.setAttribute("tabindex","-1"),this._listeners.add(this.dom.document(),{keydown:e=>{27===e.keyCode&&this.$trigger.focus(),9!==e.keyCode&&27!==e.keyCode?this.keyboardAccess&&this.actions.keypress.apply(this,[e]):this.$trigger.dispatchEvent(new MouseEvent("click"))}})}}})) -e.default=i})),define("consul-ui/components/auth-dialog/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"auth-dialog",initial:"idle",on:{CHANGE:[{target:"authorized",cond:"hasToken",actions:["login"]},{target:"unauthorized",actions:["logout"]}]},states:{idle:{on:{CHANGE:[{target:"authorized",cond:"hasToken"},{target:"unauthorized"}]}},unauthorized:{},authorized:{}}}})),define("consul-ui/components/auth-dialog/index",["exports","@glimmer/component","consul-ui/components/auth-dialog/chart.xstate"],(function(e,t,n){var r,a,l,s,i,o -function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=Ember.HTMLBars.template({id:"h+KHm0qM",block:'{"symbols":["State","Guard","Action","dispatch","state","sink","api","&default","@src","@sink"],"statements":[[8,"state-chart",[],[["@src"],[[34,1]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,[32,2],[],[["@name","@cond"],["hasToken",[30,[36,2],[[32,0],"hasToken"],null]]],null],[2,"\\n "],[8,[32,3],[],[["@name","@exec"],["login",[30,[36,2],[[32,0],"login"],null]]],null],[2,"\\n "],[8,[32,3],[],[["@name","@exec"],["logout",[30,[36,2],[[32,0],"logout"],null]]],null],[2,"\\n\\n"],[2," "],[8,"data-source",[],[["@src","@onchange"],[[32,9],[30,[36,6],[[30,[36,2],[[32,0],[30,[36,4],[[35,5]],null]],[["value"],["data"]]],[30,[36,2],[[32,0],[32,4],"CHANGE"],null],[30,[36,2],[[32,0],[30,[36,4],[[35,3]],null]],[["value"],["data"]]]],null]]],null],[2,"\\n"],[2," "],[8,"data-sink",[],[["@sink"],[[32,10]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[30,[36,7],null,[["login","logout","token"],[[30,[36,2],[[32,0],[32,6,["open"]]],null],[30,[36,2],[[32,0],[32,6,["open"]],null],null],[35,5]]]]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,1],[],[["@matches"],["authorized"]],[["default"],[{"statements":[[2,"\\n "],[18,8,[[30,[36,0],["authorized"],null],[32,7]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["unauthorized"]],[["default"],[{"statements":[[2,"\\n "],[18,8,[[30,[36,0],["unauthorized"],null],[32,7]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n"]],"parameters":[7]}]]],[2," "]],"parameters":[6]}]]],[2,"\\n"]],"parameters":[1,2,3,4,5]}]]],[2,"\\n"]],"hasEval":false,"upvars":["-named-block-invocation","chart","action","previousToken","mut","token","queue","hash","let"]}',meta:{moduleName:"consul-ui/components/auth-dialog/index.hbs"}}) -let d=(r=Ember.inject.service("repository/oidc-provider"),a=Ember._action,l=Ember._action,s=Ember._action,i=class extends t.default{constructor(){var e,t,r,a -super(...arguments),e=this,t="repo",a=this,(r=o)&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0}),this.chart=n.default}hasToken(){return void 0!==this.token.AccessorID}login(){let e=Ember.get(this,"previousToken.AccessorID"),t=Ember.get(this,"token.AccessorID") -null===e&&(e=Ember.get(this,"previousToken.SecretID")),null===t&&(t=Ember.get(this,"token.SecretID")) -let n="authorize" -void 0!==e&&e!==t&&(n="use"),this.args.onchange({data:Ember.get(this,"token"),type:n})}logout(){void 0!==Ember.get(this,"previousToken.AuthMethod")&&this.repo.logout(Ember.get(this,"previousToken.SecretID")),this.previousToken=null,this.args.onchange({data:null,type:"logout"})}},o=u(i.prototype,"repo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(i.prototype,"hasToken",[a],Object.getOwnPropertyDescriptor(i.prototype,"hasToken"),i.prototype),u(i.prototype,"login",[l],Object.getOwnPropertyDescriptor(i.prototype,"login"),i.prototype),u(i.prototype,"logout",[s],Object.getOwnPropertyDescriptor(i.prototype,"logout"),i.prototype),i) -e.default=d,Ember._setComponentTemplate(c,d)})),define("consul-ui/components/auth-form/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"auth-form",initial:"idle",on:{RESET:[{target:"idle"}],ERROR:[{target:"error"}]},states:{idle:{entry:["clearError"],on:{SUBMIT:[{target:"loading",cond:"hasValue"},{target:"error"}]}},loading:{},error:{exit:["clearError"],on:{TYPING:[{target:"idle"}],SUBMIT:[{target:"loading",cond:"hasValue"},{target:"error"}]}}}}})),define("consul-ui/components/auth-form/index",["exports","@glimmer/component","consul-ui/components/auth-form/chart.xstate","consul-ui/components/auth-form/tabs.xstate"],(function(e,t,n,r){var a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=Ember.HTMLBars.template({id:"3tojTMnY",block:'{"symbols":["State","Guard","ChartAction","dispatch","state","chart","exported","TabState","IgnoredGuard","IgnoredAction","tabDispatch","tabState","notice","&attrs","&default","@dc","@nspace","@partition","@onsubmit"],"statements":[[8,"state-chart",[],[["@src"],[[32,0,["chart"]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,17],[[30,[36,3],null,[["State","Guard","Action","dispatch","state"],[[32,1],[32,2],[32,3],[32,4],[32,5]]]]],null,[["default"],[{"statements":[[6,[37,17],[[30,[36,3],null,[["reset","focus","disabled","error","submit"],[[30,[36,5],[[32,0],[32,4],"RESET"],null],[32,0,["focus"]],[30,[36,2],[[32,5],"loading"],null],[30,[36,6],[[30,[36,5],[[32,0],[32,4],"ERROR"],null],[30,[36,5],[[32,0],[30,[36,7],[[32,0,["error"]]],null]],[["value"],["error.errors.firstObject"]]]],null],[30,[36,6],[[30,[36,5],[[32,0],[30,[36,7],[[32,0,["value"]]],null]],null],[30,[36,5],[[32,0],[32,4],"SUBMIT"],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,2],[],[["@name","@cond"],["hasValue",[32,0,["hasValue"]]]],null],[2,"\\n"],[2," "],[8,[32,6,["Action"]],[],[["@name","@exec"],["clearError",[30,[36,6],[[30,[36,5],[[32,0],[30,[36,7],[[32,0,["error"]]],null],[29]],null],[30,[36,5],[[32,0],[30,[36,7],[[32,0,["secret"]]],null],[29]],null]],null]]],null],[2,"\\n "],[11,"div"],[24,0,"auth-form"],[17,14],[12],[2,"\\n"],[8,"state-chart",[],[["@src"],[[32,0,["tabsChart"]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,8],["use SSO"],null]],null,[["default"],[{"statements":[[2," "],[8,"tab-nav",[],[["@items","@onclick"],[[30,[36,4],[[30,[36,3],null,[["label","selected"],["Token",[30,[36,2],[[32,12],"token"],null]]]],[30,[36,3],null,[["label","selected"],["SSO",[30,[36,2],[[32,12],"sso"],null]]]]],null],[30,[36,6],[[30,[36,5],[[32,0],[32,11]],null],[30,[36,5],[[32,0],[32,4],"RESET"],null]],null]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,[32,1],[],[["@matches"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[32,0,["error","status"]]],null,[["default"],[{"statements":[[2," "],[8,"notice",[[24,"role","alert"]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,1],[[32,0,["value","Name"]]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,0],[[32,0,["error","status"]],"403"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"strong"],[12],[2,"Consul login failed"],[13],[10,"br"],[12],[13],[2,"\\n We received a token from your OIDC provider but could not log in to Consul with it.\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],[[32,0,["error","status"]],"401"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"strong"],[12],[2,"Could not log in to provider"],[13],[10,"br"],[12],[13],[2,"\\n The OIDC provider has rejected this access token. Please have an administrator check your auth method configuration.\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],[[32,0,["error","status"]],"499"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"strong"],[12],[2,"SSO log in window closed"],[13],[10,"br"],[12],[13],[2,"\\n The OIDC provider window was closed. Please try again.\\n"]],"parameters":[]},{"statements":[[2," "],[10,"strong"],[12],[2,"Error"],[13],[10,"br"],[12],[13],[2,"\\n "],[1,[32,0,["error","detail"]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],[[32,0,["error","status"]],"403"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"strong"],[12],[2,"Invalid token"],[13],[10,"br"],[12],[13],[2,"\\n The token entered does not exist. Please enter a valid token to log in.\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],[[32,0,["error","status"]],"404"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"strong"],[12],[2,"No providers"],[13],[10,"br"],[12],[13],[2,"\\n No SSO providers are configured for that Partition.\\n"]],"parameters":[]},{"statements":[[2," "],[10,"strong"],[12],[2,"Error"],[13],[10,"br"],[12],[13],[2,"\\n "],[1,[32,0,["error","detail"]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"],[8,[32,8],[],[["@matches"],["token"]],[["default"],[{"statements":[[2,"\\n "],[10,"form"],[15,"onsubmit",[30,[36,5],[[32,0],[32,4],"SUBMIT"],null]],[12],[2,"\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"label"],[15,0,[30,[36,11],["type-password",[30,[36,1],[[30,[36,10],[[30,[36,2],[[32,5],"error"],null],[30,[36,9],[[32,0,["error","status"]]],null]],null]," has-error"],null]],null]],[12],[2,"\\n "],[10,"span"],[12],[2,"Log in with a token"],[13],[2,"\\n\\n"],[2," "],[11,"input"],[16,"disabled",[30,[36,2],[[32,5],"loading"],null]],[24,3,"auth[SecretID]"],[24,"placeholder","SecretID"],[16,2,[32,0,["secret"]]],[16,"oninput",[30,[36,6],[[30,[36,5],[[32,0],[30,[36,7],[[32,0,["secret"]]],null]],[["value"],["target.value"]]],[30,[36,5],[[32,0],[30,[36,7],[[32,0,["value"]]],null]],[["value"],["target.value"]]],[30,[36,5],[[32,0],[32,4],"TYPING"],null]],null]],[16,4,[30,[36,1],[[30,[36,0],[[30,[36,12],["environment"],null],"testing"],null],"text","password"],null]],[4,[38,14],[[30,[36,13],[[32,0],"input"],null]],null],[12],[13],[2,"\\n "],[8,[32,1],[],[["@matches"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,9],[[32,0,["error","status"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"strong"],[14,"role","alert"],[12],[2,"\\n Please enter your secret\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"action",[[16,"disabled",[30,[36,2],[[32,5],"loading"],null]]],[["@type"],["submit"]],[["default"],[{"statements":[[2,"\\n Log in\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n\\n"],[18,15,[[30,[36,15],[[32,7],[30,[36,3],null,[["Method"],[[32,8]]]]],null]]],[2,"\\n\\n "],[10,"em"],[12],[2,"\\n Contact your administrator for login credentials.\\n "],[13],[2,"\\n"]],"parameters":[8,9,10,11,12]}]]],[2,"\\n\\n\\n "],[13],[2,"\\n "],[8,[32,1],[],[["@matches"],["loading"]],[["default"],[{"statements":[[2,"\\n "],[8,"token-source",[],[["@dc","@nspace","@partition","@type","@value","@onchange","@onerror"],[[32,16],[30,[36,16],[[32,0,["value","Namespace"]],[32,17]],null],[30,[36,16],[[32,0,["value","Partition"]],[32,18]],null],[30,[36,1],[[32,0,["value","Name"]],"oidc","secret"],null],[32,0,["value"]],[30,[36,6],[[30,[36,5],[[32,0],[32,4],"RESET"],null],[32,19]],null],[30,[36,6],[[30,[36,5],[[32,0],[30,[36,7],[[32,0,["error"]]],null]],[["value"],["error.errors.firstObject"]]],[30,[36,5],[[32,0],[32,4],"ERROR"],null]],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[7]}]]]],"parameters":[6]}]]]],"parameters":[1,2,3,4,5]}]]]],"hasEval":false,"upvars":["eq","if","state-matches","hash","array","action","queue","mut","can","not","and","concat","env","set","did-insert","assign","or","let"]}',meta:{moduleName:"consul-ui/components/auth-form/index.hbs"}}) -let u=(a=Ember._action,l=Ember._action,i((s=class extends t.default{constructor(){super(...arguments),this.chart=n.default,this.tabsChart=r.default}hasValue(e,t,n){return""!==this.value&&void 0!==this.value}focus(){this.input.focus()}}).prototype,"hasValue",[a],Object.getOwnPropertyDescriptor(s.prototype,"hasValue"),s.prototype),i(s.prototype,"focus",[l],Object.getOwnPropertyDescriptor(s.prototype,"focus"),s.prototype),s) -e.default=u,Ember._setComponentTemplate(o,u)})),define("consul-ui/components/auth-form/tabs.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"auth-form-tabs",initial:"token",on:{TOKEN:[{target:"token"}],SSO:[{target:"sso"}]},states:{token:{},sso:{}}}})),define("consul-ui/components/auth-profile/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"NskkZ4lP",block:'{"symbols":["&attrs","@item"],"statements":[[11,"dl"],[24,0,"auth-profile"],[17,1],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[10,"span"],[12],[2,"My ACL Token"],[13],[10,"br"],[12],[13],[2,"\\n AccessorID\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,1],[[32,2,["AccessorID"]],[30,[36,0],[[32,2,["AccessorID","length"]],8],null]],null]],[2,"\\n "],[13],[2,"\\n"],[13]],"hasEval":false,"upvars":["sub","string-substring"]}',meta:{moduleName:"consul-ui/components/auth-profile/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/basic-dropdown-content",["exports","ember-basic-dropdown/components/basic-dropdown-content"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/components/basic-dropdown-optional-tag",["exports","ember-basic-dropdown/components/basic-dropdown-optional-tag"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/basic-dropdown-trigger",["exports","ember-basic-dropdown/components/basic-dropdown-trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/basic-dropdown",["exports","ember-basic-dropdown/components/basic-dropdown"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/block-slot",["exports","block-slots/components/block-slot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/brand-loader/enterprise",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"3HLvt6Sl",block:'{"symbols":[],"statements":[[10,"path"],[14,"data-enterprise-logo",""],[14,"d","M322.099,18.0445001 C319.225,18.0223001 316.427,18.9609001 314.148,20.7112001 L314.016,20.8179001 L313.68,18.5368001 L310.332,18.5368001 L310.332,53.0000001 L314.312,52.4338001 L314.312,42.3164001 L314.435,42.3164001 C316.705,42.7693001 319.012,43.0165001 321.327,43.0549001 C326.554,43.0549001 329.098,40.5029001 329.098,35.2432001 L329.098,25.3802001 C329.073,20.4569001 326.809,18.0445001 322.099,18.0445001 Z M264.971,11.9722001 L260.991,12.5466001 L260.991,18.5284001 L256.708,18.5284001 L256.708,21.8106001 L260.991,21.8106001 L260.991,37.6883001 L260.99344,37.9365729 C261.066744,41.6122056 262.7975,43.1124033 266.915,43.1124033 C268.591,43.1170001 270.255,42.8396001 271.839,42.2915001 L271.363,39.1817001 L270.896229,39.3066643 C269.803094,39.5806719 268.682875,39.7315001 267.555,39.7560001 C265.526625,39.7560001 265.081547,38.9674128 264.991981,37.7056542 L264.97743,37.4176027 L264.97159,37.1147428 L264.971,21.8188001 L271.494,21.8188001 L271.83,18.5366001 L264.971,18.5366001 L264.971,11.9722001 Z M283.556,18.0770001 C277.312,18.0770001 274.144,21.0884001 274.144,27.0374001 L274.144,34.3075001 C274.144,40.3140001 277.164,43.1124894 283.655,43.1124894 C286.526,43.1192001 289.38,42.6620001 292.106,41.7581001 L291.589,38.6154001 C289.116,39.3030001 286.566,39.6779001 283.999,39.7314001 C279.785843,39.7314001 278.500803,38.4772648 278.201322,35.860808 L278.165734,35.4868687 L278.141767,35.0951811 C278.138675,35.0284172 278.136019,34.9609111 278.133774,34.8926614 L278.125037,34.474229 L278.124,32.0756001 L292.582,32.0756001 L292.582,27.1031001 C292.582,21.0064001 289.636,18.0770001 283.556,18.0770001 Z M384.631,18.0768001 C378.412,18.0440001 375.22,21.0554001 375.22,27.0208001 L375.22,34.2909001 C375.22,40.2973001 378.239,43.0955988 384.73,43.0955988 C387.599,43.1033001 390.45,42.6460001 393.173,41.7415001 L392.665,38.5988001 C390.188,39.2815001 387.635,39.6509001 385.066,39.6983001 C380.852843,39.6983001 379.567803,38.4442359 379.268322,35.8278014 L379.232734,35.4538649 L379.208767,35.0621794 C379.205675,34.9954158 379.203019,34.9279099 379.200774,34.8596604 L379.192037,34.4412289 L379.191,32.0754001 L393.657,32.0754001 L393.657,27.1029001 C393.657,21.0062001 390.712,18.0768001 384.631,18.0768001 Z M364.634,18.0441001 C363.881125,18.0441001 363.18736,18.0712813 362.54969,18.1279834 L362.016783,18.1838695 C357.948857,18.6791301 356.371,20.5353768 356.371,24.4608001 L356.371522,24.7155013 L356.376145,25.2052033 L356.386527,25.669464 L356.403852,26.1092746 C356.407384,26.1805939 356.411254,26.2509357 356.415488,26.3203208 L356.445451,26.7253144 L356.485319,27.1083357 C356.756619,29.3425283 357.626845,30.4437319 360.247859,31.3753061 L360.701103,31.529163 C360.779411,31.5545991 360.85912,31.5799457 360.940253,31.6052232 L361.444353,31.7562266 L361.983836,31.9065664 L362.55989,32.0572338 L363.430663,32.2724269 L364.440153,32.5299129 L364.884369,32.6506971 L365.29049,32.7679922 L365.660213,32.8831607 L365.99523,32.9975651 C367.26815,33.4554713 367.748817,33.9277406 367.925217,34.806783 L367.963261,35.0352452 C367.974017,35.1143754 367.982943,35.1965576 367.990321,35.2820187 L368.008092,35.5484662 L368.018269,35.8359502 L368.023,36.3096001 C368.023,36.3683432 368.022674,36.4261667 368.021989,36.4830819 L368.013333,36.8137655 C368.008847,36.9204214 368.002676,37.0235359 367.994568,37.1232009 L367.964177,37.4119383 C367.774513,38.8512264 367.058626,39.4837671 364.875404,39.6510671 L364.43427,39.67773 L363.954974,39.6933243 C363.78868,39.6967387 363.615773,39.6984001 363.436,39.6984001 C361.126,39.6638001 358.83,39.3385001 356.601,38.7302001 L356.051,41.7908001 L356.619468,41.9710684 C358.900888,42.6645722 361.270923,43.0269154 363.658,43.0463001 C369.59355,43.0463001 371.402903,41.3625861 371.812159,38.0405419 L371.854011,37.6421573 C371.859965,37.574501 371.865421,37.5062155 371.870401,37.4373012 L371.894725,37.0162715 L371.908596,36.5801656 C371.911587,36.4322862 371.913,36.2818967 371.913,36.1290001 L371.914417,35.5317322 C371.901583,33.4289389 371.677,32.2649251 370.797,31.3698001 C370.053077,30.6022731 368.787947,30.0494771 366.870096,29.4840145 L366.242608,29.3047611 C366.13436,29.2747269 366.024265,29.2445914 365.912304,29.2143213 L365.218,29.0308209 L364.216102,28.7784328 L363.495981,28.593015 L363.068145,28.4733265 L362.67987,28.3551624 C361.018765,27.8247783 360.501056,27.2986662 360.340522,26.2094051 L360.310407,25.9578465 C360.306262,25.9142982 360.302526,25.8699197 360.29916,25.8246823 L360.283089,25.5427193 L360.273984,25.2387571 L360.269927,24.911412 L360.270221,24.3885398 L360.280627,24.0635689 C360.366727,22.3885604 360.966747,21.6370879 363.248047,21.4645754 L363.695778,21.4389299 L364.184625,21.426349 L364.445,21.4248001 C366.684,21.4608001 368.916,21.6859001 371.117,22.0976001 L371.396,18.8646001 L370.730951,18.7059457 C368.73071,18.2553391 366.686,18.0331201 364.634,18.0441001 Z M351.301,18.5363001 L347.321,18.5363001 L347.321,42.6112001 L351.301,42.6112001 L351.301,18.5363001 Z M307.335,18.0850001 L306.70097,18.3638937 C304.598769,19.3169298 302.610091,20.5031364 300.771,21.9005001 L300.623,22.0236001 L300.369,18.5363001 L296.931,18.5363001 L296.931,42.6112001 L300.91,42.6112001 L300.91,25.9048001 L301.641825,25.3925123 C303.604371,24.0427531 305.654445,22.8240667 307.778,21.7446001 L307.335,18.0850001 Z M344.318,18.0850001 L343.683947,18.3638937 C341.581595,19.3169298 339.592091,20.5031364 337.753,21.9005001 L337.606,22.0236001 L337.351,18.5363001 L333.946,18.5363001 L333.946,42.6112001 L337.926,42.6112001 L337.926,25.9048001 L337.967,25.9048001 L338.701162,25.3884311 C340.669963,24.0279284 342.726556,22.7996223 344.859,21.7118001 L344.318,18.0850001 Z M230.384,9.62500005 L211.109,9.62500005 L211.109,42.6112001 L230.466,42.6112001 L230.466,38.9597001 L215.146,38.9597001 L215.146,27.4720001 L229.293,27.4720001 L229.293,23.8698001 L215.146,23.8698001 L215.146,13.2600001 L230.384,13.2600001 L230.384,9.62500005 Z M248.763,18.0441001 C245.899,18.0441001 241.706,19.3323001 239.047,20.6124001 L238.924,20.6698001 L238.522,18.5282001 L235.322,18.5282001 L235.322,42.5704001 L239.302,42.5704001 L239.302,24.2885001 L239.359,24.2885001 C241.919,22.9674001 245.661,21.8268001 247.524,21.8268001 C249.165,21.8268001 249.985,22.5735001 249.985,24.1736001 L249.985,42.5868001 L253.965,42.5868001 L253.965,24.1161001 C253.932,20.0380001 252.25,18.0523001 248.763,18.0441001 Z M321.229,21.5564001 C323.526,21.5564001 325.061,22.2046001 325.061,25.3966001 L325.094,35.2760001 C325.094,38.3121001 323.887,39.6085001 321.057,39.6085001 C318.81,39.5533001 316.572,39.3035001 314.369,38.8618001 L314.287,38.8618001 L314.287,24.4694001 C316.198,22.7311001 318.649,21.7027001 321.229,21.5564001 Z M283.581,21.3264001 C287.372,21.3264001 288.758,22.8855001 288.758,26.7010001 L288.758,28.7934001 L278.149,28.7934001 L278.149,26.7010001 C278.149,22.9839001 279.79,21.3264001 283.581,21.3264001 Z M384.648,21.3262001 C388.431,21.3262001 389.834,22.8852001 389.834,26.7008001 L389.834,28.7932001 L379.224,28.7932001 L379.224,26.7008001 C379.224,22.9837001 380.865,21.3262001 384.648,21.3262001 Z M351.301,8.63220005 L347.321,8.63220005 L347.321,14.4499001 L351.301,14.4499001 L351.301,8.63220005 Z"],[14,"fill-rule","nonzero"],[12],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/brand-loader/enterprise.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/brand-loader/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"fT5BqeI8",block:'{"symbols":["@width","@color","@subtitle","&default"],"statements":[[10,"div"],[14,0,"brand-loader"],[15,5,[31,["margin-left: calc(-",[32,1],"px / 2)"]]],[12],[2,"\\n"],[10,"svg"],[15,"width",[31,[[32,1]]]],[14,"height","53"],[14,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[15,"fill",[31,[[32,2]]]],[12],[2,"\\n "],[10,"path"],[14,"d","M32.7240001,0.866235051 C28.6239001,-0.218137949 24.3210001,-0.285465949 20.1890001,0.670096051 C16.0569001,1.62566005 12.2205001,3.57523005 9.01276015,6.34960005 C5.80499015,9.12397005 3.32280015,12.6393001 1.78161015,16.5905001 C0.240433148,20.5416001 -0.313157852,24.8092001 0.168892148,29.0228001 C0.650943148,33.2364001 2.15407015,37.2687001 4.54780015,40.7697001 C6.94153015,44.2707001 10.1535001,47.1346001 13.9050001,49.1128001 C17.6565001,51.0910001 21.8341001,52.1238001 26.0752001,52.1214409 C32.6125001,52.1281001 38.9121001,49.6698001 43.7170001,45.2370001 L37.5547001,38.7957001 C35.0952001,41.0133001 32.0454001,42.4701001 28.7748001,42.9898001 C25.5042001,43.5096001 22.1530001,43.0698001 19.1273001,41.7239001 C16.1015001,40.3779001 13.5308001,38.1835001 11.7267001,35.4064001 C9.92260015,32.6294001 8.96239015,29.3888001 8.96239015,26.0771001 C8.96239015,22.7655001 9.92260015,19.5249001 11.7267001,16.7478001 C13.5308001,13.9707001 16.1015001,11.7763001 19.1273001,10.4304001 C22.1530001,9.08444005 25.5042001,8.64470005 28.7748001,9.16441005 C32.0454001,9.68412005 35.0952001,11.1410001 37.5547001,13.3586001 L43.7170001,6.89263005 C40.5976001,4.01926005 36.8241001,1.95061005 32.7240001,0.866235051 Z M46.6320001,34.8572001 C46.2182001,34.9395001 45.8380001,35.1427001 45.5397001,35.4410001 C45.2413001,35.7394001 45.0381001,36.1195001 44.9558001,36.5334001 C44.8735001,36.9472001 44.9157001,37.3762001 45.0772001,37.7660001 C45.2387001,38.1559001 45.5121001,38.4891001 45.8630001,38.7235001 C46.2138001,38.9579001 46.6263001,39.0830001 47.0482001,39.0830001 C47.6141001,39.0830001 48.1567001,38.8583001 48.5568001,38.4582001 C48.9569001,38.0581001 49.1817001,37.5154001 49.1817001,36.9496001 C49.1817001,36.5276001 49.0565001,36.1152001 48.8221001,35.7643001 C48.5877001,35.4135001 48.2545001,35.1400001 47.8647001,34.9786001 C47.4748001,34.8171001 47.0459001,34.7748001 46.6320001,34.8572001 Z M49.0856001,27.5622001 C48.6718001,27.6446001 48.2916001,27.8477001 47.9933001,28.1461001 C47.6949001,28.4445001 47.4917001,28.8246001 47.4094001,29.2385001 C47.3271001,29.6523001 47.3693001,30.0813001 47.5308001,30.4711001 C47.6923001,30.8609001 47.9657001,31.1941001 48.3166001,31.4286001 C48.6674001,31.6630001 49.0799001,31.7881001 49.5018001,31.7881001 C50.0670001,31.7859001 50.6084001,31.5605001 51.0080001,31.1609001 C51.4076001,30.7612001 51.6331001,30.2198001 51.6353001,29.6547001 C51.6353001,29.2327001 51.5102001,28.8202001 51.2757001,28.4694001 C51.0413001,28.1186001 50.7081001,27.8451001 50.3183001,27.6836001 C49.9284001,27.5222001 49.4995001,27.4799001 49.0856001,27.5622001 Z M28.0728001,20.8457001 C27.0412001,20.4185001 25.9061001,20.3067001 24.8110001,20.5245001 C23.7159001,20.7423001 22.7100001,21.2800001 21.9205001,22.0695001 C21.1309001,22.8590001 20.5933001,23.8650001 20.3754001,24.9600001 C20.1576001,26.0551001 20.2694001,27.1902001 20.6967001,28.2218001 C21.1240001,29.2534001 21.8476001,30.1351001 22.7760001,30.7554001 C23.7043001,31.3757001 24.7958001,31.7068001 25.9124001,31.7068001 C27.4096001,31.7068001 28.8455001,31.1120001 29.9043001,30.0533001 C30.9630001,28.9946001 31.5578001,27.5587001 31.5578001,26.0614001 C31.5578001,24.9449001 31.2267001,23.8534001 30.6063001,22.9250001 C29.9860001,21.9966001 29.1043001,21.2730001 28.0728001,20.8457001 Z M43.9670001,27.4378001 C43.5772001,27.2763001 43.1482001,27.2341001 42.7344001,27.3164001 C42.3205001,27.3987001 41.9404001,27.6019001 41.6420001,27.9003001 C41.3437001,28.1986001 41.1405001,28.5788001 41.0581001,28.9926001 C40.9758001,29.4065001 41.0181001,29.8354001 41.1796001,30.2253001 C41.3410001,30.6151001 41.6145001,30.9483001 41.9653001,31.1827001 C42.3162001,31.4171001 42.7286001,31.5423001 43.1506001,31.5423001 C43.7164001,31.5423001 44.2591001,31.3175001 44.6592001,30.9174001 C45.0592001,30.5173001 45.2840001,29.9747001 45.2840001,29.4088001 C45.2840001,28.9869001 45.1589001,28.5744001 44.9245001,28.2236001 C44.6901001,27.8727001 44.3568001,27.5993001 43.9670001,27.4378001 Z M43.9670001,20.7503001 C43.5772001,20.5888001 43.1482001,20.5466001 42.7344001,20.6289001 C42.3205001,20.7112001 41.9404001,20.9144001 41.6420001,21.2128001 C41.3437001,21.5111001 41.1405001,21.8913001 41.0581001,22.3051001 C40.9758001,22.7190001 41.0181001,23.1479001 41.1796001,23.5378001 C41.3410001,23.9276001 41.6145001,24.2608001 41.9653001,24.4952001 C42.3162001,24.7296001 42.7286001,24.8548001 43.1506001,24.8548001 C43.7164001,24.8548001 44.2591001,24.6300001 44.6592001,24.2299001 C45.0592001,23.8298001 45.2840001,23.2871001 45.2840001,22.7213001 C45.2840001,22.2994001 45.1589001,21.8869001 44.9245001,21.5360001 C44.6901001,21.1852001 44.3568001,20.9118001 43.9670001,20.7503001 Z M49.0856001,20.3825001 C48.6718001,20.4649001 48.2916001,20.6681001 47.9933001,20.9664001 C47.6949001,21.2648001 47.4917001,21.6449001 47.4094001,22.0588001 C47.3271001,22.4726001 47.3693001,22.9016001 47.5308001,23.2914001 C47.6923001,23.6813001 47.9657001,24.0144001 48.3166001,24.2489001 C48.6674001,24.4833001 49.0799001,24.6084001 49.5018001,24.6084001 C50.0670001,24.6063001 50.6084001,24.3808001 51.0080001,23.9812001 C51.4076001,23.5815001 51.6331001,23.0401001 51.6353001,22.4750001 C51.6353001,22.0530001 51.5102001,21.6406001 51.2757001,21.2897001 C51.0413001,20.9389001 50.7081001,20.6654001 50.3183001,20.5040001 C49.9284001,20.3425001 49.4995001,20.3002001 49.0856001,20.3825001 Z M46.7554001,13.2026001 C46.3416001,13.2849001 45.9614001,13.4881001 45.6630001,13.7865001 C45.3647001,14.0849001 45.1615001,14.4650001 45.0792001,14.8788001 C44.9969001,15.2927001 45.0391001,15.7217001 45.2006001,16.1115001 C45.3621001,16.5013001 45.6355001,16.8345001 45.9863001,17.0689001 C46.3372001,17.3034001 46.7497001,17.4285001 47.1716001,17.4285001 C47.7374001,17.4285001 48.2801001,17.2037001 48.6802001,16.8036001 C49.0803001,16.4035001 49.3050001,15.8609001 49.3050001,15.2951001 C49.3050001,14.8731001 49.1799001,14.4606001 48.9455001,14.1098001 C48.7111001,13.7589001 48.3779001,13.4855001 47.9880001,13.3240001 C47.5982001,13.1625001 47.1692001,13.1203001 46.7554001,13.2026001 Z"],[14,"fill-rule","nonzero"],[12],[13],[2,"\\n "],[10,"path"],[14,"d","M83.5385001,9.02612084 C75.3002001,9.02612084 71.7718001,12.5545001 71.7718001,18.6102001 L71.7718001,33.5278001 L71.7744126,33.809806 C71.8842215,39.6928981 75.4612111,43.1118103 83.5385001,43.1118103 C86.5802001,43.1131001 89.6109001,42.7466001 92.5646001,42.0205001 L91.8671001,36.6049001 L90.9760579,36.7631811 C88.5964705,37.1629803 86.1899224,37.3844223 83.7765001,37.4254001 C79.4194001,37.4254001 78.0326001,35.9320001 78.0326001,32.4118001 L78.0326001,19.7261001 L78.0346281,19.4988781 C78.0956946,16.133828 79.5462067,14.7125001 83.7765001,14.7125001 C86.4916001,14.7587001 89.1980001,15.0332001 91.8671001,15.5331001 L92.5646001,10.1175001 L91.8246092,9.94345672 C89.1057071,9.33281156 86.3267251,9.02500229 83.5385001,9.02612084 Z M172.149,18.4131001 L166.094,18.4131001 L166.09588,36.2248122 C166.154955,40.3975255 167.61375,43.1117001 171.55,43.1117001 C174.919,42.9517001 178.218,42.0880001 181.233,40.5762001 L181.832,42.6112001 L186.443,42.6112001 L186.443,18.4131001 L180.388,18.4131001 L180.388,35.1934001 C178.188,36.3339001 175.481,37.2283001 174.086,37.2283001 C172.691,37.2283001 172.149,36.5801001 172.149,35.2918001 L172.149,18.4131001 Z M105.939,17.9127001 C98.2719471,17.9127001 95.7845671,21.8519543 95.4516942,26.3358062 L95.4257941,26.7784774 C95.4225999,26.8525088 95.4199581,26.9266566 95.4178553,27.0009059 L95.4116001,27.4475001 L95.4116001,33.5853001 L95.4178331,34.0318054 C95.5519456,38.7818866 97.886685,43.0872001 105.931,43.0872001 C113.716697,43.0872001 116.15821,39.0467642 116.432186,34.4757046 L116.45204,34.0318054 C116.456473,33.8833653 116.458758,33.734491 116.459,33.5853001 L116.459,27.4475001 L116.457455,27.2221358 C116.453317,26.9220505 116.440796,26.6236441 116.419035,26.3278463 L116.379357,25.8862225 C115.91894,21.5651129 113.355121,17.9127001 105.939,17.9127001 Z M154.345,17.8876515 C147.453,17.8876515 145.319,20.0214001 145.319,24.8873001 L145.319694,25.1343997 L145.325703,25.6107983 L145.338905,26.064173 C145.341773,26.1378641 145.344992,26.2106314 145.348588,26.2824927 L145.374889,26.7029295 C145.380095,26.7712375 145.385729,26.838675 145.391816,26.9052596 L145.433992,27.2946761 C145.714183,29.5082333 146.613236,30.7206123 149.232713,31.693068 L149.698825,31.8575665 C150.021076,31.9658547 150.36662,32.0715774 150.737101,32.1758709 L151.311731,32.3313812 C151.509646,32.3829554 151.714,32.4343143 151.925,32.4856001 L152.205551,32.5543061 L152.728976,32.6899356 L153.204098,32.8237311 L153.633238,32.9563441 C155.53221,33.5734587 156.004908,34.1732248 156.112605,35.0535762 L156.130482,35.2466262 L156.139507,35.448917 L156.142,35.6611001 L156.137247,35.9859786 L156.121298,36.2838969 C156.024263,37.5177444 155.540462,38.0172149 153.741624,38.1073495 L153.302742,38.1210314 L153.065,38.1227001 C150.631,38.0987001 148.21,37.7482001 145.869,37.0807001 L145.049,41.6922001 L145.672496,41.887484 C148.174444,42.639635 150.769923,43.0436231 153.385,43.0871001 C159.627887,43.0871001 161.583469,40.9824692 162.030289,37.4548504 L162.074576,37.049455 C162.087289,36.9123213 162.098004,36.7731979 162.106868,36.6321214 L162.128062,36.2030694 L162.139051,35.7625187 L162.141,35.5380001 C162.141,35.4566181 162.140828,35.3763299 162.14046,35.2971136 L162.131203,34.6125174 L162.117224,34.1865271 L162.095649,33.7836378 L162.065324,33.4027996 L162.025093,33.0429627 L161.973799,32.7030773 C161.659145,30.8866498 160.790109,29.9278873 158.501441,29.0408119 L158.069484,28.8801405 L157.605084,28.7199991 C157.524916,28.6932947 157.443348,28.6665687 157.360357,28.6397991 L156.845127,28.4784845 L156.294565,28.3150754 L155.707516,28.148522 L155.082823,27.9777746 L154.035614,27.7021396 L153.423677,27.5325226 L153.071612,27.4262327 C153.016479,27.4088193 152.963082,27.3915263 152.911366,27.3743086 L152.620815,27.2715428 C151.671458,26.912485 151.415595,26.5466416 151.348761,25.7543883 L151.334373,25.5160648 L151.327658,25.2523603 L151.327351,24.8244501 C151.355827,23.4390475 151.851313,22.8769001 154.403,22.8769001 C156.636,22.9360001 158.861,23.1692001 161.057,23.5744001 L161.591,18.7085001 L160.876597,18.5511522 C158.72872,18.1040608 156.5401,17.8816774 154.345,17.8876515 Z M197.71,7.71350005 L191.654,8.53405005 L191.654,42.6116001 L197.71,42.6116001 L197.71,7.71350005 Z M135.455,17.9211001 C132.086,18.0823001 128.788,18.9459001 125.772,20.4566001 L125.189,18.4135001 L120.57,18.4135001 L120.57,42.6115001 L126.625,42.6115001 L126.625,25.8066001 C128.833,24.6661001 131.549,23.7717001 132.936,23.7717001 C134.322,23.7717001 134.872,24.4199001 134.872,25.7082001 L134.872,42.6115001 L140.919,42.6115001 L140.919,25.0681001 C140.919,20.7520001 139.475,17.9211001 135.455,17.9211001 Z M105.931,23.0740001 C109.156,23.0740001 110.395,24.5592001 110.395,27.2506001 L110.395,33.7494001 L110.392134,33.9740961 C110.325067,36.5604698 109.074195,37.9178001 105.931,37.9178001 C102.698,37.9178001 101.459,36.4818001 101.459,33.7494001 L101.459,27.2506001 L101.461884,27.0258853 C101.529372,24.4390811 102.787806,23.0740001 105.931,23.0740001 Z"],[14,"fill-rule","nonzero"],[12],[13],[2,"\\n "],[1,[32,3]],[2,"\\n "],[18,4,null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/brand-loader/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/certificate/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l -function s(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=Ember.HTMLBars.template({id:"FAdEcz6O",block:'{"symbols":["@item","@name"],"statements":[[10,"div"],[14,0,"certificate"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,1],[32,2]]],null],[2,"\\n "],[11,"button"],[16,0,[30,[36,1],["visibility",[30,[36,0],[[32,0,["show"]]," hide"," show"],null]],null]],[24,4,"button"],[4,[38,2],["click",[32,0,["setVisibility"]]],null],[12],[2,"\\n "],[13],[2,"\\n"],[6,[37,0],[[32,0,["show"]]],null,[["default","else"],[{"statements":[[2," "],[10,"code"],[12],[1,[32,1]],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"hr"],[12],[13],[2,"\\n"]],"parameters":[]}]]],[13]],"hasEval":false,"upvars":["if","concat","on"]}',meta:{moduleName:"consul-ui/components/certificate/index.hbs"}}) -let o=(n=Ember._tracked,r=Ember._action,a=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="show",a=this,(r=l)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}setVisibility(){this.show=!this.show}},l=s(a.prototype,"show",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),s(a.prototype,"setVisibility",[r],Object.getOwnPropertyDescriptor(a.prototype,"setVisibility"),a.prototype),a) -e.default=o,Ember._setComponentTemplate(i,o)})),define("consul-ui/components/child-selector/index",["exports","ember-concurrency","block-slots"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=Ember.HTMLBars.template({id:"ounU18qJ",block:'{"symbols":["collection","item","&default","&attrs"],"statements":[[11,"div"],[16,0,[31,["child-selector ",[34,0],"-child-selector"]]],[17,4],[12],[2,"\\n"],[18,3,null],[2,"\\n"],[6,[37,11],[[30,[36,19],[[35,18]],null]],null,[["default"],[{"statements":[[2," "],[8,"yield-slot",[],[["@name"],["create"]],[["default"],[{"statements":[[18,3,null]],"parameters":[]}]]],[2,"\\n "],[10,"label"],[14,0,"type-text"],[12],[2,"\\n "],[10,"span"],[12],[8,"yield-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[18,3,null]],"parameters":[]}]]],[13],[2,"\\n"],[6,[37,11],[[35,10]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,6],["/${partition}/${nspace}/${dc}/${type}",[30,[36,5],null,[["partition","nspace","dc","type"],[[35,4],[35,3],[35,2],[30,[36,1],[[35,0]],null]]]]],null],[30,[36,9],[[32,0],[30,[36,8],[[35,7]],null]],[["value"],["data"]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"data-collection",[],[["@type","@sort","@filters","@items"],[[34,0],"Name:asc",[30,[36,5],null,[["searchproperties"],[[30,[36,12],["Name"],null]]]],[34,13]]],[["default"],[{"statements":[[2,"\\n "],[8,"power-select",[],[["@searchEnabled","@search","@options","@loadingMessage","@searchMessage","@searchPlaceholder","@onOpen","@onClose","@onChange"],[true,[30,[36,9],[[32,0],[32,1,["search"]]],null],[30,[36,14],["Name:asc",[35,13]],null],"Loading...","No possible options",[34,15],[30,[36,9],[[32,0],[30,[36,8],[[35,10]],null],true],null],[30,[36,9],[[32,0],[30,[36,8],[[35,10]],null],false],null],[30,[36,9],[[32,0],"change","items[]",[35,16]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"yield-slot",[],[["@name","@params"],["option",[30,[36,17],[[32,2]],null]]],[["default"],[{"statements":[[18,3,null]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,11],[[30,[36,20],[[35,16,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[8,"yield-slot",[],[["@name"],["set"]],[["default"],[{"statements":[[18,3,null]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2,"\\n"]],"parameters":[]}]]],[13]],"hasEval":false,"upvars":["type","pluralize","dc","nspace","partition","hash","uri","allOptions","mut","action","isOpen","if","array","options","sort-by","placeholder","items","block-params","disabled","not","gt"]}',meta:{moduleName:"consul-ui/components/child-selector/index.hbs"}}) -var a=Ember._setComponentTemplate(r,Ember.Component.extend(n.default,{onchange:function(){},tagName:"",error:function(){},type:"",dom:Ember.inject.service("dom"),formContainer:Ember.inject.service("form"),item:Ember.computed.alias("form.data"),selectedOptions:Ember.computed.alias("items"),init:function(){this._super(...arguments),this._listeners=this.dom.listeners(),this.form=this.formContainer.form(this.type),this.form.clear({Datacenter:this.dc,Namespace:this.nspace})},willDestroyElement:function(){this._super(...arguments),this._listeners.remove()},options:Ember.computed("selectedOptions.[]","allOptions.[]",(function(){let e=this.allOptions||[] -const t=this.selectedOptions||[] -return Ember.get(t,"length")>0&&(e=e.filter(e=>!t.findBy("ID",Ember.get(e,"ID")))),e})),save:(0,t.task)((function*(e,t,n=function(){}){const r=this.repo -try{e=yield r.persist(e),this.actions.change.apply(this,[{target:{name:"items[]",value:t}},t,e]),n()}catch(a){this.error({error:a})}})),actions:{reset:function(){this.form.clear({Datacenter:this.dc,Namespace:this.nspace,Partition:this.partition})},remove:function(e,t){const n=this.repo.getSlugKey(),r=Ember.get(e,n),a=t.findIndex((function(e){return Ember.get(e,n)===r})) -if(-1!==a)return t.removeAt(a,1) -this.onchange({target:this})},change:function(e,t,n){const r=this.dom.normalizeEvent(...arguments),a=t -switch(r.target.name){case"items[]":Ember.set(n,"CreateTime",(new Date).getTime()),a.pushObject(n),this.onchange({target:this})}}}})) -e.default=a})),define("consul-ui/components/code-editor/index",["exports"],(function(e){function t(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;n{this.oninput(Ember.set(this,"value",e.target.wholeText))}),this.observer.observe(e,{attributes:!1,subtree:!0,childList:!1,characterData:!0}),Ember.set(this,"value",e.firstChild.wholeText)),Ember.set(this,"editor",this.helper.getEditor(this.element)),this.settings.findBySlug("code-editor").then(e=>{const t=this.modes,n=this.syntax -n&&(e=t.find((function(e){return e.name.toLowerCase()==n.toLowerCase()}))),e=e||t[0],this.setMode(e)})},didAppear:function(){this.editor.refresh()},actions:{change:function(e){this.settings.persist({"code-editor":e}),this.setMode(e)}}})) -e.default=s})),define("consul-ui/components/confirmation-alert/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"Ph3CAF0n",block:'{"symbols":["__arg0","__arg1","Actions","@onclick","&default","@name","&attrs"],"statements":[[18,5,null],[2,"\\n"],[8,"informed-action",[[24,0,"confirmation-alert warning"],[17,7]],[["@namedBlocksInfo"],[[30,[36,6],null,[["header","body","actions"],[0,0,1]]]]],[["default"],[{"statements":[[6,[37,5],[[30,[36,4],[[32,1],"header"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[8,"yield-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[18,5,null]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,4],[[32,1],"body"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[8,"yield-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[18,5,null]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,4],[[32,1],"actions"],null]],null,[["default"],[{"statements":[[6,[37,3],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Action"]],[[24,0,"dangerous"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"yield-slot",[],[["@name","@params"],["confirm",[30,[36,2],[[30,[36,1],["action"],[["onclick","tabindex"],[[30,[36,0],[[32,0],[32,4]],null],"-1"]]]],null]]],[["default"],[{"statements":[[2,"\\n "],[18,5,null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,3,["Action"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[],[["@for"],[[32,6]]],[["default"],[{"statements":[[2,"\\n Cancel\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["action","component","block-params","let","-is-named-block-invocation","if","hash"]}',meta:{moduleName:"consul-ui/components/confirmation-alert/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})),define("consul-ui/components/confirmation-dialog/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"hLDc+Wit",block:'{"symbols":["&default","&attrs"],"statements":[[11,"div"],[16,0,[30,[36,2],["with-confirmation",[30,[36,1],[[35,0]," confirming",""],null]],null]],[17,2],[12],[2,"\\n"],[18,1,null],[2,"\\n"],[8,"yield-slot",[],[["@name","@params"],["action",[30,[36,4],[[30,[36,3],[[32,0],"confirm"],null],[30,[36,3],[[32,0],"cancel"],null]],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,7],[[35,6],[30,[36,5],[[35,0]],null]],null]],null,[["default"],[{"statements":[[2," "],[18,1,null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n"],[8,"yield-slot",[],[["@name","@params"],["dialog",[30,[36,4],[[30,[36,3],[[32,0],"execute"],null],[30,[36,3],[[32,0],"cancel"],null],[35,9],[35,8]],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[35,0]],null,[["default"],[{"statements":[[2," "],[18,1,null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["confirming","if","concat","action","block-params","not","permanent","or","actionName","message"]}',meta:{moduleName:"consul-ui/components/confirmation-dialog/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:"",message:"Are you sure?",confirming:!1,permanent:!1,actions:{cancel:function(){Ember.set(this,"confirming",!1)},execute:function(){Ember.set(this,"confirming",!1),this.sendAction("actionName",...this.arguments)},confirm:function(){const[e,...t]=arguments -Ember.set(this,"actionName",e),Ember.set(this,"arguments",t),Ember.set(this,"confirming",!0)}}})) -e.default=r})),define("consul-ui/components/consul/acl/disabled/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"GJrj4o1x",block:'{"symbols":[],"statements":[[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n Tokens\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"Welcome to ACLs"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n ACLs are not enabled in this Consul cluster. We strongly encourage the use of ACLs in production environments for the best security practices.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/acl/index.html"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the documentation"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_LEARN_URL"],null],"/consul/security-networking/production-acls"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Follow the guide"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n\\n"]],"hasEval":false,"upvars":["env"]}',meta:{moduleName:"consul-ui/components/consul/acl/disabled/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/acl/selector/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"CGsTmKTv",block:'{"symbols":["@dc"],"statements":[[10,"li"],[14,0,"acls-separator"],[14,"role","separator"],[12],[2,"\\n Access Controls\\n"],[6,[37,1],[[30,[36,3],[[30,[36,2],["use acls"],null]],null]],null,[["default"],[{"statements":[[2," "],[11,"span"],[4,[38,5],["ACLs are not currently enabled in this cluster"],null],[12],[13],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n"],[10,"li"],[15,0,[30,[36,1],[[30,[36,0],["dc.acls.tokens",[32,1,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,4],["dc.acls.tokens",[32,1,["Name"]]],null]],[12],[2,"\\n Tokens\\n "],[13],[2,"\\n"],[13],[2,"\\n"],[6,[37,1],[[30,[36,2],["read acls"],null]],null,[["default","else"],[{"statements":[[10,"li"],[15,0,[30,[36,1],[[30,[36,0],["dc.acls.policies",[32,1,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,4],["dc.acls.policies",[32,1,["Name"]]],null]],[12],[2,"\\n Policies\\n "],[13],[2,"\\n"],[13],[2,"\\n"],[10,"li"],[15,0,[30,[36,1],[[30,[36,0],["dc.acls.roles",[32,1,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,4],["dc.acls.roles",[32,1,["Name"]]],null]],[12],[2,"\\n Roles\\n "],[13],[2,"\\n"],[13],[2,"\\n"],[10,"li"],[15,0,[30,[36,1],[[30,[36,0],["dc.acls.auth-methods",[32,1,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,4],["dc.acls.auth-methods",[32,1,["Name"]]],null]],[12],[2,"\\n Auth Methods\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,3],[[30,[36,2],["use acls"],null]],null]],null,[["default"],[{"statements":[[10,"li"],[15,0,[30,[36,1],[[30,[36,0],["dc.acls.policies",[32,1,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n Policies\\n "],[13],[2,"\\n"],[13],[2,"\\n"],[10,"li"],[15,0,[30,[36,1],[[30,[36,0],["dc.acls.roles",[32,1,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n Roles\\n "],[13],[2,"\\n"],[13],[2,"\\n"],[10,"li"],[15,0,[30,[36,1],[[30,[36,0],["dc.acls.auth-methods",[32,1,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n Auth Methods\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n"]],"hasEval":false,"upvars":["is-href","if","can","not","href-to","tooltip"]}',meta:{moduleName:"consul-ui/components/consul/acl/selector/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/auth-method/binding-list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"9xphbQEM",block:'{"symbols":["@item"],"statements":[[10,"div"],[14,0,"consul-auth-method-binding-list"],[12],[2,"\\n "],[10,"h2"],[12],[1,[32,1,["BindName"]]],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[14,0,"type"],[12],[1,[30,[36,0],["models.binding-rule.BindType"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["BindType"]]],[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,1,["BindType"]],"service"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["components.consul.auth-method.binding-list.bind-type.service"],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,1],[[32,1,["BindType"]],"node"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["components.consul.auth-method.binding-list.bind-type.node"],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,1],[[32,1,["BindType"]],"role"],null]],null,[["default"],[{"statements":[[2," "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["components.consul.auth-method.binding-list.bind-type.role"],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dt"],[12],[1,[30,[36,0],["models.binding-rule.Selector"],null]],[13],[2,"\\n "],[10,"dd"],[12],[10,"code"],[12],[1,[32,1,["Selector"]]],[13],[13],[2,"\\n "],[10,"dt"],[12],[1,[30,[36,0],["models.binding-rule.Description"],null]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,1,["Description"]]],[13],[2,"\\n "],[13],[2,"\\n"],[13]],"hasEval":false,"upvars":["t","eq","if"]}',meta:{moduleName:"consul-ui/components/consul/auth-method/binding-list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/auth-method/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"Xxbv7lp+",block:'{"symbols":["item","@items"],"statements":[[8,"list-collection",[[24,0,"consul-auth-method-list"]],[["@items"],[[32,2]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,1,["DisplayName"]],""],null]],null,[["default","else"],[{"statements":[[2," "],[10,"a"],[15,6,[30,[36,0],["dc.acls.auth-methods.show",[32,1,["Name"]]],null]],[12],[2,"\\n "],[1,[32,1,["DisplayName"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"a"],[15,6,[30,[36,0],["dc.acls.auth-methods.show",[32,1,["Name"]]],null]],[12],[2,"\\n "],[1,[32,1,["Name"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/auth-method/type",[],[["@item"],[[32,1]]],null],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,1,["DisplayName"]],""],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[12],[1,[32,1,["Name"]]],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[30,[36,3],[[32,1,["TokenLocality"]],"global"],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[14,0,"locality"],[12],[2,"creates global tokens"],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,1,["MaxTokenTTL"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"ttl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Maximum Time to Live: the maximum life of any token created by this auth method\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,1,["MaxTokenTTL"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["href-to","not-eq","if","eq"]}',meta:{moduleName:"consul-ui/components/consul/auth-method/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/auth-method/nspace-list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"Ej9L7VaQ",block:'{"symbols":["item","@items"],"statements":[[10,"div"],[14,0,"consul-auth-method-nspace-list"],[12],[2,"\\n "],[10,"table"],[12],[2,"\\n "],[10,"thead"],[12],[2,"\\n "],[10,"tr"],[12],[2,"\\n "],[10,"td"],[12],[1,[30,[36,0],["models.auth-method.Selector"],null]],[13],[2,"\\n "],[10,"td"],[12],[1,[30,[36,0],["models.auth-method.BindNamespace"],null]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"tbody"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[30,[36,1],[[32,2]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"tr"],[12],[2,"\\n "],[10,"td"],[12],[1,[32,1,["Selector"]]],[13],[2,"\\n "],[10,"td"],[12],[1,[32,1,["BindNamespace"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["t","-track-array","each"]}',meta:{moduleName:"consul-ui/components/consul/auth-method/nspace-list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/auth-method/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"KCBFWnGq",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","option","components","Optgroup","Option","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-auth-method-search-bar"],[17,28]],[["@filter","@namedBlocksInfo"],[[32,25],[30,[36,15],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,10],["components.consul.auth-method.search-bar.",[32,21,["status","key"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,21,["status","key"]]],null],[30,[36,10],["common.consul.",[32,21,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,10],["components.consul.auth-method.search-bar.",[32,21,["status","key"]],".options.",[32,21,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,21,["status","value"]]],null],[30,[36,10],["common.consul.",[32,21,["status","value"]]],null],[30,[36,10],["common.brand.",[32,21,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,21,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,10],[[32,22]," ",[32,23]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,22]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,23]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[22,23]}]]],[2,"\\n "]],"parameters":[21]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,16,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,26]],null],[32,27],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,16,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,25,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,17,["Optgroup"]],[32,17,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,25,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,19],[],[["@value","@selected"],[[32,20],[30,[36,9],[[32,20],[32,25,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[30,[36,14],[[32,20]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[20]}]]]],"parameters":[18,19]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[17]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[16]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,25,["kind","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.auth-method.search-bar.kind.name"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,13,["Optgroup"]],[32,13,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,15],[[24,0,"kubernetes"]],[["@value","@selected"],["kubernetes",[30,[36,9],["kubernetes",[32,25,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"Kubernetes"]],"parameters":[]}]]],[2,"\\n "],[8,[32,15],[[24,0,"jwt"]],[["@value","@selected"],["jwt",[30,[36,9],["jwt",[32,25,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"JWT"]],"parameters":[]}]]],[2,"\\n"],[6,[37,8],[[30,[36,13],["CONSUL_SSO_ENABLED"],null]],null,[["default"],[{"statements":[[2," "],[8,[32,15],[[24,0,"oidc"]],[["@value","@selected"],["oidc",[30,[36,9],["oidc",[32,25,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"OIDC"]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[14,15]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]],[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-locality"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,25,["source","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.auth-method.search-bar.locality.name"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["local","global"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[[16,0,[31,[[32,12]]]]],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,25,["types"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["components.consul.auth-method.search-bar.locality.options.",[32,12]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,24,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["MethodName:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["MethodName:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null],[30,[36,4],["TokenTTL:desc",[30,[36,0],["common.sort.duration.asc"],null]],null],[30,[36,4],["TokenTTL:asc",[30,[36,0],["common.sort.duration.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,24,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.ui.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["MethodName:asc",[30,[36,1],["MethodName:asc",[32,24,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["MethodName:desc",[30,[36,1],["MethodName:desc",[32,24,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.ui.maxttl"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["TokenTTL:desc",[30,[36,1],["TokenTTL:desc",[32,24,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.duration.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["TokenTTL:asc",[30,[36,1],["TokenTTL:asc",[32,24,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.duration.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","concat","-track-array","each","env","lowercase","hash"]}',meta:{moduleName:"consul-ui/components/consul/auth-method/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/auth-method/type/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"ikz01KlN",block:'{"symbols":["@item"],"statements":[[10,"span"],[15,0,[31,["consul-auth-method-type ",[32,1,["Type"]]]]],[12],[2,"\\n "],[1,[30,[36,1],[[30,[36,0],["common.brand.",[32,1,["Type"]]],null]],null]],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["concat","t"]}',meta:{moduleName:"consul-ui/components/consul/auth-method/type/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/auth-method/view/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"Fb1QS0ut",block:'{"symbols":["entry","entry","scope","bond","uri","value","bond","config","value","item","jtem","value","value","@item"],"statements":[[2," "],[10,"div"],[14,0,"consul-auth-method-view"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,14,["Type"]],"kubernetes"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Type"],null]],[13],[2,"\\n "],[10,"dd"],[12],[8,"consul/auth-method/type",[],[["@item"],[[32,14]]],null],[13],[2,"\\n\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[30,[36,10],["MaxTokenTTL","TokenLocality","DisplayName","Description"],null]],null]],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,3],[[32,14],[32,13]],null]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],[[30,[36,9],["models.auth-method.",[32,13]],null]],null]],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,3],[[32,14],[32,13]],null]],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[13]}]]],[6,[37,2],[[32,14,["Config","Host"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.Host"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,14,["Config","Host"]],[30,[36,7],["models.auth-method.Config.Host"],null]]],null],[2,"\\n "],[10,"span"],[12],[1,[32,14,["Config","Host"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","CACert"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.CACert"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"certificate",[],[["@item","@name"],[[32,14,["Config","CACert"]],[30,[36,7],["models.auth-method.Config.CACert"],null]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","ServiceAccountJWT"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.ServiceAccountJWT"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,14,["Config","ServiceAccountJWT"]],[30,[36,7],["models.auth-method.Config.ServiceAccountJWT"],null]]],null],[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[32,14,["Config","ServiceAccountJWT"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"section"],[14,0,"meta"],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Type"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"consul/auth-method/type",[],[["@item"],[[32,14]]],null],[2,"\\n "],[13],[2,"\\n\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[30,[36,10],["MaxTokenTTL","TokenLocality","DisplayName","Description"],null]],null]],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,3],[[32,14],[32,12]],null]],null,[["default"],[{"statements":[[2,"\\n "],[10,"dt"],[12],[1,[30,[36,7],[[30,[36,9],["models.auth-method.",[32,12]],null]],null]],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,3],[[32,14],[32,12]],null]],[13],[2,"\\n\\n"]],"parameters":[]}]]]],"parameters":[12]}]]],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,14,["Type"]],"aws-iam"],null]],null,[["default","else"],[{"statements":[[2,"\\n"],[6,[37,12],[[32,14,["Config"]]],null,[["default"],[{"statements":[[6,[37,6],[[30,[36,5],[[30,[36,5],[[30,[36,10],["BoundIAMPrincipalARNs","EnableIAMEntityDetails","IAMEntityTags","IAMEndpoint","MaxRetries","STSEndpoint","STSRegion","AllowedSTSHeaderValues","ServerIDHeaderValue"],null]],null]],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,3],[[32,8],[32,9]],null]],null,[["default"],[{"statements":[[2,"\\n "],[10,"dt"],[12],[1,[30,[36,7],[[30,[36,9],["models.auth-method.",[32,9]],null]],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n"],[6,[37,12],[[30,[36,3],[[32,8],[32,9]],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,11],[[32,10]],null]],null,[["default","else"],[{"statements":[[2," "],[10,"ul"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[32,10]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[10,"span"],[12],[1,[32,11]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[11]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,10]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[10]}]]],[2," "],[13],[2,"\\n\\n"]],"parameters":[]}]]]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[8]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,1],[[32,14,["Type"]],"jwt"],null]],null,[["default","else"],[{"statements":[[6,[37,2],[[32,14,["Config","JWKSURL"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.JWKSURL"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,14,["Config","JWKSURL"]],[30,[36,7],["models.auth-method.Config.JWKSURL"],null]]],null],[2,"\\n "],[10,"span"],[12],[1,[32,14,["Config","JWKSURL"]]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.JWKSCACert"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"certificate",[],[["@item","@name"],[[32,14,["Config","JWKSCACert"]],[30,[36,7],["models.auth-method.Config.JWKSCACert"],null]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","JWTValidationPubKeys"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.JWTValidationPubKeys"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"certificate",[],[["@item","@name"],[[32,14,["Config","JWTValidationPubKeys"]],[30,[36,7],["models.auth-method.Config.JWTValidationPubKeys"],null]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","OIDCDiscoveryURL"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.OIDCDiscoveryURL"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,14,["Config","OIDCDiscoveryURL"]],[30,[36,7],["models.auth-method.Config.OIDCDiscoveryURL"],null]]],null],[2,"\\n "],[10,"span"],[12],[1,[32,14,["Config","OIDCDiscoveryURL"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","JWTSupportedAlgs"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.JWTSupportedAlgs"],null]],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,8],[", ",[32,14,["Config","JWTSupportedAlgs"]]],null]],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","BoundAudiences"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.BoundAudiences"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[32,14,["Config","BoundAudiences"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[10,"span"],[12],[1,[32,7]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,6],[[30,[36,5],[[30,[36,5],[[30,[36,10],["BoundIssuer","ExpirationLeeway","NotBeforeLeeway","ClockSkewLeeway"],null]],null]],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,3],[[32,14,["Config"]],[32,6]],null]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],[[30,[36,9],["models.auth-method.Config.",[32,6]],null]],null]],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,3],[[32,14,["Config"]],[32,6]],null]],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[6]}]]]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,1],[[32,14,["Type"]],"oidc"],null]],null,[["default"],[{"statements":[[6,[37,2],[[32,14,["Config","OIDCDiscoveryURL"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.OIDCDiscoveryURL"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,14,["Config","OIDCDiscoveryURL"]],[30,[36,7],["models.auth-method.Config.OIDCDiscoveryURL"],null]]],null],[2,"\\n "],[10,"span"],[12],[1,[32,14,["Config","OIDCDiscoveryURL"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","OIDCDiscoveryCACert"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.OIDCDiscoveryCACert"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"certificate",[],[["@item","@name"],[[32,14,["Config","OIDCDiscoveryCACert"]],[30,[36,7],["models.auth-method.Config.OIDCDiscoveryCACert"],null]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","OIDCClientID"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.OIDCClientID"],null]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,14,["Config","OIDCClientID"]]],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","OIDCClientSecret"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.OIDCClientSecret"],null]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,14,["Config","OIDCClientSecret"]]],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","AllowedRedirectURIs"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.AllowedRedirectURIs"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[32,14,["Config","AllowedRedirectURIs"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,5],"Redirect URI"]],null],[2,"\\n "],[10,"span"],[12],[1,[32,5]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[5]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","BoundAudiences"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.BoundAudiences"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[32,14,["Config","BoundAudiences"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[10,"span"],[12],[1,[32,4]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[4]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","OIDCScopes"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.OIDCScopes"],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[32,14,["Config","OIDCScopes"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[10,"span"],[12],[1,[32,3]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[3]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","JWTSupportedAlgs"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[30,[36,7],["models.auth-method.Config.JWTSupportedAlgs"],null]],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,8],[", ",[32,14,["Config","JWTSupportedAlgs"]]],null]],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,14,["Config","VerboseOIDCLogging"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[14,0,"check"],[12],[1,[30,[36,7],["models.auth-method.Config.VerboseOIDCLogging"],null]],[13],[2,"\\n "],[10,"dd"],[12],[10,"input"],[14,"disabled","disabled"],[15,"checked",[32,14,["Config","VerboseOIDCLogging"]]],[14,4,"checkbox"],[12],[13],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n\\n"],[6,[37,2],[[30,[36,13],[[30,[36,1],[[32,14,["Type"]],"aws-iam"],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"hr"],[12],[13],[2,"\\n\\n "],[10,"section"],[14,0,"claim-mappings"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Claim Mappings"],[13],[2,"\\n"],[6,[37,2],[[32,14,["Config","ClaimMappings"]]],null,[["default","else"],[{"statements":[[2," "],[10,"p"],[12],[2,"Use this if the claim you are capturing is singular. When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[2,"\\n "],[10,"table"],[12],[2,"\\n "],[10,"thead"],[12],[2,"\\n "],[10,"tr"],[12],[2,"\\n "],[10,"td"],[12],[2,"Key"],[13],[2,"\\n "],[10,"td"],[12],[2,"Value"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"tbody"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[30,[36,4],[[32,14,["Config","ClaimMappings"]]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"tr"],[12],[2,"\\n "],[10,"td"],[12],[1,[30,[36,3],[[32,2],0],null]],[13],[2,"\\n "],[10,"td"],[12],[1,[30,[36,3],[[32,2],1],null]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"No claim mappings"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"Use this if the claim you are capturing is singular. When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,14,["Type"]],"jwt"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/jwt#claimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the documentation"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/oidc#claimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the documentation"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n "],[10,"hr"],[12],[13],[2,"\\n\\n "],[10,"section"],[14,0,"list-claim-mappings"],[12],[2,"\\n "],[10,"h2"],[12],[2,"List Claim Mappings"],[13],[2,"\\n"],[6,[37,2],[[32,14,["Config","ListClaimMappings"]]],null,[["default","else"],[{"statements":[[2," "],[10,"p"],[12],[2,"Use this if the claim you are capturing is list-like (such as groups). When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[2,"\\n "],[10,"table"],[12],[2,"\\n "],[10,"thead"],[12],[2,"\\n "],[10,"tr"],[12],[2,"\\n "],[10,"td"],[12],[2,"Key"],[13],[2,"\\n "],[10,"td"],[12],[2,"Value"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"tbody"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[30,[36,4],[[32,14,["Config","ListClaimMappings"]]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"tr"],[12],[2,"\\n "],[10,"td"],[12],[1,[30,[36,3],[[32,1],0],null]],[13],[2,"\\n "],[10,"td"],[12],[1,[30,[36,3],[[32,1],1],null]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"No list claim mappings"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"Use this if the claim you are capturing is list-like (such as groups). When mapped, the values can be any of a number, string, or boolean and will all be stringified when returned."],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,14,["Type"]],"jwt"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/jwt#listclaimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the documentation"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods/oidc#listclaimmappings"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the documentation"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13]],"hasEval":false,"upvars":["env","eq","if","get","entries","-track-array","each","t","join","concat","array","array-is-array","let","not"]}',meta:{moduleName:"consul-ui/components/consul/auth-method/view/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/bucket/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"WPJVSna7",block:'{"symbols":["@item","@service","@nspace","@partition"],"statements":[[6,[37,2],[[30,[36,1],[[32,4],[30,[36,4],["use partitions"],null]],null]],null,[["default","else"],[{"statements":[[6,[37,2],[[30,[36,3],[[32,1,["Partition"]],[32,4]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"consul-bucket-list"],[12],[2,"\\n "],[11,"dt"],[24,0,"partition"],[4,[38,0],null,null],[12],[2,"\\n Admin Partition\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Partition"]]],[2,"\\n "],[13],[2,"\\n "],[11,"dt"],[24,0,"nspace"],[4,[38,0],null,null],[12],[2,"\\n Namespace\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Namespace"]]],[2,"\\n "],[13],[2,"\\n\\n"],[6,[37,2],[[30,[36,1],[[32,2],[32,1,["Service"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[14,0,"service"],[12],[2,"\\n Service\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Service"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,1],[[32,3],[30,[36,4],["use nspace"],null]],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,3],[[32,1,["Namespace"]],[32,3]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"consul-bucket-list"],[12],[2,"\\n "],[11,"dt"],[24,0,"nspace"],[4,[38,0],null,null],[12],[2,"\\n Namespace\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Namespace"]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,2],[32,1,["Service"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[14,0,"service"],[12],[2,"\\n Service\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Service"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["tooltip","and","if","not-eq","can"]}',meta:{moduleName:"consul-ui/components/consul/bucket/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/datacenter/selector/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"5dl+NDsZ",block:'{"symbols":["disclosure","panel","menu","item","@dc","@nspace","@dcs"],"statements":[[10,"li"],[14,0,"dcs"],[12],[2,"\\n "],[8,"disclosure-menu",[[24,"aria-label","Datacenter"]],[["@items"],[[30,[36,8],["Primary:desc","Local:desc","Name:asc",[32,7]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,1,["Action"]],[[4,[38,7],["click",[32,1,["toggle"]]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[32,5,["Name"]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,1,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,9],["/*/*/*/datacenters"],null],[30,[36,11],[[32,0],[30,[36,10],[[32,7]],null]],[["value"],["data"]]]]],null],[2,"\\n "],[8,[32,2,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n"],[6,[37,13],[[30,[36,12],[[30,[36,12],[[32,3,["items"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,3,["Item"]],[[16,"aria-current",[30,[36,1],[[30,[36,0],[[32,5,["Name"]],[32,4,["Name"]]],null],"true"],null]],[16,0,[30,[36,3],[[30,[36,2],["is-local",[32,4,["Local"]]],null],[30,[36,2],["is-primary",[32,4,["Primary"]]],null]],null]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Action"]],[[4,[38,7],["click",[32,1,["close"]]],null]],[["@href"],[[30,[36,6],["."],[["params"],[[30,[36,5],null,[["dc","partition","nspace"],[[32,4,["Name"]],[29],[30,[36,1],[[30,[36,4],[[32,6,["length"]],0],null],[32,6],[29]],null]]]]]]]]],[["default"],[{"statements":[[2,"\\n "],[1,[32,4,["Name"]]],[2,"\\n"],[6,[37,1],[[32,4,["Primary"]]],null,[["default"],[{"statements":[[2," "],[10,"span"],[12],[2,"Primary"],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,1],[[32,4,["Local"]]],null,[["default"],[{"statements":[[2," "],[10,"span"],[12],[2,"Local"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[4]}]]],[2," "]],"parameters":[3]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["eq","if","array","class-map","gt","hash","href-to","on","sort-by","uri","mut","action","-track-array","each"]}',meta:{moduleName:"consul-ui/components/consul/datacenter/selector/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/discovery-chain/index",["exports","consul-ui/components/consul/discovery-chain/utils"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"tgH7XXQj",block:'{"symbols":["item","dest","item","item","dest","item","dest","splitter","src","item","index","destRect","dest","item","src","destRect","dest","item","item","item"],"statements":[[10,"style"],[12],[2,"\\n"],[6,[37,6],[[35,19,["nodes"]]],null,[["default"],[{"statements":[[2," "],[1,[35,19,["nodes"]]],[2," {\\n opacity: 1 !important;\\n\\n background-color: var(--tone-gray-000);\\n border: var(--decor-border-100);\\n border-radius: var(--decor-radius-200);\\n border-color: rgb(var(--tone-gray-500));\\n box-shadow: var(--decor-elevation-600);\\n }\\n"]],"parameters":[]}]]],[6,[37,6],[[35,19,["edges"]]],null,[["default"],[{"statements":[[2," "],[1,[35,19,["edges"]]],[2," {\\n opacity: 1;\\n }\\n"]],"parameters":[]}]]],[13],[2,"\\n\\n"],[10,"div"],[14,0,"routes"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[35,20,["ServiceName"]]],[2," Router\\n "],[11,"span"],[4,[38,12],["Use routers to intercept traffic using Layer 7 criteria such as path prefixes or http headers."],null],[12],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,"role","group"],[12],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[35,21]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/discovery-chain/route-card",[[4,[38,18],[[30,[36,17],[[30,[36,16],[[32,20],"rect"],null]],[["from"],[[32,0,["edges"]]]]]],null]],[["@item","@onclick"],[[32,20],[30,[36,15],[[32,0],"click"],null]]],null],[2,"\\n"]],"parameters":[20]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n\\n"],[10,"div"],[14,0,"splitters"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h2"],[12],[2,"\\n Splitters\\n "],[11,"span"],[4,[38,12],["Splitters are configured to split incoming requests across different services or subsets of a single service."],null],[12],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,"role","group"],[12],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[30,[36,23],["Name",[35,22]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/discovery-chain/splitter-card",[[4,[38,18],[[30,[36,17],[[30,[36,16],[[32,19],"rect"],null]],[["from"],[[32,0,["edges"]]]]]],null]],[["@item","@onclick"],[[32,19],[30,[36,15],[[32,0],"click"],null]]],null],[2,"\\n"]],"parameters":[19]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n\\n"],[10,"div"],[14,0,"resolvers"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h2"],[12],[2,"\\n Resolvers\\n "],[11,"span"],[4,[38,12],["Resolvers are used to define which instances of a service should satisfy discovery requests."],null],[12],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,"role","group"],[12],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[30,[36,23],["Name",[35,24]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/discovery-chain/resolver-card",[[4,[38,18],[[30,[36,17],[[30,[36,16],[[32,18],"rect"],null]],[["from"],[[32,0,["edges"]]]]]],null]],[["@item","@edges","@onclick"],[[32,18],[32,0,["edges"]],[30,[36,15],[[32,0],"click"],null]]],null],[2,"\\n"]],"parameters":[18]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n\\n"],[1,[34,25]],[2,"\\n\\n"],[11,"svg"],[24,0,"edges"],[24,"width","100%"],[24,"height","100%"],[24,"preserveAspectRatio","none"],[4,[38,26],[[30,[36,16],[[32,0],"edges"],null]],null],[12],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[35,21]],null]],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,14,["rect"]]],null,[["default"],[{"statements":[[6,[37,4],[[32,14,["rect"]],[32,14,["NextItem","rect"]]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,13],[[30,[36,2],null,[["x","y"],[[32,16,["x"]],[30,[36,1],[[32,16,["y"]],[30,[36,0],[[32,16,["height"]],2],null]],null]]]],[30,[36,9],[[32,14,["ID"]]],null]],null]],null,[["default"],[{"statements":[[2,"\\n "],[10,"path"],[15,1,[30,[36,9],[[32,14,["ID"]],">",[32,14,["NextNode"]]],null]],[15,"d",[30,[36,10],[[30,[36,2],null,[["x","y"],[[32,17,["x"]],[30,[36,14],[[32,17,["y"]],0],null]]]]],[["src"],[[30,[36,2],null,[["x","y"],[[32,15,["right"]],[30,[36,1],[[32,15,["y"]],[30,[36,0],[[32,15,["height"]],2],null]],null]]]]]]]],[12],[13],[2,"\\n\\n"]],"parameters":[17]}]]]],"parameters":[15,16]}]]]],"parameters":[]}]]]],"parameters":[14]}]]],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[35,22]],null]],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,8,["rect"]]],null,[["default"],[{"statements":[[6,[37,4],[[32,8,["rect"]]],null,[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[30,[36,7],[[32,8,["Splits"]]],null]],null]],null,[["default"],[{"statements":[[6,[37,4],[[32,10,["NextItem","rect"]]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,13],[[30,[36,2],null,[["x","y"],[[32,12,["x"]],[30,[36,1],[[32,12,["y"]],[30,[36,0],[[32,12,["height"]],2],null]],null]]]],[30,[36,9],[[32,8,["ID"]],"-",[32,11]],null]],null]],null,[["default"],[{"statements":[[2,"\\n "],[11,"path"],[16,1,[30,[36,9],["splitter:",[32,8,["Name"]],">",[32,10,["NextNode"]]],null]],[24,0,"split"],[16,"d",[30,[36,10],[[30,[36,2],null,[["x","y"],[[32,13,["x"]],[32,13,["y"]]]]]],[["src"],[[30,[36,2],null,[["x","y"],[[32,9,["right"]],[30,[36,1],[[32,9,["y"]],[30,[36,0],[[32,9,["height"]],2],null]],null]]]]]]]],[4,[38,12],[[30,[36,9],[[30,[36,11],[[30,[36,3],[[32,10,["Weight"]],0],null]],[["decimals"],[2]]],"%"],null]],[["options"],[[30,[36,2],null,[["followCursor"],[true]]]]]],[12],[13],[2,"\\n\\n"]],"parameters":[13]}]]]],"parameters":[12]}]]]],"parameters":[10,11]}]]]],"parameters":[9]}]]]],"parameters":[]}]]]],"parameters":[8]}]]],[2,"\\n"],[13],[2,"\\n\\n"],[10,"svg"],[14,0,"resolver-inlets"],[14,"height","100%"],[12],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[35,21]],null]],null]],null,[["default"],[{"statements":[[6,[37,6],[[30,[36,5],[[32,6,["NextNode"]],"resolver:"],null]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,6,["NextItem","rect"]],[30,[36,2],null,[["y","height"],[0,0]]]],null]],null,[["default"],[{"statements":[[2," "],[10,"circle"],[14,"r","2.5"],[14,"cx","5"],[15,"cy",[30,[36,1],[[32,7,["y"]],[30,[36,0],[[32,7,["height"]],2],null]],null]],[12],[13],[2,"\\n"]],"parameters":[7]}]]]],"parameters":[]}]]]],"parameters":[6]}]]],[6,[37,8],[[30,[36,7],[[30,[36,7],[[35,22]],null]],null]],null,[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[30,[36,7],[[32,3,["Splits"]]],null]],null]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,4,["NextItem","rect"]],[30,[36,2],null,[["y","height"],[0,0]]]],null]],null,[["default"],[{"statements":[[2," "],[10,"circle"],[14,"r","2.5"],[14,"cx","5"],[15,"cy",[30,[36,1],[[32,5,["y"]],[30,[36,0],[[32,5,["height"]],2],null]],null]],[12],[13],[2,"\\n"]],"parameters":[5]}]]]],"parameters":[4]}]]]],"parameters":[3]}]]],[13],[2,"\\n\\n"],[10,"svg"],[14,0,"splitter-inlets"],[14,"height","100%"],[12],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[35,21]],null]],null]],null,[["default"],[{"statements":[[6,[37,6],[[30,[36,5],[[32,1,["NextNode"]],"splitter:"],null]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,1,["NextItem","rect"]],[30,[36,2],null,[["y","height"],[0,0]]]],null]],null,[["default"],[{"statements":[[2," "],[10,"circle"],[14,"r","2.5"],[14,"cx","5"],[15,"cy",[30,[36,1],[[32,2,["y"]],[30,[36,0],[[32,2,["height"]],2],null]],null]],[12],[13],[2,"\\n"]],"parameters":[2]}]]]],"parameters":[]}]]]],"parameters":[1]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["div","add","hash","or","let","string-starts-with","if","-track-array","each","concat","svg-curve","round","tooltip","tween-to","sub","action","set","dom-position","on-resize","selected","chain","routes","splitters","sort-by","resolvers","nodes","did-insert"]}',meta:{moduleName:"consul-ui/components/consul/discovery-chain/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend({dom:Ember.inject.service("dom"),ticker:Ember.inject.service("ticker"),dataStructs:Ember.inject.service("data-structs"),classNames:["discovery-chain"],classNameBindings:["active"],selectedId:"",init:function(){this._super(...arguments),this._listeners=this.dom.listeners()},didInsertElement:function(){this._listeners.add(this.dom.document(),{click:e=>{this.dom.closest('[class$="-card"]',e.target)||(Ember.set(this,"active",!1),Ember.set(this,"selectedId",""))}})},willDestroyElement:function(){this._super(...arguments),this._listeners.remove(),this.ticker.destroy(this)},splitters:Ember.computed("chain.Nodes",(function(){return(0,t.getSplitters)(Ember.get(this,"chain.Nodes"))})),routes:Ember.computed("chain.Nodes",(function(){const e=(0,t.getRoutes)(Ember.get(this,"chain.Nodes"),this.dom.guid) -if(!e.find(e=>"/"===Ember.get(e,"Definition.Match.HTTP.PathPrefix"))&&!e.find(e=>void 0===e.Definition)){let n -const r=`resolver:${this.chain.ServiceName}.${this.chain.Namespace}.${this.chain.Partition}.${this.chain.Datacenter}`,a=`splitter:${this.chain.ServiceName}.${this.chain.Namespace}.${this.chain.Partition}` -if(void 0!==this.chain.Nodes[a]?n=a:void 0!==this.chain.Nodes[r]&&(n=r),void 0!==n){const r={Default:!0,ID:"route:"+this.chain.ServiceName,Name:this.chain.ServiceName,Definition:{Match:{HTTP:{PathPrefix:"/"}}},NextNode:n} -e.push((0,t.createRoute)(r,this.chain.ServiceName,this.dom.guid))}}return e})),nodes:Ember.computed("routes","splitters","resolvers",(function(){let e=this.resolvers.reduce((e,t)=>(e["resolver:"+t.ID]=t,t.Children.reduce((e,t)=>(e["resolver:"+t.ID]=t,e),e),e),{}) -return e=this.splitters.reduce((e,t)=>(e[t.ID]=t,e),e),e=this.routes.reduce((e,t)=>(e[t.ID]=t,e),e),Object.entries(e).forEach(([t,n])=>{void 0!==n.NextNode&&(n.NextItem=e[n.NextNode]),void 0!==n.Splits&&n.Splits.forEach(t=>{void 0!==t.NextNode&&(t.NextItem=e[t.NextNode])})}),""})),resolvers:Ember.computed("chain.{Nodes,Targets}",(function(){return(0,t.getResolvers)(this.chain.Datacenter,this.chain.Partition,this.chain.Namespace,Ember.get(this,"chain.Targets"),Ember.get(this,"chain.Nodes"))})),graph:Ember.computed("splitters","routes.[]",(function(){const e=this.dataStructs.graph() -return this.splitters.forEach(t=>{t.Splits.forEach(n=>{e.addLink(t.ID,n.NextNode)})}),this.routes.forEach(t=>{e.addLink(t.ID,t.NextNode)}),e})),selected:Ember.computed("selectedId","graph",(function(){if(""===this.selectedId||!this.dom.element("#"+this.selectedId))return{} -const e=this.selectedId,t=e.split(":").shift(),n=[e],r=[] -return this.graph.forEachLinkedNode(e,(e,a)=>{n.push(e.id),r.push(`${a.fromId}>${a.toId}`),this.graph.forEachLinkedNode(e.id,(e,a)=>{const l=e.id.split(":").shift() -t!==l&&"splitter"!==t&&"splitter"!==l&&(n.push(e.id),r.push(`${a.fromId}>${a.toId}`))})}),{nodes:n.map(e=>"#"+CSS.escape(e)),edges:r.map(e=>"#"+CSS.escape(e))}})),actions:{click:function(e){const t=e.currentTarget.getAttribute("id") -t===this.selectedId?(Ember.set(this,"active",!1),Ember.set(this,"selectedId","")):(Ember.set(this,"active",!0),Ember.set(this,"selectedId",t))}}})) -e.default=r})),define("consul-ui/components/consul/discovery-chain/resolver-card/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"2+oC+0pQ",block:'{"symbols":["child","target","target","item","@onclick","@edges","@item","&attrs"],"statements":[[10,"div"],[14,0,"resolver-card"],[12],[2,"\\n "],[11,"header"],[17,8],[16,"onclick",[30,[36,5],[[32,5]],null]],[16,1,[30,[36,0],["resolver:",[32,7,["ID"]]],null]],[12],[2,"\\n "],[10,"a"],[14,3,""],[12],[2,"\\n "],[10,"h3"],[12],[1,[32,7,["Name"]]],[13],[2,"\\n"],[6,[37,4],[[32,7,["Failover"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"failover"],[12],[2,"\\n "],[11,"dt"],[4,[38,1],[[30,[36,0],[[32,7,["Failover","Type"]]," failover"],null]],null],[12],[2,"\\n "],[1,[30,[36,0],[[32,7,["Failover","Type"]]," failover"],null]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"ol"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,2],[[32,7,["Failover","Targets"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[10,"span"],[12],[1,[32,4]],[13],[13],[2,"\\n"]],"parameters":[4]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[30,[36,9],[[32,7,["Children","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"ul"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,2],[[32,7,["Children"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[11,"li"],[16,"onclick",[30,[36,5],[[32,5]],null]],[16,1,[30,[36,0],["resolver:",[32,1,["ID"]]],null]],[4,[38,8],[[30,[36,7],[[30,[36,6],[[32,1],"rect"],null]],[["from"],[[32,6]]]]],null],[12],[2,"\\n "],[10,"a"],[14,3,""],[12],[2,"\\n"],[6,[37,4],[[32,1,["Redirect"]]],null,[["default","else"],[{"statements":[[2," "],[10,"dl"],[14,0,"redirect"],[12],[2,"\\n "],[11,"dt"],[4,[38,1],[[30,[36,0],[[32,1,["Redirect"]]," redirect"],null]],null],[12],[2,"\\n "],[1,[32,1,["Redirect"]]],[2," redirect\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Name"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[32,1,["Failover"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"failover"],[12],[2,"\\n "],[11,"dt"],[4,[38,1],[[30,[36,0],[[32,1,["Failover","Type"]]," failover"],null]],null],[12],[2,"\\n "],[1,[32,1,["Failover","Type"]]],[2," failover\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"ol"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,2],[[32,1,["Failover","Targets"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[10,"span"],[12],[1,[32,3]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[3]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,4],[[32,1,["Failover"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,1,["Name"]]],[2,"\\n "],[10,"dl"],[14,0,"failover"],[12],[2,"\\n "],[11,"dt"],[4,[38,1],[[30,[36,0],[[32,1,["Failover","Type"]]," failover"],null]],null],[12],[2,"\\n "],[1,[30,[36,0],[[32,1,["Failover","Type"]]," failover"],null]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"ol"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,2],[[32,1,["Failover","Targets"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[10,"span"],[12],[1,[32,2]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,1,["Name"]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["concat","tooltip","-track-array","each","if","optional","set","dom-position","on-resize","gt"]}',meta:{moduleName:"consul-ui/components/consul/discovery-chain/resolver-card/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/discovery-chain/route-card/index",["exports","@glimmer/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"m02p4dNF",block:'{"symbols":["item","item","item","@item","@onclick","&attrs"],"statements":[[11,"a"],[24,0,"route-card"],[16,"onclick",[32,5]],[16,1,[32,4,["ID"]]],[17,6],[12],[2,"\\n "],[10,"header"],[15,0,[30,[36,5],[[30,[36,4],[[32,0,["path","value"]],"/"],null],"short"],null]],[12],[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,4,["Definition","Match","HTTP","Methods","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"ul"],[14,0,"match-methods"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,2],[[32,4,["Definition","Match","HTTP","Methods"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[1,[32,3]],[13],[2,"\\n"]],"parameters":[3]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[1,[32,0,["path","type"]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,0,["path","value"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,4,["Definition","Match","HTTP","Header","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"section"],[14,0,"match-headers"],[12],[2,"\\n "],[11,"header"],[4,[38,1],["Header"],null],[12],[2,"\\n "],[10,"h4"],[12],[2,"Headers"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,2],[[32,4,["Definition","Match","HTTP","Header"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[2,"\\n "],[1,[32,2,["Name"]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,0],[[32,2]],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,5],[[30,[36,6],[[32,4,["Definition","Match","HTTP","QueryParam","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"section"],[14,0,"match-queryparams"],[12],[2,"\\n "],[11,"header"],[4,[38,1],["Query Params"],null],[12],[2,"\\n "],[10,"h4"],[12],[2,"Query Params"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,2],[[32,4,["Definition","Match","HTTP","QueryParam"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[2,"\\n "],[1,[32,1,["Name"]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,0],[[32,1]],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["route-match","tooltip","-track-array","each","eq","if","gt"]}',meta:{moduleName:"consul-ui/components/consul/discovery-chain/route-card/index.hbs"}}) -class r extends t.default{get path(){return Object.entries(Ember.get(this.args.item,"Definition.Match.HTTP")||{}).reduce((function(e,[t,n]){return t.toLowerCase().startsWith("path")?{type:t.replace("Path",""),value:n}:e}),{type:"Prefix",value:"/"})}}e.default=r,Ember._setComponentTemplate(n,r)})),define("consul-ui/components/consul/discovery-chain/splitter-card/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"fGt7Ht9M",block:'{"symbols":["&attrs","@item","@onclick"],"statements":[[10,"div"],[12],[2,"\\n "],[11,"a"],[17,1],[16,1,[32,2,["ID"]]],[24,0,"splitter-card"],[16,"onclick",[30,[36,0],[[32,3]],null]],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h3"],[12],[1,[32,2,["Name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["optional"]}',meta:{moduleName:"consul-ui/components/consul/discovery-chain/splitter-card/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/discovery-chain/utils",["exports"],(function(e){function t(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;ne.Type===t)},l=function(e,t,n="default",r="default",a){return void 0===e[t]&&(e[t]={ID:`${t}.${n}.${r}.${a}`,Name:t,Children:[]}),e[t]},s=function(e,t){let n -const r=e.map((function(e){const[r,a]=[t,e].map(e=>e.split(".").reverse()),l=["Datacenter","Partition","Namespace","Service","Subset"] -return a.find((function(e,t){const a=e!==r[t] -return a&&(n=l[t]),a}))})) -return{Type:n,Targets:r}} -e.getAlternateServices=s -e.getSplitters=function(e){return a(e,"splitter").map((function(e){const t=e.Name.split(".") -return t.reverse(),t.shift(),t.shift(),t.reverse(),n(n({},e),{},{ID:"splitter:"+e.Name,Name:t.join(".")})}))} -e.getRoutes=function(e,t){return a(e,"router").reduce((function(e,n){return e.concat(n.Routes.map((function(e){return i(e,n.Name,t)})))}),[])} -e.getResolvers=function(e,t="default",n="default",r={},a={}){const i={} -return Object.values(a).filter(e=>"resolver"===e.Type).forEach((function(r){const a=r.Name.split(".") -let o -a.length>4&&(o=a.shift()),a.reverse(),a.shift(),a.shift(),a.shift(),a.reverse() -const u=a.join("."),c=l(i,u,n,t,e) -let d -if(void 0!==r.Resolver.Failover&&(d=s(r.Resolver.Failover.Targets,r.Name)),o){const e={Subset:!0,ID:r.Name,Name:o} -void 0!==d&&(e.Failover=d),c.Children.push(e)}else void 0!==d&&(c.Failover=d)})),Object.values(r).forEach(r=>{if(void 0!==a["resolver:"+r.ID]){const o=s([r.ID],`service.${n}.${t}.${e}`) -if("Service"!==o.Type){const u=l(i,r.Service,n,t,e),c={Redirect:o.Type,ID:r.ID,Name:r[o.Type]} -void 0!==a["resolver:"+r.ID].Resolver.Failover&&(c.Failover=s(a["resolver:"+r.ID].Resolver.Failover.Targets,r.ID)),u.Children.push(c)}}}),Object.values(i)} -const i=function(e,t,r){return n(n({},e),{},{Default:e.Default||void 0===e.Definition.Match,ID:`route:${t}-${r(e.Definition)}`})} -e.createRoute=i})),define("consul-ui/components/consul/exposed-path/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"JI0j+pbJ",block:'{"symbols":["path","combinedAddress","@address","&attrs","@items"],"statements":[[11,"div"],[24,0,"consul-exposed-path-list"],[17,4],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,4],[[30,[36,3],[[30,[36,3],[[32,5]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[10,"div"],[14,0,"header"],[12],[2,"\\n"],[6,[37,1],[[30,[36,0],[[32,3],":",[32,1,["ListenerPort"]],[32,1,["Path"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"p"],[14,0,"combined-address"],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[32,2]],[2,"\\n "],[13],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,2],"Address"]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]],[2," "],[13],[2,"\\n "],[10,"div"],[14,0,"detail"],[12],[2,"\\n"],[6,[37,2],[[32,1,["Protocol"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"protocol"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Protocol\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Protocol"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,1,["ListenerPort"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"port"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Listener Port\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n listening on :"],[1,[32,1,["ListenerPort"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,1,["LocalPathPort"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"port"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Local Path Port\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n local port :"],[1,[32,1,["LocalPathPort"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,2],[[32,1,["Path"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"path"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Path\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Path"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["concat","let","if","-track-array","each"]}',meta:{moduleName:"consul-ui/components/consul/exposed-path/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/external-source/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"uL9PpB5h",block:'{"symbols":["externalSource","@label","&attrs","@withInfo","@item"],"statements":[[6,[37,2],[[32,5]],null,[["default"],[{"statements":[[6,[37,7],[[30,[36,6],[[32,5]],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,5],[[32,4],[30,[36,4],[[32,1],"consul-api-gateway"],null]],null]],null,[["default","else"],[{"statements":[[2," "],[10,"dl"],[14,0,"tooltip-panel"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[11,"span"],[16,0,[31,["consul-external-source ",[32,1]]]],[17,3],[12],[2,"\\n Registered via "],[1,[30,[36,1],[[30,[36,0],["common.brand.",[32,1]],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"menu-panel",[],[["@position","@menu"],["left",false]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n API Gateways manage north-south traffic from external services to services in the Datacenter. For more information, read our documentation.\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,"role","separator"],[12],[2,"\\n About "],[1,[30,[36,1],[[30,[36,0],["common.brand.",[32,1]],null]],null]],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,"role","none"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[30,[36,0],[[30,[36,3],["CONSUL_DOCS_LEARN_URL"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"\\n Learn guides\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,1]],null,[["default"],[{"statements":[[2," "],[11,"span"],[16,0,[31,["consul-external-source ",[32,1]]]],[17,3],[12],[2,"\\n"],[6,[37,2],[[32,2]],null,[["default","else"],[{"statements":[[2," "],[1,[32,2]],[2,"\\n"]],"parameters":[]},{"statements":[[2," Registered via "],[1,[30,[36,1],[[30,[36,0],["common.brand.",[32,1]],null]],null]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["concat","t","if","env","eq","and","service/external-source","let"]}',meta:{moduleName:"consul-ui/components/consul/external-source/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/health-check/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"IRYzjPsd",block:'{"symbols":["item","&attrs","@items"],"statements":[[11,"div"],[24,0,"consul-health-check-list"],[17,2],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[32,3]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[15,0,[30,[36,1],["health-check-output ",[32,1,["Status"]]],null]],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h2"],[12],[1,[32,1,["Name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[32,1,["Kind"]],"node"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"dt"],[12],[2,"NodeName"],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,1,["Node"]]],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"dt"],[12],[2,"ServiceName"],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,1,["ServiceName"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"CheckID"],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,4],[[32,1,["CheckID"]],"-"],null]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Type"],[13],[2,"\\n "],[10,"dd"],[14,"data-health-check-type",""],[12],[2,"\\n "],[1,[32,1,["Type"]]],[2,"\\n"],[6,[37,3],[[32,1,["Exposed"]]],null,[["default"],[{"statements":[[2," "],[11,"em"],[4,[38,0],["Expose.checks is set to true, so all registered HTTP and gRPC check paths are exposed through Envoy for the Consul agent."],null],[12],[2,"Exposed"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Notes"],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,4],[[32,1,["Notes"]],"-"],null]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Output"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"pre"],[12],[10,"code"],[12],[1,[32,1,["Output"]]],[13],[13],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,1,["Output"]],"output"]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["tooltip","concat","eq","if","or","-track-array","each"]}',meta:{moduleName:"consul-ui/components/consul/health-check/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/health-check/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"FSYiXBjC",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","item","components","Optgroup","Option","item","components","Optgroup","Option","state","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-healthcheck-search-bar"],[17,33]],[["@filter","@namedBlocksInfo"],[[32,30],[30,[36,14],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,10],["components.consul.health-check.search-bar.",[32,26,["status","key"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,26,["status","key"]]],null],[30,[36,10],["common.consul.",[32,26,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,10],["components.consul.health-check.search-bar.",[32,26,["status","key"]],".options.",[32,26,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,26,["status","value"]]],null],[30,[36,10],["common.consul.",[32,26,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,26,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,10],[[32,27]," ",[32,28]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,27]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,28]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[27,28]}]]],[2,"\\n "]],"parameters":[26]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,21,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,31]],null],[32,32],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[32,30,["searchproperty"]]],null,[["default"],[{"statements":[[2," "],[8,[32,21,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,30,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,22,["Optgroup"]],[32,22,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,30,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,24],[],[["@value","@selected"],[[32,25],[30,[36,9],[[32,25],[32,30,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[30,[36,13],[[32,25]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[25]}]]]],"parameters":[23,24]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[22]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[21]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,30,["status","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.consul.status"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,17,["Optgroup"]],[32,17,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["passing","warning","critical","empty"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,19],[[16,0,[31,["value-",[32,20]]]]],[["@value","@selected"],[[32,20],[30,[36,9],[[32,20],[32,30,["status","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[32,20]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,20]],null]],null]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[20]}]]]],"parameters":[18,19]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[17]}]]],[2,"\\n"],[6,[37,8],[[32,30,["kind"]]],null,[["default"],[{"statements":[[2," "],[8,[32,8,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,30,["kind","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.health-check.search-bar.kind.name"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,13,["Optgroup"]],[32,13,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["service","node"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,15],[],[["@value","@selected"],[[32,16],[30,[36,9],[[32,16],[32,30,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["components.consul.health-check.search-bar.kind.options.",[32,16]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,16]],null]],null]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[16]}]]]],"parameters":[14,15]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,[32,8,["Select"]],[[24,0,"type-check"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,30,["check","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.health-check.search-bar.check.name"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["alias","docker","grpc","http","script","serf","tcp","ttl"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,30,["check","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["components.consul.health-check.search-bar.check.options.",[32,12]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,12]],null]],null]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,29,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Name:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Name:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null],[30,[36,4],["Status:asc",[30,[36,0],["common.sort.status.asc"],null]],null],[30,[36,4],["Status:desc",[30,[36,0],["common.sort.status.desc"],null]],null],[30,[36,4],["Kind:asc",[30,[36,0],["components.consul.health-check.search-bar.sort.kind.asc"],null]],null],[30,[36,4],["Kind:desc",[30,[36,0],["components.consul.health-check.search-bar.sort.kind.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,29,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.status"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:asc",[30,[36,1],["Status:asc",[32,29,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:desc",[30,[36,1],["Status:desc",[32,29,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["components.consul.health-check.search-bar.sort.name.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:asc",[30,[36,1],["Name:asc",[32,29,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:desc",[30,[36,1],["Name:desc",[32,29,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["components.consul.health-check.search-bar.sort.kind.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Kind:asc",[30,[36,1],["Kind:asc",[32,29]],null]]],[["default"],[{"statements":[[2,"Service to Node"]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Kind:desc",[30,[36,1],["Kind:desc",[32,29]],null]]],[["default"],[{"statements":[[2,"Node to Service"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","concat","-track-array","each","lowercase","hash"]}',meta:{moduleName:"consul-ui/components/consul/health-check/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})) -define("consul-ui/components/consul/instance-checks/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"rPbWf6F2",block:'{"symbols":["grouped","checks","status","humanized","@type","@items","&attrs"],"statements":[[6,[37,8],[[30,[36,10],["Status",[30,[36,3],[[32,6],[30,[36,5],null,null]],null]],null]],null,[["default"],[{"statements":[[6,[37,8],[[30,[36,3],[[30,[36,2],[[30,[36,9],[[32,1,["critical","length"]],0],null],[32,1,["critical"]]],null],[30,[36,2],[[30,[36,9],[[32,1,["warning","length"]],0],null],[32,1,["warning"]]],null],[30,[36,2],[[30,[36,9],[[32,1,["passing","length"]],0],null],[32,1,["passing"]]],null],[30,[36,5],null,null]],null]],null,[["default"],[{"statements":[[6,[37,8],[[32,2,["firstObject","Status"]]],null,[["default"],[{"statements":[[2," "],[11,"dl"],[16,0,[30,[36,6],["consul-instance-checks",[30,[36,5],["empty",[30,[36,1],[[32,2,["length"]],0],null]],null],[30,[36,5],[[32,3],[30,[36,4],[[32,2,["length"]],0],null]],null]],null]],[17,7],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,7],[[32,5]],null]],[2," Checks\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,8],[[30,[36,3],[[30,[36,2],[[30,[36,1],[[32,3],"critical"],null],"failing"],null],[30,[36,2],[[30,[36,1],[[32,3],"warning"],null],"with a warning"],null],[32,3]],null]],null,[["default"],[{"statements":[[2," "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,3],[[30,[36,2],[[30,[36,1],[[32,2,["length"]],0],null],[30,[36,0],["No ",[32,5]," checks"],null]],null],[30,[36,2],[[30,[36,1],[[32,2,["length"]],[32,6,["length"]]],null],[30,[36,0],["All ",[32,5]," checks ",[32,4]],null]],null],[30,[36,0],[[32,2,["length"]],"/",[32,6,["length"]]," ",[32,5]," checks ",[32,4]],null]],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[4]}]]],[2," "],[13],[2,"\\n"]],"parameters":[3]}]]]],"parameters":[2]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["concat","eq","if","or","not-eq","array","class-map","capitalize","let","gt","group-by"]}',meta:{moduleName:"consul-ui/components/consul/instance-checks/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/intention/form/fieldsets/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"RvLiSiHb",block:'{"symbols":["modal","permissionForm","_action","radio","partition","nspace","service","partition","nspace","service","&attrs","@dc"],"statements":[[11,"div"],[17,11],[24,0,"consul-intention-fieldsets"],[12],[2,"\\n "],[10,"fieldset"],[15,"disabled",[34,22]],[12],[2,"\\n "],[10,"div"],[14,"role","group"],[12],[2,"\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Source"],[13],[2,"\\n "],[10,"label"],[15,0,[31,["type-select",[30,[36,9],[[35,1,["error","SourceName"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Source Service"],[13],[2,"\\n "],[8,"power-select-with-create",[],[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[30,[36,15],[[35,14]],null],[34,23],"Name",[34,24],"Type service name",[30,[36,3],[[32,0],"createNewLabel","Use a Consul Service called \'{{term}}\'"],null],[30,[36,3],[[32,0],"isUnique",[35,23]],null],[30,[36,3],[[32,0],[35,13],"SourceName"],null],[30,[36,3],[[32,0],[35,13],"SourceName"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,9],[[30,[36,12],[[32,10,["Name"]],"*"],null]],null,[["default","else"],[{"statements":[[2," * (All Services)\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,10,["Name"]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[10]}]]],[2,"\\n"],[6,[37,9],[[35,14]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"Search for an existing service, or enter any Service name."],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[6,[37,9],[[30,[36,25],["choose nspaces"],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[15,0,[31,["type-select",[30,[36,9],[[35,1,["error","SourceNS"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Source Namespace"],[13],[2,"\\n "],[8,"power-select-with-create",[],[["@disabled","@options","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[30,[36,15],[[35,14]],null],[34,18],[34,21],"Type namespace name",[30,[36,3],[[32,0],"createNewLabel","Use a Consul Namespace called \'{{term}}\'"],null],[30,[36,3],[[32,0],"isUnique",[35,18]],null],[30,[36,3],[[32,0],[35,13],"SourceNS"],null],[30,[36,3],[[32,0],[35,13],"SourceNS"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,9],[[30,[36,12],[[32,9,["Name"]],"*"],null]],null,[["default","else"],[{"statements":[[2," * (All Namespaces)\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,9,["Name"]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[9]}]]],[2,"\\n"],[6,[37,9],[[35,14]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"Search for an existing namespace, or enter any Namespace name."],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,9],[[30,[36,25],["choose partitions"],[["dc"],[[32,12]]]]],null,[["default"],[{"statements":[[2," "],[10,"label"],[15,0,[31,["type-select",[30,[36,9],[[35,1,["error","SourcePartition"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Source Partition"],[13],[2,"\\n "],[8,"power-select-with-create",[],[["@disabled","@options","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[30,[36,15],[[35,14]],null],[34,16],[34,20],"Type partition name",[30,[36,3],[[32,0],"createNewLabel","Use a Consul Partition called \'{{term}}\'"],null],[30,[36,3],[[32,0],"isUnique",[35,16]],null],[30,[36,3],[[32,0],[35,13],"SourcePartition"],null],[30,[36,3],[[32,0],[35,13],"SourcePartition"],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[32,8,["Name"]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n"],[6,[37,9],[[35,14]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"Search for an existing partition, or enter any Partition name."],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Destination"],[13],[2,"\\n "],[10,"label"],[15,0,[31,["type-select",[30,[36,9],[[35,1,["error","DestinationName"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Destination Service"],[13],[2,"\\n "],[8,"power-select-with-create",[],[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[30,[36,15],[[35,14]],null],[34,23],"Name",[34,26],"Type service name",[30,[36,3],[[32,0],"createNewLabel","Use a Consul Service called \'{{term}}\'"],null],[30,[36,3],[[32,0],"isUnique",[35,23]],null],[30,[36,3],[[32,0],[35,13],"DestinationName"],null],[30,[36,3],[[32,0],[35,13],"DestinationName"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,9],[[30,[36,12],[[32,7,["Name"]],"*"],null]],null,[["default","else"],[{"statements":[[2," * (All Services)\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,7,["Name"]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[7]}]]],[2,"\\n"],[6,[37,9],[[35,14]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"Search for an existing service, or enter any Service name."],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[6,[37,9],[[30,[36,25],["choose nspaces"],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[15,0,[31,["type-select",[30,[36,9],[[35,1,["error","DestinationNS"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Destination Namespace"],[13],[2,"\\n "],[8,"power-select-with-create",[],[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[30,[36,15],[[35,14]],null],[34,18],"Name",[34,19],"Type namespace name",[30,[36,3],[[32,0],"createNewLabel","Use a future Consul Namespace called \'{{term}}\'"],null],[30,[36,3],[[32,0],"isUnique",[35,18]],null],[30,[36,3],[[32,0],[35,13],"DestinationNS"],null],[30,[36,3],[[32,0],[35,13],"DestinationNS"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,9],[[30,[36,12],[[32,6,["Name"]],"*"],null]],null,[["default","else"],[{"statements":[[2," * (All Namespaces)\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,6,["Name"]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[6]}]]],[2,"\\n"],[6,[37,9],[[35,14]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"For the destination, you may choose any namespace for which you have access."],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,9],[[30,[36,25],["choose partitions"],[["dc"],[[32,12]]]]],null,[["default"],[{"statements":[[2," "],[10,"label"],[15,0,[31,["type-select",[30,[36,9],[[35,1,["error","DestinationPartition"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Destination Partition"],[13],[2,"\\n "],[8,"power-select-with-create",[],[["@disabled","@options","@searchField","@selected","@searchPlaceholder","@buildSuggestion","@showCreateWhen","@onCreate","@onChange"],[[30,[36,15],[[35,14]],null],[34,16],"Name",[34,17],"Type partition name",[30,[36,3],[[32,0],"createNewLabel","Use a future Consul Partition called \'{{term}}\'"],null],[30,[36,3],[[32,0],"isUnique",[35,16]],null],[30,[36,3],[[32,0],[35,13],"DestinationPartition"],null],[30,[36,3],[[32,0],[35,13],"DestinationPartition"],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[32,5,["Name"]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n"],[6,[37,9],[[35,14]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"For the destination, you may choose any partition for which you have access."],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"label"],[15,0,[31,["type-text",[30,[36,9],[[35,1,["error","Description"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Description (Optional)"],[13],[2,"\\n "],[10,"input"],[14,3,"Description"],[15,2,[34,1,["Description"]]],[14,"placeholder","Description (Optional)"],[15,"onchange",[30,[36,3],[[32,0],[35,13]],null]],[14,4,"text"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"span"],[14,0,"label"],[12],[2,"Should this source connect to the destination?"],[13],[2,"\\n "],[10,"div"],[14,"role","radiogroup"],[15,0,[30,[36,9],[[35,1,["error","Action"]]," has-error"],null]],[12],[2,"\\n"],[6,[37,30],[[30,[36,29],[[30,[36,29],[[30,[36,28],[[30,[36,27],null,[["intent","header","body"],["allow","Allow","The source service will be allowed to connect to the destination."]]],[30,[36,27],null,[["intent","header","body"],["deny","Deny","The source service will not be allowed to connect to the destination."]]],[30,[36,27],null,[["intent","header","body"],["","Application Aware","The source service may or may not connect to the destination service via unique permissions based on Layer 7 criteria: path, header, or method."]]]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"radio-card",[[16,0,[30,[36,10],["value-",[32,3,["intent"]]],null]]],[["@value","@checked","@onchange","@name"],[[32,3,["intent"]],[30,[36,9],[[30,[36,12],[[30,[36,11],[[35,1,["Action"]],""],null],[32,3,["intent"]]],null],"checked"],null],[30,[36,3],[[32,0],[35,13]],null],"Action"]],[["default"],[{"statements":[[2,"\\n "],[10,"header"],[12],[2,"\\n "],[1,[32,3,["header"]]],[2,"\\n "],[13],[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[32,3,["body"]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n"]],"parameters":[3]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,9],[[30,[36,12],[[30,[36,11],[[35,1,["Action"]],""],null],""],null]],null,[["default"],[{"statements":[[2," "],[10,"fieldset"],[14,0,"permissions"],[12],[2,"\\n "],[11,"button"],[24,4,"button"],[4,[38,7],["click",[30,[36,2],[[32,0,["modal","open"]]],null]],null],[12],[2,"\\n Add permission\\n "],[13],[2,"\\n "],[10,"h2"],[12],[2,"Permissions"],[13],[2,"\\n"],[6,[37,9],[[30,[36,8],[[35,1,["Permissions","length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/intention/notice/permissions",[],[[],[]],null],[2,"\\n "],[8,"consul/intention/permission/list",[],[["@items","@onclick","@ondelete"],[[34,1,["Permissions"]],[30,[36,6],[[30,[36,3],[[32,0],[30,[36,5],[[35,4]],null]],null],[30,[36,3],[[32,0],[30,[36,2],[[32,0,["modal","open"]]],null]],null]],null],[30,[36,3],[[32,0],"delete","Permissions",[35,1]],null]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n No permissions yet\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Permissions intercept an Intention\'s traffic using Layer 7 criteria, such as path prefixes and http headers.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/commands/intention"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Documentation"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/connect"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the guide"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[8,"modal-dialog",[[24,0,"consul-intention-permission-modal"]],[["@onclose","@aria"],[[30,[36,3],[[32,0],[30,[36,5],[[35,4]],null],[29]],null],[30,[36,27],null,[["label"],["Edit Permission"]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"modal",[32,1]]],null],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"Edit Permission"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/intention/permission/form",[],[["@item","@onsubmit"],[[34,4],[30,[36,3],[[32,0],"add","Permissions",[35,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"permissionForm",[32,2]]],null],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"button"],[14,0,"type-submit"],[15,"disabled",[30,[36,9],[[30,[36,15],[[32,0,["permissionForm","isDirty"]]],null],"disabled"],null]],[15,"onclick",[30,[36,6],[[30,[36,3],[[32,0],[32,0,["permissionForm","submit"]]],null],[30,[36,3],[[32,0],[32,1,["close"]]],null]],null]],[14,4,"button"],[12],[2,"\\n Save\\n "],[13],[2,"\\n "],[10,"button"],[14,0,"type-cancel"],[15,"onclick",[30,[36,6],[[30,[36,3],[[32,0],[32,0,["permissionForm","reset"]]],null],[30,[36,3],[[32,0],[32,1,["close"]]],null]],null]],[14,4,"button"],[12],[2,"\\n Cancel\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n\\n"],[13]],"hasEval":false,"upvars":["env","item","optional","action","permission","mut","queue","on","gt","if","concat","or","eq","onchange","create","not","partitions","DestinationPartition","nspaces","DestinationNS","SourcePartition","SourceNS","disabled","services","SourceName","can","DestinationName","hash","array","-track-array","each"]}',meta:{moduleName:"consul-ui/components/consul/intention/form/fieldsets/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",shouldShowPermissionForm:!1,actions:{createNewLabel:function(e,t){return e.replace(/{{term}}/g,t)},isUnique:function(e,t){return!e.findBy("Name",t)},add:function(e,t,n){!(t.get(e)||[]).includes(n)&&n.isNew&&(t.pushObject(e,n),t.validate())},delete:function(e,t,n){(t.get(e)||[]).includes(n)&&(t.removeObject(e,n),t.validate())}}})) -e.default=n})),define("consul-ui/components/consul/intention/form/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D -function T(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function L(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const A=Ember.HTMLBars.template({id:"JJOVYubC",block:'{"symbols":["api","item","readonly","notice","execute","cancel","message","confirm","notice","newAction","modal","close","after","notice","notice","@dc","@partition","&attrs","@nspace","@autofill","@item","@src"],"statements":[[11,"div"],[24,0,"consul-intention"],[17,18],[12],[2,"\\n"],[8,"data-form",[],[["@type","@dc","@nspace","@partition","@autofill","@item","@src","@onchange","@onsubmit"],["intention",[32,16,["Name"]],[32,19],[32,17],[32,20],[32,21],[32,22],[30,[36,10],[[32,0],[32,0,["change"]]],null],[30,[36,10],[[32,0],[32,0,["onsubmit"]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,17],[[32,1,["error","detail"]],"duplicate intention found:"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,16],null,[["after"],[[30,[36,10],[[32,0],[32,13]],null]]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,15,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Intention exists!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,15,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n An intention already exists for this Source-Destination pair. Please enter a different combination of Services, or search the intentions to edit an existing intention.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[15]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,16],null,[["after"],[[30,[36,10],[[32,0],[32,13]],null]]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,14,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Error!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,14,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n There was an error saving your intention.\\n"],[6,[37,1],[[30,[36,7],[[32,1,["error","status"]],[32,1,["error","detail"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"br"],[12],[13],[1,[32,1,["error","status"]]],[2,": "],[1,[32,1,["error","detail"]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[13]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["form"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,14],[[32,1,["data"]],[30,[36,6],[[30,[36,5],["write intention"],[["item"],[[32,1,["data"]]]]]],null]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,6],[[32,3]],null]],null,[["default","else"],[{"statements":[[2,"\\n"],[6,[37,14],[[30,[36,13],[[32,2],"Action"],null]],null,[["default"],[{"statements":[[2," "],[8,"modal-dialog",[[24,0,"consul-intention-action-warn-modal warning"]],[["@aria"],[[30,[36,8],null,[["label"],[[30,[36,11],["Set intention to ",[32,10]],null]]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"modal",[32,11]]],null],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"Set intention to "],[1,[32,10]],[2,"?"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n When you change this Intention to "],[1,[32,10]],[2,", you will remove all the Layer 7 policy permissions currently saved to this Intention. Are you sure you want to set it to "],[1,[32,10]],[2,"?\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"dangerous"],[24,4,"button"],[4,[38,3],["click",[32,1,["submit"]]],null],[12],[2,"\\n Set to "],[1,[30,[36,12],[[32,10]],null]],[2,"\\n "],[13],[2,"\\n "],[10,"button"],[14,0,"type-cancel"],[15,"onclick",[32,12]],[14,4,"button"],[12],[2,"\\n No, Cancel\\n "],[13],[2,"\\n "]],"parameters":[12]}]]],[2,"\\n "]],"parameters":[11]}]]],[2,"\\n"]],"parameters":[10]}]]],[2,"\\n "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,9],["/${partition}/*/${dc}/services",[30,[36,8],null,[["partition","dc"],[[32,17],[32,16,["Name"]]]]]],null],[30,[36,10],[[32,0],[32,0,["createServices"]],[32,2]],null]]],null],[2,"\\n\\n"],[6,[37,1],[[30,[36,5],["use nspaces"],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,9],["/${partition}/*/${dc}/namespaces",[30,[36,8],null,[["partition","dc"],[[32,17],[32,16,["Name"]]]]]],null],[30,[36,10],[[32,0],[32,0,["createNspaces"]],[32,2]],null]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[30,[36,5],["use partitions"],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,9],["/*/*/${dc}/partitions",[30,[36,8],null,[["dc"],[[32,16,["Name"]]]]]],null],[30,[36,10],[[32,0],[32,0,["createPartitions"]],[32,2]],null]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,1],[[32,1,["isCreate"]]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,7],[[30,[36,5],["use partitions"],null],[30,[36,6],[[30,[36,5],["choose partitions"],[["dc"],[[32,16]]]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[],[["@type"],["info"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,9,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n Cross-partition communication not supported\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,9,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Cross-partition communication is not supported outside of the primary datacenter. You will only be able to select namespaces for source and destination services.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[]}]]],[6,[37,1],[[32,0,["isManagedByCRDs"]]],null,[["default"],[{"statements":[[2," "],[8,"consul/intention/notice/custom-resource",[],[["@type"],["warning"]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[11,"form"],[4,[38,3],["submit",[30,[36,2],[[32,0,["submit"]],[32,2],[32,1,["submit"]]],null]],null],[12],[2,"\\n "],[8,"consul/intention/form/fieldsets",[],[["@nspaces","@dc","@partitions","@services","@SourceName","@SourceNS","@SourcePartition","@DestinationName","@DestinationNS","@DestinationPartition","@item","@disabled","@create","@onchange"],[[32,0,["nspaces"]],[32,16],[32,0,["partitions"]],[32,0,["services"]],[32,0,["SourceName"]],[32,0,["SourceNS"]],[32,0,["SourcePartition"]],[32,0,["DestinationName"]],[32,0,["DestinationNS"]],[32,0,["DestinationPartition"]],[32,2],[32,1,["disabled"]],[32,1,["isCreate"]],[32,1,["change"]]]],null],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"button"],[15,"disabled",[30,[36,15],[[32,2,["isInvalid"]],[32,1,["disabled"]]],null]],[14,4,"submit"],[12],[2,"\\n Save\\n "],[13],[2,"\\n "],[11,"button"],[16,"disabled",[32,1,["disabled"]]],[24,4,"reset"],[4,[38,3],["click",[30,[36,2],[[32,0,["oncancel"]],[32,2]],null]],null],[12],[2,"\\n Cancel\\n "],[13],[2,"\\n"],[6,[37,1],[[30,[36,6],[[32,1,["isCreate"]]],null]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,4],[[32,2,["ID"]],"anonymous"],null]],null,[["default"],[{"statements":[[2," "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to delete this Intention?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"type-delete"],[16,"disabled",[32,1,["disabled"]]],[24,4,"button"],[4,[38,3],["click",[30,[36,2],[[32,8],[32,1,["delete"]]],null]],null],[12],[2,"\\n Delete\\n "],[13],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n "],[8,"delete-confirmation",[],[["@message","@execute","@cancel"],[[32,7],[32,5],[32,6]]],null],[2,"\\n "]],"parameters":[5,6,7]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2,"\\n"],[6,[37,1],[[32,2,["IsManagedByCRD"]]],null,[["default"],[{"statements":[[2," "],[8,"notice",[[24,0,"crd"]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n Intention Custom Resource\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,4,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This Intention is view only because it is managed through an Intention Custom Resource in your Kubernetes cluster.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,4,["Footer"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/k8s/crds"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"Learn more about CRDs"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[8,"consul/intention/view",[],[["@item"],[[32,2]]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[2,3]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["env","if","fn","on","not-eq","can","not","and","hash","uri","action","concat","capitalize","changeset-get","let","or","notification","string-starts-with"]}',meta:{moduleName:"consul-ui/components/consul/intention/form/index.hbs"}}) -let R=(n=Ember._tracked,r=Ember._tracked,a=Ember._tracked,l=Ember._tracked,s=Ember._tracked,i=Ember._tracked,o=Ember._tracked,u=Ember._tracked,c=Ember._tracked,d=Ember._tracked,m=Ember.inject.service("repository/intention"),p=Ember._action,f=Ember._action,b=Ember._action,h=Ember._action,v=Ember._action,y=Ember._action,g=Ember._action,O=Ember._action,_=Ember._action,P=class extends t.default{constructor(e,t){var n,r,a -super(...arguments),T(this,"services",w,this),T(this,"SourceName",E,this),T(this,"DestinationName",k,this),T(this,"nspaces",x,this),T(this,"SourceNS",j,this),T(this,"DestinationNS",C,this),T(this,"partitions",S,this),T(this,"SourcePartition",N,this),T(this,"DestinationPartition",z,this),T(this,"isManagedByCRDs",M,this),a=null,(r="modal")in(n=this)?Object.defineProperty(n,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[r]=a,T(this,"repo",D,this),this.updateCRDManagement()}ondelete(){this.args.ondelete?this.args.ondelete(...arguments):this.onsubmit(...arguments)}oncancel(){this.args.oncancel?this.args.oncancel(...arguments):this.onsubmit(...arguments)}onsubmit(){this.args.onsubmit&&this.args.onsubmit(...arguments)}updateCRDManagement(){this.isManagedByCRDs=this.repo.isManagedByCRDs()}submit(e,t,n){n.preventDefault(),void 0!==e.change.Action&&void 0===e.data.Action?this.modal.open():t()}createServices(e,t){let n=t.data.uniqBy("Name").toArray().filter(e=>!["connect-proxy","mesh-gateway","terminating-gateway"].includes(e.Kind)).sort((e,t)=>e.Name.localeCompare(t.Name)) -n=[{Name:"*"}].concat(n) -let r=n.findBy("Name",e.SourceName) -r||(r={Name:e.SourceName},n=[r].concat(n)) -let a=n.findBy("Name",e.DestinationName) -a||(a={Name:e.DestinationName},n=[a].concat(n)),this.services=n,this.SourceName=r,this.DestinationName=a}createNspaces(e,t){let n=t.data.toArray().sort((e,t)=>e.Name.localeCompare(t.Name)) -n=[{Name:"*"}].concat(n) -let r=n.findBy("Name",e.SourceNS) -r||(r={Name:e.SourceNS},n=[r].concat(n)) -let a=n.findBy("Name",e.DestinationNS) -a||(a={Name:e.DestinationNS},n=[a].concat(n)),this.nspaces=n,this.SourceNS=r,this.DestinationNS=a}createPartitions(e,t){let n=t.data.toArray().sort((e,t)=>e.Name.localeCompare(t.Name)),r=n.findBy("Name",e.SourcePartition) -r||(r={Name:e.SourcePartition},n=[r].concat(n)) -let a=n.findBy("Name",e.DestinationPartition) -a||(a={Name:e.DestinationPartition},n=[a].concat(n)),this.partitions=n,this.SourcePartition=r,this.DestinationPartition=a}change(e,t,n){const r=e.target -let a,l -switch(r.name){case"SourceName":case"DestinationName":case"SourceNS":case"DestinationNS":case"SourcePartition":case"DestinationPartition":switch(a=l=r.value,"string"!=typeof a&&(a=r.value.Name),r.value=a,r.name){case"SourceName":case"DestinationName":0===this.services.filterBy("Name",a).length&&(l={Name:a},this.services=[l].concat(this.services.toArray())) -break -case"SourceNS":case"DestinationNS":0===this.nspaces.filterBy("Name",a).length&&(l={Name:a},this.nspaces=[l].concat(this.nspaces.toArray())) -break -case"SourcePartition":case"DestinationPartition":0===this.partitions.filterBy("Name",a).length&&(l={Name:a},this.partitions=[l].concat(this.partitions.toArray()))}this[r.name]=l}t.handleEvent(e)}},w=L(P.prototype,"services",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=L(P.prototype,"SourceName",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=L(P.prototype,"DestinationName",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=L(P.prototype,"nspaces",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=L(P.prototype,"SourceNS",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=L(P.prototype,"DestinationNS",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=L(P.prototype,"partitions",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=L(P.prototype,"SourcePartition",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=L(P.prototype,"DestinationPartition",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=L(P.prototype,"isManagedByCRDs",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=L(P.prototype,"repo",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L(P.prototype,"ondelete",[p],Object.getOwnPropertyDescriptor(P.prototype,"ondelete"),P.prototype),L(P.prototype,"oncancel",[f],Object.getOwnPropertyDescriptor(P.prototype,"oncancel"),P.prototype),L(P.prototype,"onsubmit",[b],Object.getOwnPropertyDescriptor(P.prototype,"onsubmit"),P.prototype),L(P.prototype,"updateCRDManagement",[h],Object.getOwnPropertyDescriptor(P.prototype,"updateCRDManagement"),P.prototype),L(P.prototype,"submit",[v],Object.getOwnPropertyDescriptor(P.prototype,"submit"),P.prototype),L(P.prototype,"createServices",[y],Object.getOwnPropertyDescriptor(P.prototype,"createServices"),P.prototype),L(P.prototype,"createNspaces",[g],Object.getOwnPropertyDescriptor(P.prototype,"createNspaces"),P.prototype),L(P.prototype,"createPartitions",[O],Object.getOwnPropertyDescriptor(P.prototype,"createPartitions"),P.prototype),L(P.prototype,"change",[_],Object.getOwnPropertyDescriptor(P.prototype,"change"),P.prototype),P) -e.default=R,Ember._setComponentTemplate(A,R)})),define("consul-ui/components/consul/intention/list/check/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"7ITVRz58",block:'{"symbols":["titles","@item","&attrs"],"statements":[[6,[37,8],[[30,[36,7],[[30,[36,6],[[30,[36,6],["allow","Allowed"],null],[30,[36,6],["deny","Denied"],null],[30,[36,6],["","Layer 7 Rules"],null]],null]],null]],null,[["default"],[{"statements":[[11,"div"],[16,0,[30,[36,4],["consul-intention-list-check ","notice ",[30,[36,3],[[32,2,["Action"]],"permissions"],null]],null]],[17,3],[12],[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,5],[[32,1],[30,[36,3],[[32,2,["Action"]],""],null]],null]],[2,"\\n "],[13],[2,"\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,1],[[30,[36,0],[[32,2,["Action"]],"allow"],null]],null,[["default","else"],[{"statements":[[2," Yes, "],[1,[35,2,["SourceName"]]],[2," is allowed to connect to "],[1,[32,2,["DestinationName"]]],[2," due to the highest precedence intention below:\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],[[32,2,["Action"]],"deny"],null]],null,[["default","else"],[{"statements":[[2," No, "],[1,[32,2,["SourceName"]]],[2," is not allowed to connect to "],[1,[32,2,["DestinationName"]]],[2," due to the highest precedence intention below:\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,2,["SourceName"]]],[2," may or may not be allowed to connect with "],[1,[32,2,["DestinationName"]]],[2," through its Layer 7 rules.\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["eq","if","item","or","concat","get","array","from-entries","let"]}',meta:{moduleName:"consul-ui/components/consul/intention/list/check/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/intention/list/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i -function o(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=Ember.HTMLBars.template({id:"npl02ASn",block:'{"symbols":["&attrs","@items","@delete","&default"],"statements":[[11,"div"],[24,0,"consul-intention-list"],[17,1],[4,[38,0],[[32,0,["updateCRDManagement"]],[32,2]],null],[12],[2,"\\n"],[18,4,[[30,[36,3],null,[["Table","CheckNotice","CustomResourceNotice"],[[30,[36,1],["consul/intention/list/table"],[["delete","items"],[[32,3],[32,0,["items"]]]]],[30,[36,2],[[32,0,["checkedItem"]],[30,[36,1],["consul/intention/list/check"],[["item"],[[32,0,["checkedItem"]]]]],""],null],[30,[36,2],[[32,0,["isManagedByCRDs"]],[30,[36,1],["consul/intention/notice/custom-resource"],null],""],null]]]]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["did-update","component","if","hash"]}',meta:{moduleName:"consul-ui/components/consul/intention/list/index.hbs"}}) -let d=(n=Ember.inject.service("repository/intention"),r=Ember._tracked,a=Ember._action,l=class extends t.default{constructor(e,t){super(...arguments),o(this,"repo",s,this),o(this,"isManagedByCRDs",i,this),this.updateCRDManagement(t.items)}get items(){return this.args.items||[]}get checkedItem(){return 1===this.items.length&&this.args.check&&this.items[0].SourceName===this.args.check?this.items[0]:null}updateCRDManagement(){this.isManagedByCRDs=this.repo.isManagedByCRDs()}},s=u(l.prototype,"repo",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i=u(l.prototype,"isManagedByCRDs",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(l.prototype,"updateCRDManagement",[a],Object.getOwnPropertyDescriptor(l.prototype,"updateCRDManagement"),l.prototype),l) -e.default=d,Ember._setComponentTemplate(c,d)})),define("consul-ui/components/consul/intention/list/table/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"3cYAAMVS",block:'{"symbols":["item","index","index","change","checked","confirm","send","keypressClick","change","__arg0","__arg1","Actions","__arg0","__arg1","Actions","@routeName","@delete","&attrs","@items"],"statements":[[8,"tabular-collection",[[24,0,"consul-intention-list-table"],[17,18]],[["@items","@rowHeight"],[[32,19],59]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"th"],[14,0,"source"],[12],[2,"Source"],[13],[2,"\\n "],[10,"th"],[14,0,"intent"],[12],[2," "],[13],[2,"\\n "],[10,"th"],[14,0,"destination"],[12],[2,"Destination"],[13],[2,"\\n "],[10,"th"],[14,0,"permissions"],[12],[2,"\\n Permissions\\n "],[10,"span"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"Permissions intercept an Intention\'s traffic using Layer 7 criteria, such as path prefixes and http headers."]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"th"],[14,0,"meta"],[12],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["row"]],[["default"],[{"statements":[[2,"\\n "],[10,"td"],[14,0,"source"],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,1],[[30,[36,0],[[32,16],"dc.intentions.edit"],null],[32,1,["ID"]]],null]],[12],[2,"\\n"],[6,[37,5],[[30,[36,11],[[32,1,["SourceName"]],"*"],null]],null,[["default","else"],[{"statements":[[2," All Services (*)\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,1,["SourceName"]]],[2,"\\n"]],"parameters":[]}]]],[6,[37,5],[[30,[36,0],[[30,[36,7],["use nspaces"],null],[30,[36,7],["use partitions"],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"\\n "],[10,"span"],[15,0,[30,[36,13],["partition-",[30,[36,0],[[32,1,["SourcePartition"]],"default"],null]],null]],[12],[1,[30,[36,0],[[32,1,["SourcePartition"]],"default"],null]],[13],[2," / "],[10,"span"],[15,0,[30,[36,13],["nspace-",[30,[36,0],[[32,1,["SourceNS"]],"default"],null]],null]],[12],[1,[30,[36,0],[[32,1,["SourceNS"]],"default"],null]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"td"],[15,0,[31,["intent intent-",[30,[36,14],[[32,1,["Action"]]],null]]]],[12],[2,"\\n "],[10,"strong"],[12],[1,[30,[36,15],[[30,[36,0],[[32,1,["Action"]],"App aware"],null]],null]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"td"],[14,0,"destination"],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,5],[[30,[36,11],[[32,1,["DestinationName"]],"*"],null]],null,[["default","else"],[{"statements":[[2," All Services (*)\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,1,["DestinationName"]]],[2,"\\n"]],"parameters":[]}]]],[6,[37,5],[[30,[36,0],[[30,[36,7],["use nspaces"],null],[30,[36,7],["use partitions"],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"\\n "],[10,"span"],[15,0,[30,[36,13],["partition-",[30,[36,0],[[32,1,["DestinationPartition"]],"default"],null]],null]],[12],[1,[30,[36,0],[[32,1,["DestinationPartition"]],"default"],null]],[13],[2," / "],[10,"span"],[15,0,[30,[36,13],["nspace-",[30,[36,0],[[32,1,["DestinationNS"]],"default"],null]],null]],[12],[1,[30,[36,0],[[32,1,["DestinationNS"]],"default"],null]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"td"],[14,0,"permissions"],[12],[2,"\\n"],[6,[37,5],[[30,[36,16],[[32,1,["Permissions","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[12],[1,[30,[36,12],[[32,1,["Permissions","length"]],"Permission"],null]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"td"],[14,0,"meta"],[12],[2,"\\n"],[6,[37,5],[[32,1,["IsManagedByCRD"]]],null,[["default"],[{"statements":[[2," "],[8,"consul/external-source",[],[["@item","@label"],[[32,1],"Managed by CRD"]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,5],[[30,[36,18],[[30,[36,0],[[30,[36,7],["write intention"],[["item"],[[32,1]]]],[30,[36,7],["view CRD intention"],[["item"],[[32,1]]]]],null],[30,[36,17],[[32,1,["Meta","external-source"]],"consul-api-gateway"],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,"popover-menu",[],[["@expanded","@onchange","@keyboardAccess"],[[30,[36,5],[[30,[36,11],[[32,5],[32,3]],null],true,false],null],[30,[36,2],[[32,0],[32,4],[32,3]],null],false]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["trigger"]],[["default"],[{"statements":[[2,"\\n More\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,7],["write intention"],[["item"],[[32,1]]]]],null,[["default","else"],[{"statements":[[2," "],[10,"li"],[14,"role","none"],[12],[2,"\\n "],[10,"a"],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[30,[36,1],[[30,[36,0],[[35,10],"dc.intentions.edit"],null],[32,1,["ID"]]],null]],[12],[2,"Edit"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,"role","none"],[14,0,"dangerous"],[12],[2,"\\n "],[10,"label"],[15,"for",[32,6]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[32,8]],[12],[2,"Delete"],[13],[2,"\\n "],[10,"div"],[14,"role","menu"],[12],[2,"\\n "],[8,"informed-action",[[24,0,"warning"]],[["@namedBlocksInfo"],[[30,[36,6],null,[["header","body","actions"],[0,0,1]]]]],[["default"],[{"statements":[[6,[37,5],[[30,[36,4],[[32,13],"header"],null]],null,[["default","else"],[{"statements":[[2,"\\n Confirm Delete\\n "]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,4],[[32,13],"body"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to delete this intention?\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,4],[[32,13],"actions"],null]],null,[["default"],[{"statements":[[6,[37,3],[[32,14]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,15,["Action"]],[[24,0,"dangerous"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[24,0,"type-delete"],[24,"tabindex","-1"],[4,[38,9],["click",[30,[36,8],[[30,[36,2],[[32,0],[32,9]],null],[30,[36,2],[[32,0],[32,17],[32,1]],null]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,15,["Action"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[],[["@for"],[[32,6]]],[["default"],[{"statements":[[2,"\\n Cancel\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[15]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[13,14]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,7],["view CRD intention"],[["item"],[[32,1]]]]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,"role","none"],[12],[2,"\\n "],[10,"div"],[14,"role","menu"],[12],[2,"\\n "],[8,"informed-action",[[24,0,"info kubernetes"]],[["@namedBlocksInfo"],[[30,[36,6],null,[["header","body","actions"],[0,0,1]]]]],[["default"],[{"statements":[[6,[37,5],[[30,[36,4],[[32,10],"header"],null]],null,[["default","else"],[{"statements":[[2,"\\n Managed by CRD\\n "]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,4],[[32,10],"body"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This intention is being managed through an Intention Custom Resource in your Kubernetes cluster. It is view only in the UI.\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,4],[[32,10],"actions"],null]],null,[["default"],[{"statements":[[6,[37,3],[[32,11]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,12,["Action"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[24,"tabindex","-1"],[24,0,"action"]],[["@href"],[[30,[36,1],[[30,[36,0],[[32,16],"dc.intentions.edit"],null],[32,1,["ID"]]],null]]],[["default"],[{"statements":[[2,"\\n View\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,12,["Action"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[],[["@onclick"],[[30,[36,2],[[32,0],[32,9]],null]]],[["default"],[{"statements":[[2,"\\n Cancel\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[12]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[10,11]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[6,7,8,9]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3,4,5]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["or","href-to","action","let","-is-named-block-invocation","if","hash","can","queue","on","routeName","eq","pluralize","concat","slugify","capitalize","gt","not-eq","and"]}',meta:{moduleName:"consul-ui/components/consul/intention/list/table/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/intention/notice/custom-resource/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"50F/MLBP",block:'{"symbols":["notice","&attrs","@type"],"statements":[[8,"notice",[[24,0,"consul-intention-notice-custom-resource crd"],[17,2]],[["@type"],[[30,[36,0],[[32,3],"info"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,1,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n Intention Custom Resource\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,1,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Some of your intentions are being managed through an Intention Custom Resource in your Kubernetes cluster. Those managed intentions will be view only in the UI. Any intentions created in the UI will work but will not be synced to the Custom Resource Definition (CRD) datastore.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,1,["Footer"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,1],["CONSUL_DOCS_URL"],null],"/k8s/crds"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"Learn more about CRDs"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["or","env"]}',meta:{moduleName:"consul-ui/components/consul/intention/notice/custom-resource/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/intention/notice/permissions/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"HoDXcnya",block:'{"symbols":["notice"],"statements":[[8,"notice",[],[["@type"],["info"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,1,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.intention.notice.permissions.body"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,1,["Footer"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,1],["CONSUL_DOCS_URL"],null],"/connect/intentions"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.intention.notice.permissions.footer"],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n\\n"]],"hasEval":false,"upvars":["t","env"]}',meta:{moduleName:"consul-ui/components/consul/intention/notice/permissions/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/intention/notifications/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"mgi1y+sM",block:'{"symbols":["error","@status","@type","@error"],"statements":[[6,[37,1],[[30,[36,2],[[32,3],"create"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your intention has been added.\\n"]],"parameters":[]},{"statements":[[2," There was an error adding your intention.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"update"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your intention has been saved.\\n"]],"parameters":[]},{"statements":[[2," There was an error saving your intention.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"delete"],null]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your intention was deleted.\\n"]],"parameters":[]},{"statements":[[2," There was an error deleting your intention.\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[6,[37,3],[[32,4,["errors","firstObject"]]],null,[["default"],[{"statements":[[6,[37,1],[[32,1,["detail"]]],null,[["default"],[{"statements":[[2," "],[10,"br"],[12],[13],[1,[30,[36,0],["(",[30,[36,1],[[32,1,["status"]],[30,[36,0],[[32,1,["status"]],": "],null]],null],[32,1,["detail"]],")"],null]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["concat","if","eq","let"]}',meta:{moduleName:"consul-ui/components/consul/intention/notifications/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/intention/permission/form/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"jlM2y89J",block:'{"symbols":["group","headerForm","headerList","method","el","el","el","Type","intent","&attrs","&default"],"statements":[[11,"div"],[17,10],[24,0,"consul-intention-permission-form"],[12],[2,"\\n"],[8,"form-group",[],[["@name"],[[34,14]]],[["default"],[{"statements":[[2,"\\n\\n "],[18,11,[[30,[36,16],null,[["submit","reset","isDirty","changeset"],[[30,[36,3],[[32,0],"submit",[35,0]],null],[30,[36,3],[[32,0],"reset",[35,0]],null],[30,[36,15],[[35,0,["isValid"]]],null],[35,0]]]]]],[2,"\\n\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"div"],[14,"data-property","action"],[12],[2,"\\n "],[10,"span"],[14,0,"label"],[12],[2,"\\n Should this permission allow the source connect to the destination?\\n "],[13],[2,"\\n "],[10,"div"],[14,"role","radiogroup"],[15,0,[30,[36,2],[[35,0,["error","Action"]]," has-error"],null]],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[35,17]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[12],[2,"\\n "],[10,"span"],[12],[1,[30,[36,12],[[32,9]],null]],[13],[2,"\\n "],[10,"input"],[14,3,"Action"],[15,2,[32,9]],[15,"checked",[30,[36,2],[[30,[36,11],[[35,0,["Action"]],[32,9]],null],"checked"],null]],[15,"onchange",[30,[36,3],[[32,0],[30,[36,13],[[35,0],"Action"],null]],[["value"],["target.value"]]]],[14,4,"radio"],[12],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[9]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Path"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[8,[32,1,["Element"]],[],[["@name","@type"],["PathType","select"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Label"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n Path type\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"power-select",[],[["@options","@selected","@onChange"],[[34,18],[34,8],[30,[36,3],[[32,0],"change","HTTP.PathType",[35,0]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,10],[[35,9],[32,8]],null]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n\\n"],[6,[37,2],[[35,19]],null,[["default"],[{"statements":[[2," "],[8,[32,1,["Element"]],[],[["@name","@error"],["Path",[30,[36,7],[[35,0],"error.HTTP.Path"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Label"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,10],[[35,9],[35,8]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Text"]],[[16,"oninput",[30,[36,3],[[32,0],"change","HTTP.Path",[35,0]],null]]],[["@value"],[[30,[36,7],[[35,0],"HTTP.Path"],null]]],null],[2,"\\n "],[8,"state",[],[["@state","@matches"],[[32,6,["state"]],"error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Error"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n"],[6,[37,2],[[30,[36,11],[[30,[36,7],[[35,0],"HTTP.Path"],null],"Regex"],null]],null,[["default","else"],[{"statements":[[2," Path Regex should not be blank\\n"]],"parameters":[]},{"statements":[[2," Path should begin with a \'/\'\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Methods"],[13],[2,"\\n "],[10,"div"],[14,0,"type-toggle"],[12],[2,"\\n "],[10,"span"],[12],[2,"All methods are applied by default unless specified"],[13],[2,"\\n "],[8,[32,1,["Element"]],[],[["@name"],["allMethods"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Checkbox"]],[[16,"checked",[30,[36,2],[[35,20],"checked"],null]],[16,"onchange",[30,[36,3],[[32,0],"change","allMethods",[35,0]],null]]],[[],[]],null],[2,"\\n "],[8,[32,5,["Label"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n All Methods\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "],[13],[2,"\\n\\n"],[6,[37,2],[[35,21]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"checkbox-group"],[14,"role","group"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[35,4]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[14,0,"type-checkbox"],[12],[2,"\\n "],[10,"input"],[14,3,"method"],[15,2,[32,4]],[15,"checked",[30,[36,2],[[30,[36,1],[[32,4],[35,0,["HTTP","Methods"]]],null],"checked"],null]],[15,"onchange",[30,[36,3],[[32,0],"change","method",[35,0]],null]],[14,4,"checkbox"],[12],[13],[2,"\\n "],[10,"span"],[12],[1,[32,4]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[4]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Headers"],[13],[2,"\\n\\n "],[8,"consul/intention/permission/header/list",[],[["@items","@ondelete"],[[30,[36,7],[[35,0],"HTTP.Header"],null],[30,[36,3],[[32,0],"delete","HTTP.Header",[35,0]],null]]],[["default"],[{"statements":[[2,"\\n\\n "]],"parameters":[3]}]]],[2,"\\n\\n "],[8,"consul/intention/permission/header/form",[],[["@onsubmit"],[[30,[36,3],[[32,0],"add","HTTP.Header",[35,0]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"headerForm",[32,2]]],null],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n\\n "],[10,"button"],[14,0,"type-submit"],[15,"disabled",[30,[36,2],[[30,[36,22],[[32,0,["headerForm","isDirty"]]],null],"disabled"],null]],[15,"onclick",[30,[36,3],[[32,0],[32,0,["headerForm","submit"]]],null]],[14,4,"button"],[12],[2,"\\n Add"],[6,[37,2],[[30,[36,23],[[30,[36,10],[[30,[36,7],[[35,0],"HTTP.Header"],null],"length"],null],0],null]],null,[["default"],[{"statements":[[2," another"]],"parameters":[]}]]],[2," header\\n "],[13],[2,"\\n "],[10,"button"],[14,0,"type-cancel"],[15,"onclick",[30,[36,3],[[32,0],[32,0,["headerForm","reset"]]],null]],[14,4,"button"],[12],[2,"\\n Cancel\\n "],[13],[2,"\\n\\n "],[13],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["changeset","contains","if","action","methods","-track-array","each","changeset-get","pathType","pathLabels","get","eq","capitalize","changeset-set","name","and","hash","intents","pathTypes","shouldShowPathField","allMethods","shouldShowMethods","not","gt"]}',meta:{moduleName:"consul-ui/components/consul/intention/permission/form/index.hbs"}}),n="intention-permission" -var r=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",name:n,schema:Ember.inject.service("schema"),change:Ember.inject.service("change"),repo:Ember.inject.service("repository/"+n),onsubmit:function(){},onreset:function(){},intents:Ember.computed.alias(`schema.${n}.Action.allowedValues`),methods:Ember.computed.alias(`schema.${n}-http.Methods.allowedValues`),pathProps:Ember.computed.alias(`schema.${n}-http.PathType.allowedValues`),pathTypes:Ember.computed("pathProps",(function(){return["NoPath"].concat(this.pathProps)})),pathLabels:Ember.computed((function(){return{NoPath:"No Path",PathExact:"Exact",PathPrefix:"Prefixed by",PathRegex:"Regular Expression"}})),pathInputLabels:Ember.computed((function(){return{PathExact:"Exact Path",PathPrefix:"Path Prefix",PathRegex:"Path Regular Expression"}})),changeset:Ember.computed("item",(function(){const e=this.change.changesetFor(n,this.item||this.repo.create()) -return e.isNew&&e.validate(),e})),pathType:Ember.computed("changeset._changes.HTTP.PathType","pathTypes.firstObject",(function(){return this.changeset.HTTP.PathType||this.pathTypes.firstObject})),noPathType:Ember.computed.equal("pathType","NoPath"),shouldShowPathField:Ember.computed.not("noPathType"),allMethods:!1,shouldShowMethods:Ember.computed.not("allMethods"),didReceiveAttrs:function(){Ember.get(this,"item.HTTP.Methods.length")||Ember.set(this,"allMethods",!0)},actions:{change:function(e,t,n){const r=void 0!==Ember.get(n,"target.value")?n.target.value:n -switch(e){case"allMethods":Ember.set(this,e,n.target.checked) -break -case"method":n.target.checked?this.actions.add.apply(this,["HTTP.Methods",t,r]):this.actions.delete.apply(this,["HTTP.Methods",t,r]) -break -default:t.set(e,r)}t.validate()},add:function(e,t,n){t.pushObject(e,n),t.validate()},delete:function(e,t,n){t.removeObject(e,n),t.validate()},submit:function(e){void 0!==e.changes.find(({key:e,value:t})=>"HTTP.PathType"===e||"HTTP.Path"===e)&&(this.pathProps.forEach(t=>{e.set("HTTP."+t,void 0)}),"NoPath"!==e.HTTP.PathType&&e.set("HTTP."+e.HTTP.PathType,e.HTTP.Path)),this.allMethods&&e.set("HTTP.Methods",null),delete e._changes.HTTP.PathType,delete e._changes.HTTP.Path,this.repo.persist(e),this.onsubmit(e.data)},reset:function(e){e.rollback(),this.onreset(e.data)}}})) -e.default=r})),define("consul-ui/components/consul/intention/permission/header/form/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"iPtOEBL6",block:'{"symbols":["group","el","el","el","Type","&attrs","&default"],"statements":[[11,"div"],[17,6],[24,0,"consul-intention-permission-header-form"],[12],[2,"\\n "],[8,"form-group",[],[["@name"],[[34,7]]],[["default"],[{"statements":[[2,"\\n\\n "],[18,7,[[30,[36,9],null,[["submit","reset","isDirty","changeset"],[[30,[36,6],[[32,0],"submit",[35,0]],null],[30,[36,6],[[32,0],"reset",[35,0]],null],[30,[36,8],[[35,0,["isValid"]],[35,0,["isDirty"]]],null],[35,0]]]]]],[2,"\\n\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[8,[32,1,["Element"]],[],[["@name","@type"],["HeaderType","select"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4,["Label"]],[],[[],[]],[["default"],[{"statements":[[2,"Header type"]],"parameters":[]}]]],[2,"\\n "],[8,"power-select",[],[["@options","@selected","@onChange"],[[34,10],[34,2],[30,[36,6],[[32,0],"change","HeaderType",[35,0]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,4],[[35,3],[32,5]],null]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n\\n\\n "],[8,[32,1,["Element"]],[],[["@name","@error"],["Name",[30,[36,1],[[35,0],"error.Name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Label"]],[],[[],[]],[["default"],[{"statements":[[2,"Header name"]],"parameters":[]}]]],[2,"\\n "],[8,[32,3,["Text"]],[[16,"oninput",[30,[36,6],[[32,0],"change","Name",[35,0]],null]]],[["@value"],[[30,[36,1],[[35,0],"Name"],null]]],null],[2,"\\n "],[8,"state",[],[["@state","@matches"],[[32,3,["state"]],"error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Error"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,1],[[35,0],"error.Name.validation"],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n\\n"],[6,[37,12],[[35,11]],null,[["default"],[{"statements":[[2," "],[8,[32,1,["Element"]],[],[["@name","@error"],["Value",[30,[36,1],[[35,0],"error.Value"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,2,["Label"]],[],[[],[]],[["default"],[{"statements":[[2,"Header "],[1,[30,[36,5],[[30,[36,4],[[35,3],[35,2]],null]],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,2,["Text"]],[[16,"oninput",[30,[36,6],[[32,0],"change","Value",[35,0]],null]]],[["@value"],[[30,[36,1],[[35,0],"Value"],null]]],null],[2,"\\n "],[8,"state",[],[["@state","@matches"],[[32,2,["state"]],"error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,2,["Error"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,1],[[35,0],"error.Value.validation"],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["changeset","changeset-get","headerType","headerLabels","get","lowercase","action","name","and","hash","headerTypes","shouldShowValueField","if"]}',meta:{moduleName:"consul-ui/components/consul/intention/permission/header/form/index.hbs"}}),n="intention-permission-http-header" -var r=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",name:n,schema:Ember.inject.service("schema"),change:Ember.inject.service("change"),repo:Ember.inject.service("repository/"+n),onsubmit:function(){},onreset:function(){},changeset:Ember.computed("item",(function(){return this.change.changesetFor(n,this.item||this.repo.create({HeaderType:this.headerTypes.firstObject}))})),headerTypes:Ember.computed.alias(`schema.${n}.HeaderType.allowedValues`),headerLabels:Ember.computed((function(){return{Exact:"Exactly Matching",Prefix:"Prefixed by",Suffix:"Suffixed by",Regex:"Regular Expression",Present:"Is present"}})),headerType:Ember.computed("changeset.HeaderType","headerTypes.firstObject",(function(){return this.changeset.HeaderType||this.headerTypes.firstObject})),headerTypeEqualsPresent:Ember.computed.equal("headerType","Present"),shouldShowValueField:Ember.computed.not("headerTypeEqualsPresent"),actions:{change:function(e,t,n){const r=void 0!==Ember.get(n,"target.value")?n.target.value:n -t.set(e,r),t.validate()},submit:function(e){this.headerTypes.forEach(t=>{e.set(t,void 0)}) -const t="Present"===e.HeaderType||e.Value -e.set(e.HeaderType,t),delete e._changes.HeaderType,delete e._changes.Value,this.repo.persist(e),this.onsubmit(e.data),Ember.set(this,"item",this.repo.create({HeaderType:this.headerType}))},reset:function(e){e.rollback()}}})) -e.default=r})),define("consul-ui/components/consul/intention/permission/header/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"GtepE94Y",block:'{"symbols":["item","Actions","Action","Confirmation","Confirm"],"statements":[[6,[37,5],[[30,[36,4],[[35,0,["length"]],0],null]],null,[["default"],[{"statements":[[8,"list-collection",[[24,0,"consul-intention-permission-header-list"]],[["@items","@scroll","@cellHeight"],[[34,0],"native",42]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Header\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Name"]]],[2," "],[1,[30,[36,1],[[32,1]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,2],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3],[[24,0,"dangerous"]],[["@onclick"],[[30,[36,3],[[32,0],[35,2],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirmation"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4],[[24,0,"warning"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n Confirm delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to delete this header?\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirm"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5],[],[[],[]],[["default"],[{"statements":[[2,"Delete"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["items","route-match","ondelete","action","gt","if"]}',meta:{moduleName:"consul-ui/components/consul/intention/permission/header/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})),define("consul-ui/components/consul/intention/permission/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"O6TCv5DN",block:'{"symbols":["item","Actions","Action","Confirmation","Confirm","item","item"],"statements":[[6,[37,8],[[30,[36,12],[[35,9,["length"]],0],null]],null,[["default"],[{"statements":[[8,"list-collection",[[16,0,[31,["consul-intention-permission-list",[30,[36,8],[[30,[36,7],[[35,0]],null]," readonly"],null]]]]],[["@scroll","@items","@partial"],["native",[34,9],5]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[15,"onclick",[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null],[32,1]],null]],[12],[2,"\\n "],[10,"strong"],[15,0,[30,[36,10],["intent-",[32,1,["Action"]]],null]],[12],[1,[30,[36,11],[[32,1,["Action"]]],null]],[13],[2,"\\n"],[6,[37,8],[[30,[36,12],[[32,1,["HTTP","Methods","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"permission-methods"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Methods\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,5],[[32,1,["HTTP","Methods"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[32,7]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,8],[[32,1,["HTTP","Path"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"permission-path"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[32,1,["HTTP","PathType"]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["HTTP","Path"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,6],[[30,[36,5],[[30,[36,5],[[32,1,["HTTP","Header"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"permission-header"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Header\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,6,["Name"]]],[2," "],[1,[30,[36,4],[[32,6]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[6]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,8],[[35,0]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,2],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3],[],[["@onclick","@close"],[[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null],[32,1]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Edit\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,3],[[24,0,"dangerous"]],[["@onclick"],[[30,[36,2],[[32,0],[35,3],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirmation"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4],[[24,0,"warning"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n Confirm delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to delete this permission?\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirm"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5],[],[[],[]],[["default"],[{"statements":[[2,"Delete"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["onclick","optional","action","ondelete","route-match","-track-array","each","not","if","items","concat","capitalize","gt"]}',meta:{moduleName:"consul-ui/components/consul/intention/permission/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})),define("consul-ui/components/consul/intention/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"302KbrGO",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","item","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-intention-search-bar"],[17,25]],[["@filter","@namedBlocksInfo"],[[32,22],[30,[36,15],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,9],["components.consul.intention.search-bar.",[32,18,["status","key"]]],null]],[["default"],[[30,[36,4],[[30,[36,9],["common.search.",[32,18,["status","key"]]],null],[30,[36,9],["common.consul.",[32,18,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,9],["components.consul.intention.search-bar.",[32,18,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,9],["common.search.",[32,18,["status","value"]]],null],[30,[36,9],["common.consul.",[32,18,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,18,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,9],[[32,19]," ",[32,20]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,19]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,20]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[19,20]}]]],[2,"\\n "]],"parameters":[18]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,23]],null],[32,24],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[32,22,["searchproperty"]]],null,[["default"],[{"statements":[[2," "],[8,[32,13,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,22,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,14,["Optgroup"]],[32,14,["Option"]]],null,[["default"],[{"statements":[[6,[37,13],[[30,[36,12],[[30,[36,12],[[32,22,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,16],[],[["@value","@selected"],[[32,17],[30,[36,11],[[32,17],[32,22,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,9],["common.consul.",[30,[36,14],[[32,17]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[17]}]]]],"parameters":[15,16]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-access"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,22,["access","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.intention.search-bar.access.name"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,13],[[30,[36,12],[[30,[36,12],[[30,[36,4],["allow","deny",""],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[[16,0,[30,[36,9],["value-",[32,12]],null]]],[["@value","@selected"],[[30,[36,10],[[32,12],"app-aware"],null],[30,[36,11],[[30,[36,10],[[32,12],"app-aware"],null],[32,22,["access","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[1,[30,[36,0],[[30,[36,9],["components.consul.intention.search-bar.access.options.",[30,[36,10],[[32,12],"app-aware"],null]],null]],null]],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,21,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Action:asc",[30,[36,0],["components.consul.intention.search-bar.sort.access.asc"],null]],null],[30,[36,4],["Action:desc",[30,[36,0],["components.consul.intention.search-bar.sort.access.desc"],null]],null],[30,[36,4],["SourceName:asc",[30,[36,0],["components.consul.intention.search-bar.sort.source-name.asc"],null]],null],[30,[36,4],["SourceName:desc",[30,[36,0],["components.consul.intention.search-bar.sort.source-name.desc"],null]],null],[30,[36,4],["DestinationName:asc",[30,[36,0],["components.consul.intention.search-bar.sort.destination-name.asc"],null]],null],[30,[36,4],["DestinationName:desc",[30,[36,0],["components.consul.intention.search-bar.sort.destination-name.desc"],null]],null],[30,[36,4],["Precedence:asc",[30,[36,0],["common.sort.numeric.asc"],null]],null],[30,[36,4],["Precedence:desc",[30,[36,0],["common.sort.numeric.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,21,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["components.consul.intention.search-bar.sort.access.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Action:asc",[30,[36,1],["Action:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["components.consul.intention.search-bar.sort.access.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Action:desc",[30,[36,1],["Action:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["components.consul.intention.search-bar.sort.access.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["components.consul.intention.search-bar.sort.source-name.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["SourceName:asc",[30,[36,1],["SourceName:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["SourceName:desc",[30,[36,1],["SourceName:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["components.consul.intention.search-bar.sort.destination-name.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["DestinationName:asc",[30,[36,1],["DestinationName:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["DestinationName:desc",[30,[36,1],["DestinationName:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["components.consul.intention.search-bar.sort.precedence.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Precedence:asc",[30,[36,1],["Precedence:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.numeric.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Precedence:desc",[30,[36,1],["Precedence:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.numeric.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","concat","or","contains","-track-array","each","lowercase","hash"]}',meta:{moduleName:"consul-ui/components/consul/intention/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/intention/view/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"FT+AOUhZ",block:'{"symbols":["&attrs"],"statements":[[11,"div"],[24,0,"consul-intention-view"],[17,1],[12],[2,"\\n\\n "],[10,"div"],[14,0,"definition-table"],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Destination"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"consul/bucket/list",[],[["@item","@nspace","@partition","@service"],[[30,[36,1],null,[["Namespace","Partition","Service"],[[35,0,["DestinationNS"]],[35,0,["DestinationPartition"]],[35,0,["DestinationName"]]]]],"-","-",true]],null],[2,"\\n "],[13],[2,"\\n "],[10,"dt"],[12],[2,"Source"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"consul/bucket/list",[],[["@item","@nspace","@partition","@service"],[[30,[36,1],null,[["Namespace","Partition","Service"],[[35,0,["SourceNS"]],[35,0,["SourcePartition"]],[35,0,["SourceName"]]]]],"-","-",true]],null],[2,"\\n "],[13],[2,"\\n"],[6,[37,2],[[35,0,["Action"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[2,"Action"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[35,0,["Action"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"dt"],[12],[2,"Description"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,3],[[35,0,["Description"]],"N/A"],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n"],[6,[37,2],[[30,[36,4],[[35,0,["Permissions","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"h2"],[12],[2,"Permissions"],[13],[2,"\\n "],[8,"consul/intention/notice/permissions",[],[[],[]],null],[2,"\\n "],[8,"consul/intention/permission/list",[],[["@items"],[[34,0,["Permissions"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["item","hash","if","or","gt"]}',meta:{moduleName:"consul-ui/components/consul/intention/view/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})),define("consul-ui/components/consul/kind/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"z+keWPxf",block:'{"symbols":["Name","link","link"],"statements":[[6,[37,5],[[35,3,["Kind"]]],null,[["default"],[{"statements":[[6,[37,9],[[30,[36,12],[[30,[36,11],[[35,3,["Kind"]]],null]],null]],null,[["default"],[{"statements":[[6,[37,5],[[35,10]],null,[["default","else"],[{"statements":[[2," "],[10,"dl"],[14,0,"tooltip-panel"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[10,"span"],[14,0,"consul-kind"],[12],[2,"\\n "],[1,[32,1]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"menu-panel",[],[["@position"],["left"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,6],[[35,3,["Kind"]],"ingress-gateway"],null]],null,[["default","else"],[{"statements":[[2," Ingress gateways enable ingress traffic from services outside the Consul service mesh to services inside the Consul service mesh.\\n"]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,6],[[35,3,["Kind"]],"terminating-gateway"],null]],null,[["default","else"],[{"statements":[[2," Terminating gateways allow connect-enabled services in Consul service mesh to communicate with services outside the service mesh.\\n"]],"parameters":[]},{"statements":[[2," Mesh gateways enable routing of Connect traffic between different Consul datacenters.\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,"role","separator"],[12],[2,"\\n"],[6,[37,5],[[30,[36,6],[[35,3,["Kind"]],"ingress-gateway"],null]],null,[["default","else"],[{"statements":[[2," About Ingress gateways\\n"]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,6],[[35,3,["Kind"]],"terminating-gateway"],null]],null,[["default","else"],[{"statements":[[2," About Terminating gateways\\n"]],"parameters":[]},{"statements":[[2," About Mesh gateways\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[6,[37,9],[[30,[36,8],[[30,[36,7],[[30,[36,7],["ingress-gateway","/consul/developer-mesh/ingress-gateways"],null],[30,[36,7],["terminating-gateway","/consul/developer-mesh/understand-terminating-gateways"],null],[30,[36,7],["mesh-gateway","/consul/developer-mesh/connect-gateways"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,"role","none"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[30,[36,2],[[30,[36,1],["CONSUL_DOCS_LEARN_URL"],null],[30,[36,0],[[32,3],[35,3,["Kind"]]],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"\\n Learn guides\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[3]}]]],[6,[37,9],[[30,[36,8],[[30,[36,7],[[30,[36,7],["ingress-gateway","/connect/ingress-gateway"],null],[30,[36,7],["terminating-gateway","/connect/terminating-gateway"],null],[30,[36,7],["mesh-gateway","/connect/mesh-gateway"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[30,[36,2],[[30,[36,1],["CONSUL_DOCS_URL"],null],[30,[36,0],[[32,2],[35,3,["Kind"]]],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"\\n Documentation\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,"role","separator"],[12],[2,"\\n Other gateway types\\n "],[13],[2,"\\n"],[6,[37,5],[[30,[36,4],[[35,3,["Kind"]],"mesh-gateway"],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[30,[36,2],[[30,[36,1],["CONSUL_DOCS_URL"],null],[30,[36,0],[[32,2],"mesh-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"\\n Mesh gateways\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,5],[[30,[36,4],[[35,3,["Kind"]],"terminating-gateway"],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[30,[36,2],[[30,[36,1],["CONSUL_DOCS_URL"],null],[30,[36,0],[[32,2],"terminating-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"\\n Terminating gateways\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,5],[[30,[36,4],[[35,3,["Kind"]],"ingress-gateway"],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[30,[36,2],[[30,[36,1],["CONSUL_DOCS_URL"],null],[30,[36,0],[[32,2],"ingress-gateway"],null]],null]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"\\n Ingress gateways\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[2]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"span"],[14,0,"consul-kind"],[12],[2,"\\n "],[1,[32,1]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["get","env","concat","item","not-eq","if","eq","array","from-entries","let","withInfo","humanize","titleize"]}',meta:{moduleName:"consul-ui/components/consul/kind/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})),define("consul-ui/components/consul/kv/form/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"LrzkPXNV",block:'{"symbols":["api","disabld","execute","cancel","message","confirm","__arg0"],"statements":[[8,"data-form",[],[["@dc","@nspace","@partition","@type","@label","@autofill","@item","@src","@onchange","@onsubmit"],[[34,15],[34,16],[34,17],"kv","key",[34,18],[34,19],[34,20],[30,[36,0],[[32,0],"change"],null],[30,[36,0],[[32,0],[35,21]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,23],[[30,[36,22],["write kv"],[["item"],[[32,1,["data"]]]]]],null,[["default"],[{"statements":[[2," "],[10,"form"],[15,"onsubmit",[30,[36,0],[[32,0],[32,1,["submit"]]],null]],[12],[2,"\\n "],[11,"fieldset"],[4,[38,5],[[30,[36,1],[[32,2],[32,1,["disabled"]]],null]],null],[12],[2,"\\n"],[6,[37,3],[[32,1,["isCreate"]]],null,[["default"],[{"statements":[[2," "],[10,"label"],[15,0,[31,["type-text",[30,[36,3],[[32,1,["data","error","Key"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Key or folder"],[13],[2,"\\n "],[10,"input"],[14,"autofocus","autofocus"],[15,2,[30,[36,11],[[32,1,["data","Key"]],[35,10]],null]],[14,3,"additional"],[15,"oninput",[30,[36,0],[[32,0],[32,1,["change"]]],null]],[14,"placeholder","Key or folder"],[14,4,"text"],[12],[13],[2,"\\n "],[10,"em"],[12],[2,"To create a folder, end a key with "],[10,"code"],[12],[2,"/"],[13],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,3],[[30,[36,1],[[30,[36,14],[[30,[36,11],[[32,1,["data","Key"]],[35,10]],null],""],null],[30,[36,13],[[30,[36,12],[[32,1,["data","Key"]]],null],"/"],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[12],[2,"\\n "],[10,"div"],[14,0,"type-toggle"],[12],[2,"\\n "],[10,"label"],[12],[2,"\\n "],[11,"input"],[24,3,"json"],[16,"checked",[30,[36,3],[[35,9],"checked"],null]],[16,"onchange",[30,[36,0],[[32,0],[32,1,["change"]]],null]],[24,4,"checkbox"],[4,[38,5],[false],null],[12],[13],[2,"\\n "],[10,"span"],[12],[2,"Code"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"label"],[14,"for",""],[15,0,[31,["type-text",[30,[36,3],[[32,1,["data","error","Value"]]," has-error"],null]]]],[12],[2,"\\n"],[6,[37,3],[[35,9]],null,[["default","else"],[{"statements":[[2," "],[8,"code-editor",[],[["@name","@readonly","@value","@onkeyup","@namedBlocksInfo"],["value",[30,[36,1],[[32,2],[32,1,["disabled"]]],null],[30,[36,6],[[32,1,["data","Value"]]],null],[30,[36,0],[[32,0],[32,1,["change"]],"value"],null],[30,[36,7],null,[["label"],[0]]]]],[["default"],[{"statements":[[6,[37,3],[[30,[36,8],[[32,7],"label"],null]],null,[["default"],[{"statements":[[2,"Value"]],"parameters":[]}]]]],"parameters":[7]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"span"],[12],[2,"Value"],[13],[2,"\\n "],[11,"textarea"],[16,"autofocus",[30,[36,2],[[32,1,["isCreate"]]],null]],[24,3,"value"],[16,"oninput",[30,[36,0],[[32,0],[32,1,["change"]]],null]],[4,[38,5],[[30,[36,1],[[32,2],[32,1,["disabled"]]],null]],null],[12],[1,[30,[36,6],[[32,1,["data","Value"]]],null]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[6,[37,3],[[32,1,["isCreate"]]],null,[["default","else"],[{"statements":[[6,[37,3],[[30,[36,2],[[32,2]],null]],null,[["default"],[{"statements":[[2," "],[10,"button"],[15,"disabled",[30,[36,1],[[32,1,["data","isPristine"]],[32,1,["data","isInvalid"]],[32,1,["disabled"]]],null]],[14,4,"submit"],[12],[2,"Save"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"button"],[15,"onclick",[30,[36,0],[[32,0],[35,4],[32,1,["data"]]],null]],[15,"disabled",[32,1,["disabled"]]],[14,4,"reset"],[12],[2,"Cancel"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,2],[[32,2]],null]],null,[["default"],[{"statements":[[2," "],[10,"button"],[15,"disabled",[30,[36,1],[[32,1,["data","isInvalid"]],[32,1,["disabled"]]],null]],[14,4,"submit"],[12],[2,"Save"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"button"],[15,"onclick",[30,[36,0],[[32,0],[35,4],[32,1,["data"]]],null]],[15,"disabled",[32,1,["disabled"]]],[14,4,"reset"],[12],[2,"Cancel"],[13],[2,"\\n"],[6,[37,3],[[30,[36,2],[[32,2]],null]],null,[["default"],[{"statements":[[2," "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to delete this key?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"type-delete"],[16,"disabled",[32,1,["disabled"]]],[24,4,"button"],[4,[38,0],[[32,0],[32,6],[32,1,["delete"]]],null],[12],[2,"Delete"],[13],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n "],[8,"delete-confirmation",[],[["@message","@execute","@cancel"],[[32,5],[32,3],[32,4]]],null],[2,"\\n "]],"parameters":[3,4,5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[2]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["action","or","not","if","oncancel","disabled","atob","hash","-is-named-block-invocation","json","parent","left-trim","last","not-eq","eq","dc","nspace","partition","autofill","item","src","onsubmit","cannot","let"]}',meta:{moduleName:"consul-ui/components/consul/kv/form/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",encoder:Ember.inject.service("btoa"),json:!0,ondelete:function(){this.onsubmit(...arguments)},oncancel:function(){this.onsubmit(...arguments)},onsubmit:function(){},actions:{change:function(e,t){const n=t.getData() -try{t.handleEvent(e)}catch(r){const t=e.target -let a -switch(t.name){case"value":Ember.set(n,"Value",this.encoder.execute(t.value)) -break -case"additional":a=Ember.get(this,"parent"),Ember.set(n,"Key",`${"/"!==a?a:""}${t.value}`) -break -case"json":Ember.set(this,"json",!this.json) -break -default:throw r}}}}})) -e.default=n})),define("consul-ui/components/consul/kv/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"IGQyLUaF",block:'{"symbols":["item","index","index","change","checked","confirm","send","keypressClick","__arg0","__arg1","Actions","@delete","&attrs","@items","@parent"],"statements":[[8,"tabular-collection",[[24,0,"consul-kv-list"],[17,13]],[["@items"],[[32,14]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"th"],[12],[2,"Name"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["row"]],[["default"],[{"statements":[[2,"\\n "],[10,"td"],[15,0,[30,[36,0],[[32,1,["isFolder"]],"folder","file"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,1],[[30,[36,0],[[32,1,["isFolder"]],"dc.kv.folder","dc.kv.edit"],null],[32,1,["Key"]]],null]],[12],[1,[30,[36,9],[[30,[36,8],[[32,1,["Key"]],[32,15,["Key"]]],null],"/"],null]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,"popover-menu",[],[["@expanded","@onchange","@keyboardAccess"],[[30,[36,0],[[30,[36,10],[[32,5],[32,3]],null],true,false],null],[30,[36,2],[[32,0],[32,4],[32,3]],null],false]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["trigger"]],[["default"],[{"statements":[[2,"\\n More\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,0],[[30,[36,11],["write kv"],[["item"],[[32,1]]]]],null,[["default","else"],[{"statements":[[2," "],[10,"li"],[14,"role","none"],[12],[2,"\\n "],[10,"a"],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[30,[36,1],[[30,[36,0],[[32,1,["isFolder"]],"dc.kv.folder","dc.kv.edit"],null],[32,1,["Key"]]],null]],[12],[1,[30,[36,0],[[32,1,["isFolder"]],"View","Edit"],null]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,"role","none"],[14,0,"dangerous"],[12],[2,"\\n "],[10,"label"],[15,"for",[32,6]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[32,8]],[12],[2,"Delete"],[13],[2,"\\n "],[10,"div"],[14,"role","menu"],[12],[2,"\\n "],[8,"informed-action",[[24,0,"warning"]],[["@namedBlocksInfo"],[[30,[36,7],null,[["header","body","actions"],[0,0,1]]]]],[["default"],[{"statements":[[6,[37,0],[[30,[36,6],[[32,9],"header"],null]],null,[["default","else"],[{"statements":[[2,"\\n Confirm Delete\\n "]],"parameters":[]},{"statements":[[6,[37,0],[[30,[36,6],[[32,9],"body"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to delete this KV entry?\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,0],[[30,[36,6],[[32,9],"actions"],null]],null,[["default"],[{"statements":[[6,[37,5],[[32,10]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,11,["Action"]],[[24,0,"dangerous"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[24,0,"type-delete"],[24,"tabindex","-1"],[4,[38,4],["click",[30,[36,3],[[30,[36,2],[[32,0],[32,4]],null],[30,[36,2],[[32,0],[32,12],[32,1]],null]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,11,["Action"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[],[["@for"],[[32,6]]],[["default"],[{"statements":[[2,"\\n Cancel\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[11]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[9,10]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"li"],[14,"role","none"],[12],[2,"\\n "],[10,"a"],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[30,[36,1],[[30,[36,0],[[32,1,["isFolder"]],"dc.kv.folder","dc.kv.edit"],null],[32,1,["Key"]]],null]],[12],[2,"View"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[6,7,8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3,4,5]}]]],[2,"\\n"]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["if","href-to","action","queue","on","let","-is-named-block-invocation","hash","left-trim","right-trim","eq","can"]}',meta:{moduleName:"consul-ui/components/consul/kv/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/kv/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"pTbMHFFw",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","item","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-kv-search-bar"],[17,25]],[["@filter","@namedBlocksInfo"],[[32,22],[30,[36,14],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,10],["components.consul.kv.search-bar.",[32,18,["status","key"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,18,["status","key"]]],null],[30,[36,10],["common.consul.",[32,18,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,10],["components.consul.kv.search-bar.",[32,18,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,18,["status","value"]]],null],[30,[36,10],["common.consul.",[32,18,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,18,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,10],[[32,19]," ",[32,20]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,19]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,20]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[19,20]}]]],[2,"\\n "]],"parameters":[18]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,23]],null],[32,24],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[32,22,["searchproperty"]]],null,[["default"],[{"statements":[[2," "],[8,[32,13,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,22,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,14,["Optgroup"]],[32,14,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,22,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,16],[],[["@value","@selected"],[[32,17],[30,[36,9],[[32,17],[32,22,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[30,[36,13],[[32,17]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[17]}]]]],"parameters":[15,16]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,22,["kind","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.kv.search-bar.kind.name"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["folder","key"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[[24,0,"value-{item}}"]],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,22,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["components.consul.kv.search-bar.kind.options.",[32,12]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,21,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Key:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Key:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null],[30,[36,4],["Kind:asc",[30,[36,0],["components.consul.kv.search-bar.sort.kind.asc"],null]],null],[30,[36,4],["Kind:desc",[30,[36,0],["components.consul.kv.search-bar.sort.kind.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,21,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Key:asc",[30,[36,1],["Key:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Key:desc",[30,[36,1],["Key:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["components.consul.kv.search-bar.kind.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Kind:asc",[30,[36,1],["Kind:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["components.consul.kv.search-bar.sort.kind.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Kind:desc",[30,[36,1],["Kind:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["components.consul.kv.search-bar.sort.kind.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","concat","-track-array","each","lowercase","hash"]}',meta:{moduleName:"consul-ui/components/consul/kv/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/loader/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"2ziS2H3f",block:'{"symbols":["&attrs"],"statements":[[11,"div"],[24,0,"consul-loader"],[17,1],[12],[2,"\\n "],[10,"svg"],[14,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[14,"xmlns:xlink","http://www.w3.org/1999/xlink","http://www.w3.org/2000/xmlns/"],[14,"width","44px"],[14,"height","44px"],[14,"viewBox","0 0 44 44"],[14,"version","1.1"],[12],[2,"\\n "],[10,"g"],[12],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","27"],[14,"cy","2"],[14,5,"transform-origin: 27px 2px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","17"],[14,"cy","2"],[14,5,"transform-origin: 17px 2px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","27"],[14,"cy","42"],[14,5,"transform-origin: 27px 42px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","17"],[14,"cy","42"],[14,5,"transform-origin: 17px 42px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","2"],[14,"cy","17"],[14,5,"transform-origin: 2px 17px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","2"],[14,"cy","27"],[14,5,"transform-origin: 2px 27px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","42"],[14,"cy","17"],[14,5,"transform-origin: 42px 17px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","42"],[14,"cy","27"],[14,5,"transform-origin: 42px 27px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","33"],[14,"cy","4"],[14,5,"transform-origin: 33px 4px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","11"],[14,"cy","4"],[14,5,"transform-origin: 11px 4px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","33"],[14,"cy","40"],[14,5,"transform-origin: 33px 40px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","11"],[14,"cy","40"],[14,5,"transform-origin: 11px 40px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","40"],[14,"cy","11"],[14,5,"transform-origin: 40px 11px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","4"],[14,"cy","33"],[14,5,"transform-origin: 4px 33px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","40"],[14,"cy","33"],[14,5,"transform-origin: 40px 33px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","1"],[14,"cx","4"],[14,"cy","11"],[14,5,"transform-origin: 4px 11px"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[10,"g"],[12],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","22"],[14,"cy","4"],[14,5,"transform-origin: 22px 4px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","22"],[14,"cy","40"],[14,5,"transform-origin: 22px 40px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","4"],[14,"cy","22"],[14,5,"transform-origin: 4px 22px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","40"],[14,"cy","22"],[14,5,"transform-origin: 40px 22px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","9"],[14,"cy","9"],[14,5,"transform-origin: 9px 9px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","35"],[14,"cy","35"],[14,5,"transform-origin: 35px 35px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","35"],[14,"cy","9"],[14,5,"transform-origin: 35px 9px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","9"],[14,"cy","35"],[14,5,"transform-origin: 9px 35px"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[10,"g"],[12],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","28"],[14,"cy","8"],[14,5,"transform-origin: 28px 8px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","16"],[14,"cy","8"],[14,5,"transform-origin: 16px 8px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","28"],[14,"cy","36"],[14,5,"transform-origin: 28px 36px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","16"],[14,"cy","36"],[14,5,"transform-origin: 16px 36px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","8"],[14,"cy","28"],[14,5,"transform-origin: 8px 28px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","8"],[14,"cy","16"],[14,5,"transform-origin: 8px 16px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","36"],[14,"cy","28"],[14,5,"transform-origin: 36px 28px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","2"],[14,"cx","36"],[14,"cy","16"],[14,5,"transform-origin: 36px 16px"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[10,"g"],[12],[2,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","22"],[14,"cy","12"],[14,5,"transform-origin: 22px 12px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","22"],[14,"cy","32"],[14,5,"transform-origin: 22px 32px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","12"],[14,"cy","22"],[14,5,"transform-origin: 12px 22px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","32"],[14,"cy","22"],[14,5,"transform-origin: 32px 22px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","15"],[14,"cy","15"],[14,5,"transform-origin: 15px 15px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","29"],[14,"cy","29"],[14,5,"transform-origin: 29px 29px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","29"],[14,"cy","15"],[14,5,"transform-origin: 29px 15px"],[12],[13],[2,"\\n "],[10,"circle"],[14,"r","5"],[14,"cx","15"],[14,"cy","29"],[14,5,"transform-origin: 15px 29px"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[10,"g"],[12],[2,"\\n "],[10,"circle"],[14,"r","9"],[14,"cx","22"],[14,"cy","22"],[14,5,"transform-origin: 22px 22px"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/consul/loader/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/lock-session/form/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"4H9hZw6F",block:'{"symbols":["writer","execute","cancel","message","confirm","checks","after","error","after","@item","&attrs","@onsubmit","@ondelete"],"statements":[[11,"div"],[24,0,"consul-lock-session-form"],[17,11],[12],[2,"\\n "],[8,"data-writer",[],[["@sink","@type","@label","@ondelete","@onchange"],[[30,[36,6],["/${partition}/${nspace}/${dc}/session",[30,[36,5],null,[["partition","nspace","dc"],[[32,10,["Partition"]],[32,10,["Namespace"]],[32,10,["Datacenter"]]]]]],null],"session","Lock Session",[30,[36,0],[[30,[36,4],[[32,13],[32,13],[32,12]],null],[32,10]],null],[30,[36,0],[[30,[36,7],[[32,12]],null],[32,10]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["removed"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/lock-session/notifications",[[4,[38,9],null,[["after"],[[30,[36,8],[[32,0],[32,9]],null]]]]],[["@type"],["remove"]],null],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/lock-session/notifications",[[4,[38,9],null,[["after"],[[30,[36,8],[[32,0],[32,7]],null]]]]],[["@type","@error"],["remove",[32,8]]],null],[2,"\\n "]],"parameters":[7,8]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"definition-table"],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n"],[6,[37,4],[[32,10,["Name"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[2,"Name"],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,10,["Name"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"dt"],[12],[2,"ID"],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,10,["ID"]]],[13],[2,"\\n "],[10,"dt"],[12],[2,"Node"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,10],["dc.nodes.show",[32,10,["Node"]]],null]],[12],[2,"\\n "],[1,[32,10,["Node"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dt"],[12],[2,"Delay"],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,11],[[32,10,["LockDelay"]]],null]],[13],[2,"\\n "],[10,"dt"],[12],[2,"TTL"],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,12],[[32,10,["TTL"]],"-"],null]],[13],[2,"\\n "],[10,"dt"],[12],[2,"Behavior"],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,10,["Behavior"]]],[13],[2,"\\n"],[6,[37,13],[[32,10,["checks"]]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[2,"Health Checks"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n"],[6,[37,4],[[30,[36,3],[[32,6,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,2],[", ",[32,6]],null]],[2,"\\n"]],"parameters":[]},{"statements":[[2," -\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[6]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[30,[36,14],["delete session"],[["item"],[[32,10]]]]],null,[["default"],[{"statements":[[2," "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to invalidate this Lock Session?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[24,0,"type-delete"],[4,[38,1],["click",[30,[36,0],[[32,5],[30,[36,0],[[32,1,["delete"]],[32,10]],null]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Invalidate Session\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[32,4]],[2,"\\n "],[13],[2,"\\n "],[8,"action",[[24,0,"type-delete"],[4,[38,1],["click",[30,[36,0],[[32,2]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Confirm Invalidation\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"action",[[24,0,"type-cancel"],[4,[38,1],["click",[30,[36,0],[[32,3]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Cancel\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2,3,4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["fn","on","join","gt","if","hash","uri","optional","action","notification","href-to","duration-from","or","let","can"]}',meta:{moduleName:"consul-ui/components/consul/lock-session/form/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/lock-session/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"4zmOmXUM",block:'{"symbols":["item","index","execute","cancel","message","confirm","checks","item","&attrs","@items","@ondelete"],"statements":[[8,"list-collection",[[24,0,"consul-lock-session-list"],[17,9]],[["@items"],[[32,10]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[32,1,["Name"]]],null,[["default","else"],[{"statements":[[2," "],[10,"span"],[12],[1,[32,1,["Name"]]],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"span"],[12],[2,"\\n "],[1,[32,1,["ID"]]],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,1,["ID"]],"ID"]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[32,1,["Name"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n ID\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,1,["ID"]],"ID"]],null],[2,"\\n "],[1,[32,1,["ID"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"dl"],[14,0,"lock-delay"],[12],[2,"\\n "],[11,"dt"],[4,[38,2],null,null],[12],[2,"\\n Delay\\n "],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,5],[[32,1,["LockDelay"]]],null]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[14,0,"ttl"],[12],[2,"\\n "],[11,"dt"],[4,[38,2],null,null],[12],[2,"\\n TTL\\n "],[13],[2,"\\n"],[6,[37,4],[[30,[36,6],[[32,1,["TTL"]],""],null]],null,[["default","else"],[{"statements":[[2," "],[10,"dd"],[12],[2,"-"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"dd"],[12],[1,[32,1,["TTL"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"dl"],[14,0,"behavior"],[12],[2,"\\n "],[11,"dt"],[4,[38,2],null,null],[12],[2,"\\n Behavior\\n "],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,1,["Behavior"]]],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,8],[[30,[36,7],[[32,1,["NodeChecks"]],[32,1,["ServiceChecks"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"checks"],[12],[2,"\\n "],[11,"dt"],[4,[38,2],null,null],[12],[2,"\\n Checks\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n"],[6,[37,4],[[30,[36,3],[[32,7,["length"]],0],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,0],[[30,[36,0],[[32,7]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[12],[1,[32,8]],[13],[2,"\\n"]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[2," -\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[7]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to invalidate this session?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[24,0,"type-delete"],[4,[38,10],["click",[30,[36,9],[[32,6],[30,[36,9],[[32,11],[32,1]],null]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Invalidate\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[32,5]],[2,"\\n "],[13],[2,"\\n "],[8,"action",[[24,0,"type-delete"],[4,[38,10],["click",[30,[36,9],[[32,3]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Confirm Invalidate\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"action",[[24,0,"type-cancel"],[4,[38,10],["click",[30,[36,9],[[32,4]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Cancel\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3,4,5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["-track-array","each","tooltip","gt","if","duration-from","eq","union","let","fn","on"]}',meta:{moduleName:"consul-ui/components/consul/lock-session/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/lock-session/notifications/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"C5IRTA6J",block:'{"symbols":["notice","notice","notice","@type","&attrs","@error"],"statements":[[6,[37,2],[[30,[36,1],[[32,4],"remove"],null]],null,[["default","else"],[{"statements":[[6,[37,2],[[32,6]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-delete"],[17,5]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Error!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,3,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n There was an error invalidating the Lock Session.\\n"],[6,[37,2],[[30,[36,3],[[32,6,["status"]],[32,6,["detail"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"br"],[12],[13],[1,[32,6,["status"]]],[2,": "],[1,[32,6,["detail"]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-delete"],[17,5]],[["@type"],["success"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,2,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Success!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,2,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Your Lock Session has been invalidated.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,1],[[32,4],"kv"],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,1,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[10,"strong"],[12],[2,"Warning."],[13],[2," This KV has a lock session. You can edit KV\'s with lock sessions, but we recommend doing so with care, or not doing so at all. It may negatively impact the active node it\'s associated with. See below for more details on the Lock Session and see "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/internals/sessions.html"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"our documentation"],[13],[2," for more information.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["env","eq","if","and"]}',meta:{moduleName:"consul-ui/components/consul/lock-session/notifications/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/logo/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"VqMopggF",block:'{"symbols":[],"statements":[[10,"svg"],[14,"width","32"],[14,"height","32"],[14,"xmlns","http://www.w3.org/2000/svg","http://www.w3.org/2000/xmlns/"],[14,"fill","currentColor"],[12],[2,"\\n "],[10,"title"],[12],[2,"Consul"],[13],[2,"\\n "],[10,"path"],[14,"d","M20.0909311,0.531825836 C17.5736708,-0.133926002 14.9319012,-0.175262092 12.3950559,0.41140611 C9.85814916,0.998075538 7.50278772,2.1950159 5.53339269,3.89834301 C3.56397924,5.60167011 2.04003632,7.75991032 1.09382125,10.1857533 C0.147614161,12.6115349 -0.192263562,15.231632 0.103691496,17.8185758 C0.399647167,20.4055195 1.32249342,22.8811539 2.79212624,25.0305962 C4.26175905,27.1800385 6.2337511,28.9383326 8.5369881,30.1528504 C10.8402251,31.3673682 13.4050666,32.0014567 16.008894,32 C20.0224756,32.0040967 23.890121,30.4948211 26.8400939,27.7732993 L23.056744,23.818657 C21.5467316,25.1801547 19.674304,26.0745584 17.666316,26.3936287 C15.658328,26.7127604 13.6008556,26.4427448 11.7432242,25.6164282 C9.88553137,24.7900502 8.30724765,23.4427963 7.19961874,21.7377931 C6.09198982,20.0328513 5.50246798,18.0432818 5.50246798,16.0100604 C5.50246798,13.9769005 6.09198982,11.987331 7.19961874,10.2823278 C8.30724765,8.57732462 9.88553137,7.23007065 11.7432242,6.40375406 C13.6008556,5.57740063 15.658328,5.30742184 17.666316,5.62649829 C19.674304,5.94557474 21.5467316,6.8400276 23.056744,8.20152524 L26.8400939,4.23173679 C24.9249353,2.46762854 22.6081914,1.1975789 20.0909311,0.531825836 Z M28.629761,21.4006112 C28.3757081,21.4511394 28.1422839,21.5758942 27.9591423,21.7590358 C27.7759394,21.9422387 27.6511845,22.1756015 27.6006564,22.4297158 C27.5501282,22.6837687 27.5760369,22.9471537 27.67519,23.1864717 C27.7743431,23.4258512 27.9421973,23.6304197 28.1576327,23.7743298 C28.3730067,23.9182399 28.6262614,23.9950451 28.8852873,23.9950451 C29.2327222,23.9950451 29.565852,23.8570904 29.8114938,23.6114486 C30.0571355,23.3658068 30.1951517,23.0326156 30.1951517,22.6852422 C30.1951517,22.4261549 30.118285,22.1729615 29.9743749,21.9575261 C29.8304648,21.7421521 29.6258964,21.5742365 29.3865783,21.4751449 C29.1471988,21.3759918 28.8838753,21.3500217 28.629761,21.4006112 Z M30.136151,16.921839 C29.8820981,16.9724286 29.648674,17.097122 29.4655324,17.280325 C29.2823294,17.4635279 29.1575746,17.6968907 29.1070464,17.951005 C29.0565183,18.2050579 29.082427,18.4684429 29.1815801,18.7077609 C29.2807332,18.947079 29.4485873,19.1516475 29.6640227,19.295619 C29.8793967,19.4395291 30.1326515,19.5163343 30.3916774,19.5163343 C30.7386825,19.5149836 31.0710755,19.3765991 31.3164103,19.1312643 C31.5617451,18.8858681 31.7001911,18.5534751 31.7015418,18.2065314 C31.7015418,17.9474441 31.6247365,17.6941893 31.480765,17.4788153 C31.3368549,17.2634413 31.1322864,17.0955257 30.8929684,16.9963726 C30.6535889,16.897281 30.3902653,16.8713108 30.136151,16.921839 Z M17.2353224,12.7982374 C16.6019706,12.5359576 15.9050749,12.4673179 15.2327372,12.6010364 C14.5603995,12.7347549 13.9428262,13.0648763 13.458112,13.5495906 C12.9733363,14.0343049 12.6432763,14.6519395 12.5094963,15.3242158 C12.3757778,15.9965535 12.4444175,16.6934492 12.7067588,17.3268011 C12.9691,17.9601529 13.4133549,18.5014734 13.983347,18.8823072 C14.5532777,19.263141 15.2234051,19.4664201 15.9089428,19.4664201 C16.8281501,19.4664201 17.7097223,19.1012421 18.3597736,18.4512522 C19.0097635,17.8012623 19.3749415,16.9196902 19.3749415,16.0004214 C19.3749415,15.3149452 19.1716623,14.6448177 18.7907672,14.0748256 C18.4099334,13.5048336 17.8686128,13.0605787 17.2353224,12.7982374 Z M26.9935817,16.8454635 C26.7542636,16.7463104 26.4908786,16.7204017 26.2368257,16.7709299 C25.9827114,16.821458 25.7493487,16.9462129 25.5661457,17.1294158 C25.3830041,17.3125574 25.2582493,17.5459815 25.2076597,17.8000344 C25.1571316,18.0541487 25.1831017,18.3174723 25.2822548,18.5568518 C25.3813465,18.7961699 25.549262,19.0007383 25.764636,19.1446484 C25.9800714,19.2885585 26.2332648,19.3654252 26.4923521,19.3654252 C26.8397256,19.3654252 27.1729167,19.227409 27.4185585,18.9817672 C27.6641389,18.7361255 27.8021551,18.4029957 27.8021551,18.0555608 C27.8021551,17.7965349 27.7253498,17.5432802 27.5814397,17.3279062 C27.4375296,17.1124708 27.2328997,16.9446166 26.9935817,16.8454635 Z M26.9935817,12.7396665 C26.7542636,12.6405134 26.4908786,12.6146047 26.2368257,12.6651329 C25.9827114,12.715661 25.7493487,12.8404159 25.5661457,13.0236188 C25.3830041,13.2067604 25.2582493,13.4401845 25.2076597,13.6942374 C25.1571316,13.9483517 25.1831017,14.2116753 25.2822548,14.4510548 C25.3813465,14.6903729 25.549262,14.8949413 25.764636,15.0388514 C25.9800714,15.1827615 26.2332648,15.2596282 26.4923521,15.2596282 C26.8397256,15.2596282 27.1729167,15.121612 27.4185585,14.8759702 C27.6641389,14.6303285 27.8021551,14.2971373 27.8021551,13.9497638 C27.8021551,13.6907379 27.7253498,13.4374832 27.5814397,13.2220478 C27.4375296,13.0066738 27.2328997,12.8388196 26.9935817,12.7396665 Z M30.136151,12.5138553 C29.8820981,12.5644449 29.648674,12.6891997 29.4655324,12.8723413 C29.2823294,13.0555443 29.1575746,13.288907 29.1070464,13.5430213 C29.0565183,13.7970742 29.082427,14.0604592 29.1815801,14.2997773 C29.2807332,14.5391567 29.4485873,14.7436638 29.6640227,14.8876353 C29.8793967,15.0315454 30.1326515,15.1083507 30.3916774,15.1083507 C30.7386825,15.1070614 31.0710755,14.9686154 31.3164103,14.7232806 C31.5617451,14.4778844 31.7001911,14.1454914 31.7015418,13.7985477 C31.7015418,13.5394604 31.6247365,13.286267 31.480765,13.0708316 C31.3368549,12.8554577 31.1322864,12.6875421 30.8929684,12.5884504 C30.6535889,12.4892973 30.3902653,12.4633272 30.136151,12.5138553 Z M28.7055225,8.10574889 C28.4514696,8.15627705 28.2180454,8.28103189 28.0348425,8.46423485 C27.8517009,8.64743782 27.7269461,8.88080057 27.6764179,9.13485348 C27.6258898,9.38896778 27.6517985,9.65235274 27.7509516,9.89167082 C27.8501046,10.1309889 28.0179588,10.3355574 28.2333328,10.4794675 C28.4487682,10.623439 28.702023,10.7002442 28.9610489,10.7002442 C29.3084223,10.7002442 29.6416135,10.5622281 29.8872553,10.3165863 C30.1328971,10.0709445 30.2708519,9.73781471 30.2708519,9.39044126 C30.2708519,9.13135396 30.1940466,8.87809919 30.0501365,8.6627252 C29.9062264,8.44728981 29.7016579,8.27943562 29.4622784,8.18028254 C29.2229604,8.08112946 28.9595754,8.05522073 28.7055225,8.10574889 Z"],[14,"fill-rule","nonzero"],[12],[13],[2,"\\n"],[13]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/consul/logo/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/metadata/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"VbVHYYDc",block:'{"symbols":["item","index"],"statements":[[8,"tabular-collection",[[24,0,"consul-metadata-list"]],[["@items"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"th"],[12],[2,"Key"],[13],[2,"\\n "],[10,"th"],[12],[2,"Value"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["row"]],[["default"],[{"statements":[[2,"\\n "],[10,"td"],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,1],[0,[32,1]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"td"],[12],[2,"\\n "],[10,"span"],[12],[1,[30,[36,1],[1,[32,1]],null]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["items","object-at"]}',meta:{moduleName:"consul-ui/components/consul/metadata/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})),define("consul-ui/components/consul/node-identity/template/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"f1nRWNk1",block:'{"symbols":["@name","@partition"],"statements":[[6,[37,1],[[30,[36,0],["use partitions"],null]],null,[["default","else"],[{"statements":[[2,"partition \\""],[1,[30,[36,2],[[32,2],"default"],null]],[2,"\\" {\\n"],[6,[37,1],[[30,[36,0],["use nspaces"],null]],null,[["default","else"],[{"statements":[[2," namespace \\"default\\" {\\n node \\""],[1,[32,1]],[2,"\\" {\\n\\t policy = \\"write\\"\\n }\\n }\\n namespace_prefix \\"\\" {\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n }\\n"]],"parameters":[]},{"statements":[[2," node \\""],[1,[32,1]],[2,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n"]],"parameters":[]}]]],[2,"}"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],["use nspaces"],null]],null,[["default","else"],[{"statements":[[2,"namespace \\"default\\" {\\n node \\""],[1,[32,1]],[2,"\\" {\\n\\t policy = \\"write\\"\\n }\\n}\\nnamespace_prefix \\"\\" {\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n}\\n"]],"parameters":[]},{"statements":[[2,"node \\""],[1,[32,1]],[2,"\\" {\\n\\tpolicy = \\"write\\"\\n}\\nservice_prefix \\"\\" {\\n\\tpolicy = \\"read\\"\\n}"]],"parameters":[]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["can","if","or"]}',meta:{moduleName:"consul-ui/components/consul/node-identity/template/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/node/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"mZ3vKiug",block:'{"symbols":["item","index","@items","@leader"],"statements":[[8,"list-collection",[[24,0,"consul-node-list"]],[["@items"],[[32,3]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[15,0,[32,1,["Status"]]],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n Health\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"tooltip",[],[["@position"],["top-start"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,0],["critical",[32,1,["Status"]]],null]],null,[["default","else"],[{"statements":[[2," At least one health check on this node is failing.\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],["warning",[32,1,["Status"]]],null]],null,[["default","else"],[{"statements":[[2," At least one health check on this node has a warning.\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],["passing",[32,1,["Status"]]],null]],null,[["default","else"],[{"statements":[[2," All health checks are passing.\\n"]],"parameters":[]},{"statements":[[2," There are no health checks.\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"a"],[15,6,[30,[36,2],["dc.nodes.show",[32,1,["Node"]]],null]],[12],[2,"\\n "],[1,[32,1,["Node"]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,0],[[32,1,["Address"]],[32,4,["Address"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[14,0,"leader"],[12],[2,"Leader"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,3],[[32,1,["MeshServiceInstances","length"]]],null]],[2," "],[1,[30,[36,4],[[32,1,["MeshServiceInstances","length"]],"Service"],[["without-count"],[true]]]],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[10,"span"],[12],[2,"Address"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,1,["Address"]],"Address"]],null],[2,"\\n "],[1,[32,1,["Address"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["eq","if","href-to","format-number","pluralize"]}',meta:{moduleName:"consul-ui/components/consul/node/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/node/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"iOQYq0d+",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","state","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-node-search-bar"],[17,25]],[["@filter","@namedBlocksInfo"],[[32,22],[30,[36,14],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,10],["components.consul.node.search-bar.",[32,18,["status","key"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,18,["status","key"]]],null],[30,[36,10],["common.consul.",[32,18,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,10],["components.consul.node.search-bar.",[32,18,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,18,["status","value"]]],null],[30,[36,10],["common.consul.",[32,18,["status","value"]]],null],[30,[36,10],["common.brand.",[32,18,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,18,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,10],[[32,19]," ",[32,20]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,19]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,20]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[19,20]}]]],[2,"\\n "]],"parameters":[18]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,23]],null],[32,24],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,22,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,14,["Optgroup"]],[32,14,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,22,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,16],[],[["@value","@selected"],[[32,17],[30,[36,9],[[32,17],[32,22,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[30,[36,13],[[32,17]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[17]}]]]],"parameters":[15,16]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,22,["status","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.consul.status"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["passing","warning","critical"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[[16,0,[31,["value-",[32,12]]]]],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,22,["status","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[32,12]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,12]],null]],null]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,21,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Node:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Node:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null],[30,[36,4],["Status:asc",[30,[36,0],["common.sort.status.asc"],null]],null],[30,[36,4],["Status:desc",[30,[36,0],["common.sort.status.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,21,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.status"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:asc",[30,[36,1],["Status:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:desc",[30,[36,1],["Status:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.node-name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Node:asc",[30,[36,1],["Node:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Node:desc",[30,[36,1],["Node:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","concat","-track-array","each","lowercase","hash"]}',meta:{moduleName:"consul-ui/components/consul/node/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/nspace/form/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"2mV3xg0a",block:'{"symbols":["writer","readOnly","item","Name","Description","State","Guard","ChartAction","dispatch","state","execute","cancel","message","confirm","after","@dc","@partition","@onsubmit","@oncancel","&attrs","@item","@ondelete"],"statements":[[11,"div"],[24,0,"consul-nspace-form"],[17,20],[12],[2,"\\n "],[8,"data-writer",[],[["@sink","@type","@label","@ondelete","@onchange"],[[30,[36,12],["/${partition}/${nspace}/${dc}/nspace",[30,[36,9],null,[["partition","nspace","dc"],["","",[32,21,["Datacenter"]]]]]],null],"nspace","Namespace",[30,[36,0],[[30,[36,3],[[32,22],[32,22],[32,18]],null],[32,21]],null],[30,[36,0],[[30,[36,13],[[32,18]],null],[32,21]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["removed"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/nspace/notifications",[[4,[38,15],null,[["after"],[[30,[36,14],[[32,0],[32,15]],null]]]]],[["@type"],["remove"]],null],[2,"\\n "]],"parameters":[15]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,17],[[30,[36,8],[[30,[36,2],["write nspaces"],null]],null],[32,21],[30,[36,9],null,[["help","Name"],["Must be a valid DNS hostname. Must contain 1-64 characters (numbers, letters, and hyphens), and must begin with a letter. Once created, this cannot be changed.",[30,[36,16],[[30,[36,9],null,[["test","error"],["^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$","Name must be a valid DNS hostname."]]]],null]]]],[30,[36,9],null,[["Description"],[[30,[36,16],null,null]]]]],null,[["default"],[{"statements":[[11,"form"],[4,[38,1],["submit",[30,[36,0],[[32,1,["persist"]],[32,3]],null]],null],[4,[38,7],[[32,2]],null],[12],[2,"\\n\\n"],[8,"state-chart",[],[["@src"],[[30,[36,10],["validate"],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[10,"fieldset"],[12],[2,"\\n"],[6,[37,3],[[30,[36,5],["new nspace"],[["item"],[[32,3]]]]],null,[["default"],[{"statements":[[2," "],[8,"text-input",[],[["@name","@placeholder","@item","@validations","@chart"],["Name","Name",[32,3],[32,4],[30,[36,9],null,[["state","dispatch"],[[32,10],[32,9]]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"text-input",[],[["@expanded","@name","@label","@item","@validations","@chart"],[true,"Description","Description (Optional)",[32,3],[32,5],[30,[36,9],null,[["state","dispatch"],[[32,10],[32,9]]]]]],null],[2,"\\n "],[13],[2,"\\n"],[6,[37,3],[[30,[36,2],["use acls"],null]],null,[["default"],[{"statements":[[2," "],[10,"fieldset"],[14,1,"roles"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Roles"],[13],[2,"\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],["write nspace"],[["item"],[[32,3]]]]],null,[["default","else"],[{"statements":[[2," By adding roles to this namespaces, you will apply them to all tokens created within this namespace.\\n"]],"parameters":[]},{"statements":[[2," The following roles are applied to all tokens created within this namespace.\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[8,"role-selector",[],[["@dc","@nspace","@partition","@disabled","@items"],[[32,16],"default",[32,17],[32,2],[32,3,["ACLs","RoleDefaults"]]]],null],[2,"\\n "],[13],[2,"\\n "],[10,"fieldset"],[14,1,"policies"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Policies"],[13],[2,"\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,3],[[30,[36,8],[[32,2]],null]],null,[["default","else"],[{"statements":[[2," By adding policies to this namespace, you will apply them to all tokens created within this namespace.\\n"]],"parameters":[]},{"statements":[[2," The following policies are applied to all tokens created within this namespace.\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[8,"policy-selector",[],[["@dc","@nspace","@partition","@disabled","@allowIdentity","@items"],[[32,16],"default",[32,17],[32,2],false,[32,3,["ACLs","PolicyDefaults"]]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"div"],[12],[2,"\\n"],[6,[37,3],[[30,[36,11],[[30,[36,5],["new nspace"],[["item"],[[32,3]]]],[30,[36,2],["create nspaces"],null]],null]],null,[["default","else"],[{"statements":[[2," "],[8,"action",[[4,[38,7],[[30,[36,6],[[30,[36,5],["pristine nspace"],[["item"],[[32,3]]]],[30,[36,4],[[32,10],"error"],null]],null]],null]],[["@type"],["submit"]],[["default"],[{"statements":[[2,"\\n Save\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,2],["write nspace"],[["item"],[[32,3]]]]],null,[["default"],[{"statements":[[2," "],[8,"action",[],[["@type"],["submit"]],[["default"],[{"statements":[[2,"Save"]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n "],[8,"action",[[4,[38,1],["click",[30,[36,3],[[32,19],[30,[36,0],[[32,19],[32,3]],null],[30,[36,0],[[32,18],[32,3]],null]],null]],null]],[["@type"],["reset"]],[["default"],[{"statements":[[2,"\\n Cancel\\n "]],"parameters":[]}]]],[2,"\\n\\n"],[6,[37,3],[[30,[36,11],[[30,[36,8],[[30,[36,5],["new nspace"],[["item"],[[32,3]]]]],null],[30,[36,2],["delete nspace"],[["item"],[[32,3]]]]],null]],null,[["default"],[{"statements":[[2," "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to delete this Namespace?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[24,0,"type-delete"],[4,[38,1],["click",[30,[36,0],[[32,14],[30,[36,0],[[32,1,["delete"]],[32,3]],null]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n "],[8,"delete-confirmation",[],[["@message","@execute","@cancel"],[[32,13],[32,11],[32,12]]],null],[2,"\\n "]],"parameters":[11,12,13]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[6,7,8,9,10]}]]],[2,"\\n"],[13],[2,"\\n"]],"parameters":[2,3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["fn","on","can","if","state-matches","is","or","disabled","not","hash","state-chart","and","uri","optional","action","notification","array","let"]}',meta:{moduleName:"consul-ui/components/consul/nspace/form/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/nspace/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"dI19TXfs",block:'{"symbols":["item","Actions","Action","Confirmation","Confirm","@ondelete","&attrs","@items"],"statements":[[8,"list-collection",[[24,0,"consul-nspace-list"],[17,7]],[["@items","@linkable"],[[32,8],"linkable nspace"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[32,1,["DeletedAt"]]],null,[["default","else"],[{"statements":[[2," "],[10,"p"],[12],[2,"\\n Deleting "],[1,[32,1,["Name"]]],[2,"...\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"a"],[15,6,[30,[36,1],["dc.nspaces.edit",[32,1,["Name"]]],null]],[12],[1,[32,1,["Name"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[32,1,["Description"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Description"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Description"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,3],[[30,[36,4],["CONSUL_ACLS_ENABLED"],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/token/ruleset/list",[],[["@item"],[[32,1]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,5],[[32,1,["DeletedAt"]]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,2],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3],[],[["@href"],[[30,[36,1],["dc.nspaces.edit",[32,1,["Name"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,2],["write nspace"],[["item"],[[32,1]]]]],null,[["default","else"],[{"statements":[[2," Edit\\n"]],"parameters":[]},{"statements":[[2," View\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,3],[[30,[36,2],["delete nspace"],[["item"],[[32,1]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,3],[[24,0,"dangerous"]],[["@onclick"],[[30,[36,0],[[32,0],[32,6],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirmation"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4],[[24,0,"warning"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n Confirm delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to delete this namespace?\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirm"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5],[],[[],[]],[["default"],[{"statements":[[2,"Delete"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[3]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["action","href-to","can","if","env","not"]}',meta:{moduleName:"consul-ui/components/consul/nspace/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})) -define("consul-ui/components/consul/nspace/notifications/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"LcZiH9cu",block:'{"symbols":["notice","&attrs","@type"],"statements":[[6,[37,1],[[30,[36,0],[[32,3],"remove"],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-delete"],[17,2]],[["@type"],["success"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,1,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Success!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,1,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Your Namespace has been marked for deletion.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["eq","if"]}',meta:{moduleName:"consul-ui/components/consul/nspace/notifications/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/nspace/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"zG/SiimO",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-nspace-search-bar"],[17,20]],[["@filter","@namedBlocksInfo"],[[32,17],[30,[36,14],null,[["status","search","sort"],[1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,11],["components.consul.nspace.search-bar.",[32,13,["status","key"]]],null]],[["default"],[[30,[36,4],[[30,[36,11],["common.search.",[32,13,["status","key"]]],null],[30,[36,11],["common.consul.",[32,13,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,11],["components.consul.nspace.search-bar.",[32,13,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,11],["common.search.",[32,13,["status","value"]]],null],[30,[36,11],["common.consul.",[32,13,["status","value"]]],null],[30,[36,11],["common.brand.",[32,13,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,13,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,11],[[32,14]," ",[32,15]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,14]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,15]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[14,15]}]]],[2,"\\n "]],"parameters":[13]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,18]],null],[32,19],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,17,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,13],[[30,[36,12],[[30,[36,12],[[32,17,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,17,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,11],["common.consul.",[30,[36,10],[[32,12]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,16,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Name:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Name:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,16,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:asc",[30,[36,1],["Name:asc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:desc",[30,[36,1],["Name:desc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","lowercase","concat","-track-array","each","hash"]}',meta:{moduleName:"consul-ui/components/consul/nspace/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/nspace/selector/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"M3okNSs+",block:'{"symbols":["nspace","isManaging","disclosure","panel","menu","item","@partition","@dc","@onchange","@nspaces","@nspace"],"statements":[[6,[37,4],[[30,[36,18],["use nspaces"],null]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,18],["choose nspaces"],null]],null,[["default"],[{"statements":[[6,[37,17],[[30,[36,3],[[32,11],"default"],null],[30,[36,16],["dc.nspaces",[32,8,["Name"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,0,"nspaces"],[12],[2,"\\n "],[8,"disclosure-menu",[[24,"aria-label","Namespace"]],[["@items"],[[30,[36,13],[[30,[36,6],null,[["Name","href"],["Manage Namespaces",[30,[36,7],["dc.nspaces",[32,8,["Name"]]],null]]]],[30,[36,12],["DeletedAt",[32,10]],null]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Action"]],[[4,[38,8],["click",[32,3,["toggle"]]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,4],[[32,2],"Manage Namespaces",[32,1]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,3,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,5],[[32,10,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,9],["/${partition}/*/${dc}/namespaces",[30,[36,6],null,[["partition","dc"],[[32,7],[32,8,["Name"]]]]]],null],[30,[36,11],[[30,[36,10],[[32,9]],null]],null]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,9],["/${partition}/*/${dc}/namespaces",[30,[36,6],null,[["partition","dc"],[[32,7],[32,8,["Name"]]]]]],null],[30,[36,11],[[30,[36,10],[[32,9]],null]],null]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,[32,4,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n"],[6,[37,15],[[30,[36,14],[[30,[36,14],[[32,5,["items"]]],null]],null]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Item"]],[[16,"aria-current",[30,[36,4],[[30,[36,3],[[30,[36,2],[[32,2],[32,6,["href"]]],null],[30,[36,2],[[30,[36,1],[[32,2]],null],[30,[36,0],[[32,1],[32,6,["Name"]]],null]],null]],null],"true"],null]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Action"]],[[4,[38,8],["click",[32,3,["close"]]],null]],[["@href"],[[30,[36,4],[[32,6,["href"]],[32,6,["href"]],[30,[36,4],[[32,2],[30,[36,7],["dc.services.index"],[["params"],[[30,[36,6],null,[["partition","nspace","dc"],[[30,[36,4],[[30,[36,5],[[32,7,["length"]],0],null],[32,7],[29]],null],[32,6,["Name"]],[32,8,["Name"]]]]]]]],[30,[36,7],["."],[["params"],[[30,[36,6],null,[["partition","nspace"],[[30,[36,4],[[30,[36,5],[[32,7,["length"]],0],null],[32,7],[29]],null],[32,6,["Name"]]]]]]]]],null]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[32,6,["Name"]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[6]}]]],[2," "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1,2]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["eq","not","and","or","if","gt","hash","href-to","on","uri","optional","fn","reject-by","append","-track-array","each","is-href","let","can"]}',meta:{moduleName:"consul-ui/components/consul/nspace/selector/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/partition/form/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"XmdLDsy0",block:'{"symbols":["writer","readOnly","item","Name","Description","State","Guard","ChartAction","dispatch","state","execute","cancel","message","confirm","after","@onsubmit","@oncancel","&attrs","@item","@ondelete"],"statements":[[11,"div"],[24,0,"consul-partition-form"],[17,18],[12],[2,"\\n "],[8,"data-writer",[],[["@sink","@type","@label","@ondelete","@onchange"],[[30,[36,12],["/${partition}/${nspace}/${dc}/partition",[30,[36,8],null,[["partition","nspace","dc"],["","",[32,19,["Datacenter"]]]]]],null],"partition","Partition",[30,[36,0],[[30,[36,3],[[32,20],[32,20],[32,16]],null],[32,19]],null],[30,[36,0],[[30,[36,13],[[32,16]],null],[32,19]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["removed"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/partition/notifications",[[4,[38,15],null,[["after"],[[30,[36,14],[[32,0],[32,15]],null]]]]],[["@type"],["remove"]],null],[2,"\\n "]],"parameters":[15]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,17],[[30,[36,2],[[30,[36,10],["write partition"],null]],null],[32,19],[30,[36,8],null,[["help","Name"],["Must be a valid DNS hostname. Must contain 1-64 characters (numbers, letters, and hyphens), and must begin with a letter. Once created, this cannot be changed.",[30,[36,16],[[30,[36,8],null,[["test","error"],["^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$","Name must be a valid DNS hostname."]]]],null]]]],[30,[36,8],null,[["Description"],[[30,[36,16],null,null]]]]],null,[["default"],[{"statements":[[11,"form"],[4,[38,1],["submit",[30,[36,0],[[32,1,["persist"]],[32,3]],null]],null],[4,[38,7],[[32,2]],null],[12],[2,"\\n\\n"],[8,"state-chart",[],[["@src"],[[30,[36,9],["validate"],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[10,"fieldset"],[12],[2,"\\n"],[6,[37,3],[[30,[36,5],["new partition"],[["item"],[[32,3]]]]],null,[["default"],[{"statements":[[2," "],[8,"text-input",[],[["@name","@placeholder","@item","@validations","@chart"],["Name","Name",[32,3],[32,4],[30,[36,8],null,[["state","dispatch"],[[32,10],[32,9]]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"text-input",[],[["@expanded","@name","@label","@item","@validations","@chart"],[true,"Description","Description (Optional)",[32,3],[32,5],[30,[36,8],null,[["state","dispatch"],[[32,10],[32,9]]]]]],null],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[12],[2,"\\n"],[6,[37,3],[[30,[36,11],[[30,[36,5],["new partition"],[["item"],[[32,3]]]],[30,[36,10],["create partitions"],null]],null]],null,[["default","else"],[{"statements":[[2," "],[8,"action",[[4,[38,7],[[30,[36,6],[[30,[36,5],["pristine partition"],[["item"],[[32,3]]]],[30,[36,4],[[32,10],"error"],null]],null]],null]],[["@type"],["submit"]],[["default"],[{"statements":[[2,"\\n Save\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,2],[[32,2]],null]],null,[["default"],[{"statements":[[2," "],[8,"action",[],[["@type"],["submit"]],[["default"],[{"statements":[[2,"Save"]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n "],[8,"action",[[4,[38,1],["click",[30,[36,3],[[32,17],[30,[36,0],[[32,17],[32,3]],null],[30,[36,0],[[32,16],[32,3]],null]],null]],null]],[["@type"],["reset"]],[["default"],[{"statements":[[2,"\\n Cancel\\n "]],"parameters":[]}]]],[2,"\\n\\n"],[6,[37,3],[[30,[36,11],[[30,[36,2],[[30,[36,5],["new partition"],[["item"],[[32,3]]]]],null],[30,[36,10],["delete partition"],[["item"],[[32,3]]]]],null]],null,[["default"],[{"statements":[[2," "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to delete this Partition?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[24,0,"type-delete"],[4,[38,1],["click",[30,[36,0],[[32,14],[30,[36,0],[[32,1,["delete"]],[32,3]],null]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n "],[8,"delete-confirmation",[],[["@message","@execute","@cancel"],[[32,13],[32,11],[32,12]]],null],[2,"\\n "]],"parameters":[11,12,13]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n\\n"]],"parameters":[6,7,8,9,10]}]]],[2,"\\n"],[13],[2,"\\n\\n"]],"parameters":[2,3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["fn","on","not","if","state-matches","is","or","disabled","hash","state-chart","can","and","uri","optional","action","notification","array","let"]}',meta:{moduleName:"consul-ui/components/consul/partition/form/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/partition/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"r5hj3CrJ",block:'{"symbols":["item","Actions","Action","Confirmation","Confirm","@ondelete","&attrs","@items"],"statements":[[8,"list-collection",[[24,0,"consul-partition-list"],[17,7]],[["@items","@linkable"],[[32,8],"linkable partition"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[32,1,["DeletedAt"]]],null,[["default","else"],[{"statements":[[2," "],[10,"p"],[12],[2,"\\n Deleting "],[1,[32,1,["Name"]]],[2,"...\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"a"],[15,6,[30,[36,1],["dc.partitions.edit",[32,1,["Name"]]],null]],[12],[1,[32,1,["Name"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[32,1,["Description"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Description"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Description"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,4],[[32,1,["DeletedAt"]]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,2],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3],[],[["@href"],[[30,[36,1],["dc.partitions.edit",[32,1,["Name"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,2],["write partition"],[["item"],[[32,1]]]]],null,[["default","else"],[{"statements":[[2," Edit\\n"]],"parameters":[]},{"statements":[[2," View\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,3],[[30,[36,2],["delete partition"],[["item"],[[32,1]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,3],[[24,0,"dangerous"]],[["@onclick"],[[30,[36,0],[[32,0],[32,6],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirmation"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4],[[24,0,"warning"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n Confirm delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to delete this partition?\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirm"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5],[],[[],[]],[["default"],[{"statements":[[2,"Delete"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[3]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["action","href-to","can","if","not"]}',meta:{moduleName:"consul-ui/components/consul/partition/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/partition/notifications/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"0ydQ0+/V",block:'{"symbols":["notice","&attrs","@type"],"statements":[[6,[37,1],[[30,[36,0],[[32,3],"remove"],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-delete"],[17,2]],[["@type"],["success"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,1,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Success!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,1,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Your Partition has been marked for deletion.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["eq","if"]}',meta:{moduleName:"consul-ui/components/consul/partition/notifications/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/partition/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"0zDAbGxg",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-partition-search-bar"],[17,20]],[["@filter","@namedBlocksInfo"],[[32,17],[30,[36,14],null,[["status","search","sort"],[1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,11],["components.consul.nspace.search-bar.",[32,13,["status","key"]]],null]],[["default"],[[30,[36,4],[[30,[36,11],["common.search.",[32,13,["status","key"]]],null],[30,[36,11],["common.consul.",[32,13,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,11],["components.consul.nspace.search-bar.",[32,13,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,11],["common.search.",[32,13,["status","value"]]],null],[30,[36,11],["common.consul.",[32,13,["status","value"]]],null],[30,[36,11],["common.brand.",[32,13,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,13,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,11],[[32,14]," ",[32,15]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,14]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,15]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[14,15]}]]],[2,"\\n "]],"parameters":[13]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,18]],null],[32,19],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,17,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,13],[[30,[36,12],[[30,[36,12],[[32,17,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,17,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,11],["common.consul.",[30,[36,10],[[32,12]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,16,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Name:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Name:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,16,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:asc",[30,[36,1],["Name:asc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:desc",[30,[36,1],["Name:desc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","lowercase","concat","-track-array","each","hash"]}',meta:{moduleName:"consul-ui/components/consul/partition/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/partition/selector/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"AZQPTZYS",block:'{"symbols":["partition","isManaging","disclosure","panel","menu","item","@dc","@partitions","@onchange","@partition"],"statements":[[6,[37,17],[[30,[36,3],[[32,10],"default"],null],[30,[36,16],["dc.partitions",[32,7,["Name"]]],null]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,15],["choose partitions"],[["dc"],[[32,7]]]]],null,[["default","else"],[{"statements":[[2," "],[10,"li"],[14,0,"partitions"],[12],[2,"\\n "],[8,"disclosure-menu",[[24,"aria-label","Admin Partition"]],[["@items"],[[30,[36,9],[[30,[36,5],null,[["Name","href"],["Manage Partitions",[30,[36,6],["dc.partitions",[32,7,["Name"]]],null]]]],[30,[36,8],["DeletedAt",[32,8]],null]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Action"]],[[4,[38,7],["click",[32,3,["toggle"]]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,4],[[32,2],"Manage Partition",[32,1]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,3,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,10],["/*/*/${dc}/partitions",[30,[36,5],null,[["dc"],[[32,7,["Name"]]]]]],null],[30,[36,12],[[30,[36,11],[[32,9]],null]],null]]],null],[2,"\\n "],[8,[32,4,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n"],[6,[37,14],[[30,[36,13],[[30,[36,13],[[32,5,["items"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,5,["Item"]],[[16,"aria-current",[30,[36,4],[[30,[36,3],[[30,[36,2],[[32,2],[32,6,["href"]]],null],[30,[36,2],[[30,[36,1],[[32,2]],null],[30,[36,0],[[32,1],[32,6,["Name"]]],null]],null]],null],"true"],null]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Action"]],[[4,[38,7],["click",[32,3,["close"]]],null]],[["@href"],[[30,[36,4],[[32,6,["href"]],[32,6,["href"]],[30,[36,4],[[32,2],[30,[36,6],["dc.services.index"],[["params"],[[30,[36,5],null,[["partition","nspace","dc"],[[32,6,["Name"]],[29],[32,7,["Name"]]]]]]]],[30,[36,6],["."],[["params"],[[30,[36,5],null,[["partition","nspace"],[[32,6,["Name"]],[29]]]]]]]],null]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[32,6,["Name"]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[6]}]]],[2," "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"li"],[14,0,"partition"],[14,"aria-label","Admin Partition"],[12],[2,"\\n "],[1,"default"],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["eq","not","and","or","if","hash","href-to","on","reject-by","append","uri","optional","fn","-track-array","each","can","is-href","let"]}',meta:{moduleName:"consul-ui/components/consul/partition/selector/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/policy/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"UDg6I3Xb",block:'{"symbols":["item","Actions","Action","Confirmation","Confirm","@ondelete","@items"],"statements":[[8,"list-collection",[[24,0,"consul-policy-list"]],[["@items"],[[32,7]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,1],[[32,1]],null],"policy-management"],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"policy-management"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Type"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Global Management Policy\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"a"],[15,6,[30,[36,4],["dc.acls.policies.edit",[32,1,["ID"]]],null]],[15,0,[30,[36,3],[[30,[36,2],[[30,[36,1],[[32,1]],null],"policy-management"],null],"is-management"],null]],[12],[1,[32,1,["Name"]]],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[14,0,"datacenter"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"Datacenters"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,6],[", ",[30,[36,5],[[32,1]],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[14,0,"description"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Description"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Description"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,2],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3],[],[["@href"],[[30,[36,4],["dc.acls.policies.edit",[32,1,["ID"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,7],["write policy"],[["item"],[[32,1]]]]],null,[["default","else"],[{"statements":[[2," Edit\\n"]],"parameters":[]},{"statements":[[2," View\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,3],[[30,[36,7],["delete policy"],[["item"],[[32,1]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,3],[[24,0,"dangerous"]],[["@onclick"],[[30,[36,0],[[32,0],[32,6],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirmation"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4],[[24,0,"warning"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n Confirm delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to delete this policy?\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirm"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5],[],[[],[]],[["default"],[{"statements":[[2,"Delete"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[3]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["action","policy/typeof","eq","if","href-to","policy/datacenters","join","can"]}',meta:{moduleName:"consul-ui/components/consul/policy/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/policy/notifications/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"rB0yLURE",block:'{"symbols":["error","@status","@type","@error"],"statements":[[6,[37,1],[[30,[36,2],[[32,3],"create"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your policy has been added.\\n"]],"parameters":[]},{"statements":[[2," There was an error adding your policy.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"update"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your policy has been saved.\\n"]],"parameters":[]},{"statements":[[2," There was an error saving your policy.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"delete"],null]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your policy was deleted.\\n"]],"parameters":[]},{"statements":[[2," There was an error deleting your policy.\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[6,[37,3],[[32,4,["errors","firstObject"]]],null,[["default"],[{"statements":[[6,[37,1],[[32,1,["detail"]]],null,[["default"],[{"statements":[[2," "],[10,"br"],[12],[13],[1,[30,[36,0],["(",[30,[36,1],[[32,1,["status"]],[30,[36,0],[[32,1,["status"]],": "],null]],null],[32,1,["detail"]],")"],null]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["concat","if","eq","let"]}',meta:{moduleName:"consul-ui/components/consul/policy/notifications/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/policy/search-bar/index",["exports","@glimmer/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"v58RpJPi",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","state","components","Optgroup","Option","dc","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@partition","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-policy-search-bar"],[17,30]],[["@filter","@namedBlocksInfo"],[[32,26],[30,[36,14],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,10],["components.consul.policy.search-bar.",[32,22,["status","key"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,22,["status","key"]]],null],[30,[36,10],["common.consul.",[32,22,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,10],["components.consul.policy.search-bar.",[32,22,["status","key"]],".options.",[32,22,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,22,["status","value"]]],null],[30,[36,10],["common.consul.",[32,22,["status","value"]]],null],[30,[36,10],["common.brand.",[32,22,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,22,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,10],[[32,23]," ",[32,24]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,23]],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,8],[[30,[36,1],[[32,22,["status","key"]],"datacenter"],null],[32,22,["status","value"]],[32,24]],null]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[23,24]}]]],[2,"\\n "]],"parameters":[22]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,17,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,28]],null],[32,29],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,17,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,26,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,18,["Optgroup"]],[32,18,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,26,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,20],[],[["@value","@selected"],[[32,21],[30,[36,9],[[32,21],[32,26,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[30,[36,17],[[32,21]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[21]}]]]],"parameters":[19,20]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[18]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[17]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-datacenter"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,26,["datacenter","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.consul.datacenter"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,13,["Optgroup"]],[32,13,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[35,13]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,15],[],[["@value","@selected"],[[32,16,["Name"]],[30,[36,9],[[32,16,["Name"]],[32,26,["datacenter","value"]]],null]]],[["default"],[{"statements":[[1,[32,16,["Name"]]]],"parameters":[]}]]],[2,"\\n"]],"parameters":[16]}]]],[2," "],[8,"data-source",[],[["@src","@loading","@onchange"],[[30,[36,15],["/${partition}/*/*/datacenters",[30,[36,14],null,[["partition"],[[32,27]]]]],null],"lazy",[30,[36,3],[[32,0],[30,[36,16],[[32,0,["dcs"]]],null]],[["value"],["data"]]]]],null],[2,"\\n"]],"parameters":[14,15]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]],[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-kind"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,26,["kind","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.policy.search-bar.kind.name"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["global-management","standard"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[[16,0,[31,["value-",[32,12]]]]],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,26,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["components.consul.policy.search-bar.kind.options.",[32,12]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,12]],null]],null]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,25,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Name:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Name:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,25,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.ui.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:asc",[30,[36,1],["Name:asc",[32,25,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:desc",[30,[36,1],["Name:desc",[32,25,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","concat","-track-array","each","dcs","hash","uri","mut","lowercase"]}',meta:{moduleName:"consul-ui/components/consul/policy/search-bar/index.hbs"}}) -class r extends t.default{}e.default=r,Ember._setComponentTemplate(n,r)})),define("consul-ui/components/consul/role/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"qgd++x7w",block:'{"symbols":["item","Actions","Action","Confirmation","Confirm","@ondelete","&attrs","@items"],"statements":[[8,"list-collection",[[24,0,"consul-role-list"],[17,7]],[["@items"],[[32,8]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"a"],[15,6,[30,[36,1],["dc.acls.roles.edit",[32,1,["ID"]]],null]],[12],[1,[32,1,["Name"]]],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/token/ruleset/list",[],[["@item"],[[32,1]]],null],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Description"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Description"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,2],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3],[],[["@href"],[[30,[36,1],["dc.acls.roles.edit",[32,1,["ID"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,2],["write role"],[["item"],[[32,1]]]]],null,[["default","else"],[{"statements":[[2," Edit\\n"]],"parameters":[]},{"statements":[[2," View\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,3],[[30,[36,2],["delete role"],[["item"],[[32,1]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,3],[[24,0,"dangerous"]],[["@onclick"],[[30,[36,0],[[32,0],[32,6],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirmation"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4],[[24,0,"warning"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n Confirm delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to delete this role?\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirm"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5],[],[[],[]],[["default"],[{"statements":[[2,"Delete"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[3]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["action","href-to","can","if"]}',meta:{moduleName:"consul-ui/components/consul/role/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/role/notifications/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"pmI3em2e",block:'{"symbols":["error","@status","@type","@error"],"statements":[[6,[37,1],[[30,[36,2],[[32,3],"create"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your role has been added.\\n"]],"parameters":[]},{"statements":[[2," There was an error adding your role.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"update"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your role has been saved.\\n"]],"parameters":[]},{"statements":[[2," There was an error saving your role.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"delete"],null]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your role was deleted.\\n"]],"parameters":[]},{"statements":[[2," There was an error deleting your role.\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[6,[37,3],[[32,4,["errors","firstObject"]]],null,[["default"],[{"statements":[[6,[37,1],[[32,1,["detail"]]],null,[["default"],[{"statements":[[2," "],[10,"br"],[12],[13],[1,[30,[36,0],["(",[30,[36,1],[[32,1,["status"]],[30,[36,0],[[32,1,["status"]],": "],null]],null],[32,1,["detail"]],")"],null]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["concat","if","eq","let"]}',meta:{moduleName:"consul-ui/components/consul/role/notifications/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/role/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"wPLJBG1T",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-role-search-bar"],[17,20]],[["@filter","@namedBlocksInfo"],[[32,17],[30,[36,14],null,[["status","search","sort"],[1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,11],["components.consul.role.search-bar.",[32,13,["status","key"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,11],["common.search.",[32,13,["status","key"]]],null],[30,[36,11],["common.consul.",[32,13,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,11],["components.consul.role.search-bar.",[32,13,["status","key"]],".options.",[32,13,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,11],["common.search.",[32,13,["status","value"]]],null],[30,[36,11],["common.consul.",[32,13,["status","value"]]],null],[30,[36,11],["common.brand.",[32,13,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,13,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,11],[[32,14]," ",[32,15]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,14]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,15]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[14,15]}]]],[2,"\\n "]],"parameters":[13]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,18]],null],[32,19],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,17,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,13],[[30,[36,12],[[30,[36,12],[[32,17,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,17,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,11],["common.consul.",[30,[36,10],[[32,12]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,16,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Name:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Name:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null],[30,[36,4],["CreateIndex:desc",[30,[36,0],["common.sort.age.desc"],null]],null],[30,[36,4],["CreateIndex:asc",[30,[36,0],["common.sort.age.asc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,16,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.ui.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:asc",[30,[36,1],["Name:asc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:desc",[30,[36,1],["Name:desc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.ui.creation"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["CreateIndex:desc",[30,[36,1],["CreateIndex:desc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.age.desc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["CreateIndex:asc",[30,[36,1],["CreateIndex:asc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.age.asc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","lowercase","concat","-track-array","each","hash"]}',meta:{moduleName:"consul-ui/components/consul/role/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/server/card/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"Ec5kcuWa",block:'{"symbols":["@item","&attrs"],"statements":[[11,"div"],[16,0,[30,[36,6],["consul-server-card",[30,[36,0],["voting-status-leader",[30,[36,3],[[32,1,["Status"]],"leader"],null]],null],[30,[36,0],["voting-status-voter",[30,[36,5],[[30,[36,4],[[32,1,["ReadReplica"]]],null],[30,[36,3],[[32,1,["Status"]],"voter"],null]],null]],null],[30,[36,0],["voting-status-non-voter",[30,[36,2],[[32,1,["ReadReplica"]],[30,[36,1],[[32,1,["Status"]],[30,[36,0],["non-voter","staging"],null]],null]],null]],null]],null]],[17,2],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n\\n "],[11,"dt"],[24,0,"name"],[4,[38,7],["Leader"],null],[12],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Name"]]],[2,"\\n "],[13],[2,"\\n\\n "],[10,"dt"],[15,0,[30,[36,6],["health-status",[30,[36,0],["healthy",[32,1,["Healthy"]]],null]],null]],[12],[2,"\\n Status\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,8],[[30,[36,1],[[32,1,["Status"]],[30,[36,0],["leader","voter"],null]],null],"Active voter","Backup voter"],null]],[2,"\\n "],[13],[2,"\\n\\n "],[13],[2,"\\n"],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["array","contains","or","eq","not","and","class-map","tooltip","if"]}',meta:{moduleName:"consul-ui/components/consul/server/card/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/server/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"sOHjodBR",block:'{"symbols":["item","&attrs","@items"],"statements":[[11,"div"],[16,0,[30,[36,1],["consul-server-list"],null]],[17,2],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,2],[[32,3]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,0],["dc.nodes.show",[32,1,["Name"]]],null]],[12],[2,"\\n "],[8,"consul/server/card",[],[["@item"],[[32,1]]],null],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["href-to","class-map","-track-array","each"]}',meta:{moduleName:"consul-ui/components/consul/server/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/service-identity/template/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"spWJOarV",block:'{"symbols":["@name","@nspace","@partition"],"statements":[[6,[37,2],[[30,[36,1],["use partitions"],null]],null,[["default","else"],[{"statements":[[2,"partition \\""],[1,[30,[36,0],[[32,3],"default"],null]],[2,"\\" {\\n"],[6,[37,2],[[30,[36,1],["use nspaces"],null]],null,[["default","else"],[{"statements":[[2," namespace \\""],[1,[30,[36,0],[[32,2],"default"],null]],[2,"\\" {\\n service \\""],[1,[32,1]],[2,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service \\""],[1,[32,1]],[2,"-sidecar-proxy\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n node_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n }\\n"]],"parameters":[]},{"statements":[[2," service \\""],[1,[32,1]],[2,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service \\""],[1,[32,1]],[2,"-sidecar-proxy\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n node_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n"]],"parameters":[]}]]],[2,"}\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,1],["use nspaces"],null]],null,[["default","else"],[{"statements":[[2,"namespace \\""],[1,[30,[36,0],[[32,2],"default"],null]],[2,"\\" {\\n service \\""],[1,[32,1]],[2,"\\" {\\n\\t policy = \\"write\\"\\n }\\n service \\""],[1,[32,1]],[2,"-sidecar-proxy\\" {\\n\\t policy = \\"write\\"\\n }\\n service_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n node_prefix \\"\\" {\\n\\t policy = \\"read\\"\\n }\\n}\\n"]],"parameters":[]},{"statements":[[2,"service \\""],[1,[32,1]],[2,"\\" {\\n\\tpolicy = \\"write\\"\\n}\\nservice \\""],[1,[32,1]],[2,"-sidecar-proxy\\" {\\n\\tpolicy = \\"write\\"\\n}\\nservice_prefix \\"\\" {\\n\\tpolicy = \\"read\\"\\n}\\nnode_prefix \\"\\" {\\n\\tpolicy = \\"read\\"\\n}\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["or","can","if"]}',meta:{moduleName:"consul-ui/components/consul/service-identity/template/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/service-instance/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"AAaMSxui",block:'{"symbols":["proxies","item","index","proxy","checks","@node","@routeName","&attrs","@items","@proxies"],"statements":[[6,[37,10],[[30,[36,13],[[32,10],"Service.Proxy.DestinationServiceID"],null]],null,[["default"],[{"statements":[[8,"list-collection",[[24,0,"consul-service-instance-list"],[17,8]],[["@items"],[[32,9]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,11],[[32,7],"dc.services.show"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"a"],[15,6,[30,[36,3],[[32,7],[32,2,["Service","Service"]]],null]],[12],[2,"\\n "],[1,[32,2,["Service","ID"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"a"],[15,6,[30,[36,3],[[32,7],[32,2,["Service","Service"]],[32,2,["Node","Node"]],[30,[36,8],[[32,2,["Service","ID"]],[32,2,["Service","Service"]]],null]],null]],[12],[2,"\\n "],[1,[32,2,["Service","ID"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,10],[[30,[36,12],[[32,1],[32,2,["Service","ID"]]],null]],null,[["default"],[{"statements":[[6,[37,10],[[30,[36,9],[[30,[36,7],[[32,2,["Checks"]],[30,[36,8],[[32,4,["Checks"]],[30,[36,7],null,null]],null]],null]],null]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[32,6]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/external-source",[],[["@item"],[[32,2,["Service"]]]],null],[2,"\\n "],[8,"consul/instance-checks",[],[["@type","@items"],["service",[30,[36,4],["ServiceID","",[32,5]],null]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"consul/external-source",[],[["@item"],[[32,2,["Service"]]]],null],[2,"\\n\\n "],[8,"consul/instance-checks",[],[["@type","@items"],["service",[30,[36,4],["ServiceID","",[32,5]],null]]],null],[2,"\\n "],[8,"consul/instance-checks",[],[["@type","@items"],["node",[30,[36,5],["ServiceID","",[32,5]],null]]],null],[2,"\\n"]],"parameters":[]}]]],[6,[37,1],[[32,4]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"mesh"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n This service uses a proxy for the Consul service mesh\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n in service mesh with proxy\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,1],[[30,[36,6],[[32,6]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"node"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Node\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,3],["dc.nodes.show",[32,2,["Node","Node"]]],null]],[12],[1,[32,2,["Node","Node"]]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,1],[[32,2,["Service","Port"]]],null,[["default","else"],[{"statements":[[2," "],[10,"dl"],[14,0,"address"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n IP Address and Port\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n"],[6,[37,1],[[30,[36,2],[[32,2,["Service","Address"]],""],null]],null,[["default","else"],[{"statements":[[2," "],[1,[32,2,["Service","Address"]]],[2,":"],[1,[32,2,["Service","Port"]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[1,[32,2,["Node","Address"]]],[2,":"],[1,[32,2,["Service","Port"]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[32,2,["Service","SocketPath"]]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"socket"],[12],[2,"\\n "],[11,"dt"],[4,[38,0],null,null],[12],[2,"\\n Socket Path\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,2,["Service","SocketPath"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[8,"tag-list",[],[["@item"],[[32,2,["Service"]]]],null],[2,"\\n\\n"]],"parameters":[5]}]]]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[2,3]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["tooltip","if","not-eq","href-to","filter-by","reject-by","not","array","or","merge-checks","let","eq","get","to-hash"]}',meta:{moduleName:"consul-ui/components/consul/service-instance/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/service-instance/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"kLJwzL+X",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","source","components","Optgroup","Option","state","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@sources","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-service-instance-search-bar"],[17,30]],[["@filter","@namedBlocksInfo"],[[32,26],[30,[36,15],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,10],["components.consul.service-instance.search-bar.",[32,22,["status","key"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,22,["status","key"]]],null],[30,[36,10],["common.consul.",[32,22,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,10],["components.consul.service-instance.search-bar.",[32,22,["status","key"]],".options.",[32,22,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,22,["status","value"]]],null],[30,[36,10],["common.consul.",[32,22,["status","value"]]],null],[30,[36,10],["common.brand.",[32,22,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,22,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,10],[[32,23]," ",[32,24]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,23]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,24]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[23,24]}]]],[2,"\\n "]],"parameters":[22]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,17,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,28]],null],[32,29],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[32,26,["searchproperty"]]],null,[["default"],[{"statements":[[2," "],[8,[32,17,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,26,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,18,["Optgroup"]],[32,18,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,26,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,20],[],[["@value","@selected"],[[32,21],[30,[36,9],[[32,21],[32,26,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[30,[36,14],[[32,21]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[21]}]]]],"parameters":[19,20]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[18]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[17]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,26,["status","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.consul.status"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,13,["Optgroup"]],[32,13,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["passing","warning","critical","empty"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,15],[[16,0,[31,["value-",[32,16]]]]],[["@value","@selected"],[[32,16],[30,[36,9],[[32,16],[32,26,["status","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[32,16]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,16]],null]],null]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[16]}]]]],"parameters":[14,15]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]],[2,"\\n"],[6,[37,8],[[30,[36,13],[[32,27,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,[32,8,["Select"]],[[24,0,"type-source"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,26,["source","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.source"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,27]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[[16,0,[32,12]]],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,26,["source","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.brand.",[32,12]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,25,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Name:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Name:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null],[30,[36,4],["Status:asc",[30,[36,0],["common.sort.status.asc"],null]],null],[30,[36,4],["Status:desc",[30,[36,0],["common.sort.status.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,25,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.status"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:asc",[30,[36,1],["Status:asc",[32,25,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:desc",[30,[36,1],["Status:desc",[32,25,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["components.consul.service-instance.search-bar.sort.name.name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:asc",[30,[36,1],["Name:asc",[32,25,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:desc",[30,[36,1],["Name:desc",[32,25,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","concat","-track-array","each","gt","lowercase","hash"]}',meta:{moduleName:"consul-ui/components/consul/service-instance/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/service/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"zit0hWHY",block:'{"symbols":["item","index","@partition","&attrs","@items","@nspace"],"statements":[[8,"list-collection",[[24,0,"consul-service-list"],[17,4]],[["@items","@linkable"],[[32,5],"linkable service"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[15,0,[32,1,["MeshStatus"]]],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n Health\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"tooltip",[],[["@position"],["top-start"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,0],[[30,[36,4],["critical",[32,1,["MeshStatus"]]],null]],null,[["default","else"],[{"statements":[[2," At least one health check on one instance is failing.\\n"]],"parameters":[]},{"statements":[[6,[37,0],[[30,[36,4],["warning",[32,1,["MeshStatus"]]],null]],null,[["default","else"],[{"statements":[[2," At least one health check on one instance has a warning.\\n"]],"parameters":[]},{"statements":[[6,[37,0],[[30,[36,4],["passing",[32,1,["MeshStatus"]]],null]],null,[["default","else"],[{"statements":[[2," All health checks are passing.\\n"]],"parameters":[]},{"statements":[[2," There are no health checks.\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,0],[[30,[36,8],[[32,1,["InstanceCount"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[10,"a"],[15,6,[30,[36,7],["dc.services.show.index",[32,1,["Name"]]],[["params"],[[30,[36,0],[[30,[36,6],[[32,1,["Partition"]],[32,3]],null],[30,[36,5],null,[["partition","nspace"],[[32,1,["Partition"]],[32,1,["Namespace"]]]]],[30,[36,5],null,null]],null]]]]],[12],[2,"\\n "],[1,[32,1,["Name"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"p"],[12],[2,"\\n "],[1,[32,1,["Name"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/kind",[],[["@item"],[[32,1]]],null],[2,"\\n "],[8,"consul/external-source",[],[["@item"],[[32,1]]],null],[2,"\\n"],[6,[37,0],[[30,[36,1],[[30,[36,6],[[32,1,["InstanceCount"]],0],null],[30,[36,1],[[30,[36,6],[[32,1,["Kind"]],"terminating-gateway"],null],[30,[36,6],[[32,1,["Kind"]],"ingress-gateway"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,2],[[32,1,["InstanceCount"]]],null]],[2," "],[1,[30,[36,3],[[32,1,["InstanceCount"]],"instance"],[["without-count"],[true]]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,0],[[30,[36,4],[[32,1,["Kind"]],"terminating-gateway"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,2],[[32,1,["GatewayConfig","AssociatedServiceCount"]]],null]],[2," "],[1,[30,[36,3],[[32,1,["GatewayConfig","AssociatedServiceCount"]],"linked service"],[["without-count"],[true]]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,0],[[30,[36,4],[[32,1,["Kind"]],"ingress-gateway"],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,2],[[32,1,["GatewayConfig","AssociatedServiceCount"]]],null]],[2," "],[1,[30,[36,3],[[32,1,["GatewayConfig","AssociatedServiceCount"]],"upstream"],[["without-count"],[true]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[6,[37,0],[[30,[36,9],[[32,1,["ConnectedWithGateway"]],[32,1,["ConnectedWithProxy"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"mesh"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n This service uses a proxy for the Consul service mesh\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,0],[[30,[36,1],[[32,1,["ConnectedWithGateway"]],[32,1,["ConnectedWithProxy"]]],null]],null,[["default","else"],[{"statements":[[2," "],[10,"dd"],[12],[2,"\\n in service mesh with proxy and gateway\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,0],[[32,1,["ConnectedWithProxy"]]],null,[["default","else"],[{"statements":[[2," "],[10,"dd"],[12],[2,"\\n in service mesh with proxy\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,0],[[32,1,["ConnectedWithGateway"]]],null,[["default"],[{"statements":[[2," "],[10,"dd"],[12],[2,"\\n in service mesh with gateway\\n "],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"consul/bucket/list",[],[["@item","@nspace","@partition"],[[32,1],[32,6],[32,3]]],null],[2,"\\n "],[8,"tag-list",[],[["@item"],[[32,1]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["if","and","format-number","pluralize","eq","hash","not-eq","href-to","gt","or"]}',meta:{moduleName:"consul-ui/components/consul/service/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/service/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"tDwWS/Y3",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","source","nonDefaultPartitions","partition","components","Optgroup","Option","state","kind","components","Optgroup","Option","state","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@sources","@partitions","@partition","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-service-search-bar"],[17,39]],[["@filter","@namedBlocksInfo"],[[32,33],[30,[36,16],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,10],["components.consul.service.search-bar.",[32,29,["status","key"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,29,["status","key"]]],null],[30,[36,10],["common.consul.",[32,29,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,10],["components.consul.service.search-bar.",[32,29,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,29,["status","value"]]],null],[30,[36,10],["common.consul.",[32,29,["status","value"]]],null],[30,[36,10],["common.brand.",[32,29,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,29,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,10],[[32,30]," ",[32,31]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,30]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,31]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[30,31]}]]],[2,"\\n "]],"parameters":[29]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,24,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,37]],null],[32,38],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,24,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,33,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,25,["Optgroup"]],[32,25,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,33,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,27],[],[["@value","@selected"],[[32,28],[30,[36,9],[[32,28],[32,33,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[30,[36,15],[[32,28]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[28]}]]]],"parameters":[26,27]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[25]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[24]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,33,["status","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.consul.status"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,20,["Optgroup"]],[32,20,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["passing","warning","critical","empty"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,22],[[16,0,[31,["value-",[32,23]]]]],[["@value","@selected"],[[32,23],[30,[36,9],[[32,23],[32,33,["status","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[32,23]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,23]],null]],null]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[23]}]]]],"parameters":[21,22]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[20]}]]],[2,"\\n "],[8,[32,8,["Select"]],[],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,33,["kind","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.service.search-bar.kind"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,15,["Optgroup"]],[32,15,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,17],[],[["@value","@selected"],["service",[30,[36,9],["service",[32,33,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["common.consul.service"],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,16],[],[["@label"],[[30,[36,0],["common.consul.gateway"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["ingress-gateway","terminating-gateway","mesh-gateway"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,17],[],[["@value","@selected"],[[32,19],[30,[36,9],[[32,19],[32,33,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[32,19]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[19]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,[32,16],[],[["@label"],[[30,[36,0],["common.consul.mesh"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["in-mesh","not-in-mesh"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,17],[],[["@value","@selected"],[[32,18],[30,[36,9],[[32,18],[32,33,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.search.",[32,18]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[18]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[16,17]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[15]}]]],[2,"\\n"],[6,[37,8],[[30,[36,13],[[32,34,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,[32,8,["Select"]],[[24,0,"type-source"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,33,["source","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.source"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,6],[[30,[36,14],["Partition",[32,36],[32,35]],null]],null,[["default"],[{"statements":[[6,[37,8],[[30,[36,13],[[32,13,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,[32,10],[],[["@label"],[[30,[36,0],["common.brand.consul"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,35]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[[24,0,"partition"]],[["@value","@selected"],[[32,14],[30,[36,9],[[32,14],[32,33,["source","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[32,14]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[14]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[13]}]]],[2,"\\n"],[6,[37,8],[[30,[36,13],[[32,34,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,[32,10],[],[["@label"],[[30,[36,0],["common.search.integrations"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,34]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[[16,0,[32,12]]],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,33,["source","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.brand.",[32,12]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,32,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Name:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Name:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null],[30,[36,4],["Status:asc",[30,[36,0],["common.sort.status.asc"],null]],null],[30,[36,4],["Status:desc",[30,[36,0],["common.sort.status.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,32,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.status"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:asc",[30,[36,1],["Status:asc",[32,32,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:desc",[30,[36,1],["Status:desc",[32,32,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.service-name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:asc",[30,[36,1],["Name:asc",[32,32,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:desc",[30,[36,1],["Name:desc",[32,32,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","concat","-track-array","each","gt","reject-by","lowercase","hash"]}',meta:{moduleName:"consul-ui/components/consul/service/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/source/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"GdArOCfb",block:'{"symbols":["@source"],"statements":[[10,"dl"],[14,0,"tooltip-panel"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[10,"span"],[14,0,"consul-source"],[12],[2,"\\n "],[1,[32,1]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"menu-panel",[],[["@position"],["left"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["components.consul.source.header"],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,"role","separator"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.source.menu-title"],null]],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,"role","none"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[14,"tabindex","-1"],[14,"role","menuitem"],[15,6,[31,[[30,[36,1],["CONSUL_DOCS_URL"],null],"/connect/l7-traffic"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.source.links.documentation"],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["t","env"]}',meta:{moduleName:"consul-ui/components/consul/source/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/token/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"FbsUqUSU",block:'{"symbols":["item","Actions","Action","Confirmation","Confirm","Confirmation","Confirm","Confirmation","Confirm","@ondelete","@onuse","@onlogout","@onclone","@items","@token"],"statements":[[8,"list-collection",[[24,0,"consul-token-list"]],[["@items"],[[32,14]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,2],[[32,1,["AccessorID"]],[32,15,["AccessorID"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,"rel","me"],[12],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"tooltip",[],[["@position"],["top-start"]],[["default"],[{"statements":[[2,"\\n Your token\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"a"],[15,6,[30,[36,4],["dc.acls.tokens.edit",[32,1,["AccessorID"]]],null]],[12],[1,[30,[36,5],[[32,1,["AccessorID"]],-8],null]],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Scope"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,3],[[32,1,["Local"]],"local","global"],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"consul/token/ruleset/list",[],[["@item"],[[32,1]]],null],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Description"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,6],[[32,1,["Description"]],[32,1,["Name"]]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[32,1,["hasSecretID"]]],null,[["default"],[{"statements":[[2," "],[8,"copy-button",[],[["@value","@name"],[[32,1,["SecretID"]],[30,[36,1],["components.consul.token.secretID"],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,1],["components.consul.token.secretID"],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,[32,2],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,3],[],[["@href"],[[30,[36,4],["dc.acls.tokens.edit",[32,1,["AccessorID"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,7],["write token"],[["item"],[[32,1]]]]],null,[["default","else"],[{"statements":[[2," Edit\\n"]],"parameters":[]},{"statements":[[2," View\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,3],[[30,[36,7],["duplicate token"],[["item"],[[32,1]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,3],[],[["@onclick"],[[30,[36,0],[[32,0],[32,13],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Duplicate\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,3],[[30,[36,2],[[32,1,["AccessorID"]],[35,8,["AccessorID"]]],null]],null,[["default","else"],[{"statements":[[2," "],[8,[32,3],[[24,0,"dangerous"]],[["@onclick"],[[30,[36,0],[[32,0],[32,12],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Logout\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirmation"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8],[[24,0,"warning"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n Confirm logout\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to stop using this ACL token? This will log you out.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirm"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,9],[],[[],[]],[["default"],[{"statements":[[2,"Logout"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,[32,3],[],[["@onclick"],[[30,[36,0],[[32,0],[32,11],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Use\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirmation"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[[24,0,"warning"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n Confirm use\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to use this ACL token?\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirm"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7],[],[[],[]],[["default"],[{"statements":[[2,"Use"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n\\n"],[6,[37,3],[[30,[36,7],["delete token"],[["item","token"],[[32,1],[32,15]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,3],[[24,0,"dangerous"]],[["@onclick"],[[30,[36,0],[[32,0],[32,10],[32,1]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirmation"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4],[[24,0,"warning"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n Confirm delete\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to delete this token?\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["confirm"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5],[],[[],[]],[["default"],[{"statements":[[2,"Delete"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["action","t","eq","if","href-to","substr","or","can","token"]}',meta:{moduleName:"consul-ui/components/consul/token/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/token/notifications/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"8YjZ0J1V",block:'{"symbols":["error","@status","@type","@item","@error"],"statements":[[6,[37,1],[[30,[36,2],[[32,3],"create"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," The token has been added.\\n"]],"parameters":[]},{"statements":[[2," There was an error adding the token.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"update"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," The token has been saved.\\n"]],"parameters":[]},{"statements":[[2," There was an error saving the token.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"delete"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," The token was deleted.\\n"]],"parameters":[]},{"statements":[[2," There was an error deleting the token.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"clone"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," The token has been cloned as "],[1,[30,[36,3],[[32,4,["AccessorID"]],8,false],null]],[2,"\\n"]],"parameters":[]},{"statements":[[2," There was an error cloning the token.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"use"],null]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," You are now using the new ACL token\\n"]],"parameters":[]},{"statements":[[2," There was an error using that ACL token.\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[6,[37,4],[[32,5,["errors","firstObject"]]],null,[["default"],[{"statements":[[6,[37,1],[[32,1,["detail"]]],null,[["default"],[{"statements":[[2," "],[10,"br"],[12],[13],[1,[30,[36,0],["(",[30,[36,1],[[32,1,["status"]],[30,[36,0],[[32,1,["status"]],": "],null]],null],[32,1,["detail"]],")"],null]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["concat","if","eq","truncate","let"]}',meta:{moduleName:"consul-ui/components/consul/token/notifications/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/token/ruleset/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"BIcaaAvq",block:'{"symbols":["policies","policies","item","identities","item","management","item"],"statements":[[6,[37,10],[[30,[36,12],[[30,[36,7],[[35,6,["Policies"]],[35,6,["ACLs","PolicyDefaults"]],[30,[36,5],null,null]],null]],null]],null,[["default"],[{"statements":[[6,[37,10],[[30,[36,8],[[32,1],"management"],null]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,6,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n Management\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[30,[36,1],[[30,[36,8],[[32,1],"management"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[15,0,[30,[36,0],[[32,7]],null]],[12],[1,[32,7,["Name"]]],[13],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[6]}]]],[6,[37,10],[[30,[36,8],[[32,1],"identities"],null]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,4,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Identities"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[30,[36,1],[[32,4]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[15,0,[30,[36,0],[[32,5]],null]],[12],[1,[32,5,["Name"]]],[13],[2,"\\n"]],"parameters":[5]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[4]}]]],[6,[37,4],[[30,[36,11],[[35,6]],null]],null,[["default","else"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Rules"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n Legacy tokens have embedded rules.\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,10],[[30,[36,9],[[30,[36,8],[[32,1],"policies"],null],[30,[36,7],[[35,6,["Roles"]],[35,6,["ACLs","RoleDefaults"]],[30,[36,5],null,null]],null]],null]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,2,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Rules"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n"],[6,[37,2],[[30,[36,1],[[30,[36,1],[[32,2]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[15,0,[30,[36,0],[[32,3]],null]],[12],[1,[32,3,["Name"]]],[13],[2,"\\n"]],"parameters":[3]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[2]}]]]],"parameters":[]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["policy/typeof","-track-array","each","gt","if","array","item","or","get","append","let","token/is-legacy","policy/group"]}',meta:{moduleName:"consul-ui/components/consul/token/ruleset/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})),define("consul-ui/components/consul/token/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"MmGQHD2n",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","state","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-token-search-bar"],[17,25]],[["@filter","@namedBlocksInfo"],[[32,22],[30,[36,14],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,10],["components.consul.token.search-bar.",[32,18,["status","key"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,18,["status","key"]]],null],[30,[36,10],["common.consul.",[32,18,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,10],["components.consul.token.search-bar.",[32,18,["status","key"]],".options.",[32,18,["status","value"]]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,18,["status","value"]]],null],[30,[36,10],["common.consul.",[32,18,["status","value"]]],null],[30,[36,10],["common.brand.",[32,18,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,18,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,10],[[32,19]," ",[32,20]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,19]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,20]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[19,20]}]]],[2,"\\n "]],"parameters":[18]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,23]],null],[32,24],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,22,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,14,["Optgroup"]],[32,14,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,22,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,16],[],[["@value","@selected"],[[32,17],[30,[36,9],[[32,17],[32,22,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[30,[36,13],[[32,17]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[17]}]]]],"parameters":[15,16]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-status"]],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,22,["kind","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.token.search-bar.kind.name"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["global-management","global","local"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[[16,0,[31,["value-",[32,12]]]]],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,22,["kind","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["components.consul.token.search-bar.kind.options.",[32,12]],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,12]],null]],null]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,21,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["CreateTime:desc",[30,[36,0],["common.sort.age.desc"],null]],null],[30,[36,4],["CreateTime:asc",[30,[36,0],["common.sort.age.asc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,21,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.ui.creation"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["CreateTime:desc",[30,[36,1],["CreateTime:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.age.desc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["CreateTime:asc",[30,[36,1],["CreateTime:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.age.asc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","concat","-track-array","each","lowercase","hash"]}',meta:{moduleName:"consul-ui/components/consul/token/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/token/selector/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l -function s(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=Ember.HTMLBars.template({id:"lqyx1nTC",block:'{"symbols":["__arg0","__arg1","authDialog","disclosure","panel","menu","modal","authForm","authDialog","modal","authForm","@dc","@nspace","@partition","&default"],"statements":[[6,[37,4],[[30,[36,7],["use acls"],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n\\n "],[8,"auth-dialog",[],[["@src","@sink","@onchange","@namedBlocksInfo"],[[30,[36,8],["settings://consul:token"],null],[30,[36,8],["settings://consul:token"],null],[32,0,["reauthorize"]],[30,[36,0],null,[["unauthorized","authorized"],[1,1]]]]],[["default"],[{"statements":[[6,[37,4],[[30,[36,6],[[32,1],"unauthorized"],null]],null,[["default","else"],[{"statements":[[6,[37,5],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,"portal",[],[["@target"],["app-before-skip-links"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[4,[38,2],["click",[30,[36,3],[[32,0,["modal","open"]]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Login\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"action",[[4,[38,2],["click",[30,[36,3],[[32,0,["modal","open"]]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Log in\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"modal-dialog",[],[["@name","@onclose","@onopen","@aria"],["login-toggle",[32,0,["close"]],[32,0,["open"]],[30,[36,0],null,[["label"],["Log in to Consul"]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"modal",[32,10]]],null],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n Log in to Consul\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[8,"auth-form",[],[["@dc","@partition","@nspace","@onsubmit"],[[32,12,["Name"]],[32,14],[32,13],[30,[36,1],[[32,0],[32,9,["login"]]],[["value"],["data"]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"authForm",[32,11]]],null],[2,"\\n"],[6,[37,4],[[30,[36,7],["use SSO"],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11,["Method"]],[],[["@matches"],["sso"]],[["default"],[{"statements":[[2,"\\n "],[8,"oidc-select",[],[["@dc","@nspace","@disabled","@onchange","@onerror"],[[32,12,["Name"]],[32,13],[32,11,["disabled"]],[32,11,["submit"]],[32,11,["error"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[11]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[4,[38,2],["click",[32,10,["close"]]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Continue without logging in\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[10]}]]],[2,"\\n "]],"parameters":[9]}]]]],"parameters":[]},{"statements":[[6,[37,4],[[30,[36,6],[[32,1],"authorized"],null]],null,[["default"],[{"statements":[[6,[37,5],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,"modal-dialog",[],[["@name","@onclose","@onopen","@aria"],["login-toggle",[32,0,["close"]],[32,0,["open"]],[30,[36,0],null,[["label"],["Log in with a different token"]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"modal",[32,7]]],null],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n Log in with a different token\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[8,"auth-form",[],[["@dc","@nspace","@partition","@onsubmit"],[[32,12,["Name"]],[32,13],[32,14],[30,[36,1],[[32,0],[32,3,["login"]]],[["value"],["data"]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"authForm",[32,8]]],null],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[4,[38,2],["click",[32,7,["close"]]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Continue without logging in\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n "],[8,"portal",[],[["@target"],["app-before-skip-links"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[4,[38,2],["click",[30,[36,3],[[32,3,["logout"]]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Logout\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"disclosure-menu",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4,["Action"]],[[4,[38,2],["click",[32,4,["toggle"]]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Logout\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,4,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[32,3,["token","AccessorID"]]],null,[["default"],[{"statements":[[2," "],[8,"auth-profile",[],[["@item"],[[32,3,["token"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,[32,5,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Separator"]],[],[[],[]],null],[2,"\\n "],[8,[32,6,["Item"]],[[24,0,"dangerous"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Action"]],[[4,[38,2],["click",[30,[36,3],[[32,3,["logout"]]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Logout\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n\\n "],[13],[2,"\\n"],[18,15,[[30,[36,0],null,[["open","close"],[[32,0,["modal","open"]],[32,0,["model","close"]]]]]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"hasEval":false,"upvars":["hash","action","on","optional","if","let","-is-named-block-invocation","can","uri"]}',meta:{moduleName:"consul-ui/components/consul/token/selector/index.hbs"}}) -let o=(n=Ember._action,r=Ember._action,a=Ember._action,s((l=class extends t.default{open(){this.authForm.focus()}close(){this.authForm.reset()}reauthorize(e){this.modal.close(),this.args.onchange(e)}}).prototype,"open",[n],Object.getOwnPropertyDescriptor(l.prototype,"open"),l.prototype),s(l.prototype,"close",[r],Object.getOwnPropertyDescriptor(l.prototype,"close"),l.prototype),s(l.prototype,"reauthorize",[a],Object.getOwnPropertyDescriptor(l.prototype,"reauthorize"),l.prototype),l) -e.default=o,Ember._setComponentTemplate(i,o)})),define("consul-ui/components/consul/tomography/graph/index",["exports","@glimmer/component"],(function(e,t){var n,r,a -function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const s=Ember.HTMLBars.template({id:"rK0KE41X",block:'{"symbols":["item","&attrs"],"statements":[[11,"div"],[24,0,"tomography-graph"],[17,2],[12],[2,"\\n "],[10,"svg"],[15,"width",[32,0,["size"]]],[15,"height",[32,0,["size"]]],[12],[2,"\\n "],[10,"g"],[15,"transform",[31,["translate(",[30,[36,5],[[32,0,["size"]],2],null],", ",[30,[36,5],[[32,0,["size"]],2],null],")"]]],[12],[2,"\\n "],[10,"g"],[12],[2,"\\n "],[10,"circle"],[14,0,"background"],[15,"r",[32,0,["circle","0"]]],[12],[13],[2,"\\n "],[10,"circle"],[14,0,"axis"],[15,"r",[32,0,["circle","1"]]],[12],[13],[2,"\\n "],[10,"circle"],[14,0,"axis"],[15,"r",[32,0,["circle","2"]]],[12],[13],[2,"\\n "],[10,"circle"],[14,0,"axis"],[15,"r",[32,0,["circle","3"]]],[12],[13],[2,"\\n "],[10,"circle"],[14,0,"border"],[15,"r",[32,0,["circle","4"]]],[12],[13],[2,"\\n "],[13],[2,"\\n "],[10,"g"],[14,0,"lines"],[12],[2,"\\n"],[6,[37,7],[[30,[36,6],[[30,[36,6],[[32,0,["distances"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[11,"rect"],[16,"transform",[31,["rotate(",[32,1,["rotate"]],")"]]],[16,"width",[32,1,["y2"]]],[24,"height","1"],[4,[38,4],[[30,[36,1],[[32,1,["node"]]," - ",[30,[36,3],[[32,1,["distance"]]],[["maximumFractionDigits"],[2]]],"ms",[30,[36,2],[[32,1,["segment"]],[30,[36,1],["
(Segment: ",[32,1,["segment"]],")"],null]],null]],null]],[["options"],[[30,[36,0],null,[["followCursor","allowHTML"],[true,true]]]]]],[12],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n "],[10,"g"],[14,0,"labels"],[12],[2,"\\n "],[10,"circle"],[14,0,"point"],[14,"r","5"],[12],[13],[2,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[31,["translate(0, ",[32,0,["labels","0"]],")"]]],[12],[2,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[2,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[30,[36,3],[[32,0,["milliseconds","0"]]],[["maximumFractionDigits"],[2]]]],[2,"ms"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[31,["translate(0, ",[32,0,["labels","1"]],")"]]],[12],[2,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[2,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[30,[36,3],[[32,0,["milliseconds","1"]]],[["maximumFractionDigits"],[2]]]],[2,"ms"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[31,["translate(0, ",[32,0,["labels","2"]],")"]]],[12],[2,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[2,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[30,[36,3],[[32,0,["milliseconds","2"]]],[["maximumFractionDigits"],[2]]]],[2,"ms"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"g"],[14,0,"tick"],[15,"transform",[31,["translate(0, ",[32,0,["labels","3"]],")"]]],[12],[2,"\\n "],[10,"line"],[14,"x2","70"],[12],[13],[2,"\\n "],[10,"text"],[14,"x","75"],[14,"y","0"],[14,"dy",".32em"],[12],[1,[30,[36,3],[[32,0,["milliseconds","3"]]],[["maximumFractionDigits"],[2]]]],[2,"ms"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["hash","concat","if","format-number","tooltip","div","-track-array","each"]}',meta:{moduleName:"consul-ui/components/consul/tomography/graph/index.hbs"}}),i=function(e){return 160*e} -let o=(n=Ember._tracked,r=class extends t.default{constructor(...e){var t,n,r,s -super(...e),t=this,n="max",s=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(s):void 0}),l(this,"size",336),l(this,"circle",[i(1),i(.25),i(.5),i(.75),i(1)]),l(this,"labels",[i(-.25),i(-.5),i(-.75),i(-1)])}get milliseconds(){const e=(this.args.distances||[]).reduce((e,t)=>Math.max(e,t.distance),this.max) -return[25,50,75,100].map(t=>function(e,t){return t>0?parseInt(t*e)/100:0}(t,e))}get distances(){let e=this.args.distances||[] -const t=e.reduce((e,t)=>Math.max(e,t.distance),this.max),n=e.length -if(n>360){const t=360/n -e=e.filter((function(e,r){return 0==r||r==n-1||Math.random()({rotate:360*r/e.length,y2:n.distance/t*160,node:n.node,distance:n.distance,segment:n.segment}))}},u=r.prototype,c="max",d=[n],m={configurable:!0,enumerable:!0,writable:!0,initializer:function(){return-999999999}},f={},Object.keys(m).forEach((function(e){f[e]=m[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=d.slice().reverse().reduce((function(e,t){return t(u,c,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,c,f),f=null),a=f,r) -var u,c,d,m,p,f -e.default=o,Ember._setComponentTemplate(s,o)})),define("consul-ui/components/consul/transparent-proxy/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"+31LUgoZ",block:'{"symbols":[],"statements":[[10,"span"],[14,0,"consul-transparent-proxy"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.transparent-proxy"],null]],[2,"\\n"],[13]],"hasEval":false,"upvars":["t"]}',meta:{moduleName:"consul-ui/components/consul/transparent-proxy/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/upstream-instance/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"Xj0kgGX9",block:'{"symbols":["item","combinedAddress","@partition","@nspace","@dc","&attrs","@items"],"statements":[[11,"div"],[24,0,"consul-upstream-instance-list"],[17,6],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,10],[[30,[36,9],[[30,[36,9],[[32,7]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n\\n "],[10,"div"],[14,0,"header"],[12],[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[32,1,["DestinationName"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"div"],[14,0,"detail"],[12],[2,"\\n\\n"],[6,[37,4],[[30,[36,7],[[32,1,["DestinationType"]],"prepared_query"],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/bucket/list",[],[["@item","@partition","@nspace"],[[30,[36,6],null,[["Namespace","Partition"],[[30,[36,0],[[32,1,["DestinationNamespace"]],[32,4]],null],[30,[36,0],[[32,1,["DestinationPartition"]],[32,3]],null]]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,4],[[30,[36,8],[[30,[36,7],[[32,1,["Datacenter"]],[32,5]],null],[30,[36,7],[[32,1,["Datacenter"]],""],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"datacenter"],[12],[2,"\\n "],[11,"dt"],[4,[38,5],null,null],[12],[2,"\\n Datacenter\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Datacenter"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,4],[[32,1,["LocalBindSocketPath"]]],null,[["default","else"],[{"statements":[[2," "],[10,"dl"],[14,0,"local-bind-socket-path"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n Local bind socket path\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,1,["LocalBindSocketPath"]],"Local bind socket path"]],null],[2,"\\n "],[1,[32,1,["LocalBindSocketPath"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[14,0,"local-bind-socket-mode"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n Mode\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,0],[[32,1,["LocalBindSocketMode"]],"-"],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,3],[[32,1,["LocalBindPort"]],0],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,1],[[30,[36,0],[[32,1,["LocalBindAddress"]],"127.0.0.1"],null],":",[32,1,["LocalBindPort"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[14,0,"local-bind-address"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n Address\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,2],"Address"]],null],[2,"\\n "],[1,[32,2]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["or","concat","let","gt","if","tooltip","hash","not-eq","and","-track-array","each"]}',meta:{moduleName:"consul-ui/components/consul/upstream-instance/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})) -define("consul-ui/components/consul/upstream-instance/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"FXiYZK0f",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-upstream-instance-search-bar"],[17,20]],[["@filter","@namedBlocksInfo"],[[32,17],[30,[36,14],null,[["status","search","sort"],[1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,1],[[30,[36,11],["components.consul.upstream-instance.search-bar.",[32,13,["status","key"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,11],["common.search.",[32,13,["status","key"]]],null],[30,[36,11],["common.consul.",[32,13,["status","key"]]],null]],null]]]],[30,[36,1],[[30,[36,11],["components.consul.upstream-instance.search-bar.",[32,13,["status","value"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,11],["common.search.",[32,13,["status","value"]]],null],[30,[36,11],["common.consul.",[32,13,["status","value"]]],null],[30,[36,11],["common.brand.",[32,13,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,13,["RemoveFilter"]],[[16,"aria-label",[30,[36,1],["common.ui.remove"],[["item"],[[30,[36,11],[[32,14]," ",[32,15]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,14]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,15]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[14,15]}]]],[2,"\\n "]],"parameters":[13]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,18]],null],[32,19],[30,[36,1],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,17,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,1],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,13],[[30,[36,12],[[30,[36,12],[[32,17,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,17,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,1],[[30,[36,11],["common.consul.",[30,[36,10],[[32,12]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,16,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["DestinationName:asc",[30,[36,1],["common.sort.alpha.asc"],null]],null],[30,[36,4],["DestinationName:desc",[30,[36,1],["common.sort.alpha.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,16,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,6],[],[["@value","@selected"],["DestinationName:asc",[30,[36,0],["DestinationName:asc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,1],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["DestinationName:desc",[30,[36,0],["DestinationName:desc",[32,16,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,1],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["eq","t","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","lowercase","concat","-track-array","each","hash"]}',meta:{moduleName:"consul-ui/components/consul/upstream-instance/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/upstream/list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"qkxQac+l",block:'{"symbols":["item","index","address","@nspace","@partition","&attrs","@items"],"statements":[[8,"list-collection",[[24,0,"consul-upstream-list"],[17,6]],[["@items","@linkable"],[[32,7],"linkable upstream"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,6],[[32,1,["InstanceCount"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[10,"dl"],[15,0,[32,1,["MeshStatus"]]],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n Health\\n "],[13],[2,"\\n "],[11,"dd"],[4,[38,2],null,null],[12],[2,"\\n"],[6,[37,1],[[30,[36,0],["critical",[32,1,["MeshStatus"]]],null]],null,[["default","else"],[{"statements":[[2," At least one health check on one instance is failing.\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],["warning",[32,1,["MeshStatus"]]],null]],null,[["default","else"],[{"statements":[[2," At least one health check on one instance has a warning.\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,0],["passing",[32,1,["MeshStatus"]]],null]],null,[["default","else"],[{"statements":[[2," All health checks are passing.\\n"]],"parameters":[]},{"statements":[[2," There are no health checks.\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"a"],[15,6,[30,[36,5],["dc.services.show",[32,1,["Name"]]],[["params"],[[30,[36,1],[[30,[36,4],[[32,1,["Partition"]],[32,5]],null],[30,[36,3],null,[["partition","nspace"],[[32,1,["Partition"]],[32,1,["Namespace"]]]]],[30,[36,1],[[30,[36,4],[[32,1,["Namespace"]],[32,4]],null],[30,[36,3],null,[["nspace"],[[32,1,["Namespace"]]]]],[30,[36,3],null,null]],null]],null]]]]],[12],[2,"\\n "],[1,[32,1,["Name"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"p"],[12],[2,"\\n "],[1,[32,1,["Name"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/bucket/list",[],[["@item","@nspace","@partition"],[[32,1],[32,4],[32,5]]],null],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[32,1,["GatewayConfig","Addresses"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n Address\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,3],"Address"]],null],[2,"\\n "],[1,[32,3]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[3]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["eq","if","tooltip","hash","not-eq","href-to","gt","-track-array","each"]}',meta:{moduleName:"consul-ui/components/consul/upstream/list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/consul/upstream/search-bar/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"BotuftEI",block:'{"symbols":["__arg0","__arg1","search","components","Optgroup","Option","selectable","search","components","Optgroup","Option","item","search","components","Optgroup","Option","prop","search","key","value","@sort","@filter","@onsearch","@search","&attrs"],"statements":[[8,"search-bar",[[24,0,"consul-upstream-search-bar"],[17,25]],[["@filter","@namedBlocksInfo"],[[32,22],[30,[36,14],null,[["status","search","filter","sort"],[1,1,1,1]]]]],[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"status"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,0],[[30,[36,10],["components.consul.upstream.search-bar.",[32,18,["status","key"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,18,["status","key"]]],null],[30,[36,10],["common.consul.",[32,18,["status","key"]]],null]],null]]]],[30,[36,0],[[30,[36,10],["components.consul.upstream.search-bar.",[32,18,["status","value"]],".name"],null]],[["default"],[[30,[36,4],[[30,[36,10],["common.search.",[32,18,["status","value"]]],null],[30,[36,10],["common.consul.",[32,18,["status","value"]]],null],[30,[36,10],["common.brand.",[32,18,["status","value"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,[32,18,["RemoveFilter"]],[[16,"aria-label",[30,[36,0],["common.ui.remove"],[["item"],[[30,[36,10],[[32,19]," ",[32,20]],null]]]]]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[32,19]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,20]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[19,20]}]]],[2,"\\n "]],"parameters":[18]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"search"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Search"]],[],[["@onsearch","@value","@placeholder"],[[30,[36,3],[[32,0],[32,23]],null],[32,24],[30,[36,0],["common.search.search"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Select"]],[[24,0,"type-search-properties"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,22,["searchproperty","change"]]],null],true,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["common.search.searchproperty"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,14,["Optgroup"]],[32,14,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[32,22,["searchproperty","default"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,16],[],[["@value","@selected"],[[32,17],[30,[36,9],[[32,17],[32,22,["searchproperty","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[30,[36,13],[[32,17]],null]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[17]}]]]],"parameters":[15,16]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"filter"],null]],null,[["default","else"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Select"]],[],[["@position","@onchange","@multiple"],["left",[30,[36,3],[[32,0],[32,22,["instance","change"]]],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n "],[1,[30,[36,0],["components.consul.upstream.search-bar.instance.name"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,9,["Optgroup"]],[32,9,["Option"]]],null,[["default"],[{"statements":[[6,[37,12],[[30,[36,11],[[30,[36,11],[[30,[36,4],["registered","not-registered"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,11],[],[["@value","@selected"],[[32,12],[30,[36,9],[[32,12],[32,22,["instance","value"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],[[30,[36,10],["common.consul.",[32,12]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[12]}]]]],"parameters":[10,11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,7],[[32,1],"sort"],null]],null,[["default"],[{"statements":[[6,[37,6],[[32,2]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,3,["Select"]],[[24,0,"type-sort"]],[["@position","@onchange","@multiple","@required"],["right",[30,[36,3],[[32,0],[32,21,["change"]]],null],false,true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[10,"span"],[12],[2,"\\n"],[6,[37,6],[[30,[36,5],[[30,[36,4],[[30,[36,4],["Name:asc",[30,[36,0],["common.sort.alpha.asc"],null]],null],[30,[36,4],["Name:desc",[30,[36,0],["common.sort.alpha.desc"],null]],null],[30,[36,4],["Status:asc",[30,[36,0],["common.sort.status.asc"],null]],null],[30,[36,4],["Status:desc",[30,[36,0],["common.sort.status.desc"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,2],[[32,7],[32,21,["value"]]],null]],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,4,["Optgroup"]],[32,4,["Option"]]],null,[["default"],[{"statements":[[2," "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.status"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:asc",[30,[36,1],["Status:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Status:desc",[30,[36,1],["Status:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.status.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5],[],[["@label"],[[30,[36,0],["common.consul.service-name"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:asc",[30,[36,1],["Name:asc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.asc"],null]]],"parameters":[]}]]],[2,"\\n "],[8,[32,6],[],[["@value","@selected"],["Name:desc",[30,[36,1],["Name:desc",[32,21,["value"]]],null]]],[["default"],[{"statements":[[1,[30,[36,0],["common.sort.alpha.desc"],null]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[3]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","eq","get","action","array","from-entries","let","-is-named-block-invocation","if","contains","concat","-track-array","each","lowercase","hash"]}',meta:{moduleName:"consul-ui/components/consul/upstream/search-bar/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/copy-button/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"copy-button",initial:"idle",on:{RESET:[{target:"idle"}]},states:{idle:{on:{SUCCESS:[{target:"success"}],ERROR:[{target:"error"}]}},success:{},error:{}}}})),define("consul-ui/components/copy-button/index",["exports","@glimmer/component","consul-ui/components/copy-button/chart.xstate"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=Ember.HTMLBars.template({id:"wLwVUwEq",block:'{"symbols":["State","Guard","Action","dispatch","state","success","error","reset","@name","&attrs","@value","&default"],"statements":[[8,"state-chart",[],[["@src"],[[32,0,["chart"]]]],[["default"],[{"statements":[[2,"\\n "],[11,"div"],[24,0,"copy-button"],[17,10],[12],[2,"\\n"],[6,[37,9],[[30,[36,8],[[32,4],"SUCCESS"],null],[30,[36,8],[[32,4],"ERROR"],null],[30,[36,8],[[32,4],"RESET"],null]],null,[["default"],[{"statements":[[2," "],[11,"button"],[16,"aria-label",[30,[36,0],["components.copy-button.title"],[["name"],[[32,9]]]]],[24,0,"copy-btn"],[17,10],[24,4,"button"],[4,[38,1],[[32,11]],[["success","error"],[[32,6],[32,7]]]],[4,[38,7],[[30,[36,6],[[30,[36,3],[[32,5],"success"],null],[30,[36,0],["components.copy-button.success"],[["name"],[[32,9]]]],[30,[36,0],["components.copy-button.error"],null]],null]],[["options"],[[30,[36,5],null,[["trigger","showOnCreate","delay","onHidden"],["manual",[30,[36,4],[[30,[36,3],[[32,5],"idle"],null]],null],[30,[36,2],[0,3000],null],[32,8]]]]]]],[12],[18,12,null],[13],[2,"\\n"]],"parameters":[6,7,8]}]]],[2," "],[13],[2,"\\n"]],"parameters":[1,2,3,4,5]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","with-copyable","array","state-matches","not","hash","if","tooltip","fn","let"]}',meta:{moduleName:"consul-ui/components/copy-button/index.hbs"}}) -class a extends t.default{constructor(){super(...arguments),this.chart=n.default}}e.default=a,Ember._setComponentTemplate(r,a)})),define("consul-ui/components/custom-element/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i,o,u -function c(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e){for(var t=1;t{let n=e.type -const r=e.default -switch(t=null==t?e.default:t,-1!==n.indexOf("|")&&(n="string"),n){case"":case"":case"":case"number":{const e=parseFloat(t) -return isNaN(e)?void 0===r?0:r:e}case"":return parseInt(t) -case"":case"string":return(t||"").toString()}},g=(e,t=HTMLElement,n={},r={})=>{const a=Object.keys(n) -return customElements.define(e,class extends t{static get observedAttributes(){return a}attributeChangedCallback(e,t,a){const l=y(n[e],t),s=y(n[e],a),i=r["--"+e] -void 0!==i&&i.track===`[${e}]`&&this.style.setProperty("--"+e,s),"function"==typeof super.attributeChangedCallback&&super.attributeChangedCallback(e,l,s),this.dispatchEvent(new CustomEvent("custom-element.attributeChange",{detail:{name:e,previousValue:l,value:s}}))}}),()=>{}},O=(e,t)=>(e||[]).reduce((e,n)=>{let r -const a={} -return t.forEach((e,t)=>{"_"!==e?a[e]=n[t]:r=t}),e[n[r]]=a,e},{}) -let _=(n=Ember._tracked,r=Ember._tracked,a=Ember._action,l=Ember._action,s=Ember._action,i=class extends t.default{constructor(e,t){if(super(...arguments),m(this,"$element",o,this),m(this,"_attributes",u,this),p(this,"__attributes",void 0),p(this,"_attchange",void 0),!h.has(t.element)){const e=g(t.element,t.class,O(t.attrs,["_","type","default","description"]),O(t.cssprops,["_","type","track","description"])) -h.set(t.element,e)}}get attributes(){return this._attributes}get element(){if(this.$element){if(v.has(this.$element))return v.get(this.$element) -const n=(e=this.$element,t=this,new Proxy(e,{get:(e,n)=>{switch(n){case"attrs":return t.attributes -default:if("function"==typeof e[n])return e[n].bind(e)}}})) -return v.set(this.$element,n),n}var e,t}setHost(e,t){e(t),this.$element=t,this.$element.addEventListener("custom-element.attributeChange",this.attributeChange),(this.args.attrs||[]).forEach(e=>{const n=t.getAttribute(e[0]) -t.attributeChangedCallback(e[0],n,n)})}disconnect(){this.$element.removeEventListener("custom-element.attributeChange",this.attributeChange)}attributeChange(e){var t,n -e.stopImmediatePropagation(),this.__attributes=d(d({},this.__attributes),{},{[e.detail.name]:e.detail.value}),this._attchange=(t=()=>{this._attributes=this.__attributes},void 0!==(n=this._attchange)&&cancelAnimationFrame(n),requestAnimationFrame(t))}},o=f(i.prototype,"$element",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=f(i.prototype,"_attributes",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return{}}}),f(i.prototype,"setHost",[a],Object.getOwnPropertyDescriptor(i.prototype,"setHost"),i.prototype),f(i.prototype,"disconnect",[l],Object.getOwnPropertyDescriptor(i.prototype,"disconnect"),i.prototype),f(i.prototype,"attributeChange",[s],Object.getOwnPropertyDescriptor(i.prototype,"attributeChange"),i.prototype),i) -e.default=_,Ember._setComponentTemplate(b,_)})),define("consul-ui/components/data-collection/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O -function _(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function P(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const w=Ember.HTMLBars.template({id:"V00/q7z+",block:'{"symbols":["@search","&default"],"statements":[[1,[30,[36,3],[[30,[36,2],[[32,0],[30,[36,1],[[30,[36,0],[[32,0],"term"],null],""],null],[32,1]],null]],null]],[2,"\\n"],[18,2,[[30,[36,8],null,[["search","items","Collection","Empty"],[[30,[36,2],[[32,0],[32,0,["search"]]],null],[32,0,["items"]],[30,[36,6],[[30,[36,7],[[32,0,["items","length"]],0],null],[30,[36,4],["anonymous"],null],""],null],[30,[36,6],[[30,[36,5],[[32,0,["items","length"]],0],null],[30,[36,4],["anonymous"],null],""],null]]]]]],[2,"\\n"]],"hasEval":false,"upvars":["set","fn","action","did-update","component","eq","if","gt","hash"]}',meta:{moduleName:"consul-ui/components/data-collection/index.hbs"}}) -let E=(n=Ember.inject.service("filter"),r=Ember.inject.service("sort"),a=Ember.inject.service("search"),l=Ember._tracked,s=Ember.computed.alias("searchService.searchables"),i=Ember.computed("term","args.search"),o=Ember.computed("type","searchMethod","filtered","args.filters"),u=Ember.computed("type","args.sort"),c=Ember.computed("comparator","searched"),d=Ember.computed("searchTerm","searchable","filtered"),m=Ember.computed("type","content","args.filters"),p=Ember.computed("args.{items.[],items.content.[]}"),f=Ember._action,b=class extends t.default{constructor(...e){super(...e),_(this,"filter",h,this),_(this,"sort",v,this),_(this,"searchService",y,this),_(this,"term",g,this),_(this,"searchableMap",O,this)}get type(){return this.args.type}get searchMethod(){return this.args.searchable||"exact"}get searchProperties(){return this.args.filters.searchproperties}get searchTerm(){return this.term||this.args.search||""}get searchable(){const e=Ember.get(this,"args.filters.searchproperty.value")||Ember.get(this,"args.filters.searchproperty") -return new("string"==typeof this.searchMethod?this.searchableMap[this.searchMethod]:this.args.searchable)(this.filtered,{finders:Object.fromEntries(Object.entries(this.searchService.predicate(this.type)).filter(([t,n])=>void 0===e||e.includes(t)))})}get comparator(){return void 0===this.args.sort?[]:this.sort.comparator(this.type)(this.args.sort)}get items(){let e="comparator" -return"function"==typeof this.comparator&&(e=this.comparator),Ember.defineProperty(this,"sorted",Ember.computed.sort("searched",e)),this.sorted}get searched(){return""===this.searchTerm?this.filtered:this.searchable.search(this.searchTerm)}get filtered(){if(void 0===this.args.filters)return this.content.slice() -const e=this.filter.predicate(this.type) -if(void 0===e)return this.content.slice() -const t=Object.entries(this.args.filters).filter(([e,t])=>Boolean(t)).map(([e,t])=>[e,"string"!=typeof t?t.value:t]) -return this.content.filter(e(Object.fromEntries(t)))}get content(){const e=this.args.items||[] -return"function"==typeof e.dispatchEvent?e.content:e}search(e){return this.term=e,this.items}},h=P(b.prototype,"filter",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=P(b.prototype,"sort",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(b.prototype,"searchService",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=P(b.prototype,"term",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),O=P(b.prototype,"searchableMap",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P(b.prototype,"searchTerm",[i],Object.getOwnPropertyDescriptor(b.prototype,"searchTerm"),b.prototype),P(b.prototype,"searchable",[o],Object.getOwnPropertyDescriptor(b.prototype,"searchable"),b.prototype),P(b.prototype,"comparator",[u],Object.getOwnPropertyDescriptor(b.prototype,"comparator"),b.prototype),P(b.prototype,"items",[c],Object.getOwnPropertyDescriptor(b.prototype,"items"),b.prototype),P(b.prototype,"searched",[d],Object.getOwnPropertyDescriptor(b.prototype,"searched"),b.prototype),P(b.prototype,"filtered",[m],Object.getOwnPropertyDescriptor(b.prototype,"filtered"),b.prototype),P(b.prototype,"content",[p],Object.getOwnPropertyDescriptor(b.prototype,"content"),b.prototype),P(b.prototype,"search",[f],Object.getOwnPropertyDescriptor(b.prototype,"search"),b.prototype),b) -e.default=E,Ember._setComponentTemplate(w,E)})),define("consul-ui/components/data-form/index",["exports","block-slots","validated-changeset"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=Ember.HTMLBars.template({id:"0brDSSRZ",block:'{"symbols":["writer","api","&default"],"statements":[[8,"data-loader",[],[["@items","@src","@onchange","@once"],[[34,2],[30,[36,9],["/${partition}/${nspace}/${dc}/${type}/${src}",[30,[36,8],null,[["partition","nspace","dc","type","src"],[[35,7],[35,6],[35,5],[35,4],[35,3]]]]],null],[30,[36,10],[[32,0],"setData"],null],true]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"data-writer",[],[["@sink","@type","@label","@ondelete","@onchange"],[[30,[36,9],["/${partition}/${nspace}/${dc}/${type}",[30,[36,8],null,[["partition","nspace","dc","type"],[[35,7],[35,6],[30,[36,12],[[35,11,["Datacenter"]],[35,5]],null],[35,4]]]]],null],[34,4],[34,13],[30,[36,10],[[32,0],[35,14]],null],[30,[36,10],[[32,0],[35,15]],null]]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,17],[[30,[36,8],null,[["data","change","isCreate","error","disabled","submit","delete"],[[35,11],[30,[36,10],[[32,0],"change"],null],[35,16],[32,1,["error"]],[32,1,["inflight"]],[30,[36,10],[[32,0],[32,1,["persist"]],[35,11]],null],[30,[36,10],[[32,0],[32,1,["delete"]],[35,11]],null]]]]],null,[["default"],[{"statements":[[2,"\\n "],[18,3,[[32,2]]],[2,"\\n"],[6,[37,1],[[35,0]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"yield-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[18,3,[[32,2]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"yield-slot",[],[["@name"],["form"]],[["default"],[{"statements":[[2,"\\n "],[18,3,[[32,2]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n"]],"parameters":[2]}]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["hasError","if","item","src","type","dc","nspace","partition","hash","uri","action","data","or","label","ondelete","onsubmit","create","let"]}',meta:{moduleName:"consul-ui/components/data-form/index.hbs"}}) -var a=Ember._setComponentTemplate(r,Ember.Component.extend(t.default,{tagName:"",dom:Ember.inject.service("dom"),builder:Ember.inject.service("form"),create:!1,ondelete:function(){return this.onsubmit(...arguments)},oncancel:function(){return this.onsubmit(...arguments)},onsubmit:function(){},onchange:function(e,t){return t.handleEvent(e)},didReceiveAttrs:function(){this._super(...arguments) -try{this.form=this.builder.form(this.type)}catch(e){}},willRender:function(){this._super(...arguments),Ember.set(this,"hasError",this._isRegistered("error"))},willDestroyElement:function(){this._super(...arguments),Ember.get(this,"data.isNew")&&this.data.rollbackAttributes()},actions:{setData:function(e){let t=e -return(0,n.isChangeset)(e)||void 0===this.form||(t=this.form.setData(e).getData()),Ember.get(e,"isNew")&&(Ember.set(this,"create",!0),t=Object.entries(this.autofill||{}).reduce((function(e,[t,n]){return Ember.set(e,t,n),e}),t)),Ember.set(this,"data",t),this.data},change:function(e,t){this.onchange(this.dom.normalizeEvent(e,t),this.form,this.form.getData())}}})) -e.default=a})),define("consul-ui/components/data-loader/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"data-loader",initial:"load",on:{OPEN:{target:"load"},ERROR:{target:"disconnected"},LOAD:[{target:"idle",cond:"loaded"},{target:"loading"}],INVALIDATE:[{target:"invalidating"}]},states:{load:{},invalidating:{},loading:{on:{SUCCESS:{target:"idle"},ERROR:{target:"error"}}},idle:{},error:{on:{RETRY:{target:"load"}}},disconnected:{on:{RETRY:{target:"load"}}}}}})),define("consul-ui/components/data-loader/index",["exports","block-slots","consul-ui/components/data-loader/chart.xstate"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=Ember.HTMLBars.template({id:"t05sBy/d",block:'{"symbols":["State","Guard","Action","dispatch","state","api","notice","&default"],"statements":[[18,8,null],[2,"\\n"],[8,"state-chart",[],[["@src"],[[34,17]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"dispatch",[32,4]]],null],[2,"\\n "],[8,[32,2],[],[["@name","@cond"],["loaded",[30,[36,3],[[32,0],"isLoaded"],null]]],null],[2,"\\n\\n\\n"],[6,[37,21],[[30,[36,20],null,[["data","error","invalidate","dispatchError"],[[35,19],[35,0],[30,[36,3],[[32,0],"invalidate"],null],[30,[36,7],[[30,[36,3],[[32,0],[30,[36,18],[[35,0]],null]],[["value"],["error.errors.firstObject"]]],[30,[36,3],[[32,0],[32,4],"ERROR"],null]],null]]]]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,1],null,[["name"],["data"]],[["default","else"],[{"statements":[[2," "],[18,8,[[32,6]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,14],[[30,[36,11],[[35,15]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,1],[],[["@notMatches"],[[30,[36,8],["error","disconnected","invalidating"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,14],[[30,[36,13],[[35,6],[30,[36,12],[[30,[36,11],[[35,10]],null],[30,[36,9],[[32,5],"loading"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@open","@src","@onchange","@onerror"],[[34,5],[34,6],[30,[36,7],[[30,[36,3],[[32,0],"change"],[["value"],["data"]]],[30,[36,3],[[32,0],[32,4],"SUCCESS"],null]],null],[32,6,["dispatchError"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n "],[8,[32,1],[],[["@matches"],["loading"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],null,[["name"],["loading"]],[["default","else"],[{"statements":[[2," "],[18,8,[[32,6]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"consul/loader",[],[[],[]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],null,[["name"],["error"]],[["default","else"],[{"statements":[[2," "],[18,8,[[32,6]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"error-state",[],[["@error"],[[34,0]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],[[30,[36,8],["idle","disconnected","invalidating"],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["disconnected"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,14],[[30,[36,11],[[30,[36,16],[[35,0,["status"]],"401"],null]],null]],null,[["default"],[{"statements":[[6,[37,1],null,[["name","params"],["disconnected",[30,[36,4],[[30,[36,3],[[32,0],[32,4],"RESET"],null]],null]]],[["default","else"],[{"statements":[[2," "],[18,8,[[32,6]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,2],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,7,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n An error was returned whilst loading this data, refresh to try again.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"],[6,[37,14],[[30,[36,16],[[35,0,["status"]],"403"],null]],null,[["default","else"],[{"statements":[[6,[37,1],null,[["name"],["error"]],[["default","else"],[{"statements":[[2," "],[18,8,[[32,6]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"error-state",[],[["@error"],[[34,0]]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[8,"yield-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n "],[18,8,[[32,6]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n"]],"parameters":[6]}]]],[2," "],[1,[30,[36,23],[[30,[36,22],[[32,4],"LOAD"],null]],[["src"],[[35,6]]]]],[2,"\\n"]],"parameters":[1,2,3,4,5]}]]]],"hasEval":false,"upvars":["error","yield-slot","notification","action","block-params","open","src","queue","array","state-matches","once","not","or","and","if","items","eq","chart","mut","data","hash","let","fn","did-update"]}',meta:{moduleName:"consul-ui/components/data-loader/index.hbs"}}) -var a=Ember._setComponentTemplate(r,Ember.Component.extend(t.default,{tagName:"",onchange:e=>e,init:function(){this._super(...arguments),this.chart=n.default},didReceiveAttrs:function(){this._super(...arguments),void 0!==this.items&&this.actions.change.apply(this,[this.items])},didInsertElement:function(){this._super(...arguments),this.dispatch("LOAD")},actions:{invalidate(){this.dispatch("INVALIDATE"),Ember.run.schedule("afterRender",()=>{this.dispatch("LOAD")})},isLoaded:function(){return void 0!==this.items||void 0===this.src},change:function(e){Ember.set(this,"data",this.onchange(e))}}})) -e.default=a})),define("consul-ui/components/data-sink/index",["exports","consul-ui/utils/dom/event-source"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"R4WHi3tx",block:'{"symbols":["&default"],"statements":[[18,1,[[30,[36,2],null,[["open","state"],[[30,[36,1],[[32,0],"open"],null],[35,0]]]]]],[2,"\\n"]],"hasEval":false,"upvars":["state","action","hash"]}',meta:{moduleName:"consul-ui/components/data-sink/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend({tagName:"",service:Ember.inject.service("data-sink/service"),dom:Ember.inject.service("dom"),logger:Ember.inject.service("logger"),onchange:function(){},onerror:function(){},state:Ember.computed("instance","instance.{dirtyType,isSaving}",(function(){let e -const t=Ember.get(this,"instance.isSaving"),n=Ember.get(this,"instance.dirtyType") -if(void 0===t&&void 0===n)e="idle" -else{switch(n){case"created":e=t?"creating":"create" -break -case"updated":e=t?"updating":"update" -break -case"deleted":case void 0:e=t?"removing":"remove"}e="active."+e}return{matches:t=>-1!==e.indexOf(t)}})),init:function(){this._super(...arguments),this._listeners=this.dom.listeners()},willDestroyElement:function(){this._super(...arguments),this._listeners.remove()},source:function(e){const n=(0,t.once)(e),r=e=>{Ember.set(this,"instance",void 0) -try{this.onerror(e),this.logger.execute(e)}catch(e){this.logger.execute(e)}} -return this._listeners.add(n,{message:e=>{try{Ember.set(this,"instance",void 0),this.onchange(e)}catch(t){r(t)}},error:e=>r(e)}),n},didInsertElement:function(){this._super(...arguments),void 0===this.data&&void 0===this.item||this.actions.open.apply(this,[this.data,this.item])},persist:function(e,t){void 0!==e?Ember.set(this,"instance",this.service.prepare(this.sink,e,t)):Ember.set(this,"instance",t),this.source(()=>this.service.persist(this.sink,this.instance))},remove:function(e){Ember.set(this,"instance",e),this.source(()=>this.service.remove(this.sink,e))},actions:{open:function(e,t){if(t instanceof Event&&(t=void 0),void 0===e&&void 0===t)throw new Error("You must specify data to save, or null to remove") -null===e||""===e?this.remove(t):this.persist(e,t)}}})) -e.default=r})),define("consul-ui/components/data-source/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O -function _(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function P(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const w=Ember.HTMLBars.template({id:"N/jmqD/5",block:'{"symbols":["@src","@loading","@disabled","&default"],"statements":[[6,[37,2],[[30,[36,5],[[32,0,["disabled"]]],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,1],[[32,0,["loading"]],"lazy"],null]],null,[["default","else"],[{"statements":[[2," "],[11,"data"],[24,"aria-hidden","true"],[24,5,"width: 0;height: 0;font-size: 0;padding: 0;margin: 0;"],[4,[38,0],[[32,0,["connect"]]],null],[12],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[1,[30,[36,0],[[32,0,["connect"]]],null]],[2,"\\n"]],"parameters":[]}]]],[2," "],[1,[30,[36,3],[[32,0,["attributeChanged"]],"src",[32,1]],null]],[2,"\\n "],[1,[30,[36,3],[[32,0,["attributeChanged"]],"loading",[32,2]],null]],[2,"\\n "],[1,[30,[36,4],[[32,0,["disconnect"]]],null]],[2,"\\n"]],"parameters":[]}]]],[1,[30,[36,3],[[32,0,["attributeChanged"]],"disabled",[32,3]],null]],[2,"\\n"],[18,4,[[30,[36,7],null,[["data","error","Source"],[[32,0,["data"]],[32,0,["error"]],[30,[36,2],[[32,0,["data"]],[30,[36,6],["data-source"],[["disabled"],[[30,[36,5],[[30,[36,1],[[32,0,["error"]],[29]],null]],null]]]],""],null]]]]]],[2,"\\n"]],"hasEval":false,"upvars":["did-insert","eq","if","did-update","will-destroy","not","component","hash"]}',meta:{moduleName:"consul-ui/components/data-source/index.hbs"}}),E=function(e,t,n,r=((e=null)=>"function"==typeof e?e():null)){const a=e[t] -return a!==n&&r(a,n),e[t]=n},k=()=>{},x=e=>"function"==typeof e?e:k,j=["eager","lazy"] -let C=(n=Ember.inject.service("data-source/service"),r=Ember.inject.service("dom"),a=Ember.inject.service("logger"),l=Ember._tracked,s=Ember._tracked,i=Ember._tracked,o=Ember._action,u=Ember._action,c=Ember._action,d=Ember._action,m=Ember._action,p=Ember._action,f=class extends t.default{constructor(e,t){super(...arguments),_(this,"dataSource",b,this),_(this,"dom",h,this),_(this,"logger",v,this),_(this,"isIntersecting",y,this),_(this,"data",g,this),_(this,"error",O,this),this._listeners=this.dom.listeners(),this._lazyListeners=this.dom.listeners()}get loading(){return j.includes(this.args.loading)?this.args.loading:j[0]}get disabled(){return void 0!==this.args.disabled&&this.args.disabled}onchange(e){this.error=void 0,this.data=e.data,x(this.args.onchange)(e)}onerror(e){this.error=e.error||e,x(this.args.onerror)(e)}connect(e){Array.isArray(e)?(this._lazyListeners.remove(),this.open()):this._lazyListeners.add(this.dom.isInViewport(e,e=>{this.isIntersecting=e,this.isIntersecting?this.open():this.close()}))}disconnect(){void 0!==this.data&&void 0===this.data.length&&"function"==typeof this.data.rollbackAttributes&&this.data.rollbackAttributes(),this.close(),this._listeners.remove(),this._lazyListeners.remove()}attributeChanged([e,t]){switch(e){case"src":("eager"===this.loading||this.isIntersecting)&&this.open()}}open(){const e=this.args.src,t=E(this,"source",this.dataSource.open(e,this,this.open),e=>{this.dataSource.close(e,this)}),n=e=>{try{const t=Ember.get(e,"error.errors.firstObject")||{} -"429"!==Ember.get(t,"status")&&this.onerror(e),this.logger.execute(e)}catch(e){this.logger.execute(e)}},r=this._listeners.add(this.source,{message:e=>{try{this.onchange(e)}catch(t){n(t)}},error:e=>{n(e)}}) -if(E(this,"_remove",r),"function"==typeof t.getCurrentEvent){const e=t.getCurrentEvent() -if(e){let t -void 0!==e.error?(t="onerror",this.error=e.error):(this.error=void 0,this.data=e.data,t="onchange"),Ember.run.schedule("afterRender",()=>{try{this[t](e)}catch(r){n(r)}})}}}async invalidate(){this.source.readyState=2,this.disconnect(),Ember.run.schedule("afterRender",()=>{this.connect([])})}close(){void 0!==this.source&&(this.dataSource.close(this.source,this),E(this,"_remove",void 0),this.source=void 0)}},b=P(f.prototype,"dataSource",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(f.prototype,"dom",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=P(f.prototype,"logger",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(f.prototype,"isIntersecting",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),g=P(f.prototype,"data",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=P(f.prototype,"error",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P(f.prototype,"connect",[o],Object.getOwnPropertyDescriptor(f.prototype,"connect"),f.prototype),P(f.prototype,"disconnect",[u],Object.getOwnPropertyDescriptor(f.prototype,"disconnect"),f.prototype),P(f.prototype,"attributeChanged",[c],Object.getOwnPropertyDescriptor(f.prototype,"attributeChanged"),f.prototype),P(f.prototype,"open",[d],Object.getOwnPropertyDescriptor(f.prototype,"open"),f.prototype),P(f.prototype,"invalidate",[m],Object.getOwnPropertyDescriptor(f.prototype,"invalidate"),f.prototype),P(f.prototype,"close",[p],Object.getOwnPropertyDescriptor(f.prototype,"close"),f.prototype),f) -e.default=C,Ember._setComponentTemplate(w,C)})),define("consul-ui/components/data-writer/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"data-writer",initial:"idle",states:{idle:{on:{PERSIST:{target:"persisting"},REMOVE:{target:"removing"}}},removing:{on:{SUCCESS:{target:"removed"},ERROR:{target:"error"}}},persisting:{on:{SUCCESS:{target:"persisted"},ERROR:{target:"error"}}},removed:{on:{RESET:{target:"idle"}}},persisted:{on:{RESET:{target:"idle"}}},error:{on:{RESET:{target:"idle"}}}}}})),define("consul-ui/components/data-writer/index",["exports","block-slots","consul-ui/components/data-writer/chart.xstate"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=Ember.HTMLBars.template({id:"Gj1ownZS",block:'{"symbols":["State","Guard","Action","dispatch","state","api","after","notice","after","notice","after","notice","&default"],"statements":[[8,"state-chart",[],[["@src"],[[34,17]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"dispatch",[32,4]]],null],[2,"\\n\\n"],[6,[37,15],[[30,[36,20],null,[["data","error","persist","delete","inflight","disabled"],[[35,10],[35,11],[30,[36,0],[[32,0],"persist"],null],[30,[36,13],[[30,[36,0],[[32,0],[30,[36,12],[[35,10]],null]],null],[30,[36,0],[[32,0],[32,4],"REMOVE"],null]],null],[30,[36,19],[[32,5],[30,[36,18],["persisting","removing"],null]],null],[30,[36,19],[[32,5],[30,[36,18],["persisting","removing"],null]],null]]]]],null,[["default"],[{"statements":[[2,"\\n "],[18,13,[[32,6]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["removing"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-sink",[],[["@sink","@item","@data","@onchange","@onerror"],[[34,9],[34,10],null,[30,[36,0],[[32,0],[32,4],"SUCCESS"],null],[30,[36,13],[[30,[36,0],[[32,0],[30,[36,12],[[35,11]],null]],[["value"],["error.errors.firstObject"]]],[30,[36,0],[[32,0],[32,4],"ERROR"],null]],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["persisting"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-sink",[],[["@sink","@item","@onchange","@onerror"],[[34,9],[34,10],[30,[36,0],[[32,0],[32,4],"SUCCESS"],null],[30,[36,13],[[30,[36,0],[[32,0],[30,[36,12],[[35,11]],null]],[["value"],["error.errors.firstObject"]]],[30,[36,0],[[32,0],[32,4],"ERROR"],null]],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["removed"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,15],[[30,[36,13],[[30,[36,0],[[32,0],[32,4],"RESET"],null],[30,[36,0],[[32,0],[35,14]],null]],null]],null,[["default"],[{"statements":[[6,[37,8],null,[["name","params"],["removed",[30,[36,7],[[32,11]],null]]],[["default","else"],[{"statements":[[2," "],[18,13,[[32,6]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-delete"],[4,[38,1],null,[["after"],[[30,[36,0],[[32,0],[32,11]],null]]]]],[["@type"],["success"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,12,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Success!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,12,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Your "],[1,[30,[36,4],[[35,3],[35,2]],null]],[2," has been deleted.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[12]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[11]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["persisted"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,15],[[30,[36,0],[[32,0],[35,16]],null]],null,[["default"],[{"statements":[[6,[37,8],null,[["name","params"],["persisted",[30,[36,7],[[32,9]],null]]],[["default","else"],[{"statements":[[2," "],[18,13,[[32,6]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,1],null,[["after"],[[30,[36,0],[[32,0],[32,9]],null]]]]],[["@type"],["success"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,10,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Success!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,10,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Your "],[1,[30,[36,4],[[35,3],[35,2]],null]],[2," has been saved.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[10]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[9]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,15],[[30,[36,0],[[32,0],[32,4],"RESET"],null]],null,[["default"],[{"statements":[[6,[37,8],null,[["name","params"],["error",[30,[36,7],[[32,7],[32,6,["error"]]],null]]],[["default","else"],[{"statements":[[2," "],[18,13,[[32,6]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,1],null,[["after"],[[30,[36,0],[[32,0],[32,7]],null]]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Error!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,8,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n There was an error saving your "],[1,[30,[36,4],[[35,3],[35,2]],null]],[2,".\\n"],[6,[37,6],[[30,[36,5],[[32,6,["error","status"]],[32,6,["error","detail"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"br"],[12],[13],[1,[32,6,["error","status"]]],[2,": "],[1,[32,6,["error","detail"]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[7]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"yield-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[18,13,[[32,6]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n"]],"parameters":[6]}]]]],"parameters":[1,2,3,4,5]}]]]],"hasEval":false,"upvars":["action","notification","type","label","or","and","if","block-params","yield-slot","sink","data","error","mut","queue","ondelete","let","onchange","chart","array","state-matches","hash"]}',meta:{moduleName:"consul-ui/components/data-writer/index.hbs"}}) -var a=Ember._setComponentTemplate(r,Ember.Component.extend(t.default,{tagName:"",ondelete:function(){return this.onchange(...arguments)},onchange:function(){},init:function(){this._super(...arguments),this.chart=n.default},actions:{persist:function(e,t){t&&"function"==typeof t.preventDefault&&t.preventDefault(),Ember.set(this,"data",e),this.dispatch("PERSIST")}}})) -e.default=a})),define("consul-ui/components/debug/navigation/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"ZDKUMD/N",block:'{"symbols":[],"statements":[],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/debug/navigation/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/delete-confirmation/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"jCwHFXDR",block:'{"symbols":[],"statements":[[10,"p"],[12],[2,"\\n "],[1,[34,0]],[2,"\\n"],[13],[2,"\\n"],[10,"button"],[14,0,"type-delete"],[15,"onclick",[30,[36,2],[[32,0],[35,1]],null]],[14,4,"button"],[12],[2,"\\n Confirm Delete\\n"],[13],[2,"\\n"],[10,"button"],[14,0,"type-cancel"],[15,"onclick",[30,[36,2],[[32,0],[35,3]],null]],[14,4,"button"],[12],[2,"Cancel"],[13],[2,"\\n"]],"hasEval":false,"upvars":["message","execute","action","cancel"]}',meta:{moduleName:"consul-ui/components/delete-confirmation/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",execute:function(){},cancel:function(){}})) -e.default=n})),define("consul-ui/components/disclosure-card/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"jQWyQTRo",block:'{"symbols":["custom","element","disclosure","&default"],"statements":[[8,"custom-element",[],[["@attrs"],[[34,0]]],[["default"],[{"statements":[[2,"\\n"],[8,"disclosure",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[11,"disclosure-card"],[16,"expanded",[32,3,["expanded"]]],[4,[38,1],[[32,1,["connect"]]],null],[4,[38,2],[[32,1,["disconnect"]]],null],[12],[2,"\\n\\n "],[8,[32,1,["Template"]],[],[["@styles"],[[30,[36,5],[[30,[36,4],["/styles/base/icons/base-keyframes.css"],[["from"],["/components/disclosure-card"]]],[30,[36,4],["/styles/base/icons/icons/chevron-down/index.css"],[["from"],["/components/disclosure-card"]]],[30,[36,4],["/components/panel/index.css"],[["from"],["/components/disclosure-card"]]],[30,[36,3],["\\n :host {\\n display: block;\\n }\\n slot[name=\'action\']::slotted(button) {\\n display: block;\\n cursor: pointer;\\n width: 100%;\\n\\n background-color: rgb(var(--tone-gray-050));\\n color: rgb(var(--tone-gray-800));\\n padding-top: var(--padding-y);\\n padding-bottom: var(--padding-y);\\n }\\n slot[name=\'action\']::slotted(button)::after {\\n transition-timing-function: linear;\\n transition-duration: 300ms;\\n transition-property: transform;\\n --icon-name: icon-chevron-down;\\n --icon-size: icon-000;\\n content: \'\';\\n }\\n\\n :host([expanded]) slot[name=\'action\']::slotted(button)::after {\\n transform: scaleY(-100%);\\n }\\n\\n :host([expanded]) [style*=\'max-height\'] {\\n transition-duration: 50ms;\\n }\\n [style*=\'max-height\'] {\\n transition-timing-function: ease-out;\\n transition-property: max-height;\\n overflow: hidden;\\n }\\n .content {\\n padding: var(--padding-y) var(--padding-x);\\n }\\n "],null]],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,"part","base"],[15,0,[30,[36,6],["panel"],null]],[12],[2,"\\n "],[11,"div"],[16,0,[30,[36,6],["content"],null]],[4,[38,8],[[30,[36,7],[[30,[36,0],[[30,[36,0],["height","max-height"],null]],null]],null]],null],[12],[2,"\\n "],[10,"slot"],[12],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"hr"],[15,0,[30,[36,6],["panel-separator"],null]],[12],[13],[2,"\\n "],[10,"slot"],[14,3,"action"],[12],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[18,4,[[32,3]]],[2,"\\n\\n "],[13],[2,"\\n"]],"parameters":[3]}]]],[2,"\\n"]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["array","did-insert","will-destroy","css","require","css-map","class-map","dom-position","on-resize"]}',meta:{moduleName:"consul-ui/components/disclosure-card/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/disclosure-menu/action/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"dVOJ6hd3",block:'{"symbols":["@disclosure","&attrs","&default"],"statements":[[8,[32,1,["Action"]],[[24,"aria-haspopup","menu"],[17,2]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[18,3,null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/disclosure-menu/action/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/disclosure-menu/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"0ppCO1I+",block:'{"symbols":["disclosure","&attrs","@expanded","@rowHeight","@items","&default"],"statements":[[11,"div"],[16,0,[30,[36,0],["disclosure-menu"],null]],[17,2],[12],[2,"\\n "],[8,"disclosure",[],[["@expanded"],[[32,3]]],[["default"],[{"statements":[[2,"\\n "],[18,6,[[30,[36,2],null,[["Action","Menu","disclosure","toggle","close","open","expanded"],[[30,[36,1],["disclosure-menu/action"],[["disclosure"],[[32,1]]]],[30,[36,1],["disclosure-menu/menu"],[["disclosure","items","rowHeight"],[[32,1],[32,5],[32,4]]]],[32,1],[32,1,["toggle"]],[32,1,["close"]],[32,1,["open"]],[32,1,["expanded"]]]]]]],[2,"\\n "]],"parameters":[1]}]]],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["class-map","component","hash"]}',meta:{moduleName:"consul-ui/components/disclosure-menu/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/disclosure-menu/menu/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"OoptGQit",block:'{"symbols":["details","pager","@disclosure","@items","&attrs","&default"],"statements":[[8,[32,3,["Details"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"paged-collection",[],[["@items"],[[30,[36,1],[[32,4],[30,[36,0],null,null]],null]]],[["default"],[{"statements":[[2,"\\n "],[11,"div"],[16,0,[30,[36,3],[[30,[36,0],["paged-collection-scroll",[30,[36,2],[[32,2,["type"]],[30,[36,0],["virtual-scroll","native-scroll"],null]],null]],null]],null]],[17,5],[4,[38,4],["click",[32,3,["close"]]],null],[4,[38,5],[[32,2,["viewport"]]],null],[4,[38,6],[[32,2,["resize"]]],null],[4,[38,7],["--paged-row-height"],[["returns"],[[32,2,["rowHeight"]]]]],[4,[38,7],["max-height"],[["returns"],[[32,2,["maxHeight"]]]]],[12],[2,"\\n "],[18,6,[[30,[36,9],null,[["Menu"],[[30,[36,8],["menu"],[["disclosure","pager"],[[32,3],[32,2]]]]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n\\n"]],"hasEval":false,"upvars":["array","or","contains","class-map","on-outside","did-insert","on-resize","css-prop","component","hash"]}',meta:{moduleName:"consul-ui/components/disclosure-menu/menu/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/disclosure/action/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"psbqw5ZC",block:'{"symbols":["@disclosure","&attrs","&default"],"statements":[[8,"action",[[16,"aria-expanded",[30,[36,0],[[32,1,["expanded"]],"true","false"],null]],[16,"aria-controls",[32,1,["controls"]]],[17,2]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[18,3,null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"hasEval":false,"upvars":["if"]}',meta:{moduleName:"consul-ui/components/disclosure/action/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/disclosure/details/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"zTpefIvc",block:'{"symbols":["id","@disclosure","&default","@auto"],"statements":[[6,[37,10],[[30,[36,9],null,null]],null,[["default"],[{"statements":[[6,[37,5],[[30,[36,4],[[30,[36,3],[[30,[36,1],[[32,4],[29]],null],[32,2,["expanded"]]],null],[30,[36,3],[[30,[36,2],[[32,4],[29]],null],[30,[36,1],[[32,4],false],null]],null]],null]],null,[["default"],[{"statements":[[18,3,[[30,[36,0],null,[["id","expanded"],[[32,1],[32,2,["expanded"]]]]]]],[2,"\\n"]],"parameters":[]}]]],[1,[30,[36,7],[[30,[36,6],[[32,2,["add"]],[32,1]],null]],null]],[2,"\\n"],[1,[30,[36,8],[[30,[36,6],[[32,2,["remove"]],[32,1]],null]],null]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["hash","eq","not-eq","and","or","if","fn","did-insert","will-destroy","unique-id","let"]}',meta:{moduleName:"consul-ui/components/disclosure/details/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/disclosure/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=Ember.HTMLBars.template({id:"28tf0rhU",block:'{"symbols":["State","Guard","Action","dispatch","state","_api","api","&default","@expanded"],"statements":[[8,"state-chart",[],[["@src","@initial"],[[30,[36,5],["boolean"],null],[30,[36,6],[[32,9],"true","false"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,1],null,[["toggle","close","open","expanded","event","button","controls"],[[30,[36,8],[[32,4],"TOGGLE"],null],[30,[36,8],[[32,4],"FALSE"],null],[30,[36,8],[[32,4],"TRUE"],null],[30,[36,0],[[32,5],"true"],null],[32,5,["context"]],[30,[36,7],null,null],[32,0,["ids"]]]]]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,6],[30,[36,1],null,[["Action","Details"],[[30,[36,2],["disclosure/action"],[["disclosure"],[[32,6]]]],[30,[36,2],["disclosure/details"],[["disclosure"],[[30,[36,1],null,[["add","remove","expanded"],[[32,0,["add"]],[32,0,["remove"]],[30,[36,0],[[32,5],"true"],null]]]]]]]]]]],null]],null,[["default"],[{"statements":[[2," "],[18,8,[[32,7]]],[2,"\\n"]],"parameters":[7]}]]]],"parameters":[6]}]]]],"parameters":[1,2,3,4,5]}]]]],"hasEval":false,"upvars":["state-matches","hash","component","assign","let","state-chart","if","unique-id","fn"]}',meta:{moduleName:"consul-ui/components/disclosure/index.hbs"}}) -let u=(n=Ember._tracked,r=Ember._action,a=Ember._action,l=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="ids",a=this,(r=s)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}add(e){Ember.run.schedule("afterRender",()=>{this.ids=`${this.ids}${this.ids.length>0?" ":""}${e}`})}remove(e){this.ids=this.ids.split(" ").filter(t=>t!==e).join(" ")}},s=i(l.prototype,"ids",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}}),i(l.prototype,"add",[r],Object.getOwnPropertyDescriptor(l.prototype,"add"),l.prototype),i(l.prototype,"remove",[a],Object.getOwnPropertyDescriptor(l.prototype,"remove"),l.prototype),l) -e.default=u,Ember._setComponentTemplate(o,u)})),define("consul-ui/components/distribution-meter/index.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>e` - :host { - display: block; - width: 100%; - height: 100%; - } - dl { - position: relative; - height: 100%; - } - :host([type='linear']) { - height: 3px; - } - :host([type='radial']), - :host([type='circular']) { - height: 300px; - } - :host([type='linear']) dl { - background-color: currentColor; - color: rgb(var(--tone-gray-100)); - border-radius: var(--decor-radius-999); - transition-property: transform; - transition-timing-function: ease-out; - transition-duration: .1s; - } - :host([type='linear']) dl:hover { - transform: scaleY(3); - box-shadow: var(--decor-elevation-200); - } - `})),define("consul-ui/components/distribution-meter/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"weg3QSze",block:'{"symbols":["custom","element","&attrs","&default"],"statements":[[8,"custom-element",[],[["@attrs"],[[30,[36,0],[[30,[36,0],["type","\\"linear\\" | \\"radial\\" | \\"circular\\"","linear"],null]],null]]],[["default"],[{"statements":[[2,"\\n "],[11,"distribution-meter"],[17,3],[4,[38,1],[[32,1,["connect"]]],null],[4,[38,2],[[32,1,["disconnect"]]],null],[12],[2,"\\n "],[8,[32,1,["Template"]],[],[["@styles"],[[30,[36,4],[[30,[36,3],["./index.css"],[["from"],["/components/distribution-meter"]]]],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"slot"],[12],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[18,4,[[30,[36,6],null,[["Meter"],[[30,[36,5],["distribution-meter/meter"],[["type"],[[32,2,["attrs","type"]]]]]]]]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["array","did-insert","will-destroy","require","css-map","component","hash"]}',meta:{moduleName:"consul-ui/components/distribution-meter/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/distribution-meter/meter/element",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=(e,t=0)=>{const n=parseFloat(e) -return isNaN(n)?t:n} -e.default=e=>class extends e{attributeChangedCallback(e,n,r){const a=this -switch(e){case"percentage":{let e=a -for(;e;){const n=e.nextElementSibling,r=n?t(n.style.getPropertyValue("--aggregated-percentage")):0,a=t(e.getAttribute("percentage"))+r -e.style.setProperty("--aggregated-percentage",a),e.setAttribute("aggregated-percentage",a),e=e.previousElementSibling}break}}}}})),define("consul-ui/components/distribution-meter/meter/index.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>e` - /*@import '~/styles/base/decoration/visually-hidden.css';*/ - - :host(.critical) { - color: rgb(var(--tone-red-500)); - } - :host(.warning) { - color: rgb(var(--tone-orange-500)); - } - :host(.passing) { - color: rgb(var(--tone-green-500)); - } - - :host { - position: absolute; - top: 0; - height: 100%; - - transition-timing-function: ease-out; - transition-duration: .5s; - } - dt, dd meter { - animation-name: visually-hidden; - animation-fill-mode: forwards; - animation-play-state: paused; - } - - :host(.type-linear) { - transition-property: width; - width: calc(var(--aggregated-percentage) * 1%); - height: 100%; - background-color: currentColor; - border-radius: var(--decor-radius-999); - } - - :host svg { - height: 100%; - } - :host(.type-radial), - :host(.type-circular) { - transition-property: none; - } - :host(.type-radial) dd, - :host(.type-circular) dd { - width: 100%; - height: 100%; - } - :host(.type-radial) circle, - :host(.type-circular) circle { - transition-timing-function: ease-out; - transition-duration: .5s; - pointer-events: stroke; - transition-property: stroke-dashoffset, stroke-width; - transform: rotate(-90deg); - transform-origin: 50%; - fill: transparent; - stroke: currentColor; - stroke-dasharray: 100, 100; - stroke-dashoffset: calc(calc(100 - var(--aggregated-percentage)) * 1px); - } - :host([aggregated-percentage='100']) circle { - stroke-dasharray: 0 !important; - } - :host([aggregated-percentage='0']) circle { - stroke-dasharray: 0, 100 !important; - } - :host(.type-radial) circle, - :host(.type-circular]) svg { - pointer-events: none; - } - :host(.type-radial) circle { - stroke-width: 32; - } - :host(.type-circular) circle { - stroke-width: 14; - } - `})),define("consul-ui/components/distribution-meter/meter/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"pCg7idGT",block:'{"symbols":["custom","element","@type","&attrs"],"statements":[[8,"custom-element",[],[["@class","@attrs","@cssprops"],[[30,[36,0],["./element"],[["from"],["/components/distribution-meter/meter"]]],[30,[36,1],[[30,[36,1],["percentage","number",0],null],[30,[36,1],["description","string",""],null]],null],[30,[36,1],[[30,[36,1],["--percentage","percentage","[percentage]"],null],[30,[36,1],["--aggregated-percentage","percentage",[29]],null]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[11,"distribution-meter-meter"],[16,0,[30,[36,3],[[30,[36,1],[[30,[36,2],["type-",[32,3]],null],[32,3]],null]],null]],[17,4],[4,[38,4],[[32,1,["connect"]]],null],[4,[38,5],[[32,1,["disconnect"]]],null],[12],[2,"\\n "],[8,[32,1,["Template"]],[],[["@styles"],[[30,[36,6],[[30,[36,0],["/styles/base/decoration/visually-hidden.css"],[["from"],["/components/distribution-meter/meter"]]],[30,[36,0],["./index.css"],[["from"],["/components/distribution-meter/meter"]]]],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"dt"],[12],[1,[32,2,["attrs","description"]]],[13],[2,"\\n "],[10,"dd"],[15,"aria-label",[30,[36,2],[[32,2,["attrs","percentage"]],"%"],null]],[12],[2,"\\n "],[10,"meter"],[14,"min","0"],[14,"max","100"],[15,2,[32,2,["attrs","percentage"]]],[12],[2,"\\n "],[10,"slot"],[12],[1,[30,[36,2],[[32,2,["attrs","percentage"]],"%"],null]],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,9],[[30,[36,8],[[30,[36,7],[[32,3],"circular"],null],[30,[36,7],[[32,3],"radial"],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"svg"],[14,"aria-hidden","true"],[14,"viewBox","0 0 32 32"],[14,"clip-path","circle()"],[12],[2,"\\n "],[10,"circle"],[14,"r","16"],[14,"cx","16"],[14,"cy","16"],[12],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n\\n"]],"parameters":[1,2]}]]],[2,"\\n\\n"]],"hasEval":false,"upvars":["require","array","concat","class-map","did-insert","will-destroy","css-map","eq","or","if"]}',meta:{moduleName:"consul-ui/components/distribution-meter/meter/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/ember-collection",["exports","ember-collection/components/ember-collection"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/ember-native-scrollable",["exports","ember-collection/components/ember-native-scrollable"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/components/empty-state/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"iwlkCEdF",block:'{"symbols":["&default","&attrs"],"statements":[[18,1,null],[2,"\\n"],[11,"div"],[24,0,"empty-state"],[17,2],[12],[2,"\\n"],[6,[37,6],[[35,8]],null,[["default"],[{"statements":[[2," "],[10,"header"],[12],[2,"\\n"],[6,[37,7],null,[["name"],["header"]],[["default"],[{"statements":[[2," "],[18,1,null],[2,"\\n"]],"parameters":[]}]]],[6,[37,7],null,[["name"],["subheader"]],[["default"],[{"statements":[[2," "],[18,1,null],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,7],null,[["name"],["body"]],[["default"],[{"statements":[[2," "],[10,"div"],[12],[2,"\\n "],[18,1,null],[2,"\\n"],[6,[37,6],[[35,0]],null,[["default"],[{"statements":[[2," "],[8,"action",[[4,[38,1],["click",[35,0]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,2],["settings://consul:token"],null],[30,[36,5],[[32,0],[30,[36,4],[[35,3]],null]],[["value"],["data"]]]]],null],[2,"\\n"],[6,[37,6],[[35,3,["AccessorID"]]],null,[["default","else"],[{"statements":[[2," Log in with a different token\\n"]],"parameters":[]},{"statements":[[2," Log in\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,7],null,[["name"],["actions"]],[["default"],[{"statements":[[2," "],[10,"ul"],[12],[2,"\\n "],[18,1,null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[13]],"hasEval":false,"upvars":["login","on","uri","token","mut","action","if","yield-slot","hasHeader"]}',meta:{moduleName:"consul-ui/components/empty-state/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:"",willRender:function(){this._super(...arguments),Ember.set(this,"hasHeader",this._isRegistered("header")||this._isRegistered("subheader"))}})) -e.default=r})),define("consul-ui/components/error-state/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"hckyXX72",block:'{"symbols":["@error","@login"],"statements":[[6,[37,3],[[30,[36,5],[[32,1,["status"]],"403"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"empty-state",[[16,0,[30,[36,0],["status-",[32,1,["status"]]],null]]],[["@login"],[[32,2]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,2],[[32,1,["message"]],"Consul returned an error"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,3],[[32,1,["status"]]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["subheader"]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n Error "],[1,[32,1,["status"]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,3],[[32,1,["detail"]]],null,[["default","else"],[{"statements":[[2," "],[1,[32,1,["detail"]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," You may have visited a URL that is loading an unknown resource, so you can try going back to the root or try re-submitting your ACL Token/SecretID by going back to ACLs.\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"back-link"],[12],[2,"\\n "],[8,"action",[],[["@href"],[[30,[36,4],["index"],null]]],[["default"],[{"statements":[[2,"\\n Go back\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[8,"action",[],[["@href","@external"],[[31,[[30,[36,1],["CONSUL_DOCS_URL"],null]]],true]],[["default"],[{"statements":[[2,"\\n Read the documentation\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[[16,0,[30,[36,0],["status-",[32,1,["status"]]],null]]],[["@login"],[[32,2]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n You are not authorized\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["subheader"]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n Error "],[1,[32,1,["status"]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n You must be granted permissions to view this data. Ask your administrator if you think you should have access.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[8,"action",[],[["@href","@external"],[[31,[[30,[36,1],["CONSUL_DOCS_URL"],null],"/acl/index.html"]],true]],[["default"],[{"statements":[[2,"\\n Read the documentation\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[8,"action",[],[["@href","@external"],[[31,[[30,[36,1],["CONSUL_DOCS_LEARN_URL"],null],"/consul/security-networking/production-acls"]],true]],[["default"],[{"statements":[[2,"\\n Follow the guide\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["concat","env","or","if","href-to","not-eq"]}',meta:{moduleName:"consul-ui/components/error-state/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/event-source/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"9rZp1Dvu",block:'{"symbols":["&default"],"statements":[[18,1,[[30,[36,1],null,[["close"],[[30,[36,0],[[32,0],"close"],null]]]]]],[2,"\\n"]],"hasEval":false,"upvars":["action","hash"]}',meta:{moduleName:"consul-ui/components/event-source/index.hbs"}}),n=function(e,t,n,r=((e=null)=>"function"==typeof e?e():null)){const a=e[t] -return a!==n&&r(a,n),Ember.set(e,t,n)} -var r=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",dom:Ember.inject.service("dom"),logger:Ember.inject.service("logger"),data:Ember.inject.service("data-source/service"),closeOnDestroy:!0,onerror:function(e){this.logger.execute(e.error)},init:function(){this._super(...arguments),this._listeners=this.dom.listeners()},willDestroyElement:function(){this.closeOnDestroy&&this.actions.close.apply(this,[]),this._listeners.remove(),this._super(...arguments)},didReceiveAttrs:function(){this._super(...arguments),Ember.get(this,"src.configuration.uri")!==Ember.get(this,"source.configuration.uri")&&this.actions.open.apply(this,[])},actions:{open:function(){n(this,"source",this.data.open(this.src,this),e=>{void 0!==e&&this.data.close(e,this)}),n(this,"proxy",this.src,e=>{void 0!==e&&e.destroy()}) -const e=e=>{try{const t=Ember.get(e,"error.errors.firstObject") -"429"!==Ember.get(t||{},"status")&&this.onerror(e),this.logger.execute(e)}catch(e){this.logger.execute(e)}},t=this._listeners.add(this.source,{error:t=>{e(t)}}) -n(this,"_remove",t)},close:function(){void 0!==this.source&&(this.data.close(this.source,this),n(this,"_remove",void 0),Ember.set(this,"source",void 0)),void 0!==this.proxy&&this.proxy.destroy()}}})) -e.default=r})),define("consul-ui/components/flash-message",["exports","ember-cli-flash/components/flash-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/form-component/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"YBF10tF/",block:'{"symbols":["&default"],"statements":[[18,1,null]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/form-component/index.hbs"}}),r=/([^[\]])+/g -var a=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:"",onreset:function(){},onchange:function(){},onerror:function(){},onsuccess:function(){},data:Ember.computed.alias("form.data"),item:Ember.computed.alias("form.data"),dom:Ember.inject.service("dom"),container:Ember.inject.service("form"),actions:{change:function(e,t){let n=this.dom.normalizeEvent(e,t) -const a=[...n.target.name.matchAll(r)],l=a[a.length-1][0] -let s -s=-1===l.indexOf("[")?`${this.type}[${l}]`:l,this.form.handleEvent(n,s),this.onchange({target:this})}}})) -e.default=a})),define("consul-ui/components/form-group/element/checkbox/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"dFj6ezet",block:'{"symbols":["@name","@value","&attrs","@didinsert","@onchange"],"statements":[[11,"input"],[16,3,[32,1]],[16,2,[32,2]],[17,3],[24,4,"checkbox"],[4,[38,1],[[30,[36,0],[[32,4]],null]],null],[4,[38,2],["change",[30,[36,0],[[32,5]],null]],null],[12],[13],[2,"\\n"]],"hasEval":false,"upvars":["optional","did-insert","on"]}',meta:{moduleName:"consul-ui/components/form-group/element/checkbox/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/form-group/element/error/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"Z2yKEUoj",block:'{"symbols":["&attrs","&default"],"statements":[[11,"strong"],[24,"role","alert"],[17,1],[12],[2,"\\n "],[18,2,null],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/form-group/element/error/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/form-group/element/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i -function o(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=Ember.HTMLBars.template({id:"F1rSsI4z",block:'{"symbols":["el","&attrs","&default","@name","@group"],"statements":[[6,[37,9],[[30,[36,8],null,[["Element","Text","Checkbox","Radio","Label","Error","state"],[[30,[36,5],["form-group/element"],[["group","name"],[[32,5],[32,4]]]],[30,[36,5],["form-group/element/text"],[["didinsert","name","oninput"],[[30,[36,7],[[32,0],[32,0,["connect"]]],null],[32,0,["name"]],[30,[36,7],[[32,0],[30,[36,6],[[32,0,["touched"]]],null],true],null]]]],[30,[36,5],["form-group/element/checkbox"],[["didinsert","name","onchange"],[[30,[36,7],[[32,0],[32,0,["connect"]]],null],[32,0,["name"]],[30,[36,7],[[32,0],[30,[36,6],[[32,0,["touched"]]],null],true],null]]]],[30,[36,5],["form-group/element/radio"],[["didinsert","name","onchange"],[[30,[36,7],[[32,0],[32,0,["connect"]]],null],[32,0,["name"]],[30,[36,7],[[32,0],[30,[36,6],[[32,0,["touched"]]],null],true],null]]]],[30,[36,5],["form-group/element/label"],null],[30,[36,5],["form-group/element/error"],null],[35,0]]]]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,4],[[32,0,["type"]],[30,[36,3],["radiogroup","checkbox-group","checkboxgroup"],null]],null]],null,[["default","else"],[{"statements":[[2," "],[11,"div"],[16,"data-property",[32,0,["prop"]]],[16,0,[31,["type-",[32,0,["type"]],[30,[36,2],[[30,[36,1],[[35,0],"error"],null]," has-error"],null]]]],[17,2],[12],[2,"\\n "],[18,3,[[32,1]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"label"],[16,"data-property",[32,0,["prop"]]],[16,0,[31,["type-",[32,0,["type"]],[30,[36,2],[[30,[36,1],[[35,0],"error"],null]," has-error"],null]]]],[17,2],[12],[2,"\\n "],[18,3,[[32,1]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["state","state-matches","if","array","contains","component","mut","action","hash","let"]}',meta:{moduleName:"consul-ui/components/form-group/element/index.hbs"}}) -let d=(n=Ember._tracked,r=Ember._tracked,a=Ember._action,l=class extends t.default{constructor(...e){super(...e),o(this,"el",s,this),o(this,"touched",i,this)}get type(){return void 0!==this.el?this.el.dataset.type||this.el.getAttribute("type")||this.el.getAttribute("role"):this.args.type}get name(){return void 0!==this.args.group?`${this.args.group.name}[${this.args.name}]`:this.args.name}get prop(){return""+this.args.name.toLowerCase().split(".").join("-")}get state(){const e=this.touched&&this.args.error -return{matches:t=>"error"===t&&e}}connect(e){this.el=e}},s=u(l.prototype,"el",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i=u(l.prototype,"touched",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),u(l.prototype,"connect",[a],Object.getOwnPropertyDescriptor(l.prototype,"connect"),l.prototype),l) -e.default=d,Ember._setComponentTemplate(c,d)})),define("consul-ui/components/form-group/element/label/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"ND/d/+Dz",block:'{"symbols":["&attrs","&default"],"statements":[[11,"span"],[24,0,"form-elements-label label"],[17,1],[12],[2,"\\n "],[18,2,null],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/form-group/element/label/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/form-group/element/radio/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"Pv6QuCmR",block:'{"symbols":["@name","@value","&attrs","@didinsert","@onchange"],"statements":[[11,"input"],[16,3,[32,1]],[16,2,[32,2]],[17,3],[24,4,"radio"],[4,[38,1],[[30,[36,0],[[32,4]],null]],null],[4,[38,2],["change",[30,[36,0],[[32,5]],null]],null],[12],[13],[2,"\\n"]],"hasEval":false,"upvars":["optional","did-insert","on"]}',meta:{moduleName:"consul-ui/components/form-group/element/radio/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/form-group/element/text/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"RUJvSrX2",block:'{"symbols":["@name","@value","&attrs","@didinsert","@oninput"],"statements":[[11,"input"],[16,3,[32,1]],[16,2,[32,2]],[17,3],[24,4,"text"],[4,[38,1],[[30,[36,0],[[32,4]],null]],null],[4,[38,2],["input",[30,[36,0],[[32,5]],null]],null],[12],[13],[2,"\\n"]],"hasEval":false,"upvars":["optional","did-insert","on"]}',meta:{moduleName:"consul-ui/components/form-group/element/text/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/form-group/index",["exports","@glimmer/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"PFK3HI8F",block:'{"symbols":["&default"],"statements":[[18,1,[[30,[36,1],null,[["Element"],[[30,[36,0],["form-group/element"],[["group"],[[32,0]]]]]]]]],[2,"\\n"]],"hasEval":false,"upvars":["component","hash"]}',meta:{moduleName:"consul-ui/components/form-group/index.hbs"}}) -class r extends t.default{get name(){return this.args.name}}e.default=r,Ember._setComponentTemplate(n,r)})),define("consul-ui/components/form-input/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"TcGpchvk",block:'{"symbols":["help","@name","@chart","&attrs","&default","@help","@validations"],"statements":[[11,"label"],[16,0,[30,[36,2],["form-input",[30,[36,0],[[30,[36,1],[[32,3,["state","context","errors"]],[32,2]],null]," has-error"],null]],null]],[17,4],[12],[2,"\\n "],[10,"span"],[12],[2,"\\n "],[18,5,[[30,[36,3],["label"],null]]],[2,"\\n "],[13],[2,"\\n "],[18,5,[[30,[36,3],["input"],null]]],[2,"\\n"],[6,[37,5],[[30,[36,4],[[32,7,["help"]],[32,6]],null]],null,[["default"],[{"statements":[[6,[37,0],[[32,1]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"\\n "],[1,[32,1]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]],[2," "],[8,"state",[],[["@state","@matches"],[[32,3,["state"]],"error"]],[["default"],[{"statements":[[2,"\\n"],[2," "],[10,"strong"],[14,"role","alert"],[12],[1,[30,[36,1],[[30,[36,1],[[32,3,["state","context","errors"]],[32,2]],null],"message"],null]],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["if","get","concat","-named-block-invocation","or","let"]}',meta:{moduleName:"consul-ui/components/form-input/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/freetext-filter/index",["exports","@glimmer/component"],(function(e,t){var n,r,a -function l(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const s=Ember.HTMLBars.template({id:"lUCYCwl6",block:'{"symbols":["&attrs","@value","&default"],"statements":[[11,"div"],[24,0,"freetext-filter"],[17,1],[12],[2,"\\n "],[10,"label"],[14,0,"type-search"],[12],[2,"\\n "],[10,"span"],[14,0,"freetext-filter_label"],[12],[2,"Search"],[13],[2,"\\n "],[10,"input"],[14,0,"freetext-filter_input"],[15,"onsearch",[30,[36,0],[[32,0],[32,0,["change"]]],null]],[15,"oninput",[30,[36,0],[[32,0],[32,0,["change"]]],null]],[15,"onkeydown",[30,[36,0],[[32,0],[32,0,["keydown"]]],null]],[14,3,"s"],[15,2,[32,2]],[15,"placeholder",[32,0,["placeholder"]]],[14,"autofocus","autofocus"],[14,4,"search"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[18,3,null],[2,"\\n"],[13]],"hasEval":false,"upvars":["action"]}',meta:{moduleName:"consul-ui/components/freetext-filter/index.hbs"}}) -let i=(n=Ember._action,r=Ember._action,l((a=class extends t.default{get placeholder(){return this.args.placeholder||"Search"}get onsearch(){return this.args.onsearch||(()=>{})}change(e){this.onsearch(e)}keydown(e){13===e.keyCode&&e.preventDefault()}}).prototype,"change",[n],Object.getOwnPropertyDescriptor(a.prototype,"change"),a.prototype),l(a.prototype,"keydown",[r],Object.getOwnPropertyDescriptor(a.prototype,"keydown"),a.prototype),a) -e.default=i,Ember._setComponentTemplate(s,i)})),define("consul-ui/components/hashicorp-consul/index",["exports","@glimmer/component"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=Ember.HTMLBars.template({id:"GQy+KSaK",block:'{"symbols":["__arg0","__arg1","selector","disclosure","panel","menu","app","flash","status","type","notice","&default","@dc","@partition","@nspace","@onchange","@dcs","&attrs"],"statements":[[8,"app",[[24,0,"hashicorp-consul"],[17,18]],[["@namedBlocksInfo"],[[30,[36,4],null,[["notifications","home-nav","main-nav","complementary-nav","main","content-info"],[1,0,0,0,0,0]]]]],[["default"],[{"statements":[[6,[37,3],[[30,[36,2],[[32,1],"notifications"],null]],null,[["default","else"],[{"statements":[[6,[37,17],[[32,2]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,21],[[30,[36,20],[[30,[36,20],[[35,19,["queue"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,7,["Notification"]],[],[["@delay","@sticky"],[[30,[36,18],[[32,8,["timeout"]],[32,8,["extendedTimeout"]]],null],[32,8,["sticky"]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[32,8,["dom"]]],null,[["default","else"],[{"statements":[[2," "],[2,[32,8,["dom"]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,17],[[30,[36,16],[[32,8,["type"]]],null],[30,[36,16],[[32,8,["action"]]],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[[24,"role","alert"],[16,0,[30,[36,1],[[32,9]," notification-",[32,10]],null]],[24,"data-notification",""]],[["@type"],[[32,9]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,11,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"\\n "],[1,[30,[36,15],[[32,9]],null]],[2,"!\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,11,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,3],[[30,[36,13],[[32,10],"logout"],null]],null,[["default","else"],[{"statements":[[6,[37,3],[[30,[36,13],[[32,9],"success"],null]],null,[["default","else"],[{"statements":[[2," You are now logged out.\\n"]],"parameters":[]},{"statements":[[2," There was an error logging out.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,13],[[32,10],"authorize"],null]],null,[["default","else"],[{"statements":[[6,[37,3],[[30,[36,13],[[32,9],"success"],null]],null,[["default","else"],[{"statements":[[2," You are now logged in.\\n"]],"parameters":[]},{"statements":[[2," There was an error, please check your SecretID/Token\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,14],[[30,[36,13],[[32,10],"use"],null],[30,[36,13],[[32,8,["model"]],"token"],null]],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/token/notifications",[],[["@type","@status","@item","@error"],[[32,10],[32,9],[32,8,["item"]],[32,8,["error"]]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,13],[[32,8,["model"]],"intention"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/intention/notifications",[],[["@type","@status","@item","@error"],[[32,10],[32,9],[32,8,["item"]],[32,8,["error"]]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,13],[[32,8,["model"]],"role"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/role/notifications",[],[["@type","@status","@item","@error"],[[32,10],[32,9],[32,8,["item"]],[32,8,["error"]]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,13],[[32,8,["model"]],"policy"],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/policy/notifications",[],[["@type","@status","@item","@error"],[[32,10],[32,9],[32,8,["item"]],[32,8,["error"]]]],null],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[11]}]]],[2,"\\n"]],"parameters":[9,10]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[7]}]]]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,2],[[32,1],"home-nav"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"a"],[15,6,[30,[36,7],["index"],null]],[12],[8,"consul/logo",[],[[],[]],null],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,2],[[32,1],"main-nav"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"ul"],[12],[2,"\\n "],[8,"consul/datacenter/selector",[],[["@dc","@partition","@nspace","@dcs"],[[32,13],[32,14],[32,15],[32,17]]],null],[2,"\\n "],[8,"consul/partition/selector",[],[["@dc","@partition","@nspace","@partitions","@onchange"],[[32,13],[32,14],[32,15],[32,0,["partitions"]],[30,[36,11],[[32,0],[30,[36,10],[[32,0,["partitions"]]],null]],[["value"],["data"]]]]],null],[2,"\\n "],[8,"consul/nspace/selector",[],[["@dc","@partition","@nspace","@nspaces","@onchange"],[[32,13],[32,14],[32,15],[32,0,["nspaces"]],[30,[36,11],[[32,0],[30,[36,10],[[32,0,["nspaces"]]],null]],[["value"],["data"]]]]],null],[2,"\\n"],[6,[37,3],[[30,[36,12],["access overview"],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[15,0,[30,[36,9],[[30,[36,8],["is-active",[30,[36,6],["dc.show",[32,13,["Name"]]],null]],null]],null]],[12],[2,"\\n "],[8,"action",[],[["@href"],[[30,[36,7],["dc.show",[32,13,["Name"]]],null]]],[["default"],[{"statements":[[2,"\\n Overview\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,3],[[30,[36,12],["read services"],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[15,0,[30,[36,3],[[30,[36,6],["dc.services",[32,13,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,7],["dc.services",[32,13,["Name"]]],null]],[12],[2,"Services"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,3],[[30,[36,12],["read nodes"],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[15,0,[30,[36,3],[[30,[36,6],["dc.nodes",[32,13,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,7],["dc.nodes",[32,13,["Name"]]],null]],[12],[2,"Nodes"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,3],[[30,[36,12],["read kv"],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[15,0,[30,[36,3],[[30,[36,6],["dc.kv",[32,13,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,7],["dc.kv",[32,13,["Name"]]],null]],[12],[2,"Key/Value"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,3],[[30,[36,12],["read intentions"],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[15,0,[30,[36,3],[[30,[36,6],["dc.intentions",[32,13,["Name"]]],null],"is-active"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,7],["dc.intentions",[32,13,["Name"]]],null]],[12],[2,"Intentions"],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"consul/acl/selector",[],[["@dc","@partition","@nspace"],[[32,13],[32,14],[32,15]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,2],[[32,1],"complementary-nav"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"ul"],[12],[2,"\\n "],[8,"debug/navigation",[],[[],[]],null],[2,"\\n "],[10,"li"],[12],[2,"\\n "],[8,"disclosure-menu",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4,["Action"]],[[4,[38,5],["click",[32,4,["toggle"]]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Help\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,4,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Menu"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Separator"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n Consul v"],[1,[30,[36,0],["CONSUL_VERSION"],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Item"]],[[24,0,"docs-link"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Action"]],[],[["@href","@external"],[[30,[36,0],["CONSUL_DOCS_URL"],null],true]],[["default"],[{"statements":[[2,"\\n Documentation\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Item"]],[[24,0,"learn-link"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Action"]],[],[["@href","@external"],[[30,[36,1],[[30,[36,0],["CONSUL_DOCS_LEARN_URL"],null],"/consul"],null],true]],[["default"],[{"statements":[[2,"\\n HashiCorp Learn\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Separator"]],[],[[],[]],null],[2,"\\n "],[8,[32,6,["Item"]],[[24,0,"feedback-link"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Action"]],[],[["@href","@external"],[[30,[36,0],["CONSUL_REPO_ISSUES_URL"],null],true]],[["default"],[{"statements":[[2,"\\n Provide Feedback\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[15,0,[30,[36,3],[[30,[36,6],["settings"],null],"is-active"],null]],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,7],["settings"],[["params"],[[30,[36,4],null,[["nspace","partition"],[[29],[29]]]]]]]],[12],[2,"\\n Settings\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"consul/token/selector",[],[["@dc","@partition","@nspace","@onchange"],[[32,13],[32,14],[32,15],[32,16]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"tokenSelector",[32,3]]],null],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,2],[[32,1],"main"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[18,12,[[30,[36,4],null,[["login"],[[30,[36,3],[[32,0,["tokenSelector"]],[32,0,["tokenSelector"]],[30,[36,4],null,[["open","close"],[[29],[29]]]]],null]]]]]],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,3],[[30,[36,2],[[32,1],"content-info"],null]],null,[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Consul v"],[1,[30,[36,0],["CONSUL_VERSION"],null]],[2,"\\n "],[13],[2,"\\n "],[2,[30,[36,1],["\x3c!-- ",[30,[36,0],["CONSUL_GIT_SHA"],null],"--\x3e"],null]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["env","concat","-is-named-block-invocation","if","hash","on","is-href","href-to","array","class-map","mut","action","can","eq","or","capitalize","lowercase","let","sub","flashMessages","-track-array","each"]}',meta:{moduleName:"consul-ui/components/hashicorp-consul/index.hbs"}}) -let s=(n=Ember.inject.service("flashMessages"),r=class extends t.default{constructor(...e){var t,n,r,l -super(...e),t=this,n="flashMessages",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}},i=r.prototype,o="flashMessages",u=[n],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a=m,r) -var i,o,u,c,d,m -e.default=s,Ember._setComponentTemplate(l,s)})),define("consul-ui/components/informed-action/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"VuPbMP+L",block:'{"symbols":["&attrs","&default"],"statements":[[11,"div"],[24,0,"informed-action"],[17,1],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[18,2,[[30,[36,0],["header"],null]]],[2,"\\n "],[13],[2,"\\n "],[18,2,[[30,[36,0],["body"],null]]],[2,"\\n "],[13],[2,"\\n "],[10,"ul"],[12],[2,"\\n "],[18,2,[[30,[36,0],["actions"],null],[30,[36,2],null,[["Action"],[[30,[36,1],["anonymous"],[["tagName"],["li"]]]]]]]],[2,"\\n "],[13],[2,"\\n"],[13]],"hasEval":false,"upvars":["-named-block-invocation","component","hash"]}',meta:{moduleName:"consul-ui/components/informed-action/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/ivy-codemirror",["exports","ivy-codemirror/components/ivy-codemirror"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/jwt-source/index",["exports","@glimmer/component","consul-ui/utils/dom/event-source"],(function(e,t,n){var r,a,l,s,i -function o(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(r=Ember.inject.service("repository/oidc-provider"),a=Ember.inject.service("dom"),l=class extends t.default{constructor(){super(...arguments),o(this,"repo",s,this),o(this,"dom",i,this),this.source&&this.source.close(),this._listeners=this.dom.listeners(),this.source=(0,n.fromPromise)(this.repo.findCodeByURL(this.args.src)),this._listeners.add(this.source,{message:e=>this.onchange(e),error:e=>this.onerror(e)})}onchange(e){"function"==typeof this.args.onchange&&this.args.onchange(...arguments)}onerror(e){"function"==typeof this.args.onerror&&this.args.onerror(...arguments)}willDestroy(){super.willDestroy(...arguments),this.source&&this.source.close(),this.repo.close(),this._listeners.remove()}},s=u(l.prototype,"repo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i=u(l.prototype,"dom",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l) -e.default=c})),define("consul-ui/components/list-collection/index",["exports","ember-collection/components/ember-collection","ember-collection/layouts/percentage-columns","block-slots"],(function(e,t,n,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=Ember.HTMLBars.template({id:"sapn9cV8",block:'{"symbols":["slice","more","item","index","cell","&default","&attrs"],"statements":[[11,"div"],[16,0,[31,["list-collection list-collection-scroll-",[34,26]]]],[23,5,[30,[36,28],["height:",[35,27,["height"]],"px"],null]],[16,1,[34,29]],[17,7],[12],[2,"\\n"],[18,6,null],[2,"\\n"],[6,[37,2],[[30,[36,20],[[35,26],"virtual"],null]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,21],["resize",[30,[36,4],[[32,0],"resize"],null]],null]],[2,"\\n "],[8,"ember-native-scrollable",[],[["@tagName","@content-size","@scroll-left","@scroll-top","@scrollChange","@clientSizeChange"],["ul",[34,22],[34,23],[34,24],[30,[36,4],[[32,0],"scrollChange"],null],[30,[36,4],[[32,0],"clientSizeChange"],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[12],[13],[6,[37,14],[[30,[36,13],[[30,[36,13],[[35,25]],null]],null]],null,[["default"],[{"statements":[[10,"li"],[15,"onclick",[30,[36,4],[[32,0],"click"],null]],[22,5,[32,5,["style"]]],[15,0,[30,[36,2],[[35,8],[30,[36,2],[[30,[36,9],[[35,8]],[["item"],[[32,5,["item"]]]]],"linkable"],null]],null]],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[10,"div"],[14,0,"header"],[12],[18,6,[[32,5,["item"]],[32,5,["index"]]]],[13]],"parameters":[]}]]],[2,"\\n "],[8,"yield-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[10,"div"],[14,0,"detail"],[12],[18,6,[[32,5,["item"]],[32,5,["index"]]]],[13]],"parameters":[]}]]],[2,"\\n "],[8,"yield-slot",[],[["@name","@params"],["actions",[30,[36,12],[[30,[36,11],["more-popover-menu"],[["expanded","onchange"],[[30,[36,2],[[30,[36,20],[[35,19],[32,5,["index"]]],null],true,false],null],[30,[36,4],[[32,0],"change",[32,5,["index"]]],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"actions"],[12],[2,"\\n "],[18,6,[[32,5,["item"]],[32,5,["index"]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13]],"parameters":[5]}]]]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,6],[[30,[36,2],[[30,[36,17],[[35,15],[30,[36,10],[[32,0,["expand"]]],null]],null],[30,[36,18],[0,[35,15],[35,0]],null],[35,0]],null]],null,[["default"],[{"statements":[[2," "],[10,"ul"],[12],[2,"\\n "],[10,"li"],[14,5,"display: none;"],[12],[13],[6,[37,14],[[30,[36,13],[[30,[36,13],[[32,1]],null]],null]],null,[["default"],[{"statements":[[10,"li"],[15,"onclick",[30,[36,4],[[32,0],"click"],null]],[15,0,[30,[36,2],[[30,[36,10],[[35,8]],null],"linkable",[30,[36,2],[[30,[36,9],[[35,8]],[["item"],[[35,7,["item"]]]]],"linkable"],null]],null]],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[10,"div"],[14,0,"header"],[12],[18,6,[[32,3],[32,4]]],[13]],"parameters":[]}]]],[2,"\\n "],[8,"yield-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[10,"div"],[14,0,"detail"],[12],[18,6,[[32,3],[32,4]]],[13]],"parameters":[]}]]],[2,"\\n "],[8,"yield-slot",[],[["@name","@params"],["actions",[30,[36,12],[[30,[36,11],["more-popover-menu"],[["onchange"],[[30,[36,4],[[32,0],"change",[32,4]],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"actions"],[12],[2,"\\n "],[18,6,[[32,3],[32,4]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13]],"parameters":[3,4]}]]],[13],[2,"\\n"],[6,[37,2],[[30,[36,17],[[35,15],[30,[36,16],[[35,0,["length"]],[35,15]],null]],null]],null,[["default"],[{"statements":[[6,[37,6],[[30,[36,5],[[32,1,["length"]],[35,0,["length"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"button"],[15,0,[30,[36,2],[[32,2],"closed"],null]],[15,"onclick",[30,[36,4],[[32,0],[30,[36,3],[[32,0,["expand"]]],null],[32,2]],null]],[14,4,"button"],[12],[2,"\\n"],[6,[37,2],[[32,2]],null,[["default","else"],[{"statements":[[2," View "],[1,[30,[36,1],[[35,0,["length"]],[32,1,["length"]]],null]],[2," more\\n"]],"parameters":[]},{"statements":[[2," View less\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[2]}]]]],"parameters":[]}]]]],"parameters":[1]}]]],[2,"\\n"]],"parameters":[]}]]],[13]],"hasEval":false,"upvars":["items","sub","if","mut","action","not-eq","let","cell","linkable","is","not","component","block-params","-track-array","each","partial","gt","and","slice","checked","eq","on-window","_contentSize","_scrollLeft","_scrollTop","_cells","scroll","style","concat","guid"]}',meta:{moduleName:"consul-ui/components/list-collection/index.hbs"}}),l=n.default.prototype.formatItemStyle -var s=Ember._setComponentTemplate(a,t.default.extend(r.default,{dom:Ember.inject.service("dom"),tagName:"",height:500,cellHeight:70,checked:null,scroll:"virtual",init:function(){this._super(...arguments),this.columns=[100],this.guid=this.dom.guid(this)},didInsertElement:function(){this._super(...arguments),this.$element=this.dom.element("#"+this.guid),"virtual"===this.scroll&&this.actions.resize.apply(this,[{target:this.dom.viewport()}])},didReceiveAttrs:function(){this._super(...arguments),this._cellLayout=this["cell-layout"]=new n.default(Ember.get(this,"items.length"),Ember.get(this,"columns"),Ember.get(this,"cellHeight")) -const e=this -this["cell-layout"].formatItemStyle=function(t){let n=l.apply(this,arguments) -return e.checked===t&&(n+=";z-index: 1"),n}},style:Ember.computed("height",(function(){return"virtual"!==this.scroll?{}:{height:Ember.get(this,"height")}})),actions:{resize:function(e){const t=Ember.get(this,"dom").element('footer[role="contentinfo"]') -if(t){const n=1,r=this.$element.getBoundingClientRect().top+t.clientHeight+n,a=e.target.innerHeight-r -this.set("height",Math.max(0,a)),this.updateItems(),this.updateScrollPosition()}},click:function(e){return this.dom.clickFirstAnchor(e,".list-collection > ul > li")},change:function(e,t={}){if(t.target.checked&&e!==Ember.get(this,"checked")){Ember.set(this,"checked",parseInt(e)),this.$row=this.dom.closest("li",t.target),this.$row.style.zIndex=1 -const n=this.dom.sibling(t.target,"div") -n.getBoundingClientRect().top+n.clientHeight>this.dom.element('footer[role="contentinfo"]').getBoundingClientRect().top?n.classList.add("above"):n.classList.remove("above")}else{this.dom.sibling(t.target,"div").classList.remove("above"),Ember.set(this,"checked",null),this.$row.style.zIndex=null}}}})) -e.default=s})),define("consul-ui/components/maybe-in-element",["exports","ember-maybe-in-element/components/maybe-in-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/menu-panel/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"NsIcnIv+",block:'{"symbols":["api","&default","&attrs"],"statements":[[18,2,null],[2,"\\n"],[6,[37,8],[[30,[36,7],null,[["change"],[[30,[36,4],[[32,0],"change"],null]]]]],null,[["default"],[{"statements":[[11,"div"],[16,0,[30,[36,3],[[30,[36,1],["menu-panel"],null],[30,[36,1],["menu-panel-deprecated"],null],[30,[36,1],[[35,2]],null],[30,[36,1],[[35,0],"confirmation"],null]],null]],[4,[38,5],[[30,[36,4],[[32,0],"connect"],null]],null],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["controls"]],[["default"],[{"statements":[[2,"\\n "],[18,2,[[32,1]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,6],null,[["name"],["header"]],[["default","else"],[{"statements":[[2," "],[10,"div"],[12],[2,"\\n "],[18,2,[[32,1]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[],"parameters":[]}]]],[2," "],[11,"ul"],[24,"role","menu"],[17,3],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n "],[18,2,[[32,1]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["isConfirmation","array","position","class-map","action","did-insert","yield-slot","hash","let"]}',meta:{moduleName:"consul-ui/components/menu-panel/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:"",dom:Ember.inject.service("dom"),isConfirmation:!1,actions:{connect:function(e){Ember.run.next(()=>{if(!this.isDestroyed){const t=this.dom.element('li:only-child > [role="menu"]:first-child',e) -Ember.set(this,"isConfirmation",void 0!==t)}})},change:function(e){const t=e.target.getAttribute("id"),n=this.dom.element(`[for='${t}']`),r=this.dom.element("[role=menu]",n.parentElement),a=this.dom.closest(".menu-panel",r) -if(e.target.checked){r.style.display="block" -const e=r.offsetHeight+2 -a.style.maxHeight=a.style.minHeight=e+"px"}else r.style.display=null,a.style.maxHeight=null,a.style.minHeight="0"}}})) -e.default=r})),define("consul-ui/components/menu/action/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"H3aA1fem",block:'{"symbols":["&attrs","@href","@external","@disclosure","&default"],"statements":[[8,"action",[[24,"role","menuitem"],[17,1],[4,[38,2],["click",[30,[36,1],[[32,2],[32,4,["close"]],[30,[36,0],null,null]],null]],null]],[["@href","@external"],[[32,2],[32,3]]],[["default"],[{"statements":[[2,"\\n "],[18,5,null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"hasEval":false,"upvars":["noop","if","on"]}',meta:{moduleName:"consul-ui/components/menu/action/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/menu/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"grZDhn10",block:'{"symbols":["@pager","@disclosure","@event","@onclose","&default"],"statements":[[11,"ul"],[24,"role","menu"],[23,5,[30,[36,4],[[30,[36,3],["height",[30,[36,2],[[30,[36,1],[[32,1],[30,[36,0],[[32,1,["type"]],"native-scroll"],null]],null],[32,1,["totalHeight"]]],null],"px"],null],[30,[36,3],["--paged-start",[30,[36,2],[[30,[36,1],[[32,1],[30,[36,0],[[32,1,["type"]],"native-scroll"],null]],null],[32,1,["startHeight"]]],null],"px"],null]],null]],[4,[38,6],[[30,[36,5],[[32,1,["pane"]]],null]],null],[4,[38,8],null,[["onclose","openEvent"],[[30,[36,7],[[32,4],[32,2,["close"]]],null],[30,[36,7],[[32,3],[32,2,["event"]]],null]]]],[12],[2,"\\n "],[18,5,[[30,[36,10],null,[["Action","Item","Separator","items"],[[30,[36,9],["menu/action"],[["disclosure"],[[32,2]]]],[30,[36,9],["menu/item"],null],[30,[36,9],["menu/separator"],null],[32,1,["items"]]]]]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["not-eq","and","if","array","style-map","optional","did-insert","or","aria-menu","component","hash"]}',meta:{moduleName:"consul-ui/components/menu/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/menu/item/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"50p8S2ab",block:'{"symbols":["&attrs","&default"],"statements":[[11,"li"],[24,"role","none"],[17,1],[12],[2,"\\n "],[18,2,null],[2,"\\n"],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/menu/item/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/menu/separator/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"TK+1HboX",block:'{"symbols":["&attrs","&default"],"statements":[[11,"li"],[24,"role","separator"],[17,1],[12],[18,2,null],[13],[2,"\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/menu/separator/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/modal-dialog/index",["exports","block-slots","a11y-dialog"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=Ember.HTMLBars.template({id:"QFjycrze",block:'{"symbols":["aria","&default","&attrs","@aria"],"statements":[[6,[37,6],[[30,[36,3],null,[["labelledby"],[[30,[36,5],null,null]]]]],null,[["default"],[{"statements":[[2," "],[8,"portal",[],[["@target"],["modal"]],[["default"],[{"statements":[[2,"\\n "],[18,2,null],[2,"\\n "],[11,"div"],[24,0,"modal-dialog"],[24,"aria-hidden","true"],[17,3],[4,[38,1],[[30,[36,0],[[32,0],"connect"],null]],null],[4,[38,2],[[30,[36,0],[[32,0],"disconnect"],null]],null],[12],[2,"\\n "],[10,"div"],[14,"tabindex","-1"],[14,"data-a11y-dialog-hide",""],[12],[13],[2,"\\n "],[10,"div"],[14,0,"modal-dialog-modal"],[14,"role","dialog"],[15,"aria-label",[32,4,["label"]]],[12],[2,"\\n "],[10,"div"],[14,"role","document"],[12],[2,"\\n "],[10,"header"],[14,0,"modal-dialog-header"],[12],[2,"\\n "],[10,"button"],[14,"data-a11y-dialog-hide",""],[14,"aria-label","Close dialog"],[14,4,"button"],[12],[2,"\\n "],[13],[2,"\\n "],[8,"yield-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[18,2,[[30,[36,3],null,[["open","close","aria"],[[30,[36,0],[[32,0],"open"],null],[30,[36,0],[[32,0],"close"],null],[32,1]]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"modal-dialog-body"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[18,2,[[30,[36,3],null,[["open","close","aria"],[[30,[36,0],[[32,0],"open"],null],[30,[36,0],[[32,0],"close"],null],[32,1]]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"footer"],[14,0,"modal-dialog-footer"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name","@params"],["actions",[30,[36,4],[[30,[36,0],[[32,0],"close"],null]],null]]],[["default"],[{"statements":[[2,"\\n "],[18,2,[[30,[36,3],null,[["open","close","aria"],[[30,[36,0],[[32,0],"open"],null],[30,[36,0],[[32,0],"close"],null],[32,1]]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["action","did-insert","will-destroy","hash","block-params","unique-id","let"]}',meta:{moduleName:"consul-ui/components/modal-dialog/index.hbs"}}) -var a=Ember._setComponentTemplate(r,Ember.Component.extend(t.default,{tagName:"",onclose:function(){},onopen:function(){},actions:{connect:function(e){this.dialog=new n.default(e),this.dialog.on("hide",()=>this.onclose({target:e})),this.dialog.on("show",()=>this.onopen({target:e})),this.open&&this.dialog.show()},disconnect:function(){this.dialog.destroy()},open:function(){this.dialog.show()},close:function(){this.dialog.hide()}}})) -e.default=a})),define("consul-ui/components/modal-layer/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"SGKsWSq5",block:'{"symbols":["&attrs"],"statements":[[11,"div"],[24,0,"modal-layer"],[17,1],[12],[2,"\\n "],[8,"portal-target",[],[["@name","@multiple"],["modal",true]],null],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/modal-layer/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/more-popover-menu/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"tD2XBvHN",block:'{"symbols":["components","api","&attrs","&default"],"statements":[[11,"div"],[24,0,"more-popover-menu"],[17,3],[12],[2,"\\n "],[8,"popover-menu",[],[["@expanded","@onchange","@keyboardAccess"],[[34,0],[30,[36,2],[[32,0],[35,1]],null],false]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["trigger"]],[["default"],[{"statements":[[2,"\\n More\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n "],[18,4,[[32,1,["MenuItem"]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1,2]}]]],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["expanded","onchange","action"]}',meta:{moduleName:"consul-ui/components/more-popover-menu/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})),define("consul-ui/components/notice/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"CHmd0+dq",block:'{"symbols":["@type","&attrs","&default"],"statements":[[11,"div"],[16,0,[31,["notice ",[30,[36,0],[[32,1],"info"],null]]]],[17,2],[12],[2,"\\n"],[18,3,[[30,[36,2],null,[["Header","Body","Footer"],[[30,[36,1],["anonymous"],[["tagName"],["header"]]],[30,[36,1],["anonymous"],null],[30,[36,1],["anonymous"],[["tagName"],["footer"]]]]]]]],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["or","component","hash"]}',meta:{moduleName:"consul-ui/components/notice/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/oidc-select/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"oidc-select",initial:"idle",on:{RESET:[{target:"idle"}]},states:{idle:{on:{LOAD:[{target:"loading"}]}},loaded:{},loading:{on:{SUCCESS:[{target:"loaded"}]}}}}})) -define("consul-ui/components/oidc-select/index",["exports","@glimmer/component","consul-ui/components/oidc-select/chart.xstate"],(function(e,t,n){var r,a,l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const s=Ember.HTMLBars.template({id:"QN/Z72sP",block:'{"symbols":["State","Guard","ChartAction","dispatch","state","chart","item","__arg0","__arg1","option","item","ignoredState","ignoredGuard","ignoredAction","formDispatch","state","@disabled","@onchange","&attrs","@dc","@nspace","@onerror"],"statements":[[8,"state-chart",[],[["@src"],[[34,22]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,7],null,[["State","Guard","Action","dispatch","state"],[[32,1],[32,2],[32,3],[32,4],[32,5]]]]],null,[["default"],[{"statements":[[2,"\\n"],[11,"div"],[24,0,"oidc-select"],[17,19],[12],[2,"\\n "],[8,[32,1],[],[["@notMatches"],["idle"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src","@onchange","@onerror"],[[30,[36,15],["/${partition}/${nspace}/${dc}/oidc/providers",[30,[36,7],null,[["partition","nspace","dc"],[[32,0,["partition"]],[32,21],[32,20]]]]],null],[30,[36,16],[[30,[36,6],[[32,0],[30,[36,5],[[32,0,["items"]]],null]],[["value"],["data"]]],[30,[36,10],[[32,4],"SUCCESS"],null]],null],[30,[36,16],[[30,[36,10],[[32,4],"RESET"],null],[32,22]],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["loaded"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[24,0,"reset"],[4,[38,11],["click",[30,[36,16],[[30,[36,17],[[32,0],"partition",""],null],[30,[36,10],[[32,4],"RESET"],null]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Choose different Partition\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"state-chart",[],[["@src"],[[30,[36,18],["validate"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"text-input",[],[["@name","@label","@item","@validations","@placeholder","@oninput","@chart"],["partition","Admin Partition",[32,0],[30,[36,7],null,[["partition"],[[30,[36,19],[[30,[36,7],null,[["test","error"],["^[a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?$","Name must be a valid DNS hostname."]]]],null]]]],"Enter your Partition",[30,[36,6],[[32,0],[30,[36,5],[[32,0,["partition"]]],null]],[["value"],["target.value"]]],[30,[36,7],null,[["state","dispatch"],[[32,16],[32,15]]]]]],null],[2,"\\n\\n"],[2," "],[8,[32,1],[],[["@matches"],["idle"]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[4,[38,9],[[30,[36,1],[[30,[36,21],[[32,0,["partition","length"]],1],null],[30,[36,20],[[32,16],"error"],null]],null]],null],[4,[38,11],["click",[30,[36,10],[[32,4],"LOAD"],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Choose provider\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "]],"parameters":[12,13,14,15,16]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["loading"]],[["default"],[{"statements":[[2,"\\n "],[8,"progress",[[24,"aria-label","Loading"]],[[],[]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,1],[],[["@matches"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,21],[[32,0,["items","length"]],3],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,14],[[30,[36,13],[[30,[36,13],[[32,0,["items"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[8,"action",[[16,0,[30,[36,0],[[32,11,["Kind"]],"-oidc-provider"],null]],[16,"disabled",[32,17]],[4,[38,11],["click",[30,[36,10],[[32,18],[32,11]],null]],null]],[["@type"],["button"]],[["default"],[{"statements":[[2,"\\n Continue with "],[1,[30,[36,1],[[32,11,["DisplayName"]],[32,11,["Name"]]],null]],[6,[37,3],[[30,[36,2],[[32,11,["Namespace"]],"default"],null]],null,[["default"],[{"statements":[[2," ("],[1,[32,11,["Namespace"]]],[2,")"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[11]}]]],[2," "],[13],[2,"\\n\\n"]],"parameters":[]},{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,1],[[32,0,["provider"]],[30,[36,12],[0,[32,0,["items"]]],null]],null]],null,[["default"],[{"statements":[[2,"\\n "],[8,"option-input",[],[["@label","@name","@item","@selected","@items","@onchange","@disabled","@namedBlocksInfo"],["SSO Provider","provider",[32,0],[32,7],[32,0,["items"]],[30,[36,6],[[32,0],[30,[36,5],[[32,0,["provider"]]],null]],null],[32,17],[30,[36,7],null,[["option"],[1]]]]],[["default"],[{"statements":[[6,[37,3],[[30,[36,8],[[32,8],"option"],null]],null,[["default"],[{"statements":[[6,[37,4],[[32,9]],null,[["default"],[{"statements":[[2,"\\n "],[10,"span"],[15,0,[30,[36,0],[[32,10,["item","Kind"]],"-oidc-provider"],null]],[12],[2,"\\n "],[1,[30,[36,1],[[32,10,["item","DisplayName"]],[32,10,["item","Name"]]],null]],[6,[37,3],[[30,[36,2],[[32,10,["item","Namespace"]],"default"],null]],null,[["default"],[{"statements":[[2," ("],[1,[32,10,["item","Namespace"]]],[2,")"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[10]}]]]],"parameters":[]}]]]],"parameters":[8,9]}]]],[2,"\\n\\n "],[8,"action",[[4,[38,9],[[32,17]],null],[4,[38,11],["click",[30,[36,10],[[32,18],[32,7]],null]],null]],[["@type"],["button"]],[["default"],[{"statements":[[2,"\\n Log in\\n "]],"parameters":[]}]]],[2,"\\n\\n"]],"parameters":[7]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[6]}]]]],"parameters":[1,2,3,4,5]}]]]],"hasEval":false,"upvars":["concat","or","not-eq","if","let","mut","action","hash","-is-named-block-invocation","disabled","fn","on","object-at","-track-array","each","uri","queue","set","state-chart","array","state-matches","lt","chart"]}',meta:{moduleName:"consul-ui/components/oidc-select/index.hbs"}}) -let i=(r=Ember._tracked,a=class extends t.default{constructor(){var e,t,r,a -super(...arguments),e=this,t="partition",a=this,(r=l)&&Object.defineProperty(e,t,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0}),this.chart=n.default}},o=a.prototype,u="partition",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:function(){return""}},p={},Object.keys(d).forEach((function(e){p[e]=d[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=c.slice().reverse().reduce((function(e,t){return t(o,u,e)||e}),p),m&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(m):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(o,u,p),p=null),l=p,a) -var o,u,c,d,m,p -e.default=i,Ember._setComponentTemplate(s,i)})),define("consul-ui/components/option-input/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"lDf2582n",block:'{"symbols":["__arg0","item","@disabled","@onchange","@selected","@items","&default","@multiple","@expanded","@name","@label","&attrs","@item","@placeholder","@help","@validations","@chart"],"statements":[[8,"form-input",[[24,0,"option-input type-select"],[17,12]],[["@item","@placeholder","@name","@label","@help","@validations","@chart","@namedBlocksInfo"],[[32,13],[32,14],[32,10],[32,11],[32,15],[32,16],[32,17],[30,[36,0],null,[["label","input"],[0,0]]]]],[["default"],[{"statements":[[6,[37,2],[[30,[36,3],[[32,1],"label"],null]],null,[["default","else"],[{"statements":[[2,"\\n"],[2," "],[1,[30,[36,4],[[32,11],[32,10]],null]],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,3],[[32,1],"input"],null]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,2],[[32,9]],null,[["default","else"],[{"statements":[[6,[37,2],[[32,8]],null,[["default","else"],[{"statements":[],"parameters":[]},{"statements":[],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[8,"power-select",[],[["@disabled","@onChange","@selected","@searchEnabled","@options"],[[32,3],[32,4],[32,5],false,[32,6]]],[["default"],[{"statements":[[2,"\\n "],[18,7,[[30,[36,1],["option"],null],[30,[36,0],null,[["item"],[[32,2]]]]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["hash","-named-block-invocation","if","-is-named-block-invocation","or"]}',meta:{moduleName:"consul-ui/components/option-input/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/outlet/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E -function k(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function x(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const j=Ember.HTMLBars.template({id:"R/yzDCxZ",block:'{"symbols":["@name","@model","&default"],"statements":[[1,[30,[36,0],[[32,0,["connect"]]],null]],[2,"\\n"],[1,[30,[36,1],[[32,0,["disconnect"]]],null]],[2,"\\n"],[11,"section"],[24,0,"outlet"],[16,"data-outlet",[32,1]],[16,"data-route",[32,0,["routeName"]]],[16,"data-state",[32,0,["state","name"]]],[16,"data-transition",[30,[36,2],[[32,0,["previousState","name"]]," ",[32,0,["state","name"]]],null]],[4,[38,0],[[30,[36,3],[[32,0,["attributeChanged"]],"element"],null]],null],[4,[38,4],[[30,[36,3],[[32,0,["attributeChanged"]],"model",[32,2]],null]],null],[4,[38,5],["transitionend",[32,0,["transitionEnd"]]],null],[12],[2,"\\n "],[18,3,[[30,[36,6],null,[["state","previousState","route"],[[32,0,["state"]],[32,0,["previousState"]],[32,0,["route"]]]]]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["did-insert","will-destroy","concat","fn","did-update","on","hash"]}',meta:{moduleName:"consul-ui/components/outlet/index.hbs"}}) -class C{constructor(e){this.name=e}matches(e){return this.name===e}}let S=(n=Ember.inject.service("routlet"),r=Ember.inject.service("router"),a=Ember._tracked,l=Ember._tracked,s=Ember._tracked,i=Ember._tracked,o=Ember._tracked,u=Ember._tracked,c=Ember._action,d=Ember._action,m=Ember._action,p=Ember._action,f=Ember._action,b=Ember._action,h=class extends t.default{constructor(...e){super(...e),k(this,"routlet",v,this),k(this,"router",y,this),k(this,"element",g,this),k(this,"routeName",O,this),k(this,"state",_,this),k(this,"previousState",P,this),k(this,"endTransition",w,this),k(this,"route",E,this)}get model(){return this.args.model||{}}get name(){return this.args.name}setAppRoute(e){if("loading"!==e||"oidc-provider-debug"===e){const t=this.element.ownerDocument.documentElement -t.classList.contains("ember-loading")&&t.classList.remove("ember-loading"),t.dataset.route=e,this.setAppState("idle")}}setAppState(e){this.element.ownerDocument.documentElement.dataset.state=e}attributeChanged(e,t){switch(e){case"element":this.element=t,"application"===this.args.name&&(this.setAppState("loading"),this.setAppRoute(this.router.currentRouteName)) -break -case"model":void 0!==this.route&&(this.route._model=t)}}transitionEnd(e){"function"==typeof this.endTransition&&this.endTransition()}startLoad(e){const t=this.routlet.findOutlet(e.to.name)||"application" -if(this.args.name===t){this.previousState=this.state,this.state=new C("loading"),this.endTransition=this.routlet.transition() -const e=window.getComputedStyle(this.element).getPropertyValue("transition-duration") -0===parseFloat(e)&&this.endTransition()}"application"===this.args.name&&this.setAppState("loading")}endLoad(e){this.state.matches("loading")&&(this.previousState=this.state,this.state=new C("idle")),"application"===this.args.name&&this.setAppRoute(this.router.currentRouteName)}connect(){this.routlet.addOutlet(this.args.name,this),this.previousState=this.state=new C("idle"),this.router.on("routeWillChange",this.startLoad),this.router.on("routeDidChange",this.endLoad)}disconnect(){this.routlet.removeOutlet(this.args.name),this.router.off("routeWillChange",this.startLoad),this.router.off("routeDidChange",this.endLoad)}},v=x(h.prototype,"routlet",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=x(h.prototype,"router",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=x(h.prototype,"element",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=x(h.prototype,"routeName",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=x(h.prototype,"state",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=x(h.prototype,"previousState",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=x(h.prototype,"endTransition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=x(h.prototype,"route",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x(h.prototype,"attributeChanged",[c],Object.getOwnPropertyDescriptor(h.prototype,"attributeChanged"),h.prototype),x(h.prototype,"transitionEnd",[d],Object.getOwnPropertyDescriptor(h.prototype,"transitionEnd"),h.prototype),x(h.prototype,"startLoad",[m],Object.getOwnPropertyDescriptor(h.prototype,"startLoad"),h.prototype),x(h.prototype,"endLoad",[p],Object.getOwnPropertyDescriptor(h.prototype,"endLoad"),h.prototype),x(h.prototype,"connect",[f],Object.getOwnPropertyDescriptor(h.prototype,"connect"),h.prototype),x(h.prototype,"disconnect",[b],Object.getOwnPropertyDescriptor(h.prototype,"disconnect"),h.prototype),h) -e.default=S,Ember._setComponentTemplate(j,S)})),define("consul-ui/components/paged-collection/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w -function E(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function k(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const x=Ember.HTMLBars.template({id:"hajSVwhB",block:'{"symbols":["@page","&default"],"statements":[[18,2,[[30,[36,5],null,[["items","page","pane","resize","viewport","rowHeight","maxHeight","startHeight","totalHeight","totalPages","Pager"],[[32,0,["items"]],[32,1],[30,[36,4],[[32,0,["setPane"]]],null],[30,[36,4],[[32,0,["resize"]]],null],[30,[36,4],[[32,0,["setViewport"]]],null],[30,[36,4],[[32,0,["setRowHeight"]]],null],[30,[36,4],[[32,0,["setMaxHeight"]]],null],[32,0,["startHeight"]],[32,0,["totalHeight"]],[32,0,["totalPages"]],[30,[36,3],[[30,[36,2],[[35,1],"index"],null],[30,[36,0],["yield"],null],""],null]]]]]],[2,"\\n\\n"],[1,[30,[36,6],[[32,0,["disconnect"]]],null]],[2,"\\n"]],"hasEval":false,"upvars":["component","type","eq","if","fn","hash","will-destroy"]}',meta:{moduleName:"consul-ui/components/paged-collection/index.hbs"}}) -let j=(n=Ember._tracked,r=Ember._tracked,a=Ember._tracked,l=Ember._tracked,s=Ember._tracked,i=Ember._tracked,o=Ember._tracked,u=Ember._action,c=Ember._action,d=Ember._action,m=Ember._action,p=Ember._action,f=Ember._action,b=Ember._action,h=class extends t.default{constructor(...e){super(...e),E(this,"$pane",v,this),E(this,"$viewport",y,this),E(this,"top",g,this),E(this,"visibleItems",O,this),E(this,"overflow",_,this),E(this,"_rowHeight",P,this),E(this,"_type",w,this)}get type(){return this.args.type||this._type}get items(){return this.args.items.slice(this.cursor,this.cursor+this.perPage)}get perPage(){switch(this.type){case"virtual-scroll":return this.visibleItems+2*this.overflow -case"index":return parseInt(this.args.perPage)}return this.total}get cursor(){switch(this.type){case"virtual-scroll":return this.itemsBefore -case"index":return(parseInt(this.args.page)-1)*this.perPage}return 0}get itemsBefore(){return void 0===this.$viewport?0:Math.max(0,Math.round(this.top/this.rowHeight)-this.overflow)}get rowHeight(){return parseFloat(this.args.rowHeight||this._rowHeight)}get startHeight(){switch(this.type){case"virtual-scroll":return Math.min(this.totalHeight,this.itemsBefore*this.rowHeight) -case"index":return 0}return 0}get totalHeight(){return this.total*this.rowHeight}get totalPages(){return Math.ceil(this.total/this.perPage)}get total(){return this.args.items.length}scroll(e){this.top=this.$viewport.scrollTop}resize(){this.$viewport.clientHeight>0&&this.rowHeight>0?this.visibleItems=Math.ceil(this.$viewport.clientHeight/this.rowHeight):this.visibleItems=0}setViewport(e){this.$viewport="html"===e?[...document.getElementsByTagName("html")][0]:e,this.$viewport.addEventListener("scroll",this.scroll),"html"===e&&this.$viewport.addEventListener("resize",this.resize),this.scroll(),this.resize()}setPane(e){this.$pane=e}setRowHeight(e){this._rowHeight=parseFloat(e)}setMaxHeight(e){const t=parseFloat(e) -isNaN(t)||(this._type="virtual-scroll")}disconnect(){this.$viewport.removeEventListener("scroll",this.scroll),this.$viewport.removeEventListener("resize",this.resize)}},v=k(h.prototype,"$pane",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=k(h.prototype,"$viewport",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=k(h.prototype,"top",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 0}}),O=k(h.prototype,"visibleItems",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 0}}),_=k(h.prototype,"overflow",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 10}}),P=k(h.prototype,"_rowHeight",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return 0}}),w=k(h.prototype,"_type",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return"native-scroll"}}),k(h.prototype,"scroll",[u],Object.getOwnPropertyDescriptor(h.prototype,"scroll"),h.prototype),k(h.prototype,"resize",[c],Object.getOwnPropertyDescriptor(h.prototype,"resize"),h.prototype),k(h.prototype,"setViewport",[d],Object.getOwnPropertyDescriptor(h.prototype,"setViewport"),h.prototype),k(h.prototype,"setPane",[m],Object.getOwnPropertyDescriptor(h.prototype,"setPane"),h.prototype),k(h.prototype,"setRowHeight",[p],Object.getOwnPropertyDescriptor(h.prototype,"setRowHeight"),h.prototype),k(h.prototype,"setMaxHeight",[f],Object.getOwnPropertyDescriptor(h.prototype,"setMaxHeight"),h.prototype),k(h.prototype,"disconnect",[b],Object.getOwnPropertyDescriptor(h.prototype,"disconnect"),h.prototype),h) -e.default=j,Ember._setComponentTemplate(x,j)})),define("consul-ui/components/panel/index.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>e` - .panel { - --padding-x: 14px; - --padding-y: 14px; - } - .panel { - position: relative; - } - .panel-separator { - margin: 0; - } - - .panel { - --tone-border: var(--tone-gray-300); - border: var(--decor-border-100); - border-radius: var(--decor-radius-200); - box-shadow: var(--decor-elevation-600); - } - .panel-separator { - border: 0; - border-top: var(--decor-border-100); - } - .panel { - color: rgb(var(--tone-gray-900)); - background-color: rgb(var(--tone-gray-000)); - } - .panel, - .panel-separator { - border-color: rgb(var(--tone-border)); - } -`})),define("consul-ui/components/policy-form/index",["exports","consul-ui/components/form-component/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"F2W+pe23",block:'{"symbols":["dc","dc","Name","__arg0","__arg0","__arg0","template","&default","&attrs"],"statements":[[18,8,null],[2,"\\n"],[11,"fieldset"],[24,0,"policy-form"],[16,"disabled",[30,[36,6],[[30,[36,5],[[30,[36,27],["write policy"],[["item"],[[35,1]]]]],null],"disabled"],null]],[17,9],[12],[2,"\\n"],[6,[37,28],null,[["name"],["template"]],[["default","else"],[{"statements":[],"parameters":[]},{"statements":[[2," "],[10,"header"],[12],[2,"\\n Policy"],[1,[30,[36,6],[[35,26]," or identity?",""],null]],[2,"\\n "],[13],[2,"\\n"],[6,[37,6],[[35,26]],null,[["default","else"],[{"statements":[[2," "],[10,"p"],[12],[2,"\\n Identities are default policies with configurable names. They save you some time and effort you\'re using Consul for Connect features.\\n "],[13],[2,"\\n"],[2," "],[10,"div"],[14,"role","radiogroup"],[15,0,[30,[36,6],[[35,1,["error","Type"]]," has-error"],null]],[12],[2,"\\n"],[6,[37,11],[[30,[36,10],[[30,[36,10],[[35,25]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[12],[2,"\\n "],[10,"span"],[12],[1,[32,7,["name"]]],[13],[2,"\\n "],[10,"input"],[15,3,[30,[36,19],[[35,0],"[template]"],null]],[15,2,[32,7,["template"]]],[15,"checked",[30,[36,15],[[35,1,["template"]],[32,7,["template"]]],null]],[15,"onchange",[30,[36,2],[[32,0],[30,[36,24],[[30,[36,23],[[35,1],"template"],null]],null]],[["value"],["target.value"]]]],[14,4,"radio"],[12],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[7]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"input"],[15,3,[30,[36,19],[[35,0],"[template]"],null]],[14,2,""],[14,4,"hidden"],[12],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[10,"label"],[15,0,[31,["type-text",[30,[36,6],[[30,[36,29],[[35,1,["error","Name"]],[30,[36,5],[[35,1,["isPristine"]]],null]],null]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Name"],[13],[2,"\\n "],[10,"input"],[15,2,[34,1,["Name"]]],[15,3,[31,[[34,0],"[Name]"]]],[14,"autofocus","autofocus"],[15,"oninput",[30,[36,2],[[32,0],"change"],null]],[14,4,"text"],[12],[13],[2,"\\n "],[10,"em"],[12],[2,"\\n Maximum 128 characters. May only include letters (uppercase and/or lowercase) and/or numbers. Must be unique.\\n "],[13],[2,"\\n"],[6,[37,6],[[30,[36,29],[[35,1,["error","Name"]],[30,[36,5],[[35,1,["isPristine"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"strong"],[12],[1,[35,1,["error","Name","validation"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"label"],[14,"for",""],[14,0,"type-text"],[12],[2,"\\n"],[6,[37,6],[[30,[36,15],[[35,1,["template"]],"service-identity"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"code-editor",[],[["@readonly","@name","@syntax","@oninput","@namedBlocksInfo"],[true,[30,[36,19],[[35,0],"[Rules]"],null],"hcl",[30,[36,2],[[32,0],"change",[30,[36,19],[[35,0],"[Rules]"],null]],null],[30,[36,20],null,[["label","content"],[0,0]]]]],[["default"],[{"statements":[[6,[37,6],[[30,[36,21],[[32,6],"label"],null]],null,[["default","else"],[{"statements":[[2,"\\n Rules "],[10,"a"],[15,6,[31,[[30,[36,18],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[2,"(HCL Format)"],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,6],[[30,[36,21],[[32,6],"content"],null]],null,[["default"],[{"statements":[[8,"consul/service-identity/template",[],[["@nspace","@partition","@name"],[[34,22],[34,13],[34,1,["Name"]]]],null]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[6]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,6],[[30,[36,15],[[35,1,["template"]],"node-identity"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"code-editor",[],[["@readonly","@name","@syntax","@oninput","@namedBlocksInfo"],[true,[30,[36,19],[[35,0],"[Rules]"],null],"hcl",[30,[36,2],[[32,0],"change",[30,[36,19],[[35,0],"[Rules]"],null]],null],[30,[36,20],null,[["label","content"],[0,0]]]]],[["default"],[{"statements":[[6,[37,6],[[30,[36,21],[[32,5],"label"],null]],null,[["default","else"],[{"statements":[[2,"\\n Rules "],[10,"a"],[15,6,[31,[[30,[36,18],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[2,"(HCL Format)"],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,6],[[30,[36,21],[[32,5],"content"],null]],null,[["default"],[{"statements":[[8,"consul/node-identity/template",[],[["@name","@partition"],[[34,1,["Name"]],[34,13]]],null]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[5]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"code-editor",[],[["@syntax","@class","@name","@value","@onkeyup","@namedBlocksInfo"],["hcl",[30,[36,6],[[35,1,["error","Rules"]],"error"],null],[30,[36,19],[[35,0],"[Rules]"],null],[34,1,["Rules"]],[30,[36,2],[[32,0],"change",[30,[36,19],[[35,0],"[Rules]"],null]],null],[30,[36,20],null,[["label"],[0]]]]],[["default"],[{"statements":[[6,[37,6],[[30,[36,21],[[32,4],"label"],null]],null,[["default"],[{"statements":[[2,"\\n Rules "],[10,"a"],[15,6,[31,[[30,[36,18],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[2,"(HCL Format)"],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[4]}]]],[2,"\\n"],[6,[37,6],[[35,1,["error","Rules"]]],null,[["default"],[{"statements":[[2," "],[10,"strong"],[12],[1,[35,1,["error","Rules","validation"]]],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[6,[37,6],[[30,[36,15],[[35,1,["template"]],"node-identity"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,8],["/*/*/*/datacenters"],null],[30,[36,2],[[32,0],[30,[36,9],[[35,3]],null]],[["value"],["data"]]]]],null],[2,"\\n "],[10,"label"],[14,0,"type-select"],[12],[2,"\\n "],[10,"span"],[12],[2,"Datacenter"],[13],[2,"\\n "],[8,"power-select",[],[["@options","@searchField","@selected","@searchPlaceholder","@onChange"],[[30,[36,16],["Name",[35,3]],null],"Name",[30,[36,14],[[35,1,["Datacenter"]],[35,17]],null],"Type a datacenter name",[30,[36,2],[[32,0],"change","Datacenter"],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[32,3]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,6],[[30,[36,15],[[30,[36,14],[[35,13],"default"],null],"default"],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"type-toggle"],[12],[2,"\\n "],[10,"span"],[12],[2,"Valid datacenters"],[13],[2,"\\n "],[10,"label"],[12],[2,"\\n "],[10,"input"],[15,3,[31,[[34,0],"[isScoped]"]]],[15,"checked",[30,[36,6],[[30,[36,5],[[35,12]],null],"checked"],null]],[15,"onchange",[30,[36,2],[[32,0],"change"],null]],[14,4,"checkbox"],[12],[13],[2,"\\n "],[10,"span"],[12],[2,"All"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,6],[[35,12]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,8],["/*/*/*/datacenters"],null],[30,[36,2],[[32,0],[30,[36,9],[[35,3]],null]],[["value"],["data"]]]]],null],[2,"\\n\\n "],[10,"div"],[14,0,"checkbox-group"],[14,"role","group"],[12],[2,"\\n"],[6,[37,11],[[30,[36,10],[[30,[36,10],[[35,3]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[14,0,"type-checkbox"],[12],[2,"\\n "],[10,"input"],[15,3,[31,[[34,0],"[Datacenters]"]]],[15,2,[32,2,["Name"]]],[15,"checked",[30,[36,6],[[30,[36,7],[[32,2,["Name"]],[35,1,["Datacenters"]]],null],"checked"],null]],[15,"onchange",[30,[36,2],[[32,0],"change"],null]],[14,4,"checkbox"],[12],[13],[2,"\\n "],[10,"span"],[12],[1,[32,2,["Name"]]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]],[6,[37,11],[[30,[36,10],[[30,[36,10],[[35,1,["Datacenters"]]],null]],null]],null,[["default"],[{"statements":[[6,[37,6],[[30,[36,5],[[30,[36,4],["Name",[32,1],[35,3]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[14,0,"type-checkbox"],[12],[2,"\\n "],[10,"input"],[15,3,[31,[[34,0],"[Datacenters]"]]],[15,2,[32,1]],[14,"checked","checked"],[15,"onchange",[30,[36,2],[[32,0],"change"],null]],[14,4,"checkbox"],[12],[13],[2,"\\n "],[10,"span"],[12],[1,[32,1]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]],[2," "],[13],[2,"\\n\\n\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[6,[37,6],[[30,[36,15],[[35,1,["template"]],""],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[14,0,"type-text"],[12],[2,"\\n "],[10,"span"],[12],[2,"Description (Optional)"],[13],[2,"\\n "],[10,"textarea"],[15,3,[31,[[34,0],"[Description]"]]],[15,2,[34,1,["Description"]]],[15,"oninput",[30,[36,2],[[32,0],"change"],null]],[12],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["name","item","action","datacenters","find-by","not","if","contains","uri","mut","-track-array","each","isScoped","partition","or","eq","map-by","dc","env","concat","hash","-is-named-block-invocation","nspace","changeset-set","optional","templates","allowIdentity","can","yield-slot","and"]}',meta:{moduleName:"consul-ui/components/policy-form/index.hbs"}}) -var r=Ember._setComponentTemplate(n,t.default.extend({type:"policy",name:"policy",allowIdentity:!0,classNames:["policy-form"],isScoped:!1,init:function(){this._super(...arguments),Ember.set(this,"isScoped",Ember.get(this,"item.Datacenters.length")>0),this.templates=[{name:"Policy",template:""},{name:"Service Identity",template:"service-identity"},{name:"Node Identity",template:"node-identity"}]},actions:{change:function(e){try{this._super(...arguments)}catch(t){const e=this.isScoped -switch(t.target.name){case"policy[isScoped]":e?(Ember.set(this,"previousDatacenters",Ember.get(this.item,"Datacenters")),Ember.set(this.item,"Datacenters",null)):(Ember.set(this.item,"Datacenters",this.previousDatacenters),Ember.set(this,"previousDatacenters",null)),Ember.set(this,"isScoped",!e) -break -default:this.onerror(t)}this.onchange({target:this.form})}}}})) -e.default=r})),define("consul-ui/components/policy-selector/index",["exports","consul-ui/components/child-selector/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"CuBwNJCz",block:'{"symbols":["item","index","execute","cancel","message","confirm","__arg0","__arg0","__arg0","option","modal","close","&default","&attrs"],"statements":[[8,"child-selector",[[17,14]],[["@disabled","@repo","@dc","@partition","@nspace","@type","@placeholder","@items"],[[34,24],[34,25],[34,13],[34,8],[34,10],"policy","Search for policy",[34,0]]],[["default"],[{"statements":[[2,"\\n "],[18,13,null],[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Apply an existing policy\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["create"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,26],null,[["name"],["trigger"]],[["default","else"],[{"statements":[[2," "],[18,13,null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"label"],[24,0,"type-dialog"],[4,[38,18],["click",[30,[36,17],[[32,0,["modal","open"]]],null]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Create new policy"],[13],[2,"\\n "],[13],[2,"\\n"],[2," "],[8,"modal-dialog",[[24,1,"new-policy"]],[["@onopen","@aria"],[[30,[36,1],[[32,0],"open"],null],[30,[36,5],null,[["label"],["New Policy"]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"modal",[32,11]]],null],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"New Policy"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[8,"policy-form",[],[["@form","@nspace","@partition","@dc","@allowServiceIdentity"],[[34,19],[34,10],[34,8],[34,13],[34,20]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"button"],[15,"onclick",[30,[36,23],[[32,0,["save"]],[35,22],[35,0],[30,[36,21],[[30,[36,1],[[32,0],[32,12]],null],[30,[36,1],[[32,0],"reset"],null]],null]],null]],[15,"disabled",[30,[36,7],[[30,[36,4],[[35,22,["isSaving"]],[35,22,["isPristine"]],[35,22,["isInvalid"]]],null],"disabled"],null]],[14,4,"submit"],[12],[2,"\\n"],[6,[37,7],[[35,22,["isSaving"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"progress indeterminate"],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"span"],[12],[2,"Create and apply"],[13],[2,"\\n "],[13],[2,"\\n "],[11,"button"],[16,"disabled",[30,[36,7],[[35,22,["isSaving"]],"disabled"],null]],[24,4,"reset"],[4,[38,1],[[32,0],[30,[36,21],[[30,[36,1],[[32,0],[32,12]],null],[30,[36,1],[[32,0],"reset"],null]],null]],null],[12],[2,"Cancel"],[13],[2,"\\n "]],"parameters":[12]}]]],[2,"\\n "]],"parameters":[11]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["option"]],[["default"],[{"statements":[[2,"\\n "],[1,[32,10,["Name"]]],[2,"\\n "]],"parameters":[10]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["set"]],[["default"],[{"statements":[[2,"\\n "],[8,"tabular-details",[],[["@onchange","@items"],[[30,[36,1],[[32,0],"open"],null],[30,[36,27],["CreateTime:desc","Name:asc",[35,0]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"th"],[12],[2,"Name"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["row"]],[["default"],[{"statements":[[2,"\\n "],[10,"td"],[15,0,[30,[36,28],[[32,1]],null]],[12],[2,"\\n"],[6,[37,7],[[32,1,["ID"]]],null,[["default","else"],[{"statements":[[2," "],[10,"a"],[15,6,[30,[36,16],["dc.acls.policies.edit",[32,1,["ID"]]],null]],[12],[1,[32,1,["Name"]]],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"a"],[15,3,[32,1,["Name"]]],[12],[1,[32,1,["Name"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,7],[[30,[36,9],[[32,1,["template"]],""],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange","@loading"],[[30,[36,14],["/${partition}/${nspace}/${dc}/policy/${id}",[30,[36,5],null,[["partition","nspace","dc","id"],[[35,8],[35,10],[35,13],[32,1,["ID"]]]]]],null],[30,[36,1],[[32,0],[30,[36,15],[[35,3]],null]],[["value"],["data"]]],"lazy"]],null],[2,"\\n"]],"parameters":[]}]]],[6,[37,7],[[30,[36,9],[[32,1,["template"]],"node-identity"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Datacenter:"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["Datacenter"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Datacenters:"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,12],[", ",[30,[36,11],[[30,[36,4],[[35,3],[32,1]],null]],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"label"],[14,0,"type-text"],[12],[2,"\\n"],[6,[37,7],[[30,[36,9],[[32,1,["template"]],"service-identity"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"code-editor",[],[["@syntax","@readonly","@namedBlocksInfo"],["hcl",true,[30,[36,5],null,[["label","content"],[0,0]]]]],[["default"],[{"statements":[[6,[37,7],[[30,[36,6],[[32,9],"label"],null]],null,[["default","else"],[{"statements":[[2,"\\n Rules "],[10,"a"],[15,6,[31,[[30,[36,2],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[2,"(HCL Format)"],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,7],[[30,[36,6],[[32,9],"content"],null]],null,[["default"],[{"statements":[[2,"\\n "],[8,"consul/service-identity/template",[],[["@nspace","@partition","@name"],[[34,10],[34,8],[32,1,["Name"]]]],null],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,7],[[30,[36,9],[[32,1,["template"]],"node-identity"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"code-editor",[],[["@syntax","@readonly","@namedBlocksInfo"],["hcl",true,[30,[36,5],null,[["label","content"],[0,0]]]]],[["default"],[{"statements":[[6,[37,7],[[30,[36,6],[[32,8],"label"],null]],null,[["default","else"],[{"statements":[[2,"\\n Rules "],[10,"a"],[15,6,[31,[[30,[36,2],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[2,"(HCL Format)"],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,7],[[30,[36,6],[[32,8],"content"],null]],null,[["default"],[{"statements":[[2,"\\n "],[8,"consul/node-identity/template",[],[["@name","@partition"],[[32,1,["Name"]],[34,8]]],null],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[8]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"code-editor",[],[["@syntax","@readonly","@value","@namedBlocksInfo"],["hcl",true,[30,[36,4],[[35,3,["Rules"]],[32,1,["Rules"]]],null],[30,[36,5],null,[["label"],[0]]]]],[["default"],[{"statements":[[6,[37,7],[[30,[36,6],[[32,7],"label"],null]],null,[["default"],[{"statements":[[2,"\\n Rules "],[10,"a"],[15,6,[31,[[30,[36,2],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[2,"(HCL Format)"],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[7]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[6,[37,7],[[30,[36,29],[[35,24]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[12],[2,"\\n "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to remove this policy from this token?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"type-delete"],[24,4,"button"],[4,[38,1],[[32,0],[32,6],"remove",[32,1],[35,0]],null],[12],[2,"Remove"],[13],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[32,5]],[2,"\\n "],[13],[2,"\\n\\n "],[11,"button"],[24,0,"type-delete"],[24,4,"button"],[4,[38,1],[[32,0],[32,3]],null],[12],[2,"Confirm remove"],[13],[2,"\\n "],[11,"button"],[24,0,"type-cancel"],[24,4,"button"],[4,[38,1],[[32,0],[32,4]],null],[12],[2,"Cancel"],[13],[2,"\\n "]],"parameters":[3,4,5]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1,2]}]]],[2,"\\n\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"hasEval":false,"upvars":["items","action","env","loadedItem","or","hash","-is-named-block-invocation","if","partition","eq","nspace","policy/datacenters","join","dc","uri","mut","href-to","optional","on","form","allowServiceIdentity","queue","item","perform","disabled","repo","yield-slot","sort-by","policy/typeof","not"]}',meta:{moduleName:"consul-ui/components/policy-selector/index.hbs"}}) -var r=Ember._setComponentTemplate(n,t.default.extend({repo:Ember.inject.service("repository/policy"),name:"policy",type:"policy",allowIdentity:!0,classNames:["policy-selector"],init:function(){this._super(...arguments) -const e=this.source -e&&this._listeners.add(e,{save:e=>{this.save.perform(...e.data)}})},reset:function(e){this._super(...arguments),Ember.set(this,"isScoped",!1)},refreshCodeEditor:function(e,t){this.dom.component(".code-editor",t).didAppear()},error:function(e){const t=this.item,n=e.error -if(void 0===n.errors)throw n -{const e=n.errors[0] -let r="Rules",a=e.detail -switch(!0){case 0===a.indexOf("Failed to parse ACL rules"):case 0===a.indexOf("Invalid service policy"):r="Rules",a=e.detail -break -case 0===a.indexOf("Invalid Policy: A Policy with Name"):r="Name",a=a.substr("Invalid Policy: A Policy with Name".indexOf(":")+1)}r&&t.addError(r,a)}},actions:{open:function(e){this.refreshCodeEditor(e,e.target.parentElement)}}})) -e.default=r})),define("consul-ui/components/popover-menu/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"sMDVsgDS",block:'{"symbols":["change","keypress","keypressClick","aria","components","api","menu","sub","toggle","&default","&attrs"],"statements":[[18,10,null],[2,"\\n"],[11,"div"],[24,0,"popover-menu"],[17,11],[12],[2,"\\n "],[8,"aria-menu",[],[["@keyboardAccess"],[[34,4]]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,16],[[30,[36,15],null,[["MenuItem","MenuSeparator"],[[30,[36,17],["popover-menu/menu-item"],[["menu"],[[30,[36,15],null,[["addSubmenu","removeSubmenu","confirm","clickTrigger","keypressClick"],[[30,[36,6],[[32,0],"addSubmenu"],null],[30,[36,6],[[32,0],"removeSubmenu"],null],[30,[36,2],["popover-menu-",[35,1],"-"],null],[32,0,["toggle","click"]],[32,3]]]]]]],[30,[36,17],["popover-menu/menu-separator"],null]]]]],null,[["default"],[{"statements":[[6,[37,16],[[30,[36,15],null,[["toggle"],[[32,0,["toggle","click"]]]]]],null,[["default"],[{"statements":[[2,"\\n "],[8,"toggle-button",[],[["@checked","@onchange"],[[30,[36,5],[[35,4],[32,4,["expanded"]],[35,3]],null],[30,[36,7],[[32,1],[30,[36,6],[[32,0],"change"],null]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"toggle",[32,9]]],null],[2,"\\n "],[10,"button"],[14,"aria-haspopup","menu"],[15,"onkeydown",[32,2]],[15,"onclick",[32,0,["toggle","click"]]],[15,1,[32,4,["labelledBy"]]],[15,"aria-controls",[32,4,["controls"]]],[14,4,"button"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["trigger"]],[["default"],[{"statements":[[2,"\\n "],[18,10,[[32,5],[32,6]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n\\n "],[8,"menu-panel",[[16,1,[32,4,["controls"]]],[16,"aria-labelledby",[32,4,["labelledBy"]]],[16,"aria-expanded",[32,4,["expanded"]]]],[["@position"],[[34,8]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"menu",[32,7]]],null],[2,"\\n "],[8,"block-slot",[],[["@name"],["controls"]],[["default"],[{"statements":[[2,"\\n "],[10,"input"],[15,1,[30,[36,2],["popover-menu-",[35,1],"-"],null]],[14,4,"checkbox"],[12],[13],[2,"\\n"],[6,[37,11],[[30,[36,10],[[30,[36,10],[[35,9]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"input"],[15,1,[30,[36,2],["popover-menu-",[35,1],"-",[32,8]],null]],[15,"onchange",[32,7,["change"]]],[14,4,"checkbox"],[12],[13],[2,"\\n"]],"parameters":[8]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"],[6,[37,5],[[35,12]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[18,10,[[32,5],[32,6]]],[2,"\\n "],[6,[37,0],null,[["name"],["header"]],[["default","else"],[{"statements":[],"parameters":[]},{"statements":[],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"block-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n "],[8,"yield-slot",[],[["@name","@params"],["menu",[30,[36,14],[[30,[36,2],["popover-menu-",[35,1],"-"],null],[35,13],[32,3],[32,0,["toggle","click"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[18,10,[[32,5],[32,6]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n\\n"]],"parameters":[6]}]]]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[1,2,3,4]}]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["yield-slot","guid","concat","expanded","keyboardAccess","if","action","queue","position","submenus","-track-array","each","hasHeader","send","block-params","hash","let","component"]}',meta:{moduleName:"consul-ui/components/popover-menu/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:"",dom:Ember.inject.service("dom"),expanded:!1,keyboardAccess:!0,onchange:function(){},position:"",init:function(){this._super(...arguments),this.guid=this.dom.guid(this),this.submenus=[]},willRender:function(){Ember.set(this,"hasHeader",this._isRegistered("header"))},actions:{addSubmenu:function(e){Ember.set(this,"submenus",this.submenus.concat(e))},removeSubmenu:function(e){const t=this.submenus.indexOf(e);-1!==t&&(this.submenus.splice(t,1),Ember.set(this,"submenus",this.submenus))},change:function(e){e.target.checked||[...this.dom.elements(`[id^=popover-menu-${this.guid}]`)].forEach((function(e){e.checked=!1})),this.onchange(e)},send:function(){this.sendAction(...arguments)}}})) -e.default=r})),define("consul-ui/components/popover-menu/menu-item/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"zKK0lEHV",block:'{"symbols":["external","&default","&attrs"],"statements":[[18,2,null],[2,"\\n"],[11,"li"],[24,"role","none"],[17,3],[12],[2,"\\n"],[6,[37,1],[[35,15]],null,[["default","else"],[{"statements":[[2," "],[10,"label"],[15,"for",[30,[36,11],[[35,3,["confirm"]],[35,10]],null]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[34,3,["keypressClick"]]],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[18,2,null]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,"role","menu"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name","@params"],["confirmation",[30,[36,14],[[30,[36,13],["confirmation-alert"],[["onclick","name"],[[30,[36,6],[[30,[36,4],[[32,0],[35,3,["clickTrigger"]]],null],[30,[36,4],[[32,0],[35,12]],null]],null],[30,[36,11],[[35,3,["confirm"]],[35,10]],null]]]]],null]]],[["default"],[{"statements":[[18,2,null]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[35,7]],null,[["default","else"],[{"statements":[[6,[37,9],[[30,[36,8],[[35,7],"://"],null]],null,[["default"],[{"statements":[[2," "],[10,"a"],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onclick",[30,[36,4],[[32,0],[35,3,["clickTrigger"]]],null]],[15,6,[34,7]],[15,"target",[30,[36,1],[[32,1],"_blank"],null]],[15,"rel",[30,[36,1],[[32,1],"noopener noreferrer"],null]],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n "],[18,2,null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]]],"parameters":[]},{"statements":[[10,"button"],[14,"role","menuitem"],[15,"aria-selected",[30,[36,1],[[35,0],"true"],null]],[14,"tabindex","-1"],[15,"onclick",[30,[36,6],[[30,[36,4],[[32,0],[30,[36,5],[[32,0,["onclick"]],[30,[36,2],null,null]],null]],null],[30,[36,4],[[32,0],[30,[36,1],[[32,0,["close"]],[35,3,["clickTrigger"]],[30,[36,2],null,null]],null]],null]],null]],[14,4,"button"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n "],[18,2,null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["selected","if","noop","menu","action","or","queue","href","string-includes","let","guid","concat","onclick","component","block-params","hasConfirmation"]}',meta:{moduleName:"consul-ui/components/popover-menu/menu-item/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:"",dom:Ember.inject.service("dom"),init:function(){this._super(...arguments),this.guid=this.dom.guid(this)},didInsertElement:function(){this._super(...arguments),this.menu.addSubmenu(this.guid)},didDestroyElement:function(){this._super(...arguments),this.menu.removeSubmenu(this.guid)},willRender:function(){this._super(...arguments),Ember.set(this,"hasConfirmation",this._isRegistered("confirmation"))}})) -e.default=r})),define("consul-ui/components/popover-menu/menu-separator/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"RS9Jf7fe",block:'{"symbols":["&default"],"statements":[[18,1,null],[2,"\\n"],[10,"li"],[14,"role","separator"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[18,1,null]],"parameters":[]}]]],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/popover-menu/menu-separator/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:""})) -e.default=r})),define("consul-ui/components/popover-select/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"nf0dRHsn",block:'{"symbols":["components","menu","Optgroup","Option","&default","&attrs"],"statements":[[8,"popover-menu",[[24,0,"popover-select"],[17,6]],[["@position"],[[30,[36,2],[[35,1],"left"],null]]],[["default"],[{"statements":[[2,"\\n "],[18,5,null],[2,"\\n"],[6,[37,9],[[30,[36,8],["popover-select/optgroup"],[["components"],[[32,1]]]],[30,[36,8],["popover-select/option"],[["select","components","onclick"],[[32,0],[32,1],[30,[36,7],[[30,[36,6],[[32,0],"click"],null],[30,[36,5],[[35,4],[30,[36,3],null,null],[32,2,["toggle"]]],null]],null]]]]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["trigger"]],[["default"],[{"statements":[[2,"\\n "],[8,"yield-slot",[],[["@name"],["selected"]],[["default"],[{"statements":[[2,"\\n "],[18,5,[[30,[36,0],null,[["Optgroup","Option"],[[32,3],[32,4]]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n "],[8,"yield-slot",[],[["@name"],["options"]],[["default"],[{"statements":[[2,"\\n "],[18,5,[[30,[36,0],null,[["Optgroup","Option"],[[32,3],[32,4]]]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4]}]]]],"parameters":[1,2]}]]],[2,"\\n"]],"hasEval":false,"upvars":["hash","position","or","noop","multiple","if","action","pipe","component","let"]}',meta:{moduleName:"consul-ui/components/popover-select/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:"",dom:Ember.inject.service("dom"),multiple:!1,required:!1,onchange:function(){},addOption:function(e){void 0===this._options&&(this._options=new Set),this._options.add(e)},removeOption:function(e){this._options.delete(e)},actions:{click:function(e,t){if(this.multiple){if(e.selected&&this.required){if(![...this._options].find(t=>t!==e&&t.selected))return t}}else{if(e.selected&&this.required)return t;[...this._options].filter(t=>t!==e).forEach(e=>{e.selected=!1})}return e.selected=!e.selected,this.onchange(this.dom.setEventTargetProperties(t,{selected:()=>e.args.value,selectedItems:()=>[...this._options].filter(e=>e.selected).map(e=>e.args.value).join(",")})),t}}})) -e.default=r})),define("consul-ui/components/popover-select/optgroup/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"tEmaYnIW",block:'{"symbols":["MenuSeparator","@label","&default","@components"],"statements":[[6,[37,0],[[32,4,["MenuSeparator"]]],null,[["default"],[{"statements":[[8,[32,1],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n "],[1,[32,2]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[18,3,null],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["let"]}',meta:{moduleName:"consul-ui/components/popover-select/optgroup/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/popover-select/option/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=Ember.HTMLBars.template({id:"n6EznTlk",block:'{"symbols":["MenuItem","&attrs","@onclick","@selected","&default","@components"],"statements":[[6,[37,6],[[32,6,["MenuItem"]]],null,[["default"],[{"statements":[[2," "],[8,[32,1],[[16,0,[30,[36,0],[[32,0,["selected"]],"is-active"],null]],[17,2],[4,[38,2],[[32,0,["connect"]]],null],[4,[38,2],[[30,[36,3],[[32,0],"selected",[32,4]],null]],null],[4,[38,4],[[30,[36,3],[[32,0],"selected",[32,4]],null]],null],[4,[38,5],[[32,0,["disconnect"]]],null]],[["@onclick","@selected"],[[30,[36,1],[[32,0],[32,3],[32,0]],null],[32,0,["selected"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n "],[18,5,null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["if","action","did-insert","set","did-update","will-destroy","let"]}',meta:{moduleName:"consul-ui/components/popover-select/option/index.hbs"}}) -let u=(n=Ember._tracked,r=Ember._action,a=Ember._action,l=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="selected",a=this,(r=s)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}connect(){this.args.select.addOption(this)}disconnect(){this.args.select.removeOption(this)}},s=i(l.prototype,"selected",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i(l.prototype,"connect",[r],Object.getOwnPropertyDescriptor(l.prototype,"connect"),l.prototype),i(l.prototype,"disconnect",[a],Object.getOwnPropertyDescriptor(l.prototype,"disconnect"),l.prototype),l) -e.default=u,Ember._setComponentTemplate(o,u)})),define("consul-ui/components/portal-target",["exports","ember-stargate/components/portal-target"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/portal",["exports","ember-stargate/components/portal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-multiple-with-create",["exports","ember-power-select-with-create/components/power-select-multiple-with-create"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-multiple",["exports","ember-power-select/components/power-select-multiple"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-multiple/trigger",["exports","ember-power-select/components/power-select-multiple/trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-with-create",["exports","ember-power-select-with-create/components/power-select-with-create"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select-with-create/suggested-option",["exports","ember-power-select-with-create/components/power-select-with-create/suggested-option"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select",["exports","ember-power-select/components/power-select"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/before-options",["exports","ember-power-select/components/power-select/before-options"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/no-matches-message",["exports","ember-power-select/components/power-select/no-matches-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/options",["exports","ember-power-select/components/power-select/options"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/placeholder",["exports","ember-power-select/components/power-select/placeholder"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/power-select-group",["exports","ember-power-select/components/power-select/power-select-group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/search-message",["exports","ember-power-select/components/power-select/search-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/power-select/trigger",["exports","ember-power-select/components/power-select/trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/progress/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"i9InYRlc",block:'{"symbols":["&attrs"],"statements":[[11,"div"],[24,0,"progress indeterminate"],[24,"role","progressbar"],[17,1],[12],[13],[2,"\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/progress/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/radio-card/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"Z32bK3Za",block:'{"symbols":["&attrs","&default"],"statements":[[11,"label"],[17,1],[16,0,[31,["radio-card",[30,[36,5],[[35,1]," checked"],null]]]],[12],[2,"\\n "],[10,"div"],[12],[2,"\\n"],[6,[37,5],[[30,[36,6],[[35,4,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[10,"input"],[15,3,[34,0]],[15,2,[34,4]],[15,"checked",[34,1]],[15,"onchange",[30,[36,3],[[32,0],[35,2]],null]],[14,4,"radio"],[12],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"input"],[15,3,[34,0]],[14,2,""],[15,"checked",[34,1]],[15,"onchange",[30,[36,3],[[32,0],[35,2]],null]],[14,4,"radio"],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[18,2,null],[2,"\\n "],[13],[2,"\\n"],[13]],"hasEval":false,"upvars":["name","checked","onchange","action","value","if","gt"]}',meta:{moduleName:"consul-ui/components/radio-card/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:""})) -e.default=n})) -define("consul-ui/components/radio-group/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"VMO7TmR4",block:'{"symbols":["item","_key","_value"],"statements":[[10,"fieldset"],[12],[2,"\\n "],[10,"div"],[14,"role","radiogroup"],[15,1,[31,["radiogroup_",[34,3]]]],[12],[2,"\\n"],[6,[37,12],[[30,[36,11],[[30,[36,11],[[35,10]],null]],null]],null,[["default"],[{"statements":[[6,[37,9],[[30,[36,1],[[30,[36,8],[[32,1,["key"]],[29]],null],[32,1,["key"]],[32,1,["value"]]],null],[30,[36,7],[[32,1,["label"]],[32,1,["value"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[15,"tabindex",[30,[36,1],[[35,0],"0"],null]],[15,"onkeydown",[30,[36,1],[[35,0],[30,[36,2],[[32,0],"keydown"],null]],null]],[15,0,[31,["type-radio value-",[32,2]]]],[12],[2," "],[2,"\\n "],[10,"input"],[15,3,[34,3]],[15,2,[32,2]],[15,"checked",[30,[36,1],[[30,[36,6],[[30,[36,5],[[35,4]],null],[32,2]],null],"checked"],null]],[15,"onchange",[30,[36,2],[[32,0],"change"],null]],[14,4,"radio"],[12],[13],[2,"\\n "],[10,"span"],[12],[1,[32,3]],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2,3]}]]]],"parameters":[1]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["keyboardAccess","if","action","name","value","concat","eq","or","not-eq","let","items","-track-array","each"]}',meta:{moduleName:"consul-ui/components/radio-group/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",keyboardAccess:!1,dom:Ember.inject.service("dom"),init:function(){this._super(...arguments),this.name=this.dom.guid(this)},actions:{keydown:function(e){13===e.keyCode&&e.target.dispatchEvent(new MouseEvent("click"))},change:function(e){this.onchange(this.dom.setEventTargetProperty(e,"value",e=>""===e?void 0:e))}}})) -e.default=n})),define("consul-ui/components/ref/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Component.extend({tagName:"",didReceiveAttrs:function(){Ember.set(this.target,this.name,this.value)}}) -e.default=t})),define("consul-ui/components/role-form/index",["exports","consul-ui/components/form-component/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"YrahCt0J",block:'{"symbols":["&default","&attrs"],"statements":[[18,1,null],[2,"\\n"],[11,"fieldset"],[24,0,"role-form"],[16,"disabled",[30,[36,6],[[30,[36,2],[[30,[36,1],["write role"],[["item"],[[35,0]]]]],null],"disabled"],null]],[17,2],[12],[2,"\\n "],[10,"label"],[15,0,[31,["type-text",[30,[36,6],[[35,0,["error","Name"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Name"],[13],[2,"\\n "],[10,"input"],[15,2,[34,0,["Name"]]],[14,3,"role[Name]"],[14,"autofocus","autofocus"],[15,"oninput",[30,[36,7],[[32,0],"change"],null]],[14,4,"text"],[12],[13],[2,"\\n "],[10,"em"],[12],[2,"\\n Maximum 256 characters. May only include letters (uppercase and/or lowercase) and/or numbers. Must be unique.\\n "],[13],[2,"\\n"],[6,[37,6],[[35,0,["error","Name"]]],null,[["default"],[{"statements":[[2," "],[10,"strong"],[12],[1,[35,0,["error","Name","validation"]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"label"],[14,0,"type-text"],[12],[2,"\\n "],[10,"span"],[12],[2,"Description (Optional)"],[13],[2,"\\n "],[10,"textarea"],[14,3,"role[Description]"],[15,2,[34,0,["Description"]]],[15,"oninput",[30,[36,7],[[32,0],"change"],null]],[12],[13],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"],[10,"fieldset"],[14,1,"policies"],[14,0,"policies"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Policies"],[13],[2,"\\n"],[6,[37,9],null,[["name","params"],["policy",[30,[36,8],[[35,0]],null]]],[["default","else"],[{"statements":[[2," "],[18,1,null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"policy-selector",[],[["@disabled","@dc","@partition","@nspace","@items"],[[30,[36,2],[[30,[36,1],["write role"],[["item"],[[35,0]]]]],null],[34,3],[34,4],[34,5],[34,0,["Policies"]]]],null],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["item","can","not","dc","partition","nspace","if","action","block-params","yield-slot"]}',meta:{moduleName:"consul-ui/components/role-form/index.hbs"}}) -var r=Ember._setComponentTemplate(n,t.default.extend({type:"role",name:"role",classNames:["role-form"]})) -e.default=r})),define("consul-ui/components/role-selector/index",["exports","consul-ui/components/child-selector/index","consul-ui/utils/dom/event-source"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r=Ember.HTMLBars.template({id:"shRBjLTM",block:'{"symbols":["item","index","index","change","checked","confirm","send","keypressClick","__arg0","__arg1","Actions","option","modal","close"],"statements":[[8,"modal-dialog",[[24,0,"role-selector"],[24,1,"new-role"]],[["@onclose","@aria"],[[30,[36,1],[[32,0],[30,[36,10],[[35,9]],null],"role"],null],[30,[36,6],null,[["label"],[[30,[36,5],[[30,[36,15],[[35,9],"role"],null],"New Role","New Policy"],null]]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"modal",[32,13]]],null],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,15],[[35,9],"role"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"h2"],[12],[2,"New Role"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"h2"],[12],[2,"New Policy"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n\\n "],[10,"input"],[15,1,[31,[[34,16],"_state_role"]]],[15,3,[31,[[34,16],"[state]"]]],[14,2,"role"],[15,"checked",[30,[36,5],[[30,[36,15],[[35,9],"role"],null],"checked"],null]],[15,"onchange",[30,[36,1],[[32,0],"change"],null]],[14,4,"radio"],[12],[13],[2,"\\n "],[8,"role-form",[],[["@form","@dc","@nspace","@partition"],[[34,17],[34,18],[34,19],[34,20]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["policy"]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"policy-selector",[],[["@source","@dc","@partition","@nspace","@items"],[[34,21],[34,18],[34,20],[34,19],[34,11,["Policies"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["trigger"]],[["default"],[{"statements":[[2,"\\n "],[10,"label"],[15,"for",[31,[[34,16],"_state_policy"]]],[14,0,"type-dialog"],[12],[2,"\\n "],[10,"span"],[12],[2,"Create new policy"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[10,"input"],[15,1,[31,[[34,16],"_state_policy"]]],[15,3,[31,[[34,16],"[state]"]]],[14,2,"policy"],[15,"checked",[30,[36,5],[[30,[36,15],[[35,9],"policy"],null],"checked"],null]],[15,"onchange",[30,[36,1],[[32,0],"change"],null]],[14,4,"radio"],[12],[13],[2,"\\n "],[8,"policy-form",[],[["@name","@form","@dc","@nspace","@partition"],["role[policy]",[34,22],[34,18],[34,19],[34,20]]],null],[2,"\\n\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,5],[[30,[36,15],[[35,9],"role"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"button"],[15,"onclick",[30,[36,14],[[32,0,["save"]],[35,11],[35,0],[30,[36,13],[[30,[36,1],[[32,0],[32,14]],null],[30,[36,1],[[32,0],"reset"],null]],null]],null]],[15,"disabled",[30,[36,5],[[30,[36,8],[[35,11,["isSaving"]],[35,11,["isPristine"]],[35,11,["isInvalid"]]],null],"disabled"],null]],[14,4,"submit"],[12],[2,"\\n"],[6,[37,5],[[35,11,["isSaving"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"progress indeterminate"],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"span"],[12],[2,"Create and apply"],[13],[2,"\\n "],[13],[2,"\\n "],[11,"button"],[16,"disabled",[30,[36,5],[[35,11,["isSaving"]],"disabled"],null]],[24,4,"reset"],[4,[38,1],[[32,0],[30,[36,13],[[30,[36,1],[[32,0],[32,14]],null],[30,[36,1],[[32,0],"reset"],null]],null]],null],[12],[2,"Cancel"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"button"],[16,"disabled",[30,[36,5],[[30,[36,8],[[35,7,["isSaving"]],[35,7,["isPristine"]],[35,7,["isInvalid"]]],null],"disabled"],null]],[24,4,"submit"],[4,[38,1],[[32,0],"dispatch","save",[30,[36,12],[[35,7],[35,11,["Policies"]],[30,[36,1],[[32,0],[30,[36,10],[[35,9]],null],"role"],null]],null]],null],[12],[2,"\\n"],[6,[37,5],[[35,7,["isSaving"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"progress indeterminate"],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"span"],[12],[2,"Create and apply"],[13],[2,"\\n "],[13],[2,"\\n "],[11,"button"],[16,"disabled",[30,[36,5],[[35,7,["isSaving"]],"disabled"],null]],[24,4,"reset"],[4,[38,1],[[32,0],[30,[36,10],[[35,9]],null],"role"],null],[12],[2,"Cancel"],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n"]],"parameters":[13]}]]],[2,"\\n\\n"],[8,"child-selector",[],[["@disabled","@repo","@dc","@partition","@nspace","@type","@placeholder","@items"],[[34,23],[34,24],[34,18],[34,20],[34,19],"role","Search for role",[34,0]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["label"]],[["default"],[{"statements":[[2,"\\n Apply an existing role\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["create"]],[["default"],[{"statements":[[2,"\\n "],[11,"label"],[24,0,"type-dialog"],[4,[38,2],["click",[30,[36,25],[[32,0,["modal","open"]]],null]],null],[12],[2,"\\n "],[10,"span"],[12],[2,"Create new role"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["option"]],[["default"],[{"statements":[[2,"\\n "],[1,[32,12,["Name"]]],[2,"\\n "]],"parameters":[12]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["set"]],[["default"],[{"statements":[[2,"\\n "],[8,"tabular-collection",[],[["@rows","@items"],[5,[30,[36,26],["CreateTime:desc","Name:asc",[35,0]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"th"],[12],[2,"Name"],[13],[2,"\\n "],[10,"th"],[12],[2,"Description"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["row"]],[["default"],[{"statements":[[2,"\\n "],[10,"td"],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,27],["dc.acls.roles.edit",[32,1,["ID"]]],null]],[12],[1,[32,1,["Name"]]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"td"],[12],[2,"\\n "],[1,[32,1,["Description"]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,"popover-menu",[],[["@expanded","@onchange","@keyboardAccess"],[[30,[36,5],[[30,[36,15],[[32,5],[32,3]],null],true,false],null],[30,[36,1],[[32,0],[32,4],[32,3]],null],false]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["trigger"]],[["default"],[{"statements":[[2,"\\n More\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["menu"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,"role","none"],[12],[2,"\\n "],[10,"a"],[14,"role","menuitem"],[14,"tabindex","-1"],[15,6,[30,[36,27],["dc.acls.roles.edit",[32,1,["ID"]]],null]],[12],[2,"\\n"],[6,[37,5],[[30,[36,28],["edit role"],[["item"],[[32,1]]]]],null,[["default","else"],[{"statements":[[2," Edit\\n"]],"parameters":[]},{"statements":[[2," View\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,5],[[30,[36,29],[[35,23]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[14,"role","none"],[14,0,"dangerous"],[12],[2,"\\n "],[10,"label"],[15,"for",[32,6]],[14,"role","menuitem"],[14,"tabindex","-1"],[15,"onkeypress",[32,8]],[12],[2,"Remove"],[13],[2,"\\n "],[10,"div"],[14,"role","menu"],[12],[2,"\\n "],[8,"informed-action",[[24,0,"warning"]],[["@namedBlocksInfo"],[[30,[36,6],null,[["header","body","actions"],[0,0,1]]]]],[["default"],[{"statements":[[6,[37,5],[[30,[36,4],[[32,9],"header"],null]],null,[["default","else"],[{"statements":[[2,"\\n Confirm Remove\\n "]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,4],[[32,9],"body"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n Are you sure you want to remove this role?\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,4],[[32,9],"actions"],null]],null,[["default"],[{"statements":[[6,[37,3],[[32,10]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,11,["Action"]],[[24,0,"dangerous"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[[24,"tabindex","-1"],[4,[38,2],["click",[30,[36,1],[[32,0],[32,7],"remove",[32,1],[35,0]],null]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Remove\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,11,["Action"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"action",[],[["@for"],[[32,6]]],[["default"],[{"statements":[[2,"\\n Cancel\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[11]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[9,10]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[6,7,8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3,4,5]}]]],[2,"\\n "]],"parameters":[1,2]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"hasEval":false,"upvars":["items","action","on","let","-is-named-block-invocation","if","hash","policy","or","state","mut","item","array","queue","perform","eq","name","form","dc","nspace","partition","source","policyForm","disabled","repo","optional","sort-by","href-to","can","not"]}',meta:{moduleName:"consul-ui/components/role-selector/index.hbs"}}) -var a=Ember._setComponentTemplate(r,t.default.extend({repo:Ember.inject.service("repository/role"),dom:Ember.inject.service("dom"),name:"role",type:"role",classNames:["role-selector"],state:"role",policy:Ember.computed.alias("policyForm.data"),init:function(){this._super(...arguments),this.policyForm=this.formContainer.form("policy"),this.source=new n.CallableEventSource},actions:{reset:function(e){this._super(...arguments),this.policyForm.clear({Datacenter:this.dc})},dispatch:function(e,t){this.source.dispatchEvent({type:e,data:t})},change:function(){const e=this.dom.normalizeEvent(...arguments),t=e.target -switch(t.name){case"role[state]":Ember.set(this,"state",t.value),"policy"===t.value&&this.dom.component(".code-editor",t.nextElementSibling).didAppear() -break -default:this._super(...arguments)}}}})) -e.default=a})),define("consul-ui/components/route/announcer/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"TLOSA7kE",block:'{"symbols":["@separator","@title"],"statements":[[1,[30,[36,1],[[32,2]],[["separator"],[[30,[36,0],[[32,1]," - "],null]]]]],[2,"\\n"],[8,"portal-target",[],[["@name"],["route-announcer"]],null],[2,"\\n\\n"]],"hasEval":false,"upvars":["or","page-title"]}',meta:{moduleName:"consul-ui/components/route/announcer/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/route/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b -function h(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function v(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const y=Ember.HTMLBars.template({id:"uH9p2fDA",block:'{"symbols":["&default"],"statements":[[1,[30,[36,0],[[32,0,["connect"]]],null]],[2,"\\n"],[1,[30,[36,1],[[32,0,["disconnect"]]],null]],[2,"\\n"],[18,1,[[30,[36,3],null,[["model","params","currentName","refresh","t","Title","Announcer"],[[32,0,["model"]],[32,0,["params"]],[32,0,["router","currentRoute","name"]],[32,0,["refresh"]],[32,0,["t"]],[30,[36,2],["route/title"],null],[30,[36,2],["route/announcer"],null]]]]]]],"hasEval":false,"upvars":["did-insert","will-destroy","component","hash"]}',meta:{moduleName:"consul-ui/components/route/index.hbs"}}),g=/\${([A-Za-z.0-9_-]+)}/g -let O=(n=Ember.inject.service("routlet"),r=Ember.inject.service("router"),a=Ember.inject.service("intl"),l=Ember.inject.service("encoder"),s=Ember._tracked,i=Ember._action,o=Ember._action,u=Ember._action,c=class extends t.default{constructor(){super(...arguments),h(this,"routlet",d,this),h(this,"router",m,this),h(this,"intl",p,this),h(this,"encoder",f,this),h(this,"_model",b,this),this.intlKey=this.encoder.createRegExpEncoder(g,e=>e)}get params(){return this.routlet.paramsFor(this.args.name)}get model(){if(this._model)return this._model -if(this.args.name){const e=this.routlet.outletFor(this.args.name) -return this.routlet.modelFor(e.name)}}t(e,t){return e.includes("${")&&(e=this.intlKey(e,t)),this.intl.t(`routes.${this.args.name}.${e}`,t)}connect(){this.routlet.addRoute(this.args.name,this)}disconnect(){this.routlet.removeRoute(this.args.name,this)}},d=v(c.prototype,"routlet",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=v(c.prototype,"router",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=v(c.prototype,"intl",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=v(c.prototype,"encoder",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=v(c.prototype,"_model",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v(c.prototype,"t",[i],Object.getOwnPropertyDescriptor(c.prototype,"t"),c.prototype),v(c.prototype,"connect",[o],Object.getOwnPropertyDescriptor(c.prototype,"connect"),c.prototype),v(c.prototype,"disconnect",[u],Object.getOwnPropertyDescriptor(c.prototype,"disconnect"),c.prototype),c) -e.default=O,Ember._setComponentTemplate(y,O)})),define("consul-ui/components/route/title/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"W83dDaVI",block:'{"symbols":["@title","@separator","@render","&attrs"],"statements":[[1,[30,[36,0],[[32,1]],[["separator"],[[32,2]]]]],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,3],false],null]],null,[["default"],[{"statements":[[1,[32,1]],[2,"\\n"]],"parameters":[]}]]],[8,"portal",[],[["@target"],["route-announcer"]],[["default"],[{"statements":[[2,"\\n"],[11,"div"],[24,0,"route-title"],[17,4],[24,"aria-live","assertive"],[24,"aria-atomic","true"],[12],[2,"\\n"],[2," "],[1,[30,[36,3],["Navigated to ",[32,1]],null]],[2,"\\n"],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"hasEval":false,"upvars":["page-title","not-eq","if","concat"]}',meta:{moduleName:"consul-ui/components/route/title/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/search-bar/index",["exports","@glimmer/component","consul-ui/components/search-bar/utils"],(function(e,t,n){var r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=Ember.HTMLBars.template({id:"zyw10T4p",block:'{"symbols":["filter","@filter","&default","&attrs"],"statements":[[11,"div"],[24,0,"search-bar"],[17,4],[12],[2,"\\n "],[10,"form"],[14,0,"filter-bar"],[12],[2,"\\n "],[10,"div"],[14,0,"search"],[12],[2,"\\n "],[18,3,[[30,[36,6],["search"],null],[30,[36,1],null,[["Search","Select"],[[30,[36,5],["freetext-filter"],null],[30,[36,5],["popover-select"],null]]]]]],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"filters"],[12],[2,"\\n "],[18,3,[[30,[36,6],["filter"],null],[30,[36,1],null,[["Search","Select"],[[30,[36,5],["freetext-filter"],null],[30,[36,5],["popover-select"],null]]]]]],[2,"\\n "],[13],[2,"\\n "],[10,"div"],[14,0,"sort"],[12],[2,"\\n "],[18,3,[[30,[36,6],["sort"],null],[30,[36,1],null,[["Search","Select"],[[30,[36,5],["freetext-filter"],null],[30,[36,5],["popover-select"],null]]]]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,12],[[32,0,["isFiltered"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"search-bar-status"],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[1,[30,[36,8],[[30,[36,7],["component.search-bar.header"],[["default","item"],["common.ui.filtered-by",""]]]],null]],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,10],[[30,[36,9],[[30,[36,9],[[32,0,["filters"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[18,3,[[30,[36,6],["status"],null],[30,[36,1],null,[["RemoveFilter","status"],[[30,[36,5],["search-bar/remove-filter"],[["onclick"],[[30,[36,4],[[32,0],[30,[36,3],[[30,[36,3],[[32,2],[32,1,["key"]]],null],"change"],null],[30,[36,1],null,[["target"],[[30,[36,1],null,[["selectedItems"],[[30,[36,2],[[32,1,["selected"]],","],null]]]]]]]],null]]]],[30,[36,1],null,[["key","value"],[[32,1,["key"]],[30,[36,0],[[32,1,["value"]]],null]]]]]]]]],[2,"\\n"]],"parameters":[1]}]]],[2," "],[10,"li"],[14,0,"remove-all"],[12],[2,"\\n "],[8,"action",[[4,[38,11],["click",[32,0,["removeAllFilters"]]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n Remove filters\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["lowercase","hash","join","get","action","component","-named-block-invocation","t","string-trim","-track-array","each","on","if"]}',meta:{moduleName:"consul-ui/components/search-bar/index.hbs"}}) -let s=(r=Ember._action,a=class extends t.default{get isFiltered(){const e=this.args.filter.searchproperty||{default:[],value:[]} -return(0,n.diff)(e.default,e.value).length>0||Object.entries(this.args.filter).some(([e,t])=>"searchproperty"!==e&&void 0!==t.value)}get filters(){return(0,n.filters)(this.args.filter)}removeAllFilters(){Object.values(this.args.filter).forEach((e,t)=>{setTimeout(()=>e.change(e.default||[]),1*t)})}},i=a.prototype,o="removeAllFilters",u=[r],c=Object.getOwnPropertyDescriptor(a.prototype,"removeAllFilters"),d=a.prototype,m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a) -var i,o,u,c,d,m -e.default=s,Ember._setComponentTemplate(l,s)})),define("consul-ui/components/search-bar/remove-filter/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"qI+OTqbX",block:'{"symbols":["&attrs","@onclick","&default"],"statements":[[10,"li"],[12],[2,"\\n "],[8,"action",[[17,1],[4,[38,0],["click",[32,2]],null]],[[],[]],null],[2,"\\n "],[18,3,null],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["on"]}',meta:{moduleName:"consul-ui/components/search-bar/remove-filter/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/search-bar/utils",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.filters=e.diff=void 0 -const t=(e,t)=>e.filter(e=>!t.includes(e)) -e.diff=t -e.filters=e=>Object.entries(e).filter(([e,n])=>"searchproperty"===e?t(n.default,n.value).length>0:(n.value||[]).length>0).reduce((e,[n,r])=>e.concat(r.value.map(e=>{const a={key:n,value:e} -return a.selected="searchproperty"!==n?t(r.value,[e]):1===r.value.length?r.default:t(r.value,[e]),a})),[])})),define("consul-ui/components/secret-button/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"XcT8OSA5",block:'{"symbols":["&default"],"statements":[[10,"label"],[14,0,"type-reveal"],[12],[2,"\\n "],[10,"input"],[14,4,"checkbox"],[12],[13],[2,"\\n "],[10,"span"],[12],[2,"Reveal"],[13],[2,"\\n "],[10,"em"],[12],[18,1,null],[13],[2,"\\n"],[13]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/secret-button/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({})) -e.default=n})),define("consul-ui/components/shadow-host/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l -function s(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=Ember.HTMLBars.template({id:"U0GA4gT4",block:'{"symbols":["&default"],"statements":[[18,1,[[30,[36,2],null,[["host","root","Template"],[[30,[36,1],[[32,0,["attachShadow"]]],null],[32,0,["shadowRoot"]],[30,[36,0],["shadow-template"],[["shadowRoot"],[[32,0,["shadowRoot"]]]]]]]]]],[2,"\\n"]],"hasEval":false,"upvars":["component","fn","hash"]}',meta:{moduleName:"consul-ui/components/shadow-host/index.hbs"}}) -let o=(n=Ember._tracked,r=Ember._action,a=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="shadowRoot",a=this,(r=l)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}attachShadow(e){this.shadowRoot=e.attachShadow({mode:"open"})}},l=s(a.prototype,"shadowRoot",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"attachShadow",[r],Object.getOwnPropertyDescriptor(a.prototype,"attachShadow"),a.prototype),a) -e.default=o,Ember._setComponentTemplate(i,o)})),define("consul-ui/components/shadow-template/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"SySVt5/r",block:'{"symbols":["@styles","@shadowRoot","&default"],"statements":[[6,[37,1],[[32,2]],null,[["default"],[{"statements":[[6,[37,2],[[32,2]],[["guid","insertBefore"],["%cursor:0%",[29]]],[["default"],[{"statements":[[6,[37,1],[[32,1]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,0],[[32,2],[32,1]],null]],[2,"\\n"]],"parameters":[]}]]],[2," "],[18,3,null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"hasEval":false,"upvars":["adopt-styles","if","in-element"]}',meta:{moduleName:"consul-ui/components/shadow-template/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/state-chart/action/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"vK0LWE3t",block:'{"symbols":["&default"],"statements":[[18,1,null]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/state-chart/action/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",didInsertElement:function(){this._super(...arguments),this.chart.addAction(this.name,(e,t)=>this.exec(e,t))},willDestroy:function(){this._super(...arguments),this.chart.removeAction(this.type)}})) -e.default=n})),define("consul-ui/components/state-chart/guard/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"ajHPMf+f",block:'{"symbols":["&default"],"statements":[[18,1,null]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/state-chart/guard/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({tagName:"",didInsertElement:function(){this._super(...arguments) -const e=this -this.chart.addGuard(this.name,(function(){return"function"==typeof e.cond?e.cond(...arguments):e.cond}))},willDestroyElement:function(){this._super(...arguments),this.chart.removeGuard(this.name)}})) -e.default=n})),define("consul-ui/components/state-chart/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"uYjYKgyF",block:'{"symbols":["&default"],"statements":[[18,1,[[30,[36,2],["state"],[["state"],[[35,0]]]],[30,[36,2],["state-chart/guard"],[["chart"],[[32,0]]]],[30,[36,2],["state-chart/action"],[["chart"],[[32,0]]]],[30,[36,1],[[32,0],"dispatch"],null],[35,0]]]],"hasEval":false,"upvars":["state","action","component"]}',meta:{moduleName:"consul-ui/components/state-chart/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({chart:Ember.inject.service("state"),tagName:"",ontransition:function(){},init:function(){this._super(...arguments),this._actions={},this._guards={}},didReceiveAttrs:function(){void 0!==this.machine&&this.machine.stop(),void 0!==this.initial&&(this.src.initial=this.initial),this.machine=this.chart.interpret(this.src,{onTransition:e=>{const t=new CustomEvent("transition",{detail:e}) -this.ontransition(t),t.defaultPrevented||e.actions.forEach(t=>{"function"==typeof this._actions[t.type]&&this._actions[t.type](t.type,e.context,e.event)}),Ember.set(this,"state",e)},onGuard:(e,...t)=>this._guards[e](...t)})},didInsertElement:function(){this._super(...arguments),Ember.set(this,"state",this.machine.initialState||this.machine.state),this.machine.start()},willDestroy:function(){this._super(...arguments),this.machine.stop()},addAction:function(e,t){this._actions[e]=t},removeAction:function(e){delete this._actions[e]},addGuard:function(e,t){this._guards[e]=t},removeGuard:function(e){delete this._guards[e]},dispatch:function(e,t){this.machine.state.context=t,this.machine.send({type:e})},actions:{dispatch:function(e,t){t&&t.preventDefault&&(void 0!==t.target.nodeName&&"a"===t.target.nodeName.toLowerCase()||t.preventDefault()),this.dispatch(e,t)}}})) -e.default=n})),define("consul-ui/components/state/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"oAnib0UE",block:'{"symbols":["&default"],"statements":[[6,[37,1],[[35,0]],null,[["default"],[{"statements":[[2," "],[18,1,null],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["rendering","if"]}',meta:{moduleName:"consul-ui/components/state/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({service:Ember.inject.service("state"),tagName:"",didReceiveAttrs:function(){if(void 0===this.state)return -let e=!0 -void 0!==this.matches?e=this.service.matches(this.state,this.matches):void 0!==this.notMatches&&(e=!this.service.matches(this.state,this.notMatches)),Ember.set(this,"rendering",e)}})) -e.default=n})),define("consul-ui/components/tab-nav/index",["exports","@glimmer/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"AuN05zkB",block:'{"symbols":["select","name","item","@items","@onclick","&attrs"],"statements":[[6,[37,16],[[30,[36,15],[[30,[36,14],[[32,0],"style"],null]],[["offset"],[true]]],"tab"],null,[["default"],[{"statements":[[11,"nav"],[23,5,[30,[36,1],[[32,0,["style"]],[30,[36,11],["--selected-width:",[32,0,["style","width"]],";","--selected-left:",[32,0,["style","left"]],";","--selected-height:",[32,0,["style","height"]],";","--selected-top:",[32,0,["style","top"]]],null],[29]],null]],[24,"aria-label","Secondary"],[16,0,[30,[36,11],["tab-nav"," animatable"],null]],[17,6],[12],[2,"\\n "],[10,"ul"],[12],[2,"\\n"],[6,[37,13],[[30,[36,12],[[30,[36,12],[[32,4]],null]],null]],null,[["default"],[{"statements":[[2," "],[11,"li"],[16,0,[30,[36,1],[[30,[36,4],[[32,3,["selected"]],[30,[36,3],[[35,2],[30,[36,1],[[32,3,["label"]],[30,[36,0],[[32,3,["label"]]],null],[30,[36,0],[[32,3]],null]],null]],null]],null],"selected"],null]],[4,[38,6],["click",[30,[36,5],[[32,1]],null]],null],[4,[38,8],[[30,[36,1],[[32,3,["selected"]],[30,[36,5],[[32,1]],null],[30,[36,7],null,null]],null],[32,4,["length"]]],null],[12],[2,"\\n "],[8,"action",[[4,[38,6],["click",[30,[36,1],[[30,[36,10],[[32,5],[29]],null],[30,[36,5],[[32,5],[30,[36,9],[[32,3,["label"]]],null]],null],[30,[36,7],null,null]],null]],null]],[["@href"],[[32,3,["href"]]]],[["default"],[{"statements":[[2,"\\n "],[1,[32,3,["label"]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[3]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"parameters":[1,2]}]]]],"hasEval":false,"upvars":["slugify","if","selected","eq","or","fn","on","noop","did-upsert","uppercase","not-eq","concat","-track-array","each","set","dom-position","let"]}',meta:{moduleName:"consul-ui/components/tab-nav/index.hbs"}}) -class r extends t.default{}e.default=r,Ember._setComponentTemplate(n,r)})),define("consul-ui/components/tabular-collection/index",["exports","ember-collection/components/ember-collection","ember-collection/utils/needs-revalidate","ember-collection/layouts/grid","block-slots"],(function(e,t,n,r,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=Ember.HTMLBars.template({id:"Vy6UbjoV",block:'{"symbols":["cell","index","&default","&attrs"],"statements":[[11,"table"],[16,0,[31,["tabular-collection dom-recycling ",[30,[36,4],[[35,3],"has-actions",""],null]]]],[16,1,[34,5]],[23,5,[30,[36,7],["height:",[35,6,["height"]],"px"],null]],[17,4],[12],[2,"\\n"],[1,[30,[36,8],["resize",[30,[36,1],[[32,0],"resize"],null]],null]],[2,"\\n"],[18,3,null],[2,"\\n"],[6,[37,4],[[35,9]],null,[["default"],[{"statements":[[2," "],[10,"caption"],[12],[8,"yield-slot",[],[["@name"],["caption"]],[["default"],[{"statements":[[18,3,null]],"parameters":[]}]]],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"thead"],[12],[2,"\\n "],[10,"tr"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[18,3,null]],"parameters":[]}]]],[2,"\\n"],[6,[37,4],[[35,3]],null,[["default"],[{"statements":[[2," "],[10,"th"],[14,0,"actions"],[12],[2,"Actions"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"ember-native-scrollable",[],[["@tagName","@content-size","@scroll-left","@scroll-top","@scrollChange","@clientSizeChange"],["tbody",[34,10],[34,11],[34,12],[30,[36,1],[[32,0],"scrollChange"],null],[30,[36,1],[[32,0],"clientSizeChange"],null]]],[["default"],[{"statements":[[2,"\\n "],[10,"tr"],[12],[13],[6,[37,15],[[30,[36,14],[[30,[36,14],[[35,13]],null]],null]],null,[["default"],[{"statements":[[10,"tr"],[22,5,[32,1,["style"]]],[15,"onclick",[30,[36,1],[[32,0],"click"],null]],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["row"]],[["default"],[{"statements":[[18,3,[[32,1,["item"]],[32,2]]]],"parameters":[]}]]],[2,"\\n"],[6,[37,4],[[35,3]],null,[["default"],[{"statements":[[2," "],[10,"td"],[14,0,"actions"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name","@params"],["actions",[30,[36,2],[[32,1,["index"]],[30,[36,1],[[32,0],"change"],null],[35,0]],null]]],[["default"],[{"statements":[[2,"\\n "],[18,3,[[32,1,["item"]],[32,2]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13]],"parameters":[1,2]}]]]],"parameters":[]}]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["checked","action","block-params","hasActions","if","guid","style","concat","on-window","hasCaption","_contentSize","_scrollLeft","_scrollTop","_cells","-track-array","each"]}',meta:{moduleName:"consul-ui/components/tabular-collection/index.hbs"}}),s=r.default.prototype.formatItemStyle -var i=Ember._setComponentTemplate(l,t.default.extend(a.default,{tagName:"",dom:Ember.inject.service("dom"),width:1150,rowHeight:50,maxHeight:500,checked:null,hasCaption:!1,init:function(){this._super(...arguments),this.guid=this.dom.guid(this) -const e=this -this["cell-layout"]=new r.default(Ember.get(this,"width"),Ember.get(this,"rowHeight")),this["cell-layout"].formatItemStyle=function(t){let n=s.apply(this,arguments) -return e.checked===t&&(n+=";z-index: 1"),n}},didInsertElement:function(){this._super(...arguments),this.$element=this.dom.element("#"+this.guid),this.actions.resize.apply(this,[{target:this.dom.viewport()}])},style:Ember.computed("rowHeight","_items","maxRows","maxHeight",(function(){const e=Ember.get(this,"rows") -let t=Ember.get(this,"maxHeight") -if(e){let n=Math.max(3,Ember.get(this._items||[],"length")) -n=Math.min(e,n),t=Ember.get(this,"rowHeight")*n+29}return{height:t}})),willRender:function(){this._super(...arguments),Ember.set(this,"hasCaption",this._isRegistered("caption")),Ember.set(this,"hasActions",this._isRegistered("actions"))},_needsRevalidate:function(){this.isDestroyed||this.isDestroying||(this._isGlimmer2()?this.rerender():(0,n.default)(this))},actions:{resize:function(e){const t=this.$element,n=this.dom.element(".app-view") -if(n){const a=1,l=t.getBoundingClientRect(),i=this.dom.element('footer[role="contentinfo"]'),o=l.top+i.clientHeight+a,u=e.target.innerHeight-o -this.set("maxHeight",Math.max(0,u)),this["cell-layout"]=new r.default(n.clientWidth,Ember.get(this,"rowHeight")) -const c=this -this["cell-layout"].formatItemStyle=function(e){let t=s.apply(this,arguments) -return c.checked===e&&(t+=";z-index: 1"),t},this.updateItems(),this.updateScrollPosition()}},click:function(e){return this.dom.clickFirstAnchor(e)},change:function(e,t={}){if(this.$tr&&(this.$tr.style.zIndex=null),t.target&&t.target.checked&&e!==Ember.get(this,"checked")){Ember.set(this,"checked",parseInt(e)) -const n=t.target,r=this.dom.closest("tr",n),a=this.dom.sibling(n,"div") -a.getBoundingClientRect().top+a.clientHeight>this.dom.element('footer[role="contentinfo"]').getBoundingClientRect().top?a.classList.add("above"):a.classList.remove("above"),r.style.zIndex=1,this.$tr=r}else Ember.set(this,"checked",null)}}})) -e.default=i})),define("consul-ui/components/tabular-details/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"1/kFWI3B",block:'{"symbols":["inputId","item","index","&default"],"statements":[[18,4,null],[2,"\\n"],[10,"table"],[14,0,"with-details has-actions"],[12],[2,"\\n "],[10,"thead"],[12],[2,"\\n "],[10,"tr"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[18,4,null]],"parameters":[]}]]],[2,"\\n "],[10,"th"],[14,0,"actions"],[12],[2,"Actions"],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"tbody"],[12],[2,"\\n"],[6,[37,9],[[30,[36,1],["tabular-details-",[35,4],"-toggle-",[35,8],"_"],null]],null,[["default"],[{"statements":[[6,[37,7],[[30,[36,6],[[30,[36,6],[[35,5]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"tr"],[15,"onclick",[30,[36,0],[[32,0],"click"],null]],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["row"]],[["default"],[{"statements":[[18,4,[[32,2],[32,3]]]],"parameters":[]}]]],[2,"\\n "],[10,"td"],[14,0,"actions"],[12],[2,"\\n "],[10,"label"],[15,"for",[30,[36,1],[[32,1],[32,3]],null]],[12],[10,"span"],[12],[2,"Show details"],[13],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"tr"],[12],[2,"\\n "],[10,"td"],[14,"colspan","3"],[12],[2,"\\n "],[10,"input"],[15,"checked",[30,[36,3],[[30,[36,2],[[32,2,["closed"]]],null]],null]],[15,2,[32,3]],[15,3,[34,4]],[15,1,[30,[36,1],[[32,1],[32,3]],null]],[15,"onchange",[30,[36,0],[[32,0],"change",[32,2],[35,5]],null]],[14,4,"checkbox"],[12],[13],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[10,"label"],[15,"for",[30,[36,1],[[32,1],[32,3]],null]],[12],[10,"span"],[12],[2,"Hide details"],[13],[13],[2,"\\n "],[10,"div"],[12],[2,"\\n "],[8,"yield-slot",[],[["@name"],["details"]],[["default"],[{"statements":[[2,"\\n "],[18,4,[[32,2],[32,3]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2,3]}]]]],"parameters":[1]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["action","concat","is-empty","not","name","items","-track-array","each","guid","let"]}',meta:{moduleName:"consul-ui/components/tabular-details/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{dom:Ember.inject.service("dom"),onchange:function(){},init:function(){this._super(...arguments),this.guid=this.dom.guid(this)},actions:{click:function(e){this.dom.clickFirstAnchor(e)},change:function(e,t,n){this.onchange(n,e,t)}}})) -e.default=r})),define("consul-ui/components/tag-list/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"m+vNqE0Z",block:'{"symbols":["tags","item","&attrs","@item","&default","@namedBlocksInfo","@tags"],"statements":[[6,[37,11],[[30,[36,10],[[30,[36,9],[[32,4,["Tags"]],[30,[36,1],null,null]],null],[30,[36,9],[[32,7],[30,[36,1],null,null]],null]],null]],null,[["default"],[{"statements":[[6,[37,7],[[30,[36,8],[[32,1,["length"]],0],null]],null,[["default"],[{"statements":[[6,[37,7],[[30,[36,6],[[32,6],"default",[27,[32,5]]],null]],null,[["default","else"],[{"statements":[[2," "],[18,5,[[30,[36,5],["tag-list"],[["item"],[[32,4]]]]]],[2,"\\n"]],"parameters":[]},{"statements":[[11,"dl"],[24,0,"tag-list"],[17,3],[12],[2,"\\n "],[11,"dt"],[4,[38,0],null,null],[12],[2,"\\n "],[1,[30,[36,2],["components.tag-list.title"],[["default"],[[30,[36,1],["common.consul.tags"],null]]]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n"],[6,[37,4],[[30,[36,3],[[30,[36,3],[[32,1]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"span"],[12],[1,[32,2]],[13],[2,"\\n"]],"parameters":[2]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["tooltip","array","t","-track-array","each","component","-has-block","if","gt","or","union","let"]}',meta:{moduleName:"consul-ui/components/tag-list/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/text-input/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"BI0eUwml",block:'{"symbols":["__arg0","@name","@item","@value","@placeholder","@chart","@validations","@oninput","@expanded","@label","&attrs","@help"],"statements":[[8,"form-input",[[16,0,[30,[36,7],["text-input"," type-text"],null]],[17,11]],[["@item","@placeholder","@name","@label","@help","@validations","@chart","@namedBlocksInfo"],[[32,3],[32,5],[32,2],[32,10],[32,12],[32,7],[32,6],[30,[36,8],null,[["label","input"],[0,0]]]]],[["default"],[{"statements":[[6,[37,5],[[30,[36,6],[[32,1],"label"],null]],null,[["default","else"],[{"statements":[[2,"\\n"],[2," "],[1,[30,[36,1],[[32,10],[32,2]],null]],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,6],[[32,1],"input"],null]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[32,9]],null,[["default","else"],[{"statements":[[2," "],[11,"textarea"],[16,3,[32,2]],[4,[38,2],[[32,3]],[["validations","chart"],[[32,7],[32,6]]]],[4,[38,4],["input",[30,[36,3],[[32,8]],null]],null],[12],[1,[30,[36,1],[[32,4],[30,[36,0],[[32,3],[32,2]],null]],null]],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"input"],[16,2,[30,[36,1],[[32,4],[30,[36,0],[[32,3],[32,2]],null]],null]],[16,3,[32,2]],[16,"placeholder",[30,[36,1],[[32,5]],null]],[24,4,"text"],[4,[38,2],[[32,3]],[["validations","chart"],[[32,7],[32,6]]]],[4,[38,4],["input",[30,[36,3],[[32,8]],null]],null],[12],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["get","or","validate","optional","on","if","-is-named-block-invocation","concat","hash"]}',meta:{moduleName:"consul-ui/components/text-input/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/toggle-button/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"R/cqpwNW",block:'{"symbols":["&attrs","&default"],"statements":[[11,"input"],[17,1],[16,"checked",[30,[36,1],[[35,0],"checked",[29]],null]],[16,1,[30,[36,3],["toggle-button-",[35,2]],null]],[16,"onchange",[30,[36,4],[[32,0],"change"],null]],[24,4,"checkbox"],[4,[38,6],[[30,[36,5],[[32,0],"input"],null]],null],[12],[13],[2,"\\n"],[11,"label"],[16,"for",[30,[36,3],["toggle-button-",[35,2]],null]],[4,[38,6],[[30,[36,5],[[32,0],"label"],null]],null],[12],[2,"\\n "],[18,2,[[30,[36,7],null,[["click"],[[30,[36,4],[[32,0],"click"],null]]]]]],[2,"\\n"],[13]],"hasEval":false,"upvars":["checked","if","guid","concat","action","set","did-insert","hash"]}',meta:{moduleName:"consul-ui/components/toggle-button/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember.Component.extend({dom:Ember.inject.service("dom"),tagName:"",checked:!1,onchange:function(){},onblur:function(){},init:function(){this._super(...arguments),this.guid=this.dom.guid(this),this._listeners=this.dom.listeners()},willDestroyElement:function(){this._super(...arguments),this._listeners.remove()},didReceiveAttrs:function(){this._super(...arguments),this.checked?this.addClickOutsideListener():this._listeners.remove()},addClickOutsideListener:function(){this._listeners.remove(),this._listeners.add(this.dom.document(),"click",e=>{this.dom.isOutside(this.label,e.target)&&this.dom.isOutside(this.label.nextElementSibling,e.target)&&(this.input.checked&&(this.input.checked=!1,this.onchange({target:this.input})),this._listeners.remove())})},actions:{click:function(e){-1===(e.target.rel||"").indexOf("noopener")&&e.preventDefault(),this.input.checked=!this.input.checked,0!==e.detail&&e.target.blur(),this.actions.change.apply(this,[e])},change:function(){this.input.checked&&this.addClickOutsideListener(),this.onchange({target:this.input})}}})) -e.default=n})),define("consul-ui/components/token-list/index",["exports","block-slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"Nxw8uhmR",block:'{"symbols":["item","index","&default"],"statements":[[18,3,null],[2,"\\n"],[6,[37,3],[[30,[36,8],[[35,1,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"tabular-collection",[[24,0,"token-list"]],[["@rows","@items"],[5,[30,[36,2],["AccessorID:asc",[35,1]],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[35,0]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["caption"]],[["default"],[{"statements":[[1,[34,0]]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"th"],[12],[2,"AccessorID"],[13],[2,"\\n "],[10,"th"],[12],[2,"Scope"],[13],[2,"\\n "],[10,"th"],[12],[2,"Description"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["row"]],[["default"],[{"statements":[[2,"\\n "],[10,"td"],[12],[2,"\\n "],[10,"a"],[15,6,[30,[36,4],["dc.acls.tokens.edit",[32,1,["AccessorID"]]],null]],[15,"target",[30,[36,6],[[35,5],""],null]],[12],[1,[30,[36,7],[[32,1,["AccessorID"]],8,false],null]],[13],[2,"\\n "],[13],[2,"\\n "],[10,"td"],[12],[2,"\\n "],[1,[30,[36,3],[[32,1,["Local"]],"local","global"],null]],[2,"\\n "],[13],[2,"\\n "],[10,"td"],[12],[2,"\\n "],[10,"p"],[12],[1,[32,1,["Description"]]],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[1,2]}]]],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["caption","items","sort-by","if","href-to","target","or","truncate","gt"]}',meta:{moduleName:"consul-ui/components/token-list/index.hbs"}}) -var r=Ember._setComponentTemplate(n,Ember.Component.extend(t.default,{tagName:""})) -e.default=r})),define("consul-ui/components/token-source/chart.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"token-source",initial:"idle",on:{RESTART:[{target:"secret",cond:"isSecret"},{target:"provider"}]},states:{idle:{},secret:{},provider:{on:{SUCCESS:"jwt"}},jwt:{on:{SUCCESS:"token"}},token:{}}}})),define("consul-ui/components/token-source/index",["exports","@glimmer/component","consul-ui/components/token-source/chart.xstate"],(function(e,t,n){var r,a,l,s,i,o,u -function c(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const f=Ember.HTMLBars.template({id:"mPga2rq/",block:'{"symbols":["State","Guard","Action","dispatch","state","path","@value","@onerror","@type","@dc","@nspace","@partition"],"statements":[[8,"state-chart",[],[["@src","@initial"],[[32,0,["chart"]],[30,[36,8],[[30,[36,7],[[32,9],"oidc"],null],"provider","secret"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,2],[],[["@name","@cond"],["isSecret",[32,0,["isSecret"]]]],null],[2,"\\n"],[6,[37,9],[[30,[36,2],["/${partition}/${nspace}/${dc}",[30,[36,0],null,[["partition","nspace","dc"],[[30,[36,6],[[32,7,["Partition"]],[32,12]],null],[30,[36,6],[[32,7,["Namespace"]],[32,11]],null],[32,10]]]]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,1],[],[["@matches"],["secret"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src","@onchange","@onerror"],[[30,[36,2],[[30,[36,1],[[32,6],"/token/self/${value}"],null],[30,[36,0],null,[["value"],[[32,7]]]]],null],[32,0,["change"]],[32,8]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,1],[],[["@matches"],["provider"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src","@onchange","@onerror"],[[30,[36,2],[[30,[36,1],[[32,6],"/oidc/provider/${value}"],null],[30,[36,0],null,[["value"],[[32,7,["Name"]]]]]],null],[30,[36,5],[[30,[36,3],[[32,0],[30,[36,4],[[32,0,["provider"]]],null]],[["value"],["data"]]],[30,[36,3],[[32,0],[32,4],"SUCCESS"],null]],null],[32,8]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,1],[],[["@matches"],["jwt"]],[["default"],[{"statements":[[2,"\\n "],[8,"jwt-source",[],[["@src","@onchange","@onerror"],[[32,0,["provider","AuthURL"]],[30,[36,5],[[30,[36,3],[[32,0],[30,[36,4],[[32,0,["jwt"]]],null]],[["value"],["data"]]],[30,[36,3],[[32,0],[32,4],"SUCCESS"],null]],null],[32,8]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,1],[],[["@matches"],["token"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src","@onchange","@onerror"],[[30,[36,2],[[30,[36,1],[[32,6],"/oidc/authorize/${provider}/${code}/${state}"],null],[30,[36,0],null,[["provider","code","state"],[[32,0,["provider","Name"]],[32,0,["jwt","authorizationCode"]],[30,[36,6],[[32,0,["jwt","authorizationState"]],""],null]]]]],null],[32,0,["change"]],[32,8]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[6]}]]]],"parameters":[1,2,3,4,5]}]]]],"hasEval":false,"upvars":["hash","concat","uri","action","mut","queue","or","eq","if","let"]}',meta:{moduleName:"consul-ui/components/token-source/index.hbs"}}) -let b=(r=Ember._tracked,a=Ember._tracked,l=Ember._action,s=Ember._action,i=class extends t.default{constructor(){super(...arguments),d(this,"provider",o,this),d(this,"jwt",u,this),this.chart=n.default}isSecret(){return"secret"===this.args.type}change(e){e.data.toJSON=function(){return function(e){for(var t=1;t{const n=parseFloat(t.getTotalLength()),r=t.getPointAtLength(Math.ceil(n/3)) -return{id:t.id,x:Math.round(r.x-e.x),y:Math.round(r.y-e.y)}})}},s=u(l.prototype,"iconPositions",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i=u(l.prototype,"dom",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(l.prototype,"getIconPositions",[a],Object.getOwnPropertyDescriptor(l.prototype,"getIconPositions"),l.prototype),l) -e.default=d,Ember._setComponentTemplate(c,d)})),define("consul-ui/components/topology-metrics/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y -function g(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function O(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const _=Ember.HTMLBars.template({id:"FlkBlhGg",block:'{"symbols":["upstreams","dc","item","item","@service","@dc","@hasMetricsProvider","@metricsHref","@topology","@nspace","@oncreate"],"statements":[[11,"div"],[24,0,"topology-container consul-topology-metrics"],[4,[38,13],[[32,0,["calculate"]]],null],[12],[2,"\\n"],[6,[37,3],[[30,[36,14],[[32,0,["downstreams","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[11,"div"],[24,1,"downstream-container"],[4,[38,4],[[32,0,["setHeight"]],"downstream-lines"],null],[4,[38,5],[[32,0,["setHeight"]],"downstream-lines",[32,0,["downstreams"]]],null],[12],[2,"\\n"],[6,[37,3],[[30,[36,12],[[32,0,["emptyColumn"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[12],[2,"\\n "],[10,"p"],[12],[1,[32,6,["Name"]]],[13],[2,"\\n "],[10,"span"],[12],[2,"\\n "],[8,"tooltip",[],[[],[]],[["default"],[{"statements":[[2,"\\n Only showing downstreams within the current datacenter for "],[1,[32,5,["Service","Service"]]],[2,".\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,7],[[30,[36,6],[[30,[36,6],[[32,0,["downstreams"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"topology-metrics/card",[],[["@nspace","@dc","@service","@item","@hasMetricsProvider","@noMetricsReason"],[[32,10],[32,6,["Name"]],[32,5,["Service"]],[32,4],[32,7],[32,0,["noMetricsReason"]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,2],[[32,7],[32,0,["mainNotIngressService"]],[30,[36,1],[[32,4,["Kind"]],"ingress-gateway"],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"topology-metrics/stats",[],[["@nspace","@partition","@dc","@endpoint","@service","@item","@noMetricsReason"],[[30,[36,0],[[32,4,["Namespace"]],"default"],null],[30,[36,0],[[32,4,["Partition"]],"default"],null],[32,4,["Datacenter"]],"downstream-summary-for-service",[32,5,["Service","Service"]],[32,4,["Name"]],[32,0,["noMetricsReason"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[4]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"div"],[14,1,"metrics-container"],[12],[2,"\\n "],[10,"div"],[14,0,"metrics-header"],[12],[2,"\\n "],[1,[32,5,["Service","Service"]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,3],[[30,[36,1],[[32,5,["Service","Meta","external-source"]],"consul-api-gateway"],null]],null,[["default"],[{"statements":[[6,[37,3],[[32,7]],null,[["default"],[{"statements":[[2," "],[8,"topology-metrics/series",[],[["@nspace","@partition","@dc","@service","@protocol","@noMetricsReason"],[[30,[36,0],[[32,5,["Service","Namespace"]],"default"],null],[30,[36,0],[[35,11,["Service","Partition"]],"default"],null],[32,6,["Name"]],[32,5,["Service","Service"]],[32,9,["Protocol"]],[32,0,["noMetricsReason"]]]],null],[2,"\\n"],[6,[37,3],[[32,0,["mainNotIngressService"]]],null,[["default"],[{"statements":[[2," "],[8,"topology-metrics/stats",[],[["@nspace","@partition","@dc","@endpoint","@service","@protocol","@noMetricsReason"],[[30,[36,0],[[32,5,["Service","Namespace"]],"default"],null],[30,[36,0],[[35,11,["Service","Partition"]],"default"],null],[32,6,["Name"]],"summary-for-service",[32,5,["Service","Service"]],[32,9,["Protocol"]],[32,0,["noMetricsReason"]]]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[10,"div"],[14,0,"link"],[12],[2,"\\n"],[6,[37,3],[[32,8]],null,[["default","else"],[{"statements":[[2," "],[10,"a"],[14,0,"metrics-link"],[15,6,[32,8]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"Open dashboard"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"a"],[14,0,"config-link"],[15,6,[31,[[30,[36,10],["CONSUL_DOCS_URL"],null],"/connect/observability/ui-visualization"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"Configure dashboard"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"div"],[14,1,"downstream-lines"],[12],[2,"\\n "],[8,"topology-metrics/down-lines",[],[["@type","@service","@view","@center","@lines","@items","@oncreate"],["downstream",[32,5],[32,0,["downView"]],[32,0,["centerDimensions"]],[32,0,["downLines"]],[32,0,["downstreams"]],[30,[36,15],[[32,0],[32,11]],null]]],null],[2,"\\n "],[13],[2,"\\n"],[6,[37,3],[[30,[36,14],[[32,0,["upstreams","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,1,"upstream-column"],[12],[2,"\\n"],[6,[37,7],[[30,[36,9],[[30,[36,8],["Datacenter",[32,0,["upstreams"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[11,"div"],[24,1,"upstream-container"],[4,[38,4],[[32,0,["setHeight"]],"upstream-lines"],null],[4,[38,5],[[32,0,["setHeight"]],"upstream-lines",[32,0,["upstreams"]]],null],[12],[2,"\\n"],[6,[37,3],[[32,2]],null,[["default"],[{"statements":[[2," "],[10,"p"],[12],[1,[32,2]],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,7],[[30,[36,6],[[30,[36,6],[[32,1]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"topology-metrics/card",[],[["@dc","@item","@service"],[[32,6,["Name"]],[32,3],[32,5,["Service"]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,3],[[30,[36,2],[[32,7],[32,0,["mainNotIngressService"]],[30,[36,1],[[32,3,["Kind"]],"ingress-gateway"],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"topology-metrics/stats",[],[["@nspace","@partition","@dc","@endpoint","@service","@item","@noMetricsReason"],[[30,[36,0],[[32,3,["Namespace"]],"default"],null],[30,[36,0],[[32,3,["Partition"]],"default"],null],[32,3,["Datacenter"]],"upstream-summary-for-service",[32,5,["Service","Service"]],[32,3,["Name"]],[32,0,["noMetricsReason"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3]}]]],[2," "],[13],[2,"\\n"]],"parameters":[1,2]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"div"],[14,1,"upstream-lines"],[12],[2,"\\n "],[8,"topology-metrics/up-lines",[],[["@type","@service","@view","@center","@lines","@items","@oncreate"],["upstream",[32,5],[32,0,["upView"]],[32,0,["centerDimensions"]],[32,0,["upLines"]],[32,0,["upstreams"]],[30,[36,15],[[32,0],[32,11]],null]]],null],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["or","not-eq","and","if","did-insert","did-update","-track-array","each","group-by","-each-in","env","service","not","on-resize","gt","action"]}',meta:{moduleName:"consul-ui/components/topology-metrics/index.hbs"}}) -let P=(n=Ember.inject.service("env"),r=Ember._tracked,a=Ember._tracked,l=Ember._tracked,s=Ember._tracked,i=Ember._tracked,o=Ember._tracked,u=Ember._action,c=Ember._action,d=class extends t.default{constructor(...e){super(...e),g(this,"env",m,this),g(this,"centerDimensions",p,this),g(this,"downView",f,this),g(this,"downLines",b,this),g(this,"upView",h,this),g(this,"upLines",v,this),g(this,"noMetricsReason",y,this)}drawDownLines(e){const t=["allow","deny"],n={x:this.centerDimensions.x-7,y:this.centerDimensions.y+this.centerDimensions.height/2} -return e.map(e=>{const t=e.getBoundingClientRect(),r={x:t.x+t.width,y:t.y+t.height/2} -return{id:e.id,permission:e.getAttribute("data-permission"),dest:n,src:r}}).sort((e,n)=>t.indexOf(e.permission)-t.indexOf(n.permission))}drawUpLines(e){const t=["allow","deny"],n={x:this.centerDimensions.x+5.5,y:this.centerDimensions.y+this.centerDimensions.height/2} -return e.map(e=>{const t=e.getBoundingClientRect(),r={x:t.x-t.width-25,y:t.y+t.height/2} -return{id:e.id,permission:e.getAttribute("data-permission"),dest:r,src:n}}).sort((e,n)=>t.indexOf(e.permission)-t.indexOf(n.permission))}emptyColumn(){const e=Ember.get(this.args.topology,"noDependencies") -return!this.env.var("CONSUL_ACLS_ENABLED")||e}get downstreams(){const e=Ember.get(this.args.topology,"Downstreams")||[],t=[...e],n=Ember.get(this.args.topology,"noDependencies") -return!this.env.var("CONSUL_ACLS_ENABLED")&&n?t.push({Name:"Downstreams unknown.",Empty:!0,Datacenter:"",Namespace:""}):0===e.length&&t.push({Name:"No downstreams.",Datacenter:"",Namespace:""}),t}get upstreams(){const e=Ember.get(this.args.topology,"Upstreams")||[],t=[...e],n=Ember.get(this.args.dc,"DefaultACLPolicy"),r=Ember.get(this.args.topology,"wildcardIntention"),a=Ember.get(this.args.topology,"noDependencies") -return!this.env.var("CONSUL_ACLS_ENABLED")&&a?t.push({Name:"Upstreams unknown.",Datacenter:"",Namespace:""}):"allow"===n||r?t.push({Name:"* (All Services)",Datacenter:"",Namespace:""}):0===e.length&&t.push({Name:"No upstreams.",Datacenter:"",Namespace:""}),t}get mainNotIngressService(){return"ingress-gateway"!==(Ember.get(this.args.service.Service,"Kind")||"")}setHeight(e,t){if(e){const n=e.getBoundingClientRect() -document.getElementById(""+t[0]).setAttribute("style",`height:${n.height}px`)}this.calculate()}calculate(){this.args.isRemoteDC?this.noMetricsReason="remote-dc":"ingress-gateway"===this.args.service.Service.Kind?this.noMetricsReason="ingress-gateway":this.noMetricsReason=null -const e=document.getElementById("downstream-lines").getBoundingClientRect(),t=document.getElementById("upstream-lines").getBoundingClientRect(),n=document.getElementById("upstream-column") -this.emptyColumn?this.downView={x:e.x,y:e.y,width:e.width,height:e.height+10}:this.downView=e,n&&(this.upView={x:t.x,y:t.y,width:t.width,height:n.getBoundingClientRect().height+10}) -const r=[...document.querySelectorAll("#downstream-container .topology-metrics-card")],a=document.querySelector(".metrics-header"),l=[...document.querySelectorAll("#upstream-column .topology-metrics-card")] -this.centerDimensions=a.getBoundingClientRect(),this.downLines=this.drawDownLines(r),this.upLines=this.drawUpLines(l)}},m=O(d.prototype,"env",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=O(d.prototype,"centerDimensions",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=O(d.prototype,"downView",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=O(d.prototype,"downLines",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return[]}}),h=O(d.prototype,"upView",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=O(d.prototype,"upLines",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return[]}}),y=O(d.prototype,"noMetricsReason",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O(d.prototype,"setHeight",[u],Object.getOwnPropertyDescriptor(d.prototype,"setHeight"),d.prototype),O(d.prototype,"calculate",[c],Object.getOwnPropertyDescriptor(d.prototype,"calculate"),d.prototype),d) -e.default=P,Ember._setComponentTemplate(_,P)})) -define("consul-ui/components/topology-metrics/notifications/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"ZVlQpsZp",block:'{"symbols":["error","@status","@type","@error"],"statements":[[6,[37,1],[[30,[36,2],[[32,3],"create"],null]],null,[["default","else"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your intention has been added.\\n"]],"parameters":[]},{"statements":[[2," There was an error adding your intention.\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,2],[[32,3],"update"],null]],null,[["default"],[{"statements":[[6,[37,1],[[30,[36,2],[[32,2],"success"],null]],null,[["default","else"],[{"statements":[[2," Your intention has been saved.\\n"]],"parameters":[]},{"statements":[[2," There was an error saving your intention.\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[6,[37,3],[[32,4,["errors","firstObject"]]],null,[["default"],[{"statements":[[6,[37,1],[[32,1,["detail"]]],null,[["default"],[{"statements":[[2," "],[10,"br"],[12],[13],[1,[30,[36,0],["(",[30,[36,1],[[32,1,["status"]],[30,[36,0],[[32,1,["status"]],": "],null]],null],[32,1,["detail"]],")"],null]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["concat","if","eq","let"]}',meta:{moduleName:"consul-ui/components/topology-metrics/notifications/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/topology-metrics/popover/index",["exports","@glimmer/component"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Ember.HTMLBars.template({id:"iYw9/Q3m",block:'{"symbols":["style","label","__arg0","__arg1","Actions","__arg0","__arg1","Actions","__arg0","__arg1","Actions","@item","@service","@type","@oncreate","@disabled","&attrs","@position"],"statements":[[11,"div"],[16,0,[31,["topology-metrics-popover ",[32,14]]]],[17,17],[12],[2,"\\n"],[6,[37,7],[[30,[36,1],["top:",[32,18,["y"]],"px;left:",[32,18,["x"]],"px;"],null],[30,[36,9],[[30,[36,14],[[32,14],"deny"],null],"Add intention","View intention"],null]],null,[["default"],[{"statements":[[6,[37,9],[[30,[36,16],[[32,16]],null]],null,[["default","else"],[{"statements":[[6,[37,9],[[30,[36,14],[[32,14],"deny"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"informed-action",[[24,0,"dangerous"],[4,[38,12],[[30,[36,11],[[32,0],"popover"],null]],null]],[["@namedBlocksInfo"],[[30,[36,10],null,[["header","body","actions"],[0,0,1]]]]],[["default"],[{"statements":[[6,[37,9],[[30,[36,8],[[32,9],"header"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,3],["components.consul.topology-metrics.popover.deny.header"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,9],[[30,[36,8],[[32,9],"body"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,9],[[32,12,["Intention","HasExact"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,3],["components.consul.topology-metrics.popover.deny.body.isExact"],null]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[1,[30,[36,3],["components.consul.topology-metrics.popover.deny.body.notExact"],null]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,9],[[30,[36,8],[[32,9],"actions"],null]],null,[["default"],[{"statements":[[6,[37,7],[[32,10]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,11,["Action"]],[[24,0,"action"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,4,"button"],[4,[38,6],["click",[32,15]],null],[12],[2,"\\n"],[6,[37,9],[[32,12,["Intention","HasExact"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,3],["components.consul.topology-metrics.popover.deny.action.isExact"],null]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[1,[30,[36,3],["components.consul.topology-metrics.popover.deny.action.notExact"],null]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,11,["Action"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"cancel"],[24,4,"button"],[4,[38,6],["click",[30,[36,5],[[30,[36,4],[[32,0,["popoverController","hide"]]],null]],null]],null],[12],[2,"\\n Cancel\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[11]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[9,10]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,9],[[30,[36,14],[[32,14],"not-defined"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"informed-action",[[24,0,"warning documentation"],[4,[38,12],[[30,[36,11],[[32,0],"popover"],null]],null]],[["@namedBlocksInfo"],[[30,[36,10],null,[["header","body","actions"],[0,0,1]]]]],[["default"],[{"statements":[[6,[37,9],[[30,[36,8],[[32,6],"header"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,3],["components.consul.topology-metrics.popover.not-defined.header"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,9],[[30,[36,8],[[32,6],"body"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[30,[36,3],["components.consul.topology-metrics.popover.not-defined.body"],[["downstream","upstream"],[[32,12,["Name"]],[32,13,["Name"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,9],[[30,[36,8],[[32,6],"actions"],null]],null,[["default"],[{"statements":[[6,[37,7],[[32,7]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Action"]],[[24,0,"action"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,13],["CONSUL_DOCS_URL"],null],"/connect/registration/service-registration#upstreams"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"\\n "],[1,[30,[36,3],["components.consul.topology-metrics.popover.not-defined.action"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,8,["Action"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"cancel"],[24,4,"button"],[4,[38,6],["click",[30,[36,5],[[30,[36,4],[[32,0,["popoverController","hide"]]],null]],null]],null],[12],[2,"\\n Close\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[6,7]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"informed-action",[[24,0,"info"],[4,[38,12],[[30,[36,11],[[32,0],"popover"],null]],null]],[["@namedBlocksInfo"],[[30,[36,10],null,[["header","body","actions"],[0,0,1]]]]],[["default"],[{"statements":[[6,[37,9],[[30,[36,8],[[32,3],"header"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,3],["components.consul.topology-metrics.popover.l7.header"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,9],[[30,[36,8],[[32,3],"body"],null]],null,[["default","else"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[30,[36,3],["components.consul.topology-metrics.popover.l7.body"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]},{"statements":[[6,[37,9],[[30,[36,8],[[32,3],"actions"],null]],null,[["default"],[{"statements":[[6,[37,7],[[32,4]],null,[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Action"]],[[24,0,"action"]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"a"],[15,6,[30,[36,2],["dc.services.show.intentions.edit",[30,[36,1],[[32,12,["Intention","ID"]]],null]],null]],[12],[2,"\\n "],[1,[30,[36,3],["components.consul.topology-metrics.popover.l7.action"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5,["Action"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"cancel"],[24,4,"button"],[4,[38,6],["click",[30,[36,5],[[30,[36,4],[[32,0,["popoverController","hide"]]],null]],null]],null],[12],[2,"\\n Close\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[3,4]}]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[11,"button"],[23,5,[32,1]],[16,"aria-label",[32,2]],[24,4,"button"],[4,[38,15],[[32,0,["popover"]]],[["options","returns"],[[30,[36,10],null,[["theme","placement"],["square-tail","bottom-start"]]],[30,[36,11],[[32,0],"popoverController"],null]]]],[4,[38,6],["click",[30,[36,5],[[30,[36,4],[[32,0,["popoverController","show"]]],null]],null]],null],[12],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[11,"button"],[23,5,[32,1]],[16,"aria-label",[32,2]],[24,4,"button"],[4,[38,0],[true],null],[12],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1,2]}]]],[13],[2,"\\n"]],"hasEval":false,"upvars":["disabled","concat","href-to","t","optional","fn","on","let","-is-named-block-invocation","if","hash","set","did-insert","env","eq","with-overlay","not"]}',meta:{moduleName:"consul-ui/components/topology-metrics/popover/index.hbs"}}) -class r extends t.default{}e.default=r,Ember._setComponentTemplate(n,r)})),define("consul-ui/components/topology-metrics/series/index",["exports","dayjs","dayjs/plugin/calendar","d3-selection","d3-scale","d3-scale-chromatic","d3-shape","d3-array"],(function(e,t,n,r,a,l,s,i){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=Ember.HTMLBars.template({id:"T4gO0fLS",block:'{"symbols":["modal","desc","label","@noMetricsReason","@protocol","@service","@dc","@partition","@nspace"],"statements":[[6,[37,4],[[30,[36,9],[[32,4]],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange","@onerror"],[[30,[36,6],["/${partition}/${nspace}/${dc}/metrics/summary-for-service/${service}/${protocol}",[30,[36,5],null,[["nspace","partition","dc","service","protocol"],[[32,9],[32,8],[32,7],[32,6],[32,5]]]]],null],[30,[36,7],[[32,0],"change"],null],[30,[36,7],[[32,0],[30,[36,8],[[35,0]],null]],[["value"],["error"]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[1,[30,[36,10],["resize",[30,[36,7],[[32,0],"redraw"],null]],null]],[2,"\\n"],[1,[30,[36,11],[[30,[36,7],[[32,0],"redraw"],null]],null]],[2,"\\n\\n"],[6,[37,4],[[30,[36,9],[[35,12]],null]],null,[["default"],[{"statements":[[6,[37,4],[[35,3,["labels"]]],null,[["default"],[{"statements":[[2," "],[11,"a"],[24,0,"sparkline-key-link"],[4,[38,2],["click",[30,[36,1],[[32,0,["modal","open"]]],null]],null],[12],[2,"\\n Key\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n"],[10,"div"],[14,0,"sparkline-wrapper"],[12],[2,"\\n "],[10,"div"],[14,0,"tooltip"],[12],[2,"\\n "],[10,"div"],[14,0,"sparkline-time"],[12],[2,"Timestamp"],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[35,12]],null,[["default"],[{"statements":[[2," "],[8,"topology-metrics/status",[],[["@noMetricsReason","@error"],[[32,4],[34,0]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"svg"],[14,0,"sparkline"],[12],[13],[2,"\\n"],[13],[2,"\\n\\n"],[8,"modal-dialog",[[24,0,"sparkline-key"]],[["@aria"],[[30,[36,5],null,[["label"],["Metrics Key"]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"ref",[],[["@target","@name","@value"],[[32,0],"modal",[32,1]]],null],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"Metrics Key"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"sparkline-key-content"],[12],[2,"\\n "],[10,"p"],[12],[2,"This key describes the metrics corresponding to the graph tooltip labels in more detail."],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n"],[6,[37,14],[[30,[36,13],[[35,3,["labels"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[1,[32,3]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,2]],[13],[2,"\\n"]],"parameters":[2,3]}]]],[2," "],[13],[2,"\\n"],[6,[37,15],[[35,3,["labels"]]],null,[["default"],[{"statements":[[2," "],[10,"span"],[14,0,"no-data"],[12],[2,"No metrics loaded."],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"button"],[14,0,"type-cancel"],[15,"onclick",[30,[36,7],[[32,0],[32,1,["close"]]],null]],[14,4,"button"],[12],[2,"\\n Close\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["error","optional","on","data","if","hash","uri","action","mut","not","on-window","did-insert","empty","-each-in","each","unless"]}',meta:{moduleName:"consul-ui/components/topology-metrics/series/index.hbs"}}) -t.default.extend(n.default) -var u=Ember._setComponentTemplate(o,Ember.Component.extend({data:null,empty:!1,actions:{redraw:function(){this.drawGraphs()},change:function(e){this.set("data",e.data.series),this.drawGraphs(),this.rerender()}},drawGraphs:function(){if(!this.data)return void Ember.set(this,"empty",!0) -let e=this.svg=(0,r.select)(this.element.querySelector("svg.sparkline")) -e.on("mouseover mousemove mouseout",null),e.selectAll("path").remove(),e.selectAll("rect").remove() -let t=e.node().getBoundingClientRect(),n=t.width,o=t.height,u=this.data||{},c=u.data||[],d=u.labels||{},m=u.unitSuffix||"",p=Object.keys(d).filter(e=>"Total"!=e) -if(0==c.length||0==p.length)return void Ember.set(this,"empty",!0) -Ember.set(this,"empty",!1) -let f=(0,s.stack)().keys(p).order(s.stackOrderReverse)(c),b=c.map(e=>{let t=0 -return p.forEach(n=>{t+=e[n]}),t}),h=(0,a.scaleTime)().domain((0,i.extent)(c,e=>e.time)).range([0,n]),v=(0,a.scaleLinear)().domain([0,(0,i.max)(b)]).range([o,0]),y=(0,s.area)().x(e=>h(e.data.time)).y1(e=>v(e[0])).y0(e=>v(e[1])),g=["#DCE0E6","#C73445"].concat(l.schemeTableau10) -p.includes("Outbound")&&(g=["#DCE0E6","#0E40A3"].concat(l.schemeTableau10)) -let O=(0,a.scaleOrdinal)(g).domain(p) -e.selectAll("path").data(f).join("path").attr("fill",({key:e})=>O(e)).attr("stroke",({key:e})=>O(e)).attr("d",y) -let _=e.append("rect").attr("class","cursor").style("visibility","hidden").attr("width",1).attr("height",o).attr("x",0).attr("y",0),P=(0,r.select)(this.element.querySelector(".tooltip")) -for(var w of(P.selectAll(".sparkline-tt-legend").remove(),P.selectAll(".sparkline-tt-sum").remove(),p)){let e=P.append("div").attr("class","sparkline-tt-legend") -e.append("div").attr("class","sparkline-tt-legend-color").style("background-color",O(w)),e.append("span").text(w).append("span").attr("class","sparkline-tt-legend-value")}let E=P.selectAll(".sparkline-tt-legend-value") -p.length>1&&P.append("div").attr("class","sparkline-tt-sum").append("span").text("Total").append("span").attr("class","sparkline-tt-sum-value") -let k=this -e.on("mouseover",(function(e){P.style("visibility","visible"),_.style("visibility","visible"),k.updateTooltip(e,c,f,b,m,h,P,E,_)})).on("mousemove",(function(e){k.updateTooltip(e,c,f,b,m,h,P,E,_)})).on("mouseout",(function(){P.style("visibility","hidden"),_.style("visibility","hidden")}))},willDestroyElement:function(){this._super(...arguments),void 0!==this.svg&&this.svg.on("mouseover mousemove mouseout",null)},updateTooltip:function(e,n,a,l,s,o,u,d,m){let[p]=(0,r.pointer)(e) -m.attr("x",p) -let f=o.invert(p) -let b=(0,(0,i.bisector)((function(e){return e.time})).left)(n,f) -var h -u.style("left",p-22+"px").select(".sparkline-time").text((h=f,(0,t.default)(h).calendar(null,{sameDay:"[Today at] h:mm:ss A",lastDay:"[Yesterday at] h:mm:ss A",lastWeek:"[Last] dddd at h:mm:ss A",sameElse:"MMM DD at h:mm:ss A"}))),u.select(".sparkline-tt-sum-value").text(`${c(l[b])}${s}`),d.nodes().forEach((e,t)=>{let n=a[t][b][1]-a[t][b][0];(0,r.select)(e).text(`${c(n)}${s}`)}),m.attr("x",p)}})) -function c(e){return e<1e3?Number.isInteger(e)?""+e:Number(e>=100?e.toPrecision(3):e<1?e.toFixed(2):e.toPrecision(2)):e>=1e3&&e<1e6?+(e/1e3).toPrecision(3)+"k":e>=1e6&&e<1e9?+(e/1e6).toPrecision(3)+"m":e>=1e9&&e<1e12?+(e/1e9).toPrecision(3)+"g":e>=1e12?+(e/1e12).toFixed(0)+"t":void 0}e.default=u})),define("consul-ui/components/topology-metrics/source-type/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"g20EXkUJ",block:'{"symbols":["@source"],"statements":[[11,"span"],[24,0,"topology-metrics-source-type"],[4,[38,2],[[30,[36,1],[[30,[36,0],["components.consul.topology-metrics.source-type.",[32,1],".tooltip"],null]],null]],null],[12],[2,"\\n "],[1,[30,[36,1],[[30,[36,0],["components.consul.topology-metrics.source-type.",[32,1],".text"],null]],null]],[2,"\\n"],[13]],"hasEval":false,"upvars":["concat","t","tooltip"]}',meta:{moduleName:"consul-ui/components/topology-metrics/source-type/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/topology-metrics/stats/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i -function o(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=Ember.HTMLBars.template({id:"vUxWURoJ",block:'{"symbols":["stat","@noMetricsReason","@protocol","@service","@endpoint","@dc","@partition","@nspace","&attrs"],"statements":[[6,[37,11],[[30,[36,10],[[32,2]],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange","@onerror"],[[30,[36,7],["/${partition}/${nspace}/${dc}/metrics/${endpoint}/${service}/${protocol}",[30,[36,1],null,[["nspace","partition","dc","endpoint","service","protocol"],[[32,8],[32,7],[32,6],[32,5],[32,4],[30,[36,6],[[32,3],""],null]]]]],null],[30,[36,8],[[32,0],"statsUpdate"],null],[30,[36,8],[[32,0],[30,[36,9],[[35,0]],null]],[["value"],["error"]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[11,"div"],[17,9],[24,0,"topology-metrics-stats"],[12],[2,"\\n"],[6,[37,11],[[35,12]],null,[["default","else"],[{"statements":[[6,[37,5],[[30,[36,4],[[30,[36,4],[[35,3]],null]],null]],null,[["default","else"],[{"statements":[[2," "],[11,"dl"],[4,[38,2],[[32,1,["desc"]]],[["options"],[[30,[36,1],null,[["allowHTML"],[true]]]]]],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[1,[32,1,["value"]]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,1,["label"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]},{"statements":[[2," "],[10,"span"],[12],[2,"No Metrics Available"],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[8,"topology-metrics/status",[],[["@noMetricsReason","@error"],[[32,2],[34,0]]],null],[2,"\\n"]],"parameters":[]}]]],[13]],"hasEval":false,"upvars":["error","hash","tooltip","stats","-track-array","each","or","uri","action","mut","not","if","hasLoaded"]}',meta:{moduleName:"consul-ui/components/topology-metrics/stats/index.hbs"}}) -let d=(n=Ember._tracked,r=Ember._tracked,a=Ember._action,l=class extends t.default{constructor(...e){super(...e),o(this,"stats",s,this),o(this,"hasLoaded",i,this)}statsUpdate(e){if("summary-for-service"==this.args.endpoint)this.stats=e.data.stats -else{let t=this.args.nspace||"" -0===t.length&&(t="default") -let n=`${this.args.item}.${t}.${this.args.dc}` -this.stats=e.data.stats[n]}this.stats=(this.stats||[]).slice(0,4),this.hasLoaded=!0}},s=u(l.prototype,"stats",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return null}}),i=u(l.prototype,"hasLoaded",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return!1}}),u(l.prototype,"statsUpdate",[a],Object.getOwnPropertyDescriptor(l.prototype,"statsUpdate"),l.prototype),l) -e.default=d,Ember._setComponentTemplate(c,d)})),define("consul-ui/components/topology-metrics/status/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"nZPL6KB3",block:'{"symbols":["@error","@noMetricsReason"],"statements":[[6,[37,1],[[30,[36,4],[[32,2],[32,1]],null]],null,[["default","else"],[{"statements":[[2," "],[10,"span"],[14,0,"topology-metrics-status-error"],[12],[2,"\\n"],[6,[37,1],[[30,[36,3],[[32,2],"ingress-gateway"],null]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,0],["components.consul.topology-metrics.status.ingress-gateway"],null]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[30,[36,3],[[32,2],"remote-dc"],null]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,0],["components.consul.topology-metrics.status.error"],null]],[2,"\\n "],[11,"span"],[4,[38,2],[[30,[36,0],["components.consul.topology-metrics.status.remote-dc"],null]],null],[12],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,1],[[32,1]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,0],["components.consul.topology-metrics.status.error"],null]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"span"],[14,0,"topology-metrics-status-loader"],[12],[1,[30,[36,0],["components.consul.topology-metrics.status.loading"],null]],[13],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["t","if","tooltip","eq","or"]}',meta:{moduleName:"consul-ui/components/topology-metrics/status/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/components/topology-metrics/up-lines/index",["exports","@glimmer/component"],(function(e,t){var n,r,a,l,s,i -function o(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c=Ember.HTMLBars.template({id:"JzB9jHPV",block:'{"symbols":["item","line","@service","@oncreate","@view","@center","@lines","@items"],"statements":[[6,[37,0],[[30,[36,14],[[32,7,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[11,"svg"],[16,"viewBox",[30,[36,1],[[32,6,["x"]]," ",[32,5,["y"]]," ",[32,5,["width"]]," ",[32,5,["height"]]],null]],[24,"preserveAspectRatio","none"],[4,[38,10],[[32,0,["getIconPositions"]]],null],[4,[38,11],[[32,0,["getIconPositions"]],[32,7]],null],[12],[2,"\\n "],[10,"defs"],[12],[2,"\\n "],[10,"marker"],[15,1,[30,[36,1],[[32,0,["guid"]],"-allow-dot"],null]],[14,0,"allow-dot"],[14,"viewBox","-2 -2 15 15"],[14,"refX","6"],[14,"refY","6"],[14,"markerWidth","6"],[14,"markerHeight","6"],[12],[2,"\\n "],[10,"circle"],[14,"cx","6"],[14,"cy","6"],[14,"r","6"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[10,"marker"],[15,1,[30,[36,1],[[32,0,["guid"]],"-allow-arrow"],null]],[14,0,"allow-arrow"],[14,"viewBox","-1 -1 12 12"],[14,"refX","5"],[14,"refY","5"],[14,"markerWidth","6"],[14,"markerHeight","6"],[14,"orient","auto-start-reverse"],[12],[2,"\\n "],[10,"polygon"],[14,"points","0 0 10 5 0 10"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[10,"marker"],[15,1,[30,[36,1],[[32,0,["guid"]],"-deny-dot"],null]],[14,0,"deny-dot"],[14,"viewBox","-2 -2 15 15"],[14,"refX","6"],[14,"refY","6"],[14,"markerWidth","6"],[14,"markerHeight","6"],[12],[2,"\\n "],[10,"circle"],[14,"cx","6"],[14,"cy","6"],[14,"r","6"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[10,"marker"],[15,1,[30,[36,1],[[32,0,["guid"]],"-deny-arrow"],null]],[14,0,"deny-arrow"],[14,"viewBox","-1 -1 12 12"],[14,"refX","5"],[14,"refY","5"],[14,"markerWidth","6"],[14,"markerHeight","6"],[14,"orient","auto-start-reverse"],[12],[2,"\\n "],[10,"polygon"],[14,"points","0 0 10 5 0 10"],[12],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[6,[37,13],[[30,[36,12],[[30,[36,12],[[32,7]],null]],null]],null,[["default"],[{"statements":[[6,[37,0],[[30,[36,9],[[32,2,["permission"]],"deny"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"path"],[15,1,[30,[36,1],[[32,0,["guid"]],[32,2,["id"]]],null]],[15,"d",[30,[36,8],[[32,2,["dest"]]],[["src"],[[32,2,["src"]]]]]],[15,"marker-start",[30,[36,1],["url(#",[32,0,["guid"]],"-deny-dot)"],null]],[15,"marker-end",[30,[36,1],["url(#",[32,0,["guid"]],"-deny-arrow)"],null]],[15,"data-permission",[32,2,["permission"]]],[12],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"path"],[15,1,[30,[36,1],[[32,0,["guid"]],[32,2,["id"]]],null]],[15,"d",[30,[36,8],[[32,2,["dest"]]],[["src"],[[32,2,["src"]]]]]],[15,"marker-start",[30,[36,1],["url(#",[32,0,["guid"]],"-allow-dot)"],null]],[15,"marker-end",[30,[36,1],["url(#",[32,0,["guid"]],"-allow-arrow)"],null]],[15,"data-permission",[32,2,["permission"]]],[12],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[2]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,13],[[30,[36,12],[[30,[36,12],[[32,8]],null]],null]],null,[["default"],[{"statements":[[6,[37,0],[[30,[36,7],[[30,[36,6],[[32,1,["Datacenter"]],""],null],[30,[36,5],[[30,[36,4],[[32,1,["Intention","Allowed"]]],null],[32,1,["Intention","HasPermissions"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"topology-metrics/popover",[],[["@type","@position","@item","@disabled","@oncreate"],[[30,[36,0],[[32,1,["Intention","HasPermissions"]],"l7","deny"],null],[30,[36,2],["id",[30,[36,1],[[32,0,["guid"]],[32,1,["Namespace"]],[32,1,["Name"]]],null],[32,0,["iconPositions"]]],null],[32,1],false,[30,[36,3],[[32,0],[32,4],[32,3],[32,1]],null]]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["if","concat","find-by","action","not","or","not-eq","and","svg-curve","eq","did-insert","did-update","-track-array","each","gt"]}',meta:{moduleName:"consul-ui/components/topology-metrics/up-lines/index.hbs"}}) -let d=(n=Ember._tracked,r=Ember.inject.service("dom"),a=Ember._action,l=class extends t.default{constructor(...e){super(...e),o(this,"iconPositions",s,this),o(this,"dom",i,this)}get guid(){return this.dom.guid(this)}getIconPositions(){const e=this.args.center,t=this.args.view,n=[...document.querySelectorAll("#upstream-lines path")] -this.iconPositions=n.map(n=>{const r=parseFloat(n.getTotalLength()),a=n.getPointAtLength(Math.ceil(.666*r)) -return{id:n.id,x:Math.round(a.x-e.x),y:Math.round(a.y-t.y)}})}},s=u(l.prototype,"iconPositions",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i=u(l.prototype,"dom",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(l.prototype,"getIconPositions",[a],Object.getOwnPropertyDescriptor(l.prototype,"getIconPositions"),l.prototype),l) -e.default=d,Ember._setComponentTemplate(c,d)})),define("consul-ui/components/torii-iframe-placeholder",["exports","torii/components/torii-iframe-placeholder"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/components/yield-slot",["exports","block-slots/components/yield-slot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/components/yield/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=Ember.HTMLBars.template({id:"TxsW/zUX",block:'{"symbols":["&default"],"statements":[[18,1,null],[2,"\\n"]],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/components/yield/index.hbs"}}) -var n=Ember._setComponentTemplate(t,Ember._templateOnlyComponent()) -e.default=n})),define("consul-ui/controllers/application",["exports","consul-ui/utils/routing/transitionable"],(function(e,t){var n,r,a,l,s,i,o,u -function c(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function d(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let m=(n=Ember.inject.service("router"),r=Ember.inject.service("store"),a=Ember.inject.service("feedback"),l=Ember._action,s=class extends Ember.Controller{constructor(...e){super(...e),c(this,"router",i,this),c(this,"store",o,this),c(this,"feedback",u,this)}reauthorize(e){this.feedback.execute(()=>{this.store.invalidate() -const n={} -if(e.data){const t=e.data -if(void 0!==this.nspace){const e=Ember.get(t,"Namespace")||this.nspace.Name -e!==this.nspace.Name&&(n.nspace=""+e)}}const r=Ember.getOwner(this),a=this.router.currentRoute.name,l=r.lookup("route:"+a) -return r.lookup("route:application").refresh().promise.catch((function(){})).then(e=>a!==this.router.currentRouteName||void 0!==n.nspace?l.transitionTo(...(0,t.default)(this.router.currentRoute,n,r)):e)},e.type,(function(e){return e}),{})}},i=d(s.prototype,"router",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=d(s.prototype,"store",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=d(s.prototype,"feedback",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d(s.prototype,"reauthorize",[l],Object.getOwnPropertyDescriptor(s.prototype,"reauthorize"),s.prototype),s) -e.default=m})),define("consul-ui/controllers/dc/acls/policies/create",["exports","consul-ui/controllers/dc/acls/policies/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/acls/policies/edit",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("form"),n=class extends Ember.Controller{constructor(...e){var t,n,a,l -super(...e),t=this,n="builder",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}init(){super.init(...arguments),this.form=this.builder.form("policy")}setProperties(e){super.setProperties(Object.keys(e).reduce((e,t)=>{switch(t){case"item":e[t]=this.form.setData(e[t]).getData()}return e},e))}},l=n.prototype,s="builder",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/controllers/dc/acls/roles/create",["exports","consul-ui/controllers/dc/acls/roles/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/acls/roles/edit",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("form"),n=class extends Ember.Controller{constructor(...e){var t,n,a,l -super(...e),t=this,n="builder",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}init(){super.init(...arguments),this.form=this.builder.form("role")}setProperties(e){super.setProperties(Object.keys(e).reduce((e,t)=>{switch(t){case"item":e[t]=this.form.setData(e[t]).getData()}return e},e))}},l=n.prototype,s="builder",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/controllers/dc/acls/tokens/create",["exports","consul-ui/controllers/dc/acls/tokens/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/controllers/dc/acls/tokens/edit",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Controller.extend({dom:Ember.inject.service("dom"),builder:Ember.inject.service("form"),isScoped:!1,init:function(){this._super(...arguments),this.form=this.builder.form("token")},setProperties:function(e){this._super(Object.keys(e).reduce((e,t)=>{switch(t){case"item":e[t]=this.form.setData(e[t]).getData()}return e},e))},actions:{change:function(e,t){const n=this.dom.normalizeEvent(e,t),r=this.form -try{r.handleEvent(n)}catch(a){throw n.target.name,a}}}}) -e.default=t})),define("consul-ui/data-adapter",["exports","@ember-data/debug"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/decorators/data-source",["exports","wayfarer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.match=e.default=void 0 -const n=(0,t.default)() -e.default=e=>(t,r,a)=>(n.on(e,(function(e,n,r){const l=n.lookup("service:container").get(t) -return t=>a.value.apply(l,[e,t,r])})),a) -e.match=e=>n.match(e)})),define("consul-ui/decorators/replace",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.nullValue=e.replace=void 0 -const t=(e,t)=>(n,r,a)=>({get:function(){const n=a.get.apply(this,arguments) -return n===e?t:n},set:function(){return a.set.apply(this,arguments)}}) -e.replace=t -e.nullValue=function(e){return t(null,e)} -var n=t -e.default=n})),define("consul-ui/env",["exports","consul-ui/config/environment","consul-ui/utils/get-environment"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.env=void 0 -const r=(0,n.default)(t.default,window,document) -e.env=r})),define("consul-ui/filter/predicates/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={kind:{kubernetes:(e,t)=>e.Type===t,jwt:(e,t)=>e.Type===t,oidc:(e,t)=>e.Type===t},source:{local:(e,t)=>e.TokenLocality===t,global:(e,t)=>e.TokenLocality===t}}})),define("consul-ui/filter/predicates/health-check",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={status:{passing:(e,t)=>e.Status===t,warning:(e,t)=>e.Status===t,critical:(e,t)=>e.Status===t},kind:{service:(e,t)=>e.Kind===t,node:(e,t)=>e.Kind===t},check:{serf:(e,t)=>e.Type===t,script:(e,t)=>e.Type===t,http:(e,t)=>e.Type===t,tcp:(e,t)=>e.Type===t,ttl:(e,t)=>e.Type===t,docker:(e,t)=>e.Type===t,grpc:(e,t)=>e.Type===t,alias:(e,t)=>e.Type===t}}})),define("consul-ui/filter/predicates/intention",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={access:{allow:(e,t)=>e.Action===t,deny:(e,t)=>e.Action===t,"app-aware":e=>void 0===e.Action}}})),define("consul-ui/filter/predicates/kv",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={kind:{folder:e=>e.isFolder,key:e=>!e.isFolder}}})),define("consul-ui/filter/predicates/node",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={status:{passing:(e,t)=>e.Status===t,warning:(e,t)=>e.Status===t,critical:(e,t)=>e.Status===t}}})),define("consul-ui/filter/predicates/policy",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={kind:{"global-management":e=>e.isGlobalManagement,standard:e=>!e.isGlobalManagement},datacenter:(e,n)=>void 0===e.Datacenters||t.default.intersectionSize(n,new Set(e.Datacenters))>0} -e.default=n})),define("consul-ui/filter/predicates/service-instance",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={status:{passing:(e,t)=>e.Status===t,warning:(e,t)=>e.Status===t,critical:(e,t)=>e.Status===t,empty:e=>0===e.ServiceChecks.length},source:(e,n)=>0!==t.default.intersectionSize(n,new Set(e.ExternalSources||[]))} -e.default=n})),define("consul-ui/filter/predicates/service",["exports","mnemonist/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={kind:{"ingress-gateway":(e,t)=>e.Kind===t,"terminating-gateway":(e,t)=>e.Kind===t,"mesh-gateway":(e,t)=>e.Kind===t,service:e=>!e.Kind,"in-mesh":e=>e.InMesh,"not-in-mesh":e=>!e.InMesh},status:{passing:(e,t)=>e.MeshStatus===t,warning:(e,t)=>e.MeshStatus===t,critical:(e,t)=>e.MeshStatus===t,empty:e=>0===e.MeshChecksTotal},instance:{registered:e=>e.InstanceCount>0,"not-registered":e=>0===e.InstanceCount},source:(e,n)=>0!==t.default.intersectionSize(n,new Set(e.ExternalSources||[]))||n.includes(e.Partition)} -e.default=n})),define("consul-ui/filter/predicates/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={kind:{"global-management":e=>e.isGlobalManagement,global:e=>!e.Local,local:e=>e.Local}}})) -define("consul-ui/flash/object",["exports","ember-cli-flash/flash/object"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/formats",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={time:{hhmmss:{hour:"numeric",minute:"numeric",second:"numeric"}},date:{hhmmss:{hour:"numeric",minute:"numeric",second:"numeric"}},number:{compact:{notation:"compact"},EUR:{style:"currency",currency:"EUR",minimumFractionDigits:2,maximumFractionDigits:2},USD:{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}}}})),define("consul-ui/forms/intention",["exports","consul-ui/validations/intention","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n="",a=t.default,l=r){return l(n,{}).setValidators(a)} -const r=(0,n.default)()})),define("consul-ui/forms/kv",["exports","consul-ui/validations/kv","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n="",a=t.default,l=r){return l(n,{}).setValidators(a)} -const r=(0,n.default)()})),define("consul-ui/forms/policy",["exports","consul-ui/validations/policy","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n="policy",a=t.default,l=r){return l(n,{Datacenters:{type:"array"}}).setValidators(a)} -const r=(0,n.default)()})),define("consul-ui/forms/role",["exports","consul-ui/validations/role","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n="role",a=t.default,l=r){return l(n,{}).setValidators(a).add(e.form("policy"))} -const r=(0,n.default)()})),define("consul-ui/forms/token",["exports","consul-ui/validations/token","consul-ui/utils/form/builder"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n="",a=t.default,l=r){return l(n,{}).setValidators(a).add(e.form("policy")).add(e.form("role"))} -const r=(0,n.default)()})),define("consul-ui/helpers/-element",["exports","ember-element-helper/helpers/-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/-has-block-params",["exports","ember-named-blocks-polyfill/helpers/-has-block-params"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/-has-block",["exports","ember-named-blocks-polyfill/helpers/-has-block"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/-is-named-block-invocation",["exports","ember-named-blocks-polyfill/helpers/-is-named-block-invocation"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/-named-block-invocation",["exports","ember-named-blocks-polyfill/helpers/-named-block-invocation"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/abs",["exports","ember-math-helpers/helpers/abs"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"abs",{enumerable:!0,get:function(){return t.abs}})})),define("consul-ui/helpers/acos",["exports","ember-math-helpers/helpers/acos"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"acos",{enumerable:!0,get:function(){return t.acos}})})),define("consul-ui/helpers/acosh",["exports","ember-math-helpers/helpers/acosh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"acosh",{enumerable:!0,get:function(){return t.acosh}})})),define("consul-ui/helpers/add",["exports","ember-math-helpers/helpers/add"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"add",{enumerable:!0,get:function(){return t.add}})})),define("consul-ui/helpers/adopt-styles",["exports","@lit/reactive-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends Ember.Helper{compute([e,n],r){Array.isArray(n)||(n=[n]),(0,t.adoptStyles)(e,n)}}e.default=n})),define("consul-ui/helpers/and",["exports","ember-truth-helpers/helpers/and"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"and",{enumerable:!0,get:function(){return t.and}})})),define("consul-ui/helpers/app-version",["exports","consul-ui/config/environment","ember-cli-app-version/utils/regexp"],(function(e,t,n){function r(e,r={}){const a=t.default.APP.version -let l=r.versionOnly||r.hideSha,s=r.shaOnly||r.hideVersion,i=null -return l&&(r.showExtended&&(i=a.match(n.versionExtendedRegExp)),i||(i=a.match(n.versionRegExp))),s&&(i=a.match(n.shaRegExp)),i?i[0]:a}Object.defineProperty(e,"__esModule",{value:!0}),e.appVersion=r,e.default=void 0 -var a=Ember.Helper.helper(r) -e.default=a})),define("consul-ui/helpers/append",["exports","ember-composable-helpers/helpers/append"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"append",{enumerable:!0,get:function(){return t.append}})})),define("consul-ui/helpers/array-concat",["exports","ember-array-fns/helpers/array-concat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayConcat",{enumerable:!0,get:function(){return t.arrayConcat}})})),define("consul-ui/helpers/array-every",["exports","ember-array-fns/helpers/array-every"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayEvery",{enumerable:!0,get:function(){return t.arrayEvery}})})),define("consul-ui/helpers/array-filter",["exports","ember-array-fns/helpers/array-filter"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayFilter",{enumerable:!0,get:function(){return t.arrayFilter}})})),define("consul-ui/helpers/array-find-index",["exports","ember-array-fns/helpers/array-find-index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayFindIndex",{enumerable:!0,get:function(){return t.arrayFindIndex}})})),define("consul-ui/helpers/array-find",["exports","ember-array-fns/helpers/array-find"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayFind",{enumerable:!0,get:function(){return t.arrayFind}})})),define("consul-ui/helpers/array-includes",["exports","ember-array-fns/helpers/array-includes"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIncludes",{enumerable:!0,get:function(){return t.arrayIncludes}})})),define("consul-ui/helpers/array-index-of",["exports","ember-array-fns/helpers/array-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIndexOf",{enumerable:!0,get:function(){return t.arrayIndexOf}})})),define("consul-ui/helpers/array-is-array",["exports","ember-array-fns/helpers/array-is-array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIsArray",{enumerable:!0,get:function(){return t.arrayIsArray}})})),define("consul-ui/helpers/array-is-first-element",["exports","ember-array-fns/helpers/array-is-first-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIsFirstElement",{enumerable:!0,get:function(){return t.arrayIsFirstElement}})})),define("consul-ui/helpers/array-is-last-element",["exports","ember-array-fns/helpers/array-is-last-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayIsLastElement",{enumerable:!0,get:function(){return t.arrayIsLastElement}})})) -define("consul-ui/helpers/array-join",["exports","ember-array-fns/helpers/array-join"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayJoin",{enumerable:!0,get:function(){return t.arrayJoin}})})),define("consul-ui/helpers/array-last-index-of",["exports","ember-array-fns/helpers/array-last-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayLastIndexOf",{enumerable:!0,get:function(){return t.arrayLastIndexOf}})})),define("consul-ui/helpers/array-map",["exports","ember-array-fns/helpers/array-map"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayMap",{enumerable:!0,get:function(){return t.arrayMap}})})),define("consul-ui/helpers/array-reduce",["exports","ember-array-fns/helpers/array-reduce"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayReduce",{enumerable:!0,get:function(){return t.arrayReduce}})})),define("consul-ui/helpers/array-reverse",["exports","ember-array-fns/helpers/array-reverse"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arrayReverse",{enumerable:!0,get:function(){return t.arrayReverse}})})),define("consul-ui/helpers/array-slice",["exports","ember-array-fns/helpers/array-slice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arraySlice",{enumerable:!0,get:function(){return t.arraySlice}})})),define("consul-ui/helpers/array-some",["exports","ember-array-fns/helpers/array-some"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arraySome",{enumerable:!0,get:function(){return t.arraySome}})})),define("consul-ui/helpers/array-sort",["exports","ember-array-fns/helpers/array-sort"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arraySort",{enumerable:!0,get:function(){return t.arraySort}})})),define("consul-ui/helpers/array-splice",["exports","ember-array-fns/helpers/array-splice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"arraySplice",{enumerable:!0,get:function(){return t.arraySplice}})})),define("consul-ui/helpers/asin",["exports","ember-math-helpers/helpers/asin"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"asin",{enumerable:!0,get:function(){return t.asin}})})),define("consul-ui/helpers/asinh",["exports","ember-math-helpers/helpers/asinh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"asinh",{enumerable:!0,get:function(){return t.asinh}})})),define("consul-ui/helpers/assign",["exports","ember-assign-helper/helpers/assign"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"assign",{enumerable:!0,get:function(){return t.assign}})})),define("consul-ui/helpers/atan",["exports","ember-math-helpers/helpers/atan"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"atan",{enumerable:!0,get:function(){return t.atan}})})),define("consul-ui/helpers/atan2",["exports","ember-math-helpers/helpers/atan2"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"atan2",{enumerable:!0,get:function(){return t.atan2}})})),define("consul-ui/helpers/atanh",["exports","ember-math-helpers/helpers/atanh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"atanh",{enumerable:!0,get:function(){return t.atanh}})})),define("consul-ui/helpers/atob",["exports","consul-ui/utils/atob"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Helper.helper((function([e=""]){return(0,t.default)(e)})) -e.default=n})),define("consul-ui/helpers/block-params",["exports","block-slots/helpers/block-params"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cached-model",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class t extends Ember.Helper{compute([e,t],n){return Ember.getOwner(this).lookup("service:repository/"+e).cached(t)}}e.default=t})),define("consul-ui/helpers/camelize",["exports","ember-cli-string-helpers/helpers/camelize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"camelize",{enumerable:!0,get:function(){return t.camelize}})})),define("consul-ui/helpers/can",["exports","ember-can/helpers/can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{_addAbilityObserver(e,t){this.isDestroyed||this.isDestroying||super._addAbilityObserver(...arguments)}}e.default=n})),define("consul-ui/helpers/cancel-all",["exports","ember-concurrency/helpers/cancel-all"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/cannot",["exports","ember-can/helpers/cannot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/capitalize",["exports","ember-cli-string-helpers/helpers/capitalize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"capitalize",{enumerable:!0,get:function(){return t.capitalize}})})),define("consul-ui/helpers/cbrt",["exports","ember-math-helpers/helpers/cbrt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"cbrt",{enumerable:!0,get:function(){return t.cbrt}})})),define("consul-ui/helpers/ceil",["exports","ember-math-helpers/helpers/ceil"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"ceil",{enumerable:!0,get:function(){return t.ceil}})})),define("consul-ui/helpers/changeset-get",["exports","ember-changeset/helpers/changeset-get"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/changeset-set",["exports","ember-changeset/helpers/changeset-set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"changesetSet",{enumerable:!0,get:function(){return t.changesetSet}})})),define("consul-ui/helpers/changeset",["exports","ember-changeset-validations/helpers/changeset"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"changeset",{enumerable:!0,get:function(){return t.changeset}})})),define("consul-ui/helpers/chunk",["exports","ember-composable-helpers/helpers/chunk"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"chunk",{enumerable:!0,get:function(){return t.chunk}})})),define("consul-ui/helpers/class-map",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper(e=>{const t=e.filter(Boolean).filter(e=>"string"==typeof e||e[e.length-1]).map(e=>"string"==typeof e?e:e[0]).join(" ") -return t.length>0?t:void 0}) -e.default=t})) -define("consul-ui/helpers/classify",["exports","ember-cli-string-helpers/helpers/classify"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"classify",{enumerable:!0,get:function(){return t.classify}})})),define("consul-ui/helpers/clz32",["exports","ember-math-helpers/helpers/clz32"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"clz32",{enumerable:!0,get:function(){return t.clz32}})})),define("consul-ui/helpers/collection",["exports","consul-ui/models/service","consul-ui/models/service-instance"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r={service:t.Collection,"service-instance":n.Collection} -class a{}class l extends Ember.Helper{compute([e,t],n){if(e.length>0){const t=Ember.get(e,"firstObject")._internalModel.modelName -return new(0,r[t])(e)}return new a}}e.default=l})),define("consul-ui/helpers/compact",["exports","ember-composable-helpers/helpers/compact"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/compute",["exports","ember-composable-helpers/helpers/compute"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"compute",{enumerable:!0,get:function(){return t.compute}})})),define("consul-ui/helpers/contains",["exports","ember-composable-helpers/helpers/contains"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"contains",{enumerable:!0,get:function(){return t.contains}})})),define("consul-ui/helpers/cos",["exports","ember-math-helpers/helpers/cos"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"cos",{enumerable:!0,get:function(){return t.cos}})})),define("consul-ui/helpers/cosh",["exports","ember-math-helpers/helpers/cosh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"cosh",{enumerable:!0,get:function(){return t.cosh}})})),define("consul-ui/helpers/css-map",["exports","@lit/reactive-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Helper.helper(e=>e.filter(e=>e instanceof t.CSSResult||e[e.length-1]).map(e=>e instanceof t.CSSResult?e:e[0])) -e.default=n})),define("consul-ui/helpers/css",["exports","@lit/reactive-element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends Ember.Helper{compute([e],n){return(0,t.css)([e])}}e.default=n})),define("consul-ui/helpers/dasherize",["exports","ember-cli-string-helpers/helpers/dasherize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"dasherize",{enumerable:!0,get:function(){return t.dasherize}})})),define("consul-ui/helpers/dec",["exports","ember-composable-helpers/helpers/dec"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"dec",{enumerable:!0,get:function(){return t.dec}})})),define("consul-ui/helpers/did-insert",["exports","ember-render-helpers/helpers/did-insert"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/did-update",["exports","ember-render-helpers/helpers/did-update"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/div",["exports","ember-math-helpers/helpers/div"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"div",{enumerable:!0,get:function(){return t.div}})})),define("consul-ui/helpers/document-attrs",["exports","mnemonist/multi-map"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=new Map,s=new WeakMap -let i=(n=Ember.inject.service("-document"),r=class extends Ember.Helper{constructor(...e){var t,n,r,l -super(...e),t=this,n="document",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}compute(e,t){this.synchronize(this.document.documentElement,t)}willDestroy(){this.synchronize(this.document.documentElement),s.delete(this)}synchronize(e,n){const r=s.get(this) -return r&&Object.entries(r).forEach(([e,t])=>{let n=l.get(e) -void 0!==n&&[...new Set(t.split(" "))].map(e=>n.remove(e,this))}),n&&(s.set(this,n),[...Object.entries(n)].forEach(([e,n])=>{let r=l.get(e) -void 0===r&&(r=new t.default(Set),l.set(e,r)),[...new Set(n.split(" "))].map(e=>{0===r.count(e)&&r.set(e,null),r.set(e,this)})})),[...l.entries()].forEach(([t,n])=>{let r="attr" -"class"===t?r=t:t.startsWith("data-")&&(r="data"),[...n.keys()].forEach(a=>{if(1===n.count(a)){switch(r){case"class":e.classList.remove(a)}n.delete(a),0===n.size&&l.delete(t)}else switch(r){case"class":e.classList.add(a)}})}),l}},o=r.prototype,u="document",c=[n],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(d).forEach((function(e){p[e]=d[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=c.slice().reverse().reduce((function(e,t){return t(o,u,e)||e}),p),m&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(m):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(o,u,p),p=null),a=p,r) -var o,u,c,d,m,p -e.default=i})),define("consul-ui/helpers/dom-position",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class t extends Ember.Helper{compute([e],{from:t,offset:n=!1}){return r=>{if("function"==typeof e){let a,l -if(n)l=r.currentTarget,a={width:l.offsetWidth,left:l.offsetLeft,height:l.offsetHeight,top:l.offsetTop} -else if(l=r.target,a=l.getBoundingClientRect(),void 0!==t){const e=t.getBoundingClientRect() -a.x=a.x-e.x,a.y=a.y-e.y}return e(a)}{const t=r.target,n=t.getBoundingClientRect() -e.forEach(([e,r])=>{t.style[r]=n[e]+"px"})}}}}e.default=t})),define("consul-ui/helpers/drop",["exports","ember-composable-helpers/helpers/drop"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/duration-from",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("temporal"),n=class extends Ember.Helper{constructor(...e){var t,n,a,l -super(...e),t=this,n="temporal",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}compute([e],t){return this.temporal.durationFrom(e)}},l=n.prototype,s="temporal",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/helpers/element",["exports","ember-element-helper/helpers/element"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/ember-power-select-is-group",["exports","ember-power-select/helpers/ember-power-select-is-group"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"emberPowerSelectIsGroup",{enumerable:!0,get:function(){return t.emberPowerSelectIsGroup}})})),define("consul-ui/helpers/ember-power-select-is-selected",["exports","ember-power-select/helpers/ember-power-select-is-selected"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"emberPowerSelectIsSelected",{enumerable:!0,get:function(){return t.emberPowerSelectIsSelected}})})),define("consul-ui/helpers/ensure-safe-component",["exports","@embroider/util"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.EnsureSafeComponentHelper}})})),define("consul-ui/helpers/entries",["exports","ember-composable-helpers/helpers/entries"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"entries",{enumerable:!0,get:function(){return t.entries}})})),define("consul-ui/helpers/env",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("env"),n=class extends Ember.Helper{constructor(...e){var t,n,a,l -super(...e),t=this,n="env",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}compute([e,t=""],n){const r=this.env.var(e) -return null!=r?r:t}},l=n.prototype,s="env",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/helpers/eq",["exports","ember-truth-helpers/helpers/equal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"equal",{enumerable:!0,get:function(){return t.equal}})})),define("consul-ui/helpers/exp",["exports","ember-math-helpers/helpers/exp"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"exp",{enumerable:!0,get:function(){return t.exp}})})),define("consul-ui/helpers/expm1",["exports","ember-math-helpers/helpers/expm1"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"expm1",{enumerable:!0,get:function(){return t.expm1}})})),define("consul-ui/helpers/filter-by",["exports","ember-composable-helpers/helpers/filter-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/filter",["exports","ember-composable-helpers/helpers/filter"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/helpers/find-by",["exports","ember-composable-helpers/helpers/find-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/fixed-grid-layout",["exports","ember-collection/layouts/grid"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Helper.helper((function(e){return new t.default(e[0],e[1])})) -e.default=n})),define("consul-ui/helpers/flatten-property",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper((function e([t,n],r){const a=r.pages||[] -return a.push(...t.pages),t.children.forEach(t=>e([t],{pages:a})),a})) -e.default=t})),define("consul-ui/helpers/flatten",["exports","ember-composable-helpers/helpers/flatten"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"flatten",{enumerable:!0,get:function(){return t.flatten}})})),define("consul-ui/helpers/floor",["exports","ember-math-helpers/helpers/floor"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"floor",{enumerable:!0,get:function(){return t.floor}})})),define("consul-ui/helpers/format-date",["exports","ember-intl/helpers/format-date"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-message",["exports","ember-intl/helpers/format-message"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-number",["exports","ember-intl/helpers/format-number"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-relative",["exports","ember-intl/helpers/format-relative"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/format-short-time",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper((function([e]){let t,n,r,a -a=Math.floor(e/1e3),r=Math.floor(a/60),a%=60,n=Math.floor(r/60),r%=60,t=Math.floor(n/24),n%=24 -const l=t,s=n,i=r,o=a -switch(!0){case 0!==l:return l+"d" -case 0!==s:return s+"h" -case 0!==i:return i+"m" -default:return o+"s"}})) -e.default=t})),define("consul-ui/helpers/format-time",["exports","ember-intl/helpers/format-time"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/from-entries",["exports","ember-composable-helpers/helpers/from-entries"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"fromEntries",{enumerable:!0,get:function(){return t.fromEntries}})})),define("consul-ui/helpers/fround",["exports","ember-math-helpers/helpers/fround"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"fround",{enumerable:!0,get:function(){return t.fround}})})),define("consul-ui/helpers/gcd",["exports","ember-math-helpers/helpers/gcd"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"gcd",{enumerable:!0,get:function(){return t.gcd}})})),define("consul-ui/helpers/group-by",["exports","ember-composable-helpers/helpers/group-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/gt",["exports","ember-truth-helpers/helpers/gt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"gt",{enumerable:!0,get:function(){return t.gt}})})),define("consul-ui/helpers/gte",["exports","ember-truth-helpers/helpers/gte"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"gte",{enumerable:!0,get:function(){return t.gte}})})),define("consul-ui/helpers/has-next",["exports","ember-composable-helpers/helpers/has-next"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"hasNext",{enumerable:!0,get:function(){return t.hasNext}})})),define("consul-ui/helpers/has-previous",["exports","ember-composable-helpers/helpers/has-previous"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"hasPrevious",{enumerable:!0,get:function(){return t.hasPrevious}})})),define("consul-ui/helpers/href-to",["exports","consul-ui/utils/routing/transitionable","consul-ui/utils/routing/wildcard","consul-ui/router"],(function(e,t,n,r){var a,l,s,i -function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.hrefTo=void 0 -const u=(0,n.default)(r.routes),c=function(e,n,r={}){const a=e.lookup("router:main").location,l=e.lookup("service:router") -let s=n.slice(0),i=s.shift(),o=r.params||{} -"."===i&&(s=(0,t.default)(l.currentRoute,o,e),i=s.shift()) -try{return u(i)&&(s=s.map(e=>e.split("/").map(encodeURIComponent).join("/"))),a.hrefTo(i,s,o)}catch(c){throw c.constructor===Error&&(c.message=`${c.message} For "${n[0]}:${JSON.stringify(n.slice(1))}"`),c}} -e.hrefTo=c -let d=(a=Ember.inject.service("router"),l=Ember._action,s=class extends Ember.Helper{constructor(...e){var t,n,r,a -super(...e),t=this,n="router",a=this,(r=i)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}init(){super.init(...arguments),this.router.on("routeWillChange",this.routeWillChange)}compute(e,t){return c(Ember.getOwner(this),e,t)}routeWillChange(e){this.recompute()}willDestroy(){this.router.off("routeWillChange",this.routeWillChange),super.willDestroy()}},i=o(s.prototype,"router",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o(s.prototype,"routeWillChange",[l],Object.getOwnPropertyDescriptor(s.prototype,"routeWillChange"),s.prototype),s) -e.default=d})),define("consul-ui/helpers/html-safe",["exports","ember-cli-string-helpers/helpers/html-safe"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"htmlSafe",{enumerable:!0,get:function(){return t.htmlSafe}})})),define("consul-ui/helpers/humanize",["exports","ember-cli-string-helpers/helpers/humanize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"humanize",{enumerable:!0,get:function(){return t.humanize}})})),define("consul-ui/helpers/hypot",["exports","ember-math-helpers/helpers/hypot"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"hypot",{enumerable:!0,get:function(){return t.hypot}})})),define("consul-ui/helpers/imul",["exports","ember-math-helpers/helpers/imul"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"imul",{enumerable:!0,get:function(){return t.imul}})})),define("consul-ui/helpers/inc",["exports","ember-composable-helpers/helpers/inc"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"inc",{enumerable:!0,get:function(){return t.inc}})})),define("consul-ui/helpers/intersect",["exports","ember-composable-helpers/helpers/intersect"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/invoke",["exports","ember-composable-helpers/helpers/invoke"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"invoke",{enumerable:!0,get:function(){return t.invoke}})})),define("consul-ui/helpers/is-active",["exports","ember-router-helpers/helpers/is-active"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"isActive",{enumerable:!0,get:function(){return t.isActive}})})),define("consul-ui/helpers/is-array",["exports","ember-truth-helpers/helpers/is-array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"isArray",{enumerable:!0,get:function(){return t.isArray}})})),define("consul-ui/helpers/is-empty",["exports","ember-truth-helpers/helpers/is-empty"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/helpers/is-equal",["exports","ember-truth-helpers/helpers/is-equal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"isEqual",{enumerable:!0,get:function(){return t.isEqual}})})),define("consul-ui/helpers/is-href",["exports"],(function(e){var t,n,r,a -function l(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(t=Ember.inject.service("router"),n=Ember._action,r=class extends Ember.Helper{constructor(...e){var t,n,r,l -super(...e),t=this,n="router",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}init(){super.init(...arguments),this.router.on("routeWillChange",this.routeWillChange)}compute([e,...t]){return this.router.currentRouteName.startsWith("nspace.")&&e.startsWith("dc.")&&(e="nspace."+e),void 0!==this.next&&"loading"!==this.next?this.next.startsWith(e):this.router.isActive(e,...t)}routeWillChange(e){this.next=e.to.name.replace(".index",""),this.recompute()}willDestroy(){this.router.off("routeWillChange",this.routeWillChange),super.willDestroy()}},a=l(r.prototype,"router",[t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l(r.prototype,"routeWillChange",[n],Object.getOwnPropertyDescriptor(r.prototype,"routeWillChange"),r.prototype),r) -e.default=s})),define("consul-ui/helpers/is",["exports","ember-can/helpers/can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.is=void 0 -const n=(e,[t,n],r)=>{let{abilityName:a,propertyName:l}=e.abilities.parse(t),s=e.abilities.abilityFor(a,n,r) -return l="function"==typeof s.getCharacteristicProperty?s.getCharacteristicProperty(l):Ember.String.camelize("is-"+l),e._removeAbilityObserver(),e._addAbilityObserver(s,l),Ember.get(s,l)} -e.is=n -class r extends t.default{compute([e,t],r){return n(this,[e,t],r)}}e.default=r})),define("consul-ui/helpers/join",["exports","ember-composable-helpers/helpers/join"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/json-stringify",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper((function(e){try{return JSON.stringify(...e)}catch(t){return e[0].map(t=>JSON.stringify(t,e[1],e[2]))}})) -e.default=t})),define("consul-ui/helpers/keys",["exports","ember-composable-helpers/helpers/keys"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"keys",{enumerable:!0,get:function(){return t.keys}})})),define("consul-ui/helpers/last",["exports"],(function(e){function t([e=""]){switch(!0){case"string"==typeof e:return e.substr(-1)}}Object.defineProperty(e,"__esModule",{value:!0}),e.last=t,e.default=void 0 -var n=Ember.Helper.helper(t) -e.default=n})),define("consul-ui/helpers/lcm",["exports","ember-math-helpers/helpers/lcm"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lcm",{enumerable:!0,get:function(){return t.lcm}})})),define("consul-ui/helpers/left-trim",["exports","consul-ui/utils/left-trim"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Helper.helper((function([e="",n=""]){return(0,t.default)(e,n)})) -e.default=n})),define("consul-ui/helpers/log-e",["exports","ember-math-helpers/helpers/log-e"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"logE",{enumerable:!0,get:function(){return t.logE}})})),define("consul-ui/helpers/log10",["exports","ember-math-helpers/helpers/log10"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"log10",{enumerable:!0,get:function(){return t.log10}})})),define("consul-ui/helpers/log1p",["exports","ember-math-helpers/helpers/log1p"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"log1p",{enumerable:!0,get:function(){return t.log1p}})})),define("consul-ui/helpers/log2",["exports","ember-math-helpers/helpers/log2"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"log2",{enumerable:!0,get:function(){return t.log2}})})),define("consul-ui/helpers/lowercase",["exports","ember-cli-string-helpers/helpers/lowercase"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lowercase",{enumerable:!0,get:function(){return t.lowercase}})})),define("consul-ui/helpers/lt",["exports","ember-truth-helpers/helpers/lt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lt",{enumerable:!0,get:function(){return t.lt}})})),define("consul-ui/helpers/lte",["exports","ember-truth-helpers/helpers/lte"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"lte",{enumerable:!0,get:function(){return t.lte}})})),define("consul-ui/helpers/map-by",["exports","ember-composable-helpers/helpers/map-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/map",["exports","ember-composable-helpers/helpers/map"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/max",["exports","ember-math-helpers/helpers/max"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"max",{enumerable:!0,get:function(){return t.max}})})),define("consul-ui/helpers/merge-checks",["exports","consul-ui/utils/merge-checks"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Helper.helper((function([e,n]){return(0,t.default)(e,n)})) -e.default=n})),define("consul-ui/helpers/min",["exports","ember-math-helpers/helpers/min"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"min",{enumerable:!0,get:function(){return t.min}})})),define("consul-ui/helpers/mixed-grid-layout",["exports","ember-collection/layouts/mixed-grid"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Helper.helper((function(e){return new t.default(e[0])})) -e.default=n})),define("consul-ui/helpers/mod",["exports","ember-math-helpers/helpers/mod"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"mod",{enumerable:!0,get:function(){return t.mod}})})),define("consul-ui/helpers/mult",["exports","ember-math-helpers/helpers/mult"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"mult",{enumerable:!0,get:function(){return t.mult}})})),define("consul-ui/helpers/next",["exports","ember-composable-helpers/helpers/next"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"next",{enumerable:!0,get:function(){return t.next}})})),define("consul-ui/helpers/noop",["exports","ember-composable-helpers/helpers/noop"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"noop",{enumerable:!0,get:function(){return t.noop}})})),define("consul-ui/helpers/not-eq",["exports","ember-truth-helpers/helpers/not-equal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"notEqualHelper",{enumerable:!0,get:function(){return t.notEqualHelper}})})),define("consul-ui/helpers/not",["exports","ember-truth-helpers/helpers/not"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"not",{enumerable:!0,get:function(){return t.not}})})),define("consul-ui/helpers/object-at",["exports","ember-composable-helpers/helpers/object-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"objectAt",{enumerable:!0,get:function(){return t.objectAt}})})),define("consul-ui/helpers/on-document",["exports","ember-on-helper/helpers/on-document"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/helpers/on-window",["exports","ember-on-helper/helpers/on-window"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/on",["exports","ember-on-helper/helpers/on"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/optional",["exports","ember-composable-helpers/helpers/optional"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"optional",{enumerable:!0,get:function(){return t.optional}})})),define("consul-ui/helpers/or",["exports","ember-truth-helpers/helpers/or"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"or",{enumerable:!0,get:function(){return t.or}})})),define("consul-ui/helpers/page-title",["exports","ember-page-title/helpers/page-title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/helpers/percentage-columns-layout",["exports","ember-collection/layouts/percentage-columns"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Helper.helper((function(e){return new t.default(e[0],e[1],e[2])})) -e.default=n})),define("consul-ui/helpers/percentage-of",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper((function([e,t]){const n=e/t*100 -return isNaN(n)?0:n.toFixed(2)})) -e.default=t})),define("consul-ui/helpers/perform",["exports","ember-concurrency/helpers/perform"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/pipe-action",["exports","ember-composable-helpers/helpers/pipe-action"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/pipe",["exports","ember-composable-helpers/helpers/pipe"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"pipe",{enumerable:!0,get:function(){return t.pipe}})})),define("consul-ui/helpers/pluralize",["exports","ember-inflector/lib/helpers/pluralize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/helpers/policy/datacenters",["exports"],(function(e){function t(e,t={}){const n=Ember.get(e[0],"Datacenters") -return Array.isArray(n)&&0!==n.length?Ember.get(e[0],"Datacenters"):[t.global||"All"]}Object.defineProperty(e,"__esModule",{value:!0}),e.datacenters=t,e.default=void 0 -var n=Ember.Helper.helper(t) -e.default=n})),define("consul-ui/helpers/policy/group",["exports","consul-ui/models/policy"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Helper.helper((function([e]){return e.reduce((function(e,n){let r -switch(!0){case Ember.get(n,"ID")===t.MANAGEMENT_ID:r="management" -break -case""!==Ember.get(n,"template"):r="identities" -break -default:r="policies"}return e[r].push(n),e}),{management:[],identities:[],policies:[]})})) -e.default=n})),define("consul-ui/helpers/policy/typeof",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.typeOf=t,e.default=void 0 -function t(e){const t=e[0],n=Ember.get(t,"template") -switch(!0){case void 0===n:return"role" -case"service-identity"===n:return"policy-service-identity" -case"node-identity"===n:return"policy-node-identity" -case"00000000-0000-0000-0000-000000000001"===Ember.get(t,"ID"):return"policy-management" -default:return"policy"}}var n=Ember.Helper.helper(t) -e.default=n})),define("consul-ui/helpers/pow",["exports","ember-math-helpers/helpers/pow"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"pow",{enumerable:!0,get:function(){return t.pow}})})),define("consul-ui/helpers/previous",["exports","ember-composable-helpers/helpers/previous"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"previous",{enumerable:!0,get:function(){return t.previous}})})),define("consul-ui/helpers/queue",["exports","ember-composable-helpers/helpers/queue"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"queue",{enumerable:!0,get:function(){return t.queue}})})),define("consul-ui/helpers/random",["exports","ember-math-helpers/helpers/random"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"random",{enumerable:!0,get:function(){return t.random}})})),define("consul-ui/helpers/range",["exports","ember-composable-helpers/helpers/range"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"range",{enumerable:!0,get:function(){return t.range}})})),define("consul-ui/helpers/reduce",["exports","ember-composable-helpers/helpers/reduce"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/refresh-route",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("router"),n=class extends Ember.Helper{constructor(...e){var t,n,a,l -super(...e),t=this,n="router",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}compute(e,t){return()=>{const e=Ember.getOwner(this),t=this.router.currentRoute.name -return e.lookup("route:"+t).refresh()}}},l=n.prototype,s="router",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/helpers/reject-by",["exports","ember-composable-helpers/helpers/reject-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/render-template",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=/{{([A-Za-z.0-9_-]+)}}/g -let l,s=(t=Ember.inject.service("encoder"),n=class extends Ember.Helper{constructor(){var e,t,n,s -super(...arguments),e=this,t="encoder",s=this,(n=r)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(s):void 0}),"function"!=typeof l&&(l=this.encoder.createRegExpEncoder(a,encodeURIComponent,!1))}compute([e,t]){return l(e,t)}},i=n.prototype,o="encoder",u=[t],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),r=m,n) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/helpers/repeat",["exports","ember-composable-helpers/helpers/repeat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"repeat",{enumerable:!0,get:function(){return t.repeat}})})),define("consul-ui/helpers/require",["exports","@lit/reactive-element","consul-ui/utils/path/resolve","consul-ui/components/panel/index.css","consul-ui/components/distribution-meter/index.css","consul-ui/components/distribution-meter/meter/index.css","consul-ui/components/distribution-meter/meter/element","consul-ui/styles/base/decoration/visually-hidden.css","consul-ui/styles/base/icons/base-keyframes.css","consul-ui/styles/base/icons/icons/chevron-down/index.css"],(function(e,t,n,r,a,l,s,i,o,u){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const c={"/components/panel/index.css":r.default,"/components/distribution-meter/index.css":a.default,"/components/distribution-meter/meter/index.css":l.default,"/components/distribution-meter/meter/element":s.default,"/styles/base/decoration/visually-hidden.css":i.default,"/styles/base/icons/base-keyframes.css":o.default,"/styles/base/icons/icons/chevron-down/index.css":u.default},d=new Map -var m=Ember.Helper.helper(([e=""],{from:r})=>{const a=(0,n.default)(r,e) -switch(!0){case a.endsWith(".css"):return c[a](t.css) -default:{if(d.has(a))return d.get(a) -const e=c[a](HTMLElement) -return d.set(a,e),e}}}) -e.default=m})),define("consul-ui/helpers/reverse",["exports","ember-composable-helpers/helpers/reverse"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/right-trim",["exports","consul-ui/utils/right-trim"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Helper.helper((function([e="",n=""]){return(0,t.default)(e,n)})) -e.default=n})),define("consul-ui/helpers/root-url",["exports","ember-router-helpers/helpers/root-url"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"rootUrl",{enumerable:!0,get:function(){return t.rootUrl}})})),define("consul-ui/helpers/round",["exports","ember-math-helpers/helpers/round"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"round",{enumerable:!0,get:function(){return t.round}})})),define("consul-ui/helpers/route-action",["exports","ember-route-action-helper/helpers/route-action"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})) -define("consul-ui/helpers/route-match",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper((function([e]){switch(["Present","Exact","Prefix","Suffix","Regex"].find(t=>void 0!==e[t])){case"Present":return(e.Invert?"NOT ":"")+"present" -case"Exact":return`${e.Invert?"NOT ":""}exactly matching "${e.Exact}"` -case"Prefix":return`${e.Invert?"NOT ":""}prefixed by "${e.Prefix}"` -case"Suffix":return`${e.Invert?"NOT ":""}suffixed by "${e.Suffix}"` -case"Regex":return`${e.Invert?"NOT ":""}matching the regex "${e.Regex}"`}return""})) -e.default=t})),define("consul-ui/helpers/route-params",["exports","ember-router-helpers/helpers/route-params"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"routeParams",{enumerable:!0,get:function(){return t.routeParams}})})),define("consul-ui/helpers/service/card-permissions",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper((function([e]){if(""===e.Datacenter)return"empty" -{const t=e.Intention.HasPermissions,n=e.Intention.Allowed,r="specific-intention"===e.Source&&!e.TransparentProxy -switch(!0){case t:return"allow" -case!n&&!t:return"deny" -case n&&r:return"not-defined" -default:return"allow"}}})) -e.default=t})),define("consul-ui/helpers/service/external-source",["exports"],(function(e){function t(e,t){let n=Ember.get(e[0],"ExternalSources.firstObject") -n||(n=Ember.get(e[0],"Meta.external-source")) -const r=void 0===t.prefix?"":t.prefix -if(n&&["consul-api-gateway","vault","kubernetes","terraform","nomad","consul","aws"].includes(n))return`${r}${n}`}Object.defineProperty(e,"__esModule",{value:!0}),e.serviceExternalSource=t,e.default=void 0 -var n=Ember.Helper.helper(t) -e.default=n})),define("consul-ui/helpers/service/health-percentage",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper((function([e]){const t=e.ChecksCritical+e.ChecksPassing+e.ChecksWarning -return 0===t?"":{passing:Math.round(e.ChecksPassing/t*100),warning:Math.round(e.ChecksWarning/t*100),critical:Math.round(e.ChecksCritical/t*100)}})) -e.default=t})),define("consul-ui/helpers/set",["exports","ember-set-helper/helpers/set"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/shuffle",["exports","ember-composable-helpers/helpers/shuffle"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"shuffle",{enumerable:!0,get:function(){return t.shuffle}})})),define("consul-ui/helpers/sign",["exports","ember-math-helpers/helpers/sign"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sign",{enumerable:!0,get:function(){return t.sign}})})),define("consul-ui/helpers/sin",["exports","ember-math-helpers/helpers/sin"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sin",{enumerable:!0,get:function(){return t.sin}})})),define("consul-ui/helpers/singularize",["exports","ember-inflector/lib/helpers/singularize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/helpers/slice",["exports","ember-composable-helpers/helpers/slice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/slugify",["exports"],(function(e){function t([e=""]){return e.replace(/ /g,"-").toLowerCase()}Object.defineProperty(e,"__esModule",{value:!0}),e.slugify=t,e.default=void 0 -var n=Ember.Helper.helper(t) -e.default=n})),define("consul-ui/helpers/sort-by",["exports","ember-composable-helpers/helpers/sort-by"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/split",["exports"],(function(e){function t([e="",t=","]){return e.split(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.split=t,e.default=void 0 -var n=Ember.Helper.helper(t) -e.default=n})),define("consul-ui/helpers/sqrt",["exports","ember-math-helpers/helpers/sqrt"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sqrt",{enumerable:!0,get:function(){return t.sqrt}})})),define("consul-ui/helpers/state-chart",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("state"),n=class extends Ember.Helper{constructor(...e){var t,n,a,l -super(...e),t=this,n="state",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}compute([e],t){return this.state.stateChart(e)}},l=n.prototype,s="state",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/helpers/state-matches",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("state"),n=class extends Ember.Helper{constructor(...e){var t,n,a,l -super(...e),t=this,n="state",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}compute([e,t],n){return this.state.matches(e,t)}},l=n.prototype,s="state",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/helpers/string-char-at",["exports","ember-string-fns/helpers/string-char-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringCharAt",{enumerable:!0,get:function(){return t.stringCharAt}})})),define("consul-ui/helpers/string-char-code-at",["exports","ember-string-fns/helpers/string-char-code-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringCharCodeAt",{enumerable:!0,get:function(){return t.stringCharCodeAt}})})),define("consul-ui/helpers/string-code-point-at",["exports","ember-string-fns/helpers/string-code-point-at"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringCodePointAt",{enumerable:!0,get:function(){return t.stringCodePointAt}})})),define("consul-ui/helpers/string-concat",["exports","ember-string-fns/helpers/string-concat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringConcat",{enumerable:!0,get:function(){return t.stringConcat}})})),define("consul-ui/helpers/string-ends-with",["exports","ember-string-fns/helpers/string-ends-with"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringEndsWith",{enumerable:!0,get:function(){return t.stringEndsWith}})})),define("consul-ui/helpers/string-equals",["exports","ember-string-fns/helpers/string-equals"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringEquals",{enumerable:!0,get:function(){return t.stringEquals}})})),define("consul-ui/helpers/string-from-char-code",["exports","ember-string-fns/helpers/string-from-char-code"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringFromCharCode",{enumerable:!0,get:function(){return t.stringFromCharCode}})})),define("consul-ui/helpers/string-from-code-point",["exports","ember-string-fns/helpers/string-from-code-point"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringFromCodePoint",{enumerable:!0,get:function(){return t.stringFromCodePoint}})})),define("consul-ui/helpers/string-html-safe",["exports"],(function(e){function t([e=""]){return Ember.String.htmlSafe(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.stringHtmlSafe=t,e.default=void 0 -var n=Ember.Helper.helper(t) -e.default=n})),define("consul-ui/helpers/string-includes",["exports","ember-string-fns/helpers/string-includes"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringIncludes",{enumerable:!0,get:function(){return t.stringIncludes}})})),define("consul-ui/helpers/string-index-of",["exports","ember-string-fns/helpers/string-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringIndexOf",{enumerable:!0,get:function(){return t.stringIndexOf}})})),define("consul-ui/helpers/string-last-index-of",["exports","ember-string-fns/helpers/string-last-index-of"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringLastIndexOf",{enumerable:!0,get:function(){return t.stringLastIndexOf}})})),define("consul-ui/helpers/string-not-equals",["exports","ember-string-fns/helpers/string-not-equals"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringNotEquals",{enumerable:!0,get:function(){return t.stringNotEquals}})})) -define("consul-ui/helpers/string-pad-end",["exports","ember-string-fns/helpers/string-pad-end"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringPadEnd",{enumerable:!0,get:function(){return t.stringPadEnd}})})),define("consul-ui/helpers/string-pad-start",["exports","ember-string-fns/helpers/string-pad-start"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringPadStart",{enumerable:!0,get:function(){return t.stringPadStart}})})),define("consul-ui/helpers/string-repeat",["exports","ember-string-fns/helpers/string-repeat"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringRepeat",{enumerable:!0,get:function(){return t.stringRepeat}})})),define("consul-ui/helpers/string-replace-all",["exports","ember-string-fns/helpers/string-replace-all"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringReplaceAll",{enumerable:!0,get:function(){return t.stringReplaceAll}})})),define("consul-ui/helpers/string-replace",["exports","ember-string-fns/helpers/string-replace"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringReplace",{enumerable:!0,get:function(){return t.stringReplace}})})),define("consul-ui/helpers/string-slice",["exports","ember-string-fns/helpers/string-slice"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringSlice",{enumerable:!0,get:function(){return t.stringSlice}})})),define("consul-ui/helpers/string-split",["exports","ember-string-fns/helpers/string-split"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringSplit",{enumerable:!0,get:function(){return t.stringSplit}})})),define("consul-ui/helpers/string-starts-with",["exports","ember-string-fns/helpers/string-starts-with"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringStartsWith",{enumerable:!0,get:function(){return t.stringStartsWith}})})),define("consul-ui/helpers/string-substring",["exports","ember-string-fns/helpers/string-substring"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringSubstring",{enumerable:!0,get:function(){return t.stringSubstring}})})),define("consul-ui/helpers/string-to-camel-case",["exports","ember-string-fns/helpers/string-to-camel-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToCamelCase",{enumerable:!0,get:function(){return t.stringToCamelCase}})})),define("consul-ui/helpers/string-to-kebab-case",["exports","ember-string-fns/helpers/string-to-kebab-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToKebabCase",{enumerable:!0,get:function(){return t.stringToKebabCase}})})),define("consul-ui/helpers/string-to-lower-case",["exports","ember-string-fns/helpers/string-to-lower-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToLowerCase",{enumerable:!0,get:function(){return t.stringToLowerCase}})})),define("consul-ui/helpers/string-to-pascal-case",["exports","ember-string-fns/helpers/string-to-pascal-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToPascalCase",{enumerable:!0,get:function(){return t.stringToPascalCase}})})),define("consul-ui/helpers/string-to-sentence-case",["exports","ember-string-fns/helpers/string-to-sentence-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToSentenceCase",{enumerable:!0,get:function(){return t.stringToSentenceCase}})})),define("consul-ui/helpers/string-to-snake-case",["exports","ember-string-fns/helpers/string-to-snake-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToSnakeCase",{enumerable:!0,get:function(){return t.stringToSnakeCase}})})),define("consul-ui/helpers/string-to-title-case",["exports","ember-string-fns/helpers/string-to-title-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToTitleCase",{enumerable:!0,get:function(){return t.stringToTitleCase}})})),define("consul-ui/helpers/string-to-upper-case",["exports","ember-string-fns/helpers/string-to-upper-case"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringToUpperCase",{enumerable:!0,get:function(){return t.stringToUpperCase}})})),define("consul-ui/helpers/string-trim-end",["exports","ember-string-fns/helpers/string-trim-end"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringTrimEnd",{enumerable:!0,get:function(){return t.stringTrimEnd}})})),define("consul-ui/helpers/string-trim-start",["exports","ember-string-fns/helpers/string-trim-start"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringTrimStart",{enumerable:!0,get:function(){return t.stringTrimStart}})})),define("consul-ui/helpers/string-trim",["exports","ember-string-fns/helpers/string-trim"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"stringTrim",{enumerable:!0,get:function(){return t.stringTrim}})})),define("consul-ui/helpers/style-map",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper(e=>{const t=e.reduce((e,[t,n,r=""])=>null==n?e:`${e}${t}:${n.toString()}${r};`,"") -return t.length>0?t:void 0}) -e.default=t})),define("consul-ui/helpers/sub",["exports","ember-math-helpers/helpers/sub"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"sub",{enumerable:!0,get:function(){return t.sub}})})),define("consul-ui/helpers/substr",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper((function([e="",t=0,n]){return e.substr(t,n)})) -e.default=t})),define("consul-ui/helpers/svg-curve",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper((function([e],t){const n=t.src||{x:0,y:0},r=t.type||"cubic" -let a=[e,{x:(n.x+e.x)/2,y:n.y}] -return"cubic"===r&&a.push({x:a[1].x,y:e.y}),`${l=n,`\n M ${l.x} ${l.y}\n `}${function(){const e=[...arguments] -return`${arguments.length>2?"C":"Q"} ${e.concat(e.shift()).map(e=>Object.values(e).join(" ")).join(",")}`}(...a)}` -var l})) -e.default=t})),define("consul-ui/helpers/t",["exports","ember-intl/helpers/t"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/take",["exports","ember-composable-helpers/helpers/take"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/tan",["exports","ember-math-helpers/helpers/tan"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"tan",{enumerable:!0,get:function(){return t.tan}})})),define("consul-ui/helpers/tanh",["exports","ember-math-helpers/helpers/tanh"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"tanh",{enumerable:!0,get:function(){return t.tanh}})})),define("consul-ui/helpers/task",["exports","ember-concurrency/helpers/task"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/temporal-format",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("temporal"),n=class extends Ember.Helper{constructor(...e){var t,n,a,l -super(...e),t=this,n="temporal",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}compute([e],t){return this.temporal.format(e,t)}},l=n.prototype,s="temporal",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})) -define("consul-ui/helpers/temporal-within",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("temporal"),n=class extends Ember.Helper{constructor(...e){var t,n,a,l -super(...e),t=this,n="temporal",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}compute(e,t){return this.temporal.within(e,t)}},l=n.prototype,s="temporal",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/helpers/test",["exports","consul-ui/helpers/can","consul-ui/helpers/is"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{compute([e,t],r){switch(!0){case e.startsWith("can "):return super.compute([e.substr(4),t],r) -case e.startsWith("is "):return(0,n.is)(this,[e.substr(3),t],r)}throw new Error(e+" is not supported by the 'test' helper.")}}e.default=r})),define("consul-ui/helpers/titleize",["exports","ember-cli-string-helpers/helpers/titleize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"titleize",{enumerable:!0,get:function(){return t.titleize}})})),define("consul-ui/helpers/to-hash",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.Helper.helper(([e=[],t])=>(Array.isArray(e)||(e=e.toArray()),e.reduce((e,n)=>(e[Ember.get(n,t)]=n,e),{}))) -e.default=t})),define("consul-ui/helpers/to-route",["exports"],(function(e){var t,n,r,a,l -function s(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(t=Ember.inject.service("router"),n=Ember.inject.service("env"),r=class extends Ember.Helper{constructor(...e){super(...e),s(this,"router",a,this),s(this,"env",l,this)}compute([e]){return this.router.recognize(`${this.env.var("rootURL")}${e}`).name}},a=i(r.prototype,"router",[t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l=i(r.prototype,"env",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),r) -e.default=o})),define("consul-ui/helpers/toggle-action",["exports","ember-composable-helpers/helpers/toggle-action"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/toggle",["exports","ember-composable-helpers/helpers/toggle"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"toggle",{enumerable:!0,get:function(){return t.toggle}})})),define("consul-ui/helpers/token/is-anonymous",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isAnonymous=t,e.default=void 0 -function t(e){return"00000000-0000-0000-0000-000000000002"===Ember.get(e[0],"AccessorID")}var n=Ember.Helper.helper(t) -e.default=n})),define("consul-ui/helpers/token/is-legacy",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.isLegacy=n,e.default=void 0 -const t=function(e){const t=Ember.get(e,"Rules") -if(null!=t)return""!==t.trim() -const n=Ember.get(e,"Legacy") -return void 0!==n&&n} -function n(e){const n=e[0] -return void 0!==n.length?n.find((function(e){return t(e)})):t(n)}var r=Ember.Helper.helper(n) -e.default=r})),define("consul-ui/helpers/transition-to",["exports","ember-router-helpers/helpers/transition-to"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"transitionTo",{enumerable:!0,get:function(){return t.transitionTo}})})),define("consul-ui/helpers/trim",["exports","ember-cli-string-helpers/helpers/trim"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"trim",{enumerable:!0,get:function(){return t.trim}})})),define("consul-ui/helpers/trunc",["exports","ember-math-helpers/helpers/trunc"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"trunc",{enumerable:!0,get:function(){return t.trunc}})})),define("consul-ui/helpers/truncate",["exports","ember-cli-string-helpers/helpers/truncate"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"truncate",{enumerable:!0,get:function(){return t.truncate}})})),define("consul-ui/helpers/tween-to",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("ticker"),n=class extends Ember.Helper{constructor(...e){var t,n,a,l -super(...e),t=this,n="ticker",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}compute([e,t],n){return this.ticker.tweenTo(e,t)}},l=n.prototype,s="ticker",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/helpers/underscore",["exports","ember-cli-string-helpers/helpers/underscore"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"underscore",{enumerable:!0,get:function(){return t.underscore}})})),define("consul-ui/helpers/union",["exports","ember-composable-helpers/helpers/union"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/uniq-by",["exports"],(function(e){function t([e,t]){return Ember.isEmpty(e)?[]:Ember.A(t).uniqBy(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.uniqBy=t,e.default=void 0 -var n=Ember.Helper.helper(t) -e.default=n})),define("consul-ui/helpers/unique-id",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("dom"),n=class extends Ember.Helper{constructor(...e){var t,n,a,l -super(...e),t=this,n="dom",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}compute(e,t){return this.dom.guid({})}},l=n.prototype,s="dom",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/helpers/uppercase",["exports","ember-cli-string-helpers/helpers/uppercase"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"uppercase",{enumerable:!0,get:function(){return t.uppercase}})})),define("consul-ui/helpers/uri",["exports"],(function(e){var t,n,r,a,l -function s(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=/\${([A-Za-z.0-9_-]+)}/g -let u,c=(t=Ember.inject.service("encoder"),n=Ember.inject.service("data-source/service"),r=class extends Ember.Helper{constructor(){super(...arguments),s(this,"encoder",a,this),s(this,"data",l,this),"function"!=typeof u&&(u=this.encoder.createRegExpEncoder(o,encodeURIComponent))}compute([e,t]){return this.data.uri(u(e,t))}},a=i(r.prototype,"encoder",[t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l=i(r.prototype,"data",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),r) -e.default=c})),define("consul-ui/helpers/url-for",["exports","ember-router-helpers/helpers/url-for"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"urlFor",{enumerable:!0,get:function(){return t.urlFor}})})),define("consul-ui/helpers/values",["exports","ember-composable-helpers/helpers/values"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"values",{enumerable:!0,get:function(){return t.values}})})),define("consul-ui/helpers/w",["exports","ember-cli-string-helpers/helpers/w"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"w",{enumerable:!0,get:function(){return t.w}})})),define("consul-ui/helpers/will-destroy",["exports","ember-render-helpers/helpers/will-destroy"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/helpers/without",["exports","ember-composable-helpers/helpers/without"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"without",{enumerable:!0,get:function(){return t.without}})})),define("consul-ui/helpers/xor",["exports","ember-truth-helpers/helpers/xor"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"xor",{enumerable:!0,get:function(){return t.xor}})})),define("consul-ui/initializers/app-version",["exports","ember-cli-app-version/initializer-factory","consul-ui/config/environment"],(function(e,t,n){let r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,n.default.APP&&(r=n.default.APP.name,a=n.default.APP.version) -var l={name:"App Version",initialize:(0,t.default)(r,a)} -e.default=l})),define("consul-ui/initializers/container-debug-adapter",["exports","ember-resolver/resolvers/classic/container-debug-adapter"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={name:"container-debug-adapter",initialize(){let e=arguments[1]||arguments[0] -e.register("container-debug-adapter:main",t.default),e.inject("container-debug-adapter:main","namespace","application:main")}} -e.default=n})),define("consul-ui/initializers/ember-data-data-adapter",["exports","@ember-data/debug/setup"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/initializers/ember-data",["exports","ember-data","ember-data/setup-container"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r={name:"ember-data",initialize:n.default} -e.default=r})) -define("consul-ui/initializers/export-application-global",["exports","consul-ui/config/environment"],(function(e,t){function n(){var e=arguments[1]||arguments[0] -if(!1!==t.default.exportApplicationGlobal){var n -if("undefined"!=typeof window)n=window -else if("undefined"!=typeof global)n=global -else{if("undefined"==typeof self)return -n=self}var r,a=t.default.exportApplicationGlobal -r="string"==typeof a?a:Ember.String.classify(t.default.modulePrefix),n[r]||(n[r]=e,e.reopen({willDestroy:function(){this._super.apply(this,arguments),delete n[r]}}))}}Object.defineProperty(e,"__esModule",{value:!0}),e.initialize=n,e.default=void 0 -var r={name:"export-application-global",initialize:n} -e.default=r})),define("consul-ui/initializers/flash-messages",["exports","consul-ui/config/environment","ember-cli-flash/utils/flash-message-options"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.initialize=r,e.default=void 0 -function r(){const e=arguments[1]||arguments[0],{flashMessageDefaults:r}=t.default||{},{injectionFactories:a}=r||[],l=(0,n.default)(r) -a&&a.length -l.injectionFactories.forEach(t=>{e.inject(t,"flashMessages","service:flash-messages")})}var a={name:"flash-messages",initialize:r} -e.default=a})),define("consul-ui/initializers/initialize-torii-callback",["exports","consul-ui/config/environment","torii/redirect-handler"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r={name:"torii-callback",before:"torii",initialize(e){arguments[1]&&(e=arguments[1]),t.default.torii&&t.default.torii.disableRedirectInitializer||(e.deferReadiness(),n.default.handle(window).catch((function(){e.advanceReadiness()})))}} -e.default=r})),define("consul-ui/initializers/initialize-torii-session",["exports","torii/bootstrap/session","torii/configuration"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r={name:"torii-session",after:"torii",initialize(e){arguments[1]&&(e=arguments[1]) -const r=(0,n.getConfiguration)() -if(r.sessionServiceName){(0,t.default)(e,r.sessionServiceName) -var a="service:"+r.sessionServiceName -e.inject("adapter",r.sessionServiceName,a)}}} -e.default=r})),define("consul-ui/initializers/initialize-torii",["exports","torii/bootstrap/torii","torii/configuration","consul-ui/config/environment"],(function(e,t,n,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var a={name:"torii",initialize(e){arguments[1]&&(e=arguments[1]),(0,n.configure)(r.default.torii||{}),(0,t.default)(e),e.inject("route","torii","service:torii")}} -e.default=a})),define("consul-ui/initializers/model-fragments",["exports","ember-data-model-fragments","ember-data-model-fragments/ext"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t={name:"fragmentTransform",after:"ember-data",initialize(){}} -e.default=t})),define("consul-ui/initializers/setup-ember-can",["exports","ember-can/initializers/setup-ember-can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"initialize",{enumerable:!0,get:function(){return t.initialize}})})),define("consul-ui/initializers/viewport-config",["exports","ember-in-viewport/initializers/viewport-config"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"initialize",{enumerable:!0,get:function(){return t.initialize}})})),define("consul-ui/instance-initializers/container",["exports","require","deepmerge"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.services=void 0 -const r=document,a=n.default.all([...r.querySelectorAll("script[data-services]")].map(e=>JSON.parse(e.dataset.services))) -e.services=a -var l={name:"container",initialize(e){(function(e,n){Object.entries(n).forEach(([n,r])=>{switch(!0){case"string"==typeof r.class:if(!t.default.has(r.class))throw new Error(`Unable to locate '${r.class}'`) -e.register(n.replace("auth-provider:","torii-provider:"),(0,t.default)(r.class).default)}})})(e,a) -const n=e.lookup("service:container") -let r=n.get("container-debug-adapter:main").catalogEntriesByType("service").filter(e=>e.startsWith("repository/")||"ui-config"===e) -r.push("repository/service"),r.forEach(e=>{const t="service:"+e -n.set(t,n.resolveRegistration(t))})}} -e.default=l})),define("consul-ui/instance-initializers/ember-data",["exports","ember-data/initialize-store-service"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={name:"ember-data",initialize:t.default} -e.default=n})),define("consul-ui/instance-initializers/href-to",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.HrefTo=void 0 -class t{constructor(e,t){this.applicationInstance=e,this.target=t -const n=this.target.attributes.href -this.url=n&&n.value}handle(e){this.shouldHandle(e)&&(e.preventDefault(),this.applicationInstance.lookup("router:main").location.transitionTo(this.url))}shouldHandle(e){return this.isUnmodifiedLeftClick(e)&&!this.isIgnored(this.target)&&!this.isExternal(this.target)&&!this.hasActionHelper(this.target)&&!this.hasDownload(this.target)&&!this.isLinkComponent(this.target)}isUnmodifiedLeftClick(e){return!(void 0!==e.which&&1!==e.which||e.ctrlKey||e.metaKey)}isExternal(e){return"_blank"===e.getAttribute("target")}isIgnored(e){return e.dataset.nativeHref}hasActionHelper(e){return e.dataset.emberAction}hasDownload(e){return e.hasAttribute("download")}isLinkComponent(e){let t=!1 -const n=e.id -if(n){const e=this.applicationInstance.lookup("-view-registry:main")[n] -t=e&&e instanceof Ember.LinkComponent}return t}recognizeUrl(e){let t=!1 -if(e){const n=this._getRouter(),r=this._getRootUrl(),a=0===e.indexOf(r),l=this.getUrlWithoutRoot(),s=n._router._routerMicrolib||n._router.router -t=a&&s.recognizer.recognize(l)}return t}getUrlWithoutRoot(){const e=this.applicationInstance.lookup("router:main").location -let t=e.getURL.apply({getHash:()=>"",location:{pathname:this.url},baseURL:e.baseURL,rootURL:e.rootURL,env:e.env},[]) -const n=t.indexOf("?") -return-1!==n&&(t=t.substr(0,n-1)),t}_getRouter(){return this.applicationInstance.lookup("service:router")}_getRootUrl(){let e=this._getRouter().get("rootURL") -return"/"!==e.charAt(e.length-1)&&(e+="/"),e}}e.HrefTo=t -var n={name:"href-to",initialize(e){if("undefined"==typeof FastBoot){const n=e.lookup("service:dom").document(),r=n=>{const r="A"===n.target.tagName?n.target:function(e){if(e.closest)return e.closest("a") -for(e=e.parentElement;e&&"A"!==e.tagName;)e=e.parentElement -return e}(n.target) -if(r){new t(e,r).handle(n)}} -n.body.addEventListener("click",r),e.reopen({willDestroy(){return n.body.removeEventListener("click",r),this._super(...arguments)}})}}} -e.default=n})),define("consul-ui/instance-initializers/ivy-codemirror",["exports"],(function(e){function t(e){const t=e.application.name,n=e.lookup("service:-document"),r=new Map(Object.entries(JSON.parse(n.querySelector(`[data-${t}-fs]`).textContent))) -CodeMirror.modeURL={replace:function(e,t){switch(t.trim()){case"javascript":return r.get(["codemirror","mode","javascript","javascript.js"].join("/")) -case"ruby":return r.get(["codemirror","mode","ruby","ruby.js"].join("/")) -case"yaml":return r.get(["codemirror","mode","yaml","yaml.js"].join("/")) -case"xml":return r.get(["codemirror","mode","xml","xml.js"].join("/"))}}} -e.resolveRegistration("component:ivy-codemirror").reopen({attributeBindings:["name"]})}Object.defineProperty(e,"__esModule",{value:!0}),e.initialize=t,e.default=void 0 -var n={initialize:t} -e.default=n})),define("consul-ui/instance-initializers/selection",["exports","consul-ui/env"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={name:"selection",initialize(e){if((0,t.env)("CONSUL_UI_DISABLE_ANCHOR_SELECTION"))return -const n=e.lookup("service:dom"),r=n.document(),a=r.getElementsByTagName("html")[0],l=function(e){return"A"===e.tagName?e:n.closest("a",e)},s=function(e){if(a.classList.contains("is-debug"))return -const t=l(e.target) -if(t){if(void 0!==e.button&&2===e.button){const e=t.dataset.href -return void(e&&t.setAttribute("href",e))}const n=t.getAttribute("href") -n&&(t.dataset.href=n,t.removeAttribute("href"))}},i=function(e){if(a.classList.contains("is-debug"))return -const t=l(e.target) -if(t){const n=t.dataset.href -!function(t=window){const n=t.getSelection() -let r=!1 -try{r="isCollapsed"in n&&!n.isCollapsed&&n.toString().length>1}catch(e){}return r}()&&n&&t.setAttribute("href",n)}} -r.body.addEventListener("mousedown",s),r.body.addEventListener("mouseup",i),e.reopen({willDestroy:function(){return r.body.removeEventListener("mousedown",s),r.body.removeEventListener("mouseup",i),this._super(...arguments)}})}} -e.default=n})),define("consul-ui/instance-initializers/setup-routes",["exports","torii/bootstrap/routing","torii/configuration","torii/compat/get-router-instance","torii/compat/get-router-lib","torii/router-dsl-ext"],(function(e,t,n,r,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l={name:"torii-setup-routes",initialize(e){if(!(0,n.getConfiguration)().sessionServiceName)return -let l=(0,r.default)(e) -var s=function(){var n=(0,a.default)(l).authenticatedRoutes -!Ember.isEmpty(n)&&(0,t.default)(e,n),l.off("willTransition",s)} -l.on("willTransition",s)}} -e.default=l})),define("consul-ui/instance-initializers/walk-providers",["exports","torii/lib/container-utils","torii/configuration"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r={name:"torii-walk-providers",initialize(e){let r=(0,n.getConfiguration)() -for(var a in r.providers)r.providers.hasOwnProperty(a)&&(0,t.lookup)(e,"torii-provider:"+a)}} -e.default=r})),define("consul-ui/locations/fsm-with-optional-test",["exports","consul-ui/locations/fsm-with-optional","consul-ui/locations/fsm","@ember/test-helpers"],(function(e,t,n,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{static create(){return new this(...arguments)}constructor(){var e,t,r -super(...arguments),r="fsm-with-optional-test",(t="implementation")in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,this.location=new n.Location,this.machine=new n.FSM(this.location),this.doc={defaultView:{addEventListener:(e,t)=>{this.machine=new n.FSM(this.location,t)},removeEventListener:()=>{this.machine=new n.FSM}}}}visit(e){const t=this.container,n=this.container.lookup("router:main"),a=async()=>(await(0,r.settled)(),new Promise(e=>setTimeout(e(t),0))),l=e=>{if(e.error)throw e.error -if("TransitionAborted"===e.name&&n._routerMicrolib.activeTransition)return n._routerMicrolib.activeTransition.then(a,l) -throw"TransitionAborted"===e.name?new Error(e.message):e} -return""===this.location.pathname?(this.rootURL=n.rootURL.replace(/\/$/,""),this.machine.state.path=this.location.pathname=`${this.rootURL}${e}`,this.path=this.getURL(),t.handleURL(""+this.path).then(a,l)):this.transitionTo(e).then(a,l)}}e.default=a})),define("consul-ui/locations/fsm-with-optional",["exports","consul-ui/env"],(function(e,t){function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const r={};(0,t.env)("CONSUL_PARTITIONS_ENABLED")&&(r.partition=/^_([a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?)$/),(0,t.env)("CONSUL_NSPACES_ENABLED")&&(r.nspace=/^~([a-zA-Z0-9]([a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?)$/) -const a=/\/$/,l=function(e){const t=e.state.path,n=this.getURLForTransition(t) -if(n===this._previousURL){if(t===this._previousPath)return -this._previousPath=e.state.path,this.container.lookup("route:application").refresh()}"function"==typeof this.callback&&this.callback(n),this._previousURL=n,this._previousPath=e.state.path} -e.default=class{static create(){return new this(...arguments)}constructor(e,t,r){n(this,"implementation","fsm-with-optional"),n(this,"baseURL",""),n(this,"rootURL","/"),n(this,"path","/"),n(this,"cancelRouterSetup",!1),n(this,"optional",{}),this.container=Object.entries(e)[0][1],this.route=l.bind(this),this.doc=void 0===t?this.container.lookup("service:-document"):t,this.env=void 0===r?this.container.lookup("service:env"):r -const a=this.doc.querySelector("base[href]") -null!==a&&(this.baseURL=a.getAttribute("href"))}initState(){this.location=this.location||this.doc.defaultView.location,this.machine=this.machine||this.doc.defaultView.history,this.doc.defaultView.addEventListener("popstate",this.route) -const e=this.machine.state,t=this.getURL(),n=this.formatURL(t) -e&&e.path===n?(this._previousPath=n,this._previousURL=t):this.dispatch("replace",n)}getURLFrom(e){return e=e||this.location.pathname,this.rootURL=this.rootURL.replace(a,""),this.baseURL=this.baseURL.replace(a,""),e.replace(new RegExp(`^${this.baseURL}(?=/|$)`),"").replace(new RegExp(`^${this.rootURL}(?=/|$)`),"")}getURLForTransition(e){return this.optional={},e=this.getURLFrom(e).split("/").filter((e,t)=>{if(t<3){let t=!1 -return Object.entries(r).reduce((n,[r,a])=>{const l=a.exec(e) -return null!==l&&(n[r]={value:e,match:l[1]},t=!0),n},this.optional),!t}return!0}).join("/")}optionalParams(){let e=this.optional||{} -return["partition","nspace"].reduce((t,n)=>{let r="" -return void 0!==e[n]&&(r=e[n].match),t[n]=r,t},{})}visit(){return this.transitionTo(...arguments)}hrefTo(e,n,r){void 0!==r.dc&&delete r.dc,void 0!==r.nspace&&(r.nspace="~"+r.nspace),void 0!==r.partition&&(r.partition="_"+r.partition),void 0===this.router&&(this.router=this.container.lookup("router:main")) -let a=!0 -switch(!0){case"settings"===e:case e.startsWith("docs."):a=!1}if(this.router.currentRouteName.startsWith("docs.")&&(n.unshift((0,t.env)("CONSUL_DATACENTER_PRIMARY")),e.startsWith("dc")))return`console://${e} <= ${JSON.stringify(n)}` -const l=this.router._routerMicrolib -let s -try{s=l.generate(e,...n,{queryParams:{}})}catch(i){n=Object.values(l.oldState.params).reduce((e,t)=>e.concat(Object.keys(t).length>0?t:[]),[]),s=l.generate(e,...n)}return this.formatURL(s,r,a)}transitionTo(e){if(this.router.currentRouteName.startsWith("docs")&&e.startsWith("console://"))return console.info("location.transitionTo: "+e.substr(10)),!0 -const t=Object.entries(this.optionalParams()),n=this.getURLForTransition(e) -if(this._previousURL===n)return this.dispatch("push",e),Promise.resolve() -{const r=this.optionalParams() -return t.some(([e,t])=>r[e]!==t)&&this.dispatch("push",e),this.container.lookup("router:main").transitionTo(n)}}getURL(){const e=this.location.search||"" -let t="" -void 0!==this.location.hash&&(t=this.location.hash.substr(0)) -return`${this.getURLForTransition(this.location.pathname)}${e}${t}`}formatURL(e,t,n=!0){if(""!==e?(this.rootURL=this.rootURL.replace(a,""),this.baseURL=this.baseURL.replace(a,"")):"/"===this.baseURL[0]&&"/"===this.rootURL[0]&&(this.baseURL=this.baseURL.replace(a,"")),n){const n=e.split("/") -0===Object.keys(t||{}).length&&(t=void 0),t=(t=Object.values(t||this.optional||{})).filter(e=>Boolean(e)).map(e=>e.value||e,[]),n.splice(...[1,0].concat(t)),e=n.join("/")}return`${this.baseURL}${this.rootURL}${e}`}changeURL(e,t){this.path=t -const n=this.machine.state -t=this.formatURL(t),n&&n.path===t||this.dispatch(e,t)}setURL(e){this.changeURL("push",e)}replaceURL(e){this.changeURL("replace",e)}onUpdateURL(e){this.callback=e}dispatch(e,t){const n={path:t,uuid:"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0 -return("x"===e?t:3&t|8).toString(16)})} -this.machine[e+"State"](n,null,t),this.route({state:n})}willDestroy(){this.doc.defaultView.removeEventListener("popstate",this.route)}}})),define("consul-ui/locations/fsm",["exports"],(function(e){function t(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Location=e.FSM=void 0 -e.FSM=class{constructor(e,n=(()=>{})){t(this,"state",{}),this.listener=n,this.location=e}pushState(e,t,n){this.state=e,this.location.pathname=n,this.listener({state:this.state})}replaceState(){return this.pushState(...arguments)}} -e.Location=class{constructor(){t(this,"pathname",""),t(this,"search",""),t(this,"hash","")}} -e.default=class{static create(){return new this(...arguments)}constructor(e){t(this,"implementation","fsm"),this.container=Object.entries(e)[0][1]}visit(){return this.transitionTo(...arguments)}hrefTo(){}transitionTo(){}}})),define("consul-ui/machines/boolean.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"boolean",initial:"false",states:{true:{on:{TOGGLE:[{target:"false"}],FALSE:[{target:"false"}]}},false:{on:{TOGGLE:[{target:"true"}],TRUE:[{target:"true"}]}}}}})),define("consul-ui/machines/validate.xstate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={id:"form",initial:"idle",on:{RESET:[{target:"idle"}]},states:{idle:{on:{SUCCESS:[{target:"success"}],ERROR:[{target:"error"}]}},success:{},error:{}}}})),define("consul-ui/mixins/policy/as-many",["exports","consul-ui/utils/minimizeModel"],(function(e,t){function n(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=function(e,t,n,r){return(e||[]).map((function(e){const a={template:t,Name:e[n]} -return void 0!==e[r]&&(a[r]=e[r]),a}))},l=function(e){return(e||[]).map((function(e){return function(e){for(var t=1;t(n.Policies=l(n.Policies).concat(a(n.ServiceIdentities,"service-identity","ServiceName","Datacenters")).concat(a(n.NodeIdentities,"node-identity","NodeName","Datacenter")),t(e,n)))}),t)},respondForQuery:function(e,t){return this._super((function(t){return e((function(e,n){return t(e,n.map((function(e){return e.Policies=l(e.Policies).concat(a(e.ServiceIdentities,"service-identity","ServiceName","Datacenters")).concat(a(e.NodeIdentities,"node-identity","NodeName","Datacenter")),e})))}))}),t)},serialize:function(e,n){const r=this._super(...arguments) -return r.ServiceIdentities=s(r.Policies,"service-identity","ServiceName","Datacenters"),r.NodeIdentities=s(r.Policies,"node-identity","NodeName","Datacenter"),r.Policies=(0,t.default)(i(r.Policies)),r}}) -e.default=o})),define("consul-ui/mixins/role/as-many",["exports","consul-ui/utils/minimizeModel"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Mixin.create({respondForQueryRecord:function(e,t){return this._super((function(t){return e((e,n)=>(n.Roles=void 0===n.Roles||null===n.Roles?[]:n.Roles,t(e,n)))}),t)},respondForQuery:function(e,t){return this._super((function(t){return e((function(e,n){return t(e,n.map((function(e){return e.Roles=void 0===e.Roles||null===e.Roles?[]:e.Roles,e})))}))}),t)},serialize:function(e,n){const r=this._super(...arguments) -return r.Roles=(0,t.default)(r.Roles),r}}) -e.default=n})),define("consul-ui/mixins/slots",["exports","block-slots/mixins/slots"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/mixins/with-blocking-actions",["exports","ember-inflector"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=Ember.Mixin.create({_feedback:Ember.inject.service("feedback"),settings:Ember.inject.service("settings"),init:function(){this._super(...arguments) -const e=this._feedback,n=this -Ember.set(this,"feedback",{execute:function(r,a,l){const s=n.routeName.split(".") -s.pop() -const i=(0,t.singularize)(s.pop()) -return e.execute(r,a,l,i)}})},afterCreate:function(e){return this.afterUpdate(...arguments)},afterUpdate:function(){const e=this.routeName.split(".") -return e.pop(),this.transitionTo(e.join("."))},afterDelete:function(){const e=this.routeName.split(".") -switch(e.pop()){case"index":return this.refresh() -default:return this.transitionTo(e.join("."))}},errorCreate:function(e){return e},errorUpdate:function(e){return e},errorDelete:function(e){return e},actions:{cancel:function(){return this.afterUpdate(...arguments)},create:function(e){return this.feedback.execute(()=>this.repo.persist(e).then(()=>this.afterCreate(...arguments)),"create",(e,t)=>this.errorCreate(e,t))},update:function(e){return this.feedback.execute(()=>this.repo.persist(e).then(()=>this.afterUpdate(...arguments)),"update",(e,t)=>this.errorUpdate(e,t))},delete:function(e){return this.feedback.execute(()=>this.repo.remove(e).then(()=>this.afterDelete(...arguments)),"delete",(e,t)=>this.errorDelete(e,t))},use:function(e){return this.repo.findBySlug({dc:Ember.get(e,"Datacenter"),ns:Ember.get(e,"Namespace"),partition:Ember.get(e,"Partition"),id:Ember.get(e,"AccessorID")}).then(e=>this.settings.persist({token:{AccessorID:Ember.get(e,"AccessorID"),SecretID:Ember.get(e,"SecretID"),Namespace:Ember.get(e,"Namespace"),Partition:Ember.get(e,"Partition")}}))},logout:function(){return this.settings.delete("token")},clone:function(e){let t -return this.feedback.execute(()=>this.repo.clone(e).then(e=>(t=e,this.afterDelete(...arguments))).then((function(){return t})),"clone")}}}) -e.default=n})),define("consul-ui/models/auth-method",["exports","@ember-data/model","parse-duration"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D,T,L,A,R,I -function B(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function H(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name" -let $=(r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string",{defaultValue:()=>""}),u=(0,t.attr)("string",{defaultValue:()=>""}),c=(0,t.attr)("string",{defaultValue:()=>"local"}),d=(0,t.attr)("string"),m=(0,t.attr)(),p=Ember.computed.or("DisplayName","Name"),f=(0,t.attr)(),b=(0,t.attr)("string"),h=(0,t.attr)("number"),v=(0,t.attr)("number"),y=(0,t.attr)(),g=(0,t.attr)(),O=Ember.computed("MaxTokenTTL"),_=class extends t.default{constructor(...e){super(...e),B(this,"uid",P,this),B(this,"Name",w,this),B(this,"Datacenter",E,this),B(this,"Namespace",k,this),B(this,"Partition",x,this),B(this,"Description",j,this),B(this,"DisplayName",C,this),B(this,"TokenLocality",S,this),B(this,"Type",N,this),B(this,"NamespaceRules",z,this),B(this,"MethodName",M,this),B(this,"Config",D,this),B(this,"MaxTokenTTL",T,this),B(this,"CreateIndex",L,this),B(this,"ModifyIndex",A,this),B(this,"Datacenters",R,this),B(this,"meta",I,this)}get TokenTTL(){return(0,n.default)(this.MaxTokenTTL)}},P=H(_.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=H(_.prototype,"Name",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=H(_.prototype,"Datacenter",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=H(_.prototype,"Namespace",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=H(_.prototype,"Partition",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=H(_.prototype,"Description",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=H(_.prototype,"DisplayName",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=H(_.prototype,"TokenLocality",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=H(_.prototype,"Type",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=H(_.prototype,"NamespaceRules",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=H(_.prototype,"MethodName",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=H(_.prototype,"Config",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=H(_.prototype,"MaxTokenTTL",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=H(_.prototype,"CreateIndex",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=H(_.prototype,"ModifyIndex",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=H(_.prototype,"Datacenters",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=H(_.prototype,"meta",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H(_.prototype,"TokenTTL",[O],Object.getOwnPropertyDescriptor(_.prototype,"TokenTTL"),_.prototype),_) -e.default=$})),define("consul-ui/models/binding-rule",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x -function j(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function C(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let S=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string",{defaultValue:()=>""}),o=(0,t.attr)("string"),u=(0,t.attr)("string",{defaultValue:()=>""}),c=(0,t.attr)("string"),d=(0,t.attr)("string"),m=(0,t.attr)("number"),p=(0,t.attr)("number"),f=class extends t.default{constructor(...e){super(...e),j(this,"uid",b,this),j(this,"ID",h,this),j(this,"Datacenter",v,this),j(this,"Namespace",y,this),j(this,"Partition",g,this),j(this,"Description",O,this),j(this,"AuthMethod",_,this),j(this,"Selector",P,this),j(this,"BindType",w,this),j(this,"BindName",E,this),j(this,"CreateIndex",k,this),j(this,"ModifyIndex",x,this)}},b=C(f.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=C(f.prototype,"ID",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=C(f.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=C(f.prototype,"Namespace",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=C(f.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=C(f.prototype,"Description",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=C(f.prototype,"AuthMethod",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=C(f.prototype,"Selector",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=C(f.prototype,"BindType",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=C(f.prototype,"BindName",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=C(f.prototype,"CreateIndex",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=C(f.prototype,"ModifyIndex",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f) -e.default=S})),define("consul-ui/models/coordinate",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h -function v(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function y(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Node" -let g=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)(),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("number"),u=class extends t.default{constructor(...e){super(...e),v(this,"uid",c,this),v(this,"Node",d,this),v(this,"Coord",m,this),v(this,"Segment",p,this),v(this,"Datacenter",f,this),v(this,"Partition",b,this),v(this,"SyncTime",h,this)}},c=y(u.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=y(u.prototype,"Node",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=y(u.prototype,"Coord",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=y(u.prototype,"Segment",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=y(u.prototype,"Datacenter",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=y(u.prototype,"Partition",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=y(u.prototype,"SyncTime",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u) -e.default=g})),define("consul-ui/models/dc",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M -function D(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function T(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.FOREIGN_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.FOREIGN_KEY="Datacenter" -e.SLUG_KEY="Name" -let L=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)("boolean"),l=(0,t.attr)("number"),s=(0,t.attr)("number"),i=(0,t.attr)("string"),o=(0,t.attr)(),u=(0,t.attr)(),c=(0,t.attr)(),d=(0,t.attr)(),m=(0,t.attr)(),p=(0,t.attr)("boolean"),f=(0,t.attr)("boolean"),b=(0,t.attr)("string"),h=(0,t.attr)("boolean",{defaultValue:()=>!0}),v=class extends t.default{constructor(...e){super(...e),D(this,"uri",y,this),D(this,"Name",g,this),D(this,"Healthy",O,this),D(this,"FailureTolerance",_,this),D(this,"OptimisticFailureTolerance",P,this),D(this,"Leader",w,this),D(this,"Voters",E,this),D(this,"Servers",k,this),D(this,"RedundancyZones",x,this),D(this,"Default",j,this),D(this,"ReadReplicas",C,this),D(this,"Local",S,this),D(this,"Primary",N,this),D(this,"DefaultACLPolicy",z,this),D(this,"MeshEnabled",M,this)}},y=T(v.prototype,"uri",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=T(v.prototype,"Name",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=T(v.prototype,"Healthy",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=T(v.prototype,"FailureTolerance",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=T(v.prototype,"OptimisticFailureTolerance",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=T(v.prototype,"Leader",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=T(v.prototype,"Voters",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=T(v.prototype,"Servers",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=T(v.prototype,"RedundancyZones",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=T(v.prototype,"Default",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=T(v.prototype,"ReadReplicas",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=T(v.prototype,"Local",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=T(v.prototype,"Primary",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=T(v.prototype,"DefaultACLPolicy",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=T(v.prototype,"MeshEnabled",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v) -e.default=L})),define("consul-ui/models/discovery-chain",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h -function v(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function y(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ServiceName" -let g=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)(),o=(0,t.attr)(),u=class extends t.default{constructor(...e){super(...e),v(this,"uid",c,this),v(this,"ServiceName",d,this),v(this,"Datacenter",m,this),v(this,"Partition",p,this),v(this,"Namespace",f,this),v(this,"Chain",b,this),v(this,"meta",h,this)}},c=y(u.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=y(u.prototype,"ServiceName",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=y(u.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=y(u.prototype,"Partition",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=y(u.prototype,"Namespace",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=y(u.prototype,"Chain",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=y(u.prototype,"meta",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u) -e.default=g})),define("consul-ui/models/gateway-config",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model"],(function(e,t,n,r){var a,l,s,i,o -function u(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function c(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let d=(a=(0,r.attr)("number",{defaultValue:()=>0}),l=(0,n.array)("string",{defaultValue:()=>[]}),s=class extends t.default{constructor(...e){super(...e),u(this,"AssociatedServiceCount",i,this),u(this,"Addresses",o,this)}},i=c(s.prototype,"AssociatedServiceCount",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=c(s.prototype,"Addresses",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) -e.default=d})) -define("consul-ui/models/health-check",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model","consul-ui/decorators/replace"],(function(e,t,n,r,a){var l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D -function T(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function L(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.schema=void 0 -e.schema={Status:{allowedValues:["passing","warning","critical"]},Type:{allowedValues:["serf","script","http","tcp","ttl","docker","grpc","alias"]}} -let A=(l=(0,r.attr)("string"),s=(0,r.attr)("string"),i=(0,a.replace)("","serf"),o=(0,r.attr)("string"),u=(0,r.attr)("string"),c=(0,r.attr)("string"),d=(0,r.attr)("string"),m=(0,r.attr)("string"),p=(0,r.attr)("string"),f=(0,r.attr)("string"),b=(0,a.nullValue)([]),h=(0,n.array)("string"),v=(0,r.attr)(),y=(0,r.attr)("boolean"),g=Ember.computed("ServiceID"),O=Ember.computed("Type"),_=class extends t.default{constructor(...e){super(...e),T(this,"Name",P,this),T(this,"CheckID",w,this),T(this,"Type",E,this),T(this,"Status",k,this),T(this,"Notes",x,this),T(this,"Output",j,this),T(this,"ServiceName",C,this),T(this,"ServiceID",S,this),T(this,"Node",N,this),T(this,"ServiceTags",z,this),T(this,"Definition",M,this),T(this,"Exposed",D,this)}get Kind(){return""===this.ServiceID?"node":"service"}get Exposable(){return["http","grpc"].includes(this.Type)}},P=L(_.prototype,"Name",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=L(_.prototype,"CheckID",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=L(_.prototype,"Type",[i,o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=L(_.prototype,"Status",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=L(_.prototype,"Notes",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=L(_.prototype,"Output",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=L(_.prototype,"ServiceName",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=L(_.prototype,"ServiceID",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=L(_.prototype,"Node",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=L(_.prototype,"ServiceTags",[b,h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=L(_.prototype,"Definition",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=L(_.prototype,"Exposed",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L(_.prototype,"Kind",[g],Object.getOwnPropertyDescriptor(_.prototype,"Kind"),_.prototype),L(_.prototype,"Exposable",[O],Object.getOwnPropertyDescriptor(_.prototype,"Exposable"),_.prototype),_) -e.default=A})),define("consul-ui/models/intention-permission-http-header",["exports","ember-data-model-fragments/fragment","@ember-data/model"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y -function g(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function O(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.schema=void 0 -const _={Name:{required:!0},HeaderType:{allowedValues:["Exact","Prefix","Suffix","Regex","Present"]}} -e.schema=_ -let P=(r=(0,n.attr)("string"),a=(0,n.attr)("string"),l=(0,n.attr)("string"),s=(0,n.attr)("string"),i=(0,n.attr)("string"),o=(0,n.attr)(),u=Ember.computed.or(..._.HeaderType.allowedValues),c=Ember.computed(..._.HeaderType.allowedValues),d=class extends t.default{constructor(...e){super(...e),g(this,"Name",m,this),g(this,"Exact",p,this),g(this,"Prefix",f,this),g(this,"Suffix",b,this),g(this,"Regex",h,this),g(this,"Present",v,this),g(this,"Value",y,this)}get HeaderType(){return _.HeaderType.allowedValues.find(e=>void 0!==this[e])}},m=O(d.prototype,"Name",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=O(d.prototype,"Exact",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=O(d.prototype,"Prefix",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=O(d.prototype,"Suffix",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=O(d.prototype,"Regex",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=O(d.prototype,"Present",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=O(d.prototype,"Value",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O(d.prototype,"HeaderType",[c],Object.getOwnPropertyDescriptor(d.prototype,"HeaderType"),d.prototype),d) -e.default=P})),define("consul-ui/models/intention-permission-http",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model"],(function(e,t,n,r){var a,l,s,i,o,u,c,d,m,p,f,b,h,v -function y(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function g(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.schema=void 0 -const O={PathType:{allowedValues:["PathPrefix","PathExact","PathRegex"]},Methods:{allowedValues:["GET","HEAD","POST","PUT","DELETE","CONNECT","OPTIONS","TRACE","PATCH"]}} -e.schema=O -let _=(a=(0,r.attr)("string"),l=(0,r.attr)("string"),s=(0,r.attr)("string"),i=(0,n.fragmentArray)("intention-permission-http-header"),o=(0,n.array)("string"),u=Ember.computed.or(...O.PathType.allowedValues),c=Ember.computed(...O.PathType.allowedValues),d=class extends t.default{constructor(...e){super(...e),y(this,"PathExact",m,this),y(this,"PathPrefix",p,this),y(this,"PathRegex",f,this),y(this,"Header",b,this),y(this,"Methods",h,this),y(this,"Path",v,this)}get PathType(){return O.PathType.allowedValues.find(e=>"string"==typeof this[e])}},m=g(d.prototype,"PathExact",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=g(d.prototype,"PathPrefix",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=g(d.prototype,"PathRegex",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=g(d.prototype,"Header",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=g(d.prototype,"Methods",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=g(d.prototype,"Path",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g(d.prototype,"PathType",[c],Object.getOwnPropertyDescriptor(d.prototype,"PathType"),d.prototype),d) -e.default=_})),define("consul-ui/models/intention-permission",["exports","ember-data-model-fragments/fragment","ember-data-model-fragments/attributes","@ember-data/model"],(function(e,t,n,r){var a,l,s,i,o -function u(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function c(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.schema=void 0 -const d={Action:{defaultValue:"allow",allowedValues:["allow","deny"]}} -e.schema=d -let m=(a=(0,r.attr)("string",{defaultValue:()=>d.Action.defaultValue}),l=(0,n.fragment)("intention-permission-http"),s=class extends t.default{constructor(...e){super(...e),u(this,"Action",i,this),u(this,"HTTP",o,this)}},i=c(s.prototype,"Action",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=c(s.prototype,"HTTP",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) -e.default=m})),define("consul-ui/models/intention",["exports","@ember-data/model","ember-data-model-fragments/attributes","consul-ui/decorators/replace"],(function(e,t,n,r){var a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D,T,L,A,R,I,B,H,$,U,F,q,K,Y,V,W,G,Q,Z,J -function X(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function ee(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let te=(a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string",{defaultValue:()=>"*"}),u=(0,t.attr)("string",{defaultValue:()=>"*"}),c=(0,t.attr)("string",{defaultValue:()=>"default"}),d=(0,t.attr)("string",{defaultValue:()=>"default"}),m=(0,t.attr)("string",{defaultValue:()=>"default"}),p=(0,t.attr)("string",{defaultValue:()=>"default"}),f=(0,t.attr)("number"),b=(0,t.attr)("string",{defaultValue:()=>"consul"}),h=(0,r.nullValue)(void 0),v=(0,t.attr)("string"),y=(0,t.attr)("string"),g=(0,t.attr)("boolean",{defaultValue:()=>!0}),O=(0,t.attr)("number"),_=(0,t.attr)("date"),P=(0,t.attr)("date"),w=(0,t.attr)("number"),E=(0,t.attr)("number"),k=(0,t.attr)(),x=(0,t.attr)({defaultValue:()=>[]}),j=(0,n.fragmentArray)("intention-permission"),C=Ember.computed("Meta"),S=class extends t.default{constructor(...e){super(...e),X(this,"uid",N,this),X(this,"ID",z,this),X(this,"Datacenter",M,this),X(this,"Description",D,this),X(this,"SourceName",T,this),X(this,"DestinationName",L,this),X(this,"SourceNS",A,this),X(this,"DestinationNS",R,this),X(this,"SourcePartition",I,this),X(this,"DestinationPartition",B,this),X(this,"Precedence",H,this),X(this,"SourceType",$,this),X(this,"Action",U,this),X(this,"LegacyID",F,this),X(this,"Legacy",q,this),X(this,"SyncTime",K,this),X(this,"CreatedAt",Y,this),X(this,"UpdatedAt",V,this),X(this,"CreateIndex",W,this),X(this,"ModifyIndex",G,this),X(this,"Meta",Q,this),X(this,"Resources",Z,this),X(this,"Permissions",J,this)}get IsManagedByCRD(){return void 0!==Object.entries(this.Meta||{}).find(([e,t])=>"external-source"===e&&"kubernetes"===t)}},N=ee(S.prototype,"uid",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=ee(S.prototype,"ID",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=ee(S.prototype,"Datacenter",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=ee(S.prototype,"Description",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=ee(S.prototype,"SourceName",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=ee(S.prototype,"DestinationName",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=ee(S.prototype,"SourceNS",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=ee(S.prototype,"DestinationNS",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=ee(S.prototype,"SourcePartition",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=ee(S.prototype,"DestinationPartition",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=ee(S.prototype,"Precedence",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=ee(S.prototype,"SourceType",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=ee(S.prototype,"Action",[h,v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=ee(S.prototype,"LegacyID",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=ee(S.prototype,"Legacy",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=ee(S.prototype,"SyncTime",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=ee(S.prototype,"CreatedAt",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=ee(S.prototype,"UpdatedAt",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=ee(S.prototype,"CreateIndex",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=ee(S.prototype,"ModifyIndex",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=ee(S.prototype,"Meta",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=ee(S.prototype,"Resources",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=ee(S.prototype,"Permissions",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee(S.prototype,"IsManagedByCRD",[C],Object.getOwnPropertyDescriptor(S.prototype,"IsManagedByCRD"),S.prototype),S) -e.default=te})),define("consul-ui/models/kv",["exports","@ember-data/model","consul-ui/utils/isFolder","consul-ui/decorators/replace"],(function(e,t,n,r){var a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D,T,L -function A(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function R(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Key" -let I=(a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("number"),i=(0,t.attr)(),o=(0,t.attr)("string"),u=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("number"),m=(0,t.attr)("number"),p=(0,r.nullValue)(void 0),f=(0,t.attr)("string"),b=(0,t.attr)("number"),h=(0,t.attr)("number"),v=(0,t.attr)("string"),y=(0,t.attr)({defaultValue:()=>[]}),g=Ember.computed("isFolder"),O=Ember.computed("Key"),_=class extends t.default{constructor(...e){super(...e),A(this,"uid",P,this),A(this,"Key",w,this),A(this,"SyncTime",E,this),A(this,"meta",k,this),A(this,"Datacenter",x,this),A(this,"Namespace",j,this),A(this,"Partition",C,this),A(this,"LockIndex",S,this),A(this,"Flags",N,this),A(this,"Value",z,this),A(this,"CreateIndex",M,this),A(this,"ModifyIndex",D,this),A(this,"Session",T,this),A(this,"Resources",L,this)}get Kind(){return this.isFolder?"folder":"key"}get isFolder(){return(0,n.default)(this.Key||"")}},P=R(_.prototype,"uid",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=R(_.prototype,"Key",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=R(_.prototype,"SyncTime",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=R(_.prototype,"meta",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=R(_.prototype,"Datacenter",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=R(_.prototype,"Namespace",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=R(_.prototype,"Partition",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=R(_.prototype,"LockIndex",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=R(_.prototype,"Flags",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=R(_.prototype,"Value",[p,f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=R(_.prototype,"CreateIndex",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=R(_.prototype,"ModifyIndex",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=R(_.prototype,"Session",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=R(_.prototype,"Resources",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R(_.prototype,"Kind",[g],Object.getOwnPropertyDescriptor(_.prototype,"Kind"),_.prototype),R(_.prototype,"isFolder",[O],Object.getOwnPropertyDescriptor(_.prototype,"isFolder"),_.prototype),_) -e.default=I})),define("consul-ui/models/license",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y -function g(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function O(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uri" -let _=(n=(0,t.attr)("string"),r=(0,t.attr)("boolean"),a=(0,t.attr)("number"),l=(0,t.attr)(),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),u=(0,t.attr)(),c=class extends t.default{constructor(...e){super(...e),g(this,"uri",d,this),g(this,"Valid",m,this),g(this,"SyncTime",p,this),g(this,"meta",f,this),g(this,"Datacenter",b,this),g(this,"Namespace",h,this),g(this,"Partition",v,this),g(this,"License",y,this)}},d=O(c.prototype,"uri",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=O(c.prototype,"Valid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=O(c.prototype,"SyncTime",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=O(c.prototype,"meta",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=O(c.prototype,"Datacenter",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=O(c.prototype,"Namespace",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=O(c.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=O(c.prototype,"License",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c) -e.default=_})),define("consul-ui/models/node",["exports","@ember-data/model","ember-data-model-fragments/attributes"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D,T,L,A,R,I,B,H,$,U,F -function q(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function K(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let Y=(r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),u=(0,t.attr)("number"),c=(0,t.attr)("number"),d=(0,t.attr)("number"),m=(0,t.attr)(),p=(0,t.attr)(),f=(0,t.attr)(),b=(0,t.attr)({defaultValue:()=>[]}),h=(0,t.hasMany)("service-instance"),v=(0,n.fragmentArray)("health-check"),y=Ember.computed.filter("Services",e=>"connect-proxy"!==e.Service.Kind),g=Ember.computed.filter("Services",e=>"connect-proxy"===e.Service.Kind),O=Ember.computed.filter("Checks",e=>""===e.ServiceID),_=Ember.computed("ChecksCritical","ChecksPassing","ChecksWarning"),P=Ember.computed("NodeChecks.[]"),w=Ember.computed("NodeChecks.[]"),E=Ember.computed("NodeChecks.[]"),k=class extends t.default{constructor(...e){super(...e),q(this,"uid",x,this),q(this,"ID",j,this),q(this,"Datacenter",C,this),q(this,"Partition",S,this),q(this,"Address",N,this),q(this,"Node",z,this),q(this,"SyncTime",M,this),q(this,"CreateIndex",D,this),q(this,"ModifyIndex",T,this),q(this,"meta",L,this),q(this,"Meta",A,this),q(this,"TaggedAddresses",R,this),q(this,"Resources",I,this),q(this,"Services",B,this),q(this,"Checks",H,this),q(this,"MeshServiceInstances",$,this),q(this,"ProxyServiceInstances",U,this),q(this,"NodeChecks",F,this)}get Status(){switch(!0){case 0!==this.ChecksCritical:return"critical" -case 0!==this.ChecksWarning:return"warning" -case 0!==this.ChecksPassing:return"passing" -default:return"empty"}}get ChecksCritical(){return this.NodeChecks.filter(e=>"critical"===e.Status).length}get ChecksPassing(){return this.NodeChecks.filter(e=>"passing"===e.Status).length}get ChecksWarning(){return this.NodeChecks.filter(e=>"warning"===e.Status).length}},x=K(k.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=K(k.prototype,"ID",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=K(k.prototype,"Datacenter",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=K(k.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=K(k.prototype,"Address",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=K(k.prototype,"Node",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=K(k.prototype,"SyncTime",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=K(k.prototype,"CreateIndex",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=K(k.prototype,"ModifyIndex",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=K(k.prototype,"meta",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=K(k.prototype,"Meta",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=K(k.prototype,"TaggedAddresses",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=K(k.prototype,"Resources",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=K(k.prototype,"Services",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=K(k.prototype,"Checks",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=K(k.prototype,"MeshServiceInstances",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=K(k.prototype,"ProxyServiceInstances",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=K(k.prototype,"NodeChecks",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K(k.prototype,"Status",[_],Object.getOwnPropertyDescriptor(k.prototype,"Status"),k.prototype),K(k.prototype,"ChecksCritical",[P],Object.getOwnPropertyDescriptor(k.prototype,"ChecksCritical"),k.prototype),K(k.prototype,"ChecksPassing",[w],Object.getOwnPropertyDescriptor(k.prototype,"ChecksPassing"),k.prototype),K(k.prototype,"ChecksWarning",[E],Object.getOwnPropertyDescriptor(k.prototype,"ChecksWarning"),k.prototype),k) -e.default=Y})),define("consul-ui/models/nspace",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P -function w(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function E(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.NSPACE_KEY=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name" -e.NSPACE_KEY="Namespace" -let k=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("number"),o=(0,t.attr)("string",{defaultValue:()=>""}),u=(0,t.attr)({defaultValue:()=>[]}),c=(0,t.attr)("string"),d=(0,t.attr)({defaultValue:()=>({PolicyDefaults:[],RoleDefaults:[]})}),m=class extends t.default{constructor(...e){super(...e),w(this,"uid",p,this),w(this,"Name",f,this),w(this,"Datacenter",b,this),w(this,"Partition",h,this),w(this,"Namespace",v,this),w(this,"SyncTime",y,this),w(this,"Description",g,this),w(this,"Resources",O,this),w(this,"DeletedAt",_,this),w(this,"ACLs",P,this)}},p=E(m.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=E(m.prototype,"Name",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=E(m.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=E(m.prototype,"Partition",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=E(m.prototype,"Namespace",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=E(m.prototype,"SyncTime",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=E(m.prototype,"Description",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=E(m.prototype,"Resources",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=E(m.prototype,"DeletedAt",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=E(m.prototype,"ACLs",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m) -e.default=k})),define("consul-ui/models/oidc-provider",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O -function _(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function P(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name" -let w=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),u=(0,t.attr)("string"),c=(0,t.attr)(),d=class extends t.default{constructor(...e){super(...e),_(this,"uid",m,this),_(this,"Name",p,this),_(this,"Datacenter",f,this),_(this,"Namespace",b,this),_(this,"Partition",h,this),_(this,"Kind",v,this),_(this,"AuthURL",y,this),_(this,"DisplayName",g,this),_(this,"meta",O,this)}},m=P(d.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=P(d.prototype,"Name",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=P(d.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=P(d.prototype,"Namespace",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(d.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=P(d.prototype,"Kind",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(d.prototype,"AuthURL",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=P(d.prototype,"DisplayName",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=P(d.prototype,"meta",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d) -e.default=w})),define("consul-ui/models/partition",["exports","ember-data/model","ember-data/attr"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_ -function P(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function w(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.PARTITION_KEY=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name" -e.PARTITION_KEY="Partition" -let E=(r=(0,n.default)("string"),a=(0,n.default)("string"),l=(0,n.default)("string"),s=(0,n.default)("string"),i=(0,n.default)("string"),o=(0,n.default)("string"),u=(0,n.default)("string"),c=(0,n.default)("number"),d=(0,n.default)(),m=class extends t.default{constructor(...e){super(...e),P(this,"uid",p,this),P(this,"Name",f,this),P(this,"Description",b,this),P(this,"DeletedAt",h,this),P(this,"Datacenter",v,this),P(this,"Namespace",y,this),P(this,"Partition",g,this),P(this,"SyncTime",O,this),P(this,"meta",_,this)}},p=w(m.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=w(m.prototype,"Name",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=w(m.prototype,"Description",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=w(m.prototype,"DeletedAt",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=w(m.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=w(m.prototype,"Namespace",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=w(m.prototype,"Partition",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=w(m.prototype,"SyncTime",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=w(m.prototype,"meta",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m) -e.default=E})),define("consul-ui/models/permission",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c -function d(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function m(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let p=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("boolean"),s=class extends t.default{constructor(...e){super(...e),d(this,"Resource",i,this),d(this,"Segment",o,this),d(this,"Access",u,this),d(this,"Allow",c,this)}},i=m(s.prototype,"Resource",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=m(s.prototype,"Segment",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=m(s.prototype,"Access",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=m(s.prototype,"Allow",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) -e.default=p})),define("consul-ui/models/policy",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D -function T(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function L(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=e.MANAGEMENT_ID=void 0 -e.MANAGEMENT_ID="00000000-0000-0000-0000-000000000001" -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let A=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string",{defaultValue:()=>""}),o=(0,t.attr)("string",{defaultValue:()=>""}),u=(0,t.attr)("string",{defaultValue:()=>""}),c=(0,t.attr)("number"),d=(0,t.attr)("number"),m=(0,t.attr)("number"),p=(0,t.attr)(),f=(0,t.attr)(),b=(0,t.attr)("string",{defaultValue:()=>""}),h=(0,t.attr)("number",{defaultValue:()=>(new Date).getTime()}),v=Ember.computed("ID"),y=class extends t.default{constructor(...e){super(...e),T(this,"uid",g,this),T(this,"ID",O,this),T(this,"Datacenter",_,this),T(this,"Namespace",P,this),T(this,"Partition",w,this),T(this,"Name",E,this),T(this,"Description",k,this),T(this,"Rules",x,this),T(this,"SyncTime",j,this),T(this,"CreateIndex",C,this),T(this,"ModifyIndex",S,this),T(this,"Datacenters",N,this),T(this,"meta",z,this),T(this,"template",M,this),T(this,"CreateTime",D,this)}get isGlobalManagement(){return"00000000-0000-0000-0000-000000000001"===this.ID}},g=L(y.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=L(y.prototype,"ID",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=L(y.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=L(y.prototype,"Namespace",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=L(y.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=L(y.prototype,"Name",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=L(y.prototype,"Description",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=L(y.prototype,"Rules",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=L(y.prototype,"SyncTime",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=L(y.prototype,"CreateIndex",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=L(y.prototype,"ModifyIndex",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=L(y.prototype,"Datacenters",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=L(y.prototype,"meta",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=L(y.prototype,"template",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=L(y.prototype,"CreateTime",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L(y.prototype,"isGlobalManagement",[v],Object.getOwnPropertyDescriptor(y.prototype,"isGlobalManagement"),y.prototype),y) -e.default=A})),define("consul-ui/models/proxy",["exports","@ember-data/model","consul-ui/models/service-instance"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w -function E(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function k(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Node,ServiceID" -let x=(r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),u=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("number"),m=(0,t.attr)(),p=class extends n.default{constructor(...e){super(...e),E(this,"uid",f,this),E(this,"ID",b,this),E(this,"Datacenter",h,this),E(this,"Namespace",v,this),E(this,"Partition",y,this),E(this,"ServiceName",g,this),E(this,"ServiceID",O,this),E(this,"NodeName",_,this),E(this,"SyncTime",P,this),E(this,"ServiceProxy",w,this)}},f=k(p.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=k(p.prototype,"ID",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=k(p.prototype,"Datacenter",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=k(p.prototype,"Namespace",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=k(p.prototype,"Partition",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=k(p.prototype,"ServiceName",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=k(p.prototype,"ServiceID",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=k(p.prototype,"NodeName",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=k(p.prototype,"SyncTime",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=k(p.prototype,"ServiceProxy",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p) -e.default=x})),define("consul-ui/models/role",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D,T -function L(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function A(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let R=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string",{defaultValue:()=>""}),o=(0,t.attr)("string",{defaultValue:()=>""}),u=(0,t.attr)({defaultValue:()=>[]}),c=(0,t.attr)({defaultValue:()=>[]}),d=(0,t.attr)({defaultValue:()=>[]}),m=(0,t.attr)("number"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),b=(0,t.attr)("number"),h=(0,t.attr)(),v=(0,t.attr)("string"),y=class extends t.default{constructor(...e){super(...e),L(this,"uid",g,this),L(this,"ID",O,this),L(this,"Datacenter",_,this),L(this,"Namespace",P,this),L(this,"Partition",w,this),L(this,"Name",E,this),L(this,"Description",k,this),L(this,"Policies",x,this),L(this,"ServiceIdentities",j,this),L(this,"NodeIdentities",C,this),L(this,"SyncTime",S,this),L(this,"CreateIndex",N,this),L(this,"ModifyIndex",z,this),L(this,"CreateTime",M,this),L(this,"Datacenters",D,this),L(this,"Hash",T,this)}},g=A(y.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=A(y.prototype,"ID",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=A(y.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=A(y.prototype,"Namespace",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=A(y.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=A(y.prototype,"Name",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=A(y.prototype,"Description",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=A(y.prototype,"Policies",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=A(y.prototype,"ServiceIdentities",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=A(y.prototype,"NodeIdentities",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=A(y.prototype,"SyncTime",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=A(y.prototype,"CreateIndex",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=A(y.prototype,"ModifyIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=A(y.prototype,"CreateTime",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=A(y.prototype,"Datacenters",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=A(y.prototype,"Hash",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y) -e.default=R})),define("consul-ui/models/service-instance",["exports","@ember-data/model","ember-data-model-fragments/attributes"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D,T,L,A,R,I,B,H,$,U,F,q,K,Y,V,W,G,Q,Z,J,X,ee,te -function ne(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function re(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Collection=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Node.Node,Service.ID" -const ae=(r=Ember._tracked,l=re((a=class{constructor(e){ne(this,"items",l,this),this.items=e}get ExternalSources(){const e=this.items.reduce((function(e,t){return e.concat(t.ExternalSources||[])}),[]) -return[...new Set(e)].filter(Boolean).sort()}}).prototype,"items",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) -e.Collection=ae -let le=(s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)(),u=(0,t.attr)(),c=(0,t.attr)(),d=(0,n.fragmentArray)("health-check"),m=(0,t.attr)("number"),p=(0,t.attr)(),f=(0,t.attr)({defaultValue:()=>[]}),b=Ember.computed.alias("Service.Service"),h=Ember.computed.or("Service.{ID,Service}"),v=Ember.computed.or("Service.Address","Node.Service"),y=(0,t.attr)("string"),g=Ember.computed.alias("Service.Tags"),O=Ember.computed.alias("Service.Meta"),_=Ember.computed.alias("Service.Namespace"),P=Ember.computed.alias("Service.Partition"),w=Ember.computed.filter("Checks.@each.Kind",e=>"service"===e.Kind),E=Ember.computed.filter("Checks.@each.Kind",e=>"node"===e.Kind),k=Ember.computed("Service.Meta"),x=Ember.computed("Service.Kind"),j=Ember.computed("Service.Kind"),C=Ember.computed("IsOrigin"),S=Ember.computed("ChecksPassing","ChecksWarning","ChecksCritical"),N=Ember.computed("Checks.[]"),z=Ember.computed("Checks.[]"),M=Ember.computed("Checks.[]"),D=Ember.computed("Checks.[]","ChecksPassing"),T=Ember.computed("Checks.[]","ChecksWarning"),L=Ember.computed("Checks.[]","ChecksCritical"),A=class extends t.default{constructor(...e){super(...e),ne(this,"uid",R,this),ne(this,"Datacenter",I,this),ne(this,"Proxy",B,this),ne(this,"Node",H,this),ne(this,"Service",$,this),ne(this,"Checks",U,this),ne(this,"SyncTime",F,this),ne(this,"meta",q,this),ne(this,"Resources",K,this),ne(this,"Name",Y,this),ne(this,"ID",V,this),ne(this,"Address",W,this),ne(this,"SocketPath",G,this),ne(this,"Tags",Q,this),ne(this,"Meta",Z,this),ne(this,"Namespace",J,this),ne(this,"Partition",X,this),ne(this,"ServiceChecks",ee,this),ne(this,"NodeChecks",te,this)}get ExternalSources(){const e=Object.entries(this.Service.Meta||{}).filter(([e,t])=>"external-source"===e).map(([e,t])=>t) -return[...new Set(e)]}get IsProxy(){return["connect-proxy","mesh-gateway","ingress-gateway","terminating-gateway"].includes(this.Service.Kind)}get IsOrigin(){return!["connect-proxy","mesh-gateway"].includes(this.Service.Kind)}get IsMeshOrigin(){return this.IsOrigin&&!["terminating-gateway"].includes(this.Service.Kind)}get Status(){switch(!0){case 0!==this.ChecksCritical.length:return"critical" -case 0!==this.ChecksWarning.length:return"warning" -case 0!==this.ChecksPassing.length:return"passing" -default:return"empty"}}get ChecksPassing(){return this.Checks.filter(e=>"passing"===e.Status)}get ChecksWarning(){return this.Checks.filter(e=>"warning"===e.Status)}get ChecksCritical(){return this.Checks.filter(e=>"critical"===e.Status)}get PercentageChecksPassing(){return this.ChecksPassing.length/this.Checks.length*100}get PercentageChecksWarning(){return this.ChecksWarning.length/this.Checks.length*100}get PercentageChecksCritical(){return this.ChecksCritical.length/this.Checks.length*100}},R=re(A.prototype,"uid",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=re(A.prototype,"Datacenter",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=re(A.prototype,"Proxy",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=re(A.prototype,"Node",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=re(A.prototype,"Service",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=re(A.prototype,"Checks",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=re(A.prototype,"SyncTime",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=re(A.prototype,"meta",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=re(A.prototype,"Resources",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=re(A.prototype,"Name",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=re(A.prototype,"ID",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=re(A.prototype,"Address",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=re(A.prototype,"SocketPath",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=re(A.prototype,"Tags",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=re(A.prototype,"Meta",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=re(A.prototype,"Namespace",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=re(A.prototype,"Partition",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=re(A.prototype,"ServiceChecks",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=re(A.prototype,"NodeChecks",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re(A.prototype,"ExternalSources",[k],Object.getOwnPropertyDescriptor(A.prototype,"ExternalSources"),A.prototype),re(A.prototype,"IsProxy",[x],Object.getOwnPropertyDescriptor(A.prototype,"IsProxy"),A.prototype),re(A.prototype,"IsOrigin",[j],Object.getOwnPropertyDescriptor(A.prototype,"IsOrigin"),A.prototype),re(A.prototype,"IsMeshOrigin",[C],Object.getOwnPropertyDescriptor(A.prototype,"IsMeshOrigin"),A.prototype),re(A.prototype,"Status",[S],Object.getOwnPropertyDescriptor(A.prototype,"Status"),A.prototype),re(A.prototype,"ChecksPassing",[N],Object.getOwnPropertyDescriptor(A.prototype,"ChecksPassing"),A.prototype),re(A.prototype,"ChecksWarning",[z],Object.getOwnPropertyDescriptor(A.prototype,"ChecksWarning"),A.prototype),re(A.prototype,"ChecksCritical",[M],Object.getOwnPropertyDescriptor(A.prototype,"ChecksCritical"),A.prototype),re(A.prototype,"PercentageChecksPassing",[D],Object.getOwnPropertyDescriptor(A.prototype,"PercentageChecksPassing"),A.prototype),re(A.prototype,"PercentageChecksWarning",[T],Object.getOwnPropertyDescriptor(A.prototype,"PercentageChecksWarning"),A.prototype),re(A.prototype,"PercentageChecksCritical",[L],Object.getOwnPropertyDescriptor(A.prototype,"PercentageChecksCritical"),A.prototype),A) -e.default=le})),define("consul-ui/models/service",["exports","@ember-data/model","ember-data-model-fragments/attributes","consul-ui/decorators/replace"],(function(e,t,n,r){var a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D,T,L,A,R,I,B,H,$,U,F,q,K,Y,V,W,G,Q,Z,J,X,ee,te,ne,re,ae,le,se,ie,oe,ue -function ce(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function de(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Collection=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="Name" -const me=(a=Ember._tracked,s=de((l=class{constructor(e){ce(this,"items",s,this),this.items=e}get ExternalSources(){const e=this.items.reduce((function(e,t){return e.concat(t.ExternalSources||[])}),[]) -return[...new Set(e)].filter(Boolean).sort()}get Partitions(){return[...new Set(this.items.map(e=>e.Partition))].sort()}}).prototype,"items",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l) -e.Collection=me -let pe=(i=(0,t.attr)("string"),o=(0,t.attr)("string"),u=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),m=(0,t.attr)("string"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),b=(0,t.attr)("number"),h=(0,t.attr)("number"),v=(0,t.attr)("boolean"),y=(0,t.attr)("boolean"),g=(0,t.attr)({defaultValue:()=>[]}),O=(0,t.attr)("number"),_=(0,t.attr)("number"),P=(0,t.attr)("number"),w=(0,r.nullValue)([]),E=(0,t.attr)({defaultValue:()=>[]}),k=(0,t.attr)(),x=(0,t.attr)(),j=(0,n.fragment)("gateway-config"),C=(0,r.nullValue)([]),S=(0,t.attr)(),N=(0,t.attr)(),z=(0,t.attr)(),M=Ember.computed("ChecksPassing","ChecksWarning","ChecksCritical"),D=Ember.computed("MeshChecksPassing","MeshChecksWarning","MeshChecksCritical"),T=Ember.computed("ConnectedWithProxy","ConnectedWithGateway"),L=Ember.computed("MeshEnabled","Kind"),A=Ember.computed("MeshChecksPassing","MeshChecksWarning","MeshChecksCritical"),R=Ember.computed("ChecksPassing","Proxy.ChecksPassing"),I=Ember.computed("ChecksWarning","Proxy.ChecksWarning"),B=Ember.computed("ChecksCritical","Proxy.ChecksCritical"),H=class extends t.default{constructor(...e){super(...e),ce(this,"uid",$,this),ce(this,"Name",U,this),ce(this,"Datacenter",F,this),ce(this,"Namespace",q,this),ce(this,"Partition",K,this),ce(this,"Kind",Y,this),ce(this,"ChecksPassing",V,this),ce(this,"ChecksCritical",W,this),ce(this,"ChecksWarning",G,this),ce(this,"InstanceCount",Q,this),ce(this,"ConnectedWithGateway",Z,this),ce(this,"ConnectedWithProxy",J,this),ce(this,"Resources",X,this),ce(this,"SyncTime",ee,this),ce(this,"CreateIndex",te,this),ce(this,"ModifyIndex",ne,this),ce(this,"Tags",re,this),ce(this,"Nodes",ae,this),ce(this,"Proxy",le,this),ce(this,"GatewayConfig",se,this),ce(this,"ExternalSources",ie,this),ce(this,"Meta",oe,this),ce(this,"meta",ue,this)}get ChecksTotal(){return this.ChecksPassing+this.ChecksWarning+this.ChecksCritical}get MeshChecksTotal(){return this.MeshChecksPassing+this.MeshChecksWarning+this.MeshChecksCritical}get MeshEnabled(){return this.ConnectedWithProxy||this.ConnectedWithGateway}get InMesh(){return this.MeshEnabled||(this.Kind||"").length>0}get MeshStatus(){switch(!0){case 0!==this.MeshChecksCritical:return"critical" -case 0!==this.MeshChecksWarning:return"warning" -case 0!==this.MeshChecksPassing:return"passing" -default:return"empty"}}get MeshChecksPassing(){let e=0 -return void 0!==this.Proxy&&(e=this.Proxy.ChecksPassing),this.ChecksPassing+e}get MeshChecksWarning(){let e=0 -return void 0!==this.Proxy&&(e=this.Proxy.ChecksWarning),this.ChecksWarning+e}get MeshChecksCritical(){let e=0 -return void 0!==this.Proxy&&(e=this.Proxy.ChecksCritical),this.ChecksCritical+e}},$=de(H.prototype,"uid",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=de(H.prototype,"Name",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=de(H.prototype,"Datacenter",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=de(H.prototype,"Namespace",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=de(H.prototype,"Partition",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=de(H.prototype,"Kind",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=de(H.prototype,"ChecksPassing",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=de(H.prototype,"ChecksCritical",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=de(H.prototype,"ChecksWarning",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Q=de(H.prototype,"InstanceCount",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z=de(H.prototype,"ConnectedWithGateway",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),J=de(H.prototype,"ConnectedWithProxy",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),X=de(H.prototype,"Resources",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ee=de(H.prototype,"SyncTime",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),te=de(H.prototype,"CreateIndex",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ne=de(H.prototype,"ModifyIndex",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),re=de(H.prototype,"Tags",[w,E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ae=de(H.prototype,"Nodes",[k],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),le=de(H.prototype,"Proxy",[x],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),se=de(H.prototype,"GatewayConfig",[j],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ie=de(H.prototype,"ExternalSources",[C,S],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),oe=de(H.prototype,"Meta",[N],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ue=de(H.prototype,"meta",[z],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),de(H.prototype,"ChecksTotal",[M],Object.getOwnPropertyDescriptor(H.prototype,"ChecksTotal"),H.prototype),de(H.prototype,"MeshChecksTotal",[D],Object.getOwnPropertyDescriptor(H.prototype,"MeshChecksTotal"),H.prototype),de(H.prototype,"MeshEnabled",[T],Object.getOwnPropertyDescriptor(H.prototype,"MeshEnabled"),H.prototype),de(H.prototype,"InMesh",[L],Object.getOwnPropertyDescriptor(H.prototype,"InMesh"),H.prototype),de(H.prototype,"MeshStatus",[A],Object.getOwnPropertyDescriptor(H.prototype,"MeshStatus"),H.prototype),de(H.prototype,"MeshChecksPassing",[R],Object.getOwnPropertyDescriptor(H.prototype,"MeshChecksPassing"),H.prototype),de(H.prototype,"MeshChecksWarning",[I],Object.getOwnPropertyDescriptor(H.prototype,"MeshChecksWarning"),H.prototype),de(H.prototype,"MeshChecksCritical",[B],Object.getOwnPropertyDescriptor(H.prototype,"MeshChecksCritical"),H.prototype),H) -e.default=pe})),define("consul-ui/models/session",["exports","@ember-data/model","consul-ui/decorators/replace"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D,T,L,A,R,I -function B(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function H(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ID" -let $=(r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),u=(0,t.attr)("string"),c=(0,t.attr)("string"),d=(0,t.attr)("string"),m=(0,t.attr)("number"),p=(0,t.attr)("number"),f=(0,t.attr)("number"),b=(0,t.attr)("number"),h=(0,n.nullValue)([]),v=(0,t.attr)({defaultValue:()=>[]}),y=(0,n.nullValue)([]),g=(0,t.attr)({defaultValue:()=>[]}),O=(0,t.attr)({defaultValue:()=>[]}),_=Ember.computed("NodeChecks","ServiceChecks"),P=class extends t.default{constructor(...e){super(...e),B(this,"uid",w,this),B(this,"ID",E,this),B(this,"Name",k,this),B(this,"Datacenter",x,this),B(this,"Namespace",j,this),B(this,"Partition",C,this),B(this,"Node",S,this),B(this,"Behavior",N,this),B(this,"TTL",z,this),B(this,"LockDelay",M,this),B(this,"SyncTime",D,this),B(this,"CreateIndex",T,this),B(this,"ModifyIndex",L,this),B(this,"NodeChecks",A,this),B(this,"ServiceChecks",R,this),B(this,"Resources",I,this)}get checks(){return[...this.NodeChecks,...this.ServiceChecks.map(({ID:e})=>e)]}},w=H(P.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=H(P.prototype,"ID",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=H(P.prototype,"Name",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=H(P.prototype,"Datacenter",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=H(P.prototype,"Namespace",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=H(P.prototype,"Partition",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=H(P.prototype,"Node",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=H(P.prototype,"Behavior",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=H(P.prototype,"TTL",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=H(P.prototype,"LockDelay",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=H(P.prototype,"SyncTime",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=H(P.prototype,"CreateIndex",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=H(P.prototype,"ModifyIndex",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=H(P.prototype,"NodeChecks",[h,v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=H(P.prototype,"ServiceChecks",[y,g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=H(P.prototype,"Resources",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H(P.prototype,"checks",[_],Object.getOwnPropertyDescriptor(P.prototype,"checks"),P.prototype),P) -e.default=$})),define("consul-ui/models/token",["exports","@ember-data/model","consul-ui/models/policy"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S,N,z,M,D,T,L,A,R,I,B,H,$,U,F,q,K,Y,V,W,G -function Q(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function Z(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="AccessorID" -let J=(r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("string"),u=(0,t.attr)("string"),c=(0,t.attr)("boolean"),d=(0,t.attr)("boolean"),m=(0,t.attr)("string",{defaultValue:()=>""}),p=(0,t.attr)(),f=(0,t.attr)({defaultValue:()=>[]}),b=(0,t.attr)({defaultValue:()=>[]}),h=(0,t.attr)({defaultValue:()=>[]}),v=(0,t.attr)({defaultValue:()=>[]}),y=(0,t.attr)("date"),g=(0,t.attr)("string"),O=(0,t.attr)("number"),_=(0,t.attr)("number"),P=(0,t.attr)("string"),w=(0,t.attr)("string",{defaultValue:()=>""}),E=(0,t.attr)("string"),k=Ember.computed("Policies.[]"),x=Ember.computed("SecretID"),j=class extends t.default{constructor(...e){super(...e),Q(this,"uid",C,this),Q(this,"AccessorID",S,this),Q(this,"Datacenter",N,this),Q(this,"Namespace",z,this),Q(this,"Partition",M,this),Q(this,"IDPName",D,this),Q(this,"SecretID",T,this),Q(this,"Legacy",L,this),Q(this,"Local",A,this),Q(this,"Description",R,this),Q(this,"meta",I,this),Q(this,"Policies",B,this),Q(this,"Roles",H,this),Q(this,"ServiceIdentities",$,this),Q(this,"NodeIdentities",U,this),Q(this,"CreateTime",F,this),Q(this,"Hash",q,this),Q(this,"CreateIndex",K,this),Q(this,"ModifyIndex",Y,this),Q(this,"Type",V,this),Q(this,"Name",W,this),Q(this,"Rules",G,this)}get isGlobalManagement(){return(this.Policies||[]).find(e=>e.ID===n.MANAGEMENT_ID)}get hasSecretID(){return""!==this.SecretID&&""!==this.SecretID}},C=Z(j.prototype,"uid",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=Z(j.prototype,"AccessorID",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),N=Z(j.prototype,"Datacenter",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z=Z(j.prototype,"Namespace",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),M=Z(j.prototype,"Partition",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D=Z(j.prototype,"IDPName",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),T=Z(j.prototype,"SecretID",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),L=Z(j.prototype,"Legacy",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),A=Z(j.prototype,"Local",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),R=Z(j.prototype,"Description",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),I=Z(j.prototype,"meta",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),B=Z(j.prototype,"Policies",[f],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),H=Z(j.prototype,"Roles",[b],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$=Z(j.prototype,"ServiceIdentities",[h],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),U=Z(j.prototype,"NodeIdentities",[v],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),F=Z(j.prototype,"CreateTime",[y],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),q=Z(j.prototype,"Hash",[g],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K=Z(j.prototype,"CreateIndex",[O],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Y=Z(j.prototype,"ModifyIndex",[_],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),V=Z(j.prototype,"Type",[P],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W=Z(j.prototype,"Name",[w],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),G=Z(j.prototype,"Rules",[E],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Z(j.prototype,"isGlobalManagement",[k],Object.getOwnPropertyDescriptor(j.prototype,"isGlobalManagement"),j.prototype),Z(j.prototype,"hasSecretID",[x],Object.getOwnPropertyDescriptor(j.prototype,"hasSecretID"),j.prototype),j) -e.default=J})),define("consul-ui/models/topology",["exports","@ember-data/model"],(function(e,t){var n,r,a,l,s,i,o,u,c,d,m,p,f,b,h,v,y,g,O,_,P,w,E,k,x,j,C,S -function N(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function z(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SLUG_KEY=e.PRIMARY_KEY=void 0 -e.PRIMARY_KEY="uid" -e.SLUG_KEY="ServiceName" -let M=(n=(0,t.attr)("string"),r=(0,t.attr)("string"),a=(0,t.attr)("string"),l=(0,t.attr)("string"),s=(0,t.attr)("string"),i=(0,t.attr)("string"),o=(0,t.attr)("boolean"),u=(0,t.attr)("boolean"),c=(0,t.attr)("boolean"),d=(0,t.attr)(),m=(0,t.attr)(),p=(0,t.attr)(),f=Ember.computed("Downstreams"),b=Ember.computed("Downstreams","Upstreams"),h=Ember.computed("Downstreams","Upstreams"),v=class extends t.default{constructor(...e){super(...e),N(this,"uid",y,this),N(this,"ServiceName",g,this),N(this,"Datacenter",O,this),N(this,"Namespace",_,this),N(this,"Partition",P,this),N(this,"Protocol",w,this),N(this,"FilteredByACLs",E,this),N(this,"TransparentProxy",k,this),N(this,"ConnectNative",x,this),N(this,"Upstreams",j,this),N(this,"Downstreams",C,this),N(this,"meta",S,this)}get notDefinedIntention(){let e=!1 -return e=0!==this.Downstreams.filter(e=>"specific-intention"===e.Source&&!e.TransparentProxy&&!e.ConnectNative&&e.Intention.Allowed).length,e}get wildcardIntention(){const e=0!==this.Downstreams.filter(e=>!e.Intention.HasExact&&e.Intention.Allowed).length,t=0!==this.Upstreams.filter(e=>!e.Intention.HasExact&&e.Intention.Allowed).length -return e||t}get noDependencies(){return 0===this.Upstreams.length&&0===this.Downstreams.length}},y=z(v.prototype,"uid",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=z(v.prototype,"ServiceName",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=z(v.prototype,"Datacenter",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_=z(v.prototype,"Namespace",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P=z(v.prototype,"Partition",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),w=z(v.prototype,"Protocol",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),E=z(v.prototype,"FilteredByACLs",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k=z(v.prototype,"TransparentProxy",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),x=z(v.prototype,"ConnectNative",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),j=z(v.prototype,"Upstreams",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),C=z(v.prototype,"Downstreams",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),S=z(v.prototype,"meta",[p],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),z(v.prototype,"notDefinedIntention",[f],Object.getOwnPropertyDescriptor(v.prototype,"notDefinedIntention"),v.prototype),z(v.prototype,"wildcardIntention",[b],Object.getOwnPropertyDescriptor(v.prototype,"wildcardIntention"),v.prototype),z(v.prototype,"noDependencies",[h],Object.getOwnPropertyDescriptor(v.prototype,"noDependencies"),v.prototype),v) -e.default=M})),define("consul-ui/modifiers/aria-menu",["exports","ember-modifier"],(function(e,t){var n,r,a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o={vertical:{40:(e,t=-1)=>(t+1)%e.length,38:(e,t=0)=>0===t?e.length-1:t-1,36:()=>0,35:e=>e.length-1},horizontal:{}} -let u=(n=Ember.inject.service("-document"),r=Ember._action,a=Ember._action,l=class extends t.default{constructor(...e){var t,n,r,a,l,i,o -super(...e),t=this,n="doc",a=this,(r=s)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0}),o="vertical",(i="orientation")in(l=this)?Object.defineProperty(l,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):l[i]=o}async keydown(e){if(27===e.keyCode)return this.options.onclose(e),void this.$trigger.focus() -const t=[...this.element.querySelectorAll('[role^="menuitem"]')],n=t.findIndex(e=>e===this.doc.activeElement) -9!==e.keyCode?void 0!==o[this.orientation][e.keyCode]&&(t[o[this.orientation][e.keyCode](t,n)].focus(),e.stopPropagation(),e.preventDefault()):e.shiftKey?0===n&&(this.options.onclose(e),this.$trigger.focus()):n===t.length-1&&(await new Promise(e=>setTimeout(e,0)),this.options.onclose(e))}async focus(e){""===e.pointerType&&(await Promise.resolve(),this.keydown({keyCode:36,stopPropagation:()=>{},preventDefault:()=>{}}))}connect(e,t){this.$trigger=this.doc.getElementById(this.element.getAttribute("aria-labelledby")),void 0!==t.openEvent&&this.focus(t.openEvent),this.doc.addEventListener("keydown",this.keydown)}disconnect(){this.doc.removeEventListener("keydown",this.keydown)}didReceiveArguments(){this.params=this.args.positional,this.options=this.args.named}didInstall(){this.connect(this.args.positional,this.args.named)}willRemove(){this.disconnect()}},s=i(l.prototype,"doc",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i(l.prototype,"keydown",[r],Object.getOwnPropertyDescriptor(l.prototype,"keydown"),l.prototype),i(l.prototype,"focus",[a],Object.getOwnPropertyDescriptor(l.prototype,"focus"),l.prototype),l) -e.default=u})),define("consul-ui/modifiers/attach-shadow",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember._setModifierManager(()=>({capabilities:Ember._modifierManagerCapabilities("3.13",{disableAutoTracking:!0}),createModifier(){},installModifier(e,t,n){let r,{positional:[a,...l],named:s}=n -try{r=t.attachShadow({mode:"open"})}catch(i){console.error(i)}a(r)},updateModifier(){},destroyModifier(){}}),class{}) -e.default=t})),define("consul-ui/modifiers/css-prop",["exports","ember-modifier"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let l=(n=Ember.inject.service("-document"),r=class extends t.default{constructor(...e){var t,n,r,l -super(...e),t=this,n="doc",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}didReceiveArguments(){const e=this.args.positional,t=this.args.named;(e[1]||t.returns)(this.doc.defaultView.getComputedStyle(this.element).getPropertyValue(e[0]))}},s=r.prototype,i="doc",o=[n],u={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=o.slice().reverse().reduce((function(e,t){return t(s,i,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,i,d),d=null),a=d,r) -var s,i,o,u,c,d -e.default=l})),define("consul-ui/modifiers/css-props",["exports","ember-modifier"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=Object.fromEntries([...document.styleSheets].reduce((e,t)=>e.concat([...t.cssRules].filter(e=>1===e.type).reduce((e,t)=>[...e,...[...t.style].filter(e=>e.startsWith("--")).map(e=>[e.trim(),t.style.getPropertyValue(e).trim()])],[])),[])) -var r=(0,t.modifier)((function(e,[t],r){const a=new RegExp(`^--${r.prefix||"."}${r.group||""}+`),l={} -Object.entries(n).forEach(([e,t])=>{const n=e.match(a) -if(n){let a=n[0] -"-"===a.charAt(a.length-1)&&(a=a.substr(0,a.length-1)),r.group?(void 0===l[a]&&(l[a]={}),l[a][e]=t):l[e]=t}}),t(l)})) -e.default=r})),define("consul-ui/modifiers/did-insert",["exports","@ember/render-modifiers/modifiers/did-insert"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/did-update",["exports","@ember/render-modifiers/modifiers/did-update"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/did-upsert",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const t=e=>({target:e.element,currentTarget:e.element}) -var n=Ember._setModifierManager(()=>({capabilities:Ember._modifierManagerCapabilities("3.13",{disableAutoTracking:!0}),createModifier:()=>({element:null}),installModifier(e,n,r){e.element=n -const[a,...l]=r.positional -a(t(e),l,r.named)},updateModifier(e,n){const[r,...a]=n.positional -r(t(e),a,n.named)},destroyModifier(){}}),class{}) -e.default=n})),define("consul-ui/modifiers/disabled",["exports","ember-modifier"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=(0,t.modifier)((function(e,[t=!0]){if(["input","textarea","select","button"].includes(e.nodeName.toLowerCase()))t?(e.setAttribute("disabled",t),e.setAttribute("aria-disabled",t)):(e.dataset.disabled=!1,e.removeAttribute("disabled"),e.removeAttribute("aria-disabled")) -else for(const n of e.querySelectorAll("input,textarea,button"))t&&"false"!==n.dataset.disabled?(e.setAttribute("disabled",t),e.setAttribute("aria-disabled",t)):(e.removeAttribute("disabled"),e.removeAttribute("aria-disabled"))})) -e.default=n})),define("consul-ui/modifiers/in-viewport",["exports","ember-in-viewport/modifiers/in-viewport"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/notification",["exports","ember-modifier"],(function(e,t){var n,r,a -function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(n=Ember.inject.service("flashMessages"),r=class extends t.default{constructor(...e){var t,n,r,l -super(...e),t=this,n="notify",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}didInstall(){this.element.setAttribute("role","alert"),this.element.dataset.notification=null -const e=function(e){for(var t=1;te.after()).catch(e=>{if("TransitionAborted"!==e.name)throw e}).then(()=>{this.notify.add(e)}):this.notify.add(e)}willDestroy(){this.args.named.sticky&&this.notify.clearMessages()}},o=r.prototype,u="notify",c=[n],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(d).forEach((function(e){p[e]=d[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=c.slice().reverse().reduce((function(e,t){return t(o,u,e)||e}),p),m&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(m):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(o,u,p),p=null),a=p,r) -var o,u,c,d,m,p -e.default=i})) -define("consul-ui/modifiers/on-outside",["exports","ember-modifier"],(function(e,t){var n,r,a,l -function s(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(n=Ember.inject.service("dom"),r=Ember._action,a=class extends t.default{constructor(){var e,t,n,r -super(...arguments),e=this,t="dom",r=this,(n=l)&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0}),this.doc=this.dom.document()}async connect(e,t){await new Promise(e=>setTimeout(e,0)) -try{this.doc.addEventListener(e[0],this.listen)}catch(n){}}listen(e){if(this.dom.isOutside(this.element,e.target)){("function"==typeof this.params[1]?this.params[1]:()=>{}).apply(this.element,[e])}}disconnect(){this.doc.removeEventListener("click",this.listen)}didReceiveArguments(){this.params=this.args.positional,this.options=this.args.named}didInstall(){this.connect(this.args.positional,this.args.named)}willRemove(){this.disconnect()}},l=s(a.prototype,"dom",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s(a.prototype,"listen",[r],Object.getOwnPropertyDescriptor(a.prototype,"listen"),a.prototype),a) -e.default=i})),define("consul-ui/modifiers/on-resize",["exports","ember-on-resize-modifier/modifiers/on-resize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/ref",["exports","ember-ref-modifier/modifiers/ref"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/style",["exports","ember-modifier"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{setStyles(e=[]){const t=this._oldStyles||new Set -Array.isArray(e)||(e=Object.entries(e)),e.forEach(([e,n])=>{let r="" -n.length>0&&n.includes("!important")&&(r="important",n=n.replace("!important","")),this.element.style.setProperty(e,n,r),t.delete(e)}),t.forEach(e=>this.element.style.removeProperty(e)),this._oldStyles=new Set(e.map(e=>e[0]))}didReceiveArguments(){void 0!==this.args.named.delay?setTimeout(()=>{typeof this!==this.args.positional[0]&&this.setStyles(this.args.positional[0])},this.args.named.delay):this.setStyles(this.args.positional[0])}}e.default=n})),define("consul-ui/modifiers/tooltip",["exports","ember-modifier","tippy.js"],(function(e,t,n){function r(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.modifier)((e,[t],l={})=>{const s=l.options||{} -let i,o=e -if("string"==typeof s.triggerTarget){const e=o -switch(s.triggerTarget){case"parentNode":o=o.parentNode -break -default:o=o.querySelectorAll(s.triggerTarget)}t=o.cloneNode(!0),e.remove(),l.options.triggerTarget=void 0}if(void 0===t&&(t=o.innerHTML,o.innerHTML=""),"manual"===s.trigger){const e=s.delay||[] -void 0!==e[1]&&(l.options.onShown=t=>{clearInterval(i),i=setTimeout(()=>{t.hide()},e[1])})}let u=o,c=!1 -u.hasAttribute("tabindex")||(c=!0,u.setAttribute("tabindex","0")) -const d=(0,n.default)(o,function(e){for(var t=1;tt,plugins:[void 0!==s.followCursor?n.followCursor:void 0].filter(e=>Boolean(e))},l.options)) -return()=>{c&&u.removeAttribute("tabindex"),clearInterval(i),d.destroy()}}) -e.default=l})),define("consul-ui/modifiers/validate",["exports","ember-modifier"],(function(e,t){var n,r,a -function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class i extends Error{}let o=(n=Ember._action,r=Ember._action,s((a=class extends t.default{constructor(...e){super(...e),l(this,"item",null),l(this,"hash",null)}validate(e,t={}){if(0===Object.keys(t).length)return -const n={} -Object.entries(this.hash.validations).filter(([e,t])=>"string"!=typeof t).forEach(([t,r])=>{this.item&&(this.item[t]=e),(r||[]).forEach(r=>{new RegExp(r.test).test(e)||(n[t]=new i(r.error))})}) -const r=this.hash.chart.state -null==r.context&&(r.context={}),Object.keys(n).length>0?(r.context.errors=n,this.hash.chart.dispatch("ERROR")):(r.context.errors=null,this.hash.chart.dispatch("RESET"))}reset(e){if(0===e.target.value.length){const e=this.hash.chart.state -e.context||(e.context={}),e.context.errors||(e.context.errors={}),Object.entries(this.hash.validations).filter(([e,t])=>"string"!=typeof t).forEach(([t,n])=>{void 0!==e.context.errors[t]&&delete e.context.errors[t]}),0===Object.keys(e.context.errors).length&&(e.context.errors=null,this.hash.chart.dispatch("RESET"))}}async connect([e],t){this.element.addEventListener("input",this.listen),this.element.addEventListener("blur",this.reset),this.element.value.length>0&&(await Promise.resolve(),this&&this.element&&this.validate(this.element.value,this.hash.validations))}listen(e){this.validate(e.target.value,this.hash.validations)}disconnect(){this.item=null,this.hash=null,this.element.removeEventListener("input",this.listen),this.element.removeEventListener("blur",this.reset)}didReceiveArguments(){const[e]=this.args.positional,t=this.args.named -this.item=e,this.hash=t,void 0===t.chart&&(this.hash.chart={state:{context:{}},dispatch:e=>{switch(e){case"ERROR":t.onchange(this.hash.chart.state.context.errors) -break -case"RESET":t.onchange()}}})}didInstall(){this.connect(this.args.positional,this.args.named)}willRemove(){this.disconnect()}}).prototype,"reset",[n],Object.getOwnPropertyDescriptor(a.prototype,"reset"),a.prototype),s(a.prototype,"listen",[r],Object.getOwnPropertyDescriptor(a.prototype,"listen"),a.prototype),a) -e.default=o})),define("consul-ui/modifiers/will-destroy",["exports","@ember/render-modifiers/modifiers/will-destroy"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/modifiers/with-copyable",["exports","ember-modifier"],(function(e,t){var n,r,a -function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const i=(e,t,n)=>typeof t===e?t:n -let o=(n=Ember.inject.service("clipboard/os"),r=class extends t.default{constructor(...e){var t,n,r,l -super(...e),t=this,n="clipboard",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0}),s(this,"hash",null),s(this,"source",null)}connect([e],t){e=i("string",e,this.element.innerText) -const n={success:e=>i("function",t.success,()=>{})(e),error:e=>i("function",t.error,()=>{})(e)} -this.source=this.clipboard.execute(this.element,function(e){for(var t=1;te},n.options)).on("success",n.success).on("error",n.error),this.hash=n}disconnect(){this.source&&this.hash&&(this.source.off("success",this.hash.success).off("error",this.hash.error),this.source.destroy(),this.hash=null,this.source=null)}didReceiveArguments(){this.disconnect(),this.connect(this.args.positional,this.args.named)}willRemove(){this.disconnect()}},u=r.prototype,c="clipboard",d=[n],m={configurable:!0,enumerable:!0,writable:!0,initializer:null},f={},Object.keys(m).forEach((function(e){f[e]=m[e]})),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=d.slice().reverse().reduce((function(e,t){return t(u,c,e)||e}),f),p&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(p):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(u,c,f),f=null),a=f,r) -var u,c,d,m,p,f -e.default=o})),define("consul-ui/modifiers/with-overlay",["exports","ember-modifier","tippy.js"],(function(e,t,n){function r(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var l=(0,t.modifier)((e,[t],l={})=>{const s=l.options||{} -let i,o=e -if("string"==typeof s.triggerTarget){const e=o -switch(s.triggerTarget){case"parentNode":o=o.parentNode -break -default:o=o.querySelectorAll(s.triggerTarget)}t=o.cloneNode(!0),e.remove(),l.options.triggerTarget=void 0}if(void 0===t&&(t=o.innerHTML,o.innerHTML=""),l.returns&&(s.trigger="manual"),"manual"===s.trigger){const e=s.delay||[] -void 0!==e[1]&&(s.onShown=t=>{clearInterval(i),i=setTimeout(()=>{t.hide()},e[1])})}let u=o -const c=(0,n.default)(o,function(e){for(var t=1;tt,interactive:!0,plugins:[void 0!==s.followCursor?n.followCursor:void 0].filter(e=>Boolean(e))},s)) -return l.returns&&l.returns(c),()=>{clearInterval(i),c.destroy()}}) -e.default=l})),define("consul-ui/router",["exports","consul-ui/config/environment","deepmerge","consul-ui/env","consul-ui/utils/routing/walk"],(function(e,t,n,r,a){function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.routes=void 0 -const s=document,i=(t.default.modulePrefix,n.default.all([...s.querySelectorAll("script[data-routes]")].map(e=>JSON.parse(e.dataset.routes)))) -e.routes=i -class o extends Ember.Router{constructor(...e){super(...e),l(this,"location",(0,r.env)("locationType")),l(this,"rootURL",(0,r.env)("rootURL"))}}e.default=o,o.map((0,a.default)(i))})),define("consul-ui/routes/application",["exports","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n){var r,a,l,s,i -function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(r=Ember.inject.service("client/http"),a=Ember._action,l=Ember._action,s=class extends(t.default.extend(n.default)){constructor(...e){var t,n,r,a,l,s,o -super(...e),t=this,n="client",a=this,(r=i)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0}),o=void 0,(s="data")in(l=this)?Object.defineProperty(l,s,{value:o,enumerable:!0,configurable:!0,writable:!0}):l[s]=o}onClientChanged(e){let t=e.data -""===t&&(t={blocking:!0}),void 0!==this.data?(!0===this.data.blocking&&!1===t.blocking&&this.client.abort(),this.data=Object.assign({},t)):this.data=Object.assign({},t)}error(e,t){let n={status:e.code||e.statusCode||"",message:e.message||e.detail||"Error"} -return e.errors&&e.errors[0]&&(n=e.errors[0],n.message=n.message||n.title||n.detail||"Error"),""===n.status&&(n.message="Error"),this.controllerFor("application").setProperties({error:n}),!0}},i=o(s.prototype,"client",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o(s.prototype,"onClientChanged",[a],Object.getOwnPropertyDescriptor(s.prototype,"onClientChanged"),s.prototype),o(s.prototype,"error",[l],Object.getOwnPropertyDescriptor(s.prototype,"error"),s.prototype),s) -e.default=u})),define("consul-ui/routes/dc",["exports","consul-ui/routing/route"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let l=(n=Ember.inject.service("repository/permission"),r=class extends t.default{constructor(...e){var t,n,r,l -super(...e),t=this,n="permissionsRepo",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}async model(e){const t=await this.permissionsRepo.findAll({dc:e.dc,ns:this.optionalParams().nspace,partition:this.optionalParams().partition}) -return this.controllerFor("application").setProperties({permissions:t}),{permissions:t}}},s=r.prototype,i="permissionsRepo",o=[n],u={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=o.slice().reverse().reduce((function(e,t){return t(s,i,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,i,d),d=null),a=d,r) -var s,i,o,u,c,d -e.default=l})),define("consul-ui/routes/dc/acls/auth-methods/index",["exports","consul-ui/routing/route"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r={sortBy:"sort",source:"source",kind:"kind",searchproperty:{as:"searchproperty",empty:[["Name","DisplayName"]]},search:{as:"filter",replace:!0}},(n="queryParams")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}}e.default=n})),define("consul-ui/routes/dc/acls/auth-methods/show/index",["exports","consul-ui/routing/route","consul-ui/utils/routing/redirect-to"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends t.default{constructor(...e){var t,r,a -super(...e),t=this,r="redirect",a=(0,n.default)("auth-method"),r in t?Object.defineProperty(t,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[r]=a}}e.default=r})),define("consul-ui/routes/dc/acls/policies/create",["exports","consul-ui/routes/dc/acls/policies/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="dc/acls/policies/edit",(n="templateName")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}}e.default=n})),define("consul-ui/routes/dc/acls/policies/edit",["exports","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n){var r,a,l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(r=Ember.inject.service("repository/policy"),a=class extends(t.default.extend(n.default)){constructor(...e){var t,n,r,a -super(...e),t=this,n="repo",a=this,(r=l)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}},i=a.prototype,o="repo",u=[r],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),l=m,a) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/routes/dc/acls/policies/index",["exports","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n){var r,a,l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(r=Ember.inject.service("repository/policy"),a=class extends(t.default.extend(n.default)){constructor(...e){var t,n,r,a,s,i,o -super(...e),t=this,n="repo",a=this,(r=l)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0}),o={sortBy:"sort",datacenter:{as:"dc"},kind:"kind",searchproperty:{as:"searchproperty",empty:[["Name","Description"]]},search:{as:"filter",replace:!0}},(i="queryParams")in(s=this)?Object.defineProperty(s,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):s[i]=o}},i=a.prototype,o="repo",u=[r],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),l=m,a) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/routes/dc/acls/roles/create",["exports","consul-ui/routes/dc/acls/roles/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="dc/acls/roles/edit",(n="templateName")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}}e.default=n})),define("consul-ui/routes/dc/acls/roles/edit",["exports","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n){var r,a,l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(r=Ember.inject.service("repository/role"),a=class extends(t.default.extend(n.default)){constructor(...e){var t,n,r,a -super(...e),t=this,n="repo",a=this,(r=l)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}},i=a.prototype,o="repo",u=[r],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),l=m,a) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/routes/dc/acls/roles/index",["exports","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n){var r,a,l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(r=Ember.inject.service("repository/role"),a=class extends(t.default.extend(n.default)){constructor(...e){var t,n,r,a,s,i,o -super(...e),t=this,n="repo",a=this,(r=l)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0}),o={sortBy:"sort",searchproperty:{as:"searchproperty",empty:[["Name","Description","Policy"]]},search:{as:"filter",replace:!0}},(i="queryParams")in(s=this)?Object.defineProperty(s,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):s[i]=o}},i=a.prototype,o="repo",u=[r],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),l=m,a) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/routes/dc/acls/tokens/create",["exports","consul-ui/routes/dc/acls/tokens/edit"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="dc/acls/tokens/edit",(n="templateName")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}}e.default=n})),define("consul-ui/routes/dc/acls/tokens/edit",["exports","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n){var r,a,l,s,i -function o(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(r=Ember.inject.service("repository/token"),a=Ember.inject.service("settings"),l=class extends(t.default.extend(n.default)){constructor(...e){super(...e),o(this,"repo",s,this),o(this,"settings",i,this)}async model(e,t){return{token:await this.settings.findBySlug("token")}}},s=u(l.prototype,"repo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i=u(l.prototype,"settings",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l) -e.default=c})),define("consul-ui/routes/dc/acls/tokens/index",["exports","consul-ui/routing/route","consul-ui/mixins/with-blocking-actions"],(function(e,t,n){var r,a,l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(r=Ember.inject.service("repository/token"),a=class extends(t.default.extend(n.default)){constructor(...e){var t,n,r,a,s,i,o -super(...e),t=this,n="repo",a=this,(r=l)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0}),o={sortBy:"sort",kind:"kind",searchproperty:{as:"searchproperty",empty:[["AccessorID","Description","Role","Policy"]]},search:{as:"filter",replace:!0}},(i="queryParams")in(s=this)?Object.defineProperty(s,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):s[i]=o}},i=a.prototype,o="repo",u=[r],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),l=m,a) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/routes/dc/kv/folder",["exports","consul-ui/routes/dc/kv/index"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{beforeModel(e){super.beforeModel(...arguments) -const t=this.paramsFor("dc.kv.folder") -if("/"===t.key||null==t.key)return this.transitionTo("dc.kv.index")}}e.default=n})),define("consul-ui/routes/dc/kv/index",["exports","consul-ui/routing/route","consul-ui/utils/isFolder"],(function(e,t,n){var r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let l=(r=Ember._action,a=class extends t.default{beforeModel(){const e=this.paramsFor(this.routeName).key||"/" -if(!(0,n.default)(e))return this.replaceWith(this.routeName,e+"/")}error(e){return!e.errors||!e.errors[0]||"404"!=e.errors[0].status||this.transitionTo("dc.kv.index")}},s=a.prototype,i="error",o=[r],u=Object.getOwnPropertyDescriptor(a.prototype,"error"),c=a.prototype,d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=o.slice().reverse().reduce((function(e,t){return t(s,i,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,i,d),d=null),a) -var s,i,o,u,c,d -e.default=l})),define("consul-ui/routes/dc/services/notfound",["exports","consul-ui/routing/route"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{redirect(e,t){this.replaceWith("dc.services.instance",e.name,e.node,e.id)}}e.default=n})),define("consul-ui/routes/dc/services/show/topology",["exports","consul-ui/routing/route"],(function(e,t){var n,r,a,l,s,i,o,u -function c(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e){for(var t=1;tn.Datacenter===e.Datacenter&&n.SourceName===e.Name&&n.SourceNS===e.Namespace&&n.SourcePartition===e.Partition&&n.DestinationName===t.Name&&n.DestinationNS===t.Namespace&&n.DestinationPartition===t.Partition) -void 0===r?r=this.repo.create({Datacenter:e.Datacenter,SourceName:e.Name,SourceNS:e.Namespace||"default",SourcePartition:e.Partition||"default",DestinationName:t.Name,DestinationNS:t.Namespace||"default",DestinationPartition:t.Partition||"default"}):n=this.feedback.notification("update","intention"),Ember.set(r,"Action","allow"),await this.repo.persist(r),n.success(r)}catch(r){n.error(r)}this.refresh()}afterModel(e,t){const n=d(d(d({},this.optionalParams()),this.paramsFor("dc")),this.paramsFor("dc.services.show")) -this.intentions=this.data.source(e=>e`/${n.partition}/${n.nspace}/${n.dc}/intentions/for-service/${n.name}`)}async deactivate(e){(await this.intentions).destroy()}},i=f(s.prototype,"data",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=f(s.prototype,"repo",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=f(s.prototype,"feedback",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f(s.prototype,"createIntention",[l],Object.getOwnPropertyDescriptor(s.prototype,"createIntention"),s.prototype),s) -e.default=b})),define("consul-ui/routing/route",["exports","consul-ui/utils/path/resolve","consul-ui/router"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m,p,f,b -function h(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function v(e){for(var t=1;t!r.includes(e)).length&&(e=void 0)}}return e}model(){const e={} -return void 0!==this.queryParams&&void 0!==this.queryParams.searchproperty&&(e.searchProperties=this.queryParams.searchproperty.empty[0]),e}setupController(e,t){Ember.setProperties(e,v(v({},t),{},{routeName:this.routeName})),super.setupController(...arguments)}optionalParams(){return this.container.get("location:"+this.env.var("locationType")).optionalParams()}paramsFor(e){return this.routlet.normalizeParamsFor(this.routeName,super.paramsFor(...arguments))}async replaceWith(e,t){await Promise.resolve() -let n=[] -return"string"==typeof t&&(n=[t]),void 0===t||Array.isArray(t)||"string"==typeof t||(n=Object.values(t)),super.replaceWith(e,...n)}async transitionTo(e,t){await Promise.resolve() -let n=[] -return"string"==typeof t&&(n=[t]),void 0===t||Array.isArray(t)||"string"==typeof t||(n=Object.values(t)),super.transitionTo(e,...n)}},d=O(c.prototype,"container",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=O(c.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=O(c.prototype,"permissions",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f=O(c.prototype,"router",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=O(c.prototype,"routlet",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O(c.prototype,"replaceWith",[o],Object.getOwnPropertyDescriptor(c.prototype,"replaceWith"),c.prototype),O(c.prototype,"transitionTo",[u],Object.getOwnPropertyDescriptor(c.prototype,"transitionTo"),c.prototype),c) -e.default=_})),define("consul-ui/routing/single",["exports","consul-ui/routing/route"],(function(e,t){function n(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function r(e){for(var t=1;te.ID,Name:e=>e.Name}})) -define("consul-ui/search/predicates/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,DisplayName:e=>e.DisplayName}})),define("consul-ui/search/predicates/health-check",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t={Name:e=>e.Name,Node:e=>e.Node,Service:e=>e.ServiceName,CheckID:e=>e.CheckID||"",ID:e=>e.Service.ID||"",Notes:e=>e.Notes,Output:e=>e.Output,ServiceTags:e=>{return t=e.ServiceTags,Array.isArray(t)?t:t.toArray() -var t}} -e.default=t})),define("consul-ui/search/predicates/intention",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t={SourceName:e=>[e.SourceName,"*"===e.SourceName?"All Services (*)":void 0].filter(Boolean),DestinationName:e=>[e.DestinationName,"*"===e.DestinationName?"All Services (*)":void 0].filter(Boolean)} -e.default=t})),define("consul-ui/search/predicates/kv",["exports","consul-ui/utils/right-trim"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={Key:e=>(0,t.default)(e.Key.toLowerCase()).split("/").filter(e=>Boolean(e)).pop()} -e.default=n})),define("consul-ui/search/predicates/node",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t={Node:e=>e.Node,Address:e=>e.Address,Meta:e=>Object.entries(e.Meta||{}).reduce((e,t)=>e.concat(t),[])} -e.default=t})),define("consul-ui/search/predicates/nspace",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Description:e=>e.Description,Role:e=>((e.ACLs||{}).RoleDefaults||[]).map(e=>e.Name),Policy:e=>((e.ACLs||{}).PolicyDefaults||[]).map(e=>e.Name)}})),define("consul-ui/search/predicates/policy",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Description:e=>e.Description}})),define("consul-ui/search/predicates/role",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Description:e=>e.Description,Policy:e=>(e.Policies||[]).map(e=>e.Name).concat((e.ServiceIdentities||[]).map(e=>e.ServiceName)).concat((e.NodeIdentities||[]).map(e=>e.NodeName))}})),define("consul-ui/search/predicates/service-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t={Name:e=>e.Name,Node:e=>e.Node.Node,Tags:e=>e.Service.Tags||[],ID:e=>e.Service.ID||"",Address:e=>e.Address||"",Port:e=>(e.Service.Port||"").toString(),"Service.Meta":e=>Object.entries(e.Service.Meta||{}).reduce((e,t)=>e.concat(t),[]),"Node.Meta":e=>Object.entries(e.Node.Meta||{}).reduce((e,t)=>e.concat(t),[])} -e.default=t})),define("consul-ui/search/predicates/service",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Tags:e=>e.Tags||[]}})),define("consul-ui/search/predicates/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={Name:e=>e.Name,Description:e=>e.Description,AccessorID:e=>e.AccessorID,Role:e=>(e.Roles||[]).map(e=>e.Name),Policy:e=>(e.Policies||[]).map(e=>e.Name).concat((e.ServiceIdentities||[]).map(e=>e.ServiceName)).concat((e.NodeIdentities||[]).map(e=>e.NodeName))}})),define("consul-ui/search/predicates/upstream-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={DestinationName:e=>e.DestinationName,LocalBindAddress:e=>e.LocalBindAddress,LocalBindPort:e=>e.LocalBindPort.toString()}})),define("consul-ui/serializers/-default",["exports","@ember-data/serializer/json"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/serializers/-json-api",["exports","@ember-data/serializer/json-api"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/serializers/-rest",["exports","@ember-data/serializer/rest"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/serializers/application",["exports","consul-ui/serializers/http","consul-ui/utils/http/consul","consul-ui/utils/http/headers","consul-ui/models/dc","consul-ui/models/nspace","consul-ui/models/partition","consul-ui/utils/create-fingerprinter"],(function(e,t,n,r,a,l,s,i){function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=function(e,t){const r={} -return Object.keys(e).forEach((function(t){r[t.toLowerCase()]=e[t]})),t[n.HEADERS_SYMBOL]=r,t} -class c extends t.default{constructor(...e){super(...e),o(this,"attachHeaders",u),o(this,"fingerprint",(0,i.default)(a.FOREIGN_KEY,l.NSPACE_KEY,s.PARTITION_KEY))}respondForQuery(e,t){return e((e,r)=>{return u(e,(a=r,l=this.fingerprint(this.primaryKey,this.slugKey,t.dc,e[n.HEADERS_NAMESPACE],e[n.HEADERS_PARTITION]),Array.isArray(a)?a.map(l):[a].map(l)[0])) -var a,l})}respondForQueryRecord(e,t){return e((e,r)=>u(e,this.fingerprint(this.primaryKey,this.slugKey,t.dc,e[n.HEADERS_NAMESPACE],e[n.HEADERS_PARTITION])(r)))}respondForCreateRecord(e,t,r){const l=this.slugKey,s=this.primaryKey -return e((e,t)=>(!0===t&&(t=r),this.fingerprint(s,l,r[a.FOREIGN_KEY],e[n.HEADERS_NAMESPACE],r.Partition)(t)))}respondForUpdateRecord(e,t,r){const l=this.slugKey,s=this.primaryKey -return e((e,t)=>(!0===t&&(t=r),this.fingerprint(s,l,r[a.FOREIGN_KEY],e[n.HEADERS_NAMESPACE],e[n.HEADERS_PARTITION])(t)))}respondForDeleteRecord(e,t,r){const i=this.slugKey,o=this.primaryKey -return e(e=>({[o]:this.fingerprint(o,i,r[a.FOREIGN_KEY],e[n.HEADERS_NAMESPACE],e[n.HEADERS_PARTITION])({[i]:r[i],[l.NSPACE_KEY]:r[l.NSPACE_KEY],[s.PARTITION_KEY]:r[s.PARTITION_KEY]})[o]}))}normalizeResponse(e,t,n,r,a){const l=this.normalizePayload(n,r,a),s=this.normalizeMeta(e,t,l,r,a) -"query"!==a&&(l.meta=s) -const i=super.normalizeResponse(e,t,{meta:s,[t.modelName]:l},r,a) -return void 0===i?n:i}timestamp(){return(new Date).getTime()}normalizeMeta(e,t,a,l,s){const i=a[n.HEADERS_SYMBOL]||{} -delete a[n.HEADERS_SYMBOL] -const o={cacheControl:i[r.CACHE_CONTROL.toLowerCase()],cursor:i[n.HEADERS_INDEX.toLowerCase()],dc:i[n.HEADERS_DATACENTER.toLowerCase()],nspace:i[n.HEADERS_NAMESPACE.toLowerCase()],partition:i[n.HEADERS_PARTITION.toLowerCase()]} -return void 0!==i["x-range"]&&(o.range=i["x-range"]),void 0!==i.refresh&&(o.interval=1e3*i.refresh),"query"===s&&(o.date=this.timestamp(),a.forEach((function(e){Ember.set(e,"SyncTime",o.date)}))),o}normalizePayload(e,t,n){return e}}e.default=c})),define("consul-ui/serializers/auth-method",["exports","consul-ui/serializers/application","consul-ui/models/auth-method"],(function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{constructor(...e){super(...e),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}}e.default=a})),define("consul-ui/serializers/binding-rule",["exports","consul-ui/serializers/application","consul-ui/models/binding-rule"],(function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{constructor(...e){super(...e),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}}e.default=a})),define("consul-ui/serializers/coordinate",["exports","consul-ui/serializers/application","consul-ui/models/coordinate"],(function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{constructor(...e){super(...e),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}}e.default=a})),define("consul-ui/serializers/discovery-chain",["exports","consul-ui/serializers/application","consul-ui/models/discovery-chain"],(function(e,t,n){function r(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;tt)}respondForQueryRecord(e,t){return e((e,t)=>t)}respondForFindAll(e,t){return e((e,t)=>t)}respondForCreateRecord(e,t){return e((e,t)=>t)}respondForUpdateRecord(e,t){return e((e,t)=>t)}respondForDeleteRecord(e,t){return e((e,t)=>t)}}e.default=n})),define("consul-ui/serializers/intention",["exports","consul-ui/serializers/application","consul-ui/models/intention"],(function(e,t,n){var r,a,l -function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(r=Ember.inject.service("encoder"),a=class extends t.default{constructor(...e){var t,r,a,i -super(...e),t=this,r="encoder",i=this,(a=l)&&Object.defineProperty(t,r,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(i):void 0}),s(this,"primaryKey",n.PRIMARY_KEY),s(this,"slugKey",n.SLUG_KEY)}init(){super.init(...arguments),this.uri=this.encoder.uriTag()}ensureID(e){return Ember.get(e,"ID.length")?(e.Legacy=!0,e.LegacyID=e.ID):e.Legacy=!1,e.ID=this.uri`${e.SourcePartition}:${e.SourceNS}:${e.SourceName}:${e.DestinationPartition}:${e.DestinationNS}:${e.DestinationName}`,e}respondForQuery(e,t){return super.respondForQuery(t=>e((e,n)=>t(e,n.map(e=>this.ensureID(e)))),t)}respondForQueryRecord(e,t){return super.respondForQueryRecord(t=>e((e,n)=>(n=this.ensureID(n),t(e,n))),t)}respondForCreateRecord(e,t,n){const r=this.slugKey,a=this.primaryKey -return e((e,l)=>((l=n).ID=this.uri`${t.SourcePartition}:${t.SourceNS}:${t.SourceName}:${t.DestinationPartition}:${t.DestinationNS}:${t.DestinationName}`,this.fingerprint(a,r,l.Datacenter)(l)))}respondForUpdateRecord(e,t,n){const r=this.slugKey,a=this.primaryKey -return e((e,l)=>((l=n).LegacyID=l.ID,l.ID=t.ID,this.fingerprint(a,r,l.Datacenter)(l)))}},o=a.prototype,u="encoder",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(d).forEach((function(e){p[e]=d[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=c.slice().reverse().reduce((function(e,t){return t(o,u,e)||e}),p),m&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(m):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(o,u,p),p=null),l=p,a) -var o,u,c,d,m,p -e.default=i})),define("consul-ui/serializers/kv",["exports","consul-ui/serializers/application","consul-ui/models/kv"],(function(e,t,n){var r,a,l -function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(r=Ember.inject.service("atob"),a=class extends t.default{constructor(...e){var t,r,a,i -super(...e),t=this,r="decoder",i=this,(a=l)&&Object.defineProperty(t,r,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(i):void 0}),s(this,"primaryKey",n.PRIMARY_KEY),s(this,"slugKey",n.SLUG_KEY)}serialize(e,t){const n=e.attr("Value") -return"string"==typeof n?this.decoder.execute(n):null}respondForQueryRecord(e,t){return super.respondForQueryRecord(t=>e((e,n)=>(void 0===n[0].Session&&(n[0].Session=""),t(e,n[0]))),t)}respondForQuery(e,t){return super.respondForQuery(t=>e((e,n)=>t(e,n.map(e=>({[this.slugKey]:e})))),t)}},o=a.prototype,u="decoder",c=[r],d={configurable:!0,enumerable:!0,writable:!0,initializer:null},p={},Object.keys(d).forEach((function(e){p[e]=d[e]})),p.enumerable=!!p.enumerable,p.configurable=!!p.configurable,("value"in p||p.initializer)&&(p.writable=!0),p=c.slice().reverse().reduce((function(e,t){return t(o,u,e)||e}),p),m&&void 0!==p.initializer&&(p.value=p.initializer?p.initializer.call(m):void 0,p.initializer=void 0),void 0===p.initializer&&(Object.defineProperty(o,u,p),p=null),l=p,a) -var o,u,c,d,m,p -e.default=i})),define("consul-ui/serializers/node",["exports","consul-ui/serializers/application","@ember-data/serializer/rest","consul-ui/models/node"],(function(e,t,n,r){function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=function(e){return""===e[r.SLUG_KEY]&&(e[r.SLUG_KEY]=e.Node),e} -class s extends(t.default.extend(n.EmbeddedRecordsMixin)){constructor(...e){super(...e),a(this,"primaryKey",r.PRIMARY_KEY),a(this,"slugKey",r.SLUG_KEY),a(this,"attrs",{Services:{embedded:"always"}})}transformHasManyResponse(e,t,n,r=null){let a,l={} -switch(t.key){case"Services":return(n.Checks||[]).filter(e=>""!==e.ServiceID).forEach(e=>{void 0===l[e.ServiceID]&&(l[e.ServiceID]=[]),l[e.ServiceID].push(e)}),a=this.store.serializerFor(t.type),n.Services=n.Services.map(e=>a.transformHasManyResponseFromNode(n,e,l)),n}return super.transformHasManyResponse(...arguments)}respondForQuery(e,t,n,r){const a=super.respondForQuery(t=>e((e,n)=>t(e,n.map(l))),t) -return r.eachRelationship((e,t)=>{a.forEach(e=>this[`transform${Ember.String.classify(t.kind)}Response`](this.store,t,e,a))}),a}respondForQueryRecord(e,t,n,r){const a=super.respondForQueryRecord(t=>e((e,n)=>t(e,l(n))),t) -return r.eachRelationship((e,t)=>{this[`transform${Ember.String.classify(t.kind)}Response`](this.store,t,a)}),a}respondForQueryLeader(e,t){return e((e,n)=>{const r=n.split(":"),a=r.pop(),l=r.join(":") -return this.attachHeaders(e,{Address:l,Port:a},t)})}}e.default=s})),define("consul-ui/serializers/nspace",["exports","consul-ui/serializers/application","consul-ui/models/nspace"],(function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const a=e=>(Ember.get(e,"ACLs.PolicyDefaults")&&(e.ACLs.PolicyDefaults=e.ACLs.PolicyDefaults.map((function(e){return void 0===e.template&&(e.template=""),e}))),["PolicyDefaults","RoleDefaults"].forEach((function(t){void 0===e.ACLs&&(e.ACLs=[]),void 0===e.ACLs[t]&&(e.ACLs[t]=[])})),e) -class l extends t.default{constructor(...e){super(...e),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}respondForQuery(e,t,n,r){return super.respondForQuery(n=>e((e,r)=>n(e,r.map((function(e){return e.Namespace="*",e.Datacenter=t.dc,a(e)})))),t)}respondForQueryRecord(e,t,n){return super.respondForQuery(n=>e((e,r)=>(r.Datacenter=t.dc,r.Namespace="*",n(e,a(r)))),t,n)}respondForCreateRecord(e,t,n){return super.respondForCreateRecord(n=>e((e,r)=>(r.Datacenter=t.dc,r.Namespace="*",n(e,a(r)))),t,n)}respondForUpdateRecord(e,t,n){return e((e,t)=>a(t))}}e.default=l})),define("consul-ui/serializers/oidc-provider",["exports","consul-ui/serializers/application","consul-ui/models/oidc-provider"],(function(e,t,n){function r(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{constructor(...e){super(...e),a(this,"primaryKey",n.PRIMARY_KEY),a(this,"slugKey",n.SLUG_KEY)}respondForAuthorize(e,t,n){return e((e,t)=>this.attachHeaders(e,t,n))}respondForQueryRecord(e,t){return super.respondForQueryRecord(n=>e((e,l)=>n(e,function(e){for(var t=1;te((e,n)=>t(e,n.map(e=>(e.Partition="*",e.Namespace="*",e)))),t)}}e.default=a})),define("consul-ui/serializers/permission",["exports","consul-ui/serializers/application"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{}e.default=n})),define("consul-ui/serializers/policy",["exports","consul-ui/serializers/application","consul-ui/models/policy"],(function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{constructor(...e){super(...e),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}}e.default=a})),define("consul-ui/serializers/proxy",["exports","consul-ui/serializers/application","consul-ui/models/proxy"],(function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{constructor(...e){super(...e),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY),r(this,"attrs",{NodeName:"Node"})}}e.default=a})) -define("consul-ui/serializers/role",["exports","consul-ui/serializers/application","consul-ui/models/role","consul-ui/mixins/policy/as-many"],(function(e,t,n,r){function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends(t.default.extend(r.default)){constructor(...e){super(...e),a(this,"primaryKey",n.PRIMARY_KEY),a(this,"slugKey",n.SLUG_KEY)}}e.default=l})),define("consul-ui/serializers/service-instance",["exports","consul-ui/serializers/application","consul-ui/models/service-instance"],(function(e,t,n){function r(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t{switch(t.Status){case"passing":e.ChecksPassing.push(t) -break -case"warning":e.ChecksWarning.push(t) -break -case"critical":e.ChecksCritical.push(t)}return e},{ChecksPassing:[],ChecksWarning:[],ChecksCritical:[]})),{},{Service:t,Checks:r,Node:{Datacenter:e.Datacenter,Namespace:e.Namespace,Partition:e.Partition,ID:e.ID,Node:e.Node,Address:e.Address,TaggedAddresses:e.TaggedAddresses,Meta:e.Meta}}) -return l.uid=this.extractUid(l),l}respondForQuery(e,t){return super.respondForQuery(n=>e((e,r)=>{if(0===r.length){const e=new Error -throw e.errors=[{status:"404",title:"Not found"}],e}return r.forEach(e=>{e.Datacenter=t.dc,e.Namespace=t.ns||"default",e.Partition=t.partition||"default",e.uid=this.extractUid(e)}),n(e,r)}),t)}respondForQueryRecord(e,t){return super.respondForQueryRecord(n=>e((e,r)=>{if(r.forEach(e=>{e.Datacenter=t.dc,e.Namespace=t.ns||"default",e.Partition=t.partition||"default",e.uid=this.extractUid(e)}),void 0===(r=r.find((function(e){return e.Node.Node===t.node&&e.Service.ID===t.serviceId})))){const e=new Error -throw e.errors=[{status:"404",title:"Not found"}],e}return r.Namespace=r.Service.Namespace,r.Partition=r.Service.Partition,n(e,r)}),t)}}e.default=s})),define("consul-ui/serializers/service",["exports","consul-ui/serializers/application","consul-ui/models/service"],(function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{constructor(...e){super(...e),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}respondForQuery(e,t){return super.respondForQuery(t=>e((e,n)=>{const r={} -return n.filter((function(e){return"connect-proxy"!==e.Kind})).forEach(e=>{r[e.Name]=e}),n.filter((function(e){return"connect-proxy"===e.Kind})).forEach(e=>{e.ProxyFor&&e.ProxyFor.forEach(t=>{void 0!==r[t]&&(r[t].Proxy=e)})}),t(e,n)}),t)}respondForQueryRecord(e,t){return super.respondForQueryRecord(n=>e((e,r)=>n(e,{Name:t.id,Namespace:Ember.get(r,"firstObject.Service.Namespace"),Nodes:r})),t)}}e.default=a})),define("consul-ui/serializers/session",["exports","consul-ui/serializers/application","consul-ui/models/session"],(function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{constructor(...e){super(...e),r(this,"primaryKey",n.PRIMARY_KEY),r(this,"slugKey",n.SLUG_KEY)}respondForQueryRecord(e,t){return super.respondForQueryRecord(t=>e((e,n)=>{if(0===n.length){const e=new Error -throw e.errors=[{status:"404",title:"Not found"}],e}return t(e,n[0])}),t)}}e.default=a})),define("consul-ui/serializers/token",["exports","consul-ui/serializers/application","consul-ui/models/token","consul-ui/mixins/policy/as-many","consul-ui/mixins/role/as-many"],(function(e,t,n,r,a){function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class s extends(t.default.extend(r.default,a.default)){constructor(...e){super(...e),l(this,"primaryKey",n.PRIMARY_KEY),l(this,"slugKey",n.SLUG_KEY)}serialize(e,t){let n=super.serialize(...arguments) -return null!==n.Rules&&(n={ID:n.SecretID,Name:n.Description,Type:n.Type,Rules:n.Rules}),n&&delete n.SecretID,n}respondForSelf(e,t){return this.respondForQueryRecord(e,t)}respondForUpdateRecord(e,t,n){return super.respondForUpdateRecord(t=>e((e,n)=>{if(void 0!==n.Policies&&null!==n.Policies||(n.Policies=[]),void 0!==n.ID){const e=this.store.peekAll("token").findBy("SecretID",n.ID) -e&&(n.SecretID=n.ID,n.AccessorID=Ember.get(e,"AccessorID"))}return t(e,n)}),t,n)}}e.default=s})),define("consul-ui/serializers/topology",["exports","consul-ui/serializers/application","consul-ui/models/topology"],(function(e,t,n){var r,a,l -function s(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t{e.Intention.SourceName=e.Name,e.Intention.SourceNS=e.Namespace,e.Intention.DestinationName=t.id,e.Intention.DestinationNS=t.ns||"default",r.ensureID(e.Intention)}),l.Upstreams.forEach(e=>{e.Intention.SourceName=t.id,e.Intention.SourceNS=t.ns||"default",e.Intention.DestinationName=e.Name,e.Intention.DestinationNS=e.Namespace,r.ensureID(e.Intention)}),a(e,i(i({},l),{},{[n.SLUG_KEY]:t.id}))}))}),t)}},c=a.prototype,d="store",m=[r],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(p).forEach((function(e){b[e]=p[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=m.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),b),f&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(f):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(c,d,b),b=null),l=b,a) -var c,d,m,p,f,b -e.default=u})),define("consul-ui/services/-ensure-registered",["exports","@embroider/util/services/ensure-registered"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/-portal",["exports","ember-stargate/services/-portal"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/abilities",["exports","ember-can/services/can"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{parse(e){return super.parse(e.replace("use SSO","use authMethods").replace("service","zervice"))}}e.default=n})),define("consul-ui/services/atob",["exports","consul-ui/utils/atob"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends Ember.Service{execute(){return(0,t.default)(...arguments)}}e.default=n})),define("consul-ui/services/auth-providers/oauth2-code-with-url-provider",["exports","torii/providers/oauth2-code"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{constructor(...e){var t,n,r -super(...e),r="oidc-with-url",(n="name")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}buildUrl(){return this.baseUrl}open(e){const t=this.get("name"),n=this.buildUrl() -return this.get("popup").open(n,["state","code"],e).then((function(e){return{authorizationState:e.state,authorizationCode:decodeURIComponent(e.code),provider:t}}))}close(){const e=this.get("popup.remote")||{} -if("function"==typeof e.close)return e.close()}}e.default=n})),define("consul-ui/services/btoa",["exports","consul-ui/utils/btoa"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends Ember.Service{execute(){return(0,t.default)(...arguments)}}e.default=n})),define("consul-ui/services/can",["exports","ember-can/services/abilities"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/change",["exports","ember-changeset-validations","ember-changeset","consul-ui/utils/form/changeset","consul-ui/validations/intention-permission","consul-ui/validations/intention-permission-http-header"],(function(e,t,n,r,a,l){var s,i,o -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u={"intention-permission":a.default,"intention-permission-http-header":l.default} -let c=(s=Ember.inject.service("schema"),i=class extends Ember.Service{constructor(...e){var t,n,r,a -super(...e),t=this,n="schema",a=this,(r=o)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}init(){super.init(...arguments),this._validators=new Map}willDestroy(){this._validators=null}changesetFor(e,a,l={}){const s=this.validatorFor(e,l) -let i -if(s){let e=s -"function"!=typeof s&&(e=(0,t.default)(s)),i=(0,n.Changeset)(a,e,s,{changeset:r.default})}else i=(0,n.Changeset)(a) -return i}validatorFor(e,t={}){if(!this._validators.has(e)){const t=u[e] -let n -void 0!==t&&(n=t(this.schema)),this._validators.set(e,n)}return this._validators.get(e)}},d=i.prototype,m="schema",p=[s],f={configurable:!0,enumerable:!0,writable:!0,initializer:null},h={},Object.keys(f).forEach((function(e){h[e]=f[e]})),h.enumerable=!!h.enumerable,h.configurable=!!h.configurable,("value"in h||h.initializer)&&(h.writable=!0),h=p.slice().reverse().reduce((function(e,t){return t(d,m,e)||e}),h),b&&void 0!==h.initializer&&(h.value=h.initializer?h.initializer.call(b):void 0,h.initializer=void 0),void 0===h.initializer&&(Object.defineProperty(d,m,h),h=null),o=h,i) -var d,m,p,f,b,h -e.default=c})),define("consul-ui/services/client/connections",["exports"],(function(e){var t,n,r,a,l,s,i -function o(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(t=Ember.inject.service("dom"),n=Ember.inject.service("env"),r=Ember.inject.service("data-source/service"),a=class extends Ember.Service{constructor(...e){super(...e),o(this,"dom",l,this),o(this,"env",s,this),o(this,"data",i,this)}init(){super.init(...arguments),this._listeners=this.dom.listeners(),this.connections=new Set,this.addVisibilityChange()}willDestroy(){this._listeners.remove(),this.purge(),super.willDestroy(...arguments)}addVisibilityChange(){this._listeners.add(this.dom.document(),{visibilitychange:e=>{e.target.hidden&&this.purge(-1)}})}whenAvailable(e){const t=this.dom.document() -return t.hidden?new Promise(n=>{const r=this._listeners.add(t,{visibilitychange:function(){r(),n(e)}})}):Promise.resolve(e)}purge(e=0){[...this.connections].forEach((function(t){t.abort(e)})),this.connections=new Set}acquire(e){if(this.connections.size>=this.env.var("CONSUL_HTTP_MAX_CONNECTIONS")){const t=this.data.closed() -let n=[...this.connections].find(e=>!!e.headers()["x-request-id"]&&t.includes(e.headers()["x-request-id"])) -void 0===n&&"text/event-stream"===e.headers()["content-type"]&&(n=this.connections.values().next().value),void 0!==n&&(this.release(n),n.abort(429))}this.connections.add(e)}release(e){this.connections.delete(e)}},l=u(a.prototype,"dom",[t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=u(a.prototype,"env",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i=u(a.prototype,"data",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) -e.default=c})),define("consul-ui/services/client/http",["exports","consul-ui/utils/http/headers","consul-ui/utils/http/consul","consul-ui/utils/http/create-url","consul-ui/utils/http/create-headers","consul-ui/utils/http/create-query-params"],(function(e,t,n,r,a,l){var s,i,o,u,c,d,m,p,f,b,h,v,y,g,O -function _(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function P(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}function w(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function E(e){for(var t=1;tx.stringify(this.sanitize(e))) -const e=this.encoder.uriTag() -this.cache=(t,n)=>(t.uri=n(e),t.SyncTime=(new Date).getTime(),this.store.push({data:{id:t.uri,type:new URL(t.uri).protocol.slice(0,-1),attributes:t}}))}sanitize(e){return this.env.var("CONSUL_NSPACES_ENABLED")&&void 0!==e.ns&&null!==e.ns&&""!==e.ns||delete e.ns,this.env.var("CONSUL_PARTITIONS_ENABLED")&&void 0!==e.partition&&null!==e.partition&&""!==e.partition||delete e.partition,e}willDestroy(){this._listeners.remove(),super.willDestroy(...arguments)}url(){return this.parseURL(...arguments)}body(){const e=function(e,...t){let n={} -const r=e.reduce((function(e,t,n){return-1!==(t=t.split("\n").map(e=>e.trim()).join("\n")).indexOf("\n\n")?n:e}),-1) -return-1!==r&&(n=t.splice(r).reduce((function(e,t,n){switch(!0){case Array.isArray(t):return 0===n&&(e=[]),e.concat(t) -case"string"!=typeof t:return E(E({},e),t) -default:return t}}),n)),[n,...t]}(...arguments) -return this.sanitize(e[0]),e}requestParams(e,...n){const[r,...a]=this.body(...arguments),[l,...s]=this.url(e,...a).split(" "),[i,...o]=s.join(" ").split("\n"),u={url:i.trim(),method:l.trim(),headers:E({[t.CONTENT_TYPE]:"application/json; charset=utf-8"},j(o)),body:null,data:r} -if(u.clientHeaders=C.reduce((function(e,t){return void 0!==u.headers[t]&&(e[t.toLowerCase()]=u.headers[t],delete u.headers[t]),e}),{}),void 0!==r)if("GET"!==u.method)-1!==u.headers[t.CONTENT_TYPE].indexOf("json")?u.body=JSON.stringify(u.data):("string"==typeof u.data&&u.data.length>0||Object.keys(u.data).length>0)&&(u.body=u.data) -else{const e=x.stringify(u.data) -e.length>0&&(-1!==u.url.indexOf("?")?u.url=`${u.url}&${e}`:u.url=`${u.url}?${e}`)}return u.headers[t.CONTENT_TYPE]="application/json; charset=utf-8",u}fetchWithToken(e,t){return this.settings.findBySlug("token").then(n=>fetch(""+e,E(E({},t),{},{headers:E({"X-Consul-Token":void 0===n.SecretID?"":n.SecretID},t.headers)})))}request(e){const t=this,r=this.cache -return e((function(e){const a=t.requestParams(...arguments) -return t.settings.findBySlug("token").then(e=>{const l=E(E({},a),{},{headers:E({[n.HEADERS_TOKEN]:void 0===e.SecretID?"":e.SecretID},a.headers)}),s=t.transport.request(l) -return new Promise((l,i)=>{const o=t._listeners.add(s,{open:e=>{t.acquire(e.target)},message:t=>{const s=E(E(E({},Object.entries(t.data.headers).reduce((function(e,[t,n]){return C.includes(t)||(e[t]=n),e}),{})),a.clientHeaders),{},{[n.HEADERS_DATACENTER]:a.data.dc,[n.HEADERS_NAMESPACE]:a.data.ns||e.Namespace||"default",[n.HEADERS_PARTITION]:a.data.partition||e.Partition||"default"}),i=function(e){let n=e(s,t.data.response,r) -const a=n.meta||{} -return 2===a.version&&(Array.isArray(n.body)?n=new Proxy(n.body,{get:(e,t)=>{switch(t){case"meta":return a}return e[t]}}):(n=n.body,n.meta=a)),n} -Ember.run.next(()=>l(i))},error:e=>{Ember.run.next(()=>i(e.error))},close:e=>{t.release(e.target),o()}}) -s.fetch()})})}))}whenAvailable(e){return this.connections.whenAvailable(e)}abort(){return this.connections.purge(...arguments)}acquire(){return this.connections.acquire(...arguments)}release(){return this.connections.release(...arguments)}},f=P(p.prototype,"dom",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=P(p.prototype,"env",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=P(p.prototype,"connections",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=P(p.prototype,"transport",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=P(p.prototype,"settings",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=P(p.prototype,"encoder",[d],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),O=P(p.prototype,"store",[m],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p) -e.default=S})),define("consul-ui/services/client/transports/xhr",["exports","consul-ui/utils/http/create-headers","consul-ui/utils/http/xhr","consul-ui/utils/http/request","consul-ui/utils/http/error"],(function(e,t,n,r,a){function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t(this.xhr(n),t),t}}e.default=u})),define("consul-ui/services/clipboard/local-storage",["exports","clipboard"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends t.default{constructor(e,t,n){super(e,t),this._cb=n}onClick(e){this._cb(this.text(e.delegateTarget||e.currentTarget)),this.emit("success",{})}}let s=(n=Ember.inject.service("-document"),r=class extends Ember.Service{constructor(...e){var t,n,r,l,s,i,o -super(...e),t=this,n="doc",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0}),o="clipboard",(i="key")in(s=this)?Object.defineProperty(s,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):s[i]=o}execute(e,t){return new l(e,t,e=>{this.doc.defaultView.localStorage.setItem(this.key,e)})}},i=r.prototype,o="doc",u=[n],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a=m,r) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/services/clipboard/os",["exports","clipboard"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends Ember.Service{execute(){return new t.default(...arguments)}}e.default=n})),define("consul-ui/services/code-mirror",["exports","ivy-codemirror/services/code-mirror"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/code-mirror/linter",["exports","consul-ui/utils/editor/lint"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const l=[{name:"JSON",mime:"application/json",mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"HCL",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"YAML",mime:"text/x-yaml",mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"XML",mime:"application/xml",mode:"xml",htmlMode:!1,matchClosing:!0,alignCDATA:!1,ext:["xml"],alias:["xml"]}] -let s=(n=Ember.inject.service("dom"),r=class extends Ember.Service{constructor(...e){var t,n,r,l -super(...e),t=this,n="dom",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}modes(){return l}lint(){return(0,t.default)(...arguments)}getEditor(e){return this.dom.element("textarea + div",e).CodeMirror}},i=r.prototype,o="dom",u=[n],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),a=m,r) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/services/container",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class t extends Ember.Service{constructor(e){super(...arguments),this._owner=e,this._wm=new WeakMap}set(e,t){this._wm.set(t,e)}keyForClass(e){return this._wm.get(e)}get(e){return"string"!=typeof e&&(e=this.keyForClass(e)),this.lookup(e)}lookup(e){return this._owner.lookup(e)}resolveRegistration(e){return this._owner.resolveRegistration(e).prototype}}e.default=t})),define("consul-ui/services/data-sink/protocols/http",["exports"],(function(e){var t,n,r,a,l,s,i,o,u,c,d,m,p -function f(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function b(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let h=(t=Ember.inject.service("settings"),n=Ember.inject.service("repository/intention"),r=Ember.inject.service("repository/kv"),a=Ember.inject.service("repository/nspace"),l=Ember.inject.service("repository/partition"),s=Ember.inject.service("repository/session"),i=class extends Ember.Service{constructor(...e){super(...e),f(this,"settings",o,this),f(this,"intention",u,this),f(this,"kv",c,this),f(this,"nspace",d,this),f(this,"partition",m,this),f(this,"session",p,this)}prepare(e,t,n){return Ember.setProperties(n,t)}persist(e,t){const[,,,,n]=e.split("/") -return this[n].persist(t)}remove(e,t){const[,,,,n]=e.split("/") -return this[n].remove(t)}},o=b(i.prototype,"settings",[t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=b(i.prototype,"intention",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=b(i.prototype,"kv",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=b(i.prototype,"nspace",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=b(i.prototype,"partition",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=b(i.prototype,"session",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=h})),define("consul-ui/services/data-sink/protocols/local-storage",["exports"],(function(e){var t,n,r -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let a=(t=Ember.inject.service("settings"),n=class extends Ember.Service{constructor(...e){var t,n,a,l -super(...e),t=this,n="settings",l=this,(a=r)&&Object.defineProperty(t,n,{enumerable:a.enumerable,configurable:a.configurable,writable:a.writable,value:a.initializer?a.initializer.call(l):void 0})}prepare(e,t,n={}){return null===t||""===t?n:Ember.setProperties(n,t)}persist(e,t){const n=e.split(":").pop() -return this.settings.persist({[n]:t})}remove(e,t){const n=e.split(":").pop() -return this.settings.delete(n)}},l=n.prototype,s="settings",i=[t],o={configurable:!0,enumerable:!0,writable:!0,initializer:null},c={},Object.keys(o).forEach((function(e){c[e]=o[e]})),c.enumerable=!!c.enumerable,c.configurable=!!c.configurable,("value"in c||c.initializer)&&(c.writable=!0),c=i.slice().reverse().reduce((function(e,t){return t(l,s,e)||e}),c),u&&void 0!==c.initializer&&(c.value=c.initializer?c.initializer.call(u):void 0,c.initializer=void 0),void 0===c.initializer&&(Object.defineProperty(l,s,c),c=null),r=c,n) -var l,s,i,o,u,c -e.default=a})),define("consul-ui/services/data-sink/service",["exports"],(function(e){var t,n,r,a,l -function s(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const o=function(e){return-1===(e=e.toString()).indexOf("://")&&(e="consul://"+e),e.split("://")} -let u=(t=Ember.inject.service("data-sink/protocols/http"),n=Ember.inject.service("data-sink/protocols/local-storage"),r=class extends Ember.Service{constructor(...e){super(...e),s(this,"consul",a,this),s(this,"settings",l,this)}prepare(e,t,n){const[r,a]=o(e) -return this[r].prepare(a,t,n)}persist(e,t){const[n,r]=o(e) -return this[n].persist(r,t)}remove(e,t){const[n,r]=o(e) -return this[n].remove(r,t)}},a=i(r.prototype,"consul",[t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),l=i(r.prototype,"settings",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),r) -e.default=u})),define("consul-ui/services/data-source/protocols/http",["exports","consul-ui/decorators/data-source"],(function(e,t){var n,r,a,l,s -function i(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(n=Ember.inject.service("client/http"),r=Ember.inject.service("data-source/protocols/http/blocking"),a=class extends Ember.Service{constructor(...e){super(...e),i(this,"client",l,this),i(this,"type",s,this)}source(e,n){const r=(0,t.match)(e) -let a -return this.client.request(e=>{a=r.cb(r.params,Ember.getOwner(this),e)}),this.type.source(a,n)}},l=o(a.prototype,"client",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=o(a.prototype,"type",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) -e.default=u})),define("consul-ui/services/data-source/protocols/http/blocking",["exports","consul-ui/utils/dom/event-source","consul-ui/services/settings","consul-ui/services/client/http","consul-ui/utils/maybe-call"],(function(e,t,n,r,a){var l,s,i,o,u -function c(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function d(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let m=(l=Ember.inject.service("client/http"),s=Ember.inject.service("settings"),i=class extends Ember.Service{constructor(...e){super(...e),c(this,"client",o,this),c(this,"settings",u,this)}source(e,l){return new t.BlockingEventSource((t,l)=>{const s=l.close.bind(l) -return(0,a.default)(()=>t.cursor=void 0,(0,n.ifNotBlocking)(this.settings))().then(()=>e(t).then((0,a.default)(s,(0,n.ifNotBlocking)(this.settings))).then((function(e={}){const t=Ember.get(e,"meta")||{} -return void 0===t.cursor&&void 0===t.interval&&s(),e})).catch((0,r.restartWhenAvailable)(this.client)))},l)}},o=d(i.prototype,"client",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=d(i.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=m})),define("consul-ui/services/data-source/protocols/http/promise",["exports","consul-ui/utils/dom/event-source"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends Ember.Service{source(e,n){return(0,t.once)(e,n)}}e.default=n})),define("consul-ui/services/data-source/protocols/local-storage",["exports","consul-ui/utils/dom/event-source"],(function(e,t){var n,r,a -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let l=(n=Ember.inject.service("settings"),r=class extends Ember.Service{constructor(...e){var t,n,r,l -super(...e),t=this,n="repo",l=this,(r=a)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(l):void 0})}source(e,n){const r=e.split(":").pop() -return new t.StorageEventSource(()=>this.repo.findBySlug(r),{key:e,uri:n.uri})}},s=r.prototype,i="repo",o=[n],u={configurable:!0,enumerable:!0,writable:!0,initializer:null},d={},Object.keys(u).forEach((function(e){d[e]=u[e]})),d.enumerable=!!d.enumerable,d.configurable=!!d.configurable,("value"in d||d.initializer)&&(d.writable=!0),d=o.slice().reverse().reduce((function(e,t){return t(s,i,e)||e}),d),c&&void 0!==d.initializer&&(d.value=d.initializer?d.initializer.call(c):void 0,d.initializer=void 0),void 0===d.initializer&&(Object.defineProperty(s,i,d),d=null),a=d,r) -var s,i,o,u,c,d -e.default=l})),define("consul-ui/services/data-source/service",["exports","consul-ui/utils/dom/event-source","mnemonist/multi-map"],(function(e,t,n){var r,a,l,s,i,o,u,c,d -function m(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function p(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let f=null,b=null,h=null -class v{constructor(e){this.uri=e}toString(){return this.uri}}let y=(r=Ember.inject.service("dom"),a=Ember.inject.service("encoder"),l=Ember.inject.service("data-source/protocols/http"),s=Ember.inject.service("data-source/protocols/local-storage"),i=class extends Ember.Service{constructor(...e){super(...e),m(this,"dom",o,this),m(this,"encoder",u,this),m(this,"consul",c,this),m(this,"settings",d,this)}init(){super.init(...arguments),f=new Map,b=new Map,h=new n.default(Set),this._listeners=this.dom.listeners()}resetCache(){f=new Map}willDestroy(){Ember.run.schedule("afterRender",()=>{this._listeners.remove(),b.forEach((function(e){e.close()})),f=null,b=null,h.clear(),h=null})}source(e,n){const r=e(this.encoder.uriTag()) -return new Promise((e,n)=>{const a={},l=this.open(r,a,!0) -l.configuration.ref=a -const s=this._listeners.add(l,{message:n=>{s(),e((0,t.proxy)(n.target,n.data))},error:e=>{s(),this.close(l,a),n(e.error)}}) -void 0!==l.getCurrentEvent()&&l.dispatchEvent(l.getCurrentEvent())})}unwrap(e,t){const n=e._source -return h.set(n,t),h.remove(n,n.configuration.ref),delete n.configuration.ref,n}uri(e){return new v(e)}open(e,t,n=!1){if(!(e instanceof v)&&"string"!=typeof e)return this.unwrap(e,t) -let r;-1===(e=e.toString()).indexOf("://")&&(e="consul://"+e) -let[a,l]=e.split("://") -const s=this[a] -if(b.has(e))r=b.get(e),b.delete(e),b.set(e,r) -else{let t={} -f.has(e)&&(t=f.get(e)),t.uri=e,r=s.source(l,t) -const n=this._listeners.add(r,{close:t=>{const r=t.target,a=r.getCurrentEvent(),l=r.configuration.cursor -void 0!==a&&void 0!==l&&t.errors&&"401"!==t.errors[0].status&&f.set(e,{currentEvent:a,cursor:l}),h.has(r)||b.delete(e),n()}}) -b.set(e,r)}return(!h.has(r)||r.readyState>1||n)&&r.open(),h.set(r,t),r}close(e,t){e&&(h.remove(e,t),h.has(e)||(e.close(),2===e.readyState&&b.delete(e.configuration.uri)))}closed(){return[...b.entries()].filter(([e,t])=>t.readyState>1).map(e=>e[0])}},o=p(i.prototype,"dom",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=p(i.prototype,"encoder",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=p(i.prototype,"consul",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=p(i.prototype,"settings",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=y})) -define("consul-ui/services/data-structs",["exports","ngraph.graph"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends Ember.Service{graph(){return(0,t.default)()}}e.default=n})),define("consul-ui/services/dom",["exports","consul-ui/utils/dom/qsa-factory","consul-ui/utils/dom/sibling","consul-ui/utils/dom/closest","consul-ui/utils/dom/is-outside","consul-ui/utils/dom/get-component-factory","consul-ui/utils/dom/normalize-event","consul-ui/utils/dom/create-listeners","consul-ui/utils/dom/click-first-anchor"],(function(e,t,n,r,a,l,s,i,o){var u,c,d -function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const p=(0,t.default)() -let f,b -const h=(0,o.default)(r.default) -let v=(u=Ember.inject.service("-document"),c=class extends Ember.Service{constructor(e){var t,o,u,c -super(...arguments),t=this,o="doc",c=this,(u=d)&&Object.defineProperty(t,o,{enumerable:u.enumerable,configurable:u.configurable,writable:u.writable,value:u.initializer?u.initializer.call(c):void 0}),m(this,"clickFirstAnchor",h),m(this,"closest",r.default),m(this,"sibling",n.default),m(this,"isOutside",a.default),m(this,"normalizeEvent",s.default),m(this,"listeners",i.default),b=new WeakMap,f=(0,l.default)(e)}willDestroy(){super.willDestroy(...arguments),b=null,f=null}document(){return this.doc}viewport(){return this.doc.defaultView}guid(e){return Ember.guidFor(e)}focus(e){if("string"==typeof e&&(e=this.element(e)),void 0!==e){let t=e.getAttribute("tabindex") -e.setAttribute("tabindex","0"),e.focus(),null===t?e.removeAttribute("tabindex"):e.setAttribute("tabindex",t)}}setEventTargetProperty(e,t,n){const r=e.target -return new Proxy(e,{get:function(a,l,s){return"target"===l?new Proxy(r,{get:function(a,l){return l===t?n(e.target[t]):r[l]}}):Reflect.get(...arguments)}})}setEventTargetProperties(e,t){const n=e.target -return new Proxy(e,{get:function(r,a,l){return"target"===a?new Proxy(n,{get:function(r,a){return void 0!==t[a]?t[a](e.target):n[a]}}):Reflect.get(...arguments)}})}root(){return this.doc.documentElement}elementById(e){return this.doc.getElementById(e)}elementsByTagName(e,t){return(t=void 0===t?this.doc:t).getElementsByTagName(e)}elements(e,t){return p(e,t)}element(e,t){return"#"===e.substr(0,1)?this.elementById(e.substr(1)):[...p(e,t)][0]}component(e,t){return f("string"!=typeof e?e:this.element(e,t))}components(e,t){return[...this.elements(e,t)].map((function(e){return f(e)})).filter((function(e){return null!=e}))}isInViewport(e,t,n=0){b.set(e,t) -let r=new IntersectionObserver(e=>{e.map(e=>{const t=b.get(e.target) -"function"==typeof t&&t(e.isIntersecting)})},{rootMargin:"0px",threshold:n}) -return r.observe(e),()=>{r.unobserve(e),b&&b.delete(e),r.disconnect(),r=null}}},y=c.prototype,g="doc",O=[u],_={configurable:!0,enumerable:!0,writable:!0,initializer:null},w={},Object.keys(_).forEach((function(e){w[e]=_[e]})),w.enumerable=!!w.enumerable,w.configurable=!!w.configurable,("value"in w||w.initializer)&&(w.writable=!0),w=O.slice().reverse().reduce((function(e,t){return t(y,g,e)||e}),w),P&&void 0!==w.initializer&&(w.value=w.initializer?w.initializer.call(P):void 0,w.initializer=void 0),void 0===w.initializer&&(Object.defineProperty(y,g,w),w=null),d=w,c) -var y,g,O,_,P,w -e.default=v})),define("consul-ui/services/encoder",["exports","consul-ui/utils/atob","consul-ui/utils/btoa"],(function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends Ember.Service{constructor(...e){super(...e),r(this,"uriComponent",encodeURIComponent),r(this,"joiner",(e,t="",n="")=>(r,a)=>(a||Array(r.length).fill(t)).reduce((t,a,l)=>`${t}${a}${e(r[l]||n)}`,""))}createRegExpEncoder(e,t){return function(e,t=(e=>e)){return(n="",r={})=>""!==n?n.replace(e,(e,n)=>{const a=Ember.get(r,n) -return t(a||"")}):""}(e,t)}atob(){return(0,t.default)(...arguments)}btoa(){return(0,n.default)(...arguments)}uriJoin(){return this.joiner(this.uriComponent,"/","")(...arguments)}uriTag(){return this.tag(this.uriJoin.bind(this))}tag(e){return(t,...n)=>e(n,t)}}e.default=a})),define("consul-ui/services/env",["exports","consul-ui/env"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends Ember.Service{env(e){return this.var(e)}var(e){return(0,t.env)(e)}}e.default=n})),define("consul-ui/services/feedback",["exports","consul-ui/utils/callable-type"],(function(e,t){var n,r,a,l,s -function i(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;tthis.success(n,e,void 0,t),error:n=>this.error(n,e,void 0,t)}}success(e,n,r=m,a){const l=(0,t.default)(n),s=(0,t.default)(r) -!1!==e&&(this.notify.clearMessages(),this.notify.add(o(o({},{timeout:6e3,extendedTimeout:300,destroyOnClick:!0}),{},{type:s("success"),action:l(),item:e,model:a})))}error(e,n,r=m,a){const l=(0,t.default)(n),s=(0,t.default)(r) -this.notify.clearMessages(),this.logger.execute(e),"TransitionAborted"===e.name?this.notify.add(o(o({},{timeout:6e3,extendedTimeout:300,destroyOnClick:!0}),{},{type:s("success"),action:l(),model:a})):this.notify.add(o(o({},{timeout:6e3,extendedTimeout:300,destroyOnClick:!0}),{},{type:s("error",e),action:l(),error:e,model:a}))}async execute(e,t,n,r){let a -try{a=await e(),this.success(a,t,n,r)}catch(l){this.error(l,t,n,r)}}},l=d(a.prototype,"notify",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=d(a.prototype,"logger",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) -e.default=p})),define("consul-ui/services/filter",["exports","consul-ui/utils/filter","consul-ui/filter/predicates/service","consul-ui/filter/predicates/service-instance","consul-ui/filter/predicates/health-check","consul-ui/filter/predicates/node","consul-ui/filter/predicates/kv","consul-ui/filter/predicates/intention","consul-ui/filter/predicates/token","consul-ui/filter/predicates/policy","consul-ui/filter/predicates/auth-method"],(function(e,t,n,r,a,l,s,i,o,u,c){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const d={service:(0,t.andOr)(n.default),"service-instance":(0,t.andOr)(r.default),"health-check":(0,t.andOr)(a.default),"auth-method":(0,t.andOr)(c.default),node:(0,t.andOr)(l.default),kv:(0,t.andOr)(s.default),intention:(0,t.andOr)(i.default),token:(0,t.andOr)(o.default),policy:(0,t.andOr)(u.default)} -class m extends Ember.Service{predicate(e){return d[e]}}e.default=m})),define("consul-ui/services/flash-messages",["exports","ember-cli-flash/services/flash-messages"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/form",["exports","consul-ui/utils/form/builder","consul-ui/forms/kv","consul-ui/forms/token","consul-ui/forms/policy","consul-ui/forms/role","consul-ui/forms/intention"],(function(e,t,n,r,a,l,s){var i,o,u,c,d -function m(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function p(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const f=(0,t.default)(),b={kv:n.default,token:r.default,policy:a.default,role:l.default,intention:s.default} -let h=(i=Ember.inject.service("repository/role"),o=Ember.inject.service("repository/policy"),u=class extends Ember.Service{constructor(...e){var t,n,r -super(...e),m(this,"role",c,this),m(this,"policy",d,this),r=[],(n="forms")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}build(e,t){return f(...arguments)}form(e){let t=this.forms[e] -if(void 0===t&&(t=this.forms[e]=b[e](this),"role"===e||"policy"===e)){const n=this[e] -t.clear((function(e){return n.create(e)})),t.submit((function(e){return n.persist(e)}))}return t}},c=p(u.prototype,"role",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=p(u.prototype,"policy",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u) -e.default=h})),define("consul-ui/services/i18n",["exports","ember-intl/services/intl"],(function(e,t){var n,r,a -function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t(e[t]=this.env.var(t),e),{}) -return s(s({},e),t)}},c=r.prototype,d="env",m=[n],p={configurable:!0,enumerable:!0,writable:!0,initializer:null},b={},Object.keys(p).forEach((function(e){b[e]=p[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=m.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),b),f&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(f):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(c,d,b),b=null),a=b,r) -var c,d,m,p,f,b -e.default=u})),define("consul-ui/services/in-viewport",["exports","ember-in-viewport/services/in-viewport"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/intl",["exports","ember-intl/services/intl"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/logger",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class t extends Ember.Service{execute(e){}}e.default=t})),define("consul-ui/services/page-title-list",["exports","ember-page-title/services/page-title-list"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/page-title",["exports","ember-page-title/services/page-title"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/popup",["exports","torii/services/popup"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/repository",["exports","validated-changeset","consul-ui/utils/http/error","consul-ui/abilities/base"],(function(e,t,n,r){var a,l,s,i,o,u,c -function d(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function m(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.softDelete=void 0 -e.softDelete=(e,t)=>e.store.adapterFor(e.getModelName()).rpc((e,t,n,r)=>e.requestForDeleteRecord(t,n,r),()=>t,t,e.getModelName()) -let p=(a=Ember.inject.service("store"),l=Ember.inject.service("env"),s=Ember.inject.service("repository/permission"),i=class extends Ember.Service{constructor(...e){super(...e),d(this,"store",o,this),d(this,"env",u,this),d(this,"permissions",c,this)}getModelName(){}getPrimaryKey(){}getSlugKey(){}async authorizeBySlug(e,t,n){return n.resources=await this.permissions.findBySlug(n,this.getModelName()),this.validatePermissions(e,t,n)}async authorizeByPermissions(e,t,n){return n.resources=await this.permissions.authorize(n),this.validatePermissions(e,t,n)}async validatePermissions(e,t,r){if(r.resources.length>0){const e=r.resources.find(e=>e.Access===t) -if(e&&!1===e.Allow){const e=new n.default(403) -throw e.errors=[{status:"403"}],e}}const a=await e(r.resources) -return Ember.get(a,"Resources")&&Ember.set(a,"Resources",r.resources),a}shouldReconcile(e,t){if(Ember.get(e,"Datacenter")!==t.dc)return!1 -if(this.env.var("CONSUL_NSPACES_ENABLED")){const n=Ember.get(e,"Namespace") -if(void 0!==n&&n!==t.ns)return!1}if(this.env.var("CONSUL_PARTITIONS_ENABLED")){const n=Ember.get(e,"Partition") -if(void 0!==n&&n!==t.partition)return!1}return!0}reconcile(e={},t={},n={}){void 0!==e.date&&this.store.peekAll(this.getModelName()).forEach(n=>{const r=Ember.get(n,"SyncTime") -!n.isDeleted&&void 0!==r&&r!=e.date&&this.shouldReconcile(n,t)&&this.store.unloadRecord(n)})}peekOne(e){return this.store.peekRecord(this.getModelName(),e)}peekAll(){return this.store.peekAll(this.getModelName())}cached(e){const t=Object.entries(e) -return this.store.peekAll(this.getModelName()).filter(e=>t.every(([t,n])=>e[t]===n))}async findAllByDatacenter(e,t={}){return this.findAll(...arguments)}async findAll(e={},t={}){return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.query(e)}async query(e={},t={}){let n,r,a -try{a=await this.store.query(this.getModelName(),e),r=a.meta}catch(l){switch(Ember.get(l,"errors.firstObject.status")){case"404":case"403":r={date:Number.POSITIVE_INFINITY},n=l -break -default:throw l}}if(void 0!==r&&this.reconcile(r,e,t),void 0!==n)throw n -return a}async findBySlug(e,t={}){return""===e.id?this.create({Datacenter:e.dc,Namespace:e.ns,Partition:e.partition}):(void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.authorizeBySlug(()=>this.store.queryRecord(this.getModelName(),e),r.ACCESS_READ,e))}create(e){return this.store.createRecord(this.getModelName(),e)}persist(e){return(0,t.isChangeset)(e)&&(e.execute(),e=e.data),Ember.set(e,"SyncTime",void 0),e.save()}remove(e){let t=e -return void 0===e.destroyRecord&&(t=e.get("data")),"object"===Ember.typeOf(t)&&(t=this.store.peekRecord(this.getModelName(),t[this.getPrimaryKey()])),t.destroyRecord().then(e=>this.store.unloadRecord(e))}invalidate(){this.store.unloadAll(this.getModelName())}},o=m(i.prototype,"store",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=m(i.prototype,"env",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=m(i.prototype,"permissions",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i) -e.default=p})),define("consul-ui/services/repository/auth-method",["exports","consul-ui/services/repository","consul-ui/models/auth-method","consul-ui/decorators/data-source"],(function(e,t,n,r){var a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(a=(0,r.default)("/:partition/:ns/:dc/auth-methods"),l=(0,r.default)("/:partition/:ns/:dc/auth-method/:id"),i((s=class extends t.default{getModelName(){return"auth-method"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAllByDatacenter(){return super.findAllByDatacenter(...arguments)}async findBySlug(){return super.findBySlug(...arguments)}}).prototype,"findAllByDatacenter",[a],Object.getOwnPropertyDescriptor(s.prototype,"findAllByDatacenter"),s.prototype),i(s.prototype,"findBySlug",[l],Object.getOwnPropertyDescriptor(s.prototype,"findBySlug"),s.prototype),s) -e.default=o})),define("consul-ui/services/repository/binding-rule",["exports","consul-ui/services/repository","consul-ui/models/binding-rule","consul-ui/decorators/data-source"],(function(e,t,n,r){var a,l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(a=(0,r.default)("/:partition/:ns/:dc/binding-rules/for-auth-method/:authmethod"),l=class extends t.default{getModelName(){return"binding-rule"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAllByAuthMethod(){return super.findAll(...arguments)}},i=l.prototype,o="findAllByAuthMethod",u=[a],c=Object.getOwnPropertyDescriptor(l.prototype,"findAllByAuthMethod"),d=l.prototype,m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),l) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/services/repository/coordinate",["exports","consul-ui/services/repository","consul-ui/decorators/data-source","consul-ui/utils/tomography","consul-ui/utils/distance"],(function(e,t,n,r,a){var l,s,i -function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const u=(0,r.default)(a.default) -let c=(l=(0,n.default)("/:partition/:ns/:dc/coordinates"),s=(0,n.default)("/:partition/:ns/:dc/coordinates/for-node/:id"),o((i=class extends t.default{getModelName(){return"coordinate"}async findAllByDatacenter(e,t={}){return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e)}async findAllByNode(e,t){const n=await this.findAllByDatacenter(e,t) -let r={} -return n.length>1&&(r=u(e.id,n)),r.meta=n.meta,r}}).prototype,"findAllByDatacenter",[l],Object.getOwnPropertyDescriptor(i.prototype,"findAllByDatacenter"),i.prototype),o(i.prototype,"findAllByNode",[s],Object.getOwnPropertyDescriptor(i.prototype,"findAllByNode"),i.prototype),i) -e.default=c})),define("consul-ui/services/repository/dc",["exports","consul-ui/services/repository","consul-ui/decorators/data-source","consul-ui/utils/http/consul"],(function(e,t,n,r){var a,l,s,i,o,u,c -function d(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}function m(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t{const l=Object.entries(e).find(([e,t])=>e.toLowerCase()===r.HEADERS_DEFAULT_ACL_POLICY.toLowerCase())[1]||"allow" -return{meta:{version:2,uri:a},body:t.map(e=>n({Name:e,Datacenter:"",Local:e===s,Primary:e===i,DefaultACLPolicy:l},t=>t`${"dc"}:///${""}/${""}/${e}/datacenter`))}})}async fetch({partition:e,ns:t,dc:n},{uri:r},a){return(await(a` - GET /v1/operator/autopilot/state?${{dc:n}} - X-Request-ID: ${r} - `))((e,t,a)=>{const l=Object.values(t.Servers),s=[] -return{meta:{version:2,uri:r},body:a(p(p({},t),{},{Servers:l,RedundancyZones:Object.entries(t.RedundancyZones||{}).map(([e,n])=>p(p({},n),{},{Name:e,Healthy:!0,Servers:n.Servers.reduce((e,n)=>{const r=t.Servers[n] -return s.push(r.ID),e.push(r),e},[])})),ReadReplicas:(t.ReadReplicas||[]).map(e=>(s.push(e),t.Servers[e])),Default:{Servers:l.filter(e=>!s.includes(e.ID))}}),e=>e`${"dc"}:///${""}/${""}/${n}/datacenter`)}})}async fetchCatalogHealth({partition:e,ns:t,dc:n},{uri:r},a){return(await(a` - GET /v1/internal/ui/catalog-overview?${{dc:n,stale:null}} - X-Request-ID: ${r} - `))((e,t)=>{const a=["Nodes","Services","Checks"].reduce((e,n)=>((e,t,n)=>t[n].reduce((e,t)=>(["Partition","Namespace"].forEach(r=>{let a=e[r][t[r]] -void 0===a&&(a=e[r][t[r]]={Name:t[r]}),void 0===a[n]&&(a[n]=p({},b)),a[n].Total+=t.Total,a[n].Passing+=t.Passing,a[n].Warning+=t.Warning,a[n].Critical+=t.Critical}),e.Datacenter[n].Total+=t.Total,e.Datacenter[n].Passing+=t.Passing,e.Datacenter[n].Warning+=t.Warning,e.Datacenter[n].Critical+=t.Critical,e),e))(e,t,n),{Datacenter:{Name:n,Nodes:p({},b),Services:p({},b),Checks:p({},b)},Partition:{},Namespace:{}}) -return{meta:{version:2,uri:r,interval:3e4},body:p({Datacenter:a.Datacenter,Partitions:Object.values(a.Partition),Namespaces:Object.values(a.Namespace)},t)}})}async find(e){const t=this.store.peekAll("dc").findBy("Name",e.name) -if(void 0===t){const e=new Ember.Error("Page not found") -throw e.status="404",{errors:[e]}}return t}},c=d(u.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d(u.prototype,"fetchAll",[l],Object.getOwnPropertyDescriptor(u.prototype,"fetchAll"),u.prototype),d(u.prototype,"fetch",[s],Object.getOwnPropertyDescriptor(u.prototype,"fetch"),u.prototype),d(u.prototype,"fetchCatalogHealth",[i],Object.getOwnPropertyDescriptor(u.prototype,"fetchCatalogHealth"),u.prototype),d(u.prototype,"find",[o],Object.getOwnPropertyDescriptor(u.prototype,"find"),u.prototype),u) -e.default=h})),define("consul-ui/services/repository/discovery-chain",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var r,a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(r=Ember.inject.service("repository/dc"),a=(0,n.default)("/:partition/:ns/:dc/discovery-chain/:id"),l=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="dcs",a=this,(r=s)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}getModelName(){return"discovery-chain"}findBySlug(e,t={}){const n=this.dcs.peekAll().findBy("Name",e.dc) -return void 0===n||Ember.get(n,"MeshEnabled")?super.findBySlug(...arguments).catch(e=>{const t=Ember.get(e,"errors.firstObject.status"),r=(Ember.get(e,"errors.firstObject.detail")||"").trim() -switch(t){case"500":return void(void 0!==n&&r.endsWith("Connect must be enabled in order to use this endpoint")&&Ember.set(n,"MeshEnabled",!1)) -default:throw e}}):Promise.resolve()}},s=i(l.prototype,"dcs",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i(l.prototype,"findBySlug",[a],Object.getOwnPropertyDescriptor(l.prototype,"findBySlug"),l.prototype),l) -e.default=o})),define("consul-ui/services/repository/intention-permission-http-header",["exports","consul-ui/services/repository"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{getModelName(){return"intention-permission-http-header"}create(e={}){return this.store.createFragment(this.getModelName(),e)}persist(e){return e.execute()}}e.default=n})),define("consul-ui/services/repository/intention-permission",["exports","consul-ui/services/repository"],(function(e,t){function n(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function r(e){for(var t=1;te.IsManagedByCRD)),this.managedByCRDs}async authorizeBySlug(e,t,n){const[,r,,a]=n.id.split(":"),l=this.permissions.abilityFor(this.getModelName()) -return n.resources=l.generateForSegment(r).concat(l.generateForSegment(a)),this.authorizeByPermissions(e,t,n)}async persist(e){const t=await super.persist(...arguments) -return Ember.get(t,"Action.length")&&Ember.set(t,"Permissions",[]),t}async findAll(){return super.findAll(...arguments)}async findBySlug(e){let t -if(""===e.id){const n=this.env.var("CONSUL_NSPACES_ENABLED")?"*":"default",r="default" -t=await this.create({SourceNS:e.nspace||n,DestinationNS:e.nspace||n,SourcePartition:e.partition||r,DestinationPartition:e.partition||r,Datacenter:e.dc,Partition:e.partition})}else t=super.findBySlug(...arguments) -return t}async findByService(e,t={}){const n={dc:e.dc,nspace:e.nspace,filter:`SourceName == "${e.id}" or DestinationName == "${e.id}" or SourceName == "*" or DestinationName == "*"`} -return void 0!==t.cursor&&(n.index=t.cursor,n.uri=t.uri),this.store.query(this.getModelName(),n)}},u=m(o.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(o.prototype,"findAll",[l],Object.getOwnPropertyDescriptor(o.prototype,"findAll"),o.prototype),m(o.prototype,"findBySlug",[s],Object.getOwnPropertyDescriptor(o.prototype,"findBySlug"),o.prototype),m(o.prototype,"findByService",[i],Object.getOwnPropertyDescriptor(o.prototype,"findByService"),o.prototype),o) -e.default=p})),define("consul-ui/services/repository/kv",["exports","consul-ui/services/repository","consul-ui/utils/isFolder","consul-ui/models/kv","consul-ui/decorators/data-source"],(function(e,t,n,r,a){var l,s,i -function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(l=(0,a.default)("/:partition/:ns/:dc/kv/:id"),s=(0,a.default)("/:partition/:ns/:dc/kvs/:id"),o((i=class extends t.default{getModelName(){return"kv"}getPrimaryKey(){return r.PRIMARY_KEY}shouldReconcile(e,t){return super.shouldReconcile(...arguments)&&e.Key.startsWith(t.id)}async findBySlug(e,t={}){let r -if((0,n.default)(e.id)){const t=JSON.stringify([e.partition,e.ns,e.dc,e.id]) -r=this.store.peekRecord(this.getModelName(),t),r||(r=await this.create({Key:e.id,Datacenter:e.dc,Namespace:e.ns,Partition:e.partition}))}else r=""===e.id?await this.create({Datacenter:e.dc,Namespace:e.ns,Partition:e.partition}):await super.findBySlug(...arguments) -return r}async findAllBySlug(e,t={}){e.separator="/","/"===e.id&&(e.id="") -let n=await this.findAll(...arguments) -const r=n.meta -return n=n.filter(t=>e.id!==Ember.get(t,"Key")),n.meta=r,n}}).prototype,"findBySlug",[l],Object.getOwnPropertyDescriptor(i.prototype,"findBySlug"),i.prototype),o(i.prototype,"findAllBySlug",[s],Object.getOwnPropertyDescriptor(i.prototype,"findAllBySlug"),i.prototype),i) -e.default=u})),define("consul-ui/services/repository/license",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var r,a -function l(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t({meta:{version:2,uri:r,interval:3e4},body:s(o(l,{dc:n}),r=>r`${"license"}:///${e}/${t}/${n}/license/${l.License.license_id}`)}))}},c=a.prototype,d="find",m=[r],p=Object.getOwnPropertyDescriptor(a.prototype,"find"),f=a.prototype,b={},Object.keys(p).forEach((function(e){b[e]=p[e]})),b.enumerable=!!b.enumerable,b.configurable=!!b.configurable,("value"in b||b.initializer)&&(b.writable=!0),b=m.slice().reverse().reduce((function(e,t){return t(c,d,e)||e}),b),f&&void 0!==b.initializer&&(b.value=b.initializer?b.initializer.call(f):void 0,b.initializer=void 0),void 0===b.initializer&&(Object.defineProperty(c,d,b),b=null),a) -var c,d,m,p,f,b -e.default=u})),define("consul-ui/services/repository/metrics",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var r,a,l,s,i,o,u,c,d,m -function p(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function f(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let b=(r=Ember.inject.service("ui-config"),a=Ember.inject.service("env"),l=Ember.inject.service("client/http"),s=(0,n.default)("/:partition/:ns/:dc/metrics/summary-for-service/:slug/:protocol"),i=(0,n.default)("/:partition/:ns/:dc/metrics/upstream-summary-for-service/:slug/:protocol"),o=(0,n.default)("/:partition/:ns/:dc/metrics/downstream-summary-for-service/:slug/:protocol"),u=class extends t.default{constructor(...e){var t,n,r -super(...e),p(this,"config",c,this),p(this,"env",d,this),p(this,"client",m,this),r=null,(n="error")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r}getModelName(){return"metrics"}init(){super.init(...arguments) -const e=this.config.getSync(),t=e.metrics_provider_options||{} -t.metrics_proxy_enabled=e.metrics_proxy_enabled -const n=e.metrics_provider||"prometheus" -t.fetch=(e,t)=>this.client.fetchWithToken("/v1/internal/ui/metrics-proxy"+e,t) -try{this.provider=window.consul.getMetricsProvider(n,t)}catch(r){this.error=new Error("metrics provider not initialized: "+r),console.error(this.error)}}findServiceSummary(e,t={}){if(this.error)return Promise.reject(this.error) -const n=[this.provider.serviceRecentSummarySeries(e.slug,e.dc,e.ns,e.protocol,{}),this.provider.serviceRecentSummaryStats(e.slug,e.dc,e.ns,e.protocol,{})] -return Promise.all(n).then(e=>({meta:{interval:this.env.var("CONSUL_METRICS_POLL_INTERVAL")||1e4},series:e[0],stats:e[1].stats}))}findUpstreamSummary(e,t={}){return this.error?Promise.reject(this.error):this.provider.upstreamRecentSummaryStats(e.slug,e.dc,e.ns,{}).then(e=>(e.meta={interval:this.env.var("CONSUL_METRICS_POLL_INTERVAL")||1e4},e))}findDownstreamSummary(e,t={}){return this.error?Promise.reject(this.error):this.provider.downstreamRecentSummaryStats(e.slug,e.dc,e.ns,{}).then(e=>(e.meta={interval:this.env.var("CONSUL_METRICS_POLL_INTERVAL")||1e4},e))}},c=f(u.prototype,"config",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),d=f(u.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=f(u.prototype,"client",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),f(u.prototype,"findServiceSummary",[s],Object.getOwnPropertyDescriptor(u.prototype,"findServiceSummary"),u.prototype),f(u.prototype,"findUpstreamSummary",[i],Object.getOwnPropertyDescriptor(u.prototype,"findUpstreamSummary"),u.prototype),f(u.prototype,"findDownstreamSummary",[o],Object.getOwnPropertyDescriptor(u.prototype,"findDownstreamSummary"),u.prototype),u) -e.default=b})),define("consul-ui/services/repository/node",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var r,a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(r=(0,n.default)("/:partition/:ns/:dc/nodes"),a=(0,n.default)("/:partition/:ns/:dc/node/:id"),l=(0,n.default)("/:partition/:ns/:dc/leader"),i((s=class extends t.default{getModelName(){return"node"}async findAllByDatacenter(){return super.findAllByDatacenter(...arguments)}async findBySlug(){return super.findBySlug(...arguments)}findLeader(e,t={}){return void 0!==t.refresh&&(e.uri=t.uri),this.store.queryLeader(this.getModelName(),e)}}).prototype,"findAllByDatacenter",[r],Object.getOwnPropertyDescriptor(s.prototype,"findAllByDatacenter"),s.prototype),i(s.prototype,"findBySlug",[a],Object.getOwnPropertyDescriptor(s.prototype,"findBySlug"),s.prototype),i(s.prototype,"findLeader",[l],Object.getOwnPropertyDescriptor(s.prototype,"findLeader"),s.prototype),s) -e.default=o})),define("consul-ui/services/repository/nspace",["exports","consul-ui/services/repository","consul-ui/models/nspace","consul-ui/decorators/data-source","consul-ui/utils/form/builder"],(function(e,t,n,r,a){var l,s,i,o,u,c,d,m,p,f,b,h,v,y,g -function O(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function _(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let P=(l=Ember.inject.service("router"),s=Ember.inject.service("container"),i=Ember.inject.service("env"),o=Ember.inject.service("form"),u=Ember.inject.service("settings"),c=Ember.inject.service("repository/permission"),d=(0,r.default)("/:partition/:ns/:dc/namespaces"),m=(0,r.default)("/:partition/:ns/:dc/namespace/:id"),p=class extends t.default{constructor(...e){super(...e),O(this,"router",f,this),O(this,"container",b,this),O(this,"env",h,this),O(this,"form",v,this),O(this,"settings",y,this),O(this,"permissions",g,this)}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}getModelName(){return"nspace"}async findAll(){return this.permissions.can("use nspaces")?super.findAll(...arguments).catch(()=>[]):[]}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,ACLs:{PolicyDefaults:[],RoleDefaults:[]}}):await super.findBySlug(...arguments),(0,a.defaultChangeset)(t)}remove(e){return(0,t.softDelete)(this,e)}authorize(e,t){return this.env.var("CONSUL_ACLS_ENABLED")?this.store.authorize(this.getModelName(),{dc:e,ns:t}).catch((function(){return[]})):Promise.resolve([{Resource:"operator",Access:"write",Allow:!0}])}async getActive(e=""){if(this.permissions.can("use nspaces"))return{Name:"default"} -const t=this.store.peekAll("nspace").toArray() -if(0===e.length){e=(await this.settings.findBySlug("token")).Namespace||"default"}return 1===t.length?t[0]:function(e,t){let n=e.find((function(e){return e.Name===t.Name})) -return void 0===n&&(n=e.find((function(e){return"default"===e.Name})),void 0===n&&(n=e[0])),n}(t,{Name:e})}},f=_(p.prototype,"router",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b=_(p.prototype,"container",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),h=_(p.prototype,"env",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),v=_(p.prototype,"form",[o],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),y=_(p.prototype,"settings",[u],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),g=_(p.prototype,"permissions",[c],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_(p.prototype,"findAll",[d],Object.getOwnPropertyDescriptor(p.prototype,"findAll"),p.prototype),_(p.prototype,"findBySlug",[m],Object.getOwnPropertyDescriptor(p.prototype,"findBySlug"),p.prototype),p) -e.default=P})),define("consul-ui/services/repository/oidc-provider",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var r,a,l,s,i,o,u,c -function d(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function m(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let p=(r=Ember.inject.service("torii"),a=Ember.inject.service("settings"),l=(0,n.default)("/:partition/:ns/:dc/oidc/providers"),s=(0,n.default)("/:partition/:ns/:dc/oidc/provider/:id"),i=(0,n.default)("/:partition/:ns/:dc/oidc/authorize/:id/:code/:state"),o=class extends t.default{constructor(...e){super(...e),d(this,"manager",u,this),d(this,"settings",c,this)}init(){super.init(...arguments),this.provider=Ember.getOwner(this).lookup("torii-provider:oidc-with-url")}getModelName(){return"oidc-provider"}async findAllByDatacenter(){const e=await super.findAllByDatacenter(...arguments) -if(0===e.length){const e=new Error("Not found") -return e.statusCode=404,void this.store.adapterFor(this.getModelName()).error(e)}return e}async findBySlug(e){const t=await this.settings.findBySlug("token")||{} -return super.findBySlug({ns:e.ns||t.Namespace||"default",partition:e.partition||t.Partition||"default",dc:e.dc,id:e.id})}authorize(e,t={}){return this.store.authorize(this.getModelName(),e)}logout(e,t,n,r,a,l={}){const s={id:e} -return this.store.logout(this.getModelName(),s)}close(){this.manager.close("oidc-with-url")}findCodeByURL(e){return Ember.set(this.provider,"baseUrl",e),this.manager.open("oidc-with-url",{}).catch(e=>{let t -switch(!0){case e.message.startsWith("remote was closed"):t=new Error("Remote was closed"),t.statusCode=499 -break -default:t=new Error(e.message),t.statusCode=500}this.store.adapterFor(this.getModelName()).error(t)})}},u=m(o.prototype,"manager",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=m(o.prototype,"settings",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(o.prototype,"findAllByDatacenter",[l],Object.getOwnPropertyDescriptor(o.prototype,"findAllByDatacenter"),o.prototype),m(o.prototype,"findBySlug",[s],Object.getOwnPropertyDescriptor(o.prototype,"findBySlug"),o.prototype),m(o.prototype,"authorize",[i],Object.getOwnPropertyDescriptor(o.prototype,"authorize"),o.prototype),o) -e.default=p})) -define("consul-ui/services/repository/partition",["exports","consul-ui/services/repository","consul-ui/models/partition","consul-ui/decorators/data-source","consul-ui/utils/form/builder"],(function(e,t,n,r,a){var l,s,i,o,u,c,d,m,p -function f(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function b(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let h=(l=Ember.inject.service("settings"),s=Ember.inject.service("form"),i=Ember.inject.service("repository/permission"),o=(0,r.default)("/:partition/:ns/:dc/partitions"),u=(0,r.default)("/:partition/:ns/:dc/partition/:id"),c=class extends t.default{constructor(...e){super(...e),f(this,"settings",d,this),f(this,"form",m,this),f(this,"permissions",p,this)}getModelName(){return"partition"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAll(){return this.permissions.can("use partitions")?super.findAll(...arguments).catch(()=>[]):[]}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:""}):await super.findBySlug(...arguments),(0,a.defaultChangeset)(t)}remove(e){return(0,t.softDelete)(this,e)}async getActive(e=""){const t=this.store.peekAll("partition").toArray() -if(0===e.length){e=(await this.settings.findBySlug("token")).Partition||"default"}return 1===t.length?t[0]:function(e,t){let n=e.find((function(e){return e.Name===t.Name})) -return void 0===n&&(n=e.find((function(e){return"default"===e.Name})),void 0===n&&(n=e[0])),n}(t,{Name:e})}},d=b(c.prototype,"settings",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m=b(c.prototype,"form",[s],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),p=b(c.prototype,"permissions",[i],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),b(c.prototype,"findAll",[o],Object.getOwnPropertyDescriptor(c.prototype,"findAll"),c.prototype),b(c.prototype,"findBySlug",[u],Object.getOwnPropertyDescriptor(c.prototype,"findBySlug"),c.prototype),c) -e.default=h})),define("consul-ui/services/repository/permission",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var r,a,l,s,i,o,u,c -function d(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function m(e){for(var t=1;tt.every(t=>n[t]===e[t])&&!0===n.Allow)}can(e){return this._can.can(e)}abilityFor(e){return this._can.abilityFor(e)}generate(e,t,n){const r={Resource:e,Access:t} -return void 0!==n&&(r.Segment=n),r}async authorize(e){if(this.env.var("CONSUL_ACLS_ENABLED")){let n=[] -try{n=await this.store.authorize("permission",e)}catch(t){}return n}return e.resources.map(e=>m(m({},e),{},{Allow:!0}))}async findBySlug(e,t){let n -try{n=this._can.abilityFor(t)}catch(a){return[]}const r=n.generateForSegment(e.id.toString()) -return 0===r.length?[]:(e.resources=r,this.authorize(e))}async findByPermissions(e){return this.authorize(e)}async findAll(e){return e.resources=h,this.permissions=await this.findByPermissions(e),this.permissions.forEach(e=>{["key","node","service","intention","session"].includes(e.Resource)&&(e.Allow=!0)}),this.permissions}},o=b(i.prototype,"env",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=b(i.prototype,"_can",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),c=b(i.prototype,"permissions",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:function(){return[]}}),b(i.prototype,"findAll",[s],Object.getOwnPropertyDescriptor(i.prototype,"findAll"),i.prototype),i) -e.default=v})),define("consul-ui/services/repository/policy",["exports","consul-ui/services/repository","consul-ui/models/policy","consul-ui/decorators/data-source"],(function(e,t,n,r){var a,l,s,i,o -function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(a=Ember.inject.service("form"),l=(0,r.default)("/:partition/:ns/:dc/policies"),s=(0,r.default)("/:partition/:ns/:dc/policy/:id"),i=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="form",a=this,(r=o)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}getModelName(){return"policy"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAllByDatacenter(){return super.findAllByDatacenter(...arguments)}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,Namespace:e.ns}):await super.findBySlug(...arguments),this.form.form(this.getModelName()).setData(t).getData()}persist(e){switch(Ember.get(e,"template")){case"":return e.save()}return Promise.resolve(e)}translate(e){return this.store.translate("policy",Ember.get(e,"Rules"))}},o=u(i.prototype,"form",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(i.prototype,"findAllByDatacenter",[l],Object.getOwnPropertyDescriptor(i.prototype,"findAllByDatacenter"),i.prototype),u(i.prototype,"findBySlug",[s],Object.getOwnPropertyDescriptor(i.prototype,"findBySlug"),i.prototype),i) -e.default=c})),define("consul-ui/services/repository/proxy",["exports","consul-ui/services/repository","consul-ui/models/proxy","consul-ui/decorators/data-source"],(function(e,t,n,r){var a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(a=(0,r.default)("/:partition/:ns/:dc/proxies/for-service/:id"),l=(0,r.default)("/:partition/:ns/:dc/proxy-instance/:serviceId/:node/:id"),i((s=class extends t.default{getModelName(){return"proxy"}getPrimaryKey(){return n.PRIMARY_KEY}findAllBySlug(e,t={}){return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e).then(e=>(e.forEach(e=>{const t=JSON.parse(e.uid) -t.pop(),t.push(e.ServiceProxy.DestinationServiceID) -const n=this.store.peekRecord("service-instance",JSON.stringify(t)) -n&&Ember.set(n,"ProxyInstance",e)}),e))}async findInstanceBySlug(e,t){const n=await this.findAllBySlug(e,t) -let r={} -if(Ember.get(n,"length")>0){let t=n.filterBy("ServiceProxy.DestinationServiceID",e.serviceId).findBy("NodeName",e.node) -t?r=t:(t=n.findBy("ServiceProxy.DestinationServiceName",e.id),t&&(r=t))}return Ember.set(r,"meta",Ember.get(n,"meta")),r}}).prototype,"findAllBySlug",[a],Object.getOwnPropertyDescriptor(s.prototype,"findAllBySlug"),s.prototype),i(s.prototype,"findInstanceBySlug",[l],Object.getOwnPropertyDescriptor(s.prototype,"findInstanceBySlug"),s.prototype),s) -e.default=o})),define("consul-ui/services/repository/role",["exports","consul-ui/services/repository","consul-ui/models/role","consul-ui/decorators/data-source"],(function(e,t,n,r){var a,l,s,i,o -function u(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let c=(a=Ember.inject.service("form"),l=(0,r.default)("/:partition/:ns/:dc/roles"),s=(0,r.default)("/:partition/:ns/:dc/role/:id"),i=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="form",a=this,(r=o)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}getModelName(){return"role"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAll(){return super.findAll(...arguments)}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,Namespace:e.ns}):await super.findBySlug(...arguments),this.form.form(this.getModelName()).setData(t).getData()}},o=u(i.prototype,"form",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u(i.prototype,"findAll",[l],Object.getOwnPropertyDescriptor(i.prototype,"findAll"),i.prototype),u(i.prototype,"findBySlug",[s],Object.getOwnPropertyDescriptor(i.prototype,"findBySlug"),i.prototype),i) -e.default=c})),define("consul-ui/services/repository/service-instance",["exports","consul-ui/services/repository","consul-ui/abilities/base","consul-ui/decorators/data-source"],(function(e,t,n,r){var a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(a=(0,r.default)("/:partition/:ns/:dc/service-instances/for-service/:id"),l=(0,r.default)("/:partition/:ns/:dc/service-instance/:serviceId/:node/:id"),i((s=class extends t.default{getModelName(){return"service-instance"}shouldReconcile(e,t){return super.shouldReconcile(...arguments)&&e.Service.Service===t.id}async findByService(e,t={}){return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.authorizeBySlug(async t=>{const n=await this.query(e) -return Ember.set(n,"firstObject.Service.Resources",t),n},n.ACCESS_READ,e)}async findBySlug(e,t={}){return super.findBySlug(...arguments)}}).prototype,"findByService",[a],Object.getOwnPropertyDescriptor(s.prototype,"findByService"),s.prototype),i(s.prototype,"findBySlug",[l],Object.getOwnPropertyDescriptor(s.prototype,"findBySlug"),s.prototype),s) -e.default=o})),define("consul-ui/services/repository/service",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var r,a,l -function s(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let i=(r=(0,n.default)("/:partition/:ns/:dc/services"),a=(0,n.default)("/:partition/:ns/:dc/gateways/for-service/:gateway"),s((l=class extends t.default{getModelName(){return"service"}async findAllByDatacenter(){return super.findAll(...arguments)}findGatewayBySlug(e,t={}){return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e)}}).prototype,"findAllByDatacenter",[r],Object.getOwnPropertyDescriptor(l.prototype,"findAllByDatacenter"),l.prototype),s(l.prototype,"findGatewayBySlug",[a],Object.getOwnPropertyDescriptor(l.prototype,"findGatewayBySlug"),l.prototype),l) -e.default=i})),define("consul-ui/services/repository/session",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var r,a,l,s,i -function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(r=Ember.inject.service("store"),a=(0,n.default)("/:partition/:ns/:dc/sessions/for-node/:id"),l=(0,n.default)("/:partition/:ns/:dc/sessions/for-key/:id"),s=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="store",a=this,(r=i)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}getModelName(){return"session"}findByNode(e,t={}){return void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.query(this.getModelName(),e)}findByKey(e,t={}){return this.findBySlug(...arguments)}},i=o(s.prototype,"store",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o(s.prototype,"findByNode",[a],Object.getOwnPropertyDescriptor(s.prototype,"findByNode"),s.prototype),o(s.prototype,"findByKey",[l],Object.getOwnPropertyDescriptor(s.prototype,"findByKey"),s.prototype),s) -e.default=u})),define("consul-ui/services/repository/token",["exports","consul-ui/services/repository","consul-ui/models/token","consul-ui/decorators/data-source"],(function(e,t,n,r){var a,l,s,i,o,u,c,d -function m(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let p=(a=Ember.inject.service("form"),l=(0,r.default)("/:partition/:ns/:dc/tokens"),s=(0,r.default)("/:partition/:ns/:dc/token/:id"),i=(0,r.default)("/:partition/:ns/:dc/token/self/:secret"),o=(0,r.default)("/:partition/:ns/:dc/tokens/for-policy/:policy"),u=(0,r.default)("/:partition/:ns/:dc/tokens/for-role/:role"),c=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="form",a=this,(r=d)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}getModelName(){return"token"}getPrimaryKey(){return n.PRIMARY_KEY}getSlugKey(){return n.SLUG_KEY}async findAll(){return super.findAll(...arguments)}async findBySlug(e){let t -return t=""===e.id?await this.create({Datacenter:e.dc,Partition:e.partition,Namespace:e.ns}):await super.findBySlug(...arguments),this.form.form(this.getModelName()).setData(t).getData()}self(e){return this.store.self(this.getModelName(),{secret:e.secret,dc:e.dc}).catch(e=>Promise.reject(e))}clone(e){return this.store.clone(this.getModelName(),Ember.get(e,n.PRIMARY_KEY))}findByPolicy(e){return this.findAll(...arguments)}findByRole(){return this.findAll(...arguments)}},d=m(c.prototype,"form",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),m(c.prototype,"findAll",[l],Object.getOwnPropertyDescriptor(c.prototype,"findAll"),c.prototype),m(c.prototype,"findBySlug",[s],Object.getOwnPropertyDescriptor(c.prototype,"findBySlug"),c.prototype),m(c.prototype,"self",[i],Object.getOwnPropertyDescriptor(c.prototype,"self"),c.prototype),m(c.prototype,"findByPolicy",[o],Object.getOwnPropertyDescriptor(c.prototype,"findByPolicy"),c.prototype),m(c.prototype,"findByRole",[u],Object.getOwnPropertyDescriptor(c.prototype,"findByRole"),c.prototype),c) -e.default=p})),define("consul-ui/services/repository/topology",["exports","consul-ui/services/repository","consul-ui/decorators/data-source"],(function(e,t,n){var r,a,l,s -function i(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let o=(r=Ember.inject.service("repository/dc"),a=(0,n.default)("/:partition/:ns/:dc/topology/:id/:kind"),l=class extends t.default{constructor(...e){var t,n,r,a -super(...e),t=this,n="dcs",a=this,(r=s)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}getModelName(){return"topology"}findBySlug(e,t={}){const n=this.dcs.peekOne(e.dc) -return null===n||Ember.get(n,"MeshEnabled")?(void 0!==t.cursor&&(e.index=t.cursor,e.uri=t.uri),this.store.queryRecord(this.getModelName(),e).catch(e=>{const t=Ember.get(e,"errors.firstObject.status"),r=(Ember.get(e,"errors.firstObject.detail")||"").trim() -switch(t){case"500":return void(null!==n&&r.endsWith("Connect must be enabled in order to use this endpoint")&&Ember.set(n,"MeshEnabled",!1)) -default:throw e}})):Promise.resolve()}},s=i(l.prototype,"dcs",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),i(l.prototype,"findBySlug",[a],Object.getOwnPropertyDescriptor(l.prototype,"findBySlug"),l.prototype),l) -e.default=o})),define("consul-ui/services/resize-observer",["exports","ember-resize-observer-service/services/resize-observer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/routlet",["exports","consul-ui/utils/routing/wildcard","consul-ui/router"],(function(e,t,n){var r,a,l,s,i,o,u -function c(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e){for(var t=1;t{if("application"===e)return 1 -if("application"===t)return-1 -const n=e.split(".").length,r=t.split(".").length -switch(!0){case n>r:return-1 -case n{e=t}),e}findOutlet(e){return[...h.keys()].find(t=>-1!==e.indexOf(t))}outletFor(e){const t=[...h.keys()],n=t.indexOf(e)+1 -return h.get(t[n])}normalizeParamsFor(e,t={}){return b(e)?Object.keys(t).reduce((function(e,n){return void 0!==t[n]?e[n]=decodeURIComponent(t[n]):e[n]=t[n],e}),{}):t}paramsFor(e){let t={} -const n=h.get(e) -void 0!==n&&void 0!==n.args.params&&(t=n.args.params) -let r=this.router.currentRoute -null===r&&(r=this.container.lookup("route:application")) -let a,l=r,s=this.normalizeParamsFor(e,l.params) -for(;a=l.parent;)s=d(d({},this.normalizeParamsFor(a.name,a.params)),s),l=a -return d(d(d({},this.container.get("location:"+this.env.var("locationType")).optionalParams()),s),t)}modelFor(e){const t=h.get(e) -if(void 0!==t)return t.model}addRoute(e,t){const n=this.outletFor(e) -void 0!==n&&(n.route=t,Ember.run.schedule("afterRender",()=>{n.routeName=e}))}removeRoute(e,t){const n=this.outletFor(e) -t._model=void 0,void 0!==n&&Ember.run.schedule("afterRender",()=>{n.route=void 0})}addOutlet(e,t){h.set(e,t)}removeOutlet(e){Ember.run.schedule("afterRender",()=>{h.delete(e)})}},i=f(s.prototype,"container",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o=f(s.prototype,"env",[a],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),u=f(s.prototype,"router",[l],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s) -e.default=v})),define("consul-ui/services/schema",["exports","consul-ui/models/intention-permission","consul-ui/models/intention-permission-http","consul-ui/models/intention-permission-http-header"],(function(e,t,n,r){function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class l extends Ember.Service{constructor(...e){super(...e),a(this,"intention-permission",t.schema),a(this,"intention-permission-http",n.schema),a(this,"intention-permission-http-header",r.schema)}}e.default=l})),define("consul-ui/services/search",["exports","consul-ui/utils/search/exact","consul-ui/search/predicates/intention","consul-ui/search/predicates/upstream-instance","consul-ui/search/predicates/service-instance","consul-ui/search/predicates/health-check","consul-ui/search/predicates/acl","consul-ui/search/predicates/service","consul-ui/search/predicates/node","consul-ui/search/predicates/kv","consul-ui/search/predicates/token","consul-ui/search/predicates/role","consul-ui/search/predicates/policy","consul-ui/search/predicates/auth-method","consul-ui/search/predicates/nspace"],(function(e,t,n,r,a,l,s,i,o,u,c,d,m,p,f){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const b={intention:n.default,service:i.default,"service-instance":a.default,"upstream-instance":r.default,"health-check":l.default,"auth-method":p.default,node:o.default,kv:u.default,acl:s.default,token:c.default,role:d.default,policy:m.default,nspace:f.default} -class h extends Ember.Service{constructor(...e){var n,r,a -super(...e),n=this,r="searchables",a={exact:t.default},r in n?Object.defineProperty(n,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[r]=a}predicate(e){return b[e]}}e.default=h})),define("consul-ui/services/settings",["exports","consul-ui/utils/storage/local-storage"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.ifNotBlocking=void 0 -const n=(0,t.default)("consul") -e.ifNotBlocking=function(e){return e.findBySlug("client").then((function(e){return void 0!==e.blocking&&!e.blocking}))} -class r extends Ember.Service{constructor(...e){var t,r,a -super(...e),a=n,(r="storage")in(t=this)?Object.defineProperty(t,r,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[r]=a}findAll(e){return Promise.resolve(this.storage.all())}findBySlug(e){return Promise.resolve(this.storage.getValue(e))}persist(e){const t=this.storage -return Object.keys(e).forEach(n=>{t.setValue(n,e[n])}),Promise.resolve(e)}delete(e){Array.isArray(e)||(e=[e]) -const t=this.storage,n=e.reduce((function(e,n){return t.removeValue(n),e}),{}) -return Promise.resolve(n)}}e.default=r})),define("consul-ui/services/sort",["exports","consul-ui/sort/comparators/service","consul-ui/sort/comparators/service-instance","consul-ui/sort/comparators/upstream-instance","consul-ui/sort/comparators/kv","consul-ui/sort/comparators/health-check","consul-ui/sort/comparators/intention","consul-ui/sort/comparators/token","consul-ui/sort/comparators/role","consul-ui/sort/comparators/policy","consul-ui/sort/comparators/auth-method","consul-ui/sort/comparators/nspace","consul-ui/sort/comparators/node"],(function(e,t,n,r,a,l,s,i,o,u,c,d,m){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.properties=void 0 -const p=e=>e.reduce((e,t)=>e.concat([t+":asc",t+":desc"]),[]),f=(e=[])=>t=>{const n=p(e) -return[n.find(e=>e===t)||n[0]]} -e.properties=f -const b={properties:f,directionify:p},h={service:(0,t.default)(b),"service-instance":(0,n.default)(b),"upstream-instance":(0,r.default)(b),"health-check":(0,l.default)(b),"auth-method":(0,c.default)(b),kv:(0,a.default)(b),intention:(0,s.default)(b),token:(0,i.default)(b),role:(0,o.default)(b),policy:(0,u.default)(b),nspace:(0,d.default)(b),node:(0,m.default)(b)} -class v extends Ember.Service{comparator(e){return h[e]}}e.default=v})),define("consul-ui/services/state-with-charts",["exports","consul-ui/services/state","consul-ui/machines/validate.xstate","consul-ui/machines/boolean.xstate"],(function(e,t,n,r){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class a extends t.default{constructor(...e){var t,a,l -super(...e),t=this,a="stateCharts",l={validate:n.default,boolean:r.default},a in t?Object.defineProperty(t,a,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[a]=l}}e.default=a})),define("consul-ui/services/state",["exports","flat","@xstate/fsm"],(function(e,t,n){var r,a,l -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let s=(r=Ember.inject.service("logger"),a=class extends Ember.Service{constructor(...e){var t,n,r,a,s,i,o -super(...e),r={},(n="stateCharts")in(t=this)?Object.defineProperty(t,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[n]=r,a=this,s="logger",o=this,(i=l)&&Object.defineProperty(a,s,{enumerable:i.enumerable,configurable:i.configurable,writable:i.writable,value:i.initializer?i.initializer.call(o):void 0})}log(e,t){}stateChart(e){return this.stateCharts[e]}addGuards(e,t){return this.guards(e).forEach((function([n,r]){Ember.set(e,n,(function(){return!!t.onGuard(r,...arguments)}))})),[e,t]}machine(e,t={}){return(0,n.createMachine)(...this.addGuards(e,t))}prepareChart(e){return void 0!==(e=JSON.parse(JSON.stringify(e))).on&&Object.values(e.states).forEach((function(t){void 0===t.on?t.on=e.on:Object.keys(e.on).forEach((function(n){void 0===t.on[n]&&(t.on[n]=e.on[n])}))})),e}matches(e,t){if(void 0===e)return!1 -return(Array.isArray(t)?t:[t]).some(t=>e.matches(t))}state(e){return{matches:e}}interpret(e,t){e=this.prepareChart(e) -const r=(0,n.interpret)(this.machine(e,t)) -return r.subscribe(n=>{n.changed&&(this.log(e,n),t.onTransition(n))}),r}guards(e){return Object.entries((0,t.default)(e)).filter(([e])=>e.endsWith(".cond"))}},i=a.prototype,o="logger",u=[r],c={configurable:!0,enumerable:!0,writable:!0,initializer:null},m={},Object.keys(c).forEach((function(e){m[e]=c[e]})),m.enumerable=!!m.enumerable,m.configurable=!!m.configurable,("value"in m||m.initializer)&&(m.writable=!0),m=u.slice().reverse().reduce((function(e,t){return t(i,o,e)||e}),m),d&&void 0!==m.initializer&&(m.value=m.initializer?m.initializer.call(d):void 0,m.initializer=void 0),void 0===m.initializer&&(Object.defineProperty(i,o,m),m=null),l=m,a) -var i,o,u,c,d,m -e.default=s})),define("consul-ui/services/store",["exports","@ember-data/store"],(function(e,t){var n,r,a,l,s -function i(e,t,n,r){n&&Object.defineProperty(e,t,{enumerable:n.enumerable,configurable:n.configurable,writable:n.writable,value:n.initializer?n.initializer.call(r):void 0})}function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(n=Ember.inject.service("data-source/service"),r=Ember.inject.service("client/http"),a=class extends t.default{constructor(...e){super(...e),i(this,"dataSource",l,this),i(this,"client",s,this)}invalidate(e=401){this.client.abort(401),this.dataSource.resetCache(),this.init()}clear(){this.invalidate(0)}clone(e,t){return this.adapterFor(e).clone(this,{modelName:e},t,this._internalModelForId(e,t).createSnapshot({}))}self(e,t){const n=this.adapterFor(e),r=this.serializerFor(e),a={modelName:e} -return n.self(this,a,t.secret,t).then(e=>r.normalizeResponse(this,a,e,t,"self"))}queryLeader(e,t){const n=this.adapterFor(e),r=this.serializerFor(e),a={modelName:e} -return n.queryLeader(this,a,null,t).then(e=>(e.meta=r.normalizeMeta(this,a,e,null,"leader"),e))}authorize(e,t={}){const n=this.adapterFor(e),r=this.serializerFor(e),a={modelName:e} -return n.authorize(this,a,null,t).then(e=>r.normalizeResponse(this,a,e,void 0,"authorize"))}logout(e,t={}){const n={modelName:e} -return this.adapterFor(e).logout(this,n,t.id,t)}},l=o(a.prototype,"dataSource",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),s=o(a.prototype,"client",[r],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),a) -e.default=u})),define("consul-ui/services/temporal",["exports","pretty-ms","parse-duration","dayjs","dayjs/plugin/relativeTime"],(function(e,t,n,r,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,r.default.extend(a.default) -class l extends Ember.Service{format(e,t){const n=(0,r.default)(e) -return(0,r.default)().isBefore(n)?(0,r.default)().to(n,!0):(0,r.default)().from(n,!0)}within([e,t],n){return(0,r.default)(e).isBefore((0,r.default)().add(t,"ms"))}parse(e,t){return(0,n.default)(e)}durationFrom(e,n={}){switch(!0){case"number"==typeof e:return 0===e?"0":(0,t.default)(e/1e6,{formatSubMilliseconds:!0}).split(" ").join("") -case"string"==typeof e:default:return e}}}e.default=l})),define("consul-ui/services/text-measurer",["exports","ember-text-measurer/services/text-measurer"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/ticker",["exports","consul-ui/utils/ticker"],(function(e,t){let n -Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class r extends Ember.Service{init(){super.init(...arguments),this.reset()}tweenTo(e,r="",a,l){const s=r -return n.has(s)?((r=n.get(s))instanceof t.Tween&&(r=r.stop().getTarget()),n.set(s,t.Tween.to(r,e,a,l)),r):(n.set(s,e),e)}destroy(e){return this.reset(),t.Tween.destroy()}reset(){n=new Map}}e.default=r})),define("consul-ui/services/timeout",["exports","consul-ui/utils/promisedTimeout"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -const n=(0,t.default)(Promise) -class r extends Ember.Service{execute(e,t){return n(e,t)}tick(){return new Promise((function(e){Ember.run.next(e)}))}}e.default=r})),define("consul-ui/services/torii-session",["exports","torii/services/torii-session"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/torii",["exports","torii/services/torii"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/services/ui-config",["exports","consul-ui/decorators/data-source"],(function(e,t){var n,r,a,l,s,i -function o(e,t,n,r,a){var l={} -return Object.keys(r).forEach((function(e){l[e]=r[e]})),l.enumerable=!!l.enumerable,l.configurable=!!l.configurable,("value"in l||l.initializer)&&(l.writable=!0),l=n.slice().reverse().reduce((function(n,r){return r(e,t,n)||n}),l),a&&void 0!==l.initializer&&(l.value=l.initializer?l.initializer.call(a):void 0,l.initializer=void 0),void 0===l.initializer&&(Object.defineProperty(e,t,l),l=null),l}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -let u=(n=Ember.inject.service("env"),r=(0,t.default)("/:partition/:nspace/:dc/ui-config/:path"),a=(0,t.default)("/:partition/:nspace/:dc/notfound/:path"),l=(0,t.default)("/:partition/:nspace/:dc/ui-config"),s=class extends Ember.Service{constructor(...e){var t,n,r,a -super(...e),t=this,n="env",a=this,(r=i)&&Object.defineProperty(t,n,{enumerable:r.enumerable,configurable:r.configurable,writable:r.writable,value:r.initializer?r.initializer.call(a):void 0})}async findByPath(e){return Ember.get(this.get(),e.path)}async parsePath(e){return e.path.split("/").reduce((e,t)=>{switch(!0){case t.startsWith("~"):e.nspace=t.substr(1) -break -case t.startsWith("_"):e.partition=t.substr(1) -break -case void 0===e.dc:e.dc=t}return e},{})}async get(){return this.env.var("CONSUL_UI_CONFIG")}getSync(){return this.env.var("CONSUL_UI_CONFIG")}},i=o(s.prototype,"env",[n],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),o(s.prototype,"findByPath",[r],Object.getOwnPropertyDescriptor(s.prototype,"findByPath"),s.prototype),o(s.prototype,"parsePath",[a],Object.getOwnPropertyDescriptor(s.prototype,"parsePath"),s.prototype),o(s.prototype,"get",[l],Object.getOwnPropertyDescriptor(s.prototype,"get"),s.prototype),s) -e.default=u})),define("consul-ui/sort/comparators/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>(t="MethodName:asc")=>e(["MethodName","TokenTTL"])(t)})),define("consul-ui/sort/comparators/health-check",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>(t="Status:asc")=>t.startsWith("Status:")?function(e,n){const[,r]=t.split(":") -let a,l -"asc"===r?(a=e,l=n):(l=e,a=n) -const s=a.Status,i=l.Status -switch(s){case"passing":return"passing"===i?0:1 -case"critical":return"critical"===i?0:-1 -case"warning":switch(i){case"passing":return-1 -case"critical":return 1 -default:return 0}}return 0}:e(["Name","Kind"])(t)})),define("consul-ui/sort/comparators/intention",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=()=>e=>[e]})),define("consul-ui/sort/comparators/kv",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>t=>e(["Key","Kind"])(t)})) -define("consul-ui/sort/comparators/node",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>(t="Name:asc")=>t.startsWith("Status:")?function(e,n){const[,r]=t.split(":") -let a,l -switch("asc"===r?(l=e,a=n):(a=e,l=n),!0){case a.ChecksCritical>l.ChecksCritical:return 1 -case a.ChecksCriticall.ChecksWarning:return 1 -case a.ChecksWarningl.ChecksPassing:return-1}}return 0}}:e(["Node"])(t)})),define("consul-ui/sort/comparators/nspace",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>t=>e(["Name"])(t)})),define("consul-ui/sort/comparators/partition",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>t=>e(["Name"])(t)})),define("consul-ui/sort/comparators/policy",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>(t="Name:asc")=>e(["Name"])(t)})),define("consul-ui/sort/comparators/role",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>(t="Name:asc")=>e(["Name","CreateIndex"])(t)})),define("consul-ui/sort/comparators/service-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>t=>{if(t.startsWith("Status:")){const[,e]=t.split(":"),n=["PercentageChecksPassing","PercentageChecksWarning","PercentageChecksCritical"] -return"asc"===e&&n.reverse(),function(e,t){for(let r in n){let a=n[r] -if(e[a]!==t[a])return e[a]>t[a]?-1:1}}}return e(["Name"])(t)}})),define("consul-ui/sort/comparators/service",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>(t="Status:asc")=>t.startsWith("Status:")?function(e,n){const[,r]=t.split(":") -let a,l -switch("asc"===r?(l=e,a=n):(a=e,l=n),!0){case a.MeshChecksCritical>l.MeshChecksCritical:return 1 -case a.MeshChecksCriticall.MeshChecksWarning:return 1 -case a.MeshChecksWarningl.MeshChecksPassing:return-1}}return 0}}:e(["Name"])(t)})),define("consul-ui/sort/comparators/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>t=>e(["CreateTime"])(t)})),define("consul-ui/sort/comparators/upstream-instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=({properties:e})=>(t="DestinationName:asc")=>e(["DestinationName"])(t)})),define("consul-ui/styles/base/decoration/visually-hidden.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>e` - @keyframes visually-hidden { - 100% { - position: absolute; - overflow: hidden; - clip: rect(0 0 0 0); - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - border: 0; - } - } - `})),define("consul-ui/styles/base/icons/base-keyframes.css",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>e` -*::before, *::after { - display: inline-block; - animation-play-state: paused; - animation-fill-mode: forwards; - animation-iteration-count: var(--icon-resolution, 1); - vertical-align: text-top; -} -*::before { - animation-name: var(--icon-name-start, var(--icon-name)), - var(--icon-size-start, var(--icon-size, icon-000)); - background-color: var(--icon-color-start, var(--icon-color)); -} -*::after { - animation-name: var(--icon-name-end, var(--icon-name)), - var(--icon-size-end, var(--icon-size, icon-000)); - background-color: var(--icon-color-end, var(--icon-color)); -} - -[style*='--icon-color-start']::before { - color: var(--icon-color-start); -} -[style*='--icon-color-end']::after { - color: var(--icon-color-end); -} -[style*='--icon-name-start']::before, -[style*='--icon-name-end']::after { - content: ''; -} - -@keyframes icon-000 { - 100% { - width: 1.2em; - height: 1.2em; - } -} -@keyframes icon-100 { - 100% { - width: 0.625rem; /* 10px */ - height: 0.625rem; /* 10px */ - } -} -@keyframes icon-200 { - 100% { - width: 0.75rem; /* 12px */ - height: 0.75rem; /* 12px */ - } -} -@keyframes icon-300 { - 100% { - width: 1rem; /* 16px */ - height: 1rem; /* 16px */ - } -} -@keyframes icon-400 { - 100% { - width: 1.125rem; /* 18px */ - height: 1.125rem; /* 18px */ - } -} -@keyframes icon-500 { - 100% { - width: 1.250rem; /* 20px */ - height: 1.250rem; /* 20px */ - } -} -@keyframes icon-600 { - 100% { - width: 1.375rem; /* 22px */ - height: 1.375rem; /* 22px */ - } -} -@keyframes icon-700 { - 100% { - width: 1.500rem; /* 24px */ - height: 1.500rem; /* 24px */ - } -} -@keyframes icon-800 { - 100% { - width: 1.625rem; /* 26px */ - height: 1.625rem; /* 26px */ - } -} -@keyframes icon-900 { - 100% { - width: 1.750rem; /* 28px */ - height: 1.750rem; /* 28px */ - } -} -`})),define("consul-ui/templates/application",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"wBErwPik",block:'{"symbols":["route","o","partition","nspace","dcs","dc","dcs","dc","consul","o","source","value","key"],"statements":[[8,"route",[],[["@name"],[[34,26]]],[["default"],[{"statements":[[2,"\\n\\n"],[8,[32,1,["Announcer"]],[],[["@title"],["Consul"]],null],[2,"\\n"],[6,[37,6],[[30,[36,19],["use acls"],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,23],null,[["class"],["has-acls"]]]],[2,"\\n"]],"parameters":[]}]]],[6,[37,6],[[30,[36,19],["use nspaces"],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,23],null,[["class"],["has-nspaces"]]]],[2,"\\n"]],"parameters":[]}]]],[6,[37,6],[[30,[36,19],["use partitions"],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,23],null,[["class"],["has-partitions"]]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[8,"data-source",[],[["@src","@onchange"],[[30,[36,7],["settings://consul:client"],null],[30,[36,20],["onClientChanged"],null]]],null],[2,"\\n\\n"],[8,"data-source",[],[["@src"],[[30,[36,7],["settings://consul:theme"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,28],[[30,[36,27],[[32,11,["data"]]],null]],null,[["default"],[{"statements":[[6,[37,6],[[30,[36,9],[[32,12],[30,[36,25],[[32,13],[30,[36,24],["color-scheme","contrast"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[1,[30,[36,23],null,[["class"],[[30,[36,22],["prefers-",[32,13],"-",[32,12]],null]]]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[12,13]}]]]],"parameters":[11]}]]],[2,"\\n\\n"],[6,[37,6],[[30,[36,19],["use acls"],null]],null,[["default"],[{"statements":[[8,"data-source",[],[["@src","@onchange"],[[30,[36,7],["settings://consul:token"],null],[30,[36,5],[[32,0],[30,[36,17],[[35,0]],null]],[["value"],["data"]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n\\n"],[6,[37,6],[[30,[36,29],[[32,1,["currentName"]],"oauth-provider-debug"],null]],null,[["default","else"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,18],[[32,1,["currentName"]],"index"],null]],null,[["default","else"],[{"statements":[[2,"\\n"],[2," "],[1,[30,[36,21],[[30,[36,20],["replaceWith","dc.services.index",[30,[36,1],null,[["dc"],[[30,[36,10],["CONSUL_DATACENTER_LOCAL"],null]]]]],null]],null]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,6],[[30,[36,18],[[32,1,["currentName"]],"notfound"],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,7],["/*/*/*/notfound/${path}",[30,[36,1],null,[["path"],[[32,1,["params","notfound"]]]]]],null],[30,[36,5],[[32,0],[30,[36,17],[[35,13]],null]],[["value"],["data"]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,16],[[30,[36,6],[[30,[36,19],["use partitions"],null],[30,[36,15],[[32,1,["params","partition"]],[35,13,["partition"]],[35,0,["Partition"]],""],null],""],null],[30,[36,6],[[30,[36,19],["use nspaces"],null],[30,[36,15],[[32,1,["params","nspace"]],[35,13,["nspace"]],[35,0,["Namespace"]],""],null],""],null]],null,[["default"],[{"statements":[[2,"\\n"],[8,"data-source",[],[["@src"],[[30,[36,7],["/*/*/*/datacenters"],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,16],[[30,[36,15],[[30,[36,6],[[35,14,["dc"]],[30,[36,12],[0,[30,[36,11],["dc",[30,[36,1],null,[["Name"],[[35,13,["dc"]]]]]],null]],null]],null],[30,[36,12],[0,[30,[36,11],["dc",[30,[36,1],null,[["Name"],[[32,1,["params","dc"]]]]]],null]],null],[30,[36,1],null,[["Name"],[[30,[36,10],["CONSUL_DATACENTER_LOCAL"],null]]]]],null],[32,5,["data"]]],null,[["default"],[{"statements":[[6,[37,6],[[30,[36,9],[[30,[36,8],[[32,6,["Name","length"]],0],null],[32,7]],null]],null,[["default"],[{"statements":[[2,"\\n"],[2," "],[8,"data-source",[],[["@src"],[[30,[36,7],["/${partition}/*/${dc}/datacenter-cache/${name}",[30,[36,1],null,[["dc","partition","name"],[[32,6,["Name"]],[32,3],[32,6,["Name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,8,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"hashicorp-consul",[[24,1,"wrapper"]],[["@dcs","@dc","@partition","@nspace","@user","@onchange"],[[32,7],[32,8,["data"]],[32,3],[32,4],[30,[36,1],null,[["token"],[[35,0]]]],[30,[36,5],[[32,0],"reauthorize"],null]]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[35,4]],null,[["default","else"],[{"statements":[[2," "],[8,"app-error",[],[["@error","@login"],[[34,4],[32,9,["login","open"]]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"outlet",[],[["@name","@model"],["application",[30,[36,1],null,[["app","user","dc","dcs"],[[32,9],[30,[36,1],null,[["token"],[[35,0]]]],[32,8,["data"]],[32,7]]]]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,3],[[30,[36,2],null,null]],null]],[2,"\\n "]],"parameters":[10]}]]],[2,"\\n\\n"],[2," "],[8,"consul/loader",[[24,0,"view-loader"]],[[],[]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[8]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[6,7]}]]]],"parameters":[5]}]]],[2,"\\n"]],"parameters":[3,4]}]]]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[8,"outlet",[],[["@name","@model"],["application",[30,[36,1],null,[["user"],[[30,[36,1],null,[["token"],[[35,0]]]]]]]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,3],[[30,[36,2],null,null]],null]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["token","hash","-outlet","component","error","action","if","uri","gt","and","env","cached-model","object-at","notfound","nofound","or","let","mut","eq","can","route-action","did-insert","concat","document-attrs","array","contains","routeName","-each-in","each","not-eq"]}',meta:{moduleName:"consul-ui/templates/application.hbs"}}) -e.default=t})),define("consul-ui/templates/components/basic-dropdown-content",["exports","ember-basic-dropdown/templates/components/basic-dropdown-content"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/components/basic-dropdown-optional-tag",["exports","ember-basic-dropdown/templates/components/basic-dropdown-optional-tag"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/components/basic-dropdown-trigger",["exports","ember-basic-dropdown/templates/components/basic-dropdown-trigger"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/components/basic-dropdown",["exports","ember-basic-dropdown/templates/components/basic-dropdown"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/templates/dc",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"jdt244Ym",block:'{"symbols":["route","o"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[8,"outlet",[],[["@name","@model"],[[34,0],[32,1,["model"]]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,2],[[30,[36,1],null,null]],null]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["routeName","-outlet","component"]}',meta:{moduleName:"consul-ui/templates/dc.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"ToSP5lq3",block:'{"symbols":["route","o"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[8,"outlet",[],[["@name","@model"],[[34,0],[32,1,["model"]]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,2],[[30,[36,1],null,null]],null]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["routeName","-outlet","component"]}',meta:{moduleName:"consul-ui/templates/dc/acls.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/auth-methods/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"D0g2fM3h",block:'{"symbols":["route","loader","sort","filters","items","collection"],"statements":[[8,"route",[],[["@name"],[[34,7]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"data-loader",[],[["@src"],[[30,[36,9],["/${partition}/${nspace}/${dc}/auth-methods",[30,[36,8],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,10],[[32,2,["error","status"]],"401"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/acl/disabled",[],[[],[]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,19],[[30,[36,8],null,[["value","change"],[[30,[36,18],[[35,17],"MethodName:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,17]],null]],[["value"],["target.selected"]]]]]],[30,[36,8],null,[["kind","source","searchproperty"],[[30,[36,8],null,[["value","change"],[[30,[36,4],[[35,16],[30,[36,13],[[35,16],","],null],[29]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,16]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,8],null,[["value","change"],[[30,[36,4],[[35,15],[30,[36,13],[[35,15],","],null],[29]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,15]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,8],null,[["value","change","default"],[[30,[36,4],[[30,[36,14],[[35,12],[29]],null],[30,[36,13],[[35,12],","],null],[35,11]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,12]],null]],[["value"],["target.selectedItems"]]],[35,11]]]]]]],[32,2,["data"]]],null,[["default"],[{"statements":[[2,"\\n\\n "],[8,"app-view",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Auth Methods"]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,3],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/auth-method/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["auth-method",[32,3,["value"]],[32,4],[34,0],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/auth-method/list",[],[["@items"],[[32,6,["items"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,5],["routes.dc.auth-methods.index.empty.header"],[["items"],[[32,5,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,5],["routes.dc.auth-methods.index.empty.body"],[["items","htmlSafe"],[[32,5,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,6],["CONSUL_DOCS_URL"],null],"/security/acl/auth-methods"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Documentation on auth methods"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,6],["CONSUL_DOCS_API_URL"],null],"/acl/auth-methods.html"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the API Docs"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["search","mut","action","gt","if","t","env","routeName","hash","uri","eq","searchProperties","searchproperty","split","not-eq","source","kind","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/auth-methods/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/auth-methods/show",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"ljPKKeyW",block:'{"symbols":["route","loader","item","o"],"statements":[[8,"route",[],[["@name"],[[34,7]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,10],["/${partition}/${nspace}/${dc}/auth-method/${name}",[30,[36,2],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","id"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,11],[[32,2,["error","status"]],"401"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/acl/disabled",[],[[],[]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,12],[[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,0],["dc.acls.auth-methods"],null]],[12],[2,"All Auth Methods"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],[[32,3,["Name"]]]],null],[2,"\\n "],[13],[2,"\\n "],[8,"consul/auth-method/type",[],[["@item"],[[32,3]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["nav"]],[["default"],[{"statements":[[2,"\\n "],[8,"tab-nav",[],[["@items"],[[30,[36,6],[[30,[36,5],[[30,[36,2],null,[["label","href","selected"],["General info",[30,[36,0],["dc.acls.auth-methods.show.auth-method"],null],[30,[36,1],["dc.acls.auth-methods.show.auth-method"],null]]]],[30,[36,4],[[30,[36,3],["use nspaces"],null],[30,[36,2],null,[["label","href","selected"],["Namespace rules",[30,[36,0],["dc.acls.auth-methods.show.nspace-rules"],null],[30,[36,1],["dc.acls.auth-methods.show.nspace-rules"],null]]]],""],null],[30,[36,2],null,[["label","href","selected"],["Binding rules",[30,[36,0],["dc.acls.auth-methods.show.binding-rules"],null],[30,[36,1],["dc.acls.auth-methods.show.binding-rules"],null]]]]],null]],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"outlet",[],[["@name","@model"],[[34,7],[30,[36,2],null,[["item"],[[32,3]]]]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,9],[[30,[36,8],null,null]],null]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["href-to","is-href","hash","can","if","array","compact","routeName","-outlet","component","uri","eq","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/auth-methods/show.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/auth-methods/show/auth-method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"IJCIKqTr",block:'{"symbols":["route"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n "],[8,"consul/auth-method/view",[],[["@item"],[[32,1,["model","item"]]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["routeName"]}',meta:{moduleName:"consul-ui/templates/dc/acls/auth-methods/show/auth-method.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/auth-methods/show/binding-rules",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"TJUhzlOO",block:'{"symbols":["route","loader","items","item"],"statements":[[8,"route",[],[["@name"],[[34,6]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"data-loader",[],[["@src"],[[30,[36,8],["/${partition}/${nspace}/${dc}/binding-rules/for-auth-method/${name}",[30,[36,7],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","id"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,9],[[32,2,["data"]]],null,[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,5],[[30,[36,4],[[32,3,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[10,"p"],[12],[2,"\\n Binding rules allow an operator to express a systematic way of automatically linking roles and service identities to newly created tokens without operator intervention.\\n "],[13],[2,"\\n "],[10,"p"],[12],[2,"\\n Successful authentication with an auth method returns a set of trusted identity attributes corresponding to the authenticated identity. Those attributes are matched against all configured binding rules for that auth method to determine what privileges to grant the Consul ACL token it will ultimately create.\\n "],[13],[2,"\\n "],[10,"hr"],[12],[13],[2,"\\n"],[6,[37,3],[[30,[36,2],[[30,[36,2],[[32,3]],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/auth-method/binding-list",[],[["@item"],[[32,4]]],null],[2,"\\n "],[10,"hr"],[12],[13],[2,"\\n"]],"parameters":[4]}]]]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,0],["routes.dc.acls.auth-methods.show.binding-rules.index.empty.header"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.acls.auth-methods.show.binding-rules.index.empty.body"],[["htmlSafe"],[true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,1],["CONSUL_DOCS_API_URL"],null],"/acl/binding-rules"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the documentation"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[3]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","env","-track-array","each","gt","if","routeName","hash","uri","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/auth-methods/show/binding-rules.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/auth-methods/show/nspace-rules",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"wKhoHeez",block:'{"symbols":["route","item"],"statements":[[8,"route",[],[["@name"],[[34,6]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,7],[[32,1,["model","item"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,5],[[30,[36,4],[[32,2,["NamespaceRules","length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[10,"p"],[12],[2,"\\n A set of rules that can control which namespace tokens created via this auth method will be created within. Unlike binding rules, the first matching namespace rule wins.\\n "],[13],[2,"\\n "],[8,"consul/auth-method/nspace-list",[],[["@items"],[[32,2,["NamespaceRules"]]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,1],[[30,[36,0],[[32,1,["t"]],"empty.header"],null]],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,1],[[30,[36,0],[[32,1,["t"]],"empty.body",[30,[36,2],null,[["htmlSafe"],[true]]]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,3],["CONSUL_DOCS_API_URL"],null],"/acl/auth-methods#namespacerules"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the documentation"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[2]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["fn","compute","hash","env","gt","if","routeName","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/auth-methods/show/nspace-rules.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"EbSFMm5f",block:'{"symbols":["route"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,2],[[30,[36,1],["replaceWith","dc.acls.tokens"],null]],null]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["routeName","route-action","did-insert"]}',meta:{moduleName:"consul-ui/templates/dc/acls/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/policies/-form",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"Dodweqnu",block:'{"symbols":["execute","cancel","message","close","confirm"],"statements":[[10,"form"],[12],[2,"\\n "],[8,"policy-form",[],[["@form","@partition","@nspace","@item"],[[34,15],[34,12],[34,11],[34,3]]],[["default"],[{"statements":[[2,"\\n"],[2," "],[8,"block-slot",[],[["@name"],["template"]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,5],[[30,[36,17],[[35,16]],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,13],["/${partition}/${nspace}/${dc}/tokens/for-policy/${id}",[30,[36,1],null,[["partition","nspace","dc","id"],[[35,12],[35,11],[35,10],[30,[36,8],[[35,9],""],null]]]]],null],[30,[36,0],[[32,0],[30,[36,14],[[35,2]],null]],[["value"],["data"]]]]],null],[2,"\\n"],[6,[37,5],[[30,[36,4],[[35,2,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"token-list",[],[["@caption","@items"],["Applied to the following tokens:",[34,2]]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[10,"div"],[12],[2,"\\n"],[6,[37,5],[[30,[36,18],[[35,16],[30,[36,6],["create tokens"],null]],null]],null,[["default","else"],[{"statements":[[2," "],[11,"button"],[16,"disabled",[30,[36,5],[[30,[36,8],[[35,3,["isPristine"]],[35,3,["isInvalid"]],[30,[36,7],[[35,3,["Name"]],""],null]],null],"disabled"],null]],[24,4,"submit"],[4,[38,0],[[32,0],"create",[35,3]],null],[12],[2,"Save"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,6],["write policy"],[["item"],[[35,3]]]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[16,"disabled",[30,[36,5],[[35,3,["isInvalid"]],"disabled"],null]],[24,4,"submit"],[4,[38,0],[[32,0],"update",[35,3]],null],[12],[2,"Save"],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[11,"button"],[24,4,"reset"],[4,[38,0],[[32,0],"cancel",[35,3]],null],[12],[2,"Cancel"],[13],[2,"\\n"],[6,[37,5],[[30,[36,18],[[30,[36,17],[[35,16]],null],[30,[36,6],["delete policy"],[["item"],[[35,3]]]]],null]],null,[["default"],[{"statements":[[2," "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to delete this Policy?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"type-delete"],[24,4,"button"],[4,[38,0],[[32,0],[32,5],"delete",[35,3]],null],[12],[2,"Delete"],[13],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,4],[[35,2,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[8,"modal-dialog",[],[["@onclose","@open","@aria"],[[30,[36,0],[[32,0],[32,2]],null],true,[30,[36,1],null,[["label"],["Policy in Use"]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"Policy in Use"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This Policy is currently in use. If you choose to delete this Policy, it will be removed from the following "],[10,"strong"],[12],[1,[35,2,["length"]]],[2," Tokens"],[13],[2,":\\n "],[13],[2,"\\n "],[8,"token-list",[],[["@items","@target"],[[34,2],"_blank"]],null],[2,"\\n "],[10,"p"],[12],[2,"\\n This action cannot be undone. "],[1,[32,3]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"type-delete"],[24,4,"button"],[4,[38,0],[[32,0],[32,1]],null],[12],[2,"Yes, Delete"],[13],[2,"\\n "],[11,"button"],[24,0,"type-cancel"],[24,4,"button"],[4,[38,0],[[32,0],[32,4]],null],[12],[2,"Cancel"],[13],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"delete-confirmation",[],[["@message","@execute","@cancel"],[[32,3],[32,1],[32,2]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[1,2,3]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["action","hash","items","item","gt","if","can","eq","or","id","dc","nspace","partition","uri","mut","form","create","not","and"]}',meta:{moduleName:"consul-ui/templates/dc/acls/policies/-form.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/policies/edit",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"HjXPxbrO",block:'{"symbols":["route","loader","dc","partition","nspace","id","item","create","loader","notice"],"statements":[[8,"route",[],[["@name"],[[34,12]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,4],["/${partition}/${nspace}/${dc}/policy/${id}",[30,[36,3],null,[["partition","nspace","dc","id"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,13],[[32,1,["params","id"]],""],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,11],[[32,2,["error","status"]],"401"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/acl/disabled",[],[[],[]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,14],[[32,1,["params","dc"]],[32,1,["params","partition"]],[32,1,["params","nspace"]],[30,[36,13],[[32,1,["params","id"]],""],null],[32,2,["data"]],[32,2,["data","isNew"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,8],["dc.acls.policies"],null]],[12],[2,"All Policies"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n"],[6,[37,6],[[32,8]],null,[["default","else"],[{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["New Policy"]],null],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,6],[[30,[36,7],["write policy"],[["item"],[[32,7]]]]],null,[["default","else"],[{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["Edit Policy"]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["View Policy"]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,9],[[32,8]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"definition-table"],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Policy ID"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name","@position"],[[32,7,["ID"]],"Policy ID","top-start"]],null],[2," "],[1,[32,7,["ID"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[6,[37,6],[[30,[36,11],[[30,[36,10],[[32,7]],null],"policy-management"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"policy-management"]],[["@type"],["none"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,10,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"Management"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,10,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This global-management token is built into Consul\'s policy system. You can apply this special policy to tokens for full access. This policy is not editable or removeable, but can be ignored by not applying it to any tokens. Learn more in our "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/guides/acl.html#builtin-policies"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"documentation"],[13],[2,".\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[10]}]]],[2,"\\n "],[10,"div"],[14,0,"definition-table"],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Name"],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,7,["Name"]]],[13],[2,"\\n "],[10,"dt"],[12],[2,"Valid Datacenters"],[13],[2,"\\n "],[10,"dd"],[12],[1,[30,[36,2],[", ",[30,[36,1],[[32,7]],null]],null]],[13],[2,"\\n "],[10,"dt"],[12],[2,"Description"],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,7,["Description"]]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"data-source",[],[["@src"],[[30,[36,4],["/${partition}/${nspace}/${dc}/tokens/for-policy/${id}",[30,[36,3],null,[["partition","nspace","dc","id"],[[32,4],[32,5],[32,3],[32,6]]]]],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,5],[[32,9,["data","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"token-list",[],[["@caption","@items"],["Applied to the following tokens:",[32,9,["data"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[19,"dc/acls/policies/form",[1,2,3,4,5,6,7,8]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5,6,7,8]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":true,"upvars":["env","policy/datacenters","join","hash","uri","gt","if","can","href-to","not","policy/typeof","eq","routeName","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/policies/edit.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/policies/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"Fqeas+Q6",block:'{"symbols":["route","loader","sort","filters","items","collection"],"statements":[[8,"route",[],[["@name"],[[34,10]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,12],["/${partition}/${nspace}/${dc}/policies",[30,[36,11],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,13],[[32,2,["error","status"]],"401"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/acl/disabled",[],[[],[]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,22],[[30,[36,11],null,[["value","change"],[[30,[36,21],[[35,20],"Name:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,20]],null]],[["value"],["target.selected"]]]]]],[30,[36,11],null,[["kind","datacenter","searchproperty"],[[30,[36,11],null,[["value","change"],[[30,[36,5],[[35,19],[30,[36,16],[[35,19],","],null],[29]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,19]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,11],null,[["value","change"],[[30,[36,5],[[35,18],[30,[36,16],[[35,18],","],null],[29]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,18]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,11],null,[["value","change","default"],[[30,[36,5],[[30,[36,17],[[35,15],[29]],null],[30,[36,16],[[35,15],","],null],[35,14]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,15]],null]],[["value"],["target.selectedItems"]]],[35,14]]]]]]],[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Policies"]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,4],["create policies"],null]],null,[["default"],[{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,3],["dc.acls.policies.create"],null]]]],[14,0,"type-create"],[12],[2,"Create"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/policy/search-bar",[],[["@partition","@search","@onsearch","@sort","@filter"],[[32,1,["params","partition"]],[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["policy",[32,3,["value"]],[32,4],[34,0],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/policy/list",[],[["@items","@ondelete"],[[32,6,["items"]],[30,[36,7],["delete"],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,8],["routes.dc.acls.policies.index.empty.header"],[["items"],[[32,5,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,8],["routes.dc.acls.policies.index.empty.body"],[["items","htmlSafe"],[[32,5,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,9],["CONSUL_DOCS_URL"],null],"/commands/acl/policy"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Documentation on policies"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,9],["CONSUL_LEARN_URL"],null],"/consul/security-networking/managing-acl-policies"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Take the tutorial"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n"]],"parameters":[3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["search","mut","action","href-to","can","if","gt","route-action","t","env","routeName","hash","uri","eq","searchProperties","searchproperty","split","not-eq","datacenter","kind","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/policies/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/roles/-form",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"BgUOJM1D",block:'{"symbols":["execute","cancel","message","close","confirm","loader"],"statements":[[10,"form"],[12],[2,"\\n "],[8,"role-form",[],[["@form","@item","@dc","@nspace","@partition"],[[34,14],[34,3],[34,10],[34,11],[34,12]]],null],[2,"\\n"],[6,[37,5],[[30,[36,16],[[35,15]],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src"],[[30,[36,13],["/${partition}/${nspace}/${dc}/tokens/for-role/${id}",[30,[36,1],null,[["partition","nspace","dc","id"],[[35,12],[35,11],[35,10],[30,[36,8],[[35,9],""],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,4],[[32,6,["data","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"h2"],[12],[2,"Where is this role used?"],[13],[2,"\\n "],[10,"p"],[12],[2,"\\n We\'re only able to show information for the primary datacenter and the current datacenter. This list may not show every case where this role is applied.\\n "],[13],[2,"\\n "],[8,"token-list",[],[["@caption","@items"],["Tokens",[32,6,["data"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[6]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"div"],[12],[2,"\\n"],[6,[37,5],[[30,[36,17],[[35,15],[30,[36,6],["create roles"],null]],null]],null,[["default","else"],[{"statements":[[2," "],[11,"button"],[16,"disabled",[30,[36,5],[[30,[36,8],[[35,3,["isPristine"]],[35,3,["isInvalid"]],[30,[36,7],[[35,3,["Name"]],""],null]],null],"disabled"],null]],[24,4,"submit"],[4,[38,0],[[32,0],"create",[35,3]],null],[12],[2,"Save"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,6],["write role"],[["item"],[[35,3]]]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[16,"disabled",[30,[36,5],[[35,3,["isInvalid"]],"disabled"],null]],[24,4,"submit"],[4,[38,0],[[32,0],"update",[35,3]],null],[12],[2,"Save"],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "],[11,"button"],[24,4,"reset"],[4,[38,0],[[32,0],"cancel",[35,3]],null],[12],[2,"Cancel"],[13],[2,"\\n"],[6,[37,5],[[30,[36,17],[[30,[36,16],[[35,15]],null],[30,[36,6],["delete role"],[["item"],[[35,3]]]]],null]],null,[["default"],[{"statements":[[2," "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to delete this Role?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"type-delete"],[24,4,"button"],[4,[38,0],[[32,0],[32,5],"delete",[35,3]],null],[12],[2,"Delete"],[13],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,4],[[35,2,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[8,"modal-dialog",[],[["@onclose","@aria"],[[30,[36,0],[[32,0],[32,2]],null],[30,[36,1],null,[["label"],["Role in Use"]]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"Role in Use"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This Role is currently in use. If you choose to delete this Role, it will be removed from the following "],[10,"strong"],[12],[1,[35,2,["length"]]],[2," Tokens"],[13],[2,":\\n "],[13],[2,"\\n "],[8,"token-list",[],[["@items","@target"],[[34,2],"_blank"]],null],[2,"\\n "],[10,"p"],[12],[2,"\\n This action cannot be undone. "],[1,[32,3]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"type-delete"],[24,4,"button"],[4,[38,0],[[32,0],[32,1]],null],[12],[2,"Yes, Delete"],[13],[2,"\\n "],[11,"button"],[24,0,"type-cancel"],[24,4,"button"],[4,[38,0],[[32,0],[32,4]],null],[12],[2,"Cancel"],[13],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"delete-confirmation",[],[["@message","@execute","@cancel"],[[32,3],[32,1],[32,2]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[1,2,3]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["action","hash","items","item","gt","if","can","eq","or","id","dc","nspace","partition","uri","form","create","not","and"]}',meta:{moduleName:"consul-ui/templates/dc/acls/roles/-form.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/roles/edit",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"O1z/UWcV",block:'{"symbols":["route","loader","dc","partition","nspace","item","create"],"statements":[[8,"route",[],[["@name"],[[34,3]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,6],["/${partition}/${nspace}/${dc}/role/${id}",[30,[36,5],null,[["partition","nspace","dc","id"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,4],[[32,1,["params","id"]],""],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,7],[[32,2,["error","status"]],"401"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/acl/disabled",[],[[],[]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[32,1,["params","dc"]],[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,2,["data"]],[32,2,["data","isNew"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,0],["dc.acls.roles"],null]],[12],[2,"All Roles"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n"],[6,[37,1],[[32,7]],null,[["default","else"],[{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["New Role"]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["Edit Role"]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,1],[[30,[36,2],[[32,7]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"definition-table"],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Role ID"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name","@position"],[[32,6,["ID"]],"Role ID","top-start"]],null],[2," "],[1,[32,6,["ID"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[19,"dc/acls/roles/form",[1,2,3,4,5,6,7]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5,6,7]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":true,"upvars":["href-to","if","not","routeName","or","hash","uri","eq","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/roles/edit.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/roles/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"8C6UqAw5",block:'{"symbols":["route","loader","sort","filters","items","collection"],"statements":[[8,"route",[],[["@name","@title"],[[34,10],"Roles"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,12],["/${partition}/${nspace}/${dc}/roles",[30,[36,11],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,13],[[32,2,["error","status"]],"401"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/acl/disabled",[],[[],[]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,20],[[30,[36,11],null,[["value","change"],[[30,[36,19],[[35,18],"Name:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,18]],null]],[["value"],["target.selected"]]]]]],[30,[36,11],null,[["searchproperty"],[[30,[36,11],null,[["value","change","default"],[[30,[36,5],[[30,[36,17],[[35,15],[29]],null],[30,[36,16],[[35,15],","],null],[35,14]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,15]],null]],[["value"],["target.selectedItems"]]],[35,14]]]]]]],[32,2,["data"]]],null,[["default"],[{"statements":[[2,"\\n "],[8,"app-view",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Roles"]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,4],["create roles"],null]],null,[["default"],[{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,3],["dc.acls.roles.create"],null]]]],[14,0,"type-create"],[12],[2,"Create"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/role/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["role",[32,3,["value"]],[32,4],[34,0],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/role/list",[],[["@items","@ondelete"],[[32,6,["items"]],[30,[36,7],["delete"],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,8],["routes.dc.acls.roles.index.empty.header"],[["items"],[[32,5,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,8],["routes.dc.acls.roles.index.empty.body"],[["items","htmlSafe"],[[32,5,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,9],["CONSUL_DOCS_URL"],null],"/commands/acl/role"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Documentation on roles"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,9],["CONSUL_DOCS_API_URL"],null],"/acl/roles.html"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the API Docs"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["search","mut","action","href-to","can","if","gt","route-action","t","env","routeName","hash","uri","eq","searchProperties","searchproperty","split","not-eq","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/roles/index.hbs"}}) -e.default=t})) -define("consul-ui/templates/dc/acls/tokens/-fieldsets-legacy",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"IUa7dEzO",block:'{"symbols":["__arg0","type"],"statements":[[2," "],[10,"fieldset"],[15,"disabled",[30,[36,4],[[30,[36,10],[[30,[36,9],["write token"],[["item"],[[35,0]]]]],null],"disabled"],null]],[12],[2,"\\n "],[10,"label"],[15,0,[31,["type-text",[30,[36,4],[[35,0,["error","Name"]]," has-error"],null]]]],[12],[2,"\\n "],[10,"span"],[12],[2,"Name"],[13],[2,"\\n "],[8,"input",[],[["@value","@name","@autofocus"],[[34,0,["Description"]],"name","autofocus"]],null],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[false],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,"role","radiogroup"],[15,0,[30,[36,4],[[35,0,["error","Type"]]," has-error"],null]],[12],[2,"\\n"],[6,[37,8],[[30,[36,7],[[30,[36,7],[[30,[36,6],["management","client"],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"label"],[12],[2,"\\n "],[10,"span"],[12],[1,[30,[36,2],[[32,2]],null]],[13],[2,"\\n "],[10,"input"],[14,3,"Type"],[15,2,[31,[[32,2]]]],[15,"checked",[30,[36,4],[[30,[36,3],[[35,0,["Type"]],[32,2]],null],"checked"],null]],[15,"onchange",[30,[36,5],[[32,0],"change"],null]],[14,4,"radio"],[12],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]],[2," "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"label"],[14,0,"type-text"],[12],[2,"\\n "],[8,"code-editor",[],[["@class","@name","@syntax","@value","@onkeyup","@namedBlocksInfo"],[[30,[36,4],[[35,0,["error","Rules"]],"error"],null],"Rules","hcl",[34,0,["Rules"]],[30,[36,5],[[32,0],"change","Rules"],null],[30,[36,11],null,[["label"],[0]]]]],[["default"],[{"statements":[[6,[37,4],[[30,[36,12],[[32,1],"label"],null]],null,[["default"],[{"statements":[[2,"\\n Rules "],[10,"a"],[15,6,[31,[[30,[36,1],["CONSUL_DOCS_URL"],null],"/guides/acl.html#rule-specification"]]],[14,"rel","help noopener noreferrer"],[14,"target","_blank"],[12],[2,"(HCL Format)"],[13],[2,"\\n "]],"parameters":[]}]]]],"parameters":[1]}]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,4],[[35,13]],null,[["default"],[{"statements":[[2," "],[10,"label"],[14,0,"type-text"],[12],[2,"\\n "],[10,"span"],[12],[2,"ID"],[13],[2,"\\n "],[8,"input",[],[["@value"],[[34,0,["ID"]]]],null],[2,"\\n "],[10,"em"],[12],[2,"We\'ll generate a UUID if this field is left empty."],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n"]],"hasEval":false,"upvars":["item","env","capitalize","eq","if","action","array","-track-array","each","can","not","hash","-is-named-block-invocation","create"]}',meta:{moduleName:"consul-ui/templates/dc/acls/tokens/-fieldsets-legacy.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/tokens/-fieldsets",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"pIlDyS1J",block:'{"symbols":[],"statements":[[10,"fieldset"],[15,"disabled",[30,[36,1],[[30,[36,5],[[30,[36,4],["write token"],[["item"],[[35,3]]]]],null],"disabled"],null]],[12],[2,"\\n"],[6,[37,1],[[35,6]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"type-toggle"],[12],[2,"\\n "],[10,"label"],[12],[2,"\\n "],[10,"input"],[14,3,"Local"],[15,"checked",[30,[36,1],[[35,0],"checked"],null]],[15,"onchange",[30,[36,2],[[32,0],"change"],null]],[14,4,"checkbox"],[12],[13],[2,"\\n "],[10,"span"],[12],[2,"Restrict this token to a local datacenter?"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"em"],[12],[2,"Local tokens get set in the Raft store of the local DC and do not ever get transmitted to the primary DC or replicated to any other DC."],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"label"],[14,0,"type-text validate-optional"],[12],[2,"\\n "],[10,"span"],[12],[2,"Description (Optional)"],[13],[2,"\\n "],[10,"textarea"],[14,3,"Description"],[15,"oninput",[30,[36,2],[[32,0],"change"],null]],[12],[1,[35,3,["Description"]]],[13],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"],[10,"fieldset"],[14,1,"roles"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Roles"],[13],[2,"\\n "],[8,"role-selector",[],[["@disabled","@dc","@partition","@nspace","@items"],[[30,[36,5],[[30,[36,4],["write token"],[["item"],[[35,3]]]]],null],[34,7],[34,8],[34,9],[34,3,["Roles"]]]],null],[2,"\\n"],[13],[2,"\\n"],[10,"fieldset"],[14,1,"policies"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Policies"],[13],[2,"\\n "],[8,"policy-selector",[],[["@disabled","@dc","@partition","@nspace","@items"],[[30,[36,5],[[30,[36,4],["write token"],[["item"],[[35,3]]]]],null],[34,7],[34,8],[34,9],[34,3,["Policies"]]]],null],[2,"\\n"],[13],[2,"\\n"]],"hasEval":false,"upvars":["Local","if","action","item","can","not","create","dc","partition","nspace"]}',meta:{moduleName:"consul-ui/templates/dc/acls/tokens/-fieldsets.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/tokens/-form",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"vq0ZKeUV",block:'{"symbols":["execute","cancel","message","confirm"],"statements":[[10,"form"],[12],[2,"\\n"],[6,[37,2],[[30,[36,7],[[30,[36,4],[[35,0]],null]],null]],null,[["default","else"],[{"statements":[[2," "],[19,"dc/acls/tokens/fieldsets",[]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[19,"dc/acls/tokens/fieldsets-legacy",[]],[2,"\\n"]],"parameters":[]}]]],[2," "],[10,"div"],[12],[2,"\\n"],[6,[37,2],[[30,[36,5],[[35,8],[30,[36,3],["create tokens"],null]],null]],null,[["default","else"],[{"statements":[[2," "],[11,"button"],[16,"disabled",[30,[36,2],[[30,[36,6],[[30,[36,5],[[30,[36,4],[[35,0]],null],[35,0,["isPristine"]]],null],[35,0,["isInvalid"]]],null],"disabled"],null]],[24,4,"submit"],[4,[38,1],[[32,0],"create",[35,0]],null],[12],[2,"Save"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,3],["write token"],[["item"],[[35,0]]]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[16,"disabled",[30,[36,2],[[35,0,["isInvalid"]],"disabled"],null]],[24,4,"submit"],[4,[38,1],[[32,0],"update",[35,0]],null],[12],[2,"Save"],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n "],[11,"button"],[24,4,"reset"],[4,[38,1],[[32,0],"cancel",[35,0]],null],[12],[2,"Cancel"],[13],[2,"\\n"],[6,[37,2],[[30,[36,5],[[30,[36,7],[[35,8]],null],[30,[36,3],["delete token"],[["item","token"],[[35,0],[35,9]]]]],null]],null,[["default"],[{"statements":[[2," "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to delete this Token?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,0,"type-delete"],[24,4,"button"],[4,[38,1],[[32,0],[32,4],"delete",[35,0]],null],[12],[2,"Delete"],[13],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n "],[8,"delete-confirmation",[],[["@message","@execute","@cancel"],[[32,3],[32,1],[32,2]]],null],[2,"\\n "]],"parameters":[1,2,3]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"],[13],[2,"\\n"]],"hasEval":true,"upvars":["item","action","if","can","token/is-legacy","and","or","not","create","token"]}',meta:{moduleName:"consul-ui/templates/dc/acls/tokens/-form.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/tokens/edit",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"jGx0lf6+",block:'{"symbols":["route","loader","dc","partition","nspace","item","create","notice","execute","cancel","message","confirm"],"statements":[[8,"route",[],[["@name"],[[34,10]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,13],["/${partition}/${nspace}/${dc}/token/${id}",[30,[36,12],null,[["partition","nspace","dc","id"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,11],[[32,1,["params","id"]],""],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,0],[[30,[36,14],[[32,2,["error","status"]],"401"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/acl/disabled",[],[[],[]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,15],[[32,1,["params","dc"]],[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,2,["data"]],[32,2,["data","isNew"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,9],["dc.acls.tokens"],null]],[12],[2,"All Tokens"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n"],[6,[37,0],[[32,7]],null,[["default","else"],[{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["New Token"]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["Edit Token"]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,0],[[30,[36,1],[[32,7]],null]],null,[["default"],[{"statements":[[6,[37,0],[[30,[36,7],[[32,6,["AccessorID"]],[35,6,["AccessorID"]]],null]],null,[["default"],[{"statements":[[2," "],[8,"confirmation-dialog",[],[["@message"],["Are you sure you want to use this ACL token?"]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["action"]],[["default"],[{"statements":[[2,"\\n "],[11,"button"],[24,4,"button"],[4,[38,5],[[32,0],[32,12],"use",[32,6]],null],[12],[2,"Use"],[13],[2,"\\n "]],"parameters":[12]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["dialog"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[32,11]],[2,"\\n "],[13],[2,"\\n "],[11,"button"],[24,0,"type-delete"],[24,4,"button"],[4,[38,5],[[32,0],[32,9]],null],[12],[2,"Confirm Use"],[13],[2,"\\n "],[11,"button"],[24,0,"type-cancel"],[24,4,"button"],[4,[38,5],[[32,0],[32,10]],null],[12],[2,"Cancel"],[13],[2,"\\n "]],"parameters":[9,10,11]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[6,[37,0],[[30,[36,8],["duplicate token"],[["item"],[[32,6]]]]],null,[["default"],[{"statements":[[2," "],[11,"button"],[24,4,"button"],[4,[38,5],[[32,0],"clone",[32,6]],null],[12],[2,"Duplicate"],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,0],[[30,[36,2],[[32,6]],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[],[["@type"],["info"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"Update"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,8,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n We have upgraded our ACL system by allowing you to create reusable policies which you can then apply to tokens. Don\'t worry, even though this token was written in the old style, it is still valid. However, we do recommend upgrading your old tokens to the new style. Learn how in our "],[10,"a"],[15,6,[31,[[30,[36,4],["CONSUL_DOCS_URL"],null],"/guides/acl-migrate-tokens.html"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"documentation"],[13],[2,".\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n"]],"parameters":[]}]]],[6,[37,0],[[30,[36,1],[[32,7]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"definition-table"],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"AccessorID"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name","@position"],[[32,6,["AccessorID"]],"AccessorID","top-start"]],null],[2," "],[1,[32,6,["AccessorID"]]],[2,"\\n "],[13],[2,"\\n "],[10,"dt"],[12],[2,"Token"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[8,"copy-button",[],[["@value","@name","@position"],[[32,6,["SecretID"]],"Token","top-start"]],null],[2," "],[8,"secret-button",[],[[],[]],[["default"],[{"statements":[[1,[32,6,["SecretID"]]]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,0],[[30,[36,3],[[30,[36,1],[[30,[36,2],[[32,6]],null]],null],[30,[36,1],[[32,7]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"dt"],[12],[2,"Scope"],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,0],[[32,6,["Local"]],"local","global"],null]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[19,"dc/acls/tokens/form",[1,2,3,4,5,6,7]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5,6,7]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":true,"upvars":["if","not","token/is-legacy","and","env","action","token","not-eq","can","href-to","routeName","or","hash","uri","eq","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/tokens/edit.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/acls/tokens/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"ghj4WLgF",block:'{"symbols":["route","loader","sort","filters","items","collection","notice"],"statements":[[8,"route",[],[["@name"],[[34,11]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,13],["/${partition}/${nspace}/${dc}/tokens",[30,[36,12],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,14],[[32,2,["error","status"]],"401"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/acl/disabled",[],[[],[]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,22],[[30,[36,12],null,[["value","change"],[[30,[36,21],[[35,20],"CreateTime:desc"],null],[30,[36,3],[[32,0],[30,[36,2],[[35,20]],null]],[["value"],["target.selected"]]]]]],[30,[36,12],null,[["kind","searchproperty"],[[30,[36,12],null,[["value","change"],[[30,[36,6],[[35,19],[30,[36,17],[[35,19],","],null],[29]],null],[30,[36,3],[[32,0],[30,[36,2],[[35,19]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,12],null,[["value","change","default"],[[30,[36,6],[[30,[36,18],[[35,16],[29]],null],[30,[36,17],[[35,16],","],null],[35,15]],null],[30,[36,3],[[32,0],[30,[36,2],[[35,16]],null]],[["value"],["target.selectedItems"]]],[35,15]]]]]]],[32,2,["data"]]],null,[["default"],[{"statements":[[2,"\\n "],[8,"app-view",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Tokens"]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,5],["create tokens"],null]],null,[["default"],[{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,4],["dc.acls.tokens.create"],null]]]],[14,0,"type-create"],[12],[2,"Create"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,7],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/token/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,1],[30,[36,3],[[32,0],[30,[36,2],[[35,1]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,8],[[32,5]],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[],[["@type"],["info"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"Update"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,7,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"We have upgraded our ACL System to allow the creation of reusable policies that can be applied to tokens. Read more about the changes and how to upgrade legacy tokens in our "],[10,"a"],[15,6,[31,[[30,[36,0],["CONSUL_DOCS_URL"],null],"/guides/acl-migrate-tokens.html"]]],[14,"target","_blank"],[14,"rel","noopener noreferrer"],[12],[2,"documentation"],[13],[2,"."],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["token",[32,3,["value"]],[32,4],[34,1],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/token/list",[],[["@items","@token","@onuse","@ondelete","@onlogout","@onclone"],[[32,6,["items"]],[32,1,["model","user","token"]],[30,[36,9],["use"],null],[30,[36,9],["delete"],null],[30,[36,9],["logout"],null],[30,[36,9],["clone"],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,10],["routes.dc.acls.tokens.index.empty.header"],[["items"],[[32,5,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,10],["routes.dc.acls.tokens.index.empty.body"],[["items","htmlSafe"],[[32,5,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["env","search","mut","action","href-to","can","if","gt","token/is-legacy","route-action","t","routeName","hash","uri","eq","searchProperties","searchproperty","split","not-eq","kind","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/acls/tokens/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/intentions/edit",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"e81sBB7+",block:'{"symbols":["route","loader","item","readOnly"],"statements":[[8,"route",[],[["@name"],[[34,5]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,7],["/${partition}/${nspace}/${dc}/intention/${id}",[30,[36,3],null,[["partition","nspace","dc","id"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,6],[[32,1,["params","intention_id"]],""],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,10],[[32,2,["data"]],[30,[36,2],[[30,[36,9],["write intention"],[["item"],[[35,8]]]]],null]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,1],["dc.intentions"],null]],[12],[2,"All Intentions"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n"],[6,[37,0],[[30,[36,2],[[32,4]],null]],null,[["default","else"],[{"statements":[[6,[37,0],[[32,3,["ID"]]],null,[["default","else"],[{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["Edit Intention"]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["New Intention"]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]},{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["View Intention"]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/intention/form",[],[["@readonly","@item","@dc","@nspace","@partition","@onsubmit"],[[32,4],[32,3],[32,1,["model","dc"]],[32,1,["params","nspace"]],[32,1,["params","partition"]],[30,[36,4],["transitionTo","dc.intentions.index",[30,[36,3],null,[["dc"],[[32,1,["params","dc"]]]]]],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["if","href-to","not","hash","route-action","routeName","or","uri","item","can","let"]}',meta:{moduleName:"consul-ui/templates/dc/intentions/edit.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/intentions/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"yq7mXGuh",block:'{"symbols":["route","api","sort","filters","items","writer","collection","list"],"statements":[[8,"route",[],[["@name"],[[34,13]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,9],["/${partition}/${nspace}/${dc}/intentions",[30,[36,8],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,21],[[30,[36,8],null,[["value","change"],[[30,[36,20],[[35,19],"Action:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,19]],null]],[["value"],["target.selected"]]]]]],[30,[36,8],null,[["access","searchproperty"],[[30,[36,8],null,[["value","change"],[[30,[36,6],[[35,18],[30,[36,16],[[35,18],","],null],[29]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,18]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,8],null,[["value","change","default"],[[30,[36,6],[[30,[36,17],[[35,15],[29]],null],[30,[36,16],[[35,15],","],null],[35,14]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,15]],null]],[["value"],["target.selectedItems"]]],[35,14]]]]]]],[32,2,["data"]]],null,[["default"],[{"statements":[[2,"\\n "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Intentions"]],null],[2," "],[10,"em"],[12],[1,[30,[36,4],[[32,5,["length"]]],null]],[2," total"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,5],["create intentions"],null]],null,[["default"],[{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,3],["dc.intentions.create"],null]]]],[14,0,"type-create"],[12],[2,"Create"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,6],[[30,[36,7],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/intention/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-writer",[],[["@sink","@type","@ondelete"],[[30,[36,9],["/${partition}/${dc}/${nspace}/intention/",[30,[36,8],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null],"intention",[34,10]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["intention",[32,3,["value"]],[32,4],[34,0],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/intention/list",[],[["@items","@delete"],[[32,7,["items"]],[32,6,["delete"]]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["CustomResourceNotice"]],[],[[],[]],null],[2,"\\n "],[8,[32,8,["Table"]],[],[[],[]],null],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,7,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,11],["routes.dc.intentions.index.empty.header"],[["items"],[[32,5,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,11],["routes.dc.intentions.index.empty.body"],[["items","htmlSafe"],[[32,5,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,12],["CONSUL_DOCS_URL"],null],"/commands/intention"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Documentation on intentions"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,12],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/connect"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Take the tutorial"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n"]],"parameters":[3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["search","mut","action","href-to","format-number","can","if","gt","hash","uri","refresh-route","t","env","routeName","searchProperties","searchproperty","split","not-eq","access","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/intentions/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/kv/edit",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"3Thl/bd4",block:'{"symbols":["route","separator","parentKey","loader","dc","partition","nspace","item","parts","breadcrumb","index"],"statements":[[8,"route",[],[["@name"],[[34,23]]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,18],["/"],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,18],[[30,[36,6],[[30,[36,12],[[32,2],[30,[36,10],[0,-1,[30,[36,17],[[32,1,["params","key"]],[32,2]],null]],null]],null],[32,2]],null]],null,[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,2],["/${partition}/${nspace}/${dc}/kv/${key}",[30,[36,1],null,[["partition","nspace","dc","key"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,7],[[30,[36,24],[[35,23],"create"],null],"",[32,1,["params","key"]]],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,4,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,18],[[32,1,["params","dc"]],[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,4,["data"]]],null,[["default"],[{"statements":[[2,"\\n "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[2,"\\n "],[8,"action",[],[["@href"],[[30,[36,13],["dc.kv.index"],null]]],[["default"],[{"statements":[[2,"\\n Key / Values\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,7],[[30,[36,19],[[32,3],[32,2]],null]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,18],[[30,[36,17],[[32,3],[32,2]],null]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,16],[[30,[36,15],[[30,[36,15],[[32,9]],null]],null]],null,[["default"],[{"statements":[[6,[37,7],[[30,[36,14],[[32,10,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[2,"\\n "],[8,"action",[],[["@href"],[[30,[36,13],["dc.kv.folder",[30,[36,12],["/",[30,[36,11],[[30,[36,10],[0,[30,[36,9],[[32,11],1],null],[32,9]],null],""],null]],null]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[32,10]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[10,11]}]]]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n"],[6,[37,7],[[30,[36,20],[[32,8,["Key"]],[30,[36,19],[[32,8,["Key"]],[32,3]],null]],null]],null,[["default","else"],[{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title","@render"],["Edit Key / Value",false]],null],[2,"\\n "],[1,[30,[36,8],[[32,8,["Key"]],[32,3]],null]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title","@render"],["New Key / Value",true]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,7],[[32,8,["Session"]]],null,[["default"],[{"statements":[[2," "],[8,"consul/lock-session/notifications",[],[["@type"],["kv"]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[8,"consul/kv/form",[],[["@item","@dc","@nspace","@partition","@onsubmit","@parent"],[[32,8],[32,1,["params","dc"]],[32,1,["params","nspace"]],[32,1,["params","partition"]],[30,[36,7],[[30,[36,22],[[32,3],[32,2]],null],[30,[36,21],["dc.kv.index"],null],[30,[36,21],["dc.kv.folder",[32,3]],null]],null],[32,3]]],null],[2,"\\n\\n\\n"],[6,[37,7],[[30,[36,20],[[32,8,["Session"]]],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,2],["/${partition}/${nspace}/${dc}/sessions/for-key/${id}",[30,[36,1],null,[["partition","nspace","dc","id"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,8,["Session"]]]]]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,0]],null]],[["value"],["data"]]]]],null],[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[8,"action",[[24,"rel","help"]],[["@href","@external"],[[30,[36,6],[[30,[36,5],["CONSUL_DOCS_URL"],null],"/internals/sessions.html#session-design"],null],true]],[["default"],[{"statements":[[2,"\\n Lock Session\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"],[6,[37,7],[[35,0,["ID"]]],null,[["default"],[{"statements":[[2," "],[8,"consul/lock-session/form",[],[["@item","@ondelete"],[[34,0],[32,4,["invalidate"]]]],null],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5,6,7,8]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n"]],"parameters":[3]}]]]],"parameters":[2]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["session","hash","uri","mut","action","env","concat","if","left-trim","add","slice","append","join","href-to","gt","-track-array","each","split","let","not-eq","and","transition-to","eq","routeName","string-ends-with"]}',meta:{moduleName:"consul-ui/templates/dc/kv/edit.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/kv/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"46JF00/h",block:'{"symbols":["route","loader","sort","filters","parent","items","writer","collection","breadcrumb","index","after","notice","notice","notice"],"statements":[[8,"route",[],[["@name"],[[34,25]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,20],["/${partition}/${nspace}/${dc}/kv/${key}",[30,[36,19],null,[["partition","nspace","dc","key"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,26],[[32,1,["params","key"]],"/"],null]]]]],null],[30,[36,5],[[32,0],[30,[36,4],[[35,27]],null]],[["value"],["data"]]]]],null],[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,20],["/${partition}/${nspace}/${dc}/kvs/${key}",[30,[36,19],null,[["partition","nspace","dc","key"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,26],[[32,1,["params","key"]],"/"],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["disconnected"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,2],[[30,[36,16],[[32,2,["error","status"]],"404"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,24],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,14,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,14,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This KV or parent of this KV was deleted.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,16],[[32,2,["error","status"]],"403"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,24],null,[["sticky"],[true]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,13,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Error!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,13,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n You no longer have access to this KV.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[13]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,24],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,12,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,12,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n An error was returned whilst loading this data, refresh to try again.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[12]}]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[11]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,30],[[30,[36,19],null,[["value","change"],[[30,[36,26],[[35,29],"Kind:asc"],null],[30,[36,5],[[32,0],[30,[36,4],[[35,29]],null]],[["value"],["target.selected"]]]]]],[30,[36,19],null,[["kind"],[[30,[36,19],null,[["value","change"],[[30,[36,2],[[35,28],[30,[36,6],[[35,28],","],null],[29]],null],[30,[36,5],[[32,0],[30,[36,4],[[35,28]],null]],[["value"],["target.selectedItems"]]]]]]]]],[35,27],[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,5,["Key"]],"/"],null]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,0],["dc.kv"],null]],[12],[2,"Key / Values"],[13],[13],[2,"\\n"],[6,[37,15],[[30,[36,14],[[30,[36,14],[[30,[36,11],[0,-2,[30,[36,6],[[32,5,["Key"]],"/"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,0],["dc.kv.folder",[30,[36,13],["/",[30,[36,12],[[30,[36,11],[0,[30,[36,10],[[32,10],1],null],[30,[36,6],[[32,5,["Key"]],"/"],null]],null],""],null]],null]],null]],[12],[1,[32,9]],[13],[13],[2,"\\n"]],"parameters":[9,10]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n"],[6,[37,2],[[30,[36,16],[[32,5,["Key"]],"/"],null]],null,[["default","else"],[{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],["Key / Value"]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,[32,1,["Title"]],[],[["@title"],[[30,[36,9],[1,[30,[36,8],[1,[30,[36,7],[[30,[36,6],[[32,5,["Key"]],"/"],null]],null]],null]],null]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,2],[[30,[36,17],[[32,6,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/kv/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,3],[30,[36,5],[[32,0],[30,[36,4],[[35,3]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,2],[[30,[36,18],["create kvs"],null]],null,[["default"],[{"statements":[[6,[37,2],[[30,[36,1],[[32,5,["Key"]],"/"],null]],null,[["default","else"],[{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,0],["dc.kv.create",[32,5,["Key"]]],null]]]],[14,0,"type-create"],[12],[2,"Create"],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,0],["dc.kv.root-create"],null]]]],[14,0,"type-create"],[12],[2,"Create"],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-writer",[],[["@sink","@type","@label","@ondelete"],[[30,[36,20],["/${partition}/${nspace}/${dc}/kv/",[30,[36,19],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null],"kv","key",[34,21]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["kv",[32,3,["value"]],[32,4],[34,3],[32,6]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/kv/list",[],[["@items","@parent","@delete"],[[32,8,["items"]],[32,5],[32,7,["delete"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,8,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,22],["routes.dc.kv.index.empty.header"],[["items"],[[32,6,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,22],["routes.dc.kv.index.empty.body"],[["items","htmlSafe"],[[32,6,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,23],["CONSUL_DOCS_URL"],null],"/agent/kv"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Documentation on K/V"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,23],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/kv"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Take the tutorial"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["href-to","not-eq","if","search","mut","action","split","reverse","drop","take","add","slice","append","join","-track-array","each","eq","gt","can","hash","uri","refresh-route","t","env","notification","routeName","or","parent","kind","sortBy","let"]}',meta:{moduleName:"consul-ui/templates/dc/kv/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nodes/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"C5bHf0Hx",block:'{"symbols":["route","leader","api","sort","filters","items","leader","collection"],"statements":[[8,"route",[],[["@name"],[[34,7]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"data-source",[],[["@src"],[[30,[36,9],["/${partition}/${nspace}/${dc}/leader",[30,[36,8],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"data-loader",[],[["@src"],[[30,[36,9],["/${partition}/${nspace}/${dc}/nodes",[30,[36,8],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,3,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,17],[[30,[36,8],null,[["value","change"],[[30,[36,16],[[35,15],"Status:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,15]],null]],[["value"],["target.selected"]]]]]],[30,[36,8],null,[["status","searchproperty"],[[30,[36,8],null,[["value","change"],[[30,[36,5],[[35,14],[30,[36,12],[[35,14],","],null],[29]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,14]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,8],null,[["value","change","default"],[[30,[36,5],[[30,[36,13],[[35,11],[29]],null],[30,[36,12],[[35,11],","],null],[35,10]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,11]],null]],[["value"],["target.selectedItems"]]],[35,10]]]]]]],[32,3,["data"]],[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Nodes"]],null],[2," "],[10,"em"],[12],[1,[30,[36,3],[[32,6,["length"]]],null]],[2," total"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,4],[[32,6,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/node/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,4],[32,5]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["node",[32,4,["value"]],[32,5],[34,0],[32,6]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/node/list",[],[["@items","@leader"],[[32,8,["items"]],[32,7]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,8,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,6],["routes.dc.nodes.index.empty.header"],[["items"],[[32,6,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,6],["routes.dc.nodes.index.empty.body"],[["items","htmlSafe"],[[32,6,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[4,5,6,7]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n "]],"parameters":[1]}]]]],"hasEval":false,"upvars":["search","mut","action","format-number","gt","if","t","routeName","hash","uri","searchProperties","searchproperty","split","not-eq","status","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/nodes/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nodes/show",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"AGs+VtxL",block:'{"symbols":["route","tomography","loader","item","tomography","o","status","type","after","notice","notice","notice"],"statements":[[8,"route",[],[["@name"],[[34,8]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src"],[[30,[36,14],["/${partition}/${nspace}/${dc}/coordinates/for-node/${name}",[30,[36,3],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,14],["/${partition}/${nspace}/${dc}/node/${name}",[30,[36,3],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,3,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["disconnected"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,13],[[32,3,["error","status"]],"404"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,12],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,12,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,12,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This node no longer exists in the catalog.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[12]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,5],[[30,[36,13],[[32,3,["error","status"]],"403"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,12],null,[["sticky"],[true]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,11,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Error!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,11,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n You no longer have access to this node\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[11]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,12],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,10,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,10,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n An error was returned whilst loading this data, refresh to try again.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[10]}]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[9]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,15],[[32,3,["data"]],[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["notification"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/lock-session/notifications",[],[["@type","@status"],[[32,8],[32,7]]],null],[2,"\\n "]],"parameters":[7,8]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,0],["dc.nodes"],null]],[12],[2,"All Nodes"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],[[32,4,["Node"]]]],null],[2,"\\n "],[13],[2,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["nav"]],[["default"],[{"statements":[[2,"\\n "],[8,"tab-nav",[],[["@items"],[[30,[36,7],[[30,[36,6],[[30,[36,3],null,[["label","href","selected"],[[30,[36,2],["routes.dc.nodes.show.healthchecks.title"],null],[30,[36,0],["dc.nodes.show.healthchecks"],null],[30,[36,1],["dc.nodes.show.healthchecks"],null]]]],[30,[36,3],null,[["label","href","selected"],[[30,[36,2],["routes.dc.nodes.show.services.title"],null],[30,[36,0],["dc.nodes.show.services"],null],[30,[36,1],["dc.nodes.show.services"],null]]]],[30,[36,5],[[32,5,["distances"]],[30,[36,3],null,[["label","href","selected"],[[30,[36,2],["routes.dc.nodes.show.rtt.title"],null],[30,[36,0],["dc.nodes.show.rtt"],null],[30,[36,1],["dc.nodes.show.rtt"],null]]]],""],null],[30,[36,5],[[30,[36,4],["read sessions"],null],[30,[36,3],null,[["label","href","selected"],[[30,[36,2],["routes.dc.nodes.show.sessions.title"],null],[30,[36,0],["dc.nodes.show.sessions"],null],[30,[36,1],["dc.nodes.show.sessions"],null]]]],""],null],[30,[36,3],null,[["label","href","selected"],[[30,[36,2],["routes.dc.nodes.show.metadata.title"],null],[30,[36,0],["dc.nodes.show.metadata"],null],[30,[36,1],["dc.nodes.show.metadata"],null]]]]],null]],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,"copy-button",[],[["@value","@name"],[[32,4,["Address"]],"Address"]],[["default"],[{"statements":[[1,[32,4,["Address"]]]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"outlet",[],[["@name","@model"],[[34,8],[30,[36,9],[[30,[36,3],null,[["item","tomography"],[[32,4],[32,5]]]],[32,1,["model"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,11],[[30,[36,10],null,null]],null]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["href-to","is-href","t","hash","can","if","array","compact","routeName","assign","-outlet","component","notification","eq","uri","let"]}',meta:{moduleName:"consul-ui/templates/dc/nodes/show.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nodes/show/healthchecks",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"bJw4npZ1",block:'{"symbols":["route","sort","filters","items","collection","serf","notice"],"statements":[[8,"route",[],[["@name"],[[34,10]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,9],[[30,[36,15],null,[["value","change"],[[30,[36,20],[[35,19],"Status:asc"],null],[30,[36,6],[[32,0],[30,[36,5],[[35,19]],null]],[["value"],["target.selected"]]]]]],[30,[36,15],null,[["status","kind","check","searchproperty"],[[30,[36,15],null,[["value","change"],[[30,[36,3],[[35,18],[30,[36,13],[[35,18],","],null],[29]],null],[30,[36,6],[[32,0],[30,[36,5],[[35,18]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,15],null,[["value","change"],[[30,[36,3],[[35,17],[30,[36,13],[[35,17],","],null],[29]],null],[30,[36,6],[[32,0],[30,[36,5],[[35,17]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,15],null,[["value","change"],[[30,[36,3],[[35,16],[30,[36,13],[[35,16],","],null],[29]],null],[30,[36,6],[[32,0],[30,[36,5],[[35,16]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,15],null,[["value","change","default"],[[30,[36,3],[[30,[36,14],[[35,12],[29]],null],[30,[36,13],[[35,12],","],null],[35,11]],null],[30,[36,6],[[32,0],[30,[36,5],[[35,12]],null]],[["value"],["target.selectedItems"]]],[35,11]]]]]]],[32,1,["model","item","Checks"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,3],[[30,[36,7],[[32,4,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[2,"\\n "],[8,"consul/health-check/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,4],[30,[36,6],[[32,0],[30,[36,5],[[35,4]],null]],[["value"],["target.value"]]],[32,2],[32,3]]],null],[2,"\\n"]],"parameters":[]}]]],[6,[37,9],[[30,[36,8],["Type","serf",[32,4]],null]],null,[["default"],[{"statements":[[6,[37,3],[[30,[36,2],[[32,6],[30,[36,1],[[32,6,["Status"]],"critical"],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,0],["routes.dc.nodes.show.healthchecks.critical-serf-notice.header"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,7,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.nodes.show.healthchecks.critical-serf-notice.body"],[["htmlSafe"],[true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[6]}]]],[2," "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["health-check",[32,2,["value"]],[32,3],[34,4],[32,4]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/health-check/list",[],[["@items"],[[32,5,["items"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.nodes.show.healthchecks.empty"],[["items","htmlSafe"],[[32,4,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2,3,4]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["t","eq","and","if","search","mut","action","gt","find-by","let","routeName","searchProperties","searchproperty","split","not-eq","hash","check","kind","status","sortBy","or"]}',meta:{moduleName:"consul-ui/templates/dc/nodes/show/healthchecks.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nodes/show/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"m12qfaqn",block:'{"symbols":["route"],"statements":[[8,"route",[],[["@name"],[[34,2]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,3],[[32,1,["model","item","Checks","length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],[[30,[36,0],["replaceWith","dc.nodes.show.services"],null]],null]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[1,[30,[36,1],[[30,[36,0],["replaceWith","dc.nodes.show.healthchecks"],null]],null]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["route-action","did-insert","routeName","eq","if"]}',meta:{moduleName:"consul-ui/templates/dc/nodes/show/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nodes/show/metadata",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"etmR4DHA",block:'{"symbols":["route"],"statements":[[8,"route",[],[["@name"],[[34,1]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,2],[[32,1,["model","item","Meta"]]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/metadata/list",[],[["@items"],[[30,[36,0],[[32,1,["model","item","Meta"]]],null]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This node has no metadata.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["entries","routeName","if"]}',meta:{moduleName:"consul-ui/templates/dc/nodes/show/metadata.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nodes/show/rtt",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"P8rIllxs",block:'{"symbols":["route","tomography"],"statements":[[8,"route",[],[["@name"],[[34,5]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,1,["model","tomography"]]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,2,["distances"]]],null]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,2],[[30,[36,1],["replaceWith","dc.nodes.show"],null]],null]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n "],[10,"div"],[14,0,"definition-table"],[12],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n Minimum\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,0],[[32,2,["min"]]],[["maximumFractionDigits"],[2]]]],[2,"ms\\n "],[13],[2,"\\n "],[10,"dt"],[12],[2,"\\n Median\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,0],[[32,2,["median"]]],[["maximumFractionDigits"],[2]]]],[2,"ms\\n "],[13],[2,"\\n "],[10,"dt"],[12],[2,"\\n Maximum\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,0],[[32,2,["max"]]],[["maximumFractionDigits"],[2]]]],[2,"ms\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"consul/tomography/graph",[],[["@distances"],[[32,2,["distances"]]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[2]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["format-number","route-action","did-insert","not","if","routeName","let"]}',meta:{moduleName:"consul-ui/templates/dc/nodes/show/rtt.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nodes/show/services",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"2fksFjAV",block:'{"symbols":["route","sort","filters","items","proxies","collection"],"statements":[[8,"route",[],[["@name"],[[34,9]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,18],[[30,[36,13],null,[["value","change"],[[30,[36,17],[[35,16],"Status:asc"],null],[30,[36,4],[[32,0],[30,[36,3],[[35,16]],null]],[["value"],["target.selected"]]]]]],[30,[36,13],null,[["status","source","searchproperty"],[[30,[36,13],null,[["value","change"],[[30,[36,7],[[35,15],[30,[36,11],[[35,15],","],null],[29]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,15]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,13],null,[["value","change"],[[30,[36,7],[[35,14],[30,[36,11],[[35,14],","],null],[29]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,14]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,13],null,[["value","change","default"],[[30,[36,7],[[30,[36,12],[[35,10],[29]],null],[30,[36,11],[[35,10],","],null],[35,5]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,10]],null]],[["value"],["target.selectedItems"]]],[35,5]]]]]]],[32,1,["model","item","MeshServiceInstances"]],[32,1,["model","item","ProxyServiceInstances"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,7],[[30,[36,6],[[32,4,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[2,"\\n "],[8,"consul/service-instance/search-bar",[],[["@sources","@search","@onsearch","@searchproperties","@sort","@filter"],[[30,[36,1],[[30,[36,0],[[32,4]],null],"ExternalSources"],null],[34,2],[30,[36,4],[[32,0],[30,[36,3],[[35,2]],null]],[["value"],["target.value"]]],[34,5],[32,2],[32,3]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["service-instance",[32,2,["value"]],[32,3],[34,2],[32,4]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/service-instance/list",[],[["@node","@routeName","@items","@proxies"],[[32,1,["model","item"]],"dc.services.show",[32,6,["items"]],[32,5]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,8],["routes.dc.nodes.show.services.empty"],[["items","htmlSafe"],[[32,4,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2,3,4,5]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["collection","get","search","mut","action","searchProperties","gt","if","t","routeName","searchproperty","split","not-eq","hash","source","status","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/nodes/show/services.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nodes/show/sessions",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"FSj+j5r9",block:'{"symbols":["route","api","items","writer","collection","after","error","after"],"statements":[[8,"route",[],[["@name"],[[34,7]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,1],["/${partition}/${nspace}/${dc}/sessions/for-node/${node}",[30,[36,0],null,[["partition","nspace","dc","node"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n "],[8,"data-writer",[],[["@sink","@type","@label","@ondelete"],[[30,[36,1],["/${partition}/${dc}/${nspace}/session/",[30,[36,0],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null],"session","Lock Session",[34,2]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["removed"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/lock-session/notifications",[[4,[38,4],null,[["after"],[[30,[36,3],[[32,0],[32,8]],null]]]]],[["@type"],["remove"]],null],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/lock-session/notifications",[[4,[38,4],null,[["after"],[[30,[36,3],[[32,0],[32,6]],null]]]]],[["@type","@error"],["remove",[32,7]]],null],[2,"\\n "]],"parameters":[6,7]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"data-collection",[],[["@type","@items"],["session",[32,3]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,[32,5,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/lock-session/list",[],[["@items","@ondelete"],[[32,5,["items"]],[32,4,["delete"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,[32,5,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,5],["routes.dc.nodes.show.sessions.empty.header"],[["items"],[[32,3,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,5],["routes.dc.nodes.show.sessions.empty.body"],[["htmlSafe"],[true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[8,"action",[],[["@href","@external"],[[31,[[30,[36,6],["CONSUL_DOCS_URL"],null],"/internals/sessions.html"]],true]],[["default"],[{"statements":[[2,"\\n Documentation on Lock Sessions\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[8,"action",[],[["@href","@external"],[[31,[[30,[36,6],["CONSUL_DOCS_LEARN_URL"],null],"/tutorials/consul/distributed-semaphore"]],true]],[["default"],[{"statements":[[2,"\\n Take the tutorial\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "]],"parameters":[5]}]]],[2,"\\n\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[3]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["hash","uri","refresh-route","action","notification","t","env","routeName","let"]}',meta:{moduleName:"consul-ui/templates/dc/nodes/show/sessions.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nspaces/edit",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"vtIZmmQj",block:'{"symbols":["route","loader","dc","partition","nspace","item","create"],"statements":[[8,"route",[],[["@name"],[[34,4]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,7],["/${partition}/${nspace}/${dc}/namespace/${id}",[30,[36,6],null,[["partition","nspace","dc","id"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,5],[[32,1,["params","name"]],""],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[32,1,["params","dc"]],[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,2,["data"]],[32,2,["data","isNew"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,0],["dc.nspaces"],null]],[12],[2,"All Namespaces"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],[[30,[36,2],[[32,7],"New Namespace",[30,[36,1],["Edit ",[32,6,["Name"]]],null]],null]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/nspace/form",[],[["@item","@dc","@nspace","@partition","@onsubmit"],[[32,6],[32,1,["params","dc"]],[32,1,["params","nspace"]],[32,1,["params","partition"]],[30,[36,3],["dc.nspaces.index"],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5,6,7]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["href-to","concat","if","transition-to","routeName","or","hash","uri","let"]}',meta:{moduleName:"consul-ui/templates/dc/nspaces/edit.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/nspaces/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"0ldYIvBg",block:'{"symbols":["route","loader","sort","filters","items","writer","collection","after"],"statements":[[8,"route",[],[["@name"],[[34,12]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,8],["/${partition}/${nspace}/${dc}/namespaces",[30,[36,7],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,19],[[30,[36,7],null,[["value","change"],[[30,[36,18],[[35,17],"Name:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,17]],null]],[["value"],["target.selected"]]]]]],[30,[36,7],null,[["searchproperty"],[[30,[36,7],null,[["value","change","default"],[[30,[36,5],[[30,[36,16],[[35,14],[29]],null],[30,[36,15],[[35,14],","],null],[35,13]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,14]],null]],[["value"],["target.selectedItems"]]],[35,13]]]]]]],[32,2,["data"]]],null,[["default"],[{"statements":[[2,"\\n "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Namespaces"]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,4],["create nspaces"],null]],null,[["default"],[{"statements":[[2," "],[10,"a"],[15,6,[31,[[30,[36,3],["dc.nspaces.create"],null]]]],[14,0,"type-create"],[12],[2,"Create"],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/nspace/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-writer",[],[["@sink","@type","@label","@ondelete"],[[30,[36,8],["/${partition}/${dc}/${nspace}/nspace/",[30,[36,7],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null],"nspace","Namespace",[34,9]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["removed"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/nspace/notifications",[[4,[38,10],null,[["after"],[[30,[36,2],[[32,0],[32,8]],null]]]]],[["@type"],["remove"]],null],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["nspace",[32,3,["value"]],[32,4],[34,0],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/nspace/list",[],[["@items","@ondelete"],[[32,7,["items"]],[32,6,["delete"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,7,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,5,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," No namespaces found\\n"]],"parameters":[]},{"statements":[[2," Welcome to Namespaces\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,5,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," No namespaces where found matching that search, or you may not have access to view the namespaces you are searching for.\\n"]],"parameters":[]},{"statements":[[2," There don\'t seem to be any namespaces, or you may not have access to view namespaces yet.\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,11],["CONSUL_DOCS_URL"],null],"/commands/namespace"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Documentation on namespaces"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,11],["CONSUL_DOCS_LEARN_URL"],null],"/consul/namespaces/secure-namespaces"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Read the guide"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["search","mut","action","href-to","can","if","gt","hash","uri","refresh-route","notification","env","routeName","searchProperties","searchproperty","split","not-eq","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/nspaces/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/partitions/edit",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"ENp7Mr/r",block:'{"symbols":["route","loader","dc","partition","nspace","item"],"statements":[[8,"route",[],[["@name"],[[34,5]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,8],["/${partition}/${nspace}/${dc}/partition/${id}",[30,[36,7],null,[["partition","nspace","dc","id"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,6],[[32,1,["params","name"]],""],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,9],[[32,1,["params","dc"]],[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,0],["dc.partitions"],null]],[12],[2,"All Admin Partitions"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],[[30,[36,3],[[30,[36,2],["new partition"],[["item"],[[32,6]]]],"New Partition",[30,[36,1],["Edit ",[32,6,["Name"]]],null]],null]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"consul/partition/form",[],[["@item","@dc","@nspace","@partition","@onsubmit"],[[32,6],[32,1,["params","dc"]],[32,1,["params","nspace"]],[32,1,["params","partition"]],[30,[36,4],["dc.partitions.index"],null]]],null],[2,"\\n\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["href-to","concat","is","if","transition-to","routeName","or","hash","uri","let"]}',meta:{moduleName:"consul-ui/templates/dc/partitions/edit.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/partitions/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"noxbZ0Vh",block:'{"symbols":["route","loader","sort","filters","items","writer","collection","after"],"statements":[[8,"route",[],[["@name"],[[34,12]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,8],["/${partition}/${nspace}/${dc}/partitions",[30,[36,7],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,19],[[30,[36,7],null,[["value","change"],[[30,[36,18],[[35,17],"Name:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,17]],null]],[["value"],["target.selected"]]]]]],[30,[36,7],null,[["searchproperty"],[[30,[36,7],null,[["value","change","default"],[[30,[36,5],[[30,[36,16],[[35,14],[29]],null],[30,[36,15],[[35,14],","],null],[35,13]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,14]],null]],[["value"],["target.selectedItems"]]],[35,13]]]]]]],[32,2,["data"]]],null,[["default"],[{"statements":[[2,"\\n "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Admin Partitions"]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,4],["create partitions"],null]],null,[["default"],[{"statements":[[2," "],[10,"a"],[14,0,"type-create"],[15,6,[31,[[30,[36,3],["dc.partitions.create"],null]]]],[12],[2,"\\n Create\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/partition/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-writer",[],[["@sink","@type","@label","@ondelete"],[[30,[36,8],["/${partition}/${dc}/${nspace}/partition/",[30,[36,7],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null],"partition","Partition",[34,9]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["removed"]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/partition/notifications",[[4,[38,10],null,[["after"],[[30,[36,2],[[32,0],[32,8]],null]]]]],[["@type"],["remove"]],null],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["nspace",[32,3,["value"]],[32,4],[34,0],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/partition/list",[],[["@items","@ondelete"],[[32,7,["items"]],[32,6,["delete"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,7,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,5,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," No partitions found\\n"]],"parameters":[]},{"statements":[[2," Welcome to Partitions\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n"],[6,[37,5],[[30,[36,6],[[32,5,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," No partitions where found matching that search, or you may not have access to view the namespaces you are searching for.\\n"]],"parameters":[]},{"statements":[[2," There don\'t seem to be any partitions, or you may not have access to view partitions yet.\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[8,"action",[],[["@href","@external"],[[31,[[30,[36,11],["CONSUL_DOCS_URL"],null],"/enterprise/admin-partitions"]],true]],[["default"],[{"statements":[[2,"\\n Documentation on Admin Partitions\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["search","mut","action","href-to","can","if","gt","hash","uri","refresh-route","notification","env","routeName","searchProperties","searchproperty","split","not-eq","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/partitions/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/routing-config",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"mrMbnEYc",block:'{"symbols":["route","loader","item"],"statements":[[8,"route",[],[["@name"],[[34,2]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"data-loader",[],[["@src"],[[30,[36,4],["/${partition}/${nspace}/${dc}/discovery-chain/${name}",[30,[36,3],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[32,2,["data"]]],null,[["default"],[{"statements":[[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,0],["dc.services"],null]],[12],[2,"All Services"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],[[32,3,["Chain","ServiceName"]]]],null],[2,"\\n "],[13],[2,"\\n "],[8,"consul/source",[],[["@source","@withInfo"],[[30,[36,1],["routes.dc.routing-config.source"],null],true]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"container"],[12],[2,"\\n "],[8,"consul/discovery-chain",[],[["@chain"],[[32,3,["Chain"]]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["href-to","t","routeName","hash","uri","let"]}',meta:{moduleName:"consul-ui/templates/dc/routing-config.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"LK9P+jx5",block:'{"symbols":["route","api","sort","filters","items","partition","nspace","collection","items"],"statements":[[8,"route",[],[["@name"],[[34,11]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"data-loader",[],[["@src"],[[30,[36,13],["/${partition}/${nspace}/${dc}/services",[30,[36,12],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,5],[[30,[36,12],null,[["value","change"],[[30,[36,14],[[35,23],"Status:asc"],null],[30,[36,3],[[32,0],[30,[36,2],[[35,23]],null]],[["value"],["target.selected"]]]]]],[30,[36,12],null,[["status","kind","source","searchproperty"],[[30,[36,12],null,[["value","change"],[[30,[36,8],[[35,22],[30,[36,18],[[35,22],","],null],[29]],null],[30,[36,3],[[32,0],[30,[36,2],[[35,22]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,12],null,[["value","change"],[[30,[36,8],[[35,21],[30,[36,18],[[35,21],","],null],[29]],null],[30,[36,3],[[32,0],[30,[36,2],[[35,21]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,12],null,[["value","change"],[[30,[36,8],[[35,20],[30,[36,18],[[35,20],","],null],[29]],null],[30,[36,3],[[32,0],[30,[36,2],[[35,20]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,12],null,[["value","change","default"],[[30,[36,8],[[30,[36,19],[[35,17],[29]],null],[30,[36,18],[[35,17],","],null],[35,16]],null],[30,[36,3],[[32,0],[30,[36,2],[[35,17]],null]],[["value"],["target.selectedItems"]]],[35,16]]]]]]],[30,[36,15],["Kind","connect-proxy",[32,2,["data"]]],null],[30,[36,14],[[32,1,["params","partition"]],[32,1,["model","user","token","Partition"]],"default"],null],[30,[36,14],[[32,1,["params","nspace"]],[32,1,["model","user","token","Namespace"]],"default"],null]],null,[["default"],[{"statements":[[2,"\\n "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Services"]],null],[2," "],[10,"em"],[12],[1,[30,[36,6],[[32,5,["length"]]],null]],[2," total"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"label"],[14,"for","toolbar-toggle"],[12],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[30,[36,7],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[6,[37,5],[[30,[36,4],[[32,5]],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/service/search-bar",[],[["@sources","@partitions","@partition","@search","@onsearch","@sort","@filter"],[[30,[36,0],[[32,9],"ExternalSources"],null],[30,[36,0],[[32,9],"Partitions"],null],[32,6],[34,1],[30,[36,3],[[32,0],[30,[36,2],[[35,1]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[9]}]]]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["service",[32,3,["value"]],[32,4],[34,1],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/service/list",[],[["@items","@partition"],[[32,8,["items"]],[32,6]]],[["default"],[{"statements":[[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,8,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,9],["routes.dc.services.index.empty.header"],[["items"],[[32,5,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,9],["routes.dc.services.index.empty.body"],[["items","htmlSafe"],[[32,5,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[8,"action",[],[["@href","@external"],[[31,[[30,[36,10],["CONSUL_DOCS_URL"],null],"/commands/services"]],true]],[["default"],[{"statements":[[2,"\\n Documentation on Services\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[8,"action",[],[["@href","@external"],[[31,[[30,[36,10],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/services"]],true]],[["default"],[{"statements":[[2,"\\n Take the tutorial\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "]],"parameters":[]}]]],[2,"\\n\\n"]],"parameters":[3,4,5,6,7]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["get","search","mut","action","collection","let","format-number","gt","if","t","env","routeName","hash","uri","or","reject-by","searchProperties","searchproperty","split","not-eq","source","kind","status","sortBy"]}',meta:{moduleName:"consul-ui/templates/dc/services/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/instance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"N+/8UsgU",block:'{"symbols":["route","loader","item","o","address","meta","after","notice","notice","notice"],"statements":[[8,"route",[],[["@name"],[[34,14]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,1],["/${partition}/${nspace}/${dc}/service-instance/${id}/${node}/${name}",[30,[36,0],null,[["partition","nspace","dc","id","node","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","id"]],[32,1,["params","node"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["disconnected"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[30,[36,8],[[32,2,["error","status"]],"404"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,18],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,10,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,10,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This service has been deregistered and no longer exists in the catalog.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[10]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,6],[[30,[36,8],[[32,2,["error","status"]],"403"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,18],null,[["sticky"],[true]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,9,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Error!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,9,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n You no longer have access to this service\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,18],null,[["sticky"],[true]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,8,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n An error was returned whilst loading this data, refresh to try again.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[7]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,10],[[32,2,["data"]]],null,[["default"],[{"statements":[[6,[37,6],[[32,3,["IsOrigin"]]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,1],["/${partition}/${nspace}/${dc}/proxy-instance/${id}/${node}/${name}",[30,[36,0],null,[["partition","nspace","dc","id","node","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","id"]],[32,1,["params","node"]],[32,1,["params","name"]]]]]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,5]],null]],[["value"],["data"]]]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,6],[[32,6,["data","ServiceID"]]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,1],["/${partition}/${nspace}/${dc}/service-instance/${id}/${node}/${name}",[30,[36,0],null,[["partition","nspace","dc","id","node","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,6,["data","ServiceID"]],[32,6,["data","NodeName"]],[32,6,["data","ServiceName"]]]]]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,2]],null]],[["value"],["data"]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[6]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,7],["dc.services"],null]],[12],[2,"All Services"],[13],[13],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,7],["dc.services.show"],null]],[12],[2,"Service ("],[1,[32,3,["Service","Service"]]],[2,")"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],[[32,3,["Service","ID"]]]],null],[2,"\\n "],[13],[2,"\\n "],[8,"consul/external-source",[],[["@item","@withInfo"],[[32,3],true]],null],[2,"\\n "],[8,"consul/kind",[],[["@item","@withInfo"],[[32,3],true]],null],[2,"\\n"],[6,[37,6],[[30,[36,8],[[35,5,["ServiceProxy","Mode"]],"transparent"],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/transparent-proxy",[],[[],[]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["nav"]],[["default"],[{"statements":[[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Service Name"],[13],[2,"\\n "],[10,"dd"],[12],[10,"a"],[15,6,[31,[[30,[36,7],["dc.services.show",[32,3,["Service","Service"]]],null]]]],[12],[1,[32,3,["Service","Service"]]],[13],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[12],[2,"Node Name"],[13],[2,"\\n "],[10,"dd"],[12],[10,"a"],[15,6,[31,[[30,[36,7],["dc.nodes.show",[32,3,["Node","Node"]]],null]]]],[12],[1,[32,3,["Node","Node"]]],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,10],[[30,[36,9],[[32,3,["Service","Address"]],[32,3,["Node","Address"]]],null]],null,[["default"],[{"statements":[[2," "],[8,"copy-button",[],[["@value","@name"],[[32,5],"Address"]],[["default"],[{"statements":[[1,[32,5]]],"parameters":[]}]]],[2,"\\n"]],"parameters":[5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"tab-nav",[],[["@items"],[[30,[36,13],[[30,[36,12],[[30,[36,0],null,[["label","href","selected"],["Health Checks",[30,[36,7],["dc.services.instance.healthchecks"],null],[30,[36,11],["dc.services.instance.healthchecks"],null]]]],[30,[36,6],[[30,[36,8],[[32,3,["Service","Kind"]],"mesh-gateway"],null],[30,[36,0],null,[["label","href","selected"],["Addresses",[30,[36,7],["dc.services.instance.addresses"],null],[30,[36,11],["dc.services.instance.addresses"],null]]]]],null],[30,[36,6],[[35,2],[30,[36,0],null,[["label","href","selected"],["Upstreams",[30,[36,7],["dc.services.instance.upstreams"],null],[30,[36,11],["dc.services.instance.upstreams"],null]]]]],null],[30,[36,6],[[35,2],[30,[36,0],null,[["label","href","selected"],["Exposed Paths",[30,[36,7],["dc.services.instance.exposedpaths"],null],[30,[36,11],["dc.services.instance.exposedpaths"],null]]]]],null],[30,[36,0],null,[["label","href","selected"],["Tags & Meta",[30,[36,7],["dc.services.instance.metadata"],null],[30,[36,11],["dc.services.instance.metadata"],null]]]]],null]],null]]],null],[2,"\\n "],[8,"outlet",[],[["@name","@model"],[[34,14],[30,[36,15],[[30,[36,0],null,[["proxy","meta","item"],[[35,2],[35,5],[32,3]]]],[32,1,["model"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,17],[[30,[36,16],null,null]],null]],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["hash","uri","proxy","mut","action","meta","if","href-to","eq","or","let","is-href","array","compact","routeName","assign","-outlet","component","notification"]}',meta:{moduleName:"consul-ui/templates/dc/services/instance.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/instance/addresses",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"pc97C5QS",block:'{"symbols":["route","items","taggedAddress","index","address"],"statements":[[8,"route",[],[["@name"],[[34,7]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,9],[[30,[36,8],[[32,1,["model","item","Service","TaggedAddresses"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,4],[[30,[36,6],[[32,2,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[8,"tabular-collection",[[24,0,"consul-tagged-addresses"]],[["@items"],[[32,2]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"th"],[12],[2,"Tag"],[13],[2,"\\n "],[10,"th"],[12],[2,"Address"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["row"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,0],[1,[32,3]],null]],null,[["default"],[{"statements":[[2," "],[10,"td"],[12],[2,"\\n "],[1,[30,[36,0],[0,[32,3]],null]],[6,[37,4],[[30,[36,3],[[30,[36,2],[[32,5,["Address"]],[35,1,["Address"]]],null],[30,[36,2],[[32,5,["Port"]],[35,1,["Port"]]],null]],null]],null,[["default"],[{"statements":[[2," "],[10,"em"],[12],[2,"(default)"],[13]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[10,"td"],[12],[2,"\\n "],[1,[32,5,["Address"]]],[2,":"],[1,[32,5,["Port"]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[3,4]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"p"],[12],[2,"\\n There are no additional addresses.\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[2]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["object-at","item","eq","and","if","with","gt","routeName","entries","let"]}',meta:{moduleName:"consul-ui/templates/dc/services/instance/addresses.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/instance/exposedpaths",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"fkDhaB82",block:'{"symbols":["route","item","proxy"],"statements":[[8,"route",[],[["@name"],[[34,4]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[32,1,["model","proxy"]],[32,1,["model","meta"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],[[32,3,["ServiceProxy","Expose","Paths","length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,0],["routes.dc.services.instance.exposedpaths.intro"],[["htmlSafe"],[true]]]],[2,"\\n "],[8,"consul/exposed-path/list",[],[["@items","@address"],[[32,3,["ServiceProxy","Expose","Paths"]],[30,[36,1],[[32,2,["Service","Address"]],[32,2,["Node","Address"]]],null]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.services.instance.exposedpaths.empty.body"],[["htmlSafe"],[true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n"]],"parameters":[2,3]}]]]],"parameters":[1]}]]]],"hasEval":false,"upvars":["t","or","gt","if","routeName","let"]}',meta:{moduleName:"consul-ui/templates/dc/services/instance/exposedpaths.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/instance/healthchecks",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"RMWIT75Y",block:'{"symbols":["route","sort","filters","items","collection","serf","notice"],"statements":[[8,"route",[],[["@name"],[[34,10]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,9],[[30,[36,17],null,[["value","change"],[[30,[36,21],[[35,20],"Status:asc"],null],[30,[36,6],[[32,0],[30,[36,5],[[35,20]],null]],[["value"],["target.selected"]]]]]],[30,[36,17],null,[["status","check","searchproperty"],[[30,[36,17],null,[["value","change"],[[30,[36,3],[[35,19],[30,[36,15],[[35,19],","],null],[29]],null],[30,[36,6],[[32,0],[30,[36,5],[[35,19]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,17],null,[["value","change"],[[30,[36,3],[[35,18],[30,[36,15],[[35,18],","],null],[29]],null],[30,[36,6],[[32,0],[30,[36,5],[[35,18]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,17],null,[["value","change","default"],[[30,[36,3],[[30,[36,16],[[35,14],[29]],null],[30,[36,15],[[35,14],","],null],[35,13]],null],[30,[36,6],[[32,0],[30,[36,5],[[35,14]],null]],[["value"],["target.selectedItems"]]],[35,13]]]]]]],[30,[36,12],[[30,[36,11],[[32,1,["model","item","Checks"]],[32,1,["model","proxy","Checks"]]],null],[32,1,["model","proxy","ServiceProxy","Expose","Checks"]]],null]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n\\n"],[6,[37,3],[[30,[36,7],[[32,4,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[2,"\\n "],[8,"consul/health-check/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,4],[30,[36,6],[[32,0],[30,[36,5],[[35,4]],null]],[["value"],["target.value"]]],[32,2],[32,3]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,9],[[30,[36,8],["Type","serf",[32,4]],null]],null,[["default"],[{"statements":[[6,[37,3],[[30,[36,2],[[32,6],[30,[36,1],[[32,6,["Status"]],"critical"],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,0],["routes.dc.services.instance.healthchecks.critical-serf-notice.header"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,7,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.services.instance.healthchecks.critical-serf-notice.body"],[["htmlSafe"],[true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[6]}]]],[2," "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["health-check",[32,2,["value"]],[32,3],[34,4],[32,4]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/health-check/list",[],[["@items"],[[32,5,["items"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.services.instance.healthchecks.empty"],[["items","htmlSafe"],[[32,4,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n\\n "],[13],[2,"\\n"]],"parameters":[2,3,4]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","eq","and","if","search","mut","action","gt","find-by","let","routeName","array","merge-checks","searchProperties","searchproperty","split","not-eq","hash","check","status","sortBy","or"]}',meta:{moduleName:"consul-ui/templates/dc/services/instance/healthchecks.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/instance/metadata",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"qT0uOojO",block:'{"symbols":["route","item"],"statements":[[8,"route",[],[["@name"],[[34,3]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[32,1,["model","item"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n "],[10,"section"],[14,0,"tags"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Tags"],[13],[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,2,["Tags","length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[8,"tag-list",[],[["@item"],[[32,2]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n There are no tags.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[10,"section"],[14,0,"metadata"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Meta"],[13],[2,"\\n"],[6,[37,2],[[32,2,["Meta"]]],null,[["default","else"],[{"statements":[[2," "],[8,"consul/metadata/list",[],[["@items"],[[30,[36,0],[[32,2,["Meta"]]],null]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This instance has no metadata.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "],[13],[2,"\\n"]],"parameters":[2]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["entries","gt","if","routeName","let"]}',meta:{moduleName:"consul-ui/templates/dc/services/instance/metadata.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/instance/upstreams",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"E9rUcBLq",block:'{"symbols":["route","sort","filters","partition","nspace","dc","proxy","meta","items","collection","notice"],"statements":[[8,"route",[],[["@name"],[[34,8]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,15],[[30,[36,13],null,[["value","change"],[[30,[36,9],[[35,14],"DestinationName:asc"],null],[30,[36,3],[[32,0],[30,[36,2],[[35,14]],null]],[["value"],["target.selected"]]]]]],[30,[36,13],null,[["searchproperty"],[[30,[36,13],null,[["value","change","default"],[[30,[36,6],[[30,[36,12],[[35,10],[29]],null],[30,[36,11],[[35,10],","],null],[35,4]],null],[30,[36,3],[[32,0],[30,[36,2],[[35,10]],null]],[["value"],["target.selectedItems"]]],[35,4]]]]]]],[30,[36,9],[[32,1,["params","partition"]],[32,1,["model","user","token","Partition"]],"default"],null],[30,[36,9],[[32,1,["params","nspace"]],[32,1,["model","user","token","Namespace"]],"default"],null],[32,1,["params","dc"]],[32,1,["model","proxy"]],[32,1,["model","meta"]],[32,1,["model","proxy","Service","Proxy","Upstreams"]]],null,[["default"],[{"statements":[[6,[37,6],[[30,[36,5],[[32,9,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[2,"\\n "],[8,"consul/upstream-instance/search-bar",[],[["@search","@onsearch","@searchproperties","@sort","@filter"],[[34,1],[30,[36,3],[[32,0],[30,[36,2],[[35,1]],null]],[["value"],["target.value"]]],[34,4],[32,2],[32,3]]],null],[2,"\\n"]],"parameters":[]}]]],[6,[37,6],[[30,[36,7],[[32,8,["ServiceProxy","Mode"]],"transparent"],null]],null,[["default"],[{"statements":[[2," "],[8,"notice",[],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,11,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,0],["routes.dc.services.instance.upstreams.tproxy-mode.header"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,11,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.services.instance.upstreams.tproxy-mode.body"],[["htmlSafe"],[true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,11,["Footer"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.services.instance.upstreams.tproxy-mode.footer"],[["htmlSafe"],[true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[11]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["upstream-instance",[32,2,["value"]],[32,3],[34,1],[32,9]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,10,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/upstream-instance/list",[],[["@items","@dc","@nspace","@partition"],[[32,10,["items"]],[32,6],[32,5],[32,4]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,10,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.services.instance.upstreams.empty"],[["items","htmlSafe"],[[32,9,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[10]}]]],[2,"\\n"]],"parameters":[2,3,4,5,6,7,8,9]}]]],[2," "],[13],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["t","search","mut","action","searchProperties","gt","if","eq","routeName","or","searchproperty","split","not-eq","hash","sortBy","let"]}',meta:{moduleName:"consul-ui/templates/dc/services/instance/upstreams.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"+YTjbG+A",block:'{"symbols":["route","loader","items","item","dc","tabs","o","config","status","type","item","error","after","notice","notice","notice"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,14],["/${partition}/${nspace}/${dc}/service-instances/for-service/${name}",[30,[36,2],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["disconnected"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,10],[[30,[36,23],[[32,2,["error","status"]],"404"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,26],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,16,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,16,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This service has been deregistered and no longer exists in the catalog.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[16]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,10],[[30,[36,23],[[32,2,["error","status"]],"403"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,26],null,[["sticky"],[true]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,15,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Error!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,15,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n You no longer have access to this service\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[15]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,26],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,14,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,14,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n An error was returned whilst loading this data, refresh to try again.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[14]}]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[13]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,25],[[32,2,["data"]],[32,2,["data","firstObject"]],[32,1,["model","dc"]]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,10],[[32,4,["IsOrigin"]]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,14],["/${partition}/${nspace}/${dc}/proxies/for-service/${name}",[30,[36,2],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null],[30,[36,18],[[32,0],[30,[36,17],[[35,1]],null]],[["value"],["data"]]]]],null],[2,"\\n"],[6,[37,10],[[30,[36,16],[[35,15]],null]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,14],["/${partition}/${nspace}/${dc}/discovery-chain/${name}",[30,[36,2],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null],[30,[36,18],[[32,0],[30,[36,17],[[35,15]],null]],[["value"],["data"]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[1,[30,[36,20],[[30,[36,19],[[32,0],"chain",[29]],null],[32,1,["params","dc"]]],null]],[2,"\\n"]],"parameters":[]}]]],[6,[37,25],[[30,[36,2],null,[["topology","services","upstreams","instances","intentions","routing","tags"],[[30,[36,21],[[32,5,["MeshEnabled"]],[32,4,["IsMeshOrigin"]],[30,[36,6],[[30,[36,24],[[35,1,["length"]],0],null],[30,[36,23],[[32,4,["Service","Kind"]],"ingress-gateway"],null]],null]],null],[30,[36,23],[[32,4,["Service","Kind"]],"terminating-gateway"],null],[30,[36,23],[[32,4,["Service","Kind"]],"ingress-gateway"],null],true,[30,[36,21],[[30,[36,13],[[32,4,["Service","Kind"]],"terminating-gateway"],null],[30,[36,22],["read intention for service"],[["item"],[[32,4,["Service"]]]]]],null],[30,[36,21],[[32,5,["MeshEnabled"]],[32,4,["IsOrigin"]]],null],true]]]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["notification"]],[["default"],[{"statements":[[2,"\\n "],[8,"topology-metrics/notifications",[],[["@type","@status","@error"],[[32,10],[32,9],[32,12]]],null],[2,"\\n "]],"parameters":[9,10,11,12]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["breadcrumbs"]],[["default"],[{"statements":[[2,"\\n "],[10,"ol"],[12],[2,"\\n "],[10,"li"],[12],[10,"a"],[15,6,[30,[36,9],["dc.services"],null]],[12],[2,"All Services"],[13],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],[[32,4,["Service","Service"]]]],null],[2,"\\n "],[13],[2,"\\n "],[8,"consul/external-source",[],[["@item","@withInfo"],[[32,4,["Service"]],true]],null],[2,"\\n "],[8,"consul/kind",[],[["@item","@withInfo"],[[32,4,["Service"]],true]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["nav"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,10],[[30,[36,13],[[32,4,["Service","Kind"]],"mesh-gateway"],null]],null,[["default"],[{"statements":[[2," "],[8,"tab-nav",[],[["@items"],[[30,[36,12],[[30,[36,11],[[30,[36,10],[[32,6,["topology"]],[30,[36,2],null,[["label","href","selected"],["Topology",[30,[36,9],["dc.services.show.topology"],null],[30,[36,8],["dc.services.show.topology"],null]]]],""],null],[30,[36,10],[[32,6,["services"]],[30,[36,2],null,[["label","href","selected"],["Linked Services",[30,[36,9],["dc.services.show.services"],null],[30,[36,8],["dc.services.show.services"],null]]]],""],null],[30,[36,10],[[32,6,["upstreams"]],[30,[36,2],null,[["label","href","selected"],["Upstreams",[30,[36,9],["dc.services.show.upstreams"],null],[30,[36,8],["dc.services.show.upstreams"],null]]]],""],null],[30,[36,10],[[32,6,["instances"]],[30,[36,2],null,[["label","href","selected"],["Instances",[30,[36,9],["dc.services.show.instances"],null],[30,[36,8],["dc.services.show.instances"],null]]]],""],null],[30,[36,10],[[32,6,["intentions"]],[30,[36,2],null,[["label","href","selected"],["Intentions",[30,[36,9],["dc.services.show.intentions"],null],[30,[36,8],["dc.services.show.intentions"],null]]]],""],null],[30,[36,10],[[32,6,["routing"]],[30,[36,2],null,[["label","href","selected"],["Routing",[30,[36,9],["dc.services.show.routing"],null],[30,[36,8],["dc.services.show.routing"],null]]]],""],null],[30,[36,10],[[32,6,["tags"]],[30,[36,2],null,[["label","href","selected"],["Tags",[30,[36,9],["dc.services.show.tags"],null],[30,[36,8],["dc.services.show.tags"],null]]]],""],null]],null]],null]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-source",[],[["@src"],[[30,[36,14],["/${partition}/${nspace}/${dc}/ui-config",[30,[36,2],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,10],[[32,8,["data","dashboard_url_templates","service"]]],null,[["default"],[{"statements":[[2," "],[8,"action",[[24,0,"external-dashboard"]],[["@href","@external"],[[30,[36,7],[[32,8,["data","dashboard_url_templates","service"]],[30,[36,2],null,[["Datacenter","Service"],[[32,5,["Name"]],[30,[36,2],null,[["Name","Namespace","Partition"],[[32,4,["Service","Service"]],[30,[36,6],[[32,4,["Service","Namespace"]],""],null],[30,[36,6],[[32,4,["Service","Partition"]],""],null]]]]]]]],null],true]],[["default"],[{"statements":[[2,"\\n Open dashboard\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,10],[[30,[36,6],[[30,[36,16],[[32,4,["IsOrigin"]]],null],[35,15]],null]],null,[["default"],[{"statements":[[2," "],[8,"outlet",[],[["@name","@model"],[[34,0],[30,[36,3],[[30,[36,2],null,[["items","proxies","item","tabs"],[[32,3],[35,1],[32,4],[32,6]]]],[32,1,["model"]]],null]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,5],[[30,[36,4],null,null]],null]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[6]}]]]],"parameters":[3,4,5]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]]],"hasEval":false,"upvars":["routeName","proxies","hash","assign","-outlet","component","or","render-template","is-href","href-to","if","array","compact","not-eq","uri","chain","not","mut","action","set","did-insert","and","can","eq","gt","let","notification"]}',meta:{moduleName:"consul-ui/templates/dc/services/show.hbs"}}) -e.default=t})) -define("consul-ui/templates/dc/services/show/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"awAzFj0u",block:'{"symbols":["route"],"statements":[[8,"route",[],[["@name"],[[34,3]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,2],[[32,1,["model","tabs","topology"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],[[30,[36,0],["replaceWith","dc.services.show.topology"],null]],null]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,1,["model","tabs","upstreams"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],[[30,[36,0],["replaceWith","dc.services.show.upstreams"],null]],null]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[32,1,["model","tabs","services"]]],null,[["default","else"],[{"statements":[[2," "],[1,[30,[36,1],[[30,[36,0],["replaceWith","dc.services.show.services"],null]],null]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[1,[30,[36,1],[[30,[36,0],["replaceWith","dc.services.show.instances"],null]],null]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["route-action","did-insert","if","routeName"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show/instances",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"13/W51mM",block:'{"symbols":["route","sort","filters","items","proxyMeta","collection"],"statements":[[8,"route",[],[["@name"],[[34,11]]],[["default"],[{"statements":[[2,"\\n"],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,20],[[30,[36,0],null,[["value","change"],[[30,[36,19],[[35,18],"Status:asc"],null],[30,[36,4],[[32,0],[30,[36,3],[[35,18]],null]],[["value"],["target.selected"]]]]]],[30,[36,0],null,[["status","source","searchproperty"],[[30,[36,0],null,[["value","change"],[[30,[36,9],[[35,17],[30,[36,14],[[35,17],","],null],[29]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,17]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,0],null,[["value","change"],[[30,[36,9],[[35,16],[30,[36,14],[[35,16],","],null],[29]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,16]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,0],null,[["value","change","default"],[[30,[36,9],[[30,[36,15],[[35,13],[29]],null],[30,[36,14],[[35,13],","],null],[35,12]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,13]],null]],[["value"],["target.selectedItems"]]],[35,12]]]]]]],[32,1,["model","items"]],[32,1,["model","proxies","firstObject"]]],null,[["default"],[{"statements":[[6,[37,9],[[30,[36,8],[[32,4,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[2,"\\n "],[8,"consul/service-instance/search-bar",[],[["@sources","@search","@onsearch","@sort","@filter"],[[30,[36,6],[[30,[36,5],[[32,4]],null],"ExternalSources"],null],[34,7],[30,[36,4],[[32,0],[30,[36,3],[[35,7]],null]],[["value"],["target.value"]]],[32,2],[32,3]]],null],[2,"\\n"]],"parameters":[]}]]],[6,[37,9],[[32,5,["ServiceName"]]],null,[["default"],[{"statements":[[2," "],[8,"data-source",[],[["@src","@onchange"],[[30,[36,1],["/${partition}/${nspace}/${dc}/service-instances/for-service/${name}",[30,[36,0],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,5,["ServiceName"]]]]]],null],[30,[36,4],[[32,0],[30,[36,3],[[35,2]],null]],[["value"],["data"]]]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["service-instance",[32,2,["value"]],[32,3],[34,7],[32,4]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/service-instance/list",[],[["@routeName","@items","@proxies"],["dc.services.instance",[32,6,["items"]],[34,2]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,10],["routes.dc.services.show.instances.empty"],[["items","htmlSafe"],[[32,4,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n"]],"parameters":[2,3,4,5]}]]],[13],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["hash","uri","proxies","mut","action","collection","get","search","gt","if","t","routeName","searchProperties","searchproperty","split","not-eq","source","status","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/instances.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show/intentions",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"JedXDjTs",block:'{"symbols":["route","o"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[8,"outlet",[],[["@name","@model"],[[34,0],[32,1,["model"]]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,2],[[30,[36,1],null,null]],null]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["routeName","-outlet","component"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/intentions.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show/intentions/edit",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"5Aptuf+o",block:'{"symbols":["route","readOnly","loader","item"],"statements":[[8,"route",[],[["@name"],[[34,5]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[30,[36,8],[[30,[36,7],["write intention for service"],[["item"],[[35,6,["Service"]]]]]],null]],null,[["default"],[{"statements":[[2," "],[8,"data-loader",[],[["@src"],[[30,[36,3],["/${partition}/${nspace}/${dc}/intention/${id}",[30,[36,0],null,[["partition","nspace","dc","id"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[30,[36,2],[[32,1,["params","intention_id"]],""],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"error-state",[],[["@error","@login"],[[32,3,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,4],[[32,3,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"consul/intention/form",[],[["@readonly","@item","@dc","@nspace","@partition","@autofill","@onsubmit"],[[32,2],[32,4],[32,1,["model","dc"]],[32,1,["params","nspace"]],[32,1,["params","partition"]],[30,[36,0],null,[["DestinationName"],[[32,1,["params","name"]]]]],[30,[36,1],["dc.services.show.intentions.index"],null]]],null],[2,"\\n"]],"parameters":[4]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3]}]]],[2,"\\n"]],"parameters":[2]}]]]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["hash","transition-to","or","uri","let","routeName","item","can","not"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/intentions/edit.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show/intentions/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"YEgUH4GU",block:'{"symbols":["route","api","sort","filters","items","item","writer","collection","list"],"statements":[[8,"route",[],[["@name"],[[34,12]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,8],["/${partition}/${nspace}/${dc}/intentions/for-service/${slug}",[30,[36,7],null,[["partition","nspace","dc","slug"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"error-state",[],[["@error"],[[32,2,["error"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,20],[[30,[36,7],null,[["value","change"],[[30,[36,19],[[35,18],"Action:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,18]],null]],[["value"],["target.selected"]]]]]],[30,[36,7],null,[["access","searchproperty"],[[30,[36,7],null,[["value","change"],[[30,[36,5],[[35,17],[30,[36,15],[[35,17],","],null],[29]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,17]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,7],null,[["value","change","default"],[[30,[36,5],[[30,[36,16],[[35,14],[29]],null],[30,[36,15],[[35,14],","],null],[35,13]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,14]],null]],[["value"],["target.selectedItems"]]],[35,13]]]]]]],[32,2,["data"]],[32,1,["model","item"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,5],[[30,[36,4],["create intention for service"],[["item"],[[32,6,["Service"]]]]]],null,[["default"],[{"statements":[[2," "],[8,"portal",[],[["@target"],["app-view-actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"a"],[15,6,[30,[36,3],["dc.services.show.intentions.create"],null]],[14,0,"type-create"],[12],[2,"Create"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[6,[37,5],[[30,[36,6],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[8,"consul/intention/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"data-writer",[],[["@sink","@type","@ondelete"],[[30,[36,8],["/${partition}/${dc}/${nspace}/intention/",[30,[36,7],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null],"intention",[34,9]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["intention",[32,3,["value"]],[32,4],[34,0],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/intention/list",[],[["@items","@check","@delete"],[[32,8,["items"]],[34,0],[32,7,["delete"]]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,9,["CustomResourceNotice"]],[],[[],[]],null],[2,"\\n "],[8,[32,9,["CheckNotice"]],[],[[],[]],null],[2,"\\n "],[8,[32,9,["Table"]],[],[["@routeName"],["dc.services.show.intentions.edit"]],null],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,8,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[["@login"],[[32,1,["model","app","login","open"]]]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,10],["routes.dc.services.intentions.index.empty.header"],[["items"],[[32,5,["length"]]]]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,10],["routes.dc.services.intentions.index.empty.body"],[["items","htmlSafe"],[[32,5,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["actions"]],[["default"],[{"statements":[[2,"\\n "],[10,"li"],[14,0,"docs-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,11],["CONSUL_DOCS_URL"],null],"/commands/intention"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Documentation on intentions"],[13],[2,"\\n "],[13],[2,"\\n "],[10,"li"],[14,0,"learn-link"],[12],[2,"\\n "],[10,"a"],[15,6,[31,[[30,[36,11],["CONSUL_DOCS_LEARN_URL"],null],"/consul/getting-started/connect"]]],[14,"rel","noopener noreferrer"],[14,"target","_blank"],[12],[2,"Take the tutorial"],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[3,4,5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["search","mut","action","href-to","can","if","gt","hash","uri","refresh-route","t","env","routeName","searchProperties","searchproperty","split","not-eq","access","sortBy","or","let"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/intentions/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show/routing",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"ECmVG/5P",block:'{"symbols":["route","loader"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,2],["/${partition}/${nspace}/${dc}/discovery-chain/${name}",[30,[36,1],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n "],[8,"consul/discovery-chain",[],[["@chain"],[[32,2,["data","Chain"]]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["routeName","hash","uri"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/routing.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show/services",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"I2O7WlJO",block:'{"symbols":["route","loader","sort","filters","items","collection"],"statements":[[8,"route",[],[["@name"],[[34,7]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,9],["/${partition}/${nspace}/${dc}/gateways/for-service/${name}",[30,[36,8],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,16],[[30,[36,8],null,[["value","change"],[[30,[36,6],[[35,15],"Status:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,15]],null]],[["value"],["target.selected"]]]]]],[30,[36,8],null,[["instance","searchproperty"],[[30,[36,8],null,[["value","change"],[[30,[36,4],[[35,14],[30,[36,12],[[35,14],","],null],[29]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,14]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,8],null,[["value","change","default"],[[30,[36,4],[[30,[36,13],[[35,11],[29]],null],[30,[36,12],[[35,11],","],null],[35,10]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,11]],null]],[["value"],["target.selectedItems"]]],[35,10]]]]]]],[32,2,["data"]]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,5,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[2,"\\n "],[8,"consul/upstream/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["service",[32,3,["value"]],[32,4],[34,0],[32,5]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,5],["routes.dc.services.show.services.intro"],[["htmlSafe"],[true]]]],[2,"\\n "],[8,"consul/service/list",[],[["@nspace","@partition","@items"],[[30,[36,6],[[32,1,["params","nspace"]],[32,1,["model","user","token","Namespace"]],"default"],null],[30,[36,6],[[32,1,["params","partition"]],[32,1,["model","user","token","Partition"]],"default"],null],[32,6,["items"]]]],[["default"],[{"statements":[[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,5],["routes.dc.services.show.services.empty"],[["items","htmlSafe"],[[32,5,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n"]],"parameters":[3,4,5]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["search","mut","action","gt","if","t","or","routeName","hash","uri","searchProperties","searchproperty","split","not-eq","instance","sortBy","let"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/services.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show/tags",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"6gutQsyo",block:'{"symbols":["route","tags"],"statements":[[8,"route",[],[["@name"],[[34,4]]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,7],[[30,[36,6],[[30,[36,5],["Tags",[32,1,["model","items"]]],null]],null]],null,[["default"],[{"statements":[[6,[37,3],[[30,[36,2],[[32,2,["length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[8,"tag-list",[],[["@item"],[[30,[36,1],null,[["Tags"],[[32,2]]]]]],null],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,0],["routes.dc.services.show.tags.empty.header"],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,0],["routes.dc.services.show.tags.empty.body"],[["htmlSafe"],[true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[2]}]]],[2," "],[13],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["t","hash","gt","if","routeName","map-by","flatten","let"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/tags.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show/topology",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"YIp1h+g1",block:'{"symbols":["route","loader","nspace","dc","items","topology","config","disclosure","notices","noticesEnabled","enabled","prop","details","notice","footer"],"statements":[[8,"route",[],[["@name"],[[34,24]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,23],["/${partition}/${nspace}/${dc}/topology/${name}/${kind}",[30,[36,1],null,[["partition","nspace","dc","name","kind"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]],[30,[36,0],[[32,1,["model","items","firstObject","Service","Kind"]],""],null]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,15],[[32,1,["params","nspace"]],[32,1,["model","dc"]],[32,1,["model","items"]],[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n\\n "],[10,"div"],[14,0,"topology-notices"],[12],[2,"\\n "],[8,"disclosure",[],[["@expanded"],[true]],[["default"],[{"statements":[[2,"\\n"],[6,[37,15],[[30,[36,22],[[30,[36,12],[[30,[36,12],["filtered-by-acls",[30,[36,0],[false,[32,6,["FilteredByACLs"]]],null]],null],[30,[36,12],["default-allow",[30,[36,0],[false,[30,[36,21],[[32,4,["DefaultACLPolicy"]],"allow"],null]],null]],null],[30,[36,12],["wildcard-intention",[30,[36,0],[false,[32,6,["wildcardIntention"]]],null]],null],[30,[36,12],["not-defined-intention",[30,[36,0],[false,[32,6,["notDefinedIntention"]]],null]],null],[30,[36,12],["no-dependencies",[30,[36,0],[false,[30,[36,11],[[32,6,["noDependencies"]],[30,[36,20],["use acls"],null]],null]],null]],null],[30,[36,12],["acls-disabled",[30,[36,0],[false,[30,[36,11],[[32,6,["noDependencies"]],[30,[36,3],[[30,[36,20],["use acls"],null]],null]],null]],null]],null]],null]],null]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,15],[[30,[36,19],[false,[30,[36,18],[[32,9]],null]],null]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,17],[[30,[36,16],[[32,9]],null]],null,[["default"],[{"statements":[[6,[37,7],[[32,11]],null,[["default"],[{"statements":[[2," "],[8,[32,8,["Details"]],[],[["@auto"],[false]],[["default"],[{"statements":[[2,"\\n "],[8,"notice",[[24,0,"topology-metrics-notice"],[16,1,[32,13,["id"]]]],[["@type"],[[30,[36,7],[[30,[36,13],[[32,12],[30,[36,12],["filtered-by-acls","no-dependencies"],null]],null],"info","warning"],null]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,14,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,9],[[30,[36,8],[[32,1,["t"]],"notice.${prop}.header",[30,[36,1],null,[["prop"],[[32,12]]]]],null]],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"],[6,[37,7],[[32,8,["expanded"]]],null,[["default"],[{"statements":[[2," "],[8,[32,14,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n "],[1,[30,[36,9],[[30,[36,8],[[32,1,["t"]],"notice.${prop}.body",[30,[36,1],null,[["prop"],[[32,12]]]]],null]],null]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[6,[37,15],[[30,[36,9],[[30,[36,8],[[32,1,["t"]],"notice.${prop}.footer",[30,[36,1],null,[["route_intentions","prop","htmlSafe"],[[30,[36,14],["dc.services.show.intentions"],null],[32,12],true]]]],null]],null]],null,[["default"],[{"statements":[[6,[37,7],[[30,[36,11],[[32,8,["expanded"]],[30,[36,10],[[32,12],"filtered-by-acls"],null]],null]],null,[["default"],[{"statements":[[2," "],[8,[32,14,["Footer"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[32,15]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[15]}]]],[2," "]],"parameters":[14]}]]],[2,"\\n "]],"parameters":[13]}]]],[2,"\\n"]],"parameters":[]}]]]],"parameters":[11,12]}]]],[2,"\\n"],[6,[37,7],[[30,[36,4],[[32,10,["length"]],2],null]],null,[["default"],[{"statements":[[2," "],[8,[32,8,["Action"]],[[4,[38,6],["click",[32,8,["toggle"]]],null]],[[],[]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,9],[[30,[36,8],[[32,1,["t"]],"notices.${expanded}",[30,[36,1],null,[["expanded"],[[30,[36,7],[[32,8,["expanded"]],"close","open"],null]]]]],null]],null]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"parameters":[10]}]]]],"parameters":[9]}]]],[2," "]],"parameters":[8]}]]],[2,"\\n\\n "],[13],[2,"\\n\\n\\n "],[8,"data-source",[],[["@src"],[[30,[36,23],["/${partition}/${nspace}/${dc}/ui-config",[30,[36,1],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n"],[6,[37,7],[[32,7,["data"]]],null,[["default"],[{"statements":[[2,"\\n "],[8,"topology-metrics",[],[["@nspace","@dc","@service","@topology","@metricsHref","@isRemoteDC","@hasMetricsProvider","@oncreate"],[[32,3],[32,4],[32,5,["firstObject"]],[32,6],[30,[36,2],[[32,7,["data","dashboard_url_templates","service"]],[30,[36,1],null,[["Datacenter","Service"],[[32,4,["Name"]],[30,[36,1],null,[["Name","Namespace","Partition"],[[32,5,["firstObject","Name"]],[30,[36,0],[[32,5,["firstObject","Namespace"]],""],null],[30,[36,0],[[32,5,["firstObject","Partition"]],""],null]]]]]]]],null],[30,[36,3],[[32,4,["Local"]]],null],[30,[36,4],[[32,7,["data","metrics_provider","length"]],0],null],[30,[36,5],["createIntention"],null]]],null],[2,"\\n\\n"]],"parameters":[]}]]],[2," "]],"parameters":[7]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[3,4,5,6]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["or","hash","render-template","not","gt","route-action","on","if","fn","compute","not-eq","and","array","contains","href-to","let","-each-in","each","values","without","can","eq","from-entries","uri","routeName"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/topology.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/services/show/upstreams",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"G1oiIhX0",block:'{"symbols":["route","loader","sort","filters","partition","nspace","dc","items","collection"],"statements":[[8,"route",[],[["@name"],[[34,6]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,8],["/${partition}/${nspace}/${dc}/gateways/for-service/${name}",[30,[36,7],null,[["partition","nspace","dc","name"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]],[32,1,["params","name"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n"],[6,[37,16],[[30,[36,7],null,[["value","change"],[[30,[36,9],[[35,15],"Status:asc"],null],[30,[36,2],[[32,0],[30,[36,1],[[35,15]],null]],[["value"],["target.selected"]]]]]],[30,[36,7],null,[["instance","searchproperty"],[[30,[36,7],null,[["value","change"],[[30,[36,4],[[35,14],[30,[36,12],[[35,14],","],null],[29]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,14]],null]],[["value"],["target.selectedItems"]]]]]],[30,[36,7],null,[["value","change","default"],[[30,[36,4],[[30,[36,13],[[35,11],[29]],null],[30,[36,12],[[35,11],","],null],[35,10]],null],[30,[36,2],[[32,0],[30,[36,1],[[35,11]],null]],[["value"],["target.selectedItems"]]],[35,10]]]]]]],[30,[36,9],[[32,1,["params","partition"]],[32,1,["model","user","token","Partition"]],"default"],null],[30,[36,9],[[32,1,["params","nspace"]],[32,1,["model","user","token","Namespace"]],"default"],null],[32,1,["params","dc"]],[32,2,["data"]]],null,[["default"],[{"statements":[[6,[37,4],[[30,[36,3],[[32,8,["length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"input"],[14,1,"toolbar-toggle"],[14,4,"checkbox"],[12],[13],[2,"\\n "],[8,"consul/upstream/search-bar",[],[["@search","@onsearch","@sort","@filter"],[[34,0],[30,[36,2],[[32,0],[30,[36,1],[[35,0]],null]],[["value"],["target.value"]]],[32,3],[32,4]]],null],[2,"\\n"]],"parameters":[]}]]],[2," "],[1,[30,[36,5],["routes.dc.services.show.upstreams.intro"],[["htmlSafe"],[true]]]],[2,"\\n "],[8,"data-collection",[],[["@type","@sort","@filters","@search","@items"],["service",[32,3,["value"]],[32,4],[34,0],[32,8]]],[["default"],[{"statements":[[2,"\\n "],[8,[32,9,["Collection"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"consul/upstream/list",[],[["@items","@dc","@nspace","@partition"],[[32,9,["items"]],[32,7],[32,6],[32,5]]],[["default"],[{"statements":[[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,9,["Empty"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"empty-state",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["body"]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,5],["routes.dc.services.show.upstreams.empty"],[["items","htmlSafe"],[[32,8,["length"]],true]]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[9]}]]],[2,"\\n"]],"parameters":[3,4,5,6,7,8]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["search","mut","action","gt","if","t","routeName","hash","uri","or","searchProperties","searchproperty","split","not-eq","instance","sortBy","let"]}',meta:{moduleName:"consul-ui/templates/dc/services/show/upstreams.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/show",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"l00QFa3D",block:'{"symbols":["route","o","tabs","tabsEnabled"],"statements":[[8,"route",[],[["@name"],[[34,12]]],[["default"],[{"statements":[[2,"\\n "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],[[30,[36,3],[[30,[36,2],[[32,1,["t"]],"title"],null]],null]]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["toolbar"]],[["default"],[{"statements":[[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["nav"]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,11],[[30,[36,14],[[30,[36,6],[[30,[36,6],["serverstatus",true],null],[30,[36,6],["cataloghealth",false],null],[30,[36,6],["license",[30,[36,13],["read license"],null]],null]],null]],null]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,11],[[30,[36,10],[false,[30,[36,9],[[32,3]],null]],null]],null,[["default"],[{"statements":[[2,"\\n"],[6,[37,5],[[30,[36,8],[[32,4,["length"]],1],null]],null,[["default"],[{"statements":[[2," "],[8,"tab-nav",[],[["@items"],[[30,[36,7],[[30,[36,6],[[30,[36,5],[[32,3,["serverstatus"]],[30,[36,4],null,[["label","href","selected"],[[30,[36,3],[[30,[36,2],[[32,1,["t"]],"serverstatus.title"],null]],null],[30,[36,1],["dc.show.serverstatus"],null],[30,[36,0],["dc.show.serverstatus"],null]]]],""],null],[30,[36,5],[[32,3,["cataloghealth"]],[30,[36,4],null,[["label","href","selected"],[[30,[36,3],[[30,[36,2],[[32,1,["t"]],"cataloghealth.title"],null]],null],[30,[36,1],["dc.show.cataloghealth"],null],[30,[36,0],["dc.show.cataloghealth"],null]]]],""],null],[30,[36,5],[[32,3,["license"]],[30,[36,4],null,[["label","href","selected"],[[30,[36,3],[[30,[36,2],[[32,1,["t"]],"license.title"],null]],null],[30,[36,1],["dc.show.license"],null],[30,[36,0],["dc.show.license"],null]]]]],null],""],null]],null]]],null],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"]],"parameters":[4]}]]]],"parameters":[3]}]]],[2," "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"outlet",[],[["@name","@model"],[[34,12],[32,1,["model"]]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,16],[[30,[36,15],null,null]],null]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["is-href","href-to","fn","compute","hash","if","array","compact","gt","values","without","let","routeName","can","from-entries","-outlet","component"]}',meta:{moduleName:"consul-ui/templates/dc/show.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/show/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"p6/8nAfZ",block:'{"symbols":["route"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,4],[[30,[36,3],["replaceWith",[30,[36,2],[[30,[36,1],["access overview"],null],"dc.show.serverstatus","dc.services.index"],null]],null]],null]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n\\n"]],"hasEval":false,"upvars":["routeName","can","if","route-action","did-insert"]}',meta:{moduleName:"consul-ui/templates/dc/show/index.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/show/license",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"6J16wkmB",block:'{"symbols":["route","loader","item","after","notice","notice","notice"],"statements":[[8,"route",[],[["@name"],[[34,12]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,13],["/${partition}/${nspace}/${dc}/license",[30,[36,8],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,14],[[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"error-state",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["disconnected"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,2],[[30,[36,1],[[32,2,["error","status"]],"404"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,0],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,7,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This service has been deregistered and no longer exists in the catalog.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,2],[[30,[36,1],[[32,2,["error","status"]],"403"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,0],null,[["sticky"],[true]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Error!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n You no longer have access to this service\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,0],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n An error was returned whilst loading this data, refresh to try again.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[4]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n "],[10,"section"],[15,0,[30,[36,4],["validity",[30,[36,3],["valid",[32,3,["Valid"]]],null]],null]],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,6],[[30,[36,5],[[32,1,["t"]],"expiry.header"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"p"],[12],[2,"\\n "],[1,[30,[36,6],[[30,[36,5],[[32,1,["t"]],"expiry.${type}.body",[30,[36,8],null,[["type","date","time","htmlSafe"],[[30,[36,2],[[32,3,["Valid"]],"valid","expired"],null],[30,[36,7],[[32,3,["License","expiration_time"]]],[["year","month","day"],["numeric","long","numeric"]]],[30,[36,7],[[32,3,["License","expiration_time"]]],[["hour12","hour","hourCycle","minute","second","timeZoneName"],[true,"numeric","h12","numeric","numeric","short"]]],true]]]],null]],null]],[2,"\\n "],[13],[2,"\\n\\n "],[10,"dl"],[12],[2,"\\n "],[10,"dt"],[15,0,[30,[36,4],[[30,[36,3],["valid",[32,3,["Valid"]]],null],[30,[36,3],["expired",[30,[36,10],[[32,3,["Valid"]]],null]],null],[30,[36,3],["warning",[30,[36,9],[[32,3,["License","expiration_time"]],2629800000],null]],null]],null]],[12],[2,"\\n "],[1,[30,[36,6],[[30,[36,5],[[32,1,["t"]],"expiry.${type}.header",[30,[36,8],null,[["type"],[[30,[36,2],[[32,3,["Valid"]],"valid","expired"],null]]]]],null]],null]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[30,[36,11],[[32,3,["License","expiration_time"]]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"aside"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,6],[[30,[36,5],[[32,1,["t"]],"documentation.title"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[1,[30,[36,6],[[30,[36,5],[[32,1,["t"]],"documentation.body",[30,[36,8],null,[["htmlSafe"],[true]]]],null]],null]],[2,"\\n "],[13],[2,"\\n\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3]}]]],[2," "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n\\n"]],"hasEval":false,"upvars":["notification","eq","if","array","class-map","fn","compute","format-time","hash","temporal-within","not","temporal-format","routeName","uri","let"]}',meta:{moduleName:"consul-ui/templates/dc/show/license.hbs"}}) -e.default=t})),define("consul-ui/templates/dc/show/serverstatus",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"oG6Yv0sK",block:'{"symbols":["route","loader","item","item","after","notice","notice","notice"],"statements":[[8,"route",[],[["@name"],[[34,16]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,17],["/${partition}/${nspace}/${dc}/datacenter",[30,[36,13],null,[["partition","nspace","dc"],[[32,1,["params","partition"]],[32,1,["params","nspace"]],[32,1,["params","dc"]]]]]],null]]],[["default"],[{"statements":[[2,"\\n\\n"],[6,[37,18],[[32,2,["data"]]],null,[["default"],[{"statements":[[2," "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"error-state",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["disconnected"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,8],[[30,[36,4],[[32,2,["error","status"]],"404"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,12],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,8,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,8,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n This service has been deregistered and no longer exists in the catalog.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[8]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[6,[37,8],[[30,[36,4],[[32,2,["error","status"]],"403"],null]],null,[["default","else"],[{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,12],null,[["sticky"],[true]]]],[["@type"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,7,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Error!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,7,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n You no longer have access to this service\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[7]}]]],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[8,"notice",[[24,0,"notification-update"],[4,[38,12],null,[["sticky"],[true]]]],[["@type"],["warning"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,6,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"strong"],[12],[2,"Warning!"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,6,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n An error was returned whilst loading this data, refresh to try again.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[6]}]]],[2,"\\n "]],"parameters":[]}]]]],"parameters":[]}]]],[2," "]],"parameters":[5]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n "],[10,"div"],[14,0,"tab-section"],[12],[2,"\\n\\n "],[10,"section"],[15,0,[30,[36,6],["server-failure-tolerance"],null]],[12],[2,"\\n\\n "],[10,"header"],[12],[2,"\\n "],[1,[30,[36,3],[[30,[36,2],[[32,1,["t"]],"tolerance.link",[30,[36,13],null,[["htmlSafe"],[true]]]],null]],null]],[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,3],[[30,[36,2],[[32,1,["t"]],"tolerance.header"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[10,"section"],[15,0,[30,[36,6],[[30,[36,5],["immediate-tolerance"],null]],null]],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,3],[[30,[36,2],[[32,1,["t"]],"tolerance.immediate.header"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[15,0,[30,[36,6],[[30,[36,5],["warning",[30,[36,14],[[30,[36,4],[[32,3,["FailureTolerance"]],0],null],[30,[36,4],[[32,3,["OptimisticFailureTolerance"]],0],null]],null]],null]],null]],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[1,[30,[36,3],[[30,[36,2],[[32,1,["t"]],"tolerance.immediate.body"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,3,["FailureTolerance"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n"],[6,[37,8],[[30,[36,15],["read zones"],null]],null,[["default"],[{"statements":[[2," "],[10,"section"],[15,0,[30,[36,6],[[30,[36,5],["optimistic-tolerance"],null]],null]],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,3],[[30,[36,2],[[32,1,["t"]],"tolerance.optimistic.header"],null]],null]],[2,"\\n "],[11,"span"],[4,[38,11],["With > 30 seconds between server failures, Consul can restore the Immediate Fault Tolerance by replacing failed active voters with healthy back-up voters when using redundancy zones."],null],[12],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[15,0,[30,[36,6],[[30,[36,5],["warning",[30,[36,4],[[32,3,["OptimisticFailureTolerance"]],0],null]],null]],null]],[12],[2,"\\n "],[10,"dt"],[12],[2,"\\n "],[1,[30,[36,3],[[30,[36,2],[[32,1,["t"]],"tolerance.optimistic.body"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[10,"dd"],[12],[2,"\\n "],[1,[32,3,["OptimisticFailureTolerance"]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n\\n"],[6,[37,8],[[30,[36,7],[[32,3,["RedundancyZones","length"]],0],null]],null,[["default","else"],[{"statements":[[2," "],[10,"section"],[15,0,[30,[36,6],["redundancy-zones"],null]],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,1],[[30,[36,0],["common.consul.redundancyzone"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n"],[6,[37,10],[[30,[36,9],[[30,[36,9],[[32,3,["RedundancyZones"]]],null]],null]],null,[["default"],[{"statements":[[6,[37,8],[[30,[36,7],[[32,4,["Servers","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"section"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[32,4,["Name"]]],[2,"\\n "],[13],[2,"\\n "],[10,"dl"],[15,0,[30,[36,6],[[30,[36,5],["warning",[30,[36,4],[[32,4,["FailureTolerance"]],0],null]],null]],null]],[12],[2,"\\n "],[10,"dt"],[12],[1,[30,[36,0],["common.consul.failuretolerance"],null]],[13],[2,"\\n "],[10,"dd"],[12],[1,[32,4,["FailureTolerance"]]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"consul/server/list",[],[["@items"],[[32,4,["Servers"]]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]]],"parameters":[4]}]]],[2,"\\n"],[6,[37,8],[[30,[36,7],[[32,3,["Default","Servers","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"section"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h3"],[12],[2,"\\n "],[1,[30,[36,3],[[30,[36,2],[[32,1,["t"]],"unassigned"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"consul/server/list",[],[["@items"],[[32,3,["Default","Servers"]]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]},{"statements":[[2," "],[10,"section"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,3],[[30,[36,2],[[32,1,["t"]],"servers"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[8,"consul/server/list",[],[["@items"],[[32,3,["Default","Servers"]]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n"],[6,[37,8],[[30,[36,7],[[32,3,["ReadReplicas","length"]],0],null]],null,[["default"],[{"statements":[[2," "],[10,"section"],[12],[2,"\\n "],[10,"header"],[12],[2,"\\n "],[10,"h2"],[12],[2,"\\n "],[1,[30,[36,1],[[30,[36,0],["common.consul.readreplica"],null]],null]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n\\n "],[8,"consul/server/list",[],[["@items"],[[32,3,["ReadReplicas"]]]],null],[2,"\\n "],[13],[2,"\\n"]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3]}]]],[2," "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n\\n"]],"hasEval":false,"upvars":["t","pluralize","fn","compute","eq","array","class-map","gt","if","-track-array","each","tooltip","notification","hash","and","can","routeName","uri","let"]}',meta:{moduleName:"consul-ui/templates/dc/show/serverstatus.hbs"}}) -e.default=t})),define("consul-ui/templates/error",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"KX7JLK/T",block:'{"symbols":[],"statements":[[6,[37,1],[[35,0]],null,[["default"],[{"statements":[[8,"app-error",[],[["@error"],[[34,0]]],null],[2,"\\n"]],"parameters":[]}]]]],"hasEval":false,"upvars":["error","if"]}',meta:{moduleName:"consul-ui/templates/error.hbs"}}) -e.default=t})),define("consul-ui/templates/index",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"OcrlVtCJ",block:'{"symbols":["route","o"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[8,"outlet",[],[["@name","@model"],[[34,0],[32,1,["model"]]]],[["default"],[{"statements":[[2,"\\n "],[1,[30,[36,2],[[30,[36,1],null,null]],null]],[2,"\\n "]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["routeName","-outlet","component"]}',meta:{moduleName:"consul-ui/templates/index.hbs"}}) -e.default=t})),define("consul-ui/templates/loading",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"o38EFfaS",block:'{"symbols":[],"statements":[],"hasEval":false,"upvars":[]}',meta:{moduleName:"consul-ui/templates/loading.hbs"}}) -e.default=t})),define("consul-ui/templates/notfound",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"UjlaBDbX",block:'{"symbols":["route"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@login","@error"],[[32,1,["model","app","login","open"]],[30,[36,1],null,[["status","message"],[404,"Unable to find that page"]]]]],null],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n\\n"]],"hasEval":false,"upvars":["routeName","hash"]}',meta:{moduleName:"consul-ui/templates/notfound.hbs"}}) -e.default=t})),define("consul-ui/templates/oauth-provider-debug",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"Ngf+ijS4",block:'{"symbols":["route","item"],"statements":[[8,"route",[],[["@name"],[[34,0]]],[["default"],[{"statements":[[2,"\\n"],[10,"div"],[14,5,"width: 50%;margin: 0 auto;"],[12],[2,"\\n "],[10,"h1"],[12],[8,[32,1,["Title"]],[],[["@title"],["Mock OAuth Provider"]],null],[13],[2,"\\n "],[10,"main"],[12],[2,"\\n "],[10,"form"],[14,"method","GET"],[15,"action",[34,1]],[12],[2,"\\n"],[6,[37,3],[[30,[36,2],null,[["state","code"],["state-123456789/abcdefghijklmnopqrstuvwxyz","code-abcdefghijklmnopqrstuvwxyz/123456789"]]]],null,[["default"],[{"statements":[[2," "],[8,"text-input",[],[["@name","@label","@item","@help"],["state","State",[32,2],"The OIDC state value that will get passed through to Consul"]],null],[2,"\\n "],[8,"text-input",[],[["@name","@label","@item","@help"],["code","Code",[32,2],"The OIDC code value that will get passed through to Consul"]],null],[2,"\\n"]],"parameters":[2]}]]],[2," "],[8,"action",[],[["@type"],["submit"]],[["default"],[{"statements":[[2,"\\n Login\\n "]],"parameters":[]}]]],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n"],[13],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["routeName","redirect_uri","hash","let"]}',meta:{moduleName:"consul-ui/templates/oauth-provider-debug.hbs"}}) -e.default=t})),define("consul-ui/templates/settings",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var t=Ember.HTMLBars.template({id:"NoqsVAP9",block:'{"symbols":["route","loader","item","disclosure","notice"],"statements":[[8,"route",[],[["@name"],[[34,8]]],[["default"],[{"statements":[[2,"\\n "],[8,"data-loader",[],[["@src"],[[30,[36,9],["settings://consul:client"],null]]],[["default"],[{"statements":[[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["error"]],[["default"],[{"statements":[[2,"\\n "],[8,"app-error",[],[["@error","@login"],[[32,2,["error"]],[32,1,["model","app","login","open"]]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n\\n "],[8,"block-slot",[],[["@name"],["loaded"]],[["default"],[{"statements":[[2,"\\n"],[6,[37,12],[[30,[36,11],[[32,2,["data"]],[30,[36,10],null,[["blocking"],[true]]]],null]],null,[["default"],[{"statements":[[2," "],[8,"app-view",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"block-slot",[],[["@name"],["header"]],[["default"],[{"statements":[[2,"\\n "],[10,"h1"],[12],[2,"\\n "],[8,[32,1,["Title"]],[],[["@title"],["Settings"]],null],[2,"\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,"block-slot",[],[["@name"],["content"]],[["default"],[{"statements":[[2,"\\n "],[8,"notice",[],[["@type"],["info"]],[["default"],[{"statements":[[2,"\\n "],[8,[32,5,["Header"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"h2"],[12],[2,"Local Storage"],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[8,[32,5,["Body"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[10,"p"],[12],[2,"\\n These settings are immediately saved to local storage and persisted through browser usage.\\n "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[5]}]]],[2,"\\n "],[10,"form"],[12],[2,"\\n"],[6,[37,2],[[30,[36,3],[[30,[36,7],["CONSUL_UI_DISABLE_REALTIME"],null]],null]],null,[["default"],[{"statements":[[2," "],[8,"disclosure",[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,[32,4,["Details"]],[],[[],[]],[["default"],[{"statements":[[2,"\\n "],[8,"data-sink",[],[["@data","@sink","@onchange"],[[32,3],"settings://consul:client",[30,[36,1],[[32,0],[30,[36,0],[[32,4,["close"]]],null]],null]]],null],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "],[10,"fieldset"],[12],[2,"\\n "],[10,"h2"],[12],[2,"Blocking Queries"],[13],[2,"\\n "],[10,"p"],[12],[2,"Keep catalog info up-to-date without refreshing the page. Any changes made to services, nodes and intentions would be reflected in real time."],[13],[2,"\\n "],[10,"div"],[14,0,"type-toggle"],[12],[2,"\\n "],[10,"label"],[12],[2,"\\n "],[11,"input"],[24,3,"client[blocking]"],[16,"checked",[30,[36,2],[[32,3,["blocking"]],"checked"],null]],[24,4,"checkbox"],[4,[38,6],["change",[30,[36,5],[[30,[36,4],[[32,3],"blocking",[30,[36,3],[[32,3,["blocking"]]],null]],null],[30,[36,0],[[32,4,["open"]]],null]],null]],null],[12],[13],[2,"\\n "],[10,"span"],[12],[1,[30,[36,2],[[32,3,["blocking"]],"On","Off"],null]],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "],[13],[2,"\\n "]],"parameters":[4]}]]],[2,"\\n"]],"parameters":[]}]]],[2," "],[13],[2,"\\n "]],"parameters":[]}]]],[2,"\\n "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[3]}]]],[2," "]],"parameters":[]}]]],[2,"\\n"]],"parameters":[2]}]]],[2,"\\n"]],"parameters":[1]}]]],[2,"\\n"]],"hasEval":false,"upvars":["fn","action","if","not","set","queue","on","env","routeName","uri","hash","or","let"]}',meta:{moduleName:"consul-ui/templates/settings.hbs"}}) -e.default=t})),define("consul-ui/transforms/array",["exports","ember-data-model-fragments/transforms/array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/transforms/boolean",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.BooleanTransform}})})),define("consul-ui/transforms/date",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.DateTransform}})})),define("consul-ui/transforms/fragment-array",["exports","ember-data-model-fragments/transforms/fragment-array"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/transforms/fragment",["exports","ember-data-model-fragments/transforms/fragment"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n=t.default -e.default=n})),define("consul-ui/transforms/number",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.NumberTransform}})})),define("consul-ui/transforms/string",["exports","@ember-data/serializer/-private"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.StringTransform}})})),define("consul-ui/utils/ascend",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){const n=e.split("/") -return n.length>t?n.slice(0,-t).concat("").join("/"):""}})),define("consul-ui/utils/atob",["exports","base64-js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n="utf-8"){const r=t.default.toByteArray(e) -return new TextDecoder(n).decode(r)}})),define("consul-ui/utils/btoa",["exports","base64-js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){const n=(new TextEncoder).encode(e) -return t.default.fromByteArray(n)}})) -define("consul-ui/utils/calculate-position",["exports","ember-basic-dropdown/utils/calculate-position"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/utils/callable-type",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return"function"!=typeof e?function(){return e}:e}})),define("consul-ui/utils/create-fingerprinter",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t,n,r=JSON.stringify){return function(a,l,s,i,o){return function(u){if(null==(s=null==s?u[e]:s))throw new Error(`Unable to create fingerprint, missing foreignKey value. Looking for value in \`${e}\` got \`${s}\``) -const c=l.split(",").map((function(e){const t=Ember.get(u,e) -if(null==t||t.length<1)throw new Error(`Unable to create fingerprint, missing slug. Looking for value in \`${e}\` got \`${t}\``) -return t})) -return void 0===u[t]&&("*"===i&&(i="default"),u[t]=i),void 0===u[n]&&("*"===o&&(o="default"),u[n]=o),void 0===u[e]&&(u[e]=s),void 0===u[a]&&(u[a]=r([u[n],u[t],s].concat(c))),u}}}})),define("consul-ui/utils/distance",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){e=e.Coord,t=t.Coord -let n=0 -for(let s=0;s0&&(a=l) -return Math.round(1e5*a)/100}})),define("consul-ui/utils/dom/click-first-anchor",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n=t){return function(t,r="tr"){switch(t.target.nodeName.toLowerCase()){case"input":case"label":case"a":case"button":return}const a=e(r,t.target).querySelector("a") -a&&n(a)}} -const t=function(e){["mousedown","mouseup","click"].map((function(e){return new MouseEvent(e,{bubbles:!0,cancelable:!0,view:window})})).forEach((function(t){e.dispatchEvent(t)}))}})),define("consul-ui/utils/dom/closest",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){try{return t.closest(e)}catch(n){return}}})),define("consul-ui/utils/dom/create-listeners",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e=[]){return new t(e)} -class t{constructor(e=[]){this.listeners=e}add(e,n,r){let a -if("function"==typeof e)a=e -else if(e instanceof t)a=e.remove.bind(e) -else{let t="addEventListener",l="removeEventListener" -void 0===e[t]&&(t="on",l="off") -let s=n -"string"==typeof s&&(s={[n]:r}) -const i=Object.keys(s).map((function(n){return function(n,r){return e[t](n,r),function(){return e[l](n,r),r}}(n,s[n])})) -a=()=>i.map(e=>e())}return this.listeners.push(a),()=>{const e=this.listeners.findIndex((function(e){return e===a})) -return this.listeners.splice(e,1)[0]()}}remove(){const e=this.listeners.map(e=>e()) -return this.listeners.splice(0,this.listeners.length),e}}})),define("consul-ui/utils/dom/event-source/blocking",["exports"],(function(e){function t(e,t){if(null==e)return{} -var n,r,a=function(e,t){if(null==e)return{} -var n,r,a={},l=Object.keys(e) -for(r=0;r=0||(a[n]=e[n]) -return a}(e,t) -if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e) -for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,l=n()){const s=function(n,s={}){const{currentEvent:i}=s,o=t(s,["currentEvent"]) -e.apply(this,[e=>{const{createEvent:s}=e,i=t(e,["createEvent"]) -return n.apply(this,[i,this]).catch(l).then(t=>{if(t instanceof Error)return t -let n=("function"==typeof s?s:a)(t,e) -n.type||(n={type:"message",data:n}) -const l=Ember.get(n.data||{},"meta") -l&&(e.cursor=r(l.cursor,e.cursor),e.cacheControl=l.cacheControl,e.interval=l.interval),-1===(e.cacheControl||"").indexOf("no-store")&&(this.currentEvent=n),this.dispatchEvent(n) -const i=function(e){return function(t){return new Promise((function(n){setTimeout((function(){n(t)}),e.interval||2e3)}))}}(e,this.previousEvent) -return this.previousEvent=this.currentEvent,i(t)})},o]),void 0!==i&&(this.currentEvent=i),this.addEventListener("open",e=>{const t=e.target.getCurrentEvent() -void 0!==t&&this.dispatchEvent(t)})} -return s.prototype=Object.assign(Object.create(e.prototype,{constructor:{value:e,configurable:!0,writable:!0}}),{getCurrentEvent:function(){return this.currentEvent},getPreviousEvent:function(){return this.previousEvent}}),s},e.validateCursor=e.createErrorBackoff=void 0 -const n=function(e=3e3,t=Promise,n=setTimeout){return function(r){let a=Ember.get(r,"errors.firstObject.status")||Ember.get(r,"statusCode") -if(void 0!==a)switch(a=a.toString(),!0){case 0===a.indexOf("5")&&3===a.length&&"500"!==a:case"0"===a:return new t((function(t){n((function(){t(r)}),e)}))}throw r}} -e.createErrorBackoff=n -const r=function(e,t=null){let n=parseInt(e) -if(!isNaN(n))return null!==t&&n{if(!(this.readyState>1))return this.readyState=1,this.dispatchEvent({type:"open"}),l(this,n,r)}).catch(e=>{this.dispatchEvent(s(e)),this.readyState=2,this.dispatchEvent({type:"close",error:e})}).then(()=>{this.readyState=2})} -return i.prototype=Object.assign(Object.create(e.prototype,{constructor:{value:i,configurable:!0,writable:!0}}),{close:function(){switch(this.readyState){case 0:case 2:this.readyState=2 -break -default:this.readyState=3}return this}}),i},e.defaultRunner=void 0 -const t=function(e,n,r){if(!r(e))return e.source.bind(e)(n,e).then((function(){return t(e,n,r)})) -e.dispatchEvent({type:"close"})} -e.defaultRunner=t -const n=function(e){return new ErrorEvent("error",{error:e,message:e.message})},r=function(e){switch(e.readyState){case 2:case 3:return!0}return!1}})),define("consul-ui/utils/dom/event-source/index",["exports","consul-ui/utils/dom/create-listeners","consul-ui/utils/dom/event-target/rsvp","consul-ui/utils/dom/event-source/cache","consul-ui/utils/dom/event-source/proxy","consul-ui/utils/dom/event-source/resolver","consul-ui/utils/dom/event-source/callable","consul-ui/utils/dom/event-source/openable","consul-ui/utils/dom/event-source/blocking","consul-ui/utils/dom/event-source/storage","ember-concurrency","consul-ui/env"],(function(e,t,n,r,a,l,s,i,o,u,c,d){let m -switch(Object.defineProperty(e,"__esModule",{value:!0}),e.once=e.toPromise=e.fromPromise=e.cache=e.source=e.resolve=e.proxy=e.StorageEventSource=e.BlockingEventSource=e.OpenableEventSource=e.CallableEventSource=void 0,(0,d.env)("CONSUL_UI_REALTIME_RUNNER")){case"ec":m=function(e,t,n){return Ember.Object.extend({task:(0,c.task)((function*(){for(;!n(e);)yield e.source.bind(e)(t)}))}).create().get("task").perform()} -break -case"generator":m=async function(e,t,n){const r=function*(){for(;!n(e);)yield e.source.bind(e)(t)} -let a,l=r().next() -for(;!l.done;)a=await l.value,l=r().next() -return a} -break -case"async":m=async function(e,t,n){let r -for(;!n(e);)r=await e.source.bind(e)(t) -return r}}const p=(0,s.default)(n.default,Promise,m) -e.CallableEventSource=p -const f=(0,i.default)(p) -e.OpenableEventSource=f -const b=(0,o.default)(f) -e.BlockingEventSource=b -const h=(0,u.default)(n.default,Promise) -e.StorageEventSource=h -const v=(0,a.default)(Ember.ObjectProxy,Ember.ArrayProxy,t.default) -e.proxy=v -const y=(0,l.default)(Promise) -e.resolve=y -const g=function(e){return y(e,(0,t.default)()).then((function(t){return v(e,t)}))} -e.source=g -const O=(0,r.default)(g,b,Promise) -e.cache=O -e.fromPromise=function(e){return new p((function(){const t=this.dispatchEvent.bind(this),n=()=>{this.close()} -return e.then((function(e){n(),t({type:"message",data:e})})).catch((function(e){n(),t(function(e){return new ErrorEvent("error",{error:e,message:e.message})}(e))}))}))} -e.toPromise=function(e,t,n="message",r="error"){return new Promise((function(a,l){const s=function(e){a(e.data)},i=function(e){l(e.error)} -e.addEventListener(n,s),e.addEventListener(r,i),t((function(){"function"==typeof e.close&&e.close(),e.removeEventListener(n,s),e.removeEventListener(r,i)}))}))} -e.once=function(e,t,n=f){return new n((function(t,n){return e(t,n).then((function(e){n.dispatchEvent({type:"message",data:e}),n.close()})).catch((function(e){n.dispatchEvent({type:"error",error:e}),n.close()}))}),t)}})),define("consul-ui/utils/dom/event-source/openable",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e=EventSource){const t=function(t,n={}){e.apply(this,arguments),this.configuration=n} -return t.prototype=Object.assign(Object.create(e.prototype,{constructor:{value:t,configurable:!0,writable:!0}}),{open:function(){switch(this.readyState){case 3:this.readyState=1 -break -case 2:e.apply(this,[this.source,this.configuration])}return this}}),t}})),define("consul-ui/utils/dom/event-source/proxy",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n,r){return function(a,l=[]){let s=e,i="object" -return"string"!=typeof l&&void 0!==Ember.get(l,"length")&&(s=n,i="array",l=l.filter((function(e){return!Ember.get(e,"isDestroyed")&&!Ember.get(e,"isDeleted")&&Ember.get(e,"isLoaded")}))),void 0===t[i]&&(t[i]=s.extend({init:function(){this.listeners=r(),this.listeners.add(this._source,"message",e=>Ember.set(this,"content",e.data)),this._super(...arguments)},addEventListener:function(e,t){this.listeners.add(this._source,e,t)},getCurrentEvent:function(){return this._source.getCurrentEvent(...arguments)},removeEventListener:function(){return this._source.removeEventListener(...arguments)},dispatchEvent:function(){return this._source.dispatchEvent(...arguments)},close:function(){return this._source.close(...arguments)},open:function(){return this._source.open(...arguments)},willDestroy:function(){this._super(...arguments),this.close(),this.listeners.remove()}})),t[i].create({content:l,_source:a,configuration:a.configuration})}} -const t={}})),define("consul-ui/utils/dom/event-source/resolver",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e=Promise){return function(t,n){let r -return"function"==typeof t.getCurrentEvent&&(r=t.getCurrentEvent()),null!=r?e.resolve(r.data).then((function(e){return t.open(),e})):new e((function(e,r){n.add(t,"error",(function(e){n.remove(),e.target.close(),r(e.error)})),n.add(t,"message",(function(t){n.remove(),e(t.data)}))}))}}})),define("consul-ui/utils/dom/event-source/storage",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t=Promise){const n=function(e){if((void 0===e||e.key===this.configuration.key)&&1===this.readyState){const e=this.source(this.configuration) -t.resolve(e).then(e=>{this.configuration.cursor++,this._currentEvent={type:"message",data:e},this.dispatchEvent({type:"message",data:e})})}} -return class extends e{constructor(e,t){super(...arguments),this.readyState=2,this.target=t.target||window,this.name="storage",this.source=e,this.handler=n.bind(this),this.configuration=t,this.configuration.cursor=1,this.open()}dispatchEvent(){if(1===this.readyState)return super.dispatchEvent(...arguments)}close(){this.target.removeEventListener(this.name,this.handler),this.readyState=2}getCurrentEvent(){return this._currentEvent}open(){const e=this.readyState -this.readyState=1,1!==e&&(this.target.addEventListener(this.name,this.handler),this.handler())}}}})),define("consul-ui/utils/dom/event-target/event-target-shim/event",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.wrapEvent=function(e,t){return new(function e(t){if(null==t||t===Object.prototype)return l -let r=n.get(t) -null==r&&(r=function(e,t){const n=Object.keys(t) -if(0===n.length)return e -function r(t,n){e.call(this,t,n)}r.prototype=Object.create(e.prototype,{constructor:{value:r,configurable:!0,writable:!0}}) -for(let a=0;a{const n=function(e){return Object.entries(e).reduce((e,[t,n])=>(e[t]="function"!=typeof n?new Set(Object.keys(n)):null,e),{})}(e) -return r=>(r=function(e,n){return Object.keys(n).reduce((r,a)=>{const l=void 0===e[a]?[]:e[a] -return l.length>0&&(null!==n[a]?r[a]=[...t.default.intersection(n[a],new Set(l))]:r[a]=[...new Set(l)]),r},{})}(r,n),t=>function(e,t,n){return Object.entries(t).every(([t,r])=>{let a=n[t] -return"function"==typeof a?a(e,r):r.some(t=>a[t](e,t))})}(t,r,e))}})),define("consul-ui/utils/form/builder",["exports","ember-changeset","consul-ui/utils/form/changeset","ember-changeset-validations","consul-ui/utils/get-form-name-property"],(function(e,t,n,r,a){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e=l,t=a.default){return function(n="",r={}){const a={} -let l=null -const s={data:null,name:n,getName:function(){return this.name},setData:function(t){return l&&!Array.isArray(t)&&(t=e(t,l)),Ember.set(this,"data",t),this},getData:function(){return this.data},add:function(e){return a[e.getName()]=e,this},handleEvent:function(e,n){const a=e.target,l=t(n||a.name),s=l[0],i=l[1] -let o=r -if(s!==this.getName()){if(this.has(s))return this.form(s).handleEvent(e) -o=o[s]}const u=this.getData(),c="function"==typeof u.toJSON?u.toJSON():Ember.get(u,"data").toJSON() -if(!Object.keys(c).includes(i)){const e=new Error(i+" property doesn't exist") -throw e.target=a,e}let d=Ember.get(u,i) -if(Array.isArray(d)||void 0!==o[i]&&"string"==typeof o[i].type&&"array"===o[i].type.toLowerCase()){null==d&&(d=[]) -d[a.checked?"pushObject":"removeObject"](a.value),Ember.set(u,i,d)}else void 0===a.checked||"on"!==a.value.toLowerCase()&&"off"!==a.value.toLowerCase()?Ember.set(u,i,a.value):Ember.set(u,i,a.checked) -return this.validate()},reset:function(){return"function"==typeof this.getData().rollbackAttributes&&this.getData().rollbackAttributes(),this},clear:function(e={}){return"function"==typeof e?this.clearer=e:this.setData(this.clearer(e)).getData()},submit:function(e={}){if("function"==typeof e)return this.submitter=e -this.submitter(this.getData())},setValidators:function(e){return l=e,this},validate:function(){const e=this.getData() -return"function"==typeof e.validate&&e.validate(),this},addError:function(){const e=this.getData() -"function"==typeof e.addError&&e.addError(...arguments)},form:function(e){return null==e?this:a[e]},has:function(e){return void 0!==a[e]}} -return s.submit=s.submit.bind(s),s.reset=s.reset.bind(s),s}},e.defaultChangeset=void 0 -const l=function(e,a){return(0,t.Changeset)(e,(0,r.default)(a),a,{changeset:n.default})} -e.defaultChangeset=l})),define("consul-ui/utils/form/changeset",["exports","ember-changeset"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.EmberChangeset{pushObject(e,t){let n -void 0===Ember.get(this,"_changes."+e)?(n=Ember.get(this,"data."+e),n=n?n.toArray():[]):n=this.get(e).slice(0),n.push(t),this.set(""+e,n)}removeObject(e,t){let n -void 0===Ember.get(this,"_changes."+e)?(n=Ember.get(this,"data."+e),n=void 0===n?[]:n.toArray()):n=this.get(e).slice(0) -const r=n.indexOf(t);-1!==r&&n.splice(r,1),this.set(""+e,n)}}e.default=n})),define("consul-ui/utils/get-environment",["exports"],(function(e){function t(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;n"script"===t.initiatorType&&e===t.name)||{}}catch(n){return{}}}(o)),u.nextHopProtocol||"http/1.1" -case"CONSUL_HTTP_MAX_CONNECTIONS":switch(r=n("CONSUL_HTTP_PROTOCOL"),!0){case 0===r.indexOf("h2"):case 0===r.indexOf("hq"):case 0===r.indexOf("spdy"):return -default:return 5}}},d=function(t){let n -switch(e.environment){case"development":case"staging":case"coverage":case"test":if(n=function(e=r.cookie){return e.split(";").filter(e=>""!==e).map(e=>{const[t,...n]=e.trim().split("=") -return[t,n.join("=")]})}().reduce((function(e,[t,n]){switch(t){case"CONSUL_INTL_LOCALE":e.CONSUL_INTL_LOCALE=String(n).toLowerCase() -break -case"CONSUL_INTL_DEBUG":e.CONSUL_INTL_DEBUG=!!JSON.parse(String(n).toLowerCase()) -break -case"CONSUL_ACLS_ENABLE":e.CONSUL_ACLS_ENABLED=!!JSON.parse(String(n).toLowerCase()) -break -case"CONSUL_NSPACES_ENABLE":e.CONSUL_NSPACES_ENABLED=!!JSON.parse(String(n).toLowerCase()) -break -case"CONSUL_SSO_ENABLE":e.CONSUL_SSO_ENABLED=!!JSON.parse(String(n).toLowerCase()) -break -case"CONSUL_PARTITIONS_ENABLE":e.CONSUL_PARTITIONS_ENABLED=!!JSON.parse(String(n).toLowerCase()) -break -case"CONSUL_METRICS_PROXY_ENABLE":e.CONSUL_METRICS_PROXY_ENABLED=!!JSON.parse(String(n).toLowerCase()) -break -case"CONSUL_UI_CONFIG":e.CONSUL_UI_CONFIG=JSON.parse(n) -break -default:e[t]=n}return e}),{}),void 0!==n[t])return n[t]}return e[t]} -return function e(t){switch(t){case"CONSUL_UI_DISABLE_REALTIME":case"CONSUL_UI_DISABLE_ANCHOR_SELECTION":return!!JSON.parse(String(a(t)||0).toLowerCase())||d(t) -case"CONSUL_UI_REALTIME_RUNNER":return a(t)||d(t) -case"CONSUL_UI_CONFIG":case"CONSUL_DATACENTER_LOCAL":case"CONSUL_DATACENTER_PRIMARY":case"CONSUL_ACLS_ENABLED":case"CONSUL_NSPACES_ENABLED":case"CONSUL_SSO_ENABLED":case"CONSUL_PARTITIONS_ENABLED":case"CONSUL_METRICS_PROVIDER":case"CONSUL_METRICS_PROXY_ENABLE":case"CONSUL_SERVICE_DASHBOARD_URL":case"CONSUL_BASE_UI_URL":case"CONSUL_HTTP_PROTOCOL":case"CONSUL_HTTP_MAX_CONNECTIONS":return d(t)||c(t,e) -default:return d(t)}}}})),define("consul-ui/utils/get-form-name-property",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(-1!==e.indexOf("["))return e.match(/(.*)\[(.*)\]/).slice(1) -return["",e]}})),define("consul-ui/utils/helpers/call-if-type",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t){return function(n,r={}){return typeof n[0]!==e?n[0]:t(n[0],r)}}}})),define("consul-ui/utils/http/consul",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.HEADERS_SYMBOL=e.HEADERS_DIGEST=e.HEADERS_TOKEN=e.HEADERS_INDEX=e.HEADERS_DEFAULT_ACL_POLICY=e.HEADERS_DATACENTER=e.HEADERS_NAMESPACE=e.HEADERS_PARTITION=void 0 -e.HEADERS_PARTITION="X-Consul-Partition" -e.HEADERS_NAMESPACE="X-Consul-Namespace" -e.HEADERS_DATACENTER="X-Consul-Datacenter" -e.HEADERS_DEFAULT_ACL_POLICY="X-Consul-Default-Acl-Policy" -e.HEADERS_INDEX="X-Consul-Index" -e.HEADERS_TOKEN="X-Consul-Token" -e.HEADERS_DIGEST="X-Consul-ContentHash" -e.HEADERS_SYMBOL="__consul_ui_http_headers__"})) -define("consul-ui/utils/http/create-headers",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){return function(e){return e.reduce((function(e,t){const[n,...r]=t.split(":") -return r.length>0&&(e[n.trim()]=r.join(":").trim()),e}),{})}}})),define("consul-ui/utils/http/create-query-params",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e=encodeURIComponent){return function t(n,r){return Object.entries(n).reduce((function(n,[a,l]){if(void 0===l)return n -let s=e(a) -return void 0!==r&&(s=`${r}[${s}]`),null===l?n.concat(s):"object"==typeof l?n.concat(t(l,s)):n.concat(`${s}=${e(l)}`)}),[]).join("&")}}})),define("consul-ui/utils/http/create-url",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){return function(n,...r){let a=1 -return n.map((function(n,l){0===l&&(n=n.trimStart()),-1!==n.indexOf("?")&&1===a&&(a=2),-1!==n.indexOf("\n\n")&&(a=4),-1!==n.indexOf("\n")&&4!==a&&(a=3) -let s=void 0!==r[l]?r[l]:"" -switch(a){case 1:switch(!0){case"string"==typeof s:s=e(s) -break -case Array.isArray(s):s=s.map((function(t){return""+e(t)}),"").join("/")}break -case 2:switch(!0){case"string"==typeof s:s=e(s) -break -case"object"==typeof s:s=t(s)}break -case 4:return n.split("\n\n")[0]}return`${n}${s}`})).join("").trim()}}})),define("consul-ui/utils/http/error",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class t extends Error{constructor(e,t){super(t),this.statusCode=e}}e.default=t})),define("consul-ui/utils/http/headers",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.CONTENT_TYPE=e.CACHE_CONTROL=void 0 -e.CACHE_CONTROL="Cache-Control" -e.CONTENT_TYPE="Content-Type"})),define("consul-ui/utils/http/method",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.POST=e.DELETE=e.PUT=void 0 -e.PUT="PUT" -e.DELETE="DELETE" -e.POST="POST"})),define("consul-ui/utils/http/request",["exports","consul-ui/utils/dom/event-target/rsvp"],(function(e,t){function n(e,t){var n=Object.keys(e) -if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e) -t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function r(e){for(var t=1;t=200&&this.status<400){const e=r.converters["text json"](this.response) -r.success(t,e,this.status,this.statusText)}else r.error(t,this.responseText,this.status,this.statusText,this.error) -r.complete(this.status)}} -let l=r.url -l.endsWith("?")&&(l=l.substr(0,l.length-1)),a.open(r.method,l,!0),void 0===r.headers&&(r.headers={}) -const s=n(n({},r.headers),{},{"X-Requested-With":"XMLHttpRequest"}) -return Object.entries(s).forEach(([e,t])=>a.setRequestHeader(e,t)),r.beforeSend(a),a.send(r.body),a}}})),define("consul-ui/utils/intl/missing-message",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){const t=e.split(".").pop().split("-").join(" ") -return`${t.substr(0,1).toUpperCase()}${t.substr(1)}`}})),define("consul-ui/utils/isFolder",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e=""){return"/"===e.slice(-1)}})),define("consul-ui/utils/keyToArray",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t="/"){return(e===t?"":e).split(t)}})),define("consul-ui/utils/left-trim",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e="",t=""){return 0===e.indexOf(t)?e.substr(t.length):e}})),define("consul-ui/utils/maybe-call",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t){return function(n){return t.then((function(t){return t&&e(),n}))}}})),define("consul-ui/utils/merge-checks",["exports","mnemonist/multi-map"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=(e=[],n=!1,r=t.default)=>{const a=new r,l=e.shift().map(e=>(""===e.ServiceName&&a.set(e.Node,e.CheckID),e)).concat(e.reduce((e,t)=>void 0===t?e:e.concat(t.reduce((e,t)=>{if(""===t.ServiceName){if((a.get(t.Node)||[]).includes(t.CheckID))return e -a.set(t.Node,t.CheckID)}return e.push(t),e},[])),[])) -return n&&l.filter(e=>Ember.get(e,"Exposable")).forEach(e=>{Ember.set(e,"Exposed",n)}),l}})),define("consul-ui/utils/minimizeModel",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){if(Array.isArray(e))return e.filter((function(e){return!Ember.get(e,"isNew")})).map((function(e){return{ID:Ember.get(e,"ID"),Name:Ember.get(e,"Name")}}))}})),define("consul-ui/utils/non-empty-set",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t){return null==t||""===t?{}:{[e]:t}}}})),define("consul-ui/utils/path/resolve",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=(e,t)=>0===t.indexOf("/")?t:t.split("/").reduce((e,t,n,r)=>("."!==t&&(".."===t?e.pop():""===t&&n!==r.length-1||e.push(t)),e),e.split("/")).join("/")})),define("consul-ui/utils/promisedTimeout",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e=Promise,t=setTimeout){return function(n,r=function(){}){return new e(e=>{r(t((function(){e(n)}),n))})}}})),define("consul-ui/utils/right-trim",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e="",t=""){const n=e.length-t.length -if(n>=0)return e.lastIndexOf(t)===n?e.substr(0,n):e -return e}})),define("consul-ui/utils/routing/redirect-to",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t){const n=this.routeName.split(".").slice(0,-1).join(".") -this.replaceWith(`${n}.${e}`,t)}}})),define("consul-ui/utils/routing/transitionable",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,n={},r){null===e&&(e=r.lookup("route:application")) -let a,l=t(e,n),s=e -for(;a=s.parent;)l=l.concat(t(a,n)),s=a -return l.reverse(),function(e,t){return[e,...t]}(e.name||"application",l)} -const t=function(e,t={}){return(e.paramNames||[]).map((function(n){return void 0!==t[n]?t[n]:e.params[n]})).reverse()}})),define("consul-ui/utils/routing/walk",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(){t.apply(this,[e])}},e.dump=e.walk=void 0 -const t=function(e){Object.keys(e).forEach(n=>{if("_options"===n)return -const r=e[n]._options -let a -Object.keys(e[n]).length>1&&(a=function(){t.apply(this,[e[n]])}),this.route(n,r,a)}),void 0===e.index&&(e.index={_options:{path:""}})} -e.walk=t -e.dump=()=>{}})),define("consul-ui/utils/routing/wildcard",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t){let n=!1 -try{n=-1!==Ember.get(e,t)._options.path.indexOf("*")}catch(r){}return n}}})),define("consul-ui/utils/search/exact",["exports","consul-ui/utils/search/predicate"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{predicate(e){return e=e.toLowerCase(),(t="")=>-1!==t.toString().toLowerCase().indexOf(e)}}e.default=n})),define("consul-ui/utils/search/fuzzy",["exports","fuse.js"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=class{constructor(e,n){this.fuse=new t.default(e,{includeMatches:!0,shouldSort:!1,threshold:.4,keys:Object.keys(n.finders)||[],getFn:(e,t)=>(n.finders[t[0]](e)||[]).toString()})}search(e){return this.fuse.search(e).map(e=>e.item)}}})),define("consul-ui/utils/search/predicate",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=class{constructor(e,t){this.items=e,this.options=t}search(e){const t=this.predicate(e) -return this.items.filter(e=>Object.entries(this.options.finders).some(([n,r])=>{const a=r(e) -return Array.isArray(a)?a.some(t):t(a)}))}}})),define("consul-ui/utils/search/regexp",["exports","consul-ui/utils/search/predicate"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -class n extends t.default{predicate(e){let t -try{t=new RegExp(e,"i")}catch(n){return()=>!1}return e=>t.test(e)}}e.default=n})),define("consul-ui/utils/storage/local-storage",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e="",t=window.localStorage,n=JSON.stringify,r=JSON.parse,a=function(e){window.dispatchEvent(new StorageEvent("storage",{key:e}))}){const l=e+":" -return{getValue:function(e){let n=t.getItem(`${l}${e}`) -"string"!=typeof n&&(n='""') -try{n=r(n)}catch(a){n=""}return n},setValue:function(e,r){if(null===r)return this.removeValue(e) -try{r=n(r)}catch(i){r='""'}const s=t.setItem(`${l}${e}`,r) -return a(`${l}${e}`),s},removeValue:function(e){const n=t.removeItem(`${l}${e}`) -return a(`${l}${e}`),n},all:function(){return Object.keys(t).reduce((e,t)=>{if(0===t.indexOf(""+l)){const n=t.substr(l.length) -e[n]=this.getValue(n)}return e},{})}}}})),define("consul-ui/utils/templatize",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e=[]){return e.map(e=>"template-"+e)}})) -define("consul-ui/utils/ticker/index",["exports","consul-ui/utils/dom/event-target/rsvp"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.Tween=e.Ticker=void 0 -const n=class extends t.default{constructor(e=1e3/60){super(),this.setRate(e)}tick(){this.dispatchEvent({type:"tick",target:this})}setRate(e){clearInterval(this._interval),this._interval=setInterval(()=>this.tick(),e)}destroy(){clearInterval(this._interval)}},r=class extends t.default{static destroy(){void 0!==r.defaultTickerGroup&&(r.defaultTickerGroup.destroy(),delete r.defaultTickerGroup)}constructor(e){super(),this.setTickable(e)}tick(){this._tickable.tick()}setTickable(e){this._tickable=e,void 0===this._tickable.getTicker&&(this._tickable.getTicker=()=>this),this.tick=this._tickable.tick.bind(this._tickable)}getTickable(){return this._tickable}isAlive(){return this._isAlive}start(){this._isAlive=!0,this.getTickerGroup().addEventListener("tick",this.tick),this.dispatchEvent({type:"start",target:this})}stop(){this._isAlive=!1,this.getTickerGroup().removeEventListener("tick",this.tick),this.dispatchEvent({type:"stop",target:this})}activeCount(){return this.getTickerGroup().activeCount()}setTickerGroup(e){this._group=e}getTickerGroup(){return void 0===this._group&&(void 0===r.defaultTickerGroup&&(r.defaultTickerGroup=new l),this._group=r.defaultTickerGroup),this._group}} -e.Ticker=r -const a=function(e,t,n,r){return e/=r,n*(--e*e*e+1)+t},l=n,s=class extends class{constructor(){this._currentframe=1,this.setIncrement(1)}isAtStart(){return this._currentframe<=1}isAtEnd(){return this._currentframe>=this._totalframes}addEventListener(){return this.getTicker().addEventListener(...arguments)}removeEventListener(){return this.getTicker().removeEventListener(...arguments)}stop(){return this.gotoAndStop(this._currentframe)}play(){return this.gotoAndPlay(this._currentframe)}start(){return this.gotoAndPlay(this._currentframe)}gotoAndStop(e){this._currentframe=e -const t=this.getTicker() -return t.isAlive()&&t.stop(),this}gotoAndPlay(e){this._currentframe=e -const t=this.getTicker() -return t.isAlive()||t.start(),this}getTicker(){return void 0===this._ticker&&(this._ticker=new r(this)),this._ticker}setFrames(e){return this._totalframes=e,this}setIncrement(e){return this._increment=e,this}}{static destroy(){r.destroy()}static to(e,t,n,r){return Object.keys(t).forEach((function(n){t[n]-=e[n]})),new s(e,t,n,r).play()}constructor(e,t,n=12,r=a){super(),this.setMethod(r),this.setProps(t),this.setTarget(e),this.setFrames(n),this.tick=this.forwards}_process(){Object.keys(this._props).forEach(e=>{const t=this._method(this._currentframe,this._initialstate[e],this._props[e],this._totalframes) -Ember.set(this._target,e,t)})}forwards(){this._currentframe<=this._totalframes?(this._process(),this._currentframe+=this._increment):(this._currentframe=this._totalframes,this.getTicker().stop())}backwards(){this._currentframe-=this._increment,this._currentframe>=0?this._process():(this.run=this.forwards,this._currentframe=1,this.getTicker().stop())}gotoAndPlay(){return void 0===this._initialstate&&(this._initialstate={},Object.keys(this._props).forEach(e=>{this._initialstate[e]=this._target[e]})),super.gotoAndPlay(...arguments)}setTarget(e){this._target=e}getTarget(e){return this._target}setProps(e){return this._props=e,this}setMethod(e){this._method=e}} -e.Tween=s})),define("consul-ui/utils/titleize",["exports","ember-cli-string-helpers/utils/titleize"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})})),define("consul-ui/utils/tomography",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return function(t,n){var r=999999999,a=-999999999,l=[] -n.forEach((function(s){if(t==s.Node){var i=s.Segment -n.forEach((function(t){if(s.Node!=t.Node&&t.Segment==i){var n=e(s,t) -l.push({node:t.Node,distance:n,segment:i}),na&&(a=n)}})),l.sort((function(e,t){return e.distance-t.distance}))}})) -var s,i=l.length,o=Math.floor(i/2) -return i>0?s=i%2?l[o].distance:(l[o-1].distance+l[o].distance)/2:(s=0,r=0,a=0),{distances:l,min:Math.trunc(100*r)/100,median:Math.trunc(100*s)/100,max:Math.trunc(100*a)/100}}}})),define("consul-ui/utils/ucfirst",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e){return`${e.substr(0,1).toUpperCase()}${e.substr(1)}`}})),define("consul-ui/utils/update-array-object",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(e,t,n,r){r=void 0===r?Ember.get(t,n):r -const a=e.findIndex((function(e){return Ember.get(e,n)===r}));-1!==a&&(t instanceof Ember.ObjectProxy&&Ember.set(t,"content",e.objectAt(a)),e.replace(a,1,[t])) -return t}})),define("consul-ui/validations/intention-permission-http-header",["exports","ember-changeset-validations/validators","ember-changeset-conditional-validations/validators/sometimes"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=()=>({Name:[(0,t.validatePresence)(!0)],Value:(0,n.default)([(0,t.validatePresence)(!0)],(function(){return"Present"!==this.get("HeaderType")}))})})),define("consul-ui/validations/intention-permission",["exports","ember-changeset-validations/validators","ember-changeset-conditional-validations/validators/sometimes"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default=e=>({"*":(0,n.default)([(0,t.validatePresence)(!0)],(function(){const e=this.get("HTTP.Methods")||[],t=this.get("HTTP.Header")||[],n=this.get("HTTP.PathType")||"NoPath",r=this.get("HTTP.Path")||"" -return![0!==e.length,0!==t.length,"NoPath"!==n&&""!==r].includes(!0)})),Action:[(0,t.validateInclusion)({in:e["intention-permission"].Action.allowedValues})],HTTP:{Path:(0,n.default)([(0,t.validateFormat)({regex:/^\//})],(function(){const e=this.get("HTTP.PathType") -return void 0!==e&&"NoPath"!==e}))}})})),define("consul-ui/validations/intention",["exports","ember-changeset-validations/validators","ember-changeset-conditional-validations/validators/sometimes"],(function(e,t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var r={"*":(0,n.default)([(0,t.validatePresence)(!0)],(function(){const e=this.get("Action")||"",t=this.get("Permissions")||[] -return""===e&&0===t.length})),SourceName:[(0,t.validatePresence)(!0),(0,t.validateLength)({min:1})],DestinationName:[(0,t.validatePresence)(!0),(0,t.validateLength)({min:1})],Permissions:[(0,n.default)([(0,t.validateLength)({min:1})],(function(){return!this.get("Action")}))]} -e.default=r})),define("consul-ui/validations/kv",["exports","ember-changeset-validations/validators"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={Key:[(0,t.validatePresence)(!0),(0,t.validateLength)({min:1})]} -e.default=n})),define("consul-ui/validations/policy",["exports","ember-changeset-validations/validators"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={Name:(0,t.validateFormat)({regex:/^[A-Za-z0-9\-_]{1,128}$/})} -e.default=n})),define("consul-ui/validations/role",["exports","ember-changeset-validations/validators"],(function(e,t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -var n={Name:(0,t.validateFormat)({regex:/^[A-Za-z0-9\-_]{1,256}$/})} -e.default=n})),define("consul-ui/validations/token",["exports"],(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0 -e.default={}})),define("consul-ui/config/environment",[],(function(){try{var e="consul-ui/config/environment",t=document.querySelector('meta[name="'+e+'"]').getAttribute("content"),n={default:JSON.parse(decodeURIComponent(t))} -return Object.defineProperty(n,"__esModule",{value:!0}),n}catch(r){throw new Error('Could not read config from meta tag with name "'+e+'".')}})),runningTests||require("consul-ui/app").default.create({name:"consul-ui",version:"2.2.0+89053cb2"}) diff --git a/agent/uiserver/dist/assets/consul-ui/routes-debug-8f884a3e3f7105d43b7b4024db9b4c99.js b/agent/uiserver/dist/assets/consul-ui/routes-debug-8f884a3e3f7105d43b7b4024db9b4c99.js deleted file mode 100644 index 848a36db3b682..0000000000000 --- a/agent/uiserver/dist/assets/consul-ui/routes-debug-8f884a3e3f7105d43b7b4024db9b4c99.js +++ /dev/null @@ -1 +0,0 @@ -((e,r=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{r.routes=JSON.stringify(e)})({"oauth-provider-debug":{_options:{path:"/oauth-provider-debug",queryParams:{redirect_uri:"redirect_uri",response_type:"response_type",scope:"scope"}}}}) diff --git a/agent/uiserver/dist/assets/consul-ui/routes-e55bc65732ba7c0352d43313fd9563e6.js b/agent/uiserver/dist/assets/consul-ui/routes-e55bc65732ba7c0352d43313fd9563e6.js deleted file mode 100644 index 0168f3ce0a067..0000000000000 --- a/agent/uiserver/dist/assets/consul-ui/routes-e55bc65732ba7c0352d43313fd9563e6.js +++ /dev/null @@ -1 +0,0 @@ -((e,t=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{t.routes=JSON.stringify(e)})({dc:{_options:{path:"/:dc"},index:{_options:{path:"/",redirect:"../services"}},show:{_options:{path:"/overview",abilities:["access overview"]},serverstatus:{_options:{path:"/server-status",abilities:["access overview","read zones"]}},cataloghealth:{_options:{path:"/catalog-health",abilities:["access overview"]}},license:{_options:{path:"/license",abilities:["access overview","read licence"]}}},services:{_options:{path:"/services"},index:{_options:{path:"/",queryParams:{sortBy:"sort",status:"status",source:"source",kind:"kind",searchproperty:{as:"searchproperty",empty:[["Name","Tags"]]},search:{as:"filter",replace:!0}}}},show:{_options:{path:"/:name"},instances:{_options:{path:"/instances",queryParams:{sortBy:"sort",status:"status",source:"source",searchproperty:{as:"searchproperty",empty:[["Name","Node","Tags","ID","Address","Port","Service.Meta","Node.Meta"]]},search:{as:"filter",replace:!0}}}},intentions:{_options:{path:"/intentions"},index:{_options:{path:"",queryParams:{sortBy:"sort",access:"access",searchproperty:{as:"searchproperty",empty:[["SourceName","DestinationName"]]},search:{as:"filter",replace:!0}}}},edit:{_options:{path:"/:intention_id"}},create:{_options:{template:"../edit",path:"/create"}}},topology:{_options:{path:"/topology"}},services:{_options:{path:"/services",queryParams:{sortBy:"sort",instance:"instance",searchproperty:{as:"searchproperty",empty:[["Name","Tags"]]},search:{as:"filter",replace:!0}}}},upstreams:{_options:{path:"/upstreams",queryParams:{sortBy:"sort",instance:"instance",searchproperty:{as:"searchproperty",empty:[["Name","Tags"]]},search:{as:"filter",replace:!0}}}},routing:{_options:{path:"/routing"}},tags:{_options:{path:"/tags"}}},instance:{_options:{path:"/:name/instances/:node/:id",redirect:"./healthchecks"},healthchecks:{_options:{path:"/health-checks",queryParams:{sortBy:"sort",status:"status",check:"check",searchproperty:{as:"searchproperty",empty:[["Name","Node","CheckID","Notes","Output","ServiceTags"]]},search:{as:"filter",replace:!0}}}},upstreams:{_options:{path:"/upstreams",queryParams:{sortBy:"sort",search:{as:"filter",replace:!0},searchproperty:{as:"searchproperty",empty:[["DestinationName","LocalBindAddress","LocalBindPort"]]}}}},exposedpaths:{_options:{path:"/exposed-paths"}},addresses:{_options:{path:"/addresses"}},metadata:{_options:{path:"/metadata"}}},notfound:{_options:{path:"/:name/:node/:id"}}},nodes:{_options:{path:"/nodes"},index:{_options:{path:"",queryParams:{sortBy:"sort",status:"status",searchproperty:{as:"searchproperty",empty:[["Node","Address","Meta"]]},search:{as:"filter",replace:!0}}}},show:{_options:{path:"/:name"},healthchecks:{_options:{path:"/health-checks",queryParams:{sortBy:"sort",status:"status",kind:"kind",check:"check",searchproperty:{as:"searchproperty",empty:[["Name","Service","CheckID","Notes","Output","ServiceTags"]]},search:{as:"filter",replace:!0}}}},services:{_options:{path:"/service-instances",queryParams:{sortBy:"sort",status:"status",source:"source",searchproperty:{as:"searchproperty",empty:[["Name","Tags","ID","Address","Port","Service.Meta"]]},search:{as:"filter",replace:!0}}}},rtt:{_options:{path:"/round-trip-time"}},metadata:{_options:{path:"/metadata"}}}},intentions:{_options:{path:"/intentions"},index:{_options:{path:"/",queryParams:{sortBy:"sort",access:"access",searchproperty:{as:"searchproperty",empty:[["SourceName","DestinationName"]]},search:{as:"filter",replace:!0}}}},edit:{_options:{path:"/:intention_id",abilities:["read intentions"]}},create:{_options:{template:"../edit",path:"/create",abilities:["create intentions"]}}},kv:{_options:{path:"/kv"},index:{_options:{path:"/",queryParams:{sortBy:"sort",kind:"kind",search:{as:"filter",replace:!0}}}},folder:{_options:{template:"../index",path:"/*key"}},edit:{_options:{path:"/*key/edit"}},create:{_options:{template:"../edit",path:"/*key/create",abilities:["create kvs"]}},"root-create":{_options:{template:"../edit",path:"/create",abilities:["create kvs"]}}},acls:{_options:{path:"/acls",abilities:["access acls"]},policies:{_options:{path:"/policies",abilities:["read policies"]},edit:{_options:{path:"/:id"}},create:{_options:{path:"/create",abilities:["create policies"]}}},roles:{_options:{path:"/roles",abilities:["read roles"]},edit:{_options:{path:"/:id"}},create:{_options:{path:"/create",abilities:["create roles"]}}},tokens:{_options:{path:"/tokens",abilities:["access acls"]},edit:{_options:{path:"/:id"}},create:{_options:{path:"/create",abilities:["create tokens"]}}},"auth-methods":{_options:{path:"/auth-methods",abilities:["read auth-methods"]},show:{_options:{path:"/:id"},"auth-method":{_options:{path:"/auth-method"}},"binding-rules":{_options:{path:"/binding-rules"}},"nspace-rules":{_options:{path:"/nspace-rules"}}}}},"routing-config":{_options:{path:"/routing-config/:name"}}},index:{_options:{path:"/"}},settings:{_options:{path:"/settings"}},setting:{_options:{path:"/setting",redirect:"../settings"}},notfound:{_options:{path:"/*notfound"}}}) diff --git a/agent/uiserver/dist/assets/consul-ui/services-a17470cdfbd4a4096117ac0103802226.js b/agent/uiserver/dist/assets/consul-ui/services-a17470cdfbd4a4096117ac0103802226.js deleted file mode 100644 index b4e8774d509b7..0000000000000 --- a/agent/uiserver/dist/assets/consul-ui/services-a17470cdfbd4a4096117ac0103802226.js +++ /dev/null @@ -1 +0,0 @@ -((e,s=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{s.services=JSON.stringify(e)})({"route:basic":{class:"consul-ui/routing/route"},"service:intl":{class:"consul-ui/services/i18n"},"service:state":{class:"consul-ui/services/state-with-charts"},"auth-provider:oidc-with-url":{class:"consul-ui/services/auth-providers/oauth2-code-with-url-provider"},"component:consul/partition/selector":{class:"@glimmer/component"}}) diff --git a/agent/uiserver/dist/assets/consul-ui/services-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js b/agent/uiserver/dist/assets/consul-ui/services-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js deleted file mode 100644 index 51ed1f28b9eb5..0000000000000 --- a/agent/uiserver/dist/assets/consul-ui/services-debug-5a3f1d2e3954a05aa8383f02db31b8e6.js +++ /dev/null @@ -1 +0,0 @@ -((e,i=("undefined"!=typeof document?document.currentScript.dataset:module.exports))=>{i.services=JSON.stringify(e)})({"route:application":{class:"consul-ui/routing/application-debug"},"service:intl":{class:"consul-ui/services/i18n-debug"}}) diff --git a/agent/uiserver/dist/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js b/agent/uiserver/dist/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js deleted file mode 100644 index c37a05b42dfc5..0000000000000 --- a/agent/uiserver/dist/assets/css.escape-851839b3ea1d0b4eb4c7089446df5e9f.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */ -(function(e,t){"object"==typeof exports?module.exports=t(e):"function"==typeof define&&define.amd?define([],t.bind(e,e)):t(e)})("undefined"!=typeof global?global:this,(function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape -var t=function(e){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.") -for(var t,n=String(e),r=n.length,o=-1,S="",a=n.charCodeAt(0);++o=1&&t<=31||127==t||0==o&&t>=48&&t<=57||1==o&&t>=48&&t<=57&&45==a?"\\"+t.toString(16)+" ":(0!=o||1!=r||45!=t)&&(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?n.charAt(o):"\\"+n.charAt(o):S+="�" -return S} -return e.CSS||(e.CSS={}),e.CSS.escape=t,t})) diff --git a/agent/uiserver/dist/assets/encoding-cdb50fbdab6d4d3fdf574dd784f77d27.js b/agent/uiserver/dist/assets/encoding-cdb50fbdab6d4d3fdf574dd784f77d27.js deleted file mode 100644 index 19f436540f397..0000000000000 --- a/agent/uiserver/dist/assets/encoding-cdb50fbdab6d4d3fdf574dd784f77d27.js +++ /dev/null @@ -1,204 +0,0 @@ -(function(n){"use strict" -function e(n,e,r){return e<=n&&n<=r}"undefined"!=typeof module&&module.exports&&!n["encoding-indexes"]&&(n["encoding-indexes"]=require("./encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js")["encoding-indexes"]) -var r=Math.floor -function i(n){if(void 0===n)return{} -if(n===Object(n))return n -throw TypeError("Could not convert argument to dictionary")}function t(n){return 0<=n&&n<=127}var o=t -function s(n){this.tokens=[].slice.call(n),this.tokens.reverse()}s.prototype={endOfStream:function(){return!this.tokens.length},read:function(){return this.tokens.length?this.tokens.pop():-1},prepend:function(n){if(Array.isArray(n))for(var e=n;e.length;)this.tokens.push(e.pop()) -else this.tokens.push(n)},push:function(n){if(Array.isArray(n))for(var e=n;e.length;)this.tokens.unshift(e.shift()) -else this.tokens.unshift(n)}} -function a(n,e){if(n)throw TypeError("Decoder error") -return e||65533}function u(n){throw TypeError("The code point "+n+" could not be encoded.")}function l(n){return n=String(n).trim().toLowerCase(),Object.prototype.hasOwnProperty.call(c,n)?c[n]:null}var f=[{encodings:[{labels:["unicode-1-1-utf-8","utf-8","utf8"],name:"UTF-8"}],heading:"The Encoding"},{encodings:[{labels:["866","cp866","csibm866","ibm866"],name:"IBM866"},{labels:["csisolatin2","iso-8859-2","iso-ir-101","iso8859-2","iso88592","iso_8859-2","iso_8859-2:1987","l2","latin2"],name:"ISO-8859-2"},{labels:["csisolatin3","iso-8859-3","iso-ir-109","iso8859-3","iso88593","iso_8859-3","iso_8859-3:1988","l3","latin3"],name:"ISO-8859-3"},{labels:["csisolatin4","iso-8859-4","iso-ir-110","iso8859-4","iso88594","iso_8859-4","iso_8859-4:1988","l4","latin4"],name:"ISO-8859-4"},{labels:["csisolatincyrillic","cyrillic","iso-8859-5","iso-ir-144","iso8859-5","iso88595","iso_8859-5","iso_8859-5:1988"],name:"ISO-8859-5"},{labels:["arabic","asmo-708","csiso88596e","csiso88596i","csisolatinarabic","ecma-114","iso-8859-6","iso-8859-6-e","iso-8859-6-i","iso-ir-127","iso8859-6","iso88596","iso_8859-6","iso_8859-6:1987"],name:"ISO-8859-6"},{labels:["csisolatingreek","ecma-118","elot_928","greek","greek8","iso-8859-7","iso-ir-126","iso8859-7","iso88597","iso_8859-7","iso_8859-7:1987","sun_eu_greek"],name:"ISO-8859-7"},{labels:["csiso88598e","csisolatinhebrew","hebrew","iso-8859-8","iso-8859-8-e","iso-ir-138","iso8859-8","iso88598","iso_8859-8","iso_8859-8:1988","visual"],name:"ISO-8859-8"},{labels:["csiso88598i","iso-8859-8-i","logical"],name:"ISO-8859-8-I"},{labels:["csisolatin6","iso-8859-10","iso-ir-157","iso8859-10","iso885910","l6","latin6"],name:"ISO-8859-10"},{labels:["iso-8859-13","iso8859-13","iso885913"],name:"ISO-8859-13"},{labels:["iso-8859-14","iso8859-14","iso885914"],name:"ISO-8859-14"},{labels:["csisolatin9","iso-8859-15","iso8859-15","iso885915","iso_8859-15","l9"],name:"ISO-8859-15"},{labels:["iso-8859-16"],name:"ISO-8859-16"},{labels:["cskoi8r","koi","koi8","koi8-r","koi8_r"],name:"KOI8-R"},{labels:["koi8-ru","koi8-u"],name:"KOI8-U"},{labels:["csmacintosh","mac","macintosh","x-mac-roman"],name:"macintosh"},{labels:["dos-874","iso-8859-11","iso8859-11","iso885911","tis-620","windows-874"],name:"windows-874"},{labels:["cp1250","windows-1250","x-cp1250"],name:"windows-1250"},{labels:["cp1251","windows-1251","x-cp1251"],name:"windows-1251"},{labels:["ansi_x3.4-1968","ascii","cp1252","cp819","csisolatin1","ibm819","iso-8859-1","iso-ir-100","iso8859-1","iso88591","iso_8859-1","iso_8859-1:1987","l1","latin1","us-ascii","windows-1252","x-cp1252"],name:"windows-1252"},{labels:["cp1253","windows-1253","x-cp1253"],name:"windows-1253"},{labels:["cp1254","csisolatin5","iso-8859-9","iso-ir-148","iso8859-9","iso88599","iso_8859-9","iso_8859-9:1989","l5","latin5","windows-1254","x-cp1254"],name:"windows-1254"},{labels:["cp1255","windows-1255","x-cp1255"],name:"windows-1255"},{labels:["cp1256","windows-1256","x-cp1256"],name:"windows-1256"},{labels:["cp1257","windows-1257","x-cp1257"],name:"windows-1257"},{labels:["cp1258","windows-1258","x-cp1258"],name:"windows-1258"},{labels:["x-mac-cyrillic","x-mac-ukrainian"],name:"x-mac-cyrillic"}],heading:"Legacy single-byte encodings"},{encodings:[{labels:["chinese","csgb2312","csiso58gb231280","gb2312","gb_2312","gb_2312-80","gbk","iso-ir-58","x-gbk"],name:"GBK"},{labels:["gb18030"],name:"gb18030"}],heading:"Legacy multi-byte Chinese (simplified) encodings"},{encodings:[{labels:["big5","big5-hkscs","cn-big5","csbig5","x-x-big5"],name:"Big5"}],heading:"Legacy multi-byte Chinese (traditional) encodings"},{encodings:[{labels:["cseucpkdfmtjapanese","euc-jp","x-euc-jp"],name:"EUC-JP"},{labels:["csiso2022jp","iso-2022-jp"],name:"ISO-2022-JP"},{labels:["csshiftjis","ms932","ms_kanji","shift-jis","shift_jis","sjis","windows-31j","x-sjis"],name:"Shift_JIS"}],heading:"Legacy multi-byte Japanese encodings"},{encodings:[{labels:["cseuckr","csksc56011987","euc-kr","iso-ir-149","korean","ks_c_5601-1987","ks_c_5601-1989","ksc5601","ksc_5601","windows-949"],name:"EUC-KR"}],heading:"Legacy multi-byte Korean encodings"},{encodings:[{labels:["csiso2022kr","hz-gb-2312","iso-2022-cn","iso-2022-cn-ext","iso-2022-kr"],name:"replacement"},{labels:["utf-16be"],name:"UTF-16BE"},{labels:["utf-16","utf-16le"],name:"UTF-16LE"},{labels:["x-user-defined"],name:"x-user-defined"}],heading:"Legacy miscellaneous encodings"}],c={} -f.forEach((function(n){n.encodings.forEach((function(n){n.labels.forEach((function(e){c[e]=n}))}))})) -var d,h,g={},p={} -function _(n,e){return e&&e[n]||null}function b(n,e){var r=e.indexOf(n) -return-1===r?null:r}function w(e){if(!("encoding-indexes"in n))throw Error("Indexes missing. Did you forget to include encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js first?") -return n["encoding-indexes"][e]}function m(n,e){if(!(this instanceof m))throw TypeError("Called as a function. Did you forget 'new'?") -n=void 0!==n?String(n):"utf-8",e=i(e),this._encoding=null,this._decoder=null,this._ignoreBOM=!1,this._BOMseen=!1,this._error_mode="replacement",this._do_not_flush=!1 -var r=l(n) -if(null===r||"replacement"===r.name)throw RangeError("Unknown encoding: "+n) -if(!p[r.name])throw Error("Decoder not present. Did you forget to include encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js first?") -return this._encoding=r,Boolean(e.fatal)&&(this._error_mode="fatal"),Boolean(e.ignoreBOM)&&(this._ignoreBOM=!0),Object.defineProperty||(this.encoding=this._encoding.name.toLowerCase(),this.fatal="fatal"===this._error_mode,this.ignoreBOM=this._ignoreBOM),this}function v(e,r){if(!(this instanceof v))throw TypeError("Called as a function. Did you forget 'new'?") -r=i(r),this._encoding=null,this._encoder=null,this._do_not_flush=!1,this._fatal=Boolean(r.fatal)?"fatal":"replacement" -if(Boolean(r.NONSTANDARD_allowLegacyEncoding)){var t=l(e=void 0!==e?String(e):"utf-8") -if(null===t||"replacement"===t.name)throw RangeError("Unknown encoding: "+e) -if(!g[t.name])throw Error("Encoder not present. Did you forget to include encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js first?") -this._encoding=t}else this._encoding=l("utf-8"),void 0!==e&&"console"in n&&console.warn("TextEncoder constructor called with encoding label, which is ignored.") -return Object.defineProperty||(this.encoding=this._encoding.name.toLowerCase()),this}function y(n){var r=n.fatal,i=0,t=0,o=0,s=128,u=191 -this.handler=function(n,l){if(-1===l&&0!==o)return o=0,a(r) -if(-1===l)return-1 -if(0===o){if(e(l,0,127))return l -if(e(l,194,223))o=1,i=31&l -else if(e(l,224,239))224===l&&(s=160),237===l&&(u=159),o=2,i=15&l -else{if(!e(l,240,244))return a(r) -240===l&&(s=144),244===l&&(u=143),o=3,i=7&l}return null}if(!e(l,s,u))return i=o=t=0,s=128,u=191,n.prepend(l),a(r) -if(s=128,u=191,i=i<<6|63&l,(t+=1)!==o)return null -var f=i -return i=o=t=0,f}}function x(n){n.fatal -this.handler=function(n,r){if(-1===r)return-1 -if(o(r))return r -var i,t -e(r,128,2047)?(i=1,t=192):e(r,2048,65535)?(i=2,t=224):e(r,65536,1114111)&&(i=3,t=240) -for(var s=[(r>>6*i)+t];i>0;){var a=r>>6*(i-1) -s.push(128|63&a),i-=1}return s}}function O(n,e){var r=e.fatal -this.handler=function(e,i){if(-1===i)return-1 -if(t(i))return i -var o=n[i-128] -return null===o?a(r):o}}function k(n,e){e.fatal -this.handler=function(e,r){if(-1===r)return-1 -if(o(r))return r -var i=b(r,n) -return null===i&&u(r),i+128}}function E(n){var r=n.fatal,i=0,o=0,s=0 -this.handler=function(n,u){if(-1===u&&0===i&&0===o&&0===s)return-1 -var l -if(-1!==u||0===i&&0===o&&0===s||(i=0,o=0,s=0,a(r)),0!==s){l=null,e(u,48,57)&&(l=function(n){if(n>39419&&n<189e3||n>1237575)return null -if(7457===n)return 59335 -var e,r=0,i=0,t=w("gb18030-ranges") -for(e=0;e>8,i=255&n -return e?[r,i]:[i,r]}function F(n,r){var i=r.fatal,t=null,o=null -this.handler=function(r,s){if(-1===s&&(null!==t||null!==o))return a(i) -if(-1===s&&null===t&&null===o)return-1 -if(null===t)return t=s,null -var u -if(u=n?(t<<8)+s:(s<<8)+t,t=null,null!==o){var l=o -return o=null,e(u,56320,57343)?65536+1024*(l-55296)+(u-56320):(r.prepend(D(u,n)),a(i))}return e(u,55296,56319)?(o=u,null):e(u,56320,57343)?a(i):u}}function J(n,r){r.fatal -this.handler=function(r,i){if(-1===i)return-1 -if(e(i,0,65535))return D(i,n) -var t=D(55296+(i-65536>>10),n),o=D(56320+(i-65536&1023),n) -return t.concat(o)}}function K(n){n.fatal -this.handler=function(n,e){return-1===e?-1:t(e)?e:63360+e-128}}function R(n){n.fatal -this.handler=function(n,r){return-1===r?-1:o(r)?r:e(r,63360,63487)?r-63360+128:u(r)}}Object.defineProperty&&(Object.defineProperty(m.prototype,"encoding",{get:function(){return this._encoding.name.toLowerCase()}}),Object.defineProperty(m.prototype,"fatal",{get:function(){return"fatal"===this._error_mode}}),Object.defineProperty(m.prototype,"ignoreBOM",{get:function(){return this._ignoreBOM}})),m.prototype.decode=function(n,e){var r -r="object"==typeof n&&n instanceof ArrayBuffer?new Uint8Array(n):"object"==typeof n&&"buffer"in n&&n.buffer instanceof ArrayBuffer?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(0),e=i(e),this._do_not_flush||(this._decoder=p[this._encoding.name]({fatal:"fatal"===this._error_mode}),this._BOMseen=!1),this._do_not_flush=Boolean(e.stream) -for(var t,o=new s(r),a=[];;){var u=o.read() -if(-1===u)break -if(-1===(t=this._decoder.handler(o,u)))break -null!==t&&(Array.isArray(t)?a.push.apply(a,t):a.push(t))}if(!this._do_not_flush){do{if(-1===(t=this._decoder.handler(o,o.read())))break -null!==t&&(Array.isArray(t)?a.push.apply(a,t):a.push(t))}while(!o.endOfStream()) -this._decoder=null}return function(n){var e,r -return e=["UTF-8","UTF-16LE","UTF-16BE"],r=this._encoding.name,-1===e.indexOf(r)||this._ignoreBOM||this._BOMseen||(n.length>0&&65279===n[0]?(this._BOMseen=!0,n.shift()):n.length>0&&(this._BOMseen=!0)),function(n){for(var e="",r=0;r>10),56320+(1023&i)))}return e}(n)}.call(this,a)},Object.defineProperty&&Object.defineProperty(v.prototype,"encoding",{get:function(){return this._encoding.name.toLowerCase()}}),v.prototype.encode=function(n,e){n=void 0===n?"":String(n),e=i(e),this._do_not_flush||(this._encoder=g[this._encoding.name]({fatal:"fatal"===this._fatal})),this._do_not_flush=Boolean(e.stream) -for(var r,t=new s(function(n){for(var e=String(n),r=e.length,i=0,t=[];i57343)t.push(o) -else if(56320<=o&&o<=57343)t.push(65533) -else if(55296<=o&&o<=56319)if(i===r-1)t.push(65533) -else{var s=e.charCodeAt(i+1) -if(56320<=s&&s<=57343){var a=1023&o,u=1023&s -t.push(65536+(a<<10)+u),i+=1}else t.push(65533)}i+=1}return t}(n)),o=[];;){var a=t.read() -if(-1===a)break -if(-1===(r=this._encoder.handler(t,a)))break -Array.isArray(r)?o.push.apply(o,r):o.push(r)}if(!this._do_not_flush){for(;-1!==(r=this._encoder.handler(t,t.read()));)Array.isArray(r)?o.push.apply(o,r):o.push(r) -this._encoder=null}return new Uint8Array(o)},g["UTF-8"]=function(n){return new x(n)},p["UTF-8"]=function(n){return new y(n)},"encoding-indexes"in n&&f.forEach((function(n){"Legacy single-byte encodings"===n.heading&&n.encodings.forEach((function(n){var e=n.name,r=w(e.toLowerCase()) -p[e]=function(n){return new O(r,n)},g[e]=function(n){return new k(r,n)}}))})),p.GBK=function(n){return new E(n)},g.GBK=function(n){return new j(n,!0)},g.gb18030=function(n){return new j(n)},p.gb18030=function(n){return new E(n)},g.Big5=function(n){return new S(n)},p.Big5=function(n){return new B(n)},g["EUC-JP"]=function(n){return new I(n)},p["EUC-JP"]=function(n){return new T(n)},g["ISO-2022-JP"]=function(n){return new C(n)},p["ISO-2022-JP"]=function(n){return new U(n)},g.Shift_JIS=function(n){return new L(n)},p.Shift_JIS=function(n){return new A(n)},g["EUC-KR"]=function(n){return new P(n)},p["EUC-KR"]=function(n){return new M(n)},g["UTF-16BE"]=function(n){return new J(!0,n)},p["UTF-16BE"]=function(n){return new F(!0,n)},g["UTF-16LE"]=function(n){return new J(!1,n)},p["UTF-16LE"]=function(n){return new F(!1,n)},g["x-user-defined"]=function(n){return new R(n)},p["x-user-defined"]=function(n){return new K(n)},n.TextEncoder||(n.TextEncoder=v),n.TextDecoder||(n.TextDecoder=m),"undefined"!=typeof module&&module.exports&&(module.exports={TextEncoder:n.TextEncoder,TextDecoder:n.TextDecoder,EncodingIndexes:n["encoding-indexes"]})})(this||{}) diff --git a/agent/uiserver/dist/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js b/agent/uiserver/dist/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js deleted file mode 100644 index da7db4172f637..0000000000000 --- a/agent/uiserver/dist/assets/encoding-indexes-75eea16b259716db4fd162ee283d2ae5.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(l){"use strict" -"undefined"!=typeof module&&module.exports&&(module.exports=l),l["encoding-indexes"]={big5:[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,17e4,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14e3,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132e3,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22e3,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21e3,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,3e4,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23e3,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32e3,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36e3,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26e3,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37e3,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39e3,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38e3,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28e3,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35e3,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27e3,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34e3,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25e3,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24e3,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,4e4,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188],"euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46e3,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48e3,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49e3,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,5e4,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51e3,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45e3,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47e3,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52e3,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55e3,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53e3,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54e3,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32e3,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37e3,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36e3,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26e3,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21e3,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39e3,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,3e4,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64e3,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27e3,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],gb18030:[19970,19972,19973,19974,19983,19986,19991,19999,2e4,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22e3,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24e3,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29e3,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59e3,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31e3,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25e3,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32e3,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,3e4,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35e3,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36e3,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21e3,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34e3,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28e3,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37e3,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23e3,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38e3,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27e3,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33e3,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26e3,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39e3,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,4e4,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58e3,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565],"gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189e3,65536]],jis0208:[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21e3,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39e3,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32e3,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,3e4,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26e3,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36e3,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27e3,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34e3,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38e3,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],jis0212:[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25e3,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37e3,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],ibm866:[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160],"iso-8859-2":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729],"iso-8859-3":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729],"iso-8859-4":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729],"iso-8859-5":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119],"iso-8859-6":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null],"iso-8859-7":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null],"iso-8859-8":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null],"iso-8859-10":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312],"iso-8859-13":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217],"iso-8859-14":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255],"iso-8859-15":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255],"iso-8859-16":[128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255],"koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066],"koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066],macintosh:[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711],"windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null],"windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729],"windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103],"windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255],"windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null],"windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255],"windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null],"windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746],"windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729],"windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255],"x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364]}})(this||{}) diff --git a/agent/uiserver/dist/assets/favicon.ico b/agent/uiserver/dist/assets/favicon.ico deleted file mode 100644 index 21fe29b3b0f8237c494ebd0e4622293d28988d47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 zcmeHLU8ogR6do<@4@@fhgX%;m7ka47YWAGt?Uou{N{dJ`t)Prvq9AH!&b`-g40mE3K*<|{?V)U3R)Ct#?v1xchDzB&(n`C&!a4C5IBR=!%-H;1#M0S@W|r<&wIy?1Xm_-WSn|cSUpw)A&NI zWxYhl_&f;P){su#ht53-zffBl7sv55$bH6l6_ z_HSMmUw}J*8sl-MBMAN{;os}&Y>a3BAy&?@k9p4oiJsz&_sEy7kiXUK9rHwVH}5ed zxs0bc%f=%7`ba8%a2Dt()1Y%Dd(biLRBmUPSx9nmx5wFUO^{++sE4zB`Z{n9UtN1Y z^2hp_PD1})!s%z$d3y8iJwSP~fH8nU`84?~H*kRK0M@@E z*L+2_V5k(`LpiQ{EzO+1qn^T>`L5~R<CMvG$JF!j_V)Fr>l@zp zo)M>dQ~MexC@Ht&9LKuV-QYuRDvQxOCM36>QLTgR_1cp@6U$9%i;xm`U*Q_ddnt%m z+3-T#c85|P7%PB(EG46H&+3%xsJC#p3xa|8LOu!IGwPNDo8Q*zMGV_^eJ~hb#B}XI za;U#i~NN(R+Hq9r-OlIo?c==J@wh#oZQ#yQsObnVQu=T7Q7-4|-SiJ#sq zZ2lpupUy%x-^9}i4sv#rY`+){n)s-WH|v(Cr>ZsvgC}N9*2AF=zuK%{Z7|u&xNh>C z9=9xqAbh_is~_umIt|b1J;9$JBQE~NJ3LA`IZrNRd_?z3y;Q9il4o2ye1&B(1WlCI zug>YcFw+sFcudn$k0@W)X?PC&Pee;S8e;IdWNxeXd7mN9Q%%cMA@Avs`a9TqHcbop zw)#b<r>c$hI)Xh&^@%UawX#MzPz5K zmVf1bgAF_K-gYN;;l4g2+4PN@$Cp=s@SV6Rk0%eGja~GHFC!LyHhrh-GC=cXlMj;o zp?2oI9i2aU??Uawd;T{2EvVDw%_%?N-j5h0RO`Ybr5mzDfIzK+gka5Bv|beAqYu diff --git a/agent/uiserver/dist/assets/favicon.svg b/agent/uiserver/dist/assets/favicon.svg deleted file mode 100644 index 61b10f81cbb8c..0000000000000 --- a/agent/uiserver/dist/assets/favicon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - favicon - - - - \ No newline at end of file diff --git a/agent/uiserver/dist/assets/init-21ea65714d133467454b601efc15e2dd.js b/agent/uiserver/dist/assets/init-21ea65714d133467454b601efc15e2dd.js deleted file mode 100644 index 0befe4545f14d..0000000000000 --- a/agent/uiserver/dist/assets/init-21ea65714d133467454b601efc15e2dd.js +++ /dev/null @@ -1,5 +0,0 @@ -(function(e){const t=new Map(Object.entries(JSON.parse(e.querySelector("[data-consul-ui-fs]").textContent))),n=function(t){var n=e.createElement("script") -n.src=t,e.body.appendChild(n)} -"TextDecoder"in window||(n(t.get(["text-encoding","encoding-indexes"].join("/")+".js")),n(t.get(["text-encoding","encoding"].join("/")+".js"))),window.CSS&&window.CSS.escape||n(t.get(["css.escape","css.escape"].join("/")+".js")) -try{const t=e.querySelector('[name="consul-ui/config/environment"]'),n=JSON.parse(e.querySelector("[data-consul-ui-config]").textContent),o=JSON.parse(decodeURIComponent(t.getAttribute("content"))),c="string"!=typeof n.ContentPath?"":n.ContentPath -c.length>0&&(o.rootURL=c),t.setAttribute("content",encodeURIComponent(JSON.stringify(o)))}catch(o){throw new Error("Unable to parse consul-ui settings: "+o.message)}})(document) diff --git a/agent/uiserver/dist/assets/loading-cylon-pink.svg b/agent/uiserver/dist/assets/loading-cylon-pink.svg deleted file mode 100644 index 1f2d83ae3f914..0000000000000 --- a/agent/uiserver/dist/assets/loading-cylon-pink.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/agent/uiserver/dist/assets/metrics-providers/consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js b/agent/uiserver/dist/assets/metrics-providers/consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js deleted file mode 100644 index e6a808bcbf50e..0000000000000 --- a/agent/uiserver/dist/assets/metrics-providers/consul-31d7e3b0ef7c58d62338c7d7aeaaf545.js +++ /dev/null @@ -1,4 +0,0 @@ -(function(r){const e=["init","serviceRecentSummarySeries","serviceRecentSummaryStats","upstreamRecentSummaryStats","downstreamRecentSummaryStats"] -r.consul=new class{constructor(){this.registry={},this.providers={}}registerMetricsProvider(r,t){for(var i of e)if("function"!=typeof t[i])throw new Error(`Can't register metrics provider '${r}': missing ${i} method.`) -this.registry[r]=t}getMetricsProvider(r,e){if(!(r in this.registry))throw new Error(`Metrics Provider '${r}' is not registered.`) -return r in this.providers||(this.providers[r]=Object.create(this.registry[r]),this.providers[r].init(e)),this.providers[r]}}})(window) diff --git a/agent/uiserver/dist/assets/metrics-providers/prometheus-5f31ba3b7ffd850fa916a0a76933e968.js b/agent/uiserver/dist/assets/metrics-providers/prometheus-5f31ba3b7ffd850fa916a0a76933e968.js deleted file mode 100644 index 073ed767a5070..0000000000000 --- a/agent/uiserver/dist/assets/metrics-providers/prometheus-5f31ba3b7ffd850fa916a0a76933e968.js +++ /dev/null @@ -1,43 +0,0 @@ -(function(){var e={unitSuffix:"",labels:{},data:[]},t={options:{},init:function(e){if(this.options=e,!this.options.metrics_proxy_enabled)throw new Error("prometheus metrics provider currently requires the ui_config.metrics_proxy to be configured in the Consul agent.")},httpGet:function(e,t,r){if(t){var s=-1!==e.indexOf("?")?"&":"?" -e=e+s+Object.keys(t).map((function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])})).join("&")}return this.options.fetch(e,{headers:r||{}}).then((function(e){if(e.ok)return e.json() -var t=new Error("HTTP Error: "+e.statusText) -throw t.statusCode=e.status,t}))},serviceRecentSummarySeries:function(e,t,r,s,n){var a=(new Date).getTime()/1e3 -return n.start=a-900,n.end=a,this.hasL7Metrics(s)?this.fetchRequestRateSeries(e,t,r,n):this.fetchDataRateSeries(e,t,r,n)},serviceRecentSummaryStats:function(e,t,r,s,n){var a=[] -return this.hasL7Metrics(s)?(a.push(this.fetchRPS(e,t,r,"service",n)),a.push(this.fetchER(e,t,r,"service",n)),a.push(this.fetchPercentile(50,e,t,r,"service",n)),a.push(this.fetchPercentile(99,e,t,r,"service",n))):(a.push(this.fetchConnRate(e,t,r,"service",n)),a.push(this.fetchServiceRx(e,t,r,"service",n)),a.push(this.fetchServiceTx(e,t,r,"service",n)),a.push(this.fetchServiceNoRoute(e,t,r,"service",n))),this.fetchStats(a)},upstreamRecentSummaryStats:function(e,t,r,s){return this.fetchRecentSummaryStats(e,t,r,"upstream",s)},downstreamRecentSummaryStats:function(e,t,r,s){return this.fetchRecentSummaryStats(e,t,r,"downstream",s)},fetchRecentSummaryStats:function(e,t,r,s,n){var a=[] -return a.push(this.fetchRPS(e,t,r,s,n)),a.push(this.fetchER(e,t,r,s,n)),a.push(this.fetchPercentile(50,e,t,r,s,n)),a.push(this.fetchPercentile(99,e,t,r,s,n)),a.push(this.fetchConnRate(e,t,r,s,n)),a.push(this.fetchServiceRx(e,t,r,s,n)),a.push(this.fetchServiceTx(e,t,r,s,n)),a.push(this.fetchServiceNoRoute(e,t,r,s,n)),this.fetchStatsGrouped(a)},hasL7Metrics:function(e){return"http"===e||"http2"===e||"grpc"===e},fetchStats:function(e){return Promise.all(e).then((function(t){for(var r={stats:[]},s=0;s${c} request rate averaged over the last 15 minutes`,r,this.groupByInfix(n))},fetchER:function(e,t,s,n){var a=this.makeHTTPSelector(e,t,s,n),c=this.makeSubject(e,t,s,n),i="" -"upstream"==n?i+=" by (consul_upstream_service,consul_upstream_datacenter,consul_upstream_namespace)":"downstream"==n&&(i+=" by (consul_source_service,consul_source_datacenter,consul_source_namespace)") -var u=this.metricPrefixHTTP(n),o=`sum(rate(${u}_xx{${a},envoy_response_code_class="5"}[15m]))${i}/sum(rate(${u}_xx{${a}}[15m]))${i}` -return this.fetchStat(o,"ER",`Percentage of ${c} requests which were 5xx status over the last 15 minutes`,(function(e){return r(e)+"%"}),this.groupByInfix(n))},fetchPercentile:function(e,t,r,n,a){var c=this.makeHTTPSelector(t,r,n,a),i=this.makeSubject(t,r,n,a),u="le" -"upstream"==a?u+=",consul_upstream_service,consul_upstream_datacenter,consul_upstream_namespace":"downstream"==a&&(u+=",consul_source_service,consul_source_datacenter,consul_source_namespace") -var o=`histogram_quantile(${e/100}, sum by(${u}) (rate(${this.metricPrefixHTTP(a)}_time_bucket{${c}}[15m])))` -return this.fetchStat(o,"P"+e,`${i} ${e}th percentile request service time over the last 15 minutes`,s,this.groupByInfix(a))},fetchConnRate:function(e,t,s,n){var a=this.makeTCPSelector(e,t,s,n),c=this.makeSubject(e,t,s,n),i=`sum(rate(${this.metricPrefixTCP(n)}_total{${a}}[15m]))` -return this.fetchStat(this.groupQuery(n,i),"CR",`${c} inbound TCP connections per second averaged over the last 15 minutes`,r,this.groupByInfix(n))},fetchServiceRx:function(e,t,s,n){var a=this.makeTCPSelector(e,t,s,n),c=this.makeSubject(e,t,s,n),i=`8 * sum(rate(${this.metricPrefixTCP(n)}_rx_bytes_total{${a}}[15m]))` -return this.fetchStat(this.groupQuery(n,i),"RX",`${c} received bits per second averaged over the last 15 minutes`,r,this.groupByInfix(n))},fetchServiceTx:function(e,t,s,n){var a=this.makeTCPSelector(e,t,s,n),c=this.makeSubject(e,t,s,n),i=`8 * sum(rate(${this.metricPrefixTCP(n)}_tx_bytes_total{${a}}[15m]))` -return this.fetchStat(this.groupQuery(n,i),"TX",`${c} transmitted bits per second averaged over the last 15 minutes`,r,this.groupByInfix(n))},fetchServiceNoRoute:function(e,t,s,n){var a=this.makeTCPSelector(e,t,s,n),c=this.makeSubject(e,t,s,n),i="_no_route" -"downstream"==n&&(i="_connect_fail") -var u=`sum(rate(${this.metricPrefixTCP(n)}${i}{${a}}[15m]))` -return this.fetchStat(this.groupQuery(n,u),"NR",`${c} unroutable (failed) connections per second averaged over the last 15 minutes`,r,this.groupByInfix(n))},fetchStat:function(e,t,r,s,n){n||(e+=" OR on() vector(0)") -var a={query:e,time:(new Date).getTime()/1e3} -return this.httpGet("/api/v1/query",a).then((function(e){if(!n){var a=parseFloat(e.data.result[0].value[1]) -return{label:t,desc:r,value:isNaN(a)?"-":s(a)}}for(var c={},i=0;i=100?e.toPrecision(3):e<1?e.toFixed(2):e.toPrecision(2)):e>=1e3&&e<1e6?+(e/1e3).toPrecision(3)+"k":e>=1e6&&e<1e9?+(e/1e6).toPrecision(3)+"m":e>=1e9&&e<1e12?+(e/1e9).toPrecision(3)+"g":e>=1e12?+(e/1e12).toFixed(0)+"t":void 0}function s(e){if(e<1e3)return Math.round(e)+"ms" -var t=e/1e3 -if(t<60)return t.toFixed(1)+"s" -var r=t/60 -if(r<60)return r.toFixed(1)+"m" -var s=r/60 -return s<24?s.toFixed(1)+"h":(s/24).toFixed(1)+"d"}window.consul.registerMetricsProvider("prometheus",t)})() diff --git a/agent/uiserver/dist/assets/vendor-69ef69e98b7d14d1513f8056b6c6b48d.css b/agent/uiserver/dist/assets/vendor-69ef69e98b7d14d1513f8056b6c6b48d.css deleted file mode 100644 index f092ac981fdfd..0000000000000 --- a/agent/uiserver/dist/assets/vendor-69ef69e98b7d14d1513f8056b6c6b48d.css +++ /dev/null @@ -1 +0,0 @@ -.CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.CodeMirror-lint-markers{width:16px}.CodeMirror-lint-tooltip{background-color:#ffd;border:1px solid #000;border-radius:4px;color:#000;font-family:monospace;font-size:10pt;overflow:hidden;padding:2px 5px;position:fixed;white-space:pre;white-space:pre-wrap;z-index:100;max-width:600px;opacity:0;transition:opacity .4s;-moz-transition:opacity .4s;-webkit-transition:opacity .4s;-o-transition:opacity .4s;-ms-transition:opacity .4s}.CodeMirror-lint-mark-error,.CodeMirror-lint-mark-warning{background-position:left bottom;background-repeat:repeat-x}.CodeMirror-lint-mark-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==)}.CodeMirror-lint-mark-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=)}.CodeMirror-lint-marker-error,.CodeMirror-lint-marker-warning{background-position:center center;background-repeat:no-repeat;cursor:pointer;display:inline-block;height:16px;width:16px;vertical-align:middle;position:relative}.CodeMirror-lint-message-error,.CodeMirror-lint-message-warning{padding-left:18px;background-position:top left;background-repeat:no-repeat}.CodeMirror-lint-marker-error,.CodeMirror-lint-message-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=)}.CodeMirror-lint-marker-warning,.CodeMirror-lint-message-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=)}.CodeMirror-lint-marker-multiple{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:right bottom;width:100%;height:100%} \ No newline at end of file diff --git a/agent/uiserver/dist/assets/vendor-c7887d0a48fe1497d1843edc3d5bfbc8.js b/agent/uiserver/dist/assets/vendor-c7887d0a48fe1497d1843edc3d5bfbc8.js deleted file mode 100644 index ef24a3c6e65ce..0000000000000 --- a/agent/uiserver/dist/assets/vendor-c7887d0a48fe1497d1843edc3d5bfbc8.js +++ /dev/null @@ -1,11488 +0,0 @@ -window.EmberENV=function(e,t){for(var r in t)e[r]=t[r] -return e}(window.EmberENV||{},{FEATURES:{},EXTEND_PROTOTYPES:{Date:!1},_APPLICATION_TEMPLATE_WRAPPER:!1,_DEFAULT_ASYNC_OBSERVERS:!0,_JQUERY_INTEGRATION:!1,_TEMPLATE_ONLY_GLIMMER_COMPONENTS:!0}) -var loader,define,requireModule,require,requirejs,runningTests=!1;(function(e){"use strict" -function t(){var e=Object.create(null) -return e.__=void 0,delete e.__,e}var r={loader:loader,define:define,requireModule:requireModule,require:require,requirejs:requirejs} -requirejs=require=requireModule=function(e){for(var t=[],r=c(e,"(require)",t),n=t.length-1;n>=0;n--)t[n].exports() -return r.module.exports},loader={noConflict:function(t){var n,i -for(n in t)t.hasOwnProperty(n)&&r.hasOwnProperty(n)&&(i=t[n],e[i]=e[n],e[n]=r[n])},makeDefaultExport:!0} -var n=t(),i=(t(),0) -function o(e){throw new Error("an unsupported module was defined, expected `define(id, deps, module)` instead got: `"+e+"` arguments to define`")}var a=["require","exports","module"] -function s(e,t,r,n){this.uuid=i++,this.id=e,this.deps=!t.length&&r.length?a:t,this.module={exports:{}},this.callback=r,this.hasExportsAsDep=!1,this.isAlias=n,this.reified=new Array(t.length),this.state="new"}function l(){}function u(e){this.id=e}function c(e,t,r){for(var i=n[e]||n[e+"/index"];i&&i.isAlias;)i=n[i.id]||n[i.id+"/index"] -return i||function(e,t){throw new Error("Could not find module `"+e+"` imported from `"+t+"`")}(e,t),r&&"pending"!==i.state&&"finalized"!==i.state&&(i.findDeps(r),r.push(i)),i}function d(e,t){if("."!==e.charAt(0))return e -for(var r=e.split("/"),n=t.split("/").slice(0,-1),i=0,o=r.length;i2?arguments[2]:void 0,c=Math.min((void 0===u?a:n(u,a))-l,a-s),d=1 -for(l0;)l in o?o[s]=o[l]:delete o[s],s+=d,l+=d -return o}},{135:135,139:139,140:140}],38:[function(e,t){"use strict" -var r=e(140),n=e(135),i=e(139) -t.exports=function(e){for(var t=r(this),o=i(t.length),a=arguments.length,s=n(a>1?arguments[1]:void 0,o),l=a>2?arguments[2]:void 0,u=void 0===l?o:n(l,o);u>s;)t[s++]=e -return t}},{135:135,139:139,140:140}],39:[function(e,t){var r=e(138),n=e(139),i=e(135) -t.exports=function(e){return function(t,o,a){var s,l=r(t),u=n(l.length),c=i(a,u) -if(e&&o!=o){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===o)return e||c||0 -return!e&&-1}}},{135:135,138:138,139:139}],40:[function(e,t){var r=e(52),n=e(75),i=e(140),o=e(139),a=e(43) -t.exports=function(e,t){var s=1==e,l=2==e,u=3==e,c=4==e,d=6==e,h=5==e||d,f=t||a -return function(t,a,p){for(var m,v,g=i(t),b=n(g),y=r(a,p,3),_=o(b.length),w=0,E=s?f(t,_):l?f(t,0):void 0;_>w;w++)if((h||w in b)&&(v=y(m=b[w],w,g),e))if(s)E[w]=v -else if(v)switch(e){case 3:return!0 -case 5:return m -case 6:return w -case 2:E.push(m)}else if(c)return!1 -return d?-1:u||c?c:E}}},{139:139,140:140,43:43,52:52,75:75}],41:[function(e,t){var r=e(31),n=e(140),i=e(75),o=e(139) -t.exports=function(e,t,a,s,l){r(t) -var u=n(e),c=i(u),d=o(u.length),h=l?d-1:0,f=l?-1:1 -if(a<2)for(;;){if(h in c){s=c[h],h+=f -break}if(h+=f,l?h<0:d<=h)throw TypeError("Reduce of empty array with no initial value")}for(;l?h>=0:d>h;h+=f)h in c&&(s=t(s,c[h],h,u)) -return s}},{139:139,140:140,31:31,75:75}],42:[function(e,t){var r=e(79),n=e(77),i=e(150)("species") -t.exports=function(e){var t -return n(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!n(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},{150:150,77:77,79:79}],43:[function(e,t){var r=e(42) -t.exports=function(e,t){return new(r(e))(t)}},{42:42}],44:[function(e,t){"use strict" -var r=e(31),n=e(79),i=e(74),o=[].slice,a={},s=function(e,t,r){if(!(t in a)){for(var n=[],i=0;i1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(n(r.v,r.k,this);r&&r.r;)r=r.p},has:function(e){return!!m(f(this,t),e)}}),d&&r(c.prototype,"size",{get:function(){return f(this,t)[p]}}),c},def:function(e,t,r){var n,i,o=m(e,t) -return o?o.v=r:(e._l=o={i:i=h(t,!0),k:t,v:r,p:n=e._l,n:void 0,r:!1},e._f||(e._f=o),n&&(n.n=o),e[p]++,"F"!==i&&(e._i[i]=o)),e},getEntry:m,setStrong:function(e,t,r){l(e,t,(function(e,r){this._t=f(e,t),this._k=r,this._l=void 0}),(function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p -return this._t&&(this._l=t=t?t.n:this._t._f)?u(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,u(1))}),r?"entries":"values",!r,!0),c(t)}}},{115:115,121:121,147:147,35:35,52:52,56:56,66:66,83:83,85:85,92:92,96:96,97:97}],48:[function(e,t){"use strict" -var r=e(115),n=e(92).getWeak,i=e(36),o=e(79),a=e(35),s=e(66),l=e(40),u=e(69),c=e(147),d=l(5),h=l(6),f=0,p=function(e){return e._l||(e._l=new m)},m=function(){this.a=[]},v=function(e,t){return d(e.a,(function(e){return e[0]===t}))} -m.prototype={get:function(e){var t=v(this,e) -if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var r=v(this,e) -r?r[1]=t:this.a.push([e,t])},delete:function(e){var t=h(this.a,(function(t){return t[0]===e})) -return~t&&this.a.splice(t,1),!!~t}},t.exports={getConstructor:function(e,t,i,l){var d=e((function(e,r){a(e,d,t,"_i"),e._t=t,e._i=f++,e._l=void 0,null!=r&&s(r,i,e[l],e)})) -return r(d.prototype,{delete:function(e){if(!o(e))return!1 -var r=n(e) -return!0===r?p(c(this,t)).delete(e):r&&u(r,this._i)&&delete r[this._i]},has:function(e){if(!o(e))return!1 -var r=n(e) -return!0===r?p(c(this,t)).has(e):r&&u(r,this._i)}}),d},def:function(e,t,r){var o=n(i(t),!0) -return!0===o?p(e).set(t,r):o[e._i]=r,e},ufstore:p}},{115:115,147:147,35:35,36:36,40:40,66:66,69:69,79:79,92:92}],49:[function(e,t){"use strict" -var r=e(68),n=e(60),i=e(116),o=e(115),a=e(92),s=e(66),l=e(35),u=e(79),c=e(62),d=e(84),h=e(122),f=e(73) -t.exports=function(e,t,p,m,v,g){var b=r[e],y=b,_=v?"set":"add",w=y&&y.prototype,E={},x=function(e){var t=w[e] -i(w,e,"delete"==e||"has"==e?function(e){return!(g&&!u(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return g&&!u(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,r){return t.call(this,0===e?0:e,r),this})} -if("function"==typeof y&&(g||w.forEach&&!c((function(){(new y).entries().next()})))){var O=new y,S=O[_](g?{}:-0,1)!=O,T=c((function(){O.has(1)})),M=d((function(e){new y(e)})),A=!g&&c((function(){for(var e=new y,t=5;t--;)e[_](t,t) -return!e.has(-0)})) -M||((y=t((function(t,r){l(t,y,e) -var n=f(new b,t,y) -return null!=r&&s(r,v,n[_],n),n}))).prototype=w,w.constructor=y),(T||A)&&(x("delete"),x("has"),v&&x("get")),(A||S)&&x(_),g&&w.clear&&delete w.clear}else y=m.getConstructor(t,e,v,_),o(y.prototype,p),a.NEED=!0 -return h(y,e),E[e]=y,n(n.G+n.W+n.F*(y!=b),E),g||m.setStrong(y,e,v),y}},{115:115,116:116,122:122,35:35,60:60,62:62,66:66,68:68,73:73,79:79,84:84,92:92}],50:[function(e,t,r){arguments[4][16][0].apply(r,arguments)},{16:16}],51:[function(e,t){"use strict" -var r=e(97),n=e(114) -t.exports=function(e,t,i){t in e?r.f(e,t,n(0,i)):e[t]=i}},{114:114,97:97}],52:[function(e,t,r){arguments[4][17][0].apply(r,arguments)},{17:17,31:31}],53:[function(e,t){"use strict" -var r=e(62),n=Date.prototype.getTime,i=Date.prototype.toISOString,o=function(e){return e>9?e:"0"+e} -t.exports=r((function(){return"0385-07-25T07:06:39.999Z"!=i.call(new Date(-50000000000001))}))||!r((function(){i.call(new Date(NaN))}))?function(){if(!isFinite(n.call(this)))throw RangeError("Invalid time value") -var e=this,t=e.getUTCFullYear(),r=e.getUTCMilliseconds(),i=t<0?"-":t>9999?"+":"" -return i+("00000"+Math.abs(t)).slice(i?-6:-4)+"-"+o(e.getUTCMonth()+1)+"-"+o(e.getUTCDate())+"T"+o(e.getUTCHours())+":"+o(e.getUTCMinutes())+":"+o(e.getUTCSeconds())+"."+(r>99?r:"0"+o(r))+"Z"}:i},{62:62}],54:[function(e,t){"use strict" -var r=e(36),n=e(141) -t.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint") -return n(r(this),"number"!=e)}},{141:141,36:36}],55:[function(e,t){t.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e) -return e}},{}],56:[function(e,t,r){arguments[4][18][0].apply(r,arguments)},{18:18,62:62}],57:[function(e,t,r){arguments[4][19][0].apply(r,arguments)},{19:19,68:68,79:79}],58:[function(e,t){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],59:[function(e,t){var r=e(105),n=e(102),i=e(106) -t.exports=function(e){var t=r(e),o=n.f -if(o)for(var a,s=o(e),l=i.f,u=0;s.length>u;)l.call(e,a=s[u++])&&t.push(a) -return t}},{102:102,105:105,106:106}],60:[function(e,t){var r=e(68),n=e(50),i=e(70),o=e(116),a=e(52),s=function(e,t,l){var u,c,d,h,f=e&s.F,p=e&s.G,m=e&s.S,v=e&s.P,g=e&s.B,b=p?r:m?r[t]||(r[t]={}):(r[t]||{}).prototype,y=p?n:n[t]||(n[t]={}),_=y.prototype||(y.prototype={}) -for(u in p&&(l=t),l)d=((c=!f&&b&&void 0!==b[u])?b:l)[u],h=g&&c?a(d,r):v&&"function"==typeof d?a(Function.call,d):d,b&&o(b,u,d,e&s.U),y[u]!=d&&i(y,u,h),v&&_[u]!=d&&(_[u]=d)} -r.core=n,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},{116:116,50:50,52:52,68:68,70:70}],61:[function(e,t){var r=e(150)("match") -t.exports=function(e){var t=/./ -try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(i){}}return!0}},{150:150}],62:[function(e,t,r){arguments[4][21][0].apply(r,arguments)},{21:21}],63:[function(e,t){"use strict" -e(246) -var r=e(116),n=e(70),i=e(62),o=e(55),a=e(150),s=e(118),l=a("species"),u=!i((function(){var e=/./ -return e.exec=function(){var e=[] -return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),c=function(){var e=/(?:)/,t=e.exec -e.exec=function(){return t.apply(this,arguments)} -var r="ab".split(e) -return 2===r.length&&"a"===r[0]&&"b"===r[1]}() -t.exports=function(e,t,d){var h=a(e),f=!i((function(){var t={} -return t[h]=function(){return 7},7!=""[e](t)})),p=f?!i((function(){var t=!1,r=/a/ -return r.exec=function(){return t=!0,null},"split"===e&&(r.constructor={},r.constructor[l]=function(){return r}),r[h](""),!t})):void 0 -if(!f||!p||"replace"===e&&!u||"split"===e&&!c){var m=/./[h],v=d(o,h,""[e],(function(e,t,r,n,i){return t.exec===s?f&&!i?{done:!0,value:m.call(t,r,n)}:{done:!0,value:e.call(r,t,n)}:{done:!1}})),g=v[0],b=v[1] -r(String.prototype,e,g),n(RegExp.prototype,h,2==t?function(e,t){return b.call(e,this,t)}:function(e){return b.call(e,this)})}}},{116:116,118:118,150:150,246:246,55:55,62:62,70:70}],64:[function(e,t){"use strict" -var r=e(36) -t.exports=function(){var e=r(this),t="" -return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},{36:36}],65:[function(e,t){"use strict" -var r=e(77),n=e(79),i=e(139),o=e(52),a=e(150)("isConcatSpreadable") -t.exports=function e(t,s,l,u,c,d,h,f){for(var p,m,v=c,g=0,b=!!h&&o(h,f,3);g0)v=e(t,s,p,i(p.length),v,d-1)-1 -else{if(v>=9007199254740991)throw TypeError() -t[v]=p}v++}g++}return v}},{139:139,150:150,52:52,77:77,79:79}],66:[function(e,t,r){var n=e(52),i=e(81),o=e(76),a=e(36),s=e(139),l=e(151),u={},c={};(r=t.exports=function(e,t,r,d,h){var f,p,m,v,g=h?function(){return e}:l(e),b=n(r,d,t?2:1),y=0 -if("function"!=typeof g)throw TypeError(e+" is not iterable!") -if(o(g)){for(f=s(e.length);f>y;y++)if((v=t?b(a(p=e[y])[0],p[1]):b(e[y]))===u||v===c)return v}else for(m=g.call(e);!(p=m.next()).done;)if((v=i(m,b,p.value,t))===u||v===c)return v}).BREAK=u,r.RETURN=c},{139:139,151:151,36:36,52:52,76:76,81:81}],67:[function(e,t){t.exports=e(124)("native-function-to-string",Function.toString)},{124:124}],68:[function(e,t,r){arguments[4][22][0].apply(r,arguments)},{22:22}],69:[function(e,t,r){arguments[4][23][0].apply(r,arguments)},{23:23}],70:[function(e,t,r){arguments[4][24][0].apply(r,arguments)},{114:114,24:24,56:56,97:97}],71:[function(e,t){var r=e(68).document -t.exports=r&&r.documentElement},{68:68}],72:[function(e,t,r){arguments[4][25][0].apply(r,arguments)},{25:25,56:56,57:57,62:62}],73:[function(e,t){var r=e(79),n=e(120).set -t.exports=function(e,t,i){var o,a=t.constructor -return a!==i&&"function"==typeof a&&(o=a.prototype)!==i.prototype&&r(o)&&n&&n(e,o),e}},{120:120,79:79}],74:[function(e,t){t.exports=function(e,t,r){var n=void 0===r -switch(t.length){case 0:return n?e():e.call(r) -case 1:return n?e(t[0]):e.call(r,t[0]) -case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]) -case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]) -case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}return e.apply(r,t)}},{}],75:[function(e,t){var r=e(46) -t.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},{46:46}],76:[function(e,t){var r=e(86),n=e(150)("iterator"),i=Array.prototype -t.exports=function(e){return void 0!==e&&(r.Array===e||i[n]===e)}},{150:150,86:86}],77:[function(e,t){var r=e(46) -t.exports=Array.isArray||function(e){return"Array"==r(e)}},{46:46}],78:[function(e,t){var r=e(79),n=Math.floor -t.exports=function(e){return!r(e)&&isFinite(e)&&n(e)===e}},{79:79}],79:[function(e,t,r){arguments[4][26][0].apply(r,arguments)},{26:26}],80:[function(e,t){var r=e(79),n=e(46),i=e(150)("match") -t.exports=function(e){var t -return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==n(e))}},{150:150,46:46,79:79}],81:[function(e,t){var r=e(36) -t.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(a){var o=e.return -throw void 0!==o&&r(o.call(e)),a}}},{36:36}],82:[function(e,t){"use strict" -var r=e(96),n=e(114),i=e(122),o={} -e(70)(o,e(150)("iterator"),(function(){return this})),t.exports=function(e,t,a){e.prototype=r(o,{next:n(1,a)}),i(e,t+" Iterator")}},{114:114,122:122,150:150,70:70,96:96}],83:[function(e,t){"use strict" -var r=e(87),n=e(60),i=e(116),o=e(70),a=e(86),s=e(82),l=e(122),u=e(103),c=e(150)("iterator"),d=!([].keys&&"next"in[].keys()),h=function(){return this} -t.exports=function(e,t,f,p,m,v,g){s(f,t,p) -var b,y,_,w=function(e){if(!d&&e in S)return S[e] -switch(e){case"keys":case"values":return function(){return new f(this,e)}}return function(){return new f(this,e)}},E=t+" Iterator",x="values"==m,O=!1,S=e.prototype,T=S[c]||S["@@iterator"]||m&&S[m],M=T||w(m),A=m?x?w("entries"):M:void 0,P="Array"==t&&S.entries||T -if(P&&(_=u(P.call(new e)))!==Object.prototype&&_.next&&(l(_,E,!0),r||"function"==typeof _[c]||o(_,c,h)),x&&T&&"values"!==T.name&&(O=!0,M=function(){return T.call(this)}),r&&!g||!d&&!O&&S[c]||o(S,c,M),a[t]=M,a[E]=h,m)if(b={values:x?M:w("values"),keys:v?M:w("keys"),entries:A},g)for(y in b)y in S||i(S,y,b[y]) -else n(n.P+n.F*(d||O),t,b) -return b}},{103:103,116:116,122:122,150:150,60:60,70:70,82:82,86:86,87:87}],84:[function(e,t){var r=e(150)("iterator"),n=!1 -try{var i=[7][r]() -i.return=function(){n=!0},Array.from(i,(function(){throw 2}))}catch(o){}t.exports=function(e,t){if(!t&&!n)return!1 -var i=!1 -try{var a=[7],s=a[r]() -s.next=function(){return{done:i=!0}},a[r]=function(){return s},e(a)}catch(o){}return i}},{150:150}],85:[function(e,t){t.exports=function(e,t){return{value:t,done:!!e}}},{}],86:[function(e,t){t.exports={}},{}],87:[function(e,t){t.exports=!1},{}],88:[function(e,t){var r=Math.expm1 -t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:r},{}],89:[function(e,t){var r=e(91),n=Math.pow,i=n(2,-52),o=n(2,-23),a=n(2,127)*(2-o),s=n(2,-126) -t.exports=Math.fround||function(e){var t,n,l=Math.abs(e),u=r(e) -return la||n!=n?u*(1/0):u*n}},{91:91}],90:[function(e,t){t.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},{}],91:[function(e,t){t.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},{}],92:[function(e,t){var r=e(145)("meta"),n=e(79),i=e(69),o=e(97).f,a=0,s=Object.isExtensible||function(){return!0},l=!e(62)((function(){return s(Object.preventExtensions({}))})),u=function(e){o(e,r,{value:{i:"O"+ ++a,w:{}}})},c=t.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!n(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e -if(!i(e,r)){if(!s(e))return"F" -if(!t)return"E" -u(e)}return e[r].i},getWeak:function(e,t){if(!i(e,r)){if(!s(e))return!0 -if(!t)return!1 -u(e)}return e[r].w},onFreeze:function(e){return l&&c.NEED&&s(e)&&!i(e,r)&&u(e),e}}},{145:145,62:62,69:69,79:79,97:97}],93:[function(e,t){var r=e(68),n=e(134).set,i=r.MutationObserver||r.WebKitMutationObserver,o=r.process,a=r.Promise,s="process"==e(46)(o) -t.exports=function(){var e,t,l,u=function(){var r,n -for(s&&(r=o.domain)&&r.exit();e;){n=e.fn,e=e.next -try{n()}catch(i){throw e?l():t=void 0,i}}t=void 0,r&&r.enter()} -if(s)l=function(){o.nextTick(u)} -else if(!i||r.navigator&&r.navigator.standalone)if(a&&a.resolve){var c=a.resolve(void 0) -l=function(){c.then(u)}}else l=function(){n.call(r,u)} -else{var d=!0,h=document.createTextNode("") -new i(u).observe(h,{characterData:!0}),l=function(){h.data=d=!d}}return function(r){var n={fn:r,next:void 0} -t&&(t.next=n),e||(e=n,l()),t=n}}},{134:134,46:46,68:68}],94:[function(e,t){"use strict" -var r=e(31) -function n(e){var t,n -this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor") -t=e,n=r})),this.resolve=r(t),this.reject=r(n)}t.exports.f=function(e){return new n(e)}},{31:31}],95:[function(e,t){"use strict" -var r=e(56),n=e(105),i=e(102),o=e(106),a=e(140),s=e(75),l=Object.assign -t.exports=!l||e(62)((function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst" -return e[r]=7,n.split("").forEach((function(e){t[e]=e})),7!=l({},e)[r]||Object.keys(l({},t)).join("")!=n}))?function(e){for(var t=a(e),l=arguments.length,u=1,c=i.f,d=o.f;l>u;)for(var h,f=s(arguments[u++]),p=c?n(f).concat(c(f)):n(f),m=p.length,v=0;m>v;)h=p[v++],r&&!d.call(f,h)||(t[h]=f[h]) -return t}:l},{102:102,105:105,106:106,140:140,56:56,62:62,75:75}],96:[function(e,t){var r=e(36),n=e(98),i=e(58),o=e(123)("IE_PROTO"),a=function(){},s=function(){var t,r=e(57)("iframe"),n=i.length -for(r.style.display="none",e(71).appendChild(r),r.src="javascript:",(t=r.contentWindow.document).open(),t.write(" - - - - - - -{{if .ACLsEnabled}} - -{{end}} -{{if .PartitionsEnabled}} - - -{{end}} -{{if .NamespacesEnabled}} - -{{end}} - - - - - - - {{ range .ExtraScripts }} {{ end }} - - - -
- - diff --git a/agent/uiserver/dist/oidc/callback b/agent/uiserver/dist/oidc/callback deleted file mode 100644 index ad9923478c782..0000000000000 --- a/agent/uiserver/dist/oidc/callback +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Consul - - - diff --git a/agent/uiserver/dist/robots.txt b/agent/uiserver/dist/robots.txt deleted file mode 100644 index 217b42f0e0907..0000000000000 --- a/agent/uiserver/dist/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# http://www.robotstxt.org -User-agent: * -Disallow: / diff --git a/agent/uiserver/dist/torii/redirect.html b/agent/uiserver/dist/torii/redirect.html deleted file mode 100644 index b58b7a2680be5..0000000000000 --- a/agent/uiserver/dist/torii/redirect.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Torii OAuth Redirect - - - diff --git a/agent/uiserver/redirect_fs.go b/agent/uiserver/redirect_fs.go index 3f6a8956dc9db..106f00452864c 100644 --- a/agent/uiserver/redirect_fs.go +++ b/agent/uiserver/redirect_fs.go @@ -1,23 +1,21 @@ package uiserver -import ( - "io/fs" -) +import "net/http" -// redirectFS is an fs.FS that serves the index.html file for any path that is +// redirectFS is an http.FS that serves the index.html file for any path that is // not found on the underlying FS. // // TODO: it seems better to actually 404 bad paths or at least redirect them // rather than pretend index.html is everywhere but this is behavior changing // so I don't want to take it on as part of this refactor. type redirectFS struct { - fs fs.FS + fs http.FileSystem } -func (fs *redirectFS) Open(name string) (fs.File, error) { +func (fs *redirectFS) Open(name string) (http.File, error) { file, err := fs.fs.Open(name) if err != nil { - file, err = fs.fs.Open("index.html") + file, err = fs.fs.Open("/index.html") } return file, err } diff --git a/agent/uiserver/ui_template_data.go b/agent/uiserver/ui_template_data.go index 97dcbf51d1217..bb262861a46f1 100644 --- a/agent/uiserver/ui_template_data.go +++ b/agent/uiserver/ui_template_data.go @@ -31,7 +31,6 @@ func uiTemplateDataFromConfig(cfg *config.RuntimeConfig) (map[string]interface{} d := map[string]interface{}{ "ContentPath": cfg.UIConfig.ContentPath, "ACLsEnabled": cfg.ACLsEnabled, - "HCPEnabled": cfg.UIConfig.HCPEnabled, "UIConfig": uiCfg, "LocalDatacenter": cfg.Datacenter, "PrimaryDatacenter": cfg.PrimaryDatacenter, diff --git a/agent/uiserver/uiserver.go b/agent/uiserver/uiserver.go index 7393a6ead9dad..8a8bf7d01d908 100644 --- a/agent/uiserver/uiserver.go +++ b/agent/uiserver/uiserver.go @@ -2,11 +2,9 @@ package uiserver import ( "bytes" - "embed" "encoding/json" "fmt" - "io" - "io/fs" + "io/ioutil" "net/http" "os" "path" @@ -24,11 +22,8 @@ const ( compiledProviderJSPath = "assets/compiled-metrics-providers.js" ) -//go:embed dist -var dist embed.FS - // Handler is the http.Handler that serves the Consul UI. It may serve from the -// embedded fs.FS or from an external directory. It provides a few important +// compiled-in AssetFS or from and external dir. It provides a few important // transformations on the index.html file and includes a proxy for metrics // backends. type Handler struct { @@ -92,20 +87,15 @@ func (h *Handler) ReloadConfig(newCfg *config.RuntimeConfig) error { func (h *Handler) handleIndex() (http.Handler, error) { cfg := h.getRuntimeConfig() - var fsys fs.FS + var fs http.FileSystem if cfg.UIConfig.Dir == "" { - // strip the dist/ prefix - sub, err := fs.Sub(dist, "dist") - if err != nil { - return nil, err - } - fsys = sub + fs = assetFS() } else { - fsys = os.DirFS(cfg.UIConfig.Dir) + fs = http.Dir(cfg.UIConfig.Dir) } // Render a new index.html with the new config values ready to serve. - buf, err := h.renderIndexFile(cfg, fsys) + buf, info, err := h.renderIndex(cfg, fs) if _, ok := err.(*os.PathError); ok && cfg.UIConfig.Dir != "" { // A Path error indicates that there is no index.html. This could happen if // the user configured their own UI dir and is serving something that is not @@ -115,23 +105,24 @@ func (h *Handler) handleIndex() (http.Handler, error) { // breaking change although quite an edge case. Instead, continue but just // return a 404 response for the index.html and log a warning. h.logger.Warn("ui_config.dir does not contain an index.html. Index templating and redirects to index.html are disabled.") - return http.FileServer(http.FS(fsys)), nil + return http.FileServer(fs), nil } if err != nil { return nil, err } - // Create a new fsys that serves the rendered index file or falls back to the + // Create a new fs that serves the rendered index file or falls back to the // underlying FS. - fsys = &bufIndexFS{ - fs: fsys, - bufIndex: buf, + fs = &bufIndexFS{ + fs: fs, + indexRendered: buf, + indexInfo: info, } // Wrap the buffering FS our redirect FS. This needs to happen later so that // redirected requests for /index.html get served the rendered version not the // original. - return http.FileServer(http.FS(&redirectFS{fs: fsys})), nil + return http.FileServer(&redirectFS{fs: fs}), nil } // getRuntimeConfig is a helper to atomically access the runtime config. @@ -195,34 +186,33 @@ func concatFile(buf *bytes.Buffer, file string) error { return nil } -func (h *Handler) renderIndexFile(cfg *config.RuntimeConfig, fsys fs.FS) (fs.File, error) { +func (h *Handler) renderIndex(cfg *config.RuntimeConfig, fs http.FileSystem) ([]byte, os.FileInfo, error) { // Open the original index.html - f, err := fsys.Open("index.html") + f, err := fs.Open("/index.html") if err != nil { - return nil, err + return nil, nil, err } defer f.Close() - content, err := io.ReadAll(f) + content, err := ioutil.ReadAll(f) if err != nil { - return nil, fmt.Errorf("failed reading index.html: %w", err) + return nil, nil, fmt.Errorf("failed reading index.html: %w", err) } - info, err := f.Stat() if err != nil { - return nil, fmt.Errorf("failed reading metadata for index.html: %w", err) + return nil, nil, fmt.Errorf("failed reading metadata for index.html: %w", err) } // Create template data from the current config. tplData, err := uiTemplateDataFromConfig(cfg) if err != nil { - return nil, fmt.Errorf("failed loading UI config for template: %w", err) + return nil, nil, fmt.Errorf("failed loading UI config for template: %w", err) } // Allow caller to apply additional data transformations if needed. if h.transform != nil { if err := h.transform(tplData); err != nil { - return nil, fmt.Errorf("failed running transform: %w", err) + return nil, nil, fmt.Errorf("failed running transform: %w", err) } } @@ -236,16 +226,15 @@ func (h *Handler) renderIndexFile(cfg *config.RuntimeConfig, fsys fs.FS) (fs.Fil }, }).Parse(string(content)) if err != nil { - return nil, fmt.Errorf("failed parsing index.html template: %w", err) + return nil, nil, fmt.Errorf("failed parsing index.html template: %w", err) } var buf bytes.Buffer err = tpl.Execute(&buf, tplData) if err != nil { - return nil, fmt.Errorf("failed to render index.html: %w", err) + return nil, nil, fmt.Errorf("failed to render index.html: %w", err) } - file := newBufferedFile(&buf, info) - return file, nil + return buf.Bytes(), info, nil } diff --git a/agent/uiserver/uiserver_test.go b/agent/uiserver/uiserver_test.go index 97835f2b024b1..73d38df7ce6be 100644 --- a/agent/uiserver/uiserver_test.go +++ b/agent/uiserver/uiserver_test.go @@ -39,7 +39,6 @@ func TestUIServerIndex(t *testing.T) { wantContains: []string{"~Qkz8@C#2T2tuelZf{Q*d}dlCMMhdg}%D(IhMWX$*)wQiKGi_P8axh^OjjW zF~hzKc!;|gy2+Lt%EOqXd(+_VZmXgg(2QhOgf2A0PvjgP8I=|IlkxlLvAfytsq1iT z?Ae;JAA1cbxct4J+hiCib_g(m`)T2kJ~4Ys>o7Ugl)tg|7dK=c>!6H2cI8baFHAgLX<0Ft>tNJet(6qWhWOA+pKLvvI@iPCRR83{Kf^T zSQFZGnW%gJW^-z@rD?3(H1&j~lQMso=Af`fR%qNU&^ziy*TUxmcmquAv2{|`hYAjs zTRo<_A9j^T2)L7nwuq&vyu>qGD2Pi2@Amz^(`r5A*}>$kWFupsfg}1WQcA4&mE%1R zTZThj`*l5PBkH37AI3?W%9g(r`$2ahE#08WKmb|0Lg2r z^8)H;J$7hpFVzV%ZfBH9($(nvD2O;J*X1?M*dBTxN-7qwj$u$aO~2f}*TtjIjPC^T z|E?$;H7-xY=M%{ES0MyUjc)zp9hM#O6{$GamEb|1p4Urzw&G$pGl2|63}RM zmiBw+_wDU(?Y^ZbK7SjYN@pj&J(?!C{#z+_{!dIRbKcsoa=qVB9sHHYyaKvpf}Xmm zzLBMIKk_B2bje_~bRT+6iYt$w@&`KKJ1T%vBeoTf9RCzrv7^5@^DnY6-!^!xMCnCs zAimdrvyG#D(PdBaio8!s9Hx&19Jyt_ut9))(lh}eH1PBd`*uZw+4&GuSb@-ntvw+14W?N|UW z&#ecpb;B}`dQEO*u?gw0HVgi44FhA| zW3h-1foP1wciQM^ILbUcMVO)OU20>~Y&c*6=#2^?aNy|v9~n@b!-cBEY7(XgZ_f{6 ze8OTe(>4KM_-Z+M4O|3+yTeHoH*&^fk}pClxWR>gmJ#w4+6>`DgZhh`Fy`?n<{(v^ z%WPl9m_^fW0Pj&!=Nq)y_7JKe9r?H zf_}eS&^1$<5}Q%tA=)cNEus6Yg9;nevLfHQ#U!XJipbjZj1Q^u9k}+tR)Ud=P#OAB zYn6>Q71;M*$}BI~z>;4VjE5OXFPv*R9z+JZB9O#rn(~jKLl3Vcg@fA6|mDeA=sav4(%;;Z4ZT^aN8W4yi7o$Kq>HoR^4(6rcP*E@u~jQQM(nm%=XD=9!| zzrnM*keiwV5|sn($wnJ$@AZH;qA+rkF_m=w=sbDO@?``JY)34hW-j;V?Q#6<=r>Uk zl4rM@=IOc0B2xN?=u$D zGIC|9V_``Tge=Ms5YlAF55T3^wjbkpDfPsPx`fhD{u*&ZBVC%X1>N`UT6Raw& zurd3z!eTQTYl*FqR-I3D;#Jlu`!bp`X$^1WonNjpD5A- zGqd!90NO-WF&sVUW;JazT#{_HuKQ2_5oadb@4t8PhPa{P{l=_HlK&Yh%VXbX#f?5& z+smKXAas0_3E$0m^aB*wyXpXHu7Z(9P;EC9mfL#5QOb6qmX$WZX3mWVQH|>_2(NEE zI{0VpTD94vA1B0qU&3BJDekZw?o|Vi`2ZX0dbAqFTK;GgCk|*6CH2`_Lcn;Nhoe-K zJ1SDXq4?_nmsg|>;4zsyfC}t;@{5NNdR^yB5R2O5A)$LWmcqV;Ei@3B+_1oT0x$O< zg3IH66Ib{HKbWb=){(23lu2MM<;yh+UOf$Or6tIW@#dLKHG_!8?K8^<>74---$DO~ z(ny|82&HbEm}lSQHb(F_rH;o43>FN6bG30514DOu6}Uf3^Wm8dnxBb2ZUo@eE~hbv zW}0+(G@k5#;%*av(+_uzq0|4~+WHD@;lsQj&~eoDL}{-`1>l~^>6@y>(*M^ zKld!rYl`jX zDzPO4x)h4W>(>NsNa4PA(;*2V@tSc$hzrP$kZdih68ZB#%j_31hNR25<2euMtU@M! z55s}{QaaVL)y0ap#YEoB)Iyi~yp&O-ye>AfU)f`=Ls_#OLa2s?&_%;MD144v#AhDx zxJ%n%xavkv-7S<#A5j3PF{qk9ZndP26Q_`w+!3W2b#!a@%$O}pL3YW|5h}uw`{$t z@H~~Ijd_D8@ib!Lo~uz(r#F^{oued8dKLL?R;k5`Iedd7zCvgFBkitw1LViEOfz1D z$J|X9{3iu4GvkdtA0}}I&04=2O}lRG@%tC}ks&kV39|u@(D5T>Q<&iN&lk(WIz8{; zJd;@n|NX=gCd;9L{GYh@e@)iQO7A7!`_m;4+%jI&*;{qr+;Hs#%S))gC`@{=9NnK@ zwN-?jepkZgX=G>qBo3KLJ5kG3G*NQdq%@Cnc8Hnq%yw&DkkXHupg78xsih~kv`5E4 zP@%IpJc)mvu#ao|V>CoVkAjq3Mi(AGbP;o{OSM4C@#5JKjh@)`$?&Z*WM}^ICIa%l z*8~rs-jW6}?o+k!5v#?2v%cU&8Ax@0!-`RE!|YPvrBCTatG}2}=ie5Sdg2Eyc2Tj( z@uv{gP8g6u49KzAyep!}Nmi~5O>S0igWxdEav7@|1R0=O`{n883LM9>HRDymGxR1V z_OLWUD^WP({ zf76>dOKc4^d3mKK_~o`0^)jsPcQNcjP`#lC57XX~vFBO0A~?U8I{9;^&m${reSnkX`{S zo;m{N`7b&9n|@tK9J22mcgVw?#Z7e}IdxV-CS+?ZY=3z`U0(_z=NsBUNo}|miYf4c zIwaIZDr&R1?)y|ex^RjnbxOYV45Xf0%_sCeq*zPG(#%Y?3FsDg>d8&abxfc<)&6Mc z4JZO|KDGBaje5wvVqh6B1JOZyR9Sb`6QB7YSFK2=X|ae#{b$Vw?3&quc+YK@|6PxV zUQ~=d-}?7B1yV3erH1HbC^M^gZ1N9sxc^W|D(ik2Jan+J!GEqO?N^YbQy6Z>QiE0( z-}k5I_N#`gznFrcu&D?PYz_0* zAOjR=GG3)lQ!BMHeQ-`XEU`ZYBcsas0=H(e&&MH8flPy28Rr!8CAcHC0C7$t`!PW( zjxYN3jdQ7&_-1FQfs|AD#(h)FblPML6#dboqgzFDOzo9w_rSNO1N2P~%%Invq`4Kj z(u7J}T6HqZL)OqllbKTS+q+ef&5I_Dj+G7JJfu*2e=t*Gn?%aA+|2CYAMs-Ar@ESg zWDNBYps~5Fk}53`OGK=&`o8mP2i!2Ra*)$eLEJ=0Km(txcD#dp1T4gUOteRLm?fr$Ory%>i2=M-%Qv6{mE zUfAoOt~S^tvy2};-f^kY9n>v>2ix;HSQf@DUd~T?p<;v|H&h&Kh((1LR_yldkFm>c z&=yiMI#nQ!#jM)L36&>bgh=E@> zxQt-LL6^~xh%P`@7dd_zJ8K;Y)(dS?=Z|Szk&uBc{2HHEfkovKtj(+Gv>wL3fH!9xB5N&CwDhx`m;5kdRfcMR4fVZd_)E3bQ`#GA zg@fy$PiG`>RRhavAExxPHyQrlCoCe1a`$4Dj&2ZE!^mP)2Uj2HQFGwKeP1cx!!IRZhR-L9s$bf3<2aQx5qGPas zfA+%m(@M*S&{0ymvT2g-pngv>u^)XqpO`opn{7tt${8A@3UP5u=tyM?)tjf4Q`=+j zK?ZcWN~n`~Un(UY`k3(4qayqZt(mB2 zEz45H*-LDbpj3>bl9LEKVf_~H%F8i7HHRwJ-Wv)irWGz%E^5ol>nY~3dnA<$QA7G# z-1^Et81jms0nnPlJw|A9r*WYmq^53iNRcU!O31!tUu-s2qB?bV_WSHCPMr1E03pUl zc;p|=UD1ECT~3}2!%OGEnj%bDpILwhGpA%lSFMVHO&^j9$+WQPgQJYj{xRAv`3Z+P zL6zzyd&w)7hsyO>D&+XsxYFC-0vz`8JiMl`{gDU?>SCylS6UG*)HH)|R7YkRx|gT}5l| z_8%DdD?6BB-W=?G*+rw#05#{a|D&`Zdja zmqnTQrZf>@ZfQfZk}u@kwUk~qmZ)BKn}1f2*jC`H7mVwUknlhoyT#tgCrpi)$&GWK z4~=R$hP6gbv`o+ONKZ~S8BT~&dEDLD-TE3>YWF3u>ZKB*{_6DlCW0PTMbZ@s z4a?*K1gB^U%TgpCA2g91gl5Mre&{W`#)CdsI}Ega9+r0Fs_+dAOFnGPr_<+Y^b5sd zHdB!VoVI-&4yvWI|70_mI2=}NqH0mz5FR!-7VC(7LlXm8{An`+#zX1k%XBO~x@3Y^ zc%S<(hCL&DB?3LUmFfUa09vT}l;6PQMb6Um(2xIA0I?%dRdiWO+bnvtTGmRw66tE!B2STzS7{pc3q-v3az!8!pl7C!qy^?fU@v2=y z<~vI)Q97av-42fE=|RXt?YWeKC0*;61lz-lI_q#hZzRa_$KB$^)KOicKM-| zo9AedS}F#;LUoK_XW*o-Ns@W1%#wLsa<5U1!lOW`Bm~}gUVKK-It-x>7hiA~u*79% zP;2u*{q6I;V8@Wcp8C~>lWyLN%}4Vwp%v0wOh~uuv-bC_7Bo0V`YnA#CZEGJ3#EA|(lxr5di&x+f554o-(AC{}+ReD35@}>q;imbD$M5LHn;2fJEf( zjDp#vP6VNYm(CgHi4O?B(La{)A?Y3t+cy-}W5EyXJe5J@OQGeE0;*1Yu$KR?r4xl1 zH`yq?3zu#h4eu|Q1%xva>gBJ(M0`X4i|;yewG$w1@kK*PpqW3=xZ#&zGuLIG-(NIL zC>1UEB%XJmYU=UrFO5M`U`?x3C+plpyzt2&1w&jB1FmENU5lj7H+?KlkIvESKNC~%qpA;<%F@GK7n&@;6(IAV9dIYxasD1a zGnaK=>$)8ceqh_${rWfIDN1;mhNeh`h-y4L_c^(vpz zSdc7(O=J)Jw4x`Yd|u{Cv@34joHH?^a0~hlog$pk=N^ORWDaA2c!YTxn(jG|-ZO;9 z?SV+~R%F$-MM%Q}A@;W~5_e41#!`sf1y*|964zhjIL=v};ggX{Ywqq;$wo$_ zR2<#AD?a-5QynzX>riJ{E52j5ZvQPWCu4Pt$uD-28y4Ui z)sTsbF1tnL(AO{WAXU5Rl9@S!tY{*2fhx+t&Klo4!$|60cLe#n=logzz7&O7QrBqp zkkWEFp4WxT7zvitQjRhMJX)&=p<)y2-2qmtdaR$=D^Gl3j-q;AF5a6x@L`t<=irWr zg|x4nOuxc-ts51K-3m9;Zz)^rtRpWkCNi+#&oB+ zE}?zvk+aftI1ybaH2}N7Ej~v_W|TxCE?gY z{HEM9zs|a859!H3$*(Cx=AeP9PIiK77)2`K-&`-x)Nv(ksLhW7+P2_?80E@YteXzt z+nJbk0M+ocU zLIV1CnTF-p>TA&3=9ydqmIA$ViiAlW-675PE1Qst;erWCN)VeB*!r-Zn71PtX1Bz|7 z+Lo}}Ceahb_n$?I>-+3^5ta6V zl8t2w>$qZ$se1MTAhyY}pS2?DE9%WVlm=?bVk9!^ep-)|T*5cB-0s@!XWGUx9!Vfm z1*uo6Y`AAZm?H{0Q@iQS`JA`$;a^LYtp0HP&eu%*&Y>`H*4pkX93SJ4hoYKF++d9b zWOVMW$UVjV?os_r+J_^?*5_7EK)gsTy;X%5vpPwq$NS$bcQmFg;0knzY-e{n3{QwX z6|FHA2UWlv4Jk-Rf}>gv2kG`wl>h22i9t=Jl-BLVjMIfs0hA+ZIy3PSEKJ4^b(mdTPasVu%5KU%G#Fh z9Tir=aK^yWKAb21RKbf9R|Ne7K}>c7uEe>lKXh3XjXTs$>gU5K{WWIky6#c8K8Fv@IfQ|5H$t=s#Ud zxYweVD!l`!*a3bcC`P`-Ir?Eb`W6Fm{Co;HFN)pfK%nN}gxqg;&Cqwn?Xq`Al%6$ zZAQcijU(`)ycCDz4MM={Dr!^5f4VPqrLmdLEj<1(bnFOEb~esUFk)%wxx+#EfO_ib z5WR=+x$8q~4~*^5IEo7+;mhkNM7CqD?=f*ZVi;72m5P&Z=Pq1@8{PF+ba#l}Hdj>X zE)^cLdq^!iqpdm<`=?<*4U0Tk7!p)E?)*mzDrn#sEMjcXYeANGm^VPUa0^5C_Cb`w~AX;~(Yk;;b=iuhi>klgDopm;Nokv}WT1i^= zDo=TJ>w2XXsNcji06I#}O6~r@{jc5pmpxGH{#mS&lP#X6S%&m3wbdZOHWfYacz=OW2Om`p$~DPczq)C#3zM-V;JPIG zGU``b$BD50r{T9jKAS$+Si;afmU7WK~OU4!?Zj>j)~J3R^cax~h%xfd(6qH2z>PW0OI4!#P*0w@fT zQBtf|h-c#4D9D+yeb0Z0RI-0{b7hxO8LzW|Km^6B#tKH+yimjYZ@0V=)NE_LxNVAZC z$FI17eQmbVg~TP7H_Z4)W~z4;EWbvWG@hP+?kptG*z(J$Fj9?xh9cs7kfYV;^0?ao z@=f6YGmi~%v5^RU?SL$nk5T?<B;D)iHO2_|4@+8S4PZj96pG1h#q=-!&EnyB%@#1|Wz2nJ1*1I>+nzMV7|JztX19$%H_ZSoHR? zTdne(45$#-8}t!~eAmco^U}YX5)$r+T-gJu#gxQ!+GToxbWtX5nh)k|2zkU7d>jXQ zN*N-;oY-~WWB?gxz_rLiXy=6=7&dVI6NX*aJ$KM87ZuBNfs=i@yO|+Kc{OE9gj*`x z+{@3*vlXGGE>3jIPxi0iQ&a=r-CY+PZ?o!=Ro(Uba0m}&p9>Nww&j^^pWh()G&R~d zFm+jO>YqDyH5jJh3`G1dC={O`@2?sf!M!G*2L8)5M~>r3%6+jGOgOhVvNz;@o?4Rs z60!vl1K3d8mm1+$$36QEqsSRgp=E;-;{A1z4vLbqgV?Og|AJ&v|7A=lYZQK+VTF94 zSF*bBzwAj>l7QCYRqvip2#gE-NeyjB%HZA8KPDb|?W3cIezD|89$kb(th<`vp4{>$ z9H?~7_z`J_M}~Kpaj_48o?3;n2r~~f3u&ERZA?|m_eDUZcJjUD)(-!Ic4=_cEh*F; zE30|0eVcFR1}@th1z%HL8w{C#x`fL#4xc?1P9OF;Rd! z^PI?IFg2L9vb&ktJ!o}NfiVysbK7fzaL#8oVkf$d!HS|N*=?>m=3&x$6ScB3uLH7N z=QS2P??6`@!{5!;PYDO@``2Dfg^qyqeVaxMlFCY|zcU z)IJQd^sIZnt2Kos&FYFG=4Z3eznZ&gU&JVh-`l%v%W3h$o^Pr zZ!m;jx#LvvFs(g$=pY3EO;oQz0Az>$4%>53$~p1J`uv$w`}?j)9JvQS%QT&<*LR*P zud+1!y4tl`KNcCxm|@B%%+&fDJk6HBhw?6T7Pgb5YtAwh;joNTKNu+gfp5kf4Afbh z5YZkDy1*ZCaqw_;s->Jk&;04so@n%%_5H?yl6^%Jj-i_EDYfqXA%UYmH^^ydUE21ZMUWCSiAzye|qcKFV)YCmR5JNJfy zaag1B2vYn6hC`rxju7_Ig2Y$`%nLWRK;2&AaiY`N_Q70+t-+9Qta#}A5=;1CEh;+E z3X+_}-JWjn-(L`YrW<3N6hDmn6@14Txe!n}_K?G68=>%0EQj0H$hr#%&-=y>qH|w6 zgH~7@1MJacElU+FhjLjXa!E^Wv0MVOCL}~MyE!rNNdHgEz{+e&#s;XTe0c)kdEO?5 zJ5pT5XA9$o5EPD0fO0e-%tq8i20>qYU41kXU1$Q&s24~CbBo*mfVncZuy2vD{2{%M ziC8}4;6J8Y5-k8q=MD2^7$}IUD;n3jmZ}k~mrZD^>{{b<9Pj|PTy>^(`q$?oJ``eY#>LidJURO2#az5Z+4)ROFcw|CG zZr&f@mf#X`Gt@+8dIGrA=U)Hcq0{3^FX;8hCo!}O`L`zF{I zhVh|Fz#<+vt0CZE)r+G+vrVA*NVO%WKO9RvUiq)zH?FI)NcNoTxls+XuL@Vr!Rp(S z&yP1m$^34^XxEChS%*OIg9{Z_DCWK{EC5)ESsCdWVF>ub`9R+TZCv-)Wv|Nbk=B$b zH@A4^T-W1m;Y>^JoId(qG=q9TvShv`^<+M^;=yRW{X;78l8(Xo(!BL~DK-hhwD^sh z9~$_^zM?Rxux8fIVHeNEuCIJ1;ubchh+Sc{;8bMcTGO_IbFnU@3UFxs(|B=PINHder*zac#ZAWm6=&pqM@5aNhqYS*pz%oG&gaU4EAa zbxy=4e!-2PcSHhW;By#J)bei-gRsT$Q#g;-hX(%AL^_kg$y->LezEgpI3)Zilw09k;s2B2Ob-Zm$wMLPCDWcm$ch`{}3mu^08Lt>>jGOZb=!EojJ%z?4(Xj%U~;&ogSzI z6LAKoUnd7W#7-oJSCi>7+H^6U6P1|_7&Y)sBR(TkN&@hN@||DhbR+V+Bn#vv=0v`v zG00AWUKlh@P9kS7UwguGm$a#e@L2D14}`o1tH~4k+Ui^q7U80QBUn5hBH`c%Z-e(w|qq(5`yLNbl7X-GmtO8mtRJWMK`MY!b*-moF z;2aUx7}jZbl1K~tBc=x{dR{uwCG|2i8mT8k19czH*6IYQU(z)QwR)Ak4p#K5Vy^ca zYs4WejI{Hne}c5JwbGN8|Kb_l+I=qiqy;~EOY_4b8RC_PTwv9L2qVJn20~x)S&;I{ zN>1ZBnr3d-nmwNl4Cr?O^lTy}Vlb>2H*!&!%AYWuh5lNbPjK#!Zv`ClXk0xm*?*S} zPa0E48z~B&j0R0Qk(i#?E|@|mHROlh1l_2LIU#HeY|m;a#{l=1Ld zQOG$4#jEmOhfvT=9#0jtexoxewA8L#HdZ4lYyaHLch0OPJU^d%sF~qwJgRHDjKxq@(c9<8`%FWI&;#y~btZ z2&P}HY+=iWQ&dX|Rtw^4uDE8zAvRmrivU@qO7-{*I$tATnDpCa#?6+cYM3v-CApbU z%C{o){WwlvJKY&ew>`Adq)&n{+=!~5%8D;K*V}wj|7+g{@Bu$YN~h|~S+Tv2GJ_vE z^U-(#^j~}b!l?ysyHqg7U6Khi!`Rtg1dXq$c%aL#^GKi#uL~Q;d2bxtm^g=BW%3tM zJYM%)DKi=X5ZZzhOZUQ&Gu5uFS`Cc!h`MxjlLpgA`wblrOZ<3TX z*x&L?&zo-3<9;G1o8noQD!!5657K%KylD0};1KW2){Nn2cWVUfz-1jXOD28!T03ul zmrt;JU)_WtOPRA-w`bs$;``%|Zw|(3IOr1(4hzM++9L^c+7LNYSMYPy?Oe3+F&;r_ zT6KBLZ}|q4Y#aff1FnHhXBVnWgJuubUHXSfUHUP7MUnLtm#MpNT6`vOSl-*eTx^8> zD0w;NbS`@PJG@I+sy|?^;v_=ibpgX|d4)Mt=%HH)>wR;-DZM7wL)F3YEz21MhCn+h z41f48pzGRHl0k^iK%k(!9^#jyJ6yS^1EL0X%8DCgcfqJZBuq)e_9+}81mbT+eP2Dk zdT=|!W2;E=4+ZG^2s~JC^ zg+p0pt2&MrK@N-4^1L2p$e%Gj9Subzu8SguEZI;88}ePCNwqCX9t+pMP4Xc}bJ zx`}qLupYhV?DJ~POl_&Vd!7MVL@R#>UaOQ%g2DXosNChsHB7Sxqv|1e1_~R!FpD$Ij>K1czo?Vno-74%NV${+Hhz~YGS`jTVYq1%ZQ8u#4 zQtRi=k>(0(d}@o@J}w6E_4fZ;BHr44#VQen$I1Hm-cve9qrvg0)f+)L1m#xH7gP7M z%a}Qw>~UL`p|q3+4}5i&BtL)E_!7$ z@L8}??Nx7NEHQf56K09zf^Ug}ZIA}zi>Tz;K(r1SH5OILvOm;N;V2BaRn* z>%4>6xRM+@8;jL{QdME8ZGZNF&Bj&e$2On#=-heR&%W!YirDAi9``{z0r=aM-KVxu z?XKSR*M2PTu`UzZKP7pw~V8zo(dP&$40xM;7CMo4YhJ2bAHf|$x@`zZne z1_kFYOV@***o3gnfrX@sl&kjk0&{yt_7w$-1Kkqt@QP>nxnFfMi zw*)OSMGSZZlO9hXT$9t)!0=@CwaM>fd|Xkttlf;b38IEvjKqs5sAj*b+H0lV4QQ&Q zXjM{bnj9#0{;-LzL&EuUsIy8ax`mhnd<_=5M0RzW9hM;dVfK*?OOs$I_MHNXpH8ht z^qznBEGGOm;mH!_kK`A$Z=Ovvq#WFU;QgW+biCRNNw#Zy&3hHQ9l>gf^gMP?I^eX?c6C5Xa;x`N->`8bc=k8-t~ z?D9YF^S^Rt3tj;`Y_@@G`#sLgz`@Q~k3Kef2D(xVb?iQL{l;aqK8X2F%QY>)Y0E!Q zXX4#xxAcYbFK_IA(H@3-Rri^$?TL5ioBTIOONKkDQTs2^ zW;(of4H0cuvS3HhwRKAUv{*9IOjt7OgXLWfyTL^PRZ$a@98YQm zqmjQ~=mjD}f0Zg;wC(rSUBmUjpOTH_7K-&~+!bL{we3wKKXYY?Sh*}1J3fo7%}^cO z;RMb|g(c$=-hYXLc;}iU3ThFeC~PN_i~{twKnnGZc-URCNIEjn(|01>^xY2Np_q?9 zl0?~7dKyUkcw~MlHM)FmT7UQ+#yp4k_=c8-0_aPy5yYGdU7ICV8OoLz-Qvoo67C;XBzseIh#HdUbnO2! zAu+dG7A@Wzk`{&Bc4Ln&TL3mN|HEK#vGvxGeD0M)dvC{PBedV%Nm^Wpq#3w-muBPq zv8uvx*70+q-|G()#8l(S-8kBQ@4bXBgT(5i{V(bg9#2theYv$bbrBbxP6o{?_a(a; z46Rwr!CE<}l$CmSoF{9eLj!ptv;{zw`47SnxqN*Lo6-=uO42F?2i7uC!uMKc0^f>r z^2c?z^~5;oLU+9hh#dn{` zh}XG^+(1BQS)r=xE)@$^<^`kwlk&TMsGU4@r-Pu_MEl%D747a;>e){LunF(Hk-)n@ zd^iXv#1HzVfc@a=MFP+@!}7oT1D7NuV_U_L*IgyFtPyS(ED_b$?qW5nuHtS{krYZL zxB+}ByBOT9i|Svpqi-Guo?~9!Krp`QgxXK4lIqMfFZPU8=k?~^U$Z@|Ha0Aw&2%Pe z^IHuSN-Y<1jyIr#xhzo$aT6_Zf2>5*YBZC~N=}>Srr<>|_@6!o>B>O2`z|}fmyCKP za8~RmLPie9WxY&{6MxPb{r_D68?CR7Tkmm8M{nEo04u=vgok~TY8F9EyWJ5Lfz);% zfmG&l)h|}yedo+o#DUA`NOfMg(CR-exJ3acRs^!NH97`z6FtpSm~I76x6Ydq%~qr) z8Hvxjj&wCdRx{hLS z0{U(sEL2~E`s*Bi27D%}ocW?dV6kbsK|?)mi~hXjYZPs#Zd)a3zcjw*aaZ_Zq@P?# z)dl0Vwq`-9hcytS)O8=(rM@M1Y!FnzwwoSTzpcH6a30O7ZY}aA**d~{P#uLHyMFx4 z!-~{Arf^$q;`{vTjevhzi|j`gZH+RAR4I@QhgPhUqBywu{8(%n(NXX=3ELH449G;y zfIT8)f?S@NfA|>^3r1*{bLQUkgHZPwsr|Am%r&2Iv0E@k1&~Z|x*FN$JTMNi$1oDr z4VyW>RpwEBGjo!t%mPYKz%mzY25GdyTchD+uzZ*dEcq&$++zzYZMv~ zTW~6KKNq*8wztG7I%+d$kyhlAGV&k0qazn(+C-^xYQ5r#@VJIJhI3JbKRaNM)lPl` zjRV>kHW~gqf5j%I4S+hwl5p=IrX9MvkXlUsF;6u&x}{caOO$AqVXn0bsnlqPYW)2m*dc^4Q8Hod$QOd1`ALBJiJ zH)`R$%&udVyHM%^rg8KkC0tO@V2sk3hE7}7vb%tBw%k}F%X%%(Pj-A?4zhZc!xOM6 zf50f606Q%GxVx9Oj})?*J|;YRP}eN18mWf0D`UJa_XqV55r~=7IIF2R+nX$%Q^qtK zmPsVl0)+jvW;3Tj$j+=G5@3>v*y@`sx76!*X>-`jheBmJD;`DV$h-pnZP6;LLa~-8 zxH-$rK{EU-)TU;f1o;|VW?34j-E!3ns2yar2#&s(V;0*=;tSRw*%2pJjC3n?&)WgJ zQ?>bvJ`N(=!54OmZO8t@FD*Fk7cy8N9AHP$;71a}VI*HPv~EQX4j540)wZu;oa%m} zyK2^^u+>x+ZerHrUkhna8>rYC$7keOfHPN z4Uk&>kB8-YKRttLdT7gmty+b`&dY-Mb{j81Zia|9+fS!EI*c;TYRwLM+m&E1nNO$e zetu1%`p7N5tl<{>hiE<;*0u)V9|d&_#}(g?d6)GjH2Vz|D*FOv*w3$u7}iY>VO&9G zV_Q;bFgBe|u|*cjyuEEwc>R_uo3hQ52e_R?eWPnzZX3&h;7RRkpP47Giakh@a~U(nWPc@UQemUvyQ4yq^@57^8>3j z2SLs@(EI1}YG2PK7h;LpQywE;6vIl)Yi!ji7|+`4-BwX}fcMDe3w)81*9WWqPTM=$ zh4e9)U;UbrZTa8ba*z;LO}o9&pD?X`hs|LO?P@Rj!~;AMsvY$caj;n*9|Cz!Uw0oz5` zip0WeyeENx-Sh-UX^*1bbo;fp^W2wgCI(&^`oF=~qC+kTA}sS0OT~;Gw4TBZqxpjjoMZRYT`&-+3 z6BHG?TM)1J$1Rg%nxmD9d)o`ahba)8bo9pM7_3n}+ukC1{eXp8td{kFx<(@zf(|=Z zBJ3MhxWaNPW2|k+uyU&LQbQDWHc|%{%Juz$hb`UraUjFsBhRdn`zLA&ls3}?{BSKf zhO_yQO|c~wR*uD%2e!d1lfWP$@E2738)m+_?%|gjv@`CK_?WiBpLYvrWd{1EFT)F2 z)M3d}9$S7-_weV&)Gr|yqzNeIUPb6_z=pSx%N4kaRh1MhC+hP~Ai;Zl6JHd2t+G_% z;G;=UL6E1YyeD_(ht8?C#RLZ(iuM^S%<;UC$0zZ&R^g!|0)MlV@Qbdotr5vyKE5nP z*eg6;e+Xgr5cUNUaanH{YBk{Wi+U97Qb^QFm-oQr&I*Qv5X0UuEihTMd4A@%)ooag zu13E@?6qMa9OBZ2RCN?cw0g3{GkS-GB45FQvCExyIM$HH0$(k+o9Bv*Rjw{fQ$o)^ zRga4;C58^ zUrFGTr7>j6wqIZsYs2Ikj3?}08EKX@-?ZUO8Q=CG7}Xj7l2T?+K$GkDoU6Z9Zq5X* zcKO_`z*GtbHVa-i-@~)ONq^$BZGvuf`wiBuJWGGOMo48^z)h_W^)bH?=45N21|m^2 zz3ar~IIoTa##-nf8)pnh#7Z_Ye+D?q^Qvs0N2ua{6K?VegEU(wa$&II3FSI&@~ewn zL~pFK+XAYCxx|9RmhS~o;!KPzTR=ER;`U80R-Rm9Fa4mHvoVORqwwNz${`f1ON+3; zq~~@)?kfwH+H+n{%nGm54ajIWioxAfzsqvwbU0%z+mRe()Oe=+5+7HHe*m#v2;0M7 zYBFIkhs_n*3U!kinTY3`v4H?=4wFe(l_#@k3&PmypiIt2IhSPj$HCWz;WK*y`7WgPPE)`5Tvgk*7;Ifc&&R}f zqO-C>%LQ<9`huEo8A(DAeE7}4MIRZX?KBafUC-Vo0W?`p#|(Tp;KEfPT5<)a<} zGZf6<#dNy~?jRiJ@wkn|xh)-c;H8b&>?u-7u19VtPJ)>=j@n{%R^EESEk>{z1;^Uo ztF%0H`G73B#iFfKmoK9@>IpMhQkSm#`9>Z7n5TWd;$tHu`W}{!0D*;^`Cfm=mnH9T zO>l_^CcH$VZ+KNmT&f{9iGa+ekZ8O)Aycibw(lU4m%%D~v+?7&PT$<864qk|{dQ$< z3c>*TbfsL5~RGgbMih$*tgXRy3Yu176qH!iG;ll?13Dbck$i z!!ED-oc(nfdUd|zr#Ig%-mu{#6HBTySF;=Zk@V9pXX$T_^Jv|!thq81Yth>TE*+7` zLN?|~uCQcB6=0kRjfsbB=y%elbRvkT{uioAi_B^jp1Yg{Nu$}q*|9?~|LUsBhb_tA zYl4_!o3fHz^L$CeS*EAi%M@MQnVJC3-1vLm<%2uiy)xh7GFkVGYb)`u7@}XEztDL^=7@QziYLjuC> zt$z8dbdX-fhVs98`=~qoneHeDAd`)33G(5;=6IxW{cKo(;P?GoESsJ#9J5#QkhmNn z7k@$K2wpN>F4B&+EzGYAWbUQnRYrJFyXsgu`q?CMnsO2g^f_^MQd|J}`X==!Vr7Jc z&JDC`N2r_lo@Vnv=)@N=3^W&`c8svwSOaZdNLkXN7yo%SWw{`tNRHOI^uEASBtj|> z<_yofKT2_a+3KqMMX9uTB~ec6RAb5@{7cd9iAEWahnonv6*G+UNpyW~{5g6Y3#5|> z;cOgA$S8JdIuLIefv2b?RH<~XzV(yNOlfE-2y>vkKM)maZttww_7W7S#KO_LX*A(P zVbVML3ixq}?G_#Ffs!Aamu-!654I{s{yc^Yq|Z1sFl)o0e-Vb`+zL~ZU%g)9{z(w> zo388@O=1BrN)H`RW%syUA?*zR{B;QZz|Sw4{K}wXO^P!c2nX7lc>^y*r+DMV=dnmt zhWASNJWjyj7NjNNcFd8}CqCU{1+lwwn^l&;sXU$bHc3OIkt+MloE zA^J_vB#~{#2fpWl=L19?LZW%e!o*nyIFpZYLB8?U;x3F?re+HUhaoZdx1h>|IO=&3 ziUePL)Qw)}chYX}f^QX`v65@kDBE1Bye!0(O-~3J5Lw&oh%2QQOOd$u>H*4<0$mFw zr^q}v7nG?41513qYkKU-gawT?c2bjwZBhrI92+<);p>7}dK+`rL!txiOYC&Vy#Z9J zIdw;vcnivs7-H=2As#^Dom5c+oIY(eXVr4>1G-!gHiu-1ZwDy|^RF&fJaX%hTQOER zh*Su+8zFKOY3cL`O7DP;(X|gh)oP8Ax{A8_rnW*4hGgRDR^xZ|lx!mosBCVq_Awwf zS2;StPd}Vzl@ijc+;XC2QpiS6)_tU8ZnXntX7{KF-r)JE;D*b>Ua%-2KO5y(eBg8> z5OYadyS$kWpagq9(?xv{qOt!lc-EEMLEOGcIOo4o1P3a=7uPRq&%Ee)23vs9VZHrH z3Fv2i9=%qhww;Mam!O!35=hmuW9B@5#F>03j1Bg$a3q0Xu zybc}3!T6BR`zr%1odZByLa}-}30rDjFay2&?&E1dKNA|#3&;$ou zy?bI3!klLW&QReh<7tmTe)hCKk#%%c6avn?rJHg&z~=J2=@*w}ImUt>nCpw##<4FK zeM@Q&O`jXrGH&mWh=bv(Wp??3{dH(V!(*r*oZaOzTxY{zu?E9EX91de{Iscc z{ER|xy5(wfSTOittsYNKRu3(pXyrm>Q84zyOt0yX(Xt9PMIbSQ6G(WuVUuLT8yq+L zN*&KtfS5Jk$~Xm~{OA=!5qdVAh|v*_p_#vW07-rpiUB{?uqfc;G}2Fi33Vq3#*Q9P z$DGKd{Yjv2tS+!itKcWVc?5J=KDWh`bgw9&AOA=hM~9T!a;E-q`a}JxEgAdfZra{F z>+G}N{>Z!XjL{o{lVu1`p$fnj7^W$c(+`2b?HkE%46CEOagIMe3GM7vhjT>JnS3QP zBd*Kit%#s5glV6EZ)=u=So6SEfUxmEC^WcZK;2wL5WuqYU!{(BCPD5FPBWw6?jHQM zU*UCf+8&-@f&=866F#0=Zg0M_Fydk7M2Cpt2`c^dXuW1cBOcZL_S=<0&K0K4I#xo` z;?OM-?e#@D#D|?dmmB;xFlL@*YwW<{rit6g^wLo&btZSH<&Y7itQryyfH~t`(y&EY z+jU9>&YXz{topp-*(lin&$(tJ!WEkG@JfR6!QT-={x+Mr}aZ2Fj*2sb`9~Qt43t6qvvW3`7q9!6rr|rT*>|2iz5_O~!Pc zpnvb&nZmOCTBxgwmf^<|lxXD(zERRvIg5eWB0q{c79>gpEc-PgH91`sgybNup*CSKCK;TL$7 z^%t3!P~+&F;CdMk%F78wT2EB zL8Ud11XhjRy&Y`IpYjS8VmuF**_2Cte}Ba740jLG@_{g%Ba_pWGswtq_S&86pe|3O z4aoHj_Uu#o$BP;b-SDjQ7P&-RA&h=v&;+wU>y`IQ$&J)>5Jx=cq9m7EmL ztkIwg2uM9*9`FgC>-wMuDvjqtxxFYUx~`6Mx=zwNeFfuehXJgZr?ME z{|&SWa1OBm8v26n*o{`q5jWsqe&O5xoqamN!zeK8DehO%iA7gFhx9yhd2~%%=BMH- zHcn%~IFTe&(-^@_w`=p_rrmQg!|_JqL%e9SJY@&jq}n7vp-Dtd1HxymSyvJ~Qppt@ zrn58^Ak3pKpbU;{fEUn|e8!2P8=bpAyH06xYrvdMXj{yfguTg}mU zlWJ3CNUS*GM7&maDU<~&uC=3(-Sw+;D_`!N!p2N1BJ!emmHit3%y5ztr1k?B<2Vd80QE`Y*Xa2CXTzQOpI&I-C-PU7<3C+s5<*fvP8;JdJ}jtC!5G6m>Y#Q1@| zi3_}XbdHM61T&=mwaXsZ$%Jj=5oT9oy3;yyWg0R=*X-SnzlG2?!j>6s)_Dxma6lrR z$Uj`~X#|YYEN!uYWI#y#Wp_`~BK{EOfY4U>mu{AFr?Xee=AakXXgO?JYWL&>{#IGI zdSfDICSbh!+Xq-QaC2+Kd*`Kurc$9Q3M@FuO^#DsA}cwZV2O&1=Zi>=n`?^wd41(N zbG0+aI&8*2B;Q2i%d(6JQDO8B>X_%c)r&6X{@+@ZiYs2r_C`RiFx5}?I!RZHr& zQMr^S#WjVNc+fnTq=VAj)d`~B9ETOO5@r#)WTh9}9KS(orn*;@%P6b`rWQ&b>Ho$B z$Z$)BM=gNVJ?&Bq46n_2sOA8>)rW8|v|XpucvaL0muPLvc$v$fs_;zFmzyra1Ij9bocrSK<}R&V2We4nLQ zuR$^)ttbH+^OVgI5Sz4Ba<&TFyLTkZUAs929T+i|2e<-UIt+xyiDvUS<`Tv3(HyY* zUwpRs!|&n0yn!rLVh!*Z_|SseXGbG0V?iyvSo?K9z!>1WgJ*;Ae_96ug)5N$loo?T z@@XDuGd)KKWxK1SdUZPr#7PoNKvk7knj@hHq-jFOA1y{(S=_BP!6lX+XiWRWBP3A? zQxr);%G00|Vn(x_1yswPB(gSG!HN()R1IrjEE@O#6OeI$RD0wg0uG zPXr10U25SkmNv*gs9C;a#te3iFn3LN-^au5o6lypr(6N zccR}If!~(>kbO>XrkC$=fLE^2g;t?W`^a zH7voxObOT;${ao1g;v-ido&qvI?&qpcV`*JCWFvmH_r~vywv#+)#Dk@wC$n4y+X5? zku!SU&EYa=<)GC=ozDb}!d5owma>%YuP52lt8}ol!IsP%79A0g*;j_Tpyg{}p7Ym& zEh?|K%ked(ry}-!Gl0cP+G_PMN_s@ex)8x{N)XMcSg;`i3&YRrGD^Iv+_f1wp@WHS+r5z zdu(%*05Rl0LIIRN2NKii>&~_yRh5*0aL8|s|3D}y*7v#92TXh*w{dm|UQNx{&J5ML zVQn#5Uxj(z#(~K<9dBt^_VMMhK&x-m5l=g5)3y@^(x)~eb+R<8wtG2B>Vlg)j7yfe zYnFnKE{!%1o$zn~jr4ygl%!t8=)-2YAY`a2E{d|1T|kvQiZfTrynU^X85GMGR>RCv zu_UbjY7#(b5&-eeScC{r+JZP}1iFDEigO_naz6!R&WF&oiife&q=SIX1eJ2-j<(ju zerB1Bnl(!o?3yS5|J51QU>KN*F#Azgh{`jC5V*kW^9Qk9!b8RkAm|hfC+4gXzYq*b zjMmJUBCYd~-||ggXb*v~YQMH1{Dsok9=MnZl{yd3Z+a(?%{*AL>DRr$wWQQYLFSP_ zD9mNzW&pWT(W><;=Y;$z)FHVpGrFqP{c=?TT$u=HHQa5<{V_q{hSCYX^ut`1*ERbp zqKOoT3QJ;xjQfoula~FEbE=WuAFb;87Pmv;9ryCy;v#F{rCQfVkaS=yJKLHG#QfnDJ*d3wp`DUQ7eU z#&Y?!B1zvwR1xN1#BrW*>br$;4UQ!q;wi!iA_7uVofxV{^LxlFFyplu?b?`e=trFU z)@@c8!~ln7dE}rTakDrRw4ovN6_8(~R7H3Rq#Rrs_J9f&pxi}kGN@=QffQ@`65y09o|SUL zi!s}Q45*gcR7$txi$4AeZwKknKbBRcwm6 zu4*fGif@+@j{Z$?k2-wE^p8lDfU^dRV9|rEV&G!Eu>KQ;0V-V`w(gd)@a+*f<7+_# zGBz&uJ!HqbEe^>3uB_B3qgLCu#d08-w^fBOvk&txFmK23&2E*OaK6T1aWSU4XQUXzaN(iMRQY%MH34GCJ($5be#DZo5 zM|o1cR)XT%MBN;{7|E@pTA@2t{D|3tfLrHkZFfo5tG=T~+c0vqZ_{&C{2sBZw)@kj z1q=Y#XLhiCftN_|XyAqvW;zk?bB%Q&5-pp^(3x|;Lx%FpE@5-cSZtf{)2xJToU1`{ z@(SpCSB09jBg!Kga*!tlT)To1Mdjt10!_ZZ{WA3dMC=%JMd4YgCXqG9uW%Ug=k~2t znFJD-1$&ExhA~8Niv@wpENeP}y09ac=8~(0zbzDb-uu1>rfrWFi_; z+=;slsz&mdO0@U1o@s-J!(9wJKz6D+pfK=@ME+~pSuLPCB4{U`wXNx%WuOWlk%!uO ztvD;0YUn)v12h^%s#umr>S(MCeXv@uzd1>hf10BvxN4|OVV;h1O2E)1E|D%yh?}k8 zKi(hZCKcFH40-xk9eMyKy5?-6+@%a#SOdOCkS%yR%up%6!F*olYFzMuFOZZBN+*CQ z{a^N0btURcZLG*|nNJQORiIfx0o=TPO0lql1P~`}&CXaCVwa|u1`GnEY{jv!h71A& zz9`W})(T_qnFRWMQO*u^fc9Ky!-jS^q-uCq8N@6ujbhz_X9P+h(-g8;;7-30ME?GJ zYrND|x{&G|L1AdMRgaOyy)`Pym6P>l!CJ?bcyQkMzq$gb=LnuwgwcHHu4as1HLqTz z0`hRnPn9vZBYL^8Z9`fzHn)w8eVL_p;C_^RB0CZw%?}^QBi5Wo;=g+al+N?F!#(V_ zz2R-*Gm14&`_T|lyqKZX2qqOEE}*~*i2-bw1ygpI4n2M@FjaF75Lztk4nt%MNy}>v zfGzLn@;qrEgK6S<8u>M{UKSY-*6I1e>2Nq5R3nKNXPm~wu()ZxUY~p1+64TdOK06L z2@Qk<0xU#z(q$8gDhwAs7&4-ezsuyptAxcy(qb#t8?t)CN3~!I@*@~8HR0g{E_?-h zv>BO2#0mcP;X{FLbuVNU1fAJ%QD8Ok#oxNWPAXNpMB=^9w6=TWgR+Dddh*6}gSPG- z)#vwjL-FSkzfFM*HflgK%w|TC^HcxO>*Z?Q)a$@jK)a)dRC878Z!Kz0FRLE*Hh7j4 zwl}CNQW_?3B384X8cP6ARsHzgS?j->s}!SF9&mR>1u<0e&@X|YV1#z~KvZQQ8gM%B z$ZYzuGr*H;mWd`?_+edS@?nv#1Onx74DK%cEmhM5H=ES41OTQLhqVqp7ZCGQE)8gj z+sZx%uirtNVowf%a0oUDKk1ic5t+z13>mu{?uU{_w2V2og6MFJ1Y)^)iefFZPflVg zsqZl8%on2-IgIwEov6(wvJ+i49FVW9hb~eF&A!miN761e8;67fFV7gq)WbIU{Wdc# z)H$+B-j(QZh>1wp9Y9oD%EQkC5cJ(rBo*OHrO!d4EOOCa4Ax=#@V7j~%q^*(;P&^d z9ENbHnr}(OH~>3Ty1-CFuqSpR)Y%wJa1HgeLEc_IfM>289NDRcDkT9=HDP7yT<_@{ z{8y<)SYK^J12h$-f`o2UWiTHZ1S@zm7aAC3c(p=KSNJ&mmBg}Pc#|vo* z&BQ>Uq}=f%_t@WS@5cYjp?G`ET;hd9+q~z2MWWP49B3D%6*_TPR{~OolYw&6zaRnR z5T$=PgxmR0xl08$)y(gIL~aMNV)F>uMdl)|39NYlOa`UOWl|P>EP$==6npH?^j)F) z%?Tl{`k6nRDY5Tg1|)+6pDNQ~2I+e=0I)4|dNNSF;-PAk$>iK(-A&Ax>(j$g;0HJd zv>Un@^GY7K2Uzan5akObl_#3DZ};)DV-U|SJiIV}1pkm=hR6&>TN+~$P+|bxQS9Fu zpi)rVmz2pFBE~RHmxbnPS%JNToWX>)KiMLHd`9OCE9+}83&nTj-Glq>L;5w12ErJu zE+F*T^AD%__K~C*kccX=4qs4$n2!!=+~}-xP1W?e;*9m|b3#74C;Y$-OXU{Qfvoue zZRiLSOyErM8ZG*(jMwuSei8ReIy0RPb)@lyXC0gMY93JKgN2Hs%F^LbugI@2pQb1R zD7c0qW{Gcb-{3mn9^h%?(WSI&WK3n6JLv2!guz7JeGP$J^M$b&BQJi96m`4-Kjgkn zF5jcznjcmnmkVgcU-YIchzVJ^BzoFp7||Mo{=$x&F9!M%F!?UyEQY=mp;&C_PKIjG zMiC!u=ER-QNN>s6q+j0N@VW)%kc z*v?KI9)PyaD( zjyh9x&4WRAvqL*1ZbT=;tc#C+g&-P>aCloc&@P)_dm<)v5) z@#b1V`NOOYW*5Rs69|X(z8xLMV7KQw2`884S>U1ur{@c z`3A@gtCZYl92hcbp+VhhLr3{hU)+{Qc{yGx*=a;JfGQGniFL|A3yNWYb%CXotJ1iD8WDg48a&;lzVyJ#mb# ziYteDb6`^twnT3DhILK-`<87q#5ZAx4$1qS0~J!nJxWN2icBLF+1C@SHDt?9?InvWF^+W}pjogkODrh@Dr(>*5bj|Rzz0Ujk}Aqg0_|Em zM%ui02Mv<0ZRNceW_~X(XzCgg{GlfN)(t&kfIs|P8O4KdK*>dhFm~OL_KVrjxL4BG zR&cJGkK3lR__>AIA%&Ja1EJ6%cpRQ+?x;IiaRtg^xxz#Nb)(`avhpw^YgpxDEhO>?db&POL?Ks+*t%V(X_{Q9$^kNfQ5KQS@X)Gz%sF{k%r_fU4vq@*{{X)9 zKY%~2&8cGf-w#SLMtS~yw7m9{RD7DnH`vfF@?Fr82ZM!~R~P&pNy>nR|Fdfauquw4 z9*Wf1J{2V-5VJG^$sZaUe3q<>CnA3t$4(I167Z`F*$J*3Vt`7cRh>jT#`vr_ZWS1T zaL|HHySrx()&ER#PAAuwnjySBzdg2U%fq4(`dom`<>qZ-c&loKJn9bXJP+>YDcN#P zJZu06$?=uAeSEJy(Mq=)oj<7}Ih`&cTBc%ZZ{)ck*yw<#yR?=RJZ|0-i^=$b`?QV= z2B;Xl=@{xh{*Yx_P7D?z4dxl_y#&hR<$P$5z;yy3Hw2EF_=68}?i{mUx{AIZWr=F8 zn2$r(FTmXf5d(t!JAtkqXh2ePF%SKpPj^A$N1aD40x5OG!+5Cypu4hwE+fbxVc!tR zjS{aWKS6{34uc{1&SX3=s@5D&V z&BvNlXSA1G3G!WmNr)I#EbxQlasHl7{VDNHcR`Vx+lU0c?Me6c zydQ)L1It~M2CFyOrFz4>L;DZ(ahhEov#7+g9WH{qnz04ByWTgRb+*x?koWjQf zg9D-pSWHE<98h5YC$2=b{`FZpx;4P$BKy+@bG$HCzhGMz6BtI-z{*3J9DqTg#_CBc!6OXrIxn_u8ZBZudYgc`3As%FYm`B*ZWzXH!?~b4_5mxH-6PtbG~wi29)-du__#i zGpgI{CMf>K4)R?_0Fh_!T0Wgp&5p zOz+X5uqX2;%w?Dw zl7;L=HZAd&geOc+9zN6Kjw2i1MNpMe2aVw~8M0md@&sstD#0^4`lRNkJw)48fBJDl3e~Vnu^B8CP-KGxmO$nt{I1S%Y(dpAn15~BPUbKc5 zLj(A>i*|Ty6F?AzZta}G1?bRwk7yJ)0F!pI1pY&>{89J&{Q+?6{3k)22wcmICNY-- zD9sV)h1%m~Rs)vtN`zO8^!gv1f(=zPgp|vF)y-wHh{~`3RyXC~^=Hs0FnBo2d&k!YfMjti%6zNgT(MC|5^(Sm>qh?pl!z+udqX^^9F&}6eK*}&ng%qkC&`h`Ee!E>lu$f@;5yA8{!WkZTo;eY5*radWXzYW4VKDn|XFCl}ywQeT z6t?Q@&l-bLWwuZM5%B*uSfvv~b>6_<3T`QCa!en3-9w>i46i_LZ33MO1^2-hGlNcA z>9P;J0g&UmVHq}Dy1Eta3P^PZ;a$C{4NtHxKl(88j0M)IV-~48us&K4rj81hUN-7C40l!QvH1rNhNpr0zvF*L@_|{Y0W4#h zvAHwW|CL0wSpTS`A-W=S5)JTKC>>+!D1&$pLj*GgP`PfeSLodi3-K%fw2-{8{} zJTKIH$RCDr-0mI^q5b$+hi~&pI zP!|9Qs72jzYn+MPy8lp7WWdBpf}}>~ur#UwpR?wqbmsU*2CyBzt3Oucy?j+I#>12d z`eGiO2GK2cF=A$vrcp_57V->R@ZiB9z;*f$c@{WI?t$i$Zqzv)FqX@S502@9Q9h&A z+PWjQzG&-vSR=GYxbPn=#pUM60H!1~FX6wU3Kbkx3YM5QDGbs82&WLk6*x|0t-ypG zd^=28m8c0Hlur1iAJD6Orw2F@3&L;dzP^t}v)28#p3ZegsP+y6Oo`)0o(VbEiRmxL zYv6FDD>C~l98HsWE#~bGtSmVIQD3;6&Ez`ie;s!UOwyyxyH1Wo`ex+7KNKn3S~-e! z0o|B>F!Un;eI=*JV@dN{_bz7xTsHf7)kQR8W}pb)3+(yFc9ski|0HLmt+-xy%#8{9 z4^LeC0P*4_`Tgj0NK2FlPM2nBXCpP z1?cZmWQ(f=HpfEJ2k`?+hxZoFI0^=W$&0)g2MA;ly-4S#tC-&jVa!Tw6UOFW`9Xz| zOaw=t6Cq4>1raCQwc0sNttV>|Eg8DHP_v_T8G+2UaKPgI>?~k|r_{t$t7uAOf|O;g%B~s1#MxMl+;_U_Nfi3XTk1eUQxntmXa{su#m=W@5$t4Q1{8 z#Pm_J9B`hc0JTx(>_LGiA0jn!o{9pwUHv0wUB`0vxjC~OPyI|B`lB2VRP%E6m3)B1^nah#RDFa#% zs!1oQ1S_|k8d&A|mBFn-rgv$dRC=B0m}lfKw?s+On}fy^&wC3k)@Es7Dcui~RV5K? zTqB8-Z6H6;l`Clu98^m3FJKBa%V?GBMtglMJ5xSC*3(x*rwr{j2L9+xugS=?7aF9Y za;M{voX$rUZ)3YfEysiI0$1eJy=a+)cY9Lb{@v0dXvK_UUjv)P-6bb9myo(=y+b2VxxbgRx3JrJGg*R zzUGBj5w{NdPF#);xyA~PADK3mCM1Rb%X^m*fYX&yOGk3AU1_mZVX?n5sIL%_p89_L zgDF>Lm0Hb{o=a}bS4h;yobsF`I?Hpbx)`1wIO zcNfu^wmwbfgXFW#PxyGhw^XtIDU<4jbYEOMKxZP6-QlTQSEDzSrW{uxdKuGGNOJ(k z&}s>w;YJhFLOE$mN7hf47~qHn1NaymtlR7mttWo#gjkqSN)PpSsFD6_AI8Kns=R@h zkv?f($Y?)i(Y8JmOlj&mH~0v{OjnTB&xcwwl{QoQ%P66MIagSptTODIvT`*Y57q|a z)xMviFHVpNWeT!^IV>!ag%hjULu6m@c#e4{95zrH-AMm}t zY*35alyMoa0yGtHV>d_!{3@9|@=Ve)&aA%C@N@VbbJ$O+WG;12MY7B0g?=&!zF+nSLH?*GjKz_|eCde@K&FN+raZZm+J~aeTHUQ>Ms*zdyfo2tQ8NXPF7m{9pl)=onXjpxH zgCOp?IREAtW}{CS?1s^WKbK`){poV`PJJcKSMd2LNUw$0 z(+1xJ8%8J@3B$530IOXq6Q(d%R-gb@Y&_ss z`tw0%Dl!!5vt^r7ljr9#g>qxg=+VJu%PlHPJW_oqR;@T!bX;|sB0!EyGdz;UKiC?8 z!h7P2BpqqqpM-}msQ!H@W^TBRLch^0^mz?yQvUM@?uq1%2Bc=QH(_ONkq?;g=aJZ$ z!*+q{RC}o+&;5g3v|B{1)G@O6Gqd5IQmi!YQI5J-KzNg7uEFK_%N^@!6oliERh$<} zft}SmbE3^P*m;f2_fK~Md-Q7<6@em@VFc<_+b+y!QoGZ6@IY<&p*6m*PRpr7@4OQQ z?wnVD6L%Im86!rB*syj&u#h8A=7*akw)5NFDNyaUdla`juK>-Zactbb=6oY;?CbLR zf_LwbtIg+d@80EyCz0*sQ8m^8kNV;@T`%a5NKifq_(6tdT%q zME`3WWc*I4|JgwrG*rUz?>b~JVygnmjTXJ5w6-6B%+)a@tG+JESu(B+&ONZS4Q%$a z0Rt8+jiSipZ=T=McdnJ!%C_U0R`azCdOH11$$81*pK z7is$fGpozz(fsS*3&Hf~&6Hv;&KF@d<4O!4N;p|OcB6SO6d)$+@d+CUk;O5-ArsdV z*uTSHy>1&CvHgFzddJ2(8>Vfvjcq55&BnIf*mly`b{g9@8rxZoZQHiJve$J#@2C9_ z7S1_m=9mLT2A6#onvq}R0=>nNk6Q84*u)$6QHWt5PY@%5NbW$VV_Y^8o#B4J1s)vd zGRiK0^=!{@!o|6-cMa=Y(3)wM5>2D>Ju|w#l2+}%f~cww_@B~n-gTjxvDq^q%n=c@ zr9~(6;2KvKS~S*O=m0!2&gdaS4FP2ooXr>tx{{a~r3MAO;NjRxdD+myTy!hu1I<1h zIMVvw^DG0wa8HZ4LWPbRX4Z5g41CU|ECwi%K|xw*+v@7asZCi;LBP4$OmC zPUYy818MttH9$71Sg`_B3z;Z@ya{N67$j45@c*43R~uAhj1k54`>O+(s_955 z_eyhXV!{{(8Cy9heQWeV_H7DBc8f`7%EETgAsg9DxCE(5_ZMf((U$@e@4!P^h-EK@ zq#gEp&M~Z?AFI?S#!f60Kn6FaEcq5b(rr!+aeDn$7~jk<;%&-iN(vwoLN!P%v}x2- z9|*;$|7UmiSFcdig~}tx9+xi9$CzDP%>VHpG3lQ9NMZE%b?XKApcqD`fw90v%xAT^ zc&+V5KY-C$It3qb|I>RDNm!iqV32*Yjk?5lx+1}xbuqdkJ*UH{ydg z^5ARSA{Ml-An!?}5Bo}xrhT@(kQ?6sHoVONZoP%DFO$sTUqDYpYtXHDk@?9fAC9lK z8v9?FjZZ@aYksMFAf*npzK$gR%+U65oT693(Lc;@-N)*Lno*4Gk+?tTits@wt%MGj z&4C4lP(OhLSNi}Yzd6y8oWM2=#OEo}x&2*T?^PLh%O6EcHfC%rQcG8V9^(Aw*?R{A z1RL&fLCt4CY~$^EU(ZXA1EDQhC=FCVOq_T0=Qx!~$gz@q?es<6>48&IrK)b~ES2fa z&m6ZuUF4kR(kq-L1tYf2%@DhGOe3=^)QM6~iDR%EEYdDp_T2rpX!gTeA;2(%ETEERH>Z8zC z)G5#zYNW)Sy7bc(r<)rq0wvpMET+57Px%t0f`nTY?O@?Tnf-rs!M|8*<$l+_mMZOF zK;JfaRt^1-^&_FS)<&%6<;kDS*4gSC6mN?#!E*SUepZtp>|2|mybA!LKenc<{dXM+ zys-bTcb2tmAlt9j0L~E#J&7A!TJbMdgpr5cEoLgw%9f_bstiYEPnx9tE*PNc zG`OgFE)sn@+J>qEvEo=n3xLa@kYf_Pwcx7ox*EERD<#@8i2;iQ6>&r@V_!?hQn%Kz zm1MnJIxrZeh{(Mb{(JQZ$jJn7J?G*oP1%&y;Cfh##je6i)EWt>cuNQq~zF#=d zAwxA}rAsUA;%v=GBjfzEP2zxaw&nl_*DgJM)MC}`*d-fXGvz2nqJP5$&;!bU!>pC_ zI|09)rJ~sHQJ?>AQv(^DHq{f+ZnbgF47yEtUHn)b5rW^bnxS2JAkVwD^7%jGD$IFm ziv3Q5E%qb@YI_stJ0296~%zgg3BFhglL+(vjDw5cb5`w+&V@=OJ67~MM21C*6 z;2!akGMkZt)4|&V3W-$>$V$jNo%Tdw(@PM-7H^&Oyx-$u&5FgOQ~5i+U>12}P0q8A z?1ov6*Ag#TDu029pyP8Hyb4QTY?i?J|He6yV$sMD1kISe&8nuABj9#{WYgiI>SwCSq zXP3Qnj!WK_nK~JWyPm3}5cYA(0<*=vAZ3$LRczZ~10lF+=E9rG{57No-doQetR1fh(HNY;b_frQ8`>Gy9H4Lz=!veD%VENI11xKJAV zchx8fm9RnAm#FofZG`qUM8gkSWcBwLgL?(otjCA4l!d;C{f-8>hT|0%iu4|WKKJ4i zme2fDEd8}0tZJ9?2pYs6-@>pK`EN0Tuluik&5{D|FKBZPE~3P#492a0b*(y7W!=-A zrJ;6OOGN-e?SadxEqQk0o2z9zoaKpjjy#91-|$A;2zYGM6I3`q05ajdqF`Bs03XRv z*ayHjnN%kGZ`sB?bl#_SL#*9Z(Dp(za^B?PfT0}dxLevcqGF%u;j(QE(NL#DrQ-aQ zDhIt*ZMlB_0SPOK-^tj>S9`njAU%#u?{FLqwbB!`Dz$;!dmS0s;~O&(+v$1l5|;hi z4{-dH-owvv2N0a!BRRe*S??UrhVzdzQGUR<-IrhPOXa>uow2;T&imqraoI<)S=mol zyDY~3Zh7f0??;?CLO~Ii-*Cz>;1fDc)U=vkLR3MaXmYX!>ql^%v)-=?{MgWjTK4@^ zg%3-q8-+iRsh({@5%V$^FUuAv@)=DmE>}BGelxhv#pq)Fsv=sx#6%@%5A>apilBOu z_e6XjLaFP=7cvTZC2*kKPPBj=IWPWY$io2|9bDMVu_C?jd$2Lr<&D|P|EKx0`X1c& zPW2%4tai{ds#Ne^x)Sb7opg4`#Gpcdeh?9Lza|qd^)F%dhlfLi)r?g>=&zv*X&Y{> zvslz0jiE(ZdEb$EgG%^(-o;J+ebING4p4S(<6+C6o`eVi`eAfVh1|RLh5VlfP%}wi zQ)F*P-nwC5MOq)Dd5L>&jL`kuDY8sPNwjGh1OY{U3^)V_L1*|=N>Ac%8v1BbL-Tf| zpZ$wv*h1*;f)FO_kJy1JC2O&R_JrWK-MClFT%XDRAv^#1Y$bD8tdja^AmM%1u#w-K zh9cIT3MeiNfZX(KUr645&weAz&d0U!>lZSf_-S}_^VI)(&2jX(Cvu&3HyD*KBtZA^ z`S!gp=%emU3TGK}DbFt`d;{F!{EZ8PV^-Yo|B0PaN+56!p(g`Cewd~KN{xXd7vE-n znoCJX5068;-*9C*s^BSBrI5Z9@O_3&Q!)ZUTWkONGDa{Zq$k{*g%HU5>u@NU?pT+Z zrM{~WWDctcO#+fm3MsK_icjG1(fwHwbNUwgD-C2SdtoFngmjHwjS(|m^pVo&OQ>L=Fy}!5~_Y$NGBfegLK=SwU&w(R?D$|{ztH7Hq4Ix z+p!Nod-R%|3oj$y7U}E|#hqD}#2Pd7KMC1j*$;cDyxz|hQ;ZSx zs3O9v{|*T$X|-oU^sY9-f+9F|!TQp$BL*!3c+|%ImL2JLY234{oz}iUjHbt(ONfA# z2r+VT1CgZ2oWU%k_DlhG}Q5owjUT6co zY?jVGrqoB|Nsrb1H>$k=A->qxlRh&n37uc;d~g}fvd(XsfQyZO5*rp>w~DCr_tMfl z&YFyO<}*vXvQ5gFj6AF%Niv<>c?a#f?=E3G6biUs-;>-M^0eIv8>f`&$Gs}@0Z&r^ zU|K9CIb)|Ao~)Cd15WDn$wY|T2!Wzhf7Hh{5UVsVk&CV469b%$Cx5X9K5kZISPiTQ zd^i_%NPW-b6{S-?Qg7&i^_n7flk9PeRnczE8-%^D*``0D8Q1j{K$iZo{B;e@1WIVm(#=&Z`gLK#QCq9<{n{D7{c&IL_|BqH6{YECfK*lI1N2-*M zLQTH5l_uE0)2g2bkG47*t02(R5q_Ks;a}mr{lHug4t3{l_R9@~3>#LXGVZf;2_|1Z z`BqQKr@$01LMxeWglm?bfw6=6ZXo=L#(Z7NS65qDD7vm#H16hV3AB*&VF1SemE9f@=K4}6cbkEV3wpSm6 ziC7npqx9*5qokA|46*Rh2hLuIlzhs$hN$S9dh;lAg{X(Cs}F<2Ew>TY%$U&}mJO8& zGLsCyG@@w-xif1<@-x^H62u$+AK;*~_RwG|5HUSfsHr9yT<^@H%nTY-q|PJFbTEWO z?MnQgH=(Z`onN=L*e?loFIEt9)`8Tclvq0bLb18tcH0QzI~m)%{yz9qx)uRmPWYb8 zX!5dWL~}B+p27Ksk!haqsFzCvNyoWh<(d_Ynd@rOS%hGiDtjh3C$P+PkAEz5HU+Ok z?HXx!S0}&6M~4eNMZ&ZPI2*a&K0iUpCGXpR>uCV9)rOztBdaj^vO8P+ zy@o(>f82+oNDalz8Q)B|o+c=f_JAKGL>^$iba-gvWp$BgCYySy*yOZ9Qo=o6a z`z=s{c11GChQlTX?cm$BWx&$`EvNpLbY_e{Hid@ZXGVKT@IYNPmc z_?hqk#ty-$jg46A&;j0pXm~yg8{;N&4)Ui7w^V*Imq89wH55Lcw8M!(1HqxedDt$G zViYl*k#E6K*Thl~|2t`^0`}mRG-lXElR(o^!O{qGp6Ph>J`by(kt z!;{7U`Jd~~`+t@c+3SK}C8mmBLx!K>ZaCNP+2?R5`RF(;A}qNQ0qzD5njX1k zVjlK-Asmn6bUucpsoUYHFN@E(yb4}ZYLy;uB|*!vLBW5B=w__0^qqt$1gc2c(M;}X z5;$&7Y^OW0qr7pVm)r!S{7i}w^HGB(vXK~NpL+Z2*S=caF>jOz3|@j;ECaF9?j+aq zg(Gc(I&~b7859CAsIRWBFc{GA2+-IpMWkVBLib>M(THiJfvn!E-HV;w<9aSnAkRj( zgUJa_XQOA|`>lPVOF!%{EOR^FFa^P5a;gJ)_pC6@d`*8V9b2nU-}q+=;N`tp>C?_p zph7yxevZ-hB)oPMkn$mZjQYb3KWD7v!0&i9o9bWQg7lz9-5w)lHbacPskr-Jc^u&) zIN8E!QwaG&1CdU}os)$lhYWWtKowsMjqM00U1ybq5J95_xZ~uK>LPpA;+`wJDMSoo z`fp{L3KTZBnge@5&LbDm>UZQpPEHOKc<=q*9p(PkJ{t#dx}Q=1wsUouO=nbh`P+**HW3mxB|YQ(b|>NU*Y>FuIZ8|^Bd(UW+Mn>iiF z(+!l4d#2qUPUNcgNsBPd*i1$yE^*MO?QHBlswE}~S>tOCh_g4iQ6T3kiNvD4?os?} z^uq(AA{34*&u-eA36ZRdy(kx@|C%R)r%qZsLetN4Df9({=PX3PF1E}~oZMJwa{Ivy z*|kq#no{dytEprU?%EKwAOH0=H(_uTt&*pl?Pg24pa}LpBT%TGWqH=AS~+8IX)+vk zbora8=&>Xt2DRO{aclB(ecnL1532yH)`<7^Zv9oKm;M-ifxU%T6U9e3h-UyaS(2vj1k0RIK=x46@R29%7xwnje zErsj8)VUUta$ky76$`1k-4DiLo zLm~HTW6)>3`v{f%g`Pn3VO?{jF=L`kBJ?S+L|nz)Kmu@fq)O_Achg*AZD)y?=Y~4@vJrk+RGRd8!MP9C2 zen8}JJuW;=5}2(jC{Y~$J8qou)m2syEjR}(*-T{sCSJPKO>wB`^(&V^OFg7N)3-c| z%~_`>ZUwJgN|3zD%0}E<;H6bRv}ZZH#zD(R7{^il_!MR(KbcN-CTpkKqVKOY8iO&Y zbNh{G)f92TTen5QmLqNfEp@qaieoDNls~8Ks;&ve&U&S`a8j%yLFEBUe-ii;V(tC2u*Dn__@JlsMG56(KYaFLzuM7cYy4e z8n3=yCQ=X|pBSv$A`Q6`AIJ1-f*AuZx`;@1)C4Q8`6^U#C`LHvtXwYmv;1{P;M#fZevwUkWhZN zL^svIL?n)J7!g!PBU6U69~~?nAf|uz#vNHfyG5H7wXQzK6=E{Y0!ODM*TK^J)xZK$ z`DzstIoaBLCaTnxK(t5L>+i%h_^ND7Xg8blA7n3e=8LqEol5dlTW=$SSS@!b(X*o? z)L$D0+g#zKkI-fwA9jKOL8Jzoi+nh()K@EmQO*1R2OC zuNxPu?lyAE!oHfq7*UgcBK5)#L2sKt83#eM>^fO91b$;a%EM-B?#T^-Gfx{>dA`wU=R{4ExA=SdsgoBm2bx@mOojiX!zxi?COO z)6u^1Z^o5TGdkY!wL{-Tx$FO}`mLe6`YY3d#VV8swy$FCg-Zx|nLv-JKBScm$dq;T zHY3rfZwt6L%pO_SyB!TODLfmT}UH;=F01Kr>wY9+{D;R*inn!=CGUxDbfYuvpsc)Z{Q z(0hYpifcInkX5mPsB?SR!yPM_i)!<}X{8vsH^f-H4|wvr35aTKq+~T;+6w~*OumjL z05y){5t>^H~KiVyW(yf5dXY*2Ci##i8Z=ZZI1Q*i1AwW{MkX@GX2c|eA zGL2@SZjQ{4VPj*Wz0klmR`1&bN{(o}Xm*Wl*@NF)gyBPiGJqm-%!`|UN#v(8NW+*; z0kqC=CF~REwXf9kCa|>a4`M)ULJ6A+O%ygGcO(-3OPo*A42|C~c)34|Z_2fpZ}-a% ztEnz~BMD0^mD^q(OK@|JiHN^)aUV>4LPv-VxYDkvHH9uoYM%a9wynW;Djpq}X3zHl zd}fs#Tz>=xM`aeRU+_|I6foQY5J+<=8uHD%!EoN!32Nw?dtRBPuF2gllkGxKxz*#3UL zetgTKBaYG77gw5HJlDuMPz=WT&G^;v@#=b{NSX{Vg!2autW#nAWOW^sQsO`MneYo1 zk4IM!%{jlPlEoZy#NK%jC^*wX;Gam2QQ5ih&t6hrsw$FH6l|u#MWrYOrygXH+=+mB zUwk<8@^S&jqhT4PVrjPYjkc7}s7S5rxJ3pMJZ-30ch)bP> z1|Qx9dec>SRz(koPn2i#EsdprN{8SdfnVZ2Q!0dm;dwgzX<{_8cuhIG5oU~Y*wXw? z2d;&Exx4fcyDHtwOKEGOp zIEt5C^2!uT%^5_ZV;PnM-rctfp7GH7OQ9T-sMgAg3tj=pGIz|jqe`XH3+b-BT1JJS z%=sokW7#blN`}vvfo3xdGD{5jL~<5Tq8fQB^AzRn>n3lpTpnzNaTnHr*06Mbkz(yO ziEXOftpGYGM{pC395P6v>O$Z1f>s+-nuzXOt@l)@ihnR959UF~&Ns(io1@OK9_JLx za6KY; z9s=I~B&?4L@$_m3g&CgdukDb=jWNBc$v`ZV6OvTbRVn56GwvDxdhPcOjV~MXkgy?n83zV4GsCNOB*0{HGp9nCvrB0WLoX)`Cd zaXVYI5{1caFoW4|n9QGJ_|pE|u;<<8bG79k`|gQ8HiXnrjF2{P?~>D7@pK<0ChA0k z`=X7%O4q?mNJxHs5LT&BW5!?(&>R9$bh5&2Wah`*#uwPm+U$(n!|WQr!AAme3a?W@TH+Xp^D?w;&y zV^XGh=4B4!W@Slp5FLN@5l9h2-IoK|x2~Sb_mO@GA?nlSus3Xc#@K4P=5|JTcEH*7 zkY!z_B_T*^3<^&K(~;!t+hK^K*c`~@OO%>_2IbiHEVd3xZFGkzlR z-yJS(L9$TGYrN>=ivsoD6w!vm$Jix7F%nyQgw`ehz&TmY{dB7ZaNYIjkY`^| zDmCMz2HE0McM^IT;}hWI9L2bMk~k5}z39rREytUMB{)qI>#i9S>>9tTq@u}|($Mx< z-J+187I%=ZGVPd1#Hz?GJ={Iev8MZz7SXw6No|h(ep~aq=o*FZ+tT_)Eng@MFlZFz5~9gVbAzWM%WDEW z|B1#c`GtqW^Iabr7(p5%;TX3*wL!U^M+!+~FggW_EL_1g)bHAGO(ujCd<3U)M=n*> zm&IIMqRxJ0KI@K3>HAFeGO^YPRtxv?K7FzL!5`_;&K^|~Y0*xaJM{EZ5wB|~xiF=T zh)odNugWP%V%j4&n}S?j7Cb`yaCBKhVeQs;&ijxt>F0PiYowVX*;ETP!?4g6AoJ(# z+ME-=E%~jBC0WoTx5&&1yj|%A(dCg>R!qC7NuQjJuIL_Rv;iFtMD;kHT$8EQVbuO& zI74-^_Zu;mD@`@Z{dRxwh*mvkOH#UuD<*SU@#5h*#g(Eqt6g3?r2NL7ytnuJ$M+hj zt$#WG`XpwwXW4XMvjY>HUy7kSnq6ECX304|35d70zkZS$^T|s55gZJW$bs0dYqF+7 z`{pYWvmx>$GmX*&D~l$uf-fm;qI>m5tt^~Z(3h!)@-VRv+_@wFeJ@J4xlMqXi7;!$ z7SmTLCPjy-ekZ+YqgzX82S%?fQiKpiFb*t#MG9<+acn+pw=)jp84`hn*HgekN!NxcTI+6;;IRL9nVn}}G7ibo&Q-~<11#NJ%#`Og( z5WfRJ>At_e6)K=g2j;J`>&FeH|uOCR-xkJAb?JKJx1+%)D{LZ3)tl}sXu^IdJ-BkH6D zQCjVh)Lm^$mkfTxW|j%q{8}^PA$UVU7A*27PyN;0ZtqcfqyWe$r%;Q=E*$(*Qz#1S z8pYVF9I8NTOSI9k8%u9c7Qdrta`S?Aj-_V7*U&?LHDcpCJGmsHStCvx#wSOkaX__T2C4<=F6220q5?C5$c^qafgq@Ox>?V2 zXio$@{&OmK=Th?+G#^{R2w(Jli)}6+5_aoB5(IlQK5kl!6Ddtmi4kcs{PDTjX2 zB^keGtdpkv?^PrKjB{Dt=pQ|P7>AAN>d9Kc5lEo#Zs#2>j=9{NZ#VtIOjFe;r|IH2 zpuawU(=Mz4>u;f5!AND9z4;u!ZAvlfv9})x!g>C9jer}_=kmeG#sWB2t@gK)q^gSD zvh(!K#6>q!XEo%;<6C7_oWQQGuPqC*7}_y>r_ms55l7)~tzLr|S$Fu0QX-JieNCEc zmZ0fvm9WvnW!b!{d0kNDqog!2cw|0$IN&aJKIa0q~Af z+zr8tiIymh#!bkH*J$bCYW*G?12L}2e^*w!8Mo!?H>aYe{73t&>An4j#Up96YQh!8 z+6aL#nZa_^)WBt5*wUIm?+bg>MZh=X=KfBqwoZG2zX+OBG0rc4i$aPgr%P-<1+OVK zXN;aagEi5wFl;xOKo59~WncV%3s61MZw!RMHW5(NyJIL@{4W^1vxc*?ZU6nXe*e(} z6_V^OWWO&_!sPc?i-XB35k8;S0N!T<(m@T>71k2yBM)fj{22XaY`s%b8-eocbd_el1E6@eS3DBKd8#VIF)I_pY0wbsv}2sM%+pDoVfK>%9MPA* z5TFb0m?123k&etg5~T}Biya9H$HQ#d-hXyyd!Q(Bs!13SEieT&WH+LZx7&^j%tH}m# z#elD{6?D;QaOB?lQA0bnONrWk9}QWP4ozm%X37Ct!}WPLx^jU!9*wWUxiim?rf5?`*BWJ4abqBK^o)zey98>^~ph(@uFK z-VypG8J|gxR{De#O3v-Max8xv&o8LtHB)a|l@iap_E42J(US75(}7?YZxVcf6Rt2i z;H7a37tApR)Q9$vZbO7-bh#Vg9=-6laSs~pc?>zsJDU%x;9na4UGgj04A20T?gi2` zf4VHz8KQ9Rr7VhALhPZPJ(Sc--Ct0CfL)WEd|D{;vpZqZ#_+Jq5C^L{!jHZiFj*k* zTXWT!g5KIz-nTDPUu{|wFhhWsY9Z-*2sU>tX}vU4uT z)h4CApl!gkB*w_l$%0OMHgXvU{-rWWskwxx&xCDHi6CqcNByF*Wzy~8T$Q6w{xw0X zuFfTIlo7>hmhbJ%H48hwTx1DgATLd7q{Q+G%wCzD$KF<-{@lCsvt-*!BFIM7L6!C| zG9Je(nfOI-_Y0Pl40`v7`5wT`EnL)8r}Bh?%?*lN=Nvm|T3pC=&~qJ~K~=)4}W)`$~+r;(tOTg#^)AyY?X5xFNFdo>_9hdY{V+Jd^qx0KU2+&@I?WG4l8&~t%M z$;7VnqZZrRI#ijpm=X|{aBhW6pRFvoQn424*QCtdehAZv3LFBwi&X&Zu3gw%Cs1Wa z=Z+G&ctz+FFy>?mskRqIXDr8r86{=8Ka<-4v_JNNW7$Fa7?Z!(`c%reoMwo#c{5%!;)|K`wk7{< zW8WSx9QHvcre*W&f`iL0Zp@8}0oh3c@20s2=xX+l`*mxU<%~ZJO zs}~|Oy!4M#Aa+O8h^=~P?~!vzquok!=3~m&shAM?YEkg{y#;mXeq``9_1PZUiAus>{Y<8YV=K0)m$5|25WGeW0-|yp`bVYT)$@Q`UgOqElsw zF}bOqX-;SkYnXIb=ZH6&R9~wL!z?N*r;efCyw+WigYXC*2p3;&MEyz5{ zDA{!SZA&-s!;0-GubgQuU|60Y3yM;j&^CyY<%FI@y2JTh)0XMic!67p80=Li6zJ$C zR7XzwzO{dsvoaWq(W&wNm!}JSDZ{0rtf9Dm%oswxYG;01(+<^GTiPahJg4;QQIRB= z3Lylcj}N%3jVa2P>!j79&UOFk!Qd?Z4*MQI<%sivj4lhw>eW$R=K#WbGHrl|i{b~= zvx(S{{9=K+w;%6BemL5Kt;C{=d!whJ)QdwNnZj|df!QecZFdmtcfU%;Y@!{@i6QJu z;aeKXg-x}v!6>vIrJMkBTz{ojo0lFR_;`#dX*pb=r+ zr~>rE2KTwt**@+Zm2QAnv@5Zc1*qYdRo{`1>4`}E_(dK4_=q9D0sBJq{BOr^enC)| zdiGEn2wY1iP{QBLlH{z9(A1Y(eQVWbj(o@r>@F%PyHuq+8%w5L7_4bm%^KhPOxO0_ z!c4B<`RiK_$`9Wo7E4^|PLV-g5K{-xWwr> z2q?yT77A|#$5tN?M>1<(Ihf&Zo_5CHIQqSeQDl(=5fmb&^tE0%Fp#bLx@N64GlP6= zFy4B!l_gQjA6npw;8;p3%GlqoOV$5JJL$BoN%fR4rUM(c%Mr5G9v~v-!WO;;4jGvy z;W_-3!H+-zEqBWqU)5Y~A~O13JRO~{Bua66%p62{TT7DlUGyK?f8YeHc6}v&9t2`7 zaT)7Q%KYBy2m^wUaneQyho-T#sH>nc9hhu2(+hCGQR9Wrx}CMk)w4L#2k|SZbJl-M zy(hdgPSX{I44+5pPL4l3B1GBle3!jAtm3R=OaR~?39m27Y?pqwKH&uaW3D8f?Ncg61xYbQFyAQK474Ovf|DN`fbjUb8fVK?jH2YB|2KGqxnm_7OP-rQ6jdzSc zmM^+{PJoS`{6)&KuK%?HB+e)urST9yL3PaJN7a8Lhyr2}He-omr7!Bu=J8AQ3JLaJ zJYZJB7{`9CL+LRLBAcdWOmk?*gn}{Luhc)tn(Mf{|9qtPEE<}OIvflvZ2hAu&+TuR zFLN4f^Q@#;FjEivVhzd0aJ()1+svO&IE#Q9e38M?(E2F31$lM-%9 zuW=2G<=eJ&E7K-+WRi4v_O6?{cpDvNa9b={ir7#t8`xpsVjt3~{%fAQF}Yd_|5fPN zTl=uMES!29gyCIy1qSik%A)=*ERCw?nm`E`L_5pa*u-;1_TJdl`4xBi^Ec3D7`1<37c4pCTPInx$A|;OhD{+yRkZ{_u9> zh~S7Xv8Uq8rbJg7-saeW$u)AYmWd4}LV#luG4mG1$CQX|W=k~hbl5~=6UsELNUBlN z^Ajq5nU(aB2aS$MnIbNXRKL49LO12JYJCv5z9n<(@Ao4}DaDr(I_7UwUj*S`rzzLW zL&-^?*HcvGXT2@%%J)Yr%CY?rS0>SWbj^d3bC|Z@6E*WvGtaz0l@0Q%c zqL?T)UW-H2wP|6y#nyqW8s<_}MFIlP!8(^$1a=Ao6zd9mi7|jDxoSmvC?co0b%jl_ zoR6Vr@V9q?dNa(mIGs_Aw5`$Y4n4`^LUWSKXLc*_H!+0>j@n>cpnV9bGXTH9`2Tn2 zt}9@M04anl9rG>-P_9rEs~5{HO* zpZ)d;B=!nVw|O`V##s}R=?U3I_`>*LvHJPVm}IFJPQPlySAvv zC{L1L(d!HYBYU$xqX!4x`lt+3#XlYFYK>u_dN0$INMQ}_U3Qyu+aPU7ouB3OQW!?q z@uBG*94RS>t4PE>8ba|)xs^lINw?XrO7KlK-#>0{?vu5nX6$p(!no*{qQwaWhv>D) z&!Ui`sAvFuJh8fq(YZzB1Mt;2&LzaqJ7w(Ee>{O<_Vn#^tk;7%vqnpvHBWV~__Lj* z;3B!uhQ>C*!v&A}rk@0J`~SoFD+KGiIIm>!BwYvV+;EOxH)im;E!Ef#f7o5CD4*L; z`%waF2M;O-L?Vc~eq4jfmaNTb_U?spp>Q{BSx8>PXwL&nHMPT7Lxwh;Cx?kBF88=o zGObAYcyvT*9dVeWJ%a*<8kN1;QSbNE9X=x}wp|xKTWkg7>?J#O)xF! zy5(qK=7Kpip8tHpgxZF=^Cy3X`hZ3&1>#>Su%BAv!=5Vgs{=36pL+{*ERXf}En*Mq z+Q`mgmELA)_(LTu*Y2Hkfvx7G5FO&BO~@;m2WAi{D7CE-k;Tg3B-PU*QAu`~o~s84 z>QwBHZx@11{0xBa4*V9;sUkt0Mu}kekMhG7rgYP8N|^pyTU%Rv ze^eg=(f(DWQ_tsshbNVpR?sT%KlGn5x@jYxpSu&RL|Y-~v|W~pk_3@~_;0cD@2>$+ zyEGY-O&&g(aS|L{KE5_i44$5MVJ$A4iRBEEDE?WxzeK<)NYl)lQ193d-7}hmm@qK5 zo45X5v*|HjTV6ExhvK+kw*yM2T_}m-5QfL=0W2fImSJL50^Q$c=xRMu5`l2zjpre` z#W*S9px>X|EXJH9WUBHTqCZ=jSP5e{0w=MuIndwGC_HQk1n5Xm*qj<7@$pxQ2nQl7 zwcW_1|HWkh{5>6!+G*X6i9+9h$HAXWb*i8^T_)r^mV_kHk_}{K zU)sO}p=O$Wvr4FYrne1GBT0;qxv$v($M zDD{GDgyHSJ)+G1G$14JhKWxASsW(b!gp^FFkIS1g5 zN;p3lh@!$D=0!1pEld{cY^;o`uvNir_Qs0`9!9X_NFb_P`h+p4QI9B0*3zf+WF)2{ zM>(_M7lmx>1W%J-Qe`U_3I&V+13~DxOWLnEB~~S*4u)>-E(R`2<%Y0E;?;G$DRx7r zx*Mqk1NM_C_h{&BP3Y~Ft?|5DTg z+2L%=?M&=YgTs!yk&_AHg*}$Ox%mZFTZN&er;A2&924hC!r^51sRLtrf*ri2p139s z!eK5ZXrXGFNDmwjHm z=!tZL&)@B*+shSuSXJxMA4&98Y#cBm8n{OPyMr|L1d{eZqf$_PADE*k+h`*A%B4%<`|N{cX=Ow-}sO?eUCO|{xt zt~nMLykMP_3qj`%(7LHK7csVbl%U!5eW%JCwy}3TZy=1>pGEhgC7dY7To>}K?{G!T zqrTvAKPn%U&f=8oDH{-R*3J$@EyQ%uXNw&cbZ0a=93g>%tf|Toy*A?#SSlw^#aw^5 zRT)vq-e^VC8?IJP>AWl!Jj3`282TGC8db@q50jIIoRL-`o03cn_wGAPInae5t0Rce z70!7|@T(<0!6j{J2INymWoyJ5+BW95#Gq4R%W({Qvpu8q$S=aD0+1J-b*Ng{)cQYa znaebVoyB<5bD}U@V(H*X4mp;5bgi|LMK4h2SJSH)<8V`RxKs55&=g zY}0x4HpUWrXk+M+V~Ia?{f|7dugC#{b&$Q6SVf5i{#!3M3J3)uVv<#v-TQJi z%ALz+RDk3)f0TwvQp{jUjKs8P`^lw+wrmDN5>j1*l{lIQ05Ma7_~CJ*I=Wgu8T1xXf&-uQ-9ktHx+g*SwEi4~nJSvEh0FtN=78%=Jp{tYnS21md9>q)g zmVAa$H1>+l(8u$Jb=}{FZ3uEGASUPUZIn7T*=BYg1z59SLjDlP__Ypb&YWoJ6zIu` z$jNEi2=_;jI_j3T{-)I&cJMq1$a21|z2SKytkFlt?r@{e&GcS!qQG+cqO9TfiE!BK z;qr~`qSmNFvCO9Of;3o-E}R@fKWan#Y|dESd}DQ1_|jd*9LTF z6nC&@=sN{JO0EclCUY~)hzJffCIFE`=+!RJp24Q~*9MESqcpmW01-{mYM zhR`+c`1gMA-2JtTv)><7svF?)_(ETxxqk-Xjx1`ZC6nrb+7Qy(P~iK^T?@dwgbJh{ zPkGsM9El*%Ub3p;#BxnQgH5=$D^MBr3W5w?pA*H|RR5bD--!VdjqLgPaw1Cv8}TA) z4Rj1p8KOnX+>}P%BZ)cs1y-swZNm}dEyxv4pk9Ns6Ik|}+`kw0KYV6KS9CJze8v@U zmC7OR`AvwHy)(ZOuI%{!ke9_{5Iy-<^FuozbJN_>q}X)cY%h!f5Q)#hZ6uCQy?HAQ z`-doV`rqxLUc_sGFyE(OiYPSg;AxppS*G@v8lCj&Rg^rs4Cni>OAJbKKo57{VXzLlze?! zb2rQDkjAhr2txzS%{ndG>mWGQ-ujd`WDVt@=CF;&v8Of};LV;G&g-h#Lh+odYV%-z z;eeS$aJNdcJeCMRUZBwW7dp@N{%j&b6t+KqtV*rIo7^2Q5Xi8$;-QC-{5 zPDAZ$Hm>Mwl(33LhFK-)kTH|_3ry4(yH+k0Thhb^mgBH=PlckN$|IRP?77=Kk>3%$ zaK~T+8*c{~MW%3YH&2)j=9%xnb2q!AF-6~v@yZ%M0VS0V z*4`6u`#4LQIy4lmcllt8FnF0nm`~sKbvTAtzT6*BJ+lypy9~|>JZdgH&~_rcHisNv zlYg%NA7wMqC=4#_3)*YqPty5s5}S>Um~y>IR4o{tE?YMyxy|<=x=Lmbez)j~THEOYmlQet)Kogt@xRNWB#QzqZ~wDyr{`8zu%Bni-I8h6d?Iy1P511f)R( zrKDR@hVJfekZvSIkPaz9DM_j4!uR*CcRg!8^WRJv+Mlm8*zEJrg;2z zb7t;VEif^pYQ}VJF?Q#xtXZL>+*jFb`sc^U8ecP)+S8(^k7JF5hRg*z*Hrq*BLnmy zMqJbH8PQ16ly1{i-8m0&Bwtsotdb766-fN3PfuB}{wUs%x(wWywdwjT}wA|%J zf$oeG(dHV_&@3 zITu&p!yhA^U+YcxzARGbd11qwmk}^wk>Ta^U%F*RBKXrxz8XeG{W_3{Z=W$Q))Xp; z2Icn$2fxp2Wj_a^9$6AuC|e&zO4_Z&w{qwEpA&6tMzfY$dJ;*qdOpm4-K*VCh_kLg z*Ik%wvmPp9(>cAY3d$YAJVIXXKWjv)F0eq2yLL~Cos(Ca{pW~x*U?mR$ejMcJ z-}JL7b4~6=!~Gwi%Sm@ZN%pN)KLfjjnm+n(uXz}Vp13EpCt889Vlmr|B7qGot4#EF z8!*fX@Gs$c9uSIwu;j<#hLYoi?gTuN(U|B_lE2vKlq=|L`#EjL<6nrRN`zS&UXum9 z)FSEe*p`C&m@F}ejMi?`4JwtM>0R{W2?2?gG_^8k1BV?OjSyb%@UGJLwZS4kKKL-~ z?;or7@I%`F))k|u{K%9VHuFYUs~os|3hhUn(J#F`F^uGTd37Y)+6b>;x|5Bpoy(sA;y8o62&K2R6T#7Cq;>CnaeZU9OPW#_qRb_d89ARG8ZLiu^6} zwD#0_>B9@!nzr}68Ma*{Mk@Wp76d$Pa0&l`;5QO|lOLJiHM5h1A#xXta&={_vUsKj z%l!P1`-;94N&5FcMPoBI$I*~9L*IXv*L{s;((x6hYP4`%GJjLiH+<^Xo%LB)D+47C zgi2!u?KpGFH&~xBh)h05jK$dH+cSwyYTx1sHM_Sb=lrU6zuHgmPV}qi@UvpTztxRw zE=bs;{=I=Ro^^pi@Nlk~L<*$!DUaP}L;|^%jAQbjYC?l^_SL@;E_F)bpLek>U`N?t zOVqnvKetYP9ljFx%fo%}67u{4e~D0apc`f1+hcFpk!Yc?C@^?)>F?$L5*SWmukK>& zi44uivq_8j@}0xhf>U@TX%lQ`oT1C8Z)IzLpT)MfDiNp+DSPl#3WeF z#|^4XL>til?kM+ebjLocwaSjpn1zrp@yVJl94%`D+1R_`qkGLK5WNXaB^viSOQWyg zv>!AjtM_R`i~=|dj;u+HY%vRlr9ef2!i^Yg;Qz9goKnL;Zo2zl&PTGuq4piA1txL^?aHa#Zz85X`%k!|6T>%fhxZzbIT}7~AoLw{XEM%M zMN5aa7;B1Cr0IQCXEO&o!$aGtT%6 zr_E+p0h0SeiDkQy6~Je?Aj&pq|C@jkvn<#5i zdf1N!D+1XHE-w@4J_PzF`oRr9Uf&d47#Xae>WmdnmsOq6&Haw>-7dT26ejm;{gfH0 zDInxS)LM2<2uqLThn3prq9{*Yi>X(vfO4~AikbjiO^&1XN^&b20BTbhk^)%)> zZtjH_4v9_x(6B6_mw^6$SrkY&x~je@S^jZ6B$*j4H!n%IvY1bvbVtF$tKcAZi61px zaDg)Y>xe>@X(Q+8n0(97P{uDzN#_rF;z1j|RuzpoxlTEY$xhUaJH-xP5avgV9BG49 zEulLWp;K>kyeIp2YS~oU@Z!dFM3qKhhE4|KxP{Wxa@Jx)kvWjoMd-gN`S71@E;_@g zeE~`oC2=n=T$6a(v`3Qv{NXX#@OH#>l~csY$6emm6=jC9ex;f773H6c^rJ?8fjIf7T_y3|q2>%lmdCmnTpQ&d--5@j}m>4BF=cB%4x459%{JgjC zZLaNTL&5P2NeS>ec)n!FReXpsP8O_FUH+tYKxZp%3^EgWkA0M{b)sT@IoscOF8G$h zLg4M^E@}R8O5JpyYzU!^^cVdGNfrF@iU5shSnU!=8n1Obj&XSzo|TUXnc*bgS zp)Wh3!D>p=WHPk=Sx1`gS19X_<&(Ht? zf*?&FNF7In+v09Z!0c(%jpczBp|_bJzWEvU>^F3dNJiJGAL-zCrUzr*w|$nX9l+&v zLsj{XWDUx1>=uPDr1+hPj~V?>3j>QJM>6Qz=ma?XsyVF%kEK05_69<_wT*6|1EgRC ztTu7oo2*VrLb$7WAb`!>Fcr}5Q|JRfYO#YgZ zAe4DPWw^;M5W>S3!rcS51gQiXp!4B|ie~^^l_n67dI0MJr!koRjbJIE>y>Uq%J_zE zfzmbeInfbJ(v5rT^V)@xpWbl{&raQ&7v=V#TP#9nl+mi17pZu@Ey1h%Ogwf}X0=+F zpfYyn=3e%OrpUymv|(<1b7iQIMUZSB=RWTP0xL5NH#| z+*D@ol4GL*ayp8*2qW1T9OSFJ7X!*JSBW|nV#k`Lnb_&qXM{fW#2~-a8Dc$9_nK9i z0<$T@N#D#mGfs9I*>o%9a)|;>KJPP|EtVO&$R_{))&t4v@Re!qvj6aWFNqb>O z0bn39P5Lu z39{c?ih6@|q2?%VF(rZ<=}?3V-%t>qQkz2P3TCy%mm+Wps_#x?Ior{-z~T+CAG~8v z?hnz3qhtDI>f&Y;l^GP>4__|KqD$aCfGSaE8~GbpOW+Z2g=K6Dx#ex&=sKA^o0;qx z^ZxALCyo4bBugfXa6?n^=nGtPyrktvVqBht9gJ8aA5ocRG8vEOeMB?DJ5CT0k^*Uf ze*_`;zRb9lx$gDEs90S)79^ZK@R^yZrNcs6uLKuK+}-9N1#{$kyNVb`8>f6#zgiXs zBM6W9)OBOO<17!h30vOB`YKO{H#JpiVpHpxR3Y&nA)6VvaC7*rzg)oV8`SpR6TUra zK4ofGc;^zcm2{X`-=~nVPq5AVc^Nzm;~j>2mMdq$p&Pk$7Fb0+*`y|)?Xw;y^*EBi%OqjRy7)cba#9`rq#Y+2RhIi{z zu|y5J7CABe{kuMw1|k5^;;S2;*{cyG*D6Ez$x1)bvXU(?Ug?Pa+)&BVFF5~hf#~{2 zx3IT|^DOCA`!0*B;2s0cs+*?cGZFd*W_%B3x)cKi&#qC-r~9pYJLRf_ZN5cl%b)8o zUMTO!*sV%Pevc@Bm;d}){9b%no~TND7|zbF8R3B|>G%ze(;U{!mtX`*TcQmtZ@^!1 zJy-<)(aMRWWaScW%nVu zJikbP2OV(gcmMvh*R@BZx8yh?aXYsxF*D$|W~dQk~cX-7lRaNqU$1)kD*_`@?Tn zxM9Y!Fc;2eOYE3319K)>Iq-zzw;RhTW-}>>>-nySIlZEF{doRI@zZ$3TzZA}nh^BbI~mE&zyeXQx|%4l8!<<(4ZL6E>oo=|d{t*8mar_wk}+0^VY7LA zGjJ{`PtaLa{+5N`8r@`3Z5hg=dHI@6_Nf1j-Y?YHKagZ*tIB%A+6ln*uWG2P`noNl zg};7^Bs}e7GadWoxo3tS0UP-IgW~f{h zclWYW2YDQWgHhRb&2{5cU3sdYd^-|9)$LoAMuROU{{0EVi-~*q)uUH_(}+pT|I`)~kY1pH{3ynqk6wTmG*} z7qLx;x0}i8WAtmar^t+WBAWevjROal^XvRDQb8RbbZAZ{AWPdE@b6B`I_KQ~p>*3e zih)PUjKdxoQAbJAzIhoc;{x>YX|8$$VrDn+AxzXtZgIjJ3s*^l@YG7gHd=#Wh9H_6 z@5So9_H`<^*>`!8;RA#%NKwznj9E5?J>Sw|uAZiNbJSC#u&e$oU`_KZ`c&|&z=vm-8XG^rXZeBfVz`esoG7upE_;IM zV*7NfUwknk-^KDv8ViQ2(zdhH&k<5v?e4RAg1c8yAOBn={-7CXyMtxnsj%!?r+>kr ztZ9%jQEq`sA}#CorIy>{b0%*2KPW@2m(g0Xmo~JM@O7Ky!h$f#_^~e6bkP@K)9rJ`y9nlV1P3J9%|Bf@>f5 z?(cU!Gis?&OnGXzR;!`IpUQ9JX$DfFxP^1c*FadAb3<})4)0q8RkVr}dTO$w>ddfJ zkHTcu%@&?WK2BoNPpEk(vB|Ceo7O90Ur-M-{kdDXesYi8Ep1lTn2*@bva)(yj}G}l zba>NeBh_f$H4e7s#kexbD5NB-pkhRRc#leJQzbb$*BB@B(_0bewOgwE5-Q^S3Q8=v zBdY!r)|%zPJ%Y^n8i9lK+K!ISN;MPn7#FBFs3nYh_f+Y(stWz!mHe>Kno&JleG&Ch zHINhHUNy9(3zO{$O_~#mIOy!!hzXeR=k-e;z@PDLaH}HSf6i|x9u}mFMPYJXXrT10M4u8=&6_ zMv;nmecit0XKe8;H}xjZg7e>(KtjWf`525F1QkKL{Q4o!JKb#hTFvaN+)1@3eZ4qQ z8uf~#K2m4!kEuJSy^EIHBGrakA`pHtq7Bi^cvslx7QoDsso4D7G*abRmY#;~(tdCU zh1J&K1QL=Qn0@ZUqFhMlV52bmFx(G)Yt#&Xfh$dKJW>JD>FV1{ac$w%M-f~k39!&UE_bGiBB{YX znLQluzs6tEl<{4J_Q}5*_hY_qmZ?*rFYJd_zQJ?*l&z*8Jk?$Z!ounjYJN{XejIx} zMU^lpAQSyCi$69lCbkd-=op8lR-zUC zL1U2~ZS?5}G%XnReCp`K7OZvvRvfAP(f~;!k(zrZ=}j>Hf}eDmcB%Ro3EGzv2IQd# zQXi?~_HbK1@FK)g+|fo0+kDMnH0#Pc9*1HgYJp*(z);GyrCl7C-Fu~AIXPM(GWl#4 zVMQVQx*2FFoTU9`X;%$b8aqKoPL@_>(BaCgO1T!Vq@EWzQ_YKK#^!5K1#tA6PbUUi z?-GCZ$;zeOG1ngX%Y3Rg!lkeK&2;#z5-oi$-KJubfD_k zXqux_Q6g>Hje|Mm%0#b;)n_OhCPWeZL9_C3PTD$a`ni{BgteQ7BE$h}N#d=WVl-wO zl8hN_7YC$|QCKnWAl8sE+yuEHbL(kCdu$!uyZ%AhiF_LPQ7pU+?=IioaTBF#ggS$j@iMXhv}`0 zmGp=GqlbkShG}gwuRNmChX|#P)mU`}HF=CAC5yA?|)#!XM{5{=}M;)N% z{e35CT|0E!zHpEDf6@KiZjTL7WjpGZ9*p?=D&aeQ{L?fDS8k2MSf*=Tii8`|1o93r zt*zY41gAZYn+}PjPafc9PRvHxL-<>^)mT$^61=gp_5?Rx&A960fAkTwv#;Vd;`Kjz zU02n<5j#1J_7ukDG0W=fbht}-mA`nBy+^XeI1lr~$O znzooZUY$lMS++@?QZv50`w2Ana23j{DdG1JlavyROPpT_uB`z*(M4VnEG;9macXVW z;brdQ%%Yw{rI^H+np8BhW5ED|LIDemiK{jO9Kc|zq){{^;^tLH>f;>UIR1|gGQrJ+ z&5L4csapRp#dRC&4P@R?Sh>Zie)krjyxQAThyMV8`Dp3f5t=A7A9u!>w&F;UGJamT z?11OHOykxOYzgEP*<*eM?2esaAwGFsZhI3`L?Lv+5PU`8=PfsvbrgOhe z4yUcU?C)v~Oa0cr5Jn@i1?%rM*%G1^{TgoOc&|rWYa7(`&C|j_4!OsD!V*6t?6>al z$Tu&678!|)bhMRE!AY-z;}G4 z%ju~NNt%voT-L#|?b8P}vyEwaO~J~w8V-0QN7fE@mKlW=U%x?WavS@Z6*zIZiJ>eB zDQ$Cuf!C+KIOJud3TYxSa+VLjozPE@{!LrE?AMDEEkp(pPPetpW(KPd(4@ zCt>0>tC)4LG)){ujbcB;sN7?xblF&^=OMK{#>uSmq9j|`d6Y|+{l$)IQ^&Oywm3V( zad%pzIYVWrx34%H?q9UjZ<@766twnm4{hdS>L`d zVbYZg$jGtdn^%%!(G7V*BM_P@N#_<5GwblZkxh|5*`!mic}2aEN=JnB2FwvCi}gI2 zFdKa3NcJi8i+6WMRP7ZR?SWAQ0_7KawQs4%26Ka(eI|+#bK4w&gF?&tEKj8F#+?!e z_E03NCMip1?dqi8(7`u|R`RJMcPBq-Z{!Me`Es_Y&`A*fl97+}K;_S~<1Ea( za{uAof$_Le)Ef`?X^)*qnz@6&a~G0Z+#*S^GTN(%Vz{f{??4t{om&-mDKfy zR-x?+Kilz)!fhdbJ|=C|MoEgX6HC~C4P3InJP$IAf7K}Yi4EEW1Pr}(^&BWI9J#+Z zlPdqkp2<*dgCfhXuOKoqx|ioJh-*_(;7m9Hoi%DzXDxLYpcd8%5FTBmp|nSDOaw&$ zzw@d~GS6lT&-UnNxhmsUyu0NepxWi}T;plFR6o zS)`X)!AyONEUN!V_sg?a=M!Z98mXMYs=6an$}HY5z;QQsh85I(gwITovul&T%+BbO z3lpdebkk{iYHT8ESU1^66_w}}qmS-~W6?T|6%Q2Ow~BnmyP3SjF;`zQmu=Sfv7GMA zjbbsJbCo&E}CP%WAub?-T7Y8ET=XH2#>5sR$LVWHJNN!Yv?-H3?p~Qr`Oll9&!|xeB18^> zZNUB#=Qee2#mMR-^){m&N>Mq3Lj)4tO(4W#uzVE=nJ z|4H;SAZ_eDqWhB0a3l!&#%;f=z{;RNc75_4%Q0Zre}BzA&I5z+FF zv_PU@mRChz6^O=6rP<}3f$B3i0{9(6DW^~-cnu3SlIt} zwTbA|@lX1Lyu?;fpj2%yK^*p=hR^*mu^kr?tK#1BY9|_ffQT88U`~8;F(6z33y}4v zd9hex#N=%Zy|nA!UaGXG<*99yd-z~I^YY^K1X;xI8hZm&Jh_n_FM5M>RjN*1KFp`s zlGT3ktn|w#DhUpyTy;KcT;;{x@?y2)Q}Pup*fGnzGtZ3mNI03Gzxaj#Izl-iZQ?nY zxY=^WG&o+&fQefOsyX6jPbuVoA9?5e3pu%|BnnMWQXsxhk37Wt4oLfHU;865)$!pR z>Up#*agT)3lDNmDW%$7V{ScuBn+ORrz$&&oU+!Uj|2qO=*xO$-`HG**fP$>+qg?d} zx&$^LFG!(DDVvf0{$D8nvsi(^`1IG^(=*8K5f-5lK5=GQ=8{LHjQl>VX-QM>9w^}T zKvziPyorAnfMbgYX#@d?pu&P=UTXo-)aQtHtmL%^0`2d{f*I^VS!8Caf$b!l9s@ed zY@F*CRJJcn1#lE+rdX8bDx{|kRF>(KfF>Tm3_)Stf0mkEcE38B8yk$QRRJ?}A>fsy zSK5NUI4s zs4_LX8K`Bu_sm~W?d$_X2VK1`ely*_ze310H!snvMofvS7ckSEd$e|6(IItp5lZ}= zIi6P&6YTDh@K+YNqmMC{l4V_TaO5lAW*QfP0p5E~&Pm;#^Wx zzo*f*sy9X_7DpV}-eH$zjpM%h*2sdFK3n+@t=!L@Z69pxzlyGUKQ+72b}9 zgTqkUtQl3WpZ1@Aw*`s%-(#AsDS6#o#Biv}4QY-;)y0G8h$Q+hp7te4kIpDfLlr*4 z|I9Rm$7>{g5FaR194blmy9bS@;xESTf zg}XqXPls>>r6g(?B=BOX>Z^#60Fr$C4({;2Os2IH^`$vfwX8ya&P*fsDHt-9N{QD# zg!7m^C-qZhEF#XY~LCcyp`4fuwK4}XW=vHTl+KTa&z8=VtR+nee6@C|X0B!-^KcRqUJyenEugEcx)6Vy5hE#JK7ykb#rm816If23%A>te^dB$- z3L?bM;5Y&ePQba8=l$V8CPSTSRe_)eA4@y!@lmZEAp2qn;sp7h)$AT;o~Y~0kKHfq=!xYYcNdbkt4MAk|&~`h}Mty zxHJsw2F-vt2<+Yk$`lnQH|=1F+f7S6eSP^6ZtNi|TSm+R)Ob8cYhUEnza!jkt$%b_ zs527c)y@8I43Yq0Pp6+3e~bb%G6daoeXh}axs_mIk8ir2%a}-^j!SyvJxx;+KK>`l zU%o2aE|Jrzw3kUA)**c|NhfB^**Cw$Qjaxm+Elk8H$nkk+Fd=&u#-B)hrbtTv zTLrJz5nDlky^=6#Sf9!TNm1bLihsR8EHesQ zNo?BHYyCNW-M4J)o?HTiyr&b zCT(vca9#lpTi^o}sBj^W044Z~^@();ULQsHi=dA84-6vp(x;DR?}%mQ0xL1n2ugsJ z#1srZVD;DPiJ#E09{H=`x%tok_zN>2I9yy3u;lbR0d=rYzl&>A%kv~F!`(r)#udN| zpfgvr^Ot&Nz9Es%S*VqgD_lhh=FD#&7x1bt>l_dV;2#vgs6QyQ=sB5a;{rj6D%ZTY zJlgBgHMKY&Y?7=ZK$P z%@H83KE?8>AXnG#Y&3`En52oFKhCNP1#Z4iFUb zI49|-fzVN4PB1Wt0`D^F5ia^}JL4gz+brNo*7$};R-G|5;}Z@Qcax$Tf%1$vQZM-Y zd=`+d_jUc^`(H^Lwze4jnI=UtkrvAM`1lNge}M{SJPQMlV=9C6G1G!uUpQ$0$APtv z3)tUe;n4BO<&xs-I}@ZWo<~(2Ns=Mx`TDh+k4X7{OX+e*i;EAA>8*WD&PbN9SlO(j zO(Sb%sN5$qBrHGq>TLfPVau(5ZFQ`#ABPrs6fa(;2y-u=7FV7I3_}HUMvT|>rXV^L zg*k?}=fxA}0T8&o^*On{=9Wmxw`AHHgPQ^DT@djxB}d`Lx2Zr-f$wo^MP)#J{7VIw ze~mKJFkg8r;9a(Nq^;XRC*d4W#5xGRB|IT!5aD09{Nb%yXBlG1sNawgphV-?05((G+oDv~E5C@Pm8;TulEhODk<0890r_-)u0E;bAjfyLA0H5g8qy zHE9{1Iq@h}Y7mjmmaaDkFuWe_$r;$JN0W?2(kcv6XI7sb)9XVl0_l6O6R@J62&*3e zK(hiNhF3up4C?fXu9s`Vz^hs+!0P=Z67{03DXBG3NlW%23Im#}P^@8PS#h0~k(sY=YjN3F*@L zie~CEcxs&D#HQpJkKq$7&l&Q(S_G6%BS%~!S1tJwCQyP$7S%uKk?nhe4U`2*Au|UJ z1EcTUKEUhx6s1|Z@y)!%zq2*^xowN5AR?3s>EZr{=>A?WIDUIP6>ob?4?oL*#*W%$ z_pGXbmzs|h(5`apC)UovB5iczr$cF#aiSPet!xN1O1IkiF|0!uvEu`&e>kn7KM?}H z_+oFK+}Rte5p!9~{vqi6Gjs6k8^g(AW{*hvGl7Bt?EjC?0pZRu9}*M!L;@HeC_zY~ zuX-q*-x-&TEEo`)5tA04|1lgl$Z4f5qTTZdd9&xz5Iq{($g2Zr9In<6T)m_v(z>*^^$Uv%)9C>mgi1qJ8 zv6@CEvJOX|N#u6~bzIJ)K@n((%}4a~<~Uo3{0pE}xd|1Y%OguqQ@LE%QD(jLW{z&Q z8qpli7W?w#7kzpdR}5^t&<^rcJ0uXAJkcVaz4gcf?z%<+gxw@?o=eBV^&&h)XSi_0 zh3S+Z1y%_DMW1X^&Jgw_s5V1&r}3vj)Fvm3{Gln5_$Uc};64gVTxI(IEs*7-HjF0B zR>^#1B_^bejSU#Z#QPo=8Fc8;$HDxOWVUpb8}r^LbqD~43zU~n ./api @@ -9,6 +9,8 @@ replace github.com/hashicorp/consul/sdk => ./sdk replace launchpad.net/gocheck => github.com/go-check/check v0.0.0-20140225173054-eb6ee6f84d0a require ( + cloud.google.com/go v0.59.0 // indirect + github.com/Microsoft/go-winio v0.4.3 // indirect github.com/NYTimes/gziphandler v1.0.1 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e github.com/armon/go-metrics v0.3.10 @@ -16,11 +18,16 @@ require ( github.com/aws/aws-sdk-go v1.42.34 github.com/coredns/coredns v1.1.2 github.com/coreos/go-oidc v2.1.0+incompatible + github.com/digitalocean/godo v1.10.0 // indirect github.com/docker/go-connections v0.3.0 - github.com/envoyproxy/go-control-plane v0.10.1 + github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0 + github.com/envoyproxy/go-control-plane v0.9.9 + github.com/frankban/quicktest v1.11.0 // indirect github.com/fsnotify/fsnotify v1.5.1 - github.com/golang/protobuf v1.5.0 + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.4.3 github.com/google/go-cmp v0.5.7 + github.com/google/go-querystring v1.0.0 // indirect github.com/google/gofuzz v1.2.0 github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22 github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2 @@ -46,14 +53,17 @@ require ( github.com/hashicorp/hcl v1.0.0 github.com/hashicorp/hil v0.0.0-20200423225030-a18a1cd20038 github.com/hashicorp/memberlist v0.3.1 - github.com/hashicorp/raft v1.3.9 + github.com/hashicorp/raft v1.3.6 github.com/hashicorp/raft-autopilot v0.1.6 + github.com/hashicorp/raft-boltdb v0.0.0-20211202195631-7d34b9fb3f42 // indirect github.com/hashicorp/raft-boltdb/v2 v2.2.2 - github.com/hashicorp/serf v0.9.8 + github.com/hashicorp/serf v0.9.7 github.com/hashicorp/vault/api v1.0.5-0.20200717191844-f687267c8086 github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267 github.com/hashicorp/yamux v0.0.0-20210826001029-26ff87cf9493 github.com/imdario/mergo v0.3.6 + github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f // indirect + github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/kr/text v0.2.0 github.com/miekg/dns v1.1.41 github.com/mitchellh/cli v1.1.0 @@ -65,7 +75,9 @@ require ( github.com/mitchellh/pointerstructure v1.2.1 github.com/mitchellh/reflectwalk v1.0.1 github.com/patrickmn/go-cache v2.1.0+incompatible + github.com/pierrec/lz4 v2.5.2+incompatible // indirect github.com/pkg/errors v0.9.1 + github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect github.com/prometheus/client_golang v1.4.0 github.com/rboyer/safeio v0.2.1 github.com/ryanuber/columnize v2.1.2+incompatible @@ -81,7 +93,7 @@ require ( golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e google.golang.org/genproto v0.0.0-20200623002339-fbb79eadd5eb google.golang.org/grpc v1.36.0 - google.golang.org/protobuf v1.27.1 + google.golang.org/protobuf v1.25.0 gopkg.in/square/go-jose.v2 v2.5.1 gotest.tools/v3 v3.0.3 k8s.io/api v0.18.2 @@ -89,102 +101,4 @@ require ( k8s.io/client-go v0.18.2 ) -require ( - cloud.google.com/go v0.59.0 // indirect - github.com/Azure/azure-sdk-for-go v44.0.0+incompatible // indirect - github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.18 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect - github.com/Azure/go-autorest/autorest/azure/auth v0.5.0 // indirect - github.com/Azure/go-autorest/autorest/azure/cli v0.4.0 // indirect - github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect - github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect - github.com/Azure/go-autorest/autorest/validation v0.3.0 // indirect - github.com/Azure/go-autorest/logger v0.2.1 // indirect - github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/Microsoft/go-winio v0.4.3 // indirect - github.com/StackExchange/wmi v1.2.1 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/speakeasy v0.1.0 // indirect - github.com/boltdb/bolt v1.3.1 // indirect - github.com/census-instrumentation/opencensus-proto v0.2.1 // indirect - github.com/cespare/xxhash/v2 v2.1.1 // indirect - github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible // indirect - github.com/circonus-labs/circonusllhist v0.1.3 // indirect - github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661 // indirect - github.com/digitalocean/godo v1.10.0 // indirect - github.com/dimchansky/utfbom v1.1.0 // indirect - github.com/envoyproxy/protoc-gen-validate v0.1.0 // indirect - github.com/fatih/color v1.9.0 // indirect - github.com/form3tech-oss/jwt-go v3.2.2+incompatible // indirect - github.com/frankban/quicktest v1.11.0 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect - github.com/golang/snappy v0.0.1 // indirect - github.com/google/btree v1.0.0 // indirect - github.com/google/go-querystring v1.0.0 // indirect - github.com/googleapis/gax-go/v2 v2.0.5 // indirect - github.com/googleapis/gnostic v0.2.0 // indirect - github.com/gophercloud/gophercloud v0.1.0 // indirect - github.com/hashicorp/errwrap v1.0.0 // indirect - github.com/hashicorp/go-immutable-radix v1.3.0 // indirect - github.com/hashicorp/go-msgpack v0.5.5 // indirect - github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/mdns v1.0.4 // indirect - github.com/hashicorp/raft-boltdb v0.0.0-20211202195631-7d34b9fb3f42 // indirect - github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f // indirect - github.com/json-iterator/go v1.1.9 // indirect - github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect - github.com/linode/linodego v0.7.1 // indirect - github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-isatty v0.0.12 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect - github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2 // indirect - github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c // indirect - github.com/pierrec/lz4 v2.5.2+incompatible // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/posener/complete v1.2.3 // indirect - github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.9.1 // indirect - github.com/prometheus/procfs v0.0.8 // indirect - github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 // indirect - github.com/ryanuber/go-glob v1.0.0 // indirect - github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect - github.com/sirupsen/logrus v1.4.2 // indirect - github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/objx v0.1.1 // indirect - github.com/tencentcloud/tencentcloud-sdk-go v1.0.162 // indirect - github.com/tklauser/go-sysconf v0.3.9 // indirect - github.com/tklauser/numcpus v0.3.0 // indirect - github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 // indirect - github.com/vmware/govmomi v0.18.0 // indirect - go.opencensus.io v0.22.3 // indirect - go.opentelemetry.io/proto/otlp v0.7.0 // indirect - golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect - golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 // indirect - golang.org/x/text v0.3.6 // indirect - golang.org/x/tools v0.1.0 // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect - google.golang.org/api v0.28.0 // indirect - google.golang.org/appengine v1.6.6 // indirect - gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/resty.v1 v1.12.0 // indirect - gopkg.in/yaml.v2 v2.2.8 // indirect - gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect - k8s.io/klog v1.0.0 // indirect - k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 // indirect - sigs.k8s.io/structured-merge-diff/v3 v3.0.0 // indirect - sigs.k8s.io/yaml v1.2.0 // indirect -) +replace istio.io/gogo-genproto v0.0.0-20190124151557-6d926a6e6feb => github.com/istio/gogo-genproto v0.0.0-20190124151557-6d926a6e6feb diff --git a/go.sum b/go.sum index 7467ff2297f9a..bbb6a03a182a6 100644 --- a/go.sum +++ b/go.sum @@ -113,6 +113,7 @@ github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -126,8 +127,8 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe h1:QJDJubh0OEcpeGjC7/8uF9tt4e39U/Ya1uyK+itnNPQ= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed h1:OZmjad4L3H8ncOIR8rnb5MREYqG8ixi5+WbeUsquF0c= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/coredns/coredns v1.1.2 h1:bAFHrSsBeTeRG5W3Nf2su3lUGw7Npw2UKeCJm/3A638= github.com/coredns/coredns v1.1.2/go.mod h1:zASH/MVDgR6XZTbxvOnsZfffS+31vg6Ackf/wo1+AM0= @@ -159,14 +160,16 @@ github.com/docker/go-connections v0.3.0 h1:3lOnM9cSzgGwx8VfK/NGOW5fLQ0GjIlCkaktF github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0 h1:ZoRgc53qJCfSLimXqJDrmBhnt5GChDsExMCK7t48o0Y= +github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.10.1 h1:cgDRLG7bs59Zd+apAWuzLQL95obVYAymNJek76W3mgw= -github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/go-control-plane v0.9.9 h1:vQLjymTobffN2R0F8eTqw6q7iozfRO5Z0m+/4Vw+/uA= +github.com/envoyproxy/go-control-plane v0.9.9/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -236,9 +239,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -251,7 +253,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= @@ -366,8 +367,8 @@ github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/raft v1.1.0/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM= github.com/hashicorp/raft v1.1.1/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= github.com/hashicorp/raft v1.2.0/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8= -github.com/hashicorp/raft v1.3.9 h1:9yuo1aR0bFTr1cw7pj3S2Bk6MhJCsnr2NAxvIBrP2x4= -github.com/hashicorp/raft v1.3.9/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM= +github.com/hashicorp/raft v1.3.6 h1:v5xW5KzByoerQlN/o31VJrFNiozgzGyDoMgDJgXpsto= +github.com/hashicorp/raft v1.3.6/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM= github.com/hashicorp/raft-autopilot v0.1.6 h1:C1q3RNF2FfXNZfHWbvVAu0QixaQK8K5pX4O5lh+9z4I= github.com/hashicorp/raft-autopilot v0.1.6/go.mod h1:Af4jZBwaNOI+tXfIqIdbcAnh/UyyqIMj/pOISIfhArw= github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk= @@ -377,8 +378,8 @@ github.com/hashicorp/raft-boltdb v0.0.0-20211202195631-7d34b9fb3f42/go.mod h1:wc github.com/hashicorp/raft-boltdb/v2 v2.2.2 h1:rlkPtOllgIcKLxVT4nutqlTH2NRFn+tO1wwZk/4Dxqw= github.com/hashicorp/raft-boltdb/v2 v2.2.2/go.mod h1:N8YgaZgNJLpZC+h+by7vDu5rzsRgONThTEeUS3zWbfY= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.8 h1:JGklO/2Drf1QGa312EieQN3zhxQ+aJg6pG+aC3MFaVo= -github.com/hashicorp/serf v0.9.8/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7 h1:hkdgbqizGQHuU5IPqYM1JdSMV8nKfpuOnZYXssk9muY= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/vault/api v1.0.5-0.20200717191844-f687267c8086 h1:OKsyxKi2sNmqm1Gv93adf2AID2FOBFdCbbZn9fGtIdg= github.com/hashicorp/vault/api v1.0.5-0.20200717191844-f687267c8086/go.mod h1:R3Umvhlxi2TN7Ex2hzOowyeNb+SfbVWI973N+ctaFMk= github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267 h1:e1ok06zGrWJW91rzRroyl5nRNqraaBe4d5hiKcVZuHM= @@ -679,6 +680,7 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -783,7 +785,6 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200523222454-059865788121/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-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -852,9 +853,8 @@ golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -935,10 +935,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= 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= diff --git a/internal/tools/proto-gen-rpc-glue/e2e/source.pb.go b/internal/tools/proto-gen-rpc-glue/e2e/source.pb.go index 4d24ab32809de..43ace7a84ec87 100644 --- a/internal/tools/proto-gen-rpc-glue/e2e/source.pb.go +++ b/internal/tools/proto-gen-rpc-glue/e2e/source.pb.go @@ -32,22 +32,6 @@ type ExampleQueryMeta struct { QueryMeta *pbcommon.QueryMeta } -// @consul-rpc-glue: Datacenter -type ExampleDatacenter struct { - Value string - Datacenter string -} - -// @consul-rpc-glue: ReadTODO -type ExampleReadTODO struct { - Value string -} - -// @consul-rpc-glue: WriteTODO -type ExampleWriteTODO struct { - Value string -} - // @consul-rpc-glue: WriteRequest=AltWriteRequest type AltExampleWriteRequest struct { Value int @@ -70,9 +54,3 @@ type AltExampleQueryOptions struct { type AltExampleQueryMeta struct { AltQueryMeta *pbcommon.QueryMeta } - -// @consul-rpc-glue: Datacenter=AltDatacenter -type AltExampleDatacenter struct { - Value string - AltDatacenter string -} diff --git a/internal/tools/proto-gen-rpc-glue/e2e/source.rpcglue.pb.go.golden b/internal/tools/proto-gen-rpc-glue/e2e/source.rpcglue.pb.go.golden index c4c8e1e7f311a..a035aab7a88ae 100644 --- a/internal/tools/proto-gen-rpc-glue/e2e/source.rpcglue.pb.go.golden +++ b/internal/tools/proto-gen-rpc-glue/e2e/source.rpcglue.pb.go.golden @@ -13,7 +13,6 @@ import ( // Reference imports to suppress errors if they are not otherwise used. var _ structs.RPCInfo -var _ time.Month // AllowStaleRead implements structs.RPCInfo func (msg *ExampleWriteRequest) AllowStaleRead() bool { @@ -28,14 +27,6 @@ func (msg *ExampleWriteRequest) HasTimedOut(start time.Time, rpcHoldTimeout time return msg.WriteRequest.HasTimedOut(start, rpcHoldTimeout, a, b) } -// Timeout implements structs.RPCInfo -func (msg *ExampleWriteRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - if msg == nil || msg.WriteRequest == nil { - return 0 - } - return msg.WriteRequest.Timeout(rpcHoldTimeout, a, b) -} - // IsRead implements structs.RPCInfo func (msg *ExampleWriteRequest) IsRead() bool { return false @@ -90,14 +81,6 @@ func (msg *ExampleReadRequest) HasTimedOut(start time.Time, rpcHoldTimeout time. return msg.ReadRequest.HasTimedOut(start, rpcHoldTimeout, a, b) } -// Timeout implements structs.RPCInfo -func (msg *ExampleReadRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - if msg == nil || msg.ReadRequest == nil { - return 0 - } - return msg.ReadRequest.Timeout(rpcHoldTimeout, a, b) -} - // SetTokenSecret implements structs.RPCInfo func (msg *ExampleReadRequest) SetTokenSecret(s string) { // TODO: initialize if nil @@ -154,14 +137,6 @@ func (msg *ExampleQueryOptions) HasTimedOut(start time.Time, rpcHoldTimeout time return msg.QueryOptions.HasTimedOut(start, rpcHoldTimeout, a, b) } -// Timeout implements structs.RPCInfo -func (msg *ExampleQueryOptions) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - if msg == nil || msg.QueryOptions == nil { - return 0 - } - return msg.QueryOptions.Timeout(rpcHoldTimeout, a, b) -} - // SetTokenSecret implements structs.RPCInfo func (msg *ExampleQueryOptions) SetTokenSecret(s string) { // TODO: initialize if nil @@ -259,90 +234,6 @@ func (msg *ExampleQueryMeta) SetResultsFilteredByACLs(b bool) { msg.QueryMeta.SetResultsFilteredByACLs(b) } -// RequestDatacenter implements structs.RPCInfo -func (msg *ExampleDatacenter) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} - -// IsRead implements structs.RPCInfo -func (msg *ExampleReadTODO) IsRead() bool { - // TODO(peering): figure out read semantics here - return true -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *ExampleReadTODO) AllowStaleRead() bool { - // TODO(peering): figure out read semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *ExampleReadTODO) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out read semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *ExampleReadTODO) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out read semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *ExampleReadTODO) SetTokenSecret(s string) { - // TODO(peering): figure out read semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *ExampleReadTODO) TokenSecret() string { - // TODO(peering): figure out read semantics here - return "" -} - -// Token implements structs.RPCInfo -func (msg *ExampleReadTODO) Token() string { - // TODO(peering): figure out read semantics here - return "" -} - -// IsRead implements structs.RPCInfo -func (msg *ExampleWriteTODO) IsRead() bool { - // TODO(peering): figure out write semantics here - return false -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *ExampleWriteTODO) AllowStaleRead() bool { - // TODO(peering): figure out write semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *ExampleWriteTODO) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out write semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *ExampleWriteTODO) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out write semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *ExampleWriteTODO) SetTokenSecret(s string) { - // TODO(peering): figure out write semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *ExampleWriteTODO) TokenSecret() string { - // TODO(peering): figure out write semantics here - return "" -} - // AllowStaleRead implements structs.RPCInfo func (msg *AltExampleWriteRequest) AllowStaleRead() bool { return false @@ -356,14 +247,6 @@ func (msg *AltExampleWriteRequest) HasTimedOut(start time.Time, rpcHoldTimeout t return msg.AltWriteRequest.HasTimedOut(start, rpcHoldTimeout, a, b) } -// Timeout implements structs.RPCInfo -func (msg *AltExampleWriteRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - if msg == nil || msg.AltWriteRequest == nil { - return 0 - } - return msg.AltWriteRequest.Timeout(rpcHoldTimeout, a, b) -} - // IsRead implements structs.RPCInfo func (msg *AltExampleWriteRequest) IsRead() bool { return false @@ -410,14 +293,6 @@ func (msg *AltExampleReadRequest) HasTimedOut(start time.Time, rpcHoldTimeout ti return msg.AltReadRequest.HasTimedOut(start, rpcHoldTimeout, a, b) } -// Timeout implements structs.RPCInfo -func (msg *AltExampleReadRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - if msg == nil || msg.AltReadRequest == nil { - return 0 - } - return msg.AltReadRequest.Timeout(rpcHoldTimeout, a, b) -} - // SetTokenSecret implements structs.RPCInfo func (msg *AltExampleReadRequest) SetTokenSecret(s string) { // TODO: initialize if nil @@ -458,14 +333,6 @@ func (msg *AltExampleQueryOptions) HasTimedOut(start time.Time, rpcHoldTimeout t return msg.AltQueryOptions.HasTimedOut(start, rpcHoldTimeout, a, b) } -// Timeout implements structs.RPCInfo -func (msg *AltExampleQueryOptions) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - if msg == nil || msg.AltQueryOptions == nil { - return 0 - } - return msg.AltQueryOptions.Timeout(rpcHoldTimeout, a, b) -} - // SetTokenSecret implements structs.RPCInfo func (msg *AltExampleQueryOptions) SetTokenSecret(s string) { // TODO: initialize if nil @@ -562,11 +429,3 @@ func (msg *AltExampleQueryMeta) SetResultsFilteredByACLs(b bool) { } msg.AltQueryMeta.SetResultsFilteredByACLs(b) } - -// RequestDatacenter implements structs.RPCInfo -func (msg *AltExampleDatacenter) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} diff --git a/internal/tools/proto-gen-rpc-glue/main.go b/internal/tools/proto-gen-rpc-glue/main.go index cbb3340395529..57e932f50b5ab 100644 --- a/internal/tools/proto-gen-rpc-glue/main.go +++ b/internal/tools/proto-gen-rpc-glue/main.go @@ -102,15 +102,6 @@ func processFile(path string) error { if ann.QueryMeta != "" { log.Printf(" QueryMeta from %s", ann.QueryMeta) } - if ann.Datacenter != "" { - log.Printf(" Datacenter from %s", ann.Datacenter) - } - if ann.ReadTODO != "" { - log.Printf(" ReadTODO from %s", ann.ReadTODO) - } - if ann.WriteTODO != "" { - log.Printf(" WriteTODO from %s", ann.WriteTODO) - } } } @@ -135,7 +126,6 @@ import ( // Reference imports to suppress errors if they are not otherwise used. var _ structs.RPCInfo -var _ time.Month `) for _, typ := range v.Types { @@ -154,15 +144,6 @@ var _ time.Month if typ.Annotation.QueryMeta != "" { buf.WriteString(fmt.Sprintf(tmplQueryMeta, typ.Name, typ.Annotation.QueryMeta)) } - if typ.Annotation.Datacenter != "" { - buf.WriteString(fmt.Sprintf(tmplDatacenter, typ.Name, typ.Annotation.Datacenter)) - } - if typ.Annotation.ReadTODO != "" { - buf.WriteString(fmt.Sprintf(tmplReadTODO, typ.Name, typ.Annotation.ReadTODO)) - } - if typ.Annotation.WriteTODO != "" { - buf.WriteString(fmt.Sprintf(tmplWriteTODO, typ.Name, typ.Annotation.WriteTODO)) - } } // write to disk @@ -264,9 +245,6 @@ type Annotation struct { ReadRequest string WriteRequest string TargetDatacenter string - Datacenter string - ReadTODO string - WriteTODO string } func (a Annotation) IsZero() bool { @@ -310,16 +288,6 @@ func getAnnotation(doc []*ast.Comment) (Annotation, error) { case strings.HasPrefix(part, "QueryMeta="): ann.QueryMeta = strings.TrimPrefix(part, "QueryMeta=") - case part == "Datacenter": - ann.Datacenter = "Datacenter" - case strings.HasPrefix(part, "Datacenter="): - ann.Datacenter = strings.TrimPrefix(part, "Datacenter=") - - case part == "ReadTODO": - ann.ReadTODO = "ReadTODO" - case part == "WriteTODO": - ann.WriteTODO = "WriteTODO" - default: return Annotation{}, fmt.Errorf("unexpected annotation part: %s", part) } @@ -463,86 +431,6 @@ func (msg *%[1]s) Token() string { } ` -const tmplReadTODO = ` -// IsRead implements structs.RPCInfo -func (msg *%[1]s) IsRead() bool { - // TODO(peering): figure out read semantics here - return true -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *%[1]s) AllowStaleRead() bool { - // TODO(peering): figure out read semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *%[1]s) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out read semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *%[1]s) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out read semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *%[1]s) SetTokenSecret(s string) { - // TODO(peering): figure out read semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *%[1]s) TokenSecret() string { - // TODO(peering): figure out read semantics here - return "" -} - -// Token implements structs.RPCInfo -func (msg *%[1]s) Token() string { - // TODO(peering): figure out read semantics here - return "" -} -` - -const tmplWriteTODO = ` -// IsRead implements structs.RPCInfo -func (msg *%[1]s) IsRead() bool { - // TODO(peering): figure out write semantics here - return false -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *%[1]s) AllowStaleRead() bool { - // TODO(peering): figure out write semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *%[1]s) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out write semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *%[1]s) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out write semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *%[1]s) SetTokenSecret(s string) { - // TODO(peering): figure out write semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *%[1]s) TokenSecret() string { - // TODO(peering): figure out write semantics here - return "" -} -` - const tmplTargetDatacenter = ` // RequestDatacenter implements structs.RPCInfo func (msg *%[1]s) RequestDatacenter() string { @@ -553,16 +441,6 @@ func (msg *%[1]s) RequestDatacenter() string { } ` -const tmplDatacenter = ` -// RequestDatacenter implements structs.RPCInfo -func (msg *%[1]s) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} -` - const tmplQueryOptions = ` // IsRead implements structs.RPCInfo func (msg *%[1]s) IsRead() bool { diff --git a/lib/maps/maps.go b/lib/maps/maps.go deleted file mode 100644 index f65c06619a2f8..0000000000000 --- a/lib/maps/maps.go +++ /dev/null @@ -1,12 +0,0 @@ -package maps - -func SliceOfKeys[K comparable, V any](m map[K]V) []K { - if len(m) == 0 { - return nil - } - res := make([]K, 0, len(m)) - for k := range m { - res = append(res, k) - } - return res -} diff --git a/lib/maps/maps_test.go b/lib/maps/maps_test.go deleted file mode 100644 index 365abb5974a2f..0000000000000 --- a/lib/maps/maps_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package maps - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestSliceOfKeys(t *testing.T) { - t.Run("string to int", func(t *testing.T) { - m := make(map[string]int) - require.Equal(t, []string(nil), SliceOfKeys(m)) - m["foo"] = 5 - m["bar"] = 6 - require.ElementsMatch(t, []string{"foo", "bar"}, SliceOfKeys(m)) - }) - - type blah struct { - V string - } - - t.Run("int to struct", func(t *testing.T) { - m := make(map[int]blah) - require.Equal(t, []int(nil), SliceOfKeys(m)) - m[5] = blah{V: "foo"} - m[6] = blah{V: "bar"} - require.ElementsMatch(t, []int{5, 6}, SliceOfKeys(m)) - }) - - type id struct { - Name string - } - - t.Run("struct to struct pointer", func(t *testing.T) { - m := make(map[id]*blah) - require.Equal(t, []id(nil), SliceOfKeys(m)) - m[id{Name: "foo"}] = &blah{V: "oof"} - m[id{Name: "bar"}] = &blah{V: "rab"} - require.ElementsMatch(t, []id{{Name: "foo"}, {Name: "bar"}}, SliceOfKeys(m)) - }) -} diff --git a/lib/retry/retry.go b/lib/retry/retry.go index 88ccd04df76b8..e843b2f4f0b07 100644 --- a/lib/retry/retry.go +++ b/lib/retry/retry.go @@ -6,6 +6,11 @@ import ( "time" ) +const ( + defaultMinFailures = 0 + defaultMaxWait = 2 * time.Minute +) + // Jitter should return a new wait duration optionally with some time added or // removed to create some randomness in wait time. type Jitter func(baseTime time.Duration) time.Duration diff --git a/lib/strings.go b/lib/strings.go deleted file mode 100644 index fea1cf58b15e4..0000000000000 --- a/lib/strings.go +++ /dev/null @@ -1,18 +0,0 @@ -package lib - -import ( - "strings" -) - -// EnsureTrailingNewline adds a newline suffix to the input if not present. -// This is typically used to fix a case where the CA provider does not return a new line -// after certificates as per the specification. See GH-8178 for more context. -func EnsureTrailingNewline(str string) string { - if str == "" { - return str - } - if strings.HasSuffix(str, "\n") { - return str - } - return str + "\n" -} diff --git a/lib/ttlcache/eviction_test.go b/lib/ttlcache/eviction_test.go index ab5ae83329b90..2bcfc5483a628 100644 --- a/lib/ttlcache/eviction_test.go +++ b/lib/ttlcache/eviction_test.go @@ -6,8 +6,6 @@ import ( "time" "github.com/stretchr/testify/assert" - - "github.com/hashicorp/consul/sdk/testutil" ) var _ heap.Interface = (*entryHeap)(nil) @@ -20,14 +18,14 @@ func TestExpiryHeap(t *testing.T) { // Init, shouldn't trigger anything testNoMessage(t, ch) - testutil.RunStep(t, "add an entry", func(t *testing.T) { + runStep(t, "add an entry", func(t *testing.T) { entry = h.Add("foo", 100*time.Millisecond) assert.Equal(t, 0, entry.heapIndex) testMessage(t, ch) testNoMessage(t, ch) // exactly one asserted above }) - testutil.RunStep(t, "add a second entry in front", func(t *testing.T) { + runStep(t, "add a second entry in front", func(t *testing.T) { entry2 = h.Add("bar", 50*time.Millisecond) assert.Equal(t, 0, entry2.heapIndex) assert.Equal(t, 1, entry.heapIndex) @@ -35,13 +33,13 @@ func TestExpiryHeap(t *testing.T) { testNoMessage(t, ch) // exactly one asserted above }) - testutil.RunStep(t, "add a third entry at the end", func(t *testing.T) { + runStep(t, "add a third entry at the end", func(t *testing.T) { entry3 = h.Add("baz", 1000*time.Millisecond) assert.Equal(t, 2, entry3.heapIndex) testNoMessage(t, ch) // no notify cause index 0 stayed the same }) - testutil.RunStep(t, "remove the first entry", func(t *testing.T) { + runStep(t, "remove the first entry", func(t *testing.T) { h.Remove(0) assert.Equal(t, 0, entry.heapIndex) assert.Equal(t, 1, entry3.heapIndex) @@ -49,7 +47,7 @@ func TestExpiryHeap(t *testing.T) { testNoMessage(t, ch) }) - testutil.RunStep(t, "update so that entry3 expires first", func(t *testing.T) { + runStep(t, "update so that entry3 expires first", func(t *testing.T) { h.Update(entry.heapIndex, 2000*time.Millisecond) assert.Equal(t, 1, entry.heapIndex) assert.Equal(t, 0, entry3.heapIndex) @@ -57,7 +55,7 @@ func TestExpiryHeap(t *testing.T) { testNoMessage(t, ch) }) - testutil.RunStep(t, "0th element change triggers a notify", func(t *testing.T) { + runStep(t, "0th element change triggers a notify", func(t *testing.T) { h.Update(entry3.heapIndex, 1500*time.Millisecond) assert.Equal(t, 1, entry.heapIndex) // no move assert.Equal(t, 0, entry3.heapIndex) @@ -65,7 +63,7 @@ func TestExpiryHeap(t *testing.T) { testNoMessage(t, ch) // one message }) - testutil.RunStep(t, "update can not decrease expiry time", func(t *testing.T) { + runStep(t, "update can not decrease expiry time", func(t *testing.T) { h.Update(entry.heapIndex, 100*time.Millisecond) assert.Equal(t, 1, entry.heapIndex) // no move assert.Equal(t, 0, entry3.heapIndex) @@ -92,3 +90,9 @@ func testMessage(t *testing.T, ch <-chan struct{}) { t.Fatal("should have a message") } } + +func runStep(t *testing.T, name string, fn func(t *testing.T)) { + if !t.Run(name, fn) { + t.FailNow() + } +} diff --git a/logging/names.go b/logging/names.go index 5fd904c7fa529..17db364af71ca 100644 --- a/logging/names.go +++ b/logging/names.go @@ -50,7 +50,6 @@ const ( Sentinel string = "sentinel" Snapshot string = "snapshot" Partition string = "partition" - Peering string = "peering" TerminatingGateway string = "terminating_gateway" TLSUtil string = "tlsutil" Transaction string = "txn" @@ -61,5 +60,4 @@ const ( Watch string = "watch" XDS string = "xds" Vault string = "vault" - Health string = "health" ) diff --git a/main.go b/main.go index e7b04e241fb5b..9505f2906e355 100644 --- a/main.go +++ b/main.go @@ -29,7 +29,7 @@ func realMain() int { ui := &cli.BasicUI{ BasicUi: mcli.BasicUi{Writer: os.Stdout, ErrorWriter: os.Stderr}, } - cmds := command.RegisteredCommands(ui) + cmds := command.CommandsFromRegistry(ui) var names []string for c := range cmds { names = append(names, c) diff --git a/main_test.go b/main_test.go new file mode 100644 index 0000000000000..06ab7d0f9a35a --- /dev/null +++ b/main_test.go @@ -0,0 +1 @@ +package main diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000000..29027cb00a690 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "consul", + "lockfileVersion": 2, + "requires": true, + "packages": {} +} diff --git a/proto-public/buf.gen.yaml b/proto-public/buf.gen.yaml deleted file mode 100644 index 5f4b28f21beac..0000000000000 --- a/proto-public/buf.gen.yaml +++ /dev/null @@ -1,22 +0,0 @@ -version: v1 -managed: - enabled: true - go_package_prefix: - # this is not github.com/hashicorp/consul/proto-public because we are going - # to execute buf generate from the top level directory so that the filepaths - # contain the full path within the repo. This avoids registration conflicts - # in protocolbuffers/protobuf-go when Consul starts. Those conflicts would - # have been due to a protobuf file being registered to a global registry - # using a relative file name. - default: github.com/hashicorp/consul -plugins: - - name: go - out: . - opt: paths=source_relative - - name: go-grpc - out: . - opt: - - paths=source_relative - - require_unimplemented_servers=false - - name: go-binary - out: . diff --git a/proto-public/buf.yaml b/proto-public/buf.yaml deleted file mode 100644 index 85ac0bcd5bd19..0000000000000 --- a/proto-public/buf.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: v1 -lint: - use: - - DEFAULT - except: - # we want to enable our Go packages to have a pb prefix to make goimports more - # intelligently handle fixing up imports and hopefully getting it right. - - PACKAGE_DIRECTORY_MATCH - - # if we ever need a v2 we can have a second version with the .v2 version in the package name - - PACKAGE_VERSION_SUFFIX - - service_suffix: Service -breaking: - use: - - FILE diff --git a/proto-public/pbacl/acl.pb.binary.go b/proto-public/pbacl/acl.pb.binary.go deleted file mode 100644 index 39fa54957271a..0000000000000 --- a/proto-public/pbacl/acl.pb.binary.go +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: proto-public/pbacl/acl.proto - -package pbacl - -import ( - "github.com/golang/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *LogoutResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *LogoutResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *LoginRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *LoginRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *LoginResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *LoginResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *LoginToken) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *LoginToken) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *LogoutRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *LogoutRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbacl/acl.pb.go b/proto-public/pbacl/acl.pb.go deleted file mode 100644 index 24fbd31a0033e..0000000000000 --- a/proto-public/pbacl/acl.pb.go +++ /dev/null @@ -1,495 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) -// source: proto-public/pbacl/acl.proto - -package pbacl - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type LogoutResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *LogoutResponse) Reset() { - *x = LogoutResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LogoutResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LogoutResponse) ProtoMessage() {} - -func (x *LogoutResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LogoutResponse.ProtoReflect.Descriptor instead. -func (*LogoutResponse) Descriptor() ([]byte, []int) { - return file_proto_public_pbacl_acl_proto_rawDescGZIP(), []int{0} -} - -type LoginRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // auth_method is the name of the configured auth method that will be used to - // validate the presented bearer token. - AuthMethod string `protobuf:"bytes,1,opt,name=auth_method,json=authMethod,proto3" json:"auth_method,omitempty"` - // bearer_token is a token produced by a trusted identity provider as - // configured by the auth method. - BearerToken string `protobuf:"bytes,2,opt,name=bearer_token,json=bearerToken,proto3" json:"bearer_token,omitempty"` - // meta is a collection of arbitrary key-value pairs associated to the token, - // it is useful for tracking the origin of tokens. - Meta map[string]string `protobuf:"bytes,3,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // namespace (enterprise only) is the namespace in which the auth method - // resides. - Namespace string `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` - // partition (enterprise only) is the partition in which the auth method - // resides. - Partition string `protobuf:"bytes,5,opt,name=partition,proto3" json:"partition,omitempty"` - // datacenter is the target datacenter in which the request will be processed. - Datacenter string `protobuf:"bytes,6,opt,name=datacenter,proto3" json:"datacenter,omitempty"` -} - -func (x *LoginRequest) Reset() { - *x = LoginRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoginRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoginRequest) ProtoMessage() {} - -func (x *LoginRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoginRequest.ProtoReflect.Descriptor instead. -func (*LoginRequest) Descriptor() ([]byte, []int) { - return file_proto_public_pbacl_acl_proto_rawDescGZIP(), []int{1} -} - -func (x *LoginRequest) GetAuthMethod() string { - if x != nil { - return x.AuthMethod - } - return "" -} - -func (x *LoginRequest) GetBearerToken() string { - if x != nil { - return x.BearerToken - } - return "" -} - -func (x *LoginRequest) GetMeta() map[string]string { - if x != nil { - return x.Meta - } - return nil -} - -func (x *LoginRequest) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -func (x *LoginRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *LoginRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -type LoginResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // token is the generated ACL token. - Token *LoginToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` -} - -func (x *LoginResponse) Reset() { - *x = LoginResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoginResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoginResponse) ProtoMessage() {} - -func (x *LoginResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoginResponse.ProtoReflect.Descriptor instead. -func (*LoginResponse) Descriptor() ([]byte, []int) { - return file_proto_public_pbacl_acl_proto_rawDescGZIP(), []int{2} -} - -func (x *LoginResponse) GetToken() *LoginToken { - if x != nil { - return x.Token - } - return nil -} - -type LoginToken struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // accessor_id is a UUID used to identify the ACL token. - AccessorId string `protobuf:"bytes,1,opt,name=accessor_id,json=accessorId,proto3" json:"accessor_id,omitempty"` - // secret_id is a UUID presented as a credential by clients. - SecretId string `protobuf:"bytes,2,opt,name=secret_id,json=secretId,proto3" json:"secret_id,omitempty"` -} - -func (x *LoginToken) Reset() { - *x = LoginToken{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoginToken) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoginToken) ProtoMessage() {} - -func (x *LoginToken) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoginToken.ProtoReflect.Descriptor instead. -func (*LoginToken) Descriptor() ([]byte, []int) { - return file_proto_public_pbacl_acl_proto_rawDescGZIP(), []int{3} -} - -func (x *LoginToken) GetAccessorId() string { - if x != nil { - return x.AccessorId - } - return "" -} - -func (x *LoginToken) GetSecretId() string { - if x != nil { - return x.SecretId - } - return "" -} - -type LogoutRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // token is the ACL token's secret ID. - Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - // datacenter is the target datacenter in which the request will be processed. - Datacenter string `protobuf:"bytes,2,opt,name=datacenter,proto3" json:"datacenter,omitempty"` -} - -func (x *LogoutRequest) Reset() { - *x = LogoutRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LogoutRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LogoutRequest) ProtoMessage() {} - -func (x *LogoutRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbacl_acl_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LogoutRequest.ProtoReflect.Descriptor instead. -func (*LogoutRequest) Descriptor() ([]byte, []int) { - return file_proto_public_pbacl_acl_proto_rawDescGZIP(), []int{4} -} - -func (x *LogoutRequest) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *LogoutRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -var File_proto_public_pbacl_acl_proto protoreflect.FileDescriptor - -var file_proto_public_pbacl_acl_proto_rawDesc = []byte{ - 0x0a, 0x1c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, - 0x62, 0x61, 0x63, 0x6c, 0x2f, 0x61, 0x63, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, - 0x61, 0x63, 0x6c, 0x22, 0x10, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x98, 0x02, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x75, 0x74, - 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x65, 0x61, 0x72, 0x65, - 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, - 0x65, 0x61, 0x72, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2f, 0x0a, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x63, 0x6c, 0x2e, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, - 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x36, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x61, 0x63, 0x6c, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x4a, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x64, - 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x64, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x32, 0x73, 0x0a, 0x0a, 0x41, - 0x43, 0x4c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x12, 0x11, 0x2e, 0x61, 0x63, 0x6c, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x61, 0x63, 0x6c, 0x2e, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x06, 0x4c, - 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x2e, 0x61, 0x63, 0x6c, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, - 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x61, 0x63, 0x6c, 0x2e, - 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x42, 0x6f, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x63, 0x6c, 0x42, 0x08, 0x41, 0x63, 0x6c, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, - 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x2f, 0x70, 0x62, 0x61, 0x63, 0x6c, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x03, - 0x41, 0x63, 0x6c, 0xca, 0x02, 0x03, 0x41, 0x63, 0x6c, 0xe2, 0x02, 0x0f, 0x41, 0x63, 0x6c, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x03, 0x41, 0x63, - 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_proto_public_pbacl_acl_proto_rawDescOnce sync.Once - file_proto_public_pbacl_acl_proto_rawDescData = file_proto_public_pbacl_acl_proto_rawDesc -) - -func file_proto_public_pbacl_acl_proto_rawDescGZIP() []byte { - file_proto_public_pbacl_acl_proto_rawDescOnce.Do(func() { - file_proto_public_pbacl_acl_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_public_pbacl_acl_proto_rawDescData) - }) - return file_proto_public_pbacl_acl_proto_rawDescData -} - -var file_proto_public_pbacl_acl_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_proto_public_pbacl_acl_proto_goTypes = []interface{}{ - (*LogoutResponse)(nil), // 0: acl.LogoutResponse - (*LoginRequest)(nil), // 1: acl.LoginRequest - (*LoginResponse)(nil), // 2: acl.LoginResponse - (*LoginToken)(nil), // 3: acl.LoginToken - (*LogoutRequest)(nil), // 4: acl.LogoutRequest - nil, // 5: acl.LoginRequest.MetaEntry -} -var file_proto_public_pbacl_acl_proto_depIdxs = []int32{ - 5, // 0: acl.LoginRequest.meta:type_name -> acl.LoginRequest.MetaEntry - 3, // 1: acl.LoginResponse.token:type_name -> acl.LoginToken - 1, // 2: acl.ACLService.Login:input_type -> acl.LoginRequest - 4, // 3: acl.ACLService.Logout:input_type -> acl.LogoutRequest - 2, // 4: acl.ACLService.Login:output_type -> acl.LoginResponse - 0, // 5: acl.ACLService.Logout:output_type -> acl.LogoutResponse - 4, // [4:6] is the sub-list for method output_type - 2, // [2:4] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_proto_public_pbacl_acl_proto_init() } -func file_proto_public_pbacl_acl_proto_init() { - if File_proto_public_pbacl_acl_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_proto_public_pbacl_acl_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogoutResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbacl_acl_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbacl_acl_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbacl_acl_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginToken); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbacl_acl_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogoutRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_public_pbacl_acl_proto_rawDesc, - NumEnums: 0, - NumMessages: 6, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_proto_public_pbacl_acl_proto_goTypes, - DependencyIndexes: file_proto_public_pbacl_acl_proto_depIdxs, - MessageInfos: file_proto_public_pbacl_acl_proto_msgTypes, - }.Build() - File_proto_public_pbacl_acl_proto = out.File - file_proto_public_pbacl_acl_proto_rawDesc = nil - file_proto_public_pbacl_acl_proto_goTypes = nil - file_proto_public_pbacl_acl_proto_depIdxs = nil -} diff --git a/proto-public/pbacl/acl.proto b/proto-public/pbacl/acl.proto deleted file mode 100644 index aa315c58db2ac..0000000000000 --- a/proto-public/pbacl/acl.proto +++ /dev/null @@ -1,60 +0,0 @@ -syntax = "proto3"; - -package acl; - -service ACLService { - // Login exchanges the presented bearer token for a Consul ACL token using a - // configured auth method. - rpc Login(LoginRequest) returns (LoginResponse) {} - - // Logout destroys the given ACL token once the caller is done with it. - rpc Logout(LogoutRequest) returns (LogoutResponse) {} -} - -message LogoutResponse {} - -message LoginRequest { - // auth_method is the name of the configured auth method that will be used to - // validate the presented bearer token. - string auth_method = 1; - - // bearer_token is a token produced by a trusted identity provider as - // configured by the auth method. - string bearer_token = 2; - - // meta is a collection of arbitrary key-value pairs associated to the token, - // it is useful for tracking the origin of tokens. - map meta = 3; - - // namespace (enterprise only) is the namespace in which the auth method - // resides. - string namespace = 4; - - // partition (enterprise only) is the partition in which the auth method - // resides. - string partition = 5; - - // datacenter is the target datacenter in which the request will be processed. - string datacenter = 6; -} - -message LoginResponse { - // token is the generated ACL token. - LoginToken token = 1; -} - -message LoginToken { - // accessor_id is a UUID used to identify the ACL token. - string accessor_id = 1; - - // secret_id is a UUID presented as a credential by clients. - string secret_id = 2; -} - -message LogoutRequest { - // token is the ACL token's secret ID. - string token = 1; - - // datacenter is the target datacenter in which the request will be processed. - string datacenter = 2; -} diff --git a/proto-public/pbacl/acl_grpc.pb.go b/proto-public/pbacl/acl_grpc.pb.go deleted file mode 100644 index ff588154c0168..0000000000000 --- a/proto-public/pbacl/acl_grpc.pb.go +++ /dev/null @@ -1,145 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc (unknown) -// source: proto-public/pbacl/acl.proto - -package pbacl - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -// ACLServiceClient is the client API for ACLService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type ACLServiceClient interface { - // Login exchanges the presented bearer token for a Consul ACL token using a - // configured auth method. - Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginResponse, error) - // Logout destroys the given ACL token once the caller is done with it. - Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutResponse, error) -} - -type aCLServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewACLServiceClient(cc grpc.ClientConnInterface) ACLServiceClient { - return &aCLServiceClient{cc} -} - -func (c *aCLServiceClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginResponse, error) { - out := new(LoginResponse) - err := c.cc.Invoke(ctx, "/acl.ACLService/Login", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *aCLServiceClient) Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutResponse, error) { - out := new(LogoutResponse) - err := c.cc.Invoke(ctx, "/acl.ACLService/Logout", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ACLServiceServer is the server API for ACLService service. -// All implementations should embed UnimplementedACLServiceServer -// for forward compatibility -type ACLServiceServer interface { - // Login exchanges the presented bearer token for a Consul ACL token using a - // configured auth method. - Login(context.Context, *LoginRequest) (*LoginResponse, error) - // Logout destroys the given ACL token once the caller is done with it. - Logout(context.Context, *LogoutRequest) (*LogoutResponse, error) -} - -// UnimplementedACLServiceServer should be embedded to have forward compatible implementations. -type UnimplementedACLServiceServer struct { -} - -func (UnimplementedACLServiceServer) Login(context.Context, *LoginRequest) (*LoginResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Login not implemented") -} -func (UnimplementedACLServiceServer) Logout(context.Context, *LogoutRequest) (*LogoutResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Logout not implemented") -} - -// UnsafeACLServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to ACLServiceServer will -// result in compilation errors. -type UnsafeACLServiceServer interface { - mustEmbedUnimplementedACLServiceServer() -} - -func RegisterACLServiceServer(s grpc.ServiceRegistrar, srv ACLServiceServer) { - s.RegisterService(&ACLService_ServiceDesc, srv) -} - -func _ACLService_Login_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LoginRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ACLServiceServer).Login(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/acl.ACLService/Login", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ACLServiceServer).Login(ctx, req.(*LoginRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _ACLService_Logout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LogoutRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ACLServiceServer).Logout(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/acl.ACLService/Logout", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ACLServiceServer).Logout(ctx, req.(*LogoutRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// ACLService_ServiceDesc is the grpc.ServiceDesc for ACLService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var ACLService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "acl.ACLService", - HandlerType: (*ACLServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Login", - Handler: _ACLService_Login_Handler, - }, - { - MethodName: "Logout", - Handler: _ACLService_Logout_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "proto-public/pbacl/acl.proto", -} diff --git a/proto-public/pbconnectca/ca.pb.binary.go b/proto-public/pbconnectca/ca.pb.binary.go index f0f36f2feb748..e373db9b50bdb 100644 --- a/proto-public/pbconnectca/ca.pb.binary.go +++ b/proto-public/pbconnectca/ca.pb.binary.go @@ -7,16 +7,6 @@ import ( "github.com/golang/protobuf/proto" ) -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *WatchRootsRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *WatchRootsRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - // MarshalBinary implements encoding.BinaryMarshaler func (msg *WatchRootsResponse) MarshalBinary() ([]byte, error) { return proto.Marshal(msg) @@ -36,23 +26,3 @@ func (msg *CARoot) MarshalBinary() ([]byte, error) { func (msg *CARoot) UnmarshalBinary(b []byte) error { return proto.Unmarshal(b, msg) } - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *SignRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *SignRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *SignResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *SignResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbconnectca/ca.pb.go b/proto-public/pbconnectca/ca.pb.go index b639d4a9618fb..bb966a4decab1 100644 --- a/proto-public/pbconnectca/ca.pb.go +++ b/proto-public/pbconnectca/ca.pb.go @@ -1,14 +1,20 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto-public/pbconnectca/ca.proto package pbconnectca import ( + context "context" + proto "github.com/golang/protobuf/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" @@ -21,43 +27,9 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type WatchRootsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *WatchRootsRequest) Reset() { - *x = WatchRootsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WatchRootsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WatchRootsRequest) ProtoMessage() {} - -func (x *WatchRootsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WatchRootsRequest.ProtoReflect.Descriptor instead. -func (*WatchRootsRequest) Descriptor() ([]byte, []int) { - return file_proto_public_pbconnectca_ca_proto_rawDescGZIP(), []int{0} -} +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 type WatchRootsResponse struct { state protoimpl.MessageState @@ -83,7 +55,7 @@ type WatchRootsResponse struct { func (x *WatchRootsResponse) Reset() { *x = WatchRootsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[1] + mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -96,7 +68,7 @@ func (x *WatchRootsResponse) String() string { func (*WatchRootsResponse) ProtoMessage() {} func (x *WatchRootsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[1] + mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -109,7 +81,7 @@ func (x *WatchRootsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WatchRootsResponse.ProtoReflect.Descriptor instead. func (*WatchRootsResponse) Descriptor() ([]byte, []int) { - return file_proto_public_pbconnectca_ca_proto_rawDescGZIP(), []int{1} + return file_proto_public_pbconnectca_ca_proto_rawDescGZIP(), []int{0} } func (x *WatchRootsResponse) GetActiveRootId() string { @@ -171,7 +143,7 @@ type CARoot struct { func (x *CARoot) Reset() { *x = CARoot{} if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[2] + mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -184,7 +156,7 @@ func (x *CARoot) String() string { func (*CARoot) ProtoMessage() {} func (x *CARoot) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[2] + mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -197,7 +169,7 @@ func (x *CARoot) ProtoReflect() protoreflect.Message { // Deprecated: Use CARoot.ProtoReflect.Descriptor instead. func (*CARoot) Descriptor() ([]byte, []int) { - return file_proto_public_pbconnectca_ca_proto_rawDescGZIP(), []int{2} + return file_proto_public_pbconnectca_ca_proto_rawDescGZIP(), []int{1} } func (x *CARoot) GetId() string { @@ -256,167 +228,53 @@ func (x *CARoot) GetRotatedOutAt() *timestamppb.Timestamp { return nil } -type SignRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // csr is the PEM-encoded Certificate Signing Request (CSR). - // - // The CSR's SAN must include a SPIFFE ID that identifies a service or agent - // to which the ACL token provided in the `x-consul-token` metadata has write - // access. - Csr string `protobuf:"bytes,1,opt,name=csr,proto3" json:"csr,omitempty"` -} - -func (x *SignRequest) Reset() { - *x = SignRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignRequest) ProtoMessage() {} - -func (x *SignRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SignRequest.ProtoReflect.Descriptor instead. -func (*SignRequest) Descriptor() ([]byte, []int) { - return file_proto_public_pbconnectca_ca_proto_rawDescGZIP(), []int{3} -} - -func (x *SignRequest) GetCsr() string { - if x != nil { - return x.Csr - } - return "" -} - -type SignResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // cert_pem is the PEM-encoded leaf certificate. - CertPem string `protobuf:"bytes,2,opt,name=cert_pem,json=certPem,proto3" json:"cert_pem,omitempty"` -} - -func (x *SignResponse) Reset() { - *x = SignResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignResponse) ProtoMessage() {} - -func (x *SignResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbconnectca_ca_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SignResponse.ProtoReflect.Descriptor instead. -func (*SignResponse) Descriptor() ([]byte, []int) { - return file_proto_public_pbconnectca_ca_proto_rawDescGZIP(), []int{4} -} - -func (x *SignResponse) GetCertPem() string { - if x != nil { - return x.CertPem - } - return "" -} - var File_proto_public_pbconnectca_ca_proto protoreflect.FileDescriptor var file_proto_public_pbconnectca_ca_proto_rawDesc = []byte{ 0x0a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x2f, 0x63, 0x61, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x1a, 0x1f, + 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x13, 0x0a, 0x11, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x86, 0x01, 0x0a, 0x12, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, - 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x49, - 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x72, 0x75, 0x73, 0x74, 0x44, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x05, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x2e, - 0x43, 0x41, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x05, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x22, 0x9d, 0x02, - 0x0a, 0x06, 0x43, 0x41, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6b, 0x65, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x69, - 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x74, 0x5f, - 0x63, 0x65, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x74, - 0x43, 0x65, 0x72, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, - 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x65, - 0x72, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x72, - 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0c, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x41, 0x74, 0x22, 0x1f, 0x0a, - 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x63, 0x73, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x73, 0x72, 0x22, 0x29, - 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x70, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x65, 0x72, 0x74, 0x50, 0x65, 0x6d, 0x32, 0x9c, 0x01, 0x0a, 0x10, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x43, 0x41, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4d, - 0x0a, 0x0a, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, - 0x6f, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x39, 0x0a, - 0x04, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x16, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, - 0x61, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x92, 0x01, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, - 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x42, 0x07, 0x43, 0x61, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, - 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0xa2, 0x02, 0x03, 0x43, 0x58, - 0x58, 0xaa, 0x02, 0x09, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0xca, 0x02, 0x09, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0xe2, 0x02, 0x15, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x63, 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x09, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x86, 0x01, 0x0a, + 0x12, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x6f, + 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x72, 0x75, + 0x73, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x74, 0x72, 0x75, 0x73, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x05, + 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x2e, 0x43, 0x41, 0x52, 0x6f, 0x6f, 0x74, 0x52, 0x05, + 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x22, 0x9d, 0x02, 0x0a, 0x06, 0x43, 0x41, 0x52, 0x6f, 0x6f, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x69, 0x67, + 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, + 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x65, 0x72, 0x74, 0x12, 0x2d, 0x0a, 0x12, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x65, 0x72, + 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, + 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6f, + 0x75, 0x74, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, + 0x4f, 0x75, 0x74, 0x41, 0x74, 0x32, 0x5b, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x43, 0x41, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x57, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x2e, 0x57, 0x61, 0x74, 0x63, + 0x68, 0x52, 0x6f, 0x6f, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, + 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, + 0x62, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x63, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -431,24 +289,20 @@ func file_proto_public_pbconnectca_ca_proto_rawDescGZIP() []byte { return file_proto_public_pbconnectca_ca_proto_rawDescData } -var file_proto_public_pbconnectca_ca_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_proto_public_pbconnectca_ca_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_proto_public_pbconnectca_ca_proto_goTypes = []interface{}{ - (*WatchRootsRequest)(nil), // 0: connectca.WatchRootsRequest - (*WatchRootsResponse)(nil), // 1: connectca.WatchRootsResponse - (*CARoot)(nil), // 2: connectca.CARoot - (*SignRequest)(nil), // 3: connectca.SignRequest - (*SignResponse)(nil), // 4: connectca.SignResponse - (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp + (*WatchRootsResponse)(nil), // 0: connectca.WatchRootsResponse + (*CARoot)(nil), // 1: connectca.CARoot + (*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 3: google.protobuf.Empty } var file_proto_public_pbconnectca_ca_proto_depIdxs = []int32{ - 2, // 0: connectca.WatchRootsResponse.roots:type_name -> connectca.CARoot - 5, // 1: connectca.CARoot.rotated_out_at:type_name -> google.protobuf.Timestamp - 0, // 2: connectca.ConnectCAService.WatchRoots:input_type -> connectca.WatchRootsRequest - 3, // 3: connectca.ConnectCAService.Sign:input_type -> connectca.SignRequest - 1, // 4: connectca.ConnectCAService.WatchRoots:output_type -> connectca.WatchRootsResponse - 4, // 5: connectca.ConnectCAService.Sign:output_type -> connectca.SignResponse - 4, // [4:6] is the sub-list for method output_type - 2, // [2:4] is the sub-list for method input_type + 1, // 0: connectca.WatchRootsResponse.roots:type_name -> connectca.CARoot + 2, // 1: connectca.CARoot.rotated_out_at:type_name -> google.protobuf.Timestamp + 3, // 2: connectca.ConnectCAService.WatchRoots:input_type -> google.protobuf.Empty + 0, // 3: connectca.ConnectCAService.WatchRoots:output_type -> connectca.WatchRootsResponse + 3, // [3:4] is the sub-list for method output_type + 2, // [2:3] is the sub-list for method input_type 2, // [2:2] is the sub-list for extension type_name 2, // [2:2] is the sub-list for extension extendee 0, // [0:2] is the sub-list for field type_name @@ -461,18 +315,6 @@ func file_proto_public_pbconnectca_ca_proto_init() { } if !protoimpl.UnsafeEnabled { file_proto_public_pbconnectca_ca_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WatchRootsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbconnectca_ca_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WatchRootsResponse); i { case 0: return &v.state @@ -484,7 +326,7 @@ func file_proto_public_pbconnectca_ca_proto_init() { return nil } } - file_proto_public_pbconnectca_ca_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_proto_public_pbconnectca_ca_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CARoot); i { case 0: return &v.state @@ -496,30 +338,6 @@ func file_proto_public_pbconnectca_ca_proto_init() { return nil } } - file_proto_public_pbconnectca_ca_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbconnectca_ca_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } type x struct{} out := protoimpl.TypeBuilder{ @@ -527,7 +345,7 @@ func file_proto_public_pbconnectca_ca_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_public_pbconnectca_ca_proto_rawDesc, NumEnums: 0, - NumMessages: 5, + NumMessages: 2, NumExtensions: 0, NumServices: 1, }, @@ -540,3 +358,116 @@ func file_proto_public_pbconnectca_ca_proto_init() { file_proto_public_pbconnectca_ca_proto_goTypes = nil file_proto_public_pbconnectca_ca_proto_depIdxs = nil } + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// ConnectCAServiceClient is the client API for ConnectCAService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type ConnectCAServiceClient interface { + // WatchRoots provides a stream on which you can receive the list of active + // Connect CA roots. Current roots are sent immediately at the start of the + // stream, and new lists will be sent whenever the roots are rotated. + WatchRoots(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (ConnectCAService_WatchRootsClient, error) +} + +type connectCAServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewConnectCAServiceClient(cc grpc.ClientConnInterface) ConnectCAServiceClient { + return &connectCAServiceClient{cc} +} + +func (c *connectCAServiceClient) WatchRoots(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (ConnectCAService_WatchRootsClient, error) { + stream, err := c.cc.NewStream(ctx, &_ConnectCAService_serviceDesc.Streams[0], "/connectca.ConnectCAService/WatchRoots", opts...) + if err != nil { + return nil, err + } + x := &connectCAServiceWatchRootsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type ConnectCAService_WatchRootsClient interface { + Recv() (*WatchRootsResponse, error) + grpc.ClientStream +} + +type connectCAServiceWatchRootsClient struct { + grpc.ClientStream +} + +func (x *connectCAServiceWatchRootsClient) Recv() (*WatchRootsResponse, error) { + m := new(WatchRootsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// ConnectCAServiceServer is the server API for ConnectCAService service. +type ConnectCAServiceServer interface { + // WatchRoots provides a stream on which you can receive the list of active + // Connect CA roots. Current roots are sent immediately at the start of the + // stream, and new lists will be sent whenever the roots are rotated. + WatchRoots(*emptypb.Empty, ConnectCAService_WatchRootsServer) error +} + +// UnimplementedConnectCAServiceServer can be embedded to have forward compatible implementations. +type UnimplementedConnectCAServiceServer struct { +} + +func (*UnimplementedConnectCAServiceServer) WatchRoots(*emptypb.Empty, ConnectCAService_WatchRootsServer) error { + return status.Errorf(codes.Unimplemented, "method WatchRoots not implemented") +} + +func RegisterConnectCAServiceServer(s *grpc.Server, srv ConnectCAServiceServer) { + s.RegisterService(&_ConnectCAService_serviceDesc, srv) +} + +func _ConnectCAService_WatchRoots_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(emptypb.Empty) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(ConnectCAServiceServer).WatchRoots(m, &connectCAServiceWatchRootsServer{stream}) +} + +type ConnectCAService_WatchRootsServer interface { + Send(*WatchRootsResponse) error + grpc.ServerStream +} + +type connectCAServiceWatchRootsServer struct { + grpc.ServerStream +} + +func (x *connectCAServiceWatchRootsServer) Send(m *WatchRootsResponse) error { + return x.ServerStream.SendMsg(m) +} + +var _ConnectCAService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "connectca.ConnectCAService", + HandlerType: (*ConnectCAServiceServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "WatchRoots", + Handler: _ConnectCAService_WatchRoots_Handler, + ServerStreams: true, + }, + }, + Metadata: "proto-public/pbconnectca/ca.proto", +} diff --git a/proto-public/pbconnectca/ca.proto b/proto-public/pbconnectca/ca.proto index f956a80c5dd85..fef15fbc1c17d 100644 --- a/proto-public/pbconnectca/ca.proto +++ b/proto-public/pbconnectca/ca.proto @@ -2,21 +2,18 @@ syntax = "proto3"; package connectca; +option go_package = "github.com/hashicorp/consul/proto-public/pbconnectca"; + +import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; service ConnectCAService { // WatchRoots provides a stream on which you can receive the list of active // Connect CA roots. Current roots are sent immediately at the start of the // stream, and new lists will be sent whenever the roots are rotated. - rpc WatchRoots(WatchRootsRequest) returns (stream WatchRootsResponse) {} - - // Sign a leaf certificate for the service or agent identified by the SPIFFE - // ID in the given CSR's SAN. - rpc Sign(SignRequest) returns (SignResponse) {} + rpc WatchRoots(google.protobuf.Empty) returns (stream WatchRootsResponse) {}; } -message WatchRootsRequest {} - message WatchRootsResponse { // active_root_id is the ID of a root in Roots that is the active CA root. // Other roots are still valid if they're in the Roots list but are in the @@ -37,53 +34,39 @@ message WatchRootsResponse { } message CARoot { - // id is a globally unique ID (UUID) representing this CA root. - string id = 1; - - // name is a human-friendly name for this CA root. This value is opaque to - // Consul and is not used for anything internally. - string name = 2; - - // serial_number is the x509 serial number of the certificate. - uint64 serial_number = 3; - - // signing_key_id is the connect.HexString encoded id of the public key that - // corresponds to the private key used to sign leaf certificates in the - // local datacenter. - // - // The value comes from x509.Certificate.SubjectKeyId of the local leaf - // signing cert. - // - // See https://www.rfc-editor.org/rfc/rfc3280#section-4.2.1.1 for more detail. - string signing_key_id = 4; - - // root_cert is the PEM-encoded public certificate. - string root_cert = 5; - - // intermediate_certs is a list of PEM-encoded intermediate certs to - // attach to any leaf certs signed by this CA. - repeated string intermediate_certs = 6; - - // active is true if this is the current active CA. This must only - // be true for exactly one CA. - bool active = 7; - - // rotated_out_at is the time at which this CA was removed from the state. - // This will only be set on roots that have been rotated out from being the - // active root. - google.protobuf.Timestamp rotated_out_at = 8; -} - -message SignRequest { - // csr is the PEM-encoded Certificate Signing Request (CSR). - // - // The CSR's SAN must include a SPIFFE ID that identifies a service or agent - // to which the ACL token provided in the `x-consul-token` metadata has write - // access. - string csr = 1; -} - -message SignResponse { - // cert_pem is the PEM-encoded leaf certificate. - string cert_pem = 2; + // id is a globally unique ID (UUID) representing this CA root. + string id = 1; + + // name is a human-friendly name for this CA root. This value is opaque to + // Consul and is not used for anything internally. + string name = 2; + + // serial_number is the x509 serial number of the certificate. + uint64 serial_number = 3; + + // signing_key_id is the connect.HexString encoded id of the public key that + // corresponds to the private key used to sign leaf certificates in the + // local datacenter. + // + // The value comes from x509.Certificate.SubjectKeyId of the local leaf + // signing cert. + // + // See https://www.rfc-editor.org/rfc/rfc3280#section-4.2.1.1 for more detail. + string signing_key_id = 4; + + // root_cert is the PEM-encoded public certificate. + string root_cert = 5; + + // intermediate_certs is a list of PEM-encoded intermediate certs to + // attach to any leaf certs signed by this CA. + repeated string intermediate_certs = 6; + + // active is true if this is the current active CA. This must only + // be true for exactly one CA. + bool active = 7; + + // rotated_out_at is the time at which this CA was removed from the state. + // This will only be set on roots that have been rotated out from being the + // active root. + google.protobuf.Timestamp rotated_out_at = 8; } diff --git a/proto-public/pbconnectca/ca_grpc.pb.go b/proto-public/pbconnectca/ca_grpc.pb.go deleted file mode 100644 index b23cf32f2ca6d..0000000000000 --- a/proto-public/pbconnectca/ca_grpc.pb.go +++ /dev/null @@ -1,177 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc (unknown) -// source: proto-public/pbconnectca/ca.proto - -package pbconnectca - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -// ConnectCAServiceClient is the client API for ConnectCAService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type ConnectCAServiceClient interface { - // WatchRoots provides a stream on which you can receive the list of active - // Connect CA roots. Current roots are sent immediately at the start of the - // stream, and new lists will be sent whenever the roots are rotated. - WatchRoots(ctx context.Context, in *WatchRootsRequest, opts ...grpc.CallOption) (ConnectCAService_WatchRootsClient, error) - // Sign a leaf certificate for the service or agent identified by the SPIFFE - // ID in the given CSR's SAN. - Sign(ctx context.Context, in *SignRequest, opts ...grpc.CallOption) (*SignResponse, error) -} - -type connectCAServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewConnectCAServiceClient(cc grpc.ClientConnInterface) ConnectCAServiceClient { - return &connectCAServiceClient{cc} -} - -func (c *connectCAServiceClient) WatchRoots(ctx context.Context, in *WatchRootsRequest, opts ...grpc.CallOption) (ConnectCAService_WatchRootsClient, error) { - stream, err := c.cc.NewStream(ctx, &ConnectCAService_ServiceDesc.Streams[0], "/connectca.ConnectCAService/WatchRoots", opts...) - if err != nil { - return nil, err - } - x := &connectCAServiceWatchRootsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type ConnectCAService_WatchRootsClient interface { - Recv() (*WatchRootsResponse, error) - grpc.ClientStream -} - -type connectCAServiceWatchRootsClient struct { - grpc.ClientStream -} - -func (x *connectCAServiceWatchRootsClient) Recv() (*WatchRootsResponse, error) { - m := new(WatchRootsResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *connectCAServiceClient) Sign(ctx context.Context, in *SignRequest, opts ...grpc.CallOption) (*SignResponse, error) { - out := new(SignResponse) - err := c.cc.Invoke(ctx, "/connectca.ConnectCAService/Sign", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ConnectCAServiceServer is the server API for ConnectCAService service. -// All implementations should embed UnimplementedConnectCAServiceServer -// for forward compatibility -type ConnectCAServiceServer interface { - // WatchRoots provides a stream on which you can receive the list of active - // Connect CA roots. Current roots are sent immediately at the start of the - // stream, and new lists will be sent whenever the roots are rotated. - WatchRoots(*WatchRootsRequest, ConnectCAService_WatchRootsServer) error - // Sign a leaf certificate for the service or agent identified by the SPIFFE - // ID in the given CSR's SAN. - Sign(context.Context, *SignRequest) (*SignResponse, error) -} - -// UnimplementedConnectCAServiceServer should be embedded to have forward compatible implementations. -type UnimplementedConnectCAServiceServer struct { -} - -func (UnimplementedConnectCAServiceServer) WatchRoots(*WatchRootsRequest, ConnectCAService_WatchRootsServer) error { - return status.Errorf(codes.Unimplemented, "method WatchRoots not implemented") -} -func (UnimplementedConnectCAServiceServer) Sign(context.Context, *SignRequest) (*SignResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Sign not implemented") -} - -// UnsafeConnectCAServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to ConnectCAServiceServer will -// result in compilation errors. -type UnsafeConnectCAServiceServer interface { - mustEmbedUnimplementedConnectCAServiceServer() -} - -func RegisterConnectCAServiceServer(s grpc.ServiceRegistrar, srv ConnectCAServiceServer) { - s.RegisterService(&ConnectCAService_ServiceDesc, srv) -} - -func _ConnectCAService_WatchRoots_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(WatchRootsRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(ConnectCAServiceServer).WatchRoots(m, &connectCAServiceWatchRootsServer{stream}) -} - -type ConnectCAService_WatchRootsServer interface { - Send(*WatchRootsResponse) error - grpc.ServerStream -} - -type connectCAServiceWatchRootsServer struct { - grpc.ServerStream -} - -func (x *connectCAServiceWatchRootsServer) Send(m *WatchRootsResponse) error { - return x.ServerStream.SendMsg(m) -} - -func _ConnectCAService_Sign_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SignRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ConnectCAServiceServer).Sign(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/connectca.ConnectCAService/Sign", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ConnectCAServiceServer).Sign(ctx, req.(*SignRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// ConnectCAService_ServiceDesc is the grpc.ServiceDesc for ConnectCAService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var ConnectCAService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "connectca.ConnectCAService", - HandlerType: (*ConnectCAServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Sign", - Handler: _ConnectCAService_Sign_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "WatchRoots", - Handler: _ConnectCAService_WatchRoots_Handler, - ServerStreams: true, - }, - }, - Metadata: "proto-public/pbconnectca/ca.proto", -} diff --git a/proto-public/pbdataplane/dataplane.pb.binary.go b/proto-public/pbdataplane/dataplane.pb.binary.go deleted file mode 100644 index c08cd112ba498..0000000000000 --- a/proto-public/pbdataplane/dataplane.pb.binary.go +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: proto-public/pbdataplane/dataplane.proto - -package pbdataplane - -import ( - "github.com/golang/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *GetSupportedDataplaneFeaturesRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *GetSupportedDataplaneFeaturesRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *DataplaneFeatureSupport) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *DataplaneFeatureSupport) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *GetSupportedDataplaneFeaturesResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *GetSupportedDataplaneFeaturesResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *GetEnvoyBootstrapParamsRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *GetEnvoyBootstrapParamsRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *GetEnvoyBootstrapParamsResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *GetEnvoyBootstrapParamsResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbdataplane/dataplane.pb.go b/proto-public/pbdataplane/dataplane.pb.go deleted file mode 100644 index 4f9346b3fbac4..0000000000000 --- a/proto-public/pbdataplane/dataplane.pb.go +++ /dev/null @@ -1,727 +0,0 @@ -// Package dataplane provides a service on Consul servers for the Consul Dataplane - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) -// source: proto-public/pbdataplane/dataplane.proto - -package pbdataplane - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - structpb "google.golang.org/protobuf/types/known/structpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type DataplaneFeatures int32 - -const ( - DataplaneFeatures_DATAPLANE_FEATURES_UNSPECIFIED DataplaneFeatures = 0 - DataplaneFeatures_DATAPLANE_FEATURES_WATCH_SERVERS DataplaneFeatures = 1 - DataplaneFeatures_DATAPLANE_FEATURES_EDGE_CERTIFICATE_MANAGEMENT DataplaneFeatures = 2 - DataplaneFeatures_DATAPLANE_FEATURES_ENVOY_BOOTSTRAP_CONFIGURATION DataplaneFeatures = 3 -) - -// Enum value maps for DataplaneFeatures. -var ( - DataplaneFeatures_name = map[int32]string{ - 0: "DATAPLANE_FEATURES_UNSPECIFIED", - 1: "DATAPLANE_FEATURES_WATCH_SERVERS", - 2: "DATAPLANE_FEATURES_EDGE_CERTIFICATE_MANAGEMENT", - 3: "DATAPLANE_FEATURES_ENVOY_BOOTSTRAP_CONFIGURATION", - } - DataplaneFeatures_value = map[string]int32{ - "DATAPLANE_FEATURES_UNSPECIFIED": 0, - "DATAPLANE_FEATURES_WATCH_SERVERS": 1, - "DATAPLANE_FEATURES_EDGE_CERTIFICATE_MANAGEMENT": 2, - "DATAPLANE_FEATURES_ENVOY_BOOTSTRAP_CONFIGURATION": 3, - } -) - -func (x DataplaneFeatures) Enum() *DataplaneFeatures { - p := new(DataplaneFeatures) - *p = x - return p -} - -func (x DataplaneFeatures) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DataplaneFeatures) Descriptor() protoreflect.EnumDescriptor { - return file_proto_public_pbdataplane_dataplane_proto_enumTypes[0].Descriptor() -} - -func (DataplaneFeatures) Type() protoreflect.EnumType { - return &file_proto_public_pbdataplane_dataplane_proto_enumTypes[0] -} - -func (x DataplaneFeatures) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use DataplaneFeatures.Descriptor instead. -func (DataplaneFeatures) EnumDescriptor() ([]byte, []int) { - return file_proto_public_pbdataplane_dataplane_proto_rawDescGZIP(), []int{0} -} - -type ServiceKind int32 - -const ( - // ServiceKind UNSPECIFIED is a sentinel value for when a request - // did not specify a service kind. This will be treated the same - // as if TYPICAL was explicitly used. - ServiceKind_SERVICE_KIND_UNSPECIFIED ServiceKind = 0 - // ServiceKind Typical is a typical, classic Consul service. This is - // represented by the absence of a value. This was chosen for ease of - // backwards compatibility: existing services in the catalog would - // default to the typical service. - ServiceKind_SERVICE_KIND_TYPICAL ServiceKind = 1 - // ServiceKind Connect Proxy is a proxy for the Connect feature. This - // service proxies another service within Consul and speaks the connect - // protocol. - ServiceKind_SERVICE_KIND_CONNECT_PROXY ServiceKind = 2 - // ServiceKind Mesh Gateway is a Mesh Gateway for the Connect feature. This - // service will proxy connections based off the SNI header set by other - // connect proxies. - ServiceKind_SERVICE_KIND_MESH_GATEWAY ServiceKind = 3 - // ServiceKind Terminating Gateway is a Terminating Gateway for the Connect - // feature. This service will proxy connections to services outside the mesh. - ServiceKind_SERVICE_KIND_TERMINATING_GATEWAY ServiceKind = 4 - // ServiceKind Ingress Gateway is an Ingress Gateway for the Connect feature. - // This service will ingress connections into the service mesh. - ServiceKind_SERVICE_KIND_INGRESS_GATEWAY ServiceKind = 5 -) - -// Enum value maps for ServiceKind. -var ( - ServiceKind_name = map[int32]string{ - 0: "SERVICE_KIND_UNSPECIFIED", - 1: "SERVICE_KIND_TYPICAL", - 2: "SERVICE_KIND_CONNECT_PROXY", - 3: "SERVICE_KIND_MESH_GATEWAY", - 4: "SERVICE_KIND_TERMINATING_GATEWAY", - 5: "SERVICE_KIND_INGRESS_GATEWAY", - } - ServiceKind_value = map[string]int32{ - "SERVICE_KIND_UNSPECIFIED": 0, - "SERVICE_KIND_TYPICAL": 1, - "SERVICE_KIND_CONNECT_PROXY": 2, - "SERVICE_KIND_MESH_GATEWAY": 3, - "SERVICE_KIND_TERMINATING_GATEWAY": 4, - "SERVICE_KIND_INGRESS_GATEWAY": 5, - } -) - -func (x ServiceKind) Enum() *ServiceKind { - p := new(ServiceKind) - *p = x - return p -} - -func (x ServiceKind) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServiceKind) Descriptor() protoreflect.EnumDescriptor { - return file_proto_public_pbdataplane_dataplane_proto_enumTypes[1].Descriptor() -} - -func (ServiceKind) Type() protoreflect.EnumType { - return &file_proto_public_pbdataplane_dataplane_proto_enumTypes[1] -} - -func (x ServiceKind) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServiceKind.Descriptor instead. -func (ServiceKind) EnumDescriptor() ([]byte, []int) { - return file_proto_public_pbdataplane_dataplane_proto_rawDescGZIP(), []int{1} -} - -type GetSupportedDataplaneFeaturesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *GetSupportedDataplaneFeaturesRequest) Reset() { - *x = GetSupportedDataplaneFeaturesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetSupportedDataplaneFeaturesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetSupportedDataplaneFeaturesRequest) ProtoMessage() {} - -func (x *GetSupportedDataplaneFeaturesRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetSupportedDataplaneFeaturesRequest.ProtoReflect.Descriptor instead. -func (*GetSupportedDataplaneFeaturesRequest) Descriptor() ([]byte, []int) { - return file_proto_public_pbdataplane_dataplane_proto_rawDescGZIP(), []int{0} -} - -type DataplaneFeatureSupport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FeatureName DataplaneFeatures `protobuf:"varint,1,opt,name=feature_name,json=featureName,proto3,enum=dataplane.DataplaneFeatures" json:"feature_name,omitempty"` - Supported bool `protobuf:"varint,2,opt,name=supported,proto3" json:"supported,omitempty"` -} - -func (x *DataplaneFeatureSupport) Reset() { - *x = DataplaneFeatureSupport{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataplaneFeatureSupport) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataplaneFeatureSupport) ProtoMessage() {} - -func (x *DataplaneFeatureSupport) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataplaneFeatureSupport.ProtoReflect.Descriptor instead. -func (*DataplaneFeatureSupport) Descriptor() ([]byte, []int) { - return file_proto_public_pbdataplane_dataplane_proto_rawDescGZIP(), []int{1} -} - -func (x *DataplaneFeatureSupport) GetFeatureName() DataplaneFeatures { - if x != nil { - return x.FeatureName - } - return DataplaneFeatures_DATAPLANE_FEATURES_UNSPECIFIED -} - -func (x *DataplaneFeatureSupport) GetSupported() bool { - if x != nil { - return x.Supported - } - return false -} - -type GetSupportedDataplaneFeaturesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SupportedDataplaneFeatures []*DataplaneFeatureSupport `protobuf:"bytes,1,rep,name=supported_dataplane_features,json=supportedDataplaneFeatures,proto3" json:"supported_dataplane_features,omitempty"` -} - -func (x *GetSupportedDataplaneFeaturesResponse) Reset() { - *x = GetSupportedDataplaneFeaturesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetSupportedDataplaneFeaturesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetSupportedDataplaneFeaturesResponse) ProtoMessage() {} - -func (x *GetSupportedDataplaneFeaturesResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetSupportedDataplaneFeaturesResponse.ProtoReflect.Descriptor instead. -func (*GetSupportedDataplaneFeaturesResponse) Descriptor() ([]byte, []int) { - return file_proto_public_pbdataplane_dataplane_proto_rawDescGZIP(), []int{2} -} - -func (x *GetSupportedDataplaneFeaturesResponse) GetSupportedDataplaneFeatures() []*DataplaneFeatureSupport { - if x != nil { - return x.SupportedDataplaneFeatures - } - return nil -} - -type GetEnvoyBootstrapParamsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to NodeSpec: - // *GetEnvoyBootstrapParamsRequest_NodeId - // *GetEnvoyBootstrapParamsRequest_NodeName - NodeSpec isGetEnvoyBootstrapParamsRequest_NodeSpec `protobuf_oneof:"node_spec"` - // The proxy service ID - ServiceId string `protobuf:"bytes,3,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` - Partition string `protobuf:"bytes,4,opt,name=partition,proto3" json:"partition,omitempty"` - Namespace string `protobuf:"bytes,5,opt,name=namespace,proto3" json:"namespace,omitempty"` -} - -func (x *GetEnvoyBootstrapParamsRequest) Reset() { - *x = GetEnvoyBootstrapParamsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetEnvoyBootstrapParamsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEnvoyBootstrapParamsRequest) ProtoMessage() {} - -func (x *GetEnvoyBootstrapParamsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEnvoyBootstrapParamsRequest.ProtoReflect.Descriptor instead. -func (*GetEnvoyBootstrapParamsRequest) Descriptor() ([]byte, []int) { - return file_proto_public_pbdataplane_dataplane_proto_rawDescGZIP(), []int{3} -} - -func (m *GetEnvoyBootstrapParamsRequest) GetNodeSpec() isGetEnvoyBootstrapParamsRequest_NodeSpec { - if m != nil { - return m.NodeSpec - } - return nil -} - -func (x *GetEnvoyBootstrapParamsRequest) GetNodeId() string { - if x, ok := x.GetNodeSpec().(*GetEnvoyBootstrapParamsRequest_NodeId); ok { - return x.NodeId - } - return "" -} - -func (x *GetEnvoyBootstrapParamsRequest) GetNodeName() string { - if x, ok := x.GetNodeSpec().(*GetEnvoyBootstrapParamsRequest_NodeName); ok { - return x.NodeName - } - return "" -} - -func (x *GetEnvoyBootstrapParamsRequest) GetServiceId() string { - if x != nil { - return x.ServiceId - } - return "" -} - -func (x *GetEnvoyBootstrapParamsRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *GetEnvoyBootstrapParamsRequest) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -type isGetEnvoyBootstrapParamsRequest_NodeSpec interface { - isGetEnvoyBootstrapParamsRequest_NodeSpec() -} - -type GetEnvoyBootstrapParamsRequest_NodeId struct { - NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3,oneof"` -} - -type GetEnvoyBootstrapParamsRequest_NodeName struct { - NodeName string `protobuf:"bytes,2,opt,name=node_name,json=nodeName,proto3,oneof"` -} - -func (*GetEnvoyBootstrapParamsRequest_NodeId) isGetEnvoyBootstrapParamsRequest_NodeSpec() {} - -func (*GetEnvoyBootstrapParamsRequest_NodeName) isGetEnvoyBootstrapParamsRequest_NodeSpec() {} - -type GetEnvoyBootstrapParamsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServiceKind ServiceKind `protobuf:"varint,1,opt,name=service_kind,json=serviceKind,proto3,enum=dataplane.ServiceKind" json:"service_kind,omitempty"` - // The destination service name - Service string `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"` - Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` - Partition string `protobuf:"bytes,4,opt,name=partition,proto3" json:"partition,omitempty"` - Datacenter string `protobuf:"bytes,5,opt,name=datacenter,proto3" json:"datacenter,omitempty"` - Config *structpb.Struct `protobuf:"bytes,6,opt,name=config,proto3" json:"config,omitempty"` -} - -func (x *GetEnvoyBootstrapParamsResponse) Reset() { - *x = GetEnvoyBootstrapParamsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetEnvoyBootstrapParamsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEnvoyBootstrapParamsResponse) ProtoMessage() {} - -func (x *GetEnvoyBootstrapParamsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbdataplane_dataplane_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEnvoyBootstrapParamsResponse.ProtoReflect.Descriptor instead. -func (*GetEnvoyBootstrapParamsResponse) Descriptor() ([]byte, []int) { - return file_proto_public_pbdataplane_dataplane_proto_rawDescGZIP(), []int{4} -} - -func (x *GetEnvoyBootstrapParamsResponse) GetServiceKind() ServiceKind { - if x != nil { - return x.ServiceKind - } - return ServiceKind_SERVICE_KIND_UNSPECIFIED -} - -func (x *GetEnvoyBootstrapParamsResponse) GetService() string { - if x != nil { - return x.Service - } - return "" -} - -func (x *GetEnvoyBootstrapParamsResponse) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -func (x *GetEnvoyBootstrapParamsResponse) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *GetEnvoyBootstrapParamsResponse) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -func (x *GetEnvoyBootstrapParamsResponse) GetConfig() *structpb.Struct { - if x != nil { - return x.Config - } - return nil -} - -var File_proto_public_pbdataplane_dataplane_proto protoreflect.FileDescriptor - -var file_proto_public_pbdataplane_dataplane_proto_rawDesc = []byte{ - 0x0a, 0x28, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, - 0x62, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x64, 0x61, 0x74, 0x61, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x26, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x78, 0x0a, 0x17, 0x44, - 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x3f, 0x0a, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x64, 0x22, 0x8d, 0x01, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x64, 0x0a, 0x1c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x1a, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, - 0x6f, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6e, 0x6f, 0x64, - 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x0b, 0x0a, - 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x22, 0x83, 0x02, 0x0a, 0x1f, 0x47, - 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, - 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0b, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, - 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2a, 0xc7, 0x01, 0x0a, 0x11, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x41, 0x54, 0x41, 0x50, 0x4c, - 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x44, 0x41, - 0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, - 0x5f, 0x57, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x53, 0x10, 0x01, - 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x41, 0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x5f, 0x46, 0x45, - 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x45, 0x44, 0x47, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, - 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x4d, 0x45, - 0x4e, 0x54, 0x10, 0x02, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x41, 0x54, 0x41, 0x50, 0x4c, 0x41, 0x4e, - 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x45, 0x4e, 0x56, 0x4f, 0x59, - 0x5f, 0x42, 0x4f, 0x4f, 0x54, 0x53, 0x54, 0x52, 0x41, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x2a, 0xcc, 0x01, 0x0a, 0x0b, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x45, - 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x52, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x49, 0x43, 0x41, 0x4c, - 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, - 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x48, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, - 0x03, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, - 0x44, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x47, 0x41, - 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x45, 0x52, 0x56, 0x49, - 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x5f, - 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x05, 0x32, 0x8d, 0x02, 0x0a, 0x10, 0x44, 0x61, - 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x84, - 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, - 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x12, 0x2f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, - 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x6f, 0x79, - 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x99, 0x01, 0x0a, 0x0d, 0x63, 0x6f, - 0x6d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x42, 0x0e, 0x44, 0x61, 0x74, - 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, - 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0xa2, 0x02, 0x03, 0x44, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x44, 0x61, 0x74, 0x61, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0xca, 0x02, 0x09, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0xe2, 0x02, 0x15, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x44, 0x61, 0x74, 0x61, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_proto_public_pbdataplane_dataplane_proto_rawDescOnce sync.Once - file_proto_public_pbdataplane_dataplane_proto_rawDescData = file_proto_public_pbdataplane_dataplane_proto_rawDesc -) - -func file_proto_public_pbdataplane_dataplane_proto_rawDescGZIP() []byte { - file_proto_public_pbdataplane_dataplane_proto_rawDescOnce.Do(func() { - file_proto_public_pbdataplane_dataplane_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_public_pbdataplane_dataplane_proto_rawDescData) - }) - return file_proto_public_pbdataplane_dataplane_proto_rawDescData -} - -var file_proto_public_pbdataplane_dataplane_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_proto_public_pbdataplane_dataplane_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_proto_public_pbdataplane_dataplane_proto_goTypes = []interface{}{ - (DataplaneFeatures)(0), // 0: dataplane.DataplaneFeatures - (ServiceKind)(0), // 1: dataplane.ServiceKind - (*GetSupportedDataplaneFeaturesRequest)(nil), // 2: dataplane.GetSupportedDataplaneFeaturesRequest - (*DataplaneFeatureSupport)(nil), // 3: dataplane.DataplaneFeatureSupport - (*GetSupportedDataplaneFeaturesResponse)(nil), // 4: dataplane.GetSupportedDataplaneFeaturesResponse - (*GetEnvoyBootstrapParamsRequest)(nil), // 5: dataplane.GetEnvoyBootstrapParamsRequest - (*GetEnvoyBootstrapParamsResponse)(nil), // 6: dataplane.GetEnvoyBootstrapParamsResponse - (*structpb.Struct)(nil), // 7: google.protobuf.Struct -} -var file_proto_public_pbdataplane_dataplane_proto_depIdxs = []int32{ - 0, // 0: dataplane.DataplaneFeatureSupport.feature_name:type_name -> dataplane.DataplaneFeatures - 3, // 1: dataplane.GetSupportedDataplaneFeaturesResponse.supported_dataplane_features:type_name -> dataplane.DataplaneFeatureSupport - 1, // 2: dataplane.GetEnvoyBootstrapParamsResponse.service_kind:type_name -> dataplane.ServiceKind - 7, // 3: dataplane.GetEnvoyBootstrapParamsResponse.config:type_name -> google.protobuf.Struct - 2, // 4: dataplane.DataplaneService.GetSupportedDataplaneFeatures:input_type -> dataplane.GetSupportedDataplaneFeaturesRequest - 5, // 5: dataplane.DataplaneService.GetEnvoyBootstrapParams:input_type -> dataplane.GetEnvoyBootstrapParamsRequest - 4, // 6: dataplane.DataplaneService.GetSupportedDataplaneFeatures:output_type -> dataplane.GetSupportedDataplaneFeaturesResponse - 6, // 7: dataplane.DataplaneService.GetEnvoyBootstrapParams:output_type -> dataplane.GetEnvoyBootstrapParamsResponse - 6, // [6:8] is the sub-list for method output_type - 4, // [4:6] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_proto_public_pbdataplane_dataplane_proto_init() } -func file_proto_public_pbdataplane_dataplane_proto_init() { - if File_proto_public_pbdataplane_dataplane_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_proto_public_pbdataplane_dataplane_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSupportedDataplaneFeaturesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbdataplane_dataplane_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataplaneFeatureSupport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbdataplane_dataplane_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSupportedDataplaneFeaturesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbdataplane_dataplane_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEnvoyBootstrapParamsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbdataplane_dataplane_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEnvoyBootstrapParamsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_proto_public_pbdataplane_dataplane_proto_msgTypes[3].OneofWrappers = []interface{}{ - (*GetEnvoyBootstrapParamsRequest_NodeId)(nil), - (*GetEnvoyBootstrapParamsRequest_NodeName)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_public_pbdataplane_dataplane_proto_rawDesc, - NumEnums: 2, - NumMessages: 5, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_proto_public_pbdataplane_dataplane_proto_goTypes, - DependencyIndexes: file_proto_public_pbdataplane_dataplane_proto_depIdxs, - EnumInfos: file_proto_public_pbdataplane_dataplane_proto_enumTypes, - MessageInfos: file_proto_public_pbdataplane_dataplane_proto_msgTypes, - }.Build() - File_proto_public_pbdataplane_dataplane_proto = out.File - file_proto_public_pbdataplane_dataplane_proto_rawDesc = nil - file_proto_public_pbdataplane_dataplane_proto_goTypes = nil - file_proto_public_pbdataplane_dataplane_proto_depIdxs = nil -} diff --git a/proto-public/pbdataplane/dataplane.proto b/proto-public/pbdataplane/dataplane.proto deleted file mode 100644 index f3ac2c2ba6da5..0000000000000 --- a/proto-public/pbdataplane/dataplane.proto +++ /dev/null @@ -1,83 +0,0 @@ -// Package dataplane provides a service on Consul servers for the Consul Dataplane - -syntax = "proto3"; - -package dataplane; - -import "google/protobuf/struct.proto"; - -message GetSupportedDataplaneFeaturesRequest {} - -enum DataplaneFeatures { - DATAPLANE_FEATURES_UNSPECIFIED = 0; - DATAPLANE_FEATURES_WATCH_SERVERS = 1; - DATAPLANE_FEATURES_EDGE_CERTIFICATE_MANAGEMENT = 2; - DATAPLANE_FEATURES_ENVOY_BOOTSTRAP_CONFIGURATION = 3; -} - -message DataplaneFeatureSupport { - DataplaneFeatures feature_name = 1; - bool supported = 2; -} - -message GetSupportedDataplaneFeaturesResponse { - repeated DataplaneFeatureSupport supported_dataplane_features = 1; -} - -message GetEnvoyBootstrapParamsRequest { - oneof node_spec { - string node_id = 1; - string node_name = 2; - } - // The proxy service ID - string service_id = 3; - string partition = 4; - string namespace = 5; -} - -enum ServiceKind { - // ServiceKind UNSPECIFIED is a sentinel value for when a request - // did not specify a service kind. This will be treated the same - // as if TYPICAL was explicitly used. - SERVICE_KIND_UNSPECIFIED = 0; - - // ServiceKind Typical is a typical, classic Consul service. This is - // represented by the absence of a value. This was chosen for ease of - // backwards compatibility: existing services in the catalog would - // default to the typical service. - SERVICE_KIND_TYPICAL = 1; - - // ServiceKind Connect Proxy is a proxy for the Connect feature. This - // service proxies another service within Consul and speaks the connect - // protocol. - SERVICE_KIND_CONNECT_PROXY = 2; - - // ServiceKind Mesh Gateway is a Mesh Gateway for the Connect feature. This - // service will proxy connections based off the SNI header set by other - // connect proxies. - SERVICE_KIND_MESH_GATEWAY = 3; - - // ServiceKind Terminating Gateway is a Terminating Gateway for the Connect - // feature. This service will proxy connections to services outside the mesh. - SERVICE_KIND_TERMINATING_GATEWAY = 4; - - // ServiceKind Ingress Gateway is an Ingress Gateway for the Connect feature. - // This service will ingress connections into the service mesh. - SERVICE_KIND_INGRESS_GATEWAY = 5; -} - -message GetEnvoyBootstrapParamsResponse { - ServiceKind service_kind = 1; - // The destination service name - string service = 2; - string namespace = 3; - string partition = 4; - string datacenter = 5; - google.protobuf.Struct config = 6; -} - -service DataplaneService { - rpc GetSupportedDataplaneFeatures(GetSupportedDataplaneFeaturesRequest) returns (GetSupportedDataplaneFeaturesResponse) {} - - rpc GetEnvoyBootstrapParams(GetEnvoyBootstrapParamsRequest) returns (GetEnvoyBootstrapParamsResponse) {} -} diff --git a/proto-public/pbdataplane/dataplane_grpc.pb.go b/proto-public/pbdataplane/dataplane_grpc.pb.go deleted file mode 100644 index 56ceed00087c1..0000000000000 --- a/proto-public/pbdataplane/dataplane_grpc.pb.go +++ /dev/null @@ -1,139 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc (unknown) -// source: proto-public/pbdataplane/dataplane.proto - -package pbdataplane - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -// DataplaneServiceClient is the client API for DataplaneService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type DataplaneServiceClient interface { - GetSupportedDataplaneFeatures(ctx context.Context, in *GetSupportedDataplaneFeaturesRequest, opts ...grpc.CallOption) (*GetSupportedDataplaneFeaturesResponse, error) - GetEnvoyBootstrapParams(ctx context.Context, in *GetEnvoyBootstrapParamsRequest, opts ...grpc.CallOption) (*GetEnvoyBootstrapParamsResponse, error) -} - -type dataplaneServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewDataplaneServiceClient(cc grpc.ClientConnInterface) DataplaneServiceClient { - return &dataplaneServiceClient{cc} -} - -func (c *dataplaneServiceClient) GetSupportedDataplaneFeatures(ctx context.Context, in *GetSupportedDataplaneFeaturesRequest, opts ...grpc.CallOption) (*GetSupportedDataplaneFeaturesResponse, error) { - out := new(GetSupportedDataplaneFeaturesResponse) - err := c.cc.Invoke(ctx, "/dataplane.DataplaneService/GetSupportedDataplaneFeatures", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *dataplaneServiceClient) GetEnvoyBootstrapParams(ctx context.Context, in *GetEnvoyBootstrapParamsRequest, opts ...grpc.CallOption) (*GetEnvoyBootstrapParamsResponse, error) { - out := new(GetEnvoyBootstrapParamsResponse) - err := c.cc.Invoke(ctx, "/dataplane.DataplaneService/GetEnvoyBootstrapParams", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// DataplaneServiceServer is the server API for DataplaneService service. -// All implementations should embed UnimplementedDataplaneServiceServer -// for forward compatibility -type DataplaneServiceServer interface { - GetSupportedDataplaneFeatures(context.Context, *GetSupportedDataplaneFeaturesRequest) (*GetSupportedDataplaneFeaturesResponse, error) - GetEnvoyBootstrapParams(context.Context, *GetEnvoyBootstrapParamsRequest) (*GetEnvoyBootstrapParamsResponse, error) -} - -// UnimplementedDataplaneServiceServer should be embedded to have forward compatible implementations. -type UnimplementedDataplaneServiceServer struct { -} - -func (UnimplementedDataplaneServiceServer) GetSupportedDataplaneFeatures(context.Context, *GetSupportedDataplaneFeaturesRequest) (*GetSupportedDataplaneFeaturesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetSupportedDataplaneFeatures not implemented") -} -func (UnimplementedDataplaneServiceServer) GetEnvoyBootstrapParams(context.Context, *GetEnvoyBootstrapParamsRequest) (*GetEnvoyBootstrapParamsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetEnvoyBootstrapParams not implemented") -} - -// UnsafeDataplaneServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to DataplaneServiceServer will -// result in compilation errors. -type UnsafeDataplaneServiceServer interface { - mustEmbedUnimplementedDataplaneServiceServer() -} - -func RegisterDataplaneServiceServer(s grpc.ServiceRegistrar, srv DataplaneServiceServer) { - s.RegisterService(&DataplaneService_ServiceDesc, srv) -} - -func _DataplaneService_GetSupportedDataplaneFeatures_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetSupportedDataplaneFeaturesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DataplaneServiceServer).GetSupportedDataplaneFeatures(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/dataplane.DataplaneService/GetSupportedDataplaneFeatures", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DataplaneServiceServer).GetSupportedDataplaneFeatures(ctx, req.(*GetSupportedDataplaneFeaturesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _DataplaneService_GetEnvoyBootstrapParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetEnvoyBootstrapParamsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(DataplaneServiceServer).GetEnvoyBootstrapParams(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/dataplane.DataplaneService/GetEnvoyBootstrapParams", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(DataplaneServiceServer).GetEnvoyBootstrapParams(ctx, req.(*GetEnvoyBootstrapParamsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// DataplaneService_ServiceDesc is the grpc.ServiceDesc for DataplaneService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var DataplaneService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "dataplane.DataplaneService", - HandlerType: (*DataplaneServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetSupportedDataplaneFeatures", - Handler: _DataplaneService_GetSupportedDataplaneFeatures_Handler, - }, - { - MethodName: "GetEnvoyBootstrapParams", - Handler: _DataplaneService_GetEnvoyBootstrapParams_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "proto-public/pbdataplane/dataplane.proto", -} diff --git a/proto-public/pbserverdiscovery/serverdiscovery.pb.binary.go b/proto-public/pbserverdiscovery/serverdiscovery.pb.binary.go deleted file mode 100644 index a2e291967a757..0000000000000 --- a/proto-public/pbserverdiscovery/serverdiscovery.pb.binary.go +++ /dev/null @@ -1,38 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: proto-public/pbserverdiscovery/serverdiscovery.proto - -package pbserverdiscovery - -import ( - "github.com/golang/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *WatchServersRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *WatchServersRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *WatchServersResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *WatchServersResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *Server) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *Server) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto-public/pbserverdiscovery/serverdiscovery.pb.go b/proto-public/pbserverdiscovery/serverdiscovery.pb.go deleted file mode 100644 index b9db1db2ed32f..0000000000000 --- a/proto-public/pbserverdiscovery/serverdiscovery.pb.go +++ /dev/null @@ -1,322 +0,0 @@ -// Package serverdiscovery provides a service on Consul servers to discover the set of servers -// currently able to handle incoming requests. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) -// source: proto-public/pbserverdiscovery/serverdiscovery.proto - -package pbserverdiscovery - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type WatchServersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Wan being set to true will cause WAN addresses to be sent in the response - // instead of the LAN addresses which are the default - Wan bool `protobuf:"varint,1,opt,name=wan,proto3" json:"wan,omitempty"` -} - -func (x *WatchServersRequest) Reset() { - *x = WatchServersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WatchServersRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WatchServersRequest) ProtoMessage() {} - -func (x *WatchServersRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WatchServersRequest.ProtoReflect.Descriptor instead. -func (*WatchServersRequest) Descriptor() ([]byte, []int) { - return file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescGZIP(), []int{0} -} - -func (x *WatchServersRequest) GetWan() bool { - if x != nil { - return x.Wan - } - return false -} - -type WatchServersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Servers is the list of server address information. - Servers []*Server `protobuf:"bytes,1,rep,name=servers,proto3" json:"servers,omitempty"` -} - -func (x *WatchServersResponse) Reset() { - *x = WatchServersResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WatchServersResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WatchServersResponse) ProtoMessage() {} - -func (x *WatchServersResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WatchServersResponse.ProtoReflect.Descriptor instead. -func (*WatchServersResponse) Descriptor() ([]byte, []int) { - return file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescGZIP(), []int{1} -} - -func (x *WatchServersResponse) GetServers() []*Server { - if x != nil { - return x.Servers - } - return nil -} - -type Server struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the unique string identifying this server for all time. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // address on the network of the server - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` - // the consul version of the server - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` -} - -func (x *Server) Reset() { - *x = Server{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Server) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Server) ProtoMessage() {} - -func (x *Server) ProtoReflect() protoreflect.Message { - mi := &file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Server.ProtoReflect.Descriptor instead. -func (*Server) Descriptor() ([]byte, []int) { - return file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescGZIP(), []int{2} -} - -func (x *Server) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Server) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *Server) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -var File_proto_public_pbserverdiscovery_serverdiscovery_proto protoreflect.FileDescriptor - -var file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDesc = []byte{ - 0x0a, 0x34, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, - 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x22, 0x27, 0x0a, 0x13, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x77, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x77, 0x61, 0x6e, - 0x22, 0x49, 0x0a, 0x14, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x22, 0x4c, 0x0a, 0x06, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x79, 0x0a, 0x16, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x73, 0x12, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x64, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x57, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x30, 0x01, 0x42, 0xc3, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x42, 0x14, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, - 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0xca, 0x02, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0xe2, 0x02, 0x1b, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescOnce sync.Once - file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescData = file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDesc -) - -func file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescGZIP() []byte { - file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescOnce.Do(func() { - file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescData) - }) - return file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDescData -} - -var file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_proto_public_pbserverdiscovery_serverdiscovery_proto_goTypes = []interface{}{ - (*WatchServersRequest)(nil), // 0: serverdiscovery.WatchServersRequest - (*WatchServersResponse)(nil), // 1: serverdiscovery.WatchServersResponse - (*Server)(nil), // 2: serverdiscovery.Server -} -var file_proto_public_pbserverdiscovery_serverdiscovery_proto_depIdxs = []int32{ - 2, // 0: serverdiscovery.WatchServersResponse.servers:type_name -> serverdiscovery.Server - 0, // 1: serverdiscovery.ServerDiscoveryService.WatchServers:input_type -> serverdiscovery.WatchServersRequest - 1, // 2: serverdiscovery.ServerDiscoveryService.WatchServers:output_type -> serverdiscovery.WatchServersResponse - 2, // [2:3] is the sub-list for method output_type - 1, // [1:2] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_proto_public_pbserverdiscovery_serverdiscovery_proto_init() } -func file_proto_public_pbserverdiscovery_serverdiscovery_proto_init() { - if File_proto_public_pbserverdiscovery_serverdiscovery_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WatchServersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WatchServersResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Server); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_proto_public_pbserverdiscovery_serverdiscovery_proto_goTypes, - DependencyIndexes: file_proto_public_pbserverdiscovery_serverdiscovery_proto_depIdxs, - MessageInfos: file_proto_public_pbserverdiscovery_serverdiscovery_proto_msgTypes, - }.Build() - File_proto_public_pbserverdiscovery_serverdiscovery_proto = out.File - file_proto_public_pbserverdiscovery_serverdiscovery_proto_rawDesc = nil - file_proto_public_pbserverdiscovery_serverdiscovery_proto_goTypes = nil - file_proto_public_pbserverdiscovery_serverdiscovery_proto_depIdxs = nil -} diff --git a/proto-public/pbserverdiscovery/serverdiscovery.proto b/proto-public/pbserverdiscovery/serverdiscovery.proto deleted file mode 100644 index 4af307e2f4d69..0000000000000 --- a/proto-public/pbserverdiscovery/serverdiscovery.proto +++ /dev/null @@ -1,34 +0,0 @@ -// Package serverdiscovery provides a service on Consul servers to discover the set of servers -// currently able to handle incoming requests. - -syntax = "proto3"; - -package serverdiscovery; - -service ServerDiscoveryService { - // WatchServers will stream back sets of ready servers as they change such as - // when new servers are added or older ones removed. A ready server is one that - // should be considered ready for sending general RPC requests towards that would - // catalog queries, xDS proxy configurations and similar services. - rpc WatchServers(WatchServersRequest) returns (stream WatchServersResponse) {} -} - -message WatchServersRequest { - // Wan being set to true will cause WAN addresses to be sent in the response - // instead of the LAN addresses which are the default - bool wan = 1; -} - -message WatchServersResponse { - // Servers is the list of server address information. - repeated Server servers = 1; -} - -message Server { - // id is the unique string identifying this server for all time. - string id = 1; - // address on the network of the server - string address = 2; - // the consul version of the server - string version = 3; -} diff --git a/proto-public/pbserverdiscovery/serverdiscovery_grpc.pb.go b/proto-public/pbserverdiscovery/serverdiscovery_grpc.pb.go deleted file mode 100644 index 57718577d5fde..0000000000000 --- a/proto-public/pbserverdiscovery/serverdiscovery_grpc.pb.go +++ /dev/null @@ -1,138 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc (unknown) -// source: proto-public/pbserverdiscovery/serverdiscovery.proto - -package pbserverdiscovery - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -// ServerDiscoveryServiceClient is the client API for ServerDiscoveryService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type ServerDiscoveryServiceClient interface { - // WatchServers will stream back sets of ready servers as they change such as - // when new servers are added or older ones removed. A ready server is one that - // should be considered ready for sending general RPC requests towards that would - // catalog queries, xDS proxy configurations and similar services. - WatchServers(ctx context.Context, in *WatchServersRequest, opts ...grpc.CallOption) (ServerDiscoveryService_WatchServersClient, error) -} - -type serverDiscoveryServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewServerDiscoveryServiceClient(cc grpc.ClientConnInterface) ServerDiscoveryServiceClient { - return &serverDiscoveryServiceClient{cc} -} - -func (c *serverDiscoveryServiceClient) WatchServers(ctx context.Context, in *WatchServersRequest, opts ...grpc.CallOption) (ServerDiscoveryService_WatchServersClient, error) { - stream, err := c.cc.NewStream(ctx, &ServerDiscoveryService_ServiceDesc.Streams[0], "/serverdiscovery.ServerDiscoveryService/WatchServers", opts...) - if err != nil { - return nil, err - } - x := &serverDiscoveryServiceWatchServersClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type ServerDiscoveryService_WatchServersClient interface { - Recv() (*WatchServersResponse, error) - grpc.ClientStream -} - -type serverDiscoveryServiceWatchServersClient struct { - grpc.ClientStream -} - -func (x *serverDiscoveryServiceWatchServersClient) Recv() (*WatchServersResponse, error) { - m := new(WatchServersResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// ServerDiscoveryServiceServer is the server API for ServerDiscoveryService service. -// All implementations should embed UnimplementedServerDiscoveryServiceServer -// for forward compatibility -type ServerDiscoveryServiceServer interface { - // WatchServers will stream back sets of ready servers as they change such as - // when new servers are added or older ones removed. A ready server is one that - // should be considered ready for sending general RPC requests towards that would - // catalog queries, xDS proxy configurations and similar services. - WatchServers(*WatchServersRequest, ServerDiscoveryService_WatchServersServer) error -} - -// UnimplementedServerDiscoveryServiceServer should be embedded to have forward compatible implementations. -type UnimplementedServerDiscoveryServiceServer struct { -} - -func (UnimplementedServerDiscoveryServiceServer) WatchServers(*WatchServersRequest, ServerDiscoveryService_WatchServersServer) error { - return status.Errorf(codes.Unimplemented, "method WatchServers not implemented") -} - -// UnsafeServerDiscoveryServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to ServerDiscoveryServiceServer will -// result in compilation errors. -type UnsafeServerDiscoveryServiceServer interface { - mustEmbedUnimplementedServerDiscoveryServiceServer() -} - -func RegisterServerDiscoveryServiceServer(s grpc.ServiceRegistrar, srv ServerDiscoveryServiceServer) { - s.RegisterService(&ServerDiscoveryService_ServiceDesc, srv) -} - -func _ServerDiscoveryService_WatchServers_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(WatchServersRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(ServerDiscoveryServiceServer).WatchServers(m, &serverDiscoveryServiceWatchServersServer{stream}) -} - -type ServerDiscoveryService_WatchServersServer interface { - Send(*WatchServersResponse) error - grpc.ServerStream -} - -type serverDiscoveryServiceWatchServersServer struct { - grpc.ServerStream -} - -func (x *serverDiscoveryServiceWatchServersServer) Send(m *WatchServersResponse) error { - return x.ServerStream.SendMsg(m) -} - -// ServerDiscoveryService_ServiceDesc is the grpc.ServiceDesc for ServerDiscoveryService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var ServerDiscoveryService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "serverdiscovery.ServerDiscoveryService", - HandlerType: (*ServerDiscoveryServiceServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{ - { - StreamName: "WatchServers", - Handler: _ServerDiscoveryService_WatchServers_Handler, - ServerStreams: true, - }, - }, - Metadata: "proto-public/pbserverdiscovery/serverdiscovery.proto", -} diff --git a/proto/buf.gen.yaml b/proto/buf.gen.yaml deleted file mode 100644 index 7796e1a7b90d1..0000000000000 --- a/proto/buf.gen.yaml +++ /dev/null @@ -1,23 +0,0 @@ -version: v1 -managed: - enabled: true - go_package_prefix: - # this is not github.com/hashicorp/consul/proto because we are going - # to execute buf generate from the top level directory so that the filepaths - # contain the full path within the repo. This avoids registration conflicts - # in protocolbuffers/protobuf-go when Consul starts. Those conflicts would - # have been due to a protobuf file being registered to a global registry - # using a relative file name. - default: github.com/hashicorp/consul -plugins: - - name: go - out: . - opt: - - paths=source_relative - - name: go-grpc - out: . - opt: - - paths=source_relative - - require_unimplemented_servers=false - - name: go-binary - out: . diff --git a/proto/buf.yaml b/proto/buf.yaml deleted file mode 100644 index d0218e3f8eadb..0000000000000 --- a/proto/buf.yaml +++ /dev/null @@ -1,23 +0,0 @@ -version: v1 -lint: - use: - - DEFAULT - allow_comment_ignores: true - except: - # we want to enable our Go packages to have a pb prefix to make goimports more - # intelligently handle fixing up imports and hopefully getting it right. - - PACKAGE_DIRECTORY_MATCH - # for internal protos we don't think we need proto versioning suffix for now - # also it would break the subscribe service if we change the proto package - - PACKAGE_VERSION_SUFFIX - - # TODO - we should be able to remove these once we address the warnings - - FIELD_LOWER_SNAKE_CASE - - ENUM_VALUE_UPPER_SNAKE_CASE - - ENUM_ZERO_VALUE_SUFFIX - - ONEOF_LOWER_SNAKE_CASE - - ENUM_VALUE_PREFIX - service_suffix: "" -breaking: - use: - - FILE diff --git a/proto/pbacl/acl.pb.go b/proto/pbacl/acl.pb.go index 435a298b024b4..b3c4e68a7b889 100644 --- a/proto/pbacl/acl.pb.go +++ b/proto/pbacl/acl.pb.go @@ -1,12 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto/pbacl/acl.proto package pbacl import ( + proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -20,6 +21,10 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + type ACLLink struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -83,14 +88,10 @@ var file_proto_pbacl_acl_proto_rawDesc = []byte{ 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x63, 0x6c, 0x22, 0x2d, 0x0a, 0x07, 0x41, 0x43, 0x4c, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x68, 0x0a, 0x07, 0x63, - 0x6f, 0x6d, 0x2e, 0x61, 0x63, 0x6c, 0x42, 0x08, 0x41, 0x63, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x61, 0x63, 0x6c, 0xa2, 0x02, 0x03, 0x41, 0x58, - 0x58, 0xaa, 0x02, 0x03, 0x41, 0x63, 0x6c, 0xca, 0x02, 0x03, 0x41, 0x63, 0x6c, 0xe2, 0x02, 0x0f, - 0x41, 0x63, 0x6c, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x03, 0x41, 0x63, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x29, 0x5a, 0x27, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, + 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x70, 0x62, 0x61, 0x63, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/pbacl/acl.proto b/proto/pbacl/acl.proto index 252d7bb51c022..58fa65ae12e5a 100644 --- a/proto/pbacl/acl.proto +++ b/proto/pbacl/acl.proto @@ -2,8 +2,10 @@ syntax = "proto3"; package acl; +option go_package = "github.com/hashicorp/consul/proto/pbacl"; + message ACLLink { - string ID = 1; - // @gotags: hash:ignore-" - string Name = 2; + string ID = 1; + // @gotags: hash:ignore-" + string Name = 2; } diff --git a/proto/pbautoconf/auto_config.pb.go b/proto/pbautoconf/auto_config.pb.go index 41d2901e64301..4e4a60e1cfa91 100644 --- a/proto/pbautoconf/auto_config.pb.go +++ b/proto/pbautoconf/auto_config.pb.go @@ -1,12 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto/pbautoconf/auto_config.proto package pbautoconf import ( + proto "github.com/golang/protobuf/proto" pbconfig "github.com/hashicorp/consul/proto/pbconfig" pbconnect "github.com/hashicorp/consul/proto/pbconnect" protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -22,6 +23,10 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + // AutoConfigRequest is the data structure to be sent along with the // AutoConfig.InitialConfiguration RPC type AutoConfigRequest struct { @@ -244,15 +249,9 @@ var file_proto_pbautoconf_auto_config_proto_rawDesc = []byte{ 0x63, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x45, 0x78, 0x74, 0x72, 0x61, 0x43, 0x41, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x45, 0x78, 0x74, 0x72, 0x61, 0x43, 0x41, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x42, 0x8d, 0x01, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x2e, 0x61, - 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6e, 0x66, 0x42, 0x0f, 0x41, 0x75, 0x74, 0x6f, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, - 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, - 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6e, 0x66, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, - 0x08, 0x41, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6e, 0x66, 0xca, 0x02, 0x08, 0x41, 0x75, 0x74, 0x6f, - 0x63, 0x6f, 0x6e, 0x66, 0xe2, 0x02, 0x14, 0x41, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6e, 0x66, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x08, 0x41, 0x75, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, + 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6e, 0x66, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } diff --git a/proto/pbautoconf/auto_config.proto b/proto/pbautoconf/auto_config.proto index fc8d3cdefb14d..3a4db65756930 100644 --- a/proto/pbautoconf/auto_config.proto +++ b/proto/pbautoconf/auto_config.proto @@ -2,51 +2,53 @@ syntax = "proto3"; package autoconf; +option go_package = "github.com/hashicorp/consul/proto/pbautoconf"; + import "proto/pbconfig/config.proto"; import "proto/pbconnect/connect.proto"; // AutoConfigRequest is the data structure to be sent along with the // AutoConfig.InitialConfiguration RPC message AutoConfigRequest { - // Datacenter is the local datacenter name. This wont actually be set by clients - // but rather will be set by the servers to allow for forwarding to - // the leader. If it ever happens to be set and differs from the local datacenters - // name then an error should be returned. - string Datacenter = 1; + // Datacenter is the local datacenter name. This wont actually be set by clients + // but rather will be set by the servers to allow for forwarding to + // the leader. If it ever happens to be set and differs from the local datacenters + // name then an error should be returned. + string Datacenter = 1; - // Node is the node name that the requester would like to assume - // the identity of. - string Node = 2; + // Node is the node name that the requester would like to assume + // the identity of. + string Node = 2; - // Segment is the network segment that the requester would like to join - string Segment = 4; + // Segment is the network segment that the requester would like to join + string Segment = 4; - // Partition is the partition that the requester would like to join - string Partition = 8; + // Partition is the partition that the requester would like to join + string Partition = 8; - // JWT is a signed JSON Web Token used to authorize the request - string JWT = 5; + // JWT is a signed JSON Web Token used to authorize the request + string JWT = 5; - // ConsulToken is a Consul ACL token that the agent requesting the - // configuration already has. - string ConsulToken = 6; + // ConsulToken is a Consul ACL token that the agent requesting the + // configuration already has. + string ConsulToken = 6; - // CSR is a certificate signing request to be used when generating the - // agents TLS certificate - string CSR = 7; + // CSR is a certificate signing request to be used when generating the + // agents TLS certificate + string CSR = 7; } // AutoConfigResponse is the data structure sent in response to a AutoConfig.InitialConfiguration request message AutoConfigResponse { - // Config is the partial Consul configuration to inject into the agents own configuration - config.Config Config = 1; + // Config is the partial Consul configuration to inject into the agents own configuration + config.Config Config = 1; - // CARoots is the current list of Connect CA Roots - connect.CARoots CARoots = 2; - // Certificate is the TLS certificate issued for the agent - connect.IssuedCert Certificate = 3; + // CARoots is the current list of Connect CA Roots + connect.CARoots CARoots = 2; + // Certificate is the TLS certificate issued for the agent + connect.IssuedCert Certificate = 3; - // ExtraCACertificates holds non-Connect certificates that may be necessary - // to verify TLS connections with the Consul servers - repeated string ExtraCACertificates = 4; + // ExtraCACertificates holds non-Connect certificates that may be necessary + // to verify TLS connections with the Consul servers + repeated string ExtraCACertificates = 4; } diff --git a/proto/pbcommon/common.pb.go b/proto/pbcommon/common.pb.go index 7ccab873947e0..e67bf6139cc9c 100644 --- a/proto/pbcommon/common.pb.go +++ b/proto/pbcommon/common.pb.go @@ -1,12 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto/pbcommon/common.proto package pbcommon import ( + proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" @@ -21,6 +22,10 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + // RaftIndex is used to track the index used while creating // or modifying a given struct type. // @@ -664,15 +669,10 @@ var file_proto_pbcommon_common_proto_rawDesc = []byte{ 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x7d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x42, - 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2a, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, - 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x70, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x43, 0x58, 0x58, - 0xaa, 0x02, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x06, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0xe2, 0x02, 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/pbcommon/common.proto b/proto/pbcommon/common.proto index b4b47099e8c1d..e21b677f5b822 100644 --- a/proto/pbcommon/common.proto +++ b/proto/pbcommon/common.proto @@ -2,8 +2,11 @@ syntax = "proto3"; package common; +option go_package = "github.com/hashicorp/consul/proto/pbcommon"; + import "google/protobuf/duration.proto"; + // RaftIndex is used to track the index used while creating // or modifying a given struct type. // @@ -14,16 +17,16 @@ import "google/protobuf/duration.proto"; // name=Structs // ignore-fields=state,sizeCache,unknownFields message RaftIndex { - // @gotags: bexpr:"-" - uint64 CreateIndex = 1; - // @gotags: bexpr:"-" - uint64 ModifyIndex = 2; + // @gotags: bexpr:"-" + uint64 CreateIndex = 1; + // @gotags: bexpr:"-" + uint64 ModifyIndex = 2; } // TargetDatacenter is intended to be used within other messages used for RPC routing // amongst the various Consul datacenters message TargetDatacenter { - string Datacenter = 1; + string Datacenter = 1; } // mog annotation: @@ -33,9 +36,9 @@ message TargetDatacenter { // name=Structs // ignore-fields=state,sizeCache,unknownFields message WriteRequest { - // Token is the ACL token ID. If not provided, the 'anonymous' - // token is assumed for backwards compatibility. - string Token = 1; + // Token is the ACL token ID. If not provided, the 'anonymous' + // token is assumed for backwards compatibility. + string Token = 1; } // ReadRequest is a type that may be embedded into any requests for read @@ -45,14 +48,15 @@ message WriteRequest { // It is also similar to WriteRequest. It is a separate type so that in the // future we can introduce fields that may only be relevant for reads. message ReadRequest { - // Token is the ACL token ID. If not provided, the 'anonymous' - // token is assumed for backwards compatibility. - string Token = 1; + // Token is the ACL token ID. If not provided, the 'anonymous' + // token is assumed for backwards compatibility. + string Token = 1; - // RequireConsistent indicates that the request must be sent to the leader. - bool RequireConsistent = 2; + // RequireConsistent indicates that the request must be sent to the leader. + bool RequireConsistent = 2; } + // QueryOptions is used to specify various flags for read queries // // mog annotation: @@ -62,68 +66,68 @@ message ReadRequest { // name=Structs // ignore-fields=StaleIfError,AllowNotModifiedResponse,state,sizeCache,unknownFields message QueryOptions { - // Token is the ACL token ID. If not provided, the 'anonymous' - // token is assumed for backwards compatibility. - string Token = 1; - - // If set, wait until query exceeds given index. Must be provided - // with MaxQueryTime. - uint64 MinQueryIndex = 2; - - // Provided with MinQueryIndex to wait for change. - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration MaxQueryTime = 3; - - // If set, any follower can service the request. Results - // may be arbitrarily stale. - bool AllowStale = 4; - - // If set, the leader must verify leadership prior to - // servicing the request. Prevents a stale read. - bool RequireConsistent = 5; - - // If set, the local agent may respond with an arbitrarily stale locally - // cached response. The semantics differ from AllowStale since the agent may - // be entirely partitioned from the servers and still considered "healthy" by - // operators. Stale responses from Servers are also arbitrarily stale, but can - // provide additional bounds on the last contact time from the leader. It's - // expected that servers that are partitioned are noticed and replaced in a - // timely way by operators while the same may not be true for client agents. - bool UseCache = 6; - - // If set and AllowStale is true, will try first a stale - // read, and then will perform a consistent read if stale - // read is older than value. - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration MaxStaleDuration = 7; - - // MaxAge limits how old a cached value will be returned if UseCache is true. - // If there is a cached response that is older than the MaxAge, it is treated - // as a cache miss and a new fetch invoked. If the fetch fails, the error is - // returned. Clients that wish to allow for stale results on error can set - // StaleIfError to a longer duration to change this behavior. It is ignored - // if the endpoint supports background refresh caching. See - // https://www.consul.io/api/index.html#agent-caching for more details. - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration MaxAge = 8; - - // MustRevalidate forces the agent to fetch a fresh version of a cached - // resource or at least validate that the cached version is still fresh. It is - // implied by either max-age=0 or must-revalidate Cache-Control headers. It - // only makes sense when UseCache is true. We store it since MaxAge = 0 is the - // default unset value. - bool MustRevalidate = 9; - - // StaleIfError specifies how stale the client will accept a cached response - // if the servers are unavailable to fetch a fresh one. Only makes sense when - // UseCache is true and MaxAge is set to a lower, non-zero value. It is - // ignored if the endpoint supports background refresh caching. See - // https://www.consul.io/api/index.html#agent-caching for more details. - google.protobuf.Duration StaleIfError = 10; - - // Filter specifies the go-bexpr filter expression to be used for - // filtering the data prior to returning a response - string Filter = 11; + // Token is the ACL token ID. If not provided, the 'anonymous' + // token is assumed for backwards compatibility. + string Token = 1; + + // If set, wait until query exceeds given index. Must be provided + // with MaxQueryTime. + uint64 MinQueryIndex = 2; + + // Provided with MinQueryIndex to wait for change. + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration MaxQueryTime = 3; + + // If set, any follower can service the request. Results + // may be arbitrarily stale. + bool AllowStale = 4; + + // If set, the leader must verify leadership prior to + // servicing the request. Prevents a stale read. + bool RequireConsistent = 5; + + // If set, the local agent may respond with an arbitrarily stale locally + // cached response. The semantics differ from AllowStale since the agent may + // be entirely partitioned from the servers and still considered "healthy" by + // operators. Stale responses from Servers are also arbitrarily stale, but can + // provide additional bounds on the last contact time from the leader. It's + // expected that servers that are partitioned are noticed and replaced in a + // timely way by operators while the same may not be true for client agents. + bool UseCache = 6; + + // If set and AllowStale is true, will try first a stale + // read, and then will perform a consistent read if stale + // read is older than value. + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration MaxStaleDuration = 7; + + // MaxAge limits how old a cached value will be returned if UseCache is true. + // If there is a cached response that is older than the MaxAge, it is treated + // as a cache miss and a new fetch invoked. If the fetch fails, the error is + // returned. Clients that wish to allow for stale results on error can set + // StaleIfError to a longer duration to change this behavior. It is ignored + // if the endpoint supports background refresh caching. See + // https://www.consul.io/api/index.html#agent-caching for more details. + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration MaxAge = 8; + + // MustRevalidate forces the agent to fetch a fresh version of a cached + // resource or at least validate that the cached version is still fresh. It is + // implied by either max-age=0 or must-revalidate Cache-Control headers. It + // only makes sense when UseCache is true. We store it since MaxAge = 0 is the + // default unset value. + bool MustRevalidate = 9; + + // StaleIfError specifies how stale the client will accept a cached response + // if the servers are unavailable to fetch a fresh one. Only makes sense when + // UseCache is true and MaxAge is set to a lower, non-zero value. It is + // ignored if the endpoint supports background refresh caching. See + // https://www.consul.io/api/index.html#agent-caching for more details. + google.protobuf.Duration StaleIfError = 10; + + // Filter specifies the go-bexpr filter expression to be used for + // filtering the data prior to returning a response + string Filter = 11; } // QueryMeta allows a query response to include potentially @@ -135,38 +139,38 @@ message QueryOptions { // output=common.gen.go // name=Structs // ignore-fields=NotModified,Backend,state,sizeCache,unknownFields -message QueryMeta { - // This is the index associated with the read - uint64 Index = 1; - - // If AllowStale is used, this is time elapsed since - // last contact between the follower and leader. This - // can be used to gauge staleness. - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration LastContact = 2; - - // Used to indicate if there is a known leader node - bool KnownLeader = 3; - - // Consistencylevel returns the consistency used to serve the query - // Having `discovery_max_stale` on the agent can affect whether - // the request was served by a leader. - string ConsistencyLevel = 4; - - // Reserved for NotModified and Backend. - reserved 5, 6; - - // ResultsFilteredByACLs is true when some of the query's results were - // filtered out by enforcing ACLs. It may be false because nothing was - // removed, or because the endpoint does not yet support this flag. - bool ResultsFilteredByACLs = 7; +message QueryMeta { + // This is the index associated with the read + uint64 Index = 1; + + // If AllowStale is used, this is time elapsed since + // last contact between the follower and leader. This + // can be used to gauge staleness. + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration LastContact = 2; + + // Used to indicate if there is a known leader node + bool KnownLeader = 3; + + // Consistencylevel returns the consistency used to serve the query + // Having `discovery_max_stale` on the agent can affect whether + // the request was served by a leader. + string ConsistencyLevel = 4; + + // Reserved for NotModified and Backend. + reserved 5, 6; + + // ResultsFilteredByACLs is true when some of the query's results were + // filtered out by enforcing ACLs. It may be false because nothing was + // removed, or because the endpoint does not yet support this flag. + bool ResultsFilteredByACLs = 7; } // EnterpriseMeta contains metadata that is only used by the Enterprise version // of Consul. message EnterpriseMeta { - // Namespace in which the entity exists. - string Namespace = 1; - // Partition in which the entity exists. - string Partition = 2; + // Namespace in which the entity exists. + string Namespace = 1; + // Partition in which the entity exists. + string Partition = 2; } diff --git a/proto/pbconfig/config.pb.go b/proto/pbconfig/config.pb.go index aea729fe3250a..e7443fc3746fe 100644 --- a/proto/pbconfig/config.pb.go +++ b/proto/pbconfig/config.pb.go @@ -1,12 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto/pbconfig/config.proto package pbconfig import ( + proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -20,6 +21,10 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + type Config struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -791,15 +796,10 @@ var file_proto_pbconfig_config_proto_rawDesc = []byte{ 0x05, 0x49, 0x50, 0x53, 0x41, 0x4e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x49, 0x50, 0x53, 0x41, 0x4e, 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x4c, 0x53, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x4c, 0x53, 0x42, - 0x7d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x0b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2a, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, - 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0xa2, 0x02, 0x03, 0x43, 0x58, 0x58, 0xaa, 0x02, - 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0xca, 0x02, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0xe2, 0x02, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, + 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/pbconfig/config.proto b/proto/pbconfig/config.proto index eb54e7d435fbd..08a3fe5ecb084 100644 --- a/proto/pbconfig/config.proto +++ b/proto/pbconfig/config.proto @@ -2,72 +2,74 @@ syntax = "proto3"; package config; +option go_package = "github.com/hashicorp/consul/proto/pbconfig"; + message Config { - string Datacenter = 1; - string PrimaryDatacenter = 2; - string NodeName = 3; - string SegmentName = 4; - string Partition = 9; - ACL ACL = 5; - AutoEncrypt AutoEncrypt = 6; - Gossip Gossip = 7; - TLS TLS = 8; + string Datacenter = 1; + string PrimaryDatacenter = 2; + string NodeName = 3; + string SegmentName = 4; + string Partition = 9; + ACL ACL = 5; + AutoEncrypt AutoEncrypt = 6; + Gossip Gossip = 7; + TLS TLS = 8; } message Gossip { - GossipEncryption Encryption = 1; - repeated string RetryJoinLAN = 2; + GossipEncryption Encryption = 1; + repeated string RetryJoinLAN = 2; } message GossipEncryption { - string Key = 1; - bool VerifyIncoming = 2; - bool VerifyOutgoing = 3; + string Key = 1; + bool VerifyIncoming = 2; + bool VerifyOutgoing = 3; } message TLS { - bool VerifyOutgoing = 1; - bool VerifyServerHostname = 2; - string CipherSuites = 3; - string MinVersion = 4; - // Deprecated_PreferServerCipherSuites is deprecated. It is no longer - // populated and should be ignored by clients. - bool Deprecated_PreferServerCipherSuites = 5 [deprecated = true]; + bool VerifyOutgoing = 1; + bool VerifyServerHostname = 2; + string CipherSuites = 3; + string MinVersion = 4; + // Deprecated_PreferServerCipherSuites is deprecated. It is no longer + // populated and should be ignored by clients. + bool Deprecated_PreferServerCipherSuites = 5 [deprecated = true]; } message ACL { - bool Enabled = 1; - string PolicyTTL = 2; - string RoleTTL = 3; - string TokenTTL = 4; - string DownPolicy = 5; - string DefaultPolicy = 6; - bool EnableKeyListPolicy = 7; - ACLTokens Tokens = 8; - // Deprecated_DisabledTTL is deprecated. It is no longer populated and should - // be ignored by clients. - string Deprecated_DisabledTTL = 9 [deprecated = true]; - bool EnableTokenPersistence = 10; - bool MSPDisableBootstrap = 11; + bool Enabled = 1; + string PolicyTTL = 2; + string RoleTTL = 3; + string TokenTTL = 4; + string DownPolicy = 5; + string DefaultPolicy = 6; + bool EnableKeyListPolicy = 7; + ACLTokens Tokens = 8; + // Deprecated_DisabledTTL is deprecated. It is no longer populated and should + // be ignored by clients. + string Deprecated_DisabledTTL = 9 [deprecated = true]; + bool EnableTokenPersistence = 10; + bool MSPDisableBootstrap = 11; } message ACLTokens { - string InitialManagement = 1; - string Replication = 2; - string AgentRecovery = 3; - string Default = 4; - string Agent = 5; - repeated ACLServiceProviderToken ManagedServiceProvider = 6; + string InitialManagement = 1; + string Replication = 2; + string AgentRecovery = 3; + string Default = 4; + string Agent = 5; + repeated ACLServiceProviderToken ManagedServiceProvider = 6; } message ACLServiceProviderToken { - string AccessorID = 1; - string SecretID = 2; + string AccessorID = 1; + string SecretID = 2; } message AutoEncrypt { - bool TLS = 1; - repeated string DNSSAN = 2; - repeated string IPSAN = 3; - bool AllowTLS = 4; + bool TLS = 1; + repeated string DNSSAN = 2; + repeated string IPSAN = 3; + bool AllowTLS = 4; } diff --git a/proto/pbconnect/connect.pb.go b/proto/pbconnect/connect.pb.go index 78c9bb077ee3d..4197003bcaf20 100644 --- a/proto/pbconnect/connect.pb.go +++ b/proto/pbconnect/connect.pb.go @@ -1,12 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto/pbconnect/connect.proto package pbconnect import ( + proto "github.com/golang/protobuf/proto" pbcommon "github.com/hashicorp/consul/proto/pbcommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -22,6 +23,10 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + // CARoots is the list of all currently trusted CA Roots. // // mog annotation: @@ -582,16 +587,11 @@ var file_proto_pbconnect_connect_proto_rawDesc = []byte{ 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x09, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, - 0x09, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x84, 0x01, 0x0a, 0x0b, 0x63, - 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x42, 0x0c, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, - 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0xa2, 0x02, 0x03, 0x43, 0x58, 0x58, 0xaa, 0x02, 0x07, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0xca, 0x02, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0xe2, 0x02, 0x13, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x09, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, + 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/proto/pbconnect/connect.proto b/proto/pbconnect/connect.proto index 4d712d7e09f91..37ba5bcc9ab57 100644 --- a/proto/pbconnect/connect.proto +++ b/proto/pbconnect/connect.proto @@ -2,6 +2,8 @@ syntax = "proto3"; package connect; +option go_package = "github.com/hashicorp/consul/proto/pbconnect"; + import "google/protobuf/timestamp.proto"; import "proto/pbcommon/common.proto"; @@ -13,42 +15,42 @@ import "proto/pbcommon/common.proto"; // output=connect.gen.go // name=StructsIndexedCARoots message CARoots { - // ActiveRootID is the ID of a root in Roots that is the active CA root. - // Other roots are still valid if they're in the Roots list but are in - // the process of being rotated out. - string ActiveRootID = 1; - - // TrustDomain is the identification root for this Consul cluster. All - // certificates signed by the cluster's CA must have their identifying URI in - // this domain. - // - // This does not include the protocol (currently spiffe://) since we may - // implement other protocols in future with equivalent semantics. It should be - // compared against the "authority" section of a URI (i.e. host:port). - // - // We need to support migrating a cluster between trust domains to support - // Multi-DC migration in Enterprise. In this case the current trust domain is - // here but entries in Roots may also have ExternalTrustDomain set to a - // non-empty value implying they were previous roots that are still trusted - // but under a different trust domain. - // - // Note that we DON'T validate trust domain during AuthZ since it causes - // issues of loss of connectivity during migration between trust domains. The - // only time the additional validation adds value is where the cluster shares - // an external root (e.g. organization-wide root) with another distinct Consul - // cluster or PKI system. In this case, x509 Name Constraints can be added to - // enforce that Consul's CA can only validly sign or trust certs within the - // same trust-domain. Name constraints as enforced by TLS handshake also allow - // seamless rotation between trust domains thanks to cross-signing. - string TrustDomain = 2; - - // Roots is a list of root CA certs to trust. - repeated CARoot Roots = 3; - - // QueryMeta here is mainly used to contain the latest Raft Index that could - // be used to perform a blocking query. - // mog: func-to=QueryMetaTo func-from=QueryMetaFrom - common.QueryMeta QueryMeta = 4; + // ActiveRootID is the ID of a root in Roots that is the active CA root. + // Other roots are still valid if they're in the Roots list but are in + // the process of being rotated out. + string ActiveRootID = 1; + + // TrustDomain is the identification root for this Consul cluster. All + // certificates signed by the cluster's CA must have their identifying URI in + // this domain. + // + // This does not include the protocol (currently spiffe://) since we may + // implement other protocols in future with equivalent semantics. It should be + // compared against the "authority" section of a URI (i.e. host:port). + // + // We need to support migrating a cluster between trust domains to support + // Multi-DC migration in Enterprise. In this case the current trust domain is + // here but entries in Roots may also have ExternalTrustDomain set to a + // non-empty value implying they were previous roots that are still trusted + // but under a different trust domain. + // + // Note that we DON'T validate trust domain during AuthZ since it causes + // issues of loss of connectivity during migration between trust domains. The + // only time the additional validation adds value is where the cluster shares + // an external root (e.g. organization-wide root) with another distinct Consul + // cluster or PKI system. In this case, x509 Name Constraints can be added to + // enforce that Consul's CA can only validly sign or trust certs within the + // same trust-domain. Name constraints as enforced by TLS handshake also allow + // seamless rotation between trust domains thanks to cross-signing. + string TrustDomain = 2; + + // Roots is a list of root CA certs to trust. + repeated CARoot Roots = 3; + + // QueryMeta here is mainly used to contain the latest Raft Index that could + // be used to perform a blocking query. + // mog: func-to=QueryMetaTo func-from=QueryMetaFrom + common.QueryMeta QueryMeta = 4; } // CARoot is the trusted CA Root. @@ -59,75 +61,75 @@ message CARoots { // output=connect.gen.go // name=StructsCARoot message CARoot { - // ID is a globally unique ID (UUID) representing this CA root. - string ID = 1; - - // Name is a human-friendly name for this CA root. This value is - // opaque to Consul and is not used for anything internally. - string Name = 2; - - // SerialNumber is the x509 serial number of the certificate. - uint64 SerialNumber = 3; - - // SigningKeyID is the ID of the public key that corresponds to the private - // key used to sign leaf certificates. Is is the HexString format of the - // raw AuthorityKeyID bytes. - string SigningKeyID = 4; - - // ExternalTrustDomain is the trust domain this root was generated under. It - // is usually empty implying "the current cluster trust-domain". It is set - // only in the case that a cluster changes trust domain and then all old roots - // that are still trusted have the old trust domain set here. - // - // We currently DON'T validate these trust domains explicitly anywhere, see - // IndexedRoots.TrustDomain doc. We retain this information for debugging and - // future flexibility. - string ExternalTrustDomain = 5; - - // Time validity bounds. - // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto - google.protobuf.Timestamp NotBefore = 6; - // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto - google.protobuf.Timestamp NotAfter = 7; - - // RootCert is the PEM-encoded public certificate. - string RootCert = 8; - - // IntermediateCerts is a list of PEM-encoded intermediate certs to - // attach to any leaf certs signed by this CA. - repeated string IntermediateCerts = 9; - - // SigningCert is the PEM-encoded signing certificate and SigningKey - // is the PEM-encoded private key for the signing certificate. These - // may actually be empty if the CA plugin in use manages these for us. - string SigningCert = 10; - string SigningKey = 11; - - // Active is true if this is the current active CA. This must only - // be true for exactly one CA. For any method that modifies roots in the - // state store, tests should be written to verify that multiple roots - // cannot be active. - bool Active = 12; - - // RotatedOutAt is the time at which this CA was removed from the state. - // This will only be set on roots that have been rotated out from being the - // active root. - // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto - google.protobuf.Timestamp RotatedOutAt = 13; - - // PrivateKeyType is the type of the private key used to sign certificates. It - // may be "rsa" or "ec". This is provided as a convenience to avoid parsing - // the public key to from the certificate to infer the type. - string PrivateKeyType = 14; - - // PrivateKeyBits is the length of the private key used to sign certificates. - // This is provided as a convenience to avoid parsing the public key from the - // certificate to infer the type. - // mog: func-to=int func-from=int32 - int32 PrivateKeyBits = 15; - - // mog: func-to=RaftIndexTo func-from=RaftIndexFrom - common.RaftIndex RaftIndex = 16; + // ID is a globally unique ID (UUID) representing this CA root. + string ID = 1; + + // Name is a human-friendly name for this CA root. This value is + // opaque to Consul and is not used for anything internally. + string Name = 2; + + // SerialNumber is the x509 serial number of the certificate. + uint64 SerialNumber = 3; + + // SigningKeyID is the ID of the public key that corresponds to the private + // key used to sign leaf certificates. Is is the HexString format of the + // raw AuthorityKeyID bytes. + string SigningKeyID = 4; + + // ExternalTrustDomain is the trust domain this root was generated under. It + // is usually empty implying "the current cluster trust-domain". It is set + // only in the case that a cluster changes trust domain and then all old roots + // that are still trusted have the old trust domain set here. + // + // We currently DON'T validate these trust domains explicitly anywhere, see + // IndexedRoots.TrustDomain doc. We retain this information for debugging and + // future flexibility. + string ExternalTrustDomain = 5; + + // Time validity bounds. + // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto + google.protobuf.Timestamp NotBefore = 6; + // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto + google.protobuf.Timestamp NotAfter = 7; + + // RootCert is the PEM-encoded public certificate. + string RootCert = 8; + + // IntermediateCerts is a list of PEM-encoded intermediate certs to + // attach to any leaf certs signed by this CA. + repeated string IntermediateCerts = 9; + + // SigningCert is the PEM-encoded signing certificate and SigningKey + // is the PEM-encoded private key for the signing certificate. These + // may actually be empty if the CA plugin in use manages these for us. + string SigningCert = 10; + string SigningKey = 11; + + // Active is true if this is the current active CA. This must only + // be true for exactly one CA. For any method that modifies roots in the + // state store, tests should be written to verify that multiple roots + // cannot be active. + bool Active = 12; + + // RotatedOutAt is the time at which this CA was removed from the state. + // This will only be set on roots that have been rotated out from being the + // active root. + // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto + google.protobuf.Timestamp RotatedOutAt = 13; + + // PrivateKeyType is the type of the private key used to sign certificates. It + // may be "rsa" or "ec". This is provided as a convenience to avoid parsing + // the public key to from the certificate to infer the type. + string PrivateKeyType = 14; + + // PrivateKeyBits is the length of the private key used to sign certificates. + // This is provided as a convenience to avoid parsing the public key from the + // certificate to infer the type. + // mog: func-to=int func-from=int32 + int32 PrivateKeyBits = 15; + + // mog: func-to=RaftIndexTo func-from=RaftIndexFrom + common.RaftIndex RaftIndex = 16; } // RaftIndex is used to track the index used while creating @@ -139,37 +141,37 @@ message CARoot { // output=connect.gen.go // name=StructsIssuedCert message IssuedCert { - // SerialNumber is the unique serial number for this certificate. - // This is encoded in standard hex separated by :. - string SerialNumber = 1; - - // CertPEM and PrivateKeyPEM are the PEM-encoded certificate and private - // key for that cert, respectively. This should not be stored in the - // state store, but is present in the sign API response. - string CertPEM = 2; - string PrivateKeyPEM = 3; - - // Service is the name of the service for which the cert was issued. - // ServiceURI is the cert URI value. - string Service = 4; - string ServiceURI = 5; - - // Agent is the name of the node for which the cert was issued. - // AgentURI is the cert URI value. - string Agent = 6; - string AgentURI = 7; - - // ValidAfter and ValidBefore are the validity periods for the - // certificate. - // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto - google.protobuf.Timestamp ValidAfter = 8; - // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto - google.protobuf.Timestamp ValidBefore = 9; - - // EnterpriseMeta is the Consul Enterprise specific metadata - // mog: func-to=EnterpriseMetaTo func-from=EnterpriseMetaFrom - common.EnterpriseMeta EnterpriseMeta = 10; - - // mog: func-to=RaftIndexTo func-from=RaftIndexFrom - common.RaftIndex RaftIndex = 11; -} + // SerialNumber is the unique serial number for this certificate. + // This is encoded in standard hex separated by :. + string SerialNumber = 1; + + // CertPEM and PrivateKeyPEM are the PEM-encoded certificate and private + // key for that cert, respectively. This should not be stored in the + // state store, but is present in the sign API response. + string CertPEM = 2; + string PrivateKeyPEM = 3; + + // Service is the name of the service for which the cert was issued. + // ServiceURI is the cert URI value. + string Service = 4; + string ServiceURI = 5; + + // Agent is the name of the node for which the cert was issued. + // AgentURI is the cert URI value. + string Agent = 6; + string AgentURI = 7; + + // ValidAfter and ValidBefore are the validity periods for the + // certificate. + // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto + google.protobuf.Timestamp ValidAfter = 8; + // mog: func-to=structs.TimeFromProto func-from=structs.TimeToProto + google.protobuf.Timestamp ValidBefore = 9; + + // EnterpriseMeta is the Consul Enterprise specific metadata + // mog: func-to=EnterpriseMetaTo func-from=EnterpriseMetaFrom + common.EnterpriseMeta EnterpriseMeta = 10; + + // mog: func-to=RaftIndexTo func-from=RaftIndexFrom + common.RaftIndex RaftIndex = 11; +} \ No newline at end of file diff --git a/proto/pbpeering/generate.go b/proto/pbpeering/generate.go deleted file mode 100644 index 1f060a6cfe4b7..0000000000000 --- a/proto/pbpeering/generate.go +++ /dev/null @@ -1,9 +0,0 @@ -// TODO: files generated from this go:generate may fail the CI check because of relative source. -// Figure out a way to robustly use this file. -//go:generate protoc --gofast_out=. --gofast_opt=paths=source_relative --go-binary_out=. peering.proto -// requires: -// - protoc -// - github.com/gogo/protobuf/protoc-gen-gofast -// - github.com/hashicorp/protoc-gen-go-binary - -package pbpeering diff --git a/proto/pbpeering/peering.gen.go b/proto/pbpeering/peering.gen.go deleted file mode 100644 index 1705edf89a8cf..0000000000000 --- a/proto/pbpeering/peering.gen.go +++ /dev/null @@ -1,100 +0,0 @@ -// Code generated by mog. DO NOT EDIT. - -package pbpeering - -import "github.com/hashicorp/consul/api" - -func GenerateTokenRequestToAPI(s *GenerateTokenRequest, t *api.PeeringGenerateTokenRequest) { - if s == nil { - return - } - t.PeerName = s.PeerName - t.Partition = s.Partition - t.Datacenter = s.Datacenter - t.Token = s.Token - t.Meta = s.Meta -} -func GenerateTokenRequestFromAPI(t *api.PeeringGenerateTokenRequest, s *GenerateTokenRequest) { - if s == nil { - return - } - s.PeerName = t.PeerName - s.Partition = t.Partition - s.Datacenter = t.Datacenter - s.Token = t.Token - s.Meta = t.Meta -} -func GenerateTokenResponseToAPI(s *GenerateTokenResponse, t *api.PeeringGenerateTokenResponse) { - if s == nil { - return - } - t.PeeringToken = s.PeeringToken -} -func GenerateTokenResponseFromAPI(t *api.PeeringGenerateTokenResponse, s *GenerateTokenResponse) { - if s == nil { - return - } - s.PeeringToken = t.PeeringToken -} -func InitiateRequestToAPI(s *InitiateRequest, t *api.PeeringInitiateRequest) { - if s == nil { - return - } - t.PeerName = s.PeerName - t.PeeringToken = s.PeeringToken - t.Datacenter = s.Datacenter - t.Token = s.Token - t.Meta = s.Meta -} -func InitiateRequestFromAPI(t *api.PeeringInitiateRequest, s *InitiateRequest) { - if s == nil { - return - } - s.PeerName = t.PeerName - s.PeeringToken = t.PeeringToken - s.Datacenter = t.Datacenter - s.Token = t.Token - s.Meta = t.Meta -} -func InitiateResponseToAPI(s *InitiateResponse, t *api.PeeringInitiateResponse) { - if s == nil { - return - } -} -func InitiateResponseFromAPI(t *api.PeeringInitiateResponse, s *InitiateResponse) { - if s == nil { - return - } -} -func PeeringToAPI(s *Peering, t *api.Peering) { - if s == nil { - return - } - t.ID = s.ID - t.Name = s.Name - t.Partition = s.Partition - t.Meta = s.Meta - t.State = PeeringStateToAPI(s.State) - t.PeerID = s.PeerID - t.PeerCAPems = s.PeerCAPems - t.PeerServerName = s.PeerServerName - t.PeerServerAddresses = s.PeerServerAddresses - t.CreateIndex = s.CreateIndex - t.ModifyIndex = s.ModifyIndex -} -func PeeringFromAPI(t *api.Peering, s *Peering) { - if s == nil { - return - } - s.ID = t.ID - s.Name = t.Name - s.Partition = t.Partition - s.Meta = t.Meta - s.State = PeeringStateFromAPI(t.State) - s.PeerID = t.PeerID - s.PeerCAPems = t.PeerCAPems - s.PeerServerName = t.PeerServerName - s.PeerServerAddresses = t.PeerServerAddresses - s.CreateIndex = t.CreateIndex - s.ModifyIndex = t.ModifyIndex -} diff --git a/proto/pbpeering/peering.go b/proto/pbpeering/peering.go deleted file mode 100644 index f19650f3c0535..0000000000000 --- a/proto/pbpeering/peering.go +++ /dev/null @@ -1,221 +0,0 @@ -package pbpeering - -import ( - "strconv" - "time" - - "github.com/mitchellh/hashstructure" - - "github.com/hashicorp/consul/agent/cache" - "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/lib" -) - -// TODO(peering): These are byproducts of not embedding -// types in our protobuf definitions and are temporary; -// Hoping to replace them with 1 or 2 methods per request -// using https://github.com/hashicorp/consul/pull/12507 - -// RequestDatacenter implements structs.RPCInfo -func (req *GenerateTokenRequest) RequestDatacenter() string { - return req.Datacenter -} - -// IsRead implements structs.RPCInfo -func (req *GenerateTokenRequest) IsRead() bool { - return false -} - -// AllowStaleRead implements structs.RPCInfo -func (req *GenerateTokenRequest) AllowStaleRead() bool { - return false -} - -// TokenSecret implements structs.RPCInfo -func (req *GenerateTokenRequest) TokenSecret() string { - return req.Token -} - -// SetTokenSecret implements structs.RPCInfo -func (req *GenerateTokenRequest) SetTokenSecret(token string) { - req.Token = token -} - -// HasTimedOut implements structs.RPCInfo -func (req *GenerateTokenRequest) HasTimedOut(start time.Time, rpcHoldTimeout, _, _ time.Duration) (bool, error) { - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *GenerateTokenRequest) Timeout(rpcHoldTimeout time.Duration, maxQueryTime time.Duration, defaultQueryTime time.Duration) time.Duration { - return rpcHoldTimeout -} - -// IsRead implements structs.RPCInfo -func (req *InitiateRequest) IsRead() bool { - return false -} - -// AllowStaleRead implements structs.RPCInfo -func (req *InitiateRequest) AllowStaleRead() bool { - return false -} - -// TokenSecret implements structs.RPCInfo -func (req *InitiateRequest) TokenSecret() string { - return req.Token -} - -// SetTokenSecret implements structs.RPCInfo -func (req *InitiateRequest) SetTokenSecret(token string) { - req.Token = token -} - -// HasTimedOut implements structs.RPCInfo -func (req *InitiateRequest) HasTimedOut(start time.Time, rpcHoldTimeout, _, _ time.Duration) (bool, error) { - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *InitiateRequest) Timeout(rpcHoldTimeout time.Duration, maxQueryTime time.Duration, defaultQueryTime time.Duration) time.Duration { - return rpcHoldTimeout -} - -// ShouldDial returns true when the peering was stored via the peering initiation endpoint, -// AND the peering is not marked as terminated by our peer. -// If we generated a token for this peer we did not store our server addresses under PeerServerAddresses. -// These server addresses are for dialing, and only the peer initiating the peering will do the dialing. -func (p *Peering) ShouldDial() bool { - return len(p.PeerServerAddresses) > 0 && p.State != PeeringState_TERMINATED -} - -func (x ReplicationMessage_Response_Operation) GoString() string { - return x.String() -} - -func (r *TrustBundleReadRequest) CacheInfo() cache.RequestInfo { - info := cache.RequestInfo{ - // TODO(peering): Revisit whether this is the token to use once request types accept a token. - Token: r.Token(), - Datacenter: r.Datacenter, - MinIndex: 0, - Timeout: 0, - MustRevalidate: false, - - // TODO(peering): Cache.notifyPollingQuery polls at this interval. We need to revisit how that polling works. - // Using an exponential backoff when the result hasn't changed may be preferable. - MaxAge: 1 * time.Second, - } - - v, err := hashstructure.Hash([]interface{}{ - r.Partition, - r.Name, - }, nil) - if err == nil { - // If there is an error, we don't set the key. A blank key forces - // no cache for this request so the request is forwarded directly - // to the server. - info.Key = strconv.FormatUint(v, 10) - } - - return info -} - -// ConcatenatedRootPEMs concatenates and returns all PEM-encoded public certificates -// in a peer's trust bundle. -func (b *PeeringTrustBundle) ConcatenatedRootPEMs() string { - if b == nil { - return "" - } - - var rootPEMs string - for _, pem := range b.RootPEMs { - rootPEMs += lib.EnsureTrailingNewline(pem) - } - return rootPEMs -} - -// enumcover:PeeringState -func PeeringStateToAPI(s PeeringState) api.PeeringState { - switch s { - case PeeringState_INITIAL: - return api.PeeringStateInitial - case PeeringState_ACTIVE: - return api.PeeringStateActive - case PeeringState_FAILING: - return api.PeeringStateFailing - case PeeringState_TERMINATED: - return api.PeeringStateTerminated - case PeeringState_UNDEFINED: - fallthrough - default: - return api.PeeringStateUndefined - } -} - -// enumcover:api.PeeringState -func PeeringStateFromAPI(t api.PeeringState) PeeringState { - switch t { - case api.PeeringStateInitial: - return PeeringState_INITIAL - case api.PeeringStateActive: - return PeeringState_ACTIVE - case api.PeeringStateFailing: - return PeeringState_FAILING - case api.PeeringStateTerminated: - return PeeringState_TERMINATED - case api.PeeringStateUndefined: - fallthrough - default: - return PeeringState_UNDEFINED - } -} - -func (p *Peering) ToAPI() *api.Peering { - var t api.Peering - PeeringToAPI(p, &t) - return &t -} - -// TODO consider using mog for this -func (resp *PeeringListResponse) ToAPI() []*api.Peering { - list := make([]*api.Peering, len(resp.Peerings)) - for i, p := range resp.Peerings { - list[i] = p.ToAPI() - } - return list -} - -// TODO consider using mog for this -func (resp *GenerateTokenResponse) ToAPI() *api.PeeringGenerateTokenResponse { - var t api.PeeringGenerateTokenResponse - GenerateTokenResponseToAPI(resp, &t) - return &t -} - -// TODO consider using mog for this -func (resp *InitiateResponse) ToAPI() *api.PeeringInitiateResponse { - var t api.PeeringInitiateResponse - InitiateResponseToAPI(resp, &t) - return &t -} - -// convenience -func NewGenerateTokenRequestFromAPI(req *api.PeeringGenerateTokenRequest) *GenerateTokenRequest { - if req == nil { - return nil - } - t := &GenerateTokenRequest{} - GenerateTokenRequestFromAPI(req, t) - return t -} - -// convenience -func NewInitiateRequestFromAPI(req *api.PeeringInitiateRequest) *InitiateRequest { - if req == nil { - return nil - } - t := &InitiateRequest{} - InitiateRequestFromAPI(req, t) - return t -} diff --git a/proto/pbpeering/peering.pb.binary.go b/proto/pbpeering/peering.pb.binary.go deleted file mode 100644 index c63e6216d2503..0000000000000 --- a/proto/pbpeering/peering.pb.binary.go +++ /dev/null @@ -1,288 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: proto/pbpeering/peering.proto - -package pbpeering - -import ( - "github.com/golang/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *Peering) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *Peering) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringTrustBundle) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringTrustBundle) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringReadRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringReadRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringReadResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringReadResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringListRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringListRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringListResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringListResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringWriteRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringWriteRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringWriteResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringWriteResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringDeleteRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringDeleteRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringDeleteResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringDeleteResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *TrustBundleListByServiceRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *TrustBundleListByServiceRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *TrustBundleListByServiceResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *TrustBundleListByServiceResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *TrustBundleReadRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *TrustBundleReadRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *TrustBundleReadResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *TrustBundleReadResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringTerminateByIDRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringTerminateByIDRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringTerminateByIDResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringTerminateByIDResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringTrustBundleWriteRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringTrustBundleWriteRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringTrustBundleWriteResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringTrustBundleWriteResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringTrustBundleDeleteRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringTrustBundleDeleteRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringTrustBundleDeleteResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringTrustBundleDeleteResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *GenerateTokenRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *GenerateTokenRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *GenerateTokenResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *GenerateTokenResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *InitiateRequest) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *InitiateRequest) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *InitiateResponse) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *InitiateResponse) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ReplicationMessage) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ReplicationMessage) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ReplicationMessage_Request) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ReplicationMessage_Request) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ReplicationMessage_Response) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ReplicationMessage_Response) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *ReplicationMessage_Terminated) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *ReplicationMessage_Terminated) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto/pbpeering/peering.pb.go b/proto/pbpeering/peering.pb.go deleted file mode 100644 index c9d2320123d18..0000000000000 --- a/proto/pbpeering/peering.pb.go +++ /dev/null @@ -1,2665 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) -// source: proto/pbpeering/peering.proto - -package pbpeering - -import ( - pbstatus "github.com/hashicorp/consul/proto/pbstatus" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - anypb "google.golang.org/protobuf/types/known/anypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// PeeringState enumerates all the states a peering can be in -type PeeringState int32 - -const ( - // Undefined represents an unset value for PeeringState during - // writes. - PeeringState_UNDEFINED PeeringState = 0 - // Initial means a Peering has been initialized and is awaiting - // acknowledgement from a remote peer. - PeeringState_INITIAL PeeringState = 1 - // Active means that the peering connection is active and healthy. - PeeringState_ACTIVE PeeringState = 2 - // Failing means the peering connection has been interrupted but has not yet - // been terminated. - PeeringState_FAILING PeeringState = 3 - // Terminated means the peering relationship has been removed. - PeeringState_TERMINATED PeeringState = 4 -) - -// Enum value maps for PeeringState. -var ( - PeeringState_name = map[int32]string{ - 0: "UNDEFINED", - 1: "INITIAL", - 2: "ACTIVE", - 3: "FAILING", - 4: "TERMINATED", - } - PeeringState_value = map[string]int32{ - "UNDEFINED": 0, - "INITIAL": 1, - "ACTIVE": 2, - "FAILING": 3, - "TERMINATED": 4, - } -) - -func (x PeeringState) Enum() *PeeringState { - p := new(PeeringState) - *p = x - return p -} - -func (x PeeringState) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PeeringState) Descriptor() protoreflect.EnumDescriptor { - return file_proto_pbpeering_peering_proto_enumTypes[0].Descriptor() -} - -func (PeeringState) Type() protoreflect.EnumType { - return &file_proto_pbpeering_peering_proto_enumTypes[0] -} - -func (x PeeringState) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use PeeringState.Descriptor instead. -func (PeeringState) EnumDescriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{0} -} - -// Operation enumerates supported operations for replicated resources. -type ReplicationMessage_Response_Operation int32 - -const ( - ReplicationMessage_Response_Unknown ReplicationMessage_Response_Operation = 0 - // UPSERT represents a create or update event. - ReplicationMessage_Response_UPSERT ReplicationMessage_Response_Operation = 1 - // DELETE indicates the resource should be deleted. - // In DELETE operations no Resource will be returned. - // Deletion by an importing peer must be done with the type URL and ID. - ReplicationMessage_Response_DELETE ReplicationMessage_Response_Operation = 2 -) - -// Enum value maps for ReplicationMessage_Response_Operation. -var ( - ReplicationMessage_Response_Operation_name = map[int32]string{ - 0: "Unknown", - 1: "UPSERT", - 2: "DELETE", - } - ReplicationMessage_Response_Operation_value = map[string]int32{ - "Unknown": 0, - "UPSERT": 1, - "DELETE": 2, - } -) - -func (x ReplicationMessage_Response_Operation) Enum() *ReplicationMessage_Response_Operation { - p := new(ReplicationMessage_Response_Operation) - *p = x - return p -} - -func (x ReplicationMessage_Response_Operation) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ReplicationMessage_Response_Operation) Descriptor() protoreflect.EnumDescriptor { - return file_proto_pbpeering_peering_proto_enumTypes[1].Descriptor() -} - -func (ReplicationMessage_Response_Operation) Type() protoreflect.EnumType { - return &file_proto_pbpeering_peering_proto_enumTypes[1] -} - -func (x ReplicationMessage_Response_Operation) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ReplicationMessage_Response_Operation.Descriptor instead. -func (ReplicationMessage_Response_Operation) EnumDescriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{24, 1, 0} -} - -// Peering defines a peering relationship between two disparate Consul clusters -// -// mog annotation: -// -// target=github.com/hashicorp/consul/api.Peering -// output=peering.gen.go -// name=API -type Peering struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ID is a datacenter-scoped UUID for the peering. - // The ID is generated when a peering is first written to the state store. - ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` - // Name is the local alias for the peering relationship. - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` - // Partition is the local partition connecting to the peer. - Partition string `protobuf:"bytes,3,opt,name=Partition,proto3" json:"Partition,omitempty"` - // Meta is a mapping of some string value to any other string value - Meta map[string]string `protobuf:"bytes,11,rep,name=Meta,proto3" json:"Meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // State is one of the valid PeeringState values to represent the status of - // peering relationship. - // - // mog: func-to=PeeringStateToAPI func-from=PeeringStateFromAPI - State PeeringState `protobuf:"varint,4,opt,name=State,proto3,enum=peering.PeeringState" json:"State,omitempty"` - // PeerID is the ID that our peer assigned to this peering. - // This ID is to be used when dialing the peer, so that it can know who dialed it. - PeerID string `protobuf:"bytes,5,opt,name=PeerID,proto3" json:"PeerID,omitempty"` - // PeerCAPems contains all the CA certificates for the remote peer. - PeerCAPems []string `protobuf:"bytes,6,rep,name=PeerCAPems,proto3" json:"PeerCAPems,omitempty"` - // PeerServerName is the name of the remote server as it relates to TLS. - PeerServerName string `protobuf:"bytes,7,opt,name=PeerServerName,proto3" json:"PeerServerName,omitempty"` - // PeerServerAddresses contains all the the connection addresses for the remote peer. - PeerServerAddresses []string `protobuf:"bytes,8,rep,name=PeerServerAddresses,proto3" json:"PeerServerAddresses,omitempty"` - // CreateIndex is the Raft index at which the Peering was created. - CreateIndex uint64 `protobuf:"varint,9,opt,name=CreateIndex,proto3" json:"CreateIndex,omitempty"` - // ModifyIndex is the latest Raft index at which the Peering. was modified. - ModifyIndex uint64 `protobuf:"varint,10,opt,name=ModifyIndex,proto3" json:"ModifyIndex,omitempty"` -} - -func (x *Peering) Reset() { - *x = Peering{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Peering) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Peering) ProtoMessage() {} - -func (x *Peering) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Peering.ProtoReflect.Descriptor instead. -func (*Peering) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{0} -} - -func (x *Peering) GetID() string { - if x != nil { - return x.ID - } - return "" -} - -func (x *Peering) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Peering) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *Peering) GetMeta() map[string]string { - if x != nil { - return x.Meta - } - return nil -} - -func (x *Peering) GetState() PeeringState { - if x != nil { - return x.State - } - return PeeringState_UNDEFINED -} - -func (x *Peering) GetPeerID() string { - if x != nil { - return x.PeerID - } - return "" -} - -func (x *Peering) GetPeerCAPems() []string { - if x != nil { - return x.PeerCAPems - } - return nil -} - -func (x *Peering) GetPeerServerName() string { - if x != nil { - return x.PeerServerName - } - return "" -} - -func (x *Peering) GetPeerServerAddresses() []string { - if x != nil { - return x.PeerServerAddresses - } - return nil -} - -func (x *Peering) GetCreateIndex() uint64 { - if x != nil { - return x.CreateIndex - } - return 0 -} - -func (x *Peering) GetModifyIndex() uint64 { - if x != nil { - return x.ModifyIndex - } - return 0 -} - -// PeeringTrustBundle holds the trust information for validating requests from a peer. -type PeeringTrustBundle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // TrustDomain is the domain for the bundle, example.com, foo.bar.gov for example. Note that this must not have a prefix such as "spiffe://". - TrustDomain string `protobuf:"bytes,1,opt,name=TrustDomain,proto3" json:"TrustDomain,omitempty"` - // PeerName associates the trust bundle with a peer. - PeerName string `protobuf:"bytes,2,opt,name=PeerName,proto3" json:"PeerName,omitempty"` - // Partition isolates the bundle from other trust bundles in separate partitions. - Partition string `protobuf:"bytes,3,opt,name=Partition,proto3" json:"Partition,omitempty"` - // RootPEMs holds ASN.1 DER encoded X.509 certificate data for the trust bundle. - RootPEMs []string `protobuf:"bytes,4,rep,name=RootPEMs,proto3" json:"RootPEMs,omitempty"` - // CreateIndex is the Raft index at which the trust domain was created. - CreateIndex uint64 `protobuf:"varint,5,opt,name=CreateIndex,proto3" json:"CreateIndex,omitempty"` - // ModifyIndex is the latest Raft index at which the trust bundle was modified. - ModifyIndex uint64 `protobuf:"varint,6,opt,name=ModifyIndex,proto3" json:"ModifyIndex,omitempty"` -} - -func (x *PeeringTrustBundle) Reset() { - *x = PeeringTrustBundle{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringTrustBundle) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringTrustBundle) ProtoMessage() {} - -func (x *PeeringTrustBundle) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringTrustBundle.ProtoReflect.Descriptor instead. -func (*PeeringTrustBundle) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{1} -} - -func (x *PeeringTrustBundle) GetTrustDomain() string { - if x != nil { - return x.TrustDomain - } - return "" -} - -func (x *PeeringTrustBundle) GetPeerName() string { - if x != nil { - return x.PeerName - } - return "" -} - -func (x *PeeringTrustBundle) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *PeeringTrustBundle) GetRootPEMs() []string { - if x != nil { - return x.RootPEMs - } - return nil -} - -func (x *PeeringTrustBundle) GetCreateIndex() uint64 { - if x != nil { - return x.CreateIndex - } - return 0 -} - -func (x *PeeringTrustBundle) GetModifyIndex() uint64 { - if x != nil { - return x.ModifyIndex - } - return 0 -} - -// @consul-rpc-glue: Datacenter,ReadTODO -type PeeringReadRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` - Partition string `protobuf:"bytes,2,opt,name=Partition,proto3" json:"Partition,omitempty"` - Datacenter string `protobuf:"bytes,3,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` -} - -func (x *PeeringReadRequest) Reset() { - *x = PeeringReadRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringReadRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringReadRequest) ProtoMessage() {} - -func (x *PeeringReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringReadRequest.ProtoReflect.Descriptor instead. -func (*PeeringReadRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{2} -} - -func (x *PeeringReadRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PeeringReadRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *PeeringReadRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -type PeeringReadResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Peering *Peering `protobuf:"bytes,1,opt,name=Peering,proto3" json:"Peering,omitempty"` -} - -func (x *PeeringReadResponse) Reset() { - *x = PeeringReadResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringReadResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringReadResponse) ProtoMessage() {} - -func (x *PeeringReadResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringReadResponse.ProtoReflect.Descriptor instead. -func (*PeeringReadResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{3} -} - -func (x *PeeringReadResponse) GetPeering() *Peering { - if x != nil { - return x.Peering - } - return nil -} - -// @consul-rpc-glue: Datacenter,ReadTODO -type PeeringListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Partition string `protobuf:"bytes,1,opt,name=Partition,proto3" json:"Partition,omitempty"` - Datacenter string `protobuf:"bytes,2,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` -} - -func (x *PeeringListRequest) Reset() { - *x = PeeringListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringListRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringListRequest) ProtoMessage() {} - -func (x *PeeringListRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringListRequest.ProtoReflect.Descriptor instead. -func (*PeeringListRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{4} -} - -func (x *PeeringListRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *PeeringListRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -type PeeringListResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Peerings []*Peering `protobuf:"bytes,1,rep,name=Peerings,proto3" json:"Peerings,omitempty"` -} - -func (x *PeeringListResponse) Reset() { - *x = PeeringListResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringListResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringListResponse) ProtoMessage() {} - -func (x *PeeringListResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringListResponse.ProtoReflect.Descriptor instead. -func (*PeeringListResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{5} -} - -func (x *PeeringListResponse) GetPeerings() []*Peering { - if x != nil { - return x.Peerings - } - return nil -} - -// @consul-rpc-glue: Datacenter,WriteTODO -type PeeringWriteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Peering *Peering `protobuf:"bytes,1,opt,name=Peering,proto3" json:"Peering,omitempty"` - //TODO(peering): what to do with embedded write request? - Datacenter string `protobuf:"bytes,2,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` - // Meta is a mapping of some string value to any other string value - Meta map[string]string `protobuf:"bytes,3,rep,name=Meta,proto3" json:"Meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *PeeringWriteRequest) Reset() { - *x = PeeringWriteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringWriteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringWriteRequest) ProtoMessage() {} - -func (x *PeeringWriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringWriteRequest.ProtoReflect.Descriptor instead. -func (*PeeringWriteRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{6} -} - -func (x *PeeringWriteRequest) GetPeering() *Peering { - if x != nil { - return x.Peering - } - return nil -} - -func (x *PeeringWriteRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -func (x *PeeringWriteRequest) GetMeta() map[string]string { - if x != nil { - return x.Meta - } - return nil -} - -// TODO(peering): Consider returning Peering if we keep this endpoint around -type PeeringWriteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *PeeringWriteResponse) Reset() { - *x = PeeringWriteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringWriteResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringWriteResponse) ProtoMessage() {} - -func (x *PeeringWriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringWriteResponse.ProtoReflect.Descriptor instead. -func (*PeeringWriteResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{7} -} - -// @consul-rpc-glue: Datacenter,WriteTODO -type PeeringDeleteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` - Partition string `protobuf:"bytes,2,opt,name=Partition,proto3" json:"Partition,omitempty"` - //TODO(peering): what to do with embedded write request? - Datacenter string `protobuf:"bytes,3,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` -} - -func (x *PeeringDeleteRequest) Reset() { - *x = PeeringDeleteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringDeleteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringDeleteRequest) ProtoMessage() {} - -func (x *PeeringDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringDeleteRequest.ProtoReflect.Descriptor instead. -func (*PeeringDeleteRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{8} -} - -func (x *PeeringDeleteRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PeeringDeleteRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *PeeringDeleteRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -type PeeringDeleteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *PeeringDeleteResponse) Reset() { - *x = PeeringDeleteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringDeleteResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringDeleteResponse) ProtoMessage() {} - -func (x *PeeringDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringDeleteResponse.ProtoReflect.Descriptor instead. -func (*PeeringDeleteResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{9} -} - -// @consul-rpc-glue: Datacenter,ReadTODO -type TrustBundleListByServiceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServiceName string `protobuf:"bytes,1,opt,name=ServiceName,proto3" json:"ServiceName,omitempty"` - Partition string `protobuf:"bytes,2,opt,name=Partition,proto3" json:"Partition,omitempty"` - // these are common fields required for implementing structs.RPCInfo methods - // that are used to forward requests - Datacenter string `protobuf:"bytes,3,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` -} - -func (x *TrustBundleListByServiceRequest) Reset() { - *x = TrustBundleListByServiceRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TrustBundleListByServiceRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TrustBundleListByServiceRequest) ProtoMessage() {} - -func (x *TrustBundleListByServiceRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TrustBundleListByServiceRequest.ProtoReflect.Descriptor instead. -func (*TrustBundleListByServiceRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{10} -} - -func (x *TrustBundleListByServiceRequest) GetServiceName() string { - if x != nil { - return x.ServiceName - } - return "" -} - -func (x *TrustBundleListByServiceRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *TrustBundleListByServiceRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -type TrustBundleListByServiceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Bundles []*PeeringTrustBundle `protobuf:"bytes,1,rep,name=Bundles,proto3" json:"Bundles,omitempty"` -} - -func (x *TrustBundleListByServiceResponse) Reset() { - *x = TrustBundleListByServiceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TrustBundleListByServiceResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TrustBundleListByServiceResponse) ProtoMessage() {} - -func (x *TrustBundleListByServiceResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TrustBundleListByServiceResponse.ProtoReflect.Descriptor instead. -func (*TrustBundleListByServiceResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{11} -} - -func (x *TrustBundleListByServiceResponse) GetBundles() []*PeeringTrustBundle { - if x != nil { - return x.Bundles - } - return nil -} - -// @consul-rpc-glue: Datacenter,ReadTODO -type TrustBundleReadRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` - Partition string `protobuf:"bytes,2,opt,name=Partition,proto3" json:"Partition,omitempty"` - // these are common fields required for implementing structs.RPCInfo methods - // that are used to forward requests - Datacenter string `protobuf:"bytes,3,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` -} - -func (x *TrustBundleReadRequest) Reset() { - *x = TrustBundleReadRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TrustBundleReadRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TrustBundleReadRequest) ProtoMessage() {} - -func (x *TrustBundleReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TrustBundleReadRequest.ProtoReflect.Descriptor instead. -func (*TrustBundleReadRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{12} -} - -func (x *TrustBundleReadRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *TrustBundleReadRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *TrustBundleReadRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -type TrustBundleReadResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Index uint64 `protobuf:"varint,1,opt,name=Index,proto3" json:"Index,omitempty"` - Bundle *PeeringTrustBundle `protobuf:"bytes,2,opt,name=Bundle,proto3" json:"Bundle,omitempty"` -} - -func (x *TrustBundleReadResponse) Reset() { - *x = TrustBundleReadResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TrustBundleReadResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TrustBundleReadResponse) ProtoMessage() {} - -func (x *TrustBundleReadResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TrustBundleReadResponse.ProtoReflect.Descriptor instead. -func (*TrustBundleReadResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{13} -} - -func (x *TrustBundleReadResponse) GetIndex() uint64 { - if x != nil { - return x.Index - } - return 0 -} - -func (x *TrustBundleReadResponse) GetBundle() *PeeringTrustBundle { - if x != nil { - return x.Bundle - } - return nil -} - -type PeeringTerminateByIDRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` -} - -func (x *PeeringTerminateByIDRequest) Reset() { - *x = PeeringTerminateByIDRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringTerminateByIDRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringTerminateByIDRequest) ProtoMessage() {} - -func (x *PeeringTerminateByIDRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringTerminateByIDRequest.ProtoReflect.Descriptor instead. -func (*PeeringTerminateByIDRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{14} -} - -func (x *PeeringTerminateByIDRequest) GetID() string { - if x != nil { - return x.ID - } - return "" -} - -type PeeringTerminateByIDResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *PeeringTerminateByIDResponse) Reset() { - *x = PeeringTerminateByIDResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringTerminateByIDResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringTerminateByIDResponse) ProtoMessage() {} - -func (x *PeeringTerminateByIDResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringTerminateByIDResponse.ProtoReflect.Descriptor instead. -func (*PeeringTerminateByIDResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{15} -} - -// @consul-rpc-glue: Datacenter -type PeeringTrustBundleWriteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PeeringTrustBundle *PeeringTrustBundle `protobuf:"bytes,1,opt,name=PeeringTrustBundle,proto3" json:"PeeringTrustBundle,omitempty"` - //TODO(peering): what to do with embedded write request? - Datacenter string `protobuf:"bytes,2,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` -} - -func (x *PeeringTrustBundleWriteRequest) Reset() { - *x = PeeringTrustBundleWriteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringTrustBundleWriteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringTrustBundleWriteRequest) ProtoMessage() {} - -func (x *PeeringTrustBundleWriteRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringTrustBundleWriteRequest.ProtoReflect.Descriptor instead. -func (*PeeringTrustBundleWriteRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{16} -} - -func (x *PeeringTrustBundleWriteRequest) GetPeeringTrustBundle() *PeeringTrustBundle { - if x != nil { - return x.PeeringTrustBundle - } - return nil -} - -func (x *PeeringTrustBundleWriteRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -type PeeringTrustBundleWriteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *PeeringTrustBundleWriteResponse) Reset() { - *x = PeeringTrustBundleWriteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringTrustBundleWriteResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringTrustBundleWriteResponse) ProtoMessage() {} - -func (x *PeeringTrustBundleWriteResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringTrustBundleWriteResponse.ProtoReflect.Descriptor instead. -func (*PeeringTrustBundleWriteResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{17} -} - -// @consul-rpc-glue: Datacenter -type PeeringTrustBundleDeleteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` - Partition string `protobuf:"bytes,2,opt,name=Partition,proto3" json:"Partition,omitempty"` - //TODO(peering): what to do with embedded write request? - Datacenter string `protobuf:"bytes,3,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` -} - -func (x *PeeringTrustBundleDeleteRequest) Reset() { - *x = PeeringTrustBundleDeleteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringTrustBundleDeleteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringTrustBundleDeleteRequest) ProtoMessage() {} - -func (x *PeeringTrustBundleDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringTrustBundleDeleteRequest.ProtoReflect.Descriptor instead. -func (*PeeringTrustBundleDeleteRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{18} -} - -func (x *PeeringTrustBundleDeleteRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PeeringTrustBundleDeleteRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *PeeringTrustBundleDeleteRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -type PeeringTrustBundleDeleteResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *PeeringTrustBundleDeleteResponse) Reset() { - *x = PeeringTrustBundleDeleteResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringTrustBundleDeleteResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringTrustBundleDeleteResponse) ProtoMessage() {} - -func (x *PeeringTrustBundleDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringTrustBundleDeleteResponse.ProtoReflect.Descriptor instead. -func (*PeeringTrustBundleDeleteResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{19} -} - -// mog annotation: -// -// target=github.com/hashicorp/consul/api.PeeringGenerateTokenRequest -// output=peering.gen.go -// name=API -type GenerateTokenRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of the remote peer. - PeerName string `protobuf:"bytes,1,opt,name=PeerName,proto3" json:"PeerName,omitempty"` - // Partition is the local partition being peered. - Partition string `protobuf:"bytes,2,opt,name=Partition,proto3" json:"Partition,omitempty"` - // these are common fields required for implementing structs.RPCInfo methods - // that are used to forward requests - Datacenter string `protobuf:"bytes,3,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` - Token string `protobuf:"bytes,4,opt,name=Token,proto3" json:"Token,omitempty"` - // Meta is a mapping of some string value to any other string value - Meta map[string]string `protobuf:"bytes,5,rep,name=Meta,proto3" json:"Meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *GenerateTokenRequest) Reset() { - *x = GenerateTokenRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GenerateTokenRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GenerateTokenRequest) ProtoMessage() {} - -func (x *GenerateTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GenerateTokenRequest.ProtoReflect.Descriptor instead. -func (*GenerateTokenRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{20} -} - -func (x *GenerateTokenRequest) GetPeerName() string { - if x != nil { - return x.PeerName - } - return "" -} - -func (x *GenerateTokenRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *GenerateTokenRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -func (x *GenerateTokenRequest) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *GenerateTokenRequest) GetMeta() map[string]string { - if x != nil { - return x.Meta - } - return nil -} - -// mog annotation: -// -// target=github.com/hashicorp/consul/api.PeeringGenerateTokenResponse -// output=peering.gen.go -// name=API -type GenerateTokenResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // PeeringToken is an opaque string provided to the remote peer for it to complete - // the peering initialization handshake. - PeeringToken string `protobuf:"bytes,1,opt,name=PeeringToken,proto3" json:"PeeringToken,omitempty"` -} - -func (x *GenerateTokenResponse) Reset() { - *x = GenerateTokenResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GenerateTokenResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GenerateTokenResponse) ProtoMessage() {} - -func (x *GenerateTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GenerateTokenResponse.ProtoReflect.Descriptor instead. -func (*GenerateTokenResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{21} -} - -func (x *GenerateTokenResponse) GetPeeringToken() string { - if x != nil { - return x.PeeringToken - } - return "" -} - -// @consul-rpc-glue: Datacenter -// -// mog annotation: -// -// target=github.com/hashicorp/consul/api.PeeringInitiateRequest -// output=peering.gen.go -// name=API -type InitiateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of the remote peer. - PeerName string `protobuf:"bytes,1,opt,name=PeerName,proto3" json:"PeerName,omitempty"` - // The peering token returned from the peer's GenerateToken endpoint. - PeeringToken string `protobuf:"bytes,2,opt,name=PeeringToken,proto3" json:"PeeringToken,omitempty"` - // Partition is the local partition being peered. - Partition string `protobuf:"bytes,3,opt,name=Partition,proto3" json:"Partition,omitempty"` - // these are common fields required for implementing structs.RPCInfo methods - // that are used to forward requests - Datacenter string `protobuf:"bytes,4,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` - Token string `protobuf:"bytes,5,opt,name=Token,proto3" json:"Token,omitempty"` - // Meta is a mapping of some string value to any other string value - Meta map[string]string `protobuf:"bytes,6,rep,name=Meta,proto3" json:"Meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *InitiateRequest) Reset() { - *x = InitiateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InitiateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InitiateRequest) ProtoMessage() {} - -func (x *InitiateRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InitiateRequest.ProtoReflect.Descriptor instead. -func (*InitiateRequest) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{22} -} - -func (x *InitiateRequest) GetPeerName() string { - if x != nil { - return x.PeerName - } - return "" -} - -func (x *InitiateRequest) GetPeeringToken() string { - if x != nil { - return x.PeeringToken - } - return "" -} - -func (x *InitiateRequest) GetPartition() string { - if x != nil { - return x.Partition - } - return "" -} - -func (x *InitiateRequest) GetDatacenter() string { - if x != nil { - return x.Datacenter - } - return "" -} - -func (x *InitiateRequest) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -func (x *InitiateRequest) GetMeta() map[string]string { - if x != nil { - return x.Meta - } - return nil -} - -// -// mog annotation: -// -// target=github.com/hashicorp/consul/api.PeeringInitiateResponse -// output=peering.gen.go -// name=API -type InitiateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *InitiateResponse) Reset() { - *x = InitiateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InitiateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InitiateResponse) ProtoMessage() {} - -func (x *InitiateResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InitiateResponse.ProtoReflect.Descriptor instead. -func (*InitiateResponse) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{23} -} - -type ReplicationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Payload: - // *ReplicationMessage_Request_ - // *ReplicationMessage_Response_ - // *ReplicationMessage_Terminated_ - Payload isReplicationMessage_Payload `protobuf_oneof:"Payload"` -} - -func (x *ReplicationMessage) Reset() { - *x = ReplicationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReplicationMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReplicationMessage) ProtoMessage() {} - -func (x *ReplicationMessage) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReplicationMessage.ProtoReflect.Descriptor instead. -func (*ReplicationMessage) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{24} -} - -func (m *ReplicationMessage) GetPayload() isReplicationMessage_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (x *ReplicationMessage) GetRequest() *ReplicationMessage_Request { - if x, ok := x.GetPayload().(*ReplicationMessage_Request_); ok { - return x.Request - } - return nil -} - -func (x *ReplicationMessage) GetResponse() *ReplicationMessage_Response { - if x, ok := x.GetPayload().(*ReplicationMessage_Response_); ok { - return x.Response - } - return nil -} - -func (x *ReplicationMessage) GetTerminated() *ReplicationMessage_Terminated { - if x, ok := x.GetPayload().(*ReplicationMessage_Terminated_); ok { - return x.Terminated - } - return nil -} - -type isReplicationMessage_Payload interface { - isReplicationMessage_Payload() -} - -type ReplicationMessage_Request_ struct { - Request *ReplicationMessage_Request `protobuf:"bytes,1,opt,name=request,proto3,oneof"` -} - -type ReplicationMessage_Response_ struct { - Response *ReplicationMessage_Response `protobuf:"bytes,2,opt,name=response,proto3,oneof"` -} - -type ReplicationMessage_Terminated_ struct { - Terminated *ReplicationMessage_Terminated `protobuf:"bytes,3,opt,name=terminated,proto3,oneof"` -} - -func (*ReplicationMessage_Request_) isReplicationMessage_Payload() {} - -func (*ReplicationMessage_Response_) isReplicationMessage_Payload() {} - -func (*ReplicationMessage_Terminated_) isReplicationMessage_Payload() {} - -// A Request requests to subscribe to a resource of a given type. -type ReplicationMessage_Request struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // An identifier for the peer making the request. - // This identifier is provisioned by the serving peer prior to the request from the dialing peer. - PeerID string `protobuf:"bytes,1,opt,name=PeerID,proto3" json:"PeerID,omitempty"` - // Nonce corresponding to that of the response being ACKed or NACKed. - // Initial subscription requests will have an empty nonce. - // The nonce is generated and incremented by the exporting peer. - Nonce string `protobuf:"bytes,2,opt,name=Nonce,proto3" json:"Nonce,omitempty"` - // The type URL for the resource being requested or ACK/NACKed. - ResourceURL string `protobuf:"bytes,3,opt,name=ResourceURL,proto3" json:"ResourceURL,omitempty"` - // The error if the previous response was not applied successfully. - // This field is empty in the first subscription request. - Error *pbstatus.Status `protobuf:"bytes,4,opt,name=Error,proto3" json:"Error,omitempty"` -} - -func (x *ReplicationMessage_Request) Reset() { - *x = ReplicationMessage_Request{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReplicationMessage_Request) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReplicationMessage_Request) ProtoMessage() {} - -func (x *ReplicationMessage_Request) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReplicationMessage_Request.ProtoReflect.Descriptor instead. -func (*ReplicationMessage_Request) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{24, 0} -} - -func (x *ReplicationMessage_Request) GetPeerID() string { - if x != nil { - return x.PeerID - } - return "" -} - -func (x *ReplicationMessage_Request) GetNonce() string { - if x != nil { - return x.Nonce - } - return "" -} - -func (x *ReplicationMessage_Request) GetResourceURL() string { - if x != nil { - return x.ResourceURL - } - return "" -} - -func (x *ReplicationMessage_Request) GetError() *pbstatus.Status { - if x != nil { - return x.Error - } - return nil -} - -// A Response contains resources corresponding to a subscription request. -type ReplicationMessage_Response struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Nonce identifying a response in a stream. - Nonce string `protobuf:"bytes,1,opt,name=Nonce,proto3" json:"Nonce,omitempty"` - // The type URL of resource being returned. - ResourceURL string `protobuf:"bytes,2,opt,name=ResourceURL,proto3" json:"ResourceURL,omitempty"` - // An identifier for the resource being returned. - // This could be the SPIFFE ID of the service. - ResourceID string `protobuf:"bytes,3,opt,name=ResourceID,proto3" json:"ResourceID,omitempty"` - // The resource being returned. - Resource *anypb.Any `protobuf:"bytes,4,opt,name=Resource,proto3" json:"Resource,omitempty"` - // REQUIRED. The operation to be performed in relation to the resource. - Operation ReplicationMessage_Response_Operation `protobuf:"varint,5,opt,name=operation,proto3,enum=peering.ReplicationMessage_Response_Operation" json:"operation,omitempty"` -} - -func (x *ReplicationMessage_Response) Reset() { - *x = ReplicationMessage_Response{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReplicationMessage_Response) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReplicationMessage_Response) ProtoMessage() {} - -func (x *ReplicationMessage_Response) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReplicationMessage_Response.ProtoReflect.Descriptor instead. -func (*ReplicationMessage_Response) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{24, 1} -} - -func (x *ReplicationMessage_Response) GetNonce() string { - if x != nil { - return x.Nonce - } - return "" -} - -func (x *ReplicationMessage_Response) GetResourceURL() string { - if x != nil { - return x.ResourceURL - } - return "" -} - -func (x *ReplicationMessage_Response) GetResourceID() string { - if x != nil { - return x.ResourceID - } - return "" -} - -func (x *ReplicationMessage_Response) GetResource() *anypb.Any { - if x != nil { - return x.Resource - } - return nil -} - -func (x *ReplicationMessage_Response) GetOperation() ReplicationMessage_Response_Operation { - if x != nil { - return x.Operation - } - return ReplicationMessage_Response_Unknown -} - -// Terminated is sent when a peering is deleted locally. -// This message signals to the peer that they should clean up their local state about the peering. -type ReplicationMessage_Terminated struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ReplicationMessage_Terminated) Reset() { - *x = ReplicationMessage_Terminated{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbpeering_peering_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReplicationMessage_Terminated) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReplicationMessage_Terminated) ProtoMessage() {} - -func (x *ReplicationMessage_Terminated) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbpeering_peering_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReplicationMessage_Terminated.ProtoReflect.Descriptor instead. -func (*ReplicationMessage_Terminated) Descriptor() ([]byte, []int) { - return file_proto_pbpeering_peering_proto_rawDescGZIP(), []int{24, 2} -} - -var File_proto_pbpeering_peering_proto protoreflect.FileDescriptor - -var file_proto_pbpeering_peering_proto_rawDesc = []byte{ - 0x0a, 0x1d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x2f, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x07, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xb7, 0x03, 0x0a, 0x07, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, - 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, - 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2b, - 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, - 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, - 0x65, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x65, 0x65, - 0x72, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x65, 0x65, 0x72, 0x43, 0x41, 0x50, 0x65, 0x6d, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x50, 0x65, 0x65, 0x72, 0x43, 0x41, 0x50, - 0x65, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x50, 0x65, 0x65, - 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x50, - 0x65, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x50, 0x65, 0x65, 0x72, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x20, 0x0a, - 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x20, 0x0a, 0x0b, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd0, 0x01, 0x0a, 0x12, 0x50, - 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x54, 0x72, 0x75, 0x73, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x54, 0x72, 0x75, 0x73, 0x74, 0x44, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, - 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x50, 0x45, 0x4d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x08, 0x52, 0x6f, 0x6f, 0x74, 0x50, 0x45, 0x4d, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x4d, - 0x6f, 0x64, 0x69, 0x66, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x66, 0x0a, - 0x12, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, - 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x41, 0x0a, 0x13, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x07, - 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, - 0x07, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x52, 0x0a, 0x12, 0x50, 0x65, 0x65, 0x72, - 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, - 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x43, 0x0a, 0x13, - 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, - 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x13, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x07, 0x50, 0x65, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x65, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x50, 0x65, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, - 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, - 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x16, 0x0a, 0x14, 0x50, 0x65, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x68, 0x0a, 0x14, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, - 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x17, 0x0a, 0x15, - 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x1f, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, - 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, - 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x59, 0x0a, 0x20, 0x54, 0x72, 0x75, - 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, - 0x07, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x07, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x73, 0x22, 0x6a, 0x0a, 0x16, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, - 0x22, 0x64, 0x0a, 0x17, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, - 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x12, 0x33, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, - 0x69, 0x6e, 0x67, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x06, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x2d, 0x0a, 0x1b, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x49, 0x44, 0x22, 0x1e, 0x0a, 0x1c, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x1e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x12, 0x50, 0x65, 0x65, 0x72, - 0x69, 0x6e, 0x67, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, - 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x52, 0x12, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, - 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x21, 0x0a, 0x1f, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x73, 0x0a, 0x1f, 0x50, 0x65, 0x65, 0x72, - 0x69, 0x6e, 0x67, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, - 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x22, 0x0a, - 0x20, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x65, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x65, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, - 0x6e, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3b, 0x0a, 0x04, 0x4d, 0x65, - 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x3b, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x50, 0x65, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x96, 0x02, - 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, - 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x36, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x49, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, - 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x12, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x94, 0x05, 0x0a, 0x12, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, - 0x65, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, - 0x1a, 0x7f, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x50, - 0x65, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x50, 0x65, 0x65, - 0x72, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x24, 0x0a, 0x05, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x1a, 0x94, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4e, - 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x55, 0x52, 0x4c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x55, 0x52, 0x4c, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x08, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x70, 0x65, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x30, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x53, 0x45, 0x52, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x02, 0x1a, 0x0c, 0x0a, 0x0a, 0x54, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x2a, 0x53, 0x0a, 0x0c, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, - 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x41, 0x49, - 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, - 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x32, 0xea, 0x05, 0x0a, 0x0e, 0x50, 0x65, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x2e, 0x70, 0x65, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x65, 0x65, 0x72, - 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x49, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, - 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x50, 0x65, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x64, 0x12, 0x1b, 0x2e, 0x70, 0x65, 0x65, 0x72, - 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1c, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, - 0x0a, 0x0d, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x1d, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, - 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, - 0x0a, 0x0c, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x1c, - 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, - 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x18, 0x54, - 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x72, 0x75, 0x73, - 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x0f, - 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x12, - 0x1f, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x20, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x54, 0x72, 0x75, 0x73, 0x74, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x1a, 0x1b, 0x2e, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, - 0x01, 0x30, 0x01, 0x42, 0x84, 0x01, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x65, 0x72, - 0x69, 0x6e, 0x67, 0x42, 0x0c, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x70, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0xca, 0x02, 0x07, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0xe2, 0x02, 0x13, 0x50, 0x65, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x07, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_proto_pbpeering_peering_proto_rawDescOnce sync.Once - file_proto_pbpeering_peering_proto_rawDescData = file_proto_pbpeering_peering_proto_rawDesc -) - -func file_proto_pbpeering_peering_proto_rawDescGZIP() []byte { - file_proto_pbpeering_peering_proto_rawDescOnce.Do(func() { - file_proto_pbpeering_peering_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_pbpeering_peering_proto_rawDescData) - }) - return file_proto_pbpeering_peering_proto_rawDescData -} - -var file_proto_pbpeering_peering_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_proto_pbpeering_peering_proto_msgTypes = make([]protoimpl.MessageInfo, 32) -var file_proto_pbpeering_peering_proto_goTypes = []interface{}{ - (PeeringState)(0), // 0: peering.PeeringState - (ReplicationMessage_Response_Operation)(0), // 1: peering.ReplicationMessage.Response.Operation - (*Peering)(nil), // 2: peering.Peering - (*PeeringTrustBundle)(nil), // 3: peering.PeeringTrustBundle - (*PeeringReadRequest)(nil), // 4: peering.PeeringReadRequest - (*PeeringReadResponse)(nil), // 5: peering.PeeringReadResponse - (*PeeringListRequest)(nil), // 6: peering.PeeringListRequest - (*PeeringListResponse)(nil), // 7: peering.PeeringListResponse - (*PeeringWriteRequest)(nil), // 8: peering.PeeringWriteRequest - (*PeeringWriteResponse)(nil), // 9: peering.PeeringWriteResponse - (*PeeringDeleteRequest)(nil), // 10: peering.PeeringDeleteRequest - (*PeeringDeleteResponse)(nil), // 11: peering.PeeringDeleteResponse - (*TrustBundleListByServiceRequest)(nil), // 12: peering.TrustBundleListByServiceRequest - (*TrustBundleListByServiceResponse)(nil), // 13: peering.TrustBundleListByServiceResponse - (*TrustBundleReadRequest)(nil), // 14: peering.TrustBundleReadRequest - (*TrustBundleReadResponse)(nil), // 15: peering.TrustBundleReadResponse - (*PeeringTerminateByIDRequest)(nil), // 16: peering.PeeringTerminateByIDRequest - (*PeeringTerminateByIDResponse)(nil), // 17: peering.PeeringTerminateByIDResponse - (*PeeringTrustBundleWriteRequest)(nil), // 18: peering.PeeringTrustBundleWriteRequest - (*PeeringTrustBundleWriteResponse)(nil), // 19: peering.PeeringTrustBundleWriteResponse - (*PeeringTrustBundleDeleteRequest)(nil), // 20: peering.PeeringTrustBundleDeleteRequest - (*PeeringTrustBundleDeleteResponse)(nil), // 21: peering.PeeringTrustBundleDeleteResponse - (*GenerateTokenRequest)(nil), // 22: peering.GenerateTokenRequest - (*GenerateTokenResponse)(nil), // 23: peering.GenerateTokenResponse - (*InitiateRequest)(nil), // 24: peering.InitiateRequest - (*InitiateResponse)(nil), // 25: peering.InitiateResponse - (*ReplicationMessage)(nil), // 26: peering.ReplicationMessage - nil, // 27: peering.Peering.MetaEntry - nil, // 28: peering.PeeringWriteRequest.MetaEntry - nil, // 29: peering.GenerateTokenRequest.MetaEntry - nil, // 30: peering.InitiateRequest.MetaEntry - (*ReplicationMessage_Request)(nil), // 31: peering.ReplicationMessage.Request - (*ReplicationMessage_Response)(nil), // 32: peering.ReplicationMessage.Response - (*ReplicationMessage_Terminated)(nil), // 33: peering.ReplicationMessage.Terminated - (*pbstatus.Status)(nil), // 34: status.Status - (*anypb.Any)(nil), // 35: google.protobuf.Any -} -var file_proto_pbpeering_peering_proto_depIdxs = []int32{ - 27, // 0: peering.Peering.Meta:type_name -> peering.Peering.MetaEntry - 0, // 1: peering.Peering.State:type_name -> peering.PeeringState - 2, // 2: peering.PeeringReadResponse.Peering:type_name -> peering.Peering - 2, // 3: peering.PeeringListResponse.Peerings:type_name -> peering.Peering - 2, // 4: peering.PeeringWriteRequest.Peering:type_name -> peering.Peering - 28, // 5: peering.PeeringWriteRequest.Meta:type_name -> peering.PeeringWriteRequest.MetaEntry - 3, // 6: peering.TrustBundleListByServiceResponse.Bundles:type_name -> peering.PeeringTrustBundle - 3, // 7: peering.TrustBundleReadResponse.Bundle:type_name -> peering.PeeringTrustBundle - 3, // 8: peering.PeeringTrustBundleWriteRequest.PeeringTrustBundle:type_name -> peering.PeeringTrustBundle - 29, // 9: peering.GenerateTokenRequest.Meta:type_name -> peering.GenerateTokenRequest.MetaEntry - 30, // 10: peering.InitiateRequest.Meta:type_name -> peering.InitiateRequest.MetaEntry - 31, // 11: peering.ReplicationMessage.request:type_name -> peering.ReplicationMessage.Request - 32, // 12: peering.ReplicationMessage.response:type_name -> peering.ReplicationMessage.Response - 33, // 13: peering.ReplicationMessage.terminated:type_name -> peering.ReplicationMessage.Terminated - 34, // 14: peering.ReplicationMessage.Request.Error:type_name -> status.Status - 35, // 15: peering.ReplicationMessage.Response.Resource:type_name -> google.protobuf.Any - 1, // 16: peering.ReplicationMessage.Response.operation:type_name -> peering.ReplicationMessage.Response.Operation - 22, // 17: peering.PeeringService.GenerateToken:input_type -> peering.GenerateTokenRequest - 24, // 18: peering.PeeringService.Initiate:input_type -> peering.InitiateRequest - 4, // 19: peering.PeeringService.PeeringRead:input_type -> peering.PeeringReadRequest - 6, // 20: peering.PeeringService.PeeringList:input_type -> peering.PeeringListRequest - 10, // 21: peering.PeeringService.PeeringDelete:input_type -> peering.PeeringDeleteRequest - 8, // 22: peering.PeeringService.PeeringWrite:input_type -> peering.PeeringWriteRequest - 12, // 23: peering.PeeringService.TrustBundleListByService:input_type -> peering.TrustBundleListByServiceRequest - 14, // 24: peering.PeeringService.TrustBundleRead:input_type -> peering.TrustBundleReadRequest - 26, // 25: peering.PeeringService.StreamResources:input_type -> peering.ReplicationMessage - 23, // 26: peering.PeeringService.GenerateToken:output_type -> peering.GenerateTokenResponse - 25, // 27: peering.PeeringService.Initiate:output_type -> peering.InitiateResponse - 5, // 28: peering.PeeringService.PeeringRead:output_type -> peering.PeeringReadResponse - 7, // 29: peering.PeeringService.PeeringList:output_type -> peering.PeeringListResponse - 11, // 30: peering.PeeringService.PeeringDelete:output_type -> peering.PeeringDeleteResponse - 9, // 31: peering.PeeringService.PeeringWrite:output_type -> peering.PeeringWriteResponse - 13, // 32: peering.PeeringService.TrustBundleListByService:output_type -> peering.TrustBundleListByServiceResponse - 15, // 33: peering.PeeringService.TrustBundleRead:output_type -> peering.TrustBundleReadResponse - 26, // 34: peering.PeeringService.StreamResources:output_type -> peering.ReplicationMessage - 26, // [26:35] is the sub-list for method output_type - 17, // [17:26] is the sub-list for method input_type - 17, // [17:17] is the sub-list for extension type_name - 17, // [17:17] is the sub-list for extension extendee - 0, // [0:17] is the sub-list for field type_name -} - -func init() { file_proto_pbpeering_peering_proto_init() } -func file_proto_pbpeering_peering_proto_init() { - if File_proto_pbpeering_peering_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_proto_pbpeering_peering_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Peering); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringTrustBundle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringReadRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringReadResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringListResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringWriteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringWriteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringDeleteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringDeleteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrustBundleListByServiceRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrustBundleListByServiceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrustBundleReadRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrustBundleReadResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringTerminateByIDRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringTerminateByIDResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringTrustBundleWriteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringTrustBundleWriteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringTrustBundleDeleteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringTrustBundleDeleteResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateTokenRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateTokenResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitiateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitiateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplicationMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplicationMessage_Request); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplicationMessage_Response); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbpeering_peering_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplicationMessage_Terminated); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_proto_pbpeering_peering_proto_msgTypes[24].OneofWrappers = []interface{}{ - (*ReplicationMessage_Request_)(nil), - (*ReplicationMessage_Response_)(nil), - (*ReplicationMessage_Terminated_)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_pbpeering_peering_proto_rawDesc, - NumEnums: 2, - NumMessages: 32, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_proto_pbpeering_peering_proto_goTypes, - DependencyIndexes: file_proto_pbpeering_peering_proto_depIdxs, - EnumInfos: file_proto_pbpeering_peering_proto_enumTypes, - MessageInfos: file_proto_pbpeering_peering_proto_msgTypes, - }.Build() - File_proto_pbpeering_peering_proto = out.File - file_proto_pbpeering_peering_proto_rawDesc = nil - file_proto_pbpeering_peering_proto_goTypes = nil - file_proto_pbpeering_peering_proto_depIdxs = nil -} diff --git a/proto/pbpeering/peering.proto b/proto/pbpeering/peering.proto deleted file mode 100644 index 2103c3fe63837..0000000000000 --- a/proto/pbpeering/peering.proto +++ /dev/null @@ -1,365 +0,0 @@ -syntax = "proto3"; - -package peering; - -import "google/protobuf/any.proto"; -// TODO(peering): Handle this some other way -import "proto/pbstatus/status.proto"; - -// PeeringService handles operations for establishing peering relationships -// between disparate Consul clusters. -service PeeringService { - rpc GenerateToken(GenerateTokenRequest) returns (GenerateTokenResponse); - rpc Initiate(InitiateRequest) returns (InitiateResponse); - rpc PeeringRead(PeeringReadRequest) returns (PeeringReadResponse); - rpc PeeringList(PeeringListRequest) returns (PeeringListResponse); - rpc PeeringDelete(PeeringDeleteRequest) returns (PeeringDeleteResponse); - - // TODO(peering): As of writing, this method is only used in tests to set up Peerings in the state store. - // Consider removing if we can find another way to populate state store in peering_endpoint_test.go - rpc PeeringWrite(PeeringWriteRequest) returns (PeeringWriteResponse); - - // TODO(peering): Rename this to PeeredServiceRoots? or something like that? - rpc TrustBundleListByService(TrustBundleListByServiceRequest) returns (TrustBundleListByServiceResponse); - - rpc TrustBundleRead(TrustBundleReadRequest) returns (TrustBundleReadResponse); - - // StreamResources opens an event stream for resources to share between peers, such as services. - // Events are streamed as they happen. - // buf:lint:ignore RPC_REQUEST_STANDARD_NAME - // buf:lint:ignore RPC_RESPONSE_STANDARD_NAME - // buf:lint:ignore RPC_REQUEST_RESPONSE_UNIQUE - rpc StreamResources(stream ReplicationMessage) returns (stream ReplicationMessage); -} - -// PeeringState enumerates all the states a peering can be in -enum PeeringState { - // Undefined represents an unset value for PeeringState during - // writes. - UNDEFINED = 0; - - // Initial means a Peering has been initialized and is awaiting - // acknowledgement from a remote peer. - INITIAL = 1; - - // Active means that the peering connection is active and healthy. - ACTIVE = 2; - - // Failing means the peering connection has been interrupted but has not yet - // been terminated. - FAILING = 3; - - // Terminated means the peering relationship has been removed. - TERMINATED = 4; -} - -// Peering defines a peering relationship between two disparate Consul clusters -// -// mog annotation: -// -// target=github.com/hashicorp/consul/api.Peering -// output=peering.gen.go -// name=API -message Peering { - // ID is a datacenter-scoped UUID for the peering. - // The ID is generated when a peering is first written to the state store. - string ID = 1; - - // Name is the local alias for the peering relationship. - string Name = 2; - - // Partition is the local partition connecting to the peer. - string Partition = 3; - - // Meta is a mapping of some string value to any other string value - map Meta = 11; - - // State is one of the valid PeeringState values to represent the status of - // peering relationship. - // - // mog: func-to=PeeringStateToAPI func-from=PeeringStateFromAPI - PeeringState State = 4; - - // PeerID is the ID that our peer assigned to this peering. - // This ID is to be used when dialing the peer, so that it can know who dialed it. - string PeerID = 5; - - // PeerCAPems contains all the CA certificates for the remote peer. - repeated string PeerCAPems = 6; - - // PeerServerName is the name of the remote server as it relates to TLS. - string PeerServerName = 7; - - // PeerServerAddresses contains all the the connection addresses for the remote peer. - repeated string PeerServerAddresses = 8; - - // CreateIndex is the Raft index at which the Peering was created. - uint64 CreateIndex = 9; - - // ModifyIndex is the latest Raft index at which the Peering. was modified. - uint64 ModifyIndex = 10; -} - -// PeeringTrustBundle holds the trust information for validating requests from a peer. -message PeeringTrustBundle { - // TrustDomain is the domain for the bundle, example.com, foo.bar.gov for example. Note that this must not have a prefix such as "spiffe://". - string TrustDomain = 1; - - // PeerName associates the trust bundle with a peer. - string PeerName = 2; - - // Partition isolates the bundle from other trust bundles in separate partitions. - string Partition = 3; - - // RootPEMs holds ASN.1 DER encoded X.509 certificate data for the trust bundle. - repeated string RootPEMs = 4; - - // CreateIndex is the Raft index at which the trust domain was created. - uint64 CreateIndex = 5; - - // ModifyIndex is the latest Raft index at which the trust bundle was modified. - uint64 ModifyIndex = 6; -} - -// @consul-rpc-glue: Datacenter,ReadTODO -message PeeringReadRequest { - string Name = 1; - string Partition = 2; - - string Datacenter = 3; - -//TODO(peering) query metadata -} - -message PeeringReadResponse { - Peering Peering = 1; - -//TODO(peering) query metadata -} - -// @consul-rpc-glue: Datacenter,ReadTODO -message PeeringListRequest { - string Partition = 1; - - string Datacenter = 2; - -//TODO(peering) query metadata -} - -message PeeringListResponse { - repeated Peering Peerings = 1; - -//TODO(peering) query metadata -} - -// @consul-rpc-glue: Datacenter,WriteTODO -message PeeringWriteRequest { - Peering Peering = 1; - - //TODO(peering): what to do with embedded write request? - string Datacenter = 2; - - // Meta is a mapping of some string value to any other string value - map Meta = 3; -} - -// TODO(peering): Consider returning Peering if we keep this endpoint around -message PeeringWriteResponse {} - -// @consul-rpc-glue: Datacenter,WriteTODO -message PeeringDeleteRequest { - string Name = 1; - - string Partition = 2; - - //TODO(peering): what to do with embedded write request? - string Datacenter = 3; -} - -message PeeringDeleteResponse {} - -// @consul-rpc-glue: Datacenter,ReadTODO -message TrustBundleListByServiceRequest { - string ServiceName = 1; - string Partition = 2; - - // these are common fields required for implementing structs.RPCInfo methods - // that are used to forward requests - string Datacenter = 3; -} - -message TrustBundleListByServiceResponse { - repeated PeeringTrustBundle Bundles = 1; -} - -// @consul-rpc-glue: Datacenter,ReadTODO -message TrustBundleReadRequest { - string Name = 1; - string Partition = 2; - - // these are common fields required for implementing structs.RPCInfo methods - // that are used to forward requests - string Datacenter = 3; -} - -message TrustBundleReadResponse { - uint64 Index = 1; - PeeringTrustBundle Bundle = 2; -} - -message PeeringTerminateByIDRequest { - string ID = 1; -} - -message PeeringTerminateByIDResponse {} - -// @consul-rpc-glue: Datacenter -message PeeringTrustBundleWriteRequest { - PeeringTrustBundle PeeringTrustBundle = 1; - - //TODO(peering): what to do with embedded write request? - string Datacenter = 2; -} - -message PeeringTrustBundleWriteResponse {} - -// @consul-rpc-glue: Datacenter -message PeeringTrustBundleDeleteRequest { - string Name = 1; - - string Partition = 2; - - //TODO(peering): what to do with embedded write request? - string Datacenter = 3; -} - -message PeeringTrustBundleDeleteResponse {} - -// mog annotation: -// -// target=github.com/hashicorp/consul/api.PeeringGenerateTokenRequest -// output=peering.gen.go -// name=API -message GenerateTokenRequest { - // Name of the remote peer. - string PeerName = 1; - - // Partition is the local partition being peered. - string Partition = 2; - - // these are common fields required for implementing structs.RPCInfo methods - // that are used to forward requests - string Datacenter = 3; - string Token = 4; - - // Meta is a mapping of some string value to any other string value - map Meta = 5; -} - -// mog annotation: -// -// target=github.com/hashicorp/consul/api.PeeringGenerateTokenResponse -// output=peering.gen.go -// name=API -message GenerateTokenResponse { - // PeeringToken is an opaque string provided to the remote peer for it to complete - // the peering initialization handshake. - string PeeringToken = 1; -} - -// @consul-rpc-glue: Datacenter -// -// mog annotation: -// -// target=github.com/hashicorp/consul/api.PeeringInitiateRequest -// output=peering.gen.go -// name=API -message InitiateRequest { - // Name of the remote peer. - string PeerName = 1; - - // The peering token returned from the peer's GenerateToken endpoint. - string PeeringToken = 2; - - // Partition is the local partition being peered. - string Partition = 3; - - // these are common fields required for implementing structs.RPCInfo methods - // that are used to forward requests - string Datacenter = 4; - string Token = 5; - - // Meta is a mapping of some string value to any other string value - map Meta = 6; -} - -// -// mog annotation: -// -// target=github.com/hashicorp/consul/api.PeeringInitiateResponse -// output=peering.gen.go -// name=API -message InitiateResponse {} - -message ReplicationMessage { - oneof Payload { - Request request = 1; - Response response = 2; - Terminated terminated = 3; - } - - // A Request requests to subscribe to a resource of a given type. - message Request { - // An identifier for the peer making the request. - // This identifier is provisioned by the serving peer prior to the request from the dialing peer. - string PeerID = 1; - - // Nonce corresponding to that of the response being ACKed or NACKed. - // Initial subscription requests will have an empty nonce. - // The nonce is generated and incremented by the exporting peer. - string Nonce = 2; - - // The type URL for the resource being requested or ACK/NACKed. - string ResourceURL = 3; - - // The error if the previous response was not applied successfully. - // This field is empty in the first subscription request. - status.Status Error = 4; - } - - // A Response contains resources corresponding to a subscription request. - message Response { - // Nonce identifying a response in a stream. - string Nonce = 1; - - // The type URL of resource being returned. - string ResourceURL = 2; - - // An identifier for the resource being returned. - // This could be the SPIFFE ID of the service. - string ResourceID = 3; - - // The resource being returned. - google.protobuf.Any Resource = 4; - - // Operation enumerates supported operations for replicated resources. - enum Operation { - Unknown = 0; - - // UPSERT represents a create or update event. - UPSERT = 1; - - // DELETE indicates the resource should be deleted. - // In DELETE operations no Resource will be returned. - // Deletion by an importing peer must be done with the type URL and ID. - DELETE = 2; - } - - // REQUIRED. The operation to be performed in relation to the resource. - Operation operation = 5; - } - - // Terminated is sent when a peering is deleted locally. - // This message signals to the peer that they should clean up their local state about the peering. - message Terminated {} -} diff --git a/proto/pbpeering/peering.rpcglue.pb.go b/proto/pbpeering/peering.rpcglue.pb.go deleted file mode 100644 index fe42790a30b73..0000000000000 --- a/proto/pbpeering/peering.rpcglue.pb.go +++ /dev/null @@ -1,319 +0,0 @@ -// Code generated by proto-gen-rpc-glue. DO NOT EDIT. - -package pbpeering - -import ( - "time" - - "github.com/hashicorp/consul/agent/structs" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ structs.RPCInfo -var _ time.Month - -// RequestDatacenter implements structs.RPCInfo -func (msg *PeeringReadRequest) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} - -// IsRead implements structs.RPCInfo -func (msg *PeeringReadRequest) IsRead() bool { - // TODO(peering): figure out read semantics here - return true -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *PeeringReadRequest) AllowStaleRead() bool { - // TODO(peering): figure out read semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *PeeringReadRequest) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out read semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *PeeringReadRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out read semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *PeeringReadRequest) SetTokenSecret(s string) { - // TODO(peering): figure out read semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *PeeringReadRequest) TokenSecret() string { - // TODO(peering): figure out read semantics here - return "" -} - -// Token implements structs.RPCInfo -func (msg *PeeringReadRequest) Token() string { - // TODO(peering): figure out read semantics here - return "" -} - -// RequestDatacenter implements structs.RPCInfo -func (msg *PeeringListRequest) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} - -// IsRead implements structs.RPCInfo -func (msg *PeeringListRequest) IsRead() bool { - // TODO(peering): figure out read semantics here - return true -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *PeeringListRequest) AllowStaleRead() bool { - // TODO(peering): figure out read semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *PeeringListRequest) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out read semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *PeeringListRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out read semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *PeeringListRequest) SetTokenSecret(s string) { - // TODO(peering): figure out read semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *PeeringListRequest) TokenSecret() string { - // TODO(peering): figure out read semantics here - return "" -} - -// Token implements structs.RPCInfo -func (msg *PeeringListRequest) Token() string { - // TODO(peering): figure out read semantics here - return "" -} - -// RequestDatacenter implements structs.RPCInfo -func (msg *PeeringWriteRequest) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} - -// IsRead implements structs.RPCInfo -func (msg *PeeringWriteRequest) IsRead() bool { - // TODO(peering): figure out write semantics here - return false -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *PeeringWriteRequest) AllowStaleRead() bool { - // TODO(peering): figure out write semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *PeeringWriteRequest) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out write semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *PeeringWriteRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out write semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *PeeringWriteRequest) SetTokenSecret(s string) { - // TODO(peering): figure out write semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *PeeringWriteRequest) TokenSecret() string { - // TODO(peering): figure out write semantics here - return "" -} - -// RequestDatacenter implements structs.RPCInfo -func (msg *PeeringDeleteRequest) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} - -// IsRead implements structs.RPCInfo -func (msg *PeeringDeleteRequest) IsRead() bool { - // TODO(peering): figure out write semantics here - return false -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *PeeringDeleteRequest) AllowStaleRead() bool { - // TODO(peering): figure out write semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *PeeringDeleteRequest) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out write semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *PeeringDeleteRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out write semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *PeeringDeleteRequest) SetTokenSecret(s string) { - // TODO(peering): figure out write semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *PeeringDeleteRequest) TokenSecret() string { - // TODO(peering): figure out write semantics here - return "" -} - -// RequestDatacenter implements structs.RPCInfo -func (msg *TrustBundleListByServiceRequest) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} - -// IsRead implements structs.RPCInfo -func (msg *TrustBundleListByServiceRequest) IsRead() bool { - // TODO(peering): figure out read semantics here - return true -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *TrustBundleListByServiceRequest) AllowStaleRead() bool { - // TODO(peering): figure out read semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *TrustBundleListByServiceRequest) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out read semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *TrustBundleListByServiceRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out read semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *TrustBundleListByServiceRequest) SetTokenSecret(s string) { - // TODO(peering): figure out read semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *TrustBundleListByServiceRequest) TokenSecret() string { - // TODO(peering): figure out read semantics here - return "" -} - -// Token implements structs.RPCInfo -func (msg *TrustBundleListByServiceRequest) Token() string { - // TODO(peering): figure out read semantics here - return "" -} - -// RequestDatacenter implements structs.RPCInfo -func (msg *TrustBundleReadRequest) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} - -// IsRead implements structs.RPCInfo -func (msg *TrustBundleReadRequest) IsRead() bool { - // TODO(peering): figure out read semantics here - return true -} - -// AllowStaleRead implements structs.RPCInfo -func (msg *TrustBundleReadRequest) AllowStaleRead() bool { - // TODO(peering): figure out read semantics here - return false -} - -// HasTimedOut implements structs.RPCInfo -func (msg *TrustBundleReadRequest) HasTimedOut(start time.Time, rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) (bool, error) { - // TODO(peering): figure out read semantics here - return time.Since(start) > rpcHoldTimeout, nil -} - -// Timeout implements structs.RPCInfo -func (msg *TrustBundleReadRequest) Timeout(rpcHoldTimeout time.Duration, a time.Duration, b time.Duration) time.Duration { - // TODO(peering): figure out read semantics here - return rpcHoldTimeout -} - -// SetTokenSecret implements structs.RPCInfo -func (msg *TrustBundleReadRequest) SetTokenSecret(s string) { - // TODO(peering): figure out read semantics here -} - -// TokenSecret implements structs.RPCInfo -func (msg *TrustBundleReadRequest) TokenSecret() string { - // TODO(peering): figure out read semantics here - return "" -} - -// Token implements structs.RPCInfo -func (msg *TrustBundleReadRequest) Token() string { - // TODO(peering): figure out read semantics here - return "" -} - -// RequestDatacenter implements structs.RPCInfo -func (msg *PeeringTrustBundleWriteRequest) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} - -// RequestDatacenter implements structs.RPCInfo -func (msg *PeeringTrustBundleDeleteRequest) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} - -// RequestDatacenter implements structs.RPCInfo -func (msg *InitiateRequest) RequestDatacenter() string { - if msg == nil { - return "" - } - return msg.Datacenter -} diff --git a/proto/pbpeering/peering_grpc.pb.go b/proto/pbpeering/peering_grpc.pb.go deleted file mode 100644 index 6b2448e6580dd..0000000000000 --- a/proto/pbpeering/peering_grpc.pb.go +++ /dev/null @@ -1,440 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc (unknown) -// source: proto/pbpeering/peering.proto - -package pbpeering - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -// PeeringServiceClient is the client API for PeeringService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type PeeringServiceClient interface { - GenerateToken(ctx context.Context, in *GenerateTokenRequest, opts ...grpc.CallOption) (*GenerateTokenResponse, error) - Initiate(ctx context.Context, in *InitiateRequest, opts ...grpc.CallOption) (*InitiateResponse, error) - PeeringRead(ctx context.Context, in *PeeringReadRequest, opts ...grpc.CallOption) (*PeeringReadResponse, error) - PeeringList(ctx context.Context, in *PeeringListRequest, opts ...grpc.CallOption) (*PeeringListResponse, error) - PeeringDelete(ctx context.Context, in *PeeringDeleteRequest, opts ...grpc.CallOption) (*PeeringDeleteResponse, error) - // TODO(peering): As of writing, this method is only used in tests to set up Peerings in the state store. - // Consider removing if we can find another way to populate state store in peering_endpoint_test.go - PeeringWrite(ctx context.Context, in *PeeringWriteRequest, opts ...grpc.CallOption) (*PeeringWriteResponse, error) - // TODO(peering): Rename this to PeeredServiceRoots? or something like that? - TrustBundleListByService(ctx context.Context, in *TrustBundleListByServiceRequest, opts ...grpc.CallOption) (*TrustBundleListByServiceResponse, error) - TrustBundleRead(ctx context.Context, in *TrustBundleReadRequest, opts ...grpc.CallOption) (*TrustBundleReadResponse, error) - // StreamResources opens an event stream for resources to share between peers, such as services. - // Events are streamed as they happen. - // buf:lint:ignore RPC_REQUEST_STANDARD_NAME - // buf:lint:ignore RPC_RESPONSE_STANDARD_NAME - // buf:lint:ignore RPC_REQUEST_RESPONSE_UNIQUE - StreamResources(ctx context.Context, opts ...grpc.CallOption) (PeeringService_StreamResourcesClient, error) -} - -type peeringServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewPeeringServiceClient(cc grpc.ClientConnInterface) PeeringServiceClient { - return &peeringServiceClient{cc} -} - -func (c *peeringServiceClient) GenerateToken(ctx context.Context, in *GenerateTokenRequest, opts ...grpc.CallOption) (*GenerateTokenResponse, error) { - out := new(GenerateTokenResponse) - err := c.cc.Invoke(ctx, "/peering.PeeringService/GenerateToken", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *peeringServiceClient) Initiate(ctx context.Context, in *InitiateRequest, opts ...grpc.CallOption) (*InitiateResponse, error) { - out := new(InitiateResponse) - err := c.cc.Invoke(ctx, "/peering.PeeringService/Initiate", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *peeringServiceClient) PeeringRead(ctx context.Context, in *PeeringReadRequest, opts ...grpc.CallOption) (*PeeringReadResponse, error) { - out := new(PeeringReadResponse) - err := c.cc.Invoke(ctx, "/peering.PeeringService/PeeringRead", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *peeringServiceClient) PeeringList(ctx context.Context, in *PeeringListRequest, opts ...grpc.CallOption) (*PeeringListResponse, error) { - out := new(PeeringListResponse) - err := c.cc.Invoke(ctx, "/peering.PeeringService/PeeringList", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *peeringServiceClient) PeeringDelete(ctx context.Context, in *PeeringDeleteRequest, opts ...grpc.CallOption) (*PeeringDeleteResponse, error) { - out := new(PeeringDeleteResponse) - err := c.cc.Invoke(ctx, "/peering.PeeringService/PeeringDelete", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *peeringServiceClient) PeeringWrite(ctx context.Context, in *PeeringWriteRequest, opts ...grpc.CallOption) (*PeeringWriteResponse, error) { - out := new(PeeringWriteResponse) - err := c.cc.Invoke(ctx, "/peering.PeeringService/PeeringWrite", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *peeringServiceClient) TrustBundleListByService(ctx context.Context, in *TrustBundleListByServiceRequest, opts ...grpc.CallOption) (*TrustBundleListByServiceResponse, error) { - out := new(TrustBundleListByServiceResponse) - err := c.cc.Invoke(ctx, "/peering.PeeringService/TrustBundleListByService", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *peeringServiceClient) TrustBundleRead(ctx context.Context, in *TrustBundleReadRequest, opts ...grpc.CallOption) (*TrustBundleReadResponse, error) { - out := new(TrustBundleReadResponse) - err := c.cc.Invoke(ctx, "/peering.PeeringService/TrustBundleRead", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *peeringServiceClient) StreamResources(ctx context.Context, opts ...grpc.CallOption) (PeeringService_StreamResourcesClient, error) { - stream, err := c.cc.NewStream(ctx, &PeeringService_ServiceDesc.Streams[0], "/peering.PeeringService/StreamResources", opts...) - if err != nil { - return nil, err - } - x := &peeringServiceStreamResourcesClient{stream} - return x, nil -} - -type PeeringService_StreamResourcesClient interface { - Send(*ReplicationMessage) error - Recv() (*ReplicationMessage, error) - grpc.ClientStream -} - -type peeringServiceStreamResourcesClient struct { - grpc.ClientStream -} - -func (x *peeringServiceStreamResourcesClient) Send(m *ReplicationMessage) error { - return x.ClientStream.SendMsg(m) -} - -func (x *peeringServiceStreamResourcesClient) Recv() (*ReplicationMessage, error) { - m := new(ReplicationMessage) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// PeeringServiceServer is the server API for PeeringService service. -// All implementations should embed UnimplementedPeeringServiceServer -// for forward compatibility -type PeeringServiceServer interface { - GenerateToken(context.Context, *GenerateTokenRequest) (*GenerateTokenResponse, error) - Initiate(context.Context, *InitiateRequest) (*InitiateResponse, error) - PeeringRead(context.Context, *PeeringReadRequest) (*PeeringReadResponse, error) - PeeringList(context.Context, *PeeringListRequest) (*PeeringListResponse, error) - PeeringDelete(context.Context, *PeeringDeleteRequest) (*PeeringDeleteResponse, error) - // TODO(peering): As of writing, this method is only used in tests to set up Peerings in the state store. - // Consider removing if we can find another way to populate state store in peering_endpoint_test.go - PeeringWrite(context.Context, *PeeringWriteRequest) (*PeeringWriteResponse, error) - // TODO(peering): Rename this to PeeredServiceRoots? or something like that? - TrustBundleListByService(context.Context, *TrustBundleListByServiceRequest) (*TrustBundleListByServiceResponse, error) - TrustBundleRead(context.Context, *TrustBundleReadRequest) (*TrustBundleReadResponse, error) - // StreamResources opens an event stream for resources to share between peers, such as services. - // Events are streamed as they happen. - // buf:lint:ignore RPC_REQUEST_STANDARD_NAME - // buf:lint:ignore RPC_RESPONSE_STANDARD_NAME - // buf:lint:ignore RPC_REQUEST_RESPONSE_UNIQUE - StreamResources(PeeringService_StreamResourcesServer) error -} - -// UnimplementedPeeringServiceServer should be embedded to have forward compatible implementations. -type UnimplementedPeeringServiceServer struct { -} - -func (UnimplementedPeeringServiceServer) GenerateToken(context.Context, *GenerateTokenRequest) (*GenerateTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GenerateToken not implemented") -} -func (UnimplementedPeeringServiceServer) Initiate(context.Context, *InitiateRequest) (*InitiateResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Initiate not implemented") -} -func (UnimplementedPeeringServiceServer) PeeringRead(context.Context, *PeeringReadRequest) (*PeeringReadResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PeeringRead not implemented") -} -func (UnimplementedPeeringServiceServer) PeeringList(context.Context, *PeeringListRequest) (*PeeringListResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PeeringList not implemented") -} -func (UnimplementedPeeringServiceServer) PeeringDelete(context.Context, *PeeringDeleteRequest) (*PeeringDeleteResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PeeringDelete not implemented") -} -func (UnimplementedPeeringServiceServer) PeeringWrite(context.Context, *PeeringWriteRequest) (*PeeringWriteResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PeeringWrite not implemented") -} -func (UnimplementedPeeringServiceServer) TrustBundleListByService(context.Context, *TrustBundleListByServiceRequest) (*TrustBundleListByServiceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TrustBundleListByService not implemented") -} -func (UnimplementedPeeringServiceServer) TrustBundleRead(context.Context, *TrustBundleReadRequest) (*TrustBundleReadResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method TrustBundleRead not implemented") -} -func (UnimplementedPeeringServiceServer) StreamResources(PeeringService_StreamResourcesServer) error { - return status.Errorf(codes.Unimplemented, "method StreamResources not implemented") -} - -// UnsafePeeringServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to PeeringServiceServer will -// result in compilation errors. -type UnsafePeeringServiceServer interface { - mustEmbedUnimplementedPeeringServiceServer() -} - -func RegisterPeeringServiceServer(s grpc.ServiceRegistrar, srv PeeringServiceServer) { - s.RegisterService(&PeeringService_ServiceDesc, srv) -} - -func _PeeringService_GenerateToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GenerateTokenRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeeringServiceServer).GenerateToken(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/peering.PeeringService/GenerateToken", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeeringServiceServer).GenerateToken(ctx, req.(*GenerateTokenRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PeeringService_Initiate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(InitiateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeeringServiceServer).Initiate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/peering.PeeringService/Initiate", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeeringServiceServer).Initiate(ctx, req.(*InitiateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PeeringService_PeeringRead_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PeeringReadRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeeringServiceServer).PeeringRead(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/peering.PeeringService/PeeringRead", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeeringServiceServer).PeeringRead(ctx, req.(*PeeringReadRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PeeringService_PeeringList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PeeringListRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeeringServiceServer).PeeringList(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/peering.PeeringService/PeeringList", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeeringServiceServer).PeeringList(ctx, req.(*PeeringListRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PeeringService_PeeringDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PeeringDeleteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeeringServiceServer).PeeringDelete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/peering.PeeringService/PeeringDelete", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeeringServiceServer).PeeringDelete(ctx, req.(*PeeringDeleteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PeeringService_PeeringWrite_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PeeringWriteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeeringServiceServer).PeeringWrite(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/peering.PeeringService/PeeringWrite", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeeringServiceServer).PeeringWrite(ctx, req.(*PeeringWriteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PeeringService_TrustBundleListByService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TrustBundleListByServiceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeeringServiceServer).TrustBundleListByService(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/peering.PeeringService/TrustBundleListByService", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeeringServiceServer).TrustBundleListByService(ctx, req.(*TrustBundleListByServiceRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PeeringService_TrustBundleRead_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TrustBundleReadRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeeringServiceServer).TrustBundleRead(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/peering.PeeringService/TrustBundleRead", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeeringServiceServer).TrustBundleRead(ctx, req.(*TrustBundleReadRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _PeeringService_StreamResources_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(PeeringServiceServer).StreamResources(&peeringServiceStreamResourcesServer{stream}) -} - -type PeeringService_StreamResourcesServer interface { - Send(*ReplicationMessage) error - Recv() (*ReplicationMessage, error) - grpc.ServerStream -} - -type peeringServiceStreamResourcesServer struct { - grpc.ServerStream -} - -func (x *peeringServiceStreamResourcesServer) Send(m *ReplicationMessage) error { - return x.ServerStream.SendMsg(m) -} - -func (x *peeringServiceStreamResourcesServer) Recv() (*ReplicationMessage, error) { - m := new(ReplicationMessage) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// PeeringService_ServiceDesc is the grpc.ServiceDesc for PeeringService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var PeeringService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "peering.PeeringService", - HandlerType: (*PeeringServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GenerateToken", - Handler: _PeeringService_GenerateToken_Handler, - }, - { - MethodName: "Initiate", - Handler: _PeeringService_Initiate_Handler, - }, - { - MethodName: "PeeringRead", - Handler: _PeeringService_PeeringRead_Handler, - }, - { - MethodName: "PeeringList", - Handler: _PeeringService_PeeringList_Handler, - }, - { - MethodName: "PeeringDelete", - Handler: _PeeringService_PeeringDelete_Handler, - }, - { - MethodName: "PeeringWrite", - Handler: _PeeringService_PeeringWrite_Handler, - }, - { - MethodName: "TrustBundleListByService", - Handler: _PeeringService_TrustBundleListByService_Handler, - }, - { - MethodName: "TrustBundleRead", - Handler: _PeeringService_TrustBundleRead_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "StreamResources", - Handler: _PeeringService_StreamResources_Handler, - ServerStreams: true, - ClientStreams: true, - }, - }, - Metadata: "proto/pbpeering/peering.proto", -} diff --git a/proto/pbpeering/peering_oss.go b/proto/pbpeering/peering_oss.go deleted file mode 100644 index d5e5b4a89613f..0000000000000 --- a/proto/pbpeering/peering_oss.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build !consulent -// +build !consulent - -package pbpeering - -func (r *GenerateTokenRequest) PartitionOrDefault() string { - return "" -} - -func (p *Peering) PartitionOrDefault() string { - return "" -} - -func (ptb *PeeringTrustBundle) PartitionOrDefault() string { - return "" -} diff --git a/proto/pbpeering/types.go b/proto/pbpeering/types.go deleted file mode 100644 index 23847e46e73a6..0000000000000 --- a/proto/pbpeering/types.go +++ /dev/null @@ -1,10 +0,0 @@ -package pbpeering - -const ( - TypeURLService = "type.googleapis.com/consul.api.Service" - TypeURLRoots = "type.googleapis.com/consul.api.CARoots" -) - -func KnownTypeURL(s string) bool { - return s == TypeURLService || s == TypeURLRoots -} diff --git a/proto/pbservice/convert.go b/proto/pbservice/convert.go index d5233dd9907f9..c981d1cb3fab2 100644 --- a/proto/pbservice/convert.go +++ b/proto/pbservice/convert.go @@ -10,9 +10,6 @@ type CheckIDType = types.CheckID type NodeIDType = types.NodeID func RaftIndexToStructs(s *pbcommon.RaftIndex) structs.RaftIndex { - if s == nil { - return structs.RaftIndex{} - } return structs.RaftIndex{ CreateIndex: s.CreateIndex, ModifyIndex: s.ModifyIndex, diff --git a/proto/pbservice/healthcheck.gen.go b/proto/pbservice/healthcheck.gen.go index 4eef24bef72de..a38fd30c2f857 100644 --- a/proto/pbservice/healthcheck.gen.go +++ b/proto/pbservice/healthcheck.gen.go @@ -93,7 +93,6 @@ func HealthCheckToStructs(s *HealthCheck, t *structs.HealthCheck) { t.Interval = s.Interval t.Timeout = s.Timeout t.ExposedPort = int(s.ExposedPort) - t.PeerName = s.PeerName if s.Definition != nil { HealthCheckDefinitionToStructs(s.Definition, &t.Definition) } @@ -117,7 +116,6 @@ func HealthCheckFromStructs(t *structs.HealthCheck, s *HealthCheck) { s.Interval = t.Interval s.Timeout = t.Timeout s.ExposedPort = int32(t.ExposedPort) - s.PeerName = t.PeerName { var x HealthCheckDefinition HealthCheckDefinitionFromStructs(&t.Definition, &x) diff --git a/proto/pbservice/healthcheck.pb.go b/proto/pbservice/healthcheck.pb.go index 317f7f6db26bc..d28ed185c30e1 100644 --- a/proto/pbservice/healthcheck.pb.go +++ b/proto/pbservice/healthcheck.pb.go @@ -1,12 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto/pbservice/healthcheck.proto package pbservice import ( + proto "github.com/golang/protobuf/proto" pbcommon "github.com/hashicorp/consul/proto/pbcommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -22,6 +23,10 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + // HealthCheck represents a single check on a given node // // mog annotation: @@ -54,7 +59,6 @@ type HealthCheck struct { ExposedPort int32 `protobuf:"varint,14,opt,name=ExposedPort,proto3" json:"ExposedPort,omitempty"` Interval string `protobuf:"bytes,15,opt,name=Interval,proto3" json:"Interval,omitempty"` Timeout string `protobuf:"bytes,16,opt,name=Timeout,proto3" json:"Timeout,omitempty"` - PeerName string `protobuf:"bytes,17,opt,name=PeerName,proto3" json:"PeerName,omitempty"` } func (x *HealthCheck) Reset() { @@ -201,13 +205,6 @@ func (x *HealthCheck) GetTimeout() string { return "" } -func (x *HealthCheck) GetPeerName() string { - if x != nil { - return x.PeerName - } - return "" -} - type HeaderValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -801,194 +798,187 @@ var File_proto_pbservice_healthcheck_proto protoreflect.FileDescriptor var file_proto_pbservice_healthcheck_proto_rawDesc = []byte{ 0x0a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x1e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb0, 0x04, 0x0a, 0x0b, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x12, - 0x20, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x61, 0x67, 0x73, - 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, - 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x44, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x09, 0x52, 0x61, 0x66, 0x74, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x09, 0x52, - 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3e, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x45, - 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x23, 0x0a, 0x0b, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0xae, 0x07, 0x0a, 0x15, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x48, - 0x54, 0x54, 0x50, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x54, 0x54, 0x50, 0x12, - 0x24, 0x0a, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x6b, 0x69, 0x70, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x54, 0x4c, - 0x53, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x42, 0x0a, 0x06, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, - 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x44, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, 0x43, 0x50, 0x12, 0x35, 0x0a, 0x08, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4d, - 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x61, 0x0a, 0x1e, 0x44, - 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, - 0x44, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x1e, - 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2c, - 0x0a, 0x11, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x49, 0x44, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x44, 0x6f, 0x63, 0x6b, 0x65, - 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, - 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x53, 0x68, 0x65, - 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x48, 0x32, 0x50, 0x49, 0x4e, 0x47, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x48, 0x32, 0x50, 0x49, 0x4e, 0x47, 0x12, 0x22, 0x0a, 0x0c, 0x48, 0x32, - 0x50, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x48, 0x32, 0x50, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x12, 0x12, - 0x0a, 0x04, 0x47, 0x52, 0x50, 0x43, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x47, 0x52, - 0x50, 0x43, 0x12, 0x1e, 0x0a, 0x0a, 0x47, 0x52, 0x50, 0x43, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x47, 0x52, 0x50, 0x43, 0x55, 0x73, 0x65, 0x54, - 0x4c, 0x53, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x03, 0x54, 0x54, 0x4c, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x1e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x04, 0x0a, 0x0b, + 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, + 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x61, + 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x09, 0x52, + 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x52, 0x09, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3e, 0x0a, 0x0e, + 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, + 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x22, 0x23, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb2, 0x07, 0x0a, 0x15, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x48, 0x54, 0x54, 0x50, 0x12, 0x24, 0x0a, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x54, 0x4c, 0x53, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, + 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x12, 0x44, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x10, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x54, 0x43, 0x50, 0x12, 0x35, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0d, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x33, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x54, 0x54, - 0x4c, 0x1a, 0x4f, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xd0, 0x09, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, - 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0a, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x48, 0x54, 0x54, 0x50, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x54, 0x54, 0x50, - 0x12, 0x36, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x42, 0x6f, 0x64, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, - 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, - 0x12, 0x10, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, - 0x43, 0x50, 0x12, 0x35, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x6c, 0x69, 0x61, 0x73, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x44, - 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x68, 0x65, - 0x6c, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, - 0x16, 0x0a, 0x06, 0x48, 0x32, 0x50, 0x49, 0x4e, 0x47, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x48, 0x32, 0x50, 0x49, 0x4e, 0x47, 0x12, 0x22, 0x0a, 0x0c, 0x48, 0x32, 0x50, 0x69, 0x6e, - 0x67, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x48, - 0x32, 0x50, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x12, 0x12, 0x0a, 0x04, 0x47, - 0x52, 0x50, 0x43, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x47, 0x52, 0x50, 0x43, 0x12, - 0x1e, 0x0a, 0x0a, 0x47, 0x52, 0x50, 0x43, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x47, 0x52, 0x50, 0x43, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x12, - 0x24, 0x0a, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x6b, 0x69, 0x70, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x54, 0x4c, - 0x53, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x33, 0x0a, 0x07, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x12, 0x2b, 0x0a, 0x03, 0x54, 0x54, 0x4c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x61, 0x0a, 0x1e, 0x44, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x54, 0x54, 0x4c, 0x12, 0x32, 0x0a, - 0x14, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x50, 0x61, - 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x12, 0x34, 0x0a, 0x15, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x42, 0x65, 0x66, - 0x6f, 0x72, 0x65, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x15, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x36, 0x0a, 0x16, 0x46, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, - 0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x48, 0x54, 0x54, 0x50, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x48, 0x54, 0x54, 0x50, 0x12, 0x1c, 0x0a, - 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x47, 0x52, 0x50, 0x43, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x47, 0x52, 0x50, 0x43, 0x12, 0x61, 0x0a, 0x1e, 0x44, - 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, - 0x44, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x24, - 0x0a, 0x0d, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4d, 0x61, 0x78, - 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x4f, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x48, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x44, 0x65, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x44, 0x6f, 0x63, 0x6b, + 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x16, 0x0a, 0x06, + 0x48, 0x32, 0x50, 0x49, 0x4e, 0x47, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x48, 0x32, + 0x50, 0x49, 0x4e, 0x47, 0x12, 0x22, 0x0a, 0x0c, 0x48, 0x32, 0x50, 0x69, 0x6e, 0x67, 0x55, 0x73, + 0x65, 0x54, 0x4c, 0x53, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x48, 0x32, 0x50, 0x69, + 0x6e, 0x67, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x52, 0x50, 0x43, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x47, 0x52, 0x50, 0x43, 0x12, 0x1e, 0x0a, 0x0a, + 0x47, 0x52, 0x50, 0x43, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0a, 0x47, 0x52, 0x50, 0x43, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x12, 0x1c, 0x0a, 0x09, + 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x6c, + 0x69, 0x61, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2b, + 0x0a, 0x03, 0x54, 0x54, 0x4c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x54, 0x54, 0x4c, 0x1a, 0x51, 0x0a, 0x0b, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd4, + 0x09, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x54, 0x54, 0x50, 0x12, 0x38, 0x0a, 0x06, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x79, + 0x70, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x42, 0x6f, + 0x64, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x44, 0x69, + 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x54, 0x43, 0x50, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, 0x43, 0x50, + 0x12, 0x35, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x6c, 0x69, 0x61, 0x73, + 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x6c, 0x69, 0x61, + 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x6c, 0x69, + 0x61, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x44, 0x6f, 0x63, + 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x68, 0x65, 0x6c, 0x6c, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x53, 0x68, 0x65, 0x6c, 0x6c, 0x12, 0x16, 0x0a, + 0x06, 0x48, 0x32, 0x50, 0x49, 0x4e, 0x47, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x48, + 0x32, 0x50, 0x49, 0x4e, 0x47, 0x12, 0x22, 0x0a, 0x0c, 0x48, 0x32, 0x50, 0x69, 0x6e, 0x67, 0x55, + 0x73, 0x65, 0x54, 0x4c, 0x53, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x48, 0x32, 0x50, + 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x52, 0x50, + 0x43, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x47, 0x52, 0x50, 0x43, 0x12, 0x1e, 0x0a, + 0x0a, 0x47, 0x52, 0x50, 0x43, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x47, 0x52, 0x50, 0x43, 0x55, 0x73, 0x65, 0x54, 0x4c, 0x53, 0x12, 0x24, 0x0a, + 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x1b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x54, 0x4c, 0x53, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x54, 0x4c, 0x53, 0x53, + 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x33, 0x0a, 0x07, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2b, + 0x0a, 0x03, 0x54, 0x54, 0x4c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x54, 0x54, 0x4c, 0x12, 0x32, 0x0a, 0x14, 0x53, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x12, + 0x34, 0x0a, 0x15, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, + 0x65, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, + 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x57, 0x61, + 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x36, 0x0a, 0x16, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, + 0x73, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x42, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x1c, 0x0a, + 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x48, 0x54, 0x54, 0x50, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x48, 0x54, 0x54, 0x50, 0x12, 0x1c, 0x0a, 0x09, 0x50, + 0x72, 0x6f, 0x78, 0x79, 0x47, 0x52, 0x50, 0x43, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x50, 0x72, 0x6f, 0x78, 0x79, 0x47, 0x52, 0x50, 0x43, 0x12, 0x61, 0x0a, 0x1e, 0x44, 0x65, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1e, 0x44, 0x65, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x19, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x53, 0x69, + 0x7a, 0x65, 0x1a, 0x51, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x88, 0x01, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x10, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xca, 0x02, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0xe2, 0x02, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, + 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1005,32 +995,32 @@ func file_proto_pbservice_healthcheck_proto_rawDescGZIP() []byte { var file_proto_pbservice_healthcheck_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_proto_pbservice_healthcheck_proto_goTypes = []interface{}{ - (*HealthCheck)(nil), // 0: service.HealthCheck - (*HeaderValue)(nil), // 1: service.HeaderValue - (*HealthCheckDefinition)(nil), // 2: service.HealthCheckDefinition - (*CheckType)(nil), // 3: service.CheckType - nil, // 4: service.HealthCheckDefinition.HeaderEntry - nil, // 5: service.CheckType.HeaderEntry + (*HealthCheck)(nil), // 0: pbservice.HealthCheck + (*HeaderValue)(nil), // 1: pbservice.HeaderValue + (*HealthCheckDefinition)(nil), // 2: pbservice.HealthCheckDefinition + (*CheckType)(nil), // 3: pbservice.CheckType + nil, // 4: pbservice.HealthCheckDefinition.HeaderEntry + nil, // 5: pbservice.CheckType.HeaderEntry (*pbcommon.RaftIndex)(nil), // 6: common.RaftIndex (*pbcommon.EnterpriseMeta)(nil), // 7: common.EnterpriseMeta (*durationpb.Duration)(nil), // 8: google.protobuf.Duration } var file_proto_pbservice_healthcheck_proto_depIdxs = []int32{ - 2, // 0: service.HealthCheck.Definition:type_name -> service.HealthCheckDefinition - 6, // 1: service.HealthCheck.RaftIndex:type_name -> common.RaftIndex - 7, // 2: service.HealthCheck.EnterpriseMeta:type_name -> common.EnterpriseMeta - 4, // 3: service.HealthCheckDefinition.Header:type_name -> service.HealthCheckDefinition.HeaderEntry - 8, // 4: service.HealthCheckDefinition.Interval:type_name -> google.protobuf.Duration - 8, // 5: service.HealthCheckDefinition.Timeout:type_name -> google.protobuf.Duration - 8, // 6: service.HealthCheckDefinition.DeregisterCriticalServiceAfter:type_name -> google.protobuf.Duration - 8, // 7: service.HealthCheckDefinition.TTL:type_name -> google.protobuf.Duration - 5, // 8: service.CheckType.Header:type_name -> service.CheckType.HeaderEntry - 8, // 9: service.CheckType.Interval:type_name -> google.protobuf.Duration - 8, // 10: service.CheckType.Timeout:type_name -> google.protobuf.Duration - 8, // 11: service.CheckType.TTL:type_name -> google.protobuf.Duration - 8, // 12: service.CheckType.DeregisterCriticalServiceAfter:type_name -> google.protobuf.Duration - 1, // 13: service.HealthCheckDefinition.HeaderEntry.value:type_name -> service.HeaderValue - 1, // 14: service.CheckType.HeaderEntry.value:type_name -> service.HeaderValue + 2, // 0: pbservice.HealthCheck.Definition:type_name -> pbservice.HealthCheckDefinition + 6, // 1: pbservice.HealthCheck.RaftIndex:type_name -> common.RaftIndex + 7, // 2: pbservice.HealthCheck.EnterpriseMeta:type_name -> common.EnterpriseMeta + 4, // 3: pbservice.HealthCheckDefinition.Header:type_name -> pbservice.HealthCheckDefinition.HeaderEntry + 8, // 4: pbservice.HealthCheckDefinition.Interval:type_name -> google.protobuf.Duration + 8, // 5: pbservice.HealthCheckDefinition.Timeout:type_name -> google.protobuf.Duration + 8, // 6: pbservice.HealthCheckDefinition.DeregisterCriticalServiceAfter:type_name -> google.protobuf.Duration + 8, // 7: pbservice.HealthCheckDefinition.TTL:type_name -> google.protobuf.Duration + 5, // 8: pbservice.CheckType.Header:type_name -> pbservice.CheckType.HeaderEntry + 8, // 9: pbservice.CheckType.Interval:type_name -> google.protobuf.Duration + 8, // 10: pbservice.CheckType.Timeout:type_name -> google.protobuf.Duration + 8, // 11: pbservice.CheckType.TTL:type_name -> google.protobuf.Duration + 8, // 12: pbservice.CheckType.DeregisterCriticalServiceAfter:type_name -> google.protobuf.Duration + 1, // 13: pbservice.HealthCheckDefinition.HeaderEntry.value:type_name -> pbservice.HeaderValue + 1, // 14: pbservice.CheckType.HeaderEntry.value:type_name -> pbservice.HeaderValue 15, // [15:15] is the sub-list for method output_type 15, // [15:15] is the sub-list for method input_type 15, // [15:15] is the sub-list for extension type_name diff --git a/proto/pbservice/healthcheck.proto b/proto/pbservice/healthcheck.proto index 4ce8f8ec72036..67629ba98df5d 100644 --- a/proto/pbservice/healthcheck.proto +++ b/proto/pbservice/healthcheck.proto @@ -1,6 +1,8 @@ syntax = "proto3"; -package service; +package pbservice; + +option go_package = "github.com/hashicorp/consul/proto/pbservice"; import "google/protobuf/duration.proto"; import "proto/pbcommon/common.proto"; @@ -13,36 +15,35 @@ import "proto/pbcommon/common.proto"; // output=healthcheck.gen.go // name=Structs message HealthCheck { - string Node = 1; - // mog: func-to=CheckIDType func-from=string - string CheckID = 2; - string Name = 3; - string Status = 4; // The current check status - string Notes = 5; // Additional notes with the status - string Output = 6; // Holds output of script runs - string ServiceID = 7; // optional associated service - string ServiceName = 8; // optional service name - repeated string ServiceTags = 9; // optional service tags - string Type = 12; // Check type: http/ttl/tcp/etc - - HealthCheckDefinition Definition = 10; - - // mog: func-to=RaftIndexToStructs func-from=NewRaftIndexFromStructs - common.RaftIndex RaftIndex = 11; - - // mog: func-to=EnterpriseMetaToStructs func-from=NewEnterpriseMetaFromStructs - common.EnterpriseMeta EnterpriseMeta = 13; - - // mog: func-to=int func-from=int32 - int32 ExposedPort = 14; - - string Interval = 15; - string Timeout = 16; - string PeerName = 17; + string Node = 1; + // mog: func-to=CheckIDType func-from=string + string CheckID = 2; + string Name = 3; + string Status = 4; // The current check status + string Notes = 5; // Additional notes with the status + string Output = 6; // Holds output of script runs + string ServiceID = 7; // optional associated service + string ServiceName = 8; // optional service name + repeated string ServiceTags = 9; // optional service tags + string Type = 12; // Check type: http/ttl/tcp/etc + + HealthCheckDefinition Definition = 10; + + // mog: func-to=RaftIndexToStructs func-from=NewRaftIndexFromStructs + common.RaftIndex RaftIndex = 11; + + // mog: func-to=EnterpriseMetaToStructs func-from=NewEnterpriseMetaFromStructs + common.EnterpriseMeta EnterpriseMeta = 13; + + // mog: func-to=int func-from=int32 + int32 ExposedPort = 14; + + string Interval = 15; + string Timeout = 16; } message HeaderValue { - repeated string Value = 1; + repeated string Value = 1; } // HealthCheckDefinition of a single HealthCheck. @@ -53,36 +54,36 @@ message HeaderValue { // output=healthcheck.gen.go // name=Structs message HealthCheckDefinition { - string HTTP = 1; - string TLSServerName = 19; - bool TLSSkipVerify = 2; - - // mog: func-to=MapHeadersToStructs func-from=NewMapHeadersFromStructs - map Header = 3; - string Method = 4; - string Body = 18; - bool DisableRedirects = 22; - string TCP = 5; - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration Interval = 6; - - // mog: func-to=uint func-from=uint32 - uint32 OutputMaxSize = 9; - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration Timeout = 7; - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration DeregisterCriticalServiceAfter = 8; - repeated string ScriptArgs = 10; - string DockerContainerID = 11; - string Shell = 12; - string H2PING = 20; - bool H2PingUseTLS = 21; - string GRPC = 13; - bool GRPCUseTLS = 14; - string AliasNode = 15; - string AliasService = 16; - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration TTL = 17; + string HTTP = 1; + string TLSServerName = 19; + bool TLSSkipVerify = 2; + + // mog: func-to=MapHeadersToStructs func-from=NewMapHeadersFromStructs + map Header = 3; + string Method = 4; + string Body = 18; + bool DisableRedirects = 22; + string TCP = 5; + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration Interval = 6; + + // mog: func-to=uint func-from=uint32 + uint32 OutputMaxSize = 9; + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration Timeout = 7; + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration DeregisterCriticalServiceAfter = 8; + repeated string ScriptArgs = 10; + string DockerContainerID = 11; + string Shell = 12; + string H2PING = 20; + bool H2PingUseTLS = 21; + string GRPC = 13; + bool GRPCUseTLS = 14; + string AliasNode = 15; + string AliasService = 16; + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration TTL = 17; } // CheckType is used to create either the CheckMonitor or the CheckTTL. @@ -98,55 +99,55 @@ message HealthCheckDefinition { // output=healthcheck.gen.go // name=Structs message CheckType { - // mog: func-to=CheckIDType func-from=string - string CheckID = 1; - string Name = 2; - string Status = 3; - string Notes = 4; - - repeated string ScriptArgs = 5; - string HTTP = 6; - // mog: func-to=MapHeadersToStructs func-from=NewMapHeadersFromStructs - map Header = 20; - string Method = 7; - string Body = 26; - bool DisableRedirects = 31; - string TCP = 8; - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration Interval = 9; - - string AliasNode = 10; - string AliasService = 11; - string DockerContainerID = 12; - string Shell = 13; - string H2PING = 28; - bool H2PingUseTLS = 30; - string GRPC = 14; - bool GRPCUseTLS = 15; - string TLSServerName = 27; - bool TLSSkipVerify = 16; + // mog: func-to=CheckIDType func-from=string + string CheckID = 1; + string Name = 2; + string Status = 3; + string Notes = 4; + + repeated string ScriptArgs = 5; + string HTTP = 6; + // mog: func-to=MapHeadersToStructs func-from=NewMapHeadersFromStructs + map Header = 20; + string Method = 7; + string Body = 26; + bool DisableRedirects = 31; + string TCP = 8; + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration Interval = 9; + + string AliasNode = 10; + string AliasService = 11; + string DockerContainerID = 12; + string Shell = 13; + string H2PING = 28; + bool H2PingUseTLS = 30; + string GRPC = 14; + bool GRPCUseTLS = 15; + string TLSServerName = 27; + bool TLSSkipVerify = 16; // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration Timeout = 17; + google.protobuf.Duration Timeout = 17; // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration TTL = 18; - - // mog: func-to=int func-from=int32 - int32 SuccessBeforePassing = 21; - // mog: func-to=int func-from=int32 - int32 FailuresBeforeWarning = 29; - // mog: func-to=int func-from=int32 - int32 FailuresBeforeCritical = 22; - - // Definition fields used when exposing checks through a proxy - string ProxyHTTP = 23; - string ProxyGRPC = 24; - - // DeregisterCriticalServiceAfter, if >0, will cause the associated - // service, if any, to be deregistered if this check is critical for - // longer than this duration. - // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto - google.protobuf.Duration DeregisterCriticalServiceAfter = 19; - - // mog: func-to=int func-from=int32 - int32 OutputMaxSize = 25; + google.protobuf.Duration TTL = 18; + + // mog: func-to=int func-from=int32 + int32 SuccessBeforePassing = 21; + // mog: func-to=int func-from=int32 + int32 FailuresBeforeWarning = 29; + // mog: func-to=int func-from=int32 + int32 FailuresBeforeCritical = 22; + + // Definition fields used when exposing checks through a proxy + string ProxyHTTP = 23; + string ProxyGRPC = 24; + + // DeregisterCriticalServiceAfter, if >0, will cause the associated + // service, if any, to be deregistered if this check is critical for + // longer than this duration. + // mog: func-to=structs.DurationFromProto func-from=structs.DurationToProto + google.protobuf.Duration DeregisterCriticalServiceAfter = 19; + + // mog: func-to=int func-from=int32 + int32 OutputMaxSize = 25; } diff --git a/proto/pbservice/ids.go b/proto/pbservice/ids.go index d2a85c7fcd202..ef46d3eaa239f 100644 --- a/proto/pbservice/ids.go +++ b/proto/pbservice/ids.go @@ -22,14 +22,12 @@ func (m *CheckServiceNode) UniqueID() string { switch { case m.Node != nil: builder.WriteString(m.Node.Partition + "/") - builder.WriteString(m.Node.PeerName + "/") case m.Service != nil: partition := "" if m.Service.EnterpriseMeta != nil { partition = m.Service.EnterpriseMeta.Partition } builder.WriteString(partition + "/") - builder.WriteString(m.Service.PeerName + "/") } if m.Node != nil { diff --git a/proto/pbservice/ids_test.go b/proto/pbservice/ids_test.go index 3c933db4b42d9..09d459aaf4caa 100644 --- a/proto/pbservice/ids_test.go +++ b/proto/pbservice/ids_test.go @@ -22,124 +22,40 @@ func TestCheckServiceNode_UniqueID(t *testing.T) { { name: "full", csn: &CheckServiceNode{ - Node: &Node{ - Node: "the-node-name", - PeerName: "my-peer", - Partition: "the-partition", - }, + Node: &Node{Node: "the-node-name"}, Service: &NodeService{ - ID: "the-service-id", - EnterpriseMeta: &pbcommon.EnterpriseMeta{ - Partition: "the-partition", - Namespace: "the-namespace", - }, - PeerName: "my-peer", + ID: "the-service-id", + EnterpriseMeta: &pbcommon.EnterpriseMeta{Namespace: "the-namespace"}, }, }, - expected: "the-partition/my-peer/the-node-name/the-namespace/the-service-id", + expected: "/the-node-name/the-namespace/the-service-id", }, { name: "without node", csn: &CheckServiceNode{ Service: &NodeService{ - ID: "the-service-id", - EnterpriseMeta: &pbcommon.EnterpriseMeta{ - Partition: "the-partition", - Namespace: "the-namespace", - }, - PeerName: "my-peer", + ID: "the-service-id", + EnterpriseMeta: &pbcommon.EnterpriseMeta{Namespace: "the-namespace"}, }, }, - expected: "the-partition/my-peer/the-namespace/the-service-id", + expected: "/the-namespace/the-service-id", }, { name: "without service", csn: &CheckServiceNode{ - Node: &Node{ - Node: "the-node-name", - PeerName: "my-peer", - Partition: "the-partition", - }, + Node: &Node{Node: "the-node-name"}, }, - expected: "the-partition/my-peer/the-node-name/", + expected: "/the-node-name/", }, { name: "without namespace", csn: &CheckServiceNode{ - Node: &Node{ - Node: "the-node-name", - PeerName: "my-peer", - Partition: "the-partition", - }, - Service: &NodeService{ - ID: "the-service-id", - PeerName: "my-peer", - EnterpriseMeta: &pbcommon.EnterpriseMeta{ - Partition: "the-partition", - }, - }, - }, - expected: "the-partition/my-peer/the-node-name//the-service-id", - }, - { - name: "without peer name", - csn: &CheckServiceNode{ - Node: &Node{ - Node: "the-node-name", - Partition: "the-partition", - }, + Node: &Node{Node: "the-node-name"}, Service: &NodeService{ ID: "the-service-id", - EnterpriseMeta: &pbcommon.EnterpriseMeta{ - Partition: "the-partition", - Namespace: "the-namespace", - }, }, }, - expected: "the-partition//the-node-name/the-namespace/the-service-id", - }, - { - name: "without partition", - csn: &CheckServiceNode{ - Node: &Node{ - Node: "the-node-name", - PeerName: "my-peer", - }, - Service: &NodeService{ - ID: "the-service-id", - PeerName: "my-peer", - EnterpriseMeta: &pbcommon.EnterpriseMeta{ - Namespace: "the-namespace", - }, - }, - }, - expected: "/my-peer/the-node-name/the-namespace/the-service-id", - }, - { - name: "without partition or namespace", - csn: &CheckServiceNode{ - Node: &Node{ - Node: "the-node-name", - PeerName: "my-peer", - }, - Service: &NodeService{ - ID: "the-service-id", - PeerName: "my-peer", - }, - }, - expected: "/my-peer/the-node-name//the-service-id", - }, - { - name: "without partition or namespace or peer name", - csn: &CheckServiceNode{ - Node: &Node{ - Node: "the-node-name", - }, - Service: &NodeService{ - ID: "the-service-id", - }, - }, - expected: "//the-node-name//the-service-id", + expected: "/the-node-name//the-service-id", }, } for _, tc := range testCases { @@ -147,4 +63,5 @@ func TestCheckServiceNode_UniqueID(t *testing.T) { fn(t, &tc) }) } + } diff --git a/proto/pbservice/node.gen.go b/proto/pbservice/node.gen.go index f231ea836ab9a..cadf2c7e96904 100644 --- a/proto/pbservice/node.gen.go +++ b/proto/pbservice/node.gen.go @@ -13,7 +13,6 @@ func NodeToStructs(s *Node, t *structs.Node) { t.Address = s.Address t.Datacenter = s.Datacenter t.Partition = s.Partition - t.PeerName = s.PeerName t.TaggedAddresses = s.TaggedAddresses t.Meta = s.Meta t.RaftIndex = RaftIndexToStructs(s.RaftIndex) @@ -27,7 +26,6 @@ func NodeFromStructs(t *structs.Node, s *Node) { s.Address = t.Address s.Datacenter = t.Datacenter s.Partition = t.Partition - s.PeerName = t.PeerName s.TaggedAddresses = t.TaggedAddresses s.Meta = t.Meta s.RaftIndex = NewRaftIndexFromStructs(t.RaftIndex) @@ -55,7 +53,6 @@ func NodeServiceToStructs(s *NodeService, t *structs.NodeService) { } t.LocallyRegisteredAsSidecar = s.LocallyRegisteredAsSidecar t.EnterpriseMeta = EnterpriseMetaToStructs(s.EnterpriseMeta) - t.PeerName = s.PeerName t.RaftIndex = RaftIndexToStructs(s.RaftIndex) } func NodeServiceFromStructs(t *structs.NodeService, s *NodeService) { @@ -85,6 +82,5 @@ func NodeServiceFromStructs(t *structs.NodeService, s *NodeService) { } s.LocallyRegisteredAsSidecar = t.LocallyRegisteredAsSidecar s.EnterpriseMeta = NewEnterpriseMetaFromStructs(t.EnterpriseMeta) - s.PeerName = t.PeerName s.RaftIndex = NewRaftIndexFromStructs(t.RaftIndex) } diff --git a/proto/pbservice/node.pb.binary.go b/proto/pbservice/node.pb.binary.go index f1e2bec68c276..b7533436fb51b 100644 --- a/proto/pbservice/node.pb.binary.go +++ b/proto/pbservice/node.pb.binary.go @@ -7,16 +7,6 @@ import ( "github.com/golang/protobuf/proto" ) -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *IndexedCheckServiceNodes) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *IndexedCheckServiceNodes) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - // MarshalBinary implements encoding.BinaryMarshaler func (msg *CheckServiceNode) MarshalBinary() ([]byte, error) { return proto.Marshal(msg) diff --git a/proto/pbservice/node.pb.go b/proto/pbservice/node.pb.go index fee4534f8a887..44340c9aa6f78 100644 --- a/proto/pbservice/node.pb.go +++ b/proto/pbservice/node.pb.go @@ -1,12 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto/pbservice/node.proto package pbservice import ( + proto "github.com/golang/protobuf/proto" pbcommon "github.com/hashicorp/consul/proto/pbcommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -21,61 +22,9 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// IndexedCheckServiceNodes is used to return multiple instances for a given service. -type IndexedCheckServiceNodes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Index uint64 `protobuf:"varint,1,opt,name=Index,proto3" json:"Index,omitempty"` - Nodes []*CheckServiceNode `protobuf:"bytes,2,rep,name=Nodes,proto3" json:"Nodes,omitempty"` -} - -func (x *IndexedCheckServiceNodes) Reset() { - *x = IndexedCheckServiceNodes{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_node_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IndexedCheckServiceNodes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IndexedCheckServiceNodes) ProtoMessage() {} - -func (x *IndexedCheckServiceNodes) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_node_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IndexedCheckServiceNodes.ProtoReflect.Descriptor instead. -func (*IndexedCheckServiceNodes) Descriptor() ([]byte, []int) { - return file_proto_pbservice_node_proto_rawDescGZIP(), []int{0} -} - -func (x *IndexedCheckServiceNodes) GetIndex() uint64 { - if x != nil { - return x.Index - } - return 0 -} - -func (x *IndexedCheckServiceNodes) GetNodes() []*CheckServiceNode { - if x != nil { - return x.Nodes - } - return nil -} +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 // CheckServiceNode is used to provide the node, its service // definition, as well as a HealthCheck that is associated. @@ -92,7 +41,7 @@ type CheckServiceNode struct { func (x *CheckServiceNode) Reset() { *x = CheckServiceNode{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_node_proto_msgTypes[1] + mi := &file_proto_pbservice_node_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -105,7 +54,7 @@ func (x *CheckServiceNode) String() string { func (*CheckServiceNode) ProtoMessage() {} func (x *CheckServiceNode) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_node_proto_msgTypes[1] + mi := &file_proto_pbservice_node_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -118,7 +67,7 @@ func (x *CheckServiceNode) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckServiceNode.ProtoReflect.Descriptor instead. func (*CheckServiceNode) Descriptor() ([]byte, []int) { - return file_proto_pbservice_node_proto_rawDescGZIP(), []int{1} + return file_proto_pbservice_node_proto_rawDescGZIP(), []int{0} } func (x *CheckServiceNode) GetNode() *Node { @@ -158,7 +107,6 @@ type Node struct { ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` Node string `protobuf:"bytes,2,opt,name=Node,proto3" json:"Node,omitempty"` Partition string `protobuf:"bytes,8,opt,name=Partition,proto3" json:"Partition,omitempty"` - PeerName string `protobuf:"bytes,9,opt,name=PeerName,proto3" json:"PeerName,omitempty"` Address string `protobuf:"bytes,3,opt,name=Address,proto3" json:"Address,omitempty"` Datacenter string `protobuf:"bytes,4,opt,name=Datacenter,proto3" json:"Datacenter,omitempty"` TaggedAddresses map[string]string `protobuf:"bytes,5,rep,name=TaggedAddresses,proto3" json:"TaggedAddresses,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -170,7 +118,7 @@ type Node struct { func (x *Node) Reset() { *x = Node{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_node_proto_msgTypes[2] + mi := &file_proto_pbservice_node_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -183,7 +131,7 @@ func (x *Node) String() string { func (*Node) ProtoMessage() {} func (x *Node) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_node_proto_msgTypes[2] + mi := &file_proto_pbservice_node_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -196,7 +144,7 @@ func (x *Node) ProtoReflect() protoreflect.Message { // Deprecated: Use Node.ProtoReflect.Descriptor instead. func (*Node) Descriptor() ([]byte, []int) { - return file_proto_pbservice_node_proto_rawDescGZIP(), []int{2} + return file_proto_pbservice_node_proto_rawDescGZIP(), []int{1} } func (x *Node) GetID() string { @@ -220,13 +168,6 @@ func (x *Node) GetPartition() string { return "" } -func (x *Node) GetPeerName() string { - if x != nil { - return x.PeerName - } - return "" -} - func (x *Node) GetAddress() string { if x != nil { return x.Address @@ -326,7 +267,6 @@ type NodeService struct { LocallyRegisteredAsSidecar bool `protobuf:"varint,13,opt,name=LocallyRegisteredAsSidecar,proto3" json:"LocallyRegisteredAsSidecar,omitempty"` // mog: func-to=EnterpriseMetaToStructs func-from=NewEnterpriseMetaFromStructs EnterpriseMeta *pbcommon.EnterpriseMeta `protobuf:"bytes,16,opt,name=EnterpriseMeta,proto3" json:"EnterpriseMeta,omitempty"` - PeerName string `protobuf:"bytes,18,opt,name=PeerName,proto3" json:"PeerName,omitempty"` // mog: func-to=RaftIndexToStructs func-from=NewRaftIndexFromStructs RaftIndex *pbcommon.RaftIndex `protobuf:"bytes,14,opt,name=RaftIndex,proto3" json:"RaftIndex,omitempty"` } @@ -334,7 +274,7 @@ type NodeService struct { func (x *NodeService) Reset() { *x = NodeService{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_node_proto_msgTypes[3] + mi := &file_proto_pbservice_node_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -347,7 +287,7 @@ func (x *NodeService) String() string { func (*NodeService) ProtoMessage() {} func (x *NodeService) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_node_proto_msgTypes[3] + mi := &file_proto_pbservice_node_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -360,7 +300,7 @@ func (x *NodeService) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeService.ProtoReflect.Descriptor instead. func (*NodeService) Descriptor() ([]byte, []int) { - return file_proto_pbservice_node_proto_rawDescGZIP(), []int{3} + return file_proto_pbservice_node_proto_rawDescGZIP(), []int{2} } func (x *NodeService) GetKind() string { @@ -468,13 +408,6 @@ func (x *NodeService) GetEnterpriseMeta() *pbcommon.EnterpriseMeta { return nil } -func (x *NodeService) GetPeerName() string { - if x != nil { - return x.PeerName - } - return "" -} - func (x *NodeService) GetRaftIndex() *pbcommon.RaftIndex { if x != nil { return x.RaftIndex @@ -486,120 +419,107 @@ var File_proto_pbservice_node_proto protoreflect.FileDescriptor var file_proto_pbservice_node_proto_rawDesc = []byte{ 0x0a, 0x1a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x1b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x61, 0x0a, 0x18, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2f, 0x0a, 0x05, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x05, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x93, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x0a, 0x04, - 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x2e, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x2c, 0x0a, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x22, 0xc7, 0x03, - 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x65, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, - 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x4c, - 0x0a, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x54, 0x61, 0x67, - 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x04, - 0x4d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x09, 0x52, 0x61, 0x66, - 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, - 0x09, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x42, 0x0a, 0x14, 0x54, 0x61, - 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, - 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd9, 0x06, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x53, 0x0a, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x50, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, 0x6f, 0x72, 0x74, - 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x2a, 0x0a, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x73, 0x52, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x11, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, - 0x61, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x31, 0x0a, - 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x12, 0x3e, 0x0a, 0x1a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x41, 0x73, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x41, 0x73, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, - 0x12, 0x3e, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x09, - 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x52, 0x09, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x5b, 0x0a, - 0x14, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x42, 0x81, 0x01, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x42, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, - 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xa2, 0x02, 0x03, - 0x53, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xca, 0x02, 0x07, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xe2, 0x02, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x70, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x1b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, + 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x99, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x4e, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x30, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, + 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x48, + 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x06, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x22, 0xaf, 0x03, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, + 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x4e, 0x0a, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, + 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x09, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x09, 0x52, 0x61, + 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x42, 0x0a, 0x14, 0x54, 0x61, 0x67, 0x67, 0x65, + 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x4d, + 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc9, 0x06, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x55, 0x0a, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, + 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, 0x6f, 0x72, + 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x2c, 0x0a, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x52, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, + 0x2c, 0x0a, 0x11, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x4f, 0x76, 0x65, 0x72, + 0x72, 0x69, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x61, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x33, 0x0a, + 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x50, 0x72, 0x6f, + 0x78, 0x79, 0x12, 0x33, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x07, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x3e, 0x0a, 0x1a, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x6c, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x41, 0x73, 0x53, 0x69, + 0x64, 0x65, 0x63, 0x61, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x41, 0x73, + 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x12, 0x3e, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, + 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, + 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, + 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x09, 0x52, 0x61, 0x66, 0x74, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x09, 0x52, + 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x5d, 0x0a, 0x14, 0x54, 0x61, 0x67, 0x67, + 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, + 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -614,45 +534,43 @@ func file_proto_pbservice_node_proto_rawDescGZIP() []byte { return file_proto_pbservice_node_proto_rawDescData } -var file_proto_pbservice_node_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_proto_pbservice_node_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_proto_pbservice_node_proto_goTypes = []interface{}{ - (*IndexedCheckServiceNodes)(nil), // 0: service.IndexedCheckServiceNodes - (*CheckServiceNode)(nil), // 1: service.CheckServiceNode - (*Node)(nil), // 2: service.Node - (*NodeService)(nil), // 3: service.NodeService - nil, // 4: service.Node.TaggedAddressesEntry - nil, // 5: service.Node.MetaEntry - nil, // 6: service.NodeService.TaggedAddressesEntry - nil, // 7: service.NodeService.MetaEntry - (*HealthCheck)(nil), // 8: service.HealthCheck - (*pbcommon.RaftIndex)(nil), // 9: common.RaftIndex - (*Weights)(nil), // 10: service.Weights - (*ConnectProxyConfig)(nil), // 11: service.ConnectProxyConfig - (*ServiceConnect)(nil), // 12: service.ServiceConnect - (*pbcommon.EnterpriseMeta)(nil), // 13: common.EnterpriseMeta - (*ServiceAddress)(nil), // 14: service.ServiceAddress + (*CheckServiceNode)(nil), // 0: pbservice.CheckServiceNode + (*Node)(nil), // 1: pbservice.Node + (*NodeService)(nil), // 2: pbservice.NodeService + nil, // 3: pbservice.Node.TaggedAddressesEntry + nil, // 4: pbservice.Node.MetaEntry + nil, // 5: pbservice.NodeService.TaggedAddressesEntry + nil, // 6: pbservice.NodeService.MetaEntry + (*HealthCheck)(nil), // 7: pbservice.HealthCheck + (*pbcommon.RaftIndex)(nil), // 8: common.RaftIndex + (*Weights)(nil), // 9: pbservice.Weights + (*ConnectProxyConfig)(nil), // 10: pbservice.ConnectProxyConfig + (*ServiceConnect)(nil), // 11: pbservice.ServiceConnect + (*pbcommon.EnterpriseMeta)(nil), // 12: common.EnterpriseMeta + (*ServiceAddress)(nil), // 13: pbservice.ServiceAddress } var file_proto_pbservice_node_proto_depIdxs = []int32{ - 1, // 0: service.IndexedCheckServiceNodes.Nodes:type_name -> service.CheckServiceNode - 2, // 1: service.CheckServiceNode.Node:type_name -> service.Node - 3, // 2: service.CheckServiceNode.Service:type_name -> service.NodeService - 8, // 3: service.CheckServiceNode.Checks:type_name -> service.HealthCheck - 4, // 4: service.Node.TaggedAddresses:type_name -> service.Node.TaggedAddressesEntry - 5, // 5: service.Node.Meta:type_name -> service.Node.MetaEntry - 9, // 6: service.Node.RaftIndex:type_name -> common.RaftIndex - 6, // 7: service.NodeService.TaggedAddresses:type_name -> service.NodeService.TaggedAddressesEntry - 7, // 8: service.NodeService.Meta:type_name -> service.NodeService.MetaEntry - 10, // 9: service.NodeService.Weights:type_name -> service.Weights - 11, // 10: service.NodeService.Proxy:type_name -> service.ConnectProxyConfig - 12, // 11: service.NodeService.Connect:type_name -> service.ServiceConnect - 13, // 12: service.NodeService.EnterpriseMeta:type_name -> common.EnterpriseMeta - 9, // 13: service.NodeService.RaftIndex:type_name -> common.RaftIndex - 14, // 14: service.NodeService.TaggedAddressesEntry.value:type_name -> service.ServiceAddress - 15, // [15:15] is the sub-list for method output_type - 15, // [15:15] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 1, // 0: pbservice.CheckServiceNode.Node:type_name -> pbservice.Node + 2, // 1: pbservice.CheckServiceNode.Service:type_name -> pbservice.NodeService + 7, // 2: pbservice.CheckServiceNode.Checks:type_name -> pbservice.HealthCheck + 3, // 3: pbservice.Node.TaggedAddresses:type_name -> pbservice.Node.TaggedAddressesEntry + 4, // 4: pbservice.Node.Meta:type_name -> pbservice.Node.MetaEntry + 8, // 5: pbservice.Node.RaftIndex:type_name -> common.RaftIndex + 5, // 6: pbservice.NodeService.TaggedAddresses:type_name -> pbservice.NodeService.TaggedAddressesEntry + 6, // 7: pbservice.NodeService.Meta:type_name -> pbservice.NodeService.MetaEntry + 9, // 8: pbservice.NodeService.Weights:type_name -> pbservice.Weights + 10, // 9: pbservice.NodeService.Proxy:type_name -> pbservice.ConnectProxyConfig + 11, // 10: pbservice.NodeService.Connect:type_name -> pbservice.ServiceConnect + 12, // 11: pbservice.NodeService.EnterpriseMeta:type_name -> common.EnterpriseMeta + 8, // 12: pbservice.NodeService.RaftIndex:type_name -> common.RaftIndex + 13, // 13: pbservice.NodeService.TaggedAddressesEntry.value:type_name -> pbservice.ServiceAddress + 14, // [14:14] is the sub-list for method output_type + 14, // [14:14] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_proto_pbservice_node_proto_init() } @@ -664,18 +582,6 @@ func file_proto_pbservice_node_proto_init() { file_proto_pbservice_service_proto_init() if !protoimpl.UnsafeEnabled { file_proto_pbservice_node_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IndexedCheckServiceNodes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbservice_node_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CheckServiceNode); i { case 0: return &v.state @@ -687,7 +593,7 @@ func file_proto_pbservice_node_proto_init() { return nil } } - file_proto_pbservice_node_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_proto_pbservice_node_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Node); i { case 0: return &v.state @@ -699,7 +605,7 @@ func file_proto_pbservice_node_proto_init() { return nil } } - file_proto_pbservice_node_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_proto_pbservice_node_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NodeService); i { case 0: return &v.state @@ -718,7 +624,7 @@ func file_proto_pbservice_node_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_pbservice_node_proto_rawDesc, NumEnums: 0, - NumMessages: 8, + NumMessages: 7, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/pbservice/node.proto b/proto/pbservice/node.proto index b26bac51fcc26..4b83893520326 100644 --- a/proto/pbservice/node.proto +++ b/proto/pbservice/node.proto @@ -1,17 +1,13 @@ syntax = "proto3"; -package service; +package pbservice; + +option go_package = "github.com/hashicorp/consul/proto/pbservice"; import "proto/pbcommon/common.proto"; import "proto/pbservice/healthcheck.proto"; import "proto/pbservice/service.proto"; -// IndexedCheckServiceNodes is used to return multiple instances for a given service. -message IndexedCheckServiceNodes { - uint64 Index = 1; - repeated CheckServiceNode Nodes = 2; -} - // CheckServiceNode is used to provide the node, its service // definition, as well as a HealthCheck that is associated. message CheckServiceNode { @@ -33,7 +29,6 @@ message Node { string Node = 2; string Partition = 8; - string PeerName = 9; string Address = 3; string Datacenter = 4; map TaggedAddresses = 5; @@ -110,8 +105,6 @@ message NodeService { // mog: func-to=EnterpriseMetaToStructs func-from=NewEnterpriseMetaFromStructs common.EnterpriseMeta EnterpriseMeta = 16; - string PeerName = 18; - // mog: func-to=RaftIndexToStructs func-from=NewRaftIndexFromStructs common.RaftIndex RaftIndex = 14; } diff --git a/proto/pbservice/service.gen.go b/proto/pbservice/service.gen.go index 952133bf8f334..9644f7c876904 100644 --- a/proto/pbservice/service.gen.go +++ b/proto/pbservice/service.gen.go @@ -100,33 +100,12 @@ func MeshGatewayConfigFromStructs(t *structs.MeshGatewayConfig, s *MeshGatewayCo } s.Mode = string(t.Mode) } -func PeeringServiceMetaToStructs(s *PeeringServiceMeta, t *structs.PeeringServiceMeta) { - if s == nil { - return - } - t.SNI = s.SNI - t.SpiffeID = s.SpiffeID - t.Protocol = s.Protocol -} -func PeeringServiceMetaFromStructs(t *structs.PeeringServiceMeta, s *PeeringServiceMeta) { - if s == nil { - return - } - s.SNI = t.SNI - s.SpiffeID = t.SpiffeID - s.Protocol = t.Protocol -} func ServiceConnectToStructs(s *ServiceConnect, t *structs.ServiceConnect) { if s == nil { return } t.Native = s.Native t.SidecarService = ServiceDefinitionPtrToStructs(s.SidecarService) - if s.PeerMeta != nil { - var x structs.PeeringServiceMeta - PeeringServiceMetaToStructs(s.PeerMeta, &x) - t.PeerMeta = &x - } } func ServiceConnectFromStructs(t *structs.ServiceConnect, s *ServiceConnect) { if s == nil { @@ -134,11 +113,6 @@ func ServiceConnectFromStructs(t *structs.ServiceConnect, s *ServiceConnect) { } s.Native = t.Native s.SidecarService = NewServiceDefinitionPtrFromStructs(t.SidecarService) - if t.PeerMeta != nil { - var x PeeringServiceMeta - PeeringServiceMetaFromStructs(t.PeerMeta, &x) - s.PeerMeta = &x - } } func ServiceDefinitionToStructs(s *ServiceDefinition, t *structs.ServiceDefinition) { if s == nil { @@ -211,7 +185,6 @@ func UpstreamToStructs(s *Upstream, t *structs.Upstream) { t.DestinationType = s.DestinationType t.DestinationNamespace = s.DestinationNamespace t.DestinationPartition = s.DestinationPartition - t.DestinationPeer = s.DestinationPeer t.DestinationName = s.DestinationName t.Datacenter = s.Datacenter t.LocalBindAddress = s.LocalBindAddress @@ -231,7 +204,6 @@ func UpstreamFromStructs(t *structs.Upstream, s *Upstream) { s.DestinationType = t.DestinationType s.DestinationNamespace = t.DestinationNamespace s.DestinationPartition = t.DestinationPartition - s.DestinationPeer = t.DestinationPeer s.DestinationName = t.DestinationName s.Datacenter = t.Datacenter s.LocalBindAddress = t.LocalBindAddress diff --git a/proto/pbservice/service.pb.binary.go b/proto/pbservice/service.pb.binary.go index 9819f4dcdd7e2..aa449f239a751 100644 --- a/proto/pbservice/service.pb.binary.go +++ b/proto/pbservice/service.pb.binary.go @@ -37,16 +37,6 @@ func (msg *ServiceConnect) UnmarshalBinary(b []byte) error { return proto.Unmarshal(b, msg) } -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *PeeringServiceMeta) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *PeeringServiceMeta) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} - // MarshalBinary implements encoding.BinaryMarshaler func (msg *ExposeConfig) MarshalBinary() ([]byte, error) { return proto.Marshal(msg) diff --git a/proto/pbservice/service.pb.go b/proto/pbservice/service.pb.go index 89ff546dc53d2..5749c39283a8d 100644 --- a/proto/pbservice/service.pb.go +++ b/proto/pbservice/service.pb.go @@ -1,12 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto/pbservice/service.proto package pbservice import ( + proto "github.com/golang/protobuf/proto" pbcommon "github.com/hashicorp/consul/proto/pbcommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -22,6 +23,10 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + // ConnectProxyConfig describes the configuration needed for any proxy managed // or unmanaged. It describes a single logical service's listener and optionally // upstreams and sidecar-related config for a single instance. To describe a @@ -215,8 +220,6 @@ type Upstream struct { // on service definitions in various places. DestinationType string `protobuf:"bytes,1,opt,name=DestinationType,proto3" json:"DestinationType,omitempty"` DestinationNamespace string `protobuf:"bytes,2,opt,name=DestinationNamespace,proto3" json:"DestinationNamespace,omitempty"` - DestinationPartition string `protobuf:"bytes,12,opt,name=DestinationPartition,proto3" json:"DestinationPartition,omitempty"` - DestinationPeer string `protobuf:"bytes,13,opt,name=DestinationPeer,proto3" json:"DestinationPeer,omitempty"` DestinationName string `protobuf:"bytes,3,opt,name=DestinationName,proto3" json:"DestinationName,omitempty"` // Datacenter that the service discovery request should be run against. Note // for prepared queries, the actual results might be from a different @@ -240,8 +243,9 @@ type Upstream struct { // instance registration or whether it was generated from a config entry. CentrallyConfigured bool `protobuf:"varint,9,opt,name=CentrallyConfigured,proto3" json:"CentrallyConfigured,omitempty"` // LocalBindSocketPath is the socket to create to connect to the upstream service - LocalBindSocketPath string `protobuf:"bytes,10,opt,name=LocalBindSocketPath,proto3" json:"LocalBindSocketPath,omitempty"` - LocalBindSocketMode string `protobuf:"bytes,11,opt,name=LocalBindSocketMode,proto3" json:"LocalBindSocketMode,omitempty"` + LocalBindSocketPath string `protobuf:"bytes,10,opt,name=LocalBindSocketPath,proto3" json:"LocalBindSocketPath,omitempty"` + LocalBindSocketMode string `protobuf:"bytes,11,opt,name=LocalBindSocketMode,proto3" json:"LocalBindSocketMode,omitempty"` + DestinationPartition string `protobuf:"bytes,12,opt,name=DestinationPartition,proto3" json:"DestinationPartition,omitempty"` } func (x *Upstream) Reset() { @@ -290,20 +294,6 @@ func (x *Upstream) GetDestinationNamespace() string { return "" } -func (x *Upstream) GetDestinationPartition() string { - if x != nil { - return x.DestinationPartition - } - return "" -} - -func (x *Upstream) GetDestinationPeer() string { - if x != nil { - return x.DestinationPeer - } - return "" -} - func (x *Upstream) GetDestinationName() string { if x != nil { return x.DestinationName @@ -367,6 +357,13 @@ func (x *Upstream) GetLocalBindSocketMode() string { return "" } +func (x *Upstream) GetDestinationPartition() string { + if x != nil { + return x.DestinationPartition + } + return "" +} + // ServiceConnect are the shared Connect settings between all service // definitions from the agent to the state store. // mog annotation: @@ -389,8 +386,7 @@ type ServiceConnect struct { // result is identical to just making a second service registration via any // other means. // mog: func-to=ServiceDefinitionPtrToStructs func-from=NewServiceDefinitionPtrFromStructs - SidecarService *ServiceDefinition `protobuf:"bytes,3,opt,name=SidecarService,proto3" json:"SidecarService,omitempty"` - PeerMeta *PeeringServiceMeta `protobuf:"bytes,4,opt,name=PeerMeta,proto3" json:"PeerMeta,omitempty"` + SidecarService *ServiceDefinition `protobuf:"bytes,3,opt,name=SidecarService,proto3" json:"SidecarService,omitempty"` } func (x *ServiceConnect) Reset() { @@ -439,83 +435,6 @@ func (x *ServiceConnect) GetSidecarService() *ServiceDefinition { return nil } -func (x *ServiceConnect) GetPeerMeta() *PeeringServiceMeta { - if x != nil { - return x.PeerMeta - } - return nil -} - -// PeeringServiceMeta is read-only information provided from an exported peer. -// -// mog annotation: -// -// target=github.com/hashicorp/consul/agent/structs.PeeringServiceMeta -// output=service.gen.go -// name=Structs -type PeeringServiceMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SNI []string `protobuf:"bytes,1,rep,name=SNI,proto3" json:"SNI,omitempty"` - SpiffeID []string `protobuf:"bytes,2,rep,name=SpiffeID,proto3" json:"SpiffeID,omitempty"` - Protocol string `protobuf:"bytes,3,opt,name=Protocol,proto3" json:"Protocol,omitempty"` -} - -func (x *PeeringServiceMeta) Reset() { - *x = PeeringServiceMeta{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_service_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PeeringServiceMeta) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PeeringServiceMeta) ProtoMessage() {} - -func (x *PeeringServiceMeta) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_service_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PeeringServiceMeta.ProtoReflect.Descriptor instead. -func (*PeeringServiceMeta) Descriptor() ([]byte, []int) { - return file_proto_pbservice_service_proto_rawDescGZIP(), []int{3} -} - -func (x *PeeringServiceMeta) GetSNI() []string { - if x != nil { - return x.SNI - } - return nil -} - -func (x *PeeringServiceMeta) GetSpiffeID() []string { - if x != nil { - return x.SpiffeID - } - return nil -} - -func (x *PeeringServiceMeta) GetProtocol() string { - if x != nil { - return x.Protocol - } - return "" -} - // ExposeConfig describes HTTP paths to expose through Envoy outside of Connect. // Users can expose individual paths and/or all HTTP/GRPC paths for checks. // @@ -540,7 +459,7 @@ type ExposeConfig struct { func (x *ExposeConfig) Reset() { *x = ExposeConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_service_proto_msgTypes[4] + mi := &file_proto_pbservice_service_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -553,7 +472,7 @@ func (x *ExposeConfig) String() string { func (*ExposeConfig) ProtoMessage() {} func (x *ExposeConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_service_proto_msgTypes[4] + mi := &file_proto_pbservice_service_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -566,7 +485,7 @@ func (x *ExposeConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ExposeConfig.ProtoReflect.Descriptor instead. func (*ExposeConfig) Descriptor() ([]byte, []int) { - return file_proto_pbservice_service_proto_rawDescGZIP(), []int{4} + return file_proto_pbservice_service_proto_rawDescGZIP(), []int{3} } func (x *ExposeConfig) GetChecks() bool { @@ -611,7 +530,7 @@ type ExposePath struct { func (x *ExposePath) Reset() { *x = ExposePath{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_service_proto_msgTypes[5] + mi := &file_proto_pbservice_service_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -624,7 +543,7 @@ func (x *ExposePath) String() string { func (*ExposePath) ProtoMessage() {} func (x *ExposePath) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_service_proto_msgTypes[5] + mi := &file_proto_pbservice_service_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -637,7 +556,7 @@ func (x *ExposePath) ProtoReflect() protoreflect.Message { // Deprecated: Use ExposePath.ProtoReflect.Descriptor instead. func (*ExposePath) Descriptor() ([]byte, []int) { - return file_proto_pbservice_service_proto_rawDescGZIP(), []int{5} + return file_proto_pbservice_service_proto_rawDescGZIP(), []int{4} } func (x *ExposePath) GetListenerPort() int32 { @@ -692,7 +611,7 @@ type MeshGatewayConfig struct { func (x *MeshGatewayConfig) Reset() { *x = MeshGatewayConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_service_proto_msgTypes[6] + mi := &file_proto_pbservice_service_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -705,7 +624,7 @@ func (x *MeshGatewayConfig) String() string { func (*MeshGatewayConfig) ProtoMessage() {} func (x *MeshGatewayConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_service_proto_msgTypes[6] + mi := &file_proto_pbservice_service_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -718,7 +637,7 @@ func (x *MeshGatewayConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use MeshGatewayConfig.ProtoReflect.Descriptor instead. func (*MeshGatewayConfig) Descriptor() ([]byte, []int) { - return file_proto_pbservice_service_proto_rawDescGZIP(), []int{6} + return file_proto_pbservice_service_proto_rawDescGZIP(), []int{5} } func (x *MeshGatewayConfig) GetMode() string { @@ -749,7 +668,7 @@ type TransparentProxyConfig struct { func (x *TransparentProxyConfig) Reset() { *x = TransparentProxyConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_service_proto_msgTypes[7] + mi := &file_proto_pbservice_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -762,7 +681,7 @@ func (x *TransparentProxyConfig) String() string { func (*TransparentProxyConfig) ProtoMessage() {} func (x *TransparentProxyConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_service_proto_msgTypes[7] + mi := &file_proto_pbservice_service_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -775,7 +694,7 @@ func (x *TransparentProxyConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use TransparentProxyConfig.ProtoReflect.Descriptor instead. func (*TransparentProxyConfig) Descriptor() ([]byte, []int) { - return file_proto_pbservice_service_proto_rawDescGZIP(), []int{7} + return file_proto_pbservice_service_proto_rawDescGZIP(), []int{6} } func (x *TransparentProxyConfig) GetOutboundListenerPort() int32 { @@ -846,7 +765,7 @@ type ServiceDefinition struct { func (x *ServiceDefinition) Reset() { *x = ServiceDefinition{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_service_proto_msgTypes[8] + mi := &file_proto_pbservice_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -859,7 +778,7 @@ func (x *ServiceDefinition) String() string { func (*ServiceDefinition) ProtoMessage() {} func (x *ServiceDefinition) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_service_proto_msgTypes[8] + mi := &file_proto_pbservice_service_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -872,7 +791,7 @@ func (x *ServiceDefinition) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceDefinition.ProtoReflect.Descriptor instead. func (*ServiceDefinition) Descriptor() ([]byte, []int) { - return file_proto_pbservice_service_proto_rawDescGZIP(), []int{8} + return file_proto_pbservice_service_proto_rawDescGZIP(), []int{7} } func (x *ServiceDefinition) GetKind() string { @@ -1008,7 +927,7 @@ type ServiceAddress struct { func (x *ServiceAddress) Reset() { *x = ServiceAddress{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_service_proto_msgTypes[9] + mi := &file_proto_pbservice_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1021,7 +940,7 @@ func (x *ServiceAddress) String() string { func (*ServiceAddress) ProtoMessage() {} func (x *ServiceAddress) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_service_proto_msgTypes[9] + mi := &file_proto_pbservice_service_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1034,7 +953,7 @@ func (x *ServiceAddress) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceAddress.ProtoReflect.Descriptor instead. func (*ServiceAddress) Descriptor() ([]byte, []int) { - return file_proto_pbservice_service_proto_rawDescGZIP(), []int{9} + return file_proto_pbservice_service_proto_rawDescGZIP(), []int{8} } func (x *ServiceAddress) GetAddress() string { @@ -1066,7 +985,7 @@ type Weights struct { func (x *Weights) Reset() { *x = Weights{} if protoimpl.UnsafeEnabled { - mi := &file_proto_pbservice_service_proto_msgTypes[10] + mi := &file_proto_pbservice_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1079,7 +998,7 @@ func (x *Weights) String() string { func (*Weights) ProtoMessage() {} func (x *Weights) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbservice_service_proto_msgTypes[10] + mi := &file_proto_pbservice_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1092,7 +1011,7 @@ func (x *Weights) ProtoReflect() protoreflect.Message { // Deprecated: Use Weights.ProtoReflect.Descriptor instead. func (*Weights) Descriptor() ([]byte, []int) { - return file_proto_pbservice_service_proto_rawDescGZIP(), []int{10} + return file_proto_pbservice_service_proto_rawDescGZIP(), []int{9} } func (x *Weights) GetPassing() int32 { @@ -1114,201 +1033,184 @@ var File_proto_pbservice_service_proto protoreflect.FileDescriptor var file_proto_pbservice_service_proto_rawDesc = []byte{ 0x0a, 0x1d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc6, 0x04, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x36, 0x0a, + 0x09, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x70, 0x62, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xce, 0x04, 0x0a, 0x12, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x36, 0x0a, 0x16, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x44, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x13, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x4c, - 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2f, 0x0a, 0x09, 0x55, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x09, - 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x0b, 0x4d, 0x65, 0x73, - 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4d, 0x65, 0x73, 0x68, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2d, 0x0a, 0x06, 0x45, 0x78, 0x70, 0x6f, 0x73, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, - 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x4b, 0x0a, 0x10, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x36, 0x0a, 0x16, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, - 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, - 0xe7, 0x04, 0x0a, 0x08, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x28, 0x0a, 0x0f, - 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, - 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x65, - 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, - 0x0a, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, - 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x12, 0x30, 0x0a, 0x13, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x13, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, - 0x6e, 0x64, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, + 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x13, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, + 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x55, 0x70, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x52, 0x09, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x3e, 0x0a, + 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4d, + 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2f, 0x0a, + 0x06, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x12, 0x36, 0x0a, 0x16, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x16, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0xbf, 0x04, 0x0a, 0x08, 0x55, 0x70, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x28, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x44, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2a, + 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, + 0x69, 0x6e, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, + 0x12, 0x2f, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x3e, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x12, 0x30, 0x0a, 0x13, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, + 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, + 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x6f, 0x63, 0x6b, 0x65, + 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, + 0x6e, 0x64, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x53, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x30, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x42, 0x69, 0x6e, 0x64, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x53, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x0e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, - 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, - 0x4d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4d, 0x65, 0x74, - 0x61, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x5e, 0x0a, 0x12, 0x50, 0x65, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x10, 0x0a, - 0x03, 0x53, 0x4e, 0x49, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x53, 0x4e, 0x49, 0x12, - 0x1a, 0x0a, 0x08, 0x53, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x53, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x51, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x73, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, - 0x29, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x50, - 0x61, 0x74, 0x68, 0x52, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x0a, 0x45, - 0x78, 0x70, 0x6f, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x4c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x50, 0x6f, - 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, - 0x61, 0x74, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x46, 0x72, 0x6f, - 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x50, 0x61, - 0x72, 0x73, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x27, 0x0a, - 0x11, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x74, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x32, 0x0a, 0x14, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, - 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, - 0x50, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x44, 0x69, 0x61, 0x6c, 0x65, 0x64, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x44, 0x69, - 0x61, 0x6c, 0x65, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x22, 0xc4, 0x06, 0x0a, - 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x61, - 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x59, 0x0a, 0x0f, 0x54, 0x61, 0x67, 0x67, - 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x61, - 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, - 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, 0x6f, 0x72, - 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x28, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x06, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x6b, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6e, 0x0a, 0x0e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x4e, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x53, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x53, 0x69, 0x64, + 0x65, 0x63, 0x61, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x53, 0x0a, 0x0c, 0x45, + 0x78, 0x70, 0x6f, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x12, 0x2b, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, + 0x78, 0x70, 0x6f, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, + 0x22, 0xb0, 0x01, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x22, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, + 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x50, 0x61, 0x74, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x74, 0x68, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x61, 0x72, + 0x73, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0f, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x22, 0x27, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x74, 0x0a, 0x16, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32, 0x0a, 0x14, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x44, 0x69, + 0x61, 0x6c, 0x65, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x44, 0x69, 0x61, 0x6c, 0x65, 0x64, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6c, 0x79, 0x22, 0xd4, 0x06, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, + 0x54, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x5b, + 0x0a, 0x0f, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x54, 0x61, 0x67, 0x67, + 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x04, 0x4d, + 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x53, + 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2a, 0x0a, 0x05, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x2c, 0x0a, 0x06, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x12, 0x2c, 0x0a, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x52, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x4f, - 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x3e, 0x0a, 0x0e, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x07, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x1a, 0x5b, 0x0a, - 0x14, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x3e, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, - 0x6f, 0x72, 0x74, 0x22, 0x3d, 0x0a, 0x07, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x42, 0x84, 0x01, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, - 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xa2, - 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xca, - 0x02, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0xe2, 0x02, 0x13, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x12, 0x3e, 0x0a, 0x0e, + 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x07, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x1a, 0x5d, 0x0a, 0x14, 0x54, 0x61, 0x67, 0x67, 0x65, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3e, 0x0a, 0x0e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x3d, 0x0a, 0x07, 0x57, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x50, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x12, 0x18, + 0x0a, 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, + 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1323,50 +1225,48 @@ func file_proto_pbservice_service_proto_rawDescGZIP() []byte { return file_proto_pbservice_service_proto_rawDescData } -var file_proto_pbservice_service_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_proto_pbservice_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_proto_pbservice_service_proto_goTypes = []interface{}{ - (*ConnectProxyConfig)(nil), // 0: service.ConnectProxyConfig - (*Upstream)(nil), // 1: service.Upstream - (*ServiceConnect)(nil), // 2: service.ServiceConnect - (*PeeringServiceMeta)(nil), // 3: service.PeeringServiceMeta - (*ExposeConfig)(nil), // 4: service.ExposeConfig - (*ExposePath)(nil), // 5: service.ExposePath - (*MeshGatewayConfig)(nil), // 6: service.MeshGatewayConfig - (*TransparentProxyConfig)(nil), // 7: service.TransparentProxyConfig - (*ServiceDefinition)(nil), // 8: service.ServiceDefinition - (*ServiceAddress)(nil), // 9: service.ServiceAddress - (*Weights)(nil), // 10: service.Weights - nil, // 11: service.ServiceDefinition.TaggedAddressesEntry - nil, // 12: service.ServiceDefinition.MetaEntry - (*structpb.Struct)(nil), // 13: google.protobuf.Struct - (*CheckType)(nil), // 14: service.CheckType - (*pbcommon.EnterpriseMeta)(nil), // 15: common.EnterpriseMeta + (*ConnectProxyConfig)(nil), // 0: pbservice.ConnectProxyConfig + (*Upstream)(nil), // 1: pbservice.Upstream + (*ServiceConnect)(nil), // 2: pbservice.ServiceConnect + (*ExposeConfig)(nil), // 3: pbservice.ExposeConfig + (*ExposePath)(nil), // 4: pbservice.ExposePath + (*MeshGatewayConfig)(nil), // 5: pbservice.MeshGatewayConfig + (*TransparentProxyConfig)(nil), // 6: pbservice.TransparentProxyConfig + (*ServiceDefinition)(nil), // 7: pbservice.ServiceDefinition + (*ServiceAddress)(nil), // 8: pbservice.ServiceAddress + (*Weights)(nil), // 9: pbservice.Weights + nil, // 10: pbservice.ServiceDefinition.TaggedAddressesEntry + nil, // 11: pbservice.ServiceDefinition.MetaEntry + (*structpb.Struct)(nil), // 12: google.protobuf.Struct + (*CheckType)(nil), // 13: pbservice.CheckType + (*pbcommon.EnterpriseMeta)(nil), // 14: common.EnterpriseMeta } var file_proto_pbservice_service_proto_depIdxs = []int32{ - 13, // 0: service.ConnectProxyConfig.Config:type_name -> google.protobuf.Struct - 1, // 1: service.ConnectProxyConfig.Upstreams:type_name -> service.Upstream - 6, // 2: service.ConnectProxyConfig.MeshGateway:type_name -> service.MeshGatewayConfig - 4, // 3: service.ConnectProxyConfig.Expose:type_name -> service.ExposeConfig - 7, // 4: service.ConnectProxyConfig.TransparentProxy:type_name -> service.TransparentProxyConfig - 13, // 5: service.Upstream.Config:type_name -> google.protobuf.Struct - 6, // 6: service.Upstream.MeshGateway:type_name -> service.MeshGatewayConfig - 8, // 7: service.ServiceConnect.SidecarService:type_name -> service.ServiceDefinition - 3, // 8: service.ServiceConnect.PeerMeta:type_name -> service.PeeringServiceMeta - 5, // 9: service.ExposeConfig.Paths:type_name -> service.ExposePath - 11, // 10: service.ServiceDefinition.TaggedAddresses:type_name -> service.ServiceDefinition.TaggedAddressesEntry - 12, // 11: service.ServiceDefinition.Meta:type_name -> service.ServiceDefinition.MetaEntry - 14, // 12: service.ServiceDefinition.Check:type_name -> service.CheckType - 14, // 13: service.ServiceDefinition.Checks:type_name -> service.CheckType - 10, // 14: service.ServiceDefinition.Weights:type_name -> service.Weights - 0, // 15: service.ServiceDefinition.Proxy:type_name -> service.ConnectProxyConfig - 15, // 16: service.ServiceDefinition.EnterpriseMeta:type_name -> common.EnterpriseMeta - 2, // 17: service.ServiceDefinition.Connect:type_name -> service.ServiceConnect - 9, // 18: service.ServiceDefinition.TaggedAddressesEntry.value:type_name -> service.ServiceAddress - 19, // [19:19] is the sub-list for method output_type - 19, // [19:19] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 12, // 0: pbservice.ConnectProxyConfig.Config:type_name -> google.protobuf.Struct + 1, // 1: pbservice.ConnectProxyConfig.Upstreams:type_name -> pbservice.Upstream + 5, // 2: pbservice.ConnectProxyConfig.MeshGateway:type_name -> pbservice.MeshGatewayConfig + 3, // 3: pbservice.ConnectProxyConfig.Expose:type_name -> pbservice.ExposeConfig + 6, // 4: pbservice.ConnectProxyConfig.TransparentProxy:type_name -> pbservice.TransparentProxyConfig + 12, // 5: pbservice.Upstream.Config:type_name -> google.protobuf.Struct + 5, // 6: pbservice.Upstream.MeshGateway:type_name -> pbservice.MeshGatewayConfig + 7, // 7: pbservice.ServiceConnect.SidecarService:type_name -> pbservice.ServiceDefinition + 4, // 8: pbservice.ExposeConfig.Paths:type_name -> pbservice.ExposePath + 10, // 9: pbservice.ServiceDefinition.TaggedAddresses:type_name -> pbservice.ServiceDefinition.TaggedAddressesEntry + 11, // 10: pbservice.ServiceDefinition.Meta:type_name -> pbservice.ServiceDefinition.MetaEntry + 13, // 11: pbservice.ServiceDefinition.Check:type_name -> pbservice.CheckType + 13, // 12: pbservice.ServiceDefinition.Checks:type_name -> pbservice.CheckType + 9, // 13: pbservice.ServiceDefinition.Weights:type_name -> pbservice.Weights + 0, // 14: pbservice.ServiceDefinition.Proxy:type_name -> pbservice.ConnectProxyConfig + 14, // 15: pbservice.ServiceDefinition.EnterpriseMeta:type_name -> common.EnterpriseMeta + 2, // 16: pbservice.ServiceDefinition.Connect:type_name -> pbservice.ServiceConnect + 8, // 17: pbservice.ServiceDefinition.TaggedAddressesEntry.value:type_name -> pbservice.ServiceAddress + 18, // [18:18] is the sub-list for method output_type + 18, // [18:18] is the sub-list for method input_type + 18, // [18:18] is the sub-list for extension type_name + 18, // [18:18] is the sub-list for extension extendee + 0, // [0:18] is the sub-list for field type_name } func init() { file_proto_pbservice_service_proto_init() } @@ -1413,18 +1313,6 @@ func file_proto_pbservice_service_proto_init() { } } file_proto_pbservice_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeeringServiceMeta); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_pbservice_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExposeConfig); i { case 0: return &v.state @@ -1436,7 +1324,7 @@ func file_proto_pbservice_service_proto_init() { return nil } } - file_proto_pbservice_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_proto_pbservice_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExposePath); i { case 0: return &v.state @@ -1448,7 +1336,7 @@ func file_proto_pbservice_service_proto_init() { return nil } } - file_proto_pbservice_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_proto_pbservice_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MeshGatewayConfig); i { case 0: return &v.state @@ -1460,7 +1348,7 @@ func file_proto_pbservice_service_proto_init() { return nil } } - file_proto_pbservice_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_proto_pbservice_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransparentProxyConfig); i { case 0: return &v.state @@ -1472,7 +1360,7 @@ func file_proto_pbservice_service_proto_init() { return nil } } - file_proto_pbservice_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_proto_pbservice_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceDefinition); i { case 0: return &v.state @@ -1484,7 +1372,7 @@ func file_proto_pbservice_service_proto_init() { return nil } } - file_proto_pbservice_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_proto_pbservice_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceAddress); i { case 0: return &v.state @@ -1496,7 +1384,7 @@ func file_proto_pbservice_service_proto_init() { return nil } } - file_proto_pbservice_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_proto_pbservice_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Weights); i { case 0: return &v.state @@ -1515,7 +1403,7 @@ func file_proto_pbservice_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_pbservice_service_proto_rawDesc, NumEnums: 0, - NumMessages: 13, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/pbservice/service.proto b/proto/pbservice/service.proto index 9c7956a0d5cb1..64860625b1508 100644 --- a/proto/pbservice/service.proto +++ b/proto/pbservice/service.proto @@ -1,11 +1,14 @@ syntax = "proto3"; -package service; +package pbservice; + +option go_package = "github.com/hashicorp/consul/proto/pbservice"; import "google/protobuf/struct.proto"; import "proto/pbcommon/common.proto"; import "proto/pbservice/healthcheck.proto"; + // ConnectProxyConfig describes the configuration needed for any proxy managed // or unmanaged. It describes a single logical service's listener and optionally // upstreams and sidecar-related config for a single instance. To describe a @@ -18,57 +21,57 @@ import "proto/pbservice/healthcheck.proto"; // output=service.gen.go // name=Structs message ConnectProxyConfig { - // DestinationServiceName is required and is the name of the service to accept - // traffic for. - string DestinationServiceName = 1; - - // DestinationServiceID is optional and should only be specified for - // "side-car" style proxies where the proxy is in front of just a single - // instance of the service. It should be set to the service ID of the instance - // being represented which must be registered to the same agent. It's valid to - // provide a service ID that does not yet exist to avoid timing issues when - // bootstrapping a service with a proxy. - string DestinationServiceID = 2; - - // LocalServiceAddress is the address of the local service instance. It is - // optional and should only be specified for "side-car" style proxies. It will - // default to 127.0.0.1 if the proxy is a "side-car" (DestinationServiceID is - // set) but otherwise will be ignored. - string LocalServiceAddress = 3; - - // LocalServicePort is the port of the local service instance. It is optional - // and should only be specified for "side-car" style proxies. It will default - // to the registered port for the instance if the proxy is a "side-car" - // (DestinationServiceID is set) but otherwise will be ignored. - // mog: func-to=int func-from=int32 - int32 LocalServicePort = 4; - - // Config is the arbitrary configuration data provided with the proxy - // registration. - // mog: func-to=ProtobufTypesStructToMapStringInterface func-from=MapStringInterfaceToProtobufTypesStruct - google.protobuf.Struct Config = 5; - - // Upstreams describes any upstream dependencies the proxy instance should - // setup. - // mog: func-to=UpstreamsToStructs func-from=NewUpstreamsFromStructs - repeated Upstream Upstreams = 6; - - // MeshGateway defines the mesh gateway configuration for upstreams - MeshGatewayConfig MeshGateway = 7; - - // Expose defines whether checks or paths are exposed through the proxy - ExposeConfig Expose = 8; - - // Mode represents how the proxy's inbound and upstream listeners are dialed. - // mog: func-to=structs.ProxyMode func-from=string - string Mode = 9; - - // TransparentProxy defines configuration for when the proxy is in - // transparent mode. - TransparentProxyConfig TransparentProxy = 10; - - // LocalServiceSocketPath is the path to the unix domain socket for the local service instance - string LocalServiceSocketPath = 11; + // DestinationServiceName is required and is the name of the service to accept + // traffic for. + string DestinationServiceName = 1; + + // DestinationServiceID is optional and should only be specified for + // "side-car" style proxies where the proxy is in front of just a single + // instance of the service. It should be set to the service ID of the instance + // being represented which must be registered to the same agent. It's valid to + // provide a service ID that does not yet exist to avoid timing issues when + // bootstrapping a service with a proxy. + string DestinationServiceID = 2; + + // LocalServiceAddress is the address of the local service instance. It is + // optional and should only be specified for "side-car" style proxies. It will + // default to 127.0.0.1 if the proxy is a "side-car" (DestinationServiceID is + // set) but otherwise will be ignored. + string LocalServiceAddress = 3; + + // LocalServicePort is the port of the local service instance. It is optional + // and should only be specified for "side-car" style proxies. It will default + // to the registered port for the instance if the proxy is a "side-car" + // (DestinationServiceID is set) but otherwise will be ignored. + // mog: func-to=int func-from=int32 + int32 LocalServicePort = 4; + + // Config is the arbitrary configuration data provided with the proxy + // registration. + // mog: func-to=ProtobufTypesStructToMapStringInterface func-from=MapStringInterfaceToProtobufTypesStruct + google.protobuf.Struct Config = 5; + + // Upstreams describes any upstream dependencies the proxy instance should + // setup. + // mog: func-to=UpstreamsToStructs func-from=NewUpstreamsFromStructs + repeated Upstream Upstreams = 6; + + // MeshGateway defines the mesh gateway configuration for upstreams + MeshGatewayConfig MeshGateway = 7; + + // Expose defines whether checks or paths are exposed through the proxy + ExposeConfig Expose = 8; + + // Mode represents how the proxy's inbound and upstream listeners are dialed. + // mog: func-to=structs.ProxyMode func-from=string + string Mode = 9; + + // TransparentProxy defines configuration for when the proxy is in + // transparent mode. + TransparentProxyConfig TransparentProxy = 10; + + // LocalServiceSocketPath is the path to the unix domain socket for the local service instance + string LocalServiceSocketPath = 11; } // Upstream represents a single upstream dependency for a service or proxy. It @@ -83,49 +86,48 @@ message ConnectProxyConfig { // name=Structs // ignore-fields=IngressHosts message Upstream { - // Destination fields are the required ones for determining what this upstream - // points to. Depending on DestinationType some other fields below might - // further restrict the set of instances allowable. - // - // DestinationType would be better as an int constant but even with custom - // JSON marshallers it causes havoc with all the mapstructure mangling we do - // on service definitions in various places. - string DestinationType = 1; - string DestinationNamespace = 2; - string DestinationPartition = 12; - string DestinationPeer = 13; - string DestinationName = 3; - - // Datacenter that the service discovery request should be run against. Note - // for prepared queries, the actual results might be from a different - // datacenter. - string Datacenter = 4; - - // LocalBindAddress is the ip address a side-car proxy should listen on for - // traffic destined for this upstream service. Default if empty is 127.0.0.1. - string LocalBindAddress = 5; - - // LocalBindPort is the ip address a side-car proxy should listen on for - // traffic destined for this upstream service. Required. - // mog: func-to=int func-from=int32 - int32 LocalBindPort = 6; - - // Config is an opaque config that is specific to the proxy process being run. - // It can be used to pass arbitrary configuration for this specific upstream - // to the proxy. - // mog: func-to=ProtobufTypesStructToMapStringInterface func-from=MapStringInterfaceToProtobufTypesStruct - google.protobuf.Struct Config = 7; - - // MeshGateway is the configuration for mesh gateway usage of this upstream - MeshGatewayConfig MeshGateway = 8; - - // CentrallyConfigured indicates whether the upstream was defined in a proxy - // instance registration or whether it was generated from a config entry. - bool CentrallyConfigured = 9; - - // LocalBindSocketPath is the socket to create to connect to the upstream service - string LocalBindSocketPath = 10; - string LocalBindSocketMode = 11; + // Destination fields are the required ones for determining what this upstream + // points to. Depending on DestinationType some other fields below might + // further restrict the set of instances allowable. + // + // DestinationType would be better as an int constant but even with custom + // JSON marshallers it causes havoc with all the mapstructure mangling we do + // on service definitions in various places. + string DestinationType = 1; + string DestinationNamespace = 2; + string DestinationName = 3; + + // Datacenter that the service discovery request should be run against. Note + // for prepared queries, the actual results might be from a different + // datacenter. + string Datacenter = 4; + + // LocalBindAddress is the ip address a side-car proxy should listen on for + // traffic destined for this upstream service. Default if empty is 127.0.0.1. + string LocalBindAddress = 5; + + // LocalBindPort is the ip address a side-car proxy should listen on for + // traffic destined for this upstream service. Required. + // mog: func-to=int func-from=int32 + int32 LocalBindPort = 6; + + // Config is an opaque config that is specific to the proxy process being run. + // It can be used to pass arbitrary configuration for this specific upstream + // to the proxy. + // mog: func-to=ProtobufTypesStructToMapStringInterface func-from=MapStringInterfaceToProtobufTypesStruct + google.protobuf.Struct Config = 7; + + // MeshGateway is the configuration for mesh gateway usage of this upstream + MeshGatewayConfig MeshGateway = 8; + + // CentrallyConfigured indicates whether the upstream was defined in a proxy + // instance registration or whether it was generated from a config entry. + bool CentrallyConfigured = 9; + + // LocalBindSocketPath is the socket to create to connect to the upstream service + string LocalBindSocketPath = 10; + string LocalBindSocketMode = 11; + string DestinationPartition = 12; } // ServiceConnect are the shared Connect settings between all service @@ -136,35 +138,18 @@ message Upstream { // output=service.gen.go // name=Structs message ServiceConnect { - // Native is true when this service can natively understand Connect. - bool Native = 1; - - reserved 2; - - // SidecarService is a nested Service Definition to register at the same time. - // It's purely a convenience mechanism to allow specifying a sidecar service - // along with the application service definition. It's nested nature allows - // all of the fields to be defaulted which can reduce the amount of - // boilerplate needed to register a sidecar service separately, but the end - // result is identical to just making a second service registration via any - // other means. - // mog: func-to=ServiceDefinitionPtrToStructs func-from=NewServiceDefinitionPtrFromStructs - ServiceDefinition SidecarService = 3; - - PeeringServiceMeta PeerMeta = 4; -} - -// PeeringServiceMeta is read-only information provided from an exported peer. -// -// mog annotation: -// -// target=github.com/hashicorp/consul/agent/structs.PeeringServiceMeta -// output=service.gen.go -// name=Structs -message PeeringServiceMeta { - repeated string SNI = 1; - repeated string SpiffeID = 2; - string Protocol = 3; + // Native is true when this service can natively understand Connect. + bool Native = 1; + + // SidecarService is a nested Service Definition to register at the same time. + // It's purely a convenience mechanism to allow specifying a sidecar service + // along with the application service definition. It's nested nature allows + // all of the fields to be defaulted which can reduce the amount of + // boilerplate needed to register a sidecar service separately, but the end + // result is identical to just making a second service registration via any + // other means. + // mog: func-to=ServiceDefinitionPtrToStructs func-from=NewServiceDefinitionPtrFromStructs + ServiceDefinition SidecarService = 3; } // ExposeConfig describes HTTP paths to expose through Envoy outside of Connect. @@ -176,13 +161,13 @@ message PeeringServiceMeta { // output=service.gen.go // name=Structs message ExposeConfig { - // Checks defines whether paths associated with Consul checks will be exposed. - // This flag triggers exposing all HTTP and GRPC check paths registered for the service. - bool Checks = 1; + // Checks defines whether paths associated with Consul checks will be exposed. + // This flag triggers exposing all HTTP and GRPC check paths registered for the service. + bool Checks = 1; - // Paths is the list of paths exposed through the proxy. - // mog: func-to=ExposePathSliceToStructs func-from=NewExposePathSliceFromStructs - repeated ExposePath Paths = 2; + // Paths is the list of paths exposed through the proxy. + // mog: func-to=ExposePathSliceToStructs func-from=NewExposePathSliceFromStructs + repeated ExposePath Paths = 2; } // mog annotation: @@ -191,23 +176,23 @@ message ExposeConfig { // output=service.gen.go // name=Structs message ExposePath { - // ListenerPort defines the port of the proxy's listener for exposed paths. - // mog: func-to=int func-from=int32 - int32 ListenerPort = 1; + // ListenerPort defines the port of the proxy's listener for exposed paths. + // mog: func-to=int func-from=int32 + int32 ListenerPort = 1; - // ExposePath is the path to expose through the proxy, ie. "/metrics." - string Path = 2; + // ExposePath is the path to expose through the proxy, ie. "/metrics." + string Path = 2; - // LocalPathPort is the port that the service is listening on for the given path. - // mog: func-to=int func-from=int32 - int32 LocalPathPort = 3; + // LocalPathPort is the port that the service is listening on for the given path. + // mog: func-to=int func-from=int32 + int32 LocalPathPort = 3; - // Protocol describes the upstream's service protocol. - // Valid values are "http" and "http2", defaults to "http" - string Protocol = 4; + // Protocol describes the upstream's service protocol. + // Valid values are "http" and "http2", defaults to "http" + string Protocol = 4; - // ParsedFromCheck is set if this path was parsed from a registered check - bool ParsedFromCheck = 5; + // ParsedFromCheck is set if this path was parsed from a registered check + bool ParsedFromCheck = 5; } // mog annotation: @@ -216,8 +201,8 @@ message ExposePath { // output=service.gen.go // name=Structs message MeshGatewayConfig { - // mog: func-to=structs.MeshGatewayMode func-from=string - string Mode = 1; + // mog: func-to=structs.MeshGatewayMode func-from=string + string Mode = 1; } // mog annotation: @@ -226,13 +211,13 @@ message MeshGatewayConfig { // output=service.gen.go // name=Structs message TransparentProxyConfig { - // mog: func-to=int func-from=int32 - int32 OutboundListenerPort = 1; + // mog: func-to=int func-from=int32 + int32 OutboundListenerPort = 1; - // DialedDirectly indicates whether transparent proxies can dial this proxy instance directly. - // The discovery chain is not considered when dialing a service instance directly. - // This setting is useful when addressing stateful services, such as a database cluster with a leader node. - bool DialedDirectly = 2; + // DialedDirectly indicates whether transparent proxies can dial this proxy instance directly. + // The discovery chain is not considered when dialing a service instance directly. + // This setting is useful when addressing stateful services, such as a database cluster with a leader node. + bool DialedDirectly = 2; } // ServiceDefinition is used to JSON decode the Service definitions. For @@ -244,58 +229,59 @@ message TransparentProxyConfig { // output=service.gen.go // name=Structs message ServiceDefinition { - // mog: func-to=structs.ServiceKind func-from=string - string Kind = 1; - string ID = 2; - string Name = 3; - repeated string Tags = 4; - string Address = 5; - // mog: func-to=MapStringServiceAddressToStructs func-from=NewMapStringServiceAddressFromStructs - map TaggedAddresses = 16; - map Meta = 6; - // mog: func-to=int func-from=int32 - int32 Port = 7; - // Path for socket - string SocketPath = 18; - CheckType Check = 8; - // mog: func-to=CheckTypesToStructs func-from=NewCheckTypesFromStructs - repeated CheckType Checks = 9; - // mog: func-to=WeightsPtrToStructs func-from=NewWeightsPtrFromStructs - Weights Weights = 10; - string Token = 11; - bool EnableTagOverride = 12; - - // Proxy is the configuration set for Kind = connect-proxy. It is mandatory in - // that case and an error to be set for any other kind. This config is part of - // a proxy service definition and is distinct from but shares some fields with - // the Connect.Proxy which configures a managed proxy as part of the actual - // service's definition. This duplication is ugly but seemed better than the - // alternative which was to re-use the same struct fields for both cases even - // though the semantics are different and the non-shared fields make no sense - // in the other case. ProxyConfig may be a more natural name here, but it's - // confusing for the UX because one of the fields in ConnectProxyConfig is - // also called just "Config" - // mog: func-to=ConnectProxyConfigPtrToStructs func-from=NewConnectProxyConfigPtrFromStructs - ConnectProxyConfig Proxy = 14; - - // mog: func-to=EnterpriseMetaToStructs func-from=NewEnterpriseMetaFromStructs - common.EnterpriseMeta EnterpriseMeta = 17; - - // mog: func-to=ServiceConnectPtrToStructs func-from=NewServiceConnectPtrFromStructs - ServiceConnect Connect = 15; + // mog: func-to=structs.ServiceKind func-from=string + string Kind = 1; + string ID = 2; + string Name = 3; + repeated string Tags = 4; + string Address = 5; + // mog: func-to=MapStringServiceAddressToStructs func-from=NewMapStringServiceAddressFromStructs + map TaggedAddresses = 16; + map Meta = 6; + // mog: func-to=int func-from=int32 + int32 Port = 7; + // Path for socket + string SocketPath = 18; + CheckType Check = 8; + // mog: func-to=CheckTypesToStructs func-from=NewCheckTypesFromStructs + repeated CheckType Checks = 9; + // mog: func-to=WeightsPtrToStructs func-from=NewWeightsPtrFromStructs + Weights Weights = 10; + string Token = 11; + bool EnableTagOverride = 12; + + // Proxy is the configuration set for Kind = connect-proxy. It is mandatory in + // that case and an error to be set for any other kind. This config is part of + // a proxy service definition and is distinct from but shares some fields with + // the Connect.Proxy which configures a managed proxy as part of the actual + // service's definition. This duplication is ugly but seemed better than the + // alternative which was to re-use the same struct fields for both cases even + // though the semantics are different and the non-shared fields make no sense + // in the other case. ProxyConfig may be a more natural name here, but it's + // confusing for the UX because one of the fields in ConnectProxyConfig is + // also called just "Config" + // mog: func-to=ConnectProxyConfigPtrToStructs func-from=NewConnectProxyConfigPtrFromStructs + ConnectProxyConfig Proxy = 14; + + // mog: func-to=EnterpriseMetaToStructs func-from=NewEnterpriseMetaFromStructs + common.EnterpriseMeta EnterpriseMeta = 17; + + // mog: func-to=ServiceConnectPtrToStructs func-from=NewServiceConnectPtrFromStructs + ServiceConnect Connect = 15; } // Type to hold an address and port of a service message ServiceAddress { - string Address = 1; - // mog: func-to=int func-from=int32 - int32 Port = 2; + string Address = 1; + // mog: func-to=int func-from=int32 + int32 Port = 2; } + // Weights represent the weight used by DNS for a given status message Weights { - // mog: func-to=int func-from=int32 - int32 Passing = 1; - // mog: func-to=int func-from=int32 - int32 Warning = 2; + // mog: func-to=int func-from=int32 + int32 Passing = 1; + // mog: func-to=int func-from=int32 + int32 Warning = 2; } diff --git a/proto/pbstatus/status.pb.binary.go b/proto/pbstatus/status.pb.binary.go deleted file mode 100644 index f1dcfbf66baec..0000000000000 --- a/proto/pbstatus/status.pb.binary.go +++ /dev/null @@ -1,18 +0,0 @@ -// Code generated by protoc-gen-go-binary. DO NOT EDIT. -// source: proto/pbstatus/status.proto - -package pbstatus - -import ( - "github.com/golang/protobuf/proto" -) - -// MarshalBinary implements encoding.BinaryMarshaler -func (msg *Status) MarshalBinary() ([]byte, error) { - return proto.Marshal(msg) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler -func (msg *Status) UnmarshalBinary(b []byte) error { - return proto.Unmarshal(b, msg) -} diff --git a/proto/pbstatus/status.pb.go b/proto/pbstatus/status.pb.go deleted file mode 100644 index f97dbc7735660..0000000000000 --- a/proto/pbstatus/status.pb.go +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) -// source: proto/pbstatus/status.proto - -package pbstatus - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - anypb "google.golang.org/protobuf/types/known/anypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The `Status` type defines a logical error model that is suitable for -// different programming environments, including REST APIs and RPC APIs. It is -// used by [gRPC](https://github.com/grpc). Each `Status` message contains -// three pieces of data: error code, error message, and error details. -// -// You can find out more about this error model and how to work with it in the -// [API Design Guide](https://cloud.google.com/apis/design/errors). -type Status struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. - Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - // A developer-facing error message, which should be in English. Any - // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - // A list of messages that carry the error details. There is a common set of - // message types for APIs to use. - Details []*anypb.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"` -} - -func (x *Status) Reset() { - *x = Status{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_pbstatus_status_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Status) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Status) ProtoMessage() {} - -func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_proto_pbstatus_status_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Status.ProtoReflect.Descriptor instead. -func (*Status) Descriptor() ([]byte, []int) { - return file_proto_pbstatus_status_proto_rawDescGZIP(), []int{0} -} - -func (x *Status) GetCode() int32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *Status) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *Status) GetDetails() []*anypb.Any { - if x != nil { - return x.Details - } - return nil -} - -var File_proto_pbstatus_status_proto protoreflect.FileDescriptor - -var file_proto_pbstatus_status_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x66, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x7d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, - 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0xca, 0x02, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0xe2, 0x02, 0x12, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_proto_pbstatus_status_proto_rawDescOnce sync.Once - file_proto_pbstatus_status_proto_rawDescData = file_proto_pbstatus_status_proto_rawDesc -) - -func file_proto_pbstatus_status_proto_rawDescGZIP() []byte { - file_proto_pbstatus_status_proto_rawDescOnce.Do(func() { - file_proto_pbstatus_status_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_pbstatus_status_proto_rawDescData) - }) - return file_proto_pbstatus_status_proto_rawDescData -} - -var file_proto_pbstatus_status_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_proto_pbstatus_status_proto_goTypes = []interface{}{ - (*Status)(nil), // 0: status.Status - (*anypb.Any)(nil), // 1: google.protobuf.Any -} -var file_proto_pbstatus_status_proto_depIdxs = []int32{ - 1, // 0: status.Status.details:type_name -> google.protobuf.Any - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_proto_pbstatus_status_proto_init() } -func file_proto_pbstatus_status_proto_init() { - if File_proto_pbstatus_status_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_proto_pbstatus_status_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Status); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_pbstatus_status_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_proto_pbstatus_status_proto_goTypes, - DependencyIndexes: file_proto_pbstatus_status_proto_depIdxs, - MessageInfos: file_proto_pbstatus_status_proto_msgTypes, - }.Build() - File_proto_pbstatus_status_proto = out.File - file_proto_pbstatus_status_proto_rawDesc = nil - file_proto_pbstatus_status_proto_goTypes = nil - file_proto_pbstatus_status_proto_depIdxs = nil -} diff --git a/proto/pbstatus/status.proto b/proto/pbstatus/status.proto deleted file mode 100644 index e483b19506849..0000000000000 --- a/proto/pbstatus/status.proto +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package status; - -import "google/protobuf/any.proto"; - -// The `Status` type defines a logical error model that is suitable for -// different programming environments, including REST APIs and RPC APIs. It is -// used by [gRPC](https://github.com/grpc). Each `Status` message contains -// three pieces of data: error code, error message, and error details. -// -// You can find out more about this error model and how to work with it in the -// [API Design Guide](https://cloud.google.com/apis/design/errors). -message Status { - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. - int32 code = 1; - - // A developer-facing error message, which should be in English. Any - // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. - string message = 2; - - // A list of messages that carry the error details. There is a common set of - // message types for APIs to use. - repeated google.protobuf.Any details = 3; -} diff --git a/proto/pbsubscribe/subscribe.pb.go b/proto/pbsubscribe/subscribe.pb.go index d7459ee9c7014..851991ed01d41 100644 --- a/proto/pbsubscribe/subscribe.pb.go +++ b/proto/pbsubscribe/subscribe.pb.go @@ -3,14 +3,19 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0-rc.1 -// protoc (unknown) +// protoc-gen-go v1.23.0 +// protoc v3.15.8 // source: proto/pbsubscribe/subscribe.proto package pbsubscribe import ( + context "context" + proto "github.com/golang/protobuf/proto" pbservice "github.com/hashicorp/consul/proto/pbservice" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -24,6 +29,10 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + // Topic enumerates the supported event topics. type Topic int32 @@ -161,8 +170,6 @@ type SubscribeRequest struct { // // Partition is an enterprise-only feature. Partition string `protobuf:"bytes,7,opt,name=Partition,proto3" json:"Partition,omitempty"` - // PeerName is the name of the peer that the requested service was imported from. - PeerName string `protobuf:"bytes,8,opt,name=PeerName,proto3" json:"PeerName,omitempty"` } func (x *SubscribeRequest) Reset() { @@ -246,13 +253,6 @@ func (x *SubscribeRequest) GetPartition() string { return "" } -func (x *SubscribeRequest) GetPeerName() string { - if x != nil { - return x.PeerName - } - return "" -} - // Event describes a streaming update on a subscription. Events are used both to // describe the current "snapshot" of the result as well as ongoing mutations to // that snapshot. @@ -501,7 +501,7 @@ var file_proto_pbsubscribe_subscribe_proto_rawDesc = []byte{ 0x69, 0x62, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x1a, 0x1a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf0, 0x01, 0x0a, 0x10, 0x53, + 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd4, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, @@ -515,59 +515,51 @@ var file_proto_pbsubscribe_subscribe_proto_rawDesc = []byte{ 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x85, 0x02, - 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, - 0x0d, 0x45, 0x6e, 0x64, 0x4f, 0x66, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x45, 0x6e, 0x64, 0x4f, 0x66, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x32, 0x0a, 0x13, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x54, 0x6f, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x00, 0x52, 0x13, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x54, 0x6f, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x37, 0x0a, 0x0a, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x12, 0x46, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x42, 0x09, 0x0a, 0x07, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x36, 0x0a, 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x82, 0x01, - 0x0a, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x02, 0x4f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x43, 0x61, - 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4f, 0x70, 0x52, 0x02, 0x4f, 0x70, 0x12, 0x45, 0x0a, 0x10, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, - 0x64, 0x65, 0x2a, 0x41, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x10, 0x02, 0x2a, 0x29, 0x0a, 0x09, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x4f, 0x70, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x10, 0x00, - 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x10, 0x01, - 0x32, 0x59, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x09, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1b, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x00, 0x30, 0x01, 0x42, 0x92, 0x01, 0x0a, 0x0d, - 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x42, 0x0e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0xa2, 0x02, - 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0xca, 0x02, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0xe2, 0x02, 0x15, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x22, 0x85, 0x02, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x26, 0x0a, 0x0d, 0x45, 0x6e, 0x64, 0x4f, 0x66, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x45, 0x6e, 0x64, 0x4f, + 0x66, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x32, 0x0a, 0x13, 0x4e, 0x65, 0x77, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x6f, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x13, 0x4e, 0x65, 0x77, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x6f, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x37, 0x0a, + 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x0a, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x46, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, + 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x42, 0x09, + 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x36, 0x0a, 0x0a, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x22, 0x84, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x02, 0x4f, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4f, 0x70, 0x52, 0x02, 0x4f, 0x70, 0x12, + 0x47, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x2a, 0x41, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x11, + 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x10, + 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x10, 0x02, 0x2a, 0x29, 0x0a, 0x09, 0x43, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x4f, 0x70, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x65, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x10, 0x01, 0x32, 0x59, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x3e, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1b, + 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x73, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x00, 0x30, + 0x01, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -591,7 +583,7 @@ var file_proto_pbsubscribe_subscribe_proto_goTypes = []interface{}{ (*Event)(nil), // 3: subscribe.Event (*EventBatch)(nil), // 4: subscribe.EventBatch (*ServiceHealthUpdate)(nil), // 5: subscribe.ServiceHealthUpdate - (*pbservice.CheckServiceNode)(nil), // 6: service.CheckServiceNode + (*pbservice.CheckServiceNode)(nil), // 6: pbservice.CheckServiceNode } var file_proto_pbsubscribe_subscribe_proto_depIdxs = []int32{ 0, // 0: subscribe.SubscribeRequest.Topic:type_name -> subscribe.Topic @@ -599,7 +591,7 @@ var file_proto_pbsubscribe_subscribe_proto_depIdxs = []int32{ 5, // 2: subscribe.Event.ServiceHealth:type_name -> subscribe.ServiceHealthUpdate 3, // 3: subscribe.EventBatch.Events:type_name -> subscribe.Event 1, // 4: subscribe.ServiceHealthUpdate.Op:type_name -> subscribe.CatalogOp - 6, // 5: subscribe.ServiceHealthUpdate.CheckServiceNode:type_name -> service.CheckServiceNode + 6, // 5: subscribe.ServiceHealthUpdate.CheckServiceNode:type_name -> pbservice.CheckServiceNode 2, // 6: subscribe.StateChangeSubscription.Subscribe:input_type -> subscribe.SubscribeRequest 3, // 7: subscribe.StateChangeSubscription.Subscribe:output_type -> subscribe.Event 7, // [7:8] is the sub-list for method output_type @@ -690,3 +682,148 @@ func file_proto_pbsubscribe_subscribe_proto_init() { file_proto_pbsubscribe_subscribe_proto_goTypes = nil file_proto_pbsubscribe_subscribe_proto_depIdxs = nil } + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// StateChangeSubscriptionClient is the client API for StateChangeSubscription service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type StateChangeSubscriptionClient interface { + // Subscribe to a topic to receive events when there are changes to the topic. + // + // If SubscribeRequest.Index is 0 the event stream will start with one or + // more snapshot events, followed by an EndOfSnapshot event. Subsequent + // events will be a live stream of events as they happen. + // + // If SubscribeRequest.Index is > 0 it is assumed the client already has a + // snapshot, and is trying to resume a stream that was disconnected. The + // client will either receive a NewSnapshotToFollow event, indicating the + // client view is stale and it must reset its view and prepare for a new + // snapshot. Or, if no NewSnapshotToFollow event is received, the client + // view is still fresh, and all events will be the live stream. + // + // Subscribe may return a gRPC status error with codes.ABORTED to indicate + // the client view is now stale due to a change on the server. The client + // must reset its view and issue a new Subscribe call to restart the stream. + // This error is used when the server can no longer correctly maintain the + // stream, for example because the ACL permissions for the token changed, or + // because the server state was restored from a snapshot. + Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (StateChangeSubscription_SubscribeClient, error) +} + +type stateChangeSubscriptionClient struct { + cc grpc.ClientConnInterface +} + +func NewStateChangeSubscriptionClient(cc grpc.ClientConnInterface) StateChangeSubscriptionClient { + return &stateChangeSubscriptionClient{cc} +} + +func (c *stateChangeSubscriptionClient) Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (StateChangeSubscription_SubscribeClient, error) { + stream, err := c.cc.NewStream(ctx, &_StateChangeSubscription_serviceDesc.Streams[0], "/subscribe.StateChangeSubscription/Subscribe", opts...) + if err != nil { + return nil, err + } + x := &stateChangeSubscriptionSubscribeClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type StateChangeSubscription_SubscribeClient interface { + Recv() (*Event, error) + grpc.ClientStream +} + +type stateChangeSubscriptionSubscribeClient struct { + grpc.ClientStream +} + +func (x *stateChangeSubscriptionSubscribeClient) Recv() (*Event, error) { + m := new(Event) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// StateChangeSubscriptionServer is the server API for StateChangeSubscription service. +type StateChangeSubscriptionServer interface { + // Subscribe to a topic to receive events when there are changes to the topic. + // + // If SubscribeRequest.Index is 0 the event stream will start with one or + // more snapshot events, followed by an EndOfSnapshot event. Subsequent + // events will be a live stream of events as they happen. + // + // If SubscribeRequest.Index is > 0 it is assumed the client already has a + // snapshot, and is trying to resume a stream that was disconnected. The + // client will either receive a NewSnapshotToFollow event, indicating the + // client view is stale and it must reset its view and prepare for a new + // snapshot. Or, if no NewSnapshotToFollow event is received, the client + // view is still fresh, and all events will be the live stream. + // + // Subscribe may return a gRPC status error with codes.ABORTED to indicate + // the client view is now stale due to a change on the server. The client + // must reset its view and issue a new Subscribe call to restart the stream. + // This error is used when the server can no longer correctly maintain the + // stream, for example because the ACL permissions for the token changed, or + // because the server state was restored from a snapshot. + Subscribe(*SubscribeRequest, StateChangeSubscription_SubscribeServer) error +} + +// UnimplementedStateChangeSubscriptionServer can be embedded to have forward compatible implementations. +type UnimplementedStateChangeSubscriptionServer struct { +} + +func (*UnimplementedStateChangeSubscriptionServer) Subscribe(*SubscribeRequest, StateChangeSubscription_SubscribeServer) error { + return status.Errorf(codes.Unimplemented, "method Subscribe not implemented") +} + +func RegisterStateChangeSubscriptionServer(s *grpc.Server, srv StateChangeSubscriptionServer) { + s.RegisterService(&_StateChangeSubscription_serviceDesc, srv) +} + +func _StateChangeSubscription_Subscribe_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SubscribeRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(StateChangeSubscriptionServer).Subscribe(m, &stateChangeSubscriptionSubscribeServer{stream}) +} + +type StateChangeSubscription_SubscribeServer interface { + Send(*Event) error + grpc.ServerStream +} + +type stateChangeSubscriptionSubscribeServer struct { + grpc.ServerStream +} + +func (x *stateChangeSubscriptionSubscribeServer) Send(m *Event) error { + return x.ServerStream.SendMsg(m) +} + +var _StateChangeSubscription_serviceDesc = grpc.ServiceDesc{ + ServiceName: "subscribe.StateChangeSubscription", + HandlerType: (*StateChangeSubscriptionServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "Subscribe", + Handler: _StateChangeSubscription_Subscribe_Handler, + ServerStreams: true, + }, + }, + Metadata: "proto/pbsubscribe/subscribe.proto", +} diff --git a/proto/pbsubscribe/subscribe.proto b/proto/pbsubscribe/subscribe.proto index 9f5ed5bea3b8b..a860b874bddb6 100644 --- a/proto/pbsubscribe/subscribe.proto +++ b/proto/pbsubscribe/subscribe.proto @@ -5,136 +5,133 @@ syntax = "proto3"; package subscribe; +option go_package = "github.com/hashicorp/consul/proto/pbsubscribe"; + import "proto/pbservice/node.proto"; // StateChangeSubscription service allows consumers to subscribe to topics of // state change events. Events are streamed as they happen. -// buf:lint:ignore SERVICE_SUFFIX service StateChangeSubscription { - // Subscribe to a topic to receive events when there are changes to the topic. - // - // If SubscribeRequest.Index is 0 the event stream will start with one or - // more snapshot events, followed by an EndOfSnapshot event. Subsequent - // events will be a live stream of events as they happen. - // - // If SubscribeRequest.Index is > 0 it is assumed the client already has a - // snapshot, and is trying to resume a stream that was disconnected. The - // client will either receive a NewSnapshotToFollow event, indicating the - // client view is stale and it must reset its view and prepare for a new - // snapshot. Or, if no NewSnapshotToFollow event is received, the client - // view is still fresh, and all events will be the live stream. - // - // Subscribe may return a gRPC status error with codes.ABORTED to indicate - // the client view is now stale due to a change on the server. The client - // must reset its view and issue a new Subscribe call to restart the stream. - // This error is used when the server can no longer correctly maintain the - // stream, for example because the ACL permissions for the token changed, or - // because the server state was restored from a snapshot. - // buf:lint:ignore RPC_RESPONSE_STANDARD_NAME - rpc Subscribe(SubscribeRequest) returns (stream Event) {} + // Subscribe to a topic to receive events when there are changes to the topic. + // + // If SubscribeRequest.Index is 0 the event stream will start with one or + // more snapshot events, followed by an EndOfSnapshot event. Subsequent + // events will be a live stream of events as they happen. + // + // If SubscribeRequest.Index is > 0 it is assumed the client already has a + // snapshot, and is trying to resume a stream that was disconnected. The + // client will either receive a NewSnapshotToFollow event, indicating the + // client view is stale and it must reset its view and prepare for a new + // snapshot. Or, if no NewSnapshotToFollow event is received, the client + // view is still fresh, and all events will be the live stream. + // + // Subscribe may return a gRPC status error with codes.ABORTED to indicate + // the client view is now stale due to a change on the server. The client + // must reset its view and issue a new Subscribe call to restart the stream. + // This error is used when the server can no longer correctly maintain the + // stream, for example because the ACL permissions for the token changed, or + // because the server state was restored from a snapshot. + rpc Subscribe(SubscribeRequest) returns (stream Event) {} } // Topic enumerates the supported event topics. enum Topic { - Unknown = 0; - // ServiceHealth topic contains events for any changes to service health. - ServiceHealth = 1; - // ServiceHealthConnect topic contains events for any changes to service - // health for connect-enabled services. - ServiceHealthConnect = 2; + Unknown = 0; + // ServiceHealth topic contains events for any changes to service health. + ServiceHealth = 1; + // ServiceHealthConnect topic contains events for any changes to service + // health for connect-enabled services. + ServiceHealthConnect = 2; } // SubscribeRequest used to subscribe to a topic. message SubscribeRequest { - // Topic identifies the set of events the subscriber is interested in. - Topic Topic = 1; - - // Key is a topic-specific identifier that restricts the scope of the - // subscription to only events pertaining to that identifier. For example, - // to receive events for a single service, the service's name is specified - // as the key. - string Key = 2; - - // Token is the ACL token to authenticate the request. The token must have - // sufficient privileges to read the requested information otherwise events - // will be filtered, possibly resulting in an empty snapshot and no further - // updates sent. - string Token = 3; - - // Index is the raft index the subscriber has already observed up to. This - // is zero on an initial streaming call, but then can be provided by a - // client on subsequent re-connections such that the full snapshot doesn't - // need to be resent if the client is up to date. - uint64 Index = 4; - - // Datacenter specifies the Consul datacenter the request is targeted at. - // If it's not the local DC the server will forward the request to - // the remote DC and proxy the results back to the subscriber. An empty - // string defaults to the local datacenter. - string Datacenter = 5; - - // Namespace which contains the resources. If Namespace is not specified the - // default namespace will be used. - // - // Namespace is an enterprise-only feature. - string Namespace = 6; - - // Partition which contains the resources. If Partition is not specified the - // default partition will be used. - // - // Partition is an enterprise-only feature. - string Partition = 7; - - // PeerName is the name of the peer that the requested service was imported from. - string PeerName = 8; + // Topic identifies the set of events the subscriber is interested in. + Topic Topic = 1; + + // Key is a topic-specific identifier that restricts the scope of the + // subscription to only events pertaining to that identifier. For example, + // to receive events for a single service, the service's name is specified + // as the key. + string Key = 2; + + // Token is the ACL token to authenticate the request. The token must have + // sufficient privileges to read the requested information otherwise events + // will be filtered, possibly resulting in an empty snapshot and no further + // updates sent. + string Token = 3; + + // Index is the raft index the subscriber has already observed up to. This + // is zero on an initial streaming call, but then can be provided by a + // client on subsequent re-connections such that the full snapshot doesn't + // need to be resent if the client is up to date. + uint64 Index = 4; + + // Datacenter specifies the Consul datacenter the request is targeted at. + // If it's not the local DC the server will forward the request to + // the remote DC and proxy the results back to the subscriber. An empty + // string defaults to the local datacenter. + string Datacenter = 5; + + // Namespace which contains the resources. If Namespace is not specified the + // default namespace will be used. + // + // Namespace is an enterprise-only feature. + string Namespace = 6; + + // Partition which contains the resources. If Partition is not specified the + // default partition will be used. + // + // Partition is an enterprise-only feature. + string Partition = 7; } // Event describes a streaming update on a subscription. Events are used both to // describe the current "snapshot" of the result as well as ongoing mutations to // that snapshot. message Event { - // Index is the raft index at which the mutation took place. At the top - // level of a subscription there will always be at most one Event per index. - // If multiple events are published to the same topic in a single raft - // transaction then the batch of events will be encoded inside a single - // top-level event to ensure they are delivered atomically to clients. - uint64 Index = 1; - - // Payload is the actual event content. - oneof Payload { - // EndOfSnapshot indicates the event stream for the initial snapshot has - // ended. Subsequent Events delivered will be mutations to that result. - bool EndOfSnapshot = 2; - - // NewSnapshotToFollow indicates that the client view is stale. The client - // must reset its view before handing any more events. Subsequent events - // in the stream will be for a new snapshot until an EndOfSnapshot event - // is received. - bool NewSnapshotToFollow = 3; - - // EventBatch is a set of events. This is typically used as the payload - // type where multiple events are emitted in a single topic and raft - // index (e.g. transactional updates). In this case the Topic and Index - // values of all events will match and the whole set should be delivered - // and consumed atomically. - EventBatch EventBatch = 4; - - // ServiceHealth is used for ServiceHealth and ServiceHealthConnect - // topics. - ServiceHealthUpdate ServiceHealth = 10; - } + // Index is the raft index at which the mutation took place. At the top + // level of a subscription there will always be at most one Event per index. + // If multiple events are published to the same topic in a single raft + // transaction then the batch of events will be encoded inside a single + // top-level event to ensure they are delivered atomically to clients. + uint64 Index = 1; + + // Payload is the actual event content. + oneof Payload { + // EndOfSnapshot indicates the event stream for the initial snapshot has + // ended. Subsequent Events delivered will be mutations to that result. + bool EndOfSnapshot = 2; + + // NewSnapshotToFollow indicates that the client view is stale. The client + // must reset its view before handing any more events. Subsequent events + // in the stream will be for a new snapshot until an EndOfSnapshot event + // is received. + bool NewSnapshotToFollow = 3; + + // EventBatch is a set of events. This is typically used as the payload + // type where multiple events are emitted in a single topic and raft + // index (e.g. transactional updates). In this case the Topic and Index + // values of all events will match and the whole set should be delivered + // and consumed atomically. + EventBatch EventBatch = 4; + + // ServiceHealth is used for ServiceHealth and ServiceHealthConnect + // topics. + ServiceHealthUpdate ServiceHealth = 10; + } } message EventBatch { - repeated Event Events = 1; + repeated Event Events = 1; } enum CatalogOp { - Register = 0; - Deregister = 1; + Register = 0; + Deregister = 1; } message ServiceHealthUpdate { - CatalogOp Op = 1; - service.CheckServiceNode CheckServiceNode = 2; + CatalogOp Op = 1; + pbservice.CheckServiceNode CheckServiceNode = 2; } diff --git a/proto/pbsubscribe/subscribe_grpc.pb.go b/proto/pbsubscribe/subscribe_grpc.pb.go deleted file mode 100644 index 0622729080257..0000000000000 --- a/proto/pbsubscribe/subscribe_grpc.pb.go +++ /dev/null @@ -1,170 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc (unknown) -// source: proto/pbsubscribe/subscribe.proto - -package pbsubscribe - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -// StateChangeSubscriptionClient is the client API for StateChangeSubscription service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type StateChangeSubscriptionClient interface { - // Subscribe to a topic to receive events when there are changes to the topic. - // - // If SubscribeRequest.Index is 0 the event stream will start with one or - // more snapshot events, followed by an EndOfSnapshot event. Subsequent - // events will be a live stream of events as they happen. - // - // If SubscribeRequest.Index is > 0 it is assumed the client already has a - // snapshot, and is trying to resume a stream that was disconnected. The - // client will either receive a NewSnapshotToFollow event, indicating the - // client view is stale and it must reset its view and prepare for a new - // snapshot. Or, if no NewSnapshotToFollow event is received, the client - // view is still fresh, and all events will be the live stream. - // - // Subscribe may return a gRPC status error with codes.ABORTED to indicate - // the client view is now stale due to a change on the server. The client - // must reset its view and issue a new Subscribe call to restart the stream. - // This error is used when the server can no longer correctly maintain the - // stream, for example because the ACL permissions for the token changed, or - // because the server state was restored from a snapshot. - // buf:lint:ignore RPC_RESPONSE_STANDARD_NAME - Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (StateChangeSubscription_SubscribeClient, error) -} - -type stateChangeSubscriptionClient struct { - cc grpc.ClientConnInterface -} - -func NewStateChangeSubscriptionClient(cc grpc.ClientConnInterface) StateChangeSubscriptionClient { - return &stateChangeSubscriptionClient{cc} -} - -func (c *stateChangeSubscriptionClient) Subscribe(ctx context.Context, in *SubscribeRequest, opts ...grpc.CallOption) (StateChangeSubscription_SubscribeClient, error) { - stream, err := c.cc.NewStream(ctx, &StateChangeSubscription_ServiceDesc.Streams[0], "/subscribe.StateChangeSubscription/Subscribe", opts...) - if err != nil { - return nil, err - } - x := &stateChangeSubscriptionSubscribeClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type StateChangeSubscription_SubscribeClient interface { - Recv() (*Event, error) - grpc.ClientStream -} - -type stateChangeSubscriptionSubscribeClient struct { - grpc.ClientStream -} - -func (x *stateChangeSubscriptionSubscribeClient) Recv() (*Event, error) { - m := new(Event) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// StateChangeSubscriptionServer is the server API for StateChangeSubscription service. -// All implementations should embed UnimplementedStateChangeSubscriptionServer -// for forward compatibility -type StateChangeSubscriptionServer interface { - // Subscribe to a topic to receive events when there are changes to the topic. - // - // If SubscribeRequest.Index is 0 the event stream will start with one or - // more snapshot events, followed by an EndOfSnapshot event. Subsequent - // events will be a live stream of events as they happen. - // - // If SubscribeRequest.Index is > 0 it is assumed the client already has a - // snapshot, and is trying to resume a stream that was disconnected. The - // client will either receive a NewSnapshotToFollow event, indicating the - // client view is stale and it must reset its view and prepare for a new - // snapshot. Or, if no NewSnapshotToFollow event is received, the client - // view is still fresh, and all events will be the live stream. - // - // Subscribe may return a gRPC status error with codes.ABORTED to indicate - // the client view is now stale due to a change on the server. The client - // must reset its view and issue a new Subscribe call to restart the stream. - // This error is used when the server can no longer correctly maintain the - // stream, for example because the ACL permissions for the token changed, or - // because the server state was restored from a snapshot. - // buf:lint:ignore RPC_RESPONSE_STANDARD_NAME - Subscribe(*SubscribeRequest, StateChangeSubscription_SubscribeServer) error -} - -// UnimplementedStateChangeSubscriptionServer should be embedded to have forward compatible implementations. -type UnimplementedStateChangeSubscriptionServer struct { -} - -func (UnimplementedStateChangeSubscriptionServer) Subscribe(*SubscribeRequest, StateChangeSubscription_SubscribeServer) error { - return status.Errorf(codes.Unimplemented, "method Subscribe not implemented") -} - -// UnsafeStateChangeSubscriptionServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to StateChangeSubscriptionServer will -// result in compilation errors. -type UnsafeStateChangeSubscriptionServer interface { - mustEmbedUnimplementedStateChangeSubscriptionServer() -} - -func RegisterStateChangeSubscriptionServer(s grpc.ServiceRegistrar, srv StateChangeSubscriptionServer) { - s.RegisterService(&StateChangeSubscription_ServiceDesc, srv) -} - -func _StateChangeSubscription_Subscribe_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribeRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(StateChangeSubscriptionServer).Subscribe(m, &stateChangeSubscriptionSubscribeServer{stream}) -} - -type StateChangeSubscription_SubscribeServer interface { - Send(*Event) error - grpc.ServerStream -} - -type stateChangeSubscriptionSubscribeServer struct { - grpc.ServerStream -} - -func (x *stateChangeSubscriptionSubscribeServer) Send(m *Event) error { - return x.ServerStream.SendMsg(m) -} - -// StateChangeSubscription_ServiceDesc is the grpc.ServiceDesc for StateChangeSubscription service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var StateChangeSubscription_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "subscribe.StateChangeSubscription", - HandlerType: (*StateChangeSubscriptionServer)(nil), - Methods: []grpc.MethodDesc{}, - Streams: []grpc.StreamDesc{ - { - StreamName: "Subscribe", - Handler: _StateChangeSubscription_Subscribe_Handler, - ServerStreams: true, - }, - }, - Metadata: "proto/pbsubscribe/subscribe.proto", -} diff --git a/proto/prototest/testing.go b/proto/prototest/testing.go index b17f359b375d7..1dbe03618720b 100644 --- a/proto/prototest/testing.go +++ b/proto/prototest/testing.go @@ -3,14 +3,14 @@ package prototest import ( "testing" + "github.com/golang/protobuf/proto" "github.com/google/go-cmp/cmp" - "google.golang.org/protobuf/testing/protocmp" ) func AssertDeepEqual(t *testing.T, x, y interface{}, opts ...cmp.Option) { t.Helper() - opts = append(opts, protocmp.Transform()) + opts = append(opts, cmp.Comparer(proto.Equal)) if diff := cmp.Diff(x, y, opts...); diff != "" { t.Fatalf("assertion failed: values are not equal\n--- expected\n+++ actual\n%v", diff) diff --git a/sdk/testutil/assertions.go b/sdk/testutil/assertions.go index 4f74daf047454..c7f3c78c7d9bd 100644 --- a/sdk/testutil/assertions.go +++ b/sdk/testutil/assertions.go @@ -17,12 +17,3 @@ func RequireErrorContains(t testing.TB, err error, expectedErrorMessage string) t.Fatalf("expected err %v to contain %q", err, expectedErrorMessage) } } - -// RunStep is a test helper to help you stop a series of subtests from -// executing after the first one that fails. -func RunStep(t *testing.T, name string, fn func(t *testing.T)) { - t.Helper() - if !t.Run(name, fn) { - t.FailNow() - } -} diff --git a/terraform/README.md b/terraform/README.md new file mode 100644 index 0000000000000..3b503b209ea43 --- /dev/null +++ b/terraform/README.md @@ -0,0 +1,14 @@ +These Terraform modules were removed from GitHub in [GH-5085](https://github.com/hashicorp/consul/pull/5085). + +These are not currently being maintained and tested, and were created prior to the existence of the Terraform Module Registry, which is the more appropriate way to share and distribute modules. + +In an effort to limit confusion of the purpose of these modules and not encourage usage of something we aren't confident about, this removes them from this repository. + +You can still access these modules if you depend on them by pinning to a specific ref in Git. It is recommended you pin against a recent major version where these modules existed: + +module "consul-aws" { + source = "git::https://github.com/hashicorp/consul.git//terraform/aws?ref=v1.4.0" +} +More detail about module sources can be found on this page: + +https://www.terraform.io/docs/modules/sources.html \ No newline at end of file diff --git a/test/integration/connect/envoy/Dockerfile-bats b/test/integration/connect/envoy/Dockerfile-bats index 4167c2b043d9b..2cc003163abfc 100644 --- a/test/integration/connect/envoy/Dockerfile-bats +++ b/test/integration/connect/envoy/Dockerfile-bats @@ -1,6 +1,6 @@ FROM docker.mirror.hashicorp.services/fortio/fortio AS fortio -FROM docker.mirror.hashicorp.services/bats/bats:1.7.0 +FROM docker.mirror.hashicorp.services/bats/bats:1.6.0 RUN apk add curl RUN apk add openssl diff --git a/test/integration/consul-container/go.mod b/test/integration/consul-container/go.mod deleted file mode 100644 index 886be129b6103..0000000000000 --- a/test/integration/consul-container/go.mod +++ /dev/null @@ -1,30 +0,0 @@ -module github.com/hashicorp/consul/integration/consul-container - -go 1.16 - -require ( - github.com/armon/go-metrics v0.3.10 // indirect - github.com/docker/docker v20.10.11+incompatible - github.com/hashicorp/consul/api v1.11.0 - github.com/hashicorp/consul/sdk v0.8.0 - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-hclog v0.16.2 // indirect - github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-msgpack v0.5.5 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-sockaddr v1.0.2 // indirect - github.com/hashicorp/go-uuid v1.0.2 - github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/hashicorp/memberlist v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/mitchellh/mapstructure v1.4.2 // indirect - github.com/stretchr/testify v1.7.0 - github.com/testcontainers/testcontainers-go v0.13.0 - golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect - google.golang.org/grpc v1.41.0 // indirect -) - -replace github.com/hashicorp/consul/api => ../../../api - -replace github.com/hashicorp/consul/sdk => ../../../sdk diff --git a/test/integration/consul-container/go.sum b/test/integration/consul-container/go.sum deleted file mode 100644 index 40ef073b97b53..0000000000000 --- a/test/integration/consul-container/go.sum +++ /dev/null @@ -1,1110 +0,0 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.4.17 h1:iT12IBVClFevaf8PuVyi3UmZOVh4OqnaLxDTW2O6j3w= -github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= -github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= -github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= -github.com/Microsoft/hcsshim v0.8.23 h1:47MSwtKGXet80aIn+7h4YI6fwPmwIghAnsx2aOUrG2M= -github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= -github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= -github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.2 h1:6Yo7N8UP2K6LWZnW94DLVSSrbobcWdVzAYOisuDPIFo= -github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= -github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= -github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= -github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= -github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= -github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= -github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= -github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.1 h1:iJnMvco9XGvKUvNQkv88bE4uJXxRQH18efbKo9w5vHQ= -github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= -github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= -github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= -github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= -github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= -github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= -github.com/containerd/containerd v1.5.9 h1:rs6Xg1gtIxaeyG+Smsb/0xaSDu1VgFhOCKBXxMxbsF4= -github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= -github.com/containerd/continuity v0.1.0 h1:UFRRY5JemiAhPZrr/uE0n8fMTLcZsUvySPr1+D7pgr8= -github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= -github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= -github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= -github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= -github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= -github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= -github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= -github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= -github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= -github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= -github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= -github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= -github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= -github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= -github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= -github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= -github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= -github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= -github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= -github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= -github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= -github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= -github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE= -github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.11+incompatible h1:OqzI/g/W54LczvhnccGqniFoQghHx3pklbLuhfXpqGo= -github.com/docker/docker v20.10.11+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= -github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-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= -github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= -github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.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.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.7.2 h1:zoNxOV7WjqXptQOVngLmcSQgXmgk4NMz1HibBchjl/I= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2 h1:K4ev2ib4LdQETX5cSZBG0DVLk1jwGqSPXBjdah3veNs= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= -github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.1 h1:MXgUXLqva1QvpVEDQW1IQLG0wivQAtmFlHRQ+1vWZfM= -github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.6 h1:uuEX1kLR6aoda1TBttmJQKDLZE1Ob7KN0NPdE7EtCDc= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -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/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -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/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM= -github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM= -github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= -github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c h1:nXxl5PrvVm2L/wCy8dQu6DMTwH4oIuGN8GJDAlqDdVE= -github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= -github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= -github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= -github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= -github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= -github.com/testcontainers/testcontainers-go v0.13.0 h1:OUujSlEGsXVo/ykPVZk3KanBNGN0TYb/7oKIPVn15JA= -github.com/testcontainers/testcontainers-go v0.13.0/go.mod h1:z1abufU633Eb/FmSBTzV6ntZAC1eZBYPtaFsn4nPuDk= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= -github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-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-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20211108170745-6635138e15ea/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/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-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= -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-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.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/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/gotestsum v1.7.0/go.mod h1:V1m4Jw3eBerhI/A6qCxUE07RnCg7ACkKj9BYcAm09V8= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= -k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= -k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= -k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/test/integration/consul-container/libs/cluster/cluster.go b/test/integration/consul-container/libs/cluster/cluster.go deleted file mode 100644 index 2f2f81607be6f..0000000000000 --- a/test/integration/consul-container/libs/cluster/cluster.go +++ /dev/null @@ -1,124 +0,0 @@ -package cluster - -import ( - "context" - "crypto/rand" - "encoding/base64" - "fmt" - "strings" - - "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/integration/consul-container/libs/node" -) - -// Cluster provides an interface for creating and controlling a Consul cluster -// in integration tests, with nodes running in containers. -type Cluster struct { - Nodes []node.Node - EncryptKey string -} - -// New creates a Consul cluster. A node will be started for each of the given -// configs and joined to the cluster. -func New(configs []node.Config) (*Cluster, error) { - serfKey, err := newSerfEncryptionKey() - if err != nil { - return nil, err - } - - cluster := Cluster{ - EncryptKey: serfKey, - } - - nodes := make([]node.Node, len(configs)) - for idx, c := range configs { - c.HCL += fmt.Sprintf(" encrypt=%q", serfKey) - - n, err := node.NewConsulContainer(context.Background(), c) - if err != nil { - return nil, err - } - nodes[idx] = n - } - if err := cluster.AddNodes(nodes); err != nil { - return nil, err - } - return &cluster, nil -} - -// AddNodes joins the given nodes to the cluster. -func (c *Cluster) AddNodes(nodes []node.Node) error { - var joinAddr string - if len(c.Nodes) >= 1 { - joinAddr, _ = c.Nodes[0].GetAddr() - } else if len(nodes) >= 1 { - joinAddr, _ = nodes[0].GetAddr() - } - - for _, node := range nodes { - err := node.GetClient().Agent().Join(joinAddr, false) - if err != nil { - return err - } - c.Nodes = append(c.Nodes, node) - } - return nil -} - -// Terminate will attempt to terminate all nodes in the cluster. If any node -// termination fails, Terminate will abort and return an error. -func (c *Cluster) Terminate() error { - for _, n := range c.Nodes { - err := n.Terminate() - if err != nil { - return err - } - } - return nil -} - -// Leader returns the cluster leader node, or an error if no leader is -// available. -func (c *Cluster) Leader() (node.Node, error) { - if len(c.Nodes) < 1 { - return nil, fmt.Errorf("no node available") - } - n0 := c.Nodes[0] - - leaderAdd, err := GetLeader(n0.GetClient()) - if err != nil { - return nil, err - } - - for _, n := range c.Nodes { - addr, _ := n.GetAddr() - if strings.Contains(leaderAdd, addr) { - return n, nil - } - } - return nil, fmt.Errorf("leader not found") -} - -func newSerfEncryptionKey() (string, error) { - key := make([]byte, 32) - n, err := rand.Reader.Read(key) - if err != nil { - return "", fmt.Errorf("Error reading random data: %w", err) - } - if n != 32 { - return "", fmt.Errorf("Couldn't read enough entropy. Generate more entropy!") - } - - return base64.StdEncoding.EncodeToString(key), nil -} - -func GetLeader(client *api.Client) (string, error) { - leaderAdd, err := client.Status().Leader() - if err != nil { - return "", err - } - if leaderAdd == "" { - return "", fmt.Errorf("no leader available") - } - return leaderAdd, nil -} diff --git a/test/integration/consul-container/libs/node/consul-container.go b/test/integration/consul-container/libs/node/consul-container.go deleted file mode 100644 index 5987241701c7f..0000000000000 --- a/test/integration/consul-container/libs/node/consul-container.go +++ /dev/null @@ -1,238 +0,0 @@ -package node - -import ( - "context" - "fmt" - "os" - "strconv" - "time" - - "github.com/docker/docker/pkg/ioutils" - "github.com/hashicorp/consul/api" - "github.com/testcontainers/testcontainers-go" - "github.com/testcontainers/testcontainers-go/wait" - - "github.com/hashicorp/consul/integration/consul-container/libs/utils" -) - -const bootLogLine = "Consul agent running" -const disableRYUKEnv = "TESTCONTAINERS_RYUK_DISABLED" - -// consulContainerNode implements the Node interface by running a Consul node -// in a container. -type consulContainerNode struct { - ctx context.Context - client *api.Client - container testcontainers.Container - ip string - port int - config Config - req testcontainers.ContainerRequest - dataDir string -} - -func (c *consulContainerNode) GetConfig() Config { - return c.config -} - -func newConsulContainerWithReq(ctx context.Context, req testcontainers.ContainerRequest) (testcontainers.Container, error) { - container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ - ContainerRequest: req, - Started: true, - }) - if err != nil { - return nil, err - } - return container, nil -} - -// NewConsulContainer starts a Consul node in a container with the given config. -func NewConsulContainer(ctx context.Context, config Config) (Node, error) { - - license, err := readLicense() - if err != nil { - return nil, err - } - name := utils.RandName("consul-") - - tmpDirData, err := ioutils.TempDir("", name) - if err != nil { - return nil, err - } - err = os.Chmod(tmpDirData, 0777) - if err != nil { - return nil, err - } - - configFile, err := createConfigFile(config.HCL) - if err != nil { - return nil, err - } - skipReaper := isRYUKDisabled() - req := testcontainers.ContainerRequest{ - Image: consulImage + ":" + config.Version, - ExposedPorts: []string{"8500/tcp"}, - WaitingFor: wait.ForLog(bootLogLine).WithStartupTimeout(10 * time.Second), - AutoRemove: false, - Name: name, - Mounts: testcontainers.ContainerMounts{ - testcontainers.ContainerMount{Source: testcontainers.DockerBindMountSource{HostPath: configFile}, Target: "/consul/config/config.hcl"}, - testcontainers.ContainerMount{Source: testcontainers.DockerBindMountSource{HostPath: tmpDirData}, Target: "/consul/data"}, - }, - Cmd: config.Cmd, - SkipReaper: skipReaper, - Env: map[string]string{"CONSUL_LICENSE": license}, - } - container, err := newConsulContainerWithReq(ctx, req) - if err != nil { - return nil, err - } - - localIP, err := container.Host(ctx) - if err != nil { - return nil, err - } - - mappedPort, err := container.MappedPort(ctx, "8500") - if err != nil { - return nil, err - } - - ip, err := container.ContainerIP(ctx) - if err != nil { - return nil, err - } - - uri := fmt.Sprintf("http://%s:%s", localIP, mappedPort.Port()) - c := new(consulContainerNode) - c.config = config - c.container = container - c.ip = ip - c.port = mappedPort.Int() - apiConfig := api.DefaultConfig() - apiConfig.Address = uri - c.client, err = api.NewClient(apiConfig) - c.ctx = ctx - c.req = req - c.dataDir = tmpDirData - if err != nil { - return nil, err - } - return c, nil -} - -// GetClient returns an API client that can be used to communicate with the Node. -func (c *consulContainerNode) GetClient() *api.Client { - return c.client -} - -// GetAddr return the network address associated with the Node. -func (c *consulContainerNode) GetAddr() (string, int) { - return c.ip, c.port -} - -func (c *consulContainerNode) Upgrade(ctx context.Context, config Config) error { - file, err := createConfigFile(config.HCL) - if err != nil { - return err - } - c.req.Cmd = config.Cmd - c.req.Mounts = testcontainers.ContainerMounts{ - testcontainers.ContainerMount{Source: testcontainers.DockerBindMountSource{HostPath: file}, Target: "/consul/config/config.hcl"}, - testcontainers.ContainerMount{Source: testcontainers.DockerBindMountSource{HostPath: c.dataDir}, Target: "/consul/data"}, - } - c.req.Image = consulImage + ":" + config.Version - err = c.container.Terminate(ctx) - if err != nil { - return err - } - container, err := newConsulContainerWithReq(ctx, c.req) - if err != nil { - return err - } - - c.container = container - - localIP, err := container.Host(ctx) - if err != nil { - return err - } - - mappedPort, err := container.MappedPort(ctx, "8500") - if err != nil { - return err - } - - ip, err := container.ContainerIP(ctx) - if err != nil { - return err - } - uri := fmt.Sprintf("http://%s:%s", localIP, mappedPort.Port()) - c.ip = ip - c.port = mappedPort.Int() - apiConfig := api.DefaultConfig() - apiConfig.Address = uri - c.client, err = api.NewClient(apiConfig) - c.ctx = ctx - c.config = config - - if err != nil { - return err - } - return nil -} - -// Terminate attempts to terminate the container. On failure, an error will be -// returned and the reaper process (RYUK) will handle cleanup. -func (c *consulContainerNode) Terminate() error { - return c.container.Terminate(c.ctx) -} - -// isRYUKDisabled returns whether the reaper process (RYUK) has been disabled -// by an environment variable. -// -// https://github.com/testcontainers/moby-ryuk -func isRYUKDisabled() bool { - skipReaperStr := os.Getenv(disableRYUKEnv) - skipReaper, err := strconv.ParseBool(skipReaperStr) - if err != nil { - return false - } - return skipReaper -} - -func readLicense() (string, error) { - license := os.Getenv("CONSUL_LICENSE") - if license == "" { - licensePath := os.Getenv("CONSUL_LICENSE_PATH") - if licensePath != "" { - licenseBytes, err := os.ReadFile(licensePath) - if err != nil { - return "", err - } - license = string(licenseBytes) - } - } - return license, nil -} - -func createConfigFile(HCL string) (string, error) { - tmpDir, err := ioutils.TempDir("", "consul-container-test-config") - if err != nil { - return "", err - } - err = os.Chmod(tmpDir, 0777) - if err != nil { - return "", err - } - err = os.Mkdir(tmpDir+"/config", 0777) - if err != nil { - return "", err - } - configFile := tmpDir + "/config/config.hcl" - err = os.WriteFile(configFile, []byte(HCL), 0644) - if err != nil { - return "", err - } - return configFile, nil -} diff --git a/test/integration/consul-container/libs/node/consul-container_oss.go b/test/integration/consul-container/libs/node/consul-container_oss.go deleted file mode 100644 index 63d335393af60..0000000000000 --- a/test/integration/consul-container/libs/node/consul-container_oss.go +++ /dev/null @@ -1,6 +0,0 @@ -//go:build !consulent -// +build !consulent - -package node - -const consulImage = "consul" diff --git a/test/integration/consul-container/libs/node/node.go b/test/integration/consul-container/libs/node/node.go deleted file mode 100644 index 69e5c7e50584f..0000000000000 --- a/test/integration/consul-container/libs/node/node.go +++ /dev/null @@ -1,24 +0,0 @@ -package node - -import ( - "context" - "github.com/hashicorp/consul/api" -) - -type ( - // Node represent a Consul node abstraction - Node interface { - Terminate() error - GetClient() *api.Client - GetAddr() (string, int) - GetConfig() Config - Upgrade(ctx context.Context, config Config) error - } -) - -// Config is a set of configurations required to create a Node -type Config struct { - HCL string - Version string - Cmd []string -} diff --git a/test/integration/consul-container/libs/utils/utils.go b/test/integration/consul-container/libs/utils/utils.go deleted file mode 100644 index 552b85d0b7016..0000000000000 --- a/test/integration/consul-container/libs/utils/utils.go +++ /dev/null @@ -1,13 +0,0 @@ -package utils - -import ( - "github.com/hashicorp/go-uuid" -) - -func RandName(name string) string { - generateUUID, err := uuid.GenerateUUID() - if err != nil { - return "" - } - return name + generateUUID -} diff --git a/test/integration/consul-container/upgrade/README.md b/test/integration/consul-container/upgrade/README.md deleted file mode 100644 index 9d2e52f46c419..0000000000000 --- a/test/integration/consul-container/upgrade/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Consul Upgrade Integration tests -## Local run -- run `make dev-docker` -- run the tests. - -To specify targets and latest image pass `target-version` and `latest-version` to the tests. By default, it uses the `consul` docker image with respectively `local` and `latest` tags. \ No newline at end of file diff --git a/test/integration/consul-container/upgrade/healthcheck_test.go b/test/integration/consul-container/upgrade/healthcheck_test.go deleted file mode 100644 index 5a287ab7ad594..0000000000000 --- a/test/integration/consul-container/upgrade/healthcheck_test.go +++ /dev/null @@ -1,277 +0,0 @@ -package upgrade - -import ( - "context" - "fmt" - "testing" - "time" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/integration/consul-container/libs/cluster" - "github.com/hashicorp/consul/integration/consul-container/libs/node" - "github.com/hashicorp/consul/integration/consul-container/libs/utils" -) - -// Test health check GRPC call using Target Servers and Latest GA Clients -func TestTargetServersWithLatestGAClients(t *testing.T) { - const ( - numServers = 3 - numClients = 1 - ) - - cluster := serversCluster(t, numServers, *targetImage) - defer Terminate(t, cluster) - - clients := clientsCreate(t, numClients, *latestImage, cluster.EncryptKey) - - require.NoError(t, cluster.AddNodes(clients)) - - client := cluster.Nodes[0].GetClient() - - waitForLeader(t, cluster, client) - waitForMembers(t, client, 4) - - serviceName := "api" - index := serviceCreate(t, client, serviceName) - - ch := make(chan []*api.ServiceEntry) - errCh := make(chan error) - - go func() { - service, q, err := client.Health().Service(serviceName, "", false, &api.QueryOptions{WaitIndex: index}) - if err == nil && q.QueryBackend != api.QueryBackendStreaming { - err = fmt.Errorf("invalid backend for this test %s", q.QueryBackend) - } - if err != nil { - errCh <- err - } else { - ch <- service - } - }() - - require.NoError(t, client.Agent().ServiceRegister( - &api.AgentServiceRegistration{Name: serviceName, Port: 9998}, - )) - - timer := time.NewTimer(1 * time.Second) - select { - case err := <-errCh: - require.NoError(t, err) - case service := <-ch: - require.Len(t, service, 1) - require.Equal(t, serviceName, service[0].Service.Service) - require.Equal(t, 9998, service[0].Service.Port) - case <-timer.C: - t.Fatalf("test timeout") - } -} - -// Test health check GRPC call using Mixed (majority latest) Servers and Latest GA Clients -func TestMixedServersMajorityLatestGAClient(t *testing.T) { - var configs []node.Config - configs = append(configs, - node.Config{ - HCL: `node_name="` + utils.RandName("consul-server") + `" - log_level="TRACE" - server=true`, - Cmd: []string{"agent", "-client=0.0.0.0"}, - Version: *targetImage, - }) - - for i := 1; i < 3; i++ { - configs = append(configs, - node.Config{ - HCL: `node_name="` + utils.RandName("consul-server") + `" - log_level="TRACE" - bootstrap_expect=3 - server=true`, - Cmd: []string{"agent", "-client=0.0.0.0"}, - Version: *latestImage, - }) - - } - - cluster, err := cluster.New(configs) - require.NoError(t, err) - defer Terminate(t, cluster) - - const ( - numClients = 1 - ) - - clients := clientsCreate(t, numClients, *latestImage, cluster.EncryptKey) - - require.NoError(t, cluster.AddNodes(clients)) - - client := clients[0].GetClient() - - waitForLeader(t, cluster, client) - waitForMembers(t, client, 4) - - serviceName := "api" - index := serviceCreate(t, client, serviceName) - - ch := make(chan []*api.ServiceEntry) - errCh := make(chan error) - go func() { - service, q, err := client.Health().Service(serviceName, "", false, &api.QueryOptions{WaitIndex: index}) - if err == nil && q.QueryBackend != api.QueryBackendStreaming { - err = fmt.Errorf("invalid backend for this test %s", q.QueryBackend) - } - if err != nil { - errCh <- err - } else { - ch <- service - } - }() - - require.NoError(t, client.Agent().ServiceRegister( - &api.AgentServiceRegistration{Name: serviceName, Port: 9998}, - )) - - timer := time.NewTimer(1 * time.Second) - select { - case err := <-errCh: - require.NoError(t, err) - case service := <-ch: - require.Len(t, service, 1) - require.Equal(t, serviceName, service[0].Service.Service) - require.Equal(t, 9998, service[0].Service.Port) - case <-timer.C: - t.Fatalf("test timeout") - } -} - -// Test health check GRPC call using Mixed (majority target) Servers and Latest GA Clients -func TestMixedServersMajorityTargetGAClient(t *testing.T) { - var configs []node.Config - for i := 0; i < 2; i++ { - configs = append(configs, - node.Config{ - HCL: `node_name="` + utils.RandName("consul-server") + `" - log_level="TRACE" - bootstrap_expect=3 - server=true`, - Cmd: []string{"agent", "-client=0.0.0.0"}, - Version: *targetImage, - }) - - } - configs = append(configs, - node.Config{ - HCL: `node_name="` + utils.RandName("consul-server") + `" - log_level="TRACE" - server=true`, - Cmd: []string{"agent", "-client=0.0.0.0"}, - Version: *latestImage, - }) - - cluster, err := cluster.New(configs) - require.NoError(t, err) - defer Terminate(t, cluster) - - const ( - numClients = 1 - ) - - clients := clientsCreate(t, numClients, *latestImage, cluster.EncryptKey) - - require.NoError(t, cluster.AddNodes(clients)) - - client := clients[0].GetClient() - - waitForLeader(t, cluster, client) - waitForMembers(t, client, 4) - - serviceName := "api" - index := serviceCreate(t, client, serviceName) - - ch := make(chan []*api.ServiceEntry) - errCh := make(chan error) - go func() { - service, q, err := client.Health().Service(serviceName, "", false, &api.QueryOptions{WaitIndex: index}) - if err == nil && q.QueryBackend != api.QueryBackendStreaming { - err = fmt.Errorf("invalid backend for this test %s", q.QueryBackend) - } - if err != nil { - errCh <- err - } else { - ch <- service - } - }() - - require.NoError(t, client.Agent().ServiceRegister( - &api.AgentServiceRegistration{Name: serviceName, Port: 9998}, - )) - - timer := time.NewTimer(1 * time.Second) - select { - case err := <-errCh: - require.NoError(t, err) - case service := <-ch: - require.Len(t, service, 1) - require.Equal(t, serviceName, service[0].Service.Service) - require.Equal(t, 9998, service[0].Service.Port) - case <-timer.C: - t.Fatalf("test timeout") - } -} - -func clientsCreate(t *testing.T, numClients int, version string, serfKey string) []node.Node { - clients := make([]node.Node, numClients) - for i := 0; i < numClients; i++ { - var err error - clients[i], err = node.NewConsulContainer(context.Background(), - node.Config{ - HCL: fmt.Sprintf(` - node_name = %q - log_level = "TRACE" - encrypt = %q`, utils.RandName("consul-client"), serfKey), - Cmd: []string{"agent", "-client=0.0.0.0"}, - Version: version, - }) - require.NoError(t, err) - } - return clients -} - -func serviceCreate(t *testing.T, client *api.Client, serviceName string) uint64 { - err := client.Agent().ServiceRegister(&api.AgentServiceRegistration{Name: serviceName, Port: 9999}) - require.NoError(t, err) - - service, meta, err := client.Catalog().Service(serviceName, "", &api.QueryOptions{}) - require.NoError(t, err) - require.Len(t, service, 1) - require.Equal(t, serviceName, service[0].ServiceName) - require.Equal(t, 9999, service[0].ServicePort) - - return meta.LastIndex -} - -func serversCluster(t *testing.T, numServers int, version string) *cluster.Cluster { - var configs []node.Config - for i := 0; i < numServers; i++ { - configs = append(configs, node.Config{ - HCL: `node_name="` + utils.RandName("consul-server") + `" - log_level="TRACE" - bootstrap_expect=3 - server=true`, - Cmd: []string{"agent", "-client=0.0.0.0"}, - Version: version, - }) - } - cluster, err := cluster.New(configs) - require.NoError(t, err) - - waitForLeader(t, cluster, nil) - waitForMembers(t, cluster.Nodes[0].GetClient(), numServers) - - return cluster -} - -func Terminate(t *testing.T, cluster *cluster.Cluster) { - err := cluster.Terminate() - require.NoError(t, err) -} diff --git a/test/integration/consul-container/upgrade/util_test.go b/test/integration/consul-container/upgrade/util_test.go deleted file mode 100644 index e7d80abc2cd62..0000000000000 --- a/test/integration/consul-container/upgrade/util_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package upgrade - -import ( - "testing" - "time" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/consul/api" - "github.com/hashicorp/consul/integration/consul-container/libs/cluster" - "github.com/hashicorp/consul/sdk/testutil/retry" -) - -const retryTimeout = 20 * time.Second -const retryFrequency = 500 * time.Millisecond - -func LongFailer() *retry.Timer { - return &retry.Timer{Timeout: retryTimeout, Wait: retryFrequency} -} - -func waitForLeader(t *testing.T, Cluster *cluster.Cluster, client *api.Client) { - retry.RunWith(LongFailer(), t, func(r *retry.R) { - leader, err := Cluster.Leader() - require.NoError(r, err) - require.NotEmpty(r, leader) - }) - - if client != nil { - waitForLeaderFromClient(t, client) - } -} - -func waitForLeaderFromClient(t *testing.T, client *api.Client) { - retry.RunWith(LongFailer(), t, func(r *retry.R) { - leader, err := cluster.GetLeader(client) - require.NoError(r, err) - require.NotEmpty(r, leader) - }) -} - -func waitForMembers(t *testing.T, client *api.Client, expectN int) { - retry.RunWith(LongFailer(), t, func(r *retry.R) { - members, err := client.Agent().Members(false) - require.NoError(r, err) - require.Len(r, members, expectN) - }) -} diff --git a/test/integration/consul-container/upgrade/version_oss.go b/test/integration/consul-container/upgrade/version_oss.go deleted file mode 100644 index 82a9230afb712..0000000000000 --- a/test/integration/consul-container/upgrade/version_oss.go +++ /dev/null @@ -1,9 +0,0 @@ -//go:build !consulent -// +build !consulent - -package upgrade - -import "flag" - -var targetImage = flag.String("target-version", "local", "docker image to be used as UUT (unit under test)") -var latestImage = flag.String("latest-version", "1.11", "docker image to be used as latest") diff --git a/test/load/terraform/consul.tf b/test/load/terraform/consul.tf index bc30bf6f4d46b..b9de8de552559 100644 --- a/test/load/terraform/consul.tf +++ b/test/load/terraform/consul.tf @@ -37,9 +37,9 @@ module "consul_servers" { vpc_id = module.vpc.vpc_id subnet_ids = module.vpc.public_subnets - allowed_ssh_cidr_blocks = [var.vpc_cidr] + allowed_ssh_cidr_blocks = ["0.0.0.0/0"] - allowed_inbound_cidr_blocks = [var.vpc_cidr] + allowed_inbound_cidr_blocks = ["0.0.0.0/0"] ssh_key_name = module.keys.key_name } @@ -57,9 +57,9 @@ module "consul_clients" { vpc_id = module.vpc.vpc_id subnet_ids = module.vpc.public_subnets - allowed_ssh_cidr_blocks = [var.vpc_cidr] + allowed_ssh_cidr_blocks = ["0.0.0.0/0"] - allowed_inbound_cidr_blocks = [var.vpc_cidr] + allowed_inbound_cidr_blocks = ["0.0.0.0/0"] ssh_key_name = module.keys.key_name } diff --git a/test/load/terraform/test-servers.tf b/test/load/terraform/test-servers.tf index ff40fcabc5e90..5db03d14ad8bd 100644 --- a/test/load/terraform/test-servers.tf +++ b/test/load/terraform/test-servers.tf @@ -31,19 +31,19 @@ resource "aws_security_group" "test-servers" { to_port = 8500 security_groups = [module.consul_clients.security_group_id] protocol = "6" - cidr_blocks = [var.vpc_cidr] + cidr_blocks = ["0.0.0.0/0"] } ingress { from_port = 22 to_port = 22 protocol = "6" - cidr_blocks = [var.vpc_cidr] + cidr_blocks = ["0.0.0.0/0"] } egress { from_port = 0 to_port = 0 protocol = "-1" - cidr_blocks = [var.vpc_cidr] + cidr_blocks = ["0.0.0.0/0"] } } diff --git a/test/load/terraform/variables.tf b/test/load/terraform/variables.tf index c7b1f71eaa052..1691983d37614 100644 --- a/test/load/terraform/variables.tf +++ b/test/load/terraform/variables.tf @@ -106,5 +106,6 @@ variable "consul_download_url" { variable "consul_version" { type = string description = "Version of the Consul binary to install" - default = "1.12.0" + default = "1.9.0" } + diff --git a/testrpc/wait.go b/testrpc/wait.go index d6b72749e2d4c..230f2f38a80da 100644 --- a/testrpc/wait.go +++ b/testrpc/wait.go @@ -12,9 +12,6 @@ import ( type rpcFn func(string, interface{}, interface{}) error // WaitForLeader ensures we have a leader and a node registration. -// -// Most uses of this would be better served in the agent/consul package by -// using waitForLeaderEstablishment() instead. func WaitForLeader(t *testing.T, rpc rpcFn, dc string, options ...waitOption) { t.Helper() diff --git a/ui/packages/consul-ui/README.md b/ui/packages/consul-ui/README.md index c87923c839e4d..88e79cba40b44 100644 --- a/ui/packages/consul-ui/README.md +++ b/ui/packages/consul-ui/README.md @@ -109,11 +109,7 @@ See [./docs/index.mdx](./docs/index.mdx#environment-variables) ### Branching -We follow a `ui/**/**` branch naming pattern. This branch naming pattern allows -front-end focused builds, such as FE tests, to run automatically in Pull -Requests. Please note this only works if you are a member of the HashiCorp -GitHub Org. If you are an external contributor these tests won't run and will -instead be run by a member of our team during review. +Follow a `ui/**/**` branch naming pattern. This branch naming pattern allows front-end focused builds, such as FE tests, to run automatically in Pull Requests. It also adds the `theme/ui` label to Pull Requests. Examples: - `ui/feature/add...` diff --git a/ui/packages/consul-ui/app/styles/routes/dc/overview/serverstatus.scss b/ui/packages/consul-ui/app/styles/routes/dc/overview/serverstatus.scss index df790a6d87a1e..c7e97c9da7393 100644 --- a/ui/packages/consul-ui/app/styles/routes/dc/overview/serverstatus.scss +++ b/ui/packages/consul-ui/app/styles/routes/dc/overview/serverstatus.scss @@ -28,7 +28,7 @@ section[data-route='dc.show.serverstatus'] { } %server-failure-tolerance > header { width: 100%; - padding-bottom: 0.500rem; /* 8px */ + padding-bottom: 0.5rem; /* 8px */ margin-bottom: 1rem; /* 16px */ border-bottom: var(--decor-border-100); border-color: rgb(var(--tone-border)); @@ -45,7 +45,6 @@ section[data-route='dc.show.serverstatus'] { text-transform: uppercase; font-style: normal; - } %server-failure-tolerance > section { width: 50%; @@ -68,10 +67,10 @@ section[data-route='dc.show.serverstatus'] { --icon-size: icon-800; --icon-color: rgb(var(--tone-orange-400)); content: ''; - margin-right: 0.500rem; /* 8px */ + margin-right: 0.5rem; /* 8px */ } %server-failure-tolerance section:first-of-type dl { - padding-right: 1.500rem; /* 24px */ + padding-right: 1.5rem; /* 24px */ } %server-failure-tolerance dt { @extend %p2; @@ -98,7 +97,6 @@ section[data-route='dc.show.serverstatus'] { margin-bottom: 18px; } - %redundancy-zones h3 { @extend %h300; } @@ -136,4 +134,3 @@ section[data-route='dc.show.serverstatus'] { vertical-align: revert; background-color: var(--transparent); } - diff --git a/version/version.go b/version/version.go index e7d187bfdef35..a878fdaefd8b4 100644 --- a/version/version.go +++ b/version/version.go @@ -14,7 +14,7 @@ var ( // // Version must conform to the format expected by github.com/hashicorp/go-version // for tests to work. - Version = "1.13.0" + Version = "1.12.0" // https://semver.org/#spec-item-10 VersionMetadata = "" diff --git a/website/content/docs/agent/telemetry.mdx b/website/content/docs/agent/telemetry.mdx index cd33454991e7e..5c40a7242b528 100644 --- a/website/content/docs/agent/telemetry.mdx +++ b/website/content/docs/agent/telemetry.mdx @@ -149,28 +149,6 @@ you will need to apply a function such as InfluxDB's [`non_negative_difference() Sudden large changes to the `consul.client.rpc` metrics (greater than 50% deviation from baseline). `consul.client.rpc.exceeded` or `consul.client.rpc.failed` count > 0, as it implies that an agent is being rate-limited or fails to make an RPC request to a Consul server -### Raft Thread Saturation - -| Metric Name | Description | Unit | Type | -| :----------------------------------- | :----------------------------------------------------------------------------------------------------------------------- | :--------- | :----- | -| `consul.raft.thread.main.saturation` | An approximate measurement of the proportion of time the main Raft goroutine is busy and unavailable to accept new work. | percentage | sample | -| `consul.raft.thread.fsm.saturation` | An approximate measurement of the proportion of time the Raft FSM goroutine is busy and unavailable to accept new work. | percentage | sample | - -**Why they're important:** These measurements are a useful proxy for how much -capacity a Consul server has to accept additional write load. High saturation -of the Raft goroutines can lead to elevated latency in the rest of the system -and cause cluster instability. - -**What to look for:** Generally, a server's steady-state saturation should be -less than 50%. - -**NOTE:** These metrics are approximate and under extremely heavy load won't -give a perfect fine-grained view of how much headroom a server has available. -Instead, treat them as an early warning sign. - -** Requirements: ** -* Consul 1.13.0+ - ### Raft Replication Capacity Issues | Metric Name | Description | Unit | Type | diff --git a/website/content/docs/connect/ca/vault.mdx b/website/content/docs/connect/ca/vault.mdx index 02294c2c26d75..7ab597ffcc6f4 100644 --- a/website/content/docs/connect/ca/vault.mdx +++ b/website/content/docs/connect/ca/vault.mdx @@ -137,7 +137,7 @@ The configuration options are listed below. that authorized it. - `RootPKINamespace` / `root_pki_namespace` (`string: `) - The absolute namespace - that the `RootPKIPath` is in. Setting this overrides the `Namespace` option for the `RootPKIPath`. Introduced in 1.12.1 + that the `RootPKIPath` is in. Setting this parameter overrides the `Namespace` option for the `RootPKIPath`. Introduced in 1.12.1. - `IntermediatePKIPath` / `intermediate_pki_path` (`string: `) - The path to a PKI secrets engine for the generated intermediate certificate. @@ -149,7 +149,7 @@ The configuration options are listed below. datacenter must specify a unique `intermediate_pki_path`. - `IntermediatePKINamespace` / `intermediate_pki_namespace` (`string: `) - The absolute namespace - that the `IntermediatePKIPath` is in. Setting this overrides the `Namespace` option for the `IntermediatePKIPath`. Introduced in 1.12.1 + that the `IntermediatePKIPath` is in. Setting this parameter overrides the `Namespace` option for the `IntermediatePKIPath`. Introduced in 1.12.1. - `CAFile` / `ca_file` (`string: ""`) - Specifies an optional path to the CA certificate used for Vault communication. If unspecified, this will fallback diff --git a/website/content/docs/ecs/terraform/install.mdx b/website/content/docs/ecs/terraform/install.mdx index e810e141ae6bb..0e690e5601bfd 100644 --- a/website/content/docs/ecs/terraform/install.mdx +++ b/website/content/docs/ecs/terraform/install.mdx @@ -64,7 +64,6 @@ module "my_task" { port = 9090 retry_join = ["
"] - consul_datacenter = "" } ``` @@ -81,7 +80,6 @@ The following fields are required. Refer to the [module reference documentation] | `essential` | boolean | Must be `true` to ensure the health of your application container affects the health status of the task. | | `port` | integer | The port that your application listens on, if any. If your application does not listen on a port, set `outbound_only = true`. | | `retry_join` | list | The is the [`retry_join`](/docs/agent/options#_retry_join) option for the Consul agent, which specifies the locations of your Consul servers. | -| `consul_datacenter` | string | The name of your Consul datacenter. | ### Running Terraform diff --git a/website/content/docs/k8s/operations/gossip-encryption-key-rotation.mdx b/website/content/docs/k8s/operations/gossip-encryption-key-rotation.mdx index 6270f926f60af..0161ec32362e4 100644 --- a/website/content/docs/k8s/operations/gossip-encryption-key-rotation.mdx +++ b/website/content/docs/k8s/operations/gossip-encryption-key-rotation.mdx @@ -15,7 +15,7 @@ The following steps need only be performed once in any single datacenter if your 1. (Optional) If Consul is installed in a dedicated namespace, set the kubeConfig context to the consul namespace. Otherwise, subsequent commands will need to include -n consul. ```shell-session - $ kubectl config set-context --current --namespace=consul + kubectl config set-context --current --namespace=consul ``` 1. Generate a new key and store in safe place for retrieval in the future ([Vault KV Secrets Engine](https://www.vaultproject.io/docs/secrets/kv/kv-v2#usage) is a recommended option). @@ -31,7 +31,7 @@ The following steps need only be performed once in any single datacenter if your 1. `kubectl exec` into a Consul Agent pod (Server or Client) and add the new key to the Consul Keyring. This can be performed by running the following command: ```shell-session - $ kubectl exec -it consul-server-0 -- /bin/sh + kubectl exec -it consul-server-0 -- /bin/sh ``` 1. **Note:** If ACLs are enabled, export the bootstrap token as the CONSUL_HTTP_TOKEN to perform all `consul keyring` operations. The bootstrap token can be found in the Kubernetes secret `consul-bootstrap-acl-token` of the primary datacenter. @@ -43,7 +43,7 @@ The following steps need only be performed once in any single datacenter if your 1. Install the new Gossip encryption key with the `consul keyring` command: ```shell-session - $ consul keyring -install="Wa6/XFAnYy0f9iqVH2iiG+yore3CqHSemUy4AIVTa/w=" + consul keyring -install="Wa6/XFAnYy0f9iqVH2iiG+yore3CqHSemUy4AIVTa/w=" ==> Installing new gossip encryption key... ``` Consul automatically propagates this encryption key across all clients and servers across the cluster and the federation if Consul federation is enabled. @@ -51,7 +51,7 @@ The following steps need only be performed once in any single datacenter if your 1. List the keys in the keyring to verify the new key has been installed successfully. ```shell-session - $ consul keyring -list + consul keyring -list ==> Gathering installed encryption keys... WAN: @@ -72,14 +72,14 @@ The following steps need only be performed once in any single datacenter if your 1. After the new key has been added to the keychain, you can install it as the new gossip encryption key. Run the following command in the Consul Agent pod using `kubectl exec`: ```shell-session - $ consul keyring -use="Wa6/XFAnYy0f9iqVH2iiG+yore3CqHSemUy4AIVTa/w=" + consul keyring -use="Wa6/XFAnYy0f9iqVH2iiG+yore3CqHSemUy4AIVTa/w=" ==> Changing primary gossip encryption key... ``` 1. You can ensure that the key has been propagated to all agents by verifying the number of agents that recognize the key over the number of total agents in the datacenter. Listing them provides that information. ```shell-session - $ consul keyring -list + consul keyring -list ==> Gathering installed encryption keys... WAN: @@ -95,9 +95,7 @@ The following steps need only be performed once in any single datacenter if your Wa6/XFAnYy0f9iqVH2iiG+yore3CqHSemUy4AIVTa/w= [4/4] ``` -1. Update the Kubernetes or Vault secrets with the latest gossip encryption key. - - +1. Update the Kubernetes secrets with the latest gossip encryption key. Update the gossip encryption Kubernetes Secret with the value of the new gossip encryption key to ensure that subsequent `helm upgrades` commands execute successfully. The name of the secret that stores the value of the gossip encryption key can be found in the Helm values file: @@ -124,38 +122,6 @@ The following steps need only be performed once in any single datacenter if your ```shell-session $ kubectl patch secret consul-federation --patch='{"stringData":{"gossipEncryptionKey": "Wa6/XFAnYy0f9iqVH2iiG+yore3CqHSemUy4AIVTa/w="}}' ``` - - - - -> **Note:** These Vault instructions assume that you have integrated your [Gossip encryption key](/docs/k8s/installation/vault/data-integration/gossip) using [Vault as a Secrets Backend](/docs/k8s/installation/vault). - - Update the gossip encryption Vault Secret with the value of the new gossip encryption key to ensure that subsequent `helm upgrades` commands execute successfully. - The name of the secret that stores the value of the gossip encryption key can be found in the Helm values file: - ```yaml - global: - gossipEncryption: - secretName: secret/data/consul/gossip-encryption - secretKey: key - ``` - - ```shell-session - $ vault kv put secret/consul/gossip-encryption key="Wa6/XFAnYy0f9iqVH2iiG+yore3CqHSemUy4AIVTa/w=" - ``` - - **Note:** In the case of federated Consul clusters, update the federation-secret value for the gossip encryption key. The name of the secret and key can be found in the values file of the secondary datacenter. - - ```yaml - global: - gossipEncryption: - secretName: consul-federation - secretKey: gossip-key - ``` - - ```shell-session - $ vault kv put secret/consul/consul-federation gossip-key="Wa6/XFAnYy0f9iqVH2iiG+yore3CqHSemUy4AIVTa/w=" - ``` - - 1. Remove the old key once the new one has been installed successfully. @@ -166,10 +132,10 @@ The following steps need only be performed once in any single datacenter if your 1. **Note:** If ACLs are enabled, export the bootstrap token as the CONSUL_HTTP_TOKEN to perform all `consul keyring` operations. ```shell-session - $ export CONSUL_HTTP_TOKEN= + export CONSUL_HTTP_TOKEN= ``` 1. Remove old Gossip encryption key with the `consul keyring` command: ```shell-session - $ consul keyring -remove="CL6M+jKj3630CZLXI0IRVeyci1jgIAveiZKvdtTybbA=" + consul keyring -remove="CL6M+jKj3630CZLXI0IRVeyci1jgIAveiZKvdtTybbA=" ==> Removing gossip encryption key... ```